lkml.org 
[lkml]   [2019]   [Nov]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 42/75] ARM: bugs: hook processor bug checking into SMP and suspend paths
    Date
    From: Russell King <rmk+kernel@armlinux.org.uk>

    Commit 26602161b5ba795928a5a719fe1d5d9f2ab5c3ef upstream.

    Check for CPU bugs when secondary processors are being brought online,
    and also when CPUs are resuming from a low power mode. This gives an
    opportunity to check that processor specific bug workarounds are
    correctly enabled for all paths that a CPU re-enters the kernel.

    Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
    Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
    Boot-tested-by: Tony Lindgren <tony@atomide.com>
    Reviewed-by: Tony Lindgren <tony@atomide.com>
    Acked-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: David A. Long <dave.long@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    arch/arm/include/asm/bugs.h | 2 ++
    arch/arm/kernel/bugs.c | 5 +++++
    arch/arm/kernel/smp.c | 4 ++++
    arch/arm/kernel/suspend.c | 2 ++
    4 files changed, 13 insertions(+)

    --- a/arch/arm/include/asm/bugs.h
    +++ b/arch/arm/include/asm/bugs.h
    @@ -14,8 +14,10 @@ extern void check_writebuffer_bugs(void)

    #ifdef CONFIG_MMU
    extern void check_bugs(void);
    +extern void check_other_bugs(void);
    #else
    #define check_bugs() do { } while (0)
    +#define check_other_bugs() do { } while (0)
    #endif

    #endif
    --- a/arch/arm/kernel/bugs.c
    +++ b/arch/arm/kernel/bugs.c
    @@ -3,7 +3,12 @@
    #include <asm/bugs.h>
    #include <asm/proc-fns.h>

    +void check_other_bugs(void)
    +{
    +}
    +
    void __init check_bugs(void)
    {
    check_writebuffer_bugs();
    + check_other_bugs();
    }
    --- a/arch/arm/kernel/smp.c
    +++ b/arch/arm/kernel/smp.c
    @@ -29,6 +29,7 @@
    #include <linux/irq_work.h>

    #include <linux/atomic.h>
    +#include <asm/bugs.h>
    #include <asm/smp.h>
    #include <asm/cacheflush.h>
    #include <asm/cpu.h>
    @@ -396,6 +397,9 @@ asmlinkage void secondary_start_kernel(v
    * before we continue - which happens after __cpu_up returns.
    */
    set_cpu_online(cpu, true);
    +
    + check_other_bugs();
    +
    complete(&cpu_running);

    local_irq_enable();
    --- a/arch/arm/kernel/suspend.c
    +++ b/arch/arm/kernel/suspend.c
    @@ -1,6 +1,7 @@
    #include <linux/init.h>
    #include <linux/slab.h>

    +#include <asm/bugs.h>
    #include <asm/cacheflush.h>
    #include <asm/idmap.h>
    #include <asm/pgalloc.h>
    @@ -34,6 +35,7 @@ int cpu_suspend(unsigned long arg, int (
    cpu_switch_mm(mm->pgd, mm);
    local_flush_bp_all();
    local_flush_tlb_all();
    + check_other_bugs();
    }

    return ret;

    \
     
     \ /
      Last update: 2019-11-08 20:23    [W:4.036 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site