Index: kernel/generic/src/mm/backend_anon.c
===================================================================
--- kernel/generic/src/mm/backend_anon.c	(revision df4ed852a2d1b242f9bdce0a873009a2cb77cec7)
+++ kernel/generic/src/mm/backend_anon.c	(revision f429331b6108df4294a421a92f3e9aaa64d95732)
@@ -51,4 +51,8 @@
 #include <align.h>
 #include <arch.h>
+
+#ifdef CONFIG_VIRT_IDX_DCACHE
+#include <arch/mm/cache.h>
+#endif
 
 static int anon_page_fault(as_area_t *area, uintptr_t addr, pf_access_t access);
@@ -154,5 +158,5 @@
  *
  * @param area Ignored.
- * @param page Ignored.
+ * @param page Virtual address of the page corresponding to the frame.
  * @param frame Frame to be released.
  */
@@ -160,4 +164,7 @@
 {
 	frame_free(frame);
+#ifdef CONFIG_VIRT_IDX_DCACHE
+	dcache_flush_frame(page, frame);
+#endif
 }
 
Index: kernel/generic/src/mm/backend_elf.c
===================================================================
--- kernel/generic/src/mm/backend_elf.c	(revision df4ed852a2d1b242f9bdce0a873009a2cb77cec7)
+++ kernel/generic/src/mm/backend_elf.c	(revision f429331b6108df4294a421a92f3e9aaa64d95732)
@@ -51,4 +51,8 @@
 #include <arch.h>
 
+#ifdef CONFIG_VIRT_IDX_DCACHE
+#include <arch/mm/cache.h>
+#endif
+
 static int elf_page_fault(as_area_t *area, uintptr_t addr, pf_access_t access);
 static void elf_frame_free(as_area_t *area, uintptr_t page, uintptr_t frame);
@@ -220,4 +224,7 @@
 			 */
 			frame_free(frame);
+#ifdef CONFIG_VIRT_IDX_DCACHE
+		        dcache_flush_frame(page, frame);
+#endif
 		}
 	} else {
@@ -228,4 +235,7 @@
 		 */
 		frame_free(frame); 
+#ifdef CONFIG_VIRT_IDX_DCACHE
+	        dcache_flush_frame(page, frame);
+#endif
 	}
 }
