From owner-svn-src-projects@FreeBSD.ORG Sun Dec 16 07:09:53 2012 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 5E87E9DF; Sun, 16 Dec 2012 07:09:53 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 428228FC14; Sun, 16 Dec 2012 07:09:53 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.5/8.14.5) with ESMTP id qBG79rNb027221; Sun, 16 Dec 2012 07:09:53 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.5/8.14.5/Submit) id qBG79qoV027219; Sun, 16 Dec 2012 07:09:52 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201212160709.qBG79qoV027219@svn.freebsd.org> From: Alexander Motin Date: Sun, 16 Dec 2012 07:09:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r244284 - in projects/calloutng/sys: kern sys X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 16 Dec 2012 07:09:53 -0000 Author: mav Date: Sun Dec 16 07:09:52 2012 New Revision: 244284 URL: http://svnweb.freebsd.org/changeset/base/244284 Log: - Remove c_staiter field from the struct callout and use c_links.tqe instead. It is possible because callout can't be both on the callwheel and the cc_expireq at the same time. - Remove use of the cc_exec_next field. Since cc_expireq has no extra elements we can always fetch first elements out of it and don't need to keep pointer to the next one. Modified: projects/calloutng/sys/kern/kern_timeout.c projects/calloutng/sys/sys/_callout.h Modified: projects/calloutng/sys/kern/kern_timeout.c ============================================================================== --- projects/calloutng/sys/kern/kern_timeout.c Sun Dec 16 01:20:08 2012 (r244283) +++ projects/calloutng/sys/kern/kern_timeout.c Sun Dec 16 07:09:52 2012 (r244284) @@ -384,7 +384,7 @@ void callout_process(struct bintime *now) { struct bintime first, last, max, tmp_max; - struct callout *tmp; + struct callout *tmp, *tmpn; struct callout_cpu *cc; struct callout_tailq *sc; uint64_t lookahead; @@ -450,12 +450,13 @@ callout_process(struct bintime *now) NULL, 1); tmp = cc->cc_exec_next_dir; } else { - TAILQ_INSERT_TAIL(&cc->cc_expireq, - tmp, c_staiter); + tmpn = TAILQ_NEXT(tmp, c_links.tqe); TAILQ_REMOVE(sc, tmp, c_links.tqe); + TAILQ_INSERT_TAIL(&cc->cc_expireq, + tmp, c_links.tqe); tmp->c_flags |= CALLOUT_PROCESSED; need_softclock = 1; - tmp = TAILQ_NEXT(tmp, c_links.tqe); + tmp = tmpn; } continue; } @@ -789,15 +790,11 @@ softclock(void *arg) gcalls = 0; cc = (struct callout_cpu *)arg; CC_LOCK(cc); - c = TAILQ_FIRST(&cc->cc_expireq); - while (c != NULL) { - ++depth; - cc->cc_exec_next = TAILQ_NEXT(c, c_staiter); - TAILQ_REMOVE(&cc->cc_expireq, c, c_staiter); + while ((c = TAILQ_FIRST(&cc->cc_expireq)) != NULL) { + TAILQ_REMOVE(&cc->cc_expireq, c, c_links.tqe); softclock_call_cc(c, cc, &mpcalls, &lockcalls, &gcalls, 0); - c = cc->cc_exec_next; + ++depth; } - cc->cc_exec_next = NULL; #ifdef CALLOUT_PROFILING avg_depth += (depth * 1000 - avg_depth) >> 8; avg_mpcalls += (mpcalls * 1000 - avg_mpcalls) >> 8; @@ -962,11 +959,8 @@ _callout_reset_on(struct callout *c, str bucket = get_bucket(&c->c_time); TAILQ_REMOVE(&cc->cc_callwheel[bucket], c, c_links.tqe); - } else { - if (cc->cc_exec_next == c) - cc->cc_exec_next = TAILQ_NEXT(c, c_staiter); - TAILQ_REMOVE(&cc->cc_expireq, c, c_staiter); - } + } else + TAILQ_REMOVE(&cc->cc_expireq, c, c_links.tqe); cancelled = 1; c->c_flags &= ~(CALLOUT_ACTIVE | CALLOUT_PENDING); } @@ -1187,11 +1181,8 @@ again: bucket = get_bucket(&c->c_time); TAILQ_REMOVE(&cc->cc_callwheel[bucket], c, c_links.tqe); - } else { - if (cc->cc_exec_next == c) - cc->cc_exec_next = TAILQ_NEXT(c, c_links.tqe); - TAILQ_REMOVE(&cc->cc_expireq, c, c_staiter); - } + } else + TAILQ_REMOVE(&cc->cc_expireq, c, c_links.tqe); callout_cc_del(c, cc); CC_UNLOCK(cc); Modified: projects/calloutng/sys/sys/_callout.h ============================================================================== --- projects/calloutng/sys/sys/_callout.h Sun Dec 16 01:20:08 2012 (r244283) +++ projects/calloutng/sys/sys/_callout.h Sun Dec 16 07:09:52 2012 (r244284) @@ -51,7 +51,6 @@ struct callout { SLIST_ENTRY(callout) sle; TAILQ_ENTRY(callout) tqe; } c_links; - TAILQ_ENTRY(callout) c_staiter; struct bintime c_time; /* ticks to the event */ struct bintime c_precision; /* delta allowed wrt opt */ void *c_arg; /* function argument */