Message ID | 20210720232624.1493424-12-nitesh@redhat.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | genirq: Cleanup the abuse of irq_set_affinity_hint() | expand |
On 7/20/2021 4:26 PM, Nitesh Narayan Lal wrote: > The driver uses irq_set_affinity_hint to set the affinity for the lpfc > interrupts to a mask corresponding to the local NUMA node to avoid > performance overhead on AMD architectures. > > However, irq_set_affinity_hint() setting the affinity is an undocumented > side effect that this function also sets the affinity under the hood. > To remove this side effect irq_set_affinity_hint() has been marked as > deprecated and new interfaces have been introduced. > > Also, as per the commit dcaa21367938 ("scsi: lpfc: Change default IRQ model > on AMD architectures"): > "On AMD architecture, revert the irq allocation to the normal style > (non-managed) and then use irq_set_affinity_hint() to set the cpu affinity > and disable user-space rebalancing." > we don't really need to set the affinity_hint as user-space rebalancing for > the lpfc interrupts is not desired. > > Hence, replace the irq_set_affinity_hint() with irq_set_affinity() which > only applies the affinity for the interrupts. > > Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com> > --- > drivers/scsi/lpfc/lpfc_init.c | 4 +--- > 1 file changed, 1 insertion(+), 3 deletions(-) > Looks good. Thanks Reviewed-by: James Smart <jsmart2021@gmail.com> -- james
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c index 5983e05b648f..8a16bacb8c93 100644 --- a/drivers/scsi/lpfc/lpfc_init.c +++ b/drivers/scsi/lpfc/lpfc_init.c @@ -11455,7 +11455,7 @@ lpfc_irq_set_aff(struct lpfc_hba_eq_hdl *eqhdl, unsigned int cpu) cpumask_clear(&eqhdl->aff_mask); cpumask_set_cpu(cpu, &eqhdl->aff_mask); irq_set_status_flags(eqhdl->irq, IRQ_NO_BALANCING); - irq_set_affinity_hint(eqhdl->irq, &eqhdl->aff_mask); + irq_set_affinity(eqhdl->irq, &eqhdl->aff_mask); } /** @@ -11744,7 +11744,6 @@ lpfc_sli4_enable_msix(struct lpfc_hba *phba) for (--index; index >= 0; index--) { eqhdl = lpfc_get_eq_hdl(index); lpfc_irq_clear_aff(eqhdl); - irq_set_affinity_hint(eqhdl->irq, NULL); free_irq(eqhdl->irq, eqhdl); } @@ -11905,7 +11904,6 @@ lpfc_sli4_disable_intr(struct lpfc_hba *phba) for (index = 0; index < phba->cfg_irq_chann; index++) { eqhdl = lpfc_get_eq_hdl(index); lpfc_irq_clear_aff(eqhdl); - irq_set_affinity_hint(eqhdl->irq, NULL); free_irq(eqhdl->irq, eqhdl); } } else {
The driver uses irq_set_affinity_hint to set the affinity for the lpfc interrupts to a mask corresponding to the local NUMA node to avoid performance overhead on AMD architectures. However, irq_set_affinity_hint() setting the affinity is an undocumented side effect that this function also sets the affinity under the hood. To remove this side effect irq_set_affinity_hint() has been marked as deprecated and new interfaces have been introduced. Also, as per the commit dcaa21367938 ("scsi: lpfc: Change default IRQ model on AMD architectures"): "On AMD architecture, revert the irq allocation to the normal style (non-managed) and then use irq_set_affinity_hint() to set the cpu affinity and disable user-space rebalancing." we don't really need to set the affinity_hint as user-space rebalancing for the lpfc interrupts is not desired. Hence, replace the irq_set_affinity_hint() with irq_set_affinity() which only applies the affinity for the interrupts. Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com> --- drivers/scsi/lpfc/lpfc_init.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)