Index: generic/include/mm/frame.h
===================================================================
--- generic/include/mm/frame.h	(revision d43d2f705946ff05da350bbb3b6648898cae3600)
+++ generic/include/mm/frame.h	(revision 9d5e23cc7bc9f1f8f9799b82cd567c045c657dd3)
@@ -46,5 +46,7 @@
 #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)) & ~(((__native) -1)<<((frame)->buddy_order + 1))) == 0)
+#define IS_BUDDY_ORDER_OK(index, order)		((~(((__native) -1) << (order)) & (index)) == 0)
+#define IS_BUDDY_LEFT_BLOCK(zone, frame)	(((FRAME_INDEX((zone), (frame)) >> (frame)->buddy_order) & 0x1) == 0)
+#define IS_BUDDY_RIGHT_BLOCK(zone, frame)	(((FRAME_INDEX((zone), (frame)) >> (frame)->buddy_order) & 0x1) == 1)
 
 #define ZONE_BLACKLIST_SIZE	3
