[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v4 02/15] memory: Access MemoryRegion with MemOp
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [Qemu-devel] [PATCH v4 02/15] memory: Access MemoryRegion with MemOp |
Date: |
Thu, 25 Jul 2019 13:45:30 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0 |
On 7/25/19 11:52 AM, address@hidden wrote:
> Replacing size with size+sign+endianness (MemOp) will enable us to
> collapse the two byte swaps, adjust_endianness and handle_bswap, along
> the I/O path.
>
> While interfaces are converted, callers will have existing unsigned
> size coerced into a MemOp, and the callee will use this MemOp as an
> unsigned size.
>
> Signed-off-by: Tony Nguyen <address@hidden>
> ---
> include/exec/memop.h | 4 ++++
> include/exec/memory.h | 9 +++++----
> memory.c | 7 +++++--
> 3 files changed, 14 insertions(+), 6 deletions(-)
>
> diff --git a/include/exec/memop.h b/include/exec/memop.h
> index ac58066..09c8d20 100644
> --- a/include/exec/memop.h
> +++ b/include/exec/memop.h
> @@ -106,4 +106,8 @@ typedef enum MemOp {
> MO_SSIZE = MO_SIZE | MO_SIGN,
> } MemOp;
>
> +/* No-op while memory_region_dispatch_[read|write] is converted to MemOp */
> +#define MEMOP_SIZE(op) (op) /* MemOp to size. */
> +#define SIZE_MEMOP(ul) (ul) /* Size to MemOp. */
SIZE_MEMOP() is never used until patch #10 "memory: Access MemoryRegion
with MemOp semantics", it would be clearer to only introduce the
MEMOP_SIZE() no-op here, and directly introduce the correct SIZE_MEMOP()
macro in patch #10.
> +
> #endif
> diff --git a/include/exec/memory.h b/include/exec/memory.h
> index bb0961d..30b1c58 100644
> --- a/include/exec/memory.h
> +++ b/include/exec/memory.h
> @@ -19,6 +19,7 @@
> #include "exec/cpu-common.h"
> #include "exec/hwaddr.h"
> #include "exec/memattrs.h"
> +#include "exec/memop.h"
> #include "exec/ramlist.h"
> #include "qemu/queue.h"
> #include "qemu/int128.h"
> @@ -1731,13 +1732,13 @@ void mtree_info(bool flatview, bool dispatch_tree,
> bool owner);
> * @mr: #MemoryRegion to access
> * @addr: address within that region
> * @pval: pointer to uint64_t which the data is written to
> - * @size: size of the access in bytes
> + * @op: encodes size of the access in bytes
> * @attrs: memory transaction attributes to use for the access
> */
> MemTxResult memory_region_dispatch_read(MemoryRegion *mr,
> hwaddr addr,
> uint64_t *pval,
> - unsigned size,
> + MemOp op,
> MemTxAttrs attrs);
> /**
> * memory_region_dispatch_write: perform a write directly to the specified
> @@ -1746,13 +1747,13 @@ MemTxResult memory_region_dispatch_read(MemoryRegion
> *mr,
> * @mr: #MemoryRegion to access
> * @addr: address within that region
> * @data: data to write
> - * @size: size of the access in bytes
> + * @op: encodes size of the access in bytes
> * @attrs: memory transaction attributes to use for the access
> */
> MemTxResult memory_region_dispatch_write(MemoryRegion *mr,
> hwaddr addr,
> uint64_t data,
> - unsigned size,
> + MemOp op,
> MemTxAttrs attrs);
>
> /**
> diff --git a/memory.c b/memory.c
> index 5d8c9a9..6982e19 100644
> --- a/memory.c
> +++ b/memory.c
> @@ -1439,10 +1439,11 @@ static MemTxResult
> memory_region_dispatch_read1(MemoryRegion *mr,
> MemTxResult memory_region_dispatch_read(MemoryRegion *mr,
> hwaddr addr,
> uint64_t *pval,
> - unsigned size,
> + MemOp op,
> MemTxAttrs attrs)
> {
> MemTxResult r;
> + unsigned size = MEMOP_SIZE(op);
>
> if (!memory_region_access_valid(mr, addr, size, false, attrs)) {
> *pval = unassigned_mem_read(mr, addr, size);
> @@ -1483,9 +1484,11 @@ static bool
> memory_region_dispatch_write_eventfds(MemoryRegion *mr,
> MemTxResult memory_region_dispatch_write(MemoryRegion *mr,
> hwaddr addr,
> uint64_t data,
> - unsigned size,
> + MemOp op,
> MemTxAttrs attrs)
> {
> + unsigned size = MEMOP_SIZE(op);
> +
> if (!memory_region_access_valid(mr, addr, size, true, attrs)) {
> unassigned_mem_write(mr, addr, data, size);
> return MEMTX_DECODE_ERROR;
> --
> 1.8.3.1
>
>
>
- [Qemu-devel] [PATCH v4 00/15] Invert Endian bit in SPARCv9 MMU TTE, tony.nguyen, 2019/07/25
- [Qemu-devel] [PATCH v4 03/15] target/mips: Access MemoryRegion with MemOp, tony.nguyen, 2019/07/25
- [Qemu-devel] [PATCH v4 04/15] hw/s390x: Access MemoryRegion with MemOp, tony.nguyen, 2019/07/25
- [Qemu-devel] [PATCH v4 01/15] tcg: TCGMemOp is now accelerator independent MemOp, tony.nguyen, 2019/07/25
- [Qemu-devel] [PATCH v4 05/15] hw/intc/armv7m_nic: Access MemoryRegion with MemOp, tony.nguyen, 2019/07/25
- [Qemu-devel] [PATCH v4 06/15] hw/virtio: Access MemoryRegion with MemOp, tony.nguyen, 2019/07/25