Author: davide
Date: Mon Mar  4 16:07:55 2013
New Revision: 247798
URL: http://svnweb.freebsd.org/changeset/base/247798

Log:
  MFcalloutng (r244255 by mav, with minor changes):
  Specify that syslog doesn't need exactly 5 wakeups per second.
  
  Sponsored by: Google Summer of Code 2012, iXsystems inc.
  Tested by:    flo, marius, ian, markj, Fabian Keil

Modified:
  head/sys/kern/subr_log.c

Modified: head/sys/kern/subr_log.c
==============================================================================
--- head/sys/kern/subr_log.c    Mon Mar  4 15:57:41 2013        (r247797)
+++ head/sys/kern/subr_log.c    Mon Mar  4 16:07:55 2013        (r247798)
@@ -117,8 +117,8 @@ logopen(struct cdev *dev, int flags, int
                return (EBUSY);
        }
        log_open = 1;
-       callout_reset(&logsoftc.sc_callout, hz / log_wakeups_per_second,
-           logtimeout, NULL);
+       callout_reset_sbt(&logsoftc.sc_callout,
+           SBT_1S / log_wakeups_per_second, 0, logtimeout, NULL, C_PREL(1));
        mtx_unlock(&msgbuf_lock);
 
        fsetown(td->td_proc->p_pid, &logsoftc.sc_sigio);        /* signal 
process only */
@@ -233,22 +233,21 @@ logtimeout(void *arg)
 
        if (!log_open)
                return;
-       if (log_wakeups_per_second < 1) {
-               printf("syslog wakeup is less than one.  Adjusting to 1.\n");
-               log_wakeups_per_second = 1;
-       }
-       if (msgbuftrigger == 0) {
-               callout_schedule(&logsoftc.sc_callout,
-                   hz / log_wakeups_per_second);
-               return;
-       }
+       if (msgbuftrigger == 0)
+               goto done;
        msgbuftrigger = 0;
        selwakeuppri(&logsoftc.sc_selp, LOG_RDPRI);
        KNOTE_LOCKED(&logsoftc.sc_selp.si_note, 0);
        if ((logsoftc.sc_state & LOG_ASYNC) && logsoftc.sc_sigio != NULL)
                pgsigio(&logsoftc.sc_sigio, SIGIO, 0);
        cv_broadcastpri(&log_wakeup, LOG_RDPRI);
-       callout_schedule(&logsoftc.sc_callout, hz / log_wakeups_per_second);
+done:
+       if (log_wakeups_per_second < 1) {
+               printf("syslog wakeup is less than one.  Adjusting to 1.\n");
+               log_wakeups_per_second = 1;
+       }
+       callout_reset_sbt(&logsoftc.sc_callout,
+           SBT_1S / log_wakeups_per_second, 0, logtimeout, NULL, C_PREL(1));
 }
 
 /*ARGSUSED*/
_______________________________________________
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