diff options
author | Stephen Wilson <wilsons@start.ca> | 2011-03-13 15:49:16 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2011-03-23 16:36:54 -0400 |
commit | 83b964bbf82eb13a8f31bb49ca420787fe01f7a6 (patch) | |
tree | c94dcf5f4116ca351570fb9d2b7e37834e93f430 | |
parent | 31db58b3ab432f72ea76be58b12e6ffaf627d5db (diff) |
mm: arch: make in_gate_area take an mm_struct instead of a task_struct
Morally, the question of whether an address lies in a gate vma should be asked
with respect to an mm, not a particular task. Moreover, dropping the dependency
on task_struct will help make existing and future operations on mm's more
flexible and convenient.
Signed-off-by: Stephen Wilson <wilsons@start.ca>
Reviewed-by: Michel Lespinasse <walken@google.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r-- | arch/powerpc/kernel/vdso.c | 2 | ||||
-rw-r--r-- | arch/s390/kernel/vdso.c | 2 | ||||
-rw-r--r-- | arch/sh/kernel/vsyscall/vsyscall.c | 2 | ||||
-rw-r--r-- | arch/x86/mm/init_64.c | 4 | ||||
-rw-r--r-- | arch/x86/vdso/vdso32-setup.c | 4 | ||||
-rw-r--r-- | include/linux/mm.h | 4 | ||||
-rw-r--r-- | mm/memory.c | 2 |
7 files changed, 10 insertions, 10 deletions
diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c index 6169f1756930..467aa9ecbf9d 100644 --- a/arch/powerpc/kernel/vdso.c +++ b/arch/powerpc/kernel/vdso.c | |||
@@ -825,7 +825,7 @@ int in_gate_area_no_task(unsigned long addr) | |||
825 | return 0; | 825 | return 0; |
826 | } | 826 | } |
827 | 827 | ||
828 | int in_gate_area(struct task_struct *task, unsigned long addr) | 828 | int in_gate_area(struct mm_struct *mm, unsigned long addr) |
829 | { | 829 | { |
830 | return 0; | 830 | return 0; |
831 | } | 831 | } |
diff --git a/arch/s390/kernel/vdso.c b/arch/s390/kernel/vdso.c index d19f30504c63..9006e966ef00 100644 --- a/arch/s390/kernel/vdso.c +++ b/arch/s390/kernel/vdso.c | |||
@@ -342,7 +342,7 @@ int in_gate_area_no_task(unsigned long addr) | |||
342 | return 0; | 342 | return 0; |
343 | } | 343 | } |
344 | 344 | ||
345 | int in_gate_area(struct task_struct *task, unsigned long addr) | 345 | int in_gate_area(struct mm_struct *mm, unsigned long addr) |
346 | { | 346 | { |
347 | return 0; | 347 | return 0; |
348 | } | 348 | } |
diff --git a/arch/sh/kernel/vsyscall/vsyscall.c b/arch/sh/kernel/vsyscall/vsyscall.c index 3f9b6f41813a..62c36a8961d3 100644 --- a/arch/sh/kernel/vsyscall/vsyscall.c +++ b/arch/sh/kernel/vsyscall/vsyscall.c | |||
@@ -99,7 +99,7 @@ struct vm_area_struct *get_gate_vma(struct mm_struct *mm) | |||
99 | return NULL; | 99 | return NULL; |
100 | } | 100 | } |
101 | 101 | ||
102 | int in_gate_area(struct task_struct *task, unsigned long address) | 102 | int in_gate_area(struct mm_struct *mm, unsigned long address) |
103 | { | 103 | { |
104 | return 0; | 104 | return 0; |
105 | } | 105 | } |
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index dd4809b58441..43c441622c89 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c | |||
@@ -870,9 +870,9 @@ struct vm_area_struct *get_gate_vma(struct mm_struct *mm) | |||
870 | return &gate_vma; | 870 | return &gate_vma; |
871 | } | 871 | } |
872 | 872 | ||
873 | int in_gate_area(struct task_struct *task, unsigned long addr) | 873 | int in_gate_area(struct mm_struct *mm, unsigned long addr) |
874 | { | 874 | { |
875 | struct vm_area_struct *vma = get_gate_vma(task->mm); | 875 | struct vm_area_struct *vma = get_gate_vma(mm); |
876 | 876 | ||
877 | if (!vma) | 877 | if (!vma) |
878 | return 0; | 878 | return 0; |
diff --git a/arch/x86/vdso/vdso32-setup.c b/arch/x86/vdso/vdso32-setup.c index 1f651f6bdf61..f849bb29fda1 100644 --- a/arch/x86/vdso/vdso32-setup.c +++ b/arch/x86/vdso/vdso32-setup.c | |||
@@ -428,9 +428,9 @@ struct vm_area_struct *get_gate_vma(struct mm_struct *mm) | |||
428 | return NULL; | 428 | return NULL; |
429 | } | 429 | } |
430 | 430 | ||
431 | int in_gate_area(struct task_struct *task, unsigned long addr) | 431 | int in_gate_area(struct mm_struct *mm, unsigned long addr) |
432 | { | 432 | { |
433 | const struct vm_area_struct *vma = get_gate_vma(task->mm); | 433 | const struct vm_area_struct *vma = get_gate_vma(mm); |
434 | 434 | ||
435 | return vma && addr >= vma->vm_start && addr < vma->vm_end; | 435 | return vma && addr >= vma->vm_start && addr < vma->vm_end; |
436 | } | 436 | } |
diff --git a/include/linux/mm.h b/include/linux/mm.h index 18b4a6358ab4..5c6d916cd302 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -1581,10 +1581,10 @@ static inline bool kernel_page_present(struct page *page) { return true; } | |||
1581 | extern struct vm_area_struct *get_gate_vma(struct mm_struct *mm); | 1581 | extern struct vm_area_struct *get_gate_vma(struct mm_struct *mm); |
1582 | #ifdef __HAVE_ARCH_GATE_AREA | 1582 | #ifdef __HAVE_ARCH_GATE_AREA |
1583 | int in_gate_area_no_task(unsigned long addr); | 1583 | int in_gate_area_no_task(unsigned long addr); |
1584 | int in_gate_area(struct task_struct *task, unsigned long addr); | 1584 | int in_gate_area(struct mm_struct *mm, unsigned long addr); |
1585 | #else | 1585 | #else |
1586 | int in_gate_area_no_task(unsigned long addr); | 1586 | int in_gate_area_no_task(unsigned long addr); |
1587 | #define in_gate_area(task, addr) ({(void)task; in_gate_area_no_task(addr);}) | 1587 | #define in_gate_area(mm, addr) ({(void)mm; in_gate_area_no_task(addr);}) |
1588 | #endif /* __HAVE_ARCH_GATE_AREA */ | 1588 | #endif /* __HAVE_ARCH_GATE_AREA */ |
1589 | 1589 | ||
1590 | int drop_caches_sysctl_handler(struct ctl_table *, int, | 1590 | int drop_caches_sysctl_handler(struct ctl_table *, int, |
diff --git a/mm/memory.c b/mm/memory.c index b6dc37097433..931d479b80c2 100644 --- a/mm/memory.c +++ b/mm/memory.c | |||
@@ -1486,7 +1486,7 @@ int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, | |||
1486 | struct vm_area_struct *vma; | 1486 | struct vm_area_struct *vma; |
1487 | 1487 | ||
1488 | vma = find_extend_vma(mm, start); | 1488 | vma = find_extend_vma(mm, start); |
1489 | if (!vma && in_gate_area(tsk, start)) { | 1489 | if (!vma && in_gate_area(tsk->mm, start)) { |
1490 | unsigned long pg = start & PAGE_MASK; | 1490 | unsigned long pg = start & PAGE_MASK; |
1491 | struct vm_area_struct *gate_vma = get_gate_vma(tsk->mm); | 1491 | struct vm_area_struct *gate_vma = get_gate_vma(tsk->mm); |
1492 | pgd_t *pgd; | 1492 | pgd_t *pgd; |