[SLOF] [RFC PATCH] pci-properties: Enforce all MMIO BARs to be 64K page aligned
Nikunj A Dadhania
nikunj at linux.vnet.ibm.com
Fri Dec 11 20:40:33 AEDT 2015
Yongji Xie <xyjxie at linux.vnet.ibm.com> writes:
> QEMU may passthrough a pci device of which BARs are smaller than
> 64KB(PAGE_SIZE) to guest if all PCI MMIO BARs are page aligned in
> host. But these passthru-BARs' mmio page would be shared with other
> BARs in guest if guest doesn't support all PCI MMIO BARs to be page
> aligned. This would cause the pci-passthrough fail and mmio emulation
> happens in host.
>
> To solve this performance issue, this patch enforces the alignment
> of all MMIO BARs allocations to be at least 64K page aligned so that
> the mmio page of one BAR would not be shared with other BARs in guest.
So this would be basically hard-code (host page size 64k) page size. Is
there a better way to communicate this to the guest ?
We can pass host page size in the device tree and make this generic.
>
> Signed-off-by: Yongji Xie <xyjxie at linux.vnet.ibm.com>
> ---
> slof/fs/pci-properties.fs | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/slof/fs/pci-properties.fs b/slof/fs/pci-properties.fs
> index da1d4fc..aebc7a7 100644
> --- a/slof/fs/pci-properties.fs
> +++ b/slof/fs/pci-properties.fs
> @@ -127,6 +127,7 @@
> \ Setup a prefetchable 64bit BAR and return its size
> : assign-mem64-bar ( bar-addr -- 8 )
> dup pci-bar-size-mem64 \ fetch size
> + 10000 #aligned \ align size to minimum 64K (page size)
> pci-next-mem \ var to change
> assign-bar-value64 \ and set it all
> ;
> @@ -134,6 +135,7 @@
> \ Setup a prefetchable 32bit BAR and return its size
> : assign-mem32-bar ( bar-addr -- 4 )
> dup pci-bar-size-mem32 \ fetch size
> + 10000 #aligned \ align size to minimum 64K (page size)
> pci-next-mem \ var to change
> assign-bar-value32 \ and set it all
> ;
> @@ -141,6 +143,7 @@
> \ Setup a non-prefetchable 64bit BAR and return its size
> : assign-mmio64-bar ( bar-addr -- 8 )
> dup pci-bar-size-mem64 \ fetch size
> + 10000 #aligned \ align size to minimum 64K (page size)
> pci-next-mmio \ var to change
> assign-bar-value64 \ and set it all
> ;
> @@ -148,6 +151,7 @@
> \ Setup a non-prefetchable 32bit BAR and return its size
> : assign-mmio32-bar ( bar-addr -- 4 )
> dup pci-bar-size-mem32 \ fetch size
> + 10000 #aligned \ align size to minimum 64K (page size)
> pci-next-mmio \ var to change
> assign-bar-value32 \ and set it all
> ;
> @@ -162,6 +166,7 @@
> \ Setup an Expansion ROM bar
> : assign-rom-bar ( bar-addr -- )
> dup pci-bar-size-rom \ fetch size
> + 10000 #aligned \ align size to minimum 64K (page size)
> dup IF \ IF size > 0
> over >r \ | save bar addr for enable
> pci-next-mmio \ | var to change
> --
> 1.7.9.5
More information about the SLOF
mailing list