From nobody Sat Jun 20 01:00:09 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 39675C433F5 for ; Fri, 25 Mar 2022 15:44:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1376702AbiCYPqW (ORCPT ); Fri, 25 Mar 2022 11:46:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53114 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377707AbiCYPnu (ORCPT ); Fri, 25 Mar 2022 11:43:50 -0400 Received: from mail-oi1-x22e.google.com (mail-oi1-x22e.google.com [IPv6:2607:f8b0:4864:20::22e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8E3CE6AA62 for ; Fri, 25 Mar 2022 08:40:06 -0700 (PDT) Received: by mail-oi1-x22e.google.com with SMTP id j83so8536698oih.6 for ; Fri, 25 Mar 2022 08:40:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=KkQ3UAnjoomD8VPxDQGaMS5VaJH8YbqKgUsD/Zma4MY=; b=oHx4JAwEXn6GgCr+ZlOFRzGIUkK0CECP6r/qt42JKzUphuz+H/VDiuqheZ04dJwsT6 307WVSAq0IA86aW/+QsuCOA9/PLxOViIUIQjxy4Q+cCT/GreOe0OKft4athJv9c7CbRR DL11Z4jdKXHyL7vqWA42Tas8kFpsxN6KqL/a3ax+7bfyUVgjeyP6ACcPnw5L89o2Uh63 p5Z6xrr+nM/d1tEevU+Z735CzBmujtKa+aAWH3QzUsOnsoWZJ+Gu7Dw4Ml2NfQJU5An0 rBYjT5sGhy/N6FXFAVVNAO+EtfE0+KX0BhPQRbeux2o9xfWzR+X2ltQB9GBR0LnW2VEt nC+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=KkQ3UAnjoomD8VPxDQGaMS5VaJH8YbqKgUsD/Zma4MY=; b=iMjadUxEHWXSDX0H3qtCU8qXumoxslK80fNhPN18olpT09l9qtqU+ecIpOZssiuimQ ntclcMOnLFD4vUfkeKGt7hLanD5kuXaphVWk/0aOaKa2+q0qwpj1E9DK+/Ms/8tFpUZ3 GM6kCkH/m3hCkU3OqdEjtSfF/sgapagVgVwGsMr6trBPhGK0M0N9wD2OTWy+2g77G1e+ zhnUl7U5C0qOfX6gX1GTotBKvj6IRSbboV0IRD5zL0p2TVZ3M/zDWNdngcc5PlCdjskm oRvYKnHP99zzASKdYM3aYoL0O0m1D0+XKt5/0aysRDe+kMwECuJhkaTP0XvzzSsEgrEi 9fFQ== X-Gm-Message-State: AOAM5321qroDs1e6YDyeazI/6TD4xqJRadlY0Bf8qruabaupVBe1cf5t yHn+tb6D7+jvlJO34CHc5KDA6Ewd+Q== X-Google-Smtp-Source: ABdhPJzj0um+If716xMiZgaCy/MNm0hDqSyOGI5g04+AFHHXshTc7Caduux5+8RXnKQ6uJXK7F9kGw== X-Received: by 2002:aca:6742:0:b0:2ef:7242:35de with SMTP id b2-20020aca6742000000b002ef724235demr5516422oiy.166.1648222805669; Fri, 25 Mar 2022 08:40:05 -0700 (PDT) Received: from citadel.. (174-084-153-250.res.spectrum.com. [174.84.153.250]) by smtp.gmail.com with ESMTPSA id el17-20020a056870f69100b000de9672ac3csm1709566oab.52.2022.03.25.08.40.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 25 Mar 2022 08:40:05 -0700 (PDT) From: Brian Gerst To: linux-kernel@vger.kernel.org, x86@kernel.org Cc: Andy Lutomirski , Borislav Petkov , Thomas Gleixner , "H . Peter Anvin" , Peter Zijlstra , Brian Gerst Subject: [PATCH 1/4] x86-32: Simplify ELF_CORE_COPY_REGS Date: Fri, 25 Mar 2022 11:39:50 -0400 Message-Id: <20220325153953.162643-2-brgerst@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220325153953.162643-1-brgerst@gmail.com> References: <20220325153953.162643-1-brgerst@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" GS is now always a user segment, so there is no difference between user and kernel registers. Signed-off-by: Brian Gerst Acked-by: Andy Lutomirski Reviewed-by: Thomas Gleixner --- arch/x86/include/asm/elf.h | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/arch/x86/include/asm/elf.h b/arch/x86/include/asm/elf.h index 29fea180a665..cb0ff1055ab1 100644 --- a/arch/x86/include/asm/elf.h +++ b/arch/x86/include/asm/elf.h @@ -116,7 +116,7 @@ extern unsigned int vdso32_enabled; * now struct_user_regs, they are different) */ =20 -#define ELF_CORE_COPY_REGS_COMMON(pr_reg, regs) \ +#define ELF_CORE_COPY_REGS(pr_reg, regs) \ do { \ pr_reg[0] =3D regs->bx; \ pr_reg[1] =3D regs->cx; \ @@ -128,6 +128,7 @@ do { \ pr_reg[7] =3D regs->ds; \ pr_reg[8] =3D regs->es; \ pr_reg[9] =3D regs->fs; \ + savesegment(gs, pr_reg[10]); \ pr_reg[11] =3D regs->orig_ax; \ pr_reg[12] =3D regs->ip; \ pr_reg[13] =3D regs->cs; \ @@ -136,18 +137,6 @@ do { \ pr_reg[16] =3D regs->ss; \ } while (0); =20 -#define ELF_CORE_COPY_REGS(pr_reg, regs) \ -do { \ - ELF_CORE_COPY_REGS_COMMON(pr_reg, regs);\ - pr_reg[10] =3D get_user_gs(regs); \ -} while (0); - -#define ELF_CORE_COPY_KERNEL_REGS(pr_reg, regs) \ -do { \ - ELF_CORE_COPY_REGS_COMMON(pr_reg, regs);\ - savesegment(gs, pr_reg[10]); \ -} while (0); - #define ELF_PLATFORM (utsname()->machine) #define set_personality_64bit() do { } while (0) =20 --=20 2.35.1 From nobody Sat Jun 20 01:00:09 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 90012C433F5 for ; Fri, 25 Mar 2022 15:44:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1357829AbiCYPqK (ORCPT ); Fri, 25 Mar 2022 11:46:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51932 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377712AbiCYPnu (ORCPT ); Fri, 25 Mar 2022 11:43:50 -0400 Received: from mail-oa1-x31.google.com (mail-oa1-x31.google.com [IPv6:2001:4860:4864:20::31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8EAD2AD134 for ; Fri, 25 Mar 2022 08:40:07 -0700 (PDT) Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-de48295467so8494508fac.2 for ; Fri, 25 Mar 2022 08:40:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=iNOdsxxU9VQEpWfEggP1ZhALtdgjnTVO+NADBLmHtas=; b=bThMPoSEee2tz4sivswwvLkojOd3knugVgV3hrG173CV9B7qFnlMJtUePNiW/Wf5m8 +fvG98mKa0yy/1WNbfgYJtJaEUgaOVqJQkfPvFMYjy4dVHDFF7wcYoWjUJ8Q471wW8+d clpK9R1fcmxg1tucGOpQQLvp58lvMgHY1XKW8ztNojOzGB/0CZqDWOEF3nQYtwIQJUiS +iB1YYXgCV1fdZof/WjgMK+nCbL6BWgZZqg23adaHoOZvPozx1ZyCkKWGed1FIHWVZeL MQ4K6RSwVYLV3PXG3IB9qZNIz6XawbdblEUXaDkwOD4lfGsMsPczp7uNjVIK3C7GCpX4 2Wyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=iNOdsxxU9VQEpWfEggP1ZhALtdgjnTVO+NADBLmHtas=; b=zjI72pEE0AXXma7ZEi06qGwQ4E+8ylUW2M164wTwv2y1HXYCk62NNwccTnDdMYMJxc CmHWCSn49zfz6nE4g7q2oJtfPUSvFYWG23SUWeQQ1bw6UPh1+qSoMhaUR9gBTSo7MomS eE/lIzG9B8i4qrB0WvgTcZ+pdGRJiwN5S87QsXYChTAPa6JHeD+dLIV1KlrRjlK+4xTt ehTZ+AhxTU2oyfK42JzjbEleaVTZoBJGsImE7Ea0ZE+RwSkx5h9fWhyzRhrCAghAihXu GL+etDyV/8LPXHgLtoUMr8gDwYO1zvUbt8iZ3396bJKooX19dxd20sHPBFHTzZFZLmsq cESg== X-Gm-Message-State: AOAM533aQTtx/MGYDA7c8S2417wZijHXdYJG4Q2eT7FbtlU+dcw5o6Z/ 5ii6tkMkdW0YGVSufIIrMbha42WyuQ== X-Google-Smtp-Source: ABdhPJwwXQSQic8G58wRxkzZA+Wpi26GPfRWMvpITJBYiNSzRwavCJvCY0r/VIUv9BJ8etyAqsPkLQ== X-Received: by 2002:a05:6870:5702:b0:dd:e87b:f82a with SMTP id k2-20020a056870570200b000dde87bf82amr5150513oap.125.1648222806648; Fri, 25 Mar 2022 08:40:06 -0700 (PDT) Received: from citadel.. (174-084-153-250.res.spectrum.com. [174.84.153.250]) by smtp.gmail.com with ESMTPSA id el17-20020a056870f69100b000de9672ac3csm1709566oab.52.2022.03.25.08.40.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 25 Mar 2022 08:40:06 -0700 (PDT) From: Brian Gerst To: linux-kernel@vger.kernel.org, x86@kernel.org Cc: Andy Lutomirski , Borislav Petkov , Thomas Gleixner , "H . Peter Anvin" , Peter Zijlstra , Brian Gerst Subject: [PATCH 2/4] ELF: Remove elf_core_copy_kernel_regs() Date: Fri, 25 Mar 2022 11:39:51 -0400 Message-Id: <20220325153953.162643-3-brgerst@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220325153953.162643-1-brgerst@gmail.com> References: <20220325153953.162643-1-brgerst@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" x86-32 was the last architecture that implemented separate user and kernel registers. Signed-off-by: Brian Gerst Acked-by: Andy Lutomirski Reviewed-by: Thomas Gleixner --- arch/powerpc/kernel/fadump.c | 2 +- arch/powerpc/platforms/powernv/opal-core.c | 2 +- include/linux/elfcore.h | 9 --------- kernel/kexec_core.c | 2 +- 4 files changed, 3 insertions(+), 12 deletions(-) diff --git a/arch/powerpc/kernel/fadump.c b/arch/powerpc/kernel/fadump.c index 4fdb7c77fda1..c0cf17196d6c 100644 --- a/arch/powerpc/kernel/fadump.c +++ b/arch/powerpc/kernel/fadump.c @@ -752,7 +752,7 @@ u32 *__init fadump_regs_to_elf_notes(u32 *buf, struct p= t_regs *regs) * FIXME: How do i get PID? Do I really need it? * prstatus.pr_pid =3D ???? */ - elf_core_copy_kernel_regs(&prstatus.pr_reg, regs); + elf_core_copy_regs(&prstatus.pr_reg, regs); buf =3D append_elf_note(buf, CRASH_CORE_NOTE_NAME, NT_PRSTATUS, &prstatus, sizeof(prstatus)); return buf; diff --git a/arch/powerpc/platforms/powernv/opal-core.c b/arch/powerpc/plat= forms/powernv/opal-core.c index 0331f1973f0e..dd6e99edff76 100644 --- a/arch/powerpc/platforms/powernv/opal-core.c +++ b/arch/powerpc/platforms/powernv/opal-core.c @@ -112,7 +112,7 @@ static void __init fill_prstatus(struct elf_prstatus *p= rstatus, int pir, struct pt_regs *regs) { memset(prstatus, 0, sizeof(struct elf_prstatus)); - elf_core_copy_kernel_regs(&(prstatus->pr_reg), regs); + elf_core_copy_regs(&(prstatus->pr_reg), regs); =20 /* * Overload PID with PIR value. diff --git a/include/linux/elfcore.h b/include/linux/elfcore.h index f8e206e82476..346a8b56cdc8 100644 --- a/include/linux/elfcore.h +++ b/include/linux/elfcore.h @@ -84,15 +84,6 @@ static inline void elf_core_copy_regs(elf_gregset_t *elf= regs, struct pt_regs *re #endif } =20 -static inline void elf_core_copy_kernel_regs(elf_gregset_t *elfregs, struc= t pt_regs *regs) -{ -#ifdef ELF_CORE_COPY_KERNEL_REGS - ELF_CORE_COPY_KERNEL_REGS((*elfregs), regs); -#else - elf_core_copy_regs(elfregs, regs); -#endif -} - static inline int elf_core_copy_task_regs(struct task_struct *t, elf_gregs= et_t* elfregs) { #if defined (ELF_CORE_COPY_TASK_REGS) diff --git a/kernel/kexec_core.c b/kernel/kexec_core.c index 68480f731192..be4b54c2c615 100644 --- a/kernel/kexec_core.c +++ b/kernel/kexec_core.c @@ -1078,7 +1078,7 @@ void crash_save_cpu(struct pt_regs *regs, int cpu) return; memset(&prstatus, 0, sizeof(prstatus)); prstatus.common.pr_pid =3D current->pid; - elf_core_copy_kernel_regs(&prstatus.pr_reg, regs); + elf_core_copy_regs(&prstatus.pr_reg, regs); buf =3D append_elf_note(buf, KEXEC_CORE_NOTE_NAME, NT_PRSTATUS, &prstatus, sizeof(prstatus)); final_note(buf); --=20 2.35.1 From nobody Sat Jun 20 01:00:09 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3DBDEC4167D for ; Fri, 25 Mar 2022 15:44:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1348294AbiCYPpc (ORCPT ); Fri, 25 Mar 2022 11:45:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51910 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377710AbiCYPnu (ORCPT ); Fri, 25 Mar 2022 11:43:50 -0400 Received: from mail-oi1-x22b.google.com (mail-oi1-x22b.google.com [IPv6:2607:f8b0:4864:20::22b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4AE15BB0B1 for ; Fri, 25 Mar 2022 08:40:09 -0700 (PDT) Received: by mail-oi1-x22b.google.com with SMTP id e189so8530951oia.8 for ; Fri, 25 Mar 2022 08:40:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=N0WSZEVvPP19spF54GjyVobZbjAlPoVO9KWpI4tO8xk=; b=VDmNiMduhp1oywBzrq09nMJSgbHCcnfJuhEec0965aIvd9aRWQdNnIs1S3AceqYWYw AfQ7s/GofIhWFurQ34XVdMgX3h99o0ePonrm4KdFwnlzN7kE2oiKpnHXLs2Ha6HEnMEG 6Vw2Ot2yX3uj8b9PBnwZJHa7CuJ/DEb8vfuD1G5cdd3CGsjtrCCEY4uqaaEHEVHSS8a4 y48xmjrRdIKKjA3eq7K6OO7OA+5nzyzJM/GrVmSP1ykYhgSj2R+26Cd95sGF27l64NZx Z1GF+BDdTv5sm6yZ0CThtIu1ltTEZzmBCv3E9myf8MelToAEq9GlWuMXjlvX2x8bZpha kbsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=N0WSZEVvPP19spF54GjyVobZbjAlPoVO9KWpI4tO8xk=; b=aKnG6JT5MMY8fMASvrRBlubobe+UZqj9h2FkHbxKJp9yjkzWVCVKWcGxypvrxsIWLX wmuvP8XD1yZrs8UjlSH2hUBu+aUJcBOwxm2Fx5CvojYd8IbPeVQyf/MqiBrKiY+zNSUF t2LBeoOtU5QHRVTShDYPUsliJLB22OqWMCnzc7CjaFtOrMIacPXX1kQasuWrHzxZHo5S f/KyDL13mgjTNxzilQkKMqo2gghJ1L1JCkjY2uj6rBmPzsF55EqUranGjqRKdKAlGZ+z TAHlNvReQmQM0uelR1tNcQYSwKpyO8gglOtol4ZAHdjNzlcgCjmbgcya3BsanVpkYFGz Lkeg== X-Gm-Message-State: AOAM5322ug1cfa9af+LLPCWXnv3PBNhLST5B9BepJEFUPKhSkFj0RjOB TPLX4/vBZgfE1S81wsN6SVVhAdLbqA== X-Google-Smtp-Source: ABdhPJzAh3PuCu+iAsL3GLwcOU6AT3tZ0FCQkFUczDGylNGL7anlPp53QqJtQoRrgP9aXB//cV90sA== X-Received: by 2002:a05:6808:30a2:b0:2da:3ab6:2c83 with SMTP id bl34-20020a05680830a200b002da3ab62c83mr5311197oib.206.1648222807599; Fri, 25 Mar 2022 08:40:07 -0700 (PDT) Received: from citadel.. (174-084-153-250.res.spectrum.com. [174.84.153.250]) by smtp.gmail.com with ESMTPSA id el17-20020a056870f69100b000de9672ac3csm1709566oab.52.2022.03.25.08.40.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 25 Mar 2022 08:40:07 -0700 (PDT) From: Brian Gerst To: linux-kernel@vger.kernel.org, x86@kernel.org Cc: Andy Lutomirski , Borislav Petkov , Thomas Gleixner , "H . Peter Anvin" , Peter Zijlstra , Brian Gerst Subject: [PATCH 3/4] x86-32: Remove lazy GS macros Date: Fri, 25 Mar 2022 11:39:52 -0400 Message-Id: <20220325153953.162643-4-brgerst@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220325153953.162643-1-brgerst@gmail.com> References: <20220325153953.162643-1-brgerst@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" GS is always a user segment now. Signed-off-by: Brian Gerst Acked-by: Andy Lutomirski Reviewed-by: Thomas Gleixner --- arch/x86/include/asm/mmu_context.h | 2 +- arch/x86/include/asm/segment.h | 5 ----- arch/x86/kernel/process.c | 5 +---- arch/x86/kernel/process_32.c | 11 ++++------- arch/x86/kernel/ptrace.c | 6 +++--- arch/x86/kernel/signal.c | 8 +++++--- arch/x86/kernel/vm86_32.c | 4 ++-- arch/x86/lib/insn-eval.c | 5 +++-- arch/x86/math-emu/get_address.c | 2 +- 9 files changed, 20 insertions(+), 28 deletions(-) diff --git a/arch/x86/include/asm/mmu_context.h b/arch/x86/include/asm/mmu_= context.h index 27516046117a..b8d40ddeab00 100644 --- a/arch/x86/include/asm/mmu_context.h +++ b/arch/x86/include/asm/mmu_context.h @@ -141,7 +141,7 @@ do { \ #ifdef CONFIG_X86_32 #define deactivate_mm(tsk, mm) \ do { \ - lazy_load_gs(0); \ + loadsegment(gs, 0); \ } while (0) #else #define deactivate_mm(tsk, mm) \ diff --git a/arch/x86/include/asm/segment.h b/arch/x86/include/asm/segment.h index 656ed6531d03..617b3663e4dd 100644 --- a/arch/x86/include/asm/segment.h +++ b/arch/x86/include/asm/segment.h @@ -354,11 +354,6 @@ static inline void __loadsegment_fs(unsigned short val= ue) * x86-32 user GS accessors. This is ugly and could do with some cleaning= up. */ #ifdef CONFIG_X86_32 -# define get_user_gs(regs) (u16)({ unsigned long v; savesegment(gs, v); v= ; }) -# define set_user_gs(regs, v) loadsegment(gs, (unsigned long)(v)) -# define task_user_gs(tsk) ((tsk)->thread.gs) -# define lazy_save_gs(v) savesegment(gs, (v)) -# define lazy_load_gs(v) loadsegment(gs, (v)) # define load_gs_index(v) loadsegment(gs, (v)) #endif /* X86_32 */ =20 diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index b370767f5b19..96a9885b9c3a 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -160,6 +160,7 @@ int copy_thread(unsigned long clone_flags, unsigned lon= g sp, unsigned long arg, savesegment(ds, p->thread.ds); #else p->thread.sp0 =3D (unsigned long) (childregs + 1); + savesegment(gs, p->thread.gs); /* * Clear all status flags including IF and set fixed bit. 64bit * does not have this initialization as the frame does not contain @@ -191,10 +192,6 @@ int copy_thread(unsigned long clone_flags, unsigned lo= ng sp, unsigned long arg, if (sp) childregs->sp =3D sp; =20 -#ifdef CONFIG_X86_32 - task_user_gs(p) =3D get_user_gs(current_pt_regs()); -#endif - if (unlikely(p->flags & PF_IO_WORKER)) { /* * An IO thread is a user space thread, but it doesn't diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c index 26edb1cd07a4..877358f3dba7 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c @@ -63,10 +63,7 @@ void __show_regs(struct pt_regs *regs, enum show_regs_mo= de mode, unsigned long d0, d1, d2, d3, d6, d7; unsigned short gs; =20 - if (user_mode(regs)) - gs =3D get_user_gs(regs); - else - savesegment(gs, gs); + savesegment(gs, gs); =20 show_ip(regs, log_lvl); =20 @@ -114,7 +111,7 @@ void release_thread(struct task_struct *dead_task) void start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new= _sp) { - set_user_gs(regs, 0); + loadsegment(gs, 0); regs->fs =3D 0; regs->ds =3D __USER_DS; regs->es =3D __USER_DS; @@ -177,7 +174,7 @@ __switch_to(struct task_struct *prev_p, struct task_str= uct *next_p) * used %fs or %gs (it does not today), or if the kernel is * running inside of a hypervisor layer. */ - lazy_save_gs(prev->gs); + savesegment(gs, prev->gs); =20 /* * Load the per-thread Thread-Local Storage descriptor. @@ -208,7 +205,7 @@ __switch_to(struct task_struct *prev_p, struct task_str= uct *next_p) * Restore %gs if needed (which is common) */ if (prev->gs | next->gs) - lazy_load_gs(next->gs); + loadsegment(gs, next->gs); =20 this_cpu_write(current_task, next_p); =20 diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c index 8d2f2f995539..a2336db1aac1 100644 --- a/arch/x86/kernel/ptrace.c +++ b/arch/x86/kernel/ptrace.c @@ -171,9 +171,9 @@ static u16 get_segment_reg(struct task_struct *task, un= signed long offset) retval =3D *pt_regs_access(task_pt_regs(task), offset); else { if (task =3D=3D current) - retval =3D get_user_gs(task_pt_regs(task)); + savesegment(gs, retval); else - retval =3D task_user_gs(task); + retval =3D task->thread.gs; } return retval; } @@ -211,7 +211,7 @@ static int set_segment_reg(struct task_struct *task, break; =20 case offsetof(struct user_regs_struct, gs): - task_user_gs(task) =3D value; + task->thread.gs =3D value; } =20 return 0; diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c index ec71e06ae364..add4bb6f9d43 100644 --- a/arch/x86/kernel/signal.c +++ b/arch/x86/kernel/signal.c @@ -94,7 +94,7 @@ static bool restore_sigcontext(struct pt_regs *regs, return false; =20 #ifdef CONFIG_X86_32 - set_user_gs(regs, sc.gs); + loadsegment(gs, sc.gs); regs->fs =3D sc.fs; regs->es =3D sc.es; regs->ds =3D sc.ds; @@ -147,8 +147,10 @@ __unsafe_setup_sigcontext(struct sigcontext __user *sc= , void __user *fpstate, struct pt_regs *regs, unsigned long mask) { #ifdef CONFIG_X86_32 - unsafe_put_user(get_user_gs(regs), - (unsigned int __user *)&sc->gs, Efault); + unsigned int gs; + savesegment(gs, gs); + + unsafe_put_user(gs, (unsigned int __user *)&sc->gs, Efault); unsafe_put_user(regs->fs, (unsigned int __user *)&sc->fs, Efault); unsafe_put_user(regs->es, (unsigned int __user *)&sc->es, Efault); unsafe_put_user(regs->ds, (unsigned int __user *)&sc->ds, Efault); diff --git a/arch/x86/kernel/vm86_32.c b/arch/x86/kernel/vm86_32.c index c21bcd668284..e9e803a4d44c 100644 --- a/arch/x86/kernel/vm86_32.c +++ b/arch/x86/kernel/vm86_32.c @@ -151,7 +151,7 @@ void save_v86_state(struct kernel_vm86_regs *regs, int = retval) =20 memcpy(®s->pt, &vm86->regs32, sizeof(struct pt_regs)); =20 - lazy_load_gs(vm86->regs32.gs); + loadsegment(gs, vm86->regs32.gs); =20 regs->pt.ax =3D retval; return; @@ -325,7 +325,7 @@ static long do_sys_vm86(struct vm86plus_struct __user *= user_vm86, bool plus) * Save old state */ vm86->saved_sp0 =3D tsk->thread.sp0; - lazy_save_gs(vm86->regs32.gs); + savesegment(gs, vm86->regs32.gs); =20 /* make room for real-mode segments */ preempt_disable(); diff --git a/arch/x86/lib/insn-eval.c b/arch/x86/lib/insn-eval.c index b781d324211b..21104c41cba0 100644 --- a/arch/x86/lib/insn-eval.c +++ b/arch/x86/lib/insn-eval.c @@ -342,9 +342,9 @@ static int resolve_seg_reg(struct insn *insn, struct pt= _regs *regs, int regoff) */ static short get_segment_selector(struct pt_regs *regs, int seg_reg_idx) { -#ifdef CONFIG_X86_64 unsigned short sel; =20 +#ifdef CONFIG_X86_64 switch (seg_reg_idx) { case INAT_SEG_REG_IGNORE: return 0; @@ -402,7 +402,8 @@ static short get_segment_selector(struct pt_regs *regs,= int seg_reg_idx) case INAT_SEG_REG_FS: return (unsigned short)(regs->fs & 0xffff); case INAT_SEG_REG_GS: - return get_user_gs(regs); + savesegment(gs, sel); + return sel; case INAT_SEG_REG_IGNORE: default: return -EINVAL; diff --git a/arch/x86/math-emu/get_address.c b/arch/x86/math-emu/get_addres= s.c index b82ca14ba718..4a9fd9029a53 100644 --- a/arch/x86/math-emu/get_address.c +++ b/arch/x86/math-emu/get_address.c @@ -153,7 +153,7 @@ static long pm_address(u_char FPU_modrm, u_char segment, switch (segment) { case PREFIX_GS_ - 1: /* user gs handling can be lazy, use special accessors */ - addr->selector =3D get_user_gs(FPU_info->regs); + savesegment(gs, addr->selector); break; default: addr->selector =3D PM_REG_(segment); --=20 2.35.1 From nobody Sat Jun 20 01:00:09 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6EED8C433F5 for ; Fri, 25 Mar 2022 15:44:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1357161AbiCYPpv (ORCPT ); Fri, 25 Mar 2022 11:45:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49468 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377713AbiCYPnu (ORCPT ); Fri, 25 Mar 2022 11:43:50 -0400 Received: from mail-oi1-x22e.google.com (mail-oi1-x22e.google.com [IPv6:2607:f8b0:4864:20::22e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5AA6CB2464 for ; Fri, 25 Mar 2022 08:40:09 -0700 (PDT) Received: by mail-oi1-x22e.google.com with SMTP id e189so8530980oia.8 for ; Fri, 25 Mar 2022 08:40:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=SO4NtNPVMmeqAxc0EqkfXLpRBgdCzQvRwVxIGc2RV5E=; b=EoFi5gb730L1oqiKmygyZpcnwFty6+8JsOJD1CGDO3QRwEzmwnyk3J0R0XP9iKo6fR ySM2m5AgSSfW7q2qCnu6ahptyUPyzGlUDWbKZ5REyhwaOt8TKgOum9pehoJqsa05yP7V QLV5QL5A7+lx6qb47YbQq7BrBTxNzlejR+8gjUPUeDU2PHSB+jlsOs7dLxrvithVkdCe Uh1zVoMcT5x67uAkzyI2sKQlVCFGO2Hm0sDo486YyNuhBjvJ7+gpR/XwHNnBzocmhTgZ fAtA6iN1fpcdioRUeYMiYwMbBVtk2U2tYGbSnEDUvf27B1IEPlRAKnr5ekklYlz9S6QG 1HoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=SO4NtNPVMmeqAxc0EqkfXLpRBgdCzQvRwVxIGc2RV5E=; b=Qi4YjBDAtGJPtwUwIktL6ASmzFAP22GDBb/mPzvzOniAblPY2XoPBM4mP4JD6YUN0v STHskyxOxtdKdVjbZymlOk6sqSe1rFiybHc4UkdYAcYPkeP57o3Z9NJNlezfdHEUT+v4 cLvnPPdWhuDH9LUI691YAv2pM/NFRISRtKoxpG5UegbgWvhhLmGux7/p45B2bsrHVfhC DBYIuZIJs+SRMFfYa7bBnSByqehSfmgpndy+kiqkw3JluDqqmcHtmtEIk13TnXU9Ur2v X8X9AYXE/6m/N9Nc+7FQyjn/vCymjY6HKNa+3kgfqIoFeGyTTdKkBVMAdDExYvSr1iaw PnlQ== X-Gm-Message-State: AOAM533xN1nNOKvrN7OKnU5S+Mk9cOUDjMtR3P693+FdQMBqNtlapfRo H/C1kGWvmEFuXvlpkOctAUfugM9Gfw== X-Google-Smtp-Source: ABdhPJxKA/ddrMiWPETjz2E219aSYqtfjumCW7tkD4WPImOKu1qVRgjdsahnSWdEgVWZ0aoi1qPuTQ== X-Received: by 2002:a05:6808:1287:b0:2da:5cea:fb11 with SMTP id a7-20020a056808128700b002da5ceafb11mr5408521oiw.147.1648222808522; Fri, 25 Mar 2022 08:40:08 -0700 (PDT) Received: from citadel.. (174-084-153-250.res.spectrum.com. [174.84.153.250]) by smtp.gmail.com with ESMTPSA id el17-20020a056870f69100b000de9672ac3csm1709566oab.52.2022.03.25.08.40.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 25 Mar 2022 08:40:08 -0700 (PDT) From: Brian Gerst To: linux-kernel@vger.kernel.org, x86@kernel.org Cc: Andy Lutomirski , Borislav Petkov , Thomas Gleixner , "H . Peter Anvin" , Peter Zijlstra , Brian Gerst Subject: [PATCH 4/4] x86: Merge load_gs_index() Date: Fri, 25 Mar 2022 11:39:53 -0400 Message-Id: <20220325153953.162643-5-brgerst@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220325153953.162643-1-brgerst@gmail.com> References: <20220325153953.162643-1-brgerst@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Merge the 32- and 64-bit implementations of load_gs_index(). Signed-off-by: Brian Gerst Acked-by: Andy Lutomirski Reviewed-by: Thomas Gleixner --- arch/x86/include/asm/segment.h | 7 ------- arch/x86/include/asm/special_insns.h | 7 ++++--- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/arch/x86/include/asm/segment.h b/arch/x86/include/asm/segment.h index 617b3663e4dd..2e7890dd58a4 100644 --- a/arch/x86/include/asm/segment.h +++ b/arch/x86/include/asm/segment.h @@ -350,13 +350,6 @@ static inline void __loadsegment_fs(unsigned short val= ue) #define savesegment(seg, value) \ asm("mov %%" #seg ",%0":"=3Dr" (value) : : "memory") =20 -/* - * x86-32 user GS accessors. This is ugly and could do with some cleaning= up. - */ -#ifdef CONFIG_X86_32 -# define load_gs_index(v) loadsegment(gs, (v)) -#endif /* X86_32 */ - #endif /* !__ASSEMBLY__ */ #endif /* __KERNEL__ */ =20 diff --git a/arch/x86/include/asm/special_insns.h b/arch/x86/include/asm/sp= ecial_insns.h index 68c257a3de0d..45b18eb94fa1 100644 --- a/arch/x86/include/asm/special_insns.h +++ b/arch/x86/include/asm/special_insns.h @@ -184,14 +184,15 @@ static inline void wbinvd(void) native_wbinvd(); } =20 -#ifdef CONFIG_X86_64 =20 static inline void load_gs_index(unsigned int selector) { +#ifdef CONFIG_X86_64 native_load_gs_index(selector); -} - +#else + loadsegment(gs, selector); #endif +} =20 #endif /* CONFIG_PARAVIRT_XXL */ =20 --=20 2.35.1