1 |
commit: 70190753010f3b562210947c1bad735efe8fe38c |
2 |
Author: Mike Pagano <mpagano <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sat Oct 9 21:32:09 2021 +0000 |
4 |
Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org> |
5 |
CommitDate: Sat Oct 9 21:32:09 2021 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=70190753 |
7 |
|
8 |
Linux patch 5.4.152 |
9 |
|
10 |
Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org> |
11 |
|
12 |
0000_README | 4 + |
13 |
1151_linux-5.4.152.patch | 426 +++++++++++++++++++++++++++++++++++++++++++++++ |
14 |
2 files changed, 430 insertions(+) |
15 |
|
16 |
diff --git a/0000_README b/0000_README |
17 |
index dd4e25f..d41d541 100644 |
18 |
--- a/0000_README |
19 |
+++ b/0000_README |
20 |
@@ -647,6 +647,10 @@ Patch: 1150_linux-5.4.151.patch |
21 |
From: http://www.kernel.org |
22 |
Desc: Linux 5.4.151 |
23 |
|
24 |
+Patch: 1151_linux-5.4.152.patch |
25 |
+From: http://www.kernel.org |
26 |
+Desc: Linux 5.4.152 |
27 |
+ |
28 |
Patch: 1500_XATTR_USER_PREFIX.patch |
29 |
From: https://bugs.gentoo.org/show_bug.cgi?id=470644 |
30 |
Desc: Support for namespace user.pax.* on tmpfs. |
31 |
|
32 |
diff --git a/1151_linux-5.4.152.patch b/1151_linux-5.4.152.patch |
33 |
new file mode 100644 |
34 |
index 0000000..b624b1a |
35 |
--- /dev/null |
36 |
+++ b/1151_linux-5.4.152.patch |
37 |
@@ -0,0 +1,426 @@ |
38 |
+diff --git a/Makefile b/Makefile |
39 |
+index 4eeb72027815b..ffcdc36c56f54 100644 |
40 |
+--- a/Makefile |
41 |
++++ b/Makefile |
42 |
+@@ -1,7 +1,7 @@ |
43 |
+ # SPDX-License-Identifier: GPL-2.0 |
44 |
+ VERSION = 5 |
45 |
+ PATCHLEVEL = 4 |
46 |
+-SUBLEVEL = 151 |
47 |
++SUBLEVEL = 152 |
48 |
+ EXTRAVERSION = |
49 |
+ NAME = Kleptomaniac Octopus |
50 |
+ |
51 |
+diff --git a/arch/sparc/lib/iomap.c b/arch/sparc/lib/iomap.c |
52 |
+index c9da9f139694d..f3a8cd491ce0d 100644 |
53 |
+--- a/arch/sparc/lib/iomap.c |
54 |
++++ b/arch/sparc/lib/iomap.c |
55 |
+@@ -19,8 +19,10 @@ void ioport_unmap(void __iomem *addr) |
56 |
+ EXPORT_SYMBOL(ioport_map); |
57 |
+ EXPORT_SYMBOL(ioport_unmap); |
58 |
+ |
59 |
++#ifdef CONFIG_PCI |
60 |
+ void pci_iounmap(struct pci_dev *dev, void __iomem * addr) |
61 |
+ { |
62 |
+ /* nothing to do */ |
63 |
+ } |
64 |
+ EXPORT_SYMBOL(pci_iounmap); |
65 |
++#endif |
66 |
+diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c |
67 |
+index e622158f56598..00bccb4d17722 100644 |
68 |
+--- a/arch/x86/events/core.c |
69 |
++++ b/arch/x86/events/core.c |
70 |
+@@ -2108,6 +2108,7 @@ static int x86_pmu_event_init(struct perf_event *event) |
71 |
+ if (err) { |
72 |
+ if (event->destroy) |
73 |
+ event->destroy(event); |
74 |
++ event->destroy = NULL; |
75 |
+ } |
76 |
+ |
77 |
+ if (READ_ONCE(x86_pmu.attr_rdpmc) && |
78 |
+diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c |
79 |
+index f1a0eebdcf641..0aaf40be956ff 100644 |
80 |
+--- a/arch/x86/kvm/x86.c |
81 |
++++ b/arch/x86/kvm/x86.c |
82 |
+@@ -1239,6 +1239,13 @@ static const u32 msrs_to_save_all[] = { |
83 |
+ MSR_ARCH_PERFMON_EVENTSEL0 + 12, MSR_ARCH_PERFMON_EVENTSEL0 + 13, |
84 |
+ MSR_ARCH_PERFMON_EVENTSEL0 + 14, MSR_ARCH_PERFMON_EVENTSEL0 + 15, |
85 |
+ MSR_ARCH_PERFMON_EVENTSEL0 + 16, MSR_ARCH_PERFMON_EVENTSEL0 + 17, |
86 |
++ |
87 |
++ MSR_K7_EVNTSEL0, MSR_K7_EVNTSEL1, MSR_K7_EVNTSEL2, MSR_K7_EVNTSEL3, |
88 |
++ MSR_K7_PERFCTR0, MSR_K7_PERFCTR1, MSR_K7_PERFCTR2, MSR_K7_PERFCTR3, |
89 |
++ MSR_F15H_PERF_CTL0, MSR_F15H_PERF_CTL1, MSR_F15H_PERF_CTL2, |
90 |
++ MSR_F15H_PERF_CTL3, MSR_F15H_PERF_CTL4, MSR_F15H_PERF_CTL5, |
91 |
++ MSR_F15H_PERF_CTR0, MSR_F15H_PERF_CTR1, MSR_F15H_PERF_CTR2, |
92 |
++ MSR_F15H_PERF_CTR3, MSR_F15H_PERF_CTR4, MSR_F15H_PERF_CTR5, |
93 |
+ }; |
94 |
+ |
95 |
+ static u32 msrs_to_save[ARRAY_SIZE(msrs_to_save_all)]; |
96 |
+diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c |
97 |
+index 5c354c7aff946..7c6c05fd5dfc3 100644 |
98 |
+--- a/drivers/ata/libata-core.c |
99 |
++++ b/drivers/ata/libata-core.c |
100 |
+@@ -2252,6 +2252,25 @@ static void ata_dev_config_ncq_prio(struct ata_device *dev) |
101 |
+ |
102 |
+ } |
103 |
+ |
104 |
++static bool ata_dev_check_adapter(struct ata_device *dev, |
105 |
++ unsigned short vendor_id) |
106 |
++{ |
107 |
++ struct pci_dev *pcidev = NULL; |
108 |
++ struct device *parent_dev = NULL; |
109 |
++ |
110 |
++ for (parent_dev = dev->tdev.parent; parent_dev != NULL; |
111 |
++ parent_dev = parent_dev->parent) { |
112 |
++ if (dev_is_pci(parent_dev)) { |
113 |
++ pcidev = to_pci_dev(parent_dev); |
114 |
++ if (pcidev->vendor == vendor_id) |
115 |
++ return true; |
116 |
++ break; |
117 |
++ } |
118 |
++ } |
119 |
++ |
120 |
++ return false; |
121 |
++} |
122 |
++ |
123 |
+ static int ata_dev_config_ncq(struct ata_device *dev, |
124 |
+ char *desc, size_t desc_sz) |
125 |
+ { |
126 |
+@@ -2268,6 +2287,13 @@ static int ata_dev_config_ncq(struct ata_device *dev, |
127 |
+ snprintf(desc, desc_sz, "NCQ (not used)"); |
128 |
+ return 0; |
129 |
+ } |
130 |
++ |
131 |
++ if (dev->horkage & ATA_HORKAGE_NO_NCQ_ON_ATI && |
132 |
++ ata_dev_check_adapter(dev, PCI_VENDOR_ID_ATI)) { |
133 |
++ snprintf(desc, desc_sz, "NCQ (not used)"); |
134 |
++ return 0; |
135 |
++ } |
136 |
++ |
137 |
+ if (ap->flags & ATA_FLAG_NCQ) { |
138 |
+ hdepth = min(ap->scsi_host->can_queue, ATA_MAX_QUEUE); |
139 |
+ dev->flags |= ATA_DFLAG_NCQ; |
140 |
+@@ -4557,9 +4583,11 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { |
141 |
+ { "Samsung SSD 850*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | |
142 |
+ ATA_HORKAGE_ZERO_AFTER_TRIM, }, |
143 |
+ { "Samsung SSD 860*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | |
144 |
+- ATA_HORKAGE_ZERO_AFTER_TRIM, }, |
145 |
++ ATA_HORKAGE_ZERO_AFTER_TRIM | |
146 |
++ ATA_HORKAGE_NO_NCQ_ON_ATI, }, |
147 |
+ { "Samsung SSD 870*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | |
148 |
+- ATA_HORKAGE_ZERO_AFTER_TRIM, }, |
149 |
++ ATA_HORKAGE_ZERO_AFTER_TRIM | |
150 |
++ ATA_HORKAGE_NO_NCQ_ON_ATI, }, |
151 |
+ { "FCCT*M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | |
152 |
+ ATA_HORKAGE_ZERO_AFTER_TRIM, }, |
153 |
+ |
154 |
+@@ -6916,6 +6944,8 @@ static int __init ata_parse_force_one(char **cur, |
155 |
+ { "ncq", .horkage_off = ATA_HORKAGE_NONCQ }, |
156 |
+ { "noncqtrim", .horkage_on = ATA_HORKAGE_NO_NCQ_TRIM }, |
157 |
+ { "ncqtrim", .horkage_off = ATA_HORKAGE_NO_NCQ_TRIM }, |
158 |
++ { "noncqati", .horkage_on = ATA_HORKAGE_NO_NCQ_ON_ATI }, |
159 |
++ { "ncqati", .horkage_off = ATA_HORKAGE_NO_NCQ_ON_ATI }, |
160 |
+ { "dump_id", .horkage_on = ATA_HORKAGE_DUMP_ID }, |
161 |
+ { "pio0", .xfer_mask = 1 << (ATA_SHIFT_PIO + 0) }, |
162 |
+ { "pio1", .xfer_mask = 1 << (ATA_SHIFT_PIO + 1) }, |
163 |
+diff --git a/drivers/net/phy/mdio_device.c b/drivers/net/phy/mdio_device.c |
164 |
+index c1d345c3cab35..b2dd293fc87eb 100644 |
165 |
+--- a/drivers/net/phy/mdio_device.c |
166 |
++++ b/drivers/net/phy/mdio_device.c |
167 |
+@@ -180,6 +180,16 @@ static int mdio_remove(struct device *dev) |
168 |
+ return 0; |
169 |
+ } |
170 |
+ |
171 |
++static void mdio_shutdown(struct device *dev) |
172 |
++{ |
173 |
++ struct mdio_device *mdiodev = to_mdio_device(dev); |
174 |
++ struct device_driver *drv = mdiodev->dev.driver; |
175 |
++ struct mdio_driver *mdiodrv = to_mdio_driver(drv); |
176 |
++ |
177 |
++ if (mdiodrv->shutdown) |
178 |
++ mdiodrv->shutdown(mdiodev); |
179 |
++} |
180 |
++ |
181 |
+ /** |
182 |
+ * mdio_driver_register - register an mdio_driver with the MDIO layer |
183 |
+ * @new_driver: new mdio_driver to register |
184 |
+@@ -194,6 +204,7 @@ int mdio_driver_register(struct mdio_driver *drv) |
185 |
+ mdiodrv->driver.bus = &mdio_bus_type; |
186 |
+ mdiodrv->driver.probe = mdio_probe; |
187 |
+ mdiodrv->driver.remove = mdio_remove; |
188 |
++ mdiodrv->driver.shutdown = mdio_shutdown; |
189 |
+ |
190 |
+ retval = driver_register(&mdiodrv->driver); |
191 |
+ if (retval) { |
192 |
+diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c |
193 |
+index c213f2b812691..995566a2785fa 100644 |
194 |
+--- a/drivers/net/xen-netback/netback.c |
195 |
++++ b/drivers/net/xen-netback/netback.c |
196 |
+@@ -492,7 +492,7 @@ check_frags: |
197 |
+ * the header's copy failed, and they are |
198 |
+ * sharing a slot, send an error |
199 |
+ */ |
200 |
+- if (i == 0 && sharedslot) |
201 |
++ if (i == 0 && !first_shinfo && sharedslot) |
202 |
+ xenvif_idx_release(queue, pending_idx, |
203 |
+ XEN_NETIF_RSP_ERROR); |
204 |
+ else |
205 |
+diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c |
206 |
+index f55249766d224..152b486051522 100644 |
207 |
+--- a/drivers/scsi/sd.c |
208 |
++++ b/drivers/scsi/sd.c |
209 |
+@@ -3345,15 +3345,16 @@ static int sd_probe(struct device *dev) |
210 |
+ } |
211 |
+ |
212 |
+ device_initialize(&sdkp->dev); |
213 |
+- sdkp->dev.parent = dev; |
214 |
++ sdkp->dev.parent = get_device(dev); |
215 |
+ sdkp->dev.class = &sd_disk_class; |
216 |
+ dev_set_name(&sdkp->dev, "%s", dev_name(dev)); |
217 |
+ |
218 |
+ error = device_add(&sdkp->dev); |
219 |
+- if (error) |
220 |
+- goto out_free_index; |
221 |
++ if (error) { |
222 |
++ put_device(&sdkp->dev); |
223 |
++ goto out; |
224 |
++ } |
225 |
+ |
226 |
+- get_device(dev); |
227 |
+ dev_set_drvdata(dev, sdkp); |
228 |
+ |
229 |
+ gd->major = sd_major((index & 0xf0) >> 4); |
230 |
+diff --git a/drivers/scsi/ses.c b/drivers/scsi/ses.c |
231 |
+index c2afba2a5414d..43e682297fd5f 100644 |
232 |
+--- a/drivers/scsi/ses.c |
233 |
++++ b/drivers/scsi/ses.c |
234 |
+@@ -87,9 +87,16 @@ static int ses_recv_diag(struct scsi_device *sdev, int page_code, |
235 |
+ 0 |
236 |
+ }; |
237 |
+ unsigned char recv_page_code; |
238 |
++ unsigned int retries = SES_RETRIES; |
239 |
++ struct scsi_sense_hdr sshdr; |
240 |
++ |
241 |
++ do { |
242 |
++ ret = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buf, bufflen, |
243 |
++ &sshdr, SES_TIMEOUT, 1, NULL); |
244 |
++ } while (ret > 0 && --retries && scsi_sense_valid(&sshdr) && |
245 |
++ (sshdr.sense_key == NOT_READY || |
246 |
++ (sshdr.sense_key == UNIT_ATTENTION && sshdr.asc == 0x29))); |
247 |
+ |
248 |
+- ret = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buf, bufflen, |
249 |
+- NULL, SES_TIMEOUT, SES_RETRIES, NULL); |
250 |
+ if (unlikely(ret)) |
251 |
+ return ret; |
252 |
+ |
253 |
+@@ -121,9 +128,16 @@ static int ses_send_diag(struct scsi_device *sdev, int page_code, |
254 |
+ bufflen & 0xff, |
255 |
+ 0 |
256 |
+ }; |
257 |
++ struct scsi_sense_hdr sshdr; |
258 |
++ unsigned int retries = SES_RETRIES; |
259 |
++ |
260 |
++ do { |
261 |
++ result = scsi_execute_req(sdev, cmd, DMA_TO_DEVICE, buf, bufflen, |
262 |
++ &sshdr, SES_TIMEOUT, 1, NULL); |
263 |
++ } while (result > 0 && --retries && scsi_sense_valid(&sshdr) && |
264 |
++ (sshdr.sense_key == NOT_READY || |
265 |
++ (sshdr.sense_key == UNIT_ATTENTION && sshdr.asc == 0x29))); |
266 |
+ |
267 |
+- result = scsi_execute_req(sdev, cmd, DMA_TO_DEVICE, buf, bufflen, |
268 |
+- NULL, SES_TIMEOUT, SES_RETRIES, NULL); |
269 |
+ if (result) |
270 |
+ sdev_printk(KERN_ERR, sdev, "SEND DIAGNOSTIC result: %8x\n", |
271 |
+ result); |
272 |
+diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c |
273 |
+index f29fbadb05487..78329d0e9af0a 100644 |
274 |
+--- a/drivers/usb/dwc2/hcd.c |
275 |
++++ b/drivers/usb/dwc2/hcd.c |
276 |
+@@ -5074,6 +5074,10 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg) |
277 |
+ hcd->has_tt = 1; |
278 |
+ |
279 |
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
280 |
++ if (!res) { |
281 |
++ retval = -EINVAL; |
282 |
++ goto error1; |
283 |
++ } |
284 |
+ hcd->rsrc_start = res->start; |
285 |
+ hcd->rsrc_len = resource_size(res); |
286 |
+ |
287 |
+diff --git a/fs/ext2/balloc.c b/fs/ext2/balloc.c |
288 |
+index e0cc551645059..abac81a2e694c 100644 |
289 |
+--- a/fs/ext2/balloc.c |
290 |
++++ b/fs/ext2/balloc.c |
291 |
+@@ -48,10 +48,9 @@ struct ext2_group_desc * ext2_get_group_desc(struct super_block * sb, |
292 |
+ struct ext2_sb_info *sbi = EXT2_SB(sb); |
293 |
+ |
294 |
+ if (block_group >= sbi->s_groups_count) { |
295 |
+- ext2_error (sb, "ext2_get_group_desc", |
296 |
+- "block_group >= groups_count - " |
297 |
+- "block_group = %d, groups_count = %lu", |
298 |
+- block_group, sbi->s_groups_count); |
299 |
++ WARN(1, "block_group >= groups_count - " |
300 |
++ "block_group = %d, groups_count = %lu", |
301 |
++ block_group, sbi->s_groups_count); |
302 |
+ |
303 |
+ return NULL; |
304 |
+ } |
305 |
+@@ -59,10 +58,9 @@ struct ext2_group_desc * ext2_get_group_desc(struct super_block * sb, |
306 |
+ group_desc = block_group >> EXT2_DESC_PER_BLOCK_BITS(sb); |
307 |
+ offset = block_group & (EXT2_DESC_PER_BLOCK(sb) - 1); |
308 |
+ if (!sbi->s_group_desc[group_desc]) { |
309 |
+- ext2_error (sb, "ext2_get_group_desc", |
310 |
+- "Group descriptor not loaded - " |
311 |
+- "block_group = %d, group_desc = %lu, desc = %lu", |
312 |
+- block_group, group_desc, offset); |
313 |
++ WARN(1, "Group descriptor not loaded - " |
314 |
++ "block_group = %d, group_desc = %lu, desc = %lu", |
315 |
++ block_group, group_desc, offset); |
316 |
+ return NULL; |
317 |
+ } |
318 |
+ |
319 |
+diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c |
320 |
+index 4a258065188e1..670e97dd67f06 100644 |
321 |
+--- a/fs/nfsd/nfscache.c |
322 |
++++ b/fs/nfsd/nfscache.c |
323 |
+@@ -173,14 +173,10 @@ int nfsd_reply_cache_init(struct nfsd_net *nn) |
324 |
+ if (status) |
325 |
+ goto out_nomem; |
326 |
+ |
327 |
+- nn->drc_hashtbl = kcalloc(hashsize, |
328 |
+- sizeof(*nn->drc_hashtbl), GFP_KERNEL); |
329 |
+- if (!nn->drc_hashtbl) { |
330 |
+- nn->drc_hashtbl = vzalloc(array_size(hashsize, |
331 |
+- sizeof(*nn->drc_hashtbl))); |
332 |
+- if (!nn->drc_hashtbl) |
333 |
+- goto out_shrinker; |
334 |
+- } |
335 |
++ nn->drc_hashtbl = kvzalloc(array_size(hashsize, |
336 |
++ sizeof(*nn->drc_hashtbl)), GFP_KERNEL); |
337 |
++ if (!nn->drc_hashtbl) |
338 |
++ goto out_shrinker; |
339 |
+ |
340 |
+ for (i = 0; i < hashsize; i++) { |
341 |
+ INIT_LIST_HEAD(&nn->drc_hashtbl[i].lru_head); |
342 |
+diff --git a/include/linux/libata.h b/include/linux/libata.h |
343 |
+index 3c3d8d6b16183..3d5adbaf8214f 100644 |
344 |
+--- a/include/linux/libata.h |
345 |
++++ b/include/linux/libata.h |
346 |
+@@ -423,6 +423,7 @@ enum { |
347 |
+ ATA_HORKAGE_NOTRIM = (1 << 24), /* don't use TRIM */ |
348 |
+ ATA_HORKAGE_MAX_SEC_1024 = (1 << 25), /* Limit max sects to 1024 */ |
349 |
+ ATA_HORKAGE_MAX_TRIM_128M = (1 << 26), /* Limit max trim size to 128M */ |
350 |
++ ATA_HORKAGE_NO_NCQ_ON_ATI = (1 << 27), /* Disable NCQ on ATI chipset */ |
351 |
+ |
352 |
+ /* DMA mask for user DMA control: User visible values; DO NOT |
353 |
+ renumber */ |
354 |
+diff --git a/include/linux/mdio.h b/include/linux/mdio.h |
355 |
+index a7604248777b7..0f1f784de80e9 100644 |
356 |
+--- a/include/linux/mdio.h |
357 |
++++ b/include/linux/mdio.h |
358 |
+@@ -64,6 +64,9 @@ struct mdio_driver { |
359 |
+ |
360 |
+ /* Clears up any memory if needed */ |
361 |
+ void (*remove)(struct mdio_device *mdiodev); |
362 |
++ |
363 |
++ /* Quiesces the device on system shutdown, turns off interrupts etc */ |
364 |
++ void (*shutdown)(struct mdio_device *mdiodev); |
365 |
+ }; |
366 |
+ #define to_mdio_driver(d) \ |
367 |
+ container_of(to_mdio_common_driver(d), struct mdio_driver, mdiodrv) |
368 |
+diff --git a/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c b/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c |
369 |
+index 00bb97d76000f..2cbc09aad7f64 100644 |
370 |
+--- a/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c |
371 |
++++ b/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c |
372 |
+@@ -82,7 +82,8 @@ int get_warnings_count(void) |
373 |
+ FILE *f; |
374 |
+ |
375 |
+ f = popen("dmesg | grep \"WARNING:\" | wc -l", "r"); |
376 |
+- fscanf(f, "%d", &warnings); |
377 |
++ if (fscanf(f, "%d", &warnings) < 1) |
378 |
++ warnings = 0; |
379 |
+ fclose(f); |
380 |
+ |
381 |
+ return warnings; |
382 |
+diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk |
383 |
+index 67386aa3f31d1..8794ce382bf5a 100644 |
384 |
+--- a/tools/testing/selftests/lib.mk |
385 |
++++ b/tools/testing/selftests/lib.mk |
386 |
+@@ -48,6 +48,7 @@ ARCH ?= $(SUBARCH) |
387 |
+ # When local build is done, headers are installed in the default |
388 |
+ # INSTALL_HDR_PATH usr/include. |
389 |
+ .PHONY: khdr |
390 |
++.NOTPARALLEL: |
391 |
+ khdr: |
392 |
+ ifndef KSFT_KHDR_INSTALL_DONE |
393 |
+ ifeq (1,$(DEFAULT_INSTALL_HDR_PATH)) |
394 |
+diff --git a/tools/usb/testusb.c b/tools/usb/testusb.c |
395 |
+index ee8208b2f9460..69c3ead25313d 100644 |
396 |
+--- a/tools/usb/testusb.c |
397 |
++++ b/tools/usb/testusb.c |
398 |
+@@ -265,12 +265,6 @@ nomem: |
399 |
+ } |
400 |
+ |
401 |
+ entry->ifnum = ifnum; |
402 |
+- |
403 |
+- /* FIXME update USBDEVFS_CONNECTINFO so it tells about high speed etc */ |
404 |
+- |
405 |
+- fprintf(stderr, "%s speed\t%s\t%u\n", |
406 |
+- speed(entry->speed), entry->name, entry->ifnum); |
407 |
+- |
408 |
+ entry->next = testdevs; |
409 |
+ testdevs = entry; |
410 |
+ return 0; |
411 |
+@@ -299,6 +293,14 @@ static void *handle_testdev (void *arg) |
412 |
+ return 0; |
413 |
+ } |
414 |
+ |
415 |
++ status = ioctl(fd, USBDEVFS_GET_SPEED, NULL); |
416 |
++ if (status < 0) |
417 |
++ fprintf(stderr, "USBDEVFS_GET_SPEED failed %d\n", status); |
418 |
++ else |
419 |
++ dev->speed = status; |
420 |
++ fprintf(stderr, "%s speed\t%s\t%u\n", |
421 |
++ speed(dev->speed), dev->name, dev->ifnum); |
422 |
++ |
423 |
+ restart: |
424 |
+ for (i = 0; i < TEST_CASES; i++) { |
425 |
+ if (dev->test != -1 && dev->test != i) |
426 |
+diff --git a/tools/vm/page-types.c b/tools/vm/page-types.c |
427 |
+index 58c0eab71bca3..d2e836b2d16b0 100644 |
428 |
+--- a/tools/vm/page-types.c |
429 |
++++ b/tools/vm/page-types.c |
430 |
+@@ -1329,7 +1329,7 @@ int main(int argc, char *argv[]) |
431 |
+ if (opt_list && opt_list_mapcnt) |
432 |
+ kpagecount_fd = checked_open(PROC_KPAGECOUNT, O_RDONLY); |
433 |
+ |
434 |
+- if (opt_mark_idle && opt_file) |
435 |
++ if (opt_mark_idle) |
436 |
+ page_idle_fd = checked_open(SYS_KERNEL_MM_PAGE_IDLE, O_RDWR); |
437 |
+ |
438 |
+ if (opt_list && opt_pid) |
439 |
+diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c |
440 |
+index 77f84cbca7406..f31976010622f 100644 |
441 |
+--- a/virt/kvm/kvm_main.c |
442 |
++++ b/virt/kvm/kvm_main.c |
443 |
+@@ -2470,15 +2470,19 @@ out: |
444 |
+ |
445 |
+ static void shrink_halt_poll_ns(struct kvm_vcpu *vcpu) |
446 |
+ { |
447 |
+- unsigned int old, val, shrink; |
448 |
++ unsigned int old, val, shrink, grow_start; |
449 |
+ |
450 |
+ old = val = vcpu->halt_poll_ns; |
451 |
+ shrink = READ_ONCE(halt_poll_ns_shrink); |
452 |
++ grow_start = READ_ONCE(halt_poll_ns_grow_start); |
453 |
+ if (shrink == 0) |
454 |
+ val = 0; |
455 |
+ else |
456 |
+ val /= shrink; |
457 |
+ |
458 |
++ if (val < grow_start) |
459 |
++ val = 0; |
460 |
++ |
461 |
+ vcpu->halt_poll_ns = val; |
462 |
+ trace_kvm_halt_poll_ns_shrink(vcpu->vcpu_id, val, old); |
463 |
+ } |