Fix flickering display with boxes + wayland VM (bz #1266484)
Add ppc64 kvm memlock file (bz #1293024)
This commit is contained in:
parent
fa4cd5da64
commit
8963de0583
|
@ -0,0 +1,74 @@
|
|||
From: Christophe Fergeau <cfergeau@redhat.com>
|
||||
Date: Fri, 14 Oct 2016 14:22:36 +0200
|
||||
Subject: [PATCH] qxl: Only emit QXL_INTERRUPT_CLIENT_MONITORS_CONFIG on config
|
||||
changes
|
||||
|
||||
Currently if the client keeps sending the same monitor config to
|
||||
QEMU/spice-server, QEMU will always raise
|
||||
a QXL_INTERRUPT_CLIENT_MONITORS_CONFIG regardless of whether there was a
|
||||
change or not.
|
||||
Guest-side (with fedora 25), the kernel QXL KMS driver will also forward the
|
||||
event to user-space without checking if there were actual changes.
|
||||
Next in line are gnome-shell/mutter (on a default f25 install), which
|
||||
will try to reconfigure everything without checking if there is anything
|
||||
to do.
|
||||
Where this gets ugly is that when applying the resolution changes,
|
||||
gnome-shell/mutter will call drmModeRmFB, drmModeAddFB, and
|
||||
drmModeSetCrtc, which will cause the primary surface to be destroyed and
|
||||
recreated by the QXL KMS driver. This in turn will cause the client to
|
||||
resend a client monitors config message, which will cause QEMU to reemit
|
||||
an interrupt with an unchanged monitors configuration, ...
|
||||
This causes https://bugzilla.redhat.com/show_bug.cgi?id=1266484
|
||||
|
||||
This commit makes sure that we only emit
|
||||
QXL_INTERRUPT_CLIENT_MONITORS_CONFIG when there are actual configuration
|
||||
changes the guest should act on.
|
||||
---
|
||||
hw/display/qxl.c | 20 +++++++++++++++++++-
|
||||
1 file changed, 19 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/hw/display/qxl.c b/hw/display/qxl.c
|
||||
index 919dc5c..3cc8d38 100644
|
||||
--- a/hw/display/qxl.c
|
||||
+++ b/hw/display/qxl.c
|
||||
@@ -997,6 +997,7 @@ static int interface_client_monitors_config(QXLInstance *sin,
|
||||
QXLRom *rom = memory_region_get_ram_ptr(&qxl->rom_bar);
|
||||
int i;
|
||||
unsigned max_outputs = ARRAY_SIZE(rom->client_monitors_config.heads);
|
||||
+ bool config_changed = false;
|
||||
|
||||
if (qxl->revision < 4) {
|
||||
trace_qxl_client_monitors_config_unsupported_by_device(qxl->id,
|
||||
@@ -1027,6 +1028,21 @@ static int interface_client_monitors_config(QXLInstance *sin,
|
||||
}
|
||||
#endif
|
||||
|
||||
+ if (rom->client_monitors_config.count != MIN(monitors_config->num_of_monitors, max_outputs)) {
|
||||
+ config_changed = true;
|
||||
+ }
|
||||
+ for (i = 0 ; i < rom->client_monitors_config.count ; ++i) {
|
||||
+ VDAgentMonConfig *monitor = &monitors_config->monitors[i];
|
||||
+ QXLURect *rect = &rom->client_monitors_config.heads[i];
|
||||
+ /* monitor->depth ignored */
|
||||
+ if ((rect->left != monitor->x) ||
|
||||
+ (rect->top != monitor->y) ||
|
||||
+ (rect->right != monitor->x + monitor->width) ||
|
||||
+ (rect->bottom != monitor->y + monitor->height)) {
|
||||
+ config_changed = true;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
memset(&rom->client_monitors_config, 0,
|
||||
sizeof(rom->client_monitors_config));
|
||||
rom->client_monitors_config.count = monitors_config->num_of_monitors;
|
||||
@@ -1056,7 +1072,9 @@ static int interface_client_monitors_config(QXLInstance *sin,
|
||||
trace_qxl_interrupt_client_monitors_config(qxl->id,
|
||||
rom->client_monitors_config.count,
|
||||
rom->client_monitors_config.heads);
|
||||
- qxl_send_events(qxl, QXL_INTERRUPT_CLIENT_MONITORS_CONFIG);
|
||||
+ if (config_changed) {
|
||||
+ qxl_send_events(qxl, QXL_INTERRUPT_CLIENT_MONITORS_CONFIG);
|
||||
+ }
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -65,7 +65,7 @@
|
|||
Summary: QEMU is a FAST! processor emulator
|
||||
Name: qemu
|
||||
Version: 2.6.2
|
||||
Release: 2%{?rcrel}%{?dist}
|
||||
Release: 3%{?rcrel}%{?dist}
|
||||
Epoch: 2
|
||||
License: GPLv2+ and LGPLv2+ and BSD
|
||||
Group: Development/Tools
|
||||
|
@ -124,6 +124,8 @@ Patch0010: 0010-net-mcf-limit-buffer-descriptor-count.patch
|
|||
Patch0011: 0011-xhci-limit-the-number-of-link-trbs-we-are-willing-to.patch
|
||||
# CVE-2016-7995: usb: hcd-ehci: memory leak (bz #1382669)
|
||||
Patch0012: 0012-usb-ehci-fix-memory-leak-in-ehci_process_itd.patch
|
||||
# Fix flickering display with boxes + wayland VM (bz #1266484)
|
||||
Patch0013: 0013-qxl-Only-emit-QXL_INTERRUPT_CLIENT_MONITORS_CONFIG-o.patch
|
||||
|
||||
|
||||
# documentation deps
|
||||
|
@ -1586,6 +1588,10 @@ getent passwd qemu >/dev/null || \
|
|||
|
||||
|
||||
%changelog
|
||||
* Wed Oct 19 2016 Cole Robinson <crobinso@redhat.com> - 2:2.6.2-3
|
||||
- Fix flickering display with boxes + wayland VM (bz #1266484)
|
||||
- Add ppc64 kvm memlock file (bz #1293024)
|
||||
|
||||
* Sat Oct 15 2016 Cole Robinson <crobinso@redhat.com> - 2:2.6.2-2
|
||||
- CVE-2016-6351: scsi: esp: OOB write access in esp_do_dma (bz #1360600)
|
||||
- CVE-2016-6833: vmxnet3: use-after-free (bz #1368982)
|
||||
|
|
Loading…
Reference in New Issue