Subject: Re: [RFC v7 02/25] powerpc: track allocation status of all pkeys

From: Thiago Jung Bauermann <[email-masked]>
Date: Thu, 17 Aug 2017 17:40:37 -0300

Ram Pai <[email-masked]> writes:

> On Thu, Aug 10, 2017 at 05:25:39PM -0300, Thiago Jung Bauermann wrote:
>> 
>> Ram Pai <[email-masked]> 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