[RFC v7 09/25] powerpc: store and restore the pkey state across context switches
Michael Ellerman
mpe at ellerman.id.au
Fri Aug 11 16:34:19 AEST 2017
Thiago Jung Bauermann <bauerman at linux.vnet.ibm.com> writes:
> Ram Pai <linuxram at us.ibm.com> writes:
>> --- a/arch/powerpc/kernel/process.c
>> +++ b/arch/powerpc/kernel/process.c
>> @@ -42,6 +42,7 @@
>> #include <linux/hw_breakpoint.h>
>> #include <linux/uaccess.h>
>> #include <linux/elf-randomize.h>
>> +#include <linux/pkeys.h>
>>
>> #include <asm/pgtable.h>
>> #include <asm/io.h>
>> @@ -1096,6 +1097,13 @@ static inline void save_sprs(struct thread_struct *t)
>> t->tar = mfspr(SPRN_TAR);
>> }
>> #endif
>> +#ifdef CONFIG_PPC64_MEMORY_PROTECTION_KEYS
>> + if (arch_pkeys_enabled()) {
>> + t->amr = mfspr(SPRN_AMR);
>> + t->iamr = mfspr(SPRN_IAMR);
>> + t->uamor = mfspr(SPRN_UAMOR);
>> + }
>> +#endif
>> }
>
> Is it worth having a flag in thread_struct saying whether it has every
> called pkey_alloc and only do the mfsprs if it did?
Yes, in fact there's a programming note in the UAMOR section of the arch
that says exactly that.
On the write side you have to be a bit more careful. You have to make
sure you set the UAMOR to 0 when you're switching from a process that
has used keys to one that isn't.
cheers
More information about the Linuxppc-dev
mailing list