Gentoo Archives: gentoo-commits

From: Mike Pagano <mpagano@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/linux-patches:4.14 commit in: /
Date: Sat, 09 Oct 2021 21:34:38
Message-Id: 1633815258.eafb61c3f9def6fa38bdd9e58ea165020fa13918.mpagano@gentoo
1 commit: eafb61c3f9def6fa38bdd9e58ea165020fa13918
2 Author: Mike Pagano <mpagano <AT> gentoo <DOT> org>
3 AuthorDate: Sat Oct 9 21:34:18 2021 +0000
4 Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org>
5 CommitDate: Sat Oct 9 21:34:18 2021 +0000
6 URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=eafb61c3
7
8 Linux patch 4.14.250
9
10 Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>
11
12 0000_README | 4 +
13 1249_linux-4.14.250.patch | 412 ++++++++++++++++++++++++++++++++++++++++++++++
14 2 files changed, 416 insertions(+)
15
16 diff --git a/0000_README b/0000_README
17 index 38fd372..2892a8e 100644
18 --- a/0000_README
19 +++ b/0000_README
20 @@ -1043,6 +1043,10 @@ Patch: 1248_linux-4.14.249.patch
21 From: https://www.kernel.org
22 Desc: Linux 4.14.249
23
24 +Patch: 1249_linux-4.14.250.patch
25 +From: https://www.kernel.org
26 +Desc: Linux 4.14.250
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/1249_linux-4.14.250.patch b/1249_linux-4.14.250.patch
33 new file mode 100644
34 index 0000000..f9fb9a8
35 --- /dev/null
36 +++ b/1249_linux-4.14.250.patch
37 @@ -0,0 +1,412 @@
38 +diff --git a/Makefile b/Makefile
39 +index f7559e82d514f..7fed41bc6a4f6 100644
40 +--- a/Makefile
41 ++++ b/Makefile
42 +@@ -1,7 +1,7 @@
43 + # SPDX-License-Identifier: GPL-2.0
44 + VERSION = 4
45 + PATCHLEVEL = 14
46 +-SUBLEVEL = 249
47 ++SUBLEVEL = 250
48 + EXTRAVERSION =
49 + NAME = Petit Gorille
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/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
67 +index 8310beab6b2f8..61dbe6fc29b91 100644
68 +--- a/drivers/ata/libata-core.c
69 ++++ b/drivers/ata/libata-core.c
70 +@@ -2276,6 +2276,25 @@ static void ata_dev_config_ncq_prio(struct ata_device *dev)
71 +
72 + }
73 +
74 ++static bool ata_dev_check_adapter(struct ata_device *dev,
75 ++ unsigned short vendor_id)
76 ++{
77 ++ struct pci_dev *pcidev = NULL;
78 ++ struct device *parent_dev = NULL;
79 ++
80 ++ for (parent_dev = dev->tdev.parent; parent_dev != NULL;
81 ++ parent_dev = parent_dev->parent) {
82 ++ if (dev_is_pci(parent_dev)) {
83 ++ pcidev = to_pci_dev(parent_dev);
84 ++ if (pcidev->vendor == vendor_id)
85 ++ return true;
86 ++ break;
87 ++ }
88 ++ }
89 ++
90 ++ return false;
91 ++}
92 ++
93 + static int ata_dev_config_ncq(struct ata_device *dev,
94 + char *desc, size_t desc_sz)
95 + {
96 +@@ -2292,6 +2311,13 @@ static int ata_dev_config_ncq(struct ata_device *dev,
97 + snprintf(desc, desc_sz, "NCQ (not used)");
98 + return 0;
99 + }
100 ++
101 ++ if (dev->horkage & ATA_HORKAGE_NO_NCQ_ON_ATI &&
102 ++ ata_dev_check_adapter(dev, PCI_VENDOR_ID_ATI)) {
103 ++ snprintf(desc, desc_sz, "NCQ (not used)");
104 ++ return 0;
105 ++ }
106 ++
107 + if (ap->flags & ATA_FLAG_NCQ) {
108 + hdepth = min(ap->scsi_host->can_queue, ATA_MAX_QUEUE - 1);
109 + dev->flags |= ATA_DFLAG_NCQ;
110 +@@ -4565,9 +4591,11 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
111 + { "Samsung SSD 850*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
112 + ATA_HORKAGE_ZERO_AFTER_TRIM, },
113 + { "Samsung SSD 860*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
114 +- ATA_HORKAGE_ZERO_AFTER_TRIM, },
115 ++ ATA_HORKAGE_ZERO_AFTER_TRIM |
116 ++ ATA_HORKAGE_NO_NCQ_ON_ATI, },
117 + { "Samsung SSD 870*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
118 +- ATA_HORKAGE_ZERO_AFTER_TRIM, },
119 ++ ATA_HORKAGE_ZERO_AFTER_TRIM |
120 ++ ATA_HORKAGE_NO_NCQ_ON_ATI, },
121 + { "FCCT*M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
122 + ATA_HORKAGE_ZERO_AFTER_TRIM, },
123 +
124 +@@ -6860,6 +6888,8 @@ static int __init ata_parse_force_one(char **cur,
125 + { "ncq", .horkage_off = ATA_HORKAGE_NONCQ },
126 + { "noncqtrim", .horkage_on = ATA_HORKAGE_NO_NCQ_TRIM },
127 + { "ncqtrim", .horkage_off = ATA_HORKAGE_NO_NCQ_TRIM },
128 ++ { "noncqati", .horkage_on = ATA_HORKAGE_NO_NCQ_ON_ATI },
129 ++ { "ncqati", .horkage_off = ATA_HORKAGE_NO_NCQ_ON_ATI },
130 + { "dump_id", .horkage_on = ATA_HORKAGE_DUMP_ID },
131 + { "pio0", .xfer_mask = 1 << (ATA_SHIFT_PIO + 0) },
132 + { "pio1", .xfer_mask = 1 << (ATA_SHIFT_PIO + 1) },
133 +diff --git a/drivers/net/phy/mdio_device.c b/drivers/net/phy/mdio_device.c
134 +index e24f28924af89..5265180251ea9 100644
135 +--- a/drivers/net/phy/mdio_device.c
136 ++++ b/drivers/net/phy/mdio_device.c
137 +@@ -146,6 +146,16 @@ static int mdio_remove(struct device *dev)
138 + return 0;
139 + }
140 +
141 ++static void mdio_shutdown(struct device *dev)
142 ++{
143 ++ struct mdio_device *mdiodev = to_mdio_device(dev);
144 ++ struct device_driver *drv = mdiodev->dev.driver;
145 ++ struct mdio_driver *mdiodrv = to_mdio_driver(drv);
146 ++
147 ++ if (mdiodrv->shutdown)
148 ++ mdiodrv->shutdown(mdiodev);
149 ++}
150 ++
151 + /**
152 + * mdio_driver_register - register an mdio_driver with the MDIO layer
153 + * @new_driver: new mdio_driver to register
154 +@@ -160,6 +170,7 @@ int mdio_driver_register(struct mdio_driver *drv)
155 + mdiodrv->driver.bus = &mdio_bus_type;
156 + mdiodrv->driver.probe = mdio_probe;
157 + mdiodrv->driver.remove = mdio_remove;
158 ++ mdiodrv->driver.shutdown = mdio_shutdown;
159 +
160 + retval = driver_register(&mdiodrv->driver);
161 + if (retval) {
162 +diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
163 +index ad555a9a3eca1..e1d6dbb4b770d 100644
164 +--- a/drivers/net/xen-netback/netback.c
165 ++++ b/drivers/net/xen-netback/netback.c
166 +@@ -492,7 +492,7 @@ check_frags:
167 + * the header's copy failed, and they are
168 + * sharing a slot, send an error
169 + */
170 +- if (i == 0 && sharedslot)
171 ++ if (i == 0 && !first_shinfo && sharedslot)
172 + xenvif_idx_release(queue, pending_idx,
173 + XEN_NETIF_RSP_ERROR);
174 + else
175 +diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
176 +index 49d0720a0b7d5..e490cbdaad9bf 100644
177 +--- a/drivers/scsi/sd.c
178 ++++ b/drivers/scsi/sd.c
179 +@@ -3454,15 +3454,16 @@ static int sd_probe(struct device *dev)
180 + }
181 +
182 + device_initialize(&sdkp->dev);
183 +- sdkp->dev.parent = dev;
184 ++ sdkp->dev.parent = get_device(dev);
185 + sdkp->dev.class = &sd_disk_class;
186 + dev_set_name(&sdkp->dev, "%s", dev_name(dev));
187 +
188 + error = device_add(&sdkp->dev);
189 +- if (error)
190 +- goto out_free_index;
191 ++ if (error) {
192 ++ put_device(&sdkp->dev);
193 ++ goto out;
194 ++ }
195 +
196 +- get_device(dev);
197 + dev_set_drvdata(dev, sdkp);
198 +
199 + get_device(&sdkp->dev); /* prevent release before async_schedule */
200 +diff --git a/drivers/scsi/ses.c b/drivers/scsi/ses.c
201 +index 62f04c0511cfe..4b993607887cf 100644
202 +--- a/drivers/scsi/ses.c
203 ++++ b/drivers/scsi/ses.c
204 +@@ -103,9 +103,16 @@ static int ses_recv_diag(struct scsi_device *sdev, int page_code,
205 + 0
206 + };
207 + unsigned char recv_page_code;
208 ++ unsigned int retries = SES_RETRIES;
209 ++ struct scsi_sense_hdr sshdr;
210 ++
211 ++ do {
212 ++ ret = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buf, bufflen,
213 ++ &sshdr, SES_TIMEOUT, 1, NULL);
214 ++ } while (ret > 0 && --retries && scsi_sense_valid(&sshdr) &&
215 ++ (sshdr.sense_key == NOT_READY ||
216 ++ (sshdr.sense_key == UNIT_ATTENTION && sshdr.asc == 0x29)));
217 +
218 +- ret = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buf, bufflen,
219 +- NULL, SES_TIMEOUT, SES_RETRIES, NULL);
220 + if (unlikely(ret))
221 + return ret;
222 +
223 +@@ -137,9 +144,16 @@ static int ses_send_diag(struct scsi_device *sdev, int page_code,
224 + bufflen & 0xff,
225 + 0
226 + };
227 ++ struct scsi_sense_hdr sshdr;
228 ++ unsigned int retries = SES_RETRIES;
229 ++
230 ++ do {
231 ++ result = scsi_execute_req(sdev, cmd, DMA_TO_DEVICE, buf, bufflen,
232 ++ &sshdr, SES_TIMEOUT, 1, NULL);
233 ++ } while (result > 0 && --retries && scsi_sense_valid(&sshdr) &&
234 ++ (sshdr.sense_key == NOT_READY ||
235 ++ (sshdr.sense_key == UNIT_ATTENTION && sshdr.asc == 0x29)));
236 +
237 +- result = scsi_execute_req(sdev, cmd, DMA_TO_DEVICE, buf, bufflen,
238 +- NULL, SES_TIMEOUT, SES_RETRIES, NULL);
239 + if (result)
240 + sdev_printk(KERN_ERR, sdev, "SEND DIAGNOSTIC result: %8x\n",
241 + result);
242 +diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
243 +index ef7f3b013fcba..ba7528916da4c 100644
244 +--- a/drivers/usb/dwc2/hcd.c
245 ++++ b/drivers/usb/dwc2/hcd.c
246 +@@ -5229,6 +5229,10 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg)
247 + hcd->has_tt = 1;
248 +
249 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
250 ++ if (!res) {
251 ++ retval = -EINVAL;
252 ++ goto error1;
253 ++ }
254 + hcd->rsrc_start = res->start;
255 + hcd->rsrc_len = resource_size(res);
256 +
257 +diff --git a/fs/ext2/balloc.c b/fs/ext2/balloc.c
258 +index e1b3724bebf23..ccd5a7016c196 100644
259 +--- a/fs/ext2/balloc.c
260 ++++ b/fs/ext2/balloc.c
261 +@@ -48,10 +48,9 @@ struct ext2_group_desc * ext2_get_group_desc(struct super_block * sb,
262 + struct ext2_sb_info *sbi = EXT2_SB(sb);
263 +
264 + if (block_group >= sbi->s_groups_count) {
265 +- ext2_error (sb, "ext2_get_group_desc",
266 +- "block_group >= groups_count - "
267 +- "block_group = %d, groups_count = %lu",
268 +- block_group, sbi->s_groups_count);
269 ++ WARN(1, "block_group >= groups_count - "
270 ++ "block_group = %d, groups_count = %lu",
271 ++ block_group, sbi->s_groups_count);
272 +
273 + return NULL;
274 + }
275 +@@ -59,10 +58,9 @@ struct ext2_group_desc * ext2_get_group_desc(struct super_block * sb,
276 + group_desc = block_group >> EXT2_DESC_PER_BLOCK_BITS(sb);
277 + offset = block_group & (EXT2_DESC_PER_BLOCK(sb) - 1);
278 + if (!sbi->s_group_desc[group_desc]) {
279 +- ext2_error (sb, "ext2_get_group_desc",
280 +- "Group descriptor not loaded - "
281 +- "block_group = %d, group_desc = %lu, desc = %lu",
282 +- block_group, group_desc, offset);
283 ++ WARN(1, "Group descriptor not loaded - "
284 ++ "block_group = %d, group_desc = %lu, desc = %lu",
285 ++ block_group, group_desc, offset);
286 + return NULL;
287 + }
288 +
289 +diff --git a/include/linux/libata.h b/include/linux/libata.h
290 +index c5c34fd78c5a5..23bc460e6d863 100644
291 +--- a/include/linux/libata.h
292 ++++ b/include/linux/libata.h
293 +@@ -441,6 +441,7 @@ enum {
294 + ATA_HORKAGE_NOTRIM = (1 << 24), /* don't use TRIM */
295 + ATA_HORKAGE_MAX_SEC_1024 = (1 << 25), /* Limit max sects to 1024 */
296 + ATA_HORKAGE_MAX_TRIM_128M = (1 << 26), /* Limit max trim size to 128M */
297 ++ ATA_HORKAGE_NO_NCQ_ON_ATI = (1 << 27), /* Disable NCQ on ATI chipset */
298 +
299 + /* DMA mask for user DMA control: User visible values; DO NOT
300 + renumber */
301 +diff --git a/include/linux/mdio.h b/include/linux/mdio.h
302 +index ca08ab16ecdc9..780c4859ce2da 100644
303 +--- a/include/linux/mdio.h
304 ++++ b/include/linux/mdio.h
305 +@@ -63,6 +63,9 @@ struct mdio_driver {
306 +
307 + /* Clears up any memory if needed */
308 + void (*remove)(struct mdio_device *mdiodev);
309 ++
310 ++ /* Quiesces the device on system shutdown, turns off interrupts etc */
311 ++ void (*shutdown)(struct mdio_device *mdiodev);
312 + };
313 + #define to_mdio_driver(d) \
314 + container_of(to_mdio_common_driver(d), struct mdio_driver, mdiodrv)
315 +diff --git a/include/linux/timerqueue.h b/include/linux/timerqueue.h
316 +index 78b8cc73f12fc..aff122f1062a8 100644
317 +--- a/include/linux/timerqueue.h
318 ++++ b/include/linux/timerqueue.h
319 +@@ -12,8 +12,7 @@ struct timerqueue_node {
320 + };
321 +
322 + struct timerqueue_head {
323 +- struct rb_root head;
324 +- struct timerqueue_node *next;
325 ++ struct rb_root_cached rb_root;
326 + };
327 +
328 +
329 +@@ -29,13 +28,14 @@ extern struct timerqueue_node *timerqueue_iterate_next(
330 + *
331 + * @head: head of timerqueue
332 + *
333 +- * Returns a pointer to the timer node that has the
334 +- * earliest expiration time.
335 ++ * Returns a pointer to the timer node that has the earliest expiration time.
336 + */
337 + static inline
338 + struct timerqueue_node *timerqueue_getnext(struct timerqueue_head *head)
339 + {
340 +- return head->next;
341 ++ struct rb_node *leftmost = rb_first_cached(&head->rb_root);
342 ++
343 ++ return rb_entry(leftmost, struct timerqueue_node, node);
344 + }
345 +
346 + static inline void timerqueue_init(struct timerqueue_node *node)
347 +@@ -45,7 +45,6 @@ static inline void timerqueue_init(struct timerqueue_node *node)
348 +
349 + static inline void timerqueue_init_head(struct timerqueue_head *head)
350 + {
351 +- head->head = RB_ROOT;
352 +- head->next = NULL;
353 ++ head->rb_root = RB_ROOT_CACHED;
354 + }
355 + #endif /* _LINUX_TIMERQUEUE_H */
356 +diff --git a/lib/timerqueue.c b/lib/timerqueue.c
357 +index 4a720ed4fdafd..7f8324a639c85 100644
358 +--- a/lib/timerqueue.c
359 ++++ b/lib/timerqueue.c
360 +@@ -38,9 +38,10 @@
361 + */
362 + bool timerqueue_add(struct timerqueue_head *head, struct timerqueue_node *node)
363 + {
364 +- struct rb_node **p = &head->head.rb_node;
365 ++ struct rb_node **p = &head->rb_root.rb_root.rb_node;
366 + struct rb_node *parent = NULL;
367 +- struct timerqueue_node *ptr;
368 ++ struct timerqueue_node *ptr;
369 ++ bool leftmost = true;
370 +
371 + /* Make sure we don't add nodes that are already added */
372 + WARN_ON_ONCE(!RB_EMPTY_NODE(&node->node));
373 +@@ -48,19 +49,17 @@ bool timerqueue_add(struct timerqueue_head *head, struct timerqueue_node *node)
374 + while (*p) {
375 + parent = *p;
376 + ptr = rb_entry(parent, struct timerqueue_node, node);
377 +- if (node->expires < ptr->expires)
378 ++ if (node->expires < ptr->expires) {
379 + p = &(*p)->rb_left;
380 +- else
381 ++ } else {
382 + p = &(*p)->rb_right;
383 ++ leftmost = false;
384 ++ }
385 + }
386 + rb_link_node(&node->node, parent, p);
387 +- rb_insert_color(&node->node, &head->head);
388 ++ rb_insert_color_cached(&node->node, &head->rb_root, leftmost);
389 +
390 +- if (!head->next || node->expires < head->next->expires) {
391 +- head->next = node;
392 +- return true;
393 +- }
394 +- return false;
395 ++ return leftmost;
396 + }
397 + EXPORT_SYMBOL_GPL(timerqueue_add);
398 +
399 +@@ -76,15 +75,10 @@ bool timerqueue_del(struct timerqueue_head *head, struct timerqueue_node *node)
400 + {
401 + WARN_ON_ONCE(RB_EMPTY_NODE(&node->node));
402 +
403 +- /* update next pointer */
404 +- if (head->next == node) {
405 +- struct rb_node *rbn = rb_next(&node->node);
406 +-
407 +- head->next = rb_entry_safe(rbn, struct timerqueue_node, node);
408 +- }
409 +- rb_erase(&node->node, &head->head);
410 ++ rb_erase_cached(&node->node, &head->rb_root);
411 + RB_CLEAR_NODE(&node->node);
412 +- return head->next != NULL;
413 ++
414 ++ return !RB_EMPTY_ROOT(&head->rb_root.rb_root);
415 + }
416 + EXPORT_SYMBOL_GPL(timerqueue_del);
417 +
418 +diff --git a/tools/usb/testusb.c b/tools/usb/testusb.c
419 +index 2d89b5f686b14..791aadef2d597 100644
420 +--- a/tools/usb/testusb.c
421 ++++ b/tools/usb/testusb.c
422 +@@ -278,12 +278,6 @@ nomem:
423 + }
424 +
425 + entry->ifnum = ifnum;
426 +-
427 +- /* FIXME update USBDEVFS_CONNECTINFO so it tells about high speed etc */
428 +-
429 +- fprintf(stderr, "%s speed\t%s\t%u\n",
430 +- speed(entry->speed), entry->name, entry->ifnum);
431 +-
432 + entry->next = testdevs;
433 + testdevs = entry;
434 + return 0;
435 +@@ -312,6 +306,14 @@ static void *handle_testdev (void *arg)
436 + return 0;
437 + }
438 +
439 ++ status = ioctl(fd, USBDEVFS_GET_SPEED, NULL);
440 ++ if (status < 0)
441 ++ fprintf(stderr, "USBDEVFS_GET_SPEED failed %d\n", status);
442 ++ else
443 ++ dev->speed = status;
444 ++ fprintf(stderr, "%s speed\t%s\t%u\n",
445 ++ speed(dev->speed), dev->name, dev->ifnum);
446 ++
447 + restart:
448 + for (i = 0; i < TEST_CASES; i++) {
449 + if (dev->test != -1 && dev->test != i)