Re: [PATCH] s390x: Print userspace PSW and registers for active tasks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




----- Original Message -----
> Hi Dave,
> 
> Currently when we find a userspace pt_regs at the beginning of the stack,
> we print nothing. With this patch the userspace PSW and general purpose
> registers are printed.
> 
> With this change for the user it is clearer now that the task has
> been interrupted while running in userspace.
> 
> Example: External interrupt while in userspace
> 
> Before change:
> 
>  crash> bt -a
>  ...
>  #1 [176327e08] arch_send_call_function_ipi_mask at 115d80
>  #2 [176327e38] do_extint at 10dd82
>  #3 [176327eb0] ext_skip at 63e344
> 
> After change:
> 
>  crash> bt -a
>  ...
>  #1 [176327e08] arch_send_call_function_ipi_mask at 115d80
>  #2 [176327e38] do_extint at 10dd82
>  #3 [176327eb0] ext_skip at 63e344
>  PSW:  0705e00180000000 0000000080000a16 (userspace)
>  GPRS: 0000000000000001 000003ff00647213 000003fffd800000 0000000003710001
>        0000000080000afc 000003fffff77e58 0000000080000bb0 000003fffff781c0
>        00000000800007bc 0000000000000000 0000000080000b44 000003fffff77e58
>        000003fffd7c6000 000003fffd777020 0000000080000b02 000003fffff77e58
> 
> Michael

Looks good -- queued for crash-6.0.6.

Thanks,
  Dave

> ---
>  s390x.c |   20 +++++++++++++-------
>  1 file changed, 13 insertions(+), 7 deletions(-)
> 
> --- a/s390x.c
> +++ b/s390x.c
> @@ -978,12 +978,16 @@ static void print_ptregs(struct bt_info
>  		return;
>  
>  	fprintf(fp, " PSW:  %016lx %016lx ", psw_flags, psw_addr);
> -	sym = closest_symbol(psw_addr);
> -	offs = psw_addr - closest_symbol_value(psw_addr);
> -	if (module_symbol(psw_addr, NULL, &lm, NULL, 0))
> -		fprintf(fp, "(%s+%ld [%s])\n", sym, offs, lm->mod_name);
> -	else
> -		fprintf(fp, "(%s+%ld)\n", sym, offs);
> +	if (psw_flags & S390X_PSW_MASK_PSTATE) {
> +		fprintf(fp, "(user space)\n");
> +	} else {
> +		sym = closest_symbol(psw_addr);
> +		offs = psw_addr - closest_symbol_value(psw_addr);
> +		if (module_symbol(psw_addr, NULL, &lm, NULL, 0))
> +			fprintf(fp, "(%s+%ld [%s])\n", sym, offs, lm->mod_name);
> +		else
> +			fprintf(fp, "(%s+%ld)\n", sym, offs);
> +	}
>  
>  	addr = sp + MEMBER_OFFSET("pt_regs", "gprs");
>  	for (i = 0; i < 16; i++) {
> @@ -1039,8 +1043,10 @@ static unsigned long show_trace(struct b
>  			return sp;
>  		/* Check for user PSW */
>  		reg = readmem_ul(sp + MEMBER_OFFSET("pt_regs", "psw"));
> -		if (reg & S390X_PSW_MASK_PSTATE)
> +		if (reg & S390X_PSW_MASK_PSTATE) {
> +			print_ptregs(bt, sp);
>  			return sp;
> +		}
>  		/* Get new backchain from r15 */
>  		reg = readmem_ul(sp + MEMBER_OFFSET("pt_regs", "gprs") +
>  				 15 * sizeof(long));
> 

--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/crash-utility


[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux