Commit 0d3dd2c8 authored by Paul E. McKenney's avatar Paul E. McKenney

rcutorture: Add crude tests for mem_dump_obj()

This commit adds a few crude tests for mem_dump_obj() to rcutorture
runs.  Just to prevent bitrot, you understand!
Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
parent 5bb1bb35
...@@ -1861,6 +1861,45 @@ rcu_torture_stats(void *arg) ...@@ -1861,6 +1861,45 @@ rcu_torture_stats(void *arg)
torture_shutdown_absorb("rcu_torture_stats"); torture_shutdown_absorb("rcu_torture_stats");
} while (!torture_must_stop()); } while (!torture_must_stop());
torture_kthread_stopping("rcu_torture_stats"); 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; return 0;
} }
......
...@@ -545,6 +545,7 @@ bool kmem_valid_obj(void *object) ...@@ -545,6 +545,7 @@ bool kmem_valid_obj(void *object)
page = virt_to_head_page(object); page = virt_to_head_page(object);
return PageSlab(page); return PageSlab(page);
} }
EXPORT_SYMBOL_GPL(kmem_valid_obj);
/** /**
* kmem_dump_obj - Print available slab provenance information * kmem_dump_obj - Print available slab provenance information
...@@ -601,6 +602,7 @@ void kmem_dump_obj(void *object) ...@@ -601,6 +602,7 @@ void kmem_dump_obj(void *object)
pr_info(" %pS\n", kp.kp_stack[i]); pr_info(" %pS\n", kp.kp_stack[i]);
} }
} }
EXPORT_SYMBOL_GPL(kmem_dump_obj);
#endif #endif
#ifndef CONFIG_SLOB #ifndef CONFIG_SLOB
......
...@@ -1014,4 +1014,5 @@ void mem_dump_obj(void *object) ...@@ -1014,4 +1014,5 @@ void mem_dump_obj(void *object)
} }
pr_cont(" non-slab/vmalloc memory.\n"); pr_cont(" non-slab/vmalloc memory.\n");
} }
EXPORT_SYMBOL_GPL(mem_dump_obj);
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment