[RFC v7 02/25] powerpc: track allocation status of all pkeys
Thiago Jung Bauermann
bauerman at linux.vnet.ibm.com
Fri Aug 18 06:40:37 AEST 2017
Ram Pai <linuxram at us.ibm.com> writes:
> On Thu, Aug 10, 2017 at 05:25:39PM -0300, Thiago Jung Bauermann wrote:
>>
>> Ram Pai <linuxram at 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
More information about the Linuxppc-dev
mailing list