On 9/1/25 18:14, CLEMENT MATHIEU--DRIF wrote:
From: Damien Bergamini <[email protected]>

Starting with commit cab1398a60eb, SR-IOV VFs are realized as soon as
pcie_sriov_pf_init() is called.  Because pcie_sriov_pf_init() must be
called before pcie_sriov_pf_init_vf_bar(), the VF BARs types won't be
known when the VF realize function calls pcie_sriov_vf_register_bar().

This breaks the memory regions of the VFs (for instance with igbvf):

$ lspci
...
     Region 0: Memory at 281a00000 (64-bit, prefetchable) [virtual] [size=16K]
     Region 3: Memory at 281a20000 (64-bit, prefetchable) [virtual] [size=16K]

$ info mtree
...
address-space: pci_bridge_pci_mem
   0000000000000000-ffffffffffffffff (prio 0, i/o): pci_bridge_pci
     0000000081a00000-0000000081a03fff (prio 1, i/o): igbvf-mmio
     0000000081a20000-0000000081a23fff (prio 1, i/o): igbvf-msix

and causes MMIO accesses to fail:

     Invalid write at addr 0x281A01520, size 4, region '(null)', reason: 
rejected
     Invalid read at addr 0x281A00C40, size 4, region '(null)', reason: rejected

To fix this, VF BARs are now registered with pci_register_bar() which
has a type parameter and pcie_sriov_vf_register_bar() is removed.

Fixes: cab1398a60eb ("pcie_sriov: Reuse SR-IOV VF device instances")
Signed-off-by: Damien Bergamini <[email protected]>
Signed-off-by: Clement Mathieu--Drif <[email protected]>
---
  docs/pcie_sriov.txt         |  5 ++---
  hw/net/igbvf.c              |  6 ++++--
  hw/nvme/ctrl.c              |  8 ++------
  hw/pci/pci.c                |  3 ---
  hw/pci/pcie_sriov.c         | 11 -----------
  include/hw/pci/pcie_sriov.h |  4 ----
  6 files changed, 8 insertions(+), 29 deletions(-)

This one too, - is it qemu-stable material (10.0 & 10.1)?
For 10.0.x (which is a long-term support series), it needs
some adjustments I guess (it doesn't apply to 10.0 directly).

Thanks,

/mjt

Reply via email to