Re: [PATCH kvm-unit-tests 7/9] x86: get rid of ring0stacktop

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

 



> --- a/lib/x86/usermode.c
> +++ b/lib/x86/usermode.c
> @@ -47,8 +47,8 @@ uint64_t run_in_user(usermode_func func, unsigned int fault_vector,
>         }
>
>         asm volatile (
> -                       /* Backing Up Stack in rdi */
> -                       "mov %%rsp, %%rdi\n\t"
> +                       /* Prepare kernel SP for exception handlers */
> +                       "mov %%rsp, %[rsp0]\n\t"
>                         /* Load user_ds to DS and ES */
>                         "mov %[user_ds], %%ax\n\t"
>                         "mov %%ax, %%ds\n\t"
> @@ -92,9 +92,10 @@ uint64_t run_in_user(usermode_func func, unsigned int fault_vector,
>                         "int %[kernel_entry_vector]\n\t"
>                         /* Kernel Mode */
>                         "ret_to_kernel:\n\t"
> -                       "mov %%rdi, %%rsp\n\t"
> +                       "mov %[rsp0], %%rsp\n\t"
>                         :
> -                       "+a"(rax)
> +                       "+a"(rax),
> +                       [rsp0]"=m"(tss.rsp0),
>                         :

The compiler didn't like the comma:
-                       [rsp0]"=m"(tss.rsp0),
+                       [rsp0]"=m"(tss.rsp0)

>                         [arg1]"m"(arg1),
>                         [arg2]"m"(arg2),

> --- a/x86/umip.c
> +++ b/x86/umip.c
> @@ -124,7 +124,7 @@ static noinline int do_ring3(void (*fn)(const char *), const char *arg)
>                   "mov %%dx, %%es\n\t"
>                   "mov %%dx, %%fs\n\t"
>                   "mov %%dx, %%gs\n\t"
> -                 "mov %%" R "sp, %%" R "cx\n\t"
> +                 "mov %%" R "sp, %[sp0]\n\t" /* kernel sp for exception handlers */
>                   "push" W " %%" R "dx \n\t"
>                   "lea %[user_stack_top], %%" R "dx \n\t"
>                   "push" W " %%" R "dx \n\t"
> @@ -133,8 +133,6 @@ static noinline int do_ring3(void (*fn)(const char *), const char *arg)
>                   "push" W " $1f \n\t"
>                   "iret" W "\n"
>                   "1: \n\t"
> -                 "push %%" R "cx\n\t"   /* save kernel SP */
> -
>  #ifndef __x86_64__
>                   "push %[arg]\n\t"
>  #endif
> @@ -142,13 +140,15 @@ static noinline int do_ring3(void (*fn)(const char *), const char *arg)
>  #ifndef __x86_64__
>                   "pop %%ecx\n\t"
>  #endif
> -
> -                 "pop %%" R "cx\n\t"
>                   "mov $1f, %%" R "dx\n\t"
>                   "int %[kernel_entry_vector]\n\t"
>                   ".section .text.entry \n\t"
>                   "kernel_entry: \n\t"
> -                 "mov %%" R "cx, %%" R "sp \n\t"
> +#ifdef __x86_64__
> +                 "mov %[sp0], %%" R "sp\n\t"
> +#else
> +                 "add $(5 * " S "), %%esp\n\t"
> +#endif
>                   "mov %[kernel_ds], %%cx\n\t"
>                   "mov %%cx, %%ds\n\t"
>                   "mov %%cx, %%es\n\t"
> @@ -157,7 +157,12 @@ static noinline int do_ring3(void (*fn)(const char *), const char *arg)
>                   "jmp *%%" R "dx \n\t"
>                   ".section .text\n\t"
>                   "1:\n\t"
> -                 : [ret] "=&a" (ret)
> +                 : [ret] "=&a" (ret),
> +#ifdef __x86_64__
> +                   [sp0] "=m" (tss.rsp0),
> +#else
> +                   [sp0] "=m" (tss.esp0),
> +#endif
>                   : [user_ds] "i" (USER_DS),

Same here:
-                   [sp0] "=m" (tss.rsp0),
-                   [sp0] "=m" (tss.esp0),
+                   [sp0] "=m" (tss.rsp0)
+                   [sp0] "=m" (tss.esp0)

>                     [user_cs] "i" (USER_CS),
>                     [user_stack_top]"m"(user_stack[sizeof(user_stack) -
> --
> 2.27.0
>
>



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux