aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2019-06-28 00:06:39 -0400
committerDavid S. Miller <davem@davemloft.net>2019-06-28 00:06:39 -0400
commitd96ff269a04be286989ead13bf8b4be55bdee8ee (patch)
tree46b6d010a9a4dfe96dc86339d1cbded8874c6b8f
parent3a49584477ff4c8838833be9f3b7cc13f0f7c0d3 (diff)
parent556e2f6020bf90f63c5dd65e9a2254be6db3185b (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
The new route handling in ip_mc_finish_output() from 'net' overlapped with the new support for returning congestion notifications from BPF programs. In order to handle this I had to take the dev_loopback_xmit() calls out of the switch statement. The aquantia driver conflicts were simple overlapping changes. Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--MAINTAINERS2
-rw-r--r--Makefile2
-rw-r--r--arch/arm/boot/dts/gemini-dlink-dir-685.dts2
-rw-r--r--arch/arm/boot/dts/gemini-dlink-dns-313.dts2
-rw-r--r--arch/arm/boot/dts/imx6ul.dtsi8
-rw-r--r--arch/arm/boot/dts/meson8.dtsi5
-rw-r--r--arch/arm/boot/dts/meson8b.dtsi11
-rw-r--r--arch/arm/mach-omap2/prm3xxx.c2
-rw-r--r--arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi18
-rw-r--r--arch/arm64/configs/defconfig1
-rw-r--r--arch/csky/kernel/signal.c5
-rw-r--r--arch/parisc/kernel/module.c4
-rw-r--r--arch/powerpc/include/asm/page.h7
-rw-r--r--arch/powerpc/kernel/head_32.S1
-rw-r--r--arch/powerpc/kernel/head_booke.h10
-rw-r--r--arch/powerpc/kernel/head_fsl_booke.S2
-rw-r--r--arch/powerpc/kvm/book3s_hv_builtin.c1
-rw-r--r--arch/powerpc/kvm/book3s_hv_rmhandlers.S15
-rw-r--r--arch/powerpc/mm/book3s64/mmu_context.c55
-rw-r--r--arch/powerpc/mm/mem.c3
-rw-r--r--arch/powerpc/platforms/powermac/Kconfig1
-rw-r--r--drivers/auxdisplay/cfag12864bfb.c5
-rw-r--r--drivers/auxdisplay/ht16k33.c4
-rw-r--r--drivers/clk/clk.c2
-rw-r--r--drivers/clk/meson/g12a.c4
-rw-r--r--drivers/clk/meson/g12a.h2
-rw-r--r--drivers/clk/meson/meson8b.c10
-rw-r--r--drivers/clk/socfpga/clk-s10.c4
-rw-r--r--drivers/clk/tegra/clk-tegra210.c2
-rw-r--r--drivers/clk/ti/clkctrl.c7
-rw-r--r--drivers/hid/hid-ids.h3
-rw-r--r--drivers/hid/hid-logitech-dj.c4
-rw-r--r--drivers/hid/hid-multitouch.c4
-rw-r--r--drivers/hid/hid-quirks.c1
-rw-r--r--drivers/hid/hid-uclogic-core.c2
-rw-r--r--drivers/hid/hid-uclogic-params.c2
-rw-r--r--drivers/hid/intel-ish-hid/ishtp-fw-loader.c2
-rw-r--r--drivers/hid/intel-ish-hid/ishtp-hid-client.c4
-rw-r--r--drivers/hid/intel-ish-hid/ishtp/bus.c15
-rw-r--r--drivers/iommu/intel-iommu.c7
-rw-r--r--drivers/md/dm-init.c10
-rw-r--r--drivers/md/dm-log-writes.c23
-rw-r--r--drivers/md/dm-table.c2
-rw-r--r--drivers/md/dm-verity-target.c4
-rw-r--r--drivers/mfd/stmfx.c12
-rw-r--r--drivers/mtd/nand/raw/nand_base.c3
-rw-r--r--drivers/mtd/spi-nor/spi-nor.c119
-rw-r--r--drivers/net/bonding/bond_main.c2
-rw-r--r--drivers/net/dsa/microchip/ksz_common.c6
-rw-r--r--drivers/net/ethernet/aquantia/atlantic/aq_filters.c10
-rw-r--r--drivers/net/ethernet/aquantia/atlantic/aq_nic.c1
-rw-r--r--drivers/net/ethernet/aquantia/atlantic/aq_nic.h1
-rw-r--r--drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c19
-rw-r--r--drivers/net/ethernet/cadence/macb_main.c2
-rw-r--r--drivers/net/ethernet/emulex/benet/be_ethtool.c28
-rw-r--r--drivers/net/ethernet/sis/sis900.c16
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c2
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/stmmac_main.c22
-rw-r--r--drivers/net/ppp/ppp_mppe.c1
-rw-r--r--drivers/net/team/team.c2
-rw-r--r--drivers/net/usb/qmi_wwan.c2
-rw-r--r--drivers/net/vrf.c2
-rw-r--r--drivers/pci/p2pdma.c4
-rw-r--r--drivers/scsi/qedi/qedi_main.c3
-rw-r--r--drivers/scsi/qedi/qedi_version.h6
-rw-r--r--drivers/scsi/qla2xxx/qla_os.c2
-rw-r--r--drivers/scsi/ufs/ufshcd-pltfrm.c11
-rw-r--r--fs/afs/callback.c4
-rw-r--r--fs/afs/inode.c31
-rw-r--r--fs/afs/internal.h8
-rw-r--r--fs/afs/volume.c1
-rw-r--r--fs/proc/base.c3
-rw-r--r--include/dt-bindings/clock/g12a-clkc.h2
-rw-r--r--include/linux/intel-ish-client-if.h1
-rw-r--r--include/linux/mtd/spi-nor.h3
-rw-r--r--include/net/ip6_route.h4
-rw-r--r--include/net/route.h1
-rw-r--r--include/net/tls.h15
-rw-r--r--kernel/fork.c58
-rw-r--r--net/bluetooth/6lowpan.c4
-rw-r--r--net/bluetooth/hci_conn.c18
-rw-r--r--net/bluetooth/l2cap_core.c33
-rw-r--r--net/ipv4/ip_output.c25
-rw-r--r--net/ipv4/raw.c2
-rw-r--r--net/ipv4/route.c33
-rw-r--r--net/ipv6/ip6_output.c2
-rw-r--r--net/ipv6/route.c5
-rw-r--r--net/netfilter/nf_flow_table_ip.c2
-rw-r--r--net/packet/af_packet.c23
-rw-r--r--net/packet/internal.h1
-rw-r--r--net/sched/sch_cbs.c9
-rw-r--r--net/sctp/endpointola.c8
-rw-r--r--net/smc/af_smc.c5
-rw-r--r--net/smc/smc_core.c3
-rw-r--r--net/tipc/core.c12
-rw-r--r--net/tipc/netlink_compat.c18
-rw-r--r--net/tls/tls_main.c3
-rw-r--r--samples/pidfd/pidfd-metadata.c8
-rw-r--r--tools/testing/selftests/powerpc/mm/.gitignore3
-rw-r--r--tools/testing/selftests/powerpc/mm/Makefile4
-rw-r--r--tools/testing/selftests/powerpc/mm/large_vm_fork_separation.c87
101 files changed, 719 insertions, 276 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index a6d9bbe526bc..b4304d10f14e 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3131,6 +3131,7 @@ F: arch/arm/mach-bcm/
3131BROADCOM BCM2835 ARM ARCHITECTURE 3131BROADCOM BCM2835 ARM ARCHITECTURE
3132M: Eric Anholt <eric@anholt.net> 3132M: Eric Anholt <eric@anholt.net>
3133M: Stefan Wahren <wahrenst@gmx.net> 3133M: Stefan Wahren <wahrenst@gmx.net>
3134L: bcm-kernel-feedback-list@broadcom.com
3134L: linux-rpi-kernel@lists.infradead.org (moderated for non-subscribers) 3135L: linux-rpi-kernel@lists.infradead.org (moderated for non-subscribers)
3135L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 3136L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
3136T: git git://github.com/anholt/linux 3137T: git git://github.com/anholt/linux
@@ -3160,6 +3161,7 @@ F: arch/arm/boot/dts/bcm953012*
3160 3161
3161BROADCOM BCM53573 ARM ARCHITECTURE 3162BROADCOM BCM53573 ARM ARCHITECTURE
3162M: Rafał Miłecki <rafal@milecki.pl> 3163M: Rafał Miłecki <rafal@milecki.pl>
3164L: bcm-kernel-feedback-list@broadcom.com
3163L: linux-arm-kernel@lists.infradead.org 3165L: linux-arm-kernel@lists.infradead.org
3164S: Maintained 3166S: Maintained
3165F: arch/arm/boot/dts/bcm53573* 3167F: arch/arm/boot/dts/bcm53573*
diff --git a/Makefile b/Makefile
index 9514dac2660a..7a7c17eb0cbf 100644
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@
2VERSION = 5 2VERSION = 5
3PATCHLEVEL = 2 3PATCHLEVEL = 2
4SUBLEVEL = 0 4SUBLEVEL = 0
5EXTRAVERSION = -rc5 5EXTRAVERSION = -rc6
6NAME = Golden Lions 6NAME = Golden Lions
7 7
8# *DOCUMENTATION* 8# *DOCUMENTATION*
diff --git a/arch/arm/boot/dts/gemini-dlink-dir-685.dts b/arch/arm/boot/dts/gemini-dlink-dir-685.dts
index cfbfbc91a1e1..3613f05f8a80 100644
--- a/arch/arm/boot/dts/gemini-dlink-dir-685.dts
+++ b/arch/arm/boot/dts/gemini-dlink-dir-685.dts
@@ -20,7 +20,7 @@
20 }; 20 };
21 21
22 chosen { 22 chosen {
23 bootargs = "console=ttyS0,19200n8 root=/dev/sda1 rw rootwait"; 23 bootargs = "console=ttyS0,19200n8 root=/dev/sda1 rw rootwait consoleblank=300";
24 stdout-path = "uart0:19200n8"; 24 stdout-path = "uart0:19200n8";
25 }; 25 };
26 26
diff --git a/arch/arm/boot/dts/gemini-dlink-dns-313.dts b/arch/arm/boot/dts/gemini-dlink-dns-313.dts
index b12504e10f0b..360642a02a48 100644
--- a/arch/arm/boot/dts/gemini-dlink-dns-313.dts
+++ b/arch/arm/boot/dts/gemini-dlink-dns-313.dts
@@ -11,7 +11,7 @@
11 11
12/ { 12/ {
13 model = "D-Link DNS-313 1-Bay Network Storage Enclosure"; 13 model = "D-Link DNS-313 1-Bay Network Storage Enclosure";
14 compatible = "dlink,dir-313", "cortina,gemini"; 14 compatible = "dlink,dns-313", "cortina,gemini";
15 #address-cells = <1>; 15 #address-cells = <1>;
16 #size-cells = <1>; 16 #size-cells = <1>;
17 17
diff --git a/arch/arm/boot/dts/imx6ul.dtsi b/arch/arm/boot/dts/imx6ul.dtsi
index bbf010c73336..a7f6d1d58e20 100644
--- a/arch/arm/boot/dts/imx6ul.dtsi
+++ b/arch/arm/boot/dts/imx6ul.dtsi
@@ -358,7 +358,7 @@
358 pwm1: pwm@2080000 { 358 pwm1: pwm@2080000 {
359 compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm"; 359 compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm";
360 reg = <0x02080000 0x4000>; 360 reg = <0x02080000 0x4000>;
361 interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>; 361 interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
362 clocks = <&clks IMX6UL_CLK_PWM1>, 362 clocks = <&clks IMX6UL_CLK_PWM1>,
363 <&clks IMX6UL_CLK_PWM1>; 363 <&clks IMX6UL_CLK_PWM1>;
364 clock-names = "ipg", "per"; 364 clock-names = "ipg", "per";
@@ -369,7 +369,7 @@
369 pwm2: pwm@2084000 { 369 pwm2: pwm@2084000 {
370 compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm"; 370 compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm";
371 reg = <0x02084000 0x4000>; 371 reg = <0x02084000 0x4000>;
372 interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>; 372 interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
373 clocks = <&clks IMX6UL_CLK_PWM2>, 373 clocks = <&clks IMX6UL_CLK_PWM2>,
374 <&clks IMX6UL_CLK_PWM2>; 374 <&clks IMX6UL_CLK_PWM2>;
375 clock-names = "ipg", "per"; 375 clock-names = "ipg", "per";
@@ -380,7 +380,7 @@
380 pwm3: pwm@2088000 { 380 pwm3: pwm@2088000 {
381 compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm"; 381 compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm";
382 reg = <0x02088000 0x4000>; 382 reg = <0x02088000 0x4000>;
383 interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>; 383 interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
384 clocks = <&clks IMX6UL_CLK_PWM3>, 384 clocks = <&clks IMX6UL_CLK_PWM3>,
385 <&clks IMX6UL_CLK_PWM3>; 385 <&clks IMX6UL_CLK_PWM3>;
386 clock-names = "ipg", "per"; 386 clock-names = "ipg", "per";
@@ -391,7 +391,7 @@
391 pwm4: pwm@208c000 { 391 pwm4: pwm@208c000 {
392 compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm"; 392 compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm";
393 reg = <0x0208c000 0x4000>; 393 reg = <0x0208c000 0x4000>;
394 interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>; 394 interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
395 clocks = <&clks IMX6UL_CLK_PWM4>, 395 clocks = <&clks IMX6UL_CLK_PWM4>,
396 <&clks IMX6UL_CLK_PWM4>; 396 <&clks IMX6UL_CLK_PWM4>;
397 clock-names = "ipg", "per"; 397 clock-names = "ipg", "per";
diff --git a/arch/arm/boot/dts/meson8.dtsi b/arch/arm/boot/dts/meson8.dtsi
index 7ef442462ea4..40c11b6b217a 100644
--- a/arch/arm/boot/dts/meson8.dtsi
+++ b/arch/arm/boot/dts/meson8.dtsi
@@ -248,8 +248,8 @@
248 <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>, 248 <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>,
249 <GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>, 249 <GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>,
250 <GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>, 250 <GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>,
251 <GIC_SPI 172 IRQ_TYPE_LEVEL_HIGH>, 251 <GIC_SPI 170 IRQ_TYPE_LEVEL_HIGH>,
252 <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH>, 252 <GIC_SPI 171 IRQ_TYPE_LEVEL_HIGH>,
253 <GIC_SPI 172 IRQ_TYPE_LEVEL_HIGH>, 253 <GIC_SPI 172 IRQ_TYPE_LEVEL_HIGH>,
254 <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH>, 254 <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH>,
255 <GIC_SPI 174 IRQ_TYPE_LEVEL_HIGH>, 255 <GIC_SPI 174 IRQ_TYPE_LEVEL_HIGH>,
@@ -264,7 +264,6 @@
264 clocks = <&clkc CLKID_CLK81>, <&clkc CLKID_MALI>; 264 clocks = <&clkc CLKID_CLK81>, <&clkc CLKID_MALI>;
265 clock-names = "bus", "core"; 265 clock-names = "bus", "core";
266 operating-points-v2 = <&gpu_opp_table>; 266 operating-points-v2 = <&gpu_opp_table>;
267 switch-delay = <0xffff>;
268 }; 267 };
269 }; 268 };
270}; /* end of / */ 269}; /* end of / */
diff --git a/arch/arm/boot/dts/meson8b.dtsi b/arch/arm/boot/dts/meson8b.dtsi
index 800cd65fc50a..ec67f49116d9 100644
--- a/arch/arm/boot/dts/meson8b.dtsi
+++ b/arch/arm/boot/dts/meson8b.dtsi
@@ -163,23 +163,23 @@
163 163
164 opp-255000000 { 164 opp-255000000 {
165 opp-hz = /bits/ 64 <255000000>; 165 opp-hz = /bits/ 64 <255000000>;
166 opp-microvolt = <1150000>; 166 opp-microvolt = <1100000>;
167 }; 167 };
168 opp-364300000 { 168 opp-364300000 {
169 opp-hz = /bits/ 64 <364300000>; 169 opp-hz = /bits/ 64 <364300000>;
170 opp-microvolt = <1150000>; 170 opp-microvolt = <1100000>;
171 }; 171 };
172 opp-425000000 { 172 opp-425000000 {
173 opp-hz = /bits/ 64 <425000000>; 173 opp-hz = /bits/ 64 <425000000>;
174 opp-microvolt = <1150000>; 174 opp-microvolt = <1100000>;
175 }; 175 };
176 opp-510000000 { 176 opp-510000000 {
177 opp-hz = /bits/ 64 <510000000>; 177 opp-hz = /bits/ 64 <510000000>;
178 opp-microvolt = <1150000>; 178 opp-microvolt = <1100000>;
179 }; 179 };
180 opp-637500000 { 180 opp-637500000 {
181 opp-hz = /bits/ 64 <637500000>; 181 opp-hz = /bits/ 64 <637500000>;
182 opp-microvolt = <1150000>; 182 opp-microvolt = <1100000>;
183 turbo-mode; 183 turbo-mode;
184 }; 184 };
185 }; 185 };
@@ -229,7 +229,6 @@
229 clocks = <&clkc CLKID_CLK81>, <&clkc CLKID_MALI>; 229 clocks = <&clkc CLKID_CLK81>, <&clkc CLKID_MALI>;
230 clock-names = "bus", "core"; 230 clock-names = "bus", "core";
231 operating-points-v2 = <&gpu_opp_table>; 231 operating-points-v2 = <&gpu_opp_table>;
232 switch-delay = <0xffff>;
233 }; 232 };
234 }; 233 };
235}; /* end of / */ 234}; /* end of / */
diff --git a/arch/arm/mach-omap2/prm3xxx.c b/arch/arm/mach-omap2/prm3xxx.c
index fd4a3bf27993..1b442b128569 100644
--- a/arch/arm/mach-omap2/prm3xxx.c
+++ b/arch/arm/mach-omap2/prm3xxx.c
@@ -430,7 +430,7 @@ static void omap3_prm_reconfigure_io_chain(void)
430 * registers, and omap3xxx_prm_reconfigure_io_chain() must be called. 430 * registers, and omap3xxx_prm_reconfigure_io_chain() must be called.
431 * No return value. 431 * No return value.
432 */ 432 */
433static void __init omap3xxx_prm_enable_io_wakeup(void) 433static void omap3xxx_prm_enable_io_wakeup(void)
434{ 434{
435 if (prm_features & PRM_HAS_IO_WAKEUP) 435 if (prm_features & PRM_HAS_IO_WAKEUP)
436 omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, 436 omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD,
diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
index 4cdf84c63320..22a1c74dddf3 100644
--- a/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
+++ b/arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
@@ -28,7 +28,7 @@
28 enable-method = "psci"; 28 enable-method = "psci";
29 clocks = <&clockgen 1 0>; 29 clocks = <&clockgen 1 0>;
30 next-level-cache = <&l2>; 30 next-level-cache = <&l2>;
31 cpu-idle-states = <&CPU_PH20>; 31 cpu-idle-states = <&CPU_PW20>;
32 }; 32 };
33 33
34 cpu1: cpu@1 { 34 cpu1: cpu@1 {
@@ -38,7 +38,7 @@
38 enable-method = "psci"; 38 enable-method = "psci";
39 clocks = <&clockgen 1 0>; 39 clocks = <&clockgen 1 0>;
40 next-level-cache = <&l2>; 40 next-level-cache = <&l2>;
41 cpu-idle-states = <&CPU_PH20>; 41 cpu-idle-states = <&CPU_PW20>;
42 }; 42 };
43 43
44 l2: l2-cache { 44 l2: l2-cache {
@@ -53,13 +53,13 @@
53 */ 53 */
54 entry-method = "arm,psci"; 54 entry-method = "arm,psci";
55 55
56 CPU_PH20: cpu-ph20 { 56 CPU_PW20: cpu-pw20 {
57 compatible = "arm,idle-state"; 57 compatible = "arm,idle-state";
58 idle-state-name = "PH20"; 58 idle-state-name = "PW20";
59 arm,psci-suspend-param = <0x00010000>; 59 arm,psci-suspend-param = <0x0>;
60 entry-latency-us = <1000>; 60 entry-latency-us = <2000>;
61 exit-latency-us = <1000>; 61 exit-latency-us = <2000>;
62 min-residency-us = <3000>; 62 min-residency-us = <6000>;
63 }; 63 };
64 }; 64 };
65 65
diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
index 4d583514258c..6bca5b082ea4 100644
--- a/arch/arm64/configs/defconfig
+++ b/arch/arm64/configs/defconfig
@@ -613,6 +613,7 @@ CONFIG_RTC_DRV_TEGRA=y
613CONFIG_RTC_DRV_IMX_SC=m 613CONFIG_RTC_DRV_IMX_SC=m
614CONFIG_RTC_DRV_XGENE=y 614CONFIG_RTC_DRV_XGENE=y
615CONFIG_DMADEVICES=y 615CONFIG_DMADEVICES=y
616CONFIG_FSL_EDMA=y
616CONFIG_DMA_BCM2835=m 617CONFIG_DMA_BCM2835=m
617CONFIG_K3_DMA=y 618CONFIG_K3_DMA=y
618CONFIG_MV_XOR=y 619CONFIG_MV_XOR=y
diff --git a/arch/csky/kernel/signal.c b/arch/csky/kernel/signal.c
index 04a43cfd4e09..d47a3381aad8 100644
--- a/arch/csky/kernel/signal.c
+++ b/arch/csky/kernel/signal.c
@@ -39,6 +39,11 @@ static int save_fpu_state(struct sigcontext __user *sc)
39#endif 39#endif
40 40
41struct rt_sigframe { 41struct rt_sigframe {
42 /*
43 * pad[3] is compatible with the same struct defined in
44 * gcc/libgcc/config/csky/linux-unwind.h
45 */
46 int pad[3];
42 struct siginfo info; 47 struct siginfo info;
43 struct ucontext uc; 48 struct ucontext uc;
44}; 49};
diff --git a/arch/parisc/kernel/module.c b/arch/parisc/kernel/module.c
index f241ded9239b..1f0f29a289d3 100644
--- a/arch/parisc/kernel/module.c
+++ b/arch/parisc/kernel/module.c
@@ -786,6 +786,10 @@ int apply_relocate_add(Elf_Shdr *sechdrs,
786 /* 32-bit PC relative address */ 786 /* 32-bit PC relative address */
787 *loc = val - dot - 8 + addend; 787 *loc = val - dot - 8 + addend;
788 break; 788 break;
789 case R_PARISC_PCREL64:
790 /* 64-bit PC relative address */
791 *loc64 = val - dot - 8 + addend;
792 break;
789 case R_PARISC_DIR64: 793 case R_PARISC_DIR64:
790 /* 64-bit effective address */ 794 /* 64-bit effective address */
791 *loc64 = val + addend; 795 *loc64 = val + addend;
diff --git a/arch/powerpc/include/asm/page.h b/arch/powerpc/include/asm/page.h
index b8286a2013b4..0d52f57fca04 100644
--- a/arch/powerpc/include/asm/page.h
+++ b/arch/powerpc/include/asm/page.h
@@ -319,6 +319,13 @@ struct vm_area_struct;
319#endif /* __ASSEMBLY__ */ 319#endif /* __ASSEMBLY__ */
320#include <asm/slice.h> 320#include <asm/slice.h>
321 321
322/*
323 * Allow 30-bit DMA for very limited Broadcom wifi chips on many powerbooks.
324 */
325#ifdef CONFIG_PPC32
326#define ARCH_ZONE_DMA_BITS 30
327#else
322#define ARCH_ZONE_DMA_BITS 31 328#define ARCH_ZONE_DMA_BITS 31
329#endif
323 330
324#endif /* _ASM_POWERPC_PAGE_H */ 331#endif /* _ASM_POWERPC_PAGE_H */
diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S
index 1d5f1bd0dacd..f255e22184b4 100644
--- a/arch/powerpc/kernel/head_32.S
+++ b/arch/powerpc/kernel/head_32.S
@@ -752,6 +752,7 @@ __secondary_start:
752 stw r0,0(r3) 752 stw r0,0(r3)
753 753
754 /* load up the MMU */ 754 /* load up the MMU */
755 bl load_segment_registers
755 bl load_up_mmu 756 bl load_up_mmu
756 757
757 /* ptr to phys current thread */ 758 /* ptr to phys current thread */
diff --git a/arch/powerpc/kernel/head_booke.h b/arch/powerpc/kernel/head_booke.h
index bfeb469e8106..2ae635df9026 100644
--- a/arch/powerpc/kernel/head_booke.h
+++ b/arch/powerpc/kernel/head_booke.h
@@ -83,7 +83,7 @@ END_BTB_FLUSH_SECTION
83 SAVE_4GPRS(3, r11); \ 83 SAVE_4GPRS(3, r11); \
84 SAVE_2GPRS(7, r11) 84 SAVE_2GPRS(7, r11)
85 85
86.macro SYSCALL_ENTRY trapno intno 86.macro SYSCALL_ENTRY trapno intno srr1
87 mfspr r10, SPRN_SPRG_THREAD 87 mfspr r10, SPRN_SPRG_THREAD
88#ifdef CONFIG_KVM_BOOKE_HV 88#ifdef CONFIG_KVM_BOOKE_HV
89BEGIN_FTR_SECTION 89BEGIN_FTR_SECTION
@@ -94,7 +94,7 @@ BEGIN_FTR_SECTION
94 mfspr r11, SPRN_SRR1 94 mfspr r11, SPRN_SRR1
95 mtocrf 0x80, r11 /* check MSR[GS] without clobbering reg */ 95 mtocrf 0x80, r11 /* check MSR[GS] without clobbering reg */
96 bf 3, 1975f 96 bf 3, 1975f
97 b kvmppc_handler_BOOKE_INTERRUPT_\intno\()_SPRN_SRR1 97 b kvmppc_handler_\intno\()_\srr1
981975: 981975:
99 mr r12, r13 99 mr r12, r13
100 lwz r13, THREAD_NORMSAVE(2)(r10) 100 lwz r13, THREAD_NORMSAVE(2)(r10)
@@ -145,9 +145,9 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_EMB_HV)
145 tophys(r11,r11) 145 tophys(r11,r11)
146 addi r11,r11,global_dbcr0@l 146 addi r11,r11,global_dbcr0@l
147#ifdef CONFIG_SMP 147#ifdef CONFIG_SMP
148 lwz r9,TASK_CPU(r2) 148 lwz r10, TASK_CPU(r2)
149 slwi r9,r9,3 149 slwi r10, r10, 3
150 add r11,r11,r9 150 add r11, r11, r10
151#endif 151#endif
152 lwz r12,0(r11) 152 lwz r12,0(r11)
153 mtspr SPRN_DBCR0,r12 153 mtspr SPRN_DBCR0,r12
diff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/kernel/head_fsl_booke.S
index 0bf4651380f3..adf0505dbe02 100644
--- a/arch/powerpc/kernel/head_fsl_booke.S
+++ b/arch/powerpc/kernel/head_fsl_booke.S
@@ -409,7 +409,7 @@ interrupt_base:
409 409
410 /* System Call Interrupt */ 410 /* System Call Interrupt */
411 START_EXCEPTION(SystemCall) 411 START_EXCEPTION(SystemCall)
412 SYSCALL_ENTRY 0xc00 SYSCALL 412 SYSCALL_ENTRY 0xc00 BOOKE_INTERRUPT_SYSCALL SPRN_SRR1
413 413
414 /* Auxiliary Processor Unavailable Interrupt */ 414 /* Auxiliary Processor Unavailable Interrupt */
415 EXCEPTION(0x2900, AP_UNAVAIL, AuxillaryProcessorUnavailable, \ 415 EXCEPTION(0x2900, AP_UNAVAIL, AuxillaryProcessorUnavailable, \
diff --git a/arch/powerpc/kvm/book3s_hv_builtin.c b/arch/powerpc/kvm/book3s_hv_builtin.c
index 41f93dbcd29f..cb05ccc8bc6a 100644
--- a/arch/powerpc/kvm/book3s_hv_builtin.c
+++ b/arch/powerpc/kvm/book3s_hv_builtin.c
@@ -830,6 +830,7 @@ static void flush_guest_tlb(struct kvm *kvm)
830 } 830 }
831 } 831 }
832 asm volatile("ptesync": : :"memory"); 832 asm volatile("ptesync": : :"memory");
833 asm volatile(PPC_INVALIDATE_ERAT : : :"memory");
833} 834}
834 835
835void kvmppc_check_need_tlb_flush(struct kvm *kvm, int pcpu, 836void kvmppc_check_need_tlb_flush(struct kvm *kvm, int pcpu,
diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
index d885a5831daa..337e64468d78 100644
--- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S
+++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
@@ -2500,17 +2500,28 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
2500 LOAD_REG_ADDR(r11, dawr_force_enable) 2500 LOAD_REG_ADDR(r11, dawr_force_enable)
2501 lbz r11, 0(r11) 2501 lbz r11, 0(r11)
2502 cmpdi r11, 0 2502 cmpdi r11, 0
2503 bne 3f
2503 li r3, H_HARDWARE 2504 li r3, H_HARDWARE
2504 beqlr 2505 blr
25063:
2505 /* Emulate H_SET_DABR/X on P8 for the sake of compat mode guests */ 2507 /* Emulate H_SET_DABR/X on P8 for the sake of compat mode guests */
2506 rlwimi r5, r4, 5, DAWRX_DR | DAWRX_DW 2508 rlwimi r5, r4, 5, DAWRX_DR | DAWRX_DW
2507 rlwimi r5, r4, 2, DAWRX_WT 2509 rlwimi r5, r4, 2, DAWRX_WT
2508 clrrdi r4, r4, 3 2510 clrrdi r4, r4, 3
2509 std r4, VCPU_DAWR(r3) 2511 std r4, VCPU_DAWR(r3)
2510 std r5, VCPU_DAWRX(r3) 2512 std r5, VCPU_DAWRX(r3)
2513 /*
2514 * If came in through the real mode hcall handler then it is necessary
2515 * to write the registers since the return path won't. Otherwise it is
2516 * sufficient to store then in the vcpu struct as they will be loaded
2517 * next time the vcpu is run.
2518 */
2519 mfmsr r6
2520 andi. r6, r6, MSR_DR /* in real mode? */
2521 bne 4f
2511 mtspr SPRN_DAWR, r4 2522 mtspr SPRN_DAWR, r4
2512 mtspr SPRN_DAWRX, r5 2523 mtspr SPRN_DAWRX, r5
2513 li r3, 0 25244: li r3, 0
2514 blr 2525 blr
2515 2526
2516_GLOBAL(kvmppc_h_cede) /* r3 = vcpu pointer, r11 = msr, r13 = paca */ 2527_GLOBAL(kvmppc_h_cede) /* r3 = vcpu pointer, r11 = msr, r13 = paca */
diff --git a/arch/powerpc/mm/book3s64/mmu_context.c b/arch/powerpc/mm/book3s64/mmu_context.c
index bb70391401f7..794404d50a85 100644
--- a/arch/powerpc/mm/book3s64/mmu_context.c
+++ b/arch/powerpc/mm/book3s64/mmu_context.c
@@ -50,20 +50,52 @@ EXPORT_SYMBOL_GPL(hash__alloc_context_id);
50 50
51void slb_setup_new_exec(void); 51void slb_setup_new_exec(void);
52 52
53static int realloc_context_ids(mm_context_t *ctx)
54{
55 int i, id;
56
57 /*
58 * id 0 (aka. ctx->id) is special, we always allocate a new one, even if
59 * there wasn't one allocated previously (which happens in the exec
60 * case where ctx is newly allocated).
61 *
62 * We have to be a bit careful here. We must keep the existing ids in
63 * the array, so that we can test if they're non-zero to decide if we
64 * need to allocate a new one. However in case of error we must free the
65 * ids we've allocated but *not* any of the existing ones (or risk a
66 * UAF). That's why we decrement i at the start of the error handling
67 * loop, to skip the id that we just tested but couldn't reallocate.
68 */
69 for (i = 0; i < ARRAY_SIZE(ctx->extended_id); i++) {
70 if (i == 0 || ctx->extended_id[i]) {
71 id = hash__alloc_context_id();
72 if (id < 0)
73 goto error;
74
75 ctx->extended_id[i] = id;
76 }
77 }
78
79 /* The caller expects us to return id */
80 return ctx->id;
81
82error:
83 for (i--; i >= 0; i--) {
84 if (ctx->extended_id[i])
85 ida_free(&mmu_context_ida, ctx->extended_id[i]);
86 }
87
88 return id;
89}
90
53static int hash__init_new_context(struct mm_struct *mm) 91static int hash__init_new_context(struct mm_struct *mm)
54{ 92{
55 int index; 93 int index;
56 94
57 index = hash__alloc_context_id();
58 if (index < 0)
59 return index;
60
61 mm->context.hash_context = kmalloc(sizeof(struct hash_mm_context), 95 mm->context.hash_context = kmalloc(sizeof(struct hash_mm_context),
62 GFP_KERNEL); 96 GFP_KERNEL);
63 if (!mm->context.hash_context) { 97 if (!mm->context.hash_context)
64 ida_free(&mmu_context_ida, index);
65 return -ENOMEM; 98 return -ENOMEM;
66 }
67 99
68 /* 100 /*
69 * The old code would re-promote on fork, we don't do that when using 101 * The old code would re-promote on fork, we don't do that when using
@@ -91,13 +123,20 @@ static int hash__init_new_context(struct mm_struct *mm)
91 mm->context.hash_context->spt = kmalloc(sizeof(struct subpage_prot_table), 123 mm->context.hash_context->spt = kmalloc(sizeof(struct subpage_prot_table),
92 GFP_KERNEL); 124 GFP_KERNEL);
93 if (!mm->context.hash_context->spt) { 125 if (!mm->context.hash_context->spt) {
94 ida_free(&mmu_context_ida, index);
95 kfree(mm->context.hash_context); 126 kfree(mm->context.hash_context);
96 return -ENOMEM; 127 return -ENOMEM;
97 } 128 }
98 } 129 }
99#endif 130#endif
131 }
100 132
133 index = realloc_context_ids(&mm->context);
134 if (index < 0) {
135#ifdef CONFIG_PPC_SUBPAGE_PROT
136 kfree(mm->context.hash_context->spt);
137#endif
138 kfree(mm->context.hash_context);
139 return index;
101 } 140 }
102 141
103 pkey_mm_init(mm); 142 pkey_mm_init(mm);
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c
index cba29131bccc..2540d3b2588c 100644
--- a/arch/powerpc/mm/mem.c
+++ b/arch/powerpc/mm/mem.c
@@ -248,7 +248,8 @@ void __init paging_init(void)
248 (long int)((top_of_ram - total_ram) >> 20)); 248 (long int)((top_of_ram - total_ram) >> 20));
249 249
250#ifdef CONFIG_ZONE_DMA 250#ifdef CONFIG_ZONE_DMA
251 max_zone_pfns[ZONE_DMA] = min(max_low_pfn, 0x7fffffffUL >> PAGE_SHIFT); 251 max_zone_pfns[ZONE_DMA] = min(max_low_pfn,
252 ((1UL << ARCH_ZONE_DMA_BITS) - 1) >> PAGE_SHIFT);
252#endif 253#endif
253 max_zone_pfns[ZONE_NORMAL] = max_low_pfn; 254 max_zone_pfns[ZONE_NORMAL] = max_low_pfn;
254#ifdef CONFIG_HIGHMEM 255#ifdef CONFIG_HIGHMEM
diff --git a/arch/powerpc/platforms/powermac/Kconfig b/arch/powerpc/platforms/powermac/Kconfig
index f834a19ed772..c02d8c503b29 100644
--- a/arch/powerpc/platforms/powermac/Kconfig
+++ b/arch/powerpc/platforms/powermac/Kconfig
@@ -7,6 +7,7 @@ config PPC_PMAC
7 select PPC_INDIRECT_PCI if PPC32 7 select PPC_INDIRECT_PCI if PPC32
8 select PPC_MPC106 if PPC32 8 select PPC_MPC106 if PPC32
9 select PPC_NATIVE 9 select PPC_NATIVE
10 select ZONE_DMA if PPC32
10 default y 11 default y
11 12
12config PPC_PMAC64 13config PPC_PMAC64
diff --git a/drivers/auxdisplay/cfag12864bfb.c b/drivers/auxdisplay/cfag12864bfb.c
index 40c8a552a478..4074886b7bc8 100644
--- a/drivers/auxdisplay/cfag12864bfb.c
+++ b/drivers/auxdisplay/cfag12864bfb.c
@@ -52,8 +52,9 @@ static const struct fb_var_screeninfo cfag12864bfb_var = {
52 52
53static int cfag12864bfb_mmap(struct fb_info *info, struct vm_area_struct *vma) 53static int cfag12864bfb_mmap(struct fb_info *info, struct vm_area_struct *vma)
54{ 54{
55 return vm_insert_page(vma, vma->vm_start, 55 struct page *pages = virt_to_page(cfag12864b_buffer);
56 virt_to_page(cfag12864b_buffer)); 56
57 return vm_map_pages_zero(vma, &pages, 1);
57} 58}
58 59
59static struct fb_ops cfag12864bfb_ops = { 60static struct fb_ops cfag12864bfb_ops = {
diff --git a/drivers/auxdisplay/ht16k33.c b/drivers/auxdisplay/ht16k33.c
index 21393ec3b9a4..9c0bb771751d 100644
--- a/drivers/auxdisplay/ht16k33.c
+++ b/drivers/auxdisplay/ht16k33.c
@@ -223,9 +223,9 @@ static const struct backlight_ops ht16k33_bl_ops = {
223static int ht16k33_mmap(struct fb_info *info, struct vm_area_struct *vma) 223static int ht16k33_mmap(struct fb_info *info, struct vm_area_struct *vma)
224{ 224{
225 struct ht16k33_priv *priv = info->par; 225 struct ht16k33_priv *priv = info->par;
226 struct page *pages = virt_to_page(priv->fbdev.buffer);
226 227
227 return vm_insert_page(vma, vma->vm_start, 228 return vm_map_pages_zero(vma, &pages, 1);
228 virt_to_page(priv->fbdev.buffer));
229} 229}
230 230
231static struct fb_ops ht16k33_fb_ops = { 231static struct fb_ops ht16k33_fb_ops = {
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index aa51756fd4d6..87b410d6e51d 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -368,7 +368,7 @@ static struct clk_core *clk_core_get(struct clk_core *core, u8 p_index)
368 const char *dev_id = dev ? dev_name(dev) : NULL; 368 const char *dev_id = dev ? dev_name(dev) : NULL;
369 struct device_node *np = core->of_node; 369 struct device_node *np = core->of_node;
370 370
371 if (np && index >= 0) 371 if (np && (name || index >= 0))
372 hw = of_clk_get_hw(np, index, name); 372 hw = of_clk_get_hw(np, index, name);
373 373
374 /* 374 /*
diff --git a/drivers/clk/meson/g12a.c b/drivers/clk/meson/g12a.c
index 739f64fdf1e3..206fafd299ea 100644
--- a/drivers/clk/meson/g12a.c
+++ b/drivers/clk/meson/g12a.c
@@ -2734,8 +2734,8 @@ static struct clk_hw_onecell_data g12a_hw_onecell_data = {
2734 [CLKID_MALI_1_DIV] = &g12a_mali_1_div.hw, 2734 [CLKID_MALI_1_DIV] = &g12a_mali_1_div.hw,
2735 [CLKID_MALI_1] = &g12a_mali_1.hw, 2735 [CLKID_MALI_1] = &g12a_mali_1.hw,
2736 [CLKID_MALI] = &g12a_mali.hw, 2736 [CLKID_MALI] = &g12a_mali.hw,
2737 [CLKID_MPLL_5OM_DIV] = &g12a_mpll_50m_div.hw, 2737 [CLKID_MPLL_50M_DIV] = &g12a_mpll_50m_div.hw,
2738 [CLKID_MPLL_5OM] = &g12a_mpll_50m.hw, 2738 [CLKID_MPLL_50M] = &g12a_mpll_50m.hw,
2739 [CLKID_SYS_PLL_DIV16_EN] = &g12a_sys_pll_div16_en.hw, 2739 [CLKID_SYS_PLL_DIV16_EN] = &g12a_sys_pll_div16_en.hw,
2740 [CLKID_SYS_PLL_DIV16] = &g12a_sys_pll_div16.hw, 2740 [CLKID_SYS_PLL_DIV16] = &g12a_sys_pll_div16.hw,
2741 [CLKID_CPU_CLK_DYN0_SEL] = &g12a_cpu_clk_premux0.hw, 2741 [CLKID_CPU_CLK_DYN0_SEL] = &g12a_cpu_clk_premux0.hw,
diff --git a/drivers/clk/meson/g12a.h b/drivers/clk/meson/g12a.h
index 39c41af70804..bcc05cd9882f 100644
--- a/drivers/clk/meson/g12a.h
+++ b/drivers/clk/meson/g12a.h
@@ -166,7 +166,7 @@
166#define CLKID_HDMI_DIV 167 166#define CLKID_HDMI_DIV 167
167#define CLKID_MALI_0_DIV 170 167#define CLKID_MALI_0_DIV 170
168#define CLKID_MALI_1_DIV 173 168#define CLKID_MALI_1_DIV 173
169#define CLKID_MPLL_5OM_DIV 176 169#define CLKID_MPLL_50M_DIV 176
170#define CLKID_SYS_PLL_DIV16_EN 178 170#define CLKID_SYS_PLL_DIV16_EN 178
171#define CLKID_SYS_PLL_DIV16 179 171#define CLKID_SYS_PLL_DIV16 179
172#define CLKID_CPU_CLK_DYN0_SEL 180 172#define CLKID_CPU_CLK_DYN0_SEL 180
diff --git a/drivers/clk/meson/meson8b.c b/drivers/clk/meson/meson8b.c
index 37cf0f01bb5d..62cd3a7f1f65 100644
--- a/drivers/clk/meson/meson8b.c
+++ b/drivers/clk/meson/meson8b.c
@@ -1761,7 +1761,7 @@ static struct clk_regmap meson8m2_gp_pll = {
1761 }, 1761 },
1762}; 1762};
1763 1763
1764static const char * const mmeson8b_vpu_0_1_parent_names[] = { 1764static const char * const meson8b_vpu_0_1_parent_names[] = {
1765 "fclk_div4", "fclk_div3", "fclk_div5", "fclk_div7" 1765 "fclk_div4", "fclk_div3", "fclk_div5", "fclk_div7"
1766}; 1766};
1767 1767
@@ -1778,8 +1778,8 @@ static struct clk_regmap meson8b_vpu_0_sel = {
1778 .hw.init = &(struct clk_init_data){ 1778 .hw.init = &(struct clk_init_data){
1779 .name = "vpu_0_sel", 1779 .name = "vpu_0_sel",
1780 .ops = &clk_regmap_mux_ops, 1780 .ops = &clk_regmap_mux_ops,
1781 .parent_names = mmeson8b_vpu_0_1_parent_names, 1781 .parent_names = meson8b_vpu_0_1_parent_names,
1782 .num_parents = ARRAY_SIZE(mmeson8b_vpu_0_1_parent_names), 1782 .num_parents = ARRAY_SIZE(meson8b_vpu_0_1_parent_names),
1783 .flags = CLK_SET_RATE_PARENT, 1783 .flags = CLK_SET_RATE_PARENT,
1784 }, 1784 },
1785}; 1785};
@@ -1837,8 +1837,8 @@ static struct clk_regmap meson8b_vpu_1_sel = {
1837 .hw.init = &(struct clk_init_data){ 1837 .hw.init = &(struct clk_init_data){
1838 .name = "vpu_1_sel", 1838 .name = "vpu_1_sel",
1839 .ops = &clk_regmap_mux_ops, 1839 .ops = &clk_regmap_mux_ops,
1840 .parent_names = mmeson8b_vpu_0_1_parent_names, 1840 .parent_names = meson8b_vpu_0_1_parent_names,
1841 .num_parents = ARRAY_SIZE(mmeson8b_vpu_0_1_parent_names), 1841 .num_parents = ARRAY_SIZE(meson8b_vpu_0_1_parent_names),
1842 .flags = CLK_SET_RATE_PARENT, 1842 .flags = CLK_SET_RATE_PARENT,
1843 }, 1843 },
1844}; 1844};
diff --git a/drivers/clk/socfpga/clk-s10.c b/drivers/clk/socfpga/clk-s10.c
index 8281dfbf38c2..5bed36e12951 100644
--- a/drivers/clk/socfpga/clk-s10.c
+++ b/drivers/clk/socfpga/clk-s10.c
@@ -103,9 +103,9 @@ static const struct stratix10_perip_cnt_clock s10_main_perip_cnt_clks[] = {
103 { STRATIX10_NOC_CLK, "noc_clk", NULL, noc_mux, ARRAY_SIZE(noc_mux), 103 { STRATIX10_NOC_CLK, "noc_clk", NULL, noc_mux, ARRAY_SIZE(noc_mux),
104 0, 0, 0, 0x3C, 1}, 104 0, 0, 0, 0x3C, 1},
105 { STRATIX10_EMAC_A_FREE_CLK, "emaca_free_clk", NULL, emaca_free_mux, ARRAY_SIZE(emaca_free_mux), 105 { STRATIX10_EMAC_A_FREE_CLK, "emaca_free_clk", NULL, emaca_free_mux, ARRAY_SIZE(emaca_free_mux),
106 0, 0, 4, 0xB0, 0}, 106 0, 0, 2, 0xB0, 0},
107 { STRATIX10_EMAC_B_FREE_CLK, "emacb_free_clk", NULL, emacb_free_mux, ARRAY_SIZE(emacb_free_mux), 107 { STRATIX10_EMAC_B_FREE_CLK, "emacb_free_clk", NULL, emacb_free_mux, ARRAY_SIZE(emacb_free_mux),
108 0, 0, 4, 0xB0, 1}, 108 0, 0, 2, 0xB0, 1},
109 { STRATIX10_EMAC_PTP_FREE_CLK, "emac_ptp_free_clk", NULL, emac_ptp_free_mux, 109 { STRATIX10_EMAC_PTP_FREE_CLK, "emac_ptp_free_clk", NULL, emac_ptp_free_mux,
110 ARRAY_SIZE(emac_ptp_free_mux), 0, 0, 4, 0xB0, 2}, 110 ARRAY_SIZE(emac_ptp_free_mux), 0, 0, 4, 0xB0, 2},
111 { STRATIX10_GPIO_DB_FREE_CLK, "gpio_db_free_clk", NULL, gpio_db_free_mux, 111 { STRATIX10_GPIO_DB_FREE_CLK, "gpio_db_free_clk", NULL, gpio_db_free_mux,
diff --git a/drivers/clk/tegra/clk-tegra210.c b/drivers/clk/tegra/clk-tegra210.c
index e1ba62d2b1a0..ac1d27a8c650 100644
--- a/drivers/clk/tegra/clk-tegra210.c
+++ b/drivers/clk/tegra/clk-tegra210.c
@@ -3366,6 +3366,8 @@ static struct tegra_clk_init_table init_table[] __initdata = {
3366 { TEGRA210_CLK_I2S3_SYNC, TEGRA210_CLK_CLK_MAX, 24576000, 0 }, 3366 { TEGRA210_CLK_I2S3_SYNC, TEGRA210_CLK_CLK_MAX, 24576000, 0 },
3367 { TEGRA210_CLK_I2S4_SYNC, TEGRA210_CLK_CLK_MAX, 24576000, 0 }, 3367 { TEGRA210_CLK_I2S4_SYNC, TEGRA210_CLK_CLK_MAX, 24576000, 0 },
3368 { TEGRA210_CLK_VIMCLK_SYNC, TEGRA210_CLK_CLK_MAX, 24576000, 0 }, 3368 { TEGRA210_CLK_VIMCLK_SYNC, TEGRA210_CLK_CLK_MAX, 24576000, 0 },
3369 { TEGRA210_CLK_HDA, TEGRA210_CLK_PLL_P, 51000000, 0 },
3370 { TEGRA210_CLK_HDA2CODEC_2X, TEGRA210_CLK_PLL_P, 48000000, 0 },
3369 /* This MUST be the last entry. */ 3371 /* This MUST be the last entry. */
3370 { TEGRA210_CLK_CLK_MAX, TEGRA210_CLK_CLK_MAX, 0, 0 }, 3372 { TEGRA210_CLK_CLK_MAX, TEGRA210_CLK_CLK_MAX, 0, 0 },
3371}; 3373};
diff --git a/drivers/clk/ti/clkctrl.c b/drivers/clk/ti/clkctrl.c
index 8e834317c97d..975995eea15c 100644
--- a/drivers/clk/ti/clkctrl.c
+++ b/drivers/clk/ti/clkctrl.c
@@ -229,6 +229,7 @@ static struct clk_hw *_ti_omap4_clkctrl_xlate(struct of_phandle_args *clkspec,
229{ 229{
230 struct omap_clkctrl_provider *provider = data; 230 struct omap_clkctrl_provider *provider = data;
231 struct omap_clkctrl_clk *entry; 231 struct omap_clkctrl_clk *entry;
232 bool found = false;
232 233
233 if (clkspec->args_count != 2) 234 if (clkspec->args_count != 2)
234 return ERR_PTR(-EINVAL); 235 return ERR_PTR(-EINVAL);
@@ -238,11 +239,13 @@ static struct clk_hw *_ti_omap4_clkctrl_xlate(struct of_phandle_args *clkspec,
238 239
239 list_for_each_entry(entry, &provider->clocks, node) { 240 list_for_each_entry(entry, &provider->clocks, node) {
240 if (entry->reg_offset == clkspec->args[0] && 241 if (entry->reg_offset == clkspec->args[0] &&
241 entry->bit_offset == clkspec->args[1]) 242 entry->bit_offset == clkspec->args[1]) {
243 found = true;
242 break; 244 break;
245 }
243 } 246 }
244 247
245 if (!entry) 248 if (!found)
246 return ERR_PTR(-EINVAL); 249 return ERR_PTR(-EINVAL);
247 250
248 return entry->clk; 251 return entry->clk;
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index eac0c54c5970..b032d3899fa3 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -80,6 +80,7 @@
80#define HID_DEVICE_ID_ALPS_U1_DUAL_3BTN_PTP 0x1220 80#define HID_DEVICE_ID_ALPS_U1_DUAL_3BTN_PTP 0x1220
81#define HID_DEVICE_ID_ALPS_U1 0x1215 81#define HID_DEVICE_ID_ALPS_U1 0x1215
82#define HID_DEVICE_ID_ALPS_T4_BTNLESS 0x120C 82#define HID_DEVICE_ID_ALPS_T4_BTNLESS 0x120C
83#define HID_DEVICE_ID_ALPS_1222 0x1222
83 84
84 85
85#define USB_VENDOR_ID_AMI 0x046b 86#define USB_VENDOR_ID_AMI 0x046b
@@ -269,6 +270,7 @@
269#define USB_DEVICE_ID_CHICONY_MULTI_TOUCH 0xb19d 270#define USB_DEVICE_ID_CHICONY_MULTI_TOUCH 0xb19d
270#define USB_DEVICE_ID_CHICONY_WIRELESS 0x0618 271#define USB_DEVICE_ID_CHICONY_WIRELESS 0x0618
271#define USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE 0x1053 272#define USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE 0x1053
273#define USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE2 0x0939
272#define USB_DEVICE_ID_CHICONY_WIRELESS2 0x1123 274#define USB_DEVICE_ID_CHICONY_WIRELESS2 0x1123
273#define USB_DEVICE_ID_ASUS_AK1D 0x1125 275#define USB_DEVICE_ID_ASUS_AK1D 0x1125
274#define USB_DEVICE_ID_CHICONY_TOSHIBA_WT10A 0x1408 276#define USB_DEVICE_ID_CHICONY_TOSHIBA_WT10A 0x1408
@@ -569,6 +571,7 @@
569 571
570#define USB_VENDOR_ID_HUION 0x256c 572#define USB_VENDOR_ID_HUION 0x256c
571#define USB_DEVICE_ID_HUION_TABLET 0x006e 573#define USB_DEVICE_ID_HUION_TABLET 0x006e
574#define USB_DEVICE_ID_HUION_HS64 0x006d
572 575
573#define USB_VENDOR_ID_IBM 0x04b3 576#define USB_VENDOR_ID_IBM 0x04b3
574#define USB_DEVICE_ID_IBM_SCROLLPOINT_III 0x3100 577#define USB_DEVICE_ID_IBM_SCROLLPOINT_III 0x3100
diff --git a/drivers/hid/hid-logitech-dj.c b/drivers/hid/hid-logitech-dj.c
index e564bff86515..bfcf2ee58d14 100644
--- a/drivers/hid/hid-logitech-dj.c
+++ b/drivers/hid/hid-logitech-dj.c
@@ -30,6 +30,7 @@
30 30
31#define REPORT_ID_HIDPP_SHORT 0x10 31#define REPORT_ID_HIDPP_SHORT 0x10
32#define REPORT_ID_HIDPP_LONG 0x11 32#define REPORT_ID_HIDPP_LONG 0x11
33#define REPORT_ID_HIDPP_VERY_LONG 0x12
33 34
34#define HIDPP_REPORT_SHORT_LENGTH 7 35#define HIDPP_REPORT_SHORT_LENGTH 7
35#define HIDPP_REPORT_LONG_LENGTH 20 36#define HIDPP_REPORT_LONG_LENGTH 20
@@ -1242,7 +1243,8 @@ static int logi_dj_ll_raw_request(struct hid_device *hid,
1242 int ret; 1243 int ret;
1243 1244
1244 if ((buf[0] == REPORT_ID_HIDPP_SHORT) || 1245 if ((buf[0] == REPORT_ID_HIDPP_SHORT) ||
1245 (buf[0] == REPORT_ID_HIDPP_LONG)) { 1246 (buf[0] == REPORT_ID_HIDPP_LONG) ||
1247 (buf[0] == REPORT_ID_HIDPP_VERY_LONG)) {
1246 if (count < 2) 1248 if (count < 2)
1247 return -EINVAL; 1249 return -EINVAL;
1248 1250
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
index 5df5dd56ecc8..b603c14d043b 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c
@@ -1776,6 +1776,10 @@ static const struct hid_device_id mt_devices[] = {
1776 HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8, 1776 HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
1777 USB_VENDOR_ID_ALPS_JP, 1777 USB_VENDOR_ID_ALPS_JP,
1778 HID_DEVICE_ID_ALPS_U1_DUAL_3BTN_PTP) }, 1778 HID_DEVICE_ID_ALPS_U1_DUAL_3BTN_PTP) },
1779 { .driver_data = MT_CLS_WIN_8_DUAL,
1780 HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
1781 USB_VENDOR_ID_ALPS_JP,
1782 HID_DEVICE_ID_ALPS_1222) },
1779 1783
1780 /* Lenovo X1 TAB Gen 2 */ 1784 /* Lenovo X1 TAB Gen 2 */
1781 { .driver_data = MT_CLS_WIN_8_DUAL, 1785 { .driver_data = MT_CLS_WIN_8_DUAL,
diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
index e5ca6fe2ca57..671a285724f9 100644
--- a/drivers/hid/hid-quirks.c
+++ b/drivers/hid/hid-quirks.c
@@ -42,6 +42,7 @@ static const struct hid_device_id hid_quirks[] = {
42 { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM), HID_QUIRK_NOGET }, 42 { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM), HID_QUIRK_NOGET },
43 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_MULTI_TOUCH), HID_QUIRK_MULTI_INPUT }, 43 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_MULTI_TOUCH), HID_QUIRK_MULTI_INPUT },
44 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE), HID_QUIRK_ALWAYS_POLL }, 44 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE), HID_QUIRK_ALWAYS_POLL },
45 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE2), HID_QUIRK_ALWAYS_POLL },
45 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS), HID_QUIRK_MULTI_INPUT }, 46 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS), HID_QUIRK_MULTI_INPUT },
46 { HID_USB_DEVICE(USB_VENDOR_ID_CHIC, USB_DEVICE_ID_CHIC_GAMEPAD), HID_QUIRK_BADPAD }, 47 { HID_USB_DEVICE(USB_VENDOR_ID_CHIC, USB_DEVICE_ID_CHIC_GAMEPAD), HID_QUIRK_BADPAD },
47 { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_3AXIS_5BUTTON_STICK), HID_QUIRK_NOGET }, 48 { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_3AXIS_5BUTTON_STICK), HID_QUIRK_NOGET },
diff --git a/drivers/hid/hid-uclogic-core.c b/drivers/hid/hid-uclogic-core.c
index 8fe02d81265d..914fb527ae7a 100644
--- a/drivers/hid/hid-uclogic-core.c
+++ b/drivers/hid/hid-uclogic-core.c
@@ -369,6 +369,8 @@ static const struct hid_device_id uclogic_devices[] = {
369 USB_DEVICE_ID_UCLOGIC_TABLET_TWHA60) }, 369 USB_DEVICE_ID_UCLOGIC_TABLET_TWHA60) },
370 { HID_USB_DEVICE(USB_VENDOR_ID_HUION, 370 { HID_USB_DEVICE(USB_VENDOR_ID_HUION,
371 USB_DEVICE_ID_HUION_TABLET) }, 371 USB_DEVICE_ID_HUION_TABLET) },
372 { HID_USB_DEVICE(USB_VENDOR_ID_HUION,
373 USB_DEVICE_ID_HUION_HS64) },
372 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, 374 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC,
373 USB_DEVICE_ID_HUION_TABLET) }, 375 USB_DEVICE_ID_HUION_TABLET) },
374 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, 376 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC,
diff --git a/drivers/hid/hid-uclogic-params.c b/drivers/hid/hid-uclogic-params.c
index 0187c9f8fc22..273d784fff66 100644
--- a/drivers/hid/hid-uclogic-params.c
+++ b/drivers/hid/hid-uclogic-params.c
@@ -977,6 +977,8 @@ int uclogic_params_init(struct uclogic_params *params,
977 /* FALL THROUGH */ 977 /* FALL THROUGH */
978 case VID_PID(USB_VENDOR_ID_HUION, 978 case VID_PID(USB_VENDOR_ID_HUION,
979 USB_DEVICE_ID_HUION_TABLET): 979 USB_DEVICE_ID_HUION_TABLET):
980 case VID_PID(USB_VENDOR_ID_HUION,
981 USB_DEVICE_ID_HUION_HS64):
980 case VID_PID(USB_VENDOR_ID_UCLOGIC, 982 case VID_PID(USB_VENDOR_ID_UCLOGIC,
981 USB_DEVICE_ID_HUION_TABLET): 983 USB_DEVICE_ID_HUION_TABLET):
982 case VID_PID(USB_VENDOR_ID_UCLOGIC, 984 case VID_PID(USB_VENDOR_ID_UCLOGIC,
diff --git a/drivers/hid/intel-ish-hid/ishtp-fw-loader.c b/drivers/hid/intel-ish-hid/ishtp-fw-loader.c
index 22ba21457035..aa2dbed30fc3 100644
--- a/drivers/hid/intel-ish-hid/ishtp-fw-loader.c
+++ b/drivers/hid/intel-ish-hid/ishtp-fw-loader.c
@@ -816,9 +816,9 @@ static int load_fw_from_host(struct ishtp_cl_data *client_data)
816 goto end_err_fw_release; 816 goto end_err_fw_release;
817 817
818 release_firmware(fw); 818 release_firmware(fw);
819 kfree(filename);
820 dev_info(cl_data_to_dev(client_data), "ISH firmware %s loaded\n", 819 dev_info(cl_data_to_dev(client_data), "ISH firmware %s loaded\n",
821 filename); 820 filename);
821 kfree(filename);
822 return 0; 822 return 0;
823 823
824end_err_fw_release: 824end_err_fw_release:
diff --git a/drivers/hid/intel-ish-hid/ishtp-hid-client.c b/drivers/hid/intel-ish-hid/ishtp-hid-client.c
index c0487b34d2cf..6ba944b40fdb 100644
--- a/drivers/hid/intel-ish-hid/ishtp-hid-client.c
+++ b/drivers/hid/intel-ish-hid/ishtp-hid-client.c
@@ -891,7 +891,7 @@ static int hid_ishtp_cl_reset(struct ishtp_cl_device *cl_device)
891 */ 891 */
892static int hid_ishtp_cl_suspend(struct device *device) 892static int hid_ishtp_cl_suspend(struct device *device)
893{ 893{
894 struct ishtp_cl_device *cl_device = dev_get_drvdata(device); 894 struct ishtp_cl_device *cl_device = ishtp_dev_to_cl_device(device);
895 struct ishtp_cl *hid_ishtp_cl = ishtp_get_drvdata(cl_device); 895 struct ishtp_cl *hid_ishtp_cl = ishtp_get_drvdata(cl_device);
896 struct ishtp_cl_data *client_data = ishtp_get_client_data(hid_ishtp_cl); 896 struct ishtp_cl_data *client_data = ishtp_get_client_data(hid_ishtp_cl);
897 897
@@ -912,7 +912,7 @@ static int hid_ishtp_cl_suspend(struct device *device)
912 */ 912 */
913static int hid_ishtp_cl_resume(struct device *device) 913static int hid_ishtp_cl_resume(struct device *device)
914{ 914{
915 struct ishtp_cl_device *cl_device = dev_get_drvdata(device); 915 struct ishtp_cl_device *cl_device = ishtp_dev_to_cl_device(device);
916 struct ishtp_cl *hid_ishtp_cl = ishtp_get_drvdata(cl_device); 916 struct ishtp_cl *hid_ishtp_cl = ishtp_get_drvdata(cl_device);
917 struct ishtp_cl_data *client_data = ishtp_get_client_data(hid_ishtp_cl); 917 struct ishtp_cl_data *client_data = ishtp_get_client_data(hid_ishtp_cl);
918 918
diff --git a/drivers/hid/intel-ish-hid/ishtp/bus.c b/drivers/hid/intel-ish-hid/ishtp/bus.c
index 794e700d65f7..c47c3328a0f4 100644
--- a/drivers/hid/intel-ish-hid/ishtp/bus.c
+++ b/drivers/hid/intel-ish-hid/ishtp/bus.c
@@ -471,7 +471,6 @@ static struct ishtp_cl_device *ishtp_bus_add_device(struct ishtp_device *dev,
471 } 471 }
472 472
473 ishtp_device_ready = true; 473 ishtp_device_ready = true;
474 dev_set_drvdata(&device->dev, device);
475 474
476 return device; 475 return device;
477} 476}
@@ -640,6 +639,20 @@ void *ishtp_get_drvdata(struct ishtp_cl_device *cl_device)
640EXPORT_SYMBOL(ishtp_get_drvdata); 639EXPORT_SYMBOL(ishtp_get_drvdata);
641 640
642/** 641/**
642 * ishtp_dev_to_cl_device() - get ishtp_cl_device instance from device instance
643 * @device: device instance
644 *
645 * Get ish_cl_device instance which embeds device instance in it.
646 *
647 * Return: pointer to ishtp_cl_device instance
648 */
649struct ishtp_cl_device *ishtp_dev_to_cl_device(struct device *device)
650{
651 return to_ishtp_cl_device(device);
652}
653EXPORT_SYMBOL(ishtp_dev_to_cl_device);
654
655/**
643 * ishtp_bus_new_client() - Create a new client 656 * ishtp_bus_new_client() - Create a new client
644 * @dev: ISHTP device instance 657 * @dev: ISHTP device instance
645 * 658 *
diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
index 56297298d6ee..162b3236e72c 100644
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -2504,7 +2504,6 @@ static struct dmar_domain *dmar_insert_one_dev_info(struct intel_iommu *iommu,
2504 } 2504 }
2505 } 2505 }
2506 2506
2507 spin_lock(&iommu->lock);
2508 spin_lock_irqsave(&device_domain_lock, flags); 2507 spin_lock_irqsave(&device_domain_lock, flags);
2509 if (dev) 2508 if (dev)
2510 found = find_domain(dev); 2509 found = find_domain(dev);
@@ -2520,16 +2519,17 @@ static struct dmar_domain *dmar_insert_one_dev_info(struct intel_iommu *iommu,
2520 2519
2521 if (found) { 2520 if (found) {
2522 spin_unlock_irqrestore(&device_domain_lock, flags); 2521 spin_unlock_irqrestore(&device_domain_lock, flags);
2523 spin_unlock(&iommu->lock);
2524 free_devinfo_mem(info); 2522 free_devinfo_mem(info);
2525 /* Caller must free the original domain */ 2523 /* Caller must free the original domain */
2526 return found; 2524 return found;
2527 } 2525 }
2528 2526
2527 spin_lock(&iommu->lock);
2529 ret = domain_attach_iommu(domain, iommu); 2528 ret = domain_attach_iommu(domain, iommu);
2529 spin_unlock(&iommu->lock);
2530
2530 if (ret) { 2531 if (ret) {
2531 spin_unlock_irqrestore(&device_domain_lock, flags); 2532 spin_unlock_irqrestore(&device_domain_lock, flags);
2532 spin_unlock(&iommu->lock);
2533 free_devinfo_mem(info); 2533 free_devinfo_mem(info);
2534 return NULL; 2534 return NULL;
2535 } 2535 }
@@ -2539,7 +2539,6 @@ static struct dmar_domain *dmar_insert_one_dev_info(struct intel_iommu *iommu,
2539 if (dev) 2539 if (dev)
2540 dev->archdata.iommu = info; 2540 dev->archdata.iommu = info;
2541 spin_unlock_irqrestore(&device_domain_lock, flags); 2541 spin_unlock_irqrestore(&device_domain_lock, flags);
2542 spin_unlock(&iommu->lock);
2543 2542
2544 /* PASID table is mandatory for a PCI device in scalable mode. */ 2543 /* PASID table is mandatory for a PCI device in scalable mode. */
2545 if (dev && dev_is_pci(dev) && sm_supported(iommu)) { 2544 if (dev && dev_is_pci(dev) && sm_supported(iommu)) {
diff --git a/drivers/md/dm-init.c b/drivers/md/dm-init.c
index 352e803f566e..728733a514c7 100644
--- a/drivers/md/dm-init.c
+++ b/drivers/md/dm-init.c
@@ -140,8 +140,8 @@ static char __init *dm_parse_table_entry(struct dm_device *dev, char *str)
140 return ERR_PTR(-EINVAL); 140 return ERR_PTR(-EINVAL);
141 } 141 }
142 /* target_args */ 142 /* target_args */
143 dev->target_args_array[n] = kstrndup(field[3], GFP_KERNEL, 143 dev->target_args_array[n] = kstrndup(field[3], DM_MAX_STR_SIZE,
144 DM_MAX_STR_SIZE); 144 GFP_KERNEL);
145 if (!dev->target_args_array[n]) 145 if (!dev->target_args_array[n])
146 return ERR_PTR(-ENOMEM); 146 return ERR_PTR(-ENOMEM);
147 147
@@ -272,10 +272,10 @@ static int __init dm_init_init(void)
272 return 0; 272 return 0;
273 273
274 if (strlen(create) >= DM_MAX_STR_SIZE) { 274 if (strlen(create) >= DM_MAX_STR_SIZE) {
275 DMERR("Argument is too big. Limit is %d\n", DM_MAX_STR_SIZE); 275 DMERR("Argument is too big. Limit is %d", DM_MAX_STR_SIZE);
276 return -EINVAL; 276 return -EINVAL;
277 } 277 }
278 str = kstrndup(create, GFP_KERNEL, DM_MAX_STR_SIZE); 278 str = kstrndup(create, DM_MAX_STR_SIZE, GFP_KERNEL);
279 if (!str) 279 if (!str)
280 return -ENOMEM; 280 return -ENOMEM;
281 281
@@ -283,7 +283,7 @@ static int __init dm_init_init(void)
283 if (r) 283 if (r)
284 goto out; 284 goto out;
285 285
286 DMINFO("waiting for all devices to be available before creating mapped devices\n"); 286 DMINFO("waiting for all devices to be available before creating mapped devices");
287 wait_for_device_probe(); 287 wait_for_device_probe();
288 288
289 list_for_each_entry(dev, &devices, list) { 289 list_for_each_entry(dev, &devices, list) {
diff --git a/drivers/md/dm-log-writes.c b/drivers/md/dm-log-writes.c
index 9ea2b0291f20..e549392e0ea5 100644
--- a/drivers/md/dm-log-writes.c
+++ b/drivers/md/dm-log-writes.c
@@ -60,6 +60,7 @@
60 60
61#define WRITE_LOG_VERSION 1ULL 61#define WRITE_LOG_VERSION 1ULL
62#define WRITE_LOG_MAGIC 0x6a736677736872ULL 62#define WRITE_LOG_MAGIC 0x6a736677736872ULL
63#define WRITE_LOG_SUPER_SECTOR 0
63 64
64/* 65/*
65 * The disk format for this is braindead simple. 66 * The disk format for this is braindead simple.
@@ -115,6 +116,7 @@ struct log_writes_c {
115 struct list_head logging_blocks; 116 struct list_head logging_blocks;
116 wait_queue_head_t wait; 117 wait_queue_head_t wait;
117 struct task_struct *log_kthread; 118 struct task_struct *log_kthread;
119 struct completion super_done;
118}; 120};
119 121
120struct pending_block { 122struct pending_block {
@@ -180,6 +182,14 @@ static void log_end_io(struct bio *bio)
180 bio_put(bio); 182 bio_put(bio);
181} 183}
182 184
185static void log_end_super(struct bio *bio)
186{
187 struct log_writes_c *lc = bio->bi_private;
188
189 complete(&lc->super_done);
190 log_end_io(bio);
191}
192
183/* 193/*
184 * Meant to be called if there is an error, it will free all the pages 194 * Meant to be called if there is an error, it will free all the pages
185 * associated with the block. 195 * associated with the block.
@@ -215,7 +225,8 @@ static int write_metadata(struct log_writes_c *lc, void *entry,
215 bio->bi_iter.bi_size = 0; 225 bio->bi_iter.bi_size = 0;
216 bio->bi_iter.bi_sector = sector; 226 bio->bi_iter.bi_sector = sector;
217 bio_set_dev(bio, lc->logdev->bdev); 227 bio_set_dev(bio, lc->logdev->bdev);
218 bio->bi_end_io = log_end_io; 228 bio->bi_end_io = (sector == WRITE_LOG_SUPER_SECTOR) ?
229 log_end_super : log_end_io;
219 bio->bi_private = lc; 230 bio->bi_private = lc;
220 bio_set_op_attrs(bio, REQ_OP_WRITE, 0); 231 bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
221 232
@@ -418,11 +429,18 @@ static int log_super(struct log_writes_c *lc)
418 super.nr_entries = cpu_to_le64(lc->logged_entries); 429 super.nr_entries = cpu_to_le64(lc->logged_entries);
419 super.sectorsize = cpu_to_le32(lc->sectorsize); 430 super.sectorsize = cpu_to_le32(lc->sectorsize);
420 431
421 if (write_metadata(lc, &super, sizeof(super), NULL, 0, 0)) { 432 if (write_metadata(lc, &super, sizeof(super), NULL, 0,
433 WRITE_LOG_SUPER_SECTOR)) {
422 DMERR("Couldn't write super"); 434 DMERR("Couldn't write super");
423 return -1; 435 return -1;
424 } 436 }
425 437
438 /*
439 * Super sector should be writen in-order, otherwise the
440 * nr_entries could be rewritten incorrectly by an old bio.
441 */
442 wait_for_completion_io(&lc->super_done);
443
426 return 0; 444 return 0;
427} 445}
428 446
@@ -531,6 +549,7 @@ static int log_writes_ctr(struct dm_target *ti, unsigned int argc, char **argv)
531 INIT_LIST_HEAD(&lc->unflushed_blocks); 549 INIT_LIST_HEAD(&lc->unflushed_blocks);
532 INIT_LIST_HEAD(&lc->logging_blocks); 550 INIT_LIST_HEAD(&lc->logging_blocks);
533 init_waitqueue_head(&lc->wait); 551 init_waitqueue_head(&lc->wait);
552 init_completion(&lc->super_done);
534 atomic_set(&lc->io_blocks, 0); 553 atomic_set(&lc->io_blocks, 0);
535 atomic_set(&lc->pending_blocks, 0); 554 atomic_set(&lc->pending_blocks, 0);
536 555
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
index 350cf0451456..ec8b27e20de3 100644
--- a/drivers/md/dm-table.c
+++ b/drivers/md/dm-table.c
@@ -561,7 +561,7 @@ static char **realloc_argv(unsigned *size, char **old_argv)
561 gfp = GFP_NOIO; 561 gfp = GFP_NOIO;
562 } 562 }
563 argv = kmalloc_array(new_size, sizeof(*argv), gfp); 563 argv = kmalloc_array(new_size, sizeof(*argv), gfp);
564 if (argv) { 564 if (argv && old_argv) {
565 memcpy(argv, old_argv, *size * sizeof(*argv)); 565 memcpy(argv, old_argv, *size * sizeof(*argv));
566 *size = new_size; 566 *size = new_size;
567 } 567 }
diff --git a/drivers/md/dm-verity-target.c b/drivers/md/dm-verity-target.c
index 720d06531aa3..ea24ff0612e3 100644
--- a/drivers/md/dm-verity-target.c
+++ b/drivers/md/dm-verity-target.c
@@ -235,8 +235,8 @@ static int verity_handle_err(struct dm_verity *v, enum verity_block_type type,
235 BUG(); 235 BUG();
236 } 236 }
237 237
238 DMERR("%s: %s block %llu is corrupted", v->data_dev->name, type_str, 238 DMERR_LIMIT("%s: %s block %llu is corrupted", v->data_dev->name,
239 block); 239 type_str, block);
240 240
241 if (v->corrupted_errs == DM_VERITY_MAX_CORRUPTED_ERRS) 241 if (v->corrupted_errs == DM_VERITY_MAX_CORRUPTED_ERRS)
242 DMERR("%s: reached maximum errors", v->data_dev->name); 242 DMERR("%s: reached maximum errors", v->data_dev->name);
diff --git a/drivers/mfd/stmfx.c b/drivers/mfd/stmfx.c
index fe8efba2d45f..857991cb3cbb 100644
--- a/drivers/mfd/stmfx.c
+++ b/drivers/mfd/stmfx.c
@@ -204,12 +204,11 @@ static struct irq_chip stmfx_irq_chip = {
204static irqreturn_t stmfx_irq_handler(int irq, void *data) 204static irqreturn_t stmfx_irq_handler(int irq, void *data)
205{ 205{
206 struct stmfx *stmfx = data; 206 struct stmfx *stmfx = data;
207 unsigned long n, pending; 207 unsigned long bits;
208 u32 ack; 208 u32 pending, ack;
209 int ret; 209 int n, ret;
210 210
211 ret = regmap_read(stmfx->map, STMFX_REG_IRQ_PENDING, 211 ret = regmap_read(stmfx->map, STMFX_REG_IRQ_PENDING, &pending);
212 (u32 *)&pending);
213 if (ret) 212 if (ret)
214 return IRQ_NONE; 213 return IRQ_NONE;
215 214
@@ -224,7 +223,8 @@ static irqreturn_t stmfx_irq_handler(int irq, void *data)
224 return IRQ_NONE; 223 return IRQ_NONE;
225 } 224 }
226 225
227 for_each_set_bit(n, &pending, STMFX_REG_IRQ_SRC_MAX) 226 bits = pending;
227 for_each_set_bit(n, &bits, STMFX_REG_IRQ_SRC_MAX)
228 handle_nested_irq(irq_find_mapping(stmfx->irq_domain, n)); 228 handle_nested_irq(irq_find_mapping(stmfx->irq_domain, n));
229 229
230 return IRQ_HANDLED; 230 return IRQ_HANDLED;
diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c
index b5b68aa16eb3..6eb131292eb2 100644
--- a/drivers/mtd/nand/raw/nand_base.c
+++ b/drivers/mtd/nand/raw/nand_base.c
@@ -4662,7 +4662,6 @@ static int nand_detect(struct nand_chip *chip, struct nand_flash_dev *type)
4662 memorg = nanddev_get_memorg(&chip->base); 4662 memorg = nanddev_get_memorg(&chip->base);
4663 memorg->planes_per_lun = 1; 4663 memorg->planes_per_lun = 1;
4664 memorg->luns_per_target = 1; 4664 memorg->luns_per_target = 1;
4665 memorg->ntargets = 1;
4666 4665
4667 /* 4666 /*
4668 * Reset the chip, required by some chips (e.g. Micron MT29FxGxxxxx) 4667 * Reset the chip, required by some chips (e.g. Micron MT29FxGxxxxx)
@@ -5027,6 +5026,8 @@ static int nand_scan_ident(struct nand_chip *chip, unsigned int maxchips,
5027 if (ret) 5026 if (ret)
5028 return ret; 5027 return ret;
5029 5028
5029 memorg->ntargets = maxchips;
5030
5030 /* Read the flash type */ 5031 /* Read the flash type */
5031 ret = nand_detect(chip, table); 5032 ret = nand_detect(chip, table);
5032 if (ret) { 5033 if (ret) {
diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
index 73172d7f512b..0c2ec1c21434 100644
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
@@ -1636,6 +1636,95 @@ static int sr2_bit7_quad_enable(struct spi_nor *nor)
1636 return 0; 1636 return 0;
1637} 1637}
1638 1638
1639/**
1640 * spi_nor_clear_sr_bp() - clear the Status Register Block Protection bits.
1641 * @nor: pointer to a 'struct spi_nor'
1642 *
1643 * Read-modify-write function that clears the Block Protection bits from the
1644 * Status Register without affecting other bits.
1645 *
1646 * Return: 0 on success, -errno otherwise.
1647 */
1648static int spi_nor_clear_sr_bp(struct spi_nor *nor)
1649{
1650 int ret;
1651 u8 mask = SR_BP2 | SR_BP1 | SR_BP0;
1652
1653 ret = read_sr(nor);
1654 if (ret < 0) {
1655 dev_err(nor->dev, "error while reading status register\n");
1656 return ret;
1657 }
1658
1659 write_enable(nor);
1660
1661 ret = write_sr(nor, ret & ~mask);
1662 if (ret) {
1663 dev_err(nor->dev, "write to status register failed\n");
1664 return ret;
1665 }
1666
1667 ret = spi_nor_wait_till_ready(nor);
1668 if (ret)
1669 dev_err(nor->dev, "timeout while writing status register\n");
1670 return ret;
1671}
1672
1673/**
1674 * spi_nor_spansion_clear_sr_bp() - clear the Status Register Block Protection
1675 * bits on spansion flashes.
1676 * @nor: pointer to a 'struct spi_nor'
1677 *
1678 * Read-modify-write function that clears the Block Protection bits from the
1679 * Status Register without affecting other bits. The function is tightly
1680 * coupled with the spansion_quad_enable() function. Both assume that the Write
1681 * Register with 16 bits, together with the Read Configuration Register (35h)
1682 * instructions are supported.
1683 *
1684 * Return: 0 on success, -errno otherwise.
1685 */
1686static int spi_nor_spansion_clear_sr_bp(struct spi_nor *nor)
1687{
1688 int ret;
1689 u8 mask = SR_BP2 | SR_BP1 | SR_BP0;
1690 u8 sr_cr[2] = {0};
1691
1692 /* Check current Quad Enable bit value. */
1693 ret = read_cr(nor);
1694 if (ret < 0) {
1695 dev_err(nor->dev,
1696 "error while reading configuration register\n");
1697 return ret;
1698 }
1699
1700 /*
1701 * When the configuration register Quad Enable bit is one, only the
1702 * Write Status (01h) command with two data bytes may be used.
1703 */
1704 if (ret & CR_QUAD_EN_SPAN) {
1705 sr_cr[1] = ret;
1706
1707 ret = read_sr(nor);
1708 if (ret < 0) {
1709 dev_err(nor->dev,
1710 "error while reading status register\n");
1711 return ret;
1712 }
1713 sr_cr[0] = ret & ~mask;
1714
1715 ret = write_sr_cr(nor, sr_cr);
1716 if (ret)
1717 dev_err(nor->dev, "16-bit write register failed\n");
1718 return ret;
1719 }
1720
1721 /*
1722 * If the Quad Enable bit is zero, use the Write Status (01h) command
1723 * with one data byte.
1724 */
1725 return spi_nor_clear_sr_bp(nor);
1726}
1727
1639/* Used when the "_ext_id" is two bytes at most */ 1728/* Used when the "_ext_id" is two bytes at most */
1640#define INFO(_jedec_id, _ext_id, _sector_size, _n_sectors, _flags) \ 1729#define INFO(_jedec_id, _ext_id, _sector_size, _n_sectors, _flags) \
1641 .id = { \ 1730 .id = { \
@@ -3660,6 +3749,8 @@ static int spi_nor_init_params(struct spi_nor *nor,
3660 default: 3749 default:
3661 /* Kept only for backward compatibility purpose. */ 3750 /* Kept only for backward compatibility purpose. */
3662 params->quad_enable = spansion_quad_enable; 3751 params->quad_enable = spansion_quad_enable;
3752 if (nor->clear_sr_bp)
3753 nor->clear_sr_bp = spi_nor_spansion_clear_sr_bp;
3663 break; 3754 break;
3664 } 3755 }
3665 3756
@@ -3912,17 +4003,13 @@ static int spi_nor_init(struct spi_nor *nor)
3912{ 4003{
3913 int err; 4004 int err;
3914 4005
3915 /* 4006 if (nor->clear_sr_bp) {
3916 * Atmel, SST, Intel/Numonyx, and others serial NOR tend to power up 4007 err = nor->clear_sr_bp(nor);
3917 * with the software protection bits set 4008 if (err) {
3918 */ 4009 dev_err(nor->dev,
3919 if (JEDEC_MFR(nor->info) == SNOR_MFR_ATMEL || 4010 "fail to clear block protection bits\n");
3920 JEDEC_MFR(nor->info) == SNOR_MFR_INTEL || 4011 return err;
3921 JEDEC_MFR(nor->info) == SNOR_MFR_SST || 4012 }
3922 nor->info->flags & SPI_NOR_HAS_LOCK) {
3923 write_enable(nor);
3924 write_sr(nor, 0);
3925 spi_nor_wait_till_ready(nor);
3926 } 4013 }
3927 4014
3928 if (nor->quad_enable) { 4015 if (nor->quad_enable) {
@@ -4047,6 +4134,16 @@ int spi_nor_scan(struct spi_nor *nor, const char *name,
4047 if (info->flags & SPI_S3AN) 4134 if (info->flags & SPI_S3AN)
4048 nor->flags |= SNOR_F_READY_XSR_RDY; 4135 nor->flags |= SNOR_F_READY_XSR_RDY;
4049 4136
4137 /*
4138 * Atmel, SST, Intel/Numonyx, and others serial NOR tend to power up
4139 * with the software protection bits set.
4140 */
4141 if (JEDEC_MFR(nor->info) == SNOR_MFR_ATMEL ||
4142 JEDEC_MFR(nor->info) == SNOR_MFR_INTEL ||
4143 JEDEC_MFR(nor->info) == SNOR_MFR_SST ||
4144 nor->info->flags & SPI_NOR_HAS_LOCK)
4145 nor->clear_sr_bp = spi_nor_clear_sr_bp;
4146
4050 /* Parse the Serial Flash Discoverable Parameters table. */ 4147 /* Parse the Serial Flash Discoverable Parameters table. */
4051 ret = spi_nor_init_params(nor, &params); 4148 ret = spi_nor_init_params(nor, &params);
4052 if (ret) 4149 if (ret)
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 4f5b3baf04c3..a30595955a37 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -4304,12 +4304,12 @@ void bond_setup(struct net_device *bond_dev)
4304 bond_dev->features |= NETIF_F_NETNS_LOCAL; 4304 bond_dev->features |= NETIF_F_NETNS_LOCAL;
4305 4305
4306 bond_dev->hw_features = BOND_VLAN_FEATURES | 4306 bond_dev->hw_features = BOND_VLAN_FEATURES |
4307 NETIF_F_HW_VLAN_CTAG_TX |
4308 NETIF_F_HW_VLAN_CTAG_RX | 4307 NETIF_F_HW_VLAN_CTAG_RX |
4309 NETIF_F_HW_VLAN_CTAG_FILTER; 4308 NETIF_F_HW_VLAN_CTAG_FILTER;
4310 4309
4311 bond_dev->hw_features |= NETIF_F_GSO_ENCAP_ALL | NETIF_F_GSO_UDP_L4; 4310 bond_dev->hw_features |= NETIF_F_GSO_ENCAP_ALL | NETIF_F_GSO_UDP_L4;
4312 bond_dev->features |= bond_dev->hw_features; 4311 bond_dev->features |= bond_dev->hw_features;
4312 bond_dev->features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_STAG_TX;
4313} 4313}
4314 4314
4315/* Destroy a bonding device. 4315/* Destroy a bonding device.
diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c
index deb4b6d321b8..a3d2d67894bd 100644
--- a/drivers/net/dsa/microchip/ksz_common.c
+++ b/drivers/net/dsa/microchip/ksz_common.c
@@ -433,9 +433,9 @@ int ksz_switch_register(struct ksz_device *dev,
433 return PTR_ERR(dev->reset_gpio); 433 return PTR_ERR(dev->reset_gpio);
434 434
435 if (dev->reset_gpio) { 435 if (dev->reset_gpio) {
436 gpiod_set_value(dev->reset_gpio, 1); 436 gpiod_set_value_cansleep(dev->reset_gpio, 1);
437 mdelay(10); 437 mdelay(10);
438 gpiod_set_value(dev->reset_gpio, 0); 438 gpiod_set_value_cansleep(dev->reset_gpio, 0);
439 } 439 }
440 440
441 mutex_init(&dev->dev_mutex); 441 mutex_init(&dev->dev_mutex);
@@ -485,7 +485,7 @@ void ksz_switch_remove(struct ksz_device *dev)
485 dsa_unregister_switch(dev->ds); 485 dsa_unregister_switch(dev->ds);
486 486
487 if (dev->reset_gpio) 487 if (dev->reset_gpio)
488 gpiod_set_value(dev->reset_gpio, 1); 488 gpiod_set_value_cansleep(dev->reset_gpio, 1);
489 489
490} 490}
491EXPORT_SYMBOL(ksz_switch_remove); 491EXPORT_SYMBOL(ksz_switch_remove);
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_filters.c b/drivers/net/ethernet/aquantia/atlantic/aq_filters.c
index 04a4cb7cfcc5..440690b18734 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_filters.c
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_filters.c
@@ -843,9 +843,14 @@ int aq_filters_vlans_update(struct aq_nic_s *aq_nic)
843 return err; 843 return err;
844 844
845 if (aq_nic->ndev->features & NETIF_F_HW_VLAN_CTAG_FILTER) { 845 if (aq_nic->ndev->features & NETIF_F_HW_VLAN_CTAG_FILTER) {
846 if (hweight < AQ_VLAN_MAX_FILTERS) 846 if (hweight < AQ_VLAN_MAX_FILTERS && hweight > 0) {
847 err = aq_hw_ops->hw_filter_vlan_ctrl(aq_hw, true); 847 err = aq_hw_ops->hw_filter_vlan_ctrl(aq_hw,
848 !(aq_nic->packet_filter & IFF_PROMISC));
849 aq_nic->aq_nic_cfg.is_vlan_force_promisc = false;
850 } else {
848 /* otherwise left in promiscue mode */ 851 /* otherwise left in promiscue mode */
852 aq_nic->aq_nic_cfg.is_vlan_force_promisc = true;
853 }
849 } 854 }
850 855
851 return err; 856 return err;
@@ -866,6 +871,7 @@ int aq_filters_vlan_offload_off(struct aq_nic_s *aq_nic)
866 if (unlikely(!aq_hw_ops->hw_filter_vlan_ctrl)) 871 if (unlikely(!aq_hw_ops->hw_filter_vlan_ctrl))
867 return -EOPNOTSUPP; 872 return -EOPNOTSUPP;
868 873
874 aq_nic->aq_nic_cfg.is_vlan_force_promisc = true;
869 err = aq_hw_ops->hw_filter_vlan_ctrl(aq_hw, false); 875 err = aq_hw_ops->hw_filter_vlan_ctrl(aq_hw, false);
870 if (err) 876 if (err)
871 return err; 877 return err;
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
index 746f85e6de13..e1392766e21e 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
@@ -128,6 +128,7 @@ void aq_nic_cfg_start(struct aq_nic_s *self)
128 cfg->features = cfg->aq_hw_caps->hw_features; 128 cfg->features = cfg->aq_hw_caps->hw_features;
129 cfg->is_vlan_rx_strip = !!(cfg->features & NETIF_F_HW_VLAN_CTAG_RX); 129 cfg->is_vlan_rx_strip = !!(cfg->features & NETIF_F_HW_VLAN_CTAG_RX);
130 cfg->is_vlan_tx_insert = !!(cfg->features & NETIF_F_HW_VLAN_CTAG_TX); 130 cfg->is_vlan_tx_insert = !!(cfg->features & NETIF_F_HW_VLAN_CTAG_TX);
131 cfg->is_vlan_force_promisc = true;
131} 132}
132 133
133static int aq_nic_update_link_status(struct aq_nic_s *self) 134static int aq_nic_update_link_status(struct aq_nic_s *self)
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.h b/drivers/net/ethernet/aquantia/atlantic/aq_nic.h
index 26c72f298684..255b54a6ae07 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.h
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.h
@@ -37,6 +37,7 @@ struct aq_nic_cfg_s {
37 u32 wol; 37 u32 wol;
38 u8 is_vlan_rx_strip; 38 u8 is_vlan_rx_strip;
39 u8 is_vlan_tx_insert; 39 u8 is_vlan_tx_insert;
40 bool is_vlan_force_promisc;
40 u16 is_mc_list_enabled; 41 u16 is_mc_list_enabled;
41 u16 mc_list_count; 42 u16 mc_list_count;
42 bool is_autoneg; 43 bool is_autoneg;
diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
index 1d216757bb9d..30f7fc4c97ff 100644
--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
+++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
@@ -808,8 +808,15 @@ static int hw_atl_b0_hw_packet_filter_set(struct aq_hw_s *self,
808 unsigned int packet_filter) 808 unsigned int packet_filter)
809{ 809{
810 unsigned int i = 0U; 810 unsigned int i = 0U;
811 struct aq_nic_cfg_s *cfg = self->aq_nic_cfg;
812
813 hw_atl_rpfl2promiscuous_mode_en_set(self,
814 IS_FILTER_ENABLED(IFF_PROMISC));
815
816 hw_atl_rpf_vlan_prom_mode_en_set(self,
817 IS_FILTER_ENABLED(IFF_PROMISC) ||
818 cfg->is_vlan_force_promisc);
811 819
812 hw_atl_rpfl2promiscuous_mode_en_set(self, IS_FILTER_ENABLED(IFF_PROMISC));
813 hw_atl_rpfl2multicast_flr_en_set(self, 820 hw_atl_rpfl2multicast_flr_en_set(self,
814 IS_FILTER_ENABLED(IFF_ALLMULTI), 0); 821 IS_FILTER_ENABLED(IFF_ALLMULTI), 0);
815 822
@@ -818,13 +825,13 @@ static int hw_atl_b0_hw_packet_filter_set(struct aq_hw_s *self,
818 825
819 hw_atl_rpfl2broadcast_en_set(self, IS_FILTER_ENABLED(IFF_BROADCAST)); 826 hw_atl_rpfl2broadcast_en_set(self, IS_FILTER_ENABLED(IFF_BROADCAST));
820 827
821 self->aq_nic_cfg->is_mc_list_enabled = IS_FILTER_ENABLED(IFF_MULTICAST); 828 cfg->is_mc_list_enabled = IS_FILTER_ENABLED(IFF_MULTICAST);
822 829
823 for (i = HW_ATL_B0_MAC_MIN; i < HW_ATL_B0_MAC_MAX; ++i) 830 for (i = HW_ATL_B0_MAC_MIN; i < HW_ATL_B0_MAC_MAX; ++i)
824 hw_atl_rpfl2_uc_flr_en_set(self, 831 hw_atl_rpfl2_uc_flr_en_set(self,
825 (self->aq_nic_cfg->is_mc_list_enabled && 832 (cfg->is_mc_list_enabled &&
826 (i <= self->aq_nic_cfg->mc_list_count)) ? 833 (i <= cfg->mc_list_count)) ?
827 1U : 0U, i); 834 1U : 0U, i);
828 835
829 return aq_hw_err_from_flags(self); 836 return aq_hw_err_from_flags(self);
830} 837}
@@ -1116,7 +1123,7 @@ static int hw_atl_b0_hw_vlan_set(struct aq_hw_s *self,
1116static int hw_atl_b0_hw_vlan_ctrl(struct aq_hw_s *self, bool enable) 1123static int hw_atl_b0_hw_vlan_ctrl(struct aq_hw_s *self, bool enable)
1117{ 1124{
1118 /* set promisc in case of disabing the vland filter */ 1125 /* set promisc in case of disabing the vland filter */
1119 hw_atl_rpf_vlan_prom_mode_en_set(self, !!!enable); 1126 hw_atl_rpf_vlan_prom_mode_en_set(self, !enable);
1120 1127
1121 return aq_hw_err_from_flags(self); 1128 return aq_hw_err_from_flags(self);
1122} 1129}
diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c
index 5d41e41a889c..a27d32f69de9 100644
--- a/drivers/net/ethernet/cadence/macb_main.c
+++ b/drivers/net/ethernet/cadence/macb_main.c
@@ -4303,7 +4303,7 @@ static int macb_probe(struct platform_device *pdev)
4303 if (PTR_ERR(mac) == -EPROBE_DEFER) { 4303 if (PTR_ERR(mac) == -EPROBE_DEFER) {
4304 err = -EPROBE_DEFER; 4304 err = -EPROBE_DEFER;
4305 goto err_out_free_netdev; 4305 goto err_out_free_netdev;
4306 } else if (!IS_ERR(mac)) { 4306 } else if (!IS_ERR_OR_NULL(mac)) {
4307 ether_addr_copy(bp->dev->dev_addr, mac); 4307 ether_addr_copy(bp->dev->dev_addr, mac);
4308 } else { 4308 } else {
4309 macb_get_hwaddr(bp); 4309 macb_get_hwaddr(bp);
diff --git a/drivers/net/ethernet/emulex/benet/be_ethtool.c b/drivers/net/ethernet/emulex/benet/be_ethtool.c
index 8a6785173228..492f8769ac12 100644
--- a/drivers/net/ethernet/emulex/benet/be_ethtool.c
+++ b/drivers/net/ethernet/emulex/benet/be_ethtool.c
@@ -891,7 +891,7 @@ static void be_self_test(struct net_device *netdev, struct ethtool_test *test,
891 u64 *data) 891 u64 *data)
892{ 892{
893 struct be_adapter *adapter = netdev_priv(netdev); 893 struct be_adapter *adapter = netdev_priv(netdev);
894 int status; 894 int status, cnt;
895 u8 link_status = 0; 895 u8 link_status = 0;
896 896
897 if (adapter->function_caps & BE_FUNCTION_CAPS_SUPER_NIC) { 897 if (adapter->function_caps & BE_FUNCTION_CAPS_SUPER_NIC) {
@@ -902,6 +902,9 @@ static void be_self_test(struct net_device *netdev, struct ethtool_test *test,
902 902
903 memset(data, 0, sizeof(u64) * ETHTOOL_TESTS_NUM); 903 memset(data, 0, sizeof(u64) * ETHTOOL_TESTS_NUM);
904 904
905 /* check link status before offline tests */
906 link_status = netif_carrier_ok(netdev);
907
905 if (test->flags & ETH_TEST_FL_OFFLINE) { 908 if (test->flags & ETH_TEST_FL_OFFLINE) {
906 if (be_loopback_test(adapter, BE_MAC_LOOPBACK, &data[0]) != 0) 909 if (be_loopback_test(adapter, BE_MAC_LOOPBACK, &data[0]) != 0)
907 test->flags |= ETH_TEST_FL_FAILED; 910 test->flags |= ETH_TEST_FL_FAILED;
@@ -922,13 +925,26 @@ static void be_self_test(struct net_device *netdev, struct ethtool_test *test,
922 test->flags |= ETH_TEST_FL_FAILED; 925 test->flags |= ETH_TEST_FL_FAILED;
923 } 926 }
924 927
925 status = be_cmd_link_status_query(adapter, NULL, &link_status, 0); 928 /* link status was down prior to test */
926 if (status) { 929 if (!link_status) {
927 test->flags |= ETH_TEST_FL_FAILED;
928 data[4] = -1;
929 } else if (!link_status) {
930 test->flags |= ETH_TEST_FL_FAILED; 930 test->flags |= ETH_TEST_FL_FAILED;
931 data[4] = 1; 931 data[4] = 1;
932 return;
933 }
934
935 for (cnt = 10; cnt; cnt--) {
936 status = be_cmd_link_status_query(adapter, NULL, &link_status,
937 0);
938 if (status) {
939 test->flags |= ETH_TEST_FL_FAILED;
940 data[4] = -1;
941 break;
942 }
943
944 if (link_status)
945 break;
946
947 msleep_interruptible(500);
932 } 948 }
933} 949}
934 950
diff --git a/drivers/net/ethernet/sis/sis900.c b/drivers/net/ethernet/sis/sis900.c
index 67f9bb6e941b..9b036c857b1d 100644
--- a/drivers/net/ethernet/sis/sis900.c
+++ b/drivers/net/ethernet/sis/sis900.c
@@ -1057,7 +1057,7 @@ sis900_open(struct net_device *net_dev)
1057 sis900_set_mode(sis_priv, HW_SPEED_10_MBPS, FDX_CAPABLE_HALF_SELECTED); 1057 sis900_set_mode(sis_priv, HW_SPEED_10_MBPS, FDX_CAPABLE_HALF_SELECTED);
1058 1058
1059 /* Enable all known interrupts by setting the interrupt mask. */ 1059 /* Enable all known interrupts by setting the interrupt mask. */
1060 sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxIDLE); 1060 sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxIDLE | TxDESC);
1061 sw32(cr, RxENA | sr32(cr)); 1061 sw32(cr, RxENA | sr32(cr));
1062 sw32(ier, IE); 1062 sw32(ier, IE);
1063 1063
@@ -1578,7 +1578,7 @@ static void sis900_tx_timeout(struct net_device *net_dev)
1578 sw32(txdp, sis_priv->tx_ring_dma); 1578 sw32(txdp, sis_priv->tx_ring_dma);
1579 1579
1580 /* Enable all known interrupts by setting the interrupt mask. */ 1580 /* Enable all known interrupts by setting the interrupt mask. */
1581 sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxIDLE); 1581 sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxIDLE | TxDESC);
1582} 1582}
1583 1583
1584/** 1584/**
@@ -1618,7 +1618,7 @@ sis900_start_xmit(struct sk_buff *skb, struct net_device *net_dev)
1618 spin_unlock_irqrestore(&sis_priv->lock, flags); 1618 spin_unlock_irqrestore(&sis_priv->lock, flags);
1619 return NETDEV_TX_OK; 1619 return NETDEV_TX_OK;
1620 } 1620 }
1621 sis_priv->tx_ring[entry].cmdsts = (OWN | skb->len); 1621 sis_priv->tx_ring[entry].cmdsts = (OWN | INTR | skb->len);
1622 sw32(cr, TxENA | sr32(cr)); 1622 sw32(cr, TxENA | sr32(cr));
1623 1623
1624 sis_priv->cur_tx ++; 1624 sis_priv->cur_tx ++;
@@ -1674,7 +1674,7 @@ static irqreturn_t sis900_interrupt(int irq, void *dev_instance)
1674 do { 1674 do {
1675 status = sr32(isr); 1675 status = sr32(isr);
1676 1676
1677 if ((status & (HIBERR|TxURN|TxERR|TxIDLE|RxORN|RxERR|RxOK)) == 0) 1677 if ((status & (HIBERR|TxURN|TxERR|TxIDLE|TxDESC|RxORN|RxERR|RxOK)) == 0)
1678 /* nothing intresting happened */ 1678 /* nothing intresting happened */
1679 break; 1679 break;
1680 handled = 1; 1680 handled = 1;
@@ -1684,7 +1684,7 @@ static irqreturn_t sis900_interrupt(int irq, void *dev_instance)
1684 /* Rx interrupt */ 1684 /* Rx interrupt */
1685 sis900_rx(net_dev); 1685 sis900_rx(net_dev);
1686 1686
1687 if (status & (TxURN | TxERR | TxIDLE)) 1687 if (status & (TxURN | TxERR | TxIDLE | TxDESC))
1688 /* Tx interrupt */ 1688 /* Tx interrupt */
1689 sis900_finish_xmit(net_dev); 1689 sis900_finish_xmit(net_dev);
1690 1690
@@ -1896,8 +1896,8 @@ static void sis900_finish_xmit (struct net_device *net_dev)
1896 1896
1897 if (tx_status & OWN) { 1897 if (tx_status & OWN) {
1898 /* The packet is not transmitted yet (owned by hardware) ! 1898 /* The packet is not transmitted yet (owned by hardware) !
1899 * Note: the interrupt is generated only when Tx Machine 1899 * Note: this is an almost impossible condition
1900 * is idle, so this is an almost impossible case */ 1900 * in case of TxDESC ('descriptor interrupt') */
1901 break; 1901 break;
1902 } 1902 }
1903 1903
@@ -2473,7 +2473,7 @@ static int sis900_resume(struct pci_dev *pci_dev)
2473 sis900_set_mode(sis_priv, HW_SPEED_10_MBPS, FDX_CAPABLE_HALF_SELECTED); 2473 sis900_set_mode(sis_priv, HW_SPEED_10_MBPS, FDX_CAPABLE_HALF_SELECTED);
2474 2474
2475 /* Enable all known interrupts by setting the interrupt mask. */ 2475 /* Enable all known interrupts by setting the interrupt mask. */
2476 sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxIDLE); 2476 sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxIDLE | TxDESC);
2477 sw32(cr, RxENA | sr32(cr)); 2477 sw32(cr, RxENA | sr32(cr));
2478 sw32(ier, IE); 2478 sw32(ier, IE);
2479 2479
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
index 2dcdf761d525..020159622559 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
@@ -112,7 +112,7 @@ static int adjust_systime(void __iomem *ioaddr, u32 sec, u32 nsec,
112 * programmed with (2^32 – <new_sec_value>) 112 * programmed with (2^32 – <new_sec_value>)
113 */ 113 */
114 if (gmac4) 114 if (gmac4)
115 sec = (100000000ULL - sec); 115 sec = -sec;
116 116
117 value = readl(ioaddr + PTP_TCR); 117 value = readl(ioaddr + PTP_TCR);
118 if (value & PTP_TCR_TSCTRLSSR) 118 if (value & PTP_TCR_TSCTRLSSR)
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index ee4f1e265993..8f5ebd51859e 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -2892,12 +2892,15 @@ static netdev_tx_t stmmac_tso_xmit(struct sk_buff *skb, struct net_device *dev)
2892 2892
2893 /* Manage tx mitigation */ 2893 /* Manage tx mitigation */
2894 tx_q->tx_count_frames += nfrags + 1; 2894 tx_q->tx_count_frames += nfrags + 1;
2895 if (priv->tx_coal_frames <= tx_q->tx_count_frames) { 2895 if (likely(priv->tx_coal_frames > tx_q->tx_count_frames) &&
2896 !(priv->synopsys_id >= DWMAC_CORE_4_00 &&
2897 (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) &&
2898 priv->hwts_tx_en)) {
2899 stmmac_tx_timer_arm(priv, queue);
2900 } else {
2901 tx_q->tx_count_frames = 0;
2896 stmmac_set_tx_ic(priv, desc); 2902 stmmac_set_tx_ic(priv, desc);
2897 priv->xstats.tx_set_ic_bit++; 2903 priv->xstats.tx_set_ic_bit++;
2898 tx_q->tx_count_frames = 0;
2899 } else {
2900 stmmac_tx_timer_arm(priv, queue);
2901 } 2904 }
2902 2905
2903 skb_tx_timestamp(skb); 2906 skb_tx_timestamp(skb);
@@ -3111,12 +3114,15 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)
3111 * element in case of no SG. 3114 * element in case of no SG.
3112 */ 3115 */
3113 tx_q->tx_count_frames += nfrags + 1; 3116 tx_q->tx_count_frames += nfrags + 1;
3114 if (priv->tx_coal_frames <= tx_q->tx_count_frames) { 3117 if (likely(priv->tx_coal_frames > tx_q->tx_count_frames) &&
3118 !(priv->synopsys_id >= DWMAC_CORE_4_00 &&
3119 (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) &&
3120 priv->hwts_tx_en)) {
3121 stmmac_tx_timer_arm(priv, queue);
3122 } else {
3123 tx_q->tx_count_frames = 0;
3115 stmmac_set_tx_ic(priv, desc); 3124 stmmac_set_tx_ic(priv, desc);
3116 priv->xstats.tx_set_ic_bit++; 3125 priv->xstats.tx_set_ic_bit++;
3117 tx_q->tx_count_frames = 0;
3118 } else {
3119 stmmac_tx_timer_arm(priv, queue);
3120 } 3126 }
3121 3127
3122 skb_tx_timestamp(skb); 3128 skb_tx_timestamp(skb);
diff --git a/drivers/net/ppp/ppp_mppe.c b/drivers/net/ppp/ppp_mppe.c
index ff61dd8748de..66c8e65f6872 100644
--- a/drivers/net/ppp/ppp_mppe.c
+++ b/drivers/net/ppp/ppp_mppe.c
@@ -63,6 +63,7 @@ MODULE_AUTHOR("Frank Cusack <fcusack@fcusack.com>");
63MODULE_DESCRIPTION("Point-to-Point Protocol Microsoft Point-to-Point Encryption support"); 63MODULE_DESCRIPTION("Point-to-Point Protocol Microsoft Point-to-Point Encryption support");
64MODULE_LICENSE("Dual BSD/GPL"); 64MODULE_LICENSE("Dual BSD/GPL");
65MODULE_ALIAS("ppp-compress-" __stringify(CI_MPPE)); 65MODULE_ALIAS("ppp-compress-" __stringify(CI_MPPE));
66MODULE_SOFTDEP("pre: arc4");
66MODULE_VERSION("1.0.2"); 67MODULE_VERSION("1.0.2");
67 68
68static unsigned int 69static unsigned int
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index f3422f85f604..abfa0da9bbd2 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -2153,12 +2153,12 @@ static void team_setup(struct net_device *dev)
2153 dev->features |= NETIF_F_NETNS_LOCAL; 2153 dev->features |= NETIF_F_NETNS_LOCAL;
2154 2154
2155 dev->hw_features = TEAM_VLAN_FEATURES | 2155 dev->hw_features = TEAM_VLAN_FEATURES |
2156 NETIF_F_HW_VLAN_CTAG_TX |
2157 NETIF_F_HW_VLAN_CTAG_RX | 2156 NETIF_F_HW_VLAN_CTAG_RX |
2158 NETIF_F_HW_VLAN_CTAG_FILTER; 2157 NETIF_F_HW_VLAN_CTAG_FILTER;
2159 2158
2160 dev->hw_features |= NETIF_F_GSO_ENCAP_ALL | NETIF_F_GSO_UDP_L4; 2159 dev->hw_features |= NETIF_F_GSO_ENCAP_ALL | NETIF_F_GSO_UDP_L4;
2161 dev->features |= dev->hw_features; 2160 dev->features |= dev->hw_features;
2161 dev->features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_STAG_TX;
2162} 2162}
2163 2163
2164static int team_newlink(struct net *src_net, struct net_device *dev, 2164static int team_newlink(struct net *src_net, struct net_device *dev,
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
index d080f8048e52..8b4ad10cf940 100644
--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -1482,7 +1482,7 @@ static int qmi_wwan_probe(struct usb_interface *intf,
1482 * different. Ignore the current interface if the number of endpoints 1482 * different. Ignore the current interface if the number of endpoints
1483 * equals the number for the diag interface (two). 1483 * equals the number for the diag interface (two).
1484 */ 1484 */
1485 info = (void *)&id->driver_info; 1485 info = (void *)id->driver_info;
1486 1486
1487 if (info->data & QMI_WWAN_QUIRK_QUECTEL_DYNCFG) { 1487 if (info->data & QMI_WWAN_QUIRK_QUECTEL_DYNCFG) {
1488 if (desc->bNumEndpoints == 2) 1488 if (desc->bNumEndpoints == 2)
diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
index 69ef9cce5858..54edf8956a25 100644
--- a/drivers/net/vrf.c
+++ b/drivers/net/vrf.c
@@ -350,8 +350,8 @@ static int vrf_finish_output6(struct net *net, struct sock *sk,
350{ 350{
351 struct dst_entry *dst = skb_dst(skb); 351 struct dst_entry *dst = skb_dst(skb);
352 struct net_device *dev = dst->dev; 352 struct net_device *dev = dst->dev;
353 const struct in6_addr *nexthop;
353 struct neighbour *neigh; 354 struct neighbour *neigh;
354 struct in6_addr *nexthop;
355 int ret; 355 int ret;
356 356
357 nf_reset(skb); 357 nf_reset(skb);
diff --git a/drivers/pci/p2pdma.c b/drivers/pci/p2pdma.c
index a98126ad9c3a..a4994aa3acc0 100644
--- a/drivers/pci/p2pdma.c
+++ b/drivers/pci/p2pdma.c
@@ -18,6 +18,7 @@
18#include <linux/percpu-refcount.h> 18#include <linux/percpu-refcount.h>
19#include <linux/random.h> 19#include <linux/random.h>
20#include <linux/seq_buf.h> 20#include <linux/seq_buf.h>
21#include <linux/iommu.h>
21 22
22struct pci_p2pdma { 23struct pci_p2pdma {
23 struct gen_pool *pool; 24 struct gen_pool *pool;
@@ -299,6 +300,9 @@ static bool root_complex_whitelist(struct pci_dev *dev)
299 struct pci_dev *root = pci_get_slot(host->bus, PCI_DEVFN(0, 0)); 300 struct pci_dev *root = pci_get_slot(host->bus, PCI_DEVFN(0, 0));
300 unsigned short vendor, device; 301 unsigned short vendor, device;
301 302
303 if (iommu_present(dev->dev.bus))
304 return false;
305
302 if (!root) 306 if (!root)
303 return false; 307 return false;
304 308
diff --git a/drivers/scsi/qedi/qedi_main.c b/drivers/scsi/qedi/qedi_main.c
index 1b58e63b4e51..acb930b8c6a6 100644
--- a/drivers/scsi/qedi/qedi_main.c
+++ b/drivers/scsi/qedi/qedi_main.c
@@ -987,6 +987,9 @@ static int qedi_find_boot_info(struct qedi_ctx *qedi,
987 if (!iscsi_is_session_online(cls_sess)) 987 if (!iscsi_is_session_online(cls_sess))
988 continue; 988 continue;
989 989
990 if (!sess->targetname)
991 continue;
992
990 if (pri_ctrl_flags) { 993 if (pri_ctrl_flags) {
991 if (!strcmp(pri_tgt->iscsi_name, sess->targetname) && 994 if (!strcmp(pri_tgt->iscsi_name, sess->targetname) &&
992 !strcmp(pri_tgt->ip_addr, ep_ip_addr)) { 995 !strcmp(pri_tgt->ip_addr, ep_ip_addr)) {
diff --git a/drivers/scsi/qedi/qedi_version.h b/drivers/scsi/qedi/qedi_version.h
index f56f0ba0c4a8..0ac1055bd420 100644
--- a/drivers/scsi/qedi/qedi_version.h
+++ b/drivers/scsi/qedi/qedi_version.h
@@ -4,8 +4,8 @@
4 * Copyright (c) 2016 Cavium Inc. 4 * Copyright (c) 2016 Cavium Inc.
5 */ 5 */
6 6
7#define QEDI_MODULE_VERSION "8.33.0.21" 7#define QEDI_MODULE_VERSION "8.37.0.20"
8#define QEDI_DRIVER_MAJOR_VER 8 8#define QEDI_DRIVER_MAJOR_VER 8
9#define QEDI_DRIVER_MINOR_VER 33 9#define QEDI_DRIVER_MINOR_VER 37
10#define QEDI_DRIVER_REV_VER 0 10#define QEDI_DRIVER_REV_VER 0
11#define QEDI_DRIVER_ENG_VER 21 11#define QEDI_DRIVER_ENG_VER 20
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 172ef21827dd..d056f5e7cf93 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -1731,8 +1731,8 @@ static void qla2x00_abort_srb(struct qla_qpair *qp, srb_t *sp, const int res,
1731 !test_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags) && 1731 !test_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags) &&
1732 !qla2x00_isp_reg_stat(ha))) { 1732 !qla2x00_isp_reg_stat(ha))) {
1733 sp->comp = &comp; 1733 sp->comp = &comp;
1734 rval = ha->isp_ops->abort_command(sp);
1735 spin_unlock_irqrestore(qp->qp_lock_ptr, *flags); 1734 spin_unlock_irqrestore(qp->qp_lock_ptr, *flags);
1735 rval = ha->isp_ops->abort_command(sp);
1736 1736
1737 switch (rval) { 1737 switch (rval) {
1738 case QLA_SUCCESS: 1738 case QLA_SUCCESS:
diff --git a/drivers/scsi/ufs/ufshcd-pltfrm.c b/drivers/scsi/ufs/ufshcd-pltfrm.c
index 8a74ec30c3d2..d7d521b394c3 100644
--- a/drivers/scsi/ufs/ufshcd-pltfrm.c
+++ b/drivers/scsi/ufs/ufshcd-pltfrm.c
@@ -430,24 +430,21 @@ int ufshcd_pltfrm_init(struct platform_device *pdev,
430 goto dealloc_host; 430 goto dealloc_host;
431 } 431 }
432 432
433 pm_runtime_set_active(&pdev->dev);
434 pm_runtime_enable(&pdev->dev);
435
436 ufshcd_init_lanes_per_dir(hba); 433 ufshcd_init_lanes_per_dir(hba);
437 434
438 err = ufshcd_init(hba, mmio_base, irq); 435 err = ufshcd_init(hba, mmio_base, irq);
439 if (err) { 436 if (err) {
440 dev_err(dev, "Initialization failed\n"); 437 dev_err(dev, "Initialization failed\n");
441 goto out_disable_rpm; 438 goto dealloc_host;
442 } 439 }
443 440
444 platform_set_drvdata(pdev, hba); 441 platform_set_drvdata(pdev, hba);
445 442
443 pm_runtime_set_active(&pdev->dev);
444 pm_runtime_enable(&pdev->dev);
445
446 return 0; 446 return 0;
447 447
448out_disable_rpm:
449 pm_runtime_disable(&pdev->dev);
450 pm_runtime_set_suspended(&pdev->dev);
451dealloc_host: 448dealloc_host:
452 ufshcd_dealloc_host(hba); 449 ufshcd_dealloc_host(hba);
453out: 450out:
diff --git a/fs/afs/callback.c b/fs/afs/callback.c
index d441bef72163..915010464572 100644
--- a/fs/afs/callback.c
+++ b/fs/afs/callback.c
@@ -275,9 +275,9 @@ static void afs_break_one_callback(struct afs_server *server,
275 struct afs_super_info *as = AFS_FS_S(cbi->sb); 275 struct afs_super_info *as = AFS_FS_S(cbi->sb);
276 struct afs_volume *volume = as->volume; 276 struct afs_volume *volume = as->volume;
277 277
278 write_lock(&volume->cb_break_lock); 278 write_lock(&volume->cb_v_break_lock);
279 volume->cb_v_break++; 279 volume->cb_v_break++;
280 write_unlock(&volume->cb_break_lock); 280 write_unlock(&volume->cb_v_break_lock);
281 } else { 281 } else {
282 data.volume = NULL; 282 data.volume = NULL;
283 data.fid = *fid; 283 data.fid = *fid;
diff --git a/fs/afs/inode.c b/fs/afs/inode.c
index b42d9d09669c..18a50d4febcf 100644
--- a/fs/afs/inode.c
+++ b/fs/afs/inode.c
@@ -56,6 +56,16 @@ static noinline void dump_vnode(struct afs_vnode *vnode, struct afs_vnode *paren
56} 56}
57 57
58/* 58/*
59 * Set the file size and block count. Estimate the number of 512 bytes blocks
60 * used, rounded up to nearest 1K for consistency with other AFS clients.
61 */
62static void afs_set_i_size(struct afs_vnode *vnode, u64 size)
63{
64 i_size_write(&vnode->vfs_inode, size);
65 vnode->vfs_inode.i_blocks = ((size + 1023) >> 10) << 1;
66}
67
68/*
59 * Initialise an inode from the vnode status. 69 * Initialise an inode from the vnode status.
60 */ 70 */
61static int afs_inode_init_from_status(struct afs_vnode *vnode, struct key *key, 71static int afs_inode_init_from_status(struct afs_vnode *vnode, struct key *key,
@@ -124,12 +134,7 @@ static int afs_inode_init_from_status(struct afs_vnode *vnode, struct key *key,
124 return afs_protocol_error(NULL, -EBADMSG, afs_eproto_file_type); 134 return afs_protocol_error(NULL, -EBADMSG, afs_eproto_file_type);
125 } 135 }
126 136
127 /* 137 afs_set_i_size(vnode, status->size);
128 * Estimate 512 bytes blocks used, rounded up to nearest 1K
129 * for consistency with other AFS clients.
130 */
131 inode->i_blocks = ((i_size_read(inode) + 1023) >> 10) << 1;
132 i_size_write(&vnode->vfs_inode, status->size);
133 138
134 vnode->invalid_before = status->data_version; 139 vnode->invalid_before = status->data_version;
135 inode_set_iversion_raw(&vnode->vfs_inode, status->data_version); 140 inode_set_iversion_raw(&vnode->vfs_inode, status->data_version);
@@ -207,11 +212,13 @@ static void afs_apply_status(struct afs_fs_cursor *fc,
207 212
208 if (expected_version && 213 if (expected_version &&
209 *expected_version != status->data_version) { 214 *expected_version != status->data_version) {
210 kdebug("vnode modified %llx on {%llx:%llu} [exp %llx] %s", 215 if (test_bit(AFS_VNODE_CB_PROMISED, &vnode->flags))
211 (unsigned long long) status->data_version, 216 pr_warn("kAFS: vnode modified {%llx:%llu} %llx->%llx %s\n",
212 vnode->fid.vid, vnode->fid.vnode, 217 vnode->fid.vid, vnode->fid.vnode,
213 (unsigned long long) *expected_version, 218 (unsigned long long)*expected_version,
214 fc->type ? fc->type->name : "???"); 219 (unsigned long long)status->data_version,
220 fc->type ? fc->type->name : "???");
221
215 vnode->invalid_before = status->data_version; 222 vnode->invalid_before = status->data_version;
216 if (vnode->status.type == AFS_FTYPE_DIR) { 223 if (vnode->status.type == AFS_FTYPE_DIR) {
217 if (test_and_clear_bit(AFS_VNODE_DIR_VALID, &vnode->flags)) 224 if (test_and_clear_bit(AFS_VNODE_DIR_VALID, &vnode->flags))
@@ -230,7 +237,7 @@ static void afs_apply_status(struct afs_fs_cursor *fc,
230 237
231 if (data_changed) { 238 if (data_changed) {
232 inode_set_iversion_raw(&vnode->vfs_inode, status->data_version); 239 inode_set_iversion_raw(&vnode->vfs_inode, status->data_version);
233 i_size_write(&vnode->vfs_inode, status->size); 240 afs_set_i_size(vnode, status->size);
234 } 241 }
235} 242}
236 243
diff --git a/fs/afs/internal.h b/fs/afs/internal.h
index ce9559e98f17..0f84d0da5417 100644
--- a/fs/afs/internal.h
+++ b/fs/afs/internal.h
@@ -109,10 +109,8 @@ struct afs_call {
109 struct rxrpc_call *rxcall; /* RxRPC call handle */ 109 struct rxrpc_call *rxcall; /* RxRPC call handle */
110 struct key *key; /* security for this call */ 110 struct key *key; /* security for this call */
111 struct afs_net *net; /* The network namespace */ 111 struct afs_net *net; /* The network namespace */
112 union { 112 struct afs_server *server; /* The fileserver record if fs op (pins ref) */
113 struct afs_server *server; 113 struct afs_vlserver *vlserver; /* The vlserver record if vl op */
114 struct afs_vlserver *vlserver;
115 };
116 struct afs_cb_interest *cbi; /* Callback interest for server used */ 114 struct afs_cb_interest *cbi; /* Callback interest for server used */
117 struct afs_vnode *lvnode; /* vnode being locked */ 115 struct afs_vnode *lvnode; /* vnode being locked */
118 void *request; /* request data (first part) */ 116 void *request; /* request data (first part) */
@@ -616,7 +614,7 @@ struct afs_volume {
616 unsigned int servers_seq; /* Incremented each time ->servers changes */ 614 unsigned int servers_seq; /* Incremented each time ->servers changes */
617 615
618 unsigned cb_v_break; /* Break-everything counter. */ 616 unsigned cb_v_break; /* Break-everything counter. */
619 rwlock_t cb_break_lock; 617 rwlock_t cb_v_break_lock;
620 618
621 afs_voltype_t type; /* type of volume */ 619 afs_voltype_t type; /* type of volume */
622 short error; 620 short error;
diff --git a/fs/afs/volume.c b/fs/afs/volume.c
index 08fdb3951c49..1a414300b654 100644
--- a/fs/afs/volume.c
+++ b/fs/afs/volume.c
@@ -43,6 +43,7 @@ static struct afs_volume *afs_alloc_volume(struct afs_fs_context *params,
43 atomic_set(&volume->usage, 1); 43 atomic_set(&volume->usage, 1);
44 INIT_LIST_HEAD(&volume->proc_link); 44 INIT_LIST_HEAD(&volume->proc_link);
45 rwlock_init(&volume->servers_lock); 45 rwlock_init(&volume->servers_lock);
46 rwlock_init(&volume->cb_v_break_lock);
46 memcpy(volume->name, vldb->name, vldb->name_len + 1); 47 memcpy(volume->name, vldb->name, vldb->name_len + 1);
47 48
48 slist = afs_alloc_server_list(params->cell, params->key, vldb, type_mask); 49 slist = afs_alloc_server_list(params->cell, params->key, vldb, type_mask);
diff --git a/fs/proc/base.c b/fs/proc/base.c
index 9c8ca6cd3ce4..255f6754c70d 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -3077,8 +3077,7 @@ static const struct file_operations proc_tgid_base_operations = {
3077 3077
3078struct pid *tgid_pidfd_to_pid(const struct file *file) 3078struct pid *tgid_pidfd_to_pid(const struct file *file)
3079{ 3079{
3080 if (!d_is_dir(file->f_path.dentry) || 3080 if (file->f_op != &proc_tgid_base_operations)
3081 (file->f_op != &proc_tgid_base_operations))
3082 return ERR_PTR(-EBADF); 3081 return ERR_PTR(-EBADF);
3083 3082
3084 return proc_pid(file_inode(file)); 3083 return proc_pid(file_inode(file));
diff --git a/include/dt-bindings/clock/g12a-clkc.h b/include/dt-bindings/clock/g12a-clkc.h
index 82c9e0c020b2..e10470ed7c4f 100644
--- a/include/dt-bindings/clock/g12a-clkc.h
+++ b/include/dt-bindings/clock/g12a-clkc.h
@@ -130,7 +130,7 @@
130#define CLKID_MALI_1_SEL 172 130#define CLKID_MALI_1_SEL 172
131#define CLKID_MALI_1 174 131#define CLKID_MALI_1 174
132#define CLKID_MALI 175 132#define CLKID_MALI 175
133#define CLKID_MPLL_5OM 177 133#define CLKID_MPLL_50M 177
134#define CLKID_CPU_CLK 187 134#define CLKID_CPU_CLK 187
135#define CLKID_PCIE_PLL 201 135#define CLKID_PCIE_PLL 201
136#define CLKID_VDEC_1 204 136#define CLKID_VDEC_1 204
diff --git a/include/linux/intel-ish-client-if.h b/include/linux/intel-ish-client-if.h
index 16255c2ca2f4..0d6b4bc191c5 100644
--- a/include/linux/intel-ish-client-if.h
+++ b/include/linux/intel-ish-client-if.h
@@ -103,6 +103,7 @@ void ishtp_put_device(struct ishtp_cl_device *cl_dev);
103void ishtp_get_device(struct ishtp_cl_device *cl_dev); 103void ishtp_get_device(struct ishtp_cl_device *cl_dev);
104void ishtp_set_drvdata(struct ishtp_cl_device *cl_device, void *data); 104void ishtp_set_drvdata(struct ishtp_cl_device *cl_device, void *data);
105void *ishtp_get_drvdata(struct ishtp_cl_device *cl_device); 105void *ishtp_get_drvdata(struct ishtp_cl_device *cl_device);
106struct ishtp_cl_device *ishtp_dev_to_cl_device(struct device *dev);
106int ishtp_register_event_cb(struct ishtp_cl_device *device, 107int ishtp_register_event_cb(struct ishtp_cl_device *device,
107 void (*read_cb)(struct ishtp_cl_device *)); 108 void (*read_cb)(struct ishtp_cl_device *));
108struct ishtp_fw_client *ishtp_fw_cl_get_client(struct ishtp_device *dev, 109struct ishtp_fw_client *ishtp_fw_cl_get_client(struct ishtp_device *dev,
diff --git a/include/linux/mtd/spi-nor.h b/include/linux/mtd/spi-nor.h
index b3d360b0ee3d..9f57cdfcc93d 100644
--- a/include/linux/mtd/spi-nor.h
+++ b/include/linux/mtd/spi-nor.h
@@ -373,6 +373,8 @@ struct flash_info;
373 * @flash_unlock: [FLASH-SPECIFIC] unlock a region of the SPI NOR 373 * @flash_unlock: [FLASH-SPECIFIC] unlock a region of the SPI NOR
374 * @flash_is_locked: [FLASH-SPECIFIC] check if a region of the SPI NOR is 374 * @flash_is_locked: [FLASH-SPECIFIC] check if a region of the SPI NOR is
375 * @quad_enable: [FLASH-SPECIFIC] enables SPI NOR quad mode 375 * @quad_enable: [FLASH-SPECIFIC] enables SPI NOR quad mode
376 * @clear_sr_bp: [FLASH-SPECIFIC] clears the Block Protection Bits from
377 * the SPI NOR Status Register.
376 * completely locked 378 * completely locked
377 * @priv: the private data 379 * @priv: the private data
378 */ 380 */
@@ -410,6 +412,7 @@ struct spi_nor {
410 int (*flash_unlock)(struct spi_nor *nor, loff_t ofs, uint64_t len); 412 int (*flash_unlock)(struct spi_nor *nor, loff_t ofs, uint64_t len);
411 int (*flash_is_locked)(struct spi_nor *nor, loff_t ofs, uint64_t len); 413 int (*flash_is_locked)(struct spi_nor *nor, loff_t ofs, uint64_t len);
412 int (*quad_enable)(struct spi_nor *nor); 414 int (*quad_enable)(struct spi_nor *nor);
415 int (*clear_sr_bp)(struct spi_nor *nor);
413 416
414 void *priv; 417 void *priv;
415}; 418};
diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h
index c8bba0c28286..b69c16cbbf71 100644
--- a/include/net/ip6_route.h
+++ b/include/net/ip6_route.h
@@ -281,8 +281,8 @@ static inline bool ip6_sk_ignore_df(const struct sock *sk)
281 inet6_sk(sk)->pmtudisc == IPV6_PMTUDISC_OMIT; 281 inet6_sk(sk)->pmtudisc == IPV6_PMTUDISC_OMIT;
282} 282}
283 283
284static inline struct in6_addr *rt6_nexthop(struct rt6_info *rt, 284static inline const struct in6_addr *rt6_nexthop(const struct rt6_info *rt,
285 struct in6_addr *daddr) 285 const struct in6_addr *daddr)
286{ 286{
287 if (rt->rt6i_flags & RTF_GATEWAY) 287 if (rt->rt6i_flags & RTF_GATEWAY)
288 return &rt->rt6i_gateway; 288 return &rt->rt6i_gateway;
diff --git a/include/net/route.h b/include/net/route.h
index cfcd0f5980f9..630a0493f1f3 100644
--- a/include/net/route.h
+++ b/include/net/route.h
@@ -221,6 +221,7 @@ void ip_rt_get_source(u8 *src, struct sk_buff *skb, struct rtable *rt);
221struct rtable *rt_dst_alloc(struct net_device *dev, 221struct rtable *rt_dst_alloc(struct net_device *dev,
222 unsigned int flags, u16 type, 222 unsigned int flags, u16 type,
223 bool nopolicy, bool noxfrm, bool will_cache); 223 bool nopolicy, bool noxfrm, bool will_cache);
224struct rtable *rt_dst_clone(struct net_device *dev, struct rtable *rt);
224 225
225struct in_ifaddr; 226struct in_ifaddr;
226void fib_add_ifaddr(struct in_ifaddr *); 227void fib_add_ifaddr(struct in_ifaddr *);
diff --git a/include/net/tls.h b/include/net/tls.h
index 63e473420b00..0279938386ab 100644
--- a/include/net/tls.h
+++ b/include/net/tls.h
@@ -407,21 +407,6 @@ static inline bool tls_is_partially_sent_record(struct tls_context *ctx)
407 return !!ctx->partially_sent_record; 407 return !!ctx->partially_sent_record;
408} 408}
409 409
410static inline int tls_complete_pending_work(struct sock *sk,
411 struct tls_context *ctx,
412 int flags, long *timeo)
413{
414 int rc = 0;
415
416 if (unlikely(sk->sk_write_pending))
417 rc = wait_on_pending_writer(sk, timeo);
418
419 if (!rc && tls_is_partially_sent_record(ctx))
420 rc = tls_push_partial_record(sk, ctx, flags);
421
422 return rc;
423}
424
425static inline bool tls_is_pending_open_record(struct tls_context *tls_ctx) 410static inline bool tls_is_pending_open_record(struct tls_context *tls_ctx)
426{ 411{
427 return tls_ctx->pending_open_record_frags; 412 return tls_ctx->pending_open_record_frags;
diff --git a/kernel/fork.c b/kernel/fork.c
index 75675b9bf6df..399aca51ff75 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -1712,31 +1712,6 @@ const struct file_operations pidfd_fops = {
1712#endif 1712#endif
1713}; 1713};
1714 1714
1715/**
1716 * pidfd_create() - Create a new pid file descriptor.
1717 *
1718 * @pid: struct pid that the pidfd will reference
1719 *
1720 * This creates a new pid file descriptor with the O_CLOEXEC flag set.
1721 *
1722 * Note, that this function can only be called after the fd table has
1723 * been unshared to avoid leaking the pidfd to the new process.
1724 *
1725 * Return: On success, a cloexec pidfd is returned.
1726 * On error, a negative errno number will be returned.
1727 */
1728static int pidfd_create(struct pid *pid)
1729{
1730 int fd;
1731
1732 fd = anon_inode_getfd("[pidfd]", &pidfd_fops, get_pid(pid),
1733 O_RDWR | O_CLOEXEC);
1734 if (fd < 0)
1735 put_pid(pid);
1736
1737 return fd;
1738}
1739
1740static void __delayed_free_task(struct rcu_head *rhp) 1715static void __delayed_free_task(struct rcu_head *rhp)
1741{ 1716{
1742 struct task_struct *tsk = container_of(rhp, struct task_struct, rcu); 1717 struct task_struct *tsk = container_of(rhp, struct task_struct, rcu);
@@ -1774,6 +1749,7 @@ static __latent_entropy struct task_struct *copy_process(
1774 int pidfd = -1, retval; 1749 int pidfd = -1, retval;
1775 struct task_struct *p; 1750 struct task_struct *p;
1776 struct multiprocess_signals delayed; 1751 struct multiprocess_signals delayed;
1752 struct file *pidfile = NULL;
1777 1753
1778 /* 1754 /*
1779 * Don't allow sharing the root directory with processes in a different 1755 * Don't allow sharing the root directory with processes in a different
@@ -1822,8 +1798,6 @@ static __latent_entropy struct task_struct *copy_process(
1822 } 1798 }
1823 1799
1824 if (clone_flags & CLONE_PIDFD) { 1800 if (clone_flags & CLONE_PIDFD) {
1825 int reserved;
1826
1827 /* 1801 /*
1828 * - CLONE_PARENT_SETTID is useless for pidfds and also 1802 * - CLONE_PARENT_SETTID is useless for pidfds and also
1829 * parent_tidptr is used to return pidfds. 1803 * parent_tidptr is used to return pidfds.
@@ -1834,16 +1808,6 @@ static __latent_entropy struct task_struct *copy_process(
1834 if (clone_flags & 1808 if (clone_flags &
1835 (CLONE_DETACHED | CLONE_PARENT_SETTID | CLONE_THREAD)) 1809 (CLONE_DETACHED | CLONE_PARENT_SETTID | CLONE_THREAD))
1836 return ERR_PTR(-EINVAL); 1810 return ERR_PTR(-EINVAL);
1837
1838 /*
1839 * Verify that parent_tidptr is sane so we can potentially
1840 * reuse it later.
1841 */
1842 if (get_user(reserved, parent_tidptr))
1843 return ERR_PTR(-EFAULT);
1844
1845 if (reserved != 0)
1846 return ERR_PTR(-EINVAL);
1847 } 1811 }
1848 1812
1849 /* 1813 /*
@@ -2058,11 +2022,20 @@ static __latent_entropy struct task_struct *copy_process(
2058 * if the fd table isn't shared). 2022 * if the fd table isn't shared).
2059 */ 2023 */
2060 if (clone_flags & CLONE_PIDFD) { 2024 if (clone_flags & CLONE_PIDFD) {
2061 retval = pidfd_create(pid); 2025 retval = get_unused_fd_flags(O_RDWR | O_CLOEXEC);
2062 if (retval < 0) 2026 if (retval < 0)
2063 goto bad_fork_free_pid; 2027 goto bad_fork_free_pid;
2064 2028
2065 pidfd = retval; 2029 pidfd = retval;
2030
2031 pidfile = anon_inode_getfile("[pidfd]", &pidfd_fops, pid,
2032 O_RDWR | O_CLOEXEC);
2033 if (IS_ERR(pidfile)) {
2034 put_unused_fd(pidfd);
2035 goto bad_fork_free_pid;
2036 }
2037 get_pid(pid); /* held by pidfile now */
2038
2066 retval = put_user(pidfd, parent_tidptr); 2039 retval = put_user(pidfd, parent_tidptr);
2067 if (retval) 2040 if (retval)
2068 goto bad_fork_put_pidfd; 2041 goto bad_fork_put_pidfd;
@@ -2180,6 +2153,9 @@ static __latent_entropy struct task_struct *copy_process(
2180 goto bad_fork_cancel_cgroup; 2153 goto bad_fork_cancel_cgroup;
2181 } 2154 }
2182 2155
2156 /* past the last point of failure */
2157 if (pidfile)
2158 fd_install(pidfd, pidfile);
2183 2159
2184 init_task_pid_links(p); 2160 init_task_pid_links(p);
2185 if (likely(p->pid)) { 2161 if (likely(p->pid)) {
@@ -2246,8 +2222,10 @@ bad_fork_cancel_cgroup:
2246bad_fork_cgroup_threadgroup_change_end: 2222bad_fork_cgroup_threadgroup_change_end:
2247 cgroup_threadgroup_change_end(current); 2223 cgroup_threadgroup_change_end(current);
2248bad_fork_put_pidfd: 2224bad_fork_put_pidfd:
2249 if (clone_flags & CLONE_PIDFD) 2225 if (clone_flags & CLONE_PIDFD) {
2250 ksys_close(pidfd); 2226 fput(pidfile);
2227 put_unused_fd(pidfd);
2228 }
2251bad_fork_free_pid: 2229bad_fork_free_pid:
2252 if (pid != &init_struct_pid) 2230 if (pid != &init_struct_pid)
2253 free_pid(pid); 2231 free_pid(pid);
diff --git a/net/bluetooth/6lowpan.c b/net/bluetooth/6lowpan.c
index 19d27bee285e..1555b0c6f7ec 100644
--- a/net/bluetooth/6lowpan.c
+++ b/net/bluetooth/6lowpan.c
@@ -160,10 +160,10 @@ static inline struct lowpan_peer *peer_lookup_dst(struct lowpan_btle_dev *dev,
160 struct in6_addr *daddr, 160 struct in6_addr *daddr,
161 struct sk_buff *skb) 161 struct sk_buff *skb)
162{ 162{
163 struct lowpan_peer *peer;
164 struct in6_addr *nexthop;
165 struct rt6_info *rt = (struct rt6_info *)skb_dst(skb); 163 struct rt6_info *rt = (struct rt6_info *)skb_dst(skb);
166 int count = atomic_read(&dev->peer_count); 164 int count = atomic_read(&dev->peer_count);
165 const struct in6_addr *nexthop;
166 struct lowpan_peer *peer;
167 167
168 BT_DBG("peers %d addr %pI6c rt %p", count, daddr, rt); 168 BT_DBG("peers %d addr %pI6c rt %p", count, daddr, rt);
169 169
diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c
index 3cf0764d5793..15d1cb5aee18 100644
--- a/net/bluetooth/hci_conn.c
+++ b/net/bluetooth/hci_conn.c
@@ -1276,14 +1276,6 @@ int hci_conn_check_link_mode(struct hci_conn *conn)
1276 !test_bit(HCI_CONN_ENCRYPT, &conn->flags)) 1276 !test_bit(HCI_CONN_ENCRYPT, &conn->flags))
1277 return 0; 1277 return 0;
1278 1278
1279 /* The minimum encryption key size needs to be enforced by the
1280 * host stack before establishing any L2CAP connections. The
1281 * specification in theory allows a minimum of 1, but to align
1282 * BR/EDR and LE transports, a minimum of 7 is chosen.
1283 */
1284 if (conn->enc_key_size < HCI_MIN_ENC_KEY_SIZE)
1285 return 0;
1286
1287 return 1; 1279 return 1;
1288} 1280}
1289 1281
@@ -1400,8 +1392,16 @@ auth:
1400 return 0; 1392 return 0;
1401 1393
1402encrypt: 1394encrypt:
1403 if (test_bit(HCI_CONN_ENCRYPT, &conn->flags)) 1395 if (test_bit(HCI_CONN_ENCRYPT, &conn->flags)) {
1396 /* Ensure that the encryption key size has been read,
1397 * otherwise stall the upper layer responses.
1398 */
1399 if (!conn->enc_key_size)
1400 return 0;
1401
1402 /* Nothing else needed, all requirements are met */
1404 return 1; 1403 return 1;
1404 }
1405 1405
1406 hci_conn_encrypt(conn); 1406 hci_conn_encrypt(conn);
1407 return 0; 1407 return 0;
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index b53acd6c9a3d..9f77432dbe38 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -1341,6 +1341,21 @@ static void l2cap_request_info(struct l2cap_conn *conn)
1341 sizeof(req), &req); 1341 sizeof(req), &req);
1342} 1342}
1343 1343
1344static bool l2cap_check_enc_key_size(struct hci_conn *hcon)
1345{
1346 /* The minimum encryption key size needs to be enforced by the
1347 * host stack before establishing any L2CAP connections. The
1348 * specification in theory allows a minimum of 1, but to align
1349 * BR/EDR and LE transports, a minimum of 7 is chosen.
1350 *
1351 * This check might also be called for unencrypted connections
1352 * that have no key size requirements. Ensure that the link is
1353 * actually encrypted before enforcing a key size.
1354 */
1355 return (!test_bit(HCI_CONN_ENCRYPT, &hcon->flags) ||
1356 hcon->enc_key_size > HCI_MIN_ENC_KEY_SIZE);
1357}
1358
1344static void l2cap_do_start(struct l2cap_chan *chan) 1359static void l2cap_do_start(struct l2cap_chan *chan)
1345{ 1360{
1346 struct l2cap_conn *conn = chan->conn; 1361 struct l2cap_conn *conn = chan->conn;
@@ -1358,9 +1373,14 @@ static void l2cap_do_start(struct l2cap_chan *chan)
1358 if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE)) 1373 if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE))
1359 return; 1374 return;
1360 1375
1361 if (l2cap_chan_check_security(chan, true) && 1376 if (!l2cap_chan_check_security(chan, true) ||
1362 __l2cap_no_conn_pending(chan)) 1377 !__l2cap_no_conn_pending(chan))
1378 return;
1379
1380 if (l2cap_check_enc_key_size(conn->hcon))
1363 l2cap_start_connection(chan); 1381 l2cap_start_connection(chan);
1382 else
1383 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
1364} 1384}
1365 1385
1366static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask) 1386static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
@@ -1439,7 +1459,10 @@ static void l2cap_conn_start(struct l2cap_conn *conn)
1439 continue; 1459 continue;
1440 } 1460 }
1441 1461
1442 l2cap_start_connection(chan); 1462 if (l2cap_check_enc_key_size(conn->hcon))
1463 l2cap_start_connection(chan);
1464 else
1465 l2cap_chan_close(chan, ECONNREFUSED);
1443 1466
1444 } else if (chan->state == BT_CONNECT2) { 1467 } else if (chan->state == BT_CONNECT2) {
1445 struct l2cap_conn_rsp rsp; 1468 struct l2cap_conn_rsp rsp;
@@ -7490,7 +7513,7 @@ static void l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
7490 } 7513 }
7491 7514
7492 if (chan->state == BT_CONNECT) { 7515 if (chan->state == BT_CONNECT) {
7493 if (!status) 7516 if (!status && l2cap_check_enc_key_size(hcon))
7494 l2cap_start_connection(chan); 7517 l2cap_start_connection(chan);
7495 else 7518 else
7496 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT); 7519 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
@@ -7499,7 +7522,7 @@ static void l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
7499 struct l2cap_conn_rsp rsp; 7522 struct l2cap_conn_rsp rsp;
7500 __u16 res, stat; 7523 __u16 res, stat;
7501 7524
7502 if (!status) { 7525 if (!status && l2cap_check_enc_key_size(hcon)) {
7503 if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) { 7526 if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
7504 res = L2CAP_CR_PEND; 7527 res = L2CAP_CR_PEND;
7505 stat = L2CAP_CS_AUTHOR_PEND; 7528 stat = L2CAP_CS_AUTHOR_PEND;
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
index cdd6c3418b9e..cc7ef0d05bbd 100644
--- a/net/ipv4/ip_output.c
+++ b/net/ipv4/ip_output.c
@@ -327,18 +327,35 @@ static int ip_finish_output(struct net *net, struct sock *sk, struct sk_buff *sk
327static int ip_mc_finish_output(struct net *net, struct sock *sk, 327static int ip_mc_finish_output(struct net *net, struct sock *sk,
328 struct sk_buff *skb) 328 struct sk_buff *skb)
329{ 329{
330 int ret; 330 struct rtable *new_rt;
331 bool do_cn = false;
332 int ret, err;
331 333
332 ret = BPF_CGROUP_RUN_PROG_INET_EGRESS(sk, skb); 334 ret = BPF_CGROUP_RUN_PROG_INET_EGRESS(sk, skb);
333 switch (ret) { 335 switch (ret) {
334 case NET_XMIT_SUCCESS:
335 return dev_loopback_xmit(net, sk, skb);
336 case NET_XMIT_CN: 336 case NET_XMIT_CN:
337 return dev_loopback_xmit(net, sk, skb) ? : ret; 337 do_cn = true;
338 /* fall through */
339 case NET_XMIT_SUCCESS:
340 break;
338 default: 341 default:
339 kfree_skb(skb); 342 kfree_skb(skb);
340 return ret; 343 return ret;
341 } 344 }
345
346 /* Reset rt_iif so that inet_iif() will return skb->skb_iif. Setting
347 * this to non-zero causes ipi_ifindex in in_pktinfo to be overwritten,
348 * see ipv4_pktinfo_prepare().
349 */
350 new_rt = rt_dst_clone(net->loopback_dev, skb_rtable(skb));
351 if (new_rt) {
352 new_rt->rt_iif = 0;
353 skb_dst_drop(skb);
354 skb_dst_set(skb, &new_rt->dst);
355 }
356
357 err = dev_loopback_xmit(net, sk, skb);
358 return (do_cn && err) ? ret : err;
342} 359}
343 360
344int ip_mc_output(struct net *net, struct sock *sk, struct sk_buff *skb) 361int ip_mc_output(struct net *net, struct sock *sk, struct sk_buff *skb)
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
index 0b8e06ca75d6..40a6abbc9cf6 100644
--- a/net/ipv4/raw.c
+++ b/net/ipv4/raw.c
@@ -197,7 +197,7 @@ static int raw_v4_input(struct sk_buff *skb, const struct iphdr *iph, int hash)
197 } 197 }
198 sk = __raw_v4_lookup(net, sk_next(sk), iph->protocol, 198 sk = __raw_v4_lookup(net, sk_next(sk), iph->protocol,
199 iph->saddr, iph->daddr, 199 iph->saddr, iph->daddr,
200 skb->dev->ifindex, sdif); 200 dif, sdif);
201 } 201 }
202out: 202out:
203 read_unlock(&raw_v4_hashinfo.lock); 203 read_unlock(&raw_v4_hashinfo.lock);
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index 59670fafcd26..a3e466b6a60c 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -1648,6 +1648,39 @@ struct rtable *rt_dst_alloc(struct net_device *dev,
1648} 1648}
1649EXPORT_SYMBOL(rt_dst_alloc); 1649EXPORT_SYMBOL(rt_dst_alloc);
1650 1650
1651struct rtable *rt_dst_clone(struct net_device *dev, struct rtable *rt)
1652{
1653 struct rtable *new_rt;
1654
1655 new_rt = dst_alloc(&ipv4_dst_ops, dev, 1, DST_OBSOLETE_FORCE_CHK,
1656 rt->dst.flags);
1657
1658 if (new_rt) {
1659 new_rt->rt_genid = rt_genid_ipv4(dev_net(dev));
1660 new_rt->rt_flags = rt->rt_flags;
1661 new_rt->rt_type = rt->rt_type;
1662 new_rt->rt_is_input = rt->rt_is_input;
1663 new_rt->rt_iif = rt->rt_iif;
1664 new_rt->rt_pmtu = rt->rt_pmtu;
1665 new_rt->rt_mtu_locked = rt->rt_mtu_locked;
1666 new_rt->rt_gw_family = rt->rt_gw_family;
1667 if (rt->rt_gw_family == AF_INET)
1668 new_rt->rt_gw4 = rt->rt_gw4;
1669 else if (rt->rt_gw_family == AF_INET6)
1670 new_rt->rt_gw6 = rt->rt_gw6;
1671 INIT_LIST_HEAD(&new_rt->rt_uncached);
1672
1673 new_rt->dst.flags |= DST_HOST;
1674 new_rt->dst.input = rt->dst.input;
1675 new_rt->dst.output = rt->dst.output;
1676 new_rt->dst.error = rt->dst.error;
1677 new_rt->dst.lastuse = jiffies;
1678 new_rt->dst.lwtstate = lwtstate_get(rt->dst.lwtstate);
1679 }
1680 return new_rt;
1681}
1682EXPORT_SYMBOL(rt_dst_clone);
1683
1651/* called in rcu_read_lock() section */ 1684/* called in rcu_read_lock() section */
1652int ip_mc_validate_source(struct sk_buff *skb, __be32 daddr, __be32 saddr, 1685int ip_mc_validate_source(struct sk_buff *skb, __be32 daddr, __be32 saddr,
1653 u8 tos, struct net_device *dev, 1686 u8 tos, struct net_device *dev,
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index 5e3a7963b3cb..8e49fd62eea9 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -59,8 +59,8 @@ static int ip6_finish_output2(struct net *net, struct sock *sk, struct sk_buff *
59{ 59{
60 struct dst_entry *dst = skb_dst(skb); 60 struct dst_entry *dst = skb_dst(skb);
61 struct net_device *dev = dst->dev; 61 struct net_device *dev = dst->dev;
62 const struct in6_addr *nexthop;
62 struct neighbour *neigh; 63 struct neighbour *neigh;
63 struct in6_addr *nexthop;
64 int ret; 64 int ret;
65 65
66 if (ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr)) { 66 if (ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr)) {
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index e7c2824435c6..7556275b1cef 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -218,7 +218,8 @@ static struct neighbour *ip6_dst_neigh_lookup(const struct dst_entry *dst,
218{ 218{
219 const struct rt6_info *rt = container_of(dst, struct rt6_info, dst); 219 const struct rt6_info *rt = container_of(dst, struct rt6_info, dst);
220 220
221 return ip6_neigh_lookup(&rt->rt6i_gateway, dst->dev, skb, daddr); 221 return ip6_neigh_lookup(rt6_nexthop(rt, &in6addr_any),
222 dst->dev, skb, daddr);
222} 223}
223 224
224static void ip6_confirm_neigh(const struct dst_entry *dst, const void *daddr) 225static void ip6_confirm_neigh(const struct dst_entry *dst, const void *daddr)
@@ -6073,7 +6074,7 @@ static struct ctl_table ipv6_route_table_template[] = {
6073 .data = &init_net.ipv6.sysctl.skip_notify_on_dev_down, 6074 .data = &init_net.ipv6.sysctl.skip_notify_on_dev_down,
6074 .maxlen = sizeof(int), 6075 .maxlen = sizeof(int),
6075 .mode = 0644, 6076 .mode = 0644,
6076 .proc_handler = proc_dointvec, 6077 .proc_handler = proc_dointvec_minmax,
6077 .extra1 = &zero, 6078 .extra1 = &zero,
6078 .extra2 = &one, 6079 .extra2 = &one,
6079 }, 6080 },
diff --git a/net/netfilter/nf_flow_table_ip.c b/net/netfilter/nf_flow_table_ip.c
index 241317473114..cdfc33517e85 100644
--- a/net/netfilter/nf_flow_table_ip.c
+++ b/net/netfilter/nf_flow_table_ip.c
@@ -439,9 +439,9 @@ nf_flow_offload_ipv6_hook(void *priv, struct sk_buff *skb,
439 struct nf_flowtable *flow_table = priv; 439 struct nf_flowtable *flow_table = priv;
440 struct flow_offload_tuple tuple = {}; 440 struct flow_offload_tuple tuple = {};
441 enum flow_offload_tuple_dir dir; 441 enum flow_offload_tuple_dir dir;
442 const struct in6_addr *nexthop;
442 struct flow_offload *flow; 443 struct flow_offload *flow;
443 struct net_device *outdev; 444 struct net_device *outdev;
444 struct in6_addr *nexthop;
445 struct ipv6hdr *ip6h; 445 struct ipv6hdr *ip6h;
446 struct rt6_info *rt; 446 struct rt6_info *rt;
447 447
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
index 8c27e198268a..8d54f3047768 100644
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
@@ -2412,6 +2412,9 @@ static void tpacket_destruct_skb(struct sk_buff *skb)
2412 2412
2413 ts = __packet_set_timestamp(po, ph, skb); 2413 ts = __packet_set_timestamp(po, ph, skb);
2414 __packet_set_status(po, ph, TP_STATUS_AVAILABLE | ts); 2414 __packet_set_status(po, ph, TP_STATUS_AVAILABLE | ts);
2415
2416 if (!packet_read_pending(&po->tx_ring))
2417 complete(&po->skb_completion);
2415 } 2418 }
2416 2419
2417 sock_wfree(skb); 2420 sock_wfree(skb);
@@ -2596,7 +2599,7 @@ static int tpacket_parse_header(struct packet_sock *po, void *frame,
2596 2599
2597static int tpacket_snd(struct packet_sock *po, struct msghdr *msg) 2600static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
2598{ 2601{
2599 struct sk_buff *skb; 2602 struct sk_buff *skb = NULL;
2600 struct net_device *dev; 2603 struct net_device *dev;
2601 struct virtio_net_hdr *vnet_hdr = NULL; 2604 struct virtio_net_hdr *vnet_hdr = NULL;
2602 struct sockcm_cookie sockc; 2605 struct sockcm_cookie sockc;
@@ -2611,6 +2614,7 @@ static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
2611 int len_sum = 0; 2614 int len_sum = 0;
2612 int status = TP_STATUS_AVAILABLE; 2615 int status = TP_STATUS_AVAILABLE;
2613 int hlen, tlen, copylen = 0; 2616 int hlen, tlen, copylen = 0;
2617 long timeo = 0;
2614 2618
2615 mutex_lock(&po->pg_vec_lock); 2619 mutex_lock(&po->pg_vec_lock);
2616 2620
@@ -2657,12 +2661,21 @@ static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
2657 if ((size_max > dev->mtu + reserve + VLAN_HLEN) && !po->has_vnet_hdr) 2661 if ((size_max > dev->mtu + reserve + VLAN_HLEN) && !po->has_vnet_hdr)
2658 size_max = dev->mtu + reserve + VLAN_HLEN; 2662 size_max = dev->mtu + reserve + VLAN_HLEN;
2659 2663
2664 reinit_completion(&po->skb_completion);
2665
2660 do { 2666 do {
2661 ph = packet_current_frame(po, &po->tx_ring, 2667 ph = packet_current_frame(po, &po->tx_ring,
2662 TP_STATUS_SEND_REQUEST); 2668 TP_STATUS_SEND_REQUEST);
2663 if (unlikely(ph == NULL)) { 2669 if (unlikely(ph == NULL)) {
2664 if (need_wait && need_resched()) 2670 if (need_wait && skb) {
2665 schedule(); 2671 timeo = sock_sndtimeo(&po->sk, msg->msg_flags & MSG_DONTWAIT);
2672 timeo = wait_for_completion_interruptible_timeout(&po->skb_completion, timeo);
2673 if (timeo <= 0) {
2674 err = !timeo ? -ETIMEDOUT : -ERESTARTSYS;
2675 goto out_put;
2676 }
2677 }
2678 /* check for additional frames */
2666 continue; 2679 continue;
2667 } 2680 }
2668 2681
@@ -3218,6 +3231,7 @@ static int packet_create(struct net *net, struct socket *sock, int protocol,
3218 sock_init_data(sock, sk); 3231 sock_init_data(sock, sk);
3219 3232
3220 po = pkt_sk(sk); 3233 po = pkt_sk(sk);
3234 init_completion(&po->skb_completion);
3221 sk->sk_family = PF_PACKET; 3235 sk->sk_family = PF_PACKET;
3222 po->num = proto; 3236 po->num = proto;
3223 po->xmit = dev_queue_xmit; 3237 po->xmit = dev_queue_xmit;
@@ -4327,7 +4341,7 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u,
4327 req3->tp_sizeof_priv || 4341 req3->tp_sizeof_priv ||
4328 req3->tp_feature_req_word) { 4342 req3->tp_feature_req_word) {
4329 err = -EINVAL; 4343 err = -EINVAL;
4330 goto out; 4344 goto out_free_pg_vec;
4331 } 4345 }
4332 } 4346 }
4333 break; 4347 break;
@@ -4391,6 +4405,7 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u,
4391 prb_shutdown_retire_blk_timer(po, rb_queue); 4405 prb_shutdown_retire_blk_timer(po, rb_queue);
4392 } 4406 }
4393 4407
4408out_free_pg_vec:
4394 if (pg_vec) 4409 if (pg_vec)
4395 free_pg_vec(pg_vec, order, req->tp_block_nr); 4410 free_pg_vec(pg_vec, order, req->tp_block_nr);
4396out: 4411out:
diff --git a/net/packet/internal.h b/net/packet/internal.h
index b5bcff2b7a43..82fb2b10f790 100644
--- a/net/packet/internal.h
+++ b/net/packet/internal.h
@@ -128,6 +128,7 @@ struct packet_sock {
128 unsigned int tp_hdrlen; 128 unsigned int tp_hdrlen;
129 unsigned int tp_reserve; 129 unsigned int tp_reserve;
130 unsigned int tp_tstamp; 130 unsigned int tp_tstamp;
131 struct completion skb_completion;
131 struct net_device __rcu *cached_dev; 132 struct net_device __rcu *cached_dev;
132 int (*xmit)(struct sk_buff *skb); 133 int (*xmit)(struct sk_buff *skb);
133 struct packet_type prot_hook ____cacheline_aligned_in_smp; 134 struct packet_type prot_hook ____cacheline_aligned_in_smp;
diff --git a/net/sched/sch_cbs.c b/net/sched/sch_cbs.c
index e16a3d37d2bc..732e109c3055 100644
--- a/net/sched/sch_cbs.c
+++ b/net/sched/sch_cbs.c
@@ -549,12 +549,17 @@ static struct notifier_block cbs_device_notifier = {
549 549
550static int __init cbs_module_init(void) 550static int __init cbs_module_init(void)
551{ 551{
552 int err = register_netdevice_notifier(&cbs_device_notifier); 552 int err;
553 553
554 err = register_netdevice_notifier(&cbs_device_notifier);
554 if (err) 555 if (err)
555 return err; 556 return err;
556 557
557 return register_qdisc(&cbs_qdisc_ops); 558 err = register_qdisc(&cbs_qdisc_ops);
559 if (err)
560 unregister_netdevice_notifier(&cbs_device_notifier);
561
562 return err;
558} 563}
559 564
560static void __exit cbs_module_exit(void) 565static void __exit cbs_module_exit(void)
diff --git a/net/sctp/endpointola.c b/net/sctp/endpointola.c
index e358437ba29b..69cebb2c998b 100644
--- a/net/sctp/endpointola.c
+++ b/net/sctp/endpointola.c
@@ -118,10 +118,6 @@ static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep,
118 /* Initialize the bind addr area */ 118 /* Initialize the bind addr area */
119 sctp_bind_addr_init(&ep->base.bind_addr, 0); 119 sctp_bind_addr_init(&ep->base.bind_addr, 0);
120 120
121 /* Remember who we are attached to. */
122 ep->base.sk = sk;
123 sock_hold(ep->base.sk);
124
125 /* Create the lists of associations. */ 121 /* Create the lists of associations. */
126 INIT_LIST_HEAD(&ep->asocs); 122 INIT_LIST_HEAD(&ep->asocs);
127 123
@@ -154,6 +150,10 @@ static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep,
154 ep->prsctp_enable = net->sctp.prsctp_enable; 150 ep->prsctp_enable = net->sctp.prsctp_enable;
155 ep->reconf_enable = net->sctp.reconf_enable; 151 ep->reconf_enable = net->sctp.reconf_enable;
156 152
153 /* Remember who we are attached to. */
154 ep->base.sk = sk;
155 sock_hold(ep->base.sk);
156
157 return ep; 157 return ep;
158 158
159nomem_shkey: 159nomem_shkey:
diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c
index 828e319fdc0a..302e355f2ebc 100644
--- a/net/smc/af_smc.c
+++ b/net/smc/af_smc.c
@@ -2020,7 +2020,7 @@ static int __init smc_init(void)
2020 2020
2021 rc = smc_pnet_init(); 2021 rc = smc_pnet_init();
2022 if (rc) 2022 if (rc)
2023 return rc; 2023 goto out_pernet_subsys;
2024 2024
2025 rc = smc_llc_init(); 2025 rc = smc_llc_init();
2026 if (rc) { 2026 if (rc) {
@@ -2071,6 +2071,9 @@ out_proto:
2071 proto_unregister(&smc_proto); 2071 proto_unregister(&smc_proto);
2072out_pnet: 2072out_pnet:
2073 smc_pnet_exit(); 2073 smc_pnet_exit();
2074out_pernet_subsys:
2075 unregister_pernet_subsys(&smc_net_ops);
2076
2074 return rc; 2077 return rc;
2075} 2078}
2076 2079
diff --git a/net/smc/smc_core.c b/net/smc/smc_core.c
index 2d2850adc2a3..4ca50ddf8d16 100644
--- a/net/smc/smc_core.c
+++ b/net/smc/smc_core.c
@@ -652,7 +652,10 @@ create:
652 rc = smc_lgr_create(smc, ini); 652 rc = smc_lgr_create(smc, ini);
653 if (rc) 653 if (rc)
654 goto out; 654 goto out;
655 lgr = conn->lgr;
656 write_lock_bh(&lgr->conns_lock);
655 smc_lgr_register_conn(conn); /* add smc conn to lgr */ 657 smc_lgr_register_conn(conn); /* add smc conn to lgr */
658 write_unlock_bh(&lgr->conns_lock);
656 } 659 }
657 conn->local_tx_ctrl.common.type = SMC_CDC_MSG_TYPE; 660 conn->local_tx_ctrl.common.type = SMC_CDC_MSG_TYPE;
658 conn->local_tx_ctrl.len = SMC_WR_TX_SIZE; 661 conn->local_tx_ctrl.len = SMC_WR_TX_SIZE;
diff --git a/net/tipc/core.c b/net/tipc/core.c
index ed536c05252a..c8370722f0bb 100644
--- a/net/tipc/core.c
+++ b/net/tipc/core.c
@@ -134,7 +134,7 @@ static int __init tipc_init(void)
134 if (err) 134 if (err)
135 goto out_sysctl; 135 goto out_sysctl;
136 136
137 err = register_pernet_subsys(&tipc_net_ops); 137 err = register_pernet_device(&tipc_net_ops);
138 if (err) 138 if (err)
139 goto out_pernet; 139 goto out_pernet;
140 140
@@ -142,7 +142,7 @@ static int __init tipc_init(void)
142 if (err) 142 if (err)
143 goto out_socket; 143 goto out_socket;
144 144
145 err = register_pernet_subsys(&tipc_topsrv_net_ops); 145 err = register_pernet_device(&tipc_topsrv_net_ops);
146 if (err) 146 if (err)
147 goto out_pernet_topsrv; 147 goto out_pernet_topsrv;
148 148
@@ -153,11 +153,11 @@ static int __init tipc_init(void)
153 pr_info("Started in single node mode\n"); 153 pr_info("Started in single node mode\n");
154 return 0; 154 return 0;
155out_bearer: 155out_bearer:
156 unregister_pernet_subsys(&tipc_topsrv_net_ops); 156 unregister_pernet_device(&tipc_topsrv_net_ops);
157out_pernet_topsrv: 157out_pernet_topsrv:
158 tipc_socket_stop(); 158 tipc_socket_stop();
159out_socket: 159out_socket:
160 unregister_pernet_subsys(&tipc_net_ops); 160 unregister_pernet_device(&tipc_net_ops);
161out_pernet: 161out_pernet:
162 tipc_unregister_sysctl(); 162 tipc_unregister_sysctl();
163out_sysctl: 163out_sysctl:
@@ -172,9 +172,9 @@ out_netlink:
172static void __exit tipc_exit(void) 172static void __exit tipc_exit(void)
173{ 173{
174 tipc_bearer_cleanup(); 174 tipc_bearer_cleanup();
175 unregister_pernet_subsys(&tipc_topsrv_net_ops); 175 unregister_pernet_device(&tipc_topsrv_net_ops);
176 tipc_socket_stop(); 176 tipc_socket_stop();
177 unregister_pernet_subsys(&tipc_net_ops); 177 unregister_pernet_device(&tipc_net_ops);
178 tipc_netlink_stop(); 178 tipc_netlink_stop();
179 tipc_netlink_compat_stop(); 179 tipc_netlink_compat_stop();
180 tipc_unregister_sysctl(); 180 tipc_unregister_sysctl();
diff --git a/net/tipc/netlink_compat.c b/net/tipc/netlink_compat.c
index 20783ccab794..d86030ef1232 100644
--- a/net/tipc/netlink_compat.c
+++ b/net/tipc/netlink_compat.c
@@ -445,7 +445,11 @@ static int tipc_nl_compat_bearer_disable(struct tipc_nl_compat_cmd_doit *cmd,
445 if (!bearer) 445 if (!bearer)
446 return -EMSGSIZE; 446 return -EMSGSIZE;
447 447
448 len = min_t(int, TLV_GET_DATA_LEN(msg->req), TIPC_MAX_BEARER_NAME); 448 len = TLV_GET_DATA_LEN(msg->req);
449 if (len <= 0)
450 return -EINVAL;
451
452 len = min_t(int, len, TIPC_MAX_BEARER_NAME);
449 if (!string_is_valid(name, len)) 453 if (!string_is_valid(name, len))
450 return -EINVAL; 454 return -EINVAL;
451 455
@@ -539,7 +543,11 @@ static int tipc_nl_compat_link_stat_dump(struct tipc_nl_compat_msg *msg,
539 543
540 name = (char *)TLV_DATA(msg->req); 544 name = (char *)TLV_DATA(msg->req);
541 545
542 len = min_t(int, TLV_GET_DATA_LEN(msg->req), TIPC_MAX_LINK_NAME); 546 len = TLV_GET_DATA_LEN(msg->req);
547 if (len <= 0)
548 return -EINVAL;
549
550 len = min_t(int, len, TIPC_MAX_BEARER_NAME);
543 if (!string_is_valid(name, len)) 551 if (!string_is_valid(name, len))
544 return -EINVAL; 552 return -EINVAL;
545 553
@@ -807,7 +815,11 @@ static int tipc_nl_compat_link_reset_stats(struct tipc_nl_compat_cmd_doit *cmd,
807 if (!link) 815 if (!link)
808 return -EMSGSIZE; 816 return -EMSGSIZE;
809 817
810 len = min_t(int, TLV_GET_DATA_LEN(msg->req), TIPC_MAX_LINK_NAME); 818 len = TLV_GET_DATA_LEN(msg->req);
819 if (len <= 0)
820 return -EINVAL;
821
822 len = min_t(int, len, TIPC_MAX_BEARER_NAME);
811 if (!string_is_valid(name, len)) 823 if (!string_is_valid(name, len))
812 return -EINVAL; 824 return -EINVAL;
813 825
diff --git a/net/tls/tls_main.c b/net/tls/tls_main.c
index fc81ae18cc44..e2b69e805d46 100644
--- a/net/tls/tls_main.c
+++ b/net/tls/tls_main.c
@@ -279,7 +279,8 @@ static void tls_sk_proto_close(struct sock *sk, long timeout)
279 goto skip_tx_cleanup; 279 goto skip_tx_cleanup;
280 } 280 }
281 281
282 if (!tls_complete_pending_work(sk, ctx, 0, &timeo)) 282 if (unlikely(sk->sk_write_pending) &&
283 !wait_on_pending_writer(sk, &timeo))
283 tls_handle_open_record(sk, 0); 284 tls_handle_open_record(sk, 0);
284 285
285 /* We need these for tls_sw_fallback handling of other packets */ 286 /* We need these for tls_sw_fallback handling of other packets */
diff --git a/samples/pidfd/pidfd-metadata.c b/samples/pidfd/pidfd-metadata.c
index 14b454448429..c459155daf9a 100644
--- a/samples/pidfd/pidfd-metadata.c
+++ b/samples/pidfd/pidfd-metadata.c
@@ -83,7 +83,7 @@ static int pidfd_metadata_fd(pid_t pid, int pidfd)
83 83
84int main(int argc, char *argv[]) 84int main(int argc, char *argv[])
85{ 85{
86 int pidfd = 0, ret = EXIT_FAILURE; 86 int pidfd = -1, ret = EXIT_FAILURE;
87 char buf[4096] = { 0 }; 87 char buf[4096] = { 0 };
88 pid_t pid; 88 pid_t pid;
89 int procfd, statusfd; 89 int procfd, statusfd;
@@ -91,7 +91,11 @@ int main(int argc, char *argv[])
91 91
92 pid = pidfd_clone(CLONE_PIDFD, &pidfd); 92 pid = pidfd_clone(CLONE_PIDFD, &pidfd);
93 if (pid < 0) 93 if (pid < 0)
94 exit(ret); 94 err(ret, "CLONE_PIDFD");
95 if (pidfd == -1) {
96 warnx("CLONE_PIDFD is not supported by the kernel");
97 goto out;
98 }
95 99
96 procfd = pidfd_metadata_fd(pid, pidfd); 100 procfd = pidfd_metadata_fd(pid, pidfd);
97 close(pidfd); 101 close(pidfd);
diff --git a/tools/testing/selftests/powerpc/mm/.gitignore b/tools/testing/selftests/powerpc/mm/.gitignore
index ba919308fe30..d503b8764a8e 100644
--- a/tools/testing/selftests/powerpc/mm/.gitignore
+++ b/tools/testing/selftests/powerpc/mm/.gitignore
@@ -3,4 +3,5 @@ subpage_prot
3tempfile 3tempfile
4prot_sao 4prot_sao
5segv_errors 5segv_errors
6wild_bctr \ No newline at end of file 6wild_bctr
7large_vm_fork_separation \ No newline at end of file
diff --git a/tools/testing/selftests/powerpc/mm/Makefile b/tools/testing/selftests/powerpc/mm/Makefile
index 43d68420e363..f1fbc15800c4 100644
--- a/tools/testing/selftests/powerpc/mm/Makefile
+++ b/tools/testing/selftests/powerpc/mm/Makefile
@@ -2,7 +2,8 @@
2noarg: 2noarg:
3 $(MAKE) -C ../ 3 $(MAKE) -C ../
4 4
5TEST_GEN_PROGS := hugetlb_vs_thp_test subpage_prot prot_sao segv_errors wild_bctr 5TEST_GEN_PROGS := hugetlb_vs_thp_test subpage_prot prot_sao segv_errors wild_bctr \
6 large_vm_fork_separation
6TEST_GEN_FILES := tempfile 7TEST_GEN_FILES := tempfile
7 8
8top_srcdir = ../../../../.. 9top_srcdir = ../../../../..
@@ -13,6 +14,7 @@ $(TEST_GEN_PROGS): ../harness.c
13$(OUTPUT)/prot_sao: ../utils.c 14$(OUTPUT)/prot_sao: ../utils.c
14 15
15$(OUTPUT)/wild_bctr: CFLAGS += -m64 16$(OUTPUT)/wild_bctr: CFLAGS += -m64
17$(OUTPUT)/large_vm_fork_separation: CFLAGS += -m64
16 18
17$(OUTPUT)/tempfile: 19$(OUTPUT)/tempfile:
18 dd if=/dev/zero of=$@ bs=64k count=1 20 dd if=/dev/zero of=$@ bs=64k count=1
diff --git a/tools/testing/selftests/powerpc/mm/large_vm_fork_separation.c b/tools/testing/selftests/powerpc/mm/large_vm_fork_separation.c
new file mode 100644
index 000000000000..2363a7f3ab0d
--- /dev/null
+++ b/tools/testing/selftests/powerpc/mm/large_vm_fork_separation.c
@@ -0,0 +1,87 @@
1// SPDX-License-Identifier: GPL-2.0+
2//
3// Copyright 2019, Michael Ellerman, IBM Corp.
4//
5// Test that allocating memory beyond the memory limit and then forking is
6// handled correctly, ie. the child is able to access the mappings beyond the
7// memory limit and the child's writes are not visible to the parent.
8
9#include <stdio.h>
10#include <stdlib.h>
11#include <sys/mman.h>
12#include <sys/types.h>
13#include <sys/wait.h>
14#include <unistd.h>
15
16#include "utils.h"
17
18
19#ifndef MAP_FIXED_NOREPLACE
20#define MAP_FIXED_NOREPLACE MAP_FIXED // "Should be safe" above 512TB
21#endif
22
23
24static int test(void)
25{
26 int p2c[2], c2p[2], rc, status, c, *p;
27 unsigned long page_size;
28 pid_t pid;
29
30 page_size = sysconf(_SC_PAGESIZE);
31 SKIP_IF(page_size != 65536);
32
33 // Create a mapping at 512TB to allocate an extended_id
34 p = mmap((void *)(512ul << 40), page_size, PROT_READ | PROT_WRITE,
35 MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED_NOREPLACE, -1, 0);
36 if (p == MAP_FAILED) {
37 perror("mmap");
38 printf("Error: couldn't mmap(), confirm kernel has 4TB support?\n");
39 return 1;
40 }
41
42 printf("parent writing %p = 1\n", p);
43 *p = 1;
44
45 FAIL_IF(pipe(p2c) == -1 || pipe(c2p) == -1);
46
47 pid = fork();
48 if (pid == 0) {
49 FAIL_IF(read(p2c[0], &c, 1) != 1);
50
51 pid = getpid();
52 printf("child writing %p = %d\n", p, pid);
53 *p = pid;
54
55 FAIL_IF(write(c2p[1], &c, 1) != 1);
56 FAIL_IF(read(p2c[0], &c, 1) != 1);
57 exit(0);
58 }
59
60 c = 0;
61 FAIL_IF(write(p2c[1], &c, 1) != 1);
62 FAIL_IF(read(c2p[0], &c, 1) != 1);
63
64 // Prevent compiler optimisation
65 barrier();
66
67 rc = 0;
68 printf("parent reading %p = %d\n", p, *p);
69 if (*p != 1) {
70 printf("Error: BUG! parent saw child's write! *p = %d\n", *p);
71 rc = 1;
72 }
73
74 FAIL_IF(write(p2c[1], &c, 1) != 1);
75 FAIL_IF(waitpid(pid, &status, 0) == -1);
76 FAIL_IF(!WIFEXITED(status) || WEXITSTATUS(status));
77
78 if (rc == 0)
79 printf("success: test completed OK\n");
80
81 return rc;
82}
83
84int main(void)
85{
86 return test_harness(test, "large_vm_fork_separation");
87}