1.BITS_TO_LONGS(nr)
#define BITS_PER_BYTE 8
define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long))
DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long))为DIV_ROUND_UP(nr, 32)
所以BITS_TO_LONGS(nr)为(nr + 31)/32,就是求nr数字是32的多少倍。
2.ALIGN(x,a)
#define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1)
#define __ALIGN_MASK(x,mask) (((x)+(mask))&~(mask))
typeof(x)(a)表示用X的类型来重定义a,
然后算出X,以mask为掩码的上界数。
计算a以size为倍数的上下界数:
#define alignment_down(a, size) (a & (~(size-1)) )
#define alignment_up(a, size) ((a+size-1) & (~ (size-1)))
注意size为2的n次方
3.#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
该宏是用e来使函数在编译的时候判断能否继续编译进行,当e为0是,编译通过,当e为非0时非法语句,编译不通过。
4.#define container_of(ptr, type, member) ({ \
const typeof(((type *)0)->member) * __mptr = (ptr); \
(type *)((char *)__mptr - offsetof(type, member)); })
该宏通过已知tpye类型的结构体中的一个成员的指针,找到这个结构体的指针。该宏返回type类型结构体指针