[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v5 00/14] PCI devices passthrough on Arm, part 3
Dear rest maintainers! Could you please review this series which seems to get stuck? Thank you in advance, Oleksandr On 25.11.21 13:02, Oleksandr Andrushchenko wrote: > From: Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx> > > Hi, all! > > 1. This patch series is focusing on vPCI and adds support for non-identity > PCI BAR mappings which is required while passing through a PCI device to > a guest. The highlights are: > > - Add relevant vpci register handlers when assigning PCI device to a domain > and remove those when de-assigning. This allows having different > handlers for different domains, e.g. hwdom and other guests. > > - Emulate guest BAR register values based on physical BAR values. > This allows creating a guest view of the registers and emulates > size and properties probe as it is done during PCI device enumeration by > the guest. > > - Instead of handling a single range set, that contains all the memory > regions of all the BARs and ROM, have them per BAR. > > - Take into account guest's BAR view and program its p2m accordingly: > gfn is guest's view of the BAR and mfn is the physical BAR value as set > up by the host bridge in the hardware domain. > This way hardware doamin sees physical BAR values and guest sees > emulated ones. > > 2. The series also adds support for virtual PCI bus topology for guests: > - We emulate a single host bridge for the guest, so segment is always 0. > - The implementation is limited to 32 devices which are allowed on > a single PCI bus. > - The virtual bus number is set to 0, so virtual devices are seen > as embedded endpoints behind the root complex. > > 3. The series has complete re-work of the locking scheme used/absent before > with > the help of the work started by Roger [1]: > [PATCH v5 03/13] vpci: move lock outside of struct vpci > > This way the lock can be used to check whether vpci is present, and > removal can be performed while holding the lock, in order to make > sure there are no accesses to the contents of the vpci struct. > Previously removal could race with vpci_read for example, since the > lock was dropped prior to freeing pdev->vpci. > This also solves synchronization issues between all vPCI code entities > which could run in parallel. > > 4. There is an outstanding TODO left unimplemented by this series: > for unprivileged guests vpci_{read|write} need to be re-worked > to not passthrough accesses to the registers not explicitly handled > by the corresponding vPCI handlers: without fixing that passthrough > to guests is completely unsafe as Xen allows them full access to > the registers. > > Xen needs to be sure that every register a guest accesses is not > going to cause the system to malfunction, so Xen needs to keep a > list of the registers it is safe for a guest to access. > > For example, we should only expose the PCI capabilities that we know > are safe for a guest to use, i.e.: MSI and MSI-X initially. > The rest of the capabilities should be blocked from guest access, > unless we audit them and declare safe for a guest to access. > > As a reference we might want to look at the approach currently used > by QEMU in order to do PCI passthrough. A very limited set of PCI > capabilities known to be safe for untrusted access are exposed to the > guest and registers need to be explicitly handled or else access is > rejected. Xen needs a fairly similar model in vPCI or else none of > this will be safe for unprivileged access. > > 5. The series was also tested on: > - x86 PVH Dom0 and doesn't break it. > - x86 HVM with PCI passthrough to DomU and doesn't break it. > > Thank you, > Oleksandr > > [1] > https://lore.kernel.org/xen-devel/20180717094830.54806-2-roger.pau@xxxxxxxxxx/ > > Oleksandr Andrushchenko (13): > rangeset: add RANGESETF_no_print flag > vpci: fix function attributes for vpci_process_pending > vpci: cancel pending map/unmap on vpci removal > vpci: add hooks for PCI device assign/de-assign > vpci/header: implement guest BAR register handlers > 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 > vpci: add TODO for the registers not explicitly handled > > Roger Pau Monne (1): > vpci: move lock outside of struct vpci > > tools/tests/vpci/emul.h | 5 +- > tools/tests/vpci/main.c | 4 +- > xen/arch/arm/vpci.c | 33 +++- > xen/arch/x86/hvm/vmsi.c | 8 +- > xen/common/rangeset.c | 5 +- > xen/drivers/Kconfig | 4 + > xen/drivers/passthrough/pci.c | 11 ++ > xen/drivers/vpci/header.c | 352 +++++++++++++++++++++++++++------- > xen/drivers/vpci/msi.c | 11 +- > xen/drivers/vpci/msix.c | 8 +- > xen/drivers/vpci/vpci.c | 252 +++++++++++++++++++++--- > xen/include/xen/pci.h | 6 + > xen/include/xen/rangeset.h | 7 +- > xen/include/xen/sched.h | 8 + > xen/include/xen/vpci.h | 47 ++++- > 15 files changed, 644 insertions(+), 117 deletions(-) >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |