bootdevice: Refactor get_boot_devices_list

Move device name construction to a separate function.

We will reuse this function in the following commit to pass logical CHS
parameters through fw_cfg much like we currently pass bootindex.

Reviewed-by: Karl Heubaum <karl.heubaum@oracle.com>
Reviewed-by: Arbel Moshe <arbel.moshe@oracle.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Sam Eiderman <shmuel.eiderman@oracle.com>
Signed-off-by: Sam Eiderman <sameid@google.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
Sam Eiderman 2019-10-16 19:41:43 +03:00 committed by John Snow
parent 71f571a23d
commit 42f0680199

View File

@ -202,6 +202,39 @@ DeviceState *get_boot_device(uint32_t position)
return res; return res;
} }
static char *get_boot_device_path(DeviceState *dev, bool ignore_suffixes,
const char *suffix)
{
char *devpath = NULL, *s = NULL, *d, *bootpath;
if (dev) {
devpath = qdev_get_fw_dev_path(dev);
assert(devpath);
}
if (!ignore_suffixes) {
if (dev) {
d = qdev_get_own_fw_dev_path_from_handler(dev->parent_bus, dev);
if (d) {
assert(!suffix);
s = d;
} else {
s = g_strdup(suffix);
}
} else {
s = g_strdup(suffix);
}
}
bootpath = g_strdup_printf("%s%s",
devpath ? devpath : "",
s ? s : "");
g_free(devpath);
g_free(s);
return bootpath;
}
/* /*
* This function returns null terminated string that consist of new line * This function returns null terminated string that consist of new line
* separated device paths. * separated device paths.
@ -218,36 +251,10 @@ char *get_boot_devices_list(size_t *size)
bool ignore_suffixes = mc->ignore_boot_device_suffixes; bool ignore_suffixes = mc->ignore_boot_device_suffixes;
QTAILQ_FOREACH(i, &fw_boot_order, link) { QTAILQ_FOREACH(i, &fw_boot_order, link) {
char *devpath = NULL, *suffix = NULL;
char *bootpath; char *bootpath;
char *d;
size_t len; size_t len;
if (i->dev) { bootpath = get_boot_device_path(i->dev, ignore_suffixes, i->suffix);
devpath = qdev_get_fw_dev_path(i->dev);
assert(devpath);
}
if (!ignore_suffixes) {
if (i->dev) {
d = qdev_get_own_fw_dev_path_from_handler(i->dev->parent_bus,
i->dev);
if (d) {
assert(!i->suffix);
suffix = d;
} else {
suffix = g_strdup(i->suffix);
}
} else {
suffix = g_strdup(i->suffix);
}
}
bootpath = g_strdup_printf("%s%s",
devpath ? devpath : "",
suffix ? suffix : "");
g_free(devpath);
g_free(suffix);
if (total) { if (total) {
list[total-1] = '\n'; list[total-1] = '\n';