Thanks Benoit. I'll beef up, myself, your commit message and commit this
patch.


--
Nadav Har'El
n...@scylladb.com

On Thu, Oct 27, 2016 at 3:07 PM, Benoît Canet <
benoit.canet.cont...@gmail.com> wrote:

> Use the fpu_lock to do the work of saving and restoring
>
> Signed-off-by: Benoît Canet <ben...@scylladb.com>
> ---
>  arch/x64/entry.S | 2 +-
>  linux.cc         | 4 ++++
>  2 files changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/arch/x64/entry.S b/arch/x64/entry.S
> index dda7358..cd23cec 100644
> --- a/arch/x64/entry.S
> +++ b/arch/x64/entry.S
> @@ -217,7 +217,6 @@ syscall_entry:
>      # From http://stackoverflow.com/questions/2535989/what-are-
> the-calling-conventions-for-unix-linux-system-calls-on-x86-64:
>      # "User-level applications use as integer registers for passing the
> sequence %rdi, %rsi, %rdx, %rcx, %r8 and %r9. The kernel interface uses
> %rdi, %rsi, %rdx, %r10, %r8 and %r9"
>
> -    # FIXME: fpu
>      pushq_cfi %rbx
>      pushq_cfi %rdx
>      pushq_cfi %rsi
> @@ -250,6 +249,7 @@ syscall_entry:
>      # Because we pushed an even number of 8 bytes after aligning the
> stack,
>      # it is still 16-byte aligned and we don't need to adjust it here.
>
> +    # FPU save/restore is done inside the wrapper
>      callq syscall_wrapper
>
>      popq_cfi %r9
> diff --git a/linux.cc b/linux.cc
> index 4ab88f3..63377c1 100644
> --- a/linux.cc
> +++ b/linux.cc
> @@ -311,6 +311,10 @@ static int sys_exit(int ret)
>
>  long syscall(long number, ...)
>  {
> +    // Save FPU state and restore it at the end of this function
> +    sched::fpu_lock fpu;
> +    SCOPE_LOCK(fpu);
> +
>      switch (number) {
>      SYSCALL2(open, const char *, int);
>      SYSCALL3(read, int, char *, size_t);
> --
> 2.7.4
>
> --
> You received this message because you are subscribed to the Google Groups
> "OSv Development" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to osv-dev+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to osv-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to