aboutsummaryrefslogtreecommitdiff
path: root/linux/mm/page.s
diff options
context:
space:
mode:
Diffstat (limited to 'linux/mm/page.s')
-rw-r--r--linux/mm/page.s34
1 files changed, 34 insertions, 0 deletions
diff --git a/linux/mm/page.s b/linux/mm/page.s
new file mode 100644
index 0000000..27488c2
--- /dev/null
+++ b/linux/mm/page.s
@@ -0,0 +1,34 @@
+/*
+ * page.s contains the low-level page-exception code.
+ * the real work is done in mm.c
+ */
+
+.globl _page_fault
+
+_page_fault:
+ xchgl %eax,(%esp)
+ pushl %ecx
+ pushl %edx
+ push %ds
+ push %es
+ push %fs
+ movl $0x10,%edx
+ mov %dx,%ds
+ mov %dx,%es
+ mov %dx,%fs
+ movl %cr2,%edx
+ pushl %edx
+ pushl %eax
+ testl $1,%eax
+ jne 1f
+ call _do_no_page
+ jmp 2f
+1: call _do_wp_page
+2: addl $8,%esp
+ pop %fs
+ pop %es
+ pop %ds
+ popl %edx
+ popl %ecx
+ popl %eax
+ iret