This page is intended to describe some magic macros used in kernel. = container_of = The {{{container_of}}} macro is defined in include/linux/kernel.h as following: {{{ /** * container_of - cast a member of a structure out to the containing structure * @ptr: the pointer to the member. * @type: the type of the container struct this is embedded in. * @member: the name of the member within the struct. * */ #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );}) }}} GregKH described the inner working of this macro in an article on linuxjournal.com [1] and in his weblog [2]. [1] http://www.linuxjournal.com/article/5783 [2] http://www.kroah.com/log/linux/container_of.html Another example of how to use this macro: http://bec-systems.com/site/115/the-linux-kernel-container_of-macro = ARRAY_SIZE = Also defined in include/linux/kernel.h ARRAY_SIZE(x) is used to get the number of elements in an array. {{{ #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) }}} Therefor it divides the size of the array by the size of the first array element.