svn commit: r239118 - projects/calloutng/sys/kern
Davide Italiano
davide at FreeBSD.org
Tue Aug 7 00:28:30 UTC 2012
Author: davide
Date: Tue Aug 7 00:28:29 2012
New Revision: 239118
URL: http://svn.freebsd.org/changeset/base/239118
Log:
Remove some unneeded checks. For non-direct callouts softclock_call_cc()
is only called for callouts on cc_expireq queue, and all the callouts there
have CALLOUT_PROCESSED flag. Similarly, for direct callouts the
aforementioned function is called for callouts on the wheel, which haven't
CALLOUT_PROCESS flag set.
Reviewed by: mav
Modified:
projects/calloutng/sys/kern/kern_timeout.c
Modified: projects/calloutng/sys/kern/kern_timeout.c
==============================================================================
--- projects/calloutng/sys/kern/kern_timeout.c Tue Aug 7 00:15:33 2012 (r239117)
+++ projects/calloutng/sys/kern/kern_timeout.c Tue Aug 7 00:28:29 2012 (r239118)
@@ -448,6 +448,7 @@ callout_process(struct bintime *now)
break;
first = (first + 1) & callwheelmask;
}
+ cc->cc_exec_next_dir = NULL;
future = (last + hz / 4) & callwheelmask;
max.sec = min.sec = TIME_T_MAX;
max.frac = min.frac = UINT64_MAX;
@@ -614,9 +615,10 @@ callout_cc_add(struct callout *c, struct
static void
callout_cc_del(struct callout *c, struct callout_cpu *cc, int direct)
{
- if (direct && cc->cc_exec_next_dir == c)
+
+ if (cc->cc_exec_next_dir == c)
cc->cc_exec_next_dir = TAILQ_NEXT(c, c_links.tqe);
- else if (!direct && cc->cc_exec_next == c)
+ else if (cc->cc_exec_next == c)
cc->cc_exec_next = TAILQ_NEXT(c, c_staiter);
if (c->c_flags & CALLOUT_LOCAL_ALLOC) {
c->c_func = NULL;
@@ -649,12 +651,8 @@ softclock_call_cc(struct callout *c, str
if (direct)
cc->cc_exec_next_dir = TAILQ_NEXT(c, c_links.tqe);
- else {
- if ((c->c_flags & CALLOUT_PROCESSED) == 0)
- cc->cc_exec_next = TAILQ_NEXT(c, c_links.tqe);
- else
- cc->cc_exec_next = TAILQ_NEXT(c, c_staiter);
- }
+ else
+ cc->cc_exec_next = TAILQ_NEXT(c, c_staiter);
class = (c->c_lock != NULL) ? LOCK_CLASS(c->c_lock) : NULL;
sharedlock = (c->c_flags & CALLOUT_SHAREDLOCK) ? 0 : 1;
c_lock = c->c_lock;
@@ -844,6 +842,7 @@ softclock(void *arg)
avg_lockcalls += (lockcalls * 1000 - avg_lockcalls) >> 8;
avg_gcalls += (gcalls * 1000 - avg_gcalls) >> 8;
#endif
+ cc->cc_exec_next = NULL;
CC_UNLOCK(cc);
}
@@ -980,9 +979,7 @@ _callout_reset_on(struct callout *c, str
}
if (c->c_flags & CALLOUT_PENDING) {
if ((c->c_flags & CALLOUT_PROCESSED) == 0) {
- if (cc->cc_exec_next == c)
- cc->cc_exec_next = TAILQ_NEXT(c, c_links.tqe);
- else if (cc->cc_exec_next_dir == c)
+ if (cc->cc_exec_next_dir == c)
cc->cc_exec_next_dir = TAILQ_NEXT(c,
c_links.tqe);
bucket = get_bucket(&c->c_time);
More information about the svn-src-projects
mailing list