diff options
Diffstat (limited to 'mm/slob.c')
| -rw-r--r-- | mm/slob.c | 52 |
1 files changed, 1 insertions, 51 deletions
| @@ -270,10 +270,9 @@ struct kmem_cache *kmem_cache_create(const char *name, size_t size, | |||
| 270 | } | 270 | } |
| 271 | EXPORT_SYMBOL(kmem_cache_create); | 271 | EXPORT_SYMBOL(kmem_cache_create); |
| 272 | 272 | ||
| 273 | int kmem_cache_destroy(struct kmem_cache *c) | 273 | void kmem_cache_destroy(struct kmem_cache *c) |
| 274 | { | 274 | { |
| 275 | slob_free(c, sizeof(struct kmem_cache)); | 275 | slob_free(c, sizeof(struct kmem_cache)); |
| 276 | return 0; | ||
| 277 | } | 276 | } |
| 278 | EXPORT_SYMBOL(kmem_cache_destroy); | 277 | EXPORT_SYMBOL(kmem_cache_destroy); |
| 279 | 278 | ||
| @@ -339,52 +338,3 @@ void kmem_cache_init(void) | |||
| 339 | 338 | ||
| 340 | mod_timer(&slob_timer, jiffies + HZ); | 339 | mod_timer(&slob_timer, jiffies + HZ); |
| 341 | } | 340 | } |
| 342 | |||
| 343 | atomic_t slab_reclaim_pages = ATOMIC_INIT(0); | ||
| 344 | EXPORT_SYMBOL(slab_reclaim_pages); | ||
| 345 | |||
| 346 | #ifdef CONFIG_SMP | ||
| 347 | |||
| 348 | void *__alloc_percpu(size_t size) | ||
| 349 | { | ||
| 350 | int i; | ||
| 351 | struct percpu_data *pdata = kmalloc(sizeof (*pdata), GFP_KERNEL); | ||
| 352 | |||
| 353 | if (!pdata) | ||
| 354 | return NULL; | ||
| 355 | |||
| 356 | for_each_possible_cpu(i) { | ||
| 357 | pdata->ptrs[i] = kmalloc(size, GFP_KERNEL); | ||
| 358 | if (!pdata->ptrs[i]) | ||
| 359 | goto unwind_oom; | ||
| 360 | memset(pdata->ptrs[i], 0, size); | ||
| 361 | } | ||
| 362 | |||
| 363 | /* Catch derefs w/o wrappers */ | ||
| 364 | return (void *) (~(unsigned long) pdata); | ||
| 365 | |||
| 366 | unwind_oom: | ||
| 367 | while (--i >= 0) { | ||
| 368 | if (!cpu_possible(i)) | ||
| 369 | continue; | ||
| 370 | kfree(pdata->ptrs[i]); | ||
| 371 | } | ||
| 372 | kfree(pdata); | ||
| 373 | return NULL; | ||
| 374 | } | ||
| 375 | EXPORT_SYMBOL(__alloc_percpu); | ||
| 376 | |||
| 377 | void | ||
| 378 | free_percpu(const void *objp) | ||
| 379 | { | ||
| 380 | int i; | ||
| 381 | struct percpu_data *p = (struct percpu_data *) (~(unsigned long) objp); | ||
| 382 | |||
| 383 | for_each_possible_cpu(i) | ||
| 384 | kfree(p->ptrs[i]); | ||
| 385 | |||
| 386 | kfree(p); | ||
| 387 | } | ||
| 388 | EXPORT_SYMBOL(free_percpu); | ||
| 389 | |||
| 390 | #endif | ||
