x86/pkeys: Don't check if PKRU is zero before writing it
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Wed, 3 Apr 2019 16:41:43 +0000 (18:41 +0200)
committerBorislav Petkov <bp@suse.de>
Thu, 11 Apr 2019 13:41:05 +0000 (15:41 +0200)
write_pkru() checks if the current value is the same as the expected
value. So instead of just checking if the current and new value is zero
(and skip the write in such a case) we can benefit from that.

Remove the zero check of PKRU, __write_pkru() provides such a check now.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Borislav Petkov <bp@suse.de>
Reviewed-by: Dave Hansen <dave.hansen@intel.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "Jason A. Donenfeld" <Jason@zx2c4.com>
Cc: kvm ML <kvm@vger.kernel.org>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Cc: Rik van Riel <riel@surriel.com>
Cc: x86-ml <x86@kernel.org>
Link: https://lkml.kernel.org/r/20190403164156.19645-15-bigeasy@linutronix.de
arch/x86/mm/pkeys.c

index 05bb9a44eb1c33a4627df17c47fa828703f6dab9..50f65fc1b9a3f5ce296a1a2730329faaaf626c75 100644 (file)
@@ -142,13 +142,6 @@ u32 init_pkru_value = PKRU_AD_KEY( 1) | PKRU_AD_KEY( 2) | PKRU_AD_KEY( 3) |
 void copy_init_pkru_to_fpregs(void)
 {
        u32 init_pkru_value_snapshot = READ_ONCE(init_pkru_value);
-       /*
-        * Any write to PKRU takes it out of the XSAVE 'init
-        * state' which increases context switch cost.  Avoid
-        * writing 0 when PKRU was already 0.
-        */
-       if (!init_pkru_value_snapshot && !read_pkru())
-               return;
        /*
         * Override the PKRU state that came from 'init_fpstate'
         * with the baseline from the process.