Blame view

arch/h8300/mm/fault.c 1.44 KB
b24413180   Greg Kroah-Hartman   License cleanup: ...
1
  // SPDX-License-Identifier: GPL-2.0
bbeb79acb   Yoshinori Sato   h8300: Memory man...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  /*
   *  linux/arch/h8300/mm/fault.c
   *
   *  Copyright (C) 1998  D. Jeff Dionne <jeff@lineo.ca>,
   *  Copyright (C) 2000  Lineo, Inc.  (www.lineo.com)
   *
   *  Based on:
   *
   *  linux/arch/m68knommu/mm/fault.c
   *  linux/arch/m68k/mm/fault.c
   *
   *  Copyright (C) 1995  Hamish Macdonald
   */
  
  #include <linux/mman.h>
  #include <linux/mm.h>
  #include <linux/kernel.h>
  #include <linux/ptrace.h>
bbeb79acb   Yoshinori Sato   h8300: Memory man...
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
  
  void die(const char *str, struct pt_regs *fp, unsigned long err);
  
  /*
   * This routine handles page faults.  It determines the problem, and
   * then passes it off to one of the appropriate routines.
   *
   * error_code:
   *	bit 0 == 0 means no page found, 1 means protection fault
   *	bit 1 == 0 means read, 1 means write
   *
   * If this routine detects a bad access, it returns 1, otherwise it
   * returns 0.
   */
  asmlinkage int do_page_fault(struct pt_regs *regs, unsigned long address,
  			      unsigned long error_code)
  {
  #ifdef DEBUG
  	pr_debug("regs->sr=%#x, regs->pc=%#lx, address=%#lx, %ld
  ",
  		 regs->sr, regs->pc, address, error_code);
  #endif
  
  /*
   * Oops. The kernel tried to access some bad page. We'll have to
   * terminate things with extreme prejudice.
   */
  	if ((unsigned long) address < PAGE_SIZE)
  		pr_alert("Unable to handle kernel NULL pointer dereference");
  	else
  		pr_alert("Unable to handle kernel access");
  	printk(" at virtual address %08lx
  ", address);
  	if (!user_mode(regs))
  		die("Oops", regs, error_code);
  	do_exit(SIGKILL);
  
  	return 1;
  }