Module Name: src Committed By: rmind Date: Sat Jun 29 16:50:51 UTC 2013
Modified Files: src/sys/sys: syscallvar.h Log Message: sy_invoke: cache the predicate value and simplify the logic (also, fix the tab/space mess while here). To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/sys/sys/syscallvar.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/sys/syscallvar.h diff -u src/sys/sys/syscallvar.h:1.7 src/sys/sys/syscallvar.h:1.8 --- src/sys/sys/syscallvar.h:1.7 Wed Jun 26 08:30:40 2013 +++ src/sys/sys/syscallvar.h Sat Jun 29 16:50:51 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: syscallvar.h,v 1.7 2013/06/26 08:30:40 matt Exp $ */ +/* $NetBSD: syscallvar.h,v 1.8 2013/06/29 16:50:51 rmind Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -68,27 +68,27 @@ static inline int sy_invoke(const struct sysent *sy, struct lwp *l, const void *uap, register_t *rval, int code) { + const bool do_trace = l->l_proc->p_trace_enabled && + (sy->sy_flags & SYCALL_INDIRECT) == 0; int error; - if (!__predict_false(l->l_proc->p_trace_enabled) - || __predict_false(sy->sy_flags & SYCALL_INDIRECT) - || (error = trace_enter(code, uap, sy->sy_narg)) == 0) { - rval[0] = 0; + if (__predict_true(!do_trace) || (error = trace_enter(code, uap, + sy->sy_narg)) == 0) { + rval[0] = 0; #if !defined(__mips__) /* * Due to the mips userland code for SYS_break needing v1 to be * preserved, we can't clear this on mips. */ - rval[1] = 0; + rval[1] = 0; #endif - error = sy_call(sy, l, uap, rval); - } - - if (__predict_false(l->l_proc->p_trace_enabled) - && !__predict_false(sy->sy_flags & SYCALL_INDIRECT)) { - trace_exit(code, rval, error); - } - return error; + error = sy_call(sy, l, uap, rval); + } + + if (__predict_false(do_trace)) { + trace_exit(code, rval, error); + } + return error; } /* inclusion in the kernel currently depends on SYSCALL_DEBUG */