[PATCH 2/2] tty: sysrq: Use printk_loud_console context on __handle_sysrq

Marcos Paulo de Souza posted 2 patches 1 month, 1 week ago
[PATCH 2/2] tty: sysrq: Use printk_loud_console context on __handle_sysrq
Posted by Marcos Paulo de Souza 1 month, 1 week ago
By using the printk_loud_console the loglevel workaround can be removed.
The workaround existed to always send the sysrq header message to all
consoles not matter what was the current loglevel.

Signed-off-by: Marcos Paulo de Souza <mpdesouza@suse.com>
---
 drivers/tty/sysrq.c | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
index 930b04e3d148..1ff11cf6275a 100644
--- a/drivers/tty/sysrq.c
+++ b/drivers/tty/sysrq.c
@@ -583,7 +583,6 @@ static void __sysrq_put_key_op(u8 key, const struct sysrq_key_op *op_p)
 void __handle_sysrq(u8 key, bool check_mask)
 {
 	const struct sysrq_key_op *op_p;
-	int orig_log_level;
 	int orig_suppress_printk;
 	int i;
 
@@ -593,13 +592,12 @@ void __handle_sysrq(u8 key, bool check_mask)
 	rcu_sysrq_start();
 	rcu_read_lock();
 	/*
-	 * Raise the apparent loglevel to maximum so that the sysrq header
-	 * is shown to provide the user with positive feedback.  We do not
-	 * simply emit this at KERN_EMERG as that would change message
-	 * routing in the consumers of /proc/kmsg.
+	 * Enter in the console_loud context so that sysrq header is shown to
+	 * provide the user with positive feedback.  We do not simply emit this
+	 * at KERN_EMERG as that would change message routing in the consumers
+	 * of /proc/kmsg.
 	 */
-	orig_log_level = console_loglevel;
-	console_loglevel = CONSOLE_LOGLEVEL_DEFAULT;
+	printk_loud_console_enter();
 
 	op_p = __sysrq_get_key_op(key);
 	if (op_p) {
@@ -609,11 +607,11 @@ void __handle_sysrq(u8 key, bool check_mask)
 		 */
 		if (!check_mask || sysrq_on_mask(op_p->enable_mask)) {
 			pr_info("%s\n", op_p->action_msg);
-			console_loglevel = orig_log_level;
+			printk_loud_console_exit();
 			op_p->handler(key);
 		} else {
 			pr_info("This sysrq operation is disabled.\n");
-			console_loglevel = orig_log_level;
+			printk_loud_console_exit();
 		}
 	} else {
 		pr_info("HELP : ");
@@ -631,7 +629,7 @@ void __handle_sysrq(u8 key, bool check_mask)
 			}
 		}
 		pr_cont("\n");
-		console_loglevel = orig_log_level;
+		printk_loud_console_exit();
 	}
 	rcu_read_unlock();
 	rcu_sysrq_end();

-- 
2.46.1
Re: [PATCH 2/2] tty: sysrq: Use printk_loud_console context on __handle_sysrq
Posted by kernel test robot 1 month, 1 week ago
Hi Marcos,

kernel test robot noticed the following build errors:

[auto build test ERROR on 1d227fcc72223cbdd34d0ce13541cbaab5e0d72f]

url:    https://github.com/intel-lab-lkp/linux/commits/Marcos-Paulo-de-Souza/printk-Introduce-LOUD_CON-flag/20241017-010521
base:   1d227fcc72223cbdd34d0ce13541cbaab5e0d72f
patch link:    https://lore.kernel.org/r/20241016-printk-loud-con-v1-2-065e4dad6632%40suse.com
patch subject: [PATCH 2/2] tty: sysrq: Use printk_loud_console context on __handle_sysrq
config: i386-buildonly-randconfig-001-20241018 (https://download.01.org/0day-ci/archive/20241018/202410181205.VT06PKmP-lkp@intel.com/config)
compiler: clang version 18.1.8 (https://github.com/llvm/llvm-project 3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241018/202410181205.VT06PKmP-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202410181205.VT06PKmP-lkp@intel.com/

All errors (new ones prefixed by >>):

>> drivers/tty/sysrq.c:600:2: error: call to undeclared function 'printk_loud_console_enter'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
     600 |         printk_loud_console_enter();
         |         ^
>> drivers/tty/sysrq.c:610:4: error: call to undeclared function 'printk_loud_console_exit'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
     610 |                         printk_loud_console_exit();
         |                         ^
   drivers/tty/sysrq.c:614:4: error: call to undeclared function 'printk_loud_console_exit'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
     614 |                         printk_loud_console_exit();
         |                         ^
   drivers/tty/sysrq.c:632:3: error: call to undeclared function 'printk_loud_console_exit'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
     632 |                 printk_loud_console_exit();
         |                 ^
   4 errors generated.


vim +/printk_loud_console_enter +600 drivers/tty/sysrq.c

   582	
   583	void __handle_sysrq(u8 key, bool check_mask)
   584	{
   585		const struct sysrq_key_op *op_p;
   586		int orig_suppress_printk;
   587		int i;
   588	
   589		orig_suppress_printk = suppress_printk;
   590		suppress_printk = 0;
   591	
   592		rcu_sysrq_start();
   593		rcu_read_lock();
   594		/*
   595		 * Enter in the console_loud context so that sysrq header is shown to
   596		 * provide the user with positive feedback.  We do not simply emit this
   597		 * at KERN_EMERG as that would change message routing in the consumers
   598		 * of /proc/kmsg.
   599		 */
 > 600		printk_loud_console_enter();
   601	
   602		op_p = __sysrq_get_key_op(key);
   603		if (op_p) {
   604			/*
   605			 * Should we check for enabled operations (/proc/sysrq-trigger
   606			 * should not) and is the invoked operation enabled?
   607			 */
   608			if (!check_mask || sysrq_on_mask(op_p->enable_mask)) {
   609				pr_info("%s\n", op_p->action_msg);
 > 610				printk_loud_console_exit();
   611				op_p->handler(key);
   612			} else {
   613				pr_info("This sysrq operation is disabled.\n");
   614				printk_loud_console_exit();
   615			}
   616		} else {
   617			pr_info("HELP : ");
   618			/* Only print the help msg once per handler */
   619			for (i = 0; i < ARRAY_SIZE(sysrq_key_table); i++) {
   620				if (sysrq_key_table[i]) {
   621					int j;
   622	
   623					for (j = 0; sysrq_key_table[i] !=
   624							sysrq_key_table[j]; j++)
   625						;
   626					if (j != i)
   627						continue;
   628					pr_cont("%s ", sysrq_key_table[i]->help_msg);
   629				}
   630			}
   631			pr_cont("\n");
   632			printk_loud_console_exit();
   633		}
   634		rcu_read_unlock();
   635		rcu_sysrq_end();
   636	
   637		suppress_printk = orig_suppress_printk;
   638	}
   639	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Re: [PATCH 2/2] tty: sysrq: Use printk_loud_console context on __handle_sysrq
Posted by kernel test robot 1 month, 1 week ago
Hi Marcos,

kernel test robot noticed the following build errors:

[auto build test ERROR on 1d227fcc72223cbdd34d0ce13541cbaab5e0d72f]

url:    https://github.com/intel-lab-lkp/linux/commits/Marcos-Paulo-de-Souza/printk-Introduce-LOUD_CON-flag/20241017-010521
base:   1d227fcc72223cbdd34d0ce13541cbaab5e0d72f
patch link:    https://lore.kernel.org/r/20241016-printk-loud-con-v1-2-065e4dad6632%40suse.com
patch subject: [PATCH 2/2] tty: sysrq: Use printk_loud_console context on __handle_sysrq
config: x86_64-buildonly-randconfig-004-20241018 (https://download.01.org/0day-ci/archive/20241018/202410181116.WA27FpBB-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241018/202410181116.WA27FpBB-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202410181116.WA27FpBB-lkp@intel.com/

All errors (new ones prefixed by >>):

   drivers/tty/sysrq.c: In function '__handle_sysrq':
>> drivers/tty/sysrq.c:600:9: error: implicit declaration of function 'printk_loud_console_enter' [-Werror=implicit-function-declaration]
     600 |         printk_loud_console_enter();
         |         ^~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/tty/sysrq.c:610:25: error: implicit declaration of function 'printk_loud_console_exit' [-Werror=implicit-function-declaration]
     610 |                         printk_loud_console_exit();
         |                         ^~~~~~~~~~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors


vim +/printk_loud_console_enter +600 drivers/tty/sysrq.c

   582	
   583	void __handle_sysrq(u8 key, bool check_mask)
   584	{
   585		const struct sysrq_key_op *op_p;
   586		int orig_suppress_printk;
   587		int i;
   588	
   589		orig_suppress_printk = suppress_printk;
   590		suppress_printk = 0;
   591	
   592		rcu_sysrq_start();
   593		rcu_read_lock();
   594		/*
   595		 * Enter in the console_loud context so that sysrq header is shown to
   596		 * provide the user with positive feedback.  We do not simply emit this
   597		 * at KERN_EMERG as that would change message routing in the consumers
   598		 * of /proc/kmsg.
   599		 */
 > 600		printk_loud_console_enter();
   601	
   602		op_p = __sysrq_get_key_op(key);
   603		if (op_p) {
   604			/*
   605			 * Should we check for enabled operations (/proc/sysrq-trigger
   606			 * should not) and is the invoked operation enabled?
   607			 */
   608			if (!check_mask || sysrq_on_mask(op_p->enable_mask)) {
   609				pr_info("%s\n", op_p->action_msg);
 > 610				printk_loud_console_exit();
   611				op_p->handler(key);
   612			} else {
   613				pr_info("This sysrq operation is disabled.\n");
   614				printk_loud_console_exit();
   615			}
   616		} else {
   617			pr_info("HELP : ");
   618			/* Only print the help msg once per handler */
   619			for (i = 0; i < ARRAY_SIZE(sysrq_key_table); i++) {
   620				if (sysrq_key_table[i]) {
   621					int j;
   622	
   623					for (j = 0; sysrq_key_table[i] !=
   624							sysrq_key_table[j]; j++)
   625						;
   626					if (j != i)
   627						continue;
   628					pr_cont("%s ", sysrq_key_table[i]->help_msg);
   629				}
   630			}
   631			pr_cont("\n");
   632			printk_loud_console_exit();
   633		}
   634		rcu_read_unlock();
   635		rcu_sysrq_end();
   636	
   637		suppress_printk = orig_suppress_printk;
   638	}
   639	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki