[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]

FreeBSD/Linux Kernel Cross Reference
sys/kern/kern_idle.c

Version: -  FREEBSD  -  FREEBSD7  -  FREEBSD70  -  FREEBSD6  -  FREEBSD63  -  FREEBSD62  -  FREEBSD61  -  FREEBSD60  -  FREEBSD5  -  FREEBSD55  -  FREEBSD54  -  FREEBSD53  -  FREEBSD52  -  FREEBSD51  -  FREEBSD50  -  FREEBSD4  -  FREEBSD3  -  linux-2.6  -  linux-2.4.22  -  MK83  -  MK84  -  PLAN9  -  DFBSD  -  NETBSD  -  NETBSD4  -  NETBSD3  -  NETBSD20  -  OPENBSD  -  xnu-517  -  xnu-792  -  xnu-792.6.70  -  xnu-1228  -  OPENSOLARIS  -  minix-3-1-1  -  TRUSTEDBSD-SEBSD  -  TRUSTEDBSD-SEDARWIN  -  TRUSTEDBSD-SEDARWIN7 
Ident_Mode: -  plain  -  excerpts  -  bigexcerpts 

  1 /*-
  2  * Copyright (C) 2000-2004 The FreeBSD Project. All rights reserved.
  3  *
  4  * Redistribution and use in source and binary forms, with or without
  5  * modification, are permitted provided that the following conditions
  6  * are met:
  7  * 1. Redistributions of source code must retain the above copyright
  8  *    notice, this list of conditions and the following disclaimer.
  9  * 2. Redistributions in binary form must reproduce the above copyright
 10  *    notice, this list of conditions and the following disclaimer in the
 11  *    documentation and/or other materials provided with the distribution.
 12  *
 13  * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 14  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 16  * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
 17  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 18  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 19  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 20  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 21  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 22  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 23  * SUCH DAMAGE.
 24  */
 25 
 26 #include <sys/cdefs.h>
 27 __FBSDID("$FreeBSD: src/sys/kern/kern_idle.c,v 1.54 2008/03/16 10:58:05 rwatson Exp $");
 28 
 29 #include <sys/param.h>
 30 #include <sys/systm.h>
 31 #include <sys/kernel.h>
 32 #include <sys/kthread.h>
 33 #include <sys/lock.h>
 34 #include <sys/mutex.h>
 35 #include <sys/proc.h>
 36 #include <sys/resourcevar.h>
 37 #include <sys/sched.h>
 38 #include <sys/unistd.h>
 39 #ifdef SMP
 40 #include <sys/smp.h>
 41 #endif
 42 
 43 static void idle_setup(void *dummy);
 44 SYSINIT(idle_setup, SI_SUB_SCHED_IDLE, SI_ORDER_FIRST, idle_setup, NULL);
 45 
 46 /*
 47  * Set up per-cpu idle process contexts.  The AP's shouldn't be running or
 48  * accessing their idle processes at this point, so don't bother with
 49  * locking.
 50  */
 51 static void
 52 idle_setup(void *dummy)
 53 {
 54 #ifdef SMP
 55         struct pcpu *pc;
 56 #endif
 57         struct proc *p;
 58         struct thread *td;
 59         int error;
 60 
 61         p = NULL; /* start with no idle process */
 62 #ifdef SMP
 63         SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
 64 #endif
 65 #ifdef SMP
 66                 error = kproc_kthread_add(sched_idletd, NULL, &p, &td,
 67                     RFSTOPPED | RFHIGHPID, 0, "idle", "idle: cpu%d", pc->pc_cpuid);
 68                 pc->pc_idlethread = td;
 69 #else
 70                 error = kproc_kthread_add(sched_idletd, NULL, &p, &td,
 71                     RFSTOPPED | RFHIGHPID, 0, "idle", "idle");
 72                 PCPU_SET(idlethread, td);
 73 #endif
 74                 if (error)
 75                         panic("idle_setup: kproc_create error %d\n", error);
 76 
 77                 p->p_flag |= P_NOLOAD;
 78                 thread_lock(td);
 79                 TD_SET_CAN_RUN(td);
 80                 td->td_flags |= TDF_IDLETD;
 81                 sched_class(td, PRI_IDLE);
 82                 sched_prio(td, PRI_MAX_IDLE);
 83                 thread_unlock(td);
 84 #ifdef SMP
 85         }
 86 #endif
 87 }
 88 

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.