lkml.org 
[lkml]   [2006]   [Aug]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4/14] Generic ioremap_page_range: arm conversion
    Date
    From: Russell King <rmk@arm.linux.org.uk>

    Convert ARM to use generic ioremap_page_range()

    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
    ---
    arch/arm/mm/ioremap.c | 95 +++----------------------------------------------
    1 files changed, 5 insertions(+), 90 deletions(-)

    diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c
    index 88a999d..942a1ee 100644
    --- a/arch/arm/mm/ioremap.c
    +++ b/arch/arm/mm/ioremap.c
    @@ -22,11 +22,11 @@
    */
    #include <linux/module.h>
    #include <linux/errno.h>
    +#include <linux/io.h>
    #include <linux/mm.h>
    #include <linux/vmalloc.h>

    #include <asm/cacheflush.h>
    -#include <asm/io.h>
    #include <asm/mmu_context.h>
    #include <asm/pgalloc.h>
    #include <asm/tlbflush.h>
    @@ -38,94 +38,6 @@ #include <asm/sizes.h>
    */
    #define VM_ARM_SECTION_MAPPING 0x80000000

    -static inline void
    -remap_area_pte(pte_t * pte, unsigned long address, unsigned long size,
    - unsigned long phys_addr, pgprot_t pgprot)
    -{
    - unsigned long end;
    -
    - address &= ~PMD_MASK;
    - end = address + size;
    - if (end > PMD_SIZE)
    - end = PMD_SIZE;
    - BUG_ON(address >= end);
    - do {
    - if (!pte_none(*pte))
    - goto bad;
    -
    - set_pte(pte, pfn_pte(phys_addr >> PAGE_SHIFT, pgprot));
    - address += PAGE_SIZE;
    - phys_addr += PAGE_SIZE;
    - pte++;
    - } while (address && (address < end));
    - return;
    -
    - bad:
    - printk("remap_area_pte: page already exists\n");
    - BUG();
    -}
    -
    -static inline int
    -remap_area_pmd(pmd_t * pmd, unsigned long address, unsigned long size,
    - unsigned long phys_addr, unsigned long flags)
    -{
    - unsigned long end;
    - pgprot_t pgprot;
    -
    - address &= ~PGDIR_MASK;
    - end = address + size;
    -
    - if (end > PGDIR_SIZE)
    - end = PGDIR_SIZE;
    -
    - phys_addr -= address;
    - BUG_ON(address >= end);
    -
    - pgprot = __pgprot(L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY | L_PTE_WRITE | flags);
    - do {
    - pte_t * pte = pte_alloc_kernel(pmd, address);
    - if (!pte)
    - return -ENOMEM;
    - remap_area_pte(pte, address, end - address, address + phys_addr, pgprot);
    - address = (address + PMD_SIZE) & PMD_MASK;
    - pmd++;
    - } while (address && (address < end));
    - return 0;
    -}
    -
    -static int
    -remap_area_pages(unsigned long start, unsigned long pfn,
    - unsigned long size, unsigned long flags)
    -{
    - unsigned long address = start;
    - unsigned long end = start + size;
    - unsigned long phys_addr = __pfn_to_phys(pfn);
    - int err = 0;
    - pgd_t * dir;
    -
    - phys_addr -= address;
    - dir = pgd_offset(&init_mm, address);
    - BUG_ON(address >= end);
    - do {
    - pmd_t *pmd = pmd_alloc(&init_mm, dir, address);
    - if (!pmd) {
    - err = -ENOMEM;
    - break;
    - }
    - if (remap_area_pmd(pmd, address, end - address,
    - phys_addr + address, flags)) {
    - err = -ENOMEM;
    - break;
    - }
    -
    - address = (address + PGDIR_SIZE) & PGDIR_MASK;
    - dir++;
    - } while (address && (address < end));
    -
    - return err;
    -}
    -
    -
    void __check_kvm_seq(struct mm_struct *mm)
    {
    unsigned int seq;
    @@ -326,7 +238,10 @@ #ifndef CONFIG_SMP
    err = remap_area_sections(addr, pfn, size, flags);
    } else
    #endif
    - err = remap_area_pages(addr, pfn, size, flags);
    + err = ioremap_page_range(addr, addr + size, pfn << PAGE_SHIFT,
    + __pgprot(L_PTE_PRESENT | L_PTE_YOUNG
    + | L_PTE_DIRTY | L_PTE_WRITE
    + | flags));

    if (err) {
    vunmap((void *)addr);
    --
    1.4.0
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-08-10 18:13    [W:0.026 / U:3.636 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site