Commit Graph

11077 Commits

Author SHA1 Message Date
Paolo Bonzini
1828be316f more alarm timer cleanup
The timer_alarm_pending variable is related to the alarm timer but not
placed in the struct.  Also, in qemu_mod_timer the wrong flag was being
tested: the timer is rearmed in the alarm timer "bottom half", so the
right flag to test there is the "pending" flag.

Finally, I hoisted the NULL checks from alarm_has_dynticks to
host_alarm_handler.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
2010-03-17 11:14:53 -05:00
Paolo Bonzini
cd48d7e8f3 only one flag is needed for alarm_timer
The ALARM_FLAG_DYNTICKS can be testing simply by checking if there is
a rearm function.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
2010-03-17 11:14:53 -05:00
Paolo Bonzini
291defbcda fix error in win32_rearm_timer
The TIME_ONESHOT and TIME_PERIODIC flags are mutually exclusive.
The code after the patch matches the flags used in win32_start_timer.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
2010-03-17 11:14:52 -05:00
Paolo Bonzini
9aea10297f avoid dubiously clever code in win32_start_timer
The code is initializing an unsigned int to UINT_MAX using "-1", so that
the following always-true comparison seems to be always-false at a
first look.  Since alarm timer initializations are never nested, it is
simpler to unconditionally store the result of timeGetDevCaps into
data->period.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
2010-03-17 11:14:52 -05:00
Adam Litke
6d0ee85040 balloon: Do not save VM state wrt asynchronous virtio operations
When working with the VM state (for loadvm/savevm and migration), it is not
valid to load and store pointers since the validity of those pointers cannot be
assured in the new qemu address space.  Therefore, virtio_balloon_save() and
virtio_balloon_load() must not handle the stats-related fields in struct
VirtIOBalloon.

If a memory stats request is in-flight at the time of a migration or savevm,
the request will not complete and should be resubmitted once migration or
loadvm completes.  Note that this extremely small race window can only be
triggered using QMP so it is not possible to hang the user monitor.

Signed-off-by: Adam Litke <agl@us.ibm.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
2010-03-17 10:42:40 -05:00
Christoph Hellwig
8cfacf0790 block: add logical_block_size property
Add a logical block size attribute as various guest side tools only
increase the filesystem sector size based on it, not the advisory
physical block size.

For scsi we already have support for a different logical block size
in place for CDROMs that we can built upon.  Only my recent block
device characteristics VPD page needs some fixups.  Note that we
leave the logial block size for CDROMs hardcoded as the 2k value
is expected for it in general.

For virtio-blk we already have a feature flag claiming to support
a variable logical block size that was added for the s390 kuli
hypervisor.  Interestingly it does not actually change the units
in which the protocol works, which is still fixed at 512 bytes,
but only communicates a different minimum I/O granularity.  So
all we need to do in virtio is to add a trap for unaligned I/O
and round down the device size to the next multiple of the logical
block size.

IDE does not support any other logical block size than 512 bytes.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
2010-03-17 10:42:27 -05:00
Jan Kiszka
702f3e0fb5 Avoid crash on '-usbdevice <device>' without parameters
Many usbdevice_init implementors assume params is non-NULL.

Signed-off-by: Jan Kiszka <jan.kiszka@web.de>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
2010-03-17 10:42:12 -05:00
Chris Webb
cc39a92cbf Fix SIGFPE for vnc display of width/height = 1
During boot, the screen gets resized to height 1 and a mouse click at this
point will cause a division by zero when calculating the absolute pointer
position from the pixel (x, y). Return a click in the middle of the screen
instead in this case.

Signed-off-by: Chris Webb <chris@arachsys.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
2010-03-17 10:42:11 -05:00
Paul Bolle
3c9c706c3b usb-linux: remove unreachable default in switch statement
Signed-off-by: Paul Bolle <pebolle@tiscali.nl>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
2010-03-17 10:41:39 -05:00
Bjørn Mork
b6034a399e sdl: improve error message on fatal error
The SDL_SetVideoMode() error condition is easily triggered by a user by
simply configure a guest with a host unsupported display resolution
and attempting to enable fullscreen.  Since the error is fatal, adding
a bit of debugging help can't harm.

Sample output with this change:

 (qemu) Could not open SDL display (1280x1024x32): No video mode large enough for 1280x1024

The width x height might seem redundant as SDL also provides it in
SDL_GetError(), but I believe there are situations where it is
useful.  I.e. if there is some other SDL error.  Anyway, redundant
information in fatal error messages has never harmed a single gerbil.

Signed-off-by: Bjørn Mork <bjorn@mork.no>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
2010-03-17 10:41:38 -05:00
Shahar Havivi
fd04a2aeda Wrong error message in block_passwd command
Signed-off-by: Shahar Havivi <shaharh@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
2010-03-17 10:41:38 -05:00
Shahar Havivi
25b28f01d8 QError: New QERR_DEVICE_NOT_ENCRYPTED
Signed-off-by: Shahar Havivi <shaharh@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
2010-03-17 10:41:05 -05:00
Anthony Liguori
4a39943bd1 Merge remote branch 'markus/qerror' into staging 2010-03-17 09:44:37 -05:00
Anthony Liguori
7d834c7450 Merge remote branch 'mst/pci' into staging 2010-03-17 09:42:58 -05:00
Paul Brook
d4c430a80f Large page TLB flush
QEMU uses a fixed page size for the CPU TLB.  If the guest uses large
pages then we effectively split these into multiple smaller pages, and
populate the corresponding TLB entries on demand.

When the guest invalidates the TLB by virtual address we must invalidate
all entries covered by the large page.  However the address used to
invalidate the entry may not be present in the QEMU TLB, so we do not
know which regions to clear.

Implementing a full vaiable size TLB is hard and slow, so just keep a
simple address/mask pair to record which addresses may have been mapped by
large pages.  If the guest invalidates this region then flush the
whole TLB.

Signed-off-by: Paul Brook <paul@codesourcery.com>
2010-03-17 02:44:41 +00:00
Markus Armbruster
8bc27249f0 monitor: convert do_device_add() to QObject 2010-03-16 17:45:35 +01:00
Markus Armbruster
c7e4e8ceb3 monitor: Use argument type 'O' for device_add
While there, improve the params help text.
2010-03-16 17:45:35 +01:00
Markus Armbruster
361127dfb4 monitor: New argument type 'O'
In the human monitor, it declares a single optional argument to be
parsed according to the QemuOptsList given by its name.

In QMP, it declares an optional argument for each member of the
QemuOptsList.

Restriction: only lists with empty desc are supported for now.  Good
enough for the job at hand.  We'll lift the restriction when we need
that.
2010-03-16 17:45:35 +01:00
Markus Armbruster
304329eea0 qemu-option: Rename find_list() to qemu_find_opts() & external linkage
Next commit wants to use it.
2010-03-16 17:45:35 +01:00
Markus Armbruster
8212c64f0e qemu-option: Move the implied first name into QemuOptsList
We sometimes permit omitting the first option name, for example
-device foo is short for -device driver=foo.  The name to use
("driver" in the example) is passed as argument to qemu_opts_parse().
For each QemuOptsList, we use at most one such name.

Move the name into QemuOptsList, and pass whether to permit the
abbreviation.  This ensures continued consistency, and simplifies the
commit after next in this series.
2010-03-16 17:45:34 +01:00
Markus Armbruster
01e7f18869 qemu-option: Functions to convert to/from QDict
The functions are somewhat restricted.  Good enough for the job at
hand.  We'll extend them when we need more.
2010-03-16 17:45:34 +01:00
Markus Armbruster
0204276bc9 error: Convert do_device_add() to QError
Conversion to QObject is still missing.
2010-03-16 17:45:34 +01:00
Markus Armbruster
3801cf8ae5 Revert "qdev: Use QError for 'device not found' error"
This reverts commit 3ced9f7a36.

The next commit will convert all of qdev_device_add() to QError, and
it'll be clearer with this partial conversion reverted.
2010-03-16 17:45:34 +01:00
Markus Armbruster
fab5767f90 error: New QERR_NO_BUS_FOR_DEVICE 2010-03-16 17:45:34 +01:00
Markus Armbruster
4d9a1a1521 error: New QERR_DEVICE_INIT_FAILED 2010-03-16 17:45:34 +01:00
Markus Armbruster
8eae73b5d7 error: New QERR_BUS_NO_HOTPLUG 2010-03-16 17:45:34 +01:00
Markus Armbruster
56e9f56309 error: New QERR_BAD_BUS_FOR_DEVICE 2010-03-16 17:45:34 +01:00
Markus Armbruster
aa924ae730 error: New error_printf_unless_qmp() 2010-03-16 17:45:34 +01:00
Markus Armbruster
ac8dae6794 qdev: Convert qbus_find() to QError 2010-03-16 17:45:34 +01:00
Markus Armbruster
07574baf7b error: New QERR_DEVICE_NO_BUS 2010-03-16 17:45:34 +01:00
Markus Armbruster
1ae7871840 error: New QERR_DEVICE_MULTIPLE_BUSSES 2010-03-16 17:45:34 +01:00
Markus Armbruster
7bbd823701 error: New QERR_BUS_NOT_FOUND 2010-03-16 17:45:34 +01:00
Markus Armbruster
fc98eb430e qdev: Relax parsing of bus option
Treat multiple successive slashes as a one slash.  Ignore trailing
slashes.  This is how POSIX pathnames work.
2010-03-16 17:45:34 +01:00
Markus Armbruster
fdcfa190ab qdev: convert setting device properties to QError 2010-03-16 17:45:26 +01:00
Markus Armbruster
84745d68e7 error: New QERR_PROPERTY_VALUE_NOT_FOUND 2010-03-16 17:45:26 +01:00
Markus Armbruster
9c5eff958d error: New QERR_PROPERTY_VALUE_IN_USE 2010-03-16 17:45:26 +01:00
Markus Armbruster
06b4a703e0 error: New QERR_PROPERTY_VALUE_BAD 2010-03-16 17:01:08 +01:00
Markus Armbruster
c58a35f8e3 error: New QERR_PROPERTY_NOT_FOUND 2010-03-16 17:01:08 +01:00
Markus Armbruster
fc5469d87b error: Polish human-readable error descriptions
Also put error definitions in alphabetical order
2010-03-16 17:01:08 +01:00
Markus Armbruster
cde0fc7544 error: Let converted handlers print in human monitor
While fully converted handlers are not supposed to print anything when
running in a QMP monitor, they are free to print in a human monitor.
For instance, device_add (not yet converted) prints help, and will
continue to do so after conversion.

Moreover, utility functions converted to QError should remain usable
from unconverted handlers.

Two problems:

* handler_audit() complains when a converted handler prints.  Limit
  that to QMP monitors.

* With QMP, handlers need to pass the error object by way of
  monitor_set_error().  However, we do that both for QMP and for the
  human monitor.  The human monitor prints the error object after the
  handler returns.  If the handler prints anything else, that output
  "overtakes" the error message.

  Limit use of monitor_set_error() to QMP monitors.  Update
  handler_audit() accordingly.
2010-03-16 17:01:08 +01:00
Markus Armbruster
6620d3ce9e monitor: New monitor_cur_is_qmp() 2010-03-16 17:01:08 +01:00
Markus Armbruster
036f7166c7 qdev: Hide "ptr" properties from users
Users can't set them, so qdev_device_help() shouldn't list them.  Fix
that.  Also make qdev_prop_parse() hide them instead of printing a
meaningless "has no parser" error message.

Their value means nothing to users, so qdev_print_props() shouldn't
print it.  Fix by removing their print method.

Their only use is dirty hacks.  Document that.
2010-03-16 17:01:08 +01:00
Markus Armbruster
c64eafaf0c qdev: Hide "no_user" devices from users
Users can't create them, so qdev_device_help() shouldn't list them.
Fix that.

Also make qdev_device_add() pretend they don't exist.  Before, it
rejected them with a "can't be added via command line" message, which
wasn't quite right for monitor command device_add.
2010-03-16 16:58:32 +01:00
Markus Armbruster
0c17542d90 qdev: Factor qdev_create_from_info() out of qdev_create()
To make it obvious that -device and device_add can't die in
hw_error().
2010-03-16 16:58:32 +01:00
Markus Armbruster
327867b62a qdev: Fix -device and device_add to handle unsuitable bus gracefully
"device_add isa-serial,bus=pci.0" kills QEMU.  Not good.
2010-03-16 16:58:32 +01:00
Markus Armbruster
0f0bc3f1d5 error: Track locations on command line
New LOC_CMDLINE.  Use it for tracking option with argument in
lookup_opt().  We now report errors like this

    qemu: -device smbus-eeprom: Did not find I2C bus for smbus-eeprom
2010-03-16 16:58:32 +01:00
Markus Armbruster
ef82516d8f QemuOpts: Fix qemu_config_parse() to catch file read errors 2010-03-16 16:58:32 +01:00
Markus Armbruster
cf5a65aaaf error: Track locations in configuration files
New LOC_FILE.  Use it for tracking file name and line number in
qemu_config_parse().  We now report errors like

    qemu:foo.conf:42: Did not find I2C bus for smbus-eeprom

In particular, gems like this message:

    -device: no driver specified

become almost nice now:

    qemu:foo.conf:44: -device: no driver specified

(A later commit will get rid of the bogus -device:)
2010-03-16 16:58:32 +01:00
Markus Armbruster
65abca0a34 error: Include the program name in error messages to stderr 2010-03-16 16:58:32 +01:00
Markus Armbruster
827b08139c error: Infrastructure to track locations for error reporting
New struct Location holds a location.  So far, the only location is
LOC_NONE, so this doesn't do anything useful yet.

Passing the current location all over the place would be too
cumbersome.  Hide it away in static cur_loc instead, and provide
accessors.  Print it in error_report().

Store it in QError, and print it in qerror_print().

Store it in QemuOpt, for use by qemu_opts_foreach().  This makes
error_report() do the right thing when it runs within
qemu_opts_foreach().

We may still have to store it in other data structures holding user
input for better error messages.  Left for another day.
2010-03-16 16:58:32 +01:00