Magellan Linux

Annotation of /trunk/kernel-alx-legacy/patches-4.9/0323-4.9.224-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3608 - (hide annotations) (download)
Fri Aug 14 07:34:29 2020 UTC (4 years, 1 month ago) by niro
File size: 106010 byte(s)
-added kerenl-alx-legacy pkg
1 niro 3608 diff --git a/Makefile b/Makefile
2     index 2a923301987e..3e58c142f92f 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 4
7     PATCHLEVEL = 9
8     -SUBLEVEL = 223
9     +SUBLEVEL = 224
10     EXTRAVERSION =
11     NAME = Roaring Lionus
12    
13     @@ -658,20 +658,14 @@ KBUILD_CFLAGS += $(call cc-option,-fdata-sections,)
14     endif
15    
16     ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
17     -KBUILD_CFLAGS += -Os $(call cc-disable-warning,maybe-uninitialized,)
18     -else
19     -ifdef CONFIG_PROFILE_ALL_BRANCHES
20     -KBUILD_CFLAGS += -O2 $(call cc-disable-warning,maybe-uninitialized,)
21     +KBUILD_CFLAGS += -Os
22     else
23     KBUILD_CFLAGS += -O2
24     endif
25     -endif
26     -
27     -KBUILD_CFLAGS += $(call cc-ifversion, -lt, 0409, \
28     - $(call cc-disable-warning,maybe-uninitialized,))
29    
30     # Tell gcc to never replace conditional load with a non-conditional one
31     KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0)
32     +KBUILD_CFLAGS += $(call cc-option,-fno-allow-store-data-races)
33    
34     # check for 'asm goto'
35     ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC) $(KBUILD_CFLAGS)), y)
36     @@ -804,6 +798,17 @@ KBUILD_CFLAGS += $(call cc-disable-warning, pointer-sign)
37     # disable stringop warnings in gcc 8+
38     KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)
39    
40     +# We'll want to enable this eventually, but it's not going away for 5.7 at least
41     +KBUILD_CFLAGS += $(call cc-disable-warning, zero-length-bounds)
42     +KBUILD_CFLAGS += $(call cc-disable-warning, array-bounds)
43     +KBUILD_CFLAGS += $(call cc-disable-warning, stringop-overflow)
44     +
45     +# Another good warning that we'll want to enable eventually
46     +KBUILD_CFLAGS += $(call cc-disable-warning, restrict)
47     +
48     +# Enabled with W=2, disabled by default as noisy
49     +KBUILD_CFLAGS += $(call cc-disable-warning, maybe-uninitialized)
50     +
51     # disable invalid "can't wrap" optimizations for signed / pointers
52     KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow)
53    
54     diff --git a/arch/arm/boot/dts/imx27-phytec-phycard-s-rdk.dts b/arch/arm/boot/dts/imx27-phytec-phycard-s-rdk.dts
55     index bfd4946cf9fe..8b63b6593d3a 100644
56     --- a/arch/arm/boot/dts/imx27-phytec-phycard-s-rdk.dts
57     +++ b/arch/arm/boot/dts/imx27-phytec-phycard-s-rdk.dts
58     @@ -81,8 +81,8 @@
59     imx27-phycard-s-rdk {
60     pinctrl_i2c1: i2c1grp {
61     fsl,pins = <
62     - MX27_PAD_I2C2_SDA__I2C2_SDA 0x0
63     - MX27_PAD_I2C2_SCL__I2C2_SCL 0x0
64     + MX27_PAD_I2C_DATA__I2C_DATA 0x0
65     + MX27_PAD_I2C_CLK__I2C_CLK 0x0
66     >;
67     };
68    
69     diff --git a/arch/arm/boot/dts/r8a73a4.dtsi b/arch/arm/boot/dts/r8a73a4.dtsi
70     index ca8672778fe0..547032eebd67 100644
71     --- a/arch/arm/boot/dts/r8a73a4.dtsi
72     +++ b/arch/arm/boot/dts/r8a73a4.dtsi
73     @@ -135,7 +135,14 @@
74     cmt1: timer@e6130000 {
75     compatible = "renesas,cmt-48-r8a73a4", "renesas,cmt-48-gen2";
76     reg = <0 0xe6130000 0 0x1004>;
77     - interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
78     + interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>,
79     + <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
80     + <GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>,
81     + <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
82     + <GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>,
83     + <GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>,
84     + <GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>,
85     + <GIC_SPI 127 IRQ_TYPE_LEVEL_HIGH>;
86     clocks = <&mstp3_clks R8A73A4_CLK_CMT1>;
87     clock-names = "fck";
88     power-domains = <&pd_c5>;
89     diff --git a/arch/arm/boot/dts/r8a7740.dtsi b/arch/arm/boot/dts/r8a7740.dtsi
90     index 159e04eb1b9e..41244942f085 100644
91     --- a/arch/arm/boot/dts/r8a7740.dtsi
92     +++ b/arch/arm/boot/dts/r8a7740.dtsi
93     @@ -467,7 +467,7 @@
94     cpg_clocks: cpg_clocks@e6150000 {
95     compatible = "renesas,r8a7740-cpg-clocks";
96     reg = <0xe6150000 0x10000>;
97     - clocks = <&extal1_clk>, <&extalr_clk>;
98     + clocks = <&extal1_clk>, <&extal2_clk>, <&extalr_clk>;
99     #clock-cells = <1>;
100     clock-output-names = "system", "pllc0", "pllc1",
101     "pllc2", "r",
102     diff --git a/arch/x86/include/asm/stackprotector.h b/arch/x86/include/asm/stackprotector.h
103     index 58505f01962f..743bd2d77e51 100644
104     --- a/arch/x86/include/asm/stackprotector.h
105     +++ b/arch/x86/include/asm/stackprotector.h
106     @@ -54,8 +54,13 @@
107     /*
108     * Initialize the stackprotector canary value.
109     *
110     - * NOTE: this must only be called from functions that never return,
111     + * NOTE: this must only be called from functions that never return
112     * and it must always be inlined.
113     + *
114     + * In addition, it should be called from a compilation unit for which
115     + * stack protector is disabled. Alternatively, the caller should not end
116     + * with a function call which gets tail-call optimized as that would
117     + * lead to checking a modified canary value.
118     */
119     static __always_inline void boot_init_stack_canary(void)
120     {
121     diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
122     index ef38bc1d1c00..fe5896259c0f 100644
123     --- a/arch/x86/kernel/smpboot.c
124     +++ b/arch/x86/kernel/smpboot.c
125     @@ -249,6 +249,14 @@ static void notrace start_secondary(void *unused)
126    
127     wmb();
128     cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
129     +
130     + /*
131     + * Prevent tail call to cpu_startup_entry() because the stack protector
132     + * guard has been changed a couple of function calls up, in
133     + * boot_init_stack_canary() and must not be checked before tail calling
134     + * another function.
135     + */
136     + prevent_tail_call_optimization();
137     }
138    
139     /**
140     diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
141     index 314eb954bdee..0f66f7dd8938 100644
142     --- a/arch/x86/kvm/x86.c
143     +++ b/arch/x86/kvm/x86.c
144     @@ -3128,7 +3128,7 @@ static int kvm_vcpu_ioctl_x86_setup_mce(struct kvm_vcpu *vcpu,
145     unsigned bank_num = mcg_cap & 0xff, bank;
146    
147     r = -EINVAL;
148     - if (!bank_num || bank_num >= KVM_MAX_MCE_BANKS)
149     + if (!bank_num || bank_num > KVM_MAX_MCE_BANKS)
150     goto out;
151     if (mcg_cap & ~(kvm_mce_cap_supported | 0xff | 0xff0000))
152     goto out;
153     diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c
154     index 8eca26ef6471..15a90ab3b373 100644
155     --- a/arch/x86/xen/smp.c
156     +++ b/arch/x86/xen/smp.c
157     @@ -116,6 +116,7 @@ asmlinkage __visible void cpu_bringup_and_idle(int cpu)
158     #endif
159     cpu_bringup();
160     cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
161     + prevent_tail_call_optimization();
162     }
163    
164     void xen_smp_intr_free(unsigned int cpu)
165     diff --git a/block/blk-core.c b/block/blk-core.c
166     index bdb906bbfe19..4987f312a95f 100644
167     --- a/block/blk-core.c
168     +++ b/block/blk-core.c
169     @@ -729,6 +729,9 @@ struct request_queue *blk_alloc_queue_node(gfp_t gfp_mask, int node_id)
170    
171     kobject_init(&q->kobj, &blk_queue_ktype);
172    
173     +#ifdef CONFIG_BLK_DEV_IO_TRACE
174     + mutex_init(&q->blk_trace_mutex);
175     +#endif
176     mutex_init(&q->sysfs_lock);
177     spin_lock_init(&q->__queue_lock);
178    
179     diff --git a/crypto/lrw.c b/crypto/lrw.c
180     index d38a382b09eb..fc3d4fec8ddd 100644
181     --- a/crypto/lrw.c
182     +++ b/crypto/lrw.c
183     @@ -377,7 +377,7 @@ out_put_alg:
184     return inst;
185     }
186    
187     -static void free(struct crypto_instance *inst)
188     +static void free_inst(struct crypto_instance *inst)
189     {
190     crypto_drop_spawn(crypto_instance_ctx(inst));
191     kfree(inst);
192     @@ -386,7 +386,7 @@ static void free(struct crypto_instance *inst)
193     static struct crypto_template crypto_tmpl = {
194     .name = "lrw",
195     .alloc = alloc,
196     - .free = free,
197     + .free = free_inst,
198     .module = THIS_MODULE,
199     };
200    
201     diff --git a/crypto/xts.c b/crypto/xts.c
202     index 305343f22a02..e41ed483e8a5 100644
203     --- a/crypto/xts.c
204     +++ b/crypto/xts.c
205     @@ -329,7 +329,7 @@ out_put_alg:
206     return inst;
207     }
208    
209     -static void free(struct crypto_instance *inst)
210     +static void free_inst(struct crypto_instance *inst)
211     {
212     crypto_drop_spawn(crypto_instance_ctx(inst));
213     kfree(inst);
214     @@ -338,7 +338,7 @@ static void free(struct crypto_instance *inst)
215     static struct crypto_template crypto_tmpl = {
216     .name = "xts",
217     .alloc = alloc,
218     - .free = free,
219     + .free = free_inst,
220     .module = THIS_MODULE,
221     };
222    
223     diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c
224     index cdc47375178e..25f02f5fe0fd 100644
225     --- a/drivers/acpi/video_detect.c
226     +++ b/drivers/acpi/video_detect.c
227     @@ -314,17 +314,6 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
228     DMI_MATCH(DMI_PRODUCT_NAME, "Dell System XPS L702X"),
229     },
230     },
231     - {
232     - /* https://bugzilla.redhat.com/show_bug.cgi?id=1204476 */
233     - /* https://bugs.launchpad.net/ubuntu/+source/linux-lts-trusty/+bug/1416940 */
234     - .callback = video_detect_force_native,
235     - .ident = "HP Pavilion dv6",
236     - .matches = {
237     - DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
238     - DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv6 Notebook PC"),
239     - },
240     - },
241     -
242     { },
243     };
244    
245     diff --git a/drivers/dma/mmp_tdma.c b/drivers/dma/mmp_tdma.c
246     index 13c68b6434ce..15b4a44e6006 100644
247     --- a/drivers/dma/mmp_tdma.c
248     +++ b/drivers/dma/mmp_tdma.c
249     @@ -362,6 +362,8 @@ static void mmp_tdma_free_descriptor(struct mmp_tdma_chan *tdmac)
250     gen_pool_free(gpool, (unsigned long)tdmac->desc_arr,
251     size);
252     tdmac->desc_arr = NULL;
253     + if (tdmac->status == DMA_ERROR)
254     + tdmac->status = DMA_COMPLETE;
255    
256     return;
257     }
258     diff --git a/drivers/dma/pch_dma.c b/drivers/dma/pch_dma.c
259     index df95727dc2fb..8a0c70e4f727 100644
260     --- a/drivers/dma/pch_dma.c
261     +++ b/drivers/dma/pch_dma.c
262     @@ -876,6 +876,7 @@ static int pch_dma_probe(struct pci_dev *pdev,
263     }
264    
265     pci_set_master(pdev);
266     + pd->dma.dev = &pdev->dev;
267    
268     err = request_irq(pdev->irq, pd_irq, IRQF_SHARED, DRV_NAME, pd);
269     if (err) {
270     @@ -891,7 +892,6 @@ static int pch_dma_probe(struct pci_dev *pdev,
271     goto err_free_irq;
272     }
273    
274     - pd->dma.dev = &pdev->dev;
275    
276     INIT_LIST_HEAD(&pd->dma.channels);
277    
278     diff --git a/drivers/gpu/drm/qxl/qxl_image.c b/drivers/gpu/drm/qxl/qxl_image.c
279     index 7fbcc35e8ad3..c89c10055641 100644
280     --- a/drivers/gpu/drm/qxl/qxl_image.c
281     +++ b/drivers/gpu/drm/qxl/qxl_image.c
282     @@ -210,7 +210,8 @@ qxl_image_init_helper(struct qxl_device *qdev,
283     break;
284     default:
285     DRM_ERROR("unsupported image bit depth\n");
286     - return -EINVAL; /* TODO: cleanup */
287     + qxl_bo_kunmap_atomic_page(qdev, image_bo, ptr);
288     + return -EINVAL;
289     }
290     image->u.bitmap.flags = QXL_BITMAP_TOP_DOWN;
291     image->u.bitmap.x = width;
292     diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c
293     index f7d23c1081dc..68eed45b8600 100644
294     --- a/drivers/infiniband/core/addr.c
295     +++ b/drivers/infiniband/core/addr.c
296     @@ -453,16 +453,15 @@ static int addr6_resolve(struct sockaddr_in6 *src_in,
297     struct flowi6 fl6;
298     struct dst_entry *dst;
299     struct rt6_info *rt;
300     - int ret;
301    
302     memset(&fl6, 0, sizeof fl6);
303     fl6.daddr = dst_in->sin6_addr;
304     fl6.saddr = src_in->sin6_addr;
305     fl6.flowi6_oif = addr->bound_dev_if;
306    
307     - ret = ipv6_stub->ipv6_dst_lookup(addr->net, NULL, &dst, &fl6);
308     - if (ret < 0)
309     - return ret;
310     + dst = ipv6_stub->ipv6_dst_lookup_flow(addr->net, NULL, &fl6, NULL);
311     + if (IS_ERR(dst))
312     + return PTR_ERR(dst);
313    
314     rt = (struct rt6_info *)dst;
315     if (ipv6_addr_any(&src_in->sin6_addr)) {
316     @@ -552,6 +551,7 @@ static int addr_resolve(struct sockaddr *src_in,
317     const struct sockaddr_in6 *dst_in6 =
318     (const struct sockaddr_in6 *)dst_in;
319    
320     + dst = NULL;
321     ret = addr6_resolve((struct sockaddr_in6 *)src_in,
322     dst_in6, addr,
323     &dst);
324     diff --git a/drivers/infiniband/hw/i40iw/i40iw_hw.c b/drivers/infiniband/hw/i40iw/i40iw_hw.c
325     index 0c92a40b3e86..e4867d6de789 100644
326     --- a/drivers/infiniband/hw/i40iw/i40iw_hw.c
327     +++ b/drivers/infiniband/hw/i40iw/i40iw_hw.c
328     @@ -479,7 +479,7 @@ void i40iw_manage_arp_cache(struct i40iw_device *iwdev,
329     int arp_index;
330    
331     arp_index = i40iw_arp_table(iwdev, ip_addr, ipv4, mac_addr, action);
332     - if (arp_index == -1)
333     + if (arp_index < 0)
334     return;
335     cqp_request = i40iw_get_cqp_request(&iwdev->cqp, false);
336     if (!cqp_request)
337     diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
338     index 709d6491d243..7284a9176844 100644
339     --- a/drivers/infiniband/hw/mlx4/qp.c
340     +++ b/drivers/infiniband/hw/mlx4/qp.c
341     @@ -2307,6 +2307,7 @@ static int build_sriov_qp0_header(struct mlx4_ib_sqp *sqp,
342     int send_size;
343     int header_size;
344     int spc;
345     + int err;
346     int i;
347    
348     if (wr->wr.opcode != IB_WR_SEND)
349     @@ -2341,7 +2342,9 @@ static int build_sriov_qp0_header(struct mlx4_ib_sqp *sqp,
350    
351     sqp->ud_header.lrh.virtual_lane = 0;
352     sqp->ud_header.bth.solicited_event = !!(wr->wr.send_flags & IB_SEND_SOLICITED);
353     - ib_get_cached_pkey(ib_dev, sqp->qp.port, 0, &pkey);
354     + err = ib_get_cached_pkey(ib_dev, sqp->qp.port, 0, &pkey);
355     + if (err)
356     + return err;
357     sqp->ud_header.bth.pkey = cpu_to_be16(pkey);
358     if (sqp->qp.mlx4_ib_qp_type == MLX4_IB_QPT_TUN_SMI_OWNER)
359     sqp->ud_header.bth.destination_qpn = cpu_to_be32(wr->remote_qpn);
360     @@ -2618,9 +2621,14 @@ static int build_mlx_header(struct mlx4_ib_sqp *sqp, struct ib_ud_wr *wr,
361     }
362     sqp->ud_header.bth.solicited_event = !!(wr->wr.send_flags & IB_SEND_SOLICITED);
363     if (!sqp->qp.ibqp.qp_num)
364     - ib_get_cached_pkey(ib_dev, sqp->qp.port, sqp->pkey_index, &pkey);
365     + err = ib_get_cached_pkey(ib_dev, sqp->qp.port, sqp->pkey_index,
366     + &pkey);
367     else
368     - ib_get_cached_pkey(ib_dev, sqp->qp.port, wr->pkey_index, &pkey);
369     + err = ib_get_cached_pkey(ib_dev, sqp->qp.port, wr->pkey_index,
370     + &pkey);
371     + if (err)
372     + return err;
373     +
374     sqp->ud_header.bth.pkey = cpu_to_be16(pkey);
375     sqp->ud_header.bth.destination_qpn = cpu_to_be32(wr->remote_qpn);
376     sqp->ud_header.bth.psn = cpu_to_be32((sqp->send_psn++) & ((1 << 24) - 1));
377     diff --git a/drivers/infiniband/sw/rxe/rxe_net.c b/drivers/infiniband/sw/rxe/rxe_net.c
378     index f4f3942ebbd1..d19e003e8381 100644
379     --- a/drivers/infiniband/sw/rxe/rxe_net.c
380     +++ b/drivers/infiniband/sw/rxe/rxe_net.c
381     @@ -182,10 +182,12 @@ static struct dst_entry *rxe_find_route6(struct net_device *ndev,
382     memcpy(&fl6.daddr, daddr, sizeof(*daddr));
383     fl6.flowi6_proto = IPPROTO_UDP;
384    
385     - if (unlikely(ipv6_stub->ipv6_dst_lookup(sock_net(recv_sockets.sk6->sk),
386     - recv_sockets.sk6->sk, &ndst, &fl6))) {
387     + ndst = ipv6_stub->ipv6_dst_lookup_flow(sock_net(recv_sockets.sk6->sk),
388     + recv_sockets.sk6->sk, &fl6,
389     + NULL);
390     + if (unlikely(IS_ERR(ndst))) {
391     pr_err_ratelimited("no route to %pI6\n", daddr);
392     - goto put;
393     + return NULL;
394     }
395    
396     if (unlikely(ndst->error)) {
397     diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
398     index 736e550163e1..421cbba9a3bc 100644
399     --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
400     +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
401     @@ -5997,6 +5997,7 @@ static netdev_features_t bnxt_fix_features(struct net_device *dev,
402     netdev_features_t features)
403     {
404     struct bnxt *bp = netdev_priv(dev);
405     + netdev_features_t vlan_features;
406    
407     if ((features & NETIF_F_NTUPLE) && !bnxt_rfs_capable(bp))
408     features &= ~NETIF_F_NTUPLE;
409     @@ -6004,12 +6005,14 @@ static netdev_features_t bnxt_fix_features(struct net_device *dev,
410     /* Both CTAG and STAG VLAN accelaration on the RX side have to be
411     * turned on or off together.
412     */
413     - if ((features & (NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_STAG_RX)) !=
414     - (NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_STAG_RX)) {
415     + vlan_features = features & (NETIF_F_HW_VLAN_CTAG_RX |
416     + NETIF_F_HW_VLAN_STAG_RX);
417     + if (vlan_features != (NETIF_F_HW_VLAN_CTAG_RX |
418     + NETIF_F_HW_VLAN_STAG_RX)) {
419     if (dev->features & NETIF_F_HW_VLAN_CTAG_RX)
420     features &= ~(NETIF_F_HW_VLAN_CTAG_RX |
421     NETIF_F_HW_VLAN_STAG_RX);
422     - else
423     + else if (vlan_features)
424     features |= NETIF_F_HW_VLAN_CTAG_RX |
425     NETIF_F_HW_VLAN_STAG_RX;
426     }
427     @@ -7163,8 +7166,11 @@ static pci_ers_result_t bnxt_io_slot_reset(struct pci_dev *pdev)
428     result = PCI_ERS_RESULT_RECOVERED;
429     }
430    
431     - if (result != PCI_ERS_RESULT_RECOVERED && netif_running(netdev))
432     - dev_close(netdev);
433     + if (result != PCI_ERS_RESULT_RECOVERED) {
434     + if (netif_running(netdev))
435     + dev_close(netdev);
436     + pci_disable_device(pdev);
437     + }
438    
439     rtnl_unlock();
440    
441     @@ -7175,7 +7181,7 @@ static pci_ers_result_t bnxt_io_slot_reset(struct pci_dev *pdev)
442     err); /* non-fatal, continue */
443     }
444    
445     - return PCI_ERS_RESULT_RECOVERED;
446     + return result;
447     }
448    
449     /**
450     diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
451     index 781642d47133..751aac54f2d5 100644
452     --- a/drivers/net/ethernet/mellanox/mlx4/main.c
453     +++ b/drivers/net/ethernet/mellanox/mlx4/main.c
454     @@ -2478,6 +2478,7 @@ static int mlx4_allocate_default_counters(struct mlx4_dev *dev)
455    
456     if (!err || err == -ENOSPC) {
457     priv->def_counter[port] = idx;
458     + err = 0;
459     } else if (err == -ENOENT) {
460     err = 0;
461     continue;
462     @@ -2527,7 +2528,8 @@ int mlx4_counter_alloc(struct mlx4_dev *dev, u32 *idx)
463     MLX4_CMD_TIME_CLASS_A, MLX4_CMD_WRAPPED);
464     if (!err)
465     *idx = get_param_l(&out_param);
466     -
467     + if (WARN_ON(err == -ENOSPC))
468     + err = -EINVAL;
469     return err;
470     }
471     return __mlx4_counter_alloc(dev, idx);
472     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
473     index 1d5263c46eee..bb142a13d9f2 100644
474     --- a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
475     +++ b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
476     @@ -813,7 +813,6 @@ static void cmd_work_handler(struct work_struct *work)
477     }
478    
479     cmd->ent_arr[ent->idx] = ent;
480     - set_bit(MLX5_CMD_ENT_STATE_PENDING_COMP, &ent->state);
481     lay = get_inst(cmd, ent->idx);
482     ent->lay = lay;
483     memset(lay, 0, sizeof(*lay));
484     @@ -835,6 +834,7 @@ static void cmd_work_handler(struct work_struct *work)
485    
486     if (ent->callback)
487     schedule_delayed_work(&ent->cb_timeout_work, cb_timeout);
488     + set_bit(MLX5_CMD_ENT_STATE_PENDING_COMP, &ent->state);
489    
490     /* Skip sending command to fw if internal error */
491     if (pci_channel_offline(dev->pdev) ||
492     @@ -847,6 +847,10 @@ static void cmd_work_handler(struct work_struct *work)
493     MLX5_SET(mbox_out, ent->out, syndrome, drv_synd);
494    
495     mlx5_cmd_comp_handler(dev, 1UL << ent->idx, true);
496     + /* no doorbell, no need to keep the entry */
497     + free_ent(cmd, ent->idx);
498     + if (ent->callback)
499     + free_cmd(ent);
500     return;
501     }
502    
503     diff --git a/drivers/net/ethernet/moxa/moxart_ether.c b/drivers/net/ethernet/moxa/moxart_ether.c
504     index 0622fd03941b..6fe61d9343cb 100644
505     --- a/drivers/net/ethernet/moxa/moxart_ether.c
506     +++ b/drivers/net/ethernet/moxa/moxart_ether.c
507     @@ -571,7 +571,7 @@ static int moxart_remove(struct platform_device *pdev)
508     struct net_device *ndev = platform_get_drvdata(pdev);
509    
510     unregister_netdev(ndev);
511     - free_irq(ndev->irq, ndev);
512     + devm_free_irq(&pdev->dev, ndev->irq, ndev);
513     moxart_mac_free_memory(ndev);
514     free_netdev(ndev);
515    
516     diff --git a/drivers/net/ethernet/natsemi/jazzsonic.c b/drivers/net/ethernet/natsemi/jazzsonic.c
517     index acf3f11e38cc..68d2f31921ff 100644
518     --- a/drivers/net/ethernet/natsemi/jazzsonic.c
519     +++ b/drivers/net/ethernet/natsemi/jazzsonic.c
520     @@ -247,13 +247,15 @@ static int jazz_sonic_probe(struct platform_device *pdev)
521     goto out;
522     err = register_netdev(dev);
523     if (err)
524     - goto out1;
525     + goto undo_probe1;
526    
527     printk("%s: MAC %pM IRQ %d\n", dev->name, dev->dev_addr, dev->irq);
528    
529     return 0;
530    
531     -out1:
532     +undo_probe1:
533     + dma_free_coherent(lp->device, SIZEOF_SONIC_DESC * SONIC_BUS_SCALE(lp->dma_bitmode),
534     + lp->descriptors, lp->descriptors_laddr);
535     release_mem_region(dev->base_addr, SONIC_MEM_SIZE);
536     out:
537     free_netdev(dev);
538     diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
539     index 92ad43e53c72..35d8c636de12 100644
540     --- a/drivers/net/geneve.c
541     +++ b/drivers/net/geneve.c
542     @@ -835,7 +835,9 @@ static struct dst_entry *geneve_get_v6_dst(struct sk_buff *skb,
543     return dst;
544     }
545    
546     - if (ipv6_stub->ipv6_dst_lookup(geneve->net, gs6->sock->sk, &dst, fl6)) {
547     + dst = ipv6_stub->ipv6_dst_lookup_flow(geneve->net, gs6->sock->sk, fl6,
548     + NULL);
549     + if (IS_ERR(dst)) {
550     netdev_dbg(dev, "no route to %pI6\n", &fl6->daddr);
551     return ERR_PTR(-ENETUNREACH);
552     }
553     diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
554     index df2ee65a33e3..5defa29069ca 100644
555     --- a/drivers/net/macsec.c
556     +++ b/drivers/net/macsec.c
557     @@ -1315,7 +1315,8 @@ static struct crypto_aead *macsec_alloc_tfm(char *key, int key_len, int icv_len)
558     struct crypto_aead *tfm;
559     int ret;
560    
561     - tfm = crypto_alloc_aead("gcm(aes)", 0, 0);
562     + /* Pick a sync gcm(aes) cipher to ensure order is preserved. */
563     + tfm = crypto_alloc_aead("gcm(aes)", 0, CRYPTO_ALG_ASYNC);
564    
565     if (IS_ERR(tfm))
566     return tfm;
567     diff --git a/drivers/net/phy/dp83640.c b/drivers/net/phy/dp83640.c
568     index 557f6510bad7..7e94526de51c 100644
569     --- a/drivers/net/phy/dp83640.c
570     +++ b/drivers/net/phy/dp83640.c
571     @@ -1108,7 +1108,7 @@ static struct dp83640_clock *dp83640_clock_get_bus(struct mii_bus *bus)
572     goto out;
573     }
574     dp83640_clock_init(clock, bus);
575     - list_add_tail(&phyter_clocks, &clock->list);
576     + list_add_tail(&clock->list, &phyter_clocks);
577     out:
578     mutex_unlock(&phyter_clocks_lock);
579    
580     diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
581     index adb38a4ec9ac..1704d9e2ca8d 100644
582     --- a/drivers/net/phy/micrel.c
583     +++ b/drivers/net/phy/micrel.c
584     @@ -677,8 +677,8 @@ static void kszphy_get_strings(struct phy_device *phydev, u8 *data)
585     int i;
586    
587     for (i = 0; i < ARRAY_SIZE(kszphy_hw_stats); i++) {
588     - memcpy(data + i * ETH_GSTRING_LEN,
589     - kszphy_hw_stats[i].string, ETH_GSTRING_LEN);
590     + strlcpy(data + i * ETH_GSTRING_LEN,
591     + kszphy_hw_stats[i].string, ETH_GSTRING_LEN);
592     }
593     }
594    
595     diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
596     index 97f6b8130db3..5755eec00d7f 100644
597     --- a/drivers/net/usb/qmi_wwan.c
598     +++ b/drivers/net/usb/qmi_wwan.c
599     @@ -950,6 +950,7 @@ static const struct usb_device_id products[] = {
600     {QMI_FIXED_INTF(0x413c, 0x81b3, 8)}, /* Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card (rev3) */
601     {QMI_FIXED_INTF(0x413c, 0x81b6, 8)}, /* Dell Wireless 5811e */
602     {QMI_FIXED_INTF(0x413c, 0x81b6, 10)}, /* Dell Wireless 5811e */
603     + {QMI_FIXED_INTF(0x413c, 0x81cc, 8)}, /* Dell Wireless 5816e */
604     {QMI_FIXED_INTF(0x413c, 0x81d7, 0)}, /* Dell Wireless 5821e */
605     {QMI_FIXED_INTF(0x413c, 0x81d7, 1)}, /* Dell Wireless 5821e preproduction config */
606     {QMI_FIXED_INTF(0x413c, 0x81e0, 0)}, /* Dell Wireless 5821e with eSIM support*/
607     diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
608     index bc4542d9a08d..58ddb6c90418 100644
609     --- a/drivers/net/vxlan.c
610     +++ b/drivers/net/vxlan.c
611     @@ -1881,7 +1881,6 @@ static struct dst_entry *vxlan6_get_route(struct vxlan_dev *vxlan,
612     bool use_cache = ip_tunnel_dst_cache_usable(skb, info);
613     struct dst_entry *ndst;
614     struct flowi6 fl6;
615     - int err;
616    
617     if (!sock6)
618     return ERR_PTR(-EIO);
619     @@ -1902,11 +1901,10 @@ static struct dst_entry *vxlan6_get_route(struct vxlan_dev *vxlan,
620     fl6.flowi6_mark = skb->mark;
621     fl6.flowi6_proto = IPPROTO_UDP;
622    
623     - err = ipv6_stub->ipv6_dst_lookup(vxlan->net,
624     - sock6->sock->sk,
625     - &ndst, &fl6);
626     - if (err < 0)
627     - return ERR_PTR(err);
628     + ndst = ipv6_stub->ipv6_dst_lookup_flow(vxlan->net, sock6->sock->sk,
629     + &fl6, NULL);
630     + if (unlikely(IS_ERR(ndst)))
631     + return ERR_PTR(-ENETUNREACH);
632    
633     *saddr = fl6.saddr;
634     if (use_cache)
635     diff --git a/drivers/pinctrl/intel/pinctrl-cherryview.c b/drivers/pinctrl/intel/pinctrl-cherryview.c
636     index e8c08eb97530..d1a99b2e2d4c 100644
637     --- a/drivers/pinctrl/intel/pinctrl-cherryview.c
638     +++ b/drivers/pinctrl/intel/pinctrl-cherryview.c
639     @@ -1509,11 +1509,15 @@ static void chv_gpio_irq_handler(struct irq_desc *desc)
640     struct chv_pinctrl *pctrl = gpiochip_get_data(gc);
641     struct irq_chip *chip = irq_desc_get_chip(desc);
642     unsigned long pending;
643     + unsigned long flags;
644     u32 intr_line;
645    
646     chained_irq_enter(chip, desc);
647    
648     + raw_spin_lock_irqsave(&chv_lock, flags);
649     pending = readl(pctrl->regs + CHV_INTSTAT);
650     + raw_spin_unlock_irqrestore(&chv_lock, flags);
651     +
652     for_each_set_bit(intr_line, &pending, pctrl->community->nirqs) {
653     unsigned irq, offset;
654    
655     diff --git a/drivers/ptp/ptp_clock.c b/drivers/ptp/ptp_clock.c
656     index 2aa5b37cc6d2..bf1536f1c90b 100644
657     --- a/drivers/ptp/ptp_clock.c
658     +++ b/drivers/ptp/ptp_clock.c
659     @@ -171,10 +171,11 @@ static struct posix_clock_operations ptp_clock_ops = {
660     .read = ptp_read,
661     };
662    
663     -static void delete_ptp_clock(struct posix_clock *pc)
664     +static void ptp_clock_release(struct device *dev)
665     {
666     - struct ptp_clock *ptp = container_of(pc, struct ptp_clock, clock);
667     + struct ptp_clock *ptp = container_of(dev, struct ptp_clock, dev);
668    
669     + ptp_cleanup_pin_groups(ptp);
670     mutex_destroy(&ptp->tsevq_mux);
671     mutex_destroy(&ptp->pincfg_mux);
672     ida_simple_remove(&ptp_clocks_map, ptp->index);
673     @@ -205,7 +206,6 @@ struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info,
674     }
675    
676     ptp->clock.ops = ptp_clock_ops;
677     - ptp->clock.release = delete_ptp_clock;
678     ptp->info = info;
679     ptp->devid = MKDEV(major, index);
680     ptp->index = index;
681     @@ -214,17 +214,9 @@ struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info,
682     mutex_init(&ptp->pincfg_mux);
683     init_waitqueue_head(&ptp->tsev_wq);
684    
685     - /* Create a new device in our class. */
686     - ptp->dev = device_create(ptp_class, parent, ptp->devid, ptp,
687     - "ptp%d", ptp->index);
688     - if (IS_ERR(ptp->dev))
689     - goto no_device;
690     -
691     - dev_set_drvdata(ptp->dev, ptp);
692     -
693     - err = ptp_populate_sysfs(ptp);
694     + err = ptp_populate_pin_groups(ptp);
695     if (err)
696     - goto no_sysfs;
697     + goto no_pin_groups;
698    
699     /* Register a new PPS source. */
700     if (info->pps) {
701     @@ -235,13 +227,24 @@ struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info,
702     pps.owner = info->owner;
703     ptp->pps_source = pps_register_source(&pps, PTP_PPS_DEFAULTS);
704     if (!ptp->pps_source) {
705     + err = -EINVAL;
706     pr_err("failed to register pps source\n");
707     goto no_pps;
708     }
709     }
710    
711     - /* Create a posix clock. */
712     - err = posix_clock_register(&ptp->clock, ptp->devid);
713     + /* Initialize a new device of our class in our clock structure. */
714     + device_initialize(&ptp->dev);
715     + ptp->dev.devt = ptp->devid;
716     + ptp->dev.class = ptp_class;
717     + ptp->dev.parent = parent;
718     + ptp->dev.groups = ptp->pin_attr_groups;
719     + ptp->dev.release = ptp_clock_release;
720     + dev_set_drvdata(&ptp->dev, ptp);
721     + dev_set_name(&ptp->dev, "ptp%d", ptp->index);
722     +
723     + /* Create a posix clock and link it to the device. */
724     + err = posix_clock_register(&ptp->clock, &ptp->dev);
725     if (err) {
726     pr_err("failed to create posix clock\n");
727     goto no_clock;
728     @@ -253,10 +256,8 @@ no_clock:
729     if (ptp->pps_source)
730     pps_unregister_source(ptp->pps_source);
731     no_pps:
732     - ptp_cleanup_sysfs(ptp);
733     -no_sysfs:
734     - device_destroy(ptp_class, ptp->devid);
735     -no_device:
736     + ptp_cleanup_pin_groups(ptp);
737     +no_pin_groups:
738     mutex_destroy(&ptp->tsevq_mux);
739     mutex_destroy(&ptp->pincfg_mux);
740     ida_simple_remove(&ptp_clocks_map, index);
741     @@ -275,10 +276,9 @@ int ptp_clock_unregister(struct ptp_clock *ptp)
742     /* Release the clock's resources. */
743     if (ptp->pps_source)
744     pps_unregister_source(ptp->pps_source);
745     - ptp_cleanup_sysfs(ptp);
746     - device_destroy(ptp_class, ptp->devid);
747    
748     posix_clock_unregister(&ptp->clock);
749     +
750     return 0;
751     }
752     EXPORT_SYMBOL(ptp_clock_unregister);
753     diff --git a/drivers/ptp/ptp_private.h b/drivers/ptp/ptp_private.h
754     index 9c5d41421b65..15346e840caa 100644
755     --- a/drivers/ptp/ptp_private.h
756     +++ b/drivers/ptp/ptp_private.h
757     @@ -40,7 +40,7 @@ struct timestamp_event_queue {
758    
759     struct ptp_clock {
760     struct posix_clock clock;
761     - struct device *dev;
762     + struct device dev;
763     struct ptp_clock_info *info;
764     dev_t devid;
765     int index; /* index into clocks.map */
766     @@ -54,6 +54,8 @@ struct ptp_clock {
767     struct device_attribute *pin_dev_attr;
768     struct attribute **pin_attr;
769     struct attribute_group pin_attr_group;
770     + /* 1st entry is a pointer to the real group, 2nd is NULL terminator */
771     + const struct attribute_group *pin_attr_groups[2];
772     };
773    
774     /*
775     @@ -94,8 +96,7 @@ uint ptp_poll(struct posix_clock *pc,
776    
777     extern const struct attribute_group *ptp_groups[];
778    
779     -int ptp_cleanup_sysfs(struct ptp_clock *ptp);
780     -
781     -int ptp_populate_sysfs(struct ptp_clock *ptp);
782     +int ptp_populate_pin_groups(struct ptp_clock *ptp);
783     +void ptp_cleanup_pin_groups(struct ptp_clock *ptp);
784    
785     #endif
786     diff --git a/drivers/ptp/ptp_sysfs.c b/drivers/ptp/ptp_sysfs.c
787     index 302e626fe6b0..731d0423c8aa 100644
788     --- a/drivers/ptp/ptp_sysfs.c
789     +++ b/drivers/ptp/ptp_sysfs.c
790     @@ -46,27 +46,6 @@ PTP_SHOW_INT(n_periodic_outputs, n_per_out);
791     PTP_SHOW_INT(n_programmable_pins, n_pins);
792     PTP_SHOW_INT(pps_available, pps);
793    
794     -static struct attribute *ptp_attrs[] = {
795     - &dev_attr_clock_name.attr,
796     - &dev_attr_max_adjustment.attr,
797     - &dev_attr_n_alarms.attr,
798     - &dev_attr_n_external_timestamps.attr,
799     - &dev_attr_n_periodic_outputs.attr,
800     - &dev_attr_n_programmable_pins.attr,
801     - &dev_attr_pps_available.attr,
802     - NULL,
803     -};
804     -
805     -static const struct attribute_group ptp_group = {
806     - .attrs = ptp_attrs,
807     -};
808     -
809     -const struct attribute_group *ptp_groups[] = {
810     - &ptp_group,
811     - NULL,
812     -};
813     -
814     -
815     static ssize_t extts_enable_store(struct device *dev,
816     struct device_attribute *attr,
817     const char *buf, size_t count)
818     @@ -91,6 +70,7 @@ static ssize_t extts_enable_store(struct device *dev,
819     out:
820     return err;
821     }
822     +static DEVICE_ATTR(extts_enable, 0220, NULL, extts_enable_store);
823    
824     static ssize_t extts_fifo_show(struct device *dev,
825     struct device_attribute *attr, char *page)
826     @@ -124,6 +104,7 @@ out:
827     mutex_unlock(&ptp->tsevq_mux);
828     return cnt;
829     }
830     +static DEVICE_ATTR(fifo, 0444, extts_fifo_show, NULL);
831    
832     static ssize_t period_store(struct device *dev,
833     struct device_attribute *attr,
834     @@ -151,6 +132,7 @@ static ssize_t period_store(struct device *dev,
835     out:
836     return err;
837     }
838     +static DEVICE_ATTR(period, 0220, NULL, period_store);
839    
840     static ssize_t pps_enable_store(struct device *dev,
841     struct device_attribute *attr,
842     @@ -177,6 +159,57 @@ static ssize_t pps_enable_store(struct device *dev,
843     out:
844     return err;
845     }
846     +static DEVICE_ATTR(pps_enable, 0220, NULL, pps_enable_store);
847     +
848     +static struct attribute *ptp_attrs[] = {
849     + &dev_attr_clock_name.attr,
850     +
851     + &dev_attr_max_adjustment.attr,
852     + &dev_attr_n_alarms.attr,
853     + &dev_attr_n_external_timestamps.attr,
854     + &dev_attr_n_periodic_outputs.attr,
855     + &dev_attr_n_programmable_pins.attr,
856     + &dev_attr_pps_available.attr,
857     +
858     + &dev_attr_extts_enable.attr,
859     + &dev_attr_fifo.attr,
860     + &dev_attr_period.attr,
861     + &dev_attr_pps_enable.attr,
862     + NULL
863     +};
864     +
865     +static umode_t ptp_is_attribute_visible(struct kobject *kobj,
866     + struct attribute *attr, int n)
867     +{
868     + struct device *dev = kobj_to_dev(kobj);
869     + struct ptp_clock *ptp = dev_get_drvdata(dev);
870     + struct ptp_clock_info *info = ptp->info;
871     + umode_t mode = attr->mode;
872     +
873     + if (attr == &dev_attr_extts_enable.attr ||
874     + attr == &dev_attr_fifo.attr) {
875     + if (!info->n_ext_ts)
876     + mode = 0;
877     + } else if (attr == &dev_attr_period.attr) {
878     + if (!info->n_per_out)
879     + mode = 0;
880     + } else if (attr == &dev_attr_pps_enable.attr) {
881     + if (!info->pps)
882     + mode = 0;
883     + }
884     +
885     + return mode;
886     +}
887     +
888     +static const struct attribute_group ptp_group = {
889     + .is_visible = ptp_is_attribute_visible,
890     + .attrs = ptp_attrs,
891     +};
892     +
893     +const struct attribute_group *ptp_groups[] = {
894     + &ptp_group,
895     + NULL
896     +};
897    
898     static int ptp_pin_name2index(struct ptp_clock *ptp, const char *name)
899     {
900     @@ -235,40 +268,14 @@ static ssize_t ptp_pin_store(struct device *dev, struct device_attribute *attr,
901     return count;
902     }
903    
904     -static DEVICE_ATTR(extts_enable, 0220, NULL, extts_enable_store);
905     -static DEVICE_ATTR(fifo, 0444, extts_fifo_show, NULL);
906     -static DEVICE_ATTR(period, 0220, NULL, period_store);
907     -static DEVICE_ATTR(pps_enable, 0220, NULL, pps_enable_store);
908     -
909     -int ptp_cleanup_sysfs(struct ptp_clock *ptp)
910     +int ptp_populate_pin_groups(struct ptp_clock *ptp)
911     {
912     - struct device *dev = ptp->dev;
913     - struct ptp_clock_info *info = ptp->info;
914     -
915     - if (info->n_ext_ts) {
916     - device_remove_file(dev, &dev_attr_extts_enable);
917     - device_remove_file(dev, &dev_attr_fifo);
918     - }
919     - if (info->n_per_out)
920     - device_remove_file(dev, &dev_attr_period);
921     -
922     - if (info->pps)
923     - device_remove_file(dev, &dev_attr_pps_enable);
924     -
925     - if (info->n_pins) {
926     - sysfs_remove_group(&dev->kobj, &ptp->pin_attr_group);
927     - kfree(ptp->pin_attr);
928     - kfree(ptp->pin_dev_attr);
929     - }
930     - return 0;
931     -}
932     -
933     -static int ptp_populate_pins(struct ptp_clock *ptp)
934     -{
935     - struct device *dev = ptp->dev;
936     struct ptp_clock_info *info = ptp->info;
937     int err = -ENOMEM, i, n_pins = info->n_pins;
938    
939     + if (!n_pins)
940     + return 0;
941     +
942     ptp->pin_dev_attr = kzalloc(n_pins * sizeof(*ptp->pin_dev_attr),
943     GFP_KERNEL);
944     if (!ptp->pin_dev_attr)
945     @@ -292,61 +299,18 @@ static int ptp_populate_pins(struct ptp_clock *ptp)
946     ptp->pin_attr_group.name = "pins";
947     ptp->pin_attr_group.attrs = ptp->pin_attr;
948    
949     - err = sysfs_create_group(&dev->kobj, &ptp->pin_attr_group);
950     - if (err)
951     - goto no_group;
952     + ptp->pin_attr_groups[0] = &ptp->pin_attr_group;
953     +
954     return 0;
955    
956     -no_group:
957     - kfree(ptp->pin_attr);
958     no_pin_attr:
959     kfree(ptp->pin_dev_attr);
960     no_dev_attr:
961     return err;
962     }
963    
964     -int ptp_populate_sysfs(struct ptp_clock *ptp)
965     +void ptp_cleanup_pin_groups(struct ptp_clock *ptp)
966     {
967     - struct device *dev = ptp->dev;
968     - struct ptp_clock_info *info = ptp->info;
969     - int err;
970     -
971     - if (info->n_ext_ts) {
972     - err = device_create_file(dev, &dev_attr_extts_enable);
973     - if (err)
974     - goto out1;
975     - err = device_create_file(dev, &dev_attr_fifo);
976     - if (err)
977     - goto out2;
978     - }
979     - if (info->n_per_out) {
980     - err = device_create_file(dev, &dev_attr_period);
981     - if (err)
982     - goto out3;
983     - }
984     - if (info->pps) {
985     - err = device_create_file(dev, &dev_attr_pps_enable);
986     - if (err)
987     - goto out4;
988     - }
989     - if (info->n_pins) {
990     - err = ptp_populate_pins(ptp);
991     - if (err)
992     - goto out5;
993     - }
994     - return 0;
995     -out5:
996     - if (info->pps)
997     - device_remove_file(dev, &dev_attr_pps_enable);
998     -out4:
999     - if (info->n_per_out)
1000     - device_remove_file(dev, &dev_attr_period);
1001     -out3:
1002     - if (info->n_ext_ts)
1003     - device_remove_file(dev, &dev_attr_fifo);
1004     -out2:
1005     - if (info->n_ext_ts)
1006     - device_remove_file(dev, &dev_attr_extts_enable);
1007     -out1:
1008     - return err;
1009     + kfree(ptp->pin_attr);
1010     + kfree(ptp->pin_dev_attr);
1011     }
1012     diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
1013     index c924df5538dd..417927b279b6 100644
1014     --- a/drivers/scsi/sg.c
1015     +++ b/drivers/scsi/sg.c
1016     @@ -695,8 +695,10 @@ sg_write(struct file *filp, const char __user *buf, size_t count, loff_t * ppos)
1017     hp->flags = input_size; /* structure abuse ... */
1018     hp->pack_id = old_hdr.pack_id;
1019     hp->usr_ptr = NULL;
1020     - if (__copy_from_user(cmnd, buf, cmd_size))
1021     + if (__copy_from_user(cmnd, buf, cmd_size)) {
1022     + sg_remove_request(sfp, srp);
1023     return -EFAULT;
1024     + }
1025     /*
1026     * SG_DXFER_TO_FROM_DEV is functionally equivalent to SG_DXFER_FROM_DEV,
1027     * but is is possible that the app intended SG_DXFER_TO_DEV, because there
1028     diff --git a/drivers/spi/spi-dw.c b/drivers/spi/spi-dw.c
1029     index c4226c07e091..16f0def9df82 100644
1030     --- a/drivers/spi/spi-dw.c
1031     +++ b/drivers/spi/spi-dw.c
1032     @@ -180,9 +180,11 @@ static inline u32 rx_max(struct dw_spi *dws)
1033    
1034     static void dw_writer(struct dw_spi *dws)
1035     {
1036     - u32 max = tx_max(dws);
1037     + u32 max;
1038     u16 txw = 0;
1039    
1040     + spin_lock(&dws->buf_lock);
1041     + max = tx_max(dws);
1042     while (max--) {
1043     /* Set the tx word if the transfer's original "tx" is not null */
1044     if (dws->tx_end - dws->len) {
1045     @@ -194,13 +196,16 @@ static void dw_writer(struct dw_spi *dws)
1046     dw_write_io_reg(dws, DW_SPI_DR, txw);
1047     dws->tx += dws->n_bytes;
1048     }
1049     + spin_unlock(&dws->buf_lock);
1050     }
1051    
1052     static void dw_reader(struct dw_spi *dws)
1053     {
1054     - u32 max = rx_max(dws);
1055     + u32 max;
1056     u16 rxw;
1057    
1058     + spin_lock(&dws->buf_lock);
1059     + max = rx_max(dws);
1060     while (max--) {
1061     rxw = dw_read_io_reg(dws, DW_SPI_DR);
1062     /* Care rx only if the transfer's original "rx" is not null */
1063     @@ -212,6 +217,7 @@ static void dw_reader(struct dw_spi *dws)
1064     }
1065     dws->rx += dws->n_bytes;
1066     }
1067     + spin_unlock(&dws->buf_lock);
1068     }
1069    
1070     static void int_error_stop(struct dw_spi *dws, const char *msg)
1071     @@ -284,18 +290,20 @@ static int dw_spi_transfer_one(struct spi_master *master,
1072     {
1073     struct dw_spi *dws = spi_master_get_devdata(master);
1074     struct chip_data *chip = spi_get_ctldata(spi);
1075     + unsigned long flags;
1076     u8 imask = 0;
1077     u16 txlevel = 0;
1078     u32 cr0;
1079     int ret;
1080    
1081     dws->dma_mapped = 0;
1082     -
1083     + spin_lock_irqsave(&dws->buf_lock, flags);
1084     dws->tx = (void *)transfer->tx_buf;
1085     dws->tx_end = dws->tx + transfer->len;
1086     dws->rx = transfer->rx_buf;
1087     dws->rx_end = dws->rx + transfer->len;
1088     dws->len = transfer->len;
1089     + spin_unlock_irqrestore(&dws->buf_lock, flags);
1090    
1091     spi_enable_chip(dws, 0);
1092    
1093     @@ -487,6 +495,7 @@ int dw_spi_add_host(struct device *dev, struct dw_spi *dws)
1094     dws->dma_inited = 0;
1095     dws->dma_addr = (dma_addr_t)(dws->paddr + DW_SPI_DR);
1096     snprintf(dws->name, sizeof(dws->name), "dw_spi%d", dws->bus_num);
1097     + spin_lock_init(&dws->buf_lock);
1098    
1099     ret = request_irq(dws->irq, dw_spi_irq, IRQF_SHARED, dws->name, master);
1100     if (ret < 0) {
1101     diff --git a/drivers/spi/spi-dw.h b/drivers/spi/spi-dw.h
1102     index c21ca02f8ec5..e80338e6ffa2 100644
1103     --- a/drivers/spi/spi-dw.h
1104     +++ b/drivers/spi/spi-dw.h
1105     @@ -117,6 +117,7 @@ struct dw_spi {
1106     size_t len;
1107     void *tx;
1108     void *tx_end;
1109     + spinlock_t buf_lock;
1110     void *rx;
1111     void *rx_end;
1112     int dma_mapped;
1113     diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c
1114     index 3f1662b64bab..6420cae820bc 100644
1115     --- a/drivers/usb/gadget/configfs.c
1116     +++ b/drivers/usb/gadget/configfs.c
1117     @@ -259,6 +259,9 @@ static ssize_t gadget_dev_desc_UDC_store(struct config_item *item,
1118     char *name;
1119     int ret;
1120    
1121     + if (strlen(page) < len)
1122     + return -EOVERFLOW;
1123     +
1124     name = kstrdup(page, GFP_KERNEL);
1125     if (!name)
1126     return -ENOMEM;
1127     diff --git a/drivers/usb/gadget/legacy/audio.c b/drivers/usb/gadget/legacy/audio.c
1128     index 5d7b3c6a422b..f61936b8baaf 100644
1129     --- a/drivers/usb/gadget/legacy/audio.c
1130     +++ b/drivers/usb/gadget/legacy/audio.c
1131     @@ -249,8 +249,10 @@ static int audio_bind(struct usb_composite_dev *cdev)
1132     struct usb_descriptor_header *usb_desc;
1133    
1134     usb_desc = usb_otg_descriptor_alloc(cdev->gadget);
1135     - if (!usb_desc)
1136     + if (!usb_desc) {
1137     + status = -ENOMEM;
1138     goto fail;
1139     + }
1140     usb_otg_descriptor_init(cdev->gadget, usb_desc);
1141     otg_desc[0] = usb_desc;
1142     otg_desc[1] = NULL;
1143     diff --git a/drivers/usb/gadget/legacy/cdc2.c b/drivers/usb/gadget/legacy/cdc2.c
1144     index 5ee25beb52f0..dc83e07bb242 100644
1145     --- a/drivers/usb/gadget/legacy/cdc2.c
1146     +++ b/drivers/usb/gadget/legacy/cdc2.c
1147     @@ -183,8 +183,10 @@ static int cdc_bind(struct usb_composite_dev *cdev)
1148     struct usb_descriptor_header *usb_desc;
1149    
1150     usb_desc = usb_otg_descriptor_alloc(gadget);
1151     - if (!usb_desc)
1152     + if (!usb_desc) {
1153     + status = -ENOMEM;
1154     goto fail1;
1155     + }
1156     usb_otg_descriptor_init(gadget, usb_desc);
1157     otg_desc[0] = usb_desc;
1158     otg_desc[1] = NULL;
1159     diff --git a/drivers/usb/gadget/legacy/ncm.c b/drivers/usb/gadget/legacy/ncm.c
1160     index 2fb4a847dd52..5448cf4ff588 100644
1161     --- a/drivers/usb/gadget/legacy/ncm.c
1162     +++ b/drivers/usb/gadget/legacy/ncm.c
1163     @@ -162,8 +162,10 @@ static int gncm_bind(struct usb_composite_dev *cdev)
1164     struct usb_descriptor_header *usb_desc;
1165    
1166     usb_desc = usb_otg_descriptor_alloc(gadget);
1167     - if (!usb_desc)
1168     + if (!usb_desc) {
1169     + status = -ENOMEM;
1170     goto fail;
1171     + }
1172     usb_otg_descriptor_init(gadget, usb_desc);
1173     otg_desc[0] = usb_desc;
1174     otg_desc[1] = NULL;
1175     diff --git a/drivers/usb/gadget/udc/net2272.c b/drivers/usb/gadget/udc/net2272.c
1176     index f57d293a1791..4b6797797141 100644
1177     --- a/drivers/usb/gadget/udc/net2272.c
1178     +++ b/drivers/usb/gadget/udc/net2272.c
1179     @@ -2666,6 +2666,8 @@ net2272_plat_probe(struct platform_device *pdev)
1180     err_req:
1181     release_mem_region(base, len);
1182     err:
1183     + kfree(dev);
1184     +
1185     return ret;
1186     }
1187    
1188     diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
1189     index b426c83ecb9b..1468dca77fac 100644
1190     --- a/drivers/usb/host/xhci-ring.c
1191     +++ b/drivers/usb/host/xhci-ring.c
1192     @@ -3347,8 +3347,8 @@ int xhci_queue_bulk_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
1193     /* New sg entry */
1194     --num_sgs;
1195     sent_len -= block_len;
1196     - if (num_sgs != 0) {
1197     - sg = sg_next(sg);
1198     + sg = sg_next(sg);
1199     + if (num_sgs != 0 && sg) {
1200     block_len = sg_dma_len(sg);
1201     addr = (u64) sg_dma_address(sg);
1202     addr += sent_len;
1203     diff --git a/drivers/usb/serial/garmin_gps.c b/drivers/usb/serial/garmin_gps.c
1204     index 91e7e3a166a5..c67a17faaa3c 100644
1205     --- a/drivers/usb/serial/garmin_gps.c
1206     +++ b/drivers/usb/serial/garmin_gps.c
1207     @@ -1161,8 +1161,8 @@ static void garmin_read_process(struct garmin_data *garmin_data_p,
1208     send it directly to the tty port */
1209     if (garmin_data_p->flags & FLAGS_QUEUING) {
1210     pkt_add(garmin_data_p, data, data_length);
1211     - } else if (bulk_data ||
1212     - getLayerId(data) == GARMIN_LAYERID_APPL) {
1213     + } else if (bulk_data || (data_length >= sizeof(u32) &&
1214     + getLayerId(data) == GARMIN_LAYERID_APPL)) {
1215    
1216     spin_lock_irqsave(&garmin_data_p->lock, flags);
1217     garmin_data_p->flags |= APP_RESP_SEEN;
1218     diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
1219     index fb6dc16c754a..06916ddc3159 100644
1220     --- a/drivers/usb/serial/qcserial.c
1221     +++ b/drivers/usb/serial/qcserial.c
1222     @@ -177,6 +177,7 @@ static const struct usb_device_id id_table[] = {
1223     {DEVICE_SWI(0x413c, 0x81b3)}, /* Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card (rev3) */
1224     {DEVICE_SWI(0x413c, 0x81b5)}, /* Dell Wireless 5811e QDL */
1225     {DEVICE_SWI(0x413c, 0x81b6)}, /* Dell Wireless 5811e QDL */
1226     + {DEVICE_SWI(0x413c, 0x81cc)}, /* Dell Wireless 5816e */
1227     {DEVICE_SWI(0x413c, 0x81cf)}, /* Dell Wireless 5819 */
1228     {DEVICE_SWI(0x413c, 0x81d0)}, /* Dell Wireless 5819 */
1229     {DEVICE_SWI(0x413c, 0x81d1)}, /* Dell Wireless 5818 */
1230     diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h
1231     index 0eb8c67ee138..4df15faa66d7 100644
1232     --- a/drivers/usb/storage/unusual_uas.h
1233     +++ b/drivers/usb/storage/unusual_uas.h
1234     @@ -41,6 +41,13 @@
1235     * and don't forget to CC: the USB development list <linux-usb@vger.kernel.org>
1236     */
1237    
1238     +/* Reported-by: Julian Groß <julian.g@posteo.de> */
1239     +UNUSUAL_DEV(0x059f, 0x105f, 0x0000, 0x9999,
1240     + "LaCie",
1241     + "2Big Quadra USB3",
1242     + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1243     + US_FL_NO_REPORT_OPCODES),
1244     +
1245     /*
1246     * Apricorn USB3 dongle sometimes returns "USBSUSBSUSBS" in response to SCSI
1247     * commands in UAS mode. Observed with the 1.28 firmware; are there others?
1248     diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
1249     index e7e25a86bbff..e78553d51837 100644
1250     --- a/fs/binfmt_elf.c
1251     +++ b/fs/binfmt_elf.c
1252     @@ -1100,6 +1100,18 @@ static int load_elf_binary(struct linux_binprm *bprm)
1253     current->mm->start_stack = bprm->p;
1254    
1255     if ((current->flags & PF_RANDOMIZE) && (randomize_va_space > 1)) {
1256     + /*
1257     + * For architectures with ELF randomization, when executing
1258     + * a loader directly (i.e. no interpreter listed in ELF
1259     + * headers), move the brk area out of the mmap region
1260     + * (since it grows up, and may collide early with the stack
1261     + * growing down), and into the unused ELF_ET_DYN_BASE region.
1262     + */
1263     + if (IS_ENABLED(CONFIG_ARCH_HAS_ELF_RANDOMIZE) &&
1264     + loc->elf_ex.e_type == ET_DYN && !interpreter)
1265     + current->mm->brk = current->mm->start_brk =
1266     + ELF_ET_DYN_BASE;
1267     +
1268     current->mm->brk = current->mm->start_brk =
1269     arch_randomize_brk(current->mm);
1270     #ifdef compat_brk_randomized
1271     diff --git a/fs/char_dev.c b/fs/char_dev.c
1272     index 23e0477edf7d..1bbb966c0783 100644
1273     --- a/fs/char_dev.c
1274     +++ b/fs/char_dev.c
1275     @@ -477,6 +477,85 @@ int cdev_add(struct cdev *p, dev_t dev, unsigned count)
1276     return 0;
1277     }
1278    
1279     +/**
1280     + * cdev_set_parent() - set the parent kobject for a char device
1281     + * @p: the cdev structure
1282     + * @kobj: the kobject to take a reference to
1283     + *
1284     + * cdev_set_parent() sets a parent kobject which will be referenced
1285     + * appropriately so the parent is not freed before the cdev. This
1286     + * should be called before cdev_add.
1287     + */
1288     +void cdev_set_parent(struct cdev *p, struct kobject *kobj)
1289     +{
1290     + WARN_ON(!kobj->state_initialized);
1291     + p->kobj.parent = kobj;
1292     +}
1293     +
1294     +/**
1295     + * cdev_device_add() - add a char device and it's corresponding
1296     + * struct device, linkink
1297     + * @dev: the device structure
1298     + * @cdev: the cdev structure
1299     + *
1300     + * cdev_device_add() adds the char device represented by @cdev to the system,
1301     + * just as cdev_add does. It then adds @dev to the system using device_add
1302     + * The dev_t for the char device will be taken from the struct device which
1303     + * needs to be initialized first. This helper function correctly takes a
1304     + * reference to the parent device so the parent will not get released until
1305     + * all references to the cdev are released.
1306     + *
1307     + * This helper uses dev->devt for the device number. If it is not set
1308     + * it will not add the cdev and it will be equivalent to device_add.
1309     + *
1310     + * This function should be used whenever the struct cdev and the
1311     + * struct device are members of the same structure whose lifetime is
1312     + * managed by the struct device.
1313     + *
1314     + * NOTE: Callers must assume that userspace was able to open the cdev and
1315     + * can call cdev fops callbacks at any time, even if this function fails.
1316     + */
1317     +int cdev_device_add(struct cdev *cdev, struct device *dev)
1318     +{
1319     + int rc = 0;
1320     +
1321     + if (dev->devt) {
1322     + cdev_set_parent(cdev, &dev->kobj);
1323     +
1324     + rc = cdev_add(cdev, dev->devt, 1);
1325     + if (rc)
1326     + return rc;
1327     + }
1328     +
1329     + rc = device_add(dev);
1330     + if (rc)
1331     + cdev_del(cdev);
1332     +
1333     + return rc;
1334     +}
1335     +
1336     +/**
1337     + * cdev_device_del() - inverse of cdev_device_add
1338     + * @dev: the device structure
1339     + * @cdev: the cdev structure
1340     + *
1341     + * cdev_device_del() is a helper function to call cdev_del and device_del.
1342     + * It should be used whenever cdev_device_add is used.
1343     + *
1344     + * If dev->devt is not set it will not remove the cdev and will be equivalent
1345     + * to device_del.
1346     + *
1347     + * NOTE: This guarantees that associated sysfs callbacks are not running
1348     + * or runnable, however any cdevs already open will remain and their fops
1349     + * will still be callable even after this function returns.
1350     + */
1351     +void cdev_device_del(struct cdev *cdev, struct device *dev)
1352     +{
1353     + device_del(dev);
1354     + if (dev->devt)
1355     + cdev_del(cdev);
1356     +}
1357     +
1358     static void cdev_unmap(dev_t dev, unsigned count)
1359     {
1360     kobj_unmap(cdev_map, dev, count);
1361     @@ -488,6 +567,10 @@ static void cdev_unmap(dev_t dev, unsigned count)
1362     *
1363     * cdev_del() removes @p from the system, possibly freeing the structure
1364     * itself.
1365     + *
1366     + * NOTE: This guarantees that cdev device will no longer be able to be
1367     + * opened, however any cdevs already open will remain and their fops will
1368     + * still be callable even after cdev_del returns.
1369     */
1370     void cdev_del(struct cdev *p)
1371     {
1372     @@ -576,5 +659,8 @@ EXPORT_SYMBOL(cdev_init);
1373     EXPORT_SYMBOL(cdev_alloc);
1374     EXPORT_SYMBOL(cdev_del);
1375     EXPORT_SYMBOL(cdev_add);
1376     +EXPORT_SYMBOL(cdev_set_parent);
1377     +EXPORT_SYMBOL(cdev_device_add);
1378     +EXPORT_SYMBOL(cdev_device_del);
1379     EXPORT_SYMBOL(__register_chrdev);
1380     EXPORT_SYMBOL(__unregister_chrdev);
1381     diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c
1382     index 741b83c59a30..568abcd6d0dd 100644
1383     --- a/fs/cifs/cifssmb.c
1384     +++ b/fs/cifs/cifssmb.c
1385     @@ -184,6 +184,18 @@ cifs_reconnect_tcon(struct cifs_tcon *tcon, int smb_command)
1386     * reconnect the same SMB session
1387     */
1388     mutex_lock(&ses->session_mutex);
1389     +
1390     + /*
1391     + * Recheck after acquire mutex. If another thread is negotiating
1392     + * and the server never sends an answer the socket will be closed
1393     + * and tcpStatus set to reconnect.
1394     + */
1395     + if (server->tcpStatus == CifsNeedReconnect) {
1396     + rc = -EHOSTDOWN;
1397     + mutex_unlock(&ses->session_mutex);
1398     + goto out;
1399     + }
1400     +
1401     rc = cifs_negotiate_protocol(0, ses);
1402     if (rc == 0 && ses->need_reconnect)
1403     rc = cifs_setup_session(0, ses, nls_codepage);
1404     diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
1405     index c018d161735c..3545b237187a 100644
1406     --- a/fs/cifs/connect.c
1407     +++ b/fs/cifs/connect.c
1408     @@ -551,20 +551,21 @@ static bool
1409     server_unresponsive(struct TCP_Server_Info *server)
1410     {
1411     /*
1412     - * We need to wait 2 echo intervals to make sure we handle such
1413     + * We need to wait 3 echo intervals to make sure we handle such
1414     * situations right:
1415     * 1s client sends a normal SMB request
1416     - * 2s client gets a response
1417     + * 3s client gets a response
1418     * 30s echo workqueue job pops, and decides we got a response recently
1419     * and don't need to send another
1420     * ...
1421     * 65s kernel_recvmsg times out, and we see that we haven't gotten
1422     * a response in >60s.
1423     */
1424     - if (server->tcpStatus == CifsGood &&
1425     - time_after(jiffies, server->lstrp + 2 * server->echo_interval)) {
1426     + if ((server->tcpStatus == CifsGood ||
1427     + server->tcpStatus == CifsNeedNegotiate) &&
1428     + time_after(jiffies, server->lstrp + 3 * server->echo_interval)) {
1429     cifs_dbg(VFS, "Server %s has not responded in %lu seconds. Reconnecting...\n",
1430     - server->hostname, (2 * server->echo_interval) / HZ);
1431     + server->hostname, (3 * server->echo_interval) / HZ);
1432     cifs_reconnect(server);
1433     wake_up(&server->response_q);
1434     return true;
1435     diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
1436     index e8dc28dbe563..0a23b6002ff1 100644
1437     --- a/fs/cifs/smb2pdu.c
1438     +++ b/fs/cifs/smb2pdu.c
1439     @@ -246,6 +246,18 @@ smb2_reconnect(__le16 smb2_command, struct cifs_tcon *tcon)
1440     * the same SMB session
1441     */
1442     mutex_lock(&tcon->ses->session_mutex);
1443     +
1444     + /*
1445     + * Recheck after acquire mutex. If another thread is negotiating
1446     + * and the server never sends an answer the socket will be closed
1447     + * and tcpStatus set to reconnect.
1448     + */
1449     + if (server->tcpStatus == CifsNeedReconnect) {
1450     + rc = -EHOSTDOWN;
1451     + mutex_unlock(&tcon->ses->session_mutex);
1452     + goto out;
1453     + }
1454     +
1455     rc = cifs_negotiate_protocol(0, tcon->ses);
1456     if (!rc && tcon->ses->need_reconnect) {
1457     rc = cifs_setup_session(0, tcon->ses, nls_codepage);
1458     diff --git a/fs/exec.c b/fs/exec.c
1459     index bb03b98fd03b..cd5da140f94c 100644
1460     --- a/fs/exec.c
1461     +++ b/fs/exec.c
1462     @@ -1270,6 +1270,8 @@ int flush_old_exec(struct linux_binprm * bprm)
1463     */
1464     set_mm_exe_file(bprm->mm, bprm->file);
1465    
1466     + would_dump(bprm, bprm->file);
1467     +
1468     /*
1469     * Release all of the old mmap stuff
1470     */
1471     @@ -1780,8 +1782,6 @@ static int do_execveat_common(int fd, struct filename *filename,
1472     if (retval < 0)
1473     goto out;
1474    
1475     - would_dump(bprm, bprm->file);
1476     -
1477     retval = exec_binprm(bprm);
1478     if (retval < 0)
1479     goto out;
1480     diff --git a/fs/ext4/block_validity.c b/fs/ext4/block_validity.c
1481     index d31d93ee5e76..45c7b0f9a8e3 100644
1482     --- a/fs/ext4/block_validity.c
1483     +++ b/fs/ext4/block_validity.c
1484     @@ -152,6 +152,7 @@ static int ext4_protect_reserved_inode(struct super_block *sb, u32 ino)
1485     return PTR_ERR(inode);
1486     num = (inode->i_size + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
1487     while (i < num) {
1488     + cond_resched();
1489     map.m_lblk = i;
1490     map.m_len = num - i;
1491     n = ext4_map_blocks(NULL, inode, &map, 0);
1492     diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
1493     index 2fc4ba6fa07f..060881478e59 100644
1494     --- a/include/linux/blkdev.h
1495     +++ b/include/linux/blkdev.h
1496     @@ -445,7 +445,8 @@ struct request_queue {
1497     unsigned int sg_reserved_size;
1498     int node;
1499     #ifdef CONFIG_BLK_DEV_IO_TRACE
1500     - struct blk_trace *blk_trace;
1501     + struct blk_trace __rcu *blk_trace;
1502     + struct mutex blk_trace_mutex;
1503     #endif
1504     /*
1505     * for flush operations
1506     diff --git a/include/linux/blktrace_api.h b/include/linux/blktrace_api.h
1507     index cceb72f9e29f..45fb00427306 100644
1508     --- a/include/linux/blktrace_api.h
1509     +++ b/include/linux/blktrace_api.h
1510     @@ -51,18 +51,26 @@ void __trace_note_message(struct blk_trace *, const char *fmt, ...);
1511     **/
1512     #define blk_add_trace_msg(q, fmt, ...) \
1513     do { \
1514     - struct blk_trace *bt = (q)->blk_trace; \
1515     + struct blk_trace *bt; \
1516     + \
1517     + rcu_read_lock(); \
1518     + bt = rcu_dereference((q)->blk_trace); \
1519     if (unlikely(bt)) \
1520     __trace_note_message(bt, fmt, ##__VA_ARGS__); \
1521     + rcu_read_unlock(); \
1522     } while (0)
1523     #define BLK_TN_MAX_MSG 128
1524    
1525     static inline bool blk_trace_note_message_enabled(struct request_queue *q)
1526     {
1527     - struct blk_trace *bt = q->blk_trace;
1528     - if (likely(!bt))
1529     - return false;
1530     - return bt->act_mask & BLK_TC_NOTIFY;
1531     + struct blk_trace *bt;
1532     + bool ret;
1533     +
1534     + rcu_read_lock();
1535     + bt = rcu_dereference(q->blk_trace);
1536     + ret = bt && (bt->act_mask & BLK_TC_NOTIFY);
1537     + rcu_read_unlock();
1538     + return ret;
1539     }
1540    
1541     extern void blk_add_driver_data(struct request_queue *q, struct request *rq,
1542     diff --git a/include/linux/cdev.h b/include/linux/cdev.h
1543     index f8763615a5f2..408bc09ce497 100644
1544     --- a/include/linux/cdev.h
1545     +++ b/include/linux/cdev.h
1546     @@ -4,6 +4,7 @@
1547     #include <linux/kobject.h>
1548     #include <linux/kdev_t.h>
1549     #include <linux/list.h>
1550     +#include <linux/device.h>
1551    
1552     struct file_operations;
1553     struct inode;
1554     @@ -26,6 +27,10 @@ void cdev_put(struct cdev *p);
1555    
1556     int cdev_add(struct cdev *, dev_t, unsigned);
1557    
1558     +void cdev_set_parent(struct cdev *p, struct kobject *kobj);
1559     +int cdev_device_add(struct cdev *cdev, struct device *dev);
1560     +void cdev_device_del(struct cdev *cdev, struct device *dev);
1561     +
1562     void cdev_del(struct cdev *);
1563    
1564     void cd_forget(struct inode *);
1565     diff --git a/include/linux/compiler.h b/include/linux/compiler.h
1566     index 7837afabbd78..824b1b97f989 100644
1567     --- a/include/linux/compiler.h
1568     +++ b/include/linux/compiler.h
1569     @@ -605,4 +605,11 @@ unsigned long read_word_at_a_time(const void *addr)
1570     # define __kprobes
1571     # define nokprobe_inline inline
1572     #endif
1573     +
1574     +/*
1575     + * This is needed in functions which generate the stack canary, see
1576     + * arch/x86/kernel/smpboot.c::start_secondary() for an example.
1577     + */
1578     +#define prevent_tail_call_optimization() mb()
1579     +
1580     #endif /* __LINUX_COMPILER_H */
1581     diff --git a/include/linux/fs.h b/include/linux/fs.h
1582     index c2c04f891785..2d569738eb32 100644
1583     --- a/include/linux/fs.h
1584     +++ b/include/linux/fs.h
1585     @@ -931,7 +931,7 @@ struct file_handle {
1586     __u32 handle_bytes;
1587     int handle_type;
1588     /* file identifier */
1589     - unsigned char f_handle[0];
1590     + unsigned char f_handle[];
1591     };
1592    
1593     static inline struct file *get_file(struct file *f)
1594     diff --git a/include/linux/pnp.h b/include/linux/pnp.h
1595     index 2588ca6a9028..acbfe53eb948 100644
1596     --- a/include/linux/pnp.h
1597     +++ b/include/linux/pnp.h
1598     @@ -219,10 +219,8 @@ struct pnp_card {
1599     #define global_to_pnp_card(n) list_entry(n, struct pnp_card, global_list)
1600     #define protocol_to_pnp_card(n) list_entry(n, struct pnp_card, protocol_list)
1601     #define to_pnp_card(n) container_of(n, struct pnp_card, dev)
1602     -#define pnp_for_each_card(card) \
1603     - for((card) = global_to_pnp_card(pnp_cards.next); \
1604     - (card) != global_to_pnp_card(&pnp_cards); \
1605     - (card) = global_to_pnp_card((card)->global_list.next))
1606     +#define pnp_for_each_card(card) \
1607     + list_for_each_entry(card, &pnp_cards, global_list)
1608    
1609     struct pnp_card_link {
1610     struct pnp_card *card;
1611     @@ -275,14 +273,9 @@ struct pnp_dev {
1612     #define card_to_pnp_dev(n) list_entry(n, struct pnp_dev, card_list)
1613     #define protocol_to_pnp_dev(n) list_entry(n, struct pnp_dev, protocol_list)
1614     #define to_pnp_dev(n) container_of(n, struct pnp_dev, dev)
1615     -#define pnp_for_each_dev(dev) \
1616     - for((dev) = global_to_pnp_dev(pnp_global.next); \
1617     - (dev) != global_to_pnp_dev(&pnp_global); \
1618     - (dev) = global_to_pnp_dev((dev)->global_list.next))
1619     -#define card_for_each_dev(card,dev) \
1620     - for((dev) = card_to_pnp_dev((card)->devices.next); \
1621     - (dev) != card_to_pnp_dev(&(card)->devices); \
1622     - (dev) = card_to_pnp_dev((dev)->card_list.next))
1623     +#define pnp_for_each_dev(dev) list_for_each_entry(dev, &pnp_global, global_list)
1624     +#define card_for_each_dev(card, dev) \
1625     + list_for_each_entry(dev, &(card)->devices, card_list)
1626     #define pnp_dev_name(dev) (dev)->name
1627    
1628     static inline void *pnp_get_drvdata(struct pnp_dev *pdev)
1629     @@ -436,14 +429,10 @@ struct pnp_protocol {
1630     };
1631    
1632     #define to_pnp_protocol(n) list_entry(n, struct pnp_protocol, protocol_list)
1633     -#define protocol_for_each_card(protocol,card) \
1634     - for((card) = protocol_to_pnp_card((protocol)->cards.next); \
1635     - (card) != protocol_to_pnp_card(&(protocol)->cards); \
1636     - (card) = protocol_to_pnp_card((card)->protocol_list.next))
1637     -#define protocol_for_each_dev(protocol,dev) \
1638     - for((dev) = protocol_to_pnp_dev((protocol)->devices.next); \
1639     - (dev) != protocol_to_pnp_dev(&(protocol)->devices); \
1640     - (dev) = protocol_to_pnp_dev((dev)->protocol_list.next))
1641     +#define protocol_for_each_card(protocol, card) \
1642     + list_for_each_entry(card, &(protocol)->cards, protocol_list)
1643     +#define protocol_for_each_dev(protocol, dev) \
1644     + list_for_each_entry(dev, &(protocol)->devices, protocol_list)
1645    
1646     extern struct bus_type pnp_bus_type;
1647    
1648     diff --git a/include/linux/posix-clock.h b/include/linux/posix-clock.h
1649     index 83b22ae9ae12..b39420a0321c 100644
1650     --- a/include/linux/posix-clock.h
1651     +++ b/include/linux/posix-clock.h
1652     @@ -104,29 +104,32 @@ struct posix_clock_operations {
1653     *
1654     * @ops: Functional interface to the clock
1655     * @cdev: Character device instance for this clock
1656     - * @kref: Reference count.
1657     + * @dev: Pointer to the clock's device.
1658     * @rwsem: Protects the 'zombie' field from concurrent access.
1659     * @zombie: If 'zombie' is true, then the hardware has disappeared.
1660     - * @release: A function to free the structure when the reference count reaches
1661     - * zero. May be NULL if structure is statically allocated.
1662     *
1663     * Drivers should embed their struct posix_clock within a private
1664     * structure, obtaining a reference to it during callbacks using
1665     * container_of().
1666     + *
1667     + * Drivers should supply an initialized but not exposed struct device
1668     + * to posix_clock_register(). It is used to manage lifetime of the
1669     + * driver's private structure. It's 'release' field should be set to
1670     + * a release function for this private structure.
1671     */
1672     struct posix_clock {
1673     struct posix_clock_operations ops;
1674     struct cdev cdev;
1675     - struct kref kref;
1676     + struct device *dev;
1677     struct rw_semaphore rwsem;
1678     bool zombie;
1679     - void (*release)(struct posix_clock *clk);
1680     };
1681    
1682     /**
1683     * posix_clock_register() - register a new clock
1684     - * @clk: Pointer to the clock. Caller must provide 'ops' and 'release'
1685     - * @devid: Allocated device id
1686     + * @clk: Pointer to the clock. Caller must provide 'ops' field
1687     + * @dev: Pointer to the initialized device. Caller must provide
1688     + * 'release' field
1689     *
1690     * A clock driver calls this function to register itself with the
1691     * clock device subsystem. If 'clk' points to dynamically allocated
1692     @@ -135,7 +138,7 @@ struct posix_clock {
1693     *
1694     * Returns zero on success, non-zero otherwise.
1695     */
1696     -int posix_clock_register(struct posix_clock *clk, dev_t devid);
1697     +int posix_clock_register(struct posix_clock *clk, struct device *dev);
1698    
1699     /**
1700     * posix_clock_unregister() - unregister a clock
1701     diff --git a/include/linux/tty.h b/include/linux/tty.h
1702     index fe483976b119..15cf871046b3 100644
1703     --- a/include/linux/tty.h
1704     +++ b/include/linux/tty.h
1705     @@ -64,7 +64,7 @@ struct tty_buffer {
1706     int read;
1707     int flags;
1708     /* Data points here */
1709     - unsigned long data[0];
1710     + unsigned long data[];
1711     };
1712    
1713     /* Values for .flags field of tty_buffer */
1714     diff --git a/include/net/addrconf.h b/include/net/addrconf.h
1715     index b8ee8a113e32..019b06c035a8 100644
1716     --- a/include/net/addrconf.h
1717     +++ b/include/net/addrconf.h
1718     @@ -206,8 +206,10 @@ struct ipv6_stub {
1719     const struct in6_addr *addr);
1720     int (*ipv6_sock_mc_drop)(struct sock *sk, int ifindex,
1721     const struct in6_addr *addr);
1722     - int (*ipv6_dst_lookup)(struct net *net, struct sock *sk,
1723     - struct dst_entry **dst, struct flowi6 *fl6);
1724     + struct dst_entry *(*ipv6_dst_lookup_flow)(struct net *net,
1725     + const struct sock *sk,
1726     + struct flowi6 *fl6,
1727     + const struct in6_addr *final_dst);
1728     void (*udpv6_encap_enable)(void);
1729     void (*ndisc_send_na)(struct net_device *dev, const struct in6_addr *daddr,
1730     const struct in6_addr *solicited_addr,
1731     diff --git a/include/net/ipv6.h b/include/net/ipv6.h
1732     index 168009eef5e4..1a48e10ec617 100644
1733     --- a/include/net/ipv6.h
1734     +++ b/include/net/ipv6.h
1735     @@ -856,7 +856,7 @@ static inline struct sk_buff *ip6_finish_skb(struct sock *sk)
1736    
1737     int ip6_dst_lookup(struct net *net, struct sock *sk, struct dst_entry **dst,
1738     struct flowi6 *fl6);
1739     -struct dst_entry *ip6_dst_lookup_flow(const struct sock *sk, struct flowi6 *fl6,
1740     +struct dst_entry *ip6_dst_lookup_flow(struct net *net, const struct sock *sk, struct flowi6 *fl6,
1741     const struct in6_addr *final_dst);
1742     struct dst_entry *ip6_sk_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6,
1743     const struct in6_addr *final_dst);
1744     diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h
1745     index b57a9f37c297..7befec513295 100644
1746     --- a/include/net/netfilter/nf_conntrack.h
1747     +++ b/include/net/netfilter/nf_conntrack.h
1748     @@ -103,7 +103,7 @@ struct nf_conn {
1749     struct hlist_node nat_bysource;
1750     #endif
1751     /* all members below initialized via memset */
1752     - u8 __nfct_init_offset[0];
1753     + struct { } __nfct_init_offset;
1754    
1755     /* If we were expected by an expectation, this will be it */
1756     struct nf_conn *master;
1757     diff --git a/include/sound/rawmidi.h b/include/sound/rawmidi.h
1758     index 5432111c8761..2a87128b3075 100644
1759     --- a/include/sound/rawmidi.h
1760     +++ b/include/sound/rawmidi.h
1761     @@ -76,6 +76,7 @@ struct snd_rawmidi_runtime {
1762     size_t avail_min; /* min avail for wakeup */
1763     size_t avail; /* max used buffer for wakeup */
1764     size_t xruns; /* over/underruns counter */
1765     + int buffer_ref; /* buffer reference count */
1766     /* misc */
1767     spinlock_t lock;
1768     wait_queue_head_t sleep;
1769     diff --git a/init/main.c b/init/main.c
1770     index 148843e627a0..d47860dbe896 100644
1771     --- a/init/main.c
1772     +++ b/init/main.c
1773     @@ -662,6 +662,8 @@ asmlinkage __visible void __init start_kernel(void)
1774    
1775     /* Do the rest non-__init'ed, we're now alive */
1776     rest_init();
1777     +
1778     + prevent_tail_call_optimization();
1779     }
1780    
1781     /* Call all constructor functions linked into the kernel. */
1782     diff --git a/ipc/util.c b/ipc/util.c
1783     index e65ecf3ccbda..76d4afcde7bb 100644
1784     --- a/ipc/util.c
1785     +++ b/ipc/util.c
1786     @@ -751,21 +751,21 @@ static struct kern_ipc_perm *sysvipc_find_ipc(struct ipc_ids *ids, loff_t pos,
1787     total++;
1788     }
1789    
1790     - *new_pos = pos + 1;
1791     + ipc = NULL;
1792     if (total >= ids->in_use)
1793     - return NULL;
1794     + goto out;
1795    
1796     for (; pos < IPCMNI; pos++) {
1797     ipc = idr_find(&ids->ipcs_idr, pos);
1798     if (ipc != NULL) {
1799     rcu_read_lock();
1800     ipc_lock_object(ipc);
1801     - return ipc;
1802     + break;
1803     }
1804     }
1805     -
1806     - /* Out of range - return NULL to terminate iteration */
1807     - return NULL;
1808     +out:
1809     + *new_pos = pos + 1;
1810     + return ipc;
1811     }
1812    
1813     static void *sysvipc_proc_next(struct seq_file *s, void *it, loff_t *pos)
1814     diff --git a/kernel/time/posix-clock.c b/kernel/time/posix-clock.c
1815     index e24008c098c6..45a0a26023d4 100644
1816     --- a/kernel/time/posix-clock.c
1817     +++ b/kernel/time/posix-clock.c
1818     @@ -25,8 +25,6 @@
1819     #include <linux/syscalls.h>
1820     #include <linux/uaccess.h>
1821    
1822     -static void delete_clock(struct kref *kref);
1823     -
1824     /*
1825     * Returns NULL if the posix_clock instance attached to 'fp' is old and stale.
1826     */
1827     @@ -168,7 +166,7 @@ static int posix_clock_open(struct inode *inode, struct file *fp)
1828     err = 0;
1829    
1830     if (!err) {
1831     - kref_get(&clk->kref);
1832     + get_device(clk->dev);
1833     fp->private_data = clk;
1834     }
1835     out:
1836     @@ -184,7 +182,7 @@ static int posix_clock_release(struct inode *inode, struct file *fp)
1837     if (clk->ops.release)
1838     err = clk->ops.release(clk);
1839    
1840     - kref_put(&clk->kref, delete_clock);
1841     + put_device(clk->dev);
1842    
1843     fp->private_data = NULL;
1844    
1845     @@ -206,38 +204,35 @@ static const struct file_operations posix_clock_file_operations = {
1846     #endif
1847     };
1848    
1849     -int posix_clock_register(struct posix_clock *clk, dev_t devid)
1850     +int posix_clock_register(struct posix_clock *clk, struct device *dev)
1851     {
1852     int err;
1853    
1854     - kref_init(&clk->kref);
1855     init_rwsem(&clk->rwsem);
1856    
1857     cdev_init(&clk->cdev, &posix_clock_file_operations);
1858     + err = cdev_device_add(&clk->cdev, dev);
1859     + if (err) {
1860     + pr_err("%s unable to add device %d:%d\n",
1861     + dev_name(dev), MAJOR(dev->devt), MINOR(dev->devt));
1862     + return err;
1863     + }
1864     clk->cdev.owner = clk->ops.owner;
1865     - err = cdev_add(&clk->cdev, devid, 1);
1866     + clk->dev = dev;
1867    
1868     - return err;
1869     + return 0;
1870     }
1871     EXPORT_SYMBOL_GPL(posix_clock_register);
1872    
1873     -static void delete_clock(struct kref *kref)
1874     -{
1875     - struct posix_clock *clk = container_of(kref, struct posix_clock, kref);
1876     -
1877     - if (clk->release)
1878     - clk->release(clk);
1879     -}
1880     -
1881     void posix_clock_unregister(struct posix_clock *clk)
1882     {
1883     - cdev_del(&clk->cdev);
1884     + cdev_device_del(&clk->cdev, clk->dev);
1885    
1886     down_write(&clk->rwsem);
1887     clk->zombie = true;
1888     up_write(&clk->rwsem);
1889    
1890     - kref_put(&clk->kref, delete_clock);
1891     + put_device(clk->dev);
1892     }
1893     EXPORT_SYMBOL_GPL(posix_clock_unregister);
1894    
1895     diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
1896     index bfa8bb3a6e19..6d3b432a748a 100644
1897     --- a/kernel/trace/blktrace.c
1898     +++ b/kernel/trace/blktrace.c
1899     @@ -325,11 +325,12 @@ static void put_probe_ref(void)
1900    
1901     static void blk_trace_cleanup(struct blk_trace *bt)
1902     {
1903     + synchronize_rcu();
1904     blk_trace_free(bt);
1905     put_probe_ref();
1906     }
1907    
1908     -int blk_trace_remove(struct request_queue *q)
1909     +static int __blk_trace_remove(struct request_queue *q)
1910     {
1911     struct blk_trace *bt;
1912    
1913     @@ -342,6 +343,17 @@ int blk_trace_remove(struct request_queue *q)
1914    
1915     return 0;
1916     }
1917     +
1918     +int blk_trace_remove(struct request_queue *q)
1919     +{
1920     + int ret;
1921     +
1922     + mutex_lock(&q->blk_trace_mutex);
1923     + ret = __blk_trace_remove(q);
1924     + mutex_unlock(&q->blk_trace_mutex);
1925     +
1926     + return ret;
1927     +}
1928     EXPORT_SYMBOL_GPL(blk_trace_remove);
1929    
1930     static ssize_t blk_dropped_read(struct file *filp, char __user *buffer,
1931     @@ -546,9 +558,8 @@ err:
1932     return ret;
1933     }
1934    
1935     -int blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
1936     - struct block_device *bdev,
1937     - char __user *arg)
1938     +static int __blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
1939     + struct block_device *bdev, char __user *arg)
1940     {
1941     struct blk_user_trace_setup buts;
1942     int ret;
1943     @@ -562,11 +573,24 @@ int blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
1944     return ret;
1945    
1946     if (copy_to_user(arg, &buts, sizeof(buts))) {
1947     - blk_trace_remove(q);
1948     + __blk_trace_remove(q);
1949     return -EFAULT;
1950     }
1951     return 0;
1952     }
1953     +
1954     +int blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
1955     + struct block_device *bdev,
1956     + char __user *arg)
1957     +{
1958     + int ret;
1959     +
1960     + mutex_lock(&q->blk_trace_mutex);
1961     + ret = __blk_trace_setup(q, name, dev, bdev, arg);
1962     + mutex_unlock(&q->blk_trace_mutex);
1963     +
1964     + return ret;
1965     +}
1966     EXPORT_SYMBOL_GPL(blk_trace_setup);
1967    
1968     #if defined(CONFIG_COMPAT) && defined(CONFIG_X86_64)
1969     @@ -595,7 +619,7 @@ static int compat_blk_trace_setup(struct request_queue *q, char *name,
1970     return ret;
1971    
1972     if (copy_to_user(arg, &buts.name, ARRAY_SIZE(buts.name))) {
1973     - blk_trace_remove(q);
1974     + __blk_trace_remove(q);
1975     return -EFAULT;
1976     }
1977    
1978     @@ -603,11 +627,13 @@ static int compat_blk_trace_setup(struct request_queue *q, char *name,
1979     }
1980     #endif
1981    
1982     -int blk_trace_startstop(struct request_queue *q, int start)
1983     +static int __blk_trace_startstop(struct request_queue *q, int start)
1984     {
1985     int ret;
1986     - struct blk_trace *bt = q->blk_trace;
1987     + struct blk_trace *bt;
1988    
1989     + bt = rcu_dereference_protected(q->blk_trace,
1990     + lockdep_is_held(&q->blk_trace_mutex));
1991     if (bt == NULL)
1992     return -EINVAL;
1993    
1994     @@ -642,8 +668,25 @@ int blk_trace_startstop(struct request_queue *q, int start)
1995    
1996     return ret;
1997     }
1998     +
1999     +int blk_trace_startstop(struct request_queue *q, int start)
2000     +{
2001     + int ret;
2002     +
2003     + mutex_lock(&q->blk_trace_mutex);
2004     + ret = __blk_trace_startstop(q, start);
2005     + mutex_unlock(&q->blk_trace_mutex);
2006     +
2007     + return ret;
2008     +}
2009     EXPORT_SYMBOL_GPL(blk_trace_startstop);
2010    
2011     +/*
2012     + * When reading or writing the blktrace sysfs files, the references to the
2013     + * opened sysfs or device files should prevent the underlying block device
2014     + * from being removed. So no further delete protection is really needed.
2015     + */
2016     +
2017     /**
2018     * blk_trace_ioctl: - handle the ioctls associated with tracing
2019     * @bdev: the block device
2020     @@ -661,12 +704,12 @@ int blk_trace_ioctl(struct block_device *bdev, unsigned cmd, char __user *arg)
2021     if (!q)
2022     return -ENXIO;
2023    
2024     - mutex_lock(&bdev->bd_mutex);
2025     + mutex_lock(&q->blk_trace_mutex);
2026    
2027     switch (cmd) {
2028     case BLKTRACESETUP:
2029     bdevname(bdev, b);
2030     - ret = blk_trace_setup(q, b, bdev->bd_dev, bdev, arg);
2031     + ret = __blk_trace_setup(q, b, bdev->bd_dev, bdev, arg);
2032     break;
2033     #if defined(CONFIG_COMPAT) && defined(CONFIG_X86_64)
2034     case BLKTRACESETUP32:
2035     @@ -677,17 +720,17 @@ int blk_trace_ioctl(struct block_device *bdev, unsigned cmd, char __user *arg)
2036     case BLKTRACESTART:
2037     start = 1;
2038     case BLKTRACESTOP:
2039     - ret = blk_trace_startstop(q, start);
2040     + ret = __blk_trace_startstop(q, start);
2041     break;
2042     case BLKTRACETEARDOWN:
2043     - ret = blk_trace_remove(q);
2044     + ret = __blk_trace_remove(q);
2045     break;
2046     default:
2047     ret = -ENOTTY;
2048     break;
2049     }
2050    
2051     - mutex_unlock(&bdev->bd_mutex);
2052     + mutex_unlock(&q->blk_trace_mutex);
2053     return ret;
2054     }
2055    
2056     @@ -698,10 +741,14 @@ int blk_trace_ioctl(struct block_device *bdev, unsigned cmd, char __user *arg)
2057     **/
2058     void blk_trace_shutdown(struct request_queue *q)
2059     {
2060     - if (q->blk_trace) {
2061     - blk_trace_startstop(q, 0);
2062     - blk_trace_remove(q);
2063     + mutex_lock(&q->blk_trace_mutex);
2064     + if (rcu_dereference_protected(q->blk_trace,
2065     + lockdep_is_held(&q->blk_trace_mutex))) {
2066     + __blk_trace_startstop(q, 0);
2067     + __blk_trace_remove(q);
2068     }
2069     +
2070     + mutex_unlock(&q->blk_trace_mutex);
2071     }
2072    
2073     /*
2074     @@ -722,10 +769,14 @@ void blk_trace_shutdown(struct request_queue *q)
2075     static void blk_add_trace_rq(struct request_queue *q, struct request *rq,
2076     unsigned int nr_bytes, u32 what)
2077     {
2078     - struct blk_trace *bt = q->blk_trace;
2079     + struct blk_trace *bt;
2080    
2081     - if (likely(!bt))
2082     + rcu_read_lock();
2083     + bt = rcu_dereference(q->blk_trace);
2084     + if (likely(!bt)) {
2085     + rcu_read_unlock();
2086     return;
2087     + }
2088    
2089     if (rq->cmd_type == REQ_TYPE_BLOCK_PC) {
2090     what |= BLK_TC_ACT(BLK_TC_PC);
2091     @@ -736,6 +787,7 @@ static void blk_add_trace_rq(struct request_queue *q, struct request *rq,
2092     __blk_add_trace(bt, blk_rq_pos(rq), nr_bytes, req_op(rq),
2093     rq->cmd_flags, what, rq->errors, 0, NULL);
2094     }
2095     + rcu_read_unlock();
2096     }
2097    
2098     static void blk_add_trace_rq_abort(void *ignore,
2099     @@ -785,13 +837,18 @@ static void blk_add_trace_rq_complete(void *ignore,
2100     static void blk_add_trace_bio(struct request_queue *q, struct bio *bio,
2101     u32 what, int error)
2102     {
2103     - struct blk_trace *bt = q->blk_trace;
2104     + struct blk_trace *bt;
2105    
2106     - if (likely(!bt))
2107     + rcu_read_lock();
2108     + bt = rcu_dereference(q->blk_trace);
2109     + if (likely(!bt)) {
2110     + rcu_read_unlock();
2111     return;
2112     + }
2113    
2114     __blk_add_trace(bt, bio->bi_iter.bi_sector, bio->bi_iter.bi_size,
2115     bio_op(bio), bio->bi_opf, what, error, 0, NULL);
2116     + rcu_read_unlock();
2117     }
2118    
2119     static void blk_add_trace_bio_bounce(void *ignore,
2120     @@ -836,11 +893,14 @@ static void blk_add_trace_getrq(void *ignore,
2121     if (bio)
2122     blk_add_trace_bio(q, bio, BLK_TA_GETRQ, 0);
2123     else {
2124     - struct blk_trace *bt = q->blk_trace;
2125     + struct blk_trace *bt;
2126    
2127     + rcu_read_lock();
2128     + bt = rcu_dereference(q->blk_trace);
2129     if (bt)
2130     __blk_add_trace(bt, 0, 0, rw, 0, BLK_TA_GETRQ, 0, 0,
2131     NULL);
2132     + rcu_read_unlock();
2133     }
2134     }
2135    
2136     @@ -852,27 +912,35 @@ static void blk_add_trace_sleeprq(void *ignore,
2137     if (bio)
2138     blk_add_trace_bio(q, bio, BLK_TA_SLEEPRQ, 0);
2139     else {
2140     - struct blk_trace *bt = q->blk_trace;
2141     + struct blk_trace *bt;
2142    
2143     + rcu_read_lock();
2144     + bt = rcu_dereference(q->blk_trace);
2145     if (bt)
2146     __blk_add_trace(bt, 0, 0, rw, 0, BLK_TA_SLEEPRQ,
2147     0, 0, NULL);
2148     + rcu_read_unlock();
2149     }
2150     }
2151    
2152     static void blk_add_trace_plug(void *ignore, struct request_queue *q)
2153     {
2154     - struct blk_trace *bt = q->blk_trace;
2155     + struct blk_trace *bt;
2156    
2157     + rcu_read_lock();
2158     + bt = rcu_dereference(q->blk_trace);
2159     if (bt)
2160     __blk_add_trace(bt, 0, 0, 0, 0, BLK_TA_PLUG, 0, 0, NULL);
2161     + rcu_read_unlock();
2162     }
2163    
2164     static void blk_add_trace_unplug(void *ignore, struct request_queue *q,
2165     unsigned int depth, bool explicit)
2166     {
2167     - struct blk_trace *bt = q->blk_trace;
2168     + struct blk_trace *bt;
2169    
2170     + rcu_read_lock();
2171     + bt = rcu_dereference(q->blk_trace);
2172     if (bt) {
2173     __be64 rpdu = cpu_to_be64(depth);
2174     u32 what;
2175     @@ -884,14 +952,17 @@ static void blk_add_trace_unplug(void *ignore, struct request_queue *q,
2176    
2177     __blk_add_trace(bt, 0, 0, 0, 0, what, 0, sizeof(rpdu), &rpdu);
2178     }
2179     + rcu_read_unlock();
2180     }
2181    
2182     static void blk_add_trace_split(void *ignore,
2183     struct request_queue *q, struct bio *bio,
2184     unsigned int pdu)
2185     {
2186     - struct blk_trace *bt = q->blk_trace;
2187     + struct blk_trace *bt;
2188    
2189     + rcu_read_lock();
2190     + bt = rcu_dereference(q->blk_trace);
2191     if (bt) {
2192     __be64 rpdu = cpu_to_be64(pdu);
2193    
2194     @@ -900,6 +971,7 @@ static void blk_add_trace_split(void *ignore,
2195     BLK_TA_SPLIT, bio->bi_error, sizeof(rpdu),
2196     &rpdu);
2197     }
2198     + rcu_read_unlock();
2199     }
2200    
2201     /**
2202     @@ -919,11 +991,15 @@ static void blk_add_trace_bio_remap(void *ignore,
2203     struct request_queue *q, struct bio *bio,
2204     dev_t dev, sector_t from)
2205     {
2206     - struct blk_trace *bt = q->blk_trace;
2207     + struct blk_trace *bt;
2208     struct blk_io_trace_remap r;
2209    
2210     - if (likely(!bt))
2211     + rcu_read_lock();
2212     + bt = rcu_dereference(q->blk_trace);
2213     + if (likely(!bt)) {
2214     + rcu_read_unlock();
2215     return;
2216     + }
2217    
2218     r.device_from = cpu_to_be32(dev);
2219     r.device_to = cpu_to_be32(bio->bi_bdev->bd_dev);
2220     @@ -932,6 +1008,7 @@ static void blk_add_trace_bio_remap(void *ignore,
2221     __blk_add_trace(bt, bio->bi_iter.bi_sector, bio->bi_iter.bi_size,
2222     bio_op(bio), bio->bi_opf, BLK_TA_REMAP, bio->bi_error,
2223     sizeof(r), &r);
2224     + rcu_read_unlock();
2225     }
2226    
2227     /**
2228     @@ -952,11 +1029,15 @@ static void blk_add_trace_rq_remap(void *ignore,
2229     struct request *rq, dev_t dev,
2230     sector_t from)
2231     {
2232     - struct blk_trace *bt = q->blk_trace;
2233     + struct blk_trace *bt;
2234     struct blk_io_trace_remap r;
2235    
2236     - if (likely(!bt))
2237     + rcu_read_lock();
2238     + bt = rcu_dereference(q->blk_trace);
2239     + if (likely(!bt)) {
2240     + rcu_read_unlock();
2241     return;
2242     + }
2243    
2244     r.device_from = cpu_to_be32(dev);
2245     r.device_to = cpu_to_be32(disk_devt(rq->rq_disk));
2246     @@ -965,6 +1046,7 @@ static void blk_add_trace_rq_remap(void *ignore,
2247     __blk_add_trace(bt, blk_rq_pos(rq), blk_rq_bytes(rq),
2248     rq_data_dir(rq), 0, BLK_TA_REMAP, !!rq->errors,
2249     sizeof(r), &r);
2250     + rcu_read_unlock();
2251     }
2252    
2253     /**
2254     @@ -982,10 +1064,14 @@ void blk_add_driver_data(struct request_queue *q,
2255     struct request *rq,
2256     void *data, size_t len)
2257     {
2258     - struct blk_trace *bt = q->blk_trace;
2259     + struct blk_trace *bt;
2260    
2261     - if (likely(!bt))
2262     + rcu_read_lock();
2263     + bt = rcu_dereference(q->blk_trace);
2264     + if (likely(!bt)) {
2265     + rcu_read_unlock();
2266     return;
2267     + }
2268    
2269     if (rq->cmd_type == REQ_TYPE_BLOCK_PC)
2270     __blk_add_trace(bt, 0, blk_rq_bytes(rq), 0, 0,
2271     @@ -993,6 +1079,7 @@ void blk_add_driver_data(struct request_queue *q,
2272     else
2273     __blk_add_trace(bt, blk_rq_pos(rq), blk_rq_bytes(rq), 0, 0,
2274     BLK_TA_DRV_DATA, rq->errors, len, data);
2275     + rcu_read_unlock();
2276     }
2277     EXPORT_SYMBOL_GPL(blk_add_driver_data);
2278    
2279     @@ -1485,6 +1572,7 @@ static int blk_trace_remove_queue(struct request_queue *q)
2280     return -EINVAL;
2281    
2282     put_probe_ref();
2283     + synchronize_rcu();
2284     blk_trace_free(bt);
2285     return 0;
2286     }
2287     @@ -1646,6 +1734,7 @@ static ssize_t sysfs_blk_trace_attr_show(struct device *dev,
2288     struct hd_struct *p = dev_to_part(dev);
2289     struct request_queue *q;
2290     struct block_device *bdev;
2291     + struct blk_trace *bt;
2292     ssize_t ret = -ENXIO;
2293    
2294     bdev = bdget(part_devt(p));
2295     @@ -1656,26 +1745,28 @@ static ssize_t sysfs_blk_trace_attr_show(struct device *dev,
2296     if (q == NULL)
2297     goto out_bdput;
2298    
2299     - mutex_lock(&bdev->bd_mutex);
2300     + mutex_lock(&q->blk_trace_mutex);
2301    
2302     + bt = rcu_dereference_protected(q->blk_trace,
2303     + lockdep_is_held(&q->blk_trace_mutex));
2304     if (attr == &dev_attr_enable) {
2305     - ret = sprintf(buf, "%u\n", !!q->blk_trace);
2306     + ret = sprintf(buf, "%u\n", !!bt);
2307     goto out_unlock_bdev;
2308     }
2309    
2310     - if (q->blk_trace == NULL)
2311     + if (bt == NULL)
2312     ret = sprintf(buf, "disabled\n");
2313     else if (attr == &dev_attr_act_mask)
2314     - ret = blk_trace_mask2str(buf, q->blk_trace->act_mask);
2315     + ret = blk_trace_mask2str(buf, bt->act_mask);
2316     else if (attr == &dev_attr_pid)
2317     - ret = sprintf(buf, "%u\n", q->blk_trace->pid);
2318     + ret = sprintf(buf, "%u\n", bt->pid);
2319     else if (attr == &dev_attr_start_lba)
2320     - ret = sprintf(buf, "%llu\n", q->blk_trace->start_lba);
2321     + ret = sprintf(buf, "%llu\n", bt->start_lba);
2322     else if (attr == &dev_attr_end_lba)
2323     - ret = sprintf(buf, "%llu\n", q->blk_trace->end_lba);
2324     + ret = sprintf(buf, "%llu\n", bt->end_lba);
2325    
2326     out_unlock_bdev:
2327     - mutex_unlock(&bdev->bd_mutex);
2328     + mutex_unlock(&q->blk_trace_mutex);
2329     out_bdput:
2330     bdput(bdev);
2331     out:
2332     @@ -1689,6 +1780,7 @@ static ssize_t sysfs_blk_trace_attr_store(struct device *dev,
2333     struct block_device *bdev;
2334     struct request_queue *q;
2335     struct hd_struct *p;
2336     + struct blk_trace *bt;
2337     u64 value;
2338     ssize_t ret = -EINVAL;
2339    
2340     @@ -1717,10 +1809,12 @@ static ssize_t sysfs_blk_trace_attr_store(struct device *dev,
2341     if (q == NULL)
2342     goto out_bdput;
2343    
2344     - mutex_lock(&bdev->bd_mutex);
2345     + mutex_lock(&q->blk_trace_mutex);
2346    
2347     + bt = rcu_dereference_protected(q->blk_trace,
2348     + lockdep_is_held(&q->blk_trace_mutex));
2349     if (attr == &dev_attr_enable) {
2350     - if (!!value == !!q->blk_trace) {
2351     + if (!!value == !!bt) {
2352     ret = 0;
2353     goto out_unlock_bdev;
2354     }
2355     @@ -1732,22 +1826,25 @@ static ssize_t sysfs_blk_trace_attr_store(struct device *dev,
2356     }
2357    
2358     ret = 0;
2359     - if (q->blk_trace == NULL)
2360     + if (bt == NULL) {
2361     ret = blk_trace_setup_queue(q, bdev);
2362     + bt = rcu_dereference_protected(q->blk_trace,
2363     + lockdep_is_held(&q->blk_trace_mutex));
2364     + }
2365    
2366     if (ret == 0) {
2367     if (attr == &dev_attr_act_mask)
2368     - q->blk_trace->act_mask = value;
2369     + bt->act_mask = value;
2370     else if (attr == &dev_attr_pid)
2371     - q->blk_trace->pid = value;
2372     + bt->pid = value;
2373     else if (attr == &dev_attr_start_lba)
2374     - q->blk_trace->start_lba = value;
2375     + bt->start_lba = value;
2376     else if (attr == &dev_attr_end_lba)
2377     - q->blk_trace->end_lba = value;
2378     + bt->end_lba = value;
2379     }
2380    
2381     out_unlock_bdev:
2382     - mutex_unlock(&bdev->bd_mutex);
2383     + mutex_unlock(&q->blk_trace_mutex);
2384     out_bdput:
2385     bdput(bdev);
2386     out:
2387     diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
2388     index 6a170a78b453..b2fb25aefb2f 100644
2389     --- a/kernel/trace/trace.c
2390     +++ b/kernel/trace/trace.c
2391     @@ -7032,6 +7032,19 @@ static int allocate_trace_buffers(struct trace_array *tr, int size)
2392     */
2393     allocate_snapshot = false;
2394     #endif
2395     +
2396     + /*
2397     + * Because of some magic with the way alloc_percpu() works on
2398     + * x86_64, we need to synchronize the pgd of all the tables,
2399     + * otherwise the trace events that happen in x86_64 page fault
2400     + * handlers can't cope with accessing the chance that a
2401     + * alloc_percpu()'d memory might be touched in the page fault trace
2402     + * event. Oh, and we need to audit all other alloc_percpu() and vmalloc()
2403     + * calls in tracing, because something might get triggered within a
2404     + * page fault trace event!
2405     + */
2406     + vmalloc_sync_mappings();
2407     +
2408     return 0;
2409     }
2410    
2411     diff --git a/mm/page_alloc.c b/mm/page_alloc.c
2412     index ef710e387862..de00e0fec484 100644
2413     --- a/mm/page_alloc.c
2414     +++ b/mm/page_alloc.c
2415     @@ -1408,6 +1408,7 @@ void set_zone_contiguous(struct zone *zone)
2416     if (!__pageblock_pfn_to_page(block_start_pfn,
2417     block_end_pfn, zone))
2418     return;
2419     + cond_resched();
2420     }
2421    
2422     /* We confirm that there is no hole */
2423     diff --git a/mm/shmem.c b/mm/shmem.c
2424     index 90ccbb35458b..31b0c09fe6c6 100644
2425     --- a/mm/shmem.c
2426     +++ b/mm/shmem.c
2427     @@ -2082,7 +2082,11 @@ int shmem_lock(struct file *file, int lock, struct user_struct *user)
2428     struct shmem_inode_info *info = SHMEM_I(inode);
2429     int retval = -ENOMEM;
2430    
2431     - spin_lock_irq(&info->lock);
2432     + /*
2433     + * What serializes the accesses to info->flags?
2434     + * ipc_lock_object() when called from shmctl_do_lock(),
2435     + * no serialization needed when called from shm_destroy().
2436     + */
2437     if (lock && !(info->flags & VM_LOCKED)) {
2438     if (!user_shm_lock(inode->i_size, user))
2439     goto out_nomem;
2440     @@ -2097,7 +2101,6 @@ int shmem_lock(struct file *file, int lock, struct user_struct *user)
2441     retval = 0;
2442    
2443     out_nomem:
2444     - spin_unlock_irq(&info->lock);
2445     return retval;
2446     }
2447    
2448     diff --git a/net/batman-adv/bat_v_ogm.c b/net/batman-adv/bat_v_ogm.c
2449     index b0cae59bd327..d2e6885479cb 100644
2450     --- a/net/batman-adv/bat_v_ogm.c
2451     +++ b/net/batman-adv/bat_v_ogm.c
2452     @@ -709,7 +709,7 @@ static void batadv_v_ogm_process(const struct sk_buff *skb, int ogm_offset,
2453    
2454     orig_node = batadv_v_ogm_orig_get(bat_priv, ogm_packet->orig);
2455     if (!orig_node)
2456     - return;
2457     + goto out;
2458    
2459     neigh_node = batadv_neigh_node_get_or_create(orig_node, if_incoming,
2460     ethhdr->h_source);
2461     diff --git a/net/batman-adv/network-coding.c b/net/batman-adv/network-coding.c
2462     index a7b5cf08d363..09549885cd14 100644
2463     --- a/net/batman-adv/network-coding.c
2464     +++ b/net/batman-adv/network-coding.c
2465     @@ -1012,15 +1012,8 @@ static struct batadv_nc_path *batadv_nc_get_path(struct batadv_priv *bat_priv,
2466     */
2467     static u8 batadv_nc_random_weight_tq(u8 tq)
2468     {
2469     - u8 rand_val, rand_tq;
2470     -
2471     - get_random_bytes(&rand_val, sizeof(rand_val));
2472     -
2473     /* randomize the estimated packet loss (max TQ - estimated TQ) */
2474     - rand_tq = rand_val * (BATADV_TQ_MAX_VALUE - tq);
2475     -
2476     - /* normalize the randomized packet loss */
2477     - rand_tq /= BATADV_TQ_MAX_VALUE;
2478     + u8 rand_tq = prandom_u32_max(BATADV_TQ_MAX_VALUE + 1 - tq);
2479    
2480     /* convert to (randomized) estimated tq again */
2481     return BATADV_TQ_MAX_VALUE - rand_tq;
2482     diff --git a/net/batman-adv/sysfs.c b/net/batman-adv/sysfs.c
2483     index 31d7e239a1fd..121e9e7d28cc 100644
2484     --- a/net/batman-adv/sysfs.c
2485     +++ b/net/batman-adv/sysfs.c
2486     @@ -1087,7 +1087,7 @@ static ssize_t batadv_store_throughput_override(struct kobject *kobj,
2487     ret = batadv_parse_throughput(net_dev, buff, "throughput_override",
2488     &tp_override);
2489     if (!ret)
2490     - return count;
2491     + goto out;
2492    
2493     old_tp_override = atomic_read(&hard_iface->bat_v.throughput_override);
2494     if (old_tp_override == tp_override)
2495     @@ -1120,6 +1120,7 @@ static ssize_t batadv_show_throughput_override(struct kobject *kobj,
2496    
2497     tp_override = atomic_read(&hard_iface->bat_v.throughput_override);
2498    
2499     + batadv_hardif_put(hard_iface);
2500     return sprintf(buff, "%u.%u MBit\n", tp_override / 10,
2501     tp_override % 10);
2502     }
2503     diff --git a/net/core/dev.c b/net/core/dev.c
2504     index 842654302110..1041523aaa76 100644
2505     --- a/net/core/dev.c
2506     +++ b/net/core/dev.c
2507     @@ -6939,11 +6939,13 @@ static void netdev_sync_lower_features(struct net_device *upper,
2508     netdev_dbg(upper, "Disabling feature %pNF on lower dev %s.\n",
2509     &feature, lower->name);
2510     lower->wanted_features &= ~feature;
2511     - netdev_update_features(lower);
2512     + __netdev_update_features(lower);
2513    
2514     if (unlikely(lower->features & feature))
2515     netdev_WARN(upper, "failed to disable %pNF on %s!\n",
2516     &feature, lower->name);
2517     + else
2518     + netdev_features_change(lower);
2519     }
2520     }
2521     }
2522     diff --git a/net/core/drop_monitor.c b/net/core/drop_monitor.c
2523     index ca2c9c8b9a3e..6d7ff117f379 100644
2524     --- a/net/core/drop_monitor.c
2525     +++ b/net/core/drop_monitor.c
2526     @@ -159,6 +159,7 @@ static void sched_send_work(unsigned long _data)
2527     static void trace_drop_common(struct sk_buff *skb, void *location)
2528     {
2529     struct net_dm_alert_msg *msg;
2530     + struct net_dm_drop_point *point;
2531     struct nlmsghdr *nlh;
2532     struct nlattr *nla;
2533     int i;
2534     @@ -177,11 +178,13 @@ static void trace_drop_common(struct sk_buff *skb, void *location)
2535     nlh = (struct nlmsghdr *)dskb->data;
2536     nla = genlmsg_data(nlmsg_data(nlh));
2537     msg = nla_data(nla);
2538     + point = msg->points;
2539     for (i = 0; i < msg->entries; i++) {
2540     - if (!memcmp(&location, msg->points[i].pc, sizeof(void *))) {
2541     - msg->points[i].count++;
2542     + if (!memcmp(&location, &point->pc, sizeof(void *))) {
2543     + point->count++;
2544     goto out;
2545     }
2546     + point++;
2547     }
2548     if (msg->entries == dm_hit_limit)
2549     goto out;
2550     @@ -190,8 +193,8 @@ static void trace_drop_common(struct sk_buff *skb, void *location)
2551     */
2552     __nla_reserve_nohdr(dskb, sizeof(struct net_dm_drop_point));
2553     nla->nla_len += NLA_ALIGN(sizeof(struct net_dm_drop_point));
2554     - memcpy(msg->points[msg->entries].pc, &location, sizeof(void *));
2555     - msg->points[msg->entries].count = 1;
2556     + memcpy(point->pc, &location, sizeof(void *));
2557     + point->count = 1;
2558     msg->entries++;
2559    
2560     if (!timer_pending(&data->send_timer)) {
2561     diff --git a/net/core/netprio_cgroup.c b/net/core/netprio_cgroup.c
2562     index 2ec86fc552df..22506194bd76 100644
2563     --- a/net/core/netprio_cgroup.c
2564     +++ b/net/core/netprio_cgroup.c
2565     @@ -237,6 +237,8 @@ static void net_prio_attach(struct cgroup_taskset *tset)
2566     struct task_struct *p;
2567     struct cgroup_subsys_state *css;
2568    
2569     + cgroup_sk_alloc_disable();
2570     +
2571     cgroup_taskset_for_each(p, css, tset) {
2572     void *v = (void *)(unsigned long)css->cgroup->id;
2573    
2574     diff --git a/net/dccp/ipv6.c b/net/dccp/ipv6.c
2575     index 87c513b5ff2e..9438873fc3c8 100644
2576     --- a/net/dccp/ipv6.c
2577     +++ b/net/dccp/ipv6.c
2578     @@ -209,7 +209,7 @@ static int dccp_v6_send_response(const struct sock *sk, struct request_sock *req
2579     final_p = fl6_update_dst(&fl6, rcu_dereference(np->opt), &final);
2580     rcu_read_unlock();
2581    
2582     - dst = ip6_dst_lookup_flow(sk, &fl6, final_p);
2583     + dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p);
2584     if (IS_ERR(dst)) {
2585     err = PTR_ERR(dst);
2586     dst = NULL;
2587     @@ -280,7 +280,7 @@ static void dccp_v6_ctl_send_reset(const struct sock *sk, struct sk_buff *rxskb)
2588     security_skb_classify_flow(rxskb, flowi6_to_flowi(&fl6));
2589    
2590     /* sk = NULL, but it is safe for now. RST socket required. */
2591     - dst = ip6_dst_lookup_flow(ctl_sk, &fl6, NULL);
2592     + dst = ip6_dst_lookup_flow(sock_net(ctl_sk), ctl_sk, &fl6, NULL);
2593     if (!IS_ERR(dst)) {
2594     skb_dst_set(skb, dst);
2595     ip6_xmit(ctl_sk, skb, &fl6, 0, NULL, 0);
2596     @@ -889,7 +889,7 @@ static int dccp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
2597     opt = rcu_dereference_protected(np->opt, lockdep_sock_is_held(sk));
2598     final_p = fl6_update_dst(&fl6, opt, &final);
2599    
2600     - dst = ip6_dst_lookup_flow(sk, &fl6, final_p);
2601     + dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p);
2602     if (IS_ERR(dst)) {
2603     err = PTR_ERR(dst);
2604     goto failure;
2605     diff --git a/net/ipv4/cipso_ipv4.c b/net/ipv4/cipso_ipv4.c
2606     index 0a6f72763beb..71409928763b 100644
2607     --- a/net/ipv4/cipso_ipv4.c
2608     +++ b/net/ipv4/cipso_ipv4.c
2609     @@ -1272,7 +1272,8 @@ static int cipso_v4_parsetag_rbm(const struct cipso_v4_doi *doi_def,
2610     return ret_val;
2611     }
2612    
2613     - secattr->flags |= NETLBL_SECATTR_MLS_CAT;
2614     + if (secattr->attr.mls.cat)
2615     + secattr->flags |= NETLBL_SECATTR_MLS_CAT;
2616     }
2617    
2618     return 0;
2619     @@ -1453,7 +1454,8 @@ static int cipso_v4_parsetag_rng(const struct cipso_v4_doi *doi_def,
2620     return ret_val;
2621     }
2622    
2623     - secattr->flags |= NETLBL_SECATTR_MLS_CAT;
2624     + if (secattr->attr.mls.cat)
2625     + secattr->flags |= NETLBL_SECATTR_MLS_CAT;
2626     }
2627    
2628     return 0;
2629     diff --git a/net/ipv4/route.c b/net/ipv4/route.c
2630     index b4f24eabfa54..81efd2d3998d 100644
2631     --- a/net/ipv4/route.c
2632     +++ b/net/ipv4/route.c
2633     @@ -898,7 +898,7 @@ void ip_rt_send_redirect(struct sk_buff *skb)
2634     /* Check for load limit; set rate_last to the latest sent
2635     * redirect.
2636     */
2637     - if (peer->rate_tokens == 0 ||
2638     + if (peer->n_redirects == 0 ||
2639     time_after(jiffies,
2640     (peer->rate_last +
2641     (ip_rt_redirect_load << peer->n_redirects)))) {
2642     diff --git a/net/ipv6/addrconf_core.c b/net/ipv6/addrconf_core.c
2643     index bfa941fc1165..129324b36fb6 100644
2644     --- a/net/ipv6/addrconf_core.c
2645     +++ b/net/ipv6/addrconf_core.c
2646     @@ -107,15 +107,16 @@ int inet6addr_notifier_call_chain(unsigned long val, void *v)
2647     }
2648     EXPORT_SYMBOL(inet6addr_notifier_call_chain);
2649    
2650     -static int eafnosupport_ipv6_dst_lookup(struct net *net, struct sock *u1,
2651     - struct dst_entry **u2,
2652     - struct flowi6 *u3)
2653     +static struct dst_entry *eafnosupport_ipv6_dst_lookup_flow(struct net *net,
2654     + const struct sock *sk,
2655     + struct flowi6 *fl6,
2656     + const struct in6_addr *final_dst)
2657     {
2658     - return -EAFNOSUPPORT;
2659     + return ERR_PTR(-EAFNOSUPPORT);
2660     }
2661    
2662     const struct ipv6_stub *ipv6_stub __read_mostly = &(struct ipv6_stub) {
2663     - .ipv6_dst_lookup = eafnosupport_ipv6_dst_lookup,
2664     + .ipv6_dst_lookup_flow = eafnosupport_ipv6_dst_lookup_flow,
2665     };
2666     EXPORT_SYMBOL_GPL(ipv6_stub);
2667    
2668     diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
2669     index 8885dbad217b..c6746aaf7fbf 100644
2670     --- a/net/ipv6/af_inet6.c
2671     +++ b/net/ipv6/af_inet6.c
2672     @@ -702,7 +702,7 @@ int inet6_sk_rebuild_header(struct sock *sk)
2673     &final);
2674     rcu_read_unlock();
2675    
2676     - dst = ip6_dst_lookup_flow(sk, &fl6, final_p);
2677     + dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p);
2678     if (IS_ERR(dst)) {
2679     sk->sk_route_caps = 0;
2680     sk->sk_err_soft = -PTR_ERR(dst);
2681     @@ -860,7 +860,7 @@ static struct pernet_operations inet6_net_ops = {
2682     static const struct ipv6_stub ipv6_stub_impl = {
2683     .ipv6_sock_mc_join = ipv6_sock_mc_join,
2684     .ipv6_sock_mc_drop = ipv6_sock_mc_drop,
2685     - .ipv6_dst_lookup = ip6_dst_lookup,
2686     + .ipv6_dst_lookup_flow = ip6_dst_lookup_flow,
2687     .udpv6_encap_enable = udpv6_encap_enable,
2688     .ndisc_send_na = ndisc_send_na,
2689     .nd_tbl = &nd_tbl,
2690     diff --git a/net/ipv6/calipso.c b/net/ipv6/calipso.c
2691     index 9742abf5ac26..b206415bbde7 100644
2692     --- a/net/ipv6/calipso.c
2693     +++ b/net/ipv6/calipso.c
2694     @@ -1061,7 +1061,8 @@ static int calipso_opt_getattr(const unsigned char *calipso,
2695     goto getattr_return;
2696     }
2697    
2698     - secattr->flags |= NETLBL_SECATTR_MLS_CAT;
2699     + if (secattr->attr.mls.cat)
2700     + secattr->flags |= NETLBL_SECATTR_MLS_CAT;
2701     }
2702    
2703     secattr->type = NETLBL_NLTYPE_CALIPSO;
2704     diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c
2705     index 956af11e9ba3..58929622de0e 100644
2706     --- a/net/ipv6/datagram.c
2707     +++ b/net/ipv6/datagram.c
2708     @@ -87,7 +87,7 @@ int ip6_datagram_dst_update(struct sock *sk, bool fix_sk_saddr)
2709     final_p = fl6_update_dst(&fl6, opt, &final);
2710     rcu_read_unlock();
2711    
2712     - dst = ip6_dst_lookup_flow(sk, &fl6, final_p);
2713     + dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p);
2714     if (IS_ERR(dst)) {
2715     err = PTR_ERR(dst);
2716     goto out;
2717     diff --git a/net/ipv6/inet6_connection_sock.c b/net/ipv6/inet6_connection_sock.c
2718     index 798a0950e9a6..b760ccec44d3 100644
2719     --- a/net/ipv6/inet6_connection_sock.c
2720     +++ b/net/ipv6/inet6_connection_sock.c
2721     @@ -90,7 +90,7 @@ struct dst_entry *inet6_csk_route_req(const struct sock *sk,
2722     fl6->fl6_sport = htons(ireq->ir_num);
2723     security_req_classify_flow(req, flowi6_to_flowi(fl6));
2724    
2725     - dst = ip6_dst_lookup_flow(sk, fl6, final_p);
2726     + dst = ip6_dst_lookup_flow(sock_net(sk), sk, fl6, final_p);
2727     if (IS_ERR(dst))
2728     return NULL;
2729    
2730     @@ -144,7 +144,7 @@ static struct dst_entry *inet6_csk_route_socket(struct sock *sk,
2731    
2732     dst = __inet6_csk_dst_check(sk, np->dst_cookie);
2733     if (!dst) {
2734     - dst = ip6_dst_lookup_flow(sk, fl6, final_p);
2735     + dst = ip6_dst_lookup_flow(sock_net(sk), sk, fl6, final_p);
2736    
2737     if (!IS_ERR(dst))
2738     ip6_dst_store(sk, dst, NULL, NULL);
2739     diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
2740     index 11407dd6bc7c..d93a98dfe52d 100644
2741     --- a/net/ipv6/ip6_output.c
2742     +++ b/net/ipv6/ip6_output.c
2743     @@ -1075,19 +1075,19 @@ EXPORT_SYMBOL_GPL(ip6_dst_lookup);
2744     * It returns a valid dst pointer on success, or a pointer encoded
2745     * error code.
2746     */
2747     -struct dst_entry *ip6_dst_lookup_flow(const struct sock *sk, struct flowi6 *fl6,
2748     +struct dst_entry *ip6_dst_lookup_flow(struct net *net, const struct sock *sk, struct flowi6 *fl6,
2749     const struct in6_addr *final_dst)
2750     {
2751     struct dst_entry *dst = NULL;
2752     int err;
2753    
2754     - err = ip6_dst_lookup_tail(sock_net(sk), sk, &dst, fl6);
2755     + err = ip6_dst_lookup_tail(net, sk, &dst, fl6);
2756     if (err)
2757     return ERR_PTR(err);
2758     if (final_dst)
2759     fl6->daddr = *final_dst;
2760    
2761     - return xfrm_lookup_route(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0);
2762     + return xfrm_lookup_route(net, dst, flowi6_to_flowi(fl6), sk, 0);
2763     }
2764     EXPORT_SYMBOL_GPL(ip6_dst_lookup_flow);
2765    
2766     @@ -1112,7 +1112,7 @@ struct dst_entry *ip6_sk_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6,
2767    
2768     dst = ip6_sk_dst_check(sk, dst, fl6);
2769     if (!dst)
2770     - dst = ip6_dst_lookup_flow(sk, fl6, final_dst);
2771     + dst = ip6_dst_lookup_flow(sock_net(sk), sk, fl6, final_dst);
2772    
2773     return dst;
2774     }
2775     diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
2776     index 301978df650e..47acd20d4e1f 100644
2777     --- a/net/ipv6/raw.c
2778     +++ b/net/ipv6/raw.c
2779     @@ -920,7 +920,7 @@ static int rawv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
2780    
2781     fl6.flowlabel = ip6_make_flowinfo(ipc6.tclass, fl6.flowlabel);
2782    
2783     - dst = ip6_dst_lookup_flow(sk, &fl6, final_p);
2784     + dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p);
2785     if (IS_ERR(dst)) {
2786     err = PTR_ERR(dst);
2787     goto out;
2788     diff --git a/net/ipv6/route.c b/net/ipv6/route.c
2789     index 2c4743f2d50e..03d1a61b4729 100644
2790     --- a/net/ipv6/route.c
2791     +++ b/net/ipv6/route.c
2792     @@ -1373,8 +1373,10 @@ static void __ip6_rt_update_pmtu(struct dst_entry *dst, const struct sock *sk,
2793     {
2794     struct rt6_info *rt6 = (struct rt6_info *)dst;
2795    
2796     - if (dst_metric_locked(dst, RTAX_MTU))
2797     - return;
2798     + /* Note: do *NOT* check dst_metric_locked(dst, RTAX_MTU)
2799     + * IPv6 pmtu discovery isn't optional, so 'mtu lock' cannot disable it.
2800     + * [see also comment in rt6_mtu_change_route()]
2801     + */
2802    
2803     dst_confirm(dst);
2804     mtu = max_t(u32, mtu, IPV6_MIN_MTU);
2805     diff --git a/net/ipv6/syncookies.c b/net/ipv6/syncookies.c
2806     index 7a86433d8896..4834015b27f4 100644
2807     --- a/net/ipv6/syncookies.c
2808     +++ b/net/ipv6/syncookies.c
2809     @@ -230,7 +230,7 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb)
2810     fl6.fl6_sport = inet_sk(sk)->inet_sport;
2811     security_req_classify_flow(req, flowi6_to_flowi(&fl6));
2812    
2813     - dst = ip6_dst_lookup_flow(sk, &fl6, final_p);
2814     + dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p);
2815     if (IS_ERR(dst))
2816     goto out_free;
2817     }
2818     diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
2819     index 4953466cf98f..7b336b7803ff 100644
2820     --- a/net/ipv6/tcp_ipv6.c
2821     +++ b/net/ipv6/tcp_ipv6.c
2822     @@ -244,7 +244,7 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
2823    
2824     security_sk_classify_flow(sk, flowi6_to_flowi(&fl6));
2825    
2826     - dst = ip6_dst_lookup_flow(sk, &fl6, final_p);
2827     + dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p);
2828     if (IS_ERR(dst)) {
2829     err = PTR_ERR(dst);
2830     goto failure;
2831     @@ -841,7 +841,7 @@ static void tcp_v6_send_response(const struct sock *sk, struct sk_buff *skb, u32
2832     * Underlying function will use this to retrieve the network
2833     * namespace
2834     */
2835     - dst = ip6_dst_lookup_flow(ctl_sk, &fl6, NULL);
2836     + dst = ip6_dst_lookup_flow(sock_net(ctl_sk), ctl_sk, &fl6, NULL);
2837     if (!IS_ERR(dst)) {
2838     skb_dst_set(buff, dst);
2839     ip6_xmit(ctl_sk, buff, &fl6, fl6.flowi6_mark, NULL, tclass);
2840     diff --git a/net/l2tp/l2tp_ip6.c b/net/l2tp/l2tp_ip6.c
2841     index 423cb095ad37..28274f397c55 100644
2842     --- a/net/l2tp/l2tp_ip6.c
2843     +++ b/net/l2tp/l2tp_ip6.c
2844     @@ -620,7 +620,7 @@ static int l2tp_ip6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
2845    
2846     fl6.flowlabel = ip6_make_flowinfo(ipc6.tclass, fl6.flowlabel);
2847    
2848     - dst = ip6_dst_lookup_flow(sk, &fl6, final_p);
2849     + dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p);
2850     if (IS_ERR(dst)) {
2851     err = PTR_ERR(dst);
2852     goto out;
2853     diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c
2854     index ffab94d61e1d..eab9c1d70856 100644
2855     --- a/net/mpls/af_mpls.c
2856     +++ b/net/mpls/af_mpls.c
2857     @@ -497,16 +497,15 @@ static struct net_device *inet6_fib_lookup_dev(struct net *net,
2858     struct net_device *dev;
2859     struct dst_entry *dst;
2860     struct flowi6 fl6;
2861     - int err;
2862    
2863     if (!ipv6_stub)
2864     return ERR_PTR(-EAFNOSUPPORT);
2865    
2866     memset(&fl6, 0, sizeof(fl6));
2867     memcpy(&fl6.daddr, addr, sizeof(struct in6_addr));
2868     - err = ipv6_stub->ipv6_dst_lookup(net, NULL, &dst, &fl6);
2869     - if (err)
2870     - return ERR_PTR(err);
2871     + dst = ipv6_stub->ipv6_dst_lookup_flow(net, NULL, &fl6, NULL);
2872     + if (IS_ERR(dst))
2873     + return ERR_CAST(dst);
2874    
2875     dev = dst->dev;
2876     dev_hold(dev);
2877     diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
2878     index 1bdae8f188e1..d507d0fc7858 100644
2879     --- a/net/netfilter/nf_conntrack_core.c
2880     +++ b/net/netfilter/nf_conntrack_core.c
2881     @@ -1124,9 +1124,9 @@ __nf_conntrack_alloc(struct net *net,
2882     *(unsigned long *)(&ct->tuplehash[IP_CT_DIR_REPLY].hnnode.pprev) = hash;
2883     ct->status = 0;
2884     write_pnet(&ct->ct_net, net);
2885     - memset(&ct->__nfct_init_offset[0], 0,
2886     + memset(&ct->__nfct_init_offset, 0,
2887     offsetof(struct nf_conn, proto) -
2888     - offsetof(struct nf_conn, __nfct_init_offset[0]));
2889     + offsetof(struct nf_conn, __nfct_init_offset));
2890    
2891     nf_ct_zone_add(ct, zone);
2892    
2893     diff --git a/net/netlabel/netlabel_kapi.c b/net/netlabel/netlabel_kapi.c
2894     index cb9d1d1210cb..d0cfdff04993 100644
2895     --- a/net/netlabel/netlabel_kapi.c
2896     +++ b/net/netlabel/netlabel_kapi.c
2897     @@ -748,6 +748,12 @@ int netlbl_catmap_getlong(struct netlbl_lsm_catmap *catmap,
2898     if ((off & (BITS_PER_LONG - 1)) != 0)
2899     return -EINVAL;
2900    
2901     + /* a null catmap is equivalent to an empty one */
2902     + if (!catmap) {
2903     + *offset = (u32)-1;
2904     + return 0;
2905     + }
2906     +
2907     if (off < catmap->startbit) {
2908     off = catmap->startbit;
2909     *offset = off;
2910     diff --git a/net/sched/sch_choke.c b/net/sched/sch_choke.c
2911     index 6125c17cffaf..d13e1de0b3a2 100644
2912     --- a/net/sched/sch_choke.c
2913     +++ b/net/sched/sch_choke.c
2914     @@ -382,7 +382,8 @@ static void choke_reset(struct Qdisc *sch)
2915    
2916     sch->q.qlen = 0;
2917     sch->qstats.backlog = 0;
2918     - memset(q->tab, 0, (q->tab_mask + 1) * sizeof(struct sk_buff *));
2919     + if (q->tab)
2920     + memset(q->tab, 0, (q->tab_mask + 1) * sizeof(struct sk_buff *));
2921     q->head = q->tail = 0;
2922     red_restart(&q->vars);
2923     }
2924     diff --git a/net/sched/sch_fq_codel.c b/net/sched/sch_fq_codel.c
2925     index 29b7465c9d8a..4f05956b9216 100644
2926     --- a/net/sched/sch_fq_codel.c
2927     +++ b/net/sched/sch_fq_codel.c
2928     @@ -428,7 +428,7 @@ static int fq_codel_change(struct Qdisc *sch, struct nlattr *opt)
2929     q->quantum = max(256U, nla_get_u32(tb[TCA_FQ_CODEL_QUANTUM]));
2930    
2931     if (tb[TCA_FQ_CODEL_DROP_BATCH_SIZE])
2932     - q->drop_batch_size = min(1U, nla_get_u32(tb[TCA_FQ_CODEL_DROP_BATCH_SIZE]));
2933     + q->drop_batch_size = max(1U, nla_get_u32(tb[TCA_FQ_CODEL_DROP_BATCH_SIZE]));
2934    
2935     if (tb[TCA_FQ_CODEL_MEMORY_LIMIT])
2936     q->memory_limit = min(1U << 31, nla_get_u32(tb[TCA_FQ_CODEL_MEMORY_LIMIT]));
2937     diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c
2938     index a8d82cb7f073..633e237a406c 100644
2939     --- a/net/sched/sch_sfq.c
2940     +++ b/net/sched/sch_sfq.c
2941     @@ -635,6 +635,15 @@ static int sfq_change(struct Qdisc *sch, struct nlattr *opt)
2942     if (ctl->divisor &&
2943     (!is_power_of_2(ctl->divisor) || ctl->divisor > 65536))
2944     return -EINVAL;
2945     +
2946     + /* slot->allot is a short, make sure quantum is not too big. */
2947     + if (ctl->quantum) {
2948     + unsigned int scaled = SFQ_ALLOT_SIZE(ctl->quantum);
2949     +
2950     + if (scaled <= 0 || scaled > SHRT_MAX)
2951     + return -EINVAL;
2952     + }
2953     +
2954     if (ctl_v1 && !red_check_params(ctl_v1->qth_min, ctl_v1->qth_max,
2955     ctl_v1->Wlog))
2956     return -EINVAL;
2957     diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c
2958     index 34ab7f92f064..50bc8c4ca906 100644
2959     --- a/net/sctp/ipv6.c
2960     +++ b/net/sctp/ipv6.c
2961     @@ -269,7 +269,7 @@ static void sctp_v6_get_dst(struct sctp_transport *t, union sctp_addr *saddr,
2962     final_p = fl6_update_dst(fl6, rcu_dereference(np->opt), &final);
2963     rcu_read_unlock();
2964    
2965     - dst = ip6_dst_lookup_flow(sk, fl6, final_p);
2966     + dst = ip6_dst_lookup_flow(sock_net(sk), sk, fl6, final_p);
2967     if (!asoc || saddr) {
2968     t->dst = dst;
2969     memcpy(fl, &_fl, sizeof(_fl));
2970     @@ -327,7 +327,7 @@ static void sctp_v6_get_dst(struct sctp_transport *t, union sctp_addr *saddr,
2971     fl6->saddr = laddr->a.v6.sin6_addr;
2972     fl6->fl6_sport = laddr->a.v6.sin6_port;
2973     final_p = fl6_update_dst(fl6, rcu_dereference(np->opt), &final);
2974     - bdst = ip6_dst_lookup_flow(sk, fl6, final_p);
2975     + bdst = ip6_dst_lookup_flow(sock_net(sk), sk, fl6, final_p);
2976    
2977     if (IS_ERR(bdst))
2978     continue;
2979     diff --git a/net/tipc/udp_media.c b/net/tipc/udp_media.c
2980     index 05033ab05b8f..c6ff3de1de37 100644
2981     --- a/net/tipc/udp_media.c
2982     +++ b/net/tipc/udp_media.c
2983     @@ -187,10 +187,13 @@ static int tipc_udp_xmit(struct net *net, struct sk_buff *skb,
2984     .saddr = src->ipv6,
2985     .flowi6_proto = IPPROTO_UDP
2986     };
2987     - err = ipv6_stub->ipv6_dst_lookup(net, ub->ubsock->sk, &ndst,
2988     - &fl6);
2989     - if (err)
2990     + ndst = ipv6_stub->ipv6_dst_lookup_flow(net,
2991     + ub->ubsock->sk,
2992     + &fl6, NULL);
2993     + if (IS_ERR(ndst)) {
2994     + err = PTR_ERR(ndst);
2995     goto tx_error;
2996     + }
2997     ttl = ip6_dst_hoplimit(ndst);
2998     err = udp_tunnel6_xmit_skb(ndst, ub->ubsock->sk, skb, NULL,
2999     &src->ipv6, &dst->ipv6, 0, ttl, 0,
3000     diff --git a/scripts/decodecode b/scripts/decodecode
3001     index d8824f37acce..aae7a035242b 100755
3002     --- a/scripts/decodecode
3003     +++ b/scripts/decodecode
3004     @@ -98,7 +98,7 @@ faultlinenum=$(( $(wc -l $T.oo | cut -d" " -f1) - \
3005     faultline=`cat $T.dis | head -1 | cut -d":" -f2-`
3006     faultline=`echo "$faultline" | sed -e 's/\[/\\\[/g; s/\]/\\\]/g'`
3007    
3008     -cat $T.oo | sed -e "${faultlinenum}s/^\(.*:\)\(.*\)/\1\*\2\t\t<-- trapping instruction/"
3009     +cat $T.oo | sed -e "${faultlinenum}s/^\([^:]*:\)\(.*\)/\1\*\2\t\t<-- trapping instruction/"
3010     echo
3011     cat $T.aa
3012     cleanup
3013     diff --git a/sound/core/rawmidi.c b/sound/core/rawmidi.c
3014     index c8b2309352d7..481c1ad1db57 100644
3015     --- a/sound/core/rawmidi.c
3016     +++ b/sound/core/rawmidi.c
3017     @@ -108,6 +108,17 @@ static void snd_rawmidi_input_event_work(struct work_struct *work)
3018     runtime->event(runtime->substream);
3019     }
3020    
3021     +/* buffer refcount management: call with runtime->lock held */
3022     +static inline void snd_rawmidi_buffer_ref(struct snd_rawmidi_runtime *runtime)
3023     +{
3024     + runtime->buffer_ref++;
3025     +}
3026     +
3027     +static inline void snd_rawmidi_buffer_unref(struct snd_rawmidi_runtime *runtime)
3028     +{
3029     + runtime->buffer_ref--;
3030     +}
3031     +
3032     static int snd_rawmidi_runtime_create(struct snd_rawmidi_substream *substream)
3033     {
3034     struct snd_rawmidi_runtime *runtime;
3035     @@ -125,7 +136,7 @@ static int snd_rawmidi_runtime_create(struct snd_rawmidi_substream *substream)
3036     runtime->avail = 0;
3037     else
3038     runtime->avail = runtime->buffer_size;
3039     - if ((runtime->buffer = kmalloc(runtime->buffer_size, GFP_KERNEL)) == NULL) {
3040     + if ((runtime->buffer = kzalloc(runtime->buffer_size, GFP_KERNEL)) == NULL) {
3041     kfree(runtime);
3042     return -ENOMEM;
3043     }
3044     @@ -650,10 +661,15 @@ int snd_rawmidi_output_params(struct snd_rawmidi_substream *substream,
3045     return -EINVAL;
3046     }
3047     if (params->buffer_size != runtime->buffer_size) {
3048     - newbuf = kmalloc(params->buffer_size, GFP_KERNEL);
3049     + newbuf = kzalloc(params->buffer_size, GFP_KERNEL);
3050     if (!newbuf)
3051     return -ENOMEM;
3052     spin_lock_irq(&runtime->lock);
3053     + if (runtime->buffer_ref) {
3054     + spin_unlock_irq(&runtime->lock);
3055     + kfree(newbuf);
3056     + return -EBUSY;
3057     + }
3058     oldbuf = runtime->buffer;
3059     runtime->buffer = newbuf;
3060     runtime->buffer_size = params->buffer_size;
3061     @@ -962,8 +978,10 @@ static long snd_rawmidi_kernel_read1(struct snd_rawmidi_substream *substream,
3062     long result = 0, count1;
3063     struct snd_rawmidi_runtime *runtime = substream->runtime;
3064     unsigned long appl_ptr;
3065     + int err = 0;
3066    
3067     spin_lock_irqsave(&runtime->lock, flags);
3068     + snd_rawmidi_buffer_ref(runtime);
3069     while (count > 0 && runtime->avail) {
3070     count1 = runtime->buffer_size - runtime->appl_ptr;
3071     if (count1 > count)
3072     @@ -982,16 +1000,19 @@ static long snd_rawmidi_kernel_read1(struct snd_rawmidi_substream *substream,
3073     if (userbuf) {
3074     spin_unlock_irqrestore(&runtime->lock, flags);
3075     if (copy_to_user(userbuf + result,
3076     - runtime->buffer + appl_ptr, count1)) {
3077     - return result > 0 ? result : -EFAULT;
3078     - }
3079     + runtime->buffer + appl_ptr, count1))
3080     + err = -EFAULT;
3081     spin_lock_irqsave(&runtime->lock, flags);
3082     + if (err)
3083     + goto out;
3084     }
3085     result += count1;
3086     count -= count1;
3087     }
3088     + out:
3089     + snd_rawmidi_buffer_unref(runtime);
3090     spin_unlock_irqrestore(&runtime->lock, flags);
3091     - return result;
3092     + return result > 0 ? result : err;
3093     }
3094    
3095     long snd_rawmidi_kernel_read(struct snd_rawmidi_substream *substream,
3096     @@ -1262,6 +1283,7 @@ static long snd_rawmidi_kernel_write1(struct snd_rawmidi_substream *substream,
3097     return -EAGAIN;
3098     }
3099     }
3100     + snd_rawmidi_buffer_ref(runtime);
3101     while (count > 0 && runtime->avail > 0) {
3102     count1 = runtime->buffer_size - runtime->appl_ptr;
3103     if (count1 > count)
3104     @@ -1293,6 +1315,7 @@ static long snd_rawmidi_kernel_write1(struct snd_rawmidi_substream *substream,
3105     }
3106     __end:
3107     count1 = runtime->avail < runtime->buffer_size;
3108     + snd_rawmidi_buffer_unref(runtime);
3109     spin_unlock_irqrestore(&runtime->lock, flags);
3110     if (count1)
3111     snd_rawmidi_output_trigger(substream, 1);
3112     diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
3113     index e19f447e27ae..a866a20349c3 100644
3114     --- a/sound/pci/hda/patch_hdmi.c
3115     +++ b/sound/pci/hda/patch_hdmi.c
3116     @@ -2044,7 +2044,9 @@ static int generic_hdmi_build_controls(struct hda_codec *codec)
3117    
3118     for (pin_idx = 0; pin_idx < spec->num_pins; pin_idx++) {
3119     struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx);
3120     + struct hdmi_eld *pin_eld = &per_pin->sink_eld;
3121    
3122     + pin_eld->eld_valid = false;
3123     hdmi_present_sense(per_pin, 0);
3124     }
3125    
3126     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
3127     index 000b59d474ab..df6d0211df51 100644
3128     --- a/sound/pci/hda/patch_realtek.c
3129     +++ b/sound/pci/hda/patch_realtek.c
3130     @@ -4212,8 +4212,6 @@ static void alc_determine_headset_type(struct hda_codec *codec)
3131     is_ctia = (val & 0x1c02) == 0x1c02;
3132     break;
3133     case 0x10ec0225:
3134     - codec->power_save_node = 1;
3135     - /* fall through */
3136     case 0x10ec0295:
3137     case 0x10ec0299:
3138     alc_process_coef_fw(codec, coef0225);
3139     @@ -4890,6 +4888,7 @@ enum {
3140     ALC269_FIXUP_HP_LINE1_MIC1_LED,
3141     ALC269_FIXUP_INV_DMIC,
3142     ALC269_FIXUP_LENOVO_DOCK,
3143     + ALC269_FIXUP_LENOVO_DOCK_LIMIT_BOOST,
3144     ALC269_FIXUP_NO_SHUTUP,
3145     ALC286_FIXUP_SONY_MIC_NO_PRESENCE,
3146     ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT,
3147     @@ -5157,6 +5156,12 @@ static const struct hda_fixup alc269_fixups[] = {
3148     .chained = true,
3149     .chain_id = ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT
3150     },
3151     + [ALC269_FIXUP_LENOVO_DOCK_LIMIT_BOOST] = {
3152     + .type = HDA_FIXUP_FUNC,
3153     + .v.func = alc269_fixup_limit_int_mic_boost,
3154     + .chained = true,
3155     + .chain_id = ALC269_FIXUP_LENOVO_DOCK,
3156     + },
3157     [ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT] = {
3158     .type = HDA_FIXUP_FUNC,
3159     .v.func = alc269_fixup_pincfg_no_hp_to_lineout,
3160     @@ -5820,7 +5825,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
3161     SND_PCI_QUIRK(0x17aa, 0x21b8, "Thinkpad Edge 14", ALC269_FIXUP_SKU_IGNORE),
3162     SND_PCI_QUIRK(0x17aa, 0x21ca, "Thinkpad L412", ALC269_FIXUP_SKU_IGNORE),
3163     SND_PCI_QUIRK(0x17aa, 0x21e9, "Thinkpad Edge 15", ALC269_FIXUP_SKU_IGNORE),
3164     - SND_PCI_QUIRK(0x17aa, 0x21f6, "Thinkpad T530", ALC269_FIXUP_LENOVO_DOCK),
3165     + SND_PCI_QUIRK(0x17aa, 0x21f6, "Thinkpad T530", ALC269_FIXUP_LENOVO_DOCK_LIMIT_BOOST),
3166     SND_PCI_QUIRK(0x17aa, 0x21fa, "Thinkpad X230", ALC269_FIXUP_LENOVO_DOCK),
3167     SND_PCI_QUIRK(0x17aa, 0x21f3, "Thinkpad T430", ALC269_FIXUP_LENOVO_DOCK),
3168     SND_PCI_QUIRK(0x17aa, 0x21fb, "Thinkpad T430s", ALC269_FIXUP_LENOVO_DOCK),
3169     @@ -5945,6 +5950,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
3170     {.id = ALC269_FIXUP_HEADSET_MODE, .name = "headset-mode"},
3171     {.id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC, .name = "headset-mode-no-hp-mic"},
3172     {.id = ALC269_FIXUP_LENOVO_DOCK, .name = "lenovo-dock"},
3173     + {.id = ALC269_FIXUP_LENOVO_DOCK_LIMIT_BOOST, .name = "lenovo-dock-limit-boost"},
3174     {.id = ALC269_FIXUP_HP_GPIO_LED, .name = "hp-gpio-led"},
3175     {.id = ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED, .name = "hp-dock-gpio-mic1-led"},
3176     {.id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "dell-headset-multi"},
3177     diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
3178     index 064f3485a977..0484a8d8a5bb 100644
3179     --- a/sound/usb/quirks.c
3180     +++ b/sound/usb/quirks.c
3181     @@ -1316,13 +1316,14 @@ void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
3182     && (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
3183     mdelay(20);
3184    
3185     - /* Zoom R16/24, Logitech H650e, Jabra 550a needs a tiny delay here,
3186     - * otherwise requests like get/set frequency return as failed despite
3187     - * actually succeeding.
3188     + /* Zoom R16/24, Logitech H650e, Jabra 550a, Kingston HyperX needs a tiny
3189     + * delay here, otherwise requests like get/set frequency return as
3190     + * failed despite actually succeeding.
3191     */
3192     if ((chip->usb_id == USB_ID(0x1686, 0x00dd) ||
3193     chip->usb_id == USB_ID(0x046d, 0x0a46) ||
3194     - chip->usb_id == USB_ID(0x0b0e, 0x0349)) &&
3195     + chip->usb_id == USB_ID(0x0b0e, 0x0349) ||
3196     + chip->usb_id == USB_ID(0x0951, 0x16ad)) &&
3197     (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
3198     mdelay(1);
3199     }
3200     diff --git a/tools/objtool/check.c b/tools/objtool/check.c
3201     index 360845926f66..b0b8ba9b800c 100644
3202     --- a/tools/objtool/check.c
3203     +++ b/tools/objtool/check.c
3204     @@ -1264,7 +1264,7 @@ static int update_insn_state_regs(struct instruction *insn, struct insn_state *s
3205     struct cfi_reg *cfa = &state->cfa;
3206     struct stack_op *op = &insn->stack_op;
3207    
3208     - if (cfa->base != CFI_SP)
3209     + if (cfa->base != CFI_SP && cfa->base != CFI_SP_INDIRECT)
3210     return 0;
3211    
3212     /* push */