1. 29 Nov, 2008 7 commits
  2. 28 Nov, 2008 29 commits
  3. 27 Nov, 2008 4 commits
    • Russell King's avatar
      [ARM] clearpage: provide our own clear_user_highpage() · 303c6443
      Russell King authored
      For similar reasons as copy_user_page(), we want to avoid the
      additional kmap_atomic if it's unnecessary.
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      303c6443
    • Russell King's avatar
      [ARM] copypage: provide our own copy_user_highpage() · 063b0a42
      Russell King authored
      We used to override the copy_user_page() function.  However, this
      is not only inefficient, it also causes additional complexity for
      highmem support, since we convert from a struct page to a kernel
      direct mapped address and back to a struct page again.
      
      Moreover, with highmem support, we end up pointlessly setting up
      kmap entries for pages which we're going to remap.  So, push the
      kmapping down into the copypage implementation files where it's
      required.
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      063b0a42
    • Russell King's avatar
      d73e60b7
    • Russell King's avatar
      Allow architectures to override copy_user_highpage() · 487ff320
      Russell King authored
      With aliasing VIPT cache support, the ARM implementation of
      clear_user_page() and copy_user_page() sets up a temporary kernel space
      mapping such that we have the same cache colour as the userspace page.
      This avoids having to consider any userspace aliases from this operation.
      
      However, when highmem is enabled, kmap_atomic() have to setup mappings.
      The copy_user_highpage() and clear_user_highpage() call these functions
      before delegating the copies to copy_user_page() and clear_user_page().
      
      The effect of this is that each of the *_user_highpage() functions setup
      their own kmap mapping, followed by the *_user_page() functions setting
      up another mapping.  This is rather wasteful.
      
      Thankfully, copy_user_highpage() can be overriden by architectures by
      defining __HAVE_ARCH_COPY_USER_HIGHPAGE.  However, replacement of
      clear_user_highpage() is more difficult because its inline definition
      is not conditional.  It seems that you're expected to define
      __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE and provide a replacement
      __alloc_zeroed_user_highpage() implementation instead.
      
      The allocation itself is fine, so we don't want to override that.  What
      we really want to do is to override clear_user_highpage() with our own
      version which doesn't kmap_atomic() unnecessarily.
      
      Other VIPT architectures (PARISC and SH) would also like to override
      this function as well.
      Acked-by: default avatarHugh Dickins <hugh@veritas.com>
      Acked-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
      Acked-by: default avatarPaul Mundt <lethal@linux-sh.org>
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      487ff320