aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Wilson <wilsons@start.ca>2011-03-13 15:49:16 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2011-03-23 16:36:54 -0400
commit83b964bbf82eb13a8f31bb49ca420787fe01f7a6 (patch)
treec94dcf5f4116ca351570fb9d2b7e37834e93f430
parent31db58b3ab432f72ea76be58b12e6ffaf627d5db (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.c2
-rw-r--r--arch/s390/kernel/vdso.c2
-rw-r--r--arch/sh/kernel/vsyscall/vsyscall.c2
-rw-r--r--arch/x86/mm/init_64.c4
-rw-r--r--arch/x86/vdso/vdso32-setup.c4
-rw-r--r--include/linux/mm.h4
-rw-r--r--mm/memory.c2
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
828int in_gate_area(struct task_struct *task, unsigned long addr) 828int 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
345int in_gate_area(struct task_struct *task, unsigned long addr) 345int 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
102int in_gate_area(struct task_struct *task, unsigned long address) 102int 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
873int in_gate_area(struct task_struct *task, unsigned long addr) 873int 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
431int in_gate_area(struct task_struct *task, unsigned long addr) 431int 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; }
1581extern struct vm_area_struct *get_gate_vma(struct mm_struct *mm); 1581extern struct vm_area_struct *get_gate_vma(struct mm_struct *mm);
1582#ifdef __HAVE_ARCH_GATE_AREA 1582#ifdef __HAVE_ARCH_GATE_AREA
1583int in_gate_area_no_task(unsigned long addr); 1583int in_gate_area_no_task(unsigned long addr);
1584int in_gate_area(struct task_struct *task, unsigned long addr); 1584int in_gate_area(struct mm_struct *mm, unsigned long addr);
1585#else 1585#else
1586int in_gate_area_no_task(unsigned long addr); 1586int 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
1590int drop_caches_sysctl_handler(struct ctl_table *, int, 1590int 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;