Index: arch/sparc64/src/mm/frame.c
===================================================================
--- arch/sparc64/src/mm/frame.c	(revision 445745566f2e9f2942ee3a1fe4596b711a29dbe7)
+++ arch/sparc64/src/mm/frame.c	(revision 61e6c39dae3807d33e258548805b2804e4239a94)
@@ -30,14 +30,7 @@
 #include <mm/frame.h>
 #include <config.h>
-#include <panic.h>
 
 void frame_arch_init(void)
 {
-	zone_t *z;
-	
-	z = zone_create(0, config.memory_size, 0);
-	if (!z) {
-		panic("Can't allocate zone (%dB).\n", config.memory_size);
-	}
-	zone_attach(z);
+	zone_create_in_region(0, config.memory_size & ~(FRAME_SIZE - 1));
 }
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
Index: generic/src/mm/frame.c
===================================================================
--- generic/src/mm/frame.c	(revision 445745566f2e9f2942ee3a1fe4596b711a29dbe7)
+++ generic/src/mm/frame.c	(revision 61e6c39dae3807d33e258548805b2804e4239a94)
@@ -389,7 +389,5 @@
 
 	is_left = IS_BUDDY_LEFT_BLOCK(zone, frame);
-	is_right = IS_BUDDY_RIGHT_BLOCK(zone, frame);
-	
-	ASSERT((is_left || is_right) && (!is_left || !is_right));
+	is_right = !is_left;
 	
 	/*
