sdk/emulator/qemu.git
14 years agoRemove uses of ram.last_offset (aka last_ram_offset)
Alex Williamson [Fri, 25 Jun 2010 17:08:38 +0000 (11:08 -0600)]
Remove uses of ram.last_offset (aka last_ram_offset)

We currently need this either to allocate the next ram_addr_t for a
new block, or for total memory to be migrated.  Both of which we can
calculate without need of this to keep us in a contiguous address space.

Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
14 years agomake rtc alatm work
Gleb Natapov [Mon, 5 Jul 2010 08:36:34 +0000 (11:36 +0300)]
make rtc alatm work

Convert alarm time from BCD if needed before comparing with current
time.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
14 years agoscsi: Fix SCSI bus reset
Jan Kiszka [Tue, 6 Jul 2010 08:58:03 +0000 (10:58 +0200)]
scsi: Fix SCSI bus reset

When the controller raises the SCSI reset line, we have to perform the
requested reset on all disks attached to the controller's bus. Moreover,
reset is edge triggered, so avoid repeating it if the line was already
high.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
14 years agoFix io-thread build breakage of a88790a14f
Jan Kiszka [Tue, 6 Jul 2010 08:49:57 +0000 (10:49 +0200)]
Fix io-thread build breakage of a88790a14f

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
14 years agoInclude sys/mman.h before qemu-options.h
Jes Sorensen [Tue, 6 Jul 2010 08:50:27 +0000 (10:50 +0200)]
Include sys/mman.h before qemu-options.h

The result of parsing qemu-options.def depends on whehter or not
MAP_POPULATE is defined, so make sure to include sys/mman.h before
including qemu-options.h.

Reported by Frank Arnold.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
14 years agoMerge remote branch 'kwolf/for-anthony' into staging
Anthony Liguori [Tue, 6 Jul 2010 13:31:43 +0000 (08:31 -0500)]
Merge remote branch 'kwolf/for-anthony' into staging

14 years agoMerge remote branch 'qmp/for-anthony' into staging
Anthony Liguori [Tue, 6 Jul 2010 13:31:17 +0000 (08:31 -0500)]
Merge remote branch 'qmp/for-anthony' into staging

14 years agocris: Avoid debug clobbering for both I & D MMU state.
Edgar E. Iglesias [Mon, 5 Jul 2010 09:39:04 +0000 (11:39 +0200)]
cris: Avoid debug clobbering for both I & D MMU state.

Signed-off-by: Edgar E. Iglesias <edgar.iglesias@axis.com>
14 years agocris: Dont clobber the MMU state across calls to cpu_get_phys_page_debug.
Edgar E. Iglesias [Mon, 5 Jul 2010 08:24:56 +0000 (10:24 +0200)]
cris: Dont clobber the MMU state across calls to cpu_get_phys_page_debug.

Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
14 years agocris: Break out rand LFSR update into a separate func.
Edgar E. Iglesias [Mon, 5 Jul 2010 08:15:10 +0000 (10:15 +0200)]
cris: Break out rand LFSR update into a separate func.

Signed-off-by: Edgar E. Iglesias <edgar.iglesias@axis.com>
14 years agopiix4: compile only once
Blue Swirl [Sat, 3 Jul 2010 06:49:47 +0000 (06:49 +0000)]
piix4: compile only once

Compile piix4 in hwlib. Two compilations less for the full build.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
14 years agoremove exec-all.h inclusion from cpu.h
Paolo Bonzini [Tue, 29 Jun 2010 07:58:51 +0000 (09:58 +0200)]
remove exec-all.h inclusion from cpu.h

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
14 years agomove cpu_pc_from_tb to target-*/exec.h
Paolo Bonzini [Tue, 29 Jun 2010 07:58:50 +0000 (09:58 +0200)]
move cpu_pc_from_tb to target-*/exec.h

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
14 years agoremove unused stuff from */exec.h
Paolo Bonzini [Tue, 29 Jun 2010 07:58:49 +0000 (09:58 +0200)]
remove unused stuff from */exec.h

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
14 years agoblock: Handle multiwrite errors only when all requests have completed
Kevin Wolf [Thu, 1 Jul 2010 14:08:51 +0000 (16:08 +0200)]
block: Handle multiwrite errors only when all requests have completed

Don't try to be clever by freeing all temporary data and calling all callbacks
when the return value (an error) is certain. Doing so has at least two
important problems:

* The temporary data that is freed (qiov, possibly zero buffer) is still used
  by the requests that have not yet completed.
* Calling the callbacks for all requests in the multiwrite means for the caller
  that it may free buffers etc. which are still in use.

Just remember the error value and do the cleanup when all requests have
completed.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoblock: Fix early failure in multiwrite
Kevin Wolf [Fri, 2 Jul 2010 12:01:21 +0000 (14:01 +0200)]
block: Fix early failure in multiwrite

bdrv_aio_writev may call the callback immediately (and it will commonly do so
in error cases). Current code doesn't consider this. For details see the
comment added by this patch.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoqemu-img: avoid calling exit(1) to release resources properly
MORITA Kazutaka [Sun, 20 Jun 2010 19:26:35 +0000 (04:26 +0900)]
qemu-img: avoid calling exit(1) to release resources properly

This patch removes exit(1) from error(), and properly releases
resources such as a block driver and an allocated memory.

For testing the Sheepdog block driver with qemu-iotests, it is
necessary to call bdrv_delete() before the program exits.  Because the
driver releases the lock of VM images in the close handler.

Signed-off-by: MORITA Kazutaka <morita.kazutaka@lab.ntt.co.jp>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agopc: Fix CMOS info for drives defined with -device
Markus Armbruster [Thu, 24 Jun 2010 17:58:20 +0000 (19:58 +0200)]
pc: Fix CMOS info for drives defined with -device

Drives defined with -drive if=ide get get created along with the IDE
controller, inside machine->init().  That's before cmos_init().
Drives defined with -device get created during generic device init.
That's after cmos_init().  Because of that, CMOS has no information on
them (type, geometry, translation).  Older versions of Windows such as
XP reportedly choke on that.

Split off the part of CMOS initialization that needs to know about
-device devices, and turn it into a reset handler, so it runs after
device creation.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoide: Make PIIX and ISA IDE init functions return the qdev
Markus Armbruster [Thu, 24 Jun 2010 17:59:29 +0000 (19:59 +0200)]
ide: Make PIIX and ISA IDE init functions return the qdev

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoblock: Fix virtual media change for if=none
Markus Armbruster [Fri, 25 Jun 2010 11:42:14 +0000 (13:42 +0200)]
block: Fix virtual media change for if=none

BlockDriverState member removable controls whether virtual media
change (monitor commands change, eject) is allowed.  It is set when
the "type hint" is BDRV_TYPE_CDROM or BDRV_TYPE_FLOPPY.

The type hint is only set by drive_init().  It sets BDRV_TYPE_FLOPPY
for if=floppy.  It sets BDRV_TYPE_CDROM for media=cdrom and if=ide,
scsi, xen, or none.

if=ide and if=scsi work, because the type hint makes it a CD-ROM.
if=xen likewise, I think.

For the same reason, if=none works when it's used by ide-drive or
scsi-disk.  For other guest devices, there are problems:

* fdc: you can't change virtual media

    $ qemu [...] -drive if=none,id=foo,... -global isa-fdc.driveA=foo
    QEMU 0.12.50 monitor - type 'help' for more information
    (qemu) eject foo
    Device 'foo' is not removable

  unless you add media=cdrom, but that makes it readonly.

* virtio: if you add media=cdrom, you can change virtual media.  If
  you eject, the guest gets I/O errors.  If you change, the guest sees
  the drive's contents suddenly change.

* scsi-generic: if you add media=cdrom, you can change virtual media.
  I didn't test what that does to the guest or the physical device,
  but it can't be pretty.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoblock: Clean up bdrv_snapshots()
Markus Armbruster [Thu, 1 Jul 2010 07:30:38 +0000 (09:30 +0200)]
block: Clean up bdrv_snapshots()

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agosavevm: Survive hot-unplug of snapshot device
Markus Armbruster [Fri, 25 Jun 2010 08:33:39 +0000 (10:33 +0200)]
savevm: Survive hot-unplug of snapshot device

savevm.c keeps a pointer to the snapshot block device.  If you manage
to get that device deleted, the pointer dangles, and the next snapshot
operation will crash & burn.  Unplugging a guest device that uses it
does the trick:

    $ MALLOC_PERTURB_=234 qemu-system-x86_64 [...]
    QEMU 0.12.50 monitor - type 'help' for more information
    (qemu) info snapshots
    No available block device supports snapshots
    (qemu) drive_add auto if=none,file=tmp.qcow2
    OK
    (qemu) device_add usb-storage,id=foo,drive=none1
    (qemu) info snapshots
    Snapshot devices: none1
    Snapshot list (from none1):
    ID        TAG                 VM SIZE                DATE       VM CLOCK
    (qemu) device_del foo
    (qemu) info snapshots
    Snapshot devices:
    Segmentation fault (core dumped)

Move management of that pointer to block.c, and zap it when the device
it points becomes unusable.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoblkdebug: Initialize state as 1
Kevin Wolf [Wed, 30 Jun 2010 15:43:40 +0000 (17:43 +0200)]
blkdebug: Initialize state as 1

state = 0 in rules means that the rule is valid for any state. Therefore it's
impossible to have a rule that works only in the initial state. This changes
the initial state from 0 to 1 to make this possible.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoblkdebug: Free QemuOpts after having read the config
Kevin Wolf [Wed, 30 Jun 2010 15:42:23 +0000 (17:42 +0200)]
blkdebug: Free QemuOpts after having read the config

Forgetting to free them means that the next instance inherits all rules and
gets its own rules only additionally.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoblkdebug: Fix set_state_opts definition
Kevin Wolf [Wed, 30 Jun 2010 15:40:42 +0000 (17:40 +0200)]
blkdebug: Fix set_state_opts definition

The list head was initialized to point to the wrong list, so all actions ended
up being handled as inject-error even if they were set-state in fact.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoqemu-option: New qemu_opts_reset()
Markus Armbruster [Tue, 1 Jun 2010 08:47:34 +0000 (10:47 +0200)]
qemu-option: New qemu_opts_reset()

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoblock: Catch attempt to attach multiple devices to a blockdev
Markus Armbruster [Tue, 29 Jun 2010 14:58:30 +0000 (16:58 +0200)]
block: Catch attempt to attach multiple devices to a blockdev

For instance, -device scsi-disk,drive=foo -device scsi-disk,drive=foo
happily creates two SCSI disks connected to the same block device.
It's all downhill from there.

Device usb-storage deliberately attaches twice to the same blockdev,
which fails with the fix in place.  Detach before the second attach
there.

Also catch attempt to delete while a guest device model is attached.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoblockdev: drive_get_by_id() is no longer used, remove
Markus Armbruster [Wed, 5 May 2010 16:46:17 +0000 (18:46 +0200)]
blockdev: drive_get_by_id() is no longer used, remove

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoqdev: Decouple qdev_prop_drive from DriveInfo
Markus Armbruster [Wed, 5 May 2010 14:36:52 +0000 (16:36 +0200)]
qdev: Decouple qdev_prop_drive from DriveInfo

Make the property point to BlockDriverState, cutting out the DriveInfo
middleman.  This prepares the ground for block devices that don't have
a DriveInfo.

Currently all user-defined ones have a DriveInfo, because the only way
to define one is -drive & friends (they go through drive_init()).
DriveInfo is closely tied to -drive, and like -drive, it mixes
information about host and guest part of the block device.  I'm
working towards a new way to define block devices, with clean
host/guest separation, and I need to get DriveInfo out of the way for
that.

Fortunately, the device models are perfectly happy with
BlockDriverState, except for two places: ide_drive_initfn() and
scsi_disk_initfn() need to check the DriveInfo for a serial number set
with legacy -drive serial=...  Use drive_get_by_blockdev() there.

Device model code should now use DriveInfo only when explicitly
dealing with drives defined the old way, i.e. without -device.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoblockdev: Clean up automatic drive deletion
Markus Armbruster [Fri, 25 Jun 2010 06:09:10 +0000 (08:09 +0200)]
blockdev: Clean up automatic drive deletion

We automatically delete blockdev host parts on unplug of the guest
device.  Too much magic, but we can't change that now.

The delete happens early in the guest device teardown, before the
connection to the host part is severed.  Thus, the guest part's
pointer to the host part dangles for a brief time.  No actual harm
comes from this, but we'll catch such dangling pointers a few commits
down the road.  Clean up the dangling pointers by delaying the
automatic deletion until the guest part's pointer is gone.

Device usb-storage deliberately makes two qdev properties refer to the
same drive, because it automatically creates a second device.  Again,
too much magic we can't change now.  Multiple references worked okay
before, but now free_drive() dies for the second one.  Zap the extra
reference.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoblockdev: New drive_get_by_blockdev()
Markus Armbruster [Thu, 24 Jun 2010 15:25:32 +0000 (17:25 +0200)]
blockdev: New drive_get_by_blockdev()

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoDon't reset bs->is_temporary in bdrv_open_common
Ryan Harper [Mon, 28 Jun 2010 14:38:33 +0000 (09:38 -0500)]
Don't reset bs->is_temporary in bdrv_open_common

To fix https://bugs.launchpad.net/qemu/+bug/597402 where qemu fails to
call unlink() on temporary snapshots due to bs->is_temporary getting clobbered
in bdrv_open_common() after being set in bdrv_open() which calls the former.

We don't need to initialize bs->is_temporary in bdrv_open_common().

Signed-off-by: Ryan Harper <ryanh@us.ibm.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoblockdev: Remove drive_get_serial()
Markus Armbruster [Fri, 25 Jun 2010 16:53:23 +0000 (18:53 +0200)]
blockdev: Remove drive_get_serial()

Unused since commit 6ced55a5.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoide: Make it explicit that ide_create_drive() can't fail
Markus Armbruster [Fri, 25 Jun 2010 16:53:22 +0000 (18:53 +0200)]
ide: Make it explicit that ide_create_drive() can't fail

All callers of ide_create_drive() ignore its value.  Currently
harmless, because it fails only when qdev_init() fails, which fails
only when ide_drive_initfn() fails, which never fails.

Brittle.  Change it to die instead of silently ignoring failure.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoscsi: scsi_bus_legacy_handle_cmdline() can fail, fix callers
Markus Armbruster [Fri, 25 Jun 2010 16:53:21 +0000 (18:53 +0200)]
scsi: scsi_bus_legacy_handle_cmdline() can fail, fix callers

None of its callers checks for failure.  scsi_hot_add() can crash
because of that:

(qemu) drive_add 4 if=scsi,format=host_device,file=/dev/sg1
scsi-generic: scsi generic interface too old
Segmentation fault (core dumped)

Fix all callers, not just scsi_hot_add().

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoblock: allow filenames with colons again for host devices
Christoph Hellwig [Wed, 23 Jun 2010 10:25:17 +0000 (12:25 +0200)]
block: allow filenames with colons again for host devices

Before the raw/file split we used to allow filenames with colons for host
device only.  While this was more by accident than by design people rely
on it, so we need to bring it back.

So move the host device probing to be before the protocol detection
again.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoqcow2: Fix error handling during metadata preallocation
Kevin Wolf [Tue, 22 Jun 2010 14:59:46 +0000 (16:59 +0200)]
qcow2: Fix error handling during metadata preallocation

People were wondering why qemu-img check failed after they tried to preallocate
a large qcow2 file and ran out of disk space.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
14 years agoDon't declare XSAVE as supported
Andi Kleen [Sat, 26 Jun 2010 20:54:21 +0000 (22:54 +0200)]
Don't declare XSAVE as supported

i386 cpuid.c currently claims XSAVE is supported in the CPUID filter,
but that's not true: Only FXSAVE is supported. Remove that bit
from the filter.

Signed-off-by: Andi Kleen <ak@linux.intel.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agoAdd more boundary checking to sse3/4 parsing
Andi Kleen [Sat, 26 Jun 2010 22:06:11 +0000 (00:06 +0200)]
Add more boundary checking to sse3/4 parsing

ssse3 uses tables with only two entries per op, but it is indexed
with b1 which can contain variables upto 3. This happens when ssse3
or sse4 are used with REP* prefixes.

Add boundary checking for this case.

Signed-off-by: Andi Kleen <ak@linux.intel.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agotarget-arm : fix parallel saturated subtraction implementation
Chih-Min Chao [Mon, 28 Jun 2010 15:54:06 +0000 (23:54 +0800)]
target-arm : fix parallel saturated subtraction implementation

Signed-off-by: Chih-Min Chao <cmchao@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agotarget-arm : fix thumb2 parallel add/sub opcode decoding
Chih-Min Chao [Mon, 28 Jun 2010 15:54:05 +0000 (23:54 +0800)]
target-arm : fix thumb2 parallel add/sub opcode decoding

Signed-off-by: Chih-Min Chao <cmchao@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agotarget-arm: fix addsub/subadd implementation
Chih-Min Chao [Mon, 28 Jun 2010 15:54:04 +0000 (23:54 +0800)]
target-arm: fix addsub/subadd implementation

Signed-off-by: Chih-Min Chao <cmchao@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agoMakefile: add qemu-options.def to distclean
Hidetoshi Seto [Thu, 1 Jul 2010 03:32:32 +0000 (12:32 +0900)]
Makefile: add qemu-options.def to distclean

Remove generated qemu-options.def at "make distclean".

Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agoAdd QMP/qmp-commands.txt to .gitignore
Hidetoshi Seto [Thu, 1 Jul 2010 03:30:23 +0000 (12:30 +0900)]
Add QMP/qmp-commands.txt to .gitignore

QMP/qmp-commands.txt is a generated file.

Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agotarget-i386: fix xchg rax,r8
Richard Henderson [Thu, 1 Jul 2010 16:42:21 +0000 (09:42 -0700)]
target-i386: fix xchg rax,r8

We were ignoring REX_B while special-casing NOP, i.e. xchg eax,eax.

Signed-off-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agotarget-mips: add Loongson support prefetch
Aurelien Jarno [Thu, 1 Jul 2010 21:43:34 +0000 (23:43 +0200)]
target-mips: add Loongson support prefetch

Loongson CPU uses a load to zero register for prefetch.
Emulate it as a NOP.

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agomonitor: Allow to exclude commands from QMP
Jan Kiszka [Mon, 28 Jun 2010 16:27:47 +0000 (18:27 +0200)]
monitor: Allow to exclude commands from QMP

Ported commands that are marked 'user_only' will not be considered for
QMP monitor sessions. This allows to implement new commands that do not
(yet) provide a sufficiently stable interface for QMP use.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agoQMP: handle_qmp_command(): Small cleanup
Luiz Capitulino [Thu, 24 Jun 2010 20:58:20 +0000 (17:58 -0300)]
QMP: handle_qmp_command(): Small cleanup

Drop a unneeded label and QDECREF() call.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agoQMP: Drop old input object checking
Luiz Capitulino [Mon, 31 May 2010 20:32:50 +0000 (17:32 -0300)]
QMP: Drop old input object checking

Previous commit added qmp_check_input_obj(), it does all the
checking we need.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agoQMP: Introduce qmp_check_input_obj()
Luiz Capitulino [Mon, 31 May 2010 20:28:01 +0000 (17:28 -0300)]
QMP: Introduce qmp_check_input_obj()

This is similar to qmp_check_client_args(), but it checks if
the input object follows the specification (QMP/qmp-spec.txt
section 2.3).

As we're limited to three keys, the work here is quite simple:
we iterate over the input object, checking each time if the
current argument complies to the specification.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agoQError: Introduce QERR_QMP_EXTRA_MEMBER
Luiz Capitulino [Tue, 1 Jun 2010 19:15:23 +0000 (16:15 -0300)]
QError: Introduce QERR_QMP_EXTRA_MEMBER

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agoQMP: Drop old client argument checker
Luiz Capitulino [Fri, 28 May 2010 20:24:49 +0000 (17:24 -0300)]
QMP: Drop old client argument checker

Previous two commits added qmp_check_client_args(), which
fully replaces this code and is way better.

It's important to note that the new checker doesn't support
the '/' arg type. As we don't have any of those handlers
converted to QMP, this is just dead code.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agoQMP: New argument checker (second part)
Luiz Capitulino [Tue, 22 Jun 2010 14:44:05 +0000 (11:44 -0300)]
QMP: New argument checker (second part)

This commit introduces the second (and last) part of QMP's new
argument checker.

The job is done by check_client_args_type(), it iterates over
the client's argument qdict and for for each argument it checks
if it exists and if its type is valid.

It's important to observe the following changes from the existing
argument checker:

  - If the handler accepts an O-type argument, unknown arguments
    are passed down to it. It's up to O-type handlers to validate
    their arguments

  - Boolean types (eg. 'b' and '-') don't accept integers anymore,
    only json-bool

  - Argument types '/' and '.' are currently unsupported under QMP,
    thus they're not handled

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agoQMP: New argument checker (first part)
Luiz Capitulino [Wed, 26 May 2010 19:13:09 +0000 (16:13 -0300)]
QMP: New argument checker (first part)

Current QMP's argument checker is more complex than it should be
and has (at least) one serious bug: it ignores unknown arguments.

To solve both problems we introduce a new argument checker. It's
added on top of the existing one, so that there are no regressions
during the transition.

This commit introduces the first part of the new checker, which
is run by qmp_check_client_args() and does the following:

  1. Check if all mandatory arguments were provided
  2. Set flags for argument validation

In order to do that, we transform the args_type string (from
qemu-montor.hx) into a qdict and iterate over it.

Next commit adds the new checker's second part: type checking and
invalid argument detection.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agoMonitor: handle optional '-' arg as a bool
Luiz Capitulino [Fri, 28 May 2010 18:25:24 +0000 (15:25 -0300)]
Monitor: handle optional '-' arg as a bool

Historically, user monitor arguments beginning with '-' (eg. '-f')
were passed as integers down to handlers.

I've maintained this behavior in the new monitor because we didn't
have a boolean type at the very beginning of QMP. Today we have it
and this behavior is causing trouble to QMP's argument checker.

This commit fixes the problem by doing the following changes:

1. User Monitor

   Before: the optional arg was represented as a QInt, we'd pass 1
           down to handlers if the user specified the argument or
           0 otherwise

   This commit: the optional arg is represented as a QBool, we pass
                true down to handlers if the user specified the
                argument, otherwise _nothing_ is passed

2. QMP

   Before: the client was required to pass the arg as QBool, but we'd
           convert it to QInt internally. If the argument wasn't passed,
           we'd pass 0 down

   This commit: still require a QBool, but doesn't do any conversion and
                doesn't pass any default value

3. Convert existing handlers (do_eject()/do_migrate()) to the new way

   Before: Both handlers would expect a QInt value, either 0 or 1

   This commit: Change the handlers to accept a QBool, they handle the
                following cases:

                   A) true is passed: the option is enabled
                   B) false is passed: the option is disabled
                   C) nothing is passed: option not specified, use
                                         default behavior

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agoQDict: Introduce qdict_get_try_bool()
Luiz Capitulino [Mon, 7 Jun 2010 20:25:04 +0000 (17:25 -0300)]
QDict: Introduce qdict_get_try_bool()

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agocheck-qdict: Introduce test for the new iteration API
Luiz Capitulino [Mon, 7 Jun 2010 18:29:58 +0000 (15:29 -0300)]
check-qdict: Introduce test for the new iteration API

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agoQDict: Introduce new iteration API
Luiz Capitulino [Mon, 7 Jun 2010 19:07:29 +0000 (16:07 -0300)]
QDict: Introduce new iteration API

It's composed of functions qdict_first() and qdict_next(), plus
functions to access QDictEntry values.

This API was suggested by Markus Armbruster <armbru@redhat.com> and
it offers full control over the iteration process.

The usage is simple, the following example prints all keys in 'qdict'
(it's hopefully better than any English description):

   QDict *qdict;
   const QDictEntry *ent;

   [...]

   for (ent = qdict_first(qdict); ent; ent = qdict_next(qdict, ent)) {
        printf("%s ", qdict_entry_key(ent));
    }

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agoQDict: Introduce functions to retrieve QDictEntry values
Luiz Capitulino [Mon, 7 Jun 2010 19:53:51 +0000 (16:53 -0300)]
QDict: Introduce functions to retrieve QDictEntry values

Next commit will introduce a new QDict iteration API which
returns QDictEntry entries, but we don't want users to directly
access its members since QDictEntry should be private to QDict.

In the near future this kind of data type will be turned into a
forward reference.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agoQDict: Small terminology change
Luiz Capitulino [Mon, 7 Jun 2010 18:45:22 +0000 (15:45 -0300)]
QDict: Small terminology change

Let's call a 'hash' only what is returned by our hash function,
anything else is a 'bucket'.

This helps avoiding confusion with regard to how we traverse
our table.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agoQDict: Rename 'err_value'
Luiz Capitulino [Fri, 4 Jun 2010 22:20:54 +0000 (19:20 -0300)]
QDict: Rename 'err_value'

A missing key is not an error.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agoQError: Enhance QERR_DEVICE_NOT_ACTIVE's user desc
Luiz Capitulino [Wed, 23 Jun 2010 15:37:47 +0000 (12:37 -0300)]
QError: Enhance QERR_DEVICE_NOT_ACTIVE's user desc

The 'by the guest' part is misleading, it could be disabled by
the host too.

We will likely need more surgery if we care for the distinction,
just dropping the problematic part is good enough for now.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agoQMP: Fix error reporting in the async API
Luiz Capitulino [Tue, 22 Jun 2010 22:10:46 +0000 (19:10 -0300)]
QMP: Fix error reporting in the async API

The current asynchronous command API doesn't return a QMP response
when the async command fails.

This is easy to reproduce with the balloon command (the sole async
command we have so far): run qemu w/o the '-balloon virtio' option
and try to issue the balloon command via QMP: no response will be
sent to the client.

This commit fixes the problem by making qmp_async_cmd_handler()
return the handler's error code and then calling
monitor_protocol_emitter() if the handler has returned an error.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agonet: delete QemuOpts when net_client_init() fails.
Yoshiaki Tamura [Mon, 21 Jun 2010 01:41:36 +0000 (10:41 +0900)]
net: delete QemuOpts when net_client_init() fails.

This fixes the following scenario using QMP.

First, put a bogus argument "foo" to "type", which results in an error.
{"execute": "netdev_add", "arguments": { "type": "foo", "id": "netdev1" } }
Then, call it again with correct argument "user".
{"execute": "netdev_add", "arguments": { "type": "user", "id": "netdev1" } }
This results in "DuplicatedId" error.

Because the first command was invalid, it should be able to reuse the
same "id", and the second command should work.

Reported-by: Luiz Capitulino <lcapitulino@redhat.com>
Signed-off-by: Yoshiaki Tamura <tamura.yoshiaki@lab.ntt.co.jp>
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agoQMP: Fix python helper /wrt long return strings
Jan Kiszka [Tue, 15 Jun 2010 22:38:46 +0000 (00:38 +0200)]
QMP: Fix python helper /wrt long return strings

Remove the arbitrary limitation of 1024 characters per return string and
read complete lines instead. Required for device_show.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agoQMP: Teach basic capability negotiation to python example
Jan Kiszka [Tue, 15 Jun 2010 22:38:45 +0000 (00:38 +0200)]
QMP: Teach basic capability negotiation to python example

As sending "qmp_capabilities" on session start became mandatory, both
python examples were broken.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agomonitor: Establish cmd flags and convert the async tag
Jan Kiszka [Tue, 15 Jun 2010 22:38:39 +0000 (00:38 +0200)]
monitor: Establish cmd flags and convert the async tag

As we want to add more flags to monitor commands, convert the only so
far existing one accordingly.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agomonitor: Fix command completion vs. boolean switches
Jan Kiszka [Tue, 15 Jun 2010 22:38:34 +0000 (00:38 +0200)]
monitor: Fix command completion vs. boolean switches

We now have to move forward to the next argument type via next_arg_type.
This patch fixes completion for 'eject' and maybe also other commands.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agomonitor: Fix leakage during completion processing
Jan Kiszka [Tue, 15 Jun 2010 22:38:33 +0000 (00:38 +0200)]
monitor: Fix leakage during completion processing

Given too many arguments or an invalid command, we were leaking the
duplicated argument strings.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
14 years agotarget-mips: split load and store
Aurelien Jarno [Thu, 1 Jul 2010 05:47:00 +0000 (07:47 +0200)]
target-mips: split load and store

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agoqdev-properties: Fix (u)intXX parsers
Kevin Wolf [Fri, 18 Jun 2010 16:27:03 +0000 (18:27 +0200)]
qdev-properties: Fix (u)intXX parsers

scanf calls must not use PRI constants, they have probably the wrong size and
corrupt memory. We could replace them by SCN ones, but strtol is simpler than
scanf here anyway. While at it, also fix the parsers to reject garbage after
the number ("4096xyz" was accepted before).

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Richard Henderson <rth@redhat.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agoReturn usb device to host on exit
Shahar Havivi [Wed, 16 Jun 2010 12:16:11 +0000 (15:16 +0300)]
Return usb device to host on exit

Signed-off-by: Shahar Havivi <shaharh@redhat.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agoReturn usb device to host on usb_del command
Shahar Havivi [Wed, 16 Jun 2010 12:15:37 +0000 (15:15 +0300)]
Return usb device to host on usb_del command

Signed-off-by: Shahar Havivi <shaharh@redhat.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agonet: Fix VM start with '-net none'
Amit Shah [Tue, 15 Jun 2010 08:00:39 +0000 (13:30 +0530)]
net: Fix VM start with '-net none'

Commit 50e32ea8f31035877decc10f1075aa0e619e09cb changed the behaviour
for the return type of net_client_init() when a nic type with no init
method was specified. 'none' is one such nic type. Instead of returning
0, which gets interpreted as an index into the nd_table[] array, we
switched to returning -1, which signifies an error as well.

That broke VM start with '-net none'. Testing was only done with the
monitor command 'pci_add', which doesn't fail.

The correct fix would still be to return 0+ values from
net_client_init() only when the return value can be used as an index to
refer to an entry in nd_table[]. With the current code, callers can
erroneously poke into nd_table[0] when -net nic is used, which can lead
to badness.

However, this commit just returns to the previous behaviour before the
offending commit.

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agox86: svm: Always clear event_inj on vmexit
Jan Kiszka [Wed, 2 Jun 2010 06:49:14 +0000 (08:49 +0200)]
x86: svm: Always clear event_inj on vmexit

We currently only clear SVM_EVTINJ_VALID after successful interrupt
delivery. This apparently does not match real hardware which clears the
whole event_inj field on every vmexit, including unsuccessful interrupt
delivery.

Reported-by: Erik van der Kouwe <vdkouwe@cs.vu.nl>
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agousb-uhci: fix commit 8e65b7c04965c8355e4ce43211582b6b83054e3d for vmstate
TeLeMan [Tue, 1 Jun 2010 04:26:20 +0000 (12:26 +0800)]
usb-uhci: fix commit 8e65b7c04965c8355e4ce43211582b6b83054e3d for vmstate

The commit 8e65b7c04965c8355e4ce43211582b6b83054e3d introduced
expire_time of UHCIState. But expire_time is not in vmstate, the
second uhci_frame_timer will not be fired immediately after loadvm.

Signed-off-by: TeLeMan <geleman@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agohw/omap : make local function static and remove declaration from header
cmchao [Mon, 31 May 2010 15:54:24 +0000 (23:54 +0800)]
hw/omap : make local function static and remove declaration from header

Signed-off-by: cmchao <cmchao@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agohw/omap1.c : separate uart module
cmchao [Mon, 31 May 2010 15:54:23 +0000 (23:54 +0800)]
hw/omap1.c : separate uart module

Signed-off-by: cmchao <cmchao@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agohw/omwp2.c : separate l4 interconnect module
cmchao [Mon, 31 May 2010 15:54:22 +0000 (23:54 +0800)]
hw/omwp2.c : separate l4 interconnect module

Signed-off-by: cmchao <cmchao@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agohw/omap2.c : separate tap module(Test-Chip-level)
cmchao [Mon, 31 May 2010 15:54:21 +0000 (23:54 +0800)]
hw/omap2.c : separate tap module(Test-Chip-level)

Signed-off-by: cmchao <cmchao@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agohw/omap2.c : separate spi module
cmchao [Mon, 31 May 2010 15:54:20 +0000 (23:54 +0800)]
hw/omap2.c : separate spi module

Signed-off-by: cmchao <cmchao@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agohw/omap1.c : separate interrupt controller module
cmchao [Mon, 31 May 2010 15:54:19 +0000 (23:54 +0800)]
hw/omap1.c : separate interrupt controller module

Signed-off-by: cmchao <cmchao@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agohw/omap2.c : separate sdrc (sdram controller)
cmchao [Mon, 31 May 2010 15:54:18 +0000 (23:54 +0800)]
hw/omap2.c : separate sdrc (sdram controller)

Signed-off-by: cmchao <cmchao@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agohw/omap2.c : separate gpmc(general purpose memory controller)
cmchao [Mon, 31 May 2010 15:54:17 +0000 (23:54 +0800)]
hw/omap2.c : separate gpmc(general purpose memory controller)

Signed-off-by: cmchao <cmchao@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agohw/omap2.c : separate synctimer module
cmchao [Mon, 31 May 2010 15:54:16 +0000 (23:54 +0800)]
hw/omap2.c : separate synctimer module

Signed-off-by: cmchao <cmchao@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agohw/omap2.c : separate gptimer module
cmchao [Mon, 31 May 2010 15:54:15 +0000 (23:54 +0800)]
hw/omap2.c : separate gptimer module

Signed-off-by: cmchao <cmchao@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agohw/omap2.c : separate gpio module
cmchao [Mon, 31 May 2010 15:54:14 +0000 (23:54 +0800)]
hw/omap2.c : separate gpio module

Signed-off-by: cmchao <cmchao@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agohw/omap1.c : separate gpio module
cmchao [Mon, 31 May 2010 15:54:13 +0000 (23:54 +0800)]
hw/omap1.c : separate gpio module

Signed-off-by: cmchao <cmchao@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agovirtio-serial: Simplify virtio_serial_load()
Markus Armbruster [Mon, 31 May 2010 14:19:43 +0000 (16:19 +0200)]
virtio-serial: Simplify virtio_serial_load()

For all i, ports_map[i] is used in and only in the i-th iteration.
Replace the dynamic array by a scalar variable.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Acked-by: Amit Shah <amit.shah@redhat.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agousb-serial: Fail instead of crash when chardev is missing
Markus Armbruster [Fri, 28 May 2010 15:03:22 +0000 (17:03 +0200)]
usb-serial: Fail instead of crash when chardev is missing

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agoA bit optimization for tlb_set_page()
Jun Koi [Thu, 6 May 2010 05:36:59 +0000 (14:36 +0900)]
A bit optimization for tlb_set_page()

This patch avoids handling write watchpoints on read-only memory access.
It also breaks the searching loop for watchpoint once the setup for
handling watchpoint later is done.

Signed-off-by: Jun Koi <junkoi2004@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agotarget-mips: fix DINSU instruction
Aurelien Jarno [Wed, 30 Jun 2010 18:00:31 +0000 (20:00 +0200)]
target-mips: fix DINSU instruction

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agoMIPS: fix fulong bios loading
Aurelien Jarno [Wed, 30 Jun 2010 17:39:45 +0000 (19:39 +0200)]
MIPS: fix fulong bios loading

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agotarget-mips: enable movn/movz on loongson 2E & 2F
Aurelien Jarno [Sat, 19 Jun 2010 09:11:10 +0000 (11:11 +0200)]
target-mips: enable movn/movz on loongson 2E & 2F

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agomips-dis: add support for Godson integer instructions
Aurelien Jarno [Mon, 21 Jun 2010 10:01:39 +0000 (12:01 +0200)]
mips-dis: add support for Godson integer instructions

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agor2d: fix pflash mapping
Aurelien Jarno [Thu, 17 Jun 2010 20:19:53 +0000 (22:19 +0200)]
r2d: fix pflash mapping

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agolsi53c895a: fix Phase Mismatch Jump
Paolo Bonzini [Mon, 14 Jun 2010 17:11:54 +0000 (19:11 +0200)]
lsi53c895a: fix Phase Mismatch Jump

lsi_bad_phase has a bug in the choice of pmjad1/pmjad2.  This does
not matter with Linux guests because it uses just one routine for
both, but it breaks Windows 64-bit guests.  This is the text
from the spec:

   "[The PMJCTL] bit controls which decision mechanism is used
   when jumping on phase mismatch. When this bit is cleared the
   LSI53C895A will use Phase Mismatch Jump Address 1 (PMJAD1) when
   the WSR bit is cleared and Phase Mismatch Jump Address 2 (PMJAD2)
   when the WSR bit is set.  When this bit is set the LSI53C895A will
   use jump address one (PMJAD1) on data out (data out, command,
   message out) transfers and jump address two (PMJAD2) on data in
   (data in, status, message in) transfers."

Which means:

    CCNTL0.PMJCTL
        0              SCNTL2.WSR = 0             PMJAD1
        0              SCNTL2.WSR = 1             PMJAD2
        1                    out                  PMJAD1
        1                    in                   PMJAD2

In qemu, what you get instead is:

    CCNTL0.PMJCTL
        0                    out                  PMJAD1
        0                    in                   PMJAD2    <<<<<
        1                    out                  PMJAD1
        1                    in                   PMJAD1    <<<<<

Considering that qemu always has SCNTL2.WSR cleared, the two marked cases
(corresponding to phase mismatch on input) are always jumping to the
wrong PMJAD register.  The patch implements the correct semantics.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agoMIPS: Initial support of fulong mini pc (machine construction)
Huacai Chen [Tue, 29 Jun 2010 02:50:43 +0000 (10:50 +0800)]
MIPS: Initial support of fulong mini pc (machine construction)

Signed-off-by: Huacai Chen <zltjiangshi@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agoMIPS: Initial support of fulong mini pc (CPU definition)
Huacai Chen [Tue, 29 Jun 2010 02:50:27 +0000 (10:50 +0800)]
MIPS: Initial support of fulong mini pc (CPU definition)

Signed-off-by: Huacai Chen <zltjiangshi@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
14 years agoMIPS: Initial support of VIA USB controller used by fulong mini pc
Huacai Chen [Tue, 29 Jun 2010 02:50:09 +0000 (10:50 +0800)]
MIPS: Initial support of VIA USB controller used by fulong mini pc

Signed-off-by: Huacai Chen <zltjiangshi@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>