All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] jump_label: fix jump_label update
@ 2011-06-21  2:35 Xiao Guangrong
  2011-06-21  9:44 ` Jiri Olsa
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Xiao Guangrong @ 2011-06-21  2:35 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: Steven Rostedt, Jason Baron, Jiri Olsa, LKML

The key of module is out of __stop___jump_table, it causes the events
of modules does not work

Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
---
 kernel/jump_label.c |   14 +++++++++-----
 1 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/kernel/jump_label.c b/kernel/jump_label.c
index fa27e75..a8ce450 100644
--- a/kernel/jump_label.c
+++ b/kernel/jump_label.c
@@ -375,15 +375,19 @@ int jump_label_text_reserved(void *start, void *end)
 
 static void jump_label_update(struct jump_label_key *key, int enable)
 {
-	struct jump_entry *entry = key->entries;
-
-	/* if there are no users, entry can be NULL */
-	if (entry)
-		__jump_label_update(key, entry, __stop___jump_table, enable);
+	struct jump_entry *entry = key->entries, *stop = __stop___jump_table;
 
 #ifdef CONFIG_MODULES
+	struct module *mod = __module_address((jump_label_t)key);
+
 	__jump_label_mod_update(key, enable);
+
+	if (mod)
+		stop = mod->jump_entries + mod->num_jump_entries;
 #endif
+	/* if there are no users, entry can be NULL */
+	if (entry)
+		__jump_label_update(key, entry, stop, enable);
 }
 
 #endif
-- 
1.7.5.4

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] jump_label: fix jump_label update
  2011-06-21  2:35 [PATCH v2] jump_label: fix jump_label update Xiao Guangrong
@ 2011-06-21  9:44 ` Jiri Olsa
  2011-06-21 15:47   ` Jason Baron
  2011-06-21 15:44 ` Jason Baron
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 8+ messages in thread
From: Jiri Olsa @ 2011-06-21  9:44 UTC (permalink / raw)
  To: Xiao Guangrong, Steven Rostedt; +Cc: Ingo Molnar, Jason Baron, LKML

On Tue, Jun 21, 2011 at 10:35:55AM +0800, Xiao Guangrong wrote:
> The key of module is out of __stop___jump_table, it causes the events
> of modules does not work
> 
> Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
> ---
>  kernel/jump_label.c |   14 +++++++++-----
>  1 files changed, 9 insertions(+), 5 deletions(-)
> 
> diff --git a/kernel/jump_label.c b/kernel/jump_label.c
> index fa27e75..a8ce450 100644
> --- a/kernel/jump_label.c
> +++ b/kernel/jump_label.c
> @@ -375,15 +375,19 @@ int jump_label_text_reserved(void *start, void *end)
>  
>  static void jump_label_update(struct jump_label_key *key, int enable)
>  {
> -	struct jump_entry *entry = key->entries;
> -
> -	/* if there are no users, entry can be NULL */
> -	if (entry)
> -		__jump_label_update(key, entry, __stop___jump_table, enable);
> +	struct jump_entry *entry = key->entries, *stop = __stop___jump_table;
>  
>  #ifdef CONFIG_MODULES
> +	struct module *mod = __module_address((jump_label_t)key);
> +
>  	__jump_label_mod_update(key, enable);
> +
> +	if (mod)
> +		stop = mod->jump_entries + mod->num_jump_entries;
>  #endif
> +	/* if there are no users, entry can be NULL */
> +	if (entry)
> +		__jump_label_update(key, entry, stop, enable);
>  }
>  
>  #endif
> -- 
> 1.7.5.4

That works for me, but in order to test it I needed to export
jump_label_inc/jump_label_dec functions.

Not sure I'm missing something, but to manage a key that is local
to the module, we need to call jump_label_inc/jump_label_dec
from within the module code, so we need some of the jump_label
functions exported.. it'd be probably:

	jump_label_inc/jump_label_dec/jump_label_enabled

wbr,
jirka


I used following module code to test:
---
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/jump_label.h>

static struct jump_label_key key;

static bool enabled;
module_param(enabled, bool, 0644);

static int __init mod_init(void)
{
        if (enabled)
                jump_label_inc(&key);

        if (static_branch(&key))
                printk("key enabled\n");
        else
                printk("key disabled\n");

        if (jump_label_enabled(&key))
                printk("key enabled1\n");
        else
                printk("key disabled1\n");

        printk("mod loaded\n");
        return 0;
}

static void __exit mod_exit(void)
{
        printk("mod unloaded\n");
        return;
}

module_init(mod_init);
module_exit(mod_exit);
MODULE_LICENSE("GPL");

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] jump_label: fix jump_label update
  2011-06-21  2:35 [PATCH v2] jump_label: fix jump_label update Xiao Guangrong
  2011-06-21  9:44 ` Jiri Olsa
@ 2011-06-21 15:44 ` Jason Baron
  2011-06-23 12:22 ` Avi Kivity
  2011-07-01 15:12 ` [tip:perf/urgent] jump_label: Fix jump_label update for modules tip-bot for Xiao Guangrong
  3 siblings, 0 replies; 8+ messages in thread
From: Jason Baron @ 2011-06-21 15:44 UTC (permalink / raw)
  To: Xiao Guangrong; +Cc: Ingo Molnar, Steven Rostedt, Jiri Olsa, LKML

On Tue, Jun 21, 2011 at 10:35:55AM +0800, Xiao Guangrong wrote:
> The key of module is out of __stop___jump_table, it causes the events
> of modules does not work
> 
> Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
> ---
>  kernel/jump_label.c |   14 +++++++++-----
>  1 files changed, 9 insertions(+), 5 deletions(-)
> 
> diff --git a/kernel/jump_label.c b/kernel/jump_label.c
> index fa27e75..a8ce450 100644
> --- a/kernel/jump_label.c
> +++ b/kernel/jump_label.c
> @@ -375,15 +375,19 @@ int jump_label_text_reserved(void *start, void *end)
>  
>  static void jump_label_update(struct jump_label_key *key, int enable)
>  {
> -	struct jump_entry *entry = key->entries;
> -
> -	/* if there are no users, entry can be NULL */
> -	if (entry)
> -		__jump_label_update(key, entry, __stop___jump_table, enable);
> +	struct jump_entry *entry = key->entries, *stop = __stop___jump_table;
>  
>  #ifdef CONFIG_MODULES
> +	struct module *mod = __module_address((jump_label_t)key);
> +
>  	__jump_label_mod_update(key, enable);
> +
> +	if (mod)
> +		stop = mod->jump_entries + mod->num_jump_entries;
>  #endif
> +	/* if there are no users, entry can be NULL */
> +	if (entry)
> +		__jump_label_update(key, entry, stop, enable);
>  }
>  
>  #endif
> -- 
> 1.7.5.4

Looks good. Thanks for the fix!

Acked-by: Jason Baron <jbaron@redhat.com>

-Jason

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] jump_label: fix jump_label update
  2011-06-21  9:44 ` Jiri Olsa
@ 2011-06-21 15:47   ` Jason Baron
  0 siblings, 0 replies; 8+ messages in thread
From: Jason Baron @ 2011-06-21 15:47 UTC (permalink / raw)
  To: Jiri Olsa; +Cc: Xiao Guangrong, Steven Rostedt, Ingo Molnar, LKML

On Tue, Jun 21, 2011 at 11:44:55AM +0200, Jiri Olsa wrote:
> On Tue, Jun 21, 2011 at 10:35:55AM +0800, Xiao Guangrong wrote:
> > The key of module is out of __stop___jump_table, it causes the events
> > of modules does not work
> > 
> > Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
> > ---
> >  kernel/jump_label.c |   14 +++++++++-----
> >  1 files changed, 9 insertions(+), 5 deletions(-)
> > 
> > diff --git a/kernel/jump_label.c b/kernel/jump_label.c
> > index fa27e75..a8ce450 100644
> > --- a/kernel/jump_label.c
> > +++ b/kernel/jump_label.c
> > @@ -375,15 +375,19 @@ int jump_label_text_reserved(void *start, void *end)
> >  
> >  static void jump_label_update(struct jump_label_key *key, int enable)
> >  {
> > -	struct jump_entry *entry = key->entries;
> > -
> > -	/* if there are no users, entry can be NULL */
> > -	if (entry)
> > -		__jump_label_update(key, entry, __stop___jump_table, enable);
> > +	struct jump_entry *entry = key->entries, *stop = __stop___jump_table;
> >  
> >  #ifdef CONFIG_MODULES
> > +	struct module *mod = __module_address((jump_label_t)key);
> > +
> >  	__jump_label_mod_update(key, enable);
> > +
> > +	if (mod)
> > +		stop = mod->jump_entries + mod->num_jump_entries;
> >  #endif
> > +	/* if there are no users, entry can be NULL */
> > +	if (entry)
> > +		__jump_label_update(key, entry, stop, enable);
> >  }
> >  
> >  #endif
> > -- 
> > 1.7.5.4
> 
> That works for me, but in order to test it I needed to export
> jump_label_inc/jump_label_dec functions.
> 
> Not sure I'm missing something, but to manage a key that is local
> to the module, we need to call jump_label_inc/jump_label_dec
> from within the module code, so we need some of the jump_label
> functions exported.. it'd be probably:
> 
> 	jump_label_inc/jump_label_dec/jump_label_enabled
> 

You're not missing anything, right now all the enabling/disabling is
done in the core kernel, hence no need for the export. I'd prefer to
keep them non-exported until we had a real use-case that required them
to be exported. But I don't feel that strongly about it.

Thanks,

-Jason

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] jump_label: fix jump_label update
  2011-06-21  2:35 [PATCH v2] jump_label: fix jump_label update Xiao Guangrong
  2011-06-21  9:44 ` Jiri Olsa
  2011-06-21 15:44 ` Jason Baron
@ 2011-06-23 12:22 ` Avi Kivity
  2011-06-23 12:45   ` Avi Kivity
  2011-07-01 15:12 ` [tip:perf/urgent] jump_label: Fix jump_label update for modules tip-bot for Xiao Guangrong
  3 siblings, 1 reply; 8+ messages in thread
From: Avi Kivity @ 2011-06-23 12:22 UTC (permalink / raw)
  To: Xiao Guangrong; +Cc: Ingo Molnar, Steven Rostedt, Jason Baron, Jiri Olsa, LKML

On 06/21/2011 05:35 AM, Xiao Guangrong wrote:
> The key of module is out of __stop___jump_table, it causes the events
> of modules does not work
>

What's the status of this patch?  I'm affected by this as well (I'm 
guessing the same module is involved).  I'm near the end of a bisect, 
but there's probably no point given this patch.

-- 
error compiling committee.c: too many arguments to function


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] jump_label: fix jump_label update
  2011-06-23 12:22 ` Avi Kivity
@ 2011-06-23 12:45   ` Avi Kivity
  2011-06-23 17:44     ` Steven Rostedt
  0 siblings, 1 reply; 8+ messages in thread
From: Avi Kivity @ 2011-06-23 12:45 UTC (permalink / raw)
  To: Xiao Guangrong; +Cc: Ingo Molnar, Steven Rostedt, Jason Baron, Jiri Olsa, LKML

On 06/23/2011 03:22 PM, Avi Kivity wrote:
> On 06/21/2011 05:35 AM, Xiao Guangrong wrote:
>> The key of module is out of __stop___jump_table, it causes the events
>> of modules does not work
>>
>
> What's the status of this patch? 

Oh, it's just two days out.  Didn't mean to sound impatient.

> I'm affected by this as well (I'm guessing the same module is 
> involved).  I'm near the end of a bisect, but there's probably no 
> point given this patch.
>

I can confirm it fixes my issue.

Tested-by: Avi Kivity <avi@redhat.com>

-- 
error compiling committee.c: too many arguments to function


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] jump_label: fix jump_label update
  2011-06-23 12:45   ` Avi Kivity
@ 2011-06-23 17:44     ` Steven Rostedt
  0 siblings, 0 replies; 8+ messages in thread
From: Steven Rostedt @ 2011-06-23 17:44 UTC (permalink / raw)
  To: Avi Kivity; +Cc: Xiao Guangrong, Ingo Molnar, Jason Baron, Jiri Olsa, LKML

On Thu, 2011-06-23 at 15:45 +0300, Avi Kivity wrote:
> On 06/23/2011 03:22 PM, Avi Kivity wrote:
> > On 06/21/2011 05:35 AM, Xiao Guangrong wrote:
> >> The key of module is out of __stop___jump_table, it causes the events
> >> of modules does not work
> >>
> >
> > What's the status of this patch? 
> 
> Oh, it's just two days out.  Didn't mean to sound impatient.

I've been working on other things than tracing lately.

> 
> > I'm affected by this as well (I'm guessing the same module is 
> > involved).  I'm near the end of a bisect, but there's probably no 
> > point given this patch.
> >
> 
> I can confirm it fixes my issue.
> 
> Tested-by: Avi Kivity <avi@redhat.com>
> 

Thanks, I'll queue it up for 3.0 and start my tests on it.

-- Steve



^ permalink raw reply	[flat|nested] 8+ messages in thread

* [tip:perf/urgent] jump_label: Fix jump_label update for modules
  2011-06-21  2:35 [PATCH v2] jump_label: fix jump_label update Xiao Guangrong
                   ` (2 preceding siblings ...)
  2011-06-23 12:22 ` Avi Kivity
@ 2011-07-01 15:12 ` tip-bot for Xiao Guangrong
  3 siblings, 0 replies; 8+ messages in thread
From: tip-bot for Xiao Guangrong @ 2011-07-01 15:12 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, hpa, mingo, xiaoguangrong, rostedt, johannes, tglx,
	jbaron, mingo, avi

Commit-ID:  140fe3b1ab9c082182ef13359fab4ddba95c24c3
Gitweb:     http://git.kernel.org/tip/140fe3b1ab9c082182ef13359fab4ddba95c24c3
Author:     Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
AuthorDate: Tue, 21 Jun 2011 10:35:55 +0800
Committer:  Steven Rostedt <rostedt@goodmis.org>
CommitDate: Wed, 29 Jun 2011 09:59:17 -0400

jump_label: Fix jump_label update for modules

The jump labels entries for modules do not stop at __stop__jump_table,
but after mod->jump_entries + mod_num_jump_entries.

By checking the wrong end point, module trace events never get enabled.

Cc: Ingo Molnar <mingo@elte.hu>
Acked-by: Jason Baron <jbaron@redhat.com>
Tested-by: Avi Kivity <avi@redhat.com>
Tested-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
Link: http://lkml.kernel.org/r/4E00038B.2060404@cn.fujitsu.com
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
 kernel/jump_label.c |   14 +++++++++-----
 1 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/kernel/jump_label.c b/kernel/jump_label.c
index fa27e75..a8ce450 100644
--- a/kernel/jump_label.c
+++ b/kernel/jump_label.c
@@ -375,15 +375,19 @@ int jump_label_text_reserved(void *start, void *end)
 
 static void jump_label_update(struct jump_label_key *key, int enable)
 {
-	struct jump_entry *entry = key->entries;
-
-	/* if there are no users, entry can be NULL */
-	if (entry)
-		__jump_label_update(key, entry, __stop___jump_table, enable);
+	struct jump_entry *entry = key->entries, *stop = __stop___jump_table;
 
 #ifdef CONFIG_MODULES
+	struct module *mod = __module_address((jump_label_t)key);
+
 	__jump_label_mod_update(key, enable);
+
+	if (mod)
+		stop = mod->jump_entries + mod->num_jump_entries;
 #endif
+	/* if there are no users, entry can be NULL */
+	if (entry)
+		__jump_label_update(key, entry, stop, enable);
 }
 
 #endif

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2011-07-01 15:12 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-06-21  2:35 [PATCH v2] jump_label: fix jump_label update Xiao Guangrong
2011-06-21  9:44 ` Jiri Olsa
2011-06-21 15:47   ` Jason Baron
2011-06-21 15:44 ` Jason Baron
2011-06-23 12:22 ` Avi Kivity
2011-06-23 12:45   ` Avi Kivity
2011-06-23 17:44     ` Steven Rostedt
2011-07-01 15:12 ` [tip:perf/urgent] jump_label: Fix jump_label update for modules tip-bot for Xiao Guangrong

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.