Loading kernel/rcu/rcutorture.c +39 −0 Original line number Diff line number Diff line Loading @@ -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; } Loading mm/slab_common.c +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading mm/util.c +1 −0 Original line number Diff line number Diff line Loading @@ -1014,4 +1014,5 @@ void mem_dump_obj(void *object) } pr_cont(" non-slab/vmalloc memory.\n"); } EXPORT_SYMBOL_GPL(mem_dump_obj); #endif Loading
kernel/rcu/rcutorture.c +39 −0 Original line number Diff line number Diff line Loading @@ -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; } Loading
mm/slab_common.c +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading
mm/util.c +1 −0 Original line number Diff line number Diff line Loading @@ -1014,4 +1014,5 @@ void mem_dump_obj(void *object) } pr_cont(" non-slab/vmalloc memory.\n"); } EXPORT_SYMBOL_GPL(mem_dump_obj); #endif