Index: kernel/generic/src/lib/rd.c
===================================================================
--- kernel/generic/src/lib/rd.c	(revision cc85fb9f57fb5f9af22419eb0ee58d9548d3c7d1)
+++ kernel/generic/src/lib/rd.c	(revision 473e69345f542ae9a9eb34d76547b54f2492e511)
@@ -43,7 +43,14 @@
 #include <sysinfo/sysinfo.h>
 #include <ddi/ddi.h>
+#include <print.h>
+#include <align.h>
 
 static parea_t rd_parea;		/**< Physical memory area for rd. */
 
+/**
+ * RAM disk initialization routine. At this point, the RAM disk memory is shared
+ * and information about the share is provided as sysinfo values to the userspace
+ * tasks.
+ */  
 int init_rd(rd_header * header, size_t size)
 {
@@ -75,4 +82,7 @@
 		return RE_UNSUPPORTED;
 	
+	if (dsize % FRAME_SIZE)
+		return RE_UNSUPPORTED;
+
 	if (hsize > size)
 		return RE_INVALID;
@@ -81,5 +91,5 @@
 		dsize = size - hsize;
 	
-	rd_parea.pbase = KA2PA((void *) header + hsize);
+	rd_parea.pbase = ALIGN_DOWN((uintptr_t) KA2PA((void *) header + hsize), FRAME_SIZE);
 	rd_parea.vbase = (uintptr_t) ((void *) header + hsize);
 	rd_parea.frames = SIZE2FRAMES(dsize);
@@ -88,4 +98,5 @@
 
 	sysinfo_set_item_val("rd", NULL, true);
+	sysinfo_set_item_val("rd.header_size", NULL, hsize);	
 	sysinfo_set_item_val("rd.size", NULL, dsize);
 	sysinfo_set_item_val("rd.address.physical", NULL, (unative_t)
