[SeaBIOS] [PATCH 3/3] acpi_piix4: Call KVM_SETSTATE_VCPU ioctl on cpu ejection

Vasilis Liaskovitis vasilis.liaskovitis at profitbricks.com
Fri Jan 13 12:11:32 CET 2012


Signed-off-by: Vasilis Liaskovitis <vasilis.liaskovitis at profitbricks.com>
---
 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




More information about the SeaBIOS mailing list