Patchwork [15/23] exec.c: initialize memory map

login
register
mail settings
Submitter Avi Kivity
Date July 25, 2011, 2:02 p.m.
Message ID <1311602584-23409-16-git-send-email-avi@redhat.com>
Download mbox | patch
Permalink /patch/106690/
State New
Headers show

Comments

Avi Kivity - July 25, 2011, 2:02 p.m.
Allocate the root memory region and initialize it.

Signed-off-by: Avi Kivity <avi@redhat.com>
---
 exec.c |   19 +++++++++++++++++++
 1 files changed, 19 insertions(+), 0 deletions(-)
Anthony Liguori - July 25, 2011, 7:17 p.m.
On 07/25/2011 09:02 AM, Avi Kivity wrote:
> Allocate the root memory region and initialize it.
>
> Signed-off-by: Avi Kivity<avi@redhat.com>
> ---
>   exec.c |   19 +++++++++++++++++++
>   1 files changed, 19 insertions(+), 0 deletions(-)
>
> diff --git a/exec.c b/exec.c
> index 2160ded..d51502f 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -33,6 +33,8 @@
>   #include "kvm.h"
>   #include "hw/xen.h"
>   #include "qemu-timer.h"
> +#include "memory.h"
> +#include "exec-memory.h"
>   #if defined(CONFIG_USER_ONLY)
>   #include<qemu.h>
>   #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
> @@ -109,6 +111,9 @@ int phys_ram_fd;
>   static int in_migration;
>
>   RAMList ram_list = { .blocks = QLIST_HEAD_INITIALIZER(ram_list) };
> +
> +static MemoryRegion *system_memory;
> +
>   #endif
>
>   CPUState *first_cpu;
> @@ -197,6 +202,7 @@ typedef struct PhysPageDesc {
>   static void *l1_phys_map[P_L1_SIZE];
>
>   static void io_mem_init(void);
> +static void memory_map_init(void);
>
>   /* io memory support */
>   CPUWriteMemoryFunc *io_mem_write[IO_MEM_NB_ENTRIES][4];
> @@ -571,6 +577,7 @@ void cpu_exec_init_all(unsigned long tb_size)
>       code_gen_ptr = code_gen_buffer;
>       page_init();
>   #if !defined(CONFIG_USER_ONLY)
> +    memory_map_init();
>       io_mem_init();
>   #endif
>   #if !defined(CONFIG_USER_ONLY) || !defined(CONFIG_USE_GUEST_BASE)
> @@ -3807,6 +3814,18 @@ static void io_mem_init(void)
>                                             DEVICE_NATIVE_ENDIAN);
>   }
>
> +static void memory_map_init(void)
> +{
> +    system_memory = qemu_malloc(sizeof(*system_memory));
> +    memory_region_init(system_memory, "system", UINT64_MAX);

Would be nice to #define MEM_REG_SIZE_ALL UINT64_MAX

Without reading the docs, it seems like an odd bit of code otherwise.

Regards,

Anthony Liguori

> +    set_system_memory_map(system_memory);
> +}
> +
> +MemoryRegion *get_system_memory(void)
> +{
> +    return system_memory;
> +}
> +
>   #endif /* !defined(CONFIG_USER_ONLY) */
>
>   /* physical memory access (slow version, mainly for debug) */
Avi Kivity - July 26, 2011, 10:55 a.m.
On 07/25/2011 10:17 PM, Anthony Liguori wrote:
>> +static void memory_map_init(void)
>> +{
>> +    system_memory = qemu_malloc(sizeof(*system_memory));
>> +    memory_region_init(system_memory, "system", UINT64_MAX);
>
>
> Would be nice to #define MEM_REG_SIZE_ALL UINT64_MAX
>
> Without reading the docs, it seems like an odd bit of code otherwise.

It's really temporary.  It should come from the machine description and 
specify the processor's system bus width.

Patch

diff --git a/exec.c b/exec.c
index 2160ded..d51502f 100644
--- a/exec.c
+++ b/exec.c
@@ -33,6 +33,8 @@ 
 #include "kvm.h"
 #include "hw/xen.h"
 #include "qemu-timer.h"
+#include "memory.h"
+#include "exec-memory.h"
 #if defined(CONFIG_USER_ONLY)
 #include <qemu.h>
 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
@@ -109,6 +111,9 @@  int phys_ram_fd;
 static int in_migration;
 
 RAMList ram_list = { .blocks = QLIST_HEAD_INITIALIZER(ram_list) };
+
+static MemoryRegion *system_memory;
+
 #endif
 
 CPUState *first_cpu;
@@ -197,6 +202,7 @@  typedef struct PhysPageDesc {
 static void *l1_phys_map[P_L1_SIZE];
 
 static void io_mem_init(void);
+static void memory_map_init(void);
 
 /* io memory support */
 CPUWriteMemoryFunc *io_mem_write[IO_MEM_NB_ENTRIES][4];
@@ -571,6 +577,7 @@  void cpu_exec_init_all(unsigned long tb_size)
     code_gen_ptr = code_gen_buffer;
     page_init();
 #if !defined(CONFIG_USER_ONLY)
+    memory_map_init();
     io_mem_init();
 #endif
 #if !defined(CONFIG_USER_ONLY) || !defined(CONFIG_USE_GUEST_BASE)
@@ -3807,6 +3814,18 @@  static void io_mem_init(void)
                                           DEVICE_NATIVE_ENDIAN);
 }
 
+static void memory_map_init(void)
+{
+    system_memory = qemu_malloc(sizeof(*system_memory));
+    memory_region_init(system_memory, "system", UINT64_MAX);
+    set_system_memory_map(system_memory);
+}
+
+MemoryRegion *get_system_memory(void)
+{
+    return system_memory;
+}
+
 #endif /* !defined(CONFIG_USER_ONLY) */
 
 /* physical memory access (slow version, mainly for debug) */