]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - arch/sh/mm/cache-sh4.c
sh: Lazy dcache writeback optimizations.
[mv-sheeva.git] / arch / sh / mm / cache-sh4.c
index c6955157c9897fc20d43567d09622fcfe6ab2d79..72bb48773337101585e37b586236c88e34ae59a5 100644 (file)
@@ -236,10 +236,20 @@ static inline void flush_cache_4096(unsigned long start,
 /*
  * Write back & invalidate the D-cache of the page.
  * (To avoid "alias" issues)
+ *
+ * This uses a lazy write-back on UP, which is explicitly
+ * disabled on SMP.
  */
 void flush_dcache_page(struct page *page)
 {
-       if (test_bit(PG_mapped, &page->flags)) {
+#ifndef CONFIG_SMP
+       struct address_space *mapping = page_mapping(page);
+
+       if (mapping && !mapping_mapped(mapping))
+               set_bit(PG_dcache_dirty, &page->flags);
+       else
+#endif
+       {
                unsigned long phys = PHYSADDR(page_address(page));
                unsigned long addr = CACHE_OC_ADDRESS_ARRAY;
                int i, n;