[libvirt] ARM KVM GICv3 Support

John Ferlan jferlan at redhat.com
Tue Dec 15 17:04:16 UTC 2015



On 12/15/2015 11:53 AM, Andrea Bolognani wrote:
> On Tue, 2015-12-15 at 10:35 -0600, Andrew Jones wrote:
>> On Tue, Dec 15, 2015 at 04:03:13PM +0000, Peter Maydell wrote:
>>> On 15 December 2015 at 14:12, Martin Kletzander <mkletzan at redhat.com> wrote:
>>>> On Tue, Dec 15, 2015 at 09:41:02AM +0000, Peter Maydell wrote:
>>>>>
>>>>> On 15 December 2015 at 09:36, Martin Kletzander <mkletzan at redhat.com>
>>>>> wrote:
>>>>>>
>>>>>> We do pass some options, for example, you can restrict the GIC to v2:
>>>>>> https://libvirt.org/formatdomain.html#elementsFeatures
>>>>>>
>>>>>> That could be modified to work for your purpose IIUC, right?
>>>>>
>>>>>
>>>>> What does that option do to the QEMU command line? The documentation
>>>>> doesn't seem to say.
>>>>>
>>>>
>>>> It appends gic-version= to the machine option, if bunch of conditions
>>>> are met -- it has to be ARM machine, it has to be something else than
>>>> version 2, and so on, more details are visible in the code and I won't
>>>> cover them here.  I hope that's understandable.
>>>
>>> OK. So it should be sufficient just to have
>>>    <gic version='host'/>
>>> which will then provide whatever VGIC the host machine can do with
>>> hardware acceleration.
>>
>> This is probably good for guests that happy with both. Guests that
>> need/want a specific choice will put their integer there, and then
>> we need a way to do a capabilities check before launching that guest
>> on an arbitrary host.
> 
> That won't work at the moment since we're expecting the value to be a
> number, but extending it so that 'host' is accepted as well should be
> easy to do in a backwards-compatible way.
> 
> The behaviour of the value '2' has been defined as "don't specify any
> GIC version" though, and I'm afraid we'll be unable to change that
> because it would affect existing guests. Martin can probably weigh in.
> 
> Having a way for libvirt to know what values can be used on the specific
> machines it's running on it's another topic altogether - is there a good
> way to detect it? Is that based on the hardware, on the QEMU binary, on
> the machine type?
> 

If one digs into the qemu_command code though they would find that if
"<gic>" were supplied in the domain XML without the version='#', then we
don't generate the command line option with any "gic*" string.

qemuBuildMachineArgStr()

if (def->features[VIR_DOMAIN_FEATURE_GIC] == VIR_TRISTATE_SWITCH_ON) {
  if (def->gic_version) {
  ...
    virBufferAsprintf(&buf, ",gic-version=%d", def->gic_version);
  }
}

Perhaps the "else" to (def->gic_version) could be "gic-version=host".

Would that suffice?  or be the right thing to do?

John




More information about the libvir-list mailing list