Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/h8300/mm/fault.c
10817 views
1
/*
2
* linux/arch/h8300/mm/fault.c
3
*
4
* Copyright (C) 1998 D. Jeff Dionne <[email protected]>,
5
* Copyright (C) 2000 Lineo, Inc. (www.lineo.com)
6
*
7
* Based on:
8
*
9
* linux/arch/m68knommu/mm/fault.c
10
* linux/arch/m68k/mm/fault.c
11
*
12
* Copyright (C) 1995 Hamish Macdonald
13
*/
14
15
#include <linux/mman.h>
16
#include <linux/mm.h>
17
#include <linux/kernel.h>
18
#include <linux/ptrace.h>
19
20
#include <asm/system.h>
21
#include <asm/pgtable.h>
22
23
/*
24
* This routine handles page faults. It determines the problem, and
25
* then passes it off to one of the appropriate routines.
26
*
27
* error_code:
28
* bit 0 == 0 means no page found, 1 means protection fault
29
* bit 1 == 0 means read, 1 means write
30
*
31
* If this routine detects a bad access, it returns 1, otherwise it
32
* returns 0.
33
*/
34
asmlinkage int do_page_fault(struct pt_regs *regs, unsigned long address,
35
unsigned long error_code)
36
{
37
#ifdef DEBUG
38
printk ("regs->sr=%#x, regs->pc=%#lx, address=%#lx, %ld\n",
39
regs->sr, regs->pc, address, error_code);
40
#endif
41
42
/*
43
* Oops. The kernel tried to access some bad page. We'll have to
44
* terminate things with extreme prejudice.
45
*/
46
if ((unsigned long) address < PAGE_SIZE) {
47
printk(KERN_ALERT "Unable to handle kernel NULL pointer dereference");
48
} else
49
printk(KERN_ALERT "Unable to handle kernel access");
50
printk(" at virtual address %08lx\n",address);
51
if (!user_mode(regs))
52
die("Oops", regs, error_code);
53
do_exit(SIGKILL);
54
55
return 1;
56
}
57
58
59