[PATCH v2 0/6] hw/arm/virt: kvm: allow gicv3 by default if v2 cannot work

Eric Auger posted 6 patches 5 years, 8 months ago
Test docker-quick@centos7 failed
Test FreeBSD failed
Test docker-mingw@fedora failed
Test checkpatch failed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20200301104040.15186-1-eric.auger@redhat.com
Maintainers: Peter Maydell <peter.maydell@linaro.org>
hw/arm/virt.c         | 124 +++++++++++++++++++++++++++++++-----------
include/hw/arm/virt.h |   8 ++-
target/arm/kvm.c      |  14 +++--
target/arm/kvm_arm.h  |   3 +
4 files changed, 110 insertions(+), 39 deletions(-)
[PATCH v2 0/6] hw/arm/virt: kvm: allow gicv3 by default if v2 cannot work
Posted by Eric Auger 5 years, 8 months ago
At the moment if the end-user does not specify the gic-version along
with KVM acceleration, v2 is set by default. However most of the
systems now have GICv3 and sometimes they do not support GICv2
compatibility. In that case we now end up with the following error:

"qemu-system-aarch64: Initialization of device kvm-arm-gic failed:
error creating in-kernel VGIC: No such device
Perhaps the host CPU does not support GICv2?"

since "1904f9b5f1  hw/intc/arm_gic_kvm: Don't assume kernel can
provide a GICv2", which already allowed to output an explicit error
message.

This series keeps the default v2 selection in all cases except
in the KVM accelerated mode when v2 cannot work:
- either because the host does not support v2 in-kernel emulation or
- because more than 8 vcpus were requested.

Those cases did not work anyway so we do not break any compatibility.
Now we get v3 selected in such a case.

Best Regards

Eric

This series can be found at:
https://github.com/eauger/qemu/tree/v4.2.0-gic-version-v2

History:
RFC -> v2:
- 1904f9b5f1  hw/intc/arm_gic_kvm: Don't assume kernel can
  provide a GICv2" now has landed upstream
- Fix gic-version description
- Introduce finalize_gic_version and use switch/cases
- take into account smp value

Eric Auger (6):
  hw/arm/virt: Document 'max' value in gic-version property description
  hw/arm/virt: Use VIRT_GIC_VERSION defines
  hw/arm/virt: Introduce finalize_gic_version()
  target/arm/kvm: Let kvm_arm_vgic_probe() return a bitmap
  hw/arm/virt: kvm: Check the chosen gic version is supported by the
    host
  hw/arm/virt: kvm: allow gicv3 by default if v2 cannot work

 hw/arm/virt.c         | 124 +++++++++++++++++++++++++++++++-----------
 include/hw/arm/virt.h |   8 ++-
 target/arm/kvm.c      |  14 +++--
 target/arm/kvm_arm.h  |   3 +
 4 files changed, 110 insertions(+), 39 deletions(-)

-- 
2.20.1


Re: [PATCH v2 0/6] hw/arm/virt: kvm: allow gicv3 by default if v2 cannot work
Posted by Andrew Jones 5 years, 8 months ago
On Sun, Mar 01, 2020 at 11:40:34AM +0100, Eric Auger wrote:
> At the moment if the end-user does not specify the gic-version along
> with KVM acceleration, v2 is set by default. However most of the
> systems now have GICv3 and sometimes they do not support GICv2
> compatibility. In that case we now end up with the following error:
> 
> "qemu-system-aarch64: Initialization of device kvm-arm-gic failed:
> error creating in-kernel VGIC: No such device
> Perhaps the host CPU does not support GICv2?"
> 
> since "1904f9b5f1  hw/intc/arm_gic_kvm: Don't assume kernel can
> provide a GICv2", which already allowed to output an explicit error
> message.
> 
> This series keeps the default v2 selection in all cases except
> in the KVM accelerated mode when v2 cannot work:
> - either because the host does not support v2 in-kernel emulation or
> - because more than 8 vcpus were requested.
> 
> Those cases did not work anyway so we do not break any compatibility.
> Now we get v3 selected in such a case.
> 
> Best Regards
> 
> Eric
> 
> This series can be found at:
> https://github.com/eauger/qemu/tree/v4.2.0-gic-version-v2
> 
> History:
> RFC -> v2:
> - 1904f9b5f1  hw/intc/arm_gic_kvm: Don't assume kernel can
>   provide a GICv2" now has landed upstream
> - Fix gic-version description
> - Introduce finalize_gic_version and use switch/cases
> - take into account smp value
> 
> Eric Auger (6):
>   hw/arm/virt: Document 'max' value in gic-version property description
>   hw/arm/virt: Use VIRT_GIC_VERSION defines
>   hw/arm/virt: Introduce finalize_gic_version()
>   target/arm/kvm: Let kvm_arm_vgic_probe() return a bitmap
>   hw/arm/virt: kvm: Check the chosen gic version is supported by the
>     host
>   hw/arm/virt: kvm: allow gicv3 by default if v2 cannot work
> 
>  hw/arm/virt.c         | 124 +++++++++++++++++++++++++++++++-----------
>  include/hw/arm/virt.h |   8 ++-
>  target/arm/kvm.c      |  14 +++--
>  target/arm/kvm_arm.h  |   3 +
>  4 files changed, 110 insertions(+), 39 deletions(-)
> 
> -- 
> 2.20.1
> 
>

With Richard's enum suggestions

For the series

Reviewed-by: Andrew Jones <drjones@redhat.com>