1. 01 Oct, 2006 2 commits
    • Haavard Skinnemoen's avatar
      [PATCH] Generic ioremap_page_range: flush_cache_vmap · db71daab
      Haavard Skinnemoen authored
      
      
      The existing implementation of ioremap_page_range(), which was taken
      from i386, does this:
      
      	flush_cache_all();
      	/* modify page tables */
      	flush_tlb_all();
      
      I think this is a bit defensive, so this patch changes the generic
      implementation to do:
      
      	/* modify page tables */
      	flush_cache_vmap(start, end);
      
      instead, which is similar to what vmalloc() does. This should still
      be correct because we never modify existing PTEs. According to
      James Bottomley:
      
      The problem the flush_tlb_all() is trying to solve is to avoid stale tlb
      entries in the ioremap area.  We're just being conservative by flushing
      on both map and unmap.  Technically what vmalloc/vfree does (only flush
      the tlb on unmap) is just fine because it means that the only tlb
      entries in the remap area must belong to in-use mappings.
      Signed-off-by: default avatarHaavard Skinnemoen <hskinnemoen@atmel.com>
      Cc: Richard Henderson <rth@twiddle.net>
      Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
      Cc: Russell King <rmk@arm.linux.org.uk>
      Cc: Mikael Starvik <starvik@axis.com>
      Cc: Andi Kleen <ak@suse.de>
      Cc: <linux-m32r@ml.linux-m32r.org>
      Cc: Ralf Baechle <ralf@linux-mips.org>
      Cc: Kyle McMartin <kyle@parisc-linux.org>
      Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
      Cc: Paul Mundt <lethal@linux-sh.org>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      db71daab
    • Haavard Skinnemoen's avatar
      [PATCH] Generic ioremap_page_range: implementation · 74588d8b
      Haavard Skinnemoen authored
      
      
      This patch adds a generic implementation of ioremap_page_range() in
      lib/ioremap.c based on the i386 implementation. It differs from the
      i386 version in the following ways:
      
        * The PTE flags are passed as a pgprot_t argument and must be
          determined up front by the arch-specific code. No additional
          PTE flags are added.
        * Uses set_pte_at() instead of set_pte()
      
      [bunk@stusta.de: warning fix]
      ]dhowells@redhat.com: nommu build fix]
      Signed-off-by: default avatarHaavard Skinnemoen <hskinnemoen@atmel.com>
      Cc: Richard Henderson <rth@twiddle.net>
      Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
      Cc: Russell King <rmk@arm.linux.org.uk>
      Cc: Mikael Starvik <starvik@axis.com>
      Cc: Andi Kleen <ak@suse.de>
      Cc: <linux-m32r@ml.linux-m32r.org>
      Cc: Ralf Baechle <ralf@linux-mips.org>
      Cc: Kyle McMartin <kyle@parisc-linux.org>
      Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
      Cc: Paul Mundt <lethal@linux-sh.org>
      Signed-off-by: default avatarAdrian Bunk <bunk@stusta.de>
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      74588d8b