blob: a8cf9a7aa1e9df6f26ae6d4465c762aa35b371b7 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
Doing a 64 bit load from a 32 bit local APIC register is allowed
Doing
u64 lapic_idregister = (u64) fix_to_virt(FIX_APIC_BASE) + 0x20;
and later in an interrupt handler
movq (lapic_idregister), %rcx
movq (%rcx), %rcx
in a linux kernel module works in qemu 0.13.91 but not on real hardware (it simply reboots).
On real hardware only
movl (%rcx), %ecx
works (also in qemu).
Commandline:
qemu-system-x86_64 \
-kernel $LINUXDIR/arch/x86_64/boot/bzImage \
-hda $BUILDROOTDIR/output/images/rootfs.ext2 \
-append "root=/dev/sda rw rootfstype=ext2 maxcpus=4" \
-cpu phenom \
-smp 4 \
-gdb tcp::1234 \
-net nic -net user
Guest:
Vanilla Linux Kernel 2.6.37.6 64-bit with buildroot
Mikael Pettersson from the linux kernel mailinglist told me it's an accepts-invalid bug in qemu.
On Sun, Jun 12, 2011 at 4:03 PM, Robert Uhl <email address hidden> wrote:
> Public bug reported:
>
> Doing
>
> u64 lapic_idregister = (u64) fix_to_virt(FIX_APIC_BASE) + 0x20;
>
> and later in an interrupt handler
>
> movq (lapic_idregister), %rcx
> movq (%rcx), %rcx
>
> in a linux kernel module works in qemu 0.13.91 but not on real hardware (it simply reboots).
> On real hardware only
>
> movl (%rcx), %ecx
>
> works (also in qemu).
Thank you for the report. Currently QEMU devices only provide access
methods up to 32 bits, a 64 bit access is emulated with two 32 bit
accesses. So it is not possible to handle a 32 bit access differently
from a 64 bit one for now.
So far this hasn't been considered to be a problem for x86, though it
is clearly not correct for Sparc and Alpha. This report shows that it
is necessary to add 64 bit access methods (or otherwise handle 64 bit
accesses more realistically) since x86 is also affected.
Adding the 64 bit method would be a major refactoring though and there
are other designs possible.
Triaging old bug tickets ... can you somehow still reproduce this problem with the latest version of QEMU (currently v2.9), or could we close this ticket nowadays?
[Expired for QEMU because there has been no activity for 60 days.]
|