diff options
author | Khem Raj <raj.khem@gmail.com> | 2011-03-16 17:40:36 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2011-03-25 16:38:12 +0000 |
commit | 7c62b36a34f3b1491bf3df6a559bc0a74c74c173 (patch) | |
tree | 486fc3da0426a673b3778495bbe59a6441f007aa /meta/recipes-devtools/qemu/qemu-0.14.0/spice-qxl-locking-fix-for-qemu-kvm.patch | |
parent | fcb1b5a4d76f18d5cc1a0327ce41f6c188da6618 (diff) | |
download | poky-7c62b36a34f3b1491bf3df6a559bc0a74c74c173.tar.gz |
qemu: Upgrade 0.13.0 -> 0.14.0
* ppc-hack patch is dropped.
* Other patches which were direct backports
or has been merged upstream in 0.14.0 are
also dropped
(From OE-Core rev: 97fbdfdbfb15de325fd148bcecc9187d0f778db5)
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-devtools/qemu/qemu-0.14.0/spice-qxl-locking-fix-for-qemu-kvm.patch')
-rw-r--r-- | meta/recipes-devtools/qemu/qemu-0.14.0/spice-qxl-locking-fix-for-qemu-kvm.patch | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/meta/recipes-devtools/qemu/qemu-0.14.0/spice-qxl-locking-fix-for-qemu-kvm.patch b/meta/recipes-devtools/qemu/qemu-0.14.0/spice-qxl-locking-fix-for-qemu-kvm.patch new file mode 100644 index 0000000000..87d5927850 --- /dev/null +++ b/meta/recipes-devtools/qemu/qemu-0.14.0/spice-qxl-locking-fix-for-qemu-kvm.patch | |||
@@ -0,0 +1,150 @@ | |||
1 | Description: spice/qxl: locking fix for qemu-kvm | ||
2 | Author: Gerd Hoffmann <kraxel@redhat.com> | ||
3 | Source: upstream, http://patchwork.ozlabs.org/patch/84704/ | ||
4 | Forwarding: not-needed | ||
5 | |||
6 | Index: qemu-0.14.0/hw/qxl.c | ||
7 | =================================================================== | ||
8 | --- qemu-0.14.0.orig/hw/qxl.c | ||
9 | +++ qemu-0.14.0/hw/qxl.c | ||
10 | @@ -125,6 +125,27 @@ static void qxl_reset_memslots(PCIQXLDev | ||
11 | static void qxl_reset_surfaces(PCIQXLDevice *d); | ||
12 | static void qxl_ring_set_dirty(PCIQXLDevice *qxl); | ||
13 | |||
14 | +/* qemu-kvm locking ... */ | ||
15 | +void qxl_unlock_iothread(SimpleSpiceDisplay *ssd) | ||
16 | +{ | ||
17 | + if (cpu_single_env) { | ||
18 | + assert(ssd->env == NULL); | ||
19 | + ssd->env = cpu_single_env; | ||
20 | + cpu_single_env = NULL; | ||
21 | + } | ||
22 | + qemu_mutex_unlock_iothread(); | ||
23 | +} | ||
24 | + | ||
25 | +void qxl_lock_iothread(SimpleSpiceDisplay *ssd) | ||
26 | +{ | ||
27 | + qemu_mutex_lock_iothread(); | ||
28 | + if (ssd->env) { | ||
29 | + assert(cpu_single_env == NULL); | ||
30 | + cpu_single_env = ssd->env; | ||
31 | + ssd->env = NULL; | ||
32 | + } | ||
33 | +} | ||
34 | + | ||
35 | static inline uint32_t msb_mask(uint32_t val) | ||
36 | { | ||
37 | uint32_t mask; | ||
38 | @@ -662,10 +683,10 @@ static void qxl_hard_reset(PCIQXLDevice | ||
39 | dprint(d, 1, "%s: start%s\n", __FUNCTION__, | ||
40 | loadvm ? " (loadvm)" : ""); | ||
41 | |||
42 | - qemu_mutex_unlock_iothread(); | ||
43 | + qxl_unlock_iothread(&d->ssd); | ||
44 | d->ssd.worker->reset_cursor(d->ssd.worker); | ||
45 | d->ssd.worker->reset_image_cache(d->ssd.worker); | ||
46 | - qemu_mutex_lock_iothread(); | ||
47 | + qxl_lock_iothread(&d->ssd); | ||
48 | qxl_reset_surfaces(d); | ||
49 | qxl_reset_memslots(d); | ||
50 | |||
51 | @@ -795,9 +816,9 @@ static void qxl_reset_surfaces(PCIQXLDev | ||
52 | { | ||
53 | dprint(d, 1, "%s:\n", __FUNCTION__); | ||
54 | d->mode = QXL_MODE_UNDEFINED; | ||
55 | - qemu_mutex_unlock_iothread(); | ||
56 | + qxl_unlock_iothread(&d->ssd); | ||
57 | d->ssd.worker->destroy_surfaces(d->ssd.worker); | ||
58 | - qemu_mutex_lock_iothread(); | ||
59 | + qxl_lock_iothread(&d->ssd); | ||
60 | memset(&d->guest_surfaces.cmds, 0, sizeof(d->guest_surfaces.cmds)); | ||
61 | } | ||
62 | |||
63 | @@ -866,9 +887,9 @@ static void qxl_destroy_primary(PCIQXLDe | ||
64 | dprint(d, 1, "%s\n", __FUNCTION__); | ||
65 | |||
66 | d->mode = QXL_MODE_UNDEFINED; | ||
67 | - qemu_mutex_unlock_iothread(); | ||
68 | + qxl_unlock_iothread(&d->ssd); | ||
69 | d->ssd.worker->destroy_primary_surface(d->ssd.worker, 0); | ||
70 | - qemu_mutex_lock_iothread(); | ||
71 | + qxl_lock_iothread(&d->ssd); | ||
72 | } | ||
73 | |||
74 | static void qxl_set_mode(PCIQXLDevice *d, int modenr, int loadvm) | ||
75 | @@ -938,10 +959,10 @@ static void ioport_write(void *opaque, u | ||
76 | case QXL_IO_UPDATE_AREA: | ||
77 | { | ||
78 | QXLRect update = d->ram->update_area; | ||
79 | - qemu_mutex_unlock_iothread(); | ||
80 | + qxl_unlock_iothread(&d->ssd); | ||
81 | d->ssd.worker->update_area(d->ssd.worker, d->ram->update_surface, | ||
82 | &update, NULL, 0, 0); | ||
83 | - qemu_mutex_lock_iothread(); | ||
84 | + qxl_lock_iothread(&d->ssd); | ||
85 | break; | ||
86 | } | ||
87 | case QXL_IO_NOTIFY_CMD: | ||
88 | Index: qemu-0.14.0/ui/spice-display.c | ||
89 | =================================================================== | ||
90 | --- qemu-0.14.0.orig/ui/spice-display.c | ||
91 | +++ qemu-0.14.0/ui/spice-display.c | ||
92 | @@ -186,18 +186,18 @@ void qemu_spice_create_host_primary(Simp | ||
93 | surface.mem = (intptr_t)ssd->buf; | ||
94 | surface.group_id = MEMSLOT_GROUP_HOST; | ||
95 | |||
96 | - qemu_mutex_unlock_iothread(); | ||
97 | + qxl_unlock_iothread(ssd); | ||
98 | ssd->worker->create_primary_surface(ssd->worker, 0, &surface); | ||
99 | - qemu_mutex_lock_iothread(); | ||
100 | + qxl_lock_iothread(ssd); | ||
101 | } | ||
102 | |||
103 | void qemu_spice_destroy_host_primary(SimpleSpiceDisplay *ssd) | ||
104 | { | ||
105 | dprint(1, "%s:\n", __FUNCTION__); | ||
106 | |||
107 | - qemu_mutex_unlock_iothread(); | ||
108 | + qxl_unlock_iothread(ssd); | ||
109 | ssd->worker->destroy_primary_surface(ssd->worker, 0); | ||
110 | - qemu_mutex_lock_iothread(); | ||
111 | + qxl_lock_iothread(ssd); | ||
112 | } | ||
113 | |||
114 | void qemu_spice_vm_change_state_handler(void *opaque, int running, int reason) | ||
115 | @@ -207,9 +207,9 @@ void qemu_spice_vm_change_state_handler( | ||
116 | if (running) { | ||
117 | ssd->worker->start(ssd->worker); | ||
118 | } else { | ||
119 | - qemu_mutex_unlock_iothread(); | ||
120 | + qxl_unlock_iothread(ssd); | ||
121 | ssd->worker->stop(ssd->worker); | ||
122 | - qemu_mutex_lock_iothread(); | ||
123 | + qxl_lock_iothread(ssd); | ||
124 | } | ||
125 | ssd->running = running; | ||
126 | } | ||
127 | Index: qemu-0.14.0/ui/spice-display.h | ||
128 | =================================================================== | ||
129 | --- qemu-0.14.0.orig/ui/spice-display.h | ||
130 | +++ qemu-0.14.0/ui/spice-display.h | ||
131 | @@ -43,6 +43,9 @@ typedef struct SimpleSpiceDisplay { | ||
132 | QXLRect dirty; | ||
133 | int notify; | ||
134 | int running; | ||
135 | + | ||
136 | + /* qemu-kvm locking ... */ | ||
137 | + void *env; | ||
138 | } SimpleSpiceDisplay; | ||
139 | |||
140 | typedef struct SimpleSpiceUpdate { | ||
141 | @@ -52,6 +55,9 @@ typedef struct SimpleSpiceUpdate { | ||
142 | uint8_t *bitmap; | ||
143 | } SimpleSpiceUpdate; | ||
144 | |||
145 | +void qxl_unlock_iothread(SimpleSpiceDisplay *ssd); | ||
146 | +void qxl_lock_iothread(SimpleSpiceDisplay *ssd); | ||
147 | + | ||
148 | int qemu_spice_rect_is_empty(const QXLRect* r); | ||
149 | void qemu_spice_rect_union(QXLRect *dest, const QXLRect *r); | ||
150 | |||