diff mbox

powerpc/xmon: Fix an unexpected xmon onoff state change

Message ID 1487144990-5969-1-git-send-email-xinhui.pan@linux.vnet.ibm.com (mailing list archive)
State Superseded
Headers show

Commit Message

xinhui Feb. 15, 2017, 7:49 a.m. UTC
Once xmon is triggered by sysrq-x, it is enabled always afterwards even
if it is disabled during boot. This will cause a system reset interrut
fail to dump. So keep xmon in its original state after exit.

Signed-off-by: Pan Xinhui <xinhui.pan@linux.vnet.ibm.com>
---
 arch/powerpc/xmon/xmon.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Guilherme G. Piccoli Feb. 15, 2017, 9:22 p.m. UTC | #1
On 15/02/2017 05:49, Pan Xinhui wrote:
> Once xmon is triggered by sysrq-x, it is enabled always afterwards even
> if it is disabled during boot. This will cause a system reset interrut
> fail to dump. So keep xmon in its original state after exit.
> 
> Signed-off-by: Pan Xinhui <xinhui.pan@linux.vnet.ibm.com>

Patch is fine - minor typo: interrut => interrupt

Feel free to add my:
Tested-by: Guilherme G. Piccoli <gpiccoli@linux.vnet.ibm.com>

Thanks,


Guilherme

> ---
>  arch/powerpc/xmon/xmon.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
> index 9c0e17c..721212f 100644
> --- a/arch/powerpc/xmon/xmon.c
> +++ b/arch/powerpc/xmon/xmon.c
> @@ -76,6 +76,7 @@ static int xmon_gate;
>  #endif /* CONFIG_SMP */
> 
>  static unsigned long in_xmon __read_mostly = 0;
> +static int xmon_off = 0;
> 
>  static unsigned long adrs;
>  static int size = 1;
> @@ -3250,6 +3251,8 @@ static void sysrq_handle_xmon(int key)
>  	/* ensure xmon is enabled */
>  	xmon_init(1);
>  	debugger(get_irq_regs());
> +	if (xmon_off)
> +		xmon_init(0);
>  }
> 
>  static struct sysrq_key_op sysrq_xmon_op = {
> @@ -3266,7 +3269,7 @@ static int __init setup_xmon_sysrq(void)
>  __initcall(setup_xmon_sysrq);
>  #endif /* CONFIG_MAGIC_SYSRQ */
> 
> -static int __initdata xmon_early, xmon_off;
> +static int __initdata xmon_early;
> 
>  static int __init early_parse_xmon(char *p)
>  {
>
Michael Ellerman Feb. 16, 2017, 5:09 a.m. UTC | #2
Pan Xinhui <xinhui.pan@linux.vnet.ibm.com> writes:

> Once xmon is triggered by sysrq-x, it is enabled always afterwards even
> if it is disabled during boot. This will cause a system reset interrut
> fail to dump. So keep xmon in its original state after exit.
>
> Signed-off-by: Pan Xinhui <xinhui.pan@linux.vnet.ibm.com>
> ---
>  arch/powerpc/xmon/xmon.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
> index 9c0e17c..721212f 100644
> --- a/arch/powerpc/xmon/xmon.c
> +++ b/arch/powerpc/xmon/xmon.c
> @@ -76,6 +76,7 @@ static int xmon_gate;
>  #endif /* CONFIG_SMP */
>  
>  static unsigned long in_xmon __read_mostly = 0;
> +static int xmon_off = 0;
>  
>  static unsigned long adrs;
>  static int size = 1;
> @@ -3250,6 +3251,8 @@ static void sysrq_handle_xmon(int key)
>  	/* ensure xmon is enabled */
>  	xmon_init(1);
>  	debugger(get_irq_regs());
> +	if (xmon_off)
> +		xmon_init(0);
>  }

I don't think this is right.

xmon_off is only true if you boot with xmon=off on the command line.

So if you boot with CONFIG_XMON_DEFAULT=n, and nothing on the command
line, then enter xmon via sysrq, then exit, xmon will still be enabled.

cheers
Guilherme G. Piccoli Feb. 16, 2017, 10:57 a.m. UTC | #3
On 16/02/2017 03:09, Michael Ellerman wrote:
> Pan Xinhui <xinhui.pan@linux.vnet.ibm.com> writes:
> 
>> Once xmon is triggered by sysrq-x, it is enabled always afterwards even
>> if it is disabled during boot. This will cause a system reset interrut
>> fail to dump. So keep xmon in its original state after exit.
>>
>> Signed-off-by: Pan Xinhui <xinhui.pan@linux.vnet.ibm.com>
>> ---
>>  arch/powerpc/xmon/xmon.c | 5 ++++-
>>  1 file changed, 4 insertions(+), 1 deletion(-)
>>
>> diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
>> index 9c0e17c..721212f 100644
>> --- a/arch/powerpc/xmon/xmon.c
>> +++ b/arch/powerpc/xmon/xmon.c
>> @@ -76,6 +76,7 @@ static int xmon_gate;
>>  #endif /* CONFIG_SMP */
>>  
>>  static unsigned long in_xmon __read_mostly = 0;
>> +static int xmon_off = 0;
>>  
>>  static unsigned long adrs;
>>  static int size = 1;
>> @@ -3250,6 +3251,8 @@ static void sysrq_handle_xmon(int key)
>>  	/* ensure xmon is enabled */
>>  	xmon_init(1);
>>  	debugger(get_irq_regs());
>> +	if (xmon_off)
>> +		xmon_init(0);
>>  }
> 
> I don't think this is right.
> 
> xmon_off is only true if you boot with xmon=off on the command line.
> 
> So if you boot with CONFIG_XMON_DEFAULT=n, and nothing on the command
> line, then enter xmon via sysrq, then exit, xmon will still be enabled.
> 

Agreed, noticed it after some work in V2 of my patch. I'm addressing it
there, so maybe no harm in keeping this way here..

Thanks,


Guilherme



> cheers
>
diff mbox

Patch

diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
index 9c0e17c..721212f 100644
--- a/arch/powerpc/xmon/xmon.c
+++ b/arch/powerpc/xmon/xmon.c
@@ -76,6 +76,7 @@  static int xmon_gate;
 #endif /* CONFIG_SMP */
 
 static unsigned long in_xmon __read_mostly = 0;
+static int xmon_off = 0;
 
 static unsigned long adrs;
 static int size = 1;
@@ -3250,6 +3251,8 @@  static void sysrq_handle_xmon(int key)
 	/* ensure xmon is enabled */
 	xmon_init(1);
 	debugger(get_irq_regs());
+	if (xmon_off)
+		xmon_init(0);
 }
 
 static struct sysrq_key_op sysrq_xmon_op = {
@@ -3266,7 +3269,7 @@  static int __init setup_xmon_sysrq(void)
 __initcall(setup_xmon_sysrq);
 #endif /* CONFIG_MAGIC_SYSRQ */
 
-static int __initdata xmon_early, xmon_off;
+static int __initdata xmon_early;
 
 static int __init early_parse_xmon(char *p)
 {