APIC unusable on QEMU

Bug #657329 reported by Geoffrey Lee
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
QEMU
Expired
Undecided
Unassigned

Bug Description

The APIC is unusable with QEMU using x86-64 system emulation. Problem exists in the latest stable QEMU 0.12.5 as well as the latest git head. I am using Mac OS X 10.6, 64-bit version of QEMU.

The QEMU binary was configured with:

 ./configure --target-list=i386-softmmu,x86_64-softmmubck-i-search: conf_

Problem is that the hw/apic.c file (as well as a few other naughty files) rely on the cpu_single_env global - which is set to NULL in cpu-exec.c.

Below is a test reading the local APIC version register:

Before taking it out:

(qemu) xp 0xfee00030
00000000fee00030: 0x00000000
(qemu)

After:

(qemu) xp 0xfee00030
00000000fee00030: 0x00050011
(qemu)

Quick fix below. I don't know if there are any side effects with this, if this is OK maybe we can fix it like this for the stable versions and fix the HEAD to not rely on the cpu_single_env global.

diff --git a/cpu-exec.c b/cpu-exec.c
index dbdfdcc..3e966d7 100644
--- a/cpu-exec.c
+++ b/cpu-exec.c
@@ -674,7 +674,17 @@ int cpu_exec(CPUState *env1)
     env = (void *) saved_env_reg;

     /* fail safe : never use cpu_single_env outside cpu_exec() */
+#warning fixup devices which rely on this
+#if 0
+ /*
+ * Hello. This is wrapped around an #if 0 ... #endif because that's
+ * what should happen. However, certain naughty devices (like the APIC
+ * for instance, and a few others), access this global variable.
+ *
+ * So this is here for now ... until we fix up those devices.
+ */
     cpu_single_env = NULL;
+#endif
     return ret;
 }

Revision history for this message
Thomas Huth (th-huth) wrote :

Looking through old bug tickets... can you still reproduce this issue with the latest version of QEMU? Or could we close this ticket nowadays?

Changed in qemu:
status: New → Incomplete
Revision history for this message
Launchpad Janitor (janitor) wrote :

[Expired for QEMU because there has been no activity for 60 days.]

Changed in qemu:
status: Incomplete → Expired
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.