On Thursday 07 April 2011 05:32 pm, John Baldwin wrote:
> Author: jhb
> Date: Thu Apr  7 21:32:25 2011
> New Revision: 220430
> URL: http://svn.freebsd.org/changeset/base/220430
>
> Log:
>   If a system call does not request a full interrupt return, use a
> fast path via the sysretq instruction to return from the system
> call.  This was removed in 190620 and not quite fully restored in
> 195486.  This resolves most of the performance regression in system
> call microbenchmarks between 7 and 8 on amd64.
>
>   Reviewed by:        kib
>   MFC after:  1 week
>
> Modified:
>   head/sys/amd64/amd64/exception.S
>
> Modified: head/sys/amd64/amd64/exception.S
> ===================================================================
>=========== --- head/sys/amd64/amd64/exception.S       Thu Apr  7 21:29:34
> 2011  (r220429) +++ head/sys/amd64/amd64/exception.S  Thu Apr  7
> 21:32:25 2011 (r220430) @@ -339,6 +339,9 @@ IDTVEC(prot)
>   * and the new privilige level.  We are still running on the old
> user stack * pointer.  We have to juggle a few things around to
> find our stack etc. * swapgs gives us access to our PCPU space
> only.
> + *
> + * We do not support invoking this from a custom %cs or %ss (e.g.
> using + * entries from an LDT).
>   */
>  IDTVEC(fast_syscall)
>       swapgs
> @@ -380,6 +383,36 @@ IDTVEC(fast_syscall)
>       movq    %rsp,%rdi
>       call    syscall
>       movq    PCPU(CURPCB),%rax
> +     testq   $PCB_FULL_IRET,PCB_FLAGS(%rax)

FYI, pcb_flags is u_int now, i.e., we need testl here.

Jung-uk Kim
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to