Re: [Qemu-devel] E5-2620v2 - emulation stop error

Dr. David Alan Gilbert
2015-03-11T13:46:05Z

* Bandan Das (bsd@redhat.com) wrote:
> "Dr. David Alan Gilbert" <dgilbert@redhat.com> writes:
>
> > * Paolo Bonzini (pbonzini@redhat.com) wrote:
> >>
> >>
> >> On 10/03/2015 19:21, Bandan Das wrote:
> >> > Paolo Bonzini <pbonzini@redhat.com> writes:
> >> >
> >> >> On 10/03/2015 17:57, Dr. David Alan Gilbert wrote:
> >> >>> I'm seeing something similar; it's very intermittent and generally
> >> >>> happening right at boot of the guest; I'm running this on qemu
> >> >>> head+my postcopy world (but it's happening right at boot before postcopy
> >> >>> gets a chance), and I'm using a 3.19ish kernel. Xeon E5-2407 in my case
> >> >>> but hey maybe I'm seeing a different bug.
> >> >
> >> > Probably a tangent but is the qemu trace identical to what Andrey is seeing ?
> >> > From a cursory look and my limited understanding, it seems his failure is #GP
> >> > when executing video bios.
> >> >
> >> >> Same here on 3.16 + Xeon E5 v3 kernel.
> >> >
> >> > I will try to reproduce this on a v2.
> >>
> >> I see several failures, usually mine have suberror 1. With a 32-VCPU
> >> guest I can reproduce it roughly half of the time.
> >>
> >> Paolo
> >
> > while true; do (sleep 5; echo -e '\001cq\n')|/opt/qemu-try-world3/bin/qemu-system-x86_64 -machine pc-i440fx-2.0,accel=kvm -m 1024 -smp 128 -nographic -device sga 2>&1 | tee /tmp/qemu.op; grep "internal error" /tmp/qemu.op -q && break; done
> >
> > (and leave about 2mins of runs before declaring good)
> >
> > bad: cd2946607b42636d6c8cf6dbf94bce0273507b17
> > bad: 041ccc922ee474693a2869d4e3b59e920c739bc0
> > bad: 2559db069628981bfdc90637fac5bf1b4f4e8ef5
> > bad: 21f5826a04d38e19488f917e1eef22751490c769
> > good:e95d24ff40c77fbfd71396834a2eb99375f8bcc4
> > good: 7781a492fa5a2eff53d06b25b93f0186ad3226c9
> > good: c3edd62851098e6417786193ed9e9341781fcf57
> > good: c5c6d7f81a6950d8e32a3b5a0bafd37bfa5a8e88
> > good: 73104fd399c6778112f64fe0d439319f24508d9a
> > good: 92013cf8ca10adafec9a92deb5df993e7df22cb9
> > good: 4478aa768ccefcc5b234c23d035435fd71b932f6
> > good: 2.2.0
> >
> > [root@virtlab413 qemu-world3]# git bisect bad
> > 21f5826a04d38e19488f917e1eef22751490c769 is the first bad commit
>
> I can reproduce this on E5-2620 v2 with David's "while true" test.
> (The emulation failure I mean, not the suberror 2 that Andrey is seeing)
> The commit that seems to have introduced this is -
>
> commit 0673b7870063a3affbad9046fb6d385a4e734c19
> Author: Kevin O'Connor <kevin@koconnor.net>
> Date: Sat May 24 10:49:50 2014 -0400
>
> smp: Replace QEMU SMP init assembler code with C; run only in 32bit mode.
>
> Change the multi-processor init code to trampoline into 32bit mode on
> each of the additional processors. Implement an atomic lock so that
> each processor performs its initialization serially.
>
> I am not sure what in that change could cause this though..
> Also, in my testing, "unrestricted_guest=0" avoids the failure.

Turning on debug logging
( -chardev file,id=log,path=/tmp/debugcon.$$ -device isa-debugcon,chardev=log,iobase=0x402 )

SeaBIOS (version rel-1.8.0-0-g4c59f5d-20150219_092859-nilsson.home.kraxel.org)
No Xen hypervisor found.
Running on QEMU (i440fx)
Running on KVM
RamSize: 0x40000000 [cmos]
Relocating init from 0x000dea20 to 0x3ffaed30 (size 70160)
Found QEMU fw_cfg
RamBlock: addr 0x0000000000000000 len 0x0000000040000000 [e820]
Moving pm_base to 0x600
CPU Mhz=2112
=== PCI bus & bridge init ===
PCI: pci_bios_init_bus_rec bus = 0x0
=== PCI device probing ===
Found 6 PCI devices (max PCI bus is 00)
=== PCI new allocation pass #1 ===
PCI: check devices
=== PCI new allocation pass #2 ===
PCI: IO: c000 - c04f
PCI: 32: 0000000080000000 - 00000000fec00000
PCI: map device bdf=00:03.0 bar 1, addr 0000c000, size 00000040 [io]
PCI: map device bdf=00:01.1 bar 4, addr 0000c040, size 00000010 [io]
PCI: map device bdf=00:03.0 bar 6, addr feb80000, size 00040000 [mem]
PCI: map device bdf=00:03.0 bar 0, addr febc0000, size 00020000 [mem]
PCI: map device bdf=00:02.0 bar 6, addr febe0000, size 00010000 [mem]
PCI: map device bdf=00:02.0 bar 2, addr febf0000, size 00001000 [mem]
PCI: map device bdf=00:02.0 bar 0, addr fd000000, size 01000000 [prefmem]
PCI: init bdf=00:00.0 id=8086:1237
PCI: init bdf=00:01.0 id=8086:7000
PIIX3/PIIX4 init: elcr=00 0c
PCI: init bdf=00:01.1 id=8086:7010
PCI: init bdf=00:01.3 id=8086:7113
Using pmtimer, ioport 0x608
PCI: init bdf=00:02.0 id=1234:1111
PCI: init bdf=00:03.0 id=8086:100e
PCI: Using 00:02.0 for primary VGA
Found 1 cpu(s) max supported 128 cpu(s)
Copying PIR from 0x3ffbfc98 to 0x000f65a0
WARNING - Unable to allocate resource at copy_mptable:62!
Copying SMBIOS entry point from 0x00006db0 to 0x000f6580
Scan for VGA option rom
Running option rom at c000:0003
Start SeaVGABIOS (version rel-1.8.0-0-g4c59f5d-20150219_092912-nilsson.home.kraxel.org)
enter vga_post:
a=00000010 b=0000ffff c=00000000 d=0000ffff ds=0000 es=f000 ss=0000
si=00000000 di=00006970 bp=00000000 sp=00006d0a cs=f000 ip=d239 f=0000
VBE DISPI: bdf 00:02.0, bar 0
VBE DISPI: lfb_addr=fd000000, size 16 MB
Attempting to allocate VGA stack via pmm call to f000:d2f4
pmm call arg1=0
VGA stack allocated at ef1b0
Running option rom at c980:0003

is where it dies for me; actually with debug console on it's
pretty rare for it to boot. Is that:
'WARNING - Unable to allocate resource at copy_mptable:62!' the
canary ?

Dave

> > commit 21f5826a04d38e19488f917e1eef22751490c769
> > Author: Gerd Hoffmann <kraxel@redhat.com>
> > Date: Thu Feb 19 09:33:03 2015 +0100
> >
> > seabios: update to 1.8.0 release
> >
> > 'git shortlog 8936dbb2..4c59f5d8' for seabios repo:
> >
> > David Woodhouse (4):
> > Update EFI_COMPATIBILITY16_TABLE to match 0.98 spec update
> > build: use -m16 where available instead of asm(".code16gcc")
> > romlayout: Use .code16 not .code16gcc
> > vgabios: Use .code16 not .code16gcc
> >
> > Gerd Hoffmann (2):
> > add scripts/tarball.sh
> > build: set LC_ALL=C
> >
> > Hannes Reinecke (1):
> > megasas: read addional PCI I/O bar
> >
> > Ian Campbell (1):
> > romlayout: Use "rep ; nop" not "rep nop".
> >
> > Kevin O'Connor (139):
> > vgabios: Return from handle_1011() if handler found.
> > edd: Move EDD get drive parameters (int 1348) logic from disk.c to block.c.
> > edd: Use sectors==-1 to detect removable media.
> > edd: Separate out ATA and virtio specific parts of fill_edd().
> > cdemu: store internal cdemu fields in standard "el-torito" spec format.
> > Move cdemu call interface and disk_ret helper code to disk.c.
> > smm: Replace SMI assembler code with C code.
> > smm: Use a C struct to define the layout of the SMM area.
> > smp: Replace QEMU SMP init assembler code with C; run only in 32bit mode.
> > Don't enable thread preemption during S3 resume vga option rom execution.
> > Remove old Bochs bios fixed address string at 0xfff00.
> > Move most of the VAR16FIXED() defs to misc.c.
> > build: Avoid absolute paths during "whole-program" compiling.
> > Make sure handle_smi() and handle_smp() are compiled out if not enabled.
> > Remove the TODO file.
> > Abstract reset call (and possible 16bit mode switch) into reset() function.
> > build: Remove unused function getSectionsStart() from layoutrom.py.
> > build: Extract section visiting logic in layoutrom.py.
> > build: Refactor layoutrom.py gc() function.
> > build: Use customized entry point for each type of build.
> > build: Refactor findInit() function.
> > build: Rework getRelocs() to use a hash instead of categories in layoutrom.py
> > build: Keep segmented sections separate until final link step.
> > build: Use fileid instead of category to write sections in layoutrom.py.
> > build: Only export needed fields in LayoutInfo in layoutrom.py.
> > build: Get fixed address variables from 32bit compile pass (not 16bit)
> > build: Minor - fix comments referring to old tools/ directory.
> > xhci: Update the times for usb command timeouts.
> > ehci: Update usb command timeouts to use usb_xfer_time()
> > uhci: Update usb command timeouts to use usb_xfer_time()
> > ohci: Update usb command timeouts to use usb_xfer_time()
> > vgabios: Fix broken build resulting from e5749978.
> > boot: Change ":rom%d" boot order rom instance to ":rom%x"
> > Minor - remove stray tab from src/fw/smm.c.
> > build: Update kconfig to version in Linux 3.16.
> > usb: Fix usb_xfer_time() to work when called in 16bit mode.
> > xhci: Call usb_desc2pipe() on xhci_update_pipe().
> > xhci: Remove 16bit code wrappers.
> > xhci: Use high memory instead of low memory for internal storage.
> > xhci: Move root hub and setup code to top of file.
> > xhci: Add xhci_check_ports() and xhci_free_pipes() functions.
> > ehci: Move port power up from ehci_hub_detect() to check_ehci_ports().
> > usb-hub: Enable power to all ports prior to calling usb_enumerate().
> > xhci: Change xhci_hub_detect() to use connect status instead of link state.
> > uhci: Repeatedly poll for device detect for 100ms.
> > ohci: Repeatedly poll for device detect for 100ms.
> > ehci: Stall uhci/ohci init only until default port routing is done.
> > usb: Perform device detect polling on all usb controllers.
> > ehci: Fix bug in hub port assignment
> > Revert "Use the extra stack for 16bit USB and PS2 keyboard/mouse commands."
> > pmm: Fix entry point to support non-zero %ss
> > Move stack hop code below call32/call16 code in stacks.c
> > Add need_hop_back() call that determines if stack_hop_back is needed
> > Update invoke_mouse_handler() to use need_hop_back()
> > Update stack_hop_back() to jump to 16bit mode if called in 32bit mode.
> > Track when entering via call32() and use the same mode for stack_hop_back()
> > Simplify farcall16 code
> > Update reset() to use call16_back()
> > build: Support declaring 32bit C functions that must reside in the f-segment
> > Move call16() functions from romlayout.S to inline assembler in stacks.c
> > Break up call32() into call32() and call32_sloppy()
> > Fully restore 16bit state during call16_sloppy()
> > Implement call32 mechanism using SMIs.
> > Move a20 code from system.c and ps2port.h to x86.h
> > Backup and restore a20 on call32_sloppy()
> > usb: Rename ?hci_control() to ?hci_send_control()
> > usb: Rename usb_getFrameExp() to usb_get_period()
> > usb: Rename findEndPointDesc() to usb_find_desc()
> > usb: Rename send_default_control() to usb_send_default_control()
> > usb: Rename free_pipe() to usb_free_pipe()
> > usb: Clarify usb freelist manipulations
> > xhci: Change xhci_update_pipe() to xhci_realloc_pipe() and use for alloc too
> > uhci: Export uhci_realloc_pipe() instead of uhci_alloc_pipe()
> > ohci: Export ohci_realloc_pipe() instead of ohci_alloc_pipe()
> > ehci: Export ehci_realloc_pipe() instead of ehci_alloc_pipe()
> > usb: Use usb_realloc_pipe for pipe alloc, update, and free.
> > Use 32bit memcpy in int1587 when applicable
> > Don't clobber %ax on ENTRY_INTO32 macro
> > Create assembler macros for saving and restoring 'struct bregs'
> > Do full BREGS backup/restore for pmm, pnp, and irqentry_extrastack
> > Remove unused macro ENTRY_ST
> > vgabios: Don't declare custom internal BDA storage in std/bda.h
> > vgabios: Cache a pointer to the current mode struct in the BDA
> > vgabios: Don't pass vmode_g to vgafb_move_chars() / vgafb_clear_chars()
> > vgabios: Rename vbe_flags to flags
> > vgabios: Set cursor shape fixes
> > vgabios: Refactor get/set_cursor_shape() code
> > vgabios: Only init BDA device details in init_bios_area()
> > vgabios: Only set the dcc_index=8 if stdvga ports are available
> > vgabios: Move standard table definitions to std/vga.h
> > vgabios: Fill in available legacy modes in video_func_static at runtime
> > vgabios: Add support for reading framebuffer in "direct" mode
> > Fix PNP regression introduced in 99cb8f3e due to missed conversion
> > Minor - move PORT_PS2_CTRLB from hw/ps2port.h to hw/timer.c
> > vgabios: Support emulating text mode attributes while in graphics mode
> > vgabios: Add software cursor capability
> > Use an aligned stack offset when entering on the extra stack
> > Minor - comment updates in romlayout.S
> > Fix build issue on gcc34
> > pciinit: Fix build warning in mch_pci_slot_get_irq()
> > floppy: Make sure to yield() during floppy PIO
> > Minor - be consistent in placement of .code16/32 in romlayout.S
> > Use macros for .code16/32 mode switches in inline asm in stacks.c
> > Eliminate FUNCFSEG - only force portions of inline asm to f-segment
> > usb: Update USB hub code to support super speed hubs
> > Simplify README files - point to online documentation instead
> > sdcard: Initial support for SD cards on PCI SDHCI controllers on QEMU
> > Add wiki documentation to repository
> > docs: Don't point to repo README files
> > docs: Add info on MODE16/MODESEGMENT compile time flags
> > docs: Add page describing SeaBIOS final object linking
> > scsi: Move cdb_* functions above scsi_* functions
> > scsi: Move process_scsi_op() to hw/blockcmd.c and rename
> > cdrom: call scsi_process_op() instead of cdb_read()
> > scsi: Don't export cdb_* functions
> > cdrom: Break up very large read requests into smaller requests
> > block: Check for read/write requests over 64K
> > usb: Add support for OHCI bulk transfers
> > readserial: Enhance pipe support
> > docs: Add documentation on using readserial.py script
> > uhci: Enable "depth" tree traversal for bulk transfers
> > uhci: Increase bulk transfer STACKTDS to 16
> > vgabios: Support emulated text in gfx_read_char()
> > ehci: No need to support td array wrapping
> > ehci: Simplify fillTDbuffer() and rename
> > ehci: Merge ehci_send_control with ehci_send_bulk
> > ohci: Merge ohci_send_control with ohci_send_bulk
> > uhci: Merge uhci_send_control with uhci_send_bulk
> > xhci: Merge xhci_send_control with xhci_send_bulk
> > usb: Use usb_send_pipe() now that all drivers have x_send_pipe()
> > xhci: Move xhci_xfer_x() functions together
> > xhci: Merge some xhci_xfer_x() functions into xhci_send_pipe()
> > usb: Control transfers always have an 8 byte command size
> > usb: Minor - properly free memory on get_device_config() error path
> > checkstack: Handle callw instruction
> > docs: Document why v1.6.3 release came after v0.6.2
> > docs: Update release history with dates of stable releases
> > docs: There is only one VAR16 flag now
> > docs: Note v1.8.0 release
> >
> > Marcel Apfelbaum (1):
> > hw/pci: reserve IO and mem for pci express downstream ports with no devices attached
> >
> > Markus Armbruster (1):
> > boot: Fix boot order for SCSI target, lun > 9
> >
> > Paolo Bonzini (5):
> > piix: add and use dev-piix.h
> > smm: complete SMM setup
> > smm: unify SMM handlers
> > vgabios: fix graphics operation with Bochs VGA in non-DISPI modes
> > vgabios: implement read char in graphics mode
> >
> > zhanghailiang (1):
> > acpi: use specified macro instead of magic-number
> >
> > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> >
> >
> >
> > --
> > Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK