A question about GIC which qemu simulated

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



There is a doubt about qemu !

At present, when the host kernel (kvm) didn't configure CONFIG_KVM_ARM_VGIC,
qemu load guest kernel(without CONFIG_ARCH_TIMER configuration) will be failure,
and print:
   "KVM Cortex-A15 without in-kernel VGIC is not a
    valid configuration. Check that:
     * you have passed -machine kernel_irqchip=on to QEMU
     * your host kernel was built with CONFIG_KVM_ARM_VGIC
     * the device tree passed to your host kernel has a "
       valid node for the GIC"

In my opinion, loading guest kernel using GIC by qemu's simulating
must be successful . (I remeber that the host kernel of brach v5
didn't simulate VGIC in kvm. At that
time, we loaded the guest kernel using GIC which qemu simulated).

So I think the logic should be like this :
  case A: When the host kernel didn't configure CONFIG_KVM_ARM_VGIC:
          1.Of course, CONFIG_KVM_ARM_TIMER was not configured too, that is,
            the guest kernel loading don't support ARCH_TIMER(cp15
virtual timer). If
            the guest kernel configured ARCH_TIMER, loading kernel
will be failure,
            oppositely, loading kernel will be success using GIC which
qemu simulated.

  case B: When the host kernel configured CONFIG_KVM_ARM_VGIC(here, you
             can configure CONFIG_KVM_ARM_TIMER or not):
          1. when the host kernel configured CONFIG_KVM_ARM_TIMER
             Whether the guest kernel configured ARCH_TIMER or not
,loading kernel
             will be success.
          2. when the host kernel didn't configure CONFIG_KVM_ARM_TIMER
             If the guest kernel configured ARCH_TIMER ,loading kernel
will be failure,
             oppositely, loading kernel will be success using VGIC which KVM
             simulated.

Code changed as follow:
diff --git a/hw/a15mpcore.c b/hw/a15mpcore.c
index 828e625..97dafc6 100644
--- a/hw/a15mpcore.c
+++ b/hw/a15mpcore.c
@@ -43,24 +43,10 @@ static int a15mp_priv_init(SysBusDevice *dev)
     A15MPPrivState *s = FROM_SYSBUS(A15MPPrivState, dev);
     SysBusDevice *busdev;

-    if (kvm_enabled()) {
-        if (!kvm_irqchip_in_kernel()) {
-            /* KVM A15 which doesn't use the in-kernel VGIC is not
-             * a supported combination, because using the cp15 timers
-             * requires use of the VGIC, and there is no way to hide
-             * the cp15 timers from a guest.
-             */
-            fprintf(stderr, "KVM Cortex-A15 without in-kernel VGIC is not a "
-                    "valid configuration. Check that:\n"
-                    " * you have passed -machine kernel_irqchip=on to QEMU\n"
-                    " * your host kernel was built with CONFIG_KVM_ARM_VGIC\n"
-                    " * the device tree passed to your host kernel has a "
-                    "valid node for the GIC\n");
-            abort();
-        }
-        s->gic = qdev_create(NULL, "kvm-arm_gic");
-    } else {
-        s->gic = qdev_create(NULL, "arm_gic");
+    if (!kvm_irqchip_in_kernel()){
+          s->gic = qdev_create(NULL, "arm_gic");
+    }else{
+          s->gic = qdev_create(NULL, "kvm-arm_gic");

I do not know whether this changes is correct...
_______________________________________________
kvmarm mailing list
kvmarm@xxxxxxxxxxxxxxxxxxxxx
https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm


[Index of Archives]     [Linux KVM]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux