#define __ALIGN_KERNEL(x, a)           __ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1)
 #define __ALIGN_KERNEL_MASK(x, mask)   (((x) + (mask)) & ~(mask))
 #define ALIGN(x, a)                    __ALIGN_KERNEL((x), (a))
+#define ALIGN_DOWN(x, a)               __ALIGN_KERNEL((x) - ((a) - 1), (a))
 
 #define PAGE_ALIGN(addr) ALIGN(addr, PAGE_SIZE)
 
 
 {
        const unsigned int sgmax = SCATTERLIST_MAX_SEGMENT;
        struct test *test, tests[] = {
-               { -EINVAL, 1, pfn(0), PAGE_SIZE, PAGE_SIZE + 1, 1 },
                { -EINVAL, 1, pfn(0), PAGE_SIZE, 0, 1 },
-               { -EINVAL, 1, pfn(0), PAGE_SIZE, sgmax + 1, 1 },
+               { 0, 1, pfn(0), PAGE_SIZE, PAGE_SIZE + 1, 1 },
+               { 0, 1, pfn(0), PAGE_SIZE, sgmax + 1, 1 },
                { 0, 1, pfn(0), PAGE_SIZE, sgmax, 1 },
                { 0, 1, pfn(0), 1, sgmax, 1 },
                { 0, 2, pfn(0, 1), 2 * PAGE_SIZE, sgmax, 1 },