git.samba.org
/
sfrench
/
cifs-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
x86, kgdb, init: Add early and late debug states
[sfrench/cifs-2.6.git]
/
arch
/
x86
/
kernel
/
kgdb.c
diff --git
a/arch/x86/kernel/kgdb.c
b/arch/x86/kernel/kgdb.c
index 95b89d4cb8f18f1595a430e0e6eaf8ac5f513487..2b71ec41869ff5df2a6e2cd99d594e7698ec311f 100644
(file)
--- a/
arch/x86/kernel/kgdb.c
+++ b/
arch/x86/kernel/kgdb.c
@@
-595,15
+595,16
@@
static struct notifier_block kgdb_notifier = {
* specific callbacks.
*/
int kgdb_arch_init(void)
* specific callbacks.
*/
int kgdb_arch_init(void)
+{
+ return register_die_notifier(&kgdb_notifier);
+}
+
+void kgdb_arch_late(void)
{
int i, cpu;
{
int i, cpu;
- int ret;
struct perf_event_attr attr;
struct perf_event **pevent;
struct perf_event_attr attr;
struct perf_event **pevent;
- ret = register_die_notifier(&kgdb_notifier);
- if (ret != 0)
- return ret;
/*
* Pre-allocate the hw breakpoint structions in the non-atomic
* portion of kgdb because this operation requires mutexs to
/*
* Pre-allocate the hw breakpoint structions in the non-atomic
* portion of kgdb because this operation requires mutexs to
@@
-615,12
+616,15
@@
int kgdb_arch_init(void)
attr.bp_type = HW_BREAKPOINT_W;
attr.disabled = 1;
for (i = 0; i < 4; i++) {
attr.bp_type = HW_BREAKPOINT_W;
attr.disabled = 1;
for (i = 0; i < 4; i++) {
+ if (breakinfo[i].pev)
+ continue;
breakinfo[i].pev = register_wide_hw_breakpoint(&attr, NULL);
if (IS_ERR(breakinfo[i].pev)) {
breakinfo[i].pev = register_wide_hw_breakpoint(&attr, NULL);
if (IS_ERR(breakinfo[i].pev)) {
- printk(KERN_ERR "kgdb: Could not allocate hw breakpoints\n");
+ printk(KERN_ERR "kgdb: Could not allocate hw"
+ "breakpoints\nDisabling the kernel debugger\n");
breakinfo[i].pev = NULL;
kgdb_arch_exit();
breakinfo[i].pev = NULL;
kgdb_arch_exit();
- return
-1
;
+ return;
}
for_each_online_cpu(cpu) {
pevent = per_cpu_ptr(breakinfo[i].pev, cpu);
}
for_each_online_cpu(cpu) {
pevent = per_cpu_ptr(breakinfo[i].pev, cpu);
@@
-631,7
+635,6
@@
int kgdb_arch_init(void)
}
}
}
}
}
}
- return ret;
}
/**
}
/**