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

Ram Pai linuxram at us.ibm.com
Fri Aug 18 02:00:57 AEST 2017


On Fri, Aug 11, 2017 at 03:39:14PM +1000, Michael Ellerman wrote:
> Thiago Jung Bauermann <bauerman at linux.vnet.ibm.com> writes:
> 
> > 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?
> 
> That whole thing could be replaced with two constants.
> 
> Except it can't, because we can't just hard code the number of keys. It
> needs to come either from the device tree or be based on the CPU we're
> running on.
> 
> > Isn't it better for this function to be in pkeys.c? Ideally, functions
> > should be in .c files not in headers unless they're very small or
> > performance sensitive IMHO.
> 
> Yes. No reason for that to be in a header AFAICS.

Yes can be moved into the pkeys.c file.  It was a simple function
to begin with....but not so any more.

RP



More information about the Linuxppc-dev mailing list