Author: mjg
Date: Fri May  4 04:05:07 2018
New Revision: 333241
URL: https://svnweb.freebsd.org/changeset/base/333241

Log:
  amd64: get rid of the pessimized bcopy in syscall arg copy
  
  The code was unnecessarily conditionally copying either 5 or 6 args.
  It can blindly copy 6, which also means the size is known at compilation
  time and the operation can be depessimized.
  
  Note the entire syscall handling code is rather slow.
  
  Tested on Skylake, sample result for getppid (calls/s):
  without pti: 7310106 -> 10653569
  with pti: 3304843 -> 4148306
  
  Some syscalls (like read) did not note any difference, other have typically
  very modest wins.

Modified:
  head/sys/amd64/amd64/trap.c

Modified: head/sys/amd64/amd64/trap.c
==============================================================================
--- head/sys/amd64/amd64/trap.c Fri May  4 04:00:48 2018        (r333240)
+++ head/sys/amd64/amd64/trap.c Fri May  4 04:05:07 2018        (r333241)
@@ -908,7 +908,7 @@ cpu_fetch_syscall_args(struct thread *td)
        error = 0;
        argp = &frame->tf_rdi;
        argp += reg;
-       bcopy(argp, sa->args, sizeof(sa->args[0]) * regcnt);
+       bcopy(argp, sa->args, sizeof(sa->args[0]) * 6);
        if (sa->narg > regcnt) {
                KASSERT(params != NULL, ("copyin args with no params!"));
                error = copyin(params, &sa->args[regcnt],
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to