Make memory_region_access_valid() take a MemTxAttrs argument
As part of plumbing MemTxAttrs down to the IOMMU translate method, add MemTxAttrs as an argument to memory_region_access_valid(). Its callers either have an attrs value to hand, or don't care and can use MEMTXATTRS_UNSPECIFIED. The callsite in flatview_access_valid() is part of a recursive loop flatview_access_valid() -> memory_region_access_valid() -> subpage_accepts() -> flatview_access_valid(); we make it pass MEMTXATTRS_UNSPECIFIED for now, until the next several commits have plumbed an attrs parameter through the rest of the loop and we can add an attrs parameter to flatview_access_valid(). 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-8-peter.maydell@linaro.org
This commit is contained in:
parent
53d0790dfe
commit
6d7b9a6c3b
4
exec.c
4
exec.c
@ -3468,7 +3468,9 @@ static bool flatview_access_valid(FlatView *fv, hwaddr addr, int len,
|
||||
mr = flatview_translate(fv, addr, &xlat, &l, is_write);
|
||||
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)) {
|
||||
/* When our callers all have attrs we'll pass them through here */
|
||||
if (!memory_region_access_valid(mr, xlat, l, is_write,
|
||||
MEMTXATTRS_UNSPECIFIED)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -762,7 +762,8 @@ int pcistb_service_call(S390CPU *cpu, uint8_t r1, uint8_t r3, uint64_t gaddr,
|
||||
mr = s390_get_subregion(mr, offset, len);
|
||||
offset -= mr->addr;
|
||||
|
||||
if (!memory_region_access_valid(mr, offset, len, true)) {
|
||||
if (!memory_region_access_valid(mr, offset, len, true,
|
||||
MEMTXATTRS_UNSPECIFIED)) {
|
||||
s390_program_interrupt(env, PGM_OPERAND, 6, ra);
|
||||
return 0;
|
||||
}
|
||||
|
@ -37,7 +37,8 @@ void flatview_unref(FlatView *view);
|
||||
extern const MemoryRegionOps unassigned_mem_ops;
|
||||
|
||||
bool memory_region_access_valid(MemoryRegion *mr, hwaddr addr,
|
||||
unsigned size, bool is_write);
|
||||
unsigned size, bool is_write,
|
||||
MemTxAttrs attrs);
|
||||
|
||||
void flatview_add_to_dispatch(FlatView *fv, MemoryRegionSection *section);
|
||||
AddressSpaceDispatch *address_space_dispatch_new(FlatView *fv);
|
||||
|
7
memory.c
7
memory.c
@ -1347,7 +1347,8 @@ static const MemoryRegionOps ram_device_mem_ops = {
|
||||
bool memory_region_access_valid(MemoryRegion *mr,
|
||||
hwaddr addr,
|
||||
unsigned size,
|
||||
bool is_write)
|
||||
bool is_write,
|
||||
MemTxAttrs attrs)
|
||||
{
|
||||
int access_size_min, access_size_max;
|
||||
int access_size, i;
|
||||
@ -1416,7 +1417,7 @@ MemTxResult memory_region_dispatch_read(MemoryRegion *mr,
|
||||
{
|
||||
MemTxResult r;
|
||||
|
||||
if (!memory_region_access_valid(mr, addr, size, false)) {
|
||||
if (!memory_region_access_valid(mr, addr, size, false, attrs)) {
|
||||
*pval = unassigned_mem_read(mr, addr, size);
|
||||
return MEMTX_DECODE_ERROR;
|
||||
}
|
||||
@ -1458,7 +1459,7 @@ MemTxResult memory_region_dispatch_write(MemoryRegion *mr,
|
||||
unsigned size,
|
||||
MemTxAttrs attrs)
|
||||
{
|
||||
if (!memory_region_access_valid(mr, addr, size, true)) {
|
||||
if (!memory_region_access_valid(mr, addr, size, true, attrs)) {
|
||||
unassigned_mem_write(mr, addr, data, size);
|
||||
return MEMTX_DECODE_ERROR;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user