[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v4 0/7] SMMU handling for PCIe Passthrough on ARM
On 6/7/23 03:19, Julien Grall wrote: > Hi Stewart, > > On 07/06/2023 04:02, Stewart Hildebrand wrote: >> This series introduces SMMU handling for PCIe passthrough on ARM. These >> patches >> are independent from (and don't depend on) the vPCI reference >> counting/locking >> work in progress, and should be able to be upstreamed independently. > > Can you clarify how this code was tested? Does this require code not yet > upstreamed? I'm testing the series standalone (+ config changes) by using a PCI device in dom0, and also in combination with the vPCI series [3] [4] for passthrough to a domU. Here are some more details on the test cases I'm using. 1. Using the PCI device in dom0 with the pci-passthrough=yes arg. In this case a couple of additional config changes [1] [2] are needed to select CONFIG_HAS_PCI=y, CONFIG_HAS_VPCI=y, and make has_vpci() return true. Aside from this series itself and the config changes, nothing else not-yet-upstreamed is required for this test case. It is on my TODO list to upstream these config changes, which I think will be useful on their own, not necessarily as part of any other series. Actually, your question prompted me to look at my test cases a bit more carefully, and I discovered a case that v4 of this series doesn't handle right. In order for the PCI device to be usable in dom0, it should be assigned by default to dom0/hardware domain during PHYSDEVOP_pci_device_add. But v4 of this series doesn't assign it by default to dom0/hardware domain. I initially missed this because I happened to assign the stream ID of the PCI device to dom0 by the iommus property. In other words, I initially tested with this: &pcie { iommus = <&smmu 0x4d0>; iommu-map = <0x0 &smmu 0x4d0 0x10000>; iommu-map-mask = <0x0>; }; But I should be testing with this (i.e. omitting the iommus property): &pcie { iommu-map = <0x0 &smmu 0x4d0 0x10000>; iommu-map-mask = <0x0>; }; Omitting iommus currently breaks using a PCI device in dom0 in v4. I'll fix this in v5. 2. To test the phantom bits, since I don't have a phantom device readily available, I use the pci-phantom arg and a carefully constructed iommu-map property. The PCI device's stream ID is actually 0x4d0, but I put 0x4ce in the iommu-map to make it appear as if it's one of the phantom functions generating the DMA traffic. pci-phantom=01:00,1 &pcie { /* phantom test */ iommu-map = <0x0 &smmu 0x4ce 0x10000>; iommu-map-mask = <0x7>; }; 3. Passthrough to a domU. In this case the vPCI series is needed [3], and an MSI series not yet submitted to the list [4] (or another way to hack/assign the IRQ to the domU), in addition to the 2 config changes [1] [2]. The procedure is described at [5]. [1] https://gitlab.com/xen-project/people/bmarquis/xen-arm-poc/-/commit/9a08f1f7ce28ec619640ba9ce11018bf443e9a0e [2] https://gitlab.com/xen-project/people/bmarquis/xen-arm-poc/-/commit/27be1729ce8128dbe37275ce7946b2fbd2e5a382 [3] https://lists.xenproject.org/archives/html/xen-devel/2023-06/msg00863.html [4] https://gitlab.com/xen-project/people/bmarquis/xen-arm-poc/-/commits/poc/pci-passthrough [5] https://lists.xenproject.org/archives/html/xen-devel/2022-12/msg00682.html
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |