All of lore.kernel.org
 help / color / mirror / Atom feed
From: Xin Li <xin3.li@intel.com>
To: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-edac@vger.kernel.org, linux-hyperv@vger.kernel.org,
	kvm@vger.kernel.org, xen-devel@lists.xenproject.org
Cc: tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
	dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com,
	luto@kernel.org, pbonzini@redhat.com, seanjc@google.com,
	peterz@infradead.org, jgross@suse.com, ravi.v.shankar@intel.com,
	mhiramat@kernel.org, andrew.cooper3@citrix.com,
	jiangshanlai@gmail.com, nik.borisov@suse.com
Subject: [PATCH v12 15/37] x86/ptrace: Cleanup the definition of the pt_regs structure
Date: Mon,  2 Oct 2023 23:24:36 -0700	[thread overview]
Message-ID: <20231003062458.23552-16-xin3.li@intel.com> (raw)
In-Reply-To: <20231003062458.23552-1-xin3.li@intel.com>

struct pt_regs is hard to read because the member or section related
comments are not aligned with the members.

The 'cs' and 'ss' members of pt_regs are type of 'unsigned long' while
in reality they are only 16-bit wide. This works so far as the
remaining space is unused, but FRED will use the remaining bits for
other purposes.

To prepare for FRED:

  - Cleanup the formatting
  - Convert 'cs' and 'ss' to u16 and embed them into an union
    with a u64
  - Fixup the related printk() format strings

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Tested-by: Shan Kang <shan.kang@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Xin Li <xin3.li@intel.com>
---
 arch/x86/entry/vsyscall/vsyscall_64.c |  2 +-
 arch/x86/include/asm/ptrace.h         | 44 +++++++++++++++++++--------
 arch/x86/kernel/process_64.c          |  2 +-
 3 files changed, 33 insertions(+), 15 deletions(-)

diff --git a/arch/x86/entry/vsyscall/vsyscall_64.c b/arch/x86/entry/vsyscall/vsyscall_64.c
index e0ca8120aea8..a3c0df11d0e6 100644
--- a/arch/x86/entry/vsyscall/vsyscall_64.c
+++ b/arch/x86/entry/vsyscall/vsyscall_64.c
@@ -76,7 +76,7 @@ static void warn_bad_vsyscall(const char *level, struct pt_regs *regs,
 	if (!show_unhandled_signals)
 		return;
 
-	printk_ratelimited("%s%s[%d] %s ip:%lx cs:%lx sp:%lx ax:%lx si:%lx di:%lx\n",
+	printk_ratelimited("%s%s[%d] %s ip:%lx cs:%x sp:%lx ax:%lx si:%lx di:%lx\n",
 			   level, current->comm, task_pid_nr(current),
 			   message, regs->ip, regs->cs,
 			   regs->sp, regs->ax, regs->si, regs->di);
diff --git a/arch/x86/include/asm/ptrace.h b/arch/x86/include/asm/ptrace.h
index f4db78b09c8f..f08ea073edd6 100644
--- a/arch/x86/include/asm/ptrace.h
+++ b/arch/x86/include/asm/ptrace.h
@@ -57,17 +57,19 @@ struct pt_regs {
 #else /* __i386__ */
 
 struct pt_regs {
-/*
- * C ABI says these regs are callee-preserved. They aren't saved on kernel entry
- * unless syscall needs a complete, fully filled "struct pt_regs".
- */
+	/*
+	 * C ABI says these regs are callee-preserved. They aren't saved on
+	 * kernel entry unless syscall needs a complete, fully filled
+	 * "struct pt_regs".
+	 */
 	unsigned long r15;
 	unsigned long r14;
 	unsigned long r13;
 	unsigned long r12;
 	unsigned long bp;
 	unsigned long bx;
-/* These regs are callee-clobbered. Always saved on kernel entry. */
+
+	/* These regs are callee-clobbered. Always saved on kernel entry. */
 	unsigned long r11;
 	unsigned long r10;
 	unsigned long r9;
@@ -77,18 +79,34 @@ struct pt_regs {
 	unsigned long dx;
 	unsigned long si;
 	unsigned long di;
-/*
- * On syscall entry, this is syscall#. On CPU exception, this is error code.
- * On hw interrupt, it's IRQ number:
- */
+
+	/*
+	 * orig_ax is used on entry for:
+	 * - the syscall number (syscall, sysenter, int80)
+	 * - error_code stored by the CPU on traps and exceptions
+	 * - the interrupt number for device interrupts
+	 */
 	unsigned long orig_ax;
-/* Return frame for iretq */
+
+	/* The IRETQ return frame starts here */
 	unsigned long ip;
-	unsigned long cs;
+
+	union {
+		u64	csx;	// The full 64-bit data slot containing CS
+		u16	cs;	// CS selector
+	};
+
 	unsigned long flags;
 	unsigned long sp;
-	unsigned long ss;
-/* top of stack page */
+
+	union {
+		u64	ssx;	// The full 64-bit data slot containing SS
+		u16	ss;	// SS selector
+	};
+
+	/*
+	 * Top of stack on IDT systems.
+	 */
 };
 
 #endif /* !__i386__ */
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
index 33b268747bb7..0f78b58021bb 100644
--- a/arch/x86/kernel/process_64.c
+++ b/arch/x86/kernel/process_64.c
@@ -117,7 +117,7 @@ void __show_regs(struct pt_regs *regs, enum show_regs_mode mode,
 
 	printk("%sFS:  %016lx(%04x) GS:%016lx(%04x) knlGS:%016lx\n",
 	       log_lvl, fs, fsindex, gs, gsindex, shadowgs);
-	printk("%sCS:  %04lx DS: %04x ES: %04x CR0: %016lx\n",
+	printk("%sCS:  %04x DS: %04x ES: %04x CR0: %016lx\n",
 		log_lvl, regs->cs, ds, es, cr0);
 	printk("%sCR2: %016lx CR3: %016lx CR4: %016lx\n",
 		log_lvl, cr2, cr3, cr4);
-- 
2.34.1


  parent reply	other threads:[~2023-10-03  6:54 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-03  6:24 [PATCH v12 00/37] x86: enable FRED for x86-64 Xin Li
2023-10-03  6:24 ` [PATCH v12 01/37] x86/cpufeatures: Add the cpu feature bit for WRMSRNS Xin Li
2023-11-08 12:36   ` Borislav Petkov
2023-11-14  0:43     ` Li, Xin3
2023-11-14  5:02       ` Borislav Petkov
2023-11-14  5:58         ` Li, Xin3
2023-10-03  6:24 ` [PATCH v12 02/37] x86/opcode: Add the WRMSRNS instruction to the x86 opcode map Xin Li
2023-11-30  6:01   ` Li, Xin3
2023-10-03  6:24 ` [PATCH v12 03/37] x86/msr: Add the WRMSRNS instruction support Xin Li
2023-10-03  6:24 ` [PATCH v12 04/37] x86/entry: Remove idtentry_sysvec from entry_{32,64}.S Xin Li
2023-10-03  6:24 ` [PATCH v12 05/37] x86/trapnr: Add event type macros to <asm/trapnr.h> Xin Li
2023-10-03  6:24 ` [PATCH v12 06/37] Documentation/x86/64: Add a documentation for FRED Xin Li
2023-10-03  9:59   ` Bagas Sanjaya
2023-10-05  8:04     ` Li, Xin3
2023-10-03  6:24 ` [PATCH v12 07/37] x86/fred: Add Kconfig option for FRED (CONFIG_X86_FRED) Xin Li
2023-10-03  6:24 ` [PATCH v12 08/37] x86/cpufeatures: Add the cpu feature bit for FRED Xin Li
2023-10-03  6:24 ` [PATCH v12 09/37] x86/fred: Disable FRED support if CONFIG_X86_FRED is disabled Xin Li
2023-10-03  6:24 ` [PATCH v12 10/37] x86/fred: Disable FRED by default in its early stage Xin Li
2023-10-03  6:24 ` [PATCH v12 11/37] x86/opcode: Add ERET[US] instructions to the x86 opcode map Xin Li
2023-10-03  6:24 ` [PATCH v12 12/37] x86/objtool: Teach objtool about ERET[US] Xin Li
2023-10-03  6:24 ` [PATCH v12 13/37] x86/cpu: Add X86_CR4_FRED macro Xin Li
2023-10-03  6:24 ` [PATCH v12 14/37] x86/cpu: Add MSR numbers for FRED configuration Xin Li
2023-10-03  6:24 ` Xin Li [this message]
2023-11-28  8:36   ` [PATCH v12 15/37] x86/ptrace: Cleanup the definition of the pt_regs structure Borislav Petkov
2023-10-03  6:24 ` [PATCH v12 16/37] x86/ptrace: Add FRED additional information to " Xin Li
2023-11-28  8:51   ` Borislav Petkov
2023-11-28 17:18     ` H. Peter Anvin
2023-10-03  6:24 ` [PATCH v12 17/37] x86/fred: Add a new header file for FRED definitions Xin Li
2023-10-03  6:24 ` [PATCH v12 18/37] x86/fred: Reserve space for the FRED stack frame Xin Li
2023-10-03  6:24 ` [PATCH v12 19/37] x86/fred: Update MSR_IA32_FRED_RSP0 during task switch Xin Li
2023-11-13  9:37   ` Borislav Petkov
2023-11-13 17:36     ` H. Peter Anvin
2023-11-13 18:29       ` Borislav Petkov
2023-11-13 18:44         ` H. Peter Anvin
2023-10-03  6:24 ` [PATCH v12 20/37] x86/fred: Disallow the swapgs instruction when FRED is enabled Xin Li
2023-11-28  9:53   ` Borislav Petkov
2023-10-03  6:24 ` [PATCH v12 21/37] x86/fred: No ESPFIX needed " Xin Li
2023-10-03  6:24 ` [PATCH v12 22/37] x86/fred: Allow single-step trap and NMI when starting a new task Xin Li
2023-10-03  6:24 ` [PATCH v12 23/37] x86/fred: Make exc_page_fault() work for FRED Xin Li
2023-11-28 10:02   ` Borislav Petkov
2023-10-03  6:24 ` [PATCH v12 24/37] x86/idtentry: Incorporate definitions/declarations of the FRED entries Xin Li
2023-11-28 10:09   ` Borislav Petkov
2023-11-28 18:39     ` Li, Xin3
2023-11-28 18:58       ` H. Peter Anvin
2023-11-28 19:18         ` Borislav Petkov
2023-10-03  6:24 ` [PATCH v12 25/37] x86/fred: Add a debug fault entry stub for FRED Xin Li
2023-10-03  6:24 ` [PATCH v12 26/37] x86/fred: Add a NMI " Xin Li
2023-10-03  6:24 ` [PATCH v12 27/37] x86/fred: Add a machine check " Xin Li
2023-10-03  6:24 ` [PATCH v12 28/37] x86/fred: FRED entry/exit and dispatch code Xin Li
2023-10-03  6:24 ` [PATCH v12 29/37] x86/traps: Add sysvec_install() to install a system interrupt handler Xin Li
2023-10-03  6:24 ` [PATCH v12 30/37] x86/fred: Let ret_from_fork_asm() jmp to asm_fred_exit_user when FRED is enabled Xin Li
2023-10-03  6:24 ` [PATCH v12 31/37] x86/fred: Fixup fault on ERETU by jumping to fred_entrypoint_user Xin Li
2023-10-03  6:24 ` [PATCH v12 32/37] x86/entry/calling: Allow PUSH_AND_CLEAR_REGS being used beyond actual entry code Xin Li
2023-10-03  6:24 ` [PATCH v12 33/37] x86/entry: Add fred_entry_from_kvm() for VMX to handle IRQ/NMI Xin Li
2023-10-03  6:24 ` [PATCH v12 34/37] KVM: VMX: Call fred_entry_from_kvm() for IRQ/NMI handling Xin Li
2023-10-03  6:24 ` [PATCH v12 35/37] x86/syscall: Split IDT syscall setup code into idt_syscall_init() Xin Li
2023-10-03  6:24 ` [PATCH v12 36/37] x86/fred: Add FRED initialization functions Xin Li
2023-10-03  6:24 ` [PATCH v12 37/37] x86/fred: Invoke FRED initialization code to enable FRED Xin Li
2023-10-05  6:18 ` [PATCH v12 00/37] x86: enable FRED for x86-64 Nikolay Borisov
2023-10-05  7:21   ` Li, Xin3

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=20231003062458.23552-16-xin3.li@intel.com \
    --to=xin3.li@intel.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=jgross@suse.com \
    --cc=jiangshanlai@gmail.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-edac@vger.kernel.org \
    --cc=linux-hyperv@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=mhiramat@kernel.org \
    --cc=mingo@redhat.com \
    --cc=nik.borisov@suse.com \
    --cc=pbonzini@redhat.com \
    --cc=peterz@infradead.org \
    --cc=ravi.v.shankar@intel.com \
    --cc=seanjc@google.com \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    --cc=xen-devel@lists.xenproject.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.