linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 00/14] genirq: Cleanup the usage of irq_set_affinity_hint
@ 2021-06-17 18:22 Nitesh Narayan Lal
  2021-06-17 18:22 ` [PATCH v1 01/14] genirq: Provide new interfaces for affinity hints Nitesh Narayan Lal
                   ` (13 more replies)
  0 siblings, 14 replies; 22+ messages in thread
From: Nitesh Narayan Lal @ 2021-06-17 18:22 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, luobin9,
	ajit.khaparde, sriharsha.basavapatna, somnath.kotur, nilal

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 own 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 linux-next tree and a v2 for the
remaining two 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, i40iw
and enic on top of:
	git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 
	master - 5.13.0-rc6
So more testing is probably required for these and the drivers that I didn't
test and any help will be much appreciated.

[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/


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/i40iw: 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_update_affinity_hint
  net/mlx4: Use irq_update_affinity_hint

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

 drivers/infiniband/hw/i40iw/i40iw_main.c      |  4 +-
 drivers/mailbox/bcm-flexrm-mailbox.c          |  4 +-
 drivers/net/ethernet/cisco/enic/enic_main.c   |  6 +--
 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 |  6 +--
 drivers/net/ethernet/mellanox/mlx4/eq.c       |  6 +--
 .../net/ethernet/mellanox/mlx5/core/pci_irq.c |  6 +--
 drivers/scsi/lpfc/lpfc_init.c                 |  4 +-
 drivers/scsi/megaraid/megaraid_sas_base.c     | 25 ++++++-----
 drivers/scsi/mpt3sas/mpt3sas_base.c           | 15 ++++---
 include/linux/interrupt.h                     | 41 ++++++++++++++++++-
 kernel/irq/manage.c                           |  8 ++--
 15 files changed, 95 insertions(+), 54 deletions(-)

--  


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

end of thread, other threads:[~2021-06-25 21:08 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-17 18:22 [PATCH v1 00/14] genirq: Cleanup the usage of irq_set_affinity_hint Nitesh Narayan Lal
2021-06-17 18:22 ` [PATCH v1 01/14] genirq: Provide new interfaces for affinity hints Nitesh Narayan Lal
2021-06-25 17:52   ` Nitesh Lal
2021-06-17 18:22 ` [PATCH v1 02/14] iavf: Use irq_update_affinity_hint Nitesh Narayan Lal
2021-06-17 18:22 ` [PATCH v1 03/14] i40e: " Nitesh Narayan Lal
2021-06-17 18:22 ` [PATCH v1 04/14] scsi: megaraid_sas: Use irq_set_affinity_and_hint Nitesh Narayan Lal
2021-06-17 19:31   ` Robin Murphy
2021-06-17 19:34     ` Nitesh Lal
2021-06-17 18:22 ` [PATCH v1 05/14] scsi: mpt3sas: " Nitesh Narayan Lal
2021-06-17 18:22 ` [PATCH v1 06/14] RDMA/i40iw: Use irq_update_affinity_hint Nitesh Narayan Lal
2021-06-17 18:22 ` [PATCH v1 07/14] enic: " Nitesh Narayan Lal
2021-06-17 18:22 ` [PATCH v1 08/14] be2net: " Nitesh Narayan Lal
2021-06-17 18:22 ` [PATCH v1 09/14] ixgbe: " Nitesh Narayan Lal
2021-06-17 18:22 ` [PATCH v1 10/14] mailbox: " Nitesh Narayan Lal
2021-06-17 18:22 ` [PATCH v1 11/14] scsi: lpfc: Use irq_set_affinity Nitesh Narayan Lal
2021-06-17 18:22 ` [PATCH v1 12/14] hinic: Use irq_set_affinity_and_hint Nitesh Narayan Lal
2021-06-17 18:22 ` [PATCH v1 13/14] net/mlx5: Use irq_update_affinity_hint Nitesh Narayan Lal
2021-06-21  8:01   ` Leon Romanovsky
2021-06-17 18:22 ` [PATCH v1 14/14] net/mlx4: " Nitesh Narayan Lal
2021-06-21  8:01   ` Leon Romanovsky
2021-06-21 12:59     ` Nitesh Lal
2021-06-25 21:08     ` 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).