Add patches
This commit is contained in:
parent
05010a02f4
commit
2e55f16ca5
181
0104-qmp-access-the-local-QemuOptsLists-for-drive-option.patch
Normal file
181
0104-qmp-access-the-local-QemuOptsLists-for-drive-option.patch
Normal file
@ -0,0 +1,181 @@
|
||||
From ef8acf5e5e525f5c757b57f9f3f0b3727459b6ad Mon Sep 17 00:00:00 2001
|
||||
From: Amos Kong <akong@redhat.com>
|
||||
Date: Fri, 15 Nov 2013 18:53:14 +0100
|
||||
Subject: [PATCH] qmp: access the local QemuOptsLists for drive option
|
||||
|
||||
Currently we have three QemuOptsList (qemu_common_drive_opts,
|
||||
qemu_legacy_drive_opts, and qemu_drive_opts), only qemu_drive_opts
|
||||
is added to vm_config_groups[].
|
||||
|
||||
This patch changes query-command-line-options to access three local
|
||||
QemuOptsLists for drive option, and merge the description items
|
||||
together.
|
||||
|
||||
Signed-off-by: Amos Kong <akong@redhat.com>
|
||||
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||||
---
|
||||
blockdev.c | 1 -
|
||||
include/qemu/config-file.h | 1 +
|
||||
include/sysemu/sysemu.h | 1 +
|
||||
util/qemu-config.c | 77 +++++++++++++++++++++++++++++++++++++++++++++-
|
||||
vl.c | 2 ++
|
||||
5 files changed, 80 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/blockdev.c b/blockdev.c
|
||||
index 097932c..1a6892e 100644
|
||||
--- a/blockdev.c
|
||||
+++ b/blockdev.c
|
||||
@@ -45,7 +45,6 @@
|
||||
#include "sysemu/arch_init.h"
|
||||
|
||||
static QTAILQ_HEAD(drivelist, DriveInfo) drives = QTAILQ_HEAD_INITIALIZER(drives);
|
||||
-extern QemuOptsList qemu_common_drive_opts;
|
||||
extern QemuOptsList qemu_old_drive_opts;
|
||||
|
||||
static const char *const if_name[IF_COUNT] = {
|
||||
diff --git a/include/qemu/config-file.h b/include/qemu/config-file.h
|
||||
index ad4a9e5..508428f 100644
|
||||
--- a/include/qemu/config-file.h
|
||||
+++ b/include/qemu/config-file.h
|
||||
@@ -8,6 +8,7 @@
|
||||
QemuOptsList *qemu_find_opts(const char *group);
|
||||
QemuOptsList *qemu_find_opts_err(const char *group, Error **errp);
|
||||
void qemu_add_opts(QemuOptsList *list);
|
||||
+void qemu_add_drive_opts(QemuOptsList *list);
|
||||
int qemu_set_option(const char *str);
|
||||
int qemu_global_option(const char *str);
|
||||
void qemu_add_globals(void);
|
||||
diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
|
||||
index 1a77c99..4962cef 100644
|
||||
--- a/include/sysemu/sysemu.h
|
||||
+++ b/include/sysemu/sysemu.h
|
||||
@@ -190,6 +190,7 @@ QemuOpts *qemu_get_machine_opts(void);
|
||||
|
||||
bool usb_enabled(bool default_usb);
|
||||
|
||||
+extern QemuOptsList qemu_common_drive_opts;
|
||||
extern QemuOptsList qemu_drive_opts;
|
||||
extern QemuOptsList qemu_chardev_opts;
|
||||
extern QemuOptsList qemu_device_opts;
|
||||
diff --git a/util/qemu-config.c b/util/qemu-config.c
|
||||
index a59568d..04da942 100644
|
||||
--- a/util/qemu-config.c
|
||||
+++ b/util/qemu-config.c
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "qmp-commands.h"
|
||||
|
||||
static QemuOptsList *vm_config_groups[32];
|
||||
+static QemuOptsList *drive_config_groups[4];
|
||||
|
||||
static QemuOptsList *find_list(QemuOptsList **lists, const char *group,
|
||||
Error **errp)
|
||||
@@ -77,6 +78,59 @@ static CommandLineParameterInfoList *query_option_descs(const QemuOptDesc *desc)
|
||||
return param_list;
|
||||
}
|
||||
|
||||
+/* remove repeated entry from the info list */
|
||||
+static void cleanup_infolist(CommandLineParameterInfoList *head)
|
||||
+{
|
||||
+ CommandLineParameterInfoList *pre_entry, *cur, *del_entry;
|
||||
+
|
||||
+ cur = head;
|
||||
+ while (cur->next) {
|
||||
+ pre_entry = head;
|
||||
+ while (pre_entry != cur->next) {
|
||||
+ if (!strcmp(pre_entry->value->name, cur->next->value->name)) {
|
||||
+ del_entry = cur->next;
|
||||
+ cur->next = cur->next->next;
|
||||
+ g_free(del_entry);
|
||||
+ break;
|
||||
+ }
|
||||
+ pre_entry = pre_entry->next;
|
||||
+ }
|
||||
+ cur = cur->next;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+/* merge the description items of two parameter infolists */
|
||||
+static void connect_infolist(CommandLineParameterInfoList *head,
|
||||
+ CommandLineParameterInfoList *new)
|
||||
+{
|
||||
+ CommandLineParameterInfoList *cur;
|
||||
+
|
||||
+ cur = head;
|
||||
+ while (cur->next) {
|
||||
+ cur = cur->next;
|
||||
+ }
|
||||
+ cur->next = new;
|
||||
+}
|
||||
+
|
||||
+/* access all the local QemuOptsLists for drive option */
|
||||
+static CommandLineParameterInfoList *get_drive_infolist(void)
|
||||
+{
|
||||
+ CommandLineParameterInfoList *head = NULL, *cur;
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; drive_config_groups[i] != NULL; i++) {
|
||||
+ if (!head) {
|
||||
+ head = query_option_descs(drive_config_groups[i]->desc);
|
||||
+ } else {
|
||||
+ cur = query_option_descs(drive_config_groups[i]->desc);
|
||||
+ connect_infolist(head, cur);
|
||||
+ }
|
||||
+ }
|
||||
+ cleanup_infolist(head);
|
||||
+
|
||||
+ return head;
|
||||
+}
|
||||
+
|
||||
CommandLineOptionInfoList *qmp_query_command_line_options(bool has_option,
|
||||
const char *option,
|
||||
Error **errp)
|
||||
@@ -89,7 +143,12 @@ CommandLineOptionInfoList *qmp_query_command_line_options(bool has_option,
|
||||
if (!has_option || !strcmp(option, vm_config_groups[i]->name)) {
|
||||
info = g_malloc0(sizeof(*info));
|
||||
info->option = g_strdup(vm_config_groups[i]->name);
|
||||
- info->parameters = query_option_descs(vm_config_groups[i]->desc);
|
||||
+ if (!strcmp("drive", vm_config_groups[i]->name)) {
|
||||
+ info->parameters = get_drive_infolist();
|
||||
+ } else {
|
||||
+ info->parameters =
|
||||
+ query_option_descs(vm_config_groups[i]->desc);
|
||||
+ }
|
||||
entry = g_malloc0(sizeof(*entry));
|
||||
entry->value = info;
|
||||
entry->next = conf_list;
|
||||
@@ -109,6 +168,22 @@ QemuOptsList *qemu_find_opts_err(const char *group, Error **errp)
|
||||
return find_list(vm_config_groups, group, errp);
|
||||
}
|
||||
|
||||
+void qemu_add_drive_opts(QemuOptsList *list)
|
||||
+{
|
||||
+ int entries, i;
|
||||
+
|
||||
+ entries = ARRAY_SIZE(drive_config_groups);
|
||||
+ entries--; /* keep list NULL terminated */
|
||||
+ for (i = 0; i < entries; i++) {
|
||||
+ if (drive_config_groups[i] == NULL) {
|
||||
+ drive_config_groups[i] = list;
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+ fprintf(stderr, "ran out of space in drive_config_groups");
|
||||
+ abort();
|
||||
+}
|
||||
+
|
||||
void qemu_add_opts(QemuOptsList *list)
|
||||
{
|
||||
int entries, i;
|
||||
diff --git a/vl.c b/vl.c
|
||||
index 2160933..63ecf16 100644
|
||||
--- a/vl.c
|
||||
+++ b/vl.c
|
||||
@@ -2942,6 +2942,8 @@ int main(int argc, char **argv, char **envp)
|
||||
module_call_init(MODULE_INIT_QOM);
|
||||
|
||||
qemu_add_opts(&qemu_drive_opts);
|
||||
+ qemu_add_drive_opts(&qemu_common_drive_opts);
|
||||
+ qemu_add_drive_opts(&qemu_drive_opts);
|
||||
qemu_add_opts(&qemu_chardev_opts);
|
||||
qemu_add_opts(&qemu_device_opts);
|
||||
qemu_add_opts(&qemu_netdev_opts);
|
28
0105-seccomp-fine-tuning-whitelist-by-adding-times.patch
Normal file
28
0105-seccomp-fine-tuning-whitelist-by-adding-times.patch
Normal file
@ -0,0 +1,28 @@
|
||||
From df8a1ce561045d160793b3ef703be0383435e7f4 Mon Sep 17 00:00:00 2001
|
||||
From: Eduardo Otubo <otubo@linux.vnet.ibm.com>
|
||||
Date: Tue, 24 Sep 2013 14:50:44 -0300
|
||||
Subject: [PATCH] seccomp: fine tuning whitelist by adding times()
|
||||
|
||||
This was causing Qemu process to hang when using -sandbox on as
|
||||
discribed on RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1004175
|
||||
|
||||
Signed-off-by: Eduardo Otubo <otubo@linux.vnet.ibm.com>
|
||||
Tested-by: Paul Moore <pmoore@redhat.com>
|
||||
Acked-by: Paul Moore <pmoore@redhat.com>
|
||||
(cherry picked from commit c236f4519c9838801798f3705c17dce9ab9e3b9d)
|
||||
---
|
||||
qemu-seccomp.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/qemu-seccomp.c b/qemu-seccomp.c
|
||||
index fb3cbfd..cf07869 100644
|
||||
--- a/qemu-seccomp.c
|
||||
+++ b/qemu-seccomp.c
|
||||
@@ -90,6 +90,7 @@ static const struct QemuSeccompSyscall seccomp_whitelist[] = {
|
||||
{ SCMP_SYS(getuid), 245 },
|
||||
{ SCMP_SYS(geteuid), 245 },
|
||||
{ SCMP_SYS(timer_create), 245 },
|
||||
+ { SCMP_SYS(times), 245 },
|
||||
{ SCMP_SYS(exit), 245 },
|
||||
{ SCMP_SYS(clock_gettime), 245 },
|
||||
{ SCMP_SYS(time), 245 },
|
33
0106-spice-flip-streaming-video-mode-to-off-by-default.patch
Normal file
33
0106-spice-flip-streaming-video-mode-to-off-by-default.patch
Normal file
@ -0,0 +1,33 @@
|
||||
From dd401ac8556becaea503205b32e3fc117559d960 Mon Sep 17 00:00:00 2001
|
||||
From: Gerd Hoffmann <kraxel@redhat.com>
|
||||
Date: Mon, 2 Dec 2013 11:17:04 +0100
|
||||
Subject: [PATCH] spice: flip streaming video mode to off by default
|
||||
|
||||
Video streaming detection heuristics in spice-server have problems
|
||||
keeping modern desktop animations (as done by gnome shell) and real
|
||||
video playback apart. This leads to jpeg compression artefacts on
|
||||
your desktop, due to spice using mjpeg to send what it thinks is
|
||||
a video stream.
|
||||
|
||||
Turn off video detection by default to avoid these artifacts.
|
||||
|
||||
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
|
||||
Reviewed-by: Alon Levy <alevy@redhat.com>
|
||||
(cherry picked from commit f1d3e586f069e17f83b669842bc02d60d509daca)
|
||||
---
|
||||
ui/spice-core.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/ui/spice-core.c b/ui/spice-core.c
|
||||
index bd7a248..3960fa0 100644
|
||||
--- a/ui/spice-core.c
|
||||
+++ b/ui/spice-core.c
|
||||
@@ -778,6 +778,8 @@ void qemu_spice_init(void)
|
||||
if (str) {
|
||||
int streaming_video = parse_stream_video(str);
|
||||
spice_server_set_streaming_video(spice_server, streaming_video);
|
||||
+ } else {
|
||||
+ spice_server_set_streaming_video(spice_server, SPICE_STREAM_VIDEO_OFF);
|
||||
}
|
||||
|
||||
spice_server_set_agent_mouse
|
@ -0,0 +1,59 @@
|
||||
From d6f315b934c7b0311899636a1d90f01e94ebcaeb Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Bonzini <pbonzini@redhat.com>
|
||||
Date: Thu, 28 Nov 2013 11:01:13 +0100
|
||||
Subject: [PATCH] scsi-bus: fix transfer length and direction for VERIFY
|
||||
command
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The amount of bytes to transfer depends on the BYTCHK field.
|
||||
If any data is transferred, it is sent to the device.
|
||||
|
||||
Cc: qemu-stable@nongnu.org
|
||||
Tested-by: Hervé Poussineau <hpoussin@reactos.org>
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
(cherry picked from commit d12ad44cc4cc9142179e64295608611f118b8ad8)
|
||||
---
|
||||
hw/scsi/scsi-bus.c | 14 +++++++++++++-
|
||||
1 file changed, 13 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c
|
||||
index d352da7..e2fcd60 100644
|
||||
--- a/hw/scsi/scsi-bus.c
|
||||
+++ b/hw/scsi/scsi-bus.c
|
||||
@@ -886,7 +886,6 @@ static int scsi_req_length(SCSICommand *cmd, SCSIDevice *dev, uint8_t *buf)
|
||||
case RELEASE:
|
||||
case ERASE:
|
||||
case ALLOW_MEDIUM_REMOVAL:
|
||||
- case VERIFY_10:
|
||||
case SEEK_10:
|
||||
case SYNCHRONIZE_CACHE:
|
||||
case SYNCHRONIZE_CACHE_16:
|
||||
@@ -903,6 +902,16 @@ static int scsi_req_length(SCSICommand *cmd, SCSIDevice *dev, uint8_t *buf)
|
||||
case ALLOW_OVERWRITE:
|
||||
cmd->xfer = 0;
|
||||
break;
|
||||
+ case VERIFY_10:
|
||||
+ case VERIFY_12:
|
||||
+ case VERIFY_16:
|
||||
+ if ((buf[1] & 2) == 0) {
|
||||
+ cmd->xfer = 0;
|
||||
+ } else if ((buf[1] & 4) == 1) {
|
||||
+ cmd->xfer = 1;
|
||||
+ }
|
||||
+ cmd->xfer *= dev->blocksize;
|
||||
+ break;
|
||||
case MODE_SENSE:
|
||||
break;
|
||||
case WRITE_SAME_10:
|
||||
@@ -1100,6 +1109,9 @@ static void scsi_cmd_xfer_mode(SCSICommand *cmd)
|
||||
case WRITE_VERIFY_12:
|
||||
case WRITE_16:
|
||||
case WRITE_VERIFY_16:
|
||||
+ case VERIFY_10:
|
||||
+ case VERIFY_12:
|
||||
+ case VERIFY_16:
|
||||
case COPY:
|
||||
case COPY_VERIFY:
|
||||
case COMPARE:
|
90
0108-scsi-disk-fix-VERIFY-emulation.patch
Normal file
90
0108-scsi-disk-fix-VERIFY-emulation.patch
Normal file
@ -0,0 +1,90 @@
|
||||
From ae768bf8d6f15a3cce8edf4602d86352beab506a Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Bonzini <pbonzini@redhat.com>
|
||||
Date: Thu, 28 Nov 2013 11:18:56 +0100
|
||||
Subject: [PATCH] scsi-disk: fix VERIFY emulation
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
VERIFY emulation was completely botched (and remained botched through
|
||||
all the refactorings). The command must be emulated both in check-medium
|
||||
mode (BYTCHK=00, which we implement by doing nothing) and in check-bytes
|
||||
mode (which we do not implement yet). Unlike WRITE AND VERIFY (which we
|
||||
treat simply as WRITE with FUA bit set), VERIFY cannot be handled like
|
||||
READ. In fact the device is _receiving_ data for VERIFY, not _sending_
|
||||
it like READ.
|
||||
|
||||
Cc: qemu-stable@nongnu.org
|
||||
Tested-by: Hervé Poussineau <hpoussin@reactos.org>
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
(cherry picked from commit d97e7730816094a71cd1f19a56d7a73f77cdbf96)
|
||||
|
||||
Conflicts:
|
||||
hw/scsi/scsi-disk.c
|
||||
---
|
||||
hw/scsi/scsi-disk.c | 26 +++++++++++++++++++-------
|
||||
1 file changed, 19 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
|
||||
index 74e6a14..1fd1c26 100644
|
||||
--- a/hw/scsi/scsi-disk.c
|
||||
+++ b/hw/scsi/scsi-disk.c
|
||||
@@ -1597,6 +1597,14 @@ static void scsi_disk_emulate_write_data(SCSIRequest *req)
|
||||
scsi_disk_emulate_unmap(r, r->iov.iov_base);
|
||||
break;
|
||||
|
||||
+ case VERIFY_10:
|
||||
+ case VERIFY_12:
|
||||
+ case VERIFY_16:
|
||||
+ if (r->req.status == -1) {
|
||||
+ scsi_check_condition(r, SENSE_CODE(INVALID_FIELD));
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
default:
|
||||
abort();
|
||||
}
|
||||
@@ -1837,6 +1845,14 @@ static int32_t scsi_disk_emulate_command(SCSIRequest *req, uint8_t *buf)
|
||||
case UNMAP:
|
||||
DPRINTF("Unmap (len %lu)\n", (long)r->req.cmd.xfer);
|
||||
break;
|
||||
+ case VERIFY_10:
|
||||
+ case VERIFY_12:
|
||||
+ case VERIFY_16:
|
||||
+ DPRINTF("Verify (bytchk %lu)\n", (r->req.buf[1] >> 1) & 3);
|
||||
+ if (req->cmd.buf[1] & 6) {
|
||||
+ goto illegal_request;
|
||||
+ }
|
||||
+ break;
|
||||
case WRITE_SAME_10:
|
||||
case WRITE_SAME_16:
|
||||
nb_sectors = scsi_data_cdb_length(r->req.cmd.buf);
|
||||
@@ -1936,10 +1952,6 @@ static int32_t scsi_disk_dma_command(SCSIRequest *req, uint8_t *buf)
|
||||
scsi_check_condition(r, SENSE_CODE(WRITE_PROTECTED));
|
||||
return 0;
|
||||
}
|
||||
- /* fallthrough */
|
||||
- case VERIFY_10:
|
||||
- case VERIFY_12:
|
||||
- case VERIFY_16:
|
||||
DPRINTF("Write %s(sector %" PRId64 ", count %u)\n",
|
||||
(command & 0xe) == 0xe ? "And Verify " : "",
|
||||
r->req.cmd.lba, len);
|
||||
@@ -2207,14 +2219,14 @@ static const SCSIReqOps *const scsi_disk_reqops_dispatch[256] = {
|
||||
[UNMAP] = &scsi_disk_emulate_reqops,
|
||||
[WRITE_SAME_10] = &scsi_disk_emulate_reqops,
|
||||
[WRITE_SAME_16] = &scsi_disk_emulate_reqops,
|
||||
+ [VERIFY_10] = &scsi_disk_emulate_reqops,
|
||||
+ [VERIFY_12] = &scsi_disk_emulate_reqops,
|
||||
+ [VERIFY_16] = &scsi_disk_emulate_reqops,
|
||||
|
||||
[READ_6] = &scsi_disk_dma_reqops,
|
||||
[READ_10] = &scsi_disk_dma_reqops,
|
||||
[READ_12] = &scsi_disk_dma_reqops,
|
||||
[READ_16] = &scsi_disk_dma_reqops,
|
||||
- [VERIFY_10] = &scsi_disk_dma_reqops,
|
||||
- [VERIFY_12] = &scsi_disk_dma_reqops,
|
||||
- [VERIFY_16] = &scsi_disk_dma_reqops,
|
||||
[WRITE_6] = &scsi_disk_dma_reqops,
|
||||
[WRITE_10] = &scsi_disk_dma_reqops,
|
||||
[WRITE_12] = &scsi_disk_dma_reqops,
|
@ -0,0 +1,47 @@
|
||||
From 4c99df0e305aeb93405575daef6dc79de054f1aa Mon Sep 17 00:00:00 2001
|
||||
From: Peter Lieven <pl@kamp.de>
|
||||
Date: Thu, 24 Oct 2013 09:21:29 +0200
|
||||
Subject: [PATCH] migration: drop MADVISE_DONT_NEED for incoming zero pages
|
||||
|
||||
The madvise for zeroed out pages was introduced when every transferred
|
||||
zero page was memset to zero and thus allocated. Since commit
|
||||
211ea740 we check for zeroness of a target page before we memset
|
||||
it to zero. Additionally we memmap target memory so it is essentially
|
||||
zero initialized (except for e.g. option roms and bios which are loaded
|
||||
into target memory although they shouldn't).
|
||||
|
||||
It was reported recently that this madvise causes a performance degradation
|
||||
in some situations. As the madvise should only be called rarely and if it's called
|
||||
it is likely on a busy page (it was non-zero and changed to zero during migration)
|
||||
drop it completely.
|
||||
|
||||
Reported-By: Zhang Haoyu <haoyu.zhang@huawei.com>
|
||||
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
Signed-off-by: Peter Lieven <pl@kamp.de>
|
||||
Signed-off-by: Juan Quintela <quintela@redhat.com>
|
||||
(cherry picked from commit fc1c4a5d32e15a4c40c47945da85ef9c1e0c1b54)
|
||||
|
||||
Conflicts:
|
||||
arch_init.c
|
||||
---
|
||||
arch_init.c | 7 -------
|
||||
1 file changed, 7 deletions(-)
|
||||
|
||||
diff --git a/arch_init.c b/arch_init.c
|
||||
index 68a7ab7..23151b3 100644
|
||||
--- a/arch_init.c
|
||||
+++ b/arch_init.c
|
||||
@@ -845,13 +845,6 @@ void ram_handle_compressed(void *host, uint8_t ch, uint64_t size)
|
||||
{
|
||||
if (ch != 0 || !is_zero_page(host)) {
|
||||
memset(host, ch, size);
|
||||
-#ifndef _WIN32
|
||||
- if (ch == 0 &&
|
||||
- (!kvm_enabled() || kvm_has_sync_mmu()) &&
|
||||
- getpagesize() <= TARGET_PAGE_SIZE) {
|
||||
- qemu_madvise(host, TARGET_PAGE_SIZE, QEMU_MADV_DONTNEED);
|
||||
- }
|
||||
-#endif
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,30 @@
|
||||
From 61ec7dc46f8acad7ea6be4ba1993048f7404b0e3 Mon Sep 17 00:00:00 2001
|
||||
From: Christophe Fergeau <cfergeau@redhat.com>
|
||||
Date: Thu, 30 Jan 2014 14:56:49 +0100
|
||||
Subject: [PATCH] libcacard: Don't link with all libraries QEMU links to
|
||||
|
||||
As described in https://bugzilla.redhat.com/show_bug.cgi?id=987441 ,
|
||||
libcacard currently links to all the libraries QEMU is linking to,
|
||||
including glusterfs libraries, libiscsi, ... libcacard does not need all of
|
||||
these. This patch ensures it's only linked with the libraries it needs.
|
||||
|
||||
Signed-off-by: Christophe Fergeau <cfergeau@redhat.com>
|
||||
Signed-off-by: Alon Levy <alevy@redhat.com>
|
||||
(cherry picked from commit 73db416ae7941f8ffeabc060ec87402b97314b6d)
|
||||
---
|
||||
libcacard/Makefile | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/libcacard/Makefile b/libcacard/Makefile
|
||||
index 47827a0..9fa297c 100644
|
||||
--- a/libcacard/Makefile
|
||||
+++ b/libcacard/Makefile
|
||||
@@ -24,7 +24,7 @@ vscclient$(EXESUF): libcacard/vscclient.o libcacard.la
|
||||
|
||||
libcacard.la: LDFLAGS += -rpath $(libdir) -no-undefined \
|
||||
-export-syms $(SRC_PATH)/libcacard/libcacard.syms
|
||||
-libcacard.la: LIBS += $(libcacard_libs)
|
||||
+libcacard.la: LIBS = $(libcacard_libs)
|
||||
libcacard.la: $(libcacard-lobj-y)
|
||||
$(call LINK,$^)
|
||||
|
33
0111-gtk-Fix-mouse-warping-with-gtk3.patch
Normal file
33
0111-gtk-Fix-mouse-warping-with-gtk3.patch
Normal file
@ -0,0 +1,33 @@
|
||||
From 8273919dfbb42ab63c683ec73264f94178cfe82e Mon Sep 17 00:00:00 2001
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Thu, 13 Mar 2014 15:30:23 -0400
|
||||
Subject: [PATCH] gtk: Fix mouse warping with gtk3
|
||||
|
||||
We were using the wrong coordinates, this fixes things to match the
|
||||
original gtk2 implementation.
|
||||
|
||||
You can see this error in action by using -vga qxl, however even after this
|
||||
patch the mouse warps in small increments up and to the left, -7x and -3y
|
||||
pixels at a time, until the pointer is warped off the widget. I think it's
|
||||
a qxl bug, but the next patch covers it up.
|
||||
|
||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
||||
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
|
||||
(cherry picked from commit 298526fe92d0b35ea343f8ddcc3a1d54cb422494)
|
||||
---
|
||||
ui/gtk.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/ui/gtk.c b/ui/gtk.c
|
||||
index c38146f..6c9d90a 100644
|
||||
--- a/ui/gtk.c
|
||||
+++ b/ui/gtk.c
|
||||
@@ -355,7 +355,7 @@ static void gd_mouse_set(DisplayChangeListener *dcl,
|
||||
x, y, &x_root, &y_root);
|
||||
gdk_device_warp(gdk_device_manager_get_client_pointer(mgr),
|
||||
gtk_widget_get_screen(s->drawing_area),
|
||||
- x, y);
|
||||
+ x_root, y_root);
|
||||
}
|
||||
#else
|
||||
static void gd_mouse_set(DisplayChangeListener *dcl,
|
42
0112-gtk-Don-t-warp-absolute-pointer.patch
Normal file
42
0112-gtk-Don-t-warp-absolute-pointer.patch
Normal file
@ -0,0 +1,42 @@
|
||||
From 256b1b8cb133a1f26587e068fb403f067aeeaa59 Mon Sep 17 00:00:00 2001
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Thu, 13 Mar 2014 15:30:24 -0400
|
||||
Subject: [PATCH] gtk: Don't warp absolute pointer
|
||||
|
||||
This matches the behavior of SDL, and makes the mouse usable when
|
||||
using -display gtk -vga qxl
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1051724
|
||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
||||
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
|
||||
(cherry picked from commit 2bda66028b4962c36d4eabe2995edab12df93691)
|
||||
---
|
||||
ui/gtk.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/ui/gtk.c b/ui/gtk.c
|
||||
index 6c9d90a..6ce9694 100644
|
||||
--- a/ui/gtk.c
|
||||
+++ b/ui/gtk.c
|
||||
@@ -349,6 +349,10 @@ static void gd_mouse_set(DisplayChangeListener *dcl,
|
||||
GdkDeviceManager *mgr;
|
||||
gint x_root, y_root;
|
||||
|
||||
+ if (kbd_mouse_is_absolute()) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
dpy = gtk_widget_get_display(s->drawing_area);
|
||||
mgr = gdk_display_get_device_manager(dpy);
|
||||
gdk_window_get_root_coords(gtk_widget_get_window(s->drawing_area),
|
||||
@@ -364,6 +368,10 @@ static void gd_mouse_set(DisplayChangeListener *dcl,
|
||||
GtkDisplayState *s = container_of(dcl, GtkDisplayState, dcl);
|
||||
gint x_root, y_root;
|
||||
|
||||
+ if (kbd_mouse_is_absolute()) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
gdk_window_get_root_coords(gtk_widget_get_window(s->drawing_area),
|
||||
x, y, &x_root, &y_root);
|
||||
gdk_display_warp_pointer(gtk_widget_get_display(s->drawing_area),
|
@ -0,0 +1,37 @@
|
||||
From 94f0d20c1a3fa880fa4736c86bafd50c46e1cc57 Mon Sep 17 00:00:00 2001
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Wed, 19 Mar 2014 14:57:27 -0400
|
||||
Subject: [PATCH] Change gtk quit accelerator to ctrl+shift+q (bz 1062393)
|
||||
|
||||
Similar patches queued for 2.1
|
||||
---
|
||||
ui/gtk.c | 7 +++----
|
||||
1 file changed, 3 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/ui/gtk.c b/ui/gtk.c
|
||||
index 6ce9694..8bc667d 100644
|
||||
--- a/ui/gtk.c
|
||||
+++ b/ui/gtk.c
|
||||
@@ -1310,7 +1310,6 @@ static GtkWidget *gd_create_menu_machine(GtkDisplayState *s, GtkAccelGroup *acce
|
||||
{
|
||||
GtkWidget *machine_menu;
|
||||
GtkWidget *separator;
|
||||
- GtkStockItem item;
|
||||
|
||||
machine_menu = gtk_menu_new();
|
||||
gtk_menu_set_accel_group(GTK_MENU(machine_menu), accel_group);
|
||||
@@ -1330,11 +1329,11 @@ static GtkWidget *gd_create_menu_machine(GtkDisplayState *s, GtkAccelGroup *acce
|
||||
separator = gtk_separator_menu_item_new();
|
||||
gtk_menu_shell_append(GTK_MENU_SHELL(machine_menu), separator);
|
||||
|
||||
- s->quit_item = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, NULL);
|
||||
- gtk_stock_lookup(GTK_STOCK_QUIT, &item);
|
||||
+ s->quit_item = gtk_menu_item_new_with_mnemonic(_("_Quit"));
|
||||
gtk_menu_item_set_accel_path(GTK_MENU_ITEM(s->quit_item),
|
||||
"<QEMU>/Machine/Quit");
|
||||
- gtk_accel_map_add_entry("<QEMU>/Machine/Quit", item.keyval, item.modifier);
|
||||
+ gtk_accel_map_add_entry("<QEMU>/Machine/Quit",
|
||||
+ GDK_KEY_q, HOTKEY_MODIFIERS);
|
||||
gtk_menu_shell_append(GTK_MENU_SHELL(machine_menu), s->quit_item);
|
||||
|
||||
return machine_menu;
|
@ -0,0 +1,31 @@
|
||||
From fcaec0080923656c3607bd4d5eccc5d05c468dda Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Bonzini <pbonzini@redhat.com>
|
||||
Date: Wed, 15 Jan 2014 10:35:36 +0100
|
||||
Subject: [PATCH] scsi: Assign cancel_io vector for scsi_disk_emulate_ops
|
||||
|
||||
Some emulated disk operations (MODE SELECT, UNMAP, WRITE SAME)
|
||||
can trigger asynchronous I/Os. Provide the cancel_io callback
|
||||
to ensure that AIOCBs are properly cleaned up.
|
||||
|
||||
Signed-off-by: Eric Farman <farman@linux.vnet.ibm.com>
|
||||
Cc: qemu-stable@nongnu.org
|
||||
[Tweak commit message. - Paolo]
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
|
||||
(cherry picked from commit 33325a53f15ab5370e1917b2a11cadffc77c5a52)
|
||||
---
|
||||
hw/scsi/scsi-disk.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
|
||||
index 1fd1c26..ade5d4a 100644
|
||||
--- a/hw/scsi/scsi-disk.c
|
||||
+++ b/hw/scsi/scsi-disk.c
|
||||
@@ -2181,6 +2181,7 @@ static const SCSIReqOps scsi_disk_emulate_reqops = {
|
||||
.send_command = scsi_disk_emulate_command,
|
||||
.read_data = scsi_disk_emulate_read_data,
|
||||
.write_data = scsi_disk_emulate_write_data,
|
||||
+ .cancel_io = scsi_cancel_io,
|
||||
.get_buf = scsi_get_buf,
|
||||
};
|
||||
|
39
0115-virtio-scsi-Cleanup-of-I-Os-that-never-started.patch
Normal file
39
0115-virtio-scsi-Cleanup-of-I-Os-that-never-started.patch
Normal file
@ -0,0 +1,39 @@
|
||||
From aa1e5b8649b8055722bf987d76322a1a1b46c407 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Farman <farman@linux.vnet.ibm.com>
|
||||
Date: Tue, 14 Jan 2014 14:16:25 -0500
|
||||
Subject: [PATCH] virtio-scsi: Cleanup of I/Os that never started
|
||||
|
||||
There is still a small window that occurs when a cancel I/O affects
|
||||
an asynchronous I/O operation that hasn't started. In other words,
|
||||
when the residual data length equals the expected data length.
|
||||
|
||||
Today, the routine virtio_scsi_command_complete fails because the
|
||||
VirtIOSCSIReq pointer (from the hba_private field in SCSIRequest)
|
||||
was cleared earlier when virtio_scsi_complete_req was called by
|
||||
the virtio_scsi_request_cancelled routine. As a result, the
|
||||
virtio_scsi_command_complete routine needs to simply return when
|
||||
it is processing a SCSIRequest block that was marked canceled.
|
||||
|
||||
Signed-off-by: Eric Farman <farman@linux.vnet.ibm.com>
|
||||
Cc: qemu-stable@nongnu.org
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
(cherry picked from commit e9c0f0f58ad0a41c3c4b19e1911cfe095afc09ca)
|
||||
---
|
||||
hw/scsi/virtio-scsi.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c
|
||||
index 5545993..110827c 100644
|
||||
--- a/hw/scsi/virtio-scsi.c
|
||||
+++ b/hw/scsi/virtio-scsi.c
|
||||
@@ -306,6 +306,10 @@ static void virtio_scsi_command_complete(SCSIRequest *r, uint32_t status,
|
||||
VirtIOSCSIReq *req = r->hba_private;
|
||||
uint32_t sense_len;
|
||||
|
||||
+ if (r->io_canceled) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
req->resp.cmd->response = VIRTIO_SCSI_S_OK;
|
||||
req->resp.cmd->status = status;
|
||||
if (req->resp.cmd->status == GOOD) {
|
30
0116-virtio-scsi-Prevent-assertion-on-missed-events.patch
Normal file
30
0116-virtio-scsi-Prevent-assertion-on-missed-events.patch
Normal file
@ -0,0 +1,30 @@
|
||||
From 167ceff41489ca932ae7e75b54bb62c119341b05 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Farman <farman@linux.vnet.ibm.com>
|
||||
Date: Tue, 14 Jan 2014 14:16:26 -0500
|
||||
Subject: [PATCH] virtio-scsi: Prevent assertion on missed events
|
||||
|
||||
In some cases, an unplug can cause events to be dropped, which
|
||||
leads to an assertion failure when preparing to notify the guest
|
||||
kernel.
|
||||
|
||||
Signed-off-by: Eric Farman <farman@linux.vnet.ibm.com>
|
||||
Cc: qemu-stable@nongnu.org
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
(cherry picked from commit 49fb65c7f985baa56d2964e0a85c1f098e3e2a9d)
|
||||
---
|
||||
hw/scsi/virtio-scsi.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c
|
||||
index 110827c..15e40d9 100644
|
||||
--- a/hw/scsi/virtio-scsi.c
|
||||
+++ b/hw/scsi/virtio-scsi.c
|
||||
@@ -520,7 +520,7 @@ static void virtio_scsi_push_event(VirtIOSCSI *s, SCSIDevice *dev,
|
||||
evt->event = event;
|
||||
evt->reason = reason;
|
||||
if (!dev) {
|
||||
- assert(event == VIRTIO_SCSI_T_NO_EVENT);
|
||||
+ assert(event == VIRTIO_SCSI_T_EVENTS_MISSED);
|
||||
} else {
|
||||
evt->lun[0] = 1;
|
||||
evt->lun[1] = dev->id;
|
Loading…
Reference in New Issue
Block a user