|
@@ -869,7 +869,8 @@ static void __disarm_kprobe(struct kprobe *p, bool reopt)
|
|
|
{
|
|
|
struct kprobe *_p;
|
|
|
|
|
|
- unoptimize_kprobe(p, false); /* Try to unoptimize */
|
|
|
+ /* Try to unoptimize */
|
|
|
+ unoptimize_kprobe(p, kprobes_all_disarmed);
|
|
|
|
|
|
if (!kprobe_queued(p)) {
|
|
|
arch_disarm_kprobe(p);
|
|
@@ -1571,7 +1572,13 @@ static struct kprobe *__disable_kprobe(struct kprobe *p)
|
|
|
|
|
|
/* Try to disarm and disable this/parent probe */
|
|
|
if (p == orig_p || aggr_kprobe_disabled(orig_p)) {
|
|
|
- disarm_kprobe(orig_p, true);
|
|
|
+ /*
|
|
|
+ * If kprobes_all_disarmed is set, orig_p
|
|
|
+ * should have already been disarmed, so
|
|
|
+ * skip unneed disarming process.
|
|
|
+ */
|
|
|
+ if (!kprobes_all_disarmed)
|
|
|
+ disarm_kprobe(orig_p, true);
|
|
|
orig_p->flags |= KPROBE_FLAG_DISABLED;
|
|
|
}
|
|
|
}
|