mbox series

[v8,00/13] PCI devices passthrough on Arm, part 3

Message ID 20230720003205.1828537-1-volodymyr_babchuk@epam.com (mailing list archive)
Headers show
Series PCI devices passthrough on Arm, part 3 | expand

Message

Volodymyr Babchuk July 20, 2023, 12:32 a.m. UTC
Hello,

This is next version of vPCI rework. Aim of this series is to prepare
ground for introducing PCI support on ARM platform.

The biggest change from previous, mistakenly named, v7 series is how
locking is implemented. Instead of d->vpci_rwlock we introduce
d->pci_lock which has broader scope, as it protects not only domain's
vpci state, but domain's list of PCI devices as well.

As we discussed in IRC with Roger, it is not feasible to rework all
the existing code to use the new lock right away. It was agreed that
any write access to d->pdev_list will be protected by **both**
d->pci_lock in write mode and pcidevs_lock(). Read access on other
hand should be protected by either d->pci_lock in read mode or
pcidevs_lock(). It is expected that existing code will use
pcidevs_lock() and new users will use new rw lock. Of course, this
does not mean that new users shall not use pcidevs_lock() when it is
appropriate.

Apart from locking scheme rework, there are less major fixes in some
patches, based on the review comments.

Oleksandr Andrushchenko (12):
  vpci: use per-domain PCI 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

Volodymyr Babchuk (1):
  pci: introduce per-domain PCI rwlock

 xen/arch/arm/vpci.c                         |  61 ++-
 xen/arch/x86/hvm/vmsi.c                     |   4 +
 xen/common/domain.c                         |   1 +
 xen/common/rangeset.c                       |   5 +-
 xen/drivers/Kconfig                         |   4 +
 xen/drivers/passthrough/amd/pci_amd_iommu.c |   9 +-
 xen/drivers/passthrough/pci.c               |  96 ++++-
 xen/drivers/passthrough/vtd/iommu.c         |   9 +-
 xen/drivers/vpci/header.c                   | 453 ++++++++++++++++----
 xen/drivers/vpci/msi.c                      |  18 +-
 xen/drivers/vpci/msix.c                     |  56 ++-
 xen/drivers/vpci/vpci.c                     | 176 +++++++-
 xen/include/xen/pci.h                       |   1 +
 xen/include/xen/rangeset.h                  |   5 +-
 xen/include/xen/sched.h                     |   9 +
 xen/include/xen/vpci.h                      |  42 +-
 16 files changed, 828 insertions(+), 121 deletions(-)

Comments

Volodymyr Babchuk July 20, 2023, 12:41 a.m. UTC | #1
Volodymyr Babchuk <volodymyr_babchuk@epam.com> writes:

Hello again,

Looks like I messed up with add_maintainers script and sent this series
without proper CCs. So I am CCing all interested persons only in this
cover letter only.

Sorry for the noise.

> Hello,
>
> This is next version of vPCI rework. Aim of this series is to prepare
> ground for introducing PCI support on ARM platform.
>
> The biggest change from previous, mistakenly named, v7 series is how
> locking is implemented. Instead of d->vpci_rwlock we introduce
> d->pci_lock which has broader scope, as it protects not only domain's
> vpci state, but domain's list of PCI devices as well.
>
> As we discussed in IRC with Roger, it is not feasible to rework all
> the existing code to use the new lock right away. It was agreed that
> any write access to d->pdev_list will be protected by **both**
> d->pci_lock in write mode and pcidevs_lock(). Read access on other
> hand should be protected by either d->pci_lock in read mode or
> pcidevs_lock(). It is expected that existing code will use
> pcidevs_lock() and new users will use new rw lock. Of course, this
> does not mean that new users shall not use pcidevs_lock() when it is
> appropriate.
>
> Apart from locking scheme rework, there are less major fixes in some
> patches, based on the review comments.
>
> Oleksandr Andrushchenko (12):
>   vpci: use per-domain PCI 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
>
> Volodymyr Babchuk (1):
>   pci: introduce per-domain PCI rwlock
>
>  xen/arch/arm/vpci.c                         |  61 ++-
>  xen/arch/x86/hvm/vmsi.c                     |   4 +
>  xen/common/domain.c                         |   1 +
>  xen/common/rangeset.c                       |   5 +-
>  xen/drivers/Kconfig                         |   4 +
>  xen/drivers/passthrough/amd/pci_amd_iommu.c |   9 +-
>  xen/drivers/passthrough/pci.c               |  96 ++++-
>  xen/drivers/passthrough/vtd/iommu.c         |   9 +-
>  xen/drivers/vpci/header.c                   | 453 ++++++++++++++++----
>  xen/drivers/vpci/msi.c                      |  18 +-
>  xen/drivers/vpci/msix.c                     |  56 ++-
>  xen/drivers/vpci/vpci.c                     | 176 +++++++-
>  xen/include/xen/pci.h                       |   1 +
>  xen/include/xen/rangeset.h                  |   5 +-
>  xen/include/xen/sched.h                     |   9 +
>  xen/include/xen/vpci.h                      |  42 +-
>  16 files changed, 828 insertions(+), 121 deletions(-)