Merge ~paelzer/ubuntu/+source/qemu:bug-1887490-EPYC-v3-1849644-websocket-1896751-migratereboot into ubuntu/+source/qemu:ubuntu/focal-devel
- Git
- lp:~paelzer/ubuntu/+source/qemu
- bug-1887490-EPYC-v3-1849644-websocket-1896751-migratereboot
- Merge into ubuntu/focal-devel
Proposed by
Christian Ehrhardt
Status: | Merged | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Approved by: | Christian Ehrhardt | ||||||||||||
Approved revision: | a44412a7e164b347646e24a7c3b694cfc6484640 | ||||||||||||
Merge reported by: | Christian Ehrhardt | ||||||||||||
Merged at revision: | a44412a7e164b347646e24a7c3b694cfc6484640 | ||||||||||||
Proposed branch: | ~paelzer/ubuntu/+source/qemu:bug-1887490-EPYC-v3-1849644-websocket-1896751-migratereboot | ||||||||||||
Merge into: | ubuntu/+source/qemu:ubuntu/focal-devel | ||||||||||||
Diff against target: |
520 lines (+480/-0) 6 files modified
debian/changelog (+10/-0) debian/patches/series (+4/-0) debian/patches/ubuntu/lp-1849644-io-channel-websock-treat-binary-and-no-sub-protocol-.patch (+127/-0) debian/patches/ubuntu/lp-1882774-i386-Add-2nd-Generation-AMD-EPYC-processors.patch (+191/-0) debian/patches/ubuntu/lp-1882774-i386-Add-missing-cpu-feature-bits-in-EPYC-model.patch (+76/-0) debian/patches/ubuntu/lp-1896751-exec-rom_reset-Free-rom-data-during-inmigrate-skip.patch (+72/-0) |
||||||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Robie Basak | sru | Approve | |
Canonical Server | Pending | ||
git-ubuntu developers | Pending | ||
Review via email: mp+391348@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Revision history for this message
Christian Ehrhardt (paelzer) wrote : | # |
Revision history for this message
Robie Basak (racb) : | # |
review:
Approve
(sru)
Revision history for this message
Christian Ehrhardt (paelzer) wrote : | # |
To ssh://git.
* [new tag] upload/
Uploading to ubuntu (via ftp to upload.ubuntu.com):
Uploading qemu_4.
Uploading qemu_4.
Uploading qemu_4.
Uploading qemu_4.
Successfully uploaded packages.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | diff --git a/debian/changelog b/debian/changelog |
2 | index be7e622..39477a0 100644 |
3 | --- a/debian/changelog |
4 | +++ b/debian/changelog |
5 | @@ -1,3 +1,13 @@ |
6 | +qemu (1:4.2-3ubuntu6.7) focal; urgency=medium |
7 | + |
8 | + * d/p/ubuntu/lp-1882774-*: add newer EPYC processor types (LP: #1887490) |
9 | + * d/p/u/lp-1896751-exec-rom_reset-Free-rom-data-during-inmigrate-skip.patch: |
10 | + fix reboot after migration (LP: #1896751) |
11 | + * d/p/u/lp-1849644-io-channel-websock-treat-binary-and-no-sub-protocol-.patch: |
12 | + fix websocket compatibility with newer versions of noVNC (LP: #1849644) |
13 | + |
14 | + -- Christian Ehrhardt <christian.ehrhardt@canonical.com> Mon, 27 Jul 2020 11:45:26 +0200 |
15 | + |
16 | qemu (1:4.2-3ubuntu6.6) focal-security; urgency=medium |
17 | |
18 | * SECURITY UPDATE: out-of-bounds read/write in USB emulator |
19 | diff --git a/debian/patches/series b/debian/patches/series |
20 | index 456dc1f..4e3be76 100644 |
21 | --- a/debian/patches/series |
22 | +++ b/debian/patches/series |
23 | @@ -225,3 +225,7 @@ ubuntu/lp-1883984-target-s390x-Fix-SQXBR.patch |
24 | ubuntu/lp-1890154-s390x-protvirt-allow-to-IPL-secure-guests-with-no-re.patch |
25 | ubuntu/hw-riscv-Allow-64-bit-access-to-SiFive-CLINT.patch |
26 | ubuntu/CVE-2020-14364.patch |
27 | +ubuntu/lp-1882774-i386-Add-missing-cpu-feature-bits-in-EPYC-model.patch |
28 | +ubuntu/lp-1882774-i386-Add-2nd-Generation-AMD-EPYC-processors.patch |
29 | +ubuntu/lp-1896751-exec-rom_reset-Free-rom-data-during-inmigrate-skip.patch |
30 | +ubuntu/lp-1849644-io-channel-websock-treat-binary-and-no-sub-protocol-.patch |
31 | diff --git a/debian/patches/ubuntu/lp-1849644-io-channel-websock-treat-binary-and-no-sub-protocol-.patch b/debian/patches/ubuntu/lp-1849644-io-channel-websock-treat-binary-and-no-sub-protocol-.patch |
32 | new file mode 100644 |
33 | index 0000000..979c67f |
34 | --- /dev/null |
35 | +++ b/debian/patches/ubuntu/lp-1849644-io-channel-websock-treat-binary-and-no-sub-protocol-.patch |
36 | @@ -0,0 +1,127 @@ |
37 | +From c64e1e75381d0cb53f9fc8f93245a933b12c68a6 Mon Sep 17 00:00:00 2001 |
38 | +From: Yu-Chen Lin <npes87184@gmail.com> |
39 | +Date: Sat, 23 Nov 2019 11:43:06 +0800 |
40 | +Subject: [PATCH] io/channel-websock: treat 'binary' and no sub-protocol as the |
41 | + same |
42 | +MIME-Version: 1.0 |
43 | +Content-Type: text/plain; charset=UTF-8 |
44 | +Content-Transfer-Encoding: 8bit |
45 | + |
46 | +noVNC doesn't use 'binary' protocol by default after |
47 | +commit c912230309806aacbae4295faf7ad6406da97617. |
48 | + |
49 | +It will cause qemu return 400 when handshaking. |
50 | + |
51 | +To overcome this problem and remain compatibility of |
52 | +older noVNC client. |
53 | + |
54 | +We treat 'binary' and no sub-protocol as the same |
55 | +so that we can support different version of noVNC |
56 | +client. |
57 | + |
58 | +Tested on noVNC before c912230 and after c912230. |
59 | + |
60 | +Buglink: https://bugs.launchpad.net/qemu/+bug/1849644 |
61 | + |
62 | +Signed-off-by: Yu-Chen Lin <npes87184@gmail.com> |
63 | +Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> |
64 | + |
65 | +Origin: upstream, https://git.qemu.org/?p=qemu.git;a=commit;h=c64e1e75381d |
66 | +Bug-Ubuntu: https://bugs.launchpad.net/bugs/1849644 |
67 | +Last-Update: 2020-09-24 |
68 | + |
69 | +--- |
70 | + io/channel-websock.c | 36 ++++++++++++++++++++++++------------ |
71 | + 1 file changed, 24 insertions(+), 12 deletions(-) |
72 | + |
73 | +diff --git a/io/channel-websock.c b/io/channel-websock.c |
74 | +index fc36d44eba..47a0e941d9 100644 |
75 | +--- a/io/channel-websock.c |
76 | ++++ b/io/channel-websock.c |
77 | +@@ -49,13 +49,20 @@ |
78 | + "Server: QEMU VNC\r\n" \ |
79 | + "Date: %s\r\n" |
80 | + |
81 | ++#define QIO_CHANNEL_WEBSOCK_HANDSHAKE_WITH_PROTO_RES_OK \ |
82 | ++ "HTTP/1.1 101 Switching Protocols\r\n" \ |
83 | ++ QIO_CHANNEL_WEBSOCK_HANDSHAKE_RES_COMMON \ |
84 | ++ "Upgrade: websocket\r\n" \ |
85 | ++ "Connection: Upgrade\r\n" \ |
86 | ++ "Sec-WebSocket-Accept: %s\r\n" \ |
87 | ++ "Sec-WebSocket-Protocol: binary\r\n" \ |
88 | ++ "\r\n" |
89 | + #define QIO_CHANNEL_WEBSOCK_HANDSHAKE_RES_OK \ |
90 | + "HTTP/1.1 101 Switching Protocols\r\n" \ |
91 | + QIO_CHANNEL_WEBSOCK_HANDSHAKE_RES_COMMON \ |
92 | + "Upgrade: websocket\r\n" \ |
93 | + "Connection: Upgrade\r\n" \ |
94 | + "Sec-WebSocket-Accept: %s\r\n" \ |
95 | +- "Sec-WebSocket-Protocol: binary\r\n" \ |
96 | + "\r\n" |
97 | + #define QIO_CHANNEL_WEBSOCK_HANDSHAKE_RES_NOT_FOUND \ |
98 | + "HTTP/1.1 404 Not Found\r\n" \ |
99 | +@@ -336,6 +343,7 @@ qio_channel_websock_find_header(QIOChannelWebsockHTTPHeader *hdrs, |
100 | + |
101 | + static void qio_channel_websock_handshake_send_res_ok(QIOChannelWebsock *ioc, |
102 | + const char *key, |
103 | ++ const bool use_protocols, |
104 | + Error **errp) |
105 | + { |
106 | + char combined_key[QIO_CHANNEL_WEBSOCK_CLIENT_KEY_LEN + |
107 | +@@ -361,8 +369,14 @@ static void qio_channel_websock_handshake_send_res_ok(QIOChannelWebsock *ioc, |
108 | + } |
109 | + |
110 | + date = qio_channel_websock_date_str(); |
111 | +- qio_channel_websock_handshake_send_res( |
112 | +- ioc, QIO_CHANNEL_WEBSOCK_HANDSHAKE_RES_OK, date, accept); |
113 | ++ if (use_protocols) { |
114 | ++ qio_channel_websock_handshake_send_res( |
115 | ++ ioc, QIO_CHANNEL_WEBSOCK_HANDSHAKE_WITH_PROTO_RES_OK, |
116 | ++ date, accept); |
117 | ++ } else { |
118 | ++ qio_channel_websock_handshake_send_res( |
119 | ++ ioc, QIO_CHANNEL_WEBSOCK_HANDSHAKE_RES_OK, date, accept); |
120 | ++ } |
121 | + |
122 | + g_free(date); |
123 | + g_free(accept); |
124 | +@@ -387,10 +401,6 @@ static void qio_channel_websock_handshake_process(QIOChannelWebsock *ioc, |
125 | + |
126 | + protocols = qio_channel_websock_find_header( |
127 | + hdrs, nhdrs, QIO_CHANNEL_WEBSOCK_HEADER_PROTOCOL); |
128 | +- if (!protocols) { |
129 | +- error_setg(errp, "Missing websocket protocol header data"); |
130 | +- goto bad_request; |
131 | +- } |
132 | + |
133 | + version = qio_channel_websock_find_header( |
134 | + hdrs, nhdrs, QIO_CHANNEL_WEBSOCK_HEADER_VERSION); |
135 | +@@ -430,10 +440,12 @@ static void qio_channel_websock_handshake_process(QIOChannelWebsock *ioc, |
136 | + trace_qio_channel_websock_http_request(ioc, protocols, version, |
137 | + host, connection, upgrade, key); |
138 | + |
139 | +- if (!g_strrstr(protocols, QIO_CHANNEL_WEBSOCK_PROTOCOL_BINARY)) { |
140 | +- error_setg(errp, "No '%s' protocol is supported by client '%s'", |
141 | +- QIO_CHANNEL_WEBSOCK_PROTOCOL_BINARY, protocols); |
142 | +- goto bad_request; |
143 | ++ if (protocols) { |
144 | ++ if (!g_strrstr(protocols, QIO_CHANNEL_WEBSOCK_PROTOCOL_BINARY)) { |
145 | ++ error_setg(errp, "No '%s' protocol is supported by client '%s'", |
146 | ++ QIO_CHANNEL_WEBSOCK_PROTOCOL_BINARY, protocols); |
147 | ++ goto bad_request; |
148 | ++ } |
149 | + } |
150 | + |
151 | + if (!g_str_equal(version, QIO_CHANNEL_WEBSOCK_SUPPORTED_VERSION)) { |
152 | +@@ -467,7 +479,7 @@ static void qio_channel_websock_handshake_process(QIOChannelWebsock *ioc, |
153 | + goto bad_request; |
154 | + } |
155 | + |
156 | +- qio_channel_websock_handshake_send_res_ok(ioc, key, errp); |
157 | ++ qio_channel_websock_handshake_send_res_ok(ioc, key, !!protocols, errp); |
158 | + return; |
159 | + |
160 | + bad_request: |
161 | +-- |
162 | +2.28.0 |
163 | + |
164 | diff --git a/debian/patches/ubuntu/lp-1882774-i386-Add-2nd-Generation-AMD-EPYC-processors.patch b/debian/patches/ubuntu/lp-1882774-i386-Add-2nd-Generation-AMD-EPYC-processors.patch |
165 | new file mode 100644 |
166 | index 0000000..2b2328d |
167 | --- /dev/null |
168 | +++ b/debian/patches/ubuntu/lp-1882774-i386-Add-2nd-Generation-AMD-EPYC-processors.patch |
169 | @@ -0,0 +1,191 @@ |
170 | +From 143c30d4d346831a09e59e9af45afdca0331e819 Mon Sep 17 00:00:00 2001 |
171 | +From: "Moger, Babu" <Babu.Moger@amd.com> |
172 | +Date: Thu, 7 Nov 2019 18:01:04 +0000 |
173 | +Subject: [PATCH] i386: Add 2nd Generation AMD EPYC processors |
174 | + |
175 | +Adds the support for 2nd Gen AMD EPYC Processors. The model display |
176 | +name will be EPYC-Rome. |
177 | + |
178 | +Adds the following new feature bits on top of the feature bits from the |
179 | +first generation EPYC models. |
180 | +perfctr-core : core performance counter extensions support. Enables the VM to |
181 | + use extended performance counter support. It enables six |
182 | + programmable counters instead of four counters. |
183 | +clzero : instruction zeroes out the 64 byte cache line specified in RAX. |
184 | +xsaveerptr : XSAVE, XSAVE, FXSAVEOPT, XSAVEC, XSAVES always save error |
185 | + pointers and FXRSTOR, XRSTOR, XRSTORS always restore error |
186 | + pointers. |
187 | +wbnoinvd : Write back and do not invalidate cache |
188 | +ibpb : Indirect Branch Prediction Barrier |
189 | +amd-stibp : Single Thread Indirect Branch Predictor |
190 | +clwb : Cache Line Write Back and Retain |
191 | +xsaves : XSAVES, XRSTORS and IA32_XSS support |
192 | +rdpid : Read Processor ID instruction support |
193 | +umip : User-Mode Instruction Prevention support |
194 | + |
195 | +The Reference documents are available at |
196 | +https://developer.amd.com/wp-content/resources/55803_0.54-PUB.pdf |
197 | +https://www.amd.com/system/files/TechDocs/24594.pdf |
198 | + |
199 | +Depends on following kernel commits: |
200 | +40bc47b08b6e ("kvm: x86: Enumerate support for CLZERO instruction") |
201 | +504ce1954fba ("KVM: x86: Expose XSAVEERPTR to the guest") |
202 | +6d61e3c32248 ("kvm: x86: Expose RDPID in KVM_GET_SUPPORTED_CPUID") |
203 | +52297436199d ("kvm: svm: Update svm_xsaves_supported") |
204 | + |
205 | +Signed-off-by: Babu Moger <babu.moger@amd.com> |
206 | +Message-Id: <157314966312.23828.17684821666338093910.stgit@naples-babu.amd.com> |
207 | +Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> |
208 | + |
209 | +Origin: upstream, https://git.qemu.org/?p=qemu.git;a=commit;h=143c30d4d346831a09e59e9af45afdca0331e819 |
210 | +Bug-Ubuntu: https://bugs.launchpad.net/bugs/1882774 |
211 | +Last-Update: 2020-07-27 |
212 | + |
213 | +--- |
214 | + target/i386/cpu.c | 102 +++++++++++++++++++++++++++++++++++++++++++++- |
215 | + target/i386/cpu.h | 2 + |
216 | + 2 files changed, 103 insertions(+), 1 deletion(-) |
217 | + |
218 | +diff --git a/target/i386/cpu.c b/target/i386/cpu.c |
219 | +index 54f42dcd25..350b51b346 100644 |
220 | +--- a/target/i386/cpu.c |
221 | ++++ b/target/i386/cpu.c |
222 | +@@ -1133,7 +1133,7 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { |
223 | + "clzero", NULL, "xsaveerptr", NULL, |
224 | + NULL, NULL, NULL, NULL, |
225 | + NULL, "wbnoinvd", NULL, NULL, |
226 | +- "ibpb", NULL, NULL, NULL, |
227 | ++ "ibpb", NULL, NULL, "amd-stibp", |
228 | + NULL, NULL, NULL, NULL, |
229 | + NULL, NULL, NULL, NULL, |
230 | + "amd-ssbd", "virt-ssbd", "amd-no-ssb", NULL, |
231 | +@@ -1798,6 +1798,56 @@ static CPUCaches epyc_cache_info = { |
232 | + }, |
233 | + }; |
234 | + |
235 | ++static CPUCaches epyc_rome_cache_info = { |
236 | ++ .l1d_cache = &(CPUCacheInfo) { |
237 | ++ .type = DATA_CACHE, |
238 | ++ .level = 1, |
239 | ++ .size = 32 * KiB, |
240 | ++ .line_size = 64, |
241 | ++ .associativity = 8, |
242 | ++ .partitions = 1, |
243 | ++ .sets = 64, |
244 | ++ .lines_per_tag = 1, |
245 | ++ .self_init = 1, |
246 | ++ .no_invd_sharing = true, |
247 | ++ }, |
248 | ++ .l1i_cache = &(CPUCacheInfo) { |
249 | ++ .type = INSTRUCTION_CACHE, |
250 | ++ .level = 1, |
251 | ++ .size = 32 * KiB, |
252 | ++ .line_size = 64, |
253 | ++ .associativity = 8, |
254 | ++ .partitions = 1, |
255 | ++ .sets = 64, |
256 | ++ .lines_per_tag = 1, |
257 | ++ .self_init = 1, |
258 | ++ .no_invd_sharing = true, |
259 | ++ }, |
260 | ++ .l2_cache = &(CPUCacheInfo) { |
261 | ++ .type = UNIFIED_CACHE, |
262 | ++ .level = 2, |
263 | ++ .size = 512 * KiB, |
264 | ++ .line_size = 64, |
265 | ++ .associativity = 8, |
266 | ++ .partitions = 1, |
267 | ++ .sets = 1024, |
268 | ++ .lines_per_tag = 1, |
269 | ++ }, |
270 | ++ .l3_cache = &(CPUCacheInfo) { |
271 | ++ .type = UNIFIED_CACHE, |
272 | ++ .level = 3, |
273 | ++ .size = 16 * MiB, |
274 | ++ .line_size = 64, |
275 | ++ .associativity = 16, |
276 | ++ .partitions = 1, |
277 | ++ .sets = 16384, |
278 | ++ .lines_per_tag = 1, |
279 | ++ .self_init = true, |
280 | ++ .inclusive = true, |
281 | ++ .complex_indexing = true, |
282 | ++ }, |
283 | ++}; |
284 | ++ |
285 | + /* The following VMX features are not supported by KVM and are left out in the |
286 | + * CPU definitions: |
287 | + * |
288 | +@@ -4030,6 +4080,56 @@ static X86CPUDefinition builtin_x86_defs[] = { |
289 | + .model_id = "Hygon Dhyana Processor", |
290 | + .cache_info = &epyc_cache_info, |
291 | + }, |
292 | ++ { |
293 | ++ .name = "EPYC-Rome", |
294 | ++ .level = 0xd, |
295 | ++ .vendor = CPUID_VENDOR_AMD, |
296 | ++ .family = 23, |
297 | ++ .model = 49, |
298 | ++ .stepping = 0, |
299 | ++ .features[FEAT_1_EDX] = |
300 | ++ CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | CPUID_CLFLUSH | |
301 | ++ CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA | CPUID_PGE | |
302 | ++ CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 | CPUID_MCE | |
303 | ++ CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | CPUID_DE | |
304 | ++ CPUID_VME | CPUID_FP87, |
305 | ++ .features[FEAT_1_ECX] = |
306 | ++ CPUID_EXT_RDRAND | CPUID_EXT_F16C | CPUID_EXT_AVX | |
307 | ++ CPUID_EXT_XSAVE | CPUID_EXT_AES | CPUID_EXT_POPCNT | |
308 | ++ CPUID_EXT_MOVBE | CPUID_EXT_SSE42 | CPUID_EXT_SSE41 | |
309 | ++ CPUID_EXT_CX16 | CPUID_EXT_FMA | CPUID_EXT_SSSE3 | |
310 | ++ CPUID_EXT_MONITOR | CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3, |
311 | ++ .features[FEAT_8000_0001_EDX] = |
312 | ++ CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_PDPE1GB | |
313 | ++ CPUID_EXT2_FFXSR | CPUID_EXT2_MMXEXT | CPUID_EXT2_NX | |
314 | ++ CPUID_EXT2_SYSCALL, |
315 | ++ .features[FEAT_8000_0001_ECX] = |
316 | ++ CPUID_EXT3_OSVW | CPUID_EXT3_3DNOWPREFETCH | |
317 | ++ CPUID_EXT3_MISALIGNSSE | CPUID_EXT3_SSE4A | CPUID_EXT3_ABM | |
318 | ++ CPUID_EXT3_CR8LEG | CPUID_EXT3_SVM | CPUID_EXT3_LAHF_LM | |
319 | ++ CPUID_EXT3_TOPOEXT | CPUID_EXT3_PERFCORE, |
320 | ++ .features[FEAT_8000_0008_EBX] = |
321 | ++ CPUID_8000_0008_EBX_CLZERO | CPUID_8000_0008_EBX_XSAVEERPTR | |
322 | ++ CPUID_8000_0008_EBX_WBNOINVD | CPUID_8000_0008_EBX_IBPB | |
323 | ++ CPUID_8000_0008_EBX_STIBP, |
324 | ++ .features[FEAT_7_0_EBX] = |
325 | ++ CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 | CPUID_7_0_EBX_AVX2 | |
326 | ++ CPUID_7_0_EBX_SMEP | CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_RDSEED | |
327 | ++ CPUID_7_0_EBX_ADX | CPUID_7_0_EBX_SMAP | CPUID_7_0_EBX_CLFLUSHOPT | |
328 | ++ CPUID_7_0_EBX_SHA_NI | CPUID_7_0_EBX_CLWB, |
329 | ++ .features[FEAT_7_0_ECX] = |
330 | ++ CPUID_7_0_ECX_UMIP | CPUID_7_0_ECX_RDPID, |
331 | ++ .features[FEAT_XSAVE] = |
332 | ++ CPUID_XSAVE_XSAVEOPT | CPUID_XSAVE_XSAVEC | |
333 | ++ CPUID_XSAVE_XGETBV1 | CPUID_XSAVE_XSAVES, |
334 | ++ .features[FEAT_6_EAX] = |
335 | ++ CPUID_6_EAX_ARAT, |
336 | ++ .features[FEAT_SVM] = |
337 | ++ CPUID_SVM_NPT | CPUID_SVM_NRIPSAVE, |
338 | ++ .xlevel = 0x8000001E, |
339 | ++ .model_id = "AMD EPYC-Rome Processor", |
340 | ++ .cache_info = &epyc_rome_cache_info, |
341 | ++ }, |
342 | + }; |
343 | + |
344 | + /* KVM-specific features that are automatically added/removed |
345 | +diff --git a/target/i386/cpu.h b/target/i386/cpu.h |
346 | +index 576f309bbf..68b186d258 100644 |
347 | +--- a/target/i386/cpu.h |
348 | ++++ b/target/i386/cpu.h |
349 | +@@ -792,6 +792,8 @@ typedef uint64_t FeatureWordArray[FEATURE_WORDS]; |
350 | + #define CPUID_8000_0008_EBX_WBNOINVD (1U << 9) |
351 | + /* Indirect Branch Prediction Barrier */ |
352 | + #define CPUID_8000_0008_EBX_IBPB (1U << 12) |
353 | ++/* Single Thread Indirect Branch Predictors */ |
354 | ++#define CPUID_8000_0008_EBX_STIBP (1U << 15) |
355 | + |
356 | + #define CPUID_XSAVE_XSAVEOPT (1U << 0) |
357 | + #define CPUID_XSAVE_XSAVEC (1U << 1) |
358 | +-- |
359 | +2.27.0 |
360 | + |
361 | diff --git a/debian/patches/ubuntu/lp-1882774-i386-Add-missing-cpu-feature-bits-in-EPYC-model.patch b/debian/patches/ubuntu/lp-1882774-i386-Add-missing-cpu-feature-bits-in-EPYC-model.patch |
362 | new file mode 100644 |
363 | index 0000000..db0b681 |
364 | --- /dev/null |
365 | +++ b/debian/patches/ubuntu/lp-1882774-i386-Add-missing-cpu-feature-bits-in-EPYC-model.patch |
366 | @@ -0,0 +1,76 @@ |
367 | +From a16e8dbc043720abcb37fc7dca313e720b4e0f0c Mon Sep 17 00:00:00 2001 |
368 | +From: "Moger, Babu" <Babu.Moger@amd.com> |
369 | +Date: Thu, 7 Nov 2019 18:00:57 +0000 |
370 | +Subject: [PATCH] i386: Add missing cpu feature bits in EPYC model |
371 | + |
372 | +Adds the following missing CPUID bits: |
373 | +perfctr-core : core performance counter extensions support. Enables the VM |
374 | + to use extended performance counter support. It enables six |
375 | + programmable counters instead of 4 counters. |
376 | +clzero : instruction zeroes out the 64 byte cache line specified in RAX. |
377 | +xsaveerptr : XSAVE, XSAVE, FXSAVEOPT, XSAVEC, XSAVES always save error |
378 | + pointers and FXRSTOR, XRSTOR, XRSTORS always restore error |
379 | + pointers. |
380 | +ibpb : Indirect Branch Prediction Barrie. |
381 | +xsaves : XSAVES, XRSTORS and IA32_XSS supported. |
382 | + |
383 | +Depends on following kernel commits: |
384 | +40bc47b08b6e ("kvm: x86: Enumerate support for CLZERO instruction") |
385 | +504ce1954fba ("KVM: x86: Expose XSAVEERPTR to the guest") |
386 | +52297436199d ("kvm: svm: Update svm_xsaves_supported") |
387 | + |
388 | +These new features will be added in EPYC-v3. The -cpu help output after the change. |
389 | +x86 EPYC-v1 AMD EPYC Processor |
390 | +x86 EPYC-v2 AMD EPYC Processor (with IBPB) |
391 | +x86 EPYC-v3 AMD EPYC Processor |
392 | + |
393 | +Signed-off-by: Babu Moger <babu.moger@amd.com> |
394 | +Message-Id: <157314965662.23828.3063243729449408327.stgit@naples-babu.amd.com> |
395 | +Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> |
396 | + |
397 | +Origin: upstream, https://git.qemu.org/?p=qemu.git;a=commit;h=a16e8dbc043720abcb37fc7dca313e720b4e0f0c |
398 | +Bug-Ubuntu: https://bugs.launchpad.net/bugs/1882774 |
399 | +Last-Update: 2020-07-27 |
400 | + |
401 | +--- |
402 | + target/i386/cpu.c | 17 +++++++++++++---- |
403 | + 1 file changed, 13 insertions(+), 4 deletions(-) |
404 | + |
405 | +diff --git a/target/i386/cpu.c b/target/i386/cpu.c |
406 | +index dc78494167..54f42dcd25 100644 |
407 | +--- a/target/i386/cpu.c |
408 | ++++ b/target/i386/cpu.c |
409 | +@@ -3942,10 +3942,6 @@ static X86CPUDefinition builtin_x86_defs[] = { |
410 | + CPUID_7_0_EBX_SMEP | CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_RDSEED | |
411 | + CPUID_7_0_EBX_ADX | CPUID_7_0_EBX_SMAP | CPUID_7_0_EBX_CLFLUSHOPT | |
412 | + CPUID_7_0_EBX_SHA_NI, |
413 | +- /* Missing: XSAVES (not supported by some Linux versions, |
414 | +- * including v4.1 to v4.12). |
415 | +- * KVM doesn't yet expose any XSAVES state save component. |
416 | +- */ |
417 | + .features[FEAT_XSAVE] = |
418 | + CPUID_XSAVE_XSAVEOPT | CPUID_XSAVE_XSAVEC | |
419 | + CPUID_XSAVE_XGETBV1, |
420 | +@@ -3968,6 +3964,19 @@ static X86CPUDefinition builtin_x86_defs[] = { |
421 | + { /* end of list */ } |
422 | + } |
423 | + }, |
424 | ++ { |
425 | ++ .version = 3, |
426 | ++ .props = (PropValue[]) { |
427 | ++ { "ibpb", "on" }, |
428 | ++ { "perfctr-core", "on" }, |
429 | ++ { "clzero", "on" }, |
430 | ++ { "xsaveerptr", "on" }, |
431 | ++ { "xsaves", "on" }, |
432 | ++ { "model-id", |
433 | ++ "AMD EPYC Processor" }, |
434 | ++ { /* end of list */ } |
435 | ++ } |
436 | ++ }, |
437 | + { /* end of list */ } |
438 | + } |
439 | + }, |
440 | +-- |
441 | +2.27.0 |
442 | + |
443 | diff --git a/debian/patches/ubuntu/lp-1896751-exec-rom_reset-Free-rom-data-during-inmigrate-skip.patch b/debian/patches/ubuntu/lp-1896751-exec-rom_reset-Free-rom-data-during-inmigrate-skip.patch |
444 | new file mode 100644 |
445 | index 0000000..75f4cff |
446 | --- /dev/null |
447 | +++ b/debian/patches/ubuntu/lp-1896751-exec-rom_reset-Free-rom-data-during-inmigrate-skip.patch |
448 | @@ -0,0 +1,72 @@ |
449 | +From 5073b5d3ea303d37f4a8e2ea451d7a2eb1817448 Mon Sep 17 00:00:00 2001 |
450 | +From: "Dr. David Alan Gilbert" <dgilbert@redhat.com> |
451 | +Date: Fri, 13 Mar 2020 15:59:39 +0000 |
452 | +Subject: [PATCH] exec/rom_reset: Free rom data during inmigrate skip |
453 | + |
454 | +Commit 355477f8c73e9 skips rom reset when we're an incoming migration |
455 | +so as not to overwrite shared ram in the ignore-shared migration |
456 | +optimisation. |
457 | +However, it's got an unexpected side effect that because it skips |
458 | +freeing the ROM data, when rom_reset gets called later on, after |
459 | +migration (e.g. during a reboot), the ROM does get reset to the original |
460 | +file contents. Because of seabios/x86's weird reboot process |
461 | +this confuses a reboot into hanging after a migration. |
462 | + |
463 | +Fixes: 355477f8c73e9 ("migration: do not rom_reset() during incoming migration") |
464 | +https://bugzilla.redhat.com/show_bug.cgi?id=1809380 |
465 | + |
466 | +Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> |
467 | +Reviewed-by: Peter Maydell <peter.maydell@linaro.org> |
468 | +Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> |
469 | + |
470 | +Origin: upstream, https://git.qemu.org/?p=qemu.git;a=commit;h=5073b5d3ea303d37 |
471 | +Bug-Ubuntu: https://bugs.launchpad.net/bugs/1896751 |
472 | +Last-Update: 2020-09-24 |
473 | + |
474 | +--- |
475 | + hw/core/loader.c | 25 ++++++++++++++++--------- |
476 | + 1 file changed, 16 insertions(+), 9 deletions(-) |
477 | + |
478 | +diff --git a/hw/core/loader.c b/hw/core/loader.c |
479 | +index d1b78f60cd..eeef6da9a1 100644 |
480 | +--- a/hw/core/loader.c |
481 | ++++ b/hw/core/loader.c |
482 | +@@ -1119,19 +1119,26 @@ static void rom_reset(void *unused) |
483 | + { |
484 | + Rom *rom; |
485 | + |
486 | +- /* |
487 | +- * We don't need to fill in the RAM with ROM data because we'll fill |
488 | +- * the data in during the next incoming migration in all cases. Note |
489 | +- * that some of those RAMs can actually be modified by the guest on ARM |
490 | +- * so this is probably the only right thing to do here. |
491 | +- */ |
492 | +- if (runstate_check(RUN_STATE_INMIGRATE)) |
493 | +- return; |
494 | +- |
495 | + QTAILQ_FOREACH(rom, &roms, next) { |
496 | + if (rom->fw_file) { |
497 | + continue; |
498 | + } |
499 | ++ /* |
500 | ++ * We don't need to fill in the RAM with ROM data because we'll fill |
501 | ++ * the data in during the next incoming migration in all cases. Note |
502 | ++ * that some of those RAMs can actually be modified by the guest. |
503 | ++ */ |
504 | ++ if (runstate_check(RUN_STATE_INMIGRATE)) { |
505 | ++ if (rom->data && rom->isrom) { |
506 | ++ /* |
507 | ++ * Free it so that a rom_reset after migration doesn't |
508 | ++ * overwrite a potentially modified 'rom'. |
509 | ++ */ |
510 | ++ rom_free_data(rom); |
511 | ++ } |
512 | ++ continue; |
513 | ++ } |
514 | ++ |
515 | + if (rom->data == NULL) { |
516 | + continue; |
517 | + } |
518 | +-- |
519 | +2.28.0 |
520 | + |
SRU Templates ready, PPA at https:/ /launchpad. net/~ci- train-ppa- service/ +archive/ ubuntu/ 4161