While going through kernel source , I came across this ALIGN macro

#define ALIGN(x, a)             __ALIGN_KERNEL((x), (a))
and
#define __ALIGN_KERNEL(x, a)            __ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1)
#define __ALIGN_KERNEL_MASK(x, mask)    (((x) + (mask)) & ~(mask))

What does this macro do? I have read this article  http://stackoverflow.com/questions/13122846/align-macro-kernel but it was not of much help.