lkml.org 
[lkml]   [2018]   [Jan]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 13/89] powerpc/64s: Support disabling RFI flush with no_rfi_flush and nopti
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Michael Ellerman <mpe@ellerman.id.au>

    commit bc9c9304a45480797e13a8e1df96ffcf44fb62fe upstream.

    Because there may be some performance overhead of the RFI flush, add
    kernel command line options to disable it.

    We add a sensibly named 'no_rfi_flush' option, but we also hijack the
    x86 option 'nopti'. The RFI flush is not the same as KPTI, but if we
    see 'nopti' we can guess that the user is trying to avoid any overhead
    of Meltdown mitigations, and it means we don't have to educate every
    one about a different command line option.

    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/powerpc/kernel/setup_64.c | 24 +++++++++++++++++++++++-
    1 file changed, 23 insertions(+), 1 deletion(-)

    --- a/arch/powerpc/kernel/setup_64.c
    +++ b/arch/powerpc/kernel/setup_64.c
    @@ -788,8 +788,29 @@ early_initcall(disable_hardlockup_detect
    #ifdef CONFIG_PPC_BOOK3S_64
    static enum l1d_flush_type enabled_flush_types;
    static void *l1d_flush_fallback_area;
    +static bool no_rfi_flush;
    bool rfi_flush;

    +static int __init handle_no_rfi_flush(char *p)
    +{
    + pr_info("rfi-flush: disabled on command line.");
    + no_rfi_flush = true;
    + return 0;
    +}
    +early_param("no_rfi_flush", handle_no_rfi_flush);
    +
    +/*
    + * The RFI flush is not KPTI, but because users will see doco that says to use
    + * nopti we hijack that option here to also disable the RFI flush.
    + */
    +static int __init handle_no_pti(char *p)
    +{
    + pr_info("rfi-flush: disabling due to 'nopti' on command line.\n");
    + handle_no_rfi_flush(NULL);
    + return 0;
    +}
    +early_param("nopti", handle_no_pti);
    +
    static void do_nothing(void *unused)
    {
    /*
    @@ -860,6 +881,7 @@ void __init setup_rfi_flush(enum l1d_flu

    enabled_flush_types = types;

    - rfi_flush_enable(enable);
    + if (!no_rfi_flush)
    + rfi_flush_enable(enable);
    }
    #endif /* CONFIG_PPC_BOOK3S_64 */

    \
     
     \ /
      Last update: 2018-01-22 10:20    [W:3.197 / U:0.148 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site