Index: generic/include/mm/frame.h
===================================================================
--- generic/include/mm/frame.h	(revision 445745566f2e9f2942ee3a1fe4596b711a29dbe7)
+++ generic/include/mm/frame.h	(revision 61e6c39dae3807d33e258548805b2804e4239a94)
@@ -42,8 +42,7 @@
 #define FRAME2ADDR(zone, frame)			((zone)->base + ((frame) - (zone)->frames) * FRAME_SIZE)
 #define ADDR2FRAME(zone, addr)			(&((zone)->frames[((addr) - (zone)->base) / FRAME_SIZE]))
-#define FRAME_INDEX(zone, frame)		((count_t)((frame) - (zone)->frames))
+#define FRAME_INDEX(zone, frame)		((index_t)((frame) - (zone)->frames))
 #define FRAME_INDEX_VALID(zone, index)		(((index) >= 0) && ((index) < ((zone)->free_count + (zone)->busy_count)))
-#define IS_BUDDY_LEFT_BLOCK(zone, frame)	((FRAME_INDEX((zone), (frame)) % (1 << ((frame)->buddy_order + 1))) == 0)
-#define IS_BUDDY_RIGHT_BLOCK(zone, frame)	((FRAME_INDEX((zone), (frame)) % (1 << ((frame)->buddy_order + 1))) == (1 << (frame)->buddy_order))
+#define IS_BUDDY_LEFT_BLOCK(zone, frame)	((FRAME_INDEX((zone), (frame)) & ~(((__native) -1)<<((frame)->buddy_order + 1))) == 0)
 
 #define ZONE_BLACKLIST_SIZE	3
