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