Index: kernel/arch/arm32/src/mm/frame.c
===================================================================
--- kernel/arch/arm32/src/mm/frame.c	(revision c520034c1c09f379852efaec5da361fb0a910b01)
+++ kernel/arch/arm32/src/mm/frame.c	(revision 6f7cd5da3b0f1d7617a2393b3a3f247d14403b57)
@@ -60,7 +60,7 @@
 	} else {
 		pfn_t conf = zone_external_conf_alloc(SIZE2FRAMES(size));
-
-		zone_create(ADDR2PFN(base), SIZE2FRAMES(size), conf,
-		    ZONE_AVAILABLE | ZONE_HIGHMEM);
+		if (conf != 0)
+			zone_create(ADDR2PFN(base), SIZE2FRAMES(size), conf,
+			    ZONE_AVAILABLE | ZONE_HIGHMEM);
 	}
 	
Index: kernel/arch/ia32/src/mm/frame.c
===================================================================
--- kernel/arch/ia32/src/mm/frame.c	(revision c520034c1c09f379852efaec5da361fb0a910b01)
+++ kernel/arch/ia32/src/mm/frame.c	(revision 6f7cd5da3b0f1d7617a2393b3a3f247d14403b57)
@@ -79,6 +79,7 @@
 			} else {
 				conf = zone_external_conf_alloc(count);
-				zone_create(pfn, count, conf,
-				    ZONE_AVAILABLE | ZONE_HIGHMEM);
+				if (conf != 0)
+					zone_create(pfn, count, conf,
+					    ZONE_AVAILABLE | ZONE_HIGHMEM);
 			}
 		} else if ((e820table[i].type == MEMMAP_MEMORY_ACPI) ||
Index: kernel/arch/ia64/src/mm/frame.c
===================================================================
--- kernel/arch/ia64/src/mm/frame.c	(revision c520034c1c09f379852efaec5da361fb0a910b01)
+++ kernel/arch/ia64/src/mm/frame.c	(revision 6f7cd5da3b0f1d7617a2393b3a3f247d14403b57)
@@ -79,9 +79,8 @@
 				    ZONE_AVAILABLE | ZONE_LOWMEM);
 			} else {
-				pfn_t conf;
-
-				conf = zone_external_conf_alloc(count);
-				zone_create(pfn, count, conf,
-				    ZONE_AVAILABLE | ZONE_HIGHMEM);
+				pfn_t conf = zone_external_conf_alloc(count);
+				if (conf != 0)
+					zone_create(pfn, count, conf,
+					    ZONE_AVAILABLE | ZONE_HIGHMEM);
 			}
 		}
Index: kernel/arch/mips32/src/mm/frame.c
===================================================================
--- kernel/arch/mips32/src/mm/frame.c	(revision c520034c1c09f379852efaec5da361fb0a910b01)
+++ kernel/arch/mips32/src/mm/frame.c	(revision 6f7cd5da3b0f1d7617a2393b3a3f247d14403b57)
@@ -156,9 +156,9 @@
 	} else {
 		conf_frame = zone_external_conf_alloc(count);
-		zone_create(first, count, conf_frame,
-		    ZONE_AVAILABLE | ZONE_HIGHMEM);
-	}
-		
-		
+		if (conf_frame != 0)
+			zone_create(first, count, conf_frame,
+			    ZONE_AVAILABLE | ZONE_HIGHMEM);
+	}
+	
 	if (phys_regions_count < MAX_REGIONS) {
 		phys_regions[phys_regions_count].start = first;
Index: kernel/arch/mips64/src/mm/frame.c
===================================================================
--- kernel/arch/mips64/src/mm/frame.c	(revision c520034c1c09f379852efaec5da361fb0a910b01)
+++ kernel/arch/mips64/src/mm/frame.c	(revision 6f7cd5da3b0f1d7617a2393b3a3f247d14403b57)
@@ -148,9 +148,9 @@
 	} else {
 		conf_frame = zone_external_conf_alloc(count);
-		zone_create(first, count, conf_frame,
-		    ZONE_AVAILABLE | ZONE_HIGHMEM);
-	}
-		
-		
+		if (conf_frame != 0)
+			zone_create(first, count, conf_frame,
+			    ZONE_AVAILABLE | ZONE_HIGHMEM);
+	}
+	
 	if (phys_regions_count < MAX_REGIONS) {
 		phys_regions[phys_regions_count].start = first;
Index: kernel/arch/ppc32/src/mm/frame.c
===================================================================
--- kernel/arch/ppc32/src/mm/frame.c	(revision c520034c1c09f379852efaec5da361fb0a910b01)
+++ kernel/arch/ppc32/src/mm/frame.c	(revision 6f7cd5da3b0f1d7617a2393b3a3f247d14403b57)
@@ -81,6 +81,7 @@
 		} else {
 			conf = zone_external_conf_alloc(count);
-			zone_create(pfn, count, conf,
-			    ZONE_AVAILABLE | ZONE_HIGHMEM);
+			if (conf != 0)
+				zone_create(pfn, count, conf,
+				    ZONE_AVAILABLE | ZONE_HIGHMEM);
 		}
 	}
Index: kernel/arch/sparc64/src/mm/sun4u/frame.c
===================================================================
--- kernel/arch/sparc64/src/mm/sun4u/frame.c	(revision c520034c1c09f379852efaec5da361fb0a910b01)
+++ kernel/arch/sparc64/src/mm/sun4u/frame.c	(revision 6f7cd5da3b0f1d7617a2393b3a3f247d14403b57)
@@ -79,9 +79,9 @@
 		} else {
 			confdata = zone_external_conf_alloc(count);
-			zone_create(pfn, count, confdata,
-			    ZONE_AVAILABLE | ZONE_HIGHMEM);
+			if (confdata != 0)
+				zone_create(pfn, count, confdata,
+				    ZONE_AVAILABLE | ZONE_HIGHMEM);
 		}
 	}
-		
 }
 
Index: kernel/arch/sparc64/src/mm/sun4v/frame.c
===================================================================
--- kernel/arch/sparc64/src/mm/sun4v/frame.c	(revision c520034c1c09f379852efaec5da361fb0a910b01)
+++ kernel/arch/sparc64/src/mm/sun4v/frame.c	(revision 6f7cd5da3b0f1d7617a2393b3a3f247d14403b57)
@@ -79,9 +79,9 @@
 		} else {
 			confdata = zone_external_conf_alloc(count);
-			zone_create(pfn, count, confdata,
-			    ZONE_AVAILABLE | ZONE_HIGHMEM);
+			if (confdata != 0)
+				zone_create(pfn, count, confdata,
+				    ZONE_AVAILABLE | ZONE_HIGHMEM);
 		}
 	}
-		
 }
 
Index: kernel/generic/src/mm/frame.c
===================================================================
--- kernel/generic/src/mm/frame.c	(revision c520034c1c09f379852efaec5da361fb0a910b01)
+++ kernel/generic/src/mm/frame.c	(revision 6f7cd5da3b0f1d7617a2393b3a3f247d14403b57)
@@ -870,5 +870,6 @@
 	size_t order = ispwr2(size) ? fnzb(size) : (fnzb(size) + 1);
 
-	return ADDR2PFN((uintptr_t) frame_alloc(order - FRAME_WIDTH, FRAME_LOWMEM));
+	return ADDR2PFN((uintptr_t) frame_alloc(order - FRAME_WIDTH,
+	    FRAME_LOWMEM | FRAME_ATOMIC));
 }
 
