Merge tag 'rproc-v5.20' of git://git.kernel.org/pub/scm/linux/kernel/git/remoteproc...
[platform/kernel/linux-starfive.git] / tools / vm / slabinfo.c
index 5b98f3e..0fffaee 100644 (file)
@@ -125,7 +125,7 @@ static void usage(void)
                "-n|--numa              Show NUMA information\n"
                "-N|--lines=K           Show the first K slabs\n"
                "-o|--ops               Show kmem_cache_ops\n"
-               "-P|--partial           Sort by number of partial slabs\n"
+               "-P|--partial           Sort by number of partial slabs\n"
                "-r|--report            Detailed report on single slabs\n"
                "-s|--shrink            Shrink slabs\n"
                "-S|--Size              Sort by size\n"
@@ -1067,15 +1067,27 @@ static void sort_slabs(void)
                for (s2 = s1 + 1; s2 < slabinfo + slabs; s2++) {
                        int result;
 
-                       if (sort_size)
-                               result = slab_size(s1) < slab_size(s2);
-                       else if (sort_active)
-                               result = slab_activity(s1) < slab_activity(s2);
-                       else if (sort_loss)
-                               result = slab_waste(s1) < slab_waste(s2);
-                       else if (sort_partial)
-                               result = s1->partial < s2->partial;
-                       else
+                       if (sort_size) {
+                               if (slab_size(s1) == slab_size(s2))
+                                       result = strcasecmp(s1->name, s2->name);
+                               else
+                                       result = slab_size(s1) < slab_size(s2);
+                       } else if (sort_active) {
+                               if (slab_activity(s1) == slab_activity(s2))
+                                       result = strcasecmp(s1->name, s2->name);
+                               else
+                                       result = slab_activity(s1) < slab_activity(s2);
+                       } else if (sort_loss) {
+                               if (slab_waste(s1) == slab_waste(s2))
+                                       result = strcasecmp(s1->name, s2->name);
+                               else
+                                       result = slab_waste(s1) < slab_waste(s2);
+                       } else if (sort_partial) {
+                               if (s1->partial == s2->partial)
+                                       result = strcasecmp(s1->name, s2->name);
+                               else
+                                       result = s1->partial < s2->partial;
+                       } else
                                result = strcasecmp(s1->name, s2->name);
 
                        if (show_inverted)