Re: [tip:x86/fpu] bitops: Add clear/set_bit32() to linux/bitops.h

From: Ingo Molnar
Date: Sun Nov 05 2017 - 12:41:04 EST



* Heiko Carstens <heiko.carstens@xxxxxxxxxx> wrote:

> On Tue, Oct 17, 2017 at 09:21:46AM -0700, tip-bot for Andi Kleen wrote:
> > Commit-ID: cbe96375025e14fc76f9ed42ee5225120d7210f8
> > Gitweb: https://git.kernel.org/tip/cbe96375025e14fc76f9ed42ee5225120d7210f8
> > Author: Andi Kleen <ak@xxxxxxxxxxxxxxx>
> > AuthorDate: Fri, 13 Oct 2017 14:56:41 -0700
> > Committer: Ingo Molnar <mingo@xxxxxxxxxx>
> > CommitDate: Tue, 17 Oct 2017 17:14:56 +0200
> >
> > bitops: Add clear/set_bit32() to linux/bitops.h
> >
> > Add two simple wrappers around set_bit/clear_bit() that accept
> > the common case of an u32 array. This avoids writing
> > casts in all callers.
> >
> > Signed-off-by: Andi Kleen <ak@xxxxxxxxxxxxxxx>
> > Reviewed-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> > Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> > Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
> > Link: http://lkml.kernel.org/r/20171013215645.23166-2-andi@xxxxxxxxxxxxxx
> > Signed-off-by: Ingo Molnar <mingo@xxxxxxxxxx>
> > ---
> > include/linux/bitops.h | 26 ++++++++++++++++++++++++++
> > 1 file changed, 26 insertions(+)
>
> ...
>
> > + * set_bit32 - Set a bit in memory for u32 array
> > + * @nr: Bit to clear
> > + * @addr: u32 * address of bitmap
> > + *
> > + * Same as set_bit, but avoids needing casts for u32 arrays.
> > + */
> > +
> > +static __always_inline void set_bit32(long nr, volatile u32 *addr)
> > +{
> > + set_bit(nr, (volatile unsigned long *)addr);
> > +}
>
> This does not work at all on 64 bit big endian machines. If e.g. the array
> would contain only one 32 bit member set_bit() would write to whatever is
> behind the array.

Yeah, indeed - this got reverted via:

1943dc07b45e: bitops: Revert cbe96375025e ("bitops: Add clear/set_bit32() to linux/bitops.h")

Thanks,

Ingo