30 Nov, 2008

3 commits

  • This avoids confusion with platform specific DMA implementations in
    mach/dma.h

    Signed-off-by: Russell King

    Russell King
     
  • When ISA_DMA_API is unset, we're not implementing the ISA DMA API,
    so there's no point in publishing the prototypes via asm/dma.h, nor
    including the machine dependent parts of that API.

    This allows us to remove a lot of mach/dma.h files which don't contain
    any useful code. Unfortunately though, some platforms put their own
    private non-ISA definitions into mach/dma.h, so we leave these behind
    and fix the appropriate #include statments.

    Signed-off-by: Russell King

    Russell King
     
  • Since 8d5796d2ec6b5a4e7a52861144e63af438d6f8f7, we have allowed
    PAGE_OFFSET to be configurable, so a constant virtual address
    for MAX_DMA_ADDRESS is buggy. It should be defined in terms of
    PAGE_OFFSET rather than a constant virtual address.

    Signed-off-by: Russell King

    Russell King
     

29 Nov, 2008

19 commits


28 Nov, 2008

15 commits

  • Remove __arch_base_xxx() and __ioaddrc() macros; they're obsolete and
    unused.

    Signed-off-by: Russell King

    Russell King
     
  • These definitions are unused and serve no purpose with genirq.

    Signed-off-by: Russell King

    Russell King
     
  • Conflicts:

    arch/arm/mach-clps7500/include/mach/memory.h

    Russell King
     
  • Let's provide an overridable default instead of having every machine
    class define __virt_to_bus and __bus_to_virt to the same thing. What
    most platforms are using is bus_addr == phys_addr so such is the default.

    One exception is ebsa110 which has no DMA what so ever, so the actual
    definition is not important except only for proper compilation. Also
    added a comment about the special footbridge bus translation.

    Let's also remove comments alluding to set_dma_addr which is not
    (and should not) be commonly used.

    Signed-off-by: Nicolas Pitre
    Signed-off-by: Russell King

    Nicolas Pitre
     
  • There is no machine class overriding this. If non linear translations
    are implemented again for some machines then this could be restored at
    that time.

    Signed-off-by: Nicolas Pitre
    Signed-off-by: Russell King

    Nicolas Pitre
     
  • The restriction on !CONFIG_HIGHMEM is unneeded since page tables are
    currently never allocated with highmem pages, and actually disable PTE
    dump whenever highmem is configured. Let's have a dynamic test to better
    describe the current limitation instead.

    Signed-off-by: Nicolas Pitre
    Signed-off-by: Russell King

    Nicolas Pitre
     
  • Commit 8d5796d2ec6b5a4e7a52861144e63af438d6f8f7 allows for the vmalloc
    area to be resized from the kernel cmdline. Make sure it cannot overlap
    with RAM entirely.

    Signed-off-by: Nicolas Pitre
    Signed-off-by: Russell King

    Nicolas Pitre
     
  • Make free_area() arguments pfn based, and return number of freed pages.
    This will simplify highmem initialization later.

    Also, codepages, datapages and initpages are actually codesize, datasize
    and initsize.

    Signed-off-by: Nicolas Pitre
    Signed-off-by: Russell King

    Nicolas Pitre
     
  • Doing so will greatly simplify the bootmem initialization code as each
    bank is therefore entirely lowmem or highmem with no crossing between
    those zones.

    Signed-off-by: Nicolas Pitre
    Signed-off-by: Russell King

    Nicolas Pitre
     
  • Currently there are two instances of struct meminfo: one in
    kernel/setup.c marked __initdata, and another in mm/init.c with
    permanent storage. Let's keep only the later to directly populate
    the permanent version from arm_add_memory().

    Also move common validation tests between the MMU and non-MMU cases
    into arm_add_memory() to remove some duplication. Protection against
    overflowing the membank array is also moved in there in order to cover
    the kernel cmdline parsing path as well.

    Signed-off-by: Nicolas Pitre
    Signed-off-by: Russell King

    Nicolas Pitre
     
  • In all cases the kaddr is assigned an input register even though it is
    modified in the assembly code. Let's assign a new variable to the
    modified value and mark those inline asm with volatile otherwise they
    get optimized away because the output variable is otherwise not used.

    Also fix a few conversion errors in copypage-feroceon.c and
    copypage-v4mc.c.

    Signed-off-by: Nicolas Pitre
    Signed-off-by: Russell King

    Nicolas Pitre
     
  • For similar reasons as copy_user_page(), we want to avoid the
    additional kmap_atomic if it's unnecessary.

    Signed-off-by: Russell King

    Russell King
     
  • 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: Russell King

    Russell King
     
  • Signed-off-by: Russell King

    Russell King
     
  • 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: Hugh Dickins
    Acked-by: James Bottomley
    Acked-by: Paul Mundt
    Signed-off-by: Russell King

    Russell King
     

27 Nov, 2008

3 commits