Skip to content

Commit

Permalink
Make flatview_translate() take a MemTxAttrs argument
Browse files Browse the repository at this point in the history
As part of plumbing MemTxAttrs down to the IOMMU translate method,
add MemTxAttrs as an argument to flatview_translate(); all its
callers now have attrs available.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20180521140402.23318-11-peter.maydell@linaro.org
  • Loading branch information
pm215 committed May 31, 2018
1 parent eace72b commit efa99a2
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 11 deletions.
17 changes: 9 additions & 8 deletions exec.c
Expand Up @@ -618,7 +618,8 @@ IOMMUTLBEntry address_space_get_iotlb_entry(AddressSpace *as, hwaddr addr,

/* Called from RCU critical section */
MemoryRegion *flatview_translate(FlatView *fv, hwaddr addr, hwaddr *xlat,
hwaddr *plen, bool is_write)
hwaddr *plen, bool is_write,
MemTxAttrs attrs)
{
MemoryRegion *mr;
MemoryRegionSection section;
Expand Down Expand Up @@ -3152,7 +3153,7 @@ static MemTxResult flatview_write_continue(FlatView *fv, hwaddr addr,
}

l = len;
mr = flatview_translate(fv, addr, &addr1, &l, true);
mr = flatview_translate(fv, addr, &addr1, &l, true, attrs);
}

return result;
Expand All @@ -3168,7 +3169,7 @@ static MemTxResult flatview_write(FlatView *fv, hwaddr addr, MemTxAttrs attrs,
MemTxResult result = MEMTX_OK;

l = len;
mr = flatview_translate(fv, addr, &addr1, &l, true);
mr = flatview_translate(fv, addr, &addr1, &l, true, attrs);
result = flatview_write_continue(fv, addr, attrs, buf, len,
addr1, l, mr);

Expand Down Expand Up @@ -3239,7 +3240,7 @@ MemTxResult flatview_read_continue(FlatView *fv, hwaddr addr,
}

l = len;
mr = flatview_translate(fv, addr, &addr1, &l, false);
mr = flatview_translate(fv, addr, &addr1, &l, false, attrs);
}

return result;
Expand All @@ -3254,7 +3255,7 @@ static MemTxResult flatview_read(FlatView *fv, hwaddr addr,
MemoryRegion *mr;

l = len;
mr = flatview_translate(fv, addr, &addr1, &l, false);
mr = flatview_translate(fv, addr, &addr1, &l, false, attrs);
return flatview_read_continue(fv, addr, attrs, buf, len,
addr1, l, mr);
}
Expand Down Expand Up @@ -3468,7 +3469,7 @@ static bool flatview_access_valid(FlatView *fv, hwaddr addr, int len,

while (len > 0) {
l = len;
mr = flatview_translate(fv, addr, &xlat, &l, is_write);
mr = flatview_translate(fv, addr, &xlat, &l, is_write, attrs);
if (!memory_access_is_direct(mr, is_write)) {
l = memory_access_size(mr, l, addr);
if (!memory_region_access_valid(mr, xlat, l, is_write, attrs)) {
Expand Down Expand Up @@ -3516,7 +3517,7 @@ flatview_extend_translation(FlatView *fv, hwaddr addr,

len = target_len;
this_mr = flatview_translate(fv, addr, &xlat,
&len, is_write);
&len, is_write, attrs);
if (this_mr != mr || xlat != base + done) {
return done;
}
Expand Down Expand Up @@ -3549,7 +3550,7 @@ void *address_space_map(AddressSpace *as,
l = len;
rcu_read_lock();
fv = address_space_to_flatview(as);
mr = flatview_translate(fv, addr, &xlat, &l, is_write);
mr = flatview_translate(fv, addr, &xlat, &l, is_write, attrs);

if (!memory_access_is_direct(mr, is_write)) {
if (atomic_xchg(&bounce.in_use, true)) {
Expand Down
7 changes: 4 additions & 3 deletions include/exec/memory.h
Expand Up @@ -1913,15 +1913,16 @@ IOMMUTLBEntry address_space_get_iotlb_entry(AddressSpace *as, hwaddr addr,
*/
MemoryRegion *flatview_translate(FlatView *fv,
hwaddr addr, hwaddr *xlat,
hwaddr *len, bool is_write);
hwaddr *len, bool is_write,
MemTxAttrs attrs);

static inline MemoryRegion *address_space_translate(AddressSpace *as,
hwaddr addr, hwaddr *xlat,
hwaddr *len, bool is_write,
MemTxAttrs attrs)
{
return flatview_translate(address_space_to_flatview(as),
addr, xlat, len, is_write);
addr, xlat, len, is_write, attrs);
}

/* address_space_access_valid: check for validity of accessing an address
Expand Down Expand Up @@ -2030,7 +2031,7 @@ MemTxResult address_space_read(AddressSpace *as, hwaddr addr,
rcu_read_lock();
fv = address_space_to_flatview(as);
l = len;
mr = flatview_translate(fv, addr, &addr1, &l, false);
mr = flatview_translate(fv, addr, &addr1, &l, false, attrs);
if (len == l && memory_access_is_direct(mr, false)) {
ptr = qemu_map_ram_ptr(mr->ram_block, addr1);
memcpy(buf, ptr, len);
Expand Down

0 comments on commit efa99a2

Please sign in to comment.