aboutsummaryrefslogtreecommitdiffstats
path: root/mm/slub.c
diff options
context:
space:
mode:
authorJoonsoo Kim <js1304@gmail.com>2012-05-18 09:01:17 -0400
committerPekka Enberg <penberg@kernel.org>2012-06-20 03:13:01 -0400
commitd24ac77f71ded6a013bacb09f359eac0b0f29a80 (patch)
treed789878540f7a3ea6ea5a6c9a730fb0985cad19a /mm/slub.c
parente7b691b085fda913830e5280ae6f724b2a63c824 (diff)
slub: use __cmpxchg_double_slab() at interrupt disabled place
get_freelist(), unfreeze_partials() are only called with interrupt disabled, so __cmpxchg_double_slab() is suitable. Acked-by: Christoph Lameter <cl@linux.com> Signed-off-by: Joonsoo Kim <js1304@gmail.com> Signed-off-by: Pekka Enberg <penberg@kernel.org>
Diffstat (limited to 'mm/slub.c')
-rw-r--r--mm/slub.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/mm/slub.c b/mm/slub.c
index 348fed1643f4..4f406cd899b7 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -1872,7 +1872,11 @@ redo:
1872 } 1872 }
1873} 1873}
1874 1874
1875/* Unfreeze all the cpu partial slabs */ 1875/*
1876 * Unfreeze all the cpu partial slabs.
1877 *
1878 * This function must be called with interrupt disabled.
1879 */
1876static void unfreeze_partials(struct kmem_cache *s) 1880static void unfreeze_partials(struct kmem_cache *s)
1877{ 1881{
1878 struct kmem_cache_node *n = NULL; 1882 struct kmem_cache_node *n = NULL;
@@ -1928,7 +1932,7 @@ static void unfreeze_partials(struct kmem_cache *s)
1928 l = m; 1932 l = m;
1929 } 1933 }
1930 1934
1931 } while (!cmpxchg_double_slab(s, page, 1935 } while (!__cmpxchg_double_slab(s, page,
1932 old.freelist, old.counters, 1936 old.freelist, old.counters,
1933 new.freelist, new.counters, 1937 new.freelist, new.counters,
1934 "unfreezing slab")); 1938 "unfreezing slab"));
@@ -2165,6 +2169,8 @@ static inline void *new_slab_objects(struct kmem_cache *s, gfp_t flags,
2165 * The page is still frozen if the return value is not NULL. 2169 * The page is still frozen if the return value is not NULL.
2166 * 2170 *
2167 * If this function returns NULL then the page has been unfrozen. 2171 * If this function returns NULL then the page has been unfrozen.
2172 *
2173 * This function must be called with interrupt disabled.
2168 */ 2174 */
2169static inline void *get_freelist(struct kmem_cache *s, struct page *page) 2175static inline void *get_freelist(struct kmem_cache *s, struct page *page)
2170{ 2176{
@@ -2182,7 +2188,7 @@ static inline void *get_freelist(struct kmem_cache *s, struct page *page)
2182 new.inuse = page->objects; 2188 new.inuse = page->objects;
2183 new.frozen = freelist != NULL; 2189 new.frozen = freelist != NULL;
2184 2190
2185 } while (!cmpxchg_double_slab(s, page, 2191 } while (!__cmpxchg_double_slab(s, page,
2186 freelist, counters, 2192 freelist, counters,
2187 NULL, new.counters, 2193 NULL, new.counters,
2188 "get_freelist")); 2194 "get_freelist"));