All of lore.kernel.org
 help / color / mirror / Atom feed
From: Henry Wang <Henry.Wang@arm.com>
To: xen-devel@lists.xenproject.org
Cc: Henry Wang <Henry.Wang@arm.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>,
	Bertrand Marquis <bertrand.marquis@arm.com>,
	Wei Chen <wei.chen@arm.com>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
Subject: [PATCH v2 2/4] xen/arm: bootfdt: Make process_chosen_node() return int
Date: Mon,  5 Sep 2022 07:26:33 +0000	[thread overview]
Message-ID: <20220905072635.16294-3-Henry.Wang@arm.com> (raw)
In-Reply-To: <20220905072635.16294-1-Henry.Wang@arm.com>

At the boot time, it is saner to stop booting early if an error occurs
when parsing the device tree chosen node, rather than seeing random
behavior afterwards. Therefore, this commit changes the return type of
the process_chosen_node() from void to int, and return correct errno
based on the error type.

Signed-off-by: Henry Wang <Henry.Wang@arm.com>
---
Changes from v1 to v2:
- New commit.
---
 xen/arch/arm/bootfdt.c | 31 +++++++++++++++++--------------
 1 file changed, 17 insertions(+), 14 deletions(-)

diff --git a/xen/arch/arm/bootfdt.c b/xen/arch/arm/bootfdt.c
index 5af71dc8ba..3796a4bd75 100644
--- a/xen/arch/arm/bootfdt.c
+++ b/xen/arch/arm/bootfdt.c
@@ -293,9 +293,9 @@ static void __init process_multiboot_node(const void *fdt, int node,
                      kind, start, domU);
 }
 
-static void __init process_chosen_node(const void *fdt, int node,
-                                       const char *name,
-                                       u32 address_cells, u32 size_cells)
+static int __init process_chosen_node(const void *fdt, int node,
+                                      const char *name,
+                                      u32 address_cells, u32 size_cells)
 {
     const struct fdt_property *prop;
     paddr_t start, end;
@@ -303,6 +303,7 @@ static void __init process_chosen_node(const void *fdt, int node,
 
     if ( fdt_get_property(fdt, node, "xen,static-heap", NULL) )
     {
+        int rc;
         u32 address_cells = device_tree_get_u32(fdt, node,
                                 "#xen,static-heap-address-cells", 0);
         u32 size_cells = device_tree_get_u32(fdt, node,
@@ -313,14 +314,14 @@ static void __init process_chosen_node(const void *fdt, int node,
         {
             printk("fdt: node `%s': invalid #xen,static-heap-address-cells or #xen,static-heap-size-cells\n",
                    name);
-            return;
+            return -EINVAL;
         }
 
-        if ( device_tree_get_meminfo(fdt, node, "xen,static-heap",
+        rc = device_tree_get_meminfo(fdt, node, "xen,static-heap",
                                      address_cells, size_cells,
-                                     &bootinfo.reserved_mem,
-                                     MEMBANK_RSVD_HEAP) )
-            return;
+                                     &bootinfo.reserved_mem, MEMBANK_RSVD_HEAP);
+        if ( rc )
+            return rc;
     }
 
     printk("Checking for initrd in /chosen\n");
@@ -328,11 +329,11 @@ static void __init process_chosen_node(const void *fdt, int node,
     prop = fdt_get_property(fdt, node, "linux,initrd-start", &len);
     if ( !prop )
         /* No initrd present. */
-        return;
+        return 0;
     if ( len != sizeof(u32) && len != sizeof(u64) )
     {
         printk("linux,initrd-start property has invalid length %d\n", len);
-        return;
+        return -EINVAL;
     }
     start = dt_read_number((void *)&prop->data, dt_size_to_cells(len));
 
@@ -340,12 +341,12 @@ static void __init process_chosen_node(const void *fdt, int node,
     if ( !prop )
     {
         printk("linux,initrd-end not present but -start was\n");
-        return;
+        return -EINVAL;
     }
     if ( len != sizeof(u32) && len != sizeof(u64) )
     {
         printk("linux,initrd-end property has invalid length %d\n", len);
-        return;
+        return -EINVAL;
     }
     end = dt_read_number((void *)&prop->data, dt_size_to_cells(len));
 
@@ -353,12 +354,14 @@ static void __init process_chosen_node(const void *fdt, int node,
     {
         printk("linux,initrd limits invalid: %"PRIpaddr" >= %"PRIpaddr"\n",
                   start, end);
-        return;
+        return -EINVAL;
     }
 
     printk("Initrd %"PRIpaddr"-%"PRIpaddr"\n", start, end);
 
     add_boot_module(BOOTMOD_RAMDISK, start, end-start, false);
+
+    return 0;
 }
 
 static int __init process_domain_node(const void *fdt, int node,
@@ -406,7 +409,7 @@ static int __init early_scan_node(const void *fdt,
               device_tree_node_compatible(fdt, node, "multiboot,module" )))
         process_multiboot_node(fdt, node, name, address_cells, size_cells);
     else if ( depth == 1 && device_tree_node_matches(fdt, node, "chosen") )
-        process_chosen_node(fdt, node, name, address_cells, size_cells);
+        rc = process_chosen_node(fdt, node, name, address_cells, size_cells);
     else if ( depth == 2 && device_tree_node_compatible(fdt, node, "xen,domain") )
         rc = process_domain_node(fdt, node, name, address_cells, size_cells);
 
-- 
2.17.1



  parent reply	other threads:[~2022-09-05  7:27 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-05  7:26 [PATCH v2 0/4] Introduce reserved heap Henry Wang
2022-09-05  7:26 ` [PATCH v2 1/4] docs, xen/arm: Introduce reserved heap memory Henry Wang
2022-09-05 12:04   ` Michal Orzel
2022-09-05 12:10     ` Henry Wang
2022-09-05 17:24     ` Julien Grall
2022-09-06  6:34       ` Michal Orzel
2022-09-06  6:41         ` Henry Wang
2022-09-06  8:02           ` Julien Grall
2022-09-05 17:20   ` Julien Grall
2022-09-06  1:09     ` Henry Wang
2022-09-05 22:47   ` Stefano Stabellini
2022-09-06  1:04     ` Henry Wang
2022-09-05  7:26 ` Henry Wang [this message]
2022-09-05  9:16   ` [PATCH v2 2/4] xen/arm: bootfdt: Make process_chosen_node() return int Michal Orzel
2022-09-05  9:17     ` Julien Grall
2022-09-05  9:21       ` Henry Wang
2022-09-05  7:26 ` [PATCH v2 3/4] xen/arm: Handle reserved heap pages in boot and heap allocator Henry Wang
2022-09-05 18:16   ` Julien Grall
2022-09-06  1:53     ` Henry Wang
2022-09-06  8:59       ` Julien Grall
2022-09-06 11:11         ` Henry Wang
2022-09-06 12:39           ` Julien Grall
2022-09-06 13:39             ` Henry Wang
2022-09-05  7:26 ` [PATCH v2 4/4] xen/arm: mm: Rename xenheap_* variable to directmap_* Henry Wang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220905072635.16294-3-Henry.Wang@arm.com \
    --to=henry.wang@arm.com \
    --cc=Volodymyr_Babchuk@epam.com \
    --cc=bertrand.marquis@arm.com \
    --cc=julien@xen.org \
    --cc=sstabellini@kernel.org \
    --cc=wei.chen@arm.com \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.