qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Alexey Kardashevskiy <aik@ozlabs.ru>
To: qemu-devel@nongnu.org
Cc: Alexey Kardashevskiy <aik@ozlabs.ru>,
	Alex Williamson <alex.williamson@redhat.com>,
	qemu-ppc@nongnu.org, Alexander Graf <agraf@suse.de>
Subject: [Qemu-devel] [PATCH v6 3/7] vfio: Fix 128 bit handling
Date: Fri, 23 May 2014 14:59:16 +1000	[thread overview]
Message-ID: <1400821160-25258-4-git-send-email-aik@ozlabs.ru> (raw)
In-Reply-To: <1400821160-25258-1-git-send-email-aik@ozlabs.ru>

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 <aik@ozlabs.ru>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>

---
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 9cf5b84..3ff776a 100644
--- a/hw/misc/vfio.c
+++ b/hw/misc/vfio.c
@@ -2248,6 +2248,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;
 
@@ -2268,13 +2269,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.9.rc0

  parent reply	other threads:[~2014-05-23  4:59 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-23  4:59 [Qemu-devel] [PATCH v6 0/7] vfio: Prepare for SPAPR Alexey Kardashevskiy
2014-05-23  4:59 ` [Qemu-devel] [PATCH v6 1/7] memory: Sanity check that no listeners remain on a destroyed AddressSpace Alexey Kardashevskiy
2014-05-23  4:59 ` [Qemu-devel] [PATCH v6 2/7] int128: Add int128_exts64() Alexey Kardashevskiy
2014-05-23  4:59 ` Alexey Kardashevskiy [this message]
2014-05-23  4:59 ` [Qemu-devel] [PATCH v6 4/7] vfio: Rework to have error paths Alexey Kardashevskiy
2014-05-23  4:59 ` [Qemu-devel] [PATCH v6 5/7] vfio: Introduce VFIO address spaces Alexey Kardashevskiy
2014-05-23 11:28   ` Alexander Graf
2014-05-23 12:03     ` Alexey Kardashevskiy
2014-05-23 12:05       ` Alexander Graf
2014-05-23 16:16         ` Alexey Kardashevskiy
2014-05-23 21:15           ` Alexander Graf
2014-05-24  3:12             ` Alexey Kardashevskiy
2014-05-25 10:16               ` Alexander Graf
2014-05-25 13:36                 ` David Gibson
2014-05-23  4:59 ` [Qemu-devel] [PATCH v6 6/7] vfio: Create VFIOAddressSpace objects as needed Alexey Kardashevskiy
2014-05-23  4:59 ` [Qemu-devel] [PATCH v6 7/7] vfio: Add guest side IOMMU support Alexey Kardashevskiy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1400821160-25258-4-git-send-email-aik@ozlabs.ru \
    --to=aik@ozlabs.ru \
    --cc=agraf@suse.de \
    --cc=alex.williamson@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).