[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PATCH v5 03/11] vfio: Fix 128 bit handling
From: |
Alexey Kardashevskiy |
Subject: |
[Qemu-ppc] [PATCH v5 03/11] vfio: Fix 128 bit handling |
Date: |
Wed, 12 Mar 2014 16:52:22 +1100 |
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>
---
Changes:
v3:
* 64bit @end is calculated from 128-bit @llend instead of repeating
the same calculation steps
v2:
* used new function int128_exts64()
---
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 c2c688c..029a100 100644
--- a/hw/misc/vfio.c
+++ b/hw/misc/vfio.c
@@ -2251,6 +2251,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;
@@ -2271,13 +2272,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);
--
1.8.4.rc4
- Re: [Qemu-ppc] [PATCH v5 01/11] memory: Sanity check that no listeners remain on a destroyed AddressSpace, (continued)
- [Qemu-ppc] [PATCH v5 06/11] vfio: Create VFIOAddressSpace objects as needed, Alexey Kardashevskiy, 2014/03/12
- [Qemu-ppc] [PATCH v5 08/11] spapr-iommu: add SPAPR VFIO IOMMU device, Alexey Kardashevskiy, 2014/03/12
- [Qemu-ppc] [PATCH v5 04/11] vfio: rework to have error paths, Alexey Kardashevskiy, 2014/03/12
- [Qemu-ppc] [PATCH v5 09/11] spapr vfio: add vfio_container_spapr_get_info(), Alexey Kardashevskiy, 2014/03/12
- [Qemu-ppc] [PATCH v5 05/11] vfio: Introduce VFIO address spaces, Alexey Kardashevskiy, 2014/03/12
- [Qemu-ppc] [PATCH v5 03/11] vfio: Fix 128 bit handling,
Alexey Kardashevskiy <=
- [Qemu-ppc] [PATCH v5 02/11] int128: add int128_exts64(), Alexey Kardashevskiy, 2014/03/12
- [Qemu-ppc] [PATCH v5 11/11] spapr-vfio: enable for spapr, Alexey Kardashevskiy, 2014/03/12
- [Qemu-ppc] [PATCH v5 10/11] spapr-vfio: add spapr-pci-vfio-host-bridge to support vfio, Alexey Kardashevskiy, 2014/03/12