Ram Pai <linux...@us.ibm.com> writes: > On Thu, Aug 10, 2017 at 05:25:39PM -0300, Thiago Jung Bauermann wrote: >> >> Ram Pai <linux...@us.ibm.com> writes: >> > static inline void pkey_initialize(void) >> > { >> > + int os_reserved, i; >> > + >> > /* disable the pkey system till everything >> > * is in place. A patch further down the >> > * line will enable it. >> > */ >> > pkey_inited = false; >> > + >> > + /* Lets assume 32 keys */ >> > + pkeys_total = 32; >> > + >> > +#ifdef CONFIG_PPC_4K_PAGES >> > + /* >> > + * the OS can manage only 8 pkeys >> > + * due to its inability to represent >> > + * them in the linux 4K-PTE. >> > + */ >> > + os_reserved = pkeys_total-8; >> > +#else >> > + os_reserved = 0; >> > +#endif >> > + /* >> > + * Bits are in LE format. >> > + * NOTE: 1, 0 are reserved. >> > + * key 0 is the default key, which allows read/write/execute. >> > + * key 1 is recommended not to be used. >> > + * PowerISA(3.0) page 1015, programming note. >> > + */ >> > + initial_allocation_mask = ~0x0; >> > + for (i = 2; i < (pkeys_total - os_reserved); i++) >> > + initial_allocation_mask &= ~(0x1<<i); >> > } >> > #endif /*_ASM_PPC64_PKEYS_H */ >> >> In v6, key 31 was also reserved, but it's not in this version. Is this >> intentional? > > On powernv platform, there is no hypervisor and hence the hypervisor > will not reserve key 31 for its own use. Wherease on PAPR guest > the hypervisor takes away key 31. > > Its not possible to determine at compile time which keys are used > or not. Hence the above code. pkeys_total is 32 in this patch, > but will be set to whatever value the device tree tells us. That will > be done in a subsequent patch.
You're right. At the time I made that comment I didn't realize that the hypervisor would subtract its reserved key from the device property. -- Thiago Jung Bauermann IBM Linux Technology Center