| |
| #ifndef KVM__LINUX_KERNEL_H_ |
| #define KVM__LINUX_KERNEL_H_ |
| |
| #include "asm/kernel.h" |
| |
| #define __round_mask(x, y) ((__typeof__(x))((y)-1)) |
| #define round_down(x, y) ((x) & ~__round_mask(x, y)) |
| |
| #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) |
| |
| #define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1) |
| #define __ALIGN_MASK(x,mask) (((x)+(mask))&~(mask)) |
| #define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a) - 1)) == 0) |
| |
| #ifndef offsetof |
| #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) |
| #endif |
| |
| #ifndef container_of |
| /** |
| * 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)); }) |
| #endif |
| |
| #define min(x, y) ({ \ |
| typeof(x) _min1 = (x); \ |
| typeof(y) _min2 = (y); \ |
| (void) (&_min1 == &_min2); \ |
| _min1 < _min2 ? _min1 : _min2; }) |
| |
| #define max(x, y) ({ \ |
| typeof(x) _max1 = (x); \ |
| typeof(y) _max2 = (y); \ |
| (void) (&_max1 == &_max2); \ |
| _max1 > _max2 ? _max1 : _max2; }) |
| |
| #define min_t(type, x, y) ({ \ |
| type __min1 = (x); \ |
| type __min2 = (y); \ |
| __min1 < __min2 ? __min1: __min2; }) |
| |
| #define max_t(type, x, y) ({ \ |
| type __max1 = (x); \ |
| type __max2 = (y); \ |
| __max1 > __max2 ? __max1: __max2; }) |
| |
| #define true 1 |
| |
| #endif |