On 11/08/2022 11:52, Jan Beulich wrote:
> Rename the latter, subsuming the functionality of the former when passed
> NULL as first argument.
>
> Since this requires touching all call sites anyway, take the opportunity
> and fold the remaining three parameters into a single pci_sbdf_t one.
>
> No functional change intended. In particular the locking related
> assertion needs to continue to be kept silent when a non-NULL domain
> pointer is passed - both vpci_read() and vpci_write() call the function
> without holding the lock (adding respective locking to vPCI [or finding
> an alternative to doing so] is the topic of a separate series).
>
> Signed-off-by: Jan Beulich <[email protected]>
> ---
> v2: New.
>
> --- a/xen/arch/x86/irq.c
> +++ b/xen/arch/x86/irq.c
> @@ -2162,7 +2162,7 @@ int map_domain_pirq(
> if ( !cpu_has_apic )
> goto done;
>
> - pdev = pci_get_pdev_by_domain(d, msi->seg, msi->bus, msi->devfn);
> + pdev = pci_get_pdev(d, PCI_SBDF(msi->seg, msi->bus, msi->devfn));
Oh, I should really have read this patch before trying to do the sbdf
conversion in patch 1.
However, it occurs to me that this:
diff --git a/xen/arch/x86/include/asm/msi.h b/xen/arch/x86/include/asm/msi.h
index 117379318f2c..6f0ab845017c 100644
--- a/xen/arch/x86/include/asm/msi.h
+++ b/xen/arch/x86/include/asm/msi.h
@@ -59,9 +59,14 @@
#define FIX_MSIX_MAX_PAGES 512
struct msi_info {
- u16 seg;
- u8 bus;
- u8 devfn;
+ union {
+ struct {
+ u8 devfn;
+ u8 bus;
+ u16 seg;
+ };
+ pci_sbdf_t sbdf;
+ };
int irq;
int entry_nr;
uint64_t table_base;
will simplify several hunks in this patch, because you can just pass
msi->sbdf rather than reconstructing it by reversing 32 bits worth of
data from their in-memory representation.
Preferably with something to this effect included, Reviewed-by: Andrew
Cooper <[email protected]>