From: Marc Zyngier <maz@kernel.org>
To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org
Cc: Thomas Gleixner <tglx@linutronix.de>,
Lorenzo Pieralisi <lpieralisi@kernel.org>,
Sascha Bischoff <sascha.bischoff@arm.com>,
Timothy Hayes <timothy.hayes@arm.com>
Subject: [PATCH v2 0/5] genirq/msi: Fix device MSI prepare/alloc sequencing
Date: Tue, 13 May 2025 17:31:39 +0100 [thread overview]
Message-ID: <20250513163144.2215824-1-maz@kernel.org> (raw)
While reviewing (and debugging) the GICv5 code, it became obvious that there
was something pretty fishy about the way MSI allocation was taking place in
respect to the msi_prepare() callback.
There is a strong (though not 100% explicit) requirement that the
.msi_prepare() callback must take place exactly once during the lifetime of
an MSI domain, before any MSI is allocated. Sadly, that's not how the core
code behaves, leading to all sorts of "interesting" issues with MBIGEN or
the GICv5 IWB.
The fix is both simple and surprisingly convoluted. The first course of
action would be to hoist the "prepare" action before we allocate any MSI,
adding new tracking for the msi_alloc_info_t structure.
But this unveils another issue that the core code has been papering over,
which is that there is no pendant to the .msi_prepare() callback that would
be called on irqdomain destruction, and that at least the ITS code has been
using some crap heuristics to work around it.
So this needs to be addressed first, and that's the point of the first two
patches, introducing and implementing the .msi_teardown() callback. The
.msi_prepare() call is then moved is the specific case of device-MSI, and
the .msi_teardown() callback wired up.
The last patch remove a gross hack in the ITS msi-parent code, which
was papering over the broken use of the "prepare" callback.
This has been tested on a GICv4 system with MBIGEN, patches on top of
tip/irq/msi (a1d8a83093675).
* From v1 [1]:
- Fixed blunder in the ITS .msi_teardown()
- Fixed spelling, grammar, and other use of unclear terms
- Fixed line splitting, disgraceful underscores
- Split the calling of .msi_teardown() into its own patch
- Rebased on top of tip/irq/msi
[1] https://lore.kernel.org/r/20250511163520.1307654-1-maz@kernel.org
Marc Zyngier (5):
genirq/msi: Add .msi_teardown() callback as the reverse of
.msi_prepare()
irqchip/gic-v3-its: Implement .msi_teardown() callback
genirq/msi: Move prepare() call to per-device allocation
genirq/msi: Engage the .msi_teardown() callback on domain removal
irqchip/gic-v3-its: Use allocation size from the prepare call
drivers/irqchip/irq-gic-v3-its-msi-parent.c | 29 +++++--------
drivers/irqchip/irq-gic-v3-its.c | 46 +++++++++++----------
include/linux/msi.h | 12 +++++-
kernel/irq/msi.c | 45 ++++++++++++++++++--
4 files changed, 86 insertions(+), 46 deletions(-)
--
2.39.2
next reply other threads:[~2025-05-13 16:46 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-13 16:31 Marc Zyngier [this message]
2025-05-13 16:31 ` [PATCH v2 1/5] genirq/msi: Add .msi_teardown() callback as the reverse of .msi_prepare() Marc Zyngier
2025-05-16 10:02 ` [tip: irq/msi] " tip-bot2 for Marc Zyngier
2025-05-13 16:31 ` [PATCH v2 2/5] irqchip/gic-v3-its: Implement .msi_teardown() callback Marc Zyngier
2025-05-16 10:02 ` [tip: irq/msi] " tip-bot2 for Marc Zyngier
2025-05-13 16:31 ` [PATCH v2 3/5] genirq/msi: Move prepare() call to per-device allocation Marc Zyngier
2025-05-16 10:02 ` [tip: irq/msi] " tip-bot2 for Marc Zyngier
2025-06-03 8:22 ` [PATCH v2 3/5] " Zenghui Yu
2025-06-03 9:35 ` Lorenzo Pieralisi
2025-06-03 13:09 ` Marc Zyngier
2025-06-03 14:37 ` Lorenzo Pieralisi
2025-06-04 1:52 ` Zenghui Yu
2025-06-03 12:50 ` Marc Zyngier
2025-06-03 13:07 ` Zenghui Yu
2025-06-03 13:27 ` Marc Zyngier
2025-06-03 13:29 ` Lorenzo Pieralisi
2025-06-03 14:03 ` Marc Zyngier
2025-06-03 14:08 ` Marc Zyngier
2025-05-13 16:31 ` [PATCH v2 4/5] genirq/msi: Engage the .msi_teardown() callback on domain removal Marc Zyngier
2025-05-16 10:02 ` [tip: irq/msi] " tip-bot2 for Marc Zyngier
2025-05-13 16:31 ` [PATCH v2 5/5] irqchip/gic-v3-its: Use allocation size from the prepare call Marc Zyngier
2025-05-16 10:02 ` [tip: irq/msi] " tip-bot2 for Marc Zyngier
2025-05-18 18:53 ` [PATCH v2 5/5] " Thomas Gleixner
2025-05-19 10:15 ` Marc Zyngier
2025-05-19 12:16 ` Thomas Gleixner
2025-05-19 14:28 ` Marc Zyngier
2025-05-21 15:29 ` Thomas Gleixner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250513163144.2215824-1-maz@kernel.org \
--to=maz@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lpieralisi@kernel.org \
--cc=sascha.bischoff@arm.com \
--cc=tglx@linutronix.de \
--cc=timothy.hayes@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.