Re: [PATCH] rss_stat: Add support to detect RSS updates of external mm

From: Joel Fernandes
Date: Thu Nov 07 2019 - 13:07:56 EST


On Wed, Nov 06, 2019 at 09:59:59AM +0100, Petr Mladek wrote:
> On Tue 2019-11-05 21:44:51, Joel Fernandes (Google) wrote:
> > Also vsprintf.c is refactored a bit to allow reuse of hashing code.
>
> I agree with Sergey that it would make sense to move this outside
> vsprintf.c.

I am of the opinion that its Ok to have it this way and I am not sure if
another translation unit is worth it just for this. If we have more users,
then yes we can consider splitting into its own translation unit at that
time.

If Andrew Morton objects, then I'll do it since the intention was for this
patch to go through his tree and I believe he is Ok with it this way.

> > diff --git a/lib/vsprintf.c b/lib/vsprintf.c
> > index dee8fc467fcf..401baaac1813 100644
> > --- a/lib/vsprintf.c
> > +++ b/lib/vsprintf.c
> > @@ -761,11 +761,34 @@ static int __init initialize_ptr_random(void)
> > early_initcall(initialize_ptr_random);
> >
> > /* Maps a pointer to a 32 bit unique identifier. */
> > +int ptr_to_hashval(const void *ptr, unsigned long *hashval_out)
> > +{
> > + const char *str = sizeof(ptr) == 8 ? "(____ptrval____)" : "(ptrval)";
>
> str is unused.

I believe Andrew has already fixed this in his tree.

linux-next has local variable removed now:
7422993b4f8e ("rss_stat-add-support-to-detect-rss-updates-of-external-mm-fix")

> > + unsigned long hashval;
>
> IMHO, this local variable unnecessarily complicates the code.
> I would use the pointer directly and let compiler to optimize.

Agreed.

thanks,

- Joel


> > + if (static_branch_unlikely(&not_filled_random_ptr_key))
> > + return -EAGAIN;
> > +
> > +#ifdef CONFIG_64BIT
> > + hashval = (unsigned long)siphash_1u64((u64)ptr, &ptr_key);
> > + /*
> > + * Mask off the first 32 bits, this makes explicit that we have
> > + * modified the address (and 32 bits is plenty for a unique ID).
> > + */
> > + hashval = hashval & 0xffffffff;
> > +#else
> > + hashval = (unsigned long)siphash_1u32((u32)ptr, &ptr_key);
> > +#endif
> > + *hashval_out = hashval;
> > + return 0;
> > +}
>
> Best Regards,
> Petr