qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH v5 05/11] exec: allows 8-byte accesses in subpage_op


From: Laszlo Ersek
Subject: [Qemu-devel] [PATCH v5 05/11] exec: allows 8-byte accesses in subpage_ops
Date: Wed, 17 Dec 2014 22:10:07 +0100

From: Paolo Bonzini <address@hidden>

Otherwise fw_cfg accesses are split into 4-byte ones before they reach the
fw_cfg ops / handlers.

Signed-off-by: Paolo Bonzini <address@hidden>
Signed-off-by: Laszlo Ersek <address@hidden>
---

Notes:
    v5:
    - new in v5 [reported by Laszlo, fixed by Paolo]

 exec.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/exec.c b/exec.c
index 963481a..619e046 100644
--- a/exec.c
+++ b/exec.c
@@ -1767,9 +1767,9 @@ static const MemoryRegionOps watch_mem_ops = {
 static uint64_t subpage_read(void *opaque, hwaddr addr,
                              unsigned len)
 {
     subpage_t *subpage = opaque;
-    uint8_t buf[4];
+    uint8_t buf[8];
 
 #if defined(DEBUG_SUBPAGE)
     printf("%s: subpage %p len %u addr " TARGET_FMT_plx "\n", __func__,
            subpage, len, addr);
@@ -1781,8 +1781,10 @@ static uint64_t subpage_read(void *opaque, hwaddr addr,
     case 2:
         return lduw_p(buf);
     case 4:
         return ldl_p(buf);
+    case 8:
+        return ldq_p(buf);
     default:
         abort();
     }
 }
@@ -1790,9 +1792,9 @@ static uint64_t subpage_read(void *opaque, hwaddr addr,
 static void subpage_write(void *opaque, hwaddr addr,
                           uint64_t value, unsigned len)
 {
     subpage_t *subpage = opaque;
-    uint8_t buf[4];
+    uint8_t buf[8];
 
 #if defined(DEBUG_SUBPAGE)
     printf("%s: subpage %p len %u addr " TARGET_FMT_plx
            " value %"PRIx64"\n",
@@ -1807,8 +1809,11 @@ static void subpage_write(void *opaque, hwaddr addr,
         break;
     case 4:
         stl_p(buf, value);
         break;
+    case 8:
+        stq_p(buf, value);
+        break;
     default:
         abort();
     }
     address_space_write(subpage->as, addr + subpage->base, buf, len);
@@ -1829,8 +1834,12 @@ static bool subpage_accepts(void *opaque, hwaddr addr,
 
 static const MemoryRegionOps subpage_ops = {
     .read = subpage_read,
     .write = subpage_write,
+    .impl.min_access_size = 1,
+    .impl.max_access_size = 8,
+    .valid.min_access_size = 1,
+    .valid.max_access_size = 8,
     .valid.accepts = subpage_accepts,
     .endianness = DEVICE_NATIVE_ENDIAN,
 };
 
-- 
1.8.3.1





reply via email to

[Prev in Thread] Current Thread [Next in Thread]