qga/commands-posix: Move the udev code from the pci to the generic function
The libudev-related code is independent from the other pci-related code and can be re-used for non-pci devices (like ccw devices on s390x). Thus move this part to the generic function. Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1755075 Signed-off-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
This commit is contained in:
parent
d9fe4f0fea
commit
43dadc431b
@ -874,10 +874,6 @@ static bool build_guest_fsinfo_for_pci_dev(char const *syspath,
|
|||||||
GuestPCIAddress *pciaddr = disk->pci_controller;
|
GuestPCIAddress *pciaddr = disk->pci_controller;
|
||||||
bool has_ata = false, has_host = false, has_tgt = false;
|
bool has_ata = false, has_host = false, has_tgt = false;
|
||||||
char *p, *q, *driver = NULL;
|
char *p, *q, *driver = NULL;
|
||||||
#ifdef CONFIG_LIBUDEV
|
|
||||||
struct udev *udev = NULL;
|
|
||||||
struct udev_device *udevice = NULL;
|
|
||||||
#endif
|
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
|
|
||||||
p = strstr(syspath, "/devices/pci");
|
p = strstr(syspath, "/devices/pci");
|
||||||
@ -936,26 +932,6 @@ static bool build_guest_fsinfo_for_pci_dev(char const *syspath,
|
|||||||
pciaddr->slot = pci[2];
|
pciaddr->slot = pci[2];
|
||||||
pciaddr->function = pci[3];
|
pciaddr->function = pci[3];
|
||||||
|
|
||||||
#ifdef CONFIG_LIBUDEV
|
|
||||||
udev = udev_new();
|
|
||||||
udevice = udev_device_new_from_syspath(udev, syspath);
|
|
||||||
if (udev == NULL || udevice == NULL) {
|
|
||||||
g_debug("failed to query udev");
|
|
||||||
} else {
|
|
||||||
const char *devnode, *serial;
|
|
||||||
devnode = udev_device_get_devnode(udevice);
|
|
||||||
if (devnode != NULL) {
|
|
||||||
disk->dev = g_strdup(devnode);
|
|
||||||
disk->has_dev = true;
|
|
||||||
}
|
|
||||||
serial = udev_device_get_property_value(udevice, "ID_SERIAL");
|
|
||||||
if (serial != NULL && *serial != 0) {
|
|
||||||
disk->serial = g_strdup(serial);
|
|
||||||
disk->has_serial = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (strcmp(driver, "ata_piix") == 0) {
|
if (strcmp(driver, "ata_piix") == 0) {
|
||||||
/* a host per ide bus, target*:0:<unit>:0 */
|
/* a host per ide bus, target*:0:<unit>:0 */
|
||||||
if (!has_host || !has_tgt) {
|
if (!has_host || !has_tgt) {
|
||||||
@ -1017,10 +993,6 @@ static bool build_guest_fsinfo_for_pci_dev(char const *syspath,
|
|||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
g_free(driver);
|
g_free(driver);
|
||||||
#ifdef CONFIG_LIBUDEV
|
|
||||||
udev_unref(udev);
|
|
||||||
udev_device_unref(udevice);
|
|
||||||
#endif
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1033,18 +1005,50 @@ static void build_guest_fsinfo_for_real_device(char const *syspath,
|
|||||||
GuestPCIAddress *pciaddr;
|
GuestPCIAddress *pciaddr;
|
||||||
GuestDiskAddressList *list = NULL;
|
GuestDiskAddressList *list = NULL;
|
||||||
bool has_hwinf;
|
bool has_hwinf;
|
||||||
|
#ifdef CONFIG_LIBUDEV
|
||||||
|
struct udev *udev = NULL;
|
||||||
|
struct udev_device *udevice = NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
pciaddr = g_new0(GuestPCIAddress, 1);
|
pciaddr = g_new0(GuestPCIAddress, 1);
|
||||||
|
pciaddr->domain = -1; /* -1 means field is invalid */
|
||||||
|
pciaddr->bus = -1;
|
||||||
|
pciaddr->slot = -1;
|
||||||
|
pciaddr->function = -1;
|
||||||
|
|
||||||
disk = g_new0(GuestDiskAddress, 1);
|
disk = g_new0(GuestDiskAddress, 1);
|
||||||
disk->pci_controller = pciaddr;
|
disk->pci_controller = pciaddr;
|
||||||
|
disk->bus_type = GUEST_DISK_BUS_TYPE_UNKNOWN;
|
||||||
|
|
||||||
list = g_new0(GuestDiskAddressList, 1);
|
list = g_new0(GuestDiskAddressList, 1);
|
||||||
list->value = disk;
|
list->value = disk;
|
||||||
|
|
||||||
|
#ifdef CONFIG_LIBUDEV
|
||||||
|
udev = udev_new();
|
||||||
|
udevice = udev_device_new_from_syspath(udev, syspath);
|
||||||
|
if (udev == NULL || udevice == NULL) {
|
||||||
|
g_debug("failed to query udev");
|
||||||
|
} else {
|
||||||
|
const char *devnode, *serial;
|
||||||
|
devnode = udev_device_get_devnode(udevice);
|
||||||
|
if (devnode != NULL) {
|
||||||
|
disk->dev = g_strdup(devnode);
|
||||||
|
disk->has_dev = true;
|
||||||
|
}
|
||||||
|
serial = udev_device_get_property_value(udevice, "ID_SERIAL");
|
||||||
|
if (serial != NULL && *serial != 0) {
|
||||||
|
disk->serial = g_strdup(serial);
|
||||||
|
disk->has_serial = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
udev_unref(udev);
|
||||||
|
udev_device_unref(udevice);
|
||||||
|
#endif
|
||||||
|
|
||||||
has_hwinf = build_guest_fsinfo_for_pci_dev(syspath, disk, errp);
|
has_hwinf = build_guest_fsinfo_for_pci_dev(syspath, disk, errp);
|
||||||
|
|
||||||
if (has_hwinf) {
|
if (has_hwinf || disk->has_dev || disk->has_serial) {
|
||||||
list->next = fs->disk;
|
list->next = fs->disk;
|
||||||
fs->disk = list;
|
fs->disk = list;
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user