[patch 05/41] cpu alloc: Percpu_counter conversion

Christoph Lameter
2008-05-30T04:02:26Z

[-- Attachment #1: cpu_alloc_percpu_counter_conversion --]
[-- Type: text/plain, Size: 2210 bytes --]

Use cpu_alloc instead of allocpercpu.

Signed-off-by: Christoph Lameter <clameter@sgi.com>
---
lib/percpu_counter.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)

Index: linux-2.6/lib/percpu_counter.c
===================================================================
--- linux-2.6.orig/lib/percpu_counter.c 2008-05-28 17:56:17.000000000 -0700
+++ linux-2.6/lib/percpu_counter.c 2008-05-28 18:30:25.000000000 -0700
@@ -20,7 +20,7 @@

spin_lock(&fbc->lock);
for_each_possible_cpu(cpu) {
- s32 *pcount = per_cpu_ptr(fbc->counters, cpu);
+ s32 *pcount = CPU_PTR(fbc->counters, cpu);
*pcount = 0;
}
fbc->count = amount;
@@ -31,20 +31,18 @@
void __percpu_counter_add(struct percpu_counter *fbc, s64 amount, s32 batch)
{
s64 count;
- s32 *pcount;
- int cpu = get_cpu();

- pcount = per_cpu_ptr(fbc->counters, cpu);
- count = *pcount + amount;
+ preempt_disable();
+ count = __CPU_READ(*fbc->counters) + amount;
if (count >= batch || count <= -batch) {
spin_lock(&fbc->lock);
fbc->count += count;
- *pcount = 0;
+ __CPU_WRITE(*fbc->counters, 0);
spin_unlock(&fbc->lock);
} else {
- *pcount = count;
+ __CPU_WRITE(*fbc->counters, count);
}
- put_cpu();
+ preempt_enable();
}
EXPORT_SYMBOL(__percpu_counter_add);

@@ -60,7 +58,7 @@
spin_lock(&fbc->lock);
ret = fbc->count;
for_each_online_cpu(cpu) {
- s32 *pcount = per_cpu_ptr(fbc->counters, cpu);
+ s32 *pcount = CPU_PTR(fbc->counters, cpu);
ret += *pcount;
}
spin_unlock(&fbc->lock);
@@ -74,7 +72,7 @@
{
spin_lock_init(&fbc->lock);
fbc->count = amount;
- fbc->counters = alloc_percpu(s32);
+ fbc->counters = CPU_ALLOC(s32, GFP_KERNEL|__GFP_ZERO);
if (!fbc->counters)
return -ENOMEM;
#ifdef CONFIG_HOTPLUG_CPU
@@ -101,7 +99,7 @@
if (!fbc->counters)
return;

- free_percpu(fbc->counters);
+ CPU_FREE(fbc->counters);
fbc->counters = NULL;
#ifdef CONFIG_HOTPLUG_CPU
mutex_lock(&percpu_counters_lock);
@@ -128,7 +126,7 @@
unsigned long flags;

spin_lock_irqsave(&fbc->lock, flags);
- pcount = per_cpu_ptr(fbc->counters, cpu);
+ pcount = CPU_PTR(fbc->counters, cpu);
fbc->count += *pcount;
*pcount = 0;
spin_unlock_irqrestore(&fbc->lock, flags);

--