Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 356316
b: refs/heads/master
c: 3805747
h: refs/heads/master
v: v3
  • Loading branch information
Kautuk Consul authored and Helge Deller committed Feb 20, 2013
1 parent 1f05690 commit abd9fe9
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 45b6eff2a60c8bec1254412dfdb36acb0afe04a2
refs/heads/master: 38057477b98712bd9c735bf9d26b83c25d9d3279
30 changes: 25 additions & 5 deletions trunk/arch/parisc/mm/fault.c
Original file line number Diff line number Diff line change
Expand Up @@ -175,10 +175,12 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
struct mm_struct *mm = tsk->mm;
unsigned long acc_type;
int fault;
unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;

if (in_atomic() || !mm)
goto no_context;

retry:
down_read(&mm->mmap_sem);
vma = find_vma_prev(mm, address, &prev_vma);
if (!vma || address < vma->vm_start)
Expand All @@ -201,7 +203,12 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
* fault.
*/

fault = handle_mm_fault(mm, vma, address, (acc_type & VM_WRITE) ? FAULT_FLAG_WRITE : 0);
fault = handle_mm_fault(mm, vma, address,
flags | ((acc_type & VM_WRITE) ? FAULT_FLAG_WRITE : 0));

if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
return;

if (unlikely(fault & VM_FAULT_ERROR)) {
/*
* We hit a shared mapping outside of the file, or some
Expand All @@ -214,10 +221,23 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
goto bad_area;
BUG();
}
if (fault & VM_FAULT_MAJOR)
current->maj_flt++;
else
current->min_flt++;
if (flags & FAULT_FLAG_ALLOW_RETRY) {
if (fault & VM_FAULT_MAJOR)
current->maj_flt++;
else
current->min_flt++;
if (fault & VM_FAULT_RETRY) {
flags &= ~FAULT_FLAG_ALLOW_RETRY;

/*
* No need to up_read(&mm->mmap_sem) as we would
* have already released it in __lock_page_or_retry
* in mm/filemap.c.
*/

goto retry;
}
}
up_read(&mm->mmap_sem);
return;

Expand Down

0 comments on commit abd9fe9

Please sign in to comment.