exec: Explicitly export target AS from address_space_translate_internal

This adds an AS** parameter to address_space_do_translate()
to make it easier for the next patch to share FlatViews.

This should cause no behavioural change.

Backports commit 6424975ce912061ac9e4a375237b0c89d83d93e3 from qemu
This commit is contained in:
Alexey Kardashevskiy 2018-03-04 01:56:02 -05:00 committed by Lioncash
parent be742759b0
commit f74fcb194f
No known key found for this signature in database
GPG key ID: 4E3C3CC1031BA9C7

View file

@ -398,7 +398,8 @@ static MemoryRegionSection address_space_do_translate(AddressSpace *as,
hwaddr *xlat, hwaddr *xlat,
hwaddr *plen, hwaddr *plen,
bool is_write, bool is_write,
bool is_mmio) bool is_mmio,
AddressSpace **target_as)
{ {
IOMMUTLBEntry iotlb; IOMMUTLBEntry iotlb;
MemoryRegionSection *section; MemoryRegionSection *section;
@ -425,6 +426,7 @@ static MemoryRegionSection address_space_do_translate(AddressSpace *as,
} }
as = iotlb.target_as; as = iotlb.target_as;
*target_as = iotlb.target_as;
} }
*xlat = addr; *xlat = addr;
@ -448,7 +450,7 @@ IOMMUTLBEntry address_space_get_iotlb_entry(AddressSpace *as, hwaddr addr,
/* This can never be MMIO. */ /* This can never be MMIO. */
section = address_space_do_translate(as, addr, &xlat, &plen, section = address_space_do_translate(as, addr, &xlat, &plen,
is_write, false); is_write, false, &as);
/* Illegal translation */ /* Illegal translation */
if (section.mr == &as->uc->io_mem_unassigned) { if (section.mr == &as->uc->io_mem_unassigned) {
@ -470,7 +472,7 @@ IOMMUTLBEntry address_space_get_iotlb_entry(AddressSpace *as, hwaddr addr,
/* Convert to address mask */ /* Convert to address mask */
plen -= 1; plen -= 1;
result.target_as = section.address_space; result.target_as = as;
result.iova = addr & ~plen; result.iova = addr & ~plen;
result.translated_addr = xlat & ~plen; result.translated_addr = xlat & ~plen;
result.addr_mask = plen; result.addr_mask = plen;
@ -491,7 +493,8 @@ MemoryRegion *address_space_translate(AddressSpace *as, hwaddr addr,
MemoryRegionSection section; MemoryRegionSection section;
/* This can be MMIO, so setup MMIO bit. */ /* This can be MMIO, so setup MMIO bit. */
section = address_space_do_translate(as, addr, xlat, plen, is_write, true); section = address_space_do_translate(as, addr, xlat, plen, is_write, true,
&as);
mr = section.mr; mr = section.mr;
// Unicorn: if'd out // Unicorn: if'd out