Re: [PATCH v4 08/14] none-machine: add 'ram-addr' property

2022-05-24 Thread Jim Shu
Tested-by: Jim Shu 

On Fri, Mar 4, 2022 at 12:36 AM Damien Hedde 
wrote:

>
>
> On 3/3/22 15:41, Philippe Mathieu-Daudé wrote:
> > On 23/2/22 10:07, Damien Hedde wrote:
> >> Add the property to configure a the base address of the ram.
> >> The default value remains zero.
> >>
> >> This commit is needed to use the 'none' machine as a base, and
> >> subsequently to dynamically populate it using qapi commands. Having
> >> a non null 'ram' is really hard to workaround because of the actual
> >> constraints on the generic loader: it prevents loading binaries
> >> bigger than ram_size (with a null ram, we cannot load anything).
> >> For now we need to be able to use the existing ram creation
> >> feature of the none machine with a configurable base address.
> >>
> >> Signed-off-by: Damien Hedde 
> >> ---
> >>   hw/core/null-machine.c | 34 --
> >>   1 file changed, 32 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/hw/core/null-machine.c b/hw/core/null-machine.c
> >> index 7eb258af07..5fd1cc0218 100644
> >> --- a/hw/core/null-machine.c
> >> +++ b/hw/core/null-machine.c
> >> @@ -16,9 +16,11 @@
> >>   #include "hw/boards.h"
> >>   #include "exec/address-spaces.h"
> >>   #include "hw/core/cpu.h"
> >> +#include "qapi/visitor.h"
> >>   struct NoneMachineState {
> >>   MachineState parent;
> >> +uint64_t ram_addr;
> >>   };
> >>   #define TYPE_NONE_MACHINE MACHINE_TYPE_NAME("none")
> >> @@ -26,6 +28,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(NoneMachineState,
> >> NONE_MACHINE)
> >>   static void machine_none_init(MachineState *mch)
> >>   {
> >> +NoneMachineState *nms = NONE_MACHINE(mch);
> >>   CPUState *cpu = NULL;
> >>   /* Initialize CPU (if user asked for it) */
> >> @@ -37,9 +40,13 @@ static void machine_none_init(MachineState *mch)
> >>   }
> >>   }
> >> -/* RAM at address zero */
> >> +/* RAM at configured address (default: 0) */
> >>   if (mch->ram) {
> >> -memory_region_add_subregion(get_system_memory(), 0, mch->ram);
> >> +memory_region_add_subregion(get_system_memory(), nms->ram_addr,
> >> +mch->ram);
> >> +} else if (nms->ram_addr) {
> >> +error_report("'ram-addr' has been specified but the size is
> >> zero");
> >
> > I'm not sure about this error message, IIUC we can get here if no ram
> > backend is provided, not if we have one zero-sized. Otherwise LGTM.
>
> You're most probably right. Keeping the ram_size to 0 is just one way of
> getting here. I can replace the message by a more generic formulation
> "'ram-addr' has been specified but the machine has no ram"
>
>
>


Re: [PATCH v4 08/14] none-machine: add 'ram-addr' property

2022-03-03 Thread Damien Hedde




On 3/3/22 15:41, Philippe Mathieu-Daudé wrote:

On 23/2/22 10:07, Damien Hedde wrote:

Add the property to configure a the base address of the ram.
The default value remains zero.

This commit is needed to use the 'none' machine as a base, and
subsequently to dynamically populate it using qapi commands. Having
a non null 'ram' is really hard to workaround because of the actual
constraints on the generic loader: it prevents loading binaries
bigger than ram_size (with a null ram, we cannot load anything).
For now we need to be able to use the existing ram creation
feature of the none machine with a configurable base address.

Signed-off-by: Damien Hedde 
---
  hw/core/null-machine.c | 34 --
  1 file changed, 32 insertions(+), 2 deletions(-)

diff --git a/hw/core/null-machine.c b/hw/core/null-machine.c
index 7eb258af07..5fd1cc0218 100644
--- a/hw/core/null-machine.c
+++ b/hw/core/null-machine.c
@@ -16,9 +16,11 @@
  #include "hw/boards.h"
  #include "exec/address-spaces.h"
  #include "hw/core/cpu.h"
+#include "qapi/visitor.h"
  struct NoneMachineState {
  MachineState parent;
+    uint64_t ram_addr;
  };
  #define TYPE_NONE_MACHINE MACHINE_TYPE_NAME("none")
@@ -26,6 +28,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(NoneMachineState, 
NONE_MACHINE)

  static void machine_none_init(MachineState *mch)
  {
+    NoneMachineState *nms = NONE_MACHINE(mch);
  CPUState *cpu = NULL;
  /* Initialize CPU (if user asked for it) */
@@ -37,9 +40,13 @@ static void machine_none_init(MachineState *mch)
  }
  }
-    /* RAM at address zero */
+    /* RAM at configured address (default: 0) */
  if (mch->ram) {
-    memory_region_add_subregion(get_system_memory(), 0, mch->ram);
+    memory_region_add_subregion(get_system_memory(), nms->ram_addr,
+    mch->ram);
+    } else if (nms->ram_addr) {
+    error_report("'ram-addr' has been specified but the size is 
zero");


I'm not sure about this error message, IIUC we can get here if no ram
backend is provided, not if we have one zero-sized. Otherwise LGTM.


You're most probably right. Keeping the ram_size to 0 is just one way of 
getting here. I can replace the message by a more generic formulation

"'ram-addr' has been specified but the machine has no ram"




Re: [PATCH v4 08/14] none-machine: add 'ram-addr' property

2022-03-03 Thread Philippe Mathieu-Daudé

On 23/2/22 10:07, Damien Hedde wrote:

Add the property to configure a the base address of the ram.
The default value remains zero.

This commit is needed to use the 'none' machine as a base, and
subsequently to dynamically populate it using qapi commands. Having
a non null 'ram' is really hard to workaround because of the actual
constraints on the generic loader: it prevents loading binaries
bigger than ram_size (with a null ram, we cannot load anything).
For now we need to be able to use the existing ram creation
feature of the none machine with a configurable base address.

Signed-off-by: Damien Hedde 
---
  hw/core/null-machine.c | 34 --
  1 file changed, 32 insertions(+), 2 deletions(-)

diff --git a/hw/core/null-machine.c b/hw/core/null-machine.c
index 7eb258af07..5fd1cc0218 100644
--- a/hw/core/null-machine.c
+++ b/hw/core/null-machine.c
@@ -16,9 +16,11 @@
  #include "hw/boards.h"
  #include "exec/address-spaces.h"
  #include "hw/core/cpu.h"
+#include "qapi/visitor.h"
  
  struct NoneMachineState {

  MachineState parent;
+uint64_t ram_addr;
  };
  
  #define TYPE_NONE_MACHINE MACHINE_TYPE_NAME("none")

@@ -26,6 +28,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(NoneMachineState, NONE_MACHINE)
  
  static void machine_none_init(MachineState *mch)

  {
+NoneMachineState *nms = NONE_MACHINE(mch);
  CPUState *cpu = NULL;
  
  /* Initialize CPU (if user asked for it) */

@@ -37,9 +40,13 @@ static void machine_none_init(MachineState *mch)
  }
  }
  
-/* RAM at address zero */

+/* RAM at configured address (default: 0) */
  if (mch->ram) {
-memory_region_add_subregion(get_system_memory(), 0, mch->ram);
+memory_region_add_subregion(get_system_memory(), nms->ram_addr,
+mch->ram);
+} else if (nms->ram_addr) {
+error_report("'ram-addr' has been specified but the size is zero");


I'm not sure about this error message, IIUC we can get here if no ram
backend is provided, not if we have one zero-sized. Otherwise LGTM.


+exit(1);
  }




[PATCH v4 08/14] none-machine: add 'ram-addr' property

2022-02-23 Thread Damien Hedde
Add the property to configure a the base address of the ram.
The default value remains zero.

This commit is needed to use the 'none' machine as a base, and
subsequently to dynamically populate it using qapi commands. Having
a non null 'ram' is really hard to workaround because of the actual
constraints on the generic loader: it prevents loading binaries
bigger than ram_size (with a null ram, we cannot load anything).
For now we need to be able to use the existing ram creation
feature of the none machine with a configurable base address.

Signed-off-by: Damien Hedde 
---
 hw/core/null-machine.c | 34 --
 1 file changed, 32 insertions(+), 2 deletions(-)

diff --git a/hw/core/null-machine.c b/hw/core/null-machine.c
index 7eb258af07..5fd1cc0218 100644
--- a/hw/core/null-machine.c
+++ b/hw/core/null-machine.c
@@ -16,9 +16,11 @@
 #include "hw/boards.h"
 #include "exec/address-spaces.h"
 #include "hw/core/cpu.h"
+#include "qapi/visitor.h"
 
 struct NoneMachineState {
 MachineState parent;
+uint64_t ram_addr;
 };
 
 #define TYPE_NONE_MACHINE MACHINE_TYPE_NAME("none")
@@ -26,6 +28,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(NoneMachineState, NONE_MACHINE)
 
 static void machine_none_init(MachineState *mch)
 {
+NoneMachineState *nms = NONE_MACHINE(mch);
 CPUState *cpu = NULL;
 
 /* Initialize CPU (if user asked for it) */
@@ -37,9 +40,13 @@ static void machine_none_init(MachineState *mch)
 }
 }
 
-/* RAM at address zero */
+/* RAM at configured address (default: 0) */
 if (mch->ram) {
-memory_region_add_subregion(get_system_memory(), 0, mch->ram);
+memory_region_add_subregion(get_system_memory(), nms->ram_addr,
+mch->ram);
+} else if (nms->ram_addr) {
+error_report("'ram-addr' has been specified but the size is zero");
+exit(1);
 }
 
 if (mch->kernel_filename) {
@@ -49,6 +56,22 @@ static void machine_none_init(MachineState *mch)
 }
 }
 
+static void machine_none_get_ram_addr(Object *obj, Visitor *v, const char 
*name,
+  void *opaque, Error **errp)
+{
+NoneMachineState *nms = NONE_MACHINE(obj);
+
+visit_type_uint64(v, name, >ram_addr, errp);
+}
+
+static void machine_none_set_ram_addr(Object *obj, Visitor *v, const char 
*name,
+  void *opaque, Error **errp)
+{
+NoneMachineState *nms = NONE_MACHINE(obj);
+
+visit_type_uint64(v, name, >ram_addr, errp);
+}
+
 static void machine_none_class_init(ObjectClass *oc, void *data)
 {
 MachineClass *mc = MACHINE_CLASS(oc);
@@ -63,6 +86,13 @@ static void machine_none_class_init(ObjectClass *oc, void 
*data)
 mc->no_floppy = 1;
 mc->no_cdrom = 1;
 mc->no_sdcard = 1;
+
+object_class_property_add(oc, "ram-addr", "int",
+machine_none_get_ram_addr,
+machine_none_set_ram_addr,
+NULL, NULL);
+object_class_property_set_description(oc, "ram-addr",
+"Base address of the RAM (default is 0)");
 }
 
 static const TypeInfo none_machine_info = {
-- 
2.35.1