* [Qemu-devel] [PATCH 01/37] target-ppc: Fix "G2leGP3" PVR
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 02/37] coroutine: trim down nesting level in perf_nesting test Michael Roth
` (42 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Andreas Färber <afaerber@suse.de>
Unlike derived PVR constants mapped to CPU_POWERPC_G2LEgp3, the
"G2leGP3" model definition itself used the CPU_POWERPC_G2LEgp1 PVR.
Fixing this will allow to alias CPU_POWERPC_G2LEgp3-using types to
"G2leGP3".
Signed-off-by: Andreas Färber <afaerber@suse.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
(cherry picked from commit bfe6d5b0daf9fdafeb0dbb7c26774dbb1bbb4507)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
target-ppc/translate_init.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c
index 6cebaa1..63e6fdc 100644
--- a/target-ppc/translate_init.c
+++ b/target-ppc/translate_init.c
@@ -8243,7 +8243,7 @@ static const ppc_def_t ppc_defs[] = {
/* PowerPC G2LE GP1 core */
POWERPC_DEF("G2leGP1", CPU_POWERPC_G2LEgp1, G2LE),
/* PowerPC G2LE GP3 core */
- POWERPC_DEF("G2leGP3", CPU_POWERPC_G2LEgp1, G2LE),
+ POWERPC_DEF("G2leGP3", CPU_POWERPC_G2LEgp3, G2LE),
/* PowerPC MPC603 microcontrollers */
/* MPC8240 */
POWERPC_DEF("MPC8240", CPU_POWERPC_MPC8240, 603E),
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 02/37] coroutine: trim down nesting level in perf_nesting test
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 01/37] target-ppc: Fix "G2leGP3" PVR Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 03/37] block: complete all IOs before .bdrv_truncate Michael Roth
` (41 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Paolo Bonzini <pbonzini@redhat.com>
20000 nested coroutines require 20 GB of virtual address space.
Only nest 1000 of them so that the test (only enabled with
"-m perf" on the command line) runs on 32-bit machines too.
Cc: qemu-stable@nongnu.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
(cherry picked from commit 027003152f4cf21952f9282b4487daf3fdd372ba)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
tests/test-coroutine.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/test-coroutine.c b/tests/test-coroutine.c
index 4c6cc81..39be046 100644
--- a/tests/test-coroutine.c
+++ b/tests/test-coroutine.c
@@ -183,7 +183,7 @@ static void perf_nesting(void)
double duration;
maxcycles = 100000000;
- maxnesting = 20000;
+ maxnesting = 1000;
Coroutine *root;
NestData nd = {
.n_enter = 0,
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 03/37] block: complete all IOs before .bdrv_truncate
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 01/37] target-ppc: Fix "G2leGP3" PVR Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 02/37] coroutine: trim down nesting level in perf_nesting test Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 04/37] tap: forbid creating multiqueue tap when hub is used Michael Roth
` (40 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Peter Lieven <pl@dlhnet.de>
bdrv_truncate() invalidates the bdrv_check_request() result for
in-flight requests, so there should better be none.
Cc: qemu-stable@nongnu.org
Signed-off-by: Peter Lieven <pl@kamp.de>
Reported-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
(cherry picked from commit 9a665b2b8640e464f0a778216fc2dca8d02acf33)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
block.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/block.c b/block.c
index 50dab8e..11f162b 100644
--- a/block.c
+++ b/block.c
@@ -2427,6 +2427,10 @@ int bdrv_truncate(BlockDriverState *bs, int64_t offset)
return -EACCES;
if (bdrv_in_use(bs))
return -EBUSY;
+
+ /* There better not be any in-flight IOs when we truncate the device. */
+ bdrv_drain_all();
+
ret = drv->bdrv_truncate(bs, offset);
if (ret == 0) {
ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 04/37] tap: forbid creating multiqueue tap when hub is used
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (2 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 03/37] block: complete all IOs before .bdrv_truncate Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 05/37] qemu-char.c: fix waiting for telnet connection message Michael Roth
` (39 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Jason Wang <jasowang@redhat.com>
Obviously, hub does not support multiqueue tap. So this patch forbids creating
multiple queue tap when hub is used to prevent the crash when command line such
as "-net tap,queues=2" is used.
Cc: qemu-stable@nongnu.org
Signed-off-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
(cherry picked from commit ce675a7579fea498397c5d2da3c5367671e9f02a)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
net/tap.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/net/tap.c b/net/tap.c
index 48c254e..daab350 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -693,6 +693,13 @@ int net_init_tap(const NetClientOptions *opts, const char *name,
queues = tap->has_queues ? tap->queues : 1;
vhostfdname = tap->has_vhostfd ? tap->vhostfd : NULL;
+ /* QEMU vlans does not support multiqueue tap, in this case peer is set.
+ * For -netdev, peer is always NULL. */
+ if (peer && (tap->has_queues || tap->has_fds || tap->has_vhostfds)) {
+ error_report("Multiqueue tap cannnot be used with QEMU vlans");
+ return -1;
+ }
+
if (tap->has_fd) {
if (tap->has_ifname || tap->has_script || tap->has_downscript ||
tap->has_vnet_hdr || tap->has_helper || tap->has_queues ||
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 05/37] qemu-char.c: fix waiting for telnet connection message
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (3 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 04/37] tap: forbid creating multiqueue tap when hub is used Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 06/37] net: reduce the unnecessary memory allocation of multiqueue Michael Roth
` (38 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Igor Mitsyanko <i.mitsyanko@gmail.com>
Current colon position in "waiting for telnet connection" message template
produces messages like:
QEMU waiting for connection on: telnet::127.0.0.16666,server
After moving a colon to the right, we will get a correct messages like:
QEMU waiting for connection on: telnet:127.0.0.1:6666,server
Signed-off-by: Igor Mitsyanko <i.mitsyanko@gmail.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
(cherry picked from commit e5545854dd1e2e3507b210ac0c1cbfca69ff0fcb)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
qemu-char.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/qemu-char.c b/qemu-char.c
index e4b0f53..3e152e1 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -2482,7 +2482,7 @@ static CharDriverState *qemu_chr_open_socket_fd(int fd, bool do_nodelay,
s->do_nodelay = do_nodelay;
getnameinfo((struct sockaddr *) &ss, ss_len, host, sizeof(host),
serv, sizeof(serv), NI_NUMERICHOST | NI_NUMERICSERV);
- snprintf(chr->filename, 256, "%s:%s:%s%s%s%s",
+ snprintf(chr->filename, 256, "%s:%s%s%s:%s%s",
is_telnet ? "telnet" : "tcp",
left, host, right, serv,
is_listen ? ",server" : "");
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 06/37] net: reduce the unnecessary memory allocation of multiqueue
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (4 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 05/37] qemu-char.c: fix waiting for telnet connection message Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 07/37] help: add docs for multiqueue tap options Michael Roth
` (37 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Jason Wang <jasowang@redhat.com>
Edivaldo reports a problem that the array of NetClientState in NICState is too
large - MAX_QUEUE_NUM(1024) which will wastes memory even if multiqueue is not
used.
Instead of static arrays, solving this issue by allocating the queues on demand
for both the NetClientState array in NICState and VirtIONetQueue array in
VirtIONet.
Tested by myself, with single virtio-net-pci device. The memory allocation is
almost the same as when multiqueue is not merged.
Cc: Edivaldo de Araujo Pereira <edivaldoapereira@yahoo.com.br>
Cc: qemu-stable@nongnu.org
Signed-off-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
(cherry picked from commit f6b26cf257232e5854c0e5c98a8685c625bf986e)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
hw/virtio-net.c | 6 ++++--
include/net/net.h | 2 +-
net/net.c | 19 +++++++++----------
3 files changed, 14 insertions(+), 13 deletions(-)
diff --git a/hw/virtio-net.c b/hw/virtio-net.c
index 573c669..bb2c26c 100644
--- a/hw/virtio-net.c
+++ b/hw/virtio-net.c
@@ -44,7 +44,7 @@ typedef struct VirtIONet
VirtIODevice vdev;
uint8_t mac[ETH_ALEN];
uint16_t status;
- VirtIONetQueue vqs[MAX_QUEUE_NUM];
+ VirtIONetQueue *vqs;
VirtQueue *ctrl_vq;
NICState *nic;
uint32_t tx_timeout;
@@ -1326,8 +1326,9 @@ VirtIODevice *virtio_net_init(DeviceState *dev, NICConf *conf,
n->vdev.set_status = virtio_net_set_status;
n->vdev.guest_notifier_mask = virtio_net_guest_notifier_mask;
n->vdev.guest_notifier_pending = virtio_net_guest_notifier_pending;
+ n->max_queues = MAX(conf->queues, 1);
+ n->vqs = g_malloc0(sizeof(VirtIONetQueue) * n->max_queues);
n->vqs[0].rx_vq = virtio_add_queue(&n->vdev, 256, virtio_net_handle_rx);
- n->max_queues = conf->queues;
n->curr_queues = 1;
n->vqs[0].n = n;
n->tx_timeout = net->txtimer;
@@ -1412,6 +1413,7 @@ void virtio_net_exit(VirtIODevice *vdev)
}
}
+ g_free(n->vqs);
qemu_del_nic(n->nic);
virtio_cleanup(&n->vdev);
}
diff --git a/include/net/net.h b/include/net/net.h
index 43a045e..cb049a1 100644
--- a/include/net/net.h
+++ b/include/net/net.h
@@ -72,7 +72,7 @@ struct NetClientState {
};
typedef struct NICState {
- NetClientState ncs[MAX_QUEUE_NUM];
+ NetClientState *ncs;
NICConf *conf;
void *opaque;
bool peer_deleted;
diff --git a/net/net.c b/net/net.c
index be03a8d..6262ed0 100644
--- a/net/net.c
+++ b/net/net.c
@@ -235,23 +235,20 @@ NICState *qemu_new_nic(NetClientInfo *info,
const char *name,
void *opaque)
{
- NetClientState *nc;
NetClientState **peers = conf->peers.ncs;
NICState *nic;
- int i;
+ int i, queues = MAX(1, conf->queues);
assert(info->type == NET_CLIENT_OPTIONS_KIND_NIC);
assert(info->size >= sizeof(NICState));
- nc = qemu_new_net_client(info, peers[0], model, name);
- nc->queue_index = 0;
-
- nic = qemu_get_nic(nc);
+ nic = g_malloc0(info->size + sizeof(NetClientState) * queues);
+ nic->ncs = (void *)nic + info->size;
nic->conf = conf;
nic->opaque = opaque;
- for (i = 1; i < conf->queues; i++) {
- qemu_net_client_setup(&nic->ncs[i], info, peers[i], model, nc->name,
+ for (i = 0; i < queues; i++) {
+ qemu_net_client_setup(&nic->ncs[i], info, peers[i], model, name,
NULL);
nic->ncs[i].queue_index = i;
}
@@ -261,7 +258,7 @@ NICState *qemu_new_nic(NetClientInfo *info,
NetClientState *qemu_get_subqueue(NICState *nic, int queue_index)
{
- return &nic->ncs[queue_index];
+ return nic->ncs + queue_index;
}
NetClientState *qemu_get_queue(NICState *nic)
@@ -273,7 +270,7 @@ NICState *qemu_get_nic(NetClientState *nc)
{
NetClientState *nc0 = nc - nc->queue_index;
- return DO_UPCAST(NICState, ncs[0], nc0);
+ return (NICState *)((void *)nc0 - nc->info->size);
}
void *qemu_get_nic_opaque(NetClientState *nc)
@@ -368,6 +365,8 @@ void qemu_del_nic(NICState *nic)
qemu_cleanup_net_client(nc);
qemu_free_net_client(nc);
}
+
+ g_free(nic);
}
void qemu_foreach_nic(qemu_nic_foreach func, void *opaque)
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 07/37] help: add docs for multiqueue tap options
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (5 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 06/37] net: reduce the unnecessary memory allocation of multiqueue Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 08/37] vga: fix byteswapping Michael Roth
` (36 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Jason Wang <jasowang@redhat.com>
Cc: Markus Armbruster <armbru@redhat.com>
Cc: Jason Wang <jasowang@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Message-id: 1361354641-51969-1-git-send-email-jasowang@redhat.com
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
(cherry picked from commit 2ca81baa0b3363d57de94f8b80c02a003b361161)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
qapi-schema.json | 6 ++++++
qemu-options.hx | 4 +++-
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/qapi-schema.json b/qapi-schema.json
index 7275b5d..cd7ea25 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -2504,6 +2504,9 @@
#
# @fd: #optional file descriptor of an already opened tap
#
+# @fds: #optional multiple file descriptors of already opened multiqueue capable
+# tap
+#
# @script: #optional script to initialize the interface
#
# @downscript: #optional script to shut down the interface
@@ -2518,6 +2521,9 @@
#
# @vhostfd: #optional file descriptor of an already opened vhost net device
#
+# @vhostfds: #optional file descriptors of multiple already opened vhost net
+# devices
+#
# @vhostforce: #optional vhost on for non-MSIX virtio guests
#
# Since 1.2
diff --git a/qemu-options.hx b/qemu-options.hx
index 9d7131a..be21048 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -1338,7 +1338,7 @@ DEF("net", HAS_ARG, QEMU_OPTION_net,
"-net tap[,vlan=n][,name=str],ifname=name\n"
" connect the host TAP network interface to VLAN 'n'\n"
#else
- "-net tap[,vlan=n][,name=str][,fd=h][,ifname=name][,script=file][,downscript=dfile][,helper=helper][,sndbuf=nbytes][,vnet_hdr=on|off][,vhost=on|off][,vhostfd=h][,vhostforce=on|off]\n"
+ "-net tap[,vlan=n][,name=str][,fd=h][,fds=x:y:...:z][,ifname=name][,script=file][,downscript=dfile][,helper=helper][,sndbuf=nbytes][,vnet_hdr=on|off][,vhost=on|off][,vhostfd=h][,vhostfds=x:y:...:z][,vhostforce=on|off]\n"
" connect the host TAP network interface to VLAN 'n'\n"
" use network scripts 'file' (default=" DEFAULT_NETWORK_SCRIPT ")\n"
" to configure it and 'dfile' (default=" DEFAULT_NETWORK_DOWN_SCRIPT ")\n"
@@ -1347,6 +1347,7 @@ DEF("net", HAS_ARG, QEMU_OPTION_net,
" use network helper 'helper' (default=" DEFAULT_BRIDGE_HELPER ") to\n"
" configure it\n"
" use 'fd=h' to connect to an already opened TAP interface\n"
+ " use 'fds=x:y:...:z' to connect to already opened multiqueue capable TAP interfaces\n"
" use 'sndbuf=nbytes' to limit the size of the send buffer (the\n"
" default is disabled 'sndbuf=0' to enable flow control set 'sndbuf=1048576')\n"
" use vnet_hdr=off to avoid enabling the IFF_VNET_HDR tap flag\n"
@@ -1355,6 +1356,7 @@ DEF("net", HAS_ARG, QEMU_OPTION_net,
" (only has effect for virtio guests which use MSIX)\n"
" use vhostforce=on to force vhost on for non-MSIX virtio guests\n"
" use 'vhostfd=h' to connect to an already opened vhost net device\n"
+ " use 'vhostfds=x:y:...:z to connect to multiple already opened vhost net devices\n"
"-net bridge[,vlan=n][,name=str][,br=bridge][,helper=helper]\n"
" connects a host TAP network interface to a host bridge device 'br'\n"
" (default=" DEFAULT_BRIDGE_INTERFACE ") using the program 'helper'\n"
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 08/37] vga: fix byteswapping.
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (6 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 07/37] help: add docs for multiqueue tap options Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 09/37] qmp: netdev_add is like -netdev, not -net, fix documentation Michael Roth
` (35 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Gerd Hoffmann <kraxel@redhat.com>
In case host and guest endianness differ the vga code first creates
a shared surface (using qemu_create_displaysurface_from), then goes
patch the surface format to indicate that the bytes must be swapped.
The switch to pixman broke that hack as the format patching isn't
propagated into the pixman image, so ui code using the pixman image
directly (such as vnc) uses the wrong format.
Fix that by adding a byteswap parameter to
qemu_create_displaysurface_from, so we'll use the correct format
when creating the surface (and the pixman image) and don't have
to patch the format afterwards.
[ v2: unbreak xen build ]
Cc: qemu-stable@nongnu.org
Cc: mark.cave-ayland@ilande.co.uk
Cc: agraf@suse.de
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Message-id: 1361349432-23884-1-git-send-email-kraxel@redhat.com
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
(cherry picked from commit b1424e0381a7f1c9969079eca4458d5f20bf1859)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
hw/qxl-render.c | 3 ++-
hw/vga.c | 18 ++++++++----------
hw/vmware_vga.c | 2 +-
hw/xenfb.c | 3 ++-
include/ui/console.h | 3 ++-
ui/console.c | 9 +++++++--
6 files changed, 22 insertions(+), 16 deletions(-)
diff --git a/hw/qxl-render.c b/hw/qxl-render.c
index 88e63f8..455fb91 100644
--- a/hw/qxl-render.c
+++ b/hw/qxl-render.c
@@ -118,7 +118,8 @@ static void qxl_render_update_area_unlocked(PCIQXLDevice *qxl)
qxl->guest_primary.surface.height,
qxl->guest_primary.bits_pp,
qxl->guest_primary.abs_stride,
- qxl->guest_primary.data);
+ qxl->guest_primary.data,
+ false);
} else {
qemu_resize_displaysurface(vga->ds,
qxl->guest_primary.surface.width,
diff --git a/hw/vga.c b/hw/vga.c
index e2ba7f2..1caf23d 100644
--- a/hw/vga.c
+++ b/hw/vga.c
@@ -1643,6 +1643,11 @@ static void vga_draw_graphic(VGACommonState *s, int full_update)
uint8_t *d;
uint32_t v, addr1, addr;
vga_draw_line_func *vga_draw_line;
+#if defined(HOST_WORDS_BIGENDIAN) == defined(TARGET_WORDS_BIGENDIAN)
+ static const bool byteswap = false;
+#else
+ static const bool byteswap = true;
+#endif
full_update |= update_basic_params(s);
@@ -1685,18 +1690,11 @@ static void vga_draw_graphic(VGACommonState *s, int full_update)
disp_width != s->last_width ||
height != s->last_height ||
s->last_depth != depth) {
-#if defined(HOST_WORDS_BIGENDIAN) == defined(TARGET_WORDS_BIGENDIAN)
- if (depth == 16 || depth == 32) {
-#else
- if (depth == 32) {
-#endif
+ if (depth == 32 || (depth == 16 && !byteswap)) {
qemu_free_displaysurface(s->ds);
s->ds->surface = qemu_create_displaysurface_from(disp_width, height, depth,
s->line_offset,
- s->vram_ptr + (s->start_addr * 4));
-#if defined(HOST_WORDS_BIGENDIAN) != defined(TARGET_WORDS_BIGENDIAN)
- s->ds->surface->pf = qemu_different_endianness_pixelformat(depth);
-#endif
+ s->vram_ptr + (s->start_addr * 4), byteswap);
dpy_gfx_resize(s->ds);
} else {
qemu_console_resize(s->ds, disp_width, height);
@@ -1715,7 +1713,7 @@ static void vga_draw_graphic(VGACommonState *s, int full_update)
s->ds->surface = qemu_create_displaysurface_from(disp_width,
height, depth,
s->line_offset,
- s->vram_ptr + (s->start_addr * 4));
+ s->vram_ptr + (s->start_addr * 4), byteswap);
dpy_gfx_setdata(s->ds);
}
diff --git a/hw/vmware_vga.c b/hw/vmware_vga.c
index cd15ee4..8fc201b 100644
--- a/hw/vmware_vga.c
+++ b/hw/vmware_vga.c
@@ -1074,7 +1074,7 @@ static void vmsvga_screen_dump(void *opaque, const char *filename, bool cswitch,
ds_get_height(s->vga.ds),
32,
ds_get_linesize(s->vga.ds),
- s->vga.vram_ptr);
+ s->vga.vram_ptr, false);
ppm_save(filename, ds, errp);
g_free(ds);
}
diff --git a/hw/xenfb.c b/hw/xenfb.c
index 903efd3..7f1f6b4 100644
--- a/hw/xenfb.c
+++ b/hw/xenfb.c
@@ -756,7 +756,8 @@ static void xenfb_update(void *opaque)
qemu_free_displaysurface(xenfb->c.ds);
xenfb->c.ds->surface = qemu_create_displaysurface_from
(xenfb->width, xenfb->height, xenfb->depth,
- xenfb->row_stride, xenfb->pixels + xenfb->offset);
+ xenfb->row_stride, xenfb->pixels + xenfb->offset,
+ false);
break;
default:
/* we must convert stuff */
diff --git a/include/ui/console.h b/include/ui/console.h
index fc23baa..18012f1 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -184,7 +184,8 @@ struct DisplayState {
void register_displaystate(DisplayState *ds);
DisplayState *get_displaystate(void);
DisplaySurface* qemu_create_displaysurface_from(int width, int height, int bpp,
- int linesize, uint8_t *data);
+ int linesize, uint8_t *data,
+ bool byteswap);
PixelFormat qemu_different_endianness_pixelformat(int bpp);
PixelFormat qemu_default_pixelformat(int bpp);
diff --git a/ui/console.c b/ui/console.c
index 0a68836..25e06a5 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -1339,11 +1339,16 @@ DisplaySurface *qemu_resize_displaysurface(DisplayState *ds,
}
DisplaySurface *qemu_create_displaysurface_from(int width, int height, int bpp,
- int linesize, uint8_t *data)
+ int linesize, uint8_t *data,
+ bool byteswap)
{
DisplaySurface *surface = g_new0(DisplaySurface, 1);
- surface->pf = qemu_default_pixelformat(bpp);
+ if (byteswap) {
+ surface->pf = qemu_different_endianness_pixelformat(bpp);
+ } else {
+ surface->pf = qemu_default_pixelformat(bpp);
+ }
surface->format = qemu_pixman_get_format(&surface->pf);
assert(surface->format != 0);
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 09/37] qmp: netdev_add is like -netdev, not -net, fix documentation
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (7 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 08/37] vga: fix byteswapping Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 10/37] qemu-ga: make guest-sync-delimited available during fsfreeze Michael Roth
` (34 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Markus Armbruster <armbru@redhat.com>
Cc: qemu-stable@nongnu.org
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
(cherry picked from commit af347aa5a521555f5342e67993eb717d4f542ba8)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
qmp-commands.hx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/qmp-commands.hx b/qmp-commands.hx
index 799adea..95022e2 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -822,7 +822,7 @@ Example:
-> { "execute": "netdev_add", "arguments": { "type": "user", "id": "netdev1" } }
<- { "return": {} }
-Note: The supported device options are the same ones supported by the '-net'
+Note: The supported device options are the same ones supported by the '-netdev'
command-line argument, which are listed in the '-help' output or QEMU's
manual
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 10/37] qemu-ga: make guest-sync-delimited available during fsfreeze
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (8 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 09/37] qmp: netdev_add is like -netdev, not -net, fix documentation Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 11/37] scsi-disk: handle io_canceled uniformly and correctly Michael Roth
` (33 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
We currently maintain a whitelist of commands that are safe during
fsfreeze. During fsfreeze, we disable all commands that aren't part of
that whitelist.
guest-sync-delimited meets the criteria for being whitelisted, and is
also required for qemu-ga clients that rely on guest-sync-delimited for
re-syncing the channel after a timeout.
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Cc: qemu-stable@nongnu.org
Reviewed-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit c5dcb6ae23a3ed7a01bae1cd75ce02abea31db5e)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
qga/main.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/qga/main.c b/qga/main.c
index db281a5..ad75171 100644
--- a/qga/main.c
+++ b/qga/main.c
@@ -85,6 +85,7 @@ static const char *ga_freeze_whitelist[] = {
"guest-ping",
"guest-info",
"guest-sync",
+ "guest-sync-delimited",
"guest-fsfreeze-status",
"guest-fsfreeze-thaw",
NULL
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 11/37] scsi-disk: handle io_canceled uniformly and correctly
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (9 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 10/37] qemu-ga: make guest-sync-delimited available during fsfreeze Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 12/37] iscsi: look for pkg-config file too Michael Roth
` (32 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Paolo Bonzini <pbonzini@redhat.com>
Always check it immediately after calling bdrv_acct_done, and
always do a "goto done" in case the "done" label has to free
some memory---as is the case for scsi_unmap_complete in the
previous patch.
This patch could fix problems that happen when a request is
split into multiple parts, and one of them is canceled. Then
the next part is fired, but the HBA's cancellation callbacks have
fired already. Whether this happens or not, depends on how the
block/ driver implements AIO cancellation. It it does a simple
bdrv_drain_all() or similar, then it will not have a problem.
If it only cancels the given AIOCB, this scenario could happen.
Cc: qemu-stable@nongnu.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
(cherry picked from commit 0c92e0e6b64c9061f7365a2712b9055ea35b52f9)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
hw/scsi-disk.c | 25 +++++++++++++++++++++----
1 file changed, 21 insertions(+), 4 deletions(-)
diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index 28e75bb..6bc739d 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -176,6 +176,9 @@ static void scsi_aio_complete(void *opaque, int ret)
assert(r->req.aiocb != NULL);
r->req.aiocb = NULL;
bdrv_acct_done(s->qdev.conf.bs, &r->acct);
+ if (r->req.io_canceled) {
+ goto done;
+ }
if (ret < 0) {
if (scsi_handle_rw_error(r, -ret)) {
@@ -221,6 +224,10 @@ static void scsi_write_do_fua(SCSIDiskReq *r)
{
SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
+ if (r->req.io_canceled) {
+ goto done;
+ }
+
if (scsi_is_cmd_fua(&r->req.cmd)) {
bdrv_acct_start(s->qdev.conf.bs, &r->acct, 0, BDRV_ACCT_FLUSH);
r->req.aiocb = bdrv_aio_flush(s->qdev.conf.bs, scsi_aio_complete, r);
@@ -228,6 +235,8 @@ static void scsi_write_do_fua(SCSIDiskReq *r)
}
scsi_req_complete(&r->req, GOOD);
+
+done:
if (!r->req.io_canceled) {
scsi_req_unref(&r->req);
}
@@ -241,6 +250,9 @@ static void scsi_dma_complete(void *opaque, int ret)
assert(r->req.aiocb != NULL);
r->req.aiocb = NULL;
bdrv_acct_done(s->qdev.conf.bs, &r->acct);
+ if (r->req.io_canceled) {
+ goto done;
+ }
if (ret < 0) {
if (scsi_handle_rw_error(r, -ret)) {
@@ -272,6 +284,9 @@ static void scsi_read_complete(void * opaque, int ret)
assert(r->req.aiocb != NULL);
r->req.aiocb = NULL;
bdrv_acct_done(s->qdev.conf.bs, &r->acct);
+ if (r->req.io_canceled) {
+ goto done;
+ }
if (ret < 0) {
if (scsi_handle_rw_error(r, -ret)) {
@@ -303,6 +318,9 @@ static void scsi_do_read(void *opaque, int ret)
r->req.aiocb = NULL;
bdrv_acct_done(s->qdev.conf.bs, &r->acct);
}
+ if (r->req.io_canceled) {
+ goto done;
+ }
if (ret < 0) {
if (scsi_handle_rw_error(r, -ret)) {
@@ -310,10 +328,6 @@ static void scsi_do_read(void *opaque, int ret)
}
}
- if (r->req.io_canceled) {
- return;
- }
-
/* The request is used as the AIO opaque value, so add a ref. */
scsi_req_ref(&r->req);
@@ -421,6 +435,9 @@ static void scsi_write_complete(void * opaque, int ret)
r->req.aiocb = NULL;
bdrv_acct_done(s->qdev.conf.bs, &r->acct);
}
+ if (r->req.io_canceled) {
+ goto done;
+ }
if (ret < 0) {
if (scsi_handle_rw_error(r, -ret)) {
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 12/37] iscsi: look for pkg-config file too
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (10 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 11/37] scsi-disk: handle io_canceled uniformly and correctly Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 13/37] scsi: do not call scsi_read_data/scsi_write_data for a canceled request Michael Roth
` (31 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Paolo Bonzini <pbonzini@redhat.com>
Due to library conflicts, Fedora will have to put libiscsi in
/usr/lib/iscsi. Simplify configuration by using a pkg-config
file. The Fedora package will distribute one, and the patch
to add it has been sent to upstream libiscsi as well.
Cc: qemu-stable@nongnu.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
(cherry picked from commit 3c33ea9640758bb625e110a77673e5abfd184e54)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
configure | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/configure b/configure
index 8789324..5fb388a 100755
--- a/configure
+++ b/configure
@@ -2759,7 +2759,13 @@ if test "$libiscsi" != "no" ; then
#include <iscsi/iscsi.h>
int main(void) { iscsi_unmap_sync(NULL,0,0,0,NULL,0); return 0; }
EOF
- if compile_prog "" "-liscsi" ; then
+ if $pkg_config --atleast-version=1.7.0 libiscsi --modversion >/dev/null 2>&1; then
+ libiscsi="yes"
+ libiscsi_cflags=$($pkg_config --cflags libiscsi 2>/dev/null)
+ libiscsi_libs=$($pkg_config --libs libiscsi 2>/dev/null)
+ CFLAGS="$CFLAGS $libiscsi_cflags"
+ LIBS="$LIBS $libiscsi_libs"
+ elif compile_prog "" "-liscsi" ; then
libiscsi="yes"
LIBS="$LIBS -liscsi"
else
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 13/37] scsi: do not call scsi_read_data/scsi_write_data for a canceled request
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (11 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 12/37] iscsi: look for pkg-config file too Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 14/37] scsi-disk: do not complete canceled UNMAP requests Michael Roth
` (30 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Paolo Bonzini <pbonzini@redhat.com>
Cc: qemu-stable@nongnu.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
(cherry picked from commit 6f6710aa99ac53b59ff0f14380830cb9ab6bdc14)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
hw/scsi-bus.c | 4 ++++
trace-events | 1 +
2 files changed, 5 insertions(+)
diff --git a/hw/scsi-bus.c b/hw/scsi-bus.c
index a97f1cd..01e1dec 100644
--- a/hw/scsi-bus.c
+++ b/hw/scsi-bus.c
@@ -1508,6 +1508,10 @@ void scsi_req_unref(SCSIRequest *req)
will start the next chunk or complete the command. */
void scsi_req_continue(SCSIRequest *req)
{
+ if (req->io_canceled) {
+ trace_scsi_req_continue_canceled(req->dev->id, req->lun, req->tag);
+ return;
+ }
trace_scsi_req_continue(req->dev->id, req->lun, req->tag);
if (req->cmd.mode == SCSI_XFER_TO_DEV) {
req->ops->write_data(req);
diff --git a/trace-events b/trace-events
index 1011f27..167f481 100644
--- a/trace-events
+++ b/trace-events
@@ -460,6 +460,7 @@ scsi_req_data(int target, int lun, int tag, int len) "target %d lun %d tag %d le
scsi_req_data_canceled(int target, int lun, int tag, int len) "target %d lun %d tag %d len %d"
scsi_req_dequeue(int target, int lun, int tag) "target %d lun %d tag %d"
scsi_req_continue(int target, int lun, int tag) "target %d lun %d tag %d"
+scsi_req_continue_canceled(int target, int lun, int tag) "target %d lun %d tag %d"
scsi_req_parsed(int target, int lun, int tag, int cmd, int mode, int xfer) "target %d lun %d tag %d command %d dir %d length %d"
scsi_req_parsed_lba(int target, int lun, int tag, int cmd, uint64_t lba) "target %d lun %d tag %d command %d lba %"PRIu64
scsi_req_parse_bad(int target, int lun, int tag, int cmd) "target %d lun %d tag %d command %d"
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 14/37] scsi-disk: do not complete canceled UNMAP requests
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (12 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 13/37] scsi: do not call scsi_read_data/scsi_write_data for a canceled request Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 15/37] rtc-test: Fix test failures with recent glib Michael Roth
` (29 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Paolo Bonzini <pbonzini@redhat.com>
Canceled requests should never be completed, and doing that could cause
accesses to a NULL hba_private field.
Cc: qemu-stable@nongnu.org
Reported-by: Stefan Priebe <s.priebe@profihost.ag>
Tested-by: Stefan Priebe <s.priebe@profihost.ag>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
(cherry picked from commit d0242eadc5bba4f3abe34bc5d536bbfb81aa9891)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
hw/scsi-disk.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index 6bc739d..c9c983a 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -1493,13 +1493,17 @@ static void scsi_unmap_complete(void *opaque, int ret)
uint32_t nb_sectors;
r->req.aiocb = NULL;
+ if (r->req.io_canceled) {
+ goto done;
+ }
+
if (ret < 0) {
if (scsi_handle_rw_error(r, -ret)) {
goto done;
}
}
- if (data->count > 0 && !r->req.io_canceled) {
+ if (data->count > 0) {
sector_num = ldq_be_p(&data->inbuf[0]);
nb_sectors = ldl_be_p(&data->inbuf[8]) & 0xffffffffULL;
if (!check_lba_range(s, sector_num, nb_sectors)) {
@@ -1516,10 +1520,9 @@ static void scsi_unmap_complete(void *opaque, int ret)
return;
}
+ scsi_req_complete(&r->req, GOOD);
+
done:
- if (data->count == 0) {
- scsi_req_complete(&r->req, GOOD);
- }
if (!r->req.io_canceled) {
scsi_req_unref(&r->req);
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 15/37] rtc-test: Fix test failures with recent glib
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (13 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 14/37] scsi-disk: do not complete canceled UNMAP requests Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 16/37] Allow virtio-net features for legacy s390 virtio bus Michael Roth
` (28 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Cole Robinson <crobinso@redhat.com>
As of glib 2.35.4, glib changed its logic for ordering test cases:
https://bugzilla.gnome.org/show_bug.cgi?id=694487
This was causing failures in rtc-test. Group the reordered test
cases into their own suite, which maintains the original ordering.
CC: qemu-stable@nongnu.org
Signed-off-by: Cole Robinson <crobinso@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
(cherry picked from commit eeb29fb9aa733f97d85857c210d6580a92a1b532)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
tests/rtc-test.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tests/rtc-test.c b/tests/rtc-test.c
index 203c0fc..2441dcf 100644
--- a/tests/rtc-test.c
+++ b/tests/rtc-test.c
@@ -387,8 +387,8 @@ int main(int argc, char **argv)
qtest_add_func("/rtc/alarm-time", alarm_time);
qtest_add_func("/rtc/set-year/20xx", set_year_20xx);
qtest_add_func("/rtc/set-year/1980", set_year_1980);
- qtest_add_func("/rtc/register_b_set_flag", register_b_set_flag);
- qtest_add_func("/rtc/fuzz-registers", fuzz_registers);
+ qtest_add_func("/rtc/misc/register_b_set_flag", register_b_set_flag);
+ qtest_add_func("/rtc/misc/fuzz-registers", fuzz_registers);
ret = g_test_run();
if (s) {
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 16/37] Allow virtio-net features for legacy s390 virtio bus
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (14 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 15/37] rtc-test: Fix test failures with recent glib Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 17/37] pseries: Add compatible property to root of device tree Michael Roth
` (27 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Christian Borntraeger <borntraeger@de.ibm.com>
Enable all virtio-net features for the legacy s390 virtio bus. This also fixes
kernel BUG at /usr/src/packages/BUILD/kernel-default-3.0.58/linux-3.0/drivers/s390/kvm/kvm_virtio.c:121!
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: qemu-stable@nongnu.org
Signed-off-by: Alexander Graf <agraf@suse.de>
(cherry picked from commit 35569cea79fd3f5ccb5b23ca024c7d3aa4d24e75)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
hw/s390x/s390-virtio-bus.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/hw/s390x/s390-virtio-bus.c b/hw/s390x/s390-virtio-bus.c
index 089ed92..d9b7f83 100644
--- a/hw/s390x/s390-virtio-bus.c
+++ b/hw/s390x/s390-virtio-bus.c
@@ -402,6 +402,7 @@ static const VirtIOBindings virtio_s390_bindings = {
static Property s390_virtio_net_properties[] = {
DEFINE_NIC_PROPERTIES(VirtIOS390Device, nic),
+ DEFINE_VIRTIO_NET_FEATURES(VirtIOS390Device, host_features),
DEFINE_PROP_UINT32("x-txtimer", VirtIOS390Device,
net.txtimer, TX_TIMER_INTERVAL),
DEFINE_PROP_INT32("x-txburst", VirtIOS390Device,
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 17/37] pseries: Add compatible property to root of device tree
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (15 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 16/37] Allow virtio-net features for legacy s390 virtio bus Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 18/37] qcow2: make is_allocated return true for zero clusters Michael Roth
` (26 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: David Gibson <david@gibson.dropbear.id.au>
Currently, for the pseries machine the device tree supplied by qemu to SLOF
and from there to the guest does not include a 'compatible property' at the
root level. Usually that works fine, since in this case the compatible
property doesn't really give any information not already found in the
'device_type' or 'model' properties.
However, the lack of 'compatible' confuses the bootloader install in the
SLES11 SP2 and SLES11 SP3 installers. This patch therefore adds a token
'compatible' property to work around that.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Cc: qemu-stable@nongnu.org
Signed-off-by: Alexander Graf <agraf@suse.de>
(cherry picked from commit d63919c93e6fb0587632adafba82c21e55ea4396)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
hw/spapr.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/hw/spapr.c b/hw/spapr.c
index e88a27a..fadf70f 100644
--- a/hw/spapr.c
+++ b/hw/spapr.c
@@ -260,6 +260,7 @@ static void *spapr_create_fdt_skel(const char *cpu_model,
_FDT((fdt_begin_node(fdt, "")));
_FDT((fdt_property_string(fdt, "device_type", "chrp")));
_FDT((fdt_property_string(fdt, "model", "IBM pSeries (emulated by qemu)")));
+ _FDT((fdt_property_string(fdt, "compatible", "qemu,pseries")));
_FDT((fdt_property_cell(fdt, "#address-cells", 0x2)));
_FDT((fdt_property_cell(fdt, "#size-cells", 0x2)));
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 18/37] qcow2: make is_allocated return true for zero clusters
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (16 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 17/37] pseries: Add compatible property to root of device tree Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 19/37] qemu-ga: use key-value store to avoid recycling fd handles after restart Michael Roth
` (25 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Paolo Bonzini <pbonzini@redhat.com>
Otherwise, live migration of the top layer will miss zero clusters and
let the backing file show through. This also matches what is done in qed.
QCOW2_CLUSTER_ZERO clusters are invalid in v2 image files. Check this
directly in qcow2_get_cluster_offset instead of replicating the test
everywhere.
Cc: qemu-stable@nongnu.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
(cherry picked from commit 381b487d54ba18c73df9db8452028a330058c505)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
block/qcow2-cluster.c | 3 +++
block/qcow2.c | 6 +-----
2 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c
index 56fccf9..bb04432 100644
--- a/block/qcow2-cluster.c
+++ b/block/qcow2-cluster.c
@@ -454,6 +454,9 @@ int qcow2_get_cluster_offset(BlockDriverState *bs, uint64_t offset,
*cluster_offset &= L2E_COMPRESSED_OFFSET_SIZE_MASK;
break;
case QCOW2_CLUSTER_ZERO:
+ if (s->qcow_version < 3) {
+ return -EIO;
+ }
c = count_contiguous_clusters(nb_clusters, s->cluster_size,
&l2_table[l2_index], 0,
QCOW_OFLAG_COMPRESSED | QCOW_OFLAG_ZERO);
diff --git a/block/qcow2.c b/block/qcow2.c
index 7610e56..b4c7c54 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -584,7 +584,7 @@ static int coroutine_fn qcow2_co_is_allocated(BlockDriverState *bs,
*pnum = 0;
}
- return (cluster_offset != 0);
+ return (cluster_offset != 0) || (ret == QCOW2_CLUSTER_ZERO);
}
/* handle reading after the end of the backing file */
@@ -665,10 +665,6 @@ static coroutine_fn int qcow2_co_readv(BlockDriverState *bs, int64_t sector_num,
break;
case QCOW2_CLUSTER_ZERO:
- if (s->qcow_version < 3) {
- ret = -EIO;
- goto fail;
- }
qemu_iovec_memset(&hd_qiov, 0, 0, 512 * cur_nr_sectors);
break;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 19/37] qemu-ga: use key-value store to avoid recycling fd handles after restart
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (17 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 18/37] qcow2: make is_allocated return true for zero clusters Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 20/37] qga/main.c: Don't use g_key_file_get/set_int64 Michael Roth
` (24 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
Hosts hold on to handles provided by guest-file-open for periods that can
span beyond the life of the qemu-ga process that issued them. Since these
are issued starting from 0 on every restart, we run the risk of issuing
duplicate handles after restarts/reboots.
As a result, users with a stale copy of these handles may end up
reading/writing corrupted data due to their existing handles effectively
being re-assigned to an unexpected file or offset.
We unfortunately do not issue handles as strings, but as integers, so a
solution such as using UUIDs can't be implemented without introducing a
new interface.
As a workaround, we fix this by implementing a persistent key-value store
that will be used to track the value of the last handle that was issued
across restarts/reboots to avoid issuing duplicates.
The store is automatically written to the same directory we currently
set via --statedir to track fsfreeze state, and so should be applicable
for stable releases where this flag is supported.
A follow-up can use this same store for handling fsfreeze state, but
that change is cosmetic and left out for now.
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Cc: qemu-stable@nongnu.org
* fixed guest_file_handle_add() return value from uint64_t to int64_t
(cherry picked from commit 39097daf15c42243742667607d2cad2c9dc4f764)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
qga/commands-posix.c | 25 +++++--
qga/guest-agent-core.h | 1 +
qga/main.c | 184 ++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 204 insertions(+), 6 deletions(-)
diff --git a/qga/commands-posix.c b/qga/commands-posix.c
index 7a0202e..1c2aff3 100644
--- a/qga/commands-posix.c
+++ b/qga/commands-posix.c
@@ -129,14 +129,22 @@ static struct {
QTAILQ_HEAD(, GuestFileHandle) filehandles;
} guest_file_state;
-static void guest_file_handle_add(FILE *fh)
+static int64_t guest_file_handle_add(FILE *fh, Error **errp)
{
GuestFileHandle *gfh;
+ int64_t handle;
+
+ handle = ga_get_fd_handle(ga_state, errp);
+ if (error_is_set(errp)) {
+ return 0;
+ }
gfh = g_malloc0(sizeof(GuestFileHandle));
- gfh->id = fileno(fh);
+ gfh->id = handle;
gfh->fh = fh;
QTAILQ_INSERT_TAIL(&guest_file_state.filehandles, gfh, next);
+
+ return handle;
}
static GuestFileHandle *guest_file_handle_find(int64_t id, Error **err)
@@ -158,7 +166,7 @@ int64_t qmp_guest_file_open(const char *path, bool has_mode, const char *mode, E
{
FILE *fh;
int fd;
- int64_t ret = -1;
+ int64_t ret = -1, handle;
if (!has_mode) {
mode = "r";
@@ -184,9 +192,14 @@ int64_t qmp_guest_file_open(const char *path, bool has_mode, const char *mode, E
return -1;
}
- guest_file_handle_add(fh);
- slog("guest-file-open, handle: %d", fd);
- return fd;
+ handle = guest_file_handle_add(fh, err);
+ if (error_is_set(err)) {
+ fclose(fh);
+ return -1;
+ }
+
+ slog("guest-file-open, handle: %d", handle);
+ return handle;
}
void qmp_guest_file_close(int64_t handle, Error **err)
diff --git a/qga/guest-agent-core.h b/qga/guest-agent-core.h
index 3354598..624a559 100644
--- a/qga/guest-agent-core.h
+++ b/qga/guest-agent-core.h
@@ -35,6 +35,7 @@ bool ga_is_frozen(GAState *s);
void ga_set_frozen(GAState *s);
void ga_unset_frozen(GAState *s);
const char *ga_fsfreeze_hook(GAState *s);
+int64_t ga_get_fd_handle(GAState *s, Error **errp);
#ifndef _WIN32
void reopen_fd_to_null(int fd);
diff --git a/qga/main.c b/qga/main.c
index ad75171..99346e1 100644
--- a/qga/main.c
+++ b/qga/main.c
@@ -15,6 +15,7 @@
#include <stdbool.h>
#include <glib.h>
#include <getopt.h>
+#include <glib/gstdio.h>
#ifndef _WIN32
#include <syslog.h>
#include <sys/wait.h>
@@ -30,6 +31,7 @@
#include "qapi/qmp/qerror.h"
#include "qapi/qmp/dispatch.h"
#include "qga/channel.h"
+#include "qemu/bswap.h"
#ifdef _WIN32
#include "qga/service-win32.h"
#include <windows.h>
@@ -53,6 +55,11 @@
#endif
#define QGA_SENTINEL_BYTE 0xFF
+typedef struct GAPersistentState {
+#define QGA_PSTATE_DEFAULT_FD_COUNTER 1000
+ int64_t fd_counter;
+} GAPersistentState;
+
struct GAState {
JSONMessageParser parser;
GMainLoop *main_loop;
@@ -76,6 +83,8 @@ struct GAState {
#ifdef CONFIG_FSFREEZE
const char *fsfreeze_hook;
#endif
+ const gchar *pstate_filepath;
+ GAPersistentState pstate;
};
struct GAState *ga_state;
@@ -725,6 +734,171 @@ VOID WINAPI service_main(DWORD argc, TCHAR *argv[])
}
#endif
+static void set_persistent_state_defaults(GAPersistentState *pstate)
+{
+ g_assert(pstate);
+ pstate->fd_counter = QGA_PSTATE_DEFAULT_FD_COUNTER;
+}
+
+static void persistent_state_from_keyfile(GAPersistentState *pstate,
+ GKeyFile *keyfile)
+{
+ g_assert(pstate);
+ g_assert(keyfile);
+ /* if any fields are missing, either because the file was tampered with
+ * by agents of chaos, or because the field wasn't present at the time the
+ * file was created, the best we can ever do is start over with the default
+ * values. so load them now, and ignore any errors in accessing key-value
+ * pairs
+ */
+ set_persistent_state_defaults(pstate);
+
+ if (g_key_file_has_key(keyfile, "global", "fd_counter", NULL)) {
+ pstate->fd_counter =
+ g_key_file_get_int64(keyfile, "global", "fd_counter", NULL);
+ }
+}
+
+static void persistent_state_to_keyfile(const GAPersistentState *pstate,
+ GKeyFile *keyfile)
+{
+ g_assert(pstate);
+ g_assert(keyfile);
+
+ g_key_file_set_int64(keyfile, "global", "fd_counter", pstate->fd_counter);
+}
+
+static gboolean write_persistent_state(const GAPersistentState *pstate,
+ const gchar *path)
+{
+ GKeyFile *keyfile = g_key_file_new();
+ GError *gerr = NULL;
+ gboolean ret = true;
+ gchar *data = NULL;
+ gsize data_len;
+
+ g_assert(pstate);
+
+ persistent_state_to_keyfile(pstate, keyfile);
+ data = g_key_file_to_data(keyfile, &data_len, &gerr);
+ if (gerr) {
+ g_critical("failed to convert persistent state to string: %s",
+ gerr->message);
+ ret = false;
+ goto out;
+ }
+
+ g_file_set_contents(path, data, data_len, &gerr);
+ if (gerr) {
+ g_critical("failed to write persistent state to %s: %s",
+ path, gerr->message);
+ ret = false;
+ goto out;
+ }
+
+out:
+ if (gerr) {
+ g_error_free(gerr);
+ }
+ if (keyfile) {
+ g_key_file_free(keyfile);
+ }
+ g_free(data);
+ return ret;
+}
+
+static gboolean read_persistent_state(GAPersistentState *pstate,
+ const gchar *path, gboolean frozen)
+{
+ GKeyFile *keyfile = NULL;
+ GError *gerr = NULL;
+ struct stat st;
+ gboolean ret = true;
+
+ g_assert(pstate);
+
+ if (stat(path, &st) == -1) {
+ /* it's okay if state file doesn't exist, but any other error
+ * indicates a permissions issue or some other misconfiguration
+ * that we likely won't be able to recover from.
+ */
+ if (errno != ENOENT) {
+ g_critical("unable to access state file at path %s: %s",
+ path, strerror(errno));
+ ret = false;
+ goto out;
+ }
+
+ /* file doesn't exist. initialize state to default values and
+ * attempt to save now. (we could wait till later when we have
+ * modified state we need to commit, but if there's a problem,
+ * such as a missing parent directory, we want to catch it now)
+ *
+ * there is a potential scenario where someone either managed to
+ * update the agent from a version that didn't use a key store
+ * while qemu-ga thought the filesystem was frozen, or
+ * deleted the key store prior to issuing a fsfreeze, prior
+ * to restarting the agent. in this case we go ahead and defer
+ * initial creation till we actually have modified state to
+ * write, otherwise fail to recover from freeze.
+ */
+ set_persistent_state_defaults(pstate);
+ if (!frozen) {
+ ret = write_persistent_state(pstate, path);
+ if (!ret) {
+ g_critical("unable to create state file at path %s", path);
+ ret = false;
+ goto out;
+ }
+ }
+ ret = true;
+ goto out;
+ }
+
+ keyfile = g_key_file_new();
+ g_key_file_load_from_file(keyfile, path, 0, &gerr);
+ if (gerr) {
+ g_critical("error loading persistent state from path: %s, %s",
+ path, gerr->message);
+ ret = false;
+ goto out;
+ }
+
+ persistent_state_from_keyfile(pstate, keyfile);
+
+out:
+ if (keyfile) {
+ g_key_file_free(keyfile);
+ }
+ if (gerr) {
+ g_error_free(gerr);
+ }
+
+ return ret;
+}
+
+int64_t ga_get_fd_handle(GAState *s, Error **errp)
+{
+ int64_t handle;
+
+ g_assert(s->pstate_filepath);
+ /* we blacklist commands and avoid operations that potentially require
+ * writing to disk when we're in a frozen state. this includes opening
+ * new files, so we should never get here in that situation
+ */
+ g_assert(!ga_is_frozen(s));
+
+ handle = s->pstate.fd_counter++;
+ if (s->pstate.fd_counter < 0) {
+ s->pstate.fd_counter = 0;
+ }
+ if (!write_persistent_state(&s->pstate, s->pstate_filepath)) {
+ error_setg(errp, "failed to commit persistent state to disk");
+ }
+
+ return handle;
+}
+
int main(int argc, char **argv)
{
const char *sopt = "hVvdm:p:l:f:F::b:s:t:";
@@ -854,7 +1028,9 @@ int main(int argc, char **argv)
ga_enable_logging(s);
s->state_filepath_isfrozen = g_strdup_printf("%s/qga.state.isfrozen",
state_dir);
+ s->pstate_filepath = g_strdup_printf("%s/qga.state", state_dir);
s->frozen = false;
+
#ifndef _WIN32
/* check if a previous instance of qemu-ga exited with filesystems' state
* marked as frozen. this could be a stale value (a non-qemu-ga process
@@ -911,6 +1087,14 @@ int main(int argc, char **argv)
}
}
+ /* load persistent state from disk */
+ if (!read_persistent_state(&s->pstate,
+ s->pstate_filepath,
+ ga_is_frozen(s))) {
+ g_critical("failed to load persistent state");
+ goto out_bad;
+ }
+
if (blacklist) {
s->blacklist = blacklist;
do {
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 20/37] qga/main.c: Don't use g_key_file_get/set_int64
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (18 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 19/37] qemu-ga: use key-value store to avoid recycling fd handles after restart Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 21/37] tcg: Fix occasional TCG broken problem when ldst optimization enabled Michael Roth
` (23 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
These functions don't exist until glib version 2.26. QEMU is currently only
mandating glib 2.12.
This patch replaces the functions with g_key_file_get/set_integer.
Unbreaks the build on Ubuntu 10.04 and RHEL 5.6.
Regression was introduced by 39097daf15c42243742667607d2cad2c9dc4f764
Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
Message-id: 1363323879-682-1-git-send-email-peter.crosthwaite@xilinx.com
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
(cherry picked from commit 4f306496183d81aed4b43762cf3bfd6e054de767)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
qga/main.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/qga/main.c b/qga/main.c
index 99346e1..74ef788 100644
--- a/qga/main.c
+++ b/qga/main.c
@@ -755,7 +755,7 @@ static void persistent_state_from_keyfile(GAPersistentState *pstate,
if (g_key_file_has_key(keyfile, "global", "fd_counter", NULL)) {
pstate->fd_counter =
- g_key_file_get_int64(keyfile, "global", "fd_counter", NULL);
+ g_key_file_get_integer(keyfile, "global", "fd_counter", NULL);
}
}
@@ -765,7 +765,7 @@ static void persistent_state_to_keyfile(const GAPersistentState *pstate,
g_assert(pstate);
g_assert(keyfile);
- g_key_file_set_int64(keyfile, "global", "fd_counter", pstate->fd_counter);
+ g_key_file_set_integer(keyfile, "global", "fd_counter", pstate->fd_counter);
}
static gboolean write_persistent_state(const GAPersistentState *pstate,
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 21/37] tcg: Fix occasional TCG broken problem when ldst optimization enabled
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (19 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 20/37] qga/main.c: Don't use g_key_file_get/set_int64 Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 22/37] virtio-ccw: Queue sanity check for notify hypercall Michael Roth
` (22 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Yeongkyoon Lee <yeongkyoon.lee@samsung.com>
is_tcg_gen_code() checks the upper limit of TCG generated code range wrong, so
that TCG could get broken occasionally only when CONFIG_QEMU_LDST_OPTIMIZATION
enabled. The reason is code_gen_buffer_max_size does not cover the upper range
up to (TCG_MAX_OP_SIZE * OPC_BUF_SIZE), thus code_gen_buffer_max_size should be
modified to code_gen_buffer_size.
CC: qemu-stable@nongnu.org
Signed-off-by: Yeongkyoon Lee <yeongkyoon.lee@samsung.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
(cherry picked from commit 52ae646d4a3ebdcdcc973492c6a56f2c49b6578f)
Conflicts:
translate-all.c
*modified to use non-tcg-ctx version of code_gen_* variables
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
translate-all.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/translate-all.c b/translate-all.c
index d367fc4..bf1db09 100644
--- a/translate-all.c
+++ b/translate-all.c
@@ -1310,10 +1310,10 @@ static void tb_link_page(TranslationBlock *tb, tb_page_addr_t phys_pc,
/* check whether the given addr is in TCG generated code buffer or not */
bool is_tcg_gen_code(uintptr_t tc_ptr)
{
- /* This can be called during code generation, code_gen_buffer_max_size
+ /* This can be called during code generation, code_gen_buffer_size
is used instead of code_gen_ptr for upper boundary checking */
return (tc_ptr >= (uintptr_t)code_gen_buffer &&
- tc_ptr < (uintptr_t)(code_gen_buffer + code_gen_buffer_max_size));
+ tc_ptr < (uintptr_t)(code_gen_buffer + code_gen_buffer_size));
}
#endif
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 22/37] virtio-ccw: Queue sanity check for notify hypercall.
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (20 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 21/37] tcg: Fix occasional TCG broken problem when ldst optimization enabled Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 23/37] qemu-bridge-helper: force usage of a very high MAC address for the bridge Michael Roth
` (21 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Cornelia Huck <cornelia.huck@de.ibm.com>
Verify that the virtio-ccw notify hypercall passed a reasonable
value for queue.
Cc: qemu-stable@nongnu.org
Reported-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
(cherry picked from commit b57ed9bf075e33cdd2f9eb545ff555301dd57221)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
hw/s390x/s390-virtio-ccw.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 6549211..f90b5e4 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -31,6 +31,9 @@ static int virtio_ccw_hcall_notify(const uint64_t *args)
if (!sch || !css_subch_visible(sch)) {
return -EINVAL;
}
+ if (queue >= VIRTIO_PCI_QUEUE_MAX) {
+ return -EINVAL;
+ }
virtio_queue_notify(virtio_ccw_get_vdev(sch), queue);
return 0;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 23/37] qemu-bridge-helper: force usage of a very high MAC address for the bridge
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (21 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 22/37] virtio-ccw: Queue sanity check for notify hypercall Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 24/37] configure: Require at least spice-protocol-0.12.3 Michael Roth
` (20 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Paolo Bonzini <pbonzini@redhat.com>
Linux uses the lowest enslaved MAC address as the MAC address of
the bridge. Set MAC address to a high value so that it does not
affect the MAC address of the bridge.
Changing the MAC address of the bridge could cause a few seconds
of network downtime.
Cc: qemu-stable@nongnu.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 1363971468-21154-1-git-send-email-pbonzini@redhat.com
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
(cherry picked from commit 226ecabfbd410c7b2041385ea4b6f083a09ce8a2)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
qemu-bridge-helper.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/qemu-bridge-helper.c b/qemu-bridge-helper.c
index 287bfd5..6a0974e 100644
--- a/qemu-bridge-helper.c
+++ b/qemu-bridge-helper.c
@@ -367,6 +367,24 @@ int main(int argc, char **argv)
goto cleanup;
}
+ /* Linux uses the lowest enslaved MAC address as the MAC address of
+ * the bridge. Set MAC address to a high value so that it doesn't
+ * affect the MAC address of the bridge.
+ */
+ if (ioctl(ctlfd, SIOCGIFHWADDR, &ifr) < 0) {
+ fprintf(stderr, "failed to get MAC address of device `%s': %s\n",
+ iface, strerror(errno));
+ ret = EXIT_FAILURE;
+ goto cleanup;
+ }
+ ifr.ifr_hwaddr.sa_data[0] = 0xFE;
+ if (ioctl(ctlfd, SIOCSIFHWADDR, &ifr) < 0) {
+ fprintf(stderr, "failed to set MAC address of device `%s': %s\n",
+ iface, strerror(errno));
+ ret = EXIT_FAILURE;
+ goto cleanup;
+ }
+
/* add the interface to the bridge */
prep_ifreq(&ifr, bridge);
ifindex = if_nametoindex(iface);
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 24/37] configure: Require at least spice-protocol-0.12.3
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (22 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 23/37] qemu-bridge-helper: force usage of a very high MAC address for the bridge Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 25/37] pseries: Add cleanup hook for PAPR virtual LAN device Michael Roth
` (19 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Michal Privoznik <mprivozn@redhat.com>
As of 5a49d3e9 we assume SPICE_PORT_EVENT_BREAK to be defined.
However, it is defined not in 0.12.2 what we require now, but in
0.12.3. Therefore in order to prevent build failure we must
adjust our minimal requirements.
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
(cherry picked from commit 358689fe299c306f1d81bea57a5067d0abb56699)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
configure | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/configure b/configure
index 5fb388a..e7468a9 100755
--- a/configure
+++ b/configure
@@ -2833,7 +2833,7 @@ EOF
spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
if $pkg_config --atleast-version=0.12.0 spice-server >/dev/null 2>&1 && \
- $pkg_config --atleast-version=0.12.2 spice-protocol > /dev/null 2>&1 && \
+ $pkg_config --atleast-version=0.12.3 spice-protocol > /dev/null 2>&1 && \
compile_prog "$spice_cflags" "$spice_libs" ; then
spice="yes"
libs_softmmu="$libs_softmmu $spice_libs"
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 25/37] pseries: Add cleanup hook for PAPR virtual LAN device
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (23 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 24/37] configure: Require at least spice-protocol-0.12.3 Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 26/37] target-ppc: Fix CPU_POWERPC_MPC8547E Michael Roth
` (18 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: David Gibson <david@gibson.dropbear.id.au>
Currently the spapr-vlan device does not supply a cleanup call for its
NetClientInfo structure. With current qemu versions, that leads to a SEGV
on exit, when net_cleanup() attempts to call the cleanup handlers on all
net clients.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Alexander Graf <agraf@suse.de>
(cherry picked from commit 156dfaded87d718a9ea798083e1c3e5ea7526713)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
hw/spapr_llan.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/hw/spapr_llan.c b/hw/spapr_llan.c
index 6ef2936..0ace2eb 100644
--- a/hw/spapr_llan.c
+++ b/hw/spapr_llan.c
@@ -175,11 +175,19 @@ static ssize_t spapr_vlan_receive(NetClientState *nc, const uint8_t *buf,
return size;
}
+static void spapr_vlan_cleanup(NetClientState *nc)
+{
+ VIOsPAPRVLANDevice *dev = qemu_get_nic_opaque(nc);
+
+ dev->nic = NULL;
+}
+
static NetClientInfo net_spapr_vlan_info = {
.type = NET_CLIENT_OPTIONS_KIND_NIC,
.size = sizeof(NICState),
.can_receive = spapr_vlan_can_receive,
.receive = spapr_vlan_receive,
+ .cleanup = spapr_vlan_cleanup,
};
static void spapr_vlan_reset(VIOsPAPRDevice *sdev)
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 26/37] target-ppc: Fix CPU_POWERPC_MPC8547E
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (24 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 25/37] pseries: Add cleanup hook for PAPR virtual LAN device Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 27/37] ide/macio: Fix macio DMA initialisation Michael Roth
` (17 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Andreas Färber <afaerber@suse.de>
It was defined to ..._MPC8545E_v21 rather than ..._MPC8547E_v21.
Due to both resolving to CPU_POWERPC_e500v2_v21 this did not show.
Fixing this nontheless helps with QOM'ifying CPU aliases.
Signed-off-by: Andreas Färber <afaerber@suse.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
(cherry picked from commit 0136d715ad985fccb8fed4bb5081d5bd20bfe88c)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
target-ppc/translate_init.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c
index 63e6fdc..a05bb7b 100644
--- a/target-ppc/translate_init.c
+++ b/target-ppc/translate_init.c
@@ -7282,7 +7282,7 @@ enum {
#define CPU_POWERPC_MPC8545E_v10 CPU_POWERPC_e500v2_v10
#define CPU_POWERPC_MPC8545E_v20 CPU_POWERPC_e500v2_v20
#define CPU_POWERPC_MPC8545E_v21 CPU_POWERPC_e500v2_v21
-#define CPU_POWERPC_MPC8547E CPU_POWERPC_MPC8545E_v21
+#define CPU_POWERPC_MPC8547E CPU_POWERPC_MPC8547E_v21
#define CPU_POWERPC_MPC8547E_v10 CPU_POWERPC_e500v2_v10
#define CPU_POWERPC_MPC8547E_v20 CPU_POWERPC_e500v2_v20
#define CPU_POWERPC_MPC8547E_v21 CPU_POWERPC_e500v2_v21
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 27/37] ide/macio: Fix macio DMA initialisation.
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (25 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 26/37] target-ppc: Fix CPU_POWERPC_MPC8547E Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 28/37] virtio-blk: fix unplug + virsh reboot Michael Roth
` (16 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Commit 07a7484e5d713f1eb7c1c37b18a8ab0d56d88875 accidentally introduced a bug
in the initialisation of the second macio DMA device which could cause some
DMA operations to segfault QEMU.
CC: Andreas Färber <afaerber@suse.de>
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Acked-by: Andreas Färber <afaerber@suse.de>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
(cherry picked from commit 02d583c7232d65920634f7553700eb348f84e472)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
hw/macio.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/macio.c b/hw/macio.c
index 74bdcd1..0c6a6b8 100644
--- a/hw/macio.c
+++ b/hw/macio.c
@@ -188,7 +188,7 @@ static int macio_newworld_initfn(PCIDevice *d)
sysbus_dev = SYS_BUS_DEVICE(&ns->ide[1]);
sysbus_connect_irq(sysbus_dev, 0, ns->irqs[3]);
sysbus_connect_irq(sysbus_dev, 1, ns->irqs[4]);
- macio_ide_register_dma(&ns->ide[0], s->dbdma, 0x1a);
+ macio_ide_register_dma(&ns->ide[1], s->dbdma, 0x1a);
ret = qdev_init(DEVICE(&ns->ide[1]));
if (ret < 0) {
return ret;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 28/37] virtio-blk: fix unplug + virsh reboot
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (26 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 27/37] ide/macio: Fix macio DMA initialisation Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 29/37] Fix page_cache leak in cache_resize Michael Roth
` (15 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Christian Borntraeger <borntraeger@de.ibm.com>
virtio-blk registers a vmstate change handler. Unfortunately this
handler is not unregistered on unplug, leading to some random
crashes if the system is restarted, e.g. via virsh reboot.
Lets unregister the vmstate change handler if the device is removed.
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
(cherry picked from commit 69b302b2044a9a0f6d157d25b39a91ff7124c61f)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
hw/virtio-blk.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
index 34913ee..f5e6ee9 100644
--- a/hw/virtio-blk.c
+++ b/hw/virtio-blk.c
@@ -36,6 +36,7 @@ typedef struct VirtIOBlock
VirtIOBlkConf *blk;
unsigned short sector_mask;
DeviceState *qdev;
+ VMChangeStateEntry *change;
#ifdef CONFIG_VIRTIO_BLK_DATA_PLANE
VirtIOBlockDataPlane *dataplane;
#endif
@@ -681,7 +682,7 @@ VirtIODevice *virtio_blk_init(DeviceState *dev, VirtIOBlkConf *blk)
}
#endif
- qemu_add_vm_change_state_handler(virtio_blk_dma_restart_cb, s);
+ s->change = qemu_add_vm_change_state_handler(virtio_blk_dma_restart_cb, s);
s->qdev = dev;
register_savevm(dev, "virtio-blk", virtio_blk_id++, 2,
virtio_blk_save, virtio_blk_load, s);
@@ -702,6 +703,7 @@ void virtio_blk_exit(VirtIODevice *vdev)
virtio_blk_data_plane_destroy(s->dataplane);
s->dataplane = NULL;
#endif
+ qemu_del_vm_change_state_handler(s->change);
unregister_savevm(s->qdev, "virtio-blk", s);
blockdev_mark_auto_del(s->bs);
virtio_cleanup(vdev);
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 29/37] Fix page_cache leak in cache_resize
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (27 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 28/37] virtio-blk: fix unplug + virsh reboot Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 30/37] page_cache: fix memory leak Michael Roth
` (14 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Orit Wasserman <owasserm@redhat.com>
Signed-off-by: Orit Wasserman <owasserm@redhat.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Juan Quintela <quintela@redhat.com>
(cherry picked from commit 0db65d624e0211a43c011579d6607a50d8f06082)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
page_cache.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/page_cache.c b/page_cache.c
index ba5640b..748957b 100644
--- a/page_cache.c
+++ b/page_cache.c
@@ -208,6 +208,7 @@ int64_t cache_resize(PageCache *cache, int64_t new_num_pages)
}
}
+ g_free(cache->page_cache);
cache->page_cache = new_cache->page_cache;
cache->max_num_items = new_cache->max_num_items;
cache->num_items = new_cache->num_items;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 30/37] page_cache: fix memory leak
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (28 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 29/37] Fix page_cache leak in cache_resize Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 31/37] qcow2: flush refcount cache correctly in alloc_refcount_block() Michael Roth
` (13 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Peter Lieven <pl@dlhnet.de>
XBZRLE encoded migration introduced a MRU page cache
meachnism. Unfortunately, cached items where never freed in
case of a collision in the page cache on cache_insert().
This lead to out of memory conditions during XBZRLE migration
if the page cache was small and there where a lot of collisions
in the cache.
Signed-off-by: Peter Lieven <pl@kamp.de>
Signed-off-by: Orit Wasserman <owasserm@redhat.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Juan Quintela <quintela@redhat.com>
(cherry picked from commit 32a1c08b60a8ac0e63b54a5793a26b5e32b36618)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
page_cache.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/page_cache.c b/page_cache.c
index 748957b..b92482c 100644
--- a/page_cache.c
+++ b/page_cache.c
@@ -152,6 +152,9 @@ void cache_insert(PageCache *cache, uint64_t addr, uint8_t *pdata)
/* actual update of entry */
it = cache_get_by_addr(cache, addr);
+ /* free old cached data if any */
+ g_free(it->it_data);
+
if (!it->it_data) {
cache->num_items++;
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 31/37] qcow2: flush refcount cache correctly in alloc_refcount_block()
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (29 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 30/37] page_cache: fix memory leak Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 32/37] qcow2: flush refcount cache correctly in qcow2_write_snapshots() Michael Roth
` (12 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Stefan Hajnoczi <stefanha@redhat.com>
update_refcount() affects the refcount cache, it does not write to disk.
Therefore bdrv_flush(bs->file) does nothing. We need to flush the
refcount cache in order to write out the refcount updates!
While we're here also add error returns when qcow2_cache_flush() fails.
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
(cherry picked from commit 9991923b262dc35f6dd8393ab4853edd7fc3724f)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
block/qcow2-refcount.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
index bc1784c..6a7a230 100644
--- a/block/qcow2-refcount.c
+++ b/block/qcow2-refcount.c
@@ -201,7 +201,10 @@ static int alloc_refcount_block(BlockDriverState *bs,
*refcount_block = NULL;
/* We write to the refcount table, so we might depend on L2 tables */
- qcow2_cache_flush(bs, s->l2_table_cache);
+ ret = qcow2_cache_flush(bs, s->l2_table_cache);
+ if (ret < 0) {
+ return ret;
+ }
/* Allocate the refcount block itself and mark it as used */
int64_t new_block = alloc_clusters_noref(bs, s->cluster_size);
@@ -237,7 +240,10 @@ static int alloc_refcount_block(BlockDriverState *bs,
goto fail_block;
}
- bdrv_flush(bs->file);
+ ret = qcow2_cache_flush(bs, s->refcount_block_cache);
+ if (ret < 0) {
+ goto fail_block;
+ }
/* Initialize the new refcount block only after updating its refcount,
* update_refcount uses the refcount cache itself */
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 32/37] qcow2: flush refcount cache correctly in qcow2_write_snapshots()
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (30 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 31/37] qcow2: flush refcount cache correctly in alloc_refcount_block() Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 33/37] linux-user/syscall.c: handle FUTEX_WAIT_BITSET in do_futex Michael Roth
` (11 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Stefan Hajnoczi <stefanha@redhat.com>
Since qcow2 metadata is cached we need to flush the caches, not just the
underlying file. Use bdrv_flush(bs) instead of bdrv_flush(bs->file).
Also add the error return path when bdrv_flush() fails and move the
flush after checking for qcow2_alloc_clusters() failure so that the
qcow2_alloc_clusters() error return value takes precedence.
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
(cherry picked from commit f6977f15561973d4a67b6aa46da88aa678c505dd)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
block/qcow2-snapshot.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c
index eb8fcd5..f4719d9 100644
--- a/block/qcow2-snapshot.c
+++ b/block/qcow2-snapshot.c
@@ -180,11 +180,14 @@ static int qcow2_write_snapshots(BlockDriverState *bs)
/* Allocate space for the new snapshot list */
snapshots_offset = qcow2_alloc_clusters(bs, snapshots_size);
- bdrv_flush(bs->file);
offset = snapshots_offset;
if (offset < 0) {
return offset;
}
+ ret = bdrv_flush(bs);
+ if (ret < 0) {
+ return ret;
+ }
/* Write all snapshots to the new list */
for(i = 0; i < s->nb_snapshots; i++) {
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 33/37] linux-user/syscall.c: handle FUTEX_WAIT_BITSET in do_futex
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (31 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 32/37] qcow2: flush refcount cache correctly in qcow2_write_snapshots() Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 34/37] linux-user: fix futex strace of FUTEX_CLOCK_REALTIME Michael Roth
` (10 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: John Rigby <john.rigby@linaro.org>
Upstream libc has recently changed to start using
FUTEX_WAIT_BITSET instead of FUTEX_WAIT and this
is causing do_futex to return -TARGET_ENOSYS.
Pass bitset in val3 to sys_futex which will be
ignored by kernel for the FUTEX_WAIT case.
Signed-off-by: John Rigby <john.rigby@linaro.org>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
(cherry picked from commit cce246e0a21577bb2372ab3a7d6789371e087de9)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
linux-user/syscall.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 9e31ea7..7bc5ba9 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -4920,6 +4920,7 @@ static int do_futex(target_ulong uaddr, int op, int val, target_ulong timeout,
#endif
switch (base_op) {
case FUTEX_WAIT:
+ case FUTEX_WAIT_BITSET:
if (timeout) {
pts = &ts;
target_to_host_timespec(pts, timeout);
@@ -4927,7 +4928,7 @@ static int do_futex(target_ulong uaddr, int op, int val, target_ulong timeout,
pts = NULL;
}
return get_errno(sys_futex(g2h(uaddr), op, tswap32(val),
- pts, NULL, 0));
+ pts, NULL, val3));
case FUTEX_WAKE:
return get_errno(sys_futex(g2h(uaddr), op, val, NULL, NULL, 0));
case FUTEX_FD:
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 34/37] linux-user: fix futex strace of FUTEX_CLOCK_REALTIME
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (32 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 33/37] linux-user/syscall.c: handle FUTEX_WAIT_BITSET in do_futex Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 35/37] linux-user: make bogus negative iovec lengths fail EINVAL Michael Roth
` (9 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: John Rigby <john.rigby@linaro.org>
Handle same as existing FUTEX_PRIVATE_FLAG.
Signed-off-by: John Rigby <john.rigby@linaro.org>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
(cherry picked from commit bfb669f39f2ecd854992924ced20b00163509043)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
linux-user/strace.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/linux-user/strace.c b/linux-user/strace.c
index 4e91a6e..f8030e0 100644
--- a/linux-user/strace.c
+++ b/linux-user/strace.c
@@ -1437,6 +1437,12 @@ if( cmd == val ) { \
cmd &= ~FUTEX_PRIVATE_FLAG;
}
#endif
+#ifdef FUTEX_CLOCK_REALTIME
+ if (cmd & FUTEX_CLOCK_REALTIME) {
+ gemu_log("FUTEX_CLOCK_REALTIME|");
+ cmd &= ~FUTEX_CLOCK_REALTIME;
+ }
+#endif
print_op(FUTEX_WAIT)
print_op(FUTEX_WAKE)
print_op(FUTEX_FD)
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 35/37] linux-user: make bogus negative iovec lengths fail EINVAL
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (33 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 34/37] linux-user: fix futex strace of FUTEX_CLOCK_REALTIME Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 36/37] linux-user/syscall.c: Don't warn about unimplemented get_robust_list Michael Roth
` (8 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Peter Maydell <peter.maydell@linaro.org>
If the guest passes us a bogus negative length for an iovec, fail
EINVAL rather than proceeding blindly forward. This fixes some of
the error cases tests for readv and writev in the LTP.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
(cherry picked from commit dfae8e00f8ddeedcda24bd28f71d4fd2a9f988b8)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
linux-user/syscall.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 7bc5ba9..b682357 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -1776,7 +1776,7 @@ static struct iovec *lock_iovec(int type, abi_ulong target_addr,
errno = 0;
return NULL;
}
- if (count > IOV_MAX) {
+ if (count < 0 || count > IOV_MAX) {
errno = EINVAL;
return NULL;
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 36/37] linux-user/syscall.c: Don't warn about unimplemented get_robust_list
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (34 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 35/37] linux-user: make bogus negative iovec lengths fail EINVAL Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 21:45 ` [Qemu-devel] [PATCH 37/37] update seabios to 1.7.2.1 Michael Roth
` (7 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Peter Maydell <peter.maydell@linaro.org>
The nature of the kernel ABI for the get_robust_list and set_robust_list
syscalls means we cannot implement them in QEMU. Make get_robust_list
silently return ENOSYS rather than using the default "print message and
then fail ENOSYS" code path, in the same way we already do for
set_robust_list, and add a comment documenting why we do this.
This silences warnings which were being produced for emulating
even trivial programs like 'ls' in x86-64-on-x86-64.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
(cherry picked from commit e9a970a8316f9f86a6c800a9a90175bd593f862c)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
linux-user/syscall.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index b682357..4e43a58 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -8551,7 +8551,20 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
#ifdef TARGET_NR_set_robust_list
case TARGET_NR_set_robust_list:
- goto unimplemented_nowarn;
+ case TARGET_NR_get_robust_list:
+ /* The ABI for supporting robust futexes has userspace pass
+ * the kernel a pointer to a linked list which is updated by
+ * userspace after the syscall; the list is walked by the kernel
+ * when the thread exits. Since the linked list in QEMU guest
+ * memory isn't a valid linked list for the host and we have
+ * no way to reliably intercept the thread-death event, we can't
+ * support these. Silently return ENOSYS so that guest userspace
+ * falls back to a non-robust futex implementation (which should
+ * be OK except in the corner case of the guest crashing while
+ * holding a mutex that is shared with another process via
+ * shared memory).
+ */
+ goto unimplemented_nowarn;
#endif
#if defined(TARGET_NR_utimensat) && defined(__NR_utimensat)
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [Qemu-devel] [PATCH 37/37] update seabios to 1.7.2.1
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (35 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 36/37] linux-user/syscall.c: Don't warn about unimplemented get_robust_list Michael Roth
@ 2013-04-02 21:45 ` Michael Roth
2013-04-02 22:04 ` [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Eric Blake
` (6 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Michael Roth @ 2013-04-02 21:45 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
From: Gerd Hoffmann <kraxel@redhat.com>
Alex Williamson (3):
seabios q35: Enable all PIRQn IRQs at startup
seabios q35: Add new PCI slot to irq routing function
seabios: Add a dummy PCI slot to irq mapping function
Avik Sil (1):
USB-EHCI: Fix null pointer assignment
Kevin O'Connor (4):
Update tools/acpi_extract.py to handle iasl 20130117 release.
Fix Makefile - don't reference "out/" directly, instead use "$(OUT)".
build: Don't require $(OUT) to be a sub-directory of the main
directory.
Verify CC is valid during build tests.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
(cherry picked from commit 5c75fb10029c5fd1e705a6ef5d698fbea06c7a33)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
pc-bios/bios.bin | Bin 131072 -> 131072 bytes
roms/seabios | 2 +-
2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/pc-bios/bios.bin b/pc-bios/bios.bin
index ab5dd9db6addf9d6a6f67697231ef604bab02fc8..ec9eeb12c62a511f2e45bfc6fe3af90cc6da0d65 100644
GIT binary patch
delta 27073
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
delta 27043
zcmaKU2Ut|c_x7D-DJrrE3j%@^R{=!@MMVKcK`fwR?<JPi#I9hEfD6X!ia|%cDb}d5
zM=XJ5ZD0XgVvks&#CmZp#29<zd(T}k=J))cPoH;p?wOf0XU?2Cb7t-=X=x5=X%0CN
zHTF2G8IPzDliI>g5IO_BfK$MhYJy+}t^#rmL3j=%))Is+T0s~NWCACFWH-P|5L(m`
zggQQg5acTew}CPsFF+7l)f0qmKn@V16NH68wfchK4733@0DT$=slvPlf?xp70e=CJ
zfr9WlSP)bV!4#MZ90&de`ZW@S6ks**4#)@-gvG$X<`53}8dwQT4;O^lfVL&_fzVdy
z6p-Fp5GvXTLak^)cm_DPOBIC1?H~;h79$A50Ppq?1n`eTFMt?e88E%0AnXIG#S6j|
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
diff --git a/roms/seabios b/roms/seabios
index 4bd8aeb..88cb66e 160000
--- a/roms/seabios
+++ b/roms/seabios
@@ -1 +1 @@
-Subproject commit 4bd8aebf3534e10d9aa21e820903f2cf9120708c
+Subproject commit 88cb66ea542906ffff8a80ef397b9e3adbb33116
--
1.7.9.5
^ permalink raw reply related [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (36 preceding siblings ...)
2013-04-02 21:45 ` [Qemu-devel] [PATCH 37/37] update seabios to 1.7.2.1 Michael Roth
@ 2013-04-02 22:04 ` Eric Blake
2013-04-03 10:50 ` [Qemu-devel] [Qemu-stable] " Michael Tokarev
2013-04-03 21:51 ` [Qemu-devel] " Aurelien Jarno
` (5 subsequent siblings)
43 siblings, 1 reply; 52+ messages in thread
From: Eric Blake @ 2013-04-02 22:04 UTC (permalink / raw)
To: Michael Roth; +Cc: qemu-devel, Stefan Hajnoczi, qemu-stable
[-- Attachment #1: Type: text/plain, Size: 895 bytes --]
On 04/02/2013 03:45 PM, Michael Roth wrote:
> Hi everyone,
>
> The following new patches are queued for QEMU stable v1.4.1:
>
> https://github.com/mdroth/qemu/commits/stable-1.4-staging
>
> The release is planned for 04-15-2013:
>
> http://wiki.qemu.org/Planning/1.4
>
> Please CC qemu-stable@nongnu.org on any patches you think should be
> included in the release. The cut-off date is 04-09-2013 for new patches.
>
> Stefan Hajnoczi (2):
> qcow2: flush refcount cache correctly in alloc_refcount_block()
> qcow2: flush refcount cache correctly in qcow2_write_snapshots()
I think we also want these from Stefan, to avoid existing libvirt from
driving migration incorrectly:
https://lists.gnu.org/archive/html/qemu-devel/2013-03/msg04797.html
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 621 bytes --]
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [Qemu-stable] Patch Round-up for stable 1.4.1, freeze next Tuesday
2013-04-02 22:04 ` [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Eric Blake
@ 2013-04-03 10:50 ` Michael Tokarev
2013-04-03 12:13 ` Hans de Goede
0 siblings, 1 reply; 52+ messages in thread
From: Michael Tokarev @ 2013-04-03 10:50 UTC (permalink / raw)
To: Eric Blake
Cc: qemu-stable, Serge Hallyn, Michael Roth, Stefan Hajnoczi,
qemu-devel
03.04.2013 02:04, Eric Blake wrote:
> On 04/02/2013 03:45 PM, Michael Roth wrote:
>> Hi everyone,
>>
>> The following new patches are queued for QEMU stable v1.4.1:
>>
>> https://github.com/mdroth/qemu/commits/stable-1.4-staging
>>
>> The release is planned for 04-15-2013:
>>
>> http://wiki.qemu.org/Planning/1.4
>>
>> Please CC qemu-stable@nongnu.org on any patches you think should be
>> included in the release. The cut-off date is 04-09-2013 for new patches.
>
>>
>> Stefan Hajnoczi (2):
>> qcow2: flush refcount cache correctly in alloc_refcount_block()
>> qcow2: flush refcount cache correctly in qcow2_write_snapshots()
>
> I think we also want these from Stefan, to avoid existing libvirt from
> driving migration incorrectly:
> https://lists.gnu.org/archive/html/qemu-devel/2013-03/msg04797.html
Definitely. There were numerous bugs reported about migration &libvirt,
please let Ubuntu huys (Serge Hallyn) verify this patchset and if that's
the issue, it should definitely be in 1.4.1. Cc'ing him.
Thanks,
/mjt
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [Qemu-stable] Patch Round-up for stable 1.4.1, freeze next Tuesday
2013-04-03 10:50 ` [Qemu-devel] [Qemu-stable] " Michael Tokarev
@ 2013-04-03 12:13 ` Hans de Goede
2013-04-04 8:04 ` Tiziano Müller
2013-04-08 17:36 ` Serge Hallyn
0 siblings, 2 replies; 52+ messages in thread
From: Hans de Goede @ 2013-04-03 12:13 UTC (permalink / raw)
To: Michael Tokarev
Cc: Michael Roth, Serge Hallyn, qemu-devel, qemu-stable,
Gerd Hoffmann, Stefan Hajnoczi
Hi,
Sorry for jumping in in the middle of this thread, but I just wrote
a patch yesterday, and Gerd included it in his usb-pull request
for today, which really should go into 1.4.1 too.
I'm talking about this patch:
http://www.kraxel.org/cgit/qemu/commit/?h=usb.79&id=aa1c9e971e80d25b92908dce3dec7c38b49480ea
Which fixes a bug where the usb-tablet is completely non-functional
with some guests, which has been reported twice already:
http://lists.gnu.org/archive/html/qemu-devel/2013-02/msg03345.html
http://bugzilla.redhat.com/show_bug.cgi?id=929068
Regards,
Hans
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [Qemu-stable] Patch Round-up for stable 1.4.1, freeze next Tuesday
2013-04-03 12:13 ` Hans de Goede
@ 2013-04-04 8:04 ` Tiziano Müller
2013-04-08 17:36 ` Serge Hallyn
1 sibling, 0 replies; 52+ messages in thread
From: Tiziano Müller @ 2013-04-04 8:04 UTC (permalink / raw)
To: qemu-devel
Hi Hans
Definitely. This was a huge problem for us with the 1.4 series so far.
Thanks a lot for fixing it!
Am Mittwoch, den 03.04.2013, 14:13 +0200 schrieb Hans de Goede:
> Hi,
>
> Sorry for jumping in in the middle of this thread, but I just wrote
> a patch yesterday, and Gerd included it in his usb-pull request
> for today, which really should go into 1.4.1 too.
>
> I'm talking about this patch:
> http://www.kraxel.org/cgit/qemu/commit/?h=usb.79&id=aa1c9e971e80d25b92908dce3dec7c38b49480ea
>
> Which fixes a bug where the usb-tablet is completely non-functional
> with some guests, which has been reported twice already:
> http://lists.gnu.org/archive/html/qemu-devel/2013-02/msg03345.html
> http://bugzilla.redhat.com/show_bug.cgi?id=929068
>
> Regards,
>
> Hans
>
--
stepping stone GmbH
Neufeldstrasse 9
CH-3012 Bern
Telefon: +41 31 332 53 63
www.stepping-stone.ch
tiziano.mueller@stepping-stone.ch
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [Qemu-stable] Patch Round-up for stable 1.4.1, freeze next Tuesday
2013-04-03 12:13 ` Hans de Goede
2013-04-04 8:04 ` Tiziano Müller
@ 2013-04-08 17:36 ` Serge Hallyn
1 sibling, 0 replies; 52+ messages in thread
From: Serge Hallyn @ 2013-04-08 17:36 UTC (permalink / raw)
To: Hans de Goede
Cc: Michael Roth, Michael Tokarev, qemu-devel, qemu-stable,
Gerd Hoffmann, Stefan Hajnoczi
Quoting Hans de Goede (hdegoede@redhat.com):
> Hi,
>
> Sorry for jumping in in the middle of this thread, but I just wrote
> a patch yesterday, and Gerd included it in his usb-pull request
> for today, which really should go into 1.4.1 too.
>
> I'm talking about this patch:
> http://www.kraxel.org/cgit/qemu/commit/?h=usb.79&id=aa1c9e971e80d25b92908dce3dec7c38b49480ea
>
> Which fixes a bug where the usb-tablet is completely non-functional
> with some guests, which has been reported twice already:
> http://lists.gnu.org/archive/html/qemu-devel/2013-02/msg03345.html
> http://bugzilla.redhat.com/show_bug.cgi?id=929068
>
> Regards,
I've been testing git://github.com/mdroth/qemu #stable-1.4-staging
(which appears to include that patch), and so far all looks good.
thanks,
-serge
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (37 preceding siblings ...)
2013-04-02 22:04 ` [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Eric Blake
@ 2013-04-03 21:51 ` Aurelien Jarno
2013-04-04 22:24 ` mdroth
2013-04-03 22:02 ` [Qemu-devel] [Qemu-stable] " Bruce Rogers
` (4 subsequent siblings)
43 siblings, 1 reply; 52+ messages in thread
From: Aurelien Jarno @ 2013-04-03 21:51 UTC (permalink / raw)
To: Michael Roth; +Cc: qemu-devel, qemu-stable
On Tue, Apr 02, 2013 at 04:45:05PM -0500, Michael Roth wrote:
> Hi everyone,
>
> The following new patches are queued for QEMU stable v1.4.1:
>
> https://github.com/mdroth/qemu/commits/stable-1.4-staging
>
> The release is planned for 04-15-2013:
>
> http://wiki.qemu.org/Planning/1.4
>
> Please CC qemu-stable@nongnu.org on any patches you think should be
> included in the release. The cut-off date is 04-09-2013 for new patches.
For the MIPS emulation, you might want to also include:
9c19eb1e205b29018f6f61c5f43db6abbe7dc0e5 target-mips: fix for incorrect multiplication with MULQ_S.PH
a345481baa2b2fb3d54f8c9ddb58dfcaf75786df target-mips: fix for sign-issue in MULQ_W helper
20c334a797bf46a4ee59a6e42be6d5e7c3cda585 target-mips: fix DSP overflow macro and affected routines
26135ead80fa1fd13e95c162dacfd06f2ba82981 target-mips: Fix accumulator selection for MIPS16 and microMIPS
8b758d0568a986d58c254b3c209691c82e0f82a1 target-mips: fix rndrashift_short_acc and code for EXTR_ instructions
They are five fixing instruction emulation.
--
Aurelien Jarno GPG: 1024D/F1BCDB73
aurelien@aurel32.net http://www.aurel32.net
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday
2013-04-03 21:51 ` [Qemu-devel] " Aurelien Jarno
@ 2013-04-04 22:24 ` mdroth
2013-04-08 22:58 ` Aurelien Jarno
0 siblings, 1 reply; 52+ messages in thread
From: mdroth @ 2013-04-04 22:24 UTC (permalink / raw)
To: Aurelien Jarno; +Cc: qemu-devel, qemu-stable
On Wed, Apr 03, 2013 at 11:51:31PM +0200, Aurelien Jarno wrote:
> On Tue, Apr 02, 2013 at 04:45:05PM -0500, Michael Roth wrote:
> > Hi everyone,
> >
> > The following new patches are queued for QEMU stable v1.4.1:
> >
> > https://github.com/mdroth/qemu/commits/stable-1.4-staging
> >
> > The release is planned for 04-15-2013:
> >
> > http://wiki.qemu.org/Planning/1.4
> >
> > Please CC qemu-stable@nongnu.org on any patches you think should be
> > included in the release. The cut-off date is 04-09-2013 for new patches.
>
> For the MIPS emulation, you might want to also include:
>
> 9c19eb1e205b29018f6f61c5f43db6abbe7dc0e5 target-mips: fix for incorrect multiplication with MULQ_S.PH
> a345481baa2b2fb3d54f8c9ddb58dfcaf75786df target-mips: fix for sign-issue in MULQ_W helper
> 20c334a797bf46a4ee59a6e42be6d5e7c3cda585 target-mips: fix DSP overflow macro and affected routines
> 26135ead80fa1fd13e95c162dacfd06f2ba82981 target-mips: Fix accumulator selection for MIPS16 and microMIPS
This guy ^ has some nasty conflicts I don't trust myself with. Can you
send a version that's backported to v1.4.0 via git cherry-pick -x?
> 8b758d0568a986d58c254b3c209691c82e0f82a1 target-mips: fix rndrashift_short_acc and code for EXTR_ instructions
>
> They are five fixing instruction emulation.
>
> --
> Aurelien Jarno GPG: 1024D/F1BCDB73
> aurelien@aurel32.net http://www.aurel32.net
>
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday
2013-04-04 22:24 ` mdroth
@ 2013-04-08 22:58 ` Aurelien Jarno
0 siblings, 0 replies; 52+ messages in thread
From: Aurelien Jarno @ 2013-04-08 22:58 UTC (permalink / raw)
To: mdroth; +Cc: qemu-devel, qemu-stable
[-- Attachment #1: Type: text/plain, Size: 1413 bytes --]
On Thu, Apr 04, 2013 at 05:24:42PM -0500, mdroth wrote:
> On Wed, Apr 03, 2013 at 11:51:31PM +0200, Aurelien Jarno wrote:
> > On Tue, Apr 02, 2013 at 04:45:05PM -0500, Michael Roth wrote:
> > > Hi everyone,
> > >
> > > The following new patches are queued for QEMU stable v1.4.1:
> > >
> > > https://github.com/mdroth/qemu/commits/stable-1.4-staging
> > >
> > > The release is planned for 04-15-2013:
> > >
> > > http://wiki.qemu.org/Planning/1.4
> > >
> > > Please CC qemu-stable@nongnu.org on any patches you think should be
> > > included in the release. The cut-off date is 04-09-2013 for new patches.
> >
> > For the MIPS emulation, you might want to also include:
> >
> > 9c19eb1e205b29018f6f61c5f43db6abbe7dc0e5 target-mips: fix for incorrect multiplication with MULQ_S.PH
> > a345481baa2b2fb3d54f8c9ddb58dfcaf75786df target-mips: fix for sign-issue in MULQ_W helper
> > 20c334a797bf46a4ee59a6e42be6d5e7c3cda585 target-mips: fix DSP overflow macro and affected routines
> > 26135ead80fa1fd13e95c162dacfd06f2ba82981 target-mips: Fix accumulator selection for MIPS16 and microMIPS
>
> This guy ^ has some nasty conflicts I don't trust myself with. Can you
> send a version that's backported to v1.4.0 via git cherry-pick -x?
>
Please find it attached, sorry for the delay.
--
Aurelien Jarno GPG: 1024D/F1BCDB73
aurelien@aurel32.net http://www.aurel32.net
[-- Attachment #2: 0001-target-mips-Fix-accumulator-selection-for-MIPS16-and.patch --]
[-- Type: text/x-diff, Size: 16681 bytes --]
>From 30947b811973648636c8676f730f18a76bd9749a Mon Sep 17 00:00:00 2001
From: Richard Sandiford <rdsandiford@googlemail.com>
Date: Mon, 21 Jan 2013 20:43:31 +0000
Subject: [PATCH] target-mips: Fix accumulator selection for MIPS16 and
microMIPS
Add accumulator arguments to gen_HILO and gen_muldiv, rather than
extracting the accumulator directly from ctx->opcode. The extraction
was only right for the standard encoding: MIPS16 doesn't have access
to the DSP registers, while microMIPS encodes the accumulator register
in a different field (bits 14 and 15).
Passing the accumulator register is probably an over-generalisation
for division and 64-bit multiplication, which never access anything
other than HI and LO, and which always pass 0 as the new argument.
Separating them felt a bit fussy though.
Signed-off-by: Richard Sandiford <rdsandiford@googlemail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
(cherry picked from commit 26135ead80fa1fd13e95c162dacfd06f2ba82981)
Conflicts:
target-mips/translate.c
---
target-mips/helper.h | 4 +-
target-mips/op_helper.c | 10 ++--
target-mips/translate.c | 148 ++++++++++++++++++++---------------------------
3 files changed, 72 insertions(+), 90 deletions(-)
diff --git a/target-mips/helper.h b/target-mips/helper.h
index cd48738..cfe98f1 100644
--- a/target-mips/helper.h
+++ b/target-mips/helper.h
@@ -24,8 +24,8 @@ DEF_HELPER_FLAGS_1(clz, TCG_CALL_NO_RWG_SE, tl, tl)
#ifdef TARGET_MIPS64
DEF_HELPER_FLAGS_1(dclo, TCG_CALL_NO_RWG_SE, tl, tl)
DEF_HELPER_FLAGS_1(dclz, TCG_CALL_NO_RWG_SE, tl, tl)
-DEF_HELPER_3(dmult, void, env, tl, tl)
-DEF_HELPER_3(dmultu, void, env, tl, tl)
+DEF_HELPER_4(dmult, void, env, int, tl, tl)
+DEF_HELPER_4(dmultu, void, env, int, tl, tl)
#endif
DEF_HELPER_3(muls, tl, env, tl, tl)
diff --git a/target-mips/op_helper.c b/target-mips/op_helper.c
index 526f84f..c054300 100644
--- a/target-mips/op_helper.c
+++ b/target-mips/op_helper.c
@@ -268,14 +268,16 @@ target_ulong helper_mulshiu(CPUMIPSState *env, target_ulong arg1,
}
#ifdef TARGET_MIPS64
-void helper_dmult(CPUMIPSState *env, target_ulong arg1, target_ulong arg2)
+void helper_dmult(CPUMIPSState *env, int acc, target_ulong arg1,
+ target_ulong arg2)
{
- muls64(&(env->active_tc.LO[0]), &(env->active_tc.HI[0]), arg1, arg2);
+ muls64(&(env->active_tc.LO[acc]), &(env->active_tc.HI[acc]), arg1, arg2);
}
-void helper_dmultu(CPUMIPSState *env, target_ulong arg1, target_ulong arg2)
+void helper_dmultu(CPUMIPSState *env, int acc, target_ulong arg1,
+ target_ulong arg2)
{
- mulu64(&(env->active_tc.LO[0]), &(env->active_tc.HI[0]), arg1, arg2);
+ mulu64(&(env->active_tc.LO[acc]), &(env->active_tc.HI[acc]), arg1, arg2);
}
#endif
diff --git a/target-mips/translate.c b/target-mips/translate.c
index 3b77b53..9ed6477 100644
--- a/target-mips/translate.c
+++ b/target-mips/translate.c
@@ -2582,10 +2582,9 @@ static void gen_shift(DisasContext *ctx, uint32_t opc,
}
/* Arithmetic on HI/LO registers */
-static void gen_HILO (DisasContext *ctx, uint32_t opc, int reg)
+static void gen_HILO(DisasContext *ctx, uint32_t opc, int acc, int reg)
{
const char *opn = "hilo";
- unsigned int acc;
if (reg == 0 && (opc == OPC_MFHI || opc == OPC_MFLO)) {
/* Treat as NOP. */
@@ -2593,12 +2592,6 @@ static void gen_HILO (DisasContext *ctx, uint32_t opc, int reg)
return;
}
- if (opc == OPC_MFHI || opc == OPC_MFLO) {
- acc = ((ctx->opcode) >> 21) & 0x03;
- } else {
- acc = ((ctx->opcode) >> 11) & 0x03;
- }
-
if (acc != 0) {
check_dsp(ctx);
}
@@ -2661,12 +2654,11 @@ static void gen_HILO (DisasContext *ctx, uint32_t opc, int reg)
MIPS_DEBUG("%s %s", opn, regnames[reg]);
}
-static void gen_muldiv (DisasContext *ctx, uint32_t opc,
- int rs, int rt)
+static void gen_muldiv(DisasContext *ctx, uint32_t opc,
+ int acc, int rs, int rt)
{
const char *opn = "mul/div";
TCGv t0, t1;
- unsigned int acc;
t0 = tcg_temp_new();
t1 = tcg_temp_new();
@@ -2674,6 +2666,10 @@ static void gen_muldiv (DisasContext *ctx, uint32_t opc,
gen_load_gpr(t0, rs);
gen_load_gpr(t1, rt);
+ if (acc != 0) {
+ check_dsp(ctx);
+ }
+
switch (opc) {
case OPC_DIV:
{
@@ -2688,10 +2684,10 @@ static void gen_muldiv (DisasContext *ctx, uint32_t opc,
tcg_gen_or_tl(t2, t2, t3);
tcg_gen_movi_tl(t3, 0);
tcg_gen_movcond_tl(TCG_COND_NE, t1, t2, t3, t2, t1);
- tcg_gen_div_tl(cpu_LO[0], t0, t1);
- tcg_gen_rem_tl(cpu_HI[0], t0, t1);
- tcg_gen_ext32s_tl(cpu_LO[0], cpu_LO[0]);
- tcg_gen_ext32s_tl(cpu_HI[0], cpu_HI[0]);
+ tcg_gen_div_tl(cpu_LO[acc], t0, t1);
+ tcg_gen_rem_tl(cpu_HI[acc], t0, t1);
+ tcg_gen_ext32s_tl(cpu_LO[acc], cpu_LO[acc]);
+ tcg_gen_ext32s_tl(cpu_HI[acc], cpu_HI[acc]);
tcg_temp_free(t3);
tcg_temp_free(t2);
}
@@ -2704,10 +2700,10 @@ static void gen_muldiv (DisasContext *ctx, uint32_t opc,
tcg_gen_ext32u_tl(t0, t0);
tcg_gen_ext32u_tl(t1, t1);
tcg_gen_movcond_tl(TCG_COND_EQ, t1, t1, t2, t3, t1);
- tcg_gen_divu_tl(cpu_LO[0], t0, t1);
- tcg_gen_remu_tl(cpu_HI[0], t0, t1);
- tcg_gen_ext32s_tl(cpu_LO[0], cpu_LO[0]);
- tcg_gen_ext32s_tl(cpu_HI[0], cpu_HI[0]);
+ tcg_gen_divu_tl(cpu_LO[acc], t0, t1);
+ tcg_gen_remu_tl(cpu_HI[acc], t0, t1);
+ tcg_gen_ext32s_tl(cpu_LO[acc], cpu_LO[acc]);
+ tcg_gen_ext32s_tl(cpu_HI[acc], cpu_HI[acc]);
tcg_temp_free(t3);
tcg_temp_free(t2);
}
@@ -2717,11 +2713,6 @@ static void gen_muldiv (DisasContext *ctx, uint32_t opc,
{
TCGv_i64 t2 = tcg_temp_new_i64();
TCGv_i64 t3 = tcg_temp_new_i64();
- acc = ((ctx->opcode) >> 11) & 0x03;
- if (acc != 0) {
- check_dsp(ctx);
- }
-
tcg_gen_ext_tl_i64(t2, t0);
tcg_gen_ext_tl_i64(t3, t1);
tcg_gen_mul_i64(t2, t2, t3);
@@ -2739,11 +2730,6 @@ static void gen_muldiv (DisasContext *ctx, uint32_t opc,
{
TCGv_i64 t2 = tcg_temp_new_i64();
TCGv_i64 t3 = tcg_temp_new_i64();
- acc = ((ctx->opcode) >> 11) & 0x03;
- if (acc != 0) {
- check_dsp(ctx);
- }
-
tcg_gen_ext32u_tl(t0, t0);
tcg_gen_ext32u_tl(t1, t1);
tcg_gen_extu_tl_i64(t2, t0);
@@ -2771,8 +2757,8 @@ static void gen_muldiv (DisasContext *ctx, uint32_t opc,
tcg_gen_or_tl(t2, t2, t3);
tcg_gen_movi_tl(t3, 0);
tcg_gen_movcond_tl(TCG_COND_NE, t1, t2, t3, t2, t1);
- tcg_gen_div_tl(cpu_LO[0], t0, t1);
- tcg_gen_rem_tl(cpu_HI[0], t0, t1);
+ tcg_gen_div_tl(cpu_LO[acc], t0, t1);
+ tcg_gen_rem_tl(cpu_HI[acc], t0, t1);
tcg_temp_free(t3);
tcg_temp_free(t2);
}
@@ -2783,19 +2769,19 @@ static void gen_muldiv (DisasContext *ctx, uint32_t opc,
TCGv t2 = tcg_const_tl(0);
TCGv t3 = tcg_const_tl(1);
tcg_gen_movcond_tl(TCG_COND_EQ, t1, t1, t2, t3, t1);
- tcg_gen_divu_i64(cpu_LO[0], t0, t1);
- tcg_gen_remu_i64(cpu_HI[0], t0, t1);
+ tcg_gen_divu_i64(cpu_LO[acc], t0, t1);
+ tcg_gen_remu_i64(cpu_HI[acc], t0, t1);
tcg_temp_free(t3);
tcg_temp_free(t2);
}
opn = "ddivu";
break;
case OPC_DMULT:
- gen_helper_dmult(cpu_env, t0, t1);
+ gen_helper_dmult(cpu_env, acc, t0, t1);
opn = "dmult";
break;
case OPC_DMULTU:
- gen_helper_dmultu(cpu_env, t0, t1);
+ gen_helper_dmultu(cpu_env, acc, t0, t1);
opn = "dmultu";
break;
#endif
@@ -2803,10 +2789,6 @@ static void gen_muldiv (DisasContext *ctx, uint32_t opc,
{
TCGv_i64 t2 = tcg_temp_new_i64();
TCGv_i64 t3 = tcg_temp_new_i64();
- acc = ((ctx->opcode) >> 11) & 0x03;
- if (acc != 0) {
- check_dsp(ctx);
- }
tcg_gen_ext_tl_i64(t2, t0);
tcg_gen_ext_tl_i64(t3, t1);
@@ -2827,10 +2809,6 @@ static void gen_muldiv (DisasContext *ctx, uint32_t opc,
{
TCGv_i64 t2 = tcg_temp_new_i64();
TCGv_i64 t3 = tcg_temp_new_i64();
- acc = ((ctx->opcode) >> 11) & 0x03;
- if (acc != 0) {
- check_dsp(ctx);
- }
tcg_gen_ext32u_tl(t0, t0);
tcg_gen_ext32u_tl(t1, t1);
@@ -2853,10 +2831,6 @@ static void gen_muldiv (DisasContext *ctx, uint32_t opc,
{
TCGv_i64 t2 = tcg_temp_new_i64();
TCGv_i64 t3 = tcg_temp_new_i64();
- acc = ((ctx->opcode) >> 11) & 0x03;
- if (acc != 0) {
- check_dsp(ctx);
- }
tcg_gen_ext_tl_i64(t2, t0);
tcg_gen_ext_tl_i64(t3, t1);
@@ -2877,10 +2851,6 @@ static void gen_muldiv (DisasContext *ctx, uint32_t opc,
{
TCGv_i64 t2 = tcg_temp_new_i64();
TCGv_i64 t3 = tcg_temp_new_i64();
- acc = ((ctx->opcode) >> 11) & 0x03;
- if (acc != 0) {
- check_dsp(ctx);
- }
tcg_gen_ext32u_tl(t0, t0);
tcg_gen_ext32u_tl(t1, t1);
@@ -10143,7 +10113,7 @@ static int decode_mips16_opc (CPUMIPSState *env, DisasContext *ctx,
gen_logic(ctx, OPC_NOR, rx, ry, 0);
break;
case RR_MFHI:
- gen_HILO(ctx, OPC_MFHI, rx);
+ gen_HILO(ctx, OPC_MFHI, 0, rx);
break;
case RR_CNVT:
switch (cnvt_op) {
@@ -10175,7 +10145,7 @@ static int decode_mips16_opc (CPUMIPSState *env, DisasContext *ctx,
}
break;
case RR_MFLO:
- gen_HILO(ctx, OPC_MFLO, rx);
+ gen_HILO(ctx, OPC_MFLO, 0, rx);
break;
#if defined (TARGET_MIPS64)
case RR_DSRA:
@@ -10196,33 +10166,33 @@ static int decode_mips16_opc (CPUMIPSState *env, DisasContext *ctx,
break;
#endif
case RR_MULT:
- gen_muldiv(ctx, OPC_MULT, rx, ry);
+ gen_muldiv(ctx, OPC_MULT, 0, rx, ry);
break;
case RR_MULTU:
- gen_muldiv(ctx, OPC_MULTU, rx, ry);
+ gen_muldiv(ctx, OPC_MULTU, 0, rx, ry);
break;
case RR_DIV:
- gen_muldiv(ctx, OPC_DIV, rx, ry);
+ gen_muldiv(ctx, OPC_DIV, 0, rx, ry);
break;
case RR_DIVU:
- gen_muldiv(ctx, OPC_DIVU, rx, ry);
+ gen_muldiv(ctx, OPC_DIVU, 0, rx, ry);
break;
#if defined (TARGET_MIPS64)
case RR_DMULT:
check_mips_64(ctx);
- gen_muldiv(ctx, OPC_DMULT, rx, ry);
+ gen_muldiv(ctx, OPC_DMULT, 0, rx, ry);
break;
case RR_DMULTU:
check_mips_64(ctx);
- gen_muldiv(ctx, OPC_DMULTU, rx, ry);
+ gen_muldiv(ctx, OPC_DMULTU, 0, rx, ry);
break;
case RR_DDIV:
check_mips_64(ctx);
- gen_muldiv(ctx, OPC_DDIV, rx, ry);
+ gen_muldiv(ctx, OPC_DDIV, 0, rx, ry);
break;
case RR_DDIVU:
check_mips_64(ctx);
- gen_muldiv(ctx, OPC_DDIVU, rx, ry);
+ gen_muldiv(ctx, OPC_DDIVU, 0, rx, ry);
break;
#endif
default:
@@ -10931,11 +10901,11 @@ static void gen_pool16c_insn(DisasContext *ctx, int *is_branch)
break;
case MFHI16 + 0:
case MFHI16 + 1:
- gen_HILO(ctx, OPC_MFHI, uMIPS_RS5(ctx->opcode));
+ gen_HILO(ctx, OPC_MFHI, 0, uMIPS_RS5(ctx->opcode));
break;
case MFLO16 + 0:
case MFLO16 + 1:
- gen_HILO(ctx, OPC_MFLO, uMIPS_RS5(ctx->opcode));
+ gen_HILO(ctx, OPC_MFLO, 0, uMIPS_RS5(ctx->opcode));
break;
case BREAK16:
generate_exception(ctx, EXCP_BREAK);
@@ -11133,30 +11103,34 @@ static void gen_pool32axf (CPUMIPSState *env, DisasContext *ctx, int rt, int rs,
break;
case MULT:
mips32_op = OPC_MULT;
- goto do_muldiv;
+ goto do_mul;
case MULTU:
mips32_op = OPC_MULTU;
- goto do_muldiv;
+ goto do_mul;
case DIV:
mips32_op = OPC_DIV;
- goto do_muldiv;
+ goto do_div;
case DIVU:
mips32_op = OPC_DIVU;
- goto do_muldiv;
+ goto do_div;
+ do_div:
+ check_insn(ctx, ISA_MIPS32);
+ gen_muldiv(ctx, mips32_op, 0, rs, rt);
+ break;
case MADD:
mips32_op = OPC_MADD;
- goto do_muldiv;
+ goto do_mul;
case MADDU:
mips32_op = OPC_MADDU;
- goto do_muldiv;
+ goto do_mul;
case MSUB:
mips32_op = OPC_MSUB;
- goto do_muldiv;
+ goto do_mul;
case MSUBU:
mips32_op = OPC_MSUBU;
- do_muldiv:
+ do_mul:
check_insn(ctx, ISA_MIPS32);
- gen_muldiv(ctx, mips32_op, rs, rt);
+ gen_muldiv(ctx, mips32_op, (ctx->opcode >> 14) & 3, rs, rt);
break;
default:
goto pool32axf_invalid;
@@ -11293,18 +11267,18 @@ static void gen_pool32axf (CPUMIPSState *env, DisasContext *ctx, int rt, int rs,
}
break;
case 0x35:
- switch (minor) {
+ switch (minor & 3) {
case MFHI32:
- gen_HILO(ctx, OPC_MFHI, rs);
+ gen_HILO(ctx, OPC_MFHI, minor >> 2, rs);
break;
case MFLO32:
- gen_HILO(ctx, OPC_MFLO, rs);
+ gen_HILO(ctx, OPC_MFLO, minor >> 2, rs);
break;
case MTHI32:
- gen_HILO(ctx, OPC_MTHI, rs);
+ gen_HILO(ctx, OPC_MTHI, minor >> 2, rs);
break;
case MTLO32:
- gen_HILO(ctx, OPC_MTLO, rs);
+ gen_HILO(ctx, OPC_MTLO, minor >> 2, rs);
break;
default:
goto pool32axf_invalid;
@@ -14477,13 +14451,19 @@ static void decode_opc (CPUMIPSState *env, DisasContext *ctx, int *is_branch)
case OPC_XOR:
gen_logic(ctx, op1, rd, rs, rt);
break;
- case OPC_MULT ... OPC_DIVU:
+ case OPC_MULT:
+ case OPC_MULTU:
if (sa) {
check_insn(ctx, INSN_VR54XX);
op1 = MASK_MUL_VR54XX(ctx->opcode);
gen_mul_vr54xx(ctx, op1, rd, rs, rt);
- } else
- gen_muldiv(ctx, op1, rs, rt);
+ } else {
+ gen_muldiv(ctx, op1, rd & 3, rs, rt);
+ }
+ break;
+ case OPC_DIV:
+ case OPC_DIVU:
+ gen_muldiv(ctx, op1, 0, rs, rt);
break;
case OPC_JR ... OPC_JALR:
gen_compute_branch(ctx, op1, 4, rs, rd, sa);
@@ -14495,11 +14475,11 @@ static void decode_opc (CPUMIPSState *env, DisasContext *ctx, int *is_branch)
break;
case OPC_MFHI: /* Move from HI/LO */
case OPC_MFLO:
- gen_HILO(ctx, op1, rd);
+ gen_HILO(ctx, op1, rs & 3, rd);
break;
case OPC_MTHI:
case OPC_MTLO: /* Move to HI/LO */
- gen_HILO(ctx, op1, rs);
+ gen_HILO(ctx, op1, rd & 3, rs);
break;
case OPC_PMON: /* Pmon entry point, also R4010 selsl */
#ifdef MIPS_STRICT_STANDARD
@@ -14619,7 +14599,7 @@ static void decode_opc (CPUMIPSState *env, DisasContext *ctx, int *is_branch)
case OPC_DMULT ... OPC_DDIVU:
check_insn(ctx, ISA_MIPS3);
check_mips_64(ctx);
- gen_muldiv(ctx, op1, rs, rt);
+ gen_muldiv(ctx, op1, 0, rs, rt);
break;
#endif
default: /* Invalid */
@@ -14634,7 +14614,7 @@ static void decode_opc (CPUMIPSState *env, DisasContext *ctx, int *is_branch)
case OPC_MADD ... OPC_MADDU: /* Multiply and add/sub */
case OPC_MSUB ... OPC_MSUBU:
check_insn(ctx, ISA_MIPS32);
- gen_muldiv(ctx, op1, rs, rt);
+ gen_muldiv(ctx, op1, rd & 3, rs, rt);
break;
case OPC_MUL:
gen_arith(ctx, op1, rd, rs, rt);
--
1.7.10.4
^ permalink raw reply related [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] [Qemu-stable] Patch Round-up for stable 1.4.1, freeze next Tuesday
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (38 preceding siblings ...)
2013-04-03 21:51 ` [Qemu-devel] " Aurelien Jarno
@ 2013-04-03 22:02 ` Bruce Rogers
2013-04-04 1:24 ` [Qemu-devel] " Cole Robinson
` (3 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Bruce Rogers @ 2013-04-03 22:02 UTC (permalink / raw)
To: Michael Roth, qemu-devel; +Cc: qemu-stable
>>> On 4/2/2013 at 03:45 PM, Michael Roth <mdroth@linux.vnet.ibm.com> wrote:
> Hi everyone,
>
> The following new patches are queued for QEMU stable v1.4.1:
>
> https://github.com/mdroth/qemu/commits/stable-1.4-staging
>
> The release is planned for 04-15-2013:
>
> http://wiki.qemu.org/Planning/1.4
>
> Please CC qemu-stable@nongnu.org on any patches you think should be
> included in the release. The cut-off date is 04-09-2013 for new patches.
>
Please include the following:
560e63965232e37d1916a447125cf91c18a96930 acpi: initialize s4_val used in s4 shutdown
Thanks,
Bruce
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (39 preceding siblings ...)
2013-04-03 22:02 ` [Qemu-devel] [Qemu-stable] " Bruce Rogers
@ 2013-04-04 1:24 ` Cole Robinson
2013-04-04 5:55 ` Peter Lieven
` (2 subsequent siblings)
43 siblings, 0 replies; 52+ messages in thread
From: Cole Robinson @ 2013-04-04 1:24 UTC (permalink / raw)
To: Michael Roth; +Cc: Gerd Hoffmann, qemu-devel, qemu-stable
On 04/02/2013 05:45 PM, Michael Roth wrote:
> Hi everyone,
>
> The following new patches are queued for QEMU stable v1.4.1:
>
> https://github.com/mdroth/qemu/commits/stable-1.4-staging
>
> The release is planned for 04-15-2013:
>
> http://wiki.qemu.org/Planning/1.4
>
> Please CC qemu-stable@nongnu.org on any patches you think should be
> included in the release. The cut-off date is 04-09-2013 for new patches.
>
> Testing/feedback is greatly appreciated.
>
Hi Michael,
There's also:
commit c70a01e449536c616c85ab820c6fbad7d7e9cf39
Author: Markus Armbruster <armbru@redhat.com>
Date: Wed Feb 13 19:49:40 2013 +0100
doc: Fix texinfo @table markup in qemu-options.hx
This fixes doc generation with texinfo 5. Well, I haven't actually confirmed
that this patch fixes things, but we are carrying a similar patch in Fedora
that didn't land upstream:
https://lists.gnu.org/archive/html/qemu-devel/2013-02/msg03460.html
We're also carrying:
commit c099e7aa0295678859d58e9e60b7619f6ae3bac8
Author: Gerd Hoffmann <kraxel@redhat.com>
Date: Thu Feb 28 11:08:50 2013 +0100
qxl: better vga init in enter_vga_mode
This patch 'fixed' a VNC + QXL crasher on our F18 qemu-kvm 1.2.2 package, more
info here:
https://bugzilla.redhat.com/show_bug.cgi?id=919777
The issue didn't reproduce on 1.4, but since the patch applied cleanly I
pushed it there as well. Maybe Gerd has thoughts on whether it's appropriate
for 1.4 stable.
Thanks,
Cole
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (40 preceding siblings ...)
2013-04-04 1:24 ` [Qemu-devel] " Cole Robinson
@ 2013-04-04 5:55 ` Peter Lieven
2013-04-05 0:50 ` mdroth
2013-04-04 12:06 ` Paolo Bonzini
2013-04-05 15:06 ` mdroth
43 siblings, 1 reply; 52+ messages in thread
From: Peter Lieven @ 2013-04-04 5:55 UTC (permalink / raw)
To: Michael Roth; +Cc: qemu-devel, qemu-stable
On 02.04.2013 23:45, Michael Roth wrote:
> Hi everyone,
>
> The following new patches are queued for QEMU stable v1.4.1:
>
> https://github.com/mdroth/qemu/commits/stable-1.4-staging
>
> The release is planned for 04-15-2013:
>
> http://wiki.qemu.org/Planning/1.4
>
> Please CC qemu-stable@nongnu.org on any patches you think should be
> included in the release. The cut-off date is 04-09-2013 for new patches.
>
> Testing/feedback is greatly appreciated.
Please include
5c91668 Revert "block: complete all IOs before .bdrv_truncate"
92b7a08 block: complete all IOs before resizing a device
142c6b1 vl.c: call bdrv_init_with_whitelist() before cmdline parsing
Peter
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday
2013-04-04 5:55 ` Peter Lieven
@ 2013-04-05 0:50 ` mdroth
0 siblings, 0 replies; 52+ messages in thread
From: mdroth @ 2013-04-05 0:50 UTC (permalink / raw)
To: Peter Lieven; +Cc: qemu-devel, qemu-stable
On Thu, Apr 04, 2013 at 07:55:02AM +0200, Peter Lieven wrote:
> On 02.04.2013 23:45, Michael Roth wrote:
> >Hi everyone,
> >
> >The following new patches are queued for QEMU stable v1.4.1:
> >
> >https://github.com/mdroth/qemu/commits/stable-1.4-staging
> >
> >The release is planned for 04-15-2013:
> >
> >http://wiki.qemu.org/Planning/1.4
> >
> >Please CC qemu-stable@nongnu.org on any patches you think should be
> >included in the release. The cut-off date is 04-09-2013 for new patches.
> >
> >Testing/feedback is greatly appreciated.
> Please include
>
> 5c91668 Revert "block: complete all IOs before .bdrv_truncate"
> 92b7a08 block: complete all IOs before resizing a device
> 142c6b1 vl.c: call bdrv_init_with_whitelist() before cmdline parsing
This one ^ causes a segfault on top of 1.4.0:
mdroth@loki:~/w/qemu-build-stable$ gdb --args x86_64-softmmu/qemu-system-x86_64
GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://bugs.launchpad.net/gdb-linaro/>...
Reading symbols from /home/mdroth/dev/kvm/qemu-build-stable/x86_64-softmmu/qemu-system-x86_64...done.
(gdb) run
Starting program: /home/mdroth/dev/kvm/qemu-build-stable/x86_64-softmmu/qemu-system-x86_64
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Program received signal SIGSEGV, Segmentation fault.
aio_set_fd_handler (ctx=0x0, fd=8, io_read=0x55555570a2d0 <event_notifier_ready>, io_write=0,
io_flush=0x55555570a1d0 <thread_pool_active>, opaque=0x55555600b9e0)
at /home/mdroth/w/qemu-stable.git/aio-posix.c:269
269 }
(gdb) bt
#0 aio_set_fd_handler (ctx=0x0, fd=8, io_read=0x55555570a2d0 <event_notifier_ready>, io_write=0,
io_flush=0x55555570a1d0 <thread_pool_active>, opaque=0x55555600b9e0)
at /home/mdroth/w/qemu-stable.git/aio-posix.c:269
#1 0x000055555570a27d in thread_pool_init () at /home/mdroth/w/qemu-stable.git/thread-pool.c:282
#2 0x000055555583529a in module_call_init (type=<optimized out>)
at /home/mdroth/w/qemu-stable.git/util/module.c:79
#3 0x00005555555c6ad1 in main (argc=1, argv=0x7fffffffe3c8, envp=<optimized out>)
at /home/mdroth/w/qemu-stable.git/vl.c:2890
(gdb)
>From what I can tell initialization to before qemu_init_main_loop() causes
thread-pools block_init() function to get called before qemu_aio_context is
set. This isn't an issue upstream due to the following patch:
f7311ccc630d925e7351e9440b7ad8bc6f0a51de
Which I think is out of scope for stable. Not sure what the right approach is
here.
>
> Peter
>
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (41 preceding siblings ...)
2013-04-04 5:55 ` Peter Lieven
@ 2013-04-04 12:06 ` Paolo Bonzini
2013-04-05 15:06 ` mdroth
43 siblings, 0 replies; 52+ messages in thread
From: Paolo Bonzini @ 2013-04-04 12:06 UTC (permalink / raw)
To: Michael Roth; +Cc: qemu-devel, qemu-stable
Il 02/04/2013 23:45, Michael Roth ha scritto:
> Hi everyone,
>
> The following new patches are queued for QEMU stable v1.4.1:
>
> https://github.com/mdroth/qemu/commits/stable-1.4-staging
>
> The release is planned for 04-15-2013:
>
> http://wiki.qemu.org/Planning/1.4
>
> Please CC qemu-stable@nongnu.org on any patches you think should be
> included in the release. The cut-off date is 04-09-2013 for new patches.
Please include
http://permalink.gmane.org/gmane.comp.emulators.qemu/202715 (compiler:
fix warning with GCC 4.8.0). Forgot to CC qemu-stable, sorry.
Paolo
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday
2013-04-02 21:45 [Qemu-devel] Patch Round-up for stable 1.4.1, freeze next Tuesday Michael Roth
` (42 preceding siblings ...)
2013-04-04 12:06 ` Paolo Bonzini
@ 2013-04-05 15:06 ` mdroth
43 siblings, 0 replies; 52+ messages in thread
From: mdroth @ 2013-04-05 15:06 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-stable
On Tue, Apr 02, 2013 at 04:45:05PM -0500, Michael Roth wrote:
> Hi everyone,
>
> The following new patches are queued for QEMU stable v1.4.1:
>
> https://github.com/mdroth/qemu/commits/stable-1.4-staging
>
> The release is planned for 04-15-2013:
>
> http://wiki.qemu.org/Planning/1.4
>
> Please CC qemu-stable@nongnu.org on any patches you think should be
> included in the release. The cut-off date is 04-09-2013 for new patches.
The 1.4 staging tree should now include all patches suggested so far,
except for the 2 where I noted otherwise:
https://github.com/mdroth/qemu/commits/stable-1.4-staging
>
> Testing/feedback is greatly appreciated.
>
> Thanks!
>
> Andreas Färber (2):
> target-ppc: Fix "G2leGP3" PVR
> target-ppc: Fix CPU_POWERPC_MPC8547E
>
> Christian Borntraeger (2):
> Allow virtio-net features for legacy s390 virtio bus
> virtio-blk: fix unplug + virsh reboot
>
> Cole Robinson (1):
> rtc-test: Fix test failures with recent glib
>
> Cornelia Huck (1):
> virtio-ccw: Queue sanity check for notify hypercall.
>
> David Gibson (2):
> pseries: Add compatible property to root of device tree
> pseries: Add cleanup hook for PAPR virtual LAN device
>
> Gerd Hoffmann (2):
> vga: fix byteswapping.
> update seabios to 1.7.2.1
>
> Igor Mitsyanko (1):
> qemu-char.c: fix waiting for telnet connection message
>
> Jason Wang (3):
> tap: forbid creating multiqueue tap when hub is used
> net: reduce the unnecessary memory allocation of multiqueue
> help: add docs for multiqueue tap options
>
> John Rigby (2):
> linux-user/syscall.c: handle FUTEX_WAIT_BITSET in do_futex
> linux-user: fix futex strace of FUTEX_CLOCK_REALTIME
>
> Mark Cave-Ayland (1):
> ide/macio: Fix macio DMA initialisation.
>
> Markus Armbruster (1):
> qmp: netdev_add is like -netdev, not -net, fix documentation
>
> Michael Roth (2):
> qemu-ga: make guest-sync-delimited available during fsfreeze
> qemu-ga: use key-value store to avoid recycling fd handles after restart
>
> Michal Privoznik (1):
> configure: Require at least spice-protocol-0.12.3
>
> Orit Wasserman (1):
> Fix page_cache leak in cache_resize
>
> Paolo Bonzini (7):
> coroutine: trim down nesting level in perf_nesting test
> scsi-disk: handle io_canceled uniformly and correctly
> iscsi: look for pkg-config file too
> scsi: do not call scsi_read_data/scsi_write_data for a canceled request
> scsi-disk: do not complete canceled UNMAP requests
> qcow2: make is_allocated return true for zero clusters
> qemu-bridge-helper: force usage of a very high MAC address for the bridge
>
> Peter Crosthwaite (1):
> qga/main.c: Don't use g_key_file_get/set_int64
>
> Peter Lieven (2):
> block: complete all IOs before .bdrv_truncate
> page_cache: fix memory leak
>
> Peter Maydell (2):
> linux-user: make bogus negative iovec lengths fail EINVAL
> linux-user/syscall.c: Don't warn about unimplemented get_robust_list
>
> Stefan Hajnoczi (2):
> qcow2: flush refcount cache correctly in alloc_refcount_block()
> qcow2: flush refcount cache correctly in qcow2_write_snapshots()
>
> Yeongkyoon Lee (1):
> tcg: Fix occasional TCG broken problem when ldst optimization enabled
>
> block.c | 4 +
> block/qcow2-cluster.c | 3 +
> block/qcow2-refcount.c | 10 ++-
> block/qcow2-snapshot.c | 5 +-
> block/qcow2.c | 6 +-
> configure | 10 ++-
> hw/macio.c | 2 +-
> hw/qxl-render.c | 3 +-
> hw/s390x/s390-virtio-bus.c | 1 +
> hw/s390x/s390-virtio-ccw.c | 3 +
> hw/scsi-bus.c | 4 +
> hw/scsi-disk.c | 36 +++++++--
> hw/spapr.c | 1 +
> hw/spapr_llan.c | 8 ++
> hw/vga.c | 18 ++---
> hw/virtio-blk.c | 4 +-
> hw/virtio-net.c | 6 +-
> hw/vmware_vga.c | 2 +-
> hw/xenfb.c | 3 +-
> include/net/net.h | 2 +-
> include/ui/console.h | 3 +-
> linux-user/strace.c | 6 ++
> linux-user/syscall.c | 20 ++++-
> net/net.c | 19 +++--
> net/tap.c | 7 ++
> page_cache.c | 4 +
> pc-bios/bios.bin | Bin 131072 -> 131072 bytes
> qapi-schema.json | 6 ++
> qemu-bridge-helper.c | 18 +++++
> qemu-char.c | 2 +-
> qemu-options.hx | 4 +-
> qga/commands-posix.c | 25 ++++--
> qga/guest-agent-core.h | 1 +
> qga/main.c | 185 +++++++++++++++++++++++++++++++++++++++++++
> qmp-commands.hx | 2 +-
> roms/seabios | 2 +-
> target-ppc/translate_init.c | 4 +-
> tests/rtc-test.c | 4 +-
> tests/test-coroutine.c | 2 +-
> trace-events | 1 +
> translate-all.c | 4 +-
> ui/console.c | 9 ++-
> 42 files changed, 390 insertions(+), 69 deletions(-)
>
^ permalink raw reply [flat|nested] 52+ messages in thread