* [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).