On Fri, Jan 23 2026 at 14:07, Vivian Wang wrote:
Some PCI devices have PCI_MSI_FLAGS_64BIT in the MSI capability, but
implement less than 64 address bits. This breaks on platforms where such
a device is assigned an MSI address higher than what's reachable.
Currently, we deal with this with a single no_64bit_msi flag, and
we don't deal with anything. The code has a single bit
limitation. Please use passive voice as documented.
(notably on powerpc) forces 32-bit MSI address for these devices.
this is not a valid sentence.
However, on some platforms the MSI doorbell address is above 32-bit but
within device ability.
As a first step to enabling MSI on those combinations of devices and
platforms, conservatively generalize the single-bit flag no_64bit_msi
into msi_addr_mask. (The name msi_addr_mask is chosen to avoid confusion
with msi_mask.)
The translation is essentially:
- no_64bit_msi = 1 -> msi_addr_mask = DMA_BIT_MASK(32)
- no_64bit_msi = 0 -> msi_addr_mask = DMA_BIT_MASK(64)
- if (no_64bit_msi) -> if (msi_addr_mask < DMA_BIT_MASK(64))
Since no values other than DMA_BIT_MASK(32) and DMA_BIT_MASK(64) is
s/is/are/
used, no functional change is intended. Future patches that make use of
intermediate values of msi_addr_mask will follow, allowing devices that
cannot use full 64-bit addresses for MSI to work on platforms with MSI
doorbell above 32-bit address space.
Acked-by: Takashi Iwai <redacted>
Signed-off-by: Vivian Wang <redacted>
Other than those nits:
Reviewed-by: Thomas Gleixner <tglx@kernel.org>