lkml.org 
[lkml]   [2020]   [May]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip: x86/entry] lib/smp_processor_id: Move it into noinstr section
    The following commit has been merged into the x86/entry branch of tip:

    Commit-ID: 85e04f67df29915ef76c2db0fe1b7a8b44988c41
    Gitweb: https://git.kernel.org/tip/85e04f67df29915ef76c2db0fe1b7a8b44988c41
    Author: Thomas Gleixner <tglx@linutronix.de>
    AuthorDate: Tue, 10 Mar 2020 23:47:39 +01:00
    Committer: Thomas Gleixner <tglx@linutronix.de>
    CommitterDate: Tue, 19 May 2020 15:47:22 +02:00

    lib/smp_processor_id: Move it into noinstr section

    That code is already not traceable. Move it into the noinstr section so the
    objtool section validation does not trigger.

    Annotate the warning code as "safe". While it might be not under all
    circumstances, getting the information out is important enough.

    Should this ever trigger from the sensitive code which is shielded against
    instrumentation, e.g. low level entry, then the printk is the least of the
    worries.

    Addresses the objtool warnings:
    vmlinux.o: warning: objtool: context_tracking_recursion_enter()+0x7: call to __this_cpu_preempt_check() leaves .noinstr.text section
    vmlinux.o: warning: objtool: __context_tracking_exit()+0x17: call to __this_cpu_preempt_check() leaves .noinstr.text section
    vmlinux.o: warning: objtool: __context_tracking_enter()+0x2a: call to __this_cpu_preempt_check() leaves .noinstr.text section

    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Alexandre Chartre <alexandre.chartre@oracle.com>
    Acked-by: Peter Zijlstra <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/20200505134340.902709267@linutronix.de


    ---
    lib/smp_processor_id.c | 10 +++++-----
    1 file changed, 5 insertions(+), 5 deletions(-)

    diff --git a/lib/smp_processor_id.c b/lib/smp_processor_id.c
    index bd95716..525222e 100644
    --- a/lib/smp_processor_id.c
    +++ b/lib/smp_processor_id.c
    @@ -8,7 +8,7 @@
    #include <linux/kprobes.h>
    #include <linux/sched.h>

    -notrace static nokprobe_inline
    +noinstr static
    unsigned int check_preemption_disabled(const char *what1, const char *what2)
    {
    int this_cpu = raw_smp_processor_id();
    @@ -37,6 +37,7 @@ unsigned int check_preemption_disabled(const char *what1, const char *what2)
    */
    preempt_disable_notrace();

    + instrumentation_begin();
    if (!printk_ratelimit())
    goto out_enable;

    @@ -45,6 +46,7 @@ unsigned int check_preemption_disabled(const char *what1, const char *what2)

    printk("caller is %pS\n", __builtin_return_address(0));
    dump_stack();
    + instrumentation_end();

    out_enable:
    preempt_enable_no_resched_notrace();
    @@ -52,16 +54,14 @@ out:
    return this_cpu;
    }

    -notrace unsigned int debug_smp_processor_id(void)
    +noinstr unsigned int debug_smp_processor_id(void)
    {
    return check_preemption_disabled("smp_processor_id", "");
    }
    EXPORT_SYMBOL(debug_smp_processor_id);
    -NOKPROBE_SYMBOL(debug_smp_processor_id);

    -notrace void __this_cpu_preempt_check(const char *op)
    +noinstr void __this_cpu_preempt_check(const char *op)
    {
    check_preemption_disabled("__this_cpu_", op);
    }
    EXPORT_SYMBOL(__this_cpu_preempt_check);
    -NOKPROBE_SYMBOL(__this_cpu_preempt_check);
    \
     
     \ /
      Last update: 2020-05-19 22:00    [W:4.071 / U:0.084 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site