Lines Matching +full:- +full:s
1 // SPDX-License-Identifier: GPL-2.0
10 * gcc -o slabinfo slabinfo.c
84 int output_lines = -1;
114 "slabinfo [-aABDefhilLnoPrsStTUvXz1] [N=K] [-dafzput] [slab-regexp]\n" in usage()
115 "-a|--aliases Show aliases\n" in usage()
116 "-A|--activity Most active slabs first\n" in usage()
117 "-B|--Bytes Show size in bytes\n" in usage()
118 "-D|--display-active Switch line format to activity\n" in usage()
119 "-e|--empty Show empty slabs\n" in usage()
120 "-f|--first-alias Show first alias\n" in usage()
121 "-h|--help Show usage information\n" in usage()
122 "-i|--inverted Inverted list\n" in usage()
123 "-l|--slabs Show slabs\n" in usage()
124 "-L|--Loss Sort by loss\n" in usage()
125 "-n|--numa Show NUMA information\n" in usage()
126 "-N|--lines=K Show the first K slabs\n" in usage()
127 "-o|--ops Show kmem_cache_ops\n" in usage()
128 "-P|--partial Sort by number of partial slabs\n" in usage()
129 "-r|--report Detailed report on single slabs\n" in usage()
130 "-s|--shrink Shrink slabs\n" in usage()
131 "-S|--Size Sort by size\n" in usage()
132 "-t|--tracking Show alloc/free information\n" in usage()
133 "-T|--Totals Show summary information\n" in usage()
134 "-U|--Unreclaim Show unreclaimable slabs only\n" in usage()
135 "-v|--validate Validate slabs\n" in usage()
136 "-X|--Xtotals Show extended summary information\n" in usage()
137 "-z|--zero Include empty slabs\n" in usage()
138 "-1|--1ref Single reference\n" in usage()
141 "-d | --debug Switch off all debug options\n" in usage()
142 "-da | --debug=a Switch on all debug options (--debug=FZPU)\n" in usage()
145 "-d[afzput] | --debug=[afzput]\n" in usage()
152 "\nSorting options (--Loss, --Size, --Partial) are mutually exclusive\n" in usage()
164 fatal("%s, Try using superuser\n", strerror(errno)); in read_obj()
171 if (len > 0 && buffer[len - 1] == '\n') in read_obj()
172 buffer[len - 1] = 0; in read_obj()
208 static void set_obj(struct slabinfo *s, const char *name, int n) in set_obj() argument
213 snprintf(x, 100, "%s/%s", s->name, name); in set_obj()
216 fatal("Cannot write to %s\n", x); in set_obj()
222 static unsigned long read_slab_obj(struct slabinfo *s, const char *name) in read_slab_obj() argument
228 snprintf(x, 100, "%s/%s", s->name, name); in read_slab_obj()
241 static unsigned long read_debug_slab_obj(struct slabinfo *s, const char *name) in read_debug_slab_obj() argument
247 snprintf(x, 128, "/sys/kernel/debug/slab/%s/%s", s->name, name); in read_debug_slab_obj()
290 memmove(buffer + n - 2, buffer + n - 3, 4); in store_size()
291 buffer[n-2] = '.'; in store_size()
322 static void slab_validate(struct slabinfo *s) in slab_validate() argument
324 if (strcmp(s->name, "*") == 0) in slab_validate()
327 set_obj(s, "validate", 1); in slab_validate()
330 static void slab_shrink(struct slabinfo *s) in slab_shrink() argument
332 if (strcmp(s->name, "*") == 0) in slab_shrink()
335 set_obj(s, "shrink", 1); in slab_shrink()
346 printf("Name Objects Objsize %s " in first_line()
347 "Slabs/Part/Cpu O/S O %%Fr %%Ef Flg\n", in first_line()
360 if (a->slab == find && in find_one_alias()
361 (!best || strlen(best->name) < strlen(a->name))) { in find_one_alias()
363 if (strncmp(a->name,"kmall", 5) == 0) in find_one_alias()
370 static unsigned long slab_size(struct slabinfo *s) in slab_size() argument
372 return s->slabs * (page_size << s->order); in slab_size()
375 static unsigned long slab_activity(struct slabinfo *s) in slab_activity() argument
377 return s->alloc_fastpath + s->free_fastpath + in slab_activity()
378 s->alloc_slowpath + s->free_slowpath; in slab_activity()
381 static unsigned long slab_waste(struct slabinfo *s) in slab_waste() argument
383 return slab_size(s) - s->objects * s->object_size; in slab_waste()
386 static void slab_numa(struct slabinfo *s, int mode) in slab_numa() argument
390 if (strcmp(s->name, "*") == 0) in slab_numa()
394 printf("\n%s: No NUMA information available.\n", s->name); in slab_numa()
398 if (skip_zero && !s->slabs) in slab_numa()
402 printf("\n%-21s:", mode ? "NUMA nodes" : "Slab"); in slab_numa()
405 printf("\n----------------------"); in slab_numa()
407 printf("-----"); in slab_numa()
410 printf("%-21s ", mode ? "All slabs" : s->name); in slab_numa()
414 store_size(b, s->numa[node]); in slab_numa()
415 printf(" %4s", b); in slab_numa()
419 printf("%-21s ", "Partial slabs"); in slab_numa()
423 store_size(b, s->numa_partial[node]); in slab_numa()
424 printf(" %4s", b); in slab_numa()
431 static void show_tracking(struct slabinfo *s) in show_tracking() argument
433 printf("\n%s: Kernel object allocation\n", s->name); in show_tracking()
434 printf("-----------------------------------------------------------------------\n"); in show_tracking()
435 if (read_debug_slab_obj(s, "alloc_traces")) in show_tracking()
436 printf("%s", buffer); in show_tracking()
437 else if (read_slab_obj(s, "alloc_calls")) in show_tracking()
438 printf("%s", buffer); in show_tracking()
442 printf("\n%s: Kernel object freeing\n", s->name); in show_tracking()
443 printf("------------------------------------------------------------------------\n"); in show_tracking()
444 if (read_debug_slab_obj(s, "free_traces")) in show_tracking()
445 printf("%s", buffer); in show_tracking()
446 else if (read_slab_obj(s, "free_calls")) in show_tracking()
447 printf("%s", buffer); in show_tracking()
453 static void ops(struct slabinfo *s) in ops() argument
455 if (strcmp(s->name, "*") == 0) in ops()
458 if (read_slab_obj(s, "ops")) { in ops()
459 printf("\n%s: kmem_cache operations\n", s->name); in ops()
460 printf("--------------------------------------------\n"); in ops()
461 printf("%s", buffer); in ops()
463 printf("\n%s has no kmem_cache operations\n", s->name); in ops()
473 static void slab_stats(struct slabinfo *s) in slab_stats() argument
479 if (!s->alloc_slab) in slab_stats()
482 total_alloc = s->alloc_fastpath + s->alloc_slowpath; in slab_stats()
483 total_free = s->free_fastpath + s->free_slowpath; in slab_stats()
490 printf("--------------------------------------------------\n"); in slab_stats()
492 s->alloc_fastpath, s->free_fastpath, in slab_stats()
493 s->alloc_fastpath * 100 / total_alloc, in slab_stats()
494 total_free ? s->free_fastpath * 100 / total_free : 0); in slab_stats()
496 total_alloc - s->alloc_fastpath, s->free_slowpath, in slab_stats()
497 (total_alloc - s->alloc_fastpath) * 100 / total_alloc, in slab_stats()
498 total_free ? s->free_slowpath * 100 / total_free : 0); in slab_stats()
500 s->alloc_slab, s->free_slab, in slab_stats()
501 s->alloc_slab * 100 / total_alloc, in slab_stats()
502 total_free ? s->free_slab * 100 / total_free : 0); in slab_stats()
504 s->deactivate_to_head + s->deactivate_to_tail, in slab_stats()
505 s->free_add_partial, in slab_stats()
506 (s->deactivate_to_head + s->deactivate_to_tail) * 100 / total_alloc, in slab_stats()
507 total_free ? s->free_add_partial * 100 / total_free : 0); in slab_stats()
509 s->alloc_from_partial, s->free_remove_partial, in slab_stats()
510 s->alloc_from_partial * 100 / total_alloc, in slab_stats()
511 total_free ? s->free_remove_partial * 100 / total_free : 0); in slab_stats()
514 s->cpu_partial_alloc, s->cpu_partial_free, in slab_stats()
515 s->cpu_partial_alloc * 100 / total_alloc, in slab_stats()
516 total_free ? s->cpu_partial_free * 100 / total_free : 0); in slab_stats()
519 s->deactivate_remote_frees, s->free_frozen, in slab_stats()
520 s->deactivate_remote_frees * 100 / total_alloc, in slab_stats()
521 total_free ? s->free_frozen * 100 / total_free : 0); in slab_stats()
525 if (s->cpuslab_flush) in slab_stats()
526 printf("Flushes %8lu\n", s->cpuslab_flush); in slab_stats()
528 total = s->deactivate_full + s->deactivate_empty + in slab_stats()
529 s->deactivate_to_head + s->deactivate_to_tail + s->deactivate_bypass; in slab_stats()
533 printf("-------------------------------------------------\n"); in slab_stats()
535 s->deactivate_full, (s->deactivate_full * 100) / total); in slab_stats()
537 s->deactivate_empty, (s->deactivate_empty * 100) / total); in slab_stats()
539 s->deactivate_to_head, (s->deactivate_to_head * 100) / total); in slab_stats()
541 s->deactivate_to_tail, (s->deactivate_to_tail * 100) / total); in slab_stats()
543 s->deactivate_bypass, (s->deactivate_bypass * 100) / total); in slab_stats()
545 s->alloc_refill, (s->alloc_refill * 100) / total); in slab_stats()
547 s->alloc_node_mismatch, (s->alloc_node_mismatch * 100) / total); in slab_stats()
550 if (s->cmpxchg_double_fail || s->cmpxchg_double_cpu_fail) { in slab_stats()
551 printf("\nCmpxchg_double Looping\n------------------------\n"); in slab_stats()
553 s->cmpxchg_double_fail, s->cmpxchg_double_cpu_fail); in slab_stats()
557 static void report(struct slabinfo *s) in report() argument
559 if (strcmp(s->name, "*") == 0) in report()
562 printf("\nSlabcache: %-15s Aliases: %2d Order : %2d Objects: %lu\n", in report()
563 s->name, s->aliases, s->order, s->objects); in report()
564 if (s->hwcache_align) in report()
566 if (s->cache_dma) in report()
568 if (s->destroy_by_rcu) in report()
570 if (s->reclaim_account) in report()
574 printf("------------------------------------------------------------------------\n"); in report()
575 printf("Object : %7d Total : %7ld Sanity Checks : %s Total: %7ld\n", in report()
576 s->object_size, s->slabs, onoff(s->sanity_checks), in report()
577 s->slabs * (page_size << s->order)); in report()
578 printf("SlabObj: %7d Full : %7ld Redzoning : %s Used : %7ld\n", in report()
579 s->slab_size, s->slabs - s->partial - s->cpu_slabs, in report()
580 onoff(s->red_zone), s->objects * s->object_size); in report()
581 printf("SlabSiz: %7d Partial: %7ld Poisoning : %s Loss : %7ld\n", in report()
582 page_size << s->order, s->partial, onoff(s->poison), in report()
583 s->slabs * (page_size << s->order) - s->objects * s->object_size); in report()
584 printf("Loss : %7d CpuSlab: %7d Tracking : %s Lalig: %7ld\n", in report()
585 s->slab_size - s->object_size, s->cpu_slabs, onoff(s->store_user), in report()
586 (s->slab_size - s->object_size) * s->objects); in report()
587 printf("Align : %7d Objects: %7d Tracing : %s Lpadd: %7ld\n", in report()
588 s->align, s->objs_per_slab, onoff(s->trace), in report()
589 ((page_size << s->order) - s->objs_per_slab * s->slab_size) * in report()
590 s->slabs); in report()
592 ops(s); in report()
593 show_tracking(s); in report()
594 slab_numa(s, 1); in report()
595 slab_stats(s); in report()
598 static void slabcache(struct slabinfo *s) in slabcache() argument
605 if (strcmp(s->name, "*") == 0) in slabcache()
608 if (unreclaim_only && s->reclaim_account) in slabcache()
612 report(s); in slabcache()
616 if (skip_zero && !show_empty && !s->slabs) in slabcache()
619 if (show_empty && s->slabs) in slabcache()
623 store_size(size_str, slab_size(s)); in slabcache()
625 store_size(size_str, slab_waste(s)); in slabcache()
626 snprintf(dist_str, 40, "%lu/%lu/%d", s->slabs - s->cpu_slabs, in slabcache()
627 s->partial, s->cpu_slabs); in slabcache()
632 if (s->aliases) in slabcache()
634 if (s->cache_dma) in slabcache()
636 if (s->hwcache_align) in slabcache()
638 if (s->poison) in slabcache()
640 if (s->reclaim_account) in slabcache()
642 if (s->red_zone) in slabcache()
644 if (s->sanity_checks) in slabcache()
646 if (s->store_user) in slabcache()
648 if (s->trace) in slabcache()
656 total_alloc = s->alloc_fastpath + s->alloc_slowpath; in slabcache()
657 total_free = s->free_fastpath + s->free_slowpath; in slabcache()
659 printf("%-21s %8ld %10ld %10ld %3ld %3ld %5ld %1d %4ld %4ld\n", in slabcache()
660 s->name, s->objects, in slabcache()
662 total_alloc ? (s->alloc_fastpath * 100 / total_alloc) : 0, in slabcache()
663 total_free ? (s->free_fastpath * 100 / total_free) : 0, in slabcache()
664 s->order_fallback, s->order, s->cmpxchg_double_fail, in slabcache()
665 s->cmpxchg_double_cpu_fail); in slabcache()
667 printf("%-21s %8ld %7d %15s %14s %4d %1d %3ld %3ld %s\n", in slabcache()
668 s->name, s->objects, s->object_size, size_str, dist_str, in slabcache()
669 s->objs_per_slab, s->order, in slabcache()
670 s->slabs ? (s->partial * 100) / s->slabs : 100, in slabcache()
671 s->slabs ? (s->objects * s->object_size * 100) / in slabcache()
672 (s->slabs * (page_size << s->order)) : 100, in slabcache()
682 if (!opt || !opt[0] || strcmp(opt, "-") == 0) in debug_opt_scan()
729 static int slab_empty(struct slabinfo *s) in slab_empty() argument
731 if (s->objects > 0) in slab_empty()
738 if (s->slabs != 0) in slab_empty()
739 set_obj(s, "shrink", 1); in slab_empty()
744 static void slab_debug(struct slabinfo *s) in slab_debug() argument
746 if (strcmp(s->name, "*") == 0) in slab_debug()
749 if (sanity && !s->sanity_checks) { in slab_debug()
750 set_obj(s, "sanity_checks", 1); in slab_debug()
752 if (!sanity && s->sanity_checks) { in slab_debug()
753 if (slab_empty(s)) in slab_debug()
754 set_obj(s, "sanity_checks", 0); in slab_debug()
756 fprintf(stderr, "%s not empty cannot disable sanity checks\n", s->name); in slab_debug()
758 if (redzone && !s->red_zone) { in slab_debug()
759 if (slab_empty(s)) in slab_debug()
760 set_obj(s, "red_zone", 1); in slab_debug()
762 fprintf(stderr, "%s not empty cannot enable redzoning\n", s->name); in slab_debug()
764 if (!redzone && s->red_zone) { in slab_debug()
765 if (slab_empty(s)) in slab_debug()
766 set_obj(s, "red_zone", 0); in slab_debug()
768 fprintf(stderr, "%s not empty cannot disable redzoning\n", s->name); in slab_debug()
770 if (poison && !s->poison) { in slab_debug()
771 if (slab_empty(s)) in slab_debug()
772 set_obj(s, "poison", 1); in slab_debug()
774 fprintf(stderr, "%s not empty cannot enable poisoning\n", s->name); in slab_debug()
776 if (!poison && s->poison) { in slab_debug()
777 if (slab_empty(s)) in slab_debug()
778 set_obj(s, "poison", 0); in slab_debug()
780 fprintf(stderr, "%s not empty cannot disable poisoning\n", s->name); in slab_debug()
782 if (tracking && !s->store_user) { in slab_debug()
783 if (slab_empty(s)) in slab_debug()
784 set_obj(s, "store_user", 1); in slab_debug()
786 fprintf(stderr, "%s not empty cannot enable tracking\n", s->name); in slab_debug()
788 if (!tracking && s->store_user) { in slab_debug()
789 if (slab_empty(s)) in slab_debug()
790 set_obj(s, "store_user", 0); in slab_debug()
792 fprintf(stderr, "%s not empty cannot disable tracking\n", s->name); in slab_debug()
794 if (tracing && !s->trace) { in slab_debug()
796 set_obj(s, "trace", 1); in slab_debug()
798 fprintf(stderr, "%s can only enable trace for one slab at a time\n", s->name); in slab_debug()
800 if (!tracing && s->trace) in slab_debug()
801 set_obj(s, "trace", 1); in slab_debug()
806 struct slabinfo *s; in totals() local
860 for (s = slabinfo; s < slabinfo + slabs; s++) { in totals()
868 if (!s->slabs || !s->objects) in totals()
873 size = slab_size(s); in totals()
874 used = s->objects * s->object_size; in totals()
875 wasted = size - used; in totals()
876 objwaste = s->slab_size - s->object_size; in totals()
878 percentage_partial_slabs = s->partial * 100 / s->slabs; in totals()
882 percentage_partial_objs = s->objects_partial * 100 in totals()
883 / s->objects; in totals()
888 if (s->object_size < min_objsize) in totals()
889 min_objsize = s->object_size; in totals()
890 if (s->partial < min_partial) in totals()
891 min_partial = s->partial; in totals()
892 if (s->slabs < min_slabs) in totals()
893 min_slabs = s->slabs; in totals()
900 if (s->objects < min_objects) in totals()
901 min_objects = s->objects; in totals()
904 if (s->objects_partial < min_partobj) in totals()
905 min_partobj = s->objects_partial; in totals()
910 if (s->slab_size < min_memobj) in totals()
911 min_memobj = s->slab_size; in totals()
913 if (s->object_size > max_objsize) in totals()
914 max_objsize = s->object_size; in totals()
915 if (s->partial > max_partial) in totals()
916 max_partial = s->partial; in totals()
917 if (s->slabs > max_slabs) in totals()
918 max_slabs = s->slabs; in totals()
925 if (s->objects > max_objects) in totals()
926 max_objects = s->objects; in totals()
929 if (s->objects_partial > max_partobj) in totals()
930 max_partobj = s->objects_partial; in totals()
935 if (s->slab_size > max_memobj) in totals()
936 max_memobj = s->slab_size; in totals()
938 total_partial += s->partial; in totals()
939 total_slabs += s->slabs; in totals()
943 total_objects += s->objects; in totals()
945 total_partobj += s->objects_partial; in totals()
949 total_objwaste += s->objects * objwaste; in totals()
950 total_objsize += s->objects * s->slab_size; in totals()
981 printf("----------------\n"); in totals()
982 printf("Slabcaches : %15d Aliases : %11d->%-3d Active: %3d\n", in totals()
987 printf("Memory used: %15s # Loss : %15s MRatio:%6s%%\n", b1, b2, b3); in totals()
991 printf("# Objects : %15s # PartObj: %15s ORatio:%6s%%\n", b1, b2, b3); in totals()
996 printf("---------------------------------------" in totals()
997 "-------------------------------------\n"); in totals()
1001 printf("#Objects %15s %15s %15s %15s\n", in totals()
1006 printf("#Slabs %15s %15s %15s %15s\n", in totals()
1011 printf("#PartSlab %15s %15s %15s %15s\n", in totals()
1016 printf("%%PartSlab%15s%% %15s%% %15s%% %15s%%\n", in totals()
1022 printf("PartObjs %15s %15s %15s %15s\n", in totals()
1028 printf("%% PartObj%15s%% %15s%% %15s%% %15s%%\n", in totals()
1033 printf("Memory %15s %15s %15s %15s\n", in totals()
1038 printf("Used %15s %15s %15s %15s\n", in totals()
1043 printf("Loss %15s %15s %15s %15s\n", in totals()
1049 printf("---------------------------------------" in totals()
1050 "--------------------\n"); in totals()
1054 printf("Memory %15s %15s %15s\n", in totals()
1058 printf("User %15s %15s %15s\n", in totals()
1063 printf("Loss %15s %15s %15s\n", in totals()
1077 result = strcasecmp(s1->name, s2->name); in sort_slabs()
1082 result = strcasecmp(s1->name, s2->name); in sort_slabs()
1087 result = strcasecmp(s1->name, s2->name); in sort_slabs()
1091 if (s1->partial == s2->partial) in sort_slabs()
1092 result = strcasecmp(s1->name, s2->name); in sort_slabs()
1094 result = s1->partial < s2->partial; in sort_slabs()
1096 result = strcasecmp(s1->name, s2->name); in sort_slabs()
1099 result = -result; in sort_slabs()
1120 n1 = a1->name; in sort_aliases()
1121 n2 = a2->name; in sort_aliases()
1123 n1 = a1->ref; in sort_aliases()
1124 n2 = a2->ref; in sort_aliases()
1140 struct slabinfo *s; in link_slabs() local
1144 for (s = slabinfo; s < slabinfo + slabs; s++) in link_slabs()
1145 if (strcmp(a->ref, s->name) == 0) { in link_slabs()
1146 a->slab = s; in link_slabs()
1147 s->refs++; in link_slabs()
1150 if (s == slabinfo + slabs) in link_slabs()
1151 fatal("Unresolved alias %s\n", a->ref); in link_slabs()
1165 if (!show_single_ref && a->slab->refs == 1) in alias()
1170 if (strcmp(a->slab->name, active) == 0) { in alias()
1171 printf(" %s", a->name); in alias()
1175 printf("\n%-12s <- %s", a->slab->name, a->name); in alias()
1176 active = a->slab->name; in alias()
1179 printf("%-15s -> %s\n", a->name, a->slab->name); in alias()
1188 struct slabinfo *s; in rename_slabs() local
1191 for (s = slabinfo; s < slabinfo + slabs; s++) { in rename_slabs()
1192 if (*s->name != ':') in rename_slabs()
1195 if (s->refs > 1 && !show_first_alias) in rename_slabs()
1198 a = find_one_alias(s); in rename_slabs()
1201 s->name = a->name; in rename_slabs()
1203 s->name = "*"; in rename_slabs()
1204 actual_slabs--; in rename_slabs()
1229 if (de->d_name[0] == '.' || in read_slab_dir()
1230 (de->d_name[0] != ':' && slab_mismatch(de->d_name))) in read_slab_dir()
1232 switch (de->d_type) { in read_slab_dir()
1234 if (alias - aliasinfo == MAX_ALIASES) in read_slab_dir()
1236 alias->name = strdup(de->d_name); in read_slab_dir()
1237 count = readlink(de->d_name, buffer, sizeof(buffer)-1); in read_slab_dir()
1240 fatal("Cannot read symlink %s\n", de->d_name); in read_slab_dir()
1244 while (p > buffer && p[-1] != '/') in read_slab_dir()
1245 p--; in read_slab_dir()
1246 alias->ref = strdup(p); in read_slab_dir()
1250 if (slab - slabinfo == MAX_SLABS) in read_slab_dir()
1252 if (chdir(de->d_name)) in read_slab_dir()
1253 fatal("Unable to access slab %s\n", slab->name); in read_slab_dir()
1254 slab->name = strdup(de->d_name); in read_slab_dir()
1255 slab->alias = 0; in read_slab_dir()
1256 slab->refs = 0; in read_slab_dir()
1257 slab->aliases = get_obj("aliases"); in read_slab_dir()
1258 slab->align = get_obj("align"); in read_slab_dir()
1259 slab->cache_dma = get_obj("cache_dma"); in read_slab_dir()
1260 slab->cpu_slabs = get_obj("cpu_slabs"); in read_slab_dir()
1261 slab->destroy_by_rcu = get_obj("destroy_by_rcu"); in read_slab_dir()
1262 slab->hwcache_align = get_obj("hwcache_align"); in read_slab_dir()
1263 slab->object_size = get_obj("object_size"); in read_slab_dir()
1264 slab->objects = get_obj("objects"); in read_slab_dir()
1265 slab->objects_partial = get_obj("objects_partial"); in read_slab_dir()
1266 slab->objects_total = get_obj("objects_total"); in read_slab_dir()
1267 slab->objs_per_slab = get_obj("objs_per_slab"); in read_slab_dir()
1268 slab->order = get_obj("order"); in read_slab_dir()
1269 slab->partial = get_obj("partial"); in read_slab_dir()
1270 slab->partial = get_obj_and_str("partial", &t); in read_slab_dir()
1271 decode_numa_list(slab->numa_partial, t); in read_slab_dir()
1273 slab->poison = get_obj("poison"); in read_slab_dir()
1274 slab->reclaim_account = get_obj("reclaim_account"); in read_slab_dir()
1275 slab->red_zone = get_obj("red_zone"); in read_slab_dir()
1276 slab->sanity_checks = get_obj("sanity_checks"); in read_slab_dir()
1277 slab->slab_size = get_obj("slab_size"); in read_slab_dir()
1278 slab->slabs = get_obj_and_str("slabs", &t); in read_slab_dir()
1279 decode_numa_list(slab->numa, t); in read_slab_dir()
1281 slab->store_user = get_obj("store_user"); in read_slab_dir()
1282 slab->trace = get_obj("trace"); in read_slab_dir()
1283 slab->alloc_fastpath = get_obj("alloc_fastpath"); in read_slab_dir()
1284 slab->alloc_slowpath = get_obj("alloc_slowpath"); in read_slab_dir()
1285 slab->free_fastpath = get_obj("free_fastpath"); in read_slab_dir()
1286 slab->free_slowpath = get_obj("free_slowpath"); in read_slab_dir()
1287 slab->free_frozen= get_obj("free_frozen"); in read_slab_dir()
1288 slab->free_add_partial = get_obj("free_add_partial"); in read_slab_dir()
1289 slab->free_remove_partial = get_obj("free_remove_partial"); in read_slab_dir()
1290 slab->alloc_from_partial = get_obj("alloc_from_partial"); in read_slab_dir()
1291 slab->alloc_slab = get_obj("alloc_slab"); in read_slab_dir()
1292 slab->alloc_refill = get_obj("alloc_refill"); in read_slab_dir()
1293 slab->free_slab = get_obj("free_slab"); in read_slab_dir()
1294 slab->cpuslab_flush = get_obj("cpuslab_flush"); in read_slab_dir()
1295 slab->deactivate_full = get_obj("deactivate_full"); in read_slab_dir()
1296 slab->deactivate_empty = get_obj("deactivate_empty"); in read_slab_dir()
1297 slab->deactivate_to_head = get_obj("deactivate_to_head"); in read_slab_dir()
1298 slab->deactivate_to_tail = get_obj("deactivate_to_tail"); in read_slab_dir()
1299 slab->deactivate_remote_frees = get_obj("deactivate_remote_frees"); in read_slab_dir()
1300 slab->order_fallback = get_obj("order_fallback"); in read_slab_dir()
1301 slab->cmpxchg_double_cpu_fail = get_obj("cmpxchg_double_cpu_fail"); in read_slab_dir()
1302 slab->cmpxchg_double_fail = get_obj("cmpxchg_double_fail"); in read_slab_dir()
1303 slab->cpu_partial_alloc = get_obj("cpu_partial_alloc"); in read_slab_dir()
1304 slab->cpu_partial_free = get_obj("cpu_partial_free"); in read_slab_dir()
1305 slab->alloc_node_mismatch = get_obj("alloc_node_mismatch"); in read_slab_dir()
1306 slab->deactivate_bypass = get_obj("deactivate_bypass"); in read_slab_dir()
1308 fatal("Unable to chdir from slab ../%s\n", in read_slab_dir()
1309 slab->name); in read_slab_dir()
1310 if (slab->name[0] == ':') in read_slab_dir()
1315 fatal("Unknown file type %lx\n", de->d_type); in read_slab_dir()
1319 slabs = slab - slabinfo; in read_slab_dir()
1321 aliases = alias - aliasinfo; in read_slab_dir()
1332 if (slab->alias) in output_slabs()
1335 if (lines != -1) in output_slabs()
1336 lines--; in output_slabs()
1360 printf("%s%s", heading, underline); in _xtotals()
1379 underline = "--------------------\n"; in xtotals()
1383 underline = "--------------------\n"; in xtotals()
1387 underline = "---------------------------------------\n"; in xtotals()
1398 { "display-activity", no_argument, NULL, 'D' },
1400 { "first-alias", no_argument, NULL, 'f' },
1410 { "shrink", no_argument, NULL, 's' },
1411 { "Size", no_argument, NULL, 'S'},
1431 opts, NULL)) != -1) in main()
1445 fatal("Invalid debug option '%s'\n", optarg); in main()
1487 case 's': in main()
1490 case 'S': in main()
1506 if (output_lines == -1) in main()
1518 fatal("%s: Invalid option '%c'\n", argv[0], optopt); in main()
1533 fatal("%s: Invalid pattern '%s' code %d\n", in main()