Re: [PATCH RFC V2 12/17] memremap: Add zone device access protection

From: Ira Weiny
Date: Sat Jul 18 2020 - 01:51:14 EST


On Fri, Jul 17, 2020 at 11:17:18AM +0200, Peter Zijlstra wrote:
> On Fri, Jul 17, 2020 at 12:20:51AM -0700, ira.weiny@xxxxxxxxx wrote:
> > +void dev_access_disable(void)
> > +{
> > + unsigned long flags;
> > +
> > + if (!static_branch_unlikely(&dev_protection_static_key))
> > + return;
> > +
> > + local_irq_save(flags);
> > + current->dev_page_access_ref--;
> > + if (current->dev_page_access_ref == 0)
>
> if (!--current->dev_page_access_ref)

It's not my style but I'm ok with it.

>
> > + pks_update_protection(dev_page_pkey, PKEY_DISABLE_ACCESS);
> > + local_irq_restore(flags);
> > +}
> > +EXPORT_SYMBOL_GPL(dev_access_disable);
> > +
> > +void dev_access_enable(void)
> > +{
> > + unsigned long flags;
> > +
> > + if (!static_branch_unlikely(&dev_protection_static_key))
> > + return;
> > +
> > + local_irq_save(flags);
> > + /* 0 clears the PKEY_DISABLE_ACCESS bit, allowing access */
> > + if (current->dev_page_access_ref == 0)
> > + pks_update_protection(dev_page_pkey, 0);
> > + current->dev_page_access_ref++;
>
> if (!current->dev_page_access_ref++)

Sure.

>
> > + local_irq_restore(flags);
> > +}
> > +EXPORT_SYMBOL_GPL(dev_access_enable);
>
>
> Also, you probably want something like:
>
> static __always_inline devm_access_disable(void)

Yes that is better.

However, again Dan and I agree devm is not the right prefix here.

I've updated.

Thanks!
Ira

> {
> if (static_branch_unlikely(&dev_protection_static_key))
> __devm_access_disable();
> }
>
> static __always_inline devm_access_enable(void)
> {
> if (static_branch_unlikely(&dev_protection_static_key))
> __devm_access_enable();
> }