]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/sh/mm/cache-sh7705.c
x86: fix section mismatch warning in process_*.c
[linux-2.6-omap-h63xx.git] / arch / sh / mm / cache-sh7705.c
index 2808b580d984634ef30a7eb434e8ff52a1387ebc..22dacc7788236c96162b9df9e6d3483b04c9a67b 100644 (file)
@@ -3,11 +3,11 @@
  *
  * Copyright (C) 1999, 2000  Niibe Yutaka
  * Copyright (C) 2004  Alex Song
- * Copyright (C) 2006  Paul Mundt
  *
  * This file is subject to the terms and conditions of the GNU General Public
  * License.  See the file "COPYING" in the main directory of this archive
  * for more details.
+ *
  */
 #include <linux/init.h>
 #include <linux/mman.h>
@@ -32,9 +32,9 @@ static inline void cache_wback_all(void)
 {
        unsigned long ways, waysize, addrstart;
 
-       ways = cpu_data->dcache.ways;
-       waysize = cpu_data->dcache.sets;
-       waysize <<= cpu_data->dcache.entry_shift;
+       ways = current_cpu_data.dcache.ways;
+       waysize = current_cpu_data.dcache.sets;
+       waysize <<= current_cpu_data.dcache.entry_shift;
 
        addrstart = CACHE_OC_ADDRESS_ARRAY;
 
@@ -43,7 +43,7 @@ static inline void cache_wback_all(void)
 
                for (addr = addrstart;
                     addr < addrstart + waysize;
-                    addr += cpu_data->dcache.linesz) {
+                    addr += current_cpu_data.dcache.linesz) {
                        unsigned long data;
                        int v = SH_CACHE_UPDATED | SH_CACHE_VALID;
 
@@ -51,9 +51,10 @@ static inline void cache_wback_all(void)
 
                        if ((data & v) == v)
                                ctrl_outl(data & ~v, addr);
+
                }
 
-               addrstart += cpu_data->dcache.way_incr;
+               addrstart += current_cpu_data.dcache.way_incr;
        } while (--ways);
 }
 
@@ -70,7 +71,7 @@ void flush_icache_range(unsigned long start, unsigned long end)
 /*
  * Writeback&Invalidate the D-cache of the page
  */
-static void __flush_dcache_page(unsigned long phys)
+static void __uses_jump_to_uncached __flush_dcache_page(unsigned long phys)
 {
        unsigned long ways, waysize, addrstart;
        unsigned long flags;
@@ -91,11 +92,11 @@ static void __flush_dcache_page(unsigned long phys)
         * possible.
         */
        local_irq_save(flags);
-       jump_to_P2();
+       jump_to_uncached();
 
-       ways = cpu_data->dcache.ways;
-       waysize = cpu_data->dcache.sets;
-       waysize <<= cpu_data->dcache.entry_shift;
+       ways = current_cpu_data.dcache.ways;
+       waysize = current_cpu_data.dcache.sets;
+       waysize <<= current_cpu_data.dcache.entry_shift;
 
        addrstart = CACHE_OC_ADDRESS_ARRAY;
 
@@ -104,7 +105,7 @@ static void __flush_dcache_page(unsigned long phys)
 
                for (addr = addrstart;
                     addr < addrstart + waysize;
-                    addr += cpu_data->dcache.linesz) {
+                    addr += current_cpu_data.dcache.linesz) {
                        unsigned long data;
 
                        data = ctrl_inl(addr) & (0x1ffffC00 | SH_CACHE_VALID);
@@ -114,10 +115,10 @@ static void __flush_dcache_page(unsigned long phys)
                        }
                }
 
-               addrstart += cpu_data->dcache.way_incr;
+               addrstart += current_cpu_data.dcache.way_incr;
        } while (--ways);
 
-       back_to_P1();
+       back_to_cached();
        local_irq_restore(flags);
 }
 
@@ -127,23 +128,19 @@ static void __flush_dcache_page(unsigned long phys)
  */
 void flush_dcache_page(struct page *page)
 {
-       struct address_space *mapping = page_mapping(page);
-
-       if (mapping && !mapping_mapped(mapping))
-               set_bit(PG_dcache_dirty, &page->flags);
-       else
+       if (test_bit(PG_mapped, &page->flags))
                __flush_dcache_page(PHYSADDR(page_address(page)));
 }
 
-void flush_cache_all(void)
+void __uses_jump_to_uncached flush_cache_all(void)
 {
        unsigned long flags;
 
        local_irq_save(flags);
-       jump_to_P2();
+       jump_to_uncached();
 
        cache_wback_all();
-       back_to_P1();
+       back_to_cached();
        local_irq_restore(flags);
 }