Adjust patchset for FriendlyARM's RK3399, move Nanopi Neo4 to .conf, adjust kernel configuration. Tested only for building.
This commit is contained in:
parent
59af84c07c
commit
b971c3f425
@ -575,7 +575,6 @@ CONFIG_CPU_FREQ_TIMES=y
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE is not set
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_SCHED is not set
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL is not set
|
||||
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
|
||||
@ -1748,6 +1747,7 @@ CONFIG_DM_VERITY_HASH_PREFETCH_MIN_SIZE=1
|
||||
CONFIG_DM_SWITCH=m
|
||||
CONFIG_DM_LOG_WRITES=m
|
||||
# CONFIG_DM_VERITY_AVB is not set
|
||||
# CONFIG_DM_ANDROID_VERITY_AT_MOST_ONCE_DEFAULT_ENABLED is not set
|
||||
# CONFIG_TARGET_CORE is not set
|
||||
# CONFIG_FUSION is not set
|
||||
|
||||
@ -2148,6 +2148,11 @@ CONFIG_RTL_WIRELESS_SOLUTION=y
|
||||
# CONFIG_RTL8723DS is not set
|
||||
# CONFIG_RTL8822BE is not set
|
||||
# CONFIG_MVL88W8977 is not set
|
||||
|
||||
#
|
||||
# SouthSV 6XXX WLAN support
|
||||
#
|
||||
# CONFIG_SSV6051 is not set
|
||||
# CONFIG_WL_TI is not set
|
||||
# CONFIG_ZD1211RW is not set
|
||||
CONFIG_MWIFIEX=y
|
||||
@ -2307,7 +2312,7 @@ CONFIG_TOUCHSCREEN_ELAN=y
|
||||
# CONFIG_TOUCHSCREEN_INEXIO is not set
|
||||
# CONFIG_TOUCHSCREEN_MK712 is not set
|
||||
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
|
||||
# CONFIG_TOUCHSCREEN_EDT_FT5X06 is not set
|
||||
CONFIG_TOUCHSCREEN_EDT_FT5X06=y
|
||||
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
|
||||
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
|
||||
# CONFIG_TOUCHSCREEN_PIXCIR is not set
|
||||
@ -2466,6 +2471,7 @@ CONFIG_SERIAL_OF_PLATFORM=y
|
||||
CONFIG_HW_RANDOM=y
|
||||
# CONFIG_HW_RANDOM_TIMERIOMEM is not set
|
||||
CONFIG_HW_RANDOM_TPM=y
|
||||
CONFIG_HW_RANDOM_ROCKCHIP=m
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_APPLICOM is not set
|
||||
|
||||
@ -3361,6 +3367,9 @@ CONFIG_VIDEO_TVEEPROM=m
|
||||
# CONFIG_VIDEO_S5K5BAF is not set
|
||||
# CONFIG_VIDEO_SMIAPP is not set
|
||||
# CONFIG_VIDEO_S5C73M3 is not set
|
||||
# CONFIG_VIDEO_GC2155 is not set
|
||||
# CONFIG_VIDEO_GC0312 is not set
|
||||
# CONFIG_VIDEO_GC2145 is not set
|
||||
|
||||
#
|
||||
# Flash devices
|
||||
@ -3440,6 +3449,7 @@ CONFIG_DRM_ROCKCHIP=y
|
||||
CONFIG_ROCKCHIP_CDN_DP=m
|
||||
CONFIG_ROCKCHIP_DW_HDMI=y
|
||||
CONFIG_ROCKCHIP_DW_MIPI_DSI=y
|
||||
# CONFIG_ROCKCHIP_MIPI_CSI_TX is not set
|
||||
CONFIG_ROCKCHIP_ANALOGIX_DP=y
|
||||
CONFIG_ROCKCHIP_INNO_HDMI=y
|
||||
CONFIG_ROCKCHIP_LVDS=y
|
||||
@ -3782,12 +3792,13 @@ CONFIG_SND_SOC_ROCKCHIP_I2S_TDM=m
|
||||
# CONFIG_SND_SOC_ROCKCHIP_MULTI_DAIS is not set
|
||||
# CONFIG_SND_SOC_ROCKCHIP_PDM is not set
|
||||
CONFIG_SND_SOC_ROCKCHIP_SPDIF=y
|
||||
# CONFIG_SND_SOC_ROCKCHIP_SPDIFRX is not set
|
||||
# CONFIG_SND_SOC_ROCKCHIP_VAD is not set
|
||||
# CONFIG_SND_SOC_ROCKCHIP_DA7219 is not set
|
||||
# CONFIG_SND_SOC_ROCKCHIP_HDMI_ANALOG is not set
|
||||
# CONFIG_SND_SOC_ROCKCHIP_HDMI_DP is not set
|
||||
CONFIG_SND_SOC_ROCKCHIP_MAX98090=y
|
||||
CONFIG_SND_SOC_ROCKCHIP_MULTICODECS=m
|
||||
CONFIG_SND_SOC_ROCKCHIP_MAX98090=m
|
||||
# CONFIG_SND_SOC_ROCKCHIP_MULTICODECS is not set
|
||||
CONFIG_SND_SOC_ROCKCHIP_RT5645=y
|
||||
# CONFIG_SND_SOC_ROCKCHIP_RT5651_TC358749 is not set
|
||||
# CONFIG_SND_SOC_ROCKCHIP_CDNDP is not set
|
||||
@ -3834,7 +3845,7 @@ CONFIG_SND_SOC_HDMI_CODEC=y
|
||||
# CONFIG_SND_SOC_GTM601 is not set
|
||||
# CONFIG_SND_SOC_GVA_CODEC is not set
|
||||
# CONFIG_SND_SOC_FM1288 is not set
|
||||
CONFIG_SND_SOC_MAX98090=y
|
||||
CONFIG_SND_SOC_MAX98090=m
|
||||
# CONFIG_SND_SOC_PCM1681 is not set
|
||||
# CONFIG_SND_SOC_PCM1792A is not set
|
||||
# CONFIG_SND_SOC_PCM512x_I2C is not set
|
||||
@ -4423,6 +4434,7 @@ CONFIG_RTC_INTF_DEV=y
|
||||
CONFIG_RTC_DRV_HYM8563=y
|
||||
# CONFIG_RTC_DRV_MAX6900 is not set
|
||||
CONFIG_RTC_DRV_RK808=y
|
||||
# CONFIG_RTC_DRV_RK_TIMER is not set
|
||||
# CONFIG_RTC_DRV_RS5C372 is not set
|
||||
# CONFIG_RTC_DRV_ISL1208 is not set
|
||||
# CONFIG_RTC_DRV_ISL12022 is not set
|
||||
@ -4747,6 +4759,7 @@ CONFIG_ROCKCHIP_IOMMU=y
|
||||
# CPU selection
|
||||
#
|
||||
CONFIG_CPU_PX30=y
|
||||
# CONFIG_CPU_RK1808 is not set
|
||||
CONFIG_CPU_RK3308=y
|
||||
CONFIG_CPU_RK3328=y
|
||||
CONFIG_CPU_RK3366=y
|
||||
@ -5239,8 +5252,8 @@ CONFIG_SQUASHFS_DECOMP_SINGLE=y
|
||||
CONFIG_SQUASHFS_ZLIB=y
|
||||
# CONFIG_SQUASHFS_LZ4 is not set
|
||||
CONFIG_SQUASHFS_LZO=y
|
||||
# CONFIG_SQUASHFS_XZ is not set
|
||||
# CONFIG_SQUASHFS_ZSTD is not set
|
||||
CONFIG_SQUASHFS_XZ=y
|
||||
CONFIG_SQUASHFS_ZSTD=y
|
||||
# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set
|
||||
# CONFIG_SQUASHFS_EMBEDDED is not set
|
||||
CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
|
||||
@ -5811,6 +5824,7 @@ CONFIG_CRC32_SLICEBY8=y
|
||||
CONFIG_CRC7=y
|
||||
CONFIG_LIBCRC32C=y
|
||||
# CONFIG_CRC8 is not set
|
||||
CONFIG_XXHASH=y
|
||||
CONFIG_AUDIT_GENERIC=y
|
||||
CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y
|
||||
CONFIG_AUDIT_COMPAT_GENERIC=y
|
||||
@ -5824,6 +5838,7 @@ CONFIG_LZO_DECOMPRESS=y
|
||||
CONFIG_LZ4_COMPRESS=m
|
||||
CONFIG_LZ4HC_COMPRESS=m
|
||||
CONFIG_LZ4_DECOMPRESS=y
|
||||
CONFIG_ZSTD_DECOMPRESS=y
|
||||
CONFIG_XZ_DEC=y
|
||||
# CONFIG_XZ_DEC_X86 is not set
|
||||
# CONFIG_XZ_DEC_POWERPC is not set
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,186 +0,0 @@
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 3fc39e41dbde..75d6176c8786 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1,6 +1,6 @@
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 4
|
||||
-SUBLEVEL = 141
|
||||
+SUBLEVEL = 142
|
||||
EXTRAVERSION =
|
||||
NAME = Blurry Fish Butt
|
||||
|
||||
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
|
||||
index 814276d0eed1..736e2843139b 100644
|
||||
--- a/arch/x86/kernel/cpu/common.c
|
||||
+++ b/arch/x86/kernel/cpu/common.c
|
||||
@@ -686,13 +686,14 @@ void get_cpu_cap(struct cpuinfo_x86 *c)
|
||||
c->x86_capability[CPUID_1_EDX] = edx;
|
||||
}
|
||||
|
||||
+ /* Thermal and Power Management Leaf: level 0x00000006 (eax) */
|
||||
+ if (c->cpuid_level >= 0x00000006)
|
||||
+ c->x86_capability[CPUID_6_EAX] = cpuid_eax(0x00000006);
|
||||
+
|
||||
/* Additional Intel-defined flags: level 0x00000007 */
|
||||
if (c->cpuid_level >= 0x00000007) {
|
||||
cpuid_count(0x00000007, 0, &eax, &ebx, &ecx, &edx);
|
||||
-
|
||||
c->x86_capability[CPUID_7_0_EBX] = ebx;
|
||||
-
|
||||
- c->x86_capability[CPUID_6_EAX] = cpuid_eax(0x00000006);
|
||||
c->x86_capability[CPUID_7_ECX] = ecx;
|
||||
}
|
||||
|
||||
diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
|
||||
index 1db6d73c8dd2..31a981d6229d 100644
|
||||
--- a/scripts/Kbuild.include
|
||||
+++ b/scripts/Kbuild.include
|
||||
@@ -7,6 +7,7 @@ quote := "
|
||||
squote := '
|
||||
empty :=
|
||||
space := $(empty) $(empty)
|
||||
+pound := \#
|
||||
|
||||
###
|
||||
# Name of target with a '.' as filename prefix. foo/bar.o => foo/.bar.o
|
||||
@@ -236,11 +237,11 @@ endif
|
||||
|
||||
# Replace >$< with >$$< to preserve $ when reloading the .cmd file
|
||||
# (needed for make)
|
||||
-# Replace >#< with >\#< to avoid starting a comment in the .cmd file
|
||||
+# Replace >#< with >$(pound)< to avoid starting a comment in the .cmd file
|
||||
# (needed for make)
|
||||
# Replace >'< with >'\''< to be able to enclose the whole string in '...'
|
||||
# (needed for the shell)
|
||||
-make-cmd = $(call escsq,$(subst \#,\\\#,$(subst $$,$$$$,$(cmd_$(1)))))
|
||||
+make-cmd = $(call escsq,$(subst $(pound),$$(pound),$(subst $$,$$$$,$(cmd_$(1)))))
|
||||
|
||||
# Find any prerequisites that is newer than target or that does not exist.
|
||||
# PHONY targets skipped in both cases.
|
||||
diff --git a/tools/arch/x86/include/asm/unistd_32.h b/tools/arch/x86/include/asm/unistd_32.h
|
||||
new file mode 100644
|
||||
index 000000000000..cf33ab09273d
|
||||
--- /dev/null
|
||||
+++ b/tools/arch/x86/include/asm/unistd_32.h
|
||||
@@ -0,0 +1,9 @@
|
||||
+#ifndef __NR_perf_event_open
|
||||
+# define __NR_perf_event_open 336
|
||||
+#endif
|
||||
+#ifndef __NR_futex
|
||||
+# define __NR_futex 240
|
||||
+#endif
|
||||
+#ifndef __NR_gettid
|
||||
+# define __NR_gettid 224
|
||||
+#endif
|
||||
diff --git a/tools/arch/x86/include/asm/unistd_64.h b/tools/arch/x86/include/asm/unistd_64.h
|
||||
new file mode 100644
|
||||
index 000000000000..2c9835695b56
|
||||
--- /dev/null
|
||||
+++ b/tools/arch/x86/include/asm/unistd_64.h
|
||||
@@ -0,0 +1,9 @@
|
||||
+#ifndef __NR_perf_event_open
|
||||
+# define __NR_perf_event_open 298
|
||||
+#endif
|
||||
+#ifndef __NR_futex
|
||||
+# define __NR_futex 202
|
||||
+#endif
|
||||
+#ifndef __NR_gettid
|
||||
+# define __NR_gettid 186
|
||||
+#endif
|
||||
diff --git a/tools/build/Build.include b/tools/build/Build.include
|
||||
index 1c570528baf7..0340d8a51dab 100644
|
||||
--- a/tools/build/Build.include
|
||||
+++ b/tools/build/Build.include
|
||||
@@ -12,6 +12,7 @@
|
||||
# Convenient variables
|
||||
comma := ,
|
||||
squote := '
|
||||
+pound := \#
|
||||
|
||||
###
|
||||
# Name of target with a '.' as filename prefix. foo/bar.o => foo/.bar.o
|
||||
@@ -43,11 +44,11 @@ echo-cmd = $(if $($(quiet)cmd_$(1)),\
|
||||
###
|
||||
# Replace >$< with >$$< to preserve $ when reloading the .cmd file
|
||||
# (needed for make)
|
||||
-# Replace >#< with >\#< to avoid starting a comment in the .cmd file
|
||||
+# Replace >#< with >$(pound)< to avoid starting a comment in the .cmd file
|
||||
# (needed for make)
|
||||
# Replace >'< with >'\''< to be able to enclose the whole string in '...'
|
||||
# (needed for the shell)
|
||||
-make-cmd = $(call escsq,$(subst \#,\\\#,$(subst $$,$$$$,$(cmd_$(1)))))
|
||||
+make-cmd = $(call escsq,$(subst $(pound),$$(pound),$(subst $$,$$$$,$(cmd_$(1)))))
|
||||
|
||||
###
|
||||
# Find any prerequisites that is newer than target or that does not exist.
|
||||
diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
|
||||
index de89ec574361..b92c952b01ef 100644
|
||||
--- a/tools/perf/config/Makefile
|
||||
+++ b/tools/perf/config/Makefile
|
||||
@@ -200,6 +200,7 @@ CFLAGS += -I$(src-perf)/arch/$(ARCH)/include
|
||||
CFLAGS += -I$(srctree)/tools/include/
|
||||
CFLAGS += -I$(srctree)/arch/$(ARCH)/include/uapi
|
||||
CFLAGS += -I$(srctree)/arch/$(ARCH)/include
|
||||
+CFLAGS += -I$(srctree)/tools/arch/$(ARCH)/include
|
||||
CFLAGS += -I$(srctree)/include/uapi
|
||||
CFLAGS += -I$(srctree)/include
|
||||
|
||||
diff --git a/tools/perf/perf-sys.h b/tools/perf/perf-sys.h
|
||||
index 83a25cef82fd..5cee8a3d0455 100644
|
||||
--- a/tools/perf/perf-sys.h
|
||||
+++ b/tools/perf/perf-sys.h
|
||||
@@ -11,29 +11,11 @@
|
||||
#if defined(__i386__)
|
||||
#define cpu_relax() asm volatile("rep; nop" ::: "memory");
|
||||
#define CPUINFO_PROC {"model name"}
|
||||
-#ifndef __NR_perf_event_open
|
||||
-# define __NR_perf_event_open 336
|
||||
-#endif
|
||||
-#ifndef __NR_futex
|
||||
-# define __NR_futex 240
|
||||
-#endif
|
||||
-#ifndef __NR_gettid
|
||||
-# define __NR_gettid 224
|
||||
-#endif
|
||||
#endif
|
||||
|
||||
#if defined(__x86_64__)
|
||||
#define cpu_relax() asm volatile("rep; nop" ::: "memory");
|
||||
#define CPUINFO_PROC {"model name"}
|
||||
-#ifndef __NR_perf_event_open
|
||||
-# define __NR_perf_event_open 298
|
||||
-#endif
|
||||
-#ifndef __NR_futex
|
||||
-# define __NR_futex 202
|
||||
-#endif
|
||||
-#ifndef __NR_gettid
|
||||
-# define __NR_gettid 186
|
||||
-#endif
|
||||
#endif
|
||||
|
||||
#ifdef __powerpc__
|
||||
diff --git a/tools/perf/util/include/asm/unistd_32.h b/tools/perf/util/include/asm/unistd_32.h
|
||||
deleted file mode 100644
|
||||
index 8b137891791f..000000000000
|
||||
--- a/tools/perf/util/include/asm/unistd_32.h
|
||||
+++ /dev/null
|
||||
@@ -1 +0,0 @@
|
||||
-
|
||||
diff --git a/tools/perf/util/include/asm/unistd_64.h b/tools/perf/util/include/asm/unistd_64.h
|
||||
deleted file mode 100644
|
||||
index 8b137891791f..000000000000
|
||||
--- a/tools/perf/util/include/asm/unistd_64.h
|
||||
+++ /dev/null
|
||||
@@ -1 +0,0 @@
|
||||
-
|
||||
diff --git a/tools/scripts/Makefile.include b/tools/scripts/Makefile.include
|
||||
index 19edc1a7a232..7ea4438b801d 100644
|
||||
--- a/tools/scripts/Makefile.include
|
||||
+++ b/tools/scripts/Makefile.include
|
||||
@@ -92,3 +92,5 @@ ifneq ($(silent),1)
|
||||
QUIET_INSTALL = @printf ' INSTALL %s\n' $1;
|
||||
endif
|
||||
endif
|
||||
+
|
||||
+pound := \#
|
||||
File diff suppressed because it is too large
Load Diff
@ -9,7 +9,7 @@ index ee92a12e3a4b..9b795164122e 100644
|
||||
+SUBLEVEL = 148
|
||||
EXTRAVERSION =
|
||||
NAME = Blurry Fish Butt
|
||||
|
||||
|
||||
diff --git a/arch/arm/boot/dts/imx6sx.dtsi b/arch/arm/boot/dts/imx6sx.dtsi
|
||||
index 167f77b3bd43..6963dff815dc 100644
|
||||
--- a/arch/arm/boot/dts/imx6sx.dtsi
|
||||
@ -28,7 +28,7 @@ index 729f89163bc3..210b3d675261 100644
|
||||
--- a/arch/parisc/Kconfig
|
||||
+++ b/arch/parisc/Kconfig
|
||||
@@ -177,7 +177,7 @@ config PREFETCH
|
||||
|
||||
|
||||
config MLONGCALLS
|
||||
bool "Enable the -mlong-calls compiler option for big kernels"
|
||||
- def_bool y if (!MODULES)
|
||||
@ -112,7 +112,7 @@ index 9f22195b90ed..f68eedc72484 100644
|
||||
#if ENABLE_LWS_DEBUG
|
||||
/* Clear thread register indicator */
|
||||
@@ -645,6 +646,7 @@ cas_action:
|
||||
3:
|
||||
3:
|
||||
/* Error occurred on load or store */
|
||||
/* Free lock */
|
||||
+ sync
|
||||
@ -120,7 +120,7 @@ index 9f22195b90ed..f68eedc72484 100644
|
||||
#if ENABLE_LWS_DEBUG
|
||||
stw %r0, 4(%sr2,%r20)
|
||||
@@ -846,6 +848,7 @@ cas2_action:
|
||||
|
||||
|
||||
cas2_end:
|
||||
/* Free lock */
|
||||
+ sync
|
||||
@ -142,26 +142,26 @@ index f4b175db70f4..dd2269dcbc47 100644
|
||||
@@ -193,12 +193,12 @@
|
||||
#define X86_FEATURE_HW_PSTATE ( 7*32+ 8) /* AMD HW-PState */
|
||||
#define X86_FEATURE_PROC_FEEDBACK ( 7*32+ 9) /* AMD ProcFeedbackInterface */
|
||||
|
||||
|
||||
+#define X86_FEATURE_RETPOLINE ( 7*32+12) /* "" Generic Retpoline mitigation for Spectre variant 2 */
|
||||
+#define X86_FEATURE_RETPOLINE_AMD ( 7*32+13) /* "" AMD Retpoline mitigation for Spectre variant 2 */
|
||||
+
|
||||
#define X86_FEATURE_INTEL_PT ( 7*32+15) /* Intel Processor Trace */
|
||||
#define X86_FEATURE_RSB_CTXSW ( 7*32+19) /* "" Fill RSB on context switches */
|
||||
|
||||
|
||||
-#define X86_FEATURE_RETPOLINE ( 7*32+29) /* "" Generic Retpoline mitigation for Spectre variant 2 */
|
||||
-#define X86_FEATURE_RETPOLINE_AMD ( 7*32+30) /* "" AMD Retpoline mitigation for Spectre variant 2 */
|
||||
-
|
||||
#define X86_FEATURE_MSR_SPEC_CTRL ( 7*32+16) /* "" MSR SPEC_CTRL is implemented */
|
||||
#define X86_FEATURE_SSBD ( 7*32+17) /* Speculative Store Bypass Disable */
|
||||
|
||||
|
||||
@@ -214,7 +214,7 @@
|
||||
#define X86_FEATURE_IBPB ( 7*32+26) /* Indirect Branch Prediction Barrier */
|
||||
#define X86_FEATURE_STIBP ( 7*32+27) /* Single Thread Indirect Branch Predictors */
|
||||
#define X86_FEATURE_ZEN ( 7*32+28) /* "" CPU is AMD family 0x17 (Zen) */
|
||||
-
|
||||
+#define X86_FEATURE_L1TF_PTEINV ( 7*32+29) /* "" L1TF workaround PTE inversion */
|
||||
|
||||
|
||||
/* Virtualization flags: Linux defined, word 8 */
|
||||
#define X86_FEATURE_TPR_SHADOW ( 8*32+ 0) /* Intel TPR Shadow */
|
||||
@@ -310,6 +310,7 @@
|
||||
@ -171,13 +171,13 @@ index f4b175db70f4..dd2269dcbc47 100644
|
||||
+#define X86_FEATURE_FLUSH_L1D (18*32+28) /* Flush L1D cache */
|
||||
#define X86_FEATURE_ARCH_CAPABILITIES (18*32+29) /* IA32_ARCH_CAPABILITIES MSR (Intel) */
|
||||
#define X86_FEATURE_SPEC_CTRL_SSBD (18*32+31) /* "" Speculative Store Bypass Disable */
|
||||
|
||||
|
||||
@@ -331,5 +332,6 @@
|
||||
#define X86_BUG_SPECTRE_V1 X86_BUG(15) /* CPU is affected by Spectre variant 1 attack with conditional branches */
|
||||
#define X86_BUG_SPECTRE_V2 X86_BUG(16) /* CPU is affected by Spectre variant 2 attack with indirect branches */
|
||||
#define X86_BUG_SPEC_STORE_BYPASS X86_BUG(17) /* CPU is affected by speculative store bypass attack */
|
||||
+#define X86_BUG_L1TF X86_BUG(18) /* CPU is affected by L1 Terminal Fault */
|
||||
|
||||
|
||||
#endif /* _ASM_X86_CPUFEATURES_H */
|
||||
diff --git a/arch/x86/include/asm/irqflags.h b/arch/x86/include/asm/irqflags.h
|
||||
index 0056bc945cd1..cb7f04981c6b 100644
|
||||
@ -186,7 +186,7 @@ index 0056bc945cd1..cb7f04981c6b 100644
|
||||
@@ -8,6 +8,8 @@
|
||||
* Interrupt control:
|
||||
*/
|
||||
|
||||
|
||||
+/* Declaration required for gcc < 4.9 to prevent -Werror=missing-prototypes */
|
||||
+extern inline unsigned long native_save_fl(void);
|
||||
extern inline unsigned long native_save_fl(void)
|
||||
@ -198,7 +198,7 @@ index 3a52ee0e726d..bfceb5cc6347 100644
|
||||
+++ b/arch/x86/include/asm/page_32_types.h
|
||||
@@ -27,8 +27,13 @@
|
||||
#define N_EXCEPTION_STACKS 1
|
||||
|
||||
|
||||
#ifdef CONFIG_X86_PAE
|
||||
-/* 44=32+12, the limit we can fit into an unsigned long pfn */
|
||||
-#define __PHYSICAL_MASK_SHIFT 44
|
||||
@ -210,7 +210,7 @@ index 3a52ee0e726d..bfceb5cc6347 100644
|
||||
+ */
|
||||
+#define __PHYSICAL_MASK_SHIFT 52
|
||||
#define __VIRTUAL_MASK_SHIFT 32
|
||||
|
||||
|
||||
#else /* !CONFIG_X86_PAE */
|
||||
diff --git a/arch/x86/include/asm/pgtable-2level.h b/arch/x86/include/asm/pgtable-2level.h
|
||||
index fd74a11959de..89c50332a71e 100644
|
||||
@ -219,7 +219,7 @@ index fd74a11959de..89c50332a71e 100644
|
||||
@@ -77,4 +77,21 @@ static inline unsigned long pte_bitop(unsigned long value, unsigned int rightshi
|
||||
#define __pte_to_swp_entry(pte) ((swp_entry_t) { (pte).pte_low })
|
||||
#define __swp_entry_to_pte(x) ((pte_t) { .pte = (x).val })
|
||||
|
||||
|
||||
+/* No inverted PFNs on 2 level page tables */
|
||||
+
|
||||
+static inline u64 protnone_mask(u64 val)
|
||||
@ -244,7 +244,7 @@ index cdaa58c9b39e..5c686382d84b 100644
|
||||
+++ b/arch/x86/include/asm/pgtable-3level.h
|
||||
@@ -177,11 +177,44 @@ static inline pmd_t native_pmdp_get_and_clear(pmd_t *pmdp)
|
||||
#endif
|
||||
|
||||
|
||||
/* Encode and de-code a swap entry */
|
||||
+#define SWP_TYPE_BITS 5
|
||||
+
|
||||
@ -287,7 +287,7 @@ index cdaa58c9b39e..5c686382d84b 100644
|
||||
+ __pteval_swp_offset(pte)))
|
||||
+
|
||||
+#include <asm/pgtable-invert.h>
|
||||
|
||||
|
||||
#endif /* _ASM_X86_PGTABLE_3LEVEL_H */
|
||||
diff --git a/arch/x86/include/asm/pgtable-invert.h b/arch/x86/include/asm/pgtable-invert.h
|
||||
new file mode 100644
|
||||
@ -334,7 +334,7 @@ index 84c62d950023..4de6c282c02a 100644
|
||||
@@ -148,19 +148,29 @@ static inline int pte_special(pte_t pte)
|
||||
return pte_flags(pte) & _PAGE_SPECIAL;
|
||||
}
|
||||
|
||||
|
||||
+/* Entries that were set to PROT_NONE are inverted */
|
||||
+
|
||||
+static inline u64 protnone_mask(u64 val);
|
||||
@ -346,7 +346,7 @@ index 84c62d950023..4de6c282c02a 100644
|
||||
+ pfn ^= protnone_mask(pfn);
|
||||
+ return (pfn & PTE_PFN_MASK) >> PAGE_SHIFT;
|
||||
}
|
||||
|
||||
|
||||
static inline unsigned long pmd_pfn(pmd_t pmd)
|
||||
{
|
||||
- return (pmd_val(pmd) & pmd_pfn_mask(pmd)) >> PAGE_SHIFT;
|
||||
@ -354,7 +354,7 @@ index 84c62d950023..4de6c282c02a 100644
|
||||
+ pfn ^= protnone_mask(pfn);
|
||||
+ return (pfn & pmd_pfn_mask(pmd)) >> PAGE_SHIFT;
|
||||
}
|
||||
|
||||
|
||||
static inline unsigned long pud_pfn(pud_t pud)
|
||||
{
|
||||
- return (pud_val(pud) & pud_pfn_mask(pud)) >> PAGE_SHIFT;
|
||||
@ -362,12 +362,12 @@ index 84c62d950023..4de6c282c02a 100644
|
||||
+ pfn ^= protnone_mask(pfn);
|
||||
+ return (pfn & pud_pfn_mask(pud)) >> PAGE_SHIFT;
|
||||
}
|
||||
|
||||
|
||||
#define pte_page(pte) pfn_to_page(pte_pfn(pte))
|
||||
@@ -305,11 +315,6 @@ static inline pmd_t pmd_mkwrite(pmd_t pmd)
|
||||
return pmd_set_flags(pmd, _PAGE_RW);
|
||||
}
|
||||
|
||||
|
||||
-static inline pmd_t pmd_mknotpresent(pmd_t pmd)
|
||||
-{
|
||||
- return pmd_clear_flags(pmd, _PAGE_PRESENT | _PAGE_PROTNONE);
|
||||
@ -377,7 +377,7 @@ index 84c62d950023..4de6c282c02a 100644
|
||||
static inline int pte_soft_dirty(pte_t pte)
|
||||
{
|
||||
@@ -359,19 +364,58 @@ static inline pgprotval_t massage_pgprot(pgprot_t pgprot)
|
||||
|
||||
|
||||
static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot)
|
||||
{
|
||||
- return __pte(((phys_addr_t)page_nr << PAGE_SHIFT) |
|
||||
@ -387,7 +387,7 @@ index 84c62d950023..4de6c282c02a 100644
|
||||
+ pfn &= PTE_PFN_MASK;
|
||||
+ return __pte(pfn | massage_pgprot(pgprot));
|
||||
}
|
||||
|
||||
|
||||
static inline pmd_t pfn_pmd(unsigned long page_nr, pgprot_t pgprot)
|
||||
{
|
||||
- return __pmd(((phys_addr_t)page_nr << PAGE_SHIFT) |
|
||||
@ -411,7 +411,7 @@ index 84c62d950023..4de6c282c02a 100644
|
||||
+ return pfn_pmd(pmd_pfn(pmd),
|
||||
+ __pgprot(pmd_flags(pmd) & ~(_PAGE_PRESENT|_PAGE_PROTNONE)));
|
||||
}
|
||||
|
||||
|
||||
+static inline pud_t pud_set_flags(pud_t pud, pudval_t set)
|
||||
+{
|
||||
+ pudval_t v = native_pud_val(pud);
|
||||
@ -437,7 +437,7 @@ index 84c62d950023..4de6c282c02a 100644
|
||||
{
|
||||
- pteval_t val = pte_val(pte);
|
||||
+ pteval_t val = pte_val(pte), oldval = val;
|
||||
|
||||
|
||||
/*
|
||||
* Chop off the NX bit (if present), and add the NX portion of
|
||||
@@ -379,17 +423,17 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
|
||||
@ -448,23 +448,23 @@ index 84c62d950023..4de6c282c02a 100644
|
||||
+ val = flip_protnone_guard(oldval, val, PTE_PFN_MASK);
|
||||
return __pte(val);
|
||||
}
|
||||
|
||||
|
||||
static inline pmd_t pmd_modify(pmd_t pmd, pgprot_t newprot)
|
||||
{
|
||||
- pmdval_t val = pmd_val(pmd);
|
||||
+ pmdval_t val = pmd_val(pmd), oldval = val;
|
||||
|
||||
|
||||
val &= _HPAGE_CHG_MASK;
|
||||
val |= massage_pgprot(newprot) & ~_HPAGE_CHG_MASK;
|
||||
-
|
||||
+ val = flip_protnone_guard(oldval, val, PHYSICAL_PMD_PAGE_MASK);
|
||||
return __pmd(val);
|
||||
}
|
||||
|
||||
|
||||
@@ -926,6 +970,14 @@ static inline pte_t pte_swp_clear_soft_dirty(pte_t pte)
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
+#define __HAVE_ARCH_PFN_MODIFY_ALLOWED 1
|
||||
+extern bool pfn_modify_allowed(unsigned long pfn, pgprot_t prot);
|
||||
+
|
||||
@ -475,7 +475,7 @@ index 84c62d950023..4de6c282c02a 100644
|
||||
+
|
||||
#include <asm-generic/pgtable.h>
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
|
||||
diff --git a/arch/x86/include/asm/pgtable_64.h b/arch/x86/include/asm/pgtable_64.h
|
||||
index c810226e741a..221a32ed1372 100644
|
||||
--- a/arch/x86/include/asm/pgtable_64.h
|
||||
@ -483,7 +483,7 @@ index c810226e741a..221a32ed1372 100644
|
||||
@@ -163,18 +163,52 @@ static inline int pgd_large(pgd_t pgd) { return 0; }
|
||||
#define pte_offset_map(dir, address) pte_offset_kernel((dir), (address))
|
||||
#define pte_unmap(pte) ((void)(pte))/* NOP */
|
||||
|
||||
|
||||
-/* Encode and de-code a swap entry */
|
||||
-#define SWP_TYPE_BITS 5
|
||||
-#define SWP_OFFSET_SHIFT (_PAGE_BIT_PROTNONE + 1)
|
||||
@ -515,9 +515,9 @@ index c810226e741a..221a32ed1372 100644
|
||||
+
|
||||
+/* We always extract/encode the offset by shifting it all the way up, and then down again */
|
||||
+#define SWP_OFFSET_SHIFT (SWP_OFFSET_FIRST_BIT+SWP_TYPE_BITS)
|
||||
|
||||
|
||||
#define MAX_SWAPFILES_CHECK() BUILD_BUG_ON(MAX_SWAPFILES_SHIFT > SWP_TYPE_BITS)
|
||||
|
||||
|
||||
-#define __swp_type(x) (((x).val >> (_PAGE_BIT_PRESENT + 1)) \
|
||||
- & ((1U << SWP_TYPE_BITS) - 1))
|
||||
-#define __swp_offset(x) ((x).val >> SWP_OFFSET_SHIFT)
|
||||
@ -541,15 +541,15 @@ index c810226e741a..221a32ed1372 100644
|
||||
+
|
||||
#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val((pte)) })
|
||||
#define __swp_entry_to_pte(x) ((pte_t) { .pte = (x).val })
|
||||
|
||||
|
||||
@@ -201,6 +235,8 @@ extern void cleanup_highmap(void);
|
||||
extern void init_extra_mapping_uc(unsigned long phys, unsigned long size);
|
||||
extern void init_extra_mapping_wb(unsigned long phys, unsigned long size);
|
||||
|
||||
|
||||
+#include <asm/pgtable-invert.h>
|
||||
+
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
|
||||
#endif /* _ASM_X86_PGTABLE_64_H */
|
||||
diff --git a/arch/x86/include/asm/pgtable_types.h b/arch/x86/include/asm/pgtable_types.h
|
||||
index 8dba273da25a..7572ce32055e 100644
|
||||
@ -581,9 +581,9 @@ index 8e415cf65457..a3a53955f01c 100644
|
||||
--- a/arch/x86/include/asm/processor.h
|
||||
+++ b/arch/x86/include/asm/processor.h
|
||||
@@ -172,6 +172,11 @@ extern const struct seq_operations cpuinfo_op;
|
||||
|
||||
|
||||
extern void cpu_detect(struct cpuinfo_x86 *c);
|
||||
|
||||
|
||||
+static inline unsigned long l1tf_pfn_limit(void)
|
||||
+{
|
||||
+ return BIT(boot_cpu_data.x86_phys_bits - 1 - PAGE_SHIFT) - 1;
|
||||
@ -601,17 +601,17 @@ index 12a8867071f3..34e4aaaf03d2 100644
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/intel-family.h>
|
||||
+#include <asm/e820.h>
|
||||
|
||||
|
||||
static void __init spectre_v2_select_mitigation(void);
|
||||
static void __init ssb_select_mitigation(void);
|
||||
+static void __init l1tf_select_mitigation(void);
|
||||
|
||||
|
||||
/*
|
||||
* Our boot-time value of the SPEC_CTRL MSR. We read it once so that any
|
||||
@@ -80,6 +82,8 @@ void __init check_bugs(void)
|
||||
*/
|
||||
ssb_select_mitigation();
|
||||
|
||||
|
||||
+ l1tf_select_mitigation();
|
||||
+
|
||||
#ifdef CONFIG_X86_32
|
||||
@ -620,7 +620,7 @@ index 12a8867071f3..34e4aaaf03d2 100644
|
||||
@@ -309,23 +313,6 @@ static enum spectre_v2_mitigation_cmd __init spectre_v2_parse_cmdline(void)
|
||||
return cmd;
|
||||
}
|
||||
|
||||
|
||||
-/* Check for Skylake-like CPUs (for RSB handling) */
|
||||
-static bool __init is_skylake_era(void)
|
||||
-{
|
||||
@ -643,7 +643,7 @@ index 12a8867071f3..34e4aaaf03d2 100644
|
||||
enum spectre_v2_mitigation_cmd cmd = spectre_v2_parse_cmdline();
|
||||
@@ -386,22 +373,15 @@ retpoline_auto:
|
||||
pr_info("%s\n", spectre_v2_strings[mode]);
|
||||
|
||||
|
||||
/*
|
||||
- * If neither SMEP nor PTI are available, there is a risk of
|
||||
- * hitting userspace addresses in the RSB after a context switch
|
||||
@ -668,13 +668,13 @@ index 12a8867071f3..34e4aaaf03d2 100644
|
||||
- }
|
||||
+ setup_force_cpu_cap(X86_FEATURE_RSB_CTXSW);
|
||||
+ pr_info("Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\n");
|
||||
|
||||
|
||||
/* Initialize Indirect Branch Prediction Barrier if supported */
|
||||
if (boot_cpu_has(X86_FEATURE_IBPB)) {
|
||||
@@ -652,6 +632,35 @@ void x86_spec_ctrl_setup_ap(void)
|
||||
x86_amd_ssb_disable();
|
||||
}
|
||||
|
||||
|
||||
+#undef pr_fmt
|
||||
+#define pr_fmt(fmt) "L1TF: " fmt
|
||||
+static void __init l1tf_select_mitigation(void)
|
||||
@ -705,12 +705,12 @@ index 12a8867071f3..34e4aaaf03d2 100644
|
||||
+#undef pr_fmt
|
||||
+
|
||||
#ifdef CONFIG_SYSFS
|
||||
|
||||
|
||||
static ssize_t cpu_show_common(struct device *dev, struct device_attribute *attr,
|
||||
@@ -679,6 +688,11 @@ static ssize_t cpu_show_common(struct device *dev, struct device_attribute *attr
|
||||
case X86_BUG_SPEC_STORE_BYPASS:
|
||||
return sprintf(buf, "%s\n", ssb_strings[ssb_mode]);
|
||||
|
||||
|
||||
+ case X86_BUG_L1TF:
|
||||
+ if (boot_cpu_has(X86_FEATURE_L1TF_PTEINV))
|
||||
+ return sprintf(buf, "Mitigation: Page Table Inversion\n");
|
||||
@ -736,7 +736,7 @@ index 3d21b28f9826..4d3fa79c0f09 100644
|
||||
@@ -880,6 +880,21 @@ static const __initconst struct x86_cpu_id cpu_no_spec_store_bypass[] = {
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
+static const __initconst struct x86_cpu_id cpu_no_l1tf[] = {
|
||||
+ /* in addition to cpu_no_speculation */
|
||||
+ { X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_SILVERMONT1 },
|
||||
@ -757,7 +757,7 @@ index 3d21b28f9826..4d3fa79c0f09 100644
|
||||
u64 ia32_cap = 0;
|
||||
@@ -905,6 +920,11 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c)
|
||||
return;
|
||||
|
||||
|
||||
setup_force_cpu_bug(X86_BUG_CPU_MELTDOWN);
|
||||
+
|
||||
+ if (x86_match_cpu(cpu_no_l1tf))
|
||||
@ -765,7 +765,7 @@ index 3d21b28f9826..4d3fa79c0f09 100644
|
||||
+
|
||||
+ setup_force_cpu_bug(X86_BUG_L1TF);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c
|
||||
index 1f5c47a49e35..c6f466d6cc57 100644
|
||||
@ -796,7 +796,7 @@ index f534a0e3af53..632195b41688 100644
|
||||
@@ -97,10 +97,12 @@ unsigned paravirt_patch_call(void *insnbuf,
|
||||
struct branch *b = insnbuf;
|
||||
unsigned long delta = (unsigned long)target - (addr+5);
|
||||
|
||||
|
||||
- if (tgt_clobbers & ~site_clobbers)
|
||||
- return len; /* target would clobber too much for this site */
|
||||
- if (len < 5)
|
||||
@ -806,13 +806,13 @@ index f534a0e3af53..632195b41688 100644
|
||||
+#endif
|
||||
return len; /* call too long for patch site */
|
||||
+ }
|
||||
|
||||
|
||||
b->opcode = 0xe8; /* call */
|
||||
b->delta = delta;
|
||||
@@ -115,8 +117,12 @@ unsigned paravirt_patch_jmp(void *insnbuf, const void *target,
|
||||
struct branch *b = insnbuf;
|
||||
unsigned long delta = (unsigned long)target - (addr+5);
|
||||
|
||||
|
||||
- if (len < 5)
|
||||
+ if (len < 5) {
|
||||
+#ifdef CONFIG_RETPOLINE
|
||||
@ -820,7 +820,7 @@ index f534a0e3af53..632195b41688 100644
|
||||
+#endif
|
||||
return len; /* call too long for patch site */
|
||||
+ }
|
||||
|
||||
|
||||
b->opcode = 0xe9; /* jmp */
|
||||
b->delta = delta;
|
||||
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
|
||||
@ -830,7 +830,7 @@ index bbaae4cf9e8e..31c4bc0d3372 100644
|
||||
@@ -851,6 +851,12 @@ void __init setup_arch(char **cmdline_p)
|
||||
memblock_reserve(__pa_symbol(_text),
|
||||
(unsigned long)__bss_stop - (unsigned long)_text);
|
||||
|
||||
|
||||
+ /*
|
||||
+ * Make sure page 0 is always reserved because on systems with
|
||||
+ * L1TF its contents can be leaked to user processes.
|
||||
@ -838,7 +838,7 @@ index bbaae4cf9e8e..31c4bc0d3372 100644
|
||||
+ memblock_reserve(0, PAGE_SIZE);
|
||||
+
|
||||
early_reserve_initrd();
|
||||
|
||||
|
||||
/*
|
||||
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
|
||||
index 151fd33e9043..4954a6cef50a 100644
|
||||
@ -850,7 +850,7 @@ index 151fd33e9043..4954a6cef50a 100644
|
||||
#include <linux/bootmem.h> /* for max_low_pfn */
|
||||
+#include <linux/swapfile.h>
|
||||
+#include <linux/swapops.h>
|
||||
|
||||
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/e820.h>
|
||||
@@ -767,3 +769,26 @@ void update_cache_mode_entry(unsigned entry, enum page_cache_mode cache)
|
||||
@ -885,7 +885,7 @@ index 76604c8a2a48..7bf14e74fc8f 100644
|
||||
--- a/arch/x86/mm/kmmio.c
|
||||
+++ b/arch/x86/mm/kmmio.c
|
||||
@@ -125,24 +125,29 @@ static struct kmmio_fault_page *get_kmmio_fault_page(unsigned long addr)
|
||||
|
||||
|
||||
static void clear_pmd_presence(pmd_t *pmd, bool clear, pmdval_t *old)
|
||||
{
|
||||
+ pmd_t new_pmd;
|
||||
@ -904,7 +904,7 @@ index 76604c8a2a48..7bf14e74fc8f 100644
|
||||
+ }
|
||||
+ set_pmd(pmd, new_pmd);
|
||||
}
|
||||
|
||||
|
||||
static void clear_pte_presence(pte_t *pte, bool clear, pteval_t *old)
|
||||
{
|
||||
pteval_t v = pte_val(*pte);
|
||||
@ -922,7 +922,7 @@ index 76604c8a2a48..7bf14e74fc8f 100644
|
||||
+ set_pte_atomic(pte, __pte(*old));
|
||||
+ }
|
||||
}
|
||||
|
||||
|
||||
static int clear_page_presence(struct kmmio_fault_page *f, bool clear)
|
||||
diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.c
|
||||
index 307f60ecfc6d..9a055ea279eb 100644
|
||||
@ -958,14 +958,14 @@ index 79377e2a7bcd..27610c2d1821 100644
|
||||
--- a/arch/x86/mm/pageattr.c
|
||||
+++ b/arch/x86/mm/pageattr.c
|
||||
@@ -1006,8 +1006,8 @@ static int populate_pmd(struct cpa_data *cpa,
|
||||
|
||||
|
||||
pmd = pmd_offset(pud, start);
|
||||
|
||||
|
||||
- set_pmd(pmd, __pmd(cpa->pfn | _PAGE_PSE |
|
||||
- massage_pgprot(pmd_pgprot)));
|
||||
+ set_pmd(pmd, pmd_mkhuge(pfn_pmd(cpa->pfn,
|
||||
+ canon_pgprot(pmd_pgprot))));
|
||||
|
||||
|
||||
start += PMD_SIZE;
|
||||
cpa->pfn += PMD_SIZE;
|
||||
@@ -1079,8 +1079,8 @@ static int populate_pud(struct cpa_data *cpa, unsigned long start, pgd_t *pgd,
|
||||
@ -976,7 +976,7 @@ index 79377e2a7bcd..27610c2d1821 100644
|
||||
- massage_pgprot(pud_pgprot)));
|
||||
+ set_pud(pud, pud_mkhuge(pfn_pud(cpa->pfn,
|
||||
+ canon_pgprot(pud_pgprot))));
|
||||
|
||||
|
||||
start += PUD_SIZE;
|
||||
cpa->pfn += PUD_SIZE;
|
||||
diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
|
||||
@ -984,17 +984,17 @@ index f9e0d09f7c66..8a0f77fb5181 100644
|
||||
--- a/drivers/acpi/acpi_lpss.c
|
||||
+++ b/drivers/acpi/acpi_lpss.c
|
||||
@@ -154,10 +154,12 @@ static const struct lpss_device_desc lpt_sdio_dev_desc = {
|
||||
|
||||
|
||||
static const struct lpss_device_desc byt_pwm_dev_desc = {
|
||||
.flags = LPSS_SAVE_CTX,
|
||||
+ .prv_offset = 0x800,
|
||||
};
|
||||
|
||||
|
||||
static const struct lpss_device_desc bsw_pwm_dev_desc = {
|
||||
.flags = LPSS_SAVE_CTX | LPSS_NO_D3_DELAY,
|
||||
+ .prv_offset = 0x800,
|
||||
};
|
||||
|
||||
|
||||
static const struct lpss_device_desc byt_uart_dev_desc = {
|
||||
diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c
|
||||
index 143edea1076f..41090ef5facb 100644
|
||||
@ -1003,7 +1003,7 @@ index 143edea1076f..41090ef5facb 100644
|
||||
@@ -524,16 +524,24 @@ ssize_t __weak cpu_show_spec_store_bypass(struct device *dev,
|
||||
return sprintf(buf, "Not affected\n");
|
||||
}
|
||||
|
||||
|
||||
+ssize_t __weak cpu_show_l1tf(struct device *dev,
|
||||
+ struct device_attribute *attr, char *buf)
|
||||
+{
|
||||
@ -1015,7 +1015,7 @@ index 143edea1076f..41090ef5facb 100644
|
||||
static DEVICE_ATTR(spectre_v2, 0444, cpu_show_spectre_v2, NULL);
|
||||
static DEVICE_ATTR(spec_store_bypass, 0444, cpu_show_spec_store_bypass, NULL);
|
||||
+static DEVICE_ATTR(l1tf, 0444, cpu_show_l1tf, NULL);
|
||||
|
||||
|
||||
static struct attribute *cpu_root_vulnerabilities_attrs[] = {
|
||||
&dev_attr_meltdown.attr,
|
||||
&dev_attr_spectre_v1.attr,
|
||||
@ -1024,23 +1024,23 @@ index 143edea1076f..41090ef5facb 100644
|
||||
+ &dev_attr_l1tf.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
diff --git a/drivers/char/tpm/tpm-dev.c b/drivers/char/tpm/tpm-dev.c
|
||||
index 912ad30be585..4719aa781bf2 100644
|
||||
--- a/drivers/char/tpm/tpm-dev.c
|
||||
+++ b/drivers/char/tpm/tpm-dev.c
|
||||
@@ -25,7 +25,7 @@ struct file_priv {
|
||||
struct tpm_chip *chip;
|
||||
|
||||
|
||||
/* Data passed to and from the tpm via the read/write calls */
|
||||
- atomic_t data_pending;
|
||||
+ size_t data_pending;
|
||||
struct mutex buffer_mutex;
|
||||
|
||||
|
||||
struct timer_list user_read_timer; /* user needs to claim result */
|
||||
@@ -46,7 +46,7 @@ static void timeout_work(struct work_struct *work)
|
||||
struct file_priv *priv = container_of(work, struct file_priv, work);
|
||||
|
||||
|
||||
mutex_lock(&priv->buffer_mutex);
|
||||
- atomic_set(&priv->data_pending, 0);
|
||||
+ priv->data_pending = 0;
|
||||
@ -1049,7 +1049,7 @@ index 912ad30be585..4719aa781bf2 100644
|
||||
}
|
||||
@@ -72,7 +72,6 @@ static int tpm_open(struct inode *inode, struct file *file)
|
||||
}
|
||||
|
||||
|
||||
priv->chip = chip;
|
||||
- atomic_set(&priv->data_pending, 0);
|
||||
mutex_init(&priv->buffer_mutex);
|
||||
@ -1062,7 +1062,7 @@ index 912ad30be585..4719aa781bf2 100644
|
||||
- ssize_t ret_size;
|
||||
+ ssize_t ret_size = 0;
|
||||
int rc;
|
||||
|
||||
|
||||
del_singleshot_timer_sync(&priv->user_read_timer);
|
||||
flush_work(&priv->work);
|
||||
- ret_size = atomic_read(&priv->data_pending);
|
||||
@ -1071,7 +1071,7 @@ index 912ad30be585..4719aa781bf2 100644
|
||||
- if (size < ret_size)
|
||||
- ret_size = size;
|
||||
+ mutex_lock(&priv->buffer_mutex);
|
||||
|
||||
|
||||
- mutex_lock(&priv->buffer_mutex);
|
||||
+ if (priv->data_pending) {
|
||||
+ ret_size = min_t(ssize_t, size, priv->data_pending);
|
||||
@ -1080,21 +1080,21 @@ index 912ad30be585..4719aa781bf2 100644
|
||||
+ memset(priv->data_buffer, 0, priv->data_pending);
|
||||
if (rc)
|
||||
ret_size = -EFAULT;
|
||||
|
||||
|
||||
- mutex_unlock(&priv->buffer_mutex);
|
||||
+ priv->data_pending = 0;
|
||||
}
|
||||
|
||||
|
||||
- atomic_set(&priv->data_pending, 0);
|
||||
-
|
||||
+ mutex_unlock(&priv->buffer_mutex);
|
||||
return ret_size;
|
||||
}
|
||||
|
||||
|
||||
@@ -118,18 +113,20 @@ static ssize_t tpm_write(struct file *file, const char __user *buf,
|
||||
size_t in_size = size;
|
||||
ssize_t out_size;
|
||||
|
||||
|
||||
- /* cannot perform a write until the read has cleared
|
||||
- either via tpm_read or a user_read_timer timeout.
|
||||
- This also prevents splitted buffered writes from blocking here.
|
||||
@ -1104,9 +1104,9 @@ index 912ad30be585..4719aa781bf2 100644
|
||||
-
|
||||
if (in_size > TPM_BUFSIZE)
|
||||
return -E2BIG;
|
||||
|
||||
|
||||
mutex_lock(&priv->buffer_mutex);
|
||||
|
||||
|
||||
+ /* Cannot perform a write until the read has cleared either via
|
||||
+ * tpm_read or a user_read_timer timeout. This also prevents split
|
||||
+ * buffered writes from blocking here.
|
||||
@ -1122,11 +1122,11 @@ index 912ad30be585..4719aa781bf2 100644
|
||||
@@ -153,7 +150,7 @@ static ssize_t tpm_write(struct file *file, const char __user *buf,
|
||||
return out_size;
|
||||
}
|
||||
|
||||
|
||||
- atomic_set(&priv->data_pending, out_size);
|
||||
+ priv->data_pending = out_size;
|
||||
mutex_unlock(&priv->buffer_mutex);
|
||||
|
||||
|
||||
/* Set a timeout by which the reader must come claim the result */
|
||||
@@ -172,7 +169,7 @@ static int tpm_release(struct inode *inode, struct file *file)
|
||||
del_singleshot_timer_sync(&priv->user_read_timer);
|
||||
@ -1156,7 +1156,7 @@ index 6790ebb366dd..98fd9a594841 100644
|
||||
- (IB_ACCESS_LOCAL_WRITE | IB_ACCESS_REMOTE_WRITE |
|
||||
- IB_ACCESS_REMOTE_ATOMIC | IB_ACCESS_MW_BIND));
|
||||
+ umem->writable = ib_access_writable(access);
|
||||
|
||||
|
||||
if (access & IB_ACCESS_ON_DEMAND) {
|
||||
put_pid(umem->pid);
|
||||
diff --git a/drivers/infiniband/hw/mlx4/mr.c b/drivers/infiniband/hw/mlx4/mr.c
|
||||
@ -1166,7 +1166,7 @@ index ce87e9cc7eff..bf52e35dd506 100644
|
||||
@@ -130,6 +130,40 @@ out:
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
+static struct ib_umem *mlx4_get_umem_mr(struct ib_ucontext *context, u64 start,
|
||||
+ u64 length, u64 virt_addr,
|
||||
+ int access_flags)
|
||||
@ -1207,7 +1207,7 @@ index ce87e9cc7eff..bf52e35dd506 100644
|
||||
@@ -144,10 +178,8 @@ struct ib_mr *mlx4_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
|
||||
if (!mr)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
|
||||
- /* Force registering the memory as writable. */
|
||||
- /* Used for memory re-registeration. HCA protects the access */
|
||||
- mr->umem = ib_umem_get(pd->uobject->context, start, length,
|
||||
@ -1219,16 +1219,16 @@ index ce87e9cc7eff..bf52e35dd506 100644
|
||||
goto err_free;
|
||||
@@ -214,6 +246,9 @@ int mlx4_ib_rereg_user_mr(struct ib_mr *mr, int flags,
|
||||
}
|
||||
|
||||
|
||||
if (flags & IB_MR_REREG_ACCESS) {
|
||||
+ if (ib_access_writable(mr_access_flags) && !mmr->umem->writable)
|
||||
+ return -EPERM;
|
||||
+
|
||||
err = mlx4_mr_hw_change_access(dev->dev, *pmpt_entry,
|
||||
convert_access(mr_access_flags));
|
||||
|
||||
|
||||
@@ -227,10 +262,9 @@ int mlx4_ib_rereg_user_mr(struct ib_mr *mr, int flags,
|
||||
|
||||
|
||||
mlx4_mr_rereg_mem_cleanup(dev->dev, &mmr->mmr);
|
||||
ib_umem_release(mmr->umem);
|
||||
- mmr->umem = ib_umem_get(mr->uobject->context, start, length,
|
||||
@ -1248,11 +1248,11 @@ index 748b63b86cbc..40242ead096f 100644
|
||||
@@ -643,7 +643,7 @@ static ssize_t ocrdma_dbgfs_ops_write(struct file *filp,
|
||||
struct ocrdma_stats *pstats = filp->private_data;
|
||||
struct ocrdma_dev *dev = pstats->dev;
|
||||
|
||||
|
||||
- if (count > 32)
|
||||
+ if (*ppos != 0 || count == 0 || count > sizeof(tmp_str))
|
||||
goto err;
|
||||
|
||||
|
||||
if (copy_from_user(tmp_str, buffer, count))
|
||||
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
|
||||
index bec9f099573b..68d0a5c9d437 100644
|
||||
@ -1265,26 +1265,26 @@ index bec9f099573b..68d0a5c9d437 100644
|
||||
- struct skb_shared_info *shinfo = skb_shinfo(skb);
|
||||
RING_IDX cons = queue->rx.rsp_cons;
|
||||
struct sk_buff *nskb;
|
||||
|
||||
|
||||
@@ -888,15 +887,16 @@ static RING_IDX xennet_fill_frags(struct netfront_queue *queue,
|
||||
RING_GET_RESPONSE(&queue->rx, ++cons);
|
||||
skb_frag_t *nfrag = &skb_shinfo(nskb)->frags[0];
|
||||
|
||||
|
||||
- if (shinfo->nr_frags == MAX_SKB_FRAGS) {
|
||||
+ if (skb_shinfo(skb)->nr_frags == MAX_SKB_FRAGS) {
|
||||
unsigned int pull_to = NETFRONT_SKB_CB(skb)->pull_to;
|
||||
|
||||
|
||||
BUG_ON(pull_to <= skb_headlen(skb));
|
||||
__pskb_pull_tail(skb, pull_to - skb_headlen(skb));
|
||||
}
|
||||
- BUG_ON(shinfo->nr_frags >= MAX_SKB_FRAGS);
|
||||
+ BUG_ON(skb_shinfo(skb)->nr_frags >= MAX_SKB_FRAGS);
|
||||
|
||||
|
||||
- skb_add_rx_frag(skb, shinfo->nr_frags, skb_frag_page(nfrag),
|
||||
+ skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
|
||||
+ skb_frag_page(nfrag),
|
||||
rx->offset, rx->status, PAGE_SIZE);
|
||||
|
||||
|
||||
skb_shinfo(nskb)->nr_frags = 0;
|
||||
diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
|
||||
index de53c9694b68..5dc288fecace 100644
|
||||
@ -1296,7 +1296,7 @@ index de53c9694b68..5dc288fecace 100644
|
||||
struct scsi_cd *cd;
|
||||
+ struct scsi_device *sdev;
|
||||
int ret = -ENXIO;
|
||||
|
||||
|
||||
+ cd = scsi_cd_get(bdev->bd_disk);
|
||||
+ if (!cd)
|
||||
+ goto out;
|
||||
@ -1304,7 +1304,7 @@ index de53c9694b68..5dc288fecace 100644
|
||||
+ sdev = cd->device;
|
||||
+ scsi_autopm_get_device(sdev);
|
||||
check_disk_change(bdev);
|
||||
|
||||
|
||||
mutex_lock(&sr_mutex);
|
||||
- cd = scsi_cd_get(bdev->bd_disk);
|
||||
- if (cd) {
|
||||
@ -1322,11 +1322,11 @@ index de53c9694b68..5dc288fecace 100644
|
||||
+out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -559,6 +567,8 @@ static int sr_block_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
|
||||
+ scsi_autopm_get_device(sdev);
|
||||
+
|
||||
/*
|
||||
@ -1339,14 +1339,14 @@ index de53c9694b68..5dc288fecace 100644
|
||||
- goto out;
|
||||
+ goto put;
|
||||
}
|
||||
|
||||
|
||||
ret = cdrom_ioctl(&cd->cdi, bdev, mode, cmd, arg);
|
||||
if (ret != -ENOSYS)
|
||||
- goto out;
|
||||
+ goto put;
|
||||
|
||||
|
||||
ret = scsi_ioctl(sdev, cmd, argp);
|
||||
|
||||
|
||||
+put:
|
||||
+ scsi_autopm_put_device(sdev);
|
||||
+
|
||||
@ -1359,7 +1359,7 @@ index 250c1222e30c..807efaab838e 100644
|
||||
+++ b/fs/dcache.c
|
||||
@@ -1954,10 +1954,12 @@ struct dentry *d_make_root(struct inode *root_inode)
|
||||
static const struct qstr name = QSTR_INIT("/", 1);
|
||||
|
||||
|
||||
res = __d_alloc(root_inode->i_sb, &name);
|
||||
- if (res)
|
||||
+ if (res) {
|
||||
@ -1372,42 +1372,6 @@ index 250c1222e30c..807efaab838e 100644
|
||||
}
|
||||
return res;
|
||||
}
|
||||
diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c
|
||||
index 041117fd8fd7..0963213e9cd3 100644
|
||||
--- a/fs/ext4/ialloc.c
|
||||
+++ b/fs/ext4/ialloc.c
|
||||
@@ -1308,7 +1308,10 @@ int ext4_init_inode_table(struct super_block *sb, ext4_group_t group,
|
||||
ext4_itable_unused_count(sb, gdp)),
|
||||
sbi->s_inodes_per_block);
|
||||
|
||||
- if ((used_blks < 0) || (used_blks > sbi->s_itb_per_group)) {
|
||||
+ if ((used_blks < 0) || (used_blks > sbi->s_itb_per_group) ||
|
||||
+ ((group == 0) && ((EXT4_INODES_PER_GROUP(sb) -
|
||||
+ ext4_itable_unused_count(sb, gdp)) <
|
||||
+ EXT4_FIRST_INO(sb)))) {
|
||||
ext4_error(sb, "Something is wrong with group %u: "
|
||||
"used itable blocks: %d; "
|
||||
"itable unused count: %u",
|
||||
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
|
||||
index 3e4d8ac1974e..8d18f6142da5 100644
|
||||
--- a/fs/ext4/super.c
|
||||
+++ b/fs/ext4/super.c
|
||||
@@ -2875,14 +2875,8 @@ static ext4_group_t ext4_has_uninit_itable(struct super_block *sb)
|
||||
if (!gdp)
|
||||
continue;
|
||||
|
||||
- if (gdp->bg_flags & cpu_to_le16(EXT4_BG_INODE_ZEROED))
|
||||
- continue;
|
||||
- if (group != 0)
|
||||
+ if (!(gdp->bg_flags & cpu_to_le16(EXT4_BG_INODE_ZEROED)))
|
||||
break;
|
||||
- ext4_error(sb, "Inode table for bg 0 marked as "
|
||||
- "needing zeroing");
|
||||
- if (sb->s_flags & MS_RDONLY)
|
||||
- return ngroups;
|
||||
}
|
||||
|
||||
return group;
|
||||
diff --git a/fs/namespace.c b/fs/namespace.c
|
||||
index a879560ea144..b56b50e3da11 100644
|
||||
--- a/fs/namespace.c
|
||||
@ -1433,7 +1397,7 @@ index a879560ea144..b56b50e3da11 100644
|
||||
+ /* caller will mntput() */
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
@@ -1124,12 +1133,27 @@ static DECLARE_DELAYED_WORK(delayed_mntput_work, delayed_mntput);
|
||||
static void mntput_no_expire(struct mount *mnt)
|
||||
{
|
||||
@ -1471,7 +1435,7 @@ index 25b793325b09..dabecb661264 100644
|
||||
@@ -799,6 +799,18 @@ static inline int pmd_free_pte_page(pmd_t *pmd)
|
||||
}
|
||||
#endif /* CONFIG_HAVE_ARCH_HUGE_VMAP */
|
||||
|
||||
|
||||
+#ifndef __HAVE_ARCH_PFN_MODIFY_ALLOWED
|
||||
+static inline bool pfn_modify_allowed(unsigned long pfn, pgprot_t prot)
|
||||
+{
|
||||
@ -1485,7 +1449,7 @@ index 25b793325b09..dabecb661264 100644
|
||||
+#endif /* !_HAVE_ARCH_PFN_MODIFY_ALLOWED */
|
||||
+
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
|
||||
#ifndef io_remap_pfn_range
|
||||
diff --git a/include/linux/cpu.h b/include/linux/cpu.h
|
||||
index 2f9d12022100..063c73ed6d78 100644
|
||||
@ -1497,7 +1461,7 @@ index 2f9d12022100..063c73ed6d78 100644
|
||||
struct device_attribute *attr, char *buf);
|
||||
+extern ssize_t cpu_show_l1tf(struct device *dev,
|
||||
+ struct device_attribute *attr, char *buf);
|
||||
|
||||
|
||||
extern __printf(4, 5)
|
||||
struct device *cpu_device_create(struct device *parent, void *drvdata,
|
||||
diff --git a/include/linux/mm.h b/include/linux/mm.h
|
||||
@ -1523,23 +1487,23 @@ index 388293a91e8c..e4594de79bc4 100644
|
||||
extern int try_to_unuse(unsigned int, bool, unsigned long);
|
||||
+extern unsigned long generic_max_swapfile_size(void);
|
||||
+extern unsigned long max_swapfile_size(void);
|
||||
|
||||
|
||||
#endif /* _LINUX_SWAPFILE_H */
|
||||
diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h
|
||||
index ff307b548ed3..646891f3bc1e 100644
|
||||
--- a/include/linux/thread_info.h
|
||||
+++ b/include/linux/thread_info.h
|
||||
@@ -55,11 +55,7 @@ extern long do_no_restart_syscall(struct restart_block *parm);
|
||||
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
|
||||
-#ifdef CONFIG_DEBUG_STACK_USAGE
|
||||
-# define THREADINFO_GFP (GFP_KERNEL | __GFP_NOTRACK | __GFP_ZERO)
|
||||
-#else
|
||||
-# define THREADINFO_GFP (GFP_KERNEL | __GFP_NOTRACK)
|
||||
-#endif
|
||||
+#define THREADINFO_GFP (GFP_KERNEL | __GFP_NOTRACK | __GFP_ZERO)
|
||||
|
||||
|
||||
/*
|
||||
* flag set/clear/test wrappers
|
||||
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
|
||||
@ -1549,7 +1513,7 @@ index 120da1d7f57e..10fefb0dc640 100644
|
||||
@@ -3007,6 +3007,20 @@ static inline int ib_check_mr_access(int flags)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
+static inline bool ib_access_writable(int access_flags)
|
||||
+{
|
||||
+ /*
|
||||
@ -1606,24 +1570,24 @@ index 177cb7d111a9..d5bb1465d30c 100644
|
||||
@@ -1624,19 +1645,29 @@ int vm_insert_pfn(struct vm_area_struct *vma, unsigned long addr,
|
||||
if (track_pfn_insert(vma, &pgprot, pfn))
|
||||
return -EINVAL;
|
||||
|
||||
|
||||
+ if (!pfn_modify_allowed(pfn, pgprot))
|
||||
+ return -EACCES;
|
||||
+
|
||||
ret = insert_pfn(vma, addr, pfn, pgprot);
|
||||
|
||||
|
||||
return ret;
|
||||
}
|
||||
-EXPORT_SYMBOL(vm_insert_pfn);
|
||||
+EXPORT_SYMBOL(vm_insert_pfn_prot);
|
||||
|
||||
|
||||
int vm_insert_mixed(struct vm_area_struct *vma, unsigned long addr,
|
||||
unsigned long pfn)
|
||||
{
|
||||
+ pgprot_t pgprot = vma->vm_page_prot;
|
||||
+
|
||||
BUG_ON(!(vma->vm_flags & VM_MIXEDMAP));
|
||||
|
||||
|
||||
if (addr < vma->vm_start || addr >= vma->vm_end)
|
||||
return -EFAULT;
|
||||
+ if (track_pfn_insert(vma, &pgprot, pfn))
|
||||
@ -1631,12 +1595,12 @@ index 177cb7d111a9..d5bb1465d30c 100644
|
||||
+
|
||||
+ if (!pfn_modify_allowed(pfn, pgprot))
|
||||
+ return -EACCES;
|
||||
|
||||
|
||||
/*
|
||||
* If we don't have pte special, then we have to use the pfn_valid()
|
||||
@@ -1649,9 +1680,9 @@ int vm_insert_mixed(struct vm_area_struct *vma, unsigned long addr,
|
||||
struct page *page;
|
||||
|
||||
|
||||
page = pfn_to_page(pfn);
|
||||
- return insert_page(vma, addr, page, vma->vm_page_prot);
|
||||
+ return insert_page(vma, addr, page, pgprot);
|
||||
@ -1645,13 +1609,13 @@ index 177cb7d111a9..d5bb1465d30c 100644
|
||||
+ return insert_pfn(vma, addr, pfn, pgprot);
|
||||
}
|
||||
EXPORT_SYMBOL(vm_insert_mixed);
|
||||
|
||||
|
||||
@@ -1666,6 +1697,7 @@ static int remap_pte_range(struct mm_struct *mm, pmd_t *pmd,
|
||||
{
|
||||
pte_t *pte;
|
||||
spinlock_t *ptl;
|
||||
+ int err = 0;
|
||||
|
||||
|
||||
pte = pte_alloc_map_lock(mm, pmd, addr, &ptl);
|
||||
if (!pte)
|
||||
@@ -1673,12 +1705,16 @@ static int remap_pte_range(struct mm_struct *mm, pmd_t *pmd,
|
||||
@ -1670,14 +1634,14 @@ index 177cb7d111a9..d5bb1465d30c 100644
|
||||
- return 0;
|
||||
+ return err;
|
||||
}
|
||||
|
||||
|
||||
static inline int remap_pmd_range(struct mm_struct *mm, pud_t *pud,
|
||||
@@ -1687,6 +1723,7 @@ static inline int remap_pmd_range(struct mm_struct *mm, pud_t *pud,
|
||||
{
|
||||
pmd_t *pmd;
|
||||
unsigned long next;
|
||||
+ int err;
|
||||
|
||||
|
||||
pfn -= addr >> PAGE_SHIFT;
|
||||
pmd = pmd_alloc(mm, pud, addr);
|
||||
@@ -1695,9 +1732,10 @@ static inline int remap_pmd_range(struct mm_struct *mm, pud_t *pud,
|
||||
@ -1699,7 +1663,7 @@ index 177cb7d111a9..d5bb1465d30c 100644
|
||||
pud_t *pud;
|
||||
unsigned long next;
|
||||
+ int err;
|
||||
|
||||
|
||||
pfn -= addr >> PAGE_SHIFT;
|
||||
pud = pud_alloc(mm, pgd, addr);
|
||||
@@ -1715,9 +1754,10 @@ static inline int remap_pud_range(struct mm_struct *mm, pgd_t *pgd,
|
||||
@ -1723,7 +1687,7 @@ index c0b4b2a49462..a277f3412a5d 100644
|
||||
@@ -255,6 +255,42 @@ unsigned long change_protection(struct vm_area_struct *vma, unsigned long start,
|
||||
return pages;
|
||||
}
|
||||
|
||||
|
||||
+static int prot_none_pte_entry(pte_t *pte, unsigned long addr,
|
||||
+ unsigned long next, struct mm_walk *walk)
|
||||
+{
|
||||
@ -1766,7 +1730,7 @@ index c0b4b2a49462..a277f3412a5d 100644
|
||||
@@ -272,6 +308,19 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
+ /*
|
||||
+ * Do PROT_NONE PFN permission checks here when we can still
|
||||
+ * bail out without undoing a lot of state. This is a rather
|
||||
@ -1790,7 +1754,7 @@ index 674bf177ce44..8e25ff2b693a 100644
|
||||
@@ -2206,6 +2206,35 @@ static int claim_swapfile(struct swap_info_struct *p, struct inode *inode)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
+
|
||||
+/*
|
||||
+ * Find out how many pages are allowed for a single swap device. There
|
||||
@ -1826,7 +1790,7 @@ index 674bf177ce44..8e25ff2b693a 100644
|
||||
@@ -2241,22 +2270,7 @@ static unsigned long read_swap_header(struct swap_info_struct *p,
|
||||
p->cluster_next = 1;
|
||||
p->cluster_nr = 0;
|
||||
|
||||
|
||||
- /*
|
||||
- * Find out how many pages are allowed for a single swap
|
||||
- * device. There are two limiting factors: 1) the number
|
||||
@ -1858,7 +1822,7 @@ index 93581bba8643..09d6c4a6b53d 100644
|
||||
+ select CRYPTO_ECHAINIV
|
||||
---help---
|
||||
Support for IPsec ESP.
|
||||
|
||||
|
||||
diff --git a/net/ipv6/Kconfig b/net/ipv6/Kconfig
|
||||
index 851d5c9e3ecc..0f50248bad17 100644
|
||||
--- a/net/ipv6/Kconfig
|
||||
@ -1870,4 +1834,4 @@ index 851d5c9e3ecc..0f50248bad17 100644
|
||||
+ select CRYPTO_ECHAINIV
|
||||
---help---
|
||||
Support for IPsec ESP.
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user