On 7/25/19 11:48 PM, tony.ngu...@bt.com wrote: > Notice new attribute, byte swap, and force the transaction through the > memory slow path. > > Required by architectures that can invert endianness of memory > transaction, e.g. SPARC64 has the Invert Endian TTE bit. > > Signed-off-by: Tony Nguyen <tony.ngu...@bt.com> > --- > accel/tcg/cputlb.c | 11 +++++++++++ > include/exec/memattrs.h | 2 ++ > 2 files changed, 13 insertions(+) > > diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c > index e61b1eb..f292a87 100644 > --- a/accel/tcg/cputlb.c > +++ b/accel/tcg/cputlb.c > @@ -738,6 +738,9 @@ void tlb_set_page_with_attrs(CPUState *cpu, target_ulong > vaddr, > */ > address |= TLB_RECHECK; > } > + if (attrs.byte_swap) { > + address |= TLB_FORCE_SLOW; > + } > if (!memory_region_is_ram(section->mr) && > !memory_region_is_romd(section->mr)) { > /* IO memory case */ > @@ -891,6 +894,10 @@ static uint64_t io_readx(CPUArchState *env, > CPUIOTLBEntry *iotlbentry, > bool locked = false; > MemTxResult r; > > + if (iotlbentry->attrs.byte_swap) { > + op ^= MO_BSWAP; > + } > + > section = iotlb_to_section(cpu, iotlbentry->addr, iotlbentry->attrs); > mr = section->mr; > mr_offset = (iotlbentry->addr & TARGET_PAGE_MASK) + addr; > @@ -933,6 +940,10 @@ static void io_writex(CPUArchState *env, CPUIOTLBEntry > *iotlbentry, > bool locked = false; > MemTxResult r; > > + if (iotlbentry->attrs.byte_swap) { > + op ^= MO_BSWAP; > + } > + > section = iotlb_to_section(cpu, iotlbentry->addr, iotlbentry->attrs); > mr = section->mr; > mr_offset = (iotlbentry->addr & TARGET_PAGE_MASK) + addr; > diff --git a/include/exec/memattrs.h b/include/exec/memattrs.h > index d4a3477..a0644eb 100644 > --- a/include/exec/memattrs.h > +++ b/include/exec/memattrs.h > @@ -37,6 +37,8 @@ typedef struct MemTxAttrs { > unsigned int user:1; > /* Requester ID (for MSI for example) */ > unsigned int requester_id:16; > + /* SPARC64: TTE invert endianness */ > + unsigned int byte_swap:1;
Don't mention Sparc here, otherwise it seems like it only applies to Sparc, when it is really a generic feature only currently used by Sparc. Just say "Invert endianness for this page". With that, Reviewed-by: Richard Henderson <richard.hender...@linaro.org> r~