Gentoo Archives: gentoo-commits

From: Alice Ferrazzi <alicef@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/linux-patches:5.11 commit in: /
Date: Tue, 23 Feb 2021 13:42:31
Message-Id: 1614087733.e1554e1bcc2babe2394f62fd65327583e3ae5d9c.alicef@gentoo
1 commit: e1554e1bcc2babe2394f62fd65327583e3ae5d9c
2 Author: Alice Ferrazzi <alicef <AT> gentoo <DOT> org>
3 AuthorDate: Tue Feb 23 13:42:03 2021 +0000
4 Commit: Alice Ferrazzi <alicef <AT> gentoo <DOT> org>
5 CommitDate: Tue Feb 23 13:42:13 2021 +0000
6 URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=e1554e1b
7
8 Linux patch 5.11.1
9
10 Signed-off-by: Alice Ferrazzi <alicef <AT> gentoo.org>
11
12 0000_README | 4 +
13 1000_linux-5.11.1.patch | 405 ++++++++++++++++++++++++++++++++++++++++++++++++
14 2 files changed, 409 insertions(+)
15
16 diff --git a/0000_README b/0000_README
17 index e856f62..530e7ef 100644
18 --- a/0000_README
19 +++ b/0000_README
20 @@ -43,6 +43,10 @@ EXPERIMENTAL
21 Individual Patch Descriptions:
22 --------------------------------------------------------------------------
23
24 +Patch: 1000_linux-5.11.1.patch
25 +From: http://www.kernel.org
26 +Desc: Linux 5.11.1
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/1000_linux-5.11.1.patch b/1000_linux-5.11.1.patch
33 new file mode 100644
34 index 0000000..54e57fe
35 --- /dev/null
36 +++ b/1000_linux-5.11.1.patch
37 @@ -0,0 +1,405 @@
38 +diff --git a/Makefile b/Makefile
39 +index de1acaefe87e6..0b9ae470a7145 100644
40 +--- a/Makefile
41 ++++ b/Makefile
42 +@@ -1,7 +1,7 @@
43 + # SPDX-License-Identifier: GPL-2.0
44 + VERSION = 5
45 + PATCHLEVEL = 11
46 +-SUBLEVEL = 0
47 ++SUBLEVEL = 1
48 + EXTRAVERSION =
49 + NAME = 💕 Valentine's Day Edition 💕
50 +
51 +diff --git a/arch/arm/xen/p2m.c b/arch/arm/xen/p2m.c
52 +index e52950a43f2ed..fd6e3aafe2724 100644
53 +--- a/arch/arm/xen/p2m.c
54 ++++ b/arch/arm/xen/p2m.c
55 +@@ -95,8 +95,10 @@ int set_foreign_p2m_mapping(struct gnttab_map_grant_ref *map_ops,
56 + for (i = 0; i < count; i++) {
57 + if (map_ops[i].status)
58 + continue;
59 +- set_phys_to_machine(map_ops[i].host_addr >> XEN_PAGE_SHIFT,
60 +- map_ops[i].dev_bus_addr >> XEN_PAGE_SHIFT);
61 ++ if (unlikely(!set_phys_to_machine(map_ops[i].host_addr >> XEN_PAGE_SHIFT,
62 ++ map_ops[i].dev_bus_addr >> XEN_PAGE_SHIFT))) {
63 ++ return -ENOMEM;
64 ++ }
65 + }
66 +
67 + return 0;
68 +diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c
69 +index 3301875dd1965..b5949e5a83ec8 100644
70 +--- a/arch/x86/xen/p2m.c
71 ++++ b/arch/x86/xen/p2m.c
72 +@@ -712,7 +712,8 @@ int set_foreign_p2m_mapping(struct gnttab_map_grant_ref *map_ops,
73 + unsigned long mfn, pfn;
74 +
75 + /* Do not add to override if the map failed. */
76 +- if (map_ops[i].status)
77 ++ if (map_ops[i].status != GNTST_okay ||
78 ++ (kmap_ops && kmap_ops[i].status != GNTST_okay))
79 + continue;
80 +
81 + if (map_ops[i].flags & GNTMAP_contains_pte) {
82 +@@ -750,17 +751,15 @@ int clear_foreign_p2m_mapping(struct gnttab_unmap_grant_ref *unmap_ops,
83 + unsigned long mfn = __pfn_to_mfn(page_to_pfn(pages[i]));
84 + unsigned long pfn = page_to_pfn(pages[i]);
85 +
86 +- if (mfn == INVALID_P2M_ENTRY || !(mfn & FOREIGN_FRAME_BIT)) {
87 ++ if (mfn != INVALID_P2M_ENTRY && (mfn & FOREIGN_FRAME_BIT))
88 ++ set_phys_to_machine(pfn, INVALID_P2M_ENTRY);
89 ++ else
90 + ret = -EINVAL;
91 +- goto out;
92 +- }
93 +-
94 +- set_phys_to_machine(pfn, INVALID_P2M_ENTRY);
95 + }
96 + if (kunmap_ops)
97 + ret = HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref,
98 +- kunmap_ops, count);
99 +-out:
100 ++ kunmap_ops, count) ?: ret;
101 ++
102 + return ret;
103 + }
104 + EXPORT_SYMBOL_GPL(clear_foreign_p2m_mapping);
105 +diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c
106 +index 9ebf53903d7bf..da16121140cab 100644
107 +--- a/drivers/block/xen-blkback/blkback.c
108 ++++ b/drivers/block/xen-blkback/blkback.c
109 +@@ -794,8 +794,13 @@ again:
110 + pages[i]->persistent_gnt = persistent_gnt;
111 + } else {
112 + if (gnttab_page_cache_get(&ring->free_pages,
113 +- &pages[i]->page))
114 +- goto out_of_memory;
115 ++ &pages[i]->page)) {
116 ++ gnttab_page_cache_put(&ring->free_pages,
117 ++ pages_to_gnt,
118 ++ segs_to_map);
119 ++ ret = -ENOMEM;
120 ++ goto out;
121 ++ }
122 + addr = vaddr(pages[i]->page);
123 + pages_to_gnt[segs_to_map] = pages[i]->page;
124 + pages[i]->persistent_gnt = NULL;
125 +@@ -811,10 +816,8 @@ again:
126 + break;
127 + }
128 +
129 +- if (segs_to_map) {
130 ++ if (segs_to_map)
131 + ret = gnttab_map_refs(map, NULL, pages_to_gnt, segs_to_map);
132 +- BUG_ON(ret);
133 +- }
134 +
135 + /*
136 + * Now swizzle the MFN in our domain with the MFN from the other domain
137 +@@ -830,7 +833,7 @@ again:
138 + gnttab_page_cache_put(&ring->free_pages,
139 + &pages[seg_idx]->page, 1);
140 + pages[seg_idx]->handle = BLKBACK_INVALID_HANDLE;
141 +- ret |= 1;
142 ++ ret |= !ret;
143 + goto next;
144 + }
145 + pages[seg_idx]->handle = map[new_map_idx].handle;
146 +@@ -882,17 +885,18 @@ next:
147 + }
148 + segs_to_map = 0;
149 + last_map = map_until;
150 +- if (map_until != num)
151 ++ if (!ret && map_until != num)
152 + goto again;
153 +
154 +- return ret;
155 +-
156 +-out_of_memory:
157 +- pr_alert("%s: out of memory\n", __func__);
158 +- gnttab_page_cache_put(&ring->free_pages, pages_to_gnt, segs_to_map);
159 +- for (i = last_map; i < num; i++)
160 ++out:
161 ++ for (i = last_map; i < num; i++) {
162 ++ /* Don't zap current batch's valid persistent grants. */
163 ++ if(i >= last_map + segs_to_map)
164 ++ pages[i]->persistent_gnt = NULL;
165 + pages[i]->handle = BLKBACK_INVALID_HANDLE;
166 +- return -ENOMEM;
167 ++ }
168 ++
169 ++ return ret;
170 + }
171 +
172 + static int xen_blkbk_map_seg(struct pending_req *pending_req)
173 +diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
174 +index 03b83aa912779..1b690164ab5b9 100644
175 +--- a/drivers/bluetooth/btusb.c
176 ++++ b/drivers/bluetooth/btusb.c
177 +@@ -506,7 +506,6 @@ static const struct dmi_system_id btusb_needs_reset_resume_table[] = {
178 + #define BTUSB_HW_RESET_ACTIVE 12
179 + #define BTUSB_TX_WAIT_VND_EVT 13
180 + #define BTUSB_WAKEUP_DISABLE 14
181 +-#define BTUSB_USE_ALT1_FOR_WBS 15
182 +
183 + struct btusb_data {
184 + struct hci_dev *hdev;
185 +@@ -1736,15 +1735,12 @@ static void btusb_work(struct work_struct *work)
186 + new_alts = data->sco_num;
187 + }
188 + } else if (data->air_mode == HCI_NOTIFY_ENABLE_SCO_TRANSP) {
189 +- /* Check if Alt 6 is supported for Transparent audio */
190 +- if (btusb_find_altsetting(data, 6)) {
191 +- data->usb_alt6_packet_flow = true;
192 +- new_alts = 6;
193 +- } else if (test_bit(BTUSB_USE_ALT1_FOR_WBS, &data->flags)) {
194 +- new_alts = 1;
195 +- } else {
196 +- bt_dev_err(hdev, "Device does not support ALT setting 6");
197 +- }
198 ++ /* Bluetooth USB spec recommends alt 6 (63 bytes), but
199 ++ * many adapters do not support it. Alt 1 appears to
200 ++ * work for all adapters that do not have alt 6, and
201 ++ * which work with WBS at all.
202 ++ */
203 ++ new_alts = btusb_find_altsetting(data, 6) ? 6 : 1;
204 + }
205 +
206 + if (btusb_switch_alt_setting(hdev, new_alts) < 0)
207 +@@ -4548,10 +4544,6 @@ static int btusb_probe(struct usb_interface *intf,
208 + * (DEVICE_REMOTE_WAKEUP)
209 + */
210 + set_bit(BTUSB_WAKEUP_DISABLE, &data->flags);
211 +- if (btusb_find_altsetting(data, 1))
212 +- set_bit(BTUSB_USE_ALT1_FOR_WBS, &data->flags);
213 +- else
214 +- bt_dev_err(hdev, "Device does not support ALT setting 1");
215 + }
216 +
217 + if (!reset)
218 +diff --git a/drivers/media/usb/pwc/pwc-if.c b/drivers/media/usb/pwc/pwc-if.c
219 +index 61869636ec613..5e3339cc31c07 100644
220 +--- a/drivers/media/usb/pwc/pwc-if.c
221 ++++ b/drivers/media/usb/pwc/pwc-if.c
222 +@@ -155,16 +155,17 @@ static const struct video_device pwc_template = {
223 + /***************************************************************************/
224 + /* Private functions */
225 +
226 +-static void *pwc_alloc_urb_buffer(struct device *dev,
227 ++static void *pwc_alloc_urb_buffer(struct usb_device *dev,
228 + size_t size, dma_addr_t *dma_handle)
229 + {
230 ++ struct device *dmadev = dev->bus->sysdev;
231 + void *buffer = kmalloc(size, GFP_KERNEL);
232 +
233 + if (!buffer)
234 + return NULL;
235 +
236 +- *dma_handle = dma_map_single(dev, buffer, size, DMA_FROM_DEVICE);
237 +- if (dma_mapping_error(dev, *dma_handle)) {
238 ++ *dma_handle = dma_map_single(dmadev, buffer, size, DMA_FROM_DEVICE);
239 ++ if (dma_mapping_error(dmadev, *dma_handle)) {
240 + kfree(buffer);
241 + return NULL;
242 + }
243 +@@ -172,12 +173,14 @@ static void *pwc_alloc_urb_buffer(struct device *dev,
244 + return buffer;
245 + }
246 +
247 +-static void pwc_free_urb_buffer(struct device *dev,
248 ++static void pwc_free_urb_buffer(struct usb_device *dev,
249 + size_t size,
250 + void *buffer,
251 + dma_addr_t dma_handle)
252 + {
253 +- dma_unmap_single(dev, dma_handle, size, DMA_FROM_DEVICE);
254 ++ struct device *dmadev = dev->bus->sysdev;
255 ++
256 ++ dma_unmap_single(dmadev, dma_handle, size, DMA_FROM_DEVICE);
257 + kfree(buffer);
258 + }
259 +
260 +@@ -282,6 +285,7 @@ static void pwc_frame_complete(struct pwc_device *pdev)
261 + static void pwc_isoc_handler(struct urb *urb)
262 + {
263 + struct pwc_device *pdev = (struct pwc_device *)urb->context;
264 ++ struct device *dmadev = urb->dev->bus->sysdev;
265 + int i, fst, flen;
266 + unsigned char *iso_buf = NULL;
267 +
268 +@@ -328,7 +332,7 @@ static void pwc_isoc_handler(struct urb *urb)
269 + /* Reset ISOC error counter. We did get here, after all. */
270 + pdev->visoc_errors = 0;
271 +
272 +- dma_sync_single_for_cpu(&urb->dev->dev,
273 ++ dma_sync_single_for_cpu(dmadev,
274 + urb->transfer_dma,
275 + urb->transfer_buffer_length,
276 + DMA_FROM_DEVICE);
277 +@@ -379,7 +383,7 @@ static void pwc_isoc_handler(struct urb *urb)
278 + pdev->vlast_packet_size = flen;
279 + }
280 +
281 +- dma_sync_single_for_device(&urb->dev->dev,
282 ++ dma_sync_single_for_device(dmadev,
283 + urb->transfer_dma,
284 + urb->transfer_buffer_length,
285 + DMA_FROM_DEVICE);
286 +@@ -461,7 +465,7 @@ retry:
287 + urb->pipe = usb_rcvisocpipe(udev, pdev->vendpoint);
288 + urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
289 + urb->transfer_buffer_length = ISO_BUFFER_SIZE;
290 +- urb->transfer_buffer = pwc_alloc_urb_buffer(&udev->dev,
291 ++ urb->transfer_buffer = pwc_alloc_urb_buffer(udev,
292 + urb->transfer_buffer_length,
293 + &urb->transfer_dma);
294 + if (urb->transfer_buffer == NULL) {
295 +@@ -524,7 +528,7 @@ static void pwc_iso_free(struct pwc_device *pdev)
296 + if (urb) {
297 + PWC_DEBUG_MEMORY("Freeing URB\n");
298 + if (urb->transfer_buffer)
299 +- pwc_free_urb_buffer(&urb->dev->dev,
300 ++ pwc_free_urb_buffer(urb->dev,
301 + urb->transfer_buffer_length,
302 + urb->transfer_buffer,
303 + urb->transfer_dma);
304 +diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
305 +index bc3421d145768..423667b837510 100644
306 +--- a/drivers/net/xen-netback/netback.c
307 ++++ b/drivers/net/xen-netback/netback.c
308 +@@ -1342,13 +1342,11 @@ int xenvif_tx_action(struct xenvif_queue *queue, int budget)
309 + return 0;
310 +
311 + gnttab_batch_copy(queue->tx_copy_ops, nr_cops);
312 +- if (nr_mops != 0) {
313 ++ if (nr_mops != 0)
314 + ret = gnttab_map_refs(queue->tx_map_ops,
315 + NULL,
316 + queue->pages_to_map,
317 + nr_mops);
318 +- BUG_ON(ret);
319 +- }
320 +
321 + work_done = xenvif_tx_submit(queue);
322 +
323 +diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
324 +index 816e709afa561..082da38762fc7 100644
325 +--- a/drivers/tty/tty_io.c
326 ++++ b/drivers/tty/tty_io.c
327 +@@ -962,11 +962,14 @@ static inline ssize_t do_tty_write(
328 + if (ret <= 0)
329 + break;
330 +
331 ++ written += ret;
332 ++ if (ret > size)
333 ++ break;
334 ++
335 + /* FIXME! Have Al check this! */
336 + if (ret != size)
337 + iov_iter_revert(from, size-ret);
338 +
339 +- written += ret;
340 + count -= ret;
341 + if (!count)
342 + break;
343 +diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c
344 +index a36b71286bcf8..5447c5156b2e6 100644
345 +--- a/drivers/xen/gntdev.c
346 ++++ b/drivers/xen/gntdev.c
347 +@@ -309,44 +309,47 @@ int gntdev_map_grant_pages(struct gntdev_grant_map *map)
348 + * to the kernel linear addresses of the struct pages.
349 + * These ptes are completely different from the user ptes dealt
350 + * with find_grant_ptes.
351 ++ * Note that GNTMAP_device_map isn't needed here: The
352 ++ * dev_bus_addr output field gets consumed only from ->map_ops,
353 ++ * and by not requesting it when mapping we also avoid needing
354 ++ * to mirror dev_bus_addr into ->unmap_ops (and holding an extra
355 ++ * reference to the page in the hypervisor).
356 + */
357 ++ unsigned int flags = (map->flags & ~GNTMAP_device_map) |
358 ++ GNTMAP_host_map;
359 ++
360 + for (i = 0; i < map->count; i++) {
361 + unsigned long address = (unsigned long)
362 + pfn_to_kaddr(page_to_pfn(map->pages[i]));
363 + BUG_ON(PageHighMem(map->pages[i]));
364 +
365 +- gnttab_set_map_op(&map->kmap_ops[i], address,
366 +- map->flags | GNTMAP_host_map,
367 ++ gnttab_set_map_op(&map->kmap_ops[i], address, flags,
368 + map->grants[i].ref,
369 + map->grants[i].domid);
370 + gnttab_set_unmap_op(&map->kunmap_ops[i], address,
371 +- map->flags | GNTMAP_host_map, -1);
372 ++ flags, -1);
373 + }
374 + }
375 +
376 + pr_debug("map %d+%d\n", map->index, map->count);
377 + err = gnttab_map_refs(map->map_ops, use_ptemod ? map->kmap_ops : NULL,
378 + map->pages, map->count);
379 +- if (err)
380 +- return err;
381 +
382 + for (i = 0; i < map->count; i++) {
383 +- if (map->map_ops[i].status) {
384 ++ if (map->map_ops[i].status == GNTST_okay)
385 ++ map->unmap_ops[i].handle = map->map_ops[i].handle;
386 ++ else if (!err)
387 + err = -EINVAL;
388 +- continue;
389 +- }
390 +
391 +- map->unmap_ops[i].handle = map->map_ops[i].handle;
392 +- if (use_ptemod)
393 +- map->kunmap_ops[i].handle = map->kmap_ops[i].handle;
394 +-#ifdef CONFIG_XEN_GRANT_DMA_ALLOC
395 +- else if (map->dma_vaddr) {
396 +- unsigned long bfn;
397 ++ if (map->flags & GNTMAP_device_map)
398 ++ map->unmap_ops[i].dev_bus_addr = map->map_ops[i].dev_bus_addr;
399 +
400 +- bfn = pfn_to_bfn(page_to_pfn(map->pages[i]));
401 +- map->unmap_ops[i].dev_bus_addr = __pfn_to_phys(bfn);
402 ++ if (use_ptemod) {
403 ++ if (map->kmap_ops[i].status == GNTST_okay)
404 ++ map->kunmap_ops[i].handle = map->kmap_ops[i].handle;
405 ++ else if (!err)
406 ++ err = -EINVAL;
407 + }
408 +-#endif
409 + }
410 + return err;
411 + }
412 +diff --git a/drivers/xen/xen-scsiback.c b/drivers/xen/xen-scsiback.c
413 +index 862162dca33cf..9cd4fe8ce6803 100644
414 +--- a/drivers/xen/xen-scsiback.c
415 ++++ b/drivers/xen/xen-scsiback.c
416 +@@ -386,12 +386,12 @@ static int scsiback_gnttab_data_map_batch(struct gnttab_map_grant_ref *map,
417 + return 0;
418 +
419 + err = gnttab_map_refs(map, NULL, pg, cnt);
420 +- BUG_ON(err);
421 + for (i = 0; i < cnt; i++) {
422 + if (unlikely(map[i].status != GNTST_okay)) {
423 + pr_err("invalid buffer -- could not remap it\n");
424 + map[i].handle = SCSIBACK_INVALID_HANDLE;
425 +- err = -ENOMEM;
426 ++ if (!err)
427 ++ err = -ENOMEM;
428 + } else {
429 + get_page(pg[i]);
430 + }
431 +diff --git a/include/xen/grant_table.h b/include/xen/grant_table.h
432 +index b9c937b3a1499..0b1182a3cf412 100644
433 +--- a/include/xen/grant_table.h
434 ++++ b/include/xen/grant_table.h
435 +@@ -157,6 +157,7 @@ gnttab_set_map_op(struct gnttab_map_grant_ref *map, phys_addr_t addr,
436 + map->flags = flags;
437 + map->ref = ref;
438 + map->dom = domid;
439 ++ map->status = 1; /* arbitrary positive value */
440 + }
441 +
442 + static inline void