mirror of
https://github.com/torvalds/linux.git
synced 2024-11-15 16:41:58 +00:00
Merge branch 'x86/mm' into x86/core
This commit is contained in:
commit
f268fe7333
@ -782,6 +782,15 @@ static inline int access_error(unsigned long error_code, int write,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int fault_in_kernel_space(unsigned long address)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_X86_32
|
||||||
|
return address >= TASK_SIZE;
|
||||||
|
#else /* !CONFIG_X86_32 */
|
||||||
|
return address >= TASK_SIZE64;
|
||||||
|
#endif /* CONFIG_X86_32 */
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This routine handles page faults. It determines the address,
|
* This routine handles page faults. It determines the address,
|
||||||
* and the problem, and then passes it off to one of the appropriate
|
* and the problem, and then passes it off to one of the appropriate
|
||||||
@ -822,11 +831,7 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code)
|
|||||||
* (error_code & 4) == 0, and that the fault was not a
|
* (error_code & 4) == 0, and that the fault was not a
|
||||||
* protection error (error_code & 9) == 0.
|
* protection error (error_code & 9) == 0.
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_X86_32
|
if (unlikely(fault_in_kernel_space(address))) {
|
||||||
if (unlikely(address >= TASK_SIZE)) {
|
|
||||||
#else
|
|
||||||
if (unlikely(address >= TASK_SIZE64)) {
|
|
||||||
#endif
|
|
||||||
if (!(error_code & (PF_RSVD|PF_USER|PF_PROT)) &&
|
if (!(error_code & (PF_RSVD|PF_USER|PF_PROT)) &&
|
||||||
vmalloc_fault(address) >= 0)
|
vmalloc_fault(address) >= 0)
|
||||||
return;
|
return;
|
||||||
@ -898,6 +903,12 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
down_read(&mm->mmap_sem);
|
down_read(&mm->mmap_sem);
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* The above down_read_trylock() might have succeeded in which
|
||||||
|
* case we'll have missed the might_sleep() from down_read().
|
||||||
|
*/
|
||||||
|
might_sleep();
|
||||||
}
|
}
|
||||||
|
|
||||||
vma = find_vma(mm, address);
|
vma = find_vma(mm, address);
|
||||||
|
Loading…
Reference in New Issue
Block a user