* [ANNOUNCE] 3.0.6-rt18
@ 2011-10-13 9:52 Thomas Gleixner
2011-10-13 21:44 ` Paul E. McKenney
2011-10-17 7:01 ` [PATCH] rt18: fix warnings in ftrace.h Michael Thalmeier
0 siblings, 2 replies; 3+ messages in thread
From: Thomas Gleixner @ 2011-10-13 9:52 UTC (permalink / raw)
To: LKML; +Cc: linux-rt-users
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
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;
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [ANNOUNCE] 3.0.6-rt18
2011-10-13 9:52 [ANNOUNCE] 3.0.6-rt18 Thomas Gleixner
@ 2011-10-13 21:44 ` Paul E. McKenney
2011-10-17 7:01 ` [PATCH] rt18: fix warnings in ftrace.h Michael Thalmeier
1 sibling, 0 replies; 3+ messages in thread
From: Paul E. McKenney @ 2011-10-13 21:44 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: LKML, linux-rt-users
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
>
^ permalink raw reply [flat|nested] 3+ messages in thread* [PATCH] rt18: fix warnings in ftrace.h
2011-10-13 9:52 [ANNOUNCE] 3.0.6-rt18 Thomas Gleixner
2011-10-13 21:44 ` Paul E. McKenney
@ 2011-10-17 7:01 ` Michael Thalmeier
1 sibling, 0 replies; 3+ messages in thread
From: Michael Thalmeier @ 2011-10-17 7:01 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: rt, lkml, michael
When CONFIG_FUNCTION_TRACER is not set usage of unknown struct ftrace_hash in
ftrace_func_command results in a lot of warnings.
Signed-off-by: Michael Thalmeier <michael.thalmeier@hale.at>
---
include/linux/ftrace.h | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h
index ed0eb52..f0c0e8a 100644
--- a/include/linux/ftrace.h
+++ b/include/linux/ftrace.h
@@ -19,6 +19,8 @@
#include <asm/ftrace.h>
+struct ftrace_hash;
+
#ifdef CONFIG_FUNCTION_TRACER
extern int ftrace_enabled;
@@ -29,8 +31,6 @@ ftrace_enable_sysctl(struct ctl_table *table, int write,
typedef void (*ftrace_func_t)(unsigned long ip, unsigned long parent_ip);
-struct ftrace_hash;
-
enum {
FTRACE_OPS_FL_ENABLED = 1 << 0,
FTRACE_OPS_FL_GLOBAL = 1 << 1,
--
1.7.6.4
--
Scanned by MailScanner.
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2011-10-17 7:01 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-10-13 9:52 [ANNOUNCE] 3.0.6-rt18 Thomas Gleixner
2011-10-13 21:44 ` Paul E. McKenney
2011-10-17 7:01 ` [PATCH] rt18: fix warnings in ftrace.h Michael Thalmeier
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.