diff options
author | David S. Miller <davem@davemloft.net> | 2016-05-09 15:59:24 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-05-09 15:59:24 -0400 |
commit | e800072c18f0d7b89a80fa46dceb3d080c80e09c (patch) | |
tree | 8da6cb7944762a60ec37594720c1ad2757631c2f | |
parent | e8ed77dfa90dd79c5343415a4bbbfdab9787b35a (diff) | |
parent | b507146bb6b9ac0c0197100ba3e299825a21fed3 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
In netdevice.h we removed the structure in net-next that is being
changes in 'net'. In macsec.c and rtnetlink.c we have overlaps
between fixes in 'net' and the u64 attribute changes in 'net-next'.
The mlx5 conflicts have to do with vxlan support dependencies.
Signed-off-by: David S. Miller <davem@davemloft.net>
147 files changed, 1271 insertions, 577 deletions
@@ -69,6 +69,7 @@ Jean Tourrilhes <jt@hpl.hp.com> | |||
69 | Jeff Garzik <jgarzik@pretzel.yyz.us> | 69 | Jeff Garzik <jgarzik@pretzel.yyz.us> |
70 | Jens Axboe <axboe@suse.de> | 70 | Jens Axboe <axboe@suse.de> |
71 | Jens Osterkamp <Jens.Osterkamp@de.ibm.com> | 71 | Jens Osterkamp <Jens.Osterkamp@de.ibm.com> |
72 | John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> | ||
72 | John Stultz <johnstul@us.ibm.com> | 73 | John Stultz <johnstul@us.ibm.com> |
73 | <josh@joshtriplett.org> <josh@freedesktop.org> | 74 | <josh@joshtriplett.org> <josh@freedesktop.org> |
74 | <josh@joshtriplett.org> <josh@kernel.org> | 75 | <josh@joshtriplett.org> <josh@kernel.org> |
diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.txt b/Documentation/devicetree/bindings/ata/ahci-platform.txt index 30df832a6f2f..87adfb227ca9 100644 --- a/Documentation/devicetree/bindings/ata/ahci-platform.txt +++ b/Documentation/devicetree/bindings/ata/ahci-platform.txt | |||
@@ -32,6 +32,10 @@ Optional properties: | |||
32 | - target-supply : regulator for SATA target power | 32 | - target-supply : regulator for SATA target power |
33 | - phys : reference to the SATA PHY node | 33 | - phys : reference to the SATA PHY node |
34 | - phy-names : must be "sata-phy" | 34 | - phy-names : must be "sata-phy" |
35 | - ports-implemented : Mask that indicates which ports that the HBA supports | ||
36 | are available for software to use. Useful if PORTS_IMPL | ||
37 | is not programmed by the BIOS, which is true with | ||
38 | some embedded SOC's. | ||
35 | 39 | ||
36 | Required properties when using sub-nodes: | 40 | Required properties when using sub-nodes: |
37 | - #address-cells : number of cells to encode an address | 41 | - #address-cells : number of cells to encode an address |
diff --git a/Documentation/networking/checksum-offloads.txt b/Documentation/networking/checksum-offloads.txt index de2a327766a7..56e36861245f 100644 --- a/Documentation/networking/checksum-offloads.txt +++ b/Documentation/networking/checksum-offloads.txt | |||
@@ -69,18 +69,18 @@ LCO: Local Checksum Offload | |||
69 | LCO is a technique for efficiently computing the outer checksum of an | 69 | LCO is a technique for efficiently computing the outer checksum of an |
70 | encapsulated datagram when the inner checksum is due to be offloaded. | 70 | encapsulated datagram when the inner checksum is due to be offloaded. |
71 | The ones-complement sum of a correctly checksummed TCP or UDP packet is | 71 | The ones-complement sum of a correctly checksummed TCP or UDP packet is |
72 | equal to the sum of the pseudo header, because everything else gets | 72 | equal to the complement of the sum of the pseudo header, because everything |
73 | 'cancelled out' by the checksum field. This is because the sum was | 73 | else gets 'cancelled out' by the checksum field. This is because the sum was |
74 | complemented before being written to the checksum field. | 74 | complemented before being written to the checksum field. |
75 | More generally, this holds in any case where the 'IP-style' ones complement | 75 | More generally, this holds in any case where the 'IP-style' ones complement |
76 | checksum is used, and thus any checksum that TX Checksum Offload supports. | 76 | checksum is used, and thus any checksum that TX Checksum Offload supports. |
77 | That is, if we have set up TX Checksum Offload with a start/offset pair, we | 77 | That is, if we have set up TX Checksum Offload with a start/offset pair, we |
78 | know that _after the device has filled in that checksum_, the ones | 78 | know that after the device has filled in that checksum, the ones |
79 | complement sum from csum_start to the end of the packet will be equal to | 79 | complement sum from csum_start to the end of the packet will be equal to |
80 | _whatever value we put in the checksum field beforehand_. This allows us | 80 | the complement of whatever value we put in the checksum field beforehand. |
81 | to compute the outer checksum without looking at the payload: we simply | 81 | This allows us to compute the outer checksum without looking at the payload: |
82 | stop summing when we get to csum_start, then add the 16-bit word at | 82 | we simply stop summing when we get to csum_start, then add the complement of |
83 | (csum_start + csum_offset). | 83 | the 16-bit word at (csum_start + csum_offset). |
84 | Then, when the true inner checksum is filled in (either by hardware or by | 84 | Then, when the true inner checksum is filled in (either by hardware or by |
85 | skb_checksum_help()), the outer checksum will become correct by virtue of | 85 | skb_checksum_help()), the outer checksum will become correct by virtue of |
86 | the arithmetic. | 86 | the arithmetic. |
diff --git a/MAINTAINERS b/MAINTAINERS index e425912ff933..b57df66532d2 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -872,9 +872,9 @@ F: drivers/perf/arm_pmu.c | |||
872 | F: include/linux/perf/arm_pmu.h | 872 | F: include/linux/perf/arm_pmu.h |
873 | 873 | ||
874 | ARM PORT | 874 | ARM PORT |
875 | M: Russell King <linux@arm.linux.org.uk> | 875 | M: Russell King <linux@armlinux.org.uk> |
876 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 876 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
877 | W: http://www.arm.linux.org.uk/ | 877 | W: http://www.armlinux.org.uk/ |
878 | S: Maintained | 878 | S: Maintained |
879 | F: arch/arm/ | 879 | F: arch/arm/ |
880 | 880 | ||
@@ -886,35 +886,35 @@ F: arch/arm/plat-*/ | |||
886 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc.git | 886 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc.git |
887 | 887 | ||
888 | ARM PRIMECELL AACI PL041 DRIVER | 888 | ARM PRIMECELL AACI PL041 DRIVER |
889 | M: Russell King <linux@arm.linux.org.uk> | 889 | M: Russell King <linux@armlinux.org.uk> |
890 | S: Maintained | 890 | S: Maintained |
891 | F: sound/arm/aaci.* | 891 | F: sound/arm/aaci.* |
892 | 892 | ||
893 | ARM PRIMECELL CLCD PL110 DRIVER | 893 | ARM PRIMECELL CLCD PL110 DRIVER |
894 | M: Russell King <linux@arm.linux.org.uk> | 894 | M: Russell King <linux@armlinux.org.uk> |
895 | S: Maintained | 895 | S: Maintained |
896 | F: drivers/video/fbdev/amba-clcd.* | 896 | F: drivers/video/fbdev/amba-clcd.* |
897 | 897 | ||
898 | ARM PRIMECELL KMI PL050 DRIVER | 898 | ARM PRIMECELL KMI PL050 DRIVER |
899 | M: Russell King <linux@arm.linux.org.uk> | 899 | M: Russell King <linux@armlinux.org.uk> |
900 | S: Maintained | 900 | S: Maintained |
901 | F: drivers/input/serio/ambakmi.* | 901 | F: drivers/input/serio/ambakmi.* |
902 | F: include/linux/amba/kmi.h | 902 | F: include/linux/amba/kmi.h |
903 | 903 | ||
904 | ARM PRIMECELL MMCI PL180/1 DRIVER | 904 | ARM PRIMECELL MMCI PL180/1 DRIVER |
905 | M: Russell King <linux@arm.linux.org.uk> | 905 | M: Russell King <linux@armlinux.org.uk> |
906 | S: Maintained | 906 | S: Maintained |
907 | F: drivers/mmc/host/mmci.* | 907 | F: drivers/mmc/host/mmci.* |
908 | F: include/linux/amba/mmci.h | 908 | F: include/linux/amba/mmci.h |
909 | 909 | ||
910 | ARM PRIMECELL UART PL010 AND PL011 DRIVERS | 910 | ARM PRIMECELL UART PL010 AND PL011 DRIVERS |
911 | M: Russell King <linux@arm.linux.org.uk> | 911 | M: Russell King <linux@armlinux.org.uk> |
912 | S: Maintained | 912 | S: Maintained |
913 | F: drivers/tty/serial/amba-pl01*.c | 913 | F: drivers/tty/serial/amba-pl01*.c |
914 | F: include/linux/amba/serial.h | 914 | F: include/linux/amba/serial.h |
915 | 915 | ||
916 | ARM PRIMECELL BUS SUPPORT | 916 | ARM PRIMECELL BUS SUPPORT |
917 | M: Russell King <linux@arm.linux.org.uk> | 917 | M: Russell King <linux@armlinux.org.uk> |
918 | S: Maintained | 918 | S: Maintained |
919 | F: drivers/amba/ | 919 | F: drivers/amba/ |
920 | F: include/linux/amba/bus.h | 920 | F: include/linux/amba/bus.h |
@@ -1036,7 +1036,7 @@ L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | |||
1036 | S: Maintained | 1036 | S: Maintained |
1037 | 1037 | ||
1038 | ARM/CLKDEV SUPPORT | 1038 | ARM/CLKDEV SUPPORT |
1039 | M: Russell King <linux@arm.linux.org.uk> | 1039 | M: Russell King <linux@armlinux.org.uk> |
1040 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 1040 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
1041 | S: Maintained | 1041 | S: Maintained |
1042 | F: arch/arm/include/asm/clkdev.h | 1042 | F: arch/arm/include/asm/clkdev.h |
@@ -1093,9 +1093,9 @@ F: arch/arm/boot/dts/cx92755* | |||
1093 | N: digicolor | 1093 | N: digicolor |
1094 | 1094 | ||
1095 | ARM/EBSA110 MACHINE SUPPORT | 1095 | ARM/EBSA110 MACHINE SUPPORT |
1096 | M: Russell King <linux@arm.linux.org.uk> | 1096 | M: Russell King <linux@armlinux.org.uk> |
1097 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 1097 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
1098 | W: http://www.arm.linux.org.uk/ | 1098 | W: http://www.armlinux.org.uk/ |
1099 | S: Maintained | 1099 | S: Maintained |
1100 | F: arch/arm/mach-ebsa110/ | 1100 | F: arch/arm/mach-ebsa110/ |
1101 | F: drivers/net/ethernet/amd/am79c961a.* | 1101 | F: drivers/net/ethernet/amd/am79c961a.* |
@@ -1124,9 +1124,9 @@ T: git git://git.berlios.de/gemini-board | |||
1124 | F: arch/arm/mm/*-fa* | 1124 | F: arch/arm/mm/*-fa* |
1125 | 1125 | ||
1126 | ARM/FOOTBRIDGE ARCHITECTURE | 1126 | ARM/FOOTBRIDGE ARCHITECTURE |
1127 | M: Russell King <linux@arm.linux.org.uk> | 1127 | M: Russell King <linux@armlinux.org.uk> |
1128 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 1128 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
1129 | W: http://www.arm.linux.org.uk/ | 1129 | W: http://www.armlinux.org.uk/ |
1130 | S: Maintained | 1130 | S: Maintained |
1131 | F: arch/arm/include/asm/hardware/dec21285.h | 1131 | F: arch/arm/include/asm/hardware/dec21285.h |
1132 | F: arch/arm/mach-footbridge/ | 1132 | F: arch/arm/mach-footbridge/ |
@@ -1457,7 +1457,7 @@ S: Maintained | |||
1457 | ARM/PT DIGITAL BOARD PORT | 1457 | ARM/PT DIGITAL BOARD PORT |
1458 | M: Stefan Eletzhofer <stefan.eletzhofer@eletztrick.de> | 1458 | M: Stefan Eletzhofer <stefan.eletzhofer@eletztrick.de> |
1459 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 1459 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
1460 | W: http://www.arm.linux.org.uk/ | 1460 | W: http://www.armlinux.org.uk/ |
1461 | S: Maintained | 1461 | S: Maintained |
1462 | 1462 | ||
1463 | ARM/QUALCOMM SUPPORT | 1463 | ARM/QUALCOMM SUPPORT |
@@ -1493,9 +1493,9 @@ S: Supported | |||
1493 | F: arch/arm64/boot/dts/renesas/ | 1493 | F: arch/arm64/boot/dts/renesas/ |
1494 | 1494 | ||
1495 | ARM/RISCPC ARCHITECTURE | 1495 | ARM/RISCPC ARCHITECTURE |
1496 | M: Russell King <linux@arm.linux.org.uk> | 1496 | M: Russell King <linux@armlinux.org.uk> |
1497 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 1497 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
1498 | W: http://www.arm.linux.org.uk/ | 1498 | W: http://www.armlinux.org.uk/ |
1499 | S: Maintained | 1499 | S: Maintained |
1500 | F: arch/arm/include/asm/hardware/entry-macro-iomd.S | 1500 | F: arch/arm/include/asm/hardware/entry-macro-iomd.S |
1501 | F: arch/arm/include/asm/hardware/ioc.h | 1501 | F: arch/arm/include/asm/hardware/ioc.h |
@@ -1773,9 +1773,9 @@ F: drivers/clk/versatile/clk-vexpress-osc.c | |||
1773 | F: drivers/clocksource/versatile.c | 1773 | F: drivers/clocksource/versatile.c |
1774 | 1774 | ||
1775 | ARM/VFP SUPPORT | 1775 | ARM/VFP SUPPORT |
1776 | M: Russell King <linux@arm.linux.org.uk> | 1776 | M: Russell King <linux@armlinux.org.uk> |
1777 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 1777 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
1778 | W: http://www.arm.linux.org.uk/ | 1778 | W: http://www.armlinux.org.uk/ |
1779 | S: Maintained | 1779 | S: Maintained |
1780 | F: arch/arm/vfp/ | 1780 | F: arch/arm/vfp/ |
1781 | 1781 | ||
@@ -2924,7 +2924,7 @@ F: mm/cleancache.c | |||
2924 | F: include/linux/cleancache.h | 2924 | F: include/linux/cleancache.h |
2925 | 2925 | ||
2926 | CLK API | 2926 | CLK API |
2927 | M: Russell King <linux@arm.linux.org.uk> | 2927 | M: Russell King <linux@armlinux.org.uk> |
2928 | L: linux-clk@vger.kernel.org | 2928 | L: linux-clk@vger.kernel.org |
2929 | S: Maintained | 2929 | S: Maintained |
2930 | F: include/linux/clk.h | 2930 | F: include/linux/clk.h |
@@ -3358,9 +3358,9 @@ S: Supported | |||
3358 | F: drivers/net/ethernet/stmicro/stmmac/ | 3358 | F: drivers/net/ethernet/stmicro/stmmac/ |
3359 | 3359 | ||
3360 | CYBERPRO FB DRIVER | 3360 | CYBERPRO FB DRIVER |
3361 | M: Russell King <linux@arm.linux.org.uk> | 3361 | M: Russell King <linux@armlinux.org.uk> |
3362 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 3362 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
3363 | W: http://www.arm.linux.org.uk/ | 3363 | W: http://www.armlinux.org.uk/ |
3364 | S: Maintained | 3364 | S: Maintained |
3365 | F: drivers/video/fbdev/cyber2000fb.* | 3365 | F: drivers/video/fbdev/cyber2000fb.* |
3366 | 3366 | ||
@@ -3885,7 +3885,7 @@ F: Documentation/devicetree/bindings/display/st,stih4xx.txt | |||
3885 | 3885 | ||
3886 | DRM DRIVERS FOR VIVANTE GPU IP | 3886 | DRM DRIVERS FOR VIVANTE GPU IP |
3887 | M: Lucas Stach <l.stach@pengutronix.de> | 3887 | M: Lucas Stach <l.stach@pengutronix.de> |
3888 | R: Russell King <linux+etnaviv@arm.linux.org.uk> | 3888 | R: Russell King <linux+etnaviv@armlinux.org.uk> |
3889 | R: Christian Gmeiner <christian.gmeiner@gmail.com> | 3889 | R: Christian Gmeiner <christian.gmeiner@gmail.com> |
3890 | L: dri-devel@lists.freedesktop.org | 3890 | L: dri-devel@lists.freedesktop.org |
3891 | S: Maintained | 3891 | S: Maintained |
@@ -4227,8 +4227,8 @@ F: Documentation/efi-stub.txt | |||
4227 | F: arch/ia64/kernel/efi.c | 4227 | F: arch/ia64/kernel/efi.c |
4228 | F: arch/x86/boot/compressed/eboot.[ch] | 4228 | F: arch/x86/boot/compressed/eboot.[ch] |
4229 | F: arch/x86/include/asm/efi.h | 4229 | F: arch/x86/include/asm/efi.h |
4230 | F: arch/x86/platform/efi/* | 4230 | F: arch/x86/platform/efi/ |
4231 | F: drivers/firmware/efi/* | 4231 | F: drivers/firmware/efi/ |
4232 | F: include/linux/efi*.h | 4232 | F: include/linux/efi*.h |
4233 | 4233 | ||
4234 | EFI VARIABLE FILESYSTEM | 4234 | EFI VARIABLE FILESYSTEM |
@@ -6902,7 +6902,7 @@ L: linux-man@vger.kernel.org | |||
6902 | S: Maintained | 6902 | S: Maintained |
6903 | 6903 | ||
6904 | MARVELL ARMADA DRM SUPPORT | 6904 | MARVELL ARMADA DRM SUPPORT |
6905 | M: Russell King <rmk+kernel@arm.linux.org.uk> | 6905 | M: Russell King <rmk+kernel@armlinux.org.uk> |
6906 | S: Maintained | 6906 | S: Maintained |
6907 | F: drivers/gpu/drm/armada/ | 6907 | F: drivers/gpu/drm/armada/ |
6908 | 6908 | ||
@@ -7902,7 +7902,7 @@ S: Supported | |||
7902 | F: drivers/nfc/nxp-nci | 7902 | F: drivers/nfc/nxp-nci |
7903 | 7903 | ||
7904 | NXP TDA998X DRM DRIVER | 7904 | NXP TDA998X DRM DRIVER |
7905 | M: Russell King <rmk+kernel@arm.linux.org.uk> | 7905 | M: Russell King <rmk+kernel@armlinux.org.uk> |
7906 | S: Supported | 7906 | S: Supported |
7907 | F: drivers/gpu/drm/i2c/tda998x_drv.c | 7907 | F: drivers/gpu/drm/i2c/tda998x_drv.c |
7908 | F: include/drm/i2c/tda998x.h | 7908 | F: include/drm/i2c/tda998x.h |
@@ -7975,7 +7975,7 @@ F: arch/arm/*omap*/*pm* | |||
7975 | F: drivers/cpufreq/omap-cpufreq.c | 7975 | F: drivers/cpufreq/omap-cpufreq.c |
7976 | 7976 | ||
7977 | OMAP POWERDOMAIN SOC ADAPTATION LAYER SUPPORT | 7977 | OMAP POWERDOMAIN SOC ADAPTATION LAYER SUPPORT |
7978 | M: Rajendra Nayak <rnayak@ti.com> | 7978 | M: Rajendra Nayak <rnayak@codeaurora.org> |
7979 | M: Paul Walmsley <paul@pwsan.com> | 7979 | M: Paul Walmsley <paul@pwsan.com> |
7980 | L: linux-omap@vger.kernel.org | 7980 | L: linux-omap@vger.kernel.org |
7981 | S: Maintained | 7981 | S: Maintained |
@@ -1,7 +1,7 @@ | |||
1 | VERSION = 4 | 1 | VERSION = 4 |
2 | PATCHLEVEL = 6 | 2 | PATCHLEVEL = 6 |
3 | SUBLEVEL = 0 | 3 | SUBLEVEL = 0 |
4 | EXTRAVERSION = -rc6 | 4 | EXTRAVERSION = -rc7 |
5 | NAME = Charred Weasel | 5 | NAME = Charred Weasel |
6 | 6 | ||
7 | # *DOCUMENTATION* | 7 | # *DOCUMENTATION* |
diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig index ec4791ea6911..a8767430df7d 100644 --- a/arch/arc/Kconfig +++ b/arch/arc/Kconfig | |||
@@ -58,6 +58,9 @@ config GENERIC_CSUM | |||
58 | config RWSEM_GENERIC_SPINLOCK | 58 | config RWSEM_GENERIC_SPINLOCK |
59 | def_bool y | 59 | def_bool y |
60 | 60 | ||
61 | config ARCH_DISCONTIGMEM_ENABLE | ||
62 | def_bool y | ||
63 | |||
61 | config ARCH_FLATMEM_ENABLE | 64 | config ARCH_FLATMEM_ENABLE |
62 | def_bool y | 65 | def_bool y |
63 | 66 | ||
@@ -347,6 +350,15 @@ config ARC_HUGEPAGE_16M | |||
347 | 350 | ||
348 | endchoice | 351 | endchoice |
349 | 352 | ||
353 | config NODES_SHIFT | ||
354 | int "Maximum NUMA Nodes (as a power of 2)" | ||
355 | default "1" if !DISCONTIGMEM | ||
356 | default "2" if DISCONTIGMEM | ||
357 | depends on NEED_MULTIPLE_NODES | ||
358 | ---help--- | ||
359 | Accessing memory beyond 1GB (with or w/o PAE) requires 2 memory | ||
360 | zones. | ||
361 | |||
350 | if ISA_ARCOMPACT | 362 | if ISA_ARCOMPACT |
351 | 363 | ||
352 | config ARC_COMPACT_IRQ_LEVELS | 364 | config ARC_COMPACT_IRQ_LEVELS |
@@ -455,6 +467,7 @@ config LINUX_LINK_BASE | |||
455 | 467 | ||
456 | config HIGHMEM | 468 | config HIGHMEM |
457 | bool "High Memory Support" | 469 | bool "High Memory Support" |
470 | select DISCONTIGMEM | ||
458 | help | 471 | help |
459 | With ARC 2G:2G address split, only upper 2G is directly addressable by | 472 | With ARC 2G:2G address split, only upper 2G is directly addressable by |
460 | kernel. Enable this to potentially allow access to rest of 2G and PAE | 473 | kernel. Enable this to potentially allow access to rest of 2G and PAE |
diff --git a/arch/arc/include/asm/io.h b/arch/arc/include/asm/io.h index 17f85c9c73cf..c22b181e8206 100644 --- a/arch/arc/include/asm/io.h +++ b/arch/arc/include/asm/io.h | |||
@@ -13,6 +13,15 @@ | |||
13 | #include <asm/byteorder.h> | 13 | #include <asm/byteorder.h> |
14 | #include <asm/page.h> | 14 | #include <asm/page.h> |
15 | 15 | ||
16 | #ifdef CONFIG_ISA_ARCV2 | ||
17 | #include <asm/barrier.h> | ||
18 | #define __iormb() rmb() | ||
19 | #define __iowmb() wmb() | ||
20 | #else | ||
21 | #define __iormb() do { } while (0) | ||
22 | #define __iowmb() do { } while (0) | ||
23 | #endif | ||
24 | |||
16 | extern void __iomem *ioremap(phys_addr_t paddr, unsigned long size); | 25 | extern void __iomem *ioremap(phys_addr_t paddr, unsigned long size); |
17 | extern void __iomem *ioremap_prot(phys_addr_t paddr, unsigned long size, | 26 | extern void __iomem *ioremap_prot(phys_addr_t paddr, unsigned long size, |
18 | unsigned long flags); | 27 | unsigned long flags); |
@@ -31,6 +40,15 @@ extern void iounmap(const void __iomem *addr); | |||
31 | #define ioremap_wc(phy, sz) ioremap(phy, sz) | 40 | #define ioremap_wc(phy, sz) ioremap(phy, sz) |
32 | #define ioremap_wt(phy, sz) ioremap(phy, sz) | 41 | #define ioremap_wt(phy, sz) ioremap(phy, sz) |
33 | 42 | ||
43 | /* | ||
44 | * io{read,write}{16,32}be() macros | ||
45 | */ | ||
46 | #define ioread16be(p) ({ u16 __v = be16_to_cpu((__force __be16)__raw_readw(p)); __iormb(); __v; }) | ||
47 | #define ioread32be(p) ({ u32 __v = be32_to_cpu((__force __be32)__raw_readl(p)); __iormb(); __v; }) | ||
48 | |||
49 | #define iowrite16be(v,p) ({ __iowmb(); __raw_writew((__force u16)cpu_to_be16(v), p); }) | ||
50 | #define iowrite32be(v,p) ({ __iowmb(); __raw_writel((__force u32)cpu_to_be32(v), p); }) | ||
51 | |||
34 | /* Change struct page to physical address */ | 52 | /* Change struct page to physical address */ |
35 | #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) | 53 | #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) |
36 | 54 | ||
@@ -108,15 +126,6 @@ static inline void __raw_writel(u32 w, volatile void __iomem *addr) | |||
108 | 126 | ||
109 | } | 127 | } |
110 | 128 | ||
111 | #ifdef CONFIG_ISA_ARCV2 | ||
112 | #include <asm/barrier.h> | ||
113 | #define __iormb() rmb() | ||
114 | #define __iowmb() wmb() | ||
115 | #else | ||
116 | #define __iormb() do { } while (0) | ||
117 | #define __iowmb() do { } while (0) | ||
118 | #endif | ||
119 | |||
120 | /* | 129 | /* |
121 | * MMIO can also get buffered/optimized in micro-arch, so barriers needed | 130 | * MMIO can also get buffered/optimized in micro-arch, so barriers needed |
122 | * Based on ARM model for the typical use case | 131 | * Based on ARM model for the typical use case |
diff --git a/arch/arc/include/asm/mmzone.h b/arch/arc/include/asm/mmzone.h new file mode 100644 index 000000000000..8e97136413d9 --- /dev/null +++ b/arch/arc/include/asm/mmzone.h | |||
@@ -0,0 +1,43 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2016 Synopsys, Inc. (www.synopsys.com) | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_ARC_MMZONE_H | ||
10 | #define _ASM_ARC_MMZONE_H | ||
11 | |||
12 | #ifdef CONFIG_DISCONTIGMEM | ||
13 | |||
14 | extern struct pglist_data node_data[]; | ||
15 | #define NODE_DATA(nid) (&node_data[nid]) | ||
16 | |||
17 | static inline int pfn_to_nid(unsigned long pfn) | ||
18 | { | ||
19 | int is_end_low = 1; | ||
20 | |||
21 | if (IS_ENABLED(CONFIG_ARC_HAS_PAE40)) | ||
22 | is_end_low = pfn <= virt_to_pfn(0xFFFFFFFFUL); | ||
23 | |||
24 | /* | ||
25 | * node 0: lowmem: 0x8000_0000 to 0xFFFF_FFFF | ||
26 | * node 1: HIGHMEM w/o PAE40: 0x0 to 0x7FFF_FFFF | ||
27 | * HIGHMEM with PAE40: 0x1_0000_0000 to ... | ||
28 | */ | ||
29 | if (pfn >= ARCH_PFN_OFFSET && is_end_low) | ||
30 | return 0; | ||
31 | |||
32 | return 1; | ||
33 | } | ||
34 | |||
35 | static inline int pfn_valid(unsigned long pfn) | ||
36 | { | ||
37 | int nid = pfn_to_nid(pfn); | ||
38 | |||
39 | return (pfn <= node_end_pfn(nid)); | ||
40 | } | ||
41 | #endif /* CONFIG_DISCONTIGMEM */ | ||
42 | |||
43 | #endif | ||
diff --git a/arch/arc/include/asm/page.h b/arch/arc/include/asm/page.h index 36da89e2c853..0d53854884d0 100644 --- a/arch/arc/include/asm/page.h +++ b/arch/arc/include/asm/page.h | |||
@@ -72,11 +72,20 @@ typedef unsigned long pgprot_t; | |||
72 | 72 | ||
73 | typedef pte_t * pgtable_t; | 73 | typedef pte_t * pgtable_t; |
74 | 74 | ||
75 | /* | ||
76 | * Use virt_to_pfn with caution: | ||
77 | * If used in pte or paddr related macros, it could cause truncation | ||
78 | * in PAE40 builds | ||
79 | * As a rule of thumb, only use it in helpers starting with virt_ | ||
80 | * You have been warned ! | ||
81 | */ | ||
75 | #define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT) | 82 | #define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT) |
76 | 83 | ||
77 | #define ARCH_PFN_OFFSET virt_to_pfn(CONFIG_LINUX_LINK_BASE) | 84 | #define ARCH_PFN_OFFSET virt_to_pfn(CONFIG_LINUX_LINK_BASE) |
78 | 85 | ||
86 | #ifdef CONFIG_FLATMEM | ||
79 | #define pfn_valid(pfn) (((pfn) - ARCH_PFN_OFFSET) < max_mapnr) | 87 | #define pfn_valid(pfn) (((pfn) - ARCH_PFN_OFFSET) < max_mapnr) |
88 | #endif | ||
80 | 89 | ||
81 | /* | 90 | /* |
82 | * __pa, __va, virt_to_page (ALERT: deprecated, don't use them) | 91 | * __pa, __va, virt_to_page (ALERT: deprecated, don't use them) |
@@ -85,12 +94,10 @@ typedef pte_t * pgtable_t; | |||
85 | * virt here means link-address/program-address as embedded in object code. | 94 | * virt here means link-address/program-address as embedded in object code. |
86 | * And for ARC, link-addr = physical address | 95 | * And for ARC, link-addr = physical address |
87 | */ | 96 | */ |
88 | #define __pa(vaddr) ((unsigned long)vaddr) | 97 | #define __pa(vaddr) ((unsigned long)(vaddr)) |
89 | #define __va(paddr) ((void *)((unsigned long)(paddr))) | 98 | #define __va(paddr) ((void *)((unsigned long)(paddr))) |
90 | 99 | ||
91 | #define virt_to_page(kaddr) \ | 100 | #define virt_to_page(kaddr) pfn_to_page(virt_to_pfn(kaddr)) |
92 | (mem_map + virt_to_pfn((kaddr) - CONFIG_LINUX_LINK_BASE)) | ||
93 | |||
94 | #define virt_addr_valid(kaddr) pfn_valid(virt_to_pfn(kaddr)) | 101 | #define virt_addr_valid(kaddr) pfn_valid(virt_to_pfn(kaddr)) |
95 | 102 | ||
96 | /* Default Permissions for stack/heaps pages (Non Executable) */ | 103 | /* Default Permissions for stack/heaps pages (Non Executable) */ |
diff --git a/arch/arc/include/asm/pgtable.h b/arch/arc/include/asm/pgtable.h index 7d6c93e63adf..10d4b8b8e545 100644 --- a/arch/arc/include/asm/pgtable.h +++ b/arch/arc/include/asm/pgtable.h | |||
@@ -278,14 +278,13 @@ static inline void pmd_set(pmd_t *pmdp, pte_t *ptep) | |||
278 | #define pmd_present(x) (pmd_val(x)) | 278 | #define pmd_present(x) (pmd_val(x)) |
279 | #define pmd_clear(xp) do { pmd_val(*(xp)) = 0; } while (0) | 279 | #define pmd_clear(xp) do { pmd_val(*(xp)) = 0; } while (0) |
280 | 280 | ||
281 | #define pte_page(pte) \ | 281 | #define pte_page(pte) pfn_to_page(pte_pfn(pte)) |
282 | (mem_map + virt_to_pfn(pte_val(pte) - CONFIG_LINUX_LINK_BASE)) | ||
283 | |||
284 | #define mk_pte(page, prot) pfn_pte(page_to_pfn(page), prot) | 282 | #define mk_pte(page, prot) pfn_pte(page_to_pfn(page), prot) |
285 | #define pte_pfn(pte) virt_to_pfn(pte_val(pte)) | 283 | #define pfn_pte(pfn, prot) (__pte(((pte_t)(pfn) << PAGE_SHIFT) | pgprot_val(prot))) |
286 | #define pfn_pte(pfn, prot) (__pte(((pte_t)(pfn) << PAGE_SHIFT) | \ | 284 | |
287 | pgprot_val(prot))) | 285 | /* Don't use virt_to_pfn for macros below: could cause truncations for PAE40*/ |
288 | #define __pte_index(addr) (virt_to_pfn(addr) & (PTRS_PER_PTE - 1)) | 286 | #define pte_pfn(pte) (pte_val(pte) >> PAGE_SHIFT) |
287 | #define __pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) | ||
289 | 288 | ||
290 | /* | 289 | /* |
291 | * pte_offset gets a @ptr to PMD entry (PGD in our 2-tier paging system) | 290 | * pte_offset gets a @ptr to PMD entry (PGD in our 2-tier paging system) |
diff --git a/arch/arc/mm/init.c b/arch/arc/mm/init.c index 5487d0b97400..8be930394750 100644 --- a/arch/arc/mm/init.c +++ b/arch/arc/mm/init.c | |||
@@ -30,11 +30,16 @@ static const unsigned long low_mem_start = CONFIG_LINUX_LINK_BASE; | |||
30 | static unsigned long low_mem_sz; | 30 | static unsigned long low_mem_sz; |
31 | 31 | ||
32 | #ifdef CONFIG_HIGHMEM | 32 | #ifdef CONFIG_HIGHMEM |
33 | static unsigned long min_high_pfn; | 33 | static unsigned long min_high_pfn, max_high_pfn; |
34 | static u64 high_mem_start; | 34 | static u64 high_mem_start; |
35 | static u64 high_mem_sz; | 35 | static u64 high_mem_sz; |
36 | #endif | 36 | #endif |
37 | 37 | ||
38 | #ifdef CONFIG_DISCONTIGMEM | ||
39 | struct pglist_data node_data[MAX_NUMNODES] __read_mostly; | ||
40 | EXPORT_SYMBOL(node_data); | ||
41 | #endif | ||
42 | |||
38 | /* User can over-ride above with "mem=nnn[KkMm]" in cmdline */ | 43 | /* User can over-ride above with "mem=nnn[KkMm]" in cmdline */ |
39 | static int __init setup_mem_sz(char *str) | 44 | static int __init setup_mem_sz(char *str) |
40 | { | 45 | { |
@@ -109,13 +114,11 @@ void __init setup_arch_memory(void) | |||
109 | /* Last usable page of low mem */ | 114 | /* Last usable page of low mem */ |
110 | max_low_pfn = max_pfn = PFN_DOWN(low_mem_start + low_mem_sz); | 115 | max_low_pfn = max_pfn = PFN_DOWN(low_mem_start + low_mem_sz); |
111 | 116 | ||
112 | #ifdef CONFIG_HIGHMEM | 117 | #ifdef CONFIG_FLATMEM |
113 | min_high_pfn = PFN_DOWN(high_mem_start); | 118 | /* pfn_valid() uses this */ |
114 | max_pfn = PFN_DOWN(high_mem_start + high_mem_sz); | 119 | max_mapnr = max_low_pfn - min_low_pfn; |
115 | #endif | 120 | #endif |
116 | 121 | ||
117 | max_mapnr = max_pfn - min_low_pfn; | ||
118 | |||
119 | /*------------- bootmem allocator setup -----------------------*/ | 122 | /*------------- bootmem allocator setup -----------------------*/ |
120 | 123 | ||
121 | /* | 124 | /* |
@@ -129,7 +132,7 @@ void __init setup_arch_memory(void) | |||
129 | * the crash | 132 | * the crash |
130 | */ | 133 | */ |
131 | 134 | ||
132 | memblock_add(low_mem_start, low_mem_sz); | 135 | memblock_add_node(low_mem_start, low_mem_sz, 0); |
133 | memblock_reserve(low_mem_start, __pa(_end) - low_mem_start); | 136 | memblock_reserve(low_mem_start, __pa(_end) - low_mem_start); |
134 | 137 | ||
135 | #ifdef CONFIG_BLK_DEV_INITRD | 138 | #ifdef CONFIG_BLK_DEV_INITRD |
@@ -149,13 +152,6 @@ void __init setup_arch_memory(void) | |||
149 | zones_size[ZONE_NORMAL] = max_low_pfn - min_low_pfn; | 152 | zones_size[ZONE_NORMAL] = max_low_pfn - min_low_pfn; |
150 | zones_holes[ZONE_NORMAL] = 0; | 153 | zones_holes[ZONE_NORMAL] = 0; |
151 | 154 | ||
152 | #ifdef CONFIG_HIGHMEM | ||
153 | zones_size[ZONE_HIGHMEM] = max_pfn - max_low_pfn; | ||
154 | |||
155 | /* This handles the peripheral address space hole */ | ||
156 | zones_holes[ZONE_HIGHMEM] = min_high_pfn - max_low_pfn; | ||
157 | #endif | ||
158 | |||
159 | /* | 155 | /* |
160 | * We can't use the helper free_area_init(zones[]) because it uses | 156 | * We can't use the helper free_area_init(zones[]) because it uses |
161 | * PAGE_OFFSET to compute the @min_low_pfn which would be wrong | 157 | * PAGE_OFFSET to compute the @min_low_pfn which would be wrong |
@@ -168,6 +164,34 @@ void __init setup_arch_memory(void) | |||
168 | zones_holes); /* holes */ | 164 | zones_holes); /* holes */ |
169 | 165 | ||
170 | #ifdef CONFIG_HIGHMEM | 166 | #ifdef CONFIG_HIGHMEM |
167 | /* | ||
168 | * Populate a new node with highmem | ||
169 | * | ||
170 | * On ARC (w/o PAE) HIGHMEM addresses are actually smaller (0 based) | ||
171 | * than addresses in normal ala low memory (0x8000_0000 based). | ||
172 | * Even with PAE, the huge peripheral space hole would waste a lot of | ||
173 | * mem with single mem_map[]. This warrants a mem_map per region design. | ||
174 | * Thus HIGHMEM on ARC is imlemented with DISCONTIGMEM. | ||
175 | * | ||
176 | * DISCONTIGMEM in turns requires multiple nodes. node 0 above is | ||
177 | * populated with normal memory zone while node 1 only has highmem | ||
178 | */ | ||
179 | node_set_online(1); | ||
180 | |||
181 | min_high_pfn = PFN_DOWN(high_mem_start); | ||
182 | max_high_pfn = PFN_DOWN(high_mem_start + high_mem_sz); | ||
183 | |||
184 | zones_size[ZONE_NORMAL] = 0; | ||
185 | zones_holes[ZONE_NORMAL] = 0; | ||
186 | |||
187 | zones_size[ZONE_HIGHMEM] = max_high_pfn - min_high_pfn; | ||
188 | zones_holes[ZONE_HIGHMEM] = 0; | ||
189 | |||
190 | free_area_init_node(1, /* node-id */ | ||
191 | zones_size, /* num pages per zone */ | ||
192 | min_high_pfn, /* first pfn of node */ | ||
193 | zones_holes); /* holes */ | ||
194 | |||
171 | high_memory = (void *)(min_high_pfn << PAGE_SHIFT); | 195 | high_memory = (void *)(min_high_pfn << PAGE_SHIFT); |
172 | kmap_init(); | 196 | kmap_init(); |
173 | #endif | 197 | #endif |
@@ -185,7 +209,7 @@ void __init mem_init(void) | |||
185 | unsigned long tmp; | 209 | unsigned long tmp; |
186 | 210 | ||
187 | reset_all_zones_managed_pages(); | 211 | reset_all_zones_managed_pages(); |
188 | for (tmp = min_high_pfn; tmp < max_pfn; tmp++) | 212 | for (tmp = min_high_pfn; tmp < max_high_pfn; tmp++) |
189 | free_highmem_page(pfn_to_page(tmp)); | 213 | free_highmem_page(pfn_to_page(tmp)); |
190 | #endif | 214 | #endif |
191 | 215 | ||
diff --git a/arch/arm/boot/dts/omap3-n900.dts b/arch/arm/boot/dts/omap3-n900.dts index b3c26a96a726..d9e2d9c6e999 100644 --- a/arch/arm/boot/dts/omap3-n900.dts +++ b/arch/arm/boot/dts/omap3-n900.dts | |||
@@ -329,6 +329,7 @@ | |||
329 | regulator-name = "V28"; | 329 | regulator-name = "V28"; |
330 | regulator-min-microvolt = <2800000>; | 330 | regulator-min-microvolt = <2800000>; |
331 | regulator-max-microvolt = <2800000>; | 331 | regulator-max-microvolt = <2800000>; |
332 | regulator-initial-mode = <0x0e>; /* RES_STATE_ACTIVE */ | ||
332 | regulator-always-on; /* due to battery cover sensor */ | 333 | regulator-always-on; /* due to battery cover sensor */ |
333 | }; | 334 | }; |
334 | 335 | ||
@@ -336,30 +337,35 @@ | |||
336 | regulator-name = "VCSI"; | 337 | regulator-name = "VCSI"; |
337 | regulator-min-microvolt = <1800000>; | 338 | regulator-min-microvolt = <1800000>; |
338 | regulator-max-microvolt = <1800000>; | 339 | regulator-max-microvolt = <1800000>; |
340 | regulator-initial-mode = <0x0e>; /* RES_STATE_ACTIVE */ | ||
339 | }; | 341 | }; |
340 | 342 | ||
341 | &vaux3 { | 343 | &vaux3 { |
342 | regulator-name = "VMMC2_30"; | 344 | regulator-name = "VMMC2_30"; |
343 | regulator-min-microvolt = <2800000>; | 345 | regulator-min-microvolt = <2800000>; |
344 | regulator-max-microvolt = <3000000>; | 346 | regulator-max-microvolt = <3000000>; |
347 | regulator-initial-mode = <0x0e>; /* RES_STATE_ACTIVE */ | ||
345 | }; | 348 | }; |
346 | 349 | ||
347 | &vaux4 { | 350 | &vaux4 { |
348 | regulator-name = "VCAM_ANA_28"; | 351 | regulator-name = "VCAM_ANA_28"; |
349 | regulator-min-microvolt = <2800000>; | 352 | regulator-min-microvolt = <2800000>; |
350 | regulator-max-microvolt = <2800000>; | 353 | regulator-max-microvolt = <2800000>; |
354 | regulator-initial-mode = <0x0e>; /* RES_STATE_ACTIVE */ | ||
351 | }; | 355 | }; |
352 | 356 | ||
353 | &vmmc1 { | 357 | &vmmc1 { |
354 | regulator-name = "VMMC1"; | 358 | regulator-name = "VMMC1"; |
355 | regulator-min-microvolt = <1850000>; | 359 | regulator-min-microvolt = <1850000>; |
356 | regulator-max-microvolt = <3150000>; | 360 | regulator-max-microvolt = <3150000>; |
361 | regulator-initial-mode = <0x0e>; /* RES_STATE_ACTIVE */ | ||
357 | }; | 362 | }; |
358 | 363 | ||
359 | &vmmc2 { | 364 | &vmmc2 { |
360 | regulator-name = "V28_A"; | 365 | regulator-name = "V28_A"; |
361 | regulator-min-microvolt = <2800000>; | 366 | regulator-min-microvolt = <2800000>; |
362 | regulator-max-microvolt = <3000000>; | 367 | regulator-max-microvolt = <3000000>; |
368 | regulator-initial-mode = <0x0e>; /* RES_STATE_ACTIVE */ | ||
363 | regulator-always-on; /* due VIO leak to AIC34 VDDs */ | 369 | regulator-always-on; /* due VIO leak to AIC34 VDDs */ |
364 | }; | 370 | }; |
365 | 371 | ||
@@ -367,6 +373,7 @@ | |||
367 | regulator-name = "VPLL"; | 373 | regulator-name = "VPLL"; |
368 | regulator-min-microvolt = <1800000>; | 374 | regulator-min-microvolt = <1800000>; |
369 | regulator-max-microvolt = <1800000>; | 375 | regulator-max-microvolt = <1800000>; |
376 | regulator-initial-mode = <0x0e>; /* RES_STATE_ACTIVE */ | ||
370 | regulator-always-on; | 377 | regulator-always-on; |
371 | }; | 378 | }; |
372 | 379 | ||
@@ -374,6 +381,7 @@ | |||
374 | regulator-name = "VSDI_CSI"; | 381 | regulator-name = "VSDI_CSI"; |
375 | regulator-min-microvolt = <1800000>; | 382 | regulator-min-microvolt = <1800000>; |
376 | regulator-max-microvolt = <1800000>; | 383 | regulator-max-microvolt = <1800000>; |
384 | regulator-initial-mode = <0x0e>; /* RES_STATE_ACTIVE */ | ||
377 | regulator-always-on; | 385 | regulator-always-on; |
378 | }; | 386 | }; |
379 | 387 | ||
@@ -381,6 +389,7 @@ | |||
381 | regulator-name = "VMMC2_IO_18"; | 389 | regulator-name = "VMMC2_IO_18"; |
382 | regulator-min-microvolt = <1800000>; | 390 | regulator-min-microvolt = <1800000>; |
383 | regulator-max-microvolt = <1800000>; | 391 | regulator-max-microvolt = <1800000>; |
392 | regulator-initial-mode = <0x0e>; /* RES_STATE_ACTIVE */ | ||
384 | }; | 393 | }; |
385 | 394 | ||
386 | &vio { | 395 | &vio { |
diff --git a/arch/arm/boot/dts/omap34xx.dtsi b/arch/arm/boot/dts/omap34xx.dtsi index 387dc31822fe..96f8ce7bd2af 100644 --- a/arch/arm/boot/dts/omap34xx.dtsi +++ b/arch/arm/boot/dts/omap34xx.dtsi | |||
@@ -46,7 +46,7 @@ | |||
46 | 0x480bd800 0x017c>; | 46 | 0x480bd800 0x017c>; |
47 | interrupts = <24>; | 47 | interrupts = <24>; |
48 | iommus = <&mmu_isp>; | 48 | iommus = <&mmu_isp>; |
49 | syscon = <&scm_conf 0xdc>; | 49 | syscon = <&scm_conf 0x6c>; |
50 | ti,phy-type = <OMAP3ISP_PHY_TYPE_COMPLEX_IO>; | 50 | ti,phy-type = <OMAP3ISP_PHY_TYPE_COMPLEX_IO>; |
51 | #clock-cells = <1>; | 51 | #clock-cells = <1>; |
52 | ports { | 52 | ports { |
diff --git a/arch/arm/boot/dts/omap5-board-common.dtsi b/arch/arm/boot/dts/omap5-board-common.dtsi index 902657d6713b..914bf4c47404 100644 --- a/arch/arm/boot/dts/omap5-board-common.dtsi +++ b/arch/arm/boot/dts/omap5-board-common.dtsi | |||
@@ -472,7 +472,7 @@ | |||
472 | ldo1_reg: ldo1 { | 472 | ldo1_reg: ldo1 { |
473 | /* VDDAPHY_CAM: vdda_csiport */ | 473 | /* VDDAPHY_CAM: vdda_csiport */ |
474 | regulator-name = "ldo1"; | 474 | regulator-name = "ldo1"; |
475 | regulator-min-microvolt = <1500000>; | 475 | regulator-min-microvolt = <1800000>; |
476 | regulator-max-microvolt = <1800000>; | 476 | regulator-max-microvolt = <1800000>; |
477 | }; | 477 | }; |
478 | 478 | ||
@@ -498,7 +498,7 @@ | |||
498 | ldo4_reg: ldo4 { | 498 | ldo4_reg: ldo4 { |
499 | /* VDDAPHY_DISP: vdda_dsiport/hdmi */ | 499 | /* VDDAPHY_DISP: vdda_dsiport/hdmi */ |
500 | regulator-name = "ldo4"; | 500 | regulator-name = "ldo4"; |
501 | regulator-min-microvolt = <1500000>; | 501 | regulator-min-microvolt = <1800000>; |
502 | regulator-max-microvolt = <1800000>; | 502 | regulator-max-microvolt = <1800000>; |
503 | }; | 503 | }; |
504 | 504 | ||
diff --git a/arch/arm/boot/dts/omap5-cm-t54.dts b/arch/arm/boot/dts/omap5-cm-t54.dts index ecc591dc0778..4d87d9c6c86d 100644 --- a/arch/arm/boot/dts/omap5-cm-t54.dts +++ b/arch/arm/boot/dts/omap5-cm-t54.dts | |||
@@ -513,7 +513,7 @@ | |||
513 | ldo1_reg: ldo1 { | 513 | ldo1_reg: ldo1 { |
514 | /* VDDAPHY_CAM: vdda_csiport */ | 514 | /* VDDAPHY_CAM: vdda_csiport */ |
515 | regulator-name = "ldo1"; | 515 | regulator-name = "ldo1"; |
516 | regulator-min-microvolt = <1500000>; | 516 | regulator-min-microvolt = <1800000>; |
517 | regulator-max-microvolt = <1800000>; | 517 | regulator-max-microvolt = <1800000>; |
518 | }; | 518 | }; |
519 | 519 | ||
@@ -537,7 +537,7 @@ | |||
537 | ldo4_reg: ldo4 { | 537 | ldo4_reg: ldo4 { |
538 | /* VDDAPHY_DISP: vdda_dsiport/hdmi */ | 538 | /* VDDAPHY_DISP: vdda_dsiport/hdmi */ |
539 | regulator-name = "ldo4"; | 539 | regulator-name = "ldo4"; |
540 | regulator-min-microvolt = <1500000>; | 540 | regulator-min-microvolt = <1800000>; |
541 | regulator-max-microvolt = <1800000>; | 541 | regulator-max-microvolt = <1800000>; |
542 | }; | 542 | }; |
543 | 543 | ||
diff --git a/arch/arm/boot/dts/omap5.dtsi b/arch/arm/boot/dts/omap5.dtsi index 38805ebbe2ba..120b6b80cd39 100644 --- a/arch/arm/boot/dts/omap5.dtsi +++ b/arch/arm/boot/dts/omap5.dtsi | |||
@@ -269,7 +269,7 @@ | |||
269 | omap5_pmx_wkup: pinmux@c840 { | 269 | omap5_pmx_wkup: pinmux@c840 { |
270 | compatible = "ti,omap5-padconf", | 270 | compatible = "ti,omap5-padconf", |
271 | "pinctrl-single"; | 271 | "pinctrl-single"; |
272 | reg = <0xc840 0x0038>; | 272 | reg = <0xc840 0x003c>; |
273 | #address-cells = <1>; | 273 | #address-cells = <1>; |
274 | #size-cells = <0>; | 274 | #size-cells = <0>; |
275 | #interrupt-cells = <1>; | 275 | #interrupt-cells = <1>; |
diff --git a/arch/arm/boot/dts/qcom-apq8064.dtsi b/arch/arm/boot/dts/qcom-apq8064.dtsi index 65d0e8d98259..04f541bffbdd 100644 --- a/arch/arm/boot/dts/qcom-apq8064.dtsi +++ b/arch/arm/boot/dts/qcom-apq8064.dtsi | |||
@@ -666,7 +666,7 @@ | |||
666 | }; | 666 | }; |
667 | 667 | ||
668 | sata0: sata@29000000 { | 668 | sata0: sata@29000000 { |
669 | compatible = "generic-ahci"; | 669 | compatible = "qcom,apq8064-ahci", "generic-ahci"; |
670 | status = "disabled"; | 670 | status = "disabled"; |
671 | reg = <0x29000000 0x180>; | 671 | reg = <0x29000000 0x180>; |
672 | interrupts = <GIC_SPI 209 IRQ_TYPE_NONE>; | 672 | interrupts = <GIC_SPI 209 IRQ_TYPE_NONE>; |
@@ -688,6 +688,7 @@ | |||
688 | 688 | ||
689 | phys = <&sata_phy0>; | 689 | phys = <&sata_phy0>; |
690 | phy-names = "sata-phy"; | 690 | phy-names = "sata-phy"; |
691 | ports-implemented = <0x1>; | ||
691 | }; | 692 | }; |
692 | 693 | ||
693 | /* Temporary fixed regulator */ | 694 | /* Temporary fixed regulator */ |
diff --git a/arch/arm/boot/dts/sun8i-q8-common.dtsi b/arch/arm/boot/dts/sun8i-q8-common.dtsi index 9d2b7e2f5975..346a49d805a7 100644 --- a/arch/arm/boot/dts/sun8i-q8-common.dtsi +++ b/arch/arm/boot/dts/sun8i-q8-common.dtsi | |||
@@ -125,8 +125,6 @@ | |||
125 | }; | 125 | }; |
126 | 126 | ||
127 | ®_dc1sw { | 127 | ®_dc1sw { |
128 | regulator-min-microvolt = <3000000>; | ||
129 | regulator-max-microvolt = <3000000>; | ||
130 | regulator-name = "vcc-lcd"; | 128 | regulator-name = "vcc-lcd"; |
131 | }; | 129 | }; |
132 | 130 | ||
diff --git a/arch/arm/include/asm/domain.h b/arch/arm/include/asm/domain.h index fc8ba1663601..99d9f630d6b6 100644 --- a/arch/arm/include/asm/domain.h +++ b/arch/arm/include/asm/domain.h | |||
@@ -84,6 +84,7 @@ | |||
84 | 84 | ||
85 | #ifndef __ASSEMBLY__ | 85 | #ifndef __ASSEMBLY__ |
86 | 86 | ||
87 | #ifdef CONFIG_CPU_CP15_MMU | ||
87 | static inline unsigned int get_domain(void) | 88 | static inline unsigned int get_domain(void) |
88 | { | 89 | { |
89 | unsigned int domain; | 90 | unsigned int domain; |
@@ -103,6 +104,16 @@ static inline void set_domain(unsigned val) | |||
103 | : : "r" (val) : "memory"); | 104 | : : "r" (val) : "memory"); |
104 | isb(); | 105 | isb(); |
105 | } | 106 | } |
107 | #else | ||
108 | static inline unsigned int get_domain(void) | ||
109 | { | ||
110 | return 0; | ||
111 | } | ||
112 | |||
113 | static inline void set_domain(unsigned val) | ||
114 | { | ||
115 | } | ||
116 | #endif | ||
106 | 117 | ||
107 | #ifdef CONFIG_CPU_USE_DOMAINS | 118 | #ifdef CONFIG_CPU_USE_DOMAINS |
108 | #define modify_domain(dom,type) \ | 119 | #define modify_domain(dom,type) \ |
diff --git a/arch/arm/kernel/head-nommu.S b/arch/arm/kernel/head-nommu.S index 9b8c5a113434..fb1a69eb49c1 100644 --- a/arch/arm/kernel/head-nommu.S +++ b/arch/arm/kernel/head-nommu.S | |||
@@ -236,7 +236,7 @@ ENTRY(__setup_mpu) | |||
236 | mov r0, #CONFIG_VECTORS_BASE @ Cover from VECTORS_BASE | 236 | mov r0, #CONFIG_VECTORS_BASE @ Cover from VECTORS_BASE |
237 | ldr r5,=(MPU_AP_PL1RW_PL0NA | MPU_RGN_NORMAL) | 237 | ldr r5,=(MPU_AP_PL1RW_PL0NA | MPU_RGN_NORMAL) |
238 | /* Writing N to bits 5:1 (RSR_SZ) --> region size 2^N+1 */ | 238 | /* Writing N to bits 5:1 (RSR_SZ) --> region size 2^N+1 */ |
239 | mov r6, #(((PAGE_SHIFT - 1) << MPU_RSR_SZ) | 1 << MPU_RSR_EN) | 239 | mov r6, #(((2 * PAGE_SHIFT - 1) << MPU_RSR_SZ) | 1 << MPU_RSR_EN) |
240 | 240 | ||
241 | setup_region r0, r5, r6, MPU_DATA_SIDE @ VECTORS_BASE, PL0 NA, enabled | 241 | setup_region r0, r5, r6, MPU_DATA_SIDE @ VECTORS_BASE, PL0 NA, enabled |
242 | beq 3f @ Memory-map not unified | 242 | beq 3f @ Memory-map not unified |
diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c index 58dbd5c439df..d6d4191e68f2 100644 --- a/arch/arm/kvm/mmu.c +++ b/arch/arm/kvm/mmu.c | |||
@@ -1004,7 +1004,7 @@ static bool transparent_hugepage_adjust(kvm_pfn_t *pfnp, phys_addr_t *ipap) | |||
1004 | kvm_pfn_t pfn = *pfnp; | 1004 | kvm_pfn_t pfn = *pfnp; |
1005 | gfn_t gfn = *ipap >> PAGE_SHIFT; | 1005 | gfn_t gfn = *ipap >> PAGE_SHIFT; |
1006 | 1006 | ||
1007 | if (PageTransCompound(pfn_to_page(pfn))) { | 1007 | if (PageTransCompoundMap(pfn_to_page(pfn))) { |
1008 | unsigned long mask; | 1008 | unsigned long mask; |
1009 | /* | 1009 | /* |
1010 | * The address we faulted on is backed by a transparent huge | 1010 | * The address we faulted on is backed by a transparent huge |
diff --git a/arch/arm/mach-davinci/board-mityomapl138.c b/arch/arm/mach-davinci/board-mityomapl138.c index d97c588550ad..bc4e63fa9808 100644 --- a/arch/arm/mach-davinci/board-mityomapl138.c +++ b/arch/arm/mach-davinci/board-mityomapl138.c | |||
@@ -121,6 +121,11 @@ static void read_factory_config(struct nvmem_device *nvmem, void *context) | |||
121 | const char *partnum = NULL; | 121 | const char *partnum = NULL; |
122 | struct davinci_soc_info *soc_info = &davinci_soc_info; | 122 | struct davinci_soc_info *soc_info = &davinci_soc_info; |
123 | 123 | ||
124 | if (!IS_BUILTIN(CONFIG_NVMEM)) { | ||
125 | pr_warn("Factory Config not available without CONFIG_NVMEM\n"); | ||
126 | goto bad_config; | ||
127 | } | ||
128 | |||
124 | ret = nvmem_device_read(nvmem, 0, sizeof(factory_config), | 129 | ret = nvmem_device_read(nvmem, 0, sizeof(factory_config), |
125 | &factory_config); | 130 | &factory_config); |
126 | if (ret != sizeof(struct factory_config)) { | 131 | if (ret != sizeof(struct factory_config)) { |
diff --git a/arch/arm/mach-davinci/common.c b/arch/arm/mach-davinci/common.c index f55ef2ef2f92..742133b7266a 100644 --- a/arch/arm/mach-davinci/common.c +++ b/arch/arm/mach-davinci/common.c | |||
@@ -33,6 +33,11 @@ void davinci_get_mac_addr(struct nvmem_device *nvmem, void *context) | |||
33 | char *mac_addr = davinci_soc_info.emac_pdata->mac_addr; | 33 | char *mac_addr = davinci_soc_info.emac_pdata->mac_addr; |
34 | off_t offset = (off_t)context; | 34 | off_t offset = (off_t)context; |
35 | 35 | ||
36 | if (!IS_BUILTIN(CONFIG_NVMEM)) { | ||
37 | pr_warn("Cannot read MAC addr from EEPROM without CONFIG_NVMEM\n"); | ||
38 | return; | ||
39 | } | ||
40 | |||
36 | /* Read MAC addr from EEPROM */ | 41 | /* Read MAC addr from EEPROM */ |
37 | if (nvmem_device_read(nvmem, offset, ETH_ALEN, mac_addr) == ETH_ALEN) | 42 | if (nvmem_device_read(nvmem, offset, ETH_ALEN, mac_addr) == ETH_ALEN) |
38 | pr_info("Read MAC addr from EEPROM: %pM\n", mac_addr); | 43 | pr_info("Read MAC addr from EEPROM: %pM\n", mac_addr); |
diff --git a/arch/arm/mach-exynos/pm_domains.c b/arch/arm/mach-exynos/pm_domains.c index 7c21760f590f..875a2bab64f6 100644 --- a/arch/arm/mach-exynos/pm_domains.c +++ b/arch/arm/mach-exynos/pm_domains.c | |||
@@ -92,7 +92,7 @@ static int exynos_pd_power(struct generic_pm_domain *domain, bool power_on) | |||
92 | if (IS_ERR(pd->clk[i])) | 92 | if (IS_ERR(pd->clk[i])) |
93 | break; | 93 | break; |
94 | 94 | ||
95 | if (IS_ERR(pd->clk[i])) | 95 | if (IS_ERR(pd->pclk[i])) |
96 | continue; /* Skip on first power up */ | 96 | continue; /* Skip on first power up */ |
97 | if (clk_set_parent(pd->clk[i], pd->pclk[i])) | 97 | if (clk_set_parent(pd->clk[i], pd->pclk[i])) |
98 | pr_err("%s: error setting parent to clock%d\n", | 98 | pr_err("%s: error setting parent to clock%d\n", |
diff --git a/arch/arm/mach-socfpga/headsmp.S b/arch/arm/mach-socfpga/headsmp.S index 5d94b7a2fb10..c160fa3007e9 100644 --- a/arch/arm/mach-socfpga/headsmp.S +++ b/arch/arm/mach-socfpga/headsmp.S | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <asm/assembler.h> | 13 | #include <asm/assembler.h> |
14 | 14 | ||
15 | .arch armv7-a | 15 | .arch armv7-a |
16 | .arm | ||
16 | 17 | ||
17 | ENTRY(secondary_trampoline) | 18 | ENTRY(secondary_trampoline) |
18 | /* CPU1 will always fetch from 0x0 when it is brought out of reset. | 19 | /* CPU1 will always fetch from 0x0 when it is brought out of reset. |
diff --git a/arch/arm/mm/nommu.c b/arch/arm/mm/nommu.c index 1dd10936d68d..d5805e4bf2fc 100644 --- a/arch/arm/mm/nommu.c +++ b/arch/arm/mm/nommu.c | |||
@@ -87,7 +87,6 @@ static unsigned long irbar_read(void) | |||
87 | /* MPU initialisation functions */ | 87 | /* MPU initialisation functions */ |
88 | void __init sanity_check_meminfo_mpu(void) | 88 | void __init sanity_check_meminfo_mpu(void) |
89 | { | 89 | { |
90 | int i; | ||
91 | phys_addr_t phys_offset = PHYS_OFFSET; | 90 | phys_addr_t phys_offset = PHYS_OFFSET; |
92 | phys_addr_t aligned_region_size, specified_mem_size, rounded_mem_size; | 91 | phys_addr_t aligned_region_size, specified_mem_size, rounded_mem_size; |
93 | struct memblock_region *reg; | 92 | struct memblock_region *reg; |
@@ -110,11 +109,13 @@ void __init sanity_check_meminfo_mpu(void) | |||
110 | } else { | 109 | } else { |
111 | /* | 110 | /* |
112 | * memblock auto merges contiguous blocks, remove | 111 | * memblock auto merges contiguous blocks, remove |
113 | * all blocks afterwards | 112 | * all blocks afterwards in one go (we can't remove |
113 | * blocks separately while iterating) | ||
114 | */ | 114 | */ |
115 | pr_notice("Ignoring RAM after %pa, memory at %pa ignored\n", | 115 | pr_notice("Ignoring RAM after %pa, memory at %pa ignored\n", |
116 | &mem_start, ®->base); | 116 | &mem_end, ®->base); |
117 | memblock_remove(reg->base, reg->size); | 117 | memblock_remove(reg->base, 0 - reg->base); |
118 | break; | ||
118 | } | 119 | } |
119 | } | 120 | } |
120 | 121 | ||
@@ -144,7 +145,7 @@ void __init sanity_check_meminfo_mpu(void) | |||
144 | pr_warn("Truncating memory from %pa to %pa (MPU region constraints)", | 145 | pr_warn("Truncating memory from %pa to %pa (MPU region constraints)", |
145 | &specified_mem_size, &aligned_region_size); | 146 | &specified_mem_size, &aligned_region_size); |
146 | memblock_remove(mem_start + aligned_region_size, | 147 | memblock_remove(mem_start + aligned_region_size, |
147 | specified_mem_size - aligned_round_size); | 148 | specified_mem_size - aligned_region_size); |
148 | 149 | ||
149 | mem_end = mem_start + aligned_region_size; | 150 | mem_end = mem_start + aligned_region_size; |
150 | } | 151 | } |
@@ -261,7 +262,7 @@ void __init mpu_setup(void) | |||
261 | return; | 262 | return; |
262 | 263 | ||
263 | region_err = mpu_setup_region(MPU_RAM_REGION, PHYS_OFFSET, | 264 | region_err = mpu_setup_region(MPU_RAM_REGION, PHYS_OFFSET, |
264 | ilog2(meminfo.bank[0].size), | 265 | ilog2(memblock.memory.regions[0].size), |
265 | MPU_AP_PL1RW_PL0RW | MPU_RGN_NORMAL); | 266 | MPU_AP_PL1RW_PL0RW | MPU_RGN_NORMAL); |
266 | if (region_err) { | 267 | if (region_err) { |
267 | panic("MPU region initialization failure! %d", region_err); | 268 | panic("MPU region initialization failure! %d", region_err); |
@@ -285,7 +286,7 @@ void __init arm_mm_memblock_reserve(void) | |||
285 | * some architectures which the DRAM is the exception vector to trap, | 286 | * some architectures which the DRAM is the exception vector to trap, |
286 | * alloc_page breaks with error, although it is not NULL, but "0." | 287 | * alloc_page breaks with error, although it is not NULL, but "0." |
287 | */ | 288 | */ |
288 | memblock_reserve(CONFIG_VECTORS_BASE, PAGE_SIZE); | 289 | memblock_reserve(CONFIG_VECTORS_BASE, 2 * PAGE_SIZE); |
289 | #else /* ifndef CONFIG_CPU_V7M */ | 290 | #else /* ifndef CONFIG_CPU_V7M */ |
290 | /* | 291 | /* |
291 | * There is no dedicated vector page on V7-M. So nothing needs to be | 292 | * There is no dedicated vector page on V7-M. So nothing needs to be |
diff --git a/arch/arm64/boot/dts/renesas/r8a7795.dtsi b/arch/arm64/boot/dts/renesas/r8a7795.dtsi index a7315ebe3883..706d2426024f 100644 --- a/arch/arm64/boot/dts/renesas/r8a7795.dtsi +++ b/arch/arm64/boot/dts/renesas/r8a7795.dtsi | |||
@@ -120,7 +120,6 @@ | |||
120 | compatible = "fixed-clock"; | 120 | compatible = "fixed-clock"; |
121 | #clock-cells = <0>; | 121 | #clock-cells = <0>; |
122 | clock-frequency = <0>; | 122 | clock-frequency = <0>; |
123 | status = "disabled"; | ||
124 | }; | 123 | }; |
125 | 124 | ||
126 | soc { | 125 | soc { |
diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S index c976ebfe2269..57b4836b7ecd 100644 --- a/arch/parisc/kernel/syscall.S +++ b/arch/parisc/kernel/syscall.S | |||
@@ -344,7 +344,7 @@ tracesys_next: | |||
344 | #endif | 344 | #endif |
345 | 345 | ||
346 | cmpib,COND(=),n -1,%r20,tracesys_exit /* seccomp may have returned -1 */ | 346 | cmpib,COND(=),n -1,%r20,tracesys_exit /* seccomp may have returned -1 */ |
347 | comiclr,>>= __NR_Linux_syscalls, %r20, %r0 | 347 | comiclr,>> __NR_Linux_syscalls, %r20, %r0 |
348 | b,n .Ltracesys_nosys | 348 | b,n .Ltracesys_nosys |
349 | 349 | ||
350 | LDREGX %r20(%r19), %r19 | 350 | LDREGX %r20(%r19), %r19 |
diff --git a/arch/powerpc/include/asm/word-at-a-time.h b/arch/powerpc/include/asm/word-at-a-time.h index e4396a7d0f7c..4afe66aa1400 100644 --- a/arch/powerpc/include/asm/word-at-a-time.h +++ b/arch/powerpc/include/asm/word-at-a-time.h | |||
@@ -82,7 +82,7 @@ static inline unsigned long create_zero_mask(unsigned long bits) | |||
82 | "andc %1,%1,%2\n\t" | 82 | "andc %1,%1,%2\n\t" |
83 | "popcntd %0,%1" | 83 | "popcntd %0,%1" |
84 | : "=r" (leading_zero_bits), "=&r" (trailing_zero_bit_mask) | 84 | : "=r" (leading_zero_bits), "=&r" (trailing_zero_bit_mask) |
85 | : "r" (bits)); | 85 | : "b" (bits)); |
86 | 86 | ||
87 | return leading_zero_bits; | 87 | return leading_zero_bits; |
88 | } | 88 | } |
diff --git a/arch/x86/events/amd/iommu.c b/arch/x86/events/amd/iommu.c index 40625ca7a190..6011a573dd64 100644 --- a/arch/x86/events/amd/iommu.c +++ b/arch/x86/events/amd/iommu.c | |||
@@ -474,6 +474,7 @@ static __init int _init_perf_amd_iommu( | |||
474 | 474 | ||
475 | static struct perf_amd_iommu __perf_iommu = { | 475 | static struct perf_amd_iommu __perf_iommu = { |
476 | .pmu = { | 476 | .pmu = { |
477 | .task_ctx_nr = perf_invalid_context, | ||
477 | .event_init = perf_iommu_event_init, | 478 | .event_init = perf_iommu_event_init, |
478 | .add = perf_iommu_add, | 479 | .add = perf_iommu_add, |
479 | .del = perf_iommu_del, | 480 | .del = perf_iommu_del, |
diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c index aff79884e17d..a6fd4dbcf820 100644 --- a/arch/x86/events/intel/core.c +++ b/arch/x86/events/intel/core.c | |||
@@ -3637,6 +3637,8 @@ __init int intel_pmu_init(void) | |||
3637 | pr_cont("Knights Landing events, "); | 3637 | pr_cont("Knights Landing events, "); |
3638 | break; | 3638 | break; |
3639 | 3639 | ||
3640 | case 142: /* 14nm Kabylake Mobile */ | ||
3641 | case 158: /* 14nm Kabylake Desktop */ | ||
3640 | case 78: /* 14nm Skylake Mobile */ | 3642 | case 78: /* 14nm Skylake Mobile */ |
3641 | case 94: /* 14nm Skylake Desktop */ | 3643 | case 94: /* 14nm Skylake Desktop */ |
3642 | case 85: /* 14nm Skylake Server */ | 3644 | case 85: /* 14nm Skylake Server */ |
diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c index 8f4942e2bcbb..d7ce96a7daca 100644 --- a/arch/x86/kernel/apic/x2apic_uv_x.c +++ b/arch/x86/kernel/apic/x2apic_uv_x.c | |||
@@ -891,9 +891,7 @@ void __init uv_system_init(void) | |||
891 | } | 891 | } |
892 | pr_info("UV: Found %s hub\n", hub); | 892 | pr_info("UV: Found %s hub\n", hub); |
893 | 893 | ||
894 | /* We now only need to map the MMRs on UV1 */ | 894 | map_low_mmrs(); |
895 | if (is_uv1_hub()) | ||
896 | map_low_mmrs(); | ||
897 | 895 | ||
898 | m_n_config.v = uv_read_local_mmr(UVH_RH_GAM_CONFIG_MMR ); | 896 | m_n_config.v = uv_read_local_mmr(UVH_RH_GAM_CONFIG_MMR ); |
899 | m_val = m_n_config.s.m_skt; | 897 | m_val = m_n_config.s.m_skt; |
diff --git a/arch/x86/kernel/sysfb_efi.c b/arch/x86/kernel/sysfb_efi.c index b285d4e8c68e..5da924bbf0a0 100644 --- a/arch/x86/kernel/sysfb_efi.c +++ b/arch/x86/kernel/sysfb_efi.c | |||
@@ -106,14 +106,24 @@ static int __init efifb_set_system(const struct dmi_system_id *id) | |||
106 | continue; | 106 | continue; |
107 | for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) { | 107 | for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) { |
108 | resource_size_t start, end; | 108 | resource_size_t start, end; |
109 | unsigned long flags; | ||
110 | |||
111 | flags = pci_resource_flags(dev, i); | ||
112 | if (!(flags & IORESOURCE_MEM)) | ||
113 | continue; | ||
114 | |||
115 | if (flags & IORESOURCE_UNSET) | ||
116 | continue; | ||
117 | |||
118 | if (pci_resource_len(dev, i) == 0) | ||
119 | continue; | ||
109 | 120 | ||
110 | start = pci_resource_start(dev, i); | 121 | start = pci_resource_start(dev, i); |
111 | if (start == 0) | ||
112 | break; | ||
113 | end = pci_resource_end(dev, i); | 122 | end = pci_resource_end(dev, i); |
114 | if (screen_info.lfb_base >= start && | 123 | if (screen_info.lfb_base >= start && |
115 | screen_info.lfb_base < end) { | 124 | screen_info.lfb_base < end) { |
116 | found_bar = 1; | 125 | found_bar = 1; |
126 | break; | ||
117 | } | 127 | } |
118 | } | 128 | } |
119 | } | 129 | } |
diff --git a/arch/x86/kernel/tsc_msr.c b/arch/x86/kernel/tsc_msr.c index 92ae6acac8a7..6aa0f4d9eea6 100644 --- a/arch/x86/kernel/tsc_msr.c +++ b/arch/x86/kernel/tsc_msr.c | |||
@@ -92,7 +92,7 @@ unsigned long try_msr_calibrate_tsc(void) | |||
92 | 92 | ||
93 | if (freq_desc_tables[cpu_index].msr_plat) { | 93 | if (freq_desc_tables[cpu_index].msr_plat) { |
94 | rdmsr(MSR_PLATFORM_INFO, lo, hi); | 94 | rdmsr(MSR_PLATFORM_INFO, lo, hi); |
95 | ratio = (lo >> 8) & 0x1f; | 95 | ratio = (lo >> 8) & 0xff; |
96 | } else { | 96 | } else { |
97 | rdmsr(MSR_IA32_PERF_STATUS, lo, hi); | 97 | rdmsr(MSR_IA32_PERF_STATUS, lo, hi); |
98 | ratio = (hi >> 8) & 0x1f; | 98 | ratio = (hi >> 8) & 0x1f; |
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index 1ff4dbb73fb7..b6f50e8b0a39 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
@@ -2823,7 +2823,7 @@ static void transparent_hugepage_adjust(struct kvm_vcpu *vcpu, | |||
2823 | */ | 2823 | */ |
2824 | if (!is_error_noslot_pfn(pfn) && !kvm_is_reserved_pfn(pfn) && | 2824 | if (!is_error_noslot_pfn(pfn) && !kvm_is_reserved_pfn(pfn) && |
2825 | level == PT_PAGE_TABLE_LEVEL && | 2825 | level == PT_PAGE_TABLE_LEVEL && |
2826 | PageTransCompound(pfn_to_page(pfn)) && | 2826 | PageTransCompoundMap(pfn_to_page(pfn)) && |
2827 | !mmu_gfn_lpage_is_disallowed(vcpu, gfn, PT_DIRECTORY_LEVEL)) { | 2827 | !mmu_gfn_lpage_is_disallowed(vcpu, gfn, PT_DIRECTORY_LEVEL)) { |
2828 | unsigned long mask; | 2828 | unsigned long mask; |
2829 | /* | 2829 | /* |
@@ -4785,7 +4785,7 @@ restart: | |||
4785 | */ | 4785 | */ |
4786 | if (sp->role.direct && | 4786 | if (sp->role.direct && |
4787 | !kvm_is_reserved_pfn(pfn) && | 4787 | !kvm_is_reserved_pfn(pfn) && |
4788 | PageTransCompound(pfn_to_page(pfn))) { | 4788 | PageTransCompoundMap(pfn_to_page(pfn))) { |
4789 | drop_spte(kvm, sptep); | 4789 | drop_spte(kvm, sptep); |
4790 | need_tlb_flush = 1; | 4790 | need_tlb_flush = 1; |
4791 | goto restart; | 4791 | goto restart; |
diff --git a/arch/x86/platform/efi/efi-bgrt.c b/arch/x86/platform/efi/efi-bgrt.c index a2433817c987..6a2f5691b1ab 100644 --- a/arch/x86/platform/efi/efi-bgrt.c +++ b/arch/x86/platform/efi/efi-bgrt.c | |||
@@ -43,40 +43,40 @@ void __init efi_bgrt_init(void) | |||
43 | return; | 43 | return; |
44 | 44 | ||
45 | if (bgrt_tab->header.length < sizeof(*bgrt_tab)) { | 45 | if (bgrt_tab->header.length < sizeof(*bgrt_tab)) { |
46 | pr_err("Ignoring BGRT: invalid length %u (expected %zu)\n", | 46 | pr_notice("Ignoring BGRT: invalid length %u (expected %zu)\n", |
47 | bgrt_tab->header.length, sizeof(*bgrt_tab)); | 47 | bgrt_tab->header.length, sizeof(*bgrt_tab)); |
48 | return; | 48 | return; |
49 | } | 49 | } |
50 | if (bgrt_tab->version != 1) { | 50 | if (bgrt_tab->version != 1) { |
51 | pr_err("Ignoring BGRT: invalid version %u (expected 1)\n", | 51 | pr_notice("Ignoring BGRT: invalid version %u (expected 1)\n", |
52 | bgrt_tab->version); | 52 | bgrt_tab->version); |
53 | return; | 53 | return; |
54 | } | 54 | } |
55 | if (bgrt_tab->status & 0xfe) { | 55 | if (bgrt_tab->status & 0xfe) { |
56 | pr_err("Ignoring BGRT: reserved status bits are non-zero %u\n", | 56 | pr_notice("Ignoring BGRT: reserved status bits are non-zero %u\n", |
57 | bgrt_tab->status); | 57 | bgrt_tab->status); |
58 | return; | 58 | return; |
59 | } | 59 | } |
60 | if (bgrt_tab->image_type != 0) { | 60 | if (bgrt_tab->image_type != 0) { |
61 | pr_err("Ignoring BGRT: invalid image type %u (expected 0)\n", | 61 | pr_notice("Ignoring BGRT: invalid image type %u (expected 0)\n", |
62 | bgrt_tab->image_type); | 62 | bgrt_tab->image_type); |
63 | return; | 63 | return; |
64 | } | 64 | } |
65 | if (!bgrt_tab->image_address) { | 65 | if (!bgrt_tab->image_address) { |
66 | pr_err("Ignoring BGRT: null image address\n"); | 66 | pr_notice("Ignoring BGRT: null image address\n"); |
67 | return; | 67 | return; |
68 | } | 68 | } |
69 | 69 | ||
70 | image = memremap(bgrt_tab->image_address, sizeof(bmp_header), MEMREMAP_WB); | 70 | image = memremap(bgrt_tab->image_address, sizeof(bmp_header), MEMREMAP_WB); |
71 | if (!image) { | 71 | if (!image) { |
72 | pr_err("Ignoring BGRT: failed to map image header memory\n"); | 72 | pr_notice("Ignoring BGRT: failed to map image header memory\n"); |
73 | return; | 73 | return; |
74 | } | 74 | } |
75 | 75 | ||
76 | memcpy(&bmp_header, image, sizeof(bmp_header)); | 76 | memcpy(&bmp_header, image, sizeof(bmp_header)); |
77 | memunmap(image); | 77 | memunmap(image); |
78 | if (bmp_header.id != 0x4d42) { | 78 | if (bmp_header.id != 0x4d42) { |
79 | pr_err("Ignoring BGRT: Incorrect BMP magic number 0x%x (expected 0x4d42)\n", | 79 | pr_notice("Ignoring BGRT: Incorrect BMP magic number 0x%x (expected 0x4d42)\n", |
80 | bmp_header.id); | 80 | bmp_header.id); |
81 | return; | 81 | return; |
82 | } | 82 | } |
@@ -84,14 +84,14 @@ void __init efi_bgrt_init(void) | |||
84 | 84 | ||
85 | bgrt_image = kmalloc(bgrt_image_size, GFP_KERNEL | __GFP_NOWARN); | 85 | bgrt_image = kmalloc(bgrt_image_size, GFP_KERNEL | __GFP_NOWARN); |
86 | if (!bgrt_image) { | 86 | if (!bgrt_image) { |
87 | pr_err("Ignoring BGRT: failed to allocate memory for image (wanted %zu bytes)\n", | 87 | pr_notice("Ignoring BGRT: failed to allocate memory for image (wanted %zu bytes)\n", |
88 | bgrt_image_size); | 88 | bgrt_image_size); |
89 | return; | 89 | return; |
90 | } | 90 | } |
91 | 91 | ||
92 | image = memremap(bgrt_tab->image_address, bmp_header.size, MEMREMAP_WB); | 92 | image = memremap(bgrt_tab->image_address, bmp_header.size, MEMREMAP_WB); |
93 | if (!image) { | 93 | if (!image) { |
94 | pr_err("Ignoring BGRT: failed to map image memory\n"); | 94 | pr_notice("Ignoring BGRT: failed to map image memory\n"); |
95 | kfree(bgrt_image); | 95 | kfree(bgrt_image); |
96 | bgrt_image = NULL; | 96 | bgrt_image = NULL; |
97 | return; | 97 | return; |
diff --git a/crypto/Kconfig b/crypto/Kconfig index 93a1fdc1feee..1d33beb6a1ae 100644 --- a/crypto/Kconfig +++ b/crypto/Kconfig | |||
@@ -96,6 +96,7 @@ config CRYPTO_AKCIPHER | |||
96 | config CRYPTO_RSA | 96 | config CRYPTO_RSA |
97 | tristate "RSA algorithm" | 97 | tristate "RSA algorithm" |
98 | select CRYPTO_AKCIPHER | 98 | select CRYPTO_AKCIPHER |
99 | select CRYPTO_MANAGER | ||
99 | select MPILIB | 100 | select MPILIB |
100 | select ASN1 | 101 | select ASN1 |
101 | help | 102 | help |
diff --git a/crypto/ahash.c b/crypto/ahash.c index 5fc1f172963d..3887a98abcc3 100644 --- a/crypto/ahash.c +++ b/crypto/ahash.c | |||
@@ -69,8 +69,9 @@ static int hash_walk_new_entry(struct crypto_hash_walk *walk) | |||
69 | struct scatterlist *sg; | 69 | struct scatterlist *sg; |
70 | 70 | ||
71 | sg = walk->sg; | 71 | sg = walk->sg; |
72 | walk->pg = sg_page(sg); | ||
73 | walk->offset = sg->offset; | 72 | walk->offset = sg->offset; |
73 | walk->pg = sg_page(walk->sg) + (walk->offset >> PAGE_SHIFT); | ||
74 | walk->offset = offset_in_page(walk->offset); | ||
74 | walk->entrylen = sg->length; | 75 | walk->entrylen = sg->length; |
75 | 76 | ||
76 | if (walk->entrylen > walk->total) | 77 | if (walk->entrylen > walk->total) |
diff --git a/drivers/acpi/acpica/dsmethod.c b/drivers/acpi/acpica/dsmethod.c index 1982310e6d83..da198b864107 100644 --- a/drivers/acpi/acpica/dsmethod.c +++ b/drivers/acpi/acpica/dsmethod.c | |||
@@ -428,6 +428,9 @@ acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node, | |||
428 | obj_desc->method.mutex->mutex. | 428 | obj_desc->method.mutex->mutex. |
429 | original_sync_level = | 429 | original_sync_level = |
430 | obj_desc->method.mutex->mutex.sync_level; | 430 | obj_desc->method.mutex->mutex.sync_level; |
431 | |||
432 | obj_desc->method.mutex->mutex.thread_id = | ||
433 | acpi_os_get_thread_id(); | ||
431 | } | 434 | } |
432 | } | 435 | } |
433 | 436 | ||
diff --git a/drivers/acpi/nfit.c b/drivers/acpi/nfit.c index d0f35e63640b..63cc9dbe4f3b 100644 --- a/drivers/acpi/nfit.c +++ b/drivers/acpi/nfit.c | |||
@@ -287,8 +287,11 @@ static int acpi_nfit_ctl(struct nvdimm_bus_descriptor *nd_desc, | |||
287 | offset); | 287 | offset); |
288 | rc = -ENXIO; | 288 | rc = -ENXIO; |
289 | } | 289 | } |
290 | } else | 290 | } else { |
291 | rc = 0; | 291 | rc = 0; |
292 | if (cmd_rc) | ||
293 | *cmd_rc = xlat_status(buf, cmd); | ||
294 | } | ||
292 | 295 | ||
293 | out: | 296 | out: |
294 | ACPI_FREE(out_obj); | 297 | ACPI_FREE(out_obj); |
diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig index 5083f85efea7..cfa936a32513 100644 --- a/drivers/ata/Kconfig +++ b/drivers/ata/Kconfig | |||
@@ -202,6 +202,14 @@ config SATA_FSL | |||
202 | 202 | ||
203 | If unsure, say N. | 203 | If unsure, say N. |
204 | 204 | ||
205 | config SATA_AHCI_SEATTLE | ||
206 | tristate "AMD Seattle 6.0Gbps AHCI SATA host controller support" | ||
207 | depends on ARCH_SEATTLE | ||
208 | help | ||
209 | This option enables support for AMD Seattle SATA host controller. | ||
210 | |||
211 | If unsure, say N | ||
212 | |||
205 | config SATA_INIC162X | 213 | config SATA_INIC162X |
206 | tristate "Initio 162x SATA support (Very Experimental)" | 214 | tristate "Initio 162x SATA support (Very Experimental)" |
207 | depends on PCI | 215 | depends on PCI |
diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile index 18579521464e..0b2afb7e5f35 100644 --- a/drivers/ata/Makefile +++ b/drivers/ata/Makefile | |||
@@ -4,6 +4,7 @@ obj-$(CONFIG_ATA) += libata.o | |||
4 | # non-SFF interface | 4 | # non-SFF interface |
5 | obj-$(CONFIG_SATA_AHCI) += ahci.o libahci.o | 5 | obj-$(CONFIG_SATA_AHCI) += ahci.o libahci.o |
6 | obj-$(CONFIG_SATA_ACARD_AHCI) += acard-ahci.o libahci.o | 6 | obj-$(CONFIG_SATA_ACARD_AHCI) += acard-ahci.o libahci.o |
7 | obj-$(CONFIG_SATA_AHCI_SEATTLE) += ahci_seattle.o libahci.o libahci_platform.o | ||
7 | obj-$(CONFIG_SATA_AHCI_PLATFORM) += ahci_platform.o libahci.o libahci_platform.o | 8 | obj-$(CONFIG_SATA_AHCI_PLATFORM) += ahci_platform.o libahci.o libahci_platform.o |
8 | obj-$(CONFIG_SATA_FSL) += sata_fsl.o | 9 | obj-$(CONFIG_SATA_FSL) += sata_fsl.o |
9 | obj-$(CONFIG_SATA_INIC162X) += sata_inic162x.o | 10 | obj-$(CONFIG_SATA_INIC162X) += sata_inic162x.o |
diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c index 40442332bfa7..62a04c8fb5c9 100644 --- a/drivers/ata/ahci_platform.c +++ b/drivers/ata/ahci_platform.c | |||
@@ -51,6 +51,9 @@ static int ahci_probe(struct platform_device *pdev) | |||
51 | if (rc) | 51 | if (rc) |
52 | return rc; | 52 | return rc; |
53 | 53 | ||
54 | of_property_read_u32(dev->of_node, | ||
55 | "ports-implemented", &hpriv->force_port_map); | ||
56 | |||
54 | if (of_device_is_compatible(dev->of_node, "hisilicon,hisi-ahci")) | 57 | if (of_device_is_compatible(dev->of_node, "hisilicon,hisi-ahci")) |
55 | hpriv->flags |= AHCI_HFLAG_NO_FBS | AHCI_HFLAG_NO_NCQ; | 58 | hpriv->flags |= AHCI_HFLAG_NO_FBS | AHCI_HFLAG_NO_NCQ; |
56 | 59 | ||
diff --git a/drivers/ata/ahci_seattle.c b/drivers/ata/ahci_seattle.c new file mode 100644 index 000000000000..6e702ab57220 --- /dev/null +++ b/drivers/ata/ahci_seattle.c | |||
@@ -0,0 +1,210 @@ | |||
1 | /* | ||
2 | * AMD Seattle AHCI SATA driver | ||
3 | * | ||
4 | * Copyright (c) 2015, Advanced Micro Devices | ||
5 | * Author: Brijesh Singh <brijesh.singh@amd.com> | ||
6 | * | ||
7 | * based on the AHCI SATA platform driver by Jeff Garzik and Anton Vorontsov | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; either version 2 of the License. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | */ | ||
18 | |||
19 | #include <linux/kernel.h> | ||
20 | #include <linux/module.h> | ||
21 | #include <linux/pm.h> | ||
22 | #include <linux/device.h> | ||
23 | #include <linux/of_device.h> | ||
24 | #include <linux/platform_device.h> | ||
25 | #include <linux/libata.h> | ||
26 | #include <linux/ahci_platform.h> | ||
27 | #include <linux/acpi.h> | ||
28 | #include <linux/pci_ids.h> | ||
29 | #include "ahci.h" | ||
30 | |||
31 | /* SGPIO Control Register definition | ||
32 | * | ||
33 | * Bit Type Description | ||
34 | * 31 RW OD7.2 (activity) | ||
35 | * 30 RW OD7.1 (locate) | ||
36 | * 29 RW OD7.0 (fault) | ||
37 | * 28...8 RW OD6.2...OD0.0 (3bits per port, 1 bit per LED) | ||
38 | * 7 RO SGPIO feature flag | ||
39 | * 6:4 RO Reserved | ||
40 | * 3:0 RO Number of ports (0 means no port supported) | ||
41 | */ | ||
42 | #define ACTIVITY_BIT_POS(x) (8 + (3 * x)) | ||
43 | #define LOCATE_BIT_POS(x) (ACTIVITY_BIT_POS(x) + 1) | ||
44 | #define FAULT_BIT_POS(x) (LOCATE_BIT_POS(x) + 1) | ||
45 | |||
46 | #define ACTIVITY_MASK 0x00010000 | ||
47 | #define LOCATE_MASK 0x00080000 | ||
48 | #define FAULT_MASK 0x00400000 | ||
49 | |||
50 | #define DRV_NAME "ahci-seattle" | ||
51 | |||
52 | static ssize_t seattle_transmit_led_message(struct ata_port *ap, u32 state, | ||
53 | ssize_t size); | ||
54 | |||
55 | struct seattle_plat_data { | ||
56 | void __iomem *sgpio_ctrl; | ||
57 | }; | ||
58 | |||
59 | static struct ata_port_operations ahci_port_ops = { | ||
60 | .inherits = &ahci_ops, | ||
61 | }; | ||
62 | |||
63 | static const struct ata_port_info ahci_port_info = { | ||
64 | .flags = AHCI_FLAG_COMMON, | ||
65 | .pio_mask = ATA_PIO4, | ||
66 | .udma_mask = ATA_UDMA6, | ||
67 | .port_ops = &ahci_port_ops, | ||
68 | }; | ||
69 | |||
70 | static struct ata_port_operations ahci_seattle_ops = { | ||
71 | .inherits = &ahci_ops, | ||
72 | .transmit_led_message = seattle_transmit_led_message, | ||
73 | }; | ||
74 | |||
75 | static const struct ata_port_info ahci_port_seattle_info = { | ||
76 | .flags = AHCI_FLAG_COMMON | ATA_FLAG_EM | ATA_FLAG_SW_ACTIVITY, | ||
77 | .link_flags = ATA_LFLAG_SW_ACTIVITY, | ||
78 | .pio_mask = ATA_PIO4, | ||
79 | .udma_mask = ATA_UDMA6, | ||
80 | .port_ops = &ahci_seattle_ops, | ||
81 | }; | ||
82 | |||
83 | static struct scsi_host_template ahci_platform_sht = { | ||
84 | AHCI_SHT(DRV_NAME), | ||
85 | }; | ||
86 | |||
87 | static ssize_t seattle_transmit_led_message(struct ata_port *ap, u32 state, | ||
88 | ssize_t size) | ||
89 | { | ||
90 | struct ahci_host_priv *hpriv = ap->host->private_data; | ||
91 | struct ahci_port_priv *pp = ap->private_data; | ||
92 | struct seattle_plat_data *plat_data = hpriv->plat_data; | ||
93 | unsigned long flags; | ||
94 | int pmp; | ||
95 | struct ahci_em_priv *emp; | ||
96 | u32 val; | ||
97 | |||
98 | /* get the slot number from the message */ | ||
99 | pmp = (state & EM_MSG_LED_PMP_SLOT) >> 8; | ||
100 | if (pmp >= EM_MAX_SLOTS) | ||
101 | return -EINVAL; | ||
102 | emp = &pp->em_priv[pmp]; | ||
103 | |||
104 | val = ioread32(plat_data->sgpio_ctrl); | ||
105 | if (state & ACTIVITY_MASK) | ||
106 | val |= 1 << ACTIVITY_BIT_POS((ap->port_no)); | ||
107 | else | ||
108 | val &= ~(1 << ACTIVITY_BIT_POS((ap->port_no))); | ||
109 | |||
110 | if (state & LOCATE_MASK) | ||
111 | val |= 1 << LOCATE_BIT_POS((ap->port_no)); | ||
112 | else | ||
113 | val &= ~(1 << LOCATE_BIT_POS((ap->port_no))); | ||
114 | |||
115 | if (state & FAULT_MASK) | ||
116 | val |= 1 << FAULT_BIT_POS((ap->port_no)); | ||
117 | else | ||
118 | val &= ~(1 << FAULT_BIT_POS((ap->port_no))); | ||
119 | |||
120 | iowrite32(val, plat_data->sgpio_ctrl); | ||
121 | |||
122 | spin_lock_irqsave(ap->lock, flags); | ||
123 | |||
124 | /* save off new led state for port/slot */ | ||
125 | emp->led_state = state; | ||
126 | |||
127 | spin_unlock_irqrestore(ap->lock, flags); | ||
128 | |||
129 | return size; | ||
130 | } | ||
131 | |||
132 | static const struct ata_port_info *ahci_seattle_get_port_info( | ||
133 | struct platform_device *pdev, struct ahci_host_priv *hpriv) | ||
134 | { | ||
135 | struct device *dev = &pdev->dev; | ||
136 | struct seattle_plat_data *plat_data; | ||
137 | u32 val; | ||
138 | |||
139 | plat_data = devm_kzalloc(dev, sizeof(*plat_data), GFP_KERNEL); | ||
140 | if (IS_ERR(plat_data)) | ||
141 | return &ahci_port_info; | ||
142 | |||
143 | plat_data->sgpio_ctrl = devm_ioremap_resource(dev, | ||
144 | platform_get_resource(pdev, IORESOURCE_MEM, 1)); | ||
145 | if (IS_ERR(plat_data->sgpio_ctrl)) | ||
146 | return &ahci_port_info; | ||
147 | |||
148 | val = ioread32(plat_data->sgpio_ctrl); | ||
149 | |||
150 | if (!(val & 0xf)) | ||
151 | return &ahci_port_info; | ||
152 | |||
153 | hpriv->em_loc = 0; | ||
154 | hpriv->em_buf_sz = 4; | ||
155 | hpriv->em_msg_type = EM_MSG_TYPE_LED; | ||
156 | hpriv->plat_data = plat_data; | ||
157 | |||
158 | dev_info(dev, "SGPIO LED control is enabled.\n"); | ||
159 | return &ahci_port_seattle_info; | ||
160 | } | ||
161 | |||
162 | static int ahci_seattle_probe(struct platform_device *pdev) | ||
163 | { | ||
164 | int rc; | ||
165 | struct ahci_host_priv *hpriv; | ||
166 | |||
167 | hpriv = ahci_platform_get_resources(pdev); | ||
168 | if (IS_ERR(hpriv)) | ||
169 | return PTR_ERR(hpriv); | ||
170 | |||
171 | rc = ahci_platform_enable_resources(hpriv); | ||
172 | if (rc) | ||
173 | return rc; | ||
174 | |||
175 | rc = ahci_platform_init_host(pdev, hpriv, | ||
176 | ahci_seattle_get_port_info(pdev, hpriv), | ||
177 | &ahci_platform_sht); | ||
178 | if (rc) | ||
179 | goto disable_resources; | ||
180 | |||
181 | return 0; | ||
182 | disable_resources: | ||
183 | ahci_platform_disable_resources(hpriv); | ||
184 | return rc; | ||
185 | } | ||
186 | |||
187 | static SIMPLE_DEV_PM_OPS(ahci_pm_ops, ahci_platform_suspend, | ||
188 | ahci_platform_resume); | ||
189 | |||
190 | static const struct acpi_device_id ahci_acpi_match[] = { | ||
191 | { "AMDI0600", 0 }, | ||
192 | {} | ||
193 | }; | ||
194 | MODULE_DEVICE_TABLE(acpi, ahci_acpi_match); | ||
195 | |||
196 | static struct platform_driver ahci_seattle_driver = { | ||
197 | .probe = ahci_seattle_probe, | ||
198 | .remove = ata_platform_remove_one, | ||
199 | .driver = { | ||
200 | .name = DRV_NAME, | ||
201 | .acpi_match_table = ahci_acpi_match, | ||
202 | .pm = &ahci_pm_ops, | ||
203 | }, | ||
204 | }; | ||
205 | module_platform_driver(ahci_seattle_driver); | ||
206 | |||
207 | MODULE_DESCRIPTION("Seattle AHCI SATA platform driver"); | ||
208 | MODULE_AUTHOR("Brijesh Singh <brijesh.singh@amd.com>"); | ||
209 | MODULE_LICENSE("GPL"); | ||
210 | MODULE_ALIAS("platform:" DRV_NAME); | ||
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index 3982054060b8..a5d7c1c2a05e 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c | |||
@@ -507,6 +507,7 @@ void ahci_save_initial_config(struct device *dev, struct ahci_host_priv *hpriv) | |||
507 | dev_info(dev, "forcing port_map 0x%x -> 0x%x\n", | 507 | dev_info(dev, "forcing port_map 0x%x -> 0x%x\n", |
508 | port_map, hpriv->force_port_map); | 508 | port_map, hpriv->force_port_map); |
509 | port_map = hpriv->force_port_map; | 509 | port_map = hpriv->force_port_map; |
510 | hpriv->saved_port_map = port_map; | ||
510 | } | 511 | } |
511 | 512 | ||
512 | if (hpriv->mask_port_map) { | 513 | if (hpriv->mask_port_map) { |
diff --git a/drivers/base/power/opp/core.c b/drivers/base/power/opp/core.c index 433b60092972..d8f4cc22856c 100644 --- a/drivers/base/power/opp/core.c +++ b/drivers/base/power/opp/core.c | |||
@@ -259,9 +259,6 @@ unsigned long dev_pm_opp_get_max_volt_latency(struct device *dev) | |||
259 | reg = opp_table->regulator; | 259 | reg = opp_table->regulator; |
260 | if (IS_ERR(reg)) { | 260 | if (IS_ERR(reg)) { |
261 | /* Regulator may not be required for device */ | 261 | /* Regulator may not be required for device */ |
262 | if (reg) | ||
263 | dev_err(dev, "%s: Invalid regulator (%ld)\n", __func__, | ||
264 | PTR_ERR(reg)); | ||
265 | rcu_read_unlock(); | 262 | rcu_read_unlock(); |
266 | return 0; | 263 | return 0; |
267 | } | 264 | } |
diff --git a/drivers/base/property.c b/drivers/base/property.c index 9b1a65debd49..7f692accdc90 100644 --- a/drivers/base/property.c +++ b/drivers/base/property.c | |||
@@ -21,7 +21,7 @@ | |||
21 | 21 | ||
22 | static inline bool is_pset_node(struct fwnode_handle *fwnode) | 22 | static inline bool is_pset_node(struct fwnode_handle *fwnode) |
23 | { | 23 | { |
24 | return fwnode && fwnode->type == FWNODE_PDATA; | 24 | return !IS_ERR_OR_NULL(fwnode) && fwnode->type == FWNODE_PDATA; |
25 | } | 25 | } |
26 | 26 | ||
27 | static inline struct property_set *to_pset_node(struct fwnode_handle *fwnode) | 27 | static inline struct property_set *to_pset_node(struct fwnode_handle *fwnode) |
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index e93405f0eac4..c4acfc5273b3 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c | |||
@@ -1557,21 +1557,25 @@ void cpufreq_suspend(void) | |||
1557 | if (!cpufreq_driver) | 1557 | if (!cpufreq_driver) |
1558 | return; | 1558 | return; |
1559 | 1559 | ||
1560 | if (!has_target()) | 1560 | if (!has_target() && !cpufreq_driver->suspend) |
1561 | goto suspend; | 1561 | goto suspend; |
1562 | 1562 | ||
1563 | pr_debug("%s: Suspending Governors\n", __func__); | 1563 | pr_debug("%s: Suspending Governors\n", __func__); |
1564 | 1564 | ||
1565 | for_each_active_policy(policy) { | 1565 | for_each_active_policy(policy) { |
1566 | down_write(&policy->rwsem); | 1566 | if (has_target()) { |
1567 | ret = cpufreq_governor(policy, CPUFREQ_GOV_STOP); | 1567 | down_write(&policy->rwsem); |
1568 | up_write(&policy->rwsem); | 1568 | ret = cpufreq_governor(policy, CPUFREQ_GOV_STOP); |
1569 | up_write(&policy->rwsem); | ||
1569 | 1570 | ||
1570 | if (ret) | 1571 | if (ret) { |
1571 | pr_err("%s: Failed to stop governor for policy: %p\n", | 1572 | pr_err("%s: Failed to stop governor for policy: %p\n", |
1572 | __func__, policy); | 1573 | __func__, policy); |
1573 | else if (cpufreq_driver->suspend | 1574 | continue; |
1574 | && cpufreq_driver->suspend(policy)) | 1575 | } |
1576 | } | ||
1577 | |||
1578 | if (cpufreq_driver->suspend && cpufreq_driver->suspend(policy)) | ||
1575 | pr_err("%s: Failed to suspend driver: %p\n", __func__, | 1579 | pr_err("%s: Failed to suspend driver: %p\n", __func__, |
1576 | policy); | 1580 | policy); |
1577 | } | 1581 | } |
@@ -1596,7 +1600,7 @@ void cpufreq_resume(void) | |||
1596 | 1600 | ||
1597 | cpufreq_suspended = false; | 1601 | cpufreq_suspended = false; |
1598 | 1602 | ||
1599 | if (!has_target()) | 1603 | if (!has_target() && !cpufreq_driver->resume) |
1600 | return; | 1604 | return; |
1601 | 1605 | ||
1602 | pr_debug("%s: Resuming Governors\n", __func__); | 1606 | pr_debug("%s: Resuming Governors\n", __func__); |
@@ -1605,7 +1609,7 @@ void cpufreq_resume(void) | |||
1605 | if (cpufreq_driver->resume && cpufreq_driver->resume(policy)) { | 1609 | if (cpufreq_driver->resume && cpufreq_driver->resume(policy)) { |
1606 | pr_err("%s: Failed to resume driver: %p\n", __func__, | 1610 | pr_err("%s: Failed to resume driver: %p\n", __func__, |
1607 | policy); | 1611 | policy); |
1608 | } else { | 1612 | } else if (has_target()) { |
1609 | down_write(&policy->rwsem); | 1613 | down_write(&policy->rwsem); |
1610 | ret = cpufreq_start_governor(policy); | 1614 | ret = cpufreq_start_governor(policy); |
1611 | up_write(&policy->rwsem); | 1615 | up_write(&policy->rwsem); |
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c index f502d5b90c25..b230ebaae66c 100644 --- a/drivers/cpufreq/intel_pstate.c +++ b/drivers/cpufreq/intel_pstate.c | |||
@@ -453,6 +453,14 @@ static void intel_pstate_hwp_set(const struct cpumask *cpumask) | |||
453 | } | 453 | } |
454 | } | 454 | } |
455 | 455 | ||
456 | static int intel_pstate_hwp_set_policy(struct cpufreq_policy *policy) | ||
457 | { | ||
458 | if (hwp_active) | ||
459 | intel_pstate_hwp_set(policy->cpus); | ||
460 | |||
461 | return 0; | ||
462 | } | ||
463 | |||
456 | static void intel_pstate_hwp_set_online_cpus(void) | 464 | static void intel_pstate_hwp_set_online_cpus(void) |
457 | { | 465 | { |
458 | get_online_cpus(); | 466 | get_online_cpus(); |
@@ -1062,8 +1070,9 @@ static inline bool intel_pstate_sample(struct cpudata *cpu, u64 time) | |||
1062 | 1070 | ||
1063 | static inline int32_t get_avg_frequency(struct cpudata *cpu) | 1071 | static inline int32_t get_avg_frequency(struct cpudata *cpu) |
1064 | { | 1072 | { |
1065 | return div64_u64(cpu->pstate.max_pstate_physical * cpu->sample.aperf * | 1073 | return fp_toint(mul_fp(cpu->sample.core_pct_busy, |
1066 | cpu->pstate.scaling, cpu->sample.mperf); | 1074 | int_tofp(cpu->pstate.max_pstate_physical * |
1075 | cpu->pstate.scaling / 100))); | ||
1067 | } | 1076 | } |
1068 | 1077 | ||
1069 | static inline int32_t get_target_pstate_use_cpu_load(struct cpudata *cpu) | 1078 | static inline int32_t get_target_pstate_use_cpu_load(struct cpudata *cpu) |
@@ -1106,8 +1115,6 @@ static inline int32_t get_target_pstate_use_performance(struct cpudata *cpu) | |||
1106 | int32_t core_busy, max_pstate, current_pstate, sample_ratio; | 1115 | int32_t core_busy, max_pstate, current_pstate, sample_ratio; |
1107 | u64 duration_ns; | 1116 | u64 duration_ns; |
1108 | 1117 | ||
1109 | intel_pstate_calc_busy(cpu); | ||
1110 | |||
1111 | /* | 1118 | /* |
1112 | * core_busy is the ratio of actual performance to max | 1119 | * core_busy is the ratio of actual performance to max |
1113 | * max_pstate is the max non turbo pstate available | 1120 | * max_pstate is the max non turbo pstate available |
@@ -1191,8 +1198,11 @@ static void intel_pstate_update_util(struct update_util_data *data, u64 time, | |||
1191 | if ((s64)delta_ns >= pid_params.sample_rate_ns) { | 1198 | if ((s64)delta_ns >= pid_params.sample_rate_ns) { |
1192 | bool sample_taken = intel_pstate_sample(cpu, time); | 1199 | bool sample_taken = intel_pstate_sample(cpu, time); |
1193 | 1200 | ||
1194 | if (sample_taken && !hwp_active) | 1201 | if (sample_taken) { |
1195 | intel_pstate_adjust_busy_pstate(cpu); | 1202 | intel_pstate_calc_busy(cpu); |
1203 | if (!hwp_active) | ||
1204 | intel_pstate_adjust_busy_pstate(cpu); | ||
1205 | } | ||
1196 | } | 1206 | } |
1197 | } | 1207 | } |
1198 | 1208 | ||
@@ -1346,8 +1356,7 @@ static int intel_pstate_set_policy(struct cpufreq_policy *policy) | |||
1346 | out: | 1356 | out: |
1347 | intel_pstate_set_update_util_hook(policy->cpu); | 1357 | intel_pstate_set_update_util_hook(policy->cpu); |
1348 | 1358 | ||
1349 | if (hwp_active) | 1359 | intel_pstate_hwp_set_policy(policy); |
1350 | intel_pstate_hwp_set(policy->cpus); | ||
1351 | 1360 | ||
1352 | return 0; | 1361 | return 0; |
1353 | } | 1362 | } |
@@ -1411,6 +1420,7 @@ static struct cpufreq_driver intel_pstate_driver = { | |||
1411 | .flags = CPUFREQ_CONST_LOOPS, | 1420 | .flags = CPUFREQ_CONST_LOOPS, |
1412 | .verify = intel_pstate_verify_policy, | 1421 | .verify = intel_pstate_verify_policy, |
1413 | .setpolicy = intel_pstate_set_policy, | 1422 | .setpolicy = intel_pstate_set_policy, |
1423 | .resume = intel_pstate_hwp_set_policy, | ||
1414 | .get = intel_pstate_get, | 1424 | .get = intel_pstate_get, |
1415 | .init = intel_pstate_cpu_init, | 1425 | .init = intel_pstate_cpu_init, |
1416 | .stop_cpu = intel_pstate_stop_cpu, | 1426 | .stop_cpu = intel_pstate_stop_cpu, |
diff --git a/drivers/cpufreq/sti-cpufreq.c b/drivers/cpufreq/sti-cpufreq.c index a9c659f58974..04042038ec4b 100644 --- a/drivers/cpufreq/sti-cpufreq.c +++ b/drivers/cpufreq/sti-cpufreq.c | |||
@@ -259,6 +259,10 @@ static int sti_cpufreq_init(void) | |||
259 | { | 259 | { |
260 | int ret; | 260 | int ret; |
261 | 261 | ||
262 | if ((!of_machine_is_compatible("st,stih407")) && | ||
263 | (!of_machine_is_compatible("st,stih410"))) | ||
264 | return -ENODEV; | ||
265 | |||
262 | ddata.cpu = get_cpu_device(0); | 266 | ddata.cpu = get_cpu_device(0); |
263 | if (!ddata.cpu) { | 267 | if (!ddata.cpu) { |
264 | dev_err(ddata.cpu, "Failed to get device for CPU0\n"); | 268 | dev_err(ddata.cpu, "Failed to get device for CPU0\n"); |
diff --git a/drivers/cpuidle/cpuidle-arm.c b/drivers/cpuidle/cpuidle-arm.c index 545069d5fdfb..e342565e8715 100644 --- a/drivers/cpuidle/cpuidle-arm.c +++ b/drivers/cpuidle/cpuidle-arm.c | |||
@@ -50,7 +50,7 @@ static int arm_enter_idle_state(struct cpuidle_device *dev, | |||
50 | * call the CPU ops suspend protocol with idle index as a | 50 | * call the CPU ops suspend protocol with idle index as a |
51 | * parameter. | 51 | * parameter. |
52 | */ | 52 | */ |
53 | arm_cpuidle_suspend(idx); | 53 | ret = arm_cpuidle_suspend(idx); |
54 | 54 | ||
55 | cpu_pm_exit(); | 55 | cpu_pm_exit(); |
56 | } | 56 | } |
diff --git a/drivers/crypto/qat/qat_common/adf_common_drv.h b/drivers/crypto/qat/qat_common/adf_common_drv.h index 0e82ce3c383e..976b01e58afb 100644 --- a/drivers/crypto/qat/qat_common/adf_common_drv.h +++ b/drivers/crypto/qat/qat_common/adf_common_drv.h | |||
@@ -236,6 +236,8 @@ void adf_enable_vf2pf_interrupts(struct adf_accel_dev *accel_dev, | |||
236 | uint32_t vf_mask); | 236 | uint32_t vf_mask); |
237 | void adf_enable_pf2vf_interrupts(struct adf_accel_dev *accel_dev); | 237 | void adf_enable_pf2vf_interrupts(struct adf_accel_dev *accel_dev); |
238 | void adf_disable_pf2vf_interrupts(struct adf_accel_dev *accel_dev); | 238 | void adf_disable_pf2vf_interrupts(struct adf_accel_dev *accel_dev); |
239 | int adf_init_pf_wq(void); | ||
240 | void adf_exit_pf_wq(void); | ||
239 | #else | 241 | #else |
240 | static inline int adf_sriov_configure(struct pci_dev *pdev, int numvfs) | 242 | static inline int adf_sriov_configure(struct pci_dev *pdev, int numvfs) |
241 | { | 243 | { |
@@ -253,5 +255,14 @@ static inline void adf_enable_pf2vf_interrupts(struct adf_accel_dev *accel_dev) | |||
253 | static inline void adf_disable_pf2vf_interrupts(struct adf_accel_dev *accel_dev) | 255 | static inline void adf_disable_pf2vf_interrupts(struct adf_accel_dev *accel_dev) |
254 | { | 256 | { |
255 | } | 257 | } |
258 | |||
259 | static inline int adf_init_pf_wq(void) | ||
260 | { | ||
261 | return 0; | ||
262 | } | ||
263 | |||
264 | static inline void adf_exit_pf_wq(void) | ||
265 | { | ||
266 | } | ||
256 | #endif | 267 | #endif |
257 | #endif | 268 | #endif |
diff --git a/drivers/crypto/qat/qat_common/adf_ctl_drv.c b/drivers/crypto/qat/qat_common/adf_ctl_drv.c index 5c897e6e7994..3c3f948290ca 100644 --- a/drivers/crypto/qat/qat_common/adf_ctl_drv.c +++ b/drivers/crypto/qat/qat_common/adf_ctl_drv.c | |||
@@ -462,12 +462,17 @@ static int __init adf_register_ctl_device_driver(void) | |||
462 | if (adf_init_aer()) | 462 | if (adf_init_aer()) |
463 | goto err_aer; | 463 | goto err_aer; |
464 | 464 | ||
465 | if (adf_init_pf_wq()) | ||
466 | goto err_pf_wq; | ||
467 | |||
465 | if (qat_crypto_register()) | 468 | if (qat_crypto_register()) |
466 | goto err_crypto_register; | 469 | goto err_crypto_register; |
467 | 470 | ||
468 | return 0; | 471 | return 0; |
469 | 472 | ||
470 | err_crypto_register: | 473 | err_crypto_register: |
474 | adf_exit_pf_wq(); | ||
475 | err_pf_wq: | ||
471 | adf_exit_aer(); | 476 | adf_exit_aer(); |
472 | err_aer: | 477 | err_aer: |
473 | adf_chr_drv_destroy(); | 478 | adf_chr_drv_destroy(); |
@@ -480,6 +485,7 @@ static void __exit adf_unregister_ctl_device_driver(void) | |||
480 | { | 485 | { |
481 | adf_chr_drv_destroy(); | 486 | adf_chr_drv_destroy(); |
482 | adf_exit_aer(); | 487 | adf_exit_aer(); |
488 | adf_exit_pf_wq(); | ||
483 | qat_crypto_unregister(); | 489 | qat_crypto_unregister(); |
484 | adf_clean_vf_map(false); | 490 | adf_clean_vf_map(false); |
485 | mutex_destroy(&adf_ctl_lock); | 491 | mutex_destroy(&adf_ctl_lock); |
diff --git a/drivers/crypto/qat/qat_common/adf_sriov.c b/drivers/crypto/qat/qat_common/adf_sriov.c index 1117a8b58280..38a0415e767d 100644 --- a/drivers/crypto/qat/qat_common/adf_sriov.c +++ b/drivers/crypto/qat/qat_common/adf_sriov.c | |||
@@ -119,11 +119,6 @@ static int adf_enable_sriov(struct adf_accel_dev *accel_dev) | |||
119 | int i; | 119 | int i; |
120 | u32 reg; | 120 | u32 reg; |
121 | 121 | ||
122 | /* Workqueue for PF2VF responses */ | ||
123 | pf2vf_resp_wq = create_workqueue("qat_pf2vf_resp_wq"); | ||
124 | if (!pf2vf_resp_wq) | ||
125 | return -ENOMEM; | ||
126 | |||
127 | for (i = 0, vf_info = accel_dev->pf.vf_info; i < totalvfs; | 122 | for (i = 0, vf_info = accel_dev->pf.vf_info; i < totalvfs; |
128 | i++, vf_info++) { | 123 | i++, vf_info++) { |
129 | /* This ptr will be populated when VFs will be created */ | 124 | /* This ptr will be populated when VFs will be created */ |
@@ -216,11 +211,6 @@ void adf_disable_sriov(struct adf_accel_dev *accel_dev) | |||
216 | 211 | ||
217 | kfree(accel_dev->pf.vf_info); | 212 | kfree(accel_dev->pf.vf_info); |
218 | accel_dev->pf.vf_info = NULL; | 213 | accel_dev->pf.vf_info = NULL; |
219 | |||
220 | if (pf2vf_resp_wq) { | ||
221 | destroy_workqueue(pf2vf_resp_wq); | ||
222 | pf2vf_resp_wq = NULL; | ||
223 | } | ||
224 | } | 214 | } |
225 | EXPORT_SYMBOL_GPL(adf_disable_sriov); | 215 | EXPORT_SYMBOL_GPL(adf_disable_sriov); |
226 | 216 | ||
@@ -304,3 +294,19 @@ int adf_sriov_configure(struct pci_dev *pdev, int numvfs) | |||
304 | return numvfs; | 294 | return numvfs; |
305 | } | 295 | } |
306 | EXPORT_SYMBOL_GPL(adf_sriov_configure); | 296 | EXPORT_SYMBOL_GPL(adf_sriov_configure); |
297 | |||
298 | int __init adf_init_pf_wq(void) | ||
299 | { | ||
300 | /* Workqueue for PF2VF responses */ | ||
301 | pf2vf_resp_wq = create_workqueue("qat_pf2vf_resp_wq"); | ||
302 | |||
303 | return !pf2vf_resp_wq ? -ENOMEM : 0; | ||
304 | } | ||
305 | |||
306 | void adf_exit_pf_wq(void) | ||
307 | { | ||
308 | if (pf2vf_resp_wq) { | ||
309 | destroy_workqueue(pf2vf_resp_wq); | ||
310 | pf2vf_resp_wq = NULL; | ||
311 | } | ||
312 | } | ||
diff --git a/drivers/firmware/qemu_fw_cfg.c b/drivers/firmware/qemu_fw_cfg.c index 815c4a5cae54..1b95475b6aef 100644 --- a/drivers/firmware/qemu_fw_cfg.c +++ b/drivers/firmware/qemu_fw_cfg.c | |||
@@ -77,7 +77,7 @@ static inline u16 fw_cfg_sel_endianness(u16 key) | |||
77 | static inline void fw_cfg_read_blob(u16 key, | 77 | static inline void fw_cfg_read_blob(u16 key, |
78 | void *buf, loff_t pos, size_t count) | 78 | void *buf, loff_t pos, size_t count) |
79 | { | 79 | { |
80 | u32 glk; | 80 | u32 glk = -1U; |
81 | acpi_status status; | 81 | acpi_status status; |
82 | 82 | ||
83 | /* If we have ACPI, ensure mutual exclusion against any potential | 83 | /* If we have ACPI, ensure mutual exclusion against any potential |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c index e557fc1f17c8..7ecea83ce453 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | |||
@@ -541,6 +541,7 @@ int amdgpu_bo_set_metadata (struct amdgpu_bo *bo, void *metadata, | |||
541 | if (!metadata_size) { | 541 | if (!metadata_size) { |
542 | if (bo->metadata_size) { | 542 | if (bo->metadata_size) { |
543 | kfree(bo->metadata); | 543 | kfree(bo->metadata); |
544 | bo->metadata = NULL; | ||
544 | bo->metadata_size = 0; | 545 | bo->metadata_size = 0; |
545 | } | 546 | } |
546 | return 0; | 547 | return 0; |
diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c index 1e0bba29e167..1cd6de575305 100644 --- a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c +++ b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c | |||
@@ -298,6 +298,10 @@ bool amdgpu_atombios_encoder_mode_fixup(struct drm_encoder *encoder, | |||
298 | && (mode->crtc_vsync_start < (mode->crtc_vdisplay + 2))) | 298 | && (mode->crtc_vsync_start < (mode->crtc_vdisplay + 2))) |
299 | adjusted_mode->crtc_vsync_start = adjusted_mode->crtc_vdisplay + 2; | 299 | adjusted_mode->crtc_vsync_start = adjusted_mode->crtc_vdisplay + 2; |
300 | 300 | ||
301 | /* vertical FP must be at least 1 */ | ||
302 | if (mode->crtc_vsync_start == mode->crtc_vdisplay) | ||
303 | adjusted_mode->crtc_vsync_start++; | ||
304 | |||
301 | /* get the native mode for scaling */ | 305 | /* get the native mode for scaling */ |
302 | if (amdgpu_encoder->active_device & (ATOM_DEVICE_LCD_SUPPORT)) | 306 | if (amdgpu_encoder->active_device & (ATOM_DEVICE_LCD_SUPPORT)) |
303 | amdgpu_panel_mode_fixup(encoder, adjusted_mode); | 307 | amdgpu_panel_mode_fixup(encoder, adjusted_mode); |
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index 30798cbc6fc0..6d2fb3f4ac62 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c | |||
@@ -792,7 +792,7 @@ static int i915_drm_resume(struct drm_device *dev) | |||
792 | static int i915_drm_resume_early(struct drm_device *dev) | 792 | static int i915_drm_resume_early(struct drm_device *dev) |
793 | { | 793 | { |
794 | struct drm_i915_private *dev_priv = dev->dev_private; | 794 | struct drm_i915_private *dev_priv = dev->dev_private; |
795 | int ret = 0; | 795 | int ret; |
796 | 796 | ||
797 | /* | 797 | /* |
798 | * We have a resume ordering issue with the snd-hda driver also | 798 | * We have a resume ordering issue with the snd-hda driver also |
@@ -803,6 +803,36 @@ static int i915_drm_resume_early(struct drm_device *dev) | |||
803 | * FIXME: This should be solved with a special hdmi sink device or | 803 | * FIXME: This should be solved with a special hdmi sink device or |
804 | * similar so that power domains can be employed. | 804 | * similar so that power domains can be employed. |
805 | */ | 805 | */ |
806 | |||
807 | /* | ||
808 | * Note that we need to set the power state explicitly, since we | ||
809 | * powered off the device during freeze and the PCI core won't power | ||
810 | * it back up for us during thaw. Powering off the device during | ||
811 | * freeze is not a hard requirement though, and during the | ||
812 | * suspend/resume phases the PCI core makes sure we get here with the | ||
813 | * device powered on. So in case we change our freeze logic and keep | ||
814 | * the device powered we can also remove the following set power state | ||
815 | * call. | ||
816 | */ | ||
817 | ret = pci_set_power_state(dev->pdev, PCI_D0); | ||
818 | if (ret) { | ||
819 | DRM_ERROR("failed to set PCI D0 power state (%d)\n", ret); | ||
820 | goto out; | ||
821 | } | ||
822 | |||
823 | /* | ||
824 | * Note that pci_enable_device() first enables any parent bridge | ||
825 | * device and only then sets the power state for this device. The | ||
826 | * bridge enabling is a nop though, since bridge devices are resumed | ||
827 | * first. The order of enabling power and enabling the device is | ||
828 | * imposed by the PCI core as described above, so here we preserve the | ||
829 | * same order for the freeze/thaw phases. | ||
830 | * | ||
831 | * TODO: eventually we should remove pci_disable_device() / | ||
832 | * pci_enable_enable_device() from suspend/resume. Due to how they | ||
833 | * depend on the device enable refcount we can't anyway depend on them | ||
834 | * disabling/enabling the device. | ||
835 | */ | ||
806 | if (pci_enable_device(dev->pdev)) { | 836 | if (pci_enable_device(dev->pdev)) { |
807 | ret = -EIO; | 837 | ret = -EIO; |
808 | goto out; | 838 | goto out; |
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index f76cbf3e5d1e..fffdac801d3b 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h | |||
@@ -2907,7 +2907,14 @@ enum skl_disp_power_wells { | |||
2907 | #define GEN6_RP_STATE_CAP _MMIO(MCHBAR_MIRROR_BASE_SNB + 0x5998) | 2907 | #define GEN6_RP_STATE_CAP _MMIO(MCHBAR_MIRROR_BASE_SNB + 0x5998) |
2908 | #define BXT_RP_STATE_CAP _MMIO(0x138170) | 2908 | #define BXT_RP_STATE_CAP _MMIO(0x138170) |
2909 | 2909 | ||
2910 | #define INTERVAL_1_28_US(us) (((us) * 100) >> 7) | 2910 | /* |
2911 | * Make these a multiple of magic 25 to avoid SNB (eg. Dell XPS | ||
2912 | * 8300) freezing up around GPU hangs. Looks as if even | ||
2913 | * scheduling/timer interrupts start misbehaving if the RPS | ||
2914 | * EI/thresholds are "bad", leading to a very sluggish or even | ||
2915 | * frozen machine. | ||
2916 | */ | ||
2917 | #define INTERVAL_1_28_US(us) roundup(((us) * 100) >> 7, 25) | ||
2911 | #define INTERVAL_1_33_US(us) (((us) * 3) >> 2) | 2918 | #define INTERVAL_1_33_US(us) (((us) * 3) >> 2) |
2912 | #define INTERVAL_0_833_US(us) (((us) * 6) / 5) | 2919 | #define INTERVAL_0_833_US(us) (((us) * 6) / 5) |
2913 | #define GT_INTERVAL_FROM_US(dev_priv, us) (IS_GEN9(dev_priv) ? \ | 2920 | #define GT_INTERVAL_FROM_US(dev_priv, us) (IS_GEN9(dev_priv) ? \ |
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c index 62de9f4bce09..3b57bf06abe8 100644 --- a/drivers/gpu/drm/i915/intel_ddi.c +++ b/drivers/gpu/drm/i915/intel_ddi.c | |||
@@ -443,9 +443,17 @@ void intel_prepare_ddi_buffer(struct intel_encoder *encoder) | |||
443 | } else if (IS_BROADWELL(dev_priv)) { | 443 | } else if (IS_BROADWELL(dev_priv)) { |
444 | ddi_translations_fdi = bdw_ddi_translations_fdi; | 444 | ddi_translations_fdi = bdw_ddi_translations_fdi; |
445 | ddi_translations_dp = bdw_ddi_translations_dp; | 445 | ddi_translations_dp = bdw_ddi_translations_dp; |
446 | ddi_translations_edp = bdw_ddi_translations_edp; | 446 | |
447 | if (dev_priv->edp_low_vswing) { | ||
448 | ddi_translations_edp = bdw_ddi_translations_edp; | ||
449 | n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_edp); | ||
450 | } else { | ||
451 | ddi_translations_edp = bdw_ddi_translations_dp; | ||
452 | n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_dp); | ||
453 | } | ||
454 | |||
447 | ddi_translations_hdmi = bdw_ddi_translations_hdmi; | 455 | ddi_translations_hdmi = bdw_ddi_translations_hdmi; |
448 | n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_edp); | 456 | |
449 | n_dp_entries = ARRAY_SIZE(bdw_ddi_translations_dp); | 457 | n_dp_entries = ARRAY_SIZE(bdw_ddi_translations_dp); |
450 | n_hdmi_entries = ARRAY_SIZE(bdw_ddi_translations_hdmi); | 458 | n_hdmi_entries = ARRAY_SIZE(bdw_ddi_translations_hdmi); |
451 | hdmi_default_entry = 7; | 459 | hdmi_default_entry = 7; |
@@ -3201,12 +3209,6 @@ void intel_ddi_get_config(struct intel_encoder *encoder, | |||
3201 | intel_ddi_clock_get(encoder, pipe_config); | 3209 | intel_ddi_clock_get(encoder, pipe_config); |
3202 | } | 3210 | } |
3203 | 3211 | ||
3204 | static void intel_ddi_destroy(struct drm_encoder *encoder) | ||
3205 | { | ||
3206 | /* HDMI has nothing special to destroy, so we can go with this. */ | ||
3207 | intel_dp_encoder_destroy(encoder); | ||
3208 | } | ||
3209 | |||
3210 | static bool intel_ddi_compute_config(struct intel_encoder *encoder, | 3212 | static bool intel_ddi_compute_config(struct intel_encoder *encoder, |
3211 | struct intel_crtc_state *pipe_config) | 3213 | struct intel_crtc_state *pipe_config) |
3212 | { | 3214 | { |
@@ -3225,7 +3227,8 @@ static bool intel_ddi_compute_config(struct intel_encoder *encoder, | |||
3225 | } | 3227 | } |
3226 | 3228 | ||
3227 | static const struct drm_encoder_funcs intel_ddi_funcs = { | 3229 | static const struct drm_encoder_funcs intel_ddi_funcs = { |
3228 | .destroy = intel_ddi_destroy, | 3230 | .reset = intel_dp_encoder_reset, |
3231 | .destroy = intel_dp_encoder_destroy, | ||
3229 | }; | 3232 | }; |
3230 | 3233 | ||
3231 | static struct intel_connector * | 3234 | static struct intel_connector * |
@@ -3324,6 +3327,7 @@ void intel_ddi_init(struct drm_device *dev, enum port port) | |||
3324 | intel_encoder->post_disable = intel_ddi_post_disable; | 3327 | intel_encoder->post_disable = intel_ddi_post_disable; |
3325 | intel_encoder->get_hw_state = intel_ddi_get_hw_state; | 3328 | intel_encoder->get_hw_state = intel_ddi_get_hw_state; |
3326 | intel_encoder->get_config = intel_ddi_get_config; | 3329 | intel_encoder->get_config = intel_ddi_get_config; |
3330 | intel_encoder->suspend = intel_dp_encoder_suspend; | ||
3327 | 3331 | ||
3328 | intel_dig_port->port = port; | 3332 | intel_dig_port->port = port; |
3329 | intel_dig_port->saved_port_bits = I915_READ(DDI_BUF_CTL(port)) & | 3333 | intel_dig_port->saved_port_bits = I915_READ(DDI_BUF_CTL(port)) & |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 6e0d8283daa6..182f84937345 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -13351,6 +13351,9 @@ static int intel_atomic_prepare_commit(struct drm_device *dev, | |||
13351 | } | 13351 | } |
13352 | 13352 | ||
13353 | for_each_crtc_in_state(state, crtc, crtc_state, i) { | 13353 | for_each_crtc_in_state(state, crtc, crtc_state, i) { |
13354 | if (state->legacy_cursor_update) | ||
13355 | continue; | ||
13356 | |||
13354 | ret = intel_crtc_wait_for_pending_flips(crtc); | 13357 | ret = intel_crtc_wait_for_pending_flips(crtc); |
13355 | if (ret) | 13358 | if (ret) |
13356 | return ret; | 13359 | return ret; |
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index f069a82deb57..412a34c39522 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
@@ -4898,7 +4898,7 @@ void intel_dp_encoder_destroy(struct drm_encoder *encoder) | |||
4898 | kfree(intel_dig_port); | 4898 | kfree(intel_dig_port); |
4899 | } | 4899 | } |
4900 | 4900 | ||
4901 | static void intel_dp_encoder_suspend(struct intel_encoder *intel_encoder) | 4901 | void intel_dp_encoder_suspend(struct intel_encoder *intel_encoder) |
4902 | { | 4902 | { |
4903 | struct intel_dp *intel_dp = enc_to_intel_dp(&intel_encoder->base); | 4903 | struct intel_dp *intel_dp = enc_to_intel_dp(&intel_encoder->base); |
4904 | 4904 | ||
@@ -4940,7 +4940,7 @@ static void intel_edp_panel_vdd_sanitize(struct intel_dp *intel_dp) | |||
4940 | edp_panel_vdd_schedule_off(intel_dp); | 4940 | edp_panel_vdd_schedule_off(intel_dp); |
4941 | } | 4941 | } |
4942 | 4942 | ||
4943 | static void intel_dp_encoder_reset(struct drm_encoder *encoder) | 4943 | void intel_dp_encoder_reset(struct drm_encoder *encoder) |
4944 | { | 4944 | { |
4945 | struct intel_dp *intel_dp; | 4945 | struct intel_dp *intel_dp; |
4946 | 4946 | ||
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index 4c027d69fac9..7d3af3a72abe 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h | |||
@@ -1238,6 +1238,8 @@ void intel_dp_set_link_params(struct intel_dp *intel_dp, | |||
1238 | void intel_dp_start_link_train(struct intel_dp *intel_dp); | 1238 | void intel_dp_start_link_train(struct intel_dp *intel_dp); |
1239 | void intel_dp_stop_link_train(struct intel_dp *intel_dp); | 1239 | void intel_dp_stop_link_train(struct intel_dp *intel_dp); |
1240 | void intel_dp_sink_dpms(struct intel_dp *intel_dp, int mode); | 1240 | void intel_dp_sink_dpms(struct intel_dp *intel_dp, int mode); |
1241 | void intel_dp_encoder_reset(struct drm_encoder *encoder); | ||
1242 | void intel_dp_encoder_suspend(struct intel_encoder *intel_encoder); | ||
1241 | void intel_dp_encoder_destroy(struct drm_encoder *encoder); | 1243 | void intel_dp_encoder_destroy(struct drm_encoder *encoder); |
1242 | int intel_dp_sink_crc(struct intel_dp *intel_dp, u8 *crc); | 1244 | int intel_dp_sink_crc(struct intel_dp *intel_dp, u8 *crc); |
1243 | bool intel_dp_compute_config(struct intel_encoder *encoder, | 1245 | bool intel_dp_compute_config(struct intel_encoder *encoder, |
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c index a0d8daed2470..1ab6f687f640 100644 --- a/drivers/gpu/drm/i915/intel_hdmi.c +++ b/drivers/gpu/drm/i915/intel_hdmi.c | |||
@@ -1415,8 +1415,16 @@ intel_hdmi_detect(struct drm_connector *connector, bool force) | |||
1415 | hdmi_to_dig_port(intel_hdmi)); | 1415 | hdmi_to_dig_port(intel_hdmi)); |
1416 | } | 1416 | } |
1417 | 1417 | ||
1418 | if (!live_status) | 1418 | if (!live_status) { |
1419 | DRM_DEBUG_KMS("Live status not up!"); | 1419 | DRM_DEBUG_KMS("HDMI live status down\n"); |
1420 | /* | ||
1421 | * Live status register is not reliable on all intel platforms. | ||
1422 | * So consider live_status only for certain platforms, for | ||
1423 | * others, read EDID to determine presence of sink. | ||
1424 | */ | ||
1425 | if (INTEL_INFO(dev_priv)->gen < 7 || IS_IVYBRIDGE(dev_priv)) | ||
1426 | live_status = true; | ||
1427 | } | ||
1420 | 1428 | ||
1421 | intel_hdmi_unset_edid(connector); | 1429 | intel_hdmi_unset_edid(connector); |
1422 | 1430 | ||
diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c index edd05cdb0cd8..587cae4e73c9 100644 --- a/drivers/gpu/drm/radeon/atombios_encoders.c +++ b/drivers/gpu/drm/radeon/atombios_encoders.c | |||
@@ -310,6 +310,10 @@ static bool radeon_atom_mode_fixup(struct drm_encoder *encoder, | |||
310 | && (mode->crtc_vsync_start < (mode->crtc_vdisplay + 2))) | 310 | && (mode->crtc_vsync_start < (mode->crtc_vdisplay + 2))) |
311 | adjusted_mode->crtc_vsync_start = adjusted_mode->crtc_vdisplay + 2; | 311 | adjusted_mode->crtc_vsync_start = adjusted_mode->crtc_vdisplay + 2; |
312 | 312 | ||
313 | /* vertical FP must be at least 1 */ | ||
314 | if (mode->crtc_vsync_start == mode->crtc_vdisplay) | ||
315 | adjusted_mode->crtc_vsync_start++; | ||
316 | |||
313 | /* get the native mode for scaling */ | 317 | /* get the native mode for scaling */ |
314 | if (radeon_encoder->active_device & (ATOM_DEVICE_LCD_SUPPORT)) { | 318 | if (radeon_encoder->active_device & (ATOM_DEVICE_LCD_SUPPORT)) { |
315 | radeon_panel_mode_fixup(encoder, adjusted_mode); | 319 | radeon_panel_mode_fixup(encoder, adjusted_mode); |
diff --git a/drivers/gpu/ipu-v3/ipu-common.c b/drivers/gpu/ipu-v3/ipu-common.c index e00db3f510dd..abb98c77bad2 100644 --- a/drivers/gpu/ipu-v3/ipu-common.c +++ b/drivers/gpu/ipu-v3/ipu-common.c | |||
@@ -1068,7 +1068,6 @@ static int ipu_add_client_devices(struct ipu_soc *ipu, unsigned long ipu_base) | |||
1068 | goto err_register; | 1068 | goto err_register; |
1069 | } | 1069 | } |
1070 | 1070 | ||
1071 | pdev->dev.of_node = of_node; | ||
1072 | pdev->dev.parent = dev; | 1071 | pdev->dev.parent = dev; |
1073 | 1072 | ||
1074 | ret = platform_device_add_data(pdev, ®->pdata, | 1073 | ret = platform_device_add_data(pdev, ®->pdata, |
@@ -1079,6 +1078,12 @@ static int ipu_add_client_devices(struct ipu_soc *ipu, unsigned long ipu_base) | |||
1079 | platform_device_put(pdev); | 1078 | platform_device_put(pdev); |
1080 | goto err_register; | 1079 | goto err_register; |
1081 | } | 1080 | } |
1081 | |||
1082 | /* | ||
1083 | * Set of_node only after calling platform_device_add. Otherwise | ||
1084 | * the platform:imx-ipuv3-crtc modalias won't be used. | ||
1085 | */ | ||
1086 | pdev->dev.of_node = of_node; | ||
1082 | } | 1087 | } |
1083 | 1088 | ||
1084 | return 0; | 1089 | return 0; |
diff --git a/drivers/hv/ring_buffer.c b/drivers/hv/ring_buffer.c index 5613e2b5cff7..a40a73a7b71d 100644 --- a/drivers/hv/ring_buffer.c +++ b/drivers/hv/ring_buffer.c | |||
@@ -103,15 +103,29 @@ static bool hv_need_to_signal(u32 old_write, struct hv_ring_buffer_info *rbi) | |||
103 | * there is room for the producer to send the pending packet. | 103 | * there is room for the producer to send the pending packet. |
104 | */ | 104 | */ |
105 | 105 | ||
106 | static bool hv_need_to_signal_on_read(u32 prev_write_sz, | 106 | static bool hv_need_to_signal_on_read(struct hv_ring_buffer_info *rbi) |
107 | struct hv_ring_buffer_info *rbi) | ||
108 | { | 107 | { |
109 | u32 cur_write_sz; | 108 | u32 cur_write_sz; |
110 | u32 r_size; | 109 | u32 r_size; |
111 | u32 write_loc = rbi->ring_buffer->write_index; | 110 | u32 write_loc; |
112 | u32 read_loc = rbi->ring_buffer->read_index; | 111 | u32 read_loc = rbi->ring_buffer->read_index; |
113 | u32 pending_sz = rbi->ring_buffer->pending_send_sz; | 112 | u32 pending_sz; |
114 | 113 | ||
114 | /* | ||
115 | * Issue a full memory barrier before making the signaling decision. | ||
116 | * Here is the reason for having this barrier: | ||
117 | * If the reading of the pend_sz (in this function) | ||
118 | * were to be reordered and read before we commit the new read | ||
119 | * index (in the calling function) we could | ||
120 | * have a problem. If the host were to set the pending_sz after we | ||
121 | * have sampled pending_sz and go to sleep before we commit the | ||
122 | * read index, we could miss sending the interrupt. Issue a full | ||
123 | * memory barrier to address this. | ||
124 | */ | ||
125 | mb(); | ||
126 | |||
127 | pending_sz = rbi->ring_buffer->pending_send_sz; | ||
128 | write_loc = rbi->ring_buffer->write_index; | ||
115 | /* If the other end is not blocked on write don't bother. */ | 129 | /* If the other end is not blocked on write don't bother. */ |
116 | if (pending_sz == 0) | 130 | if (pending_sz == 0) |
117 | return false; | 131 | return false; |
@@ -120,7 +134,7 @@ static bool hv_need_to_signal_on_read(u32 prev_write_sz, | |||
120 | cur_write_sz = write_loc >= read_loc ? r_size - (write_loc - read_loc) : | 134 | cur_write_sz = write_loc >= read_loc ? r_size - (write_loc - read_loc) : |
121 | read_loc - write_loc; | 135 | read_loc - write_loc; |
122 | 136 | ||
123 | if ((prev_write_sz < pending_sz) && (cur_write_sz >= pending_sz)) | 137 | if (cur_write_sz >= pending_sz) |
124 | return true; | 138 | return true; |
125 | 139 | ||
126 | return false; | 140 | return false; |
@@ -455,7 +469,7 @@ int hv_ringbuffer_read(struct hv_ring_buffer_info *inring_info, | |||
455 | /* Update the read index */ | 469 | /* Update the read index */ |
456 | hv_set_next_read_location(inring_info, next_read_location); | 470 | hv_set_next_read_location(inring_info, next_read_location); |
457 | 471 | ||
458 | *signal = hv_need_to_signal_on_read(bytes_avail_towrite, inring_info); | 472 | *signal = hv_need_to_signal_on_read(inring_info); |
459 | 473 | ||
460 | return ret; | 474 | return ret; |
461 | } | 475 | } |
diff --git a/drivers/iio/adc/at91-sama5d2_adc.c b/drivers/iio/adc/at91-sama5d2_adc.c index dbee13ad33a3..2e154cb51685 100644 --- a/drivers/iio/adc/at91-sama5d2_adc.c +++ b/drivers/iio/adc/at91-sama5d2_adc.c | |||
@@ -451,6 +451,8 @@ static int at91_adc_probe(struct platform_device *pdev) | |||
451 | if (ret) | 451 | if (ret) |
452 | goto vref_disable; | 452 | goto vref_disable; |
453 | 453 | ||
454 | platform_set_drvdata(pdev, indio_dev); | ||
455 | |||
454 | ret = iio_device_register(indio_dev); | 456 | ret = iio_device_register(indio_dev); |
455 | if (ret < 0) | 457 | if (ret < 0) |
456 | goto per_clk_disable_unprepare; | 458 | goto per_clk_disable_unprepare; |
diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c index f581256d9d4c..5ee4e0dc093e 100644 --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c | |||
@@ -104,6 +104,19 @@ static int inv_mpu6050_deselect_bypass(struct i2c_adapter *adap, | |||
104 | return 0; | 104 | return 0; |
105 | } | 105 | } |
106 | 106 | ||
107 | static const char *inv_mpu_match_acpi_device(struct device *dev, int *chip_id) | ||
108 | { | ||
109 | const struct acpi_device_id *id; | ||
110 | |||
111 | id = acpi_match_device(dev->driver->acpi_match_table, dev); | ||
112 | if (!id) | ||
113 | return NULL; | ||
114 | |||
115 | *chip_id = (int)id->driver_data; | ||
116 | |||
117 | return dev_name(dev); | ||
118 | } | ||
119 | |||
107 | /** | 120 | /** |
108 | * inv_mpu_probe() - probe function. | 121 | * inv_mpu_probe() - probe function. |
109 | * @client: i2c client. | 122 | * @client: i2c client. |
@@ -115,14 +128,25 @@ static int inv_mpu_probe(struct i2c_client *client, | |||
115 | const struct i2c_device_id *id) | 128 | const struct i2c_device_id *id) |
116 | { | 129 | { |
117 | struct inv_mpu6050_state *st; | 130 | struct inv_mpu6050_state *st; |
118 | int result; | 131 | int result, chip_type; |
119 | const char *name = id ? id->name : NULL; | ||
120 | struct regmap *regmap; | 132 | struct regmap *regmap; |
133 | const char *name; | ||
121 | 134 | ||
122 | if (!i2c_check_functionality(client->adapter, | 135 | if (!i2c_check_functionality(client->adapter, |
123 | I2C_FUNC_SMBUS_I2C_BLOCK)) | 136 | I2C_FUNC_SMBUS_I2C_BLOCK)) |
124 | return -EOPNOTSUPP; | 137 | return -EOPNOTSUPP; |
125 | 138 | ||
139 | if (id) { | ||
140 | chip_type = (int)id->driver_data; | ||
141 | name = id->name; | ||
142 | } else if (ACPI_HANDLE(&client->dev)) { | ||
143 | name = inv_mpu_match_acpi_device(&client->dev, &chip_type); | ||
144 | if (!name) | ||
145 | return -ENODEV; | ||
146 | } else { | ||
147 | return -ENOSYS; | ||
148 | } | ||
149 | |||
126 | regmap = devm_regmap_init_i2c(client, &inv_mpu_regmap_config); | 150 | regmap = devm_regmap_init_i2c(client, &inv_mpu_regmap_config); |
127 | if (IS_ERR(regmap)) { | 151 | if (IS_ERR(regmap)) { |
128 | dev_err(&client->dev, "Failed to register i2c regmap %d\n", | 152 | dev_err(&client->dev, "Failed to register i2c regmap %d\n", |
@@ -131,7 +155,7 @@ static int inv_mpu_probe(struct i2c_client *client, | |||
131 | } | 155 | } |
132 | 156 | ||
133 | result = inv_mpu_core_probe(regmap, client->irq, name, | 157 | result = inv_mpu_core_probe(regmap, client->irq, name, |
134 | NULL, id->driver_data); | 158 | NULL, chip_type); |
135 | if (result < 0) | 159 | if (result < 0) |
136 | return result; | 160 | return result; |
137 | 161 | ||
diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_spi.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_spi.c index dea6c4361de0..7bcb8d839f05 100644 --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_spi.c +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_spi.c | |||
@@ -46,6 +46,7 @@ static int inv_mpu_probe(struct spi_device *spi) | |||
46 | struct regmap *regmap; | 46 | struct regmap *regmap; |
47 | const struct spi_device_id *id = spi_get_device_id(spi); | 47 | const struct spi_device_id *id = spi_get_device_id(spi); |
48 | const char *name = id ? id->name : NULL; | 48 | const char *name = id ? id->name : NULL; |
49 | const int chip_type = id ? id->driver_data : 0; | ||
49 | 50 | ||
50 | regmap = devm_regmap_init_spi(spi, &inv_mpu_regmap_config); | 51 | regmap = devm_regmap_init_spi(spi, &inv_mpu_regmap_config); |
51 | if (IS_ERR(regmap)) { | 52 | if (IS_ERR(regmap)) { |
@@ -55,7 +56,7 @@ static int inv_mpu_probe(struct spi_device *spi) | |||
55 | } | 56 | } |
56 | 57 | ||
57 | return inv_mpu_core_probe(regmap, spi->irq, name, | 58 | return inv_mpu_core_probe(regmap, spi->irq, name, |
58 | inv_mpu_i2c_disable, id->driver_data); | 59 | inv_mpu_i2c_disable, chip_type); |
59 | } | 60 | } |
60 | 61 | ||
61 | static int inv_mpu_remove(struct spi_device *spi) | 62 | static int inv_mpu_remove(struct spi_device *spi) |
diff --git a/drivers/iio/magnetometer/ak8975.c b/drivers/iio/magnetometer/ak8975.c index 9c5c9ef3f1da..0e931a9a1669 100644 --- a/drivers/iio/magnetometer/ak8975.c +++ b/drivers/iio/magnetometer/ak8975.c | |||
@@ -462,6 +462,8 @@ static int ak8975_setup_irq(struct ak8975_data *data) | |||
462 | int rc; | 462 | int rc; |
463 | int irq; | 463 | int irq; |
464 | 464 | ||
465 | init_waitqueue_head(&data->data_ready_queue); | ||
466 | clear_bit(0, &data->flags); | ||
465 | if (client->irq) | 467 | if (client->irq) |
466 | irq = client->irq; | 468 | irq = client->irq; |
467 | else | 469 | else |
@@ -477,8 +479,6 @@ static int ak8975_setup_irq(struct ak8975_data *data) | |||
477 | return rc; | 479 | return rc; |
478 | } | 480 | } |
479 | 481 | ||
480 | init_waitqueue_head(&data->data_ready_queue); | ||
481 | clear_bit(0, &data->flags); | ||
482 | data->eoc_irq = irq; | 482 | data->eoc_irq = irq; |
483 | 483 | ||
484 | return rc; | 484 | return rc; |
@@ -732,7 +732,7 @@ static int ak8975_probe(struct i2c_client *client, | |||
732 | int eoc_gpio; | 732 | int eoc_gpio; |
733 | int err; | 733 | int err; |
734 | const char *name = NULL; | 734 | const char *name = NULL; |
735 | enum asahi_compass_chipset chipset; | 735 | enum asahi_compass_chipset chipset = AK_MAX_TYPE; |
736 | 736 | ||
737 | /* Grab and set up the supplied GPIO. */ | 737 | /* Grab and set up the supplied GPIO. */ |
738 | if (client->dev.platform_data) | 738 | if (client->dev.platform_data) |
diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.c b/drivers/infiniband/ulp/iser/iscsi_iser.c index 80b6bedc172f..64b3d11dcf1e 100644 --- a/drivers/infiniband/ulp/iser/iscsi_iser.c +++ b/drivers/infiniband/ulp/iser/iscsi_iser.c | |||
@@ -612,6 +612,7 @@ iscsi_iser_session_create(struct iscsi_endpoint *ep, | |||
612 | struct Scsi_Host *shost; | 612 | struct Scsi_Host *shost; |
613 | struct iser_conn *iser_conn = NULL; | 613 | struct iser_conn *iser_conn = NULL; |
614 | struct ib_conn *ib_conn; | 614 | struct ib_conn *ib_conn; |
615 | u32 max_fr_sectors; | ||
615 | u16 max_cmds; | 616 | u16 max_cmds; |
616 | 617 | ||
617 | shost = iscsi_host_alloc(&iscsi_iser_sht, 0, 0); | 618 | shost = iscsi_host_alloc(&iscsi_iser_sht, 0, 0); |
@@ -632,7 +633,6 @@ iscsi_iser_session_create(struct iscsi_endpoint *ep, | |||
632 | iser_conn = ep->dd_data; | 633 | iser_conn = ep->dd_data; |
633 | max_cmds = iser_conn->max_cmds; | 634 | max_cmds = iser_conn->max_cmds; |
634 | shost->sg_tablesize = iser_conn->scsi_sg_tablesize; | 635 | shost->sg_tablesize = iser_conn->scsi_sg_tablesize; |
635 | shost->max_sectors = iser_conn->scsi_max_sectors; | ||
636 | 636 | ||
637 | mutex_lock(&iser_conn->state_mutex); | 637 | mutex_lock(&iser_conn->state_mutex); |
638 | if (iser_conn->state != ISER_CONN_UP) { | 638 | if (iser_conn->state != ISER_CONN_UP) { |
@@ -657,8 +657,6 @@ iscsi_iser_session_create(struct iscsi_endpoint *ep, | |||
657 | */ | 657 | */ |
658 | shost->sg_tablesize = min_t(unsigned short, shost->sg_tablesize, | 658 | shost->sg_tablesize = min_t(unsigned short, shost->sg_tablesize, |
659 | ib_conn->device->ib_device->attrs.max_fast_reg_page_list_len); | 659 | ib_conn->device->ib_device->attrs.max_fast_reg_page_list_len); |
660 | shost->max_sectors = min_t(unsigned int, | ||
661 | 1024, (shost->sg_tablesize * PAGE_SIZE) >> 9); | ||
662 | 660 | ||
663 | if (iscsi_host_add(shost, | 661 | if (iscsi_host_add(shost, |
664 | ib_conn->device->ib_device->dma_device)) { | 662 | ib_conn->device->ib_device->dma_device)) { |
@@ -672,6 +670,15 @@ iscsi_iser_session_create(struct iscsi_endpoint *ep, | |||
672 | goto free_host; | 670 | goto free_host; |
673 | } | 671 | } |
674 | 672 | ||
673 | /* | ||
674 | * FRs or FMRs can only map up to a (device) page per entry, but if the | ||
675 | * first entry is misaligned we'll end up using using two entries | ||
676 | * (head and tail) for a single page worth data, so we have to drop | ||
677 | * one segment from the calculation. | ||
678 | */ | ||
679 | max_fr_sectors = ((shost->sg_tablesize - 1) * PAGE_SIZE) >> 9; | ||
680 | shost->max_sectors = min(iser_max_sectors, max_fr_sectors); | ||
681 | |||
675 | if (cmds_max > max_cmds) { | 682 | if (cmds_max > max_cmds) { |
676 | iser_info("cmds_max changed from %u to %u\n", | 683 | iser_info("cmds_max changed from %u to %u\n", |
677 | cmds_max, max_cmds); | 684 | cmds_max, max_cmds); |
@@ -989,7 +996,6 @@ static struct scsi_host_template iscsi_iser_sht = { | |||
989 | .queuecommand = iscsi_queuecommand, | 996 | .queuecommand = iscsi_queuecommand, |
990 | .change_queue_depth = scsi_change_queue_depth, | 997 | .change_queue_depth = scsi_change_queue_depth, |
991 | .sg_tablesize = ISCSI_ISER_DEF_SG_TABLESIZE, | 998 | .sg_tablesize = ISCSI_ISER_DEF_SG_TABLESIZE, |
992 | .max_sectors = ISER_DEF_MAX_SECTORS, | ||
993 | .cmd_per_lun = ISER_DEF_CMD_PER_LUN, | 999 | .cmd_per_lun = ISER_DEF_CMD_PER_LUN, |
994 | .eh_abort_handler = iscsi_eh_abort, | 1000 | .eh_abort_handler = iscsi_eh_abort, |
995 | .eh_device_reset_handler= iscsi_eh_device_reset, | 1001 | .eh_device_reset_handler= iscsi_eh_device_reset, |
diff --git a/drivers/input/misc/twl6040-vibra.c b/drivers/input/misc/twl6040-vibra.c index 53e33fab3f7a..df3581f60628 100644 --- a/drivers/input/misc/twl6040-vibra.c +++ b/drivers/input/misc/twl6040-vibra.c | |||
@@ -181,6 +181,14 @@ static void vibra_play_work(struct work_struct *work) | |||
181 | { | 181 | { |
182 | struct vibra_info *info = container_of(work, | 182 | struct vibra_info *info = container_of(work, |
183 | struct vibra_info, play_work); | 183 | struct vibra_info, play_work); |
184 | int ret; | ||
185 | |||
186 | /* Do not allow effect, while the routing is set to use audio */ | ||
187 | ret = twl6040_get_vibralr_status(info->twl6040); | ||
188 | if (ret & TWL6040_VIBSEL) { | ||
189 | dev_info(info->dev, "Vibra is configured for audio\n"); | ||
190 | return; | ||
191 | } | ||
184 | 192 | ||
185 | mutex_lock(&info->mutex); | 193 | mutex_lock(&info->mutex); |
186 | 194 | ||
@@ -199,14 +207,6 @@ static int vibra_play(struct input_dev *input, void *data, | |||
199 | struct ff_effect *effect) | 207 | struct ff_effect *effect) |
200 | { | 208 | { |
201 | struct vibra_info *info = input_get_drvdata(input); | 209 | struct vibra_info *info = input_get_drvdata(input); |
202 | int ret; | ||
203 | |||
204 | /* Do not allow effect, while the routing is set to use audio */ | ||
205 | ret = twl6040_get_vibralr_status(info->twl6040); | ||
206 | if (ret & TWL6040_VIBSEL) { | ||
207 | dev_info(&input->dev, "Vibra is configured for audio\n"); | ||
208 | return -EBUSY; | ||
209 | } | ||
210 | 210 | ||
211 | info->weak_speed = effect->u.rumble.weak_magnitude; | 211 | info->weak_speed = effect->u.rumble.weak_magnitude; |
212 | info->strong_speed = effect->u.rumble.strong_magnitude; | 212 | info->strong_speed = effect->u.rumble.strong_magnitude; |
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c index 2160512e861a..5af7907d0af4 100644 --- a/drivers/input/touchscreen/atmel_mxt_ts.c +++ b/drivers/input/touchscreen/atmel_mxt_ts.c | |||
@@ -1093,6 +1093,19 @@ static int mxt_t6_command(struct mxt_data *data, u16 cmd_offset, | |||
1093 | return 0; | 1093 | return 0; |
1094 | } | 1094 | } |
1095 | 1095 | ||
1096 | static int mxt_acquire_irq(struct mxt_data *data) | ||
1097 | { | ||
1098 | int error; | ||
1099 | |||
1100 | enable_irq(data->irq); | ||
1101 | |||
1102 | error = mxt_process_messages_until_invalid(data); | ||
1103 | if (error) | ||
1104 | return error; | ||
1105 | |||
1106 | return 0; | ||
1107 | } | ||
1108 | |||
1096 | static int mxt_soft_reset(struct mxt_data *data) | 1109 | static int mxt_soft_reset(struct mxt_data *data) |
1097 | { | 1110 | { |
1098 | struct device *dev = &data->client->dev; | 1111 | struct device *dev = &data->client->dev; |
@@ -1111,7 +1124,7 @@ static int mxt_soft_reset(struct mxt_data *data) | |||
1111 | /* Ignore CHG line for 100ms after reset */ | 1124 | /* Ignore CHG line for 100ms after reset */ |
1112 | msleep(100); | 1125 | msleep(100); |
1113 | 1126 | ||
1114 | enable_irq(data->irq); | 1127 | mxt_acquire_irq(data); |
1115 | 1128 | ||
1116 | ret = mxt_wait_for_completion(data, &data->reset_completion, | 1129 | ret = mxt_wait_for_completion(data, &data->reset_completion, |
1117 | MXT_RESET_TIMEOUT); | 1130 | MXT_RESET_TIMEOUT); |
@@ -1466,19 +1479,6 @@ release_mem: | |||
1466 | return ret; | 1479 | return ret; |
1467 | } | 1480 | } |
1468 | 1481 | ||
1469 | static int mxt_acquire_irq(struct mxt_data *data) | ||
1470 | { | ||
1471 | int error; | ||
1472 | |||
1473 | enable_irq(data->irq); | ||
1474 | |||
1475 | error = mxt_process_messages_until_invalid(data); | ||
1476 | if (error) | ||
1477 | return error; | ||
1478 | |||
1479 | return 0; | ||
1480 | } | ||
1481 | |||
1482 | static int mxt_get_info(struct mxt_data *data) | 1482 | static int mxt_get_info(struct mxt_data *data) |
1483 | { | 1483 | { |
1484 | struct i2c_client *client = data->client; | 1484 | struct i2c_client *client = data->client; |
diff --git a/drivers/input/touchscreen/zforce_ts.c b/drivers/input/touchscreen/zforce_ts.c index 9bbadaaf6bc3..7b3845aa5983 100644 --- a/drivers/input/touchscreen/zforce_ts.c +++ b/drivers/input/touchscreen/zforce_ts.c | |||
@@ -370,8 +370,8 @@ static int zforce_touch_event(struct zforce_ts *ts, u8 *payload) | |||
370 | point.coord_x = point.coord_y = 0; | 370 | point.coord_x = point.coord_y = 0; |
371 | } | 371 | } |
372 | 372 | ||
373 | point.state = payload[9 * i + 5] & 0x03; | 373 | point.state = payload[9 * i + 5] & 0x0f; |
374 | point.id = (payload[9 * i + 5] & 0xfc) >> 2; | 374 | point.id = (payload[9 * i + 5] & 0xf0) >> 4; |
375 | 375 | ||
376 | /* determine touch major, minor and orientation */ | 376 | /* determine touch major, minor and orientation */ |
377 | point.area_major = max(payload[9 * i + 6], | 377 | point.area_major = max(payload[9 * i + 6], |
diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c index 6e43c95629ea..3cfd7af8c5ca 100644 --- a/drivers/media/media-device.c +++ b/drivers/media/media-device.c | |||
@@ -846,11 +846,11 @@ struct media_device *media_device_find_devres(struct device *dev) | |||
846 | } | 846 | } |
847 | EXPORT_SYMBOL_GPL(media_device_find_devres); | 847 | EXPORT_SYMBOL_GPL(media_device_find_devres); |
848 | 848 | ||
849 | #if IS_ENABLED(CONFIG_PCI) | ||
849 | void media_device_pci_init(struct media_device *mdev, | 850 | void media_device_pci_init(struct media_device *mdev, |
850 | struct pci_dev *pci_dev, | 851 | struct pci_dev *pci_dev, |
851 | const char *name) | 852 | const char *name) |
852 | { | 853 | { |
853 | #ifdef CONFIG_PCI | ||
854 | mdev->dev = &pci_dev->dev; | 854 | mdev->dev = &pci_dev->dev; |
855 | 855 | ||
856 | if (name) | 856 | if (name) |
@@ -866,16 +866,16 @@ void media_device_pci_init(struct media_device *mdev, | |||
866 | mdev->driver_version = LINUX_VERSION_CODE; | 866 | mdev->driver_version = LINUX_VERSION_CODE; |
867 | 867 | ||
868 | media_device_init(mdev); | 868 | media_device_init(mdev); |
869 | #endif | ||
870 | } | 869 | } |
871 | EXPORT_SYMBOL_GPL(media_device_pci_init); | 870 | EXPORT_SYMBOL_GPL(media_device_pci_init); |
871 | #endif | ||
872 | 872 | ||
873 | #if IS_ENABLED(CONFIG_USB) | ||
873 | void __media_device_usb_init(struct media_device *mdev, | 874 | void __media_device_usb_init(struct media_device *mdev, |
874 | struct usb_device *udev, | 875 | struct usb_device *udev, |
875 | const char *board_name, | 876 | const char *board_name, |
876 | const char *driver_name) | 877 | const char *driver_name) |
877 | { | 878 | { |
878 | #ifdef CONFIG_USB | ||
879 | mdev->dev = &udev->dev; | 879 | mdev->dev = &udev->dev; |
880 | 880 | ||
881 | if (driver_name) | 881 | if (driver_name) |
@@ -895,9 +895,9 @@ void __media_device_usb_init(struct media_device *mdev, | |||
895 | mdev->driver_version = LINUX_VERSION_CODE; | 895 | mdev->driver_version = LINUX_VERSION_CODE; |
896 | 896 | ||
897 | media_device_init(mdev); | 897 | media_device_init(mdev); |
898 | #endif | ||
899 | } | 898 | } |
900 | EXPORT_SYMBOL_GPL(__media_device_usb_init); | 899 | EXPORT_SYMBOL_GPL(__media_device_usb_init); |
900 | #endif | ||
901 | 901 | ||
902 | 902 | ||
903 | #endif /* CONFIG_MEDIA_CONTROLLER */ | 903 | #endif /* CONFIG_MEDIA_CONTROLLER */ |
diff --git a/drivers/media/platform/exynos4-is/media-dev.c b/drivers/media/platform/exynos4-is/media-dev.c index feb521f28e14..4f494acd8150 100644 --- a/drivers/media/platform/exynos4-is/media-dev.c +++ b/drivers/media/platform/exynos4-is/media-dev.c | |||
@@ -1446,22 +1446,13 @@ static int fimc_md_probe(struct platform_device *pdev) | |||
1446 | 1446 | ||
1447 | platform_set_drvdata(pdev, fmd); | 1447 | platform_set_drvdata(pdev, fmd); |
1448 | 1448 | ||
1449 | /* Protect the media graph while we're registering entities */ | ||
1450 | mutex_lock(&fmd->media_dev.graph_mutex); | ||
1451 | |||
1452 | ret = fimc_md_register_platform_entities(fmd, dev->of_node); | 1449 | ret = fimc_md_register_platform_entities(fmd, dev->of_node); |
1453 | if (ret) { | 1450 | if (ret) |
1454 | mutex_unlock(&fmd->media_dev.graph_mutex); | ||
1455 | goto err_clk; | 1451 | goto err_clk; |
1456 | } | ||
1457 | 1452 | ||
1458 | ret = fimc_md_register_sensor_entities(fmd); | 1453 | ret = fimc_md_register_sensor_entities(fmd); |
1459 | if (ret) { | 1454 | if (ret) |
1460 | mutex_unlock(&fmd->media_dev.graph_mutex); | ||
1461 | goto err_m_ent; | 1455 | goto err_m_ent; |
1462 | } | ||
1463 | |||
1464 | mutex_unlock(&fmd->media_dev.graph_mutex); | ||
1465 | 1456 | ||
1466 | ret = device_create_file(&pdev->dev, &dev_attr_subdev_conf_mode); | 1457 | ret = device_create_file(&pdev->dev, &dev_attr_subdev_conf_mode); |
1467 | if (ret) | 1458 | if (ret) |
diff --git a/drivers/media/platform/s3c-camif/camif-core.c b/drivers/media/platform/s3c-camif/camif-core.c index 0b44b9accf50..af237af204e2 100644 --- a/drivers/media/platform/s3c-camif/camif-core.c +++ b/drivers/media/platform/s3c-camif/camif-core.c | |||
@@ -493,21 +493,17 @@ static int s3c_camif_probe(struct platform_device *pdev) | |||
493 | if (ret < 0) | 493 | if (ret < 0) |
494 | goto err_sens; | 494 | goto err_sens; |
495 | 495 | ||
496 | mutex_lock(&camif->media_dev.graph_mutex); | ||
497 | |||
498 | ret = v4l2_device_register_subdev_nodes(&camif->v4l2_dev); | 496 | ret = v4l2_device_register_subdev_nodes(&camif->v4l2_dev); |
499 | if (ret < 0) | 497 | if (ret < 0) |
500 | goto err_unlock; | 498 | goto err_sens; |
501 | 499 | ||
502 | ret = camif_register_video_nodes(camif); | 500 | ret = camif_register_video_nodes(camif); |
503 | if (ret < 0) | 501 | if (ret < 0) |
504 | goto err_unlock; | 502 | goto err_sens; |
505 | 503 | ||
506 | ret = camif_create_media_links(camif); | 504 | ret = camif_create_media_links(camif); |
507 | if (ret < 0) | 505 | if (ret < 0) |
508 | goto err_unlock; | 506 | goto err_sens; |
509 | |||
510 | mutex_unlock(&camif->media_dev.graph_mutex); | ||
511 | 507 | ||
512 | ret = media_device_register(&camif->media_dev); | 508 | ret = media_device_register(&camif->media_dev); |
513 | if (ret < 0) | 509 | if (ret < 0) |
@@ -516,8 +512,6 @@ static int s3c_camif_probe(struct platform_device *pdev) | |||
516 | pm_runtime_put(dev); | 512 | pm_runtime_put(dev); |
517 | return 0; | 513 | return 0; |
518 | 514 | ||
519 | err_unlock: | ||
520 | mutex_unlock(&camif->media_dev.graph_mutex); | ||
521 | err_sens: | 515 | err_sens: |
522 | v4l2_device_unregister(&camif->v4l2_dev); | 516 | v4l2_device_unregister(&camif->v4l2_dev); |
523 | media_device_unregister(&camif->media_dev); | 517 | media_device_unregister(&camif->media_dev); |
diff --git a/drivers/misc/mic/vop/vop_vringh.c b/drivers/misc/mic/vop/vop_vringh.c index e94c7fb6712a..88e45234d527 100644 --- a/drivers/misc/mic/vop/vop_vringh.c +++ b/drivers/misc/mic/vop/vop_vringh.c | |||
@@ -945,6 +945,11 @@ static long vop_ioctl(struct file *f, unsigned int cmd, unsigned long arg) | |||
945 | ret = -EFAULT; | 945 | ret = -EFAULT; |
946 | goto free_ret; | 946 | goto free_ret; |
947 | } | 947 | } |
948 | /* Ensure desc has not changed between the two reads */ | ||
949 | if (memcmp(&dd, dd_config, sizeof(dd))) { | ||
950 | ret = -EINVAL; | ||
951 | goto free_ret; | ||
952 | } | ||
948 | mutex_lock(&vdev->vdev_mutex); | 953 | mutex_lock(&vdev->vdev_mutex); |
949 | mutex_lock(&vi->vop_mutex); | 954 | mutex_lock(&vi->vop_mutex); |
950 | ret = vop_virtio_add_device(vdev, dd_config); | 955 | ret = vop_virtio_add_device(vdev, dd_config); |
diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c index 409152b21191..aa87049c353d 100644 --- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c | |||
@@ -1608,21 +1608,22 @@ static int xgene_enet_probe(struct platform_device *pdev) | |||
1608 | 1608 | ||
1609 | ret = xgene_enet_init_hw(pdata); | 1609 | ret = xgene_enet_init_hw(pdata); |
1610 | if (ret) | 1610 | if (ret) |
1611 | goto err; | 1611 | goto err_netdev; |
1612 | 1612 | ||
1613 | mac_ops = pdata->mac_ops; | 1613 | mac_ops = pdata->mac_ops; |
1614 | if (pdata->phy_mode == PHY_INTERFACE_MODE_RGMII) { | 1614 | if (pdata->phy_mode == PHY_INTERFACE_MODE_RGMII) { |
1615 | ret = xgene_enet_mdio_config(pdata); | 1615 | ret = xgene_enet_mdio_config(pdata); |
1616 | if (ret) | 1616 | if (ret) |
1617 | goto err; | 1617 | goto err_netdev; |
1618 | } else { | 1618 | } else { |
1619 | INIT_DELAYED_WORK(&pdata->link_work, mac_ops->link_state); | 1619 | INIT_DELAYED_WORK(&pdata->link_work, mac_ops->link_state); |
1620 | } | 1620 | } |
1621 | 1621 | ||
1622 | xgene_enet_napi_add(pdata); | 1622 | xgene_enet_napi_add(pdata); |
1623 | return 0; | 1623 | return 0; |
1624 | err: | 1624 | err_netdev: |
1625 | unregister_netdev(ndev); | 1625 | unregister_netdev(ndev); |
1626 | err: | ||
1626 | free_netdev(ndev); | 1627 | free_netdev(ndev); |
1627 | return ret; | 1628 | return ret; |
1628 | } | 1629 | } |
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index fd85b6dd4a6e..6a5a71710fa9 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c | |||
@@ -1439,6 +1439,10 @@ static int bnxt_poll_work(struct bnxt *bp, struct bnxt_napi *bnapi, int budget) | |||
1439 | if (!TX_CMP_VALID(txcmp, raw_cons)) | 1439 | if (!TX_CMP_VALID(txcmp, raw_cons)) |
1440 | break; | 1440 | break; |
1441 | 1441 | ||
1442 | /* The valid test of the entry must be done first before | ||
1443 | * reading any further. | ||
1444 | */ | ||
1445 | rmb(); | ||
1442 | if (TX_CMP_TYPE(txcmp) == CMP_TYPE_TX_L2_CMP) { | 1446 | if (TX_CMP_TYPE(txcmp) == CMP_TYPE_TX_L2_CMP) { |
1443 | tx_pkts++; | 1447 | tx_pkts++; |
1444 | /* return full budget so NAPI will complete. */ | 1448 | /* return full budget so NAPI will complete. */ |
@@ -4096,9 +4100,11 @@ static int bnxt_alloc_rfs_vnics(struct bnxt *bp) | |||
4096 | } | 4100 | } |
4097 | 4101 | ||
4098 | static int bnxt_cfg_rx_mode(struct bnxt *); | 4102 | static int bnxt_cfg_rx_mode(struct bnxt *); |
4103 | static bool bnxt_mc_list_updated(struct bnxt *, u32 *); | ||
4099 | 4104 | ||
4100 | static int bnxt_init_chip(struct bnxt *bp, bool irq_re_init) | 4105 | static int bnxt_init_chip(struct bnxt *bp, bool irq_re_init) |
4101 | { | 4106 | { |
4107 | struct bnxt_vnic_info *vnic = &bp->vnic_info[0]; | ||
4102 | int rc = 0; | 4108 | int rc = 0; |
4103 | 4109 | ||
4104 | if (irq_re_init) { | 4110 | if (irq_re_init) { |
@@ -4154,13 +4160,22 @@ static int bnxt_init_chip(struct bnxt *bp, bool irq_re_init) | |||
4154 | netdev_err(bp->dev, "HWRM vnic filter failure rc: %x\n", rc); | 4160 | netdev_err(bp->dev, "HWRM vnic filter failure rc: %x\n", rc); |
4155 | goto err_out; | 4161 | goto err_out; |
4156 | } | 4162 | } |
4157 | bp->vnic_info[0].uc_filter_count = 1; | 4163 | vnic->uc_filter_count = 1; |
4158 | 4164 | ||
4159 | bp->vnic_info[0].rx_mask = CFA_L2_SET_RX_MASK_REQ_MASK_BCAST; | 4165 | vnic->rx_mask = CFA_L2_SET_RX_MASK_REQ_MASK_BCAST; |
4160 | 4166 | ||
4161 | if ((bp->dev->flags & IFF_PROMISC) && BNXT_PF(bp)) | 4167 | if ((bp->dev->flags & IFF_PROMISC) && BNXT_PF(bp)) |
4162 | bp->vnic_info[0].rx_mask |= | 4168 | vnic->rx_mask |= CFA_L2_SET_RX_MASK_REQ_MASK_PROMISCUOUS; |
4163 | CFA_L2_SET_RX_MASK_REQ_MASK_PROMISCUOUS; | 4169 | |
4170 | if (bp->dev->flags & IFF_ALLMULTI) { | ||
4171 | vnic->rx_mask |= CFA_L2_SET_RX_MASK_REQ_MASK_ALL_MCAST; | ||
4172 | vnic->mc_list_count = 0; | ||
4173 | } else { | ||
4174 | u32 mask = 0; | ||
4175 | |||
4176 | bnxt_mc_list_updated(bp, &mask); | ||
4177 | vnic->rx_mask |= mask; | ||
4178 | } | ||
4164 | 4179 | ||
4165 | rc = bnxt_cfg_rx_mode(bp); | 4180 | rc = bnxt_cfg_rx_mode(bp); |
4166 | if (rc) | 4181 | if (rc) |
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index bfa10c3da35f..c9f77c324535 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c | |||
@@ -1521,9 +1521,15 @@ fec_enet_rx(struct net_device *ndev, int budget) | |||
1521 | struct fec_enet_private *fep = netdev_priv(ndev); | 1521 | struct fec_enet_private *fep = netdev_priv(ndev); |
1522 | 1522 | ||
1523 | for_each_set_bit(queue_id, &fep->work_rx, FEC_ENET_MAX_RX_QS) { | 1523 | for_each_set_bit(queue_id, &fep->work_rx, FEC_ENET_MAX_RX_QS) { |
1524 | clear_bit(queue_id, &fep->work_rx); | 1524 | int ret; |
1525 | pkt_received += fec_enet_rx_queue(ndev, | 1525 | |
1526 | ret = fec_enet_rx_queue(ndev, | ||
1526 | budget - pkt_received, queue_id); | 1527 | budget - pkt_received, queue_id); |
1528 | |||
1529 | if (ret < budget - pkt_received) | ||
1530 | clear_bit(queue_id, &fep->work_rx); | ||
1531 | |||
1532 | pkt_received += ret; | ||
1527 | } | 1533 | } |
1528 | return pkt_received; | 1534 | return pkt_received; |
1529 | } | 1535 | } |
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c index 8ef6875b6cf9..c1b3a9c8cf3b 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c | |||
@@ -698,7 +698,7 @@ static int get_fixed_ipv6_csum(__wsum hw_checksum, struct sk_buff *skb, | |||
698 | 698 | ||
699 | if (ipv6h->nexthdr == IPPROTO_FRAGMENT || ipv6h->nexthdr == IPPROTO_HOPOPTS) | 699 | if (ipv6h->nexthdr == IPPROTO_FRAGMENT || ipv6h->nexthdr == IPPROTO_HOPOPTS) |
700 | return -1; | 700 | return -1; |
701 | hw_checksum = csum_add(hw_checksum, (__force __wsum)(ipv6h->nexthdr << 8)); | 701 | hw_checksum = csum_add(hw_checksum, (__force __wsum)htons(ipv6h->nexthdr)); |
702 | 702 | ||
703 | csum_pseudo_hdr = csum_partial(&ipv6h->saddr, | 703 | csum_pseudo_hdr = csum_partial(&ipv6h->saddr, |
704 | sizeof(ipv6h->saddr) + sizeof(ipv6h->daddr), 0); | 704 | sizeof(ipv6h->saddr) + sizeof(ipv6h->daddr), 0); |
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/Kconfig b/drivers/net/ethernet/mellanox/mlx5/core/Kconfig index 559d11a443bc..f5c3b9465d8d 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/Kconfig +++ b/drivers/net/ethernet/mellanox/mlx5/core/Kconfig | |||
@@ -14,7 +14,6 @@ config MLX5_CORE_EN | |||
14 | bool "Mellanox Technologies ConnectX-4 Ethernet support" | 14 | bool "Mellanox Technologies ConnectX-4 Ethernet support" |
15 | depends on NETDEVICES && ETHERNET && PCI && MLX5_CORE | 15 | depends on NETDEVICES && ETHERNET && PCI && MLX5_CORE |
16 | select PTP_1588_CLOCK | 16 | select PTP_1588_CLOCK |
17 | select VXLAN if MLX5_CORE=y | ||
18 | default n | 17 | default n |
19 | ---help--- | 18 | ---help--- |
20 | Ethernet support in Mellanox Technologies ConnectX-4 NIC. | 19 | Ethernet support in Mellanox Technologies ConnectX-4 NIC. |
@@ -32,3 +31,10 @@ config MLX5_CORE_EN_DCB | |||
32 | This flag is depended on the kernel's DCB support. | 31 | This flag is depended on the kernel's DCB support. |
33 | 32 | ||
34 | If unsure, set to Y | 33 | If unsure, set to Y |
34 | |||
35 | config MLX5_CORE_EN_VXLAN | ||
36 | bool "VXLAN offloads Support" | ||
37 | default y | ||
38 | depends on MLX5_CORE_EN && VXLAN && !(MLX5_CORE=y && VXLAN=m) | ||
39 | ---help--- | ||
40 | Say Y here if you want to use VXLAN offloads in the driver. | ||
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/Makefile b/drivers/net/ethernet/mellanox/mlx5/core/Makefile index b531d4f3c00b..e4a5b37b90ab 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/Makefile +++ b/drivers/net/ethernet/mellanox/mlx5/core/Makefile | |||
@@ -6,6 +6,7 @@ mlx5_core-y := main.o cmd.o debugfs.o fw.o eq.o uar.o pagealloc.o \ | |||
6 | 6 | ||
7 | mlx5_core-$(CONFIG_MLX5_CORE_EN) += wq.o eswitch.o \ | 7 | mlx5_core-$(CONFIG_MLX5_CORE_EN) += wq.o eswitch.o \ |
8 | en_main.o en_fs.o en_ethtool.o en_tx.o en_rx.o \ | 8 | en_main.o en_fs.o en_ethtool.o en_tx.o en_rx.o \ |
9 | en_txrx.o en_clock.o vxlan.o en_tc.o en_arfs.o | 9 | en_txrx.o en_clock.o en_tc.o en_arfs.o |
10 | 10 | ||
11 | mlx5_core-$(CONFIG_MLX5_CORE_EN_VXLAN) += vxlan.o | ||
11 | mlx5_core-$(CONFIG_MLX5_CORE_EN_DCB) += en_dcbnl.o | 12 | mlx5_core-$(CONFIG_MLX5_CORE_EN_DCB) += en_dcbnl.o |
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h index bfa5daaaf5aa..7aea32e085b3 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h | |||
@@ -522,7 +522,12 @@ struct mlx5e_priv { | |||
522 | struct mlx5e_direct_tir direct_tir[MLX5E_MAX_NUM_CHANNELS]; | 522 | struct mlx5e_direct_tir direct_tir[MLX5E_MAX_NUM_CHANNELS]; |
523 | 523 | ||
524 | struct mlx5e_flow_steering fs; | 524 | struct mlx5e_flow_steering fs; |
525 | struct mlx5e_flow_tables fts; | ||
526 | struct mlx5e_eth_addr_db eth_addr; | ||
527 | struct mlx5e_vlan_db vlan; | ||
528 | #ifdef CONFIG_MLX5_CORE_EN_VXLAN | ||
525 | struct mlx5e_vxlan_db vxlan; | 529 | struct mlx5e_vxlan_db vxlan; |
530 | #endif | ||
526 | 531 | ||
527 | struct mlx5e_params params; | 532 | struct mlx5e_params params; |
528 | struct workqueue_struct *wq; | 533 | struct workqueue_struct *wq; |
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c index 1c70e518b5c5..b60a1bc6f457 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c | |||
@@ -2509,6 +2509,7 @@ static int mlx5e_get_vf_stats(struct net_device *dev, | |||
2509 | vf_stats); | 2509 | vf_stats); |
2510 | } | 2510 | } |
2511 | 2511 | ||
2512 | #if IS_ENABLED(CONFIG_MLX5_CORE_EN_VXLAN) | ||
2512 | static void mlx5e_add_vxlan_port(struct net_device *netdev, | 2513 | static void mlx5e_add_vxlan_port(struct net_device *netdev, |
2513 | sa_family_t sa_family, __be16 port) | 2514 | sa_family_t sa_family, __be16 port) |
2514 | { | 2515 | { |
@@ -2580,6 +2581,7 @@ static netdev_features_t mlx5e_features_check(struct sk_buff *skb, | |||
2580 | 2581 | ||
2581 | return features; | 2582 | return features; |
2582 | } | 2583 | } |
2584 | #endif | ||
2583 | 2585 | ||
2584 | static const struct net_device_ops mlx5e_netdev_ops_basic = { | 2586 | static const struct net_device_ops mlx5e_netdev_ops_basic = { |
2585 | .ndo_open = mlx5e_open, | 2587 | .ndo_open = mlx5e_open, |
@@ -2614,6 +2616,7 @@ static const struct net_device_ops mlx5e_netdev_ops_sriov = { | |||
2614 | .ndo_set_features = mlx5e_set_features, | 2616 | .ndo_set_features = mlx5e_set_features, |
2615 | .ndo_change_mtu = mlx5e_change_mtu, | 2617 | .ndo_change_mtu = mlx5e_change_mtu, |
2616 | .ndo_do_ioctl = mlx5e_ioctl, | 2618 | .ndo_do_ioctl = mlx5e_ioctl, |
2619 | #ifdef CONFIG_MLX5_CORE_EN_VXLAN | ||
2617 | .ndo_add_vxlan_port = mlx5e_add_vxlan_port, | 2620 | .ndo_add_vxlan_port = mlx5e_add_vxlan_port, |
2618 | .ndo_del_vxlan_port = mlx5e_del_vxlan_port, | 2621 | .ndo_del_vxlan_port = mlx5e_del_vxlan_port, |
2619 | .ndo_features_check = mlx5e_features_check, | 2622 | .ndo_features_check = mlx5e_features_check, |
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/vxlan.h b/drivers/net/ethernet/mellanox/mlx5/core/vxlan.h index 129f3527aa14..217ac530a514 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/vxlan.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/vxlan.h | |||
@@ -48,14 +48,21 @@ struct mlx5e_vxlan_work { | |||
48 | 48 | ||
49 | static inline bool mlx5e_vxlan_allowed(struct mlx5_core_dev *mdev) | 49 | static inline bool mlx5e_vxlan_allowed(struct mlx5_core_dev *mdev) |
50 | { | 50 | { |
51 | return (MLX5_CAP_ETH(mdev, tunnel_stateless_vxlan) && | 51 | return IS_ENABLED(CONFIG_MLX5_CORE_EN_VXLAN) && |
52 | (MLX5_CAP_ETH(mdev, tunnel_stateless_vxlan) && | ||
52 | mlx5_core_is_pf(mdev)); | 53 | mlx5_core_is_pf(mdev)); |
53 | } | 54 | } |
54 | 55 | ||
56 | #ifdef CONFIG_MLX5_CORE_EN_VXLAN | ||
55 | void mlx5e_vxlan_init(struct mlx5e_priv *priv); | 57 | void mlx5e_vxlan_init(struct mlx5e_priv *priv); |
58 | void mlx5e_vxlan_cleanup(struct mlx5e_priv *priv); | ||
59 | #else | ||
60 | static inline void mlx5e_vxlan_init(struct mlx5e_priv *priv) {} | ||
61 | static inline void mlx5e_vxlan_cleanup(struct mlx5e_priv *priv) {} | ||
62 | #endif | ||
63 | |||
56 | void mlx5e_vxlan_queue_work(struct mlx5e_priv *priv, sa_family_t sa_family, | 64 | void mlx5e_vxlan_queue_work(struct mlx5e_priv *priv, sa_family_t sa_family, |
57 | u16 port, int add); | 65 | u16 port, int add); |
58 | struct mlx5e_vxlan *mlx5e_vxlan_lookup_port(struct mlx5e_priv *priv, u16 port); | 66 | struct mlx5e_vxlan *mlx5e_vxlan_lookup_port(struct mlx5e_priv *priv, u16 port); |
59 | void mlx5e_vxlan_cleanup(struct mlx5e_priv *priv); | ||
60 | 67 | ||
61 | #endif /* __MLX5_VXLAN_H__ */ | 68 | #endif /* __MLX5_VXLAN_H__ */ |
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c index 79cdd81d55ab..4a7273771028 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | |||
@@ -2843,11 +2843,11 @@ static int mlxsw_sp_port_lag_join(struct mlxsw_sp_port *mlxsw_sp_port, | |||
2843 | lag->ref_count++; | 2843 | lag->ref_count++; |
2844 | return 0; | 2844 | return 0; |
2845 | 2845 | ||
2846 | err_col_port_enable: | ||
2847 | mlxsw_sp_lag_col_port_remove(mlxsw_sp_port, lag_id); | ||
2846 | err_col_port_add: | 2848 | err_col_port_add: |
2847 | if (!lag->ref_count) | 2849 | if (!lag->ref_count) |
2848 | mlxsw_sp_lag_destroy(mlxsw_sp, lag_id); | 2850 | mlxsw_sp_lag_destroy(mlxsw_sp, lag_id); |
2849 | err_col_port_enable: | ||
2850 | mlxsw_sp_lag_col_port_remove(mlxsw_sp_port, lag_id); | ||
2851 | return err; | 2851 | return err; |
2852 | } | 2852 | } |
2853 | 2853 | ||
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c index fb9efb84f13b..3710f19ed6bb 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c | |||
@@ -214,7 +214,15 @@ static int __mlxsw_sp_port_flood_set(struct mlxsw_sp_port *mlxsw_sp_port, | |||
214 | mlxsw_reg_sftr_pack(sftr_pl, MLXSW_SP_FLOOD_TABLE_BM, idx_begin, | 214 | mlxsw_reg_sftr_pack(sftr_pl, MLXSW_SP_FLOOD_TABLE_BM, idx_begin, |
215 | table_type, range, local_port, set); | 215 | table_type, range, local_port, set); |
216 | err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sftr), sftr_pl); | 216 | err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sftr), sftr_pl); |
217 | if (err) | ||
218 | goto err_flood_bm_set; | ||
219 | else | ||
220 | goto buffer_out; | ||
217 | 221 | ||
222 | err_flood_bm_set: | ||
223 | mlxsw_reg_sftr_pack(sftr_pl, MLXSW_SP_FLOOD_TABLE_UC, idx_begin, | ||
224 | table_type, range, local_port, !set); | ||
225 | mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sftr), sftr_pl); | ||
218 | buffer_out: | 226 | buffer_out: |
219 | kfree(sftr_pl); | 227 | kfree(sftr_pl); |
220 | return err; | 228 | return err; |
diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_hw.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_hw.c index db80eb1c6d4f..2b10f1bcd151 100644 --- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_hw.c +++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_hw.c | |||
@@ -1015,20 +1015,24 @@ static int netxen_get_flash_block(struct netxen_adapter *adapter, int base, | |||
1015 | { | 1015 | { |
1016 | int i, v, addr; | 1016 | int i, v, addr; |
1017 | __le32 *ptr32; | 1017 | __le32 *ptr32; |
1018 | int ret; | ||
1018 | 1019 | ||
1019 | addr = base; | 1020 | addr = base; |
1020 | ptr32 = buf; | 1021 | ptr32 = buf; |
1021 | for (i = 0; i < size / sizeof(u32); i++) { | 1022 | for (i = 0; i < size / sizeof(u32); i++) { |
1022 | if (netxen_rom_fast_read(adapter, addr, &v) == -1) | 1023 | ret = netxen_rom_fast_read(adapter, addr, &v); |
1023 | return -1; | 1024 | if (ret) |
1025 | return ret; | ||
1026 | |||
1024 | *ptr32 = cpu_to_le32(v); | 1027 | *ptr32 = cpu_to_le32(v); |
1025 | ptr32++; | 1028 | ptr32++; |
1026 | addr += sizeof(u32); | 1029 | addr += sizeof(u32); |
1027 | } | 1030 | } |
1028 | if ((char *)buf + size > (char *)ptr32) { | 1031 | if ((char *)buf + size > (char *)ptr32) { |
1029 | __le32 local; | 1032 | __le32 local; |
1030 | if (netxen_rom_fast_read(adapter, addr, &v) == -1) | 1033 | ret = netxen_rom_fast_read(adapter, addr, &v); |
1031 | return -1; | 1034 | if (ret) |
1035 | return ret; | ||
1032 | local = cpu_to_le32(v); | 1036 | local = cpu_to_le32(v); |
1033 | memcpy(ptr32, &local, (char *)buf + size - (char *)ptr32); | 1037 | memcpy(ptr32, &local, (char *)buf + size - (char *)ptr32); |
1034 | } | 1038 | } |
@@ -1940,7 +1944,7 @@ void netxen_nic_set_link_parameters(struct netxen_adapter *adapter) | |||
1940 | if (adapter->phy_read && | 1944 | if (adapter->phy_read && |
1941 | adapter->phy_read(adapter, | 1945 | adapter->phy_read(adapter, |
1942 | NETXEN_NIU_GB_MII_MGMT_ADDR_AUTONEG, | 1946 | NETXEN_NIU_GB_MII_MGMT_ADDR_AUTONEG, |
1943 | &autoneg) != 0) | 1947 | &autoneg) == 0) |
1944 | adapter->link_autoneg = autoneg; | 1948 | adapter->link_autoneg = autoneg; |
1945 | } else | 1949 | } else |
1946 | goto link_down; | 1950 | goto link_down; |
diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c index cad37af1517d..7a0281a36c28 100644 --- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c +++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c | |||
@@ -852,7 +852,8 @@ netxen_check_options(struct netxen_adapter *adapter) | |||
852 | ptr32 = (__le32 *)&serial_num; | 852 | ptr32 = (__le32 *)&serial_num; |
853 | offset = NX_FW_SERIAL_NUM_OFFSET; | 853 | offset = NX_FW_SERIAL_NUM_OFFSET; |
854 | for (i = 0; i < 8; i++) { | 854 | for (i = 0; i < 8; i++) { |
855 | if (netxen_rom_fast_read(adapter, offset, &val) == -1) { | 855 | err = netxen_rom_fast_read(adapter, offset, &val); |
856 | if (err) { | ||
856 | dev_err(&pdev->dev, "error reading board info\n"); | 857 | dev_err(&pdev->dev, "error reading board info\n"); |
857 | adapter->driver_mismatch = 1; | 858 | adapter->driver_mismatch = 1; |
858 | return; | 859 | return; |
diff --git a/drivers/net/ethernet/qlogic/qede/qede_main.c b/drivers/net/ethernet/qlogic/qede/qede_main.c index 82d85ccc9ed1..075faa52eb48 100644 --- a/drivers/net/ethernet/qlogic/qede/qede_main.c +++ b/drivers/net/ethernet/qlogic/qede/qede_main.c | |||
@@ -429,7 +429,7 @@ netdev_tx_t qede_start_xmit(struct sk_buff *skb, | |||
429 | u8 xmit_type; | 429 | u8 xmit_type; |
430 | u16 idx; | 430 | u16 idx; |
431 | u16 hlen; | 431 | u16 hlen; |
432 | bool data_split; | 432 | bool data_split = false; |
433 | 433 | ||
434 | /* Get tx-queue context and netdev index */ | 434 | /* Get tx-queue context and netdev index */ |
435 | txq_index = skb_get_queue_mapping(skb); | 435 | txq_index = skb_get_queue_mapping(skb); |
@@ -2094,8 +2094,6 @@ static struct qede_dev *qede_alloc_etherdev(struct qed_dev *cdev, | |||
2094 | edev->q_num_rx_buffers = NUM_RX_BDS_DEF; | 2094 | edev->q_num_rx_buffers = NUM_RX_BDS_DEF; |
2095 | edev->q_num_tx_buffers = NUM_TX_BDS_DEF; | 2095 | edev->q_num_tx_buffers = NUM_TX_BDS_DEF; |
2096 | 2096 | ||
2097 | DP_INFO(edev, "Allocated netdev with 64 tx queues and 64 rx queues\n"); | ||
2098 | |||
2099 | SET_NETDEV_DEV(ndev, &pdev->dev); | 2097 | SET_NETDEV_DEV(ndev, &pdev->dev); |
2100 | 2098 | ||
2101 | memset(&edev->stats, 0, sizeof(edev->stats)); | 2099 | memset(&edev->stats, 0, sizeof(edev->stats)); |
@@ -2274,9 +2272,9 @@ static void qede_update_pf_params(struct qed_dev *cdev) | |||
2274 | { | 2272 | { |
2275 | struct qed_pf_params pf_params; | 2273 | struct qed_pf_params pf_params; |
2276 | 2274 | ||
2277 | /* 16 rx + 16 tx */ | 2275 | /* 64 rx + 64 tx */ |
2278 | memset(&pf_params, 0, sizeof(struct qed_pf_params)); | 2276 | memset(&pf_params, 0, sizeof(struct qed_pf_params)); |
2279 | pf_params.eth_pf_params.num_cons = 32; | 2277 | pf_params.eth_pf_params.num_cons = 128; |
2280 | qed_ops->common->update_pf_params(cdev, &pf_params); | 2278 | qed_ops->common->update_pf_params(cdev, &pf_params); |
2281 | } | 2279 | } |
2282 | 2280 | ||
diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c index 9c40b88fabd5..a6dc11ce497f 100644 --- a/drivers/net/geneve.c +++ b/drivers/net/geneve.c | |||
@@ -495,8 +495,6 @@ static int geneve_gro_complete(struct sock *sk, struct sk_buff *skb, | |||
495 | int gh_len; | 495 | int gh_len; |
496 | int err = -ENOSYS; | 496 | int err = -ENOSYS; |
497 | 497 | ||
498 | udp_tunnel_gro_complete(skb, nhoff); | ||
499 | |||
500 | gh = (struct genevehdr *)(skb->data + nhoff); | 498 | gh = (struct genevehdr *)(skb->data + nhoff); |
501 | gh_len = geneve_hlen(gh); | 499 | gh_len = geneve_hlen(gh); |
502 | type = gh->proto_type; | 500 | type = gh->proto_type; |
@@ -507,6 +505,9 @@ static int geneve_gro_complete(struct sock *sk, struct sk_buff *skb, | |||
507 | err = ptype->callbacks.gro_complete(skb, nhoff + gh_len); | 505 | err = ptype->callbacks.gro_complete(skb, nhoff + gh_len); |
508 | 506 | ||
509 | rcu_read_unlock(); | 507 | rcu_read_unlock(); |
508 | |||
509 | skb_set_inner_mac_header(skb, nhoff + gh_len); | ||
510 | |||
510 | return err; | 511 | return err; |
511 | } | 512 | } |
512 | 513 | ||
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c index 3add2c4aac21..460740ccc238 100644 --- a/drivers/net/macsec.c +++ b/drivers/net/macsec.c | |||
@@ -85,7 +85,7 @@ struct gcm_iv { | |||
85 | * @tfm: crypto struct, key storage | 85 | * @tfm: crypto struct, key storage |
86 | */ | 86 | */ |
87 | struct macsec_key { | 87 | struct macsec_key { |
88 | u64 id; | 88 | u8 id[MACSEC_KEYID_LEN]; |
89 | struct crypto_aead *tfm; | 89 | struct crypto_aead *tfm; |
90 | }; | 90 | }; |
91 | 91 | ||
@@ -1530,7 +1530,8 @@ static const struct nla_policy macsec_genl_sa_policy[NUM_MACSEC_SA_ATTR] = { | |||
1530 | [MACSEC_SA_ATTR_AN] = { .type = NLA_U8 }, | 1530 | [MACSEC_SA_ATTR_AN] = { .type = NLA_U8 }, |
1531 | [MACSEC_SA_ATTR_ACTIVE] = { .type = NLA_U8 }, | 1531 | [MACSEC_SA_ATTR_ACTIVE] = { .type = NLA_U8 }, |
1532 | [MACSEC_SA_ATTR_PN] = { .type = NLA_U32 }, | 1532 | [MACSEC_SA_ATTR_PN] = { .type = NLA_U32 }, |
1533 | [MACSEC_SA_ATTR_KEYID] = { .type = NLA_U64 }, | 1533 | [MACSEC_SA_ATTR_KEYID] = { .type = NLA_BINARY, |
1534 | .len = MACSEC_KEYID_LEN, }, | ||
1534 | [MACSEC_SA_ATTR_KEY] = { .type = NLA_BINARY, | 1535 | [MACSEC_SA_ATTR_KEY] = { .type = NLA_BINARY, |
1535 | .len = MACSEC_MAX_KEY_LEN, }, | 1536 | .len = MACSEC_MAX_KEY_LEN, }, |
1536 | }; | 1537 | }; |
@@ -1577,6 +1578,9 @@ static bool validate_add_rxsa(struct nlattr **attrs) | |||
1577 | return false; | 1578 | return false; |
1578 | } | 1579 | } |
1579 | 1580 | ||
1581 | if (nla_len(attrs[MACSEC_SA_ATTR_KEYID]) != MACSEC_KEYID_LEN) | ||
1582 | return false; | ||
1583 | |||
1580 | return true; | 1584 | return true; |
1581 | } | 1585 | } |
1582 | 1586 | ||
@@ -1642,7 +1646,7 @@ static int macsec_add_rxsa(struct sk_buff *skb, struct genl_info *info) | |||
1642 | if (tb_sa[MACSEC_SA_ATTR_ACTIVE]) | 1646 | if (tb_sa[MACSEC_SA_ATTR_ACTIVE]) |
1643 | rx_sa->active = !!nla_get_u8(tb_sa[MACSEC_SA_ATTR_ACTIVE]); | 1647 | rx_sa->active = !!nla_get_u8(tb_sa[MACSEC_SA_ATTR_ACTIVE]); |
1644 | 1648 | ||
1645 | rx_sa->key.id = nla_get_u64(tb_sa[MACSEC_SA_ATTR_KEYID]); | 1649 | nla_memcpy(rx_sa->key.id, tb_sa[MACSEC_SA_ATTR_KEY], MACSEC_KEYID_LEN); |
1646 | rx_sa->sc = rx_sc; | 1650 | rx_sa->sc = rx_sc; |
1647 | rcu_assign_pointer(rx_sc->sa[assoc_num], rx_sa); | 1651 | rcu_assign_pointer(rx_sc->sa[assoc_num], rx_sa); |
1648 | 1652 | ||
@@ -1723,6 +1727,9 @@ static bool validate_add_txsa(struct nlattr **attrs) | |||
1723 | return false; | 1727 | return false; |
1724 | } | 1728 | } |
1725 | 1729 | ||
1730 | if (nla_len(attrs[MACSEC_SA_ATTR_KEYID]) != MACSEC_KEYID_LEN) | ||
1731 | return false; | ||
1732 | |||
1726 | return true; | 1733 | return true; |
1727 | } | 1734 | } |
1728 | 1735 | ||
@@ -1778,7 +1785,7 @@ static int macsec_add_txsa(struct sk_buff *skb, struct genl_info *info) | |||
1778 | return -ENOMEM; | 1785 | return -ENOMEM; |
1779 | } | 1786 | } |
1780 | 1787 | ||
1781 | tx_sa->key.id = nla_get_u64(tb_sa[MACSEC_SA_ATTR_KEYID]); | 1788 | nla_memcpy(tx_sa->key.id, tb_sa[MACSEC_SA_ATTR_KEY], MACSEC_KEYID_LEN); |
1782 | 1789 | ||
1783 | spin_lock_bh(&tx_sa->lock); | 1790 | spin_lock_bh(&tx_sa->lock); |
1784 | tx_sa->next_pn = nla_get_u32(tb_sa[MACSEC_SA_ATTR_PN]); | 1791 | tx_sa->next_pn = nla_get_u32(tb_sa[MACSEC_SA_ATTR_PN]); |
@@ -2365,9 +2372,7 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev, | |||
2365 | 2372 | ||
2366 | if (nla_put_u8(skb, MACSEC_SA_ATTR_AN, i) || | 2373 | if (nla_put_u8(skb, MACSEC_SA_ATTR_AN, i) || |
2367 | nla_put_u32(skb, MACSEC_SA_ATTR_PN, tx_sa->next_pn) || | 2374 | nla_put_u32(skb, MACSEC_SA_ATTR_PN, tx_sa->next_pn) || |
2368 | nla_put_u64_64bit(skb, MACSEC_SA_ATTR_KEYID, | 2375 | nla_put(skb, MACSEC_SA_ATTR_KEYID, MACSEC_KEYID_LEN, tx_sa->key.id) || |
2369 | tx_sa->key.id, | ||
2370 | MACSEC_SA_ATTR_PAD) || | ||
2371 | nla_put_u8(skb, MACSEC_SA_ATTR_ACTIVE, tx_sa->active)) { | 2376 | nla_put_u8(skb, MACSEC_SA_ATTR_ACTIVE, tx_sa->active)) { |
2372 | nla_nest_cancel(skb, txsa_nest); | 2377 | nla_nest_cancel(skb, txsa_nest); |
2373 | nla_nest_cancel(skb, txsa_list); | 2378 | nla_nest_cancel(skb, txsa_list); |
@@ -2469,9 +2474,7 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev, | |||
2469 | 2474 | ||
2470 | if (nla_put_u8(skb, MACSEC_SA_ATTR_AN, i) || | 2475 | if (nla_put_u8(skb, MACSEC_SA_ATTR_AN, i) || |
2471 | nla_put_u32(skb, MACSEC_SA_ATTR_PN, rx_sa->next_pn) || | 2476 | nla_put_u32(skb, MACSEC_SA_ATTR_PN, rx_sa->next_pn) || |
2472 | nla_put_u64_64bit(skb, MACSEC_SA_ATTR_KEYID, | 2477 | nla_put(skb, MACSEC_SA_ATTR_KEYID, MACSEC_KEYID_LEN, rx_sa->key.id) || |
2473 | rx_sa->key.id, | ||
2474 | MACSEC_SA_ATTR_PAD) || | ||
2475 | nla_put_u8(skb, MACSEC_SA_ATTR_ACTIVE, rx_sa->active)) { | 2478 | nla_put_u8(skb, MACSEC_SA_ATTR_ACTIVE, rx_sa->active)) { |
2476 | nla_nest_cancel(skb, rxsa_nest); | 2479 | nla_nest_cancel(skb, rxsa_nest); |
2477 | nla_nest_cancel(skb, rxsc_nest); | 2480 | nla_nest_cancel(skb, rxsc_nest); |
diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c index 22b85b097cbc..bd6720962b1f 100644 --- a/drivers/net/macvtap.c +++ b/drivers/net/macvtap.c | |||
@@ -384,7 +384,7 @@ static rx_handler_result_t macvtap_handle_frame(struct sk_buff **pskb) | |||
384 | goto wake_up; | 384 | goto wake_up; |
385 | } | 385 | } |
386 | 386 | ||
387 | kfree_skb(skb); | 387 | consume_skb(skb); |
388 | while (segs) { | 388 | while (segs) { |
389 | struct sk_buff *nskb = segs->next; | 389 | struct sk_buff *nskb = segs->next; |
390 | 390 | ||
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index 2668e528dee4..2f29d20aa08f 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c | |||
@@ -613,8 +613,9 @@ out: | |||
613 | 613 | ||
614 | static int vxlan_gro_complete(struct sock *sk, struct sk_buff *skb, int nhoff) | 614 | static int vxlan_gro_complete(struct sock *sk, struct sk_buff *skb, int nhoff) |
615 | { | 615 | { |
616 | udp_tunnel_gro_complete(skb, nhoff); | 616 | /* Sets 'skb->inner_mac_header' since we are always called with |
617 | 617 | * 'skb->encapsulation' set. | |
618 | */ | ||
618 | return eth_gro_complete(skb, nhoff + sizeof(struct vxlanhdr)); | 619 | return eth_gro_complete(skb, nhoff + sizeof(struct vxlanhdr)); |
619 | } | 620 | } |
620 | 621 | ||
diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c index f798899338ed..5101f3ab4f29 100644 --- a/drivers/nvdimm/pmem.c +++ b/drivers/nvdimm/pmem.c | |||
@@ -397,10 +397,17 @@ static int nd_pfn_init(struct nd_pfn *nd_pfn) | |||
397 | */ | 397 | */ |
398 | start += start_pad; | 398 | start += start_pad; |
399 | npfns = (pmem->size - start_pad - end_trunc - SZ_8K) / SZ_4K; | 399 | npfns = (pmem->size - start_pad - end_trunc - SZ_8K) / SZ_4K; |
400 | if (nd_pfn->mode == PFN_MODE_PMEM) | 400 | if (nd_pfn->mode == PFN_MODE_PMEM) { |
401 | offset = ALIGN(start + SZ_8K + 64 * npfns, nd_pfn->align) | 401 | unsigned long memmap_size; |
402 | |||
403 | /* | ||
404 | * vmemmap_populate_hugepages() allocates the memmap array in | ||
405 | * HPAGE_SIZE chunks. | ||
406 | */ | ||
407 | memmap_size = ALIGN(64 * npfns, HPAGE_SIZE); | ||
408 | offset = ALIGN(start + SZ_8K + memmap_size, nd_pfn->align) | ||
402 | - start; | 409 | - start; |
403 | else if (nd_pfn->mode == PFN_MODE_RAM) | 410 | } else if (nd_pfn->mode == PFN_MODE_RAM) |
404 | offset = ALIGN(start + SZ_8K, nd_pfn->align) - start; | 411 | offset = ALIGN(start + SZ_8K, nd_pfn->align) - start; |
405 | else | 412 | else |
406 | goto err; | 413 | goto err; |
diff --git a/drivers/nvmem/mxs-ocotp.c b/drivers/nvmem/mxs-ocotp.c index 8ba19bba3156..2bb3c5799ac4 100644 --- a/drivers/nvmem/mxs-ocotp.c +++ b/drivers/nvmem/mxs-ocotp.c | |||
@@ -94,7 +94,7 @@ static int mxs_ocotp_read(void *context, const void *reg, size_t reg_size, | |||
94 | if (ret) | 94 | if (ret) |
95 | goto close_banks; | 95 | goto close_banks; |
96 | 96 | ||
97 | while (val_size) { | 97 | while (val_size >= reg_size) { |
98 | if ((offset < OCOTP_DATA_OFFSET) || (offset % 16)) { | 98 | if ((offset < OCOTP_DATA_OFFSET) || (offset % 16)) { |
99 | /* fill up non-data register */ | 99 | /* fill up non-data register */ |
100 | *buf = 0; | 100 | *buf = 0; |
@@ -103,7 +103,7 @@ static int mxs_ocotp_read(void *context, const void *reg, size_t reg_size, | |||
103 | } | 103 | } |
104 | 104 | ||
105 | buf++; | 105 | buf++; |
106 | val_size--; | 106 | val_size -= reg_size; |
107 | offset += reg_size; | 107 | offset += reg_size; |
108 | } | 108 | } |
109 | 109 | ||
diff --git a/drivers/rapidio/devices/rio_mport_cdev.c b/drivers/rapidio/devices/rio_mport_cdev.c index 96168b819044..e165b7ce29d7 100644 --- a/drivers/rapidio/devices/rio_mport_cdev.c +++ b/drivers/rapidio/devices/rio_mport_cdev.c | |||
@@ -126,7 +126,7 @@ struct rio_mport_mapping { | |||
126 | struct list_head node; | 126 | struct list_head node; |
127 | struct mport_dev *md; | 127 | struct mport_dev *md; |
128 | enum rio_mport_map_dir dir; | 128 | enum rio_mport_map_dir dir; |
129 | u32 rioid; | 129 | u16 rioid; |
130 | u64 rio_addr; | 130 | u64 rio_addr; |
131 | dma_addr_t phys_addr; /* for mmap */ | 131 | dma_addr_t phys_addr; /* for mmap */ |
132 | void *virt_addr; /* kernel address, for dma_free_coherent */ | 132 | void *virt_addr; /* kernel address, for dma_free_coherent */ |
@@ -137,7 +137,7 @@ struct rio_mport_mapping { | |||
137 | 137 | ||
138 | struct rio_mport_dma_map { | 138 | struct rio_mport_dma_map { |
139 | int valid; | 139 | int valid; |
140 | uint64_t length; | 140 | u64 length; |
141 | void *vaddr; | 141 | void *vaddr; |
142 | dma_addr_t paddr; | 142 | dma_addr_t paddr; |
143 | }; | 143 | }; |
@@ -208,7 +208,7 @@ struct mport_cdev_priv { | |||
208 | struct kfifo event_fifo; | 208 | struct kfifo event_fifo; |
209 | wait_queue_head_t event_rx_wait; | 209 | wait_queue_head_t event_rx_wait; |
210 | spinlock_t fifo_lock; | 210 | spinlock_t fifo_lock; |
211 | unsigned int event_mask; /* RIO_DOORBELL, RIO_PORTWRITE */ | 211 | u32 event_mask; /* RIO_DOORBELL, RIO_PORTWRITE */ |
212 | #ifdef CONFIG_RAPIDIO_DMA_ENGINE | 212 | #ifdef CONFIG_RAPIDIO_DMA_ENGINE |
213 | struct dma_chan *dmach; | 213 | struct dma_chan *dmach; |
214 | struct list_head async_list; | 214 | struct list_head async_list; |
@@ -276,7 +276,8 @@ static int rio_mport_maint_rd(struct mport_cdev_priv *priv, void __user *arg, | |||
276 | return -EFAULT; | 276 | return -EFAULT; |
277 | 277 | ||
278 | if ((maint_io.offset % 4) || | 278 | if ((maint_io.offset % 4) || |
279 | (maint_io.length == 0) || (maint_io.length % 4)) | 279 | (maint_io.length == 0) || (maint_io.length % 4) || |
280 | (maint_io.length + maint_io.offset) > RIO_MAINT_SPACE_SZ) | ||
280 | return -EINVAL; | 281 | return -EINVAL; |
281 | 282 | ||
282 | buffer = vmalloc(maint_io.length); | 283 | buffer = vmalloc(maint_io.length); |
@@ -298,7 +299,8 @@ static int rio_mport_maint_rd(struct mport_cdev_priv *priv, void __user *arg, | |||
298 | offset += 4; | 299 | offset += 4; |
299 | } | 300 | } |
300 | 301 | ||
301 | if (unlikely(copy_to_user(maint_io.buffer, buffer, maint_io.length))) | 302 | if (unlikely(copy_to_user((void __user *)(uintptr_t)maint_io.buffer, |
303 | buffer, maint_io.length))) | ||
302 | ret = -EFAULT; | 304 | ret = -EFAULT; |
303 | out: | 305 | out: |
304 | vfree(buffer); | 306 | vfree(buffer); |
@@ -319,7 +321,8 @@ static int rio_mport_maint_wr(struct mport_cdev_priv *priv, void __user *arg, | |||
319 | return -EFAULT; | 321 | return -EFAULT; |
320 | 322 | ||
321 | if ((maint_io.offset % 4) || | 323 | if ((maint_io.offset % 4) || |
322 | (maint_io.length == 0) || (maint_io.length % 4)) | 324 | (maint_io.length == 0) || (maint_io.length % 4) || |
325 | (maint_io.length + maint_io.offset) > RIO_MAINT_SPACE_SZ) | ||
323 | return -EINVAL; | 326 | return -EINVAL; |
324 | 327 | ||
325 | buffer = vmalloc(maint_io.length); | 328 | buffer = vmalloc(maint_io.length); |
@@ -327,7 +330,8 @@ static int rio_mport_maint_wr(struct mport_cdev_priv *priv, void __user *arg, | |||
327 | return -ENOMEM; | 330 | return -ENOMEM; |
328 | length = maint_io.length; | 331 | length = maint_io.length; |
329 | 332 | ||
330 | if (unlikely(copy_from_user(buffer, maint_io.buffer, length))) { | 333 | if (unlikely(copy_from_user(buffer, |
334 | (void __user *)(uintptr_t)maint_io.buffer, length))) { | ||
331 | ret = -EFAULT; | 335 | ret = -EFAULT; |
332 | goto out; | 336 | goto out; |
333 | } | 337 | } |
@@ -360,7 +364,7 @@ out: | |||
360 | */ | 364 | */ |
361 | static int | 365 | static int |
362 | rio_mport_create_outbound_mapping(struct mport_dev *md, struct file *filp, | 366 | rio_mport_create_outbound_mapping(struct mport_dev *md, struct file *filp, |
363 | u32 rioid, u64 raddr, u32 size, | 367 | u16 rioid, u64 raddr, u32 size, |
364 | dma_addr_t *paddr) | 368 | dma_addr_t *paddr) |
365 | { | 369 | { |
366 | struct rio_mport *mport = md->mport; | 370 | struct rio_mport *mport = md->mport; |
@@ -369,7 +373,7 @@ rio_mport_create_outbound_mapping(struct mport_dev *md, struct file *filp, | |||
369 | 373 | ||
370 | rmcd_debug(OBW, "did=%d ra=0x%llx sz=0x%x", rioid, raddr, size); | 374 | rmcd_debug(OBW, "did=%d ra=0x%llx sz=0x%x", rioid, raddr, size); |
371 | 375 | ||
372 | map = kzalloc(sizeof(struct rio_mport_mapping), GFP_KERNEL); | 376 | map = kzalloc(sizeof(*map), GFP_KERNEL); |
373 | if (map == NULL) | 377 | if (map == NULL) |
374 | return -ENOMEM; | 378 | return -ENOMEM; |
375 | 379 | ||
@@ -394,7 +398,7 @@ err_map_outb: | |||
394 | 398 | ||
395 | static int | 399 | static int |
396 | rio_mport_get_outbound_mapping(struct mport_dev *md, struct file *filp, | 400 | rio_mport_get_outbound_mapping(struct mport_dev *md, struct file *filp, |
397 | u32 rioid, u64 raddr, u32 size, | 401 | u16 rioid, u64 raddr, u32 size, |
398 | dma_addr_t *paddr) | 402 | dma_addr_t *paddr) |
399 | { | 403 | { |
400 | struct rio_mport_mapping *map; | 404 | struct rio_mport_mapping *map; |
@@ -433,7 +437,7 @@ static int rio_mport_obw_map(struct file *filp, void __user *arg) | |||
433 | dma_addr_t paddr; | 437 | dma_addr_t paddr; |
434 | int ret; | 438 | int ret; |
435 | 439 | ||
436 | if (unlikely(copy_from_user(&map, arg, sizeof(struct rio_mmap)))) | 440 | if (unlikely(copy_from_user(&map, arg, sizeof(map)))) |
437 | return -EFAULT; | 441 | return -EFAULT; |
438 | 442 | ||
439 | rmcd_debug(OBW, "did=%d ra=0x%llx sz=0x%llx", | 443 | rmcd_debug(OBW, "did=%d ra=0x%llx sz=0x%llx", |
@@ -448,7 +452,7 @@ static int rio_mport_obw_map(struct file *filp, void __user *arg) | |||
448 | 452 | ||
449 | map.handle = paddr; | 453 | map.handle = paddr; |
450 | 454 | ||
451 | if (unlikely(copy_to_user(arg, &map, sizeof(struct rio_mmap)))) | 455 | if (unlikely(copy_to_user(arg, &map, sizeof(map)))) |
452 | return -EFAULT; | 456 | return -EFAULT; |
453 | return 0; | 457 | return 0; |
454 | } | 458 | } |
@@ -469,7 +473,7 @@ static int rio_mport_obw_free(struct file *filp, void __user *arg) | |||
469 | if (!md->mport->ops->unmap_outb) | 473 | if (!md->mport->ops->unmap_outb) |
470 | return -EPROTONOSUPPORT; | 474 | return -EPROTONOSUPPORT; |
471 | 475 | ||
472 | if (copy_from_user(&handle, arg, sizeof(u64))) | 476 | if (copy_from_user(&handle, arg, sizeof(handle))) |
473 | return -EFAULT; | 477 | return -EFAULT; |
474 | 478 | ||
475 | rmcd_debug(OBW, "h=0x%llx", handle); | 479 | rmcd_debug(OBW, "h=0x%llx", handle); |
@@ -498,9 +502,9 @@ static int rio_mport_obw_free(struct file *filp, void __user *arg) | |||
498 | static int maint_hdid_set(struct mport_cdev_priv *priv, void __user *arg) | 502 | static int maint_hdid_set(struct mport_cdev_priv *priv, void __user *arg) |
499 | { | 503 | { |
500 | struct mport_dev *md = priv->md; | 504 | struct mport_dev *md = priv->md; |
501 | uint16_t hdid; | 505 | u16 hdid; |
502 | 506 | ||
503 | if (copy_from_user(&hdid, arg, sizeof(uint16_t))) | 507 | if (copy_from_user(&hdid, arg, sizeof(hdid))) |
504 | return -EFAULT; | 508 | return -EFAULT; |
505 | 509 | ||
506 | md->mport->host_deviceid = hdid; | 510 | md->mport->host_deviceid = hdid; |
@@ -520,9 +524,9 @@ static int maint_hdid_set(struct mport_cdev_priv *priv, void __user *arg) | |||
520 | static int maint_comptag_set(struct mport_cdev_priv *priv, void __user *arg) | 524 | static int maint_comptag_set(struct mport_cdev_priv *priv, void __user *arg) |
521 | { | 525 | { |
522 | struct mport_dev *md = priv->md; | 526 | struct mport_dev *md = priv->md; |
523 | uint32_t comptag; | 527 | u32 comptag; |
524 | 528 | ||
525 | if (copy_from_user(&comptag, arg, sizeof(uint32_t))) | 529 | if (copy_from_user(&comptag, arg, sizeof(comptag))) |
526 | return -EFAULT; | 530 | return -EFAULT; |
527 | 531 | ||
528 | rio_local_write_config_32(md->mport, RIO_COMPONENT_TAG_CSR, comptag); | 532 | rio_local_write_config_32(md->mport, RIO_COMPONENT_TAG_CSR, comptag); |
@@ -837,7 +841,7 @@ err_out: | |||
837 | * @xfer: data transfer descriptor structure | 841 | * @xfer: data transfer descriptor structure |
838 | */ | 842 | */ |
839 | static int | 843 | static int |
840 | rio_dma_transfer(struct file *filp, uint32_t transfer_mode, | 844 | rio_dma_transfer(struct file *filp, u32 transfer_mode, |
841 | enum rio_transfer_sync sync, enum dma_data_direction dir, | 845 | enum rio_transfer_sync sync, enum dma_data_direction dir, |
842 | struct rio_transfer_io *xfer) | 846 | struct rio_transfer_io *xfer) |
843 | { | 847 | { |
@@ -875,7 +879,7 @@ rio_dma_transfer(struct file *filp, uint32_t transfer_mode, | |||
875 | unsigned long offset; | 879 | unsigned long offset; |
876 | long pinned; | 880 | long pinned; |
877 | 881 | ||
878 | offset = (unsigned long)xfer->loc_addr & ~PAGE_MASK; | 882 | offset = (unsigned long)(uintptr_t)xfer->loc_addr & ~PAGE_MASK; |
879 | nr_pages = PAGE_ALIGN(xfer->length + offset) >> PAGE_SHIFT; | 883 | nr_pages = PAGE_ALIGN(xfer->length + offset) >> PAGE_SHIFT; |
880 | 884 | ||
881 | page_list = kmalloc_array(nr_pages, | 885 | page_list = kmalloc_array(nr_pages, |
@@ -1015,19 +1019,20 @@ static int rio_mport_transfer_ioctl(struct file *filp, void __user *arg) | |||
1015 | if (unlikely(copy_from_user(&transaction, arg, sizeof(transaction)))) | 1019 | if (unlikely(copy_from_user(&transaction, arg, sizeof(transaction)))) |
1016 | return -EFAULT; | 1020 | return -EFAULT; |
1017 | 1021 | ||
1018 | if (transaction.count != 1) | 1022 | if (transaction.count != 1) /* only single transfer for now */ |
1019 | return -EINVAL; | 1023 | return -EINVAL; |
1020 | 1024 | ||
1021 | if ((transaction.transfer_mode & | 1025 | if ((transaction.transfer_mode & |
1022 | priv->md->properties.transfer_mode) == 0) | 1026 | priv->md->properties.transfer_mode) == 0) |
1023 | return -ENODEV; | 1027 | return -ENODEV; |
1024 | 1028 | ||
1025 | transfer = vmalloc(transaction.count * sizeof(struct rio_transfer_io)); | 1029 | transfer = vmalloc(transaction.count * sizeof(*transfer)); |
1026 | if (!transfer) | 1030 | if (!transfer) |
1027 | return -ENOMEM; | 1031 | return -ENOMEM; |
1028 | 1032 | ||
1029 | if (unlikely(copy_from_user(transfer, transaction.block, | 1033 | if (unlikely(copy_from_user(transfer, |
1030 | transaction.count * sizeof(struct rio_transfer_io)))) { | 1034 | (void __user *)(uintptr_t)transaction.block, |
1035 | transaction.count * sizeof(*transfer)))) { | ||
1031 | ret = -EFAULT; | 1036 | ret = -EFAULT; |
1032 | goto out_free; | 1037 | goto out_free; |
1033 | } | 1038 | } |
@@ -1038,8 +1043,9 @@ static int rio_mport_transfer_ioctl(struct file *filp, void __user *arg) | |||
1038 | ret = rio_dma_transfer(filp, transaction.transfer_mode, | 1043 | ret = rio_dma_transfer(filp, transaction.transfer_mode, |
1039 | transaction.sync, dir, &transfer[i]); | 1044 | transaction.sync, dir, &transfer[i]); |
1040 | 1045 | ||
1041 | if (unlikely(copy_to_user(transaction.block, transfer, | 1046 | if (unlikely(copy_to_user((void __user *)(uintptr_t)transaction.block, |
1042 | transaction.count * sizeof(struct rio_transfer_io)))) | 1047 | transfer, |
1048 | transaction.count * sizeof(*transfer)))) | ||
1043 | ret = -EFAULT; | 1049 | ret = -EFAULT; |
1044 | 1050 | ||
1045 | out_free: | 1051 | out_free: |
@@ -1129,11 +1135,11 @@ err_tmo: | |||
1129 | } | 1135 | } |
1130 | 1136 | ||
1131 | static int rio_mport_create_dma_mapping(struct mport_dev *md, struct file *filp, | 1137 | static int rio_mport_create_dma_mapping(struct mport_dev *md, struct file *filp, |
1132 | uint64_t size, struct rio_mport_mapping **mapping) | 1138 | u64 size, struct rio_mport_mapping **mapping) |
1133 | { | 1139 | { |
1134 | struct rio_mport_mapping *map; | 1140 | struct rio_mport_mapping *map; |
1135 | 1141 | ||
1136 | map = kzalloc(sizeof(struct rio_mport_mapping), GFP_KERNEL); | 1142 | map = kzalloc(sizeof(*map), GFP_KERNEL); |
1137 | if (map == NULL) | 1143 | if (map == NULL) |
1138 | return -ENOMEM; | 1144 | return -ENOMEM; |
1139 | 1145 | ||
@@ -1165,7 +1171,7 @@ static int rio_mport_alloc_dma(struct file *filp, void __user *arg) | |||
1165 | struct rio_mport_mapping *mapping = NULL; | 1171 | struct rio_mport_mapping *mapping = NULL; |
1166 | int ret; | 1172 | int ret; |
1167 | 1173 | ||
1168 | if (unlikely(copy_from_user(&map, arg, sizeof(struct rio_dma_mem)))) | 1174 | if (unlikely(copy_from_user(&map, arg, sizeof(map)))) |
1169 | return -EFAULT; | 1175 | return -EFAULT; |
1170 | 1176 | ||
1171 | ret = rio_mport_create_dma_mapping(md, filp, map.length, &mapping); | 1177 | ret = rio_mport_create_dma_mapping(md, filp, map.length, &mapping); |
@@ -1174,7 +1180,7 @@ static int rio_mport_alloc_dma(struct file *filp, void __user *arg) | |||
1174 | 1180 | ||
1175 | map.dma_handle = mapping->phys_addr; | 1181 | map.dma_handle = mapping->phys_addr; |
1176 | 1182 | ||
1177 | if (unlikely(copy_to_user(arg, &map, sizeof(struct rio_dma_mem)))) { | 1183 | if (unlikely(copy_to_user(arg, &map, sizeof(map)))) { |
1178 | mutex_lock(&md->buf_mutex); | 1184 | mutex_lock(&md->buf_mutex); |
1179 | kref_put(&mapping->ref, mport_release_mapping); | 1185 | kref_put(&mapping->ref, mport_release_mapping); |
1180 | mutex_unlock(&md->buf_mutex); | 1186 | mutex_unlock(&md->buf_mutex); |
@@ -1192,7 +1198,7 @@ static int rio_mport_free_dma(struct file *filp, void __user *arg) | |||
1192 | int ret = -EFAULT; | 1198 | int ret = -EFAULT; |
1193 | struct rio_mport_mapping *map, *_map; | 1199 | struct rio_mport_mapping *map, *_map; |
1194 | 1200 | ||
1195 | if (copy_from_user(&handle, arg, sizeof(u64))) | 1201 | if (copy_from_user(&handle, arg, sizeof(handle))) |
1196 | return -EFAULT; | 1202 | return -EFAULT; |
1197 | rmcd_debug(EXIT, "filp=%p", filp); | 1203 | rmcd_debug(EXIT, "filp=%p", filp); |
1198 | 1204 | ||
@@ -1242,14 +1248,18 @@ static int rio_mport_free_dma(struct file *filp, void __user *arg) | |||
1242 | 1248 | ||
1243 | static int | 1249 | static int |
1244 | rio_mport_create_inbound_mapping(struct mport_dev *md, struct file *filp, | 1250 | rio_mport_create_inbound_mapping(struct mport_dev *md, struct file *filp, |
1245 | u64 raddr, u32 size, | 1251 | u64 raddr, u64 size, |
1246 | struct rio_mport_mapping **mapping) | 1252 | struct rio_mport_mapping **mapping) |
1247 | { | 1253 | { |
1248 | struct rio_mport *mport = md->mport; | 1254 | struct rio_mport *mport = md->mport; |
1249 | struct rio_mport_mapping *map; | 1255 | struct rio_mport_mapping *map; |
1250 | int ret; | 1256 | int ret; |
1251 | 1257 | ||
1252 | map = kzalloc(sizeof(struct rio_mport_mapping), GFP_KERNEL); | 1258 | /* rio_map_inb_region() accepts u32 size */ |
1259 | if (size > 0xffffffff) | ||
1260 | return -EINVAL; | ||
1261 | |||
1262 | map = kzalloc(sizeof(*map), GFP_KERNEL); | ||
1253 | if (map == NULL) | 1263 | if (map == NULL) |
1254 | return -ENOMEM; | 1264 | return -ENOMEM; |
1255 | 1265 | ||
@@ -1262,7 +1272,7 @@ rio_mport_create_inbound_mapping(struct mport_dev *md, struct file *filp, | |||
1262 | 1272 | ||
1263 | if (raddr == RIO_MAP_ANY_ADDR) | 1273 | if (raddr == RIO_MAP_ANY_ADDR) |
1264 | raddr = map->phys_addr; | 1274 | raddr = map->phys_addr; |
1265 | ret = rio_map_inb_region(mport, map->phys_addr, raddr, size, 0); | 1275 | ret = rio_map_inb_region(mport, map->phys_addr, raddr, (u32)size, 0); |
1266 | if (ret < 0) | 1276 | if (ret < 0) |
1267 | goto err_map_inb; | 1277 | goto err_map_inb; |
1268 | 1278 | ||
@@ -1288,7 +1298,7 @@ err_dma_alloc: | |||
1288 | 1298 | ||
1289 | static int | 1299 | static int |
1290 | rio_mport_get_inbound_mapping(struct mport_dev *md, struct file *filp, | 1300 | rio_mport_get_inbound_mapping(struct mport_dev *md, struct file *filp, |
1291 | u64 raddr, u32 size, | 1301 | u64 raddr, u64 size, |
1292 | struct rio_mport_mapping **mapping) | 1302 | struct rio_mport_mapping **mapping) |
1293 | { | 1303 | { |
1294 | struct rio_mport_mapping *map; | 1304 | struct rio_mport_mapping *map; |
@@ -1331,7 +1341,7 @@ static int rio_mport_map_inbound(struct file *filp, void __user *arg) | |||
1331 | 1341 | ||
1332 | if (!md->mport->ops->map_inb) | 1342 | if (!md->mport->ops->map_inb) |
1333 | return -EPROTONOSUPPORT; | 1343 | return -EPROTONOSUPPORT; |
1334 | if (unlikely(copy_from_user(&map, arg, sizeof(struct rio_mmap)))) | 1344 | if (unlikely(copy_from_user(&map, arg, sizeof(map)))) |
1335 | return -EFAULT; | 1345 | return -EFAULT; |
1336 | 1346 | ||
1337 | rmcd_debug(IBW, "%s filp=%p", dev_name(&priv->md->dev), filp); | 1347 | rmcd_debug(IBW, "%s filp=%p", dev_name(&priv->md->dev), filp); |
@@ -1344,7 +1354,7 @@ static int rio_mport_map_inbound(struct file *filp, void __user *arg) | |||
1344 | map.handle = mapping->phys_addr; | 1354 | map.handle = mapping->phys_addr; |
1345 | map.rio_addr = mapping->rio_addr; | 1355 | map.rio_addr = mapping->rio_addr; |
1346 | 1356 | ||
1347 | if (unlikely(copy_to_user(arg, &map, sizeof(struct rio_mmap)))) { | 1357 | if (unlikely(copy_to_user(arg, &map, sizeof(map)))) { |
1348 | /* Delete mapping if it was created by this request */ | 1358 | /* Delete mapping if it was created by this request */ |
1349 | if (ret == 0 && mapping->filp == filp) { | 1359 | if (ret == 0 && mapping->filp == filp) { |
1350 | mutex_lock(&md->buf_mutex); | 1360 | mutex_lock(&md->buf_mutex); |
@@ -1375,7 +1385,7 @@ static int rio_mport_inbound_free(struct file *filp, void __user *arg) | |||
1375 | if (!md->mport->ops->unmap_inb) | 1385 | if (!md->mport->ops->unmap_inb) |
1376 | return -EPROTONOSUPPORT; | 1386 | return -EPROTONOSUPPORT; |
1377 | 1387 | ||
1378 | if (copy_from_user(&handle, arg, sizeof(u64))) | 1388 | if (copy_from_user(&handle, arg, sizeof(handle))) |
1379 | return -EFAULT; | 1389 | return -EFAULT; |
1380 | 1390 | ||
1381 | mutex_lock(&md->buf_mutex); | 1391 | mutex_lock(&md->buf_mutex); |
@@ -1401,7 +1411,7 @@ static int rio_mport_inbound_free(struct file *filp, void __user *arg) | |||
1401 | static int maint_port_idx_get(struct mport_cdev_priv *priv, void __user *arg) | 1411 | static int maint_port_idx_get(struct mport_cdev_priv *priv, void __user *arg) |
1402 | { | 1412 | { |
1403 | struct mport_dev *md = priv->md; | 1413 | struct mport_dev *md = priv->md; |
1404 | uint32_t port_idx = md->mport->index; | 1414 | u32 port_idx = md->mport->index; |
1405 | 1415 | ||
1406 | rmcd_debug(MPORT, "port_index=%d", port_idx); | 1416 | rmcd_debug(MPORT, "port_index=%d", port_idx); |
1407 | 1417 | ||
@@ -1451,7 +1461,7 @@ static void rio_mport_doorbell_handler(struct rio_mport *mport, void *dev_id, | |||
1451 | handled = 0; | 1461 | handled = 0; |
1452 | spin_lock(&data->db_lock); | 1462 | spin_lock(&data->db_lock); |
1453 | list_for_each_entry(db_filter, &data->doorbells, data_node) { | 1463 | list_for_each_entry(db_filter, &data->doorbells, data_node) { |
1454 | if (((db_filter->filter.rioid == 0xffffffff || | 1464 | if (((db_filter->filter.rioid == RIO_INVALID_DESTID || |
1455 | db_filter->filter.rioid == src)) && | 1465 | db_filter->filter.rioid == src)) && |
1456 | info >= db_filter->filter.low && | 1466 | info >= db_filter->filter.low && |
1457 | info <= db_filter->filter.high) { | 1467 | info <= db_filter->filter.high) { |
@@ -1525,6 +1535,9 @@ static int rio_mport_remove_db_filter(struct mport_cdev_priv *priv, | |||
1525 | if (copy_from_user(&filter, arg, sizeof(filter))) | 1535 | if (copy_from_user(&filter, arg, sizeof(filter))) |
1526 | return -EFAULT; | 1536 | return -EFAULT; |
1527 | 1537 | ||
1538 | if (filter.low > filter.high) | ||
1539 | return -EINVAL; | ||
1540 | |||
1528 | spin_lock_irqsave(&priv->md->db_lock, flags); | 1541 | spin_lock_irqsave(&priv->md->db_lock, flags); |
1529 | list_for_each_entry(db_filter, &priv->db_filters, priv_node) { | 1542 | list_for_each_entry(db_filter, &priv->db_filters, priv_node) { |
1530 | if (db_filter->filter.rioid == filter.rioid && | 1543 | if (db_filter->filter.rioid == filter.rioid && |
@@ -1737,10 +1750,10 @@ static int rio_mport_add_riodev(struct mport_cdev_priv *priv, | |||
1737 | return -EEXIST; | 1750 | return -EEXIST; |
1738 | } | 1751 | } |
1739 | 1752 | ||
1740 | size = sizeof(struct rio_dev); | 1753 | size = sizeof(*rdev); |
1741 | mport = md->mport; | 1754 | mport = md->mport; |
1742 | destid = (u16)dev_info.destid; | 1755 | destid = dev_info.destid; |
1743 | hopcount = (u8)dev_info.hopcount; | 1756 | hopcount = dev_info.hopcount; |
1744 | 1757 | ||
1745 | if (rio_mport_read_config_32(mport, destid, hopcount, | 1758 | if (rio_mport_read_config_32(mport, destid, hopcount, |
1746 | RIO_PEF_CAR, &rval)) | 1759 | RIO_PEF_CAR, &rval)) |
@@ -1872,8 +1885,8 @@ static int rio_mport_del_riodev(struct mport_cdev_priv *priv, void __user *arg) | |||
1872 | do { | 1885 | do { |
1873 | rdev = rio_get_comptag(dev_info.comptag, rdev); | 1886 | rdev = rio_get_comptag(dev_info.comptag, rdev); |
1874 | if (rdev && rdev->dev.parent == &mport->net->dev && | 1887 | if (rdev && rdev->dev.parent == &mport->net->dev && |
1875 | rdev->destid == (u16)dev_info.destid && | 1888 | rdev->destid == dev_info.destid && |
1876 | rdev->hopcount == (u8)dev_info.hopcount) | 1889 | rdev->hopcount == dev_info.hopcount) |
1877 | break; | 1890 | break; |
1878 | } while (rdev); | 1891 | } while (rdev); |
1879 | } | 1892 | } |
@@ -2146,8 +2159,8 @@ static long mport_cdev_ioctl(struct file *filp, | |||
2146 | return maint_port_idx_get(data, (void __user *)arg); | 2159 | return maint_port_idx_get(data, (void __user *)arg); |
2147 | case RIO_MPORT_GET_PROPERTIES: | 2160 | case RIO_MPORT_GET_PROPERTIES: |
2148 | md->properties.hdid = md->mport->host_deviceid; | 2161 | md->properties.hdid = md->mport->host_deviceid; |
2149 | if (copy_to_user((void __user *)arg, &(data->md->properties), | 2162 | if (copy_to_user((void __user *)arg, &(md->properties), |
2150 | sizeof(data->md->properties))) | 2163 | sizeof(md->properties))) |
2151 | return -EFAULT; | 2164 | return -EFAULT; |
2152 | return 0; | 2165 | return 0; |
2153 | case RIO_ENABLE_DOORBELL_RANGE: | 2166 | case RIO_ENABLE_DOORBELL_RANGE: |
@@ -2159,11 +2172,11 @@ static long mport_cdev_ioctl(struct file *filp, | |||
2159 | case RIO_DISABLE_PORTWRITE_RANGE: | 2172 | case RIO_DISABLE_PORTWRITE_RANGE: |
2160 | return rio_mport_remove_pw_filter(data, (void __user *)arg); | 2173 | return rio_mport_remove_pw_filter(data, (void __user *)arg); |
2161 | case RIO_SET_EVENT_MASK: | 2174 | case RIO_SET_EVENT_MASK: |
2162 | data->event_mask = arg; | 2175 | data->event_mask = (u32)arg; |
2163 | return 0; | 2176 | return 0; |
2164 | case RIO_GET_EVENT_MASK: | 2177 | case RIO_GET_EVENT_MASK: |
2165 | if (copy_to_user((void __user *)arg, &data->event_mask, | 2178 | if (copy_to_user((void __user *)arg, &data->event_mask, |
2166 | sizeof(data->event_mask))) | 2179 | sizeof(u32))) |
2167 | return -EFAULT; | 2180 | return -EFAULT; |
2168 | return 0; | 2181 | return 0; |
2169 | case RIO_MAP_OUTBOUND: | 2182 | case RIO_MAP_OUTBOUND: |
@@ -2374,7 +2387,7 @@ static ssize_t mport_write(struct file *filp, const char __user *buf, | |||
2374 | return -EINVAL; | 2387 | return -EINVAL; |
2375 | 2388 | ||
2376 | ret = rio_mport_send_doorbell(mport, | 2389 | ret = rio_mport_send_doorbell(mport, |
2377 | (u16)event.u.doorbell.rioid, | 2390 | event.u.doorbell.rioid, |
2378 | event.u.doorbell.payload); | 2391 | event.u.doorbell.payload); |
2379 | if (ret < 0) | 2392 | if (ret < 0) |
2380 | return ret; | 2393 | return ret; |
@@ -2421,7 +2434,7 @@ static struct mport_dev *mport_cdev_add(struct rio_mport *mport) | |||
2421 | struct mport_dev *md; | 2434 | struct mport_dev *md; |
2422 | struct rio_mport_attr attr; | 2435 | struct rio_mport_attr attr; |
2423 | 2436 | ||
2424 | md = kzalloc(sizeof(struct mport_dev), GFP_KERNEL); | 2437 | md = kzalloc(sizeof(*md), GFP_KERNEL); |
2425 | if (!md) { | 2438 | if (!md) { |
2426 | rmcd_error("Unable allocate a device object"); | 2439 | rmcd_error("Unable allocate a device object"); |
2427 | return NULL; | 2440 | return NULL; |
@@ -2470,7 +2483,7 @@ static struct mport_dev *mport_cdev_add(struct rio_mport *mport) | |||
2470 | /* The transfer_mode property will be returned through mport query | 2483 | /* The transfer_mode property will be returned through mport query |
2471 | * interface | 2484 | * interface |
2472 | */ | 2485 | */ |
2473 | #ifdef CONFIG_PPC /* for now: only on Freescale's SoCs */ | 2486 | #ifdef CONFIG_FSL_RIO /* for now: only on Freescale's SoCs */ |
2474 | md->properties.transfer_mode |= RIO_TRANSFER_MODE_MAPPED; | 2487 | md->properties.transfer_mode |= RIO_TRANSFER_MODE_MAPPED; |
2475 | #else | 2488 | #else |
2476 | md->properties.transfer_mode |= RIO_TRANSFER_MODE_TRANSFER; | 2489 | md->properties.transfer_mode |= RIO_TRANSFER_MODE_TRANSFER; |
diff --git a/drivers/usb/core/port.c b/drivers/usb/core/port.c index 14718a9ffcfb..460c855be0d0 100644 --- a/drivers/usb/core/port.c +++ b/drivers/usb/core/port.c | |||
@@ -249,18 +249,12 @@ static int usb_port_runtime_suspend(struct device *dev) | |||
249 | 249 | ||
250 | return retval; | 250 | return retval; |
251 | } | 251 | } |
252 | |||
253 | static int usb_port_prepare(struct device *dev) | ||
254 | { | ||
255 | return 1; | ||
256 | } | ||
257 | #endif | 252 | #endif |
258 | 253 | ||
259 | static const struct dev_pm_ops usb_port_pm_ops = { | 254 | static const struct dev_pm_ops usb_port_pm_ops = { |
260 | #ifdef CONFIG_PM | 255 | #ifdef CONFIG_PM |
261 | .runtime_suspend = usb_port_runtime_suspend, | 256 | .runtime_suspend = usb_port_runtime_suspend, |
262 | .runtime_resume = usb_port_runtime_resume, | 257 | .runtime_resume = usb_port_runtime_resume, |
263 | .prepare = usb_port_prepare, | ||
264 | #endif | 258 | #endif |
265 | }; | 259 | }; |
266 | 260 | ||
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c index dcb85e3cd5a7..479187c32571 100644 --- a/drivers/usb/core/usb.c +++ b/drivers/usb/core/usb.c | |||
@@ -312,13 +312,7 @@ static int usb_dev_uevent(struct device *dev, struct kobj_uevent_env *env) | |||
312 | 312 | ||
313 | static int usb_dev_prepare(struct device *dev) | 313 | static int usb_dev_prepare(struct device *dev) |
314 | { | 314 | { |
315 | struct usb_device *udev = to_usb_device(dev); | 315 | return 0; /* Implement eventually? */ |
316 | |||
317 | /* Return 0 if the current wakeup setting is wrong, otherwise 1 */ | ||
318 | if (udev->do_remote_wakeup != device_may_wakeup(dev)) | ||
319 | return 0; | ||
320 | |||
321 | return 1; | ||
322 | } | 316 | } |
323 | 317 | ||
324 | static void usb_dev_complete(struct device *dev) | 318 | static void usb_dev_complete(struct device *dev) |
diff --git a/drivers/usb/musb/jz4740.c b/drivers/usb/musb/jz4740.c index 5e5a8fa005f8..bc8889956d17 100644 --- a/drivers/usb/musb/jz4740.c +++ b/drivers/usb/musb/jz4740.c | |||
@@ -83,9 +83,9 @@ static int jz4740_musb_init(struct musb *musb) | |||
83 | { | 83 | { |
84 | usb_phy_generic_register(); | 84 | usb_phy_generic_register(); |
85 | musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2); | 85 | musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2); |
86 | if (!musb->xceiv) { | 86 | if (IS_ERR(musb->xceiv)) { |
87 | pr_err("HS UDC: no transceiver configured\n"); | 87 | pr_err("HS UDC: no transceiver configured\n"); |
88 | return -ENODEV; | 88 | return PTR_ERR(musb->xceiv); |
89 | } | 89 | } |
90 | 90 | ||
91 | /* Silicon does not implement ConfigData register. | 91 | /* Silicon does not implement ConfigData register. |
diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c index 87bd578799a8..152865b36522 100644 --- a/drivers/usb/musb/musb_gadget.c +++ b/drivers/usb/musb/musb_gadget.c | |||
@@ -1164,12 +1164,12 @@ static int musb_gadget_disable(struct usb_ep *ep) | |||
1164 | musb_writew(epio, MUSB_RXMAXP, 0); | 1164 | musb_writew(epio, MUSB_RXMAXP, 0); |
1165 | } | 1165 | } |
1166 | 1166 | ||
1167 | musb_ep->desc = NULL; | ||
1168 | musb_ep->end_point.desc = NULL; | ||
1169 | |||
1170 | /* abort all pending DMA and requests */ | 1167 | /* abort all pending DMA and requests */ |
1171 | nuke(musb_ep, -ESHUTDOWN); | 1168 | nuke(musb_ep, -ESHUTDOWN); |
1172 | 1169 | ||
1170 | musb_ep->desc = NULL; | ||
1171 | musb_ep->end_point.desc = NULL; | ||
1172 | |||
1173 | schedule_work(&musb->irq_work); | 1173 | schedule_work(&musb->irq_work); |
1174 | 1174 | ||
1175 | spin_unlock_irqrestore(&(musb->lock), flags); | 1175 | spin_unlock_irqrestore(&(musb->lock), flags); |
diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c index 58487a473521..2f8ad7f1f482 100644 --- a/drivers/usb/musb/musb_host.c +++ b/drivers/usb/musb/musb_host.c | |||
@@ -2735,7 +2735,7 @@ static const struct hc_driver musb_hc_driver = { | |||
2735 | .description = "musb-hcd", | 2735 | .description = "musb-hcd", |
2736 | .product_desc = "MUSB HDRC host driver", | 2736 | .product_desc = "MUSB HDRC host driver", |
2737 | .hcd_priv_size = sizeof(struct musb *), | 2737 | .hcd_priv_size = sizeof(struct musb *), |
2738 | .flags = HCD_USB2 | HCD_MEMORY | HCD_BH, | 2738 | .flags = HCD_USB2 | HCD_MEMORY, |
2739 | 2739 | ||
2740 | /* not using irq handler or reset hooks from usbcore, since | 2740 | /* not using irq handler or reset hooks from usbcore, since |
2741 | * those must be shared with peripheral code for OTG configs | 2741 | * those must be shared with peripheral code for OTG configs |
diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c index dd47823bb014..7c9f25e9c422 100644 --- a/drivers/usb/serial/cp210x.c +++ b/drivers/usb/serial/cp210x.c | |||
@@ -109,6 +109,7 @@ static const struct usb_device_id id_table[] = { | |||
109 | { USB_DEVICE(0x10C4, 0x826B) }, /* Cygnal Integrated Products, Inc., Fasttrax GPS demonstration module */ | 109 | { USB_DEVICE(0x10C4, 0x826B) }, /* Cygnal Integrated Products, Inc., Fasttrax GPS demonstration module */ |
110 | { USB_DEVICE(0x10C4, 0x8281) }, /* Nanotec Plug & Drive */ | 110 | { USB_DEVICE(0x10C4, 0x8281) }, /* Nanotec Plug & Drive */ |
111 | { USB_DEVICE(0x10C4, 0x8293) }, /* Telegesis ETRX2USB */ | 111 | { USB_DEVICE(0x10C4, 0x8293) }, /* Telegesis ETRX2USB */ |
112 | { USB_DEVICE(0x10C4, 0x82F4) }, /* Starizona MicroTouch */ | ||
112 | { USB_DEVICE(0x10C4, 0x82F9) }, /* Procyon AVS */ | 113 | { USB_DEVICE(0x10C4, 0x82F9) }, /* Procyon AVS */ |
113 | { USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */ | 114 | { USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */ |
114 | { USB_DEVICE(0x10C4, 0x8382) }, /* Cygnal Integrated Products, Inc. */ | 115 | { USB_DEVICE(0x10C4, 0x8382) }, /* Cygnal Integrated Products, Inc. */ |
@@ -118,6 +119,7 @@ static const struct usb_device_id id_table[] = { | |||
118 | { USB_DEVICE(0x10C4, 0x8418) }, /* IRZ Automation Teleport SG-10 GSM/GPRS Modem */ | 119 | { USB_DEVICE(0x10C4, 0x8418) }, /* IRZ Automation Teleport SG-10 GSM/GPRS Modem */ |
119 | { USB_DEVICE(0x10C4, 0x846E) }, /* BEI USB Sensor Interface (VCP) */ | 120 | { USB_DEVICE(0x10C4, 0x846E) }, /* BEI USB Sensor Interface (VCP) */ |
120 | { USB_DEVICE(0x10C4, 0x8477) }, /* Balluff RFID */ | 121 | { USB_DEVICE(0x10C4, 0x8477) }, /* Balluff RFID */ |
122 | { USB_DEVICE(0x10C4, 0x84B6) }, /* Starizona Hyperion */ | ||
121 | { USB_DEVICE(0x10C4, 0x85EA) }, /* AC-Services IBUS-IF */ | 123 | { USB_DEVICE(0x10C4, 0x85EA) }, /* AC-Services IBUS-IF */ |
122 | { USB_DEVICE(0x10C4, 0x85EB) }, /* AC-Services CIS-IBUS */ | 124 | { USB_DEVICE(0x10C4, 0x85EB) }, /* AC-Services CIS-IBUS */ |
123 | { USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */ | 125 | { USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */ |
@@ -141,6 +143,8 @@ static const struct usb_device_id id_table[] = { | |||
141 | { USB_DEVICE(0x10C4, 0xF004) }, /* Elan Digital Systems USBcount50 */ | 143 | { USB_DEVICE(0x10C4, 0xF004) }, /* Elan Digital Systems USBcount50 */ |
142 | { USB_DEVICE(0x10C5, 0xEA61) }, /* Silicon Labs MobiData GPRS USB Modem */ | 144 | { USB_DEVICE(0x10C5, 0xEA61) }, /* Silicon Labs MobiData GPRS USB Modem */ |
143 | { USB_DEVICE(0x10CE, 0xEA6A) }, /* Silicon Labs MobiData GPRS USB Modem 100EU */ | 145 | { USB_DEVICE(0x10CE, 0xEA6A) }, /* Silicon Labs MobiData GPRS USB Modem 100EU */ |
146 | { USB_DEVICE(0x12B8, 0xEC60) }, /* Link G4 ECU */ | ||
147 | { USB_DEVICE(0x12B8, 0xEC62) }, /* Link G4+ ECU */ | ||
144 | { USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */ | 148 | { USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */ |
145 | { USB_DEVICE(0x1555, 0x0004) }, /* Owen AC4 USB-RS485 Converter */ | 149 | { USB_DEVICE(0x1555, 0x0004) }, /* Owen AC4 USB-RS485 Converter */ |
146 | { USB_DEVICE(0x166A, 0x0201) }, /* Clipsal 5500PACA C-Bus Pascal Automation Controller */ | 150 | { USB_DEVICE(0x166A, 0x0201) }, /* Clipsal 5500PACA C-Bus Pascal Automation Controller */ |
diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c index 5c802d47892c..ca6bfddaacad 100644 --- a/drivers/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c | |||
@@ -1006,7 +1006,7 @@ struct virtqueue *vring_create_virtqueue( | |||
1006 | const char *name) | 1006 | const char *name) |
1007 | { | 1007 | { |
1008 | struct virtqueue *vq; | 1008 | struct virtqueue *vq; |
1009 | void *queue; | 1009 | void *queue = NULL; |
1010 | dma_addr_t dma_addr; | 1010 | dma_addr_t dma_addr; |
1011 | size_t queue_size_in_bytes; | 1011 | size_t queue_size_in_bytes; |
1012 | struct vring vring; | 1012 | struct vring vring; |
diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c index 9781e0dd59d6..d46839f51e73 100644 --- a/drivers/xen/balloon.c +++ b/drivers/xen/balloon.c | |||
@@ -151,6 +151,8 @@ static DECLARE_WAIT_QUEUE_HEAD(balloon_wq); | |||
151 | static void balloon_process(struct work_struct *work); | 151 | static void balloon_process(struct work_struct *work); |
152 | static DECLARE_DELAYED_WORK(balloon_worker, balloon_process); | 152 | static DECLARE_DELAYED_WORK(balloon_worker, balloon_process); |
153 | 153 | ||
154 | static void release_memory_resource(struct resource *resource); | ||
155 | |||
154 | /* When ballooning out (allocating memory to return to Xen) we don't really | 156 | /* When ballooning out (allocating memory to return to Xen) we don't really |
155 | want the kernel to try too hard since that can trigger the oom killer. */ | 157 | want the kernel to try too hard since that can trigger the oom killer. */ |
156 | #define GFP_BALLOON \ | 158 | #define GFP_BALLOON \ |
@@ -267,6 +269,20 @@ static struct resource *additional_memory_resource(phys_addr_t size) | |||
267 | return NULL; | 269 | return NULL; |
268 | } | 270 | } |
269 | 271 | ||
272 | #ifdef CONFIG_SPARSEMEM | ||
273 | { | ||
274 | unsigned long limit = 1UL << (MAX_PHYSMEM_BITS - PAGE_SHIFT); | ||
275 | unsigned long pfn = res->start >> PAGE_SHIFT; | ||
276 | |||
277 | if (pfn > limit) { | ||
278 | pr_err("New System RAM resource outside addressable RAM (%lu > %lu)\n", | ||
279 | pfn, limit); | ||
280 | release_memory_resource(res); | ||
281 | return NULL; | ||
282 | } | ||
283 | } | ||
284 | #endif | ||
285 | |||
270 | return res; | 286 | return res; |
271 | } | 287 | } |
272 | 288 | ||
diff --git a/drivers/xen/evtchn.c b/drivers/xen/evtchn.c index 38272ad24551..f4edd6df3df2 100644 --- a/drivers/xen/evtchn.c +++ b/drivers/xen/evtchn.c | |||
@@ -316,7 +316,6 @@ static int evtchn_resize_ring(struct per_user_data *u) | |||
316 | { | 316 | { |
317 | unsigned int new_size; | 317 | unsigned int new_size; |
318 | evtchn_port_t *new_ring, *old_ring; | 318 | evtchn_port_t *new_ring, *old_ring; |
319 | unsigned int p, c; | ||
320 | 319 | ||
321 | /* | 320 | /* |
322 | * Ensure the ring is large enough to capture all possible | 321 | * Ensure the ring is large enough to capture all possible |
@@ -346,20 +345,17 @@ static int evtchn_resize_ring(struct per_user_data *u) | |||
346 | /* | 345 | /* |
347 | * Copy the old ring contents to the new ring. | 346 | * Copy the old ring contents to the new ring. |
348 | * | 347 | * |
349 | * If the ring contents crosses the end of the current ring, | 348 | * To take care of wrapping, a full ring, and the new index |
350 | * it needs to be copied in two chunks. | 349 | * pointing into the second half, simply copy the old contents |
350 | * twice. | ||
351 | * | 351 | * |
352 | * +---------+ +------------------+ | 352 | * +---------+ +------------------+ |
353 | * |34567 12| -> | 1234567 | | 353 | * |34567 12| -> |34567 1234567 12| |
354 | * +-----p-c-+ +------------------+ | 354 | * +-----p-c-+ +-------c------p---+ |
355 | */ | 355 | */ |
356 | p = evtchn_ring_offset(u, u->ring_prod); | 356 | memcpy(new_ring, old_ring, u->ring_size * sizeof(*u->ring)); |
357 | c = evtchn_ring_offset(u, u->ring_cons); | 357 | memcpy(new_ring + u->ring_size, old_ring, |
358 | if (p < c) { | 358 | u->ring_size * sizeof(*u->ring)); |
359 | memcpy(new_ring + c, u->ring + c, (u->ring_size - c) * sizeof(*u->ring)); | ||
360 | memcpy(new_ring + u->ring_size, u->ring, p * sizeof(*u->ring)); | ||
361 | } else | ||
362 | memcpy(new_ring + c, u->ring + c, (p - c) * sizeof(*u->ring)); | ||
363 | 359 | ||
364 | u->ring = new_ring; | 360 | u->ring = new_ring; |
365 | u->ring_size = new_size; | 361 | u->ring_size = new_size; |
diff --git a/fs/pnode.c b/fs/pnode.c index c524fdddc7fb..99899705b105 100644 --- a/fs/pnode.c +++ b/fs/pnode.c | |||
@@ -198,7 +198,7 @@ static struct mount *next_group(struct mount *m, struct mount *origin) | |||
198 | 198 | ||
199 | /* all accesses are serialized by namespace_sem */ | 199 | /* all accesses are serialized by namespace_sem */ |
200 | static struct user_namespace *user_ns; | 200 | static struct user_namespace *user_ns; |
201 | static struct mount *last_dest, *last_source, *dest_master; | 201 | static struct mount *last_dest, *first_source, *last_source, *dest_master; |
202 | static struct mountpoint *mp; | 202 | static struct mountpoint *mp; |
203 | static struct hlist_head *list; | 203 | static struct hlist_head *list; |
204 | 204 | ||
@@ -221,20 +221,22 @@ static int propagate_one(struct mount *m) | |||
221 | type = CL_MAKE_SHARED; | 221 | type = CL_MAKE_SHARED; |
222 | } else { | 222 | } else { |
223 | struct mount *n, *p; | 223 | struct mount *n, *p; |
224 | bool done; | ||
224 | for (n = m; ; n = p) { | 225 | for (n = m; ; n = p) { |
225 | p = n->mnt_master; | 226 | p = n->mnt_master; |
226 | if (p == dest_master || IS_MNT_MARKED(p)) { | 227 | if (p == dest_master || IS_MNT_MARKED(p)) |
227 | while (last_dest->mnt_master != p) { | ||
228 | last_source = last_source->mnt_master; | ||
229 | last_dest = last_source->mnt_parent; | ||
230 | } | ||
231 | if (!peers(n, last_dest)) { | ||
232 | last_source = last_source->mnt_master; | ||
233 | last_dest = last_source->mnt_parent; | ||
234 | } | ||
235 | break; | 228 | break; |
236 | } | ||
237 | } | 229 | } |
230 | do { | ||
231 | struct mount *parent = last_source->mnt_parent; | ||
232 | if (last_source == first_source) | ||
233 | break; | ||
234 | done = parent->mnt_master == p; | ||
235 | if (done && peers(n, parent)) | ||
236 | break; | ||
237 | last_source = last_source->mnt_master; | ||
238 | } while (!done); | ||
239 | |||
238 | type = CL_SLAVE; | 240 | type = CL_SLAVE; |
239 | /* beginning of peer group among the slaves? */ | 241 | /* beginning of peer group among the slaves? */ |
240 | if (IS_MNT_SHARED(m)) | 242 | if (IS_MNT_SHARED(m)) |
@@ -286,6 +288,7 @@ int propagate_mnt(struct mount *dest_mnt, struct mountpoint *dest_mp, | |||
286 | */ | 288 | */ |
287 | user_ns = current->nsproxy->mnt_ns->user_ns; | 289 | user_ns = current->nsproxy->mnt_ns->user_ns; |
288 | last_dest = dest_mnt; | 290 | last_dest = dest_mnt; |
291 | first_source = source_mnt; | ||
289 | last_source = source_mnt; | 292 | last_source = source_mnt; |
290 | mp = dest_mp; | 293 | mp = dest_mp; |
291 | list = tree_list; | 294 | list = tree_list; |
diff --git a/fs/proc/base.c b/fs/proc/base.c index b1755b23893e..92e37e224cd2 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c | |||
@@ -955,7 +955,8 @@ static ssize_t environ_read(struct file *file, char __user *buf, | |||
955 | struct mm_struct *mm = file->private_data; | 955 | struct mm_struct *mm = file->private_data; |
956 | unsigned long env_start, env_end; | 956 | unsigned long env_start, env_end; |
957 | 957 | ||
958 | if (!mm) | 958 | /* Ensure the process spawned far enough to have an environment. */ |
959 | if (!mm || !mm->env_end) | ||
959 | return 0; | 960 | return 0; |
960 | 961 | ||
961 | page = (char *)__get_free_page(GFP_TEMPORARY); | 962 | page = (char *)__get_free_page(GFP_TEMPORARY); |
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index 14362a84c78e..3a932501d690 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h | |||
@@ -394,13 +394,13 @@ struct acpi_data_node { | |||
394 | 394 | ||
395 | static inline bool is_acpi_node(struct fwnode_handle *fwnode) | 395 | static inline bool is_acpi_node(struct fwnode_handle *fwnode) |
396 | { | 396 | { |
397 | return fwnode && (fwnode->type == FWNODE_ACPI | 397 | return !IS_ERR_OR_NULL(fwnode) && (fwnode->type == FWNODE_ACPI |
398 | || fwnode->type == FWNODE_ACPI_DATA); | 398 | || fwnode->type == FWNODE_ACPI_DATA); |
399 | } | 399 | } |
400 | 400 | ||
401 | static inline bool is_acpi_device_node(struct fwnode_handle *fwnode) | 401 | static inline bool is_acpi_device_node(struct fwnode_handle *fwnode) |
402 | { | 402 | { |
403 | return fwnode && fwnode->type == FWNODE_ACPI; | 403 | return !IS_ERR_OR_NULL(fwnode) && fwnode->type == FWNODE_ACPI; |
404 | } | 404 | } |
405 | 405 | ||
406 | static inline struct acpi_device *to_acpi_device_node(struct fwnode_handle *fwnode) | 406 | static inline struct acpi_device *to_acpi_device_node(struct fwnode_handle *fwnode) |
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h index eeae401a2412..3d5202eda22f 100644 --- a/include/linux/compiler-gcc.h +++ b/include/linux/compiler-gcc.h | |||
@@ -246,7 +246,7 @@ | |||
246 | #define __HAVE_BUILTIN_BSWAP32__ | 246 | #define __HAVE_BUILTIN_BSWAP32__ |
247 | #define __HAVE_BUILTIN_BSWAP64__ | 247 | #define __HAVE_BUILTIN_BSWAP64__ |
248 | #endif | 248 | #endif |
249 | #if GCC_VERSION >= 40800 || (defined(__powerpc__) && GCC_VERSION >= 40600) | 249 | #if GCC_VERSION >= 40800 |
250 | #define __HAVE_BUILTIN_BSWAP16__ | 250 | #define __HAVE_BUILTIN_BSWAP16__ |
251 | #endif | 251 | #endif |
252 | #endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */ | 252 | #endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */ |
diff --git a/include/linux/of.h b/include/linux/of.h index 7fcb681baadf..31758036787c 100644 --- a/include/linux/of.h +++ b/include/linux/of.h | |||
@@ -133,7 +133,7 @@ void of_core_init(void); | |||
133 | 133 | ||
134 | static inline bool is_of_node(struct fwnode_handle *fwnode) | 134 | static inline bool is_of_node(struct fwnode_handle *fwnode) |
135 | { | 135 | { |
136 | return fwnode && fwnode->type == FWNODE_OF; | 136 | return !IS_ERR_OR_NULL(fwnode) && fwnode->type == FWNODE_OF; |
137 | } | 137 | } |
138 | 138 | ||
139 | static inline struct device_node *to_of_node(struct fwnode_handle *fwnode) | 139 | static inline struct device_node *to_of_node(struct fwnode_handle *fwnode) |
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index f4ed4f1b0c77..6b052aa7b5b7 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h | |||
@@ -517,6 +517,27 @@ static inline int PageTransCompound(struct page *page) | |||
517 | } | 517 | } |
518 | 518 | ||
519 | /* | 519 | /* |
520 | * PageTransCompoundMap is the same as PageTransCompound, but it also | ||
521 | * guarantees the primary MMU has the entire compound page mapped | ||
522 | * through pmd_trans_huge, which in turn guarantees the secondary MMUs | ||
523 | * can also map the entire compound page. This allows the secondary | ||
524 | * MMUs to call get_user_pages() only once for each compound page and | ||
525 | * to immediately map the entire compound page with a single secondary | ||
526 | * MMU fault. If there will be a pmd split later, the secondary MMUs | ||
527 | * will get an update through the MMU notifier invalidation through | ||
528 | * split_huge_pmd(). | ||
529 | * | ||
530 | * Unlike PageTransCompound, this is safe to be called only while | ||
531 | * split_huge_pmd() cannot run from under us, like if protected by the | ||
532 | * MMU notifier, otherwise it may result in page->_mapcount < 0 false | ||
533 | * positives. | ||
534 | */ | ||
535 | static inline int PageTransCompoundMap(struct page *page) | ||
536 | { | ||
537 | return PageTransCompound(page) && atomic_read(&page->_mapcount) < 0; | ||
538 | } | ||
539 | |||
540 | /* | ||
520 | * PageTransTail returns true for both transparent huge pages | 541 | * PageTransTail returns true for both transparent huge pages |
521 | * and hugetlbfs pages, so it should only be called when it's known | 542 | * and hugetlbfs pages, so it should only be called when it's known |
522 | * that hugetlbfs pages aren't involved. | 543 | * that hugetlbfs pages aren't involved. |
@@ -559,6 +580,7 @@ static inline int TestClearPageDoubleMap(struct page *page) | |||
559 | #else | 580 | #else |
560 | TESTPAGEFLAG_FALSE(TransHuge) | 581 | TESTPAGEFLAG_FALSE(TransHuge) |
561 | TESTPAGEFLAG_FALSE(TransCompound) | 582 | TESTPAGEFLAG_FALSE(TransCompound) |
583 | TESTPAGEFLAG_FALSE(TransCompoundMap) | ||
562 | TESTPAGEFLAG_FALSE(TransTail) | 584 | TESTPAGEFLAG_FALSE(TransTail) |
563 | TESTPAGEFLAG_FALSE(DoubleMap) | 585 | TESTPAGEFLAG_FALSE(DoubleMap) |
564 | TESTSETFLAG_FALSE(DoubleMap) | 586 | TESTSETFLAG_FALSE(DoubleMap) |
diff --git a/include/linux/swap.h b/include/linux/swap.h index 2b83359c19ca..0a4cd4703f40 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h | |||
@@ -533,6 +533,10 @@ static inline swp_entry_t get_swap_page(void) | |||
533 | #ifdef CONFIG_MEMCG | 533 | #ifdef CONFIG_MEMCG |
534 | static inline int mem_cgroup_swappiness(struct mem_cgroup *memcg) | 534 | static inline int mem_cgroup_swappiness(struct mem_cgroup *memcg) |
535 | { | 535 | { |
536 | /* Cgroup2 doesn't have per-cgroup swappiness */ | ||
537 | if (cgroup_subsys_on_dfl(memory_cgrp_subsys)) | ||
538 | return vm_swappiness; | ||
539 | |||
536 | /* root ? */ | 540 | /* root ? */ |
537 | if (mem_cgroup_disabled() || !memcg->css.parent) | 541 | if (mem_cgroup_disabled() || !memcg->css.parent) |
538 | return vm_swappiness; | 542 | return vm_swappiness; |
diff --git a/include/net/netns/xfrm.h b/include/net/netns/xfrm.h index 730d82ad6ee5..24cd3949a9a4 100644 --- a/include/net/netns/xfrm.h +++ b/include/net/netns/xfrm.h | |||
@@ -80,6 +80,7 @@ struct netns_xfrm { | |||
80 | struct flow_cache flow_cache_global; | 80 | struct flow_cache flow_cache_global; |
81 | atomic_t flow_cache_genid; | 81 | atomic_t flow_cache_genid; |
82 | struct list_head flow_cache_gc_list; | 82 | struct list_head flow_cache_gc_list; |
83 | atomic_t flow_cache_gc_count; | ||
83 | spinlock_t flow_cache_gc_lock; | 84 | spinlock_t flow_cache_gc_lock; |
84 | struct work_struct flow_cache_gc_work; | 85 | struct work_struct flow_cache_gc_work; |
85 | struct work_struct flow_cache_flush_work; | 86 | struct work_struct flow_cache_flush_work; |
diff --git a/include/net/udp_tunnel.h b/include/net/udp_tunnel.h index 4f543262dd81..9d14f707e534 100644 --- a/include/net/udp_tunnel.h +++ b/include/net/udp_tunnel.h | |||
@@ -112,15 +112,6 @@ static inline int udp_tunnel_handle_offloads(struct sk_buff *skb, bool udp_csum) | |||
112 | return iptunnel_handle_offloads(skb, type); | 112 | return iptunnel_handle_offloads(skb, type); |
113 | } | 113 | } |
114 | 114 | ||
115 | static inline void udp_tunnel_gro_complete(struct sk_buff *skb, int nhoff) | ||
116 | { | ||
117 | struct udphdr *uh; | ||
118 | |||
119 | uh = (struct udphdr *)(skb->data + nhoff - sizeof(struct udphdr)); | ||
120 | skb_shinfo(skb)->gso_type |= uh->check ? | ||
121 | SKB_GSO_UDP_TUNNEL_CSUM : SKB_GSO_UDP_TUNNEL; | ||
122 | } | ||
123 | |||
124 | static inline void udp_tunnel_encap_enable(struct socket *sock) | 115 | static inline void udp_tunnel_encap_enable(struct socket *sock) |
125 | { | 116 | { |
126 | #if IS_ENABLED(CONFIG_IPV6) | 117 | #if IS_ENABLED(CONFIG_IPV6) |
diff --git a/include/uapi/asm-generic/unistd.h b/include/uapi/asm-generic/unistd.h index 6e0f5f01734c..c51afb71bfab 100644 --- a/include/uapi/asm-generic/unistd.h +++ b/include/uapi/asm-generic/unistd.h | |||
@@ -718,9 +718,9 @@ __SYSCALL(__NR_mlock2, sys_mlock2) | |||
718 | #define __NR_copy_file_range 285 | 718 | #define __NR_copy_file_range 285 |
719 | __SYSCALL(__NR_copy_file_range, sys_copy_file_range) | 719 | __SYSCALL(__NR_copy_file_range, sys_copy_file_range) |
720 | #define __NR_preadv2 286 | 720 | #define __NR_preadv2 286 |
721 | __SYSCALL(__NR_preadv2, sys_preadv2) | 721 | __SC_COMP(__NR_preadv2, sys_preadv2, compat_sys_preadv2) |
722 | #define __NR_pwritev2 287 | 722 | #define __NR_pwritev2 287 |
723 | __SYSCALL(__NR_pwritev2, sys_pwritev2) | 723 | __SC_COMP(__NR_pwritev2, sys_pwritev2, compat_sys_pwritev2) |
724 | 724 | ||
725 | #undef __NR_syscalls | 725 | #undef __NR_syscalls |
726 | #define __NR_syscalls 288 | 726 | #define __NR_syscalls 288 |
diff --git a/include/uapi/linux/if_macsec.h b/include/uapi/linux/if_macsec.h index 897a94942245..f7d4831a2cc7 100644 --- a/include/uapi/linux/if_macsec.h +++ b/include/uapi/linux/if_macsec.h | |||
@@ -19,6 +19,8 @@ | |||
19 | 19 | ||
20 | #define MACSEC_MAX_KEY_LEN 128 | 20 | #define MACSEC_MAX_KEY_LEN 128 |
21 | 21 | ||
22 | #define MACSEC_KEYID_LEN 16 | ||
23 | |||
22 | #define MACSEC_DEFAULT_CIPHER_ID 0x0080020001000001ULL | 24 | #define MACSEC_DEFAULT_CIPHER_ID 0x0080020001000001ULL |
23 | #define MACSEC_DEFAULT_CIPHER_ALT 0x0080C20001000001ULL | 25 | #define MACSEC_DEFAULT_CIPHER_ALT 0x0080C20001000001ULL |
24 | 26 | ||
@@ -79,7 +81,7 @@ enum macsec_sa_attrs { | |||
79 | MACSEC_SA_ATTR_ACTIVE, /* config/dump, u8 0..1 */ | 81 | MACSEC_SA_ATTR_ACTIVE, /* config/dump, u8 0..1 */ |
80 | MACSEC_SA_ATTR_PN, /* config/dump, u32 */ | 82 | MACSEC_SA_ATTR_PN, /* config/dump, u32 */ |
81 | MACSEC_SA_ATTR_KEY, /* config, data */ | 83 | MACSEC_SA_ATTR_KEY, /* config, data */ |
82 | MACSEC_SA_ATTR_KEYID, /* config/dump, u64 */ | 84 | MACSEC_SA_ATTR_KEYID, /* config/dump, 128-bit */ |
83 | MACSEC_SA_ATTR_STATS, /* dump, nested, macsec_sa_stats_attr */ | 85 | MACSEC_SA_ATTR_STATS, /* dump, nested, macsec_sa_stats_attr */ |
84 | MACSEC_SA_ATTR_PAD, | 86 | MACSEC_SA_ATTR_PAD, |
85 | __MACSEC_SA_ATTR_END, | 87 | __MACSEC_SA_ATTR_END, |
diff --git a/include/linux/rio_mport_cdev.h b/include/uapi/linux/rio_mport_cdev.h index b65d19df76d2..5796bf1d06ad 100644 --- a/include/linux/rio_mport_cdev.h +++ b/include/uapi/linux/rio_mport_cdev.h | |||
@@ -39,16 +39,16 @@ | |||
39 | #ifndef _RIO_MPORT_CDEV_H_ | 39 | #ifndef _RIO_MPORT_CDEV_H_ |
40 | #define _RIO_MPORT_CDEV_H_ | 40 | #define _RIO_MPORT_CDEV_H_ |
41 | 41 | ||
42 | #ifndef __user | 42 | #include <linux/ioctl.h> |
43 | #define __user | 43 | #include <linux/types.h> |
44 | #endif | ||
45 | 44 | ||
46 | struct rio_mport_maint_io { | 45 | struct rio_mport_maint_io { |
47 | uint32_t rioid; /* destID of remote device */ | 46 | __u16 rioid; /* destID of remote device */ |
48 | uint32_t hopcount; /* hopcount to remote device */ | 47 | __u8 hopcount; /* hopcount to remote device */ |
49 | uint32_t offset; /* offset in register space */ | 48 | __u8 pad0[5]; |
50 | size_t length; /* length in bytes */ | 49 | __u32 offset; /* offset in register space */ |
51 | void __user *buffer; /* data buffer */ | 50 | __u32 length; /* length in bytes */ |
51 | __u64 buffer; /* pointer to data buffer */ | ||
52 | }; | 52 | }; |
53 | 53 | ||
54 | /* | 54 | /* |
@@ -66,22 +66,23 @@ struct rio_mport_maint_io { | |||
66 | #define RIO_CAP_MAP_INB (1 << 7) | 66 | #define RIO_CAP_MAP_INB (1 << 7) |
67 | 67 | ||
68 | struct rio_mport_properties { | 68 | struct rio_mport_properties { |
69 | uint16_t hdid; | 69 | __u16 hdid; |
70 | uint8_t id; /* Physical port ID */ | 70 | __u8 id; /* Physical port ID */ |
71 | uint8_t index; | 71 | __u8 index; |
72 | uint32_t flags; | 72 | __u32 flags; |
73 | uint32_t sys_size; /* Default addressing size */ | 73 | __u32 sys_size; /* Default addressing size */ |
74 | uint8_t port_ok; | 74 | __u8 port_ok; |
75 | uint8_t link_speed; | 75 | __u8 link_speed; |
76 | uint8_t link_width; | 76 | __u8 link_width; |
77 | uint32_t dma_max_sge; | 77 | __u8 pad0; |
78 | uint32_t dma_max_size; | 78 | __u32 dma_max_sge; |
79 | uint32_t dma_align; | 79 | __u32 dma_max_size; |
80 | uint32_t transfer_mode; /* Default transfer mode */ | 80 | __u32 dma_align; |
81 | uint32_t cap_sys_size; /* Capable system sizes */ | 81 | __u32 transfer_mode; /* Default transfer mode */ |
82 | uint32_t cap_addr_size; /* Capable addressing sizes */ | 82 | __u32 cap_sys_size; /* Capable system sizes */ |
83 | uint32_t cap_transfer_mode; /* Capable transfer modes */ | 83 | __u32 cap_addr_size; /* Capable addressing sizes */ |
84 | uint32_t cap_mport; /* Mport capabilities */ | 84 | __u32 cap_transfer_mode; /* Capable transfer modes */ |
85 | __u32 cap_mport; /* Mport capabilities */ | ||
85 | }; | 86 | }; |
86 | 87 | ||
87 | /* | 88 | /* |
@@ -93,54 +94,57 @@ struct rio_mport_properties { | |||
93 | #define RIO_PORTWRITE (1 << 1) | 94 | #define RIO_PORTWRITE (1 << 1) |
94 | 95 | ||
95 | struct rio_doorbell { | 96 | struct rio_doorbell { |
96 | uint32_t rioid; | 97 | __u16 rioid; |
97 | uint16_t payload; | 98 | __u16 payload; |
98 | }; | 99 | }; |
99 | 100 | ||
100 | struct rio_doorbell_filter { | 101 | struct rio_doorbell_filter { |
101 | uint32_t rioid; /* 0xffffffff to match all ids */ | 102 | __u16 rioid; /* Use RIO_INVALID_DESTID to match all ids */ |
102 | uint16_t low; | 103 | __u16 low; |
103 | uint16_t high; | 104 | __u16 high; |
105 | __u16 pad0; | ||
104 | }; | 106 | }; |
105 | 107 | ||
106 | 108 | ||
107 | struct rio_portwrite { | 109 | struct rio_portwrite { |
108 | uint32_t payload[16]; | 110 | __u32 payload[16]; |
109 | }; | 111 | }; |
110 | 112 | ||
111 | struct rio_pw_filter { | 113 | struct rio_pw_filter { |
112 | uint32_t mask; | 114 | __u32 mask; |
113 | uint32_t low; | 115 | __u32 low; |
114 | uint32_t high; | 116 | __u32 high; |
117 | __u32 pad0; | ||
115 | }; | 118 | }; |
116 | 119 | ||
117 | /* RapidIO base address for inbound requests set to value defined below | 120 | /* RapidIO base address for inbound requests set to value defined below |
118 | * indicates that no specific RIO-to-local address translation is requested | 121 | * indicates that no specific RIO-to-local address translation is requested |
119 | * and driver should use direct (one-to-one) address mapping. | 122 | * and driver should use direct (one-to-one) address mapping. |
120 | */ | 123 | */ |
121 | #define RIO_MAP_ANY_ADDR (uint64_t)(~((uint64_t) 0)) | 124 | #define RIO_MAP_ANY_ADDR (__u64)(~((__u64) 0)) |
122 | 125 | ||
123 | struct rio_mmap { | 126 | struct rio_mmap { |
124 | uint32_t rioid; | 127 | __u16 rioid; |
125 | uint64_t rio_addr; | 128 | __u16 pad0[3]; |
126 | uint64_t length; | 129 | __u64 rio_addr; |
127 | uint64_t handle; | 130 | __u64 length; |
128 | void *address; | 131 | __u64 handle; |
132 | __u64 address; | ||
129 | }; | 133 | }; |
130 | 134 | ||
131 | struct rio_dma_mem { | 135 | struct rio_dma_mem { |
132 | uint64_t length; /* length of DMA memory */ | 136 | __u64 length; /* length of DMA memory */ |
133 | uint64_t dma_handle; /* handle associated with this memory */ | 137 | __u64 dma_handle; /* handle associated with this memory */ |
134 | void *buffer; /* pointer to this memory */ | 138 | __u64 address; |
135 | }; | 139 | }; |
136 | 140 | ||
137 | |||
138 | struct rio_event { | 141 | struct rio_event { |
139 | unsigned int header; /* event type RIO_DOORBELL or RIO_PORTWRITE */ | 142 | __u32 header; /* event type RIO_DOORBELL or RIO_PORTWRITE */ |
140 | union { | 143 | union { |
141 | struct rio_doorbell doorbell; /* header for RIO_DOORBELL */ | 144 | struct rio_doorbell doorbell; /* header for RIO_DOORBELL */ |
142 | struct rio_portwrite portwrite; /* header for RIO_PORTWRITE */ | 145 | struct rio_portwrite portwrite; /* header for RIO_PORTWRITE */ |
143 | } u; | 146 | } u; |
147 | __u32 pad0; | ||
144 | }; | 148 | }; |
145 | 149 | ||
146 | enum rio_transfer_sync { | 150 | enum rio_transfer_sync { |
@@ -184,35 +188,37 @@ enum rio_exchange { | |||
184 | }; | 188 | }; |
185 | 189 | ||
186 | struct rio_transfer_io { | 190 | struct rio_transfer_io { |
187 | uint32_t rioid; /* Target destID */ | 191 | __u64 rio_addr; /* Address in target's RIO mem space */ |
188 | uint64_t rio_addr; /* Address in target's RIO mem space */ | 192 | __u64 loc_addr; |
189 | enum rio_exchange method; /* Data exchange method */ | 193 | __u64 handle; |
190 | void __user *loc_addr; | 194 | __u64 offset; /* Offset in buffer */ |
191 | uint64_t handle; | 195 | __u64 length; /* Length in bytes */ |
192 | uint64_t offset; /* Offset in buffer */ | 196 | __u16 rioid; /* Target destID */ |
193 | uint64_t length; /* Length in bytes */ | 197 | __u16 method; /* Data exchange method, one of rio_exchange enum */ |
194 | uint32_t completion_code; /* Completion code for this transfer */ | 198 | __u32 completion_code; /* Completion code for this transfer */ |
195 | }; | 199 | }; |
196 | 200 | ||
197 | struct rio_transaction { | 201 | struct rio_transaction { |
198 | uint32_t transfer_mode; /* Data transfer mode */ | 202 | __u64 block; /* Pointer to array of <count> transfers */ |
199 | enum rio_transfer_sync sync; /* Synchronization method */ | 203 | __u32 count; /* Number of transfers */ |
200 | enum rio_transfer_dir dir; /* Transfer direction */ | 204 | __u32 transfer_mode; /* Data transfer mode */ |
201 | size_t count; /* Number of transfers */ | 205 | __u16 sync; /* Synch method, one of rio_transfer_sync enum */ |
202 | struct rio_transfer_io __user *block; /* Array of <count> transfers */ | 206 | __u16 dir; /* Transfer direction, one of rio_transfer_dir enum */ |
207 | __u32 pad0; | ||
203 | }; | 208 | }; |
204 | 209 | ||
205 | struct rio_async_tx_wait { | 210 | struct rio_async_tx_wait { |
206 | uint32_t token; /* DMA transaction ID token */ | 211 | __u32 token; /* DMA transaction ID token */ |
207 | uint32_t timeout; /* Wait timeout in msec, if 0 use default TO */ | 212 | __u32 timeout; /* Wait timeout in msec, if 0 use default TO */ |
208 | }; | 213 | }; |
209 | 214 | ||
210 | #define RIO_MAX_DEVNAME_SZ 20 | 215 | #define RIO_MAX_DEVNAME_SZ 20 |
211 | 216 | ||
212 | struct rio_rdev_info { | 217 | struct rio_rdev_info { |
213 | uint32_t destid; | 218 | __u16 destid; |
214 | uint8_t hopcount; | 219 | __u8 hopcount; |
215 | uint32_t comptag; | 220 | __u8 pad0; |
221 | __u32 comptag; | ||
216 | char name[RIO_MAX_DEVNAME_SZ + 1]; | 222 | char name[RIO_MAX_DEVNAME_SZ + 1]; |
217 | }; | 223 | }; |
218 | 224 | ||
@@ -220,11 +226,11 @@ struct rio_rdev_info { | |||
220 | #define RIO_MPORT_DRV_MAGIC 'm' | 226 | #define RIO_MPORT_DRV_MAGIC 'm' |
221 | 227 | ||
222 | #define RIO_MPORT_MAINT_HDID_SET \ | 228 | #define RIO_MPORT_MAINT_HDID_SET \ |
223 | _IOW(RIO_MPORT_DRV_MAGIC, 1, uint16_t) | 229 | _IOW(RIO_MPORT_DRV_MAGIC, 1, __u16) |
224 | #define RIO_MPORT_MAINT_COMPTAG_SET \ | 230 | #define RIO_MPORT_MAINT_COMPTAG_SET \ |
225 | _IOW(RIO_MPORT_DRV_MAGIC, 2, uint32_t) | 231 | _IOW(RIO_MPORT_DRV_MAGIC, 2, __u32) |
226 | #define RIO_MPORT_MAINT_PORT_IDX_GET \ | 232 | #define RIO_MPORT_MAINT_PORT_IDX_GET \ |
227 | _IOR(RIO_MPORT_DRV_MAGIC, 3, uint32_t) | 233 | _IOR(RIO_MPORT_DRV_MAGIC, 3, __u32) |
228 | #define RIO_MPORT_GET_PROPERTIES \ | 234 | #define RIO_MPORT_GET_PROPERTIES \ |
229 | _IOR(RIO_MPORT_DRV_MAGIC, 4, struct rio_mport_properties) | 235 | _IOR(RIO_MPORT_DRV_MAGIC, 4, struct rio_mport_properties) |
230 | #define RIO_MPORT_MAINT_READ_LOCAL \ | 236 | #define RIO_MPORT_MAINT_READ_LOCAL \ |
@@ -244,9 +250,9 @@ struct rio_rdev_info { | |||
244 | #define RIO_DISABLE_PORTWRITE_RANGE \ | 250 | #define RIO_DISABLE_PORTWRITE_RANGE \ |
245 | _IOW(RIO_MPORT_DRV_MAGIC, 12, struct rio_pw_filter) | 251 | _IOW(RIO_MPORT_DRV_MAGIC, 12, struct rio_pw_filter) |
246 | #define RIO_SET_EVENT_MASK \ | 252 | #define RIO_SET_EVENT_MASK \ |
247 | _IOW(RIO_MPORT_DRV_MAGIC, 13, unsigned int) | 253 | _IOW(RIO_MPORT_DRV_MAGIC, 13, __u32) |
248 | #define RIO_GET_EVENT_MASK \ | 254 | #define RIO_GET_EVENT_MASK \ |
249 | _IOR(RIO_MPORT_DRV_MAGIC, 14, unsigned int) | 255 | _IOR(RIO_MPORT_DRV_MAGIC, 14, __u32) |
250 | #define RIO_MAP_OUTBOUND \ | 256 | #define RIO_MAP_OUTBOUND \ |
251 | _IOWR(RIO_MPORT_DRV_MAGIC, 15, struct rio_mmap) | 257 | _IOWR(RIO_MPORT_DRV_MAGIC, 15, struct rio_mmap) |
252 | #define RIO_UNMAP_OUTBOUND \ | 258 | #define RIO_UNMAP_OUTBOUND \ |
@@ -254,11 +260,11 @@ struct rio_rdev_info { | |||
254 | #define RIO_MAP_INBOUND \ | 260 | #define RIO_MAP_INBOUND \ |
255 | _IOWR(RIO_MPORT_DRV_MAGIC, 17, struct rio_mmap) | 261 | _IOWR(RIO_MPORT_DRV_MAGIC, 17, struct rio_mmap) |
256 | #define RIO_UNMAP_INBOUND \ | 262 | #define RIO_UNMAP_INBOUND \ |
257 | _IOW(RIO_MPORT_DRV_MAGIC, 18, uint64_t) | 263 | _IOW(RIO_MPORT_DRV_MAGIC, 18, __u64) |
258 | #define RIO_ALLOC_DMA \ | 264 | #define RIO_ALLOC_DMA \ |
259 | _IOWR(RIO_MPORT_DRV_MAGIC, 19, struct rio_dma_mem) | 265 | _IOWR(RIO_MPORT_DRV_MAGIC, 19, struct rio_dma_mem) |
260 | #define RIO_FREE_DMA \ | 266 | #define RIO_FREE_DMA \ |
261 | _IOW(RIO_MPORT_DRV_MAGIC, 20, uint64_t) | 267 | _IOW(RIO_MPORT_DRV_MAGIC, 20, __u64) |
262 | #define RIO_TRANSFER \ | 268 | #define RIO_TRANSFER \ |
263 | _IOWR(RIO_MPORT_DRV_MAGIC, 21, struct rio_transaction) | 269 | _IOWR(RIO_MPORT_DRV_MAGIC, 21, struct rio_transaction) |
264 | #define RIO_WAIT_FOR_ASYNC \ | 270 | #define RIO_WAIT_FOR_ASYNC \ |
diff --git a/include/uapi/linux/swab.h b/include/uapi/linux/swab.h index 3f10e5317b46..8f3a8f606fd9 100644 --- a/include/uapi/linux/swab.h +++ b/include/uapi/linux/swab.h | |||
@@ -45,9 +45,7 @@ | |||
45 | 45 | ||
46 | static inline __attribute_const__ __u16 __fswab16(__u16 val) | 46 | static inline __attribute_const__ __u16 __fswab16(__u16 val) |
47 | { | 47 | { |
48 | #ifdef __HAVE_BUILTIN_BSWAP16__ | 48 | #if defined (__arch_swab16) |
49 | return __builtin_bswap16(val); | ||
50 | #elif defined (__arch_swab16) | ||
51 | return __arch_swab16(val); | 49 | return __arch_swab16(val); |
52 | #else | 50 | #else |
53 | return ___constant_swab16(val); | 51 | return ___constant_swab16(val); |
@@ -56,9 +54,7 @@ static inline __attribute_const__ __u16 __fswab16(__u16 val) | |||
56 | 54 | ||
57 | static inline __attribute_const__ __u32 __fswab32(__u32 val) | 55 | static inline __attribute_const__ __u32 __fswab32(__u32 val) |
58 | { | 56 | { |
59 | #ifdef __HAVE_BUILTIN_BSWAP32__ | 57 | #if defined(__arch_swab32) |
60 | return __builtin_bswap32(val); | ||
61 | #elif defined(__arch_swab32) | ||
62 | return __arch_swab32(val); | 58 | return __arch_swab32(val); |
63 | #else | 59 | #else |
64 | return ___constant_swab32(val); | 60 | return ___constant_swab32(val); |
@@ -67,9 +63,7 @@ static inline __attribute_const__ __u32 __fswab32(__u32 val) | |||
67 | 63 | ||
68 | static inline __attribute_const__ __u64 __fswab64(__u64 val) | 64 | static inline __attribute_const__ __u64 __fswab64(__u64 val) |
69 | { | 65 | { |
70 | #ifdef __HAVE_BUILTIN_BSWAP64__ | 66 | #if defined (__arch_swab64) |
71 | return __builtin_bswap64(val); | ||
72 | #elif defined (__arch_swab64) | ||
73 | return __arch_swab64(val); | 67 | return __arch_swab64(val); |
74 | #elif defined(__SWAB_64_THRU_32__) | 68 | #elif defined(__SWAB_64_THRU_32__) |
75 | __u32 h = val >> 32; | 69 | __u32 h = val >> 32; |
@@ -102,28 +96,40 @@ static inline __attribute_const__ __u32 __fswahb32(__u32 val) | |||
102 | * __swab16 - return a byteswapped 16-bit value | 96 | * __swab16 - return a byteswapped 16-bit value |
103 | * @x: value to byteswap | 97 | * @x: value to byteswap |
104 | */ | 98 | */ |
99 | #ifdef __HAVE_BUILTIN_BSWAP16__ | ||
100 | #define __swab16(x) (__u16)__builtin_bswap16((__u16)(x)) | ||
101 | #else | ||
105 | #define __swab16(x) \ | 102 | #define __swab16(x) \ |
106 | (__builtin_constant_p((__u16)(x)) ? \ | 103 | (__builtin_constant_p((__u16)(x)) ? \ |
107 | ___constant_swab16(x) : \ | 104 | ___constant_swab16(x) : \ |
108 | __fswab16(x)) | 105 | __fswab16(x)) |
106 | #endif | ||
109 | 107 | ||
110 | /** | 108 | /** |
111 | * __swab32 - return a byteswapped 32-bit value | 109 | * __swab32 - return a byteswapped 32-bit value |
112 | * @x: value to byteswap | 110 | * @x: value to byteswap |
113 | */ | 111 | */ |
112 | #ifdef __HAVE_BUILTIN_BSWAP32__ | ||
113 | #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x)) | ||
114 | #else | ||
114 | #define __swab32(x) \ | 115 | #define __swab32(x) \ |
115 | (__builtin_constant_p((__u32)(x)) ? \ | 116 | (__builtin_constant_p((__u32)(x)) ? \ |
116 | ___constant_swab32(x) : \ | 117 | ___constant_swab32(x) : \ |
117 | __fswab32(x)) | 118 | __fswab32(x)) |
119 | #endif | ||
118 | 120 | ||
119 | /** | 121 | /** |
120 | * __swab64 - return a byteswapped 64-bit value | 122 | * __swab64 - return a byteswapped 64-bit value |
121 | * @x: value to byteswap | 123 | * @x: value to byteswap |
122 | */ | 124 | */ |
125 | #ifdef __HAVE_BUILTIN_BSWAP64__ | ||
126 | #define __swab64(x) (__u64)__builtin_bswap64((__u64)(x)) | ||
127 | #else | ||
123 | #define __swab64(x) \ | 128 | #define __swab64(x) \ |
124 | (__builtin_constant_p((__u64)(x)) ? \ | 129 | (__builtin_constant_p((__u64)(x)) ? \ |
125 | ___constant_swab64(x) : \ | 130 | ___constant_swab64(x) : \ |
126 | __fswab64(x)) | 131 | __fswab64(x)) |
132 | #endif | ||
127 | 133 | ||
128 | /** | 134 | /** |
129 | * __swahw32 - return a word-swapped 32-bit value | 135 | * __swahw32 - return a word-swapped 32-bit value |
diff --git a/include/xen/page.h b/include/xen/page.h index 96294ac93755..9dc46cb8a0fd 100644 --- a/include/xen/page.h +++ b/include/xen/page.h | |||
@@ -15,9 +15,9 @@ | |||
15 | */ | 15 | */ |
16 | 16 | ||
17 | #define xen_pfn_to_page(xen_pfn) \ | 17 | #define xen_pfn_to_page(xen_pfn) \ |
18 | ((pfn_to_page(((unsigned long)(xen_pfn) << XEN_PAGE_SHIFT) >> PAGE_SHIFT))) | 18 | (pfn_to_page((unsigned long)(xen_pfn) >> (PAGE_SHIFT - XEN_PAGE_SHIFT))) |
19 | #define page_to_xen_pfn(page) \ | 19 | #define page_to_xen_pfn(page) \ |
20 | (((page_to_pfn(page)) << PAGE_SHIFT) >> XEN_PAGE_SHIFT) | 20 | ((page_to_pfn(page)) << (PAGE_SHIFT - XEN_PAGE_SHIFT)) |
21 | 21 | ||
22 | #define XEN_PFN_PER_PAGE (PAGE_SIZE / XEN_PAGE_SIZE) | 22 | #define XEN_PFN_PER_PAGE (PAGE_SIZE / XEN_PAGE_SIZE) |
23 | 23 | ||
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 8b489fcac37b..d1f7149f8704 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c | |||
@@ -596,17 +596,8 @@ bool sched_can_stop_tick(struct rq *rq) | |||
596 | return false; | 596 | return false; |
597 | 597 | ||
598 | /* | 598 | /* |
599 | * FIFO realtime policy runs the highest priority task (after DEADLINE). | 599 | * If there are more than one RR tasks, we need the tick to effect the |
600 | * Other runnable tasks are of a lower priority. The scheduler tick | 600 | * actual RR behaviour. |
601 | * isn't needed. | ||
602 | */ | ||
603 | fifo_nr_running = rq->rt.rt_nr_running - rq->rt.rr_nr_running; | ||
604 | if (fifo_nr_running) | ||
605 | return true; | ||
606 | |||
607 | /* | ||
608 | * Round-robin realtime tasks time slice with other tasks at the same | ||
609 | * realtime priority. | ||
610 | */ | 601 | */ |
611 | if (rq->rt.rr_nr_running) { | 602 | if (rq->rt.rr_nr_running) { |
612 | if (rq->rt.rr_nr_running == 1) | 603 | if (rq->rt.rr_nr_running == 1) |
@@ -615,8 +606,20 @@ bool sched_can_stop_tick(struct rq *rq) | |||
615 | return false; | 606 | return false; |
616 | } | 607 | } |
617 | 608 | ||
618 | /* Normal multitasking need periodic preemption checks */ | 609 | /* |
619 | if (rq->cfs.nr_running > 1) | 610 | * If there's no RR tasks, but FIFO tasks, we can skip the tick, no |
611 | * forced preemption between FIFO tasks. | ||
612 | */ | ||
613 | fifo_nr_running = rq->rt.rt_nr_running - rq->rt.rr_nr_running; | ||
614 | if (fifo_nr_running) | ||
615 | return true; | ||
616 | |||
617 | /* | ||
618 | * If there are no DL,RR/FIFO tasks, there must only be CFS tasks left; | ||
619 | * if there's more than one we need the tick for involuntary | ||
620 | * preemption. | ||
621 | */ | ||
622 | if (rq->nr_running > 1) | ||
620 | return false; | 623 | return false; |
621 | 624 | ||
622 | return true; | 625 | return true; |
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index ced963049e0a..b7b0760ba6ee 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c | |||
@@ -2113,8 +2113,13 @@ event_create_dir(struct dentry *parent, struct trace_event_file *file) | |||
2113 | trace_create_file("filter", 0644, file->dir, file, | 2113 | trace_create_file("filter", 0644, file->dir, file, |
2114 | &ftrace_event_filter_fops); | 2114 | &ftrace_event_filter_fops); |
2115 | 2115 | ||
2116 | trace_create_file("trigger", 0644, file->dir, file, | 2116 | /* |
2117 | &event_trigger_fops); | 2117 | * Only event directories that can be enabled should have |
2118 | * triggers. | ||
2119 | */ | ||
2120 | if (!(call->flags & TRACE_EVENT_FL_IGNORE_ENABLE)) | ||
2121 | trace_create_file("trigger", 0644, file->dir, file, | ||
2122 | &event_trigger_fops); | ||
2118 | 2123 | ||
2119 | trace_create_file("format", 0444, file->dir, call, | 2124 | trace_create_file("format", 0444, file->dir, call, |
2120 | &ftrace_event_format_fops); | 2125 | &ftrace_event_format_fops); |
diff --git a/lib/stackdepot.c b/lib/stackdepot.c index 9e0b0315a724..53ad6c0831ae 100644 --- a/lib/stackdepot.c +++ b/lib/stackdepot.c | |||
@@ -42,12 +42,14 @@ | |||
42 | 42 | ||
43 | #define DEPOT_STACK_BITS (sizeof(depot_stack_handle_t) * 8) | 43 | #define DEPOT_STACK_BITS (sizeof(depot_stack_handle_t) * 8) |
44 | 44 | ||
45 | #define STACK_ALLOC_NULL_PROTECTION_BITS 1 | ||
45 | #define STACK_ALLOC_ORDER 2 /* 'Slab' size order for stack depot, 4 pages */ | 46 | #define STACK_ALLOC_ORDER 2 /* 'Slab' size order for stack depot, 4 pages */ |
46 | #define STACK_ALLOC_SIZE (1LL << (PAGE_SHIFT + STACK_ALLOC_ORDER)) | 47 | #define STACK_ALLOC_SIZE (1LL << (PAGE_SHIFT + STACK_ALLOC_ORDER)) |
47 | #define STACK_ALLOC_ALIGN 4 | 48 | #define STACK_ALLOC_ALIGN 4 |
48 | #define STACK_ALLOC_OFFSET_BITS (STACK_ALLOC_ORDER + PAGE_SHIFT - \ | 49 | #define STACK_ALLOC_OFFSET_BITS (STACK_ALLOC_ORDER + PAGE_SHIFT - \ |
49 | STACK_ALLOC_ALIGN) | 50 | STACK_ALLOC_ALIGN) |
50 | #define STACK_ALLOC_INDEX_BITS (DEPOT_STACK_BITS - STACK_ALLOC_OFFSET_BITS) | 51 | #define STACK_ALLOC_INDEX_BITS (DEPOT_STACK_BITS - \ |
52 | STACK_ALLOC_NULL_PROTECTION_BITS - STACK_ALLOC_OFFSET_BITS) | ||
51 | #define STACK_ALLOC_SLABS_CAP 1024 | 53 | #define STACK_ALLOC_SLABS_CAP 1024 |
52 | #define STACK_ALLOC_MAX_SLABS \ | 54 | #define STACK_ALLOC_MAX_SLABS \ |
53 | (((1LL << (STACK_ALLOC_INDEX_BITS)) < STACK_ALLOC_SLABS_CAP) ? \ | 55 | (((1LL << (STACK_ALLOC_INDEX_BITS)) < STACK_ALLOC_SLABS_CAP) ? \ |
@@ -59,6 +61,7 @@ union handle_parts { | |||
59 | struct { | 61 | struct { |
60 | u32 slabindex : STACK_ALLOC_INDEX_BITS; | 62 | u32 slabindex : STACK_ALLOC_INDEX_BITS; |
61 | u32 offset : STACK_ALLOC_OFFSET_BITS; | 63 | u32 offset : STACK_ALLOC_OFFSET_BITS; |
64 | u32 valid : STACK_ALLOC_NULL_PROTECTION_BITS; | ||
62 | }; | 65 | }; |
63 | }; | 66 | }; |
64 | 67 | ||
@@ -136,6 +139,7 @@ static struct stack_record *depot_alloc_stack(unsigned long *entries, int size, | |||
136 | stack->size = size; | 139 | stack->size = size; |
137 | stack->handle.slabindex = depot_index; | 140 | stack->handle.slabindex = depot_index; |
138 | stack->handle.offset = depot_offset >> STACK_ALLOC_ALIGN; | 141 | stack->handle.offset = depot_offset >> STACK_ALLOC_ALIGN; |
142 | stack->handle.valid = 1; | ||
139 | memcpy(stack->entries, entries, size * sizeof(unsigned long)); | 143 | memcpy(stack->entries, entries, size * sizeof(unsigned long)); |
140 | depot_offset += required_size; | 144 | depot_offset += required_size; |
141 | 145 | ||
diff --git a/mm/compaction.c b/mm/compaction.c index ccf97b02b85f..8fa254043801 100644 --- a/mm/compaction.c +++ b/mm/compaction.c | |||
@@ -852,16 +852,8 @@ isolate_migratepages_range(struct compact_control *cc, unsigned long start_pfn, | |||
852 | pfn = isolate_migratepages_block(cc, pfn, block_end_pfn, | 852 | pfn = isolate_migratepages_block(cc, pfn, block_end_pfn, |
853 | ISOLATE_UNEVICTABLE); | 853 | ISOLATE_UNEVICTABLE); |
854 | 854 | ||
855 | /* | 855 | if (!pfn) |
856 | * In case of fatal failure, release everything that might | ||
857 | * have been isolated in the previous iteration, and signal | ||
858 | * the failure back to caller. | ||
859 | */ | ||
860 | if (!pfn) { | ||
861 | putback_movable_pages(&cc->migratepages); | ||
862 | cc->nr_migratepages = 0; | ||
863 | break; | 856 | break; |
864 | } | ||
865 | 857 | ||
866 | if (cc->nr_migratepages == COMPACT_CLUSTER_MAX) | 858 | if (cc->nr_migratepages == COMPACT_CLUSTER_MAX) |
867 | break; | 859 | break; |
@@ -1741,7 +1733,7 @@ void compaction_unregister_node(struct node *node) | |||
1741 | 1733 | ||
1742 | static inline bool kcompactd_work_requested(pg_data_t *pgdat) | 1734 | static inline bool kcompactd_work_requested(pg_data_t *pgdat) |
1743 | { | 1735 | { |
1744 | return pgdat->kcompactd_max_order > 0; | 1736 | return pgdat->kcompactd_max_order > 0 || kthread_should_stop(); |
1745 | } | 1737 | } |
1746 | 1738 | ||
1747 | static bool kcompactd_node_suitable(pg_data_t *pgdat) | 1739 | static bool kcompactd_node_suitable(pg_data_t *pgdat) |
@@ -1805,6 +1797,8 @@ static void kcompactd_do_work(pg_data_t *pgdat) | |||
1805 | INIT_LIST_HEAD(&cc.freepages); | 1797 | INIT_LIST_HEAD(&cc.freepages); |
1806 | INIT_LIST_HEAD(&cc.migratepages); | 1798 | INIT_LIST_HEAD(&cc.migratepages); |
1807 | 1799 | ||
1800 | if (kthread_should_stop()) | ||
1801 | return; | ||
1808 | status = compact_zone(zone, &cc); | 1802 | status = compact_zone(zone, &cc); |
1809 | 1803 | ||
1810 | if (zone_watermark_ok(zone, cc.order, low_wmark_pages(zone), | 1804 | if (zone_watermark_ok(zone, cc.order, low_wmark_pages(zone), |
diff --git a/mm/huge_memory.c b/mm/huge_memory.c index df67b53ae3c5..f7daa7de8f48 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c | |||
@@ -3452,7 +3452,7 @@ next: | |||
3452 | } | 3452 | } |
3453 | } | 3453 | } |
3454 | 3454 | ||
3455 | pr_info("%lu of %lu THP split", split, total); | 3455 | pr_info("%lu of %lu THP split\n", split, total); |
3456 | 3456 | ||
3457 | return 0; | 3457 | return 0; |
3458 | } | 3458 | } |
@@ -3463,7 +3463,7 @@ static int __init split_huge_pages_debugfs(void) | |||
3463 | { | 3463 | { |
3464 | void *ret; | 3464 | void *ret; |
3465 | 3465 | ||
3466 | ret = debugfs_create_file("split_huge_pages", 0644, NULL, NULL, | 3466 | ret = debugfs_create_file("split_huge_pages", 0200, NULL, NULL, |
3467 | &split_huge_pages_fops); | 3467 | &split_huge_pages_fops); |
3468 | if (!ret) | 3468 | if (!ret) |
3469 | pr_warn("Failed to create split_huge_pages in debugfs"); | 3469 | pr_warn("Failed to create split_huge_pages in debugfs"); |
diff --git a/mm/memory.c b/mm/memory.c index 305537fc8640..52c218e2b724 100644 --- a/mm/memory.c +++ b/mm/memory.c | |||
@@ -1222,15 +1222,8 @@ static inline unsigned long zap_pmd_range(struct mmu_gather *tlb, | |||
1222 | next = pmd_addr_end(addr, end); | 1222 | next = pmd_addr_end(addr, end); |
1223 | if (pmd_trans_huge(*pmd) || pmd_devmap(*pmd)) { | 1223 | if (pmd_trans_huge(*pmd) || pmd_devmap(*pmd)) { |
1224 | if (next - addr != HPAGE_PMD_SIZE) { | 1224 | if (next - addr != HPAGE_PMD_SIZE) { |
1225 | #ifdef CONFIG_DEBUG_VM | 1225 | VM_BUG_ON_VMA(vma_is_anonymous(vma) && |
1226 | if (!rwsem_is_locked(&tlb->mm->mmap_sem)) { | 1226 | !rwsem_is_locked(&tlb->mm->mmap_sem), vma); |
1227 | pr_err("%s: mmap_sem is unlocked! addr=0x%lx end=0x%lx vma->vm_start=0x%lx vma->vm_end=0x%lx\n", | ||
1228 | __func__, addr, end, | ||
1229 | vma->vm_start, | ||
1230 | vma->vm_end); | ||
1231 | BUG(); | ||
1232 | } | ||
1233 | #endif | ||
1234 | split_huge_pmd(vma, pmd, addr); | 1227 | split_huge_pmd(vma, pmd, addr); |
1235 | } else if (zap_huge_pmd(tlb, vma, pmd, addr)) | 1228 | } else if (zap_huge_pmd(tlb, vma, pmd, addr)) |
1236 | goto next; | 1229 | goto next; |
diff --git a/mm/page-writeback.c b/mm/page-writeback.c index 999792d35ccc..bc5149d5ec38 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c | |||
@@ -1910,7 +1910,8 @@ bool wb_over_bg_thresh(struct bdi_writeback *wb) | |||
1910 | if (gdtc->dirty > gdtc->bg_thresh) | 1910 | if (gdtc->dirty > gdtc->bg_thresh) |
1911 | return true; | 1911 | return true; |
1912 | 1912 | ||
1913 | if (wb_stat(wb, WB_RECLAIMABLE) > __wb_calc_thresh(gdtc)) | 1913 | if (wb_stat(wb, WB_RECLAIMABLE) > |
1914 | wb_calc_thresh(gdtc->wb, gdtc->bg_thresh)) | ||
1914 | return true; | 1915 | return true; |
1915 | 1916 | ||
1916 | if (mdtc) { | 1917 | if (mdtc) { |
@@ -1924,7 +1925,8 @@ bool wb_over_bg_thresh(struct bdi_writeback *wb) | |||
1924 | if (mdtc->dirty > mdtc->bg_thresh) | 1925 | if (mdtc->dirty > mdtc->bg_thresh) |
1925 | return true; | 1926 | return true; |
1926 | 1927 | ||
1927 | if (wb_stat(wb, WB_RECLAIMABLE) > __wb_calc_thresh(mdtc)) | 1928 | if (wb_stat(wb, WB_RECLAIMABLE) > |
1929 | wb_calc_thresh(mdtc->wb, mdtc->bg_thresh)) | ||
1928 | return true; | 1930 | return true; |
1929 | } | 1931 | } |
1930 | 1932 | ||
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 59de90d5d3a3..c1069efcc4d7 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -6485,7 +6485,7 @@ int __meminit init_per_zone_wmark_min(void) | |||
6485 | setup_per_zone_inactive_ratio(); | 6485 | setup_per_zone_inactive_ratio(); |
6486 | return 0; | 6486 | return 0; |
6487 | } | 6487 | } |
6488 | module_init(init_per_zone_wmark_min) | 6488 | core_initcall(init_per_zone_wmark_min) |
6489 | 6489 | ||
6490 | /* | 6490 | /* |
6491 | * min_free_kbytes_sysctl_handler - just a wrapper around proc_dointvec() so | 6491 | * min_free_kbytes_sysctl_handler - just a wrapper around proc_dointvec() so |
diff --git a/mm/zswap.c b/mm/zswap.c index 91dad80d068b..de0f119b1780 100644 --- a/mm/zswap.c +++ b/mm/zswap.c | |||
@@ -170,6 +170,8 @@ static struct zswap_tree *zswap_trees[MAX_SWAPFILES]; | |||
170 | static LIST_HEAD(zswap_pools); | 170 | static LIST_HEAD(zswap_pools); |
171 | /* protects zswap_pools list modification */ | 171 | /* protects zswap_pools list modification */ |
172 | static DEFINE_SPINLOCK(zswap_pools_lock); | 172 | static DEFINE_SPINLOCK(zswap_pools_lock); |
173 | /* pool counter to provide unique names to zpool */ | ||
174 | static atomic_t zswap_pools_count = ATOMIC_INIT(0); | ||
173 | 175 | ||
174 | /* used by param callback function */ | 176 | /* used by param callback function */ |
175 | static bool zswap_init_started; | 177 | static bool zswap_init_started; |
@@ -565,6 +567,7 @@ static struct zswap_pool *zswap_pool_find_get(char *type, char *compressor) | |||
565 | static struct zswap_pool *zswap_pool_create(char *type, char *compressor) | 567 | static struct zswap_pool *zswap_pool_create(char *type, char *compressor) |
566 | { | 568 | { |
567 | struct zswap_pool *pool; | 569 | struct zswap_pool *pool; |
570 | char name[38]; /* 'zswap' + 32 char (max) num + \0 */ | ||
568 | gfp_t gfp = __GFP_NORETRY | __GFP_NOWARN | __GFP_KSWAPD_RECLAIM; | 571 | gfp_t gfp = __GFP_NORETRY | __GFP_NOWARN | __GFP_KSWAPD_RECLAIM; |
569 | 572 | ||
570 | pool = kzalloc(sizeof(*pool), GFP_KERNEL); | 573 | pool = kzalloc(sizeof(*pool), GFP_KERNEL); |
@@ -573,7 +576,10 @@ static struct zswap_pool *zswap_pool_create(char *type, char *compressor) | |||
573 | return NULL; | 576 | return NULL; |
574 | } | 577 | } |
575 | 578 | ||
576 | pool->zpool = zpool_create_pool(type, "zswap", gfp, &zswap_zpool_ops); | 579 | /* unique name for each pool specifically required by zsmalloc */ |
580 | snprintf(name, 38, "zswap%x", atomic_inc_return(&zswap_pools_count)); | ||
581 | |||
582 | pool->zpool = zpool_create_pool(type, name, gfp, &zswap_zpool_ops); | ||
577 | if (!pool->zpool) { | 583 | if (!pool->zpool) { |
578 | pr_err("%s zpool not available\n", type); | 584 | pr_err("%s zpool not available\n", type); |
579 | goto error; | 585 | goto error; |
diff --git a/net/bridge/br_ioctl.c b/net/bridge/br_ioctl.c index f8fc6241469a..d99b2009771a 100644 --- a/net/bridge/br_ioctl.c +++ b/net/bridge/br_ioctl.c | |||
@@ -21,18 +21,19 @@ | |||
21 | #include <asm/uaccess.h> | 21 | #include <asm/uaccess.h> |
22 | #include "br_private.h" | 22 | #include "br_private.h" |
23 | 23 | ||
24 | /* called with RTNL */ | ||
25 | static int get_bridge_ifindices(struct net *net, int *indices, int num) | 24 | static int get_bridge_ifindices(struct net *net, int *indices, int num) |
26 | { | 25 | { |
27 | struct net_device *dev; | 26 | struct net_device *dev; |
28 | int i = 0; | 27 | int i = 0; |
29 | 28 | ||
30 | for_each_netdev(net, dev) { | 29 | rcu_read_lock(); |
30 | for_each_netdev_rcu(net, dev) { | ||
31 | if (i >= num) | 31 | if (i >= num) |
32 | break; | 32 | break; |
33 | if (dev->priv_flags & IFF_EBRIDGE) | 33 | if (dev->priv_flags & IFF_EBRIDGE) |
34 | indices[i++] = dev->ifindex; | 34 | indices[i++] = dev->ifindex; |
35 | } | 35 | } |
36 | rcu_read_unlock(); | ||
36 | 37 | ||
37 | return i; | 38 | return i; |
38 | } | 39 | } |
diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c index 191ea66e4d92..6852f3c7009c 100644 --- a/net/bridge/br_multicast.c +++ b/net/bridge/br_multicast.c | |||
@@ -1279,6 +1279,7 @@ static int br_ip4_multicast_query(struct net_bridge *br, | |||
1279 | struct br_ip saddr; | 1279 | struct br_ip saddr; |
1280 | unsigned long max_delay; | 1280 | unsigned long max_delay; |
1281 | unsigned long now = jiffies; | 1281 | unsigned long now = jiffies; |
1282 | unsigned int offset = skb_transport_offset(skb); | ||
1282 | __be32 group; | 1283 | __be32 group; |
1283 | int err = 0; | 1284 | int err = 0; |
1284 | 1285 | ||
@@ -1289,14 +1290,14 @@ static int br_ip4_multicast_query(struct net_bridge *br, | |||
1289 | 1290 | ||
1290 | group = ih->group; | 1291 | group = ih->group; |
1291 | 1292 | ||
1292 | if (skb->len == sizeof(*ih)) { | 1293 | if (skb->len == offset + sizeof(*ih)) { |
1293 | max_delay = ih->code * (HZ / IGMP_TIMER_SCALE); | 1294 | max_delay = ih->code * (HZ / IGMP_TIMER_SCALE); |
1294 | 1295 | ||
1295 | if (!max_delay) { | 1296 | if (!max_delay) { |
1296 | max_delay = 10 * HZ; | 1297 | max_delay = 10 * HZ; |
1297 | group = 0; | 1298 | group = 0; |
1298 | } | 1299 | } |
1299 | } else if (skb->len >= sizeof(*ih3)) { | 1300 | } else if (skb->len >= offset + sizeof(*ih3)) { |
1300 | ih3 = igmpv3_query_hdr(skb); | 1301 | ih3 = igmpv3_query_hdr(skb); |
1301 | if (ih3->nsrcs) | 1302 | if (ih3->nsrcs) |
1302 | goto out; | 1303 | goto out; |
@@ -1357,6 +1358,7 @@ static int br_ip6_multicast_query(struct net_bridge *br, | |||
1357 | struct br_ip saddr; | 1358 | struct br_ip saddr; |
1358 | unsigned long max_delay; | 1359 | unsigned long max_delay; |
1359 | unsigned long now = jiffies; | 1360 | unsigned long now = jiffies; |
1361 | unsigned int offset = skb_transport_offset(skb); | ||
1360 | const struct in6_addr *group = NULL; | 1362 | const struct in6_addr *group = NULL; |
1361 | bool is_general_query; | 1363 | bool is_general_query; |
1362 | int err = 0; | 1364 | int err = 0; |
@@ -1366,8 +1368,8 @@ static int br_ip6_multicast_query(struct net_bridge *br, | |||
1366 | (port && port->state == BR_STATE_DISABLED)) | 1368 | (port && port->state == BR_STATE_DISABLED)) |
1367 | goto out; | 1369 | goto out; |
1368 | 1370 | ||
1369 | if (skb->len == sizeof(*mld)) { | 1371 | if (skb->len == offset + sizeof(*mld)) { |
1370 | if (!pskb_may_pull(skb, sizeof(*mld))) { | 1372 | if (!pskb_may_pull(skb, offset + sizeof(*mld))) { |
1371 | err = -EINVAL; | 1373 | err = -EINVAL; |
1372 | goto out; | 1374 | goto out; |
1373 | } | 1375 | } |
@@ -1376,7 +1378,7 @@ static int br_ip6_multicast_query(struct net_bridge *br, | |||
1376 | if (max_delay) | 1378 | if (max_delay) |
1377 | group = &mld->mld_mca; | 1379 | group = &mld->mld_mca; |
1378 | } else { | 1380 | } else { |
1379 | if (!pskb_may_pull(skb, sizeof(*mld2q))) { | 1381 | if (!pskb_may_pull(skb, offset + sizeof(*mld2q))) { |
1380 | err = -EINVAL; | 1382 | err = -EINVAL; |
1381 | goto out; | 1383 | goto out; |
1382 | } | 1384 | } |
diff --git a/net/core/flow.c b/net/core/flow.c index 1033725be40b..3937b1b68d5b 100644 --- a/net/core/flow.c +++ b/net/core/flow.c | |||
@@ -92,8 +92,11 @@ static void flow_cache_gc_task(struct work_struct *work) | |||
92 | list_splice_tail_init(&xfrm->flow_cache_gc_list, &gc_list); | 92 | list_splice_tail_init(&xfrm->flow_cache_gc_list, &gc_list); |
93 | spin_unlock_bh(&xfrm->flow_cache_gc_lock); | 93 | spin_unlock_bh(&xfrm->flow_cache_gc_lock); |
94 | 94 | ||
95 | list_for_each_entry_safe(fce, n, &gc_list, u.gc_list) | 95 | list_for_each_entry_safe(fce, n, &gc_list, u.gc_list) { |
96 | flow_entry_kill(fce, xfrm); | 96 | flow_entry_kill(fce, xfrm); |
97 | atomic_dec(&xfrm->flow_cache_gc_count); | ||
98 | WARN_ON(atomic_read(&xfrm->flow_cache_gc_count) < 0); | ||
99 | } | ||
97 | } | 100 | } |
98 | 101 | ||
99 | static void flow_cache_queue_garbage(struct flow_cache_percpu *fcp, | 102 | static void flow_cache_queue_garbage(struct flow_cache_percpu *fcp, |
@@ -101,6 +104,7 @@ static void flow_cache_queue_garbage(struct flow_cache_percpu *fcp, | |||
101 | struct netns_xfrm *xfrm) | 104 | struct netns_xfrm *xfrm) |
102 | { | 105 | { |
103 | if (deleted) { | 106 | if (deleted) { |
107 | atomic_add(deleted, &xfrm->flow_cache_gc_count); | ||
104 | fcp->hash_count -= deleted; | 108 | fcp->hash_count -= deleted; |
105 | spin_lock_bh(&xfrm->flow_cache_gc_lock); | 109 | spin_lock_bh(&xfrm->flow_cache_gc_lock); |
106 | list_splice_tail(gc_list, &xfrm->flow_cache_gc_list); | 110 | list_splice_tail(gc_list, &xfrm->flow_cache_gc_list); |
@@ -232,6 +236,13 @@ flow_cache_lookup(struct net *net, const struct flowi *key, u16 family, u8 dir, | |||
232 | if (fcp->hash_count > fc->high_watermark) | 236 | if (fcp->hash_count > fc->high_watermark) |
233 | flow_cache_shrink(fc, fcp); | 237 | flow_cache_shrink(fc, fcp); |
234 | 238 | ||
239 | if (fcp->hash_count > 2 * fc->high_watermark || | ||
240 | atomic_read(&net->xfrm.flow_cache_gc_count) > fc->high_watermark) { | ||
241 | atomic_inc(&net->xfrm.flow_cache_genid); | ||
242 | flo = ERR_PTR(-ENOBUFS); | ||
243 | goto ret_object; | ||
244 | } | ||
245 | |||
235 | fle = kmem_cache_alloc(flow_cachep, GFP_ATOMIC); | 246 | fle = kmem_cache_alloc(flow_cachep, GFP_ATOMIC); |
236 | if (fle) { | 247 | if (fle) { |
237 | fle->net = net; | 248 | fle->net = net; |
@@ -446,6 +457,7 @@ int flow_cache_init(struct net *net) | |||
446 | INIT_WORK(&net->xfrm.flow_cache_gc_work, flow_cache_gc_task); | 457 | INIT_WORK(&net->xfrm.flow_cache_gc_work, flow_cache_gc_task); |
447 | INIT_WORK(&net->xfrm.flow_cache_flush_work, flow_cache_flush_task); | 458 | INIT_WORK(&net->xfrm.flow_cache_flush_work, flow_cache_flush_task); |
448 | mutex_init(&net->xfrm.flow_flush_sem); | 459 | mutex_init(&net->xfrm.flow_flush_sem); |
460 | atomic_set(&net->xfrm.flow_cache_gc_count, 0); | ||
449 | 461 | ||
450 | fc->hash_shift = 10; | 462 | fc->hash_shift = 10; |
451 | fc->low_watermark = 2 * flow_cache_hash_size(fc); | 463 | fc->low_watermark = 2 * flow_cache_hash_size(fc); |
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index d471f097c739..d69c4644f8f2 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c | |||
@@ -1173,14 +1173,16 @@ static noinline_for_stack int rtnl_fill_vfinfo(struct sk_buff *skb, | |||
1173 | 1173 | ||
1174 | static int rtnl_fill_link_ifmap(struct sk_buff *skb, struct net_device *dev) | 1174 | static int rtnl_fill_link_ifmap(struct sk_buff *skb, struct net_device *dev) |
1175 | { | 1175 | { |
1176 | struct rtnl_link_ifmap map = { | 1176 | struct rtnl_link_ifmap map; |
1177 | .mem_start = dev->mem_start, | 1177 | |
1178 | .mem_end = dev->mem_end, | 1178 | memset(&map, 0, sizeof(map)); |
1179 | .base_addr = dev->base_addr, | 1179 | map.mem_start = dev->mem_start; |
1180 | .irq = dev->irq, | 1180 | map.mem_end = dev->mem_end; |
1181 | .dma = dev->dma, | 1181 | map.base_addr = dev->base_addr; |
1182 | .port = dev->if_port, | 1182 | map.irq = dev->irq; |
1183 | }; | 1183 | map.dma = dev->dma; |
1184 | map.port = dev->if_port; | ||
1185 | |||
1184 | if (nla_put_64bit(skb, IFLA_MAP, sizeof(map), &map, IFLA_PAD)) | 1186 | if (nla_put_64bit(skb, IFLA_MAP, sizeof(map), &map, IFLA_PAD)) |
1185 | return -EMSGSIZE; | 1187 | return -EMSGSIZE; |
1186 | 1188 | ||
diff --git a/net/ipv4/fou.c b/net/ipv4/fou.c index 7ac5ec87b004..eeec7d60e5fd 100644 --- a/net/ipv4/fou.c +++ b/net/ipv4/fou.c | |||
@@ -227,8 +227,6 @@ static int fou_gro_complete(struct sock *sk, struct sk_buff *skb, | |||
227 | int err = -ENOSYS; | 227 | int err = -ENOSYS; |
228 | const struct net_offload **offloads; | 228 | const struct net_offload **offloads; |
229 | 229 | ||
230 | udp_tunnel_gro_complete(skb, nhoff); | ||
231 | |||
232 | rcu_read_lock(); | 230 | rcu_read_lock(); |
233 | offloads = NAPI_GRO_CB(skb)->is_ipv6 ? inet6_offloads : inet_offloads; | 231 | offloads = NAPI_GRO_CB(skb)->is_ipv6 ? inet6_offloads : inet_offloads; |
234 | ops = rcu_dereference(offloads[proto]); | 232 | ops = rcu_dereference(offloads[proto]); |
@@ -237,6 +235,8 @@ static int fou_gro_complete(struct sock *sk, struct sk_buff *skb, | |||
237 | 235 | ||
238 | err = ops->callbacks.gro_complete(skb, nhoff); | 236 | err = ops->callbacks.gro_complete(skb, nhoff); |
239 | 237 | ||
238 | skb_set_inner_mac_header(skb, nhoff); | ||
239 | |||
240 | out_unlock: | 240 | out_unlock: |
241 | rcu_read_unlock(); | 241 | rcu_read_unlock(); |
242 | 242 | ||
@@ -412,6 +412,8 @@ static int gue_gro_complete(struct sock *sk, struct sk_buff *skb, int nhoff) | |||
412 | 412 | ||
413 | err = ops->callbacks.gro_complete(skb, nhoff + guehlen); | 413 | err = ops->callbacks.gro_complete(skb, nhoff + guehlen); |
414 | 414 | ||
415 | skb_set_inner_mac_header(skb, nhoff + guehlen); | ||
416 | |||
415 | out_unlock: | 417 | out_unlock: |
416 | rcu_read_unlock(); | 418 | rcu_read_unlock(); |
417 | return err; | 419 | return err; |
diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c index 5cf10b777b7e..a917903d5e97 100644 --- a/net/ipv4/ip_vti.c +++ b/net/ipv4/ip_vti.c | |||
@@ -156,6 +156,7 @@ static netdev_tx_t vti_xmit(struct sk_buff *skb, struct net_device *dev, | |||
156 | struct dst_entry *dst = skb_dst(skb); | 156 | struct dst_entry *dst = skb_dst(skb); |
157 | struct net_device *tdev; /* Device to other host */ | 157 | struct net_device *tdev; /* Device to other host */ |
158 | int err; | 158 | int err; |
159 | int mtu; | ||
159 | 160 | ||
160 | if (!dst) { | 161 | if (!dst) { |
161 | dev->stats.tx_carrier_errors++; | 162 | dev->stats.tx_carrier_errors++; |
@@ -192,6 +193,23 @@ static netdev_tx_t vti_xmit(struct sk_buff *skb, struct net_device *dev, | |||
192 | tunnel->err_count = 0; | 193 | tunnel->err_count = 0; |
193 | } | 194 | } |
194 | 195 | ||
196 | mtu = dst_mtu(dst); | ||
197 | if (skb->len > mtu) { | ||
198 | skb_dst(skb)->ops->update_pmtu(skb_dst(skb), NULL, skb, mtu); | ||
199 | if (skb->protocol == htons(ETH_P_IP)) { | ||
200 | icmp_send(skb, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED, | ||
201 | htonl(mtu)); | ||
202 | } else { | ||
203 | if (mtu < IPV6_MIN_MTU) | ||
204 | mtu = IPV6_MIN_MTU; | ||
205 | |||
206 | icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu); | ||
207 | } | ||
208 | |||
209 | dst_release(dst); | ||
210 | goto tx_error; | ||
211 | } | ||
212 | |||
195 | skb_scrub_packet(skb, !net_eq(tunnel->net, dev_net(dev))); | 213 | skb_scrub_packet(skb, !net_eq(tunnel->net, dev_net(dev))); |
196 | skb_dst_set(skb, dst); | 214 | skb_dst_set(skb, dst); |
197 | skb->dev = skb_dst(skb)->dev; | 215 | skb->dev = skb_dst(skb)->dev; |
diff --git a/net/ipv4/udp_offload.c b/net/ipv4/udp_offload.c index 097060def7f0..6b7459c92bb2 100644 --- a/net/ipv4/udp_offload.c +++ b/net/ipv4/udp_offload.c | |||
@@ -350,6 +350,11 @@ int udp_gro_complete(struct sk_buff *skb, int nhoff, | |||
350 | 350 | ||
351 | uh->len = newlen; | 351 | uh->len = newlen; |
352 | 352 | ||
353 | /* Set encapsulation before calling into inner gro_complete() functions | ||
354 | * to make them set up the inner offsets. | ||
355 | */ | ||
356 | skb->encapsulation = 1; | ||
357 | |||
353 | rcu_read_lock(); | 358 | rcu_read_lock(); |
354 | sk = (*lookup)(skb, uh->source, uh->dest); | 359 | sk = (*lookup)(skb, uh->source, uh->dest); |
355 | if (sk && udp_sk(sk)->gro_complete) | 360 | if (sk && udp_sk(sk)->gro_complete) |
@@ -360,9 +365,6 @@ int udp_gro_complete(struct sk_buff *skb, int nhoff, | |||
360 | if (skb->remcsum_offload) | 365 | if (skb->remcsum_offload) |
361 | skb_shinfo(skb)->gso_type |= SKB_GSO_TUNNEL_REMCSUM; | 366 | skb_shinfo(skb)->gso_type |= SKB_GSO_TUNNEL_REMCSUM; |
362 | 367 | ||
363 | skb->encapsulation = 1; | ||
364 | skb_set_inner_mac_header(skb, nhoff + sizeof(struct udphdr)); | ||
365 | |||
366 | return err; | 368 | return err; |
367 | } | 369 | } |
368 | EXPORT_SYMBOL(udp_gro_complete); | 370 | EXPORT_SYMBOL(udp_gro_complete); |
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c index 9554b99a8508..4527285fcaa2 100644 --- a/net/ipv6/icmp.c +++ b/net/ipv6/icmp.c | |||
@@ -446,6 +446,8 @@ static void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info) | |||
446 | 446 | ||
447 | if (__ipv6_addr_needs_scope_id(addr_type)) | 447 | if (__ipv6_addr_needs_scope_id(addr_type)) |
448 | iif = skb->dev->ifindex; | 448 | iif = skb->dev->ifindex; |
449 | else | ||
450 | iif = l3mdev_master_ifindex(skb->dev); | ||
449 | 451 | ||
450 | /* | 452 | /* |
451 | * Must not send error if the source does not uniquely | 453 | * Must not send error if the source does not uniquely |
@@ -500,9 +502,6 @@ static void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info) | |||
500 | else if (!fl6.flowi6_oif) | 502 | else if (!fl6.flowi6_oif) |
501 | fl6.flowi6_oif = np->ucast_oif; | 503 | fl6.flowi6_oif = np->ucast_oif; |
502 | 504 | ||
503 | if (!fl6.flowi6_oif) | ||
504 | fl6.flowi6_oif = l3mdev_master_ifindex(skb->dev); | ||
505 | |||
506 | dst = icmpv6_route_lookup(net, skb, sk, &fl6); | 505 | dst = icmpv6_route_lookup(net, skb, sk, &fl6); |
507 | if (IS_ERR(dst)) | 506 | if (IS_ERR(dst)) |
508 | goto out; | 507 | goto out; |
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 7bdc9c9c231b..c4efaa97280c 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c | |||
@@ -810,8 +810,13 @@ static void tcp_v6_send_response(const struct sock *sk, struct sk_buff *skb, u32 | |||
810 | fl6.flowi6_proto = IPPROTO_TCP; | 810 | fl6.flowi6_proto = IPPROTO_TCP; |
811 | if (rt6_need_strict(&fl6.daddr) && !oif) | 811 | if (rt6_need_strict(&fl6.daddr) && !oif) |
812 | fl6.flowi6_oif = tcp_v6_iif(skb); | 812 | fl6.flowi6_oif = tcp_v6_iif(skb); |
813 | else | 813 | else { |
814 | if (!oif && netif_index_is_l3_master(net, skb->skb_iif)) | ||
815 | oif = skb->skb_iif; | ||
816 | |||
814 | fl6.flowi6_oif = oif; | 817 | fl6.flowi6_oif = oif; |
818 | } | ||
819 | |||
815 | fl6.flowi6_mark = IP6_REPLY_MARK(net, skb->mark); | 820 | fl6.flowi6_mark = IP6_REPLY_MARK(net, skb->mark); |
816 | fl6.fl6_dport = t1->dest; | 821 | fl6.fl6_dport = t1->dest; |
817 | fl6.fl6_sport = t1->source; | 822 | fl6.fl6_sport = t1->source; |
diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c index b3c52e3f689a..8ae3ed97d95c 100644 --- a/net/llc/af_llc.c +++ b/net/llc/af_llc.c | |||
@@ -626,6 +626,7 @@ static void llc_cmsg_rcv(struct msghdr *msg, struct sk_buff *skb) | |||
626 | if (llc->cmsg_flags & LLC_CMSG_PKTINFO) { | 626 | if (llc->cmsg_flags & LLC_CMSG_PKTINFO) { |
627 | struct llc_pktinfo info; | 627 | struct llc_pktinfo info; |
628 | 628 | ||
629 | memset(&info, 0, sizeof(info)); | ||
629 | info.lpi_ifindex = llc_sk(skb->sk)->dev->ifindex; | 630 | info.lpi_ifindex = llc_sk(skb->sk)->dev->ifindex; |
630 | llc_pdu_decode_dsap(skb, &info.lpi_sap); | 631 | llc_pdu_decode_dsap(skb, &info.lpi_sap); |
631 | llc_pdu_decode_da(skb, info.lpi_mac); | 632 | llc_pdu_decode_da(skb, info.lpi_mac); |
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c index 3dce53ebea92..b5f1221f48d4 100644 --- a/net/vmw_vsock/af_vsock.c +++ b/net/vmw_vsock/af_vsock.c | |||
@@ -1808,27 +1808,8 @@ vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len, | |||
1808 | else if (sk->sk_shutdown & RCV_SHUTDOWN) | 1808 | else if (sk->sk_shutdown & RCV_SHUTDOWN) |
1809 | err = 0; | 1809 | err = 0; |
1810 | 1810 | ||
1811 | if (copied > 0) { | 1811 | if (copied > 0) |
1812 | /* We only do these additional bookkeeping/notification steps | ||
1813 | * if we actually copied something out of the queue pair | ||
1814 | * instead of just peeking ahead. | ||
1815 | */ | ||
1816 | |||
1817 | if (!(flags & MSG_PEEK)) { | ||
1818 | /* If the other side has shutdown for sending and there | ||
1819 | * is nothing more to read, then modify the socket | ||
1820 | * state. | ||
1821 | */ | ||
1822 | if (vsk->peer_shutdown & SEND_SHUTDOWN) { | ||
1823 | if (vsock_stream_has_data(vsk) <= 0) { | ||
1824 | sk->sk_state = SS_UNCONNECTED; | ||
1825 | sock_set_flag(sk, SOCK_DONE); | ||
1826 | sk->sk_state_change(sk); | ||
1827 | } | ||
1828 | } | ||
1829 | } | ||
1830 | err = copied; | 1812 | err = copied; |
1831 | } | ||
1832 | 1813 | ||
1833 | out: | 1814 | out: |
1834 | release_sock(sk); | 1815 | release_sock(sk); |
diff --git a/net/xfrm/xfrm_output.c b/net/xfrm/xfrm_output.c index ff4a91fcab9f..637387bbaaea 100644 --- a/net/xfrm/xfrm_output.c +++ b/net/xfrm/xfrm_output.c | |||
@@ -99,6 +99,9 @@ static int xfrm_output_one(struct sk_buff *skb, int err) | |||
99 | 99 | ||
100 | skb_dst_force(skb); | 100 | skb_dst_force(skb); |
101 | 101 | ||
102 | /* Inner headers are invalid now. */ | ||
103 | skb->encapsulation = 0; | ||
104 | |||
102 | err = x->type->output(x, skb); | 105 | err = x->type->output(x, skb); |
103 | if (err == -EINPROGRESS) | 106 | if (err == -EINPROGRESS) |
104 | goto out; | 107 | goto out; |
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c index 161dd0d67da8..a9155077feef 100644 --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c | |||
@@ -371,6 +371,49 @@ static void do_usb_table(void *symval, unsigned long size, | |||
371 | do_usb_entry_multi(symval + i, mod); | 371 | do_usb_entry_multi(symval + i, mod); |
372 | } | 372 | } |
373 | 373 | ||
374 | static void do_of_entry_multi(void *symval, struct module *mod) | ||
375 | { | ||
376 | char alias[500]; | ||
377 | int len; | ||
378 | char *tmp; | ||
379 | |||
380 | DEF_FIELD_ADDR(symval, of_device_id, name); | ||
381 | DEF_FIELD_ADDR(symval, of_device_id, type); | ||
382 | DEF_FIELD_ADDR(symval, of_device_id, compatible); | ||
383 | |||
384 | len = sprintf(alias, "of:N%sT%s", (*name)[0] ? *name : "*", | ||
385 | (*type)[0] ? *type : "*"); | ||
386 | |||
387 | if (compatible[0]) | ||
388 | sprintf(&alias[len], "%sC%s", (*type)[0] ? "*" : "", | ||
389 | *compatible); | ||
390 | |||
391 | /* Replace all whitespace with underscores */ | ||
392 | for (tmp = alias; tmp && *tmp; tmp++) | ||
393 | if (isspace(*tmp)) | ||
394 | *tmp = '_'; | ||
395 | |||
396 | buf_printf(&mod->dev_table_buf, "MODULE_ALIAS(\"%s\");\n", alias); | ||
397 | strcat(alias, "C"); | ||
398 | add_wildcard(alias); | ||
399 | buf_printf(&mod->dev_table_buf, "MODULE_ALIAS(\"%s\");\n", alias); | ||
400 | } | ||
401 | |||
402 | static void do_of_table(void *symval, unsigned long size, | ||
403 | struct module *mod) | ||
404 | { | ||
405 | unsigned int i; | ||
406 | const unsigned long id_size = SIZE_of_device_id; | ||
407 | |||
408 | device_id_check(mod->name, "of", size, id_size, symval); | ||
409 | |||
410 | /* Leave last one: it's the terminator. */ | ||
411 | size -= id_size; | ||
412 | |||
413 | for (i = 0; i < size; i += id_size) | ||
414 | do_of_entry_multi(symval + i, mod); | ||
415 | } | ||
416 | |||
374 | /* Looks like: hid:bNvNpN */ | 417 | /* Looks like: hid:bNvNpN */ |
375 | static int do_hid_entry(const char *filename, | 418 | static int do_hid_entry(const char *filename, |
376 | void *symval, char *alias) | 419 | void *symval, char *alias) |
@@ -684,30 +727,6 @@ static int do_pcmcia_entry(const char *filename, | |||
684 | } | 727 | } |
685 | ADD_TO_DEVTABLE("pcmcia", pcmcia_device_id, do_pcmcia_entry); | 728 | ADD_TO_DEVTABLE("pcmcia", pcmcia_device_id, do_pcmcia_entry); |
686 | 729 | ||
687 | static int do_of_entry (const char *filename, void *symval, char *alias) | ||
688 | { | ||
689 | int len; | ||
690 | char *tmp; | ||
691 | DEF_FIELD_ADDR(symval, of_device_id, name); | ||
692 | DEF_FIELD_ADDR(symval, of_device_id, type); | ||
693 | DEF_FIELD_ADDR(symval, of_device_id, compatible); | ||
694 | |||
695 | len = sprintf(alias, "of:N%sT%s", (*name)[0] ? *name : "*", | ||
696 | (*type)[0] ? *type : "*"); | ||
697 | |||
698 | if (compatible[0]) | ||
699 | sprintf(&alias[len], "%sC%s", (*type)[0] ? "*" : "", | ||
700 | *compatible); | ||
701 | |||
702 | /* Replace all whitespace with underscores */ | ||
703 | for (tmp = alias; tmp && *tmp; tmp++) | ||
704 | if (isspace (*tmp)) | ||
705 | *tmp = '_'; | ||
706 | |||
707 | return 1; | ||
708 | } | ||
709 | ADD_TO_DEVTABLE("of", of_device_id, do_of_entry); | ||
710 | |||
711 | static int do_vio_entry(const char *filename, void *symval, | 730 | static int do_vio_entry(const char *filename, void *symval, |
712 | char *alias) | 731 | char *alias) |
713 | { | 732 | { |
@@ -1348,6 +1367,8 @@ void handle_moddevtable(struct module *mod, struct elf_info *info, | |||
1348 | /* First handle the "special" cases */ | 1367 | /* First handle the "special" cases */ |
1349 | if (sym_is(name, namelen, "usb")) | 1368 | if (sym_is(name, namelen, "usb")) |
1350 | do_usb_table(symval, sym->st_size, mod); | 1369 | do_usb_table(symval, sym->st_size, mod); |
1370 | if (sym_is(name, namelen, "of")) | ||
1371 | do_of_table(symval, sym->st_size, mod); | ||
1351 | else if (sym_is(name, namelen, "pnp")) | 1372 | else if (sym_is(name, namelen, "pnp")) |
1352 | do_pnp_device_entry(symval, sym->st_size, mod); | 1373 | do_pnp_device_entry(symval, sym->st_size, mod); |
1353 | else if (sym_is(name, namelen, "pnp_card")) | 1374 | else if (sym_is(name, namelen, "pnp_card")) |
diff --git a/security/integrity/ima/ima_policy.c b/security/integrity/ima/ima_policy.c index be09e2cacf82..3cd0a58672dd 100644 --- a/security/integrity/ima/ima_policy.c +++ b/security/integrity/ima/ima_policy.c | |||
@@ -884,10 +884,10 @@ static char *func_tokens[] = { | |||
884 | "BPRM_CHECK", | 884 | "BPRM_CHECK", |
885 | "MODULE_CHECK", | 885 | "MODULE_CHECK", |
886 | "FIRMWARE_CHECK", | 886 | "FIRMWARE_CHECK", |
887 | "POST_SETATTR", | ||
887 | "KEXEC_KERNEL_CHECK", | 888 | "KEXEC_KERNEL_CHECK", |
888 | "KEXEC_INITRAMFS_CHECK", | 889 | "KEXEC_INITRAMFS_CHECK", |
889 | "POLICY_CHECK", | 890 | "POLICY_CHECK" |
890 | "POST_SETATTR" | ||
891 | }; | 891 | }; |
892 | 892 | ||
893 | void *ima_policy_start(struct seq_file *m, loff_t *pos) | 893 | void *ima_policy_start(struct seq_file *m, loff_t *pos) |
diff --git a/tools/net/bpf_jit_disasm.c b/tools/net/bpf_jit_disasm.c index 5b3241340945..544b05a53b70 100644 --- a/tools/net/bpf_jit_disasm.c +++ b/tools/net/bpf_jit_disasm.c | |||
@@ -98,6 +98,9 @@ static char *get_klog_buff(unsigned int *klen) | |||
98 | char *buff; | 98 | char *buff; |
99 | 99 | ||
100 | len = klogctl(CMD_ACTION_SIZE_BUFFER, NULL, 0); | 100 | len = klogctl(CMD_ACTION_SIZE_BUFFER, NULL, 0); |
101 | if (len < 0) | ||
102 | return NULL; | ||
103 | |||
101 | buff = malloc(len); | 104 | buff = malloc(len); |
102 | if (!buff) | 105 | if (!buff) |
103 | return NULL; | 106 | return NULL; |