Damien Zammit, le ven. 02 janv. 2026 04:16:01 +0000, a ecrit:
> ---
> i386/i386/gdt.c | 18 ++++++++++++++++--
> 1 file changed, 16 insertions(+), 2 deletions(-)
>
> diff --git a/i386/i386/gdt.c b/i386/i386/gdt.c
> index 9409c2fe..36712d3f 100644
> --- a/i386/i386/gdt.c
> +++ b/i386/i386/gdt.c
> @@ -40,6 +40,7 @@
>
> #include "vm_param.h"
> #include "seg.h"
> +#include "msr.h"
> #include "gdt.h"
> #include "mp_desc.h"
>
> @@ -110,6 +111,15 @@ gdt_fill(int cpu, struct real_descriptor *mygdt)
> #endif /* MACH_PV_DESCRIPTORS */
> }
>
> +#ifdef __x86_64__
> +static void
> +reload_gs_base(int cpu)
> +{
> + wrmsr(MSR_REG_GSBASE, (uint64_t)&percpu_array[cpu]);
Is writing to MSR_REG_GSBASE really needed?
Samuel
> + wrmsr(MSR_REG_KGSBASE, (uint64_t)&percpu_array[cpu]);
> +}
> +#endif
> +
> static void
> reload_segs(void)
> {
> @@ -137,7 +147,9 @@ void
> gdt_init(void)
> {
> gdt_fill(0, gdt);
> -
> +#ifdef __x86_64__
> + reload_gs_base(0);
> +#endif
> reload_segs();
>
> #ifdef MACH_PV_PAGETABLES
> @@ -156,7 +168,9 @@ void
> ap_gdt_init(int cpu)
> {
> gdt_fill(cpu, mp_gdt[cpu]);
> -
> +#ifdef __x86_64__
> + reload_gs_base(cpu);
> +#endif
> reload_segs();
> }
> #endif
> --
> 2.45.2
>
>
>
--
Samuel
<y> muhahaha...
<y> ya un train qui part de Perrache à 14h57
<y> qui passe à Part-Dieu à 15h10
<y> si je le prends à Perrache, je suis en zone bleue
<y> si je le prends à Part-Dieu, je suis en zone blanche
<y> donc je vais le prendre à Perrache *mais* à Part-Dieu ;-)
-+- #ens-mim - vive la SNCF -+-