Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.4/0110-4.4.11-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2802 - (hide annotations) (download)
Mon May 30 12:46:26 2016 UTC (7 years, 11 months ago) by niro
File size: 121850 byte(s)
-linux-4.4.11
1 niro 2802 diff --git a/Makefile b/Makefile
2     index 5b5f462f834c..aad86274b61b 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 4
7     PATCHLEVEL = 4
8     -SUBLEVEL = 10
9     +SUBLEVEL = 11
10     EXTRAVERSION =
11     NAME = Blurry Fish Butt
12    
13     diff --git a/arch/arm/boot/dts/at91sam9x5.dtsi b/arch/arm/boot/dts/at91sam9x5.dtsi
14     index 0827d594b1f0..cd0cd5fd09a3 100644
15     --- a/arch/arm/boot/dts/at91sam9x5.dtsi
16     +++ b/arch/arm/boot/dts/at91sam9x5.dtsi
17     @@ -106,7 +106,7 @@
18    
19     pmc: pmc@fffffc00 {
20     compatible = "atmel,at91sam9x5-pmc", "syscon";
21     - reg = <0xfffffc00 0x100>;
22     + reg = <0xfffffc00 0x200>;
23     interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
24     interrupt-controller;
25     #address-cells = <1>;
26     diff --git a/arch/s390/include/asm/mmu.h b/arch/s390/include/asm/mmu.h
27     index d29ad9545b41..081b2ad99d73 100644
28     --- a/arch/s390/include/asm/mmu.h
29     +++ b/arch/s390/include/asm/mmu.h
30     @@ -11,7 +11,7 @@ typedef struct {
31     spinlock_t list_lock;
32     struct list_head pgtable_list;
33     struct list_head gmap_list;
34     - unsigned long asce_bits;
35     + unsigned long asce;
36     unsigned long asce_limit;
37     unsigned long vdso_base;
38     /* The mmu context allocates 4K page tables. */
39     diff --git a/arch/s390/include/asm/mmu_context.h b/arch/s390/include/asm/mmu_context.h
40     index e485817f7b1a..22877c9440ea 100644
41     --- a/arch/s390/include/asm/mmu_context.h
42     +++ b/arch/s390/include/asm/mmu_context.h
43     @@ -26,12 +26,28 @@ static inline int init_new_context(struct task_struct *tsk,
44     mm->context.has_pgste = 0;
45     mm->context.use_skey = 0;
46     #endif
47     - if (mm->context.asce_limit == 0) {
48     + switch (mm->context.asce_limit) {
49     + case 1UL << 42:
50     + /*
51     + * forked 3-level task, fall through to set new asce with new
52     + * mm->pgd
53     + */
54     + case 0:
55     /* context created by exec, set asce limit to 4TB */
56     - mm->context.asce_bits = _ASCE_TABLE_LENGTH |
57     - _ASCE_USER_BITS | _ASCE_TYPE_REGION3;
58     mm->context.asce_limit = STACK_TOP_MAX;
59     - } else if (mm->context.asce_limit == (1UL << 31)) {
60     + mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
61     + _ASCE_USER_BITS | _ASCE_TYPE_REGION3;
62     + break;
63     + case 1UL << 53:
64     + /* forked 4-level task, set new asce with new mm->pgd */
65     + mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
66     + _ASCE_USER_BITS | _ASCE_TYPE_REGION2;
67     + break;
68     + case 1UL << 31:
69     + /* forked 2-level compat task, set new asce with new mm->pgd */
70     + mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
71     + _ASCE_USER_BITS | _ASCE_TYPE_SEGMENT;
72     + /* pgd_alloc() did not increase mm->nr_pmds */
73     mm_inc_nr_pmds(mm);
74     }
75     crst_table_init((unsigned long *) mm->pgd, pgd_entry_type(mm));
76     @@ -42,7 +58,7 @@ static inline int init_new_context(struct task_struct *tsk,
77    
78     static inline void set_user_asce(struct mm_struct *mm)
79     {
80     - S390_lowcore.user_asce = mm->context.asce_bits | __pa(mm->pgd);
81     + S390_lowcore.user_asce = mm->context.asce;
82     if (current->thread.mm_segment.ar4)
83     __ctl_load(S390_lowcore.user_asce, 7, 7);
84     set_cpu_flag(CIF_ASCE);
85     @@ -71,7 +87,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
86     {
87     int cpu = smp_processor_id();
88    
89     - S390_lowcore.user_asce = next->context.asce_bits | __pa(next->pgd);
90     + S390_lowcore.user_asce = next->context.asce;
91     if (prev == next)
92     return;
93     if (MACHINE_HAS_TLB_LC)
94     diff --git a/arch/s390/include/asm/pgalloc.h b/arch/s390/include/asm/pgalloc.h
95     index d7cc79fb6191..5991cdcb5b40 100644
96     --- a/arch/s390/include/asm/pgalloc.h
97     +++ b/arch/s390/include/asm/pgalloc.h
98     @@ -56,8 +56,8 @@ static inline unsigned long pgd_entry_type(struct mm_struct *mm)
99     return _REGION2_ENTRY_EMPTY;
100     }
101    
102     -int crst_table_upgrade(struct mm_struct *, unsigned long limit);
103     -void crst_table_downgrade(struct mm_struct *, unsigned long limit);
104     +int crst_table_upgrade(struct mm_struct *);
105     +void crst_table_downgrade(struct mm_struct *);
106    
107     static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long address)
108     {
109     diff --git a/arch/s390/include/asm/processor.h b/arch/s390/include/asm/processor.h
110     index b16c3d0a1b9f..c1ea67db8404 100644
111     --- a/arch/s390/include/asm/processor.h
112     +++ b/arch/s390/include/asm/processor.h
113     @@ -163,7 +163,7 @@ extern __vector128 init_task_fpu_regs[__NUM_VXRS];
114     regs->psw.mask = PSW_USER_BITS | PSW_MASK_BA; \
115     regs->psw.addr = new_psw | PSW_ADDR_AMODE; \
116     regs->gprs[15] = new_stackp; \
117     - crst_table_downgrade(current->mm, 1UL << 31); \
118     + crst_table_downgrade(current->mm); \
119     execve_tail(); \
120     } while (0)
121    
122     diff --git a/arch/s390/include/asm/tlbflush.h b/arch/s390/include/asm/tlbflush.h
123     index ca148f7c3eaa..a2e6ef32e054 100644
124     --- a/arch/s390/include/asm/tlbflush.h
125     +++ b/arch/s390/include/asm/tlbflush.h
126     @@ -110,8 +110,7 @@ static inline void __tlb_flush_asce(struct mm_struct *mm, unsigned long asce)
127     static inline void __tlb_flush_kernel(void)
128     {
129     if (MACHINE_HAS_IDTE)
130     - __tlb_flush_idte((unsigned long) init_mm.pgd |
131     - init_mm.context.asce_bits);
132     + __tlb_flush_idte(init_mm.context.asce);
133     else
134     __tlb_flush_global();
135     }
136     @@ -133,8 +132,7 @@ static inline void __tlb_flush_asce(struct mm_struct *mm, unsigned long asce)
137     static inline void __tlb_flush_kernel(void)
138     {
139     if (MACHINE_HAS_TLB_LC)
140     - __tlb_flush_idte_local((unsigned long) init_mm.pgd |
141     - init_mm.context.asce_bits);
142     + __tlb_flush_idte_local(init_mm.context.asce);
143     else
144     __tlb_flush_local();
145     }
146     @@ -148,8 +146,7 @@ static inline void __tlb_flush_mm(struct mm_struct * mm)
147     * only ran on the local cpu.
148     */
149     if (MACHINE_HAS_IDTE && list_empty(&mm->context.gmap_list))
150     - __tlb_flush_asce(mm, (unsigned long) mm->pgd |
151     - mm->context.asce_bits);
152     + __tlb_flush_asce(mm, mm->context.asce);
153     else
154     __tlb_flush_full(mm);
155     }
156     diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c
157     index c722400c7697..feff9caf89b5 100644
158     --- a/arch/s390/mm/init.c
159     +++ b/arch/s390/mm/init.c
160     @@ -89,7 +89,8 @@ void __init paging_init(void)
161     asce_bits = _ASCE_TYPE_REGION3 | _ASCE_TABLE_LENGTH;
162     pgd_type = _REGION3_ENTRY_EMPTY;
163     }
164     - S390_lowcore.kernel_asce = (__pa(init_mm.pgd) & PAGE_MASK) | asce_bits;
165     + init_mm.context.asce = (__pa(init_mm.pgd) & PAGE_MASK) | asce_bits;
166     + S390_lowcore.kernel_asce = init_mm.context.asce;
167     clear_table((unsigned long *) init_mm.pgd, pgd_type,
168     sizeof(unsigned long)*2048);
169     vmem_map_init();
170     diff --git a/arch/s390/mm/mmap.c b/arch/s390/mm/mmap.c
171     index ea01477b4aa6..f2b6b1d9c804 100644
172     --- a/arch/s390/mm/mmap.c
173     +++ b/arch/s390/mm/mmap.c
174     @@ -174,7 +174,7 @@ int s390_mmap_check(unsigned long addr, unsigned long len, unsigned long flags)
175     if (!(flags & MAP_FIXED))
176     addr = 0;
177     if ((addr + len) >= TASK_SIZE)
178     - return crst_table_upgrade(current->mm, 1UL << 53);
179     + return crst_table_upgrade(current->mm);
180     return 0;
181     }
182    
183     @@ -191,7 +191,7 @@ s390_get_unmapped_area(struct file *filp, unsigned long addr,
184     return area;
185     if (area == -ENOMEM && !is_compat_task() && TASK_SIZE < (1UL << 53)) {
186     /* Upgrade the page table to 4 levels and retry. */
187     - rc = crst_table_upgrade(mm, 1UL << 53);
188     + rc = crst_table_upgrade(mm);
189     if (rc)
190     return (unsigned long) rc;
191     area = arch_get_unmapped_area(filp, addr, len, pgoff, flags);
192     @@ -213,7 +213,7 @@ s390_get_unmapped_area_topdown(struct file *filp, const unsigned long addr,
193     return area;
194     if (area == -ENOMEM && !is_compat_task() && TASK_SIZE < (1UL << 53)) {
195     /* Upgrade the page table to 4 levels and retry. */
196     - rc = crst_table_upgrade(mm, 1UL << 53);
197     + rc = crst_table_upgrade(mm);
198     if (rc)
199     return (unsigned long) rc;
200     area = arch_get_unmapped_area_topdown(filp, addr, len,
201     diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c
202     index 54ef3bc01b43..471a370a527b 100644
203     --- a/arch/s390/mm/pgtable.c
204     +++ b/arch/s390/mm/pgtable.c
205     @@ -49,81 +49,52 @@ static void __crst_table_upgrade(void *arg)
206     __tlb_flush_local();
207     }
208    
209     -int crst_table_upgrade(struct mm_struct *mm, unsigned long limit)
210     +int crst_table_upgrade(struct mm_struct *mm)
211     {
212     unsigned long *table, *pgd;
213     - unsigned long entry;
214     - int flush;
215    
216     - BUG_ON(limit > (1UL << 53));
217     - flush = 0;
218     -repeat:
219     + /* upgrade should only happen from 3 to 4 levels */
220     + BUG_ON(mm->context.asce_limit != (1UL << 42));
221     +
222     table = crst_table_alloc(mm);
223     if (!table)
224     return -ENOMEM;
225     +
226     spin_lock_bh(&mm->page_table_lock);
227     - if (mm->context.asce_limit < limit) {
228     - pgd = (unsigned long *) mm->pgd;
229     - if (mm->context.asce_limit <= (1UL << 31)) {
230     - entry = _REGION3_ENTRY_EMPTY;
231     - mm->context.asce_limit = 1UL << 42;
232     - mm->context.asce_bits = _ASCE_TABLE_LENGTH |
233     - _ASCE_USER_BITS |
234     - _ASCE_TYPE_REGION3;
235     - } else {
236     - entry = _REGION2_ENTRY_EMPTY;
237     - mm->context.asce_limit = 1UL << 53;
238     - mm->context.asce_bits = _ASCE_TABLE_LENGTH |
239     - _ASCE_USER_BITS |
240     - _ASCE_TYPE_REGION2;
241     - }
242     - crst_table_init(table, entry);
243     - pgd_populate(mm, (pgd_t *) table, (pud_t *) pgd);
244     - mm->pgd = (pgd_t *) table;
245     - mm->task_size = mm->context.asce_limit;
246     - table = NULL;
247     - flush = 1;
248     - }
249     + pgd = (unsigned long *) mm->pgd;
250     + crst_table_init(table, _REGION2_ENTRY_EMPTY);
251     + pgd_populate(mm, (pgd_t *) table, (pud_t *) pgd);
252     + mm->pgd = (pgd_t *) table;
253     + mm->context.asce_limit = 1UL << 53;
254     + mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
255     + _ASCE_USER_BITS | _ASCE_TYPE_REGION2;
256     + mm->task_size = mm->context.asce_limit;
257     spin_unlock_bh(&mm->page_table_lock);
258     - if (table)
259     - crst_table_free(mm, table);
260     - if (mm->context.asce_limit < limit)
261     - goto repeat;
262     - if (flush)
263     - on_each_cpu(__crst_table_upgrade, mm, 0);
264     +
265     + on_each_cpu(__crst_table_upgrade, mm, 0);
266     return 0;
267     }
268    
269     -void crst_table_downgrade(struct mm_struct *mm, unsigned long limit)
270     +void crst_table_downgrade(struct mm_struct *mm)
271     {
272     pgd_t *pgd;
273    
274     + /* downgrade should only happen from 3 to 2 levels (compat only) */
275     + BUG_ON(mm->context.asce_limit != (1UL << 42));
276     +
277     if (current->active_mm == mm) {
278     clear_user_asce();
279     __tlb_flush_mm(mm);
280     }
281     - while (mm->context.asce_limit > limit) {
282     - pgd = mm->pgd;
283     - switch (pgd_val(*pgd) & _REGION_ENTRY_TYPE_MASK) {
284     - case _REGION_ENTRY_TYPE_R2:
285     - mm->context.asce_limit = 1UL << 42;
286     - mm->context.asce_bits = _ASCE_TABLE_LENGTH |
287     - _ASCE_USER_BITS |
288     - _ASCE_TYPE_REGION3;
289     - break;
290     - case _REGION_ENTRY_TYPE_R3:
291     - mm->context.asce_limit = 1UL << 31;
292     - mm->context.asce_bits = _ASCE_TABLE_LENGTH |
293     - _ASCE_USER_BITS |
294     - _ASCE_TYPE_SEGMENT;
295     - break;
296     - default:
297     - BUG();
298     - }
299     - mm->pgd = (pgd_t *) (pgd_val(*pgd) & _REGION_ENTRY_ORIGIN);
300     - mm->task_size = mm->context.asce_limit;
301     - crst_table_free(mm, (unsigned long *) pgd);
302     - }
303     +
304     + pgd = mm->pgd;
305     + mm->pgd = (pgd_t *) (pgd_val(*pgd) & _REGION_ENTRY_ORIGIN);
306     + mm->context.asce_limit = 1UL << 31;
307     + mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
308     + _ASCE_USER_BITS | _ASCE_TYPE_SEGMENT;
309     + mm->task_size = mm->context.asce_limit;
310     + crst_table_free(mm, (unsigned long *) pgd);
311     +
312     if (current->active_mm == mm)
313     set_user_asce(mm);
314     }
315     diff --git a/crypto/ahash.c b/crypto/ahash.c
316     index d19b52324cf5..dac1c24e9c3e 100644
317     --- a/crypto/ahash.c
318     +++ b/crypto/ahash.c
319     @@ -69,8 +69,9 @@ static int hash_walk_new_entry(struct crypto_hash_walk *walk)
320     struct scatterlist *sg;
321    
322     sg = walk->sg;
323     - walk->pg = sg_page(sg);
324     walk->offset = sg->offset;
325     + walk->pg = sg_page(walk->sg) + (walk->offset >> PAGE_SHIFT);
326     + walk->offset = offset_in_page(walk->offset);
327     walk->entrylen = sg->length;
328    
329     if (walk->entrylen > walk->total)
330     diff --git a/crypto/testmgr.c b/crypto/testmgr.c
331     index ae8c57fd8bc7..d4944318ca1f 100644
332     --- a/crypto/testmgr.c
333     +++ b/crypto/testmgr.c
334     @@ -1849,6 +1849,7 @@ static int alg_test_drbg(const struct alg_test_desc *desc, const char *driver,
335     static int do_test_rsa(struct crypto_akcipher *tfm,
336     struct akcipher_testvec *vecs)
337     {
338     + char *xbuf[XBUFSIZE];
339     struct akcipher_request *req;
340     void *outbuf_enc = NULL;
341     void *outbuf_dec = NULL;
342     @@ -1857,9 +1858,12 @@ static int do_test_rsa(struct crypto_akcipher *tfm,
343     int err = -ENOMEM;
344     struct scatterlist src, dst, src_tab[2];
345    
346     + if (testmgr_alloc_buf(xbuf))
347     + return err;
348     +
349     req = akcipher_request_alloc(tfm, GFP_KERNEL);
350     if (!req)
351     - return err;
352     + goto free_xbuf;
353    
354     init_completion(&result.completion);
355    
356     @@ -1877,9 +1881,14 @@ static int do_test_rsa(struct crypto_akcipher *tfm,
357     if (!outbuf_enc)
358     goto free_req;
359    
360     + if (WARN_ON(vecs->m_size > PAGE_SIZE))
361     + goto free_all;
362     +
363     + memcpy(xbuf[0], vecs->m, vecs->m_size);
364     +
365     sg_init_table(src_tab, 2);
366     - sg_set_buf(&src_tab[0], vecs->m, 8);
367     - sg_set_buf(&src_tab[1], vecs->m + 8, vecs->m_size - 8);
368     + sg_set_buf(&src_tab[0], xbuf[0], 8);
369     + sg_set_buf(&src_tab[1], xbuf[0] + 8, vecs->m_size - 8);
370     sg_init_one(&dst, outbuf_enc, out_len_max);
371     akcipher_request_set_crypt(req, src_tab, &dst, vecs->m_size,
372     out_len_max);
373     @@ -1898,7 +1907,7 @@ static int do_test_rsa(struct crypto_akcipher *tfm,
374     goto free_all;
375     }
376     /* verify that encrypted message is equal to expected */
377     - if (memcmp(vecs->c, sg_virt(req->dst), vecs->c_size)) {
378     + if (memcmp(vecs->c, outbuf_enc, vecs->c_size)) {
379     pr_err("alg: rsa: encrypt test failed. Invalid output\n");
380     err = -EINVAL;
381     goto free_all;
382     @@ -1913,7 +1922,13 @@ static int do_test_rsa(struct crypto_akcipher *tfm,
383     err = -ENOMEM;
384     goto free_all;
385     }
386     - sg_init_one(&src, vecs->c, vecs->c_size);
387     +
388     + if (WARN_ON(vecs->c_size > PAGE_SIZE))
389     + goto free_all;
390     +
391     + memcpy(xbuf[0], vecs->c, vecs->c_size);
392     +
393     + sg_init_one(&src, xbuf[0], vecs->c_size);
394     sg_init_one(&dst, outbuf_dec, out_len_max);
395     init_completion(&result.completion);
396     akcipher_request_set_crypt(req, &src, &dst, vecs->c_size, out_len_max);
397     @@ -1940,6 +1955,8 @@ free_all:
398     kfree(outbuf_enc);
399     free_req:
400     akcipher_request_free(req);
401     +free_xbuf:
402     + testmgr_free_buf(xbuf);
403     return err;
404     }
405    
406     diff --git a/drivers/base/regmap/regmap-spmi.c b/drivers/base/regmap/regmap-spmi.c
407     index 7e58f6560399..4a36e415e938 100644
408     --- a/drivers/base/regmap/regmap-spmi.c
409     +++ b/drivers/base/regmap/regmap-spmi.c
410     @@ -142,7 +142,7 @@ static int regmap_spmi_ext_read(void *context,
411     while (val_size) {
412     len = min_t(size_t, val_size, 8);
413    
414     - err = spmi_ext_register_readl(context, addr, val, val_size);
415     + err = spmi_ext_register_readl(context, addr, val, len);
416     if (err)
417     goto err_out;
418    
419     diff --git a/drivers/crypto/qat/qat_common/adf_common_drv.h b/drivers/crypto/qat/qat_common/adf_common_drv.h
420     index 3f76bd495bcb..b9178d0a3093 100644
421     --- a/drivers/crypto/qat/qat_common/adf_common_drv.h
422     +++ b/drivers/crypto/qat/qat_common/adf_common_drv.h
423     @@ -145,6 +145,8 @@ int adf_enable_aer(struct adf_accel_dev *accel_dev, struct pci_driver *adf);
424     void adf_disable_aer(struct adf_accel_dev *accel_dev);
425     int adf_init_aer(void);
426     void adf_exit_aer(void);
427     +int adf_init_pf_wq(void);
428     +void adf_exit_pf_wq(void);
429     int adf_init_admin_comms(struct adf_accel_dev *accel_dev);
430     void adf_exit_admin_comms(struct adf_accel_dev *accel_dev);
431     int adf_send_admin_init(struct adf_accel_dev *accel_dev);
432     diff --git a/drivers/crypto/qat/qat_common/adf_ctl_drv.c b/drivers/crypto/qat/qat_common/adf_ctl_drv.c
433     index 473d36d91644..e7480f373532 100644
434     --- a/drivers/crypto/qat/qat_common/adf_ctl_drv.c
435     +++ b/drivers/crypto/qat/qat_common/adf_ctl_drv.c
436     @@ -469,12 +469,17 @@ static int __init adf_register_ctl_device_driver(void)
437     if (adf_init_aer())
438     goto err_aer;
439    
440     + if (adf_init_pf_wq())
441     + goto err_pf_wq;
442     +
443     if (qat_crypto_register())
444     goto err_crypto_register;
445    
446     return 0;
447    
448     err_crypto_register:
449     + adf_exit_pf_wq();
450     +err_pf_wq:
451     adf_exit_aer();
452     err_aer:
453     adf_chr_drv_destroy();
454     @@ -487,6 +492,7 @@ static void __exit adf_unregister_ctl_device_driver(void)
455     {
456     adf_chr_drv_destroy();
457     adf_exit_aer();
458     + adf_exit_pf_wq();
459     qat_crypto_unregister();
460     adf_clean_vf_map(false);
461     mutex_destroy(&adf_ctl_lock);
462     diff --git a/drivers/crypto/qat/qat_common/adf_sriov.c b/drivers/crypto/qat/qat_common/adf_sriov.c
463     index 1117a8b58280..38a0415e767d 100644
464     --- a/drivers/crypto/qat/qat_common/adf_sriov.c
465     +++ b/drivers/crypto/qat/qat_common/adf_sriov.c
466     @@ -119,11 +119,6 @@ static int adf_enable_sriov(struct adf_accel_dev *accel_dev)
467     int i;
468     u32 reg;
469    
470     - /* Workqueue for PF2VF responses */
471     - pf2vf_resp_wq = create_workqueue("qat_pf2vf_resp_wq");
472     - if (!pf2vf_resp_wq)
473     - return -ENOMEM;
474     -
475     for (i = 0, vf_info = accel_dev->pf.vf_info; i < totalvfs;
476     i++, vf_info++) {
477     /* This ptr will be populated when VFs will be created */
478     @@ -216,11 +211,6 @@ void adf_disable_sriov(struct adf_accel_dev *accel_dev)
479    
480     kfree(accel_dev->pf.vf_info);
481     accel_dev->pf.vf_info = NULL;
482     -
483     - if (pf2vf_resp_wq) {
484     - destroy_workqueue(pf2vf_resp_wq);
485     - pf2vf_resp_wq = NULL;
486     - }
487     }
488     EXPORT_SYMBOL_GPL(adf_disable_sriov);
489    
490     @@ -304,3 +294,19 @@ int adf_sriov_configure(struct pci_dev *pdev, int numvfs)
491     return numvfs;
492     }
493     EXPORT_SYMBOL_GPL(adf_sriov_configure);
494     +
495     +int __init adf_init_pf_wq(void)
496     +{
497     + /* Workqueue for PF2VF responses */
498     + pf2vf_resp_wq = create_workqueue("qat_pf2vf_resp_wq");
499     +
500     + return !pf2vf_resp_wq ? -ENOMEM : 0;
501     +}
502     +
503     +void adf_exit_pf_wq(void)
504     +{
505     + if (pf2vf_resp_wq) {
506     + destroy_workqueue(pf2vf_resp_wq);
507     + pf2vf_resp_wq = NULL;
508     + }
509     +}
510     diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
511     index 6a2c76e367a5..97d1ed20418b 100644
512     --- a/drivers/gpu/drm/i915/intel_crt.c
513     +++ b/drivers/gpu/drm/i915/intel_crt.c
514     @@ -248,8 +248,14 @@ static bool intel_crt_compute_config(struct intel_encoder *encoder,
515     pipe_config->has_pch_encoder = true;
516    
517     /* LPT FDI RX only supports 8bpc. */
518     - if (HAS_PCH_LPT(dev))
519     + if (HAS_PCH_LPT(dev)) {
520     + if (pipe_config->bw_constrained && pipe_config->pipe_bpp < 24) {
521     + DRM_DEBUG_KMS("LPT only supports 24bpp\n");
522     + return false;
523     + }
524     +
525     pipe_config->pipe_bpp = 24;
526     + }
527    
528     /* FDI must always be 2.7 GHz */
529     if (HAS_DDI(dev)) {
530     diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
531     index f091ad12d694..0a68d2ec89dc 100644
532     --- a/drivers/gpu/drm/i915/intel_pm.c
533     +++ b/drivers/gpu/drm/i915/intel_pm.c
534     @@ -6620,6 +6620,12 @@ static void broadwell_init_clock_gating(struct drm_device *dev)
535     misccpctl = I915_READ(GEN7_MISCCPCTL);
536     I915_WRITE(GEN7_MISCCPCTL, misccpctl & ~GEN7_DOP_CLOCK_GATE_ENABLE);
537     I915_WRITE(GEN8_L3SQCREG1, BDW_WA_L3SQCREG1_DEFAULT);
538     + /*
539     + * Wait at least 100 clocks before re-enabling clock gating. See
540     + * the definition of L3SQCREG1 in BSpec.
541     + */
542     + POSTING_READ(GEN8_L3SQCREG1);
543     + udelay(1);
544     I915_WRITE(GEN7_MISCCPCTL, misccpctl);
545    
546     /*
547     diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
548     index dac78ad24b31..79bab6fd76bb 100644
549     --- a/drivers/gpu/drm/radeon/atombios_crtc.c
550     +++ b/drivers/gpu/drm/radeon/atombios_crtc.c
551     @@ -1739,6 +1739,7 @@ static u32 radeon_get_pll_use_mask(struct drm_crtc *crtc)
552     static int radeon_get_shared_dp_ppll(struct drm_crtc *crtc)
553     {
554     struct drm_device *dev = crtc->dev;
555     + struct radeon_device *rdev = dev->dev_private;
556     struct drm_crtc *test_crtc;
557     struct radeon_crtc *test_radeon_crtc;
558    
559     @@ -1748,6 +1749,10 @@ static int radeon_get_shared_dp_ppll(struct drm_crtc *crtc)
560     test_radeon_crtc = to_radeon_crtc(test_crtc);
561     if (test_radeon_crtc->encoder &&
562     ENCODER_MODE_IS_DP(atombios_get_encoder_mode(test_radeon_crtc->encoder))) {
563     + /* PPLL2 is exclusive to UNIPHYA on DCE61 */
564     + if (ASIC_IS_DCE61(rdev) && !ASIC_IS_DCE8(rdev) &&
565     + test_radeon_crtc->pll_id == ATOM_PPLL2)
566     + continue;
567     /* for DP use the same PLL for all */
568     if (test_radeon_crtc->pll_id != ATOM_PPLL_INVALID)
569     return test_radeon_crtc->pll_id;
570     @@ -1769,6 +1774,7 @@ static int radeon_get_shared_nondp_ppll(struct drm_crtc *crtc)
571     {
572     struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
573     struct drm_device *dev = crtc->dev;
574     + struct radeon_device *rdev = dev->dev_private;
575     struct drm_crtc *test_crtc;
576     struct radeon_crtc *test_radeon_crtc;
577     u32 adjusted_clock, test_adjusted_clock;
578     @@ -1784,6 +1790,10 @@ static int radeon_get_shared_nondp_ppll(struct drm_crtc *crtc)
579     test_radeon_crtc = to_radeon_crtc(test_crtc);
580     if (test_radeon_crtc->encoder &&
581     !ENCODER_MODE_IS_DP(atombios_get_encoder_mode(test_radeon_crtc->encoder))) {
582     + /* PPLL2 is exclusive to UNIPHYA on DCE61 */
583     + if (ASIC_IS_DCE61(rdev) && !ASIC_IS_DCE8(rdev) &&
584     + test_radeon_crtc->pll_id == ATOM_PPLL2)
585     + continue;
586     /* check if we are already driving this connector with another crtc */
587     if (test_radeon_crtc->connector == radeon_crtc->connector) {
588     /* if we are, return that pll */
589     diff --git a/drivers/gpu/drm/radeon/radeon_dp_auxch.c b/drivers/gpu/drm/radeon/radeon_dp_auxch.c
590     index 3b0c229d7dcd..db64e0062689 100644
591     --- a/drivers/gpu/drm/radeon/radeon_dp_auxch.c
592     +++ b/drivers/gpu/drm/radeon/radeon_dp_auxch.c
593     @@ -105,7 +105,7 @@ radeon_dp_aux_transfer_native(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg
594    
595     tmp &= AUX_HPD_SEL(0x7);
596     tmp |= AUX_HPD_SEL(chan->rec.hpd);
597     - tmp |= AUX_EN | AUX_LS_READ_EN;
598     + tmp |= AUX_EN | AUX_LS_READ_EN | AUX_HPD_DISCON(0x1);
599    
600     WREG32(AUX_CONTROL + aux_offset[instance], tmp);
601    
602     diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
603     index 721d63f5b461..fd17443aeacd 100644
604     --- a/drivers/infiniband/hw/mlx5/main.c
605     +++ b/drivers/infiniband/hw/mlx5/main.c
606     @@ -405,8 +405,8 @@ static int mlx5_query_hca_port(struct ib_device *ibdev, u8 port,
607     struct mlx5_ib_dev *dev = to_mdev(ibdev);
608     struct mlx5_core_dev *mdev = dev->mdev;
609     struct mlx5_hca_vport_context *rep;
610     - int max_mtu;
611     - int oper_mtu;
612     + u16 max_mtu;
613     + u16 oper_mtu;
614     int err;
615     u8 ib_link_width_oper;
616     u8 vl_hw_cap;
617     diff --git a/drivers/input/misc/max8997_haptic.c b/drivers/input/misc/max8997_haptic.c
618     index a806ba3818f7..8d6326d7e7be 100644
619     --- a/drivers/input/misc/max8997_haptic.c
620     +++ b/drivers/input/misc/max8997_haptic.c
621     @@ -255,12 +255,14 @@ static int max8997_haptic_probe(struct platform_device *pdev)
622     struct max8997_dev *iodev = dev_get_drvdata(pdev->dev.parent);
623     const struct max8997_platform_data *pdata =
624     dev_get_platdata(iodev->dev);
625     - const struct max8997_haptic_platform_data *haptic_pdata =
626     - pdata->haptic_pdata;
627     + const struct max8997_haptic_platform_data *haptic_pdata = NULL;
628     struct max8997_haptic *chip;
629     struct input_dev *input_dev;
630     int error;
631    
632     + if (pdata)
633     + haptic_pdata = pdata->haptic_pdata;
634     +
635     if (!haptic_pdata) {
636     dev_err(&pdev->dev, "no haptic platform data\n");
637     return -EINVAL;
638     diff --git a/drivers/media/v4l2-core/videobuf2-v4l2.c b/drivers/media/v4l2-core/videobuf2-v4l2.c
639     index 6c441be8f893..502984c724ff 100644
640     --- a/drivers/media/v4l2-core/videobuf2-v4l2.c
641     +++ b/drivers/media/v4l2-core/videobuf2-v4l2.c
642     @@ -67,11 +67,6 @@ static int __verify_planes_array(struct vb2_buffer *vb, const struct v4l2_buffer
643     return 0;
644     }
645    
646     -static int __verify_planes_array_core(struct vb2_buffer *vb, const void *pb)
647     -{
648     - return __verify_planes_array(vb, pb);
649     -}
650     -
651     /**
652     * __verify_length() - Verify that the bytesused value for each plane fits in
653     * the plane length and that the data offset doesn't exceed the bytesused value.
654     @@ -437,7 +432,6 @@ static int __fill_vb2_buffer(struct vb2_buffer *vb,
655     }
656    
657     static const struct vb2_buf_ops v4l2_buf_ops = {
658     - .verify_planes_array = __verify_planes_array_core,
659     .fill_user_buffer = __fill_v4l2_buffer,
660     .fill_vb2_buffer = __fill_vb2_buffer,
661     .set_timestamp = __set_timestamp,
662     diff --git a/drivers/net/ethernet/atheros/atlx/atl2.c b/drivers/net/ethernet/atheros/atlx/atl2.c
663     index 8f76f4558a88..2ff465848b65 100644
664     --- a/drivers/net/ethernet/atheros/atlx/atl2.c
665     +++ b/drivers/net/ethernet/atheros/atlx/atl2.c
666     @@ -1412,7 +1412,7 @@ static int atl2_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
667    
668     err = -EIO;
669    
670     - netdev->hw_features = NETIF_F_SG | NETIF_F_HW_VLAN_CTAG_RX;
671     + netdev->hw_features = NETIF_F_HW_VLAN_CTAG_RX;
672     netdev->features |= (NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX);
673    
674     /* Init PHY as early as possible due to power saving issue */
675     diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
676     index 206b6a71a545..d1c217eaf417 100644
677     --- a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
678     +++ b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
679     @@ -550,6 +550,7 @@ static void nicvf_rcv_queue_config(struct nicvf *nic, struct queue_set *qs,
680     nicvf_config_vlan_stripping(nic, nic->netdev->features);
681    
682     /* Enable Receive queue */
683     + memset(&rq_cfg, 0, sizeof(struct rq_cfg));
684     rq_cfg.ena = 1;
685     rq_cfg.tcp_ena = 0;
686     nicvf_queue_reg_write(nic, NIC_QSET_RQ_0_7_CFG, qidx, *(u64 *)&rq_cfg);
687     @@ -582,6 +583,7 @@ void nicvf_cmp_queue_config(struct nicvf *nic, struct queue_set *qs,
688     qidx, (u64)(cq->dmem.phys_base));
689    
690     /* Enable Completion queue */
691     + memset(&cq_cfg, 0, sizeof(struct cq_cfg));
692     cq_cfg.ena = 1;
693     cq_cfg.reset = 0;
694     cq_cfg.caching = 0;
695     @@ -630,6 +632,7 @@ static void nicvf_snd_queue_config(struct nicvf *nic, struct queue_set *qs,
696     qidx, (u64)(sq->dmem.phys_base));
697    
698     /* Enable send queue & set queue size */
699     + memset(&sq_cfg, 0, sizeof(struct sq_cfg));
700     sq_cfg.ena = 1;
701     sq_cfg.reset = 0;
702     sq_cfg.ldwb = 0;
703     @@ -666,6 +669,7 @@ static void nicvf_rbdr_config(struct nicvf *nic, struct queue_set *qs,
704    
705     /* Enable RBDR & set queue size */
706     /* Buffer size should be in multiples of 128 bytes */
707     + memset(&rbdr_cfg, 0, sizeof(struct rbdr_cfg));
708     rbdr_cfg.ena = 1;
709     rbdr_cfg.reset = 0;
710     rbdr_cfg.ldwb = 0;
711     diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
712     index b2a32209ffbf..f6147ffc7fbc 100644
713     --- a/drivers/net/ethernet/freescale/fec_main.c
714     +++ b/drivers/net/ethernet/freescale/fec_main.c
715     @@ -1557,9 +1557,15 @@ fec_enet_rx(struct net_device *ndev, int budget)
716     struct fec_enet_private *fep = netdev_priv(ndev);
717    
718     for_each_set_bit(queue_id, &fep->work_rx, FEC_ENET_MAX_RX_QS) {
719     - clear_bit(queue_id, &fep->work_rx);
720     - pkt_received += fec_enet_rx_queue(ndev,
721     + int ret;
722     +
723     + ret = fec_enet_rx_queue(ndev,
724     budget - pkt_received, queue_id);
725     +
726     + if (ret < budget - pkt_received)
727     + clear_bit(queue_id, &fep->work_rx);
728     +
729     + pkt_received += ret;
730     }
731     return pkt_received;
732     }
733     diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
734     index e7a5000aa12c..bbff8ec6713e 100644
735     --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c
736     +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
737     @@ -704,7 +704,7 @@ static int get_fixed_ipv6_csum(__wsum hw_checksum, struct sk_buff *skb,
738    
739     if (ipv6h->nexthdr == IPPROTO_FRAGMENT || ipv6h->nexthdr == IPPROTO_HOPOPTS)
740     return -1;
741     - hw_checksum = csum_add(hw_checksum, (__force __wsum)(ipv6h->nexthdr << 8));
742     + hw_checksum = csum_add(hw_checksum, (__force __wsum)htons(ipv6h->nexthdr));
743    
744     csum_pseudo_hdr = csum_partial(&ipv6h->saddr,
745     sizeof(ipv6h->saddr) + sizeof(ipv6h->daddr), 0);
746     diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
747     index 4421bf5463f6..e4019a803a9c 100644
748     --- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c
749     +++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
750     @@ -400,7 +400,6 @@ static bool mlx4_en_process_tx_cq(struct net_device *dev,
751     u32 packets = 0;
752     u32 bytes = 0;
753     int factor = priv->cqe_factor;
754     - u64 timestamp = 0;
755     int done = 0;
756     int budget = priv->tx_work_limit;
757     u32 last_nr_txbb;
758     @@ -440,9 +439,12 @@ static bool mlx4_en_process_tx_cq(struct net_device *dev,
759     new_index = be16_to_cpu(cqe->wqe_index) & size_mask;
760    
761     do {
762     + u64 timestamp = 0;
763     +
764     txbbs_skipped += last_nr_txbb;
765     ring_index = (ring_index + last_nr_txbb) & size_mask;
766     - if (ring->tx_info[ring_index].ts_requested)
767     +
768     + if (unlikely(ring->tx_info[ring_index].ts_requested))
769     timestamp = mlx4_en_get_cqe_ts(cqe);
770    
771     /* free next descriptor */
772     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
773     index 1203d892e842..cbd17e25beeb 100644
774     --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
775     +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
776     @@ -1372,7 +1372,7 @@ static int mlx5e_set_dev_port_mtu(struct net_device *netdev)
777     {
778     struct mlx5e_priv *priv = netdev_priv(netdev);
779     struct mlx5_core_dev *mdev = priv->mdev;
780     - int hw_mtu;
781     + u16 hw_mtu;
782     int err;
783    
784     err = mlx5_set_port_mtu(mdev, MLX5E_SW2HW_MTU(netdev->mtu), 1);
785     @@ -1891,22 +1891,27 @@ static int mlx5e_set_features(struct net_device *netdev,
786     return err;
787     }
788    
789     +#define MXL5_HW_MIN_MTU 64
790     +#define MXL5E_MIN_MTU (MXL5_HW_MIN_MTU + ETH_FCS_LEN)
791     +
792     static int mlx5e_change_mtu(struct net_device *netdev, int new_mtu)
793     {
794     struct mlx5e_priv *priv = netdev_priv(netdev);
795     struct mlx5_core_dev *mdev = priv->mdev;
796     bool was_opened;
797     - int max_mtu;
798     + u16 max_mtu;
799     + u16 min_mtu;
800     int err = 0;
801    
802     mlx5_query_port_max_mtu(mdev, &max_mtu, 1);
803    
804     max_mtu = MLX5E_HW2SW_MTU(max_mtu);
805     + min_mtu = MLX5E_HW2SW_MTU(MXL5E_MIN_MTU);
806    
807     - if (new_mtu > max_mtu) {
808     + if (new_mtu > max_mtu || new_mtu < min_mtu) {
809     netdev_err(netdev,
810     - "%s: Bad MTU (%d) > (%d) Max\n",
811     - __func__, new_mtu, max_mtu);
812     + "%s: Bad MTU (%d), valid range is: [%d..%d]\n",
813     + __func__, new_mtu, min_mtu, max_mtu);
814     return -EINVAL;
815     }
816    
817     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/port.c b/drivers/net/ethernet/mellanox/mlx5/core/port.c
818     index a87e773e93f3..53a793bc2e3d 100644
819     --- a/drivers/net/ethernet/mellanox/mlx5/core/port.c
820     +++ b/drivers/net/ethernet/mellanox/mlx5/core/port.c
821     @@ -246,8 +246,8 @@ int mlx5_query_port_admin_status(struct mlx5_core_dev *dev,
822     }
823     EXPORT_SYMBOL_GPL(mlx5_query_port_admin_status);
824    
825     -static void mlx5_query_port_mtu(struct mlx5_core_dev *dev, int *admin_mtu,
826     - int *max_mtu, int *oper_mtu, u8 port)
827     +static void mlx5_query_port_mtu(struct mlx5_core_dev *dev, u16 *admin_mtu,
828     + u16 *max_mtu, u16 *oper_mtu, u8 port)
829     {
830     u32 in[MLX5_ST_SZ_DW(pmtu_reg)];
831     u32 out[MLX5_ST_SZ_DW(pmtu_reg)];
832     @@ -267,7 +267,7 @@ static void mlx5_query_port_mtu(struct mlx5_core_dev *dev, int *admin_mtu,
833     *admin_mtu = MLX5_GET(pmtu_reg, out, admin_mtu);
834     }
835    
836     -int mlx5_set_port_mtu(struct mlx5_core_dev *dev, int mtu, u8 port)
837     +int mlx5_set_port_mtu(struct mlx5_core_dev *dev, u16 mtu, u8 port)
838     {
839     u32 in[MLX5_ST_SZ_DW(pmtu_reg)];
840     u32 out[MLX5_ST_SZ_DW(pmtu_reg)];
841     @@ -282,14 +282,14 @@ int mlx5_set_port_mtu(struct mlx5_core_dev *dev, int mtu, u8 port)
842     }
843     EXPORT_SYMBOL_GPL(mlx5_set_port_mtu);
844    
845     -void mlx5_query_port_max_mtu(struct mlx5_core_dev *dev, int *max_mtu,
846     +void mlx5_query_port_max_mtu(struct mlx5_core_dev *dev, u16 *max_mtu,
847     u8 port)
848     {
849     mlx5_query_port_mtu(dev, NULL, max_mtu, NULL, port);
850     }
851     EXPORT_SYMBOL_GPL(mlx5_query_port_max_mtu);
852    
853     -void mlx5_query_port_oper_mtu(struct mlx5_core_dev *dev, int *oper_mtu,
854     +void mlx5_query_port_oper_mtu(struct mlx5_core_dev *dev, u16 *oper_mtu,
855     u8 port)
856     {
857     mlx5_query_port_mtu(dev, NULL, NULL, oper_mtu, port);
858     diff --git a/drivers/net/usb/cdc_mbim.c b/drivers/net/usb/cdc_mbim.c
859     index bdd83d95ec0a..96a5028621c8 100644
860     --- a/drivers/net/usb/cdc_mbim.c
861     +++ b/drivers/net/usb/cdc_mbim.c
862     @@ -617,8 +617,13 @@ static const struct usb_device_id mbim_devs[] = {
863     { USB_VENDOR_AND_INTERFACE_INFO(0x0bdb, USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE),
864     .driver_info = (unsigned long)&cdc_mbim_info,
865     },
866     - /* Huawei E3372 fails unless NDP comes after the IP packets */
867     - { USB_DEVICE_AND_INTERFACE_INFO(0x12d1, 0x157d, USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE),
868     +
869     + /* Some Huawei devices, ME906s-158 (12d1:15c1) and E3372
870     + * (12d1:157d), are known to fail unless the NDP is placed
871     + * after the IP packets. Applying the quirk to all Huawei
872     + * devices is broader than necessary, but harmless.
873     + */
874     + { USB_VENDOR_AND_INTERFACE_INFO(0x12d1, USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE),
875     .driver_info = (unsigned long)&cdc_mbim_info_ndp_to_end,
876     },
877     /* default entry */
878     diff --git a/drivers/pinctrl/pinctrl-at91-pio4.c b/drivers/pinctrl/pinctrl-at91-pio4.c
879     index 33edd07d9149..b3235fd2950c 100644
880     --- a/drivers/pinctrl/pinctrl-at91-pio4.c
881     +++ b/drivers/pinctrl/pinctrl-at91-pio4.c
882     @@ -717,9 +717,11 @@ static int atmel_conf_pin_config_group_set(struct pinctrl_dev *pctldev,
883     break;
884     case PIN_CONFIG_BIAS_PULL_UP:
885     conf |= ATMEL_PIO_PUEN_MASK;
886     + conf &= (~ATMEL_PIO_PDEN_MASK);
887     break;
888     case PIN_CONFIG_BIAS_PULL_DOWN:
889     conf |= ATMEL_PIO_PDEN_MASK;
890     + conf &= (~ATMEL_PIO_PUEN_MASK);
891     break;
892     case PIN_CONFIG_DRIVE_OPEN_DRAIN:
893     if (arg == 0)
894     diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20x-regulator.c
895     index f2e1a39ce0f3..5cf4a97e0304 100644
896     --- a/drivers/regulator/axp20x-regulator.c
897     +++ b/drivers/regulator/axp20x-regulator.c
898     @@ -221,10 +221,10 @@ static const struct regulator_desc axp22x_regulators[] = {
899     AXP22X_ELDO2_V_OUT, 0x1f, AXP22X_PWR_OUT_CTRL2, BIT(1)),
900     AXP_DESC(AXP22X, ELDO3, "eldo3", "eldoin", 700, 3300, 100,
901     AXP22X_ELDO3_V_OUT, 0x1f, AXP22X_PWR_OUT_CTRL2, BIT(2)),
902     - AXP_DESC_IO(AXP22X, LDO_IO0, "ldo_io0", "ips", 1800, 3300, 100,
903     + AXP_DESC_IO(AXP22X, LDO_IO0, "ldo_io0", "ips", 700, 3300, 100,
904     AXP22X_LDO_IO0_V_OUT, 0x1f, AXP20X_GPIO0_CTRL, 0x07,
905     AXP22X_IO_ENABLED, AXP22X_IO_DISABLED),
906     - AXP_DESC_IO(AXP22X, LDO_IO1, "ldo_io1", "ips", 1800, 3300, 100,
907     + AXP_DESC_IO(AXP22X, LDO_IO1, "ldo_io1", "ips", 700, 3300, 100,
908     AXP22X_LDO_IO1_V_OUT, 0x1f, AXP20X_GPIO1_CTRL, 0x07,
909     AXP22X_IO_ENABLED, AXP22X_IO_DISABLED),
910     AXP_DESC_FIXED(AXP22X, RTC_LDO, "rtc_ldo", "ips", 3000),
911     diff --git a/drivers/regulator/s2mps11.c b/drivers/regulator/s2mps11.c
912     index 72fc3c32db49..b6d831b84e1d 100644
913     --- a/drivers/regulator/s2mps11.c
914     +++ b/drivers/regulator/s2mps11.c
915     @@ -305,7 +305,7 @@ static struct regulator_ops s2mps11_buck_ops = {
916     .enable_mask = S2MPS11_ENABLE_MASK \
917     }
918    
919     -#define regulator_desc_s2mps11_buck6_10(num, min, step) { \
920     +#define regulator_desc_s2mps11_buck67810(num, min, step) { \
921     .name = "BUCK"#num, \
922     .id = S2MPS11_BUCK##num, \
923     .ops = &s2mps11_buck_ops, \
924     @@ -321,6 +321,22 @@ static struct regulator_ops s2mps11_buck_ops = {
925     .enable_mask = S2MPS11_ENABLE_MASK \
926     }
927    
928     +#define regulator_desc_s2mps11_buck9 { \
929     + .name = "BUCK9", \
930     + .id = S2MPS11_BUCK9, \
931     + .ops = &s2mps11_buck_ops, \
932     + .type = REGULATOR_VOLTAGE, \
933     + .owner = THIS_MODULE, \
934     + .min_uV = MIN_3000_MV, \
935     + .uV_step = STEP_25_MV, \
936     + .n_voltages = S2MPS11_BUCK9_N_VOLTAGES, \
937     + .ramp_delay = S2MPS11_RAMP_DELAY, \
938     + .vsel_reg = S2MPS11_REG_B9CTRL2, \
939     + .vsel_mask = S2MPS11_BUCK9_VSEL_MASK, \
940     + .enable_reg = S2MPS11_REG_B9CTRL1, \
941     + .enable_mask = S2MPS11_ENABLE_MASK \
942     +}
943     +
944     static const struct regulator_desc s2mps11_regulators[] = {
945     regulator_desc_s2mps11_ldo(1, STEP_25_MV),
946     regulator_desc_s2mps11_ldo(2, STEP_50_MV),
947     @@ -365,11 +381,11 @@ static const struct regulator_desc s2mps11_regulators[] = {
948     regulator_desc_s2mps11_buck1_4(3),
949     regulator_desc_s2mps11_buck1_4(4),
950     regulator_desc_s2mps11_buck5,
951     - regulator_desc_s2mps11_buck6_10(6, MIN_600_MV, STEP_6_25_MV),
952     - regulator_desc_s2mps11_buck6_10(7, MIN_600_MV, STEP_6_25_MV),
953     - regulator_desc_s2mps11_buck6_10(8, MIN_600_MV, STEP_6_25_MV),
954     - regulator_desc_s2mps11_buck6_10(9, MIN_3000_MV, STEP_25_MV),
955     - regulator_desc_s2mps11_buck6_10(10, MIN_750_MV, STEP_12_5_MV),
956     + regulator_desc_s2mps11_buck67810(6, MIN_600_MV, STEP_6_25_MV),
957     + regulator_desc_s2mps11_buck67810(7, MIN_600_MV, STEP_6_25_MV),
958     + regulator_desc_s2mps11_buck67810(8, MIN_600_MV, STEP_6_25_MV),
959     + regulator_desc_s2mps11_buck9,
960     + regulator_desc_s2mps11_buck67810(10, MIN_750_MV, STEP_12_5_MV),
961     };
962    
963     static struct regulator_ops s2mps14_reg_ops;
964     diff --git a/drivers/scsi/qla1280.c b/drivers/scsi/qla1280.c
965     index 5d0ec42a9317..634254a52301 100644
966     --- a/drivers/scsi/qla1280.c
967     +++ b/drivers/scsi/qla1280.c
968     @@ -4214,7 +4214,7 @@ static struct scsi_host_template qla1280_driver_template = {
969     .eh_bus_reset_handler = qla1280_eh_bus_reset,
970     .eh_host_reset_handler = qla1280_eh_adapter_reset,
971     .bios_param = qla1280_biosparam,
972     - .can_queue = 0xfffff,
973     + .can_queue = MAX_OUTSTANDING_COMMANDS,
974     .this_id = -1,
975     .sg_tablesize = SG_ALL,
976     .use_clustering = ENABLE_CLUSTERING,
977     diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c
978     index b25dc71b0ea9..73c8ea0b1360 100644
979     --- a/drivers/spi/spi-pxa2xx.c
980     +++ b/drivers/spi/spi-pxa2xx.c
981     @@ -111,7 +111,7 @@ static const struct lpss_config lpss_platforms[] = {
982     .reg_general = -1,
983     .reg_ssp = 0x20,
984     .reg_cs_ctrl = 0x24,
985     - .reg_capabilities = 0xfc,
986     + .reg_capabilities = -1,
987     .rx_threshold = 1,
988     .tx_threshold_lo = 32,
989     .tx_threshold_hi = 56,
990     diff --git a/drivers/spi/spi-ti-qspi.c b/drivers/spi/spi-ti-qspi.c
991     index 64318fcfacf2..5044c6198332 100644
992     --- a/drivers/spi/spi-ti-qspi.c
993     +++ b/drivers/spi/spi-ti-qspi.c
994     @@ -94,6 +94,7 @@ struct ti_qspi {
995     #define QSPI_FLEN(n) ((n - 1) << 0)
996     #define QSPI_WLEN_MAX_BITS 128
997     #define QSPI_WLEN_MAX_BYTES 16
998     +#define QSPI_WLEN_MASK QSPI_WLEN(QSPI_WLEN_MAX_BITS)
999    
1000     /* STATUS REGISTER */
1001     #define BUSY 0x01
1002     @@ -224,16 +225,16 @@ static inline int ti_qspi_poll_wc(struct ti_qspi *qspi)
1003     return -ETIMEDOUT;
1004     }
1005    
1006     -static int qspi_write_msg(struct ti_qspi *qspi, struct spi_transfer *t)
1007     +static int qspi_write_msg(struct ti_qspi *qspi, struct spi_transfer *t,
1008     + int count)
1009     {
1010     - int wlen, count, xfer_len;
1011     + int wlen, xfer_len;
1012     unsigned int cmd;
1013     const u8 *txbuf;
1014     u32 data;
1015    
1016     txbuf = t->tx_buf;
1017     cmd = qspi->cmd | QSPI_WR_SNGL;
1018     - count = t->len;
1019     wlen = t->bits_per_word >> 3; /* in bytes */
1020     xfer_len = wlen;
1021    
1022     @@ -293,9 +294,10 @@ static int qspi_write_msg(struct ti_qspi *qspi, struct spi_transfer *t)
1023     return 0;
1024     }
1025    
1026     -static int qspi_read_msg(struct ti_qspi *qspi, struct spi_transfer *t)
1027     +static int qspi_read_msg(struct ti_qspi *qspi, struct spi_transfer *t,
1028     + int count)
1029     {
1030     - int wlen, count;
1031     + int wlen;
1032     unsigned int cmd;
1033     u8 *rxbuf;
1034    
1035     @@ -312,7 +314,6 @@ static int qspi_read_msg(struct ti_qspi *qspi, struct spi_transfer *t)
1036     cmd |= QSPI_RD_SNGL;
1037     break;
1038     }
1039     - count = t->len;
1040     wlen = t->bits_per_word >> 3; /* in bytes */
1041    
1042     while (count) {
1043     @@ -343,12 +344,13 @@ static int qspi_read_msg(struct ti_qspi *qspi, struct spi_transfer *t)
1044     return 0;
1045     }
1046    
1047     -static int qspi_transfer_msg(struct ti_qspi *qspi, struct spi_transfer *t)
1048     +static int qspi_transfer_msg(struct ti_qspi *qspi, struct spi_transfer *t,
1049     + int count)
1050     {
1051     int ret;
1052    
1053     if (t->tx_buf) {
1054     - ret = qspi_write_msg(qspi, t);
1055     + ret = qspi_write_msg(qspi, t, count);
1056     if (ret) {
1057     dev_dbg(qspi->dev, "Error while writing\n");
1058     return ret;
1059     @@ -356,7 +358,7 @@ static int qspi_transfer_msg(struct ti_qspi *qspi, struct spi_transfer *t)
1060     }
1061    
1062     if (t->rx_buf) {
1063     - ret = qspi_read_msg(qspi, t);
1064     + ret = qspi_read_msg(qspi, t, count);
1065     if (ret) {
1066     dev_dbg(qspi->dev, "Error while reading\n");
1067     return ret;
1068     @@ -373,7 +375,8 @@ static int ti_qspi_start_transfer_one(struct spi_master *master,
1069     struct spi_device *spi = m->spi;
1070     struct spi_transfer *t;
1071     int status = 0, ret;
1072     - int frame_length;
1073     + unsigned int frame_len_words, transfer_len_words;
1074     + int wlen;
1075    
1076     /* setup device control reg */
1077     qspi->dc = 0;
1078     @@ -385,30 +388,38 @@ static int ti_qspi_start_transfer_one(struct spi_master *master,
1079     if (spi->mode & SPI_CS_HIGH)
1080     qspi->dc |= QSPI_CSPOL(spi->chip_select);
1081    
1082     - frame_length = (m->frame_length << 3) / spi->bits_per_word;
1083     -
1084     - frame_length = clamp(frame_length, 0, QSPI_FRAME);
1085     + frame_len_words = 0;
1086     + list_for_each_entry(t, &m->transfers, transfer_list)
1087     + frame_len_words += t->len / (t->bits_per_word >> 3);
1088     + frame_len_words = min_t(unsigned int, frame_len_words, QSPI_FRAME);
1089    
1090     /* setup command reg */
1091     qspi->cmd = 0;
1092     qspi->cmd |= QSPI_EN_CS(spi->chip_select);
1093     - qspi->cmd |= QSPI_FLEN(frame_length);
1094     + qspi->cmd |= QSPI_FLEN(frame_len_words);
1095    
1096     ti_qspi_write(qspi, qspi->dc, QSPI_SPI_DC_REG);
1097    
1098     mutex_lock(&qspi->list_lock);
1099    
1100     list_for_each_entry(t, &m->transfers, transfer_list) {
1101     - qspi->cmd |= QSPI_WLEN(t->bits_per_word);
1102     + qspi->cmd = ((qspi->cmd & ~QSPI_WLEN_MASK) |
1103     + QSPI_WLEN(t->bits_per_word));
1104     +
1105     + wlen = t->bits_per_word >> 3;
1106     + transfer_len_words = min(t->len / wlen, frame_len_words);
1107    
1108     - ret = qspi_transfer_msg(qspi, t);
1109     + ret = qspi_transfer_msg(qspi, t, transfer_len_words * wlen);
1110     if (ret) {
1111     dev_dbg(qspi->dev, "transfer message failed\n");
1112     mutex_unlock(&qspi->list_lock);
1113     return -EINVAL;
1114     }
1115    
1116     - m->actual_length += t->len;
1117     + m->actual_length += transfer_len_words * wlen;
1118     + frame_len_words -= transfer_len_words;
1119     + if (frame_len_words == 0)
1120     + break;
1121     }
1122    
1123     mutex_unlock(&qspi->list_lock);
1124     diff --git a/fs/isofs/rock.c b/fs/isofs/rock.c
1125     index 735d7522a3a9..204659a5f6db 100644
1126     --- a/fs/isofs/rock.c
1127     +++ b/fs/isofs/rock.c
1128     @@ -203,6 +203,8 @@ int get_rock_ridge_filename(struct iso_directory_record *de,
1129     int retnamlen = 0;
1130     int truncate = 0;
1131     int ret = 0;
1132     + char *p;
1133     + int len;
1134    
1135     if (!ISOFS_SB(inode->i_sb)->s_rock)
1136     return 0;
1137     @@ -267,12 +269,17 @@ repeat:
1138     rr->u.NM.flags);
1139     break;
1140     }
1141     - if ((strlen(retname) + rr->len - 5) >= 254) {
1142     + len = rr->len - 5;
1143     + if (retnamlen + len >= 254) {
1144     truncate = 1;
1145     break;
1146     }
1147     - strncat(retname, rr->u.NM.name, rr->len - 5);
1148     - retnamlen += rr->len - 5;
1149     + p = memchr(rr->u.NM.name, '\0', len);
1150     + if (unlikely(p))
1151     + len = p - rr->u.NM.name;
1152     + memcpy(retname + retnamlen, rr->u.NM.name, len);
1153     + retnamlen += len;
1154     + retname[retnamlen] = '\0';
1155     break;
1156     case SIG('R', 'E'):
1157     kfree(rs.buffer);
1158     diff --git a/fs/namei.c b/fs/namei.c
1159     index d8ee4da93650..209ca7737cb2 100644
1160     --- a/fs/namei.c
1161     +++ b/fs/namei.c
1162     @@ -2906,22 +2906,10 @@ no_open:
1163     dentry = lookup_real(dir, dentry, nd->flags);
1164     if (IS_ERR(dentry))
1165     return PTR_ERR(dentry);
1166     -
1167     - if (create_error) {
1168     - int open_flag = op->open_flag;
1169     -
1170     - error = create_error;
1171     - if ((open_flag & O_EXCL)) {
1172     - if (!dentry->d_inode)
1173     - goto out;
1174     - } else if (!dentry->d_inode) {
1175     - goto out;
1176     - } else if ((open_flag & O_TRUNC) &&
1177     - d_is_reg(dentry)) {
1178     - goto out;
1179     - }
1180     - /* will fail later, go on to get the right error */
1181     - }
1182     + }
1183     + if (create_error && !dentry->d_inode) {
1184     + error = create_error;
1185     + goto out;
1186     }
1187     looked_up:
1188     path->dentry = dentry;
1189     @@ -4195,7 +4183,11 @@ int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
1190     bool new_is_dir = false;
1191     unsigned max_links = new_dir->i_sb->s_max_links;
1192    
1193     - if (source == target)
1194     + /*
1195     + * Check source == target.
1196     + * On overlayfs need to look at underlying inodes.
1197     + */
1198     + if (vfs_select_inode(old_dentry, 0) == vfs_select_inode(new_dentry, 0))
1199     return 0;
1200    
1201     error = may_delete(old_dir, old_dentry, is_dir);
1202     diff --git a/fs/ocfs2/acl.c b/fs/ocfs2/acl.c
1203     index 0cdf497c91ef..2162434728c0 100644
1204     --- a/fs/ocfs2/acl.c
1205     +++ b/fs/ocfs2/acl.c
1206     @@ -322,3 +322,90 @@ struct posix_acl *ocfs2_iop_get_acl(struct inode *inode, int type)
1207     brelse(di_bh);
1208     return acl;
1209     }
1210     +
1211     +int ocfs2_acl_chmod(struct inode *inode, struct buffer_head *bh)
1212     +{
1213     + struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
1214     + struct posix_acl *acl;
1215     + int ret;
1216     +
1217     + if (S_ISLNK(inode->i_mode))
1218     + return -EOPNOTSUPP;
1219     +
1220     + if (!(osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL))
1221     + return 0;
1222     +
1223     + acl = ocfs2_get_acl_nolock(inode, ACL_TYPE_ACCESS, bh);
1224     + if (IS_ERR(acl) || !acl)
1225     + return PTR_ERR(acl);
1226     + ret = __posix_acl_chmod(&acl, GFP_KERNEL, inode->i_mode);
1227     + if (ret)
1228     + return ret;
1229     + ret = ocfs2_set_acl(NULL, inode, NULL, ACL_TYPE_ACCESS,
1230     + acl, NULL, NULL);
1231     + posix_acl_release(acl);
1232     + return ret;
1233     +}
1234     +
1235     +/*
1236     + * Initialize the ACLs of a new inode. If parent directory has default ACL,
1237     + * then clone to new inode. Called from ocfs2_mknod.
1238     + */
1239     +int ocfs2_init_acl(handle_t *handle,
1240     + struct inode *inode,
1241     + struct inode *dir,
1242     + struct buffer_head *di_bh,
1243     + struct buffer_head *dir_bh,
1244     + struct ocfs2_alloc_context *meta_ac,
1245     + struct ocfs2_alloc_context *data_ac)
1246     +{
1247     + struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
1248     + struct posix_acl *acl = NULL;
1249     + int ret = 0, ret2;
1250     + umode_t mode;
1251     +
1252     + if (!S_ISLNK(inode->i_mode)) {
1253     + if (osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL) {
1254     + acl = ocfs2_get_acl_nolock(dir, ACL_TYPE_DEFAULT,
1255     + dir_bh);
1256     + if (IS_ERR(acl))
1257     + return PTR_ERR(acl);
1258     + }
1259     + if (!acl) {
1260     + mode = inode->i_mode & ~current_umask();
1261     + ret = ocfs2_acl_set_mode(inode, di_bh, handle, mode);
1262     + if (ret) {
1263     + mlog_errno(ret);
1264     + goto cleanup;
1265     + }
1266     + }
1267     + }
1268     + if ((osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL) && acl) {
1269     + if (S_ISDIR(inode->i_mode)) {
1270     + ret = ocfs2_set_acl(handle, inode, di_bh,
1271     + ACL_TYPE_DEFAULT, acl,
1272     + meta_ac, data_ac);
1273     + if (ret)
1274     + goto cleanup;
1275     + }
1276     + mode = inode->i_mode;
1277     + ret = __posix_acl_create(&acl, GFP_NOFS, &mode);
1278     + if (ret < 0)
1279     + return ret;
1280     +
1281     + ret2 = ocfs2_acl_set_mode(inode, di_bh, handle, mode);
1282     + if (ret2) {
1283     + mlog_errno(ret2);
1284     + ret = ret2;
1285     + goto cleanup;
1286     + }
1287     + if (ret > 0) {
1288     + ret = ocfs2_set_acl(handle, inode,
1289     + di_bh, ACL_TYPE_ACCESS,
1290     + acl, meta_ac, data_ac);
1291     + }
1292     + }
1293     +cleanup:
1294     + posix_acl_release(acl);
1295     + return ret;
1296     +}
1297     diff --git a/fs/ocfs2/acl.h b/fs/ocfs2/acl.h
1298     index 3fce68d08625..2783a75b3999 100644
1299     --- a/fs/ocfs2/acl.h
1300     +++ b/fs/ocfs2/acl.h
1301     @@ -35,5 +35,10 @@ int ocfs2_set_acl(handle_t *handle,
1302     struct posix_acl *acl,
1303     struct ocfs2_alloc_context *meta_ac,
1304     struct ocfs2_alloc_context *data_ac);
1305     +extern int ocfs2_acl_chmod(struct inode *, struct buffer_head *);
1306     +extern int ocfs2_init_acl(handle_t *, struct inode *, struct inode *,
1307     + struct buffer_head *, struct buffer_head *,
1308     + struct ocfs2_alloc_context *,
1309     + struct ocfs2_alloc_context *);
1310    
1311     #endif /* OCFS2_ACL_H */
1312     diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
1313     index 0e5b4515f92e..77d30cbd944d 100644
1314     --- a/fs/ocfs2/file.c
1315     +++ b/fs/ocfs2/file.c
1316     @@ -1268,20 +1268,20 @@ bail_unlock_rw:
1317     if (size_change)
1318     ocfs2_rw_unlock(inode, 1);
1319     bail:
1320     - brelse(bh);
1321    
1322     /* Release quota pointers in case we acquired them */
1323     for (qtype = 0; qtype < OCFS2_MAXQUOTAS; qtype++)
1324     dqput(transfer_to[qtype]);
1325    
1326     if (!status && attr->ia_valid & ATTR_MODE) {
1327     - status = posix_acl_chmod(inode, inode->i_mode);
1328     + status = ocfs2_acl_chmod(inode, bh);
1329     if (status < 0)
1330     mlog_errno(status);
1331     }
1332     if (inode_locked)
1333     ocfs2_inode_unlock(inode, 1);
1334    
1335     + brelse(bh);
1336     return status;
1337     }
1338    
1339     diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c
1340     index 3123408da935..62af9554541d 100644
1341     --- a/fs/ocfs2/namei.c
1342     +++ b/fs/ocfs2/namei.c
1343     @@ -259,7 +259,6 @@ static int ocfs2_mknod(struct inode *dir,
1344     struct ocfs2_dir_lookup_result lookup = { NULL, };
1345     sigset_t oldset;
1346     int did_block_signals = 0;
1347     - struct posix_acl *default_acl = NULL, *acl = NULL;
1348     struct ocfs2_dentry_lock *dl = NULL;
1349    
1350     trace_ocfs2_mknod(dir, dentry, dentry->d_name.len, dentry->d_name.name,
1351     @@ -367,12 +366,6 @@ static int ocfs2_mknod(struct inode *dir,
1352     goto leave;
1353     }
1354    
1355     - status = posix_acl_create(dir, &inode->i_mode, &default_acl, &acl);
1356     - if (status) {
1357     - mlog_errno(status);
1358     - goto leave;
1359     - }
1360     -
1361     handle = ocfs2_start_trans(osb, ocfs2_mknod_credits(osb->sb,
1362     S_ISDIR(mode),
1363     xattr_credits));
1364     @@ -421,16 +414,8 @@ static int ocfs2_mknod(struct inode *dir,
1365     inc_nlink(dir);
1366     }
1367    
1368     - if (default_acl) {
1369     - status = ocfs2_set_acl(handle, inode, new_fe_bh,
1370     - ACL_TYPE_DEFAULT, default_acl,
1371     - meta_ac, data_ac);
1372     - }
1373     - if (!status && acl) {
1374     - status = ocfs2_set_acl(handle, inode, new_fe_bh,
1375     - ACL_TYPE_ACCESS, acl,
1376     - meta_ac, data_ac);
1377     - }
1378     + status = ocfs2_init_acl(handle, inode, dir, new_fe_bh, parent_fe_bh,
1379     + meta_ac, data_ac);
1380    
1381     if (status < 0) {
1382     mlog_errno(status);
1383     @@ -472,10 +457,6 @@ static int ocfs2_mknod(struct inode *dir,
1384     d_instantiate(dentry, inode);
1385     status = 0;
1386     leave:
1387     - if (default_acl)
1388     - posix_acl_release(default_acl);
1389     - if (acl)
1390     - posix_acl_release(acl);
1391     if (status < 0 && did_quota_inode)
1392     dquot_free_inode(inode);
1393     if (handle)
1394     diff --git a/fs/ocfs2/refcounttree.c b/fs/ocfs2/refcounttree.c
1395     index 252119860e6c..6a0c55d7dff0 100644
1396     --- a/fs/ocfs2/refcounttree.c
1397     +++ b/fs/ocfs2/refcounttree.c
1398     @@ -4248,20 +4248,12 @@ static int ocfs2_reflink(struct dentry *old_dentry, struct inode *dir,
1399     struct inode *inode = d_inode(old_dentry);
1400     struct buffer_head *old_bh = NULL;
1401     struct inode *new_orphan_inode = NULL;
1402     - struct posix_acl *default_acl, *acl;
1403     - umode_t mode;
1404    
1405     if (!ocfs2_refcount_tree(OCFS2_SB(inode->i_sb)))
1406     return -EOPNOTSUPP;
1407    
1408     - mode = inode->i_mode;
1409     - error = posix_acl_create(dir, &mode, &default_acl, &acl);
1410     - if (error) {
1411     - mlog_errno(error);
1412     - return error;
1413     - }
1414    
1415     - error = ocfs2_create_inode_in_orphan(dir, mode,
1416     + error = ocfs2_create_inode_in_orphan(dir, inode->i_mode,
1417     &new_orphan_inode);
1418     if (error) {
1419     mlog_errno(error);
1420     @@ -4300,16 +4292,11 @@ static int ocfs2_reflink(struct dentry *old_dentry, struct inode *dir,
1421     /* If the security isn't preserved, we need to re-initialize them. */
1422     if (!preserve) {
1423     error = ocfs2_init_security_and_acl(dir, new_orphan_inode,
1424     - &new_dentry->d_name,
1425     - default_acl, acl);
1426     + &new_dentry->d_name);
1427     if (error)
1428     mlog_errno(error);
1429     }
1430     out:
1431     - if (default_acl)
1432     - posix_acl_release(default_acl);
1433     - if (acl)
1434     - posix_acl_release(acl);
1435     if (!error) {
1436     error = ocfs2_mv_orphaned_inode_to_new(dir, new_orphan_inode,
1437     new_dentry);
1438     diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
1439     index e9164f09841b..877830b05e12 100644
1440     --- a/fs/ocfs2/xattr.c
1441     +++ b/fs/ocfs2/xattr.c
1442     @@ -7197,12 +7197,10 @@ out:
1443     */
1444     int ocfs2_init_security_and_acl(struct inode *dir,
1445     struct inode *inode,
1446     - const struct qstr *qstr,
1447     - struct posix_acl *default_acl,
1448     - struct posix_acl *acl)
1449     + const struct qstr *qstr)
1450     {
1451     - struct buffer_head *dir_bh = NULL;
1452     int ret = 0;
1453     + struct buffer_head *dir_bh = NULL;
1454    
1455     ret = ocfs2_init_security_get(inode, dir, qstr, NULL);
1456     if (ret) {
1457     @@ -7215,11 +7213,9 @@ int ocfs2_init_security_and_acl(struct inode *dir,
1458     mlog_errno(ret);
1459     goto leave;
1460     }
1461     -
1462     - if (!ret && default_acl)
1463     - ret = ocfs2_iop_set_acl(inode, default_acl, ACL_TYPE_DEFAULT);
1464     - if (!ret && acl)
1465     - ret = ocfs2_iop_set_acl(inode, acl, ACL_TYPE_ACCESS);
1466     + ret = ocfs2_init_acl(NULL, inode, dir, NULL, dir_bh, NULL, NULL);
1467     + if (ret)
1468     + mlog_errno(ret);
1469    
1470     ocfs2_inode_unlock(dir, 0);
1471     brelse(dir_bh);
1472     diff --git a/fs/ocfs2/xattr.h b/fs/ocfs2/xattr.h
1473     index f10d5b93c366..1633cc15ea1f 100644
1474     --- a/fs/ocfs2/xattr.h
1475     +++ b/fs/ocfs2/xattr.h
1476     @@ -94,7 +94,5 @@ int ocfs2_reflink_xattrs(struct inode *old_inode,
1477     bool preserve_security);
1478     int ocfs2_init_security_and_acl(struct inode *dir,
1479     struct inode *inode,
1480     - const struct qstr *qstr,
1481     - struct posix_acl *default_acl,
1482     - struct posix_acl *acl);
1483     + const struct qstr *qstr);
1484     #endif /* OCFS2_XATTR_H */
1485     diff --git a/fs/open.c b/fs/open.c
1486     index 6a24f988d253..157b9940dd73 100644
1487     --- a/fs/open.c
1488     +++ b/fs/open.c
1489     @@ -840,16 +840,12 @@ EXPORT_SYMBOL(file_path);
1490     int vfs_open(const struct path *path, struct file *file,
1491     const struct cred *cred)
1492     {
1493     - struct dentry *dentry = path->dentry;
1494     - struct inode *inode = dentry->d_inode;
1495     + struct inode *inode = vfs_select_inode(path->dentry, file->f_flags);
1496    
1497     - file->f_path = *path;
1498     - if (dentry->d_flags & DCACHE_OP_SELECT_INODE) {
1499     - inode = dentry->d_op->d_select_inode(dentry, file->f_flags);
1500     - if (IS_ERR(inode))
1501     - return PTR_ERR(inode);
1502     - }
1503     + if (IS_ERR(inode))
1504     + return PTR_ERR(inode);
1505    
1506     + file->f_path = *path;
1507     return do_dentry_open(file, inode, NULL, cred);
1508     }
1509    
1510     diff --git a/include/linux/bpf.h b/include/linux/bpf.h
1511     index 83d1926c61e4..67bc2da5d233 100644
1512     --- a/include/linux/bpf.h
1513     +++ b/include/linux/bpf.h
1514     @@ -165,12 +165,13 @@ void bpf_register_prog_type(struct bpf_prog_type_list *tl);
1515     void bpf_register_map_type(struct bpf_map_type_list *tl);
1516    
1517     struct bpf_prog *bpf_prog_get(u32 ufd);
1518     +struct bpf_prog *bpf_prog_inc(struct bpf_prog *prog);
1519     void bpf_prog_put(struct bpf_prog *prog);
1520     void bpf_prog_put_rcu(struct bpf_prog *prog);
1521    
1522     struct bpf_map *bpf_map_get_with_uref(u32 ufd);
1523     struct bpf_map *__bpf_map_get(struct fd f);
1524     -void bpf_map_inc(struct bpf_map *map, bool uref);
1525     +struct bpf_map *bpf_map_inc(struct bpf_map *map, bool uref);
1526     void bpf_map_put_with_uref(struct bpf_map *map);
1527     void bpf_map_put(struct bpf_map *map);
1528    
1529     diff --git a/include/linux/dcache.h b/include/linux/dcache.h
1530     index f513dd855cb2..d81746d3b2da 100644
1531     --- a/include/linux/dcache.h
1532     +++ b/include/linux/dcache.h
1533     @@ -592,4 +592,16 @@ static inline struct dentry *d_real(struct dentry *dentry)
1534     return dentry;
1535     }
1536    
1537     +static inline struct inode *vfs_select_inode(struct dentry *dentry,
1538     + unsigned open_flags)
1539     +{
1540     + struct inode *inode = d_inode(dentry);
1541     +
1542     + if (inode && unlikely(dentry->d_flags & DCACHE_OP_SELECT_INODE))
1543     + inode = dentry->d_op->d_select_inode(dentry, open_flags);
1544     +
1545     + return inode;
1546     +}
1547     +
1548     +
1549     #endif /* __LINUX_DCACHE_H */
1550     diff --git a/include/linux/mfd/samsung/s2mps11.h b/include/linux/mfd/samsung/s2mps11.h
1551     index b288965e8101..2c14eeca46f0 100644
1552     --- a/include/linux/mfd/samsung/s2mps11.h
1553     +++ b/include/linux/mfd/samsung/s2mps11.h
1554     @@ -173,10 +173,12 @@ enum s2mps11_regulators {
1555    
1556     #define S2MPS11_LDO_VSEL_MASK 0x3F
1557     #define S2MPS11_BUCK_VSEL_MASK 0xFF
1558     +#define S2MPS11_BUCK9_VSEL_MASK 0x1F
1559     #define S2MPS11_ENABLE_MASK (0x03 << S2MPS11_ENABLE_SHIFT)
1560     #define S2MPS11_ENABLE_SHIFT 0x06
1561     #define S2MPS11_LDO_N_VOLTAGES (S2MPS11_LDO_VSEL_MASK + 1)
1562     #define S2MPS11_BUCK_N_VOLTAGES (S2MPS11_BUCK_VSEL_MASK + 1)
1563     +#define S2MPS11_BUCK9_N_VOLTAGES (S2MPS11_BUCK9_VSEL_MASK + 1)
1564     #define S2MPS11_RAMP_DELAY 25000 /* uV/us */
1565    
1566     #define S2MPS11_CTRL1_PWRHOLD_MASK BIT(4)
1567     diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h
1568     index af3efd9157f0..412aa988c6ad 100644
1569     --- a/include/linux/mlx5/driver.h
1570     +++ b/include/linux/mlx5/driver.h
1571     @@ -792,9 +792,9 @@ int mlx5_set_port_admin_status(struct mlx5_core_dev *dev,
1572     int mlx5_query_port_admin_status(struct mlx5_core_dev *dev,
1573     enum mlx5_port_status *status);
1574    
1575     -int mlx5_set_port_mtu(struct mlx5_core_dev *dev, int mtu, u8 port);
1576     -void mlx5_query_port_max_mtu(struct mlx5_core_dev *dev, int *max_mtu, u8 port);
1577     -void mlx5_query_port_oper_mtu(struct mlx5_core_dev *dev, int *oper_mtu,
1578     +int mlx5_set_port_mtu(struct mlx5_core_dev *dev, u16 mtu, u8 port);
1579     +void mlx5_query_port_max_mtu(struct mlx5_core_dev *dev, u16 *max_mtu, u8 port);
1580     +void mlx5_query_port_oper_mtu(struct mlx5_core_dev *dev, u16 *oper_mtu,
1581     u8 port);
1582    
1583     int mlx5_query_port_vl_hw_cap(struct mlx5_core_dev *dev,
1584     diff --git a/include/linux/net.h b/include/linux/net.h
1585     index 0b4ac7da583a..25ef630f1bd6 100644
1586     --- a/include/linux/net.h
1587     +++ b/include/linux/net.h
1588     @@ -245,7 +245,15 @@ do { \
1589     net_ratelimited_function(pr_warn, fmt, ##__VA_ARGS__)
1590     #define net_info_ratelimited(fmt, ...) \
1591     net_ratelimited_function(pr_info, fmt, ##__VA_ARGS__)
1592     -#if defined(DEBUG)
1593     +#if defined(CONFIG_DYNAMIC_DEBUG)
1594     +#define net_dbg_ratelimited(fmt, ...) \
1595     +do { \
1596     + DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \
1597     + if (unlikely(descriptor.flags & _DPRINTK_FLAGS_PRINT) && \
1598     + net_ratelimit()) \
1599     + __dynamic_pr_debug(&descriptor, fmt, ##__VA_ARGS__); \
1600     +} while (0)
1601     +#elif defined(DEBUG)
1602     #define net_dbg_ratelimited(fmt, ...) \
1603     net_ratelimited_function(pr_debug, fmt, ##__VA_ARGS__)
1604     #else
1605     diff --git a/include/net/codel.h b/include/net/codel.h
1606     index 267e70210061..d168aca115cc 100644
1607     --- a/include/net/codel.h
1608     +++ b/include/net/codel.h
1609     @@ -162,12 +162,14 @@ struct codel_vars {
1610     * struct codel_stats - contains codel shared variables and stats
1611     * @maxpacket: largest packet we've seen so far
1612     * @drop_count: temp count of dropped packets in dequeue()
1613     + * @drop_len: bytes of dropped packets in dequeue()
1614     * ecn_mark: number of packets we ECN marked instead of dropping
1615     * ce_mark: number of packets CE marked because sojourn time was above ce_threshold
1616     */
1617     struct codel_stats {
1618     u32 maxpacket;
1619     u32 drop_count;
1620     + u32 drop_len;
1621     u32 ecn_mark;
1622     u32 ce_mark;
1623     };
1624     @@ -308,6 +310,7 @@ static struct sk_buff *codel_dequeue(struct Qdisc *sch,
1625     vars->rec_inv_sqrt);
1626     goto end;
1627     }
1628     + stats->drop_len += qdisc_pkt_len(skb);
1629     qdisc_drop(skb, sch);
1630     stats->drop_count++;
1631     skb = dequeue_func(vars, sch);
1632     @@ -330,6 +333,7 @@ static struct sk_buff *codel_dequeue(struct Qdisc *sch,
1633     if (params->ecn && INET_ECN_set_ce(skb)) {
1634     stats->ecn_mark++;
1635     } else {
1636     + stats->drop_len += qdisc_pkt_len(skb);
1637     qdisc_drop(skb, sch);
1638     stats->drop_count++;
1639    
1640     diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
1641     index b2a8e6338576..86df0835f6b5 100644
1642     --- a/include/net/sch_generic.h
1643     +++ b/include/net/sch_generic.h
1644     @@ -396,7 +396,8 @@ struct Qdisc *dev_graft_qdisc(struct netdev_queue *dev_queue,
1645     struct Qdisc *qdisc);
1646     void qdisc_reset(struct Qdisc *qdisc);
1647     void qdisc_destroy(struct Qdisc *qdisc);
1648     -void qdisc_tree_decrease_qlen(struct Qdisc *qdisc, unsigned int n);
1649     +void qdisc_tree_reduce_backlog(struct Qdisc *qdisc, unsigned int n,
1650     + unsigned int len);
1651     struct Qdisc *qdisc_alloc(struct netdev_queue *dev_queue,
1652     const struct Qdisc_ops *ops);
1653     struct Qdisc *qdisc_create_dflt(struct netdev_queue *dev_queue,
1654     @@ -698,6 +699,23 @@ static inline void qdisc_reset_queue(struct Qdisc *sch)
1655     sch->qstats.backlog = 0;
1656     }
1657    
1658     +static inline struct Qdisc *qdisc_replace(struct Qdisc *sch, struct Qdisc *new,
1659     + struct Qdisc **pold)
1660     +{
1661     + struct Qdisc *old;
1662     +
1663     + sch_tree_lock(sch);
1664     + old = *pold;
1665     + *pold = new;
1666     + if (old != NULL) {
1667     + qdisc_tree_reduce_backlog(old, old->q.qlen, old->qstats.backlog);
1668     + qdisc_reset(old);
1669     + }
1670     + sch_tree_unlock(sch);
1671     +
1672     + return old;
1673     +}
1674     +
1675     static inline unsigned int __qdisc_queue_drop(struct Qdisc *sch,
1676     struct sk_buff_head *list)
1677     {
1678     diff --git a/include/uapi/linux/if.h b/include/uapi/linux/if.h
1679     index 9cf2394f0bcf..752f5dc040a5 100644
1680     --- a/include/uapi/linux/if.h
1681     +++ b/include/uapi/linux/if.h
1682     @@ -19,14 +19,20 @@
1683     #ifndef _LINUX_IF_H
1684     #define _LINUX_IF_H
1685    
1686     +#include <linux/libc-compat.h> /* for compatibility with glibc */
1687     #include <linux/types.h> /* for "__kernel_caddr_t" et al */
1688     #include <linux/socket.h> /* for "struct sockaddr" et al */
1689     #include <linux/compiler.h> /* for "__user" et al */
1690    
1691     +#if __UAPI_DEF_IF_IFNAMSIZ
1692     #define IFNAMSIZ 16
1693     +#endif /* __UAPI_DEF_IF_IFNAMSIZ */
1694     #define IFALIASZ 256
1695     #include <linux/hdlc/ioctl.h>
1696    
1697     +/* For glibc compatibility. An empty enum does not compile. */
1698     +#if __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO != 0 && \
1699     + __UAPI_DEF_IF_NET_DEVICE_FLAGS != 0
1700     /**
1701     * enum net_device_flags - &struct net_device flags
1702     *
1703     @@ -68,6 +74,8 @@
1704     * @IFF_ECHO: echo sent packets. Volatile.
1705     */
1706     enum net_device_flags {
1707     +/* for compatibility with glibc net/if.h */
1708     +#if __UAPI_DEF_IF_NET_DEVICE_FLAGS
1709     IFF_UP = 1<<0, /* sysfs */
1710     IFF_BROADCAST = 1<<1, /* volatile */
1711     IFF_DEBUG = 1<<2, /* sysfs */
1712     @@ -84,11 +92,17 @@ enum net_device_flags {
1713     IFF_PORTSEL = 1<<13, /* sysfs */
1714     IFF_AUTOMEDIA = 1<<14, /* sysfs */
1715     IFF_DYNAMIC = 1<<15, /* sysfs */
1716     +#endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS */
1717     +#if __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO
1718     IFF_LOWER_UP = 1<<16, /* volatile */
1719     IFF_DORMANT = 1<<17, /* volatile */
1720     IFF_ECHO = 1<<18, /* volatile */
1721     +#endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO */
1722     };
1723     +#endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO != 0 && __UAPI_DEF_IF_NET_DEVICE_FLAGS != 0 */
1724    
1725     +/* for compatibility with glibc net/if.h */
1726     +#if __UAPI_DEF_IF_NET_DEVICE_FLAGS
1727     #define IFF_UP IFF_UP
1728     #define IFF_BROADCAST IFF_BROADCAST
1729     #define IFF_DEBUG IFF_DEBUG
1730     @@ -105,9 +119,13 @@ enum net_device_flags {
1731     #define IFF_PORTSEL IFF_PORTSEL
1732     #define IFF_AUTOMEDIA IFF_AUTOMEDIA
1733     #define IFF_DYNAMIC IFF_DYNAMIC
1734     +#endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS */
1735     +
1736     +#if __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO
1737     #define IFF_LOWER_UP IFF_LOWER_UP
1738     #define IFF_DORMANT IFF_DORMANT
1739     #define IFF_ECHO IFF_ECHO
1740     +#endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO */
1741    
1742     #define IFF_VOLATILE (IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST|IFF_ECHO|\
1743     IFF_MASTER|IFF_SLAVE|IFF_RUNNING|IFF_LOWER_UP|IFF_DORMANT)
1744     @@ -166,6 +184,8 @@ enum {
1745     * being very small might be worth keeping for clean configuration.
1746     */
1747    
1748     +/* for compatibility with glibc net/if.h */
1749     +#if __UAPI_DEF_IF_IFMAP
1750     struct ifmap {
1751     unsigned long mem_start;
1752     unsigned long mem_end;
1753     @@ -175,6 +195,7 @@ struct ifmap {
1754     unsigned char port;
1755     /* 3 bytes spare */
1756     };
1757     +#endif /* __UAPI_DEF_IF_IFMAP */
1758    
1759     struct if_settings {
1760     unsigned int type; /* Type of physical device or protocol */
1761     @@ -200,6 +221,8 @@ struct if_settings {
1762     * remainder may be interface specific.
1763     */
1764    
1765     +/* for compatibility with glibc net/if.h */
1766     +#if __UAPI_DEF_IF_IFREQ
1767     struct ifreq {
1768     #define IFHWADDRLEN 6
1769     union
1770     @@ -223,6 +246,7 @@ struct ifreq {
1771     struct if_settings ifru_settings;
1772     } ifr_ifru;
1773     };
1774     +#endif /* __UAPI_DEF_IF_IFREQ */
1775    
1776     #define ifr_name ifr_ifrn.ifrn_name /* interface name */
1777     #define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */
1778     @@ -249,6 +273,8 @@ struct ifreq {
1779     * must know all networks accessible).
1780     */
1781    
1782     +/* for compatibility with glibc net/if.h */
1783     +#if __UAPI_DEF_IF_IFCONF
1784     struct ifconf {
1785     int ifc_len; /* size of buffer */
1786     union {
1787     @@ -256,6 +282,8 @@ struct ifconf {
1788     struct ifreq __user *ifcu_req;
1789     } ifc_ifcu;
1790     };
1791     +#endif /* __UAPI_DEF_IF_IFCONF */
1792     +
1793     #define ifc_buf ifc_ifcu.ifcu_buf /* buffer address */
1794     #define ifc_req ifc_ifcu.ifcu_req /* array of structures */
1795    
1796     diff --git a/include/uapi/linux/libc-compat.h b/include/uapi/linux/libc-compat.h
1797     index 7d024ceb075d..d5e38c73377c 100644
1798     --- a/include/uapi/linux/libc-compat.h
1799     +++ b/include/uapi/linux/libc-compat.h
1800     @@ -51,6 +51,40 @@
1801     /* We have included glibc headers... */
1802     #if defined(__GLIBC__)
1803    
1804     +/* Coordinate with glibc net/if.h header. */
1805     +#if defined(_NET_IF_H)
1806     +
1807     +/* GLIBC headers included first so don't define anything
1808     + * that would already be defined. */
1809     +
1810     +#define __UAPI_DEF_IF_IFCONF 0
1811     +#define __UAPI_DEF_IF_IFMAP 0
1812     +#define __UAPI_DEF_IF_IFNAMSIZ 0
1813     +#define __UAPI_DEF_IF_IFREQ 0
1814     +/* Everything up to IFF_DYNAMIC, matches net/if.h until glibc 2.23 */
1815     +#define __UAPI_DEF_IF_NET_DEVICE_FLAGS 0
1816     +/* For the future if glibc adds IFF_LOWER_UP, IFF_DORMANT and IFF_ECHO */
1817     +#ifndef __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO
1818     +#define __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO 1
1819     +#endif /* __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO */
1820     +
1821     +#else /* _NET_IF_H */
1822     +
1823     +/* Linux headers included first, and we must define everything
1824     + * we need. The expectation is that glibc will check the
1825     + * __UAPI_DEF_* defines and adjust appropriately. */
1826     +
1827     +#define __UAPI_DEF_IF_IFCONF 1
1828     +#define __UAPI_DEF_IF_IFMAP 1
1829     +#define __UAPI_DEF_IF_IFNAMSIZ 1
1830     +#define __UAPI_DEF_IF_IFREQ 1
1831     +/* Everything up to IFF_DYNAMIC, matches net/if.h until glibc 2.23 */
1832     +#define __UAPI_DEF_IF_NET_DEVICE_FLAGS 1
1833     +/* For the future if glibc adds IFF_LOWER_UP, IFF_DORMANT and IFF_ECHO */
1834     +#define __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO 1
1835     +
1836     +#endif /* _NET_IF_H */
1837     +
1838     /* Coordinate with glibc netinet/in.h header. */
1839     #if defined(_NETINET_IN_H)
1840    
1841     @@ -117,6 +151,16 @@
1842     * that we need. */
1843     #else /* !defined(__GLIBC__) */
1844    
1845     +/* Definitions for if.h */
1846     +#define __UAPI_DEF_IF_IFCONF 1
1847     +#define __UAPI_DEF_IF_IFMAP 1
1848     +#define __UAPI_DEF_IF_IFNAMSIZ 1
1849     +#define __UAPI_DEF_IF_IFREQ 1
1850     +/* Everything up to IFF_DYNAMIC, matches net/if.h until glibc 2.23 */
1851     +#define __UAPI_DEF_IF_NET_DEVICE_FLAGS 1
1852     +/* For the future if glibc adds IFF_LOWER_UP, IFF_DORMANT and IFF_ECHO */
1853     +#define __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO 1
1854     +
1855     /* Definitions for in.h */
1856     #define __UAPI_DEF_IN_ADDR 1
1857     #define __UAPI_DEF_IN_IPPROTO 1
1858     diff --git a/kernel/bpf/inode.c b/kernel/bpf/inode.c
1859     index 5a8a797d50b7..d1a7646f79c5 100644
1860     --- a/kernel/bpf/inode.c
1861     +++ b/kernel/bpf/inode.c
1862     @@ -31,10 +31,10 @@ static void *bpf_any_get(void *raw, enum bpf_type type)
1863     {
1864     switch (type) {
1865     case BPF_TYPE_PROG:
1866     - atomic_inc(&((struct bpf_prog *)raw)->aux->refcnt);
1867     + raw = bpf_prog_inc(raw);
1868     break;
1869     case BPF_TYPE_MAP:
1870     - bpf_map_inc(raw, true);
1871     + raw = bpf_map_inc(raw, true);
1872     break;
1873     default:
1874     WARN_ON_ONCE(1);
1875     @@ -277,7 +277,8 @@ static void *bpf_obj_do_get(const struct filename *pathname,
1876     goto out;
1877    
1878     raw = bpf_any_get(inode->i_private, *type);
1879     - touch_atime(&path);
1880     + if (!IS_ERR(raw))
1881     + touch_atime(&path);
1882    
1883     path_put(&path);
1884     return raw;
1885     diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
1886     index 3b39550d8485..4e32cc94edd9 100644
1887     --- a/kernel/bpf/syscall.c
1888     +++ b/kernel/bpf/syscall.c
1889     @@ -181,11 +181,18 @@ struct bpf_map *__bpf_map_get(struct fd f)
1890     return f.file->private_data;
1891     }
1892    
1893     -void bpf_map_inc(struct bpf_map *map, bool uref)
1894     +/* prog's and map's refcnt limit */
1895     +#define BPF_MAX_REFCNT 32768
1896     +
1897     +struct bpf_map *bpf_map_inc(struct bpf_map *map, bool uref)
1898     {
1899     - atomic_inc(&map->refcnt);
1900     + if (atomic_inc_return(&map->refcnt) > BPF_MAX_REFCNT) {
1901     + atomic_dec(&map->refcnt);
1902     + return ERR_PTR(-EBUSY);
1903     + }
1904     if (uref)
1905     atomic_inc(&map->usercnt);
1906     + return map;
1907     }
1908    
1909     struct bpf_map *bpf_map_get_with_uref(u32 ufd)
1910     @@ -197,7 +204,7 @@ struct bpf_map *bpf_map_get_with_uref(u32 ufd)
1911     if (IS_ERR(map))
1912     return map;
1913    
1914     - bpf_map_inc(map, true);
1915     + map = bpf_map_inc(map, true);
1916     fdput(f);
1917    
1918     return map;
1919     @@ -580,6 +587,15 @@ static struct bpf_prog *__bpf_prog_get(struct fd f)
1920     return f.file->private_data;
1921     }
1922    
1923     +struct bpf_prog *bpf_prog_inc(struct bpf_prog *prog)
1924     +{
1925     + if (atomic_inc_return(&prog->aux->refcnt) > BPF_MAX_REFCNT) {
1926     + atomic_dec(&prog->aux->refcnt);
1927     + return ERR_PTR(-EBUSY);
1928     + }
1929     + return prog;
1930     +}
1931     +
1932     /* called by sockets/tracing/seccomp before attaching program to an event
1933     * pairs with bpf_prog_put()
1934     */
1935     @@ -592,7 +608,7 @@ struct bpf_prog *bpf_prog_get(u32 ufd)
1936     if (IS_ERR(prog))
1937     return prog;
1938    
1939     - atomic_inc(&prog->aux->refcnt);
1940     + prog = bpf_prog_inc(prog);
1941     fdput(f);
1942    
1943     return prog;
1944     diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
1945     index 2e7f7ab739e4..2cbfba78d3db 100644
1946     --- a/kernel/bpf/verifier.c
1947     +++ b/kernel/bpf/verifier.c
1948     @@ -239,15 +239,6 @@ static const char * const reg_type_str[] = {
1949     [CONST_IMM] = "imm",
1950     };
1951    
1952     -static const struct {
1953     - int map_type;
1954     - int func_id;
1955     -} func_limit[] = {
1956     - {BPF_MAP_TYPE_PROG_ARRAY, BPF_FUNC_tail_call},
1957     - {BPF_MAP_TYPE_PERF_EVENT_ARRAY, BPF_FUNC_perf_event_read},
1958     - {BPF_MAP_TYPE_PERF_EVENT_ARRAY, BPF_FUNC_perf_event_output},
1959     -};
1960     -
1961     static void print_verifier_state(struct verifier_env *env)
1962     {
1963     enum bpf_reg_type t;
1964     @@ -898,24 +889,44 @@ static int check_func_arg(struct verifier_env *env, u32 regno,
1965    
1966     static int check_map_func_compatibility(struct bpf_map *map, int func_id)
1967     {
1968     - bool bool_map, bool_func;
1969     - int i;
1970     -
1971     if (!map)
1972     return 0;
1973    
1974     - for (i = 0; i < ARRAY_SIZE(func_limit); i++) {
1975     - bool_map = (map->map_type == func_limit[i].map_type);
1976     - bool_func = (func_id == func_limit[i].func_id);
1977     - /* only when map & func pair match it can continue.
1978     - * don't allow any other map type to be passed into
1979     - * the special func;
1980     - */
1981     - if (bool_func && bool_map != bool_func)
1982     - return -EINVAL;
1983     + /* We need a two way check, first is from map perspective ... */
1984     + switch (map->map_type) {
1985     + case BPF_MAP_TYPE_PROG_ARRAY:
1986     + if (func_id != BPF_FUNC_tail_call)
1987     + goto error;
1988     + break;
1989     + case BPF_MAP_TYPE_PERF_EVENT_ARRAY:
1990     + if (func_id != BPF_FUNC_perf_event_read &&
1991     + func_id != BPF_FUNC_perf_event_output)
1992     + goto error;
1993     + break;
1994     + default:
1995     + break;
1996     + }
1997     +
1998     + /* ... and second from the function itself. */
1999     + switch (func_id) {
2000     + case BPF_FUNC_tail_call:
2001     + if (map->map_type != BPF_MAP_TYPE_PROG_ARRAY)
2002     + goto error;
2003     + break;
2004     + case BPF_FUNC_perf_event_read:
2005     + case BPF_FUNC_perf_event_output:
2006     + if (map->map_type != BPF_MAP_TYPE_PERF_EVENT_ARRAY)
2007     + goto error;
2008     + break;
2009     + default:
2010     + break;
2011     }
2012    
2013     return 0;
2014     +error:
2015     + verbose("cannot pass map_type %d into func %d\n",
2016     + map->map_type, func_id);
2017     + return -EINVAL;
2018     }
2019    
2020     static int check_call(struct verifier_env *env, int func_id)
2021     @@ -1348,6 +1359,7 @@ static int check_ld_abs(struct verifier_env *env, struct bpf_insn *insn)
2022     }
2023    
2024     if (insn->dst_reg != BPF_REG_0 || insn->off != 0 ||
2025     + BPF_SIZE(insn->code) == BPF_DW ||
2026     (mode == BPF_ABS && insn->src_reg != BPF_REG_0)) {
2027     verbose("BPF_LD_ABS uses reserved fields\n");
2028     return -EINVAL;
2029     @@ -2003,7 +2015,6 @@ static int replace_map_fd_with_map_ptr(struct verifier_env *env)
2030     if (IS_ERR(map)) {
2031     verbose("fd %d is not pointing to valid bpf_map\n",
2032     insn->imm);
2033     - fdput(f);
2034     return PTR_ERR(map);
2035     }
2036    
2037     @@ -2023,15 +2034,18 @@ static int replace_map_fd_with_map_ptr(struct verifier_env *env)
2038     return -E2BIG;
2039     }
2040    
2041     - /* remember this map */
2042     - env->used_maps[env->used_map_cnt++] = map;
2043     -
2044     /* hold the map. If the program is rejected by verifier,
2045     * the map will be released by release_maps() or it
2046     * will be used by the valid program until it's unloaded
2047     * and all maps are released in free_bpf_prog_info()
2048     */
2049     - bpf_map_inc(map, false);
2050     + map = bpf_map_inc(map, false);
2051     + if (IS_ERR(map)) {
2052     + fdput(f);
2053     + return PTR_ERR(map);
2054     + }
2055     + env->used_maps[env->used_map_cnt++] = map;
2056     +
2057     fdput(f);
2058     next_insn:
2059     insn++;
2060     diff --git a/kernel/events/ring_buffer.c b/kernel/events/ring_buffer.c
2061     index adfdc0536117..014b69528194 100644
2062     --- a/kernel/events/ring_buffer.c
2063     +++ b/kernel/events/ring_buffer.c
2064     @@ -347,6 +347,7 @@ void perf_aux_output_end(struct perf_output_handle *handle, unsigned long size,
2065     bool truncated)
2066     {
2067     struct ring_buffer *rb = handle->rb;
2068     + bool wakeup = truncated;
2069     unsigned long aux_head;
2070     u64 flags = 0;
2071    
2072     @@ -375,9 +376,16 @@ void perf_aux_output_end(struct perf_output_handle *handle, unsigned long size,
2073     aux_head = rb->user_page->aux_head = local_read(&rb->aux_head);
2074    
2075     if (aux_head - local_read(&rb->aux_wakeup) >= rb->aux_watermark) {
2076     - perf_output_wakeup(handle);
2077     + wakeup = true;
2078     local_add(rb->aux_watermark, &rb->aux_wakeup);
2079     }
2080     +
2081     + if (wakeup) {
2082     + if (truncated)
2083     + handle->event->pending_disable = 1;
2084     + perf_output_wakeup(handle);
2085     + }
2086     +
2087     handle->event = NULL;
2088    
2089     local_set(&rb->aux_nest, 0);
2090     diff --git a/kernel/workqueue.c b/kernel/workqueue.c
2091     index 0ec05948a97b..2c2f971f3e75 100644
2092     --- a/kernel/workqueue.c
2093     +++ b/kernel/workqueue.c
2094     @@ -4457,6 +4457,17 @@ static void rebind_workers(struct worker_pool *pool)
2095     pool->attrs->cpumask) < 0);
2096    
2097     spin_lock_irq(&pool->lock);
2098     +
2099     + /*
2100     + * XXX: CPU hotplug notifiers are weird and can call DOWN_FAILED
2101     + * w/o preceding DOWN_PREPARE. Work around it. CPU hotplug is
2102     + * being reworked and this can go away in time.
2103     + */
2104     + if (!(pool->flags & POOL_DISASSOCIATED)) {
2105     + spin_unlock_irq(&pool->lock);
2106     + return;
2107     + }
2108     +
2109     pool->flags &= ~POOL_DISASSOCIATED;
2110    
2111     for_each_pool_worker(worker, pool) {
2112     diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c
2113     index fc083996e40a..c1ea19478119 100644
2114     --- a/mm/zsmalloc.c
2115     +++ b/mm/zsmalloc.c
2116     @@ -1732,10 +1732,13 @@ static struct page *isolate_source_page(struct size_class *class)
2117     static unsigned long zs_can_compact(struct size_class *class)
2118     {
2119     unsigned long obj_wasted;
2120     + unsigned long obj_allocated = zs_stat_get(class, OBJ_ALLOCATED);
2121     + unsigned long obj_used = zs_stat_get(class, OBJ_USED);
2122    
2123     - obj_wasted = zs_stat_get(class, OBJ_ALLOCATED) -
2124     - zs_stat_get(class, OBJ_USED);
2125     + if (obj_allocated <= obj_used)
2126     + return 0;
2127    
2128     + obj_wasted = obj_allocated - obj_used;
2129     obj_wasted /= get_maxobj_per_zspage(class->size,
2130     class->pages_per_zspage);
2131    
2132     diff --git a/net/bridge/br_ioctl.c b/net/bridge/br_ioctl.c
2133     index 263b4de4de57..60a3dbfca8a1 100644
2134     --- a/net/bridge/br_ioctl.c
2135     +++ b/net/bridge/br_ioctl.c
2136     @@ -21,18 +21,19 @@
2137     #include <asm/uaccess.h>
2138     #include "br_private.h"
2139    
2140     -/* called with RTNL */
2141     static int get_bridge_ifindices(struct net *net, int *indices, int num)
2142     {
2143     struct net_device *dev;
2144     int i = 0;
2145    
2146     - for_each_netdev(net, dev) {
2147     + rcu_read_lock();
2148     + for_each_netdev_rcu(net, dev) {
2149     if (i >= num)
2150     break;
2151     if (dev->priv_flags & IFF_EBRIDGE)
2152     indices[i++] = dev->ifindex;
2153     }
2154     + rcu_read_unlock();
2155    
2156     return i;
2157     }
2158     diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
2159     index 03661d97463c..ea9893743a0f 100644
2160     --- a/net/bridge/br_multicast.c
2161     +++ b/net/bridge/br_multicast.c
2162     @@ -1270,6 +1270,7 @@ static int br_ip4_multicast_query(struct net_bridge *br,
2163     struct br_ip saddr;
2164     unsigned long max_delay;
2165     unsigned long now = jiffies;
2166     + unsigned int offset = skb_transport_offset(skb);
2167     __be32 group;
2168     int err = 0;
2169    
2170     @@ -1280,14 +1281,14 @@ static int br_ip4_multicast_query(struct net_bridge *br,
2171    
2172     group = ih->group;
2173    
2174     - if (skb->len == sizeof(*ih)) {
2175     + if (skb->len == offset + sizeof(*ih)) {
2176     max_delay = ih->code * (HZ / IGMP_TIMER_SCALE);
2177    
2178     if (!max_delay) {
2179     max_delay = 10 * HZ;
2180     group = 0;
2181     }
2182     - } else if (skb->len >= sizeof(*ih3)) {
2183     + } else if (skb->len >= offset + sizeof(*ih3)) {
2184     ih3 = igmpv3_query_hdr(skb);
2185     if (ih3->nsrcs)
2186     goto out;
2187     @@ -1348,6 +1349,7 @@ static int br_ip6_multicast_query(struct net_bridge *br,
2188     struct br_ip saddr;
2189     unsigned long max_delay;
2190     unsigned long now = jiffies;
2191     + unsigned int offset = skb_transport_offset(skb);
2192     const struct in6_addr *group = NULL;
2193     bool is_general_query;
2194     int err = 0;
2195     @@ -1357,8 +1359,8 @@ static int br_ip6_multicast_query(struct net_bridge *br,
2196     (port && port->state == BR_STATE_DISABLED))
2197     goto out;
2198    
2199     - if (skb->len == sizeof(*mld)) {
2200     - if (!pskb_may_pull(skb, sizeof(*mld))) {
2201     + if (skb->len == offset + sizeof(*mld)) {
2202     + if (!pskb_may_pull(skb, offset + sizeof(*mld))) {
2203     err = -EINVAL;
2204     goto out;
2205     }
2206     @@ -1367,7 +1369,7 @@ static int br_ip6_multicast_query(struct net_bridge *br,
2207     if (max_delay)
2208     group = &mld->mld_mca;
2209     } else {
2210     - if (!pskb_may_pull(skb, sizeof(*mld2q))) {
2211     + if (!pskb_may_pull(skb, offset + sizeof(*mld2q))) {
2212     err = -EINVAL;
2213     goto out;
2214     }
2215     diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
2216     index ca966f7de351..87b91ffbdec3 100644
2217     --- a/net/core/rtnetlink.c
2218     +++ b/net/core/rtnetlink.c
2219     @@ -1175,14 +1175,16 @@ static noinline_for_stack int rtnl_fill_vfinfo(struct sk_buff *skb,
2220    
2221     static int rtnl_fill_link_ifmap(struct sk_buff *skb, struct net_device *dev)
2222     {
2223     - struct rtnl_link_ifmap map = {
2224     - .mem_start = dev->mem_start,
2225     - .mem_end = dev->mem_end,
2226     - .base_addr = dev->base_addr,
2227     - .irq = dev->irq,
2228     - .dma = dev->dma,
2229     - .port = dev->if_port,
2230     - };
2231     + struct rtnl_link_ifmap map;
2232     +
2233     + memset(&map, 0, sizeof(map));
2234     + map.mem_start = dev->mem_start;
2235     + map.mem_end = dev->mem_end;
2236     + map.base_addr = dev->base_addr;
2237     + map.irq = dev->irq;
2238     + map.dma = dev->dma;
2239     + map.port = dev->if_port;
2240     +
2241     if (nla_put(skb, IFLA_MAP, sizeof(map), &map))
2242     return -EMSGSIZE;
2243    
2244     diff --git a/net/core/skbuff.c b/net/core/skbuff.c
2245     index 8616d1147c93..9835d9a8a7a4 100644
2246     --- a/net/core/skbuff.c
2247     +++ b/net/core/skbuff.c
2248     @@ -4427,15 +4427,16 @@ int skb_vlan_push(struct sk_buff *skb, __be16 vlan_proto, u16 vlan_tci)
2249     __skb_push(skb, offset);
2250     err = __vlan_insert_tag(skb, skb->vlan_proto,
2251     skb_vlan_tag_get(skb));
2252     - if (err)
2253     + if (err) {
2254     + __skb_pull(skb, offset);
2255     return err;
2256     + }
2257     +
2258     skb->protocol = skb->vlan_proto;
2259     skb->mac_len += VLAN_HLEN;
2260     - __skb_pull(skb, offset);
2261    
2262     - if (skb->ip_summed == CHECKSUM_COMPLETE)
2263     - skb->csum = csum_add(skb->csum, csum_partial(skb->data
2264     - + (2 * ETH_ALEN), VLAN_HLEN, 0));
2265     + skb_postpush_rcsum(skb, skb->data + (2 * ETH_ALEN), VLAN_HLEN);
2266     + __skb_pull(skb, offset);
2267     }
2268     __vlan_hwaccel_put_tag(skb, vlan_proto, vlan_tci);
2269     return 0;
2270     diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c
2271     index 607a14f20d88..b1dc096d22f8 100644
2272     --- a/net/decnet/dn_route.c
2273     +++ b/net/decnet/dn_route.c
2274     @@ -1034,10 +1034,13 @@ source_ok:
2275     if (!fld.daddr) {
2276     fld.daddr = fld.saddr;
2277    
2278     - err = -EADDRNOTAVAIL;
2279     if (dev_out)
2280     dev_put(dev_out);
2281     + err = -EINVAL;
2282     dev_out = init_net.loopback_dev;
2283     + if (!dev_out->dn_ptr)
2284     + goto out;
2285     + err = -EADDRNOTAVAIL;
2286     dev_hold(dev_out);
2287     if (!fld.daddr) {
2288     fld.daddr =
2289     @@ -1110,6 +1113,8 @@ source_ok:
2290     if (dev_out == NULL)
2291     goto out;
2292     dn_db = rcu_dereference_raw(dev_out->dn_ptr);
2293     + if (!dn_db)
2294     + goto e_inval;
2295     /* Possible improvement - check all devices for local addr */
2296     if (dn_dev_islocal(dev_out, fld.daddr)) {
2297     dev_put(dev_out);
2298     @@ -1151,6 +1156,8 @@ select_source:
2299     dev_put(dev_out);
2300     dev_out = init_net.loopback_dev;
2301     dev_hold(dev_out);
2302     + if (!dev_out->dn_ptr)
2303     + goto e_inval;
2304     fld.flowidn_oif = dev_out->ifindex;
2305     if (res.fi)
2306     dn_fib_info_put(res.fi);
2307     diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
2308     index 8a9246deccfe..63566ec54794 100644
2309     --- a/net/ipv4/fib_frontend.c
2310     +++ b/net/ipv4/fib_frontend.c
2311     @@ -904,7 +904,11 @@ void fib_del_ifaddr(struct in_ifaddr *ifa, struct in_ifaddr *iprim)
2312     if (ifa->ifa_flags & IFA_F_SECONDARY) {
2313     prim = inet_ifa_byprefix(in_dev, any, ifa->ifa_mask);
2314     if (!prim) {
2315     - pr_warn("%s: bug: prim == NULL\n", __func__);
2316     + /* if the device has been deleted, we don't perform
2317     + * address promotion
2318     + */
2319     + if (!in_dev->dead)
2320     + pr_warn("%s: bug: prim == NULL\n", __func__);
2321     return;
2322     }
2323     if (iprim && iprim != prim) {
2324     diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
2325     index d97268e8ff10..2b68418c7198 100644
2326     --- a/net/ipv4/fib_semantics.c
2327     +++ b/net/ipv4/fib_semantics.c
2328     @@ -975,6 +975,8 @@ fib_convert_metrics(struct fib_info *fi, const struct fib_config *cfg)
2329     val = 65535 - 40;
2330     if (type == RTAX_MTU && val > 65535 - 15)
2331     val = 65535 - 15;
2332     + if (type == RTAX_HOPLIMIT && val > 255)
2333     + val = 255;
2334     if (type == RTAX_FEATURES && (val & ~RTAX_FEATURE_MASK))
2335     return -EINVAL;
2336     fi->fib_metrics[type - 1] = val;
2337     diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
2338     index 614521437e30..7dc962b89fa1 100644
2339     --- a/net/ipv4/ip_gre.c
2340     +++ b/net/ipv4/ip_gre.c
2341     @@ -180,6 +180,7 @@ static __be16 tnl_flags_to_gre_flags(__be16 tflags)
2342     return flags;
2343     }
2344    
2345     +/* Fills in tpi and returns header length to be pulled. */
2346     static int parse_gre_header(struct sk_buff *skb, struct tnl_ptk_info *tpi,
2347     bool *csum_err)
2348     {
2349     @@ -239,7 +240,7 @@ static int parse_gre_header(struct sk_buff *skb, struct tnl_ptk_info *tpi,
2350     return -EINVAL;
2351     }
2352     }
2353     - return iptunnel_pull_header(skb, hdr_len, tpi->proto);
2354     + return hdr_len;
2355     }
2356    
2357     static void ipgre_err(struct sk_buff *skb, u32 info,
2358     @@ -342,7 +343,7 @@ static void gre_err(struct sk_buff *skb, u32 info)
2359     struct tnl_ptk_info tpi;
2360     bool csum_err = false;
2361    
2362     - if (parse_gre_header(skb, &tpi, &csum_err)) {
2363     + if (parse_gre_header(skb, &tpi, &csum_err) < 0) {
2364     if (!csum_err) /* ignore csum errors. */
2365     return;
2366     }
2367     @@ -420,6 +421,7 @@ static int gre_rcv(struct sk_buff *skb)
2368     {
2369     struct tnl_ptk_info tpi;
2370     bool csum_err = false;
2371     + int hdr_len;
2372    
2373     #ifdef CONFIG_NET_IPGRE_BROADCAST
2374     if (ipv4_is_multicast(ip_hdr(skb)->daddr)) {
2375     @@ -429,7 +431,10 @@ static int gre_rcv(struct sk_buff *skb)
2376     }
2377     #endif
2378    
2379     - if (parse_gre_header(skb, &tpi, &csum_err) < 0)
2380     + hdr_len = parse_gre_header(skb, &tpi, &csum_err);
2381     + if (hdr_len < 0)
2382     + goto drop;
2383     + if (iptunnel_pull_header(skb, hdr_len, tpi.proto) < 0)
2384     goto drop;
2385    
2386     if (ipgre_rcv(skb, &tpi) == PACKET_RCVD)
2387     diff --git a/net/ipv4/route.c b/net/ipv4/route.c
2388     index 02c62299d717..b050cf980a57 100644
2389     --- a/net/ipv4/route.c
2390     +++ b/net/ipv4/route.c
2391     @@ -2045,6 +2045,18 @@ static struct rtable *__mkroute_output(const struct fib_result *res,
2392     */
2393     if (fi && res->prefixlen < 4)
2394     fi = NULL;
2395     + } else if ((type == RTN_LOCAL) && (orig_oif != 0) &&
2396     + (orig_oif != dev_out->ifindex)) {
2397     + /* For local routes that require a particular output interface
2398     + * we do not want to cache the result. Caching the result
2399     + * causes incorrect behaviour when there are multiple source
2400     + * addresses on the interface, the end result being that if the
2401     + * intended recipient is waiting on that interface for the
2402     + * packet he won't receive it because it will be delivered on
2403     + * the loopback interface and the IP_PKTINFO ipi_ifindex will
2404     + * be set to the loopback interface as well.
2405     + */
2406     + fi = NULL;
2407     }
2408    
2409     fnhe = NULL;
2410     diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
2411     index 9bfc39ff2285..7c9883ab56e5 100644
2412     --- a/net/ipv4/tcp_output.c
2413     +++ b/net/ipv4/tcp_output.c
2414     @@ -2625,8 +2625,10 @@ int __tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb)
2415     */
2416     if (unlikely((NET_IP_ALIGN && ((unsigned long)skb->data & 3)) ||
2417     skb_headroom(skb) >= 0xFFFF)) {
2418     - struct sk_buff *nskb = __pskb_copy(skb, MAX_TCP_HEADER,
2419     - GFP_ATOMIC);
2420     + struct sk_buff *nskb;
2421     +
2422     + skb_mstamp_get(&skb->skb_mstamp);
2423     + nskb = __pskb_copy(skb, MAX_TCP_HEADER, GFP_ATOMIC);
2424     err = nskb ? tcp_transmit_skb(sk, nskb, 0, GFP_ATOMIC) :
2425     -ENOBUFS;
2426     } else {
2427     diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c
2428     index 45f5ae51de65..a234552a7e3d 100644
2429     --- a/net/ipv6/reassembly.c
2430     +++ b/net/ipv6/reassembly.c
2431     @@ -496,10 +496,8 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff *prev,
2432     IP6CB(head)->flags |= IP6SKB_FRAGMENTED;
2433    
2434     /* Yes, and fold redundant checksum back. 8) */
2435     - if (head->ip_summed == CHECKSUM_COMPLETE)
2436     - head->csum = csum_partial(skb_network_header(head),
2437     - skb_network_header_len(head),
2438     - head->csum);
2439     + skb_postpush_rcsum(head, skb_network_header(head),
2440     + skb_network_header_len(head));
2441    
2442     rcu_read_lock();
2443     IP6_INC_STATS_BH(net, __in6_dev_get(dev), IPSTATS_MIB_REASMOKS);
2444     diff --git a/net/ipv6/route.c b/net/ipv6/route.c
2445     index 3f164d3aaee2..5af2cca0a46d 100644
2446     --- a/net/ipv6/route.c
2447     +++ b/net/ipv6/route.c
2448     @@ -1727,6 +1727,8 @@ static int ip6_convert_metrics(struct mx6_config *mxc,
2449     } else {
2450     val = nla_get_u32(nla);
2451     }
2452     + if (type == RTAX_HOPLIMIT && val > 255)
2453     + val = 255;
2454     if (type == RTAX_FEATURES && (val & ~RTAX_FEATURE_MASK))
2455     goto err;
2456    
2457     diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c
2458     index 8dab4e569571..bb8edb9ef506 100644
2459     --- a/net/llc/af_llc.c
2460     +++ b/net/llc/af_llc.c
2461     @@ -626,6 +626,7 @@ static void llc_cmsg_rcv(struct msghdr *msg, struct sk_buff *skb)
2462     if (llc->cmsg_flags & LLC_CMSG_PKTINFO) {
2463     struct llc_pktinfo info;
2464    
2465     + memset(&info, 0, sizeof(info));
2466     info.lpi_ifindex = llc_sk(skb->sk)->dev->ifindex;
2467     llc_pdu_decode_dsap(skb, &info.lpi_sap);
2468     llc_pdu_decode_da(skb, info.lpi_mac);
2469     diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
2470     index 3cb3cb831591..86a3c6f0c871 100644
2471     --- a/net/netfilter/nf_conntrack_core.c
2472     +++ b/net/netfilter/nf_conntrack_core.c
2473     @@ -1757,6 +1757,7 @@ void nf_conntrack_init_end(void)
2474    
2475     int nf_conntrack_init_net(struct net *net)
2476     {
2477     + static atomic64_t unique_id;
2478     int ret = -ENOMEM;
2479     int cpu;
2480    
2481     @@ -1779,7 +1780,8 @@ int nf_conntrack_init_net(struct net *net)
2482     if (!net->ct.stat)
2483     goto err_pcpu_lists;
2484    
2485     - net->ct.slabname = kasprintf(GFP_KERNEL, "nf_conntrack_%p", net);
2486     + net->ct.slabname = kasprintf(GFP_KERNEL, "nf_conntrack_%llu",
2487     + (u64)atomic64_inc_return(&unique_id));
2488     if (!net->ct.slabname)
2489     goto err_slabname;
2490    
2491     diff --git a/net/openvswitch/actions.c b/net/openvswitch/actions.c
2492     index c88d0f2d3e01..7cb8184ac165 100644
2493     --- a/net/openvswitch/actions.c
2494     +++ b/net/openvswitch/actions.c
2495     @@ -158,9 +158,7 @@ static int push_mpls(struct sk_buff *skb, struct sw_flow_key *key,
2496     new_mpls_lse = (__be32 *)skb_mpls_header(skb);
2497     *new_mpls_lse = mpls->mpls_lse;
2498    
2499     - if (skb->ip_summed == CHECKSUM_COMPLETE)
2500     - skb->csum = csum_add(skb->csum, csum_partial(new_mpls_lse,
2501     - MPLS_HLEN, 0));
2502     + skb_postpush_rcsum(skb, new_mpls_lse, MPLS_HLEN);
2503    
2504     hdr = eth_hdr(skb);
2505     hdr->h_proto = mpls->mpls_ethertype;
2506     @@ -280,7 +278,7 @@ static int set_eth_addr(struct sk_buff *skb, struct sw_flow_key *flow_key,
2507     ether_addr_copy_masked(eth_hdr(skb)->h_dest, key->eth_dst,
2508     mask->eth_dst);
2509    
2510     - ovs_skb_postpush_rcsum(skb, eth_hdr(skb), ETH_ALEN * 2);
2511     + skb_postpush_rcsum(skb, eth_hdr(skb), ETH_ALEN * 2);
2512    
2513     ether_addr_copy(flow_key->eth.src, eth_hdr(skb)->h_source);
2514     ether_addr_copy(flow_key->eth.dst, eth_hdr(skb)->h_dest);
2515     @@ -463,7 +461,7 @@ static int set_ipv6(struct sk_buff *skb, struct sw_flow_key *flow_key,
2516     mask_ipv6_addr(saddr, key->ipv6_src, mask->ipv6_src, masked);
2517    
2518     if (unlikely(memcmp(saddr, masked, sizeof(masked)))) {
2519     - set_ipv6_addr(skb, key->ipv6_proto, saddr, masked,
2520     + set_ipv6_addr(skb, flow_key->ip.proto, saddr, masked,
2521     true);
2522     memcpy(&flow_key->ipv6.addr.src, masked,
2523     sizeof(flow_key->ipv6.addr.src));
2524     @@ -485,7 +483,7 @@ static int set_ipv6(struct sk_buff *skb, struct sw_flow_key *flow_key,
2525     NULL, &flags)
2526     != NEXTHDR_ROUTING);
2527    
2528     - set_ipv6_addr(skb, key->ipv6_proto, daddr, masked,
2529     + set_ipv6_addr(skb, flow_key->ip.proto, daddr, masked,
2530     recalc_csum);
2531     memcpy(&flow_key->ipv6.addr.dst, masked,
2532     sizeof(flow_key->ipv6.addr.dst));
2533     @@ -639,7 +637,7 @@ static int ovs_vport_output(struct net *net, struct sock *sk, struct sk_buff *sk
2534     /* Reconstruct the MAC header. */
2535     skb_push(skb, data->l2_len);
2536     memcpy(skb->data, &data->l2_data, data->l2_len);
2537     - ovs_skb_postpush_rcsum(skb, skb->data, data->l2_len);
2538     + skb_postpush_rcsum(skb, skb->data, data->l2_len);
2539     skb_reset_mac_header(skb);
2540    
2541     ovs_vport_send(vport, skb);
2542     diff --git a/net/openvswitch/vport-netdev.c b/net/openvswitch/vport-netdev.c
2543     index 6b0190b987ec..76fcaf1fd2a9 100644
2544     --- a/net/openvswitch/vport-netdev.c
2545     +++ b/net/openvswitch/vport-netdev.c
2546     @@ -58,7 +58,7 @@ static void netdev_port_receive(struct sk_buff *skb)
2547     return;
2548    
2549     skb_push(skb, ETH_HLEN);
2550     - ovs_skb_postpush_rcsum(skb, skb->data, ETH_HLEN);
2551     + skb_postpush_rcsum(skb, skb->data, ETH_HLEN);
2552     ovs_vport_receive(vport, skb, skb_tunnel_info(skb));
2553     return;
2554     error:
2555     diff --git a/net/openvswitch/vport.h b/net/openvswitch/vport.h
2556     index 8ea3a96980ac..6e2b62f9d595 100644
2557     --- a/net/openvswitch/vport.h
2558     +++ b/net/openvswitch/vport.h
2559     @@ -184,13 +184,6 @@ static inline struct vport *vport_from_priv(void *priv)
2560     int ovs_vport_receive(struct vport *, struct sk_buff *,
2561     const struct ip_tunnel_info *);
2562    
2563     -static inline void ovs_skb_postpush_rcsum(struct sk_buff *skb,
2564     - const void *start, unsigned int len)
2565     -{
2566     - if (skb->ip_summed == CHECKSUM_COMPLETE)
2567     - skb->csum = csum_add(skb->csum, csum_partial(start, len, 0));
2568     -}
2569     -
2570     static inline const char *ovs_vport_name(struct vport *vport)
2571     {
2572     return vport->dev->name;
2573     diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
2574     index da1ae0e13cb5..9cc7b512b472 100644
2575     --- a/net/packet/af_packet.c
2576     +++ b/net/packet/af_packet.c
2577     @@ -3436,6 +3436,7 @@ static int packet_mc_add(struct sock *sk, struct packet_mreq_max *mreq)
2578     i->ifindex = mreq->mr_ifindex;
2579     i->alen = mreq->mr_alen;
2580     memcpy(i->addr, mreq->mr_address, i->alen);
2581     + memset(i->addr + i->alen, 0, sizeof(i->addr) - i->alen);
2582     i->count = 1;
2583     i->next = po->mclist;
2584     po->mclist = i;
2585     diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
2586     index af1acf009866..95b560f0b253 100644
2587     --- a/net/sched/sch_api.c
2588     +++ b/net/sched/sch_api.c
2589     @@ -744,14 +744,15 @@ static u32 qdisc_alloc_handle(struct net_device *dev)
2590     return 0;
2591     }
2592    
2593     -void qdisc_tree_decrease_qlen(struct Qdisc *sch, unsigned int n)
2594     +void qdisc_tree_reduce_backlog(struct Qdisc *sch, unsigned int n,
2595     + unsigned int len)
2596     {
2597     const struct Qdisc_class_ops *cops;
2598     unsigned long cl;
2599     u32 parentid;
2600     int drops;
2601    
2602     - if (n == 0)
2603     + if (n == 0 && len == 0)
2604     return;
2605     drops = max_t(int, n, 0);
2606     rcu_read_lock();
2607     @@ -774,11 +775,12 @@ void qdisc_tree_decrease_qlen(struct Qdisc *sch, unsigned int n)
2608     cops->put(sch, cl);
2609     }
2610     sch->q.qlen -= n;
2611     + sch->qstats.backlog -= len;
2612     __qdisc_qstats_drop(sch, drops);
2613     }
2614     rcu_read_unlock();
2615     }
2616     -EXPORT_SYMBOL(qdisc_tree_decrease_qlen);
2617     +EXPORT_SYMBOL(qdisc_tree_reduce_backlog);
2618    
2619     static void notify_and_destroy(struct net *net, struct sk_buff *skb,
2620     struct nlmsghdr *n, u32 clid,
2621     diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c
2622     index c538d9e4a8f6..baafddf229ce 100644
2623     --- a/net/sched/sch_cbq.c
2624     +++ b/net/sched/sch_cbq.c
2625     @@ -1624,13 +1624,8 @@ static int cbq_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
2626     new->reshape_fail = cbq_reshape_fail;
2627     #endif
2628     }
2629     - sch_tree_lock(sch);
2630     - *old = cl->q;
2631     - cl->q = new;
2632     - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
2633     - qdisc_reset(*old);
2634     - sch_tree_unlock(sch);
2635    
2636     + *old = qdisc_replace(sch, new, &cl->q);
2637     return 0;
2638     }
2639    
2640     @@ -1914,7 +1909,7 @@ static int cbq_delete(struct Qdisc *sch, unsigned long arg)
2641     {
2642     struct cbq_sched_data *q = qdisc_priv(sch);
2643     struct cbq_class *cl = (struct cbq_class *)arg;
2644     - unsigned int qlen;
2645     + unsigned int qlen, backlog;
2646    
2647     if (cl->filters || cl->children || cl == &q->link)
2648     return -EBUSY;
2649     @@ -1922,8 +1917,9 @@ static int cbq_delete(struct Qdisc *sch, unsigned long arg)
2650     sch_tree_lock(sch);
2651    
2652     qlen = cl->q->q.qlen;
2653     + backlog = cl->q->qstats.backlog;
2654     qdisc_reset(cl->q);
2655     - qdisc_tree_decrease_qlen(cl->q, qlen);
2656     + qdisc_tree_reduce_backlog(cl->q, qlen, backlog);
2657    
2658     if (cl->next_alive)
2659     cbq_deactivate_class(cl);
2660     diff --git a/net/sched/sch_choke.c b/net/sched/sch_choke.c
2661     index 5ffb8b8337c7..0a08c860eee4 100644
2662     --- a/net/sched/sch_choke.c
2663     +++ b/net/sched/sch_choke.c
2664     @@ -128,8 +128,8 @@ static void choke_drop_by_idx(struct Qdisc *sch, unsigned int idx)
2665     choke_zap_tail_holes(q);
2666    
2667     qdisc_qstats_backlog_dec(sch, skb);
2668     + qdisc_tree_reduce_backlog(sch, 1, qdisc_pkt_len(skb));
2669     qdisc_drop(skb, sch);
2670     - qdisc_tree_decrease_qlen(sch, 1);
2671     --sch->q.qlen;
2672     }
2673    
2674     @@ -456,6 +456,7 @@ static int choke_change(struct Qdisc *sch, struct nlattr *opt)
2675     old = q->tab;
2676     if (old) {
2677     unsigned int oqlen = sch->q.qlen, tail = 0;
2678     + unsigned dropped = 0;
2679    
2680     while (q->head != q->tail) {
2681     struct sk_buff *skb = q->tab[q->head];
2682     @@ -467,11 +468,12 @@ static int choke_change(struct Qdisc *sch, struct nlattr *opt)
2683     ntab[tail++] = skb;
2684     continue;
2685     }
2686     + dropped += qdisc_pkt_len(skb);
2687     qdisc_qstats_backlog_dec(sch, skb);
2688     --sch->q.qlen;
2689     qdisc_drop(skb, sch);
2690     }
2691     - qdisc_tree_decrease_qlen(sch, oqlen - sch->q.qlen);
2692     + qdisc_tree_reduce_backlog(sch, oqlen - sch->q.qlen, dropped);
2693     q->head = 0;
2694     q->tail = tail;
2695     }
2696     diff --git a/net/sched/sch_codel.c b/net/sched/sch_codel.c
2697     index 535007d5f0b5..9b7e2980ee5c 100644
2698     --- a/net/sched/sch_codel.c
2699     +++ b/net/sched/sch_codel.c
2700     @@ -79,12 +79,13 @@ static struct sk_buff *codel_qdisc_dequeue(struct Qdisc *sch)
2701    
2702     skb = codel_dequeue(sch, &q->params, &q->vars, &q->stats, dequeue);
2703    
2704     - /* We cant call qdisc_tree_decrease_qlen() if our qlen is 0,
2705     + /* We cant call qdisc_tree_reduce_backlog() if our qlen is 0,
2706     * or HTB crashes. Defer it for next round.
2707     */
2708     if (q->stats.drop_count && sch->q.qlen) {
2709     - qdisc_tree_decrease_qlen(sch, q->stats.drop_count);
2710     + qdisc_tree_reduce_backlog(sch, q->stats.drop_count, q->stats.drop_len);
2711     q->stats.drop_count = 0;
2712     + q->stats.drop_len = 0;
2713     }
2714     if (skb)
2715     qdisc_bstats_update(sch, skb);
2716     @@ -116,7 +117,7 @@ static int codel_change(struct Qdisc *sch, struct nlattr *opt)
2717     {
2718     struct codel_sched_data *q = qdisc_priv(sch);
2719     struct nlattr *tb[TCA_CODEL_MAX + 1];
2720     - unsigned int qlen;
2721     + unsigned int qlen, dropped = 0;
2722     int err;
2723    
2724     if (!opt)
2725     @@ -156,10 +157,11 @@ static int codel_change(struct Qdisc *sch, struct nlattr *opt)
2726     while (sch->q.qlen > sch->limit) {
2727     struct sk_buff *skb = __skb_dequeue(&sch->q);
2728    
2729     + dropped += qdisc_pkt_len(skb);
2730     qdisc_qstats_backlog_dec(sch, skb);
2731     qdisc_drop(skb, sch);
2732     }
2733     - qdisc_tree_decrease_qlen(sch, qlen - sch->q.qlen);
2734     + qdisc_tree_reduce_backlog(sch, qlen - sch->q.qlen, dropped);
2735    
2736     sch_tree_unlock(sch);
2737     return 0;
2738     diff --git a/net/sched/sch_drr.c b/net/sched/sch_drr.c
2739     index f26bdea875c1..d6e3ad43cecb 100644
2740     --- a/net/sched/sch_drr.c
2741     +++ b/net/sched/sch_drr.c
2742     @@ -53,9 +53,10 @@ static struct drr_class *drr_find_class(struct Qdisc *sch, u32 classid)
2743     static void drr_purge_queue(struct drr_class *cl)
2744     {
2745     unsigned int len = cl->qdisc->q.qlen;
2746     + unsigned int backlog = cl->qdisc->qstats.backlog;
2747    
2748     qdisc_reset(cl->qdisc);
2749     - qdisc_tree_decrease_qlen(cl->qdisc, len);
2750     + qdisc_tree_reduce_backlog(cl->qdisc, len, backlog);
2751     }
2752    
2753     static const struct nla_policy drr_policy[TCA_DRR_MAX + 1] = {
2754     @@ -226,11 +227,7 @@ static int drr_graft_class(struct Qdisc *sch, unsigned long arg,
2755     new = &noop_qdisc;
2756     }
2757    
2758     - sch_tree_lock(sch);
2759     - drr_purge_queue(cl);
2760     - *old = cl->qdisc;
2761     - cl->qdisc = new;
2762     - sch_tree_unlock(sch);
2763     + *old = qdisc_replace(sch, new, &cl->qdisc);
2764     return 0;
2765     }
2766    
2767     diff --git a/net/sched/sch_dsmark.c b/net/sched/sch_dsmark.c
2768     index f357f34d02d2..d0dff0cd8186 100644
2769     --- a/net/sched/sch_dsmark.c
2770     +++ b/net/sched/sch_dsmark.c
2771     @@ -73,13 +73,7 @@ static int dsmark_graft(struct Qdisc *sch, unsigned long arg,
2772     new = &noop_qdisc;
2773     }
2774    
2775     - sch_tree_lock(sch);
2776     - *old = p->q;
2777     - p->q = new;
2778     - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
2779     - qdisc_reset(*old);
2780     - sch_tree_unlock(sch);
2781     -
2782     + *old = qdisc_replace(sch, new, &p->q);
2783     return 0;
2784     }
2785    
2786     @@ -264,6 +258,7 @@ static int dsmark_enqueue(struct sk_buff *skb, struct Qdisc *sch)
2787     return err;
2788     }
2789    
2790     + qdisc_qstats_backlog_inc(sch, skb);
2791     sch->q.qlen++;
2792    
2793     return NET_XMIT_SUCCESS;
2794     @@ -286,6 +281,7 @@ static struct sk_buff *dsmark_dequeue(struct Qdisc *sch)
2795     return NULL;
2796    
2797     qdisc_bstats_update(sch, skb);
2798     + qdisc_qstats_backlog_dec(sch, skb);
2799     sch->q.qlen--;
2800    
2801     index = skb->tc_index & (p->indices - 1);
2802     @@ -401,6 +397,7 @@ static void dsmark_reset(struct Qdisc *sch)
2803    
2804     pr_debug("%s(sch %p,[qdisc %p])\n", __func__, sch, p);
2805     qdisc_reset(p->q);
2806     + sch->qstats.backlog = 0;
2807     sch->q.qlen = 0;
2808     }
2809    
2810     diff --git a/net/sched/sch_fq.c b/net/sched/sch_fq.c
2811     index 109b2322778f..3c6a47d66a04 100644
2812     --- a/net/sched/sch_fq.c
2813     +++ b/net/sched/sch_fq.c
2814     @@ -662,6 +662,7 @@ static int fq_change(struct Qdisc *sch, struct nlattr *opt)
2815     struct fq_sched_data *q = qdisc_priv(sch);
2816     struct nlattr *tb[TCA_FQ_MAX + 1];
2817     int err, drop_count = 0;
2818     + unsigned drop_len = 0;
2819     u32 fq_log;
2820    
2821     if (!opt)
2822     @@ -736,10 +737,11 @@ static int fq_change(struct Qdisc *sch, struct nlattr *opt)
2823    
2824     if (!skb)
2825     break;
2826     + drop_len += qdisc_pkt_len(skb);
2827     kfree_skb(skb);
2828     drop_count++;
2829     }
2830     - qdisc_tree_decrease_qlen(sch, drop_count);
2831     + qdisc_tree_reduce_backlog(sch, drop_count, drop_len);
2832    
2833     sch_tree_unlock(sch);
2834     return err;
2835     diff --git a/net/sched/sch_fq_codel.c b/net/sched/sch_fq_codel.c
2836     index 4c834e93dafb..d3fc8f9dd3d4 100644
2837     --- a/net/sched/sch_fq_codel.c
2838     +++ b/net/sched/sch_fq_codel.c
2839     @@ -175,7 +175,7 @@ static unsigned int fq_codel_qdisc_drop(struct Qdisc *sch)
2840     static int fq_codel_enqueue(struct sk_buff *skb, struct Qdisc *sch)
2841     {
2842     struct fq_codel_sched_data *q = qdisc_priv(sch);
2843     - unsigned int idx;
2844     + unsigned int idx, prev_backlog;
2845     struct fq_codel_flow *flow;
2846     int uninitialized_var(ret);
2847    
2848     @@ -203,6 +203,7 @@ static int fq_codel_enqueue(struct sk_buff *skb, struct Qdisc *sch)
2849     if (++sch->q.qlen <= sch->limit)
2850     return NET_XMIT_SUCCESS;
2851    
2852     + prev_backlog = sch->qstats.backlog;
2853     q->drop_overlimit++;
2854     /* Return Congestion Notification only if we dropped a packet
2855     * from this flow.
2856     @@ -211,7 +212,7 @@ static int fq_codel_enqueue(struct sk_buff *skb, struct Qdisc *sch)
2857     return NET_XMIT_CN;
2858    
2859     /* As we dropped a packet, better let upper stack know this */
2860     - qdisc_tree_decrease_qlen(sch, 1);
2861     + qdisc_tree_reduce_backlog(sch, 1, prev_backlog - sch->qstats.backlog);
2862     return NET_XMIT_SUCCESS;
2863     }
2864    
2865     @@ -241,6 +242,7 @@ static struct sk_buff *fq_codel_dequeue(struct Qdisc *sch)
2866     struct fq_codel_flow *flow;
2867     struct list_head *head;
2868     u32 prev_drop_count, prev_ecn_mark;
2869     + unsigned int prev_backlog;
2870    
2871     begin:
2872     head = &q->new_flows;
2873     @@ -259,6 +261,7 @@ begin:
2874    
2875     prev_drop_count = q->cstats.drop_count;
2876     prev_ecn_mark = q->cstats.ecn_mark;
2877     + prev_backlog = sch->qstats.backlog;
2878    
2879     skb = codel_dequeue(sch, &q->cparams, &flow->cvars, &q->cstats,
2880     dequeue);
2881     @@ -276,12 +279,14 @@ begin:
2882     }
2883     qdisc_bstats_update(sch, skb);
2884     flow->deficit -= qdisc_pkt_len(skb);
2885     - /* We cant call qdisc_tree_decrease_qlen() if our qlen is 0,
2886     + /* We cant call qdisc_tree_reduce_backlog() if our qlen is 0,
2887     * or HTB crashes. Defer it for next round.
2888     */
2889     if (q->cstats.drop_count && sch->q.qlen) {
2890     - qdisc_tree_decrease_qlen(sch, q->cstats.drop_count);
2891     + qdisc_tree_reduce_backlog(sch, q->cstats.drop_count,
2892     + q->cstats.drop_len);
2893     q->cstats.drop_count = 0;
2894     + q->cstats.drop_len = 0;
2895     }
2896     return skb;
2897     }
2898     @@ -372,11 +377,13 @@ static int fq_codel_change(struct Qdisc *sch, struct nlattr *opt)
2899     while (sch->q.qlen > sch->limit) {
2900     struct sk_buff *skb = fq_codel_dequeue(sch);
2901    
2902     + q->cstats.drop_len += qdisc_pkt_len(skb);
2903     kfree_skb(skb);
2904     q->cstats.drop_count++;
2905     }
2906     - qdisc_tree_decrease_qlen(sch, q->cstats.drop_count);
2907     + qdisc_tree_reduce_backlog(sch, q->cstats.drop_count, q->cstats.drop_len);
2908     q->cstats.drop_count = 0;
2909     + q->cstats.drop_len = 0;
2910    
2911     sch_tree_unlock(sch);
2912     return 0;
2913     diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
2914     index 16bc83b2842a..aa4725038f94 100644
2915     --- a/net/sched/sch_generic.c
2916     +++ b/net/sched/sch_generic.c
2917     @@ -159,12 +159,15 @@ int sch_direct_xmit(struct sk_buff *skb, struct Qdisc *q,
2918     if (validate)
2919     skb = validate_xmit_skb_list(skb, dev);
2920    
2921     - if (skb) {
2922     + if (likely(skb)) {
2923     HARD_TX_LOCK(dev, txq, smp_processor_id());
2924     if (!netif_xmit_frozen_or_stopped(txq))
2925     skb = dev_hard_start_xmit(skb, dev, txq, &ret);
2926    
2927     HARD_TX_UNLOCK(dev, txq);
2928     + } else {
2929     + spin_lock(root_lock);
2930     + return qdisc_qlen(q);
2931     }
2932     spin_lock(root_lock);
2933    
2934     diff --git a/net/sched/sch_hfsc.c b/net/sched/sch_hfsc.c
2935     index b7ebe2c87586..d783d7cc3348 100644
2936     --- a/net/sched/sch_hfsc.c
2937     +++ b/net/sched/sch_hfsc.c
2938     @@ -895,9 +895,10 @@ static void
2939     hfsc_purge_queue(struct Qdisc *sch, struct hfsc_class *cl)
2940     {
2941     unsigned int len = cl->qdisc->q.qlen;
2942     + unsigned int backlog = cl->qdisc->qstats.backlog;
2943    
2944     qdisc_reset(cl->qdisc);
2945     - qdisc_tree_decrease_qlen(cl->qdisc, len);
2946     + qdisc_tree_reduce_backlog(cl->qdisc, len, backlog);
2947     }
2948    
2949     static void
2950     @@ -1215,11 +1216,7 @@ hfsc_graft_class(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
2951     new = &noop_qdisc;
2952     }
2953    
2954     - sch_tree_lock(sch);
2955     - hfsc_purge_queue(sch, cl);
2956     - *old = cl->qdisc;
2957     - cl->qdisc = new;
2958     - sch_tree_unlock(sch);
2959     + *old = qdisc_replace(sch, new, &cl->qdisc);
2960     return 0;
2961     }
2962    
2963     diff --git a/net/sched/sch_hhf.c b/net/sched/sch_hhf.c
2964     index 86b04e31e60b..13d6f83ec491 100644
2965     --- a/net/sched/sch_hhf.c
2966     +++ b/net/sched/sch_hhf.c
2967     @@ -382,6 +382,7 @@ static int hhf_enqueue(struct sk_buff *skb, struct Qdisc *sch)
2968     struct hhf_sched_data *q = qdisc_priv(sch);
2969     enum wdrr_bucket_idx idx;
2970     struct wdrr_bucket *bucket;
2971     + unsigned int prev_backlog;
2972    
2973     idx = hhf_classify(skb, sch);
2974    
2975     @@ -409,6 +410,7 @@ static int hhf_enqueue(struct sk_buff *skb, struct Qdisc *sch)
2976     if (++sch->q.qlen <= sch->limit)
2977     return NET_XMIT_SUCCESS;
2978    
2979     + prev_backlog = sch->qstats.backlog;
2980     q->drop_overlimit++;
2981     /* Return Congestion Notification only if we dropped a packet from this
2982     * bucket.
2983     @@ -417,7 +419,7 @@ static int hhf_enqueue(struct sk_buff *skb, struct Qdisc *sch)
2984     return NET_XMIT_CN;
2985    
2986     /* As we dropped a packet, better let upper stack know this. */
2987     - qdisc_tree_decrease_qlen(sch, 1);
2988     + qdisc_tree_reduce_backlog(sch, 1, prev_backlog - sch->qstats.backlog);
2989     return NET_XMIT_SUCCESS;
2990     }
2991    
2992     @@ -527,7 +529,7 @@ static int hhf_change(struct Qdisc *sch, struct nlattr *opt)
2993     {
2994     struct hhf_sched_data *q = qdisc_priv(sch);
2995     struct nlattr *tb[TCA_HHF_MAX + 1];
2996     - unsigned int qlen;
2997     + unsigned int qlen, prev_backlog;
2998     int err;
2999     u64 non_hh_quantum;
3000     u32 new_quantum = q->quantum;
3001     @@ -577,12 +579,14 @@ static int hhf_change(struct Qdisc *sch, struct nlattr *opt)
3002     }
3003    
3004     qlen = sch->q.qlen;
3005     + prev_backlog = sch->qstats.backlog;
3006     while (sch->q.qlen > sch->limit) {
3007     struct sk_buff *skb = hhf_dequeue(sch);
3008    
3009     kfree_skb(skb);
3010     }
3011     - qdisc_tree_decrease_qlen(sch, qlen - sch->q.qlen);
3012     + qdisc_tree_reduce_backlog(sch, qlen - sch->q.qlen,
3013     + prev_backlog - sch->qstats.backlog);
3014    
3015     sch_tree_unlock(sch);
3016     return 0;
3017     diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c
3018     index 15ccd7f8fb2a..87b02ed3d5f2 100644
3019     --- a/net/sched/sch_htb.c
3020     +++ b/net/sched/sch_htb.c
3021     @@ -600,6 +600,7 @@ static int htb_enqueue(struct sk_buff *skb, struct Qdisc *sch)
3022     htb_activate(q, cl);
3023     }
3024    
3025     + qdisc_qstats_backlog_inc(sch, skb);
3026     sch->q.qlen++;
3027     return NET_XMIT_SUCCESS;
3028     }
3029     @@ -889,6 +890,7 @@ static struct sk_buff *htb_dequeue(struct Qdisc *sch)
3030     ok:
3031     qdisc_bstats_update(sch, skb);
3032     qdisc_unthrottled(sch);
3033     + qdisc_qstats_backlog_dec(sch, skb);
3034     sch->q.qlen--;
3035     return skb;
3036     }
3037     @@ -955,6 +957,7 @@ static unsigned int htb_drop(struct Qdisc *sch)
3038     unsigned int len;
3039     if (cl->un.leaf.q->ops->drop &&
3040     (len = cl->un.leaf.q->ops->drop(cl->un.leaf.q))) {
3041     + sch->qstats.backlog -= len;
3042     sch->q.qlen--;
3043     if (!cl->un.leaf.q->q.qlen)
3044     htb_deactivate(q, cl);
3045     @@ -984,12 +987,12 @@ static void htb_reset(struct Qdisc *sch)
3046     }
3047     cl->prio_activity = 0;
3048     cl->cmode = HTB_CAN_SEND;
3049     -
3050     }
3051     }
3052     qdisc_watchdog_cancel(&q->watchdog);
3053     __skb_queue_purge(&q->direct_queue);
3054     sch->q.qlen = 0;
3055     + sch->qstats.backlog = 0;
3056     memset(q->hlevel, 0, sizeof(q->hlevel));
3057     memset(q->row_mask, 0, sizeof(q->row_mask));
3058     for (i = 0; i < TC_HTB_NUMPRIO; i++)
3059     @@ -1163,14 +1166,7 @@ static int htb_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
3060     cl->common.classid)) == NULL)
3061     return -ENOBUFS;
3062    
3063     - sch_tree_lock(sch);
3064     - *old = cl->un.leaf.q;
3065     - cl->un.leaf.q = new;
3066     - if (*old != NULL) {
3067     - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
3068     - qdisc_reset(*old);
3069     - }
3070     - sch_tree_unlock(sch);
3071     + *old = qdisc_replace(sch, new, &cl->un.leaf.q);
3072     return 0;
3073     }
3074    
3075     @@ -1272,7 +1268,6 @@ static int htb_delete(struct Qdisc *sch, unsigned long arg)
3076     {
3077     struct htb_sched *q = qdisc_priv(sch);
3078     struct htb_class *cl = (struct htb_class *)arg;
3079     - unsigned int qlen;
3080     struct Qdisc *new_q = NULL;
3081     int last_child = 0;
3082    
3083     @@ -1292,9 +1287,11 @@ static int htb_delete(struct Qdisc *sch, unsigned long arg)
3084     sch_tree_lock(sch);
3085    
3086     if (!cl->level) {
3087     - qlen = cl->un.leaf.q->q.qlen;
3088     + unsigned int qlen = cl->un.leaf.q->q.qlen;
3089     + unsigned int backlog = cl->un.leaf.q->qstats.backlog;
3090     +
3091     qdisc_reset(cl->un.leaf.q);
3092     - qdisc_tree_decrease_qlen(cl->un.leaf.q, qlen);
3093     + qdisc_tree_reduce_backlog(cl->un.leaf.q, qlen, backlog);
3094     }
3095    
3096     /* delete from hash and active; remainder in destroy_class */
3097     @@ -1428,10 +1425,11 @@ static int htb_change_class(struct Qdisc *sch, u32 classid,
3098     sch_tree_lock(sch);
3099     if (parent && !parent->level) {
3100     unsigned int qlen = parent->un.leaf.q->q.qlen;
3101     + unsigned int backlog = parent->un.leaf.q->qstats.backlog;
3102    
3103     /* turn parent into inner node */
3104     qdisc_reset(parent->un.leaf.q);
3105     - qdisc_tree_decrease_qlen(parent->un.leaf.q, qlen);
3106     + qdisc_tree_reduce_backlog(parent->un.leaf.q, qlen, backlog);
3107     qdisc_destroy(parent->un.leaf.q);
3108     if (parent->prio_activity)
3109     htb_deactivate(q, parent);
3110     diff --git a/net/sched/sch_multiq.c b/net/sched/sch_multiq.c
3111     index 4e904ca0af9d..bcdd54bb101c 100644
3112     --- a/net/sched/sch_multiq.c
3113     +++ b/net/sched/sch_multiq.c
3114     @@ -218,7 +218,8 @@ static int multiq_tune(struct Qdisc *sch, struct nlattr *opt)
3115     if (q->queues[i] != &noop_qdisc) {
3116     struct Qdisc *child = q->queues[i];
3117     q->queues[i] = &noop_qdisc;
3118     - qdisc_tree_decrease_qlen(child, child->q.qlen);
3119     + qdisc_tree_reduce_backlog(child, child->q.qlen,
3120     + child->qstats.backlog);
3121     qdisc_destroy(child);
3122     }
3123     }
3124     @@ -238,8 +239,9 @@ static int multiq_tune(struct Qdisc *sch, struct nlattr *opt)
3125     q->queues[i] = child;
3126    
3127     if (old != &noop_qdisc) {
3128     - qdisc_tree_decrease_qlen(old,
3129     - old->q.qlen);
3130     + qdisc_tree_reduce_backlog(old,
3131     + old->q.qlen,
3132     + old->qstats.backlog);
3133     qdisc_destroy(old);
3134     }
3135     sch_tree_unlock(sch);
3136     @@ -303,13 +305,7 @@ static int multiq_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
3137     if (new == NULL)
3138     new = &noop_qdisc;
3139    
3140     - sch_tree_lock(sch);
3141     - *old = q->queues[band];
3142     - q->queues[band] = new;
3143     - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
3144     - qdisc_reset(*old);
3145     - sch_tree_unlock(sch);
3146     -
3147     + *old = qdisc_replace(sch, new, &q->queues[band]);
3148     return 0;
3149     }
3150    
3151     diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c
3152     index 5abd1d9de989..4befe97a9034 100644
3153     --- a/net/sched/sch_netem.c
3154     +++ b/net/sched/sch_netem.c
3155     @@ -395,6 +395,25 @@ static void tfifo_enqueue(struct sk_buff *nskb, struct Qdisc *sch)
3156     sch->q.qlen++;
3157     }
3158    
3159     +/* netem can't properly corrupt a megapacket (like we get from GSO), so instead
3160     + * when we statistically choose to corrupt one, we instead segment it, returning
3161     + * the first packet to be corrupted, and re-enqueue the remaining frames
3162     + */
3163     +static struct sk_buff *netem_segment(struct sk_buff *skb, struct Qdisc *sch)
3164     +{
3165     + struct sk_buff *segs;
3166     + netdev_features_t features = netif_skb_features(skb);
3167     +
3168     + segs = skb_gso_segment(skb, features & ~NETIF_F_GSO_MASK);
3169     +
3170     + if (IS_ERR_OR_NULL(segs)) {
3171     + qdisc_reshape_fail(skb, sch);
3172     + return NULL;
3173     + }
3174     + consume_skb(skb);
3175     + return segs;
3176     +}
3177     +
3178     /*
3179     * Insert one skb into qdisc.
3180     * Note: parent depends on return value to account for queue length.
3181     @@ -407,7 +426,11 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch)
3182     /* We don't fill cb now as skb_unshare() may invalidate it */
3183     struct netem_skb_cb *cb;
3184     struct sk_buff *skb2;
3185     + struct sk_buff *segs = NULL;
3186     + unsigned int len = 0, last_len, prev_len = qdisc_pkt_len(skb);
3187     + int nb = 0;
3188     int count = 1;
3189     + int rc = NET_XMIT_SUCCESS;
3190    
3191     /* Random duplication */
3192     if (q->duplicate && q->duplicate >= get_crandom(&q->dup_cor))
3193     @@ -453,10 +476,23 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch)
3194     * do it now in software before we mangle it.
3195     */
3196     if (q->corrupt && q->corrupt >= get_crandom(&q->corrupt_cor)) {
3197     + if (skb_is_gso(skb)) {
3198     + segs = netem_segment(skb, sch);
3199     + if (!segs)
3200     + return NET_XMIT_DROP;
3201     + } else {
3202     + segs = skb;
3203     + }
3204     +
3205     + skb = segs;
3206     + segs = segs->next;
3207     +
3208     if (!(skb = skb_unshare(skb, GFP_ATOMIC)) ||
3209     (skb->ip_summed == CHECKSUM_PARTIAL &&
3210     - skb_checksum_help(skb)))
3211     - return qdisc_drop(skb, sch);
3212     + skb_checksum_help(skb))) {
3213     + rc = qdisc_drop(skb, sch);
3214     + goto finish_segs;
3215     + }
3216    
3217     skb->data[prandom_u32() % skb_headlen(skb)] ^=
3218     1<<(prandom_u32() % 8);
3219     @@ -516,6 +552,27 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch)
3220     sch->qstats.requeues++;
3221     }
3222    
3223     +finish_segs:
3224     + if (segs) {
3225     + while (segs) {
3226     + skb2 = segs->next;
3227     + segs->next = NULL;
3228     + qdisc_skb_cb(segs)->pkt_len = segs->len;
3229     + last_len = segs->len;
3230     + rc = qdisc_enqueue(segs, sch);
3231     + if (rc != NET_XMIT_SUCCESS) {
3232     + if (net_xmit_drop_count(rc))
3233     + qdisc_qstats_drop(sch);
3234     + } else {
3235     + nb++;
3236     + len += last_len;
3237     + }
3238     + segs = skb2;
3239     + }
3240     + sch->q.qlen += nb;
3241     + if (nb > 1)
3242     + qdisc_tree_reduce_backlog(sch, 1 - nb, prev_len - len);
3243     + }
3244     return NET_XMIT_SUCCESS;
3245     }
3246    
3247     @@ -598,7 +655,8 @@ deliver:
3248     if (unlikely(err != NET_XMIT_SUCCESS)) {
3249     if (net_xmit_drop_count(err)) {
3250     qdisc_qstats_drop(sch);
3251     - qdisc_tree_decrease_qlen(sch, 1);
3252     + qdisc_tree_reduce_backlog(sch, 1,
3253     + qdisc_pkt_len(skb));
3254     }
3255     }
3256     goto tfifo_dequeue;
3257     @@ -1037,15 +1095,7 @@ static int netem_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
3258     {
3259     struct netem_sched_data *q = qdisc_priv(sch);
3260    
3261     - sch_tree_lock(sch);
3262     - *old = q->qdisc;
3263     - q->qdisc = new;
3264     - if (*old) {
3265     - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
3266     - qdisc_reset(*old);
3267     - }
3268     - sch_tree_unlock(sch);
3269     -
3270     + *old = qdisc_replace(sch, new, &q->qdisc);
3271     return 0;
3272     }
3273    
3274     diff --git a/net/sched/sch_pie.c b/net/sched/sch_pie.c
3275     index b783a446d884..71ae3b9629f9 100644
3276     --- a/net/sched/sch_pie.c
3277     +++ b/net/sched/sch_pie.c
3278     @@ -183,7 +183,7 @@ static int pie_change(struct Qdisc *sch, struct nlattr *opt)
3279     {
3280     struct pie_sched_data *q = qdisc_priv(sch);
3281     struct nlattr *tb[TCA_PIE_MAX + 1];
3282     - unsigned int qlen;
3283     + unsigned int qlen, dropped = 0;
3284     int err;
3285    
3286     if (!opt)
3287     @@ -232,10 +232,11 @@ static int pie_change(struct Qdisc *sch, struct nlattr *opt)
3288     while (sch->q.qlen > sch->limit) {
3289     struct sk_buff *skb = __skb_dequeue(&sch->q);
3290    
3291     + dropped += qdisc_pkt_len(skb);
3292     qdisc_qstats_backlog_dec(sch, skb);
3293     qdisc_drop(skb, sch);
3294     }
3295     - qdisc_tree_decrease_qlen(sch, qlen - sch->q.qlen);
3296     + qdisc_tree_reduce_backlog(sch, qlen - sch->q.qlen, dropped);
3297    
3298     sch_tree_unlock(sch);
3299     return 0;
3300     diff --git a/net/sched/sch_prio.c b/net/sched/sch_prio.c
3301     index ba6487f2741f..fee1b15506b2 100644
3302     --- a/net/sched/sch_prio.c
3303     +++ b/net/sched/sch_prio.c
3304     @@ -191,7 +191,7 @@ static int prio_tune(struct Qdisc *sch, struct nlattr *opt)
3305     struct Qdisc *child = q->queues[i];
3306     q->queues[i] = &noop_qdisc;
3307     if (child != &noop_qdisc) {
3308     - qdisc_tree_decrease_qlen(child, child->q.qlen);
3309     + qdisc_tree_reduce_backlog(child, child->q.qlen, child->qstats.backlog);
3310     qdisc_destroy(child);
3311     }
3312     }
3313     @@ -210,8 +210,9 @@ static int prio_tune(struct Qdisc *sch, struct nlattr *opt)
3314     q->queues[i] = child;
3315    
3316     if (old != &noop_qdisc) {
3317     - qdisc_tree_decrease_qlen(old,
3318     - old->q.qlen);
3319     + qdisc_tree_reduce_backlog(old,
3320     + old->q.qlen,
3321     + old->qstats.backlog);
3322     qdisc_destroy(old);
3323     }
3324     sch_tree_unlock(sch);
3325     @@ -268,13 +269,7 @@ static int prio_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
3326     if (new == NULL)
3327     new = &noop_qdisc;
3328    
3329     - sch_tree_lock(sch);
3330     - *old = q->queues[band];
3331     - q->queues[band] = new;
3332     - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
3333     - qdisc_reset(*old);
3334     - sch_tree_unlock(sch);
3335     -
3336     + *old = qdisc_replace(sch, new, &q->queues[band]);
3337     return 0;
3338     }
3339    
3340     diff --git a/net/sched/sch_qfq.c b/net/sched/sch_qfq.c
3341     index 3dc3a6e56052..8d2d8d953432 100644
3342     --- a/net/sched/sch_qfq.c
3343     +++ b/net/sched/sch_qfq.c
3344     @@ -220,9 +220,10 @@ static struct qfq_class *qfq_find_class(struct Qdisc *sch, u32 classid)
3345     static void qfq_purge_queue(struct qfq_class *cl)
3346     {
3347     unsigned int len = cl->qdisc->q.qlen;
3348     + unsigned int backlog = cl->qdisc->qstats.backlog;
3349    
3350     qdisc_reset(cl->qdisc);
3351     - qdisc_tree_decrease_qlen(cl->qdisc, len);
3352     + qdisc_tree_reduce_backlog(cl->qdisc, len, backlog);
3353     }
3354    
3355     static const struct nla_policy qfq_policy[TCA_QFQ_MAX + 1] = {
3356     @@ -617,11 +618,7 @@ static int qfq_graft_class(struct Qdisc *sch, unsigned long arg,
3357     new = &noop_qdisc;
3358     }
3359    
3360     - sch_tree_lock(sch);
3361     - qfq_purge_queue(cl);
3362     - *old = cl->qdisc;
3363     - cl->qdisc = new;
3364     - sch_tree_unlock(sch);
3365     + *old = qdisc_replace(sch, new, &cl->qdisc);
3366     return 0;
3367     }
3368    
3369     diff --git a/net/sched/sch_red.c b/net/sched/sch_red.c
3370     index 6c0534cc7758..8c0508c0e287 100644
3371     --- a/net/sched/sch_red.c
3372     +++ b/net/sched/sch_red.c
3373     @@ -210,7 +210,8 @@ static int red_change(struct Qdisc *sch, struct nlattr *opt)
3374     q->flags = ctl->flags;
3375     q->limit = ctl->limit;
3376     if (child) {
3377     - qdisc_tree_decrease_qlen(q->qdisc, q->qdisc->q.qlen);
3378     + qdisc_tree_reduce_backlog(q->qdisc, q->qdisc->q.qlen,
3379     + q->qdisc->qstats.backlog);
3380     qdisc_destroy(q->qdisc);
3381     q->qdisc = child;
3382     }
3383     @@ -313,12 +314,7 @@ static int red_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
3384     if (new == NULL)
3385     new = &noop_qdisc;
3386    
3387     - sch_tree_lock(sch);
3388     - *old = q->qdisc;
3389     - q->qdisc = new;
3390     - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
3391     - qdisc_reset(*old);
3392     - sch_tree_unlock(sch);
3393     + *old = qdisc_replace(sch, new, &q->qdisc);
3394     return 0;
3395     }
3396    
3397     diff --git a/net/sched/sch_sfb.c b/net/sched/sch_sfb.c
3398     index 5bbb6332ec57..c69611640fa5 100644
3399     --- a/net/sched/sch_sfb.c
3400     +++ b/net/sched/sch_sfb.c
3401     @@ -510,7 +510,8 @@ static int sfb_change(struct Qdisc *sch, struct nlattr *opt)
3402    
3403     sch_tree_lock(sch);
3404    
3405     - qdisc_tree_decrease_qlen(q->qdisc, q->qdisc->q.qlen);
3406     + qdisc_tree_reduce_backlog(q->qdisc, q->qdisc->q.qlen,
3407     + q->qdisc->qstats.backlog);
3408     qdisc_destroy(q->qdisc);
3409     q->qdisc = child;
3410    
3411     @@ -606,12 +607,7 @@ static int sfb_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
3412     if (new == NULL)
3413     new = &noop_qdisc;
3414    
3415     - sch_tree_lock(sch);
3416     - *old = q->qdisc;
3417     - q->qdisc = new;
3418     - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
3419     - qdisc_reset(*old);
3420     - sch_tree_unlock(sch);
3421     + *old = qdisc_replace(sch, new, &q->qdisc);
3422     return 0;
3423     }
3424    
3425     diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c
3426     index 3abab534eb5c..498f0a2cb47f 100644
3427     --- a/net/sched/sch_sfq.c
3428     +++ b/net/sched/sch_sfq.c
3429     @@ -346,7 +346,7 @@ static int
3430     sfq_enqueue(struct sk_buff *skb, struct Qdisc *sch)
3431     {
3432     struct sfq_sched_data *q = qdisc_priv(sch);
3433     - unsigned int hash;
3434     + unsigned int hash, dropped;
3435     sfq_index x, qlen;
3436     struct sfq_slot *slot;
3437     int uninitialized_var(ret);
3438     @@ -461,7 +461,7 @@ enqueue:
3439     return NET_XMIT_SUCCESS;
3440    
3441     qlen = slot->qlen;
3442     - sfq_drop(sch);
3443     + dropped = sfq_drop(sch);
3444     /* Return Congestion Notification only if we dropped a packet
3445     * from this flow.
3446     */
3447     @@ -469,7 +469,7 @@ enqueue:
3448     return NET_XMIT_CN;
3449    
3450     /* As we dropped a packet, better let upper stack know this */
3451     - qdisc_tree_decrease_qlen(sch, 1);
3452     + qdisc_tree_reduce_backlog(sch, 1, dropped);
3453     return NET_XMIT_SUCCESS;
3454     }
3455    
3456     @@ -537,6 +537,7 @@ static void sfq_rehash(struct Qdisc *sch)
3457     struct sfq_slot *slot;
3458     struct sk_buff_head list;
3459     int dropped = 0;
3460     + unsigned int drop_len = 0;
3461    
3462     __skb_queue_head_init(&list);
3463    
3464     @@ -565,6 +566,7 @@ static void sfq_rehash(struct Qdisc *sch)
3465     if (x >= SFQ_MAX_FLOWS) {
3466     drop:
3467     qdisc_qstats_backlog_dec(sch, skb);
3468     + drop_len += qdisc_pkt_len(skb);
3469     kfree_skb(skb);
3470     dropped++;
3471     continue;
3472     @@ -594,7 +596,7 @@ drop:
3473     }
3474     }
3475     sch->q.qlen -= dropped;
3476     - qdisc_tree_decrease_qlen(sch, dropped);
3477     + qdisc_tree_reduce_backlog(sch, dropped, drop_len);
3478     }
3479    
3480     static void sfq_perturbation(unsigned long arg)
3481     @@ -618,7 +620,7 @@ static int sfq_change(struct Qdisc *sch, struct nlattr *opt)
3482     struct sfq_sched_data *q = qdisc_priv(sch);
3483     struct tc_sfq_qopt *ctl = nla_data(opt);
3484     struct tc_sfq_qopt_v1 *ctl_v1 = NULL;
3485     - unsigned int qlen;
3486     + unsigned int qlen, dropped = 0;
3487     struct red_parms *p = NULL;
3488    
3489     if (opt->nla_len < nla_attr_size(sizeof(*ctl)))
3490     @@ -667,8 +669,8 @@ static int sfq_change(struct Qdisc *sch, struct nlattr *opt)
3491    
3492     qlen = sch->q.qlen;
3493     while (sch->q.qlen > q->limit)
3494     - sfq_drop(sch);
3495     - qdisc_tree_decrease_qlen(sch, qlen - sch->q.qlen);
3496     + dropped += sfq_drop(sch);
3497     + qdisc_tree_reduce_backlog(sch, qlen - sch->q.qlen, dropped);
3498    
3499     del_timer(&q->perturb_timer);
3500     if (q->perturb_period) {
3501     diff --git a/net/sched/sch_tbf.c b/net/sched/sch_tbf.c
3502     index a4afde14e865..c2fbde742f37 100644
3503     --- a/net/sched/sch_tbf.c
3504     +++ b/net/sched/sch_tbf.c
3505     @@ -160,6 +160,7 @@ static int tbf_segment(struct sk_buff *skb, struct Qdisc *sch)
3506     struct tbf_sched_data *q = qdisc_priv(sch);
3507     struct sk_buff *segs, *nskb;
3508     netdev_features_t features = netif_skb_features(skb);
3509     + unsigned int len = 0, prev_len = qdisc_pkt_len(skb);
3510     int ret, nb;
3511    
3512     segs = skb_gso_segment(skb, features & ~NETIF_F_GSO_MASK);
3513     @@ -172,6 +173,7 @@ static int tbf_segment(struct sk_buff *skb, struct Qdisc *sch)
3514     nskb = segs->next;
3515     segs->next = NULL;
3516     qdisc_skb_cb(segs)->pkt_len = segs->len;
3517     + len += segs->len;
3518     ret = qdisc_enqueue(segs, q->qdisc);
3519     if (ret != NET_XMIT_SUCCESS) {
3520     if (net_xmit_drop_count(ret))
3521     @@ -183,7 +185,7 @@ static int tbf_segment(struct sk_buff *skb, struct Qdisc *sch)
3522     }
3523     sch->q.qlen += nb;
3524     if (nb > 1)
3525     - qdisc_tree_decrease_qlen(sch, 1 - nb);
3526     + qdisc_tree_reduce_backlog(sch, 1 - nb, prev_len - len);
3527     consume_skb(skb);
3528     return nb > 0 ? NET_XMIT_SUCCESS : NET_XMIT_DROP;
3529     }
3530     @@ -399,7 +401,8 @@ static int tbf_change(struct Qdisc *sch, struct nlattr *opt)
3531    
3532     sch_tree_lock(sch);
3533     if (child) {
3534     - qdisc_tree_decrease_qlen(q->qdisc, q->qdisc->q.qlen);
3535     + qdisc_tree_reduce_backlog(q->qdisc, q->qdisc->q.qlen,
3536     + q->qdisc->qstats.backlog);
3537     qdisc_destroy(q->qdisc);
3538     q->qdisc = child;
3539     }
3540     @@ -502,13 +505,7 @@ static int tbf_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
3541     if (new == NULL)
3542     new = &noop_qdisc;
3543    
3544     - sch_tree_lock(sch);
3545     - *old = q->qdisc;
3546     - q->qdisc = new;
3547     - qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
3548     - qdisc_reset(*old);
3549     - sch_tree_unlock(sch);
3550     -
3551     + *old = qdisc_replace(sch, new, &q->qdisc);
3552     return 0;
3553     }
3554    
3555     diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
3556     index 7fd1220fbfa0..9b5bd6d142dc 100644
3557     --- a/net/vmw_vsock/af_vsock.c
3558     +++ b/net/vmw_vsock/af_vsock.c
3559     @@ -1794,27 +1794,8 @@ vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
3560     else if (sk->sk_shutdown & RCV_SHUTDOWN)
3561     err = 0;
3562    
3563     - if (copied > 0) {
3564     - /* We only do these additional bookkeeping/notification steps
3565     - * if we actually copied something out of the queue pair
3566     - * instead of just peeking ahead.
3567     - */
3568     -
3569     - if (!(flags & MSG_PEEK)) {
3570     - /* If the other side has shutdown for sending and there
3571     - * is nothing more to read, then modify the socket
3572     - * state.
3573     - */
3574     - if (vsk->peer_shutdown & SEND_SHUTDOWN) {
3575     - if (vsock_stream_has_data(vsk) <= 0) {
3576     - sk->sk_state = SS_UNCONNECTED;
3577     - sock_set_flag(sk, SOCK_DONE);
3578     - sk->sk_state_change(sk);
3579     - }
3580     - }
3581     - }
3582     + if (copied > 0)
3583     err = copied;
3584     - }
3585    
3586     out_wait:
3587     finish_wait(sk_sleep(sk), &wait);
3588     diff --git a/net/x25/x25_facilities.c b/net/x25/x25_facilities.c
3589     index 7ecd04c21360..997ff7b2509b 100644
3590     --- a/net/x25/x25_facilities.c
3591     +++ b/net/x25/x25_facilities.c
3592     @@ -277,6 +277,7 @@ int x25_negotiate_facilities(struct sk_buff *skb, struct sock *sk,
3593    
3594     memset(&theirs, 0, sizeof(theirs));
3595     memcpy(new, ours, sizeof(*new));
3596     + memset(dte, 0, sizeof(*dte));
3597    
3598     len = x25_parse_facilities(skb, &theirs, dte, &x25->vc_facil_mask);
3599     if (len < 0)
3600     diff --git a/samples/bpf/trace_output_kern.c b/samples/bpf/trace_output_kern.c
3601     index 8d8d1ec429eb..9b96f4fb8cea 100644
3602     --- a/samples/bpf/trace_output_kern.c
3603     +++ b/samples/bpf/trace_output_kern.c
3604     @@ -18,7 +18,6 @@ int bpf_prog1(struct pt_regs *ctx)
3605     u64 cookie;
3606     } data;
3607    
3608     - memset(&data, 0, sizeof(data));
3609     data.pid = bpf_get_current_pid_tgid();
3610     data.cookie = 0x12345678;
3611    
3612     diff --git a/sound/pci/hda/hda_sysfs.c b/sound/pci/hda/hda_sysfs.c
3613     index 64e0d1d81ca5..9739fce9e032 100644
3614     --- a/sound/pci/hda/hda_sysfs.c
3615     +++ b/sound/pci/hda/hda_sysfs.c
3616     @@ -141,14 +141,6 @@ static int reconfig_codec(struct hda_codec *codec)
3617     err = snd_hda_codec_configure(codec);
3618     if (err < 0)
3619     goto error;
3620     - /* rebuild PCMs */
3621     - err = snd_hda_codec_build_pcms(codec);
3622     - if (err < 0)
3623     - goto error;
3624     - /* rebuild mixers */
3625     - err = snd_hda_codec_build_controls(codec);
3626     - if (err < 0)
3627     - goto error;
3628     err = snd_card_register(codec->card);
3629     error:
3630     snd_hda_power_down(codec);
3631     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
3632     index ac4490a96863..4918ffa5ba68 100644
3633     --- a/sound/pci/hda/patch_realtek.c
3634     +++ b/sound/pci/hda/patch_realtek.c
3635     @@ -6426,6 +6426,7 @@ enum {
3636     ALC668_FIXUP_DELL_DISABLE_AAMIX,
3637     ALC668_FIXUP_DELL_XPS13,
3638     ALC662_FIXUP_ASUS_Nx50,
3639     + ALC668_FIXUP_ASUS_Nx51,
3640     };
3641    
3642     static const struct hda_fixup alc662_fixups[] = {
3643     @@ -6672,6 +6673,15 @@ static const struct hda_fixup alc662_fixups[] = {
3644     .chained = true,
3645     .chain_id = ALC662_FIXUP_BASS_1A
3646     },
3647     + [ALC668_FIXUP_ASUS_Nx51] = {
3648     + .type = HDA_FIXUP_PINS,
3649     + .v.pins = (const struct hda_pintbl[]) {
3650     + {0x1a, 0x90170151}, /* bass speaker */
3651     + {}
3652     + },
3653     + .chained = true,
3654     + .chain_id = ALC662_FIXUP_BASS_CHMAP,
3655     + },
3656     };
3657    
3658     static const struct snd_pci_quirk alc662_fixup_tbl[] = {
3659     @@ -6694,11 +6704,14 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
3660     SND_PCI_QUIRK(0x1028, 0x0698, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
3661     SND_PCI_QUIRK(0x1028, 0x069f, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
3662     SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800),
3663     + SND_PCI_QUIRK(0x1043, 0x1080, "Asus UX501VW", ALC668_FIXUP_HEADSET_MODE),
3664     SND_PCI_QUIRK(0x1043, 0x11cd, "Asus N550", ALC662_FIXUP_ASUS_Nx50),
3665     SND_PCI_QUIRK(0x1043, 0x13df, "Asus N550JX", ALC662_FIXUP_BASS_1A),
3666     SND_PCI_QUIRK(0x1043, 0x129d, "Asus N750", ALC662_FIXUP_ASUS_Nx50),
3667     SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_BASS_MODE4_CHMAP),
3668     SND_PCI_QUIRK(0x1043, 0x15a7, "ASUS UX51VZH", ALC662_FIXUP_BASS_16),
3669     + SND_PCI_QUIRK(0x1043, 0x177d, "ASUS N551", ALC668_FIXUP_ASUS_Nx51),
3670     + SND_PCI_QUIRK(0x1043, 0x17bd, "ASUS N751", ALC668_FIXUP_ASUS_Nx51),
3671     SND_PCI_QUIRK(0x1043, 0x1b73, "ASUS N55SF", ALC662_FIXUP_BASS_16),
3672     SND_PCI_QUIRK(0x1043, 0x1bf3, "ASUS N76VZ", ALC662_FIXUP_BASS_MODE4_CHMAP),
3673     SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT),
3674     diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
3675     index 001fb4dc0722..db11ecf0b74d 100644
3676     --- a/sound/usb/quirks.c
3677     +++ b/sound/usb/quirks.c
3678     @@ -1138,8 +1138,11 @@ bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip)
3679     case USB_ID(0x047F, 0x0415): /* Plantronics BT-300 */
3680     case USB_ID(0x047F, 0xAA05): /* Plantronics DA45 */
3681     case USB_ID(0x04D8, 0xFEEA): /* Benchmark DAC1 Pre */
3682     + case USB_ID(0x0556, 0x0014): /* Phoenix Audio TMX320VC */
3683     case USB_ID(0x074D, 0x3553): /* Outlaw RR2150 (Micronas UAC3553B) */
3684     + case USB_ID(0x1de7, 0x0013): /* Phoenix Audio MT202exe */
3685     case USB_ID(0x1de7, 0x0014): /* Phoenix Audio TMX320 */
3686     + case USB_ID(0x1de7, 0x0114): /* Phoenix Audio MT202pcs */
3687     case USB_ID(0x21B4, 0x0081): /* AudioQuest DragonFly */
3688     return true;
3689     }
3690     diff --git a/tools/lib/traceevent/parse-filter.c b/tools/lib/traceevent/parse-filter.c
3691     index 0144b3d1bb77..88cccea3ca99 100644
3692     --- a/tools/lib/traceevent/parse-filter.c
3693     +++ b/tools/lib/traceevent/parse-filter.c
3694     @@ -1164,11 +1164,11 @@ process_filter(struct event_format *event, struct filter_arg **parg,
3695     current_op = current_exp;
3696    
3697     ret = collapse_tree(current_op, parg, error_str);
3698     + /* collapse_tree() may free current_op, and updates parg accordingly */
3699     + current_op = NULL;
3700     if (ret < 0)
3701     goto fail;
3702    
3703     - *parg = current_op;
3704     -
3705     free(token);
3706     return 0;
3707