Commit 4524ea04 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] slab: Use CPU notifiers

- allocate memory for cpu buffers in cpu_up_prepare

- start the timer in cpu_online

- free the memory for cpu buffers in cpu_up_cancel.
parent b464df2e
...@@ -524,15 +524,15 @@ static int __devinit cpuup_callback(struct notifier_block *nfb, ...@@ -524,15 +524,15 @@ static int __devinit cpuup_callback(struct notifier_block *nfb,
unsigned long action, unsigned long action,
void *hcpu) void *hcpu)
{ {
int cpu = (int)hcpu; long cpu = (long)hcpu;
if (action == CPU_ONLINE) { struct list_head *p;
struct list_head *p;
struct array_cache *nc;
switch (action) {
case CPU_UP_PREPARE:
down(&cache_chain_sem); down(&cache_chain_sem);
list_for_each(p, &cache_chain) { list_for_each(p, &cache_chain) {
int memsize; int memsize;
struct array_cache *nc;
kmem_cache_t* cachep = list_entry(p, kmem_cache_t, next); kmem_cache_t* cachep = list_entry(p, kmem_cache_t, next);
memsize = sizeof(void*)*cachep->limit+sizeof(struct array_cache); memsize = sizeof(void*)*cachep->limit+sizeof(struct array_cache);
...@@ -551,12 +551,26 @@ static int __devinit cpuup_callback(struct notifier_block *nfb, ...@@ -551,12 +551,26 @@ static int __devinit cpuup_callback(struct notifier_block *nfb,
spin_unlock_irq(&cachep->spinlock); spin_unlock_irq(&cachep->spinlock);
} }
up(&cache_chain_sem);
break;
case CPU_ONLINE:
if (g_cpucache_up == FULL) if (g_cpucache_up == FULL)
start_cpu_timer(cpu); start_cpu_timer(cpu);
break;
case CPU_UP_CANCELED:
down(&cache_chain_sem);
list_for_each(p, &cache_chain) {
struct array_cache *nc;
kmem_cache_t* cachep = list_entry(p, kmem_cache_t, next);
nc = cachep->array[cpu];
cachep->array[cpu] = NULL;
kfree(nc);
}
up(&cache_chain_sem); up(&cache_chain_sem);
break;
} }
return NOTIFY_OK; return NOTIFY_OK;
bad: bad:
up(&cache_chain_sem); up(&cache_chain_sem);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment