diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c index eee44c4..0feb53f 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -1439,46 +1439,12 @@ out: return; } - -static int udevSetupSystemDev(void) +static int +udevGetDMIData(union _virNodeDevCapData *data, + struct udev_device *device) { - virNodeDeviceDefPtr def = NULL; - virNodeDeviceObjPtr dev = NULL; - struct udev *udev = NULL; - struct udev_device *device = NULL; - union _virNodeDevCapData *data = NULL; - char *tmp = NULL; int ret = -1; - if (VIR_ALLOC(def) != 0) { - virReportOOMError(); - goto out; - } - - def->name = strdup("computer"); - if (def->name == NULL) { - virReportOOMError(); - goto out; - } - - if (VIR_ALLOC(def->caps) != 0) { - virReportOOMError(); - goto out; - } - - udev = udev_monitor_get_udev(DRV_STATE_UDEV_MONITOR(driverState)); - device = udev_device_new_from_syspath(udev, DMI_DEVPATH); - if (device == NULL) { - device = udev_device_new_from_syspath(udev, DMI_DEVPATH_FALLBACK); - if (device == NULL) { - VIR_ERROR("Failed to get udev device for syspath '%s' or '%s'", - DMI_DEVPATH, DMI_DEVPATH_FALLBACK); - goto out; - } - } - - data = &def->caps->data; - if (udevGetStringSysfsAttr(device, "product_name", &data->system.product_name) == PROPERTY_ERROR) { @@ -1530,7 +1496,49 @@ static int udevSetupSystemDev(void) goto out; } - udev_device_unref(device); + ret = 0; +out: + return ret; +} + + +static int udevSetupSystemDev(void) +{ + virNodeDeviceDefPtr def = NULL; + virNodeDeviceObjPtr dev = NULL; + struct udev *udev = NULL; + struct udev_device *device = NULL; + char *tmp = NULL; + int ret = -1; + + if (VIR_ALLOC(def) != 0) { + virReportOOMError(); + goto out; + } + + def->name = strdup("computer"); + if (def->name == NULL) { + virReportOOMError(); + goto out; + } + + if (VIR_ALLOC(def->caps) != 0) { + virReportOOMError(); + goto out; + } + + udev = udev_monitor_get_udev(DRV_STATE_UDEV_MONITOR(driverState)); + device = udev_device_new_from_syspath(udev, DMI_DEVPATH); + if (device == NULL) { + device = udev_device_new_from_syspath(udev, DMI_DEVPATH_FALLBACK); + if (device == NULL) { + VIR_ERROR("Failed to get udev device for syspath '%s' or '%s'", + DMI_DEVPATH, DMI_DEVPATH_FALLBACK); + } + } else { + udevGetDMIData(&def->caps->data, device); + udev_device_unref(device); + } dev = virNodeDeviceAssignDef(&driverState->devs, def); if (dev == NULL) {