linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint()
@ 2021-07-20 23:26 Nitesh Narayan Lal
  2021-07-20 23:26 ` [PATCH v5 01/14] genirq: Provide new interfaces for affinity hints Nitesh Narayan Lal
                   ` (14 more replies)
  0 siblings, 15 replies; 28+ messages in thread
From: Nitesh Narayan Lal @ 2021-07-20 23:26 UTC (permalink / raw)
  To: linux-kernel, linux-scsi, intel-wired-lan, netdev, linux-api,
	linux-pci, tglx, jesse.brandeburg, robin.murphy, mtosatti, mingo,
	jbrandeb, frederic, juri.lelli, abelits, bhelgaas, rostedt,
	peterz, davem, akpm, sfr, stephen, rppt, chris.friesen, maz,
	nhorman, pjwaskiewicz, sassmann, thenzl, kashyap.desai,
	sumit.saxena, shivasharan.srikanteshwara, sathya.prakash,
	sreekanth.reddy, suganath-prabu.subramani, james.smart,
	dick.kennedy, jkc, faisal.latif, shiraz.saleem, tariqt, ahleihel,
	kheib, borisp, saeedm, benve, govind, jassisinghbrar,
	ajit.khaparde, sriharsha.basavapatna, somnath.kotur, nilal,
	tatyana.e.nikolova, mustafa.ismail, ahs3, leonro,
	chandrakanth.patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, poros, minlei, emilne, jejb, martin.petersen,
	_govind, kabel, viresh.kumar, Tushar.Khandelwal, kuba

The drivers currently rely on irq_set_affinity_hint() to either set the
affinity_hint that is consumed by the userspace and/or to enforce a custom
affinity.

irq_set_affinity_hint() as the name suggests is originally introduced to
only set the affinity_hint to help the userspace in guiding the interrupts
and not the affinity itself. However, since the commit

        e2e64a932556 "genirq: Set initial affinity in irq_set_affinity_hint()"

irq_set_affinity_hint() also started applying the provided cpumask (if not
NULL) as the affinity for the interrupts. The issue that this commit was
trying to solve is to allow the drivers to enforce their affinity mask to
distribute the interrupts across the CPUs such that they don't always end
up on CPU0. This issue has been resolved within the irq subsystem since the
commit

        a0c9259dc4e1 "irq/matrix: Spread interrupts on allocation"

Hence, there is no need for the drivers to overwrite the affinity to spread
as it is dynamically performed at the time of allocation.

Also, irq_set_affinity_hint() setting affinity unconditionally introduces
issues for the drivers that only want to set their affinity_hint and not the
affinity itself as for these driver interrupts the default_smp_affinity_mask
is completely ignored (for detailed investigation please refer to [1]).

Unfortunately reverting the commit e2e64a932556 is not an option at this
point for two reasons [2]:

- Several drivers for a valid reason (performance) rely on this API to
  enforce their affinity mask

- Until very recently this was the only exported interface that was
  available

To clear this out Thomas has come up with the following interfaces:

- irq_set_affinity(): only sets affinity of an IRQ [3]
- irq_update_affinity_hint(): Only sets the hint [4]
- irq_set_affinity_and_hint(): Sets both affinity and the hint mask [4]

The first API is already merged in the linus's tree and the patch
that introduces the other two interfaces is included with this patch-set.

To move to the stage where we can safely get rid of the
irq_set_affinity_hint(), which has been marked deprecated, we have to
move all its consumers to these new interfaces. In this patch-set, I have
done that for a few drivers and will hopefully try to move the remaining of
them in the coming days.

Testing
-------
In terms of testing, I have performed some basic testing on x86 to verify
things such as the interrupts are evenly spread on all CPUs, hint mask is
correctly set etc. for the drivers - i40e, iavf, mlx5, mlx4, ixgbe, and
enic on top of:

        git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git

So more testing is probably required for these and the drivers that I didn't
test and any help will be much appreciated.


Notes
-----
- For the mpt3sas driver I decided to go with the usage of
  irq_set_affinity_and_hint over irq_set_affinity based on my analysis of
  it and the megaraid driver. However, if we are sure that it is not
  required then I can replace it with just irq_set_affinity as one of its
  comment suggests.

Change from v4 [5]
------------------
- Fixed kernel-doc warnings (Jakub Kicinski)

- Renamed the cover to "Cleanup the abuse of irq_set_affinity_hint()", what
  Thomas originally used as this series is an extension of the work that
  he started and proposed [6].

Change from v3 [7]
------------------
- Replaced irq_set_affinity_and_hint with irq_update_affinity_hint in irdma
  (Leon Romanovsky)
- rebased the patches on top of 5.14-rc2


Change from v2 [8]
------------------

- Rebased on top of 5.14-rc1 (Leon Romanovsky)
  + After discussion with Leon [9], made changes in the mlx5 patch to use
    irq_set_affinity_and_hint over irq_update_affinity_hint
  + i40iw is replaced with irdma driver, hence made the respective changes
    in irdma (also replcaed irq_update_affinity_hint with
    irq_set_affinity_and_hint).

Change from v1 [10]
------------------
- Fixed compilation error by adding the new interface definitions for cases
  where CONFIG_SMP is not defined

- Fixed function usage in megaraid_sas and removed unnecessary variable
  (Robin Murphy)

- Removed unwanted #if/endif from mlx4 (Leon Romanovsky)

- Other indentation related fixes

 
[1] https://lore.kernel.org/lkml/1a044a14-0884-eedb-5d30-28b4bec24b23@redhat.com/
[2] https://lore.kernel.org/linux-pci/d1d5e797-49ee-4968-88c6-c07119343492@arm.com/
[3] https://lore.kernel.org/linux-arm-kernel/20210518091725.046774792@linutronix.de/
[4] https://lore.kernel.org/patchwork/patch/1434326/
[5] https://lore.kernel.org/lkml/20210719180746.1008665-1-nitesh@redhat.com/
[6] https://lore.kernel.org/linux-arm-kernel/20210518091725.046774792@linutronix.de/
[7] https://lore.kernel.org/linux-scsi/20210713211502.464259-1-nitesh@redhat.com/
[8] https://lore.kernel.org/lkml/20210629152746.2953364-1-nitesh@redhat.com/
[9] https://lore.kernel.org/lkml/YO0eKv2GJcADQTHH@unreal/
[10] https://lore.kernel.org/linux-scsi/20210617182242.8637-1-nitesh@redhat.com/

Nitesh Narayan Lal (13):
  iavf: Use irq_update_affinity_hint
  i40e: Use irq_update_affinity_hint
  scsi: megaraid_sas: Use irq_set_affinity_and_hint
  scsi: mpt3sas: Use irq_set_affinity_and_hint
  RDMA/irdma: Use irq_update_affinity_hint
  enic: Use irq_update_affinity_hint
  be2net: Use irq_update_affinity_hint
  ixgbe: Use irq_update_affinity_hint
  mailbox: Use irq_update_affinity_hint
  scsi: lpfc: Use irq_set_affinity
  hinic: Use irq_set_affinity_and_hint
  net/mlx5: Use irq_set_affinity_and_hint
  net/mlx4: Use irq_update_affinity_hint

Thomas Gleixner (1):
  genirq: Provide new interfaces for affinity hints

 drivers/infiniband/hw/irdma/hw.c              |  4 +-
 drivers/mailbox/bcm-flexrm-mailbox.c          |  4 +-
 drivers/net/ethernet/cisco/enic/enic_main.c   |  8 +--
 drivers/net/ethernet/emulex/benet/be_main.c   |  4 +-
 drivers/net/ethernet/huawei/hinic/hinic_rx.c  |  4 +-
 drivers/net/ethernet/intel/i40e/i40e_main.c   |  8 +--
 drivers/net/ethernet/intel/iavf/iavf_main.c   |  8 +--
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 10 ++--
 drivers/net/ethernet/mellanox/mlx4/eq.c       |  8 ++-
 .../net/ethernet/mellanox/mlx5/core/pci_irq.c |  8 +--
 drivers/scsi/lpfc/lpfc_init.c                 |  4 +-
 drivers/scsi/megaraid/megaraid_sas_base.c     | 27 +++++-----
 drivers/scsi/mpt3sas/mpt3sas_base.c           | 21 ++++----
 include/linux/interrupt.h                     | 53 ++++++++++++++++++-
 kernel/irq/manage.c                           |  8 +--
 15 files changed, 114 insertions(+), 65 deletions(-)

--  



^ permalink raw reply	[flat|nested] 28+ messages in thread

* [PATCH v5 01/14] genirq: Provide new interfaces for affinity hints
  2021-07-20 23:26 [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint() Nitesh Narayan Lal
@ 2021-07-20 23:26 ` Nitesh Narayan Lal
  2021-08-06 15:51   ` Ming Lei
  2021-07-20 23:26 ` [PATCH v5 02/14] iavf: Use irq_update_affinity_hint Nitesh Narayan Lal
                   ` (13 subsequent siblings)
  14 siblings, 1 reply; 28+ messages in thread
From: Nitesh Narayan Lal @ 2021-07-20 23:26 UTC (permalink / raw)
  To: linux-kernel, linux-scsi, intel-wired-lan, netdev, linux-api,
	linux-pci, tglx, jesse.brandeburg, robin.murphy, mtosatti, mingo,
	jbrandeb, frederic, juri.lelli, abelits, bhelgaas, rostedt,
	peterz, davem, akpm, sfr, stephen, rppt, chris.friesen, maz,
	nhorman, pjwaskiewicz, sassmann, thenzl, kashyap.desai,
	sumit.saxena, shivasharan.srikanteshwara, sathya.prakash,
	sreekanth.reddy, suganath-prabu.subramani, james.smart,
	dick.kennedy, jkc, faisal.latif, shiraz.saleem, tariqt, ahleihel,
	kheib, borisp, saeedm, benve, govind, jassisinghbrar,
	ajit.khaparde, sriharsha.basavapatna, somnath.kotur, nilal,
	tatyana.e.nikolova, mustafa.ismail, ahs3, leonro,
	chandrakanth.patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, poros, minlei, emilne, jejb, martin.petersen,
	_govind, kabel, viresh.kumar, Tushar.Khandelwal, kuba

From: Thomas Gleixner <tglx@linutronix.de>

The discussion about removing the side effect of irq_set_affinity_hint() of
actually applying the cpumask (if not NULL) as affinity to the interrupt,
unearthed a few unpleasantries:

  1) The modular perf drivers rely on the current behaviour for the very
     wrong reasons.

  2) While none of the other drivers prevents user space from changing
     the affinity, a cursorily inspection shows that there are at least
     expectations in some drivers.

#1 needs to be cleaned up anyway, so that's not a problem

#2 might result in subtle regressions especially when irqbalanced (which
   nowadays ignores the affinity hint) is disabled.

Provide new interfaces:

  irq_update_affinity_hint()  - Only sets the affinity hint pointer
  irq_set_affinity_and_hint() - Set the pointer and apply the affinity to
                                the interrupt

Make irq_set_affinity_hint() a wrapper around irq_apply_affinity_hint() and
document it to be phased out.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com>
Link: https://lore.kernel.org/r/20210501021832.743094-1-jesse.brandeburg@intel.com
---
 include/linux/interrupt.h | 53 ++++++++++++++++++++++++++++++++++++++-
 kernel/irq/manage.c       |  8 +++---
 2 files changed, 56 insertions(+), 5 deletions(-)

diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index 2ed65b01c961..c2563a9321d7 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -328,7 +328,46 @@ extern int irq_force_affinity(unsigned int irq, const struct cpumask *cpumask);
 extern int irq_can_set_affinity(unsigned int irq);
 extern int irq_select_affinity(unsigned int irq);
 
-extern int irq_set_affinity_hint(unsigned int irq, const struct cpumask *m);
+extern int __irq_apply_affinity_hint(unsigned int irq, const struct cpumask *m,
+				     bool setaffinity);
+
+/**
+ * irq_update_affinity_hint - Update the affinity hint
+ * @irq:	Interrupt to update
+ * @m:		cpumask pointer (NULL to clear the hint)
+ *
+ * Updates the affinity hint, but does not change the affinity of the interrupt.
+ */
+static inline int
+irq_update_affinity_hint(unsigned int irq, const struct cpumask *m)
+{
+	return __irq_apply_affinity_hint(irq, m, false);
+}
+
+/**
+ * irq_set_affinity_and_hint - Update the affinity hint and apply the provided
+ *			     cpumask to the interrupt
+ * @irq:	Interrupt to update
+ * @m:		cpumask pointer (NULL to clear the hint)
+ *
+ * Updates the affinity hint and if @m is not NULL it applies it as the
+ * affinity of that interrupt.
+ */
+static inline int
+irq_set_affinity_and_hint(unsigned int irq, const struct cpumask *m)
+{
+	return __irq_apply_affinity_hint(irq, m, true);
+}
+
+/*
+ * Deprecated. Use irq_update_affinity_hint() or irq_set_affinity_and_hint()
+ * instead.
+ */
+static inline int irq_set_affinity_hint(unsigned int irq, const struct cpumask *m)
+{
+	return irq_set_affinity_and_hint(irq, m);
+}
+
 extern int irq_update_affinity_desc(unsigned int irq,
 				    struct irq_affinity_desc *affinity);
 
@@ -360,6 +399,18 @@ static inline int irq_can_set_affinity(unsigned int irq)
 
 static inline int irq_select_affinity(unsigned int irq)  { return 0; }
 
+static inline int irq_update_affinity_hint(unsigned int irq,
+					   const struct cpumask *m)
+{
+	return -EINVAL;
+}
+
+static inline int irq_set_affinity_and_hint(unsigned int irq,
+					    const struct cpumask *m)
+{
+	return -EINVAL;
+}
+
 static inline int irq_set_affinity_hint(unsigned int irq,
 					const struct cpumask *m)
 {
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index ef30b4762947..837b63e63111 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -487,7 +487,8 @@ int irq_force_affinity(unsigned int irq, const struct cpumask *cpumask)
 }
 EXPORT_SYMBOL_GPL(irq_force_affinity);
 
-int irq_set_affinity_hint(unsigned int irq, const struct cpumask *m)
+int __irq_apply_affinity_hint(unsigned int irq, const struct cpumask *m,
+			      bool setaffinity)
 {
 	unsigned long flags;
 	struct irq_desc *desc = irq_get_desc_lock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL);
@@ -496,12 +497,11 @@ int irq_set_affinity_hint(unsigned int irq, const struct cpumask *m)
 		return -EINVAL;
 	desc->affinity_hint = m;
 	irq_put_desc_unlock(desc, flags);
-	/* set the initial affinity to prevent every interrupt being on CPU0 */
-	if (m)
+	if (m && setaffinity)
 		__irq_set_affinity(irq, m, false);
 	return 0;
 }
-EXPORT_SYMBOL_GPL(irq_set_affinity_hint);
+EXPORT_SYMBOL_GPL(__irq_apply_affinity_hint);
 
 static void irq_affinity_notify(struct work_struct *work)
 {
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PATCH v5 02/14] iavf: Use irq_update_affinity_hint
  2021-07-20 23:26 [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint() Nitesh Narayan Lal
  2021-07-20 23:26 ` [PATCH v5 01/14] genirq: Provide new interfaces for affinity hints Nitesh Narayan Lal
@ 2021-07-20 23:26 ` Nitesh Narayan Lal
  2021-07-20 23:26 ` [PATCH v5 03/14] i40e: " Nitesh Narayan Lal
                   ` (12 subsequent siblings)
  14 siblings, 0 replies; 28+ messages in thread
From: Nitesh Narayan Lal @ 2021-07-20 23:26 UTC (permalink / raw)
  To: linux-kernel, linux-scsi, intel-wired-lan, netdev, linux-api,
	linux-pci, tglx, jesse.brandeburg, robin.murphy, mtosatti, mingo,
	jbrandeb, frederic, juri.lelli, abelits, bhelgaas, rostedt,
	peterz, davem, akpm, sfr, stephen, rppt, chris.friesen, maz,
	nhorman, pjwaskiewicz, sassmann, thenzl, kashyap.desai,
	sumit.saxena, shivasharan.srikanteshwara, sathya.prakash,
	sreekanth.reddy, suganath-prabu.subramani, james.smart,
	dick.kennedy, jkc, faisal.latif, shiraz.saleem, tariqt, ahleihel,
	kheib, borisp, saeedm, benve, govind, jassisinghbrar,
	ajit.khaparde, sriharsha.basavapatna, somnath.kotur, nilal,
	tatyana.e.nikolova, mustafa.ismail, ahs3, leonro,
	chandrakanth.patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, poros, minlei, emilne, jejb, martin.petersen,
	_govind, kabel, viresh.kumar, Tushar.Khandelwal, kuba

The driver uses irq_set_affinity_hint() for two purposes:

- To set the affinity_hint which is consumed by the userspace for
  distributing the interrupts

- To apply an affinity that it provides for the iavf interrupts

The latter is done to ensure that all the interrupts are evenly spread
across all available CPUs. However, since commit a0c9259dc4e1 ("irq/matrix:
Spread interrupts on allocation") the spreading of interrupts is
dynamically performed at the time of allocation. Hence, there is no need
for the drivers to enforce their own affinity for the spreading of
interrupts.

Also, irq_set_affinity_hint() applying the provided cpumask as an affinity
for the interrupt is an undocumented side effect. To remove this side
effect irq_set_affinity_hint() has been marked as deprecated and new
interfaces have been introduced. Hence, replace the irq_set_affinity_hint()
with the new interface irq_update_affinity_hint() that only sets the
pointer for the affinity_hint.

Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com>
Acked-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
---
 drivers/net/ethernet/intel/iavf/iavf_main.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/intel/iavf/iavf_main.c b/drivers/net/ethernet/intel/iavf/iavf_main.c
index 44bafedd09f2..7324eb4108ff 100644
--- a/drivers/net/ethernet/intel/iavf/iavf_main.c
+++ b/drivers/net/ethernet/intel/iavf/iavf_main.c
@@ -449,10 +449,10 @@ iavf_request_traffic_irqs(struct iavf_adapter *adapter, char *basename)
 		irq_set_affinity_notifier(irq_num, &q_vector->affinity_notify);
 		/* Spread the IRQ affinity hints across online CPUs. Note that
 		 * get_cpu_mask returns a mask with a permanent lifetime so
-		 * it's safe to use as a hint for irq_set_affinity_hint.
+		 * it's safe to use as a hint for irq_update_affinity_hint.
 		 */
 		cpu = cpumask_local_spread(q_vector->v_idx, -1);
-		irq_set_affinity_hint(irq_num, get_cpu_mask(cpu));
+		irq_update_affinity_hint(irq_num, get_cpu_mask(cpu));
 	}
 
 	return 0;
@@ -462,7 +462,7 @@ iavf_request_traffic_irqs(struct iavf_adapter *adapter, char *basename)
 		vector--;
 		irq_num = adapter->msix_entries[vector + NONQ_VECS].vector;
 		irq_set_affinity_notifier(irq_num, NULL);
-		irq_set_affinity_hint(irq_num, NULL);
+		irq_update_affinity_hint(irq_num, NULL);
 		free_irq(irq_num, &adapter->q_vectors[vector]);
 	}
 	return err;
@@ -514,7 +514,7 @@ static void iavf_free_traffic_irqs(struct iavf_adapter *adapter)
 	for (vector = 0; vector < q_vectors; vector++) {
 		irq_num = adapter->msix_entries[vector + NONQ_VECS].vector;
 		irq_set_affinity_notifier(irq_num, NULL);
-		irq_set_affinity_hint(irq_num, NULL);
+		irq_update_affinity_hint(irq_num, NULL);
 		free_irq(irq_num, &adapter->q_vectors[vector]);
 	}
 }
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PATCH v5 03/14] i40e: Use irq_update_affinity_hint
  2021-07-20 23:26 [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint() Nitesh Narayan Lal
  2021-07-20 23:26 ` [PATCH v5 01/14] genirq: Provide new interfaces for affinity hints Nitesh Narayan Lal
  2021-07-20 23:26 ` [PATCH v5 02/14] iavf: Use irq_update_affinity_hint Nitesh Narayan Lal
@ 2021-07-20 23:26 ` Nitesh Narayan Lal
  2021-07-20 23:26 ` [PATCH v5 04/14] scsi: megaraid_sas: Use irq_set_affinity_and_hint Nitesh Narayan Lal
                   ` (11 subsequent siblings)
  14 siblings, 0 replies; 28+ messages in thread
From: Nitesh Narayan Lal @ 2021-07-20 23:26 UTC (permalink / raw)
  To: linux-kernel, linux-scsi, intel-wired-lan, netdev, linux-api,
	linux-pci, tglx, jesse.brandeburg, robin.murphy, mtosatti, mingo,
	jbrandeb, frederic, juri.lelli, abelits, bhelgaas, rostedt,
	peterz, davem, akpm, sfr, stephen, rppt, chris.friesen, maz,
	nhorman, pjwaskiewicz, sassmann, thenzl, kashyap.desai,
	sumit.saxena, shivasharan.srikanteshwara, sathya.prakash,
	sreekanth.reddy, suganath-prabu.subramani, james.smart,
	dick.kennedy, jkc, faisal.latif, shiraz.saleem, tariqt, ahleihel,
	kheib, borisp, saeedm, benve, govind, jassisinghbrar,
	ajit.khaparde, sriharsha.basavapatna, somnath.kotur, nilal,
	tatyana.e.nikolova, mustafa.ismail, ahs3, leonro,
	chandrakanth.patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, poros, minlei, emilne, jejb, martin.petersen,
	_govind, kabel, viresh.kumar, Tushar.Khandelwal, kuba

The driver uses irq_set_affinity_hint() for two purposes:

- To set the affinity_hint which is consumed by the userspace for
  distributing the interrupts

- To apply an affinity that it provides for the i40e interrupts

The latter is done to ensure that all the interrupts are evenly spread
across all available CPUs. However, since commit a0c9259dc4e1 ("irq/matrix:
Spread interrupts on allocation") the spreading of interrupts is
dynamically performed at the time of allocation. Hence, there is no need
for the drivers to enforce their own affinity for the spreading of
interrupts.

Also, irq_set_affinity_hint() applying the provided cpumask as an affinity
for the interrupt is an undocumented side effect. To remove this side
effect irq_set_affinity_hint() has been marked as deprecated and new
interfaces have been introduced. Hence, replace the irq_set_affinity_hint()
with the new interface irq_update_affinity_hint() that only sets the
pointer for the affinity_hint.

Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com>
Acked-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
---
 drivers/net/ethernet/intel/i40e/i40e_main.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index 861e59a350bd..e2c525a6cab3 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -3873,10 +3873,10 @@ static int i40e_vsi_request_irq_msix(struct i40e_vsi *vsi, char *basename)
 		 *
 		 * get_cpu_mask returns a static constant mask with
 		 * a permanent lifetime so it's ok to pass to
-		 * irq_set_affinity_hint without making a copy.
+		 * irq_update_affinity_hint without making a copy.
 		 */
 		cpu = cpumask_local_spread(q_vector->v_idx, -1);
-		irq_set_affinity_hint(irq_num, get_cpu_mask(cpu));
+		irq_update_affinity_hint(irq_num, get_cpu_mask(cpu));
 	}
 
 	vsi->irqs_ready = true;
@@ -3887,7 +3887,7 @@ static int i40e_vsi_request_irq_msix(struct i40e_vsi *vsi, char *basename)
 		vector--;
 		irq_num = pf->msix_entries[base + vector].vector;
 		irq_set_affinity_notifier(irq_num, NULL);
-		irq_set_affinity_hint(irq_num, NULL);
+		irq_update_affinity_hint(irq_num, NULL);
 		free_irq(irq_num, &vsi->q_vectors[vector]);
 	}
 	return err;
@@ -4695,7 +4695,7 @@ static void i40e_vsi_free_irq(struct i40e_vsi *vsi)
 			/* clear the affinity notifier in the IRQ descriptor */
 			irq_set_affinity_notifier(irq_num, NULL);
 			/* remove our suggested affinity mask for this IRQ */
-			irq_set_affinity_hint(irq_num, NULL);
+			irq_update_affinity_hint(irq_num, NULL);
 			synchronize_irq(irq_num);
 			free_irq(irq_num, vsi->q_vectors[i]);
 
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PATCH v5 04/14] scsi: megaraid_sas: Use irq_set_affinity_and_hint
  2021-07-20 23:26 [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint() Nitesh Narayan Lal
                   ` (2 preceding siblings ...)
  2021-07-20 23:26 ` [PATCH v5 03/14] i40e: " Nitesh Narayan Lal
@ 2021-07-20 23:26 ` Nitesh Narayan Lal
  2021-08-06 11:31   ` Sumit Saxena
  2021-07-20 23:26 ` [PATCH v5 05/14] scsi: mpt3sas: " Nitesh Narayan Lal
                   ` (10 subsequent siblings)
  14 siblings, 1 reply; 28+ messages in thread
From: Nitesh Narayan Lal @ 2021-07-20 23:26 UTC (permalink / raw)
  To: linux-kernel, linux-scsi, intel-wired-lan, netdev, linux-api,
	linux-pci, tglx, jesse.brandeburg, robin.murphy, mtosatti, mingo,
	jbrandeb, frederic, juri.lelli, abelits, bhelgaas, rostedt,
	peterz, davem, akpm, sfr, stephen, rppt, chris.friesen, maz,
	nhorman, pjwaskiewicz, sassmann, thenzl, kashyap.desai,
	sumit.saxena, shivasharan.srikanteshwara, sathya.prakash,
	sreekanth.reddy, suganath-prabu.subramani, james.smart,
	dick.kennedy, jkc, faisal.latif, shiraz.saleem, tariqt, ahleihel,
	kheib, borisp, saeedm, benve, govind, jassisinghbrar,
	ajit.khaparde, sriharsha.basavapatna, somnath.kotur, nilal,
	tatyana.e.nikolova, mustafa.ismail, ahs3, leonro,
	chandrakanth.patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, poros, minlei, emilne, jejb, martin.petersen,
	_govind, kabel, viresh.kumar, Tushar.Khandelwal, kuba

The driver uses irq_set_affinity_hint() specifically for the high IOPS
queue interrupts for two purposes:

- To set the affinity_hint which is consumed by the userspace for
  distributing the interrupts

- To apply an affinity that it provides

The driver enforces its own affinity to bind the high IOPS queue interrupts
to the local NUMA node. However, irq_set_affinity_hint() applying the
provided cpumask as an affinity for the interrupt is an undocumented side
effect.

To remove this side effect irq_set_affinity_hint() has been marked
as deprecated and new interfaces have been introduced. Hence, replace the
irq_set_affinity_hint() with the new interface irq_set_affinity_and_hint()
where the provided mask needs to be applied as the affinity and
affinity_hint pointer needs to be set and replace with
irq_update_affinity_hint() where only affinity_hint needs to be updated.

Change the megasas_set_high_iops_queue_affinity_hint function name to
megasas_set_high_iops_queue_affinity_and_hint to clearly indicate that the
function is setting both affinity and affinity_hint.

Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com>
---
 drivers/scsi/megaraid/megaraid_sas_base.c | 27 +++++++++++++----------
 1 file changed, 15 insertions(+), 12 deletions(-)

diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
index ec10b2497310..836a1b13f71b 100644
--- a/drivers/scsi/megaraid/megaraid_sas_base.c
+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
@@ -5718,7 +5718,7 @@ megasas_setup_irqs_msix(struct megasas_instance *instance, u8 is_probe)
 				"Failed to register IRQ for vector %d.\n", i);
 			for (j = 0; j < i; j++) {
 				if (j < instance->low_latency_index_start)
-					irq_set_affinity_hint(
+					irq_update_affinity_hint(
 						pci_irq_vector(pdev, j), NULL);
 				free_irq(pci_irq_vector(pdev, j),
 					 &instance->irq_context[j]);
@@ -5761,7 +5761,7 @@ megasas_destroy_irqs(struct megasas_instance *instance) {
 	if (instance->msix_vectors)
 		for (i = 0; i < instance->msix_vectors; i++) {
 			if (i < instance->low_latency_index_start)
-				irq_set_affinity_hint(
+				irq_update_affinity_hint(
 				    pci_irq_vector(instance->pdev, i), NULL);
 			free_irq(pci_irq_vector(instance->pdev, i),
 				 &instance->irq_context[i]);
@@ -5892,22 +5892,25 @@ int megasas_get_device_list(struct megasas_instance *instance)
 }
 
 /**
- * megasas_set_high_iops_queue_affinity_hint -	Set affinity hint for high IOPS queues
- * @instance:					Adapter soft state
- * return:					void
+ * megasas_set_high_iops_queue_affinity_and_hint -	Set affinity and hint
+ *							for high IOPS queues
+ * @instance:						Adapter soft state
+ * return:						void
  */
 static inline void
-megasas_set_high_iops_queue_affinity_hint(struct megasas_instance *instance)
+megasas_set_high_iops_queue_affinity_and_hint(struct megasas_instance *instance)
 {
 	int i;
-	int local_numa_node;
+	unsigned int irq;
+	const struct cpumask *mask;
 
 	if (instance->perf_mode == MR_BALANCED_PERF_MODE) {
-		local_numa_node = dev_to_node(&instance->pdev->dev);
+		mask = cpumask_of_node(dev_to_node(&instance->pdev->dev));
 
-		for (i = 0; i < instance->low_latency_index_start; i++)
-			irq_set_affinity_hint(pci_irq_vector(instance->pdev, i),
-				cpumask_of_node(local_numa_node));
+		for (i = 0; i < instance->low_latency_index_start; i++) {
+			irq = pci_irq_vector(instance->pdev, i);
+			irq_set_affinity_and_hint(irq, mask);
+		}
 	}
 }
 
@@ -5996,7 +5999,7 @@ megasas_alloc_irq_vectors(struct megasas_instance *instance)
 		instance->msix_vectors = 0;
 
 	if (instance->smp_affinity_enable)
-		megasas_set_high_iops_queue_affinity_hint(instance);
+		megasas_set_high_iops_queue_affinity_and_hint(instance);
 }
 
 /**
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PATCH v5 05/14] scsi: mpt3sas: Use irq_set_affinity_and_hint
  2021-07-20 23:26 [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint() Nitesh Narayan Lal
                   ` (3 preceding siblings ...)
  2021-07-20 23:26 ` [PATCH v5 04/14] scsi: megaraid_sas: Use irq_set_affinity_and_hint Nitesh Narayan Lal
@ 2021-07-20 23:26 ` Nitesh Narayan Lal
  2021-08-06  8:54   ` Sreekanth Reddy
  2021-07-20 23:26 ` [PATCH v5 06/14] RDMA/irdma: Use irq_update_affinity_hint Nitesh Narayan Lal
                   ` (9 subsequent siblings)
  14 siblings, 1 reply; 28+ messages in thread
From: Nitesh Narayan Lal @ 2021-07-20 23:26 UTC (permalink / raw)
  To: linux-kernel, linux-scsi, intel-wired-lan, netdev, linux-api,
	linux-pci, tglx, jesse.brandeburg, robin.murphy, mtosatti, mingo,
	jbrandeb, frederic, juri.lelli, abelits, bhelgaas, rostedt,
	peterz, davem, akpm, sfr, stephen, rppt, chris.friesen, maz,
	nhorman, pjwaskiewicz, sassmann, thenzl, kashyap.desai,
	sumit.saxena, shivasharan.srikanteshwara, sathya.prakash,
	sreekanth.reddy, suganath-prabu.subramani, james.smart,
	dick.kennedy, jkc, faisal.latif, shiraz.saleem, tariqt, ahleihel,
	kheib, borisp, saeedm, benve, govind, jassisinghbrar,
	ajit.khaparde, sriharsha.basavapatna, somnath.kotur, nilal,
	tatyana.e.nikolova, mustafa.ismail, ahs3, leonro,
	chandrakanth.patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, poros, minlei, emilne, jejb, martin.petersen,
	_govind, kabel, viresh.kumar, Tushar.Khandelwal, kuba

The driver uses irq_set_affinity_hint() specifically for the high IOPS
queue interrupts for two purposes:

- To set the affinity_hint which is consumed by the userspace for
  distributing the interrupts

- To apply an affinity that it provides

The driver enforces its own affinity to bind the high IOPS queue interrupts
to the local NUMA node. However, irq_set_affinity_hint() applying the
provided cpumask as an affinity (if not NULL) for the interrupt is an
undocumented side effect.

To remove this side effect irq_set_affinity_hint() has been marked
as deprecated and new interfaces have been introduced. Hence, replace the
irq_set_affinity_hint() with the new interface irq_set_affinity_and_hint()
where the provided mask needs to be applied as the affinity and
affinity_hint pointer needs to be set and replace with
irq_update_affinity_hint() where only affinity_hint needs to be updated.

Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com>
---
 drivers/scsi/mpt3sas/mpt3sas_base.c | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index c39955239d1c..c1a11962f227 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -2991,6 +2991,7 @@ _base_check_enable_msix(struct MPT3SAS_ADAPTER *ioc)
 static void
 _base_free_irq(struct MPT3SAS_ADAPTER *ioc)
 {
+	unsigned int irq;
 	struct adapter_reply_queue *reply_q, *next;
 
 	if (list_empty(&ioc->reply_queue_list))
@@ -2998,9 +2999,10 @@ _base_free_irq(struct MPT3SAS_ADAPTER *ioc)
 
 	list_for_each_entry_safe(reply_q, next, &ioc->reply_queue_list, list) {
 		list_del(&reply_q->list);
-		if (ioc->smp_affinity_enable)
-			irq_set_affinity_hint(pci_irq_vector(ioc->pdev,
-			    reply_q->msix_index), NULL);
+		if (ioc->smp_affinity_enable) {
+			irq = pci_irq_vector(ioc->pdev, reply_q->msix_index);
+			irq_update_affinity_hint(irq, NULL);
+		}
 		free_irq(pci_irq_vector(ioc->pdev, reply_q->msix_index),
 			 reply_q);
 		kfree(reply_q);
@@ -3056,16 +3058,13 @@ _base_request_irq(struct MPT3SAS_ADAPTER *ioc, u8 index)
  * @ioc: per adapter object
  *
  * The enduser would need to set the affinity via /proc/irq/#/smp_affinity
- *
- * It would nice if we could call irq_set_affinity, however it is not
- * an exported symbol
  */
 static void
 _base_assign_reply_queues(struct MPT3SAS_ADAPTER *ioc)
 {
-	unsigned int cpu, nr_cpus, nr_msix, index = 0;
+	unsigned int cpu, nr_cpus, nr_msix, index = 0, irq;
 	struct adapter_reply_queue *reply_q;
-	int local_numa_node;
+	const struct cpumask *mask;
 
 	if (!_base_is_controller_msix_enabled(ioc))
 		return;
@@ -3088,11 +3087,11 @@ _base_assign_reply_queues(struct MPT3SAS_ADAPTER *ioc)
 		 * corresponding to high iops queues.
 		 */
 		if (ioc->high_iops_queues) {
-			local_numa_node = dev_to_node(&ioc->pdev->dev);
+			mask = cpumask_of_node(dev_to_node(&ioc->pdev->dev));
 			for (index = 0; index < ioc->high_iops_queues;
 			    index++) {
-				irq_set_affinity_hint(pci_irq_vector(ioc->pdev,
-				    index), cpumask_of_node(local_numa_node));
+				irq = pci_irq_vector(ioc->pdev, index);
+				irq_set_affinity_and_hint(irq, mask);
 			}
 		}
 
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PATCH v5 06/14] RDMA/irdma: Use irq_update_affinity_hint
  2021-07-20 23:26 [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint() Nitesh Narayan Lal
                   ` (4 preceding siblings ...)
  2021-07-20 23:26 ` [PATCH v5 05/14] scsi: mpt3sas: " Nitesh Narayan Lal
@ 2021-07-20 23:26 ` Nitesh Narayan Lal
  2021-07-22 18:25   ` Nikolova, Tatyana E
  2021-07-20 23:26 ` [PATCH v5 07/14] enic: " Nitesh Narayan Lal
                   ` (8 subsequent siblings)
  14 siblings, 1 reply; 28+ messages in thread
From: Nitesh Narayan Lal @ 2021-07-20 23:26 UTC (permalink / raw)
  To: linux-kernel, linux-scsi, intel-wired-lan, netdev, linux-api,
	linux-pci, tglx, jesse.brandeburg, robin.murphy, mtosatti, mingo,
	jbrandeb, frederic, juri.lelli, abelits, bhelgaas, rostedt,
	peterz, davem, akpm, sfr, stephen, rppt, chris.friesen, maz,
	nhorman, pjwaskiewicz, sassmann, thenzl, kashyap.desai,
	sumit.saxena, shivasharan.srikanteshwara, sathya.prakash,
	sreekanth.reddy, suganath-prabu.subramani, james.smart,
	dick.kennedy, jkc, faisal.latif, shiraz.saleem, tariqt, ahleihel,
	kheib, borisp, saeedm, benve, govind, jassisinghbrar,
	ajit.khaparde, sriharsha.basavapatna, somnath.kotur, nilal,
	tatyana.e.nikolova, mustafa.ismail, ahs3, leonro,
	chandrakanth.patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, poros, minlei, emilne, jejb, martin.petersen,
	_govind, kabel, viresh.kumar, Tushar.Khandelwal, kuba

The driver uses irq_set_affinity_hint() to update the affinity_hint mask
that is consumed by the userspace to distribute the interrupts. However,
under the hood irq_set_affinity_hint() also applies the provided cpumask
(if not NULL) as the affinity for the given interrupt which is an
undocumented side effect.

To remove this side effect irq_set_affinity_hint() has been marked
as deprecated and new interfaces have been introduced. Hence, replace the
irq_set_affinity_hint() with the new interface irq_update_affinity_hint()
that only updates the affinity_hint pointer.

Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com>
---
 drivers/infiniband/hw/irdma/hw.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/infiniband/hw/irdma/hw.c b/drivers/infiniband/hw/irdma/hw.c
index 7afb8a6a0526..ec8de708a4df 100644
--- a/drivers/infiniband/hw/irdma/hw.c
+++ b/drivers/infiniband/hw/irdma/hw.c
@@ -537,7 +537,7 @@ static void irdma_destroy_irq(struct irdma_pci_f *rf,
 	struct irdma_sc_dev *dev = &rf->sc_dev;
 
 	dev->irq_ops->irdma_dis_irq(dev, msix_vec->idx);
-	irq_set_affinity_hint(msix_vec->irq, NULL);
+	irq_update_affinity_hint(msix_vec->irq, NULL);
 	free_irq(msix_vec->irq, dev_id);
 }
 
@@ -1087,7 +1087,7 @@ irdma_cfg_ceq_vector(struct irdma_pci_f *rf, struct irdma_ceq *iwceq,
 	}
 	cpumask_clear(&msix_vec->mask);
 	cpumask_set_cpu(msix_vec->cpu_affinity, &msix_vec->mask);
-	irq_set_affinity_hint(msix_vec->irq, &msix_vec->mask);
+	irq_update_affinity_hint(msix_vec->irq, &msix_vec->mask);
 	if (status) {
 		ibdev_dbg(&rf->iwdev->ibdev, "ERR: ceq irq config fail\n");
 		return IRDMA_ERR_CFG;
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PATCH v5 07/14] enic: Use irq_update_affinity_hint
  2021-07-20 23:26 [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint() Nitesh Narayan Lal
                   ` (5 preceding siblings ...)
  2021-07-20 23:26 ` [PATCH v5 06/14] RDMA/irdma: Use irq_update_affinity_hint Nitesh Narayan Lal
@ 2021-07-20 23:26 ` Nitesh Narayan Lal
  2021-08-16 17:53   ` Christian Benvenuti (benve)
  2021-07-20 23:26 ` [PATCH v5 08/14] be2net: " Nitesh Narayan Lal
                   ` (7 subsequent siblings)
  14 siblings, 1 reply; 28+ messages in thread
From: Nitesh Narayan Lal @ 2021-07-20 23:26 UTC (permalink / raw)
  To: linux-kernel, linux-scsi, intel-wired-lan, netdev, linux-api,
	linux-pci, tglx, jesse.brandeburg, robin.murphy, mtosatti, mingo,
	jbrandeb, frederic, juri.lelli, abelits, bhelgaas, rostedt,
	peterz, davem, akpm, sfr, stephen, rppt, chris.friesen, maz,
	nhorman, pjwaskiewicz, sassmann, thenzl, kashyap.desai,
	sumit.saxena, shivasharan.srikanteshwara, sathya.prakash,
	sreekanth.reddy, suganath-prabu.subramani, james.smart,
	dick.kennedy, jkc, faisal.latif, shiraz.saleem, tariqt, ahleihel,
	kheib, borisp, saeedm, benve, govind, jassisinghbrar,
	ajit.khaparde, sriharsha.basavapatna, somnath.kotur, nilal,
	tatyana.e.nikolova, mustafa.ismail, ahs3, leonro,
	chandrakanth.patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, poros, minlei, emilne, jejb, martin.petersen,
	_govind, kabel, viresh.kumar, Tushar.Khandelwal, kuba

The driver uses irq_set_affinity_hint() to update the affinity_hint mask
that is consumed by the userspace to distribute the interrupts. However,
under the hood irq_set_affinity_hint() also applies the provided cpumask
(if not NULL) as the affinity for the given interrupt which is an
undocumented side effect.

To remove this side effect irq_set_affinity_hint() has been marked
as deprecated and new interfaces have been introduced. Hence, replace the
irq_set_affinity_hint() with the new interface irq_update_affinity_hint()
that only updates the affinity_hint pointer.

Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com>
---
 drivers/net/ethernet/cisco/enic/enic_main.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c
index d0a8f7106958..97eb5bd62855 100644
--- a/drivers/net/ethernet/cisco/enic/enic_main.c
+++ b/drivers/net/ethernet/cisco/enic/enic_main.c
@@ -150,10 +150,10 @@ static void enic_set_affinity_hint(struct enic *enic)
 		    !cpumask_available(enic->msix[i].affinity_mask) ||
 		    cpumask_empty(enic->msix[i].affinity_mask))
 			continue;
-		err = irq_set_affinity_hint(enic->msix_entry[i].vector,
-					    enic->msix[i].affinity_mask);
+		err = irq_update_affinity_hint(enic->msix_entry[i].vector,
+					       enic->msix[i].affinity_mask);
 		if (err)
-			netdev_warn(enic->netdev, "irq_set_affinity_hint failed, err %d\n",
+			netdev_warn(enic->netdev, "irq_update_affinity_hint failed, err %d\n",
 				    err);
 	}
 
@@ -173,7 +173,7 @@ static void enic_unset_affinity_hint(struct enic *enic)
 	int i;
 
 	for (i = 0; i < enic->intr_count; i++)
-		irq_set_affinity_hint(enic->msix_entry[i].vector, NULL);
+		irq_update_affinity_hint(enic->msix_entry[i].vector, NULL);
 }
 
 static int enic_udp_tunnel_set_port(struct net_device *netdev,
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PATCH v5 08/14] be2net: Use irq_update_affinity_hint
  2021-07-20 23:26 [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint() Nitesh Narayan Lal
                   ` (6 preceding siblings ...)
  2021-07-20 23:26 ` [PATCH v5 07/14] enic: " Nitesh Narayan Lal
@ 2021-07-20 23:26 ` Nitesh Narayan Lal
  2021-07-20 23:26 ` [PATCH v5 09/14] ixgbe: " Nitesh Narayan Lal
                   ` (6 subsequent siblings)
  14 siblings, 0 replies; 28+ messages in thread
From: Nitesh Narayan Lal @ 2021-07-20 23:26 UTC (permalink / raw)
  To: linux-kernel, linux-scsi, intel-wired-lan, netdev, linux-api,
	linux-pci, tglx, jesse.brandeburg, robin.murphy, mtosatti, mingo,
	jbrandeb, frederic, juri.lelli, abelits, bhelgaas, rostedt,
	peterz, davem, akpm, sfr, stephen, rppt, chris.friesen, maz,
	nhorman, pjwaskiewicz, sassmann, thenzl, kashyap.desai,
	sumit.saxena, shivasharan.srikanteshwara, sathya.prakash,
	sreekanth.reddy, suganath-prabu.subramani, james.smart,
	dick.kennedy, jkc, faisal.latif, shiraz.saleem, tariqt, ahleihel,
	kheib, borisp, saeedm, benve, govind, jassisinghbrar,
	ajit.khaparde, sriharsha.basavapatna, somnath.kotur, nilal,
	tatyana.e.nikolova, mustafa.ismail, ahs3, leonro,
	chandrakanth.patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, poros, minlei, emilne, jejb, martin.petersen,
	_govind, kabel, viresh.kumar, Tushar.Khandelwal, kuba

The driver uses irq_set_affinity_hint() to update the affinity_hint mask
that is consumed by the userspace to distribute the interrupts. However,
under the hood irq_set_affinity_hint() also applies the provided cpumask
(if not NULL) as the affinity for the given interrupt which is an
undocumented side effect.

To remove this side effect irq_set_affinity_hint() has been marked
as deprecated and new interfaces have been introduced. Hence, replace the
irq_set_affinity_hint() with the new interface irq_update_affinity_hint()
that only updates the affinity_hint pointer.

Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com>
---
 drivers/net/ethernet/emulex/benet/be_main.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index 361c1c87c183..ece6c0692826 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -3491,7 +3491,7 @@ static int be_msix_register(struct be_adapter *adapter)
 		if (status)
 			goto err_msix;
 
-		irq_set_affinity_hint(vec, eqo->affinity_mask);
+		irq_update_affinity_hint(vec, eqo->affinity_mask);
 	}
 
 	return 0;
@@ -3552,7 +3552,7 @@ static void be_irq_unregister(struct be_adapter *adapter)
 	/* MSIx */
 	for_all_evt_queues(adapter, eqo, i) {
 		vec = be_msix_vec_get(adapter, eqo);
-		irq_set_affinity_hint(vec, NULL);
+		irq_update_affinity_hint(vec, NULL);
 		free_irq(vec, eqo);
 	}
 
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PATCH v5 09/14] ixgbe: Use irq_update_affinity_hint
  2021-07-20 23:26 [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint() Nitesh Narayan Lal
                   ` (7 preceding siblings ...)
  2021-07-20 23:26 ` [PATCH v5 08/14] be2net: " Nitesh Narayan Lal
@ 2021-07-20 23:26 ` Nitesh Narayan Lal
  2021-07-20 23:26 ` [PATCH v5 10/14] mailbox: " Nitesh Narayan Lal
                   ` (5 subsequent siblings)
  14 siblings, 0 replies; 28+ messages in thread
From: Nitesh Narayan Lal @ 2021-07-20 23:26 UTC (permalink / raw)
  To: linux-kernel, linux-scsi, intel-wired-lan, netdev, linux-api,
	linux-pci, tglx, jesse.brandeburg, robin.murphy, mtosatti, mingo,
	jbrandeb, frederic, juri.lelli, abelits, bhelgaas, rostedt,
	peterz, davem, akpm, sfr, stephen, rppt, chris.friesen, maz,
	nhorman, pjwaskiewicz, sassmann, thenzl, kashyap.desai,
	sumit.saxena, shivasharan.srikanteshwara, sathya.prakash,
	sreekanth.reddy, suganath-prabu.subramani, james.smart,
	dick.kennedy, jkc, faisal.latif, shiraz.saleem, tariqt, ahleihel,
	kheib, borisp, saeedm, benve, govind, jassisinghbrar,
	ajit.khaparde, sriharsha.basavapatna, somnath.kotur, nilal,
	tatyana.e.nikolova, mustafa.ismail, ahs3, leonro,
	chandrakanth.patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, poros, minlei, emilne, jejb, martin.petersen,
	_govind, kabel, viresh.kumar, Tushar.Khandelwal, kuba

The driver uses irq_set_affinity_hint() to update the affinity_hint mask
that is consumed by the userspace to distribute the interrupts. However,
under the hood irq_set_affinity_hint() also applies the provided cpumask
(if not NULL) as the affinity for the given interrupt which is an
undocumented side effect.

To remove this side effect irq_set_affinity_hint() has been marked
as deprecated and new interfaces have been introduced. Hence, replace the
irq_set_affinity_hint() with the new interface irq_update_affinity_hint()
that only updates the affinity_hint pointer.

Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com>
Acked-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 913253f8ecb4..3b7db68ef860 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -3241,8 +3241,8 @@ static int ixgbe_request_msix_irqs(struct ixgbe_adapter *adapter)
 		/* If Flow Director is enabled, set interrupt affinity */
 		if (adapter->flags & IXGBE_FLAG_FDIR_HASH_CAPABLE) {
 			/* assign the mask for this irq */
-			irq_set_affinity_hint(entry->vector,
-					      &q_vector->affinity_mask);
+			irq_update_affinity_hint(entry->vector,
+						 &q_vector->affinity_mask);
 		}
 	}
 
@@ -3258,8 +3258,8 @@ static int ixgbe_request_msix_irqs(struct ixgbe_adapter *adapter)
 free_queue_irqs:
 	while (vector) {
 		vector--;
-		irq_set_affinity_hint(adapter->msix_entries[vector].vector,
-				      NULL);
+		irq_update_affinity_hint(adapter->msix_entries[vector].vector,
+					 NULL);
 		free_irq(adapter->msix_entries[vector].vector,
 			 adapter->q_vector[vector]);
 	}
@@ -3392,7 +3392,7 @@ static void ixgbe_free_irq(struct ixgbe_adapter *adapter)
 			continue;
 
 		/* clear the affinity_mask in the IRQ descriptor */
-		irq_set_affinity_hint(entry->vector, NULL);
+		irq_update_affinity_hint(entry->vector, NULL);
 
 		free_irq(entry->vector, q_vector);
 	}
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PATCH v5 10/14] mailbox: Use irq_update_affinity_hint
  2021-07-20 23:26 [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint() Nitesh Narayan Lal
                   ` (8 preceding siblings ...)
  2021-07-20 23:26 ` [PATCH v5 09/14] ixgbe: " Nitesh Narayan Lal
@ 2021-07-20 23:26 ` Nitesh Narayan Lal
  2021-08-16 18:11   ` Jassi Brar
  2021-07-20 23:26 ` [PATCH v5 11/14] scsi: lpfc: Use irq_set_affinity Nitesh Narayan Lal
                   ` (4 subsequent siblings)
  14 siblings, 1 reply; 28+ messages in thread
From: Nitesh Narayan Lal @ 2021-07-20 23:26 UTC (permalink / raw)
  To: linux-kernel, linux-scsi, intel-wired-lan, netdev, linux-api,
	linux-pci, tglx, jesse.brandeburg, robin.murphy, mtosatti, mingo,
	jbrandeb, frederic, juri.lelli, abelits, bhelgaas, rostedt,
	peterz, davem, akpm, sfr, stephen, rppt, chris.friesen, maz,
	nhorman, pjwaskiewicz, sassmann, thenzl, kashyap.desai,
	sumit.saxena, shivasharan.srikanteshwara, sathya.prakash,
	sreekanth.reddy, suganath-prabu.subramani, james.smart,
	dick.kennedy, jkc, faisal.latif, shiraz.saleem, tariqt, ahleihel,
	kheib, borisp, saeedm, benve, govind, jassisinghbrar,
	ajit.khaparde, sriharsha.basavapatna, somnath.kotur, nilal,
	tatyana.e.nikolova, mustafa.ismail, ahs3, leonro,
	chandrakanth.patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, poros, minlei, emilne, jejb, martin.petersen,
	_govind, kabel, viresh.kumar, Tushar.Khandelwal, kuba

The driver uses irq_set_affinity_hint() to:

- Set the affinity_hint which is consumed by the userspace for
  distributing the interrupts

- Enforce affinity

As per commit 6ac17fe8c14a ("mailbox: bcm-flexrm-mailbox: Set IRQ affinity
hint for FlexRM ring IRQs") the latter is done to ensure that the FlexRM
ring interrupts are evenly spread across all available CPUs. However, since
commit a0c9259dc4e1 ("irq/matrix: Spread interrupts on allocation") the
spreading of interrupts is dynamically performed at the time of allocation.
Hence, there is no need for the drivers to enforce their own affinity for
the spreading of interrupts.

Also, irq_set_affinity_hint() applying the provided cpumask as an affinity
for the interrupt is an undocumented side effect. To remove this side
effect irq_set_affinity_hint() has been marked as deprecated and new
interfaces have been introduced. Hence, replace the irq_set_affinity_hint()
with the new interface irq_update_affinity_hint() that only sets the
affinity_hint pointer.

Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com>
---
 drivers/mailbox/bcm-flexrm-mailbox.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/mailbox/bcm-flexrm-mailbox.c b/drivers/mailbox/bcm-flexrm-mailbox.c
index 78073ad1f2f1..16982c13d323 100644
--- a/drivers/mailbox/bcm-flexrm-mailbox.c
+++ b/drivers/mailbox/bcm-flexrm-mailbox.c
@@ -1298,7 +1298,7 @@ static int flexrm_startup(struct mbox_chan *chan)
 	val = (num_online_cpus() < val) ? val / num_online_cpus() : 1;
 	cpumask_set_cpu((ring->num / val) % num_online_cpus(),
 			&ring->irq_aff_hint);
-	ret = irq_set_affinity_hint(ring->irq, &ring->irq_aff_hint);
+	ret = irq_update_affinity_hint(ring->irq, &ring->irq_aff_hint);
 	if (ret) {
 		dev_err(ring->mbox->dev,
 			"failed to set IRQ affinity hint for ring%d\n",
@@ -1425,7 +1425,7 @@ static void flexrm_shutdown(struct mbox_chan *chan)
 
 	/* Release IRQ */
 	if (ring->irq_requested) {
-		irq_set_affinity_hint(ring->irq, NULL);
+		irq_update_affinity_hint(ring->irq, NULL);
 		free_irq(ring->irq, ring);
 		ring->irq_requested = false;
 	}
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PATCH v5 11/14] scsi: lpfc: Use irq_set_affinity
  2021-07-20 23:26 [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint() Nitesh Narayan Lal
                   ` (9 preceding siblings ...)
  2021-07-20 23:26 ` [PATCH v5 10/14] mailbox: " Nitesh Narayan Lal
@ 2021-07-20 23:26 ` Nitesh Narayan Lal
  2021-07-23 17:15   ` James Smart
  2021-07-20 23:26 ` [PATCH v5 12/14] hinic: Use irq_set_affinity_and_hint Nitesh Narayan Lal
                   ` (3 subsequent siblings)
  14 siblings, 1 reply; 28+ messages in thread
From: Nitesh Narayan Lal @ 2021-07-20 23:26 UTC (permalink / raw)
  To: linux-kernel, linux-scsi, intel-wired-lan, netdev, linux-api,
	linux-pci, tglx, jesse.brandeburg, robin.murphy, mtosatti, mingo,
	jbrandeb, frederic, juri.lelli, abelits, bhelgaas, rostedt,
	peterz, davem, akpm, sfr, stephen, rppt, chris.friesen, maz,
	nhorman, pjwaskiewicz, sassmann, thenzl, kashyap.desai,
	sumit.saxena, shivasharan.srikanteshwara, sathya.prakash,
	sreekanth.reddy, suganath-prabu.subramani, james.smart,
	dick.kennedy, jkc, faisal.latif, shiraz.saleem, tariqt, ahleihel,
	kheib, borisp, saeedm, benve, govind, jassisinghbrar,
	ajit.khaparde, sriharsha.basavapatna, somnath.kotur, nilal,
	tatyana.e.nikolova, mustafa.ismail, ahs3, leonro,
	chandrakanth.patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, poros, minlei, emilne, jejb, martin.petersen,
	_govind, kabel, viresh.kumar, Tushar.Khandelwal, kuba

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(-)

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 {
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PATCH v5 12/14] hinic: Use irq_set_affinity_and_hint
  2021-07-20 23:26 [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint() Nitesh Narayan Lal
                   ` (10 preceding siblings ...)
  2021-07-20 23:26 ` [PATCH v5 11/14] scsi: lpfc: Use irq_set_affinity Nitesh Narayan Lal
@ 2021-07-20 23:26 ` Nitesh Narayan Lal
  2021-07-20 23:26 ` [PATCH v5 13/14] net/mlx5: " Nitesh Narayan Lal
                   ` (2 subsequent siblings)
  14 siblings, 0 replies; 28+ messages in thread
From: Nitesh Narayan Lal @ 2021-07-20 23:26 UTC (permalink / raw)
  To: linux-kernel, linux-scsi, intel-wired-lan, netdev, linux-api,
	linux-pci, tglx, jesse.brandeburg, robin.murphy, mtosatti, mingo,
	jbrandeb, frederic, juri.lelli, abelits, bhelgaas, rostedt,
	peterz, davem, akpm, sfr, stephen, rppt, chris.friesen, maz,
	nhorman, pjwaskiewicz, sassmann, thenzl, kashyap.desai,
	sumit.saxena, shivasharan.srikanteshwara, sathya.prakash,
	sreekanth.reddy, suganath-prabu.subramani, james.smart,
	dick.kennedy, jkc, faisal.latif, shiraz.saleem, tariqt, ahleihel,
	kheib, borisp, saeedm, benve, govind, jassisinghbrar,
	ajit.khaparde, sriharsha.basavapatna, somnath.kotur, nilal,
	tatyana.e.nikolova, mustafa.ismail, ahs3, leonro,
	chandrakanth.patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, poros, minlei, emilne, jejb, martin.petersen,
	_govind, kabel, viresh.kumar, Tushar.Khandelwal, kuba

The driver uses irq_set_affinity_hint() to:

- Set the affinity_hint which is consumed by the userspace for
  distributing the interrupts

- Enforce affinity

As per commit 352f58b0d9f2 ("net-next/hinic: Set Rxq irq to specific cpu
for NUMA"), the hinic driver enforces its own affinity to bind IRQs to the
local NUMA node. However, irq_set_affinity_hint() applying the provided
cpumask as an affinity for the interrupt is an undocumented side effect.

To remove this side effect irq_set_affinity_hint() has been marked as
deprecated and new interfaces have been introduced. Hence, replace the
irq_set_affinity_hint() with the new interface irq_set_affinity_and_hint()
where the provided mask needs to be applied as the affinity and
affinity_hint pointer needs to be set and replace with
irq_update_affinity_hint() where only affinity_hint needs to be updated.

Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com>
---
 drivers/net/ethernet/huawei/hinic/hinic_rx.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/huawei/hinic/hinic_rx.c b/drivers/net/ethernet/huawei/hinic/hinic_rx.c
index fed3b6bc0d76..b33ed4d92b71 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_rx.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_rx.c
@@ -548,7 +548,7 @@ static int rx_request_irq(struct hinic_rxq *rxq)
 		goto err_req_irq;
 
 	cpumask_set_cpu(qp->q_id % num_online_cpus(), &rq->affinity_mask);
-	err = irq_set_affinity_hint(rq->irq, &rq->affinity_mask);
+	err = irq_set_affinity_and_hint(rq->irq, &rq->affinity_mask);
 	if (err)
 		goto err_irq_affinity;
 
@@ -565,7 +565,7 @@ static void rx_free_irq(struct hinic_rxq *rxq)
 {
 	struct hinic_rq *rq = rxq->rq;
 
-	irq_set_affinity_hint(rq->irq, NULL);
+	irq_update_affinity_hint(rq->irq, NULL);
 	free_irq(rq->irq, rxq);
 	rx_del_napi(rxq);
 }
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PATCH v5 13/14] net/mlx5: Use irq_set_affinity_and_hint
  2021-07-20 23:26 [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint() Nitesh Narayan Lal
                   ` (11 preceding siblings ...)
  2021-07-20 23:26 ` [PATCH v5 12/14] hinic: Use irq_set_affinity_and_hint Nitesh Narayan Lal
@ 2021-07-20 23:26 ` Nitesh Narayan Lal
  2021-07-20 23:26 ` [PATCH v5 14/14] net/mlx4: Use irq_update_affinity_hint Nitesh Narayan Lal
  2021-08-02 15:26 ` [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint() Nitesh Lal
  14 siblings, 0 replies; 28+ messages in thread
From: Nitesh Narayan Lal @ 2021-07-20 23:26 UTC (permalink / raw)
  To: linux-kernel, linux-scsi, intel-wired-lan, netdev, linux-api,
	linux-pci, tglx, jesse.brandeburg, robin.murphy, mtosatti, mingo,
	jbrandeb, frederic, juri.lelli, abelits, bhelgaas, rostedt,
	peterz, davem, akpm, sfr, stephen, rppt, chris.friesen, maz,
	nhorman, pjwaskiewicz, sassmann, thenzl, kashyap.desai,
	sumit.saxena, shivasharan.srikanteshwara, sathya.prakash,
	sreekanth.reddy, suganath-prabu.subramani, james.smart,
	dick.kennedy, jkc, faisal.latif, shiraz.saleem, tariqt, ahleihel,
	kheib, borisp, saeedm, benve, govind, jassisinghbrar,
	ajit.khaparde, sriharsha.basavapatna, somnath.kotur, nilal,
	tatyana.e.nikolova, mustafa.ismail, ahs3, leonro,
	chandrakanth.patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, poros, minlei, emilne, jejb, martin.petersen,
	_govind, kabel, viresh.kumar, Tushar.Khandelwal, kuba

The driver uses irq_set_affinity_hint() to update the affinity_hint mask
that is consumed by the userspace to distribute the interrupts and to apply
the provided mask as the affinity for the mlx5 interrupts. However,
irq_set_affinity_hint() applying the provided cpumask as an affinity for
the interrupt is an undocumented side effect.

To remove this side effect irq_set_affinity_hint() has been marked
as deprecated and new interfaces have been introduced. Hence, replace the
irq_set_affinity_hint() with the new interface irq_set_affinity_and_hint()
where the provided mask needs to be applied as the affinity and
affinity_hint pointer needs to be set and replace with
irq_update_affinity_hint() where only affinity_hint needs to be updated.

Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c b/drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c
index b25f764daa08..4efa3f643b79 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c
@@ -144,11 +144,11 @@ static void irq_release(struct kref *kref)
 	struct mlx5_irq_pool *pool = irq->pool;
 
 	xa_erase(&pool->irqs, irq->index);
-	/* free_irq requires that affinity and rmap will be cleared
+	/* free_irq requires that affinity_hint and rmap will be cleared
 	 * before calling it. This is why there is asymmetry with set_rmap
 	 * which should be called after alloc_irq but before request_irq.
 	 */
-	irq_set_affinity_hint(irq->irqn, NULL);
+	irq_update_affinity_hint(irq->irqn, NULL);
 	free_cpumask_var(irq->mask);
 	free_irq(irq->irqn, &irq->nh);
 	kfree(irq);
@@ -283,7 +283,7 @@ static struct mlx5_irq *irq_pool_create_irq(struct mlx5_irq_pool *pool,
 	if (IS_ERR(irq))
 		return irq;
 	cpumask_copy(irq->mask, affinity);
-	irq_set_affinity_hint(irq->irqn, irq->mask);
+	irq_set_affinity_and_hint(irq->irqn, irq->mask);
 	return irq;
 }
 
@@ -364,7 +364,7 @@ irq_pool_request_vector(struct mlx5_irq_pool *pool, int vecidx,
 	if (IS_ERR(irq) || !affinity)
 		goto unlock;
 	cpumask_copy(irq->mask, affinity);
-	irq_set_affinity_hint(irq->irqn, irq->mask);
+	irq_set_affinity_and_hint(irq->irqn, irq->mask);
 unlock:
 	mutex_unlock(&pool->lock);
 	return irq;
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PATCH v5 14/14] net/mlx4: Use irq_update_affinity_hint
  2021-07-20 23:26 [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint() Nitesh Narayan Lal
                   ` (12 preceding siblings ...)
  2021-07-20 23:26 ` [PATCH v5 13/14] net/mlx5: " Nitesh Narayan Lal
@ 2021-07-20 23:26 ` Nitesh Narayan Lal
  2021-08-02 15:26 ` [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint() Nitesh Lal
  14 siblings, 0 replies; 28+ messages in thread
From: Nitesh Narayan Lal @ 2021-07-20 23:26 UTC (permalink / raw)
  To: linux-kernel, linux-scsi, intel-wired-lan, netdev, linux-api,
	linux-pci, tglx, jesse.brandeburg, robin.murphy, mtosatti, mingo,
	jbrandeb, frederic, juri.lelli, abelits, bhelgaas, rostedt,
	peterz, davem, akpm, sfr, stephen, rppt, chris.friesen, maz,
	nhorman, pjwaskiewicz, sassmann, thenzl, kashyap.desai,
	sumit.saxena, shivasharan.srikanteshwara, sathya.prakash,
	sreekanth.reddy, suganath-prabu.subramani, james.smart,
	dick.kennedy, jkc, faisal.latif, shiraz.saleem, tariqt, ahleihel,
	kheib, borisp, saeedm, benve, govind, jassisinghbrar,
	ajit.khaparde, sriharsha.basavapatna, somnath.kotur, nilal,
	tatyana.e.nikolova, mustafa.ismail, ahs3, leonro,
	chandrakanth.patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, poros, minlei, emilne, jejb, martin.petersen,
	_govind, kabel, viresh.kumar, Tushar.Khandelwal, kuba

The driver uses irq_set_affinity_hint() to update the affinity_hint mask
that is consumed by the userspace to distribute the interrupts. However,
under the hood irq_set_affinity_hint() also applies the provided cpumask
(if not NULL) as the affinity for the given interrupt which is an
undocumented side effect.

To remove this side effect irq_set_affinity_hint() has been marked
as deprecated and new interfaces have been introduced. Hence, replace the
irq_set_affinity_hint() with the new interface irq_update_affinity_hint()
that only updates the affinity_hint pointer.

Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
---
 drivers/net/ethernet/mellanox/mlx4/eq.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx4/eq.c b/drivers/net/ethernet/mellanox/mlx4/eq.c
index 9e48509ed3b2..414e390e6b48 100644
--- a/drivers/net/ethernet/mellanox/mlx4/eq.c
+++ b/drivers/net/ethernet/mellanox/mlx4/eq.c
@@ -244,9 +244,9 @@ static void mlx4_set_eq_affinity_hint(struct mlx4_priv *priv, int vec)
 	    cpumask_empty(eq->affinity_mask))
 		return;
 
-	hint_err = irq_set_affinity_hint(eq->irq, eq->affinity_mask);
+	hint_err = irq_update_affinity_hint(eq->irq, eq->affinity_mask);
 	if (hint_err)
-		mlx4_warn(dev, "irq_set_affinity_hint failed, err %d\n", hint_err);
+		mlx4_warn(dev, "irq_update_affinity_hint failed, err %d\n", hint_err);
 }
 #endif
 
@@ -1123,9 +1123,7 @@ static void mlx4_free_irqs(struct mlx4_dev *dev)
 	for (i = 0; i < dev->caps.num_comp_vectors + 1; ++i)
 		if (eq_table->eq[i].have_irq) {
 			free_cpumask_var(eq_table->eq[i].affinity_mask);
-#if defined(CONFIG_SMP)
-			irq_set_affinity_hint(eq_table->eq[i].irq, NULL);
-#endif
+			irq_update_affinity_hint(eq_table->eq[i].irq, NULL);
 			free_irq(eq_table->eq[i].irq, eq_table->eq + i);
 			eq_table->eq[i].have_irq = 0;
 		}
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 28+ messages in thread

* RE: [PATCH v5 06/14] RDMA/irdma: Use irq_update_affinity_hint
  2021-07-20 23:26 ` [PATCH v5 06/14] RDMA/irdma: Use irq_update_affinity_hint Nitesh Narayan Lal
@ 2021-07-22 18:25   ` Nikolova, Tatyana E
  0 siblings, 0 replies; 28+ messages in thread
From: Nikolova, Tatyana E @ 2021-07-22 18:25 UTC (permalink / raw)
  To: Nitesh Narayan Lal, linux-kernel, linux-scsi, intel-wired-lan,
	netdev, linux-api, linux-pci, tglx, Brandeburg, Jesse,
	robin.murphy, mtosatti, mingo, jbrandeb, frederic, juri.lelli,
	abelits, bhelgaas, rostedt, peterz, davem, akpm, sfr, stephen,
	rppt, chris.friesen, maz, nhorman, pjwaskiewicz, sassmann,
	thenzl, kashyap.desai, sumit.saxena, shivasharan.srikanteshwara,
	sathya.prakash, sreekanth.reddy, suganath-prabu.subramani,
	james.smart, dick.kennedy, jkc, Latif, Faisal, Saleem, Shiraz,
	tariqt, ahleihel, kheib, borisp, saeedm, benve, govind,
	jassisinghbrar, ajit.khaparde, sriharsha.basavapatna,
	somnath.kotur, nilal, Ismail, Mustafa, ahs3, leonro,
	chandrakanth.patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, poros, minlei, emilne, jejb, martin.petersen,
	_govind, kabel, viresh.kumar, Tushar.Khandelwal, kuba



> -----Original Message-----
> From: Nitesh Narayan Lal <nitesh@redhat.com>
> Sent: Tuesday, July 20, 2021 6:26 PM
> To: linux-kernel@vger.kernel.org; linux-scsi@vger.kernel.org; intel-wired-
> lan@lists.osuosl.org; netdev@vger.kernel.org; linux-api@vger.kernel.org;
> linux-pci@vger.kernel.org; tglx@linutronix.de; Brandeburg, Jesse
> <jesse.brandeburg@intel.com>; robin.murphy@arm.com;
> mtosatti@redhat.com; mingo@kernel.org; jbrandeb@kernel.org;
> frederic@kernel.org; juri.lelli@redhat.com; abelits@marvell.com;
> bhelgaas@google.com; rostedt@goodmis.org; peterz@infradead.org;
> davem@davemloft.net; akpm@linux-foundation.org; sfr@canb.auug.org.au;
> stephen@networkplumber.org; rppt@linux.vnet.ibm.com;
> chris.friesen@windriver.com; maz@kernel.org; nhorman@tuxdriver.com;
> pjwaskiewicz@gmail.com; sassmann@redhat.com; thenzl@redhat.com;
> kashyap.desai@broadcom.com; sumit.saxena@broadcom.com;
> shivasharan.srikanteshwara@broadcom.com;
> sathya.prakash@broadcom.com; sreekanth.reddy@broadcom.com;
> suganath-prabu.subramani@broadcom.com; james.smart@broadcom.com;
> dick.kennedy@broadcom.com; jkc@redhat.com; Latif, Faisal
> <faisal.latif@intel.com>; Saleem, Shiraz <shiraz.saleem@intel.com>;
> tariqt@nvidia.com; ahleihel@redhat.com; kheib@redhat.com;
> borisp@nvidia.com; saeedm@nvidia.com; benve@cisco.com;
> govind@gmx.com; jassisinghbrar@gmail.com;
> ajit.khaparde@broadcom.com; sriharsha.basavapatna@broadcom.com;
> somnath.kotur@broadcom.com; nilal@redhat.com; Nikolova, Tatyana E
> <tatyana.e.nikolova@intel.com>; Ismail, Mustafa
> <mustafa.ismail@intel.com>; ahs3@redhat.com; leonro@nvidia.com;
> chandrakanth.patil@broadcom.com; bjorn.andersson@linaro.org;
> chunkuang.hu@kernel.org; yongqiang.niu@mediatek.com;
> baolin.wang7@gmail.com; poros@redhat.com; minlei@redhat.com;
> emilne@redhat.com; jejb@linux.ibm.com; martin.petersen@oracle.com;
> _govind@gmx.com; kabel@kernel.org; viresh.kumar@linaro.org;
> Tushar.Khandelwal@arm.com; kuba@kernel.org
> Subject: [PATCH v5 06/14] RDMA/irdma: Use irq_update_affinity_hint
> 
> The driver uses irq_set_affinity_hint() to update the affinity_hint mask that
> is consumed by the userspace to distribute the interrupts. However, under
> the hood irq_set_affinity_hint() also applies the provided cpumask (if not
> NULL) as the affinity for the given interrupt which is an undocumented side
> effect.
> 
> To remove this side effect irq_set_affinity_hint() has been marked as
> deprecated and new interfaces have been introduced. Hence, replace the
> irq_set_affinity_hint() with the new interface irq_update_affinity_hint() that
> only updates the affinity_hint pointer.
> 
> Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com>
> ---
>  drivers/infiniband/hw/irdma/hw.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/infiniband/hw/irdma/hw.c
> b/drivers/infiniband/hw/irdma/hw.c
> index 7afb8a6a0526..ec8de708a4df 100644
> --- a/drivers/infiniband/hw/irdma/hw.c
> +++ b/drivers/infiniband/hw/irdma/hw.c
> @@ -537,7 +537,7 @@ static void irdma_destroy_irq(struct irdma_pci_f *rf,
>  	struct irdma_sc_dev *dev = &rf->sc_dev;
> 
>  	dev->irq_ops->irdma_dis_irq(dev, msix_vec->idx);
> -	irq_set_affinity_hint(msix_vec->irq, NULL);
> +	irq_update_affinity_hint(msix_vec->irq, NULL);
>  	free_irq(msix_vec->irq, dev_id);
>  }
> 
> @@ -1087,7 +1087,7 @@ irdma_cfg_ceq_vector(struct irdma_pci_f *rf,
> struct irdma_ceq *iwceq,
>  	}
>  	cpumask_clear(&msix_vec->mask);
>  	cpumask_set_cpu(msix_vec->cpu_affinity, &msix_vec->mask);
> -	irq_set_affinity_hint(msix_vec->irq, &msix_vec->mask);
> +	irq_update_affinity_hint(msix_vec->irq, &msix_vec->mask);
>  	if (status) {
>  		ibdev_dbg(&rf->iwdev->ibdev, "ERR: ceq irq config fail\n");
>  		return IRDMA_ERR_CFG;
> --
> 2.27.0

Acked-by: Tatyana Nikolova <tatyana.e.nikolova@intel.com>

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v5 11/14] scsi: lpfc: Use irq_set_affinity
  2021-07-20 23:26 ` [PATCH v5 11/14] scsi: lpfc: Use irq_set_affinity Nitesh Narayan Lal
@ 2021-07-23 17:15   ` James Smart
  0 siblings, 0 replies; 28+ messages in thread
From: James Smart @ 2021-07-23 17:15 UTC (permalink / raw)
  To: Nitesh Narayan Lal, linux-kernel, linux-scsi, intel-wired-lan,
	netdev, linux-api, linux-pci, tglx, jesse.brandeburg,
	robin.murphy, mtosatti, mingo, jbrandeb, frederic, juri.lelli,
	abelits, bhelgaas, rostedt, peterz, davem, akpm, sfr, stephen,
	rppt, chris.friesen, maz, nhorman, pjwaskiewicz, sassmann,
	thenzl, kashyap.desai, sumit.saxena, shivasharan.srikanteshwara,
	sathya.prakash, sreekanth.reddy, suganath-prabu.subramani,
	james.smart, dick.kennedy, jkc, faisal.latif, shiraz.saleem,
	tariqt, ahleihel, kheib, borisp, saeedm, benve, govind,
	jassisinghbrar, ajit.khaparde, sriharsha.basavapatna,
	somnath.kotur, nilal, tatyana.e.nikolova, mustafa.ismail, ahs3,
	leonro, chandrakanth.patil, bjorn.andersson, chunkuang.hu,
	yongqiang.niu, baolin.wang7, poros, minlei, emilne, jejb,
	martin.petersen, _govind, kabel, viresh.kumar, Tushar.Khandelwal,
	kuba

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


^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint()
  2021-07-20 23:26 [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint() Nitesh Narayan Lal
                   ` (13 preceding siblings ...)
  2021-07-20 23:26 ` [PATCH v5 14/14] net/mlx4: Use irq_update_affinity_hint Nitesh Narayan Lal
@ 2021-08-02 15:26 ` Nitesh Lal
  2021-08-06  3:04   ` Martin K. Petersen
  2021-08-16 15:50   ` Nitesh Lal
  14 siblings, 2 replies; 28+ messages in thread
From: Nitesh Lal @ 2021-08-02 15:26 UTC (permalink / raw)
  To: netdev, linux-kernel, linux-scsi, jassisinghbrar, Viresh Kumar,
	Tushar.Khandelwal, manivannan.sadhasivam, lewis.hanly,
	ley.foon.tan, kabel, huangguangbin2, davem, benve, govind,
	kashyap.desai, Sumit Saxena, shivasharan.srikanteshwara,
	sathya.prakash, Sreekanth Reddy, suganath-prabu.subramani,
	ajit.khaparde, sriharsha.basavapatna, somnath.kotur, linux-pci,
	Thomas Gleixner, rostedt, Marc Zyngier
  Cc: Jesse Brandeburg, Robin Murphy, Marcelo Tosatti, Ingo Molnar,
	jbrandeb, Frederic Weisbecker, Juri Lelli, Alex Belits,
	Bjorn Helgaas, Peter Zijlstra, akpm, sfr, stephen, rppt,
	chris.friesen, Neil Horman, pjwaskiewicz, Stefan Assmann,
	Tomas Henzl, james.smart, Dick Kennedy, Ken Cox, faisal.latif,
	shiraz.saleem, tariqt, Alaa Hleihel, Kamal Heib, borisp, saeedm,
	Nitesh Lal, Nikolova, Tatyana E, Ismail, Mustafa, Al Stone,
	Leon Romanovsky, Chandrakanth Patil, bjorn.andersson,
	chunkuang.hu, yongqiang.niu, baolin.wang7, Petr Oros, Ming Lei,
	Ewan Milne, jejb, martin.petersen, Jakub Kicinski

On Tue, Jul 20, 2021 at 7:26 PM Nitesh Narayan Lal <nitesh@redhat.com> wrote:
>
> The drivers currently rely on irq_set_affinity_hint() to either set the
> affinity_hint that is consumed by the userspace and/or to enforce a custom
> affinity.
>
> irq_set_affinity_hint() as the name suggests is originally introduced to
> only set the affinity_hint to help the userspace in guiding the interrupts
> and not the affinity itself. However, since the commit
>
>         e2e64a932556 "genirq: Set initial affinity in irq_set_affinity_hint()"
>

[...]

>  drivers/infiniband/hw/irdma/hw.c              |  4 +-
>  drivers/mailbox/bcm-flexrm-mailbox.c          |  4 +-
>  drivers/net/ethernet/cisco/enic/enic_main.c   |  8 +--
>  drivers/net/ethernet/emulex/benet/be_main.c   |  4 +-
>  drivers/net/ethernet/huawei/hinic/hinic_rx.c  |  4 +-
>  drivers/net/ethernet/intel/i40e/i40e_main.c   |  8 +--
>  drivers/net/ethernet/intel/iavf/iavf_main.c   |  8 +--
>  drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 10 ++--
>  drivers/net/ethernet/mellanox/mlx4/eq.c       |  8 ++-
>  .../net/ethernet/mellanox/mlx5/core/pci_irq.c |  8 +--
>  drivers/scsi/lpfc/lpfc_init.c                 |  4 +-
>  drivers/scsi/megaraid/megaraid_sas_base.c     | 27 +++++-----
>  drivers/scsi/mpt3sas/mpt3sas_base.c           | 21 ++++----
>  include/linux/interrupt.h                     | 53 ++++++++++++++++++-
>  kernel/irq/manage.c                           |  8 +--
>  15 files changed, 114 insertions(+), 65 deletions(-)
>
> --
>
>

Gentle ping.
Any comments on the following patches:

  genirq: Provide new interfaces for affinity hints
  scsi: megaraid_sas: Use irq_set_affinity_and_hint
  scsi: mpt3sas: Use irq_set_affinity_and_hint
  enic: Use irq_update_affinity_hint
  be2net: Use irq_update_affinity_hint
  mailbox: Use irq_update_affinity_hint
  hinic: Use irq_set_affinity_and_hint

or any other patches?

-- 
Thanks
Nitesh


^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint()
  2021-08-02 15:26 ` [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint() Nitesh Lal
@ 2021-08-06  3:04   ` Martin K. Petersen
  2021-08-06 14:56     ` Nitesh Lal
  2021-08-16 15:50   ` Nitesh Lal
  1 sibling, 1 reply; 28+ messages in thread
From: Martin K. Petersen @ 2021-08-06  3:04 UTC (permalink / raw)
  To: Nitesh Lal
  Cc: netdev, linux-kernel, linux-scsi, jassisinghbrar, Viresh Kumar,
	Tushar.Khandelwal, manivannan.sadhasivam, lewis.hanly,
	ley.foon.tan, kabel, huangguangbin2, davem, benve, govind,
	kashyap.desai, Sumit Saxena, shivasharan.srikanteshwara,
	sathya.prakash, Sreekanth Reddy, suganath-prabu.subramani,
	ajit.khaparde, sriharsha.basavapatna, somnath.kotur, linux-pci,
	Thomas Gleixner, rostedt, Marc Zyngier, Jesse Brandeburg,
	Robin Murphy, Marcelo Tosatti, Ingo Molnar, jbrandeb,
	Frederic Weisbecker, Juri Lelli, Alex Belits, Bjorn Helgaas,
	Peter Zijlstra, akpm, sfr, stephen, rppt, chris.friesen,
	Neil Horman, pjwaskiewicz, Stefan Assmann, Tomas Henzl,
	james.smart, Dick Kennedy, Ken Cox, faisal.latif, shiraz.saleem,
	tariqt, Alaa Hleihel, Kamal Heib, borisp, saeedm, Nikolova,
	Tatyana E, Ismail, Mustafa, Al Stone, Leon Romanovsky,
	Chandrakanth Patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, Petr Oros, Ming Lei, Ewan Milne, jejb,
	martin.petersen, Jakub Kicinski


Nitesh,

> Gentle ping.
> Any comments on the following patches:
>
>   scsi: megaraid_sas: Use irq_set_affinity_and_hint
>   scsi: mpt3sas: Use irq_set_affinity_and_hint

Sumit and Sreekanth: Please review.

Thanks!

-- 
Martin K. Petersen	Oracle Linux Engineering

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v5 05/14] scsi: mpt3sas: Use irq_set_affinity_and_hint
  2021-07-20 23:26 ` [PATCH v5 05/14] scsi: mpt3sas: " Nitesh Narayan Lal
@ 2021-08-06  8:54   ` Sreekanth Reddy
  0 siblings, 0 replies; 28+ messages in thread
From: Sreekanth Reddy @ 2021-08-06  8:54 UTC (permalink / raw)
  To: Nitesh Narayan Lal
  Cc: linux-kernel, linux-scsi, intel-wired-lan, netdev, linux-api,
	linux-pci, Thomas Gleixner, jesse.brandeburg, robin.murphy,
	mtosatti, Ingo Molnar, jbrandeb, frederic, juri.lelli, abelits,
	Bjorn Helgaas, rostedt, Peter Zijlstra, David Miller,
	Andrew Morton, Stephen Rothwell, stephen, rppt, chris.friesen,
	maz, Neil Horman, pjwaskiewicz, sassmann, Tomas Henzl,
	Kashyap Desai, Sumit Saxena, Shivasharan Srikanteshwara,
	Sathya Prakash Veerichetty, Suganath Prabu Subramani,
	james.smart, dick.kennedy, jkc, faisal.latif, shiraz.saleem,
	tariqt, ahleihel, kheib, borisp, saeedm, benve, govind,
	jassisinghbrar, ajit.khaparde, sriharsha.basavapatna,
	somnath.kotur, nilal, tatyana.e.nikolova, mustafa.ismail, ahs3,
	leonro, Chandrakanth Patil, bjorn.andersson, chunkuang.hu,
	yongqiang.niu, baolin.wang7, poros, minlei, Ewan D. Milne,
	James E.J. Bottomley, Martin K. Petersen, _govind, kabel,
	viresh.kumar, Tushar.Khandelwal, kuba

[-- Attachment #1: Type: text/plain, Size: 4148 bytes --]

On Wed, Jul 21, 2021 at 4:57 AM Nitesh Narayan Lal <nitesh@redhat.com> wrote:
>
> The driver uses irq_set_affinity_hint() specifically for the high IOPS
> queue interrupts for two purposes:
>
> - To set the affinity_hint which is consumed by the userspace for
>   distributing the interrupts
>
> - To apply an affinity that it provides
>
> The driver enforces its own affinity to bind the high IOPS queue interrupts
> to the local NUMA node. However, irq_set_affinity_hint() applying the
> provided cpumask as an affinity (if not NULL) for the interrupt is an
> undocumented side effect.
>
> To remove this side effect irq_set_affinity_hint() has been marked
> as deprecated and new interfaces have been introduced. Hence, replace the
> irq_set_affinity_hint() with the new interface irq_set_affinity_and_hint()
> where the provided mask needs to be applied as the affinity and
> affinity_hint pointer needs to be set and replace with
> irq_update_affinity_hint() where only affinity_hint needs to be updated.
>

Changes looks good and also verified that the high iops queue's IRQs
are affinitied to local numa node.

Reviewed-by: Sreekanth Reddy <sreekanth.reddy@broadcom.com>
> Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com>
> ---
>  drivers/scsi/mpt3sas/mpt3sas_base.c | 21 ++++++++++-----------
>  1 file changed, 10 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
> index c39955239d1c..c1a11962f227 100644
> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
> @@ -2991,6 +2991,7 @@ _base_check_enable_msix(struct MPT3SAS_ADAPTER *ioc)
>  static void
>  _base_free_irq(struct MPT3SAS_ADAPTER *ioc)
>  {
> +       unsigned int irq;
>         struct adapter_reply_queue *reply_q, *next;
>
>         if (list_empty(&ioc->reply_queue_list))
> @@ -2998,9 +2999,10 @@ _base_free_irq(struct MPT3SAS_ADAPTER *ioc)
>
>         list_for_each_entry_safe(reply_q, next, &ioc->reply_queue_list, list) {
>                 list_del(&reply_q->list);
> -               if (ioc->smp_affinity_enable)
> -                       irq_set_affinity_hint(pci_irq_vector(ioc->pdev,
> -                           reply_q->msix_index), NULL);
> +               if (ioc->smp_affinity_enable) {
> +                       irq = pci_irq_vector(ioc->pdev, reply_q->msix_index);
> +                       irq_update_affinity_hint(irq, NULL);
> +               }
>                 free_irq(pci_irq_vector(ioc->pdev, reply_q->msix_index),
>                          reply_q);
>                 kfree(reply_q);
> @@ -3056,16 +3058,13 @@ _base_request_irq(struct MPT3SAS_ADAPTER *ioc, u8 index)
>   * @ioc: per adapter object
>   *
>   * The enduser would need to set the affinity via /proc/irq/#/smp_affinity
> - *
> - * It would nice if we could call irq_set_affinity, however it is not
> - * an exported symbol
>   */
>  static void
>  _base_assign_reply_queues(struct MPT3SAS_ADAPTER *ioc)
>  {
> -       unsigned int cpu, nr_cpus, nr_msix, index = 0;
> +       unsigned int cpu, nr_cpus, nr_msix, index = 0, irq;
>         struct adapter_reply_queue *reply_q;
> -       int local_numa_node;
> +       const struct cpumask *mask;
>
>         if (!_base_is_controller_msix_enabled(ioc))
>                 return;
> @@ -3088,11 +3087,11 @@ _base_assign_reply_queues(struct MPT3SAS_ADAPTER *ioc)
>                  * corresponding to high iops queues.
>                  */
>                 if (ioc->high_iops_queues) {
> -                       local_numa_node = dev_to_node(&ioc->pdev->dev);
> +                       mask = cpumask_of_node(dev_to_node(&ioc->pdev->dev));
>                         for (index = 0; index < ioc->high_iops_queues;
>                             index++) {
> -                               irq_set_affinity_hint(pci_irq_vector(ioc->pdev,
> -                                   index), cpumask_of_node(local_numa_node));
> +                               irq = pci_irq_vector(ioc->pdev, index);
> +                               irq_set_affinity_and_hint(irq, mask);
>                         }
>                 }
>
> --
> 2.27.0
>

[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4218 bytes --]

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v5 04/14] scsi: megaraid_sas: Use irq_set_affinity_and_hint
  2021-07-20 23:26 ` [PATCH v5 04/14] scsi: megaraid_sas: Use irq_set_affinity_and_hint Nitesh Narayan Lal
@ 2021-08-06 11:31   ` Sumit Saxena
  0 siblings, 0 replies; 28+ messages in thread
From: Sumit Saxena @ 2021-08-06 11:31 UTC (permalink / raw)
  To: Nitesh Narayan Lal
  Cc: LKML, Linux SCSI List, intel-wired-lan, netdev, linux-api,
	linux-pci, Thomas Gleixner, jesse.brandeburg, robin.murphy,
	mtosatti, mingo, jbrandeb, frederic, juri.lelli, abelits,
	Bjorn Helgaas, rostedt, peterz, David S. Miller, akpm, sfr,
	stephen, rppt, chris.friesen, maz, nhorman, pjwaskiewicz,
	sassmann, Tomas Henzl, Kashyap Desai, Shivasharan Srikanteshwara,
	Sathya Prakash Veerichetty, Sreekanth Reddy,
	Suganath Prabu Subramani, james.smart, dick.kennedy, jkc,
	faisal.latif, shiraz.saleem, tariqt, ahleihel, kheib, borisp,
	saeedm, benve, govind, jassisinghbrar, ajit.khaparde,
	sriharsha.basavapatna, Somnath Kotur, Nitesh Lal,
	tatyana.e.nikolova, mustafa.ismail, ahs3, leonro,
	Chandrakanth Patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, poros, minlei, Ewan Milne, James E.J. Bottomley,
	Martin K. Petersen, _govind, kabel, viresh.kumar,
	Tushar.Khandelwal, kuba

[-- Attachment #1: Type: text/plain, Size: 1323 bytes --]

On Wed, Jul 21, 2021 at 4:57 AM Nitesh Narayan Lal <nitesh@redhat.com> wrote:
>
> The driver uses irq_set_affinity_hint() specifically for the high IOPS
> queue interrupts for two purposes:
>
> - To set the affinity_hint which is consumed by the userspace for
>   distributing the interrupts
>
> - To apply an affinity that it provides
>
> The driver enforces its own affinity to bind the high IOPS queue interrupts
> to the local NUMA node. However, irq_set_affinity_hint() applying the
> provided cpumask as an affinity for the interrupt is an undocumented side
> effect.
>
> To remove this side effect irq_set_affinity_hint() has been marked
> as deprecated and new interfaces have been introduced. Hence, replace the
> irq_set_affinity_hint() with the new interface irq_set_affinity_and_hint()
> where the provided mask needs to be applied as the affinity and
> affinity_hint pointer needs to be set and replace with
> irq_update_affinity_hint() where only affinity_hint needs to be updated.
>
> Change the megasas_set_high_iops_queue_affinity_hint function name to
> megasas_set_high_iops_queue_affinity_and_hint to clearly indicate that the
> function is setting both affinity and affinity_hint.
>
> Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com>
Looks good.
Acked-by: Sumit Saxena <sumit.saxena@broadcom.com>

[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint()
  2021-08-06  3:04   ` Martin K. Petersen
@ 2021-08-06 14:56     ` Nitesh Lal
  0 siblings, 0 replies; 28+ messages in thread
From: Nitesh Lal @ 2021-08-06 14:56 UTC (permalink / raw)
  To: Martin K. Petersen, Sumit Saxena, Sreekanth Reddy
  Cc: netdev, linux-kernel, linux-scsi, jassisinghbrar, Viresh Kumar,
	Tushar.Khandelwal, Manivannan Sadhasivam, lewis.hanly,
	ley.foon.tan, kabel, huangguangbin2, davem, benve, govind,
	kashyap.desai, shivasharan.srikanteshwara, sathya.prakash,
	suganath-prabu.subramani, ajit.khaparde, sriharsha.basavapatna,
	somnath.kotur, linux-pci, Thomas Gleixner, rostedt, Marc Zyngier,
	Jesse Brandeburg, Robin Murphy, Marcelo Tosatti, Ingo Molnar,
	jbrandeb, Frederic Weisbecker, Juri Lelli, Alex Belits,
	Bjorn Helgaas, Peter Zijlstra, akpm, sfr, stephen, rppt,
	chris.friesen, Neil Horman, pjwaskiewicz, Stefan Assmann,
	Tomas Henzl, james.smart, Dick Kennedy, Ken Cox, faisal.latif,
	shiraz.saleem, tariqt, Alaa Hleihel, Kamal Heib, borisp, saeedm,
	Nikolova, Tatyana E, Ismail, Mustafa, Al Stone, Leon Romanovsky,
	Chandrakanth Patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, Petr Oros, Ming Lei, Ewan Milne, jejb,
	Jakub Kicinski

On Thu, Aug 5, 2021 at 11:06 PM Martin K. Petersen
<martin.petersen@oracle.com> wrote:
>
>
> Nitesh,
>
> > Gentle ping.
> > Any comments on the following patches:
> >
> >   scsi: megaraid_sas: Use irq_set_affinity_and_hint
> >   scsi: mpt3sas: Use irq_set_affinity_and_hint
>
> Sumit and Sreekanth: Please review.
>
> Thanks!
>
> --
> Martin K. Petersen      Oracle Linux Engineering
>

Thanks, Martin, Sumit & Sreekanth for the help.

--
Nitesh


^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v5 01/14] genirq: Provide new interfaces for affinity hints
  2021-07-20 23:26 ` [PATCH v5 01/14] genirq: Provide new interfaces for affinity hints Nitesh Narayan Lal
@ 2021-08-06 15:51   ` Ming Lei
  0 siblings, 0 replies; 28+ messages in thread
From: Ming Lei @ 2021-08-06 15:51 UTC (permalink / raw)
  To: Nitesh Narayan Lal
  Cc: linux-kernel, linux-scsi, intel-wired-lan, netdev, linux-api,
	linux-pci, tglx, jesse.brandeburg, Robin Murphy, mtosatti, mingo,
	jbrandeb, frederic, juri.lelli, abelits, bhelgaas, rostedt,
	peterz, davem, akpm, sfr, stephen, rppt, chris.friesen, maz,
	nhorman, pjwaskiewicz, sassmann, thenzl, Kashyap Desai,
	sumit.saxena, shivasharan.srikanteshwara, sathya.prakash,
	sreekanth.reddy, suganath-prabu.subramani, James Smart,
	dick.kennedy, jkc, faisal.latif, shiraz.saleem, tariqt, ahleihel,
	kheib, borisp, saeedm, benve, govind, jassisinghbrar,
	ajit.khaparde, sriharsha.basavapatna, somnath.kotur, nilal,
	tatyana.e.nikolova, mustafa.ismail, ahs3, leonro,
	chandrakanth.patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, poros, Ewan Milne, jejb, Martin K. Petersen,
	_govind, kabel, viresh.kumar, Tushar.Khandelwal, kuba

On Wed, Jul 21, 2021 at 7:26 AM Nitesh Narayan Lal <nitesh@redhat.com> wrote:
>
> From: Thomas Gleixner <tglx@linutronix.de>
>
> The discussion about removing the side effect of irq_set_affinity_hint() of
> actually applying the cpumask (if not NULL) as affinity to the interrupt,
> unearthed a few unpleasantries:
>
>   1) The modular perf drivers rely on the current behaviour for the very
>      wrong reasons.
>
>   2) While none of the other drivers prevents user space from changing
>      the affinity, a cursorily inspection shows that there are at least
>      expectations in some drivers.
>
> #1 needs to be cleaned up anyway, so that's not a problem
>
> #2 might result in subtle regressions especially when irqbalanced (which
>    nowadays ignores the affinity hint) is disabled.
>
> Provide new interfaces:
>
>   irq_update_affinity_hint()  - Only sets the affinity hint pointer
>   irq_set_affinity_and_hint() - Set the pointer and apply the affinity to
>                                 the interrupt
>
> Make irq_set_affinity_hint() a wrapper around irq_apply_affinity_hint() and
> document it to be phased out.
>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com>
> Link: https://lore.kernel.org/r/20210501021832.743094-1-jesse.brandeburg@intel.com

Reviewed-by: Ming Lei <ming.lei@redhat.com>


^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint()
  2021-08-02 15:26 ` [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint() Nitesh Lal
  2021-08-06  3:04   ` Martin K. Petersen
@ 2021-08-16 15:50   ` Nitesh Lal
  2021-08-30 15:38     ` Nitesh Lal
  1 sibling, 1 reply; 28+ messages in thread
From: Nitesh Lal @ 2021-08-16 15:50 UTC (permalink / raw)
  To: netdev, linux-kernel, davem, benve, _govind, jassisinghbrar,
	Viresh Kumar, ajit.khaparde, sriharsha.basavapatna,
	somnath.kotur
  Cc: linux-pci, linux-scsi, Jesse Brandeburg, Robin Murphy,
	Marcelo Tosatti, Ingo Molnar, jbrandeb, Frederic Weisbecker,
	Juri Lelli, Alex Belits, Bjorn Helgaas, rostedt, Peter Zijlstra,
	akpm, sfr, stephen, rppt, chris.friesen, Marc Zyngier,
	Neil Horman, pjwaskiewicz, Stefan Assmann, Tomas Henzl,
	james.smart, Dick Kennedy, Ken Cox, faisal.latif, shiraz.saleem,
	tariqt, Alaa Hleihel, Kamal Heib, borisp, saeedm, Nitesh Lal,
	Nikolova, Tatyana E, Ismail, Mustafa, Al Stone, Leon Romanovsky,
	Chandrakanth Patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, Petr Oros, Ming Lei, Ewan Milne, jejb,
	Martin K. Petersen, kabel, Jakub Kicinski, kashyap.desai,
	Sumit Saxena, shivasharan.srikanteshwara, sathya.prakash,
	Sreekanth Reddy, suganath-prabu.subramani, Thomas Gleixner,
	ley.foon.tan, huangguangbin2, jbrunet, johannes, snelson,
	lewis.hanly

On Mon, Aug 2, 2021 at 11:26 AM Nitesh Lal <nilal@redhat.com> wrote:
>
> On Tue, Jul 20, 2021 at 7:26 PM Nitesh Narayan Lal <nitesh@redhat.com> wrote:
> >
> > The drivers currently rely on irq_set_affinity_hint() to either set the
> > affinity_hint that is consumed by the userspace and/or to enforce a custom
> > affinity.
> >

[...]

>
> Gentle ping.
> Any comments on the following patches:
>
>   genirq: Provide new interfaces for affinity hints
>   scsi: megaraid_sas: Use irq_set_affinity_and_hint
>   scsi: mpt3sas: Use irq_set_affinity_and_hint
>   enic: Use irq_update_affinity_hint
>   be2net: Use irq_update_affinity_hint
>   mailbox: Use irq_update_affinity_hint
>   hinic: Use irq_set_affinity_and_hint
>
> or any other patches?
>

Any comments on the following patches:

  enic: Use irq_update_affinity_hint
  be2net: Use irq_update_affinity_hint
  mailbox: Use irq_update_affinity_hint
  hinic: Use irq_set_affinity_and_hint

or any other patches?
Any help in testing will also be very useful.

-- 
Thanks
Nitesh


^ permalink raw reply	[flat|nested] 28+ messages in thread

* RE: [PATCH v5 07/14] enic: Use irq_update_affinity_hint
  2021-07-20 23:26 ` [PATCH v5 07/14] enic: " Nitesh Narayan Lal
@ 2021-08-16 17:53   ` Christian Benvenuti (benve)
  0 siblings, 0 replies; 28+ messages in thread
From: Christian Benvenuti (benve) @ 2021-08-16 17:53 UTC (permalink / raw)
  To: Nitesh Narayan Lal, linux-kernel, linux-scsi, intel-wired-lan,
	netdev, linux-api, linux-pci, tglx, jesse.brandeburg,
	robin.murphy, mtosatti, mingo, jbrandeb, frederic, juri.lelli,
	abelits, bhelgaas, rostedt, peterz, davem, akpm, sfr, stephen,
	rppt, chris.friesen, maz, nhorman, pjwaskiewicz, sassmann,
	thenzl, kashyap.desai, sumit.saxena, shivasharan.srikanteshwara,
	sathya.prakash, sreekanth.reddy, suganath-prabu.subramani,
	james.smart, dick.kennedy, jkc, faisal.latif, shiraz.saleem,
	tariqt, ahleihel, kheib, borisp, saeedm, govind, jassisinghbrar,
	ajit.khaparde, sriharsha.basavapatna, somnath.kotur, nilal,
	tatyana.e.nikolova, mustafa.ismail, ahs3, leonro,
	chandrakanth.patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, poros, minlei, emilne, jejb, martin.petersen,
	_govind, kabel, viresh.kumar, Tushar.Khandelwal, kuba

> -----Original Message-----
> From: Nitesh Narayan Lal <nitesh@redhat.com>
> Sent: Tuesday, July 20, 2021 4:26 PM
> To: linux-kernel@vger.kernel.org; linux-scsi@vger.kernel.org; intel-wired-
> lan@lists.osuosl.org; netdev@vger.kernel.org; linux-api@vger.kernel.org;
> linux-pci@vger.kernel.org; tglx@linutronix.de; jesse.brandeburg@intel.com;
> robin.murphy@arm.com; mtosatti@redhat.com; mingo@kernel.org;
> jbrandeb@kernel.org; frederic@kernel.org; juri.lelli@redhat.com;
> abelits@marvell.com; bhelgaas@google.com; rostedt@goodmis.org;
> peterz@infradead.org; davem@davemloft.net; akpm@linux-foundation.org;
> sfr@canb.auug.org.au; stephen@networkplumber.org;
> rppt@linux.vnet.ibm.com; chris.friesen@windriver.com; maz@kernel.org;
> nhorman@tuxdriver.com; pjwaskiewicz@gmail.com;
> sassmann@redhat.com; thenzl@redhat.com;
> kashyap.desai@broadcom.com; sumit.saxena@broadcom.com;
> shivasharan.srikanteshwara@broadcom.com;
> sathya.prakash@broadcom.com; sreekanth.reddy@broadcom.com;
> suganath-prabu.subramani@broadcom.com; james.smart@broadcom.com;
> dick.kennedy@broadcom.com; jkc@redhat.com; faisal.latif@intel.com;
> shiraz.saleem@intel.com; tariqt@nvidia.com; ahleihel@redhat.com;
> kheib@redhat.com; borisp@nvidia.com; saeedm@nvidia.com; Christian
> Benvenuti (benve) <benve@cisco.com>; govind@gmx.com;
> jassisinghbrar@gmail.com; ajit.khaparde@broadcom.com;
> sriharsha.basavapatna@broadcom.com; somnath.kotur@broadcom.com;
> nilal@redhat.com; tatyana.e.nikolova@intel.com; mustafa.ismail@intel.com;
> ahs3@redhat.com; leonro@nvidia.com; chandrakanth.patil@broadcom.com;
> bjorn.andersson@linaro.org; chunkuang.hu@kernel.org;
> yongqiang.niu@mediatek.com; baolin.wang7@gmail.com;
> poros@redhat.com; minlei@redhat.com; emilne@redhat.com;
> jejb@linux.ibm.com; martin.petersen@oracle.com; _govind@gmx.com;
> kabel@kernel.org; viresh.kumar@linaro.org; Tushar.Khandelwal@arm.com;
> kuba@kernel.org
> Subject: [PATCH v5 07/14] enic: Use irq_update_affinity_hint
> 
> The driver uses irq_set_affinity_hint() to update the affinity_hint mask that
> is consumed by the userspace to distribute the interrupts. However, under
> the hood irq_set_affinity_hint() also applies the provided cpumask (if not
> NULL) as the affinity for the given interrupt which is an undocumented side
> effect.
> 
> To remove this side effect irq_set_affinity_hint() has been marked as
> deprecated and new interfaces have been introduced. Hence, replace the
> irq_set_affinity_hint() with the new interface irq_update_affinity_hint() that
> only updates the affinity_hint pointer.
> 
> Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com>

Thanks Nitesh for the patch.

Reviewed-by: Christian Benvenuti <benve@cisco.com>



^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v5 10/14] mailbox: Use irq_update_affinity_hint
  2021-07-20 23:26 ` [PATCH v5 10/14] mailbox: " Nitesh Narayan Lal
@ 2021-08-16 18:11   ` Jassi Brar
  0 siblings, 0 replies; 28+ messages in thread
From: Jassi Brar @ 2021-08-16 18:11 UTC (permalink / raw)
  To: Nitesh Narayan Lal
  Cc: Linux Kernel Mailing List, linux-scsi, intel-wired-lan,
	<netdev@vger.kernel.org>,
	linux-api, linux-pci, Thomas Gleixner, jesse.brandeburg,
	Robin Murphy, mtosatti, mingo, jbrandeb, frederic, juri.lelli,
	abelits, Bjorn Helgaas, Steven Rostedt, peterz, David S . Miller,
	Andrew Morton, Stephen Rothwell, stephen, rppt, chris.friesen,
	Marc Zyngier, nhorman, pjwaskiewicz, sassmann, thenzl,
	kashyap.desai, sumit.saxena, shivasharan.srikanteshwara,
	sathya.prakash, sreekanth.reddy, suganath-prabu.subramani,
	james.smart, dick.kennedy, jkc, faisal.latif, shiraz.saleem,
	tariqt, ahleihel, kheib, borisp, saeedm, benve, govind,
	ajit.khaparde, sriharsha.basavapatna, somnath.kotur, nilal,
	tatyana.e.nikolova, mustafa.ismail, ahs3, leonro,
	chandrakanth.patil, Bjorn Andersson, Chun-Kuang Hu,
	Yongqiang Niu, Baolin Wang, poros, minlei, emilne, jejb,
	martin.petersen, _govind, kabel, Viresh Kumar, Tushar Khandelwal,
	Jakub Kicinski

On Tue, Jul 20, 2021 at 6:27 PM Nitesh Narayan Lal <nitesh@redhat.com> wrote:
>
> The driver uses irq_set_affinity_hint() to:
>
> - Set the affinity_hint which is consumed by the userspace for
>   distributing the interrupts
>
> - Enforce affinity
>
> As per commit 6ac17fe8c14a ("mailbox: bcm-flexrm-mailbox: Set IRQ affinity
> hint for FlexRM ring IRQs") the latter is done to ensure that the FlexRM
> ring interrupts are evenly spread across all available CPUs. However, since
> commit a0c9259dc4e1 ("irq/matrix: Spread interrupts on allocation") the
> spreading of interrupts is dynamically performed at the time of allocation.
> Hence, there is no need for the drivers to enforce their own affinity for
> the spreading of interrupts.
>
> Also, irq_set_affinity_hint() applying the provided cpumask as an affinity
> for the interrupt is an undocumented side effect. To remove this side
> effect irq_set_affinity_hint() has been marked as deprecated and new
> interfaces have been introduced. Hence, replace the irq_set_affinity_hint()
> with the new interface irq_update_affinity_hint() that only sets the
> affinity_hint pointer.
>
> Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com>
> ---
>  drivers/mailbox/bcm-flexrm-mailbox.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/mailbox/bcm-flexrm-mailbox.c b/drivers/mailbox/bcm-flexrm-mailbox.c
> index 78073ad1f2f1..16982c13d323 100644
> --- a/drivers/mailbox/bcm-flexrm-mailbox.c
> +++ b/drivers/mailbox/bcm-flexrm-mailbox.c
> @@ -1298,7 +1298,7 @@ static int flexrm_startup(struct mbox_chan *chan)
>         val = (num_online_cpus() < val) ? val / num_online_cpus() : 1;
>         cpumask_set_cpu((ring->num / val) % num_online_cpus(),
>                         &ring->irq_aff_hint);
> -       ret = irq_set_affinity_hint(ring->irq, &ring->irq_aff_hint);
> +       ret = irq_update_affinity_hint(ring->irq, &ring->irq_aff_hint);
>         if (ret) {
>                 dev_err(ring->mbox->dev,
>                         "failed to set IRQ affinity hint for ring%d\n",
> @@ -1425,7 +1425,7 @@ static void flexrm_shutdown(struct mbox_chan *chan)
>
>         /* Release IRQ */
>         if (ring->irq_requested) {
> -               irq_set_affinity_hint(ring->irq, NULL);
> +               irq_update_affinity_hint(ring->irq, NULL);
>                 free_irq(ring->irq, ring);
>                 ring->irq_requested = false;
>         }
>
Seems ok to me. But I don't have the h/w to test.

Acked-by: Jassi Brar <jaswinder.singh@linaro.org>

cheers.

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint()
  2021-08-16 15:50   ` Nitesh Lal
@ 2021-08-30 15:38     ` Nitesh Lal
  2021-08-30 15:40       ` Nitesh Lal
  0 siblings, 1 reply; 28+ messages in thread
From: Nitesh Lal @ 2021-08-30 15:38 UTC (permalink / raw)
  To: netdev, linux-kernel, davem, ajit.khaparde,
	sriharsha.basavapatna, somnath.kotur, huangguangbin2, huangdaode,
	luobin9
  Cc: linux-pci, linux-scsi, Jesse Brandeburg, Robin Murphy,
	Marcelo Tosatti, Ingo Molnar, jbrandeb, Frederic Weisbecker,
	Juri Lelli, Alex Belits, Bjorn Helgaas, rostedt, Peter Zijlstra,
	akpm, sfr, stephen, rppt, chris.friesen, Marc Zyngier,
	Neil Horman, pjwaskiewicz, Stefan Assmann, Tomas Henzl,
	james.smart, Dick Kennedy, Ken Cox, faisal.latif, shiraz.saleem,
	tariqt, Alaa Hleihel, Kamal Heib, borisp, saeedm, Nitesh Lal,
	Nikolova, Tatyana E, Ismail, Mustafa, Al Stone, Leon Romanovsky,
	Chandrakanth Patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, Petr Oros, Ming Lei, Ewan Milne, jejb,
	Martin K. Petersen, kabel, Viresh Kumar, Jakub Kicinski,
	kashyap.desai, Sumit Saxena, shivasharan.srikanteshwara,
	sathya.prakash, Sreekanth Reddy, suganath-prabu.subramani,
	Thomas Gleixner, ley.foon.tan, jbrunet, johannes, snelson,
	lewis.hanly, benve, _govind, jassisinghbrar

On Mon, Aug 16, 2021 at 11:50 AM Nitesh Lal <nilal@redhat.com> wrote:
>
> On Mon, Aug 2, 2021 at 11:26 AM Nitesh Lal <nilal@redhat.com> wrote:
> >
> > On Tue, Jul 20, 2021 at 7:26 PM Nitesh Narayan Lal <nitesh@redhat.com> wrote:
> > >
> > > The drivers currently rely on irq_set_affinity_hint() to either set the
> > > affinity_hint that is consumed by the userspace and/or to enforce a custom
> > > affinity.
> > >
>

[...]

>
> Any comments on the following patches:
>
>   enic: Use irq_update_affinity_hint
>   be2net: Use irq_update_affinity_hint
>   mailbox: Use irq_update_affinity_hint
>   hinic: Use irq_set_affinity_and_hint
>
> or any other patches?
> Any help in testing will also be very useful.
>

Gentle ping.
Any comments on the following patches:

  be2net: Use irq_update_affinity_hint
  hinic: Use irq_set_affinity_and_hint

or any other patches?

--
Thanks
Nitesh


^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint()
  2021-08-30 15:38     ` Nitesh Lal
@ 2021-08-30 15:40       ` Nitesh Lal
  0 siblings, 0 replies; 28+ messages in thread
From: Nitesh Lal @ 2021-08-30 15:40 UTC (permalink / raw)
  To: netdev, linux-kernel, davem, ajit.khaparde,
	sriharsha.basavapatna, somnath.kotur, huangguangbin2, huangdaode,
	luobin9
  Cc: linux-pci, linux-scsi, Jesse Brandeburg, Robin Murphy,
	Marcelo Tosatti, Ingo Molnar, jbrandeb, Frederic Weisbecker,
	Juri Lelli, Alex Belits, Bjorn Helgaas, rostedt, Peter Zijlstra,
	akpm, sfr, stephen, rppt, chris.friesen, Marc Zyngier,
	Neil Horman, pjwaskiewicz, Stefan Assmann, Tomas Henzl,
	james.smart, Dick Kennedy, Ken Cox, faisal.latif, shiraz.saleem,
	tariqt, Alaa Hleihel, Kamal Heib, borisp, saeedm, Nikolova,
	Tatyana E, Ismail, Mustafa, Al Stone, Leon Romanovsky,
	Chandrakanth Patil, bjorn.andersson, chunkuang.hu, yongqiang.niu,
	baolin.wang7, Petr Oros, Ming Lei, Ewan Milne, jejb,
	Martin K. Petersen, kabel, Viresh Kumar, Jakub Kicinski,
	kashyap.desai, Sumit Saxena, shivasharan.srikanteshwara,
	sathya.prakash, Sreekanth Reddy, suganath-prabu.subramani,
	Thomas Gleixner, ley.foon.tan, jbrunet, johannes, snelson,
	lewis.hanly, benve, _govind, jassisinghbrar

On Mon, Aug 30, 2021 at 11:38 AM Nitesh Lal <nilal@redhat.com> wrote:
>
> On Mon, Aug 16, 2021 at 11:50 AM Nitesh Lal <nilal@redhat.com> wrote:
> >
> > On Mon, Aug 2, 2021 at 11:26 AM Nitesh Lal <nilal@redhat.com> wrote:
> > >
> > > On Tue, Jul 20, 2021 at 7:26 PM Nitesh Narayan Lal <nitesh@redhat.com> wrote:
> > > >
> > > > The drivers currently rely on irq_set_affinity_hint() to either set the
> > > > affinity_hint that is consumed by the userspace and/or to enforce a custom
> > > > affinity.
> > > >
> >
>
> [...]
>
> >
> > Any comments on the following patches:
> >
> >   enic: Use irq_update_affinity_hint
> >   be2net: Use irq_update_affinity_hint
> >   mailbox: Use irq_update_affinity_hint
> >   hinic: Use irq_set_affinity_and_hint
> >
> > or any other patches?
> > Any help in testing will also be very useful.
> >
>
> Gentle ping.
> Any comments on the following patches:
>
>   be2net: Use irq_update_affinity_hint
>   hinic: Use irq_set_affinity_and_hint
>
> or any other patches?


Also, I have been trying to reach Bin Luo who maintains the hinic driver
but it seems his email ID has changed so if someone else can help in
reviewing/testing the hinic patch, it would be really helpful.

-- 
Thanks
Nitesh


^ permalink raw reply	[flat|nested] 28+ messages in thread

end of thread, other threads:[~2021-08-30 15:41 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-20 23:26 [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint() Nitesh Narayan Lal
2021-07-20 23:26 ` [PATCH v5 01/14] genirq: Provide new interfaces for affinity hints Nitesh Narayan Lal
2021-08-06 15:51   ` Ming Lei
2021-07-20 23:26 ` [PATCH v5 02/14] iavf: Use irq_update_affinity_hint Nitesh Narayan Lal
2021-07-20 23:26 ` [PATCH v5 03/14] i40e: " Nitesh Narayan Lal
2021-07-20 23:26 ` [PATCH v5 04/14] scsi: megaraid_sas: Use irq_set_affinity_and_hint Nitesh Narayan Lal
2021-08-06 11:31   ` Sumit Saxena
2021-07-20 23:26 ` [PATCH v5 05/14] scsi: mpt3sas: " Nitesh Narayan Lal
2021-08-06  8:54   ` Sreekanth Reddy
2021-07-20 23:26 ` [PATCH v5 06/14] RDMA/irdma: Use irq_update_affinity_hint Nitesh Narayan Lal
2021-07-22 18:25   ` Nikolova, Tatyana E
2021-07-20 23:26 ` [PATCH v5 07/14] enic: " Nitesh Narayan Lal
2021-08-16 17:53   ` Christian Benvenuti (benve)
2021-07-20 23:26 ` [PATCH v5 08/14] be2net: " Nitesh Narayan Lal
2021-07-20 23:26 ` [PATCH v5 09/14] ixgbe: " Nitesh Narayan Lal
2021-07-20 23:26 ` [PATCH v5 10/14] mailbox: " Nitesh Narayan Lal
2021-08-16 18:11   ` Jassi Brar
2021-07-20 23:26 ` [PATCH v5 11/14] scsi: lpfc: Use irq_set_affinity Nitesh Narayan Lal
2021-07-23 17:15   ` James Smart
2021-07-20 23:26 ` [PATCH v5 12/14] hinic: Use irq_set_affinity_and_hint Nitesh Narayan Lal
2021-07-20 23:26 ` [PATCH v5 13/14] net/mlx5: " Nitesh Narayan Lal
2021-07-20 23:26 ` [PATCH v5 14/14] net/mlx4: Use irq_update_affinity_hint Nitesh Narayan Lal
2021-08-02 15:26 ` [PATCH v5 00/14] genirq: Cleanup the abuse of irq_set_affinity_hint() Nitesh Lal
2021-08-06  3:04   ` Martin K. Petersen
2021-08-06 14:56     ` Nitesh Lal
2021-08-16 15:50   ` Nitesh Lal
2021-08-30 15:38     ` Nitesh Lal
2021-08-30 15:40       ` Nitesh Lal

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).