From 68dc1f57b295bfcd0341f59c30d8474385bbd86f Mon Sep 17 00:00:00 2001 From: Christoph Lameter Date: Tue, 6 Nov 2007 11:33:53 -0800 Subject: [PATCH] cpu alloc: SRCU Signed-off-by: Christoph Lameter --- kernel/rcutorture.c | 4 ++-- kernel/srcu.c | 13 +++++++------ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/kernel/rcutorture.c b/kernel/rcutorture.c index c3e165c..e78f65e 100644 --- a/kernel/rcutorture.c +++ b/kernel/rcutorture.c @@ -441,8 +441,8 @@ static int srcu_torture_stats(char *page) torture_type, TORTURE_FLAG, idx); for_each_possible_cpu(cpu) { cnt += sprintf(&page[cnt], " %d(%d,%d)", cpu, - per_cpu_ptr(srcu_ctl.per_cpu_ref, cpu)->c[!idx], - per_cpu_ptr(srcu_ctl.per_cpu_ref, cpu)->c[idx]); + CPU_PTR(srcu_ctl.per_cpu_ref, cpu)->c[!idx], + CPU_PTR(srcu_ctl.per_cpu_ref, cpu)->c[idx]); } cnt += sprintf(&page[cnt], "\n"); return cnt; diff --git a/kernel/srcu.c b/kernel/srcu.c index 3507cab..ffe84ec 100644 --- a/kernel/srcu.c +++ b/kernel/srcu.c @@ -26,7 +26,7 @@ #include #include -#include +#include #include #include #include @@ -46,7 +46,8 @@ int init_srcu_struct(struct srcu_struct *sp) { sp->completed = 0; mutex_init(&sp->mutex); - sp->per_cpu_ref = alloc_percpu(struct srcu_struct_array); + sp->per_cpu_ref = CPU_ALLOC(struct srcu_struct_array, + GFP_KERNEL|__GFP_ZERO); return (sp->per_cpu_ref ? 0 : -ENOMEM); } @@ -62,7 +63,7 @@ static int srcu_readers_active_idx(struct srcu_struct *sp, int idx) sum = 0; for_each_possible_cpu(cpu) - sum += per_cpu_ptr(sp->per_cpu_ref, cpu)->c[idx]; + sum += CPU_PTR(sp->per_cpu_ref, cpu)->c[idx]; return sum; } @@ -94,7 +95,7 @@ void cleanup_srcu_struct(struct srcu_struct *sp) WARN_ON(sum); /* Leakage unless caller handles error. */ if (sum != 0) return; - free_percpu(sp->per_cpu_ref); + CPU_FREE(sp->per_cpu_ref); sp->per_cpu_ref = NULL; } @@ -113,7 +114,7 @@ int srcu_read_lock(struct srcu_struct *sp) preempt_disable(); idx = sp->completed & 0x1; barrier(); /* ensure compiler looks -once- at sp->completed. */ - per_cpu_ptr(sp->per_cpu_ref, smp_processor_id())->c[idx]++; + THIS_CPU(sp->per_cpu_ref)->c[idx]++; srcu_barrier(); /* ensure compiler won't misorder critical section. */ preempt_enable(); return idx; @@ -133,7 +134,7 @@ void srcu_read_unlock(struct srcu_struct *sp, int idx) { preempt_disable(); srcu_barrier(); /* ensure compiler won't misorder critical section. */ - per_cpu_ptr(sp->per_cpu_ref, smp_processor_id())->c[idx]--; + THIS_CPU(sp->per_cpu_ref)->c[idx]--; preempt_enable(); } -- 1.5.3.4