All of lore.kernel.org
 help / color / mirror / Atom feed
From: Brian Gerst <brgerst@gmail.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Usama Arif <usama.arif@bytedance.com>,
	dwmw2@infradead.org, kim.phillips@amd.com,
	piotrgorski@cachyos.org, oleksandr@natalenko.name,
	arjan@linux.intel.com, mingo@redhat.com, bp@alien8.de,
	dave.hansen@linux.intel.com, hpa@zytor.com, x86@kernel.org,
	pbonzini@redhat.com, paulmck@kernel.org,
	linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
	rcu@vger.kernel.org, mimoja@mimoja.de, hewenliang4@huawei.com,
	thomas.lendacky@amd.com, seanjc@google.com,
	pmenzel@molgen.mpg.de, fam.zheng@bytedance.com,
	punit.agrawal@bytedance.com, simon.evans@bytedance.com,
	liangma@liangbit.com, David Woodhouse <dwmw@amazon.co.uk>
Subject: Re: [PATCH v12 07/11] x86/smpboot: Remove early_gdt_descr on 64-bit
Date: Tue, 28 Feb 2023 17:09:03 -0500	[thread overview]
Message-ID: <CAMzpN2hwwZ64MycrCfqKw-Hu_8Xfvz_LdzMgiJ_Ho=x6HFYGVA@mail.gmail.com> (raw)
In-Reply-To: <878rghmrn2.ffs@tglx>

On Tue, Feb 28, 2023 at 4:01 PM Thomas Gleixner <tglx@linutronix.de> wrote:
>
> On Sun, Feb 26 2023 at 11:07, Usama Arif wrote:
> > @@ -265,7 +265,12 @@ SYM_INNER_LABEL(secondary_startup_64_no_verify, SYM_L_GLOBAL)
> >        * addresses where we're currently running on. We have to do that here
> >        * because in 32bit we couldn't load a 64bit linear address.
> >        */
> > -     lgdt    early_gdt_descr(%rip)
> > +     subq    $16, %rsp
> > +     movw    $(GDT_SIZE-1), (%rsp)
> > +     leaq    gdt_page(%rdx), %rax
>
> Even on !SMP gdt_page is in the 0...__per_cpu_end range. Which means
> that on !SMP this results in:
>
>       leaq    0xb000(%rdx),%rax
>
> and RDX is 0. That's not really a valid GDT pointer, right?

No.  On !SMP per-cpu variables are normal variables in the .data
section.  They are not gathered together in the per-cpu section and
are not accessed with the GS prefix.

ffffffff810000c9:       48 8d 82 00 10 81 82    lea    0x82811000(%rdx),%rax
                        ffffffff810000cc: R_X86_64_32S  gdt_page

ffffffff82811000 D gdt_page

So RDX=0 is correct.

> > +     movq    %rax, 2(%rsp)
> > +     lgdt    (%rsp)
>
> and obviously that's equally broken for the task stack part:
>
> >       movq    pcpu_hot + X86_current_task(%rdx), %rax

Same as gdt_page:

ffffffff810000b1:       48 8b 82 00 88 a8 82    mov    0x82a88800(%rdx),%rax
                        ffffffff810000b4: R_X86_64_32S  pcpu_hot

ffffffff82a88800 D pcpu_hot

> This needs:
>
> --- a/arch/x86/kernel/head_64.S
> +++ b/arch/x86/kernel/head_64.S
> @@ -239,7 +239,7 @@ SYM_INNER_LABEL(secondary_startup_64_no_
>         /* Get the per cpu offset for the given CPU# which is in ECX */
>         movq    __per_cpu_offset(,%rcx,8), %rdx
>  #else
> -       xorl    %edx, %edx
> +       leaq    INIT_PER_CPU_VAR(fixed_percpu_data)(%rip), %rdx
>  #endif /* CONFIG_SMP */
>
>         /*
>
> in the initial_stack patch, which then allows to remove this hunk in the
> initial_gs patch:
>
> @@ -286,9 +286,6 @@ SYM_INNER_LABEL(secondary_startup_64_no_
>          * the per cpu areas are set up.
>          */
>         movl    $MSR_GS_BASE,%ecx
> -#ifndef CONFIG_SMP
> -       leaq    INIT_PER_CPU_VAR(fixed_percpu_data)(%rip), %rdx
> -#endif

On !SMP the only thing GSBASE is used for is the stack protector
canary, which is in fixed_percpu_data.  There is no per-cpu section.

FWIW, I posted a patch set a while back that switched x86-64 to use
the options added to newer compilers controlling where the canary is
located, allowing it to become a standard per-cpu variable and
removing the need to force the per-cpu section to be zero-based.
However it was not accepted at that time, due to removing support for
stack protector on older compilers (GCC < 8.1).

>         movl    %edx, %eax
>         shrq    $32, %rdx
>         wrmsr
>
> Maybe we should enforce CONFIG_SMP=y first :)

Makes sense, only the earliest generations of x86-64 processors have a
single core/thread, and an SMP kernel can still run on them.

--
Brian Gerst

  parent reply	other threads:[~2023-02-28 22:09 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-26 11:07 [PATCH v12 00/11] Parallel CPU bringup for x86_64 Usama Arif
2023-02-26 11:07 ` [PATCH v12 01/11] x86/apic/x2apic: Allow CPU cluster_mask to be populated in parallel Usama Arif
2023-02-26 11:07 ` [PATCH v12 02/11] cpu/hotplug: Move idle_thread_get() to <linux/smpboot.h> Usama Arif
2023-02-26 11:07 ` [PATCH v12 03/11] cpu/hotplug: Add dynamic parallel bringup states before CPUHP_BRINGUP_CPU Usama Arif
2023-02-26 11:07 ` [PATCH v12 04/11] x86/smpboot: Reference count on smpboot_setup_warm_reset_vector() Usama Arif
2023-02-26 11:07 ` [PATCH v12 05/11] x86/smpboot: Split up native_cpu_up into separate phases and document them Usama Arif
2023-02-26 11:07 ` [PATCH v12 06/11] x86/smpboot: Remove initial_stack on 64-bit Usama Arif
2023-02-28 16:13   ` Thomas Gleixner
2023-02-28 16:25     ` David Woodhouse
2023-02-28 20:32       ` Thomas Gleixner
2023-02-28 17:09     ` David Woodhouse
2023-02-28 20:17       ` Thomas Gleixner
2023-02-28 20:43         ` David Woodhouse
2023-03-01 10:18           ` Thomas Gleixner
2023-03-01 10:42             ` David Woodhouse
2023-02-28 22:22     ` Brian Gerst
2023-02-26 11:07 ` [PATCH v12 07/11] x86/smpboot: Remove early_gdt_descr " Usama Arif
2023-02-28 21:01   ` Thomas Gleixner
2023-02-28 21:02     ` Arjan van de Ven
2023-03-01 20:32       ` Josh Triplett
2023-03-01 22:16         ` Paul E. McKenney
2023-03-01 22:25           ` Josh Triplett
2023-03-02  0:28             ` Paul E. McKenney
2023-03-02  1:05               ` Randy Dunlap
2023-03-02  1:37                 ` Paul E. McKenney
2023-02-28 21:57     ` David Woodhouse
2023-02-28 22:41       ` David Woodhouse
2023-02-28 22:48         ` Brian Gerst
2023-02-28 23:42           ` David Woodhouse
2023-03-01  0:02             ` H. Peter Anvin
2023-03-01  7:39               ` David Woodhouse
2023-03-01  0:03             ` Brian Gerst
2023-03-01 10:27       ` Thomas Gleixner
2023-02-28 22:09     ` Brian Gerst [this message]
2023-02-26 11:07 ` [PATCH v12 08/11] x86/smpboot: Remove initial_gs Usama Arif
2023-02-26 11:08 ` [PATCH v12 09/11] x86/smpboot: Support parallel startup of secondary CPUs Usama Arif
2023-02-26 11:08 ` [PATCH v12 10/11] x86/smpboot: Send INIT/SIPI/SIPI to secondary CPUs in parallel Usama Arif
2023-02-26 11:08 ` [PATCH v12 11/11] x86/smpboot: Serialize topology updates for secondary bringup Usama Arif
2023-02-26 18:31 ` [PATCH v12 00/11] Parallel CPU bringup for x86_64 Oleksandr Natalenko
2023-02-26 20:59   ` [External] " Usama Arif
2023-02-27  6:13     ` David Woodhouse
2023-02-27  6:25       ` Usama Arif
2023-02-27  6:14     ` Usama Arif
2023-02-27 15:29       ` David Woodhouse
2023-02-27 16:32         ` Usama Arif
2023-02-27 21:39 ` Guilherme G. Piccoli
2023-02-28  9:07   ` David Woodhouse
2023-02-28 10:13   ` Paul Menzel
2023-02-28 12:04     ` Guilherme G. Piccoli

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='CAMzpN2hwwZ64MycrCfqKw-Hu_8Xfvz_LdzMgiJ_Ho=x6HFYGVA@mail.gmail.com' \
    --to=brgerst@gmail.com \
    --cc=arjan@linux.intel.com \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=dwmw2@infradead.org \
    --cc=dwmw@amazon.co.uk \
    --cc=fam.zheng@bytedance.com \
    --cc=hewenliang4@huawei.com \
    --cc=hpa@zytor.com \
    --cc=kim.phillips@amd.com \
    --cc=kvm@vger.kernel.org \
    --cc=liangma@liangbit.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mimoja@mimoja.de \
    --cc=mingo@redhat.com \
    --cc=oleksandr@natalenko.name \
    --cc=paulmck@kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=piotrgorski@cachyos.org \
    --cc=pmenzel@molgen.mpg.de \
    --cc=punit.agrawal@bytedance.com \
    --cc=rcu@vger.kernel.org \
    --cc=seanjc@google.com \
    --cc=simon.evans@bytedance.com \
    --cc=tglx@linutronix.de \
    --cc=thomas.lendacky@amd.com \
    --cc=usama.arif@bytedance.com \
    --cc=x86@kernel.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.