mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Ilya Leoshkevich <iii@linux.ibm.com>
To: Heiko Carstens <hca@linux.ibm.com>,
	Alexander Gordeev <agordeev@linux.ibm.com>,
	Sven Schnelle <svens@linux.ibm.com>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Christian Borntraeger <borntraeger@linux.ibm.com>,
	Niklas Schnelle <schnelle@linux.ibm.com>,
	Matthew Rosato <mjrosato@linux.ibm.com>,
	Gerald Schaefer <gerald.schaefer@linux.ibm.com>,
	Vineeth Vijayan <vneethv@linux.ibm.com>,
	Peter Oberparleiter <oberpar@linux.ibm.com>,
	Harald Freudenberger <freude@linux.ibm.com>,
	Holger Dengler <dengler@linux.ibm.com>,
	Stefan Haberland <sth@linux.ibm.com>,
	Jan Hoeppner <hoeppner@linux.ibm.com>,
	Janosch Frank <frankja@linux.ibm.com>,
	Claudio Imbrenda <imbrenda@linux.ibm.com>
Cc: linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org
Subject: Re: [PATCH 04/32] s390/bug: Indicate modified PSW in disassembly
Date: Mon, 12 Oct 2026 17:07:52 +0200	[thread overview]
Message-ID: <b85d6175-5587-4bca-9851-30241bc96158@linux.ibm.com> (raw)
In-Reply-To: <20261001103247.1989111-5-hca@linux.ibm.com>



On 10/1/26 12:32, Heiko Carstens wrote:
> With [1] the PSW address is set to the return address of the calling
> __WARN_trap() function in order to provide a more useful disassembly of
> the caller rather than the helper itself.
> 
> However, since regs->psw.addr is modified, regs->int_code has nothing to
> do with the exception. In order to make that more obvious change the
> disassembler output.
> 
> Introduce a new PIF_WARN_TRAP_SKIPPED pt_regs flag and set it whenever
> __WARN_trap() is skipped. In the disassembler output print a "WARN RET"
> prefix to make it obvious that the PSW points to the return address of
> the warning trap function.
> 
> Also do not print the interruption code and instruction length code for
> this case, since they have nothing to do with the modified PSW.
> 
> Example output:
> 
> Krnl Code:
>             000003ffe185bc1c: e3f0ff98ff71 lay     %r15,-104(%r15)
>             000003ffe185bc22: e3e0f0980024 stg     %r14,152(%r15)
>             000003ffe185bc28: c0e5ff45ed94 brasl   %r14,000003ffe0119750
>   WARN RET >000003ffe185bc2e: c0e5ffa052b9 brasl   %r14,000003ffe0c661a0
>             000003ffe185bc34: c020fffe86d6 larl    %r2,000003ffe182c9e0
>             000003ffe185bc3a: e548f0a80006 mvghi   168(%r15),6
>             000003ffe185bc40: e548f0a00005 mvghi   160(%r15),5
>             000003ffe185bc46: a7690004     lghi    %r6,4
> 
> [1] 79996065cfa2 ("s390/bug: Skip __WARN_trap() in call traces")
> 
> Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
> ---
>   arch/s390/include/asm/ptrace.h |  2 ++
>   arch/s390/kernel/dis.c         | 23 ++++++++++-------------
>   arch/s390/kernel/dumpstack.c   |  7 +++++--
>   arch/s390/kernel/early.c       |  9 +++++++--
>   arch/s390/kernel/traps.c       |  1 +
>   5 files changed, 25 insertions(+), 17 deletions(-)
> 
> diff --git a/arch/s390/include/asm/ptrace.h b/arch/s390/include/asm/ptrace.h
> index 6411e3584283..c844b8aa0fd9 100644
> --- a/arch/s390/include/asm/ptrace.h
> +++ b/arch/s390/include/asm/ptrace.h
> @@ -17,11 +17,13 @@
>   #define PIF_PSW_ADDR_ADJUSTED		1	/* psw address has been adjusted */
>   #define PIF_SYSCALL_RET_SET		2	/* return value was set via ptrace */
>   #define PIF_FTRACE_FULL_REGS		3	/* all register contents valid (ftrace) */
> +#define PIF_WARN_TRAP_SKIPPED		4	/* __WARN_trap() was skipped */
>   
>   #define _PIF_SYSCALL			BIT(PIF_SYSCALL)
>   #define _PIF_ADDR_PSW_ADJUSTED		BIT(PIF_PSW_ADDR_ADJUSTED)
>   #define _PIF_SYSCALL_RET_SET		BIT(PIF_SYSCALL_RET_SET)
>   #define _PIF_FTRACE_FULL_REGS		BIT(PIF_FTRACE_FULL_REGS)
> +#define _PIF_WARN_TRAP_SKIPPED		BIT(PIF_WARN_TRAP_SKIPPED)
>   
>   #define PSW32_MASK_PER		_AC(0x40000000, UL)
>   #define PSW32_MASK_DAT		_AC(0x04000000, UL)
> diff --git a/arch/s390/kernel/dis.c b/arch/s390/kernel/dis.c
> index 1cec93895b3a..5a1a24d211c3 100644
> --- a/arch/s390/kernel/dis.c
> +++ b/arch/s390/kernel/dis.c
> @@ -540,34 +540,31 @@ void show_code(struct pt_regs *regs)
>   		start += 2;
>   	}
>   	/* Decode the instructions. */
> -	ptr = buffer;
> -	ptr += sprintf(ptr, "%s Code:", mode);
> +	printk("%s Code:\n", mode);
>   	hops = 0;
>   	while (start < end && hops < 8) {
> +		ptr = buffer;
>   		opsize = insn_length(code[start]);
> -		if  (start + opsize == 32)
> -			*ptr++ = '*';
> +		if (start == 32 && test_pt_regs_flag(regs, PIF_WARN_TRAP_SKIPPED))
> +			ptr += sprintf(ptr, " WARN RET >");
> +		else if (start + opsize == 32 && !test_pt_regs_flag(regs, PIF_WARN_TRAP_SKIPPED))
> +			ptr += sprintf(ptr, "          *");
>   		else if (start == 32)
> -			*ptr++ = '>';
> +			ptr += sprintf(ptr, "          >");
>   		else
> -			*ptr++ = ' ';
> +			ptr += sprintf(ptr, "           ");
>   		addr = pswaddr + start - 32;
>   		ptr += sprintf(ptr, "%px: ", (void *)addr);
>   		if (start + opsize >= end)
>   			break;
>   		for (i = 0; i < opsize; i++)
>   			ptr += sprintf(ptr, "%02x", code[start + i]);
> -		*ptr++ = '\t';
> -		if (i < 6)
> -			*ptr++ = '\t';
> +		ptr += sprintf(ptr, "%*s", 13 - 2 * opsize, " ");
>   		ptr += print_insn(ptr, code + start, addr);
>   		start += opsize;
> -		pr_cont("%s", buffer);
> -		ptr = buffer;
> -		ptr += sprintf(ptr, "\n          ");
> +		pr_cont("%s\n", buffer);

Should this really be pr_cont() and not printk()?
The KERN_CONT doc says:

     only done after a line that had no enclosing \n

and the new code prints everything line-by-line.

  reply	other threads:[~2026-10-12 15:08 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-01 10:32 [PATCH 00/32] s390: Improve exception table handling and disassembler Heiko Carstens
2026-10-01 10:32 ` [PATCH 01/32] s390/kprobes: Prevent kprobes on instructions with exception table entry Heiko Carstens
2026-10-12 11:31   ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 02/32] s390/early: Fix early warning handling Heiko Carstens
2026-10-12 12:11   ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 03/32] s390: Clear pt_regs flags field Heiko Carstens
2026-10-12 12:15   ` Ilya Leoshkevich
2026-10-12 12:21     ` Heiko Carstens
2026-10-01 10:32 ` [PATCH 04/32] s390/bug: Indicate modified PSW in disassembly Heiko Carstens
2026-10-12 15:07   ` Ilya Leoshkevich [this message]
2026-10-12 15:29     ` Heiko Carstens
2026-10-12 15:37       ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 05/32] s390/tools: Rename gen_facilities to gen_bitmaps Heiko Carstens
2026-10-12 12:35   ` Ilya Leoshkevich
2026-10-12 13:26     ` Heiko Carstens
2026-10-01 10:32 ` [PATCH 06/32] s390/tools: Generate bitmap of nullified program checks Heiko Carstens
2026-10-12 12:50   ` Ilya Leoshkevich
2026-10-12 13:32     ` Heiko Carstens
2026-10-01 10:32 ` [PATCH 07/32] s390/traps: Handle nullifying program checks in get_trap_ip() Heiko Carstens
2026-10-12 13:01   ` Ilya Leoshkevich
2026-10-12 13:42     ` Heiko Carstens
2026-10-12 14:31       ` Ilya Leoshkevich
2026-10-12 15:30         ` Heiko Carstens
2026-10-01 10:32 ` [PATCH 08/32] s390/dis: Improve show_code() output Heiko Carstens
2026-10-12 15:08   ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 09/32] s390/extable: Rework exception handling logic Heiko Carstens
2026-10-12 13:09   ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 10/32] s390/diag: Convert amode31 exception tables to EX_TABLE_INSN Heiko Carstens
2026-10-12 13:13   ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 11/32] s390/uaccess: Convert inline assembly " Heiko Carstens
2026-10-12 13:16   ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 12/32] s390/lib/uaccess: " Heiko Carstens
2026-10-12 13:24   ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 13/32] s390/futex: " Heiko Carstens
2026-10-12 13:27   ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 14/32] s390/diag: " Heiko Carstens
2026-10-12 14:20   ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 15/32] s390/mm/pfault: " Heiko Carstens
2026-10-12 14:21   ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 16/32] s390/cpu_mf: " Heiko Carstens
2026-10-12 14:22   ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 17/32] s390/cert_store: " Heiko Carstens
2026-10-12 14:23   ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 18/32] s390/ipl: " Heiko Carstens
2026-10-12 14:23   ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 19/32] s390/hypfs: " Heiko Carstens
2026-10-12 14:24   ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 20/32] s390/ap: " Heiko Carstens
2026-10-02  7:54   ` Harald Freudenberger
2026-10-01 10:32 ` [PATCH 21/32] s390/fpu: " Heiko Carstens
2026-10-12 14:25   ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 22/32] s390/traps: " Heiko Carstens
2026-10-12 14:25   ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 23/32] s390/word-at-a-time: " Heiko Carstens
2026-10-12 14:26   ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 24/32] s390/kvm: " Heiko Carstens
2026-10-02  8:24   ` Claudio Imbrenda
2026-10-01 10:32 ` [PATCH 25/32] s390/pci: " Heiko Carstens
2026-10-02  9:12   ` Niklas Schnelle
2026-10-01 10:32 ` [PATCH 26/32] s390/boot: " Heiko Carstens
2026-10-12 14:28   ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 27/32] s390/cio: " Heiko Carstens
2026-10-12 14:32   ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 28/32] s390/dasd: " Heiko Carstens
2026-10-12 14:33   ` Ilya Leoshkevich
2026-10-12 14:52   ` Stefan Haberland
2026-10-01 10:32 ` [PATCH 29/32] s390/diag_ftp: " Heiko Carstens
2026-10-12 14:33   ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 30/32] s390/sclp: " Heiko Carstens
2026-10-12 14:34   ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 31/32] s390/bpf: Simplify exception table entry handling Heiko Carstens
2026-10-12 14:38   ` Ilya Leoshkevich
2026-10-01 10:32 ` [PATCH 32/32] s390/extable: Remove EX_TABLE macros and fallback extable search Heiko Carstens
2026-10-12 14:43   ` Ilya Leoshkevich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b85d6175-5587-4bca-9851-30241bc96158@linux.ibm.com \
    --to=iii@linux.ibm.com \
    --cc=agordeev@linux.ibm.com \
    --cc=borntraeger@linux.ibm.com \
    --cc=dengler@linux.ibm.com \
    --cc=frankja@linux.ibm.com \
    --cc=freude@linux.ibm.com \
    --cc=gerald.schaefer@linux.ibm.com \
    --cc=gor@linux.ibm.com \
    --cc=hca@linux.ibm.com \
    --cc=hoeppner@linux.ibm.com \
    --cc=imbrenda@linux.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=mjrosato@linux.ibm.com \
    --cc=oberpar@linux.ibm.com \
    --cc=schnelle@linux.ibm.com \
    --cc=sth@linux.ibm.com \
    --cc=svens@linux.ibm.com \
    --cc=vneethv@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®