Prev: [PATCH -tip 3/5] x86: Introduce text_poke_smp_batch() for batch-code modifying
Next: [PATCH -tip 0/5] kprobes: batch (un)optimization support
From: Masami Hiramatsu on 10 May 2010 13:50 Since text_poke_smp() uses stop_machine(), the machine almost stop a while if we optimize a lot of probes at once. This patch limits the maximum number of probes to optimize (means calling text_poke_smp()) at once, and try it again after a while if there are more probes waiting for optimization than the limitation. Signed-off-by: Masami Hiramatsu <mhiramat(a)redhat.com> Cc: Ananth N Mavinakayanahalli <ananth(a)in.ibm.com> Cc: Ingo Molnar <mingo(a)elte.hu> Cc: Jim Keniston <jkenisto(a)us.ibm.com> Cc: Jason Baron <jbaron(a)redhat.com> Cc: Mathieu Desnoyers <mathieu.desnoyers(a)efficios.com> --- kernel/kprobes.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/kernel/kprobes.c b/kernel/kprobes.c index 1d34eef..aae368a 100644 --- a/kernel/kprobes.c +++ b/kernel/kprobes.c @@ -424,11 +424,13 @@ static LIST_HEAD(optimizing_list); static void kprobe_optimizer(struct work_struct *work); static DECLARE_DELAYED_WORK(optimizing_work, kprobe_optimizer); #define OPTIMIZE_DELAY 5 +#define MAX_OPTIMIZE_PROBES 64 /* Kprobe jump optimizer */ static __kprobes void kprobe_optimizer(struct work_struct *work) { struct optimized_kprobe *op, *tmp; + int c = 0; /* Lock modules while optimizing kprobes */ mutex_lock(&module_mutex); @@ -462,9 +464,13 @@ static __kprobes void kprobe_optimizer(struct work_struct *work) if (arch_optimize_kprobe(op) < 0) op->kp.flags &= ~KPROBE_FLAG_OPTIMIZED; list_del_init(&op->list); + if (++c >= MAX_OPTIMIZE_PROBES) + break; } mutex_unlock(&text_mutex); put_online_cpus(); + if (!list_empty(&optimizing_list)) + schedule_delayed_work(&optimizing_work, OPTIMIZE_DELAY); end: mutex_unlock(&kprobe_mutex); mutex_unlock(&module_mutex); -- Masami Hiramatsu e-mail: mhiramat(a)redhat.com -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |