Messages in this thread | | | Date | Tue, 1 Mar 2022 07:56:30 -0800 | From | Ira Weiny <> | Subject | Re: [PATCH V8 33/44] memremap_pages: Introduce pgmap_protection_available() |
| |
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 > > >
| |