1
2
3
4
5
6
7#include <linux/slab.h>
8
9#include <linux/mm.h>
10#include <linux/poison.h>
11#include <linux/interrupt.h>
12#include <linux/memory.h>
13#include <linux/compiler.h>
14#include <linux/module.h>
15#include <linux/cpu.h>
16#include <linux/uaccess.h>
17#include <linux/seq_file.h>
18#include <linux/proc_fs.h>
19#include <asm/cacheflush.h>
20#include <asm/tlbflush.h>
21#include <asm/page.h>
22#include <linux/memcontrol.h>
23
24#define CREATE_TRACE_POINTS
25#include <trace/events/kmem.h>
26
27#include "slab.h"
28
29enum slab_state slab_state;
30LIST_HEAD(slab_caches);
31DEFINE_MUTEX(slab_mutex);
32struct kmem_cache *kmem_cache;
33
34static LIST_HEAD(slab_caches_to_rcu_destroy);
35static void slab_caches_to_rcu_destroy_workfn(struct work_struct *work);
36static DECLARE_WORK(slab_caches_to_rcu_destroy_work,
37 slab_caches_to_rcu_destroy_workfn);
38
39
40
41
42#define SLAB_NEVER_MERGE (SLAB_RED_ZONE | SLAB_POISON | SLAB_STORE_USER | \
43 SLAB_TRACE | SLAB_TYPESAFE_BY_RCU | SLAB_NOLEAKTRACE | \
44 SLAB_FAILSLAB | SLAB_KASAN)
45
46#define SLAB_MERGE_SAME (SLAB_RECLAIM_ACCOUNT | SLAB_CACHE_DMA | \
47 SLAB_NOTRACK | SLAB_ACCOUNT)
48
49
50
51
52static bool slab_nomerge = !IS_ENABLED(CONFIG_SLAB_MERGE_DEFAULT);
53
54static int __init setup_slab_nomerge(char *str)
55{
56 slab_nomerge = true;
57 return 1;
58}
59
60#ifdef CONFIG_SLUB
61__setup_param("slub_nomerge", slub_nomerge, setup_slab_nomerge, 0);
62#endif
63
64__setup("slab_nomerge", setup_slab_nomerge);
65
66
67
68
69unsigned int kmem_cache_size(struct kmem_cache *s)
70{
71 return s->object_size;
72}
73EXPORT_SYMBOL(kmem_cache_size);
74
75#ifdef CONFIG_DEBUG_VM
76static int kmem_cache_sanity_check(const char *name, size_t size)
77{
78 struct kmem_cache *s = NULL;
79
80 if (!name || in_interrupt() || size < sizeof(void *) ||
81 size > KMALLOC_MAX_SIZE) {
82 pr_err("kmem_cache_create(%s) integrity check failed\n", name);
83 return -EINVAL;
84 }
85
86 list_for_each_entry(s, &slab_caches, list) {
87 char tmp;
88 int res;
89
90
91
92
93
94
95 res = probe_kernel_address(s->name, tmp);
96 if (res) {
97 pr_err("Slab cache with size %d has lost its name\n",
98 s->object_size);
99 continue;
100 }
101 }
102
103 WARN_ON(strchr(name, ' '));
104 return 0;
105}
106#else
107static inline int kmem_cache_sanity_check(const char *name, size_t size)
108{
109 return 0;
110}
111#endif
112
113void __kmem_cache_free_bulk(struct kmem_cache *s, size_t nr, void **p)
114{
115 size_t i;
116
117 for (i = 0; i < nr; i++) {
118 if (s)
119 kmem_cache_free(s, p[i]);
120 else
121 kfree(p[i]);
122 }
123}
124
125int __kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t nr,
126 void **p)
127{
128 size_t i;
129
130 for (i = 0; i < nr; i++) {
131 void *x = p[i] = kmem_cache_alloc(s, flags);
132 if (!x) {
133 __kmem_cache_free_bulk(s, i, p);
134 return 0;
135 }
136 }
137 return i;
138}
139
140#if defined(CONFIG_MEMCG) && !defined(CONFIG_SLOB)
141
142LIST_HEAD(slab_root_caches);
143
144void slab_init_memcg_params(struct kmem_cache *s)
145{
146 s->memcg_params.root_cache = NULL;
147 RCU_INIT_POINTER(s->memcg_params.memcg_caches, NULL);
148 INIT_LIST_HEAD(&s->memcg_params.children);
149}
150
151static int init_memcg_params(struct kmem_cache *s,
152 struct mem_cgroup *memcg, struct kmem_cache *root_cache)
153{
154 struct memcg_cache_array *arr;
155
156 if (root_cache) {
157 s->memcg_params.root_cache = root_cache;
158 s->memcg_params.memcg = memcg;
159 INIT_LIST_HEAD(&s->memcg_params.children_node);
160 INIT_LIST_HEAD(&s->memcg_params.kmem_caches_node);
161 return 0;
162 }
163
164 slab_init_memcg_params(s);
165
166 if (!memcg_nr_cache_ids)
167 return 0;
168
169 arr = kvzalloc(sizeof(struct memcg_cache_array) +
170 memcg_nr_cache_ids * sizeof(void *),
171 GFP_KERNEL);
172 if (!arr)
173 return -ENOMEM;
174
175 RCU_INIT_POINTER(s->memcg_params.memcg_caches, arr);
176 return 0;
177}
178
179static void destroy_memcg_params(struct kmem_cache *s)
180{
181 if (is_root_cache(s))
182 kvfree(rcu_access_pointer(s->memcg_params.memcg_caches));
183}
184
185static void free_memcg_params(struct rcu_head *rcu)
186{
187 struct memcg_cache_array *old;
188
189 old = container_of(rcu, struct memcg_cache_array, rcu);
190 kvfree(old);
191}
192
193static int update_memcg_params(struct kmem_cache *s, int new_array_size)
194{
195 struct memcg_cache_array *old, *new;
196
197 new = kvzalloc(sizeof(struct memcg_cache_array) +
198 new_array_size * sizeof(void *), GFP_KERNEL);
199 if (!new)
200 return -ENOMEM;
201
202 old = rcu_dereference_protected(s->memcg_params.memcg_caches,
203 lockdep_is_held(&slab_mutex));
204 if (old)
205 memcpy(new->entries, old->entries,
206 memcg_nr_cache_ids * sizeof(void *));
207
208 rcu_assign_pointer(s->memcg_params.memcg_caches, new);
209 if (old)
210 call_rcu(&old->rcu, free_memcg_params);
211 return 0;
212}
213
214int memcg_update_all_caches(int num_memcgs)
215{
216 struct kmem_cache *s;
217 int ret = 0;
218
219 mutex_lock(&slab_mutex);
220 list_for_each_entry(s, &slab_root_caches, root_caches_node) {
221 ret = update_memcg_params(s, num_memcgs);
222
223
224
225
226 if (ret)
227 break;
228 }
229 mutex_unlock(&slab_mutex);
230 return ret;
231}
232
233void memcg_link_cache(struct kmem_cache *s)
234{
235 if (is_root_cache(s)) {
236 list_add(&s->root_caches_node, &slab_root_caches);
237 } else {
238 list_add(&s->memcg_params.children_node,
239 &s->memcg_params.root_cache->memcg_params.children);
240 list_add(&s->memcg_params.kmem_caches_node,
241 &s->memcg_params.memcg->kmem_caches);
242 }
243}
244
245static void memcg_unlink_cache(struct kmem_cache *s)
246{
247 if (is_root_cache(s)) {
248 list_del(&s->root_caches_node);
249 } else {
250 list_del(&s->memcg_params.children_node);
251 list_del(&s->memcg_params.kmem_caches_node);
252 }
253}
254#else
255static inline int init_memcg_params(struct kmem_cache *s,
256 struct mem_cgroup *memcg, struct kmem_cache *root_cache)
257{
258 return 0;
259}
260
261static inline void destroy_memcg_params(struct kmem_cache *s)
262{
263}
264
265static inline void memcg_unlink_cache(struct kmem_cache *s)
266{
267}
268#endif
269
270
271
272
273int slab_unmergeable(struct kmem_cache *s)
274{
275 if (slab_nomerge || (s->flags & SLAB_NEVER_MERGE))
276 return 1;
277
278 if (!is_root_cache(s))
279 return 1;
280
281 if (s->ctor)
282 return 1;
283
284
285
286
287 if (s->refcount < 0)
288 return 1;
289
290 return 0;
291}
292
293struct kmem_cache *find_mergeable(size_t size, size_t align,
294 unsigned long flags, const char *name, void (*ctor)(void *))
295{
296 struct kmem_cache *s;
297
298 if (slab_nomerge)
299 return NULL;
300
301 if (ctor)
302 return NULL;
303
304 size = ALIGN(size, sizeof(void *));
305 align = calculate_alignment(flags, align, size);
306 size = ALIGN(size, align);
307 flags = kmem_cache_flags(size, flags, name, NULL);
308
309 if (flags & SLAB_NEVER_MERGE)
310 return NULL;
311
312 list_for_each_entry_reverse(s, &slab_root_caches, root_caches_node) {
313 if (slab_unmergeable(s))
314 continue;
315
316 if (size > s->size)
317 continue;
318
319 if ((flags & SLAB_MERGE_SAME) != (s->flags & SLAB_MERGE_SAME))
320 continue;
321
322
323
324
325 if ((s->size & ~(align - 1)) != s->size)
326 continue;
327
328 if (s->size - size >= sizeof(void *))
329 continue;
330
331 if (IS_ENABLED(CONFIG_SLAB) && align &&
332 (align > s->align || s->align % align))
333 continue;
334
335 return s;
336 }
337 return NULL;
338}
339
340
341
342
343
344unsigned long calculate_alignment(unsigned long flags,
345 unsigned long align, unsigned long size)
346{
347
348
349
350
351
352
353
354 if (flags & SLAB_HWCACHE_ALIGN) {
355 unsigned long ralign = cache_line_size();
356 while (size <= ralign / 2)
357 ralign /= 2;
358 align = max(align, ralign);
359 }
360
361 if (align < ARCH_SLAB_MINALIGN)
362 align = ARCH_SLAB_MINALIGN;
363
364 return ALIGN(align, sizeof(void *));
365}
366
367static struct kmem_cache *create_cache(const char *name,
368 size_t object_size, size_t size, size_t align,
369 unsigned long flags, void (*ctor)(void *),
370 struct mem_cgroup *memcg, struct kmem_cache *root_cache)
371{
372 struct kmem_cache *s;
373 int err;
374
375 err = -ENOMEM;
376 s = kmem_cache_zalloc(kmem_cache, GFP_KERNEL);
377 if (!s)
378 goto out;
379
380 s->name = name;
381 s->object_size = object_size;
382 s->size = size;
383 s->align = align;
384 s->ctor = ctor;
385
386 err = init_memcg_params(s, memcg, root_cache);
387 if (err)
388 goto out_free_cache;
389
390 err = __kmem_cache_create(s, flags);
391 if (err)
392 goto out_free_cache;
393
394 s->refcount = 1;
395 list_add(&s->list, &slab_caches);
396 memcg_link_cache(s);
397out:
398 if (err)
399 return ERR_PTR(err);
400 return s;
401
402out_free_cache:
403 destroy_memcg_params(s);
404 kmem_cache_free(kmem_cache, s);
405 goto out;
406}
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432struct kmem_cache *
433kmem_cache_create(const char *name, size_t size, size_t align,
434 unsigned long flags, void (*ctor)(void *))
435{
436 struct kmem_cache *s = NULL;
437 const char *cache_name;
438 int err;
439
440 get_online_cpus();
441 get_online_mems();
442 memcg_get_cache_ids();
443
444 mutex_lock(&slab_mutex);
445
446 err = kmem_cache_sanity_check(name, size);
447 if (err) {
448 goto out_unlock;
449 }
450
451
452 if (flags & ~SLAB_FLAGS_PERMITTED) {
453 err = -EINVAL;
454 goto out_unlock;
455 }
456
457
458
459
460
461
462
463 flags &= CACHE_CREATE_MASK;
464
465 s = __kmem_cache_alias(name, size, align, flags, ctor);
466 if (s)
467 goto out_unlock;
468
469 cache_name = kstrdup_const(name, GFP_KERNEL);
470 if (!cache_name) {
471 err = -ENOMEM;
472 goto out_unlock;
473 }
474
475 s = create_cache(cache_name, size, size,
476 calculate_alignment(flags, align, size),
477 flags, ctor, NULL, NULL);
478 if (IS_ERR(s)) {
479 err = PTR_ERR(s);
480 kfree_const(cache_name);
481 }
482
483out_unlock:
484 mutex_unlock(&slab_mutex);
485
486 memcg_put_cache_ids();
487 put_online_mems();
488 put_online_cpus();
489
490 if (err) {
491 if (flags & SLAB_PANIC)
492 panic("kmem_cache_create: Failed to create slab '%s'. Error %d\n",
493 name, err);
494 else {
495 pr_warn("kmem_cache_create(%s) failed with error %d\n",
496 name, err);
497 dump_stack();
498 }
499 return NULL;
500 }
501 return s;
502}
503EXPORT_SYMBOL(kmem_cache_create);
504
505static void slab_caches_to_rcu_destroy_workfn(struct work_struct *work)
506{
507 LIST_HEAD(to_destroy);
508 struct kmem_cache *s, *s2;
509
510
511
512
513
514
515
516
517
518
519 mutex_lock(&slab_mutex);
520 list_splice_init(&slab_caches_to_rcu_destroy, &to_destroy);
521 mutex_unlock(&slab_mutex);
522
523 if (list_empty(&to_destroy))
524 return;
525
526 rcu_barrier();
527
528 list_for_each_entry_safe(s, s2, &to_destroy, list) {
529#ifdef SLAB_SUPPORTS_SYSFS
530 sysfs_slab_release(s);
531#else
532 slab_kmem_cache_release(s);
533#endif
534 }
535}
536
537static int shutdown_cache(struct kmem_cache *s)
538{
539
540 kasan_cache_shutdown(s);
541
542 if (__kmem_cache_shutdown(s) != 0)
543 return -EBUSY;
544
545 memcg_unlink_cache(s);
546 list_del(&s->list);
547
548 if (s->flags & SLAB_TYPESAFE_BY_RCU) {
549 list_add_tail(&s->list, &slab_caches_to_rcu_destroy);
550 schedule_work(&slab_caches_to_rcu_destroy_work);
551 } else {
552#ifdef SLAB_SUPPORTS_SYSFS
553 sysfs_slab_release(s);
554#else
555 slab_kmem_cache_release(s);
556#endif
557 }
558
559 return 0;
560}
561
562#if defined(CONFIG_MEMCG) && !defined(CONFIG_SLOB)
563
564
565
566
567
568
569
570
571
572void memcg_create_kmem_cache(struct mem_cgroup *memcg,
573 struct kmem_cache *root_cache)
574{
575 static char memcg_name_buf[NAME_MAX + 1];
576 struct cgroup_subsys_state *css = &memcg->css;
577 struct memcg_cache_array *arr;
578 struct kmem_cache *s = NULL;
579 char *cache_name;
580 int idx;
581
582 get_online_cpus();
583 get_online_mems();
584
585 mutex_lock(&slab_mutex);
586
587
588
589
590
591 if (memcg->kmem_state != KMEM_ONLINE)
592 goto out_unlock;
593
594 idx = memcg_cache_id(memcg);
595 arr = rcu_dereference_protected(root_cache->memcg_params.memcg_caches,
596 lockdep_is_held(&slab_mutex));
597
598
599
600
601
602
603 if (arr->entries[idx])
604 goto out_unlock;
605
606 cgroup_name(css->cgroup, memcg_name_buf, sizeof(memcg_name_buf));
607 cache_name = kasprintf(GFP_KERNEL, "%s(%llu:%s)", root_cache->name,
608 css->serial_nr, memcg_name_buf);
609 if (!cache_name)
610 goto out_unlock;
611
612 s = create_cache(cache_name, root_cache->object_size,
613 root_cache->size, root_cache->align,
614 root_cache->flags & CACHE_CREATE_MASK,
615 root_cache->ctor, memcg, root_cache);
616
617
618
619
620
621 if (IS_ERR(s)) {
622 kfree(cache_name);
623 goto out_unlock;
624 }
625
626
627
628
629
630
631 smp_wmb();
632 arr->entries[idx] = s;
633
634out_unlock:
635 mutex_unlock(&slab_mutex);
636
637 put_online_mems();
638 put_online_cpus();
639}
640
641static void kmemcg_deactivate_workfn(struct work_struct *work)
642{
643 struct kmem_cache *s = container_of(work, struct kmem_cache,
644 memcg_params.deact_work);
645
646 get_online_cpus();
647 get_online_mems();
648
649 mutex_lock(&slab_mutex);
650
651 s->memcg_params.deact_fn(s);
652
653 mutex_unlock(&slab_mutex);
654
655 put_online_mems();
656 put_online_cpus();
657
658
659 css_put(&s->memcg_params.memcg->css);
660}
661
662static void kmemcg_deactivate_rcufn(struct rcu_head *head)
663{
664 struct kmem_cache *s = container_of(head, struct kmem_cache,
665 memcg_params.deact_rcu_head);
666
667
668
669
670
671
672 INIT_WORK(&s->memcg_params.deact_work, kmemcg_deactivate_workfn);
673 queue_work(memcg_kmem_cache_wq, &s->memcg_params.deact_work);
674}
675
676
677
678
679
680
681
682
683
684
685
686
687void slab_deactivate_memcg_cache_rcu_sched(struct kmem_cache *s,
688 void (*deact_fn)(struct kmem_cache *))
689{
690 if (WARN_ON_ONCE(is_root_cache(s)) ||
691 WARN_ON_ONCE(s->memcg_params.deact_fn))
692 return;
693
694
695 css_get(&s->memcg_params.memcg->css);
696
697 s->memcg_params.deact_fn = deact_fn;
698 call_rcu_sched(&s->memcg_params.deact_rcu_head, kmemcg_deactivate_rcufn);
699}
700
701void memcg_deactivate_kmem_caches(struct mem_cgroup *memcg)
702{
703 int idx;
704 struct memcg_cache_array *arr;
705 struct kmem_cache *s, *c;
706
707 idx = memcg_cache_id(memcg);
708
709 get_online_cpus();
710 get_online_mems();
711
712 mutex_lock(&slab_mutex);
713 list_for_each_entry(s, &slab_root_caches, root_caches_node) {
714 arr = rcu_dereference_protected(s->memcg_params.memcg_caches,
715 lockdep_is_held(&slab_mutex));
716 c = arr->entries[idx];
717 if (!c)
718 continue;
719
720 __kmemcg_cache_deactivate(c);
721 arr->entries[idx] = NULL;
722 }
723 mutex_unlock(&slab_mutex);
724
725 put_online_mems();
726 put_online_cpus();
727}
728
729void memcg_destroy_kmem_caches(struct mem_cgroup *memcg)
730{
731 struct kmem_cache *s, *s2;
732
733 get_online_cpus();
734 get_online_mems();
735
736 mutex_lock(&slab_mutex);
737 list_for_each_entry_safe(s, s2, &memcg->kmem_caches,
738 memcg_params.kmem_caches_node) {
739
740
741
742
743 BUG_ON(shutdown_cache(s));
744 }
745 mutex_unlock(&slab_mutex);
746
747 put_online_mems();
748 put_online_cpus();
749}
750
751static int shutdown_memcg_caches(struct kmem_cache *s)
752{
753 struct memcg_cache_array *arr;
754 struct kmem_cache *c, *c2;
755 LIST_HEAD(busy);
756 int i;
757
758 BUG_ON(!is_root_cache(s));
759
760
761
762
763
764 arr = rcu_dereference_protected(s->memcg_params.memcg_caches,
765 lockdep_is_held(&slab_mutex));
766 for_each_memcg_cache_index(i) {
767 c = arr->entries[i];
768 if (!c)
769 continue;
770 if (shutdown_cache(c))
771
772
773
774
775
776 list_move(&c->memcg_params.children_node, &busy);
777 else
778
779
780
781
782
783
784 arr->entries[i] = NULL;
785 }
786
787
788
789
790
791 list_for_each_entry_safe(c, c2, &s->memcg_params.children,
792 memcg_params.children_node)
793 shutdown_cache(c);
794
795 list_splice(&busy, &s->memcg_params.children);
796
797
798
799
800
801 if (!list_empty(&s->memcg_params.children))
802 return -EBUSY;
803 return 0;
804}
805#else
806static inline int shutdown_memcg_caches(struct kmem_cache *s)
807{
808 return 0;
809}
810#endif
811
812void slab_kmem_cache_release(struct kmem_cache *s)
813{
814 __kmem_cache_release(s);
815 destroy_memcg_params(s);
816 kfree_const(s->name);
817 kmem_cache_free(kmem_cache, s);
818}
819
820void kmem_cache_destroy(struct kmem_cache *s)
821{
822 int err;
823
824 if (unlikely(!s))
825 return;
826
827 get_online_cpus();
828 get_online_mems();
829
830 mutex_lock(&slab_mutex);
831
832 s->refcount--;
833 if (s->refcount)
834 goto out_unlock;
835
836 err = shutdown_memcg_caches(s);
837 if (!err)
838 err = shutdown_cache(s);
839
840 if (err) {
841 pr_err("kmem_cache_destroy %s: Slab cache still has objects\n",
842 s->name);
843 dump_stack();
844 }
845out_unlock:
846 mutex_unlock(&slab_mutex);
847
848 put_online_mems();
849 put_online_cpus();
850}
851EXPORT_SYMBOL(kmem_cache_destroy);
852
853
854
855
856
857
858
859
860int kmem_cache_shrink(struct kmem_cache *cachep)
861{
862 int ret;
863
864 get_online_cpus();
865 get_online_mems();
866 kasan_cache_shrink(cachep);
867 ret = __kmem_cache_shrink(cachep);
868 put_online_mems();
869 put_online_cpus();
870 return ret;
871}
872EXPORT_SYMBOL(kmem_cache_shrink);
873
874bool slab_is_available(void)
875{
876 return slab_state >= UP;
877}
878
879#ifndef CONFIG_SLOB
880
881void __init create_boot_cache(struct kmem_cache *s, const char *name, size_t size,
882 unsigned long flags)
883{
884 int err;
885
886 s->name = name;
887 s->size = s->object_size = size;
888 s->align = calculate_alignment(flags, ARCH_KMALLOC_MINALIGN, size);
889
890 slab_init_memcg_params(s);
891
892 err = __kmem_cache_create(s, flags);
893
894 if (err)
895 panic("Creation of kmalloc slab %s size=%zu failed. Reason %d\n",
896 name, size, err);
897
898 s->refcount = -1;
899}
900
901struct kmem_cache *__init create_kmalloc_cache(const char *name, size_t size,
902 unsigned long flags)
903{
904 struct kmem_cache *s = kmem_cache_zalloc(kmem_cache, GFP_NOWAIT);
905
906 if (!s)
907 panic("Out of memory when creating slab %s\n", name);
908
909 create_boot_cache(s, name, size, flags);
910 list_add(&s->list, &slab_caches);
911 memcg_link_cache(s);
912 s->refcount = 1;
913 return s;
914}
915
916struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1];
917EXPORT_SYMBOL(kmalloc_caches);
918
919#ifdef CONFIG_ZONE_DMA
920struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1];
921EXPORT_SYMBOL(kmalloc_dma_caches);
922#endif
923
924
925
926
927
928
929
930static s8 size_index[24] = {
931 3,
932 4,
933 5,
934 5,
935 6,
936 6,
937 6,
938 6,
939 1,
940 1,
941 1,
942 1,
943 7,
944 7,
945 7,
946 7,
947 2,
948 2,
949 2,
950 2,
951 2,
952 2,
953 2,
954 2
955};
956
957static inline int size_index_elem(size_t bytes)
958{
959 return (bytes - 1) / 8;
960}
961
962
963
964
965
966struct kmem_cache *kmalloc_slab(size_t size, gfp_t flags)
967{
968 int index;
969
970 if (unlikely(size > KMALLOC_MAX_SIZE)) {
971 WARN_ON_ONCE(!(flags & __GFP_NOWARN));
972 return NULL;
973 }
974
975 if (size <= 192) {
976 if (!size)
977 return ZERO_SIZE_PTR;
978
979 index = size_index[size_index_elem(size)];
980 } else
981 index = fls(size - 1);
982
983#ifdef CONFIG_ZONE_DMA
984 if (unlikely((flags & GFP_DMA)))
985 return kmalloc_dma_caches[index];
986
987#endif
988 return kmalloc_caches[index];
989}
990
991
992
993
994
995
996const struct kmalloc_info_struct kmalloc_info[] __initconst = {
997 {NULL, 0}, {"kmalloc-96", 96},
998 {"kmalloc-192", 192}, {"kmalloc-8", 8},
999 {"kmalloc-16", 16}, {"kmalloc-32", 32},
1000 {"kmalloc-64", 64}, {"kmalloc-128", 128},
1001 {"kmalloc-256", 256}, {"kmalloc-512", 512},
1002 {"kmalloc-1024", 1024}, {"kmalloc-2048", 2048},
1003 {"kmalloc-4096", 4096}, {"kmalloc-8192", 8192},
1004 {"kmalloc-16384", 16384}, {"kmalloc-32768", 32768},
1005 {"kmalloc-65536", 65536}, {"kmalloc-131072", 131072},
1006 {"kmalloc-262144", 262144}, {"kmalloc-524288", 524288},
1007 {"kmalloc-1048576", 1048576}, {"kmalloc-2097152", 2097152},
1008 {"kmalloc-4194304", 4194304}, {"kmalloc-8388608", 8388608},
1009 {"kmalloc-16777216", 16777216}, {"kmalloc-33554432", 33554432},
1010 {"kmalloc-67108864", 67108864}
1011};
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024void __init setup_kmalloc_cache_index_table(void)
1025{
1026 int i;
1027
1028 BUILD_BUG_ON(KMALLOC_MIN_SIZE > 256 ||
1029 (KMALLOC_MIN_SIZE & (KMALLOC_MIN_SIZE - 1)));
1030
1031 for (i = 8; i < KMALLOC_MIN_SIZE; i += 8) {
1032 int elem = size_index_elem(i);
1033
1034 if (elem >= ARRAY_SIZE(size_index))
1035 break;
1036 size_index[elem] = KMALLOC_SHIFT_LOW;
1037 }
1038
1039 if (KMALLOC_MIN_SIZE >= 64) {
1040
1041
1042
1043
1044 for (i = 64 + 8; i <= 96; i += 8)
1045 size_index[size_index_elem(i)] = 7;
1046
1047 }
1048
1049 if (KMALLOC_MIN_SIZE >= 128) {
1050
1051
1052
1053
1054
1055 for (i = 128 + 8; i <= 192; i += 8)
1056 size_index[size_index_elem(i)] = 8;
1057 }
1058}
1059
1060static void __init new_kmalloc_cache(int idx, unsigned long flags)
1061{
1062 kmalloc_caches[idx] = create_kmalloc_cache(kmalloc_info[idx].name,
1063 kmalloc_info[idx].size, flags);
1064}
1065
1066
1067
1068
1069
1070
1071void __init create_kmalloc_caches(unsigned long flags)
1072{
1073 int i;
1074
1075 for (i = KMALLOC_SHIFT_LOW; i <= KMALLOC_SHIFT_HIGH; i++) {
1076 if (!kmalloc_caches[i])
1077 new_kmalloc_cache(i, flags);
1078
1079
1080
1081
1082
1083
1084 if (KMALLOC_MIN_SIZE <= 32 && !kmalloc_caches[1] && i == 6)
1085 new_kmalloc_cache(1, flags);
1086 if (KMALLOC_MIN_SIZE <= 64 && !kmalloc_caches[2] && i == 7)
1087 new_kmalloc_cache(2, flags);
1088 }
1089
1090
1091 slab_state = UP;
1092
1093#ifdef CONFIG_ZONE_DMA
1094 for (i = 0; i <= KMALLOC_SHIFT_HIGH; i++) {
1095 struct kmem_cache *s = kmalloc_caches[i];
1096
1097 if (s) {
1098 int size = kmalloc_size(i);
1099 char *n = kasprintf(GFP_NOWAIT,
1100 "dma-kmalloc-%d", size);
1101
1102 BUG_ON(!n);
1103 kmalloc_dma_caches[i] = create_kmalloc_cache(n,
1104 size, SLAB_CACHE_DMA | flags);
1105 }
1106 }
1107#endif
1108}
1109#endif
1110
1111
1112
1113
1114
1115
1116void *kmalloc_order(size_t size, gfp_t flags, unsigned int order)
1117{
1118 void *ret;
1119 struct page *page;
1120
1121 flags |= __GFP_COMP;
1122 page = alloc_pages(flags, order);
1123 ret = page ? page_address(page) : NULL;
1124 kmemleak_alloc(ret, size, 1, flags);
1125 kasan_kmalloc_large(ret, size, flags);
1126 return ret;
1127}
1128EXPORT_SYMBOL(kmalloc_order);
1129
1130#ifdef CONFIG_TRACING
1131void *kmalloc_order_trace(size_t size, gfp_t flags, unsigned int order)
1132{
1133 void *ret = kmalloc_order(size, flags, order);
1134 trace_kmalloc(_RET_IP_, ret, size, PAGE_SIZE << order, flags);
1135 return ret;
1136}
1137EXPORT_SYMBOL(kmalloc_order_trace);
1138#endif
1139
1140#ifdef CONFIG_SLAB_FREELIST_RANDOM
1141
1142static void freelist_randomize(struct rnd_state *state, unsigned int *list,
1143 size_t count)
1144{
1145 size_t i;
1146 unsigned int rand;
1147
1148 for (i = 0; i < count; i++)
1149 list[i] = i;
1150
1151
1152 for (i = count - 1; i > 0; i--) {
1153 rand = prandom_u32_state(state);
1154 rand %= (i + 1);
1155 swap(list[i], list[rand]);
1156 }
1157}
1158
1159
1160int cache_random_seq_create(struct kmem_cache *cachep, unsigned int count,
1161 gfp_t gfp)
1162{
1163 struct rnd_state state;
1164
1165 if (count < 2 || cachep->random_seq)
1166 return 0;
1167
1168 cachep->random_seq = kcalloc(count, sizeof(unsigned int), gfp);
1169 if (!cachep->random_seq)
1170 return -ENOMEM;
1171
1172
1173 prandom_seed_state(&state, get_random_long());
1174
1175 freelist_randomize(&state, cachep->random_seq, count);
1176 return 0;
1177}
1178
1179
1180void cache_random_seq_destroy(struct kmem_cache *cachep)
1181{
1182 kfree(cachep->random_seq);
1183 cachep->random_seq = NULL;
1184}
1185#endif
1186
1187#ifdef CONFIG_SLABINFO
1188
1189#ifdef CONFIG_SLAB
1190#define SLABINFO_RIGHTS (S_IWUSR | S_IRUSR)
1191#else
1192#define SLABINFO_RIGHTS S_IRUSR
1193#endif
1194
1195static void print_slabinfo_header(struct seq_file *m)
1196{
1197
1198
1199
1200
1201#ifdef CONFIG_DEBUG_SLAB
1202 seq_puts(m, "slabinfo - version: 2.1 (statistics)\n");
1203#else
1204 seq_puts(m, "slabinfo - version: 2.1\n");
1205#endif
1206 seq_puts(m, "# name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab>");
1207 seq_puts(m, " : tunables <limit> <batchcount> <sharedfactor>");
1208 seq_puts(m, " : slabdata <active_slabs> <num_slabs> <sharedavail>");
1209#ifdef CONFIG_DEBUG_SLAB
1210 seq_puts(m, " : globalstat <listallocs> <maxobjs> <grown> <reaped> <error> <maxfreeable> <nodeallocs> <remotefrees> <alienoverflow>");
1211 seq_puts(m, " : cpustat <allochit> <allocmiss> <freehit> <freemiss>");
1212#endif
1213 seq_putc(m, '\n');
1214}
1215
1216void *slab_start(struct seq_file *m, loff_t *pos)
1217{
1218 mutex_lock(&slab_mutex);
1219 return seq_list_start(&slab_root_caches, *pos);
1220}
1221
1222void *slab_next(struct seq_file *m, void *p, loff_t *pos)
1223{
1224 return seq_list_next(p, &slab_root_caches, pos);
1225}
1226
1227void slab_stop(struct seq_file *m, void *p)
1228{
1229 mutex_unlock(&slab_mutex);
1230}
1231
1232static void
1233memcg_accumulate_slabinfo(struct kmem_cache *s, struct slabinfo *info)
1234{
1235 struct kmem_cache *c;
1236 struct slabinfo sinfo;
1237
1238 if (!is_root_cache(s))
1239 return;
1240
1241 for_each_memcg_cache(c, s) {
1242 memset(&sinfo, 0, sizeof(sinfo));
1243 get_slabinfo(c, &sinfo);
1244
1245 info->active_slabs += sinfo.active_slabs;
1246 info->num_slabs += sinfo.num_slabs;
1247 info->shared_avail += sinfo.shared_avail;
1248 info->active_objs += sinfo.active_objs;
1249 info->num_objs += sinfo.num_objs;
1250 }
1251}
1252
1253static void cache_show(struct kmem_cache *s, struct seq_file *m)
1254{
1255 struct slabinfo sinfo;
1256
1257 memset(&sinfo, 0, sizeof(sinfo));
1258 get_slabinfo(s, &sinfo);
1259
1260 memcg_accumulate_slabinfo(s, &sinfo);
1261
1262 seq_printf(m, "%-17s %6lu %6lu %6u %4u %4d",
1263 cache_name(s), sinfo.active_objs, sinfo.num_objs, s->size,
1264 sinfo.objects_per_slab, (1 << sinfo.cache_order));
1265
1266 seq_printf(m, " : tunables %4u %4u %4u",
1267 sinfo.limit, sinfo.batchcount, sinfo.shared);
1268 seq_printf(m, " : slabdata %6lu %6lu %6lu",
1269 sinfo.active_slabs, sinfo.num_slabs, sinfo.shared_avail);
1270 slabinfo_show_stats(m, s);
1271 seq_putc(m, '\n');
1272}
1273
1274static int slab_show(struct seq_file *m, void *p)
1275{
1276 struct kmem_cache *s = list_entry(p, struct kmem_cache, root_caches_node);
1277
1278 if (p == slab_root_caches.next)
1279 print_slabinfo_header(m);
1280 cache_show(s, m);
1281 return 0;
1282}
1283
1284#if defined(CONFIG_MEMCG) && !defined(CONFIG_SLOB)
1285void *memcg_slab_start(struct seq_file *m, loff_t *pos)
1286{
1287 struct mem_cgroup *memcg = mem_cgroup_from_css(seq_css(m));
1288
1289 mutex_lock(&slab_mutex);
1290 return seq_list_start(&memcg->kmem_caches, *pos);
1291}
1292
1293void *memcg_slab_next(struct seq_file *m, void *p, loff_t *pos)
1294{
1295 struct mem_cgroup *memcg = mem_cgroup_from_css(seq_css(m));
1296
1297 return seq_list_next(p, &memcg->kmem_caches, pos);
1298}
1299
1300void memcg_slab_stop(struct seq_file *m, void *p)
1301{
1302 mutex_unlock(&slab_mutex);
1303}
1304
1305int memcg_slab_show(struct seq_file *m, void *p)
1306{
1307 struct kmem_cache *s = list_entry(p, struct kmem_cache,
1308 memcg_params.kmem_caches_node);
1309 struct mem_cgroup *memcg = mem_cgroup_from_css(seq_css(m));
1310
1311 if (p == memcg->kmem_caches.next)
1312 print_slabinfo_header(m);
1313 cache_show(s, m);
1314 return 0;
1315}
1316#endif
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331static const struct seq_operations slabinfo_op = {
1332 .start = slab_start,
1333 .next = slab_next,
1334 .stop = slab_stop,
1335 .show = slab_show,
1336};
1337
1338static int slabinfo_open(struct inode *inode, struct file *file)
1339{
1340 return seq_open(file, &slabinfo_op);
1341}
1342
1343static const struct file_operations proc_slabinfo_operations = {
1344 .open = slabinfo_open,
1345 .read = seq_read,
1346 .write = slabinfo_write,
1347 .llseek = seq_lseek,
1348 .release = seq_release,
1349};
1350
1351static int __init slab_proc_init(void)
1352{
1353 proc_create("slabinfo", SLABINFO_RIGHTS, NULL,
1354 &proc_slabinfo_operations);
1355 return 0;
1356}
1357module_init(slab_proc_init);
1358#endif
1359
1360static __always_inline void *__do_krealloc(const void *p, size_t new_size,
1361 gfp_t flags)
1362{
1363 void *ret;
1364 size_t ks = 0;
1365
1366 if (p)
1367 ks = ksize(p);
1368
1369 if (ks >= new_size) {
1370 kasan_krealloc((void *)p, new_size, flags);
1371 return (void *)p;
1372 }
1373
1374 ret = kmalloc_track_caller(new_size, flags);
1375 if (ret && p)
1376 memcpy(ret, p, ks);
1377
1378 return ret;
1379}
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391void *__krealloc(const void *p, size_t new_size, gfp_t flags)
1392{
1393 if (unlikely(!new_size))
1394 return ZERO_SIZE_PTR;
1395
1396 return __do_krealloc(p, new_size, flags);
1397
1398}
1399EXPORT_SYMBOL(__krealloc);
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412void *krealloc(const void *p, size_t new_size, gfp_t flags)
1413{
1414 void *ret;
1415
1416 if (unlikely(!new_size)) {
1417 kfree(p);
1418 return ZERO_SIZE_PTR;
1419 }
1420
1421 ret = __do_krealloc(p, new_size, flags);
1422 if (ret && p != ret)
1423 kfree(p);
1424
1425 return ret;
1426}
1427EXPORT_SYMBOL(krealloc);
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440void kzfree(const void *p)
1441{
1442 size_t ks;
1443 void *mem = (void *)p;
1444
1445 if (unlikely(ZERO_OR_NULL_PTR(mem)))
1446 return;
1447 ks = ksize(mem);
1448 memset(mem, 0, ks);
1449 kfree(mem);
1450}
1451EXPORT_SYMBOL(kzfree);
1452
1453
1454EXPORT_TRACEPOINT_SYMBOL(kmalloc);
1455EXPORT_TRACEPOINT_SYMBOL(kmem_cache_alloc);
1456EXPORT_TRACEPOINT_SYMBOL(kmalloc_node);
1457EXPORT_TRACEPOINT_SYMBOL(kmem_cache_alloc_node);
1458EXPORT_TRACEPOINT_SYMBOL(kfree);
1459EXPORT_TRACEPOINT_SYMBOL(kmem_cache_free);
1460