linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/1] MM: slqb, fix per_cpu access
@ 2009-11-01 22:12 Jiri Slaby
  2009-11-02  4:22 ` Tejun Heo
  2009-11-02 13:23 ` Rusty Russell
  0 siblings, 2 replies; 9+ messages in thread
From: Jiri Slaby @ 2009-11-01 22:12 UTC (permalink / raw)
  To: npiggin
  Cc: linux-mm, linux-kernel, Jiri Slaby, Tejun Heo, Rusty Russell,
	Christoph Lameter

We cannot use the same local variable name as the declared per_cpu
variable since commit "percpu: remove per_cpu__ prefix."

Otherwise we would see crashes like:
general protection fault: 0000 [#1] SMP
last sysfs file:
CPU 1
Modules linked in:
Pid: 1, comm: swapper Tainted: G        W  2.6.32-rc5-mm1_64 #860
RIP: 0010:[<ffffffff8142ff94>]  [<ffffffff8142ff94>] start_cpu_timer+0x2b/0x87
...

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Nick Piggin <npiggin@suse.de>
Cc: Tejun Heo <tj@kernel.org>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Christoph Lameter <cl@linux-foundation.org>
---
 mm/slqb.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/mm/slqb.c b/mm/slqb.c
index e745d9a..27f5025 100644
--- a/mm/slqb.c
+++ b/mm/slqb.c
@@ -2770,16 +2770,16 @@ static DEFINE_PER_CPU(struct delayed_work, cache_trim_work);
 
 static void __cpuinit start_cpu_timer(int cpu)
 {
-	struct delayed_work *cache_trim_work = &per_cpu(cache_trim_work, cpu);
+	struct delayed_work *_cache_trim_work = &per_cpu(cache_trim_work, cpu);
 
 	/*
 	 * When this gets called from do_initcalls via cpucache_init(),
 	 * init_workqueues() has already run, so keventd will be setup
 	 * at that time.
 	 */
-	if (keventd_up() && cache_trim_work->work.func == NULL) {
-		INIT_DELAYED_WORK(cache_trim_work, cache_trim_worker);
-		schedule_delayed_work_on(cpu, cache_trim_work,
+	if (keventd_up() && _cache_trim_work->work.func == NULL) {
+		INIT_DELAYED_WORK(_cache_trim_work, cache_trim_worker);
+		schedule_delayed_work_on(cpu, _cache_trim_work,
 					__round_jiffies_relative(HZ, cpu));
 	}
 }
-- 
1.6.4.2

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

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

* Re: [PATCH 1/1] MM: slqb, fix per_cpu access
  2009-11-01 22:12 [PATCH 1/1] MM: slqb, fix per_cpu access Jiri Slaby
@ 2009-11-02  4:22 ` Tejun Heo
  2009-11-02  8:49   ` Jiri Slaby
  2009-11-02 13:23 ` Rusty Russell
  1 sibling, 1 reply; 9+ messages in thread
From: Tejun Heo @ 2009-11-02  4:22 UTC (permalink / raw)
  To: Jiri Slaby
  Cc: npiggin, linux-mm, linux-kernel, Rusty Russell, Christoph Lameter

Hello,

Jiri Slaby wrote:
> @@ -2770,16 +2770,16 @@ static DEFINE_PER_CPU(struct delayed_work, cache_trim_work);

How about renaming cache_trim_work to slqb_cache_trim_work?  Another
percpu name requirement is global uniqueness (for s390 and alpha
support), so prefixing perpcu variables with subsystem name usually
resolves situations like this better.

Thanks.

-- 
tejun

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

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

* [PATCH 1/1] MM: slqb, fix per_cpu access
  2009-11-02  4:22 ` Tejun Heo
@ 2009-11-02  8:49   ` Jiri Slaby
  2009-11-02 11:48     ` Dave Young
                       ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Jiri Slaby @ 2009-11-02  8:49 UTC (permalink / raw)
  To: npiggin
  Cc: linux-mm, linux-kernel, Jiri Slaby, Tejun Heo, Rusty Russell,
	Christoph Lameter

We cannot use the same local variable name as the declared per_cpu
variable since commit "percpu: remove per_cpu__ prefix."

Otherwise we would see crashes like:
general protection fault: 0000 [#1] SMP
last sysfs file:
CPU 1
Modules linked in:
Pid: 1, comm: swapper Tainted: G        W  2.6.32-rc5-mm1_64 #860
RIP: 0010:[<ffffffff8142ff94>]  [<ffffffff8142ff94>] start_cpu_timer+0x2b/0x87
...

Use slqb_ prefix for the global variable so that we don't collide
even with the rest of the kernel (s390 and alpha need this).

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Nick Piggin <npiggin@suse.de>
Cc: Tejun Heo <tj@kernel.org>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Christoph Lameter <cl@linux-foundation.org>
---
 mm/slqb.c |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/mm/slqb.c b/mm/slqb.c
index e745d9a..e4bb53f 100644
--- a/mm/slqb.c
+++ b/mm/slqb.c
@@ -2766,11 +2766,12 @@ out:
 	schedule_delayed_work(work, round_jiffies_relative(3*HZ));
 }
 
-static DEFINE_PER_CPU(struct delayed_work, cache_trim_work);
+static DEFINE_PER_CPU(struct delayed_work, slqb_cache_trim_work);
 
 static void __cpuinit start_cpu_timer(int cpu)
 {
-	struct delayed_work *cache_trim_work = &per_cpu(cache_trim_work, cpu);
+	struct delayed_work *cache_trim_work = &per_cpu(slqb_cache_trim_work,
+			cpu);
 
 	/*
 	 * When this gets called from do_initcalls via cpucache_init(),
@@ -3136,8 +3137,9 @@ static int __cpuinit slab_cpuup_callback(struct notifier_block *nfb,
 
 	case CPU_DOWN_PREPARE:
 	case CPU_DOWN_PREPARE_FROZEN:
-		cancel_rearming_delayed_work(&per_cpu(cache_trim_work, cpu));
-		per_cpu(cache_trim_work, cpu).work.func = NULL;
+		cancel_rearming_delayed_work(&per_cpu(slqb_cache_trim_work,
+					cpu));
+		per_cpu(slqb_cache_trim_work, cpu).work.func = NULL;
 		break;
 
 	case CPU_UP_CANCELED:
-- 
1.6.4.2

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

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

* Re: [PATCH 1/1] MM: slqb, fix per_cpu access
  2009-11-02  8:49   ` Jiri Slaby
@ 2009-11-02 11:48     ` Dave Young
  2009-11-02 15:24     ` Tejun Heo
  2009-11-02 16:24     ` Christoph Lameter
  2 siblings, 0 replies; 9+ messages in thread
From: Dave Young @ 2009-11-02 11:48 UTC (permalink / raw)
  To: Jiri Slaby
  Cc: npiggin, linux-mm, linux-kernel, Tejun Heo, Rusty Russell,
	Christoph Lameter

On Mon, Nov 2, 2009 at 4:49 PM, Jiri Slaby <jirislaby@gmail.com> wrote:
> We cannot use the same local variable name as the declared per_cpu
> variable since commit "percpu: remove per_cpu__ prefix."
>
> Otherwise we would see crashes like:
> general protection fault: 0000 [#1] SMP
> last sysfs file:
> CPU 1
> Modules linked in:
> Pid: 1, comm: swapper Tainted: G        W  2.6.32-rc5-mm1_64 #860
> RIP: 0010:[<ffffffff8142ff94>]  [<ffffffff8142ff94>] start_cpu_timer+0x2b/0x87
> ...
>
> Use slqb_ prefix for the global variable so that we don't collide
> even with the rest of the kernel (s390 and alpha need this).
>
> Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
> Cc: Nick Piggin <npiggin@suse.de>
> Cc: Tejun Heo <tj@kernel.org>
> Cc: Rusty Russell <rusty@rustcorp.com.au>
> Cc: Christoph Lameter <cl@linux-foundation.org>

Tested-by: Dave Young <hidave.darkstar@gmail.com>

> ---
>  mm/slqb.c |   10 ++++++----
>  1 files changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/mm/slqb.c b/mm/slqb.c
> index e745d9a..e4bb53f 100644
> --- a/mm/slqb.c
> +++ b/mm/slqb.c
> @@ -2766,11 +2766,12 @@ out:
>        schedule_delayed_work(work, round_jiffies_relative(3*HZ));
>  }
>
> -static DEFINE_PER_CPU(struct delayed_work, cache_trim_work);
> +static DEFINE_PER_CPU(struct delayed_work, slqb_cache_trim_work);
>
>  static void __cpuinit start_cpu_timer(int cpu)
>  {
> -       struct delayed_work *cache_trim_work = &per_cpu(cache_trim_work, cpu);
> +       struct delayed_work *cache_trim_work = &per_cpu(slqb_cache_trim_work,
> +                       cpu);
>
>        /*
>         * When this gets called from do_initcalls via cpucache_init(),
> @@ -3136,8 +3137,9 @@ static int __cpuinit slab_cpuup_callback(struct notifier_block *nfb,
>
>        case CPU_DOWN_PREPARE:
>        case CPU_DOWN_PREPARE_FROZEN:
> -               cancel_rearming_delayed_work(&per_cpu(cache_trim_work, cpu));
> -               per_cpu(cache_trim_work, cpu).work.func = NULL;
> +               cancel_rearming_delayed_work(&per_cpu(slqb_cache_trim_work,
> +                                       cpu));
> +               per_cpu(slqb_cache_trim_work, cpu).work.func = NULL;
>                break;
>
>        case CPU_UP_CANCELED:
> --
> 1.6.4.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>



-- 
Regards
dave

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

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

* Re: [PATCH 1/1] MM: slqb, fix per_cpu access
  2009-11-01 22:12 [PATCH 1/1] MM: slqb, fix per_cpu access Jiri Slaby
  2009-11-02  4:22 ` Tejun Heo
@ 2009-11-02 13:23 ` Rusty Russell
  2009-11-02 15:31   ` Jiri Slaby
  1 sibling, 1 reply; 9+ messages in thread
From: Rusty Russell @ 2009-11-02 13:23 UTC (permalink / raw)
  To: Jiri Slaby; +Cc: npiggin, linux-mm, linux-kernel, Tejun Heo, Christoph Lameter

On Mon, 2 Nov 2009 08:42:58 am Jiri Slaby wrote:
> We cannot use the same local variable name as the declared per_cpu
> variable since commit "percpu: remove per_cpu__ prefix."
> 
> Otherwise we would see crashes like:
> general protection fault: 0000 [#1] SMP
> last sysfs file:
> CPU 1
> Modules linked in:
> Pid: 1, comm: swapper Tainted: G        W  2.6.32-rc5-mm1_64 #860
> RIP: 0010:[<ffffffff8142ff94>]  [<ffffffff8142ff94>] start_cpu_timer+0x2b/0x87
> ...
> 
> Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
> Cc: Nick Piggin <npiggin@suse.de>
> Cc: Tejun Heo <tj@kernel.org>
> Cc: Rusty Russell <rusty@rustcorp.com.au>
> Cc: Christoph Lameter <cl@linux-foundation.org>
> ---
>  mm/slqb.c |    8 ++++----
>  1 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/mm/slqb.c b/mm/slqb.c
> index e745d9a..27f5025 100644
> --- a/mm/slqb.c
> +++ b/mm/slqb.c
> @@ -2770,16 +2770,16 @@ static DEFINE_PER_CPU(struct delayed_work, cache_trim_work);
>  
>  static void __cpuinit start_cpu_timer(int cpu)
>  {
> -	struct delayed_work *cache_trim_work = &per_cpu(cache_trim_work, cpu);
> +	struct delayed_work *_cache_trim_work = &per_cpu(cache_trim_work, cpu);
>  
>  	/*
>  	 * When this gets called from do_initcalls via cpucache_init(),
>  	 * init_workqueues() has already run, so keventd will be setup
>  	 * at that time.
>  	 */
> -	if (keventd_up() && cache_trim_work->work.func == NULL) {
> -		INIT_DELAYED_WORK(cache_trim_work, cache_trim_worker);
> -		schedule_delayed_work_on(cpu, cache_trim_work,
> +	if (keventd_up() && _cache_trim_work->work.func == NULL) {
> +		INIT_DELAYED_WORK(_cache_trim_work, cache_trim_worker);
> +		schedule_delayed_work_on(cpu, _cache_trim_work,
>  					__round_jiffies_relative(HZ, cpu));

How about calling the local var "trim"?

This actually makes the code more readable, IMHO.

Thanks,
Rusty.

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

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

* Re: [PATCH 1/1] MM: slqb, fix per_cpu access
  2009-11-02  8:49   ` Jiri Slaby
  2009-11-02 11:48     ` Dave Young
@ 2009-11-02 15:24     ` Tejun Heo
  2009-11-02 16:24     ` Christoph Lameter
  2 siblings, 0 replies; 9+ messages in thread
From: Tejun Heo @ 2009-11-02 15:24 UTC (permalink / raw)
  To: Jiri Slaby
  Cc: npiggin, linux-mm, linux-kernel, Rusty Russell, Christoph Lameter

2009e?? 11i?? 02i? 1/4  17:49, Jiri Slaby wrote:
> We cannot use the same local variable name as the declared per_cpu
> variable since commit "percpu: remove per_cpu__ prefix."
> 
> Otherwise we would see crashes like:
> general protection fault: 0000 [#1] SMP
> last sysfs file:
> CPU 1
> Modules linked in:
> Pid: 1, comm: swapper Tainted: G        W  2.6.32-rc5-mm1_64 #860
> RIP: 0010:[<ffffffff8142ff94>]  [<ffffffff8142ff94>] start_cpu_timer+0x2b/0x87
> ...
> 
> Use slqb_ prefix for the global variable so that we don't collide
> even with the rest of the kernel (s390 and alpha need this).
> 
> Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
> Cc: Nick Piggin <npiggin@suse.de>
> Cc: Tejun Heo <tj@kernel.org>
> Cc: Rusty Russell <rusty@rustcorp.com.au>
> Cc: Christoph Lameter <cl@linux-foundation.org>

Acked-by: Tejun Heo <tj@kernel.org>

Thanks.

-- 
tejun

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

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

* Re: [PATCH 1/1] MM: slqb, fix per_cpu access
  2009-11-02 13:23 ` Rusty Russell
@ 2009-11-02 15:31   ` Jiri Slaby
  2009-11-04  7:45     ` Rusty Russell
  0 siblings, 1 reply; 9+ messages in thread
From: Jiri Slaby @ 2009-11-02 15:31 UTC (permalink / raw)
  To: Rusty Russell
  Cc: npiggin, linux-mm, linux-kernel, Tejun Heo, Christoph Lameter

On 11/02/2009 02:23 PM, Rusty Russell wrote:
>> --- a/mm/slqb.c
>> +++ b/mm/slqb.c
>> @@ -2770,16 +2770,16 @@ static DEFINE_PER_CPU(struct delayed_work, cache_trim_work);
>>  
>>  static void __cpuinit start_cpu_timer(int cpu)
>>  {
>> -	struct delayed_work *cache_trim_work = &per_cpu(cache_trim_work, cpu);
>> +	struct delayed_work *_cache_trim_work = &per_cpu(cache_trim_work, cpu);
>>  
>>  	/*
>>  	 * When this gets called from do_initcalls via cpucache_init(),
>>  	 * init_workqueues() has already run, so keventd will be setup
>>  	 * at that time.
>>  	 */
>> -	if (keventd_up() && cache_trim_work->work.func == NULL) {
>> -		INIT_DELAYED_WORK(cache_trim_work, cache_trim_worker);
>> -		schedule_delayed_work_on(cpu, cache_trim_work,
>> +	if (keventd_up() && _cache_trim_work->work.func == NULL) {
>> +		INIT_DELAYED_WORK(_cache_trim_work, cache_trim_worker);
>> +		schedule_delayed_work_on(cpu, _cache_trim_work,
>>  					__round_jiffies_relative(HZ, cpu));
> 
> How about calling the local var "trim"?
> 
> This actually makes the code more readable, IMHO.

Please ignore this version of the patch. After this I sent a new one
which changes the global var name.

So the local variable is untouched there. If you want me to perform the
cleanup, let me know. In any case I'd make it trim_work instead of trim
which makes more sense to me.

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

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

* Re: [PATCH 1/1] MM: slqb, fix per_cpu access
  2009-11-02  8:49   ` Jiri Slaby
  2009-11-02 11:48     ` Dave Young
  2009-11-02 15:24     ` Tejun Heo
@ 2009-11-02 16:24     ` Christoph Lameter
  2 siblings, 0 replies; 9+ messages in thread
From: Christoph Lameter @ 2009-11-02 16:24 UTC (permalink / raw)
  To: Jiri Slaby; +Cc: npiggin, linux-mm, linux-kernel, Tejun Heo, Rusty Russell


Reviewed-by: Christoph Lameter <cl@linux-foundation.org>


--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

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

* Re: [PATCH 1/1] MM: slqb, fix per_cpu access
  2009-11-02 15:31   ` Jiri Slaby
@ 2009-11-04  7:45     ` Rusty Russell
  0 siblings, 0 replies; 9+ messages in thread
From: Rusty Russell @ 2009-11-04  7:45 UTC (permalink / raw)
  To: Jiri Slaby; +Cc: npiggin, linux-mm, linux-kernel, Tejun Heo, Christoph Lameter

On Tue, 3 Nov 2009 02:01:41 am Jiri Slaby wrote:
> >> -	struct delayed_work *cache_trim_work = &per_cpu(cache_trim_work, cpu);
> >> +	struct delayed_work *_cache_trim_work = &per_cpu(cache_trim_work, cpu);
> >>  
> >>  	/*
> >>  	 * When this gets called from do_initcalls via cpucache_init(),
> >>  	 * init_workqueues() has already run, so keventd will be setup
> >>  	 * at that time.
> >>  	 */
> >> -	if (keventd_up() && cache_trim_work->work.func == NULL) {
> >> -		INIT_DELAYED_WORK(cache_trim_work, cache_trim_worker);
> >> -		schedule_delayed_work_on(cpu, cache_trim_work,
> >> +	if (keventd_up() && _cache_trim_work->work.func == NULL) {
> >> +		INIT_DELAYED_WORK(_cache_trim_work, cache_trim_worker);
> >> +		schedule_delayed_work_on(cpu, _cache_trim_work,
> >>  					__round_jiffies_relative(HZ, cpu));
> > 
> > How about calling the local var "trim"?
> > 
> > This actually makes the code more readable, IMHO.
> 
> Please ignore this version of the patch. After this I sent a new one
> which changes the global var name.

OK, sure.  It's not worth changing unless you were doing a rename anyway.

> So the local variable is untouched there. If you want me to perform the
> cleanup, let me know. In any case I'd make it trim_work instead of trim
> which makes more sense to me.

This is getting pedantic and marginal, but the word "work" already appears
everywhere this var is used.  Either "XXX->work", or "INIT_DELAYED_WORK(XXX"
or "scheduled_delayed_work_on(cpu, XXX".

That's why I think the word "work" in unnecessary.

Hope that clarifies why I preferred "trim".
Rusty.

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

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

end of thread, other threads:[~2009-11-04  7:46 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-11-01 22:12 [PATCH 1/1] MM: slqb, fix per_cpu access Jiri Slaby
2009-11-02  4:22 ` Tejun Heo
2009-11-02  8:49   ` Jiri Slaby
2009-11-02 11:48     ` Dave Young
2009-11-02 15:24     ` Tejun Heo
2009-11-02 16:24     ` Christoph Lameter
2009-11-02 13:23 ` Rusty Russell
2009-11-02 15:31   ` Jiri Slaby
2009-11-04  7:45     ` Rusty Russell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox