git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
b43: Fix a typo in the sync_stx routine
[safe/jmp/linux-2.6]
/
mm
/
memory.c
diff --git
a/mm/memory.c
b/mm/memory.c
index
50da951
..
aede2ce
100644
(file)
--- a/
mm/memory.c
+++ b/
mm/memory.c
@@
-135,11
+135,12
@@
void pmd_clear_bad(pmd_t *pmd)
* Note: this doesn't free the actual pages themselves. That
* has been handled earlier when unmapping all the memory regions.
*/
* Note: this doesn't free the actual pages themselves. That
* has been handled earlier when unmapping all the memory regions.
*/
-static void free_pte_range(struct mmu_gather *tlb, pmd_t *pmd)
+static void free_pte_range(struct mmu_gather *tlb, pmd_t *pmd,
+ unsigned long addr)
{
pgtable_t token = pmd_pgtable(*pmd);
pmd_clear(pmd);
{
pgtable_t token = pmd_pgtable(*pmd);
pmd_clear(pmd);
- pte_free_tlb(tlb, token);
+ pte_free_tlb(tlb, token
, addr
);
tlb->mm->nr_ptes--;
}
tlb->mm->nr_ptes--;
}
@@
-157,7
+158,7
@@
static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud,
next = pmd_addr_end(addr, end);
if (pmd_none_or_clear_bad(pmd))
continue;
next = pmd_addr_end(addr, end);
if (pmd_none_or_clear_bad(pmd))
continue;
- free_pte_range(tlb, pmd);
+ free_pte_range(tlb, pmd
, addr
);
} while (pmd++, addr = next, addr != end);
start &= PUD_MASK;
} while (pmd++, addr = next, addr != end);
start &= PUD_MASK;
@@
-173,7
+174,7
@@
static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud,
pmd = pmd_offset(pud, start);
pud_clear(pud);
pmd = pmd_offset(pud, start);
pud_clear(pud);
- pmd_free_tlb(tlb, pmd);
+ pmd_free_tlb(tlb, pmd
, start
);
}
static inline void free_pud_range(struct mmu_gather *tlb, pgd_t *pgd,
}
static inline void free_pud_range(struct mmu_gather *tlb, pgd_t *pgd,
@@
-206,7
+207,7
@@
static inline void free_pud_range(struct mmu_gather *tlb, pgd_t *pgd,
pud = pud_offset(pgd, start);
pgd_clear(pgd);
pud = pud_offset(pgd, start);
pgd_clear(pgd);
- pud_free_tlb(tlb, pud);
+ pud_free_tlb(tlb, pud
, start
);
}
/*
}
/*
@@
-1207,8
+1208,8
@@
static inline int use_zero_page(struct vm_area_struct *vma)
int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
- unsigned long start, int
len
, int flags,
- struct page **pages, struct vm_area_struct **vmas)
+ unsigned long start, int
nr_pages
, int flags,
+
struct page **pages, struct vm_area_struct **vmas)
{
int i;
unsigned int vm_flags = 0;
{
int i;
unsigned int vm_flags = 0;
@@
-1217,7
+1218,7
@@
int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
int ignore = !!(flags & GUP_FLAGS_IGNORE_VMA_PERMISSIONS);
int ignore_sigkill = !!(flags & GUP_FLAGS_IGNORE_SIGKILL);
int ignore = !!(flags & GUP_FLAGS_IGNORE_VMA_PERMISSIONS);
int ignore_sigkill = !!(flags & GUP_FLAGS_IGNORE_SIGKILL);
- if (
len
<= 0)
+ if (
nr_pages
<= 0)
return 0;
/*
* Require read or write permissions.
return 0;
/*
* Require read or write permissions.
@@
-1269,7
+1270,7
@@
int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
vmas[i] = gate_vma;
i++;
start += PAGE_SIZE;
vmas[i] = gate_vma;
i++;
start += PAGE_SIZE;
-
len
--;
+
nr_pages
--;
continue;
}
continue;
}
@@
-1280,7
+1281,7
@@
int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
if (is_vm_hugetlb_page(vma)) {
i = follow_hugetlb_page(mm, vma, pages, vmas,
if (is_vm_hugetlb_page(vma)) {
i = follow_hugetlb_page(mm, vma, pages, vmas,
- &start, &
len
, i, write);
+ &start, &
nr_pages
, i, write);
continue;
}
continue;
}
@@
-1357,9
+1358,9
@@
int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
vmas[i] = vma;
i++;
start += PAGE_SIZE;
vmas[i] = vma;
i++;
start += PAGE_SIZE;
-
len
--;
- } while (
len
&& start < vma->vm_end);
- } while (
len
);
+
nr_pages
--;
+ } while (
nr_pages
&& start < vma->vm_end);
+ } while (
nr_pages
);
return i;
}
return i;
}
@@
-1368,7
+1369,7
@@
int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
* @tsk: task_struct of target task
* @mm: mm_struct of target mm
* @start: starting user address
* @tsk: task_struct of target task
* @mm: mm_struct of target mm
* @start: starting user address
- * @
len:
number of pages from start to pin
+ * @
nr_pages:
number of pages from start to pin
* @write: whether pages will be written to by the caller
* @force: whether to force write access even if user mapping is
* readonly. This will result in the page being COWed even
* @write: whether pages will be written to by the caller
* @force: whether to force write access even if user mapping is
* readonly. This will result in the page being COWed even
@@
-1380,7
+1381,7
@@
int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
* Or NULL if the caller does not require them.
*
* Returns number of pages pinned. This may be fewer than the number
* Or NULL if the caller does not require them.
*
* Returns number of pages pinned. This may be fewer than the number
- * requested. If
len
is 0 or negative, returns 0. If no pages
+ * requested. If
nr_pages
is 0 or negative, returns 0. If no pages
* were pinned, returns -errno. Each page returned must be released
* with a put_page() call when it is finished with. vmas will only
* remain valid while mmap_sem is held.
* were pinned, returns -errno. Each page returned must be released
* with a put_page() call when it is finished with. vmas will only
* remain valid while mmap_sem is held.
@@
-1414,7
+1415,7
@@
int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
* See also get_user_pages_fast, for performance critical applications.
*/
int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
* See also get_user_pages_fast, for performance critical applications.
*/
int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
- unsigned long start, int
len
, int write, int force,
+ unsigned long start, int
nr_pages
, int write, int force,
struct page **pages, struct vm_area_struct **vmas)
{
int flags = 0;
struct page **pages, struct vm_area_struct **vmas)
{
int flags = 0;
@@
-1424,9
+1425,7
@@
int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
if (force)
flags |= GUP_FLAGS_FORCE;
if (force)
flags |= GUP_FLAGS_FORCE;
- return __get_user_pages(tsk, mm,
- start, len, flags,
- pages, vmas);
+ return __get_user_pages(tsk, mm, start, nr_pages, flags, pages, vmas);
}
EXPORT_SYMBOL(get_user_pages);
}
EXPORT_SYMBOL(get_user_pages);
@@
-2519,7
+2518,7
@@
static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma,
delayacct_set_flag(DELAYACCT_PF_SWAPIN);
page = lookup_swap_cache(entry);
if (!page) {
delayacct_set_flag(DELAYACCT_PF_SWAPIN);
page = lookup_swap_cache(entry);
if (!page) {
- grab_swap_token(); /* Contend for token _before_ read-in */
+ grab_swap_token(
mm
); /* Contend for token _before_ read-in */
page = swapin_readahead(entry,
GFP_HIGHUSER_MOVABLE, vma, address);
if (!page) {
page = swapin_readahead(entry,
GFP_HIGHUSER_MOVABLE, vma, address);
if (!page) {