Gentoo Archives: gentoo-commits

From: Alice Ferrazzi <alicef@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/linux-patches:5.4 commit in: /
Date: Tue, 23 Feb 2021 14:28:40
Message-Id: 1614090493.2ed27787412a1a1c669988e5b36261fac46988c4.alicef@gentoo
1 commit: 2ed27787412a1a1c669988e5b36261fac46988c4
2 Author: Alice Ferrazzi <alicef <AT> gentoo <DOT> org>
3 AuthorDate: Tue Feb 23 14:27:11 2021 +0000
4 Commit: Alice Ferrazzi <alicef <AT> gentoo <DOT> org>
5 CommitDate: Tue Feb 23 14:28:13 2021 +0000
6 URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=2ed27787
7
8 Linux patch 5.4.100
9
10 Signed-off-by: Alice Ferrazzi <alicef <AT> gentoo.org>
11
12 0000_README | 4 +
13 1099_linux-5.4.100.patch | 403 +++++++++++++++++++++++++++++++++++++++++++++++
14 2 files changed, 407 insertions(+)
15
16 diff --git a/0000_README b/0000_README
17 index 3e20dc5..d459040 100644
18 --- a/0000_README
19 +++ b/0000_README
20 @@ -439,6 +439,10 @@ Patch: 1098_linux-5.4.99.patch
21 From: http://www.kernel.org
22 Desc: Linux 5.4.99
23
24 +Patch: 1099_linux-5.4.100.patch
25 +From: http://www.kernel.org
26 +Desc: Linux 5.4.100
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/1099_linux-5.4.100.patch b/1099_linux-5.4.100.patch
33 new file mode 100644
34 index 0000000..66ef005
35 --- /dev/null
36 +++ b/1099_linux-5.4.100.patch
37 @@ -0,0 +1,403 @@
38 +diff --git a/Makefile b/Makefile
39 +index a0491ba1d7593..d0d4beb4f8373 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 = 99
47 ++SUBLEVEL = 100
48 + EXTRAVERSION =
49 + NAME = Kleptomaniac Octopus
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/kvm/svm.c b/arch/x86/kvm/svm.c
69 +index 296b0d7570d06..1da558f28aa57 100644
70 +--- a/arch/x86/kvm/svm.c
71 ++++ b/arch/x86/kvm/svm.c
72 +@@ -7104,7 +7104,6 @@ static int svm_register_enc_region(struct kvm *kvm,
73 + region->uaddr = range->addr;
74 + region->size = range->size;
75 +
76 +- mutex_lock(&kvm->lock);
77 + list_add_tail(&region->list, &sev->regions_list);
78 + mutex_unlock(&kvm->lock);
79 +
80 +diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c
81 +index 0acba2c712ab8..7fe5be8e6d3db 100644
82 +--- a/arch/x86/xen/p2m.c
83 ++++ b/arch/x86/xen/p2m.c
84 +@@ -716,7 +716,8 @@ int set_foreign_p2m_mapping(struct gnttab_map_grant_ref *map_ops,
85 + unsigned long mfn, pfn;
86 +
87 + /* Do not add to override if the map failed. */
88 +- if (map_ops[i].status)
89 ++ if (map_ops[i].status != GNTST_okay ||
90 ++ (kmap_ops && kmap_ops[i].status != GNTST_okay))
91 + continue;
92 +
93 + if (map_ops[i].flags & GNTMAP_contains_pte) {
94 +@@ -754,17 +755,15 @@ int clear_foreign_p2m_mapping(struct gnttab_unmap_grant_ref *unmap_ops,
95 + unsigned long mfn = __pfn_to_mfn(page_to_pfn(pages[i]));
96 + unsigned long pfn = page_to_pfn(pages[i]);
97 +
98 +- if (mfn == INVALID_P2M_ENTRY || !(mfn & FOREIGN_FRAME_BIT)) {
99 ++ if (mfn != INVALID_P2M_ENTRY && (mfn & FOREIGN_FRAME_BIT))
100 ++ set_phys_to_machine(pfn, INVALID_P2M_ENTRY);
101 ++ else
102 + ret = -EINVAL;
103 +- goto out;
104 +- }
105 +-
106 +- set_phys_to_machine(pfn, INVALID_P2M_ENTRY);
107 + }
108 + if (kunmap_ops)
109 + ret = HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref,
110 +- kunmap_ops, count);
111 +-out:
112 ++ kunmap_ops, count) ?: ret;
113 ++
114 + return ret;
115 + }
116 + EXPORT_SYMBOL_GPL(clear_foreign_p2m_mapping);
117 +diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c
118 +index b18f0162cb9c4..208f3eea3641f 100644
119 +--- a/drivers/block/xen-blkback/blkback.c
120 ++++ b/drivers/block/xen-blkback/blkback.c
121 +@@ -850,8 +850,11 @@ again:
122 + pages[i]->page = persistent_gnt->page;
123 + pages[i]->persistent_gnt = persistent_gnt;
124 + } else {
125 +- if (get_free_page(ring, &pages[i]->page))
126 +- goto out_of_memory;
127 ++ if (get_free_page(ring, &pages[i]->page)) {
128 ++ put_free_pages(ring, pages_to_gnt, segs_to_map);
129 ++ ret = -ENOMEM;
130 ++ goto out;
131 ++ }
132 + addr = vaddr(pages[i]->page);
133 + pages_to_gnt[segs_to_map] = pages[i]->page;
134 + pages[i]->persistent_gnt = NULL;
135 +@@ -867,10 +870,8 @@ again:
136 + break;
137 + }
138 +
139 +- if (segs_to_map) {
140 ++ if (segs_to_map)
141 + ret = gnttab_map_refs(map, NULL, pages_to_gnt, segs_to_map);
142 +- BUG_ON(ret);
143 +- }
144 +
145 + /*
146 + * Now swizzle the MFN in our domain with the MFN from the other domain
147 +@@ -885,7 +886,7 @@ again:
148 + pr_debug("invalid buffer -- could not remap it\n");
149 + put_free_pages(ring, &pages[seg_idx]->page, 1);
150 + pages[seg_idx]->handle = BLKBACK_INVALID_HANDLE;
151 +- ret |= 1;
152 ++ ret |= !ret;
153 + goto next;
154 + }
155 + pages[seg_idx]->handle = map[new_map_idx].handle;
156 +@@ -937,17 +938,18 @@ next:
157 + }
158 + segs_to_map = 0;
159 + last_map = map_until;
160 +- if (map_until != num)
161 ++ if (!ret && map_until != num)
162 + goto again;
163 +
164 +- return ret;
165 +-
166 +-out_of_memory:
167 +- pr_alert("%s: out of memory\n", __func__);
168 +- put_free_pages(ring, pages_to_gnt, segs_to_map);
169 +- for (i = last_map; i < num; i++)
170 ++out:
171 ++ for (i = last_map; i < num; i++) {
172 ++ /* Don't zap current batch's valid persistent grants. */
173 ++ if(i >= last_map + segs_to_map)
174 ++ pages[i]->persistent_gnt = NULL;
175 + pages[i]->handle = BLKBACK_INVALID_HANDLE;
176 +- return -ENOMEM;
177 ++ }
178 ++
179 ++ return ret;
180 + }
181 +
182 + static int xen_blkbk_map_seg(struct pending_req *pending_req)
183 +diff --git a/drivers/media/usb/pwc/pwc-if.c b/drivers/media/usb/pwc/pwc-if.c
184 +index 9b76cf133d524..3df7ca2357da8 100644
185 +--- a/drivers/media/usb/pwc/pwc-if.c
186 ++++ b/drivers/media/usb/pwc/pwc-if.c
187 +@@ -147,16 +147,17 @@ static const struct video_device pwc_template = {
188 + /***************************************************************************/
189 + /* Private functions */
190 +
191 +-static void *pwc_alloc_urb_buffer(struct device *dev,
192 ++static void *pwc_alloc_urb_buffer(struct usb_device *dev,
193 + size_t size, dma_addr_t *dma_handle)
194 + {
195 ++ struct device *dmadev = dev->bus->sysdev;
196 + void *buffer = kmalloc(size, GFP_KERNEL);
197 +
198 + if (!buffer)
199 + return NULL;
200 +
201 +- *dma_handle = dma_map_single(dev, buffer, size, DMA_FROM_DEVICE);
202 +- if (dma_mapping_error(dev, *dma_handle)) {
203 ++ *dma_handle = dma_map_single(dmadev, buffer, size, DMA_FROM_DEVICE);
204 ++ if (dma_mapping_error(dmadev, *dma_handle)) {
205 + kfree(buffer);
206 + return NULL;
207 + }
208 +@@ -164,12 +165,14 @@ static void *pwc_alloc_urb_buffer(struct device *dev,
209 + return buffer;
210 + }
211 +
212 +-static void pwc_free_urb_buffer(struct device *dev,
213 ++static void pwc_free_urb_buffer(struct usb_device *dev,
214 + size_t size,
215 + void *buffer,
216 + dma_addr_t dma_handle)
217 + {
218 +- dma_unmap_single(dev, dma_handle, size, DMA_FROM_DEVICE);
219 ++ struct device *dmadev = dev->bus->sysdev;
220 ++
221 ++ dma_unmap_single(dmadev, dma_handle, size, DMA_FROM_DEVICE);
222 + kfree(buffer);
223 + }
224 +
225 +@@ -274,6 +277,7 @@ static void pwc_frame_complete(struct pwc_device *pdev)
226 + static void pwc_isoc_handler(struct urb *urb)
227 + {
228 + struct pwc_device *pdev = (struct pwc_device *)urb->context;
229 ++ struct device *dmadev = urb->dev->bus->sysdev;
230 + int i, fst, flen;
231 + unsigned char *iso_buf = NULL;
232 +
233 +@@ -320,7 +324,7 @@ static void pwc_isoc_handler(struct urb *urb)
234 + /* Reset ISOC error counter. We did get here, after all. */
235 + pdev->visoc_errors = 0;
236 +
237 +- dma_sync_single_for_cpu(&urb->dev->dev,
238 ++ dma_sync_single_for_cpu(dmadev,
239 + urb->transfer_dma,
240 + urb->transfer_buffer_length,
241 + DMA_FROM_DEVICE);
242 +@@ -371,7 +375,7 @@ static void pwc_isoc_handler(struct urb *urb)
243 + pdev->vlast_packet_size = flen;
244 + }
245 +
246 +- dma_sync_single_for_device(&urb->dev->dev,
247 ++ dma_sync_single_for_device(dmadev,
248 + urb->transfer_dma,
249 + urb->transfer_buffer_length,
250 + DMA_FROM_DEVICE);
251 +@@ -453,7 +457,7 @@ retry:
252 + urb->pipe = usb_rcvisocpipe(udev, pdev->vendpoint);
253 + urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
254 + urb->transfer_buffer_length = ISO_BUFFER_SIZE;
255 +- urb->transfer_buffer = pwc_alloc_urb_buffer(&udev->dev,
256 ++ urb->transfer_buffer = pwc_alloc_urb_buffer(udev,
257 + urb->transfer_buffer_length,
258 + &urb->transfer_dma);
259 + if (urb->transfer_buffer == NULL) {
260 +@@ -516,7 +520,7 @@ static void pwc_iso_free(struct pwc_device *pdev)
261 + if (urb) {
262 + PWC_DEBUG_MEMORY("Freeing URB\n");
263 + if (urb->transfer_buffer)
264 +- pwc_free_urb_buffer(&urb->dev->dev,
265 ++ pwc_free_urb_buffer(urb->dev,
266 + urb->transfer_buffer_length,
267 + urb->transfer_buffer,
268 + urb->transfer_dma);
269 +diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
270 +index fa1ac0abc924b..4bfafcd6317f4 100644
271 +--- a/drivers/net/xen-netback/netback.c
272 ++++ b/drivers/net/xen-netback/netback.c
273 +@@ -1335,13 +1335,11 @@ int xenvif_tx_action(struct xenvif_queue *queue, int budget)
274 + return 0;
275 +
276 + gnttab_batch_copy(queue->tx_copy_ops, nr_cops);
277 +- if (nr_mops != 0) {
278 ++ if (nr_mops != 0)
279 + ret = gnttab_map_refs(queue->tx_map_ops,
280 + NULL,
281 + queue->pages_to_map,
282 + nr_mops);
283 +- BUG_ON(ret);
284 +- }
285 +
286 + work_done = xenvif_tx_submit(queue);
287 +
288 +diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c
289 +index 246864bbb3e4e..e953ea34b3e43 100644
290 +--- a/drivers/xen/gntdev.c
291 ++++ b/drivers/xen/gntdev.c
292 +@@ -319,44 +319,47 @@ int gntdev_map_grant_pages(struct gntdev_grant_map *map)
293 + * to the kernel linear addresses of the struct pages.
294 + * These ptes are completely different from the user ptes dealt
295 + * with find_grant_ptes.
296 ++ * Note that GNTMAP_device_map isn't needed here: The
297 ++ * dev_bus_addr output field gets consumed only from ->map_ops,
298 ++ * and by not requesting it when mapping we also avoid needing
299 ++ * to mirror dev_bus_addr into ->unmap_ops (and holding an extra
300 ++ * reference to the page in the hypervisor).
301 + */
302 ++ unsigned int flags = (map->flags & ~GNTMAP_device_map) |
303 ++ GNTMAP_host_map;
304 ++
305 + for (i = 0; i < map->count; i++) {
306 + unsigned long address = (unsigned long)
307 + pfn_to_kaddr(page_to_pfn(map->pages[i]));
308 + BUG_ON(PageHighMem(map->pages[i]));
309 +
310 +- gnttab_set_map_op(&map->kmap_ops[i], address,
311 +- map->flags | GNTMAP_host_map,
312 ++ gnttab_set_map_op(&map->kmap_ops[i], address, flags,
313 + map->grants[i].ref,
314 + map->grants[i].domid);
315 + gnttab_set_unmap_op(&map->kunmap_ops[i], address,
316 +- map->flags | GNTMAP_host_map, -1);
317 ++ flags, -1);
318 + }
319 + }
320 +
321 + pr_debug("map %d+%d\n", map->index, map->count);
322 + err = gnttab_map_refs(map->map_ops, use_ptemod ? map->kmap_ops : NULL,
323 + map->pages, map->count);
324 +- if (err)
325 +- return err;
326 +
327 + for (i = 0; i < map->count; i++) {
328 +- if (map->map_ops[i].status) {
329 ++ if (map->map_ops[i].status == GNTST_okay)
330 ++ map->unmap_ops[i].handle = map->map_ops[i].handle;
331 ++ else if (!err)
332 + err = -EINVAL;
333 +- continue;
334 +- }
335 +
336 +- map->unmap_ops[i].handle = map->map_ops[i].handle;
337 +- if (use_ptemod)
338 +- map->kunmap_ops[i].handle = map->kmap_ops[i].handle;
339 +-#ifdef CONFIG_XEN_GRANT_DMA_ALLOC
340 +- else if (map->dma_vaddr) {
341 +- unsigned long bfn;
342 ++ if (map->flags & GNTMAP_device_map)
343 ++ map->unmap_ops[i].dev_bus_addr = map->map_ops[i].dev_bus_addr;
344 +
345 +- bfn = pfn_to_bfn(page_to_pfn(map->pages[i]));
346 +- map->unmap_ops[i].dev_bus_addr = __pfn_to_phys(bfn);
347 ++ if (use_ptemod) {
348 ++ if (map->kmap_ops[i].status == GNTST_okay)
349 ++ map->kunmap_ops[i].handle = map->kmap_ops[i].handle;
350 ++ else if (!err)
351 ++ err = -EINVAL;
352 + }
353 +-#endif
354 + }
355 + return err;
356 + }
357 +diff --git a/drivers/xen/xen-scsiback.c b/drivers/xen/xen-scsiback.c
358 +index 33d6499d84724..32aba2e8c075f 100644
359 +--- a/drivers/xen/xen-scsiback.c
360 ++++ b/drivers/xen/xen-scsiback.c
361 +@@ -422,12 +422,12 @@ static int scsiback_gnttab_data_map_batch(struct gnttab_map_grant_ref *map,
362 + return 0;
363 +
364 + err = gnttab_map_refs(map, NULL, pg, cnt);
365 +- BUG_ON(err);
366 + for (i = 0; i < cnt; i++) {
367 + if (unlikely(map[i].status != GNTST_okay)) {
368 + pr_err("invalid buffer -- could not remap it\n");
369 + map[i].handle = SCSIBACK_INVALID_HANDLE;
370 +- err = -ENOMEM;
371 ++ if (!err)
372 ++ err = -ENOMEM;
373 + } else {
374 + get_page(pg[i]);
375 + }
376 +diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
377 +index cda5534d3d0e3..7960359dbc700 100644
378 +--- a/fs/btrfs/ctree.h
379 ++++ b/fs/btrfs/ctree.h
380 +@@ -136,9 +136,6 @@ enum {
381 + BTRFS_FS_STATE_DEV_REPLACING,
382 + /* The btrfs_fs_info created for self-tests */
383 + BTRFS_FS_STATE_DUMMY_FS_INFO,
384 +-
385 +- /* Indicate that we can't trust the free space tree for caching yet */
386 +- BTRFS_FS_FREE_SPACE_TREE_UNTRUSTED,
387 + };
388 +
389 + #define BTRFS_BACKREF_REV_MAX 256
390 +@@ -527,6 +524,9 @@ enum {
391 + * so we don't need to offload checksums to workqueues.
392 + */
393 + BTRFS_FS_CSUM_IMPL_FAST,
394 ++
395 ++ /* Indicate that we can't trust the free space tree for caching yet */
396 ++ BTRFS_FS_FREE_SPACE_TREE_UNTRUSTED,
397 + };
398 +
399 + struct btrfs_fs_info {
400 +diff --git a/include/xen/grant_table.h b/include/xen/grant_table.h
401 +index 9bc5bc07d4d3f..a9978350b45b0 100644
402 +--- a/include/xen/grant_table.h
403 ++++ b/include/xen/grant_table.h
404 +@@ -157,6 +157,7 @@ gnttab_set_map_op(struct gnttab_map_grant_ref *map, phys_addr_t addr,
405 + map->flags = flags;
406 + map->ref = ref;
407 + map->dom = domid;
408 ++ map->status = 1; /* arbitrary positive value */
409 + }
410 +
411 + static inline void
412 +diff --git a/net/bridge/br.c b/net/bridge/br.c
413 +index 8a8f9e5f264f2..cccbb9bf3ca4e 100644
414 +--- a/net/bridge/br.c
415 ++++ b/net/bridge/br.c
416 +@@ -43,7 +43,10 @@ static int br_device_event(struct notifier_block *unused, unsigned long event, v
417 +
418 + if (event == NETDEV_REGISTER) {
419 + /* register of bridge completed, add sysfs entries */
420 +- br_sysfs_addbr(dev);
421 ++ err = br_sysfs_addbr(dev);
422 ++ if (err)
423 ++ return notifier_from_errno(err);
424 ++
425 + return NOTIFY_DONE;
426 + }
427 + }
428 +diff --git a/net/qrtr/qrtr.c b/net/qrtr/qrtr.c
429 +index d6d2736ec9273..ef602976bb2c8 100644
430 +--- a/net/qrtr/qrtr.c
431 ++++ b/net/qrtr/qrtr.c
432 +@@ -187,7 +187,7 @@ static int qrtr_node_enqueue(struct qrtr_node *node, struct sk_buff *skb,
433 + hdr->src_port_id = cpu_to_le32(from->sq_port);
434 + if (to->sq_port == QRTR_PORT_CTRL) {
435 + hdr->dst_node_id = cpu_to_le32(node->nid);
436 +- hdr->dst_port_id = cpu_to_le32(QRTR_NODE_BCAST);
437 ++ hdr->dst_port_id = cpu_to_le32(QRTR_PORT_CTRL);
438 + } else {
439 + hdr->dst_node_id = cpu_to_le32(to->sq_node);
440 + hdr->dst_port_id = cpu_to_le32(to->sq_port);