On Tue, Mar 01, 2016 at 03:20:59PM +0100, Andrea Bolognani wrote: > On Tue, 2016-02-23 at 18:52 +0800, Peter Xu wrote: > > +{ 'enum': 'GICType', 'data': [ 'gicv2', 'gicv3', 'gicv2-kvm', 'gicv3-kvm' > > ] } > > Wouldn't this conflate the use of accel= and kernel_irqchip= options?
AFAIU, it's not a problem. Let me paste some lines from the original RFC thread which explains the definition of the entries: - gicv2: GIC version 2 without kernel IRQ chip - gicv2-kvm: GIC version 2 with kernel IRQ chip - gicv3: GIC version 3 without kernel IRQ chip (not supported) - gicv3-kvm: GIC version 3 with kernel IRQ chip (from https://lists.gnu.org/archive/html/qemu-devel/2016-02/msg02882.html) So... what I understand is that, we are not talking about "accel=" at all. Instead, we are talking about "kernel_irqchip=" only. Or say, all these GIC version information we provide from QEMU does not tell whether KVM is supported or not (for "accel=", it is provided by another QMP message named "query-kvm"). We are only talking about which kind of GIC we support. In our case, for each version, it could be supported either in userspace, or in kernel. > > IIUC, depending on the hardware, you might find yourself in the > following situation: > > accel=tcg,gic-version=3 unavailable > accel=kvm,kernel_irqchip=off,gic-version=3 unavailable As explained above, IIUC, both of these two "unavailable" ones correspond to "gicv3" entry of the results. > accel=kvm,gic-version=3 available And this one corresponds to "gicv3-kvm" entry. > > so I'd expect the output to be something like > > [ "v2": { "tcg": true, > "kvm-without-kernel-irqchip": true, > "kvm": true }, > "v3": { "tcg": false, > "kvm-without-kernel-irqchip": false, > "kvm": true } ] Actually, this reminded me about the "kernel_irqchip=split" case. Do we need to consider that one? AFAIK, splitted irqchip is only used for x86 currently. Whether ARM will possibly support splitted kernel irqchip one day just like x86? If so, I would prefer to change the query result layout from array to dict, like: [ "v2": { "emulated": true, "split": false, "kernel": true }, "v3": { "emulated": false, "split": false, "kernel": true } ] Since the matrix is big enough (2x3) to consider drop the array format (I'd admit maybe dict is always the best one...). Peter > > Since libvirt currently doesn't have support for the > kernel_irqchip= option, it would only take the "tcg" and "kvm" > values into account; on the other hand, if at some point > libvirt will grow support for that option it would be able to > retrieve all the required information. > > Cheers. > > -- > Andrea Bolognani > Software Engineer - Virtualization Team