Applied, thanks!

Damien Zammit, le jeu. 08 janv. 2026 08:37:39 +0000, a ecrit:
> Since a thread is supposed to be returned from Switch_context,
> this fixes a bug where the thread is always returned as 0x0 on 64b UP,
> hence the idle thread was being called too often instead of a chosen thread.
> Also, this fixes a potential future bug with 64b SMP where the non-zero
> cpu number is returned as a valid thread and causes a crash.
> 
> TESTED: By compiling gnumach on hurd-amd64 with
>   
>   --enable-ncpus=1 --disable-linux-groups --enable-kdb --enable-apic
> 
>   and booting hurd-amd64 in UP on qemu.
> 
> ---
>  x86_64/cswitch.S | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/x86_64/cswitch.S b/x86_64/cswitch.S
> index 9c4640fd..a6b390e8 100644
> --- a/x86_64/cswitch.S
> +++ b/x86_64/cswitch.S
> @@ -83,10 +83,10 @@ ENTRY(Switch_context)
>       lea     KERNEL_STACK_SIZE-IKS_SIZE-IEL_SIZE(%rcx),%rbx
>                                               /* point to stack top */
>  
> -     CPU_NUMBER(%eax)
> +     CPU_NUMBER(%edx)                        /* Don't overwrite returned 
> value %rax */
>       movq    %rsi,MY(ACTIVE_THREAD)          /* new thread is active */
>       movq    %rcx,MY(ACTIVE_STACK)           /* set current stack */
> -     movq    %rbx,CX(EXT(kernel_stack),%rax) /* set stack top */
> +     movq    %rbx,CX(EXT(kernel_stack),%rdx) /* set stack top */
>  
>       movq    KSS_ESP(%rcx),%rsp              /* switch stacks */
>       movq    KSS_EBP(%rcx),%rbp              /* restore registers */
> -- 
> 2.51.0

Reply via email to