From d8cfccf192aa712b8c7fc5aa7d971a9f06e18fbe Mon Sep 17 00:00:00 2001 From: Xiao Wang Date: Tue, 7 Jul 2015 09:18:14 +0200 Subject: [PATCH 040/100] exec.c: Convert subpage memory ops to _with_attrs Message-id: <1436260751-25015-12-git-send-email-jasowang@redhat.com> Patchwork-id: 66786 O-Subject: [RHEL7.2 qemu-kvm-rhev PATCH V2 11/68] exec.c: Convert subpage memory ops to _with_attrs Bugzilla: 1227343 RH-Acked-by: Michael S. Tsirkin RH-Acked-by: David Gibson RH-Acked-by: Laurent Vivier RH-Acked-by: Thomas Huth From: Peter Maydell Convert the subpage memory ops to _with_attrs; this will allow us to pass the attributes through to the underlying access functions. (Nothing uses the attributes yet.) Signed-off-by: Peter Maydell Reviewed-by: Paolo Bonzini Reviewed-by: Edgar E. Iglesias (cherry picked from commit f25a49e0057bbfcc2b1111f60785d919b6ddaeea) Signed-off-by: Miroslav Rezanina --- exec.c | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/exec.c b/exec.c index 34dafd2..bba6f26 100644 --- a/exec.c +++ b/exec.c @@ -1941,8 +1941,8 @@ static const MemoryRegionOps watch_mem_ops = { .endianness = DEVICE_NATIVE_ENDIAN, }; -static uint64_t subpage_read(void *opaque, hwaddr addr, - unsigned len) +static MemTxResult subpage_read(void *opaque, hwaddr addr, uint64_t *data, + unsigned len, MemTxAttrs attrs) { subpage_t *subpage = opaque; uint8_t buf[8]; @@ -1951,23 +1951,29 @@ static uint64_t subpage_read(void *opaque, hwaddr addr, printf("%s: subpage %p len %u addr " TARGET_FMT_plx "\n", __func__, subpage, len, addr); #endif - address_space_read(subpage->as, addr + subpage->base, buf, len); + if (address_space_read(subpage->as, addr + subpage->base, buf, len)) { + return MEMTX_DECODE_ERROR; + } switch (len) { case 1: - return ldub_p(buf); + *data = ldub_p(buf); + return MEMTX_OK; case 2: - return lduw_p(buf); + *data = lduw_p(buf); + return MEMTX_OK; case 4: - return ldl_p(buf); + *data = ldl_p(buf); + return MEMTX_OK; case 8: - return ldq_p(buf); + *data = ldq_p(buf); + return MEMTX_OK; default: abort(); } } -static void subpage_write(void *opaque, hwaddr addr, - uint64_t value, unsigned len) +static MemTxResult subpage_write(void *opaque, hwaddr addr, + uint64_t value, unsigned len, MemTxAttrs attrs) { subpage_t *subpage = opaque; uint8_t buf[8]; @@ -1993,7 +1999,10 @@ static void subpage_write(void *opaque, hwaddr addr, default: abort(); } - address_space_write(subpage->as, addr + subpage->base, buf, len); + if (address_space_write(subpage->as, addr + subpage->base, buf, len)) { + return MEMTX_DECODE_ERROR; + } + return MEMTX_OK; } static bool subpage_accepts(void *opaque, hwaddr addr, @@ -2010,8 +2019,8 @@ static bool subpage_accepts(void *opaque, hwaddr addr, } static const MemoryRegionOps subpage_ops = { - .read = subpage_read, - .write = subpage_write, + .read_with_attrs = subpage_read, + .write_with_attrs = subpage_write, .impl.min_access_size = 1, .impl.max_access_size = 8, .valid.min_access_size = 1, -- 1.8.3.1