From patchwork Wed Oct 19 10:23:05 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "Li, Xin3" X-Patchwork-Id: 333 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4ac7:0:0:0:0:0 with SMTP id y7csp266879wrs; Wed, 19 Oct 2022 04:25:50 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7bcB9dW4AXAmUmx2dLLujcyRR2k/sfKLS8i+9bV4v7hUnzCr54O+09puf/Rz8+yWg9vZYf X-Received: by 2002:a17:90a:c90c:b0:20a:7179:b14f with SMTP id v12-20020a17090ac90c00b0020a7179b14fmr9071279pjt.58.1666178750465; Wed, 19 Oct 2022 04:25:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666178750; cv=none; d=google.com; s=arc-20160816; b=RKdMIaGv5jVXON2ol5O/3/f6xOke2fMIXu9YgacV+VuE4d0rNXspI9vdvi1fCFNCee LoXbrU2tfRxqxGvdgVsJBvN8t0bZhhh4B/JqGjKyYlwAY8vQ///heAao+L3AKqlZVRL2 ZEuyKndC7a3SjsG+JxutG0wquCvxrYMsS9t6O8kARU+Xrbmfdlhvkwt5LpY3r4Ofvs5i piKjA87LNBfA8xNqNEU1rUdwurwmpBWHH1Wagw704Bm2kOknxg9AH+6q4AvQpY7W0vw1 3kv/ZwYFba4pvddPV7lWx1Ym36w1TFlEpG2JQ3iYjg8Bj2p5VHh2KOK4Lc8tYuBTOtjx mBkQ== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=hI4GuyDc/GxYKsVITmmglL2SMvEIx6WuqDcNaH8nKAI=; b=Mk/H5ftht1/QX9ZANVPC8CJmiX09Kq9ExwaFKQbsKEXnmC0gFV67PoJNFO2/oOpFgL O9orplqs19xiHZPgqv3HUqo2ZNQBAiLIPAs2qhBToxsne7qVZx0rFUpT9Va4X6x0bOv5 2M+p/iC8E+IGI3A81O8fzDhIlslzaZ5150LhDBsSCso/L5HuIL7A84e6er3GufNHNUBq AAAXMk95QSonZshGTPfmyYGAKqAL5EYuHA4W9hjvwQ+V5LUic/HgqgQUgasWtbK20Q5j vZK3TjE2gAtCdkOjk//9gfnBNH/vdf8h7pnB0hlpNnqurw70nUljeTQ0pLYDnlc5rvgd Mfew== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="E2Vfc/3G"; 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 e11-20020a656bcb000000b00439f012ca7asi16512846pgw.743.2022.10.19.04.25.36; Wed, 19 Oct 2022 04:25:50 -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="E2Vfc/3G"; 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 S230152AbiJSLTn (ORCPT + 99 others); Wed, 19 Oct 2022 07:19:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55804 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230495AbiJSLSo (ORCPT ); Wed, 19 Oct 2022 07:18:44 -0400 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D77251911ED for ; Wed, 19 Oct 2022 03:48:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1666176499; x=1697712499; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=enPVCriAHpbY9aJu5B+Y9dtDkLWyR6WIVOpp3YAHcwc=; b=E2Vfc/3GDxdGIbpIgxboL6pqHsUa98ePb0f6XnkHZFql96vqU1O9pShB kiiad8dc4/5u1Gk3YxocN9uEtRzVAk8iX9sAM7NHwHWNxBvj039kdPUoX d5zsX9n+SM9cLUaXOtk/YRhWASjjwgCbnXBj0FQM7M5Ifg4L9EwvXg+Pe Gbd7JCuCjjjXu8fTzTb2mSiAH/8PmiazVmsp37yvtYVsomxqQ6GMrme9z oUdPq6WkEM+8LrPG573x4X18JDidLaGlW7CxcreGWvzD85Hyp5pXyfWHr RxY+ClABdXV9GzPeTvzqZioqFC4NWp4IAKIblNOgNcTzpSwRIwKW6fwC3 g==; X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="293770246" X-IronPort-AV: E=Sophos;i="5.95,196,1661842800"; d="scan'208";a="293770246" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Oct 2022 03:46:20 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10504"; a="804242234" X-IronPort-AV: E=Sophos;i="5.95,196,1661842800"; d="scan'208";a="804242234" Received: from unknown (HELO fred..) ([172.25.112.68]) by orsmga005.jf.intel.com with ESMTP; 19 Oct 2022 03:46:20 -0700 From: Xin Li To: linux-kernel@vger.kernel.org, x86@kernel.org Cc: tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, hpa@zytor.com, peterz@infradead.org, brgerst@gmail.com, chang.seok.bae@intel.com Subject: [PATCH v4 0/5] x86: Enable LKGS instruction Date: Wed, 19 Oct 2022 03:23:05 -0700 Message-Id: <20221019102310.1543-1-xin3.li@intel.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Spam-Status: No, score=-4.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE autolearn=ham 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?1747115049338189926?= X-GMAIL-MSGID: =?utf-8?q?1747115049338189926?= LKGS instruction is introduced with Intel FRED (flexible return and event delivery) specification https://cdrdv2.intel.com/v1/dl/getContent/678938. LKGS is independent of FRED, so we enable it as a standalone CPU feature. LKGS behaves like the MOV to GS instruction except that it loads the base address into the IA32_KERNEL_GS_BASE MSR instead of the GS segment’s descriptor cache, which is exactly what Linux kernel does to load user level GS base. Thus, with LKGS, there is no need to SWAPGS away from the kernel GS base. Changes since v3: * We want less ASM not more, thus keep local_irq_save/restore() inside native_load_gs_index() (Thomas Gleixner). * For paravirt enabled kernels, initialize pv_ops.cpu.load_gs_index to native_lkgs (Thomas Gleixner). Changes since V2: * Add "" not to show "lkgs" in /proc/cpuinfo (Chang S. Bae). * Mark DI as input and output (+D) as in V1, since the exception handler modifies it (Brian Gerst). Changes since V1: * Use EX_TYPE_ZERO_REG instead of fixup code in the obsolete .fixup code section (Peter Zijlstra). * Add a comment that states the LKGS_DI macro will be repalced with "lkgs %di" once the binutils support the LKGS instruction (Peter Zijlstra). H. Peter Anvin (Intel) (5): x86/cpufeature: add the cpu feature bit for LKGS x86/opcode: add the LKGS instruction to x86-opcode-map x86/gsseg: make asm_load_gs_index() take an u16 x86/gsseg: move load_gs_index() to its own new header file x86/gsseg: use the LKGS instruction if available for load_gs_index() arch/x86/entry/entry_64.S | 2 +- arch/x86/ia32/ia32_signal.c | 1 + arch/x86/include/asm/cpufeatures.h | 1 + arch/x86/include/asm/gsseg.h | 66 ++++++++++++++++++++++++ arch/x86/include/asm/mmu_context.h | 1 + arch/x86/include/asm/special_insns.h | 21 -------- arch/x86/kernel/cpu/common.c | 1 + arch/x86/kernel/paravirt.c | 1 + arch/x86/kernel/tls.c | 1 + arch/x86/lib/x86-opcode-map.txt | 1 + tools/arch/x86/include/asm/cpufeatures.h | 1 + tools/arch/x86/lib/x86-opcode-map.txt | 1 + 12 files changed, 76 insertions(+), 22 deletions(-) create mode 100644 arch/x86/include/asm/gsseg.h