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>
This commit is contained in:
		
					parent
					
						
							
								31db58b3ab
							
						
					
				
			
			
				commit
				
					
						83b964bbf8
					
				
			
		
					 7 changed files with 10 additions and 10 deletions
				
			
		|  | @ -825,7 +825,7 @@ int in_gate_area_no_task(unsigned long addr) | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int in_gate_area(struct task_struct *task, unsigned long addr) | int in_gate_area(struct mm_struct *mm, unsigned long addr) | ||||||
| { | { | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -342,7 +342,7 @@ int in_gate_area_no_task(unsigned long addr) | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int in_gate_area(struct task_struct *task, unsigned long addr) | int in_gate_area(struct mm_struct *mm, unsigned long addr) | ||||||
| { | { | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -99,7 +99,7 @@ struct vm_area_struct *get_gate_vma(struct mm_struct *mm) | ||||||
| 	return NULL; | 	return NULL; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int in_gate_area(struct task_struct *task, unsigned long address) | int in_gate_area(struct mm_struct *mm, unsigned long address) | ||||||
| { | { | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -870,9 +870,9 @@ struct vm_area_struct *get_gate_vma(struct mm_struct *mm) | ||||||
| 	return &gate_vma; | 	return &gate_vma; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int in_gate_area(struct task_struct *task, unsigned long addr) | int in_gate_area(struct mm_struct *mm, unsigned long addr) | ||||||
| { | { | ||||||
| 	struct vm_area_struct *vma = get_gate_vma(task->mm); | 	struct vm_area_struct *vma = get_gate_vma(mm); | ||||||
| 
 | 
 | ||||||
| 	if (!vma) | 	if (!vma) | ||||||
| 		return 0; | 		return 0; | ||||||
|  |  | ||||||
|  | @ -428,9 +428,9 @@ struct vm_area_struct *get_gate_vma(struct mm_struct *mm) | ||||||
| 	return NULL; | 	return NULL; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int in_gate_area(struct task_struct *task, unsigned long addr) | int in_gate_area(struct mm_struct *mm, unsigned long addr) | ||||||
| { | { | ||||||
| 	const struct vm_area_struct *vma = get_gate_vma(task->mm); | 	const struct vm_area_struct *vma = get_gate_vma(mm); | ||||||
| 
 | 
 | ||||||
| 	return vma && addr >= vma->vm_start && addr < vma->vm_end; | 	return vma && addr >= vma->vm_start && addr < vma->vm_end; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1581,10 +1581,10 @@ static inline bool kernel_page_present(struct page *page) { return true; } | ||||||
| extern struct vm_area_struct *get_gate_vma(struct mm_struct *mm); | extern struct vm_area_struct *get_gate_vma(struct mm_struct *mm); | ||||||
| #ifdef	__HAVE_ARCH_GATE_AREA | #ifdef	__HAVE_ARCH_GATE_AREA | ||||||
| int in_gate_area_no_task(unsigned long addr); | int in_gate_area_no_task(unsigned long addr); | ||||||
| int in_gate_area(struct task_struct *task, unsigned long addr); | int in_gate_area(struct mm_struct *mm, unsigned long addr); | ||||||
| #else | #else | ||||||
| int in_gate_area_no_task(unsigned long addr); | int in_gate_area_no_task(unsigned long addr); | ||||||
| #define in_gate_area(task, addr) ({(void)task; in_gate_area_no_task(addr);}) | #define in_gate_area(mm, addr) ({(void)mm; in_gate_area_no_task(addr);}) | ||||||
| #endif	/* __HAVE_ARCH_GATE_AREA */ | #endif	/* __HAVE_ARCH_GATE_AREA */ | ||||||
| 
 | 
 | ||||||
| int drop_caches_sysctl_handler(struct ctl_table *, int, | int drop_caches_sysctl_handler(struct ctl_table *, int, | ||||||
|  |  | ||||||
|  | @ -1486,7 +1486,7 @@ int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, | ||||||
| 		struct vm_area_struct *vma; | 		struct vm_area_struct *vma; | ||||||
| 
 | 
 | ||||||
| 		vma = find_extend_vma(mm, start); | 		vma = find_extend_vma(mm, start); | ||||||
| 		if (!vma && in_gate_area(tsk, start)) { | 		if (!vma && in_gate_area(tsk->mm, start)) { | ||||||
| 			unsigned long pg = start & PAGE_MASK; | 			unsigned long pg = start & PAGE_MASK; | ||||||
| 			struct vm_area_struct *gate_vma = get_gate_vma(tsk->mm); | 			struct vm_area_struct *gate_vma = get_gate_vma(tsk->mm); | ||||||
| 			pgd_t *pgd; | 			pgd_t *pgd; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Stephen Wilson
				Stephen Wilson