Skip to content

Commit 51aa080

Browse files
PavanNikhileshJerin Jacob
authored andcommitted
common/cnxk: fix IRQ reconfiguration
Unregister SSO device and NPA IRQs before resizing IRQs to cleanup stale IRQ handles. Fixes: 993107f ("common/cnxk: limit SSO interrupt allocation count") Cc: [email protected] Signed-off-by: Pavan Nikhilesh <[email protected]>
1 parent 3347d7a commit 51aa080

File tree

3 files changed

+16
-9
lines changed

3 files changed

+16
-9
lines changed

drivers/common/cnxk/roc_dev.c

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,8 +1047,8 @@ mbox_unregister_vf_irq(struct plt_pci_device *pci_dev, struct dev *dev)
10471047
dev_irq_unregister(intr_handle, roc_pf_vf_mbox_irq, dev, RVU_VF_INT_VEC_MBOX);
10481048
}
10491049

1050-
static void
1051-
mbox_unregister_irq(struct plt_pci_device *pci_dev, struct dev *dev)
1050+
void
1051+
dev_mbox_unregister_irq(struct plt_pci_device *pci_dev, struct dev *dev)
10521052
{
10531053
if (dev_is_vf(dev))
10541054
mbox_unregister_vf_irq(pci_dev, dev);
@@ -1126,8 +1126,8 @@ roc_pf_vf_flr_irq(void *param)
11261126
}
11271127
}
11281128

1129-
static int
1130-
vf_flr_unregister_irqs(struct plt_pci_device *pci_dev, struct dev *dev)
1129+
void
1130+
dev_vf_flr_unregister_irqs(struct plt_pci_device *pci_dev, struct dev *dev)
11311131
{
11321132
struct plt_intr_handle *intr_handle = pci_dev->intr_handle;
11331133
int i;
@@ -1143,8 +1143,6 @@ vf_flr_unregister_irqs(struct plt_pci_device *pci_dev, struct dev *dev)
11431143

11441144
dev_irq_unregister(intr_handle, roc_pf_vf_flr_irq, dev,
11451145
RVU_PF_INT_VEC_VFFLR1);
1146-
1147-
return 0;
11481146
}
11491147

11501148
int
@@ -1723,7 +1721,7 @@ dev_init(struct dev *dev, struct plt_pci_device *pci_dev)
17231721
iounmap:
17241722
dev_vf_mbase_put(pci_dev, vf_mbase);
17251723
mbox_unregister:
1726-
mbox_unregister_irq(pci_dev, dev);
1724+
dev_mbox_unregister_irq(pci_dev, dev);
17271725
if (dev->ops)
17281726
plt_free(dev->ops);
17291727
mbox_fini:
@@ -1761,10 +1759,10 @@ dev_fini(struct dev *dev, struct plt_pci_device *pci_dev)
17611759
if (dev->lmt_mz)
17621760
plt_memzone_free(dev->lmt_mz);
17631761

1764-
mbox_unregister_irq(pci_dev, dev);
1762+
dev_mbox_unregister_irq(pci_dev, dev);
17651763

17661764
if (!dev_is_vf(dev)) {
1767-
vf_flr_unregister_irqs(pci_dev, dev);
1765+
dev_vf_flr_unregister_irqs(pci_dev, dev);
17681766
/* Releasing memory allocated for mbox region */
17691767
if (dev->vf_mbox_mz)
17701768
plt_memzone_free(dev->vf_mbox_mz);

drivers/common/cnxk/roc_dev_priv.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,8 @@ int dev_irqs_disable(struct plt_intr_handle *intr_handle);
170170
int dev_irq_reconfigure(struct plt_intr_handle *intr_handle, uint16_t max_intr);
171171

172172
int dev_mbox_register_irq(struct plt_pci_device *pci_dev, struct dev *dev);
173+
void dev_mbox_unregister_irq(struct plt_pci_device *pci_dev, struct dev *dev);
173174
int dev_vf_flr_register_irqs(struct plt_pci_device *pci_dev, struct dev *dev);
175+
void dev_vf_flr_unregister_irqs(struct plt_pci_device *pci_dev, struct dev *dev);
174176

175177
#endif /* _ROC_DEV_PRIV_H */

drivers/common/cnxk/roc_sso.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -842,7 +842,14 @@ sso_update_msix_vec_count(struct roc_sso *roc_sso, uint16_t sso_vec_cnt)
842842
return dev_irq_reconfigure(pci_dev->intr_handle, mbox_vec_cnt + npa_vec_cnt);
843843
}
844844

845+
/* Before re-configuring unregister irqs */
845846
npa_vec_cnt = (dev->npa.pci_dev == pci_dev) ? NPA_LF_INT_VEC_POISON + 1 : 0;
847+
if (npa_vec_cnt)
848+
npa_unregister_irqs(&dev->npa);
849+
850+
dev_mbox_unregister_irq(pci_dev, dev);
851+
if (!dev_is_vf(dev))
852+
dev_vf_flr_unregister_irqs(pci_dev, dev);
846853

847854
/* Re-configure to include SSO vectors */
848855
rc = dev_irq_reconfigure(pci_dev->intr_handle, mbox_vec_cnt + npa_vec_cnt + sso_vec_cnt);

0 commit comments

Comments
 (0)