[PATCH v16 0/5] PCI devices passthrough on Arm, part 3

Stewart Hildebrand posted 5 patches 1 year, 8 months ago
Patches applied successfully (tree, apply log)
git fetch https://gitlab.com/xen-project/patchew/xen tags/patchew/20240522225927.77398-1-stewart.hildebrand@amd.com
There is a newer version of this series
xen/arch/arm/vpci.c        | 63 +++++++++++++++++++++++------
xen/drivers/Kconfig        |  4 ++
xen/drivers/vpci/header.c  | 60 +++++++++++++++++++++++++---
xen/drivers/vpci/msi.c     |  9 +++++
xen/drivers/vpci/msix.c    |  7 ++++
xen/drivers/vpci/vpci.c    | 81 ++++++++++++++++++++++++++++++++++++++
xen/include/xen/pci_regs.h |  1 +
xen/include/xen/sched.h    | 10 ++++-
xen/include/xen/vpci.h     | 28 +++++++++++++
9 files changed, 244 insertions(+), 19 deletions(-)
[PATCH v16 0/5] PCI devices passthrough on Arm, part 3
Posted by Stewart Hildebrand 1 year, 8 months ago
This is next version of vPCI rework. Aim of this series is to prepare
ground for introducing PCI support on ARM platform.

in v16:
 - minor updates - see individual patches

in v15:
 - reorder so ("arm/vpci: honor access size when returning an error")
   comes first

in v14:
 - drop first 9 patches as they were committed
 - updated ("vpci/header: emulate PCI_COMMAND register for guests")

in v13:
 - drop ("xen/arm: vpci: permit access to guest vpci space") as it was
   unnecessary

in v12:
 - I (Stewart) coordinated with Volodomyr to send this whole series. So,
   add my (Stewart) Signed-off-by to all patches.
 - The biggest change is to re-work the PCI_COMMAND register patch.
   Additional feedback has also been addressed - see individual patches.
 - Drop ("pci: msi: pass pdev to pci_enable_msi() function") and
   ("pci: introduce per-domain PCI rwlock") as they were committed
 - Rename ("rangeset: add rangeset_empty() function")
       to ("rangeset: add rangeset_purge() function")
 - Rename ("vpci/header: rework exit path in init_bars")
       to ("vpci/header: rework exit path in init_header()")

in v11:
 - Added my (Volodymyr) Signed-off-by tag to all patches
 - Patch "vpci/header: emulate PCI_COMMAND register for guests" is in
   intermediate state, because it was agreed to rework it once Stewart's
   series on register handling are in.
 - Addressed comments, please see patch descriptions for details.

in v10:

 - Removed patch ("xen/arm: vpci: check guest range"), proper fix
   for the issue is part of ("vpci/header: emulate PCI_COMMAND
   register for guests")
 - Removed patch ("pci/header: reset the command register when adding
   devices")
 - Added patch ("rangeset: add rangeset_empty() function") because
   this function is needed in ("vpci/header: handle p2m range sets
   per BAR")
 - Added ("vpci/header: handle p2m range sets per BAR") which addressed
   an issue discovered by Andrii Chepurnyi during virtio integration
 - Added ("pci: msi: pass pdev to pci_enable_msi() function"), which is
   prereq for ("pci: introduce per-domain PCI rwlock")
 - Fixed "Since v9/v8/... " comments in changelogs to reduce confusion.
   I left "Since" entries for older versions, because they were added
   by original author of the patches.

in v9:

v9 includes addressed commentes from a previous one. Also it
introduces a couple patches from Stewart. This patches are related to
vPCI use on ARM. Patch "vpci/header: rework exit path in init_bars"
was factored-out from "vpci/header: handle p2m range sets per BAR".

in v8:

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.

Changes from previous versions are described in each separate patch.

Oleksandr Andrushchenko (4):
  vpci/header: emulate PCI_COMMAND register for guests
  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):
  arm/vpci: honor access size when returning an error

 xen/arch/arm/vpci.c        | 63 +++++++++++++++++++++++------
 xen/drivers/Kconfig        |  4 ++
 xen/drivers/vpci/header.c  | 60 +++++++++++++++++++++++++---
 xen/drivers/vpci/msi.c     |  9 +++++
 xen/drivers/vpci/msix.c    |  7 ++++
 xen/drivers/vpci/vpci.c    | 81 ++++++++++++++++++++++++++++++++++++++
 xen/include/xen/pci_regs.h |  1 +
 xen/include/xen/sched.h    | 10 ++++-
 xen/include/xen/vpci.h     | 28 +++++++++++++
 9 files changed, 244 insertions(+), 19 deletions(-)


base-commit: ced21fbb2842ac4655048bdee56232974ff9ff9c
-- 
2.45.1
Re: [PATCH v16 0/5] PCI devices passthrough on Arm, part 3
Posted by Mykyta Poturai 11 months, 2 weeks ago
On 23.05.24 01:59, Stewart Hildebrand wrote:
> This is next version of vPCI rework. Aim of this series is to prepare
> ground for introducing PCI support on ARM platform.
> 
> in v16:
>   - minor updates - see individual patches
> 
> in v15:
>   - reorder so ("arm/vpci: honor access size when returning an error")
>     comes first
> 
> in v14:
>   - drop first 9 patches as they were committed
>   - updated ("vpci/header: emulate PCI_COMMAND register for guests")
> 
> in v13:
>   - drop ("xen/arm: vpci: permit access to guest vpci space") as it was
>     unnecessary
> 
> in v12:
>   - I (Stewart) coordinated with Volodomyr to send this whole series. So,
>     add my (Stewart) Signed-off-by to all patches.
>   - The biggest change is to re-work the PCI_COMMAND register patch.
>     Additional feedback has also been addressed - see individual patches.
>   - Drop ("pci: msi: pass pdev to pci_enable_msi() function") and
>     ("pci: introduce per-domain PCI rwlock") as they were committed
>   - Rename ("rangeset: add rangeset_empty() function")
>         to ("rangeset: add rangeset_purge() function")
>   - Rename ("vpci/header: rework exit path in init_bars")
>         to ("vpci/header: rework exit path in init_header()")
> 
> in v11:
>   - Added my (Volodymyr) Signed-off-by tag to all patches
>   - Patch "vpci/header: emulate PCI_COMMAND register for guests" is in
>     intermediate state, because it was agreed to rework it once Stewart's
>     series on register handling are in.
>   - Addressed comments, please see patch descriptions for details.
> 
> in v10:
> 
>   - Removed patch ("xen/arm: vpci: check guest range"), proper fix
>     for the issue is part of ("vpci/header: emulate PCI_COMMAND
>     register for guests")
>   - Removed patch ("pci/header: reset the command register when adding
>     devices")
>   - Added patch ("rangeset: add rangeset_empty() function") because
>     this function is needed in ("vpci/header: handle p2m range sets
>     per BAR")
>   - Added ("vpci/header: handle p2m range sets per BAR") which addressed
>     an issue discovered by Andrii Chepurnyi during virtio integration
>   - Added ("pci: msi: pass pdev to pci_enable_msi() function"), which is
>     prereq for ("pci: introduce per-domain PCI rwlock")
>   - Fixed "Since v9/v8/... " comments in changelogs to reduce confusion.
>     I left "Since" entries for older versions, because they were added
>     by original author of the patches.
> 
> in v9:
> 
> v9 includes addressed commentes from a previous one. Also it
> introduces a couple patches from Stewart. This patches are related to
> vPCI use on ARM. Patch "vpci/header: rework exit path in init_bars"
> was factored-out from "vpci/header: handle p2m range sets per BAR".
> 
> in v8:
> 
> 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.
> 
> Changes from previous versions are described in each separate patch.
> 
> Oleksandr Andrushchenko (4):
>    vpci/header: emulate PCI_COMMAND register for guests
>    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):
>    arm/vpci: honor access size when returning an error
> 
>   xen/arch/arm/vpci.c        | 63 +++++++++++++++++++++++------
>   xen/drivers/Kconfig        |  4 ++
>   xen/drivers/vpci/header.c  | 60 +++++++++++++++++++++++++---
>   xen/drivers/vpci/msi.c     |  9 +++++
>   xen/drivers/vpci/msix.c    |  7 ++++
>   xen/drivers/vpci/vpci.c    | 81 ++++++++++++++++++++++++++++++++++++++
>   xen/include/xen/pci_regs.h |  1 +
>   xen/include/xen/sched.h    | 10 ++++-
>   xen/include/xen/vpci.h     | 28 +++++++++++++
>   9 files changed, 244 insertions(+), 19 deletions(-)
> 
> 
> base-commit: ced21fbb2842ac4655048bdee56232974ff9ff9c


Hi everyone
I see that the first three patches from this series were merged, but 
patches 4 and 5 were not, despite having acks. Is there something else 
wrong with them that needs addressing, or were they just missed by accident?

-- 
Mykyta
Re: [PATCH v16 0/5] PCI devices passthrough on Arm, part 3
Posted by Stewart Hildebrand 11 months, 1 week ago
On 2/28/25 09:40, Mykyta Poturai wrote:
> On 23.05.24 01:59, Stewart Hildebrand wrote:
>> This is next version of vPCI rework. Aim of this series is to prepare
>> ground for introducing PCI support on ARM platform.
>>
>> in v16:
>>   - minor updates - see individual patches
>>
>> in v15:
>>   - reorder so ("arm/vpci: honor access size when returning an error")
>>     comes first
>>
>> in v14:
>>   - drop first 9 patches as they were committed
>>   - updated ("vpci/header: emulate PCI_COMMAND register for guests")
>>
>> in v13:
>>   - drop ("xen/arm: vpci: permit access to guest vpci space") as it was
>>     unnecessary
>>
>> in v12:
>>   - I (Stewart) coordinated with Volodomyr to send this whole series. So,
>>     add my (Stewart) Signed-off-by to all patches.
>>   - The biggest change is to re-work the PCI_COMMAND register patch.
>>     Additional feedback has also been addressed - see individual patches.
>>   - Drop ("pci: msi: pass pdev to pci_enable_msi() function") and
>>     ("pci: introduce per-domain PCI rwlock") as they were committed
>>   - Rename ("rangeset: add rangeset_empty() function")
>>         to ("rangeset: add rangeset_purge() function")
>>   - Rename ("vpci/header: rework exit path in init_bars")
>>         to ("vpci/header: rework exit path in init_header()")
>>
>> in v11:
>>   - Added my (Volodymyr) Signed-off-by tag to all patches
>>   - Patch "vpci/header: emulate PCI_COMMAND register for guests" is in
>>     intermediate state, because it was agreed to rework it once Stewart's
>>     series on register handling are in.
>>   - Addressed comments, please see patch descriptions for details.
>>
>> in v10:
>>
>>   - Removed patch ("xen/arm: vpci: check guest range"), proper fix
>>     for the issue is part of ("vpci/header: emulate PCI_COMMAND
>>     register for guests")
>>   - Removed patch ("pci/header: reset the command register when adding
>>     devices")
>>   - Added patch ("rangeset: add rangeset_empty() function") because
>>     this function is needed in ("vpci/header: handle p2m range sets
>>     per BAR")
>>   - Added ("vpci/header: handle p2m range sets per BAR") which addressed
>>     an issue discovered by Andrii Chepurnyi during virtio integration
>>   - Added ("pci: msi: pass pdev to pci_enable_msi() function"), which is
>>     prereq for ("pci: introduce per-domain PCI rwlock")
>>   - Fixed "Since v9/v8/... " comments in changelogs to reduce confusion.
>>     I left "Since" entries for older versions, because they were added
>>     by original author of the patches.
>>
>> in v9:
>>
>> v9 includes addressed commentes from a previous one. Also it
>> introduces a couple patches from Stewart. This patches are related to
>> vPCI use on ARM. Patch "vpci/header: rework exit path in init_bars"
>> was factored-out from "vpci/header: handle p2m range sets per BAR".
>>
>> in v8:
>>
>> 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.
>>
>> Changes from previous versions are described in each separate patch.
>>
>> Oleksandr Andrushchenko (4):
>>    vpci/header: emulate PCI_COMMAND register for guests
>>    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):
>>    arm/vpci: honor access size when returning an error
>>
>>   xen/arch/arm/vpci.c        | 63 +++++++++++++++++++++++------
>>   xen/drivers/Kconfig        |  4 ++
>>   xen/drivers/vpci/header.c  | 60 +++++++++++++++++++++++++---
>>   xen/drivers/vpci/msi.c     |  9 +++++
>>   xen/drivers/vpci/msix.c    |  7 ++++
>>   xen/drivers/vpci/vpci.c    | 81 ++++++++++++++++++++++++++++++++++++++
>>   xen/include/xen/pci_regs.h |  1 +
>>   xen/include/xen/sched.h    | 10 ++++-
>>   xen/include/xen/vpci.h     | 28 +++++++++++++
>>   9 files changed, 244 insertions(+), 19 deletions(-)
>>
>>
>> base-commit: ced21fbb2842ac4655048bdee56232974ff9ff9c
> 
> 
> Hi everyone
> I see that the first three patches from this series were merged, but 
> patches 4 and 5 were not, despite having acks. Is there something else 
> wrong with them that needs addressing, or were they just missed by accident?

("xen/arm: account IO handlers for emulated PCI MSI-X") was sort of a
presumptive change related to future work, and I think it should wait
until the IO handlers are present on Arm, if they are even needed at
all.

There was some additional dialogue following ("xen/arm: translate
virtual PCI bus topology for guests") that may need to be investigated.