From dbc1a79adfdad277bb888255290a370a906ee983 Mon Sep 17 00:00:00 2001 From: Kris Van Hees Date: Tue, 17 Jan 2012 15:03:17 -0500 Subject: [PATCH] dtrace: fix signed division and modulo operations in DIF Ensure that SDT probe points are patched with a NOP sequence at boot time. Remove debugging output during SDT registration. Signed-off-by: Kris Van Hees --- init/main.c | 4 ++++ kernel/dtrace/sdt_register.c | 24 ++++-------------------- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/init/main.c b/init/main.c index cc9bb01104b0..bdb67ba13600 100644 --- a/init/main.c +++ b/init/main.c @@ -674,6 +674,10 @@ asmlinkage __visible void __init start_kernel(void) ftrace_init(); +#ifdef CONFIG_DTRACE + dtrace_register_builtins(); +#endif + /* Do the rest non-__init'ed, we're now alive */ rest_init(); } diff --git a/kernel/dtrace/sdt_register.c b/kernel/dtrace/sdt_register.c index 152d5a5db3aa..dd457de7917f 100644 --- a/kernel/dtrace/sdt_register.c +++ b/kernel/dtrace/sdt_register.c @@ -63,15 +63,9 @@ static int sdt_probe_resolve(struct module *mp, char *name, char *func, sdp->sdpd_next = mp->sdt_probes; mp->sdt_probes = sdp; - DPRINTK("sdt_probes -> 0x%p\n", mp->sdt_probes); - DPRINTK("this: instr offset=0x%lx, next ptr=0x%p, name=%s, func=%s\n", - sdp->sdpd_offset, sdp->sdpd_next, sdp->sdpd_name, - sdp->sdpd_func); - mutex_lock(&text_mutex); text_poke(instr, nops, SDT_NOP_SIZE); mutex_unlock(&text_mutex); - DPRINTK(" %02x %02x %02x %02x %02x\n", instr[0], instr[1], instr[2], instr[3], instr[4]); return 0; } @@ -97,38 +91,28 @@ void dtrace_register_builtins(void) dtrace_kmod = kzalloc(sizeof(struct module), GFP_KERNEL); if (!dtrace_kmod) { - printk(KERN_WARNING - "%s: cannot allocate kernel pseudo-module\n", - __func__); + pr_warning("%s: cannot allocate kernel pseudo-module\n", + __func__); return; } dtrace_kmod->state = MODULE_STATE_LIVE; strlcpy(dtrace_kmod->name, "vmlinux", MODULE_NAME_LEN); - DPRINTK("%lu SDT relocation entries beg. @0x%p\n", - dtrace_sdt_nprobes, &dtrace_sdt_probes); - if (dtrace_sdt_nprobes == 0) return; for (cnt = 0; cnt < dtrace_sdt_nprobes; cnt++) { char *func = pi->name + pi->name_len + 1; - DPRINTK("SDT probe point [%lu]: " - "offset=0x%lx, base=0x%lx, name_len=0x%lx, " - "func_len=0x%lx, name=%s, func=%s\n", - cnt, pi->offset, pi->base, pi->name_len, - pi->func_len, pi->name, func); if (sdt_probe_resolve(dtrace_kmod, pi->name, func, pi->offset, pi->base, nops)) - printk(KERN_WARNING "%s: cannot resolve %s\n", - __func__, pi->name); + pr_warning("%s: cannot resolve %s\n", + __func__, pi->name); nextpi = (void *)pi + sizeof(dtrace_sdt_probeinfo_t) + roundup(pi->name_len + 1 + pi->func_len + 1, BITS_PER_LONG / 8); pi = nextpi; - DPRINTK("SDT relocs: next entry at 0x%p\n", pi); } } EXPORT_SYMBOL(dtrace_register_builtins); -- 2.50.1