[v2,59/86] ppc:e500: drop RAM size fixup
diff mbox series

Message ID 1579100861-73692-60-git-send-email-imammedo@redhat.com
State New
Headers show
Series
  • refactor main RAM allocation to use hostmem backend
Related show

Commit Message

Igor Mammedov Jan. 15, 2020, 3:07 p.m. UTC
If user provided non-sense RAM size, board will complain and
continue running with max RAM size supported.
Also RAM is going to be allocated by generic code, so it won't be
possible for board to fix things up for user.

Make it error message and exit to force user fix CLI,
instead of accepting non-sense CLI values.

While at it, replace usage of global ram_size with
machine->ram_size

Signed-off-by: Igor Mammedov <imammedo@redhat.com>

---
v2:
 * fix format string cousing build failure on 32-bit host
   (Philippe Mathieu-Daudé <philmd@redhat.com>)

CC: david@gibson.dropbear.id.au
CC: qemu-ppc@nongnu.org
---
 hw/ppc/e500.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

Comments

David Gibson Jan. 16, 2020, 1:08 a.m. UTC | #1
On Wed, Jan 15, 2020 at 04:07:14PM +0100, Igor Mammedov wrote:
> If user provided non-sense RAM size, board will complain and
> continue running with max RAM size supported.
> Also RAM is going to be allocated by generic code, so it won't be
> possible for board to fix things up for user.
> 
> Make it error message and exit to force user fix CLI,
> instead of accepting non-sense CLI values.
> 
> While at it, replace usage of global ram_size with
> machine->ram_size
> 
> Signed-off-by: Igor Mammedov <imammedo@redhat.com>

Acked-by: David Gibson <david@gibson.dropbear.id.au>

> 
> ---
> v2:
>  * fix format string cousing build failure on 32-bit host
>    (Philippe Mathieu-Daudé <philmd@redhat.com>)
> 
> CC: david@gibson.dropbear.id.au
> CC: qemu-ppc@nongnu.org
> ---
>  hw/ppc/e500.c | 16 +++++++++-------
>  1 file changed, 9 insertions(+), 7 deletions(-)
> 
> diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
> index 12b6a5b..6d119fe 100644
> --- a/hw/ppc/e500.c
> +++ b/hw/ppc/e500.c
> @@ -906,12 +906,14 @@ void ppce500_init(MachineState *machine)
>  
>      env = firstenv;
>  
> -    /* Fixup Memory size on a alignment boundary */
> -    ram_size &= ~(RAM_SIZES_ALIGN - 1);
> -    machine->ram_size = ram_size;
> +    if (!QEMU_IS_ALIGNED(machine->ram_size, RAM_SIZES_ALIGN)) {
> +        error_report("RAM size must be multiple of %" PRIu64, RAM_SIZES_ALIGN);
> +        exit(EXIT_FAILURE);
> +    }
>  
>      /* Register Memory */
> -    memory_region_allocate_system_memory(ram, NULL, "mpc8544ds.ram", ram_size);
> +    memory_region_allocate_system_memory(ram, NULL, "mpc8544ds.ram",
> +                                         machine->ram_size);
>      memory_region_add_subregion(address_space_mem, 0, ram);
>  
>      dev = qdev_create(NULL, "e500-ccsr");
> @@ -1083,7 +1085,7 @@ void ppce500_init(MachineState *machine)
>          kernel_base = cur_base;
>          kernel_size = load_image_targphys(machine->kernel_filename,
>                                            cur_base,
> -                                          ram_size - cur_base);
> +                                          machine->ram_size - cur_base);
>          if (kernel_size < 0) {
>              error_report("could not load kernel '%s'",
>                           machine->kernel_filename);
> @@ -1097,7 +1099,7 @@ void ppce500_init(MachineState *machine)
>      if (machine->initrd_filename) {
>          initrd_base = (cur_base + INITRD_LOAD_PAD) & ~INITRD_PAD_MASK;
>          initrd_size = load_image_targphys(machine->initrd_filename, initrd_base,
> -                                          ram_size - initrd_base);
> +                                          machine->ram_size - initrd_base);
>  
>          if (initrd_size < 0) {
>              error_report("could not load initial ram disk '%s'",
> @@ -1115,7 +1117,7 @@ void ppce500_init(MachineState *machine)
>       * ensures enough space between kernel and initrd.
>       */
>      dt_base = (loadaddr + payload_size + DTC_LOAD_PAD) & ~DTC_PAD_MASK;
> -    if (dt_base + DTB_MAX_SIZE > ram_size) {
> +    if (dt_base + DTB_MAX_SIZE > machine->ram_size) {
>              error_report("not enough memory for device tree");
>              exit(1);
>      }

Patch
diff mbox series

diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
index 12b6a5b..6d119fe 100644
--- a/hw/ppc/e500.c
+++ b/hw/ppc/e500.c
@@ -906,12 +906,14 @@  void ppce500_init(MachineState *machine)
 
     env = firstenv;
 
-    /* Fixup Memory size on a alignment boundary */
-    ram_size &= ~(RAM_SIZES_ALIGN - 1);
-    machine->ram_size = ram_size;
+    if (!QEMU_IS_ALIGNED(machine->ram_size, RAM_SIZES_ALIGN)) {
+        error_report("RAM size must be multiple of %" PRIu64, RAM_SIZES_ALIGN);
+        exit(EXIT_FAILURE);
+    }
 
     /* Register Memory */
-    memory_region_allocate_system_memory(ram, NULL, "mpc8544ds.ram", ram_size);
+    memory_region_allocate_system_memory(ram, NULL, "mpc8544ds.ram",
+                                         machine->ram_size);
     memory_region_add_subregion(address_space_mem, 0, ram);
 
     dev = qdev_create(NULL, "e500-ccsr");
@@ -1083,7 +1085,7 @@  void ppce500_init(MachineState *machine)
         kernel_base = cur_base;
         kernel_size = load_image_targphys(machine->kernel_filename,
                                           cur_base,
-                                          ram_size - cur_base);
+                                          machine->ram_size - cur_base);
         if (kernel_size < 0) {
             error_report("could not load kernel '%s'",
                          machine->kernel_filename);
@@ -1097,7 +1099,7 @@  void ppce500_init(MachineState *machine)
     if (machine->initrd_filename) {
         initrd_base = (cur_base + INITRD_LOAD_PAD) & ~INITRD_PAD_MASK;
         initrd_size = load_image_targphys(machine->initrd_filename, initrd_base,
-                                          ram_size - initrd_base);
+                                          machine->ram_size - initrd_base);
 
         if (initrd_size < 0) {
             error_report("could not load initial ram disk '%s'",
@@ -1115,7 +1117,7 @@  void ppce500_init(MachineState *machine)
      * ensures enough space between kernel and initrd.
      */
     dt_base = (loadaddr + payload_size + DTC_LOAD_PAD) & ~DTC_PAD_MASK;
-    if (dt_base + DTB_MAX_SIZE > ram_size) {
+    if (dt_base + DTB_MAX_SIZE > machine->ram_size) {
             error_report("not enough memory for device tree");
             exit(1);
     }