unsigned long mask);
 
 /* Declarations for getting and setting flags. See mm/page_alloc.c */
-#define get_pageblock_flags_group(page, start_bitidx, end_bitidx) \
-       get_pfnblock_flags_mask(page, page_to_pfn(page),                \
-                       end_bitidx,                                     \
-                       (1 << (end_bitidx - start_bitidx + 1)) - 1)
-#define set_pageblock_flags_group(page, flags, start_bitidx, end_bitidx) \
-       set_pfnblock_flags_mask(page, flags, page_to_pfn(page),         \
-                       end_bitidx,                                     \
-                       (1 << (end_bitidx - start_bitidx + 1)) - 1)
-
 #ifdef CONFIG_COMPACTION
 #define get_pageblock_skip(page) \
-                       get_pageblock_flags_group(page, PB_migrate_skip,     \
-                                                       PB_migrate_skip)
+       get_pfnblock_flags_mask(page, page_to_pfn(page),        \
+                       PB_migrate_skip, (1 << (PB_migrate_skip)))
 #define clear_pageblock_skip(page) \
-                       set_pageblock_flags_group(page, 0, PB_migrate_skip,  \
-                                                       PB_migrate_skip)
+       set_pfnblock_flags_mask(page, 0, page_to_pfn(page),     \
+                       PB_migrate_skip, (1 << PB_migrate_skip))
 #define set_pageblock_skip(page) \
-                       set_pageblock_flags_group(page, 1, PB_migrate_skip,  \
-                                                       PB_migrate_skip)
+       set_pfnblock_flags_mask(page, (1 << PB_migrate_skip),   \
+                       page_to_pfn(page),                      \
+                       PB_migrate_skip, (1 << PB_migrate_skip))
 #else
 static inline bool get_pageblock_skip(struct page *page)
 {
 
        bitidx &= (BITS_PER_LONG-1);
 
        word = bitmap[word_bitidx];
-       bitidx += end_bitidx;
-       return (word >> (BITS_PER_LONG - bitidx - 1)) & mask;
+       return (word >> bitidx) & mask;
 }
 
 unsigned long get_pfnblock_flags_mask(struct page *page, unsigned long pfn,
 
        VM_BUG_ON_PAGE(!zone_spans_pfn(page_zone(page), pfn), page);
 
-       bitidx += end_bitidx;
-       mask <<= (BITS_PER_LONG - bitidx - 1);
-       flags <<= (BITS_PER_LONG - bitidx - 1);
+       mask <<= bitidx;
+       flags <<= bitidx;
 
        word = READ_ONCE(bitmap[word_bitidx]);
        for (;;) {
                     migratetype < MIGRATE_PCPTYPES))
                migratetype = MIGRATE_UNMOVABLE;
 
-       set_pageblock_flags_group(page, (unsigned long)migratetype,
-                                       PB_migrate, PB_migrate_end);
+       set_pfnblock_flags_mask(page, (unsigned long)migratetype,
+                               page_to_pfn(page), PB_migrate_end,
+                               MIGRATETYPE_MASK);
 }
 
 #ifdef CONFIG_DEBUG_VM