On Thu, 1 May 2008 16:13:31 -0300
Marcelo Tosatti <[EMAIL PROTECTED]> wrote:

> The code sequence is:
> 
>     8235:       66                      data16
>     8236:       0f 22 c0                mov    %eax,%cr0
>     8239:       ea 3e 02 00 08 b8 00    ljmp   $0xb8,$0x800023e
> 
> So it switches to realmode and then does a ljmp. Problem is that you're
> using the segment selector as a GDT index, but in realmode it should be
> shifted left by 4 to determine the segment base address. Following patch
> makes Plan9 happy.
> 
> Other than that, load_segment_descriptor() can return a positive error
> on failure, should do a proper check.
> 
> Index: kvm/arch/x86/kvm/x86_emulate.c
> ===================================================================
> --- kvm.orig/arch/x86/kvm/x86_emulate.c
> +++ kvm/arch/x86/kvm/x86_emulate.c
> @@ -1755,7 +1755,10 @@ special_insn:
>                       goto cannot_emulate;
>               }
>               sel = insn_fetch(u16, 2, c->eip);
> -             if (load_segment_descriptor(ctxt->vcpu, sel, 9, VCPU_SREG_CS) < 
> 0) {
> +             if (ctxt->mode == X86EMUL_MODE_REAL) 
> +                     eip |= (sel << 4);
> +             else if (load_segment_descriptor(ctxt->vcpu, sel, 9,
> +                                              VCPU_SREG_CS) < 0) {
>                       DPRINTF("jmp far: Failed to load CS descriptor\n");
>                       goto cannot_emulate;
>               }
> 

Thank you Marcelo for the report. Unfortunately it is not the same
problem I'm seeing. The problem I have now is that I can boot until the
gfxboot screen but when I choose to install openSuse it generates a
kernel panic like this:

[EMAIL PROTECTED]/local/kvm-userspace.git/bin]$ ./qemu-system-x86_64 
-hda ~/disk_images/hd_50G.qcow2 -cdrom 
/images_iso/openSUSE-10.3-GM-x86_64-mini.iso -boot d -s -m 1024 -serial stdio
Linux version 2.6.22.5-31-default ([EMAIL PROTECTED]) (gcc version 4.2.1 (SUSE 
Linux)) #1 SMP 2007/09/21 22:29:00 UTC
Command line: BOOT_IMAGE=linux initrd=initrd,08000600.spl splash=silent 
vga=0x314 install=slp:/ console=ttyS0
BIOS-provided physical RAM map:
 BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
 BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)
 BIOS-e820: 00000000000e8000 - 0000000000100000 (reserved)
 BIOS-e820: 0000000000100000 - 000000003fff0000 (usable)
 BIOS-e820: 000000003fff0000 - 0000000040000000 (ACPI data)
 BIOS-e820: 00000000fffbd000 - 0000000100000000 (reserved)
end_pfn_map = 1048576
DMI 2.4 present.
ACPI: RSDP 000FB450, 0014 (r0 QEMU  )
ACPI: RSDT 3FFF0000, 002C (r1 QEMU   QEMURSDT        1 QEMU        1)
ACPI: FACP 3FFF002C, 0074 (r1 QEMU   QEMUFACP        1 QEMU        1)
ACPI: DSDT 3FFF0100, 2464 (r1   BXPC   BXDSDT        1 INTL 20061109)
ACPI: FACS 3FFF00C0, 0040
ACPI: APIC 3FFF2568, 00E0 (r1 QEMU   QEMUAPIC        1 QEMU        1)
No NUMA configuration found
Faking a node at 0000000000000000-000000003fff0000
Bootmem setup node 0 0000000000000000-000000003fff0000
No mptable found.
Zone PFN ranges:
  DMA             0 ->     4096
  DMA32        4096 ->  1048576
  Normal    1048576 ->  1048576
early_node_map[2] active PFN ranges
    0:        0 ->      159
    0:      256 ->   262128
ACPI: PM-Timer IO Port: 0xb008
ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled)
Processor #0 (Bootup-CPU)
ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] disabled)
ACPI: LAPIC (acpi_id[0x02] lapic_id[0x02] disabled)
ACPI: LAPIC (acpi_id[0x03] lapic_id[0x03] disabled)
ACPI: LAPIC (acpi_id[0x04] lapic_id[0x04] disabled)
ACPI: LAPIC (acpi_id[0x05] lapic_id[0x05] disabled)
ACPI: LAPIC (acpi_id[0x06] lapic_id[0x06] disabled)
ACPI: LAPIC (acpi_id[0x07] lapic_id[0x07] disabled)
ACPI: LAPIC (acpi_id[0x08] lapic_id[0x08] disabled)
ACPI: LAPIC (acpi_id[0x09] lapic_id[0x09] disabled)
ACPI: LAPIC (acpi_id[0x0a] lapic_id[0x0a] disabled)
ACPI: LAPIC (acpi_id[0x0b] lapic_id[0x0b] disabled)
ACPI: LAPIC (acpi_id[0x0c] lapic_id[0x0c] disabled)
ACPI: LAPIC (acpi_id[0x0d] lapic_id[0x0d] disabled)
ACPI: LAPIC (acpi_id[0x0e] lapic_id[0x0e] disabled)
ACPI: LAPIC (acpi_id[0x0f] lapic_id[0x0f] disabled)
ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0])
IOAPIC[0]: apic_id 1, address 0xfec00000, GSI 0-23
ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)
ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)
ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)
Setting APIC routing to flat
Using ACPI (MADT) for SMP configuration information
swsusp: Registered nosave memory region: 000000000009f000 - 00000000000a0000
swsusp: Registered nosave memory region: 00000000000a0000 - 00000000000e8000
swsusp: Registered nosave memory region: 00000000000e8000 - 0000000000100000
Allocating PCI resources starting at 50000000 (gap: 40000000:bffbd000)
SMP: Allowing 16 CPUs, 15 hotplug CPUs
PERCPU: Allocating 50296 bytes of per cpu data
Built 1 zonelists.  Total pages: 257180
Kernel command line: BOOT_IMAGE=linux initrd=initrd,08000600.spl splash=silent 
vga=0x314 install=slp:/ console=ttyS0
bootsplash: silent mode.
Initializing CPU#0
PID hash table entries: 4096 (order: 12, 32768 bytes)
time.c: Detected 3002.939 MHz processor.
Console: colour dummy device 80x25
Checking aperture...
Memory: 1012688k/1048512k available (2050k kernel code, 35436k reserved, 1017k 
data, 316k init)
Calibrating delay using timer specific routine.. 6034.80 BogoMIPS (lpj=12069613)
Security Framework v1.0.0 initialized
Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes)
Inode-cache hash table entries: 65536 (order: 7, 524288 bytes)
Mount-cache hash table entries: 256
CPU: L1 I cache: 32K, L1 D cache: 32K
CPU: L2 cache: 2048K
CPU 0/0 -> Node 0
invalid opcode: 0000 [1] SMP
last sysfs file:
CPU 0
Modules linked in:
Pid: 0, comm: swapper Not tainted 2.6.22.5-31-default #1
RIP: 0010:[<ffffffff80283be4>]  [<ffffffff80283be4>] kmem_cache_zalloc+0x8d/0xad
RSP: 0018:ffffffff805c7f18  EFLAGS: 00010046
RAX: 000000000000000a RBX: 0000000000000046 RCX: 0000000000000000
RDX: ffff8100015dfa40 RSI: 0000000000000001 RDI: ffff81003ffd33d8
RBP: 00000000000000d0 R08: 0000000000000000 R09: ffffffff804b6870
R10: 0000000000000000 R11: 0000000000000000 R12: ffff8100015d2080
R13: ffffffff805cf298 R14: ffffffff805c9000 R15: ffffffff804673bd
FS:  0000000000000000(0000) GS:ffffffff804ff000(0000) knlGS:0000000000000000
CS:  0010 DS: 0018 ES: 0018 CR0: 000000008005003b
CR2: 0000000000000000 CR3: 0000000000201000 CR4: 00000000000006e0
Process swapper (pid: 0, threadinfo ffffffff805c6000, task ffffffff804b6870)
Stack:  0000000000000282 ffffffff804009a5 ffffffff80200000 ffffffff80210e10
 0000000000000000 ffffffff802f3841 0000000000000000 0000000000000282
 0000000000000000 0000000000000000 ffffffffffffffff ffffffff805f2700
Call Trace:
 [<ffffffff804009a5>] _etext+0x0/0x1cf65b
 [<ffffffff80210e10>] alternatives_smp_module_add+0x77/0x149
 [<ffffffff802f3841>] __bitmap_weight+0x39/0x80
 [<ffffffff805d607e>] alternative_instructions+0xdf/0xea
 [<ffffffff805d076c>] start_kernel+0x2c0/0x2db
 [<ffffffff805d0148>] _sinittext+0x148/0x14c


Code: 0f 0d 0a 48 85 d2 74 10 41 8b 8c 24 0c 04 00 00 31 c0 48 89
RIP  [<ffffffff80283be4>] kmem_cache_zalloc+0x8d/0xad
 RSP <ffffffff805c7f18>
Kernel panic - not syncing: Attempted to kill the idle task!
....................  


Anyway your remark about the usage of the segment selector in real mode
or not is true and I added your patch in my series of patches. I will
also make proper check with return value of load_segment_descriptor().

Best regards,
Guillaume

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
kvm-devel mailing list
kvm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-devel

Reply via email to