diff options
author | Joonsoo Kim <js1304@gmail.com> | 2012-05-18 09:01:17 -0400 |
---|---|---|
committer | Pekka Enberg <penberg@kernel.org> | 2012-06-20 03:13:01 -0400 |
commit | d24ac77f71ded6a013bacb09f359eac0b0f29a80 (patch) | |
tree | d789878540f7a3ea6ea5a6c9a730fb0985cad19a /mm/slub.c | |
parent | e7b691b085fda913830e5280ae6f724b2a63c824 (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.c | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -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 | */ | ||
1876 | static void unfreeze_partials(struct kmem_cache *s) | 1880 | static 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 | */ |
2169 | static inline void *get_freelist(struct kmem_cache *s, struct page *page) | 2175 | static 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")); |