This series provide fixes for following two issues:
1. AMD IOMMU fails to detect the devices when they are attached to PCI bus with
bus id != 0.
e.g. With following command line, dhclient command fails inside the guest
-device
pcie-root-port,port=0x10,chassis=1,id=pci.1,bus=pcie.0,multifunction=on,addr=0x5
\
-netdev user,id=USER0,hostfwd=tcp::3333-:22 \
-device
virtio-net-pci,id=vnet0,iommu_platform=on,disable-legacy=on,romfile=,netdev=USER0,bus=pci.1,addr=0
\
2. Current AMD IOMMU supports IOVAs upto 60 bit which cause failure while
setting up the devices when guest is booted with command line
"iommu.forcedac=1".
One example of the failure is when there are two virtio ethernet devices
attached to the guest with command line
-netdev user,id=USER0 \
-netdev user,id=USER1 \
-device
virtio-net-pci,id=vnet0,iommu_platform=on,disable-legacy=on,romfile=,netdev=USER0
\
-device
virtio-net-pci,id=vnet1,iommu_platform=on,disable-legacy=on,romfile=,netdev=USER1
\
In this case dhclient fails for second device with following dmesg
[ 24.802644] virtio_net virtio0 enp0s1: TX timeout on queue: 0, sq:
output.0, vq: 0x1, name: output.0, 5664000 usecs ago
[ 29.856716] virtio_net virtio0 enp0s1: NETDEV WATCHDOG: CPU: 59: transmit
queue 0 timed out 10720 ms
[ 29.858585] virtio_net virtio0 enp0s1: TX timeout on queue: 0, sq:
output.0, vq: 0x1, name: output.0, 10720000 usecs ago
-------------------------------------------------------------------------------
Change log:
----------
* Changes since V2:
https://lore.kernel.org/qemu-devel/[email protected]/
P1:
- Remove cast from the pointer assignment [MST]
- Rename struct amdvi_as_key to AMDViAsKey [Alejandro, MST]
- Fix compilation error due to missing 'static' [Alejandro]
P2:
- Rename struct amdvi_iotlb_key to AMDViIOTLBKey [Alejandro, MST]
- Fix compilation error [Alejandro]
* Changes Since V1:
https://lore.kernel.org/qemu-devel/[email protected]/
P1:
- Use fixed type uint8_t for devfn
- Use uintptr_t instead of uint64_t
- Build hash key using lower 56 bits of bus pointer and 8 bits of devfn
- Use gboolean instead of int for amdvi_find_as_by_devid
- Update comments
- Use IOMMU_NOTIFIER_NONE instead of IOMMU_NONE
P2:
- Reword commit message
- Correctly initialize `struct amdvi_iotlb_key`
- Remove unused macro
-------------------------------------------------------------------------------
Base commit: (qemu uptream) eb7abb4a719f
-------------------------------------------------------------------------------
Sairaj Kodilkar (2):
amd_iommu: Fix handling device on buses != 0
amd_iommu: Support 64 bit address for IOTLB lookup
hw/i386/amd_iommu.c | 179 +++++++++++++++++++++++++++-----------------
hw/i386/amd_iommu.h | 6 +-
2 files changed, 113 insertions(+), 72 deletions(-)
--
2.34.1