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