Use int32 types instead of target_ulong when computing ICC. This
simplifies the generated code for 32-bit host and 64-bit guest.
Use the same simplified expressions for ICC as were already used
for XCC in carry flag generation.
Simplify the ADD carry generation to not consider a possible carry-in.
Use the more complex carry computation for ADDX only. Use the same
carry algorithm for the XCC result of ADDX. Similarly for SUB/SUBX.
Use the ADD carry generation functions for TADD/TADDTV. Similarly
for SUB and TSUB/TSUBTV.
Stefan Weil [Sun, 11 Apr 2010 16:44:18 +0000 (18:44 +0200)]
Fix cross compilation
This patch enhances the algorithm which finds the correct settings for SDL.
For cross compilations (when cross_prefix is set), it looks for sdl-config
with cross prefix. Here is the complete search order:
$(cross_prefix}pkg-config (old, only used for cross compilation)
${cross_prefix}sdl_config (new, only used for cross compilation)
pkg-config (old, needs PATH)
sdl-config (old, needs PATH)
Cross SDL packages (or the user) now can simply set a link (for example
/usr/bin/i586-mingw32msvc-sdl-config -> /usr/i586-mingw32msvc/bin/sdl-config)
which allows cross compilations without PATH modifications.
Without the patch, configure and make (which calls configure) typically
need a non-standard PATH. Failing to set this special PATH results in
broken builds.
Alexander Graf [Fri, 14 May 2010 14:14:31 +0000 (16:14 +0200)]
target-s390: enable SIGP Initial Reset
For SMP to work with KVM, we need to properly emulate the SIGP Initial Reset
Command. Recent (2.6.32) kernels issue that before the SIGP Reset command that
actually wakes up the vcpu.
Alexander Graf [Tue, 20 Apr 2010 17:37:13 +0000 (19:37 +0200)]
target-s390: add firmware code
This patch adds a firmware blob to the S390 target. The blob is a simple
implementation of a virtio client that tries to read the second stage
bootloader from sectors described as of offset 0x20 in the MBR.
In combination with an updated zipl this allows for booting from virtio
block devices. This firmware is built from the same sources as the second
stage bootloader. You can find a virtio capable s390-tools in this repo:
Alexander Graf [Sun, 18 Apr 2010 21:10:17 +0000 (23:10 +0200)]
PPC/KVM: make iothread work
When running with --enable-io-thread the timer we have doesn't help,
because it doesn't wake up the CPU thread. So instead we need to
actually kick it.
While at it I refined the logic a bit to not dumbly trigger a timer
every 500ms, but rather do it more often after an interrupt got injected.
If there's no level based interrupt to be expected, we don't need the
timer anyways.
This makes qemu-system-ppc with --enable-io-thread work when using KVM.
If the user wants to create a chardev of type socket but forgets to give a
host= option, qemu_opt_get returns NULL. This NULL pointer is then fed into
strlen a few lines below without a check which results in a segfault.
This fixes it.
linux-user: rlimit conversion between host and target.
rlim_t conversion between host and target added.
Otherwise there are some incorrect case like
- RLIM_INFINITY on 32bit target -> 64bit host.
- RLIM_INFINITY on 64bit host -> mips and sparc target ?
- Big value(for 32bit target) on 64bit host -> 32bit target.
One is added into getrlimit, setrlimit, and ugetrlimit. It converts both
RLIM_INFINITY and value bigger than target can hold(>31bit) to RLIM_INFINITY.
Another one is added to guest_stack_size calculation introduced by 703e0e89. The rule is mostly same except the result on the case is keeping
the value of guest_stack_size.
Slightly tested for SH4, and x86_64 -linux-user on x86_64-pc-linux host.
Kevin Wolf [Wed, 12 May 2010 12:03:02 +0000 (14:03 +0200)]
block: Remove special case for vvfat
The special case doesn't really us buy anything. Without it vvfat works more
consistently as a protocol. We get raw on top of vvfat now, which works just
as well as using vvfat directly.
Stefan Weil [Wed, 12 May 2010 18:25:45 +0000 (20:25 +0200)]
block/vdi: Fix image opening and creation for odd disk sizes
The fix is based on a patch from Kevin Wolf. Here his comment:
"The number of blocks needs to be rounded up to cover all of the virtual hard
disk. Without this fix, we can't even open our own images if their size is not
a multiple of the block size."
While Kevin's patch addressed vdi_create, my modification also fixes
vdi_open which now accepts images with odd disk sizes.
v3:
Don't allow reading of disk images with too large disk sizes.
Neither VBoxManage nor old versions of qemu-img read such images.
This change requires rounding of odd disk sizes before we do the checks.
Use bdrv_pwrite to access the backing device instead of pread, and
convert the driver to implementing the bdrv_open method which gives
it an already opened BlockDriverState for the underlying device.
Dmg actually does an lseek to a negative offset in the open routine,
which we replace with offset arithmetics after doing a bdrv_getlength.
Use pread instead of lseek + read in preparation of using the qemu
block API. Note that dmg actually uses the implicit file offset
a lot in dmg_open, and we had to replace it with an offset variable.
When dmg_read_chunk encounters an uncompressed chunk it currently
calls read without any previous adjustment of the file postion.
This seems very wrong, and the "reference" implementation in
dmg2img does a search to the same offset as done in the various
compression cases, so do the same here.
Use bdrv_pwrite to access the backing device instead of pread, and
convert the driver to implementing the bdrv_open method which gives
it an already opened BlockDriverState for the underlying device.
Kevin Wolf [Thu, 6 May 2010 14:34:56 +0000 (16:34 +0200)]
block: Fix bdrv_commit
When reopening the image, don't guess the driver, but use the same driver as
was used before. This is important if the format=... option was used for that
image.
Use bdrv_pwrite to access the backing device instead of pread, and
convert the driver to implementing the bdrv_open method which gives
it an already opened BlockDriverState for the underlying device.
Kevin Wolf [Tue, 4 May 2010 14:35:24 +0000 (16:35 +0200)]
ide: Fix ide_dma_cancel
When cancelling a request, bdrv_aio_cancel may decide that it waits for
completion of a request rather than for cancellation. IDE therefore can't
abandon its DMA status before calling bdrv_aio_cancel; otherwise the callback
of a completed request would use invalid data.
Use bdrv_pwrite to access the backing device instead of pread, and
convert the driver to implementing the bdrv_open method which gives
it an already opened BlockDriverState for the underlying device.
Ryota Ozaki [Sun, 2 May 2010 21:50:25 +0000 (06:50 +0900)]
qemu-nbd: Improve error reporting
- use err(3) instead of errx(3) if errno is available
to report why failed
- let fail prior to daemon(3) if opening a nbd file
is likely to fail after daemonizing to avoid silent
failure exit
- add missing 'ret = 1' when unix_socket_outgoing failed
Isaku Yamahata [Fri, 14 May 2010 07:29:09 +0000 (16:29 +0900)]
pc: make pc_init1() not refer ferr_irq directly.
By introducing a registering function, make pc_init1() not refer to
ferr_irq directly in order to make ferr_irq piix independent.
Later pc_init1() will be split out into another file keeping ferr_irq
static.
Isaku Yamahata [Fri, 14 May 2010 07:29:08 +0000 (16:29 +0900)]
pc: introduce a function to allocate cpu irq.
Introduce a function, pc_allocate_cpu_irq(), to allocate cpu irq
in order to make pic_irq_request() piix independent.
Later piix code will be split out to another file keeping pic_irq_request()
static.
Isaku Yamahata [Fri, 14 May 2010 07:29:03 +0000 (16:29 +0900)]
pc: initialize ioapic before use.
The changeset of 2c8d9340203c7f19265fd4cb2341f568217a3af6
prevents isa_irq_handler() from NULL refering of IsaIrqState::ioapic.
However it would be better to initialize the member before reference.
Jan Kiszka [Sat, 15 May 2010 11:32:41 +0000 (13:32 +0200)]
serial: Register vmstate via qdev
At least for isa-serial, we can already let qdev do the vmstate
registration for us. It just takes wrapping vmstate for the
encapsulating ISASerialState and defining the proper instance ID
aliases.
Jan Kiszka [Sat, 15 May 2010 11:32:40 +0000 (13:32 +0200)]
vmstate: Add support for alias ID
Some legacy users (mostly PC devices) of vmstate_register manage
instance IDs on their own, and that unfortunately in a way that is
incompatible with automatically generated ones. This so far prevents
switching those users to vmstates that are registered by qdev.
To establish a migration path, this patch introduces the concept of
alias IDs. They can be passed to an extended vmstate registration
service, and qdev provides a set service to be used during device init.
find_se will consider the alias in addition to the default ID. We can
then start generating the default ID automatically and writing it on
vmsave, thus converting that format without breaking support for upward
migration.
The user is required specify the highest vmstate version for which the
alias is required. Once this version falls behind the minimum required
for a specific vmstate, an assertion triggers to motivate cleaning up
the obsolete alias.
In linux kernel v2.6.33, sm501 frame buffer driver modified to support
2D graphics engine on sm501 chip. One example is "fill rectangle" operation.
But current qemu's sm501 emulation doesn't support it. This results in
graphics console disturbance.
This patch introduces sm501 2D graphics engine emulation and solve this problem.
Add SM501 2D hardware engine support.
- Add 2D engine register set read/write handlers.
- Support 'fill rectangle'. Other operations are left for future work.
- Update SM501 support status comment.
Anthony Liguori [Tue, 11 May 2010 12:56:30 +0000 (07:56 -0500)]
Update SeaBIOS
- 7d09d0e Fix virtio compile errors on various gcc versions.
- 89acfa3 Support for booting from virtio disks
- 6d66316 smbios: avoid counting io hole as ram
- e5cd945 Fix error causing USB HID "boot" protocol to not be enabled.
- 0e88576 Add support for USB mice.
- dd5a8a6 When USB keyboard active, don't send keyboard commands to ps2 port.
- 5718d56 Document usb-hid.c functions.
- e438b0c Further parallelize init when using CONFIG_THREAD_OPTIONROMS.
- f59b5ac Handle unknown function addresses in tools/checkstack.py.
- 9ba1dea Simplify build by manually resolving external symbols in layoutrom.py.
- 698d3f9 USB EHCI should yield() whil waiting for controller to ack reset.
- f9a774c Add __attribute__((__malloc__)) declaration to internal malloc funcs.
- b7045ce Minor - remove redundant check from ata_try_dma.
- 67f6d37 Fix possible unitialized variable issue in usb msc.
- a7eb8fc Some improvements to optionrom preemption support.
- d28b0fe Refactor USB hub code.
- ba28541 Prep version for next release.
- 12bffd5 Update version to 0.6.0.
- 87ab2fb Improve USB EHCI timing.
- d705e5a Disable inlining on old compilers.
- bca0736 Force use of indirect function calls in inline assembler.
- d7eb27e Don't move EBDA while an optionrom is running (CONFIG_THREAD_OPTIONROMS).
- 7415270 Call to int1552 (from int1346) should set regs->dl.
- 9dc243e Adjust debug levels of device discovery.
- d9c9361 Default CONFIG_COREBOOT_FLASH on; make depend on CONFIG_COREBOOT.
- c35e1e5 Restore segment limits in handle_1589 code.
- 11cc662 Extend time for rtc to be ready.
- 4ed378a Backup and restore registers when calling out to user funcs.
- 68c5139 Enable irqs in kbd/clock calls that caller might "spin" on.
- f628244 Process event on ps2 keyboard irq even if event already read.
- a5d8458 Revert "Unify ps2 port data processing."
- b9ed5e2 Handle variable length return of ps2 port GETID command.
- 67a9eec Prevent ps2 irqs from messing up ps2 init.
- 6704cf9 Revert "Rework disabling of ps2 port irqs."
- 808939c Fix smp cpu detect on gcc 4.5.
- a979c1c Improvements to tools/checkstack.py.
- 190cc62 Add USB EHCI controller support.
- 0770d67 Some USB UHCI and OHCI fixes and cleanups.
- bfe7ca7 Minor - USB OHCI interrupt queue should be one larger.
- 09e2f7c Reduce size of USB 'struct uhci_td'.
- 406fad6 Dynamically allocate USB controller structures.
- 4547eb9 Replace USB encoded 'u32 endp' scheme with explicit struct fields.
- 8ebcac0 Further parallelize USB init by launching a thread per usb port.
- e908665 Introduce simple "mutex" locking code.
- 3b79f8b Only compile usb-hub.c and paravirt.c with 32bit code.
- 357bdfa Prefer passing a USB "pipe" structure over a USB endp encoding.
- 7fb8ba8 Add a generic "internal error" warning function.
Stefan Weil [Wed, 12 May 2010 18:34:39 +0000 (20:34 +0200)]
target-sparc: Fix wrong printf argument
cpu_get_ccr() returns a target_ulong, so a type cast is needed to avoid
wrong output on big endian hosts. We could also use TARGET_FMT_lx,
but that would print 8 instead of 2 digits.
Code for saving irq_state got vm_state
macros wrong, passing in the wrong parameter.
As a result, we both saved a wrong value
and restored it to a wrong offset.
This leads to device and bus irq counts getting
out of sync, which in turn leads to interrupts getting lost or
never cleared, such as
https://bugzilla.redhat.com/show_bug.cgi?id=588133
Alex Williamson [Tue, 11 May 2010 10:44:21 +0000 (06:44 -0400)]
pci: cleanly backout of pci_qdev_init()
If the init function of a device fails, as might happen with device
assignment, we never undo the work done by do_pci_register_device().
This not only causes a bit of a memory leak, but also leaves a bogus
pointer in the bus devices array that can cause a segfault or
garbage data from 'info pci'.
On AMD some bits from 1.EDX are reported in 80000001.EDX. The mask used
to copy bits from 1.EDX to 80000001.EDX is incorrect resulting in
unsupported features passed into a guest.
Gleb Natapov [Mon, 10 May 2010 08:21:34 +0000 (11:21 +0300)]
Do not stop VM if emulation failed in userspace.
Continue vcpu execution in case emulation failure happened while vcpu
was in userspace. In this case #UD will be injected into the guest
allowing guest OS to kill offending process and continue.