Index: generic/include/mm/frame.h
===================================================================
--- generic/include/mm/frame.h	(revision 594a4685fd3e8f2a0240297164d050cbcb0f79d9)
+++ generic/include/mm/frame.h	(revision 9ebc238661f7f09b9e25d99829f29144df068cbb)
@@ -43,8 +43,9 @@
 #define ADDR2FRAME(zone, addr)			(&((zone)->frames[((addr) - (zone)->base) / FRAME_SIZE]))
 #define FRAME_INDEX(zone, frame)		((count_t)((frame) - (zone)->frames))
-#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 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 ZONE_BLACKLIST_SIZE	3
 
 struct zone {
@@ -69,4 +70,14 @@
 };
 
+struct region {
+	__address base;
+	size_t size;
+};
+
+extern region_t zone_blacklist[];
+extern count_t zone_blacklist_count;
+extern void frame_region_not_free(__address base, size_t size);
+extern void zone_create_in_region(__address base, size_t size);
+
 extern spinlock_t zone_head_lock;	/**< this lock protects zone_head list */
 extern link_t zone_head;		/**< list of all zones in the system */
@@ -78,8 +89,6 @@
 extern void frame_init(void);
 extern void frame_initialize(frame_t *frame, zone_t *zone);
-__address frame_alloc(int flags);
+__address frame_alloc(int flags, __u8 order);
 extern void frame_free(__address addr);
-extern void frame_not_free(__address addr);
-extern void frame_region_not_free(__address start, __address stop);
 zone_t * get_zone_by_frame(frame_t * frame);
 
@@ -92,7 +101,5 @@
 void zone_buddy_set_order(buddy_system_t *b, link_t * block, __u8 order);
 __u8 zone_buddy_get_order(buddy_system_t *b, link_t * block);
-
-__address zone_buddy_frame_alloc(int flags, __u8 order);
-void zone_buddy_frame_free(__address addr);
+void zone_buddy_mark_busy(buddy_system_t *b, link_t * block);
 
 /*
