From 857c9f6884a7584fe2314a2a9cbf46fe88a54698 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 7 Sep 2018 13:22:21 +0200 Subject: [PATCH] 4.9-stable patches added patches: arm-tegra-fix-tegra30-cardhu-pca954x-reset.patch fix-kexec-forbidding-kernels-signed-with-keys-in-the-secondary-keyring-to-boot.patch kvm-vmx-fixes-for-vmentry_l1d_flush-module-parameter.patch nfsv4-client-live-hangs-after-live-data-migration-recovery.patch pm-sleep-wakeup-fix-build-error-caused-by-missing-srcu-support.patch pnfs-blocklayout-off-by-one-in-bl_map_stripe.patch replace-magic-for-trusting-the-secondary-keyring-with-define.patch xtensa-increase-ranges-in-___invalidate_-i-d-cache_all.patch xtensa-limit-offsets-in-__loop_cache_-all-page.patch --- ...gra-fix-tegra30-cardhu-pca954x-reset.patch | 44 ++++ ...eys-in-the-secondary-keyring-to-boot.patch | 41 ++++ ...r-vmentry_l1d_flush-module-parameter.patch | 94 +++++++++ ...s-after-live-data-migration-recovery.patch | 129 ++++++++++++ ...error-caused-by-missing-srcu-support.patch | 53 +++++ ...cklayout-off-by-one-in-bl_map_stripe.patch | 37 ++++ ...ng-the-secondary-keyring-with-define.patch | 70 +++++++ queue-4.9/series | 9 + ...nges-in-___invalidate_-i-d-cache_all.patch | 48 +++++ ...it-offsets-in-__loop_cache_-all-page.patch | 191 ++++++++++++++++++ 10 files changed, 716 insertions(+) create mode 100644 queue-4.9/arm-tegra-fix-tegra30-cardhu-pca954x-reset.patch create mode 100644 queue-4.9/fix-kexec-forbidding-kernels-signed-with-keys-in-the-secondary-keyring-to-boot.patch create mode 100644 queue-4.9/kvm-vmx-fixes-for-vmentry_l1d_flush-module-parameter.patch create mode 100644 queue-4.9/nfsv4-client-live-hangs-after-live-data-migration-recovery.patch create mode 100644 queue-4.9/pm-sleep-wakeup-fix-build-error-caused-by-missing-srcu-support.patch create mode 100644 queue-4.9/pnfs-blocklayout-off-by-one-in-bl_map_stripe.patch create mode 100644 queue-4.9/replace-magic-for-trusting-the-secondary-keyring-with-define.patch create mode 100644 queue-4.9/xtensa-increase-ranges-in-___invalidate_-i-d-cache_all.patch create mode 100644 queue-4.9/xtensa-limit-offsets-in-__loop_cache_-all-page.patch diff --git a/queue-4.9/arm-tegra-fix-tegra30-cardhu-pca954x-reset.patch b/queue-4.9/arm-tegra-fix-tegra30-cardhu-pca954x-reset.patch new file mode 100644 index 00000000000..f7c7900cdfb --- /dev/null +++ b/queue-4.9/arm-tegra-fix-tegra30-cardhu-pca954x-reset.patch @@ -0,0 +1,44 @@ +From 6e1811900b6fe6f2b4665dba6bd6ed32c6b98575 Mon Sep 17 00:00:00 2001 +From: Jon Hunter +Date: Tue, 3 Jul 2018 09:59:47 +0100 +Subject: ARM: tegra: Fix Tegra30 Cardhu PCA954x reset + +From: Jon Hunter + +commit 6e1811900b6fe6f2b4665dba6bd6ed32c6b98575 upstream. + +On all versions of Tegra30 Cardhu, the reset signal to the NXP PCA9546 +I2C mux is connected to the Tegra GPIO BB0. Currently, this pin on the +Tegra is not configured as a GPIO but as a special-function IO (SFIO) +that is multiplexing the pin to an I2S controller. On exiting system +suspend, I2C commands sent to the PCA9546 are failing because there is +no ACK. Although it is not possible to see exactly what is happening +to the reset during suspend, by ensuring it is configured as a GPIO +and driven high, to de-assert the reset, the failures are no longer +seen. + +Please note that this GPIO is also used to drive the reset signal +going to the camera connector on the board. However, given that there +is no camera support currently for Cardhu, this should not have any +impact. + +Fixes: 40431d16ff11 ("ARM: tegra: enable PCA9546 on Cardhu") +Cc: stable@vger.kernel.org +Signed-off-by: Jon Hunter +Signed-off-by: Thierry Reding +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/boot/dts/tegra30-cardhu.dtsi | 1 + + 1 file changed, 1 insertion(+) + +--- a/arch/arm/boot/dts/tegra30-cardhu.dtsi ++++ b/arch/arm/boot/dts/tegra30-cardhu.dtsi +@@ -205,6 +205,7 @@ + #address-cells = <1>; + #size-cells = <0>; + reg = <0x70>; ++ reset-gpio = <&gpio TEGRA_GPIO(BB, 0) GPIO_ACTIVE_LOW>; + }; + }; + diff --git a/queue-4.9/fix-kexec-forbidding-kernels-signed-with-keys-in-the-secondary-keyring-to-boot.patch b/queue-4.9/fix-kexec-forbidding-kernels-signed-with-keys-in-the-secondary-keyring-to-boot.patch new file mode 100644 index 00000000000..adc419eb8ee --- /dev/null +++ b/queue-4.9/fix-kexec-forbidding-kernels-signed-with-keys-in-the-secondary-keyring-to-boot.patch @@ -0,0 +1,41 @@ +From ea93102f32244e3f45c8b26260be77ed0cc1d16c Mon Sep 17 00:00:00 2001 +From: Yannik Sembritzki +Date: Thu, 16 Aug 2018 14:05:23 +0100 +Subject: Fix kexec forbidding kernels signed with keys in the secondary keyring to boot + +From: Yannik Sembritzki + +commit ea93102f32244e3f45c8b26260be77ed0cc1d16c upstream. + +The split of .system_keyring into .builtin_trusted_keys and +.secondary_trusted_keys broke kexec, thereby preventing kernels signed by +keys which are now in the secondary keyring from being kexec'd. + +Fix this by passing VERIFY_USE_SECONDARY_KEYRING to +verify_pefile_signature(). + +Fixes: d3bfe84129f6 ("certs: Add a secondary system keyring that can be added to dynamically") +Signed-off-by: Yannik Sembritzki +Signed-off-by: David Howells +Cc: kexec@lists.infradead.org +Cc: keyrings@vger.kernel.org +Cc: linux-security-module@vger.kernel.org +Cc: stable@kernel.org +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86/kernel/kexec-bzimage64.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/arch/x86/kernel/kexec-bzimage64.c ++++ b/arch/x86/kernel/kexec-bzimage64.c +@@ -529,7 +529,7 @@ static int bzImage64_cleanup(void *loade + static int bzImage64_verify_sig(const char *kernel, unsigned long kernel_len) + { + return verify_pefile_signature(kernel, kernel_len, +- NULL, ++ VERIFY_USE_SECONDARY_KEYRING, + VERIFYING_KEXEC_PE_SIGNATURE); + } + #endif diff --git a/queue-4.9/kvm-vmx-fixes-for-vmentry_l1d_flush-module-parameter.patch b/queue-4.9/kvm-vmx-fixes-for-vmentry_l1d_flush-module-parameter.patch new file mode 100644 index 00000000000..9eac854fea4 --- /dev/null +++ b/queue-4.9/kvm-vmx-fixes-for-vmentry_l1d_flush-module-parameter.patch @@ -0,0 +1,94 @@ +From 0027ff2a75f9dcf0537ac0a65c5840b0e21a4950 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Wed, 22 Aug 2018 16:43:39 +0200 +Subject: KVM: VMX: fixes for vmentry_l1d_flush module parameter + +From: Paolo Bonzini + +commit 0027ff2a75f9dcf0537ac0a65c5840b0e21a4950 upstream. + +Two bug fixes: + +1) missing entries in the l1d_param array; this can cause a host crash +if an access attempts to reach the missing entry. Future-proof the get +function against any overflows as well. However, the two entries +VMENTER_L1D_FLUSH_EPT_DISABLED and VMENTER_L1D_FLUSH_NOT_REQUIRED must +not be accepted by the parse function, so disable them there. + +2) invalid values must be rejected even if the CPU does not have the +bug, so test for them before checking boot_cpu_has(X86_BUG_L1TF) + +... and a small refactoring, since the .cmd field is redundant with +the index in the array. + +Reported-by: Bandan Das +Cc: stable@vger.kernel.org +Fixes: a7b9020b06ec6d7c3f3b0d4ef1a9eba12654f4f7 +Signed-off-by: Paolo Bonzini +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86/kvm/vmx.c | 26 ++++++++++++++++---------- + 1 file changed, 16 insertions(+), 10 deletions(-) + +--- a/arch/x86/kvm/vmx.c ++++ b/arch/x86/kvm/vmx.c +@@ -198,12 +198,14 @@ static enum vmx_l1d_flush_state __read_m + + static const struct { + const char *option; +- enum vmx_l1d_flush_state cmd; ++ bool for_parse; + } vmentry_l1d_param[] = { +- {"auto", VMENTER_L1D_FLUSH_AUTO}, +- {"never", VMENTER_L1D_FLUSH_NEVER}, +- {"cond", VMENTER_L1D_FLUSH_COND}, +- {"always", VMENTER_L1D_FLUSH_ALWAYS}, ++ [VMENTER_L1D_FLUSH_AUTO] = {"auto", true}, ++ [VMENTER_L1D_FLUSH_NEVER] = {"never", true}, ++ [VMENTER_L1D_FLUSH_COND] = {"cond", true}, ++ [VMENTER_L1D_FLUSH_ALWAYS] = {"always", true}, ++ [VMENTER_L1D_FLUSH_EPT_DISABLED] = {"EPT disabled", false}, ++ [VMENTER_L1D_FLUSH_NOT_REQUIRED] = {"not required", false}, + }; + + #define L1D_CACHE_ORDER 4 +@@ -287,8 +289,9 @@ static int vmentry_l1d_flush_parse(const + + if (s) { + for (i = 0; i < ARRAY_SIZE(vmentry_l1d_param); i++) { +- if (sysfs_streq(s, vmentry_l1d_param[i].option)) +- return vmentry_l1d_param[i].cmd; ++ if (vmentry_l1d_param[i].for_parse && ++ sysfs_streq(s, vmentry_l1d_param[i].option)) ++ return i; + } + } + return -EINVAL; +@@ -298,13 +301,13 @@ static int vmentry_l1d_flush_set(const c + { + int l1tf, ret; + +- if (!boot_cpu_has(X86_BUG_L1TF)) +- return 0; +- + l1tf = vmentry_l1d_flush_parse(s); + if (l1tf < 0) + return l1tf; + ++ if (!boot_cpu_has(X86_BUG_L1TF)) ++ return 0; ++ + /* + * Has vmx_init() run already? If not then this is the pre init + * parameter parsing. In that case just store the value and let +@@ -324,6 +327,9 @@ static int vmentry_l1d_flush_set(const c + + static int vmentry_l1d_flush_get(char *s, const struct kernel_param *kp) + { ++ if (WARN_ON_ONCE(l1tf_vmx_mitigation >= ARRAY_SIZE(vmentry_l1d_param))) ++ return sprintf(s, "???\n"); ++ + return sprintf(s, "%s\n", vmentry_l1d_param[l1tf_vmx_mitigation].option); + } + diff --git a/queue-4.9/nfsv4-client-live-hangs-after-live-data-migration-recovery.patch b/queue-4.9/nfsv4-client-live-hangs-after-live-data-migration-recovery.patch new file mode 100644 index 00000000000..ce972ec067e --- /dev/null +++ b/queue-4.9/nfsv4-client-live-hangs-after-live-data-migration-recovery.patch @@ -0,0 +1,129 @@ +From 0f90be132cbf1537d87a6a8b9e80867adac892f6 Mon Sep 17 00:00:00 2001 +From: Bill Baker +Date: Tue, 19 Jun 2018 16:24:58 -0500 +Subject: NFSv4 client live hangs after live data migration recovery + +From: Bill Baker + +commit 0f90be132cbf1537d87a6a8b9e80867adac892f6 upstream. + +After a live data migration event at the NFS server, the client may send +I/O requests to the wrong server, causing a live hang due to repeated +recovery events. On the wire, this will appear as an I/O request failing +with NFS4ERR_BADSESSION, followed by successful CREATE_SESSION, repeatedly. +NFS4ERR_BADSSESSION is returned because the session ID being used was +issued by the other server and is not valid at the old server. + +The failure is caused by async worker threads having cached the transport +(xprt) in the rpc_task structure. After the migration recovery completes, +the task is redispatched and the task resends the request to the wrong +server based on the old value still present in tk_xprt. + +The solution is to recompute the tk_xprt field of the rpc_task structure +so that the request goes to the correct server. + +Signed-off-by: Bill Baker +Reviewed-by: Chuck Lever +Tested-by: Helen Chao +Fixes: fb43d17210ba ("SUNRPC: Use the multipath iterator to assign a ...") +Cc: stable@vger.kernel.org # v4.9+ +Signed-off-by: Anna Schumaker +Signed-off-by: Greg Kroah-Hartman + +--- + fs/nfs/nfs4proc.c | 9 ++++++++- + include/linux/sunrpc/clnt.h | 1 + + net/sunrpc/clnt.c | 28 ++++++++++++++++++++-------- + 3 files changed, 29 insertions(+), 9 deletions(-) + +--- a/fs/nfs/nfs4proc.c ++++ b/fs/nfs/nfs4proc.c +@@ -541,8 +541,15 @@ nfs4_async_handle_exception(struct rpc_t + ret = -EIO; + return ret; + out_retry: +- if (ret == 0) ++ if (ret == 0) { + exception->retry = 1; ++ /* ++ * For NFS4ERR_MOVED, the client transport will need to ++ * be recomputed after migration recovery has completed. ++ */ ++ if (errorcode == -NFS4ERR_MOVED) ++ rpc_task_release_transport(task); ++ } + return ret; + } + +--- a/include/linux/sunrpc/clnt.h ++++ b/include/linux/sunrpc/clnt.h +@@ -155,6 +155,7 @@ int rpc_switch_client_transport(struct + + void rpc_shutdown_client(struct rpc_clnt *); + void rpc_release_client(struct rpc_clnt *); ++void rpc_task_release_transport(struct rpc_task *); + void rpc_task_release_client(struct rpc_task *); + + int rpcb_create_local(struct net *); +--- a/net/sunrpc/clnt.c ++++ b/net/sunrpc/clnt.c +@@ -965,10 +965,20 @@ out: + } + EXPORT_SYMBOL_GPL(rpc_bind_new_program); + ++void rpc_task_release_transport(struct rpc_task *task) ++{ ++ struct rpc_xprt *xprt = task->tk_xprt; ++ ++ if (xprt) { ++ task->tk_xprt = NULL; ++ xprt_put(xprt); ++ } ++} ++EXPORT_SYMBOL_GPL(rpc_task_release_transport); ++ + void rpc_task_release_client(struct rpc_task *task) + { + struct rpc_clnt *clnt = task->tk_client; +- struct rpc_xprt *xprt = task->tk_xprt; + + if (clnt != NULL) { + /* Remove from client task list */ +@@ -979,12 +989,14 @@ void rpc_task_release_client(struct rpc_ + + rpc_release_client(clnt); + } ++ rpc_task_release_transport(task); ++} + +- if (xprt != NULL) { +- task->tk_xprt = NULL; +- +- xprt_put(xprt); +- } ++static ++void rpc_task_set_transport(struct rpc_task *task, struct rpc_clnt *clnt) ++{ ++ if (!task->tk_xprt) ++ task->tk_xprt = xprt_iter_get_next(&clnt->cl_xpi); + } + + static +@@ -992,8 +1004,7 @@ void rpc_task_set_client(struct rpc_task + { + + if (clnt != NULL) { +- if (task->tk_xprt == NULL) +- task->tk_xprt = xprt_iter_get_next(&clnt->cl_xpi); ++ rpc_task_set_transport(task, clnt); + task->tk_client = clnt; + atomic_inc(&clnt->cl_count); + if (clnt->cl_softrtry) +@@ -1550,6 +1561,7 @@ call_start(struct rpc_task *task) + task->tk_msg.rpc_proc->p_count++; + clnt->cl_stats->rpccnt++; + task->tk_action = call_reserve; ++ rpc_task_set_transport(task, clnt); + } + + /* diff --git a/queue-4.9/pm-sleep-wakeup-fix-build-error-caused-by-missing-srcu-support.patch b/queue-4.9/pm-sleep-wakeup-fix-build-error-caused-by-missing-srcu-support.patch new file mode 100644 index 00000000000..501fac318c2 --- /dev/null +++ b/queue-4.9/pm-sleep-wakeup-fix-build-error-caused-by-missing-srcu-support.patch @@ -0,0 +1,53 @@ +From 3df6f61fff49632492490fb6e42646b803a9958a Mon Sep 17 00:00:00 2001 +From: "zhangyi (F)" +Date: Tue, 14 Aug 2018 10:34:42 +0800 +Subject: PM / sleep: wakeup: Fix build error caused by missing SRCU support + +From: zhangyi (F) + +commit 3df6f61fff49632492490fb6e42646b803a9958a upstream. + +Commit ea0212f40c6 (power: auto select CONFIG_SRCU) made the code in +drivers/base/power/wakeup.c use SRCU instead of RCU, but it forgot to +select CONFIG_SRCU in Kconfig, which leads to the following build +error if CONFIG_SRCU is not selected somewhere else: + +drivers/built-in.o: In function `wakeup_source_remove': +(.text+0x3c6fc): undefined reference to `synchronize_srcu' +drivers/built-in.o: In function `pm_print_active_wakeup_sources': +(.text+0x3c7a8): undefined reference to `__srcu_read_lock' +drivers/built-in.o: In function `pm_print_active_wakeup_sources': +(.text+0x3c84c): undefined reference to `__srcu_read_unlock' +drivers/built-in.o: In function `device_wakeup_arm_wake_irqs': +(.text+0x3d1d8): undefined reference to `__srcu_read_lock' +drivers/built-in.o: In function `device_wakeup_arm_wake_irqs': +(.text+0x3d228): undefined reference to `__srcu_read_unlock' +drivers/built-in.o: In function `device_wakeup_disarm_wake_irqs': +(.text+0x3d24c): undefined reference to `__srcu_read_lock' +drivers/built-in.o: In function `device_wakeup_disarm_wake_irqs': +(.text+0x3d29c): undefined reference to `__srcu_read_unlock' +drivers/built-in.o:(.data+0x4158): undefined reference to `process_srcu' + +Fix this error by selecting CONFIG_SRCU when PM_SLEEP is enabled. + +Fixes: ea0212f40c6 (power: auto select CONFIG_SRCU) +Cc: 4.2+ # 4.2+ +Signed-off-by: zhangyi (F) +[ rjw: Minor subject/changelog fixups ] +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/power/Kconfig | 1 + + 1 file changed, 1 insertion(+) + +--- a/kernel/power/Kconfig ++++ b/kernel/power/Kconfig +@@ -105,6 +105,7 @@ config PM_SLEEP + def_bool y + depends on SUSPEND || HIBERNATE_CALLBACKS + select PM ++ select SRCU + + config PM_SLEEP_SMP + def_bool y diff --git a/queue-4.9/pnfs-blocklayout-off-by-one-in-bl_map_stripe.patch b/queue-4.9/pnfs-blocklayout-off-by-one-in-bl_map_stripe.patch new file mode 100644 index 00000000000..15cc59c37bc --- /dev/null +++ b/queue-4.9/pnfs-blocklayout-off-by-one-in-bl_map_stripe.patch @@ -0,0 +1,37 @@ +From 0914bb965e38a055e9245637aed117efbe976e91 Mon Sep 17 00:00:00 2001 +From: Dan Carpenter +Date: Wed, 4 Jul 2018 12:59:58 +0300 +Subject: pnfs/blocklayout: off by one in bl_map_stripe() + +From: Dan Carpenter + +commit 0914bb965e38a055e9245637aed117efbe976e91 upstream. + +"dev->nr_children" is the number of children which were parsed +successfully in bl_parse_stripe(). It could be all of them and then, in +that case, it is equal to v->stripe.volumes_count. Either way, the > +should be >= so that we don't go beyond the end of what we're supposed +to. + +Fixes: 5c83746a0cf2 ("pnfs/blocklayout: in-kernel GETDEVICEINFO XDR parsing") +Signed-off-by: Dan Carpenter +Reviewed-by: Christoph Hellwig +Cc: stable@vger.kernel.org # 3.17+ +Signed-off-by: Anna Schumaker +Signed-off-by: Greg Kroah-Hartman + +--- + fs/nfs/blocklayout/dev.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/fs/nfs/blocklayout/dev.c ++++ b/fs/nfs/blocklayout/dev.c +@@ -203,7 +203,7 @@ static bool bl_map_stripe(struct pnfs_bl + chunk = div_u64(offset, dev->chunk_size); + div_u64_rem(chunk, dev->nr_children, &chunk_idx); + +- if (chunk_idx > dev->nr_children) { ++ if (chunk_idx >= dev->nr_children) { + dprintk("%s: invalid chunk idx %d (%lld/%lld)\n", + __func__, chunk_idx, offset, dev->chunk_size); + /* error, should not happen */ diff --git a/queue-4.9/replace-magic-for-trusting-the-secondary-keyring-with-define.patch b/queue-4.9/replace-magic-for-trusting-the-secondary-keyring-with-define.patch new file mode 100644 index 00000000000..8cf368f27df --- /dev/null +++ b/queue-4.9/replace-magic-for-trusting-the-secondary-keyring-with-define.patch @@ -0,0 +1,70 @@ +From 817aef260037f33ee0f44c17fe341323d3aebd6d Mon Sep 17 00:00:00 2001 +From: Yannik Sembritzki +Date: Thu, 16 Aug 2018 14:05:10 +0100 +Subject: Replace magic for trusting the secondary keyring with #define + +From: Yannik Sembritzki + +commit 817aef260037f33ee0f44c17fe341323d3aebd6d upstream. + +Replace the use of a magic number that indicates that verify_*_signature() +should use the secondary keyring with a symbol. + +Signed-off-by: Yannik Sembritzki +Signed-off-by: David Howells +Cc: keyrings@vger.kernel.org +Cc: linux-security-module@vger.kernel.org +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + certs/system_keyring.c | 3 ++- + crypto/asymmetric_keys/pkcs7_key_type.c | 2 +- + include/linux/verification.h | 6 ++++++ + 3 files changed, 9 insertions(+), 2 deletions(-) + +--- a/certs/system_keyring.c ++++ b/certs/system_keyring.c +@@ -14,6 +14,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -207,7 +208,7 @@ int verify_pkcs7_signature(const void *d + + if (!trusted_keys) { + trusted_keys = builtin_trusted_keys; +- } else if (trusted_keys == (void *)1UL) { ++ } else if (trusted_keys == VERIFY_USE_SECONDARY_KEYRING) { + #ifdef CONFIG_SECONDARY_TRUSTED_KEYRING + trusted_keys = secondary_trusted_keys; + #else +--- a/crypto/asymmetric_keys/pkcs7_key_type.c ++++ b/crypto/asymmetric_keys/pkcs7_key_type.c +@@ -62,7 +62,7 @@ static int pkcs7_preparse(struct key_pre + + return verify_pkcs7_signature(NULL, 0, + prep->data, prep->datalen, +- (void *)1UL, usage, ++ VERIFY_USE_SECONDARY_KEYRING, usage, + pkcs7_view_content, prep); + } + +--- a/include/linux/verification.h ++++ b/include/linux/verification.h +@@ -13,6 +13,12 @@ + #define _LINUX_VERIFICATION_H + + /* ++ * Indicate that both builtin trusted keys and secondary trusted keys ++ * should be used. ++ */ ++#define VERIFY_USE_SECONDARY_KEYRING ((struct key *)1UL) ++ ++/* + * The use to which an asymmetric key is being put. + */ + enum key_being_used_for { diff --git a/queue-4.9/series b/queue-4.9/series index 280e12b1b6f..62aabd78bf8 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -31,3 +31,12 @@ tracing-blktrace-fix-to-allow-setting-same-value.patch uprobes-use-synchronize_rcu-not-synchronize_sched.patch mfd-hi655x-fix-regmap-area-declared-size-for-hi655x.patch 9p-fix-multiple-null-pointer-dereferences.patch +pm-sleep-wakeup-fix-build-error-caused-by-missing-srcu-support.patch +kvm-vmx-fixes-for-vmentry_l1d_flush-module-parameter.patch +xtensa-limit-offsets-in-__loop_cache_-all-page.patch +xtensa-increase-ranges-in-___invalidate_-i-d-cache_all.patch +pnfs-blocklayout-off-by-one-in-bl_map_stripe.patch +nfsv4-client-live-hangs-after-live-data-migration-recovery.patch +arm-tegra-fix-tegra30-cardhu-pca954x-reset.patch +replace-magic-for-trusting-the-secondary-keyring-with-define.patch +fix-kexec-forbidding-kernels-signed-with-keys-in-the-secondary-keyring-to-boot.patch diff --git a/queue-4.9/xtensa-increase-ranges-in-___invalidate_-i-d-cache_all.patch b/queue-4.9/xtensa-increase-ranges-in-___invalidate_-i-d-cache_all.patch new file mode 100644 index 00000000000..8885011053e --- /dev/null +++ b/queue-4.9/xtensa-increase-ranges-in-___invalidate_-i-d-cache_all.patch @@ -0,0 +1,48 @@ +From fec3259c9f747c039f90e99570540114c8d81a14 Mon Sep 17 00:00:00 2001 +From: Max Filippov +Date: Fri, 10 Aug 2018 22:21:22 -0700 +Subject: xtensa: increase ranges in ___invalidate_{i,d}cache_all + +From: Max Filippov + +commit fec3259c9f747c039f90e99570540114c8d81a14 upstream. + +Cache invalidation macros use cache line size to iterate over +invalidated cache lines, assuming that all cache ways are invalidated by +single instruction, but xtensa ISA recommends to not assume that for +future compatibility: + In some implementations all ways at index Addry-1..z are invalidated + regardless of the specified way, but for future compatibility this + behavior should not be assumed. + +Iterate over all cache ways in ___invalidate_icache_all and +___invalidate_dcache_all. + +Cc: stable@vger.kernel.org +Signed-off-by: Max Filippov +Signed-off-by: Greg Kroah-Hartman + +--- + arch/xtensa/include/asm/cacheasm.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/arch/xtensa/include/asm/cacheasm.h ++++ b/arch/xtensa/include/asm/cacheasm.h +@@ -123,7 +123,7 @@ + .macro ___invalidate_dcache_all ar at + + #if XCHAL_DCACHE_SIZE +- __loop_cache_all \ar \at dii __stringify(DCACHE_WAY_SIZE) \ ++ __loop_cache_all \ar \at dii XCHAL_DCACHE_SIZE \ + XCHAL_DCACHE_LINEWIDTH 1020 + #endif + +@@ -133,7 +133,7 @@ + .macro ___invalidate_icache_all ar at + + #if XCHAL_ICACHE_SIZE +- __loop_cache_all \ar \at iii __stringify(ICACHE_WAY_SIZE) \ ++ __loop_cache_all \ar \at iii XCHAL_ICACHE_SIZE \ + XCHAL_ICACHE_LINEWIDTH 1020 + #endif + diff --git a/queue-4.9/xtensa-limit-offsets-in-__loop_cache_-all-page.patch b/queue-4.9/xtensa-limit-offsets-in-__loop_cache_-all-page.patch new file mode 100644 index 00000000000..3cff79406f3 --- /dev/null +++ b/queue-4.9/xtensa-limit-offsets-in-__loop_cache_-all-page.patch @@ -0,0 +1,191 @@ +From be75de25251f7cf3e399ca1f584716a95510d24a Mon Sep 17 00:00:00 2001 +From: Max Filippov +Date: Fri, 10 Aug 2018 20:43:48 -0700 +Subject: xtensa: limit offsets in __loop_cache_{all,page} + +From: Max Filippov + +commit be75de25251f7cf3e399ca1f584716a95510d24a upstream. + +When building kernel for xtensa cores with big cache lines (e.g. 128 +bytes or more) __loop_cache_all and __loop_cache_page may generate +assembly instructions with immediate fields that are too big. This +results in the following build errors: + + arch/xtensa/mm/misc.S: Assembler messages: + arch/xtensa/mm/misc.S:464: Error: operand 2 of 'diwbi' has invalid value '256' + arch/xtensa/mm/misc.S:464: Error: operand 2 of 'diwbi' has invalid value '384' + arch/xtensa/kernel/head.S: Assembler messages: + arch/xtensa/kernel/head.S:172: Error: operand 2 of 'diu' has invalid value '256' + arch/xtensa/kernel/head.S:172: Error: operand 2 of 'diu' has invalid value '384' + arch/xtensa/kernel/head.S:176: Error: operand 2 of 'iiu' has invalid value '256' + arch/xtensa/kernel/head.S:176: Error: operand 2 of 'iiu' has invalid value '384' + arch/xtensa/kernel/head.S:255: Error: operand 2 of 'diwb' has invalid value '256' + arch/xtensa/kernel/head.S:255: Error: operand 2 of 'diwb' has invalid value '384' + +Add parameter max_immed to these macros and use it to limit values of +immediate operands. Extract common code of these macros into the new +macro __loop_cache_unroll. + +Cc: stable@vger.kernel.org +Signed-off-by: Max Filippov +Signed-off-by: Greg Kroah-Hartman + +--- + arch/xtensa/include/asm/cacheasm.h | 65 ++++++++++++++++++++++--------------- + 1 file changed, 40 insertions(+), 25 deletions(-) + +--- a/arch/xtensa/include/asm/cacheasm.h ++++ b/arch/xtensa/include/asm/cacheasm.h +@@ -31,16 +31,32 @@ + * + */ + +- .macro __loop_cache_all ar at insn size line_width + +- movi \ar, 0 ++ .macro __loop_cache_unroll ar at insn size line_width max_immed ++ ++ .if (1 << (\line_width)) > (\max_immed) ++ .set _reps, 1 ++ .elseif (2 << (\line_width)) > (\max_immed) ++ .set _reps, 2 ++ .else ++ .set _reps, 4 ++ .endif ++ ++ __loopi \ar, \at, \size, (_reps << (\line_width)) ++ .set _index, 0 ++ .rep _reps ++ \insn \ar, _index << (\line_width) ++ .set _index, _index + 1 ++ .endr ++ __endla \ar, \at, _reps << (\line_width) ++ ++ .endm ++ + +- __loopi \ar, \at, \size, (4 << (\line_width)) +- \insn \ar, 0 << (\line_width) +- \insn \ar, 1 << (\line_width) +- \insn \ar, 2 << (\line_width) +- \insn \ar, 3 << (\line_width) +- __endla \ar, \at, 4 << (\line_width) ++ .macro __loop_cache_all ar at insn size line_width max_immed ++ ++ movi \ar, 0 ++ __loop_cache_unroll \ar, \at, \insn, \size, \line_width, \max_immed + + .endm + +@@ -57,14 +73,9 @@ + .endm + + +- .macro __loop_cache_page ar at insn line_width ++ .macro __loop_cache_page ar at insn line_width max_immed + +- __loopi \ar, \at, PAGE_SIZE, 4 << (\line_width) +- \insn \ar, 0 << (\line_width) +- \insn \ar, 1 << (\line_width) +- \insn \ar, 2 << (\line_width) +- \insn \ar, 3 << (\line_width) +- __endla \ar, \at, 4 << (\line_width) ++ __loop_cache_unroll \ar, \at, \insn, PAGE_SIZE, \line_width, \max_immed + + .endm + +@@ -72,7 +83,8 @@ + .macro ___unlock_dcache_all ar at + + #if XCHAL_DCACHE_LINE_LOCKABLE && XCHAL_DCACHE_SIZE +- __loop_cache_all \ar \at diu XCHAL_DCACHE_SIZE XCHAL_DCACHE_LINEWIDTH ++ __loop_cache_all \ar \at diu XCHAL_DCACHE_SIZE \ ++ XCHAL_DCACHE_LINEWIDTH 240 + #endif + + .endm +@@ -81,7 +93,8 @@ + .macro ___unlock_icache_all ar at + + #if XCHAL_ICACHE_LINE_LOCKABLE && XCHAL_ICACHE_SIZE +- __loop_cache_all \ar \at iiu XCHAL_ICACHE_SIZE XCHAL_ICACHE_LINEWIDTH ++ __loop_cache_all \ar \at iiu XCHAL_ICACHE_SIZE \ ++ XCHAL_ICACHE_LINEWIDTH 240 + #endif + + .endm +@@ -90,7 +103,8 @@ + .macro ___flush_invalidate_dcache_all ar at + + #if XCHAL_DCACHE_SIZE +- __loop_cache_all \ar \at diwbi XCHAL_DCACHE_SIZE XCHAL_DCACHE_LINEWIDTH ++ __loop_cache_all \ar \at diwbi XCHAL_DCACHE_SIZE \ ++ XCHAL_DCACHE_LINEWIDTH 240 + #endif + + .endm +@@ -99,7 +113,8 @@ + .macro ___flush_dcache_all ar at + + #if XCHAL_DCACHE_SIZE +- __loop_cache_all \ar \at diwb XCHAL_DCACHE_SIZE XCHAL_DCACHE_LINEWIDTH ++ __loop_cache_all \ar \at diwb XCHAL_DCACHE_SIZE \ ++ XCHAL_DCACHE_LINEWIDTH 240 + #endif + + .endm +@@ -109,7 +124,7 @@ + + #if XCHAL_DCACHE_SIZE + __loop_cache_all \ar \at dii __stringify(DCACHE_WAY_SIZE) \ +- XCHAL_DCACHE_LINEWIDTH ++ XCHAL_DCACHE_LINEWIDTH 1020 + #endif + + .endm +@@ -119,7 +134,7 @@ + + #if XCHAL_ICACHE_SIZE + __loop_cache_all \ar \at iii __stringify(ICACHE_WAY_SIZE) \ +- XCHAL_ICACHE_LINEWIDTH ++ XCHAL_ICACHE_LINEWIDTH 1020 + #endif + + .endm +@@ -166,7 +181,7 @@ + .macro ___flush_invalidate_dcache_page ar as + + #if XCHAL_DCACHE_SIZE +- __loop_cache_page \ar \as dhwbi XCHAL_DCACHE_LINEWIDTH ++ __loop_cache_page \ar \as dhwbi XCHAL_DCACHE_LINEWIDTH 1020 + #endif + + .endm +@@ -175,7 +190,7 @@ + .macro ___flush_dcache_page ar as + + #if XCHAL_DCACHE_SIZE +- __loop_cache_page \ar \as dhwb XCHAL_DCACHE_LINEWIDTH ++ __loop_cache_page \ar \as dhwb XCHAL_DCACHE_LINEWIDTH 1020 + #endif + + .endm +@@ -184,7 +199,7 @@ + .macro ___invalidate_dcache_page ar as + + #if XCHAL_DCACHE_SIZE +- __loop_cache_page \ar \as dhi XCHAL_DCACHE_LINEWIDTH ++ __loop_cache_page \ar \as dhi XCHAL_DCACHE_LINEWIDTH 1020 + #endif + + .endm +@@ -193,7 +208,7 @@ + .macro ___invalidate_icache_page ar as + + #if XCHAL_ICACHE_SIZE +- __loop_cache_page \ar \as ihi XCHAL_ICACHE_LINEWIDTH ++ __loop_cache_page \ar \as ihi XCHAL_ICACHE_LINEWIDTH 1020 + #endif + + .endm -- 2.47.2