On 7/25/19 11:47 PM, tony.ngu...@bt.com wrote:
> To convert interfaces of MemoryRegion access, MEMOP_SIZE and
> SIZE_MEMOP no-op stubs were introduced to change syntax while keeping
> the existing semantics.
>
> Now with interfaces converted, we fill the stubs and use MemOp
> semantics.
>
> Signed-off-by: Tony Nguyen
> ---
> include/exec/memop.h | 5 ++---
> include/exec/memory.h | 4 ++--
> 2 files changed, 4 insertions(+), 5 deletions(-)
>
> diff --git a/include/exec/memop.h b/include/exec/memop.h
> index 09c8d20..f2847e8 100644
> --- a/include/exec/memop.h
> +++ b/include/exec/memop.h
> @@ -106,8 +106,7 @@ 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. */
> +#define MEMOP_SIZE(op) (1 << ((op) & MO_SIZE)) /* MemOp to size. */
> +#define SIZE_MEMOP(ul) (ctzl(ul)) /* Size to MemOp. */
As mentioned, I'd prefer inline functions.
I think it wouldn't go amiss to do
static inline MemOp size_memop(unsigned size)
{
#ifdef CONFIG_DEBUG_TCG
/* power of 2 up to 8 */
assert((size & (size - 1)) == 0 && size >= 1 && size <= 8);
#endif
return ctz32(size);
}
> diff --git a/include/exec/memory.h b/include/exec/memory.h
> index 0ea4843..975b86a 100644
> --- a/include/exec/memory.h
> +++ b/include/exec/memory.h
> @@ -1732,7 +1732,7 @@ 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
> - * @op: size of the access in bytes
> + * @op: size, sign, and endianness of the memory operation
> * @attrs: memory transaction attributes to use for the access
> */
> MemTxResult memory_region_dispatch_read(MemoryRegion *mr,
> @@ -1747,7 +1747,7 @@ MemTxResult memory_region_dispatch_read(MemoryRegion
> *mr,
> * @mr: #MemoryRegion to access
> * @addr: address within that region
> * @data: data to write
> - * @op: size of the access in bytes
> + * @op: size, sign, and endianness of the memory operation
> * @attrs: memory transaction attributes to use for the access
> */
> MemTxResult memory_region_dispatch_write(MemoryRegion *mr,
As I mentioned, now is when the actual interface change to these functions
should occur.
r~