[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC][PATCH 2/6] Re-factor bootdevice list handling, pt2.
From: |
Janne Huttunen |
Subject: |
[Qemu-devel] [RFC][PATCH 2/6] Re-factor bootdevice list handling, pt2. |
Date: |
Tue, 14 Mar 2017 14:50:09 +0200 |
Store the list head into the property structure. This allows the callback
functions to access the correct list even when there are multiple lists.
Signed-off-by: Janne Huttunen <address@hidden>
---
bootdevice.c | 36 ++++++++++++++++++++++++------------
1 file changed, 24 insertions(+), 12 deletions(-)
diff --git a/bootdevice.c b/bootdevice.c
index a29d43b..30e98ae 100644
--- a/bootdevice.c
+++ b/bootdevice.c
@@ -33,6 +33,13 @@
typedef struct FWBootEntry FWBootEntry;
typedef QTAILQ_HEAD(, FWBootEntry) FWBootList;
+typedef struct {
+ FWBootList *bootlist;
+ int32_t *bootindex;
+ const char *suffix;
+ DeviceState *dev;
+} BootIndexProperty;
+
struct FWBootEntry {
QTAILQ_ENTRY(FWBootEntry) link;
int32_t bootindex;
@@ -288,12 +295,6 @@ char *get_boot_devices_list(size_t *size, bool
ignore_suffixes)
return list;
}
-typedef struct {
- int32_t *bootindex;
- const char *suffix;
- DeviceState *dev;
-} BootIndexProperty;
-
static void device_get_bootindex(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
@@ -313,14 +314,15 @@ static void device_set_bootindex(Object *obj, Visitor *v,
const char *name,
goto out;
}
/* check whether bootindex is present in fw_boot_order list */
- check_boot_index(boot_index, &local_err);
+ do_check_boot_index(prop->bootlist, boot_index, &local_err);
if (local_err) {
goto out;
}
/* change bootindex to a new one */
*prop->bootindex = boot_index;
- add_boot_device_path(*prop->bootindex, prop->dev, prop->suffix);
+ do_add_boot_device_path(prop->bootlist, *prop->bootindex,
+ prop->dev, prop->suffix);
out:
error_propagate(errp, local_err);
@@ -332,17 +334,19 @@ static void property_release_bootindex(Object *obj, const
char *name,
{
BootIndexProperty *prop = opaque;
- del_boot_device_path(prop->dev, prop->suffix);
+ do_del_boot_device_path(prop->bootlist, prop->dev, prop->suffix);
g_free(prop);
}
-void device_add_bootindex_property(Object *obj, int32_t *bootindex,
- const char *name, const char *suffix,
- DeviceState *dev, Error **errp)
+static void do_add_bootindex_prop(FWBootList *bootlist,
+ Object *obj, int32_t *bootindex,
+ const char *name, const char *suffix,
+ DeviceState *dev, Error **errp)
{
Error *local_err = NULL;
BootIndexProperty *prop = g_malloc0(sizeof(*prop));
+ prop->bootlist = bootlist;
prop->bootindex = bootindex;
prop->suffix = suffix;
prop->dev = dev;
@@ -361,3 +365,11 @@ void device_add_bootindex_property(Object *obj, int32_t
*bootindex,
/* initialize devices' bootindex property to -1 */
object_property_set_int(obj, -1, name, NULL);
}
+
+void device_add_bootindex_property(Object *obj, int32_t *bootindex,
+ const char *name, const char *suffix,
+ DeviceState *dev, Error **errp)
+{
+ do_add_bootindex_prop(&fw_boot_order, obj, bootindex,
+ name, suffix, dev, errp);
+}
--
2.7.4
[Qemu-devel] [RFC][PATCH 2/6] Re-factor bootdevice list handling, pt2.,
Janne Huttunen <=
[Qemu-devel] [RFC][PATCH 6/6] Support "bootonceindex" property for SCSI disks., Janne Huttunen, 2017/03/14
[Qemu-devel] [RFC][PATCH 3/6] Add support for "bootonceindex" property., Janne Huttunen, 2017/03/14