From: Greg Kroah-Hartman Date: Wed, 27 Nov 2019 07:59:01 +0000 (+0100) Subject: 4.14-stable patches X-Git-Tag: v4.4.204~56 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a1ecd3ce102e5fc1887bad8d10a2e029d90bd3a7;p=thirdparty%2Fkernel%2Fstable-queue.git 4.14-stable patches added patches: arm-8904-1-skip-nomap-memblocks-while-finding-the-lowmem-highmem-boundary.patch arm64-fix-for-bad_mode-handler-to-always-result-in-panic.patch cpufreq-skip-cpufreq-resume-if-it-s-not-suspended.patch ocfs2-remove-ocfs2_is_o2cb_active.patch --- diff --git a/queue-4.14/arm-8904-1-skip-nomap-memblocks-while-finding-the-lowmem-highmem-boundary.patch b/queue-4.14/arm-8904-1-skip-nomap-memblocks-while-finding-the-lowmem-highmem-boundary.patch new file mode 100644 index 00000000000..ab6e02de695 --- /dev/null +++ b/queue-4.14/arm-8904-1-skip-nomap-memblocks-while-finding-the-lowmem-highmem-boundary.patch @@ -0,0 +1,36 @@ +From 1d31999cf04c21709f72ceb17e65b54a401330da Mon Sep 17 00:00:00 2001 +From: Chester Lin +Date: Fri, 30 Aug 2019 14:30:07 +0100 +Subject: ARM: 8904/1: skip nomap memblocks while finding the lowmem/highmem boundary + +From: Chester Lin + +commit 1d31999cf04c21709f72ceb17e65b54a401330da upstream. + +adjust_lowmem_bounds() checks every memblocks in order to find the boundary +between lowmem and highmem. However some memblocks could be marked as NOMAP +so they are not used by kernel, which should be skipped while calculating +the boundary. + +Signed-off-by: Chester Lin +Reviewed-by: Mike Rapoport +Signed-off-by: Russell King +Signed-off-by: Lee Jones +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/mm/mmu.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/arch/arm/mm/mmu.c ++++ b/arch/arm/mm/mmu.c +@@ -1195,6 +1195,9 @@ void __init adjust_lowmem_bounds(void) + phys_addr_t block_start = reg->base; + phys_addr_t block_end = reg->base + reg->size; + ++ if (memblock_is_nomap(reg)) ++ continue; ++ + if (reg->base < vmalloc_limit) { + if (block_end > lowmem_limit) + /* diff --git a/queue-4.14/arm64-fix-for-bad_mode-handler-to-always-result-in-panic.patch b/queue-4.14/arm64-fix-for-bad_mode-handler-to-always-result-in-panic.patch new file mode 100644 index 00000000000..1a5d5b1d774 --- /dev/null +++ b/queue-4.14/arm64-fix-for-bad_mode-handler-to-always-result-in-panic.patch @@ -0,0 +1,37 @@ +From e4ba15debcfd27f60d43da940a58108783bff2a6 Mon Sep 17 00:00:00 2001 +From: Hari Vyas +Date: Tue, 7 Aug 2018 16:33:48 +0530 +Subject: arm64: fix for bad_mode() handler to always result in panic + +From: Hari Vyas + +commit e4ba15debcfd27f60d43da940a58108783bff2a6 upstream. + +The bad_mode() handler is called if we encounter an uunknown exception, +with the expectation that the subsequent call to panic() will halt the +system. Unfortunately, if the exception calling bad_mode() is taken from +EL0, then the call to die() can end up killing the current user task and +calling schedule() instead of falling through to panic(). + +Remove the die() call altogether, since we really want to bring down the +machine in this "impossible" case. + +Signed-off-by: Hari Vyas +Signed-off-by: Will Deacon +Signed-off-by: Catalin Marinas +Signed-off-by: Lee Jones +Signed-off-by: Greg Kroah-Hartman +--- + arch/arm64/kernel/traps.c | 1 - + 1 file changed, 1 deletion(-) + +--- a/arch/arm64/kernel/traps.c ++++ b/arch/arm64/kernel/traps.c +@@ -648,7 +648,6 @@ asmlinkage void bad_mode(struct pt_regs + handler[reason], smp_processor_id(), esr, + esr_get_class_string(esr)); + +- die("Oops - bad mode", regs, 0); + local_irq_disable(); + panic("bad mode"); + } diff --git a/queue-4.14/cpufreq-skip-cpufreq-resume-if-it-s-not-suspended.patch b/queue-4.14/cpufreq-skip-cpufreq-resume-if-it-s-not-suspended.patch new file mode 100644 index 00000000000..9437cc15c52 --- /dev/null +++ b/queue-4.14/cpufreq-skip-cpufreq-resume-if-it-s-not-suspended.patch @@ -0,0 +1,65 @@ +From 703cbaa601ff3fb554d1246c336ba727cc083ea0 Mon Sep 17 00:00:00 2001 +From: Bo Yan +Date: Tue, 23 Jan 2018 13:57:55 -0800 +Subject: cpufreq: Skip cpufreq resume if it's not suspended + +From: Bo Yan + +commit 703cbaa601ff3fb554d1246c336ba727cc083ea0 upstream. + +cpufreq_resume can be called even without preceding cpufreq_suspend. +This can happen in following scenario: + + suspend_devices_and_enter + --> dpm_suspend_start + --> dpm_prepare + --> device_prepare : this function errors out + --> dpm_suspend: this is skipped due to dpm_prepare failure + this means cpufreq_suspend is skipped over + --> goto Recover_platform, due to previous error + --> goto Resume_devices + --> dpm_resume_end + --> dpm_resume + --> cpufreq_resume + +In case schedutil is used as frequency governor, cpufreq_resume will +eventually call sugov_start, which does following: + + memset(sg_cpu, 0, sizeof(*sg_cpu)); + .... + +This effectively erases function pointer for frequency update, causing +crash later on. The function pointer would have been set correctly if +subsequent cpufreq_add_update_util_hook runs successfully, but that +function returns earlier because cpufreq_suspend was not called: + + if (WARN_ON(per_cpu(cpufreq_update_util_data, cpu))) + return; + +The fix is to check cpufreq_suspended first, if it's false, that means +cpufreq_suspend was not called in the first place, so do not resume +cpufreq. + +Signed-off-by: Bo Yan +Acked-by: Viresh Kumar +[ rjw: Dropped printing a message ] +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Lee Jones +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/cpufreq/cpufreq.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/cpufreq/cpufreq.c ++++ b/drivers/cpufreq/cpufreq.c +@@ -1673,6 +1673,9 @@ void cpufreq_resume(void) + if (!cpufreq_driver) + return; + ++ if (unlikely(!cpufreq_suspended)) ++ return; ++ + cpufreq_suspended = false; + + if (!has_target() && !cpufreq_driver->resume) diff --git a/queue-4.14/ocfs2-remove-ocfs2_is_o2cb_active.patch b/queue-4.14/ocfs2-remove-ocfs2_is_o2cb_active.patch new file mode 100644 index 00000000000..797879ef57b --- /dev/null +++ b/queue-4.14/ocfs2-remove-ocfs2_is_o2cb_active.patch @@ -0,0 +1,74 @@ +From a634644751c46238df58bbfe992e30c1668388db Mon Sep 17 00:00:00 2001 +From: Gang He +Date: Fri, 2 Nov 2018 15:48:03 -0700 +Subject: ocfs2: remove ocfs2_is_o2cb_active() + +From: Gang He + +commit a634644751c46238df58bbfe992e30c1668388db upstream. + +Remove ocfs2_is_o2cb_active(). We have similar functions to identify +which cluster stack is being used via osb->osb_cluster_stack. + +Secondly, the current implementation of ocfs2_is_o2cb_active() is not +totally safe. Based on the design of stackglue, we need to get +ocfs2_stack_lock before using ocfs2_stack related data structures, and +that active_stack pointer can be NULL in the case of mount failure. + +Link: http://lkml.kernel.org/r/1495441079-11708-1-git-send-email-ghe@suse.com +Signed-off-by: Gang He +Reviewed-by: Joseph Qi +Reviewed-by: Eric Ren +Acked-by: Changwei Ge +Cc: Mark Fasheh +Cc: Joel Becker +Cc: Junxiao Bi +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Lee Jones +Signed-off-by: Greg Kroah-Hartman + +--- + fs/ocfs2/dlmglue.c | 2 +- + fs/ocfs2/stackglue.c | 6 ------ + fs/ocfs2/stackglue.h | 3 --- + 3 files changed, 1 insertion(+), 10 deletions(-) + +--- a/fs/ocfs2/dlmglue.c ++++ b/fs/ocfs2/dlmglue.c +@@ -3422,7 +3422,7 @@ static int ocfs2_downconvert_lock(struct + * we can recover correctly from node failure. Otherwise, we may get + * invalid LVB in LKB, but without DLM_SBF_VALNOTVALID being set. + */ +- if (!ocfs2_is_o2cb_active() && ++ if (ocfs2_userspace_stack(osb) && + lockres->l_ops->flags & LOCK_TYPE_USES_LVB) + lvb = 1; + +--- a/fs/ocfs2/stackglue.c ++++ b/fs/ocfs2/stackglue.c +@@ -48,12 +48,6 @@ static char ocfs2_hb_ctl_path[OCFS2_MAX_ + */ + static struct ocfs2_stack_plugin *active_stack; + +-inline int ocfs2_is_o2cb_active(void) +-{ +- return !strcmp(active_stack->sp_name, OCFS2_STACK_PLUGIN_O2CB); +-} +-EXPORT_SYMBOL_GPL(ocfs2_is_o2cb_active); +- + static struct ocfs2_stack_plugin *ocfs2_stack_lookup(const char *name) + { + struct ocfs2_stack_plugin *p; +--- a/fs/ocfs2/stackglue.h ++++ b/fs/ocfs2/stackglue.h +@@ -298,9 +298,6 @@ void ocfs2_stack_glue_set_max_proto_vers + int ocfs2_stack_glue_register(struct ocfs2_stack_plugin *plugin); + void ocfs2_stack_glue_unregister(struct ocfs2_stack_plugin *plugin); + +-/* In ocfs2_downconvert_lock(), we need to know which stack we are using */ +-int ocfs2_is_o2cb_active(void); +- + extern struct kset *ocfs2_kset; + + #endif /* STACKGLUE_H */ diff --git a/queue-4.14/series b/queue-4.14/series index 41b6a11f336..eb709ad1885 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -169,3 +169,7 @@ md-raid10-prevent-access-of-uninitialized-resync_pages-offset.patch mm-memory_hotplug-don-t-access-uninitialized-memmaps-in-shrink_zone_span.patch net-phy-dp83867-fix-speed-10-in-sgmii-mode.patch net-phy-dp83867-increase-sgmii-autoneg-timer-duration.patch +arm64-fix-for-bad_mode-handler-to-always-result-in-panic.patch +cpufreq-skip-cpufreq-resume-if-it-s-not-suspended.patch +ocfs2-remove-ocfs2_is_o2cb_active.patch +arm-8904-1-skip-nomap-memblocks-while-finding-the-lowmem-highmem-boundary.patch