Messages in this thread | | | Subject | Re: [PATCH v2 3/9] bitops: Introduce a more generic BITMASK macro | From | Joe Perches <> | Date | Wed, 16 Oct 2013 19:59:09 -0700 |
| |
On Wed, 2013-10-16 at 10:56 -0400, Chen, Gong wrote: > GENMASK is used to create a contiguous bitmask([hi:lo]). It is > implemented twice in current kernel. One is in EDAC driver, the other > is in SiS/XGI FB driver. Move it to a more generic place for other > usage. [] > diff --git a/include/linux/bitops.h b/include/linux/bitops.h [] > @@ -10,6 +10,14 @@ > #define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long)) > #endif > > +/* > + * Create a contiguous bitmask starting at bit position @l and ending at > + * position @h. For example > + * GENMASK_ULL(39, 21) gives us the 64bit vector 0x000000ffffe00000.
ull
> + */ > +#define GENMASK(h, l) (((U32_C(1) << ((h) - (l) + 1)) - 1) << (l)) > +#define GENMASK_ULL(h, l) (((U64_C(1) << ((h) - (l) + 1)) - 1) << (l))
Maybe add a
BUILD_BUG_ON(__builtin_constant_p(l) && __builtin_constant_p(h) && \ (h) < (l))
| |