From patchwork Mon Mar 27 07:58:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Li, Xin3" X-Patchwork-Id: 75273 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1357782vqo; Mon, 27 Mar 2023 01:39:19 -0700 (PDT) X-Google-Smtp-Source: AKy350Zurvk4GGD4JyHtExq1A9xa/eUmWs+oDbEWbObH3b3MEyYgyiSj7a8p3iDBznmkN5vuOp5T X-Received: by 2002:a17:903:2055:b0:1a1:b137:4976 with SMTP id q21-20020a170903205500b001a1b1374976mr9369252pla.19.1679906359571; Mon, 27 Mar 2023 01:39:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679906359; cv=none; d=google.com; s=arc-20160816; b=V0t3NmE91d+b4gpM/JtxEciuUnxnIRS5uVSPQk+t5L4gYnCvbhH70mZeYThT0Pi5wC Tep3lIB1h+tX19Rld/a5zazacc4QrAvyhB8W7mY6FJ1QXCIpc25AARwIkQrPdl0mP+Kk oHxd6eyNgkdMFboOUbjU6M/cYSLykOuHG+sFn+rWnSgdJ3jANwLwIFD1NtTNhj37X763 Soyu24Lsd1L2/mUHxWlBumaHkrQDJCUo4vBS3QkJ8kjYCbHYmfrB1R3Q11OD6YTFmtY9 PRoTux3m5AGjxe0duHEG3PThBa6R3cAaqOrZijlKjNYJrQ8iTGVfudUCnVxNBhpyEDGC W+Jg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=69uZgB5syZguYJi9iT6gO8XISz/gXRjkiGmbEgB4SD0=; b=S7PQ4A+JxCeEK+maptcRA02fOoUgt6InkLt75ewNXNfV3X9MNmjGJOF+mFaBVIDiwJ aq9IZxEUUc2JbRTnwZcTRxXJqm/8CVjegxuwaaHSugO+yiEoK9sOikcanmngN7KZr+HO 9tgJfHcyUI0dg+hi7bFE2Hv3ISGAcTCmtm6JmwehllC08UxX/xBh9URVUsvIPLHBDQd8 l9gz81pKLtnIjrvI+Sbl5x+xd2gx3Zkzo0PP3e8Fzog9O1Vzd4h7ufkxmTvfvDKDSm3h H3w+P3ZJ/lVPG6ZSTD+gPrLY0M+IWTLgbuvBF7fc3LUKZN5iD+oXi83hWurNl9HCp2SS fBbg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=oHip5YYq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id v10-20020a63610a000000b004ff6eee715bsi5329967pgb.460.2023.03.27.01.39.06; Mon, 27 Mar 2023 01:39:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=oHip5YYq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233056AbjC0IYk (ORCPT + 99 others); Mon, 27 Mar 2023 04:24:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59572 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232345AbjC0IYc (ORCPT ); Mon, 27 Mar 2023 04:24:32 -0400 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9A17B2D57; Mon, 27 Mar 2023 01:24:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1679905471; x=1711441471; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Nl6wMwkpqmIYYyq7+MpcXBB5xF17anU3m57tPiay76c=; b=oHip5YYqgHVdRLtplvrXazOcS7wTP7e0N2o2DLRqyrqJgKZiRmMo5He2 HyebUHGgJYqF/xpOroteFY+Ly3Vlcsp/VqPl4yDcFwnhqqUbnagmCd5+g fWKt/QciLnGEQpFe9X0xb3yaE506rQ2/33Woe2uev8dYQbjdsi47OAtix qa4lqSYCrmp6aAGti4zUY76qJiXPICQyft5TxBTRm/mev16gjF79CUEjG tgGYk2RbuFCF087Vd89Nb1/4u2GuW+ybw92y7rdMs9lgYOqCJg9+G7m5E 2Hz/Dzhm1v+hAaKDypTl9q/oRSEeXcKK7AcoreXT59ZCJ0e0gjqAq2W5X Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10661"; a="338930093" X-IronPort-AV: E=Sophos;i="5.98,294,1673942400"; d="scan'208";a="338930093" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Mar 2023 01:24:30 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10661"; a="713787032" X-IronPort-AV: E=Sophos;i="5.98,294,1673942400"; d="scan'208";a="713787032" Received: from unknown (HELO fred..) ([172.25.112.68]) by orsmga008.jf.intel.com with ESMTP; 27 Mar 2023 01:24:29 -0700 From: Xin Li To: linux-kernel@vger.kernel.org, x86@kernel.org, kvm@vger.kernel.org Cc: tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, hpa@zytor.com, peterz@infradead.org, andrew.cooper3@citrix.com, seanjc@google.com, pbonzini@redhat.com, ravi.v.shankar@intel.com, jiangshanlai@gmail.com, shan.kang@intel.com Subject: [PATCH v6 02/33] x86/fred: make unions for the cs and ss fields in struct pt_regs Date: Mon, 27 Mar 2023 00:58:07 -0700 Message-Id: <20230327075838.5403-3-xin3.li@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230327075838.5403-1-xin3.li@intel.com> References: <20230327075838.5403-1-xin3.li@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.5 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_NONE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1761509491098975502?= X-GMAIL-MSGID: =?utf-8?q?1761509491098975502?= From: "H. Peter Anvin (Intel)" Make the cs and ss fields in struct pt_regs unions between the actual selector and the unsigned long stack slot. FRED uses this space to store additional flags. The printk changes are simply due to the cs and ss fields changed to unsigned short from unsigned long. Signed-off-by: H. Peter Anvin (Intel) Tested-by: Shan Kang Signed-off-by: Xin Li --- Changes since v3: * Rename csl/ssl of the pt_regs structure to csx/ssx (x for extended) (Andrew Cooper). --- arch/x86/entry/vsyscall/vsyscall_64.c | 2 +- arch/x86/include/asm/ptrace.h | 34 ++++++++++++++++++++++++--- arch/x86/kernel/process_64.c | 2 +- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/arch/x86/entry/vsyscall/vsyscall_64.c b/arch/x86/entry/vsyscall/vsyscall_64.c index d234ca797e4a..2429ad0df068 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..2abb23e6c1e2 100644 --- a/arch/x86/include/asm/ptrace.h +++ b/arch/x86/include/asm/ptrace.h @@ -82,12 +82,40 @@ struct pt_regs { * On hw interrupt, it's IRQ number: */ unsigned long orig_ax; -/* Return frame for iretq */ +/* Return frame for iretq/eretu/erets */ unsigned long ip; - unsigned long cs; + union { + unsigned long csx; /* cs extended: CS + any fields above it */ + struct __attribute__((__packed__)) { + unsigned short cs; /* CS selector proper */ + unsigned int current_stack_level: 2; + unsigned int __csx_resv1 : 6; + unsigned int interrupt_shadowed : 1; + unsigned int software_initiated : 1; + unsigned int __csx_resv2 : 2; + unsigned int nmi : 1; + unsigned int __csx_resv3 : 3; + unsigned int __csx_resv4 : 32; + }; + }; unsigned long flags; unsigned long sp; - unsigned long ss; + union { + unsigned long ssx; /* ss extended: SS + any fields above it */ + struct __attribute__((__packed__)) { + unsigned short ss; /* SS selector proper */ + unsigned int __ssx_resv1 : 16; + unsigned int vector : 8; + unsigned int __ssx_resv2 : 8; + unsigned int type : 4; + unsigned int __ssx_resv3 : 4; + unsigned int enclv : 1; + unsigned int long_mode : 1; + unsigned int nested : 1; + unsigned int __ssx_resv4 : 1; + unsigned int instr_len : 4; + }; + }; /* top of stack page */ }; diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index bb65a68b4b49..a1aa74864c8b 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c @@ -116,7 +116,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);