Magellan Linux

Contents of /trunk/kernel-alx/patches-4.9/0299-4.9.200-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3574 - (show annotations) (download)
Thu Aug 13 10:21:16 2020 UTC (3 years, 9 months ago) by niro
File size: 48972 byte(s)
linux-200
1 diff --git a/Makefile b/Makefile
2 index b7f6639f4e7a..84410351b27c 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 9
8 -SUBLEVEL = 199
9 +SUBLEVEL = 200
10 EXTRAVERSION =
11 NAME = Roaring Lionus
12
13 @@ -834,6 +834,18 @@ KBUILD_CFLAGS += $(call cc-option,-Werror=date-time)
14 # enforce correct pointer usage
15 KBUILD_CFLAGS += $(call cc-option,-Werror=incompatible-pointer-types)
16
17 +# Require designated initializers for all marked structures
18 +KBUILD_CFLAGS += $(call cc-option,-Werror=designated-init)
19 +
20 +# change __FILE__ to the relative path from the srctree
21 +KBUILD_CFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
22 +
23 +# ensure -fcf-protection is disabled when using retpoline as it is
24 +# incompatible with -mindirect-branch=thunk-extern
25 +ifdef CONFIG_RETPOLINE
26 +KBUILD_CFLAGS += $(call cc-option,-fcf-protection=none)
27 +endif
28 +
29 # use the deterministic mode of AR if available
30 KBUILD_ARFLAGS := $(call ar-option,D)
31
32 diff --git a/arch/arm/boot/dts/imx7s.dtsi b/arch/arm/boot/dts/imx7s.dtsi
33 index edc5ddeb851a..0a7ea1a765f9 100644
34 --- a/arch/arm/boot/dts/imx7s.dtsi
35 +++ b/arch/arm/boot/dts/imx7s.dtsi
36 @@ -437,7 +437,7 @@
37 compatible = "fsl,imx7d-gpt", "fsl,imx6sx-gpt";
38 reg = <0x302d0000 0x10000>;
39 interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
40 - clocks = <&clks IMX7D_CLK_DUMMY>,
41 + clocks = <&clks IMX7D_GPT1_ROOT_CLK>,
42 <&clks IMX7D_GPT1_ROOT_CLK>;
43 clock-names = "ipg", "per";
44 };
45 @@ -446,7 +446,7 @@
46 compatible = "fsl,imx7d-gpt", "fsl,imx6sx-gpt";
47 reg = <0x302e0000 0x10000>;
48 interrupts = <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>;
49 - clocks = <&clks IMX7D_CLK_DUMMY>,
50 + clocks = <&clks IMX7D_GPT2_ROOT_CLK>,
51 <&clks IMX7D_GPT2_ROOT_CLK>;
52 clock-names = "ipg", "per";
53 status = "disabled";
54 @@ -456,7 +456,7 @@
55 compatible = "fsl,imx7d-gpt", "fsl,imx6sx-gpt";
56 reg = <0x302f0000 0x10000>;
57 interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
58 - clocks = <&clks IMX7D_CLK_DUMMY>,
59 + clocks = <&clks IMX7D_GPT3_ROOT_CLK>,
60 <&clks IMX7D_GPT3_ROOT_CLK>;
61 clock-names = "ipg", "per";
62 status = "disabled";
63 @@ -466,7 +466,7 @@
64 compatible = "fsl,imx7d-gpt", "fsl,imx6sx-gpt";
65 reg = <0x30300000 0x10000>;
66 interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;
67 - clocks = <&clks IMX7D_CLK_DUMMY>,
68 + clocks = <&clks IMX7D_GPT4_ROOT_CLK>,
69 <&clks IMX7D_GPT4_ROOT_CLK>;
70 clock-names = "ipg", "per";
71 status = "disabled";
72 diff --git a/arch/arm/boot/dts/logicpd-torpedo-som.dtsi b/arch/arm/boot/dts/logicpd-torpedo-som.dtsi
73 index ceb49d15d243..20ee7ca8c653 100644
74 --- a/arch/arm/boot/dts/logicpd-torpedo-som.dtsi
75 +++ b/arch/arm/boot/dts/logicpd-torpedo-som.dtsi
76 @@ -266,3 +266,7 @@
77 &twl_gpio {
78 ti,use-leds;
79 };
80 +
81 +&twl_keypad {
82 + status = "disabled";
83 +};
84 diff --git a/arch/arm/mach-davinci/dm365.c b/arch/arm/mach-davinci/dm365.c
85 index ef3add999263..8db549c56914 100644
86 --- a/arch/arm/mach-davinci/dm365.c
87 +++ b/arch/arm/mach-davinci/dm365.c
88 @@ -864,8 +864,8 @@ static s8 dm365_queue_priority_mapping[][2] = {
89 };
90
91 static const struct dma_slave_map dm365_edma_map[] = {
92 - { "davinci-mcbsp.0", "tx", EDMA_FILTER_PARAM(0, 2) },
93 - { "davinci-mcbsp.0", "rx", EDMA_FILTER_PARAM(0, 3) },
94 + { "davinci-mcbsp", "tx", EDMA_FILTER_PARAM(0, 2) },
95 + { "davinci-mcbsp", "rx", EDMA_FILTER_PARAM(0, 3) },
96 { "davinci_voicecodec", "tx", EDMA_FILTER_PARAM(0, 2) },
97 { "davinci_voicecodec", "rx", EDMA_FILTER_PARAM(0, 3) },
98 { "spi_davinci.2", "tx", EDMA_FILTER_PARAM(0, 10) },
99 diff --git a/arch/arm/mm/alignment.c b/arch/arm/mm/alignment.c
100 index 7d5f4c736a16..cd18eda014c2 100644
101 --- a/arch/arm/mm/alignment.c
102 +++ b/arch/arm/mm/alignment.c
103 @@ -767,6 +767,36 @@ do_alignment_t32_to_handler(unsigned long *pinstr, struct pt_regs *regs,
104 return NULL;
105 }
106
107 +static int alignment_get_arm(struct pt_regs *regs, u32 *ip, unsigned long *inst)
108 +{
109 + u32 instr = 0;
110 + int fault;
111 +
112 + if (user_mode(regs))
113 + fault = get_user(instr, ip);
114 + else
115 + fault = probe_kernel_address(ip, instr);
116 +
117 + *inst = __mem_to_opcode_arm(instr);
118 +
119 + return fault;
120 +}
121 +
122 +static int alignment_get_thumb(struct pt_regs *regs, u16 *ip, u16 *inst)
123 +{
124 + u16 instr = 0;
125 + int fault;
126 +
127 + if (user_mode(regs))
128 + fault = get_user(instr, ip);
129 + else
130 + fault = probe_kernel_address(ip, instr);
131 +
132 + *inst = __mem_to_opcode_thumb16(instr);
133 +
134 + return fault;
135 +}
136 +
137 static int
138 do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
139 {
140 @@ -774,10 +804,10 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
141 unsigned long instr = 0, instrptr;
142 int (*handler)(unsigned long addr, unsigned long instr, struct pt_regs *regs);
143 unsigned int type;
144 - unsigned int fault;
145 u16 tinstr = 0;
146 int isize = 4;
147 int thumb2_32b = 0;
148 + int fault;
149
150 if (interrupts_enabled(regs))
151 local_irq_enable();
152 @@ -786,15 +816,14 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
153
154 if (thumb_mode(regs)) {
155 u16 *ptr = (u16 *)(instrptr & ~1);
156 - fault = probe_kernel_address(ptr, tinstr);
157 - tinstr = __mem_to_opcode_thumb16(tinstr);
158 +
159 + fault = alignment_get_thumb(regs, ptr, &tinstr);
160 if (!fault) {
161 if (cpu_architecture() >= CPU_ARCH_ARMv7 &&
162 IS_T32(tinstr)) {
163 /* Thumb-2 32-bit */
164 - u16 tinst2 = 0;
165 - fault = probe_kernel_address(ptr + 1, tinst2);
166 - tinst2 = __mem_to_opcode_thumb16(tinst2);
167 + u16 tinst2;
168 + fault = alignment_get_thumb(regs, ptr + 1, &tinst2);
169 instr = __opcode_thumb32_compose(tinstr, tinst2);
170 thumb2_32b = 1;
171 } else {
172 @@ -803,8 +832,7 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
173 }
174 }
175 } else {
176 - fault = probe_kernel_address((void *)instrptr, instr);
177 - instr = __mem_to_opcode_arm(instr);
178 + fault = alignment_get_arm(regs, (void *)instrptr, &instr);
179 }
180
181 if (fault) {
182 diff --git a/arch/mips/bcm63xx/prom.c b/arch/mips/bcm63xx/prom.c
183 index 7019e2967009..bbbf8057565b 100644
184 --- a/arch/mips/bcm63xx/prom.c
185 +++ b/arch/mips/bcm63xx/prom.c
186 @@ -84,7 +84,7 @@ void __init prom_init(void)
187 * Here we will start up CPU1 in the background and ask it to
188 * reconfigure itself then go back to sleep.
189 */
190 - memcpy((void *)0xa0000200, &bmips_smp_movevec, 0x20);
191 + memcpy((void *)0xa0000200, bmips_smp_movevec, 0x20);
192 __sync();
193 set_c0_cause(C_SW0);
194 cpumask_set_cpu(1, &bmips_booted_mask);
195 diff --git a/arch/mips/include/asm/bmips.h b/arch/mips/include/asm/bmips.h
196 index a92aee7b977a..23f55af7d6ba 100644
197 --- a/arch/mips/include/asm/bmips.h
198 +++ b/arch/mips/include/asm/bmips.h
199 @@ -75,11 +75,11 @@ static inline int register_bmips_smp_ops(void)
200 #endif
201 }
202
203 -extern char bmips_reset_nmi_vec;
204 -extern char bmips_reset_nmi_vec_end;
205 -extern char bmips_smp_movevec;
206 -extern char bmips_smp_int_vec;
207 -extern char bmips_smp_int_vec_end;
208 +extern char bmips_reset_nmi_vec[];
209 +extern char bmips_reset_nmi_vec_end[];
210 +extern char bmips_smp_movevec[];
211 +extern char bmips_smp_int_vec[];
212 +extern char bmips_smp_int_vec_end[];
213
214 extern int bmips_smp_enabled;
215 extern int bmips_cpu_offset;
216 diff --git a/arch/mips/kernel/smp-bmips.c b/arch/mips/kernel/smp-bmips.c
217 index d4a293b68249..416d53f587e7 100644
218 --- a/arch/mips/kernel/smp-bmips.c
219 +++ b/arch/mips/kernel/smp-bmips.c
220 @@ -453,10 +453,10 @@ static void bmips_wr_vec(unsigned long dst, char *start, char *end)
221
222 static inline void bmips_nmi_handler_setup(void)
223 {
224 - bmips_wr_vec(BMIPS_NMI_RESET_VEC, &bmips_reset_nmi_vec,
225 - &bmips_reset_nmi_vec_end);
226 - bmips_wr_vec(BMIPS_WARM_RESTART_VEC, &bmips_smp_int_vec,
227 - &bmips_smp_int_vec_end);
228 + bmips_wr_vec(BMIPS_NMI_RESET_VEC, bmips_reset_nmi_vec,
229 + bmips_reset_nmi_vec_end);
230 + bmips_wr_vec(BMIPS_WARM_RESTART_VEC, bmips_smp_int_vec,
231 + bmips_smp_int_vec_end);
232 }
233
234 struct reset_vec_info {
235 diff --git a/drivers/dma/qcom/bam_dma.c b/drivers/dma/qcom/bam_dma.c
236 index 6497f5283e3b..81acbde13394 100644
237 --- a/drivers/dma/qcom/bam_dma.c
238 +++ b/drivers/dma/qcom/bam_dma.c
239 @@ -686,7 +686,21 @@ static int bam_dma_terminate_all(struct dma_chan *chan)
240
241 /* remove all transactions, including active transaction */
242 spin_lock_irqsave(&bchan->vc.lock, flag);
243 + /*
244 + * If we have transactions queued, then some might be committed to the
245 + * hardware in the desc fifo. The only way to reset the desc fifo is
246 + * to do a hardware reset (either by pipe or the entire block).
247 + * bam_chan_init_hw() will trigger a pipe reset, and also reinit the
248 + * pipe. If the pipe is left disabled (default state after pipe reset)
249 + * and is accessed by a connected hardware engine, a fatal error in
250 + * the BAM will occur. There is a small window where this could happen
251 + * with bam_chan_init_hw(), but it is assumed that the caller has
252 + * stopped activity on any attached hardware engine. Make sure to do
253 + * this first so that the BAM hardware doesn't cause memory corruption
254 + * by accessing freed resources.
255 + */
256 if (bchan->curr_txd) {
257 + bam_chan_init_hw(bchan, bchan->curr_txd->dir);
258 list_add(&bchan->curr_txd->vd.node, &bchan->vc.desc_issued);
259 bchan->curr_txd = NULL;
260 }
261 diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
262 index 1bb923e3a2bc..4a4782b3cc1b 100644
263 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
264 +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
265 @@ -1914,6 +1914,8 @@ static void bcmgenet_link_intr_enable(struct bcmgenet_priv *priv)
266 */
267 if (priv->internal_phy) {
268 int0_enable |= UMAC_IRQ_LINK_EVENT;
269 + if (GENET_IS_V1(priv) || GENET_IS_V2(priv) || GENET_IS_V3(priv))
270 + int0_enable |= UMAC_IRQ_PHY_DET_R;
271 } else if (priv->ext_phy) {
272 int0_enable |= UMAC_IRQ_LINK_EVENT;
273 } else if (priv->phy_interface == PHY_INTERFACE_MODE_MOCA) {
274 @@ -2531,6 +2533,10 @@ static void bcmgenet_irq_task(struct work_struct *work)
275 bcmgenet_power_up(priv, GENET_POWER_WOL_MAGIC);
276 }
277
278 + if (status & UMAC_IRQ_PHY_DET_R &&
279 + priv->dev->phydev->autoneg != AUTONEG_ENABLE)
280 + phy_init_hw(priv->dev->phydev);
281 +
282 /* Link UP/DOWN event */
283 if (status & UMAC_IRQ_LINK_EVENT)
284 phy_mac_interrupt(priv->phydev,
285 @@ -2627,8 +2633,7 @@ static irqreturn_t bcmgenet_isr0(int irq, void *dev_id)
286 }
287
288 /* all other interested interrupts handled in bottom half */
289 - status &= (UMAC_IRQ_LINK_EVENT |
290 - UMAC_IRQ_MPD_R);
291 + status &= (UMAC_IRQ_LINK_EVENT | UMAC_IRQ_MPD_R | UMAC_IRQ_PHY_DET_R);
292 if (status) {
293 /* Save irq status for bottom-half processing. */
294 spin_lock_irqsave(&priv->lock, flags);
295 diff --git a/drivers/net/ethernet/hisilicon/hip04_eth.c b/drivers/net/ethernet/hisilicon/hip04_eth.c
296 index f7882c1fde16..407e1177d9d1 100644
297 --- a/drivers/net/ethernet/hisilicon/hip04_eth.c
298 +++ b/drivers/net/ethernet/hisilicon/hip04_eth.c
299 @@ -174,6 +174,7 @@ struct hip04_priv {
300 dma_addr_t rx_phys[RX_DESC_NUM];
301 unsigned int rx_head;
302 unsigned int rx_buf_size;
303 + unsigned int rx_cnt_remaining;
304
305 struct device_node *phy_node;
306 struct phy_device *phy;
307 @@ -487,7 +488,6 @@ static int hip04_rx_poll(struct napi_struct *napi, int budget)
308 struct hip04_priv *priv = container_of(napi, struct hip04_priv, napi);
309 struct net_device *ndev = priv->ndev;
310 struct net_device_stats *stats = &ndev->stats;
311 - unsigned int cnt = hip04_recv_cnt(priv);
312 struct rx_desc *desc;
313 struct sk_buff *skb;
314 unsigned char *buf;
315 @@ -500,8 +500,8 @@ static int hip04_rx_poll(struct napi_struct *napi, int budget)
316
317 /* clean up tx descriptors */
318 tx_remaining = hip04_tx_reclaim(ndev, false);
319 -
320 - while (cnt && !last) {
321 + priv->rx_cnt_remaining += hip04_recv_cnt(priv);
322 + while (priv->rx_cnt_remaining && !last) {
323 buf = priv->rx_buf[priv->rx_head];
324 skb = build_skb(buf, priv->rx_buf_size);
325 if (unlikely(!skb)) {
326 @@ -547,11 +547,13 @@ refill:
327 hip04_set_recv_desc(priv, phys);
328
329 priv->rx_head = RX_NEXT(priv->rx_head);
330 - if (rx >= budget)
331 + if (rx >= budget) {
332 + --priv->rx_cnt_remaining;
333 goto done;
334 + }
335
336 - if (--cnt == 0)
337 - cnt = hip04_recv_cnt(priv);
338 + if (--priv->rx_cnt_remaining == 0)
339 + priv->rx_cnt_remaining += hip04_recv_cnt(priv);
340 }
341
342 if (!(priv->reg_inten & RCV_INT)) {
343 @@ -636,6 +638,7 @@ static int hip04_mac_open(struct net_device *ndev)
344 int i;
345
346 priv->rx_head = 0;
347 + priv->rx_cnt_remaining = 0;
348 priv->tx_head = 0;
349 priv->tx_tail = 0;
350 hip04_reset_ppe(priv);
351 diff --git a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
352 index 79944302dd46..7d1e8ab956e6 100644
353 --- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
354 +++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
355 @@ -470,12 +470,31 @@ void mlx4_init_quotas(struct mlx4_dev *dev)
356 priv->mfunc.master.res_tracker.res_alloc[RES_MPT].quota[pf];
357 }
358
359 -static int get_max_gauranteed_vfs_counter(struct mlx4_dev *dev)
360 +static int
361 +mlx4_calc_res_counter_guaranteed(struct mlx4_dev *dev,
362 + struct resource_allocator *res_alloc,
363 + int vf)
364 {
365 - /* reduce the sink counter */
366 - return (dev->caps.max_counters - 1 -
367 - (MLX4_PF_COUNTERS_PER_PORT * MLX4_MAX_PORTS))
368 - / MLX4_MAX_PORTS;
369 + struct mlx4_active_ports actv_ports;
370 + int ports, counters_guaranteed;
371 +
372 + /* For master, only allocate according to the number of phys ports */
373 + if (vf == mlx4_master_func_num(dev))
374 + return MLX4_PF_COUNTERS_PER_PORT * dev->caps.num_ports;
375 +
376 + /* calculate real number of ports for the VF */
377 + actv_ports = mlx4_get_active_ports(dev, vf);
378 + ports = bitmap_weight(actv_ports.ports, dev->caps.num_ports);
379 + counters_guaranteed = ports * MLX4_VF_COUNTERS_PER_PORT;
380 +
381 + /* If we do not have enough counters for this VF, do not
382 + * allocate any for it. '-1' to reduce the sink counter.
383 + */
384 + if ((res_alloc->res_reserved + counters_guaranteed) >
385 + (dev->caps.max_counters - 1))
386 + return 0;
387 +
388 + return counters_guaranteed;
389 }
390
391 int mlx4_init_resource_tracker(struct mlx4_dev *dev)
392 @@ -483,7 +502,6 @@ int mlx4_init_resource_tracker(struct mlx4_dev *dev)
393 struct mlx4_priv *priv = mlx4_priv(dev);
394 int i, j;
395 int t;
396 - int max_vfs_guarantee_counter = get_max_gauranteed_vfs_counter(dev);
397
398 priv->mfunc.master.res_tracker.slave_list =
399 kzalloc(dev->num_slaves * sizeof(struct slave_list),
400 @@ -600,16 +618,8 @@ int mlx4_init_resource_tracker(struct mlx4_dev *dev)
401 break;
402 case RES_COUNTER:
403 res_alloc->quota[t] = dev->caps.max_counters;
404 - if (t == mlx4_master_func_num(dev))
405 - res_alloc->guaranteed[t] =
406 - MLX4_PF_COUNTERS_PER_PORT *
407 - MLX4_MAX_PORTS;
408 - else if (t <= max_vfs_guarantee_counter)
409 - res_alloc->guaranteed[t] =
410 - MLX4_VF_COUNTERS_PER_PORT *
411 - MLX4_MAX_PORTS;
412 - else
413 - res_alloc->guaranteed[t] = 0;
414 + res_alloc->guaranteed[t] =
415 + mlx4_calc_res_counter_guaranteed(dev, res_alloc, t);
416 res_alloc->res_free -= res_alloc->guaranteed[t];
417 break;
418 default:
419 diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
420 index b6ee0c1690d8..340bd98b8dbd 100644
421 --- a/drivers/net/vxlan.c
422 +++ b/drivers/net/vxlan.c
423 @@ -2049,8 +2049,11 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
424 label = info->key.label;
425 udp_sum = !!(info->key.tun_flags & TUNNEL_CSUM);
426
427 - if (info->options_len)
428 + if (info->options_len) {
429 + if (info->options_len < sizeof(*md))
430 + goto drop;
431 md = ip_tunnel_info_opts(info);
432 + }
433 } else {
434 md->gbp = skb->mark;
435 }
436 diff --git a/drivers/of/unittest.c b/drivers/of/unittest.c
437 index 0a1ebbbd3f16..92530525e355 100644
438 --- a/drivers/of/unittest.c
439 +++ b/drivers/of/unittest.c
440 @@ -933,6 +933,7 @@ static int __init unittest_data_add(void)
441 of_fdt_unflatten_tree(unittest_data, NULL, &unittest_data_node);
442 if (!unittest_data_node) {
443 pr_warn("%s: No tree to attach; not running tests\n", __func__);
444 + kfree(unittest_data);
445 return -ENODATA;
446 }
447 of_node_set_flag(unittest_data_node, OF_DETACHED);
448 diff --git a/drivers/pinctrl/bcm/pinctrl-ns2-mux.c b/drivers/pinctrl/bcm/pinctrl-ns2-mux.c
449 index 13a4c2774157..6adfb379ac7e 100644
450 --- a/drivers/pinctrl/bcm/pinctrl-ns2-mux.c
451 +++ b/drivers/pinctrl/bcm/pinctrl-ns2-mux.c
452 @@ -640,8 +640,8 @@ static int ns2_pinmux_enable(struct pinctrl_dev *pctrl_dev,
453 const struct ns2_pin_function *func;
454 const struct ns2_pin_group *grp;
455
456 - if (grp_select > pinctrl->num_groups ||
457 - func_select > pinctrl->num_functions)
458 + if (grp_select >= pinctrl->num_groups ||
459 + func_select >= pinctrl->num_functions)
460 return -EINVAL;
461
462 func = &pinctrl->functions[func_select];
463 diff --git a/drivers/regulator/pfuze100-regulator.c b/drivers/regulator/pfuze100-regulator.c
464 index 86b348740fcd..ffb1f61d2c75 100644
465 --- a/drivers/regulator/pfuze100-regulator.c
466 +++ b/drivers/regulator/pfuze100-regulator.c
467 @@ -608,7 +608,13 @@ static int pfuze100_regulator_probe(struct i2c_client *client,
468
469 /* SW2~SW4 high bit check and modify the voltage value table */
470 if (i >= sw_check_start && i <= sw_check_end) {
471 - regmap_read(pfuze_chip->regmap, desc->vsel_reg, &val);
472 + ret = regmap_read(pfuze_chip->regmap,
473 + desc->vsel_reg, &val);
474 + if (ret) {
475 + dev_err(&client->dev, "Fails to read from the register.\n");
476 + return ret;
477 + }
478 +
479 if (val & sw_hi) {
480 if (pfuze_chip->chip_id == PFUZE3000) {
481 desc->volt_table = pfuze3000_sw2hi;
482 diff --git a/drivers/regulator/ti-abb-regulator.c b/drivers/regulator/ti-abb-regulator.c
483 index d2f994298753..6d17357b3a24 100644
484 --- a/drivers/regulator/ti-abb-regulator.c
485 +++ b/drivers/regulator/ti-abb-regulator.c
486 @@ -173,19 +173,14 @@ static int ti_abb_wait_txdone(struct device *dev, struct ti_abb *abb)
487 while (timeout++ <= abb->settling_time) {
488 status = ti_abb_check_txdone(abb);
489 if (status)
490 - break;
491 + return 0;
492
493 udelay(1);
494 }
495
496 - if (timeout > abb->settling_time) {
497 - dev_warn_ratelimited(dev,
498 - "%s:TRANXDONE timeout(%duS) int=0x%08x\n",
499 - __func__, timeout, readl(abb->int_base));
500 - return -ETIMEDOUT;
501 - }
502 -
503 - return 0;
504 + dev_warn_ratelimited(dev, "%s:TRANXDONE timeout(%duS) int=0x%08x\n",
505 + __func__, timeout, readl(abb->int_base));
506 + return -ETIMEDOUT;
507 }
508
509 /**
510 @@ -205,19 +200,14 @@ static int ti_abb_clear_all_txdone(struct device *dev, const struct ti_abb *abb)
511
512 status = ti_abb_check_txdone(abb);
513 if (!status)
514 - break;
515 + return 0;
516
517 udelay(1);
518 }
519
520 - if (timeout > abb->settling_time) {
521 - dev_warn_ratelimited(dev,
522 - "%s:TRANXDONE timeout(%duS) int=0x%08x\n",
523 - __func__, timeout, readl(abb->int_base));
524 - return -ETIMEDOUT;
525 - }
526 -
527 - return 0;
528 + dev_warn_ratelimited(dev, "%s:TRANXDONE timeout(%duS) int=0x%08x\n",
529 + __func__, timeout, readl(abb->int_base));
530 + return -ETIMEDOUT;
531 }
532
533 /**
534 diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig
535 index 17b1574920fd..941e3f25b4a9 100644
536 --- a/drivers/scsi/Kconfig
537 +++ b/drivers/scsi/Kconfig
538 @@ -986,7 +986,7 @@ config SCSI_SNI_53C710
539
540 config 53C700_LE_ON_BE
541 bool
542 - depends on SCSI_LASI700
543 + depends on SCSI_LASI700 || SCSI_SNI_53C710
544 default y
545
546 config SCSI_STEX
547 diff --git a/drivers/scsi/device_handler/scsi_dh_alua.c b/drivers/scsi/device_handler/scsi_dh_alua.c
548 index 98787588247b..60c288526355 100644
549 --- a/drivers/scsi/device_handler/scsi_dh_alua.c
550 +++ b/drivers/scsi/device_handler/scsi_dh_alua.c
551 @@ -527,6 +527,7 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_port_group *pg)
552 unsigned int tpg_desc_tbl_off;
553 unsigned char orig_transition_tmo;
554 unsigned long flags;
555 + bool transitioning_sense = false;
556
557 if (!pg->expiry) {
558 unsigned long transition_tmo = ALUA_FAILOVER_TIMEOUT * HZ;
559 @@ -571,13 +572,19 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_port_group *pg)
560 goto retry;
561 }
562 /*
563 - * Retry on ALUA state transition or if any
564 - * UNIT ATTENTION occurred.
565 + * If the array returns with 'ALUA state transition'
566 + * sense code here it cannot return RTPG data during
567 + * transition. So set the state to 'transitioning' directly.
568 */
569 if (sense_hdr.sense_key == NOT_READY &&
570 - sense_hdr.asc == 0x04 && sense_hdr.ascq == 0x0a)
571 - err = SCSI_DH_RETRY;
572 - else if (sense_hdr.sense_key == UNIT_ATTENTION)
573 + sense_hdr.asc == 0x04 && sense_hdr.ascq == 0x0a) {
574 + transitioning_sense = true;
575 + goto skip_rtpg;
576 + }
577 + /*
578 + * Retry on any other UNIT ATTENTION occurred.
579 + */
580 + if (sense_hdr.sense_key == UNIT_ATTENTION)
581 err = SCSI_DH_RETRY;
582 if (err == SCSI_DH_RETRY &&
583 pg->expiry != 0 && time_before(jiffies, pg->expiry)) {
584 @@ -665,7 +672,11 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_port_group *pg)
585 off = 8 + (desc[7] * 4);
586 }
587
588 + skip_rtpg:
589 spin_lock_irqsave(&pg->lock, flags);
590 + if (transitioning_sense)
591 + pg->state = SCSI_ACCESS_STATE_TRANSITIONING;
592 +
593 sdev_printk(KERN_INFO, sdev,
594 "%s: port group %02x state %c %s supports %c%c%c%c%c%c%c\n",
595 ALUA_DH_NAME, pg->group_id, print_alua_state(pg->state),
596 diff --git a/drivers/scsi/sni_53c710.c b/drivers/scsi/sni_53c710.c
597 index 76278072147e..b0f5220ae23a 100644
598 --- a/drivers/scsi/sni_53c710.c
599 +++ b/drivers/scsi/sni_53c710.c
600 @@ -78,10 +78,8 @@ static int snirm710_probe(struct platform_device *dev)
601
602 base = res->start;
603 hostdata = kzalloc(sizeof(*hostdata), GFP_KERNEL);
604 - if (!hostdata) {
605 - dev_printk(KERN_ERR, dev, "Failed to allocate host data\n");
606 + if (!hostdata)
607 return -ENOMEM;
608 - }
609
610 hostdata->dev = &dev->dev;
611 dma_set_mask(&dev->dev, DMA_BIT_MASK(32));
612 diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c
613 index cc38a3509f78..c3d576ed6f13 100644
614 --- a/drivers/target/target_core_device.c
615 +++ b/drivers/target/target_core_device.c
616 @@ -1046,27 +1046,6 @@ passthrough_parse_cdb(struct se_cmd *cmd,
617 {
618 unsigned char *cdb = cmd->t_task_cdb;
619
620 - /*
621 - * Clear a lun set in the cdb if the initiator talking to use spoke
622 - * and old standards version, as we can't assume the underlying device
623 - * won't choke up on it.
624 - */
625 - switch (cdb[0]) {
626 - case READ_10: /* SBC - RDProtect */
627 - case READ_12: /* SBC - RDProtect */
628 - case READ_16: /* SBC - RDProtect */
629 - case SEND_DIAGNOSTIC: /* SPC - SELF-TEST Code */
630 - case VERIFY: /* SBC - VRProtect */
631 - case VERIFY_16: /* SBC - VRProtect */
632 - case WRITE_VERIFY: /* SBC - VRProtect */
633 - case WRITE_VERIFY_12: /* SBC - VRProtect */
634 - case MAINTENANCE_IN: /* SPC - Parameter Data Format for SA RTPG */
635 - break;
636 - default:
637 - cdb[1] &= 0x1f; /* clear logical unit number */
638 - break;
639 - }
640 -
641 /*
642 * For REPORT LUNS we always need to emulate the response, for everything
643 * else, pass it up.
644 diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
645 index 5367b684c1f7..7ae21ad420fb 100644
646 --- a/fs/cifs/cifsglob.h
647 +++ b/fs/cifs/cifsglob.h
648 @@ -1178,6 +1178,11 @@ void cifsFileInfo_put(struct cifsFileInfo *cifs_file);
649 struct cifsInodeInfo {
650 bool can_cache_brlcks;
651 struct list_head llist; /* locks helb by this inode */
652 + /*
653 + * NOTE: Some code paths call down_read(lock_sem) twice, so
654 + * we must always use use cifs_down_write() instead of down_write()
655 + * for this semaphore to avoid deadlocks.
656 + */
657 struct rw_semaphore lock_sem; /* protect the fields above */
658 /* BB add in lists for dirty pages i.e. write caching info for oplock */
659 struct list_head openFileList;
660 diff --git a/fs/cifs/cifsproto.h b/fs/cifs/cifsproto.h
661 index cd8025a249bb..cdf244df91c2 100644
662 --- a/fs/cifs/cifsproto.h
663 +++ b/fs/cifs/cifsproto.h
664 @@ -138,6 +138,7 @@ extern int cifs_unlock_range(struct cifsFileInfo *cfile,
665 struct file_lock *flock, const unsigned int xid);
666 extern int cifs_push_mandatory_locks(struct cifsFileInfo *cfile);
667
668 +extern void cifs_down_write(struct rw_semaphore *sem);
669 extern struct cifsFileInfo *cifs_new_fileinfo(struct cifs_fid *fid,
670 struct file *file,
671 struct tcon_link *tlink,
672 diff --git a/fs/cifs/file.c b/fs/cifs/file.c
673 index 3504ef015493..1c3f262d9c4d 100644
674 --- a/fs/cifs/file.c
675 +++ b/fs/cifs/file.c
676 @@ -280,6 +280,13 @@ cifs_has_mand_locks(struct cifsInodeInfo *cinode)
677 return has_locks;
678 }
679
680 +void
681 +cifs_down_write(struct rw_semaphore *sem)
682 +{
683 + while (!down_write_trylock(sem))
684 + msleep(10);
685 +}
686 +
687 struct cifsFileInfo *
688 cifs_new_fileinfo(struct cifs_fid *fid, struct file *file,
689 struct tcon_link *tlink, __u32 oplock)
690 @@ -305,7 +312,7 @@ cifs_new_fileinfo(struct cifs_fid *fid, struct file *file,
691 INIT_LIST_HEAD(&fdlocks->locks);
692 fdlocks->cfile = cfile;
693 cfile->llist = fdlocks;
694 - down_write(&cinode->lock_sem);
695 + cifs_down_write(&cinode->lock_sem);
696 list_add(&fdlocks->llist, &cinode->llist);
697 up_write(&cinode->lock_sem);
698
699 @@ -457,7 +464,7 @@ void _cifsFileInfo_put(struct cifsFileInfo *cifs_file, bool wait_oplock_handler)
700 * Delete any outstanding lock records. We'll lose them when the file
701 * is closed anyway.
702 */
703 - down_write(&cifsi->lock_sem);
704 + cifs_down_write(&cifsi->lock_sem);
705 list_for_each_entry_safe(li, tmp, &cifs_file->llist->locks, llist) {
706 list_del(&li->llist);
707 cifs_del_lock_waiters(li);
708 @@ -1011,7 +1018,7 @@ static void
709 cifs_lock_add(struct cifsFileInfo *cfile, struct cifsLockInfo *lock)
710 {
711 struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
712 - down_write(&cinode->lock_sem);
713 + cifs_down_write(&cinode->lock_sem);
714 list_add_tail(&lock->llist, &cfile->llist->locks);
715 up_write(&cinode->lock_sem);
716 }
717 @@ -1033,7 +1040,7 @@ cifs_lock_add_if(struct cifsFileInfo *cfile, struct cifsLockInfo *lock,
718
719 try_again:
720 exist = false;
721 - down_write(&cinode->lock_sem);
722 + cifs_down_write(&cinode->lock_sem);
723
724 exist = cifs_find_lock_conflict(cfile, lock->offset, lock->length,
725 lock->type, &conf_lock, CIFS_LOCK_OP);
726 @@ -1055,7 +1062,7 @@ try_again:
727 (lock->blist.next == &lock->blist));
728 if (!rc)
729 goto try_again;
730 - down_write(&cinode->lock_sem);
731 + cifs_down_write(&cinode->lock_sem);
732 list_del_init(&lock->blist);
733 }
734
735 @@ -1108,7 +1115,7 @@ cifs_posix_lock_set(struct file *file, struct file_lock *flock)
736 return rc;
737
738 try_again:
739 - down_write(&cinode->lock_sem);
740 + cifs_down_write(&cinode->lock_sem);
741 if (!cinode->can_cache_brlcks) {
742 up_write(&cinode->lock_sem);
743 return rc;
744 @@ -1312,7 +1319,7 @@ cifs_push_locks(struct cifsFileInfo *cfile)
745 int rc = 0;
746
747 /* we are going to update can_cache_brlcks here - need a write access */
748 - down_write(&cinode->lock_sem);
749 + cifs_down_write(&cinode->lock_sem);
750 if (!cinode->can_cache_brlcks) {
751 up_write(&cinode->lock_sem);
752 return rc;
753 @@ -1501,7 +1508,7 @@ cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
754 if (!buf)
755 return -ENOMEM;
756
757 - down_write(&cinode->lock_sem);
758 + cifs_down_write(&cinode->lock_sem);
759 for (i = 0; i < 2; i++) {
760 cur = buf;
761 num = 0;
762 diff --git a/fs/cifs/smb2file.c b/fs/cifs/smb2file.c
763 index dee5250701de..41f1a5dd33a5 100644
764 --- a/fs/cifs/smb2file.c
765 +++ b/fs/cifs/smb2file.c
766 @@ -138,7 +138,7 @@ smb2_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
767
768 cur = buf;
769
770 - down_write(&cinode->lock_sem);
771 + cifs_down_write(&cinode->lock_sem);
772 list_for_each_entry_safe(li, tmp, &cfile->llist->locks, llist) {
773 if (flock->fl_start > li->offset ||
774 (flock->fl_start + length) <
775 diff --git a/include/linux/gfp.h b/include/linux/gfp.h
776 index f8041f9de31e..d11f56bc9c7e 100644
777 --- a/include/linux/gfp.h
778 +++ b/include/linux/gfp.h
779 @@ -284,6 +284,29 @@ static inline bool gfpflags_allow_blocking(const gfp_t gfp_flags)
780 return !!(gfp_flags & __GFP_DIRECT_RECLAIM);
781 }
782
783 +/**
784 + * gfpflags_normal_context - is gfp_flags a normal sleepable context?
785 + * @gfp_flags: gfp_flags to test
786 + *
787 + * Test whether @gfp_flags indicates that the allocation is from the
788 + * %current context and allowed to sleep.
789 + *
790 + * An allocation being allowed to block doesn't mean it owns the %current
791 + * context. When direct reclaim path tries to allocate memory, the
792 + * allocation context is nested inside whatever %current was doing at the
793 + * time of the original allocation. The nested allocation may be allowed
794 + * to block but modifying anything %current owns can corrupt the outer
795 + * context's expectations.
796 + *
797 + * %true result from this function indicates that the allocation context
798 + * can sleep and use anything that's associated with %current.
799 + */
800 +static inline bool gfpflags_normal_context(const gfp_t gfp_flags)
801 +{
802 + return (gfp_flags & (__GFP_DIRECT_RECLAIM | __GFP_MEMALLOC)) ==
803 + __GFP_DIRECT_RECLAIM;
804 +}
805 +
806 #ifdef CONFIG_HIGHMEM
807 #define OPT_ZONE_HIGHMEM ZONE_HIGHMEM
808 #else
809 diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
810 index f8761774a94f..e37112ac332f 100644
811 --- a/include/linux/skbuff.h
812 +++ b/include/linux/skbuff.h
813 @@ -1178,7 +1178,8 @@ static inline __u32 skb_get_hash_flowi4(struct sk_buff *skb, const struct flowi4
814 return skb->hash;
815 }
816
817 -__u32 skb_get_hash_perturb(const struct sk_buff *skb, u32 perturb);
818 +__u32 skb_get_hash_perturb(const struct sk_buff *skb,
819 + const siphash_key_t *perturb);
820
821 static inline __u32 skb_get_hash_raw(const struct sk_buff *skb)
822 {
823 diff --git a/include/net/flow_dissector.h b/include/net/flow_dissector.h
824 index d9534927d93b..1505cf7a4aaf 100644
825 --- a/include/net/flow_dissector.h
826 +++ b/include/net/flow_dissector.h
827 @@ -3,6 +3,7 @@
828
829 #include <linux/types.h>
830 #include <linux/in6.h>
831 +#include <linux/siphash.h>
832 #include <uapi/linux/if_ether.h>
833
834 /**
835 @@ -151,7 +152,7 @@ struct flow_dissector {
836 struct flow_keys {
837 struct flow_dissector_key_control control;
838 #define FLOW_KEYS_HASH_START_FIELD basic
839 - struct flow_dissector_key_basic basic;
840 + struct flow_dissector_key_basic basic __aligned(SIPHASH_ALIGNMENT);
841 struct flow_dissector_key_tags tags;
842 struct flow_dissector_key_vlan vlan;
843 struct flow_dissector_key_keyid keyid;
844 diff --git a/include/net/fq.h b/include/net/fq.h
845 index 6d8521a30c5c..2c7687902789 100644
846 --- a/include/net/fq.h
847 +++ b/include/net/fq.h
848 @@ -70,7 +70,7 @@ struct fq {
849 struct list_head backlogs;
850 spinlock_t lock;
851 u32 flows_cnt;
852 - u32 perturbation;
853 + siphash_key_t perturbation;
854 u32 limit;
855 u32 memory_limit;
856 u32 memory_usage;
857 diff --git a/include/net/fq_impl.h b/include/net/fq_impl.h
858 index 4e6131cd3f43..45a0d9a006a0 100644
859 --- a/include/net/fq_impl.h
860 +++ b/include/net/fq_impl.h
861 @@ -105,7 +105,7 @@ static struct fq_flow *fq_flow_classify(struct fq *fq,
862
863 lockdep_assert_held(&fq->lock);
864
865 - hash = skb_get_hash_perturb(skb, fq->perturbation);
866 + hash = skb_get_hash_perturb(skb, &fq->perturbation);
867 idx = reciprocal_scale(hash, fq->flows_cnt);
868 flow = &fq->flows[idx];
869
870 @@ -252,7 +252,7 @@ static int fq_init(struct fq *fq, int flows_cnt)
871 INIT_LIST_HEAD(&fq->backlogs);
872 spin_lock_init(&fq->lock);
873 fq->flows_cnt = max_t(u32, flows_cnt, 1);
874 - fq->perturbation = prandom_u32();
875 + get_random_bytes(&fq->perturbation, sizeof(fq->perturbation));
876 fq->quantum = 300;
877 fq->limit = 8192;
878 fq->memory_limit = 16 << 20; /* 16 MBytes */
879 diff --git a/include/net/sock.h b/include/net/sock.h
880 index 116308632fae..469c012a6d01 100644
881 --- a/include/net/sock.h
882 +++ b/include/net/sock.h
883 @@ -2045,12 +2045,17 @@ struct sk_buff *sk_stream_alloc_skb(struct sock *sk, int size, gfp_t gfp,
884 * sk_page_frag - return an appropriate page_frag
885 * @sk: socket
886 *
887 - * If socket allocation mode allows current thread to sleep, it means its
888 - * safe to use the per task page_frag instead of the per socket one.
889 + * Use the per task page_frag instead of the per socket one for
890 + * optimization when we know that we're in the normal context and owns
891 + * everything that's associated with %current.
892 + *
893 + * gfpflags_allow_blocking() isn't enough here as direct reclaim may nest
894 + * inside other socket operations and end up recursing into sk_page_frag()
895 + * while it's already in use.
896 */
897 static inline struct page_frag *sk_page_frag(struct sock *sk)
898 {
899 - if (gfpflags_allow_blocking(sk->sk_allocation))
900 + if (gfpflags_normal_context(sk->sk_allocation))
901 return &current->task_frag;
902
903 return &sk->sk_frag;
904 diff --git a/kernel/time/alarmtimer.c b/kernel/time/alarmtimer.c
905 index a519d3cab1a2..6aef4a0bed29 100644
906 --- a/kernel/time/alarmtimer.c
907 +++ b/kernel/time/alarmtimer.c
908 @@ -586,7 +586,7 @@ static void alarm_timer_get(struct k_itimer *timr,
909 static int alarm_timer_del(struct k_itimer *timr)
910 {
911 if (!rtcdev)
912 - return -ENOTSUPP;
913 + return -EOPNOTSUPP;
914
915 if (alarm_try_to_cancel(&timr->it.alarm.alarmtimer) < 0)
916 return TIMER_RETRY;
917 @@ -610,7 +610,7 @@ static int alarm_timer_set(struct k_itimer *timr, int flags,
918 ktime_t exp;
919
920 if (!rtcdev)
921 - return -ENOTSUPP;
922 + return -EOPNOTSUPP;
923
924 if (flags & ~TIMER_ABSTIME)
925 return -EINVAL;
926 diff --git a/net/core/datagram.c b/net/core/datagram.c
927 index 146502f310ce..619c63a74594 100644
928 --- a/net/core/datagram.c
929 +++ b/net/core/datagram.c
930 @@ -96,7 +96,7 @@ int __skb_wait_for_more_packets(struct sock *sk, int *err, long *timeo_p,
931 if (error)
932 goto out_err;
933
934 - if (sk->sk_receive_queue.prev != skb)
935 + if (READ_ONCE(sk->sk_receive_queue.prev) != skb)
936 goto out;
937
938 /* Socket shut down? */
939 diff --git a/net/core/ethtool.c b/net/core/ethtool.c
940 index ffe7b03c9ab5..454f73fcb3a6 100644
941 --- a/net/core/ethtool.c
942 +++ b/net/core/ethtool.c
943 @@ -1438,11 +1438,13 @@ static int ethtool_reset(struct net_device *dev, char __user *useraddr)
944
945 static int ethtool_get_wol(struct net_device *dev, char __user *useraddr)
946 {
947 - struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL };
948 + struct ethtool_wolinfo wol;
949
950 if (!dev->ethtool_ops->get_wol)
951 return -EOPNOTSUPP;
952
953 + memset(&wol, 0, sizeof(struct ethtool_wolinfo));
954 + wol.cmd = ETHTOOL_GWOL;
955 dev->ethtool_ops->get_wol(dev, &wol);
956
957 if (copy_to_user(useraddr, &wol, sizeof(wol)))
958 diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c
959 index ab7c50026cae..26b0f70d2f1c 100644
960 --- a/net/core/flow_dissector.c
961 +++ b/net/core/flow_dissector.c
962 @@ -563,45 +563,34 @@ out_bad:
963 }
964 EXPORT_SYMBOL(__skb_flow_dissect);
965
966 -static u32 hashrnd __read_mostly;
967 +static siphash_key_t hashrnd __read_mostly;
968 static __always_inline void __flow_hash_secret_init(void)
969 {
970 net_get_random_once(&hashrnd, sizeof(hashrnd));
971 }
972
973 -static __always_inline u32 __flow_hash_words(const u32 *words, u32 length,
974 - u32 keyval)
975 +static const void *flow_keys_hash_start(const struct flow_keys *flow)
976 {
977 - return jhash2(words, length, keyval);
978 -}
979 -
980 -static inline const u32 *flow_keys_hash_start(const struct flow_keys *flow)
981 -{
982 - const void *p = flow;
983 -
984 - BUILD_BUG_ON(FLOW_KEYS_HASH_OFFSET % sizeof(u32));
985 - return (const u32 *)(p + FLOW_KEYS_HASH_OFFSET);
986 + BUILD_BUG_ON(FLOW_KEYS_HASH_OFFSET % SIPHASH_ALIGNMENT);
987 + return &flow->FLOW_KEYS_HASH_START_FIELD;
988 }
989
990 static inline size_t flow_keys_hash_length(const struct flow_keys *flow)
991 {
992 - size_t diff = FLOW_KEYS_HASH_OFFSET + sizeof(flow->addrs);
993 - BUILD_BUG_ON((sizeof(*flow) - FLOW_KEYS_HASH_OFFSET) % sizeof(u32));
994 - BUILD_BUG_ON(offsetof(typeof(*flow), addrs) !=
995 - sizeof(*flow) - sizeof(flow->addrs));
996 + size_t len = offsetof(typeof(*flow), addrs) - FLOW_KEYS_HASH_OFFSET;
997
998 switch (flow->control.addr_type) {
999 case FLOW_DISSECTOR_KEY_IPV4_ADDRS:
1000 - diff -= sizeof(flow->addrs.v4addrs);
1001 + len += sizeof(flow->addrs.v4addrs);
1002 break;
1003 case FLOW_DISSECTOR_KEY_IPV6_ADDRS:
1004 - diff -= sizeof(flow->addrs.v6addrs);
1005 + len += sizeof(flow->addrs.v6addrs);
1006 break;
1007 case FLOW_DISSECTOR_KEY_TIPC_ADDRS:
1008 - diff -= sizeof(flow->addrs.tipcaddrs);
1009 + len += sizeof(flow->addrs.tipcaddrs);
1010 break;
1011 }
1012 - return (sizeof(*flow) - diff) / sizeof(u32);
1013 + return len;
1014 }
1015
1016 __be32 flow_get_u32_src(const struct flow_keys *flow)
1017 @@ -667,14 +656,15 @@ static inline void __flow_hash_consistentify(struct flow_keys *keys)
1018 }
1019 }
1020
1021 -static inline u32 __flow_hash_from_keys(struct flow_keys *keys, u32 keyval)
1022 +static inline u32 __flow_hash_from_keys(struct flow_keys *keys,
1023 + const siphash_key_t *keyval)
1024 {
1025 u32 hash;
1026
1027 __flow_hash_consistentify(keys);
1028
1029 - hash = __flow_hash_words(flow_keys_hash_start(keys),
1030 - flow_keys_hash_length(keys), keyval);
1031 + hash = siphash(flow_keys_hash_start(keys),
1032 + flow_keys_hash_length(keys), keyval);
1033 if (!hash)
1034 hash = 1;
1035
1036 @@ -684,12 +674,13 @@ static inline u32 __flow_hash_from_keys(struct flow_keys *keys, u32 keyval)
1037 u32 flow_hash_from_keys(struct flow_keys *keys)
1038 {
1039 __flow_hash_secret_init();
1040 - return __flow_hash_from_keys(keys, hashrnd);
1041 + return __flow_hash_from_keys(keys, &hashrnd);
1042 }
1043 EXPORT_SYMBOL(flow_hash_from_keys);
1044
1045 static inline u32 ___skb_get_hash(const struct sk_buff *skb,
1046 - struct flow_keys *keys, u32 keyval)
1047 + struct flow_keys *keys,
1048 + const siphash_key_t *keyval)
1049 {
1050 skb_flow_dissect_flow_keys(skb, keys,
1051 FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL);
1052 @@ -737,7 +728,7 @@ u32 __skb_get_hash_symmetric(struct sk_buff *skb)
1053 NULL, 0, 0, 0,
1054 FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL);
1055
1056 - return __flow_hash_from_keys(&keys, hashrnd);
1057 + return __flow_hash_from_keys(&keys, &hashrnd);
1058 }
1059 EXPORT_SYMBOL_GPL(__skb_get_hash_symmetric);
1060
1061 @@ -757,13 +748,14 @@ void __skb_get_hash(struct sk_buff *skb)
1062
1063 __flow_hash_secret_init();
1064
1065 - hash = ___skb_get_hash(skb, &keys, hashrnd);
1066 + hash = ___skb_get_hash(skb, &keys, &hashrnd);
1067
1068 __skb_set_sw_hash(skb, hash, flow_keys_have_l4(&keys));
1069 }
1070 EXPORT_SYMBOL(__skb_get_hash);
1071
1072 -__u32 skb_get_hash_perturb(const struct sk_buff *skb, u32 perturb)
1073 +__u32 skb_get_hash_perturb(const struct sk_buff *skb,
1074 + const siphash_key_t *perturb)
1075 {
1076 struct flow_keys keys;
1077
1078 diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c
1079 index 1d6d3aaa8c3d..322268b88fec 100644
1080 --- a/net/dccp/ipv4.c
1081 +++ b/net/dccp/ipv4.c
1082 @@ -121,7 +121,7 @@ int dccp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
1083 inet->inet_daddr,
1084 inet->inet_sport,
1085 inet->inet_dport);
1086 - inet->inet_id = dp->dccps_iss ^ jiffies;
1087 + inet->inet_id = prandom_u32();
1088
1089 err = dccp_connect(sk);
1090 rt = NULL;
1091 @@ -417,7 +417,7 @@ struct sock *dccp_v4_request_recv_sock(const struct sock *sk,
1092 RCU_INIT_POINTER(newinet->inet_opt, rcu_dereference(ireq->ireq_opt));
1093 newinet->mc_index = inet_iif(skb);
1094 newinet->mc_ttl = ip_hdr(skb)->ttl;
1095 - newinet->inet_id = jiffies;
1096 + newinet->inet_id = prandom_u32();
1097
1098 if (dst == NULL && (dst = inet_csk_route_child_sock(sk, newsk, req)) == NULL)
1099 goto put_and_exit;
1100 diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c
1101 index 0f99297b2fb3..f1792a847d0b 100644
1102 --- a/net/dsa/dsa2.c
1103 +++ b/net/dsa/dsa2.c
1104 @@ -59,7 +59,7 @@ static struct dsa_switch_tree *dsa_add_dst(u32 tree)
1105 dst->tree = tree;
1106 dst->cpu_switch = -1;
1107 INIT_LIST_HEAD(&dst->list);
1108 - list_add_tail(&dsa_switch_trees, &dst->list);
1109 + list_add_tail(&dst->list, &dsa_switch_trees);
1110 kref_init(&dst->refcount);
1111
1112 return dst;
1113 diff --git a/net/ipv4/datagram.c b/net/ipv4/datagram.c
1114 index f915abff1350..d3eddfd13875 100644
1115 --- a/net/ipv4/datagram.c
1116 +++ b/net/ipv4/datagram.c
1117 @@ -75,7 +75,7 @@ int __ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len
1118 inet->inet_dport = usin->sin_port;
1119 sk->sk_state = TCP_ESTABLISHED;
1120 sk_set_txhash(sk);
1121 - inet->inet_id = jiffies;
1122 + inet->inet_id = prandom_u32();
1123
1124 sk_dst_set(sk, &rt->dst);
1125 err = 0;
1126 diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
1127 index 848f2c1da8a5..cced424e1176 100644
1128 --- a/net/ipv4/tcp_ipv4.c
1129 +++ b/net/ipv4/tcp_ipv4.c
1130 @@ -239,7 +239,7 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
1131 inet->inet_sport,
1132 usin->sin_port);
1133
1134 - inet->inet_id = tp->write_seq ^ jiffies;
1135 + inet->inet_id = prandom_u32();
1136
1137 err = tcp_connect(sk);
1138
1139 @@ -1307,7 +1307,7 @@ struct sock *tcp_v4_syn_recv_sock(const struct sock *sk, struct sk_buff *skb,
1140 inet_csk(newsk)->icsk_ext_hdr_len = 0;
1141 if (inet_opt)
1142 inet_csk(newsk)->icsk_ext_hdr_len = inet_opt->opt.optlen;
1143 - newinet->inet_id = newtp->write_seq ^ jiffies;
1144 + newinet->inet_id = prandom_u32();
1145
1146 if (!dst) {
1147 dst = inet_csk_route_child_sock(sk, newsk, req);
1148 diff --git a/net/sched/sch_fq_codel.c b/net/sched/sch_fq_codel.c
1149 index a5ea0e9b6be4..29b7465c9d8a 100644
1150 --- a/net/sched/sch_fq_codel.c
1151 +++ b/net/sched/sch_fq_codel.c
1152 @@ -57,7 +57,7 @@ struct fq_codel_sched_data {
1153 struct fq_codel_flow *flows; /* Flows table [flows_cnt] */
1154 u32 *backlogs; /* backlog table [flows_cnt] */
1155 u32 flows_cnt; /* number of flows */
1156 - u32 perturbation; /* hash perturbation */
1157 + siphash_key_t perturbation; /* hash perturbation */
1158 u32 quantum; /* psched_mtu(qdisc_dev(sch)); */
1159 u32 drop_batch_size;
1160 u32 memory_limit;
1161 @@ -75,7 +75,7 @@ struct fq_codel_sched_data {
1162 static unsigned int fq_codel_hash(const struct fq_codel_sched_data *q,
1163 struct sk_buff *skb)
1164 {
1165 - u32 hash = skb_get_hash_perturb(skb, q->perturbation);
1166 + u32 hash = skb_get_hash_perturb(skb, &q->perturbation);
1167
1168 return reciprocal_scale(hash, q->flows_cnt);
1169 }
1170 @@ -482,7 +482,7 @@ static int fq_codel_init(struct Qdisc *sch, struct nlattr *opt)
1171 q->memory_limit = 32 << 20; /* 32 MBytes */
1172 q->drop_batch_size = 64;
1173 q->quantum = psched_mtu(qdisc_dev(sch));
1174 - q->perturbation = prandom_u32();
1175 + get_random_bytes(&q->perturbation, sizeof(q->perturbation));
1176 INIT_LIST_HEAD(&q->new_flows);
1177 INIT_LIST_HEAD(&q->old_flows);
1178 codel_params_init(&q->cparams);
1179 diff --git a/net/sched/sch_hhf.c b/net/sched/sch_hhf.c
1180 index fe32239253a6..1367fe94d630 100644
1181 --- a/net/sched/sch_hhf.c
1182 +++ b/net/sched/sch_hhf.c
1183 @@ -4,11 +4,11 @@
1184 * Copyright (C) 2013 Nandita Dukkipati <nanditad@google.com>
1185 */
1186
1187 -#include <linux/jhash.h>
1188 #include <linux/jiffies.h>
1189 #include <linux/module.h>
1190 #include <linux/skbuff.h>
1191 #include <linux/vmalloc.h>
1192 +#include <linux/siphash.h>
1193 #include <net/pkt_sched.h>
1194 #include <net/sock.h>
1195
1196 @@ -125,7 +125,7 @@ struct wdrr_bucket {
1197
1198 struct hhf_sched_data {
1199 struct wdrr_bucket buckets[WDRR_BUCKET_CNT];
1200 - u32 perturbation; /* hash perturbation */
1201 + siphash_key_t perturbation; /* hash perturbation */
1202 u32 quantum; /* psched_mtu(qdisc_dev(sch)); */
1203 u32 drop_overlimit; /* number of times max qdisc packet
1204 * limit was hit
1205 @@ -263,7 +263,7 @@ static enum wdrr_bucket_idx hhf_classify(struct sk_buff *skb, struct Qdisc *sch)
1206 }
1207
1208 /* Get hashed flow-id of the skb. */
1209 - hash = skb_get_hash_perturb(skb, q->perturbation);
1210 + hash = skb_get_hash_perturb(skb, &q->perturbation);
1211
1212 /* Check if this packet belongs to an already established HH flow. */
1213 flow_pos = hash & HHF_BIT_MASK;
1214 @@ -593,7 +593,7 @@ static int hhf_init(struct Qdisc *sch, struct nlattr *opt)
1215
1216 sch->limit = 1000;
1217 q->quantum = psched_mtu(qdisc_dev(sch));
1218 - q->perturbation = prandom_u32();
1219 + get_random_bytes(&q->perturbation, sizeof(q->perturbation));
1220 INIT_LIST_HEAD(&q->new_buckets);
1221 INIT_LIST_HEAD(&q->old_buckets);
1222
1223 diff --git a/net/sched/sch_sfb.c b/net/sched/sch_sfb.c
1224 index 20a350bd1b1d..bc176bd48c02 100644
1225 --- a/net/sched/sch_sfb.c
1226 +++ b/net/sched/sch_sfb.c
1227 @@ -22,7 +22,7 @@
1228 #include <linux/errno.h>
1229 #include <linux/skbuff.h>
1230 #include <linux/random.h>
1231 -#include <linux/jhash.h>
1232 +#include <linux/siphash.h>
1233 #include <net/ip.h>
1234 #include <net/pkt_sched.h>
1235 #include <net/inet_ecn.h>
1236 @@ -48,7 +48,7 @@ struct sfb_bucket {
1237 * (Section 4.4 of SFB reference : moving hash functions)
1238 */
1239 struct sfb_bins {
1240 - u32 perturbation; /* jhash perturbation */
1241 + siphash_key_t perturbation; /* siphash key */
1242 struct sfb_bucket bins[SFB_LEVELS][SFB_NUMBUCKETS];
1243 };
1244
1245 @@ -219,7 +219,8 @@ static u32 sfb_compute_qlen(u32 *prob_r, u32 *avgpm_r, const struct sfb_sched_da
1246
1247 static void sfb_init_perturbation(u32 slot, struct sfb_sched_data *q)
1248 {
1249 - q->bins[slot].perturbation = prandom_u32();
1250 + get_random_bytes(&q->bins[slot].perturbation,
1251 + sizeof(q->bins[slot].perturbation));
1252 }
1253
1254 static void sfb_swap_slot(struct sfb_sched_data *q)
1255 @@ -314,9 +315,9 @@ static int sfb_enqueue(struct sk_buff *skb, struct Qdisc *sch,
1256 /* If using external classifiers, get result and record it. */
1257 if (!sfb_classify(skb, fl, &ret, &salt))
1258 goto other_drop;
1259 - sfbhash = jhash_1word(salt, q->bins[slot].perturbation);
1260 + sfbhash = siphash_1u32(salt, &q->bins[slot].perturbation);
1261 } else {
1262 - sfbhash = skb_get_hash_perturb(skb, q->bins[slot].perturbation);
1263 + sfbhash = skb_get_hash_perturb(skb, &q->bins[slot].perturbation);
1264 }
1265
1266
1267 @@ -352,7 +353,7 @@ static int sfb_enqueue(struct sk_buff *skb, struct Qdisc *sch,
1268 /* Inelastic flow */
1269 if (q->double_buffering) {
1270 sfbhash = skb_get_hash_perturb(skb,
1271 - q->bins[slot].perturbation);
1272 + &q->bins[slot].perturbation);
1273 if (!sfbhash)
1274 sfbhash = 1;
1275 sfb_skb_cb(skb)->hashes[slot] = sfbhash;
1276 diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c
1277 index d8c2b6baaad2..a8d82cb7f073 100644
1278 --- a/net/sched/sch_sfq.c
1279 +++ b/net/sched/sch_sfq.c
1280 @@ -18,7 +18,7 @@
1281 #include <linux/errno.h>
1282 #include <linux/init.h>
1283 #include <linux/skbuff.h>
1284 -#include <linux/jhash.h>
1285 +#include <linux/siphash.h>
1286 #include <linux/slab.h>
1287 #include <linux/vmalloc.h>
1288 #include <net/netlink.h>
1289 @@ -120,7 +120,7 @@ struct sfq_sched_data {
1290 u8 headdrop;
1291 u8 maxdepth; /* limit of packets per flow */
1292
1293 - u32 perturbation;
1294 + siphash_key_t perturbation;
1295 u8 cur_depth; /* depth of longest slot */
1296 u8 flags;
1297 unsigned short scaled_quantum; /* SFQ_ALLOT_SIZE(quantum) */
1298 @@ -158,7 +158,7 @@ static inline struct sfq_head *sfq_dep_head(struct sfq_sched_data *q, sfq_index
1299 static unsigned int sfq_hash(const struct sfq_sched_data *q,
1300 const struct sk_buff *skb)
1301 {
1302 - return skb_get_hash_perturb(skb, q->perturbation) & (q->divisor - 1);
1303 + return skb_get_hash_perturb(skb, &q->perturbation) & (q->divisor - 1);
1304 }
1305
1306 static unsigned int sfq_classify(struct sk_buff *skb, struct Qdisc *sch,
1307 @@ -607,9 +607,11 @@ static void sfq_perturbation(unsigned long arg)
1308 struct Qdisc *sch = (struct Qdisc *)arg;
1309 struct sfq_sched_data *q = qdisc_priv(sch);
1310 spinlock_t *root_lock = qdisc_lock(qdisc_root_sleeping(sch));
1311 + siphash_key_t nkey;
1312
1313 + get_random_bytes(&nkey, sizeof(nkey));
1314 spin_lock(root_lock);
1315 - q->perturbation = prandom_u32();
1316 + q->perturbation = nkey;
1317 if (!q->filter_list && q->tail)
1318 sfq_rehash(sch);
1319 spin_unlock(root_lock);
1320 @@ -681,7 +683,7 @@ static int sfq_change(struct Qdisc *sch, struct nlattr *opt)
1321 del_timer(&q->perturb_timer);
1322 if (q->perturb_period) {
1323 mod_timer(&q->perturb_timer, jiffies + q->perturb_period);
1324 - q->perturbation = prandom_u32();
1325 + get_random_bytes(&q->perturbation, sizeof(q->perturbation));
1326 }
1327 sch_tree_unlock(sch);
1328 kfree(p);
1329 @@ -737,7 +739,7 @@ static int sfq_init(struct Qdisc *sch, struct nlattr *opt)
1330 q->quantum = psched_mtu(qdisc_dev(sch));
1331 q->scaled_quantum = SFQ_ALLOT_SIZE(q->quantum);
1332 q->perturb_period = 0;
1333 - q->perturbation = prandom_u32();
1334 + get_random_bytes(&q->perturbation, sizeof(q->perturbation));
1335
1336 if (opt) {
1337 int err = sfq_change(sch, opt);
1338 diff --git a/net/sctp/socket.c b/net/sctp/socket.c
1339 index c952abf22535..21ec92011585 100644
1340 --- a/net/sctp/socket.c
1341 +++ b/net/sctp/socket.c
1342 @@ -7734,7 +7734,7 @@ void sctp_copy_sock(struct sock *newsk, struct sock *sk,
1343 newinet->inet_rcv_saddr = inet->inet_rcv_saddr;
1344 newinet->inet_dport = htons(asoc->peer.port);
1345 newinet->pmtudisc = inet->pmtudisc;
1346 - newinet->inet_id = asoc->next_tsn ^ jiffies;
1347 + newinet->inet_id = prandom_u32();
1348
1349 newinet->uc_ttl = inet->uc_ttl;
1350 newinet->mc_loop = 1;
1351 diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c
1352 index c03c9da076c2..28eb55bc4663 100644
1353 --- a/sound/soc/codecs/wm_adsp.c
1354 +++ b/sound/soc/codecs/wm_adsp.c
1355 @@ -948,8 +948,7 @@ static unsigned int wmfw_convert_flags(unsigned int in, unsigned int len)
1356 }
1357
1358 if (in) {
1359 - if (in & WMFW_CTL_FLAG_READABLE)
1360 - out |= rd;
1361 + out |= rd;
1362 if (in & WMFW_CTL_FLAG_WRITEABLE)
1363 out |= wr;
1364 if (in & WMFW_CTL_FLAG_VOLATILE)
1365 diff --git a/sound/soc/rockchip/rockchip_i2s.c b/sound/soc/rockchip/rockchip_i2s.c
1366 index 08bfee447a36..94b6f9c7dd6b 100644
1367 --- a/sound/soc/rockchip/rockchip_i2s.c
1368 +++ b/sound/soc/rockchip/rockchip_i2s.c
1369 @@ -649,7 +649,7 @@ static int rockchip_i2s_probe(struct platform_device *pdev)
1370 ret = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0);
1371 if (ret) {
1372 dev_err(&pdev->dev, "Could not register PCM\n");
1373 - return ret;
1374 + goto err_suspend;
1375 }
1376
1377 return 0;
1378 diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c
1379 index d426dcb18ce9..496a4ca11667 100644
1380 --- a/tools/perf/builtin-kmem.c
1381 +++ b/tools/perf/builtin-kmem.c
1382 @@ -674,6 +674,7 @@ static char *compact_gfp_flags(char *gfp_flags)
1383 new = realloc(new_flags, len + strlen(cpt) + 2);
1384 if (new == NULL) {
1385 free(new_flags);
1386 + free(orig_flags);
1387 return NULL;
1388 }
1389
1390 diff --git a/tools/testing/selftests/net/reuseport_dualstack.c b/tools/testing/selftests/net/reuseport_dualstack.c
1391 index 90958aaaafb9..2737d6a595f4 100644
1392 --- a/tools/testing/selftests/net/reuseport_dualstack.c
1393 +++ b/tools/testing/selftests/net/reuseport_dualstack.c
1394 @@ -128,7 +128,7 @@ static void test(int *rcv_fds, int count, int proto)
1395 {
1396 struct epoll_event ev;
1397 int epfd, i, test_fd;
1398 - uint16_t test_family;
1399 + int test_family;
1400 socklen_t len;
1401
1402 epfd = epoll_create(1);
1403 @@ -145,6 +145,7 @@ static void test(int *rcv_fds, int count, int proto)
1404 send_from_v4(proto);
1405
1406 test_fd = receive_once(epfd, proto);
1407 + len = sizeof(test_family);
1408 if (getsockopt(test_fd, SOL_SOCKET, SO_DOMAIN, &test_family, &len))
1409 error(1, errno, "failed to read socket domain");
1410 if (test_family != AF_INET)