diff --git a/drivers/net/ethernet/nvidia/nvethernet/macsec.c b/drivers/net/ethernet/nvidia/nvethernet/macsec.c index 3d6a6524..80bc1a1d 100644 --- a/drivers/net/ethernet/nvidia/nvethernet/macsec.c +++ b/drivers/net/ethernet/nvidia/nvethernet/macsec.c @@ -152,8 +152,15 @@ int macsec_close(struct macsec_priv_data *macsec_pdata) macsec_pdata->enabled = OSI_DISABLE; osi_macsec_deinit(pdata->osi_core); - devm_free_irq(dev, macsec_pdata->ns_irq, macsec_pdata); - devm_free_irq(dev, macsec_pdata->s_irq, macsec_pdata); + if (macsec_pdata->is_irq_allocated & OSI_BIT(1)) { + devm_free_irq(dev, macsec_pdata->ns_irq, macsec_pdata); + macsec_pdata->is_irq_allocated &= ~OSI_BIT(1); + } + if (macsec_pdata->is_irq_allocated & OSI_BIT(0)) { + devm_free_irq(dev, macsec_pdata->s_irq, macsec_pdata); + macsec_pdata->is_irq_allocated &= ~OSI_BIT(0); + } + PRINT_EXIT(); return ret; @@ -180,6 +187,7 @@ int macsec_open(struct macsec_priv_data *macsec_pdata, dev_info(dev, "%s: requested s_irq %d: %s\n", __func__, macsec_pdata->s_irq, macsec_pdata->irq_name[0]); + macsec_pdata->is_irq_allocated |= OSI_BIT(0); snprintf(macsec_pdata->irq_name[1], MACSEC_IRQ_NAME_SZ, "%s.macsec_ns", netdev_name(pdata->ndev)); @@ -193,6 +201,7 @@ int macsec_open(struct macsec_priv_data *macsec_pdata, dev_info(dev, "%s: requested ns_irq %d: %s\n", __func__, macsec_pdata->ns_irq, macsec_pdata->irq_name[1]); + macsec_pdata->is_irq_allocated |= OSI_BIT(1); /* Invoke OSI HW initialization, initialize standard BYP entries */ ret = osi_macsec_init(pdata->osi_core); diff --git a/drivers/net/ethernet/nvidia/nvethernet/macsec.h b/drivers/net/ethernet/nvidia/nvethernet/macsec.h index 578d637f..ffdfd761 100644 --- a/drivers/net/ethernet/nvidia/nvethernet/macsec.h +++ b/drivers/net/ethernet/nvidia/nvethernet/macsec.h @@ -154,6 +154,8 @@ struct macsec_priv_data { int s_irq; /** Non secure irq */ int ns_irq; + /** is_irq_allocated BIT(0)for s_irq and BIT(1)for ns_irq*/ + unsigned int is_irq_allocated; /** pointer to ether private data struct */ struct ether_priv_data *ether_pdata; /** macsec IRQ name strings */