[libvirt] [PATCH 2/3] add pci-brige device command line for qemu

Osier Yang jyang at redhat.com
Sat Jan 5 03:01:25 UTC 2013


On 2013年01月04日 23:21, Dave Allan wrote:
> On Fri, Jan 04, 2013 at 11:38:42AM +0800, Osier Yang wrote:
>> On 2013年01月04日 10:28, li guang wrote:
>>> 在 2013-01-03四的 16:13 +0100,Ján Tomko写道:
>>>> On 12/26/12 02:00, liguang wrote:
>>>>> @@ -1801,10 +1803,13 @@ qemuBuildDeviceAddressStr(virBufferPtr buf,
>>>>>            * When QEMU grows support for>   1 PCI domain, then pci.0 change
>>>>>            * to pciNN.0  where NN is the domain number
>>>>>            */
>>>>> -        if (qemuCapsGet(caps, QEMU_CAPS_PCI_MULTIBUS))
>>>>> +        if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCIBRIDGE) {
>>>>> +            virBufferAsprintf(buf, ",bus=pci-bridge%d", info->addr.pci.bus);
>>>>> +        } else if (qemuCapsGet(caps, QEMU_CAPS_PCI_MULTIBUS)) {
>>>>>               virBufferAsprintf(buf, ",bus=pci.0");
>>>>
>>>> Is there any way (or plan) to use more pci buses with QEMU other than
>>>> with the pci bridges? If not, we could just name the bridges pci.%d. (If
>>>> we index the bridges from 1).
>>>
>>> as far as I know, qemu can't use multi-pci-bus,
>>> so only pci.0 accepted now.
>>
>> At this point, I think it's better to ask the QEMU developers to
>> be involved in next series, to make sure things are right.
>
> Regardless of what qemu does today, I don't think it's a good idea to
> hardcode this to 0 since it's not clear what will happen in the
> future.  Somebody more familiar with the specifics correct me if I'm
> off base there.

Right, again, the rule is we have to consider as much as possible to
make sure the things are capable with future. Either the XMLs or the
codes.

>
> Dave
>
>>>>
>>>>> -        else
>>>>> +        } else {
>>>>>               virBufferAsprintf(buf, ",bus=pci");
>>>>> +        }
>>>>>           if (info->addr.pci.multi == VIR_DEVICE_ADDRESS_PCI_MULTI_ON)
>>>>>               virBufferAddLit(buf, ",multifunction=on");
>>>>>           else if (info->addr.pci.multi == VIR_DEVICE_ADDRESS_PCI_MULTI_OFF)
>>>>> @@ -3455,6 +3460,32 @@ error:
>>>>>       return NULL;
>>>>>   }
>>>>
>>>>
>>>>>
>>>>> +char *
>>>>> +qemuBuildPCIbridgeDevStr(virDomainPCIbridgeDefPtr dev,
>>>>> +                         qemuCapsPtr caps, int idx)
>>>>> +{
>>>>> +    virBuffer buf = VIR_BUFFER_INITIALIZER;
>>>>> +
>>>>> +    virBufferAsprintf(&buf, "pci-bridge,chassis_nr=1");
>>>>
>>>> The chassis number has to be unique for each bridge.
>>>
>>> chassis number is not so important,
>>> here, I just set all bridges in same chassis.
>>>
>>>>
>>>>> +
>>>>> +    if ((dev->type != VIR_DOMAIN_PCIBRIDGE_TYPE_ROOT)&&
>>>>> +        (qemuBuildDeviceAddressStr(&buf,&dev->info, caps)<   0))
>>>>> +        goto error;
>>>>> +    else
>>>>> +        virBufferAsprintf(&buf, ",id=pci-bridge%d" , idx);
>>>>> +
>>>>> +    if (virBufferError(&buf)) {
>>>>> +        virReportOOMError();
>>>>> +        goto error;
>>>>> +    }
>>>>> +
>>>>> +    return virBufferContentAndReset(&buf);
>>>>> +
>>>>> +error:
>>>>> +    virBufferFreeAndReset(&buf);
>>>>> +    return NULL;
>>>>> +
>>>>> +}
>>>>
>>>
>>
>> --
>> libvir-list mailing list
>> libvir-list at redhat.com
>> https://www.redhat.com/mailman/listinfo/libvir-list




More information about the libvir-list mailing list