Hello! > So to me it is sensible to instantiate GICV2 through legacy > KVM_CREATE_IRQCHIP API if both KVM_CREATE_DEVICE(test mode=true) failed.
I disagree because at this point we already know which GIC version the user wants. This is because kvm_irqchip_create() is called after machine instance is created (and virt_instance_init() has been called). At this point we already know all the options. At this point i think the scenario should be: a) If we want GICv3 - test for KVM_CREATE_DEVICE(GICv3) and fail if we don't have one. b) If we want GICv2 - test for KVM_CREATE_DEVICE(GICv2). If it fails, try KVM_CREATE_IRQCHIP. IMHO there is little sense to fall back from v3 to v2 or vice versa because other important parameters (like number of CPUs) depend on it. Implementing this behavior costs only one more integer in MachineState structure. Is it too large ? If you want, i can post my patches as RFC, i think now they are more or less OK. Kind regards, Pavel Fedin Expert Engineer Samsung Electronics Research center Russia