[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 24/28] device tree: dont fail operations
From: |
Alexander Graf |
Subject: |
[Qemu-devel] [PATCH 24/28] device tree: dont fail operations |
Date: |
Sat, 23 Jul 2011 12:50:08 +0200 |
When we screw up and issue an FDT command that doesn't work, we really need to
know immediately and usually can't continue to create the machine. To make sure
we don't need to add error checking in all device tree modification code users,
we can just add the fail checks to the qemu abstract functions.
Signed-off-by: Alexander Graf <address@hidden>
---
device_tree.c | 76 ++++++++++++++++++++++++++++++++++++++------------------
1 files changed, 51 insertions(+), 25 deletions(-)
diff --git a/device_tree.c b/device_tree.c
index e58d522..2af345b 100644
--- a/device_tree.c
+++ b/device_tree.c
@@ -72,56 +72,81 @@ fail:
return NULL;
}
-int qemu_devtree_setprop(void *fdt, const char *node_path,
- const char *property, void *val_array, int size)
+static int findnode_nofail(void *fdt, const char *node_path)
{
int offset;
offset = fdt_path_offset(fdt, node_path);
- if (offset < 0)
- return offset;
+ if (offset < 0) {
+ fprintf(stderr, "%s Couldn't find node %s: %s\n", __func__, node_path,
+ fdt_strerror(offset));
+ exit(1);
+ }
+
+ return offset;
+}
+
+int qemu_devtree_setprop(void *fdt, const char *node_path,
+ const char *property, void *val_array, int size)
+{
+ int r;
+
+ r = fdt_setprop(fdt, findnode_nofail(fdt, node_path), property, val_array,
size);
+ if (r < 0) {
+ fprintf(stderr, "%s: Couldn't set %s/%s: %s\n", __func__, node_path,
+ property, fdt_strerror(r));
+ exit(1);
+ }
- return fdt_setprop(fdt, offset, property, val_array, size);
+ return r;
}
int qemu_devtree_setprop_cell(void *fdt, const char *node_path,
const char *property, uint32_t val)
{
- int offset;
+ int r;
- offset = fdt_path_offset(fdt, node_path);
- if (offset < 0)
- return offset;
+ r = fdt_setprop_cell(fdt, findnode_nofail(fdt, node_path), property, val);
+ if (r < 0) {
+ fprintf(stderr, "%s: Couldn't set %s/%s = %#08x: %s\n", __func__,
+ node_path, property, val, fdt_strerror(r));
+ exit(1);
+ }
- return fdt_setprop_cell(fdt, offset, property, val);
+ return r;
}
int qemu_devtree_setprop_string(void *fdt, const char *node_path,
const char *property, const char *string)
{
- int offset;
+ int r;
- offset = fdt_path_offset(fdt, node_path);
- if (offset < 0)
- return offset;
+ r = fdt_setprop_string(fdt, findnode_nofail(fdt, node_path), property,
string);
+ if (r < 0) {
+ fprintf(stderr, "%s: Couldn't set %s/%s = %s: %s\n", __func__,
+ node_path, property, string, fdt_strerror(r));
+ exit(1);
+ }
- return fdt_setprop_string(fdt, offset, property, string);
+ return r;
}
int qemu_devtree_nop_node(void *fdt, const char *node_path)
{
- int offset;
+ int r;
- offset = fdt_path_offset(fdt, node_path);
- if (offset < 0)
- return offset;
+ r = fdt_nop_node(fdt, findnode_nofail(fdt, node_path));
+ if (r < 0) {
+ fprintf(stderr, "%s: Couldn't nop node %s: %s\n", __func__, node_path,
+ fdt_strerror(r));
+ exit(1);
+ }
- return fdt_nop_node(fdt, offset);
+ return r;
}
int qemu_devtree_add_subnode(void *fdt, const char *name)
{
- int offset;
char *dupname = qemu_strdup(name);
char *basename = strrchr(dupname, '/');
int retval;
@@ -133,12 +158,13 @@ int qemu_devtree_add_subnode(void *fdt, const char *name)
basename[0] = '\0';
basename++;
- offset = fdt_path_offset(fdt, dupname);
- if (offset < 0) {
- return offset;
+ retval = fdt_add_subnode(fdt, findnode_nofail(fdt, dupname), basename);
+ if (retval < 0) {
+ fprintf(stderr, "FDT: Failed to create subnode %s: %s\n", name,
+ fdt_strerror(retval));
+ exit(1);
}
- retval = fdt_add_subnode(fdt, offset, basename);
qemu_free(dupname);
return retval;
}
--
1.6.0.2
- Re: [Qemu-devel] [PATCH 21/28] PPC: E500: Add PV spinning code, (continued)
[Qemu-devel] [PATCH 18/28] PPC: KVM: Add stubs for kvm helper functions, Alexander Graf, 2011/07/23
[Qemu-devel] [PATCH 11/28] device tree: add nop_node, Alexander Graf, 2011/07/23
[Qemu-devel] [PATCH 05/28] PPC: Set MPIC IDE for IPI to 0, Alexander Graf, 2011/07/23
[Qemu-devel] [PATCH 28/28] PPC: E500: Bump CPU count to 15, Alexander Graf, 2011/07/23
[Qemu-devel] [PATCH 25/28] device tree: give dt more size, Alexander Graf, 2011/07/23
[Qemu-devel] [PATCH 03/28] PPC: Extend MPIC MMIO range, Alexander Graf, 2011/07/23
[Qemu-devel] [PATCH 24/28] device tree: dont fail operations,
Alexander Graf <=
[Qemu-devel] [PATCH 04/28] PPC: Fix IPI support in MPIC, Alexander Graf, 2011/07/23
[Qemu-devel] [PATCH 02/28] PPC: Add CPU local MMIO regions to MPIC, Alexander Graf, 2011/07/23
[Qemu-devel] [PATCH 23/28] device tree: add add_subnode command, Alexander Graf, 2011/07/23
[Qemu-devel] [PATCH 22/28] PPC: E500: Update cpu-release-addr property in cpu nodes, Alexander Graf, 2011/07/23
[Qemu-devel] [PATCH 17/28] PPC: KVM: Remove kvmppc_read_host_property, Alexander Graf, 2011/07/23
[Qemu-devel] [PATCH 07/28] PPC: MPIC: Fix CI bit definitions, Alexander Graf, 2011/07/23
[Qemu-devel] [PATCH 27/28] MPC8544DS: Generate CPU nodes on init, Alexander Graf, 2011/07/23
[Qemu-devel] [PATCH 10/28] PPC: E500: Generate IRQ lines for many CPUs, Alexander Graf, 2011/07/23
[Qemu-devel] [PATCH 16/28] PPC: bamboo: Use kvm api for freq and clock frequencies, Alexander Graf, 2011/07/23
[Qemu-devel] [PATCH 15/28] PPC: E500: Remove mpc8544_copy_soc_cell, Alexander Graf, 2011/07/23