This is V2 of the second part of effort to provide support for per device MSI interrupt domains. Version 1 of this second part can be found here: https://lore.kernel.org/all/20221111132706.104870257@xxxxxxxxxxxxx The first part is available here: https://lore.kernel.org/all/20221111120501.026511281@xxxxxxxxxxxxx and has been merged into: git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core This part on top of the tip irq/core branch is also available here: git://git.kernel.org/pub/scm/linux/kernel/git/tglx/devel.git devmsi-v2-part2 This part is the main preparation step for per device MSI domains: 1) Introduce irqdomain pointer storage space in device::msi::data and related helpers. 2) Convert interfaces to handle multiple per device MSI domains based on a domain ID 3) Provide new interfaces for allocation/free which are domain ID based and provide range allocation/free which is a prerequisite for post MSI-X enable alloc/free. 4) Switch all existing call sites of msi allocation/free interfaces over to the new interfaces 5) Remove the old interfaces Changes vs. V1: - Split the kernel doc changes from the rename (Jason) - Rename msi_ctrl_valid() to msi_ctrl_range_valid() (Kevin) - Fix the off by one vs. MSI_MAX_INDEX (Kevin) - Update changelogs and comments (Bjorn, Jason, Kevin) - Fix the kernel robot fallout from randconfig builds - Picked up Reviewed/Acked-by tags where appropriate Thanks, tglx --- arch/x86/kernel/apic/msi.c | 5 drivers/base/platform-msi.c | 4 drivers/bus/fsl-mc/fsl-mc-msi.c | 25 - drivers/irqchip/irq-gic.c | 4 drivers/pci/msi/irqdomain.c | 4 drivers/pci/msi/msi.c | 4 drivers/soc/ti/ti_sci_inta_msi.c | 12 include/linux/irqdomain.h | 112 ++++---- include/linux/msi.h | 125 +++++++-- include/linux/msi_api.h | 35 ++ kernel/irq/chip.c | 8 kernel/irq/msi.c | 541 +++++++++++++++++++++++++++++---------- 12 files changed, 631 insertions(+), 248 deletions(-)