diff mbox

Memory: use memory address space for cpu-memory

Message ID 4712D8F4B26E034E80552F30A67BE0B1ACCCA9@ORSMSX112.amr.corp.intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Xu, Anthony May 18, 2017, 11:28 p.m. UTC
> On 18/05/2017 23:48, Xu, Anthony wrote:

> >> It should be called.  Alternatively you could try adding a new function

> >> to mark address_space_memory as a never-destroyed AddressSpace:

> >>

> > This patch would do it, could you please submit this patch?

> 

> If you have tested it (together with the change in the initialization of

> address_space_memory), I can do that.

> 


Based on your patch, I added the change in the initialization of 
address_space_memory. It works well in my setup, cpu-memory
address space doesn't show up as we expected.

Anthony

Comments

Paolo Bonzini May 19, 2017, 9:30 a.m. UTC | #1
On 19/05/2017 01:28, Xu, Anthony wrote:
>> On 18/05/2017 23:48, Xu, Anthony wrote:
>>>> It should be called.  Alternatively you could try adding a new function
>>>> to mark address_space_memory as a never-destroyed AddressSpace:
>>>>
>>> This patch would do it, could you please submit this patch?
>>
>> If you have tested it (together with the change in the initialization of
>> address_space_memory), I can do that.
>>
> 
> Based on your patch, I added the change in the initialization of 
> address_space_memory. It works well in my setup, cpu-memory
> address space doesn't show up as we expected.

Thanks.

I am also thinking of resolving aliases early, and sharing the
AddressSpaceDispatch if the root memory region is the same.  This
hopefully will also reduce memory consumption and speed up AddressSpace
updates.

Paolo

> Anthony
> 
> diff --git a/exec.c b/exec.c
> index 96e3ac9..746dbbc 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -2712,7 +2712,7 @@ static void memory_map_init(void)
>      system_memory = g_malloc(sizeof(*system_memory));
> 
>      memory_region_init(system_memory, NULL, "system", UINT64_MAX);
> -    address_space_init(&address_space_memory, system_memory, "memory");
> +    address_space_init_static(&address_space_memory, system_memory, "memory");
> 
>      system_io = g_malloc(sizeof(*system_io));
>      memory_region_init_io(system_io, NULL, &unassigned_io_ops, NULL, "io",
> diff --git a/include/exec/memory.h b/include/exec/memory.h
> index b27b288..6f44b79 100644
> --- a/include/exec/memory.h
> +++ b/include/exec/memory.h
> @@ -1395,6 +1395,17 @@ MemTxResult memory_region_dispatch_write(MemoryRegion *mr,
>  void address_space_init(AddressSpace *as, MemoryRegion *root, const char *name);
> 
>  /**
> + * address_space_init_static: initializes an static address space
> + *
> + * @as: an uninitialized #AddressSpace
> + * @root: a #MemoryRegion that routes addresses for the address space
> + * @name: an address space name.  The name is only used for debugging
> + *        output.
> + */
> +void address_space_init_static(AddressSpace *as, MemoryRegion *root,
> +       const char *name);
> +
> +/**
>   * address_space_init_shareable: return an address space for a memory region,
>   *                               creating it if it does not already exist
>   *
> diff --git a/memory.c b/memory.c
> index 190cd3d..6c933d8 100644
> --- a/memory.c
> +++ b/memory.c
> @@ -2461,7 +2461,8 @@ static void do_address_space_destroy(AddressSpace *as)
>      }
>  }
> 
> -void address_space_init_static(AddressSpace *as, MemoryRegion *root, const char *name)
> +void address_space_init_static(AddressSpace *as, MemoryRegion *root,
> +       const char *name)
>  {
>      address_space_init(as, root, name);
>      as->shared = true;
>
diff mbox

Patch

diff --git a/exec.c b/exec.c
index 96e3ac9..746dbbc 100644
--- a/exec.c
+++ b/exec.c
@@ -2712,7 +2712,7 @@  static void memory_map_init(void)
     system_memory = g_malloc(sizeof(*system_memory));

     memory_region_init(system_memory, NULL, "system", UINT64_MAX);
-    address_space_init(&address_space_memory, system_memory, "memory");
+    address_space_init_static(&address_space_memory, system_memory, "memory");

     system_io = g_malloc(sizeof(*system_io));
     memory_region_init_io(system_io, NULL, &unassigned_io_ops, NULL, "io",
diff --git a/include/exec/memory.h b/include/exec/memory.h
index b27b288..6f44b79 100644
--- a/include/exec/memory.h
+++ b/include/exec/memory.h
@@ -1395,6 +1395,17 @@  MemTxResult memory_region_dispatch_write(MemoryRegion *mr,
 void address_space_init(AddressSpace *as, MemoryRegion *root, const char *name);

 /**
+ * address_space_init_static: initializes an static address space
+ *
+ * @as: an uninitialized #AddressSpace
+ * @root: a #MemoryRegion that routes addresses for the address space
+ * @name: an address space name.  The name is only used for debugging
+ *        output.
+ */
+void address_space_init_static(AddressSpace *as, MemoryRegion *root,
+       const char *name);
+
+/**
  * address_space_init_shareable: return an address space for a memory region,
  *                               creating it if it does not already exist
  *
diff --git a/memory.c b/memory.c
index 190cd3d..6c933d8 100644
--- a/memory.c
+++ b/memory.c
@@ -2461,7 +2461,8 @@  static void do_address_space_destroy(AddressSpace *as)
     }
 }

-void address_space_init_static(AddressSpace *as, MemoryRegion *root, const char *name)
+void address_space_init_static(AddressSpace *as, MemoryRegion *root,
+       const char *name)
 {
     address_space_init(as, root, name);
     as->shared = true;