Re: [PATCH V1] PCI/MSI: Fix MSI hwirq truncation

From: Vidya Sagar
Date: Mon Jan 08 2024 - 06:58:59 EST




On 1/5/2024 10:32 PM, Kuppuswamy Sathyanarayanan wrote:
External email: Use caution opening links or attachments


On 1/5/2024 5:43 AM, Vidya Sagar wrote:
While calculating the hwirq number for an MSI interrupt, the higher
bits (i.e. from bit-5 onwards a.k.a domain_nr >= 32) of the PCI domain
number gets truncated because of the shifted value casting to u32. This
for example is resulting in same hwirq number for devices 0019:00:00.0
and 0039:00:00.0.

So, cast the PCI domain number to u64 before left shifting it to
calculate hwirq number.

This seems like a bug fix. Why not add Fixes: tag?
This doesn't seem to be introduced by any recent change as such. It has
been from the time the original change appeared in the mainline. I'll
give the commit ID of the original change for 'Fixes'.


Is this issue detected in a platform test? Maybe including the relevant
details about it will help reproduce the issue.
The issue is detected while running ARM's ACS test suite. But, I
couldn't give that info as there was some bug in the test suite itself
for which I raised an issue at https://gitlab.arm.com/linux-arm/linux-acs/-/issues/2



Signed-off-by: Vidya Sagar <vidyas@xxxxxxxxxx>
---
drivers/pci/msi/irqdomain.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/pci/msi/irqdomain.c b/drivers/pci/msi/irqdomain.c
index c8be056c248d..cfd84a899c82 100644
--- a/drivers/pci/msi/irqdomain.c
+++ b/drivers/pci/msi/irqdomain.c
@@ -61,7 +61,7 @@ static irq_hw_number_t pci_msi_domain_calc_hwirq(struct msi_desc *desc)

return (irq_hw_number_t)desc->msi_index |
pci_dev_id(dev) << 11 |
- (pci_domain_nr(dev->bus) & 0xFFFFFFFF) << 27;
+ ((irq_hw_number_t)(pci_domain_nr(dev->bus) & 0xFFFFFFFF)) << 27;
}

static void pci_msi_domain_set_desc(msi_alloc_info_t *arg,

--
Sathyanarayanan Kuppuswamy
Linux Kernel Developer