As the parent address is part of the mdev nodedev name lets expose the
internally available parent address in the XML.
Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
---
docs/schemas/nodedev.rng | 5 +++++
src/conf/node_device_conf.c | 2 ++
tests/nodedevmdevctldata/mdevctl-list-multiple.out.xml | 5 +++++
3 files changed, 12 insertions(+)
diff --git a/docs/schemas/nodedev.rng b/docs/schemas/nodedev.rng
index e4733f0804..0d7d1168b6 100644
--- a/docs/schemas/nodedev.rng
+++ b/docs/schemas/nodedev.rng
@@ -644,6 +644,11 @@
<ref name="UUID"/>
</element>
</optional>
+ <optional>
+ <element name="parent_addr">
+ <data type="string"/>
+ </element>
+ </optional>
<zeroOrMore>
<element name="attr">
<attribute name="name"/>
diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c
index 0bac0fde8d..61c8715037 100644
--- a/src/conf/node_device_conf.c
+++ b/src/conf/node_device_conf.c
@@ -604,6 +604,8 @@ virNodeDeviceCapMdevDefFormat(virBuffer *buf,
virBufferEscapeString(buf, "<type id='%s'/>\n", data->mdev.type);
virBufferEscapeString(buf, "<uuid>%s</uuid>\n", data->mdev.uuid);
+ virBufferEscapeString(buf, "<parent_addr>%s</parent_addr>\n",
+ data->mdev.parent_addr);
virBufferAsprintf(buf, "<iommuGroup number='%u'/>\n",
data->mdev.iommuGroupNumber);
diff --git a/tests/nodedevmdevctldata/mdevctl-list-multiple.out.xml b/tests/nodedevmdevctldata/mdevctl-list-multiple.out.xml
index 4df5f4f43c..012c1a1596 100644
--- a/tests/nodedevmdevctldata/mdevctl-list-multiple.out.xml
+++ b/tests/nodedevmdevctldata/mdevctl-list-multiple.out.xml
@@ -4,6 +4,7 @@
<capability type='mdev'>
<type id='i915-GVTg_V5_4'/>
<uuid>200f228a-c80a-4d50-bfb7-f5a0e4e34045</uuid>
+ <parent_addr>0000:00:02.0</parent_addr>
<iommuGroup number='0'/>
</capability>
</device>
@@ -13,6 +14,7 @@
<capability type='mdev'>
<type id='i915-GVTg_V5_4'/>
<uuid>de807ffc-1923-4d5f-b6c9-b20ecebc6d4b</uuid>
+ <parent_addr>0000:00:02.0</parent_addr>
<iommuGroup number='0'/>
</capability>
</device>
@@ -22,6 +24,7 @@
<capability type='mdev'>
<type id='i915-GVTg_V5_8'/>
<uuid>435722ea-5f43-468a-874f-da34f1217f13</uuid>
+ <parent_addr>0000:00:02.0</parent_addr>
<iommuGroup number='0'/>
<attr name='testattr' value='42'/>
</capability>
@@ -32,6 +35,7 @@
<capability type='mdev'>
<type id='vfio_ap-passthrough'/>
<uuid>783e6dbb-ea0e-411f-94e2-717eaad438bf</uuid>
+ <parent_addr>matrix</parent_addr>
<iommuGroup number='0'/>
<attr name='assign_adapter' value='5'/>
<attr name='assign_adapter' value='6'/>
@@ -47,6 +51,7 @@
<capability type='mdev'>
<type id='vfio_ccw-io'/>
<uuid>cc000052-9b13-9b13-9b13-cc23009b1326</uuid>
+ <parent_addr>0.0.0052</parent_addr>
<iommuGroup number='0'/>
</capability>
</device>
--
2.33.1
On 2/4/22 9:32 AM, Boris Fiuczynski wrote: > As the parent address is part of the mdev nodedev name lets expose the > internally available parent address in the XML. What is the issue that you're trying to solve here? The mdev xml already has a reference to the name of the parent device. So presumably you can look up the parent nodedev by name and then find its address, no? This seems like you're duplicating parent information in the child. Is it just for convenience? Jonathon > > Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com> > --- > docs/schemas/nodedev.rng | 5 +++++ > src/conf/node_device_conf.c | 2 ++ > tests/nodedevmdevctldata/mdevctl-list-multiple.out.xml | 5 +++++ > 3 files changed, 12 insertions(+) > > diff --git a/docs/schemas/nodedev.rng b/docs/schemas/nodedev.rng > index e4733f0804..0d7d1168b6 100644 > --- a/docs/schemas/nodedev.rng > +++ b/docs/schemas/nodedev.rng > @@ -644,6 +644,11 @@ > <ref name="UUID"/> > </element> > </optional> > + <optional> > + <element name="parent_addr"> > + <data type="string"/> > + </element> > + </optional> > <zeroOrMore> > <element name="attr"> > <attribute name="name"/> > diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c > index 0bac0fde8d..61c8715037 100644 > --- a/src/conf/node_device_conf.c > +++ b/src/conf/node_device_conf.c > @@ -604,6 +604,8 @@ virNodeDeviceCapMdevDefFormat(virBuffer *buf, > > virBufferEscapeString(buf, "<type id='%s'/>\n", data->mdev.type); > virBufferEscapeString(buf, "<uuid>%s</uuid>\n", data->mdev.uuid); > + virBufferEscapeString(buf, "<parent_addr>%s</parent_addr>\n", > + data->mdev.parent_addr); > virBufferAsprintf(buf, "<iommuGroup number='%u'/>\n", > data->mdev.iommuGroupNumber); > > diff --git a/tests/nodedevmdevctldata/mdevctl-list-multiple.out.xml b/tests/nodedevmdevctldata/mdevctl-list-multiple.out.xml > index 4df5f4f43c..012c1a1596 100644 > --- a/tests/nodedevmdevctldata/mdevctl-list-multiple.out.xml > +++ b/tests/nodedevmdevctldata/mdevctl-list-multiple.out.xml > @@ -4,6 +4,7 @@ > <capability type='mdev'> > <type id='i915-GVTg_V5_4'/> > <uuid>200f228a-c80a-4d50-bfb7-f5a0e4e34045</uuid> > + <parent_addr>0000:00:02.0</parent_addr> > <iommuGroup number='0'/> > </capability> > </device> > @@ -13,6 +14,7 @@ > <capability type='mdev'> > <type id='i915-GVTg_V5_4'/> > <uuid>de807ffc-1923-4d5f-b6c9-b20ecebc6d4b</uuid> > + <parent_addr>0000:00:02.0</parent_addr> > <iommuGroup number='0'/> > </capability> > </device> > @@ -22,6 +24,7 @@ > <capability type='mdev'> > <type id='i915-GVTg_V5_8'/> > <uuid>435722ea-5f43-468a-874f-da34f1217f13</uuid> > + <parent_addr>0000:00:02.0</parent_addr> > <iommuGroup number='0'/> > <attr name='testattr' value='42'/> > </capability> > @@ -32,6 +35,7 @@ > <capability type='mdev'> > <type id='vfio_ap-passthrough'/> > <uuid>783e6dbb-ea0e-411f-94e2-717eaad438bf</uuid> > + <parent_addr>matrix</parent_addr> > <iommuGroup number='0'/> > <attr name='assign_adapter' value='5'/> > <attr name='assign_adapter' value='6'/> > @@ -47,6 +51,7 @@ > <capability type='mdev'> > <type id='vfio_ccw-io'/> > <uuid>cc000052-9b13-9b13-9b13-cc23009b1326</uuid> > + <parent_addr>0.0.0052</parent_addr> > <iommuGroup number='0'/> > </capability> > </device>
On 2/4/22 6:10 PM, Jonathon Jongsma wrote:
> On 2/4/22 9:32 AM, Boris Fiuczynski wrote:
>> As the parent address is part of the mdev nodedev name lets expose the
>> internally available parent address in the XML.
>
> What is the issue that you're trying to solve here? The mdev xml already
> has a reference to the name of the parent device. So presumably you can
> look up the parent nodedev by name and then find its address, no? This
> seems like you're duplicating parent information in the child. Is it
> just for convenience?
>
> Jonathon
>
Actually it is not convenience. It is possible that an mdev definition
exists and the parent device does not, e.g. the device driver has not
been loaded or no longer is loaded and therefore the parent device might
not/no longer exist or simply the parent device does not (for whatever
reason) exist on the system at all.
The reason to extend the mdev nodedev object names with the parent
device address was to make it unique. At the same time nodedev object
names are supposed to be treated as arbitrary strings.
It is possible to retrieve the UUID but without the parent address or by
looking at the nodedev object name and interpreting its last digits the
information is not unique enough to find the related mdevctl definition.
I guess that for correlation reasons it is stored internally on the
nodedev mdev objects.
--
Mit freundlichen Grüßen/Kind regards
Boris Fiuczynski
IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Gregor Pillen
Geschäftsführung: David Faller
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294
© 2016 - 2026 Red Hat, Inc.