qemu-cr16/hw
Sairaj Kodilkar 637dc49a3a amd_iommu: Support 64-bit address for IOTLB lookup
The physical AMD IOMMU supports up to 64 bits of IOVA. When a device tries
to read or write from a given DMA address, the IOMMU translates the address
using the I/O page tables assigned to that device. Since the emulated IOMMU
uses per-device page tables, an ideal cache tag would need to be 68 bits
(64-bit address - 12-bit page alignment + 16-bit device ID).

The current software IOTLB implementation uses a GLib hash table with a
64-bit key to hash both the IOVA and device ID, which limits the IOVA to 60
bits. This causes a failure while setting up the device when a guest is
booted with "iommu.forcedac=1", which forces the use of DMA addresses at the
top of the 64-bit address space.

To address this issue, construct the 64-bit hash key using the upper 52 bits
of IOVA (GFN) and lower 12 bits of the device ID to avoid truncation as much
as possible (reducing hash collisions).

Fixes: d29a09ca68 ("hw/i386: Introduce AMD IOMMU")
Signed-off-by: Sairaj Kodilkar <sarunkod@amd.com>
Reviewed-by: Vasant Hegde <vasant.hegde@amd.com>
Reviewed-by: Alejandro Jimenez <alejandro.j.jimenez@oracle.com>
Tested-by: Alejandro Jimenez <alejandro.j.jimenez@oracle.com>
Signed-off-by: Alejandro Jimenez <alejandro.j.jimenez@oracle.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Message-Id: <20251103203209.645434-4-alejandro.j.jimenez@oracle.com>
2025-11-09 03:25:43 -05:00
..
9pfs 9pfs: Stop including gstrfuncs.h 2025-09-18 21:21:29 +02:00
acpi acpi/generic_event_device.c: enable use_hest_addr for QEMU 10.x 2025-10-05 08:06:32 -04:00
adc qom: Have class_init() take a const data argument 2025-04-25 17:00:41 +02:00
alpha hw/core/loader: capture Error from load_image_targphys 2025-10-28 08:19:18 +01:00
arm aspeed queue: 2025-11-05 08:54:35 +01:00
audio hw/audio: Remove dead code from ac97_realize 2025-11-05 09:26:27 +01:00
avr qom: Have class_init() take a const data argument 2025-04-25 17:00:41 +02:00
block block: enable stats-intervals for storage devices 2025-10-29 12:10:09 +01:00
char * char: rename CharBackend->CharFrontend 2025-10-29 10:43:56 +01:00
core Audio clean-ups 2025-11-01 10:51:32 +01:00
cpu qom: Have class_init() take a const data argument 2025-04-25 17:00:41 +02:00
cxl hw/cxl: Convert cxl_fmws_link() to Error 2025-09-30 14:43:53 +02:00
display migration: Fix regression of passing error_fatal into vmstate_load_state() 2025-11-03 16:04:10 -05:00
dma qom: remove redundant typedef when use OBJECT_DECLARE_SIMPLE_TYPE 2025-10-28 08:08:04 +01:00
fsi qom: Have class_init() take a const data argument 2025-04-25 17:00:41 +02:00
gpio hw/gpio/pl061: Declare pullups/pulldowns as 8-bit types 2025-10-31 16:26:44 +00:00
hppa hw/hppa: Enable LASI i82596 network on 715 machine 2025-11-04 16:14:51 +01:00
hyperv system/ramblock: Move ram_block_discard_*_range() declarations 2025-10-07 03:37:03 +02:00
i2c hw/i2c/smbus_eeprom: Add minimum write recovery time for DDR2 2025-10-21 20:09:57 +02:00
i386 amd_iommu: Support 64-bit address for IOTLB lookup 2025-11-09 03:25:43 -05:00
ide hw/ide/ide-internal: Move dma_buf_commit() into ide "namespace" 2025-10-21 20:16:47 +02:00
input hid: fix incorrect return value for hid 2025-10-05 09:46:06 +03:00
intc migration: Don't free the reason after calling migrate_add_blocker 2025-11-03 16:04:10 -05:00
ipack qom: Make InterfaceInfo[] uses const 2025-04-25 17:00:41 +02:00
ipmi * char: rename CharBackend->CharFrontend 2025-10-29 10:43:56 +01:00
isa x86: ich9: fix default value of 'No Reboot' bit in GCS 2025-10-05 09:01:08 -04:00
loongarch hw/core/loader: capture Error from load_image_targphys 2025-10-28 08:19:18 +01:00
m68k hw/core/loader: capture Error from load_image_targphys 2025-10-28 08:19:18 +01:00
mem hw/cxl: mailbox-utils: 0x5604 - FMAPI Initiate DC Add 2025-07-15 02:56:40 -04:00
microblaze hw/core/loader: capture Error from load_image_targphys 2025-10-28 08:19:18 +01:00
mips * char: rename CharBackend->CharFrontend 2025-10-29 10:43:56 +01:00
misc * char: rename CharBackend->CharFrontend 2025-10-29 10:43:56 +01:00
net i82596: Implement enhanced TX/RX with packet queuing and filtering 2025-11-04 16:14:51 +01:00
nubus hw/core/loader: capture Error from load_image_targphys 2025-10-28 08:19:18 +01:00
nvme hw/nvme: add atomic boundary support 2025-10-30 07:07:14 +01:00
nvram nw/nvram/ds1225y: Fix nvram MemoryRegion owner 2025-10-28 08:19:18 +01:00
openrisc hw/core/loader: capture Error from load_image_targphys 2025-10-28 08:19:18 +01:00
pci migration: Fix regression of passing error_fatal into vmstate_load_state() 2025-11-03 16:04:10 -05:00
pci-bridge hw/arm/smmu-common: Check SMMU has PCIe Root Complex association 2025-09-16 17:31:54 +01:00
pci-host hw/pci-host/raven: Simplify PCI bus creation 2025-10-28 08:19:16 +01:00
ppc Audio clean-ups 2025-11-01 10:51:32 +01:00
remote hw: Remove unnecessary 'system/ram_addr.h' header 2025-10-07 05:03:56 +02:00
riscv hw/riscv: Replace target_ulong uses 2025-10-30 14:48:26 +01:00
rtc hw/rtc/mc146818rtc: Assert correct usage of mc146818rtc_set_cmos_data() 2025-10-21 20:16:47 +02:00
rx hw/core/loader: capture Error from load_image_targphys 2025-10-28 08:19:18 +01:00
s390x mem + migration pull for 10.2 2025-11-04 16:19:35 +01:00
scsi migration: Fix regression of passing error_fatal into vmstate_load_state() 2025-11-03 16:04:10 -05:00
sd hw/sd/sdcard: Handle RPMB MAC field 2025-11-05 09:26:23 +01:00
sensor qemu: Declare all load/store helper in 'qemu/bswap.h' 2025-07-15 02:56:39 -04:00
sh4 hw/core/loader: capture Error from load_image_targphys 2025-10-28 08:19:18 +01:00
smbios hw/core/loader: capture Error from load_image_targphys 2025-10-28 08:19:18 +01:00
sparc hw/core/loader: capture Error from load_image_targphys 2025-10-28 08:19:18 +01:00
sparc64 hw/core/loader: capture Error from load_image_targphys 2025-10-28 08:19:18 +01:00
ssi hw/ssi/aspeed_smc: Fix incorrect FMC_WDT2 register read on AST1030 2025-08-04 09:07:38 +02:00
timer hw/pcspk: use explicitly the required PIT types 2025-10-22 08:55:28 +02:00
tpm qom: Make InterfaceInfo[] uses const 2025-04-25 17:00:41 +02:00
tricore qom: Have class_init() take a const data argument 2025-04-25 17:00:41 +02:00
uefi hw/uefi/ovmf-log: Fix memory leak in hmp_info_firmware_log 2025-10-23 13:27:27 +02:00
ufs hw/ufs/lu: skip automatic zero-init of large array 2025-06-12 13:40:16 -04:00
usb audio: move audio.h under include/qemu/ 2025-10-30 22:56:51 +04:00
vfio migration: Use bitset of MigMode instead of variable arguments 2025-11-03 16:04:10 -05:00
vfio-user vfio: rename field to "num_initial_regions" 2025-10-22 08:12:52 +02:00
virtio migration: Fix regression of passing error_fatal into vmstate_load_state() 2025-11-03 16:04:10 -05:00
vmapple hw/gpio/pl061: Declare pullups/pulldowns as 8-bit types 2025-10-31 16:26:44 +00:00
watchdog wdt_i6300esb: fix incorrect mask for interrupt type 2025-10-05 09:46:06 +03:00
xen hw/xen: Build only once 2025-10-30 14:48:26 +01:00
xenpv
xtensa hw/core/loader: capture Error from load_image_targphys 2025-10-28 08:19:18 +01:00
Kconfig vfio-user: add vfio-user class and container 2025-06-26 08:55:38 +02:00
meson.build hw/meson: enter target hw first 2025-09-02 17:57:05 +02:00