x86/mm/kmmio: Use this_cpu_ptr() instead get_cpu_var() for kmmio_ctx
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Wed, 5 Feb 2020 14:34:26 +0000 (15:34 +0100)
committerBorislav Petkov <bp@suse.de>
Thu, 12 Mar 2020 15:41:40 +0000 (16:41 +0100)
Both call sites that access kmmio_ctx, access kmmio_ctx with interrupts
disabled. There is no need to use get_cpu_var() which additionally
disables preemption.

Use this_cpu_ptr() to access the kmmio_ctx variable of the current CPU.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Borislav Petkov <bp@suse.de>
Link: https://lkml.kernel.org/r/20200205143426.2592512-1-bigeasy@linutronix.de
arch/x86/mm/kmmio.c

index 49d7814b59a9b659288cf7ef776fd81dcbfac1e2..9994353fb75de9438be6219145ae6a47a505f0b3 100644 (file)
@@ -260,7 +260,7 @@ int kmmio_handler(struct pt_regs *regs, unsigned long addr)
                goto no_kmmio;
        }
 
-       ctx = &get_cpu_var(kmmio_ctx);
+       ctx = this_cpu_ptr(&kmmio_ctx);
        if (ctx->active) {
                if (page_base == ctx->addr) {
                        /*
@@ -285,7 +285,7 @@ int kmmio_handler(struct pt_regs *regs, unsigned long addr)
                        pr_emerg("previous hit was at 0x%08lx.\n", ctx->addr);
                        disarm_kmmio_fault_page(faultpage);
                }
-               goto no_kmmio_ctx;
+               goto no_kmmio;
        }
        ctx->active++;
 
@@ -314,11 +314,8 @@ int kmmio_handler(struct pt_regs *regs, unsigned long addr)
         * the user should drop to single cpu before tracing.
         */
 
-       put_cpu_var(kmmio_ctx);
        return 1; /* fault handled */
 
-no_kmmio_ctx:
-       put_cpu_var(kmmio_ctx);
 no_kmmio:
        rcu_read_unlock();
        preempt_enable_no_resched();
@@ -333,7 +330,7 @@ no_kmmio:
 static int post_kmmio_handler(unsigned long condition, struct pt_regs *regs)
 {
        int ret = 0;
-       struct kmmio_context *ctx = &get_cpu_var(kmmio_ctx);
+       struct kmmio_context *ctx = this_cpu_ptr(&kmmio_ctx);
 
        if (!ctx->active) {
                /*
@@ -371,7 +368,6 @@ static int post_kmmio_handler(unsigned long condition, struct pt_regs *regs)
        if (!(regs->flags & X86_EFLAGS_TF))
                ret = 1;
 out:
-       put_cpu_var(kmmio_ctx);
        return ret;
 }