[libvirt] [PATCH 01/15] schema: make pci slot and function optional

Laine Stump laine at laine.org
Wed Mar 30 13:57:59 UTC 2016


On 03/30/2016 05:05 AM, Michal Privoznik wrote:
> On 24.03.2016 20:25, Laine Stump wrote:
>> The pcie-switch-downstream-port and pcie-root-port controllers have
>> only a single slot, numbered 0, and the greate majority of all guest
> s/greate/great/
>
>> PCI devices are plugged into function 0 of whatever slot they're
>> using. The parser makes these optional, setting them to 0 when not
>> specified, and it's logical for the schema to also make them optional.
>> ---
>>   docs/schemas/basictypes.rng | 16 ++++++++++------
>>   1 file changed, 10 insertions(+), 6 deletions(-)
>>
>> diff --git a/docs/schemas/basictypes.rng b/docs/schemas/basictypes.rng
>> index a83063a..084d403 100644
>> --- a/docs/schemas/basictypes.rng
>> +++ b/docs/schemas/basictypes.rng
>> @@ -75,12 +75,16 @@
>>       <attribute name="bus">
>>         <ref name="pciBus"/>
>>       </attribute>
>> -    <attribute name="slot">
>> -      <ref name="pciSlot"/>
>> -    </attribute>
>> -    <attribute name="function">
>> -      <ref name="pciFunc"/>
>> -    </attribute>
>> +    <optional>
>> +      <attribute name="slot">
>> +        <ref name="pciSlot"/>
>> +      </attribute>
>> +    </optional>
>> +    <optional>
>> +      <attribute name="function">
>> +        <ref name="pciFunc"/>
>> +      </attribute>
>> +    </optional>
>>       <optional>
>>         <attribute name="multifunction">
>>           <ref name="virOnOff"/>
>>
> Well, looking into our PCI address parser, all of the attributes are
> optional, even domain and bus.

Right. It's only virsh's validation against the schema that causes problems.

>   None of my guests have non-zero domain
> actually ;-).

Yep. I'm not sure why we waste so much imaginary ink formatting all 
those "domain='0x0000'" attributes, especially since there isn't even a 
way to specify a non-0 domain for the guest-side PCI address of a 
device. The only thing we (or qemu) support it for is the *host* side 
PCI address of devices that are being assigned with vfio or legacy KVM 
device assignment.

Of course it's always possible that it may be supported in the future, 
but even if that happens, "0" seems like a pretty safe default that 
could be omitted from the stored/displayed config.

>   Your call whether to loosen schema even more or stick with
> your approach.

I had done it that way initially (made bus optional as well), then 
backed off but I don't remember why now. I guess because I couldn't 
think of a valid reason why someone would need to specify slot or 
function but leave out bus (and slot 0 of bus 0 is reserved, so can't be 
used. And Cole used a different method of allowing plain "<address 
type='pci'/>" in his series to force PCI addresses for devices that may 
otherwise use virtio-mmio (although he may want to do it by simply 
making bus optional as you suggest).




More information about the libvir-list mailing list