Magellan Linux

Contents of /trunk/kernel-alx/patches-5.4/0251-5.4.152-all-fixes.patch

Parent Directory Parent Directory | Revision Log 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)
-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 }