Skip to content

Commit

Permalink
dyndbg: add test_dynamic_debug module
Browse files Browse the repository at this point in the history
Provide a simple module to allow testing DYNAMIC_DEBUG behavior.  It
calls do_prints() from module-init, and with a sysfs-node.

  dmesg -C
  dmesg -w &
  modprobe test_dynamic_debug dyndbg=+p
  echo 1 > /sys/module/dynamic_debug/parameters/verbose

  cat /sys/module/test_dynamic_debug/parameters/do_prints
  echo module test_dynamic_debug +mftl > /proc/dynamic_debug/control
  echo junk > /sys/module/test_dynamic_debug/parameters/do_prints

Acked-by: Jason Baron <[email protected]>
Acked-by: Daniel Vetter <[email protected]>
Signed-off-by: Jim Cromie <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
jimc authored and gregkh committed Sep 7, 2022
1 parent e75ef56 commit 683263a
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 0 deletions.
2 changes: 2 additions & 0 deletions MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -7205,6 +7205,8 @@ M: Jason Baron <[email protected]>
S: Maintained
F: include/linux/dynamic_debug.h
F: lib/dynamic_debug.c
M: Jim Cromie <[email protected]>
F: lib/test_dynamic_debug.c

DYNAMIC INTERRUPT MODERATION
M: Tal Gilboa <[email protected]>
Expand Down
10 changes: 10 additions & 0 deletions lib/Kconfig.debug
Original file line number Diff line number Diff line change
Expand Up @@ -2546,6 +2546,16 @@ config TEST_STATIC_KEYS

If unsure, say N.

config TEST_DYNAMIC_DEBUG
tristate "Test DYNAMIC_DEBUG"
depends on DYNAMIC_DEBUG
help
This module registers a tracer callback to count enabled
pr_debugs in a 'do_debugging' function, then alters their
enablements, calls the function, and compares counts.

If unsure, say N.

config TEST_KMOD
tristate "kmod stress tester"
depends on m
Expand Down
1 change: 1 addition & 0 deletions lib/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ obj-$(CONFIG_TEST_SORT) += test_sort.o
obj-$(CONFIG_TEST_USER_COPY) += test_user_copy.o
obj-$(CONFIG_TEST_STATIC_KEYS) += test_static_keys.o
obj-$(CONFIG_TEST_STATIC_KEYS) += test_static_key_base.o
obj-$(CONFIG_TEST_DYNAMIC_DEBUG) += test_dynamic_debug.o
obj-$(CONFIG_TEST_PRINTF) += test_printf.o
obj-$(CONFIG_TEST_SCANF) += test_scanf.o
obj-$(CONFIG_TEST_BITMAP) += test_bitmap.o
Expand Down
70 changes: 70 additions & 0 deletions lib/test_dynamic_debug.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Kernel module for testing dynamic_debug
*
* Authors:
* Jim Cromie <[email protected]>
*/

#define pr_fmt(fmt) "test_dd: " fmt

#include <linux/module.h>

static void do_prints(void); /* device under test */

/* run tests by reading or writing sysfs node */

static int param_set_do_prints(const char *instr, const struct kernel_param *kp)
{
do_prints();
return 0;
}

static int param_get_do_prints(char *buffer, const struct kernel_param *kp)
{
do_prints();
return scnprintf(buffer, PAGE_SIZE, "did do_prints\n");
}

static const struct kernel_param_ops param_ops_do_prints = {
.set = param_set_do_prints,
.get = param_get_do_prints,
};

module_param_cb(do_prints, &param_ops_do_prints, NULL, 0600);

static void do_alpha(void)
{
pr_debug("do alpha\n");
}
static void do_beta(void)
{
pr_debug("do beta\n");
}

static void do_prints(void)
{
do_alpha();
do_beta();
}

static int __init test_dynamic_debug_init(void)
{
pr_debug("init start\n");

do_prints();

pr_debug("init done\n");
return 0;
}

static void __exit test_dynamic_debug_exit(void)
{
pr_debug("exiting\n");
}

module_init(test_dynamic_debug_init);
module_exit(test_dynamic_debug_exit);

MODULE_AUTHOR("Jim Cromie <[email protected]>");
MODULE_LICENSE("GPL");

0 comments on commit 683263a

Please sign in to comment.