aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
authorWilliam Lee Irwin III <wli@holomorphy.com>2004-10-19 18:28:00 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-10-19 18:28:00 -0700
commitc363ca85e1d786d4f593fd8b224756e42c756b19 (patch)
tree3717863aec308aac441b5972052508818a1e3a15 /mm
parentdd14459e10e4b660a7f2fa6585381a674061e887 (diff)
downloadhistory-c363ca85e1d786d4f593fd8b224756e42c756b19.tar.gz
[PATCH] vm: introduce remap_pfn_range() to replace remap_page_range()
This patch introduces remap_pfn_range(), destined to replace remap_page_range(), to which all callers of remap_page_range() are converted in the sequel. Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'mm')
-rw-r--r--mm/memory.c19
-rw-r--r--mm/nommu.c2
2 files changed, 9 insertions, 12 deletions
diff --git a/mm/memory.c b/mm/memory.c
index c43881bbd00d28..556ed18f7f2ea4 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -918,16 +918,14 @@ int zeromap_page_range(struct vm_area_struct *vma, unsigned long address, unsign
* in null mappings (currently treated as "copy-on-access")
*/
static inline void remap_pte_range(pte_t * pte, unsigned long address, unsigned long size,
- unsigned long phys_addr, pgprot_t prot)
+ unsigned long pfn, pgprot_t prot)
{
unsigned long end;
- unsigned long pfn;
address &= ~PMD_MASK;
end = address + size;
if (end > PMD_SIZE)
end = PMD_SIZE;
- pfn = phys_addr >> PAGE_SHIFT;
do {
BUG_ON(!pte_none(*pte));
if (!pfn_valid(pfn) || PageReserved(pfn_to_page(pfn)))
@@ -939,7 +937,7 @@ static inline void remap_pte_range(pte_t * pte, unsigned long address, unsigned
}
static inline int remap_pmd_range(struct mm_struct *mm, pmd_t * pmd, unsigned long address, unsigned long size,
- unsigned long phys_addr, pgprot_t prot)
+ unsigned long pfn, pgprot_t prot)
{
unsigned long base, end;
@@ -948,12 +946,12 @@ static inline int remap_pmd_range(struct mm_struct *mm, pmd_t * pmd, unsigned lo
end = address + size;
if (end > PGDIR_SIZE)
end = PGDIR_SIZE;
- phys_addr -= address;
+ pfn -= address >> PAGE_SHIFT;
do {
pte_t * pte = pte_alloc_map(mm, pmd, base + address);
if (!pte)
return -ENOMEM;
- remap_pte_range(pte, base + address, end - address, address + phys_addr, prot);
+ remap_pte_range(pte, base + address, end - address, pfn + (address >> PAGE_SHIFT), prot);
pte_unmap(pte);
address = (address + PMD_SIZE) & PMD_MASK;
pmd++;
@@ -962,7 +960,7 @@ static inline int remap_pmd_range(struct mm_struct *mm, pmd_t * pmd, unsigned lo
}
/* Note: this is only safe if the mm semaphore is held when called. */
-int remap_page_range(struct vm_area_struct *vma, unsigned long from, unsigned long phys_addr, unsigned long size, pgprot_t prot)
+int remap_pfn_range(struct vm_area_struct *vma, unsigned long from, unsigned long pfn, unsigned long size, pgprot_t prot)
{
int error = 0;
pgd_t * dir;
@@ -970,7 +968,7 @@ int remap_page_range(struct vm_area_struct *vma, unsigned long from, unsigned lo
unsigned long end = from + size;
struct mm_struct *mm = vma->vm_mm;
- phys_addr -= from;
+ pfn -= from >> PAGE_SHIFT;
dir = pgd_offset(mm, from);
flush_cache_range(vma, beg, end);
if (from >= end)
@@ -982,7 +980,7 @@ int remap_page_range(struct vm_area_struct *vma, unsigned long from, unsigned lo
error = -ENOMEM;
if (!pmd)
break;
- error = remap_pmd_range(mm, pmd, from, end - from, phys_addr + from, prot);
+ error = remap_pmd_range(mm, pmd, from, end - from, pfn + (from >> PAGE_SHIFT), prot);
if (error)
break;
from = (from + PGDIR_SIZE) & PGDIR_MASK;
@@ -995,8 +993,7 @@ int remap_page_range(struct vm_area_struct *vma, unsigned long from, unsigned lo
spin_unlock(&mm->page_table_lock);
return error;
}
-
-EXPORT_SYMBOL(remap_page_range);
+EXPORT_SYMBOL(remap_pfn_range);
/*
* Do pte_mkwrite, but only if the vma says VM_WRITE. We do this when
diff --git a/mm/nommu.c b/mm/nommu.c
index 68e6b32dea6a64..f749f023e565b6 100644
--- a/mm/nommu.c
+++ b/mm/nommu.c
@@ -560,7 +560,7 @@ struct vm_area_struct *find_extend_vma(struct mm_struct *mm, unsigned long addr)
return NULL;
}
-int remap_page_range(struct vm_area_struct *vma, unsigned long from,
+int remap_pfn_range(struct vm_area_struct *vma, unsigned long from,
unsigned long to, unsigned long size, pgprot_t prot)
{
return -EPERM;