Update to qemu 1.5
KVM for ARM support A native GTK+ UI with internationalization support Experimental VFIO support for VGA passthrough Support for VMware PVSCSI and VMXNET3 device emulation CPU hot-add support
This commit is contained in:
parent
d8d9ba50c6
commit
7fae7fbaf1
1
.gitignore
vendored
1
.gitignore
vendored
@ -19,3 +19,4 @@ qemu-kvm-0.13.0-25fdf4a.tar.gz
|
|||||||
/qemu-1.3.0.tar.bz2
|
/qemu-1.3.0.tar.bz2
|
||||||
/qemu-1.4.0.tar.bz2
|
/qemu-1.4.0.tar.bz2
|
||||||
/qemu-1.4.1.tar.bz2
|
/qemu-1.4.1.tar.bz2
|
||||||
|
/qemu-1.5.0.tar.bz2
|
||||||
|
@ -1,54 +0,0 @@
|
|||||||
From bed754a15e27a3630681959cf1d3161084f29fe9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Amit Shah <amit.shah@redhat.com>
|
|
||||||
Date: Mon, 21 Mar 2011 21:57:47 +0100
|
|
||||||
Subject: [PATCH] char: Split out tcp socket close code in a separate function
|
|
||||||
|
|
||||||
Signed-off-by: Amit Shah <amit.shah@redhat.com>
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
---
|
|
||||||
qemu-char.c | 25 ++++++++++++++++---------
|
|
||||||
1 file changed, 16 insertions(+), 9 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/qemu-char.c b/qemu-char.c
|
|
||||||
index f4a74ac..ac2abeb 100644
|
|
||||||
--- a/qemu-char.c
|
|
||||||
+++ b/qemu-char.c
|
|
||||||
@@ -2155,6 +2155,21 @@ typedef struct {
|
|
||||||
|
|
||||||
static void tcp_chr_accept(void *opaque);
|
|
||||||
|
|
||||||
+static void tcp_closed(void *opaque)
|
|
||||||
+{
|
|
||||||
+ CharDriverState *chr = opaque;
|
|
||||||
+ TCPCharDriver *s = chr->opaque;
|
|
||||||
+
|
|
||||||
+ s->connected = 0;
|
|
||||||
+ if (s->listen_fd >= 0) {
|
|
||||||
+ qemu_set_fd_handler2(s->listen_fd, NULL, tcp_chr_accept, NULL, chr);
|
|
||||||
+ }
|
|
||||||
+ qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
|
|
||||||
+ closesocket(s->fd);
|
|
||||||
+ s->fd = -1;
|
|
||||||
+ qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int tcp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
|
|
||||||
{
|
|
||||||
TCPCharDriver *s = chr->opaque;
|
|
||||||
@@ -2316,15 +2331,7 @@ static void tcp_chr_read(void *opaque)
|
|
||||||
len = s->max_size;
|
|
||||||
size = tcp_chr_recv(chr, (void *)buf, len);
|
|
||||||
if (size == 0) {
|
|
||||||
- /* connection closed */
|
|
||||||
- s->connected = 0;
|
|
||||||
- if (s->listen_fd >= 0) {
|
|
||||||
- qemu_set_fd_handler2(s->listen_fd, NULL, tcp_chr_accept, NULL, chr);
|
|
||||||
- }
|
|
||||||
- qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
|
|
||||||
- closesocket(s->fd);
|
|
||||||
- s->fd = -1;
|
|
||||||
- qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
|
|
||||||
+ tcp_closed(chr);
|
|
||||||
} else if (size > 0) {
|
|
||||||
if (s->do_telnetopt)
|
|
||||||
tcp_chr_process_IAC_bytes(chr, s, buf, &size);
|
|
@ -1,4 +1,4 @@
|
|||||||
From c6c153bfd7f9da48eb541d78bf09bc03bcc337e5 Mon Sep 17 00:00:00 2001
|
From 7cd5a50e02ed4866932c2a70680bec48a75dae72 Mon Sep 17 00:00:00 2001
|
||||||
From: Cole Robinson <crobinso@redhat.com>
|
From: Cole Robinson <crobinso@redhat.com>
|
||||||
Date: Tue, 19 Feb 2013 14:39:05 -0500
|
Date: Tue, 19 Feb 2013 14:39:05 -0500
|
||||||
Subject: [PATCH] configure: Add --enable-migration-from-qemu-kvm
|
Subject: [PATCH] configure: Add --enable-migration-from-qemu-kvm
|
||||||
@ -9,25 +9,23 @@ perform migration from qemu-kvm to qemu. It's just a stub for now.
|
|||||||
This compat will break incoming migration from qemu < 1.3, but for
|
This compat will break incoming migration from qemu < 1.3, but for
|
||||||
distros where qemu-kvm was the only shipped package for years it's
|
distros where qemu-kvm was the only shipped package for years it's
|
||||||
not a big loss (and I don't know any way to avoid it).
|
not a big loss (and I don't know any way to avoid it).
|
||||||
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
---
|
---
|
||||||
configure | 10 ++++++++++
|
configure | 10 ++++++++++
|
||||||
1 file changed, 10 insertions(+)
|
1 file changed, 10 insertions(+)
|
||||||
|
|
||||||
diff --git a/configure b/configure
|
diff --git a/configure b/configure
|
||||||
index e7468a9..719e348 100755
|
index 5ae7e4a..fb41cb6 100755
|
||||||
--- a/configure
|
--- a/configure
|
||||||
+++ b/configure
|
+++ b/configure
|
||||||
@@ -170,6 +170,7 @@ xfs=""
|
@@ -179,6 +179,7 @@ xfs=""
|
||||||
|
|
||||||
vhost_net="no"
|
vhost_net="no"
|
||||||
|
vhost_scsi="no"
|
||||||
kvm="no"
|
kvm="no"
|
||||||
+migrate_from_kvm="no"
|
+migrate_from_kvm="no"
|
||||||
gprof="no"
|
gprof="no"
|
||||||
debug_tcg="no"
|
debug_tcg="no"
|
||||||
debug="no"
|
debug="no"
|
||||||
@@ -759,6 +760,8 @@ for opt do
|
@@ -777,6 +778,8 @@ for opt do
|
||||||
;;
|
;;
|
||||||
--enable-kvm) kvm="yes"
|
--enable-kvm) kvm="yes"
|
||||||
;;
|
;;
|
||||||
@ -36,7 +34,7 @@ index e7468a9..719e348 100755
|
|||||||
--disable-tcg-interpreter) tcg_interpreter="no"
|
--disable-tcg-interpreter) tcg_interpreter="no"
|
||||||
;;
|
;;
|
||||||
--enable-tcg-interpreter) tcg_interpreter="yes"
|
--enable-tcg-interpreter) tcg_interpreter="yes"
|
||||||
@@ -1087,6 +1090,9 @@ echo " --enable-bluez enable bluez stack connectivity"
|
@@ -1136,6 +1139,9 @@ echo " --enable-bluez enable bluez stack connectivity"
|
||||||
echo " --disable-slirp disable SLIRP userspace network connectivity"
|
echo " --disable-slirp disable SLIRP userspace network connectivity"
|
||||||
echo " --disable-kvm disable KVM acceleration support"
|
echo " --disable-kvm disable KVM acceleration support"
|
||||||
echo " --enable-kvm enable KVM acceleration support"
|
echo " --enable-kvm enable KVM acceleration support"
|
||||||
@ -46,7 +44,7 @@ index e7468a9..719e348 100755
|
|||||||
echo " --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)"
|
echo " --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)"
|
||||||
echo " --disable-nptl disable usermode NPTL support"
|
echo " --disable-nptl disable usermode NPTL support"
|
||||||
echo " --enable-nptl enable usermode NPTL support"
|
echo " --enable-nptl enable usermode NPTL support"
|
||||||
@@ -3324,6 +3330,7 @@ echo "Linux AIO support $linux_aio"
|
@@ -3554,6 +3560,7 @@ echo "Linux AIO support $linux_aio"
|
||||||
echo "ATTR/XATTR support $attr"
|
echo "ATTR/XATTR support $attr"
|
||||||
echo "Install blobs $blobs"
|
echo "Install blobs $blobs"
|
||||||
echo "KVM support $kvm"
|
echo "KVM support $kvm"
|
||||||
@ -54,7 +52,7 @@ index e7468a9..719e348 100755
|
|||||||
echo "TCG interpreter $tcg_interpreter"
|
echo "TCG interpreter $tcg_interpreter"
|
||||||
echo "fdt support $fdt"
|
echo "fdt support $fdt"
|
||||||
echo "preadv support $preadv"
|
echo "preadv support $preadv"
|
||||||
@@ -3612,6 +3619,9 @@ fi
|
@@ -3863,6 +3870,9 @@ fi
|
||||||
if test "$signalfd" = "yes" ; then
|
if test "$signalfd" = "yes" ; then
|
||||||
echo "CONFIG_SIGNALFD=y" >> $config_host_mak
|
echo "CONFIG_SIGNALFD=y" >> $config_host_mak
|
||||||
fi
|
fi
|
@ -1,4 +1,4 @@
|
|||||||
From 75e3acce2d9302a2344b3de381a49f6cd0fa04ad Mon Sep 17 00:00:00 2001
|
From 9df0fd5765377d32a0e9f2d855dc1d428c19f767 Mon Sep 17 00:00:00 2001
|
||||||
From: Cole Robinson <crobinso@redhat.com>
|
From: Cole Robinson <crobinso@redhat.com>
|
||||||
Date: Tue, 19 Feb 2013 14:44:49 -0500
|
Date: Tue, 19 Feb 2013 14:44:49 -0500
|
||||||
Subject: [PATCH] acpi_piix4: Drop minimum_version_id to handle qemu-kvm
|
Subject: [PATCH] acpi_piix4: Drop minimum_version_id to handle qemu-kvm
|
||||||
@ -15,17 +15,15 @@ qemu-kvm.
|
|||||||
If --enable-migration-from-qemu-kvm is enabled, drop minimum_version_id
|
If --enable-migration-from-qemu-kvm is enabled, drop minimum_version_id
|
||||||
to 2. Migration from qemu-kvm version_id=2 and qemu 1.3+ version_id=3
|
to 2. Migration from qemu-kvm version_id=2 and qemu 1.3+ version_id=3
|
||||||
works, but migration from qemu < 1.3 is broken.
|
works, but migration from qemu < 1.3 is broken.
|
||||||
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
---
|
---
|
||||||
hw/acpi_piix4.c | 15 +++++++++------
|
hw/acpi/piix4.c | 15 +++++++++------
|
||||||
1 file changed, 9 insertions(+), 6 deletions(-)
|
1 file changed, 9 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
diff --git a/hw/acpi_piix4.c b/hw/acpi_piix4.c
|
diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c
|
||||||
index 1beac21..2abcc9d 100644
|
index c4af1cc..95d227d 100644
|
||||||
--- a/hw/acpi_piix4.c
|
--- a/hw/acpi/piix4.c
|
||||||
+++ b/hw/acpi_piix4.c
|
+++ b/hw/acpi/piix4.c
|
||||||
@@ -257,16 +257,19 @@ static int acpi_load_old(QEMUFile *f, void *opaque, int version_id)
|
@@ -269,16 +269,19 @@ static int acpi_load_old(QEMUFile *f, void *opaque, int version_id)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
|||||||
From c50ed212c0b0814a0edefb2d2a2fc7abc6aed2af Mon Sep 17 00:00:00 2001
|
From e1f0936bbf84664d7d7fe7bbbdd1595be745b539 Mon Sep 17 00:00:00 2001
|
||||||
From: Cole Robinson <crobinso@redhat.com>
|
From: Cole Robinson <crobinso@redhat.com>
|
||||||
Date: Tue, 19 Feb 2013 15:04:59 -0500
|
Date: Tue, 19 Feb 2013 15:04:59 -0500
|
||||||
Subject: [PATCH] i8254: Fix migration from qemu-kvm < 1.1
|
Subject: [PATCH] i8254: Fix migration from qemu-kvm < 1.1
|
||||||
@ -8,16 +8,14 @@ but the logic can't be carried unconditionally in qemu.git without
|
|||||||
breaking migration from qemu < 1.1.
|
breaking migration from qemu < 1.1.
|
||||||
|
|
||||||
Conditionalize it with --enable-migrate-from-qemu-kvm
|
Conditionalize it with --enable-migrate-from-qemu-kvm
|
||||||
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
---
|
---
|
||||||
hw/i8254_common.c | 8 ++++++++
|
hw/timer/i8254_common.c | 8 ++++++++
|
||||||
1 file changed, 8 insertions(+)
|
1 file changed, 8 insertions(+)
|
||||||
|
|
||||||
diff --git a/hw/i8254_common.c b/hw/i8254_common.c
|
diff --git a/hw/timer/i8254_common.c b/hw/timer/i8254_common.c
|
||||||
index 8c2e45a..072fa09 100644
|
index 5342df4..e74afe3 100644
|
||||||
--- a/hw/i8254_common.c
|
--- a/hw/timer/i8254_common.c
|
||||||
+++ b/hw/i8254_common.c
|
+++ b/hw/timer/i8254_common.c
|
||||||
@@ -275,7 +275,15 @@ static const VMStateDescription vmstate_pit_common = {
|
@@ -275,7 +275,15 @@ static const VMStateDescription vmstate_pit_common = {
|
||||||
.pre_save = pit_dispatch_pre_save,
|
.pre_save = pit_dispatch_pre_save,
|
||||||
.post_load = pit_dispatch_post_load,
|
.post_load = pit_dispatch_post_load,
|
@ -1,74 +0,0 @@
|
|||||||
From 64080f1b8983660b707ed8c0d10ace22e9b46f7a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Amit Shah <amit.shah@redhat.com>
|
|
||||||
Date: Mon, 21 Mar 2011 20:32:58 +0100
|
|
||||||
Subject: [PATCH] iohandlers: Add enable/disable_write_fd_handler() functions
|
|
||||||
|
|
||||||
These will be used to provide a cleaner API for the nonblocking case.
|
|
||||||
|
|
||||||
Signed-off-by: Amit Shah <amit.shah@redhat.com>
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
---
|
|
||||||
include/qemu/main-loop.h | 3 +++
|
|
||||||
iohandler.c | 35 +++++++++++++++++++++++++++++++++++
|
|
||||||
2 files changed, 38 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/include/qemu/main-loop.h b/include/qemu/main-loop.h
|
|
||||||
index e8059c3..faaf47d 100644
|
|
||||||
--- a/include/qemu/main-loop.h
|
|
||||||
+++ b/include/qemu/main-loop.h
|
|
||||||
@@ -166,6 +166,9 @@ void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque);
|
|
||||||
typedef void IOReadHandler(void *opaque, const uint8_t *buf, int size);
|
|
||||||
typedef int IOCanReadHandler(void *opaque);
|
|
||||||
|
|
||||||
+void enable_write_fd_handler(int fd, IOHandler *fd_write);
|
|
||||||
+void disable_write_fd_handler(int fd);
|
|
||||||
+
|
|
||||||
/**
|
|
||||||
* qemu_set_fd_handler2: Register a file descriptor with the main loop
|
|
||||||
*
|
|
||||||
diff --git a/iohandler.c b/iohandler.c
|
|
||||||
index 2523adc..a49cfd4 100644
|
|
||||||
--- a/iohandler.c
|
|
||||||
+++ b/iohandler.c
|
|
||||||
@@ -45,6 +45,41 @@ typedef struct IOHandlerRecord {
|
|
||||||
static QLIST_HEAD(, IOHandlerRecord) io_handlers =
|
|
||||||
QLIST_HEAD_INITIALIZER(io_handlers);
|
|
||||||
|
|
||||||
+static IOHandlerRecord *find_iohandler(int fd)
|
|
||||||
+{
|
|
||||||
+ IOHandlerRecord *ioh;
|
|
||||||
+
|
|
||||||
+ QLIST_FOREACH(ioh, &io_handlers, next) {
|
|
||||||
+ if (ioh->fd == fd) {
|
|
||||||
+ return ioh;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ return NULL;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+void enable_write_fd_handler(int fd, IOHandler *fd_write)
|
|
||||||
+{
|
|
||||||
+ IOHandlerRecord *ioh;
|
|
||||||
+
|
|
||||||
+ ioh = find_iohandler(fd);
|
|
||||||
+ if (!ioh) {
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ ioh->fd_write = fd_write;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+void disable_write_fd_handler(int fd)
|
|
||||||
+{
|
|
||||||
+ IOHandlerRecord *ioh;
|
|
||||||
+
|
|
||||||
+ ioh = find_iohandler(fd);
|
|
||||||
+ if (!ioh) {
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ ioh->fd_write = NULL;
|
|
||||||
+}
|
|
||||||
|
|
||||||
/* XXX: fd_read_poll should be suppressed, but an API change is
|
|
||||||
necessary in the character devices to suppress fd_can_read(). */
|
|
@ -1,59 +0,0 @@
|
|||||||
From 84877040f31425a8fecdbee19cb24fcc5a8212df Mon Sep 17 00:00:00 2001
|
|
||||||
From: Amit Shah <amit.shah@redhat.com>
|
|
||||||
Date: Mon, 21 Mar 2011 21:41:42 +0100
|
|
||||||
Subject: [PATCH] char: Add framework for a 'write unblocked' callback
|
|
||||||
|
|
||||||
The char layer can let users know that the driver will block on further
|
|
||||||
input. For users interested in not blocking, they can assign a function
|
|
||||||
pointer that will be called back when the driver becomes writable. This
|
|
||||||
patch just adds the function pointers to the CharDriverState structure,
|
|
||||||
future patches will enable the nonblocking and callback functionality.
|
|
||||||
|
|
||||||
Signed-off-by: Amit Shah <amit.shah@redhat.com>
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
---
|
|
||||||
include/char/char.h | 4 ++++
|
|
||||||
qemu-char.c | 3 +++
|
|
||||||
2 files changed, 7 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/include/char/char.h b/include/char/char.h
|
|
||||||
index 3027cc1..2fee107 100644
|
|
||||||
--- a/include/char/char.h
|
|
||||||
+++ b/include/char/char.h
|
|
||||||
@@ -63,6 +63,9 @@ struct CharDriverState {
|
|
||||||
IOEventHandler *chr_event;
|
|
||||||
IOCanReadHandler *chr_can_read;
|
|
||||||
IOReadHandler *chr_read;
|
|
||||||
+ IOHandler *chr_write_unblocked;
|
|
||||||
+ void (*chr_enable_write_fd_handler)(struct CharDriverState *chr);
|
|
||||||
+ void (*chr_disable_write_fd_handler)(struct CharDriverState *chr);
|
|
||||||
void *handler_opaque;
|
|
||||||
void (*chr_close)(struct CharDriverState *chr);
|
|
||||||
void (*chr_accept_input)(struct CharDriverState *chr);
|
|
||||||
@@ -76,6 +79,7 @@ struct CharDriverState {
|
|
||||||
int opened;
|
|
||||||
int avail_connections;
|
|
||||||
QemuOpts *opts;
|
|
||||||
+ bool write_blocked; /* Are we in a blocked state? */
|
|
||||||
QTAILQ_ENTRY(CharDriverState) next;
|
|
||||||
};
|
|
||||||
|
|
||||||
diff --git a/qemu-char.c b/qemu-char.c
|
|
||||||
index 0c97bdf..ab0c552 100644
|
|
||||||
--- a/qemu-char.c
|
|
||||||
+++ b/qemu-char.c
|
|
||||||
@@ -211,11 +211,14 @@ void qemu_chr_add_handlers(CharDriverState *s,
|
|
||||||
}
|
|
||||||
s->chr_can_read = handlers->fd_can_read;
|
|
||||||
s->chr_read = handlers->fd_read;
|
|
||||||
+ s->chr_write_unblocked = handlers->fd_write_unblocked;
|
|
||||||
s->chr_event = handlers->fd_event;
|
|
||||||
s->handler_opaque = opaque;
|
|
||||||
if (s->chr_update_read_handler)
|
|
||||||
s->chr_update_read_handler(s);
|
|
||||||
|
|
||||||
+ s->write_blocked = false;
|
|
||||||
+
|
|
||||||
/* We're connecting to an already opened device, so let's make sure we
|
|
||||||
also get the open event */
|
|
||||||
if (s->opened) {
|
|
@ -1,4 +1,4 @@
|
|||||||
From 271e4d924c39efd716cc3ad86a5f615660b13f22 Mon Sep 17 00:00:00 2001
|
From 3e580f65ac69c7a84b672a59de6772dae24b5a8a Mon Sep 17 00:00:00 2001
|
||||||
From: Cole Robinson <crobinso@redhat.com>
|
From: Cole Robinson <crobinso@redhat.com>
|
||||||
Date: Tue, 19 Feb 2013 15:35:40 -0500
|
Date: Tue, 19 Feb 2013 15:35:40 -0500
|
||||||
Subject: [PATCH] pc_piix: Add compat handling for qemu-kvm VGA mem size
|
Subject: [PATCH] pc_piix: Add compat handling for qemu-kvm VGA mem size
|
||||||
@ -14,17 +14,15 @@ except cirrus.
|
|||||||
If --enable-migration-from-qemu-kvm is specified, make sure cirrus
|
If --enable-migration-from-qemu-kvm is specified, make sure cirrus
|
||||||
uses 16MB for <= pc-1.2 (the qemu-kvm merge), and 16MB always for
|
uses 16MB for <= pc-1.2 (the qemu-kvm merge), and 16MB always for
|
||||||
all others. This will break incoming qemu migration for qemu < 1.3.
|
all others. This will break incoming qemu migration for qemu < 1.3.
|
||||||
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
---
|
---
|
||||||
hw/pc_piix.c | 20 ++++++++++++++++----
|
hw/i386/pc_piix.c | 20 ++++++++++++++++----
|
||||||
1 file changed, 16 insertions(+), 4 deletions(-)
|
1 file changed, 16 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
diff --git a/hw/pc_piix.c b/hw/pc_piix.c
|
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
|
||||||
index 0af436c..e3f8e96 100644
|
index 43ab480..48fb7b7 100644
|
||||||
--- a/hw/pc_piix.c
|
--- a/hw/i386/pc_piix.c
|
||||||
+++ b/hw/pc_piix.c
|
+++ b/hw/i386/pc_piix.c
|
||||||
@@ -331,6 +331,13 @@ static QEMUMachine pc_machine_v1_3 = {
|
@@ -383,6 +383,13 @@ static QEMUMachine pc_machine_v1_3 = {
|
||||||
DEFAULT_MACHINE_OPTIONS,
|
DEFAULT_MACHINE_OPTIONS,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -38,7 +36,7 @@ index 0af436c..e3f8e96 100644
|
|||||||
#define PC_COMPAT_1_2 \
|
#define PC_COMPAT_1_2 \
|
||||||
PC_COMPAT_1_3,\
|
PC_COMPAT_1_3,\
|
||||||
{\
|
{\
|
||||||
@@ -354,6 +361,10 @@ static QEMUMachine pc_machine_v1_3 = {
|
@@ -406,6 +413,10 @@ static QEMUMachine pc_machine_v1_3 = {
|
||||||
.property = "revision",\
|
.property = "revision",\
|
||||||
.value = stringify(3),\
|
.value = stringify(3),\
|
||||||
},{\
|
},{\
|
||||||
@ -49,7 +47,7 @@ index 0af436c..e3f8e96 100644
|
|||||||
.driver = "VGA",\
|
.driver = "VGA",\
|
||||||
.property = "mmio",\
|
.property = "mmio",\
|
||||||
.value = "off",\
|
.value = "off",\
|
||||||
@@ -371,6 +382,7 @@ static QEMUMachine pc_machine_v1_2 = {
|
@@ -423,6 +434,7 @@ static QEMUMachine pc_machine_v1_2 = {
|
||||||
DEFAULT_MACHINE_OPTIONS,
|
DEFAULT_MACHINE_OPTIONS,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -57,7 +55,7 @@ index 0af436c..e3f8e96 100644
|
|||||||
#define PC_COMPAT_1_1 \
|
#define PC_COMPAT_1_1 \
|
||||||
PC_COMPAT_1_2,\
|
PC_COMPAT_1_2,\
|
||||||
{\
|
{\
|
||||||
@@ -384,19 +396,19 @@ static QEMUMachine pc_machine_v1_2 = {
|
@@ -436,19 +448,19 @@ static QEMUMachine pc_machine_v1_2 = {
|
||||||
},{\
|
},{\
|
||||||
.driver = "VGA",\
|
.driver = "VGA",\
|
||||||
.property = "vgamem_mb",\
|
.property = "vgamem_mb",\
|
@ -1,178 +0,0 @@
|
|||||||
From c7e9b2a5b981209f4e77b26562758663cc060900 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Amit Shah <amit.shah@redhat.com>
|
|
||||||
Date: Mon, 21 Mar 2011 22:00:27 +0100
|
|
||||||
Subject: [PATCH] char: Update send_all() to handle nonblocking chardev write
|
|
||||||
requests
|
|
||||||
|
|
||||||
The send_all function is modified to return to the caller in case the
|
|
||||||
driver cannot handle any more data. It returns -EAGAIN or
|
|
||||||
WSAEWOULDBLOCK on non-Windows and Windows platforms respectively. This
|
|
||||||
is only done when the caller sets a callback function handler indicating
|
|
||||||
it's not interested in blocking till the driver has written out all the
|
|
||||||
data.
|
|
||||||
|
|
||||||
Currently there's no driver or caller that supports this. Future
|
|
||||||
commits will add such capability.
|
|
||||||
|
|
||||||
Signed-off-by: Amit Shah <amit.shah@redhat.com>
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
---
|
|
||||||
include/qemu/sockets.h | 3 ++-
|
|
||||||
qemu-char.c | 69 +++++++++++++++++++++++++++++++++++++++++++++-----
|
|
||||||
2 files changed, 65 insertions(+), 7 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/include/qemu/sockets.h b/include/qemu/sockets.h
|
|
||||||
index 0ccf32f..42ca690 100644
|
|
||||||
--- a/include/qemu/sockets.h
|
|
||||||
+++ b/include/qemu/sockets.h
|
|
||||||
@@ -29,6 +29,7 @@ int inet_aton(const char *cp, struct in_addr *ia);
|
|
||||||
#include "qemu/option.h"
|
|
||||||
#include "qapi/error.h"
|
|
||||||
#include "qapi/qmp/qerror.h"
|
|
||||||
+#include "char/char.h"
|
|
||||||
|
|
||||||
/* misc helpers */
|
|
||||||
int qemu_socket(int domain, int type, int protocol);
|
|
||||||
@@ -36,7 +37,7 @@ int qemu_accept(int s, struct sockaddr *addr, socklen_t *addrlen);
|
|
||||||
int socket_set_cork(int fd, int v);
|
|
||||||
void qemu_set_block(int fd);
|
|
||||||
void qemu_set_nonblock(int fd);
|
|
||||||
-int send_all(int fd, const void *buf, int len1);
|
|
||||||
+int send_all(CharDriverState *chr, int fd, const void *buf, int len1);
|
|
||||||
|
|
||||||
/* callback function for nonblocking connect
|
|
||||||
* valid fd on success, negative error code on failure
|
|
||||||
diff --git a/qemu-char.c b/qemu-char.c
|
|
||||||
index ab0c552..96fc54e 100644
|
|
||||||
--- a/qemu-char.c
|
|
||||||
+++ b/qemu-char.c
|
|
||||||
@@ -508,7 +508,7 @@ static CharDriverState *qemu_chr_open_mux(CharDriverState *drv)
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
-int send_all(int fd, const void *buf, int len1)
|
|
||||||
+static int do_send(int fd, const void *buf, int len1, bool nonblock)
|
|
||||||
{
|
|
||||||
int ret, len;
|
|
||||||
|
|
||||||
@@ -516,9 +516,14 @@ int send_all(int fd, const void *buf, int len1)
|
|
||||||
while (len > 0) {
|
|
||||||
ret = send(fd, buf, len, 0);
|
|
||||||
if (ret < 0) {
|
|
||||||
+ if (nonblock && len1 - len) {
|
|
||||||
+ return len1 - len;
|
|
||||||
+ }
|
|
||||||
errno = WSAGetLastError();
|
|
||||||
if (errno != WSAEWOULDBLOCK) {
|
|
||||||
return -1;
|
|
||||||
+ } else if (errno == WSAEWOULDBLOCK && nonblock) {
|
|
||||||
+ return WSAEWOULDBLOCK;
|
|
||||||
}
|
|
||||||
} else if (ret == 0) {
|
|
||||||
break;
|
|
||||||
@@ -532,7 +537,7 @@ int send_all(int fd, const void *buf, int len1)
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
-int send_all(int fd, const void *_buf, int len1)
|
|
||||||
+static int do_send(int fd, const void *_buf, int len1, bool nonblock)
|
|
||||||
{
|
|
||||||
int ret, len;
|
|
||||||
const uint8_t *buf = _buf;
|
|
||||||
@@ -541,8 +546,15 @@ int send_all(int fd, const void *_buf, int len1)
|
|
||||||
while (len > 0) {
|
|
||||||
ret = write(fd, buf, len);
|
|
||||||
if (ret < 0) {
|
|
||||||
- if (errno != EINTR && errno != EAGAIN)
|
|
||||||
+ if (nonblock && len1 - len) {
|
|
||||||
+ return len1 - len;
|
|
||||||
+ }
|
|
||||||
+ if (errno == EAGAIN && nonblock) {
|
|
||||||
+ return -EAGAIN;
|
|
||||||
+ }
|
|
||||||
+ if (errno != EINTR && errno != EAGAIN) {
|
|
||||||
return -1;
|
|
||||||
+ }
|
|
||||||
} else if (ret == 0) {
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
@@ -557,6 +569,44 @@ int send_all(int fd, const void *_buf, int len1)
|
|
||||||
#define STDIO_MAX_CLIENTS 1
|
|
||||||
static int stdio_nb_clients;
|
|
||||||
|
|
||||||
+int send_all(CharDriverState *chr, int fd, const void *_buf, int len1)
|
|
||||||
+{
|
|
||||||
+ int ret, eagain_errno;
|
|
||||||
+ bool nonblock;
|
|
||||||
+
|
|
||||||
+ if (chr && chr->write_blocked) {
|
|
||||||
+ /*
|
|
||||||
+ * The caller should not send us data while we're blocked,
|
|
||||||
+ * but this can happen when multiple writers are woken at once,
|
|
||||||
+ * so simply return -EAGAIN.
|
|
||||||
+ */
|
|
||||||
+ return -EAGAIN;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ nonblock = false;
|
|
||||||
+ /*
|
|
||||||
+ * Ensure the char backend is able to receive and handle the
|
|
||||||
+ * 'write unblocked' event before we turn on nonblock support.
|
|
||||||
+ */
|
|
||||||
+ if (chr && chr->chr_enable_write_fd_handler && chr->chr_write_unblocked) {
|
|
||||||
+ nonblock = true;
|
|
||||||
+ }
|
|
||||||
+ ret = do_send(fd, _buf, len1, nonblock);
|
|
||||||
+
|
|
||||||
+#ifdef _WIN32
|
|
||||||
+ eagain_errno = WSAEWOULDBLOCK;
|
|
||||||
+#else
|
|
||||||
+ eagain_errno = -EAGAIN;
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+ if (nonblock && (ret == eagain_errno || (ret >= 0 && ret < len1))) {
|
|
||||||
+ /* Update fd handler to wake up when chr becomes writable */
|
|
||||||
+ chr->chr_enable_write_fd_handler(chr);
|
|
||||||
+ chr->write_blocked = true;
|
|
||||||
+ }
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
#ifndef _WIN32
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
@@ -568,7 +618,7 @@ typedef struct {
|
|
||||||
static int fd_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
|
|
||||||
{
|
|
||||||
FDCharDriver *s = chr->opaque;
|
|
||||||
- return send_all(s->fd_out, buf, len);
|
|
||||||
+ return send_all(chr, s->fd_out, buf, len);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int fd_chr_read_poll(void *opaque)
|
|
||||||
@@ -893,7 +943,7 @@ static int pty_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
|
|
||||||
pty_chr_update_read_handler(chr);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
- return send_all(s->fd, buf, len);
|
|
||||||
+ return send_all(chr, s->fd, buf, len);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int pty_chr_read_poll(void *opaque)
|
|
||||||
@@ -2188,8 +2238,15 @@ static void tcp_closed(void *opaque)
|
|
||||||
static int tcp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
|
|
||||||
{
|
|
||||||
TCPCharDriver *s = chr->opaque;
|
|
||||||
+
|
|
||||||
if (s->connected) {
|
|
||||||
- return send_all(s->fd, buf, len);
|
|
||||||
+ int ret;
|
|
||||||
+
|
|
||||||
+ ret = send_all(chr, s->fd, buf, len);
|
|
||||||
+ if (ret == -1 && errno == EPIPE) {
|
|
||||||
+ tcp_closed(chr);
|
|
||||||
+ }
|
|
||||||
+ return ret;
|
|
||||||
} else {
|
|
||||||
/* XXX: indicate an error ? */
|
|
||||||
return len;
|
|
@ -1,4 +1,4 @@
|
|||||||
From 66cc6383d6b1d934d22e9a16b432cacacd58c315 Mon Sep 17 00:00:00 2001
|
From ae8d642477d87287b42b0b40c133637dd1cdd8b9 Mon Sep 17 00:00:00 2001
|
||||||
From: Cole Robinson <crobinso@redhat.com>
|
From: Cole Robinson <crobinso@redhat.com>
|
||||||
Date: Tue, 19 Feb 2013 16:19:02 -0500
|
Date: Tue, 19 Feb 2013 16:19:02 -0500
|
||||||
Subject: [PATCH] qxl: Add rom_size compat property, fix migration from 1.2
|
Subject: [PATCH] qxl: Add rom_size compat property, fix migration from 1.2
|
||||||
@ -18,52 +18,16 @@ https://lists.gnu.org/archive/html/qemu-devel/2013-02/msg03154.html
|
|||||||
|
|
||||||
However these sizes match what native Fedora packages get, so it's
|
However these sizes match what native Fedora packages get, so it's
|
||||||
good enough for now.
|
good enough for now.
|
||||||
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
---
|
---
|
||||||
hw/pc_piix.c | 16 ++++++++++++++++
|
hw/display/qxl.c | 9 ++++-----
|
||||||
hw/qxl.c | 9 ++++-----
|
hw/i386/pc_piix.c | 16 ++++++++++++++++
|
||||||
2 files changed, 20 insertions(+), 5 deletions(-)
|
2 files changed, 20 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
diff --git a/hw/pc_piix.c b/hw/pc_piix.c
|
diff --git a/hw/display/qxl.c b/hw/display/qxl.c
|
||||||
index e3f8e96..a1a6794 100644
|
index c475cb1..74f07c0 100644
|
||||||
--- a/hw/pc_piix.c
|
--- a/hw/display/qxl.c
|
||||||
+++ b/hw/pc_piix.c
|
+++ b/hw/display/qxl.c
|
||||||
@@ -317,6 +317,14 @@ static QEMUMachine pc_i440fx_machine_v1_4 = {
|
@@ -306,16 +306,14 @@ static inline uint32_t msb_mask(uint32_t val)
|
||||||
.driver = "virtio-net-pci", \
|
|
||||||
.property = "mq", \
|
|
||||||
.value = "off", \
|
|
||||||
+ },{ \
|
|
||||||
+ .driver = "qxl", \
|
|
||||||
+ .property = "rom_size", \
|
|
||||||
+ .value = stringify(16384), \
|
|
||||||
+ },{\
|
|
||||||
+ .driver = "qxl-vga", \
|
|
||||||
+ .property = "rom_size", \
|
|
||||||
+ .value = stringify(16384), \
|
|
||||||
}
|
|
||||||
|
|
||||||
static QEMUMachine pc_machine_v1_3 = {
|
|
||||||
@@ -413,6 +421,14 @@ static QEMUMachine pc_machine_v1_2 = {
|
|
||||||
.driver = "virtio-blk-pci",\
|
|
||||||
.property = "config-wce",\
|
|
||||||
.value = "off",\
|
|
||||||
+ },{ \
|
|
||||||
+ .driver = "qxl", \
|
|
||||||
+ .property = "rom_size", \
|
|
||||||
+ .value = stringify(8192), \
|
|
||||||
+ },{\
|
|
||||||
+ .driver = "qxl-vga", \
|
|
||||||
+ .property = "rom_size", \
|
|
||||||
+ .value = stringify(8192), \
|
|
||||||
}
|
|
||||||
|
|
||||||
static QEMUMachine pc_machine_v1_1 = {
|
|
||||||
diff --git a/hw/qxl.c b/hw/qxl.c
|
|
||||||
index ca094e6..80bd92a 100644
|
|
||||||
--- a/hw/qxl.c
|
|
||||||
+++ b/hw/qxl.c
|
|
||||||
@@ -302,16 +302,14 @@ static inline uint32_t msb_mask(uint32_t val)
|
|
||||||
return mask;
|
return mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,7 +55,7 @@ index ca094e6..80bd92a 100644
|
|||||||
memory_region_init_ram(&qxl->rom_bar, "qxl.vrom", qxl->rom_size);
|
memory_region_init_ram(&qxl->rom_bar, "qxl.vrom", qxl->rom_size);
|
||||||
vmstate_register_ram(&qxl->rom_bar, &qxl->pci.qdev);
|
vmstate_register_ram(&qxl->rom_bar, &qxl->pci.qdev);
|
||||||
init_qxl_rom(qxl);
|
init_qxl_rom(qxl);
|
||||||
@@ -2296,6 +2294,7 @@ static Property qxl_properties[] = {
|
@@ -2302,6 +2300,7 @@ static Property qxl_properties[] = {
|
||||||
DEFINE_PROP_UINT32("vram64_size_mb", PCIQXLDevice, vram_size_mb, -1),
|
DEFINE_PROP_UINT32("vram64_size_mb", PCIQXLDevice, vram_size_mb, -1),
|
||||||
DEFINE_PROP_UINT32("vgamem_mb", PCIQXLDevice, vgamem_size_mb, 16),
|
DEFINE_PROP_UINT32("vgamem_mb", PCIQXLDevice, vgamem_size_mb, 16),
|
||||||
DEFINE_PROP_INT32("surfaces", PCIQXLDevice, ssd.num_surfaces, 1024),
|
DEFINE_PROP_INT32("surfaces", PCIQXLDevice, ssd.num_surfaces, 1024),
|
||||||
@ -99,3 +63,37 @@ index ca094e6..80bd92a 100644
|
|||||||
DEFINE_PROP_END_OF_LIST(),
|
DEFINE_PROP_END_OF_LIST(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
|
||||||
|
index 48fb7b7..2307d26 100644
|
||||||
|
--- a/hw/i386/pc_piix.c
|
||||||
|
+++ b/hw/i386/pc_piix.c
|
||||||
|
@@ -369,6 +369,14 @@ static QEMUMachine pc_i440fx_machine_v1_4 = {
|
||||||
|
.driver = "e1000",\
|
||||||
|
.property = "autonegotiation",\
|
||||||
|
.value = "off",\
|
||||||
|
+ },{ \
|
||||||
|
+ .driver = "qxl", \
|
||||||
|
+ .property = "rom_size", \
|
||||||
|
+ .value = stringify(16384), \
|
||||||
|
+ },{\
|
||||||
|
+ .driver = "qxl-vga", \
|
||||||
|
+ .property = "rom_size", \
|
||||||
|
+ .value = stringify(16384), \
|
||||||
|
}
|
||||||
|
|
||||||
|
static QEMUMachine pc_machine_v1_3 = {
|
||||||
|
@@ -465,6 +473,14 @@ static QEMUMachine pc_machine_v1_2 = {
|
||||||
|
.driver = "virtio-blk-pci",\
|
||||||
|
.property = "config-wce",\
|
||||||
|
.value = "off",\
|
||||||
|
+ },{ \
|
||||||
|
+ .driver = "qxl", \
|
||||||
|
+ .property = "rom_size", \
|
||||||
|
+ .value = stringify(8192), \
|
||||||
|
+ },{\
|
||||||
|
+ .driver = "qxl-vga", \
|
||||||
|
+ .property = "rom_size", \
|
||||||
|
+ .value = stringify(8192), \
|
||||||
|
}
|
||||||
|
|
||||||
|
static QEMUMachine pc_machine_v1_1 = {
|
@ -1,72 +0,0 @@
|
|||||||
From 6540bebbaa749d405df91516e1ca5a075e354628 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Amit Shah <amit.shah@redhat.com>
|
|
||||||
Date: Mon, 21 Mar 2011 22:02:47 +0100
|
|
||||||
Subject: [PATCH] char: Equip the unix/tcp backend to handle nonblocking
|
|
||||||
writes#
|
|
||||||
|
|
||||||
Now that the infrastructure is in place to return -EAGAIN to callers,
|
|
||||||
individual char drivers can set their update_fd_handlers() function to
|
|
||||||
set or remove an fd's write handler. This handler checks if the driver
|
|
||||||
became writable.
|
|
||||||
|
|
||||||
A generic callback routine is used for unblocking writes and letting
|
|
||||||
users of chardevs know that a driver became writable again.
|
|
||||||
|
|
||||||
Signed-off-by: Amit Shah <amit.shah@redhat.com>
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
---
|
|
||||||
qemu-char.c | 27 +++++++++++++++++++++++++++
|
|
||||||
1 file changed, 27 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/qemu-char.c b/qemu-char.c
|
|
||||||
index 96fc54e..53d2c13 100644
|
|
||||||
--- a/qemu-char.c
|
|
||||||
+++ b/qemu-char.c
|
|
||||||
@@ -105,6 +105,19 @@
|
|
||||||
static QTAILQ_HEAD(CharDriverStateHead, CharDriverState) chardevs =
|
|
||||||
QTAILQ_HEAD_INITIALIZER(chardevs);
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ * Generic routine that gets called when chardev becomes writable.
|
|
||||||
+ * Lets chardev user know it's OK to send more data.
|
|
||||||
+ */
|
|
||||||
+static void char_write_unblocked(void *opaque)
|
|
||||||
+{
|
|
||||||
+ CharDriverState *chr = opaque;
|
|
||||||
+
|
|
||||||
+ chr->write_blocked = false;
|
|
||||||
+ chr->chr_disable_write_fd_handler(chr);
|
|
||||||
+ chr->chr_write_unblocked(chr->handler_opaque);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
void qemu_chr_be_event(CharDriverState *s, int event)
|
|
||||||
{
|
|
||||||
/* Keep track if the char device is open */
|
|
||||||
@@ -126,6 +139,9 @@ static void qemu_chr_fire_open_event(void *opaque)
|
|
||||||
{
|
|
||||||
CharDriverState *s = opaque;
|
|
||||||
qemu_chr_be_event(s, CHR_EVENT_OPENED);
|
|
||||||
+ if (s->write_blocked) {
|
|
||||||
+ char_write_unblocked(s);
|
|
||||||
+ }
|
|
||||||
qemu_free_timer(s->open_timer);
|
|
||||||
s->open_timer = NULL;
|
|
||||||
}
|
|
||||||
@@ -2245,6 +2261,17 @@ static int tcp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
|
|
||||||
ret = send_all(chr, s->fd, buf, len);
|
|
||||||
if (ret == -1 && errno == EPIPE) {
|
|
||||||
tcp_closed(chr);
|
|
||||||
+
|
|
||||||
+ if (chr->chr_enable_write_fd_handler && chr->chr_write_unblocked) {
|
|
||||||
+ /*
|
|
||||||
+ * Since we haven't written out anything, let's say
|
|
||||||
+ * we're throttled. This will prevent any output from
|
|
||||||
+ * the guest getting lost if host-side chardev goes
|
|
||||||
+ * down. Unthrottle when we re-connect.
|
|
||||||
+ */
|
|
||||||
+ chr->write_blocked = true;
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
} else {
|
|
@ -1,47 +0,0 @@
|
|||||||
From 33f3874dc760f0960d408be2f916d04373de543b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Amit Shah <amit.shah@redhat.com>
|
|
||||||
Date: Mon, 21 Mar 2011 22:06:41 +0100
|
|
||||||
Subject: [PATCH] virtio-console: Enable port throttling when chardev is slow
|
|
||||||
to consume data
|
|
||||||
|
|
||||||
When a chardev indicates it can't accept more data, we tell the
|
|
||||||
virtio-serial code to stop sending us any more data till we tell
|
|
||||||
otherwise. This helps in guests continuing to run normally while the vq
|
|
||||||
keeps getting full and eventually the guest stops queueing more data.
|
|
||||||
As soon as the chardev indicates it can accept more data, start pushing!
|
|
||||||
|
|
||||||
Signed-off-by: Amit Shah <amit.shah@redhat.com>
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
---
|
|
||||||
hw/virtio-console.c | 11 +++++++++++
|
|
||||||
1 file changed, 11 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/hw/virtio-console.c b/hw/virtio-console.c
|
|
||||||
index dd6f614..0e12514 100644
|
|
||||||
--- a/hw/virtio-console.c
|
|
||||||
+++ b/hw/virtio-console.c
|
|
||||||
@@ -20,6 +20,16 @@ typedef struct VirtConsole {
|
|
||||||
CharDriverState *chr;
|
|
||||||
} VirtConsole;
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ * Callback function that's called from chardevs when backend becomes
|
|
||||||
+ * writable.
|
|
||||||
+ */
|
|
||||||
+static void chr_write_unblocked(void *opaque)
|
|
||||||
+{
|
|
||||||
+ VirtConsole *vcon = opaque;
|
|
||||||
+
|
|
||||||
+ virtio_serial_throttle_port(&vcon->port, false);
|
|
||||||
+}
|
|
||||||
|
|
||||||
/* Callback function that's called when the guest sends us data */
|
|
||||||
static ssize_t flush_buf(VirtIOSerialPort *port, const uint8_t *buf, size_t len)
|
|
||||||
@@ -110,6 +120,7 @@ static const QemuChrHandlers chr_handlers = {
|
|
||||||
.fd_can_read = chr_can_read,
|
|
||||||
.fd_read = chr_read,
|
|
||||||
.fd_event = chr_event,
|
|
||||||
+ .fd_write_unblocked = chr_write_unblocked,
|
|
||||||
};
|
|
||||||
|
|
||||||
static int virtconsole_initfn(VirtIOSerialPort *port)
|
|
@ -1,132 +0,0 @@
|
|||||||
From aa0a2c94c70ae5ed0fb215328c8ecebbef10cbe9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alon Levy <alevy@redhat.com>
|
|
||||||
Date: Tue, 22 Mar 2011 12:27:59 +0200
|
|
||||||
Subject: [PATCH] spice-qemu-char.c: add throttling
|
|
||||||
|
|
||||||
BZ: 672191
|
|
||||||
|
|
||||||
upstream: not submitted (explained below)
|
|
||||||
|
|
||||||
Adds throttling support to spicevmc chardev. Uses a timer to avoid recursing:
|
|
||||||
1. spice-server: reds.c: read_from_vdi_port
|
|
||||||
2. qemu: spice-qemu-char.c: vmc_read
|
|
||||||
3. chr_write_unblocked
|
|
||||||
(calls virtio_serial_throttle_port(port, false))
|
|
||||||
4. qemu: virtio ...
|
|
||||||
5. qemu: spice-qemu-char.c: spice_chr_write
|
|
||||||
6. qemu: spice-qemu-char.c: wakeup (calls into spice-server)
|
|
||||||
7. spice-server: ...
|
|
||||||
8. qemu: spice-qemu-char.c: vmc_read
|
|
||||||
|
|
||||||
Instead, in vmc_read if we were throttled and we are just about to return
|
|
||||||
all the bytes we will set a timer to be triggered immediately to call
|
|
||||||
chr_write_unblocked. Then we return after 2 above, and 3 is called from the
|
|
||||||
timer callback. This also means we can later remove some ugly recursion protection
|
|
||||||
from spice-server.
|
|
||||||
|
|
||||||
The other tricky point in this patch is not returning the leftover chunk twice.
|
|
||||||
When we throttle, by definition we have data that spice server didn't consume.
|
|
||||||
It is being kept by virtio-serial, and by us. The next vmc_read callback needs
|
|
||||||
to not return it, but just do unthrottling. Then virtio will give us the remaining
|
|
||||||
chunk as usual in spice_chr_write, and we will pass it to spice server in the
|
|
||||||
next vmc_read.
|
|
||||||
|
|
||||||
This patch relies on Amit's series to expose throttling to chardev's, which
|
|
||||||
was not accepted upstream, and will not be accepted upstream until the mainloop
|
|
||||||
is reworked to use glib.
|
|
||||||
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
---
|
|
||||||
spice-qemu-char.c | 39 +++++++++++++++++++++++++++++++++++----
|
|
||||||
1 file changed, 35 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/spice-qemu-char.c b/spice-qemu-char.c
|
|
||||||
index a4d7de8..75bb125 100644
|
|
||||||
--- a/spice-qemu-char.c
|
|
||||||
+++ b/spice-qemu-char.c
|
|
||||||
@@ -1,4 +1,6 @@
|
|
||||||
#include "config-host.h"
|
|
||||||
+#include "qemu-common.h"
|
|
||||||
+#include "qemu/timer.h"
|
|
||||||
#include "trace.h"
|
|
||||||
#include "ui/qemu-spice.h"
|
|
||||||
#include "char/char.h"
|
|
||||||
@@ -25,6 +27,7 @@ typedef struct SpiceCharDriver {
|
|
||||||
uint8_t *datapos;
|
|
||||||
ssize_t bufsize, datalen;
|
|
||||||
uint32_t debug;
|
|
||||||
+ QEMUTimer *unblock_timer;
|
|
||||||
QLIST_ENTRY(SpiceCharDriver) next;
|
|
||||||
} SpiceCharDriver;
|
|
||||||
|
|
||||||
@@ -54,6 +57,17 @@ static int vmc_write(SpiceCharDeviceInstance *sin, const uint8_t *buf, int len)
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void spice_chr_unblock(void *opaque)
|
|
||||||
+{
|
|
||||||
+ SpiceCharDriver *scd = opaque;
|
|
||||||
+
|
|
||||||
+ if (scd->chr->chr_write_unblocked == NULL) {
|
|
||||||
+ dprintf(scd, 1, "%s: backend doesn't support unthrottling.\n", __func__);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ scd->chr->chr_write_unblocked(scd->chr->handler_opaque);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int vmc_read(SpiceCharDeviceInstance *sin, uint8_t *buf, int len)
|
|
||||||
{
|
|
||||||
SpiceCharDriver *scd = container_of(sin, SpiceCharDriver, sin);
|
|
||||||
@@ -65,9 +79,16 @@ static int vmc_read(SpiceCharDeviceInstance *sin, uint8_t *buf, int len)
|
|
||||||
scd->datapos += bytes;
|
|
||||||
scd->datalen -= bytes;
|
|
||||||
assert(scd->datalen >= 0);
|
|
||||||
- if (scd->datalen == 0) {
|
|
||||||
- scd->datapos = 0;
|
|
||||||
- }
|
|
||||||
+ }
|
|
||||||
+ if (scd->datalen == 0 && scd->chr->write_blocked) {
|
|
||||||
+ dprintf(scd, 1, "%s: unthrottling (%d)\n", __func__, bytes);
|
|
||||||
+ scd->chr->write_blocked = false;
|
|
||||||
+ /*
|
|
||||||
+ * set a timer instead of calling scd->chr->chr_write_unblocked directly,
|
|
||||||
+ * because that will call back into spice_chr_write (see
|
|
||||||
+ * virtio-console.c:chr_write_unblocked), which is unwanted.
|
|
||||||
+ */
|
|
||||||
+ qemu_mod_timer(scd->unblock_timer, 0);
|
|
||||||
}
|
|
||||||
trace_spice_vmc_read(bytes, len);
|
|
||||||
return bytes;
|
|
||||||
@@ -163,6 +184,7 @@ static void vmc_unregister_interface(SpiceCharDriver *scd)
|
|
||||||
static int spice_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
|
|
||||||
{
|
|
||||||
SpiceCharDriver *s = chr->opaque;
|
|
||||||
+ int read_bytes;
|
|
||||||
|
|
||||||
dprintf(s, 2, "%s: %d\n", __func__, len);
|
|
||||||
vmc_register_interface(s);
|
|
||||||
@@ -175,7 +197,15 @@ static int spice_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
|
|
||||||
s->datapos = s->buffer;
|
|
||||||
s->datalen = len;
|
|
||||||
spice_server_char_device_wakeup(&s->sin);
|
|
||||||
- return len;
|
|
||||||
+ read_bytes = len - s->datalen;
|
|
||||||
+ if (read_bytes != len) {
|
|
||||||
+ dprintf(s, 1, "%s: throttling: %d < %d (%zd)\n", __func__,
|
|
||||||
+ read_bytes, len, s->bufsize);
|
|
||||||
+ s->chr->write_blocked = true;
|
|
||||||
+ /* We'll get passed in the unconsumed data with the next call */
|
|
||||||
+ s->datalen = 0;
|
|
||||||
+ }
|
|
||||||
+ return read_bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void spice_chr_close(struct CharDriverState *chr)
|
|
||||||
@@ -234,6 +264,7 @@ static CharDriverState *chr_open(QemuOpts *opts, const char *subtype)
|
|
||||||
chr->chr_close = spice_chr_close;
|
|
||||||
chr->chr_guest_open = spice_chr_guest_open;
|
|
||||||
chr->chr_guest_close = spice_chr_guest_close;
|
|
||||||
+ s->unblock_timer = qemu_new_timer_ms(vm_clock, spice_chr_unblock, s);
|
|
||||||
|
|
||||||
QLIST_INSERT_HEAD(&spice_chars, s, next);
|
|
||||||
|
|
@ -1,70 +0,0 @@
|
|||||||
From de979c48aa4b5e7f3f8658f9ac69030f3de3c99c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alon Levy <alevy@redhat.com>
|
|
||||||
Date: Tue, 22 Mar 2011 12:28:00 +0200
|
|
||||||
Subject: [PATCH] spice-qemu-char.c: remove intermediate buffer
|
|
||||||
|
|
||||||
BZ: 672191
|
|
||||||
upstream: not submitted (explained below)
|
|
||||||
|
|
||||||
virtio-serial's buffer is valid when it calls us, and we don't
|
|
||||||
access it otherwise: vmc_read is only called in response to wakeup,
|
|
||||||
or else we set datalen=0 and throttle. Then vmc_read is called back,
|
|
||||||
we return 0 (not accessing the buffer) and set the timer to unthrottle.
|
|
||||||
|
|
||||||
Also make datalen int and not ssize_t (to fit spice_chr_write signature).
|
|
||||||
|
|
||||||
This relied on the previous patch that introduces throttling, which
|
|
||||||
can't go upstream right now as explained in that patch.
|
|
||||||
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
---
|
|
||||||
spice-qemu-char.c | 18 ++++++------------
|
|
||||||
1 file changed, 6 insertions(+), 12 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/spice-qemu-char.c b/spice-qemu-char.c
|
|
||||||
index 75bb125..5065240 100644
|
|
||||||
--- a/spice-qemu-char.c
|
|
||||||
+++ b/spice-qemu-char.c
|
|
||||||
@@ -23,9 +23,8 @@ typedef struct SpiceCharDriver {
|
|
||||||
SpiceCharDeviceInstance sin;
|
|
||||||
char *subtype;
|
|
||||||
bool active;
|
|
||||||
- uint8_t *buffer;
|
|
||||||
- uint8_t *datapos;
|
|
||||||
- ssize_t bufsize, datalen;
|
|
||||||
+ const uint8_t *datapos;
|
|
||||||
+ int datalen;
|
|
||||||
uint32_t debug;
|
|
||||||
QEMUTimer *unblock_timer;
|
|
||||||
QLIST_ENTRY(SpiceCharDriver) next;
|
|
||||||
@@ -73,7 +72,7 @@ static int vmc_read(SpiceCharDeviceInstance *sin, uint8_t *buf, int len)
|
|
||||||
SpiceCharDriver *scd = container_of(sin, SpiceCharDriver, sin);
|
|
||||||
int bytes = MIN(len, scd->datalen);
|
|
||||||
|
|
||||||
- dprintf(scd, 2, "%s: %p %d/%d/%zd\n", __func__, scd->datapos, len, bytes, scd->datalen);
|
|
||||||
+ dprintf(scd, 2, "%s: %p %d/%d/%d\n", __func__, scd->datapos, len, bytes, scd->datalen);
|
|
||||||
if (bytes > 0) {
|
|
||||||
memcpy(buf, scd->datapos, bytes);
|
|
||||||
scd->datapos += bytes;
|
|
||||||
@@ -189,18 +188,13 @@ static int spice_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
|
|
||||||
dprintf(s, 2, "%s: %d\n", __func__, len);
|
|
||||||
vmc_register_interface(s);
|
|
||||||
assert(s->datalen == 0);
|
|
||||||
- if (s->bufsize < len) {
|
|
||||||
- s->bufsize = len;
|
|
||||||
- s->buffer = g_realloc(s->buffer, s->bufsize);
|
|
||||||
- }
|
|
||||||
- memcpy(s->buffer, buf, len);
|
|
||||||
- s->datapos = s->buffer;
|
|
||||||
+ s->datapos = buf;
|
|
||||||
s->datalen = len;
|
|
||||||
spice_server_char_device_wakeup(&s->sin);
|
|
||||||
read_bytes = len - s->datalen;
|
|
||||||
if (read_bytes != len) {
|
|
||||||
- dprintf(s, 1, "%s: throttling: %d < %d (%zd)\n", __func__,
|
|
||||||
- read_bytes, len, s->bufsize);
|
|
||||||
+ dprintf(s, 1, "%s: throttling: %d < %d\n", __func__,
|
|
||||||
+ read_bytes, len);
|
|
||||||
s->chr->write_blocked = true;
|
|
||||||
/* We'll get passed in the unconsumed data with the next call */
|
|
||||||
s->datalen = 0;
|
|
@ -1,62 +0,0 @@
|
|||||||
From 1e87b85766f9c18a2f9dffd289c0e56d640637c4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Hans de Goede <hdegoede@redhat.com>
|
|
||||||
Date: Tue, 19 Jul 2011 10:56:19 +0200
|
|
||||||
Subject: [PATCH] usb-redir: Add flow control support
|
|
||||||
|
|
||||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
|
||||||
---
|
|
||||||
hw/usb/redirect.c | 22 ++++++++++++++++++++--
|
|
||||||
1 file changed, 20 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
|
|
||||||
index bb07c62..4d23b66 100644
|
|
||||||
--- a/hw/usb/redirect.c
|
|
||||||
+++ b/hw/usb/redirect.c
|
|
||||||
@@ -257,8 +257,9 @@ static int usbredir_read(void *priv, uint8_t *data, int count)
|
|
||||||
static int usbredir_write(void *priv, uint8_t *data, int count)
|
|
||||||
{
|
|
||||||
USBRedirDevice *dev = priv;
|
|
||||||
+ int r;
|
|
||||||
|
|
||||||
- if (!dev->cs->opened) {
|
|
||||||
+ if (!dev->cs->opened || dev->cs->write_blocked) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -267,7 +268,16 @@ static int usbredir_write(void *priv, uint8_t *data, int count)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
- return qemu_chr_fe_write(dev->cs, data, count);
|
|
||||||
+ r = qemu_chr_fe_write(dev->cs, data, count);
|
|
||||||
+
|
|
||||||
+ if (r < 0) {
|
|
||||||
+ if (dev->cs->write_blocked) {
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -1227,10 +1237,18 @@ static void usbredir_chardev_event(void *opaque, int event)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void usbredir_chardev_write_unblocked(void *opaque)
|
|
||||||
+{
|
|
||||||
+ USBRedirDevice *dev = opaque;
|
|
||||||
+
|
|
||||||
+ usbredirparser_do_write(dev->parser);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static const QemuChrHandlers usbredir_chr_handlers = {
|
|
||||||
.fd_can_read = usbredir_chardev_can_read,
|
|
||||||
.fd_read = usbredir_chardev_read,
|
|
||||||
.fd_event = usbredir_chardev_event,
|
|
||||||
+ .fd_write_unblocked = usbredir_chardev_write_unblocked,
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
@ -1,33 +0,0 @@
|
|||||||
From 42931bebb2856307dcdc9babc5dd9954b60c8094 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Amit Shah <amit.shah@redhat.com>
|
|
||||||
Date: Fri, 2 Dec 2011 15:42:55 +0530
|
|
||||||
Subject: [PATCH] char: Disable write callback if throttled chardev is detached
|
|
||||||
|
|
||||||
If a throttled chardev is detached from the frontend device, all future
|
|
||||||
callbacks should be suppressed. Not doing this results in a segfault.
|
|
||||||
|
|
||||||
Bugzilla: 745758
|
|
||||||
Upstream: Not applicable, since throttling is a RHEL6-only feature.
|
|
||||||
|
|
||||||
Signed-off-by: Amit Shah <amit.shah@redhat.com>
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
---
|
|
||||||
qemu-char.c | 5 +++++
|
|
||||||
1 file changed, 5 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/qemu-char.c b/qemu-char.c
|
|
||||||
index 53d2c13..fde72ff 100644
|
|
||||||
--- a/qemu-char.c
|
|
||||||
+++ b/qemu-char.c
|
|
||||||
@@ -223,6 +223,11 @@ void qemu_chr_add_handlers(CharDriverState *s,
|
|
||||||
++s->avail_connections;
|
|
||||||
}
|
|
||||||
if (!handlers) {
|
|
||||||
+ if (s->write_blocked) {
|
|
||||||
+ /* Ensure we disable the callback if we were throttled */
|
|
||||||
+ s->chr_disable_write_fd_handler(s);
|
|
||||||
+ /* s->write_blocked is cleared below */
|
|
||||||
+ }
|
|
||||||
handlers = &null_handlers;
|
|
||||||
}
|
|
||||||
s->chr_can_read = handlers->fd_can_read;
|
|
@ -1,51 +0,0 @@
|
|||||||
From 81ab56732f4990c288c88a545925dc4431c313d2 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alon Levy <alevy@redhat.com>
|
|
||||||
Date: Fri, 16 Nov 2012 16:24:47 +0200
|
|
||||||
Subject: [PATCH] hw/virtio-serial-bus: replay guest open on destination
|
|
||||||
|
|
||||||
This is rewrite of a patch carried in Fedora previously based
|
|
||||||
on new code upstream, here is the original message, it still applies:
|
|
||||||
(the original fedora patch was commit id
|
|
||||||
a9bc20afc1f0604ee81c23b7c67d627e51d2e8d4, this is useful for grepping in
|
|
||||||
logs, it isn't in upstream)
|
|
||||||
|
|
||||||
When migrating a host with with a spice agent running the mouse becomes
|
|
||||||
non operational after the migration. This is rhbz #725965.
|
|
||||||
|
|
||||||
The problem is that after migration spice doesn't know the guest agent
|
|
||||||
is open. Spice is just a char dev here. And a chardev cannot query it's
|
|
||||||
device, the device has to let the chardev know when it is open. Right
|
|
||||||
now after migration the chardev which is recreated is in it's default
|
|
||||||
state, which assumes the guest is disconnected.
|
|
||||||
|
|
||||||
Char devices carry no information across migration, but the
|
|
||||||
virtio-serial does already carry the guest_connected state. This patch
|
|
||||||
passes that bit to the chardev.
|
|
||||||
---
|
|
||||||
hw/virtio-serial-bus.c | 6 ++++++
|
|
||||||
1 file changed, 6 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/hw/virtio-serial-bus.c b/hw/virtio-serial-bus.c
|
|
||||||
index aa7d0d7..5078129 100644
|
|
||||||
--- a/hw/virtio-serial-bus.c
|
|
||||||
+++ b/hw/virtio-serial-bus.c
|
|
||||||
@@ -642,6 +642,7 @@ static void virtio_serial_post_load_timer_cb(void *opaque)
|
|
||||||
VirtIOSerial *s = opaque;
|
|
||||||
VirtIOSerialPort *port;
|
|
||||||
uint8_t host_connected;
|
|
||||||
+ VirtIOSerialPortClass *vsc;
|
|
||||||
|
|
||||||
if (!s->post_load) {
|
|
||||||
return;
|
|
||||||
@@ -657,6 +658,11 @@ static void virtio_serial_post_load_timer_cb(void *opaque)
|
|
||||||
send_control_event(s, port->id, VIRTIO_CONSOLE_PORT_OPEN,
|
|
||||||
port->host_connected);
|
|
||||||
}
|
|
||||||
+ vsc = VIRTIO_SERIAL_PORT_GET_CLASS(port);
|
|
||||||
+ if (port->guest_connected && vsc->guest_open) {
|
|
||||||
+ /* replay guest open */
|
|
||||||
+ vsc->guest_open(port);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
g_free(s->post_load->connected);
|
|
||||||
qemu_free_timer(s->post_load->timer);
|
|
@ -1,46 +0,0 @@
|
|||||||
From f76e7a03ac948a7649878d7ddbb02ace0f6e3625 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Cole Robinson <crobinso@redhat.com>
|
|
||||||
Date: Wed, 20 Feb 2013 11:14:45 -0500
|
|
||||||
Subject: [PATCH] docs: Fix generating qemu-doc.html with texinfo 5
|
|
||||||
|
|
||||||
LC_ALL=C makeinfo --no-headers --no-split --number-sections --html qemu-doc.texi -o qemu-doc.html
|
|
||||||
./qemu-options.texi:1521: unknown command `list'
|
|
||||||
./qemu-options.texi:1521: table requires an argument: the formatter for @item
|
|
||||||
./qemu-options.texi:1521: warning: @table has text but no @item
|
|
||||||
|
|
||||||
CC: qemu-stable@nongnu.org
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
---
|
|
||||||
qemu-options.hx | 19 +++++++------------
|
|
||||||
1 file changed, 7 insertions(+), 12 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/qemu-options.hx b/qemu-options.hx
|
|
||||||
index 15dc29e..470c2b4 100644
|
|
||||||
--- a/qemu-options.hx
|
|
||||||
+++ b/qemu-options.hx
|
|
||||||
@@ -2092,18 +2092,13 @@ QEMU supports using either local sheepdog devices or remote networked
|
|
||||||
devices.
|
|
||||||
|
|
||||||
Syntax for specifying a sheepdog device
|
|
||||||
-@table @list
|
|
||||||
-``sheepdog:<vdiname>''
|
|
||||||
-
|
|
||||||
-``sheepdog:<vdiname>:<snapid>''
|
|
||||||
-
|
|
||||||
-``sheepdog:<vdiname>:<tag>''
|
|
||||||
-
|
|
||||||
-``sheepdog:<host>:<port>:<vdiname>''
|
|
||||||
-
|
|
||||||
-``sheepdog:<host>:<port>:<vdiname>:<snapid>''
|
|
||||||
-
|
|
||||||
-``sheepdog:<host>:<port>:<vdiname>:<tag>''
|
|
||||||
+@table @code
|
|
||||||
+@item sheepdog:<vdiname>
|
|
||||||
+@item sheepdog:<vdiname>:<snapid>
|
|
||||||
+@item sheepdog:<vdiname>:<tag>
|
|
||||||
+@item sheepdog:<host>:<port>:<vdiname>
|
|
||||||
+@item sheepdog:<host>:<port>:<vdiname>:<snapid>
|
|
||||||
+@item sheepdog:<host>:<port>:<vdiname>:<tag>
|
|
||||||
@end table
|
|
||||||
|
|
||||||
Example
|
|
@ -1,31 +0,0 @@
|
|||||||
From 106a39c50211b7c7e96ffb47ad9deae5d9be6d84 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Hans de Goede <hdegoede@redhat.com>
|
|
||||||
Date: Fri, 15 Mar 2013 11:52:37 +0100
|
|
||||||
Subject: [PATCH] usb-redir: Fix crash on migration with no client connected
|
|
||||||
|
|
||||||
If no client is connected on the src side, then we won't receive a
|
|
||||||
parser during migrate, in this case usbredir_post_load() should be a nop,
|
|
||||||
rather then to try to derefefence the NULL dev->parser pointer.
|
|
||||||
|
|
||||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
|
||||||
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
|
|
||||||
(cherry picked from commit 3713e1485e6eace7d48b9c790602cfd92c616e5f)
|
|
||||||
---
|
|
||||||
hw/usb/redirect.c | 4 ++++
|
|
||||||
1 file changed, 4 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
|
|
||||||
index 4d23b66..bf6aaf0 100644
|
|
||||||
--- a/hw/usb/redirect.c
|
|
||||||
+++ b/hw/usb/redirect.c
|
|
||||||
@@ -2008,6 +2008,10 @@ static int usbredir_post_load(void *priv, int version_id)
|
|
||||||
{
|
|
||||||
USBRedirDevice *dev = priv;
|
|
||||||
|
|
||||||
+ if (dev->parser == NULL) {
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
switch (dev->device_info.speed) {
|
|
||||||
case usb_redir_speed_low:
|
|
||||||
dev->dev.speed = USB_SPEED_LOW;
|
|
140
qemu.spec
140
qemu.spec
@ -29,6 +29,7 @@
|
|||||||
%bcond_without seccomp # enabled
|
%bcond_without seccomp # enabled
|
||||||
%bcond_with xfsprogs # disabled
|
%bcond_with xfsprogs # disabled
|
||||||
%bcond_with separate_kvm # disabled - for EPEL
|
%bcond_with separate_kvm # disabled - for EPEL
|
||||||
|
%bcond_with gtk # disabled
|
||||||
%else
|
%else
|
||||||
# General defaults:
|
# General defaults:
|
||||||
%bcond_with kvmonly # disabled
|
%bcond_with kvmonly # disabled
|
||||||
@ -38,9 +39,10 @@
|
|||||||
%bcond_without seccomp # enabled
|
%bcond_without seccomp # enabled
|
||||||
%bcond_without xfsprogs # enabled
|
%bcond_without xfsprogs # enabled
|
||||||
%bcond_with separate_kvm # disabled
|
%bcond_with separate_kvm # disabled
|
||||||
|
%bcond_without gtk # enabled
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%global SLOF_gittagdate 20121018
|
%global SLOF_gittagdate 20130430
|
||||||
|
|
||||||
%if %{without separate_kvm}
|
%if %{without separate_kvm}
|
||||||
%global kvm_archs %{ix86} x86_64 ppc64 s390x
|
%global kvm_archs %{ix86} x86_64 ppc64 s390x
|
||||||
@ -121,6 +123,7 @@
|
|||||||
%global system_x86 system-x86
|
%global system_x86 system-x86
|
||||||
%global system_xtensa system-xtensa
|
%global system_xtensa system-xtensa
|
||||||
%global system_unicore32 system-unicore32
|
%global system_unicore32 system-unicore32
|
||||||
|
%global system_moxie system-moxie
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
# libfdt is only needed to build ARM, Microblaze or PPC emulators
|
# libfdt is only needed to build ARM, Microblaze or PPC emulators
|
||||||
@ -130,9 +133,8 @@
|
|||||||
|
|
||||||
Summary: QEMU is a FAST! processor emulator
|
Summary: QEMU is a FAST! processor emulator
|
||||||
Name: qemu
|
Name: qemu
|
||||||
Version: 1.4.1
|
Version: 1.5.0
|
||||||
Release: 3%{?dist}
|
Release: 1%{?dist}
|
||||||
# Epoch because we pushed a qemu-1.0 package. AIUI this can't ever be dropped
|
|
||||||
Epoch: 2
|
Epoch: 2
|
||||||
License: GPLv2+ and LGPLv2+ and BSD
|
License: GPLv2+ and LGPLv2+ and BSD
|
||||||
Group: Development/Tools
|
Group: Development/Tools
|
||||||
@ -173,31 +175,13 @@ Source12: bridge.conf
|
|||||||
# qemu-kvm back compat wrapper
|
# qemu-kvm back compat wrapper
|
||||||
Source13: qemu-kvm.sh
|
Source13: qemu-kvm.sh
|
||||||
|
|
||||||
# Flow control series
|
|
||||||
Patch0001: 0001-char-Split-out-tcp-socket-close-code-in-a-separate-f.patch
|
|
||||||
Patch0002: 0002-char-Add-a-QemuChrHandlers-struct-to-initialise-char.patch
|
|
||||||
Patch0003: 0003-iohandlers-Add-enable-disable_write_fd_handler-funct.patch
|
|
||||||
Patch0004: 0004-char-Add-framework-for-a-write-unblocked-callback.patch
|
|
||||||
Patch0005: 0005-char-Update-send_all-to-handle-nonblocking-chardev-w.patch
|
|
||||||
Patch0006: 0006-char-Equip-the-unix-tcp-backend-to-handle-nonblockin.patch
|
|
||||||
Patch0007: 0007-virtio-console-Enable-port-throttling-when-chardev-i.patch
|
|
||||||
Patch0008: 0008-spice-qemu-char.c-add-throttling.patch
|
|
||||||
Patch0009: 0009-spice-qemu-char.c-remove-intermediate-buffer.patch
|
|
||||||
Patch0010: 0010-usb-redir-Add-flow-control-support.patch
|
|
||||||
Patch0011: 0011-char-Disable-write-callback-if-throttled-chardev-is-.patch
|
|
||||||
Patch0012: 0012-hw-virtio-serial-bus-replay-guest-open-on-destinatio.patch
|
|
||||||
|
|
||||||
# qemu-kvm migration compat (posted upstream)
|
# qemu-kvm migration compat (posted upstream)
|
||||||
Patch0101: 0101-configure-Add-enable-migration-from-qemu-kvm.patch
|
Patch0001: 0001-configure-Add-enable-migration-from-qemu-kvm.patch
|
||||||
Patch0102: 0102-acpi_piix4-Drop-minimum_version_id-to-handle-qemu-kv.patch
|
Patch0002: 0002-acpi_piix4-Drop-minimum_version_id-to-handle-qemu-kv.patch
|
||||||
Patch0103: 0103-i8254-Fix-migration-from-qemu-kvm-1.1.patch
|
Patch0003: 0003-i8254-Fix-migration-from-qemu-kvm-1.1.patch
|
||||||
Patch0104: 0104-pc_piix-Add-compat-handling-for-qemu-kvm-VGA-mem-siz.patch
|
Patch0004: 0004-pc_piix-Add-compat-handling-for-qemu-kvm-VGA-mem-siz.patch
|
||||||
# Fix migration w/ qxl from qemu-kvm 1.2 (solution pending upstream)
|
# Fix migration w/ qxl from qemu-kvm 1.2 (solution pending upstream)
|
||||||
Patch0105: 0105-qxl-Add-rom_size-compat-property-fix-migration-from-.patch
|
Patch0005: 0005-qxl-Add-rom_size-compat-property-fix-migration-from-.patch
|
||||||
# Fix generating docs with texinfo 5 (posted upstream)
|
|
||||||
Patch0106: 0106-docs-Fix-generating-qemu-doc.html-with-texinfo-5.patch
|
|
||||||
# Fix crash with usbredir (bz #962826)
|
|
||||||
Patch0107: 0107-usb-redir-Fix-crash-on-migration-with-no-client-conn.patch
|
|
||||||
|
|
||||||
BuildRequires: SDL-devel
|
BuildRequires: SDL-devel
|
||||||
BuildRequires: zlib-devel
|
BuildRequires: zlib-devel
|
||||||
@ -268,6 +252,16 @@ BuildRequires: pixman-devel
|
|||||||
BuildRequires: glusterfs-devel >= 3.4.0
|
BuildRequires: glusterfs-devel >= 3.4.0
|
||||||
BuildRequires: glusterfs-api-devel >= 3.4.0
|
BuildRequires: glusterfs-api-devel >= 3.4.0
|
||||||
%endif
|
%endif
|
||||||
|
# Needed for usb passthrough for qemu >= 1.5
|
||||||
|
BuildRequires: libusbx-devel
|
||||||
|
# SSH block driver
|
||||||
|
BuildRequires: libssh2-devel
|
||||||
|
%if %{with gtk}
|
||||||
|
# GTK frontend
|
||||||
|
BuildRequires: gtk3-devel
|
||||||
|
BuildRequires: vte3-devel
|
||||||
|
%endif
|
||||||
|
|
||||||
|
|
||||||
%if 0%{?user:1}
|
%if 0%{?user:1}
|
||||||
Requires: %{name}-%{user} = %{epoch}:%{version}-%{release}
|
Requires: %{name}-%{user} = %{epoch}:%{version}-%{release}
|
||||||
@ -317,6 +311,9 @@ Requires: %{name}-%{system_x86} = %{epoch}:%{version}-%{release}
|
|||||||
%if 0%{?system_xtensa:1}
|
%if 0%{?system_xtensa:1}
|
||||||
Requires: %{name}-%{system_xtensa} = %{epoch}:%{version}-%{release}
|
Requires: %{name}-%{system_xtensa} = %{epoch}:%{version}-%{release}
|
||||||
%endif
|
%endif
|
||||||
|
%if 0%{?system_moxie:1}
|
||||||
|
Requires: %{name}-%{system_moxie} = %{epoch}:%{version}-%{release}
|
||||||
|
%endif
|
||||||
%if %{without separate_kvm}
|
%if %{without separate_kvm}
|
||||||
Requires: %{name}-img = %{epoch}:%{version}-%{release}
|
Requires: %{name}-img = %{epoch}:%{version}-%{release}
|
||||||
%else
|
%else
|
||||||
@ -424,7 +421,7 @@ Obsoletes: kvm < 85
|
|||||||
Requires: seavgabios-bin
|
Requires: seavgabios-bin
|
||||||
Requires: seabios-bin >= 0.6.0-2
|
Requires: seabios-bin >= 0.6.0-2
|
||||||
Requires: sgabios-bin
|
Requires: sgabios-bin
|
||||||
Requires: ipxe-roms-qemu
|
Requires: ipxe-roms-qemu >= 20130517-2.gitc4bce43
|
||||||
%if 0%{?have_seccomp:1}
|
%if 0%{?have_seccomp:1}
|
||||||
Requires: libseccomp >= 1.0.0
|
Requires: libseccomp >= 1.0.0
|
||||||
%endif
|
%endif
|
||||||
@ -577,7 +574,7 @@ Summary: QEMU system emulator for PPC
|
|||||||
Group: Development/Tools
|
Group: Development/Tools
|
||||||
Requires: %{name}-common = %{epoch}:%{version}-%{release}
|
Requires: %{name}-common = %{epoch}:%{version}-%{release}
|
||||||
Requires: openbios
|
Requires: openbios
|
||||||
Requires: SLOF = 0.1.git%{SLOF_gittagdate}
|
Requires: SLOF >= 0.1.git%{SLOF_gittagdate}
|
||||||
%description %{system_ppc}
|
%description %{system_ppc}
|
||||||
QEMU is a generic and open source processor emulator which achieves a good
|
QEMU is a generic and open source processor emulator which achieves a good
|
||||||
emulation speed by using dynamic translation.
|
emulation speed by using dynamic translation.
|
||||||
@ -609,6 +606,18 @@ emulation speed by using dynamic translation.
|
|||||||
This package provides the system emulator for Unicore32 boards.
|
This package provides the system emulator for Unicore32 boards.
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
%if 0%{?system_moxie:1}
|
||||||
|
%package %{system_moxie}
|
||||||
|
Summary: QEMU system emulator for Moxie
|
||||||
|
Group: Development/Tools
|
||||||
|
Requires: %{name}-common = %{epoch}:%{version}-%{release}
|
||||||
|
%description %{system_moxie}
|
||||||
|
QEMU is a generic and open source processor emulator which achieves a good
|
||||||
|
emulation speed by using dynamic translation.
|
||||||
|
|
||||||
|
This package provides the system emulator for Moxie boards.
|
||||||
|
%endif
|
||||||
|
|
||||||
%ifarch %{kvm_archs}
|
%ifarch %{kvm_archs}
|
||||||
%package kvm-tools
|
%package kvm-tools
|
||||||
Summary: KVM debugging and diagnostics tools
|
Summary: KVM debugging and diagnostics tools
|
||||||
@ -647,31 +656,13 @@ CAC emulation development files.
|
|||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
|
|
||||||
# Flow control series
|
# qemu-kvm migration compat (posted upstream)
|
||||||
%patch0001 -p1
|
%patch0001 -p1
|
||||||
%patch0002 -p1
|
%patch0002 -p1
|
||||||
%patch0003 -p1
|
%patch0003 -p1
|
||||||
%patch0004 -p1
|
%patch0004 -p1
|
||||||
%patch0005 -p1
|
|
||||||
%patch0006 -p1
|
|
||||||
%patch0007 -p1
|
|
||||||
%patch0008 -p1
|
|
||||||
%patch0009 -p1
|
|
||||||
%patch0010 -p1
|
|
||||||
%patch0011 -p1
|
|
||||||
%patch0012 -p1
|
|
||||||
|
|
||||||
# qemu-kvm migration compat (posted upstream)
|
|
||||||
%patch0101 -p1
|
|
||||||
%patch0102 -p1
|
|
||||||
%patch0103 -p1
|
|
||||||
%patch0104 -p1
|
|
||||||
# Fix migration w/ qxl from qemu-kvm 1.2 (solution pending upstream)
|
# Fix migration w/ qxl from qemu-kvm 1.2 (solution pending upstream)
|
||||||
%patch0105 -p1
|
%patch0005 -p1
|
||||||
# Fix generating docs with texinfo 5 (posted upstream)
|
|
||||||
%patch0106 -p1
|
|
||||||
# Fix crash with usbredir (bz #962826)
|
|
||||||
%patch0107 -p1
|
|
||||||
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
@ -683,11 +674,13 @@ CAC emulation development files.
|
|||||||
microblazeel-softmmu mips-softmmu mipsel-softmmu mips64-softmmu \
|
microblazeel-softmmu mips-softmmu mipsel-softmmu mips64-softmmu \
|
||||||
mips64el-softmmu or32-softmmu ppc-softmmu ppcemb-softmmu ppc64-softmmu \
|
mips64el-softmmu or32-softmmu ppc-softmmu ppcemb-softmmu ppc64-softmmu \
|
||||||
s390x-softmmu sh4-softmmu sh4eb-softmmu sparc-softmmu sparc64-softmmu \
|
s390x-softmmu sh4-softmmu sh4eb-softmmu sparc-softmmu sparc64-softmmu \
|
||||||
xtensa-softmmu xtensaeb-softmmu unicore32-softmmu \
|
xtensa-softmmu xtensaeb-softmmu unicore32-softmmu moxie-softmmu \
|
||||||
i386-linux-user x86_64-linux-user alpha-linux-user arm-linux-user \
|
i386-linux-user x86_64-linux-user alpha-linux-user arm-linux-user \
|
||||||
armeb-linux-user cris-linux-user m68k-linux-user \
|
armeb-linux-user cris-linux-user m68k-linux-user \
|
||||||
microblaze-linux-user microblazeel-linux-user mips-linux-user \
|
microblaze-linux-user microblazeel-linux-user mips-linux-user \
|
||||||
mipsel-linux-user or32-linux-user ppc-linux-user ppc64-linux-user \
|
mipsel-linux-user mips64-linux-user mips64el-linux-user \
|
||||||
|
mipsn32-linux-user mipsn32el-linux-user \
|
||||||
|
or32-linux-user ppc-linux-user ppc64-linux-user \
|
||||||
ppc64abi32-linux-user s390x-linux-user sh4-linux-user sh4eb-linux-user \
|
ppc64abi32-linux-user s390x-linux-user sh4-linux-user sh4eb-linux-user \
|
||||||
sparc-linux-user sparc64-linux-user sparc32plus-linux-user \
|
sparc-linux-user sparc64-linux-user sparc32plus-linux-user \
|
||||||
unicore32-linux-user"
|
unicore32-linux-user"
|
||||||
@ -736,6 +729,10 @@ dobuild() {
|
|||||||
%else
|
%else
|
||||||
--disable-fdt \
|
--disable-fdt \
|
||||||
%endif
|
%endif
|
||||||
|
%if %{with gtk}
|
||||||
|
--with-gtkabi="3.0" \
|
||||||
|
%endif
|
||||||
|
--enable-tpm \
|
||||||
"$@"
|
"$@"
|
||||||
|
|
||||||
echo "config-host.mak contents:"
|
echo "config-host.mak contents:"
|
||||||
@ -778,6 +775,8 @@ install -m 0644 %{SOURCE3} $RPM_BUILD_ROOT%{_udevdir}
|
|||||||
|
|
||||||
make DESTDIR=$RPM_BUILD_ROOT install
|
make DESTDIR=$RPM_BUILD_ROOT install
|
||||||
|
|
||||||
|
%find_lang %{name}
|
||||||
|
|
||||||
%if 0%{?need_qemu_kvm}
|
%if 0%{?need_qemu_kvm}
|
||||||
install -m 0755 %{SOURCE13} $RPM_BUILD_ROOT%{_bindir}/qemu-kvm
|
install -m 0755 %{SOURCE13} $RPM_BUILD_ROOT%{_bindir}/qemu-kvm
|
||||||
%endif
|
%endif
|
||||||
@ -788,7 +787,7 @@ rm $RPM_BUILD_ROOT%{_datadir}/systemtap/tapset/qemu-system-%{kvm_target}.stp
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
chmod -x ${RPM_BUILD_ROOT}%{_mandir}/man1/*
|
chmod -x ${RPM_BUILD_ROOT}%{_mandir}/man1/*
|
||||||
install -D -p -m 0644 -t ${RPM_BUILD_ROOT}%{qemudocdir} Changelog README TODO COPYING COPYING.LIB LICENSE
|
install -D -p -m 0644 -t ${RPM_BUILD_ROOT}%{qemudocdir} Changelog README COPYING COPYING.LIB LICENSE
|
||||||
|
|
||||||
install -D -p -m 0644 qemu.sasl $RPM_BUILD_ROOT%{_sysconfdir}/sasl2/qemu.conf
|
install -D -p -m 0644 qemu.sasl $RPM_BUILD_ROOT%{_sysconfdir}/sasl2/qemu.conf
|
||||||
|
|
||||||
@ -817,10 +816,12 @@ rm -f ${RPM_BUILD_ROOT}%{_datadir}/%{name}/spapr-rtas.bin
|
|||||||
%endif
|
%endif
|
||||||
%if 0%{!?system_s390x:1}
|
%if 0%{!?system_s390x:1}
|
||||||
rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{name}/s390-zipl.rom
|
rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{name}/s390-zipl.rom
|
||||||
|
rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{name}/s390-ccw.img
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
# Provided by package ipxe
|
# Provided by package ipxe
|
||||||
rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{name}/pxe*rom
|
rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{name}/pxe*rom
|
||||||
|
rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{name}/efi*rom
|
||||||
# Provided by package seavgabios
|
# Provided by package seavgabios
|
||||||
rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{name}/vgabios*bin
|
rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{name}/vgabios*bin
|
||||||
# Provided by package seabios
|
# Provided by package seabios
|
||||||
@ -834,6 +835,7 @@ rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{name}/sgabios.bin
|
|||||||
# for other paths, yet.
|
# for other paths, yet.
|
||||||
pxe_link() {
|
pxe_link() {
|
||||||
ln -s ../ipxe/$2.rom %{buildroot}%{_datadir}/%{name}/pxe-$1.rom
|
ln -s ../ipxe/$2.rom %{buildroot}%{_datadir}/%{name}/pxe-$1.rom
|
||||||
|
ln -s ../ipxe.efi/$2.rom %{buildroot}%{_datadir}/%{name}/efi-$1.rom
|
||||||
}
|
}
|
||||||
|
|
||||||
pxe_link e1000 8086100e
|
pxe_link e1000 8086100e
|
||||||
@ -999,12 +1001,11 @@ getent passwd qemu >/dev/null || \
|
|||||||
%defattr(-,root,root)
|
%defattr(-,root,root)
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%files common
|
%files common -f %{name}.lang
|
||||||
%defattr(-,root,root)
|
%defattr(-,root,root)
|
||||||
%dir %{qemudocdir}
|
%dir %{qemudocdir}
|
||||||
%doc %{qemudocdir}/Changelog
|
%doc %{qemudocdir}/Changelog
|
||||||
%doc %{qemudocdir}/README
|
%doc %{qemudocdir}/README
|
||||||
%doc %{qemudocdir}/TODO
|
|
||||||
%doc %{qemudocdir}/qemu-doc.html
|
%doc %{qemudocdir}/qemu-doc.html
|
||||||
%doc %{qemudocdir}/qemu-tech.html
|
%doc %{qemudocdir}/qemu-tech.html
|
||||||
%doc %{qemudocdir}/qmp-commands.txt
|
%doc %{qemudocdir}/qmp-commands.txt
|
||||||
@ -1012,6 +1013,7 @@ getent passwd qemu >/dev/null || \
|
|||||||
%doc %{qemudocdir}/COPYING.LIB
|
%doc %{qemudocdir}/COPYING.LIB
|
||||||
%doc %{qemudocdir}/LICENSE
|
%doc %{qemudocdir}/LICENSE
|
||||||
%dir %{_datadir}/%{name}/
|
%dir %{_datadir}/%{name}/
|
||||||
|
%{_datadir}/%{name}/qemu-icon.bmp
|
||||||
%{_datadir}/%{name}/keymaps/
|
%{_datadir}/%{name}/keymaps/
|
||||||
%{_mandir}/man1/qemu.1*
|
%{_mandir}/man1/qemu.1*
|
||||||
%{_mandir}/man1/virtfs-proxy-helper.1*
|
%{_mandir}/man1/virtfs-proxy-helper.1*
|
||||||
@ -1053,6 +1055,10 @@ getent passwd qemu >/dev/null || \
|
|||||||
%{_bindir}/qemu-microblazeel
|
%{_bindir}/qemu-microblazeel
|
||||||
%{_bindir}/qemu-mips
|
%{_bindir}/qemu-mips
|
||||||
%{_bindir}/qemu-mipsel
|
%{_bindir}/qemu-mipsel
|
||||||
|
%{_bindir}/qemu-mips64
|
||||||
|
%{_bindir}/qemu-mips64el
|
||||||
|
%{_bindir}/qemu-mipsn32
|
||||||
|
%{_bindir}/qemu-mipsn32el
|
||||||
%{_bindir}/qemu-or32
|
%{_bindir}/qemu-or32
|
||||||
%{_bindir}/qemu-ppc
|
%{_bindir}/qemu-ppc
|
||||||
%{_bindir}/qemu-ppc64
|
%{_bindir}/qemu-ppc64
|
||||||
@ -1075,6 +1081,10 @@ getent passwd qemu >/dev/null || \
|
|||||||
%{_datadir}/systemtap/tapset/qemu-microblazeel.stp
|
%{_datadir}/systemtap/tapset/qemu-microblazeel.stp
|
||||||
%{_datadir}/systemtap/tapset/qemu-mips.stp
|
%{_datadir}/systemtap/tapset/qemu-mips.stp
|
||||||
%{_datadir}/systemtap/tapset/qemu-mipsel.stp
|
%{_datadir}/systemtap/tapset/qemu-mipsel.stp
|
||||||
|
%{_datadir}/systemtap/tapset/qemu-mips64.stp
|
||||||
|
%{_datadir}/systemtap/tapset/qemu-mips64el.stp
|
||||||
|
%{_datadir}/systemtap/tapset/qemu-mipsn32.stp
|
||||||
|
%{_datadir}/systemtap/tapset/qemu-mipsn32el.stp
|
||||||
%{_datadir}/systemtap/tapset/qemu-or32.stp
|
%{_datadir}/systemtap/tapset/qemu-or32.stp
|
||||||
%{_datadir}/systemtap/tapset/qemu-ppc.stp
|
%{_datadir}/systemtap/tapset/qemu-ppc.stp
|
||||||
%{_datadir}/systemtap/tapset/qemu-ppc64.stp
|
%{_datadir}/systemtap/tapset/qemu-ppc64.stp
|
||||||
@ -1110,11 +1120,15 @@ getent passwd qemu >/dev/null || \
|
|||||||
%{_datadir}/%{name}/vgabios-stdvga.bin
|
%{_datadir}/%{name}/vgabios-stdvga.bin
|
||||||
%{_datadir}/%{name}/vgabios-vmware.bin
|
%{_datadir}/%{name}/vgabios-vmware.bin
|
||||||
%{_datadir}/%{name}/pxe-e1000.rom
|
%{_datadir}/%{name}/pxe-e1000.rom
|
||||||
|
%{_datadir}/%{name}/efi-e1000.rom
|
||||||
%{_datadir}/%{name}/pxe-virtio.rom
|
%{_datadir}/%{name}/pxe-virtio.rom
|
||||||
|
%{_datadir}/%{name}/efi-virtio.rom
|
||||||
%{_datadir}/%{name}/pxe-pcnet.rom
|
%{_datadir}/%{name}/pxe-pcnet.rom
|
||||||
|
%{_datadir}/%{name}/efi-pcnet.rom
|
||||||
%{_datadir}/%{name}/pxe-rtl8139.rom
|
%{_datadir}/%{name}/pxe-rtl8139.rom
|
||||||
|
%{_datadir}/%{name}/efi-rtl8139.rom
|
||||||
%{_datadir}/%{name}/pxe-ne2k_pci.rom
|
%{_datadir}/%{name}/pxe-ne2k_pci.rom
|
||||||
%{_datadir}/%{name}/qemu-icon.bmp
|
%{_datadir}/%{name}/efi-ne2k_pci.rom
|
||||||
%config(noreplace) %{_sysconfdir}/qemu/target-x86_64.conf
|
%config(noreplace) %{_sysconfdir}/qemu/target-x86_64.conf
|
||||||
%if %{without separate_kvm}
|
%if %{without separate_kvm}
|
||||||
%ifarch %{ix86} x86_64
|
%ifarch %{ix86} x86_64
|
||||||
@ -1202,6 +1216,7 @@ getent passwd qemu >/dev/null || \
|
|||||||
%{_bindir}/qemu-system-s390x
|
%{_bindir}/qemu-system-s390x
|
||||||
%{_datadir}/systemtap/tapset/qemu-system-s390x.stp
|
%{_datadir}/systemtap/tapset/qemu-system-s390x.stp
|
||||||
%{_datadir}/%{name}/s390-zipl.rom
|
%{_datadir}/%{name}/s390-zipl.rom
|
||||||
|
%{_datadir}/%{name}/s390-ccw.img
|
||||||
%ifarch s390x
|
%ifarch s390x
|
||||||
%{?kvm_files:}
|
%{?kvm_files:}
|
||||||
%{?qemu_kvm_files:}
|
%{?qemu_kvm_files:}
|
||||||
@ -1262,6 +1277,13 @@ getent passwd qemu >/dev/null || \
|
|||||||
%{_datadir}/systemtap/tapset/qemu-system-xtensaeb.stp
|
%{_datadir}/systemtap/tapset/qemu-system-xtensaeb.stp
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
%if 0%{?system_moxie:1}
|
||||||
|
%files %{system_moxie}
|
||||||
|
%defattr(-,root,root)
|
||||||
|
%{_bindir}/qemu-system-moxie
|
||||||
|
%{_datadir}/systemtap/tapset/qemu-system-moxie.stp
|
||||||
|
%endif
|
||||||
|
|
||||||
%if %{without separate_kvm}
|
%if %{without separate_kvm}
|
||||||
%files img
|
%files img
|
||||||
%defattr(-,root,root)
|
%defattr(-,root,root)
|
||||||
@ -1288,6 +1310,14 @@ getent passwd qemu >/dev/null || \
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue May 21 2013 Cole Robinson <crobinso@redhat.com> - 2:1.5.0-1
|
||||||
|
- Update to qemu 1.5
|
||||||
|
- KVM for ARM support
|
||||||
|
- A native GTK+ UI with internationalization support
|
||||||
|
- Experimental VFIO support for VGA passthrough
|
||||||
|
- Support for VMware PVSCSI and VMXNET3 device emulation
|
||||||
|
- CPU hot-add support
|
||||||
|
|
||||||
* Thu May 16 2013 Paolo Bonzini <pbonzini@redhat.com> - 2:1.4.1-3
|
* Thu May 16 2013 Paolo Bonzini <pbonzini@redhat.com> - 2:1.4.1-3
|
||||||
- Drop loading of vhost-net module (bz #963198)
|
- Drop loading of vhost-net module (bz #963198)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user