From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Paul E. McKenney" Subject: Re: [ANNOUNCE] 3.0.6-rt18 Date: Thu, 13 Oct 2011 14:44:32 -0700 Message-ID: <20111013214432.GC2350@linux.vnet.ibm.com> References: Reply-To: paulmck@linux.vnet.ibm.com Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: LKML , linux-rt-users To: Thomas Gleixner Return-path: Received: from e8.ny.us.ibm.com ([32.97.182.138]:53626 "EHLO e8.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754618Ab1JMVpu (ORCPT ); Thu, 13 Oct 2011 17:45:50 -0400 Content-Disposition: inline In-Reply-To: Sender: linux-rt-users-owner@vger.kernel.org List-ID: On Thu, Oct 13, 2011 at 11:52:18AM +0200, Thomas Gleixner wrote: > Dear RT Folks, > > I'm pleased to announce the 3.0.6-rt18 release. > > Changes from 3.0.6-rt17 to 3.0.6-rt18 > > * Fix a long standing slab thinko (Steven Rostedt) > > * Add missing debugobjects call to hrtimers (Yong Zhang) > > * Tracing updates (Steven Rostedt) > > * Minor fixes (Yong, myself) > > Delta patch against 3.0.6-rt17 > > https://tglx.de/~tglx/rt/patch-3.0.6-rt17-rt18.patch.gz And rcutorture is quite happy with this release under 2-CPU KVM on x86. Thanx, Paul > also appended below. > > > Patch against 3.0.6 can be found here: > > https://tglx.de/~tglx/rt/patch-3.0.6-rt18.patch.gz > > > The split quilt queue is available at: > > https://tglx.de/~tglx/rt/patches-3.0.6-rt18.tar.gz > > Enjoy, > > tglx > > ---------------> > Index: linux-2.6/arch/x86/kernel/hpet.c > =================================================================== > --- linux-2.6.orig/arch/x86/kernel/hpet.c > +++ linux-2.6/arch/x86/kernel/hpet.c > @@ -570,6 +570,7 @@ static void init_one_hpet_msi_clockevent > static int __init dmi_disable_hpet_msi(const struct dmi_system_id *d) > { > hpet_msi_disable = 1; > + return 0; > } > > static struct dmi_system_id __initdata dmi_hpet_table[] = { > Index: linux-2.6/include/linux/hardirq.h > =================================================================== > --- linux-2.6.orig/include/linux/hardirq.h > +++ linux-2.6/include/linux/hardirq.h > @@ -84,7 +84,7 @@ > # define softirq_count() (preempt_count() & SOFTIRQ_MASK) > # define in_serving_softirq() (softirq_count() & SOFTIRQ_OFFSET) > #else > -# define softirq_count() (0U) > +# define softirq_count() (0UL) > extern int in_serving_softirq(void); > #endif > > Index: linux-2.6/kernel/hrtimer.c > =================================================================== > --- linux-2.6.orig/kernel/hrtimer.c > +++ linux-2.6/kernel/hrtimer.c > @@ -1040,6 +1040,7 @@ int __hrtimer_start_range_ns(struct hrti > * remove it again and report a failure. This avoids > * stale base->first entries. > */ > + debug_deactivate(timer); > __remove_hrtimer(timer, new_base, > timer->state & HRTIMER_STATE_CALLBACK, 0); > } > Index: linux-2.6/kernel/trace/ftrace.c > =================================================================== > --- linux-2.6.orig/kernel/trace/ftrace.c > +++ linux-2.6/kernel/trace/ftrace.c > @@ -1767,10 +1767,36 @@ static cycle_t ftrace_update_time; > static unsigned long ftrace_update_cnt; > unsigned long ftrace_update_tot_cnt; > > +static int ops_traces_mod(struct ftrace_ops *ops) > +{ > + struct ftrace_hash *hash; > + > + hash = ops->filter_hash; > + return !!(!hash || !hash->count); > +} > + > static int ftrace_update_code(struct module *mod) > { > struct dyn_ftrace *p; > cycle_t start, stop; > + unsigned long ref = 0; > + > + /* > + * When adding a module, we need to check if tracers are > + * currently enabled and if they are set to trace all functions. > + * If they are, we need to enable the module functions as well > + * as update the reference counts for those function records. > + */ > + if (mod) { > + struct ftrace_ops *ops; > + > + for (ops = ftrace_ops_list; > + ops != &ftrace_list_end; ops = ops->next) { > + if (ops->flags & FTRACE_OPS_FL_ENABLED && > + ops_traces_mod(ops)) > + ref++; > + } > + } > > start = ftrace_now(raw_smp_processor_id()); > ftrace_update_cnt = 0; > @@ -1783,7 +1809,7 @@ static int ftrace_update_code(struct mod > > p = ftrace_new_addrs; > ftrace_new_addrs = p->newlist; > - p->flags = 0L; > + p->flags = ref; > > /* > * Do the initial record conversion from mcount jump > @@ -1806,7 +1832,7 @@ static int ftrace_update_code(struct mod > * conversion puts the module to the correct state, thus > * passing the ftrace_make_call check. > */ > - if (ftrace_start_up) { > + if (ftrace_start_up && ref) { > int failed = __ftrace_replace_code(p, 1); > if (failed) { > ftrace_bug(failed, p->ip); > @@ -2430,10 +2456,9 @@ ftrace_match_module_records(struct ftrac > */ > > static int > -ftrace_mod_callback(char *func, char *cmd, char *param, int enable) > +ftrace_mod_callback(struct ftrace_hash *hash, > + char *func, char *cmd, char *param, int enable) > { > - struct ftrace_ops *ops = &global_ops; > - struct ftrace_hash *hash; > char *mod; > int ret = -EINVAL; > > @@ -2453,11 +2478,6 @@ ftrace_mod_callback(char *func, char *cm > if (!strlen(mod)) > return ret; > > - if (enable) > - hash = ops->filter_hash; > - else > - hash = ops->notrace_hash; > - > ret = ftrace_match_module_records(hash, func, mod); > if (!ret) > ret = -EINVAL; > @@ -2783,7 +2803,7 @@ static int ftrace_process_regex(struct f > mutex_lock(&ftrace_cmd_mutex); > list_for_each_entry(p, &ftrace_commands, list) { > if (strcmp(p->name, command) == 0) { > - ret = p->func(func, command, next, enable); > + ret = p->func(hash, func, command, next, enable); > goto out_unlock; > } > } > Index: linux-2.6/localversion-rt > =================================================================== > --- linux-2.6.orig/localversion-rt > +++ linux-2.6/localversion-rt > @@ -1 +1 @@ > --rt17 > +-rt18 > Index: linux-2.6/mm/slab.c > =================================================================== > --- linux-2.6.orig/mm/slab.c > +++ linux-2.6/mm/slab.c > @@ -2601,7 +2601,7 @@ static void __do_drain(void *arg, unsign > struct array_cache *ac; > int node = cpu_to_mem(cpu); > > - ac = cpu_cache_get(cachep); > + ac = cpu_cache_get_on_cpu(cachep, cpu); > spin_lock(&cachep->nodelists[node]->list_lock); > free_block(cachep, ac->entry, ac->avail, node); > spin_unlock(&cachep->nodelists[node]->list_lock); > Index: linux-2.6/include/linux/ftrace.h > =================================================================== > --- linux-2.6.orig/include/linux/ftrace.h > +++ linux-2.6/include/linux/ftrace.h > @@ -123,7 +123,8 @@ stack_trace_sysctl(struct ctl_table *tab > struct ftrace_func_command { > struct list_head list; > char *name; > - int (*func)(char *func, char *cmd, > + int (*func)(struct ftrace_hash *hash, > + char *func, char *cmd, > char *params, int enable); > }; > > Index: linux-2.6/kernel/trace/trace_functions.c > =================================================================== > --- linux-2.6.orig/kernel/trace/trace_functions.c > +++ linux-2.6/kernel/trace/trace_functions.c > @@ -324,7 +324,8 @@ ftrace_trace_onoff_unreg(char *glob, cha > } > > static int > -ftrace_trace_onoff_callback(char *glob, char *cmd, char *param, int enable) > +ftrace_trace_onoff_callback(struct ftrace_hash *hash, > + char *glob, char *cmd, char *param, int enable) > { > struct ftrace_probe_ops *ops; > void *count = (void *)-1; > -- > To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html >