linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 2/9] net: rds: use this_cpu_ptr per-cpu helper
@ 2012-11-09  2:20 Shan Wei
  2012-11-09 20:09 ` Christoph Lameter
  0 siblings, 1 reply; 4+ messages in thread
From: Shan Wei @ 2012-11-09  2:20 UTC (permalink / raw)
  To: venkat.x.venkatsubra, David Miller, rds-devel, NetDev,
	Kernel-Maillist, cl, Shan Wei

From: Shan Wei <davidshan@tencent.com>

Signed-off-by: Shan Wei <davidshan@tencent.com>
Reviewed-by: Christoph Lameter <cl@linux.com>
---
no changes vs v2.
---
 net/rds/ib_recv.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/net/rds/ib_recv.c b/net/rds/ib_recv.c
index 8d19491..a4a5064 100644
--- a/net/rds/ib_recv.c
+++ b/net/rds/ib_recv.c
@@ -423,7 +423,7 @@ static void rds_ib_recv_cache_put(struct list_head *new_item,
 
 	local_irq_save(flags);
 
-	chp = per_cpu_ptr(cache->percpu, smp_processor_id());
+	chp = this_cpu_ptr(cache->percpu);
 	if (!chp->first)
 		INIT_LIST_HEAD(new_item);
 	else /* put on front */
-- 
1.7.1

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

* Re: [PATCH v3 2/9] net: rds: use this_cpu_ptr per-cpu helper
  2012-11-09  2:20 [PATCH v3 2/9] net: rds: use this_cpu_ptr per-cpu helper Shan Wei
@ 2012-11-09 20:09 ` Christoph Lameter
  2012-11-12 12:47   ` Shan Wei
  0 siblings, 1 reply; 4+ messages in thread
From: Christoph Lameter @ 2012-11-09 20:09 UTC (permalink / raw)
  To: Shan Wei
  Cc: venkat.x.venkatsubra, David Miller, rds-devel, NetDev, Kernel-Maillist

On Fri, 9 Nov 2012, Shan Wei wrote:

>  net/rds/ib_recv.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/net/rds/ib_recv.c b/net/rds/ib_recv.c
> index 8d19491..a4a5064 100644
> --- a/net/rds/ib_recv.c
> +++ b/net/rds/ib_recv.c
> @@ -423,7 +423,7 @@ static void rds_ib_recv_cache_put(struct list_head *new_item,
>
>  	local_irq_save(flags);
>
> -	chp = per_cpu_ptr(cache->percpu, smp_processor_id());
> +	chp = this_cpu_ptr(cache->percpu);
>  	if (!chp->first)

if (!__this_cpu_read(cache-0>percpu->first))

?


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

* Re: [PATCH v3 2/9] net: rds: use this_cpu_ptr per-cpu helper
  2012-11-09 20:09 ` Christoph Lameter
@ 2012-11-12 12:47   ` Shan Wei
  2012-11-12 23:31     ` Christoph Lameter
  0 siblings, 1 reply; 4+ messages in thread
From: Shan Wei @ 2012-11-12 12:47 UTC (permalink / raw)
  To: Christoph Lameter
  Cc: venkat.x.venkatsubra, David Miller, rds-devel, NetDev, Kernel-Maillist

Christoph Lameter said, at 2012/11/10 4:09:
>> -	chp = per_cpu_ptr(cache->percpu, smp_processor_id());
>> +	chp = this_cpu_ptr(cache->percpu);
>>  	if (!chp->first)
> 
> if (!__this_cpu_read(cache-0>percpu->first))
> 
> ?

__percpu annotations in struct rds_ib_refill_cache is missing.

you mean that read/write fields of struct rds_ib_cache_head
using __this_cpu_* operation like following?
How about it?

diff --git a/net/rds/ib.h b/net/rds/ib.h
index 8d2b3d5..7280ab8 100644
--- a/net/rds/ib.h
+++ b/net/rds/ib.h
@@ -50,7 +50,7 @@ struct rds_ib_cache_head {
 };
 
 struct rds_ib_refill_cache {
-	struct rds_ib_cache_head *percpu;
+	struct rds_ib_cache_head __percpu *percpu;
 	struct list_head	 *xfer;
 	struct list_head	 *ready;
 };
diff --git a/net/rds/ib_recv.c b/net/rds/ib_recv.c
index 8d19491..8c5bc85 100644
--- a/net/rds/ib_recv.c
+++ b/net/rds/ib_recv.c
@@ -418,20 +418,21 @@ static void rds_ib_recv_cache_put(struct list_head *new_item,
 				 struct rds_ib_refill_cache *cache)
 {
 	unsigned long flags;
-	struct rds_ib_cache_head *chp;
 	struct list_head *old;
+	struct list_head __percpu *chpfirst;
 
 	local_irq_save(flags);
 
-	chp = per_cpu_ptr(cache->percpu, smp_processor_id());
-	if (!chp->first)
+	chpfirst = __this_cpu_read(cache->percpu->first);
+	if (!chpfirst)
 		INIT_LIST_HEAD(new_item);
 	else /* put on front */
-		list_add_tail(new_item, chp->first);
-	chp->first = new_item;
-	chp->count++;
+		list_add_tail(new_item, chpfirst);
 
-	if (chp->count < RDS_IB_RECYCLE_BATCH_COUNT)
+	__this_cpu_write(chpfirst, new_item);
+	__this_cpu_inc(cache->percpu->count);
+
+	if (__this_cpu_read(cache->percpu->count) < RDS_IB_RECYCLE_BATCH_COUNT)
 		goto end;
 
 	/*
@@ -443,12 +444,13 @@ static void rds_ib_recv_cache_put(struct list_head *new_item,
 	do {
 		old = xchg(&cache->xfer, NULL);
 		if (old)
-			list_splice_entire_tail(old, chp->first);
-		old = cmpxchg(&cache->xfer, NULL, chp->first);
+			list_splice_entire_tail(old, chpfirst);
+		old = cmpxchg(&cache->xfer, NULL, chpfirst);
 	} while (old);
 
-	chp->first = NULL;
-	chp->count = 0;
+
+	__this_cpu_write(chpfirst, NULL);
+	__this_cpu_write(cache->percpu->count, 0);
 end:
 	local_irq_restore(flags);
 }


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

* Re: [PATCH v3 2/9] net: rds: use this_cpu_ptr per-cpu helper
  2012-11-12 12:47   ` Shan Wei
@ 2012-11-12 23:31     ` Christoph Lameter
  0 siblings, 0 replies; 4+ messages in thread
From: Christoph Lameter @ 2012-11-12 23:31 UTC (permalink / raw)
  To: Shan Wei
  Cc: venkat.x.venkatsubra, David Miller, rds-devel, NetDev, Kernel-Maillist

On Mon, 12 Nov 2012, Shan Wei wrote:

> __percpu annotations in struct rds_ib_refill_cache is missing.
>
> you mean that read/write fields of struct rds_ib_cache_head
> using __this_cpu_* operation like following?
> How about it?
>
> diff --git a/net/rds/ib.h b/net/rds/ib.h
> index 8d2b3d5..7280ab8 100644
> --- a/net/rds/ib.h
> +++ b/net/rds/ib.h
> @@ -50,7 +50,7 @@ struct rds_ib_cache_head {
>  };
>
>  struct rds_ib_refill_cache {
> -	struct rds_ib_cache_head *percpu;
> +	struct rds_ib_cache_head __percpu *percpu;

That looks ok.

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

end of thread, other threads:[~2012-11-12 23:31 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-11-09  2:20 [PATCH v3 2/9] net: rds: use this_cpu_ptr per-cpu helper Shan Wei
2012-11-09 20:09 ` Christoph Lameter
2012-11-12 12:47   ` Shan Wei
2012-11-12 23:31     ` Christoph Lameter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).