mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 17:08:10 +00:00
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jwessel/linux-2.6-kgdb
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jwessel/linux-2.6-kgdb: x86,kgdb: Fix hw breakpoint regression
This commit is contained in:
commit
540ad6b62b
1 changed files with 7 additions and 2 deletions
|
@ -572,7 +572,6 @@ static int __kgdb_notify(struct die_args *args, unsigned long cmd)
|
||||||
return NOTIFY_STOP;
|
return NOTIFY_STOP;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_KGDB_LOW_LEVEL_TRAP
|
|
||||||
int kgdb_ll_trap(int cmd, const char *str,
|
int kgdb_ll_trap(int cmd, const char *str,
|
||||||
struct pt_regs *regs, long err, int trap, int sig)
|
struct pt_regs *regs, long err, int trap, int sig)
|
||||||
{
|
{
|
||||||
|
@ -590,7 +589,6 @@ int kgdb_ll_trap(int cmd, const char *str,
|
||||||
|
|
||||||
return __kgdb_notify(&args, cmd);
|
return __kgdb_notify(&args, cmd);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_KGDB_LOW_LEVEL_TRAP */
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
kgdb_notify(struct notifier_block *self, unsigned long cmd, void *ptr)
|
kgdb_notify(struct notifier_block *self, unsigned long cmd, void *ptr)
|
||||||
|
@ -625,6 +623,12 @@ int kgdb_arch_init(void)
|
||||||
return register_die_notifier(&kgdb_notifier);
|
return register_die_notifier(&kgdb_notifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void kgdb_hw_overflow_handler(struct perf_event *event, int nmi,
|
||||||
|
struct perf_sample_data *data, struct pt_regs *regs)
|
||||||
|
{
|
||||||
|
kgdb_ll_trap(DIE_DEBUG, "debug", regs, 0, 0, SIGTRAP);
|
||||||
|
}
|
||||||
|
|
||||||
void kgdb_arch_late(void)
|
void kgdb_arch_late(void)
|
||||||
{
|
{
|
||||||
int i, cpu;
|
int i, cpu;
|
||||||
|
@ -655,6 +659,7 @@ void kgdb_arch_late(void)
|
||||||
for_each_online_cpu(cpu) {
|
for_each_online_cpu(cpu) {
|
||||||
pevent = per_cpu_ptr(breakinfo[i].pev, cpu);
|
pevent = per_cpu_ptr(breakinfo[i].pev, cpu);
|
||||||
pevent[0]->hw.sample_period = 1;
|
pevent[0]->hw.sample_period = 1;
|
||||||
|
pevent[0]->overflow_handler = kgdb_hw_overflow_handler;
|
||||||
if (pevent[0]->destroy != NULL) {
|
if (pevent[0]->destroy != NULL) {
|
||||||
pevent[0]->destroy = NULL;
|
pevent[0]->destroy = NULL;
|
||||||
release_bp_slot(*pevent);
|
release_bp_slot(*pevent);
|
||||||
|
|
Loading…
Reference in a new issue