OSDN Git Service

rcutorture: Add crude tests for mem_dump_obj()
authorPaul E. McKenney <paulmck@kernel.org>
Tue, 8 Dec 2020 05:23:36 +0000 (21:23 -0800)
committerPaul E. McKenney <paulmck@kernel.org>
Mon, 8 Mar 2021 22:18:46 +0000 (14:18 -0800)
This commit adds a few crude tests for mem_dump_obj() to rcutorture
runs.  Just to prevent bitrot, you understand!

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
kernel/rcu/rcutorture.c
mm/slab_common.c
mm/util.c

index 99657ff..8e93f2e 100644 (file)
@@ -1861,6 +1861,45 @@ rcu_torture_stats(void *arg)
                torture_shutdown_absorb("rcu_torture_stats");
        } while (!torture_must_stop());
        torture_kthread_stopping("rcu_torture_stats");
+
+       {
+               struct rcu_head *rhp;
+               struct kmem_cache *kcp;
+               static int z;
+
+               kcp = kmem_cache_create("rcuscale", 136, 8, SLAB_STORE_USER, NULL);
+               rhp = kmem_cache_alloc(kcp, GFP_KERNEL);
+               pr_alert("mem_dump_obj() slab test: rcu_torture_stats = %px, &rhp = %px, rhp = %px, &z = %px\n", stats_task, &rhp, rhp, &z);
+               pr_alert("mem_dump_obj(ZERO_SIZE_PTR):");
+               mem_dump_obj(ZERO_SIZE_PTR);
+               pr_alert("mem_dump_obj(NULL):");
+               mem_dump_obj(NULL);
+               pr_alert("mem_dump_obj(%px):", &rhp);
+               mem_dump_obj(&rhp);
+               pr_alert("mem_dump_obj(%px):", rhp);
+               mem_dump_obj(rhp);
+               pr_alert("mem_dump_obj(%px):", &rhp->func);
+               mem_dump_obj(&rhp->func);
+               pr_alert("mem_dump_obj(%px):", &z);
+               mem_dump_obj(&z);
+               kmem_cache_free(kcp, rhp);
+               kmem_cache_destroy(kcp);
+               rhp = kmalloc(sizeof(*rhp), GFP_KERNEL);
+               pr_alert("mem_dump_obj() kmalloc test: rcu_torture_stats = %px, &rhp = %px, rhp = %px\n", stats_task, &rhp, rhp);
+               pr_alert("mem_dump_obj(kmalloc %px):", rhp);
+               mem_dump_obj(rhp);
+               pr_alert("mem_dump_obj(kmalloc %px):", &rhp->func);
+               mem_dump_obj(&rhp->func);
+               kfree(rhp);
+               rhp = vmalloc(4096);
+               pr_alert("mem_dump_obj() vmalloc test: rcu_torture_stats = %px, &rhp = %px, rhp = %px\n", stats_task, &rhp, rhp);
+               pr_alert("mem_dump_obj(vmalloc %px):", rhp);
+               mem_dump_obj(rhp);
+               pr_alert("mem_dump_obj(vmalloc %px):", &rhp->func);
+               mem_dump_obj(&rhp->func);
+               vfree(rhp);
+       }
+
        return 0;
 }
 
index cec9536..4c6107e 100644 (file)
@@ -545,6 +545,7 @@ bool kmem_valid_obj(void *object)
        page = virt_to_head_page(object);
        return PageSlab(page);
 }
+EXPORT_SYMBOL_GPL(kmem_valid_obj);
 
 /**
  * kmem_dump_obj - Print available slab provenance information
@@ -601,6 +602,7 @@ void kmem_dump_obj(void *object)
                pr_info("    %pS\n", kp.kp_stack[i]);
        }
 }
+EXPORT_SYMBOL_GPL(kmem_dump_obj);
 #endif
 
 #ifndef CONFIG_SLOB
index 2d497fe..c37e24d 100644 (file)
--- a/mm/util.c
+++ b/mm/util.c
@@ -1014,4 +1014,5 @@ void mem_dump_obj(void *object)
        }
        pr_cont(" non-slab/vmalloc memory.\n");
 }
+EXPORT_SYMBOL_GPL(mem_dump_obj);
 #endif