Magellan Linux

Annotation of /trunk/kernel-alx/patches-3.14/0104-3.14.5-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2506 - (hide annotations) (download)
Fri Oct 17 07:55:45 2014 UTC (9 years, 6 months ago) by niro
File size: 190272 byte(s)
-patches for 3.14
1 niro 2506 diff --git a/Makefile b/Makefile
2     index d7c07fd8c944..fa77b0bed2a2 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,8 +1,8 @@
6     VERSION = 3
7     PATCHLEVEL = 14
8     -SUBLEVEL = 4
9     +SUBLEVEL = 5
10     EXTRAVERSION =
11     -NAME = Shuffling Zombie Juror
12     +NAME = Remembering Coco
13    
14     # *DOCUMENTATION*
15     # To see a list of typical targets execute "make help"
16     diff --git a/arch/parisc/include/asm/shmparam.h b/arch/parisc/include/asm/shmparam.h
17     index 628ddc22faa8..afe1300ab667 100644
18     --- a/arch/parisc/include/asm/shmparam.h
19     +++ b/arch/parisc/include/asm/shmparam.h
20     @@ -1,8 +1,7 @@
21     #ifndef _ASMPARISC_SHMPARAM_H
22     #define _ASMPARISC_SHMPARAM_H
23    
24     -#define __ARCH_FORCE_SHMLBA 1
25     -
26     -#define SHMLBA 0x00400000 /* attach addr needs to be 4 Mb aligned */
27     +#define SHMLBA PAGE_SIZE /* attach addr a multiple of this */
28     +#define SHM_COLOUR 0x00400000 /* shared mappings colouring */
29    
30     #endif /* _ASMPARISC_SHMPARAM_H */
31     diff --git a/arch/parisc/include/uapi/asm/resource.h b/arch/parisc/include/uapi/asm/resource.h
32     index 8b06343b62ed..090483c47dbb 100644
33     --- a/arch/parisc/include/uapi/asm/resource.h
34     +++ b/arch/parisc/include/uapi/asm/resource.h
35     @@ -1,7 +1,6 @@
36     #ifndef _ASM_PARISC_RESOURCE_H
37     #define _ASM_PARISC_RESOURCE_H
38    
39     -#define _STK_LIM_MAX 10 * _STK_LIM
40     #include <asm-generic/resource.h>
41    
42     #endif
43     diff --git a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c
44     index a6ffc775a9f8..f6448c7c62b5 100644
45     --- a/arch/parisc/kernel/cache.c
46     +++ b/arch/parisc/kernel/cache.c
47     @@ -323,7 +323,8 @@ void flush_dcache_page(struct page *page)
48     * specifically accesses it, of course) */
49    
50     flush_tlb_page(mpnt, addr);
51     - if (old_addr == 0 || (old_addr & (SHMLBA - 1)) != (addr & (SHMLBA - 1))) {
52     + if (old_addr == 0 || (old_addr & (SHM_COLOUR - 1))
53     + != (addr & (SHM_COLOUR - 1))) {
54     __flush_cache_page(mpnt, addr, page_to_phys(page));
55     if (old_addr)
56     printk(KERN_ERR "INEQUIVALENT ALIASES 0x%lx and 0x%lx in file %s\n", old_addr, addr, mpnt->vm_file ? (char *)mpnt->vm_file->f_path.dentry->d_name.name : "(null)");
57     diff --git a/arch/parisc/kernel/sys_parisc.c b/arch/parisc/kernel/sys_parisc.c
58     index b7cadc4a06cd..31ffa9b55322 100644
59     --- a/arch/parisc/kernel/sys_parisc.c
60     +++ b/arch/parisc/kernel/sys_parisc.c
61     @@ -45,7 +45,7 @@
62    
63     static int get_offset(unsigned int last_mmap)
64     {
65     - return (last_mmap & (SHMLBA-1)) >> PAGE_SHIFT;
66     + return (last_mmap & (SHM_COLOUR-1)) >> PAGE_SHIFT;
67     }
68    
69     static unsigned long shared_align_offset(unsigned int last_mmap,
70     @@ -57,8 +57,8 @@ static unsigned long shared_align_offset(unsigned int last_mmap,
71     static inline unsigned long COLOR_ALIGN(unsigned long addr,
72     unsigned int last_mmap, unsigned long pgoff)
73     {
74     - unsigned long base = (addr+SHMLBA-1) & ~(SHMLBA-1);
75     - unsigned long off = (SHMLBA-1) &
76     + unsigned long base = (addr+SHM_COLOUR-1) & ~(SHM_COLOUR-1);
77     + unsigned long off = (SHM_COLOUR-1) &
78     (shared_align_offset(last_mmap, pgoff) << PAGE_SHIFT);
79    
80     return base + off;
81     @@ -101,7 +101,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
82     if (flags & MAP_FIXED) {
83     if ((flags & MAP_SHARED) && last_mmap &&
84     (addr - shared_align_offset(last_mmap, pgoff))
85     - & (SHMLBA - 1))
86     + & (SHM_COLOUR - 1))
87     return -EINVAL;
88     goto found_addr;
89     }
90     @@ -122,7 +122,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
91     info.length = len;
92     info.low_limit = mm->mmap_legacy_base;
93     info.high_limit = mmap_upper_limit();
94     - info.align_mask = last_mmap ? (PAGE_MASK & (SHMLBA - 1)) : 0;
95     + info.align_mask = last_mmap ? (PAGE_MASK & (SHM_COLOUR - 1)) : 0;
96     info.align_offset = shared_align_offset(last_mmap, pgoff);
97     addr = vm_unmapped_area(&info);
98    
99     @@ -161,7 +161,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
100     if (flags & MAP_FIXED) {
101     if ((flags & MAP_SHARED) && last_mmap &&
102     (addr - shared_align_offset(last_mmap, pgoff))
103     - & (SHMLBA - 1))
104     + & (SHM_COLOUR - 1))
105     return -EINVAL;
106     goto found_addr;
107     }
108     @@ -182,7 +182,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
109     info.length = len;
110     info.low_limit = PAGE_SIZE;
111     info.high_limit = mm->mmap_base;
112     - info.align_mask = last_mmap ? (PAGE_MASK & (SHMLBA - 1)) : 0;
113     + info.align_mask = last_mmap ? (PAGE_MASK & (SHM_COLOUR - 1)) : 0;
114     info.align_offset = shared_align_offset(last_mmap, pgoff);
115     addr = vm_unmapped_area(&info);
116     if (!(addr & ~PAGE_MASK))
117     diff --git a/arch/parisc/kernel/syscall_table.S b/arch/parisc/kernel/syscall_table.S
118     index 80e5dd248934..83ead0ea127d 100644
119     --- a/arch/parisc/kernel/syscall_table.S
120     +++ b/arch/parisc/kernel/syscall_table.S
121     @@ -392,7 +392,7 @@
122     ENTRY_COMP(vmsplice)
123     ENTRY_COMP(move_pages) /* 295 */
124     ENTRY_SAME(getcpu)
125     - ENTRY_SAME(epoll_pwait)
126     + ENTRY_COMP(epoll_pwait)
127     ENTRY_COMP(statfs64)
128     ENTRY_COMP(fstatfs64)
129     ENTRY_COMP(kexec_load) /* 300 */
130     diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c
131     index a778ee27518a..8e08c6712eb8 100644
132     --- a/arch/s390/net/bpf_jit_comp.c
133     +++ b/arch/s390/net/bpf_jit_comp.c
134     @@ -811,7 +811,7 @@ static struct bpf_binary_header *bpf_alloc_binary(unsigned int bpfsize,
135     return NULL;
136     memset(header, 0, sz);
137     header->pages = sz / PAGE_SIZE;
138     - hole = sz - (bpfsize + sizeof(*header));
139     + hole = min(sz - (bpfsize + sizeof(*header)), PAGE_SIZE - sizeof(*header));
140     /* Insert random number of illegal instructions before BPF code
141     * and make sure the first instruction starts at an even address.
142     */
143     diff --git a/arch/x86/include/asm/preempt.h b/arch/x86/include/asm/preempt.h
144     index c8b051933b1b..b39e194f6c8d 100644
145     --- a/arch/x86/include/asm/preempt.h
146     +++ b/arch/x86/include/asm/preempt.h
147     @@ -5,6 +5,18 @@
148     #include <asm/percpu.h>
149     #include <linux/thread_info.h>
150    
151     +#ifdef CONFIG_X86_32
152     +/*
153     + * i386's current_thread_info() depends on ESP and for interrupt/exception
154     + * stacks this doesn't yield the actual task thread_info.
155     + *
156     + * We hard rely on the fact that all the TIF_NEED_RESCHED bits are
157     + * the same, therefore use the slightly more expensive version below.
158     + */
159     +#undef tif_need_resched
160     +#define tif_need_resched() test_tsk_thread_flag(current, TIF_NEED_RESCHED)
161     +#endif
162     +
163     DECLARE_PER_CPU(int, __preempt_count);
164    
165     /*
166     diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
167     index 2b8578432d5b..ee0c3b554a38 100644
168     --- a/arch/x86/kvm/x86.c
169     +++ b/arch/x86/kvm/x86.c
170     @@ -1109,7 +1109,6 @@ static inline u64 get_kernel_ns(void)
171     {
172     struct timespec ts;
173    
174     - WARN_ON(preemptible());
175     ktime_get_ts(&ts);
176     monotonic_to_bootbased(&ts);
177     return timespec_to_ns(&ts);
178     diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
179     index 4ed75dd81d05..af2d4317b218 100644
180     --- a/arch/x86/net/bpf_jit_comp.c
181     +++ b/arch/x86/net/bpf_jit_comp.c
182     @@ -171,7 +171,7 @@ static struct bpf_binary_header *bpf_alloc_binary(unsigned int proglen,
183     memset(header, 0xcc, sz); /* fill whole space with int3 instructions */
184    
185     header->pages = sz / PAGE_SIZE;
186     - hole = sz - (proglen + sizeof(*header));
187     + hole = min(sz - (proglen + sizeof(*header)), PAGE_SIZE - sizeof(*header));
188    
189     /* insert a random number of int3 instructions before BPF code */
190     *image_ptr = &header->image[prandom_u32() % hole];
191     diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c
192     index 581521c843a5..c570feab9fa2 100644
193     --- a/arch/x86/xen/spinlock.c
194     +++ b/arch/x86/xen/spinlock.c
195     @@ -274,7 +274,7 @@ void __init xen_init_spinlocks(void)
196     printk(KERN_DEBUG "xen: PV spinlocks disabled\n");
197     return;
198     }
199     -
200     + printk(KERN_DEBUG "xen: PV spinlocks enabled\n");
201     pv_lock_ops.lock_spinning = PV_CALLEE_SAVE(xen_lock_spinning);
202     pv_lock_ops.unlock_kick = xen_unlock_kick;
203     }
204     @@ -290,6 +290,9 @@ static __init int xen_init_spinlocks_jump(void)
205     if (!xen_pvspin)
206     return 0;
207    
208     + if (!xen_domain())
209     + return 0;
210     +
211     static_key_slow_inc(&paravirt_ticketlocks_enabled);
212     return 0;
213     }
214     diff --git a/block/blk-core.c b/block/blk-core.c
215     index bfe16d5af9f9..e45b321cf6a0 100644
216     --- a/block/blk-core.c
217     +++ b/block/blk-core.c
218     @@ -2353,7 +2353,7 @@ bool blk_update_request(struct request *req, int error, unsigned int nr_bytes)
219     if (!req->bio)
220     return false;
221    
222     - trace_block_rq_complete(req->q, req);
223     + trace_block_rq_complete(req->q, req, nr_bytes);
224    
225     /*
226     * For fs requests, rq is just carrier of independent bio's
227     diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
228     index 34898d53395b..7f2d09fbb10b 100644
229     --- a/drivers/block/rbd.c
230     +++ b/drivers/block/rbd.c
231     @@ -2253,7 +2253,7 @@ out_partial:
232     rbd_obj_request_put(obj_request);
233     out_unwind:
234     for_each_obj_request_safe(img_request, obj_request, next_obj_request)
235     - rbd_obj_request_put(obj_request);
236     + rbd_img_obj_request_del(img_request, obj_request);
237    
238     return -ENOMEM;
239     }
240     diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
241     index df77e20e3c3d..697f2150a997 100644
242     --- a/drivers/gpu/drm/i915/i915_drv.h
243     +++ b/drivers/gpu/drm/i915/i915_drv.h
244     @@ -734,6 +734,7 @@ enum intel_sbi_destination {
245     #define QUIRK_PIPEA_FORCE (1<<0)
246     #define QUIRK_LVDS_SSC_DISABLE (1<<1)
247     #define QUIRK_INVERT_BRIGHTNESS (1<<2)
248     +#define QUIRK_NO_PCH_PWM_ENABLE (1<<3)
249    
250     struct intel_fbdev;
251     struct intel_fbc_work;
252     diff --git a/drivers/gpu/drm/i915/i915_trace.h b/drivers/gpu/drm/i915/i915_trace.h
253     index 6e580c98dede..783ae08200e8 100644
254     --- a/drivers/gpu/drm/i915/i915_trace.h
255     +++ b/drivers/gpu/drm/i915/i915_trace.h
256     @@ -238,14 +238,16 @@ TRACE_EVENT(i915_gem_evict_vm,
257     TP_ARGS(vm),
258    
259     TP_STRUCT__entry(
260     + __field(u32, dev)
261     __field(struct i915_address_space *, vm)
262     ),
263    
264     TP_fast_assign(
265     + __entry->dev = vm->dev->primary->index;
266     __entry->vm = vm;
267     ),
268    
269     - TP_printk("dev=%d, vm=%p", __entry->vm->dev->primary->index, __entry->vm)
270     + TP_printk("dev=%d, vm=%p", __entry->dev, __entry->vm)
271     );
272    
273     TRACE_EVENT(i915_gem_ring_sync_to,
274     diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
275     index 9b8a7c7ea7fc..963639d9049b 100644
276     --- a/drivers/gpu/drm/i915/intel_display.c
277     +++ b/drivers/gpu/drm/i915/intel_display.c
278     @@ -10771,6 +10771,17 @@ static void quirk_invert_brightness(struct drm_device *dev)
279     DRM_INFO("applying inverted panel brightness quirk\n");
280     }
281    
282     +/*
283     + * Some machines (Dell XPS13) suffer broken backlight controls if
284     + * BLM_PCH_PWM_ENABLE is set.
285     + */
286     +static void quirk_no_pcm_pwm_enable(struct drm_device *dev)
287     +{
288     + struct drm_i915_private *dev_priv = dev->dev_private;
289     + dev_priv->quirks |= QUIRK_NO_PCH_PWM_ENABLE;
290     + DRM_INFO("applying no-PCH_PWM_ENABLE quirk\n");
291     +}
292     +
293     struct intel_quirk {
294     int device;
295     int subsystem_vendor;
296     @@ -10839,6 +10850,11 @@ static struct intel_quirk intel_quirks[] = {
297    
298     /* Acer Aspire 4736Z */
299     { 0x2a42, 0x1025, 0x0260, quirk_invert_brightness },
300     +
301     + /* Dell XPS13 HD Sandy Bridge */
302     + { 0x0116, 0x1028, 0x052e, quirk_no_pcm_pwm_enable },
303     + /* Dell XPS13 HD and XPS13 FHD Ivy Bridge */
304     + { 0x0166, 0x1028, 0x058b, quirk_no_pcm_pwm_enable },
305     };
306    
307     static void intel_init_quirks(struct drm_device *dev)
308     diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
309     index 079ea38f14d9..9f1d7a9300e8 100644
310     --- a/drivers/gpu/drm/i915/intel_panel.c
311     +++ b/drivers/gpu/drm/i915/intel_panel.c
312     @@ -671,6 +671,10 @@ static void pch_enable_backlight(struct intel_connector *connector)
313     pch_ctl2 = panel->backlight.max << 16;
314     I915_WRITE(BLC_PWM_PCH_CTL2, pch_ctl2);
315    
316     + /* XXX: transitional */
317     + if (dev_priv->quirks & QUIRK_NO_PCH_PWM_ENABLE)
318     + return;
319     +
320     pch_ctl1 = 0;
321     if (panel->backlight.active_low_pwm)
322     pch_ctl1 |= BLM_PCH_POLARITY;
323     diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
324     index 22cf0f4ba248..99faac555d3b 100644
325     --- a/drivers/gpu/drm/i915/intel_tv.c
326     +++ b/drivers/gpu/drm/i915/intel_tv.c
327     @@ -1536,9 +1536,14 @@ static int tv_is_present_in_vbt(struct drm_device *dev)
328     /*
329     * If the device type is not TV, continue.
330     */
331     - if (p_child->old.device_type != DEVICE_TYPE_INT_TV &&
332     - p_child->old.device_type != DEVICE_TYPE_TV)
333     + switch (p_child->old.device_type) {
334     + case DEVICE_TYPE_INT_TV:
335     + case DEVICE_TYPE_TV:
336     + case DEVICE_TYPE_TV_SVIDEO_COMPOSITE:
337     + break;
338     + default:
339     continue;
340     + }
341     /* Only when the addin_offset is non-zero, it is regarded
342     * as present.
343     */
344     diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
345     index c7e7e6590c2b..c82c1d6a965a 100644
346     --- a/drivers/gpu/drm/qxl/qxl_ttm.c
347     +++ b/drivers/gpu/drm/qxl/qxl_ttm.c
348     @@ -433,6 +433,7 @@ static int qxl_sync_obj_flush(void *sync_obj)
349    
350     static void qxl_sync_obj_unref(void **sync_obj)
351     {
352     + *sync_obj = NULL;
353     }
354    
355     static void *qxl_sync_obj_ref(void *sync_obj)
356     diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
357     index bbb17841a9e5..986f9e7364ca 100644
358     --- a/drivers/gpu/drm/radeon/cik.c
359     +++ b/drivers/gpu/drm/radeon/cik.c
360     @@ -1095,7 +1095,7 @@ static const u32 spectre_golden_registers[] =
361     0x8a14, 0xf000003f, 0x00000007,
362     0x8b24, 0xffffffff, 0x00ffffff,
363     0x28350, 0x3f3f3fff, 0x00000082,
364     - 0x28355, 0x0000003f, 0x00000000,
365     + 0x28354, 0x0000003f, 0x00000000,
366     0x3e78, 0x00000001, 0x00000002,
367     0x913c, 0xffff03df, 0x00000004,
368     0xc768, 0x00000008, 0x00000008,
369     @@ -6521,8 +6521,8 @@ void cik_get_csb_buffer(struct radeon_device *rdev, volatile u32 *buffer)
370     buffer[count++] = cpu_to_le32(0x00000000);
371     break;
372     case CHIP_HAWAII:
373     - buffer[count++] = 0x3a00161a;
374     - buffer[count++] = 0x0000002e;
375     + buffer[count++] = cpu_to_le32(0x3a00161a);
376     + buffer[count++] = cpu_to_le32(0x0000002e);
377     break;
378     default:
379     buffer[count++] = cpu_to_le32(0x00000000);
380     diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
381     index fbd8b930f2be..6e6f82c53fef 100644
382     --- a/drivers/gpu/drm/radeon/radeon_display.c
383     +++ b/drivers/gpu/drm/radeon/radeon_display.c
384     @@ -792,6 +792,7 @@ int radeon_ddc_get_modes(struct radeon_connector *radeon_connector)
385     if (radeon_connector->edid) {
386     drm_mode_connector_update_edid_property(&radeon_connector->base, radeon_connector->edid);
387     ret = drm_add_edid_modes(&radeon_connector->base, radeon_connector->edid);
388     + drm_edid_to_eld(&radeon_connector->base, radeon_connector->edid);
389     return ret;
390     }
391     drm_mode_connector_update_edid_property(&radeon_connector->base, NULL);
392     diff --git a/drivers/gpu/drm/radeon/radeon_ring.c b/drivers/gpu/drm/radeon/radeon_ring.c
393     index 15e44a7281ab..8391fca52a58 100644
394     --- a/drivers/gpu/drm/radeon/radeon_ring.c
395     +++ b/drivers/gpu/drm/radeon/radeon_ring.c
396     @@ -257,6 +257,7 @@ int radeon_ib_ring_tests(struct radeon_device *rdev)
397     r = radeon_ib_test(rdev, i, ring);
398     if (r) {
399     ring->ready = false;
400     + rdev->needs_reset = false;
401    
402     if (i == RADEON_RING_TYPE_GFX_INDEX) {
403     /* oh, oh, that's really bad */
404     diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_context.c b/drivers/gpu/drm/vmwgfx/vmwgfx_context.c
405     index 1e80152674b5..4fbcfdb02360 100644
406     --- a/drivers/gpu/drm/vmwgfx/vmwgfx_context.c
407     +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_context.c
408     @@ -117,10 +117,10 @@ static void vmw_hw_context_destroy(struct vmw_resource *res)
409     (void) vmw_context_binding_state_kill
410     (&container_of(res, struct vmw_user_context, res)->cbs);
411     (void) vmw_gb_context_destroy(res);
412     + mutex_unlock(&dev_priv->binding_mutex);
413     if (dev_priv->pinned_bo != NULL &&
414     !dev_priv->query_cid_valid)
415     __vmw_execbuf_release_pinned_bo(dev_priv, NULL);
416     - mutex_unlock(&dev_priv->binding_mutex);
417     mutex_unlock(&dev_priv->cmdbuf_mutex);
418     return;
419     }
420     diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
421     index efb575a7996c..a3480c13eb1b 100644
422     --- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
423     +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
424     @@ -1214,14 +1214,36 @@ static int vmw_cmd_dma(struct vmw_private *dev_priv,
425     SVGA3dCmdSurfaceDMA dma;
426     } *cmd;
427     int ret;
428     + SVGA3dCmdSurfaceDMASuffix *suffix;
429     + uint32_t bo_size;
430    
431     cmd = container_of(header, struct vmw_dma_cmd, header);
432     + suffix = (SVGA3dCmdSurfaceDMASuffix *)((unsigned long) &cmd->dma +
433     + header->size - sizeof(*suffix));
434     +
435     + /* Make sure device and verifier stays in sync. */
436     + if (unlikely(suffix->suffixSize != sizeof(*suffix))) {
437     + DRM_ERROR("Invalid DMA suffix size.\n");
438     + return -EINVAL;
439     + }
440     +
441     ret = vmw_translate_guest_ptr(dev_priv, sw_context,
442     &cmd->dma.guest.ptr,
443     &vmw_bo);
444     if (unlikely(ret != 0))
445     return ret;
446    
447     + /* Make sure DMA doesn't cross BO boundaries. */
448     + bo_size = vmw_bo->base.num_pages * PAGE_SIZE;
449     + if (unlikely(cmd->dma.guest.ptr.offset > bo_size)) {
450     + DRM_ERROR("Invalid DMA offset.\n");
451     + return -EINVAL;
452     + }
453     +
454     + bo_size -= cmd->dma.guest.ptr.offset;
455     + if (unlikely(suffix->maximumOffset > bo_size))
456     + suffix->maximumOffset = bo_size;
457     +
458     ret = vmw_cmd_res_check(dev_priv, sw_context, vmw_res_surface,
459     user_surface_converter, &cmd->dma.host.sid,
460     NULL);
461     diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
462     index ed5ce2a41bbf..021b5227e783 100644
463     --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
464     +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
465     @@ -147,7 +147,7 @@ static int vmw_fb_check_var(struct fb_var_screeninfo *var,
466     }
467    
468     if (!vmw_kms_validate_mode_vram(vmw_priv,
469     - info->fix.line_length,
470     + var->xres * var->bits_per_pixel/8,
471     var->yoffset + var->yres)) {
472     DRM_ERROR("Requested geom can not fit in framebuffer\n");
473     return -EINVAL;
474     @@ -162,6 +162,8 @@ static int vmw_fb_set_par(struct fb_info *info)
475     struct vmw_private *vmw_priv = par->vmw_priv;
476     int ret;
477    
478     + info->fix.line_length = info->var.xres * info->var.bits_per_pixel/8;
479     +
480     ret = vmw_kms_write_svga(vmw_priv, info->var.xres, info->var.yres,
481     info->fix.line_length,
482     par->bpp, par->depth);
483     @@ -177,6 +179,7 @@ static int vmw_fb_set_par(struct fb_info *info)
484     vmw_write(vmw_priv, SVGA_REG_DISPLAY_POSITION_Y, info->var.yoffset);
485     vmw_write(vmw_priv, SVGA_REG_DISPLAY_WIDTH, info->var.xres);
486     vmw_write(vmw_priv, SVGA_REG_DISPLAY_HEIGHT, info->var.yres);
487     + vmw_write(vmw_priv, SVGA_REG_BYTES_PER_LINE, info->fix.line_length);
488     vmw_write(vmw_priv, SVGA_REG_DISPLAY_ID, SVGA_ID_INVALID);
489     }
490    
491     diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
492     index cc32a6f96c64..8a5384ce0352 100644
493     --- a/drivers/hid/hid-core.c
494     +++ b/drivers/hid/hid-core.c
495     @@ -718,6 +718,9 @@ static int hid_scan_main(struct hid_parser *parser, struct hid_item *item)
496     case HID_MAIN_ITEM_TAG_END_COLLECTION:
497     break;
498     case HID_MAIN_ITEM_TAG_INPUT:
499     + /* ignore constant inputs, they will be ignored by hid-input */
500     + if (data & HID_MAIN_ITEM_CONSTANT)
501     + break;
502     for (i = 0; i < parser->local.usage_index; i++)
503     hid_scan_input_usage(parser, parser->local.usage[i]);
504     break;
505     @@ -1780,8 +1783,6 @@ static const struct hid_device_id hid_have_special_driver[] = {
506     { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_USB) },
507     { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_3K) },
508     { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_WIRELESS_OPTICAL_DESKTOP_3_0) },
509     - { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_2) },
510     - { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TOUCH_COVER_2) },
511     { HID_USB_DEVICE(USB_VENDOR_ID_MONTEREY, USB_DEVICE_ID_GENIUS_KB29E) },
512     { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN) },
513     { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_1) },
514     diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
515     index 22f28d6b33a8..6e12cd0317f6 100644
516     --- a/drivers/hid/hid-ids.h
517     +++ b/drivers/hid/hid-ids.h
518     @@ -624,8 +624,6 @@
519     #define USB_DEVICE_ID_MS_PRESENTER_8K_USB 0x0713
520     #define USB_DEVICE_ID_MS_DIGITAL_MEDIA_3K 0x0730
521     #define USB_DEVICE_ID_MS_COMFORT_MOUSE_4500 0x076c
522     -#define USB_DEVICE_ID_MS_TOUCH_COVER_2 0x07a7
523     -#define USB_DEVICE_ID_MS_TYPE_COVER_2 0x07a9
524    
525     #define USB_VENDOR_ID_MOJO 0x8282
526     #define USB_DEVICE_ID_RETRO_ADAPTER 0x3201
527     @@ -830,6 +828,7 @@
528     #define USB_DEVICE_ID_SYNAPTICS_LTS2 0x1d10
529     #define USB_DEVICE_ID_SYNAPTICS_HD 0x0ac3
530     #define USB_DEVICE_ID_SYNAPTICS_QUAD_HD 0x1ac3
531     +#define USB_DEVICE_ID_SYNAPTICS_TP_V103 0x5710
532    
533     #define USB_VENDOR_ID_THINGM 0x27b8
534     #define USB_DEVICE_ID_BLINK1 0x01ed
535     diff --git a/drivers/hid/hid-microsoft.c b/drivers/hid/hid-microsoft.c
536     index 404a3a8a82f1..c6ef6eed3091 100644
537     --- a/drivers/hid/hid-microsoft.c
538     +++ b/drivers/hid/hid-microsoft.c
539     @@ -208,10 +208,6 @@ static const struct hid_device_id ms_devices[] = {
540     .driver_data = MS_NOGET },
541     { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_COMFORT_MOUSE_4500),
542     .driver_data = MS_DUPLICATE_USAGES },
543     - { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_2),
544     - .driver_data = 0 },
545     - { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TOUCH_COVER_2),
546     - .driver_data = 0 },
547    
548     { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_BT),
549     .driver_data = MS_PRESENTER },
550     diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
551     index dbd83878ff99..8e4ddb369883 100644
552     --- a/drivers/hid/usbhid/hid-quirks.c
553     +++ b/drivers/hid/usbhid/hid-quirks.c
554     @@ -119,6 +119,7 @@ static const struct hid_blacklist {
555     { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS2, HID_QUIRK_NO_INIT_REPORTS },
556     { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_HD, HID_QUIRK_NO_INIT_REPORTS },
557     { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_QUAD_HD, HID_QUIRK_NO_INIT_REPORTS },
558     + { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_TP_V103, HID_QUIRK_NO_INIT_REPORTS },
559    
560     { 0, 0 }
561     };
562     diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
563     index 4a6ca1cb2e78..56e24c072b62 100644
564     --- a/drivers/md/raid1.c
565     +++ b/drivers/md/raid1.c
566     @@ -97,6 +97,7 @@ static void * r1buf_pool_alloc(gfp_t gfp_flags, void *data)
567     struct pool_info *pi = data;
568     struct r1bio *r1_bio;
569     struct bio *bio;
570     + int need_pages;
571     int i, j;
572    
573     r1_bio = r1bio_pool_alloc(gfp_flags, pi);
574     @@ -119,15 +120,15 @@ static void * r1buf_pool_alloc(gfp_t gfp_flags, void *data)
575     * RESYNC_PAGES for each bio.
576     */
577     if (test_bit(MD_RECOVERY_REQUESTED, &pi->mddev->recovery))
578     - j = pi->raid_disks;
579     + need_pages = pi->raid_disks;
580     else
581     - j = 1;
582     - while(j--) {
583     + need_pages = 1;
584     + for (j = 0; j < need_pages; j++) {
585     bio = r1_bio->bios[j];
586     bio->bi_vcnt = RESYNC_PAGES;
587    
588     if (bio_alloc_pages(bio, gfp_flags))
589     - goto out_free_bio;
590     + goto out_free_pages;
591     }
592     /* If not user-requests, copy the page pointers to all bios */
593     if (!test_bit(MD_RECOVERY_REQUESTED, &pi->mddev->recovery)) {
594     @@ -141,6 +142,14 @@ static void * r1buf_pool_alloc(gfp_t gfp_flags, void *data)
595    
596     return r1_bio;
597    
598     +out_free_pages:
599     + while (--j >= 0) {
600     + struct bio_vec *bv;
601     +
602     + bio_for_each_segment_all(bv, r1_bio->bios[j], i)
603     + __free_page(bv->bv_page);
604     + }
605     +
606     out_free_bio:
607     while (++j < pi->raid_disks)
608     bio_put(r1_bio->bios[j]);
609     diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
610     index e5628fc725c3..91ec8cd12478 100644
611     --- a/drivers/net/bonding/bond_main.c
612     +++ b/drivers/net/bonding/bond_main.c
613     @@ -4536,6 +4536,7 @@ static int __init bonding_init(void)
614     out:
615     return res;
616     err:
617     + bond_destroy_debugfs();
618     bond_netlink_fini();
619     err_link:
620     unregister_pernet_subsys(&bond_net_ops);
621     diff --git a/drivers/net/bonding/bond_options.c b/drivers/net/bonding/bond_options.c
622     index 298c26509095..a937a37ae89f 100644
623     --- a/drivers/net/bonding/bond_options.c
624     +++ b/drivers/net/bonding/bond_options.c
625     @@ -70,6 +70,7 @@ static struct bond_opt_value bond_fail_over_mac_tbl[] = {
626     static struct bond_opt_value bond_intmax_tbl[] = {
627     { "off", 0, BOND_VALFLAG_DEFAULT},
628     { "maxval", INT_MAX, BOND_VALFLAG_MAX},
629     + { NULL, -1, 0}
630     };
631    
632     static struct bond_opt_value bond_lacp_rate_tbl[] = {
633     diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
634     index 70a225c8df5c..a210766279d3 100644
635     --- a/drivers/net/ethernet/broadcom/tg3.c
636     +++ b/drivers/net/ethernet/broadcom/tg3.c
637     @@ -12294,7 +12294,9 @@ static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *e
638     if (tg3_flag(tp, MAX_RXPEND_64) &&
639     tp->rx_pending > 63)
640     tp->rx_pending = 63;
641     - tp->rx_jumbo_pending = ering->rx_jumbo_pending;
642     +
643     + if (tg3_flag(tp, JUMBO_RING_ENABLE))
644     + tp->rx_jumbo_pending = ering->rx_jumbo_pending;
645    
646     for (i = 0; i < tp->irq_max; i++)
647     tp->napi[i].tx_pending = ering->tx_pending;
648     diff --git a/drivers/net/ethernet/mellanox/mlx4/en_cq.c b/drivers/net/ethernet/mellanox/mlx4/en_cq.c
649     index 70e95324a97d..c2cd8d31bcad 100644
650     --- a/drivers/net/ethernet/mellanox/mlx4/en_cq.c
651     +++ b/drivers/net/ethernet/mellanox/mlx4/en_cq.c
652     @@ -66,7 +66,6 @@ int mlx4_en_create_cq(struct mlx4_en_priv *priv,
653    
654     cq->ring = ring;
655     cq->is_tx = mode;
656     - spin_lock_init(&cq->lock);
657    
658     /* Allocate HW buffers on provided NUMA node.
659     * dev->numa_node is used in mtt range allocation flow.
660     diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
661     index 84a96f70dfb5..2f83f3489fdb 100644
662     --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
663     +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
664     @@ -1315,15 +1315,11 @@ static void mlx4_en_netpoll(struct net_device *dev)
665     {
666     struct mlx4_en_priv *priv = netdev_priv(dev);
667     struct mlx4_en_cq *cq;
668     - unsigned long flags;
669     int i;
670    
671     for (i = 0; i < priv->rx_ring_num; i++) {
672     cq = priv->rx_cq[i];
673     - spin_lock_irqsave(&cq->lock, flags);
674     - napi_synchronize(&cq->napi);
675     - mlx4_en_process_rx_cq(dev, cq, 0);
676     - spin_unlock_irqrestore(&cq->lock, flags);
677     + napi_schedule(&cq->napi);
678     }
679     }
680     #endif
681     diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
682     index d413e60071d4..95c316bb7a42 100644
683     --- a/drivers/net/ethernet/mellanox/mlx4/main.c
684     +++ b/drivers/net/ethernet/mellanox/mlx4/main.c
685     @@ -2399,7 +2399,8 @@ slave_start:
686     * No return code for this call, just warn the user in case of PCI
687     * express device capabilities are under-satisfied by the bus.
688     */
689     - mlx4_check_pcie_caps(dev);
690     + if (!mlx4_is_slave(dev))
691     + mlx4_check_pcie_caps(dev);
692    
693     /* In master functions, the communication channel must be initialized
694     * after obtaining its address from fw */
695     diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
696     index b57e8c87a34e..72db9bedd765 100644
697     --- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
698     +++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
699     @@ -309,7 +309,6 @@ struct mlx4_en_cq {
700     struct mlx4_cq mcq;
701     struct mlx4_hwq_resources wqres;
702     int ring;
703     - spinlock_t lock;
704     struct net_device *dev;
705     struct napi_struct napi;
706     int size;
707     diff --git a/drivers/net/ethernet/sfc/nic.c b/drivers/net/ethernet/sfc/nic.c
708     index 79226b19e3c4..cb3fb9dba8fb 100644
709     --- a/drivers/net/ethernet/sfc/nic.c
710     +++ b/drivers/net/ethernet/sfc/nic.c
711     @@ -156,13 +156,15 @@ void efx_nic_fini_interrupt(struct efx_nic *efx)
712     efx->net_dev->rx_cpu_rmap = NULL;
713     #endif
714    
715     - /* Disable MSI/MSI-X interrupts */
716     - efx_for_each_channel(channel, efx)
717     - free_irq(channel->irq, &efx->msi_context[channel->channel]);
718     -
719     - /* Disable legacy interrupt */
720     - if (efx->legacy_irq)
721     + if (EFX_INT_MODE_USE_MSI(efx)) {
722     + /* Disable MSI/MSI-X interrupts */
723     + efx_for_each_channel(channel, efx)
724     + free_irq(channel->irq,
725     + &efx->msi_context[channel->channel]);
726     + } else {
727     + /* Disable legacy interrupt */
728     free_irq(efx->legacy_irq, efx);
729     + }
730     }
731    
732     /* Register dump */
733     diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
734     index 1831fb7cd017..20bb66944c4a 100644
735     --- a/drivers/net/macvlan.c
736     +++ b/drivers/net/macvlan.c
737     @@ -263,11 +263,9 @@ static int macvlan_queue_xmit(struct sk_buff *skb, struct net_device *dev)
738     const struct macvlan_dev *vlan = netdev_priv(dev);
739     const struct macvlan_port *port = vlan->port;
740     const struct macvlan_dev *dest;
741     - __u8 ip_summed = skb->ip_summed;
742    
743     if (vlan->mode == MACVLAN_MODE_BRIDGE) {
744     const struct ethhdr *eth = (void *)skb->data;
745     - skb->ip_summed = CHECKSUM_UNNECESSARY;
746    
747     /* send to other bridge ports directly */
748     if (is_multicast_ether_addr(eth->h_dest)) {
749     @@ -285,7 +283,6 @@ static int macvlan_queue_xmit(struct sk_buff *skb, struct net_device *dev)
750     }
751    
752     xmit_world:
753     - skb->ip_summed = ip_summed;
754     skb->dev = vlan->lowerdev;
755     return dev_queue_xmit(skb);
756     }
757     @@ -461,8 +458,10 @@ static void macvlan_change_rx_flags(struct net_device *dev, int change)
758     struct macvlan_dev *vlan = netdev_priv(dev);
759     struct net_device *lowerdev = vlan->lowerdev;
760    
761     - if (change & IFF_ALLMULTI)
762     - dev_set_allmulti(lowerdev, dev->flags & IFF_ALLMULTI ? 1 : -1);
763     + if (dev->flags & IFF_UP) {
764     + if (change & IFF_ALLMULTI)
765     + dev_set_allmulti(lowerdev, dev->flags & IFF_ALLMULTI ? 1 : -1);
766     + }
767     }
768    
769     static void macvlan_set_mac_lists(struct net_device *dev)
770     @@ -518,6 +517,11 @@ static struct lock_class_key macvlan_netdev_addr_lock_key;
771     #define MACVLAN_STATE_MASK \
772     ((1<<__LINK_STATE_NOCARRIER) | (1<<__LINK_STATE_DORMANT))
773    
774     +static int macvlan_get_nest_level(struct net_device *dev)
775     +{
776     + return ((struct macvlan_dev *)netdev_priv(dev))->nest_level;
777     +}
778     +
779     static void macvlan_set_lockdep_class_one(struct net_device *dev,
780     struct netdev_queue *txq,
781     void *_unused)
782     @@ -528,8 +532,9 @@ static void macvlan_set_lockdep_class_one(struct net_device *dev,
783    
784     static void macvlan_set_lockdep_class(struct net_device *dev)
785     {
786     - lockdep_set_class(&dev->addr_list_lock,
787     - &macvlan_netdev_addr_lock_key);
788     + lockdep_set_class_and_subclass(&dev->addr_list_lock,
789     + &macvlan_netdev_addr_lock_key,
790     + macvlan_get_nest_level(dev));
791     netdev_for_each_tx_queue(dev, macvlan_set_lockdep_class_one, NULL);
792     }
793    
794     @@ -731,6 +736,7 @@ static const struct net_device_ops macvlan_netdev_ops = {
795     .ndo_fdb_add = macvlan_fdb_add,
796     .ndo_fdb_del = macvlan_fdb_del,
797     .ndo_fdb_dump = ndo_dflt_fdb_dump,
798     + .ndo_get_lock_subclass = macvlan_get_nest_level,
799     };
800    
801     void macvlan_common_setup(struct net_device *dev)
802     @@ -859,6 +865,7 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev,
803     vlan->dev = dev;
804     vlan->port = port;
805     vlan->set_features = MACVLAN_FEATURES;
806     + vlan->nest_level = dev_get_nest_level(lowerdev, netif_is_macvlan) + 1;
807    
808     vlan->mode = MACVLAN_MODE_VEPA;
809     if (data && data[IFLA_MACVLAN_MODE])
810     diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
811     index ff111a89e17f..3381c4f91a8c 100644
812     --- a/drivers/net/macvtap.c
813     +++ b/drivers/net/macvtap.c
814     @@ -322,6 +322,15 @@ static rx_handler_result_t macvtap_handle_frame(struct sk_buff **pskb)
815     segs = nskb;
816     }
817     } else {
818     + /* If we receive a partial checksum and the tap side
819     + * doesn't support checksum offload, compute the checksum.
820     + * Note: it doesn't matter which checksum feature to
821     + * check, we either support them all or none.
822     + */
823     + if (skb->ip_summed == CHECKSUM_PARTIAL &&
824     + !(features & NETIF_F_ALL_CSUM) &&
825     + skb_checksum_help(skb))
826     + goto drop;
827     skb_queue_tail(&q->sk.sk_receive_queue, skb);
828     }
829    
830     diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
831     index 2f6989b1e0dc..365375408904 100644
832     --- a/drivers/net/phy/phy_device.c
833     +++ b/drivers/net/phy/phy_device.c
834     @@ -613,8 +613,8 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
835     err = phy_init_hw(phydev);
836     if (err)
837     phy_detach(phydev);
838     -
839     - phy_resume(phydev);
840     + else
841     + phy_resume(phydev);
842    
843     return err;
844     }
845     diff --git a/drivers/net/slip/slip.c b/drivers/net/slip/slip.c
846     index cc70ecfc7062..ad4a94e9ff57 100644
847     --- a/drivers/net/slip/slip.c
848     +++ b/drivers/net/slip/slip.c
849     @@ -429,13 +429,13 @@ static void slip_write_wakeup(struct tty_struct *tty)
850     if (!sl || sl->magic != SLIP_MAGIC || !netif_running(sl->dev))
851     return;
852    
853     - spin_lock(&sl->lock);
854     + spin_lock_bh(&sl->lock);
855     if (sl->xleft <= 0) {
856     /* Now serial buffer is almost free & we can start
857     * transmission of another packet */
858     sl->dev->stats.tx_packets++;
859     clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
860     - spin_unlock(&sl->lock);
861     + spin_unlock_bh(&sl->lock);
862     sl_unlock(sl);
863     return;
864     }
865     @@ -443,7 +443,7 @@ static void slip_write_wakeup(struct tty_struct *tty)
866     actual = tty->ops->write(tty, sl->xhead, sl->xleft);
867     sl->xleft -= actual;
868     sl->xhead += actual;
869     - spin_unlock(&sl->lock);
870     + spin_unlock_bh(&sl->lock);
871     }
872    
873     static void sl_tx_timeout(struct net_device *dev)
874     diff --git a/drivers/net/usb/cdc_mbim.c b/drivers/net/usb/cdc_mbim.c
875     index c9f3281506af..2e025ddcef21 100644
876     --- a/drivers/net/usb/cdc_mbim.c
877     +++ b/drivers/net/usb/cdc_mbim.c
878     @@ -120,6 +120,16 @@ static void cdc_mbim_unbind(struct usbnet *dev, struct usb_interface *intf)
879     cdc_ncm_unbind(dev, intf);
880     }
881    
882     +/* verify that the ethernet protocol is IPv4 or IPv6 */
883     +static bool is_ip_proto(__be16 proto)
884     +{
885     + switch (proto) {
886     + case htons(ETH_P_IP):
887     + case htons(ETH_P_IPV6):
888     + return true;
889     + }
890     + return false;
891     +}
892    
893     static struct sk_buff *cdc_mbim_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags)
894     {
895     @@ -128,6 +138,7 @@ static struct sk_buff *cdc_mbim_tx_fixup(struct usbnet *dev, struct sk_buff *skb
896     struct cdc_ncm_ctx *ctx = info->ctx;
897     __le32 sign = cpu_to_le32(USB_CDC_MBIM_NDP16_IPS_SIGN);
898     u16 tci = 0;
899     + bool is_ip;
900     u8 *c;
901    
902     if (!ctx)
903     @@ -137,25 +148,32 @@ static struct sk_buff *cdc_mbim_tx_fixup(struct usbnet *dev, struct sk_buff *skb
904     if (skb->len <= ETH_HLEN)
905     goto error;
906    
907     + /* Some applications using e.g. packet sockets will
908     + * bypass the VLAN acceleration and create tagged
909     + * ethernet frames directly. We primarily look for
910     + * the accelerated out-of-band tag, but fall back if
911     + * required
912     + */
913     + skb_reset_mac_header(skb);
914     + if (vlan_get_tag(skb, &tci) < 0 && skb->len > VLAN_ETH_HLEN &&
915     + __vlan_get_tag(skb, &tci) == 0) {
916     + is_ip = is_ip_proto(vlan_eth_hdr(skb)->h_vlan_encapsulated_proto);
917     + skb_pull(skb, VLAN_ETH_HLEN);
918     + } else {
919     + is_ip = is_ip_proto(eth_hdr(skb)->h_proto);
920     + skb_pull(skb, ETH_HLEN);
921     + }
922     +
923     /* mapping VLANs to MBIM sessions:
924     * no tag => IPS session <0>
925     * 1 - 255 => IPS session <vlanid>
926     * 256 - 511 => DSS session <vlanid - 256>
927     * 512 - 4095 => unsupported, drop
928     */
929     - vlan_get_tag(skb, &tci);
930     -
931     switch (tci & 0x0f00) {
932     case 0x0000: /* VLAN ID 0 - 255 */
933     - /* verify that datagram is IPv4 or IPv6 */
934     - skb_reset_mac_header(skb);
935     - switch (eth_hdr(skb)->h_proto) {
936     - case htons(ETH_P_IP):
937     - case htons(ETH_P_IPV6):
938     - break;
939     - default:
940     + if (!is_ip)
941     goto error;
942     - }
943     c = (u8 *)&sign;
944     c[3] = tci;
945     break;
946     @@ -169,7 +187,6 @@ static struct sk_buff *cdc_mbim_tx_fixup(struct usbnet *dev, struct sk_buff *skb
947     "unsupported tci=0x%04x\n", tci);
948     goto error;
949     }
950     - skb_pull(skb, ETH_HLEN);
951     }
952    
953     spin_lock_bh(&ctx->mtx);
954     @@ -204,17 +221,23 @@ static void do_neigh_solicit(struct usbnet *dev, u8 *buf, u16 tci)
955     return;
956    
957     /* need to send the NA on the VLAN dev, if any */
958     - if (tci)
959     + rcu_read_lock();
960     + if (tci) {
961     netdev = __vlan_find_dev_deep(dev->net, htons(ETH_P_8021Q),
962     tci);
963     - else
964     + if (!netdev) {
965     + rcu_read_unlock();
966     + return;
967     + }
968     + } else {
969     netdev = dev->net;
970     - if (!netdev)
971     - return;
972     + }
973     + dev_hold(netdev);
974     + rcu_read_unlock();
975    
976     in6_dev = in6_dev_get(netdev);
977     if (!in6_dev)
978     - return;
979     + goto out;
980     is_router = !!in6_dev->cnf.forwarding;
981     in6_dev_put(in6_dev);
982    
983     @@ -224,6 +247,8 @@ static void do_neigh_solicit(struct usbnet *dev, u8 *buf, u16 tci)
984     true /* solicited */,
985     false /* override */,
986     true /* inc_opt */);
987     +out:
988     + dev_put(netdev);
989     }
990    
991     static bool is_neigh_solicit(u8 *buf, size_t len)
992     diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
993     index d350d2795e10..75d7d9dbbe35 100644
994     --- a/drivers/net/usb/cdc_ncm.c
995     +++ b/drivers/net/usb/cdc_ncm.c
996     @@ -768,7 +768,7 @@ cdc_ncm_fill_tx_frame(struct usbnet *dev, struct sk_buff *skb, __le32 sign)
997     skb_out->len > CDC_NCM_MIN_TX_PKT)
998     memset(skb_put(skb_out, ctx->tx_max - skb_out->len), 0,
999     ctx->tx_max - skb_out->len);
1000     - else if ((skb_out->len % dev->maxpacket) == 0)
1001     + else if (skb_out->len < ctx->tx_max && (skb_out->len % dev->maxpacket) == 0)
1002     *skb_put(skb_out, 1) = 0; /* force short packet */
1003    
1004     /* set final frame length */
1005     diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
1006     index 313cb6cd4848..48c4902c0d62 100644
1007     --- a/drivers/net/usb/qmi_wwan.c
1008     +++ b/drivers/net/usb/qmi_wwan.c
1009     @@ -662,6 +662,22 @@ static const struct usb_device_id products[] = {
1010     {QMI_FIXED_INTF(0x05c6, 0x920d, 5)},
1011     {QMI_FIXED_INTF(0x12d1, 0x140c, 1)}, /* Huawei E173 */
1012     {QMI_FIXED_INTF(0x12d1, 0x14ac, 1)}, /* Huawei E1820 */
1013     + {QMI_FIXED_INTF(0x16d8, 0x6003, 0)}, /* CMOTech 6003 */
1014     + {QMI_FIXED_INTF(0x16d8, 0x6007, 0)}, /* CMOTech CHE-628S */
1015     + {QMI_FIXED_INTF(0x16d8, 0x6008, 0)}, /* CMOTech CMU-301 */
1016     + {QMI_FIXED_INTF(0x16d8, 0x6280, 0)}, /* CMOTech CHU-628 */
1017     + {QMI_FIXED_INTF(0x16d8, 0x7001, 0)}, /* CMOTech CHU-720S */
1018     + {QMI_FIXED_INTF(0x16d8, 0x7002, 0)}, /* CMOTech 7002 */
1019     + {QMI_FIXED_INTF(0x16d8, 0x7003, 4)}, /* CMOTech CHU-629K */
1020     + {QMI_FIXED_INTF(0x16d8, 0x7004, 3)}, /* CMOTech 7004 */
1021     + {QMI_FIXED_INTF(0x16d8, 0x7006, 5)}, /* CMOTech CGU-629 */
1022     + {QMI_FIXED_INTF(0x16d8, 0x700a, 4)}, /* CMOTech CHU-629S */
1023     + {QMI_FIXED_INTF(0x16d8, 0x7211, 0)}, /* CMOTech CHU-720I */
1024     + {QMI_FIXED_INTF(0x16d8, 0x7212, 0)}, /* CMOTech 7212 */
1025     + {QMI_FIXED_INTF(0x16d8, 0x7213, 0)}, /* CMOTech 7213 */
1026     + {QMI_FIXED_INTF(0x16d8, 0x7251, 1)}, /* CMOTech 7251 */
1027     + {QMI_FIXED_INTF(0x16d8, 0x7252, 1)}, /* CMOTech 7252 */
1028     + {QMI_FIXED_INTF(0x16d8, 0x7253, 1)}, /* CMOTech 7253 */
1029     {QMI_FIXED_INTF(0x19d2, 0x0002, 1)},
1030     {QMI_FIXED_INTF(0x19d2, 0x0012, 1)},
1031     {QMI_FIXED_INTF(0x19d2, 0x0017, 3)},
1032     @@ -723,16 +739,28 @@ static const struct usb_device_id products[] = {
1033     {QMI_FIXED_INTF(0x114f, 0x68a2, 8)}, /* Sierra Wireless MC7750 */
1034     {QMI_FIXED_INTF(0x1199, 0x68a2, 8)}, /* Sierra Wireless MC7710 in QMI mode */
1035     {QMI_FIXED_INTF(0x1199, 0x68a2, 19)}, /* Sierra Wireless MC7710 in QMI mode */
1036     + {QMI_FIXED_INTF(0x1199, 0x68c0, 8)}, /* Sierra Wireless MC73xx */
1037     + {QMI_FIXED_INTF(0x1199, 0x68c0, 10)}, /* Sierra Wireless MC73xx */
1038     + {QMI_FIXED_INTF(0x1199, 0x68c0, 11)}, /* Sierra Wireless MC73xx */
1039     {QMI_FIXED_INTF(0x1199, 0x901c, 8)}, /* Sierra Wireless EM7700 */
1040     + {QMI_FIXED_INTF(0x1199, 0x901f, 8)}, /* Sierra Wireless EM7355 */
1041     + {QMI_FIXED_INTF(0x1199, 0x9041, 8)}, /* Sierra Wireless MC7305/MC7355 */
1042     {QMI_FIXED_INTF(0x1199, 0x9051, 8)}, /* Netgear AirCard 340U */
1043     {QMI_FIXED_INTF(0x1bbb, 0x011e, 4)}, /* Telekom Speedstick LTE II (Alcatel One Touch L100V LTE) */
1044     + {QMI_FIXED_INTF(0x1bbb, 0x0203, 2)}, /* Alcatel L800MA */
1045     {QMI_FIXED_INTF(0x2357, 0x0201, 4)}, /* TP-LINK HSUPA Modem MA180 */
1046     {QMI_FIXED_INTF(0x2357, 0x9000, 4)}, /* TP-LINK MA260 */
1047     {QMI_FIXED_INTF(0x1bc7, 0x1200, 5)}, /* Telit LE920 */
1048     {QMI_FIXED_INTF(0x1bc7, 0x1201, 2)}, /* Telit LE920 */
1049     {QMI_FIXED_INTF(0x0b3c, 0xc005, 6)}, /* Olivetti Olicard 200 */
1050     + {QMI_FIXED_INTF(0x0b3c, 0xc00b, 4)}, /* Olivetti Olicard 500 */
1051     {QMI_FIXED_INTF(0x1e2d, 0x0060, 4)}, /* Cinterion PLxx */
1052     {QMI_FIXED_INTF(0x1e2d, 0x0053, 4)}, /* Cinterion PHxx,PXxx */
1053     + {QMI_FIXED_INTF(0x413c, 0x81a2, 8)}, /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card */
1054     + {QMI_FIXED_INTF(0x413c, 0x81a3, 8)}, /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card */
1055     + {QMI_FIXED_INTF(0x413c, 0x81a4, 8)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */
1056     + {QMI_FIXED_INTF(0x413c, 0x81a8, 8)}, /* Dell Wireless 5808 Gobi(TM) 4G LTE Mobile Broadband Card */
1057     + {QMI_FIXED_INTF(0x413c, 0x81a9, 8)}, /* Dell Wireless 5808e Gobi(TM) 4G LTE Mobile Broadband Card */
1058    
1059     /* 4. Gobi 1000 devices */
1060     {QMI_GOBI1K_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */
1061     diff --git a/drivers/net/wireless/ti/wl18xx/event.h b/drivers/net/wireless/ti/wl18xx/event.h
1062     index 398f3d2c0a6c..a76e98eb8372 100644
1063     --- a/drivers/net/wireless/ti/wl18xx/event.h
1064     +++ b/drivers/net/wireless/ti/wl18xx/event.h
1065     @@ -68,6 +68,26 @@ struct wl18xx_event_mailbox {
1066    
1067     /* bitmap of inactive stations (by HLID) */
1068     __le32 inactive_sta_bitmap;
1069     +
1070     + /* rx BA win size indicated by RX_BA_WIN_SIZE_CHANGE_EVENT_ID */
1071     + u8 rx_ba_role_id;
1072     + u8 rx_ba_link_id;
1073     + u8 rx_ba_win_size;
1074     + u8 padding;
1075     +
1076     + /* smart config */
1077     + u8 sc_ssid_len;
1078     + u8 sc_pwd_len;
1079     + u8 sc_token_len;
1080     + u8 padding1;
1081     + u8 sc_ssid[32];
1082     + u8 sc_pwd[32];
1083     + u8 sc_token[32];
1084     +
1085     + /* smart config sync channel */
1086     + u8 sc_sync_channel;
1087     + u8 sc_sync_band;
1088     + u8 padding2[2];
1089     } __packed;
1090    
1091     int wl18xx_wait_for_event(struct wl1271 *wl, enum wlcore_wait_event event,
1092     diff --git a/drivers/scsi/megaraid/megaraid_mm.c b/drivers/scsi/megaraid/megaraid_mm.c
1093     index dfffd0f37916..a70692779a16 100644
1094     --- a/drivers/scsi/megaraid/megaraid_mm.c
1095     +++ b/drivers/scsi/megaraid/megaraid_mm.c
1096     @@ -486,6 +486,8 @@ mimd_to_kioc(mimd_t __user *umimd, mraid_mmadp_t *adp, uioc_t *kioc)
1097    
1098     pthru32->dataxferaddr = kioc->buf_paddr;
1099     if (kioc->data_dir & UIOC_WR) {
1100     + if (pthru32->dataxferlen > kioc->xferlen)
1101     + return -EINVAL;
1102     if (copy_from_user(kioc->buf_vaddr, kioc->user_data,
1103     pthru32->dataxferlen)) {
1104     return (-EFAULT);
1105     diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
1106     index 307a81137607..4109530e92a0 100644
1107     --- a/drivers/scsi/scsi_scan.c
1108     +++ b/drivers/scsi/scsi_scan.c
1109     @@ -320,6 +320,7 @@ static void scsi_target_destroy(struct scsi_target *starget)
1110     struct Scsi_Host *shost = dev_to_shost(dev->parent);
1111     unsigned long flags;
1112    
1113     + starget->state = STARGET_DEL;
1114     transport_destroy_device(dev);
1115     spin_lock_irqsave(shost->host_lock, flags);
1116     if (shost->hostt->target_destroy)
1117     @@ -371,6 +372,37 @@ static struct scsi_target *__scsi_find_target(struct device *parent,
1118     }
1119    
1120     /**
1121     + * scsi_target_reap_ref_release - remove target from visibility
1122     + * @kref: the reap_ref in the target being released
1123     + *
1124     + * Called on last put of reap_ref, which is the indication that no device
1125     + * under this target is visible anymore, so render the target invisible in
1126     + * sysfs. Note: we have to be in user context here because the target reaps
1127     + * should be done in places where the scsi device visibility is being removed.
1128     + */
1129     +static void scsi_target_reap_ref_release(struct kref *kref)
1130     +{
1131     + struct scsi_target *starget
1132     + = container_of(kref, struct scsi_target, reap_ref);
1133     +
1134     + /*
1135     + * if we get here and the target is still in the CREATED state that
1136     + * means it was allocated but never made visible (because a scan
1137     + * turned up no LUNs), so don't call device_del() on it.
1138     + */
1139     + if (starget->state != STARGET_CREATED) {
1140     + transport_remove_device(&starget->dev);
1141     + device_del(&starget->dev);
1142     + }
1143     + scsi_target_destroy(starget);
1144     +}
1145     +
1146     +static void scsi_target_reap_ref_put(struct scsi_target *starget)
1147     +{
1148     + kref_put(&starget->reap_ref, scsi_target_reap_ref_release);
1149     +}
1150     +
1151     +/**
1152     * scsi_alloc_target - allocate a new or find an existing target
1153     * @parent: parent of the target (need not be a scsi host)
1154     * @channel: target channel number (zero if no channels)
1155     @@ -392,7 +424,7 @@ static struct scsi_target *scsi_alloc_target(struct device *parent,
1156     + shost->transportt->target_size;
1157     struct scsi_target *starget;
1158     struct scsi_target *found_target;
1159     - int error;
1160     + int error, ref_got;
1161    
1162     starget = kzalloc(size, GFP_KERNEL);
1163     if (!starget) {
1164     @@ -401,7 +433,7 @@ static struct scsi_target *scsi_alloc_target(struct device *parent,
1165     }
1166     dev = &starget->dev;
1167     device_initialize(dev);
1168     - starget->reap_ref = 1;
1169     + kref_init(&starget->reap_ref);
1170     dev->parent = get_device(parent);
1171     dev_set_name(dev, "target%d:%d:%d", shost->host_no, channel, id);
1172     dev->bus = &scsi_bus_type;
1173     @@ -441,29 +473,36 @@ static struct scsi_target *scsi_alloc_target(struct device *parent,
1174     return starget;
1175    
1176     found:
1177     - found_target->reap_ref++;
1178     + /*
1179     + * release routine already fired if kref is zero, so if we can still
1180     + * take the reference, the target must be alive. If we can't, it must
1181     + * be dying and we need to wait for a new target
1182     + */
1183     + ref_got = kref_get_unless_zero(&found_target->reap_ref);
1184     +
1185     spin_unlock_irqrestore(shost->host_lock, flags);
1186     - if (found_target->state != STARGET_DEL) {
1187     + if (ref_got) {
1188     put_device(dev);
1189     return found_target;
1190     }
1191     - /* Unfortunately, we found a dying target; need to
1192     - * wait until it's dead before we can get a new one */
1193     + /*
1194     + * Unfortunately, we found a dying target; need to wait until it's
1195     + * dead before we can get a new one. There is an anomaly here. We
1196     + * *should* call scsi_target_reap() to balance the kref_get() of the
1197     + * reap_ref above. However, since the target being released, it's
1198     + * already invisible and the reap_ref is irrelevant. If we call
1199     + * scsi_target_reap() we might spuriously do another device_del() on
1200     + * an already invisible target.
1201     + */
1202     put_device(&found_target->dev);
1203     - flush_scheduled_work();
1204     + /*
1205     + * length of time is irrelevant here, we just want to yield the CPU
1206     + * for a tick to avoid busy waiting for the target to die.
1207     + */
1208     + msleep(1);
1209     goto retry;
1210     }
1211    
1212     -static void scsi_target_reap_usercontext(struct work_struct *work)
1213     -{
1214     - struct scsi_target *starget =
1215     - container_of(work, struct scsi_target, ew.work);
1216     -
1217     - transport_remove_device(&starget->dev);
1218     - device_del(&starget->dev);
1219     - scsi_target_destroy(starget);
1220     -}
1221     -
1222     /**
1223     * scsi_target_reap - check to see if target is in use and destroy if not
1224     * @starget: target to be checked
1225     @@ -474,28 +513,13 @@ static void scsi_target_reap_usercontext(struct work_struct *work)
1226     */
1227     void scsi_target_reap(struct scsi_target *starget)
1228     {
1229     - struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
1230     - unsigned long flags;
1231     - enum scsi_target_state state;
1232     - int empty = 0;
1233     -
1234     - spin_lock_irqsave(shost->host_lock, flags);
1235     - state = starget->state;
1236     - if (--starget->reap_ref == 0 && list_empty(&starget->devices)) {
1237     - empty = 1;
1238     - starget->state = STARGET_DEL;
1239     - }
1240     - spin_unlock_irqrestore(shost->host_lock, flags);
1241     -
1242     - if (!empty)
1243     - return;
1244     -
1245     - BUG_ON(state == STARGET_DEL);
1246     - if (state == STARGET_CREATED)
1247     - scsi_target_destroy(starget);
1248     - else
1249     - execute_in_process_context(scsi_target_reap_usercontext,
1250     - &starget->ew);
1251     + /*
1252     + * serious problem if this triggers: STARGET_DEL is only set in the if
1253     + * the reap_ref drops to zero, so we're trying to do another final put
1254     + * on an already released kref
1255     + */
1256     + BUG_ON(starget->state == STARGET_DEL);
1257     + scsi_target_reap_ref_put(starget);
1258     }
1259    
1260     /**
1261     @@ -1532,6 +1556,10 @@ struct scsi_device *__scsi_add_device(struct Scsi_Host *shost, uint channel,
1262     }
1263     mutex_unlock(&shost->scan_mutex);
1264     scsi_autopm_put_target(starget);
1265     + /*
1266     + * paired with scsi_alloc_target(). Target will be destroyed unless
1267     + * scsi_probe_and_add_lun made an underlying device visible
1268     + */
1269     scsi_target_reap(starget);
1270     put_device(&starget->dev);
1271    
1272     @@ -1612,8 +1640,10 @@ static void __scsi_scan_target(struct device *parent, unsigned int channel,
1273    
1274     out_reap:
1275     scsi_autopm_put_target(starget);
1276     - /* now determine if the target has any children at all
1277     - * and if not, nuke it */
1278     + /*
1279     + * paired with scsi_alloc_target(): determine if the target has
1280     + * any children at all and if not, nuke it
1281     + */
1282     scsi_target_reap(starget);
1283    
1284     put_device(&starget->dev);
1285     diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c
1286     index 9117d0bf408e..665acbf83693 100644
1287     --- a/drivers/scsi/scsi_sysfs.c
1288     +++ b/drivers/scsi/scsi_sysfs.c
1289     @@ -383,17 +383,14 @@ static void scsi_device_dev_release_usercontext(struct work_struct *work)
1290     {
1291     struct scsi_device *sdev;
1292     struct device *parent;
1293     - struct scsi_target *starget;
1294     struct list_head *this, *tmp;
1295     unsigned long flags;
1296    
1297     sdev = container_of(work, struct scsi_device, ew.work);
1298    
1299     parent = sdev->sdev_gendev.parent;
1300     - starget = to_scsi_target(parent);
1301    
1302     spin_lock_irqsave(sdev->host->host_lock, flags);
1303     - starget->reap_ref++;
1304     list_del(&sdev->siblings);
1305     list_del(&sdev->same_target_siblings);
1306     list_del(&sdev->starved_entry);
1307     @@ -413,8 +410,6 @@ static void scsi_device_dev_release_usercontext(struct work_struct *work)
1308     /* NULL queue means the device can't be used */
1309     sdev->request_queue = NULL;
1310    
1311     - scsi_target_reap(scsi_target(sdev));
1312     -
1313     kfree(sdev->inquiry);
1314     kfree(sdev);
1315    
1316     @@ -1071,6 +1066,13 @@ void __scsi_remove_device(struct scsi_device *sdev)
1317     sdev->host->hostt->slave_destroy(sdev);
1318     transport_destroy_device(dev);
1319    
1320     + /*
1321     + * Paired with the kref_get() in scsi_sysfs_initialize(). We have
1322     + * remoed sysfs visibility from the device, so make the target
1323     + * invisible if this was the last device underneath it.
1324     + */
1325     + scsi_target_reap(scsi_target(sdev));
1326     +
1327     put_device(dev);
1328     }
1329    
1330     @@ -1133,7 +1135,7 @@ void scsi_remove_target(struct device *dev)
1331     continue;
1332     if (starget->dev.parent == dev || &starget->dev == dev) {
1333     /* assuming new targets arrive at the end */
1334     - starget->reap_ref++;
1335     + kref_get(&starget->reap_ref);
1336     spin_unlock_irqrestore(shost->host_lock, flags);
1337     if (last)
1338     scsi_target_reap(last);
1339     @@ -1217,6 +1219,12 @@ void scsi_sysfs_device_initialize(struct scsi_device *sdev)
1340     list_add_tail(&sdev->same_target_siblings, &starget->devices);
1341     list_add_tail(&sdev->siblings, &shost->__devices);
1342     spin_unlock_irqrestore(shost->host_lock, flags);
1343     + /*
1344     + * device can now only be removed via __scsi_remove_device() so hold
1345     + * the target. Target will be held in CREATED state until something
1346     + * beneath it becomes visible (in which case it moves to RUNNING)
1347     + */
1348     + kref_get(&starget->reap_ref);
1349     }
1350    
1351     int scsi_is_sdev_device(const struct device *dev)
1352     diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
1353     index 77f035158d6c..db8434d3def9 100644
1354     --- a/drivers/tty/serial/omap-serial.c
1355     +++ b/drivers/tty/serial/omap-serial.c
1356     @@ -225,14 +225,19 @@ static inline void serial_omap_enable_wakeirq(struct uart_omap_port *up,
1357     if (enable)
1358     enable_irq(up->wakeirq);
1359     else
1360     - disable_irq(up->wakeirq);
1361     + disable_irq_nosync(up->wakeirq);
1362     }
1363    
1364     static void serial_omap_enable_wakeup(struct uart_omap_port *up, bool enable)
1365     {
1366     struct omap_uart_port_info *pdata = dev_get_platdata(up->dev);
1367    
1368     + if (enable == up->wakeups_enabled)
1369     + return;
1370     +
1371     serial_omap_enable_wakeirq(up, enable);
1372     + up->wakeups_enabled = enable;
1373     +
1374     if (!pdata || !pdata->enable_wakeup)
1375     return;
1376    
1377     @@ -1488,6 +1493,11 @@ static int serial_omap_suspend(struct device *dev)
1378     uart_suspend_port(&serial_omap_reg, &up->port);
1379     flush_work(&up->qos_work);
1380    
1381     + if (device_may_wakeup(dev))
1382     + serial_omap_enable_wakeup(up, true);
1383     + else
1384     + serial_omap_enable_wakeup(up, false);
1385     +
1386     return 0;
1387     }
1388    
1389     @@ -1495,6 +1505,9 @@ static int serial_omap_resume(struct device *dev)
1390     {
1391     struct uart_omap_port *up = dev_get_drvdata(dev);
1392    
1393     + if (device_may_wakeup(dev))
1394     + serial_omap_enable_wakeup(up, false);
1395     +
1396     uart_resume_port(&serial_omap_reg, &up->port);
1397    
1398     return 0;
1399     @@ -1870,17 +1883,7 @@ static int serial_omap_runtime_suspend(struct device *dev)
1400    
1401     up->context_loss_cnt = serial_omap_get_context_loss_count(up);
1402    
1403     - if (device_may_wakeup(dev)) {
1404     - if (!up->wakeups_enabled) {
1405     - serial_omap_enable_wakeup(up, true);
1406     - up->wakeups_enabled = true;
1407     - }
1408     - } else {
1409     - if (up->wakeups_enabled) {
1410     - serial_omap_enable_wakeup(up, false);
1411     - up->wakeups_enabled = false;
1412     - }
1413     - }
1414     + serial_omap_enable_wakeup(up, true);
1415    
1416     up->latency = PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE;
1417     schedule_work(&up->qos_work);
1418     @@ -1894,6 +1897,8 @@ static int serial_omap_runtime_resume(struct device *dev)
1419    
1420     int loss_cnt = serial_omap_get_context_loss_count(up);
1421    
1422     + serial_omap_enable_wakeup(up, false);
1423     +
1424     if (loss_cnt < 0) {
1425     dev_dbg(dev, "serial_omap_get_context_loss_count failed : %d\n",
1426     loss_cnt);
1427     diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
1428     index 900f7ff805ee..7783acabe443 100644
1429     --- a/drivers/usb/class/cdc-acm.c
1430     +++ b/drivers/usb/class/cdc-acm.c
1431     @@ -1652,13 +1652,27 @@ static const struct usb_device_id acm_ids[] = {
1432     },
1433     /* Motorola H24 HSPA module: */
1434     { USB_DEVICE(0x22b8, 0x2d91) }, /* modem */
1435     - { USB_DEVICE(0x22b8, 0x2d92) }, /* modem + diagnostics */
1436     - { USB_DEVICE(0x22b8, 0x2d93) }, /* modem + AT port */
1437     - { USB_DEVICE(0x22b8, 0x2d95) }, /* modem + AT port + diagnostics */
1438     - { USB_DEVICE(0x22b8, 0x2d96) }, /* modem + NMEA */
1439     - { USB_DEVICE(0x22b8, 0x2d97) }, /* modem + diagnostics + NMEA */
1440     - { USB_DEVICE(0x22b8, 0x2d99) }, /* modem + AT port + NMEA */
1441     - { USB_DEVICE(0x22b8, 0x2d9a) }, /* modem + AT port + diagnostics + NMEA */
1442     + { USB_DEVICE(0x22b8, 0x2d92), /* modem + diagnostics */
1443     + .driver_info = NO_UNION_NORMAL, /* handle only modem interface */
1444     + },
1445     + { USB_DEVICE(0x22b8, 0x2d93), /* modem + AT port */
1446     + .driver_info = NO_UNION_NORMAL, /* handle only modem interface */
1447     + },
1448     + { USB_DEVICE(0x22b8, 0x2d95), /* modem + AT port + diagnostics */
1449     + .driver_info = NO_UNION_NORMAL, /* handle only modem interface */
1450     + },
1451     + { USB_DEVICE(0x22b8, 0x2d96), /* modem + NMEA */
1452     + .driver_info = NO_UNION_NORMAL, /* handle only modem interface */
1453     + },
1454     + { USB_DEVICE(0x22b8, 0x2d97), /* modem + diagnostics + NMEA */
1455     + .driver_info = NO_UNION_NORMAL, /* handle only modem interface */
1456     + },
1457     + { USB_DEVICE(0x22b8, 0x2d99), /* modem + AT port + NMEA */
1458     + .driver_info = NO_UNION_NORMAL, /* handle only modem interface */
1459     + },
1460     + { USB_DEVICE(0x22b8, 0x2d9a), /* modem + AT port + diagnostics + NMEA */
1461     + .driver_info = NO_UNION_NORMAL, /* handle only modem interface */
1462     + },
1463    
1464     { USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */
1465     .driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on
1466     diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
1467     index 95fa1217afdd..762e4a5f5ae9 100644
1468     --- a/drivers/usb/serial/cp210x.c
1469     +++ b/drivers/usb/serial/cp210x.c
1470     @@ -104,6 +104,7 @@ static const struct usb_device_id id_table[] = {
1471     { USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */
1472     { USB_DEVICE(0x10C4, 0x822B) }, /* Modem EDGE(GSM) Comander 2 */
1473     { USB_DEVICE(0x10C4, 0x826B) }, /* Cygnal Integrated Products, Inc., Fasttrax GPS demonstration module */
1474     + { USB_DEVICE(0x10C4, 0x8281) }, /* Nanotec Plug & Drive */
1475     { USB_DEVICE(0x10C4, 0x8293) }, /* Telegesis ETRX2USB */
1476     { USB_DEVICE(0x10C4, 0x82F9) }, /* Procyon AVS */
1477     { USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */
1478     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
1479     index 44ab12986805..7c6e1dedeb06 100644
1480     --- a/drivers/usb/serial/ftdi_sio.c
1481     +++ b/drivers/usb/serial/ftdi_sio.c
1482     @@ -909,6 +909,39 @@ static const struct usb_device_id id_table_combined[] = {
1483     { USB_DEVICE(FTDI_VID, FTDI_Z3X_PID) },
1484     /* Cressi Devices */
1485     { USB_DEVICE(FTDI_VID, FTDI_CRESSI_PID) },
1486     + /* Brainboxes Devices */
1487     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_001_PID) },
1488     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_012_PID) },
1489     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_023_PID) },
1490     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_VX_034_PID) },
1491     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_101_PID) },
1492     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_1_PID) },
1493     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_2_PID) },
1494     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_3_PID) },
1495     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_4_PID) },
1496     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_5_PID) },
1497     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_6_PID) },
1498     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_7_PID) },
1499     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_160_8_PID) },
1500     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_257_PID) },
1501     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_1_PID) },
1502     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_2_PID) },
1503     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_3_PID) },
1504     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_279_4_PID) },
1505     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_313_PID) },
1506     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_324_PID) },
1507     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_346_1_PID) },
1508     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_346_2_PID) },
1509     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_357_PID) },
1510     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_606_1_PID) },
1511     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_606_2_PID) },
1512     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_606_3_PID) },
1513     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_701_1_PID) },
1514     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_701_2_PID) },
1515     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_1_PID) },
1516     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_2_PID) },
1517     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_3_PID) },
1518     + { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_4_PID) },
1519     { } /* Terminating entry */
1520     };
1521    
1522     diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
1523     index e599fbfcde5f..993c93df6874 100644
1524     --- a/drivers/usb/serial/ftdi_sio_ids.h
1525     +++ b/drivers/usb/serial/ftdi_sio_ids.h
1526     @@ -1326,3 +1326,40 @@
1527     * Manufacturer: Cressi
1528     */
1529     #define FTDI_CRESSI_PID 0x87d0
1530     +
1531     +/*
1532     + * Brainboxes devices
1533     + */
1534     +#define BRAINBOXES_VID 0x05d1
1535     +#define BRAINBOXES_VX_001_PID 0x1001 /* VX-001 ExpressCard 1 Port RS232 */
1536     +#define BRAINBOXES_VX_012_PID 0x1002 /* VX-012 ExpressCard 2 Port RS232 */
1537     +#define BRAINBOXES_VX_023_PID 0x1003 /* VX-023 ExpressCard 1 Port RS422/485 */
1538     +#define BRAINBOXES_VX_034_PID 0x1004 /* VX-034 ExpressCard 2 Port RS422/485 */
1539     +#define BRAINBOXES_US_101_PID 0x1011 /* US-101 1xRS232 */
1540     +#define BRAINBOXES_US_324_PID 0x1013 /* US-324 1xRS422/485 1Mbaud */
1541     +#define BRAINBOXES_US_606_1_PID 0x2001 /* US-606 6 Port RS232 Serial Port 1 and 2 */
1542     +#define BRAINBOXES_US_606_2_PID 0x2002 /* US-606 6 Port RS232 Serial Port 3 and 4 */
1543     +#define BRAINBOXES_US_606_3_PID 0x2003 /* US-606 6 Port RS232 Serial Port 4 and 6 */
1544     +#define BRAINBOXES_US_701_1_PID 0x2011 /* US-701 4xRS232 1Mbaud Port 1 and 2 */
1545     +#define BRAINBOXES_US_701_2_PID 0x2012 /* US-701 4xRS422 1Mbaud Port 3 and 4 */
1546     +#define BRAINBOXES_US_279_1_PID 0x2021 /* US-279 8xRS422 1Mbaud Port 1 and 2 */
1547     +#define BRAINBOXES_US_279_2_PID 0x2022 /* US-279 8xRS422 1Mbaud Port 3 and 4 */
1548     +#define BRAINBOXES_US_279_3_PID 0x2023 /* US-279 8xRS422 1Mbaud Port 5 and 6 */
1549     +#define BRAINBOXES_US_279_4_PID 0x2024 /* US-279 8xRS422 1Mbaud Port 7 and 8 */
1550     +#define BRAINBOXES_US_346_1_PID 0x3011 /* US-346 4xRS422/485 1Mbaud Port 1 and 2 */
1551     +#define BRAINBOXES_US_346_2_PID 0x3012 /* US-346 4xRS422/485 1Mbaud Port 3 and 4 */
1552     +#define BRAINBOXES_US_257_PID 0x5001 /* US-257 2xRS232 1Mbaud */
1553     +#define BRAINBOXES_US_313_PID 0x6001 /* US-313 2xRS422/485 1Mbaud */
1554     +#define BRAINBOXES_US_357_PID 0x7001 /* US_357 1xRS232/422/485 */
1555     +#define BRAINBOXES_US_842_1_PID 0x8001 /* US-842 8xRS422/485 1Mbaud Port 1 and 2 */
1556     +#define BRAINBOXES_US_842_2_PID 0x8002 /* US-842 8xRS422/485 1Mbaud Port 3 and 4 */
1557     +#define BRAINBOXES_US_842_3_PID 0x8003 /* US-842 8xRS422/485 1Mbaud Port 5 and 6 */
1558     +#define BRAINBOXES_US_842_4_PID 0x8004 /* US-842 8xRS422/485 1Mbaud Port 7 and 8 */
1559     +#define BRAINBOXES_US_160_1_PID 0x9001 /* US-160 16xRS232 1Mbaud Port 1 and 2 */
1560     +#define BRAINBOXES_US_160_2_PID 0x9002 /* US-160 16xRS232 1Mbaud Port 3 and 4 */
1561     +#define BRAINBOXES_US_160_3_PID 0x9003 /* US-160 16xRS232 1Mbaud Port 5 and 6 */
1562     +#define BRAINBOXES_US_160_4_PID 0x9004 /* US-160 16xRS232 1Mbaud Port 7 and 8 */
1563     +#define BRAINBOXES_US_160_5_PID 0x9005 /* US-160 16xRS232 1Mbaud Port 9 and 10 */
1564     +#define BRAINBOXES_US_160_6_PID 0x9006 /* US-160 16xRS232 1Mbaud Port 11 and 12 */
1565     +#define BRAINBOXES_US_160_7_PID 0x9007 /* US-160 16xRS232 1Mbaud Port 13 and 14 */
1566     +#define BRAINBOXES_US_160_8_PID 0x9008 /* US-160 16xRS232 1Mbaud Port 15 and 16 */
1567     diff --git a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c
1568     index a2db5be9c305..df90dae53eb9 100644
1569     --- a/drivers/usb/serial/io_ti.c
1570     +++ b/drivers/usb/serial/io_ti.c
1571     @@ -28,6 +28,7 @@
1572     #include <linux/spinlock.h>
1573     #include <linux/mutex.h>
1574     #include <linux/serial.h>
1575     +#include <linux/swab.h>
1576     #include <linux/kfifo.h>
1577     #include <linux/ioctl.h>
1578     #include <linux/firmware.h>
1579     @@ -280,7 +281,7 @@ static int read_download_mem(struct usb_device *dev, int start_address,
1580     {
1581     int status = 0;
1582     __u8 read_length;
1583     - __be16 be_start_address;
1584     + u16 be_start_address;
1585    
1586     dev_dbg(&dev->dev, "%s - @ %x for %d\n", __func__, start_address, length);
1587    
1588     @@ -296,10 +297,14 @@ static int read_download_mem(struct usb_device *dev, int start_address,
1589     if (read_length > 1) {
1590     dev_dbg(&dev->dev, "%s - @ %x for %d\n", __func__, start_address, read_length);
1591     }
1592     - be_start_address = cpu_to_be16(start_address);
1593     + /*
1594     + * NOTE: Must use swab as wIndex is sent in little-endian
1595     + * byte order regardless of host byte order.
1596     + */
1597     + be_start_address = swab16((u16)start_address);
1598     status = ti_vread_sync(dev, UMPC_MEMORY_READ,
1599     (__u16)address_type,
1600     - (__force __u16)be_start_address,
1601     + be_start_address,
1602     buffer, read_length);
1603    
1604     if (status) {
1605     @@ -394,7 +399,7 @@ static int write_i2c_mem(struct edgeport_serial *serial,
1606     struct device *dev = &serial->serial->dev->dev;
1607     int status = 0;
1608     int write_length;
1609     - __be16 be_start_address;
1610     + u16 be_start_address;
1611    
1612     /* We can only send a maximum of 1 aligned byte page at a time */
1613    
1614     @@ -409,11 +414,16 @@ static int write_i2c_mem(struct edgeport_serial *serial,
1615     __func__, start_address, write_length);
1616     usb_serial_debug_data(dev, __func__, write_length, buffer);
1617    
1618     - /* Write first page */
1619     - be_start_address = cpu_to_be16(start_address);
1620     + /*
1621     + * Write first page.
1622     + *
1623     + * NOTE: Must use swab as wIndex is sent in little-endian byte order
1624     + * regardless of host byte order.
1625     + */
1626     + be_start_address = swab16((u16)start_address);
1627     status = ti_vsend_sync(serial->serial->dev,
1628     UMPC_MEMORY_WRITE, (__u16)address_type,
1629     - (__force __u16)be_start_address,
1630     + be_start_address,
1631     buffer, write_length);
1632     if (status) {
1633     dev_dbg(dev, "%s - ERROR %d\n", __func__, status);
1634     @@ -436,11 +446,16 @@ static int write_i2c_mem(struct edgeport_serial *serial,
1635     __func__, start_address, write_length);
1636     usb_serial_debug_data(dev, __func__, write_length, buffer);
1637    
1638     - /* Write next page */
1639     - be_start_address = cpu_to_be16(start_address);
1640     + /*
1641     + * Write next page.
1642     + *
1643     + * NOTE: Must use swab as wIndex is sent in little-endian byte
1644     + * order regardless of host byte order.
1645     + */
1646     + be_start_address = swab16((u16)start_address);
1647     status = ti_vsend_sync(serial->serial->dev, UMPC_MEMORY_WRITE,
1648     (__u16)address_type,
1649     - (__force __u16)be_start_address,
1650     + be_start_address,
1651     buffer, write_length);
1652     if (status) {
1653     dev_err(dev, "%s - ERROR %d\n", __func__, status);
1654     @@ -585,8 +600,8 @@ static int get_descriptor_addr(struct edgeport_serial *serial,
1655     if (rom_desc->Type == desc_type)
1656     return start_address;
1657    
1658     - start_address = start_address + sizeof(struct ti_i2c_desc)
1659     - + rom_desc->Size;
1660     + start_address = start_address + sizeof(struct ti_i2c_desc) +
1661     + le16_to_cpu(rom_desc->Size);
1662    
1663     } while ((start_address < TI_MAX_I2C_SIZE) && rom_desc->Type);
1664    
1665     @@ -599,7 +614,7 @@ static int valid_csum(struct ti_i2c_desc *rom_desc, __u8 *buffer)
1666     __u16 i;
1667     __u8 cs = 0;
1668    
1669     - for (i = 0; i < rom_desc->Size; i++)
1670     + for (i = 0; i < le16_to_cpu(rom_desc->Size); i++)
1671     cs = (__u8)(cs + buffer[i]);
1672    
1673     if (cs != rom_desc->CheckSum) {
1674     @@ -650,7 +665,7 @@ static int check_i2c_image(struct edgeport_serial *serial)
1675     break;
1676    
1677     if ((start_address + sizeof(struct ti_i2c_desc) +
1678     - rom_desc->Size) > TI_MAX_I2C_SIZE) {
1679     + le16_to_cpu(rom_desc->Size)) > TI_MAX_I2C_SIZE) {
1680     status = -ENODEV;
1681     dev_dbg(dev, "%s - structure too big, erroring out.\n", __func__);
1682     break;
1683     @@ -665,7 +680,8 @@ static int check_i2c_image(struct edgeport_serial *serial)
1684     /* Read the descriptor data */
1685     status = read_rom(serial, start_address +
1686     sizeof(struct ti_i2c_desc),
1687     - rom_desc->Size, buffer);
1688     + le16_to_cpu(rom_desc->Size),
1689     + buffer);
1690     if (status)
1691     break;
1692    
1693     @@ -674,7 +690,7 @@ static int check_i2c_image(struct edgeport_serial *serial)
1694     break;
1695     }
1696     start_address = start_address + sizeof(struct ti_i2c_desc) +
1697     - rom_desc->Size;
1698     + le16_to_cpu(rom_desc->Size);
1699    
1700     } while ((rom_desc->Type != I2C_DESC_TYPE_ION) &&
1701     (start_address < TI_MAX_I2C_SIZE));
1702     @@ -712,7 +728,7 @@ static int get_manuf_info(struct edgeport_serial *serial, __u8 *buffer)
1703    
1704     /* Read the descriptor data */
1705     status = read_rom(serial, start_address+sizeof(struct ti_i2c_desc),
1706     - rom_desc->Size, buffer);
1707     + le16_to_cpu(rom_desc->Size), buffer);
1708     if (status)
1709     goto exit;
1710    
1711     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
1712     index 68fc9fe65936..f213ee978516 100644
1713     --- a/drivers/usb/serial/option.c
1714     +++ b/drivers/usb/serial/option.c
1715     @@ -234,8 +234,31 @@ static void option_instat_callback(struct urb *urb);
1716     #define QUALCOMM_VENDOR_ID 0x05C6
1717    
1718     #define CMOTECH_VENDOR_ID 0x16d8
1719     -#define CMOTECH_PRODUCT_6008 0x6008
1720     -#define CMOTECH_PRODUCT_6280 0x6280
1721     +#define CMOTECH_PRODUCT_6001 0x6001
1722     +#define CMOTECH_PRODUCT_CMU_300 0x6002
1723     +#define CMOTECH_PRODUCT_6003 0x6003
1724     +#define CMOTECH_PRODUCT_6004 0x6004
1725     +#define CMOTECH_PRODUCT_6005 0x6005
1726     +#define CMOTECH_PRODUCT_CGU_628A 0x6006
1727     +#define CMOTECH_PRODUCT_CHE_628S 0x6007
1728     +#define CMOTECH_PRODUCT_CMU_301 0x6008
1729     +#define CMOTECH_PRODUCT_CHU_628 0x6280
1730     +#define CMOTECH_PRODUCT_CHU_628S 0x6281
1731     +#define CMOTECH_PRODUCT_CDU_680 0x6803
1732     +#define CMOTECH_PRODUCT_CDU_685A 0x6804
1733     +#define CMOTECH_PRODUCT_CHU_720S 0x7001
1734     +#define CMOTECH_PRODUCT_7002 0x7002
1735     +#define CMOTECH_PRODUCT_CHU_629K 0x7003
1736     +#define CMOTECH_PRODUCT_7004 0x7004
1737     +#define CMOTECH_PRODUCT_7005 0x7005
1738     +#define CMOTECH_PRODUCT_CGU_629 0x7006
1739     +#define CMOTECH_PRODUCT_CHU_629S 0x700a
1740     +#define CMOTECH_PRODUCT_CHU_720I 0x7211
1741     +#define CMOTECH_PRODUCT_7212 0x7212
1742     +#define CMOTECH_PRODUCT_7213 0x7213
1743     +#define CMOTECH_PRODUCT_7251 0x7251
1744     +#define CMOTECH_PRODUCT_7252 0x7252
1745     +#define CMOTECH_PRODUCT_7253 0x7253
1746    
1747     #define TELIT_VENDOR_ID 0x1bc7
1748     #define TELIT_PRODUCT_UC864E 0x1003
1749     @@ -243,6 +266,7 @@ static void option_instat_callback(struct urb *urb);
1750     #define TELIT_PRODUCT_CC864_DUAL 0x1005
1751     #define TELIT_PRODUCT_CC864_SINGLE 0x1006
1752     #define TELIT_PRODUCT_DE910_DUAL 0x1010
1753     +#define TELIT_PRODUCT_UE910_V2 0x1012
1754     #define TELIT_PRODUCT_LE920 0x1200
1755    
1756     /* ZTE PRODUCTS */
1757     @@ -286,6 +310,7 @@ static void option_instat_callback(struct urb *urb);
1758     #define ALCATEL_PRODUCT_X060S_X200 0x0000
1759     #define ALCATEL_PRODUCT_X220_X500D 0x0017
1760     #define ALCATEL_PRODUCT_L100V 0x011e
1761     +#define ALCATEL_PRODUCT_L800MA 0x0203
1762    
1763     #define PIRELLI_VENDOR_ID 0x1266
1764     #define PIRELLI_PRODUCT_C100_1 0x1002
1765     @@ -348,6 +373,7 @@ static void option_instat_callback(struct urb *urb);
1766     #define OLIVETTI_PRODUCT_OLICARD100 0xc000
1767     #define OLIVETTI_PRODUCT_OLICARD145 0xc003
1768     #define OLIVETTI_PRODUCT_OLICARD200 0xc005
1769     +#define OLIVETTI_PRODUCT_OLICARD500 0xc00b
1770    
1771     /* Celot products */
1772     #define CELOT_VENDOR_ID 0x211f
1773     @@ -501,6 +527,10 @@ static const struct option_blacklist_info huawei_cdc12_blacklist = {
1774     .reserved = BIT(1) | BIT(2),
1775     };
1776    
1777     +static const struct option_blacklist_info net_intf0_blacklist = {
1778     + .reserved = BIT(0),
1779     +};
1780     +
1781     static const struct option_blacklist_info net_intf1_blacklist = {
1782     .reserved = BIT(1),
1783     };
1784     @@ -1034,13 +1064,53 @@ static const struct usb_device_id option_ids[] = {
1785     { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */
1786     { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x0023)}, /* ONYX 3G device */
1787     { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */
1788     - { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6280) }, /* BP3-USB & BP3-EXT HSDPA */
1789     - { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6008) },
1790     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },
1791     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) },
1792     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6003),
1793     + .driver_info = (kernel_ulong_t)&net_intf0_blacklist },
1794     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6004) },
1795     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6005) },
1796     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CGU_628A) },
1797     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CHE_628S),
1798     + .driver_info = (kernel_ulong_t)&net_intf0_blacklist },
1799     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_301),
1800     + .driver_info = (kernel_ulong_t)&net_intf0_blacklist },
1801     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CHU_628),
1802     + .driver_info = (kernel_ulong_t)&net_intf0_blacklist },
1803     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CHU_628S) },
1804     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CDU_680) },
1805     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CDU_685A) },
1806     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CHU_720S),
1807     + .driver_info = (kernel_ulong_t)&net_intf0_blacklist },
1808     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7002),
1809     + .driver_info = (kernel_ulong_t)&net_intf0_blacklist },
1810     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CHU_629K),
1811     + .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
1812     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7004),
1813     + .driver_info = (kernel_ulong_t)&net_intf3_blacklist },
1814     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7005) },
1815     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CGU_629),
1816     + .driver_info = (kernel_ulong_t)&net_intf5_blacklist },
1817     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CHU_629S),
1818     + .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
1819     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CHU_720I),
1820     + .driver_info = (kernel_ulong_t)&net_intf0_blacklist },
1821     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7212),
1822     + .driver_info = (kernel_ulong_t)&net_intf0_blacklist },
1823     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7213),
1824     + .driver_info = (kernel_ulong_t)&net_intf0_blacklist },
1825     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7251),
1826     + .driver_info = (kernel_ulong_t)&net_intf1_blacklist },
1827     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7252),
1828     + .driver_info = (kernel_ulong_t)&net_intf1_blacklist },
1829     + { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_7253),
1830     + .driver_info = (kernel_ulong_t)&net_intf1_blacklist },
1831     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) },
1832     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864G) },
1833     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_DUAL) },
1834     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_SINGLE) },
1835     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_DE910_DUAL) },
1836     + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UE910_V2) },
1837     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920),
1838     .driver_info = (kernel_ulong_t)&telit_le920_blacklist },
1839     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */
1840     @@ -1498,6 +1568,8 @@ static const struct usb_device_id option_ids[] = {
1841     .driver_info = (kernel_ulong_t)&net_intf5_blacklist },
1842     { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_L100V),
1843     .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
1844     + { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_L800MA),
1845     + .driver_info = (kernel_ulong_t)&net_intf2_blacklist },
1846     { USB_DEVICE(AIRPLUS_VENDOR_ID, AIRPLUS_PRODUCT_MCD650) },
1847     { USB_DEVICE(TLAYTECH_VENDOR_ID, TLAYTECH_PRODUCT_TEU800) },
1848     { USB_DEVICE(LONGCHEER_VENDOR_ID, FOUR_G_SYSTEMS_PRODUCT_W14),
1849     @@ -1543,6 +1615,9 @@ static const struct usb_device_id option_ids[] = {
1850     { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD200),
1851     .driver_info = (kernel_ulong_t)&net_intf6_blacklist
1852     },
1853     + { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD500),
1854     + .driver_info = (kernel_ulong_t)&net_intf4_blacklist
1855     + },
1856     { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */
1857     { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/
1858     { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM600) },
1859     diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
1860     index 968a40201e5f..7ed681a714a5 100644
1861     --- a/drivers/usb/serial/qcserial.c
1862     +++ b/drivers/usb/serial/qcserial.c
1863     @@ -136,9 +136,18 @@ static const struct usb_device_id id_table[] = {
1864     {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68a2, 0)}, /* Sierra Wireless MC7710 Device Management */
1865     {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68a2, 2)}, /* Sierra Wireless MC7710 NMEA */
1866     {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68a2, 3)}, /* Sierra Wireless MC7710 Modem */
1867     + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68c0, 0)}, /* Sierra Wireless MC73xx Device Management */
1868     + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68c0, 2)}, /* Sierra Wireless MC73xx NMEA */
1869     + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68c0, 3)}, /* Sierra Wireless MC73xx Modem */
1870     {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 0)}, /* Sierra Wireless EM7700 Device Management */
1871     {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 2)}, /* Sierra Wireless EM7700 NMEA */
1872     {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 3)}, /* Sierra Wireless EM7700 Modem */
1873     + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901f, 0)}, /* Sierra Wireless EM7355 Device Management */
1874     + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901f, 2)}, /* Sierra Wireless EM7355 NMEA */
1875     + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901f, 3)}, /* Sierra Wireless EM7355 Modem */
1876     + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9041, 0)}, /* Sierra Wireless MC7305/MC7355 Device Management */
1877     + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9041, 2)}, /* Sierra Wireless MC7305/MC7355 NMEA */
1878     + {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9041, 3)}, /* Sierra Wireless MC7305/MC7355 Modem */
1879     {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9051, 0)}, /* Netgear AirCard 340U Device Management */
1880     {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9051, 2)}, /* Netgear AirCard 340U NMEA */
1881     {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9051, 3)}, /* Netgear AirCard 340U Modem */
1882     diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c
1883     index a9eb6221a815..6b192e602ce0 100644
1884     --- a/drivers/usb/serial/sierra.c
1885     +++ b/drivers/usb/serial/sierra.c
1886     @@ -291,7 +291,6 @@ static const struct usb_device_id id_table[] = {
1887     { USB_DEVICE(0x0f3d, 0x68A3), /* Airprime/Sierra Wireless Direct IP modems */
1888     .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
1889     },
1890     - { USB_DEVICE(0x413C, 0x08133) }, /* Dell Computer Corp. Wireless 5720 VZW Mobile Broadband (EVDO Rev-A) Minicard GPS Port */
1891    
1892     { }
1893     };
1894     diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
1895     index 7c9dc28640bb..b169b0f9b3a2 100644
1896     --- a/drivers/usb/serial/usb-serial.c
1897     +++ b/drivers/usb/serial/usb-serial.c
1898     @@ -1348,10 +1348,12 @@ static int usb_serial_register(struct usb_serial_driver *driver)
1899     static void usb_serial_deregister(struct usb_serial_driver *device)
1900     {
1901     pr_info("USB Serial deregistering driver %s\n", device->description);
1902     +
1903     mutex_lock(&table_lock);
1904     list_del(&device->driver_list);
1905     - usb_serial_bus_deregister(device);
1906     mutex_unlock(&table_lock);
1907     +
1908     + usb_serial_bus_deregister(device);
1909     }
1910    
1911     /**
1912     diff --git a/drivers/usb/serial/usb_wwan.c b/drivers/usb/serial/usb_wwan.c
1913     index 640fe0173236..b078440e822f 100644
1914     --- a/drivers/usb/serial/usb_wwan.c
1915     +++ b/drivers/usb/serial/usb_wwan.c
1916     @@ -466,6 +466,9 @@ int usb_wwan_port_probe(struct usb_serial_port *port)
1917     int err;
1918     int i;
1919    
1920     + if (!port->bulk_in_size || !port->bulk_out_size)
1921     + return -ENODEV;
1922     +
1923     portdata = kzalloc(sizeof(*portdata), GFP_KERNEL);
1924     if (!portdata)
1925     return -ENOMEM;
1926     @@ -473,9 +476,6 @@ int usb_wwan_port_probe(struct usb_serial_port *port)
1927     init_usb_anchor(&portdata->delayed);
1928    
1929     for (i = 0; i < N_IN_URB; i++) {
1930     - if (!port->bulk_in_size)
1931     - break;
1932     -
1933     buffer = (u8 *)__get_free_page(GFP_KERNEL);
1934     if (!buffer)
1935     goto bail_out_error;
1936     @@ -489,9 +489,6 @@ int usb_wwan_port_probe(struct usb_serial_port *port)
1937     }
1938    
1939     for (i = 0; i < N_OUT_URB; i++) {
1940     - if (!port->bulk_out_size)
1941     - break;
1942     -
1943     buffer = kmalloc(OUT_BUFLEN, GFP_KERNEL);
1944     if (!buffer)
1945     goto bail_out_error2;
1946     diff --git a/drivers/xen/events/events_fifo.c b/drivers/xen/events/events_fifo.c
1947     index 1de2a191b395..640b3cf1a338 100644
1948     --- a/drivers/xen/events/events_fifo.c
1949     +++ b/drivers/xen/events/events_fifo.c
1950     @@ -66,7 +66,22 @@ static DEFINE_PER_CPU(struct evtchn_fifo_queue, cpu_queue);
1951     static event_word_t *event_array[MAX_EVENT_ARRAY_PAGES] __read_mostly;
1952     static unsigned event_array_pages __read_mostly;
1953    
1954     +/*
1955     + * sync_set_bit() and friends must be unsigned long aligned on non-x86
1956     + * platforms.
1957     + */
1958     +#if !defined(CONFIG_X86) && BITS_PER_LONG > 32
1959     +
1960     +#define BM(w) (unsigned long *)((unsigned long)w & ~0x7UL)
1961     +#define EVTCHN_FIFO_BIT(b, w) \
1962     + (((unsigned long)w & 0x4UL) ? (EVTCHN_FIFO_ ##b + 32) : EVTCHN_FIFO_ ##b)
1963     +
1964     +#else
1965     +
1966     #define BM(w) ((unsigned long *)(w))
1967     +#define EVTCHN_FIFO_BIT(b, w) EVTCHN_FIFO_ ##b
1968     +
1969     +#endif
1970    
1971     static inline event_word_t *event_word_from_port(unsigned port)
1972     {
1973     @@ -161,33 +176,38 @@ static void evtchn_fifo_bind_to_cpu(struct irq_info *info, unsigned cpu)
1974     static void evtchn_fifo_clear_pending(unsigned port)
1975     {
1976     event_word_t *word = event_word_from_port(port);
1977     - sync_clear_bit(EVTCHN_FIFO_PENDING, BM(word));
1978     + sync_clear_bit(EVTCHN_FIFO_BIT(PENDING, word), BM(word));
1979     }
1980    
1981     static void evtchn_fifo_set_pending(unsigned port)
1982     {
1983     event_word_t *word = event_word_from_port(port);
1984     - sync_set_bit(EVTCHN_FIFO_PENDING, BM(word));
1985     + sync_set_bit(EVTCHN_FIFO_BIT(PENDING, word), BM(word));
1986     }
1987    
1988     static bool evtchn_fifo_is_pending(unsigned port)
1989     {
1990     event_word_t *word = event_word_from_port(port);
1991     - return sync_test_bit(EVTCHN_FIFO_PENDING, BM(word));
1992     + return sync_test_bit(EVTCHN_FIFO_BIT(PENDING, word), BM(word));
1993     }
1994    
1995     static bool evtchn_fifo_test_and_set_mask(unsigned port)
1996     {
1997     event_word_t *word = event_word_from_port(port);
1998     - return sync_test_and_set_bit(EVTCHN_FIFO_MASKED, BM(word));
1999     + return sync_test_and_set_bit(EVTCHN_FIFO_BIT(MASKED, word), BM(word));
2000     }
2001    
2002     static void evtchn_fifo_mask(unsigned port)
2003     {
2004     event_word_t *word = event_word_from_port(port);
2005     - sync_set_bit(EVTCHN_FIFO_MASKED, BM(word));
2006     + sync_set_bit(EVTCHN_FIFO_BIT(MASKED, word), BM(word));
2007     }
2008    
2009     +static bool evtchn_fifo_is_masked(unsigned port)
2010     +{
2011     + event_word_t *word = event_word_from_port(port);
2012     + return sync_test_bit(EVTCHN_FIFO_BIT(MASKED, word), BM(word));
2013     +}
2014     /*
2015     * Clear MASKED, spinning if BUSY is set.
2016     */
2017     @@ -211,7 +231,7 @@ static void evtchn_fifo_unmask(unsigned port)
2018     BUG_ON(!irqs_disabled());
2019    
2020     clear_masked(word);
2021     - if (sync_test_bit(EVTCHN_FIFO_PENDING, BM(word))) {
2022     + if (evtchn_fifo_is_pending(port)) {
2023     struct evtchn_unmask unmask = { .port = port };
2024     (void)HYPERVISOR_event_channel_op(EVTCHNOP_unmask, &unmask);
2025     }
2026     @@ -247,7 +267,7 @@ static void handle_irq_for_port(unsigned port)
2027    
2028     static void consume_one_event(unsigned cpu,
2029     struct evtchn_fifo_control_block *control_block,
2030     - unsigned priority, uint32_t *ready)
2031     + unsigned priority, unsigned long *ready)
2032     {
2033     struct evtchn_fifo_queue *q = &per_cpu(cpu_queue, cpu);
2034     uint32_t head;
2035     @@ -277,10 +297,9 @@ static void consume_one_event(unsigned cpu,
2036     * copy of the ready word.
2037     */
2038     if (head == 0)
2039     - clear_bit(priority, BM(ready));
2040     + clear_bit(priority, ready);
2041    
2042     - if (sync_test_bit(EVTCHN_FIFO_PENDING, BM(word))
2043     - && !sync_test_bit(EVTCHN_FIFO_MASKED, BM(word)))
2044     + if (evtchn_fifo_is_pending(port) && !evtchn_fifo_is_masked(port))
2045     handle_irq_for_port(port);
2046    
2047     q->head[priority] = head;
2048     @@ -289,7 +308,7 @@ static void consume_one_event(unsigned cpu,
2049     static void evtchn_fifo_handle_events(unsigned cpu)
2050     {
2051     struct evtchn_fifo_control_block *control_block;
2052     - uint32_t ready;
2053     + unsigned long ready;
2054     unsigned q;
2055    
2056     control_block = per_cpu(cpu_control_block, cpu);
2057     diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
2058     index 849f6132b327..7c6b73c72210 100644
2059     --- a/fs/cifs/cifsfs.c
2060     +++ b/fs/cifs/cifsfs.c
2061     @@ -253,6 +253,11 @@ cifs_alloc_inode(struct super_block *sb)
2062     cifs_set_oplock_level(cifs_inode, 0);
2063     cifs_inode->delete_pending = false;
2064     cifs_inode->invalid_mapping = false;
2065     + clear_bit(CIFS_INODE_PENDING_OPLOCK_BREAK, &cifs_inode->flags);
2066     + clear_bit(CIFS_INODE_PENDING_WRITERS, &cifs_inode->flags);
2067     + clear_bit(CIFS_INODE_DOWNGRADE_OPLOCK_TO_L2, &cifs_inode->flags);
2068     + spin_lock_init(&cifs_inode->writers_lock);
2069     + cifs_inode->writers = 0;
2070     cifs_inode->vfs_inode.i_blkbits = 14; /* 2**14 = CIFS_MAX_MSGSIZE */
2071     cifs_inode->server_eof = 0;
2072     cifs_inode->uniqueid = 0;
2073     @@ -731,19 +736,26 @@ static ssize_t cifs_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
2074     unsigned long nr_segs, loff_t pos)
2075     {
2076     struct inode *inode = file_inode(iocb->ki_filp);
2077     + struct cifsInodeInfo *cinode = CIFS_I(inode);
2078     ssize_t written;
2079     int rc;
2080    
2081     + written = cifs_get_writer(cinode);
2082     + if (written)
2083     + return written;
2084     +
2085     written = generic_file_aio_write(iocb, iov, nr_segs, pos);
2086    
2087     if (CIFS_CACHE_WRITE(CIFS_I(inode)))
2088     - return written;
2089     + goto out;
2090    
2091     rc = filemap_fdatawrite(inode->i_mapping);
2092     if (rc)
2093     cifs_dbg(FYI, "cifs_file_aio_write: %d rc on %p inode\n",
2094     rc, inode);
2095    
2096     +out:
2097     + cifs_put_writer(cinode);
2098     return written;
2099     }
2100    
2101     diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
2102     index c0f3718b77a8..30f6e9251a4a 100644
2103     --- a/fs/cifs/cifsglob.h
2104     +++ b/fs/cifs/cifsglob.h
2105     @@ -228,6 +228,8 @@ struct smb_version_operations {
2106     /* verify the message */
2107     int (*check_message)(char *, unsigned int);
2108     bool (*is_oplock_break)(char *, struct TCP_Server_Info *);
2109     + void (*downgrade_oplock)(struct TCP_Server_Info *,
2110     + struct cifsInodeInfo *, bool);
2111     /* process transaction2 response */
2112     bool (*check_trans2)(struct mid_q_entry *, struct TCP_Server_Info *,
2113     char *, int);
2114     @@ -1113,6 +1115,12 @@ struct cifsInodeInfo {
2115     unsigned int epoch; /* used to track lease state changes */
2116     bool delete_pending; /* DELETE_ON_CLOSE is set */
2117     bool invalid_mapping; /* pagecache is invalid */
2118     + unsigned long flags;
2119     +#define CIFS_INODE_PENDING_OPLOCK_BREAK (0) /* oplock break in progress */
2120     +#define CIFS_INODE_PENDING_WRITERS (1) /* Writes in progress */
2121     +#define CIFS_INODE_DOWNGRADE_OPLOCK_TO_L2 (2) /* Downgrade oplock to L2 */
2122     + spinlock_t writers_lock;
2123     + unsigned int writers; /* Number of writers on this inode */
2124     unsigned long time; /* jiffies of last update of inode */
2125     u64 server_eof; /* current file size on server -- protected by i_lock */
2126     u64 uniqueid; /* server inode number */
2127     diff --git a/fs/cifs/cifsproto.h b/fs/cifs/cifsproto.h
2128     index acc4ee8ed075..ca7980a1e303 100644
2129     --- a/fs/cifs/cifsproto.h
2130     +++ b/fs/cifs/cifsproto.h
2131     @@ -127,6 +127,9 @@ extern u64 cifs_UnixTimeToNT(struct timespec);
2132     extern struct timespec cnvrtDosUnixTm(__le16 le_date, __le16 le_time,
2133     int offset);
2134     extern void cifs_set_oplock_level(struct cifsInodeInfo *cinode, __u32 oplock);
2135     +extern int cifs_get_writer(struct cifsInodeInfo *cinode);
2136     +extern void cifs_put_writer(struct cifsInodeInfo *cinode);
2137     +extern void cifs_done_oplock_break(struct cifsInodeInfo *cinode);
2138     extern int cifs_unlock_range(struct cifsFileInfo *cfile,
2139     struct file_lock *flock, const unsigned int xid);
2140     extern int cifs_push_mandatory_locks(struct cifsFileInfo *cfile);
2141     diff --git a/fs/cifs/file.c b/fs/cifs/file.c
2142     index 834fce759d80..87c4dd072cde 100644
2143     --- a/fs/cifs/file.c
2144     +++ b/fs/cifs/file.c
2145     @@ -2608,12 +2608,20 @@ cifs_strict_writev(struct kiocb *iocb, const struct iovec *iov,
2146     struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
2147     ssize_t written;
2148    
2149     + written = cifs_get_writer(cinode);
2150     + if (written)
2151     + return written;
2152     +
2153     if (CIFS_CACHE_WRITE(cinode)) {
2154     if (cap_unix(tcon->ses) &&
2155     (CIFS_UNIX_FCNTL_CAP & le64_to_cpu(tcon->fsUnixInfo.Capability))
2156     - && ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0))
2157     - return generic_file_aio_write(iocb, iov, nr_segs, pos);
2158     - return cifs_writev(iocb, iov, nr_segs, pos);
2159     + && ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NOPOSIXBRL) == 0)) {
2160     + written = generic_file_aio_write(
2161     + iocb, iov, nr_segs, pos);
2162     + goto out;
2163     + }
2164     + written = cifs_writev(iocb, iov, nr_segs, pos);
2165     + goto out;
2166     }
2167     /*
2168     * For non-oplocked files in strict cache mode we need to write the data
2169     @@ -2633,6 +2641,8 @@ cifs_strict_writev(struct kiocb *iocb, const struct iovec *iov,
2170     inode);
2171     cinode->oplock = 0;
2172     }
2173     +out:
2174     + cifs_put_writer(cinode);
2175     return written;
2176     }
2177    
2178     @@ -3644,6 +3654,13 @@ static int cifs_launder_page(struct page *page)
2179     return rc;
2180     }
2181    
2182     +static int
2183     +cifs_pending_writers_wait(void *unused)
2184     +{
2185     + schedule();
2186     + return 0;
2187     +}
2188     +
2189     void cifs_oplock_break(struct work_struct *work)
2190     {
2191     struct cifsFileInfo *cfile = container_of(work, struct cifsFileInfo,
2192     @@ -3651,8 +3668,15 @@ void cifs_oplock_break(struct work_struct *work)
2193     struct inode *inode = cfile->dentry->d_inode;
2194     struct cifsInodeInfo *cinode = CIFS_I(inode);
2195     struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
2196     + struct TCP_Server_Info *server = tcon->ses->server;
2197     int rc = 0;
2198    
2199     + wait_on_bit(&cinode->flags, CIFS_INODE_PENDING_WRITERS,
2200     + cifs_pending_writers_wait, TASK_UNINTERRUPTIBLE);
2201     +
2202     + server->ops->downgrade_oplock(server, cinode,
2203     + test_bit(CIFS_INODE_DOWNGRADE_OPLOCK_TO_L2, &cinode->flags));
2204     +
2205     if (!CIFS_CACHE_WRITE(cinode) && CIFS_CACHE_READ(cinode) &&
2206     cifs_has_mand_locks(cinode)) {
2207     cifs_dbg(FYI, "Reset oplock to None for inode=%p due to mand locks\n",
2208     @@ -3689,6 +3713,7 @@ void cifs_oplock_break(struct work_struct *work)
2209     cinode);
2210     cifs_dbg(FYI, "Oplock release rc = %d\n", rc);
2211     }
2212     + cifs_done_oplock_break(cinode);
2213     }
2214    
2215     /*
2216     diff --git a/fs/cifs/misc.c b/fs/cifs/misc.c
2217     index 2f9f3790679d..3b0c62e622da 100644
2218     --- a/fs/cifs/misc.c
2219     +++ b/fs/cifs/misc.c
2220     @@ -466,8 +466,22 @@ is_valid_oplock_break(char *buffer, struct TCP_Server_Info *srv)
2221     cifs_dbg(FYI, "file id match, oplock break\n");
2222     pCifsInode = CIFS_I(netfile->dentry->d_inode);
2223    
2224     - cifs_set_oplock_level(pCifsInode,
2225     - pSMB->OplockLevel ? OPLOCK_READ : 0);
2226     + set_bit(CIFS_INODE_PENDING_OPLOCK_BREAK,
2227     + &pCifsInode->flags);
2228     +
2229     + /*
2230     + * Set flag if the server downgrades the oplock
2231     + * to L2 else clear.
2232     + */
2233     + if (pSMB->OplockLevel)
2234     + set_bit(
2235     + CIFS_INODE_DOWNGRADE_OPLOCK_TO_L2,
2236     + &pCifsInode->flags);
2237     + else
2238     + clear_bit(
2239     + CIFS_INODE_DOWNGRADE_OPLOCK_TO_L2,
2240     + &pCifsInode->flags);
2241     +
2242     queue_work(cifsiod_wq,
2243     &netfile->oplock_break);
2244     netfile->oplock_break_cancelled = false;
2245     @@ -551,6 +565,62 @@ void cifs_set_oplock_level(struct cifsInodeInfo *cinode, __u32 oplock)
2246     cinode->oplock = 0;
2247     }
2248    
2249     +static int
2250     +cifs_oplock_break_wait(void *unused)
2251     +{
2252     + schedule();
2253     + return signal_pending(current) ? -ERESTARTSYS : 0;
2254     +}
2255     +
2256     +/*
2257     + * We wait for oplock breaks to be processed before we attempt to perform
2258     + * writes.
2259     + */
2260     +int cifs_get_writer(struct cifsInodeInfo *cinode)
2261     +{
2262     + int rc;
2263     +
2264     +start:
2265     + rc = wait_on_bit(&cinode->flags, CIFS_INODE_PENDING_OPLOCK_BREAK,
2266     + cifs_oplock_break_wait, TASK_KILLABLE);
2267     + if (rc)
2268     + return rc;
2269     +
2270     + spin_lock(&cinode->writers_lock);
2271     + if (!cinode->writers)
2272     + set_bit(CIFS_INODE_PENDING_WRITERS, &cinode->flags);
2273     + cinode->writers++;
2274     + /* Check to see if we have started servicing an oplock break */
2275     + if (test_bit(CIFS_INODE_PENDING_OPLOCK_BREAK, &cinode->flags)) {
2276     + cinode->writers--;
2277     + if (cinode->writers == 0) {
2278     + clear_bit(CIFS_INODE_PENDING_WRITERS, &cinode->flags);
2279     + wake_up_bit(&cinode->flags, CIFS_INODE_PENDING_WRITERS);
2280     + }
2281     + spin_unlock(&cinode->writers_lock);
2282     + goto start;
2283     + }
2284     + spin_unlock(&cinode->writers_lock);
2285     + return 0;
2286     +}
2287     +
2288     +void cifs_put_writer(struct cifsInodeInfo *cinode)
2289     +{
2290     + spin_lock(&cinode->writers_lock);
2291     + cinode->writers--;
2292     + if (cinode->writers == 0) {
2293     + clear_bit(CIFS_INODE_PENDING_WRITERS, &cinode->flags);
2294     + wake_up_bit(&cinode->flags, CIFS_INODE_PENDING_WRITERS);
2295     + }
2296     + spin_unlock(&cinode->writers_lock);
2297     +}
2298     +
2299     +void cifs_done_oplock_break(struct cifsInodeInfo *cinode)
2300     +{
2301     + clear_bit(CIFS_INODE_PENDING_OPLOCK_BREAK, &cinode->flags);
2302     + wake_up_bit(&cinode->flags, CIFS_INODE_PENDING_OPLOCK_BREAK);
2303     +}
2304     +
2305     bool
2306     backup_cred(struct cifs_sb_info *cifs_sb)
2307     {
2308     diff --git a/fs/cifs/smb1ops.c b/fs/cifs/smb1ops.c
2309     index 526fb89f9230..d1fdfa848703 100644
2310     --- a/fs/cifs/smb1ops.c
2311     +++ b/fs/cifs/smb1ops.c
2312     @@ -372,6 +372,16 @@ coalesce_t2(char *second_buf, struct smb_hdr *target_hdr)
2313     return 0;
2314     }
2315    
2316     +static void
2317     +cifs_downgrade_oplock(struct TCP_Server_Info *server,
2318     + struct cifsInodeInfo *cinode, bool set_level2)
2319     +{
2320     + if (set_level2)
2321     + cifs_set_oplock_level(cinode, OPLOCK_READ);
2322     + else
2323     + cifs_set_oplock_level(cinode, 0);
2324     +}
2325     +
2326     static bool
2327     cifs_check_trans2(struct mid_q_entry *mid, struct TCP_Server_Info *server,
2328     char *buf, int malformed)
2329     @@ -1019,6 +1029,7 @@ struct smb_version_operations smb1_operations = {
2330     .clear_stats = cifs_clear_stats,
2331     .print_stats = cifs_print_stats,
2332     .is_oplock_break = is_valid_oplock_break,
2333     + .downgrade_oplock = cifs_downgrade_oplock,
2334     .check_trans2 = cifs_check_trans2,
2335     .need_neg = cifs_need_neg,
2336     .negotiate = cifs_negotiate,
2337     diff --git a/fs/cifs/smb2misc.c b/fs/cifs/smb2misc.c
2338     index fb3966265b6e..b8021fde987d 100644
2339     --- a/fs/cifs/smb2misc.c
2340     +++ b/fs/cifs/smb2misc.c
2341     @@ -575,9 +575,21 @@ smb2_is_valid_oplock_break(char *buffer, struct TCP_Server_Info *server)
2342     else
2343     cfile->oplock_break_cancelled = false;
2344    
2345     - server->ops->set_oplock_level(cinode,
2346     - rsp->OplockLevel ? SMB2_OPLOCK_LEVEL_II : 0,
2347     - 0, NULL);
2348     + set_bit(CIFS_INODE_PENDING_OPLOCK_BREAK,
2349     + &cinode->flags);
2350     +
2351     + /*
2352     + * Set flag if the server downgrades the oplock
2353     + * to L2 else clear.
2354     + */
2355     + if (rsp->OplockLevel)
2356     + set_bit(
2357     + CIFS_INODE_DOWNGRADE_OPLOCK_TO_L2,
2358     + &cinode->flags);
2359     + else
2360     + clear_bit(
2361     + CIFS_INODE_DOWNGRADE_OPLOCK_TO_L2,
2362     + &cinode->flags);
2363    
2364     queue_work(cifsiod_wq, &cfile->oplock_break);
2365    
2366     diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
2367     index 192f51a12cf1..35ddc3ed119d 100644
2368     --- a/fs/cifs/smb2ops.c
2369     +++ b/fs/cifs/smb2ops.c
2370     @@ -905,6 +905,17 @@ smb2_query_symlink(const unsigned int xid, struct cifs_tcon *tcon,
2371     }
2372    
2373     static void
2374     +smb2_downgrade_oplock(struct TCP_Server_Info *server,
2375     + struct cifsInodeInfo *cinode, bool set_level2)
2376     +{
2377     + if (set_level2)
2378     + server->ops->set_oplock_level(cinode, SMB2_OPLOCK_LEVEL_II,
2379     + 0, NULL);
2380     + else
2381     + server->ops->set_oplock_level(cinode, 0, 0, NULL);
2382     +}
2383     +
2384     +static void
2385     smb2_set_oplock_level(struct cifsInodeInfo *cinode, __u32 oplock,
2386     unsigned int epoch, bool *purge_cache)
2387     {
2388     @@ -1110,6 +1121,7 @@ struct smb_version_operations smb20_operations = {
2389     .clear_stats = smb2_clear_stats,
2390     .print_stats = smb2_print_stats,
2391     .is_oplock_break = smb2_is_valid_oplock_break,
2392     + .downgrade_oplock = smb2_downgrade_oplock,
2393     .need_neg = smb2_need_neg,
2394     .negotiate = smb2_negotiate,
2395     .negotiate_wsize = smb2_negotiate_wsize,
2396     @@ -1184,6 +1196,7 @@ struct smb_version_operations smb21_operations = {
2397     .clear_stats = smb2_clear_stats,
2398     .print_stats = smb2_print_stats,
2399     .is_oplock_break = smb2_is_valid_oplock_break,
2400     + .downgrade_oplock = smb2_downgrade_oplock,
2401     .need_neg = smb2_need_neg,
2402     .negotiate = smb2_negotiate,
2403     .negotiate_wsize = smb2_negotiate_wsize,
2404     @@ -1259,6 +1272,7 @@ struct smb_version_operations smb30_operations = {
2405     .print_stats = smb2_print_stats,
2406     .dump_share_caps = smb2_dump_share_caps,
2407     .is_oplock_break = smb2_is_valid_oplock_break,
2408     + .downgrade_oplock = smb2_downgrade_oplock,
2409     .need_neg = smb2_need_neg,
2410     .negotiate = smb2_negotiate,
2411     .negotiate_wsize = smb2_negotiate_wsize,
2412     diff --git a/fs/file_table.c b/fs/file_table.c
2413     index 5b24008ea4f6..79ecae62209a 100644
2414     --- a/fs/file_table.c
2415     +++ b/fs/file_table.c
2416     @@ -209,10 +209,10 @@ static void drop_file_write_access(struct file *file)
2417     struct dentry *dentry = file->f_path.dentry;
2418     struct inode *inode = dentry->d_inode;
2419    
2420     - put_write_access(inode);
2421     -
2422     if (special_file(inode->i_mode))
2423     return;
2424     +
2425     + put_write_access(inode);
2426     if (file_check_writeable(file) != 0)
2427     return;
2428     __mnt_drop_write(mnt);
2429     diff --git a/fs/open.c b/fs/open.c
2430     index b9ed8b25c108..2ed7325f713e 100644
2431     --- a/fs/open.c
2432     +++ b/fs/open.c
2433     @@ -641,23 +641,12 @@ out:
2434     static inline int __get_file_write_access(struct inode *inode,
2435     struct vfsmount *mnt)
2436     {
2437     - int error;
2438     - error = get_write_access(inode);
2439     + int error = get_write_access(inode);
2440     if (error)
2441     return error;
2442     - /*
2443     - * Do not take mount writer counts on
2444     - * special files since no writes to
2445     - * the mount itself will occur.
2446     - */
2447     - if (!special_file(inode->i_mode)) {
2448     - /*
2449     - * Balanced in __fput()
2450     - */
2451     - error = __mnt_want_write(mnt);
2452     - if (error)
2453     - put_write_access(inode);
2454     - }
2455     + error = __mnt_want_write(mnt);
2456     + if (error)
2457     + put_write_access(inode);
2458     return error;
2459     }
2460    
2461     @@ -690,12 +679,11 @@ static int do_dentry_open(struct file *f,
2462    
2463     path_get(&f->f_path);
2464     inode = f->f_inode = f->f_path.dentry->d_inode;
2465     - if (f->f_mode & FMODE_WRITE) {
2466     + if (f->f_mode & FMODE_WRITE && !special_file(inode->i_mode)) {
2467     error = __get_file_write_access(inode, f->f_path.mnt);
2468     if (error)
2469     goto cleanup_file;
2470     - if (!special_file(inode->i_mode))
2471     - file_take_write(f);
2472     + file_take_write(f);
2473     }
2474    
2475     f->f_mapping = inode->i_mapping;
2476     @@ -742,7 +730,6 @@ static int do_dentry_open(struct file *f,
2477     cleanup_all:
2478     fops_put(f->f_op);
2479     if (f->f_mode & FMODE_WRITE) {
2480     - put_write_access(inode);
2481     if (!special_file(inode->i_mode)) {
2482     /*
2483     * We don't consider this a real
2484     @@ -750,6 +737,7 @@ cleanup_all:
2485     * because it all happenend right
2486     * here, so just reset the state.
2487     */
2488     + put_write_access(inode);
2489     file_reset_write(f);
2490     __mnt_drop_write(f->f_path.mnt);
2491     }
2492     diff --git a/fs/super.c b/fs/super.c
2493     index 80d5cf2ca765..7624267b2043 100644
2494     --- a/fs/super.c
2495     +++ b/fs/super.c
2496     @@ -802,7 +802,10 @@ void emergency_remount(void)
2497    
2498     static DEFINE_IDA(unnamed_dev_ida);
2499     static DEFINE_SPINLOCK(unnamed_dev_lock);/* protects the above */
2500     -static int unnamed_dev_start = 0; /* don't bother trying below it */
2501     +/* Many userspace utilities consider an FSID of 0 invalid.
2502     + * Always return at least 1 from get_anon_bdev.
2503     + */
2504     +static int unnamed_dev_start = 1;
2505    
2506     int get_anon_bdev(dev_t *p)
2507     {
2508     diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h
2509     index 34c7bdc06014..38a743705cc6 100644
2510     --- a/include/asm-generic/pgtable.h
2511     +++ b/include/asm-generic/pgtable.h
2512     @@ -680,24 +680,35 @@ static inline int pmd_numa(pmd_t pmd)
2513     #ifndef pte_mknonnuma
2514     static inline pte_t pte_mknonnuma(pte_t pte)
2515     {
2516     - pte = pte_clear_flags(pte, _PAGE_NUMA);
2517     - return pte_set_flags(pte, _PAGE_PRESENT|_PAGE_ACCESSED);
2518     + pteval_t val = pte_val(pte);
2519     +
2520     + val &= ~_PAGE_NUMA;
2521     + val |= (_PAGE_PRESENT|_PAGE_ACCESSED);
2522     + return __pte(val);
2523     }
2524     #endif
2525    
2526     #ifndef pmd_mknonnuma
2527     static inline pmd_t pmd_mknonnuma(pmd_t pmd)
2528     {
2529     - pmd = pmd_clear_flags(pmd, _PAGE_NUMA);
2530     - return pmd_set_flags(pmd, _PAGE_PRESENT|_PAGE_ACCESSED);
2531     + pmdval_t val = pmd_val(pmd);
2532     +
2533     + val &= ~_PAGE_NUMA;
2534     + val |= (_PAGE_PRESENT|_PAGE_ACCESSED);
2535     +
2536     + return __pmd(val);
2537     }
2538     #endif
2539    
2540     #ifndef pte_mknuma
2541     static inline pte_t pte_mknuma(pte_t pte)
2542     {
2543     - pte = pte_set_flags(pte, _PAGE_NUMA);
2544     - return pte_clear_flags(pte, _PAGE_PRESENT);
2545     + pteval_t val = pte_val(pte);
2546     +
2547     + val &= ~_PAGE_PRESENT;
2548     + val |= _PAGE_NUMA;
2549     +
2550     + return __pte(val);
2551     }
2552     #endif
2553    
2554     @@ -716,8 +727,12 @@ static inline void ptep_set_numa(struct mm_struct *mm, unsigned long addr,
2555     #ifndef pmd_mknuma
2556     static inline pmd_t pmd_mknuma(pmd_t pmd)
2557     {
2558     - pmd = pmd_set_flags(pmd, _PAGE_NUMA);
2559     - return pmd_clear_flags(pmd, _PAGE_PRESENT);
2560     + pmdval_t val = pmd_val(pmd);
2561     +
2562     + val &= ~_PAGE_PRESENT;
2563     + val |= _PAGE_NUMA;
2564     +
2565     + return __pmd(val);
2566     }
2567     #endif
2568    
2569     diff --git a/include/linux/if_macvlan.h b/include/linux/if_macvlan.h
2570     index 7c8b20b120ea..a9a53b12397b 100644
2571     --- a/include/linux/if_macvlan.h
2572     +++ b/include/linux/if_macvlan.h
2573     @@ -56,6 +56,7 @@ struct macvlan_dev {
2574     int numqueues;
2575     netdev_features_t tap_features;
2576     int minor;
2577     + int nest_level;
2578     };
2579    
2580     static inline void macvlan_count_rx(const struct macvlan_dev *vlan,
2581     diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h
2582     index bbedfb56bd66..72ba6f5cbc8d 100644
2583     --- a/include/linux/if_vlan.h
2584     +++ b/include/linux/if_vlan.h
2585     @@ -73,7 +73,7 @@ static inline struct vlan_ethhdr *vlan_eth_hdr(const struct sk_buff *skb)
2586     /* found in socket.c */
2587     extern void vlan_ioctl_set(int (*hook)(struct net *, void __user *));
2588    
2589     -static inline int is_vlan_dev(struct net_device *dev)
2590     +static inline bool is_vlan_dev(struct net_device *dev)
2591     {
2592     return dev->priv_flags & IFF_802_1Q_VLAN;
2593     }
2594     @@ -158,6 +158,7 @@ struct vlan_dev_priv {
2595     #ifdef CONFIG_NET_POLL_CONTROLLER
2596     struct netpoll *netpoll;
2597     #endif
2598     + unsigned int nest_level;
2599     };
2600    
2601     static inline struct vlan_dev_priv *vlan_dev_priv(const struct net_device *dev)
2602     diff --git a/include/linux/net.h b/include/linux/net.h
2603     index 94734a6259a4..17d83393afcc 100644
2604     --- a/include/linux/net.h
2605     +++ b/include/linux/net.h
2606     @@ -248,24 +248,17 @@ do { \
2607     bool __net_get_random_once(void *buf, int nbytes, bool *done,
2608     struct static_key *done_key);
2609    
2610     -#ifdef HAVE_JUMP_LABEL
2611     -#define ___NET_RANDOM_STATIC_KEY_INIT ((struct static_key) \
2612     - { .enabled = ATOMIC_INIT(0), .entries = (void *)1 })
2613     -#else /* !HAVE_JUMP_LABEL */
2614     -#define ___NET_RANDOM_STATIC_KEY_INIT STATIC_KEY_INIT_FALSE
2615     -#endif /* HAVE_JUMP_LABEL */
2616     -
2617     #define net_get_random_once(buf, nbytes) \
2618     ({ \
2619     bool ___ret = false; \
2620     static bool ___done = false; \
2621     - static struct static_key ___done_key = \
2622     - ___NET_RANDOM_STATIC_KEY_INIT; \
2623     - if (!static_key_true(&___done_key)) \
2624     + static struct static_key ___once_key = \
2625     + STATIC_KEY_INIT_TRUE; \
2626     + if (static_key_true(&___once_key)) \
2627     ___ret = __net_get_random_once(buf, \
2628     nbytes, \
2629     &___done, \
2630     - &___done_key); \
2631     + &___once_key); \
2632     ___ret; \
2633     })
2634    
2635     diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
2636     index daafd9561cbc..911718fa92ed 100644
2637     --- a/include/linux/netdevice.h
2638     +++ b/include/linux/netdevice.h
2639     @@ -1145,6 +1145,7 @@ struct net_device_ops {
2640     netdev_tx_t (*ndo_dfwd_start_xmit) (struct sk_buff *skb,
2641     struct net_device *dev,
2642     void *priv);
2643     + int (*ndo_get_lock_subclass)(struct net_device *dev);
2644     };
2645    
2646     /*
2647     @@ -2861,7 +2862,12 @@ static inline void netif_addr_lock(struct net_device *dev)
2648    
2649     static inline void netif_addr_lock_nested(struct net_device *dev)
2650     {
2651     - spin_lock_nested(&dev->addr_list_lock, SINGLE_DEPTH_NESTING);
2652     + int subclass = SINGLE_DEPTH_NESTING;
2653     +
2654     + if (dev->netdev_ops->ndo_get_lock_subclass)
2655     + subclass = dev->netdev_ops->ndo_get_lock_subclass(dev);
2656     +
2657     + spin_lock_nested(&dev->addr_list_lock, subclass);
2658     }
2659    
2660     static inline void netif_addr_lock_bh(struct net_device *dev)
2661     @@ -2988,6 +2994,14 @@ void *netdev_lower_get_next_private_rcu(struct net_device *dev,
2662     priv; \
2663     priv = netdev_lower_get_next_private_rcu(dev, &(iter)))
2664    
2665     +void *netdev_lower_get_next(struct net_device *dev,
2666     + struct list_head **iter);
2667     +#define netdev_for_each_lower_dev(dev, ldev, iter) \
2668     + for (iter = &(dev)->adj_list.lower, \
2669     + ldev = netdev_lower_get_next(dev, &(iter)); \
2670     + ldev; \
2671     + ldev = netdev_lower_get_next(dev, &(iter)))
2672     +
2673     void *netdev_adjacent_get_private(struct list_head *adj_list);
2674     void *netdev_lower_get_first_private_rcu(struct net_device *dev);
2675     struct net_device *netdev_master_upper_dev_get(struct net_device *dev);
2676     @@ -3003,6 +3017,8 @@ void netdev_upper_dev_unlink(struct net_device *dev,
2677     void netdev_adjacent_rename_links(struct net_device *dev, char *oldname);
2678     void *netdev_lower_dev_get_private(struct net_device *dev,
2679     struct net_device *lower_dev);
2680     +int dev_get_nest_level(struct net_device *dev,
2681     + bool (*type_check)(struct net_device *dev));
2682     int skb_checksum_help(struct sk_buff *skb);
2683     struct sk_buff *__skb_gso_segment(struct sk_buff *skb,
2684     netdev_features_t features, bool tx_path);
2685     diff --git a/include/linux/preempt.h b/include/linux/preempt.h
2686     index de83b4eb1642..1841b58cf173 100644
2687     --- a/include/linux/preempt.h
2688     +++ b/include/linux/preempt.h
2689     @@ -15,6 +15,8 @@
2690     */
2691     #define PREEMPT_NEED_RESCHED 0x80000000
2692    
2693     +#define tif_need_resched() test_thread_flag(TIF_NEED_RESCHED)
2694     +
2695     #include <asm/preempt.h>
2696    
2697     #if defined(CONFIG_DEBUG_PREEMPT) || defined(CONFIG_PREEMPT_TRACER)
2698     diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h
2699     index 8e3e66ac0a52..953937ea5233 100644
2700     --- a/include/linux/rtnetlink.h
2701     +++ b/include/linux/rtnetlink.h
2702     @@ -4,6 +4,7 @@
2703    
2704     #include <linux/mutex.h>
2705     #include <linux/netdevice.h>
2706     +#include <linux/wait.h>
2707     #include <uapi/linux/rtnetlink.h>
2708    
2709     extern int rtnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, u32 group, int echo);
2710     @@ -22,6 +23,10 @@ extern void rtnl_lock(void);
2711     extern void rtnl_unlock(void);
2712     extern int rtnl_trylock(void);
2713     extern int rtnl_is_locked(void);
2714     +
2715     +extern wait_queue_head_t netdev_unregistering_wq;
2716     +extern struct mutex net_mutex;
2717     +
2718     #ifdef CONFIG_PROVE_LOCKING
2719     extern int lockdep_rtnl_is_held(void);
2720     #else
2721     diff --git a/include/linux/sched.h b/include/linux/sched.h
2722     index a781dec1cd0b..ccd0c6f24f2c 100644
2723     --- a/include/linux/sched.h
2724     +++ b/include/linux/sched.h
2725     @@ -1688,6 +1688,24 @@ static inline pid_t task_tgid_vnr(struct task_struct *tsk)
2726     }
2727    
2728    
2729     +static int pid_alive(const struct task_struct *p);
2730     +static inline pid_t task_ppid_nr_ns(const struct task_struct *tsk, struct pid_namespace *ns)
2731     +{
2732     + pid_t pid = 0;
2733     +
2734     + rcu_read_lock();
2735     + if (pid_alive(tsk))
2736     + pid = task_tgid_nr_ns(rcu_dereference(tsk->real_parent), ns);
2737     + rcu_read_unlock();
2738     +
2739     + return pid;
2740     +}
2741     +
2742     +static inline pid_t task_ppid_nr(const struct task_struct *tsk)
2743     +{
2744     + return task_ppid_nr_ns(tsk, &init_pid_ns);
2745     +}
2746     +
2747     static inline pid_t task_pgrp_nr_ns(struct task_struct *tsk,
2748     struct pid_namespace *ns)
2749     {
2750     @@ -1727,7 +1745,7 @@ static inline pid_t task_pgrp_nr(struct task_struct *tsk)
2751     *
2752     * Return: 1 if the process is alive. 0 otherwise.
2753     */
2754     -static inline int pid_alive(struct task_struct *p)
2755     +static inline int pid_alive(const struct task_struct *p)
2756     {
2757     return p->pids[PIDTYPE_PID].pid != NULL;
2758     }
2759     diff --git a/include/linux/sock_diag.h b/include/linux/sock_diag.h
2760     index 54f91d35e5fd..302ab805b0bb 100644
2761     --- a/include/linux/sock_diag.h
2762     +++ b/include/linux/sock_diag.h
2763     @@ -23,7 +23,7 @@ int sock_diag_check_cookie(void *sk, __u32 *cookie);
2764     void sock_diag_save_cookie(void *sk, __u32 *cookie);
2765    
2766     int sock_diag_put_meminfo(struct sock *sk, struct sk_buff *skb, int attr);
2767     -int sock_diag_put_filterinfo(struct user_namespace *user_ns, struct sock *sk,
2768     +int sock_diag_put_filterinfo(struct sock *sk,
2769     struct sk_buff *skb, int attrtype);
2770    
2771     #endif
2772     diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h
2773     index fddbe2023a5d..a629e4b23217 100644
2774     --- a/include/linux/thread_info.h
2775     +++ b/include/linux/thread_info.h
2776     @@ -118,8 +118,6 @@ static inline __deprecated void set_need_resched(void)
2777     */
2778     }
2779    
2780     -#define tif_need_resched() test_thread_flag(TIF_NEED_RESCHED)
2781     -
2782     #if defined TIF_RESTORE_SIGMASK && !defined HAVE_SET_RESTORE_SIGMASK
2783     /*
2784     * An arch can define its own version of set_restore_sigmask() to get the
2785     diff --git a/include/net/af_vsock.h b/include/net/af_vsock.h
2786     index 7d64d3609ec9..428277869400 100644
2787     --- a/include/net/af_vsock.h
2788     +++ b/include/net/af_vsock.h
2789     @@ -155,7 +155,11 @@ struct vsock_transport {
2790    
2791     /**** CORE ****/
2792    
2793     -int vsock_core_init(const struct vsock_transport *t);
2794     +int __vsock_core_init(const struct vsock_transport *t, struct module *owner);
2795     +static inline int vsock_core_init(const struct vsock_transport *t)
2796     +{
2797     + return __vsock_core_init(t, THIS_MODULE);
2798     +}
2799     void vsock_core_exit(void);
2800    
2801     /**** UTILS ****/
2802     diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h
2803     index 017badb1aec7..2e74c6cfa612 100644
2804     --- a/include/net/ip6_route.h
2805     +++ b/include/net/ip6_route.h
2806     @@ -32,6 +32,11 @@ struct route_info {
2807     #define RT6_LOOKUP_F_SRCPREF_PUBLIC 0x00000010
2808     #define RT6_LOOKUP_F_SRCPREF_COA 0x00000020
2809    
2810     +/* We do not (yet ?) support IPv6 jumbograms (RFC 2675)
2811     + * Unlike IPv4, hdr->seg_len doesn't include the IPv6 header
2812     + */
2813     +#define IP6_MAX_MTU (0xFFFF + sizeof(struct ipv6hdr))
2814     +
2815     /*
2816     * rt6_srcprefs2flags() and rt6_flags2srcprefs() translate
2817     * between IPV6_ADDR_PREFERENCES socket option values
2818     diff --git a/include/net/netfilter/nf_conntrack_extend.h b/include/net/netfilter/nf_conntrack_extend.h
2819     index 956b175523ff..55d15049ab2f 100644
2820     --- a/include/net/netfilter/nf_conntrack_extend.h
2821     +++ b/include/net/netfilter/nf_conntrack_extend.h
2822     @@ -47,8 +47,8 @@ enum nf_ct_ext_id {
2823     /* Extensions: optional stuff which isn't permanently in struct. */
2824     struct nf_ct_ext {
2825     struct rcu_head rcu;
2826     - u8 offset[NF_CT_EXT_NUM];
2827     - u8 len;
2828     + u16 offset[NF_CT_EXT_NUM];
2829     + u16 len;
2830     char data[0];
2831     };
2832    
2833     diff --git a/include/net/netfilter/nf_tables_core.h b/include/net/netfilter/nf_tables_core.h
2834     index cf2b7ae2b9d8..a75fc8e27cd6 100644
2835     --- a/include/net/netfilter/nf_tables_core.h
2836     +++ b/include/net/netfilter/nf_tables_core.h
2837     @@ -13,6 +13,16 @@ struct nft_cmp_fast_expr {
2838     u8 len;
2839     };
2840    
2841     +/* Calculate the mask for the nft_cmp_fast expression. On big endian the
2842     + * mask needs to include the *upper* bytes when interpreting that data as
2843     + * something smaller than the full u32, therefore a cpu_to_le32 is done.
2844     + */
2845     +static inline u32 nft_cmp_fast_mask(unsigned int len)
2846     +{
2847     + return cpu_to_le32(~0U >> (FIELD_SIZEOF(struct nft_cmp_fast_expr,
2848     + data) * BITS_PER_BYTE - len));
2849     +}
2850     +
2851     extern const struct nft_expr_ops nft_cmp_fast_ops;
2852    
2853     int nft_cmp_module_init(void);
2854     diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
2855     index 6ee76c804893..0dfcc92600e8 100644
2856     --- a/include/net/sctp/structs.h
2857     +++ b/include/net/sctp/structs.h
2858     @@ -1241,6 +1241,7 @@ struct sctp_endpoint {
2859     /* SCTP-AUTH: endpoint shared keys */
2860     struct list_head endpoint_shared_keys;
2861     __u16 active_key_id;
2862     + __u8 auth_enable;
2863     };
2864    
2865     /* Recover the outter endpoint structure. */
2866     @@ -1269,7 +1270,8 @@ struct sctp_endpoint *sctp_endpoint_is_match(struct sctp_endpoint *,
2867     int sctp_has_association(struct net *net, const union sctp_addr *laddr,
2868     const union sctp_addr *paddr);
2869    
2870     -int sctp_verify_init(struct net *net, const struct sctp_association *asoc,
2871     +int sctp_verify_init(struct net *net, const struct sctp_endpoint *ep,
2872     + const struct sctp_association *asoc,
2873     sctp_cid_t, sctp_init_chunk_t *peer_init,
2874     struct sctp_chunk *chunk, struct sctp_chunk **err_chunk);
2875     int sctp_process_init(struct sctp_association *, struct sctp_chunk *chunk,
2876     @@ -1653,6 +1655,17 @@ struct sctp_association {
2877     /* This is the last advertised value of rwnd over a SACK chunk. */
2878     __u32 a_rwnd;
2879    
2880     + /* Number of bytes by which the rwnd has slopped. The rwnd is allowed
2881     + * to slop over a maximum of the association's frag_point.
2882     + */
2883     + __u32 rwnd_over;
2884     +
2885     + /* Keeps treack of rwnd pressure. This happens when we have
2886     + * a window, but not recevie buffer (i.e small packets). This one
2887     + * is releases slowly (1 PMTU at a time ).
2888     + */
2889     + __u32 rwnd_press;
2890     +
2891     /* This is the sndbuf size in use for the association.
2892     * This corresponds to the sndbuf size for the association,
2893     * as specified in the sk->sndbuf.
2894     @@ -1881,7 +1894,8 @@ void sctp_assoc_update(struct sctp_association *old,
2895     __u32 sctp_association_get_next_tsn(struct sctp_association *);
2896    
2897     void sctp_assoc_sync_pmtu(struct sock *, struct sctp_association *);
2898     -void sctp_assoc_rwnd_update(struct sctp_association *, bool);
2899     +void sctp_assoc_rwnd_increase(struct sctp_association *, unsigned int);
2900     +void sctp_assoc_rwnd_decrease(struct sctp_association *, unsigned int);
2901     void sctp_assoc_set_primary(struct sctp_association *,
2902     struct sctp_transport *);
2903     void sctp_assoc_del_nonprimary_peers(struct sctp_association *,
2904     diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
2905     index d65fbec2533d..b4f1effc9216 100644
2906     --- a/include/scsi/scsi_device.h
2907     +++ b/include/scsi/scsi_device.h
2908     @@ -257,7 +257,7 @@ struct scsi_target {
2909     struct list_head siblings;
2910     struct list_head devices;
2911     struct device dev;
2912     - unsigned int reap_ref; /* protected by the host lock */
2913     + struct kref reap_ref; /* last put renders target invisible */
2914     unsigned int channel;
2915     unsigned int id; /* target id ... replace
2916     * scsi_device.id eventually */
2917     @@ -284,7 +284,6 @@ struct scsi_target {
2918     #define SCSI_DEFAULT_TARGET_BLOCKED 3
2919    
2920     char scsi_level;
2921     - struct execute_work ew;
2922     enum scsi_target_state state;
2923     void *hostdata; /* available to low-level driver */
2924     unsigned long starget_data[0]; /* for the transport */
2925     diff --git a/include/trace/events/block.h b/include/trace/events/block.h
2926     index e76ae19a8d6f..e8a5eca1dbe5 100644
2927     --- a/include/trace/events/block.h
2928     +++ b/include/trace/events/block.h
2929     @@ -132,6 +132,7 @@ DEFINE_EVENT(block_rq_with_error, block_rq_requeue,
2930     * block_rq_complete - block IO operation completed by device driver
2931     * @q: queue containing the block operation request
2932     * @rq: block operations request
2933     + * @nr_bytes: number of completed bytes
2934     *
2935     * The block_rq_complete tracepoint event indicates that some portion
2936     * of operation request has been completed by the device driver. If
2937     @@ -139,11 +140,37 @@ DEFINE_EVENT(block_rq_with_error, block_rq_requeue,
2938     * do for the request. If @rq->bio is non-NULL then there is
2939     * additional work required to complete the request.
2940     */
2941     -DEFINE_EVENT(block_rq_with_error, block_rq_complete,
2942     +TRACE_EVENT(block_rq_complete,
2943    
2944     - TP_PROTO(struct request_queue *q, struct request *rq),
2945     + TP_PROTO(struct request_queue *q, struct request *rq,
2946     + unsigned int nr_bytes),
2947    
2948     - TP_ARGS(q, rq)
2949     + TP_ARGS(q, rq, nr_bytes),
2950     +
2951     + TP_STRUCT__entry(
2952     + __field( dev_t, dev )
2953     + __field( sector_t, sector )
2954     + __field( unsigned int, nr_sector )
2955     + __field( int, errors )
2956     + __array( char, rwbs, RWBS_LEN )
2957     + __dynamic_array( char, cmd, blk_cmd_buf_len(rq) )
2958     + ),
2959     +
2960     + TP_fast_assign(
2961     + __entry->dev = rq->rq_disk ? disk_devt(rq->rq_disk) : 0;
2962     + __entry->sector = blk_rq_pos(rq);
2963     + __entry->nr_sector = nr_bytes >> 9;
2964     + __entry->errors = rq->errors;
2965     +
2966     + blk_fill_rwbs(__entry->rwbs, rq->cmd_flags, nr_bytes);
2967     + blk_dump_cmd(__get_str(cmd), rq);
2968     + ),
2969     +
2970     + TP_printk("%d,%d %s (%s) %llu + %u [%d]",
2971     + MAJOR(__entry->dev), MINOR(__entry->dev),
2972     + __entry->rwbs, __get_str(cmd),
2973     + (unsigned long long)__entry->sector,
2974     + __entry->nr_sector, __entry->errors)
2975     );
2976    
2977     DECLARE_EVENT_CLASS(block_rq,
2978     diff --git a/init/Kconfig b/init/Kconfig
2979     index d56cb03c1b49..93c5ef0c5210 100644
2980     --- a/init/Kconfig
2981     +++ b/init/Kconfig
2982     @@ -1621,6 +1621,18 @@ config MMAP_ALLOW_UNINITIALIZED
2983    
2984     See Documentation/nommu-mmap.txt for more information.
2985    
2986     +config SYSTEM_TRUSTED_KEYRING
2987     + bool "Provide system-wide ring of trusted keys"
2988     + depends on KEYS
2989     + help
2990     + Provide a system keyring to which trusted keys can be added. Keys in
2991     + the keyring are considered to be trusted. Keys may be added at will
2992     + by the kernel from compiled-in data and from hardware key stores, but
2993     + userspace may only add extra keys if those keys can be verified by
2994     + keys already in the keyring.
2995     +
2996     + Keys in this keyring are used by module signature checking.
2997     +
2998     config PROFILING
2999     bool "Profiling support"
3000     help
3001     @@ -1656,18 +1668,6 @@ config BASE_SMALL
3002     default 0 if BASE_FULL
3003     default 1 if !BASE_FULL
3004    
3005     -config SYSTEM_TRUSTED_KEYRING
3006     - bool "Provide system-wide ring of trusted keys"
3007     - depends on KEYS
3008     - help
3009     - Provide a system keyring to which trusted keys can be added. Keys in
3010     - the keyring are considered to be trusted. Keys may be added at will
3011     - by the kernel from compiled-in data and from hardware key stores, but
3012     - userspace may only add extra keys if those keys can be verified by
3013     - keys already in the keyring.
3014     -
3015     - Keys in this keyring are used by module signature checking.
3016     -
3017     menuconfig MODULES
3018     bool "Enable loadable module support"
3019     option modules
3020     diff --git a/kernel/audit.c b/kernel/audit.c
3021     index 95a20f3f52f1..d5f31c17813a 100644
3022     --- a/kernel/audit.c
3023     +++ b/kernel/audit.c
3024     @@ -1829,10 +1829,10 @@ void audit_log_task_info(struct audit_buffer *ab, struct task_struct *tsk)
3025     spin_unlock_irq(&tsk->sighand->siglock);
3026    
3027     audit_log_format(ab,
3028     - " ppid=%ld pid=%d auid=%u uid=%u gid=%u"
3029     + " ppid=%d pid=%d auid=%u uid=%u gid=%u"
3030     " euid=%u suid=%u fsuid=%u"
3031     " egid=%u sgid=%u fsgid=%u tty=%s ses=%u",
3032     - sys_getppid(),
3033     + task_ppid_nr(tsk),
3034     tsk->pid,
3035     from_kuid(&init_user_ns, audit_get_loginuid(tsk)),
3036     from_kuid(&init_user_ns, cred->uid),
3037     diff --git a/kernel/auditsc.c b/kernel/auditsc.c
3038     index 7aef2f4b6c64..3b29605ea1b2 100644
3039     --- a/kernel/auditsc.c
3040     +++ b/kernel/auditsc.c
3041     @@ -459,7 +459,7 @@ static int audit_filter_rules(struct task_struct *tsk,
3042     case AUDIT_PPID:
3043     if (ctx) {
3044     if (!ctx->ppid)
3045     - ctx->ppid = sys_getppid();
3046     + ctx->ppid = task_ppid_nr(tsk);
3047     result = audit_comparator(ctx->ppid, f->op, f->val);
3048     }
3049     break;
3050     diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c
3051     index 20b2fe37d105..0de9d7f5045c 100644
3052     --- a/kernel/time/tick-common.c
3053     +++ b/kernel/time/tick-common.c
3054     @@ -276,7 +276,7 @@ static bool tick_check_preferred(struct clock_event_device *curdev,
3055     bool tick_check_replacement(struct clock_event_device *curdev,
3056     struct clock_event_device *newdev)
3057     {
3058     - if (tick_check_percpu(curdev, newdev, smp_processor_id()))
3059     + if (!tick_check_percpu(curdev, newdev, smp_processor_id()))
3060     return false;
3061    
3062     return tick_check_preferred(curdev, newdev);
3063     diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
3064     index 9f8af69c67ec..6558b7ac112d 100644
3065     --- a/kernel/time/tick-sched.c
3066     +++ b/kernel/time/tick-sched.c
3067     @@ -84,6 +84,9 @@ static void tick_do_update_jiffies64(ktime_t now)
3068    
3069     /* Keep the tick_next_period variable up to date */
3070     tick_next_period = ktime_add(last_jiffies_update, tick_period);
3071     + } else {
3072     + write_sequnlock(&jiffies_lock);
3073     + return;
3074     }
3075     write_sequnlock(&jiffies_lock);
3076     update_wall_time();
3077     @@ -967,7 +970,7 @@ static void tick_nohz_switch_to_nohz(void)
3078     struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched);
3079     ktime_t next;
3080    
3081     - if (!tick_nohz_active)
3082     + if (!tick_nohz_enabled)
3083     return;
3084    
3085     local_irq_disable();
3086     diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
3087     index b418cb0d7242..4f3a3c03eadb 100644
3088     --- a/kernel/trace/blktrace.c
3089     +++ b/kernel/trace/blktrace.c
3090     @@ -702,6 +702,7 @@ void blk_trace_shutdown(struct request_queue *q)
3091     * blk_add_trace_rq - Add a trace for a request oriented action
3092     * @q: queue the io is for
3093     * @rq: the source request
3094     + * @nr_bytes: number of completed bytes
3095     * @what: the action
3096     *
3097     * Description:
3098     @@ -709,7 +710,7 @@ void blk_trace_shutdown(struct request_queue *q)
3099     *
3100     **/
3101     static void blk_add_trace_rq(struct request_queue *q, struct request *rq,
3102     - u32 what)
3103     + unsigned int nr_bytes, u32 what)
3104     {
3105     struct blk_trace *bt = q->blk_trace;
3106    
3107     @@ -718,11 +719,11 @@ static void blk_add_trace_rq(struct request_queue *q, struct request *rq,
3108    
3109     if (rq->cmd_type == REQ_TYPE_BLOCK_PC) {
3110     what |= BLK_TC_ACT(BLK_TC_PC);
3111     - __blk_add_trace(bt, 0, blk_rq_bytes(rq), rq->cmd_flags,
3112     + __blk_add_trace(bt, 0, nr_bytes, rq->cmd_flags,
3113     what, rq->errors, rq->cmd_len, rq->cmd);
3114     } else {
3115     what |= BLK_TC_ACT(BLK_TC_FS);
3116     - __blk_add_trace(bt, blk_rq_pos(rq), blk_rq_bytes(rq),
3117     + __blk_add_trace(bt, blk_rq_pos(rq), nr_bytes,
3118     rq->cmd_flags, what, rq->errors, 0, NULL);
3119     }
3120     }
3121     @@ -730,33 +731,34 @@ static void blk_add_trace_rq(struct request_queue *q, struct request *rq,
3122     static void blk_add_trace_rq_abort(void *ignore,
3123     struct request_queue *q, struct request *rq)
3124     {
3125     - blk_add_trace_rq(q, rq, BLK_TA_ABORT);
3126     + blk_add_trace_rq(q, rq, blk_rq_bytes(rq), BLK_TA_ABORT);
3127     }
3128    
3129     static void blk_add_trace_rq_insert(void *ignore,
3130     struct request_queue *q, struct request *rq)
3131     {
3132     - blk_add_trace_rq(q, rq, BLK_TA_INSERT);
3133     + blk_add_trace_rq(q, rq, blk_rq_bytes(rq), BLK_TA_INSERT);
3134     }
3135    
3136     static void blk_add_trace_rq_issue(void *ignore,
3137     struct request_queue *q, struct request *rq)
3138     {
3139     - blk_add_trace_rq(q, rq, BLK_TA_ISSUE);
3140     + blk_add_trace_rq(q, rq, blk_rq_bytes(rq), BLK_TA_ISSUE);
3141     }
3142    
3143     static void blk_add_trace_rq_requeue(void *ignore,
3144     struct request_queue *q,
3145     struct request *rq)
3146     {
3147     - blk_add_trace_rq(q, rq, BLK_TA_REQUEUE);
3148     + blk_add_trace_rq(q, rq, blk_rq_bytes(rq), BLK_TA_REQUEUE);
3149     }
3150    
3151     static void blk_add_trace_rq_complete(void *ignore,
3152     struct request_queue *q,
3153     - struct request *rq)
3154     + struct request *rq,
3155     + unsigned int nr_bytes)
3156     {
3157     - blk_add_trace_rq(q, rq, BLK_TA_COMPLETE);
3158     + blk_add_trace_rq(q, rq, nr_bytes, BLK_TA_COMPLETE);
3159     }
3160    
3161     /**
3162     diff --git a/kernel/trace/trace_events_trigger.c b/kernel/trace/trace_events_trigger.c
3163     index 8efbb69b04f0..6d6a789e579e 100644
3164     --- a/kernel/trace/trace_events_trigger.c
3165     +++ b/kernel/trace/trace_events_trigger.c
3166     @@ -77,7 +77,7 @@ event_triggers_call(struct ftrace_event_file *file, void *rec)
3167     data->ops->func(data);
3168     continue;
3169     }
3170     - filter = rcu_dereference(data->filter);
3171     + filter = rcu_dereference_sched(data->filter);
3172     if (filter && !filter_match_preds(filter, rec))
3173     continue;
3174     if (data->cmd_ops->post_trigger) {
3175     diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c
3176     index 79e52d93860b..bd0c9b133b54 100644
3177     --- a/kernel/trace/trace_uprobe.c
3178     +++ b/kernel/trace/trace_uprobe.c
3179     @@ -728,9 +728,15 @@ static int uprobe_buffer_enable(void)
3180    
3181     static void uprobe_buffer_disable(void)
3182     {
3183     + int cpu;
3184     +
3185     BUG_ON(!mutex_is_locked(&event_mutex));
3186    
3187     if (--uprobe_buffer_refcnt == 0) {
3188     + for_each_possible_cpu(cpu)
3189     + free_page((unsigned long)per_cpu_ptr(uprobe_cpu_buffer,
3190     + cpu)->buf);
3191     +
3192     free_percpu(uprobe_cpu_buffer);
3193     uprobe_cpu_buffer = NULL;
3194     }
3195     diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c
3196     index 031cc5655a51..63630aef3bd3 100644
3197     --- a/kernel/tracepoint.c
3198     +++ b/kernel/tracepoint.c
3199     @@ -641,6 +641,9 @@ static int tracepoint_module_coming(struct module *mod)
3200     struct tp_module *tp_mod, *iter;
3201     int ret = 0;
3202    
3203     + if (!mod->num_tracepoints)
3204     + return 0;
3205     +
3206     /*
3207     * We skip modules that taint the kernel, especially those with different
3208     * module headers (for forced load), to make sure we don't cause a crash.
3209     @@ -684,6 +687,9 @@ static int tracepoint_module_going(struct module *mod)
3210     {
3211     struct tp_module *pos;
3212    
3213     + if (!mod->num_tracepoints)
3214     + return 0;
3215     +
3216     mutex_lock(&tracepoints_mutex);
3217     tracepoint_update_probe_range(mod->tracepoints_ptrs,
3218     mod->tracepoints_ptrs + mod->num_tracepoints);
3219     diff --git a/mm/huge_memory.c b/mm/huge_memory.c
3220     index 1546655a2d78..1c42d0c36d0b 100644
3221     --- a/mm/huge_memory.c
3222     +++ b/mm/huge_memory.c
3223     @@ -1611,16 +1611,23 @@ pmd_t *page_check_address_pmd(struct page *page,
3224     enum page_check_address_pmd_flag flag,
3225     spinlock_t **ptl)
3226     {
3227     + pgd_t *pgd;
3228     + pud_t *pud;
3229     pmd_t *pmd;
3230    
3231     if (address & ~HPAGE_PMD_MASK)
3232     return NULL;
3233    
3234     - pmd = mm_find_pmd(mm, address);
3235     - if (!pmd)
3236     + pgd = pgd_offset(mm, address);
3237     + if (!pgd_present(*pgd))
3238     return NULL;
3239     + pud = pud_offset(pgd, address);
3240     + if (!pud_present(*pud))
3241     + return NULL;
3242     + pmd = pmd_offset(pud, address);
3243     +
3244     *ptl = pmd_lock(mm, pmd);
3245     - if (pmd_none(*pmd))
3246     + if (!pmd_present(*pmd))
3247     goto unlock;
3248     if (pmd_page(*pmd) != page)
3249     goto unlock;
3250     diff --git a/mm/hugetlb.c b/mm/hugetlb.c
3251     index 2de3c845f03a..06a9bc0a3120 100644
3252     --- a/mm/hugetlb.c
3253     +++ b/mm/hugetlb.c
3254     @@ -1134,6 +1134,7 @@ static void return_unused_surplus_pages(struct hstate *h,
3255     while (nr_pages--) {
3256     if (!free_pool_huge_page(h, &node_states[N_MEMORY], 1))
3257     break;
3258     + cond_resched_lock(&hugetlb_lock);
3259     }
3260     }
3261    
3262     diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
3263     index 175273f38cb1..44ebd5c2cd4a 100644
3264     --- a/net/8021q/vlan.c
3265     +++ b/net/8021q/vlan.c
3266     @@ -169,6 +169,7 @@ int register_vlan_dev(struct net_device *dev)
3267     if (err < 0)
3268     goto out_uninit_mvrp;
3269    
3270     + vlan->nest_level = dev_get_nest_level(real_dev, is_vlan_dev) + 1;
3271     err = register_netdevice(dev);
3272     if (err < 0)
3273     goto out_uninit_mvrp;
3274     diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
3275     index 27bfe2f8e2de..cc0d21895420 100644
3276     --- a/net/8021q/vlan_dev.c
3277     +++ b/net/8021q/vlan_dev.c
3278     @@ -524,6 +524,11 @@ static void vlan_dev_set_lockdep_class(struct net_device *dev, int subclass)
3279     netdev_for_each_tx_queue(dev, vlan_dev_set_lockdep_one, &subclass);
3280     }
3281    
3282     +static int vlan_dev_get_lock_subclass(struct net_device *dev)
3283     +{
3284     + return vlan_dev_priv(dev)->nest_level;
3285     +}
3286     +
3287     static const struct header_ops vlan_header_ops = {
3288     .create = vlan_dev_hard_header,
3289     .rebuild = vlan_dev_rebuild_header,
3290     @@ -559,7 +564,7 @@ static const struct net_device_ops vlan_netdev_ops;
3291     static int vlan_dev_init(struct net_device *dev)
3292     {
3293     struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
3294     - int subclass = 0, i;
3295     + int i;
3296    
3297     netif_carrier_off(dev);
3298    
3299     @@ -608,10 +613,7 @@ static int vlan_dev_init(struct net_device *dev)
3300    
3301     SET_NETDEV_DEVTYPE(dev, &vlan_type);
3302    
3303     - if (is_vlan_dev(real_dev))
3304     - subclass = 1;
3305     -
3306     - vlan_dev_set_lockdep_class(dev, subclass);
3307     + vlan_dev_set_lockdep_class(dev, vlan_dev_get_lock_subclass(dev));
3308    
3309     vlan_dev_priv(dev)->vlan_pcpu_stats = alloc_percpu(struct vlan_pcpu_stats);
3310     if (!vlan_dev_priv(dev)->vlan_pcpu_stats)
3311     @@ -791,6 +793,7 @@ static const struct net_device_ops vlan_netdev_ops = {
3312     .ndo_netpoll_cleanup = vlan_dev_netpoll_cleanup,
3313     #endif
3314     .ndo_fix_features = vlan_dev_fix_features,
3315     + .ndo_get_lock_subclass = vlan_dev_get_lock_subclass,
3316     };
3317    
3318     void vlan_setup(struct net_device *dev)
3319     diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c
3320     index 8323bced8e5b..d074d06ce094 100644
3321     --- a/net/batman-adv/bat_iv_ogm.c
3322     +++ b/net/batman-adv/bat_iv_ogm.c
3323     @@ -1545,6 +1545,8 @@ out_neigh:
3324     if ((orig_neigh_node) && (!is_single_hop_neigh))
3325     batadv_orig_node_free_ref(orig_neigh_node);
3326     out:
3327     + if (router_ifinfo)
3328     + batadv_neigh_ifinfo_free_ref(router_ifinfo);
3329     if (router)
3330     batadv_neigh_node_free_ref(router);
3331     if (router_router)
3332     diff --git a/net/batman-adv/distributed-arp-table.c b/net/batman-adv/distributed-arp-table.c
3333     index edee50411892..bd8219a7dddf 100644
3334     --- a/net/batman-adv/distributed-arp-table.c
3335     +++ b/net/batman-adv/distributed-arp-table.c
3336     @@ -940,8 +940,7 @@ bool batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv,
3337     * additional DAT answer may trigger kernel warnings about
3338     * a packet coming from the wrong port.
3339     */
3340     - if (batadv_is_my_client(bat_priv, dat_entry->mac_addr,
3341     - BATADV_NO_FLAGS)) {
3342     + if (batadv_is_my_client(bat_priv, dat_entry->mac_addr, vid)) {
3343     ret = true;
3344     goto out;
3345     }
3346     diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c
3347     index 88df9b1d552d..cc1cfd60c094 100644
3348     --- a/net/batman-adv/fragmentation.c
3349     +++ b/net/batman-adv/fragmentation.c
3350     @@ -418,12 +418,13 @@ bool batadv_frag_send_packet(struct sk_buff *skb,
3351     struct batadv_neigh_node *neigh_node)
3352     {
3353     struct batadv_priv *bat_priv;
3354     - struct batadv_hard_iface *primary_if;
3355     + struct batadv_hard_iface *primary_if = NULL;
3356     struct batadv_frag_packet frag_header;
3357     struct sk_buff *skb_fragment;
3358     unsigned mtu = neigh_node->if_incoming->net_dev->mtu;
3359     unsigned header_size = sizeof(frag_header);
3360     unsigned max_fragment_size, max_packet_size;
3361     + bool ret = false;
3362    
3363     /* To avoid merge and refragmentation at next-hops we never send
3364     * fragments larger than BATADV_FRAG_MAX_FRAG_SIZE
3365     @@ -483,7 +484,11 @@ bool batadv_frag_send_packet(struct sk_buff *skb,
3366     skb->len + ETH_HLEN);
3367     batadv_send_skb_packet(skb, neigh_node->if_incoming, neigh_node->addr);
3368    
3369     - return true;
3370     + ret = true;
3371     +
3372     out_err:
3373     - return false;
3374     + if (primary_if)
3375     + batadv_hardif_free_ref(primary_if);
3376     +
3377     + return ret;
3378     }
3379     diff --git a/net/batman-adv/gateway_client.c b/net/batman-adv/gateway_client.c
3380     index 55cf2260d295..36b9ae61f5e8 100644
3381     --- a/net/batman-adv/gateway_client.c
3382     +++ b/net/batman-adv/gateway_client.c
3383     @@ -42,8 +42,10 @@
3384    
3385     static void batadv_gw_node_free_ref(struct batadv_gw_node *gw_node)
3386     {
3387     - if (atomic_dec_and_test(&gw_node->refcount))
3388     + if (atomic_dec_and_test(&gw_node->refcount)) {
3389     + batadv_orig_node_free_ref(gw_node->orig_node);
3390     kfree_rcu(gw_node, rcu);
3391     + }
3392     }
3393    
3394     static struct batadv_gw_node *
3395     @@ -408,9 +410,14 @@ static void batadv_gw_node_add(struct batadv_priv *bat_priv,
3396     if (gateway->bandwidth_down == 0)
3397     return;
3398    
3399     + if (!atomic_inc_not_zero(&orig_node->refcount))
3400     + return;
3401     +
3402     gw_node = kzalloc(sizeof(*gw_node), GFP_ATOMIC);
3403     - if (!gw_node)
3404     + if (!gw_node) {
3405     + batadv_orig_node_free_ref(orig_node);
3406     return;
3407     + }
3408    
3409     INIT_HLIST_NODE(&gw_node->list);
3410     gw_node->orig_node = orig_node;
3411     diff --git a/net/batman-adv/originator.c b/net/batman-adv/originator.c
3412     index 853941629dc1..abf612d7d0ae 100644
3413     --- a/net/batman-adv/originator.c
3414     +++ b/net/batman-adv/originator.c
3415     @@ -500,12 +500,17 @@ batadv_neigh_node_get(const struct batadv_orig_node *orig_node,
3416     static void batadv_orig_ifinfo_free_rcu(struct rcu_head *rcu)
3417     {
3418     struct batadv_orig_ifinfo *orig_ifinfo;
3419     + struct batadv_neigh_node *router;
3420    
3421     orig_ifinfo = container_of(rcu, struct batadv_orig_ifinfo, rcu);
3422    
3423     if (orig_ifinfo->if_outgoing != BATADV_IF_DEFAULT)
3424     batadv_hardif_free_ref_now(orig_ifinfo->if_outgoing);
3425    
3426     + /* this is the last reference to this object */
3427     + router = rcu_dereference_protected(orig_ifinfo->router, true);
3428     + if (router)
3429     + batadv_neigh_node_free_ref_now(router);
3430     kfree(orig_ifinfo);
3431     }
3432    
3433     @@ -697,6 +702,47 @@ free_orig_node:
3434     }
3435    
3436     /**
3437     + * batadv_purge_neigh_ifinfo - purge obsolete ifinfo entries from neighbor
3438     + * @bat_priv: the bat priv with all the soft interface information
3439     + * @neigh: orig node which is to be checked
3440     + */
3441     +static void
3442     +batadv_purge_neigh_ifinfo(struct batadv_priv *bat_priv,
3443     + struct batadv_neigh_node *neigh)
3444     +{
3445     + struct batadv_neigh_ifinfo *neigh_ifinfo;
3446     + struct batadv_hard_iface *if_outgoing;
3447     + struct hlist_node *node_tmp;
3448     +
3449     + spin_lock_bh(&neigh->ifinfo_lock);
3450     +
3451     + /* for all ifinfo objects for this neighinator */
3452     + hlist_for_each_entry_safe(neigh_ifinfo, node_tmp,
3453     + &neigh->ifinfo_list, list) {
3454     + if_outgoing = neigh_ifinfo->if_outgoing;
3455     +
3456     + /* always keep the default interface */
3457     + if (if_outgoing == BATADV_IF_DEFAULT)
3458     + continue;
3459     +
3460     + /* don't purge if the interface is not (going) down */
3461     + if ((if_outgoing->if_status != BATADV_IF_INACTIVE) &&
3462     + (if_outgoing->if_status != BATADV_IF_NOT_IN_USE) &&
3463     + (if_outgoing->if_status != BATADV_IF_TO_BE_REMOVED))
3464     + continue;
3465     +
3466     + batadv_dbg(BATADV_DBG_BATMAN, bat_priv,
3467     + "neighbor/ifinfo purge: neighbor %pM, iface: %s\n",
3468     + neigh->addr, if_outgoing->net_dev->name);
3469     +
3470     + hlist_del_rcu(&neigh_ifinfo->list);
3471     + batadv_neigh_ifinfo_free_ref(neigh_ifinfo);
3472     + }
3473     +
3474     + spin_unlock_bh(&neigh->ifinfo_lock);
3475     +}
3476     +
3477     +/**
3478     * batadv_purge_orig_ifinfo - purge obsolete ifinfo entries from originator
3479     * @bat_priv: the bat priv with all the soft interface information
3480     * @orig_node: orig node which is to be checked
3481     @@ -795,6 +841,11 @@ batadv_purge_orig_neighbors(struct batadv_priv *bat_priv,
3482    
3483     hlist_del_rcu(&neigh_node->list);
3484     batadv_neigh_node_free_ref(neigh_node);
3485     + } else {
3486     + /* only necessary if not the whole neighbor is to be
3487     + * deleted, but some interface has been removed.
3488     + */
3489     + batadv_purge_neigh_ifinfo(bat_priv, neigh_node);
3490     }
3491     }
3492    
3493     @@ -852,7 +903,7 @@ static bool batadv_purge_orig_node(struct batadv_priv *bat_priv,
3494     {
3495     struct batadv_neigh_node *best_neigh_node;
3496     struct batadv_hard_iface *hard_iface;
3497     - bool changed;
3498     + bool changed_ifinfo, changed_neigh;
3499    
3500     if (batadv_has_timed_out(orig_node->last_seen,
3501     2 * BATADV_PURGE_TIMEOUT)) {
3502     @@ -862,10 +913,10 @@ static bool batadv_purge_orig_node(struct batadv_priv *bat_priv,
3503     jiffies_to_msecs(orig_node->last_seen));
3504     return true;
3505     }
3506     - changed = batadv_purge_orig_ifinfo(bat_priv, orig_node);
3507     - changed = changed || batadv_purge_orig_neighbors(bat_priv, orig_node);
3508     + changed_ifinfo = batadv_purge_orig_ifinfo(bat_priv, orig_node);
3509     + changed_neigh = batadv_purge_orig_neighbors(bat_priv, orig_node);
3510    
3511     - if (!changed)
3512     + if (!changed_ifinfo && !changed_neigh)
3513     return false;
3514    
3515     /* first for NULL ... */
3516     @@ -1023,7 +1074,8 @@ int batadv_orig_hardif_seq_print_text(struct seq_file *seq, void *offset)
3517     bat_priv->bat_algo_ops->bat_orig_print(bat_priv, seq, hard_iface);
3518    
3519     out:
3520     - batadv_hardif_free_ref(hard_iface);
3521     + if (hard_iface)
3522     + batadv_hardif_free_ref(hard_iface);
3523     return 0;
3524     }
3525    
3526     diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c
3527     index d0cca3c65f01..7985deaff52f 100644
3528     --- a/net/bridge/br_input.c
3529     +++ b/net/bridge/br_input.c
3530     @@ -73,7 +73,7 @@ int br_handle_frame_finish(struct sk_buff *skb)
3531     goto drop;
3532    
3533     if (!br_allowed_ingress(p->br, nbp_get_vlan_info(p), skb, &vid))
3534     - goto drop;
3535     + goto out;
3536    
3537     /* insert into forwarding database after filtering to avoid spoofing */
3538     br = p->br;
3539     diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
3540     index e74b6d530cb6..e8844d975b32 100644
3541     --- a/net/bridge/br_netlink.c
3542     +++ b/net/bridge/br_netlink.c
3543     @@ -445,6 +445,20 @@ static int br_validate(struct nlattr *tb[], struct nlattr *data[])
3544     return 0;
3545     }
3546    
3547     +static int br_dev_newlink(struct net *src_net, struct net_device *dev,
3548     + struct nlattr *tb[], struct nlattr *data[])
3549     +{
3550     + struct net_bridge *br = netdev_priv(dev);
3551     +
3552     + if (tb[IFLA_ADDRESS]) {
3553     + spin_lock_bh(&br->lock);
3554     + br_stp_change_bridge_id(br, nla_data(tb[IFLA_ADDRESS]));
3555     + spin_unlock_bh(&br->lock);
3556     + }
3557     +
3558     + return register_netdevice(dev);
3559     +}
3560     +
3561     static size_t br_get_link_af_size(const struct net_device *dev)
3562     {
3563     struct net_port_vlans *pv;
3564     @@ -473,6 +487,7 @@ struct rtnl_link_ops br_link_ops __read_mostly = {
3565     .priv_size = sizeof(struct net_bridge),
3566     .setup = br_dev_setup,
3567     .validate = br_validate,
3568     + .newlink = br_dev_newlink,
3569     .dellink = br_dev_delete,
3570     };
3571    
3572     diff --git a/net/bridge/br_vlan.c b/net/bridge/br_vlan.c
3573     index f23c74b3a953..ba7757b7737d 100644
3574     --- a/net/bridge/br_vlan.c
3575     +++ b/net/bridge/br_vlan.c
3576     @@ -170,7 +170,7 @@ bool br_allowed_ingress(struct net_bridge *br, struct net_port_vlans *v,
3577     * rejected.
3578     */
3579     if (!v)
3580     - return false;
3581     + goto drop;
3582    
3583     /* If vlan tx offload is disabled on bridge device and frame was
3584     * sent from vlan device on the bridge device, it does not have
3585     @@ -193,7 +193,7 @@ bool br_allowed_ingress(struct net_bridge *br, struct net_port_vlans *v,
3586     * vlan untagged or priority-tagged traffic belongs to.
3587     */
3588     if (pvid == VLAN_N_VID)
3589     - return false;
3590     + goto drop;
3591    
3592     /* PVID is set on this port. Any untagged or priority-tagged
3593     * ingress frame is considered to belong to this vlan.
3594     @@ -216,7 +216,8 @@ bool br_allowed_ingress(struct net_bridge *br, struct net_port_vlans *v,
3595     /* Frame had a valid vlan tag. See if vlan is allowed */
3596     if (test_bit(*vid, v->vlan_bitmap))
3597     return true;
3598     -
3599     +drop:
3600     + kfree_skb(skb);
3601     return false;
3602     }
3603    
3604     diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c
3605     index 0e474b13463b..1059ed3bc255 100644
3606     --- a/net/bridge/netfilter/ebtables.c
3607     +++ b/net/bridge/netfilter/ebtables.c
3608     @@ -1044,10 +1044,9 @@ static int do_replace_finish(struct net *net, struct ebt_replace *repl,
3609     if (repl->num_counters &&
3610     copy_to_user(repl->counters, counterstmp,
3611     repl->num_counters * sizeof(struct ebt_counter))) {
3612     - ret = -EFAULT;
3613     + /* Silent error, can't fail, new table is already in place */
3614     + net_warn_ratelimited("ebtables: counters copy to user failed while replacing table\n");
3615     }
3616     - else
3617     - ret = 0;
3618    
3619     /* decrease module count and free resources */
3620     EBT_ENTRY_ITERATE(table->entries, table->entries_size,
3621     diff --git a/net/core/dev.c b/net/core/dev.c
3622     index 45fa2f11f84d..fccc195e0fc8 100644
3623     --- a/net/core/dev.c
3624     +++ b/net/core/dev.c
3625     @@ -2289,7 +2289,7 @@ EXPORT_SYMBOL(skb_checksum_help);
3626     __be16 skb_network_protocol(struct sk_buff *skb, int *depth)
3627     {
3628     __be16 type = skb->protocol;
3629     - int vlan_depth = ETH_HLEN;
3630     + int vlan_depth = skb->mac_len;
3631    
3632     /* Tunnel gso handlers can set protocol to ethernet. */
3633     if (type == htons(ETH_P_TEB)) {
3634     @@ -3944,6 +3944,7 @@ static enum gro_result dev_gro_receive(struct napi_struct *napi, struct sk_buff
3635     }
3636     NAPI_GRO_CB(skb)->count = 1;
3637     NAPI_GRO_CB(skb)->age = jiffies;
3638     + NAPI_GRO_CB(skb)->last = skb;
3639     skb_shinfo(skb)->gso_size = skb_gro_len(skb);
3640     skb->next = napi->gro_list;
3641     napi->gro_list = skb;
3642     @@ -4050,6 +4051,7 @@ static void napi_reuse_skb(struct napi_struct *napi, struct sk_buff *skb)
3643     skb->vlan_tci = 0;
3644     skb->dev = napi->dev;
3645     skb->skb_iif = 0;
3646     + skb->truesize = SKB_TRUESIZE(skb_end_offset(skb));
3647    
3648     napi->skb = skb;
3649     }
3650     @@ -4605,6 +4607,32 @@ void *netdev_lower_get_next_private_rcu(struct net_device *dev,
3651     EXPORT_SYMBOL(netdev_lower_get_next_private_rcu);
3652    
3653     /**
3654     + * netdev_lower_get_next - Get the next device from the lower neighbour
3655     + * list
3656     + * @dev: device
3657     + * @iter: list_head ** of the current position
3658     + *
3659     + * Gets the next netdev_adjacent from the dev's lower neighbour
3660     + * list, starting from iter position. The caller must hold RTNL lock or
3661     + * its own locking that guarantees that the neighbour lower
3662     + * list will remain unchainged.
3663     + */
3664     +void *netdev_lower_get_next(struct net_device *dev, struct list_head **iter)
3665     +{
3666     + struct netdev_adjacent *lower;
3667     +
3668     + lower = list_entry((*iter)->next, struct netdev_adjacent, list);
3669     +
3670     + if (&lower->list == &dev->adj_list.lower)
3671     + return NULL;
3672     +
3673     + *iter = &lower->list;
3674     +
3675     + return lower->dev;
3676     +}
3677     +EXPORT_SYMBOL(netdev_lower_get_next);
3678     +
3679     +/**
3680     * netdev_lower_get_first_private_rcu - Get the first ->private from the
3681     * lower neighbour list, RCU
3682     * variant
3683     @@ -5054,6 +5082,30 @@ void *netdev_lower_dev_get_private(struct net_device *dev,
3684     }
3685     EXPORT_SYMBOL(netdev_lower_dev_get_private);
3686    
3687     +
3688     +int dev_get_nest_level(struct net_device *dev,
3689     + bool (*type_check)(struct net_device *dev))
3690     +{
3691     + struct net_device *lower = NULL;
3692     + struct list_head *iter;
3693     + int max_nest = -1;
3694     + int nest;
3695     +
3696     + ASSERT_RTNL();
3697     +
3698     + netdev_for_each_lower_dev(dev, lower, iter) {
3699     + nest = dev_get_nest_level(lower, type_check);
3700     + if (max_nest < nest)
3701     + max_nest = nest;
3702     + }
3703     +
3704     + if (type_check(dev))
3705     + max_nest++;
3706     +
3707     + return max_nest;
3708     +}
3709     +EXPORT_SYMBOL(dev_get_nest_level);
3710     +
3711     static void dev_change_rx_flags(struct net_device *dev, int flags)
3712     {
3713     const struct net_device_ops *ops = dev->netdev_ops;
3714     @@ -5523,7 +5575,7 @@ static int dev_new_index(struct net *net)
3715    
3716     /* Delayed registration/unregisteration */
3717     static LIST_HEAD(net_todo_list);
3718     -static DECLARE_WAIT_QUEUE_HEAD(netdev_unregistering_wq);
3719     +DECLARE_WAIT_QUEUE_HEAD(netdev_unregistering_wq);
3720    
3721     static void net_set_todo(struct net_device *dev)
3722     {
3723     diff --git a/net/core/filter.c b/net/core/filter.c
3724     index ad30d626a5bd..ebce437678fc 100644
3725     --- a/net/core/filter.c
3726     +++ b/net/core/filter.c
3727     @@ -355,6 +355,8 @@ load_b:
3728    
3729     if (skb_is_nonlinear(skb))
3730     return 0;
3731     + if (skb->len < sizeof(struct nlattr))
3732     + return 0;
3733     if (A > skb->len - sizeof(struct nlattr))
3734     return 0;
3735    
3736     @@ -371,11 +373,13 @@ load_b:
3737    
3738     if (skb_is_nonlinear(skb))
3739     return 0;
3740     + if (skb->len < sizeof(struct nlattr))
3741     + return 0;
3742     if (A > skb->len - sizeof(struct nlattr))
3743     return 0;
3744    
3745     nla = (struct nlattr *)&skb->data[A];
3746     - if (nla->nla_len > A - skb->len)
3747     + if (nla->nla_len > skb->len - A)
3748     return 0;
3749    
3750     nla = nla_find_nested(nla, X);
3751     diff --git a/net/core/neighbour.c b/net/core/neighbour.c
3752     index e16129019c66..7d95f69635c6 100644
3753     --- a/net/core/neighbour.c
3754     +++ b/net/core/neighbour.c
3755     @@ -1247,8 +1247,8 @@ void __neigh_set_probe_once(struct neighbour *neigh)
3756     neigh->updated = jiffies;
3757     if (!(neigh->nud_state & NUD_FAILED))
3758     return;
3759     - neigh->nud_state = NUD_PROBE;
3760     - atomic_set(&neigh->probes, NEIGH_VAR(neigh->parms, UCAST_PROBES));
3761     + neigh->nud_state = NUD_INCOMPLETE;
3762     + atomic_set(&neigh->probes, neigh_max_probes(neigh));
3763     neigh_add_timer(neigh,
3764     jiffies + NEIGH_VAR(neigh->parms, RETRANS_TIME));
3765     }
3766     diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
3767     index 81d3a9a08453..7c8ffd974961 100644
3768     --- a/net/core/net_namespace.c
3769     +++ b/net/core/net_namespace.c
3770     @@ -24,7 +24,7 @@
3771    
3772     static LIST_HEAD(pernet_list);
3773     static struct list_head *first_device = &pernet_list;
3774     -static DEFINE_MUTEX(net_mutex);
3775     +DEFINE_MUTEX(net_mutex);
3776    
3777     LIST_HEAD(net_namespace_list);
3778     EXPORT_SYMBOL_GPL(net_namespace_list);
3779     diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
3780     index 120eecc0f5a4..83b9d6ae5119 100644
3781     --- a/net/core/rtnetlink.c
3782     +++ b/net/core/rtnetlink.c
3783     @@ -353,15 +353,46 @@ void __rtnl_link_unregister(struct rtnl_link_ops *ops)
3784     }
3785     EXPORT_SYMBOL_GPL(__rtnl_link_unregister);
3786    
3787     +/* Return with the rtnl_lock held when there are no network
3788     + * devices unregistering in any network namespace.
3789     + */
3790     +static void rtnl_lock_unregistering_all(void)
3791     +{
3792     + struct net *net;
3793     + bool unregistering;
3794     + DEFINE_WAIT(wait);
3795     +
3796     + for (;;) {
3797     + prepare_to_wait(&netdev_unregistering_wq, &wait,
3798     + TASK_UNINTERRUPTIBLE);
3799     + unregistering = false;
3800     + rtnl_lock();
3801     + for_each_net(net) {
3802     + if (net->dev_unreg_count > 0) {
3803     + unregistering = true;
3804     + break;
3805     + }
3806     + }
3807     + if (!unregistering)
3808     + break;
3809     + __rtnl_unlock();
3810     + schedule();
3811     + }
3812     + finish_wait(&netdev_unregistering_wq, &wait);
3813     +}
3814     +
3815     /**
3816     * rtnl_link_unregister - Unregister rtnl_link_ops from rtnetlink.
3817     * @ops: struct rtnl_link_ops * to unregister
3818     */
3819     void rtnl_link_unregister(struct rtnl_link_ops *ops)
3820     {
3821     - rtnl_lock();
3822     + /* Close the race with cleanup_net() */
3823     + mutex_lock(&net_mutex);
3824     + rtnl_lock_unregistering_all();
3825     __rtnl_link_unregister(ops);
3826     rtnl_unlock();
3827     + mutex_unlock(&net_mutex);
3828     }
3829     EXPORT_SYMBOL_GPL(rtnl_link_unregister);
3830    
3831     @@ -774,7 +805,8 @@ static inline int rtnl_vfinfo_size(const struct net_device *dev,
3832     return 0;
3833     }
3834    
3835     -static size_t rtnl_port_size(const struct net_device *dev)
3836     +static size_t rtnl_port_size(const struct net_device *dev,
3837     + u32 ext_filter_mask)
3838     {
3839     size_t port_size = nla_total_size(4) /* PORT_VF */
3840     + nla_total_size(PORT_PROFILE_MAX) /* PORT_PROFILE */
3841     @@ -790,7 +822,8 @@ static size_t rtnl_port_size(const struct net_device *dev)
3842     size_t port_self_size = nla_total_size(sizeof(struct nlattr))
3843     + port_size;
3844    
3845     - if (!dev->netdev_ops->ndo_get_vf_port || !dev->dev.parent)
3846     + if (!dev->netdev_ops->ndo_get_vf_port || !dev->dev.parent ||
3847     + !(ext_filter_mask & RTEXT_FILTER_VF))
3848     return 0;
3849     if (dev_num_vf(dev->dev.parent))
3850     return port_self_size + vf_ports_size +
3851     @@ -825,7 +858,7 @@ static noinline size_t if_nlmsg_size(const struct net_device *dev,
3852     + nla_total_size(ext_filter_mask
3853     & RTEXT_FILTER_VF ? 4 : 0) /* IFLA_NUM_VF */
3854     + rtnl_vfinfo_size(dev, ext_filter_mask) /* IFLA_VFINFO_LIST */
3855     - + rtnl_port_size(dev) /* IFLA_VF_PORTS + IFLA_PORT_SELF */
3856     + + rtnl_port_size(dev, ext_filter_mask) /* IFLA_VF_PORTS + IFLA_PORT_SELF */
3857     + rtnl_link_get_size(dev) /* IFLA_LINKINFO */
3858     + rtnl_link_get_af_size(dev) /* IFLA_AF_SPEC */
3859     + nla_total_size(MAX_PHYS_PORT_ID_LEN); /* IFLA_PHYS_PORT_ID */
3860     @@ -887,11 +920,13 @@ static int rtnl_port_self_fill(struct sk_buff *skb, struct net_device *dev)
3861     return 0;
3862     }
3863    
3864     -static int rtnl_port_fill(struct sk_buff *skb, struct net_device *dev)
3865     +static int rtnl_port_fill(struct sk_buff *skb, struct net_device *dev,
3866     + u32 ext_filter_mask)
3867     {
3868     int err;
3869    
3870     - if (!dev->netdev_ops->ndo_get_vf_port || !dev->dev.parent)
3871     + if (!dev->netdev_ops->ndo_get_vf_port || !dev->dev.parent ||
3872     + !(ext_filter_mask & RTEXT_FILTER_VF))
3873     return 0;
3874    
3875     err = rtnl_port_self_fill(skb, dev);
3876     @@ -1076,7 +1111,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
3877     nla_nest_end(skb, vfinfo);
3878     }
3879    
3880     - if (rtnl_port_fill(skb, dev))
3881     + if (rtnl_port_fill(skb, dev, ext_filter_mask))
3882     goto nla_put_failure;
3883    
3884     if (dev->rtnl_link_ops || rtnl_have_link_slave_info(dev)) {
3885     @@ -1130,6 +1165,7 @@ static int rtnl_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
3886     struct hlist_head *head;
3887     struct nlattr *tb[IFLA_MAX+1];
3888     u32 ext_filter_mask = 0;
3889     + int err;
3890    
3891     s_h = cb->args[0];
3892     s_idx = cb->args[1];
3893     @@ -1150,11 +1186,17 @@ static int rtnl_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
3894     hlist_for_each_entry_rcu(dev, head, index_hlist) {
3895     if (idx < s_idx)
3896     goto cont;
3897     - if (rtnl_fill_ifinfo(skb, dev, RTM_NEWLINK,
3898     - NETLINK_CB(cb->skb).portid,
3899     - cb->nlh->nlmsg_seq, 0,
3900     - NLM_F_MULTI,
3901     - ext_filter_mask) <= 0)
3902     + err = rtnl_fill_ifinfo(skb, dev, RTM_NEWLINK,
3903     + NETLINK_CB(cb->skb).portid,
3904     + cb->nlh->nlmsg_seq, 0,
3905     + NLM_F_MULTI,
3906     + ext_filter_mask);
3907     + /* If we ran out of room on the first message,
3908     + * we're in trouble
3909     + */
3910     + WARN_ON((err == -EMSGSIZE) && (skb->len == 0));
3911     +
3912     + if (err <= 0)
3913     goto out;
3914    
3915     nl_dump_check_consistent(cb, nlmsg_hdr(skb));
3916     diff --git a/net/core/skbuff.c b/net/core/skbuff.c
3917     index 90b96a11b974..e5ae776ee9b4 100644
3918     --- a/net/core/skbuff.c
3919     +++ b/net/core/skbuff.c
3920     @@ -3076,7 +3076,7 @@ int skb_gro_receive(struct sk_buff **head, struct sk_buff *skb)
3921     if (unlikely(p->len + len >= 65536))
3922     return -E2BIG;
3923    
3924     - lp = NAPI_GRO_CB(p)->last ?: p;
3925     + lp = NAPI_GRO_CB(p)->last;
3926     pinfo = skb_shinfo(lp);
3927    
3928     if (headlen <= offset) {
3929     @@ -3192,7 +3192,7 @@ merge:
3930    
3931     __skb_pull(skb, offset);
3932    
3933     - if (!NAPI_GRO_CB(p)->last)
3934     + if (NAPI_GRO_CB(p)->last == p)
3935     skb_shinfo(p)->frag_list = skb;
3936     else
3937     NAPI_GRO_CB(p)->last->next = skb;
3938     @@ -3951,12 +3951,14 @@ EXPORT_SYMBOL_GPL(skb_scrub_packet);
3939     unsigned int skb_gso_transport_seglen(const struct sk_buff *skb)
3940     {
3941     const struct skb_shared_info *shinfo = skb_shinfo(skb);
3942     - unsigned int hdr_len;
3943    
3944     if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6)))
3945     - hdr_len = tcp_hdrlen(skb);
3946     - else
3947     - hdr_len = sizeof(struct udphdr);
3948     - return hdr_len + shinfo->gso_size;
3949     + return tcp_hdrlen(skb) + shinfo->gso_size;
3950     +
3951     + /* UFO sets gso_size to the size of the fragmentation
3952     + * payload, i.e. the size of the L4 (UDP) header is already
3953     + * accounted for.
3954     + */
3955     + return shinfo->gso_size;
3956     }
3957     EXPORT_SYMBOL_GPL(skb_gso_transport_seglen);
3958     diff --git a/net/core/sock_diag.c b/net/core/sock_diag.c
3959     index a0e9cf6379de..6a7fae228634 100644
3960     --- a/net/core/sock_diag.c
3961     +++ b/net/core/sock_diag.c
3962     @@ -49,7 +49,7 @@ int sock_diag_put_meminfo(struct sock *sk, struct sk_buff *skb, int attrtype)
3963     }
3964     EXPORT_SYMBOL_GPL(sock_diag_put_meminfo);
3965    
3966     -int sock_diag_put_filterinfo(struct user_namespace *user_ns, struct sock *sk,
3967     +int sock_diag_put_filterinfo(struct sock *sk,
3968     struct sk_buff *skb, int attrtype)
3969     {
3970     struct nlattr *attr;
3971     @@ -57,7 +57,7 @@ int sock_diag_put_filterinfo(struct user_namespace *user_ns, struct sock *sk,
3972     unsigned int len;
3973     int err = 0;
3974    
3975     - if (!ns_capable(user_ns, CAP_NET_ADMIN)) {
3976     + if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN)) {
3977     nla_reserve(skb, attrtype, 0);
3978     return 0;
3979     }
3980     diff --git a/net/core/utils.c b/net/core/utils.c
3981     index 2f737bf90b3f..eed34338736c 100644
3982     --- a/net/core/utils.c
3983     +++ b/net/core/utils.c
3984     @@ -348,8 +348,8 @@ static void __net_random_once_deferred(struct work_struct *w)
3985     {
3986     struct __net_random_once_work *work =
3987     container_of(w, struct __net_random_once_work, work);
3988     - if (!static_key_enabled(work->key))
3989     - static_key_slow_inc(work->key);
3990     + BUG_ON(!static_key_enabled(work->key));
3991     + static_key_slow_dec(work->key);
3992     kfree(work);
3993     }
3994    
3995     @@ -367,7 +367,7 @@ static void __net_random_once_disable_jump(struct static_key *key)
3996     }
3997    
3998     bool __net_get_random_once(void *buf, int nbytes, bool *done,
3999     - struct static_key *done_key)
4000     + struct static_key *once_key)
4001     {
4002     static DEFINE_SPINLOCK(lock);
4003     unsigned long flags;
4004     @@ -382,7 +382,7 @@ bool __net_get_random_once(void *buf, int nbytes, bool *done,
4005     *done = true;
4006     spin_unlock_irqrestore(&lock, flags);
4007    
4008     - __net_random_once_disable_jump(done_key);
4009     + __net_random_once_disable_jump(once_key);
4010    
4011     return true;
4012     }
4013     diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
4014     index b53f0bf84dca..9d43468722ed 100644
4015     --- a/net/ipv4/fib_semantics.c
4016     +++ b/net/ipv4/fib_semantics.c
4017     @@ -820,13 +820,13 @@ struct fib_info *fib_create_info(struct fib_config *cfg)
4018     fi = kzalloc(sizeof(*fi)+nhs*sizeof(struct fib_nh), GFP_KERNEL);
4019     if (fi == NULL)
4020     goto failure;
4021     + fib_info_cnt++;
4022     if (cfg->fc_mx) {
4023     fi->fib_metrics = kzalloc(sizeof(u32) * RTAX_MAX, GFP_KERNEL);
4024     if (!fi->fib_metrics)
4025     goto failure;
4026     } else
4027     fi->fib_metrics = (u32 *) dst_default_metrics;
4028     - fib_info_cnt++;
4029    
4030     fi->fib_net = hold_net(net);
4031     fi->fib_protocol = cfg->fc_protocol;
4032     diff --git a/net/ipv4/ip_forward.c b/net/ipv4/ip_forward.c
4033     index f3869c186d97..1c6bd4359cbd 100644
4034     --- a/net/ipv4/ip_forward.c
4035     +++ b/net/ipv4/ip_forward.c
4036     @@ -42,12 +42,12 @@
4037     static bool ip_may_fragment(const struct sk_buff *skb)
4038     {
4039     return unlikely((ip_hdr(skb)->frag_off & htons(IP_DF)) == 0) ||
4040     - !skb->local_df;
4041     + skb->local_df;
4042     }
4043    
4044     static bool ip_exceeds_mtu(const struct sk_buff *skb, unsigned int mtu)
4045     {
4046     - if (skb->len <= mtu || skb->local_df)
4047     + if (skb->len <= mtu)
4048     return false;
4049    
4050     if (skb_is_gso(skb) && skb_gso_network_seglen(skb) <= mtu)
4051     diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
4052     index ec4f762efda5..94213c891565 100644
4053     --- a/net/ipv4/ip_gre.c
4054     +++ b/net/ipv4/ip_gre.c
4055     @@ -463,6 +463,7 @@ static const struct net_device_ops ipgre_netdev_ops = {
4056     static void ipgre_tunnel_setup(struct net_device *dev)
4057     {
4058     dev->netdev_ops = &ipgre_netdev_ops;
4059     + dev->type = ARPHRD_IPGRE;
4060     ip_tunnel_setup(dev, ipgre_net_id);
4061     }
4062    
4063     @@ -501,7 +502,6 @@ static int ipgre_tunnel_init(struct net_device *dev)
4064     memcpy(dev->dev_addr, &iph->saddr, 4);
4065     memcpy(dev->broadcast, &iph->daddr, 4);
4066    
4067     - dev->type = ARPHRD_IPGRE;
4068     dev->flags = IFF_NOARP;
4069     dev->priv_flags &= ~IFF_XMIT_DST_RELEASE;
4070     dev->addr_len = 4;
4071     diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
4072     index a82a22d8f77f..0c3a5d17b4a9 100644
4073     --- a/net/ipv4/ip_tunnel.c
4074     +++ b/net/ipv4/ip_tunnel.c
4075     @@ -438,6 +438,8 @@ int ip_tunnel_rcv(struct ip_tunnel *tunnel, struct sk_buff *skb,
4076     tunnel->i_seqno = ntohl(tpi->seq) + 1;
4077     }
4078    
4079     + skb_reset_network_header(skb);
4080     +
4081     err = IP_ECN_decapsulate(iph, skb);
4082     if (unlikely(err)) {
4083     if (log_ecn_error)
4084     @@ -534,9 +536,10 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
4085     unsigned int max_headroom; /* The extra header space needed */
4086     __be32 dst;
4087     int err;
4088     - bool connected = true;
4089     + bool connected;
4090    
4091     inner_iph = (const struct iphdr *)skb_inner_network_header(skb);
4092     + connected = (tunnel->parms.iph.daddr != 0);
4093    
4094     dst = tnl_params->daddr;
4095     if (dst == 0) {
4096     @@ -872,6 +875,7 @@ int ip_tunnel_init_net(struct net *net, int ip_tnl_net_id,
4097     */
4098     if (!IS_ERR(itn->fb_tunnel_dev)) {
4099     itn->fb_tunnel_dev->features |= NETIF_F_NETNS_LOCAL;
4100     + itn->fb_tunnel_dev->mtu = ip_tunnel_bind_dev(itn->fb_tunnel_dev);
4101     ip_tunnel_add(itn, netdev_priv(itn->fb_tunnel_dev));
4102     }
4103     rtnl_unlock();
4104     diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c
4105     index 48eafae51769..e4a8f76c8995 100644
4106     --- a/net/ipv4/ip_vti.c
4107     +++ b/net/ipv4/ip_vti.c
4108     @@ -207,6 +207,7 @@ static const struct net_device_ops vti_netdev_ops = {
4109     static void vti_tunnel_setup(struct net_device *dev)
4110     {
4111     dev->netdev_ops = &vti_netdev_ops;
4112     + dev->type = ARPHRD_TUNNEL;
4113     ip_tunnel_setup(dev, vti_net_id);
4114     }
4115    
4116     @@ -218,7 +219,6 @@ static int vti_tunnel_init(struct net_device *dev)
4117     memcpy(dev->dev_addr, &iph->saddr, 4);
4118     memcpy(dev->broadcast, &iph->daddr, 4);
4119    
4120     - dev->type = ARPHRD_TUNNEL;
4121     dev->hard_header_len = LL_MAX_HEADER + sizeof(struct iphdr);
4122     dev->mtu = ETH_DATA_LEN;
4123     dev->flags = IFF_NOARP;
4124     diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c
4125     index 59da7cde0724..f95b6f93814b 100644
4126     --- a/net/ipv4/netfilter/arp_tables.c
4127     +++ b/net/ipv4/netfilter/arp_tables.c
4128     @@ -1044,8 +1044,10 @@ static int __do_replace(struct net *net, const char *name,
4129    
4130     xt_free_table_info(oldinfo);
4131     if (copy_to_user(counters_ptr, counters,
4132     - sizeof(struct xt_counters) * num_counters) != 0)
4133     - ret = -EFAULT;
4134     + sizeof(struct xt_counters) * num_counters) != 0) {
4135     + /* Silent error, can't fail, new table is already in place */
4136     + net_warn_ratelimited("arptables: counters copy to user failed while replacing table\n");
4137     + }
4138     vfree(counters);
4139     xt_table_unlock(t);
4140     return ret;
4141     diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c
4142     index 718dfbd30cbe..99e810f84671 100644
4143     --- a/net/ipv4/netfilter/ip_tables.c
4144     +++ b/net/ipv4/netfilter/ip_tables.c
4145     @@ -1231,8 +1231,10 @@ __do_replace(struct net *net, const char *name, unsigned int valid_hooks,
4146    
4147     xt_free_table_info(oldinfo);
4148     if (copy_to_user(counters_ptr, counters,
4149     - sizeof(struct xt_counters) * num_counters) != 0)
4150     - ret = -EFAULT;
4151     + sizeof(struct xt_counters) * num_counters) != 0) {
4152     + /* Silent error, can't fail, new table is already in place */
4153     + net_warn_ratelimited("iptables: counters copy to user failed while replacing table\n");
4154     + }
4155     vfree(counters);
4156     xt_table_unlock(t);
4157     return ret;
4158     diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
4159     index 2d11c094296e..e21934b06d4c 100644
4160     --- a/net/ipv4/ping.c
4161     +++ b/net/ipv4/ping.c
4162     @@ -252,26 +252,33 @@ int ping_init_sock(struct sock *sk)
4163     {
4164     struct net *net = sock_net(sk);
4165     kgid_t group = current_egid();
4166     - struct group_info *group_info = get_current_groups();
4167     - int i, j, count = group_info->ngroups;
4168     + struct group_info *group_info;
4169     + int i, j, count;
4170     kgid_t low, high;
4171     + int ret = 0;
4172    
4173     inet_get_ping_group_range_net(net, &low, &high);
4174     if (gid_lte(low, group) && gid_lte(group, high))
4175     return 0;
4176    
4177     + group_info = get_current_groups();
4178     + count = group_info->ngroups;
4179     for (i = 0; i < group_info->nblocks; i++) {
4180     int cp_count = min_t(int, NGROUPS_PER_BLOCK, count);
4181     for (j = 0; j < cp_count; j++) {
4182     kgid_t gid = group_info->blocks[i][j];
4183     if (gid_lte(low, gid) && gid_lte(gid, high))
4184     - return 0;
4185     + goto out_release_group;
4186     }
4187    
4188     count -= cp_count;
4189     }
4190    
4191     - return -EACCES;
4192     + ret = -EACCES;
4193     +
4194     +out_release_group:
4195     + put_group_info(group_info);
4196     + return ret;
4197     }
4198     EXPORT_SYMBOL_GPL(ping_init_sock);
4199    
4200     diff --git a/net/ipv4/route.c b/net/ipv4/route.c
4201     index 4c011ec69ed4..134437309b1e 100644
4202     --- a/net/ipv4/route.c
4203     +++ b/net/ipv4/route.c
4204     @@ -1526,7 +1526,7 @@ static int __mkroute_input(struct sk_buff *skb,
4205     struct in_device *out_dev;
4206     unsigned int flags = 0;
4207     bool do_cache;
4208     - u32 itag;
4209     + u32 itag = 0;
4210    
4211     /* get a working reference to the output device */
4212     out_dev = __in_dev_get_rcu(FIB_RES_DEV(*res));
4213     @@ -2364,7 +2364,7 @@ static int rt_fill_info(struct net *net, __be32 dst, __be32 src,
4214     }
4215     } else
4216     #endif
4217     - if (nla_put_u32(skb, RTA_IIF, rt->rt_iif))
4218     + if (nla_put_u32(skb, RTA_IIF, skb->dev->ifindex))
4219     goto nla_put_failure;
4220     }
4221    
4222     diff --git a/net/ipv4/tcp_cubic.c b/net/ipv4/tcp_cubic.c
4223     index 828e4c3ffbaf..121a9a22dc98 100644
4224     --- a/net/ipv4/tcp_cubic.c
4225     +++ b/net/ipv4/tcp_cubic.c
4226     @@ -409,7 +409,7 @@ static void bictcp_acked(struct sock *sk, u32 cnt, s32 rtt_us)
4227     ratio -= ca->delayed_ack >> ACK_RATIO_SHIFT;
4228     ratio += cnt;
4229    
4230     - ca->delayed_ack = min(ratio, ACK_RATIO_LIMIT);
4231     + ca->delayed_ack = clamp(ratio, 1U, ACK_RATIO_LIMIT);
4232     }
4233    
4234     /* Some calls are for duplicates without timetamps */
4235     diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
4236     index 075602fc6b6a..1e55f5eba185 100644
4237     --- a/net/ipv6/ip6_fib.c
4238     +++ b/net/ipv6/ip6_fib.c
4239     @@ -1418,7 +1418,7 @@ static int fib6_walk_continue(struct fib6_walker_t *w)
4240    
4241     if (w->skip) {
4242     w->skip--;
4243     - continue;
4244     + goto skip;
4245     }
4246    
4247     err = w->func(w);
4248     @@ -1428,6 +1428,7 @@ static int fib6_walk_continue(struct fib6_walker_t *w)
4249     w->count++;
4250     continue;
4251     }
4252     +skip:
4253     w->state = FWS_U;
4254     case FWS_U:
4255     if (fn == w->root)
4256     diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
4257     index f3ffb43f59c0..2465d18e8a26 100644
4258     --- a/net/ipv6/ip6_gre.c
4259     +++ b/net/ipv6/ip6_gre.c
4260     @@ -1566,6 +1566,15 @@ static int ip6gre_changelink(struct net_device *dev, struct nlattr *tb[],
4261     return 0;
4262     }
4263    
4264     +static void ip6gre_dellink(struct net_device *dev, struct list_head *head)
4265     +{
4266     + struct net *net = dev_net(dev);
4267     + struct ip6gre_net *ign = net_generic(net, ip6gre_net_id);
4268     +
4269     + if (dev != ign->fb_tunnel_dev)
4270     + unregister_netdevice_queue(dev, head);
4271     +}
4272     +
4273     static size_t ip6gre_get_size(const struct net_device *dev)
4274     {
4275     return
4276     @@ -1643,6 +1652,7 @@ static struct rtnl_link_ops ip6gre_link_ops __read_mostly = {
4277     .validate = ip6gre_tunnel_validate,
4278     .newlink = ip6gre_newlink,
4279     .changelink = ip6gre_changelink,
4280     + .dellink = ip6gre_dellink,
4281     .get_size = ip6gre_get_size,
4282     .fill_info = ip6gre_fill_info,
4283     };
4284     diff --git a/net/ipv6/ip6_offload.c b/net/ipv6/ip6_offload.c
4285     index 59f95affceb0..b2f091566f88 100644
4286     --- a/net/ipv6/ip6_offload.c
4287     +++ b/net/ipv6/ip6_offload.c
4288     @@ -196,7 +196,6 @@ static struct sk_buff **ipv6_gro_receive(struct sk_buff **head,
4289     unsigned int off;
4290     u16 flush = 1;
4291     int proto;
4292     - __wsum csum;
4293    
4294     off = skb_gro_offset(skb);
4295     hlen = off + sizeof(*iph);
4296     @@ -264,13 +263,10 @@ static struct sk_buff **ipv6_gro_receive(struct sk_buff **head,
4297    
4298     NAPI_GRO_CB(skb)->flush |= flush;
4299    
4300     - csum = skb->csum;
4301     - skb_postpull_rcsum(skb, iph, skb_network_header_len(skb));
4302     + skb_gro_postpull_rcsum(skb, iph, nlen);
4303    
4304     pp = ops->callbacks.gro_receive(head, skb);
4305    
4306     - skb->csum = csum;
4307     -
4308     out_unlock:
4309     rcu_read_unlock();
4310    
4311     diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
4312     index 3702d179506d..a62b610307ec 100644
4313     --- a/net/ipv6/ip6_output.c
4314     +++ b/net/ipv6/ip6_output.c
4315     @@ -344,12 +344,16 @@ static unsigned int ip6_dst_mtu_forward(const struct dst_entry *dst)
4316    
4317     static bool ip6_pkt_too_big(const struct sk_buff *skb, unsigned int mtu)
4318     {
4319     - if (skb->len <= mtu || skb->local_df)
4320     + if (skb->len <= mtu)
4321     return false;
4322    
4323     + /* ipv6 conntrack defrag sets max_frag_size + local_df */
4324     if (IP6CB(skb)->frag_max_size && IP6CB(skb)->frag_max_size > mtu)
4325     return true;
4326    
4327     + if (skb->local_df)
4328     + return false;
4329     +
4330     if (skb_is_gso(skb) && skb_gso_network_seglen(skb) <= mtu)
4331     return false;
4332    
4333     @@ -1225,7 +1229,7 @@ int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to,
4334     unsigned int maxnonfragsize, headersize;
4335    
4336     headersize = sizeof(struct ipv6hdr) +
4337     - (opt ? opt->tot_len : 0) +
4338     + (opt ? opt->opt_flen + opt->opt_nflen : 0) +
4339     (dst_allfrag(&rt->dst) ?
4340     sizeof(struct frag_hdr) : 0) +
4341     rt->rt6i_nfheader_len;
4342     diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
4343     index 5db8d310f9c0..0e51f68ab163 100644
4344     --- a/net/ipv6/ip6_tunnel.c
4345     +++ b/net/ipv6/ip6_tunnel.c
4346     @@ -1564,7 +1564,7 @@ static int ip6_tnl_validate(struct nlattr *tb[], struct nlattr *data[])
4347     {
4348     u8 proto;
4349    
4350     - if (!data)
4351     + if (!data || !data[IFLA_IPTUN_PROTO])
4352     return 0;
4353    
4354     proto = nla_get_u8(data[IFLA_IPTUN_PROTO]);
4355     diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c
4356     index 710238f58aa9..e080fbbbc0e5 100644
4357     --- a/net/ipv6/netfilter/ip6_tables.c
4358     +++ b/net/ipv6/netfilter/ip6_tables.c
4359     @@ -1241,8 +1241,10 @@ __do_replace(struct net *net, const char *name, unsigned int valid_hooks,
4360    
4361     xt_free_table_info(oldinfo);
4362     if (copy_to_user(counters_ptr, counters,
4363     - sizeof(struct xt_counters) * num_counters) != 0)
4364     - ret = -EFAULT;
4365     + sizeof(struct xt_counters) * num_counters) != 0) {
4366     + /* Silent error, can't fail, new table is already in place */
4367     + net_warn_ratelimited("ip6tables: counters copy to user failed while replacing table\n");
4368     + }
4369     vfree(counters);
4370     xt_table_unlock(t);
4371     return ret;
4372     diff --git a/net/ipv6/route.c b/net/ipv6/route.c
4373     index fba54a407bb2..7cc1102e298c 100644
4374     --- a/net/ipv6/route.c
4375     +++ b/net/ipv6/route.c
4376     @@ -1342,7 +1342,7 @@ static unsigned int ip6_mtu(const struct dst_entry *dst)
4377     unsigned int mtu = dst_metric_raw(dst, RTAX_MTU);
4378    
4379     if (mtu)
4380     - return mtu;
4381     + goto out;
4382    
4383     mtu = IPV6_MIN_MTU;
4384    
4385     @@ -1352,7 +1352,8 @@ static unsigned int ip6_mtu(const struct dst_entry *dst)
4386     mtu = idev->cnf.mtu6;
4387     rcu_read_unlock();
4388    
4389     - return mtu;
4390     +out:
4391     + return min_t(unsigned int, mtu, IP6_MAX_MTU);
4392     }
4393    
4394     static struct dst_entry *icmp6_dst_gc_list;
4395     diff --git a/net/ipv6/tcpv6_offload.c b/net/ipv6/tcpv6_offload.c
4396     index 0d78132ff18a..8517d3cd1aed 100644
4397     --- a/net/ipv6/tcpv6_offload.c
4398     +++ b/net/ipv6/tcpv6_offload.c
4399     @@ -42,7 +42,7 @@ static struct sk_buff **tcp6_gro_receive(struct sk_buff **head,
4400     if (NAPI_GRO_CB(skb)->flush)
4401     goto skip_csum;
4402    
4403     - wsum = skb->csum;
4404     + wsum = NAPI_GRO_CB(skb)->csum;
4405    
4406     switch (skb->ip_summed) {
4407     case CHECKSUM_NONE:
4408     diff --git a/net/l2tp/l2tp_ppp.c b/net/l2tp/l2tp_ppp.c
4409     index 5990919356a5..ec6606325cda 100644
4410     --- a/net/l2tp/l2tp_ppp.c
4411     +++ b/net/l2tp/l2tp_ppp.c
4412     @@ -756,9 +756,9 @@ static int pppol2tp_connect(struct socket *sock, struct sockaddr *uservaddr,
4413     session->deref = pppol2tp_session_sock_put;
4414    
4415     /* If PMTU discovery was enabled, use the MTU that was discovered */
4416     - dst = sk_dst_get(sk);
4417     + dst = sk_dst_get(tunnel->sock);
4418     if (dst != NULL) {
4419     - u32 pmtu = dst_mtu(__sk_dst_get(sk));
4420     + u32 pmtu = dst_mtu(__sk_dst_get(tunnel->sock));
4421     if (pmtu != 0)
4422     session->mtu = session->mru = pmtu -
4423     PPPOL2TP_HEADER_OVERHEAD;
4424     diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
4425     index adce01e8bb57..c68e5e0628df 100644
4426     --- a/net/netfilter/nf_tables_api.c
4427     +++ b/net/netfilter/nf_tables_api.c
4428     @@ -1934,7 +1934,8 @@ static const struct nft_set_ops *nft_select_set_ops(const struct nlattr * const
4429    
4430     static const struct nla_policy nft_set_policy[NFTA_SET_MAX + 1] = {
4431     [NFTA_SET_TABLE] = { .type = NLA_STRING },
4432     - [NFTA_SET_NAME] = { .type = NLA_STRING },
4433     + [NFTA_SET_NAME] = { .type = NLA_STRING,
4434     + .len = IFNAMSIZ - 1 },
4435     [NFTA_SET_FLAGS] = { .type = NLA_U32 },
4436     [NFTA_SET_KEY_TYPE] = { .type = NLA_U32 },
4437     [NFTA_SET_KEY_LEN] = { .type = NLA_U32 },
4438     diff --git a/net/netfilter/nf_tables_core.c b/net/netfilter/nf_tables_core.c
4439     index 90998a6ff8b9..804105391b9a 100644
4440     --- a/net/netfilter/nf_tables_core.c
4441     +++ b/net/netfilter/nf_tables_core.c
4442     @@ -25,9 +25,8 @@ static void nft_cmp_fast_eval(const struct nft_expr *expr,
4443     struct nft_data data[NFT_REG_MAX + 1])
4444     {
4445     const struct nft_cmp_fast_expr *priv = nft_expr_priv(expr);
4446     - u32 mask;
4447     + u32 mask = nft_cmp_fast_mask(priv->len);
4448    
4449     - mask = ~0U >> (sizeof(priv->data) * BITS_PER_BYTE - priv->len);
4450     if ((data[priv->sreg].data[0] & mask) == priv->data)
4451     return;
4452     data[NFT_REG_VERDICT].verdict = NFT_BREAK;
4453     diff --git a/net/netfilter/nft_cmp.c b/net/netfilter/nft_cmp.c
4454     index 954925db414d..e2b3f51c81f1 100644
4455     --- a/net/netfilter/nft_cmp.c
4456     +++ b/net/netfilter/nft_cmp.c
4457     @@ -128,7 +128,7 @@ static int nft_cmp_fast_init(const struct nft_ctx *ctx,
4458     BUG_ON(err < 0);
4459     desc.len *= BITS_PER_BYTE;
4460    
4461     - mask = ~0U >> (sizeof(priv->data) * BITS_PER_BYTE - desc.len);
4462     + mask = nft_cmp_fast_mask(desc.len);
4463     priv->data = data.data[0] & mask;
4464     priv->len = desc.len;
4465     return 0;
4466     diff --git a/net/packet/diag.c b/net/packet/diag.c
4467     index 533ce4ff108a..435ff99ba8c7 100644
4468     --- a/net/packet/diag.c
4469     +++ b/net/packet/diag.c
4470     @@ -172,7 +172,7 @@ static int sk_diag_fill(struct sock *sk, struct sk_buff *skb,
4471     goto out_nlmsg_trim;
4472    
4473     if ((req->pdiag_show & PACKET_SHOW_FILTER) &&
4474     - sock_diag_put_filterinfo(user_ns, sk, skb, PACKET_DIAG_FILTER))
4475     + sock_diag_put_filterinfo(sk, skb, PACKET_DIAG_FILTER))
4476     goto out_nlmsg_trim;
4477    
4478     return nlmsg_end(skb, nlh);
4479     diff --git a/net/sched/cls_tcindex.c b/net/sched/cls_tcindex.c
4480     index eed8404443d8..f435a88d899a 100644
4481     --- a/net/sched/cls_tcindex.c
4482     +++ b/net/sched/cls_tcindex.c
4483     @@ -188,6 +188,12 @@ static const struct nla_policy tcindex_policy[TCA_TCINDEX_MAX + 1] = {
4484     [TCA_TCINDEX_CLASSID] = { .type = NLA_U32 },
4485     };
4486    
4487     +static void tcindex_filter_result_init(struct tcindex_filter_result *r)
4488     +{
4489     + memset(r, 0, sizeof(*r));
4490     + tcf_exts_init(&r->exts, TCA_TCINDEX_ACT, TCA_TCINDEX_POLICE);
4491     +}
4492     +
4493     static int
4494     tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base,
4495     u32 handle, struct tcindex_data *p,
4496     @@ -207,15 +213,11 @@ tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base,
4497     return err;
4498    
4499     memcpy(&cp, p, sizeof(cp));
4500     - memset(&new_filter_result, 0, sizeof(new_filter_result));
4501     - tcf_exts_init(&new_filter_result.exts, TCA_TCINDEX_ACT, TCA_TCINDEX_POLICE);
4502     + tcindex_filter_result_init(&new_filter_result);
4503    
4504     + tcindex_filter_result_init(&cr);
4505     if (old_r)
4506     - memcpy(&cr, r, sizeof(cr));
4507     - else {
4508     - memset(&cr, 0, sizeof(cr));
4509     - tcf_exts_init(&cr.exts, TCA_TCINDEX_ACT, TCA_TCINDEX_POLICE);
4510     - }
4511     + cr.res = r->res;
4512    
4513     if (tb[TCA_TCINDEX_HASH])
4514     cp.hash = nla_get_u32(tb[TCA_TCINDEX_HASH]);
4515     @@ -267,9 +269,14 @@ tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base,
4516     err = -ENOMEM;
4517     if (!cp.perfect && !cp.h) {
4518     if (valid_perfect_hash(&cp)) {
4519     + int i;
4520     +
4521     cp.perfect = kcalloc(cp.hash, sizeof(*r), GFP_KERNEL);
4522     if (!cp.perfect)
4523     goto errout;
4524     + for (i = 0; i < cp.hash; i++)
4525     + tcf_exts_init(&cp.perfect[i].exts, TCA_TCINDEX_ACT,
4526     + TCA_TCINDEX_POLICE);
4527     balloc = 1;
4528     } else {
4529     cp.h = kcalloc(cp.hash, sizeof(f), GFP_KERNEL);
4530     @@ -295,14 +302,17 @@ tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base,
4531     tcf_bind_filter(tp, &cr.res, base);
4532     }
4533    
4534     - tcf_exts_change(tp, &cr.exts, &e);
4535     + if (old_r)
4536     + tcf_exts_change(tp, &r->exts, &e);
4537     + else
4538     + tcf_exts_change(tp, &cr.exts, &e);
4539    
4540     tcf_tree_lock(tp);
4541     if (old_r && old_r != r)
4542     - memset(old_r, 0, sizeof(*old_r));
4543     + tcindex_filter_result_init(old_r);
4544    
4545     memcpy(p, &cp, sizeof(cp));
4546     - memcpy(r, &cr, sizeof(cr));
4547     + r->res = cr.res;
4548    
4549     if (r == &new_filter_result) {
4550     struct tcindex_filter **fp;
4551     diff --git a/net/sched/sch_hhf.c b/net/sched/sch_hhf.c
4552     index 647680b1c625..039977830783 100644
4553     --- a/net/sched/sch_hhf.c
4554     +++ b/net/sched/sch_hhf.c
4555     @@ -553,11 +553,6 @@ static int hhf_change(struct Qdisc *sch, struct nlattr *opt)
4556     if (err < 0)
4557     return err;
4558    
4559     - sch_tree_lock(sch);
4560     -
4561     - if (tb[TCA_HHF_BACKLOG_LIMIT])
4562     - sch->limit = nla_get_u32(tb[TCA_HHF_BACKLOG_LIMIT]);
4563     -
4564     if (tb[TCA_HHF_QUANTUM])
4565     new_quantum = nla_get_u32(tb[TCA_HHF_QUANTUM]);
4566    
4567     @@ -567,6 +562,12 @@ static int hhf_change(struct Qdisc *sch, struct nlattr *opt)
4568     non_hh_quantum = (u64)new_quantum * new_hhf_non_hh_weight;
4569     if (non_hh_quantum > INT_MAX)
4570     return -EINVAL;
4571     +
4572     + sch_tree_lock(sch);
4573     +
4574     + if (tb[TCA_HHF_BACKLOG_LIMIT])
4575     + sch->limit = nla_get_u32(tb[TCA_HHF_BACKLOG_LIMIT]);
4576     +
4577     q->quantum = new_quantum;
4578     q->hhf_non_hh_weight = new_hhf_non_hh_weight;
4579    
4580     diff --git a/net/sctp/associola.c b/net/sctp/associola.c
4581     index ee13d28d39d1..878e17aafbe5 100644
4582     --- a/net/sctp/associola.c
4583     +++ b/net/sctp/associola.c
4584     @@ -1396,35 +1396,44 @@ static inline bool sctp_peer_needs_update(struct sctp_association *asoc)
4585     return false;
4586     }
4587    
4588     -/* Update asoc's rwnd for the approximated state in the buffer,
4589     - * and check whether SACK needs to be sent.
4590     - */
4591     -void sctp_assoc_rwnd_update(struct sctp_association *asoc, bool update_peer)
4592     +/* Increase asoc's rwnd by len and send any window update SACK if needed. */
4593     +void sctp_assoc_rwnd_increase(struct sctp_association *asoc, unsigned int len)
4594     {
4595     - int rx_count;
4596     struct sctp_chunk *sack;
4597     struct timer_list *timer;
4598    
4599     - if (asoc->ep->rcvbuf_policy)
4600     - rx_count = atomic_read(&asoc->rmem_alloc);
4601     - else
4602     - rx_count = atomic_read(&asoc->base.sk->sk_rmem_alloc);
4603     + if (asoc->rwnd_over) {
4604     + if (asoc->rwnd_over >= len) {
4605     + asoc->rwnd_over -= len;
4606     + } else {
4607     + asoc->rwnd += (len - asoc->rwnd_over);
4608     + asoc->rwnd_over = 0;
4609     + }
4610     + } else {
4611     + asoc->rwnd += len;
4612     + }
4613    
4614     - if ((asoc->base.sk->sk_rcvbuf - rx_count) > 0)
4615     - asoc->rwnd = (asoc->base.sk->sk_rcvbuf - rx_count) >> 1;
4616     - else
4617     - asoc->rwnd = 0;
4618     + /* If we had window pressure, start recovering it
4619     + * once our rwnd had reached the accumulated pressure
4620     + * threshold. The idea is to recover slowly, but up
4621     + * to the initial advertised window.
4622     + */
4623     + if (asoc->rwnd_press && asoc->rwnd >= asoc->rwnd_press) {
4624     + int change = min(asoc->pathmtu, asoc->rwnd_press);
4625     + asoc->rwnd += change;
4626     + asoc->rwnd_press -= change;
4627     + }
4628    
4629     - pr_debug("%s: asoc:%p rwnd=%u, rx_count=%d, sk_rcvbuf=%d\n",
4630     - __func__, asoc, asoc->rwnd, rx_count,
4631     - asoc->base.sk->sk_rcvbuf);
4632     + pr_debug("%s: asoc:%p rwnd increased by %d to (%u, %u) - %u\n",
4633     + __func__, asoc, len, asoc->rwnd, asoc->rwnd_over,
4634     + asoc->a_rwnd);
4635    
4636     /* Send a window update SACK if the rwnd has increased by at least the
4637     * minimum of the association's PMTU and half of the receive buffer.
4638     * The algorithm used is similar to the one described in
4639     * Section 4.2.3.3 of RFC 1122.
4640     */
4641     - if (update_peer && sctp_peer_needs_update(asoc)) {
4642     + if (sctp_peer_needs_update(asoc)) {
4643     asoc->a_rwnd = asoc->rwnd;
4644    
4645     pr_debug("%s: sending window update SACK- asoc:%p rwnd:%u "
4646     @@ -1446,6 +1455,45 @@ void sctp_assoc_rwnd_update(struct sctp_association *asoc, bool update_peer)
4647     }
4648     }
4649    
4650     +/* Decrease asoc's rwnd by len. */
4651     +void sctp_assoc_rwnd_decrease(struct sctp_association *asoc, unsigned int len)
4652     +{
4653     + int rx_count;
4654     + int over = 0;
4655     +
4656     + if (unlikely(!asoc->rwnd || asoc->rwnd_over))
4657     + pr_debug("%s: association:%p has asoc->rwnd:%u, "
4658     + "asoc->rwnd_over:%u!\n", __func__, asoc,
4659     + asoc->rwnd, asoc->rwnd_over);
4660     +
4661     + if (asoc->ep->rcvbuf_policy)
4662     + rx_count = atomic_read(&asoc->rmem_alloc);
4663     + else
4664     + rx_count = atomic_read(&asoc->base.sk->sk_rmem_alloc);
4665     +
4666     + /* If we've reached or overflowed our receive buffer, announce
4667     + * a 0 rwnd if rwnd would still be positive. Store the
4668     + * the potential pressure overflow so that the window can be restored
4669     + * back to original value.
4670     + */
4671     + if (rx_count >= asoc->base.sk->sk_rcvbuf)
4672     + over = 1;
4673     +
4674     + if (asoc->rwnd >= len) {
4675     + asoc->rwnd -= len;
4676     + if (over) {
4677     + asoc->rwnd_press += asoc->rwnd;
4678     + asoc->rwnd = 0;
4679     + }
4680     + } else {
4681     + asoc->rwnd_over = len - asoc->rwnd;
4682     + asoc->rwnd = 0;
4683     + }
4684     +
4685     + pr_debug("%s: asoc:%p rwnd decreased by %d to (%u, %u, %u)\n",
4686     + __func__, asoc, len, asoc->rwnd, asoc->rwnd_over,
4687     + asoc->rwnd_press);
4688     +}
4689    
4690     /* Build the bind address list for the association based on info from the
4691     * local endpoint and the remote peer.
4692     diff --git a/net/sctp/auth.c b/net/sctp/auth.c
4693     index 683c7d1b1306..0e8529113dc5 100644
4694     --- a/net/sctp/auth.c
4695     +++ b/net/sctp/auth.c
4696     @@ -386,14 +386,13 @@ nomem:
4697     */
4698     int sctp_auth_asoc_init_active_key(struct sctp_association *asoc, gfp_t gfp)
4699     {
4700     - struct net *net = sock_net(asoc->base.sk);
4701     struct sctp_auth_bytes *secret;
4702     struct sctp_shared_key *ep_key;
4703    
4704     /* If we don't support AUTH, or peer is not capable
4705     * we don't need to do anything.
4706     */
4707     - if (!net->sctp.auth_enable || !asoc->peer.auth_capable)
4708     + if (!asoc->ep->auth_enable || !asoc->peer.auth_capable)
4709     return 0;
4710    
4711     /* If the key_id is non-zero and we couldn't find an
4712     @@ -440,16 +439,16 @@ struct sctp_shared_key *sctp_auth_get_shkey(
4713     */
4714     int sctp_auth_init_hmacs(struct sctp_endpoint *ep, gfp_t gfp)
4715     {
4716     - struct net *net = sock_net(ep->base.sk);
4717     struct crypto_hash *tfm = NULL;
4718     __u16 id;
4719    
4720     - /* if the transforms are already allocted, we are done */
4721     - if (!net->sctp.auth_enable) {
4722     + /* If AUTH extension is disabled, we are done */
4723     + if (!ep->auth_enable) {
4724     ep->auth_hmacs = NULL;
4725     return 0;
4726     }
4727    
4728     + /* If the transforms are already allocated, we are done */
4729     if (ep->auth_hmacs)
4730     return 0;
4731    
4732     @@ -665,12 +664,10 @@ static int __sctp_auth_cid(sctp_cid_t chunk, struct sctp_chunks_param *param)
4733     /* Check if peer requested that this chunk is authenticated */
4734     int sctp_auth_send_cid(sctp_cid_t chunk, const struct sctp_association *asoc)
4735     {
4736     - struct net *net;
4737     if (!asoc)
4738     return 0;
4739    
4740     - net = sock_net(asoc->base.sk);
4741     - if (!net->sctp.auth_enable || !asoc->peer.auth_capable)
4742     + if (!asoc->ep->auth_enable || !asoc->peer.auth_capable)
4743     return 0;
4744    
4745     return __sctp_auth_cid(chunk, asoc->peer.peer_chunks);
4746     @@ -679,12 +676,10 @@ int sctp_auth_send_cid(sctp_cid_t chunk, const struct sctp_association *asoc)
4747     /* Check if we requested that peer authenticate this chunk. */
4748     int sctp_auth_recv_cid(sctp_cid_t chunk, const struct sctp_association *asoc)
4749     {
4750     - struct net *net;
4751     if (!asoc)
4752     return 0;
4753    
4754     - net = sock_net(asoc->base.sk);
4755     - if (!net->sctp.auth_enable)
4756     + if (!asoc->ep->auth_enable)
4757     return 0;
4758    
4759     return __sctp_auth_cid(chunk,
4760     diff --git a/net/sctp/endpointola.c b/net/sctp/endpointola.c
4761     index 8e5fdea05216..3d9f429858dc 100644
4762     --- a/net/sctp/endpointola.c
4763     +++ b/net/sctp/endpointola.c
4764     @@ -68,7 +68,8 @@ static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep,
4765     if (!ep->digest)
4766     return NULL;
4767    
4768     - if (net->sctp.auth_enable) {
4769     + ep->auth_enable = net->sctp.auth_enable;
4770     + if (ep->auth_enable) {
4771     /* Allocate space for HMACS and CHUNKS authentication
4772     * variables. There are arrays that we encode directly
4773     * into parameters to make the rest of the operations easier.
4774     diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c
4775     index 4e1d0fcb028e..a62a215dd22e 100644
4776     --- a/net/sctp/protocol.c
4777     +++ b/net/sctp/protocol.c
4778     @@ -491,8 +491,13 @@ static void sctp_v4_get_dst(struct sctp_transport *t, union sctp_addr *saddr,
4779     continue;
4780     if ((laddr->state == SCTP_ADDR_SRC) &&
4781     (AF_INET == laddr->a.sa.sa_family)) {
4782     - fl4->saddr = laddr->a.v4.sin_addr.s_addr;
4783     fl4->fl4_sport = laddr->a.v4.sin_port;
4784     + flowi4_update_output(fl4,
4785     + asoc->base.sk->sk_bound_dev_if,
4786     + RT_CONN_FLAGS(asoc->base.sk),
4787     + daddr->v4.sin_addr.s_addr,
4788     + laddr->a.v4.sin_addr.s_addr);
4789     +
4790     rt = ip_route_output_key(sock_net(sk), fl4);
4791     if (!IS_ERR(rt)) {
4792     dst = &rt->dst;
4793     diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c
4794     index 3a1767ef3201..fee5552ddf92 100644
4795     --- a/net/sctp/sm_make_chunk.c
4796     +++ b/net/sctp/sm_make_chunk.c
4797     @@ -219,6 +219,7 @@ struct sctp_chunk *sctp_make_init(const struct sctp_association *asoc,
4798     gfp_t gfp, int vparam_len)
4799     {
4800     struct net *net = sock_net(asoc->base.sk);
4801     + struct sctp_endpoint *ep = asoc->ep;
4802     sctp_inithdr_t init;
4803     union sctp_params addrs;
4804     size_t chunksize;
4805     @@ -278,7 +279,7 @@ struct sctp_chunk *sctp_make_init(const struct sctp_association *asoc,
4806     chunksize += vparam_len;
4807    
4808     /* Account for AUTH related parameters */
4809     - if (net->sctp.auth_enable) {
4810     + if (ep->auth_enable) {
4811     /* Add random parameter length*/
4812     chunksize += sizeof(asoc->c.auth_random);
4813    
4814     @@ -363,7 +364,7 @@ struct sctp_chunk *sctp_make_init(const struct sctp_association *asoc,
4815     }
4816    
4817     /* Add SCTP-AUTH chunks to the parameter list */
4818     - if (net->sctp.auth_enable) {
4819     + if (ep->auth_enable) {
4820     sctp_addto_chunk(retval, sizeof(asoc->c.auth_random),
4821     asoc->c.auth_random);
4822     if (auth_hmacs)
4823     @@ -2010,7 +2011,7 @@ static void sctp_process_ext_param(struct sctp_association *asoc,
4824     /* if the peer reports AUTH, assume that he
4825     * supports AUTH.
4826     */
4827     - if (net->sctp.auth_enable)
4828     + if (asoc->ep->auth_enable)
4829     asoc->peer.auth_capable = 1;
4830     break;
4831     case SCTP_CID_ASCONF:
4832     @@ -2102,6 +2103,7 @@ static sctp_ierror_t sctp_process_unk_param(const struct sctp_association *asoc,
4833     * SCTP_IERROR_NO_ERROR - continue with the chunk
4834     */
4835     static sctp_ierror_t sctp_verify_param(struct net *net,
4836     + const struct sctp_endpoint *ep,
4837     const struct sctp_association *asoc,
4838     union sctp_params param,
4839     sctp_cid_t cid,
4840     @@ -2152,7 +2154,7 @@ static sctp_ierror_t sctp_verify_param(struct net *net,
4841     goto fallthrough;
4842    
4843     case SCTP_PARAM_RANDOM:
4844     - if (!net->sctp.auth_enable)
4845     + if (!ep->auth_enable)
4846     goto fallthrough;
4847    
4848     /* SCTP-AUTH: Secion 6.1
4849     @@ -2169,7 +2171,7 @@ static sctp_ierror_t sctp_verify_param(struct net *net,
4850     break;
4851    
4852     case SCTP_PARAM_CHUNKS:
4853     - if (!net->sctp.auth_enable)
4854     + if (!ep->auth_enable)
4855     goto fallthrough;
4856    
4857     /* SCTP-AUTH: Section 3.2
4858     @@ -2185,7 +2187,7 @@ static sctp_ierror_t sctp_verify_param(struct net *net,
4859     break;
4860    
4861     case SCTP_PARAM_HMAC_ALGO:
4862     - if (!net->sctp.auth_enable)
4863     + if (!ep->auth_enable)
4864     goto fallthrough;
4865    
4866     hmacs = (struct sctp_hmac_algo_param *)param.p;
4867     @@ -2220,10 +2222,9 @@ fallthrough:
4868     }
4869    
4870     /* Verify the INIT packet before we process it. */
4871     -int sctp_verify_init(struct net *net, const struct sctp_association *asoc,
4872     - sctp_cid_t cid,
4873     - sctp_init_chunk_t *peer_init,
4874     - struct sctp_chunk *chunk,
4875     +int sctp_verify_init(struct net *net, const struct sctp_endpoint *ep,
4876     + const struct sctp_association *asoc, sctp_cid_t cid,
4877     + sctp_init_chunk_t *peer_init, struct sctp_chunk *chunk,
4878     struct sctp_chunk **errp)
4879     {
4880     union sctp_params param;
4881     @@ -2264,8 +2265,8 @@ int sctp_verify_init(struct net *net, const struct sctp_association *asoc,
4882    
4883     /* Verify all the variable length parameters */
4884     sctp_walk_params(param, peer_init, init_hdr.params) {
4885     -
4886     - result = sctp_verify_param(net, asoc, param, cid, chunk, errp);
4887     + result = sctp_verify_param(net, ep, asoc, param, cid,
4888     + chunk, errp);
4889     switch (result) {
4890     case SCTP_IERROR_ABORT:
4891     case SCTP_IERROR_NOMEM:
4892     @@ -2497,6 +2498,7 @@ static int sctp_process_param(struct sctp_association *asoc,
4893     struct sctp_af *af;
4894     union sctp_addr_param *addr_param;
4895     struct sctp_transport *t;
4896     + struct sctp_endpoint *ep = asoc->ep;
4897    
4898     /* We maintain all INIT parameters in network byte order all the
4899     * time. This allows us to not worry about whether the parameters
4900     @@ -2636,7 +2638,7 @@ do_addr_param:
4901     goto fall_through;
4902    
4903     case SCTP_PARAM_RANDOM:
4904     - if (!net->sctp.auth_enable)
4905     + if (!ep->auth_enable)
4906     goto fall_through;
4907    
4908     /* Save peer's random parameter */
4909     @@ -2649,7 +2651,7 @@ do_addr_param:
4910     break;
4911    
4912     case SCTP_PARAM_HMAC_ALGO:
4913     - if (!net->sctp.auth_enable)
4914     + if (!ep->auth_enable)
4915     goto fall_through;
4916    
4917     /* Save peer's HMAC list */
4918     @@ -2665,7 +2667,7 @@ do_addr_param:
4919     break;
4920    
4921     case SCTP_PARAM_CHUNKS:
4922     - if (!net->sctp.auth_enable)
4923     + if (!ep->auth_enable)
4924     goto fall_through;
4925    
4926     asoc->peer.peer_chunks = kmemdup(param.p,
4927     diff --git a/net/sctp/sm_sideeffect.c b/net/sctp/sm_sideeffect.c
4928     index 5d6883ff00c3..fef2acdf4a2e 100644
4929     --- a/net/sctp/sm_sideeffect.c
4930     +++ b/net/sctp/sm_sideeffect.c
4931     @@ -496,11 +496,10 @@ static void sctp_do_8_2_transport_strike(sctp_cmd_seq_t *commands,
4932    
4933     /* If the transport error count is greater than the pf_retrans
4934     * threshold, and less than pathmaxrtx, and if the current state
4935     - * is not SCTP_UNCONFIRMED, then mark this transport as Partially
4936     - * Failed, see SCTP Quick Failover Draft, section 5.1
4937     + * is SCTP_ACTIVE, then mark this transport as Partially Failed,
4938     + * see SCTP Quick Failover Draft, section 5.1
4939     */
4940     - if ((transport->state != SCTP_PF) &&
4941     - (transport->state != SCTP_UNCONFIRMED) &&
4942     + if ((transport->state == SCTP_ACTIVE) &&
4943     (asoc->pf_retrans < transport->pathmaxrxt) &&
4944     (transport->error_count > asoc->pf_retrans)) {
4945    
4946     diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c
4947     index 01e002430c85..5170a1ff95a1 100644
4948     --- a/net/sctp/sm_statefuns.c
4949     +++ b/net/sctp/sm_statefuns.c
4950     @@ -357,7 +357,7 @@ sctp_disposition_t sctp_sf_do_5_1B_init(struct net *net,
4951    
4952     /* Verify the INIT chunk before processing it. */
4953     err_chunk = NULL;
4954     - if (!sctp_verify_init(net, asoc, chunk->chunk_hdr->type,
4955     + if (!sctp_verify_init(net, ep, asoc, chunk->chunk_hdr->type,
4956     (sctp_init_chunk_t *)chunk->chunk_hdr, chunk,
4957     &err_chunk)) {
4958     /* This chunk contains fatal error. It is to be discarded.
4959     @@ -524,7 +524,7 @@ sctp_disposition_t sctp_sf_do_5_1C_ack(struct net *net,
4960    
4961     /* Verify the INIT chunk before processing it. */
4962     err_chunk = NULL;
4963     - if (!sctp_verify_init(net, asoc, chunk->chunk_hdr->type,
4964     + if (!sctp_verify_init(net, ep, asoc, chunk->chunk_hdr->type,
4965     (sctp_init_chunk_t *)chunk->chunk_hdr, chunk,
4966     &err_chunk)) {
4967    
4968     @@ -1430,7 +1430,7 @@ static sctp_disposition_t sctp_sf_do_unexpected_init(
4969    
4970     /* Verify the INIT chunk before processing it. */
4971     err_chunk = NULL;
4972     - if (!sctp_verify_init(net, asoc, chunk->chunk_hdr->type,
4973     + if (!sctp_verify_init(net, ep, asoc, chunk->chunk_hdr->type,
4974     (sctp_init_chunk_t *)chunk->chunk_hdr, chunk,
4975     &err_chunk)) {
4976     /* This chunk contains fatal error. It is to be discarded.
4977     @@ -6178,7 +6178,7 @@ static int sctp_eat_data(const struct sctp_association *asoc,
4978     * PMTU. In cases, such as loopback, this might be a rather
4979     * large spill over.
4980     */
4981     - if ((!chunk->data_accepted) && (!asoc->rwnd ||
4982     + if ((!chunk->data_accepted) && (!asoc->rwnd || asoc->rwnd_over ||
4983     (datalen > asoc->rwnd + asoc->frag_point))) {
4984    
4985     /* If this is the next TSN, consider reneging to make
4986     diff --git a/net/sctp/socket.c b/net/sctp/socket.c
4987     index 981aaf8b6ace..604a6acdf92e 100644
4988     --- a/net/sctp/socket.c
4989     +++ b/net/sctp/socket.c
4990     @@ -2115,6 +2115,12 @@ static int sctp_recvmsg(struct kiocb *iocb, struct sock *sk,
4991     sctp_skb_pull(skb, copied);
4992     skb_queue_head(&sk->sk_receive_queue, skb);
4993    
4994     + /* When only partial message is copied to the user, increase
4995     + * rwnd by that amount. If all the data in the skb is read,
4996     + * rwnd is updated when the event is freed.
4997     + */
4998     + if (!sctp_ulpevent_is_notification(event))
4999     + sctp_assoc_rwnd_increase(event->asoc, copied);
5000     goto out;
5001     } else if ((event->msg_flags & MSG_NOTIFICATION) ||
5002     (event->msg_flags & MSG_EOR))
5003     @@ -3315,10 +3321,10 @@ static int sctp_setsockopt_auth_chunk(struct sock *sk,
5004     char __user *optval,
5005     unsigned int optlen)
5006     {
5007     - struct net *net = sock_net(sk);
5008     + struct sctp_endpoint *ep = sctp_sk(sk)->ep;
5009     struct sctp_authchunk val;
5010    
5011     - if (!net->sctp.auth_enable)
5012     + if (!ep->auth_enable)
5013     return -EACCES;
5014    
5015     if (optlen != sizeof(struct sctp_authchunk))
5016     @@ -3335,7 +3341,7 @@ static int sctp_setsockopt_auth_chunk(struct sock *sk,
5017     }
5018    
5019     /* add this chunk id to the endpoint */
5020     - return sctp_auth_ep_add_chunkid(sctp_sk(sk)->ep, val.sauth_chunk);
5021     + return sctp_auth_ep_add_chunkid(ep, val.sauth_chunk);
5022     }
5023    
5024     /*
5025     @@ -3348,12 +3354,12 @@ static int sctp_setsockopt_hmac_ident(struct sock *sk,
5026     char __user *optval,
5027     unsigned int optlen)
5028     {
5029     - struct net *net = sock_net(sk);
5030     + struct sctp_endpoint *ep = sctp_sk(sk)->ep;
5031     struct sctp_hmacalgo *hmacs;
5032     u32 idents;
5033     int err;
5034    
5035     - if (!net->sctp.auth_enable)
5036     + if (!ep->auth_enable)
5037     return -EACCES;
5038    
5039     if (optlen < sizeof(struct sctp_hmacalgo))
5040     @@ -3370,7 +3376,7 @@ static int sctp_setsockopt_hmac_ident(struct sock *sk,
5041     goto out;
5042     }
5043    
5044     - err = sctp_auth_ep_set_hmacs(sctp_sk(sk)->ep, hmacs);
5045     + err = sctp_auth_ep_set_hmacs(ep, hmacs);
5046     out:
5047     kfree(hmacs);
5048     return err;
5049     @@ -3386,12 +3392,12 @@ static int sctp_setsockopt_auth_key(struct sock *sk,
5050     char __user *optval,
5051     unsigned int optlen)
5052     {
5053     - struct net *net = sock_net(sk);
5054     + struct sctp_endpoint *ep = sctp_sk(sk)->ep;
5055     struct sctp_authkey *authkey;
5056     struct sctp_association *asoc;
5057     int ret;
5058    
5059     - if (!net->sctp.auth_enable)
5060     + if (!ep->auth_enable)
5061     return -EACCES;
5062    
5063     if (optlen <= sizeof(struct sctp_authkey))
5064     @@ -3412,7 +3418,7 @@ static int sctp_setsockopt_auth_key(struct sock *sk,
5065     goto out;
5066     }
5067    
5068     - ret = sctp_auth_set_key(sctp_sk(sk)->ep, asoc, authkey);
5069     + ret = sctp_auth_set_key(ep, asoc, authkey);
5070     out:
5071     kzfree(authkey);
5072     return ret;
5073     @@ -3428,11 +3434,11 @@ static int sctp_setsockopt_active_key(struct sock *sk,
5074     char __user *optval,
5075     unsigned int optlen)
5076     {
5077     - struct net *net = sock_net(sk);
5078     + struct sctp_endpoint *ep = sctp_sk(sk)->ep;
5079     struct sctp_authkeyid val;
5080     struct sctp_association *asoc;
5081    
5082     - if (!net->sctp.auth_enable)
5083     + if (!ep->auth_enable)
5084     return -EACCES;
5085    
5086     if (optlen != sizeof(struct sctp_authkeyid))
5087     @@ -3444,8 +3450,7 @@ static int sctp_setsockopt_active_key(struct sock *sk,
5088     if (!asoc && val.scact_assoc_id && sctp_style(sk, UDP))
5089     return -EINVAL;
5090    
5091     - return sctp_auth_set_active_key(sctp_sk(sk)->ep, asoc,
5092     - val.scact_keynumber);
5093     + return sctp_auth_set_active_key(ep, asoc, val.scact_keynumber);
5094     }
5095    
5096     /*
5097     @@ -3457,11 +3462,11 @@ static int sctp_setsockopt_del_key(struct sock *sk,
5098     char __user *optval,
5099     unsigned int optlen)
5100     {
5101     - struct net *net = sock_net(sk);
5102     + struct sctp_endpoint *ep = sctp_sk(sk)->ep;
5103     struct sctp_authkeyid val;
5104     struct sctp_association *asoc;
5105    
5106     - if (!net->sctp.auth_enable)
5107     + if (!ep->auth_enable)
5108     return -EACCES;
5109    
5110     if (optlen != sizeof(struct sctp_authkeyid))
5111     @@ -3473,8 +3478,7 @@ static int sctp_setsockopt_del_key(struct sock *sk,
5112     if (!asoc && val.scact_assoc_id && sctp_style(sk, UDP))
5113     return -EINVAL;
5114    
5115     - return sctp_auth_del_key_id(sctp_sk(sk)->ep, asoc,
5116     - val.scact_keynumber);
5117     + return sctp_auth_del_key_id(ep, asoc, val.scact_keynumber);
5118    
5119     }
5120    
5121     @@ -5381,16 +5385,16 @@ static int sctp_getsockopt_maxburst(struct sock *sk, int len,
5122     static int sctp_getsockopt_hmac_ident(struct sock *sk, int len,
5123     char __user *optval, int __user *optlen)
5124     {
5125     - struct net *net = sock_net(sk);
5126     + struct sctp_endpoint *ep = sctp_sk(sk)->ep;
5127     struct sctp_hmacalgo __user *p = (void __user *)optval;
5128     struct sctp_hmac_algo_param *hmacs;
5129     __u16 data_len = 0;
5130     u32 num_idents;
5131    
5132     - if (!net->sctp.auth_enable)
5133     + if (!ep->auth_enable)
5134     return -EACCES;
5135    
5136     - hmacs = sctp_sk(sk)->ep->auth_hmacs_list;
5137     + hmacs = ep->auth_hmacs_list;
5138     data_len = ntohs(hmacs->param_hdr.length) - sizeof(sctp_paramhdr_t);
5139    
5140     if (len < sizeof(struct sctp_hmacalgo) + data_len)
5141     @@ -5411,11 +5415,11 @@ static int sctp_getsockopt_hmac_ident(struct sock *sk, int len,
5142     static int sctp_getsockopt_active_key(struct sock *sk, int len,
5143     char __user *optval, int __user *optlen)
5144     {
5145     - struct net *net = sock_net(sk);
5146     + struct sctp_endpoint *ep = sctp_sk(sk)->ep;
5147     struct sctp_authkeyid val;
5148     struct sctp_association *asoc;
5149    
5150     - if (!net->sctp.auth_enable)
5151     + if (!ep->auth_enable)
5152     return -EACCES;
5153    
5154     if (len < sizeof(struct sctp_authkeyid))
5155     @@ -5430,7 +5434,7 @@ static int sctp_getsockopt_active_key(struct sock *sk, int len,
5156     if (asoc)
5157     val.scact_keynumber = asoc->active_key_id;
5158     else
5159     - val.scact_keynumber = sctp_sk(sk)->ep->active_key_id;
5160     + val.scact_keynumber = ep->active_key_id;
5161    
5162     len = sizeof(struct sctp_authkeyid);
5163     if (put_user(len, optlen))
5164     @@ -5444,7 +5448,7 @@ static int sctp_getsockopt_active_key(struct sock *sk, int len,
5165     static int sctp_getsockopt_peer_auth_chunks(struct sock *sk, int len,
5166     char __user *optval, int __user *optlen)
5167     {
5168     - struct net *net = sock_net(sk);
5169     + struct sctp_endpoint *ep = sctp_sk(sk)->ep;
5170     struct sctp_authchunks __user *p = (void __user *)optval;
5171     struct sctp_authchunks val;
5172     struct sctp_association *asoc;
5173     @@ -5452,7 +5456,7 @@ static int sctp_getsockopt_peer_auth_chunks(struct sock *sk, int len,
5174     u32 num_chunks = 0;
5175     char __user *to;
5176    
5177     - if (!net->sctp.auth_enable)
5178     + if (!ep->auth_enable)
5179     return -EACCES;
5180    
5181     if (len < sizeof(struct sctp_authchunks))
5182     @@ -5489,7 +5493,7 @@ num:
5183     static int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len,
5184     char __user *optval, int __user *optlen)
5185     {
5186     - struct net *net = sock_net(sk);
5187     + struct sctp_endpoint *ep = sctp_sk(sk)->ep;
5188     struct sctp_authchunks __user *p = (void __user *)optval;
5189     struct sctp_authchunks val;
5190     struct sctp_association *asoc;
5191     @@ -5497,7 +5501,7 @@ static int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len,
5192     u32 num_chunks = 0;
5193     char __user *to;
5194    
5195     - if (!net->sctp.auth_enable)
5196     + if (!ep->auth_enable)
5197     return -EACCES;
5198    
5199     if (len < sizeof(struct sctp_authchunks))
5200     @@ -5514,7 +5518,7 @@ static int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len,
5201     if (asoc)
5202     ch = (struct sctp_chunks_param *)asoc->c.auth_chunks;
5203     else
5204     - ch = sctp_sk(sk)->ep->auth_chunk_list;
5205     + ch = ep->auth_chunk_list;
5206    
5207     if (!ch)
5208     goto num;
5209     @@ -6593,6 +6597,46 @@ static void __sctp_write_space(struct sctp_association *asoc)
5210     }
5211     }
5212    
5213     +static void sctp_wake_up_waiters(struct sock *sk,
5214     + struct sctp_association *asoc)
5215     +{
5216     + struct sctp_association *tmp = asoc;
5217     +
5218     + /* We do accounting for the sndbuf space per association,
5219     + * so we only need to wake our own association.
5220     + */
5221     + if (asoc->ep->sndbuf_policy)
5222     + return __sctp_write_space(asoc);
5223     +
5224     + /* If association goes down and is just flushing its
5225     + * outq, then just normally notify others.
5226     + */
5227     + if (asoc->base.dead)
5228     + return sctp_write_space(sk);
5229     +
5230     + /* Accounting for the sndbuf space is per socket, so we
5231     + * need to wake up others, try to be fair and in case of
5232     + * other associations, let them have a go first instead
5233     + * of just doing a sctp_write_space() call.
5234     + *
5235     + * Note that we reach sctp_wake_up_waiters() only when
5236     + * associations free up queued chunks, thus we are under
5237     + * lock and the list of associations on a socket is
5238     + * guaranteed not to change.
5239     + */
5240     + for (tmp = list_next_entry(tmp, asocs); 1;
5241     + tmp = list_next_entry(tmp, asocs)) {
5242     + /* Manually skip the head element. */
5243     + if (&tmp->asocs == &((sctp_sk(sk))->ep->asocs))
5244     + continue;
5245     + /* Wake up association. */
5246     + __sctp_write_space(tmp);
5247     + /* We've reached the end. */
5248     + if (tmp == asoc)
5249     + break;
5250     + }
5251     +}
5252     +
5253     /* Do accounting for the sndbuf space.
5254     * Decrement the used sndbuf space of the corresponding association by the
5255     * data size which was just transmitted(freed).
5256     @@ -6620,7 +6664,7 @@ static void sctp_wfree(struct sk_buff *skb)
5257     sk_mem_uncharge(sk, skb->truesize);
5258    
5259     sock_wfree(skb);
5260     - __sctp_write_space(asoc);
5261     + sctp_wake_up_waiters(sk, asoc);
5262    
5263     sctp_association_put(asoc);
5264     }
5265     diff --git a/net/sctp/sysctl.c b/net/sctp/sysctl.c
5266     index 35c8923b5554..c82fdc1eab7c 100644
5267     --- a/net/sctp/sysctl.c
5268     +++ b/net/sctp/sysctl.c
5269     @@ -64,6 +64,9 @@ static int proc_sctp_do_rto_min(struct ctl_table *ctl, int write,
5270     static int proc_sctp_do_rto_max(struct ctl_table *ctl, int write,
5271     void __user *buffer, size_t *lenp,
5272     loff_t *ppos);
5273     +static int proc_sctp_do_auth(struct ctl_table *ctl, int write,
5274     + void __user *buffer, size_t *lenp,
5275     + loff_t *ppos);
5276    
5277     static struct ctl_table sctp_table[] = {
5278     {
5279     @@ -266,7 +269,7 @@ static struct ctl_table sctp_net_table[] = {
5280     .data = &init_net.sctp.auth_enable,
5281     .maxlen = sizeof(int),
5282     .mode = 0644,
5283     - .proc_handler = proc_dointvec,
5284     + .proc_handler = proc_sctp_do_auth,
5285     },
5286     {
5287     .procname = "addr_scope_policy",
5288     @@ -400,6 +403,37 @@ static int proc_sctp_do_rto_max(struct ctl_table *ctl, int write,
5289     return ret;
5290     }
5291    
5292     +static int proc_sctp_do_auth(struct ctl_table *ctl, int write,
5293     + void __user *buffer, size_t *lenp,
5294     + loff_t *ppos)
5295     +{
5296     + struct net *net = current->nsproxy->net_ns;
5297     + struct ctl_table tbl;
5298     + int new_value, ret;
5299     +
5300     + memset(&tbl, 0, sizeof(struct ctl_table));
5301     + tbl.maxlen = sizeof(unsigned int);
5302     +
5303     + if (write)
5304     + tbl.data = &new_value;
5305     + else
5306     + tbl.data = &net->sctp.auth_enable;
5307     +
5308     + ret = proc_dointvec(&tbl, write, buffer, lenp, ppos);
5309     +
5310     + if (write) {
5311     + struct sock *sk = net->sctp.ctl_sock;
5312     +
5313     + net->sctp.auth_enable = new_value;
5314     + /* Update the value in the control socket */
5315     + lock_sock(sk);
5316     + sctp_sk(sk)->ep->auth_enable = new_value;
5317     + release_sock(sk);
5318     + }
5319     +
5320     + return ret;
5321     +}
5322     +
5323     int sctp_sysctl_net_register(struct net *net)
5324     {
5325     struct ctl_table *table = sctp_net_table;
5326     diff --git a/net/sctp/ulpevent.c b/net/sctp/ulpevent.c
5327     index 8d198ae03606..85c64658bd0b 100644
5328     --- a/net/sctp/ulpevent.c
5329     +++ b/net/sctp/ulpevent.c
5330     @@ -989,7 +989,7 @@ static void sctp_ulpevent_receive_data(struct sctp_ulpevent *event,
5331     skb = sctp_event2skb(event);
5332     /* Set the owner and charge rwnd for bytes received. */
5333     sctp_ulpevent_set_owner(event, asoc);
5334     - sctp_assoc_rwnd_update(asoc, false);
5335     + sctp_assoc_rwnd_decrease(asoc, skb_headlen(skb));
5336    
5337     if (!skb->data_len)
5338     return;
5339     @@ -1011,7 +1011,6 @@ static void sctp_ulpevent_release_data(struct sctp_ulpevent *event)
5340     {
5341     struct sk_buff *skb, *frag;
5342     unsigned int len;
5343     - struct sctp_association *asoc;
5344    
5345     /* Current stack structures assume that the rcv buffer is
5346     * per socket. For UDP style sockets this is not true as
5347     @@ -1036,11 +1035,8 @@ static void sctp_ulpevent_release_data(struct sctp_ulpevent *event)
5348     }
5349    
5350     done:
5351     - asoc = event->asoc;
5352     - sctp_association_hold(asoc);
5353     + sctp_assoc_rwnd_increase(event->asoc, len);
5354     sctp_ulpevent_release_owner(event);
5355     - sctp_assoc_rwnd_update(asoc, true);
5356     - sctp_association_put(asoc);
5357     }
5358    
5359     static void sctp_ulpevent_release_frag_data(struct sctp_ulpevent *event)
5360     diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
5361     index 5adfd94c5b85..85d232bed87d 100644
5362     --- a/net/vmw_vsock/af_vsock.c
5363     +++ b/net/vmw_vsock/af_vsock.c
5364     @@ -1925,9 +1925,23 @@ static struct miscdevice vsock_device = {
5365     .fops = &vsock_device_ops,
5366     };
5367    
5368     -static int __vsock_core_init(void)
5369     +int __vsock_core_init(const struct vsock_transport *t, struct module *owner)
5370     {
5371     - int err;
5372     + int err = mutex_lock_interruptible(&vsock_register_mutex);
5373     +
5374     + if (err)
5375     + return err;
5376     +
5377     + if (transport) {
5378     + err = -EBUSY;
5379     + goto err_busy;
5380     + }
5381     +
5382     + /* Transport must be the owner of the protocol so that it can't
5383     + * unload while there are open sockets.
5384     + */
5385     + vsock_proto.owner = owner;
5386     + transport = t;
5387    
5388     vsock_init_tables();
5389    
5390     @@ -1951,36 +1965,19 @@ static int __vsock_core_init(void)
5391     goto err_unregister_proto;
5392     }
5393    
5394     + mutex_unlock(&vsock_register_mutex);
5395     return 0;
5396    
5397     err_unregister_proto:
5398     proto_unregister(&vsock_proto);
5399     err_misc_deregister:
5400     misc_deregister(&vsock_device);
5401     - return err;
5402     -}
5403     -
5404     -int vsock_core_init(const struct vsock_transport *t)
5405     -{
5406     - int retval = mutex_lock_interruptible(&vsock_register_mutex);
5407     - if (retval)
5408     - return retval;
5409     -
5410     - if (transport) {
5411     - retval = -EBUSY;
5412     - goto out;
5413     - }
5414     -
5415     - transport = t;
5416     - retval = __vsock_core_init();
5417     - if (retval)
5418     - transport = NULL;
5419     -
5420     -out:
5421     + transport = NULL;
5422     +err_busy:
5423     mutex_unlock(&vsock_register_mutex);
5424     - return retval;
5425     + return err;
5426     }
5427     -EXPORT_SYMBOL_GPL(vsock_core_init);
5428     +EXPORT_SYMBOL_GPL(__vsock_core_init);
5429    
5430     void vsock_core_exit(void)
5431     {
5432     @@ -2000,5 +1997,5 @@ EXPORT_SYMBOL_GPL(vsock_core_exit);
5433    
5434     MODULE_AUTHOR("VMware, Inc.");
5435     MODULE_DESCRIPTION("VMware Virtual Socket Family");
5436     -MODULE_VERSION("1.0.0.0-k");
5437     +MODULE_VERSION("1.0.1.0-k");
5438     MODULE_LICENSE("GPL v2");
5439     diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c
5440     index 1587ea392ad6..30e8e0c3f117 100644
5441     --- a/tools/lib/traceevent/event-parse.c
5442     +++ b/tools/lib/traceevent/event-parse.c
5443     @@ -4321,6 +4321,7 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event
5444     format, len_arg, arg);
5445     trace_seq_terminate(&p);
5446     trace_seq_puts(s, p.buffer);
5447     + trace_seq_destroy(&p);
5448     arg = arg->next;
5449     break;
5450     default: