aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Wessel <jason.wessel@windriver.com>2008-02-20 14:33:38 -0500
committerIngo Molnar <mingo@elte.hu>2008-04-17 14:05:39 -0400
commitb4b8ac524d9b6ed7229017145afa1d7afbea4a48 (patch)
treec1b8ef7b22ebc956c0effd0ad6b5a37290f86bda
parent64e9ee3095b61d0300ea548216a57d2536611309 (diff)
kgdb: fix optional arch functions and probe_kernel_*
Fix two regressions dealing with the kgdb core. 1) kgdb_skipexception and kgdb_post_primary_code are optional functions that are only required on archs that need special exception fixups. 2) The kernel address space scope must be set on any probe_kernel_* function or archs such as ARCH=arm will not allow access to the kernel memory space. As an example, it is required to allow the full kernel address space is when you the kernel debugger to inspect a system call. Signed-off-by: Jason Wessel <jason.wessel@windriver.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--kernel/kgdb.c11
-rw-r--r--mm/maccess.c6
2 files changed, 17 insertions, 0 deletions
diff --git a/kernel/kgdb.c b/kernel/kgdb.c
index 68aea78407e4..31425e0fbf20 100644
--- a/kernel/kgdb.c
+++ b/kernel/kgdb.c
@@ -200,6 +200,17 @@ int __weak kgdb_arch_init(void)
200 return 0; 200 return 0;
201} 201}
202 202
203int __weak kgdb_skipexception(int exception, struct pt_regs *regs)
204{
205 return 0;
206}
207
208void __weak
209kgdb_post_primary_code(struct pt_regs *regs, int e_vector, int err_code)
210{
211 return;
212}
213
203/** 214/**
204 * kgdb_disable_hw_debug - Disable hardware debugging while we in kgdb. 215 * kgdb_disable_hw_debug - Disable hardware debugging while we in kgdb.
205 * @regs: Current &struct pt_regs. 216 * @regs: Current &struct pt_regs.
diff --git a/mm/maccess.c b/mm/maccess.c
index 24f81b971403..ac40796cfb15 100644
--- a/mm/maccess.c
+++ b/mm/maccess.c
@@ -17,11 +17,14 @@
17long probe_kernel_read(void *dst, void *src, size_t size) 17long probe_kernel_read(void *dst, void *src, size_t size)
18{ 18{
19 long ret; 19 long ret;
20 mm_segment_t old_fs = get_fs();
20 21
22 set_fs(KERNEL_DS);
21 pagefault_disable(); 23 pagefault_disable();
22 ret = __copy_from_user_inatomic(dst, 24 ret = __copy_from_user_inatomic(dst,
23 (__force const void __user *)src, size); 25 (__force const void __user *)src, size);
24 pagefault_enable(); 26 pagefault_enable();
27 set_fs(old_fs);
25 28
26 return ret ? -EFAULT : 0; 29 return ret ? -EFAULT : 0;
27} 30}
@@ -39,10 +42,13 @@ EXPORT_SYMBOL_GPL(probe_kernel_read);
39long probe_kernel_write(void *dst, void *src, size_t size) 42long probe_kernel_write(void *dst, void *src, size_t size)
40{ 43{
41 long ret; 44 long ret;
45 mm_segment_t old_fs = get_fs();
42 46
47 set_fs(KERNEL_DS);
43 pagefault_disable(); 48 pagefault_disable();
44 ret = __copy_to_user_inatomic((__force void __user *)dst, src, size); 49 ret = __copy_to_user_inatomic((__force void __user *)dst, src, size);
45 pagefault_enable(); 50 pagefault_enable();
51 set_fs(old_fs);
46 52
47 return ret ? -EFAULT : 0; 53 return ret ? -EFAULT : 0;
48} 54}