Commit 8a67a20b authored by Paul E. McKenney's avatar Paul E. McKenney
Browse files

torture: Throttle VERBOSE_TOROUT_*() output



This commit adds kernel boot parameters torture.verbose_sleep_frequency
and torture.verbose_sleep_duration, which allow VERBOSE_TOROUT_*() output
to be throttled with periodic sleeps on large systems.

Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
parent 414c116e
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -5337,6 +5337,14 @@
			are running concurrently, especially on systems
			with rotating-rust storage.

	torture.verbose_sleep_frequency= [KNL]
			Specifies how many verbose printk()s should be
			emitted between each sleep.  The default of zero
			disables verbose-printk() sleeping.

	torture.verbose_sleep_duration= [KNL]
			Duration of each verbose-printk() sleep in jiffies.

	tp720=		[HW,PS2]

	tpm_suspend_pcr=[HW,TPM]
+13 −2
Original line number Diff line number Diff line
@@ -32,9 +32,20 @@
#define TOROUT_STRING(s) \
	pr_alert("%s" TORTURE_FLAG " %s\n", torture_type, s)
#define VERBOSE_TOROUT_STRING(s) \
	do { if (verbose) pr_alert("%s" TORTURE_FLAG " %s\n", torture_type, s); } while (0)
do {										\
	if (verbose) {								\
		verbose_torout_sleep();						\
		pr_alert("%s" TORTURE_FLAG " %s\n", torture_type, s);		\
	}									\
} while (0)
#define VERBOSE_TOROUT_ERRSTRING(s) \
	do { if (verbose) pr_alert("%s" TORTURE_FLAG "!!! %s\n", torture_type, s); } while (0)
do {										\
	if (verbose) {								\
		verbose_torout_sleep();						\
		pr_alert("%s" TORTURE_FLAG "!!! %s\n", torture_type, s);	\
	}									\
} while (0)
void verbose_torout_sleep(void);

/* Definitions for online/offline exerciser. */
typedef void torture_ofl_func(void);
+20 −0
Original line number Diff line number Diff line
@@ -48,6 +48,12 @@ module_param(disable_onoff_at_boot, bool, 0444);
static bool ftrace_dump_at_shutdown;
module_param(ftrace_dump_at_shutdown, bool, 0444);

static int verbose_sleep_frequency;
module_param(verbose_sleep_frequency, int, 0444);

static int verbose_sleep_duration = 1;
module_param(verbose_sleep_duration, int, 0444);

static char *torture_type;
static int verbose;

@@ -58,6 +64,20 @@ static int verbose;
static int fullstop = FULLSTOP_RMMOD;
static DEFINE_MUTEX(fullstop_mutex);

static atomic_t verbose_sleep_counter;

/*
 * Sleep if needed from VERBOSE_TOROUT*().
 */
void verbose_torout_sleep(void)
{
	if (verbose_sleep_frequency > 0 &&
	    verbose_sleep_duration > 0 &&
	    !(atomic_inc_return(&verbose_sleep_counter) % verbose_sleep_frequency))
		schedule_timeout_uninterruptible(verbose_sleep_duration);
}
EXPORT_SYMBOL_GPL(verbose_torout_sleep);

/*
 * Schedule a high-resolution-timer sleep in nanoseconds, with a 32-bit
 * nanosecond random fuzz.  This function and its friends desynchronize