virJSONValue *props;
virJSONValue *attrs;
g_autoptr(virNodeDeviceDef) child = g_new0(virNodeDeviceDef, 1);
+ g_autofree char *parent_sysfs_path = NULL;
/* the child object should have a single key equal to its uuid.
* The value is an object describing the properties of the mdev */
uuid = virJSONValueObjectGetKey(json, 0);
props = virJSONValueObjectGetValue(json, 0);
- child->parent = g_strdup(parent);
+ /* Look up id of parent device. mdevctl supports defining mdevs for parent
+ * devices that are not present on the system (to support starting mdevs on
+ * hotplug, etc) so the parent may not actually exist. */
+ parent_sysfs_path = g_strdup_printf("/sys/class/mdev_bus/%s", parent);
+ if (virFileExists(parent_sysfs_path)) {
+ g_autofree char *canon_syspath = virFileCanonicalizePath(parent_sysfs_path);
+ virNodeDeviceObj *parentobj = NULL;
+
+ if ((parentobj = virNodeDeviceObjListFindBySysfsPath(driver->devs,
+ canon_syspath))) {
+ virNodeDeviceDef *parentdef = virNodeDeviceObjGetDef(parentobj);
+ child->parent = g_strdup(parentdef->name);
+ virNodeDeviceObjEndAPI(&parentobj);
+
+ child->parent_sysfs_path = g_steal_pointer(&canon_syspath);
+ }
+ }
+ if (!child->parent)
+ child->parent = g_strdup("computer");
child->caps = g_new0(virNodeDevCapsDef, 1);
child->caps->data.type = VIR_NODE_DEV_CAP_MDEV;
<device>
<name>mdev_200f228a_c80a_4d50_bfb7_f5a0e4e34045</name>
- <parent>0000:00:02.0</parent>
+ <parent>computer</parent>
<capability type='mdev'>
<type id='i915-GVTg_V5_4'/>
<uuid>200f228a-c80a-4d50-bfb7-f5a0e4e34045</uuid>
</device>
<device>
<name>mdev_de807ffc_1923_4d5f_b6c9_b20ecebc6d4b</name>
- <parent>0000:00:02.0</parent>
+ <parent>computer</parent>
<capability type='mdev'>
<type id='i915-GVTg_V5_4'/>
<uuid>de807ffc-1923-4d5f-b6c9-b20ecebc6d4b</uuid>
</device>
<device>
<name>mdev_435722ea_5f43_468a_874f_da34f1217f13</name>
- <parent>0000:00:02.0</parent>
+ <parent>computer</parent>
<capability type='mdev'>
<type id='i915-GVTg_V5_8'/>
<uuid>435722ea-5f43-468a-874f-da34f1217f13</uuid>
</device>
<device>
<name>mdev_783e6dbb_ea0e_411f_94e2_717eaad438bf</name>
- <parent>matrix</parent>
+ <parent>computer</parent>
<capability type='mdev'>
<type id='vfio_ap-passthrough'/>
<uuid>783e6dbb-ea0e-411f-94e2-717eaad438bf</uuid>