diff options
Diffstat (limited to 'arch/x86/kernel/kprobes.c')
| -rw-r--r-- | arch/x86/kernel/kprobes.c | 5 | 
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/x86/kernel/kprobes.c b/arch/x86/kernel/kprobes.c index c969fd9d156..f1a6244d7d9 100644 --- a/arch/x86/kernel/kprobes.c +++ b/arch/x86/kernel/kprobes.c @@ -1183,12 +1183,13 @@ static void __kprobes optimized_callback(struct optimized_kprobe *op,  					 struct pt_regs *regs)  {  	struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); +	unsigned long flags;  	/* This is possible if op is under delayed unoptimizing */  	if (kprobe_disabled(&op->kp))  		return; -	preempt_disable(); +	local_irq_save(flags);  	if (kprobe_running()) {  		kprobes_inc_nmissed_count(&op->kp);  	} else { @@ -1207,7 +1208,7 @@ static void __kprobes optimized_callback(struct optimized_kprobe *op,  		opt_pre_handler(&op->kp, regs);  		__this_cpu_write(current_kprobe, NULL);  	} -	preempt_enable_no_resched(); +	local_irq_restore(flags);  }  static int __kprobes copy_optimized_instructions(u8 *dest, u8 *src)  |