lkml.org 
[lkml]   [2002]   [Oct]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH] patch-slab-split-04-drain
part 4:

- spin_lock(); within the smp_call_function callback is now permitted,
remove/cleanup the workaround.


Untested due to lack of SMP test systems, but trivial.

--
Manfred
--- 2.5/mm/slab.c Fri Oct 4 19:05:15 2002
+++ build-2.5/mm/slab.c Fri Oct 4 19:36:13 2002
@@ -917,29 +917,19 @@

static void free_block (kmem_cache_t* cachep, void** objpp, int len);

-static void drain_cpu_caches(kmem_cache_t *cachep)
+static void do_drain(void *arg)
{
- ccupdate_struct_t new;
- int i;
-
- memset(&new.new,0,sizeof(new.new));
-
- new.cachep = cachep;
+ kmem_cache_t *cachep = (kmem_cache_t*)arg;
+ cpucache_t *cc;

- down(&cache_chain_sem);
- smp_call_function_all_cpus(do_ccupdate_local, (void *)&new);
+ cc = cc_data(cachep);
+ free_block(cachep, &cc_entry(cc)[0], cc->avail);
+ cc->avail = 0;
+}

- for (i = 0; i < NR_CPUS; i++) {
- cpucache_t* ccold = new.new[i];
- if (!ccold || (ccold->avail == 0))
- continue;
- local_irq_disable();
- free_block(cachep, cc_entry(ccold), ccold->avail);
- local_irq_enable();
- ccold->avail = 0;
- }
- smp_call_function_all_cpus(do_ccupdate_local, (void *)&new);
- up(&cache_chain_sem);
+static void drain_cpu_caches(kmem_cache_t *cachep)
+{
+ smp_call_function_all_cpus(do_drain, cachep);
}

static int __cache_shrink(kmem_cache_t *cachep)
\
 
 \ /
  Last update: 2005-03-22 13:29    [W:0.112 / U:0.784 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site