net: rds: use this_cpu_ptr per-cpu helper
Subsystems (3)
PATCH v3 2/9 net: rds: use this_cpu_ptr per-cpu helper
From: Shan Wei <[email protected]>
---
no changes vs v2.
--- net/rds/ib_recv.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
net/rds/ib_recv.c +1 -1
@@ -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 */
Signature · 1 line
1.7.1
Quoted 8 lines · Shan Wei
net/rds/ib_recv.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)net/rds/ib_recv.c +0
-0
net/rds/ib_recv.c static void rds_ib_recv_cache_put(struct list_head *new_item, · line 427
Quoted 6 lines
net/rds/ib_recv.c +1
-1@@ -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))
?
Christoph Lameter said, at 2012/11/10 4:09:
Quoted 7 lines
Review
Quoted 3 lines
(quoted diff) +1
-1- 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?
net/rds/ib.h +1 -1
@@ -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; };
net/rds/ib_recv.c +13 -11
@@ -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); }
Quoted 11 lines · Shan Wei
__percpuannotations in structrds_ib_refill_cacheis missing.you mean that read/write fields of struct
rds_ib_cache_headusing __this_cpu_* operation like following?
How about it?net/rds/ib.h +0
-0
net/rds/ib.h struct rds_ib_cache_head { · line 53
Quoted 5 lines
net/rds/ib.h +1
-1@@ -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.