Fix -vga qxl with -display vnc (bz #948717)
Fix USB crash when installing reactos (bz #1005495) Don't ship x86 kvm wrapper on arm (bz #1005581)
This commit is contained in:
parent
52cf04624c
commit
840b28a1f8
65
0007-qxl-fix-local-renderer.patch
Normal file
65
0007-qxl-fix-local-renderer.patch
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
From 909d4a71878f3568b6c636a07d9f4f2c97a5de12 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Gerd Hoffmann <kraxel@redhat.com>
|
||||||
|
Date: Thu, 5 Sep 2013 21:57:19 +0200
|
||||||
|
Subject: [PATCH] qxl: fix local renderer
|
||||||
|
|
||||||
|
The local spice renderer assumes the primary surface is located at the
|
||||||
|
start of the "ram" bar. This used to be a requirement in qxl hardware
|
||||||
|
revision 1. In revision 2+ this is relaxed. Nevertheless guest drivers
|
||||||
|
continued to use the traditional location, for historical and backward
|
||||||
|
compatibility reasons. The qxl kms driver doesn't though as it depends
|
||||||
|
on qxl revision 4+ anyway.
|
||||||
|
|
||||||
|
Result is that local rendering is hosed for recent linux guests, you'll
|
||||||
|
get pixel garbage with non-spice ui (gtk, sdl, vnc) and when doing
|
||||||
|
screendumps. Fix that by doing a proper mapping of the guest-specified
|
||||||
|
memory location.
|
||||||
|
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=948717
|
||||||
|
|
||||||
|
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
|
||||||
|
(cherry picked from commit c58c7b959b93b864a27fd6b3646ee1465ab8832b)
|
||||||
|
---
|
||||||
|
hw/display/qxl-render.c | 15 ++++++++++-----
|
||||||
|
1 file changed, 10 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/hw/display/qxl-render.c b/hw/display/qxl-render.c
|
||||||
|
index 269b1a7..d34b0c4 100644
|
||||||
|
--- a/hw/display/qxl-render.c
|
||||||
|
+++ b/hw/display/qxl-render.c
|
||||||
|
@@ -31,10 +31,6 @@ static void qxl_blit(PCIQXLDevice *qxl, QXLRect *rect)
|
||||||
|
if (is_buffer_shared(surface)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
- if (!qxl->guest_primary.data) {
|
||||||
|
- trace_qxl_render_blit_guest_primary_initialized();
|
||||||
|
- qxl->guest_primary.data = memory_region_get_ram_ptr(&qxl->vga.vram);
|
||||||
|
- }
|
||||||
|
trace_qxl_render_blit(qxl->guest_primary.qxl_stride,
|
||||||
|
rect->left, rect->right, rect->top, rect->bottom);
|
||||||
|
src = qxl->guest_primary.data;
|
||||||
|
@@ -104,7 +100,12 @@ static void qxl_render_update_area_unlocked(PCIQXLDevice *qxl)
|
||||||
|
|
||||||
|
if (qxl->guest_primary.resized) {
|
||||||
|
qxl->guest_primary.resized = 0;
|
||||||
|
- qxl->guest_primary.data = memory_region_get_ram_ptr(&qxl->vga.vram);
|
||||||
|
+ qxl->guest_primary.data = qxl_phys2virt(qxl,
|
||||||
|
+ qxl->guest_primary.surface.mem,
|
||||||
|
+ MEMSLOT_GROUP_GUEST);
|
||||||
|
+ if (!qxl->guest_primary.data) {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
qxl_set_rect_to_surface(qxl, &qxl->dirty[0]);
|
||||||
|
qxl->num_dirty_rects = 1;
|
||||||
|
trace_qxl_render_guest_primary_resized(
|
||||||
|
@@ -128,6 +129,10 @@ static void qxl_render_update_area_unlocked(PCIQXLDevice *qxl)
|
||||||
|
}
|
||||||
|
dpy_gfx_replace_surface(vga->con, surface);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ if (!qxl->guest_primary.data) {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
for (i = 0; i < qxl->num_dirty_rects; i++) {
|
||||||
|
if (qemu_spice_rect_is_empty(qxl->dirty+i)) {
|
||||||
|
break;
|
65
0008-ehci-save-device-pointer-in-EHCIState.patch
Normal file
65
0008-ehci-save-device-pointer-in-EHCIState.patch
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
From f0679fb95d2c1b9597b83184309e70cc3c3e3b1d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Gerd Hoffmann <kraxel@redhat.com>
|
||||||
|
Date: Mon, 9 Sep 2013 10:18:17 +0200
|
||||||
|
Subject: [PATCH] ehci: save device pointer in EHCIState
|
||||||
|
|
||||||
|
We'll need a pointer to the actual pci/sysbus device,
|
||||||
|
stick a pointer to it into the EHCIState struct.
|
||||||
|
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=1005495
|
||||||
|
|
||||||
|
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
|
||||||
|
(cherry picked from commit adbecc89731cf3e0ae656d50ea9fa58c589c4bdc)
|
||||||
|
---
|
||||||
|
hw/usb/hcd-ehci.c | 7 +++----
|
||||||
|
hw/usb/hcd-ehci.h | 1 +
|
||||||
|
2 files changed, 4 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c
|
||||||
|
index 010a0d0..e9fb20c 100644
|
||||||
|
--- a/hw/usb/hcd-ehci.c
|
||||||
|
+++ b/hw/usb/hcd-ehci.c
|
||||||
|
@@ -1241,13 +1241,11 @@ static int ehci_init_transfer(EHCIPacket *p)
|
||||||
|
{
|
||||||
|
uint32_t cpage, offset, bytes, plen;
|
||||||
|
dma_addr_t page;
|
||||||
|
- USBBus *bus = &p->queue->ehci->bus;
|
||||||
|
- BusState *qbus = BUS(bus);
|
||||||
|
|
||||||
|
cpage = get_field(p->qtd.token, QTD_TOKEN_CPAGE);
|
||||||
|
bytes = get_field(p->qtd.token, QTD_TOKEN_TBYTES);
|
||||||
|
offset = p->qtd.bufptr[0] & ~QTD_BUFPTR_MASK;
|
||||||
|
- qemu_sglist_init(&p->sgl, qbus->parent, 5, p->queue->ehci->as);
|
||||||
|
+ qemu_sglist_init(&p->sgl, p->queue->ehci->device, 5, p->queue->ehci->as);
|
||||||
|
|
||||||
|
while (bytes > 0) {
|
||||||
|
if (cpage > 4) {
|
||||||
|
@@ -1486,7 +1484,7 @@ static int ehci_process_itd(EHCIState *ehci,
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
- qemu_sglist_init(&ehci->isgl, DEVICE(ehci), 2, ehci->as);
|
||||||
|
+ qemu_sglist_init(&ehci->isgl, ehci->device, 2, ehci->as);
|
||||||
|
if (off + len > 4096) {
|
||||||
|
/* transfer crosses page border */
|
||||||
|
uint32_t len2 = off + len - 4096;
|
||||||
|
@@ -2529,6 +2527,7 @@ void usb_ehci_realize(EHCIState *s, DeviceState *dev, Error **errp)
|
||||||
|
|
||||||
|
s->frame_timer = qemu_new_timer_ns(vm_clock, ehci_frame_timer, s);
|
||||||
|
s->async_bh = qemu_bh_new(ehci_frame_timer, s);
|
||||||
|
+ s->device = dev;
|
||||||
|
|
||||||
|
qemu_register_reset(ehci_reset, s);
|
||||||
|
qemu_add_vm_change_state_handler(usb_ehci_vm_state_change, s);
|
||||||
|
diff --git a/hw/usb/hcd-ehci.h b/hw/usb/hcd-ehci.h
|
||||||
|
index 15a28e8..065c9fa 100644
|
||||||
|
--- a/hw/usb/hcd-ehci.h
|
||||||
|
+++ b/hw/usb/hcd-ehci.h
|
||||||
|
@@ -255,6 +255,7 @@ typedef QTAILQ_HEAD(EHCIQueueHead, EHCIQueue) EHCIQueueHead;
|
||||||
|
|
||||||
|
struct EHCIState {
|
||||||
|
USBBus bus;
|
||||||
|
+ DeviceState *device;
|
||||||
|
qemu_irq irq;
|
||||||
|
MemoryRegion mem;
|
||||||
|
AddressSpace *as;
|
20
qemu.spec
20
qemu.spec
@ -104,7 +104,6 @@
|
|||||||
%global system_arm kvm
|
%global system_arm kvm
|
||||||
%global kvm_package system-arm
|
%global kvm_package system-arm
|
||||||
%global kvm_target arm
|
%global kvm_target arm
|
||||||
%global need_qemu_kvm 1
|
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%if %{with kvmonly}
|
%if %{with kvmonly}
|
||||||
@ -140,7 +139,7 @@
|
|||||||
Summary: QEMU is a FAST! processor emulator
|
Summary: QEMU is a FAST! processor emulator
|
||||||
Name: qemu
|
Name: qemu
|
||||||
Version: 1.6.0
|
Version: 1.6.0
|
||||||
Release: 7%{?dist}
|
Release: 8%{?dist}
|
||||||
Epoch: 2
|
Epoch: 2
|
||||||
License: GPLv2+ and LGPLv2+ and BSD
|
License: GPLv2+ and LGPLv2+ and BSD
|
||||||
Group: Development/Tools
|
Group: Development/Tools
|
||||||
@ -193,6 +192,12 @@ Patch0003: 0003-isapc-disable-kvmvapic.patch
|
|||||||
Patch0004: 0004-pci-do-not-export-pci_bus_reset.patch
|
Patch0004: 0004-pci-do-not-export-pci_bus_reset.patch
|
||||||
Patch0005: 0005-qdev-allow-both-pre-and-post-order-vists-in-qdev-wal.patch
|
Patch0005: 0005-qdev-allow-both-pre-and-post-order-vists-in-qdev-wal.patch
|
||||||
Patch0006: 0006-qdev-switch-reset-to-post-order.patch
|
Patch0006: 0006-qdev-switch-reset-to-post-order.patch
|
||||||
|
# Fix -vga qxl with -display vnc (bz #948717)
|
||||||
|
# Patch posted upstream
|
||||||
|
Patch0007: 0007-qxl-fix-local-renderer.patch
|
||||||
|
# Fix USB crash when installing reactos (bz #1005495)
|
||||||
|
# Patch posted upstream
|
||||||
|
Patch0008: 0008-ehci-save-device-pointer-in-EHCIState.patch
|
||||||
|
|
||||||
BuildRequires: SDL-devel
|
BuildRequires: SDL-devel
|
||||||
BuildRequires: zlib-devel
|
BuildRequires: zlib-devel
|
||||||
@ -717,6 +722,12 @@ CAC emulation development files.
|
|||||||
%patch0004 -p1
|
%patch0004 -p1
|
||||||
%patch0005 -p1
|
%patch0005 -p1
|
||||||
%patch0006 -p1
|
%patch0006 -p1
|
||||||
|
# Fix -vga qxl with -display vnc (bz #948717)
|
||||||
|
# Patch posted upstream
|
||||||
|
%patch0007 -p1
|
||||||
|
# Fix USB crash when installing reactos (bz #1005495)
|
||||||
|
# Patch posted upstream
|
||||||
|
%patch0008 -p1
|
||||||
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
@ -1425,6 +1436,11 @@ getent passwd qemu >/dev/null || \
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Sep 24 2013 Cole Robinson <crobinso@redhat.com> - 2:1.6.0-8
|
||||||
|
- Fix -vga qxl with -display vnc (bz #948717)
|
||||||
|
- Fix USB crash when installing reactos (bz #1005495)
|
||||||
|
- Don't ship x86 kvm wrapper on arm (bz #1005581)
|
||||||
|
|
||||||
* Thu Sep 12 2013 Dan Horák <dan[at]danny.cz> - 2:1.6.0-7
|
* Thu Sep 12 2013 Dan Horák <dan[at]danny.cz> - 2:1.6.0-7
|
||||||
- Enable TCG interpreter for s390 as the native backend supports 64-bit only
|
- Enable TCG interpreter for s390 as the native backend supports 64-bit only
|
||||||
- Don't require RDMA on s390(x)
|
- Don't require RDMA on s390(x)
|
||||||
|
Loading…
Reference in New Issue
Block a user