Magellan Linux

Contents of /trunk/kernel-alx/patches-4.14/0158-4.14.59-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3238 - (show annotations) (download)
Fri Nov 9 12:14:58 2018 UTC (5 years, 5 months ago) by niro
File size: 73835 byte(s)
-added up to patches-4.14.79
1 diff --git a/Makefile b/Makefile
2 index ffc9b4e3867e..81b0e99dce80 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,7 +1,7 @@
6 # SPDX-License-Identifier: GPL-2.0
7 VERSION = 4
8 PATCHLEVEL = 14
9 -SUBLEVEL = 58
10 +SUBLEVEL = 59
11 EXTRAVERSION =
12 NAME = Petit Gorille
13
14 @@ -642,6 +642,7 @@ KBUILD_CFLAGS += $(call cc-disable-warning,frame-address,)
15 KBUILD_CFLAGS += $(call cc-disable-warning, format-truncation)
16 KBUILD_CFLAGS += $(call cc-disable-warning, format-overflow)
17 KBUILD_CFLAGS += $(call cc-disable-warning, int-in-bool-context)
18 +KBUILD_CFLAGS += $(call cc-disable-warning, attribute-alias)
19
20 ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
21 KBUILD_CFLAGS += $(call cc-option,-Oz,-Os)
22 diff --git a/arch/mips/ath79/common.c b/arch/mips/ath79/common.c
23 index 10a405d593df..c782b10ddf50 100644
24 --- a/arch/mips/ath79/common.c
25 +++ b/arch/mips/ath79/common.c
26 @@ -58,7 +58,7 @@ EXPORT_SYMBOL_GPL(ath79_ddr_ctrl_init);
27
28 void ath79_ddr_wb_flush(u32 reg)
29 {
30 - void __iomem *flush_reg = ath79_ddr_wb_flush_base + reg;
31 + void __iomem *flush_reg = ath79_ddr_wb_flush_base + (reg * 4);
32
33 /* Flush the DDR write buffer. */
34 __raw_writel(0x1, flush_reg);
35 diff --git a/arch/mips/pci/pci.c b/arch/mips/pci/pci.c
36 index 9632436d74d7..c2e94cf5ecda 100644
37 --- a/arch/mips/pci/pci.c
38 +++ b/arch/mips/pci/pci.c
39 @@ -54,5 +54,5 @@ void pci_resource_to_user(const struct pci_dev *dev, int bar,
40 phys_addr_t size = resource_size(rsrc);
41
42 *start = fixup_bigphys_addr(rsrc->start, size);
43 - *end = rsrc->start + size;
44 + *end = rsrc->start + size - 1;
45 }
46 diff --git a/arch/powerpc/include/asm/mmu_context.h b/arch/powerpc/include/asm/mmu_context.h
47 index 44fdf4786638..6f67ff5a5267 100644
48 --- a/arch/powerpc/include/asm/mmu_context.h
49 +++ b/arch/powerpc/include/asm/mmu_context.h
50 @@ -35,9 +35,9 @@ extern struct mm_iommu_table_group_mem_t *mm_iommu_lookup_rm(
51 extern struct mm_iommu_table_group_mem_t *mm_iommu_find(struct mm_struct *mm,
52 unsigned long ua, unsigned long entries);
53 extern long mm_iommu_ua_to_hpa(struct mm_iommu_table_group_mem_t *mem,
54 - unsigned long ua, unsigned long *hpa);
55 + unsigned long ua, unsigned int pageshift, unsigned long *hpa);
56 extern long mm_iommu_ua_to_hpa_rm(struct mm_iommu_table_group_mem_t *mem,
57 - unsigned long ua, unsigned long *hpa);
58 + unsigned long ua, unsigned int pageshift, unsigned long *hpa);
59 extern long mm_iommu_mapped_inc(struct mm_iommu_table_group_mem_t *mem);
60 extern void mm_iommu_mapped_dec(struct mm_iommu_table_group_mem_t *mem);
61 #endif
62 diff --git a/arch/powerpc/kvm/book3s_64_vio.c b/arch/powerpc/kvm/book3s_64_vio.c
63 index 4dffa611376d..e14cec6bc339 100644
64 --- a/arch/powerpc/kvm/book3s_64_vio.c
65 +++ b/arch/powerpc/kvm/book3s_64_vio.c
66 @@ -433,7 +433,7 @@ long kvmppc_tce_iommu_map(struct kvm *kvm, struct iommu_table *tbl,
67 /* This only handles v2 IOMMU type, v1 is handled via ioctl() */
68 return H_TOO_HARD;
69
70 - if (WARN_ON_ONCE(mm_iommu_ua_to_hpa(mem, ua, &hpa)))
71 + if (WARN_ON_ONCE(mm_iommu_ua_to_hpa(mem, ua, tbl->it_page_shift, &hpa)))
72 return H_HARDWARE;
73
74 if (mm_iommu_mapped_inc(mem))
75 diff --git a/arch/powerpc/kvm/book3s_64_vio_hv.c b/arch/powerpc/kvm/book3s_64_vio_hv.c
76 index c32e9bfe75b1..648cf6c01348 100644
77 --- a/arch/powerpc/kvm/book3s_64_vio_hv.c
78 +++ b/arch/powerpc/kvm/book3s_64_vio_hv.c
79 @@ -262,7 +262,8 @@ static long kvmppc_rm_tce_iommu_map(struct kvm *kvm, struct iommu_table *tbl,
80 if (!mem)
81 return H_TOO_HARD;
82
83 - if (WARN_ON_ONCE_RM(mm_iommu_ua_to_hpa_rm(mem, ua, &hpa)))
84 + if (WARN_ON_ONCE_RM(mm_iommu_ua_to_hpa_rm(mem, ua, tbl->it_page_shift,
85 + &hpa)))
86 return H_HARDWARE;
87
88 pua = (void *) vmalloc_to_phys(pua);
89 @@ -431,7 +432,8 @@ long kvmppc_rm_h_put_tce_indirect(struct kvm_vcpu *vcpu,
90
91 mem = mm_iommu_lookup_rm(vcpu->kvm->mm, ua, IOMMU_PAGE_SIZE_4K);
92 if (mem)
93 - prereg = mm_iommu_ua_to_hpa_rm(mem, ua, &tces) == 0;
94 + prereg = mm_iommu_ua_to_hpa_rm(mem, ua,
95 + IOMMU_PAGE_SHIFT_4K, &tces) == 0;
96 }
97
98 if (!prereg) {
99 diff --git a/arch/powerpc/mm/mmu_context_iommu.c b/arch/powerpc/mm/mmu_context_iommu.c
100 index e0a2d8e806ed..816055927ee4 100644
101 --- a/arch/powerpc/mm/mmu_context_iommu.c
102 +++ b/arch/powerpc/mm/mmu_context_iommu.c
103 @@ -19,6 +19,7 @@
104 #include <linux/hugetlb.h>
105 #include <linux/swap.h>
106 #include <asm/mmu_context.h>
107 +#include <asm/pte-walk.h>
108
109 static DEFINE_MUTEX(mem_list_mutex);
110
111 @@ -27,6 +28,7 @@ struct mm_iommu_table_group_mem_t {
112 struct rcu_head rcu;
113 unsigned long used;
114 atomic64_t mapped;
115 + unsigned int pageshift;
116 u64 ua; /* userspace address */
117 u64 entries; /* number of entries in hpas[] */
118 u64 *hpas; /* vmalloc'ed */
119 @@ -126,6 +128,8 @@ long mm_iommu_get(struct mm_struct *mm, unsigned long ua, unsigned long entries,
120 {
121 struct mm_iommu_table_group_mem_t *mem;
122 long i, j, ret = 0, locked_entries = 0;
123 + unsigned int pageshift;
124 + unsigned long flags;
125 struct page *page = NULL;
126
127 mutex_lock(&mem_list_mutex);
128 @@ -160,6 +164,12 @@ long mm_iommu_get(struct mm_struct *mm, unsigned long ua, unsigned long entries,
129 goto unlock_exit;
130 }
131
132 + /*
133 + * For a starting point for a maximum page size calculation
134 + * we use @ua and @entries natural alignment to allow IOMMU pages
135 + * smaller than huge pages but still bigger than PAGE_SIZE.
136 + */
137 + mem->pageshift = __ffs(ua | (entries << PAGE_SHIFT));
138 mem->hpas = vzalloc(entries * sizeof(mem->hpas[0]));
139 if (!mem->hpas) {
140 kfree(mem);
141 @@ -200,6 +210,23 @@ long mm_iommu_get(struct mm_struct *mm, unsigned long ua, unsigned long entries,
142 }
143 }
144 populate:
145 + pageshift = PAGE_SHIFT;
146 + if (PageCompound(page)) {
147 + pte_t *pte;
148 + struct page *head = compound_head(page);
149 + unsigned int compshift = compound_order(head);
150 +
151 + local_irq_save(flags); /* disables as well */
152 + pte = find_linux_pte(mm->pgd, ua, NULL, &pageshift);
153 + local_irq_restore(flags);
154 +
155 + /* Double check it is still the same pinned page */
156 + if (pte && pte_page(*pte) == head &&
157 + pageshift == compshift)
158 + pageshift = max_t(unsigned int, pageshift,
159 + PAGE_SHIFT);
160 + }
161 + mem->pageshift = min(mem->pageshift, pageshift);
162 mem->hpas[i] = page_to_pfn(page) << PAGE_SHIFT;
163 }
164
165 @@ -350,7 +377,7 @@ struct mm_iommu_table_group_mem_t *mm_iommu_find(struct mm_struct *mm,
166 EXPORT_SYMBOL_GPL(mm_iommu_find);
167
168 long mm_iommu_ua_to_hpa(struct mm_iommu_table_group_mem_t *mem,
169 - unsigned long ua, unsigned long *hpa)
170 + unsigned long ua, unsigned int pageshift, unsigned long *hpa)
171 {
172 const long entry = (ua - mem->ua) >> PAGE_SHIFT;
173 u64 *va = &mem->hpas[entry];
174 @@ -358,6 +385,9 @@ long mm_iommu_ua_to_hpa(struct mm_iommu_table_group_mem_t *mem,
175 if (entry >= mem->entries)
176 return -EFAULT;
177
178 + if (pageshift > mem->pageshift)
179 + return -EFAULT;
180 +
181 *hpa = *va | (ua & ~PAGE_MASK);
182
183 return 0;
184 @@ -365,7 +395,7 @@ long mm_iommu_ua_to_hpa(struct mm_iommu_table_group_mem_t *mem,
185 EXPORT_SYMBOL_GPL(mm_iommu_ua_to_hpa);
186
187 long mm_iommu_ua_to_hpa_rm(struct mm_iommu_table_group_mem_t *mem,
188 - unsigned long ua, unsigned long *hpa)
189 + unsigned long ua, unsigned int pageshift, unsigned long *hpa)
190 {
191 const long entry = (ua - mem->ua) >> PAGE_SHIFT;
192 void *va = &mem->hpas[entry];
193 @@ -374,6 +404,9 @@ long mm_iommu_ua_to_hpa_rm(struct mm_iommu_table_group_mem_t *mem,
194 if (entry >= mem->entries)
195 return -EFAULT;
196
197 + if (pageshift > mem->pageshift)
198 + return -EFAULT;
199 +
200 pa = (void *) vmalloc_to_phys(va);
201 if (!pa)
202 return -EFAULT;
203 diff --git a/arch/x86/xen/xen-pvh.S b/arch/x86/xen/xen-pvh.S
204 index e1a5fbeae08d..5d7554c025fd 100644
205 --- a/arch/x86/xen/xen-pvh.S
206 +++ b/arch/x86/xen/xen-pvh.S
207 @@ -54,6 +54,9 @@
208 * charge of setting up it's own stack, GDT and IDT.
209 */
210
211 +#define PVH_GDT_ENTRY_CANARY 4
212 +#define PVH_CANARY_SEL (PVH_GDT_ENTRY_CANARY * 8)
213 +
214 ENTRY(pvh_start_xen)
215 cld
216
217 @@ -98,6 +101,12 @@ ENTRY(pvh_start_xen)
218 /* 64-bit entry point. */
219 .code64
220 1:
221 + /* Set base address in stack canary descriptor. */
222 + mov $MSR_GS_BASE,%ecx
223 + mov $_pa(canary), %eax
224 + xor %edx, %edx
225 + wrmsr
226 +
227 call xen_prepare_pvh
228
229 /* startup_64 expects boot_params in %rsi. */
230 @@ -107,6 +116,17 @@ ENTRY(pvh_start_xen)
231
232 #else /* CONFIG_X86_64 */
233
234 + /* Set base address in stack canary descriptor. */
235 + movl $_pa(gdt_start),%eax
236 + movl $_pa(canary),%ecx
237 + movw %cx, (PVH_GDT_ENTRY_CANARY * 8) + 2(%eax)
238 + shrl $16, %ecx
239 + movb %cl, (PVH_GDT_ENTRY_CANARY * 8) + 4(%eax)
240 + movb %ch, (PVH_GDT_ENTRY_CANARY * 8) + 7(%eax)
241 +
242 + mov $PVH_CANARY_SEL,%eax
243 + mov %eax,%gs
244 +
245 call mk_early_pgtbl_32
246
247 mov $_pa(initial_page_table), %eax
248 @@ -150,9 +170,13 @@ gdt_start:
249 .quad GDT_ENTRY(0xc09a, 0, 0xfffff) /* __KERNEL_CS */
250 #endif
251 .quad GDT_ENTRY(0xc092, 0, 0xfffff) /* __KERNEL_DS */
252 + .quad GDT_ENTRY(0x4090, 0, 0x18) /* PVH_CANARY_SEL */
253 gdt_end:
254
255 - .balign 4
256 + .balign 16
257 +canary:
258 + .fill 48, 1, 0
259 +
260 early_stack:
261 .fill 256, 1, 0
262 early_stack_end:
263 diff --git a/drivers/base/dd.c b/drivers/base/dd.c
264 index ad44b40fe284..55fc31f6fe7f 100644
265 --- a/drivers/base/dd.c
266 +++ b/drivers/base/dd.c
267 @@ -401,14 +401,6 @@ re_probe:
268 goto probe_failed;
269 }
270
271 - /*
272 - * Ensure devices are listed in devices_kset in correct order
273 - * It's important to move Dev to the end of devices_kset before
274 - * calling .probe, because it could be recursive and parent Dev
275 - * should always go first
276 - */
277 - devices_kset_move_last(dev);
278 -
279 if (dev->bus->probe) {
280 ret = dev->bus->probe(dev);
281 if (ret)
282 diff --git a/drivers/gpu/drm/nouveau/dispnv04/disp.c b/drivers/gpu/drm/nouveau/dispnv04/disp.c
283 index 5b9d549aa791..e7926da59214 100644
284 --- a/drivers/gpu/drm/nouveau/dispnv04/disp.c
285 +++ b/drivers/gpu/drm/nouveau/dispnv04/disp.c
286 @@ -55,6 +55,9 @@ nv04_display_create(struct drm_device *dev)
287 nouveau_display(dev)->init = nv04_display_init;
288 nouveau_display(dev)->fini = nv04_display_fini;
289
290 + /* Pre-nv50 doesn't support atomic, so don't expose the ioctls */
291 + dev->driver->driver_features &= ~DRIVER_ATOMIC;
292 +
293 nouveau_hw_save_vga_fonts(dev, 1);
294
295 nv04_crtc_create(dev, 0);
296 diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
297 index 595630d1fb9e..362a34cb435d 100644
298 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
299 +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
300 @@ -79,6 +79,10 @@ MODULE_PARM_DESC(modeset, "enable driver (default: auto, "
301 int nouveau_modeset = -1;
302 module_param_named(modeset, nouveau_modeset, int, 0400);
303
304 +MODULE_PARM_DESC(atomic, "Expose atomic ioctl (default: disabled)");
305 +static int nouveau_atomic = 0;
306 +module_param_named(atomic, nouveau_atomic, int, 0400);
307 +
308 MODULE_PARM_DESC(runpm, "disable (0), force enable (1), optimus only default (-1)");
309 static int nouveau_runtime_pm = -1;
310 module_param_named(runpm, nouveau_runtime_pm, int, 0400);
311 @@ -383,6 +387,9 @@ static int nouveau_drm_probe(struct pci_dev *pdev,
312
313 pci_set_master(pdev);
314
315 + if (nouveau_atomic)
316 + driver_pci.driver_features |= DRIVER_ATOMIC;
317 +
318 ret = drm_get_pci_dev(pdev, pent, &driver_pci);
319 if (ret) {
320 nvkm_device_del(&device);
321 diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
322 index a29474528e85..926ec51ba5be 100644
323 --- a/drivers/gpu/drm/nouveau/nv50_display.c
324 +++ b/drivers/gpu/drm/nouveau/nv50_display.c
325 @@ -4150,7 +4150,7 @@ nv50_disp_atomic_commit(struct drm_device *dev,
326 nv50_disp_atomic_commit_tail(state);
327
328 drm_for_each_crtc(crtc, dev) {
329 - if (crtc->state->enable) {
330 + if (crtc->state->active) {
331 if (!drm->have_disp_power_ref) {
332 drm->have_disp_power_ref = true;
333 return 0;
334 @@ -4398,10 +4398,6 @@ nv50_display_destroy(struct drm_device *dev)
335 kfree(disp);
336 }
337
338 -MODULE_PARM_DESC(atomic, "Expose atomic ioctl (default: disabled)");
339 -static int nouveau_atomic = 0;
340 -module_param_named(atomic, nouveau_atomic, int, 0400);
341 -
342 int
343 nv50_display_create(struct drm_device *dev)
344 {
345 @@ -4426,8 +4422,6 @@ nv50_display_create(struct drm_device *dev)
346 disp->disp = &nouveau_display(dev)->disp;
347 dev->mode_config.funcs = &nv50_disp_func;
348 dev->driver->driver_features |= DRIVER_PREFER_XBGR_30BPP;
349 - if (nouveau_atomic)
350 - dev->driver->driver_features |= DRIVER_ATOMIC;
351
352 /* small shared memory area we use for notifiers and semaphores */
353 ret = nouveau_bo_new(&drm->client, 4096, 0x1000, TTM_PL_FLAG_VRAM,
354 diff --git a/drivers/net/bonding/bond_options.c b/drivers/net/bonding/bond_options.c
355 index 61084ba69a99..3d154eb63dcf 100644
356 --- a/drivers/net/bonding/bond_options.c
357 +++ b/drivers/net/bonding/bond_options.c
358 @@ -743,15 +743,20 @@ const struct bond_option *bond_opt_get(unsigned int option)
359 static int bond_option_mode_set(struct bonding *bond,
360 const struct bond_opt_value *newval)
361 {
362 - if (!bond_mode_uses_arp(newval->value) && bond->params.arp_interval) {
363 - netdev_dbg(bond->dev, "%s mode is incompatible with arp monitoring, start mii monitoring\n",
364 - newval->string);
365 - /* disable arp monitoring */
366 - bond->params.arp_interval = 0;
367 - /* set miimon to default value */
368 - bond->params.miimon = BOND_DEFAULT_MIIMON;
369 - netdev_dbg(bond->dev, "Setting MII monitoring interval to %d\n",
370 - bond->params.miimon);
371 + if (!bond_mode_uses_arp(newval->value)) {
372 + if (bond->params.arp_interval) {
373 + netdev_dbg(bond->dev, "%s mode is incompatible with arp monitoring, start mii monitoring\n",
374 + newval->string);
375 + /* disable arp monitoring */
376 + bond->params.arp_interval = 0;
377 + }
378 +
379 + if (!bond->params.miimon) {
380 + /* set miimon to default value */
381 + bond->params.miimon = BOND_DEFAULT_MIIMON;
382 + netdev_dbg(bond->dev, "Setting MII monitoring interval to %d\n",
383 + bond->params.miimon);
384 + }
385 }
386
387 if (newval->value == BOND_MODE_ALB)
388 diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
389 index 5d4e61741476..ca3fa82316c2 100644
390 --- a/drivers/net/can/m_can/m_can.c
391 +++ b/drivers/net/can/m_can/m_can.c
392 @@ -1073,7 +1073,8 @@ static void m_can_chip_config(struct net_device *dev)
393
394 } else {
395 /* Version 3.1.x or 3.2.x */
396 - cccr &= ~(CCCR_TEST | CCCR_MON | CCCR_BRSE | CCCR_FDOE);
397 + cccr &= ~(CCCR_TEST | CCCR_MON | CCCR_BRSE | CCCR_FDOE |
398 + CCCR_NISO);
399
400 /* Only 3.2.x has NISO Bit implemented */
401 if (priv->can.ctrlmode & CAN_CTRLMODE_FD_NON_ISO)
402 diff --git a/drivers/net/can/peak_canfd/peak_pciefd_main.c b/drivers/net/can/peak_canfd/peak_pciefd_main.c
403 index 3c51a884db87..fa689854f16b 100644
404 --- a/drivers/net/can/peak_canfd/peak_pciefd_main.c
405 +++ b/drivers/net/can/peak_canfd/peak_pciefd_main.c
406 @@ -58,6 +58,10 @@ MODULE_LICENSE("GPL v2");
407 #define PCIEFD_REG_SYS_VER1 0x0040 /* version reg #1 */
408 #define PCIEFD_REG_SYS_VER2 0x0044 /* version reg #2 */
409
410 +#define PCIEFD_FW_VERSION(x, y, z) (((u32)(x) << 24) | \
411 + ((u32)(y) << 16) | \
412 + ((u32)(z) << 8))
413 +
414 /* System Control Registers Bits */
415 #define PCIEFD_SYS_CTL_TS_RST 0x00000001 /* timestamp clock */
416 #define PCIEFD_SYS_CTL_CLK_EN 0x00000002 /* system clock */
417 @@ -783,6 +787,21 @@ static int peak_pciefd_probe(struct pci_dev *pdev,
418 "%ux CAN-FD PCAN-PCIe FPGA v%u.%u.%u:\n", can_count,
419 hw_ver_major, hw_ver_minor, hw_ver_sub);
420
421 +#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
422 + /* FW < v3.3.0 DMA logic doesn't handle correctly the mix of 32-bit and
423 + * 64-bit logical addresses: this workaround forces usage of 32-bit
424 + * DMA addresses only when such a fw is detected.
425 + */
426 + if (PCIEFD_FW_VERSION(hw_ver_major, hw_ver_minor, hw_ver_sub) <
427 + PCIEFD_FW_VERSION(3, 3, 0)) {
428 + err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
429 + if (err)
430 + dev_warn(&pdev->dev,
431 + "warning: can't set DMA mask %llxh (err %d)\n",
432 + DMA_BIT_MASK(32), err);
433 + }
434 +#endif
435 +
436 /* stop system clock */
437 pciefd_sys_writereg(pciefd, PCIEFD_SYS_CTL_CLK_EN,
438 PCIEFD_REG_SYS_CTL_CLR);
439 diff --git a/drivers/net/can/xilinx_can.c b/drivers/net/can/xilinx_can.c
440 index 89aec07c225f..5a24039733ef 100644
441 --- a/drivers/net/can/xilinx_can.c
442 +++ b/drivers/net/can/xilinx_can.c
443 @@ -2,6 +2,7 @@
444 *
445 * Copyright (C) 2012 - 2014 Xilinx, Inc.
446 * Copyright (C) 2009 PetaLogix. All rights reserved.
447 + * Copyright (C) 2017 Sandvik Mining and Construction Oy
448 *
449 * Description:
450 * This driver is developed for Axi CAN IP and for Zynq CANPS Controller.
451 @@ -25,8 +26,10 @@
452 #include <linux/module.h>
453 #include <linux/netdevice.h>
454 #include <linux/of.h>
455 +#include <linux/of_device.h>
456 #include <linux/platform_device.h>
457 #include <linux/skbuff.h>
458 +#include <linux/spinlock.h>
459 #include <linux/string.h>
460 #include <linux/types.h>
461 #include <linux/can/dev.h>
462 @@ -101,7 +104,7 @@ enum xcan_reg {
463 #define XCAN_INTR_ALL (XCAN_IXR_TXOK_MASK | XCAN_IXR_BSOFF_MASK |\
464 XCAN_IXR_WKUP_MASK | XCAN_IXR_SLP_MASK | \
465 XCAN_IXR_RXNEMP_MASK | XCAN_IXR_ERROR_MASK | \
466 - XCAN_IXR_ARBLST_MASK | XCAN_IXR_RXOK_MASK)
467 + XCAN_IXR_RXOFLW_MASK | XCAN_IXR_ARBLST_MASK)
468
469 /* CAN register bit shift - XCAN_<REG>_<BIT>_SHIFT */
470 #define XCAN_BTR_SJW_SHIFT 7 /* Synchronous jump width */
471 @@ -118,6 +121,7 @@ enum xcan_reg {
472 /**
473 * struct xcan_priv - This definition define CAN driver instance
474 * @can: CAN private data structure.
475 + * @tx_lock: Lock for synchronizing TX interrupt handling
476 * @tx_head: Tx CAN packets ready to send on the queue
477 * @tx_tail: Tx CAN packets successfully sended on the queue
478 * @tx_max: Maximum number packets the driver can send
479 @@ -132,6 +136,7 @@ enum xcan_reg {
480 */
481 struct xcan_priv {
482 struct can_priv can;
483 + spinlock_t tx_lock;
484 unsigned int tx_head;
485 unsigned int tx_tail;
486 unsigned int tx_max;
487 @@ -159,6 +164,11 @@ static const struct can_bittiming_const xcan_bittiming_const = {
488 .brp_inc = 1,
489 };
490
491 +#define XCAN_CAP_WATERMARK 0x0001
492 +struct xcan_devtype_data {
493 + unsigned int caps;
494 +};
495 +
496 /**
497 * xcan_write_reg_le - Write a value to the device register little endian
498 * @priv: Driver private data structure
499 @@ -238,6 +248,10 @@ static int set_reset_mode(struct net_device *ndev)
500 usleep_range(500, 10000);
501 }
502
503 + /* reset clears FIFOs */
504 + priv->tx_head = 0;
505 + priv->tx_tail = 0;
506 +
507 return 0;
508 }
509
510 @@ -392,6 +406,7 @@ static int xcan_start_xmit(struct sk_buff *skb, struct net_device *ndev)
511 struct net_device_stats *stats = &ndev->stats;
512 struct can_frame *cf = (struct can_frame *)skb->data;
513 u32 id, dlc, data[2] = {0, 0};
514 + unsigned long flags;
515
516 if (can_dropped_invalid_skb(ndev, skb))
517 return NETDEV_TX_OK;
518 @@ -439,6 +454,9 @@ static int xcan_start_xmit(struct sk_buff *skb, struct net_device *ndev)
519 data[1] = be32_to_cpup((__be32 *)(cf->data + 4));
520
521 can_put_echo_skb(skb, ndev, priv->tx_head % priv->tx_max);
522 +
523 + spin_lock_irqsave(&priv->tx_lock, flags);
524 +
525 priv->tx_head++;
526
527 /* Write the Frame to Xilinx CAN TX FIFO */
528 @@ -454,10 +472,16 @@ static int xcan_start_xmit(struct sk_buff *skb, struct net_device *ndev)
529 stats->tx_bytes += cf->can_dlc;
530 }
531
532 + /* Clear TX-FIFO-empty interrupt for xcan_tx_interrupt() */
533 + if (priv->tx_max > 1)
534 + priv->write_reg(priv, XCAN_ICR_OFFSET, XCAN_IXR_TXFEMP_MASK);
535 +
536 /* Check if the TX buffer is full */
537 if ((priv->tx_head - priv->tx_tail) == priv->tx_max)
538 netif_stop_queue(ndev);
539
540 + spin_unlock_irqrestore(&priv->tx_lock, flags);
541 +
542 return NETDEV_TX_OK;
543 }
544
545 @@ -529,6 +553,123 @@ static int xcan_rx(struct net_device *ndev)
546 return 1;
547 }
548
549 +/**
550 + * xcan_current_error_state - Get current error state from HW
551 + * @ndev: Pointer to net_device structure
552 + *
553 + * Checks the current CAN error state from the HW. Note that this
554 + * only checks for ERROR_PASSIVE and ERROR_WARNING.
555 + *
556 + * Return:
557 + * ERROR_PASSIVE or ERROR_WARNING if either is active, ERROR_ACTIVE
558 + * otherwise.
559 + */
560 +static enum can_state xcan_current_error_state(struct net_device *ndev)
561 +{
562 + struct xcan_priv *priv = netdev_priv(ndev);
563 + u32 status = priv->read_reg(priv, XCAN_SR_OFFSET);
564 +
565 + if ((status & XCAN_SR_ESTAT_MASK) == XCAN_SR_ESTAT_MASK)
566 + return CAN_STATE_ERROR_PASSIVE;
567 + else if (status & XCAN_SR_ERRWRN_MASK)
568 + return CAN_STATE_ERROR_WARNING;
569 + else
570 + return CAN_STATE_ERROR_ACTIVE;
571 +}
572 +
573 +/**
574 + * xcan_set_error_state - Set new CAN error state
575 + * @ndev: Pointer to net_device structure
576 + * @new_state: The new CAN state to be set
577 + * @cf: Error frame to be populated or NULL
578 + *
579 + * Set new CAN error state for the device, updating statistics and
580 + * populating the error frame if given.
581 + */
582 +static void xcan_set_error_state(struct net_device *ndev,
583 + enum can_state new_state,
584 + struct can_frame *cf)
585 +{
586 + struct xcan_priv *priv = netdev_priv(ndev);
587 + u32 ecr = priv->read_reg(priv, XCAN_ECR_OFFSET);
588 + u32 txerr = ecr & XCAN_ECR_TEC_MASK;
589 + u32 rxerr = (ecr & XCAN_ECR_REC_MASK) >> XCAN_ESR_REC_SHIFT;
590 +
591 + priv->can.state = new_state;
592 +
593 + if (cf) {
594 + cf->can_id |= CAN_ERR_CRTL;
595 + cf->data[6] = txerr;
596 + cf->data[7] = rxerr;
597 + }
598 +
599 + switch (new_state) {
600 + case CAN_STATE_ERROR_PASSIVE:
601 + priv->can.can_stats.error_passive++;
602 + if (cf)
603 + cf->data[1] = (rxerr > 127) ?
604 + CAN_ERR_CRTL_RX_PASSIVE :
605 + CAN_ERR_CRTL_TX_PASSIVE;
606 + break;
607 + case CAN_STATE_ERROR_WARNING:
608 + priv->can.can_stats.error_warning++;
609 + if (cf)
610 + cf->data[1] |= (txerr > rxerr) ?
611 + CAN_ERR_CRTL_TX_WARNING :
612 + CAN_ERR_CRTL_RX_WARNING;
613 + break;
614 + case CAN_STATE_ERROR_ACTIVE:
615 + if (cf)
616 + cf->data[1] |= CAN_ERR_CRTL_ACTIVE;
617 + break;
618 + default:
619 + /* non-ERROR states are handled elsewhere */
620 + WARN_ON(1);
621 + break;
622 + }
623 +}
624 +
625 +/**
626 + * xcan_update_error_state_after_rxtx - Update CAN error state after RX/TX
627 + * @ndev: Pointer to net_device structure
628 + *
629 + * If the device is in a ERROR-WARNING or ERROR-PASSIVE state, check if
630 + * the performed RX/TX has caused it to drop to a lesser state and set
631 + * the interface state accordingly.
632 + */
633 +static void xcan_update_error_state_after_rxtx(struct net_device *ndev)
634 +{
635 + struct xcan_priv *priv = netdev_priv(ndev);
636 + enum can_state old_state = priv->can.state;
637 + enum can_state new_state;
638 +
639 + /* changing error state due to successful frame RX/TX can only
640 + * occur from these states
641 + */
642 + if (old_state != CAN_STATE_ERROR_WARNING &&
643 + old_state != CAN_STATE_ERROR_PASSIVE)
644 + return;
645 +
646 + new_state = xcan_current_error_state(ndev);
647 +
648 + if (new_state != old_state) {
649 + struct sk_buff *skb;
650 + struct can_frame *cf;
651 +
652 + skb = alloc_can_err_skb(ndev, &cf);
653 +
654 + xcan_set_error_state(ndev, new_state, skb ? cf : NULL);
655 +
656 + if (skb) {
657 + struct net_device_stats *stats = &ndev->stats;
658 +
659 + stats->rx_packets++;
660 + stats->rx_bytes += cf->can_dlc;
661 + netif_rx(skb);
662 + }
663 + }
664 +}
665 +
666 /**
667 * xcan_err_interrupt - error frame Isr
668 * @ndev: net_device pointer
669 @@ -544,16 +685,12 @@ static void xcan_err_interrupt(struct net_device *ndev, u32 isr)
670 struct net_device_stats *stats = &ndev->stats;
671 struct can_frame *cf;
672 struct sk_buff *skb;
673 - u32 err_status, status, txerr = 0, rxerr = 0;
674 + u32 err_status;
675
676 skb = alloc_can_err_skb(ndev, &cf);
677
678 err_status = priv->read_reg(priv, XCAN_ESR_OFFSET);
679 priv->write_reg(priv, XCAN_ESR_OFFSET, err_status);
680 - txerr = priv->read_reg(priv, XCAN_ECR_OFFSET) & XCAN_ECR_TEC_MASK;
681 - rxerr = ((priv->read_reg(priv, XCAN_ECR_OFFSET) &
682 - XCAN_ECR_REC_MASK) >> XCAN_ESR_REC_SHIFT);
683 - status = priv->read_reg(priv, XCAN_SR_OFFSET);
684
685 if (isr & XCAN_IXR_BSOFF_MASK) {
686 priv->can.state = CAN_STATE_BUS_OFF;
687 @@ -563,28 +700,10 @@ static void xcan_err_interrupt(struct net_device *ndev, u32 isr)
688 can_bus_off(ndev);
689 if (skb)
690 cf->can_id |= CAN_ERR_BUSOFF;
691 - } else if ((status & XCAN_SR_ESTAT_MASK) == XCAN_SR_ESTAT_MASK) {
692 - priv->can.state = CAN_STATE_ERROR_PASSIVE;
693 - priv->can.can_stats.error_passive++;
694 - if (skb) {
695 - cf->can_id |= CAN_ERR_CRTL;
696 - cf->data[1] = (rxerr > 127) ?
697 - CAN_ERR_CRTL_RX_PASSIVE :
698 - CAN_ERR_CRTL_TX_PASSIVE;
699 - cf->data[6] = txerr;
700 - cf->data[7] = rxerr;
701 - }
702 - } else if (status & XCAN_SR_ERRWRN_MASK) {
703 - priv->can.state = CAN_STATE_ERROR_WARNING;
704 - priv->can.can_stats.error_warning++;
705 - if (skb) {
706 - cf->can_id |= CAN_ERR_CRTL;
707 - cf->data[1] |= (txerr > rxerr) ?
708 - CAN_ERR_CRTL_TX_WARNING :
709 - CAN_ERR_CRTL_RX_WARNING;
710 - cf->data[6] = txerr;
711 - cf->data[7] = rxerr;
712 - }
713 + } else {
714 + enum can_state new_state = xcan_current_error_state(ndev);
715 +
716 + xcan_set_error_state(ndev, new_state, skb ? cf : NULL);
717 }
718
719 /* Check for Arbitration lost interrupt */
720 @@ -600,7 +719,6 @@ static void xcan_err_interrupt(struct net_device *ndev, u32 isr)
721 if (isr & XCAN_IXR_RXOFLW_MASK) {
722 stats->rx_over_errors++;
723 stats->rx_errors++;
724 - priv->write_reg(priv, XCAN_SRR_OFFSET, XCAN_SRR_RESET_MASK);
725 if (skb) {
726 cf->can_id |= CAN_ERR_CRTL;
727 cf->data[1] |= CAN_ERR_CRTL_RX_OVERFLOW;
728 @@ -709,26 +827,20 @@ static int xcan_rx_poll(struct napi_struct *napi, int quota)
729
730 isr = priv->read_reg(priv, XCAN_ISR_OFFSET);
731 while ((isr & XCAN_IXR_RXNEMP_MASK) && (work_done < quota)) {
732 - if (isr & XCAN_IXR_RXOK_MASK) {
733 - priv->write_reg(priv, XCAN_ICR_OFFSET,
734 - XCAN_IXR_RXOK_MASK);
735 - work_done += xcan_rx(ndev);
736 - } else {
737 - priv->write_reg(priv, XCAN_ICR_OFFSET,
738 - XCAN_IXR_RXNEMP_MASK);
739 - break;
740 - }
741 + work_done += xcan_rx(ndev);
742 priv->write_reg(priv, XCAN_ICR_OFFSET, XCAN_IXR_RXNEMP_MASK);
743 isr = priv->read_reg(priv, XCAN_ISR_OFFSET);
744 }
745
746 - if (work_done)
747 + if (work_done) {
748 can_led_event(ndev, CAN_LED_EVENT_RX);
749 + xcan_update_error_state_after_rxtx(ndev);
750 + }
751
752 if (work_done < quota) {
753 napi_complete_done(napi, work_done);
754 ier = priv->read_reg(priv, XCAN_IER_OFFSET);
755 - ier |= (XCAN_IXR_RXOK_MASK | XCAN_IXR_RXNEMP_MASK);
756 + ier |= XCAN_IXR_RXNEMP_MASK;
757 priv->write_reg(priv, XCAN_IER_OFFSET, ier);
758 }
759 return work_done;
760 @@ -743,18 +855,71 @@ static void xcan_tx_interrupt(struct net_device *ndev, u32 isr)
761 {
762 struct xcan_priv *priv = netdev_priv(ndev);
763 struct net_device_stats *stats = &ndev->stats;
764 + unsigned int frames_in_fifo;
765 + int frames_sent = 1; /* TXOK => at least 1 frame was sent */
766 + unsigned long flags;
767 + int retries = 0;
768 +
769 + /* Synchronize with xmit as we need to know the exact number
770 + * of frames in the FIFO to stay in sync due to the TXFEMP
771 + * handling.
772 + * This also prevents a race between netif_wake_queue() and
773 + * netif_stop_queue().
774 + */
775 + spin_lock_irqsave(&priv->tx_lock, flags);
776 +
777 + frames_in_fifo = priv->tx_head - priv->tx_tail;
778 +
779 + if (WARN_ON_ONCE(frames_in_fifo == 0)) {
780 + /* clear TXOK anyway to avoid getting back here */
781 + priv->write_reg(priv, XCAN_ICR_OFFSET, XCAN_IXR_TXOK_MASK);
782 + spin_unlock_irqrestore(&priv->tx_lock, flags);
783 + return;
784 + }
785 +
786 + /* Check if 2 frames were sent (TXOK only means that at least 1
787 + * frame was sent).
788 + */
789 + if (frames_in_fifo > 1) {
790 + WARN_ON(frames_in_fifo > priv->tx_max);
791 +
792 + /* Synchronize TXOK and isr so that after the loop:
793 + * (1) isr variable is up-to-date at least up to TXOK clear
794 + * time. This avoids us clearing a TXOK of a second frame
795 + * but not noticing that the FIFO is now empty and thus
796 + * marking only a single frame as sent.
797 + * (2) No TXOK is left. Having one could mean leaving a
798 + * stray TXOK as we might process the associated frame
799 + * via TXFEMP handling as we read TXFEMP *after* TXOK
800 + * clear to satisfy (1).
801 + */
802 + while ((isr & XCAN_IXR_TXOK_MASK) && !WARN_ON(++retries == 100)) {
803 + priv->write_reg(priv, XCAN_ICR_OFFSET, XCAN_IXR_TXOK_MASK);
804 + isr = priv->read_reg(priv, XCAN_ISR_OFFSET);
805 + }
806
807 - while ((priv->tx_head - priv->tx_tail > 0) &&
808 - (isr & XCAN_IXR_TXOK_MASK)) {
809 + if (isr & XCAN_IXR_TXFEMP_MASK) {
810 + /* nothing in FIFO anymore */
811 + frames_sent = frames_in_fifo;
812 + }
813 + } else {
814 + /* single frame in fifo, just clear TXOK */
815 priv->write_reg(priv, XCAN_ICR_OFFSET, XCAN_IXR_TXOK_MASK);
816 + }
817 +
818 + while (frames_sent--) {
819 can_get_echo_skb(ndev, priv->tx_tail %
820 priv->tx_max);
821 priv->tx_tail++;
822 stats->tx_packets++;
823 - isr = priv->read_reg(priv, XCAN_ISR_OFFSET);
824 }
825 - can_led_event(ndev, CAN_LED_EVENT_TX);
826 +
827 netif_wake_queue(ndev);
828 +
829 + spin_unlock_irqrestore(&priv->tx_lock, flags);
830 +
831 + can_led_event(ndev, CAN_LED_EVENT_TX);
832 + xcan_update_error_state_after_rxtx(ndev);
833 }
834
835 /**
836 @@ -773,6 +938,7 @@ static irqreturn_t xcan_interrupt(int irq, void *dev_id)
837 struct net_device *ndev = (struct net_device *)dev_id;
838 struct xcan_priv *priv = netdev_priv(ndev);
839 u32 isr, ier;
840 + u32 isr_errors;
841
842 /* Get the interrupt status from Xilinx CAN */
843 isr = priv->read_reg(priv, XCAN_ISR_OFFSET);
844 @@ -791,18 +957,17 @@ static irqreturn_t xcan_interrupt(int irq, void *dev_id)
845 xcan_tx_interrupt(ndev, isr);
846
847 /* Check for the type of error interrupt and Processing it */
848 - if (isr & (XCAN_IXR_ERROR_MASK | XCAN_IXR_RXOFLW_MASK |
849 - XCAN_IXR_BSOFF_MASK | XCAN_IXR_ARBLST_MASK)) {
850 - priv->write_reg(priv, XCAN_ICR_OFFSET, (XCAN_IXR_ERROR_MASK |
851 - XCAN_IXR_RXOFLW_MASK | XCAN_IXR_BSOFF_MASK |
852 - XCAN_IXR_ARBLST_MASK));
853 + isr_errors = isr & (XCAN_IXR_ERROR_MASK | XCAN_IXR_RXOFLW_MASK |
854 + XCAN_IXR_BSOFF_MASK | XCAN_IXR_ARBLST_MASK);
855 + if (isr_errors) {
856 + priv->write_reg(priv, XCAN_ICR_OFFSET, isr_errors);
857 xcan_err_interrupt(ndev, isr);
858 }
859
860 /* Check for the type of receive interrupt and Processing it */
861 - if (isr & (XCAN_IXR_RXNEMP_MASK | XCAN_IXR_RXOK_MASK)) {
862 + if (isr & XCAN_IXR_RXNEMP_MASK) {
863 ier = priv->read_reg(priv, XCAN_IER_OFFSET);
864 - ier &= ~(XCAN_IXR_RXNEMP_MASK | XCAN_IXR_RXOK_MASK);
865 + ier &= ~XCAN_IXR_RXNEMP_MASK;
866 priv->write_reg(priv, XCAN_IER_OFFSET, ier);
867 napi_schedule(&priv->napi);
868 }
869 @@ -819,13 +984,9 @@ static irqreturn_t xcan_interrupt(int irq, void *dev_id)
870 static void xcan_chip_stop(struct net_device *ndev)
871 {
872 struct xcan_priv *priv = netdev_priv(ndev);
873 - u32 ier;
874
875 /* Disable interrupts and leave the can in configuration mode */
876 - ier = priv->read_reg(priv, XCAN_IER_OFFSET);
877 - ier &= ~XCAN_INTR_ALL;
878 - priv->write_reg(priv, XCAN_IER_OFFSET, ier);
879 - priv->write_reg(priv, XCAN_SRR_OFFSET, XCAN_SRR_RESET_MASK);
880 + set_reset_mode(ndev);
881 priv->can.state = CAN_STATE_STOPPED;
882 }
883
884 @@ -958,10 +1119,15 @@ static const struct net_device_ops xcan_netdev_ops = {
885 */
886 static int __maybe_unused xcan_suspend(struct device *dev)
887 {
888 - if (!device_may_wakeup(dev))
889 - return pm_runtime_force_suspend(dev);
890 + struct net_device *ndev = dev_get_drvdata(dev);
891
892 - return 0;
893 + if (netif_running(ndev)) {
894 + netif_stop_queue(ndev);
895 + netif_device_detach(ndev);
896 + xcan_chip_stop(ndev);
897 + }
898 +
899 + return pm_runtime_force_suspend(dev);
900 }
901
902 /**
903 @@ -973,11 +1139,27 @@ static int __maybe_unused xcan_suspend(struct device *dev)
904 */
905 static int __maybe_unused xcan_resume(struct device *dev)
906 {
907 - if (!device_may_wakeup(dev))
908 - return pm_runtime_force_resume(dev);
909 + struct net_device *ndev = dev_get_drvdata(dev);
910 + int ret;
911
912 - return 0;
913 + ret = pm_runtime_force_resume(dev);
914 + if (ret) {
915 + dev_err(dev, "pm_runtime_force_resume failed on resume\n");
916 + return ret;
917 + }
918 +
919 + if (netif_running(ndev)) {
920 + ret = xcan_chip_start(ndev);
921 + if (ret) {
922 + dev_err(dev, "xcan_chip_start failed on resume\n");
923 + return ret;
924 + }
925 +
926 + netif_device_attach(ndev);
927 + netif_start_queue(ndev);
928 + }
929
930 + return 0;
931 }
932
933 /**
934 @@ -992,14 +1174,6 @@ static int __maybe_unused xcan_runtime_suspend(struct device *dev)
935 struct net_device *ndev = dev_get_drvdata(dev);
936 struct xcan_priv *priv = netdev_priv(ndev);
937
938 - if (netif_running(ndev)) {
939 - netif_stop_queue(ndev);
940 - netif_device_detach(ndev);
941 - }
942 -
943 - priv->write_reg(priv, XCAN_MSR_OFFSET, XCAN_MSR_SLEEP_MASK);
944 - priv->can.state = CAN_STATE_SLEEPING;
945 -
946 clk_disable_unprepare(priv->bus_clk);
947 clk_disable_unprepare(priv->can_clk);
948
949 @@ -1018,7 +1192,6 @@ static int __maybe_unused xcan_runtime_resume(struct device *dev)
950 struct net_device *ndev = dev_get_drvdata(dev);
951 struct xcan_priv *priv = netdev_priv(ndev);
952 int ret;
953 - u32 isr, status;
954
955 ret = clk_prepare_enable(priv->bus_clk);
956 if (ret) {
957 @@ -1032,27 +1205,6 @@ static int __maybe_unused xcan_runtime_resume(struct device *dev)
958 return ret;
959 }
960
961 - priv->write_reg(priv, XCAN_SRR_OFFSET, XCAN_SRR_RESET_MASK);
962 - isr = priv->read_reg(priv, XCAN_ISR_OFFSET);
963 - status = priv->read_reg(priv, XCAN_SR_OFFSET);
964 -
965 - if (netif_running(ndev)) {
966 - if (isr & XCAN_IXR_BSOFF_MASK) {
967 - priv->can.state = CAN_STATE_BUS_OFF;
968 - priv->write_reg(priv, XCAN_SRR_OFFSET,
969 - XCAN_SRR_RESET_MASK);
970 - } else if ((status & XCAN_SR_ESTAT_MASK) ==
971 - XCAN_SR_ESTAT_MASK) {
972 - priv->can.state = CAN_STATE_ERROR_PASSIVE;
973 - } else if (status & XCAN_SR_ERRWRN_MASK) {
974 - priv->can.state = CAN_STATE_ERROR_WARNING;
975 - } else {
976 - priv->can.state = CAN_STATE_ERROR_ACTIVE;
977 - }
978 - netif_device_attach(ndev);
979 - netif_start_queue(ndev);
980 - }
981 -
982 return 0;
983 }
984
985 @@ -1061,6 +1213,18 @@ static const struct dev_pm_ops xcan_dev_pm_ops = {
986 SET_RUNTIME_PM_OPS(xcan_runtime_suspend, xcan_runtime_resume, NULL)
987 };
988
989 +static const struct xcan_devtype_data xcan_zynq_data = {
990 + .caps = XCAN_CAP_WATERMARK,
991 +};
992 +
993 +/* Match table for OF platform binding */
994 +static const struct of_device_id xcan_of_match[] = {
995 + { .compatible = "xlnx,zynq-can-1.0", .data = &xcan_zynq_data },
996 + { .compatible = "xlnx,axi-can-1.00.a", },
997 + { /* end of list */ },
998 +};
999 +MODULE_DEVICE_TABLE(of, xcan_of_match);
1000 +
1001 /**
1002 * xcan_probe - Platform registration call
1003 * @pdev: Handle to the platform device structure
1004 @@ -1075,8 +1239,10 @@ static int xcan_probe(struct platform_device *pdev)
1005 struct resource *res; /* IO mem resources */
1006 struct net_device *ndev;
1007 struct xcan_priv *priv;
1008 + const struct of_device_id *of_id;
1009 + int caps = 0;
1010 void __iomem *addr;
1011 - int ret, rx_max, tx_max;
1012 + int ret, rx_max, tx_max, tx_fifo_depth;
1013
1014 /* Get the virtual base address for the device */
1015 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1016 @@ -1086,7 +1252,8 @@ static int xcan_probe(struct platform_device *pdev)
1017 goto err;
1018 }
1019
1020 - ret = of_property_read_u32(pdev->dev.of_node, "tx-fifo-depth", &tx_max);
1021 + ret = of_property_read_u32(pdev->dev.of_node, "tx-fifo-depth",
1022 + &tx_fifo_depth);
1023 if (ret < 0)
1024 goto err;
1025
1026 @@ -1094,6 +1261,30 @@ static int xcan_probe(struct platform_device *pdev)
1027 if (ret < 0)
1028 goto err;
1029
1030 + of_id = of_match_device(xcan_of_match, &pdev->dev);
1031 + if (of_id) {
1032 + const struct xcan_devtype_data *devtype_data = of_id->data;
1033 +
1034 + if (devtype_data)
1035 + caps = devtype_data->caps;
1036 + }
1037 +
1038 + /* There is no way to directly figure out how many frames have been
1039 + * sent when the TXOK interrupt is processed. If watermark programming
1040 + * is supported, we can have 2 frames in the FIFO and use TXFEMP
1041 + * to determine if 1 or 2 frames have been sent.
1042 + * Theoretically we should be able to use TXFWMEMP to determine up
1043 + * to 3 frames, but it seems that after putting a second frame in the
1044 + * FIFO, with watermark at 2 frames, it can happen that TXFWMEMP (less
1045 + * than 2 frames in FIFO) is set anyway with no TXOK (a frame was
1046 + * sent), which is not a sensible state - possibly TXFWMEMP is not
1047 + * completely synchronized with the rest of the bits?
1048 + */
1049 + if (caps & XCAN_CAP_WATERMARK)
1050 + tx_max = min(tx_fifo_depth, 2);
1051 + else
1052 + tx_max = 1;
1053 +
1054 /* Create a CAN device instance */
1055 ndev = alloc_candev(sizeof(struct xcan_priv), tx_max);
1056 if (!ndev)
1057 @@ -1108,6 +1299,7 @@ static int xcan_probe(struct platform_device *pdev)
1058 CAN_CTRLMODE_BERR_REPORTING;
1059 priv->reg_base = addr;
1060 priv->tx_max = tx_max;
1061 + spin_lock_init(&priv->tx_lock);
1062
1063 /* Get IRQ for the device */
1064 ndev->irq = platform_get_irq(pdev, 0);
1065 @@ -1172,9 +1364,9 @@ static int xcan_probe(struct platform_device *pdev)
1066
1067 pm_runtime_put(&pdev->dev);
1068
1069 - netdev_dbg(ndev, "reg_base=0x%p irq=%d clock=%d, tx fifo depth:%d\n",
1070 + netdev_dbg(ndev, "reg_base=0x%p irq=%d clock=%d, tx fifo depth: actual %d, using %d\n",
1071 priv->reg_base, ndev->irq, priv->can.clock.freq,
1072 - priv->tx_max);
1073 + tx_fifo_depth, priv->tx_max);
1074
1075 return 0;
1076
1077 @@ -1208,14 +1400,6 @@ static int xcan_remove(struct platform_device *pdev)
1078 return 0;
1079 }
1080
1081 -/* Match table for OF platform binding */
1082 -static const struct of_device_id xcan_of_match[] = {
1083 - { .compatible = "xlnx,zynq-can-1.0", },
1084 - { .compatible = "xlnx,axi-can-1.00.a", },
1085 - { /* end of list */ },
1086 -};
1087 -MODULE_DEVICE_TABLE(of, xcan_of_match);
1088 -
1089 static struct platform_driver xcan_driver = {
1090 .probe = xcan_probe,
1091 .remove = xcan_remove,
1092 diff --git a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
1093 index a069fcc823c3..b26da0952a4d 100644
1094 --- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
1095 +++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
1096 @@ -2957,7 +2957,7 @@ int mlx4_RST2INIT_QP_wrapper(struct mlx4_dev *dev, int slave,
1097 u32 srqn = qp_get_srqn(qpc) & 0xffffff;
1098 int use_srq = (qp_get_srqn(qpc) >> 24) & 1;
1099 struct res_srq *srq;
1100 - int local_qpn = be32_to_cpu(qpc->local_qpn) & 0xffffff;
1101 + int local_qpn = vhcr->in_modifier & 0xffffff;
1102
1103 err = adjust_qp_sched_queue(dev, slave, qpc, inbox);
1104 if (err)
1105 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_arfs.c b/drivers/net/ethernet/mellanox/mlx5/core/en_arfs.c
1106 index 12d3ced61114..e87923e046c9 100644
1107 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_arfs.c
1108 +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_arfs.c
1109 @@ -381,14 +381,14 @@ static void arfs_may_expire_flow(struct mlx5e_priv *priv)
1110 HLIST_HEAD(del_list);
1111 spin_lock_bh(&priv->fs.arfs.arfs_lock);
1112 mlx5e_for_each_arfs_rule(arfs_rule, htmp, priv->fs.arfs.arfs_tables, i, j) {
1113 - if (quota++ > MLX5E_ARFS_EXPIRY_QUOTA)
1114 - break;
1115 if (!work_pending(&arfs_rule->arfs_work) &&
1116 rps_may_expire_flow(priv->netdev,
1117 arfs_rule->rxq, arfs_rule->flow_id,
1118 arfs_rule->filter_id)) {
1119 hlist_del_init(&arfs_rule->hlist);
1120 hlist_add_head(&arfs_rule->hlist, &del_list);
1121 + if (quota++ > MLX5E_ARFS_EXPIRY_QUOTA)
1122 + break;
1123 }
1124 }
1125 spin_unlock_bh(&priv->fs.arfs.arfs_lock);
1126 @@ -711,6 +711,9 @@ int mlx5e_rx_flow_steer(struct net_device *dev, const struct sk_buff *skb,
1127 skb->protocol != htons(ETH_P_IPV6))
1128 return -EPROTONOSUPPORT;
1129
1130 + if (skb->encapsulation)
1131 + return -EPROTONOSUPPORT;
1132 +
1133 arfs_t = arfs_get_table(arfs, arfs_get_ip_proto(skb), skb->protocol);
1134 if (!arfs_t)
1135 return -EPROTONOSUPPORT;
1136 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_clock.c b/drivers/net/ethernet/mellanox/mlx5/core/en_clock.c
1137 index 84dd63e74041..27040009d87a 100644
1138 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_clock.c
1139 +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_clock.c
1140 @@ -545,6 +545,7 @@ void mlx5e_pps_event_handler(struct mlx5e_priv *priv,
1141 void mlx5e_timestamp_init(struct mlx5e_priv *priv)
1142 {
1143 struct mlx5e_tstamp *tstamp = &priv->tstamp;
1144 + u64 overflow_cycles;
1145 u64 ns;
1146 u64 frac = 0;
1147 u32 dev_freq;
1148 @@ -569,10 +570,17 @@ void mlx5e_timestamp_init(struct mlx5e_priv *priv)
1149
1150 /* Calculate period in seconds to call the overflow watchdog - to make
1151 * sure counter is checked at least once every wrap around.
1152 + * The period is calculated as the minimum between max HW cycles count
1153 + * (The clock source mask) and max amount of cycles that can be
1154 + * multiplied by clock multiplier where the result doesn't exceed
1155 + * 64bits.
1156 */
1157 - ns = cyclecounter_cyc2ns(&tstamp->cycles, tstamp->cycles.mask,
1158 + overflow_cycles = div64_u64(~0ULL >> 1, tstamp->cycles.mult);
1159 + overflow_cycles = min(overflow_cycles, tstamp->cycles.mask >> 1);
1160 +
1161 + ns = cyclecounter_cyc2ns(&tstamp->cycles, overflow_cycles,
1162 frac, &frac);
1163 - do_div(ns, NSEC_PER_SEC / 2 / HZ);
1164 + do_div(ns, NSEC_PER_SEC / HZ);
1165 tstamp->overflow_period = ns;
1166
1167 INIT_WORK(&tstamp->pps_info.out_work, mlx5e_pps_out);
1168 diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
1169 index dba6d17ad885..47d2ef2fb9b3 100644
1170 --- a/drivers/net/phy/phy.c
1171 +++ b/drivers/net/phy/phy.c
1172 @@ -511,7 +511,7 @@ static int phy_start_aneg_priv(struct phy_device *phydev, bool sync)
1173 * negotiation may already be done and aneg interrupt may not be
1174 * generated.
1175 */
1176 - if (phy_interrupt_is_valid(phydev) && (phydev->state == PHY_AN)) {
1177 + if (phydev->irq != PHY_POLL && phydev->state == PHY_AN) {
1178 err = phy_aneg_done(phydev);
1179 if (err > 0) {
1180 trigger = true;
1181 diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
1182 index bbdb46916dc3..13d39a72fe0d 100644
1183 --- a/drivers/net/vxlan.c
1184 +++ b/drivers/net/vxlan.c
1185 @@ -636,8 +636,61 @@ static int vxlan_gro_complete(struct sock *sk, struct sk_buff *skb, int nhoff)
1186 return eth_gro_complete(skb, nhoff + sizeof(struct vxlanhdr));
1187 }
1188
1189 -/* Add new entry to forwarding table -- assumes lock held */
1190 +static struct vxlan_fdb *vxlan_fdb_alloc(struct vxlan_dev *vxlan,
1191 + const u8 *mac, __u16 state,
1192 + __be32 src_vni, __u8 ndm_flags)
1193 +{
1194 + struct vxlan_fdb *f;
1195 +
1196 + f = kmalloc(sizeof(*f), GFP_ATOMIC);
1197 + if (!f)
1198 + return NULL;
1199 + f->state = state;
1200 + f->flags = ndm_flags;
1201 + f->updated = f->used = jiffies;
1202 + f->vni = src_vni;
1203 + INIT_LIST_HEAD(&f->remotes);
1204 + memcpy(f->eth_addr, mac, ETH_ALEN);
1205 +
1206 + return f;
1207 +}
1208 +
1209 static int vxlan_fdb_create(struct vxlan_dev *vxlan,
1210 + const u8 *mac, union vxlan_addr *ip,
1211 + __u16 state, __be16 port, __be32 src_vni,
1212 + __be32 vni, __u32 ifindex, __u8 ndm_flags,
1213 + struct vxlan_fdb **fdb)
1214 +{
1215 + struct vxlan_rdst *rd = NULL;
1216 + struct vxlan_fdb *f;
1217 + int rc;
1218 +
1219 + if (vxlan->cfg.addrmax &&
1220 + vxlan->addrcnt >= vxlan->cfg.addrmax)
1221 + return -ENOSPC;
1222 +
1223 + netdev_dbg(vxlan->dev, "add %pM -> %pIS\n", mac, ip);
1224 + f = vxlan_fdb_alloc(vxlan, mac, state, src_vni, ndm_flags);
1225 + if (!f)
1226 + return -ENOMEM;
1227 +
1228 + rc = vxlan_fdb_append(f, ip, port, vni, ifindex, &rd);
1229 + if (rc < 0) {
1230 + kfree(f);
1231 + return rc;
1232 + }
1233 +
1234 + ++vxlan->addrcnt;
1235 + hlist_add_head_rcu(&f->hlist,
1236 + vxlan_fdb_head(vxlan, mac, src_vni));
1237 +
1238 + *fdb = f;
1239 +
1240 + return 0;
1241 +}
1242 +
1243 +/* Add new entry to forwarding table -- assumes lock held */
1244 +static int vxlan_fdb_update(struct vxlan_dev *vxlan,
1245 const u8 *mac, union vxlan_addr *ip,
1246 __u16 state, __u16 flags,
1247 __be16 port, __be32 src_vni, __be32 vni,
1248 @@ -687,37 +740,17 @@ static int vxlan_fdb_create(struct vxlan_dev *vxlan,
1249 if (!(flags & NLM_F_CREATE))
1250 return -ENOENT;
1251
1252 - if (vxlan->cfg.addrmax &&
1253 - vxlan->addrcnt >= vxlan->cfg.addrmax)
1254 - return -ENOSPC;
1255 -
1256 /* Disallow replace to add a multicast entry */
1257 if ((flags & NLM_F_REPLACE) &&
1258 (is_multicast_ether_addr(mac) || is_zero_ether_addr(mac)))
1259 return -EOPNOTSUPP;
1260
1261 netdev_dbg(vxlan->dev, "add %pM -> %pIS\n", mac, ip);
1262 - f = kmalloc(sizeof(*f), GFP_ATOMIC);
1263 - if (!f)
1264 - return -ENOMEM;
1265 -
1266 - notify = 1;
1267 - f->state = state;
1268 - f->flags = ndm_flags;
1269 - f->updated = f->used = jiffies;
1270 - f->vni = src_vni;
1271 - INIT_LIST_HEAD(&f->remotes);
1272 - memcpy(f->eth_addr, mac, ETH_ALEN);
1273 -
1274 - rc = vxlan_fdb_append(f, ip, port, vni, ifindex, &rd);
1275 - if (rc < 0) {
1276 - kfree(f);
1277 + rc = vxlan_fdb_create(vxlan, mac, ip, state, port, src_vni,
1278 + vni, ifindex, ndm_flags, &f);
1279 + if (rc < 0)
1280 return rc;
1281 - }
1282 -
1283 - ++vxlan->addrcnt;
1284 - hlist_add_head_rcu(&f->hlist,
1285 - vxlan_fdb_head(vxlan, mac, src_vni));
1286 + notify = 1;
1287 }
1288
1289 if (notify) {
1290 @@ -741,13 +774,15 @@ static void vxlan_fdb_free(struct rcu_head *head)
1291 kfree(f);
1292 }
1293
1294 -static void vxlan_fdb_destroy(struct vxlan_dev *vxlan, struct vxlan_fdb *f)
1295 +static void vxlan_fdb_destroy(struct vxlan_dev *vxlan, struct vxlan_fdb *f,
1296 + bool do_notify)
1297 {
1298 netdev_dbg(vxlan->dev,
1299 "delete %pM\n", f->eth_addr);
1300
1301 --vxlan->addrcnt;
1302 - vxlan_fdb_notify(vxlan, f, first_remote_rtnl(f), RTM_DELNEIGH);
1303 + if (do_notify)
1304 + vxlan_fdb_notify(vxlan, f, first_remote_rtnl(f), RTM_DELNEIGH);
1305
1306 hlist_del_rcu(&f->hlist);
1307 call_rcu(&f->rcu, vxlan_fdb_free);
1308 @@ -863,7 +898,7 @@ static int vxlan_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
1309 return -EAFNOSUPPORT;
1310
1311 spin_lock_bh(&vxlan->hash_lock);
1312 - err = vxlan_fdb_create(vxlan, addr, &ip, ndm->ndm_state, flags,
1313 + err = vxlan_fdb_update(vxlan, addr, &ip, ndm->ndm_state, flags,
1314 port, src_vni, vni, ifindex, ndm->ndm_flags);
1315 spin_unlock_bh(&vxlan->hash_lock);
1316
1317 @@ -897,7 +932,7 @@ static int __vxlan_fdb_delete(struct vxlan_dev *vxlan,
1318 goto out;
1319 }
1320
1321 - vxlan_fdb_destroy(vxlan, f);
1322 + vxlan_fdb_destroy(vxlan, f, true);
1323
1324 out:
1325 return 0;
1326 @@ -1006,7 +1041,7 @@ static bool vxlan_snoop(struct net_device *dev,
1327
1328 /* close off race between vxlan_flush and incoming packets */
1329 if (netif_running(dev))
1330 - vxlan_fdb_create(vxlan, src_mac, src_ip,
1331 + vxlan_fdb_update(vxlan, src_mac, src_ip,
1332 NUD_REACHABLE,
1333 NLM_F_EXCL|NLM_F_CREATE,
1334 vxlan->cfg.dst_port,
1335 @@ -2360,7 +2395,7 @@ static void vxlan_cleanup(unsigned long arg)
1336 "garbage collect %pM\n",
1337 f->eth_addr);
1338 f->state = NUD_STALE;
1339 - vxlan_fdb_destroy(vxlan, f);
1340 + vxlan_fdb_destroy(vxlan, f, true);
1341 } else if (time_before(timeout, next_timer))
1342 next_timer = timeout;
1343 }
1344 @@ -2411,7 +2446,7 @@ static void vxlan_fdb_delete_default(struct vxlan_dev *vxlan, __be32 vni)
1345 spin_lock_bh(&vxlan->hash_lock);
1346 f = __vxlan_find_mac(vxlan, all_zeros_mac, vni);
1347 if (f)
1348 - vxlan_fdb_destroy(vxlan, f);
1349 + vxlan_fdb_destroy(vxlan, f, true);
1350 spin_unlock_bh(&vxlan->hash_lock);
1351 }
1352
1353 @@ -2465,7 +2500,7 @@ static void vxlan_flush(struct vxlan_dev *vxlan, bool do_all)
1354 continue;
1355 /* the all_zeros_mac entry is deleted at vxlan_uninit */
1356 if (!is_zero_ether_addr(f->eth_addr))
1357 - vxlan_fdb_destroy(vxlan, f);
1358 + vxlan_fdb_destroy(vxlan, f, true);
1359 }
1360 }
1361 spin_unlock_bh(&vxlan->hash_lock);
1362 @@ -3157,6 +3192,7 @@ static int __vxlan_dev_create(struct net *net, struct net_device *dev,
1363 {
1364 struct vxlan_net *vn = net_generic(net, vxlan_net_id);
1365 struct vxlan_dev *vxlan = netdev_priv(dev);
1366 + struct vxlan_fdb *f = NULL;
1367 int err;
1368
1369 err = vxlan_dev_configure(net, dev, conf, false, extack);
1370 @@ -3170,24 +3206,35 @@ static int __vxlan_dev_create(struct net *net, struct net_device *dev,
1371 err = vxlan_fdb_create(vxlan, all_zeros_mac,
1372 &vxlan->default_dst.remote_ip,
1373 NUD_REACHABLE | NUD_PERMANENT,
1374 - NLM_F_EXCL | NLM_F_CREATE,
1375 vxlan->cfg.dst_port,
1376 vxlan->default_dst.remote_vni,
1377 vxlan->default_dst.remote_vni,
1378 vxlan->default_dst.remote_ifindex,
1379 - NTF_SELF);
1380 + NTF_SELF, &f);
1381 if (err)
1382 return err;
1383 }
1384
1385 err = register_netdevice(dev);
1386 + if (err)
1387 + goto errout;
1388 +
1389 + err = rtnl_configure_link(dev, NULL);
1390 if (err) {
1391 - vxlan_fdb_delete_default(vxlan, vxlan->default_dst.remote_vni);
1392 - return err;
1393 + unregister_netdevice(dev);
1394 + goto errout;
1395 }
1396
1397 + /* notify default fdb entry */
1398 + if (f)
1399 + vxlan_fdb_notify(vxlan, f, first_remote_rtnl(f), RTM_NEWNEIGH);
1400 +
1401 list_add(&vxlan->next, &vn->vxlan_list);
1402 return 0;
1403 +errout:
1404 + if (f)
1405 + vxlan_fdb_destroy(vxlan, f, false);
1406 + return err;
1407 }
1408
1409 static int vxlan_nl2conf(struct nlattr *tb[], struct nlattr *data[],
1410 @@ -3416,6 +3463,7 @@ static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[],
1411 struct vxlan_rdst *dst = &vxlan->default_dst;
1412 struct vxlan_rdst old_dst;
1413 struct vxlan_config conf;
1414 + struct vxlan_fdb *f = NULL;
1415 int err;
1416
1417 err = vxlan_nl2conf(tb, data,
1418 @@ -3444,16 +3492,16 @@ static int vxlan_changelink(struct net_device *dev, struct nlattr *tb[],
1419 err = vxlan_fdb_create(vxlan, all_zeros_mac,
1420 &dst->remote_ip,
1421 NUD_REACHABLE | NUD_PERMANENT,
1422 - NLM_F_CREATE | NLM_F_APPEND,
1423 vxlan->cfg.dst_port,
1424 dst->remote_vni,
1425 dst->remote_vni,
1426 dst->remote_ifindex,
1427 - NTF_SELF);
1428 + NTF_SELF, &f);
1429 if (err) {
1430 spin_unlock_bh(&vxlan->hash_lock);
1431 return err;
1432 }
1433 + vxlan_fdb_notify(vxlan, f, first_remote_rtnl(f), RTM_NEWNEIGH);
1434 }
1435 spin_unlock_bh(&vxlan->hash_lock);
1436 }
1437 diff --git a/drivers/staging/speakup/speakup_soft.c b/drivers/staging/speakup/speakup_soft.c
1438 index d99daf69e501..fe229d63deec 100644
1439 --- a/drivers/staging/speakup/speakup_soft.c
1440 +++ b/drivers/staging/speakup/speakup_soft.c
1441 @@ -207,11 +207,15 @@ static ssize_t softsynthx_read(struct file *fp, char __user *buf, size_t count,
1442 int chars_sent = 0;
1443 char __user *cp;
1444 char *init;
1445 + size_t bytes_per_ch = unicode ? 3 : 1;
1446 u16 ch;
1447 int empty;
1448 unsigned long flags;
1449 DEFINE_WAIT(wait);
1450
1451 + if (count < bytes_per_ch)
1452 + return -EINVAL;
1453 +
1454 spin_lock_irqsave(&speakup_info.spinlock, flags);
1455 while (1) {
1456 prepare_to_wait(&speakup_event, &wait, TASK_INTERRUPTIBLE);
1457 @@ -237,7 +241,7 @@ static ssize_t softsynthx_read(struct file *fp, char __user *buf, size_t count,
1458 init = get_initstring();
1459
1460 /* Keep 3 bytes available for a 16bit UTF-8-encoded character */
1461 - while (chars_sent <= count - 3) {
1462 + while (chars_sent <= count - bytes_per_ch) {
1463 if (speakup_info.flushing) {
1464 speakup_info.flushing = 0;
1465 ch = '\x18';
1466 diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
1467 index 3b9aadd007f5..f2f31fc16f29 100644
1468 --- a/drivers/usb/class/cdc-acm.c
1469 +++ b/drivers/usb/class/cdc-acm.c
1470 @@ -1844,6 +1844,9 @@ static const struct usb_device_id acm_ids[] = {
1471 { USB_DEVICE(0x09d8, 0x0320), /* Elatec GmbH TWN3 */
1472 .driver_info = NO_UNION_NORMAL, /* has misplaced union descriptor */
1473 },
1474 + { USB_DEVICE(0x0ca6, 0xa050), /* Castles VEGA3000 */
1475 + .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1476 + },
1477
1478 { USB_DEVICE(0x2912, 0x0001), /* ATOL FPrint */
1479 .driver_info = CLEAR_HALT_CONDITIONS,
1480 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
1481 index e5f77e611451..a8bc48b26c23 100644
1482 --- a/drivers/usb/core/hub.c
1483 +++ b/drivers/usb/core/hub.c
1484 @@ -1141,10 +1141,14 @@ static void hub_activate(struct usb_hub *hub, enum hub_activation_type type)
1485
1486 if (!udev || udev->state == USB_STATE_NOTATTACHED) {
1487 /* Tell hub_wq to disconnect the device or
1488 - * check for a new connection
1489 + * check for a new connection or over current condition.
1490 + * Based on USB2.0 Spec Section 11.12.5,
1491 + * C_PORT_OVER_CURRENT could be set while
1492 + * PORT_OVER_CURRENT is not. So check for any of them.
1493 */
1494 if (udev || (portstatus & USB_PORT_STAT_CONNECTION) ||
1495 - (portstatus & USB_PORT_STAT_OVERCURRENT))
1496 + (portstatus & USB_PORT_STAT_OVERCURRENT) ||
1497 + (portchange & USB_PORT_STAT_C_OVERCURRENT))
1498 set_bit(port1, hub->change_bits);
1499
1500 } else if (portstatus & USB_PORT_STAT_ENABLE) {
1501 diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
1502 index 87484f71b2ab..46d3b0fc00c5 100644
1503 --- a/drivers/usb/dwc2/hcd.c
1504 +++ b/drivers/usb/dwc2/hcd.c
1505 @@ -2606,34 +2606,29 @@ static void dwc2_hc_init_xfer(struct dwc2_hsotg *hsotg,
1506
1507 #define DWC2_USB_DMA_ALIGN 4
1508
1509 -struct dma_aligned_buffer {
1510 - void *kmalloc_ptr;
1511 - void *old_xfer_buffer;
1512 - u8 data[0];
1513 -};
1514 -
1515 static void dwc2_free_dma_aligned_buffer(struct urb *urb)
1516 {
1517 - struct dma_aligned_buffer *temp;
1518 + void *stored_xfer_buffer;
1519
1520 if (!(urb->transfer_flags & URB_ALIGNED_TEMP_BUFFER))
1521 return;
1522
1523 - temp = container_of(urb->transfer_buffer,
1524 - struct dma_aligned_buffer, data);
1525 + /* Restore urb->transfer_buffer from the end of the allocated area */
1526 + memcpy(&stored_xfer_buffer, urb->transfer_buffer +
1527 + urb->transfer_buffer_length, sizeof(urb->transfer_buffer));
1528
1529 if (usb_urb_dir_in(urb))
1530 - memcpy(temp->old_xfer_buffer, temp->data,
1531 + memcpy(stored_xfer_buffer, urb->transfer_buffer,
1532 urb->transfer_buffer_length);
1533 - urb->transfer_buffer = temp->old_xfer_buffer;
1534 - kfree(temp->kmalloc_ptr);
1535 + kfree(urb->transfer_buffer);
1536 + urb->transfer_buffer = stored_xfer_buffer;
1537
1538 urb->transfer_flags &= ~URB_ALIGNED_TEMP_BUFFER;
1539 }
1540
1541 static int dwc2_alloc_dma_aligned_buffer(struct urb *urb, gfp_t mem_flags)
1542 {
1543 - struct dma_aligned_buffer *temp, *kmalloc_ptr;
1544 + void *kmalloc_ptr;
1545 size_t kmalloc_size;
1546
1547 if (urb->num_sgs || urb->sg ||
1548 @@ -2641,22 +2636,29 @@ static int dwc2_alloc_dma_aligned_buffer(struct urb *urb, gfp_t mem_flags)
1549 !((uintptr_t)urb->transfer_buffer & (DWC2_USB_DMA_ALIGN - 1)))
1550 return 0;
1551
1552 - /* Allocate a buffer with enough padding for alignment */
1553 + /*
1554 + * Allocate a buffer with enough padding for original transfer_buffer
1555 + * pointer. This allocation is guaranteed to be aligned properly for
1556 + * DMA
1557 + */
1558 kmalloc_size = urb->transfer_buffer_length +
1559 - sizeof(struct dma_aligned_buffer) + DWC2_USB_DMA_ALIGN - 1;
1560 + sizeof(urb->transfer_buffer);
1561
1562 kmalloc_ptr = kmalloc(kmalloc_size, mem_flags);
1563 if (!kmalloc_ptr)
1564 return -ENOMEM;
1565
1566 - /* Position our struct dma_aligned_buffer such that data is aligned */
1567 - temp = PTR_ALIGN(kmalloc_ptr + 1, DWC2_USB_DMA_ALIGN) - 1;
1568 - temp->kmalloc_ptr = kmalloc_ptr;
1569 - temp->old_xfer_buffer = urb->transfer_buffer;
1570 + /*
1571 + * Position value of original urb->transfer_buffer pointer to the end
1572 + * of allocation for later referencing
1573 + */
1574 + memcpy(kmalloc_ptr + urb->transfer_buffer_length,
1575 + &urb->transfer_buffer, sizeof(urb->transfer_buffer));
1576 +
1577 if (usb_urb_dir_out(urb))
1578 - memcpy(temp->data, urb->transfer_buffer,
1579 + memcpy(kmalloc_ptr, urb->transfer_buffer,
1580 urb->transfer_buffer_length);
1581 - urb->transfer_buffer = temp->data;
1582 + urb->transfer_buffer = kmalloc_ptr;
1583
1584 urb->transfer_flags |= URB_ALIGNED_TEMP_BUFFER;
1585
1586 diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
1587 index 7b53ac548b1a..52e6897fa35a 100644
1588 --- a/drivers/usb/gadget/function/f_fs.c
1589 +++ b/drivers/usb/gadget/function/f_fs.c
1590 @@ -3243,7 +3243,7 @@ static int ffs_func_setup(struct usb_function *f,
1591 __ffs_event_add(ffs, FUNCTIONFS_SETUP);
1592 spin_unlock_irqrestore(&ffs->ev.waitq.lock, flags);
1593
1594 - return USB_GADGET_DELAYED_STATUS;
1595 + return creq->wLength == 0 ? USB_GADGET_DELAYED_STATUS : 0;
1596 }
1597
1598 static bool ffs_func_req_match(struct usb_function *f,
1599 diff --git a/drivers/vfio/vfio_iommu_spapr_tce.c b/drivers/vfio/vfio_iommu_spapr_tce.c
1600 index b751dd60e41a..b4c68f3b82be 100644
1601 --- a/drivers/vfio/vfio_iommu_spapr_tce.c
1602 +++ b/drivers/vfio/vfio_iommu_spapr_tce.c
1603 @@ -467,7 +467,7 @@ static int tce_iommu_prereg_ua_to_hpa(struct tce_container *container,
1604 if (!mem)
1605 return -EINVAL;
1606
1607 - ret = mm_iommu_ua_to_hpa(mem, tce, phpa);
1608 + ret = mm_iommu_ua_to_hpa(mem, tce, shift, phpa);
1609 if (ret)
1610 return -EINVAL;
1611
1612 diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
1613 index 0480cd9a9e81..71b81980787f 100644
1614 --- a/fs/cifs/smb2pdu.c
1615 +++ b/fs/cifs/smb2pdu.c
1616 @@ -338,10 +338,7 @@ smb2_plain_req_init(__le16 smb2_command, struct cifs_tcon *tcon,
1617 return rc;
1618
1619 /* BB eventually switch this to SMB2 specific small buf size */
1620 - if (smb2_command == SMB2_SET_INFO)
1621 - *request_buf = cifs_buf_get();
1622 - else
1623 - *request_buf = cifs_small_buf_get();
1624 + *request_buf = cifs_small_buf_get();
1625 if (*request_buf == NULL) {
1626 /* BB should we add a retry in here if not a writepage? */
1627 return -ENOMEM;
1628 @@ -3171,7 +3168,7 @@ send_set_info(const unsigned int xid, struct cifs_tcon *tcon,
1629 }
1630
1631 rc = SendReceive2(xid, ses, iov, num, &resp_buftype, flags, &rsp_iov);
1632 - cifs_buf_release(req);
1633 + cifs_small_buf_release(req);
1634 rsp = (struct smb2_set_info_rsp *)rsp_iov.iov_base;
1635
1636 if (rc != 0)
1637 diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
1638 index 9cf971c68401..6dd77767fd5b 100644
1639 --- a/include/linux/skbuff.h
1640 +++ b/include/linux/skbuff.h
1641 @@ -3167,6 +3167,8 @@ static inline int __skb_grow_rcsum(struct sk_buff *skb, unsigned int len)
1642 return __skb_grow(skb, len);
1643 }
1644
1645 +#define rb_to_skb(rb) rb_entry_safe(rb, struct sk_buff, rbnode)
1646 +
1647 #define skb_queue_walk(queue, skb) \
1648 for (skb = (queue)->next; \
1649 skb != (struct sk_buff *)(queue); \
1650 diff --git a/include/net/tcp.h b/include/net/tcp.h
1651 index fb653736f335..3173dd12b8cc 100644
1652 --- a/include/net/tcp.h
1653 +++ b/include/net/tcp.h
1654 @@ -372,6 +372,7 @@ ssize_t tcp_splice_read(struct socket *sk, loff_t *ppos,
1655 struct pipe_inode_info *pipe, size_t len,
1656 unsigned int flags);
1657
1658 +void tcp_enter_quickack_mode(struct sock *sk);
1659 static inline void tcp_dec_quickack_mode(struct sock *sk,
1660 const unsigned int pkts)
1661 {
1662 @@ -560,6 +561,7 @@ void tcp_send_fin(struct sock *sk);
1663 void tcp_send_active_reset(struct sock *sk, gfp_t priority);
1664 int tcp_send_synack(struct sock *);
1665 void tcp_push_one(struct sock *, unsigned int mss_now);
1666 +void __tcp_send_ack(struct sock *sk, u32 rcv_nxt);
1667 void tcp_send_ack(struct sock *sk);
1668 void tcp_send_delayed_ack(struct sock *sk);
1669 void tcp_send_loss_probe(struct sock *sk);
1670 @@ -857,6 +859,11 @@ struct tcp_skb_cb {
1671 * as TCP moves IP6CB into a different location in skb->cb[]
1672 */
1673 static inline int tcp_v6_iif(const struct sk_buff *skb)
1674 +{
1675 + return TCP_SKB_CB(skb)->header.h6.iif;
1676 +}
1677 +
1678 +static inline int tcp_v6_iif_l3_slave(const struct sk_buff *skb)
1679 {
1680 bool l3_slave = ipv6_l3mdev_skb(TCP_SKB_CB(skb)->header.h6.flags);
1681
1682 diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
1683 index 4cfdad08aca0..efe396cc77b5 100644
1684 --- a/net/core/rtnetlink.c
1685 +++ b/net/core/rtnetlink.c
1686 @@ -2402,9 +2402,12 @@ int rtnl_configure_link(struct net_device *dev, const struct ifinfomsg *ifm)
1687 return err;
1688 }
1689
1690 - dev->rtnl_link_state = RTNL_LINK_INITIALIZED;
1691 -
1692 - __dev_notify_flags(dev, old_flags, ~0U);
1693 + if (dev->rtnl_link_state == RTNL_LINK_INITIALIZED) {
1694 + __dev_notify_flags(dev, old_flags, 0U);
1695 + } else {
1696 + dev->rtnl_link_state = RTNL_LINK_INITIALIZED;
1697 + __dev_notify_flags(dev, old_flags, ~0U);
1698 + }
1699 return 0;
1700 }
1701 EXPORT_SYMBOL(rtnl_configure_link);
1702 diff --git a/net/core/skbuff.c b/net/core/skbuff.c
1703 index 23041b5c0b27..2e5eeba97de9 100644
1704 --- a/net/core/skbuff.c
1705 +++ b/net/core/skbuff.c
1706 @@ -3675,6 +3675,7 @@ normal:
1707 net_warn_ratelimited(
1708 "skb_segment: too many frags: %u %u\n",
1709 pos, mss);
1710 + err = -EINVAL;
1711 goto err;
1712 }
1713
1714 @@ -3713,11 +3714,10 @@ skip_fraglist:
1715
1716 perform_csum_check:
1717 if (!csum) {
1718 - if (skb_has_shared_frag(nskb)) {
1719 - err = __skb_linearize(nskb);
1720 - if (err)
1721 - goto err;
1722 - }
1723 + if (skb_has_shared_frag(nskb) &&
1724 + __skb_linearize(nskb))
1725 + goto err;
1726 +
1727 if (!nskb->remcsum_offload)
1728 nskb->ip_summed = CHECKSUM_NONE;
1729 SKB_GSO_CB(nskb)->csum =
1730 diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
1731 index fbeb35ad804b..502aae3e3ab8 100644
1732 --- a/net/ipv4/igmp.c
1733 +++ b/net/ipv4/igmp.c
1734 @@ -1201,8 +1201,7 @@ static void igmpv3_del_delrec(struct in_device *in_dev, struct ip_mc_list *im)
1735 if (pmc) {
1736 im->interface = pmc->interface;
1737 im->crcount = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv;
1738 - im->sfmode = pmc->sfmode;
1739 - if (pmc->sfmode == MCAST_INCLUDE) {
1740 + if (im->sfmode == MCAST_INCLUDE) {
1741 im->tomb = pmc->tomb;
1742 im->sources = pmc->sources;
1743 for (psf = im->sources; psf; psf = psf->sf_next)
1744 diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
1745 index 63d5d66e040a..e2dd325bed9b 100644
1746 --- a/net/ipv4/ip_output.c
1747 +++ b/net/ipv4/ip_output.c
1748 @@ -523,6 +523,8 @@ static void ip_copy_metadata(struct sk_buff *to, struct sk_buff *from)
1749 to->dev = from->dev;
1750 to->mark = from->mark;
1751
1752 + skb_copy_hash(to, from);
1753 +
1754 /* Copy the flags to each fragment. */
1755 IPCB(to)->flags = IPCB(from)->flags;
1756
1757 diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
1758 index d07ba4d5917b..048d5f6dd320 100644
1759 --- a/net/ipv4/ip_sockglue.c
1760 +++ b/net/ipv4/ip_sockglue.c
1761 @@ -148,15 +148,18 @@ static void ip_cmsg_recv_dstaddr(struct msghdr *msg, struct sk_buff *skb)
1762 {
1763 struct sockaddr_in sin;
1764 const struct iphdr *iph = ip_hdr(skb);
1765 - __be16 *ports = (__be16 *)skb_transport_header(skb);
1766 + __be16 *ports;
1767 + int end;
1768
1769 - if (skb_transport_offset(skb) + 4 > (int)skb->len)
1770 + end = skb_transport_offset(skb) + 4;
1771 + if (end > 0 && !pskb_may_pull(skb, end))
1772 return;
1773
1774 /* All current transport protocols have the port numbers in the
1775 * first four bytes of the transport header and this function is
1776 * written with this assumption in mind.
1777 */
1778 + ports = (__be16 *)skb_transport_header(skb);
1779
1780 sin.sin_family = AF_INET;
1781 sin.sin_addr.s_addr = iph->daddr;
1782 diff --git a/net/ipv4/tcp_dctcp.c b/net/ipv4/tcp_dctcp.c
1783 index 5f5e5936760e..c78fb53988a1 100644
1784 --- a/net/ipv4/tcp_dctcp.c
1785 +++ b/net/ipv4/tcp_dctcp.c
1786 @@ -131,23 +131,14 @@ static void dctcp_ce_state_0_to_1(struct sock *sk)
1787 struct dctcp *ca = inet_csk_ca(sk);
1788 struct tcp_sock *tp = tcp_sk(sk);
1789
1790 - /* State has changed from CE=0 to CE=1 and delayed
1791 - * ACK has not sent yet.
1792 - */
1793 - if (!ca->ce_state && ca->delayed_ack_reserved) {
1794 - u32 tmp_rcv_nxt;
1795 -
1796 - /* Save current rcv_nxt. */
1797 - tmp_rcv_nxt = tp->rcv_nxt;
1798 -
1799 - /* Generate previous ack with CE=0. */
1800 - tp->ecn_flags &= ~TCP_ECN_DEMAND_CWR;
1801 - tp->rcv_nxt = ca->prior_rcv_nxt;
1802 -
1803 - tcp_send_ack(sk);
1804 -
1805 - /* Recover current rcv_nxt. */
1806 - tp->rcv_nxt = tmp_rcv_nxt;
1807 + if (!ca->ce_state) {
1808 + /* State has changed from CE=0 to CE=1, force an immediate
1809 + * ACK to reflect the new CE state. If an ACK was delayed,
1810 + * send that first to reflect the prior CE state.
1811 + */
1812 + if (inet_csk(sk)->icsk_ack.pending & ICSK_ACK_TIMER)
1813 + __tcp_send_ack(sk, ca->prior_rcv_nxt);
1814 + tcp_enter_quickack_mode(sk);
1815 }
1816
1817 ca->prior_rcv_nxt = tp->rcv_nxt;
1818 @@ -161,23 +152,14 @@ static void dctcp_ce_state_1_to_0(struct sock *sk)
1819 struct dctcp *ca = inet_csk_ca(sk);
1820 struct tcp_sock *tp = tcp_sk(sk);
1821
1822 - /* State has changed from CE=1 to CE=0 and delayed
1823 - * ACK has not sent yet.
1824 - */
1825 - if (ca->ce_state && ca->delayed_ack_reserved) {
1826 - u32 tmp_rcv_nxt;
1827 -
1828 - /* Save current rcv_nxt. */
1829 - tmp_rcv_nxt = tp->rcv_nxt;
1830 -
1831 - /* Generate previous ack with CE=1. */
1832 - tp->ecn_flags |= TCP_ECN_DEMAND_CWR;
1833 - tp->rcv_nxt = ca->prior_rcv_nxt;
1834 -
1835 - tcp_send_ack(sk);
1836 -
1837 - /* Recover current rcv_nxt. */
1838 - tp->rcv_nxt = tmp_rcv_nxt;
1839 + if (ca->ce_state) {
1840 + /* State has changed from CE=1 to CE=0, force an immediate
1841 + * ACK to reflect the new CE state. If an ACK was delayed,
1842 + * send that first to reflect the prior CE state.
1843 + */
1844 + if (inet_csk(sk)->icsk_ack.pending & ICSK_ACK_TIMER)
1845 + __tcp_send_ack(sk, ca->prior_rcv_nxt);
1846 + tcp_enter_quickack_mode(sk);
1847 }
1848
1849 ca->prior_rcv_nxt = tp->rcv_nxt;
1850 diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
1851 index 5711b1b12d28..b86e7b8beb1d 100644
1852 --- a/net/ipv4/tcp_input.c
1853 +++ b/net/ipv4/tcp_input.c
1854 @@ -209,13 +209,14 @@ static void tcp_incr_quickack(struct sock *sk)
1855 icsk->icsk_ack.quick = min(quickacks, TCP_MAX_QUICKACKS);
1856 }
1857
1858 -static void tcp_enter_quickack_mode(struct sock *sk)
1859 +void tcp_enter_quickack_mode(struct sock *sk)
1860 {
1861 struct inet_connection_sock *icsk = inet_csk(sk);
1862 tcp_incr_quickack(sk);
1863 icsk->icsk_ack.pingpong = 0;
1864 icsk->icsk_ack.ato = TCP_ATO_MIN;
1865 }
1866 +EXPORT_SYMBOL(tcp_enter_quickack_mode);
1867
1868 /* Send ACKs quickly, if "quick" count is not exhausted
1869 * and the session is not interactive.
1870 @@ -4331,6 +4332,23 @@ static bool tcp_try_coalesce(struct sock *sk,
1871 return true;
1872 }
1873
1874 +static bool tcp_ooo_try_coalesce(struct sock *sk,
1875 + struct sk_buff *to,
1876 + struct sk_buff *from,
1877 + bool *fragstolen)
1878 +{
1879 + bool res = tcp_try_coalesce(sk, OOO_QUEUE, to, from, fragstolen);
1880 +
1881 + /* In case tcp_drop() is called later, update to->gso_segs */
1882 + if (res) {
1883 + u32 gso_segs = max_t(u16, 1, skb_shinfo(to)->gso_segs) +
1884 + max_t(u16, 1, skb_shinfo(from)->gso_segs);
1885 +
1886 + skb_shinfo(to)->gso_segs = min_t(u32, gso_segs, 0xFFFF);
1887 + }
1888 + return res;
1889 +}
1890 +
1891 static void tcp_drop(struct sock *sk, struct sk_buff *skb)
1892 {
1893 sk_drops_add(sk, skb);
1894 @@ -4462,8 +4480,8 @@ static void tcp_data_queue_ofo(struct sock *sk, struct sk_buff *skb)
1895 /* In the typical case, we are adding an skb to the end of the list.
1896 * Use of ooo_last_skb avoids the O(Log(N)) rbtree lookup.
1897 */
1898 - if (tcp_try_coalesce(sk, OOO_QUEUE, tp->ooo_last_skb,
1899 - skb, &fragstolen)) {
1900 + if (tcp_ooo_try_coalesce(sk, tp->ooo_last_skb,
1901 + skb, &fragstolen)) {
1902 coalesce_done:
1903 tcp_grow_window(sk, skb);
1904 kfree_skb_partial(skb, fragstolen);
1905 @@ -4491,7 +4509,7 @@ coalesce_done:
1906 /* All the bits are present. Drop. */
1907 NET_INC_STATS(sock_net(sk),
1908 LINUX_MIB_TCPOFOMERGE);
1909 - __kfree_skb(skb);
1910 + tcp_drop(sk, skb);
1911 skb = NULL;
1912 tcp_dsack_set(sk, seq, end_seq);
1913 goto add_sack;
1914 @@ -4510,11 +4528,11 @@ coalesce_done:
1915 TCP_SKB_CB(skb1)->end_seq);
1916 NET_INC_STATS(sock_net(sk),
1917 LINUX_MIB_TCPOFOMERGE);
1918 - __kfree_skb(skb1);
1919 + tcp_drop(sk, skb1);
1920 goto merge_right;
1921 }
1922 - } else if (tcp_try_coalesce(sk, OOO_QUEUE, skb1,
1923 - skb, &fragstolen)) {
1924 + } else if (tcp_ooo_try_coalesce(sk, skb1,
1925 + skb, &fragstolen)) {
1926 goto coalesce_done;
1927 }
1928 p = &parent->rb_right;
1929 @@ -4876,6 +4894,7 @@ end:
1930 static void tcp_collapse_ofo_queue(struct sock *sk)
1931 {
1932 struct tcp_sock *tp = tcp_sk(sk);
1933 + u32 range_truesize, sum_tiny = 0;
1934 struct sk_buff *skb, *head;
1935 struct rb_node *p;
1936 u32 start, end;
1937 @@ -4894,6 +4913,7 @@ new_range:
1938 }
1939 start = TCP_SKB_CB(skb)->seq;
1940 end = TCP_SKB_CB(skb)->end_seq;
1941 + range_truesize = skb->truesize;
1942
1943 for (head = skb;;) {
1944 skb = tcp_skb_next(skb, NULL);
1945 @@ -4904,11 +4924,20 @@ new_range:
1946 if (!skb ||
1947 after(TCP_SKB_CB(skb)->seq, end) ||
1948 before(TCP_SKB_CB(skb)->end_seq, start)) {
1949 - tcp_collapse(sk, NULL, &tp->out_of_order_queue,
1950 - head, skb, start, end);
1951 + /* Do not attempt collapsing tiny skbs */
1952 + if (range_truesize != head->truesize ||
1953 + end - start >= SKB_WITH_OVERHEAD(SK_MEM_QUANTUM)) {
1954 + tcp_collapse(sk, NULL, &tp->out_of_order_queue,
1955 + head, skb, start, end);
1956 + } else {
1957 + sum_tiny += range_truesize;
1958 + if (sum_tiny > sk->sk_rcvbuf >> 3)
1959 + return;
1960 + }
1961 goto new_range;
1962 }
1963
1964 + range_truesize += skb->truesize;
1965 if (unlikely(before(TCP_SKB_CB(skb)->seq, start)))
1966 start = TCP_SKB_CB(skb)->seq;
1967 if (after(TCP_SKB_CB(skb)->end_seq, end))
1968 @@ -4923,6 +4952,7 @@ new_range:
1969 * 2) not add too big latencies if thousands of packets sit there.
1970 * (But if application shrinks SO_RCVBUF, we could still end up
1971 * freeing whole queue here)
1972 + * 3) Drop at least 12.5 % of sk_rcvbuf to avoid malicious attacks.
1973 *
1974 * Return true if queue has shrunk.
1975 */
1976 @@ -4930,20 +4960,26 @@ static bool tcp_prune_ofo_queue(struct sock *sk)
1977 {
1978 struct tcp_sock *tp = tcp_sk(sk);
1979 struct rb_node *node, *prev;
1980 + int goal;
1981
1982 if (RB_EMPTY_ROOT(&tp->out_of_order_queue))
1983 return false;
1984
1985 NET_INC_STATS(sock_net(sk), LINUX_MIB_OFOPRUNED);
1986 + goal = sk->sk_rcvbuf >> 3;
1987 node = &tp->ooo_last_skb->rbnode;
1988 do {
1989 prev = rb_prev(node);
1990 rb_erase(node, &tp->out_of_order_queue);
1991 + goal -= rb_to_skb(node)->truesize;
1992 tcp_drop(sk, rb_entry(node, struct sk_buff, rbnode));
1993 - sk_mem_reclaim(sk);
1994 - if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf &&
1995 - !tcp_under_memory_pressure(sk))
1996 - break;
1997 + if (!prev || goal <= 0) {
1998 + sk_mem_reclaim(sk);
1999 + if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf &&
2000 + !tcp_under_memory_pressure(sk))
2001 + break;
2002 + goal = sk->sk_rcvbuf >> 3;
2003 + }
2004 node = prev;
2005 } while (node);
2006 tp->ooo_last_skb = rb_entry(prev, struct sk_buff, rbnode);
2007 @@ -4978,6 +5014,9 @@ static int tcp_prune_queue(struct sock *sk)
2008 else if (tcp_under_memory_pressure(sk))
2009 tp->rcv_ssthresh = min(tp->rcv_ssthresh, 4U * tp->advmss);
2010
2011 + if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf)
2012 + return 0;
2013 +
2014 tcp_collapse_ofo_queue(sk);
2015 if (!skb_queue_empty(&sk->sk_receive_queue))
2016 tcp_collapse(sk, &sk->sk_receive_queue, NULL,
2017 diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
2018 index abae5196cd3a..3d8f6f342cb1 100644
2019 --- a/net/ipv4/tcp_output.c
2020 +++ b/net/ipv4/tcp_output.c
2021 @@ -175,8 +175,13 @@ static void tcp_event_data_sent(struct tcp_sock *tp,
2022 }
2023
2024 /* Account for an ACK we sent. */
2025 -static inline void tcp_event_ack_sent(struct sock *sk, unsigned int pkts)
2026 +static inline void tcp_event_ack_sent(struct sock *sk, unsigned int pkts,
2027 + u32 rcv_nxt)
2028 {
2029 + struct tcp_sock *tp = tcp_sk(sk);
2030 +
2031 + if (unlikely(rcv_nxt != tp->rcv_nxt))
2032 + return; /* Special ACK sent by DCTCP to reflect ECN */
2033 tcp_dec_quickack_mode(sk, pkts);
2034 inet_csk_clear_xmit_timer(sk, ICSK_TIME_DACK);
2035 }
2036 @@ -984,8 +989,8 @@ static void tcp_internal_pacing(struct sock *sk, const struct sk_buff *skb)
2037 * We are working here with either a clone of the original
2038 * SKB, or a fresh unique copy made by the retransmit engine.
2039 */
2040 -static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,
2041 - gfp_t gfp_mask)
2042 +static int __tcp_transmit_skb(struct sock *sk, struct sk_buff *skb,
2043 + int clone_it, gfp_t gfp_mask, u32 rcv_nxt)
2044 {
2045 const struct inet_connection_sock *icsk = inet_csk(sk);
2046 struct inet_sock *inet;
2047 @@ -1057,7 +1062,7 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,
2048 th->source = inet->inet_sport;
2049 th->dest = inet->inet_dport;
2050 th->seq = htonl(tcb->seq);
2051 - th->ack_seq = htonl(tp->rcv_nxt);
2052 + th->ack_seq = htonl(rcv_nxt);
2053 *(((__be16 *)th) + 6) = htons(((tcp_header_size >> 2) << 12) |
2054 tcb->tcp_flags);
2055
2056 @@ -1098,7 +1103,7 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,
2057 icsk->icsk_af_ops->send_check(sk, skb);
2058
2059 if (likely(tcb->tcp_flags & TCPHDR_ACK))
2060 - tcp_event_ack_sent(sk, tcp_skb_pcount(skb));
2061 + tcp_event_ack_sent(sk, tcp_skb_pcount(skb), rcv_nxt);
2062
2063 if (skb->len != tcp_header_size) {
2064 tcp_event_data_sent(tp, sk);
2065 @@ -1135,6 +1140,13 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,
2066 return err;
2067 }
2068
2069 +static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,
2070 + gfp_t gfp_mask)
2071 +{
2072 + return __tcp_transmit_skb(sk, skb, clone_it, gfp_mask,
2073 + tcp_sk(sk)->rcv_nxt);
2074 +}
2075 +
2076 /* This routine just queues the buffer for sending.
2077 *
2078 * NOTE: probe0 timer is not checked, do not forget tcp_push_pending_frames,
2079 @@ -3551,7 +3563,7 @@ void tcp_send_delayed_ack(struct sock *sk)
2080 }
2081
2082 /* This routine sends an ack and also updates the window. */
2083 -void tcp_send_ack(struct sock *sk)
2084 +void __tcp_send_ack(struct sock *sk, u32 rcv_nxt)
2085 {
2086 struct sk_buff *buff;
2087
2088 @@ -3586,9 +3598,14 @@ void tcp_send_ack(struct sock *sk)
2089 skb_set_tcp_pure_ack(buff);
2090
2091 /* Send it off, this clears delayed acks for us. */
2092 - tcp_transmit_skb(sk, buff, 0, (__force gfp_t)0);
2093 + __tcp_transmit_skb(sk, buff, 0, (__force gfp_t)0, rcv_nxt);
2094 +}
2095 +EXPORT_SYMBOL_GPL(__tcp_send_ack);
2096 +
2097 +void tcp_send_ack(struct sock *sk)
2098 +{
2099 + __tcp_send_ack(sk, tcp_sk(sk)->rcv_nxt);
2100 }
2101 -EXPORT_SYMBOL_GPL(tcp_send_ack);
2102
2103 /* This routine sends a packet with an out of date sequence
2104 * number. It assumes the other end will try to ack it.
2105 diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c
2106 index 453dc3726199..461825e0680f 100644
2107 --- a/net/ipv6/datagram.c
2108 +++ b/net/ipv6/datagram.c
2109 @@ -708,13 +708,16 @@ void ip6_datagram_recv_specific_ctl(struct sock *sk, struct msghdr *msg,
2110 }
2111 if (np->rxopt.bits.rxorigdstaddr) {
2112 struct sockaddr_in6 sin6;
2113 - __be16 *ports = (__be16 *) skb_transport_header(skb);
2114 + __be16 *ports;
2115 + int end;
2116
2117 - if (skb_transport_offset(skb) + 4 <= (int)skb->len) {
2118 + end = skb_transport_offset(skb) + 4;
2119 + if (end <= 0 || pskb_may_pull(skb, end)) {
2120 /* All current transport protocols have the port numbers in the
2121 * first four bytes of the transport header and this function is
2122 * written with this assumption in mind.
2123 */
2124 + ports = (__be16 *)skb_transport_header(skb);
2125
2126 sin6.sin6_family = AF_INET6;
2127 sin6.sin6_addr = ipv6_hdr(skb)->daddr;
2128 diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c
2129 index 5acb54405b10..c5f2b17b7ee1 100644
2130 --- a/net/ipv6/icmp.c
2131 +++ b/net/ipv6/icmp.c
2132 @@ -405,9 +405,10 @@ static int icmp6_iif(const struct sk_buff *skb)
2133
2134 /* for local traffic to local address, skb dev is the loopback
2135 * device. Check if there is a dst attached to the skb and if so
2136 - * get the real device index.
2137 + * get the real device index. Same is needed for replies to a link
2138 + * local address on a device enslaved to an L3 master device
2139 */
2140 - if (unlikely(iif == LOOPBACK_IFINDEX)) {
2141 + if (unlikely(iif == LOOPBACK_IFINDEX || netif_is_l3_master(skb->dev))) {
2142 const struct rt6_info *rt6 = skb_rt6_info(skb);
2143
2144 if (rt6)
2145 diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
2146 index 32fcce711855..1da021527fcd 100644
2147 --- a/net/ipv6/ip6_output.c
2148 +++ b/net/ipv6/ip6_output.c
2149 @@ -595,6 +595,8 @@ static void ip6_copy_metadata(struct sk_buff *to, struct sk_buff *from)
2150 to->dev = from->dev;
2151 to->mark = from->mark;
2152
2153 + skb_copy_hash(to, from);
2154 +
2155 #ifdef CONFIG_NET_SCHED
2156 to->tc_index = from->tc_index;
2157 #endif
2158 diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
2159 index 9a38a2c641fa..6fd913d63835 100644
2160 --- a/net/ipv6/mcast.c
2161 +++ b/net/ipv6/mcast.c
2162 @@ -771,8 +771,7 @@ static void mld_del_delrec(struct inet6_dev *idev, struct ifmcaddr6 *im)
2163 if (pmc) {
2164 im->idev = pmc->idev;
2165 im->mca_crcount = idev->mc_qrv;
2166 - im->mca_sfmode = pmc->mca_sfmode;
2167 - if (pmc->mca_sfmode == MCAST_INCLUDE) {
2168 + if (im->mca_sfmode == MCAST_INCLUDE) {
2169 im->mca_tomb = pmc->mca_tomb;
2170 im->mca_sources = pmc->mca_sources;
2171 for (psf = im->mca_sources; psf; psf = psf->sf_next)
2172 diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
2173 index 35e8aef9ceed..ba8586aadffa 100644
2174 --- a/net/ipv6/tcp_ipv6.c
2175 +++ b/net/ipv6/tcp_ipv6.c
2176 @@ -918,7 +918,8 @@ static void tcp_v6_send_reset(const struct sock *sk, struct sk_buff *skb)
2177 &tcp_hashinfo, NULL, 0,
2178 &ipv6h->saddr,
2179 th->source, &ipv6h->daddr,
2180 - ntohs(th->source), tcp_v6_iif(skb),
2181 + ntohs(th->source),
2182 + tcp_v6_iif_l3_slave(skb),
2183 tcp_v6_sdif(skb));
2184 if (!sk1)
2185 goto out;
2186 @@ -1573,7 +1574,8 @@ do_time_wait:
2187 skb, __tcp_hdrlen(th),
2188 &ipv6_hdr(skb)->saddr, th->source,
2189 &ipv6_hdr(skb)->daddr,
2190 - ntohs(th->dest), tcp_v6_iif(skb),
2191 + ntohs(th->dest),
2192 + tcp_v6_iif_l3_slave(skb),
2193 sdif);
2194 if (sk2) {
2195 struct inet_timewait_sock *tw = inet_twsk(sk);
2196 diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c
2197 index 8ee4e667a414..fb79caf56d0e 100644
2198 --- a/net/tls/tls_sw.c
2199 +++ b/net/tls/tls_sw.c
2200 @@ -135,9 +135,10 @@ static int alloc_sg(struct sock *sk, int len, struct scatterlist *sg,
2201 pfrag->offset += use;
2202
2203 sge = sg + num_elem - 1;
2204 - if (num_elem > first_coalesce && sg_page(sg) == pfrag->page &&
2205 - sg->offset + sg->length == orig_offset) {
2206 - sg->length += use;
2207 +
2208 + if (num_elem > first_coalesce && sg_page(sge) == pfrag->page &&
2209 + sge->offset + sge->length == orig_offset) {
2210 + sge->length += use;
2211 } else {
2212 sge++;
2213 sg_unmark_end(sge);