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(®ion->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); |