Magellan Linux

Contents of /trunk/kernel-alx-legacy/patches-4.9/0338-4.9.239-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3640 - (show annotations) (download)
Mon Oct 24 14:07:19 2022 UTC (19 months ago) by niro
File size: 64082 byte(s)
-linux-4.9.239
1 diff --git a/Makefile b/Makefile
2 index 41a7d6626e354..82bb1b27d2f57 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 9
8 -SUBLEVEL = 238
9 +SUBLEVEL = 239
10 EXTRAVERSION =
11 NAME = Roaring Lionus
12
13 diff --git a/drivers/base/dd.c b/drivers/base/dd.c
14 index 854d218ea76ac..ff59a1851cb4d 100644
15 --- a/drivers/base/dd.c
16 +++ b/drivers/base/dd.c
17 @@ -343,7 +343,8 @@ static int really_probe(struct device *dev, struct device_driver *drv)
18 drv->bus->name, __func__, drv->name, dev_name(dev));
19 if (!list_empty(&dev->devres_head)) {
20 dev_crit(dev, "Resources present before probing\n");
21 - return -EBUSY;
22 + ret = -EBUSY;
23 + goto done;
24 }
25
26 re_probe:
27 @@ -446,7 +447,7 @@ pinctrl_bind_failed:
28 ret = 0;
29 done:
30 atomic_dec(&probe_count);
31 - wake_up(&probe_waitqueue);
32 + wake_up_all(&probe_waitqueue);
33 return ret;
34 }
35
36 diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c
37 index 91f9b79e39411..9a9402f568ef6 100644
38 --- a/drivers/clk/samsung/clk-exynos4.c
39 +++ b/drivers/clk/samsung/clk-exynos4.c
40 @@ -1060,7 +1060,7 @@ static const struct samsung_gate_clock exynos4210_gate_clks[] __initconst = {
41 GATE(CLK_PCIE, "pcie", "aclk133", GATE_IP_FSYS, 14, 0, 0),
42 GATE(CLK_SMMU_PCIE, "smmu_pcie", "aclk133", GATE_IP_FSYS, 18, 0, 0),
43 GATE(CLK_MODEMIF, "modemif", "aclk100", GATE_IP_PERIL, 28, 0, 0),
44 - GATE(CLK_CHIPID, "chipid", "aclk100", E4210_GATE_IP_PERIR, 0, 0, 0),
45 + GATE(CLK_CHIPID, "chipid", "aclk100", E4210_GATE_IP_PERIR, 0, CLK_IGNORE_UNUSED, 0),
46 GATE(CLK_SYSREG, "sysreg", "aclk100", E4210_GATE_IP_PERIR, 0,
47 CLK_IGNORE_UNUSED, 0),
48 GATE(CLK_HDMI_CEC, "hdmi_cec", "aclk100", E4210_GATE_IP_PERIR, 11, 0,
49 @@ -1101,7 +1101,7 @@ static const struct samsung_gate_clock exynos4x12_gate_clks[] __initconst = {
50 0),
51 GATE(CLK_TSADC, "tsadc", "aclk133", E4X12_GATE_BUS_FSYS1, 16, 0, 0),
52 GATE(CLK_MIPI_HSI, "mipi_hsi", "aclk133", GATE_IP_FSYS, 10, 0, 0),
53 - GATE(CLK_CHIPID, "chipid", "aclk100", E4X12_GATE_IP_PERIR, 0, 0, 0),
54 + GATE(CLK_CHIPID, "chipid", "aclk100", E4X12_GATE_IP_PERIR, 0, CLK_IGNORE_UNUSED, 0),
55 GATE(CLK_SYSREG, "sysreg", "aclk100", E4X12_GATE_IP_PERIR, 1,
56 CLK_IGNORE_UNUSED, 0),
57 GATE(CLK_HDMI_CEC, "hdmi_cec", "aclk100", E4X12_GATE_IP_PERIR, 11, 0,
58 diff --git a/drivers/gpio/gpio-tc3589x.c b/drivers/gpio/gpio-tc3589x.c
59 index d6e21f1a70a9d..6cc7c5d59e460 100644
60 --- a/drivers/gpio/gpio-tc3589x.c
61 +++ b/drivers/gpio/gpio-tc3589x.c
62 @@ -210,7 +210,7 @@ static void tc3589x_gpio_irq_sync_unlock(struct irq_data *d)
63 continue;
64
65 tc3589x_gpio->oldregs[i][j] = new;
66 - tc3589x_reg_write(tc3589x, regmap[i] + j * 8, new);
67 + tc3589x_reg_write(tc3589x, regmap[i] + j, new);
68 }
69 }
70
71 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
72 index fdf7a18058881..fd97532bf7ebc 100644
73 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
74 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
75 @@ -283,7 +283,7 @@ int amdgpu_crtc_set_config(struct drm_mode_set *set)
76 take the current one */
77 if (active && !adev->have_disp_power_ref) {
78 adev->have_disp_power_ref = true;
79 - goto out;
80 + return ret;
81 }
82 /* if we have no active crtcs, then drop the power ref
83 we got before */
84 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
85 index 05ff98b43c50f..80c60a62d39ef 100644
86 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
87 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
88 @@ -637,6 +637,7 @@ static int amdgpu_ttm_tt_pin_userptr(struct ttm_tt *ttm)
89
90 release_sg:
91 kfree(ttm->sg);
92 + ttm->sg = NULL;
93 return r;
94 }
95
96 diff --git a/drivers/i2c/busses/i2c-cpm.c b/drivers/i2c/busses/i2c-cpm.c
97 index d89bde2c5da25..cf285b97a6422 100644
98 --- a/drivers/i2c/busses/i2c-cpm.c
99 +++ b/drivers/i2c/busses/i2c-cpm.c
100 @@ -74,6 +74,9 @@ struct i2c_ram {
101 char res1[4]; /* Reserved */
102 ushort rpbase; /* Relocation pointer */
103 char res2[2]; /* Reserved */
104 + /* The following elements are only for CPM2 */
105 + char res3[4]; /* Reserved */
106 + uint sdmatmp; /* Internal */
107 };
108
109 #define I2COM_START 0x80
110 diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
111 index e5799639fb544..82ff44637ed78 100644
112 --- a/drivers/input/serio/i8042-x86ia64io.h
113 +++ b/drivers/input/serio/i8042-x86ia64io.h
114 @@ -797,6 +797,13 @@ static const struct dmi_system_id __initconst i8042_dmi_nopnp_table[] = {
115 DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"),
116 },
117 },
118 + {
119 + /* Acer Aspire 5 A515 */
120 + .matches = {
121 + DMI_MATCH(DMI_BOARD_NAME, "Grumpy_PK"),
122 + DMI_MATCH(DMI_BOARD_VENDOR, "PK"),
123 + },
124 + },
125 { }
126 };
127
128 diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c
129 index beef59eb94fa7..626b434e7967a 100644
130 --- a/drivers/iommu/exynos-iommu.c
131 +++ b/drivers/iommu/exynos-iommu.c
132 @@ -1265,13 +1265,17 @@ static int exynos_iommu_of_xlate(struct device *dev,
133 return -ENODEV;
134
135 data = platform_get_drvdata(sysmmu);
136 - if (!data)
137 + if (!data) {
138 + put_device(&sysmmu->dev);
139 return -ENODEV;
140 + }
141
142 if (!owner) {
143 owner = kzalloc(sizeof(*owner), GFP_KERNEL);
144 - if (!owner)
145 + if (!owner) {
146 + put_device(&sysmmu->dev);
147 return -ENOMEM;
148 + }
149
150 INIT_LIST_HEAD(&owner->controllers);
151 dev->archdata.iommu = owner;
152 diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c
153 index ddf3e24cc2898..2cf19372efb90 100644
154 --- a/drivers/mtd/nand/sunxi_nand.c
155 +++ b/drivers/mtd/nand/sunxi_nand.c
156 @@ -2108,7 +2108,7 @@ static int sunxi_nand_chip_init(struct device *dev, struct sunxi_nfc *nfc,
157 ret = mtd_device_register(mtd, NULL, 0);
158 if (ret) {
159 dev_err(dev, "failed to register mtd device: %d\n", ret);
160 - nand_release(nand);
161 + nand_cleanup(nand);
162 return ret;
163 }
164
165 diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
166 index 8322129c3f987..240d7850c8252 100644
167 --- a/drivers/net/bonding/bond_main.c
168 +++ b/drivers/net/bonding/bond_main.c
169 @@ -1129,6 +1129,7 @@ static void bond_setup_by_slave(struct net_device *bond_dev,
170
171 bond_dev->type = slave_dev->type;
172 bond_dev->hard_header_len = slave_dev->hard_header_len;
173 + bond_dev->needed_headroom = slave_dev->needed_headroom;
174 bond_dev->addr_len = slave_dev->addr_len;
175
176 memcpy(bond_dev->broadcast, slave_dev->broadcast,
177 diff --git a/drivers/net/ethernet/dec/tulip/de2104x.c b/drivers/net/ethernet/dec/tulip/de2104x.c
178 index cadcee645f74e..11ce50a057998 100644
179 --- a/drivers/net/ethernet/dec/tulip/de2104x.c
180 +++ b/drivers/net/ethernet/dec/tulip/de2104x.c
181 @@ -91,7 +91,7 @@ MODULE_PARM_DESC (rx_copybreak, "de2104x Breakpoint at which Rx packets are copi
182 #define DSL CONFIG_DE2104X_DSL
183 #endif
184
185 -#define DE_RX_RING_SIZE 64
186 +#define DE_RX_RING_SIZE 128
187 #define DE_TX_RING_SIZE 64
188 #define DE_RING_BYTES \
189 ((sizeof(struct de_desc) * DE_RX_RING_SIZE) + \
190 diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
191 index a5de56bcbac08..93d3152752ff4 100644
192 --- a/drivers/net/ethernet/renesas/ravb_main.c
193 +++ b/drivers/net/ethernet/renesas/ravb_main.c
194 @@ -1336,51 +1336,6 @@ static inline int ravb_hook_irq(unsigned int irq, irq_handler_t handler,
195 return error;
196 }
197
198 -/* MDIO bus init function */
199 -static int ravb_mdio_init(struct ravb_private *priv)
200 -{
201 - struct platform_device *pdev = priv->pdev;
202 - struct device *dev = &pdev->dev;
203 - int error;
204 -
205 - /* Bitbang init */
206 - priv->mdiobb.ops = &bb_ops;
207 -
208 - /* MII controller setting */
209 - priv->mii_bus = alloc_mdio_bitbang(&priv->mdiobb);
210 - if (!priv->mii_bus)
211 - return -ENOMEM;
212 -
213 - /* Hook up MII support for ethtool */
214 - priv->mii_bus->name = "ravb_mii";
215 - priv->mii_bus->parent = dev;
216 - snprintf(priv->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x",
217 - pdev->name, pdev->id);
218 -
219 - /* Register MDIO bus */
220 - error = of_mdiobus_register(priv->mii_bus, dev->of_node);
221 - if (error)
222 - goto out_free_bus;
223 -
224 - return 0;
225 -
226 -out_free_bus:
227 - free_mdio_bitbang(priv->mii_bus);
228 - return error;
229 -}
230 -
231 -/* MDIO bus release function */
232 -static int ravb_mdio_release(struct ravb_private *priv)
233 -{
234 - /* Unregister mdio bus */
235 - mdiobus_unregister(priv->mii_bus);
236 -
237 - /* Free bitbang info */
238 - free_mdio_bitbang(priv->mii_bus);
239 -
240 - return 0;
241 -}
242 -
243 /* Network device open function for Ethernet AVB */
244 static int ravb_open(struct net_device *ndev)
245 {
246 @@ -1389,13 +1344,6 @@ static int ravb_open(struct net_device *ndev)
247 struct device *dev = &pdev->dev;
248 int error;
249
250 - /* MDIO bus init */
251 - error = ravb_mdio_init(priv);
252 - if (error) {
253 - netdev_err(ndev, "failed to initialize MDIO\n");
254 - return error;
255 - }
256 -
257 napi_enable(&priv->napi[RAVB_BE]);
258 napi_enable(&priv->napi[RAVB_NC]);
259
260 @@ -1473,7 +1421,6 @@ out_free_irq:
261 out_napi_off:
262 napi_disable(&priv->napi[RAVB_NC]);
263 napi_disable(&priv->napi[RAVB_BE]);
264 - ravb_mdio_release(priv);
265 return error;
266 }
267
268 @@ -1771,8 +1718,6 @@ static int ravb_close(struct net_device *ndev)
269 ravb_ring_free(ndev, RAVB_BE);
270 ravb_ring_free(ndev, RAVB_NC);
271
272 - ravb_mdio_release(priv);
273 -
274 return 0;
275 }
276
277 @@ -1875,6 +1820,51 @@ static const struct net_device_ops ravb_netdev_ops = {
278 .ndo_change_mtu = eth_change_mtu,
279 };
280
281 +/* MDIO bus init function */
282 +static int ravb_mdio_init(struct ravb_private *priv)
283 +{
284 + struct platform_device *pdev = priv->pdev;
285 + struct device *dev = &pdev->dev;
286 + int error;
287 +
288 + /* Bitbang init */
289 + priv->mdiobb.ops = &bb_ops;
290 +
291 + /* MII controller setting */
292 + priv->mii_bus = alloc_mdio_bitbang(&priv->mdiobb);
293 + if (!priv->mii_bus)
294 + return -ENOMEM;
295 +
296 + /* Hook up MII support for ethtool */
297 + priv->mii_bus->name = "ravb_mii";
298 + priv->mii_bus->parent = dev;
299 + snprintf(priv->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x",
300 + pdev->name, pdev->id);
301 +
302 + /* Register MDIO bus */
303 + error = of_mdiobus_register(priv->mii_bus, dev->of_node);
304 + if (error)
305 + goto out_free_bus;
306 +
307 + return 0;
308 +
309 +out_free_bus:
310 + free_mdio_bitbang(priv->mii_bus);
311 + return error;
312 +}
313 +
314 +/* MDIO bus release function */
315 +static int ravb_mdio_release(struct ravb_private *priv)
316 +{
317 + /* Unregister mdio bus */
318 + mdiobus_unregister(priv->mii_bus);
319 +
320 + /* Free bitbang info */
321 + free_mdio_bitbang(priv->mii_bus);
322 +
323 + return 0;
324 +}
325 +
326 static const struct of_device_id ravb_match_table[] = {
327 { .compatible = "renesas,etheravb-r8a7790", .data = (void *)RCAR_GEN2 },
328 { .compatible = "renesas,etheravb-r8a7794", .data = (void *)RCAR_GEN2 },
329 @@ -2079,6 +2069,13 @@ static int ravb_probe(struct platform_device *pdev)
330 eth_hw_addr_random(ndev);
331 }
332
333 + /* MDIO bus init */
334 + error = ravb_mdio_init(priv);
335 + if (error) {
336 + dev_err(&pdev->dev, "failed to initialize MDIO\n");
337 + goto out_dma_free;
338 + }
339 +
340 netif_napi_add(ndev, &priv->napi[RAVB_BE], ravb_poll, 64);
341 netif_napi_add(ndev, &priv->napi[RAVB_NC], ravb_poll, 64);
342
343 @@ -2098,6 +2095,8 @@ static int ravb_probe(struct platform_device *pdev)
344 out_napi_del:
345 netif_napi_del(&priv->napi[RAVB_NC]);
346 netif_napi_del(&priv->napi[RAVB_BE]);
347 + ravb_mdio_release(priv);
348 +out_dma_free:
349 dma_free_coherent(ndev->dev.parent, priv->desc_bat_size, priv->desc_bat,
350 priv->desc_bat_dma);
351
352 @@ -2130,6 +2129,7 @@ static int ravb_remove(struct platform_device *pdev)
353 unregister_netdev(ndev);
354 netif_napi_del(&priv->napi[RAVB_NC]);
355 netif_napi_del(&priv->napi[RAVB_BE]);
356 + ravb_mdio_release(priv);
357 pm_runtime_disable(&pdev->dev);
358 free_netdev(ndev);
359 platform_set_drvdata(pdev, NULL);
360 diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
361 index 3519a8a589dda..c8673e231a880 100644
362 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
363 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
364 @@ -678,23 +678,16 @@ static int stmmac_ethtool_op_set_eee(struct net_device *dev,
365 struct stmmac_priv *priv = netdev_priv(dev);
366 int ret;
367
368 - if (!edata->eee_enabled) {
369 + if (!priv->dma_cap.eee)
370 + return -EOPNOTSUPP;
371 +
372 + if (!edata->eee_enabled)
373 stmmac_disable_eee_mode(priv);
374 - } else {
375 - /* We are asking for enabling the EEE but it is safe
376 - * to verify all by invoking the eee_init function.
377 - * In case of failure it will return an error.
378 - */
379 - edata->eee_enabled = stmmac_eee_init(priv);
380 - if (!edata->eee_enabled)
381 - return -EOPNOTSUPP;
382 - }
383
384 ret = phy_ethtool_set_eee(dev->phydev, edata);
385 if (ret)
386 return ret;
387
388 - priv->eee_enabled = edata->eee_enabled;
389 priv->tx_lpi_timer = edata->tx_lpi_timer;
390 return 0;
391 }
392 diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
393 index 5defa29069ca3..774b9db0c811f 100644
394 --- a/drivers/net/macsec.c
395 +++ b/drivers/net/macsec.c
396 @@ -1087,6 +1087,7 @@ static rx_handler_result_t macsec_handle_frame(struct sk_buff **pskb)
397 struct macsec_rx_sa *rx_sa;
398 struct macsec_rxh_data *rxd;
399 struct macsec_dev *macsec;
400 + unsigned int len;
401 sci_t sci;
402 u32 pn;
403 bool cbit;
404 @@ -1242,9 +1243,10 @@ deliver:
405 macsec_rxsc_put(rx_sc);
406
407 skb_orphan(skb);
408 + len = skb->len;
409 ret = gro_cells_receive(&macsec->gro_cells, skb);
410 if (ret == NET_RX_SUCCESS)
411 - count_rx(dev, skb->len);
412 + count_rx(dev, len);
413 else
414 macsec->secy.netdev->stats.rx_dropped++;
415
416 diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
417 index 2651c8d8de2f8..032017bd0ced5 100644
418 --- a/drivers/net/phy/Kconfig
419 +++ b/drivers/net/phy/Kconfig
420 @@ -135,6 +135,7 @@ config MDIO_THUNDER
421 depends on 64BIT
422 depends on PCI
423 select MDIO_CAVIUM
424 + select MDIO_DEVRES
425 help
426 This driver supports the MDIO interfaces found on Cavium
427 ThunderX SoCs when the MDIO bus device appears as a PCI
428 diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
429 index cea6d2eabe7e6..001dea7aaba3d 100644
430 --- a/drivers/net/team/team.c
431 +++ b/drivers/net/team/team.c
432 @@ -299,7 +299,7 @@ inst_rollback:
433 for (i--; i >= 0; i--)
434 __team_option_inst_del_option(team, dst_opts[i]);
435
436 - i = option_count - 1;
437 + i = option_count;
438 alloc_rollback:
439 for (i--; i >= 0; i--)
440 kfree(dst_opts[i]);
441 @@ -2085,6 +2085,7 @@ static void team_setup_by_port(struct net_device *dev,
442 dev->header_ops = port_dev->header_ops;
443 dev->type = port_dev->type;
444 dev->hard_header_len = port_dev->hard_header_len;
445 + dev->needed_headroom = port_dev->needed_headroom;
446 dev->addr_len = port_dev->addr_len;
447 dev->mtu = port_dev->mtu;
448 memcpy(dev->broadcast, port_dev->broadcast, port_dev->addr_len);
449 diff --git a/drivers/net/usb/rndis_host.c b/drivers/net/usb/rndis_host.c
450 index 4f4f71b2966ba..9ccbdf1431063 100644
451 --- a/drivers/net/usb/rndis_host.c
452 +++ b/drivers/net/usb/rndis_host.c
453 @@ -213,7 +213,7 @@ int rndis_command(struct usbnet *dev, struct rndis_msg_hdr *buf, int buflen)
454 dev_dbg(&info->control->dev,
455 "rndis response error, code %d\n", retval);
456 }
457 - msleep(20);
458 + msleep(40);
459 }
460 dev_dbg(&info->control->dev, "rndis response timeout\n");
461 return -ETIMEDOUT;
462 diff --git a/drivers/net/usb/rtl8150.c b/drivers/net/usb/rtl8150.c
463 index 9504800217edd..4455493723681 100644
464 --- a/drivers/net/usb/rtl8150.c
465 +++ b/drivers/net/usb/rtl8150.c
466 @@ -277,12 +277,20 @@ static int write_mii_word(rtl8150_t * dev, u8 phy, __u8 indx, u16 reg)
467 return 1;
468 }
469
470 -static inline void set_ethernet_addr(rtl8150_t * dev)
471 +static void set_ethernet_addr(rtl8150_t *dev)
472 {
473 - u8 node_id[6];
474 + u8 node_id[ETH_ALEN];
475 + int ret;
476 +
477 + ret = get_registers(dev, IDR, sizeof(node_id), node_id);
478
479 - get_registers(dev, IDR, sizeof(node_id), node_id);
480 - memcpy(dev->netdev->dev_addr, node_id, sizeof(node_id));
481 + if (ret == sizeof(node_id)) {
482 + ether_addr_copy(dev->netdev->dev_addr, node_id);
483 + } else {
484 + eth_hw_addr_random(dev->netdev);
485 + netdev_notice(dev->netdev, "Assigned a random MAC address: %pM\n",
486 + dev->netdev->dev_addr);
487 + }
488 }
489
490 static int rtl8150_set_mac_address(struct net_device *netdev, void *p)
491 diff --git a/drivers/net/wan/hdlc_cisco.c b/drivers/net/wan/hdlc_cisco.c
492 index 7f99fb666f196..1587789ba9343 100644
493 --- a/drivers/net/wan/hdlc_cisco.c
494 +++ b/drivers/net/wan/hdlc_cisco.c
495 @@ -120,6 +120,7 @@ static void cisco_keepalive_send(struct net_device *dev, u32 type,
496 skb_put(skb, sizeof(struct cisco_packet));
497 skb->priority = TC_PRIO_CONTROL;
498 skb->dev = dev;
499 + skb->protocol = htons(ETH_P_HDLC);
500 skb_reset_network_header(skb);
501
502 dev_queue_xmit(skb);
503 diff --git a/drivers/net/wan/hdlc_fr.c b/drivers/net/wan/hdlc_fr.c
504 index b6e0cfb095d35..bba19d068207a 100644
505 --- a/drivers/net/wan/hdlc_fr.c
506 +++ b/drivers/net/wan/hdlc_fr.c
507 @@ -435,6 +435,8 @@ static netdev_tx_t pvc_xmit(struct sk_buff *skb, struct net_device *dev)
508 if (pvc->state.fecn) /* TX Congestion counter */
509 dev->stats.tx_compressed++;
510 skb->dev = pvc->frad;
511 + skb->protocol = htons(ETH_P_HDLC);
512 + skb_reset_network_header(skb);
513 dev_queue_xmit(skb);
514 return NETDEV_TX_OK;
515 }
516 @@ -557,6 +559,7 @@ static void fr_lmi_send(struct net_device *dev, int fullrep)
517 skb_put(skb, i);
518 skb->priority = TC_PRIO_CONTROL;
519 skb->dev = dev;
520 + skb->protocol = htons(ETH_P_HDLC);
521 skb_reset_network_header(skb);
522
523 dev_queue_xmit(skb);
524 diff --git a/drivers/net/wan/hdlc_ppp.c b/drivers/net/wan/hdlc_ppp.c
525 index 63546d1317982..35589ee0cde11 100644
526 --- a/drivers/net/wan/hdlc_ppp.c
527 +++ b/drivers/net/wan/hdlc_ppp.c
528 @@ -254,6 +254,7 @@ static void ppp_tx_cp(struct net_device *dev, u16 pid, u8 code,
529
530 skb->priority = TC_PRIO_CONTROL;
531 skb->dev = dev;
532 + skb->protocol = htons(ETH_P_HDLC);
533 skb_reset_network_header(skb);
534 skb_queue_tail(&tx_queue, skb);
535 }
536 diff --git a/drivers/net/wan/lapbether.c b/drivers/net/wan/lapbether.c
537 index c6db9a4e7c457..ef746ba74ab4c 100644
538 --- a/drivers/net/wan/lapbether.c
539 +++ b/drivers/net/wan/lapbether.c
540 @@ -201,8 +201,6 @@ static void lapbeth_data_transmit(struct net_device *ndev, struct sk_buff *skb)
541 struct net_device *dev;
542 int size = skb->len;
543
544 - skb->protocol = htons(ETH_P_X25);
545 -
546 ptr = skb_push(skb, 2);
547
548 *ptr++ = size % 256;
549 @@ -213,6 +211,8 @@ static void lapbeth_data_transmit(struct net_device *ndev, struct sk_buff *skb)
550
551 skb->dev = dev = lapbeth->ethdev;
552
553 + skb->protocol = htons(ETH_P_DEC);
554 +
555 skb_reset_network_header(skb);
556
557 dev_hard_header(skb, dev, ETH_P_DEC, bcast_addr, NULL, 0);
558 diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
559 index b65ce7519411a..379f9633f78e1 100644
560 --- a/drivers/platform/x86/thinkpad_acpi.c
561 +++ b/drivers/platform/x86/thinkpad_acpi.c
562 @@ -2476,7 +2476,7 @@ static void hotkey_compare_and_issue_event(struct tp_nvram_state *oldn,
563 */
564 static int hotkey_kthread(void *data)
565 {
566 - struct tp_nvram_state s[2];
567 + struct tp_nvram_state s[2] = { 0 };
568 u32 poll_mask, event_mask;
569 unsigned int si, so;
570 unsigned long t;
571 @@ -6640,8 +6640,10 @@ static int __init tpacpi_query_bcl_levels(acpi_handle handle)
572 list_for_each_entry(child, &device->children, node) {
573 acpi_status status = acpi_evaluate_object(child->handle, "_BCL",
574 NULL, &buffer);
575 - if (ACPI_FAILURE(status))
576 + if (ACPI_FAILURE(status)) {
577 + buffer.length = ACPI_ALLOCATE_BUFFER;
578 continue;
579 + }
580
581 obj = (union acpi_object *)buffer.pointer;
582 if (!obj || (obj->type != ACPI_TYPE_PACKAGE)) {
583 diff --git a/drivers/usb/gadget/function/f_ncm.c b/drivers/usb/gadget/function/f_ncm.c
584 index b69747367bd75..0061bf130598e 100644
585 --- a/drivers/usb/gadget/function/f_ncm.c
586 +++ b/drivers/usb/gadget/function/f_ncm.c
587 @@ -1217,7 +1217,6 @@ static int ncm_unwrap_ntb(struct gether *port,
588 const struct ndp_parser_opts *opts = ncm->parser_opts;
589 unsigned crc_len = ncm->is_crc ? sizeof(uint32_t) : 0;
590 int dgram_counter;
591 - bool ndp_after_header;
592
593 /* dwSignature */
594 if (get_unaligned_le32(tmp) != opts->nth_sign) {
595 @@ -1244,7 +1243,6 @@ static int ncm_unwrap_ntb(struct gether *port,
596 }
597
598 ndp_index = get_ncm(&tmp, opts->ndp_index);
599 - ndp_after_header = false;
600
601 /* Run through all the NDP's in the NTB */
602 do {
603 @@ -1260,8 +1258,6 @@ static int ncm_unwrap_ntb(struct gether *port,
604 ndp_index);
605 goto err;
606 }
607 - if (ndp_index == opts->nth_size)
608 - ndp_after_header = true;
609
610 /*
611 * walk through NDP
612 @@ -1340,37 +1336,13 @@ static int ncm_unwrap_ntb(struct gether *port,
613 index2 = get_ncm(&tmp, opts->dgram_item_len);
614 dg_len2 = get_ncm(&tmp, opts->dgram_item_len);
615
616 - if (index2 == 0 || dg_len2 == 0)
617 - break;
618 -
619 /* wDatagramIndex[1] */
620 - if (ndp_after_header) {
621 - if (index2 < opts->nth_size + opts->ndp_size) {
622 - INFO(port->func.config->cdev,
623 - "Bad index: %#X\n", index2);
624 - goto err;
625 - }
626 - } else {
627 - if (index2 < opts->nth_size + opts->dpe_size) {
628 - INFO(port->func.config->cdev,
629 - "Bad index: %#X\n", index2);
630 - goto err;
631 - }
632 - }
633 if (index2 > block_len - opts->dpe_size) {
634 INFO(port->func.config->cdev,
635 "Bad index: %#X\n", index2);
636 goto err;
637 }
638
639 - /* wDatagramLength[1] */
640 - if ((dg_len2 < 14 + crc_len) ||
641 - (dg_len2 > frame_max)) {
642 - INFO(port->func.config->cdev,
643 - "Bad dgram length: %#X\n", dg_len);
644 - goto err;
645 - }
646 -
647 /*
648 * Copy the data into a new skb.
649 * This ensures the truesize is correct
650 @@ -1387,6 +1359,8 @@ static int ncm_unwrap_ntb(struct gether *port,
651 ndp_len -= 2 * (opts->dgram_item_len * 2);
652
653 dgram_counter++;
654 + if (index2 == 0 || dg_len2 == 0)
655 + break;
656 } while (ndp_len > 2 * (opts->dgram_item_len * 2));
657 } while (ndp_index);
658
659 diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
660 index 4b7d0f9a820aa..44df6f6fd0636 100644
661 --- a/drivers/video/console/fbcon.c
662 +++ b/drivers/video/console/fbcon.c
663 @@ -2234,6 +2234,9 @@ static int fbcon_get_font(struct vc_data *vc, struct console_font *font)
664
665 if (font->width <= 8) {
666 j = vc->vc_font.height;
667 + if (font->charcount * j > FNTSIZE(fontdata))
668 + return -EINVAL;
669 +
670 for (i = 0; i < font->charcount; i++) {
671 memcpy(data, fontdata, j);
672 memset(data + j, 0, 32 - j);
673 @@ -2242,6 +2245,9 @@ static int fbcon_get_font(struct vc_data *vc, struct console_font *font)
674 }
675 } else if (font->width <= 16) {
676 j = vc->vc_font.height * 2;
677 + if (font->charcount * j > FNTSIZE(fontdata))
678 + return -EINVAL;
679 +
680 for (i = 0; i < font->charcount; i++) {
681 memcpy(data, fontdata, j);
682 memset(data + j, 0, 64 - j);
683 @@ -2249,6 +2255,9 @@ static int fbcon_get_font(struct vc_data *vc, struct console_font *font)
684 fontdata += j;
685 }
686 } else if (font->width <= 24) {
687 + if (font->charcount * (vc->vc_font.height * sizeof(u32)) > FNTSIZE(fontdata))
688 + return -EINVAL;
689 +
690 for (i = 0; i < font->charcount; i++) {
691 for (j = 0; j < vc->vc_font.height; j++) {
692 *data++ = fontdata[0];
693 @@ -2261,6 +2270,9 @@ static int fbcon_get_font(struct vc_data *vc, struct console_font *font)
694 }
695 } else {
696 j = vc->vc_font.height * 4;
697 + if (font->charcount * j > FNTSIZE(fontdata))
698 + return -EINVAL;
699 +
700 for (i = 0; i < font->charcount; i++) {
701 memcpy(data, fontdata, j);
702 memset(data + j, 0, 128 - j);
703 diff --git a/drivers/video/console/fbcon.h b/drivers/video/console/fbcon.h
704 index 5ebdccd070eb8..701eecab33171 100644
705 --- a/drivers/video/console/fbcon.h
706 +++ b/drivers/video/console/fbcon.h
707 @@ -151,13 +151,6 @@ static inline int attr_col_ec(int shift, struct vc_data *vc,
708 #define attr_bgcol_ec(bgshift, vc, info) attr_col_ec(bgshift, vc, info, 0)
709 #define attr_fgcol_ec(fgshift, vc, info) attr_col_ec(fgshift, vc, info, 1)
710
711 -/* Font */
712 -#define REFCOUNT(fd) (((int *)(fd))[-1])
713 -#define FNTSIZE(fd) (((int *)(fd))[-2])
714 -#define FNTCHARCNT(fd) (((int *)(fd))[-3])
715 -#define FNTSUM(fd) (((int *)(fd))[-4])
716 -#define FONT_EXTRA_WORDS 4
717 -
718 /*
719 * Scroll Method
720 */
721 diff --git a/drivers/video/console/fbcon_rotate.c b/drivers/video/console/fbcon_rotate.c
722 index db6528f2d3f29..0e33210819454 100644
723 --- a/drivers/video/console/fbcon_rotate.c
724 +++ b/drivers/video/console/fbcon_rotate.c
725 @@ -14,6 +14,7 @@
726 #include <linux/fb.h>
727 #include <linux/vt_kern.h>
728 #include <linux/console.h>
729 +#include <linux/font.h>
730 #include <asm/types.h>
731 #include "fbcon.h"
732 #include "fbcon_rotate.h"
733 diff --git a/drivers/video/console/newport_con.c b/drivers/video/console/newport_con.c
734 index 33bddf3f30406..1a3a2f1d9817d 100644
735 --- a/drivers/video/console/newport_con.c
736 +++ b/drivers/video/console/newport_con.c
737 @@ -35,12 +35,6 @@
738
739 #define FONT_DATA ((unsigned char *)font_vga_8x16.data)
740
741 -/* borrowed from fbcon.c */
742 -#define REFCOUNT(fd) (((int *)(fd))[-1])
743 -#define FNTSIZE(fd) (((int *)(fd))[-2])
744 -#define FNTCHARCNT(fd) (((int *)(fd))[-3])
745 -#define FONT_EXTRA_WORDS 3
746 -
747 static unsigned char *font_data[MAX_NR_CONSOLES];
748
749 static struct newport_regs *npregs;
750 @@ -522,6 +516,7 @@ static int newport_set_font(int unit, struct console_font *op)
751 FNTSIZE(new_data) = size;
752 FNTCHARCNT(new_data) = op->charcount;
753 REFCOUNT(new_data) = 0; /* usage counter */
754 + FNTSUM(new_data) = 0;
755
756 p = new_data;
757 for (i = 0; i < op->charcount; i++) {
758 diff --git a/drivers/video/console/tileblit.c b/drivers/video/console/tileblit.c
759 index 3c0b242dba5f0..691717276c3e2 100644
760 --- a/drivers/video/console/tileblit.c
761 +++ b/drivers/video/console/tileblit.c
762 @@ -13,6 +13,7 @@
763 #include <linux/fb.h>
764 #include <linux/vt_kern.h>
765 #include <linux/console.h>
766 +#include <linux/font.h>
767 #include <asm/types.h>
768 #include "fbcon.h"
769
770 diff --git a/fs/eventpoll.c b/fs/eventpoll.c
771 index 8c40d6652a9a9..865afb58266a7 100644
772 --- a/fs/eventpoll.c
773 +++ b/fs/eventpoll.c
774 @@ -222,8 +222,7 @@ struct eventpoll {
775 struct file *file;
776
777 /* used to optimize loop detection check */
778 - int visited;
779 - struct list_head visited_list_link;
780 + u64 gen;
781 };
782
783 /* Wait structure used by the poll hooks */
784 @@ -267,6 +266,8 @@ static long max_user_watches __read_mostly;
785 */
786 static DEFINE_MUTEX(epmutex);
787
788 +static u64 loop_check_gen = 0;
789 +
790 /* Used to check for epoll file descriptor inclusion loops */
791 static struct nested_calls poll_loop_ncalls;
792
793 @@ -282,9 +283,6 @@ static struct kmem_cache *epi_cache __read_mostly;
794 /* Slab cache used to allocate "struct eppoll_entry" */
795 static struct kmem_cache *pwq_cache __read_mostly;
796
797 -/* Visited nodes during ep_loop_check(), so we can unset them when we finish */
798 -static LIST_HEAD(visited_list);
799 -
800 /*
801 * List of files with newly added links, where we may need to limit the number
802 * of emanating paths. Protected by the epmutex.
803 @@ -1262,7 +1260,7 @@ static int reverse_path_check(void)
804
805 static int ep_create_wakeup_source(struct epitem *epi)
806 {
807 - const char *name;
808 + struct name_snapshot n;
809 struct wakeup_source *ws;
810
811 if (!epi->ep->ws) {
812 @@ -1271,8 +1269,9 @@ static int ep_create_wakeup_source(struct epitem *epi)
813 return -ENOMEM;
814 }
815
816 - name = epi->ffd.file->f_path.dentry->d_name.name;
817 - ws = wakeup_source_register(name);
818 + take_dentry_name_snapshot(&n, epi->ffd.file->f_path.dentry);
819 + ws = wakeup_source_register(n.name);
820 + release_dentry_name_snapshot(&n);
821
822 if (!ws)
823 return -ENOMEM;
824 @@ -1332,6 +1331,22 @@ static int ep_insert(struct eventpoll *ep, struct epoll_event *event,
825 RCU_INIT_POINTER(epi->ws, NULL);
826 }
827
828 + /* Add the current item to the list of active epoll hook for this file */
829 + spin_lock(&tfile->f_lock);
830 + list_add_tail_rcu(&epi->fllink, &tfile->f_ep_links);
831 + spin_unlock(&tfile->f_lock);
832 +
833 + /*
834 + * Add the current item to the RB tree. All RB tree operations are
835 + * protected by "mtx", and ep_insert() is called with "mtx" held.
836 + */
837 + ep_rbtree_insert(ep, epi);
838 +
839 + /* now check if we've created too many backpaths */
840 + error = -EINVAL;
841 + if (full_check && reverse_path_check())
842 + goto error_remove_epi;
843 +
844 /* Initialize the poll table using the queue callback */
845 epq.epi = epi;
846 init_poll_funcptr(&epq.pt, ep_ptable_queue_proc);
847 @@ -1354,22 +1369,6 @@ static int ep_insert(struct eventpoll *ep, struct epoll_event *event,
848 if (epi->nwait < 0)
849 goto error_unregister;
850
851 - /* Add the current item to the list of active epoll hook for this file */
852 - spin_lock(&tfile->f_lock);
853 - list_add_tail_rcu(&epi->fllink, &tfile->f_ep_links);
854 - spin_unlock(&tfile->f_lock);
855 -
856 - /*
857 - * Add the current item to the RB tree. All RB tree operations are
858 - * protected by "mtx", and ep_insert() is called with "mtx" held.
859 - */
860 - ep_rbtree_insert(ep, epi);
861 -
862 - /* now check if we've created too many backpaths */
863 - error = -EINVAL;
864 - if (full_check && reverse_path_check())
865 - goto error_remove_epi;
866 -
867 /* We have to drop the new item inside our item list to keep track of it */
868 spin_lock_irqsave(&ep->lock, flags);
869
870 @@ -1395,6 +1394,8 @@ static int ep_insert(struct eventpoll *ep, struct epoll_event *event,
871
872 return 0;
873
874 +error_unregister:
875 + ep_unregister_pollwait(ep, epi);
876 error_remove_epi:
877 spin_lock(&tfile->f_lock);
878 list_del_rcu(&epi->fllink);
879 @@ -1402,9 +1403,6 @@ error_remove_epi:
880
881 rb_erase(&epi->rbn, &ep->rbr);
882
883 -error_unregister:
884 - ep_unregister_pollwait(ep, epi);
885 -
886 /*
887 * We need to do this because an event could have been arrived on some
888 * allocated wait queue. Note that we don't care about the ep->ovflist
889 @@ -1725,13 +1723,12 @@ static int ep_loop_check_proc(void *priv, void *cookie, int call_nests)
890 struct epitem *epi;
891
892 mutex_lock_nested(&ep->mtx, call_nests + 1);
893 - ep->visited = 1;
894 - list_add(&ep->visited_list_link, &visited_list);
895 + ep->gen = loop_check_gen;
896 for (rbp = rb_first(&ep->rbr); rbp; rbp = rb_next(rbp)) {
897 epi = rb_entry(rbp, struct epitem, rbn);
898 if (unlikely(is_file_epoll(epi->ffd.file))) {
899 ep_tovisit = epi->ffd.file->private_data;
900 - if (ep_tovisit->visited)
901 + if (ep_tovisit->gen == loop_check_gen)
902 continue;
903 error = ep_call_nested(&poll_loop_ncalls, EP_MAX_NESTS,
904 ep_loop_check_proc, epi->ffd.file,
905 @@ -1772,18 +1769,8 @@ static int ep_loop_check_proc(void *priv, void *cookie, int call_nests)
906 */
907 static int ep_loop_check(struct eventpoll *ep, struct file *file)
908 {
909 - int ret;
910 - struct eventpoll *ep_cur, *ep_next;
911 -
912 - ret = ep_call_nested(&poll_loop_ncalls, EP_MAX_NESTS,
913 + return ep_call_nested(&poll_loop_ncalls, EP_MAX_NESTS,
914 ep_loop_check_proc, file, ep, current);
915 - /* clear visited list */
916 - list_for_each_entry_safe(ep_cur, ep_next, &visited_list,
917 - visited_list_link) {
918 - ep_cur->visited = 0;
919 - list_del(&ep_cur->visited_list_link);
920 - }
921 - return ret;
922 }
923
924 static void clear_tfile_check_list(void)
925 @@ -1940,6 +1927,7 @@ SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd,
926 mutex_lock_nested(&ep->mtx, 0);
927 if (op == EPOLL_CTL_ADD) {
928 if (!list_empty(&f.file->f_ep_links) ||
929 + ep->gen == loop_check_gen ||
930 is_file_epoll(tf.file)) {
931 full_check = 1;
932 mutex_unlock(&ep->mtx);
933 @@ -2000,6 +1988,7 @@ SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd,
934 error_tgt_fput:
935 if (full_check) {
936 clear_tfile_check_list();
937 + loop_check_gen++;
938 mutex_unlock(&epmutex);
939 }
940
941 diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
942 index 2517fcd423b68..d405b5a14073a 100644
943 --- a/fs/nfs/dir.c
944 +++ b/fs/nfs/dir.c
945 @@ -583,6 +583,9 @@ int nfs_readdir_page_filler(nfs_readdir_descriptor_t *desc, struct nfs_entry *en
946 xdr_set_scratch_buffer(&stream, page_address(scratch), PAGE_SIZE);
947
948 do {
949 + if (entry->label)
950 + entry->label->len = NFS4_MAXLABELLEN;
951 +
952 status = xdr_decode(desc, entry, &stream);
953 if (status != 0) {
954 if (status == -EAGAIN)
955 diff --git a/include/linux/font.h b/include/linux/font.h
956 index d6821769dd1e1..f85e70bd4793e 100644
957 --- a/include/linux/font.h
958 +++ b/include/linux/font.h
959 @@ -57,4 +57,17 @@ extern const struct font_desc *get_default_font(int xres, int yres,
960 /* Max. length for the name of a predefined font */
961 #define MAX_FONT_NAME 32
962
963 +/* Extra word getters */
964 +#define REFCOUNT(fd) (((int *)(fd))[-1])
965 +#define FNTSIZE(fd) (((int *)(fd))[-2])
966 +#define FNTCHARCNT(fd) (((int *)(fd))[-3])
967 +#define FNTSUM(fd) (((int *)(fd))[-4])
968 +
969 +#define FONT_EXTRA_WORDS 4
970 +
971 +struct font_data {
972 + unsigned int extra[FONT_EXTRA_WORDS];
973 + const unsigned char data[];
974 +} __packed;
975 +
976 #endif /* _VIDEO_FONT_H */
977 diff --git a/include/linux/khugepaged.h b/include/linux/khugepaged.h
978 index 1e032a1ddb3ea..60af12869ac7f 100644
979 --- a/include/linux/khugepaged.h
980 +++ b/include/linux/khugepaged.h
981 @@ -13,6 +13,7 @@ extern int __khugepaged_enter(struct mm_struct *mm);
982 extern void __khugepaged_exit(struct mm_struct *mm);
983 extern int khugepaged_enter_vma_merge(struct vm_area_struct *vma,
984 unsigned long vm_flags);
985 +extern void khugepaged_min_free_kbytes_update(void);
986
987 #define khugepaged_enabled() \
988 (transparent_hugepage_flags & \
989 @@ -70,6 +71,10 @@ static inline int khugepaged_enter_vma_merge(struct vm_area_struct *vma,
990 {
991 return 0;
992 }
993 +
994 +static inline void khugepaged_min_free_kbytes_update(void)
995 +{
996 +}
997 #endif /* CONFIG_TRANSPARENT_HUGEPAGE */
998
999 #endif /* _LINUX_KHUGEPAGED_H */
1000 diff --git a/include/net/xfrm.h b/include/net/xfrm.h
1001 index 9e2f260cbb518..b2a405c93a342 100644
1002 --- a/include/net/xfrm.h
1003 +++ b/include/net/xfrm.h
1004 @@ -1726,21 +1726,17 @@ static inline int xfrm_replay_state_esn_len(struct xfrm_replay_state_esn *replay
1005 static inline int xfrm_replay_clone(struct xfrm_state *x,
1006 struct xfrm_state *orig)
1007 {
1008 - x->replay_esn = kzalloc(xfrm_replay_state_esn_len(orig->replay_esn),
1009 +
1010 + x->replay_esn = kmemdup(orig->replay_esn,
1011 + xfrm_replay_state_esn_len(orig->replay_esn),
1012 GFP_KERNEL);
1013 if (!x->replay_esn)
1014 return -ENOMEM;
1015 -
1016 - x->replay_esn->bmp_len = orig->replay_esn->bmp_len;
1017 - x->replay_esn->replay_window = orig->replay_esn->replay_window;
1018 -
1019 - x->preplay_esn = kmemdup(x->replay_esn,
1020 - xfrm_replay_state_esn_len(x->replay_esn),
1021 + x->preplay_esn = kmemdup(orig->preplay_esn,
1022 + xfrm_replay_state_esn_len(orig->preplay_esn),
1023 GFP_KERNEL);
1024 - if (!x->preplay_esn) {
1025 - kfree(x->replay_esn);
1026 + if (!x->preplay_esn)
1027 return -ENOMEM;
1028 - }
1029
1030 return 0;
1031 }
1032 diff --git a/kernel/events/core.c b/kernel/events/core.c
1033 index b562467d2d498..7aad4d22b4223 100644
1034 --- a/kernel/events/core.c
1035 +++ b/kernel/events/core.c
1036 @@ -94,7 +94,7 @@ static void remote_function(void *data)
1037 * retry due to any failures in smp_call_function_single(), such as if the
1038 * task_cpu() goes offline concurrently.
1039 *
1040 - * returns @func return value or -ESRCH when the process isn't running
1041 + * returns @func return value or -ESRCH or -ENXIO when the process isn't running
1042 */
1043 static int
1044 task_function_call(struct task_struct *p, remote_function_f func, void *info)
1045 @@ -110,7 +110,8 @@ task_function_call(struct task_struct *p, remote_function_f func, void *info)
1046 for (;;) {
1047 ret = smp_call_function_single(task_cpu(p), remote_function,
1048 &data, 1);
1049 - ret = !ret ? data.ret : -EAGAIN;
1050 + if (!ret)
1051 + ret = data.ret;
1052
1053 if (ret != -EAGAIN)
1054 break;
1055 diff --git a/kernel/kmod.c b/kernel/kmod.c
1056 index e4e5e98002fe3..3f3bbae4cec33 100644
1057 --- a/kernel/kmod.c
1058 +++ b/kernel/kmod.c
1059 @@ -28,6 +28,7 @@
1060 #include <linux/cred.h>
1061 #include <linux/file.h>
1062 #include <linux/fdtable.h>
1063 +#include <linux/fs_struct.h>
1064 #include <linux/workqueue.h>
1065 #include <linux/security.h>
1066 #include <linux/mount.h>
1067 @@ -222,6 +223,14 @@ static int call_usermodehelper_exec_async(void *data)
1068 flush_signal_handlers(current, 1);
1069 spin_unlock_irq(&current->sighand->siglock);
1070
1071 + /*
1072 + * Initial kernel threads share ther FS with init, in order to
1073 + * get the init root directory. But we've now created a new
1074 + * thread that is going to execve a user process and has its own
1075 + * 'struct fs_struct'. Reset umask to the default.
1076 + */
1077 + current->fs->umask = 0022;
1078 +
1079 /*
1080 * Our parent (unbound workqueue) runs with elevated scheduling
1081 * priority. Avoid propagating that into the userspace child.
1082 diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
1083 index 4d1be82e7011a..51e47e18764e3 100644
1084 --- a/kernel/trace/ftrace.c
1085 +++ b/kernel/trace/ftrace.c
1086 @@ -5334,17 +5334,15 @@ static void ftrace_ops_assist_func(unsigned long ip, unsigned long parent_ip,
1087 {
1088 int bit;
1089
1090 - if ((op->flags & FTRACE_OPS_FL_RCU) && !rcu_is_watching())
1091 - return;
1092 -
1093 bit = trace_test_and_set_recursion(TRACE_LIST_START, TRACE_LIST_MAX);
1094 if (bit < 0)
1095 return;
1096
1097 preempt_disable_notrace();
1098
1099 - if (!(op->flags & FTRACE_OPS_FL_PER_CPU) ||
1100 - !ftrace_function_local_disabled(op)) {
1101 + if ((!(op->flags & FTRACE_OPS_FL_RCU) || rcu_is_watching()) &&
1102 + (!(op->flags & FTRACE_OPS_FL_PER_CPU) ||
1103 + !ftrace_function_local_disabled(op))) {
1104 op->func(ip, parent_ip, op, regs);
1105 }
1106
1107 diff --git a/lib/fonts/font_10x18.c b/lib/fonts/font_10x18.c
1108 index 6be72bb218ee4..87e904f550c15 100644
1109 --- a/lib/fonts/font_10x18.c
1110 +++ b/lib/fonts/font_10x18.c
1111 @@ -7,8 +7,8 @@
1112
1113 #define FONTDATAMAX 9216
1114
1115 -static const unsigned char fontdata_10x18[FONTDATAMAX] = {
1116 -
1117 +static struct font_data fontdata_10x18 = {
1118 + { 0, 0, FONTDATAMAX, 0 }, {
1119 /* 0 0x00 '^@' */
1120 0x00, 0x00, /* 0000000000 */
1121 0x00, 0x00, /* 0000000000 */
1122 @@ -5128,8 +5128,7 @@ static const unsigned char fontdata_10x18[FONTDATAMAX] = {
1123 0x00, 0x00, /* 0000000000 */
1124 0x00, 0x00, /* 0000000000 */
1125 0x00, 0x00, /* 0000000000 */
1126 -
1127 -};
1128 +} };
1129
1130
1131 const struct font_desc font_10x18 = {
1132 @@ -5137,7 +5136,7 @@ const struct font_desc font_10x18 = {
1133 .name = "10x18",
1134 .width = 10,
1135 .height = 18,
1136 - .data = fontdata_10x18,
1137 + .data = fontdata_10x18.data,
1138 #ifdef __sparc__
1139 .pref = 5,
1140 #else
1141 diff --git a/lib/fonts/font_6x10.c b/lib/fonts/font_6x10.c
1142 index b20620904d314..896ffa987c97b 100644
1143 --- a/lib/fonts/font_6x10.c
1144 +++ b/lib/fonts/font_6x10.c
1145 @@ -1,7 +1,9 @@
1146 #include <linux/font.h>
1147
1148 -static const unsigned char fontdata_6x10[] = {
1149 +#define FONTDATAMAX 2560
1150
1151 +static struct font_data fontdata_6x10 = {
1152 + { 0, 0, FONTDATAMAX, 0 }, {
1153 /* 0 0x00 '^@' */
1154 0x00, /* 00000000 */
1155 0x00, /* 00000000 */
1156 @@ -3073,14 +3075,13 @@ static const unsigned char fontdata_6x10[] = {
1157 0x00, /* 00000000 */
1158 0x00, /* 00000000 */
1159 0x00, /* 00000000 */
1160 -
1161 -};
1162 +} };
1163
1164 const struct font_desc font_6x10 = {
1165 .idx = FONT6x10_IDX,
1166 .name = "6x10",
1167 .width = 6,
1168 .height = 10,
1169 - .data = fontdata_6x10,
1170 + .data = fontdata_6x10.data,
1171 .pref = 0,
1172 };
1173 diff --git a/lib/fonts/font_6x11.c b/lib/fonts/font_6x11.c
1174 index 46e86e67aa6aa..eb46a59307d2e 100644
1175 --- a/lib/fonts/font_6x11.c
1176 +++ b/lib/fonts/font_6x11.c
1177 @@ -8,8 +8,8 @@
1178
1179 #define FONTDATAMAX (11*256)
1180
1181 -static const unsigned char fontdata_6x11[FONTDATAMAX] = {
1182 -
1183 +static struct font_data fontdata_6x11 = {
1184 + { 0, 0, FONTDATAMAX, 0 }, {
1185 /* 0 0x00 '^@' */
1186 0x00, /* 00000000 */
1187 0x00, /* 00000000 */
1188 @@ -3337,8 +3337,7 @@ static const unsigned char fontdata_6x11[FONTDATAMAX] = {
1189 0x00, /* 00000000 */
1190 0x00, /* 00000000 */
1191 0x00, /* 00000000 */
1192 -
1193 -};
1194 +} };
1195
1196
1197 const struct font_desc font_vga_6x11 = {
1198 @@ -3346,7 +3345,7 @@ const struct font_desc font_vga_6x11 = {
1199 .name = "ProFont6x11",
1200 .width = 6,
1201 .height = 11,
1202 - .data = fontdata_6x11,
1203 + .data = fontdata_6x11.data,
1204 /* Try avoiding this font if possible unless on MAC */
1205 .pref = -2000,
1206 };
1207 diff --git a/lib/fonts/font_7x14.c b/lib/fonts/font_7x14.c
1208 index 3b7dbf9c060b3..c88b3bba001bd 100644
1209 --- a/lib/fonts/font_7x14.c
1210 +++ b/lib/fonts/font_7x14.c
1211 @@ -7,8 +7,8 @@
1212
1213 #define FONTDATAMAX 3584
1214
1215 -static const unsigned char fontdata_7x14[FONTDATAMAX] = {
1216 -
1217 +static struct font_data fontdata_7x14 = {
1218 + { 0, 0, FONTDATAMAX, 0 }, {
1219 /* 0 0x00 '^@' */
1220 0x00, /* 0000000 */
1221 0x00, /* 0000000 */
1222 @@ -4104,8 +4104,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {
1223 0x00, /* 0000000 */
1224 0x00, /* 0000000 */
1225 0x00, /* 0000000 */
1226 -
1227 -};
1228 +} };
1229
1230
1231 const struct font_desc font_7x14 = {
1232 @@ -4113,6 +4112,6 @@ const struct font_desc font_7x14 = {
1233 .name = "7x14",
1234 .width = 7,
1235 .height = 14,
1236 - .data = fontdata_7x14,
1237 + .data = fontdata_7x14.data,
1238 .pref = 0,
1239 };
1240 diff --git a/lib/fonts/font_8x16.c b/lib/fonts/font_8x16.c
1241 index 00a0c67a5c7d0..ba53e2643670b 100644
1242 --- a/lib/fonts/font_8x16.c
1243 +++ b/lib/fonts/font_8x16.c
1244 @@ -9,8 +9,8 @@
1245
1246 #define FONTDATAMAX 4096
1247
1248 -static const unsigned char fontdata_8x16[FONTDATAMAX] = {
1249 -
1250 +static struct font_data fontdata_8x16 = {
1251 + { 0, 0, FONTDATAMAX, 0 }, {
1252 /* 0 0x00 '^@' */
1253 0x00, /* 00000000 */
1254 0x00, /* 00000000 */
1255 @@ -4618,8 +4618,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {
1256 0x00, /* 00000000 */
1257 0x00, /* 00000000 */
1258 0x00, /* 00000000 */
1259 -
1260 -};
1261 +} };
1262
1263
1264 const struct font_desc font_vga_8x16 = {
1265 @@ -4627,7 +4626,7 @@ const struct font_desc font_vga_8x16 = {
1266 .name = "VGA8x16",
1267 .width = 8,
1268 .height = 16,
1269 - .data = fontdata_8x16,
1270 + .data = fontdata_8x16.data,
1271 .pref = 0,
1272 };
1273 EXPORT_SYMBOL(font_vga_8x16);
1274 diff --git a/lib/fonts/font_8x8.c b/lib/fonts/font_8x8.c
1275 index 9f56efe2cee72..4d28b81e8237c 100644
1276 --- a/lib/fonts/font_8x8.c
1277 +++ b/lib/fonts/font_8x8.c
1278 @@ -8,8 +8,8 @@
1279
1280 #define FONTDATAMAX 2048
1281
1282 -static const unsigned char fontdata_8x8[FONTDATAMAX] = {
1283 -
1284 +static struct font_data fontdata_8x8 = {
1285 + { 0, 0, FONTDATAMAX, 0 }, {
1286 /* 0 0x00 '^@' */
1287 0x00, /* 00000000 */
1288 0x00, /* 00000000 */
1289 @@ -2569,8 +2569,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {
1290 0x00, /* 00000000 */
1291 0x00, /* 00000000 */
1292 0x00, /* 00000000 */
1293 -
1294 -};
1295 +} };
1296
1297
1298 const struct font_desc font_vga_8x8 = {
1299 @@ -2578,6 +2577,6 @@ const struct font_desc font_vga_8x8 = {
1300 .name = "VGA8x8",
1301 .width = 8,
1302 .height = 8,
1303 - .data = fontdata_8x8,
1304 + .data = fontdata_8x8.data,
1305 .pref = 0,
1306 };
1307 diff --git a/lib/fonts/font_acorn_8x8.c b/lib/fonts/font_acorn_8x8.c
1308 index 639e31ae1100a..957398b762d38 100644
1309 --- a/lib/fonts/font_acorn_8x8.c
1310 +++ b/lib/fonts/font_acorn_8x8.c
1311 @@ -2,7 +2,10 @@
1312
1313 #include <linux/font.h>
1314
1315 -static const unsigned char acorndata_8x8[] = {
1316 +#define FONTDATAMAX 2048
1317 +
1318 +static struct font_data acorndata_8x8 = {
1319 +{ 0, 0, FONTDATAMAX, 0 }, {
1320 /* 00 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ^@ */
1321 /* 01 */ 0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e, /* ^A */
1322 /* 02 */ 0x7e, 0xff, 0xbd, 0xff, 0xc3, 0xe7, 0xff, 0x7e, /* ^B */
1323 @@ -259,14 +262,14 @@ static const unsigned char acorndata_8x8[] = {
1324 /* FD */ 0x38, 0x04, 0x18, 0x20, 0x3c, 0x00, 0x00, 0x00,
1325 /* FE */ 0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00,
1326 /* FF */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
1327 -};
1328 +} };
1329
1330 const struct font_desc font_acorn_8x8 = {
1331 .idx = ACORN8x8_IDX,
1332 .name = "Acorn8x8",
1333 .width = 8,
1334 .height = 8,
1335 - .data = acorndata_8x8,
1336 + .data = acorndata_8x8.data,
1337 #ifdef CONFIG_ARCH_ACORN
1338 .pref = 20,
1339 #else
1340 diff --git a/lib/fonts/font_mini_4x6.c b/lib/fonts/font_mini_4x6.c
1341 index 838caa1cfef70..1449876c6a270 100644
1342 --- a/lib/fonts/font_mini_4x6.c
1343 +++ b/lib/fonts/font_mini_4x6.c
1344 @@ -43,8 +43,8 @@ __END__;
1345
1346 #define FONTDATAMAX 1536
1347
1348 -static const unsigned char fontdata_mini_4x6[FONTDATAMAX] = {
1349 -
1350 +static struct font_data fontdata_mini_4x6 = {
1351 + { 0, 0, FONTDATAMAX, 0 }, {
1352 /*{*/
1353 /* Char 0: ' ' */
1354 0xee, /*= [*** ] */
1355 @@ -2145,14 +2145,14 @@ static const unsigned char fontdata_mini_4x6[FONTDATAMAX] = {
1356 0xee, /*= [*** ] */
1357 0x00, /*= [ ] */
1358 /*}*/
1359 -};
1360 +} };
1361
1362 const struct font_desc font_mini_4x6 = {
1363 .idx = MINI4x6_IDX,
1364 .name = "MINI4x6",
1365 .width = 4,
1366 .height = 6,
1367 - .data = fontdata_mini_4x6,
1368 + .data = fontdata_mini_4x6.data,
1369 .pref = 3,
1370 };
1371
1372 diff --git a/lib/fonts/font_pearl_8x8.c b/lib/fonts/font_pearl_8x8.c
1373 index dc6ad539ca4e4..4649314333bb0 100644
1374 --- a/lib/fonts/font_pearl_8x8.c
1375 +++ b/lib/fonts/font_pearl_8x8.c
1376 @@ -13,8 +13,8 @@
1377
1378 #define FONTDATAMAX 2048
1379
1380 -static const unsigned char fontdata_pearl8x8[FONTDATAMAX] = {
1381 -
1382 +static struct font_data fontdata_pearl8x8 = {
1383 + { 0, 0, FONTDATAMAX, 0 }, {
1384 /* 0 0x00 '^@' */
1385 0x00, /* 00000000 */
1386 0x00, /* 00000000 */
1387 @@ -2574,14 +2574,13 @@ static const unsigned char fontdata_pearl8x8[FONTDATAMAX] = {
1388 0x00, /* 00000000 */
1389 0x00, /* 00000000 */
1390 0x00, /* 00000000 */
1391 -
1392 -};
1393 +} };
1394
1395 const struct font_desc font_pearl_8x8 = {
1396 .idx = PEARL8x8_IDX,
1397 .name = "PEARL8x8",
1398 .width = 8,
1399 .height = 8,
1400 - .data = fontdata_pearl8x8,
1401 + .data = fontdata_pearl8x8.data,
1402 .pref = 2,
1403 };
1404 diff --git a/lib/fonts/font_sun12x22.c b/lib/fonts/font_sun12x22.c
1405 index d3643853c33af..c6967cdf4207b 100644
1406 --- a/lib/fonts/font_sun12x22.c
1407 +++ b/lib/fonts/font_sun12x22.c
1408 @@ -2,8 +2,8 @@
1409
1410 #define FONTDATAMAX 11264
1411
1412 -static const unsigned char fontdata_sun12x22[FONTDATAMAX] = {
1413 -
1414 +static struct font_data fontdata_sun12x22 = {
1415 + { 0, 0, FONTDATAMAX, 0 }, {
1416 /* 0 0x00 '^@' */
1417 0x00, 0x00, /* 000000000000 */
1418 0x00, 0x00, /* 000000000000 */
1419 @@ -6147,8 +6147,7 @@ static const unsigned char fontdata_sun12x22[FONTDATAMAX] = {
1420 0x00, 0x00, /* 000000000000 */
1421 0x00, 0x00, /* 000000000000 */
1422 0x00, 0x00, /* 000000000000 */
1423 -
1424 -};
1425 +} };
1426
1427
1428 const struct font_desc font_sun_12x22 = {
1429 @@ -6156,7 +6155,7 @@ const struct font_desc font_sun_12x22 = {
1430 .name = "SUN12x22",
1431 .width = 12,
1432 .height = 22,
1433 - .data = fontdata_sun12x22,
1434 + .data = fontdata_sun12x22.data,
1435 #ifdef __sparc__
1436 .pref = 5,
1437 #else
1438 diff --git a/lib/fonts/font_sun8x16.c b/lib/fonts/font_sun8x16.c
1439 index 268151325b83e..7d979e5788999 100644
1440 --- a/lib/fonts/font_sun8x16.c
1441 +++ b/lib/fonts/font_sun8x16.c
1442 @@ -2,7 +2,8 @@
1443
1444 #define FONTDATAMAX 4096
1445
1446 -static const unsigned char fontdata_sun8x16[FONTDATAMAX] = {
1447 +static struct font_data fontdata_sun8x16 = {
1448 +{ 0, 0, FONTDATAMAX, 0 }, {
1449 /* */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1450 /* */ 0x00,0x00,0x7e,0x81,0xa5,0x81,0x81,0xbd,0x99,0x81,0x81,0x7e,0x00,0x00,0x00,0x00,
1451 /* */ 0x00,0x00,0x7e,0xff,0xdb,0xff,0xff,0xc3,0xe7,0xff,0xff,0x7e,0x00,0x00,0x00,0x00,
1452 @@ -259,14 +260,14 @@ static const unsigned char fontdata_sun8x16[FONTDATAMAX] = {
1453 /* */ 0x00,0x70,0xd8,0x30,0x60,0xc8,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1454 /* */ 0x00,0x00,0x00,0x00,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x00,0x00,0x00,0x00,0x00,
1455 /* */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1456 -};
1457 +} };
1458
1459 const struct font_desc font_sun_8x16 = {
1460 .idx = SUN8x16_IDX,
1461 .name = "SUN8x16",
1462 .width = 8,
1463 .height = 16,
1464 - .data = fontdata_sun8x16,
1465 + .data = fontdata_sun8x16.data,
1466 #ifdef __sparc__
1467 .pref = 10,
1468 #else
1469 diff --git a/lib/random32.c b/lib/random32.c
1470 index 889dab44bd747..d5c3137d93f49 100644
1471 --- a/lib/random32.c
1472 +++ b/lib/random32.c
1473 @@ -47,7 +47,7 @@ static inline void prandom_state_selftest(void)
1474 }
1475 #endif
1476
1477 -DEFINE_PER_CPU(struct rnd_state, net_rand_state);
1478 +DEFINE_PER_CPU(struct rnd_state, net_rand_state) __latent_entropy;
1479
1480 /**
1481 * prandom_u32_state - seeded pseudo-random number generator.
1482 diff --git a/mm/khugepaged.c b/mm/khugepaged.c
1483 index 1538e5e5c628a..753b0e2fef368 100644
1484 --- a/mm/khugepaged.c
1485 +++ b/mm/khugepaged.c
1486 @@ -50,6 +50,9 @@ enum scan_result {
1487 #define CREATE_TRACE_POINTS
1488 #include <trace/events/huge_memory.h>
1489
1490 +static struct task_struct *khugepaged_thread __read_mostly;
1491 +static DEFINE_MUTEX(khugepaged_mutex);
1492 +
1493 /* default scan 8*512 pte (or vmas) every 30 second */
1494 static unsigned int khugepaged_pages_to_scan __read_mostly;
1495 static unsigned int khugepaged_pages_collapsed;
1496 @@ -802,6 +805,18 @@ static struct page *khugepaged_alloc_hugepage(bool *wait)
1497
1498 static bool khugepaged_prealloc_page(struct page **hpage, bool *wait)
1499 {
1500 + /*
1501 + * If the hpage allocated earlier was briefly exposed in page cache
1502 + * before collapse_file() failed, it is possible that racing lookups
1503 + * have not yet completed, and would then be unpleasantly surprised by
1504 + * finding the hpage reused for the same mapping at a different offset.
1505 + * Just release the previous allocation if there is any danger of that.
1506 + */
1507 + if (*hpage && page_count(*hpage) > 1) {
1508 + put_page(*hpage);
1509 + *hpage = NULL;
1510 + }
1511 +
1512 if (!*hpage)
1513 *hpage = khugepaged_alloc_hugepage(wait);
1514
1515 @@ -1936,8 +1951,6 @@ static void set_recommended_min_free_kbytes(void)
1516
1517 int start_stop_khugepaged(void)
1518 {
1519 - static struct task_struct *khugepaged_thread __read_mostly;
1520 - static DEFINE_MUTEX(khugepaged_mutex);
1521 int err = 0;
1522
1523 mutex_lock(&khugepaged_mutex);
1524 @@ -1964,3 +1977,11 @@ fail:
1525 mutex_unlock(&khugepaged_mutex);
1526 return err;
1527 }
1528 +
1529 +void khugepaged_min_free_kbytes_update(void)
1530 +{
1531 + mutex_lock(&khugepaged_mutex);
1532 + if (khugepaged_enabled() && khugepaged_thread)
1533 + set_recommended_min_free_kbytes();
1534 + mutex_unlock(&khugepaged_mutex);
1535 +}
1536 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
1537 index 458523bc73916..b0c451e3b59f3 100644
1538 --- a/mm/page_alloc.c
1539 +++ b/mm/page_alloc.c
1540 @@ -64,6 +64,7 @@
1541 #include <linux/page_owner.h>
1542 #include <linux/kthread.h>
1543 #include <linux/memcontrol.h>
1544 +#include <linux/khugepaged.h>
1545
1546 #include <asm/sections.h>
1547 #include <asm/tlbflush.h>
1548 @@ -6785,6 +6786,8 @@ int __meminit init_per_zone_wmark_min(void)
1549 setup_min_slab_ratio();
1550 #endif
1551
1552 + khugepaged_min_free_kbytes_update();
1553 +
1554 return 0;
1555 }
1556 postcore_initcall(init_per_zone_wmark_min)
1557 diff --git a/net/mac80211/vht.c b/net/mac80211/vht.c
1558 index 43e45bb660bcd..b1d3fa708e16b 100644
1559 --- a/net/mac80211/vht.c
1560 +++ b/net/mac80211/vht.c
1561 @@ -170,10 +170,7 @@ ieee80211_vht_cap_ie_to_sta_vht_cap(struct ieee80211_sub_if_data *sdata,
1562 /* take some capabilities as-is */
1563 cap_info = le32_to_cpu(vht_cap_ie->vht_cap_info);
1564 vht_cap->cap = cap_info;
1565 - vht_cap->cap &= IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_3895 |
1566 - IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_7991 |
1567 - IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454 |
1568 - IEEE80211_VHT_CAP_RXLDPC |
1569 + vht_cap->cap &= IEEE80211_VHT_CAP_RXLDPC |
1570 IEEE80211_VHT_CAP_VHT_TXOP_PS |
1571 IEEE80211_VHT_CAP_HTC_VHT |
1572 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK |
1573 @@ -182,6 +179,9 @@ ieee80211_vht_cap_ie_to_sta_vht_cap(struct ieee80211_sub_if_data *sdata,
1574 IEEE80211_VHT_CAP_RX_ANTENNA_PATTERN |
1575 IEEE80211_VHT_CAP_TX_ANTENNA_PATTERN;
1576
1577 + vht_cap->cap |= min_t(u32, cap_info & IEEE80211_VHT_CAP_MAX_MPDU_MASK,
1578 + own_cap.cap & IEEE80211_VHT_CAP_MAX_MPDU_MASK);
1579 +
1580 /* and some based on our own capabilities */
1581 switch (own_cap.cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK) {
1582 case IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ:
1583 diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c
1584 index 5e28702c801fd..a25be03f60f59 100644
1585 --- a/net/netfilter/nf_conntrack_netlink.c
1586 +++ b/net/netfilter/nf_conntrack_netlink.c
1587 @@ -1031,6 +1031,8 @@ ctnetlink_parse_tuple(const struct nlattr * const cda[],
1588 if (!tb[CTA_TUPLE_IP])
1589 return -EINVAL;
1590
1591 + if (l3num != NFPROTO_IPV4 && l3num != NFPROTO_IPV6)
1592 + return -EOPNOTSUPP;
1593 tuple->src.l3num = l3num;
1594
1595 err = ctnetlink_parse_tuple_ip(tb[CTA_TUPLE_IP], tuple);
1596 diff --git a/net/openvswitch/conntrack.c b/net/openvswitch/conntrack.c
1597 index beb2897d8ddf5..cff76ffcaac28 100644
1598 --- a/net/openvswitch/conntrack.c
1599 +++ b/net/openvswitch/conntrack.c
1600 @@ -709,15 +709,19 @@ static int ovs_ct_nat(struct net *net, struct sw_flow_key *key,
1601 }
1602 err = ovs_ct_nat_execute(skb, ct, ctinfo, &info->range, maniptype);
1603
1604 - if (err == NF_ACCEPT &&
1605 - ct->status & IPS_SRC_NAT && ct->status & IPS_DST_NAT) {
1606 - if (maniptype == NF_NAT_MANIP_SRC)
1607 - maniptype = NF_NAT_MANIP_DST;
1608 - else
1609 - maniptype = NF_NAT_MANIP_SRC;
1610 -
1611 - err = ovs_ct_nat_execute(skb, ct, ctinfo, &info->range,
1612 - maniptype);
1613 + if (err == NF_ACCEPT && ct->status & IPS_DST_NAT) {
1614 + if (ct->status & IPS_SRC_NAT) {
1615 + if (maniptype == NF_NAT_MANIP_SRC)
1616 + maniptype = NF_NAT_MANIP_DST;
1617 + else
1618 + maniptype = NF_NAT_MANIP_SRC;
1619 +
1620 + err = ovs_ct_nat_execute(skb, ct, ctinfo, &info->range,
1621 + maniptype);
1622 + } else if (CTINFO2DIR(ctinfo) == IP_CT_DIR_ORIGINAL) {
1623 + err = ovs_ct_nat_execute(skb, ct, ctinfo, NULL,
1624 + NF_NAT_MANIP_SRC);
1625 + }
1626 }
1627
1628 /* Mark NAT done if successful and update the flow key. */
1629 diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
1630 index fb643945e4244..b5b79f5015415 100644
1631 --- a/net/packet/af_packet.c
1632 +++ b/net/packet/af_packet.c
1633 @@ -2161,7 +2161,8 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
1634 int skb_len = skb->len;
1635 unsigned int snaplen, res;
1636 unsigned long status = TP_STATUS_USER;
1637 - unsigned short macoff, netoff, hdrlen;
1638 + unsigned short macoff, hdrlen;
1639 + unsigned int netoff;
1640 struct sk_buff *copy_skb = NULL;
1641 struct timespec ts;
1642 __u32 ts_status;
1643 @@ -2223,6 +2224,12 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
1644 }
1645 macoff = netoff - maclen;
1646 }
1647 + if (netoff > USHRT_MAX) {
1648 + spin_lock(&sk->sk_receive_queue.lock);
1649 + po->stats.stats1.tp_drops++;
1650 + spin_unlock(&sk->sk_receive_queue.lock);
1651 + goto drop_n_restore;
1652 + }
1653 if (po->tp_version <= TPACKET_V2) {
1654 if (macoff + snaplen > po->rx_ring.frame_size) {
1655 if (po->copy_thresh &&
1656 diff --git a/net/rxrpc/conn_event.c b/net/rxrpc/conn_event.c
1657 index b099b64366f35..ec02dd7c12ef4 100644
1658 --- a/net/rxrpc/conn_event.c
1659 +++ b/net/rxrpc/conn_event.c
1660 @@ -309,18 +309,18 @@ static int rxrpc_process_event(struct rxrpc_connection *conn,
1661 return ret;
1662
1663 spin_lock(&conn->channel_lock);
1664 - spin_lock(&conn->state_lock);
1665 + spin_lock_bh(&conn->state_lock);
1666
1667 if (conn->state == RXRPC_CONN_SERVICE_CHALLENGING) {
1668 conn->state = RXRPC_CONN_SERVICE;
1669 - spin_unlock(&conn->state_lock);
1670 + spin_unlock_bh(&conn->state_lock);
1671 for (loop = 0; loop < RXRPC_MAXCALLS; loop++)
1672 rxrpc_call_is_secure(
1673 rcu_dereference_protected(
1674 conn->channels[loop].call,
1675 lockdep_is_held(&conn->channel_lock)));
1676 } else {
1677 - spin_unlock(&conn->state_lock);
1678 + spin_unlock_bh(&conn->state_lock);
1679 }
1680
1681 spin_unlock(&conn->channel_lock);
1682 diff --git a/net/rxrpc/key.c b/net/rxrpc/key.c
1683 index 7fc340726d034..fa475b02bdceb 100644
1684 --- a/net/rxrpc/key.c
1685 +++ b/net/rxrpc/key.c
1686 @@ -899,7 +899,7 @@ int rxrpc_request_key(struct rxrpc_sock *rx, char __user *optval, int optlen)
1687
1688 _enter("");
1689
1690 - if (optlen <= 0 || optlen > PAGE_SIZE - 1)
1691 + if (optlen <= 0 || optlen > PAGE_SIZE - 1 || rx->securities)
1692 return -EINVAL;
1693
1694 description = memdup_user_nul(optval, optlen);
1695 @@ -1104,7 +1104,8 @@ static long rxrpc_read(const struct key *key,
1696 break;
1697
1698 default: /* we have a ticket we can't encode */
1699 - BUG();
1700 + pr_err("Unsupported key token type (%u)\n",
1701 + token->security_index);
1702 continue;
1703 }
1704
1705 @@ -1139,6 +1140,14 @@ static long rxrpc_read(const struct key *key,
1706 goto fault; \
1707 xdr += (_l + 3) >> 2; \
1708 } while(0)
1709 +#define ENCODE_BYTES(l, s) \
1710 + do { \
1711 + u32 _l = (l); \
1712 + memcpy(xdr, (s), _l); \
1713 + if (_l & 3) \
1714 + memcpy((u8 *)xdr + _l, &zero, 4 - (_l & 3)); \
1715 + xdr += (_l + 3) >> 2; \
1716 + } while(0)
1717 #define ENCODE64(x) \
1718 do { \
1719 __be64 y = cpu_to_be64(x); \
1720 @@ -1167,7 +1176,7 @@ static long rxrpc_read(const struct key *key,
1721 case RXRPC_SECURITY_RXKAD:
1722 ENCODE(token->kad->vice_id);
1723 ENCODE(token->kad->kvno);
1724 - ENCODE_DATA(8, token->kad->session_key);
1725 + ENCODE_BYTES(8, token->kad->session_key);
1726 ENCODE(token->kad->start);
1727 ENCODE(token->kad->expiry);
1728 ENCODE(token->kad->primary_flag);
1729 @@ -1217,7 +1226,6 @@ static long rxrpc_read(const struct key *key,
1730 break;
1731
1732 default:
1733 - BUG();
1734 break;
1735 }
1736
1737 diff --git a/net/sctp/auth.c b/net/sctp/auth.c
1738 index f99d4855d3de3..6ab11ee3d3a56 100644
1739 --- a/net/sctp/auth.c
1740 +++ b/net/sctp/auth.c
1741 @@ -494,6 +494,7 @@ int sctp_auth_init_hmacs(struct sctp_endpoint *ep, gfp_t gfp)
1742 out_err:
1743 /* Clean up any successful allocations */
1744 sctp_auth_destroy_hmacs(ep->auth_hmacs);
1745 + ep->auth_hmacs = NULL;
1746 return -ENOMEM;
1747 }
1748
1749 diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transport.c
1750 index 0bd5a60f3bdeb..67aba63b5c96d 100644
1751 --- a/net/vmw_vsock/virtio_transport.c
1752 +++ b/net/vmw_vsock/virtio_transport.c
1753 @@ -39,6 +39,7 @@ struct virtio_vsock {
1754 * must be accessed with tx_lock held.
1755 */
1756 struct mutex tx_lock;
1757 + bool tx_run;
1758
1759 struct work_struct send_pkt_work;
1760 spinlock_t send_pkt_list_lock;
1761 @@ -50,6 +51,7 @@ struct virtio_vsock {
1762 * must be accessed with rx_lock held.
1763 */
1764 struct mutex rx_lock;
1765 + bool rx_run;
1766 int rx_buf_nr;
1767 int rx_buf_max_nr;
1768
1769 @@ -57,24 +59,28 @@ struct virtio_vsock {
1770 * vqs[VSOCK_VQ_EVENT] must be accessed with event_lock held.
1771 */
1772 struct mutex event_lock;
1773 + bool event_run;
1774 struct virtio_vsock_event event_list[8];
1775
1776 u32 guest_cid;
1777 };
1778
1779 -static struct virtio_vsock *virtio_vsock_get(void)
1780 -{
1781 - return the_virtio_vsock;
1782 -}
1783 -
1784 static u32 virtio_transport_get_local_cid(void)
1785 {
1786 - struct virtio_vsock *vsock = virtio_vsock_get();
1787 + struct virtio_vsock *vsock;
1788 + u32 ret;
1789
1790 - if (!vsock)
1791 - return VMADDR_CID_ANY;
1792 + rcu_read_lock();
1793 + vsock = rcu_dereference(the_virtio_vsock);
1794 + if (!vsock) {
1795 + ret = VMADDR_CID_ANY;
1796 + goto out_rcu;
1797 + }
1798
1799 - return vsock->guest_cid;
1800 + ret = vsock->guest_cid;
1801 +out_rcu:
1802 + rcu_read_unlock();
1803 + return ret;
1804 }
1805
1806 static void
1807 @@ -88,6 +94,9 @@ virtio_transport_send_pkt_work(struct work_struct *work)
1808
1809 mutex_lock(&vsock->tx_lock);
1810
1811 + if (!vsock->tx_run)
1812 + goto out;
1813 +
1814 vq = vsock->vqs[VSOCK_VQ_TX];
1815
1816 for (;;) {
1817 @@ -144,6 +153,7 @@ virtio_transport_send_pkt_work(struct work_struct *work)
1818 if (added)
1819 virtqueue_kick(vq);
1820
1821 +out:
1822 mutex_unlock(&vsock->tx_lock);
1823
1824 if (restart_rx)
1825 @@ -156,10 +166,12 @@ virtio_transport_send_pkt(struct virtio_vsock_pkt *pkt)
1826 struct virtio_vsock *vsock;
1827 int len = pkt->len;
1828
1829 - vsock = virtio_vsock_get();
1830 + rcu_read_lock();
1831 + vsock = rcu_dereference(the_virtio_vsock);
1832 if (!vsock) {
1833 virtio_transport_free_pkt(pkt);
1834 - return -ENODEV;
1835 + len = -ENODEV;
1836 + goto out_rcu;
1837 }
1838
1839 if (pkt->reply)
1840 @@ -170,6 +182,9 @@ virtio_transport_send_pkt(struct virtio_vsock_pkt *pkt)
1841 spin_unlock_bh(&vsock->send_pkt_list_lock);
1842
1843 queue_work(virtio_vsock_workqueue, &vsock->send_pkt_work);
1844 +
1845 +out_rcu:
1846 + rcu_read_unlock();
1847 return len;
1848 }
1849
1850 @@ -222,6 +237,10 @@ static void virtio_transport_tx_work(struct work_struct *work)
1851
1852 vq = vsock->vqs[VSOCK_VQ_TX];
1853 mutex_lock(&vsock->tx_lock);
1854 +
1855 + if (!vsock->tx_run)
1856 + goto out;
1857 +
1858 do {
1859 struct virtio_vsock_pkt *pkt;
1860 unsigned int len;
1861 @@ -232,6 +251,8 @@ static void virtio_transport_tx_work(struct work_struct *work)
1862 added = true;
1863 }
1864 } while (!virtqueue_enable_cb(vq));
1865 +
1866 +out:
1867 mutex_unlock(&vsock->tx_lock);
1868
1869 if (added)
1870 @@ -260,6 +281,9 @@ static void virtio_transport_rx_work(struct work_struct *work)
1871
1872 mutex_lock(&vsock->rx_lock);
1873
1874 + if (!vsock->rx_run)
1875 + goto out;
1876 +
1877 do {
1878 virtqueue_disable_cb(vq);
1879 for (;;) {
1880 @@ -368,6 +392,9 @@ static void virtio_transport_event_work(struct work_struct *work)
1881
1882 mutex_lock(&vsock->event_lock);
1883
1884 + if (!vsock->event_run)
1885 + goto out;
1886 +
1887 do {
1888 struct virtio_vsock_event *event;
1889 unsigned int len;
1890 @@ -382,7 +409,7 @@ static void virtio_transport_event_work(struct work_struct *work)
1891 } while (!virtqueue_enable_cb(vq));
1892
1893 virtqueue_kick(vsock->vqs[VSOCK_VQ_EVENT]);
1894 -
1895 +out:
1896 mutex_unlock(&vsock->event_lock);
1897 }
1898
1899 @@ -478,7 +505,8 @@ static int virtio_vsock_probe(struct virtio_device *vdev)
1900 return ret;
1901
1902 /* Only one virtio-vsock device per guest is supported */
1903 - if (the_virtio_vsock) {
1904 + if (rcu_dereference_protected(the_virtio_vsock,
1905 + lockdep_is_held(&the_virtio_vsock_mutex))) {
1906 ret = -EBUSY;
1907 goto out;
1908 }
1909 @@ -502,8 +530,6 @@ static int virtio_vsock_probe(struct virtio_device *vdev)
1910 vsock->rx_buf_max_nr = 0;
1911 atomic_set(&vsock->queued_replies, 0);
1912
1913 - vdev->priv = vsock;
1914 - the_virtio_vsock = vsock;
1915 mutex_init(&vsock->tx_lock);
1916 mutex_init(&vsock->rx_lock);
1917 mutex_init(&vsock->event_lock);
1918 @@ -514,14 +540,23 @@ static int virtio_vsock_probe(struct virtio_device *vdev)
1919 INIT_WORK(&vsock->event_work, virtio_transport_event_work);
1920 INIT_WORK(&vsock->send_pkt_work, virtio_transport_send_pkt_work);
1921
1922 + mutex_lock(&vsock->tx_lock);
1923 + vsock->tx_run = true;
1924 + mutex_unlock(&vsock->tx_lock);
1925 +
1926 mutex_lock(&vsock->rx_lock);
1927 virtio_vsock_rx_fill(vsock);
1928 + vsock->rx_run = true;
1929 mutex_unlock(&vsock->rx_lock);
1930
1931 mutex_lock(&vsock->event_lock);
1932 virtio_vsock_event_fill(vsock);
1933 + vsock->event_run = true;
1934 mutex_unlock(&vsock->event_lock);
1935
1936 + vdev->priv = vsock;
1937 + rcu_assign_pointer(the_virtio_vsock, vsock);
1938 +
1939 mutex_unlock(&the_virtio_vsock_mutex);
1940 return 0;
1941
1942 @@ -536,6 +571,12 @@ static void virtio_vsock_remove(struct virtio_device *vdev)
1943 struct virtio_vsock *vsock = vdev->priv;
1944 struct virtio_vsock_pkt *pkt;
1945
1946 + mutex_lock(&the_virtio_vsock_mutex);
1947 +
1948 + vdev->priv = NULL;
1949 + rcu_assign_pointer(the_virtio_vsock, NULL);
1950 + synchronize_rcu();
1951 +
1952 flush_work(&vsock->rx_work);
1953 flush_work(&vsock->tx_work);
1954 flush_work(&vsock->event_work);
1955 @@ -544,6 +585,24 @@ static void virtio_vsock_remove(struct virtio_device *vdev)
1956 /* Reset all connected sockets when the device disappear */
1957 vsock_for_each_connected_socket(virtio_vsock_reset_sock);
1958
1959 + /* Stop all work handlers to make sure no one is accessing the device,
1960 + * so we can safely call vdev->config->reset().
1961 + */
1962 + mutex_lock(&vsock->rx_lock);
1963 + vsock->rx_run = false;
1964 + mutex_unlock(&vsock->rx_lock);
1965 +
1966 + mutex_lock(&vsock->tx_lock);
1967 + vsock->tx_run = false;
1968 + mutex_unlock(&vsock->tx_lock);
1969 +
1970 + mutex_lock(&vsock->event_lock);
1971 + vsock->event_run = false;
1972 + mutex_unlock(&vsock->event_lock);
1973 +
1974 + /* Flush all device writes and interrupts, device will not use any
1975 + * more buffers.
1976 + */
1977 vdev->config->reset(vdev);
1978
1979 mutex_lock(&vsock->rx_lock);
1980 @@ -565,12 +624,11 @@ static void virtio_vsock_remove(struct virtio_device *vdev)
1981 }
1982 spin_unlock_bh(&vsock->send_pkt_list_lock);
1983
1984 - mutex_lock(&the_virtio_vsock_mutex);
1985 - the_virtio_vsock = NULL;
1986 - mutex_unlock(&the_virtio_vsock_mutex);
1987 -
1988 + /* Delete virtqueues and flush outstanding callbacks if any */
1989 vdev->config->del_vqs(vdev);
1990
1991 + mutex_unlock(&the_virtio_vsock_mutex);
1992 +
1993 kfree(vsock);
1994 }
1995
1996 diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
1997 index e107754e29a77..1eb77161d5e64 100644
1998 --- a/net/wireless/nl80211.c
1999 +++ b/net/wireless/nl80211.c
2000 @@ -3283,6 +3283,9 @@ static int nl80211_del_key(struct sk_buff *skb, struct genl_info *info)
2001 if (err)
2002 return err;
2003
2004 + if (key.idx < 0)
2005 + return -EINVAL;
2006 +
2007 if (info->attrs[NL80211_ATTR_MAC])
2008 mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]);
2009
2010 diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
2011 index 3734ad56b456c..0eb85765d35a1 100644
2012 --- a/net/xfrm/xfrm_state.c
2013 +++ b/net/xfrm/xfrm_state.c
2014 @@ -761,7 +761,8 @@ static void xfrm_state_look_at(struct xfrm_policy *pol, struct xfrm_state *x,
2015 */
2016 if (x->km.state == XFRM_STATE_VALID) {
2017 if ((x->sel.family &&
2018 - !xfrm_selector_match(&x->sel, fl, x->sel.family)) ||
2019 + (x->sel.family != family ||
2020 + !xfrm_selector_match(&x->sel, fl, family))) ||
2021 !security_xfrm_state_pol_flow_match(x, pol, fl))
2022 return;
2023
2024 @@ -774,7 +775,9 @@ static void xfrm_state_look_at(struct xfrm_policy *pol, struct xfrm_state *x,
2025 *acq_in_progress = 1;
2026 } else if (x->km.state == XFRM_STATE_ERROR ||
2027 x->km.state == XFRM_STATE_EXPIRED) {
2028 - if (xfrm_selector_match(&x->sel, fl, x->sel.family) &&
2029 + if ((!x->sel.family ||
2030 + (x->sel.family == family &&
2031 + xfrm_selector_match(&x->sel, fl, family))) &&
2032 security_xfrm_state_pol_flow_match(x, pol, fl))
2033 *error = -ESRCH;
2034 }
2035 @@ -813,7 +816,7 @@ xfrm_state_find(const xfrm_address_t *daddr, const xfrm_address_t *saddr,
2036 tmpl->mode == x->props.mode &&
2037 tmpl->id.proto == x->id.proto &&
2038 (tmpl->id.spi == x->id.spi || !tmpl->id.spi))
2039 - xfrm_state_look_at(pol, x, fl, encap_family,
2040 + xfrm_state_look_at(pol, x, fl, family,
2041 &best, &acquire_in_progress, &error);
2042 }
2043 if (best || acquire_in_progress)
2044 @@ -829,7 +832,7 @@ xfrm_state_find(const xfrm_address_t *daddr, const xfrm_address_t *saddr,
2045 tmpl->mode == x->props.mode &&
2046 tmpl->id.proto == x->id.proto &&
2047 (tmpl->id.spi == x->id.spi || !tmpl->id.spi))
2048 - xfrm_state_look_at(pol, x, fl, encap_family,
2049 + xfrm_state_look_at(pol, x, fl, family,
2050 &best, &acquire_in_progress, &error);
2051 }
2052
2053 @@ -1244,7 +1247,7 @@ static struct xfrm_state *xfrm_state_clone(struct xfrm_state *orig)
2054 x->tfcpad = orig->tfcpad;
2055 x->replay_maxdiff = orig->replay_maxdiff;
2056 x->replay_maxage = orig->replay_maxage;
2057 - x->curlft.add_time = orig->curlft.add_time;
2058 + memcpy(&x->curlft, &orig->curlft, sizeof(x->curlft));
2059 x->km.state = orig->km.state;
2060 x->km.seq = orig->km.seq;
2061 x->replay = orig->replay;
2062 diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
2063 index cd2900ac473fc..280448114add1 100644
2064 --- a/tools/perf/builtin-top.c
2065 +++ b/tools/perf/builtin-top.c
2066 @@ -633,7 +633,9 @@ repeat:
2067 delay_msecs = top->delay_secs * MSEC_PER_SEC;
2068 set_term_quiet_input(&save);
2069 /* trash return*/
2070 - getc(stdin);
2071 + clearerr(stdin);
2072 + if (poll(&stdin_poll, 1, 0) > 0)
2073 + getc(stdin);
2074
2075 while (!done) {
2076 perf_top__print_sym_table(top);