Hello, This is another another version of vPCI rework (previous one can be found at [1]). The biggest change is how vPCI locking is done. This series uses per-domain vPCI rwlock.
Note that this series does not include my work on reference counting for PCI devices because this counting does not resolve isses we are having for vPCI. While it is (maybe) nice to have PCI refcounting, it does not moves us towards PCI on ARM. [1] https://lore.kernel.org/all/20220204063459.680961-1-andr2...@gmail.com/ Oleksandr Andrushchenko (12): vpci: introduce per-domain lock to protect vpci structure vpci: restrict unhandled read/write operations for guests vpci: add hooks for PCI device assign/de-assign vpci/header: implement guest BAR register handlers rangeset: add RANGESETF_no_print flag vpci/header: handle p2m range sets per BAR vpci/header: program p2m with guest BAR view vpci/header: emulate PCI_COMMAND register for guests vpci/header: reset the command register when adding devices vpci: add initial support for virtual PCI bus topology xen/arm: translate virtual PCI bus topology for guests xen/arm: account IO handlers for emulated PCI MSI-X xen/arch/arm/vpci.c | 31 ++- xen/arch/x86/hvm/vmsi.c | 7 + xen/common/domain.c | 3 + xen/common/rangeset.c | 5 +- xen/drivers/Kconfig | 4 + xen/drivers/passthrough/pci.c | 16 ++ xen/drivers/vpci/header.c | 485 ++++++++++++++++++++++++++++------ xen/drivers/vpci/msi.c | 29 +- xen/drivers/vpci/msix.c | 55 +++- xen/drivers/vpci/vpci.c | 257 ++++++++++++++++-- xen/include/xen/pci.h | 1 + xen/include/xen/rangeset.h | 5 +- xen/include/xen/sched.h | 11 + xen/include/xen/vpci.h | 47 +++- 14 files changed, 826 insertions(+), 130 deletions(-) -- 2.40.1