GENMASK_ULL(39, 21) 这行执行后的值等于0x000000ffffe00000,简单说就是将39和21 之间的bit置为1.对应的GENMASK 是产生32 bit的mask
源码如下:
#define GENMASK(h, l)
(((~0UL) << (l)) & (~0UL >> (BITS_PER_LONG - 1 - (h))))
#define GENMASK_ULL(h, l)
(((~0ULL) << (l)) & (~0ULL >> (BITS_PER_LONG_LONG - 1 - (h))))
与之对应的是可以通过下面两个宏,来移位
#define BIT(nr) (1UL << (nr))
#define BIT_ULL(nr) (1ULL << (nr))