On Thu, Mar 19, 2026 at 08:10:12PM +0100, Philippe Mathieu-Daudé wrote:
> Mark the AddressSpace structure const when it is only accessed read-only.
>
> Signed-off-by: Philippe Mathieu-Daudé <[email protected]>
> ---
> include/system/memory.h | 4 ++--
> system/physmem.c | 10 ++++++----
> 2 files changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/include/system/memory.h b/include/system/memory.h
> index 858dc40dc5f..38e4f7b25e5 100644
> --- a/include/system/memory.h
> +++ b/include/system/memory.h
> @@ -2783,7 +2783,7 @@ void address_space_flush_icache_range(AddressSpace *as,
> hwaddr addr, hwaddr len)
> /* address_space_get_iotlb_entry: translate an address into an IOTLB
> * entry. Should be called from an RCU critical section.
> */
> -IOMMUTLBEntry address_space_get_iotlb_entry(AddressSpace *as, hwaddr addr,
> +IOMMUTLBEntry address_space_get_iotlb_entry(const AddressSpace *as, hwaddr
> addr,
> bool is_write, MemTxAttrs attrs);
>
> /* address_space_translate: translate an address range into an address space
> @@ -2804,7 +2804,7 @@ MemoryRegion *flatview_translate(FlatView *fv,
> hwaddr *len, bool is_write,
> MemTxAttrs attrs);
>
> -static inline MemoryRegion *address_space_translate(AddressSpace *as,
> +static inline MemoryRegion *address_space_translate(const AddressSpace *as,
> hwaddr addr, hwaddr
> *xlat,
> hwaddr *len, bool
> is_write,
> MemTxAttrs attrs)
> diff --git a/system/physmem.c b/system/physmem.c
> index 23ea6b69255..bbcbcedda15 100644
> --- a/system/physmem.c
> +++ b/system/physmem.c
> @@ -528,19 +528,21 @@ static MemoryRegionSection
> flatview_do_translate(FlatView *fv,
> }
>
> /* Called from RCU critical section */
> -IOMMUTLBEntry address_space_get_iotlb_entry(AddressSpace *as, hwaddr addr,
> +IOMMUTLBEntry address_space_get_iotlb_entry(const AddressSpace *as, hwaddr
> addr,
> bool is_write, MemTxAttrs attrs)
> {
> MemoryRegionSection section;
> hwaddr xlat, page_mask;
> + AddressSpace target_as = *as;
Is this one an overkill? It'll deep copy everything of AS..
> + AddressSpace *ptarget_as = &target_as;
>
> /*
> * This can never be MMIO, and we don't really care about plen,
> * but page mask.
> */
> section = flatview_do_translate(address_space_to_flatview(as), addr,
> &xlat,
> - NULL, &page_mask, is_write, false, &as,
> - attrs);
> + NULL, &page_mask, is_write, false,
> + &ptarget_as, attrs);
>
> /* Illegal translation */
> if (section.mr == &io_mem_unassigned) {
> @@ -552,7 +554,7 @@ IOMMUTLBEntry address_space_get_iotlb_entry(AddressSpace
> *as, hwaddr addr,
> section.offset_within_region;
>
> return (IOMMUTLBEntry) {
> - .target_as = as,
> + .target_as = &target_as,
> .iova = addr & ~page_mask,
> .translated_addr = xlat & ~page_mask,
> .addr_mask = page_mask,
> --
> 2.53.0
>
--
Peter Xu