qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH 3/3] acpi_piix4: Call KVM_SETSTATE_VCPU ioctl on cpu


From: Vasilis Liaskovitis
Subject: [Qemu-devel] [PATCH 3/3] acpi_piix4: Call KVM_SETSTATE_VCPU ioctl on cpu ejection
Date: Fri, 13 Jan 2012 12:11:32 +0100

Signed-off-by: Vasilis Liaskovitis <address@hidden>
---
 hw/acpi_piix4.c |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/hw/acpi_piix4.c b/hw/acpi_piix4.c
index 8bf30dd..12eef55 100644
--- a/hw/acpi_piix4.c
+++ b/hw/acpi_piix4.c
@@ -502,6 +502,27 @@ static uint32_t cpuej_read(void *opaque, uint32_t addr)
 
 static void cpuej_write(void *opaque, uint32_t addr, uint32_t val)
 {
+    struct kvm_vcpu_state state;
+    CPUState *env;
+    int cpu;
+    int ret;
+
+    cpu = ffs(val);
+    /* zero means no bit was set, i.e. no CPU ejection happened */
+    if (!cpu)
+       return;
+    cpu--;
+    env = cpu_phyid_to_cpu((uint64_t)cpu);
+    if (env != NULL) {
+        if (env->state == CPU_STATE_ZAPREQ) {
+            state.vcpu_id = env->cpu_index;
+            state.state = 1;
+            ret = kvm_vm_ioctl(env->kvm_state, KVM_SETSTATE_VCPU, &state);
+            if (ret)
+                fprintf(stderr, "KVM_SETSTATE_VCPU failed: %s\n",
+                        strerror(ret));
+        }
+    }
     PIIX4_DPRINTF("cpuej write %x <== %d\n", addr, val);
 }
 
-- 
1.7.7.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]