[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 4/8] vfio: Fix 128 bit handling
From: |
Alex Williamson |
Subject: |
[Qemu-devel] [PULL 4/8] vfio: Fix 128 bit handling |
Date: |
Mon, 02 Jun 2014 16:00:38 -0600 |
User-agent: |
StGit/0.17-dirty |
From: Alexey Kardashevskiy <address@hidden>
Upcoming VFIO on SPAPR PPC64 support will initialize the IOMMU
memory region with UINT64_MAX (2^64 bytes) size so int128_get64()
will assert.
The patch takes care of this check. The existing type1 IOMMU code
is not expected to map all 64 bits of RAM so the patch does not
touch that part.
Signed-off-by: Alexey Kardashevskiy <address@hidden>
Reviewed-by: Paolo Bonzini <address@hidden>
Signed-off-by: Alex Williamson <address@hidden>
---
hw/misc/vfio.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c
index 76715cc..0d4594e 100644
--- a/hw/misc/vfio.c
+++ b/hw/misc/vfio.c
@@ -2392,6 +2392,7 @@ static void vfio_listener_region_add(MemoryListener
*listener,
VFIOContainer *container = container_of(listener, VFIOContainer,
iommu_data.type1.listener);
hwaddr iova, end;
+ Int128 llend;
void *vaddr;
int ret;
@@ -2412,13 +2413,15 @@ static void vfio_listener_region_add(MemoryListener
*listener,
}
iova = TARGET_PAGE_ALIGN(section->offset_within_address_space);
- end = (section->offset_within_address_space + int128_get64(section->size))
&
- TARGET_PAGE_MASK;
+ llend = int128_make64(section->offset_within_address_space);
+ llend = int128_add(llend, section->size);
+ llend = int128_and(llend, int128_exts64(TARGET_PAGE_MASK));
- if (iova >= end) {
+ if (int128_ge(int128_make64(iova), llend)) {
return;
}
+ end = int128_get64(llend);
vaddr = memory_region_get_ram_ptr(section->mr) +
section->offset_within_region +
(iova - section->offset_within_address_space);
- [Qemu-devel] [PULL 0/8] Series short description, Alex Williamson, 2014/06/02
- [Qemu-devel] [PULL 2/8] memory: Sanity check that no listeners remain on a destroyed AddressSpace, Alex Williamson, 2014/06/02
- [Qemu-devel] [PULL 1/8] vfio-pci: Quirk RTL8168 NIC, Alex Williamson, 2014/06/02
- [Qemu-devel] [PULL 3/8] int128: Add int128_exts64(), Alex Williamson, 2014/06/02
- [Qemu-devel] [PULL 4/8] vfio: Fix 128 bit handling,
Alex Williamson <=
- [Qemu-devel] [PULL 5/8] vfio: Rework to have error paths, Alex Williamson, 2014/06/02
- [Qemu-devel] [PULL 6/8] vfio: Introduce VFIO address spaces, Alex Williamson, 2014/06/02
- [Qemu-devel] [PULL 7/8] vfio: Create VFIOAddressSpace objects as needed, Alex Williamson, 2014/06/02
- [Qemu-devel] [PULL 8/8] vfio: Add guest side IOMMU support, Alex Williamson, 2014/06/02
- Re: [Qemu-devel] [PULL 0/8] Series short description, Alex Williamson, 2014/06/02
- Re: [Qemu-devel] [PULL 0/8] Series short description, Peter Maydell, 2014/06/03