Compare commits

...
51 Commits
Author SHA1 Message Date
Stefan Hajnoczi 0737f32daf Update version for v2.8.0 release
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2016-12-20 16:16:42 +00:00
Stefan Hajnoczi 6a928d25b6 Update version for v2.8.0-rc4 release
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2016-12-15 07:36:03 +00:00
Maxime Coquelin 66d1c4c19f virtio-pci: Fix cross-version migration with older machines
This patch fixes a cross-version migration regression introduced
by commit d1b4259f ("virtio-bus: Plug devices after features are
negotiated").

The problem is encountered when host's vhost backend does not support
VIRTIO_F_VERSION_1, and migration is initiated from a v2.7 or prior
machine with virtio-pci modern capabilities enabled to a v2.8 machine.

In this case, modern capabilities get exposed to the guest by the source,
whereas the target will detect version 1 is not supported so will only
expose legacy capabilities.

The problem is fixed by introducing a new "x-ignore-backend-features"
property, which is set in v2.7 and prior compatibility modes. Doing this,
v2.7 machine keeps its broken behaviour (enabling modern while version
is not supported), and newer machines will behave correctly.

Reported-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Reviewed-by: Marcel Apfelbaum <marcel@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Tested-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Message-id: 20161214163035.3297-1-maxime.coquelin@redhat.com
Suggested-by: Stefan Hajnoczi <stefanha@redhat.com>
Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Cornelia Huck <cornelia.huck@de.ibm.com>
Cc: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Marcel Apfelbaum <marcel@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Tested-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2016-12-15 07:35:19 +00:00
Stefan Hajnoczi d70678a538 po: add missing translations in de, fr, it, zh
There are missing translations for the new "Copy" menu item.

The following people provided them to me on IRC just in time for the
QEMU 2.8 release:

 * de_DE - Stefan Hajnoczi <stefanha@redhat.com>
 * fr_FR - Laurent Vivier <laurent@vivier.eu>
 * it    - Pino Toscano <ptoscano@redhat.com>
 * zh_CN - Fam Zheng <famz@redhat.com>

[Removed spurious space in zh_CN "Copy" translation that Fam Zheng
pointed out.
--Stefan]

Reported-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-id: 20161214144713.11009-1-stefanha@redhat.com
Cc: Fam Zheng <famz@redhat.com>
Cc: Pino Toscano <ptoscano@redhat.com>
Cc: Laurent Vivier <laurent@vivier.eu>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2016-12-14 18:47:19 +00:00
Stefan Hajnoczi a08156321a ui/gtk: fix "Copy" menu item segfault
The "Copy" menu item copies VTE terminal text to the clipboard.  This
only works with VTE terminals, not with graphics consoles.

Disable the menu item when the current notebook page isn't a VTE
terminal.

This patch fixes a segfault.  Reproducer: Start QEMU and click the Copy
menu item when the guest display is visible.

Reported-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>
Tested-by: Stefan Weil <sw@weilnetz.de>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-id: 20161214142518.10504-1-stefanha@redhat.com
Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2016-12-14 18:46:21 +00:00
Stefan Hajnoczi 3753c75db8 Update language files for QEMU 2.8.0
Update translation files (change created via 'make -C po update').

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Stefan Weil <sw@weilnetz.de>
Message-id: 20161213214917.6436-1-stefanha@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2016-12-14 12:32:06 +00:00
Stefan Hajnoczi a92f7fe5a8 Update version for v2.8.0-rc3 release
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2016-12-06 23:26:04 +00:00
Eric Blake 4230e5d128 qapi: Document introduction of gluster's 'debug' option
We intentionally renamed 'debug-level' to 'debug' in the QMP
schema for 'blockdev-add' related to gluster, in order to
match the command line (commit 1a417e46).  However, since
'debug-level' was visible in 2.7, that means that we should
document that 'debug' was not available until 2.8.

The change was intentional because 'blockdev-add' itself
underwent incompatible changes (such as commit 0153d2f) for
the same release; our intent is that after 2.8, these
interfaces will now be stable.  [In hindsight, we should have
used the name x-blockdev-add when we first introduced it]

Signed-off-by: Eric Blake <eblake@redhat.com>
Message-id: 20161206182020.25736-1-eblake@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2016-12-06 20:22:03 +00:00
Peter Maydell a9353fe897 exec.c: Fix breakpoint invalidation race
A bug (1647683) was reported showing a crash when removing
breakpoints.  The reproducer was bisected to 3359baad when tb_flush
was finally made thread safe.  While in MTTCG the locking in
breakpoint_invalidate would have prevented any problems, but
currently tb_lock() is a NOP for system emulation.

The race is between a tb_flush from the gdbstub and the
tb_invalidate_phys_addr() in breakpoint_invalidate().

Ideally we'd have actual locking here; for the moment the
simple fix is to do a full tb_flush() for a bp invalidate,
since that is thread-safe even if no lock is taken.

Reported-by: Julian Brown <julian@codesourcery.com>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 1481047629-7763-1-git-send-email-peter.maydell@linaro.org
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2016-12-06 20:21:46 +00:00
Eric Blake d750c3a966 qapi: Document DEVICE_TRAY_MOVED addition
Commit 2d76e72 failed to add a versioning tag to 'id'.

I audited all qapi*.json files from v2.7.0 to the current
state of the tree, and didn't find any other additions where
we failed to use a version tag.

Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-id: 20161206160345.22425-1-eblake@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2016-12-06 20:18:38 +00:00
Changlong Xie b5b7b5deb4 tests/.gitignore: Ignore test-char
[Lin Ma <lma@suse.com> notes that commit ea3af47d added test for chardev
unit tests, but didn't add the name of generated binary in .gitignore.
--Stefan]

Signed-off-by: Changlong Xie <xiecl.fnst@cn.fujitsu.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-id: 1478494765-13233-1-git-send-email-xiecl.fnst@cn.fujitsu.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2016-12-06 20:05:49 +00:00
Stefan Hajnoczi 68701de136 Merge remote-tracking branch 'kwolf/tags/for-upstream' into staging
Block layer patches for 2.8.0-rc3

# gpg: Signature made Tue 06 Dec 2016 02:44:39 PM GMT
# gpg:                using RSA key 0x7F09B272C88F2FD6
# gpg: Good signature from "Kevin Wolf <kwolf@redhat.com>"
# Primary key fingerprint: DC3D EB15 9A9A F95D 3D74  56FE 7F09 B272 C88F 2FD6

* kwolf/tags/for-upstream:
  qcow2: Don't strand clusters near 2G intervals during commit

Message-id: 1481037418-10239-1-git-send-email-kwolf@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2016-12-06 17:35:29 +00:00
Eric Blake a3e1505dae qcow2: Don't strand clusters near 2G intervals during commit
The qcow2_make_empty() function is reached during 'qemu-img commit',
in order to clear out ALL clusters of an image.  However, if the
image cannot use the fast code path (true if the image is format
0.10, or if the image contains a snapshot), the cluster size is
larger than 512, and the image is larger than 2G in size, then our
choice of sector_step causes problems.  Since it is not cluster
aligned, but qcow2_discard_clusters() silently ignores an unaligned
head or tail, we are leaving clusters allocated.

Enhance the testsuite to expose the flaw, and patch the problem by
ensuring our step size is aligned.

Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2016-12-06 15:37:02 +01:00
Stefan Hajnoczi ce1f3e88f8 Merge remote-tracking branch 'jasowang/tags/net-pull-request' into staging
# gpg: Signature made Tue 06 Dec 2016 02:24:23 AM GMT
# gpg:                using RSA key 0xEF04965B398D6211
# gpg: Good signature from "Jason Wang (Jason Wang on RedHat) <jasowang@redhat.com>"
# Primary key fingerprint: 215D 46F4 8246 689E C77F  3562 EF04 965B 398D 6211

* jasowang/tags/net-pull-request:
  fsl_etsec: Fix various small problems in hexdump code
  fsl_etsec: Pad short payloads with zeros
  net: mcf: check receive buffer size register value

Message-id: 1480991552-14360-1-git-send-email-jasowang@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2016-12-06 10:24:24 +00:00
Stefan Hajnoczi 8a04c80f9f Merge remote-tracking branch 'jtc/tags/block-pull-request' into staging
# gpg: Signature made Mon 05 Dec 2016 09:30:45 PM GMT
# gpg:                using RSA key 0xBDBE7B27C0DE3057
# gpg: Good signature from "Jeffrey Cody <jcody@redhat.com>"
# gpg:                 aka "Jeffrey Cody <jeff@codyprime.org>"
# gpg:                 aka "Jeffrey Cody <codyprime@gmail.com>"
# Primary key fingerprint: 9957 4B4D 3474 90E7 9D98  D624 BDBE 7B27 C0DE 3057

* jtc/tags/block-pull-request:
  qemu-doc: update gluster protocol usage guide
  block/nfs: fix QMP to match debug option
  block/gluster: fix QMP to match debug option

Message-id: 1480973521-28945-1-git-send-email-jcody@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2016-12-06 09:55:57 +00:00
Stefan Hajnoczi 5d3074f0db Merge remote-tracking branch 'pm215/tags/pull-target-arm-20161205' into staging
target-arm queue:
 * fix gen_load_exclusive handling of ldaxp

# gpg: Signature made Mon 05 Dec 2016 05:57:51 PM GMT
# gpg:                using RSA key 0x3C2525ED14360CDE
# gpg: Good signature from "Peter Maydell <peter.maydell@linaro.org>"
# gpg:                 aka "Peter Maydell <pmaydell@gmail.com>"
# gpg:                 aka "Peter Maydell <pmaydell@chiark.greenend.org.uk>"
# Primary key fingerprint: E1A5 C593 CD41 9DE2 8E83  15CF 3C25 25ED 1436 0CDE

* pm215/tags/pull-target-arm-20161205:
  target-arm/translate-a64: fix gen_load_exclusive

Message-id: 1480960775-5002-1-git-send-email-peter.maydell@linaro.org
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2016-12-06 09:51:41 +00:00
Stefan Hajnoczi 8a844b2603 Merge remote-tracking branch 'armbru/tags/pull-qapi-2016-12-05' into staging
QAPI patches for 2016-12-05

# gpg: Signature made Mon 05 Dec 2016 04:41:53 PM GMT
# gpg:                using RSA key 0x3870B400EB918653
# gpg: Good signature from "Markus Armbruster <armbru@redhat.com>"
# gpg:                 aka "Markus Armbruster <armbru@pond.sub.org>"
# Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867  4E5F 3870 B400 EB91 8653

* armbru/tags/pull-qapi-2016-12-05:
  qapi: add missing colon-ending for section name
  qapi: use one symbol per line
  qapi: fix various symbols mismatch in documentation
  qapi: fix missing symbol @prefix
  qapi: fix schema symbol sections
  qga/schema: fix double-return in doc
  tests: Avoid qobject_from_jsonf("%"PRId64)
  test-qga: Avoid qobject_from_jsonv("%"PRId64)
  qmp-event: Avoid qobject_from_jsonf("%"PRId64)

Message-id: 1480956313-31322-1-git-send-email-armbru@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2016-12-06 09:49:51 +00:00
Stefan Hajnoczi e24f095e44 Merge remote-tracking branch 'kraxel/tags/pull-vga-20161205-1' into staging
qxl: fix flickering.
cirrus: avoid devision by zero.
virtio-gpu: fix two leaks.

# gpg: Signature made Mon 05 Dec 2016 10:55:45 AM GMT
# gpg:                using RSA key 0x4CB6D8EED3E87138
# gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>"
# gpg:                 aka "Gerd Hoffmann <gerd@kraxel.org>"
# gpg:                 aka "Gerd Hoffmann (private) <kraxel@gmail.com>"
# Primary key fingerprint: A032 8CFF B93A 17A7 9901  FE7D 4CB6 D8EE D3E8 7138

* kraxel/tags/pull-vga-20161205-1:
  display: cirrus: check vga bits per pixel(bpp) value
  virtio-gpu: fix memory leak in update_cursor_data_virgl
  virtio-gpu: fix information leak in getting capset info dispatch
  qxl: Only emit QXL_INTERRUPT_CLIENT_MONITORS_CONFIG on config changes

Message-id: 1480935840-3961-1-git-send-email-kraxel@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2016-12-06 09:38:39 +00:00
Andrey Smirnov 9f5832d34b fsl_etsec: Fix various small problems in hexdump code
Fix various small problems in hexdump code, such as:
    - Reference to non-existing field etsec->nic->nc.name is replaced
    with nc->name

    - Type mismatch warnings

Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
2016-12-06 10:23:50 +08:00
Prasanna Kumar Kalever 76b5550f70 qemu-doc: update gluster protocol usage guide
Document:
1. The new debug and logfile options with their usages
2. New json format and its usage and
3. update "GlusterFS, Device URL Syntax" section in "Invocation"

Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Jeff Cody <jcody@redhat.com>
2016-12-05 16:30:29 -05:00
Prasanna Kumar Kalever 7103d9165b block/nfs: fix QMP to match debug option
The QMP definition of BlockdevOptionsNfs:
{ 'struct': 'BlockdevOptionsNfs',
  'data': { 'server': 'NFSServer',
            'path': 'str',
            '*user': 'int',
            '*group': 'int',
            '*tcp-syn-count': 'int',
            '*readahead-size': 'int',
            '*page-cache-size': 'int',
            '*debug-level': 'int' } }

To make this consistent with other block protocols like gluster, lets
change s/debug-level/debug/

Suggested-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Jeff Cody <jcody@redhat.com>
2016-12-05 16:30:21 -05:00
Prasanna Kumar Kalever 1a417e46ae block/gluster: fix QMP to match debug option
The QMP definition of BlockdevOptionsGluster:
{ 'struct': 'BlockdevOptionsGluster',
  'data': { 'volume': 'str',
            'path': 'str',
            'server': ['GlusterServer'],
            '*debug-level': 'int',
            '*logfile': 'str' } }

But instead of 'debug-level we have exported 'debug' as the option for choosing
debug level of gluster protocol driver.

This patch fix QMP definition BlockdevOptionsGluster
s/debug-level/debug/

Suggested-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Jeff Cody <jcody@redhat.com>
2016-12-05 16:30:15 -05:00
Alex Bennée 5460da501a target-arm/translate-a64: fix gen_load_exclusive
While testing rth's latest TCG patches with risu I found ldaxp was
broken. Investigating further I found it was broken by 1dd089d0 when
the cmpxchg atomic work was merged. As part of that change the code
attempted to be clever by doing a single 64 bit load and then shuffle
the data around to set the two 32 bit registers.

As I couldn't quite follow the endian magic I've simply partially
reverted the change to the original code gen_load_exclusive code. This
doesn't affect the cmpxchg functionality as that is all done on in
gen_store_exclusive part which is untouched.

I've also restored the comment that was removed (with a slight tweak
to mention cmpxchg).

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Acked-by: Richard Henderson <rth@twiddle.net>
Message-id: 20161202173454.19179-1-alex.bennee@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
2016-12-05 17:52:01 +00:00
Marc-André Lureau 5072f7b38b qapi: add missing colon-ending for section name
The documentation parser we are going to add expects a section name to
end with ':', otherwise the comment is treated as free-form text body.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20161117155504.21843-9-marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
2016-12-05 17:41:38 +01:00
Marc-André Lureau 9f2a70e465 qapi: use one symbol per line
The documentation parser we are going to add only handles a single
symbol per line.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20161117155504.21843-8-marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
2016-12-05 17:41:38 +01:00
Marc-André Lureau 4d5c8bc42f qapi: fix various symbols mismatch in documentation
There are various mismatch:
- invalid symbols
- section and member symbols mismatch
- enum or union values vs 'type'

The documentation parser catches all these cases.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20161117155504.21843-7-marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
2016-12-05 17:41:37 +01:00
Marc-André Lureau c5927e7abf qapi: fix missing symbol @prefix
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-Id: <20161117155504.21843-6-marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
2016-12-05 17:41:37 +01:00
Marc-André Lureau 49687ace02 qapi: fix schema symbol sections
According to docs/qapi-code-gen.txt, there needs to be '##' to start a
and end a symbol section, that's also what the documentation parser
expects.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-Id: <20161117155504.21843-5-marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
2016-12-05 17:41:37 +01:00
Marc-André Lureau 95cd8fd909 qga/schema: fix double-return in doc
guest-get-memory-block-info documentation should have only one
"Returns:".

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-Id: <20161117155504.21843-3-marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
2016-12-05 17:41:37 +01:00
Eric Blake 29a6731afb tests: Avoid qobject_from_jsonf("%"PRId64)
The qobject_from_jsonf() function implements a pseudo-printf
language for creating a QObject; however, it is hard-coded to
only parse a subset of formats understood by -Wformat, and is
not a straight synonym to bare printf().  In particular, any
use of an int64_t integer works only if the system's
definition of PRId64 matches what the parser expects; which
works on glibc (%lld or %ld depending on 32- vs. 64-bit) and
mingw (%I64d), but not on Mac OS (%qd).  Rather than enhance
the parser, it is just as easy to force the use of int (where
the value is small enough) or long long instead of int64_t,
which we know always works.

This should cover all remaining testsuite uses of
qobject_from_json[fv]() that were trying to rely on PRId64,
although my proof for that was done by adding in asserts and
checking that 'make check' still passed, where such asserts
are inappropriate during hard freeze.  A later series in 2.9
may remove all dynamic JSON parsing, but that's a bigger task.

Reported by: G 3 <programmingkidx@gmail.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <1479922617-4400-4-git-send-email-eblake@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
[Rename value64 to value_ll]
Signed-off-by: Markus Armbruster <armbru@redhat.com>
2016-12-05 17:09:34 +01:00
Eric Blake 1792d7d0a2 test-qga: Avoid qobject_from_jsonv("%"PRId64)
The qobject_from_jsonv() function implements a pseudo-printf
language for creating a QObject; however, it is hard-coded to
only parse a subset of formats understood by -Wformat, and is
not a straight synonym to bare printf().  In particular, any
use of an int64_t integer works only if the system's
definition of PRId64 matches what the parser expects; which
works on glibc (%lld or %ld depending on 32- vs. 64-bit) and
mingw (%I64d), but not on Mac OS (%qd).  Rather than enhance
the parser, it is just as easy to use normal printf() for
this particular conversion, matching what is done elsewhere
in this file [1], which is safe in this instance because the
format does not contain any of the problematic differences
(bare '%' or the '%s' format).

The use of PRId64 for a variable named 'pid' is gross, but it
is a sad reality of the 64-bit mingw environment, which
mistakenly defines pid_t as a 64-bit type even though getpid()
returns 'int' on that platform [2].  Our definition of the
QGA GuestExec type defines 'pid' as a 64-bit entity, and we
can't tighten it to 'int32' unless the mingw header is fixed.
Using 'long long' instead of 'int64_t' just so that we can
stick with qobject_from_jsonv("%lld") instead of printf() is
not any prettier, since we may have later type churn anyways.

[1] see 'git grep -A2 strdup_printf tests/test-qga.c'
[2] https://bugzilla.redhat.com/show_bug.cgi?id=1397787

Reported by: G 3 <programmingkidx@gmail.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <1479922617-4400-3-git-send-email-eblake@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
2016-12-05 17:09:34 +01:00
Eric Blake 043b5a4951 qmp-event: Avoid qobject_from_jsonf("%"PRId64)
The qobject_from_jsonf() function implements a pseudo-printf
language for creating a QObject; however, it is hard-coded to
only parse a subset of formats understood by -Wformat, and is
not a straight synonym to bare printf().  In particular, any
use of an int64_t integer works only if the system's
definition of PRId64 matches what the parser expects; which
works on glibc (%lld or %ld depending on 32- vs. 64-bit) and
mingw (%I64d), but not on Mac OS (%qd).  Rather than enhance
the parser, it is just as easy to use 'long long', which we
know always works.  There are few enough callers of
qobject_from_json[fv]() that it is easy to audit that this is
the only non-testsuite caller that was actually relying on
this particular conversion.

Reported by: G 3 <programmingkidx@gmail.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <1479922617-4400-2-git-send-email-eblake@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
[Cast tv.tv_sec, tv.tv_usec to long long for type correctness]
Signed-off-by: Markus Armbruster <armbru@redhat.com>
2016-12-05 17:09:34 +01:00
Stefan Hajnoczi bc66cedb41 Merge remote-tracking branch 'yongbok/tags/mips-20161204' into staging
MIPS patches 2016-12-04

Changes:
* Fix Loongson instructions
* Fix bad shifts in {dextp|dextpdp}

# gpg: Signature made Sun 04 Dec 2016 01:39:38 AM GMT
# gpg:                using RSA key 0x2238EB86D5F797C2
# gpg: Can't check signature: public key not found

* yongbok/tags/mips-20161204:
  target-mips: fix bad shifts in {dextp|dextpdp}
  target-mips: Fix Loongson multimedia instructions.
  target-mips: Fix Loongson multimedia 'or' instruction.
  target-mips: Fix Loongson pandn instruction.

Message-id: 1480816817-53245-1-git-send-email-yongbok.kim@imgtec.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2016-12-05 10:56:45 +00:00
Prasad J Pandit 4299b90e9b display: cirrus: check vga bits per pixel(bpp) value
In Cirrus CLGD 54xx VGA Emulator, if cirrus graphics mode is VGA,
'cirrus_get_bpp' returns zero(0), which could lead to a divide
by zero error in while copying pixel data. The same could occur
via blit pitch values. Add check to avoid it.

Reported-by: Huawei PSIRT <psirt@huawei.com>
Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
Message-id: 1476776717-24807-1-git-send-email-ppandit@redhat.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2016-12-05 11:01:55 +01:00
Andrey Smirnov 64f441d2e5 fsl_etsec: Pad short payloads with zeros
Depending on QEMU network setup it is possible for us to receive a
complete Ethernet packet that is less 64 bytes long. One such example is
when QEMU is configured to use a standalone TAP device (not set to be a
part of any bridge) receives and ARP packet. In cases like that we need
to add more than just 4-bytes of CRC padding and ensure that our payload
is at least 60 bytes long, such that, when combined with CRC padding
bytes the resulting size is at least 802.3 minimum MTU bytes
long (64). Failing to do that results in code in etsec_walk_rx_ring()
setting BD_RX_SH which, in turn, makes corresponding Linux driver of
emulated host to reject buffer as a runt packet

Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
2016-12-05 17:45:14 +08:00
Prasad J Pandit 77d54985b8 net: mcf: check receive buffer size register value
ColdFire Fast Ethernet Controller uses a receive buffer size
register(EMRBR) to hold maximum size of all receive buffers.
It is set by a user before any operation. If it was set to be
zero, ColdFire emulator would go into an infinite loop while
receiving data in mcf_fec_receive. Add check to avoid it.

Reported-by: Wjjzhang <wjjzhang@tencent.com>
Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
Signed-off-by: Jason Wang <jasowang@redhat.com>
2016-12-05 17:45:14 +08:00
Li Qiang 2d1cd6c7a9 virtio-gpu: fix memory leak in update_cursor_data_virgl
In update_cursor_data_virgl function, if the 'width'/ 'height'
is not equal to current cursor's width/height it will return
without free the 'data' allocated previously. This will lead
a memory leak issue. This patch fix this issue.

Signed-off-by: Li Qiang <liqiang6-s@360.cn>
Message-id: 58187760.41d71c0a.cca75.4cb9@mx.google.com
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2016-12-05 09:37:52 +01:00
Li Qiang 42a8dadc74 virtio-gpu: fix information leak in getting capset info dispatch
In virgl_cmd_get_capset_info dispatch function, the 'resp' hasn't
been full initialized before writing to the guest. This will leak
the 'resp.padding' and 'resp.hdr.padding' fieds to the guest. This
patch fix this issue.

Signed-off-by: Li Qiang <liqiang6-s@360.cn>
Message-id: 5818661e.0860240a.77264.7a56@mx.google.com
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2016-12-05 09:37:52 +01:00
Christophe Fergeau 6c7565028c qxl: Only emit QXL_INTERRUPT_CLIENT_MONITORS_CONFIG on config changes
Currently if the client keeps sending the same monitor config to
QEMU/spice-server, QEMU will always raise
a QXL_INTERRUPT_CLIENT_MONITORS_CONFIG regardless of whether there was a
change or not.
Guest-side (with fedora 25), the kernel QXL KMS driver will also forward the
event to user-space without checking if there were actual changes.
Next in line are gnome-shell/mutter (on a default f25 install), which
will try to reconfigure everything without checking if there is anything
to do.
Where this gets ugly is that when applying the resolution changes,
gnome-shell/mutter will call drmModeRmFB, drmModeAddFB, and
drmModeSetCrtc, which will cause the primary surface to be destroyed and
recreated by the QXL KMS driver. This in turn will cause the client to
resend a client monitors config message, which will cause QEMU to reemit
an interrupt with an unchanged monitors configuration, ...
This causes https://bugzilla.redhat.com/show_bug.cgi?id=1266484

This commit makes sure that we only emit
QXL_INTERRUPT_CLIENT_MONITORS_CONFIG when there are actual configuration
changes the guest should act on.

Signed-off-by: Christophe Fergeau <cfergeau@redhat.com>
Message-id: 20161028144840.18326-1-cfergeau@redhat.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2016-12-05 09:37:52 +01:00
Yongbok Kim e6e2784cac target-mips: fix bad shifts in {dextp|dextpdp}
Fixed issues in the MIPSDSP64 instructions dextp and dextpdp.
Shifting can go out of 32 bit range.

https://bugs.launchpad.net/qemu/+bug/1631625

Reported-by: Thomas Huth <thuth@redhat.com>
Reported-by: Jia Liu <proljc@gmail.com>
Signed-off-by: Yongbok Kim <yongbok.kim@imgtec.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
2016-12-04 00:57:06 +00:00
Heiher b5a587b613 target-mips: Fix Loongson multimedia instructions.
Needed to emit FPU exception on Loongson multimedia instructions
executing if Status:CU1 is clear. or FPR changes may be missed
on Linux.

Signed-off-by: Heiher <wangr@lemote.com>
Signed-off-by: Fuxin Zhang <zhangfx@lemote.com>
Reviewed-by: Yongbok Kim <yongbok.kim@imgtec.com>
Signed-off-by: Yongbok Kim <yongbok.kim@imgtec.com>
2016-12-04 00:56:29 +00:00
Heiher bb7cab5f34 target-mips: Fix Loongson multimedia 'or' instruction.
Signed-off-by: Heiher <wangr@lemote.com>
Signed-off-by: Fuxin Zhang <zhangfx@lemote.com>
Reviewed-by: Yongbok Kim <yongbok.kim@imgtec.com>
Signed-off-by: Yongbok Kim <yongbok.kim@imgtec.com>
2016-12-02 16:11:09 +00:00
Heiher 9099a36b4b target-mips: Fix Loongson pandn instruction.
pandn FD, FS, FT
Operation: FD = ((NOT FS) AND FT)

Signed-off-by: Heiher <wangr@lemote.com>
Signed-off-by: Fuxin Zhang <zhangfx@lemote.com>
Reviewed-by: Yongbok Kim <yongbok.kim@imgtec.com>
Signed-off-by: Yongbok Kim <yongbok.kim@imgtec.com>
2016-12-02 16:11:08 +00:00
Stefan Hajnoczi bd8ef5060d Merge remote-tracking branch 'dgibson/tags/ppc-for-2.8-20161201' into staging
ppc patch queue 2016-12-01

Just a single migration / hotplug fix in this set.  I believe it's
important enough to go in this late in the 2.8 release process.

# gpg: Signature made Thu 01 Dec 2016 04:43:49 AM GMT
# gpg:                using RSA key 0x6C38CACA20D9B392
# gpg: Good signature from "David Gibson <david@gibson.dropbear.id.au>"
# gpg:                 aka "David Gibson (kernel.org) <dwg@kernel.org>"
# gpg:                 aka "David Gibson (Red Hat) <dgibson@redhat.com>"
# gpg:                 aka "David Gibson (ozlabs.org) <dgibson@ozlabs.org>"
# Primary key fingerprint: 75F4 6586 AE61 A66C C44E  87DC 6C38 CACA 20D9 B392

* dgibson/tags/ppc-for-2.8-20161201:
  spapr: fix default DRC state for coldplugged LMBs

Message-id: 20161201044441.14365-1-david@gibson.dropbear.id.au
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2016-12-01 13:39:29 +00:00
Stefan Hajnoczi 2cfe5d7bc2 Merge remote-tracking branch 'mst/tags/for_upstream' into staging
virtio, vhost, pc: fixes

Minor fixes since 2.8.0-rc2.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

# gpg: Signature made Wed 30 Nov 2016 02:25:12 AM GMT
# gpg:                using RSA key 0x281F0DB8D28D5469
# gpg: Good signature from "Michael S. Tsirkin <mst@kernel.org>"
# gpg:                 aka "Michael S. Tsirkin <mst@redhat.com>"
# Primary key fingerprint: 0270 606B 6F3C DF3D 0B17  0970 C350 3912 AFBE 8E67
#      Subkey fingerprint: 5D09 FD08 71C8 F85B 94CA  8A0D 281F 0DB8 D28D 5469

* mst/tags/for_upstream:
  virtio-crypto: fix uninitialized variables
  loader: fix undefined behavior in rom_order_compare()
  loader: fix handling of custom address spaces when adding ROM blobs
  intel_iommu: fix incorrect device invalidate
  spec/vhost-user: fix the VHOST_USER prefix

Message-id: 1480564455-23933-1-git-send-email-mst@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2016-12-01 13:38:36 +00:00
Michael Roth 5c0139a8c2 spapr: fix default DRC state for coldplugged LMBs
Currently we set the initial isolation/allocation state for DRCs
associated with coldplugged LMBs to ISOLATED/UNUSABLE,
respectively, under the assumption that the guest will move this
state to UNISOLATED/USABLE.

In fact, this is only the case for LMBs added via hotplug. For
coldplugged LMBs, the guest actually assumes the initial state to
be UNISOLATED/USABLE.

In practice, this only becomes an issue when we attempt to unplug
one of these LMBs, where the guest kernel will issue an
rtas-get-sensor-state call to check that the corresponding DRC is
in an USABLE state before it will release the LMB back to
QEMU. If the returned state is otherwise, the guest will assume no
further action is needed, which bypasses the QEMU-side cleanup that
occurs during the USABLE->UNUSABLE transition. This results in
LMBs and their corresponding pc-dimm devices to stick around
indefinitely.

This patch fixes the issue by manually setting DRCs associated with
cold-plugged LMBs to UNISOLATED/ALLOCATED, but leaving the hotplug
state untouched. As it turns out, this is analogous to the handling
for cold-plugged CPUs in spapr_core_plug().

Cc: qemu-ppc@nongnu.org
Cc: David Gibson <david@gibson.dropbear.id.au>
Cc: Bharata B Rao <bharata@linux.vnet.ibm.com>
Cc: Greg Kurz <gkurz@linux.vnet.ibm.com>
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2016-12-01 13:41:00 +11:00
Gonglei 9730280d54 virtio-crypto: fix uninitialized variables
Though crypto_cfg.reserve is an unused field, let me
initialize the structure in order to make coverity happy.

*** CID 1365923:  Uninitialized variables  (UNINIT)
/hw/virtio/virtio-crypto.c: 851 in virtio_crypto_get_config()
845         stl_le_p(&crypto_cfg.mac_algo_h, c->conf.mac_algo_h);
846         stl_le_p(&crypto_cfg.aead_algo, c->conf.aead_algo);
847         stl_le_p(&crypto_cfg.max_cipher_key_len, c->conf.max_cipher_key_len);
848         stl_le_p(&crypto_cfg.max_auth_key_len, c->conf.max_auth_key_len);
849         stq_le_p(&crypto_cfg.max_size, c->conf.max_size);
850
>>>     CID 1365923:  Uninitialized variables  (UNINIT)
>>>     Using uninitialized value "crypto_cfg". Field "crypto_cfg.reserve"
       is uninitialized when calling "memcpy".
      [Note: The source code implementation of the function
       has been overridden by a builtin model.]
851         memcpy(config, &crypto_cfg, c->config_size);
852     }
853

Rported-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-11-30 04:22:18 +02:00
Laszlo Ersek 1b57bd4f2f loader: fix undefined behavior in rom_order_compare()
According to ISO C99 / N1256 (referenced in HACKING):

> 6.5.8 Relational operators
>
> 4 For the purposes of these operators, a pointer to an object that is
>   not an element of an array behaves the same as a pointer to the first
>   element of an array of length one with the type of the object as its
>   element type.
>
> 5 When two pointers are compared, the result depends on the relative
>   locations in the address space of the objects pointed to. If two
>   pointers to object or incomplete types both point to the same object,
>   or both point one past the last element of the same array object, they
>   compare equal. If the objects pointed to are members of the same
>   aggregate object, pointers to structure members declared later compare
>   greater than pointers to members declared earlier in the structure,
>   and pointers to array elements with larger subscript values compare
>   greater than pointers to elements of the same array with lower
>   subscript values. All pointers to members of the same union object
>   compare equal. If the expression /P/ points to an element of an array
>   object and the expression /Q/ points to the last element of the same
>   array object, the pointer expression /Q+1/ compares greater than /P/.
>   In all other cases, the behavior is undefined.

Our AddressSpace objects are allocated generally individually, and kept in
the "address_spaces" linked list, so we mustn't compare their addresses
with relops.

Convert the pointers subjected to the relop in rom_order_compare() to
"uintptr_t":

> 7.18.1.4 Integer types capable of holding object pointers
>
> 1 [...]
>
>   The following type designates an unsigned integer type with the
>   property that any valid pointer to void can be converted to this type,
>   then converted back to pointer to void, and the result will compare
>   equal to the original pointer:
>
>   /uintptr_t/
>
>   These types are optional.

Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Alistair Francis <alistair.francis@xilinx.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-devel@nongnu.org
Fixes: 3e76099aac
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Alistair Francis <alistair.francis@xilinx.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-11-30 04:22:18 +02:00
Laszlo Ersek aa6c6ae843 loader: fix handling of custom address spaces when adding ROM blobs
* Commit 3e76099aac ("loader: Allow a custom AddressSpace when loading
  ROMs") introduced the "Rom.as" field:

  (1) It modified the utility callers of rom_insert() to take "as" as a
      new parameter from *their* callers, and set "rom->as" from that
      parameter. The functions covered were rom_add_file() and
      rom_add_elf_program().

  (2) It also modified rom_insert() itself, to auto-assign
      "&address_space_memory", in case the external caller passed -- and
      the utility caller forwarded -- as=NULL.

  Except, commit 3e76099aac forgot to update the third utility caller of
  rom_insert(), under point (1), namely rom_add_blob().

* Later, commit 5e774eb3bd ("loader: Add AddressSpace loading support
  to uImages") added the load_uimage_as() function, and the
  rom_add_blob_fixed_as() function-like macro, with the necessary changes
  elsewhere to propagate the new "as" parameter to rom_add_blob():

    load_uimage_as()
      load_uboot_image()
        rom_add_blob_fixed_as()
          rom_add_blob()

  At this point, the signature (and workings) of rom_add_blob() had been
  broken already, and the rom_add_blob_fixed_as() macro passed its "_as"
  parameter to rom_add_blob() as "callback_opaque". Given that the
  "fw_callback" parameter itself was set to NULL (correctly), this did no
  additional damage (the opaque arg would never be used), but ultimately
  it broke the new functionality of load_uimage_as().

* The load_uimage_as() function would be put to use in one of the later
  patches, commit e481a1f63c ("generic-loader: Add a generic loader").

* We can fix this only in a unified patch now. Append "AddressSpace *as"
  to the signature of rom_add_blob(), and handle the new parameter. Pass
  NULL from all current callers, except from rom_add_blob_fixed_as(),
  where "_as" has to be bumped to the proper position.

* Note that rom_add_file() rejects the case when both "mr" and "as" are
  passed in as non-NULL. The action that this is apparently supposed to
  prevent is the

    rom->mr = mr;

  assignment (that's the only place where the "mr" parameter is used in
  rom_add_file()). In rom_add_blob() though, we have no "mr" parameter,
  and the actions done on the fw_cfg branch:

    if (fw_file_name && fw_cfg) {
        if (mc->rom_file_has_mr) {
            data = rom_set_mr(rom, OBJECT(fw_cfg), devpath);
            mr = rom->mr;
        } else {
            data = rom->data;
        }

  reflect those that are performed by rom_add_file() too (with mr==NULL):

    if (rom->fw_file && fw_cfg) {
        if ((!option_rom || mc->option_rom_has_mr) &&
            mc->rom_file_has_mr) {
            data = rom_set_mr(rom, OBJECT(fw_cfg), devpath);
        } else {
            data = rom->data;
        }

  Hence we need no additional restrictions in rom_add_blob().

* Stable is not affected as both problematic commits appeared first in
  v2.8.0-rc0.

Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Alistair Francis <alistair.francis@xilinx.com>
Cc: Igor Mammedov <imammedo@redhat.com>
Cc: Michael Walle <michael@walle.cc>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Peter Maydell <peter.maydell@linaro.org>
Cc: Shannon Zhao <zhaoshenglong@huawei.com>
Cc: qemu-arm@nongnu.org
Cc: qemu-devel@nongnu.org
Fixes: 3e76099aac
Fixes: 5e774eb3bd
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Alistair Francis <alistair.francis@xilinx.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-11-30 04:20:57 +02:00
Peter Xu 6cb99acc28 intel_iommu: fix incorrect device invalidate
"mask" needs to be inverted before use.

Signed-off-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-11-30 04:20:57 +02:00
Wei Wang 5449c230fa spec/vhost-user: fix the VHOST_USER prefix
Signed-off-by: Wei Wang <wei.w.wang@intel.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-11-30 04:20:57 +02:00
55 changed files with 1025 additions and 746 deletions

No files matched your search

+1 -1
View File
@@ -1 +1 @@
2.7.92
2.8.0
+19 -19
View File
@@ -48,7 +48,7 @@ typedef struct BDRVGlusterState {
struct glfs_fd *fd;
char *logfile;
bool supports_seek_data;
int debug_level;
int debug;
} BDRVGlusterState;
typedef struct BDRVGlusterReopenState {
@@ -434,7 +434,7 @@ static struct glfs *qemu_gluster_glfs_init(BlockdevOptionsGluster *gconf,
}
}
ret = glfs_set_logging(glfs, gconf->logfile, gconf->debug_level);
ret = glfs_set_logging(glfs, gconf->logfile, gconf->debug);
if (ret < 0) {
goto out;
}
@@ -788,17 +788,17 @@ static int qemu_gluster_open(BlockDriverState *bs, QDict *options,
filename = qemu_opt_get(opts, GLUSTER_OPT_FILENAME);
s->debug_level = qemu_opt_get_number(opts, GLUSTER_OPT_DEBUG,
GLUSTER_DEBUG_DEFAULT);
if (s->debug_level < 0) {
s->debug_level = 0;
} else if (s->debug_level > GLUSTER_DEBUG_MAX) {
s->debug_level = GLUSTER_DEBUG_MAX;
s->debug = qemu_opt_get_number(opts, GLUSTER_OPT_DEBUG,
GLUSTER_DEBUG_DEFAULT);
if (s->debug < 0) {
s->debug = 0;
} else if (s->debug > GLUSTER_DEBUG_MAX) {
s->debug = GLUSTER_DEBUG_MAX;
}
gconf = g_new0(BlockdevOptionsGluster, 1);
gconf->debug_level = s->debug_level;
gconf->has_debug_level = true;
gconf->debug = s->debug;
gconf->has_debug = true;
logfile = qemu_opt_get(opts, GLUSTER_OPT_LOGFILE);
s->logfile = g_strdup(logfile ? logfile : GLUSTER_LOGFILE_DEFAULT);
@@ -874,8 +874,8 @@ static int qemu_gluster_reopen_prepare(BDRVReopenState *state,
qemu_gluster_parse_flags(state->flags, &open_flags);
gconf = g_new0(BlockdevOptionsGluster, 1);
gconf->debug_level = s->debug_level;
gconf->has_debug_level = true;
gconf->debug = s->debug;
gconf->has_debug = true;
gconf->logfile = g_strdup(s->logfile);
gconf->has_logfile = true;
reop_s->glfs = qemu_gluster_init(gconf, state->bs->filename, NULL, errp);
@@ -1011,14 +1011,14 @@ static int qemu_gluster_create(const char *filename,
char *tmp = NULL;
gconf = g_new0(BlockdevOptionsGluster, 1);
gconf->debug_level = qemu_opt_get_number_del(opts, GLUSTER_OPT_DEBUG,
GLUSTER_DEBUG_DEFAULT);
if (gconf->debug_level < 0) {
gconf->debug_level = 0;
} else if (gconf->debug_level > GLUSTER_DEBUG_MAX) {
gconf->debug_level = GLUSTER_DEBUG_MAX;
gconf->debug = qemu_opt_get_number_del(opts, GLUSTER_OPT_DEBUG,
GLUSTER_DEBUG_DEFAULT);
if (gconf->debug < 0) {
gconf->debug = 0;
} else if (gconf->debug > GLUSTER_DEBUG_MAX) {
gconf->debug = GLUSTER_DEBUG_MAX;
}
gconf->has_debug_level = true;
gconf->has_debug = true;
gconf->logfile = qemu_opt_get_del(opts, GLUSTER_OPT_LOGFILE);
if (!gconf->logfile) {
+2 -2
View File
@@ -134,7 +134,7 @@ static int nfs_parse_uri(const char *filename, QDict *options, Error **errp)
qdict_put(options, "page-cache-size",
qstring_from_str(qp->p[i].value));
} else if (!strcmp(qp->p[i].name, "debug")) {
qdict_put(options, "debug-level",
qdict_put(options, "debug",
qstring_from_str(qp->p[i].value));
} else {
error_setg(errp, "Unknown NFS parameter name: %s",
@@ -165,7 +165,7 @@ static bool nfs_has_filename_options_conflict(QDict *options, Error **errp)
!strcmp(qe->key, "tcp-syn-count") ||
!strcmp(qe->key, "readahead-size") ||
!strcmp(qe->key, "page-cache-size") ||
!strcmp(qe->key, "debug-level") ||
!strcmp(qe->key, "debug") ||
strstart(qe->key, "server.", NULL))
{
error_setg(errp, "Option %s cannot be used with a filename",
+2 -1
View File
@@ -2808,7 +2808,8 @@ static int qcow2_make_empty(BlockDriverState *bs)
{
BDRVQcow2State *s = bs->opaque;
uint64_t start_sector;
int sector_step = INT_MAX / BDRV_SECTOR_SIZE;
int sector_step = (QEMU_ALIGN_DOWN(INT_MAX, s->cluster_size) /
BDRV_SECTOR_SIZE);
int l1_clusters, ret = 0;
l1_clusters = DIV_ROUND_UP(s->l1_size, s->cluster_size / sizeof(uint64_t));
+10 -10
View File
@@ -123,22 +123,22 @@ The communication consists of master sending message requests and slave sending
message replies. Most of the requests don't require replies. Here is a list of
the ones that do:
* VHOST_GET_FEATURES
* VHOST_GET_PROTOCOL_FEATURES
* VHOST_GET_VRING_BASE
* VHOST_SET_LOG_BASE (if VHOST_USER_PROTOCOL_F_LOG_SHMFD)
* VHOST_USER_GET_FEATURES
* VHOST_USER_GET_PROTOCOL_FEATURES
* VHOST_USER_GET_VRING_BASE
* VHOST_USER_SET_LOG_BASE (if VHOST_USER_PROTOCOL_F_LOG_SHMFD)
[ Also see the section on REPLY_ACK protocol extension. ]
There are several messages that the master sends with file descriptors passed
in the ancillary data:
* VHOST_SET_MEM_TABLE
* VHOST_SET_LOG_BASE (if VHOST_USER_PROTOCOL_F_LOG_SHMFD)
* VHOST_SET_LOG_FD
* VHOST_SET_VRING_KICK
* VHOST_SET_VRING_CALL
* VHOST_SET_VRING_ERR
* VHOST_USER_SET_MEM_TABLE
* VHOST_USER_SET_LOG_BASE (if VHOST_USER_PROTOCOL_F_LOG_SHMFD)
* VHOST_USER_SET_LOG_FD
* VHOST_USER_SET_VRING_KICK
* VHOST_USER_SET_VRING_CALL
* VHOST_USER_SET_VRING_ERR
If Master is unable to send the full message or receives a wrong reply it will
close the connection. An optional reconnection mechanism can be implemented.
+6 -19
View File
@@ -684,28 +684,15 @@ void cpu_exec_realizefn(CPUState *cpu, Error **errp)
#endif
}
#if defined(CONFIG_USER_ONLY)
static void breakpoint_invalidate(CPUState *cpu, target_ulong pc)
{
mmap_lock();
tb_lock();
tb_invalidate_phys_page_range(pc, pc + 1, 0);
tb_unlock();
mmap_unlock();
/* Flush the whole TB as this will not have race conditions
* even if we don't have proper locking yet.
* Ideally we would just invalidate the TBs for the
* specified PC.
*/
tb_flush(cpu);
}
#else
static void breakpoint_invalidate(CPUState *cpu, target_ulong pc)
{
MemTxAttrs attrs;
hwaddr phys = cpu_get_phys_page_attrs_debug(cpu, pc, &attrs);
int asidx = cpu_asidx_from_attrs(cpu, attrs);
if (phys != -1) {
/* Locks grabbed by tb_invalidate_phys_addr */
tb_invalidate_phys_addr(cpu->cpu_ases[asidx].as,
phys | (pc & ~TARGET_PAGE_MASK));
}
}
#endif
#if defined(CONFIG_USER_ONLY)
void cpu_watchpoint_remove_all(CPUState *cpu, int mask)
+1 -1
View File
@@ -809,7 +809,7 @@ static MemoryRegion *acpi_add_rom_blob(AcpiBuildState *build_state,
uint64_t max_size)
{
return rom_add_blob(name, blob->data, acpi_data_len(blob), max_size, -1,
name, virt_acpi_build_update, build_state);
name, virt_acpi_build_update, build_state, NULL);
}
static const VMStateDescription vmstate_virt_acpi_build = {
+4 -2
View File
@@ -818,7 +818,7 @@ static QTAILQ_HEAD(, Rom) roms = QTAILQ_HEAD_INITIALIZER(roms);
static inline bool rom_order_compare(Rom *rom, Rom *item)
{
return (rom->as > item->as) ||
return ((uintptr_t)(void *)rom->as > (uintptr_t)(void *)item->as) ||
(rom->as == item->as && rom->addr >= item->addr);
}
@@ -978,7 +978,8 @@ err:
MemoryRegion *rom_add_blob(const char *name, const void *blob, size_t len,
size_t max_len, hwaddr addr, const char *fw_file_name,
FWCfgReadCallback fw_callback, void *callback_opaque)
FWCfgReadCallback fw_callback, void *callback_opaque,
AddressSpace *as)
{
MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine());
Rom *rom;
@@ -986,6 +987,7 @@ MemoryRegion *rom_add_blob(const char *name, const void *blob, size_t len,
rom = g_malloc0(sizeof(*rom));
rom->name = g_strdup(name);
rom->as = as;
rom->addr = addr;
rom->romsize = max_len ? max_len : len;
rom->datasize = len;
+10 -4
View File
@@ -272,6 +272,9 @@ static void cirrus_update_memory_access(CirrusVGAState *s);
static bool blit_region_is_unsafe(struct CirrusVGAState *s,
int32_t pitch, int32_t addr)
{
if (!pitch) {
return true;
}
if (pitch < 0) {
int64_t min = addr
+ ((int64_t)s->cirrus_blt_height-1) * pitch;
@@ -715,7 +718,7 @@ static int cirrus_bitblt_videotovideo_patterncopy(CirrusVGAState * s)
s->cirrus_addr_mask));
}
static void cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h)
static int cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h)
{
int sx = 0, sy = 0;
int dx = 0, dy = 0;
@@ -729,6 +732,9 @@ static void cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h)
int width, height;
depth = s->vga.get_bpp(&s->vga) / 8;
if (!depth) {
return 0;
}
s->vga.get_resolution(&s->vga, &width, &height);
/* extra x, y */
@@ -783,6 +789,8 @@ static void cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h)
cirrus_invalidate_region(s, s->cirrus_blt_dstaddr,
s->cirrus_blt_dstpitch, s->cirrus_blt_width,
s->cirrus_blt_height);
return 1;
}
static int cirrus_bitblt_videotovideo_copy(CirrusVGAState * s)
@@ -790,11 +798,9 @@ static int cirrus_bitblt_videotovideo_copy(CirrusVGAState * s)
if (blit_is_unsafe(s))
return 0;
cirrus_do_copy(s, s->cirrus_blt_dstaddr - s->vga.start_addr,
return cirrus_do_copy(s, s->cirrus_blt_dstaddr - s->vga.start_addr,
s->cirrus_blt_srcaddr - s->vga.start_addr,
s->cirrus_blt_width, s->cirrus_blt_height);
return 1;
}
/***************************************
+36 -1
View File
@@ -992,6 +992,34 @@ static uint32_t qxl_crc32(const uint8_t *p, unsigned len)
return crc32(0xffffffff, p, len) ^ 0xffffffff;
}
static bool qxl_rom_monitors_config_changed(QXLRom *rom,
VDAgentMonitorsConfig *monitors_config,
unsigned int max_outputs)
{
int i;
unsigned int monitors_count;
monitors_count = MIN(monitors_config->num_of_monitors, max_outputs);
if (rom->client_monitors_config.count != monitors_count) {
return true;
}
for (i = 0 ; i < rom->client_monitors_config.count ; ++i) {
VDAgentMonConfig *monitor = &monitors_config->monitors[i];
QXLURect *rect = &rom->client_monitors_config.heads[i];
/* monitor->depth ignored */
if ((rect->left != monitor->x) ||
(rect->top != monitor->y) ||
(rect->right != monitor->x + monitor->width) ||
(rect->bottom != monitor->y + monitor->height)) {
return true;
}
}
return false;
}
/* called from main context only */
static int interface_client_monitors_config(QXLInstance *sin,
VDAgentMonitorsConfig *monitors_config)
@@ -1000,6 +1028,7 @@ static int interface_client_monitors_config(QXLInstance *sin,
QXLRom *rom = memory_region_get_ram_ptr(&qxl->rom_bar);
int i;
unsigned max_outputs = ARRAY_SIZE(rom->client_monitors_config.heads);
bool config_changed = false;
if (qxl->revision < 4) {
trace_qxl_client_monitors_config_unsupported_by_device(qxl->id,
@@ -1030,6 +1059,10 @@ static int interface_client_monitors_config(QXLInstance *sin,
}
#endif
config_changed = qxl_rom_monitors_config_changed(rom,
monitors_config,
max_outputs);
memset(&rom->client_monitors_config, 0,
sizeof(rom->client_monitors_config));
rom->client_monitors_config.count = monitors_config->num_of_monitors;
@@ -1059,7 +1092,9 @@ static int interface_client_monitors_config(QXLInstance *sin,
trace_qxl_interrupt_client_monitors_config(qxl->id,
rom->client_monitors_config.count,
rom->client_monitors_config.heads);
qxl_send_events(qxl, QXL_INTERRUPT_CLIENT_MONITORS_CONFIG);
if (config_changed) {
qxl_send_events(qxl, QXL_INTERRUPT_CLIENT_MONITORS_CONFIG);
}
return 1;
}
+1
View File
@@ -347,6 +347,7 @@ static void virgl_cmd_get_capset_info(VirtIOGPU *g,
VIRTIO_GPU_FILL_CMD(info);
memset(&resp, 0, sizeof(resp));
if (info.capset_index == 0) {
resp.capset_id = VIRTIO_GPU_CAPSET_VIRGL;
virgl_renderer_get_cap_set(resp.capset_id,
+1
View File
@@ -84,6 +84,7 @@ static void update_cursor_data_virgl(VirtIOGPU *g,
if (width != s->current_cursor->width ||
height != s->current_cursor->height) {
free(data);
return;
}
+1 -1
View File
@@ -2936,7 +2936,7 @@ static MemoryRegion *acpi_add_rom_blob(AcpiBuildState *build_state,
uint64_t max_size)
{
return rom_add_blob(name, blob->data, acpi_data_len(blob), max_size, -1,
name, acpi_build_update, build_state);
name, acpi_build_update, build_state, NULL);
}
static const VMStateDescription vmstate_acpi_build = {
+1
View File
@@ -988,6 +988,7 @@ static void vtd_context_device_invalidate(IntelIOMMUState *s,
mask = 7; /* Mask bit 2:0 in the SID field */
break;
}
mask = ~mask;
VTD_DPRINTF(INV, "device-selective invalidation source 0x%"PRIx16
" mask %"PRIu16, source_id, mask);
vtd_bus = vtd_find_as_from_bus_num(s, VTD_SID_TO_BUS(source_id));
+1 -1
View File
@@ -75,7 +75,7 @@ static inline void hwsetup_create_rom(HWSetup *hw,
hwaddr base)
{
rom_add_blob("hwsetup", hw->data, TARGET_PAGE_SIZE,
TARGET_PAGE_SIZE, base, NULL, NULL, NULL);
TARGET_PAGE_SIZE, base, NULL, NULL, NULL, NULL);
}
static inline void hwsetup_add_u8(HWSetup *hw, uint8_t u)
+2 -2
View File
@@ -348,8 +348,8 @@ static ssize_t etsec_receive(NetClientState *nc,
eTSEC *etsec = qemu_get_nic_opaque(nc);
#if defined(HEX_DUMP)
fprintf(stderr, "%s receive size:%d\n", etsec->nic->nc.name, size);
qemu_hexdump(buf, stderr, "", size);
fprintf(stderr, "%s receive size:%zd\n", nc->name, size);
qemu_hexdump((void *)buf, stderr, "", size);
#endif
/* Flush is unnecessary as are already in receiving path */
etsec->need_flush = false;
+8
View File
@@ -474,6 +474,14 @@ static void rx_init_frame(eTSEC *etsec, const uint8_t *buf, size_t size)
/* CRC padding (We don't have to compute the CRC) */
etsec->rx_padding = 4;
/*
* Ensure that payload length + CRC length is at least 802.3
* minimum MTU size bytes long (64)
*/
if (etsec->rx_buffer_len < 60) {
etsec->rx_padding += 60 - etsec->rx_buffer_len;
}
etsec->rx_first_in_frame = 1;
etsec->rx_remaining_data = etsec->rx_buffer_len;
RING_DEBUG("%s: rx_buffer_len:%u rx_padding+crc:%u\n", __func__,
+1 -1
View File
@@ -393,7 +393,7 @@ static void mcf_fec_write(void *opaque, hwaddr addr,
s->tx_descriptor = s->etdsr;
break;
case 0x188:
s->emrbr = value & 0x7f0;
s->emrbr = value > 0 ? value & 0x7F0 : 0x7F0;
break;
default:
hw_error("mcf_fec_write Bad address 0x%x\n", (int)addr);
+5
View File
@@ -2290,6 +2290,11 @@ static void spapr_add_lmbs(DeviceState *dev, uint64_t addr_start, uint64_t size,
drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
drck->attach(drc, dev, fdt, fdt_offset, !dev->hotplugged, errp);
addr += SPAPR_MEMORY_BLOCK_SIZE;
if (!dev->hotplugged) {
/* guests expect coldplugged LMBs to be pre-allocated */
drck->set_allocation_state(drc, SPAPR_DR_ALLOCATION_STATE_USABLE);
drck->set_isolation_state(drc, SPAPR_DR_ISOLATION_STATE_UNISOLATED);
}
}
/* send hotplug notification to the
* guest only in case of hotplugged memory
+1 -1
View File
@@ -838,7 +838,7 @@ static Property virtio_crypto_properties[] = {
static void virtio_crypto_get_config(VirtIODevice *vdev, uint8_t *config)
{
VirtIOCrypto *c = VIRTIO_CRYPTO(vdev);
struct virtio_crypto_config crypto_cfg;
struct virtio_crypto_config crypto_cfg = {};
/*
* Virtio-crypto device conforms to VIRTIO 1.0 which is always LE,
+4 -1
View File
@@ -1580,7 +1580,8 @@ static void virtio_pci_device_plugged(DeviceState *d, Error **errp)
* Virtio capabilities present without
* VIRTIO_F_VERSION_1 confuses guests
*/
if (!virtio_has_feature(vdev->host_features, VIRTIO_F_VERSION_1)) {
if (!proxy->ignore_backend_features &&
!virtio_has_feature(vdev->host_features, VIRTIO_F_VERSION_1)) {
virtio_pci_disable_modern(proxy);
if (!legacy) {
@@ -1852,6 +1853,8 @@ static Property virtio_pci_properties[] = {
VIRTIO_PCI_FLAG_DISABLE_PCIE_BIT, false),
DEFINE_PROP_BIT("page-per-vq", VirtIOPCIProxy, flags,
VIRTIO_PCI_FLAG_PAGE_PER_VQ_BIT, false),
DEFINE_PROP_BOOL("x-ignore-backend-features", VirtIOPCIProxy,
ignore_backend_features, false),
DEFINE_PROP_END_OF_LIST(),
};
+1
View File
@@ -153,6 +153,7 @@ struct VirtIOPCIProxy {
int config_cap;
uint32_t flags;
bool disable_modern;
bool ignore_backend_features;
OnOffAuto disable_legacy;
uint32_t class_code;
uint32_t nvectors;
+4
View File
@@ -18,6 +18,10 @@
.driver = "intel-iommu",\
.property = "x-buggy-eim",\
.value = "true",\
},{\
.driver = "virtio-pci",\
.property = "x-ignore-backend-features",\
.value = "on",\
},
#define HW_COMPAT_2_6 \
+3 -3
View File
@@ -180,7 +180,7 @@ MemoryRegion *rom_add_blob(const char *name, const void *blob, size_t len,
size_t max_len, hwaddr addr,
const char *fw_file_name,
FWCfgReadCallback fw_callback,
void *callback_opaque);
void *callback_opaque, AddressSpace *as);
int rom_add_elf_program(const char *name, void *data, size_t datasize,
size_t romsize, hwaddr addr, AddressSpace *as);
int rom_check_and_register_reset(void);
@@ -194,7 +194,7 @@ void hmp_info_roms(Monitor *mon, const QDict *qdict);
#define rom_add_file_fixed(_f, _a, _i) \
rom_add_file(_f, NULL, _a, _i, false, NULL, NULL)
#define rom_add_blob_fixed(_f, _b, _l, _a) \
rom_add_blob(_f, _b, _l, _l, _a, NULL, NULL, NULL)
rom_add_blob(_f, _b, _l, _l, _a, NULL, NULL, NULL, NULL)
#define rom_add_file_mr(_f, _mr, _i) \
rom_add_file(_f, NULL, 0, _i, false, _mr, NULL)
#define rom_add_file_as(_f, _as, _i) \
@@ -202,7 +202,7 @@ void hmp_info_roms(Monitor *mon, const QDict *qdict);
#define rom_add_file_fixed_as(_f, _a, _i, _as) \
rom_add_file(_f, NULL, _a, _i, false, NULL, _as)
#define rom_add_blob_fixed_as(_f, _b, _l, _a, _as) \
rom_add_blob(_f, _b, _l, _l, _a, NULL, NULL, _as)
rom_add_blob(_f, _b, _l, _l, _a, NULL, NULL, NULL, _as)
#define PC_ROM_MIN_VGA 0xc0000
#define PC_ROM_MIN_OPTION 0xc8000
+20 -20
View File
@@ -6,8 +6,8 @@
msgid ""
msgstr ""
"Project-Id-Version: QEMU 2.6.50\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-06-26 10:16+0300\n"
"Report-Msgid-Bugs-To: qemu-devel@nongnu.org\n"
"POT-Creation-Date: 2016-12-13 21:46+0000\n"
"PO-Revision-Date: 2016-06-09 15:54+0300\n"
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
"Language-Team: Bulgarian <dict@ludost.net>\n"
@@ -17,74 +17,74 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ui/gtk.c:274
#: ui/gtk.c:275
msgid " - Press Ctrl+Alt+G to release grab"
msgstr " — натиснете Ctrl+Alt+G, за да освободите фокуса"
#: ui/gtk.c:278
#: ui/gtk.c:279
msgid " [Paused]"
msgstr " [пауза]"
#: ui/gtk.c:1906
#: ui/gtk.c:1922
msgid "_Pause"
msgstr "_Пауза"
#: ui/gtk.c:1912
#: ui/gtk.c:1928
msgid "_Reset"
msgstr "_Рестартиране"
#: ui/gtk.c:1915
#: ui/gtk.c:1931
msgid "Power _Down"
msgstr "_Изключване"
#: ui/gtk.c:1921
#: ui/gtk.c:1937
msgid "_Quit"
msgstr "_Спиране на програмата"
#: ui/gtk.c:2013
#: ui/gtk.c:2029
msgid "_Fullscreen"
msgstr "На _цял екран"
#: ui/gtk.c:2016
#: ui/gtk.c:2032
msgid "_Copy"
msgstr "_Копиране"
#: ui/gtk.c:2032
#: ui/gtk.c:2048
msgid "Zoom _In"
msgstr "_Увеличаване"
#: ui/gtk.c:2039
#: ui/gtk.c:2055
msgid "Zoom _Out"
msgstr "_Намаляване"
#: ui/gtk.c:2046
#: ui/gtk.c:2062
msgid "Best _Fit"
msgstr "По_местване"
#: ui/gtk.c:2053
#: ui/gtk.c:2069
msgid "Zoom To _Fit"
msgstr "Напас_ване"
#: ui/gtk.c:2059
#: ui/gtk.c:2075
msgid "Grab On _Hover"
msgstr "Прихващане при посо_чване"
#: ui/gtk.c:2062
#: ui/gtk.c:2078
msgid "_Grab Input"
msgstr "Прихващане на _фокуса"
#: ui/gtk.c:2091
#: ui/gtk.c:2107
msgid "Show _Tabs"
msgstr "Подпро_зорци"
#: ui/gtk.c:2094
#: ui/gtk.c:2110
msgid "Detach Tab"
msgstr "Към самостоятелен подпрозорец"
#: ui/gtk.c:2106
#: ui/gtk.c:2122
msgid "_Machine"
msgstr "_Машина"
#: ui/gtk.c:2111
#: ui/gtk.c:2127
msgid "_View"
msgstr "_Изглед"
+22 -18
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: QEMU 1.4.50\n"
"Report-Msgid-Bugs-To: qemu-devel@nongnu.org\n"
"POT-Creation-Date: 2016-04-18 14:50+0100\n"
"POT-Creation-Date: 2016-12-13 21:46+0000\n"
"PO-Revision-Date: 2012-02-28 16:00+0100\n"
"Last-Translator: Kevin Wolf <kwolf@redhat.com>\n"
"Language-Team: Deutsch <de@li.org>\n"
@@ -16,70 +16,74 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
#: ui/gtk.c:273
#: ui/gtk.c:275
msgid " - Press Ctrl+Alt+G to release grab"
msgstr " - Strg+Alt+G drücken, um Eingabegeräte freizugeben"
#: ui/gtk.c:277
#: ui/gtk.c:279
msgid " [Paused]"
msgstr " [Angehalten]"
#: ui/gtk.c:1833
#: ui/gtk.c:1922
msgid "_Pause"
msgstr "_Angehalten"
#: ui/gtk.c:1839
#: ui/gtk.c:1928
msgid "_Reset"
msgstr "_Reset"
#: ui/gtk.c:1842
#: ui/gtk.c:1931
msgid "Power _Down"
msgstr "_Herunterfahren"
#: ui/gtk.c:1848
#: ui/gtk.c:1937
msgid "_Quit"
msgstr "_Beenden"
#: ui/gtk.c:1940
#: ui/gtk.c:2029
msgid "_Fullscreen"
msgstr "_Vollbild"
#: ui/gtk.c:1954
#: ui/gtk.c:2032
msgid "_Copy"
msgstr "_Kopieren"
#: ui/gtk.c:2048
msgid "Zoom _In"
msgstr "_Heranzoomen"
#: ui/gtk.c:1961
#: ui/gtk.c:2055
msgid "Zoom _Out"
msgstr "_Wegzoomen"
#: ui/gtk.c:1968
#: ui/gtk.c:2062
msgid "Best _Fit"
msgstr "_Einpassen"
#: ui/gtk.c:1975
#: ui/gtk.c:2069
msgid "Zoom To _Fit"
msgstr "Auf _Fenstergröße skalieren"
#: ui/gtk.c:1981
#: ui/gtk.c:2075
msgid "Grab On _Hover"
msgstr "Tastatur _automatisch einfangen"
#: ui/gtk.c:1984
#: ui/gtk.c:2078
msgid "_Grab Input"
msgstr "_Eingabegeräte einfangen"
#: ui/gtk.c:2013
#: ui/gtk.c:2107
msgid "Show _Tabs"
msgstr "Reiter anzeigen"
#: ui/gtk.c:2016
#: ui/gtk.c:2110
msgid "Detach Tab"
msgstr "Reiter abtrennen"
#: ui/gtk.c:2028
#: ui/gtk.c:2122
msgid "_Machine"
msgstr "_Maschine"
#: ui/gtk.c:2033
#: ui/gtk.c:2127
msgid "_View"
msgstr "_Ansicht"
+22 -18
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: QEMU 1.4.50\n"
"Report-Msgid-Bugs-To: qemu-devel@nongnu.org\n"
"POT-Creation-Date: 2016-04-18 14:50+0100\n"
"POT-Creation-Date: 2016-12-13 21:46+0000\n"
"PO-Revision-Date: 2014-07-28 23:25+0200\n"
"Last-Translator: Aurelien Jarno <aurelien@aurel32.net>\n"
"Language-Team: French <FR@li.org>\n"
@@ -17,70 +17,74 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 1.4\n"
#: ui/gtk.c:273
#: ui/gtk.c:275
msgid " - Press Ctrl+Alt+G to release grab"
msgstr "- Appuyer sur Ctrl+Alt+G pour arrêter la capture"
#: ui/gtk.c:277
#: ui/gtk.c:279
msgid " [Paused]"
msgstr " [En pause]"
#: ui/gtk.c:1833
#: ui/gtk.c:1922
msgid "_Pause"
msgstr "_Pause"
#: ui/gtk.c:1839
#: ui/gtk.c:1928
msgid "_Reset"
msgstr "_Réinitialiser"
#: ui/gtk.c:1842
#: ui/gtk.c:1931
msgid "Power _Down"
msgstr "_Éteindre"
#: ui/gtk.c:1848
#: ui/gtk.c:1937
msgid "_Quit"
msgstr "_Quitter"
#: ui/gtk.c:1940
#: ui/gtk.c:2029
msgid "_Fullscreen"
msgstr "Mode _plein écran"
#: ui/gtk.c:1954
#: ui/gtk.c:2032
msgid "_Copy"
msgstr "_Copier"
#: ui/gtk.c:2048
msgid "Zoom _In"
msgstr "Zoom _avant"
#: ui/gtk.c:1961
#: ui/gtk.c:2055
msgid "Zoom _Out"
msgstr "_Zoom arrière"
#: ui/gtk.c:1968
#: ui/gtk.c:2062
msgid "Best _Fit"
msgstr "Zoom _idéal"
#: ui/gtk.c:1975
#: ui/gtk.c:2069
msgid "Zoom To _Fit"
msgstr "Zoomer pour a_juster"
#: ui/gtk.c:1981
#: ui/gtk.c:2075
msgid "Grab On _Hover"
msgstr "Capturer en _survolant"
#: ui/gtk.c:1984
#: ui/gtk.c:2078
msgid "_Grab Input"
msgstr "_Capturer les entrées"
#: ui/gtk.c:2013
#: ui/gtk.c:2107
msgid "Show _Tabs"
msgstr "Montrer les _onglets"
#: ui/gtk.c:2016
#: ui/gtk.c:2110
msgid "Detach Tab"
msgstr "_Détacher l'onglet"
#: ui/gtk.c:2028
#: ui/gtk.c:2122
msgid "_Machine"
msgstr "_Machine"
#: ui/gtk.c:2033
#: ui/gtk.c:2127
msgid "_View"
msgstr "_Vue"
+22 -18
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: QEMU 1.4.50\n"
"Report-Msgid-Bugs-To: qemu-devel@nongnu.org\n"
"POT-Creation-Date: 2016-04-18 14:50+0100\n"
"POT-Creation-Date: 2016-12-13 21:46+0000\n"
"PO-Revision-Date: 2013-05-06 20:42+0200\n"
"Last-Translator: Ákos Kovács <akoskovacs@gmx.com>\n"
"Language-Team: Hungarian <hu@li.org>\n"
@@ -15,73 +15,77 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ui/gtk.c:273
#: ui/gtk.c:275
msgid " - Press Ctrl+Alt+G to release grab"
msgstr " - Nyomj Ctrl+Alt+G-t a bemeneti eszközök elengedéséhez"
#: ui/gtk.c:277
#: ui/gtk.c:279
msgid " [Paused]"
msgstr " [Megállítva]"
#: ui/gtk.c:1833
#: ui/gtk.c:1922
msgid "_Pause"
msgstr "_Megállítás"
#: ui/gtk.c:1839
#: ui/gtk.c:1928
msgid "_Reset"
msgstr "Új_raindítás"
#: ui/gtk.c:1842
#: ui/gtk.c:1931
msgid "Power _Down"
msgstr "_Leállítás"
#: ui/gtk.c:1848
#: ui/gtk.c:1937
msgid "_Quit"
msgstr ""
#: ui/gtk.c:1940
#: ui/gtk.c:2029
msgid "_Fullscreen"
msgstr ""
#: ui/gtk.c:1954
#: ui/gtk.c:2032
msgid "_Copy"
msgstr ""
#: ui/gtk.c:2048
#, fuzzy
msgid "Zoom _In"
msgstr "Ablakmérethez _igazítás"
#: ui/gtk.c:1961
#: ui/gtk.c:2055
#, fuzzy
msgid "Zoom _Out"
msgstr "Ablakmérethez _igazítás"
#: ui/gtk.c:1968
#: ui/gtk.c:2062
msgid "Best _Fit"
msgstr ""
#: ui/gtk.c:1975
#: ui/gtk.c:2069
msgid "Zoom To _Fit"
msgstr "Ablakmérethez _igazítás"
#: ui/gtk.c:1981
#: ui/gtk.c:2075
msgid "Grab On _Hover"
msgstr "Automatikus _elfogás"
#: ui/gtk.c:1984
#: ui/gtk.c:2078
msgid "_Grab Input"
msgstr "_Bemeneti eszközök megragadása"
#: ui/gtk.c:2013
#: ui/gtk.c:2107
msgid "Show _Tabs"
msgstr "_Fülek megjelenítése"
#: ui/gtk.c:2016
#: ui/gtk.c:2110
msgid "Detach Tab"
msgstr ""
#: ui/gtk.c:2028
#: ui/gtk.c:2122
msgid "_Machine"
msgstr "_Gép"
#: ui/gtk.c:2033
#: ui/gtk.c:2127
msgid "_View"
msgstr "_Nézet"
+23 -19
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: QEMU 1.4.50\n"
"Report-Msgid-Bugs-To: qemu-devel@nongnu.org\n"
"POT-Creation-Date: 2016-04-18 14:50+0100\n"
"POT-Creation-Date: 2016-12-13 21:46+0000\n"
"PO-Revision-Date: 2014-07-29 08:25+0200\n"
"Last-Translator: Paolo Bonzini <pbonzini@redhat.com>\n"
"Language-Team: Italian <it@li.org>\n"
@@ -16,70 +16,74 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
#: ui/gtk.c:273
#: ui/gtk.c:275
msgid " - Press Ctrl+Alt+G to release grab"
msgstr " - Premere Ctrl+Alt+G per rilasciare l'input"
#: ui/gtk.c:277
#: ui/gtk.c:279
msgid " [Paused]"
msgstr " [Pausa]"
#: ui/gtk.c:1833
#: ui/gtk.c:1922
msgid "_Pause"
msgstr "_Pausa"
#: ui/gtk.c:1839
#: ui/gtk.c:1928
msgid "_Reset"
msgstr "_Reset"
#: ui/gtk.c:1842
#: ui/gtk.c:1931
msgid "Power _Down"
msgstr "_Spegni"
#: ui/gtk.c:1848
#: ui/gtk.c:1937
msgid "_Quit"
msgstr "_Esci"
#: ui/gtk.c:1940
#: ui/gtk.c:2029
msgid "_Fullscreen"
msgstr ""
msgstr "A t_utto schermo"
#: ui/gtk.c:1954
#: ui/gtk.c:2032
msgid "_Copy"
msgstr "_Copia"
#: ui/gtk.c:2048
msgid "Zoom _In"
msgstr "_Aumenta zoom"
#: ui/gtk.c:1961
#: ui/gtk.c:2055
msgid "Zoom _Out"
msgstr "_Riduci zoom"
#: ui/gtk.c:1968
#: ui/gtk.c:2062
msgid "Best _Fit"
msgstr "A_nnulla zoom"
#: ui/gtk.c:1975
#: ui/gtk.c:2069
msgid "Zoom To _Fit"
msgstr "Adatta alla _finestra"
#: ui/gtk.c:1981
#: ui/gtk.c:2075
msgid "Grab On _Hover"
msgstr "Cattura _automatica input"
#: ui/gtk.c:1984
#: ui/gtk.c:2078
msgid "_Grab Input"
msgstr "_Cattura input"
#: ui/gtk.c:2013
#: ui/gtk.c:2107
msgid "Show _Tabs"
msgstr "Mostra _tab"
#: ui/gtk.c:2016
#: ui/gtk.c:2110
msgid "Detach Tab"
msgstr "_Sposta in una nuova finestra"
#: ui/gtk.c:2028
#: ui/gtk.c:2122
msgid "_Machine"
msgstr "_Macchina virtuale"
#: ui/gtk.c:2033
#: ui/gtk.c:2127
msgid "_View"
msgstr "_Visualizza"
+23 -19
View File
@@ -5,9 +5,9 @@
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: QEMU 2.5.92\n"
"Project-Id-Version: QEMU 2.7.93\n"
"Report-Msgid-Bugs-To: qemu-devel@nongnu.org\n"
"POT-Creation-Date: 2016-04-18 14:50+0100\n"
"POT-Creation-Date: 2016-12-13 21:46+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,70 +16,74 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ui/gtk.c:273
#: ui/gtk.c:275
msgid " - Press Ctrl+Alt+G to release grab"
msgstr ""
#: ui/gtk.c:277
#: ui/gtk.c:279
msgid " [Paused]"
msgstr ""
#: ui/gtk.c:1833
#: ui/gtk.c:1922
msgid "_Pause"
msgstr ""
#: ui/gtk.c:1839
#: ui/gtk.c:1928
msgid "_Reset"
msgstr ""
#: ui/gtk.c:1842
#: ui/gtk.c:1931
msgid "Power _Down"
msgstr ""
#: ui/gtk.c:1848
#: ui/gtk.c:1937
msgid "_Quit"
msgstr ""
#: ui/gtk.c:1940
#: ui/gtk.c:2029
msgid "_Fullscreen"
msgstr ""
#: ui/gtk.c:1954
#: ui/gtk.c:2032
msgid "_Copy"
msgstr ""
#: ui/gtk.c:2048
msgid "Zoom _In"
msgstr ""
#: ui/gtk.c:1961
#: ui/gtk.c:2055
msgid "Zoom _Out"
msgstr ""
#: ui/gtk.c:1968
#: ui/gtk.c:2062
msgid "Best _Fit"
msgstr ""
#: ui/gtk.c:1975
#: ui/gtk.c:2069
msgid "Zoom To _Fit"
msgstr ""
#: ui/gtk.c:1981
#: ui/gtk.c:2075
msgid "Grab On _Hover"
msgstr ""
#: ui/gtk.c:1984
#: ui/gtk.c:2078
msgid "_Grab Input"
msgstr ""
#: ui/gtk.c:2013
#: ui/gtk.c:2107
msgid "Show _Tabs"
msgstr ""
#: ui/gtk.c:2016
#: ui/gtk.c:2110
msgid "Detach Tab"
msgstr ""
#: ui/gtk.c:2028
#: ui/gtk.c:2122
msgid "_Machine"
msgstr ""
#: ui/gtk.c:2033
#: ui/gtk.c:2127
msgid "_View"
msgstr ""
+22 -18
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: QEMU 1.4.50\n"
"Report-Msgid-Bugs-To: qemu-devel@nongnu.org\n"
"POT-Creation-Date: 2016-04-18 14:50+0100\n"
"POT-Creation-Date: 2016-12-13 21:46+0000\n"
"PO-Revision-Date: 2013-04-22 18:35+0300\n"
"Last-Translator: Ozan Çağlayan <ozancag@gmail.com>\n"
"Language-Team: Türkçe <>\n"
@@ -17,72 +17,76 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Gtranslator 2.91.6\n"
#: ui/gtk.c:273
#: ui/gtk.c:275
msgid " - Press Ctrl+Alt+G to release grab"
msgstr " - Yakalamayı durdurmak için Ctrl+Alt+G tuşlarına basın"
#: ui/gtk.c:277
#: ui/gtk.c:279
msgid " [Paused]"
msgstr " [Duraklatıldı]"
#: ui/gtk.c:1833
#: ui/gtk.c:1922
msgid "_Pause"
msgstr "_Duraklat"
#: ui/gtk.c:1839
#: ui/gtk.c:1928
msgid "_Reset"
msgstr "_Sıfırla"
#: ui/gtk.c:1842
#: ui/gtk.c:1931
msgid "Power _Down"
msgstr "_Kapat"
#: ui/gtk.c:1848
#: ui/gtk.c:1937
msgid "_Quit"
msgstr ""
#: ui/gtk.c:1940
#: ui/gtk.c:2029
msgid "_Fullscreen"
msgstr ""
#: ui/gtk.c:1954
#: ui/gtk.c:2032
msgid "_Copy"
msgstr ""
#: ui/gtk.c:2048
#, fuzzy
msgid "Zoom _In"
msgstr "Yakınlaş ve Sığ_dır"
#: ui/gtk.c:1961
#: ui/gtk.c:2055
#, fuzzy
msgid "Zoom _Out"
msgstr "Yakınlaş ve Sığ_dır"
#: ui/gtk.c:1968
#: ui/gtk.c:2062
msgid "Best _Fit"
msgstr ""
#: ui/gtk.c:1975
#: ui/gtk.c:2069
msgid "Zoom To _Fit"
msgstr "Yakınlaş ve Sığ_dır"
#: ui/gtk.c:1981
#: ui/gtk.c:2075
msgid "Grab On _Hover"
msgstr "Ü_zerindeyken Yakala"
#: ui/gtk.c:1984
#: ui/gtk.c:2078
msgid "_Grab Input"
msgstr "Girdiyi _Yakala"
#: ui/gtk.c:2013
#: ui/gtk.c:2107
msgid "Show _Tabs"
msgstr "Se_kmeleri Göster"
#: ui/gtk.c:2016
#: ui/gtk.c:2110
msgid "Detach Tab"
msgstr ""
#: ui/gtk.c:2028
#: ui/gtk.c:2122
msgid "_Machine"
msgstr "_Makine"
#: ui/gtk.c:2033
#: ui/gtk.c:2127
msgid "_View"
msgstr "_Görüntüle"
+22 -18
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: QEMU 2.2\n"
"Report-Msgid-Bugs-To: qemu-devel@nongnu.org\n"
"POT-Creation-Date: 2016-04-18 14:50+0100\n"
"POT-Creation-Date: 2016-12-13 21:46+0000\n"
"PO-Revision-Date: 2014-07-31 10:00+0800\n"
"Last-Translator: Fam Zheng <famz@redhat.com>\n"
"Language-Team: Chinese <zh@li.org>\n"
@@ -17,70 +17,74 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 1.4\n"
#: ui/gtk.c:273
#: ui/gtk.c:275
msgid " - Press Ctrl+Alt+G to release grab"
msgstr " - 按下 Ctrl+Alt+G 取消捕获"
#: ui/gtk.c:277
#: ui/gtk.c:279
msgid " [Paused]"
msgstr " [已暂停]"
#: ui/gtk.c:1833
#: ui/gtk.c:1922
msgid "_Pause"
msgstr "暂停(_P)"
#: ui/gtk.c:1839
#: ui/gtk.c:1928
msgid "_Reset"
msgstr "重置(_R)"
#: ui/gtk.c:1842
#: ui/gtk.c:1931
msgid "Power _Down"
msgstr "关闭电源(_D)"
#: ui/gtk.c:1848
#: ui/gtk.c:1937
msgid "_Quit"
msgstr "退出(_Q)"
#: ui/gtk.c:1940
#: ui/gtk.c:2029
msgid "_Fullscreen"
msgstr "全屏(_F)"
#: ui/gtk.c:1954
#: ui/gtk.c:2032
msgid "_Copy"
msgstr "复制(_C)"
#: ui/gtk.c:2048
msgid "Zoom _In"
msgstr "放大(_I)"
#: ui/gtk.c:1961
#: ui/gtk.c:2055
msgid "Zoom _Out"
msgstr "缩小(_O)"
#: ui/gtk.c:1968
#: ui/gtk.c:2062
msgid "Best _Fit"
msgstr "最合适大小(_F)"
#: ui/gtk.c:1975
#: ui/gtk.c:2069
msgid "Zoom To _Fit"
msgstr "缩放以适应大小(_F)"
#: ui/gtk.c:1981
#: ui/gtk.c:2075
msgid "Grab On _Hover"
msgstr "鼠标经过时捕获(_H)"
#: ui/gtk.c:1984
#: ui/gtk.c:2078
msgid "_Grab Input"
msgstr "捕获输入(_G)"
#: ui/gtk.c:2013
#: ui/gtk.c:2107
msgid "Show _Tabs"
msgstr "显示标签页(_T)"
#: ui/gtk.c:2016
#: ui/gtk.c:2110
msgid "Detach Tab"
msgstr "分离标签页"
#: ui/gtk.c:2028
#: ui/gtk.c:2122
msgid "_Machine"
msgstr "虚拟机(_M)"
#: ui/gtk.c:2033
#: ui/gtk.c:2127
msgid "_View"
msgstr "视图(_V)"
+178 -168
View File
File diff suppressed because it is too large. Load diff
+110 -108
View File
@@ -6,7 +6,7 @@
{ 'include': 'common.json' }
##
# @SnapshotInfo
# @SnapshotInfo:
#
# @id: unique snapshot id
#
@@ -213,7 +213,7 @@
'*filename': 'str' } }
##
# @BlockdevCacheInfo
# @BlockdevCacheInfo:
#
# Cache mode information for a block device
#
@@ -378,7 +378,7 @@
# @offset: if present, the image file stores the data for this range in
# raw format at the given offset.
#
# Since 1.7
# Since: 1.7
##
{ 'struct': 'BlockDeviceMapEntry',
'data': { 'start': 'int', 'length': 'int', 'depth': 'int', 'zero': 'bool',
@@ -790,7 +790,7 @@
'*node-name': 'str', 'password': 'str'} }
##
# @block_resize
# @block_resize:
#
# Resize a block image while a guest is running.
#
@@ -812,7 +812,7 @@
'size': 'int' }}
##
# @NewImageMode
# @NewImageMode:
#
# An enumeration that tells QEMU how to set the backing file path in
# a new image file.
@@ -829,7 +829,7 @@
'data': [ 'existing', 'absolute-paths' ] }
##
# @BlockdevSnapshotSync
# @BlockdevSnapshotSync:
#
# Either @device or @node-name must be set but not both.
#
@@ -852,7 +852,7 @@
'*format': 'str', '*mode': 'NewImageMode' } }
##
# @BlockdevSnapshot
# @BlockdevSnapshot:
#
# @node: device or node name that will have a snapshot created.
#
@@ -861,13 +861,13 @@
# It must not have a current backing file (this can be
# achieved by passing "backing": "" to blockdev-add).
#
# Since 2.5
# Since: 2.5
##
{ 'struct': 'BlockdevSnapshot',
'data': { 'node': 'str', 'overlay': 'str' } }
##
# @DriveBackup
# @DriveBackup:
#
# @job-id: #optional identifier for the newly-created block job. If
# omitted, the device name will be used. (Since 2.7)
@@ -905,9 +905,9 @@
# default 'report' (no limitations, since this applies to
# a different block device than @device).
#
# Note that @on-source-error and @on-target-error only affect background I/O.
# If an error occurs during a guest write request, the device's rerror/werror
# actions will be used.
# Note: @on-source-error and @on-target-error only affect background
# I/O. If an error occurs during a guest write request, the device's
# rerror/werror actions will be used.
#
# Since: 1.6
##
@@ -919,7 +919,7 @@
'*on-target-error': 'BlockdevOnError' } }
##
# @BlockdevBackup
# @BlockdevBackup:
#
# @job-id: #optional identifier for the newly-created block job. If
# omitted, the device name will be used. (Since 2.7)
@@ -946,9 +946,9 @@
# default 'report' (no limitations, since this applies to
# a different block device than @device).
#
# Note that @on-source-error and @on-target-error only affect background I/O.
# If an error occurs during a guest write request, the device's rerror/werror
# actions will be used.
# Note: @on-source-error and @on-target-error only affect background
# I/O. If an error occurs during a guest write request, the device's
# rerror/werror actions will be used.
#
# Since: 2.3
##
@@ -961,7 +961,7 @@
'*on-target-error': 'BlockdevOnError' } }
##
# @blockdev-snapshot-sync
# @blockdev-snapshot-sync:
#
# Generates a synchronous snapshot of a block device.
#
@@ -970,26 +970,26 @@
# Returns: nothing on success
# If @device is not a valid block device, DeviceNotFound
#
# Since 0.14.0
# Since: 0.14.0
##
{ 'command': 'blockdev-snapshot-sync',
'data': 'BlockdevSnapshotSync' }
##
# @blockdev-snapshot
# @blockdev-snapshot:
#
# Generates a snapshot of a block device.
#
# For the arguments, see the documentation of BlockdevSnapshot.
#
# Since 2.5
# Since: 2.5
##
{ 'command': 'blockdev-snapshot',
'data': 'BlockdevSnapshot' }
##
# @change-backing-file
# @change-backing-file:
#
# Change the backing file in the image file metadata. This does not
# cause QEMU to reopen the image file to reparse the backing filename
@@ -1016,7 +1016,7 @@
'backing-file': 'str' } }
##
# @block-commit
# @block-commit:
#
# Live commit of data from overlay image nodes into backing nodes - i.e.,
# writes data between 'top' and 'base' into 'base'.
@@ -1079,7 +1079,7 @@
'*backing-file': 'str', '*speed': 'int' } }
##
# @drive-backup
# @drive-backup:
#
# Start a point-in-time copy of a block device to a new destination. The
# status of ongoing drive-backup operations can be checked with
@@ -1092,13 +1092,13 @@
# Returns: nothing on success
# If @device is not a valid block device, GenericError
#
# Since 1.6
# Since: 1.6
##
{ 'command': 'drive-backup', 'boxed': true,
'data': 'DriveBackup' }
##
# @blockdev-backup
# @blockdev-backup:
#
# Start a point-in-time copy of a block device to a new destination. The
# status of ongoing blockdev-backup operations can be checked with
@@ -1111,25 +1111,25 @@
# Returns: nothing on success
# If @device is not a valid block device, DeviceNotFound
#
# Since 2.3
# Since: 2.3
##
{ 'command': 'blockdev-backup', 'boxed': true,
'data': 'BlockdevBackup' }
##
# @query-named-block-nodes
# @query-named-block-nodes:
#
# Get the named block driver list
#
# Returns: the list of BlockDeviceInfo
#
# Since 2.0
# Since: 2.0
##
{ 'command': 'query-named-block-nodes', 'returns': [ 'BlockDeviceInfo' ] }
##
# @drive-mirror
# @drive-mirror:
#
# Start mirroring a block device's writes to a new destination.
#
@@ -1138,13 +1138,13 @@
# Returns: nothing on success
# If @device is not a valid block device, GenericError
#
# Since 1.3
# Since: 1.3
##
{ 'command': 'drive-mirror', 'boxed': true,
'data': 'DriveMirror' }
##
# DriveMirror
# @DriveMirror:
#
# A set of parameters describing drive mirror setup.
#
@@ -1198,7 +1198,7 @@
# written. Both will result in identical contents.
# Default is true. (Since 2.4)
#
# Since 1.3
# Since: 1.3
##
{ 'struct': 'DriveMirror',
'data': { '*job-id': 'str', 'device': 'str', 'target': 'str',
@@ -1210,19 +1210,19 @@
'*unmap': 'bool' } }
##
# @BlockDirtyBitmap
# @BlockDirtyBitmap:
#
# @node: name of device/node which the bitmap is tracking
#
# @name: name of the dirty bitmap
#
# Since 2.4
# Since: 2.4
##
{ 'struct': 'BlockDirtyBitmap',
'data': { 'node': 'str', 'name': 'str' } }
##
# @BlockDirtyBitmapAdd
# @BlockDirtyBitmapAdd:
#
# @node: name of device/node which the bitmap is tracking
#
@@ -1231,13 +1231,13 @@
# @granularity: #optional the bitmap granularity, default is 64k for
# block-dirty-bitmap-add
#
# Since 2.4
# Since: 2.4
##
{ 'struct': 'BlockDirtyBitmapAdd',
'data': { 'node': 'str', 'name': 'str', '*granularity': 'uint32' } }
##
# @block-dirty-bitmap-add
# @block-dirty-bitmap-add:
#
# Create a dirty bitmap with a name on the node
#
@@ -1245,13 +1245,13 @@
# If @node is not a valid block device or node, DeviceNotFound
# If @name is already taken, GenericError with an explanation
#
# Since 2.4
# Since: 2.4
##
{ 'command': 'block-dirty-bitmap-add',
'data': 'BlockDirtyBitmapAdd' }
##
# @block-dirty-bitmap-remove
# @block-dirty-bitmap-remove:
#
# Remove a dirty bitmap on the node
#
@@ -1260,13 +1260,13 @@
# If @name is not found, GenericError with an explanation
# if @name is frozen by an operation, GenericError
#
# Since 2.4
# Since: 2.4
##
{ 'command': 'block-dirty-bitmap-remove',
'data': 'BlockDirtyBitmap' }
##
# @block-dirty-bitmap-clear
# @block-dirty-bitmap-clear:
#
# Clear (reset) a dirty bitmap on the device
#
@@ -1274,13 +1274,13 @@
# If @node is not a valid block device, DeviceNotFound
# If @name is not found, GenericError with an explanation
#
# Since 2.4
# Since: 2.4
##
{ 'command': 'block-dirty-bitmap-clear',
'data': 'BlockDirtyBitmap' }
##
# @blockdev-mirror
# @blockdev-mirror:
#
# Start mirroring a block device's writes to a new destination.
#
@@ -1321,7 +1321,7 @@
#
# Returns: nothing on success.
#
# Since 2.6
# Since: 2.6
##
{ 'command': 'blockdev-mirror',
'data': { '*job-id': 'str', 'device': 'str', 'target': 'str',
@@ -1368,7 +1368,7 @@
'data': 'BlockIOThrottle' }
##
# BlockIOThrottle
# @BlockIOThrottle:
#
# A set of parameters describing block throttling.
#
@@ -1650,7 +1650,7 @@
{ 'command': 'block-job-complete', 'data': { 'device': 'str' } }
##
# @BlockdevDiscardOptions
# @BlockdevDiscardOptions:
#
# Determines how to handle discard requests.
#
@@ -1663,7 +1663,7 @@
'data': [ 'ignore', 'unmap' ] }
##
# @BlockdevDetectZeroesOptions
# @BlockdevDetectZeroesOptions:
#
# Describes the operation mode for the automatic conversion of plain
# zero writes by the OS to driver specific optimized zero write commands.
@@ -1679,7 +1679,7 @@
'data': [ 'off', 'on', 'unmap' ] }
##
# @BlockdevAioOptions
# @BlockdevAioOptions:
#
# Selects the AIO backend to handle I/O requests
#
@@ -1692,7 +1692,7 @@
'data': [ 'threads', 'native' ] }
##
# @BlockdevCacheOptions
# @BlockdevCacheOptions:
#
# Includes cache-related options for block devices
#
@@ -1708,13 +1708,17 @@
'*no-flush': 'bool' } }
##
# @BlockdevDriver
# @BlockdevDriver:
#
# Drivers that are supported in block device operations.
#
# @host_device, @host_cdrom: Since 2.1
# @host_device: Since 2.1
# @host_cdrom: Since 2.1
# @gluster: Since 2.7
# @nbd, @nfs, @replication, @ssh: Since 2.8
# @nbd: Since 2.8
# @nfs: Since 2.8
# @replication: Since 2.8
# @ssh: Since 2.8
#
# Since: 2.0
##
@@ -1727,7 +1731,7 @@
'vvfat' ] }
##
# @BlockdevOptionsFile
# @BlockdevOptionsFile:
#
# Driver specific block device options for the file backend.
#
@@ -1741,7 +1745,7 @@
'*aio': 'BlockdevAioOptions' } }
##
# @BlockdevOptionsNull
# @BlockdevOptionsNull:
#
# Driver specific block device options for the null backend.
#
@@ -1756,7 +1760,7 @@
'data': { '*size': 'int', '*latency-ns': 'uint64' } }
##
# @BlockdevOptionsVVFAT
# @BlockdevOptionsVVFAT:
#
# Driver specific block device options for the vvfat protocol.
#
@@ -1777,7 +1781,7 @@
'*label': 'str', '*rw': 'bool' } }
##
# @BlockdevOptionsGenericFormat
# @BlockdevOptionsGenericFormat:
#
# Driver specific block device options for image format that have no option
# besides their data source.
@@ -1790,7 +1794,7 @@
'data': { 'file': 'BlockdevRef' } }
##
# @BlockdevOptionsLUKS
# @BlockdevOptionsLUKS:
#
# Driver specific block device options for LUKS.
#
@@ -1806,7 +1810,7 @@
##
# @BlockdevOptionsGenericCOWFormat
# @BlockdevOptionsGenericCOWFormat:
#
# Driver specific block device options for image format that have no option
# besides their data source and an optional backing file.
@@ -1823,7 +1827,7 @@
'data': { '*backing': 'BlockdevRef' } }
##
# @Qcow2OverlapCheckMode
# @Qcow2OverlapCheckMode:
#
# General overlap check modes.
#
@@ -1843,7 +1847,7 @@
'data': [ 'none', 'constant', 'cached', 'all' ] }
##
# @Qcow2OverlapCheckFlags
# @Qcow2OverlapCheckFlags:
#
# Structure of flags for each metadata structure. Setting a field to 'true'
# makes qemu guard that structure against unintended overwriting. The default
@@ -1866,7 +1870,7 @@
'*inactive-l2': 'bool' } }
##
# @Qcow2OverlapChecks
# @Qcow2OverlapChecks:
#
# Specifies which metadata structures should be guarded against unintended
# overwriting.
@@ -1883,7 +1887,7 @@
'mode': 'Qcow2OverlapCheckMode' } }
##
# @BlockdevOptionsQcow2
# @BlockdevOptionsQcow2:
#
# Driver specific block device options for qcow2.
#
@@ -1933,7 +1937,7 @@
##
# @BlockdevOptionsArchipelago
# @BlockdevOptionsArchipelago:
#
# Driver specific block device options for Archipelago.
#
@@ -1962,7 +1966,7 @@
'*segment': 'str' } }
##
# @BlockdevOptionsSsh
# @BlockdevOptionsSsh:
#
# @server: host address
#
@@ -1973,7 +1977,7 @@
#
# TODO: Expose the host_key_check option in QMP
#
# Since 2.8
# Since: 2.8
##
{ 'struct': 'BlockdevOptionsSsh',
'data': { 'server': 'InetSocketAddress',
@@ -1982,7 +1986,7 @@
##
# @BlkdebugEvent
# @BlkdebugEvent:
#
# Trigger events supported by blkdebug.
#
@@ -2005,7 +2009,7 @@
'pwritev_zero', 'pwritev_done', 'empty_image_prepare' ] }
##
# @BlkdebugInjectErrorOptions
# @BlkdebugInjectErrorOptions:
#
# Describes a single error injection for blkdebug.
#
@@ -2037,7 +2041,7 @@
'*immediately': 'bool' } }
##
# @BlkdebugSetStateOptions
# @BlkdebugSetStateOptions:
#
# Describes a single state-change event for blkdebug.
#
@@ -2057,7 +2061,7 @@
'new_state': 'int' } }
##
# @BlockdevOptionsBlkdebug
# @BlockdevOptionsBlkdebug:
#
# Driver specific block device options for blkdebug.
#
@@ -2082,7 +2086,7 @@
'*set-state': ['BlkdebugSetStateOptions'] } }
##
# @BlockdevOptionsBlkverify
# @BlockdevOptionsBlkverify:
#
# Driver specific block device options for blkverify.
#
@@ -2097,7 +2101,7 @@
'raw': 'BlockdevRef' } }
##
# @QuorumReadPattern
# @QuorumReadPattern:
#
# An enumeration of quorum read patterns.
#
@@ -2110,7 +2114,7 @@
{ 'enum': 'QuorumReadPattern', 'data': [ 'quorum', 'fifo' ] }
##
# @BlockdevOptionsQuorum
# @BlockdevOptionsQuorum:
#
# Driver specific block device options for Quorum
#
@@ -2137,7 +2141,7 @@
'*read-pattern': 'QuorumReadPattern' } }
##
# @GlusterTransport
# @GlusterTransport:
#
# An enumeration of Gluster transport types
#
@@ -2152,7 +2156,7 @@
##
# @GlusterServer
# @GlusterServer:
#
# Captures the address of a socket
#
@@ -2160,10 +2164,6 @@
#
# @type: Transport type used for gluster connection
#
# @unix: socket file
#
# @tcp: host address and port number
#
# This is similar to SocketAddress, only distinction:
#
# 1. GlusterServer is a flat union, SocketAddress is a simple union.
@@ -2185,7 +2185,7 @@
'tcp': 'InetSocketAddress' } }
##
# @BlockdevOptionsGluster
# @BlockdevOptionsGluster:
#
# Driver specific block device options for Gluster
#
@@ -2195,7 +2195,8 @@
#
# @server: gluster servers description
#
# @debug-level: #optional libgfapi log level (default '4' which is Error)
# @debug: #optional libgfapi log level (default '4' which is Error)
# (Since 2.8)
#
# @logfile: #optional libgfapi log file (default /dev/stderr) (Since 2.8)
#
@@ -2205,11 +2206,11 @@
'data': { 'volume': 'str',
'path': 'str',
'server': ['GlusterServer'],
'*debug-level': 'int',
'*debug': 'int',
'*logfile': 'str' } }
##
# @ReplicationMode
# @ReplicationMode:
#
# An enumeration of replication modes.
#
@@ -2222,7 +2223,7 @@
{ 'enum' : 'ReplicationMode', 'data' : [ 'primary', 'secondary' ] }
##
# @BlockdevOptionsReplication
# @BlockdevOptionsReplication:
#
# Driver specific block device options for replication
#
@@ -2240,19 +2241,19 @@
'*top-id': 'str' } }
##
# @NFSTransport
# @NFSTransport:
#
# An enumeration of NFS transport types
#
# @inet: TCP transport
#
# Since 2.8
# Since: 2.8
##
{ 'enum': 'NFSTransport',
'data': [ 'inet' ] }
##
# @NFSServer
# @NFSServer:
#
# Captures the address of the socket
#
@@ -2260,14 +2261,14 @@
#
# @host: host address for NFS server
#
# Since 2.8
# Since: 2.8
##
{ 'struct': 'NFSServer',
'data': { 'type': 'NFSTransport',
'host': 'str' } }
##
# @BlockdevOptionsNfs
# @BlockdevOptionsNfs:
#
# Driver specific block device option for NFS
#
@@ -2292,10 +2293,10 @@
# @page-cache-size: #optional set the pagecache size in bytes (defaults
# to libnfs default)
#
# @debug-level: #optional set the NFS debug level (max 2) (defaults
# @debug: #optional set the NFS debug level (max 2) (defaults
# to libnfs default)
#
# Since 2.8
# Since: 2.8
##
{ 'struct': 'BlockdevOptionsNfs',
'data': { 'server': 'NFSServer',
@@ -2305,10 +2306,10 @@
'*tcp-syn-count': 'int',
'*readahead-size': 'int',
'*page-cache-size': 'int',
'*debug-level': 'int' } }
'*debug': 'int' } }
##
# @BlockdevOptionsCurl
# @BlockdevOptionsCurl:
#
# Driver specific block device options for the curl backend.
#
@@ -2320,7 +2321,7 @@
'data': { 'filename': 'str' } }
##
# @BlockdevOptionsNbd
# @BlockdevOptionsNbd:
#
# Driver specific block device options for NBD.
#
@@ -2338,7 +2339,7 @@
'*tls-creds': 'str' } }
##
# @BlockdevOptionsRaw
# @BlockdevOptionsRaw:
#
# Driver specific block device options for the raw driver.
#
@@ -2352,7 +2353,7 @@
'data': { '*offset': 'int', '*size': 'int' } }
##
# @BlockdevOptions
# @BlockdevOptions:
#
# Options for creating a block device. Many options are available for all
# block devices, independent of the block driver:
@@ -2418,7 +2419,7 @@
} }
##
# @BlockdevRef
# @BlockdevRef:
#
# Reference to a block device.
#
@@ -2616,7 +2617,7 @@
##
# @BlockErrorAction
# @BlockErrorAction:
#
# An enumeration of action that has been taken when a DISK I/O occurs
#
@@ -2633,7 +2634,7 @@
##
# @BLOCK_IMAGE_CORRUPTED
# @BLOCK_IMAGE_CORRUPTED:
#
# Emitted when a corruption has been detected in a disk image
#
@@ -2668,7 +2669,7 @@
'fatal' : 'bool' } }
##
# @BLOCK_IO_ERROR
# @BLOCK_IO_ERROR:
#
# Emitted when a disk I/O error occurs
#
@@ -2704,7 +2705,7 @@
'reason': 'str' } }
##
# @BLOCK_JOB_COMPLETED
# @BLOCK_JOB_COMPLETED:
#
# Emitted when a block job has completed
#
@@ -2736,7 +2737,7 @@
'*error': 'str' } }
##
# @BLOCK_JOB_CANCELLED
# @BLOCK_JOB_CANCELLED:
#
# Emitted when a block job has been cancelled
#
@@ -2762,7 +2763,7 @@
'speed' : 'int' } }
##
# @BLOCK_JOB_ERROR
# @BLOCK_JOB_ERROR:
#
# Emitted when a block job encounters an error
#
@@ -2781,7 +2782,7 @@
'action' : 'BlockErrorAction' } }
##
# @BLOCK_JOB_READY
# @BLOCK_JOB_READY:
#
# Emitted when a block job is ready to complete
#
@@ -2809,7 +2810,8 @@
'offset': 'int',
'speed' : 'int' } }
# @PreallocMode
##
# @PreallocMode:
#
# Preallocation mode of QEMU image file
#
@@ -2821,13 +2823,13 @@
# space is really available. @full preallocation also sets up
# metadata correctly.
#
# Since 2.2
# Since: 2.2
##
{ 'enum': 'PreallocMode',
'data': [ 'off', 'metadata', 'falloc', 'full' ] }
##
# @BLOCK_WRITE_THRESHOLD
# @BLOCK_WRITE_THRESHOLD:
#
# Emitted when writes on block device reaches or exceeds the
# configured write threshold. For thin-provisioned devices, this
@@ -2850,7 +2852,7 @@
'write-threshold': 'uint64' } }
##
# @block-set-write-threshold
# @block-set-write-threshold:
#
# Change the write threshold for a block drive. An event will be delivered
# if a write to this block drive crosses the configured threshold.
@@ -2868,7 +2870,7 @@
'data': { 'node-name': 'str', 'write-threshold': 'uint64' } }
##
# @x-blockdev-change
# @x-blockdev-change:
#
# Dynamically reconfigure the block driver state graph. It can be used
# to add, remove, insert or replace a graph node. Currently only the
+9 -9
View File
@@ -40,7 +40,7 @@
'data': ['auto', 'none', 'lba', 'large', 'rechs']}
##
# @FloppyDriveType
# @FloppyDriveType:
#
# Type of Floppy drive to be emulated by the Floppy Disk Controller.
#
@@ -56,7 +56,7 @@
'data': ['144', '288', '120', 'none', 'auto']}
##
# @BlockdevSnapshotInternal
# @BlockdevSnapshotInternal:
#
# @device: the device name or node-name of a root node to generate the snapshot
# from
@@ -73,7 +73,7 @@
'data': { 'device': 'str', 'name': 'str' } }
##
# @blockdev-snapshot-internal-sync
# @blockdev-snapshot-internal-sync:
#
# Synchronously take an internal snapshot of a block device, when the format
# of the image used supports it.
@@ -87,13 +87,13 @@
# If the format of the image used does not support it,
# BlockFormatFeatureNotSupported
#
# Since 1.7
# Since: 1.7
##
{ 'command': 'blockdev-snapshot-internal-sync',
'data': 'BlockdevSnapshotInternal' }
##
# @blockdev-snapshot-delete-internal-sync
# @blockdev-snapshot-delete-internal-sync:
#
# Synchronously delete an internal snapshot of a block device, when the format
# of the image used support it. The snapshot is identified by name or id or
@@ -114,7 +114,7 @@
# BlockFormatFeatureNotSupported
# If @id and @name are both not specified, GenericError
#
# Since 1.7
# Since: 1.7
##
{ 'command': 'blockdev-snapshot-delete-internal-sync',
'data': { 'device': 'str', '*id': 'str', '*name': 'str'},
@@ -190,7 +190,7 @@
{ 'command': 'nbd-server-stop' }
##
# @DEVICE_TRAY_MOVED
# @DEVICE_TRAY_MOVED:
#
# Emitted whenever the tray of a removable device is moved by the guest or by
# HMP/QMP commands
@@ -199,7 +199,7 @@
# reasons, but it can be empty ("") if the image does not
# have a device name associated.
#
# @id: The name or QOM path of the guest device
# @id: The name or QOM path of the guest device (since 2.8)
#
# @tray-open: true if the tray has been opened or false if it has been closed
#
@@ -209,7 +209,7 @@
'data': { 'device': 'str', 'id': 'str', 'tray-open': 'bool' } }
##
# @QuorumOpType
# @QuorumOpType:
#
# An enumeration of the quorum operation types
#
+7 -7
View File
@@ -3,7 +3,7 @@
# QAPI common definitions
##
# @QapiErrorClass
# @QapiErrorClass:
#
# QEMU error classes
#
@@ -30,15 +30,15 @@
'DeviceNotActive', 'DeviceNotFound', 'KVMMissingCap' ] }
##
# @VersionTriple
# @VersionTriple:
#
# A three-part version number.
#
# @qemu.major: The major version number.
# @major: The major version number.
#
# @qemu.minor: The minor version number.
# @minor: The minor version number.
#
# @qemu.micro: The micro version number.
# @micro: The micro version number.
#
# Since: 2.4
##
@@ -101,7 +101,7 @@
{ 'command': 'query-commands', 'returns': ['CommandInfo'] }
##
# @OnOffAuto
# @OnOffAuto:
#
# An enumeration of three options: on, off, and auto
#
@@ -117,7 +117,7 @@
'data': [ 'auto', 'on', 'off' ] }
##
# @OnOffSplit
# @OnOffSplit:
#
# An enumeration of three values: on, off, and split
#
+18 -18
View File
@@ -3,7 +3,7 @@
# QAPI crypto definitions
##
# QCryptoTLSCredsEndpoint:
# @QCryptoTLSCredsEndpoint:
#
# The type of network endpoint that will be using the credentials.
# Most types of credential require different setup / structures
@@ -22,7 +22,7 @@
##
# QCryptoSecretFormat:
# @QCryptoSecretFormat:
#
# The data format that the secret is provided in
#
@@ -36,7 +36,7 @@
##
# QCryptoHashAlgorithm:
# @QCryptoHashAlgorithm:
#
# The supported algorithms for computing content digests
#
@@ -55,7 +55,7 @@
##
# QCryptoCipherAlgorithm:
# @QCryptoCipherAlgorithm:
#
# The supported algorithms for content encryption ciphers
#
@@ -82,7 +82,7 @@
##
# QCryptoCipherMode:
# @QCryptoCipherMode:
#
# The supported modes for content encryption ciphers
#
@@ -98,7 +98,7 @@
##
# QCryptoIVGenAlgorithm:
# @QCryptoIVGenAlgorithm:
#
# The supported algorithms for generating initialization
# vectors for full disk encryption. The 'plain' generator
@@ -116,7 +116,7 @@
'data': ['plain', 'plain64', 'essiv']}
##
# QCryptoBlockFormat:
# @QCryptoBlockFormat:
#
# The supported full disk encryption formats
#
@@ -131,7 +131,7 @@
'data': ['qcow', 'luks']}
##
# QCryptoBlockOptionsBase:
# @QCryptoBlockOptionsBase:
#
# The common options that apply to all full disk
# encryption formats
@@ -144,7 +144,7 @@
'data': { 'format': 'QCryptoBlockFormat' }}
##
# QCryptoBlockOptionsQCow:
# @QCryptoBlockOptionsQCow:
#
# The options that apply to QCow/QCow2 AES-CBC encryption format
#
@@ -158,7 +158,7 @@
'data': { '*key-secret': 'str' }}
##
# QCryptoBlockOptionsLUKS:
# @QCryptoBlockOptionsLUKS:
#
# The options that apply to LUKS encryption format
#
@@ -172,7 +172,7 @@
##
# QCryptoBlockCreateOptionsLUKS:
# @QCryptoBlockCreateOptionsLUKS:
#
# The options that apply to LUKS encryption format initialization
#
@@ -202,7 +202,7 @@
##
# QCryptoBlockOpenOptions:
# @QCryptoBlockOpenOptions:
#
# The options that are available for all encryption formats
# when opening an existing volume
@@ -217,7 +217,7 @@
##
# QCryptoBlockCreateOptions:
# @QCryptoBlockCreateOptions:
#
# The options that are available for all encryption formats
# when initializing a new volume
@@ -232,7 +232,7 @@
##
# QCryptoBlockInfoBase:
# @QCryptoBlockInfoBase:
#
# The common information that applies to all full disk
# encryption formats
@@ -246,7 +246,7 @@
##
# QCryptoBlockInfoLUKSSlot:
# @QCryptoBlockInfoLUKSSlot:
#
# Information about the LUKS block encryption key
# slot options
@@ -266,7 +266,7 @@
##
# QCryptoBlockInfoLUKS:
# @QCryptoBlockInfoLUKS:
#
# Information about the LUKS block encryption options
#
@@ -294,7 +294,7 @@
'slots': [ 'QCryptoBlockInfoLUKSSlot' ] }}
##
# QCryptoBlockInfoQCow:
# @QCryptoBlockInfoQCow:
#
# Information about the QCow block encryption options
#
@@ -305,7 +305,7 @@
##
# QCryptoBlockInfo:
# @QCryptoBlockInfo:
#
# Information about the block encryption options
#
+29 -29
View File
@@ -1,5 +1,5 @@
##
# @SHUTDOWN
# @SHUTDOWN:
#
# Emitted when the virtual machine has shut down, indicating that qemu is
# about to exit.
@@ -12,7 +12,7 @@
{ 'event': 'SHUTDOWN' }
##
# @POWERDOWN
# @POWERDOWN:
#
# Emitted when the virtual machine is powered down through the power control
# system, such as via ACPI.
@@ -22,7 +22,7 @@
{ 'event': 'POWERDOWN' }
##
# @RESET
# @RESET:
#
# Emitted when the virtual machine is reset
#
@@ -31,7 +31,7 @@
{ 'event': 'RESET' }
##
# @STOP
# @STOP:
#
# Emitted when the virtual machine is stopped
#
@@ -40,7 +40,7 @@
{ 'event': 'STOP' }
##
# @RESUME
# @RESUME:
#
# Emitted when the virtual machine resumes execution
#
@@ -49,7 +49,7 @@
{ 'event': 'RESUME' }
##
# @SUSPEND
# @SUSPEND:
#
# Emitted when guest enters a hardware suspension state, for example, S3 state,
# which is sometimes called standby state
@@ -59,7 +59,7 @@
{ 'event': 'SUSPEND' }
##
# @SUSPEND_DISK
# @SUSPEND_DISK:
#
# Emitted when guest enters a hardware suspension state with data saved on
# disk, for example, S4 state, which is sometimes called hibernate state
@@ -71,7 +71,7 @@
{ 'event': 'SUSPEND_DISK' }
##
# @WAKEUP
# @WAKEUP:
#
# Emitted when the guest has woken up from suspend state and is running
#
@@ -80,7 +80,7 @@
{ 'event': 'WAKEUP' }
##
# @RTC_CHANGE
# @RTC_CHANGE:
#
# Emitted when the guest changes the RTC time.
#
@@ -93,7 +93,7 @@
'data': { 'offset': 'int' } }
##
# @WATCHDOG
# @WATCHDOG:
#
# Emitted when the watchdog device's timer is expired
#
@@ -108,7 +108,7 @@
'data': { 'action': 'WatchdogExpirationAction' } }
##
# @DEVICE_DELETED
# @DEVICE_DELETED:
#
# Emitted whenever the device removal completion is acknowledged by the guest.
# At this point, it's safe to reuse the specified device ID. Device removal can
@@ -124,7 +124,7 @@
'data': { '*device': 'str', 'path': 'str' } }
##
# @NIC_RX_FILTER_CHANGED
# @NIC_RX_FILTER_CHANGED:
#
# Emitted once until the 'query-rx-filter' command is executed, the first event
# will always be emitted
@@ -139,7 +139,7 @@
'data': { '*name': 'str', 'path': 'str' } }
##
# @VNC_CONNECTED
# @VNC_CONNECTED:
#
# Emitted when a VNC client establishes a connection
#
@@ -157,7 +157,7 @@
'client': 'VncBasicInfo' } }
##
# @VNC_INITIALIZED
# @VNC_INITIALIZED:
#
# Emitted after authentication takes place (if any) and the VNC session is
# made active
@@ -173,7 +173,7 @@
'client': 'VncClientInfo' } }
##
# @VNC_DISCONNECTED
# @VNC_DISCONNECTED:
#
# Emitted when the connection is closed
#
@@ -188,7 +188,7 @@
'client': 'VncClientInfo' } }
##
# @SPICE_CONNECTED
# @SPICE_CONNECTED:
#
# Emitted when a SPICE client establishes a connection
#
@@ -203,7 +203,7 @@
'client': 'SpiceBasicInfo' } }
##
# @SPICE_INITIALIZED
# @SPICE_INITIALIZED:
#
# Emitted after initial handshake and authentication takes place (if any)
# and the SPICE channel is up and running
@@ -219,7 +219,7 @@
'client': 'SpiceChannel' } }
##
# @SPICE_DISCONNECTED
# @SPICE_DISCONNECTED:
#
# Emitted when the SPICE connection is closed
#
@@ -234,7 +234,7 @@
'client': 'SpiceBasicInfo' } }
##
# @SPICE_MIGRATE_COMPLETED
# @SPICE_MIGRATE_COMPLETED:
#
# Emitted when SPICE migration has completed
#
@@ -243,7 +243,7 @@
{ 'event': 'SPICE_MIGRATE_COMPLETED' }
##
# @MIGRATION
# @MIGRATION:
#
# Emitted when a migration event happens
#
@@ -255,7 +255,7 @@
'data': {'status': 'MigrationStatus'}}
##
# @MIGRATION_PASS
# @MIGRATION_PASS:
#
# Emitted from the source side of a migration at the start of each pass
# (when it syncs the dirty bitmap)
@@ -268,7 +268,7 @@
'data': { 'pass': 'int' } }
##
# @ACPI_DEVICE_OST
# @ACPI_DEVICE_OST:
#
# Emitted when guest executes ACPI _OST method.
#
@@ -280,7 +280,7 @@
'data': { 'info': 'ACPIOSTInfo' } }
##
# @BALLOON_CHANGE
# @BALLOON_CHANGE:
#
# Emitted when the guest changes the actual BALLOON level. This value is
# equivalent to the @actual field return by the 'query-balloon' command
@@ -293,7 +293,7 @@
'data': { 'actual': 'int' } }
##
# @GUEST_PANICKED
# @GUEST_PANICKED:
#
# Emitted when guest OS panic is detected
#
@@ -305,7 +305,7 @@
'data': { 'action': 'GuestPanicAction' } }
##
# @QUORUM_FAILURE
# @QUORUM_FAILURE:
#
# Emitted by the Quorum block driver if it fails to establish a quorum
#
@@ -321,7 +321,7 @@
'data': { 'reference': 'str', 'sector-num': 'int', 'sectors-count': 'int' } }
##
# @QUORUM_REPORT_BAD
# @QUORUM_REPORT_BAD:
#
# Emitted to report a corruption of a Quorum file
#
@@ -345,7 +345,7 @@
'sector-num': 'int', 'sectors-count': 'int' } }
##
# @VSERPORT_CHANGE
# @VSERPORT_CHANGE:
#
# Emitted when the guest opens or closes a virtio-serial port.
#
@@ -359,7 +359,7 @@
'data': { 'id': 'str', 'open': 'bool' } }
##
# @MEM_UNPLUG_ERROR
# @MEM_UNPLUG_ERROR:
#
# Emitted when memory hot unplug error occurs.
#
@@ -373,7 +373,7 @@
'data': { 'device': 'str', 'msg': 'str' } }
##
# @DUMP_COMPLETED
# @DUMP_COMPLETED:
#
# Emitted when background dump has completed
#
+14 -14
View File
@@ -11,7 +11,7 @@
# See the COPYING file in the top-level directory.
##
# @query-qmp-schema
# @query-qmp-schema:
#
# Command query-qmp-schema exposes the QMP wire ABI as an array of
# SchemaInfo. This lets QMP clients figure out what commands and
@@ -49,7 +49,7 @@
'gen': false } # just to simplify qmp_query_json()
##
# @SchemaMetaType
# @SchemaMetaType:
#
# This is a @SchemaInfo's meta type, i.e. the kind of entity it
# describes.
@@ -75,7 +75,7 @@
'command', 'event' ] }
##
# @SchemaInfo
# @SchemaInfo:
#
# @name: the entity's name, inherited from @base.
# Commands and events have the name defined in the QAPI schema.
@@ -105,7 +105,7 @@
'event': 'SchemaInfoEvent' } }
##
# @SchemaInfoBuiltin
# @SchemaInfoBuiltin:
#
# Additional SchemaInfo members for meta-type 'builtin'.
#
@@ -117,7 +117,7 @@
'data': { 'json-type': 'JSONType' } }
##
# @JSONType
# @JSONType:
#
# The four primitive and two structured types according to RFC 7159
# section 1, plus 'int' (split off 'number'), plus the obvious top
@@ -130,7 +130,7 @@
'object', 'array', 'value' ] }
##
# @SchemaInfoEnum
# @SchemaInfoEnum:
#
# Additional SchemaInfo members for meta-type 'enum'.
#
@@ -144,7 +144,7 @@
'data': { 'values': ['str'] } }
##
# @SchemaInfoArray
# @SchemaInfoArray:
#
# Additional SchemaInfo members for meta-type 'array'.
#
@@ -158,7 +158,7 @@
'data': { 'element-type': 'str' } }
##
# @SchemaInfoObject
# @SchemaInfoObject:
#
# Additional SchemaInfo members for meta-type 'object'.
#
@@ -183,7 +183,7 @@
'*variants': [ 'SchemaInfoObjectVariant' ] } }
##
# @SchemaInfoObjectMember
# @SchemaInfoObjectMember:
#
# An object member.
#
@@ -206,7 +206,7 @@
# @default's type must be null or match @type
##
# @SchemaInfoObjectVariant
# @SchemaInfoObjectVariant:
#
# The variant members for a value of the type tag.
#
@@ -221,7 +221,7 @@
'data': { 'case': 'str', 'type': 'str' } }
##
# @SchemaInfoAlternate
# @SchemaInfoAlternate:
#
# Additional SchemaInfo members for meta-type 'alternate'.
#
@@ -237,7 +237,7 @@
'data': { 'members': [ 'SchemaInfoAlternateMember' ] } }
##
# @SchemaInfoAlternateMember
# @SchemaInfoAlternateMember:
#
# An alternate member.
#
@@ -249,7 +249,7 @@
'data': { 'type': 'str' } }
##
# @SchemaInfoCommand
# @SchemaInfoCommand:
#
# Additional SchemaInfo members for meta-type 'command'.
#
@@ -266,7 +266,7 @@
'data': { 'arg-type': 'str', 'ret-type': 'str' } }
##
# @SchemaInfoEvent
# @SchemaInfoEvent:
#
# Additional SchemaInfo members for meta-type 'event'.
#
+4 -13
View File
@@ -35,21 +35,12 @@ static void timestamp_put(QDict *qdict)
int err;
QObject *obj;
qemu_timeval tv;
int64_t sec, usec;
err = qemu_gettimeofday(&tv);
if (err < 0) {
/* Put -1 to indicate failure of getting host time */
sec = -1;
usec = -1;
} else {
sec = tv.tv_sec;
usec = tv.tv_usec;
}
obj = qobject_from_jsonf("{ 'seconds': %" PRId64 ", "
"'microseconds': %" PRId64 " }",
sec, usec);
/* Put -1 to indicate failure of getting host time */
obj = qobject_from_jsonf("{ 'seconds': %lld, 'microseconds': %lld }",
err < 0 ? -1LL : (long long)tv.tv_sec,
err < 0 ? -1LL : (long long)tv.tv_usec);
qdict_put_obj(qdict, "timestamp", obj);
}
+1 -1
View File
@@ -1,5 +1,5 @@
##
# @Rocker:
# @RockerSwitch:
#
# Rocker switch information.
#
+4 -4
View File
@@ -17,7 +17,7 @@
#
# @enabled: The event is dynamically enabled.
#
# Since 2.2
# Since: 2.2
##
{ 'enum': 'TraceEventState',
'data': ['unavailable', 'disabled', 'enabled'] }
@@ -34,7 +34,7 @@
# An event is per-vCPU if it has the "vcpu" property in the "trace-events"
# files.
#
# Since 2.2
# Since: 2.2
##
{ 'struct': 'TraceEventInfo',
'data': {'name': 'str', 'state': 'TraceEventState', 'vcpu': 'bool'} }
@@ -58,7 +58,7 @@
# exact match, @vcpu is given and the event does not have the "vcpu" property,
# an error is returned.
#
# Since 2.2
# Since: 2.2
##
{ 'command': 'trace-event-get-state',
'data': {'name': 'str', '*vcpu': 'int'},
@@ -83,7 +83,7 @@
# match, @vcpu is given and the event does not have the "vcpu" property, an
# error is returned.
#
# Since 2.2
# Since: 2.2
##
{ 'command': 'trace-event-set-state',
'data': {'name': 'str', 'enable': 'bool', '*ignore-unavailable': 'bool',
+45 -14
View File
@@ -1041,35 +1041,55 @@ GlusterFS is an user space distributed file system.
You can boot from the GlusterFS disk image with the command:
@example
qemu-system-x86_64 -drive file=gluster[+@var{transport}]://[@var{server}[:@var{port}]]/@var{volname}/@var{image}[?socket=...]
URI:
qemu-system-x86_64 -drive file=gluster[+@var{type}]://[@var{host}[:@var{port}]]/@var{volume}/@var{path}
[?socket=...][,file.debug=9][,file.logfile=...]
JSON:
qemu-system-x86_64 'json:@{"driver":"qcow2",
"file":@{"driver":"gluster",
"volume":"testvol","path":"a.img","debug":9,"logfile":"...",
"server":[@{"type":"tcp","host":"...","port":"..."@},
@{"type":"unix","socket":"..."@}]@}@}'
@end example
@var{gluster} is the protocol.
@var{transport} specifies the transport type used to connect to gluster
@var{type} specifies the transport type used to connect to gluster
management daemon (glusterd). Valid transport types are
tcp, unix and rdma. If a transport type isn't specified, then tcp
type is assumed.
tcp and unix. In the URI form, if a transport type isn't specified,
then tcp type is assumed.
@var{server} specifies the server where the volume file specification for
the given volume resides. This can be either hostname, ipv4 address
or ipv6 address. ipv6 address needs to be within square brackets [ ].
If transport type is unix, then @var{server} field should not be specified.
@var{host} specifies the server where the volume file specification for
the given volume resides. This can be either a hostname or an ipv4 address.
If transport type is unix, then @var{host} field should not be specified.
Instead @var{socket} field needs to be populated with the path to unix domain
socket.
@var{port} is the port number on which glusterd is listening. This is optional
and if not specified, QEMU will send 0 which will make gluster to use the
default port. If the transport type is unix, then @var{port} should not be
specified.
and if not specified, it defaults to port 24007. If the transport type is unix,
then @var{port} should not be specified.
@var{volume} is the name of the gluster volume which contains the disk image.
@var{path} is the path to the actual disk image that resides on gluster volume.
@var{debug} is the logging level of the gluster protocol driver. Debug levels
are 0-9, with 9 being the most verbose, and 0 representing no debugging output.
The default level is 4. The current logging levels defined in the gluster source
are 0 - None, 1 - Emergency, 2 - Alert, 3 - Critical, 4 - Error, 5 - Warning,
6 - Notice, 7 - Info, 8 - Debug, 9 - Trace
@var{logfile} is a commandline option to mention log file path which helps in
logging to the specified file and also help in persisting the gfapi logs. The
default is stderr.
@var{volname} is the name of the gluster volume which contains the disk image.
@var{image} is the path to the actual disk image that resides on gluster volume.
You can create a GlusterFS disk image with the command:
@example
qemu-img create gluster://@var{server}/@var{volname}/@var{image} @var{size}
qemu-img create gluster://@var{host}/@var{volume}/@var{path} @var{size}
@end example
Examples
@@ -1082,6 +1102,17 @@ qemu-system-x86_64 -drive file=gluster+tcp://[1:2:3:4:5:6:7:8]:24007/testvol/dir
qemu-system-x86_64 -drive file=gluster+tcp://server.domain.com:24007/testvol/dir/a.img
qemu-system-x86_64 -drive file=gluster+unix:///testvol/dir/a.img?socket=/tmp/glusterd.socket
qemu-system-x86_64 -drive file=gluster+rdma://1.2.3.4:24007/testvol/a.img
qemu-system-x86_64 -drive file=gluster://1.2.3.4/testvol/a.img,file.debug=9,file.logfile=/var/log/qemu-gluster.log
qemu-system-x86_64 'json:@{"driver":"qcow2",
"file":@{"driver":"gluster",
"volume":"testvol","path":"a.img",
"debug":9,"logfile":"/var/log/qemu-gluster.log",
"server":[@{"type":"tcp","host":"1.2.3.4","port":24007@},
@{"type":"unix","socket":"/var/run/glusterd.socket"@}]@}@}'
qemu-system-x86_64 -drive driver=qcow2,file.driver=gluster,file.volume=testvol,file.path=/path/a.img,
file.debug=9,file.logfile=/var/log/qemu-gluster.log,
file.server.0.type=tcp,file.server.0.host=1.2.3.4,file.server.0.port=24007,
file.server.1.type=unix,file.server.1.socket=/var/run/glusterd.socket
@end example
@node disk_images_ssh
+23 -2
View File
@@ -2595,13 +2595,34 @@ TCP, Unix Domain Sockets and RDMA transport protocols.
Syntax for specifying a VM disk image on GlusterFS volume is
@example
gluster[+transport]://[server[:port]]/volname/image[?socket=...]
URI:
gluster[+type]://[host[:port]]/volume/path[?socket=...][,debug=N][,logfile=...]
JSON:
'json:@{"driver":"qcow2","file":@{"driver":"gluster","volume":"testvol","path":"a.img","debug":N,"logfile":"...",
@ "server":[@{"type":"tcp","host":"...","port":"..."@},
@ @{"type":"unix","socket":"..."@}]@}@}'
@end example
Example
@example
qemu-system-x86_64 --drive file=gluster://192.0.2.1/testvol/a.img
URI:
qemu-system-x86_64 --drive file=gluster://192.0.2.1/testvol/a.img,
@ file.debug=9,file.logfile=/var/log/qemu-gluster.log
JSON:
qemu-system-x86_64 'json:@{"driver":"qcow2",
@ "file":@{"driver":"gluster",
@ "volume":"testvol","path":"a.img",
@ "debug":9,"logfile":"/var/log/qemu-gluster.log",
@ "server":[@{"type":"tcp","host":"1.2.3.4","port":24007@},
@ @{"type":"unix","socket":"/var/run/glusterd.socket"@}]@}@}'
qemu-system-x86_64 -drive driver=qcow2,file.driver=gluster,file.volume=testvol,file.path=/path/a.img,
@ file.debug=9,file.logfile=/var/log/qemu-gluster.log,
@ file.server.0.type=tcp,file.server.0.host=1.2.3.4,file.server.0.port=24007,
@ file.server.1.type=unix,file.server.1.socket=/var/run/glusterd.socket
@end example
See also @url{http://www.gluster.org}.
+27 -25
View File
@@ -102,7 +102,7 @@
#
# Returns: Time in nanoseconds.
#
# Since 1.5
# Since: 1.5
##
{ 'command': 'guest-get-time',
'returns': 'int' }
@@ -149,13 +149,13 @@
# @success-response: whether command returns a response on success
# (since 1.7)
#
# Since 1.1.0
# Since: 1.1.0
##
{ 'struct': 'GuestAgentCommandInfo',
'data': { 'name': 'str', 'enabled': 'bool', 'success-response': 'bool' } }
##
# @GuestAgentInfo
# @GuestAgentInfo:
#
# Information about guest agent.
#
@@ -163,7 +163,7 @@
#
# @supported_commands: Information about guest agent commands
#
# Since 0.15.0
# Since: 0.15.0
##
{ 'struct': 'GuestAgentInfo',
'data': { 'version': 'str',
@@ -203,7 +203,7 @@
#
# Open a file in the guest and retrieve a file handle for it
#
# @filepath: Full path to the file in the guest to open.
# @path: Full path to the file in the guest to open.
#
# @mode: #optional open mode, as per fopen(), "r" is the default.
#
@@ -230,7 +230,7 @@
'data': { 'handle': 'int' } }
##
# @GuestFileRead
# @GuestFileRead:
#
# Result of guest agent file-read operation
#
@@ -264,7 +264,7 @@
'returns': 'GuestFileRead' }
##
# @GuestFileWrite
# @GuestFileWrite:
#
# Result of guest agent file-write operation
#
@@ -300,7 +300,7 @@
##
# @GuestFileSeek
# @GuestFileSeek:
#
# Result of guest agent file-seek operation
#
@@ -378,7 +378,7 @@
'data': { 'handle': 'int' } }
##
# @GuestFsFreezeStatus
# @GuestFsfreezeStatus:
#
# An enumeration of filesystem freeze states
#
@@ -455,7 +455,7 @@
'returns': 'int' }
##
# @GuestFilesystemTrimResult
# @GuestFilesystemTrimResult:
#
# @path: path that was trimmed
# @error: an error message when trim failed
@@ -469,7 +469,7 @@
'*trimmed': 'int', '*minimum': 'int', '*error': 'str'} }
##
# @GuestFilesystemTrimResponse
# @GuestFilesystemTrimResponse:
#
# @paths: list of @GuestFilesystemTrimResult per path that was trimmed
#
@@ -501,7 +501,7 @@
'returns': 'GuestFilesystemTrimResponse' }
##
# @guest-suspend-disk
# @guest-suspend-disk:
#
# Suspend guest to disk.
#
@@ -529,7 +529,7 @@
{ 'command': 'guest-suspend-disk', 'success-response': false }
##
# @guest-suspend-ram
# @guest-suspend-ram:
#
# Suspend guest to ram.
#
@@ -561,7 +561,7 @@
{ 'command': 'guest-suspend-ram', 'success-response': false }
##
# @guest-suspend-hybrid
# @guest-suspend-hybrid:
#
# Save guest state to disk and suspend to ram.
#
@@ -720,7 +720,7 @@
'returns': 'int' }
##
# @GuestDiskBusType
# @GuestDiskBusType:
#
# An enumeration of bus type of disks
#
@@ -770,7 +770,7 @@
# @GuestDiskAddress:
#
# @pci-controller: controller's PCI address
# @type: bus type
# @bus-type: bus type
# @bus: bus id
# @target: target id
# @unit: unit id
@@ -783,7 +783,7 @@
'bus': 'int', 'target': 'int', 'unit': 'int'} }
##
# @GuestFilesystemInfo
# @GuestFilesystemInfo:
#
# @name: disk name
# @mountpoint: mount point path
@@ -811,7 +811,7 @@
'returns': ['GuestFilesystemInfo'] }
##
# @guest-set-user-password
# @guest-set-user-password:
#
# @username: the user account whose password to change
# @password: the new password entry string, base64 encoded
@@ -832,11 +832,12 @@
#
# Returns: Nothing on success.
#
# Since 2.3
# Since: 2.3
##
{ 'command': 'guest-set-user-password',
'data': { 'username': 'str', 'password': 'str', 'crypted': 'bool' } }
##
# @GuestMemoryBlock:
#
# @phys-index: Arbitrary guest-specific unique identifier of the MEMORY BLOCK.
@@ -872,7 +873,7 @@
'returns': ['GuestMemoryBlock'] }
##
# @GuestMemoryBlockResponseType
# @GuestMemoryBlockResponseType:
#
# An enumeration of memory block operation result.
#
@@ -936,6 +937,7 @@
'data': {'mem-blks': ['GuestMemoryBlock'] },
'returns': ['GuestMemoryBlockResponse'] }
##
# @GuestMemoryBlockInfo:
#
# @size: the size (in bytes) of the guest memory blocks,
@@ -952,14 +954,14 @@
#
# Get information relating to guest memory blocks.
#
# Returns: memory block size in bytes.
# Returns: @GuestMemoryBlockInfo
#
# Since 2.3
# Since: 2.3
##
{ 'command': 'guest-get-memory-block-info',
'returns': 'GuestMemoryBlockInfo' }
##
# @GuestExecStatus:
#
# @exited: true if process has already terminated.
@@ -982,7 +984,7 @@
'*out-data': 'str', '*err-data': 'str',
'*out-truncated': 'bool', '*err-truncated': 'bool' }}
##
# @guest-exec-status
# @guest-exec-status:
#
# Check status of process associated with PID retrieved via guest-exec.
# Reap the process and associated metadata if it has exited.
@@ -991,7 +993,7 @@
#
# Returns: GuestExecStatus on success.
#
# Since 2.5
# Since: 2.5
##
{ 'command': 'guest-exec-status',
'data': { 'pid': 'int' },
@@ -1001,7 +1003,7 @@
# @GuestExec:
# @pid: pid of child process in guest OS
#
#Since: 2.5
# Since: 2.5
##
{ 'struct': 'GuestExec',
'data': { 'pid': 'int'} }
+19 -23
View File
@@ -1839,41 +1839,37 @@ static void disas_b_exc_sys(DisasContext *s, uint32_t insn)
}
}
/*
* Load/Store exclusive instructions are implemented by remembering
* the value/address loaded, and seeing if these are the same
* when the store is performed. This is not actually the architecturally
* mandated semantics, but it works for typical guest code sequences
* and avoids having to monitor regular stores.
*
* The store exclusive uses the atomic cmpxchg primitives to avoid
* races in multi-threaded linux-user and when MTTCG softmmu is
* enabled.
*/
static void gen_load_exclusive(DisasContext *s, int rt, int rt2,
TCGv_i64 addr, int size, bool is_pair)
{
TCGv_i64 tmp = tcg_temp_new_i64();
TCGMemOp be = s->be_data;
TCGMemOp memop = s->be_data + size;
g_assert(size <= 3);
tcg_gen_qemu_ld_i64(tmp, addr, get_mem_index(s), memop);
if (is_pair) {
TCGv_i64 addr2 = tcg_temp_new_i64();
TCGv_i64 hitmp = tcg_temp_new_i64();
if (size == 3) {
TCGv_i64 addr2 = tcg_temp_new_i64();
tcg_gen_qemu_ld_i64(tmp, addr, get_mem_index(s),
MO_64 | MO_ALIGN_16 | be);
tcg_gen_addi_i64(addr2, addr, 8);
tcg_gen_qemu_ld_i64(hitmp, addr2, get_mem_index(s),
MO_64 | MO_ALIGN | be);
tcg_temp_free_i64(addr2);
} else {
g_assert(size == 2);
tcg_gen_qemu_ld_i64(tmp, addr, get_mem_index(s),
MO_64 | MO_ALIGN | be);
if (be == MO_LE) {
tcg_gen_extr32_i64(tmp, hitmp, tmp);
} else {
tcg_gen_extr32_i64(hitmp, tmp, tmp);
}
}
g_assert(size >= 2);
tcg_gen_addi_i64(addr2, addr, 1 << size);
tcg_gen_qemu_ld_i64(hitmp, addr2, get_mem_index(s), memop);
tcg_temp_free_i64(addr2);
tcg_gen_mov_i64(cpu_exclusive_high, hitmp);
tcg_gen_mov_i64(cpu_reg(s, rt2), hitmp);
tcg_temp_free_i64(hitmp);
} else {
tcg_gen_qemu_ld_i64(tmp, addr, get_mem_index(s), size | MO_ALIGN | be);
}
tcg_gen_mov_i64(cpu_exclusive_val, tmp);
+2 -2
View File
@@ -3477,7 +3477,7 @@ target_ulong helper_dextp(target_ulong ac, target_ulong size, CPUMIPSState *env)
if (sub >= -1) {
temp = (tempB << (64 - len)) | (tempA >> len);
temp = temp & ((0x01 << (size + 1)) - 1);
temp = temp & ((1ULL << (size + 1)) - 1);
set_DSPControl_efi(0, env);
} else {
set_DSPControl_efi(1, env);
@@ -3506,7 +3506,7 @@ target_ulong helper_dextpdp(target_ulong ac, target_ulong size,
if (sub >= -1) {
temp = (tempB << (64 - len)) | (tempA >> len);
temp = temp & ((0x01 << (size + 1)) - 1);
temp = temp & ((1ULL << (size + 1)) - 1);
set_DSPControl_pos(sub, env);
set_DSPControl_efi(0, env);
} else {
+6 -2
View File
@@ -3871,6 +3871,7 @@ static void gen_loongson_multimedia(DisasContext *ctx, int rd, int rs, int rt)
break;
}
check_cp1_enabled(ctx);
gen_load_fpr64(ctx, t0, rs);
gen_load_fpr64(ctx, t1, rt);
@@ -3945,8 +3946,11 @@ static void gen_loongson_multimedia(DisasContext *ctx, int rd, int rs, int rt)
LMI_DIRECT(XOR_CP2, xor, xor);
LMI_DIRECT(NOR_CP2, nor, nor);
LMI_DIRECT(AND_CP2, and, and);
LMI_DIRECT(PANDN, pandn, andc);
LMI_DIRECT(OR, or, or);
LMI_DIRECT(OR_CP2, or, or);
case OPC_PANDN:
tcg_gen_andc_i64(t0, t1, t0);
break;
case OPC_PINSRH_0:
tcg_gen_deposit_i64(t0, t0, t1, 0, 16);
+1
View File
@@ -16,6 +16,7 @@ test-bitops
test-blockjob
test-blockjob-txn
test-bufferiszero
test-char
test-clone-visitor
test-coroutine
test-crypto-afsplit
+3 -3
View File
@@ -964,7 +964,7 @@ static void vararg_number(void)
QInt *qint;
QFloat *qfloat;
int value = 0x2342;
int64_t value64 = 0x2342342343LL;
long long value_ll = 0x2342342343LL;
double valuef = 2.323423423;
obj = qobject_from_jsonf("%d", value);
@@ -976,12 +976,12 @@ static void vararg_number(void)
QDECREF(qint);
obj = qobject_from_jsonf("%" PRId64, value64);
obj = qobject_from_jsonf("%lld", value_ll);
g_assert(obj != NULL);
g_assert(qobject_type(obj) == QTYPE_QINT);
qint = qobject_to_qint(obj);
g_assert(qint_get_int(qint) == value64);
g_assert(qint_get_int(qint) == value_ll);
QDECREF(qint);
+25 -16
View File
@@ -46,7 +46,7 @@ _supported_proto file
_supported_os Linux
# Four passes:
# Four main passes:
# 0: Two-layer backing chain, commit to upper backing file (implicitly)
# (in this case, the top image will be emptied)
# 1: Two-layer backing chain, commit to upper backing file (explicitly)
@@ -56,22 +56,30 @@ _supported_os Linux
# 3: Two-layer backing chain, commit to lower backing file
# (in this case, the top image will implicitly stay unchanged)
#
# Each pass is run twice, since qcow2 has different code paths for cleaning
# an image depending on whether it has a snapshot.
#
# 020 already tests committing, so this only tests whether image chains are
# working properly and that all images above the base are emptied; therefore,
# no complicated patterns are necessary
# no complicated patterns are necessary. Check near the 2G mark, as qcow2
# has been buggy at that boundary in the past.
for i in 0 1 2 3; do
for j in 0 1; do
echo
echo "=== Test pass $i ==="
echo "=== Test pass $i.$j ==="
echo
TEST_IMG="$TEST_IMG.base" _make_test_img 64M
TEST_IMG="$TEST_IMG.itmd" _make_test_img -b "$TEST_IMG.base" 64M
_make_test_img -b "$TEST_IMG.itmd" 64M
TEST_IMG="$TEST_IMG.base" _make_test_img 2100M
TEST_IMG="$TEST_IMG.itmd" _make_test_img -b "$TEST_IMG.base" 2100M
_make_test_img -b "$TEST_IMG.itmd" 2100M
if [ $j -eq 0 ]; then
$QEMU_IMG snapshot -c snap "$TEST_IMG"
fi
$QEMU_IO -c 'write -P 1 0 192k' "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IO -c 'write -P 2 64k 128k' "$TEST_IMG.itmd" | _filter_qemu_io
$QEMU_IO -c 'write -P 3 128k 64k' "$TEST_IMG" | _filter_qemu_io
$QEMU_IO -c 'write -P 1 0x7ffd0000 192k' "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IO -c 'write -P 2 0x7ffe0000 128k' "$TEST_IMG.itmd" | _filter_qemu_io
$QEMU_IO -c 'write -P 3 0x7fff0000 64k' "$TEST_IMG" | _filter_qemu_io
if [ $i -lt 3 ]; then
if [ $i == 0 ]; then
@@ -88,12 +96,12 @@ if [ $i -lt 3 ]; then
fi
# Bottom should be unchanged
$QEMU_IO -c 'read -P 1 0 192k' "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IO -c 'read -P 1 0x7ffd0000 192k' "$TEST_IMG.base" | _filter_qemu_io
# Intermediate should contain changes from top
$QEMU_IO -c 'read -P 1 0 64k' "$TEST_IMG.itmd" | _filter_qemu_io
$QEMU_IO -c 'read -P 2 64k 64k' "$TEST_IMG.itmd" | _filter_qemu_io
$QEMU_IO -c 'read -P 3 128k 64k' "$TEST_IMG.itmd" | _filter_qemu_io
$QEMU_IO -c 'read -P 1 0x7ffd0000 64k' "$TEST_IMG.itmd" | _filter_qemu_io
$QEMU_IO -c 'read -P 2 0x7ffe0000 64k' "$TEST_IMG.itmd" | _filter_qemu_io
$QEMU_IO -c 'read -P 3 0x7fff0000 64k' "$TEST_IMG.itmd" | _filter_qemu_io
# And in pass 0, the top image should be empty, whereas in both other passes
# it should be unchanged (which is both checked by qemu-img map)
@@ -101,9 +109,9 @@ else
$QEMU_IMG commit -b "$TEST_IMG.base" "$TEST_IMG"
# Bottom should contain all changes
$QEMU_IO -c 'read -P 1 0 64k' "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IO -c 'read -P 2 64k 64k' "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IO -c 'read -P 3 128k 64k' "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IO -c 'read -P 1 0x7ffd0000 64k' "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IO -c 'read -P 2 0x7ffe0000 64k' "$TEST_IMG.base" | _filter_qemu_io
$QEMU_IO -c 'read -P 3 0x7fff0000 64k' "$TEST_IMG.base" | _filter_qemu_io
# Both top and intermediate should be unchanged
fi
@@ -113,6 +121,7 @@ $QEMU_IMG map "$TEST_IMG.itmd" | _filter_qemu_img_map
$QEMU_IMG map "$TEST_IMG" | _filter_qemu_img_map
done
done
# success, all done
+183 -66
View File
@@ -1,119 +1,236 @@
QA output created by 097
=== Test pass 0 ===
=== Test pass 0.0 ===
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.base
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.itmd
wrote 196608/196608 bytes at offset 0
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.base
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.itmd
wrote 196608/196608 bytes at offset 2147287040
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 131072/131072 bytes at offset 65536
wrote 131072/131072 bytes at offset 2147352576
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 65536/65536 bytes at offset 131072
wrote 65536/65536 bytes at offset 2147418112
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Image committed.
read 196608/196608 bytes at offset 0
read 196608/196608 bytes at offset 2147287040
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65536/65536 bytes at offset 0
read 65536/65536 bytes at offset 2147287040
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65536/65536 bytes at offset 65536
read 65536/65536 bytes at offset 2147352576
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65536/65536 bytes at offset 131072
read 65536/65536 bytes at offset 2147418112
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Offset Length File
0 0x30000 TEST_DIR/t.IMGFMT.base
0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
Offset Length File
0 0x10000 TEST_DIR/t.IMGFMT.base
0x10000 0x20000 TEST_DIR/t.IMGFMT.itmd
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
Offset Length File
0 0x10000 TEST_DIR/t.IMGFMT.base
0x10000 0x20000 TEST_DIR/t.IMGFMT.itmd
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
=== Test pass 1 ===
=== Test pass 0.1 ===
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.base
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.itmd
wrote 196608/196608 bytes at offset 0
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.base
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.itmd
wrote 196608/196608 bytes at offset 2147287040
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 131072/131072 bytes at offset 65536
wrote 131072/131072 bytes at offset 2147352576
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 65536/65536 bytes at offset 131072
wrote 65536/65536 bytes at offset 2147418112
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Image committed.
read 196608/196608 bytes at offset 0
read 196608/196608 bytes at offset 2147287040
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65536/65536 bytes at offset 0
read 65536/65536 bytes at offset 2147287040
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65536/65536 bytes at offset 65536
read 65536/65536 bytes at offset 2147352576
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65536/65536 bytes at offset 131072
read 65536/65536 bytes at offset 2147418112
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Offset Length File
0 0x30000 TEST_DIR/t.IMGFMT.base
0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
Offset Length File
0 0x10000 TEST_DIR/t.IMGFMT.base
0x10000 0x20000 TEST_DIR/t.IMGFMT.itmd
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
Offset Length File
0 0x10000 TEST_DIR/t.IMGFMT.base
0x10000 0x10000 TEST_DIR/t.IMGFMT.itmd
0x20000 0x10000 TEST_DIR/t.IMGFMT
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
=== Test pass 2 ===
=== Test pass 1.0 ===
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.base
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.itmd
wrote 196608/196608 bytes at offset 0
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.base
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.itmd
wrote 196608/196608 bytes at offset 2147287040
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 131072/131072 bytes at offset 65536
wrote 131072/131072 bytes at offset 2147352576
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 65536/65536 bytes at offset 131072
wrote 65536/65536 bytes at offset 2147418112
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Image committed.
read 196608/196608 bytes at offset 0
read 196608/196608 bytes at offset 2147287040
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65536/65536 bytes at offset 0
read 65536/65536 bytes at offset 2147287040
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65536/65536 bytes at offset 65536
read 65536/65536 bytes at offset 2147352576
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65536/65536 bytes at offset 131072
read 65536/65536 bytes at offset 2147418112
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Offset Length File
0 0x30000 TEST_DIR/t.IMGFMT.base
0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
Offset Length File
0 0x10000 TEST_DIR/t.IMGFMT.base
0x10000 0x20000 TEST_DIR/t.IMGFMT.itmd
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
Offset Length File
0 0x10000 TEST_DIR/t.IMGFMT.base
0x10000 0x10000 TEST_DIR/t.IMGFMT.itmd
0x20000 0x10000 TEST_DIR/t.IMGFMT
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
0x7ffe0000 0x10000 TEST_DIR/t.IMGFMT.itmd
0x7fff0000 0x10000 TEST_DIR/t.IMGFMT
=== Test pass 3 ===
=== Test pass 1.1 ===
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.base
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.itmd
wrote 196608/196608 bytes at offset 0
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.base
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.itmd
wrote 196608/196608 bytes at offset 2147287040
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 131072/131072 bytes at offset 65536
wrote 131072/131072 bytes at offset 2147352576
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 65536/65536 bytes at offset 131072
wrote 65536/65536 bytes at offset 2147418112
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Image committed.
read 65536/65536 bytes at offset 0
read 196608/196608 bytes at offset 2147287040
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65536/65536 bytes at offset 2147287040
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65536/65536 bytes at offset 65536
read 65536/65536 bytes at offset 2147352576
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65536/65536 bytes at offset 131072
read 65536/65536 bytes at offset 2147418112
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Offset Length File
0 0x30000 TEST_DIR/t.IMGFMT.base
0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
Offset Length File
0 0x10000 TEST_DIR/t.IMGFMT.base
0x10000 0x20000 TEST_DIR/t.IMGFMT.itmd
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
Offset Length File
0 0x10000 TEST_DIR/t.IMGFMT.base
0x10000 0x10000 TEST_DIR/t.IMGFMT.itmd
0x20000 0x10000 TEST_DIR/t.IMGFMT
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
0x7ffe0000 0x10000 TEST_DIR/t.IMGFMT.itmd
0x7fff0000 0x10000 TEST_DIR/t.IMGFMT
=== Test pass 2.0 ===
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.base
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.itmd
wrote 196608/196608 bytes at offset 2147287040
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 131072/131072 bytes at offset 2147352576
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 65536/65536 bytes at offset 2147418112
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Image committed.
read 196608/196608 bytes at offset 2147287040
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65536/65536 bytes at offset 2147287040
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65536/65536 bytes at offset 2147352576
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65536/65536 bytes at offset 2147418112
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Offset Length File
0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
Offset Length File
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
Offset Length File
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
0x7ffe0000 0x10000 TEST_DIR/t.IMGFMT.itmd
0x7fff0000 0x10000 TEST_DIR/t.IMGFMT
=== Test pass 2.1 ===
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.base
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.itmd
wrote 196608/196608 bytes at offset 2147287040
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 131072/131072 bytes at offset 2147352576
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 65536/65536 bytes at offset 2147418112
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Image committed.
read 196608/196608 bytes at offset 2147287040
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65536/65536 bytes at offset 2147287040
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65536/65536 bytes at offset 2147352576
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65536/65536 bytes at offset 2147418112
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Offset Length File
0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
Offset Length File
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
Offset Length File
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
0x7ffe0000 0x10000 TEST_DIR/t.IMGFMT.itmd
0x7fff0000 0x10000 TEST_DIR/t.IMGFMT
=== Test pass 3.0 ===
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.base
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.itmd
wrote 196608/196608 bytes at offset 2147287040
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 131072/131072 bytes at offset 2147352576
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 65536/65536 bytes at offset 2147418112
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Image committed.
read 65536/65536 bytes at offset 2147287040
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65536/65536 bytes at offset 2147352576
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65536/65536 bytes at offset 2147418112
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Offset Length File
0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
Offset Length File
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
Offset Length File
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
0x7ffe0000 0x10000 TEST_DIR/t.IMGFMT.itmd
0x7fff0000 0x10000 TEST_DIR/t.IMGFMT
=== Test pass 3.1 ===
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=2202009600
Formatting 'TEST_DIR/t.IMGFMT.itmd', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.base
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600 backing_file=TEST_DIR/t.IMGFMT.itmd
wrote 196608/196608 bytes at offset 2147287040
192 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 131072/131072 bytes at offset 2147352576
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 65536/65536 bytes at offset 2147418112
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Image committed.
read 65536/65536 bytes at offset 2147287040
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65536/65536 bytes at offset 2147352576
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 65536/65536 bytes at offset 2147418112
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Offset Length File
0x7ffd0000 0x30000 TEST_DIR/t.IMGFMT.base
Offset Length File
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
0x7ffe0000 0x20000 TEST_DIR/t.IMGFMT.itmd
Offset Length File
0x7ffd0000 0x10000 TEST_DIR/t.IMGFMT.base
0x7ffe0000 0x10000 TEST_DIR/t.IMGFMT.itmd
0x7fff0000 0x10000 TEST_DIR/t.IMGFMT
*** done
+5 -2
View File
@@ -837,6 +837,7 @@ static void test_qga_guest_exec(gconstpointer fix)
int64_t pid, now, exitcode;
gsize len;
bool exited;
char *cmd;
/* exec 'echo foo bar' */
ret = qmp_fd(fixture->fd, "{'execute': 'guest-exec', 'arguments': {"
@@ -851,9 +852,10 @@ static void test_qga_guest_exec(gconstpointer fix)
/* wait for completion */
now = g_get_monotonic_time();
cmd = g_strdup_printf("{'execute': 'guest-exec-status',"
" 'arguments': { 'pid': %" PRId64 " } }", pid);
do {
ret = qmp_fd(fixture->fd, "{'execute': 'guest-exec-status',"
" 'arguments': { 'pid': %" PRId64 " } }", pid);
ret = qmp_fd(fixture->fd, cmd);
g_assert_nonnull(ret);
val = qdict_get_qdict(ret, "return");
exited = qdict_get_bool(val, "exited");
@@ -863,6 +865,7 @@ static void test_qga_guest_exec(gconstpointer fix)
} while (!exited &&
g_get_monotonic_time() < now + 5 * G_TIME_SPAN_SECOND);
g_assert(exited);
g_free(cmd);
/* check stdout */
exitcode = qdict_get_int(val, "exitcode");
+3 -2
View File
@@ -83,10 +83,11 @@ static Visitor *visitor_input_test_init_raw(TestInputVisitorData *data,
static void test_visitor_in_int(TestInputVisitorData *data,
const void *unused)
{
int64_t res = 0, value = -42;
int64_t res = 0;
int value = -42;
Visitor *v;
v = visitor_input_test_init(data, "%" PRId64, value);
v = visitor_input_test_init(data, "%d", value);
visit_type_int(v, NULL, &res, &error_abort);
g_assert_cmpint(res, ==, value);
+8
View File
@@ -1581,6 +1581,9 @@ static void gd_change_page(GtkNotebook *nb, gpointer arg1, guint arg2,
TRUE);
}
gtk_widget_set_sensitive(s->grab_item, on_vga);
#ifdef CONFIG_VTE
gtk_widget_set_sensitive(s->copy_item, vc->type == GD_VC_VTE);
#endif
gd_update_windowsize(vc);
gd_update_cursor(vc);
@@ -2246,6 +2249,11 @@ void gtk_display_init(DisplayState *ds, bool full_screen, bool grab_on_hover)
}
#endif
#ifdef CONFIG_VTE
gtk_widget_set_sensitive(s->copy_item,
gd_vc_find_current(s)->type == GD_VC_VTE);
#endif
if (full_screen) {
gtk_menu_item_activate(GTK_MENU_ITEM(s->full_screen_item));
}