Re: [PATCH V8 33/44] memremap_pages: Introduce pgmap_protection_available()

Ira Weiny
2022-03-01T15:56:48Z

On Mon, Feb 28, 2022 at 08:59:44AM -0800, Ira Weiny wrote:
> On Fri, Feb 04, 2022 at 08:19:43AM -0800, Dan Williams wrote:
> > On Thu, Jan 27, 2022 at 9:55 AM <ira.weiny@intel.com> wrote:
>
> [snip]
>
> > > @@ -63,6 +64,16 @@ static void devmap_managed_enable_put(struct dev_pagemap *pgmap)
> > > }
> > > #endif /* CONFIG_DEV_PAGEMAP_OPS */
> > >
> > > +#ifdef CONFIG_DEVMAP_ACCESS_PROTECTION
> > > +
> > > +bool pgmap_protection_available(void)
> > > +{
> > > + return pks_available();
> > > +}
> > > +EXPORT_SYMBOL_GPL(pgmap_protection_available);
> >
> > Any reason this was chosen to be an out-of-line function? Doesn't this
> > defeat the performance advantages of static_cpu_has()?
>
> Unfortunately, yes. pkeys.h includes mm.h which means I can't include pkeys.h
> here in mm.h.
>
> Let me see what I can do. In patch 11 I created pks-keys.h. Let me see if I
> can leverage that header instead of pkeys.h.
>
> When I created that header I was thinking that the user and supervisor pkey
> functions may need even more separation in the headers but I was fearful of
> putting too much in pks-keys.h because it was created to avoid conflicts in
> asm/processor.h. Looking at it again I think pks_available() may be ok in
> pks-keys.h.

Ok I've reworked the series to allow for this. However, pks-keys.h was not
sufficient. That header needs to be specific to the definition of the keys
themselves (hence the name).

In order to facilitate this change I've introduced another header linux/pks.h
which separates out the supervisor specific calls from the user pkeys calls.
It worked out well and I think makes a lot of sense due to the different
functionality. But I'm pretty bad at names so I'm open to changing the name of
the header if 'pks.h' seems too generic.

Ira

>
> Ira
>
> >
> > > +
> > > +#endif /* CONFIG_DEVMAP_ACCESS_PROTECTION */
> > > +
> > > static void pgmap_array_delete(struct range *range)
> > > {
> > > xa_store_range(&pgmap_array, PHYS_PFN(range->start), PHYS_PFN(range->end),
> > > --
> > > 2.31.1
> > >