bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH gnumach] x86_64/locore.S: Fix int stack checks when NCPUS > 1


From: Samuel Thibault
Subject: Re: [PATCH gnumach] x86_64/locore.S: Fix int stack checks when NCPUS > 1
Date: Sat, 28 Oct 2023 13:07:31 +0200
User-agent: NeoMutt/20170609 (1.8.3)

Applied, thanks!

Damien Zammit, le sam. 28 oct. 2023 00:13:54 +0000, a ecrit:
> ---
>  x86_64/locore.S | 13 ++++++++-----
>  1 file changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/x86_64/locore.S b/x86_64/locore.S
> index f0d1298d..2db0d49b 100644
> --- a/x86_64/locore.S
> +++ b/x86_64/locore.S
> @@ -692,13 +692,14 @@ _kret_iret:
>  trap_from_kernel:
>  #if  MACH_KDB || MACH_TTD
>       movq    %rsp,%rbx               /* save current stack */
> -
>       movq    %rsp,%rdx               /* on an interrupt stack? */
> +
> +     CPU_NUMBER(%ecx)
>       and     $(~(INTSTACK_SIZE-1)),%rdx
> -     cmpq    EXT(int_stack_base),%rdx
> +     cmpq    CX(EXT(int_stack_base),%ecx),%rdx
>       je      1f                      /* OK if so */
>  
> -     CPU_NUMBER(%edx)                /* get CPU number */
> +     movl    %ecx,%edx
>       cmpq    CX(EXT(kernel_stack),%rdx),%rsp
>                                       /* already on kernel stack? */
>       ja      0f
> @@ -824,9 +825,10 @@ ENTRY(all_intrs)
>  
>       PUSH_SEGMENTS_ISR(%rdx)         /* save segment registers */
>  
> +     CPU_NUMBER_NO_GS(%ecx)
>       movq    %rsp,%rdx               /* on an interrupt stack? */
>       and     $(~(INTSTACK_SIZE-1)),%rdx
> -     cmpq    %ss:EXT(int_stack_base),%rdx
> +     cmpq    %ss:CX(EXT(int_stack_base),%ecx),%rdx
>       je      int_from_intstack       /* if not: */
>  
>       SET_KERNEL_SEGMENTS(%rdx)       /* switch to kernel segments */
> @@ -885,7 +887,8 @@ LEXT(return_to_iret)                      /* to find the 
> return from calling interrupt) */
>       iretq                           /* return to caller */
>  
>  int_from_intstack:
> -     cmpq    EXT(int_stack_base),%rsp        /* seemingly looping? */
> +     CPU_NUMBER_NO_GS(%edx)
> +     cmpq    CX(EXT(int_stack_base),%edx),%rsp /* seemingly looping? */
>       jb      stack_overflowed        /* if not: */
>       call    EXT(interrupt)          /* call interrupt routine */
>  _return_to_iret_i:                   /* ( label for kdb_kintr) */
> -- 
> 2.40.1
> 
> 
> 

-- 
Samuel
---
Pour une évaluation indépendante, transparente et rigoureuse !
Je soutiens la Commission d'Évaluation de l'Inria.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]