|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] x86/msi: Change __msi_set_enable() to take pci_sbdf_t
commit 250d87dc3ff9ebcb77da65e2999ace6b378862d7
Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Sun Feb 2 13:48:40 2025 +0000
Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Tue Feb 25 13:30:55 2025 +0000
x86/msi: Change __msi_set_enable() to take pci_sbdf_t
This removes the unnecessary work of splitting a 32-bit number across
4 registers, and recombining later. Bloat-o-meter reports:
add/remove: 0/0 grow/shrink: 0/9 up/down: 0/-295 (-295)
Function old new delta
enable_iommu 1748 1732 -16
iommu_msi_unmask 98 81 -17
iommu_msi_mask 100 83 -17
disable_iommu 286 269 -17
__msi_set_enable 81 50 -31
__pci_disable_msi 178 146 -32
pci_cleanup_msi 268 229 -39
pci_enable_msi 1063 1019 -44
pci_restore_msi_state 1116 1034 -82
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
---
xen/arch/x86/include/asm/msi.h | 2 +-
xen/arch/x86/msi.c | 14 ++++----------
xen/drivers/passthrough/amd/iommu_init.c | 5 +++--
3 files changed, 8 insertions(+), 13 deletions(-)
diff --git a/xen/arch/x86/include/asm/msi.h b/xen/arch/x86/include/asm/msi.h
index 7f9e531f73..378b85ee94 100644
--- a/xen/arch/x86/include/asm/msi.h
+++ b/xen/arch/x86/include/asm/msi.h
@@ -238,7 +238,7 @@ struct arch_msix {
void early_msi_init(void);
void msi_compose_msg(unsigned vector, const cpumask_t *cpu_mask,
struct msi_msg *msg);
-void __msi_set_enable(u16 seg, u8 bus, u8 slot, u8 func, int pos, int enable);
+void __msi_set_enable(pci_sbdf_t sbdf, int pos, int enable);
void cf_check mask_msi_irq(struct irq_desc *desc);
void cf_check unmask_msi_irq(struct irq_desc *desc);
void guest_mask_msi_irq(struct irq_desc *desc, bool mask);
diff --git a/xen/arch/x86/msi.c b/xen/arch/x86/msi.c
index c9fe942c46..bf5b71822e 100644
--- a/xen/arch/x86/msi.c
+++ b/xen/arch/x86/msi.c
@@ -267,28 +267,22 @@ void cf_check set_msi_affinity(struct irq_desc *desc,
const cpumask_t *mask)
write_msi_msg(msi_desc, &msg);
}
-void __msi_set_enable(u16 seg, u8 bus, u8 slot, u8 func, int pos, int enable)
+void __msi_set_enable(pci_sbdf_t sbdf, int pos, int enable)
{
- uint16_t control = pci_conf_read16(PCI_SBDF(seg, bus, slot, func),
- pos + PCI_MSI_FLAGS);
+ uint16_t control = pci_conf_read16(sbdf, pos + PCI_MSI_FLAGS);
control &= ~PCI_MSI_FLAGS_ENABLE;
if ( enable )
control |= PCI_MSI_FLAGS_ENABLE;
- pci_conf_write16(PCI_SBDF(seg, bus, slot, func),
- pos + PCI_MSI_FLAGS, control);
+ pci_conf_write16(sbdf, pos + PCI_MSI_FLAGS, control);
}
static void msi_set_enable(struct pci_dev *dev, int enable)
{
unsigned int pos = dev->msi_pos;
- u16 seg = dev->seg;
- u8 bus = dev->bus;
- u8 slot = PCI_SLOT(dev->devfn);
- u8 func = PCI_FUNC(dev->devfn);
if ( pos )
- __msi_set_enable(seg, bus, slot, func, pos, enable);
+ __msi_set_enable(dev->sbdf, pos, enable);
}
static void msix_set_enable(struct pci_dev *dev, int enable)
diff --git a/xen/drivers/passthrough/amd/iommu_init.c
b/xen/drivers/passthrough/amd/iommu_init.c
index 934adc5abe..bb25b55c85 100644
--- a/xen/drivers/passthrough/amd/iommu_init.c
+++ b/xen/drivers/passthrough/amd/iommu_init.c
@@ -409,8 +409,9 @@ static void iommu_reset_log(struct amd_iommu *iommu,
static void amd_iommu_msi_enable(struct amd_iommu *iommu, int flag)
{
- __msi_set_enable(iommu->seg, PCI_BUS(iommu->bdf), PCI_SLOT(iommu->bdf),
- PCI_FUNC(iommu->bdf), iommu->msi.msi_attrib.pos, flag);
+ pci_sbdf_t sbdf = { .seg = iommu->seg, .bdf = iommu->bdf };
+
+ __msi_set_enable(sbdf, iommu->msi.msi_attrib.pos, flag);
}
static void cf_check iommu_msi_unmask(struct irq_desc *desc)
--
generated by git-patchbot for /home/xen/git/xen.git#staging
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |