[PATCH-for-11.1 3/8] system/memory: Constify various AddressSpace arguments (xlat)

Philippe Mathieu-Daudé posted 8 patches 2 days, 19 hours ago
Maintainers: Paolo Bonzini <pbonzini@redhat.com>, Peter Xu <peterx@redhat.com>, "Philippe Mathieu-Daudé" <philmd@linaro.org>
[PATCH-for-11.1 3/8] system/memory: Constify various AddressSpace arguments (xlat)
Posted by Philippe Mathieu-Daudé 2 days, 19 hours ago
Mark the AddressSpace structure const when it is only accessed read-only.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 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;
+    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


Re: [PATCH-for-11.1 3/8] system/memory: Constify various AddressSpace arguments (xlat)
Posted by Peter Xu 1 day, 23 hours ago
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é <philmd@linaro.org>
> ---
>  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