90a1d06f687562ace8ac8f7f7d3fcd7bf6d3dc04
[dragonfly.git] / sys / kern / kern_synch.c
1 /*-
2  * Copyright (c) 1982, 1986, 1990, 1991, 1993
3  *      The Regents of the University of California.  All rights reserved.
4  * (c) UNIX System Laboratories, Inc.
5  * All or some portions of this file are derived from material licensed
6  * to the University of California by American Telephone and Telegraph
7  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
8  * the permission of UNIX System Laboratories, Inc.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  * 3. All advertising materials mentioning features or use of this software
19  *    must display the following acknowledgement:
20  *      This product includes software developed by the University of
21  *      California, Berkeley and its contributors.
22  * 4. Neither the name of the University nor the names of its contributors
23  *    may be used to endorse or promote products derived from this software
24  *    without specific prior written permission.
25  *
26  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
27  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
30  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36  * SUCH DAMAGE.
37  *
38  *      @(#)kern_synch.c        8.9 (Berkeley) 5/19/95
39  * $FreeBSD: src/sys/kern/kern_synch.c,v 1.87.2.6 2002/10/13 07:29:53 kbyanc Exp $
40  * $DragonFly: src/sys/kern/kern_synch.c,v 1.91 2008/09/09 04:06:13 dillon Exp $
41  */
42
43 #include "opt_ktrace.h"
44
45 #include <sys/param.h>
46 #include <sys/systm.h>
47 #include <sys/proc.h>
48 #include <sys/kernel.h>
49 #include <sys/signalvar.h>
50 #include <sys/resourcevar.h>
51 #include <sys/vmmeter.h>
52 #include <sys/sysctl.h>
53 #include <sys/lock.h>
54 #include <sys/uio.h>
55 #ifdef KTRACE
56 #include <sys/ktrace.h>
57 #endif
58 #include <sys/xwait.h>
59 #include <sys/ktr.h>
60 #include <sys/serialize.h>
61
62 #include <sys/signal2.h>
63 #include <sys/thread2.h>
64 #include <sys/spinlock2.h>
65 #include <sys/mutex2.h>
66
67 #include <machine/cpu.h>
68 #include <machine/smp.h>
69
70 TAILQ_HEAD(tslpque, thread);
71
72 static void sched_setup (void *dummy);
73 SYSINIT(sched_setup, SI_SUB_KICK_SCHEDULER, SI_ORDER_FIRST, sched_setup, NULL)
74
75 int     hogticks;
76 int     lbolt;
77 int     lbolt_syncer;
78 int     sched_quantum;          /* Roundrobin scheduling quantum in ticks. */
79 int     ncpus;
80 int     ncpus2, ncpus2_shift, ncpus2_mask;      /* note: mask not cpumask_t */
81 int     ncpus_fit, ncpus_fit_mask;              /* note: mask not cpumask_t */
82 int     safepri;
83 int     tsleep_now_works;
84 int     tsleep_crypto_dump = 0;
85
86 static struct callout loadav_callout;
87 static struct callout schedcpu_callout;
88 MALLOC_DEFINE(M_TSLEEP, "tslpque", "tsleep queues");
89
90 #define __DEALL(ident)  __DEQUALIFY(void *, ident)
91
92 #if !defined(KTR_TSLEEP)
93 #define KTR_TSLEEP      KTR_ALL
94 #endif
95 KTR_INFO_MASTER(tsleep);
96 KTR_INFO(KTR_TSLEEP, tsleep, tsleep_beg, 0, "tsleep enter %p", sizeof(void *));
97 KTR_INFO(KTR_TSLEEP, tsleep, tsleep_end, 1, "tsleep exit", 0);
98 KTR_INFO(KTR_TSLEEP, tsleep, wakeup_beg, 2, "wakeup enter %p", sizeof(void *));
99 KTR_INFO(KTR_TSLEEP, tsleep, wakeup_end, 3, "wakeup exit", 0);
100 KTR_INFO(KTR_TSLEEP, tsleep, ilockfail,  4, "interlock failed %p", sizeof(void *));
101
102 #define logtsleep1(name)        KTR_LOG(tsleep_ ## name)
103 #define logtsleep2(name, val)   KTR_LOG(tsleep_ ## name, val)
104
105 struct loadavg averunnable =
106         { {0, 0, 0}, FSCALE };  /* load average, of runnable procs */
107 /*
108  * Constants for averages over 1, 5, and 15 minutes
109  * when sampling at 5 second intervals.
110  */
111 static fixpt_t cexp[3] = {
112         0.9200444146293232 * FSCALE,    /* exp(-1/12) */
113         0.9834714538216174 * FSCALE,    /* exp(-1/60) */
114         0.9944598480048967 * FSCALE,    /* exp(-1/180) */
115 };
116
117 static void     endtsleep (void *);
118 static void     loadav (void *arg);
119 static void     schedcpu (void *arg);
120 #ifdef SMP
121 static void     tsleep_wakeup_remote(struct thread *td);
122 #endif
123
124 /*
125  * Adjust the scheduler quantum.  The quantum is specified in microseconds.
126  * Note that 'tick' is in microseconds per tick.
127  */
128 static int
129 sysctl_kern_quantum(SYSCTL_HANDLER_ARGS)
130 {
131         int error, new_val;
132
133         new_val = sched_quantum * ustick;
134         error = sysctl_handle_int(oidp, &new_val, 0, req);
135         if (error != 0 || req->newptr == NULL)
136                 return (error);
137         if (new_val < ustick)
138                 return (EINVAL);
139         sched_quantum = new_val / ustick;
140         hogticks = 2 * sched_quantum;
141         return (0);
142 }
143
144 SYSCTL_PROC(_kern, OID_AUTO, quantum, CTLTYPE_INT|CTLFLAG_RW,
145         0, sizeof sched_quantum, sysctl_kern_quantum, "I", "");
146
147 /*
148  * If `ccpu' is not equal to `exp(-1/20)' and you still want to use the
149  * faster/more-accurate formula, you'll have to estimate CCPU_SHIFT below
150  * and possibly adjust FSHIFT in "param.h" so that (FSHIFT >= CCPU_SHIFT).
151  *
152  * To estimate CCPU_SHIFT for exp(-1/20), the following formula was used:
153  *     1 - exp(-1/20) ~= 0.0487 ~= 0.0488 == 1 (fixed pt, *11* bits).
154  *
155  * If you don't want to bother with the faster/more-accurate formula, you
156  * can set CCPU_SHIFT to (FSHIFT + 1) which will use a slower/less-accurate
157  * (more general) method of calculating the %age of CPU used by a process.
158  *
159  * decay 95% of `lwp_pctcpu' in 60 seconds; see CCPU_SHIFT before changing
160  */
161 #define CCPU_SHIFT      11
162
163 static fixpt_t ccpu = 0.95122942450071400909 * FSCALE; /* exp(-1/20) */
164 SYSCTL_INT(_kern, OID_AUTO, ccpu, CTLFLAG_RD, &ccpu, 0, "");
165
166 /*
167  * kernel uses `FSCALE', userland (SHOULD) use kern.fscale 
168  */
169 int     fscale __unused = FSCALE;       /* exported to systat */
170 SYSCTL_INT(_kern, OID_AUTO, fscale, CTLFLAG_RD, 0, FSCALE, "");
171
172 /*
173  * Recompute process priorities, once a second.
174  *
175  * Since the userland schedulers are typically event oriented, if the
176  * estcpu calculation at wakeup() time is not sufficient to make a
177  * process runnable relative to other processes in the system we have
178  * a 1-second recalc to help out.
179  *
180  * This code also allows us to store sysclock_t data in the process structure
181  * without fear of an overrun, since sysclock_t are guarenteed to hold 
182  * several seconds worth of count.
183  *
184  * WARNING!  callouts can preempt normal threads.  However, they will not
185  * preempt a thread holding a spinlock so we *can* safely use spinlocks.
186  */
187 static int schedcpu_stats(struct proc *p, void *data __unused);
188 static int schedcpu_resource(struct proc *p, void *data __unused);
189
190 static void
191 schedcpu(void *arg)
192 {
193         allproc_scan(schedcpu_stats, NULL);
194         allproc_scan(schedcpu_resource, NULL);
195         wakeup((caddr_t)&lbolt);
196         wakeup((caddr_t)&lbolt_syncer);
197         callout_reset(&schedcpu_callout, hz, schedcpu, NULL);
198 }
199
200 /*
201  * General process statistics once a second
202  */
203 static int
204 schedcpu_stats(struct proc *p, void *data __unused)
205 {
206         struct lwp *lp;
207
208         /*
209          * Threads may not be completely set up if process in SIDL state.
210          */
211         if (p->p_stat == SIDL)
212                 return(0);
213
214         PHOLD(p);
215         if (lwkt_trytoken(&p->p_token) == FALSE) {
216                 PRELE(p);
217                 return(0);
218         }
219
220         p->p_swtime++;
221         FOREACH_LWP_IN_PROC(lp, p) {
222                 if (lp->lwp_stat == LSSLEEP)
223                         lp->lwp_slptime++;
224
225                 /*
226                  * Only recalculate processes that are active or have slept
227                  * less then 2 seconds.  The schedulers understand this.
228                  */
229                 if (lp->lwp_slptime <= 1) {
230                         p->p_usched->recalculate(lp);
231                 } else {
232                         lp->lwp_pctcpu = (lp->lwp_pctcpu * ccpu) >> FSHIFT;
233                 }
234         }
235         lwkt_reltoken(&p->p_token);
236         PRELE(p);
237         return(0);
238 }
239
240 /*
241  * Resource checks.  XXX break out since ksignal/killproc can block,
242  * limiting us to one process killed per second.  There is probably
243  * a better way.
244  */
245 static int
246 schedcpu_resource(struct proc *p, void *data __unused)
247 {
248         u_int64_t ttime;
249         struct lwp *lp;
250
251         if (p->p_stat == SIDL)
252                 return(0);
253
254         PHOLD(p);
255         if (lwkt_trytoken(&p->p_token) == FALSE) {
256                 PRELE(p);
257                 return(0);
258         }
259
260         if (p->p_stat == SZOMB || p->p_limit == NULL) {
261                 lwkt_reltoken(&p->p_token);
262                 PRELE(p);
263                 return(0);
264         }
265
266         ttime = 0;
267         FOREACH_LWP_IN_PROC(lp, p) {
268                 /*
269                  * We may have caught an lp in the middle of being
270                  * created, lwp_thread can be NULL.
271                  */
272                 if (lp->lwp_thread) {
273                         ttime += lp->lwp_thread->td_sticks;
274                         ttime += lp->lwp_thread->td_uticks;
275                 }
276         }
277
278         switch(plimit_testcpulimit(p->p_limit, ttime)) {
279         case PLIMIT_TESTCPU_KILL:
280                 killproc(p, "exceeded maximum CPU limit");
281                 break;
282         case PLIMIT_TESTCPU_XCPU:
283                 if ((p->p_flag & P_XCPU) == 0) {
284                         p->p_flag |= P_XCPU;
285                         ksignal(p, SIGXCPU);
286                 }
287                 break;
288         default:
289                 break;
290         }
291         lwkt_reltoken(&p->p_token);
292         PRELE(p);
293         return(0);
294 }
295
296 /*
297  * This is only used by ps.  Generate a cpu percentage use over
298  * a period of one second.
299  *
300  * MPSAFE
301  */
302 void
303 updatepcpu(struct lwp *lp, int cpticks, int ttlticks)
304 {
305         fixpt_t acc;
306         int remticks;
307
308         acc = (cpticks << FSHIFT) / ttlticks;
309         if (ttlticks >= ESTCPUFREQ) {
310                 lp->lwp_pctcpu = acc;
311         } else {
312                 remticks = ESTCPUFREQ - ttlticks;
313                 lp->lwp_pctcpu = (acc * ttlticks + lp->lwp_pctcpu * remticks) /
314                                 ESTCPUFREQ;
315         }
316 }
317
318 /*
319  * tsleep/wakeup hash table parameters.  Try to find the sweet spot for
320  * like addresses being slept on.
321  */
322 #define TABLESIZE       4001
323 #define LOOKUP(x)       (((u_int)(uintptr_t)(x)) % TABLESIZE)
324
325 static cpumask_t slpque_cpumasks[TABLESIZE];
326
327 /*
328  * General scheduler initialization.  We force a reschedule 25 times
329  * a second by default.  Note that cpu0 is initialized in early boot and
330  * cannot make any high level calls.
331  *
332  * Each cpu has its own sleep queue.
333  */
334 void
335 sleep_gdinit(globaldata_t gd)
336 {
337         static struct tslpque slpque_cpu0[TABLESIZE];
338         int i;
339
340         if (gd->gd_cpuid == 0) {
341                 sched_quantum = (hz + 24) / 25;
342                 hogticks = 2 * sched_quantum;
343
344                 gd->gd_tsleep_hash = slpque_cpu0;
345         } else {
346                 gd->gd_tsleep_hash = kmalloc(sizeof(slpque_cpu0), 
347                                             M_TSLEEP, M_WAITOK | M_ZERO);
348         }
349         for (i = 0; i < TABLESIZE; ++i)
350                 TAILQ_INIT(&gd->gd_tsleep_hash[i]);
351 }
352
353 /*
354  * This is a dandy function that allows us to interlock tsleep/wakeup
355  * operations with unspecified upper level locks, such as lockmgr locks,
356  * simply by holding a critical section.  The sequence is:
357  *
358  *      (acquire upper level lock)
359  *      tsleep_interlock(blah)
360  *      (release upper level lock)
361  *      tsleep(blah, ...)
362  *
363  * Basically this functions queues us on the tsleep queue without actually
364  * descheduling us.  When tsleep() is later called with PINTERLOCK it
365  * assumes the thread was already queued, otherwise it queues it there.
366  *
367  * Thus it is possible to receive the wakeup prior to going to sleep and
368  * the race conditions are covered.
369  */
370 static __inline void
371 _tsleep_interlock(globaldata_t gd, const volatile void *ident, int flags)
372 {
373         thread_t td = gd->gd_curthread;
374         int id;
375
376         crit_enter_quick(td);
377         if (td->td_flags & TDF_TSLEEPQ) {
378                 id = LOOKUP(td->td_wchan);
379                 TAILQ_REMOVE(&gd->gd_tsleep_hash[id], td, td_sleepq);
380                 if (TAILQ_FIRST(&gd->gd_tsleep_hash[id]) == NULL) {
381                         atomic_clear_cpumask(&slpque_cpumasks[id],
382                                              gd->gd_cpumask);
383                 }
384         } else {
385                 td->td_flags |= TDF_TSLEEPQ;
386         }
387         id = LOOKUP(ident);
388         TAILQ_INSERT_TAIL(&gd->gd_tsleep_hash[id], td, td_sleepq);
389         atomic_set_cpumask(&slpque_cpumasks[id], gd->gd_cpumask);
390         td->td_wchan = ident;
391         td->td_wdomain = flags & PDOMAIN_MASK;
392         crit_exit_quick(td);
393 }
394
395 void
396 tsleep_interlock(const volatile void *ident, int flags)
397 {
398         _tsleep_interlock(mycpu, ident, flags);
399 }
400
401 /*
402  * Remove thread from sleepq.  Must be called with a critical section held.
403  */
404 static __inline void
405 _tsleep_remove(thread_t td)
406 {
407         globaldata_t gd = mycpu;
408         int id;
409
410         KKASSERT(td->td_gd == gd);
411         if (td->td_flags & TDF_TSLEEPQ) {
412                 td->td_flags &= ~TDF_TSLEEPQ;
413                 id = LOOKUP(td->td_wchan);
414                 TAILQ_REMOVE(&gd->gd_tsleep_hash[id], td, td_sleepq);
415                 if (TAILQ_FIRST(&gd->gd_tsleep_hash[id]) == NULL)
416                         atomic_clear_cpumask(&slpque_cpumasks[id], gd->gd_cpumask);
417                 td->td_wchan = NULL;
418                 td->td_wdomain = 0;
419         }
420 }
421
422 void
423 tsleep_remove(thread_t td)
424 {
425         _tsleep_remove(td);
426 }
427
428 /*
429  * This function removes a thread from the tsleep queue and schedules
430  * it.  This function may act asynchronously.  The target thread may be
431  * sleeping on a different cpu.
432  *
433  * This function mus be called while in a critical section but if the
434  * target thread is sleeping on a different cpu we cannot safely probe
435  * td_flags.
436  *
437  * This function is only called from a different cpu via setrunnable()
438  * when the thread is in a known sleep.  However, multiple wakeups are
439  * possible and we must hold the td to prevent a race against the thread
440  * exiting.
441  */
442 static __inline
443 void
444 _tsleep_wakeup(struct thread *td)
445 {
446 #ifdef SMP
447         globaldata_t gd = mycpu;
448
449         if (td->td_gd != gd) {
450                 lwkt_hold(td);
451                 lwkt_send_ipiq(td->td_gd, (ipifunc1_t)tsleep_wakeup_remote, td);
452                 return;
453         }
454 #endif
455         _tsleep_remove(td);
456         if (td->td_flags & TDF_TSLEEP_DESCHEDULED) {
457                 td->td_flags &= ~TDF_TSLEEP_DESCHEDULED;
458                 lwkt_schedule(td);
459         }
460 }
461
462 #ifdef SMP
463 static
464 void
465 tsleep_wakeup_remote(struct thread *td)
466 {
467         _tsleep_wakeup(td);
468         lwkt_rele(td);
469 }
470 #endif
471
472
473 /*
474  * General sleep call.  Suspends the current process until a wakeup is
475  * performed on the specified identifier.  The process will then be made
476  * runnable with the specified priority.  Sleeps at most timo/hz seconds
477  * (0 means no timeout).  If flags includes PCATCH flag, signals are checked
478  * before and after sleeping, else signals are not checked.  Returns 0 if
479  * awakened, EWOULDBLOCK if the timeout expires.  If PCATCH is set and a
480  * signal needs to be delivered, ERESTART is returned if the current system
481  * call should be restarted if possible, and EINTR is returned if the system
482  * call should be interrupted by the signal (return EINTR).
483  *
484  * Note that if we are a process, we release_curproc() before messing with
485  * the LWKT scheduler.
486  *
487  * During autoconfiguration or after a panic, a sleep will simply
488  * lower the priority briefly to allow interrupts, then return.
489  */
490 int
491 tsleep(const volatile void *ident, int flags, const char *wmesg, int timo)
492 {
493         struct thread *td = curthread;
494         struct lwp *lp = td->td_lwp;
495         struct proc *p = td->td_proc;           /* may be NULL */
496         globaldata_t gd;
497         int sig;
498         int catch;
499         int id;
500         int error;
501         int oldpri;
502         struct callout thandle;
503
504         /*
505          * NOTE: removed KTRPOINT, it could cause races due to blocking
506          * even in stable.  Just scrap it for now.
507          */
508         if (!tsleep_crypto_dump && (tsleep_now_works == 0 || panicstr)) {
509                 /*
510                  * After a panic, or before we actually have an operational
511                  * softclock, just give interrupts a chance, then just return;
512                  *
513                  * don't run any other procs or panic below,
514                  * in case this is the idle process and already asleep.
515                  */
516                 splz();
517                 oldpri = td->td_pri;
518                 lwkt_setpri_self(safepri);
519                 lwkt_switch();
520                 lwkt_setpri_self(oldpri);
521                 return (0);
522         }
523         logtsleep2(tsleep_beg, ident);
524         gd = td->td_gd;
525         KKASSERT(td != &gd->gd_idlethread);     /* you must be kidding! */
526
527         /*
528          * NOTE: all of this occurs on the current cpu, including any
529          * callout-based wakeups, so a critical section is a sufficient
530          * interlock.
531          *
532          * The entire sequence through to where we actually sleep must
533          * run without breaking the critical section.
534          */
535         catch = flags & PCATCH;
536         error = 0;
537         sig = 0;
538
539         crit_enter_quick(td);
540
541         KASSERT(ident != NULL, ("tsleep: no ident"));
542         KASSERT(lp == NULL ||
543                 lp->lwp_stat == LSRUN ||        /* Obvious */
544                 lp->lwp_stat == LSSTOP,         /* Set in tstop */
545                 ("tsleep %p %s %d",
546                         ident, wmesg, lp->lwp_stat));
547
548         /*
549          * We interlock the sleep queue if the caller has not already done
550          * it for us.  This must be done before we potentially acquire any
551          * tokens or we can loose the wakeup.
552          */
553         if ((flags & PINTERLOCKED) == 0) {
554                 id = LOOKUP(ident);
555                 _tsleep_interlock(gd, ident, flags);
556         }
557
558         /*
559          * Setup for the current process (if this is a process). 
560          *
561          * We hold the process token if lp && catch.  The resume
562          * code will release it.
563          */
564         if (lp) {
565                 if (catch) {
566                         /*
567                          * Early termination if PCATCH was set and a
568                          * signal is pending, interlocked with the
569                          * critical section.
570                          *
571                          * Early termination only occurs when tsleep() is
572                          * entered while in a normal LSRUN state.
573                          */
574                         lwkt_gettoken(&p->p_token);
575                         if ((sig = CURSIG(lp)) != 0)
576                                 goto resume;
577
578                         /*
579                          * Early termination if PCATCH was set and a
580                          * mailbox signal was possibly delivered prior to
581                          * the system call even being made, in order to
582                          * allow the user to interlock without having to
583                          * make additional system calls.
584                          */
585                         if (p->p_flag & P_MAILBOX)
586                                 goto resume;
587
588                         /*
589                          * Causes ksignal to wake us up if a signal is
590                          * received (interlocked with p->p_token).
591                          */
592                         lp->lwp_flag |= LWP_SINTR;
593                 }
594         } else {
595                 KKASSERT(p == NULL);
596         }
597
598         /*
599          * Make sure the current process has been untangled from
600          * the userland scheduler and initialize slptime to start
601          * counting.
602          */
603         if (lp) {
604                 p->p_usched->release_curproc(lp);
605                 lp->lwp_slptime = 0;
606         }
607
608         /*
609          * If the interlocked flag is set but our cpu bit in the slpqueue
610          * is no longer set, then a wakeup was processed inbetween the
611          * tsleep_interlock() (ours or the callers), and here.  This can
612          * occur under numerous circumstances including when we release the
613          * current process.
614          *
615          * Extreme loads can cause the sending of an IPI (e.g. wakeup()'s)
616          * to process incoming IPIs, thus draining incoming wakeups.
617          */
618         if ((td->td_flags & TDF_TSLEEPQ) == 0) {
619                 logtsleep2(ilockfail, ident);
620                 goto resume;
621         }
622
623         /*
624          * scheduling is blocked while in a critical section.  Coincide
625          * the descheduled-by-tsleep flag with the descheduling of the
626          * lwkt.
627          *
628          * The timer callout is localized on our cpu and interlocked by
629          * our critical section.
630          */
631         lwkt_deschedule_self(td);
632         td->td_flags |= TDF_TSLEEP_DESCHEDULED;
633         td->td_wmesg = wmesg;
634
635         /*
636          * Setup the timeout, if any.  The timeout is only operable while
637          * the thread is flagged descheduled.
638          */
639         KKASSERT((td->td_flags & TDF_TIMEOUT) == 0);
640         if (timo) {
641                 callout_init_mp(&thandle);
642                 callout_reset(&thandle, timo, endtsleep, td);
643         }
644
645         /*
646          * Beddy bye bye.
647          */
648         if (lp) {
649                 /*
650                  * Ok, we are sleeping.  Place us in the SSLEEP state.
651                  */
652                 KKASSERT((lp->lwp_flag & LWP_ONRUNQ) == 0);
653                 /*
654                  * tstop() sets LSSTOP, so don't fiddle with that.
655                  */
656                 if (lp->lwp_stat != LSSTOP)
657                         lp->lwp_stat = LSSLEEP;
658                 lp->lwp_ru.ru_nvcsw++;
659                 lwkt_switch();
660                 td->td_flags &= ~TDF_TSLEEP_DESCHEDULED;
661
662                 /*
663                  * And when we are woken up, put us back in LSRUN.  If we
664                  * slept for over a second, recalculate our estcpu.
665                  */
666                 lp->lwp_stat = LSRUN;
667                 if (lp->lwp_slptime)
668                         p->p_usched->recalculate(lp);
669                 lp->lwp_slptime = 0;
670         } else {
671                 lwkt_switch();
672                 td->td_flags &= ~TDF_TSLEEP_DESCHEDULED;
673         }
674
675         /* 
676          * Make sure we haven't switched cpus while we were asleep.  It's
677          * not supposed to happen.  Cleanup our temporary flags.
678          */
679         KKASSERT(gd == td->td_gd);
680
681         /*
682          * Cleanup the timeout.  If the timeout has already occured thandle
683          * has already been stopped, otherwise stop thandle.
684          */
685         if (timo) {
686                 if (td->td_flags & TDF_TIMEOUT) {
687                         td->td_flags &= ~TDF_TIMEOUT;
688                         error = EWOULDBLOCK;
689                 } else {
690                         /* does not block when on same cpu */
691                         callout_stop(&thandle);
692                 }
693         }
694
695         /*
696          * Make sure we have been removed from the sleepq.  In most
697          * cases this will have been done for us already but it is
698          * possible for a scheduling IPI to be in-flight from a
699          * previous tsleep/tsleep_interlock() or due to a straight-out
700          * call to lwkt_schedule() (in the case of an interrupt thread),
701          * causing a spurious wakeup.
702          */
703         _tsleep_remove(td);
704         td->td_wmesg = NULL;
705
706         /*
707          * Figure out the correct error return.  If interrupted by a
708          * signal we want to return EINTR or ERESTART.  
709          *
710          * If P_MAILBOX is set no automatic system call restart occurs
711          * and we return EINTR.  P_MAILBOX is meant to be used as an
712          * interlock, the user must poll it prior to any system call
713          * that it wishes to interlock a mailbox signal against since
714          * the flag is cleared on *any* system call that sleeps.
715          *
716          * p->p_token is held in the p && catch case.
717          */
718 resume:
719         if (p) {
720                 if (catch && error == 0) {
721                         if ((p->p_flag & P_MAILBOX) && sig == 0) {
722                                 error = EINTR;
723                         } else if (sig != 0 || (sig = CURSIG(lp))) {
724                                 if (SIGISMEMBER(p->p_sigacts->ps_sigintr, sig))
725                                         error = EINTR;
726                                 else
727                                         error = ERESTART;
728                         }
729                 }
730                 if (catch)
731                         lwkt_reltoken(&p->p_token);
732                 lp->lwp_flag &= ~(LWP_BREAKTSLEEP | LWP_SINTR);
733                 p->p_flag &= ~P_MAILBOX;
734         }
735         logtsleep1(tsleep_end);
736         crit_exit_quick(td);
737         return (error);
738 }
739
740 /*
741  * Interlocked spinlock sleep.  An exclusively held spinlock must
742  * be passed to ssleep().  The function will atomically release the
743  * spinlock and tsleep on the ident, then reacquire the spinlock and
744  * return.
745  *
746  * This routine is fairly important along the critical path, so optimize it
747  * heavily.
748  */
749 int
750 ssleep(const volatile void *ident, struct spinlock *spin, int flags,
751        const char *wmesg, int timo)
752 {
753         globaldata_t gd = mycpu;
754         int error;
755
756         _tsleep_interlock(gd, ident, flags);
757         spin_unlock_quick(gd, spin);
758         error = tsleep(ident, flags | PINTERLOCKED, wmesg, timo);
759         spin_lock_quick(gd, spin);
760
761         return (error);
762 }
763
764 int
765 lksleep(const volatile void *ident, struct lock *lock, int flags,
766         const char *wmesg, int timo)
767 {
768         globaldata_t gd = mycpu;
769         int error;
770
771         _tsleep_interlock(gd, ident, flags);
772         lockmgr(lock, LK_RELEASE);
773         error = tsleep(ident, flags | PINTERLOCKED, wmesg, timo);
774         lockmgr(lock, LK_EXCLUSIVE);
775
776         return (error);
777 }
778
779 /*
780  * Interlocked mutex sleep.  An exclusively held mutex must be passed
781  * to mtxsleep().  The function will atomically release the mutex
782  * and tsleep on the ident, then reacquire the mutex and return.
783  */
784 int
785 mtxsleep(const volatile void *ident, struct mtx *mtx, int flags,
786          const char *wmesg, int timo)
787 {
788         globaldata_t gd = mycpu;
789         int error;
790
791         _tsleep_interlock(gd, ident, flags);
792         mtx_unlock(mtx);
793         error = tsleep(ident, flags | PINTERLOCKED, wmesg, timo);
794         mtx_lock_ex_quick(mtx, wmesg);
795
796         return (error);
797 }
798
799 /*
800  * Interlocked serializer sleep.  An exclusively held serializer must
801  * be passed to zsleep().  The function will atomically release
802  * the serializer and tsleep on the ident, then reacquire the serializer
803  * and return.
804  */
805 int
806 zsleep(const volatile void *ident, struct lwkt_serialize *slz, int flags,
807        const char *wmesg, int timo)
808 {
809         globaldata_t gd = mycpu;
810         int ret;
811
812         ASSERT_SERIALIZED(slz);
813
814         _tsleep_interlock(gd, ident, flags);
815         lwkt_serialize_exit(slz);
816         ret = tsleep(ident, flags | PINTERLOCKED, wmesg, timo);
817         lwkt_serialize_enter(slz);
818
819         return ret;
820 }
821
822 /*
823  * Directly block on the LWKT thread by descheduling it.  This
824  * is much faster then tsleep(), but the only legal way to wake
825  * us up is to directly schedule the thread.
826  *
827  * Setting TDF_SINTR will cause new signals to directly schedule us.
828  *
829  * This routine must be called while in a critical section.
830  */
831 int
832 lwkt_sleep(const char *wmesg, int flags)
833 {
834         thread_t td = curthread;
835         int sig;
836
837         if ((flags & PCATCH) == 0 || td->td_lwp == NULL) {
838                 td->td_flags |= TDF_BLOCKED;
839                 td->td_wmesg = wmesg;
840                 lwkt_deschedule_self(td);
841                 lwkt_switch();
842                 td->td_wmesg = NULL;
843                 td->td_flags &= ~TDF_BLOCKED;
844                 return(0);
845         }
846         if ((sig = CURSIG(td->td_lwp)) != 0) {
847                 if (SIGISMEMBER(td->td_proc->p_sigacts->ps_sigintr, sig))
848                         return(EINTR);
849                 else
850                         return(ERESTART);
851                         
852         }
853         td->td_flags |= TDF_BLOCKED | TDF_SINTR;
854         td->td_wmesg = wmesg;
855         lwkt_deschedule_self(td);
856         lwkt_switch();
857         td->td_flags &= ~(TDF_BLOCKED | TDF_SINTR);
858         td->td_wmesg = NULL;
859         return(0);
860 }
861
862 /*
863  * Implement the timeout for tsleep.
864  *
865  * We set LWP_BREAKTSLEEP to indicate that an event has occured, but
866  * we only call setrunnable if the process is not stopped.
867  *
868  * This type of callout timeout is scheduled on the same cpu the process
869  * is sleeping on.  Also, at the moment, the MP lock is held.
870  */
871 static void
872 endtsleep(void *arg)
873 {
874         thread_t td = arg;
875         struct lwp *lp;
876
877         crit_enter();
878
879         /*
880          * Do this before we potentially block acquiring the token.  Setting
881          * TDF_TIMEOUT tells tsleep that we have already stopped the callout.
882          */
883         lwkt_hold(td);
884         td->td_flags |= TDF_TIMEOUT;
885
886         /*
887          * This can block
888          */
889         if ((lp = td->td_lwp) != NULL)
890                 lwkt_gettoken(&lp->lwp_proc->p_token);
891
892         /*
893          * Only do nominal wakeup processing if TDF_TIMEOUT and
894          * TDF_TSLEEP_DESCHEDULED are both still set.  Otherwise
895          * we raced a wakeup or we began executed and raced due to
896          * blocking in the token above, and should do nothing.
897          */
898         if ((td->td_flags & (TDF_TIMEOUT | TDF_TSLEEP_DESCHEDULED)) ==
899             (TDF_TIMEOUT | TDF_TSLEEP_DESCHEDULED)) {
900                 if (lp) {
901                         lp->lwp_flag |= LWP_BREAKTSLEEP;
902                         if (lp->lwp_proc->p_stat != SSTOP)
903                                 setrunnable(lp);
904                 } else {
905                         _tsleep_wakeup(td);
906                 }
907         }
908         if (lp)
909                 lwkt_reltoken(&lp->lwp_proc->p_token);
910         lwkt_rele(td);
911         crit_exit();
912 }
913
914 /*
915  * Make all processes sleeping on the specified identifier runnable.
916  * count may be zero or one only.
917  *
918  * The domain encodes the sleep/wakeup domain AND the first cpu to check
919  * (which is always the current cpu).  As we iterate across cpus
920  *
921  * This call may run without the MP lock held.  We can only manipulate thread
922  * state on the cpu owning the thread.  We CANNOT manipulate process state
923  * at all.
924  *
925  * _wakeup() can be passed to an IPI so we can't use (const volatile
926  * void *ident).
927  */
928 static void
929 _wakeup(void *ident, int domain)
930 {
931         struct tslpque *qp;
932         struct thread *td;
933         struct thread *ntd;
934         globaldata_t gd;
935 #ifdef SMP
936         cpumask_t mask;
937 #endif
938         int id;
939
940         crit_enter();
941         logtsleep2(wakeup_beg, ident);
942         gd = mycpu;
943         id = LOOKUP(ident);
944         qp = &gd->gd_tsleep_hash[id];
945 restart:
946         for (td = TAILQ_FIRST(qp); td != NULL; td = ntd) {
947                 ntd = TAILQ_NEXT(td, td_sleepq);
948                 if (td->td_wchan == ident && 
949                     td->td_wdomain == (domain & PDOMAIN_MASK)
950                 ) {
951                         KKASSERT(td->td_gd == gd);
952                         _tsleep_remove(td);
953                         if (td->td_flags & TDF_TSLEEP_DESCHEDULED) {
954                                 td->td_flags &= ~TDF_TSLEEP_DESCHEDULED;
955                                 lwkt_schedule(td);
956                                 if (domain & PWAKEUP_ONE)
957                                         goto done;
958                         }
959                         goto restart;
960                 }
961         }
962
963 #ifdef SMP
964         /*
965          * We finished checking the current cpu but there still may be
966          * more work to do.  Either wakeup_one was requested and no matching
967          * thread was found, or a normal wakeup was requested and we have
968          * to continue checking cpus.
969          *
970          * It should be noted that this scheme is actually less expensive then
971          * the old scheme when waking up multiple threads, since we send 
972          * only one IPI message per target candidate which may then schedule
973          * multiple threads.  Before we could have wound up sending an IPI
974          * message for each thread on the target cpu (!= current cpu) that
975          * needed to be woken up.
976          *
977          * NOTE: Wakeups occuring on remote cpus are asynchronous.  This
978          * should be ok since we are passing idents in the IPI rather then
979          * thread pointers.
980          */
981         if ((domain & PWAKEUP_MYCPU) == 0 &&
982             (mask = slpque_cpumasks[id] & gd->gd_other_cpus) != 0) {
983                 lwkt_send_ipiq2_mask(mask, _wakeup, ident,
984                                      domain | PWAKEUP_MYCPU);
985         }
986 #endif
987 done:
988         logtsleep1(wakeup_end);
989         crit_exit();
990 }
991
992 /*
993  * Wakeup all threads tsleep()ing on the specified ident, on all cpus
994  */
995 void
996 wakeup(const volatile void *ident)
997 {
998     _wakeup(__DEALL(ident), PWAKEUP_ENCODE(0, mycpu->gd_cpuid));
999 }
1000
1001 /*
1002  * Wakeup one thread tsleep()ing on the specified ident, on any cpu.
1003  */
1004 void
1005 wakeup_one(const volatile void *ident)
1006 {
1007     /* XXX potentially round-robin the first responding cpu */
1008     _wakeup(__DEALL(ident), PWAKEUP_ENCODE(0, mycpu->gd_cpuid) | PWAKEUP_ONE);
1009 }
1010
1011 /*
1012  * Wakeup threads tsleep()ing on the specified ident on the current cpu
1013  * only.
1014  */
1015 void
1016 wakeup_mycpu(const volatile void *ident)
1017 {
1018     _wakeup(__DEALL(ident), PWAKEUP_MYCPU);
1019 }
1020
1021 /*
1022  * Wakeup one thread tsleep()ing on the specified ident on the current cpu
1023  * only.
1024  */
1025 void
1026 wakeup_mycpu_one(const volatile void *ident)
1027 {
1028     /* XXX potentially round-robin the first responding cpu */
1029     _wakeup(__DEALL(ident), PWAKEUP_MYCPU|PWAKEUP_ONE);
1030 }
1031
1032 /*
1033  * Wakeup all thread tsleep()ing on the specified ident on the specified cpu
1034  * only.
1035  */
1036 void
1037 wakeup_oncpu(globaldata_t gd, const volatile void *ident)
1038 {
1039 #ifdef SMP
1040     if (gd == mycpu) {
1041         _wakeup(__DEALL(ident), PWAKEUP_MYCPU);
1042     } else {
1043         lwkt_send_ipiq2(gd, _wakeup, __DEALL(ident), PWAKEUP_MYCPU);
1044     }
1045 #else
1046     _wakeup(__DEALL(ident), PWAKEUP_MYCPU);
1047 #endif
1048 }
1049
1050 /*
1051  * Wakeup one thread tsleep()ing on the specified ident on the specified cpu
1052  * only.
1053  */
1054 void
1055 wakeup_oncpu_one(globaldata_t gd, const volatile void *ident)
1056 {
1057 #ifdef SMP
1058     if (gd == mycpu) {
1059         _wakeup(__DEALL(ident), PWAKEUP_MYCPU | PWAKEUP_ONE);
1060     } else {
1061         lwkt_send_ipiq2(gd, _wakeup, __DEALL(ident),
1062                         PWAKEUP_MYCPU | PWAKEUP_ONE);
1063     }
1064 #else
1065     _wakeup(__DEALL(ident), PWAKEUP_MYCPU | PWAKEUP_ONE);
1066 #endif
1067 }
1068
1069 /*
1070  * Wakeup all threads waiting on the specified ident that slept using
1071  * the specified domain, on all cpus.
1072  */
1073 void
1074 wakeup_domain(const volatile void *ident, int domain)
1075 {
1076     _wakeup(__DEALL(ident), PWAKEUP_ENCODE(domain, mycpu->gd_cpuid));
1077 }
1078
1079 /*
1080  * Wakeup one thread waiting on the specified ident that slept using
1081  * the specified  domain, on any cpu.
1082  */
1083 void
1084 wakeup_domain_one(const volatile void *ident, int domain)
1085 {
1086     /* XXX potentially round-robin the first responding cpu */
1087     _wakeup(__DEALL(ident),
1088             PWAKEUP_ENCODE(domain, mycpu->gd_cpuid) | PWAKEUP_ONE);
1089 }
1090
1091 /*
1092  * setrunnable()
1093  *
1094  * Make a process runnable.  lp->lwp_proc->p_token must be held on call.
1095  * This only has an effect if we are in SSLEEP.  We only break out of the
1096  * tsleep if LWP_BREAKTSLEEP is set, otherwise we just fix-up the state.
1097  *
1098  * NOTE: With p_token held we can only safely manipulate the process
1099  * structure and the lp's lwp_stat.
1100  */
1101 void
1102 setrunnable(struct lwp *lp)
1103 {
1104         ASSERT_LWKT_TOKEN_HELD(&lp->lwp_proc->p_token);
1105         crit_enter();
1106         if (lp->lwp_stat == LSSTOP)
1107                 lp->lwp_stat = LSSLEEP;
1108         if (lp->lwp_stat == LSSLEEP && (lp->lwp_flag & LWP_BREAKTSLEEP))
1109                 _tsleep_wakeup(lp->lwp_thread);
1110         crit_exit();
1111 }
1112
1113 /*
1114  * The process is stopped due to some condition, usually because p_stat is
1115  * set to SSTOP, but also possibly due to being traced.  
1116  *
1117  * NOTE!  If the caller sets SSTOP, the caller must also clear P_WAITED
1118  * because the parent may check the child's status before the child actually
1119  * gets to this routine.
1120  *
1121  * This routine is called with the current lwp only, typically just
1122  * before returning to userland.
1123  *
1124  * Setting LWP_BREAKTSLEEP before entering the tsleep will cause a passive
1125  * SIGCONT to break out of the tsleep.
1126  */
1127 void
1128 tstop(void)
1129 {
1130         struct lwp *lp = curthread->td_lwp;
1131         struct proc *p = lp->lwp_proc;
1132         struct proc *q;
1133
1134         crit_enter();
1135         /*
1136          * If LWP_WSTOP is set, we were sleeping
1137          * while our process was stopped.  At this point
1138          * we were already counted as stopped.
1139          */
1140         if ((lp->lwp_flag & LWP_WSTOP) == 0) {
1141                 /*
1142                  * If we're the last thread to stop, signal
1143                  * our parent.
1144                  */
1145                 p->p_nstopped++;
1146                 lp->lwp_flag |= LWP_WSTOP;
1147                 wakeup(&p->p_nstopped);
1148                 if (p->p_nstopped == p->p_nthreads) {
1149                         /*
1150                          * Token required to interlock kern_wait()
1151                          */
1152                         q = p->p_pptr;
1153                         PHOLD(q);
1154                         lwkt_gettoken(&q->p_token);
1155                         p->p_flag &= ~P_WAITED;
1156                         wakeup(p->p_pptr);
1157                         if ((q->p_sigacts->ps_flag & PS_NOCLDSTOP) == 0)
1158                                 ksignal(q, SIGCHLD);
1159                         lwkt_reltoken(&q->p_token);
1160                         PRELE(q);
1161                 }
1162         }
1163         while (p->p_stat == SSTOP) {
1164                 lp->lwp_flag |= LWP_BREAKTSLEEP;
1165                 lp->lwp_stat = LSSTOP;
1166                 tsleep(p, 0, "stop", 0);
1167         }
1168         p->p_nstopped--;
1169         lp->lwp_flag &= ~LWP_WSTOP;
1170         crit_exit();
1171 }
1172
1173 /*
1174  * Compute a tenex style load average of a quantity on
1175  * 1, 5 and 15 minute intervals.
1176  */
1177 static int loadav_count_runnable(struct lwp *p, void *data);
1178
1179 static void
1180 loadav(void *arg)
1181 {
1182         struct loadavg *avg;
1183         int i, nrun;
1184
1185         nrun = 0;
1186         alllwp_scan(loadav_count_runnable, &nrun);
1187         avg = &averunnable;
1188         for (i = 0; i < 3; i++) {
1189                 avg->ldavg[i] = (cexp[i] * avg->ldavg[i] +
1190                     nrun * FSCALE * (FSCALE - cexp[i])) >> FSHIFT;
1191         }
1192
1193         /*
1194          * Schedule the next update to occur after 5 seconds, but add a
1195          * random variation to avoid synchronisation with processes that
1196          * run at regular intervals.
1197          */
1198         callout_reset(&loadav_callout, hz * 4 + (int)(krandom() % (hz * 2 + 1)),
1199                       loadav, NULL);
1200 }
1201
1202 static int
1203 loadav_count_runnable(struct lwp *lp, void *data)
1204 {
1205         int *nrunp = data;
1206         thread_t td;
1207
1208         switch (lp->lwp_stat) {
1209         case LSRUN:
1210                 if ((td = lp->lwp_thread) == NULL)
1211                         break;
1212                 if (td->td_flags & TDF_BLOCKED)
1213                         break;
1214                 ++*nrunp;
1215                 break;
1216         default:
1217                 break;
1218         }
1219         return(0);
1220 }
1221
1222 /* ARGSUSED */
1223 static void
1224 sched_setup(void *dummy)
1225 {
1226         callout_init_mp(&loadav_callout);
1227         callout_init_mp(&schedcpu_callout);
1228
1229         /* Kick off timeout driven events by calling first time. */
1230         schedcpu(NULL);
1231         loadav(NULL);
1232 }
1233