diff options
Diffstat (limited to 'arch/score')
| -rw-r--r-- | arch/score/mm/fault.c | 7 | 
1 files changed, 6 insertions, 1 deletions
| diff --git a/arch/score/mm/fault.c b/arch/score/mm/fault.c index 4b71a626d41e..52238983527d 100644 --- a/arch/score/mm/fault.c +++ b/arch/score/mm/fault.c @@ -47,6 +47,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long write,  	struct task_struct *tsk = current;  	struct mm_struct *mm = tsk->mm;  	const int field = sizeof(unsigned long) * 2; +	unsigned long flags = 0;  	siginfo_t info;  	int fault; @@ -75,6 +76,9 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long write,  	if (in_atomic() || !mm)  		goto bad_area_nosemaphore; +	if (user_mode(regs)) +		flags |= FAULT_FLAG_USER; +  	down_read(&mm->mmap_sem);  	vma = find_vma(mm, address);  	if (!vma) @@ -95,6 +99,7 @@ good_area:  	if (write) {  		if (!(vma->vm_flags & VM_WRITE))  			goto bad_area; +		flags |= FAULT_FLAG_WRITE;  	} else {  		if (!(vma->vm_flags & (VM_READ | VM_WRITE | VM_EXEC)))  			goto bad_area; @@ -105,7 +110,7 @@ good_area:  	* make sure we exit gracefully rather than endlessly redo  	* the fault.  	*/ -	fault = handle_mm_fault(mm, vma, address, write); +	fault = handle_mm_fault(mm, vma, address, flags);  	if (unlikely(fault & VM_FAULT_ERROR)) {  		if (fault & VM_FAULT_OOM)  			goto out_of_memory; |