Message ID | 1421673818-11224-2-git-send-email-arei.gonglei@huawei.com |
---|---|
State | New |
Headers | show |
On 19/01/2015 14:23, arei.gonglei@huawei.com wrote: > @@ -780,6 +788,12 @@ static int qdev_get_fw_dev_path_helper(DeviceState *dev, char *p, int size) > d = bus_get_fw_dev_path(dev->parent_bus, dev); > } > if (d) { > + l += snprintf(p + l, size - l, "%s/", d); > + g_free(d); > + } > + > + d = qdev_get_own_fw_dev_path_from_handler(dev->parent_bus, dev); This changes preexisting behavior. If d was true, you wouldn't go down the following else. Now it does. I was thinking it should be handled though the "suffix" argument to add_boot_device_path, but that's harder now that the suffix has to be passed to device_add_bootindex_property. Perhaps you could call qdev_get_own_fw_dev_path_from_handler in get_boot_devices_list, and convert non-NULL suffixes to implementations of FWPathProvider? Paolo > + if (d) { > l += snprintf(p + l, size - l, "%s", d); > g_free(d); > } else {
diff --git a/hw/core/qdev.c b/hw/core/qdev.c index 901f289..fb0a150 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -768,6 +768,14 @@ static char *qdev_get_fw_dev_path_from_handler(BusState *bus, DeviceState *dev) return d; } +static char *qdev_get_own_fw_dev_path_from_handler(BusState *bus, + DeviceState *dev) +{ + Object *obj = OBJECT(dev); + + return fw_path_provider_try_get_dev_path(obj, bus, dev); +} + static int qdev_get_fw_dev_path_helper(DeviceState *dev, char *p, int size) { int l = 0; @@ -780,6 +788,12 @@ static int qdev_get_fw_dev_path_helper(DeviceState *dev, char *p, int size) d = bus_get_fw_dev_path(dev->parent_bus, dev); } if (d) { + l += snprintf(p + l, size - l, "%s/", d); + g_free(d); + } + + d = qdev_get_own_fw_dev_path_from_handler(dev->parent_bus, dev); + if (d) { l += snprintf(p + l, size - l, "%s", d); g_free(d); } else {