sched.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:32k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/kernel/sched.c
  3.  *
  4.  *  Kernel scheduler and related syscalls
  5.  *
  6.  *  Copyright (C) 1991, 1992  Linus Torvalds
  7.  *
  8.  *  1996-12-23  Modified by Dave Grothe to fix bugs in semaphores and
  9.  *              make semaphores SMP safe
  10.  *  1998-11-19 Implemented schedule_timeout() and related stuff
  11.  * by Andrea Arcangeli
  12.  *  1998-12-28  Implemented better SMP scheduling by Ingo Molnar
  13.  */
  14. /*
  15.  * 'sched.c' is the main kernel file. It contains scheduling primitives
  16.  * (sleep_on, wakeup, schedule etc) as well as a number of simple system
  17.  * call functions (type getpid()), which just extract a field from
  18.  * current-task
  19.  */
  20. #include <linux/config.h>
  21. #include <linux/mm.h>
  22. #include <linux/init.h>
  23. #include <linux/smp_lock.h>
  24. #include <linux/nmi.h>
  25. #include <linux/interrupt.h>
  26. #include <linux/kernel_stat.h>
  27. #include <linux/completion.h>
  28. #include <linux/prefetch.h>
  29. #include <linux/compiler.h>
  30. #include <asm/uaccess.h>
  31. #include <asm/mmu_context.h>
  32. extern void timer_bh(void);
  33. extern void tqueue_bh(void);
  34. extern void immediate_bh(void);
  35. /*
  36.  * scheduler variables
  37.  */
  38. unsigned securebits = SECUREBITS_DEFAULT; /* systemwide security settings */
  39. extern void mem_use(void);
  40. /*
  41.  * Scheduling quanta.
  42.  *
  43.  * NOTE! The unix "nice" value influences how long a process
  44.  * gets. The nice value ranges from -20 to +19, where a -20
  45.  * is a "high-priority" task, and a "+10" is a low-priority
  46.  * task.
  47.  *
  48.  * We want the time-slice to be around 50ms or so, so this
  49.  * calculation depends on the value of HZ.
  50.  */
  51. #if HZ < 200
  52. #define TICK_SCALE(x) ((x) >> 2)
  53. #elif HZ < 400
  54. #define TICK_SCALE(x) ((x) >> 1)
  55. #elif HZ < 800
  56. #define TICK_SCALE(x) (x)
  57. #elif HZ < 1600
  58. #define TICK_SCALE(x) ((x) << 1)
  59. #else
  60. #define TICK_SCALE(x) ((x) << 2)
  61. #endif
  62. #define NICE_TO_TICKS(nice) (TICK_SCALE(20-(nice))+1)
  63. /*
  64.  * Init task must be ok at boot for the ix86 as we will check its signals
  65.  * via the SMP irq return path.
  66.  */
  67.  
  68. struct task_struct * init_tasks[NR_CPUS] = {&init_task, };
  69. /*
  70.  * The tasklist_lock protects the linked list of processes.
  71.  *
  72.  * The runqueue_lock locks the parts that actually access
  73.  * and change the run-queues, and have to be interrupt-safe.
  74.  *
  75.  * If both locks are to be concurrently held, the runqueue_lock
  76.  * nests inside the tasklist_lock.
  77.  *
  78.  * task->alloc_lock nests inside tasklist_lock.
  79.  */
  80. spinlock_t runqueue_lock __cacheline_aligned = SPIN_LOCK_UNLOCKED;  /* inner */
  81. rwlock_t tasklist_lock __cacheline_aligned = RW_LOCK_UNLOCKED; /* outer */
  82. static LIST_HEAD(runqueue_head);
  83. /*
  84.  * We align per-CPU scheduling data on cacheline boundaries,
  85.  * to prevent cacheline ping-pong.
  86.  */
  87. static union {
  88. struct schedule_data {
  89. struct task_struct * curr;
  90. cycles_t last_schedule;
  91. } schedule_data;
  92. char __pad [SMP_CACHE_BYTES];
  93. } aligned_data [NR_CPUS] __cacheline_aligned = { {{&init_task,0}}};
  94. #define cpu_curr(cpu) aligned_data[(cpu)].schedule_data.curr
  95. #define last_schedule(cpu) aligned_data[(cpu)].schedule_data.last_schedule
  96. struct kernel_stat kstat;
  97. extern struct task_struct *child_reaper;
  98. #ifdef CONFIG_SMP
  99. #define idle_task(cpu) (init_tasks[cpu_number_map(cpu)])
  100. #define can_schedule(p,cpu) 
  101. ((p)->cpus_runnable & (p)->cpus_allowed & (1 << cpu))
  102. #else
  103. #define idle_task(cpu) (&init_task)
  104. #define can_schedule(p,cpu) (1)
  105. #endif
  106. void scheduling_functions_start_here(void) { }
  107. /*
  108.  * This is the function that decides how desirable a process is..
  109.  * You can weigh different processes against each other depending
  110.  * on what CPU they've run on lately etc to try to handle cache
  111.  * and TLB miss penalties.
  112.  *
  113.  * Return values:
  114.  *  -1000: never select this
  115.  *      0: out of time, recalculate counters (but it might still be
  116.  * selected)
  117.  *    +ve: "goodness" value (the larger, the better)
  118.  *  +1000: realtime process, select this.
  119.  */
  120. static inline int goodness(struct task_struct * p, int this_cpu, struct mm_struct *this_mm)
  121. {
  122. int weight;
  123. /*
  124.  * select the current process after every other
  125.  * runnable process, but before the idle thread.
  126.  * Also, dont trigger a counter recalculation.
  127.  */
  128. weight = -1;
  129. if (p->policy & SCHED_YIELD)
  130. goto out;
  131. /*
  132.  * Non-RT process - normal case first.
  133.  */
  134. if (p->policy == SCHED_OTHER) {
  135. /*
  136.  * Give the process a first-approximation goodness value
  137.  * according to the number of clock-ticks it has left.
  138.  *
  139.  * Don't do any other calculations if the time slice is
  140.  * over..
  141.  */
  142. weight = p->counter;
  143. if (!weight)
  144. goto out;
  145. #ifdef CONFIG_SMP
  146. /* Give a largish advantage to the same processor...   */
  147. /* (this is equivalent to penalizing other processors) */
  148. if (p->processor == this_cpu)
  149. weight += PROC_CHANGE_PENALTY;
  150. #endif
  151. /* .. and a slight advantage to the current MM */
  152. if (p->mm == this_mm || !p->mm)
  153. weight += 1;
  154. weight += 20 - p->nice;
  155. goto out;
  156. }
  157. /*
  158.  * Realtime process, select the first one on the
  159.  * runqueue (taking priorities within processes
  160.  * into account).
  161.  */
  162. weight = 1000 + p->rt_priority;
  163. out:
  164. return weight;
  165. }
  166. /*
  167.  * the 'goodness value' of replacing a process on a given CPU.
  168.  * positive value means 'replace', zero or negative means 'dont'.
  169.  */
  170. static inline int preemption_goodness(struct task_struct * prev, struct task_struct * p, int cpu)
  171. {
  172. return goodness(p, cpu, prev->active_mm) - goodness(prev, cpu, prev->active_mm);
  173. }
  174. /*
  175.  * This is ugly, but reschedule_idle() is very timing-critical.
  176.  * We are called with the runqueue spinlock held and we must
  177.  * not claim the tasklist_lock.
  178.  */
  179. static FASTCALL(void reschedule_idle(struct task_struct * p));
  180. static void reschedule_idle(struct task_struct * p)
  181. {
  182. #ifdef CONFIG_SMP
  183. int this_cpu = smp_processor_id();
  184. struct task_struct *tsk, *target_tsk;
  185. int cpu, best_cpu, i, max_prio;
  186. cycles_t oldest_idle;
  187. /*
  188.  * shortcut if the woken up task's last CPU is
  189.  * idle now.
  190.  */
  191. best_cpu = p->processor;
  192. if (can_schedule(p, best_cpu)) {
  193. tsk = idle_task(best_cpu);
  194. if (cpu_curr(best_cpu) == tsk) {
  195. int need_resched;
  196. send_now_idle:
  197. /*
  198.  * If need_resched == -1 then we can skip sending
  199.  * the IPI altogether, tsk->need_resched is
  200.  * actively watched by the idle thread.
  201.  */
  202. need_resched = tsk->need_resched;
  203. tsk->need_resched = 1;
  204. if ((best_cpu != this_cpu) && !need_resched)
  205. smp_send_reschedule(best_cpu);
  206. return;
  207. }
  208. }
  209. /*
  210.  * We know that the preferred CPU has a cache-affine current
  211.  * process, lets try to find a new idle CPU for the woken-up
  212.  * process. Select the least recently active idle CPU. (that
  213.  * one will have the least active cache context.) Also find
  214.  * the executing process which has the least priority.
  215.  */
  216. oldest_idle = (cycles_t) -1;
  217. target_tsk = NULL;
  218. max_prio = 0;
  219. for (i = 0; i < smp_num_cpus; i++) {
  220. cpu = cpu_logical_map(i);
  221. if (!can_schedule(p, cpu))
  222. continue;
  223. tsk = cpu_curr(cpu);
  224. /*
  225.  * We use the first available idle CPU. This creates
  226.  * a priority list between idle CPUs, but this is not
  227.  * a problem.
  228.  */
  229. if (tsk == idle_task(cpu)) {
  230. #if defined(__i386__) && defined(CONFIG_SMP)
  231.                         /*
  232.  * Check if two siblings are idle in the same
  233.  * physical package. Use them if found.
  234.  */
  235. if (smp_num_siblings == 2) {
  236. if (cpu_curr(cpu_sibling_map[cpu]) == 
  237.             idle_task(cpu_sibling_map[cpu])) {
  238. oldest_idle = last_schedule(cpu);
  239. target_tsk = tsk;
  240. break;
  241. }
  242.                         }
  243. #endif
  244. if (last_schedule(cpu) < oldest_idle) {
  245. oldest_idle = last_schedule(cpu);
  246. target_tsk = tsk;
  247. }
  248. } else {
  249. if (oldest_idle == -1ULL) {
  250. int prio = preemption_goodness(tsk, p, cpu);
  251. if (prio > max_prio) {
  252. max_prio = prio;
  253. target_tsk = tsk;
  254. }
  255. }
  256. }
  257. }
  258. tsk = target_tsk;
  259. if (tsk) {
  260. if (oldest_idle != -1ULL) {
  261. best_cpu = tsk->processor;
  262. goto send_now_idle;
  263. }
  264. tsk->need_resched = 1;
  265. if (tsk->processor != this_cpu)
  266. smp_send_reschedule(tsk->processor);
  267. }
  268. return;
  269. #else /* UP */
  270. int this_cpu = smp_processor_id();
  271. struct task_struct *tsk;
  272. tsk = cpu_curr(this_cpu);
  273. if (preemption_goodness(tsk, p, this_cpu) > 0)
  274. tsk->need_resched = 1;
  275. #endif
  276. }
  277. /*
  278.  * Careful!
  279.  *
  280.  * This has to add the process to the _end_ of the 
  281.  * run-queue, not the beginning. The goodness value will
  282.  * determine whether this process will run next. This is
  283.  * important to get SCHED_FIFO and SCHED_RR right, where
  284.  * a process that is either pre-empted or its time slice
  285.  * has expired, should be moved to the tail of the run 
  286.  * queue for its priority - Bhavesh Davda
  287.  */
  288. static inline void add_to_runqueue(struct task_struct * p)
  289. {
  290. list_add_tail(&p->run_list, &runqueue_head);
  291. nr_running++;
  292. }
  293. static inline void move_last_runqueue(struct task_struct * p)
  294. {
  295. list_del(&p->run_list);
  296. list_add_tail(&p->run_list, &runqueue_head);
  297. }
  298. /*
  299.  * Wake up a process. Put it on the run-queue if it's not
  300.  * already there.  The "current" process is always on the
  301.  * run-queue (except when the actual re-schedule is in
  302.  * progress), and as such you're allowed to do the simpler
  303.  * "current->state = TASK_RUNNING" to mark yourself runnable
  304.  * without the overhead of this.
  305.  */
  306. static inline int try_to_wake_up(struct task_struct * p, int synchronous)
  307. {
  308. unsigned long flags;
  309. int success = 0;
  310. /*
  311.  * We want the common case fall through straight, thus the goto.
  312.  */
  313. spin_lock_irqsave(&runqueue_lock, flags);
  314. p->state = TASK_RUNNING;
  315. if (task_on_runqueue(p))
  316. goto out;
  317. add_to_runqueue(p);
  318. if (!synchronous || !(p->cpus_allowed & (1 << smp_processor_id())))
  319. reschedule_idle(p);
  320. success = 1;
  321. out:
  322. spin_unlock_irqrestore(&runqueue_lock, flags);
  323. return success;
  324. }
  325. inline int wake_up_process(struct task_struct * p)
  326. {
  327. return try_to_wake_up(p, 0);
  328. }
  329. static void process_timeout(unsigned long __data)
  330. {
  331. struct task_struct * p = (struct task_struct *) __data;
  332. wake_up_process(p);
  333. }
  334. /**
  335.  * schedule_timeout - sleep until timeout
  336.  * @timeout: timeout value in jiffies
  337.  *
  338.  * Make the current task sleep until @timeout jiffies have
  339.  * elapsed. The routine will return immediately unless
  340.  * the current task state has been set (see set_current_state()).
  341.  *
  342.  * You can set the task state as follows -
  343.  *
  344.  * %TASK_UNINTERRUPTIBLE - at least @timeout jiffies are guaranteed to
  345.  * pass before the routine returns. The routine will return 0
  346.  *
  347.  * %TASK_INTERRUPTIBLE - the routine may return early if a signal is
  348.  * delivered to the current task. In this case the remaining time
  349.  * in jiffies will be returned, or 0 if the timer expired in time
  350.  *
  351.  * The current task state is guaranteed to be TASK_RUNNING when this 
  352.  * routine returns.
  353.  *
  354.  * Specifying a @timeout value of %MAX_SCHEDULE_TIMEOUT will schedule
  355.  * the CPU away without a bound on the timeout. In this case the return
  356.  * value will be %MAX_SCHEDULE_TIMEOUT.
  357.  *
  358.  * In all cases the return value is guaranteed to be non-negative.
  359.  */
  360. signed long schedule_timeout(signed long timeout)
  361. {
  362. struct timer_list timer;
  363. unsigned long expire;
  364. switch (timeout)
  365. {
  366. case MAX_SCHEDULE_TIMEOUT:
  367. /*
  368.  * These two special cases are useful to be comfortable
  369.  * in the caller. Nothing more. We could take
  370.  * MAX_SCHEDULE_TIMEOUT from one of the negative value
  371.  * but I' d like to return a valid offset (>=0) to allow
  372.  * the caller to do everything it want with the retval.
  373.  */
  374. schedule();
  375. goto out;
  376. default:
  377. /*
  378.  * Another bit of PARANOID. Note that the retval will be
  379.  * 0 since no piece of kernel is supposed to do a check
  380.  * for a negative retval of schedule_timeout() (since it
  381.  * should never happens anyway). You just have the printk()
  382.  * that will tell you if something is gone wrong and where.
  383.  */
  384. if (timeout < 0)
  385. {
  386. printk(KERN_ERR "schedule_timeout: wrong timeout "
  387.        "value %lx from %pn", timeout,
  388.        __builtin_return_address(0));
  389. current->state = TASK_RUNNING;
  390. goto out;
  391. }
  392. }
  393. expire = timeout + jiffies;
  394. init_timer(&timer);
  395. timer.expires = expire;
  396. timer.data = (unsigned long) current;
  397. timer.function = process_timeout;
  398. add_timer(&timer);
  399. schedule();
  400. del_timer_sync(&timer);
  401. timeout = expire - jiffies;
  402.  out:
  403. return timeout < 0 ? 0 : timeout;
  404. }
  405. /*
  406.  * schedule_tail() is getting called from the fork return path. This
  407.  * cleans up all remaining scheduler things, without impacting the
  408.  * common case.
  409.  */
  410. static inline void __schedule_tail(struct task_struct *prev)
  411. {
  412. #ifdef CONFIG_SMP
  413. int policy;
  414. /*
  415.  * prev->policy can be written from here only before `prev'
  416.  * can be scheduled (before setting prev->cpus_runnable to ~0UL).
  417.  * Of course it must also be read before allowing prev
  418.  * to be rescheduled, but since the write depends on the read
  419.  * to complete, wmb() is enough. (the spin_lock() acquired
  420.  * before setting cpus_runnable is not enough because the spin_lock()
  421.  * common code semantics allows code outside the critical section
  422.  * to enter inside the critical section)
  423.  */
  424. policy = prev->policy;
  425. prev->policy = policy & ~SCHED_YIELD;
  426. wmb();
  427. /*
  428.  * fast path falls through. We have to clear cpus_runnable before
  429.  * checking prev->state to avoid a wakeup race. Protect against
  430.  * the task exiting early.
  431.  */
  432. task_lock(prev);
  433. task_release_cpu(prev);
  434. mb();
  435. if (prev->state == TASK_RUNNING)
  436. goto needs_resched;
  437. out_unlock:
  438. task_unlock(prev); /* Synchronise here with release_task() if prev is TASK_ZOMBIE */
  439. return;
  440. /*
  441.  * Slow path - we 'push' the previous process and
  442.  * reschedule_idle() will attempt to find a new
  443.  * processor for it. (but it might preempt the
  444.  * current process as well.) We must take the runqueue
  445.  * lock and re-check prev->state to be correct. It might
  446.  * still happen that this process has a preemption
  447.  * 'in progress' already - but this is not a problem and
  448.  * might happen in other circumstances as well.
  449.  */
  450. needs_resched:
  451. {
  452. unsigned long flags;
  453. /*
  454.  * Avoid taking the runqueue lock in cases where
  455.  * no preemption-check is necessery:
  456.  */
  457. if ((prev == idle_task(smp_processor_id())) ||
  458. (policy & SCHED_YIELD))
  459. goto out_unlock;
  460. spin_lock_irqsave(&runqueue_lock, flags);
  461. if ((prev->state == TASK_RUNNING) && !task_has_cpu(prev))
  462. reschedule_idle(prev);
  463. spin_unlock_irqrestore(&runqueue_lock, flags);
  464. goto out_unlock;
  465. }
  466. #else
  467. prev->policy &= ~SCHED_YIELD;
  468. #endif /* CONFIG_SMP */
  469. }
  470. asmlinkage void schedule_tail(struct task_struct *prev)
  471. {
  472. __schedule_tail(prev);
  473. }
  474. /*
  475.  *  'schedule()' is the scheduler function. It's a very simple and nice
  476.  * scheduler: it's not perfect, but certainly works for most things.
  477.  *
  478.  * The goto is "interesting".
  479.  *
  480.  *   NOTE!!  Task 0 is the 'idle' task, which gets called when no other
  481.  * tasks can run. It can not be killed, and it cannot sleep. The 'state'
  482.  * information in task[0] is never used.
  483.  */
  484. asmlinkage void schedule(void)
  485. {
  486. struct schedule_data * sched_data;
  487. struct task_struct *prev, *next, *p;
  488. struct list_head *tmp;
  489. int this_cpu, c;
  490. spin_lock_prefetch(&runqueue_lock);
  491. BUG_ON(!current->active_mm);
  492. need_resched_back:
  493. prev = current;
  494. this_cpu = prev->processor;
  495. if (unlikely(in_interrupt())) {
  496. printk("Scheduling in interruptn");
  497. BUG();
  498. }
  499. release_kernel_lock(prev, this_cpu);
  500. /*
  501.  * 'sched_data' is protected by the fact that we can run
  502.  * only one process per CPU.
  503.  */
  504. sched_data = & aligned_data[this_cpu].schedule_data;
  505. spin_lock_irq(&runqueue_lock);
  506. /* move an exhausted RR process to be last.. */
  507. if (unlikely(prev->policy == SCHED_RR))
  508. if (!prev->counter) {
  509. prev->counter = NICE_TO_TICKS(prev->nice);
  510. move_last_runqueue(prev);
  511. }
  512. switch (prev->state) {
  513. case TASK_INTERRUPTIBLE:
  514. if (signal_pending(prev)) {
  515. prev->state = TASK_RUNNING;
  516. break;
  517. }
  518. default:
  519. del_from_runqueue(prev);
  520. case TASK_RUNNING:;
  521. }
  522. prev->need_resched = 0;
  523. /*
  524.  * this is the scheduler proper:
  525.  */
  526. repeat_schedule:
  527. /*
  528.  * Default process to select..
  529.  */
  530. next = idle_task(this_cpu);
  531. c = -1000;
  532. list_for_each(tmp, &runqueue_head) {
  533. p = list_entry(tmp, struct task_struct, run_list);
  534. if (can_schedule(p, this_cpu)) {
  535. int weight = goodness(p, this_cpu, prev->active_mm);
  536. if (weight > c)
  537. c = weight, next = p;
  538. }
  539. }
  540. /* Do we need to re-calculate counters? */
  541. if (unlikely(!c)) {
  542. struct task_struct *p;
  543. spin_unlock_irq(&runqueue_lock);
  544. read_lock(&tasklist_lock);
  545. for_each_task(p)
  546. p->counter = (p->counter >> 1) + NICE_TO_TICKS(p->nice);
  547. read_unlock(&tasklist_lock);
  548. spin_lock_irq(&runqueue_lock);
  549. goto repeat_schedule;
  550. }
  551. /*
  552.  * from this point on nothing can prevent us from
  553.  * switching to the next task, save this fact in
  554.  * sched_data.
  555.  */
  556. sched_data->curr = next;
  557. task_set_cpu(next, this_cpu);
  558. spin_unlock_irq(&runqueue_lock);
  559. if (unlikely(prev == next)) {
  560. /* We won't go through the normal tail, so do this by hand */
  561. prev->policy &= ~SCHED_YIELD;
  562. goto same_process;
  563. }
  564. #ifdef CONFIG_SMP
  565.   /*
  566.    * maintain the per-process 'last schedule' value.
  567.    * (this has to be recalculated even if we reschedule to
  568.    * the same process) Currently this is only used on SMP,
  569.  * and it's approximate, so we do not have to maintain
  570.  * it while holding the runqueue spinlock.
  571.    */
  572.   sched_data->last_schedule = get_cycles();
  573. /*
  574.  * We drop the scheduler lock early (it's a global spinlock),
  575.  * thus we have to lock the previous process from getting
  576.  * rescheduled during switch_to().
  577.  */
  578. #endif /* CONFIG_SMP */
  579. kstat.context_swtch++;
  580. /*
  581.  * there are 3 processes which are affected by a context switch:
  582.  *
  583.  * prev == .... ==> (last => next)
  584.  *
  585.  * It's the 'much more previous' 'prev' that is on next's stack,
  586.  * but prev is set to (the just run) 'last' process by switch_to().
  587.  * This might sound slightly confusing but makes tons of sense.
  588.  */
  589. prepare_to_switch();
  590. {
  591. struct mm_struct *mm = next->mm;
  592. struct mm_struct *oldmm = prev->active_mm;
  593. if (!mm) {
  594. BUG_ON(next->active_mm);
  595. next->active_mm = oldmm;
  596. atomic_inc(&oldmm->mm_count);
  597. enter_lazy_tlb(oldmm, next, this_cpu);
  598. } else {
  599. BUG_ON(next->active_mm != mm);
  600. switch_mm(oldmm, mm, next, this_cpu);
  601. }
  602. if (!prev->mm) {
  603. prev->active_mm = NULL;
  604. mmdrop(oldmm);
  605. }
  606. }
  607. /*
  608.  * This just switches the register state and the
  609.  * stack.
  610.  */
  611. switch_to(prev, next, prev);
  612. __schedule_tail(prev);
  613. same_process:
  614. reacquire_kernel_lock(current);
  615. if (current->need_resched)
  616. goto need_resched_back;
  617. return;
  618. }
  619. /*
  620.  * The core wakeup function.  Non-exclusive wakeups (nr_exclusive == 0) just wake everything
  621.  * up.  If it's an exclusive wakeup (nr_exclusive == small +ve number) then we wake all the
  622.  * non-exclusive tasks and one exclusive task.
  623.  *
  624.  * There are circumstances in which we can try to wake a task which has already
  625.  * started to run but is not in state TASK_RUNNING.  try_to_wake_up() returns zero
  626.  * in this (rare) case, and we handle it by contonuing to scan the queue.
  627.  */
  628. static inline void __wake_up_common (wait_queue_head_t *q, unsigned int mode,
  629.        int nr_exclusive, const int sync)
  630. {
  631. struct list_head *tmp;
  632. struct task_struct *p;
  633. CHECK_MAGIC_WQHEAD(q);
  634. WQ_CHECK_LIST_HEAD(&q->task_list);
  635. list_for_each(tmp,&q->task_list) {
  636. unsigned int state;
  637.                 wait_queue_t *curr = list_entry(tmp, wait_queue_t, task_list);
  638. CHECK_MAGIC(curr->__magic);
  639. p = curr->task;
  640. state = p->state;
  641. if (state & mode) {
  642. WQ_NOTE_WAKER(curr);
  643. if (try_to_wake_up(p, sync) && (curr->flags&WQ_FLAG_EXCLUSIVE) && !--nr_exclusive)
  644. break;
  645. }
  646. }
  647. }
  648. void __wake_up(wait_queue_head_t *q, unsigned int mode, int nr)
  649. {
  650. if (q) {
  651. unsigned long flags;
  652. wq_read_lock_irqsave(&q->lock, flags);
  653. __wake_up_common(q, mode, nr, 0);
  654. wq_read_unlock_irqrestore(&q->lock, flags);
  655. }
  656. }
  657. void __wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr)
  658. {
  659. if (q) {
  660. unsigned long flags;
  661. wq_read_lock_irqsave(&q->lock, flags);
  662. __wake_up_common(q, mode, nr, 1);
  663. wq_read_unlock_irqrestore(&q->lock, flags);
  664. }
  665. }
  666. void complete(struct completion *x)
  667. {
  668. unsigned long flags;
  669. spin_lock_irqsave(&x->wait.lock, flags);
  670. x->done++;
  671. __wake_up_common(&x->wait, TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, 1, 0);
  672. spin_unlock_irqrestore(&x->wait.lock, flags);
  673. }
  674. void wait_for_completion(struct completion *x)
  675. {
  676. spin_lock_irq(&x->wait.lock);
  677. if (!x->done) {
  678. DECLARE_WAITQUEUE(wait, current);
  679. wait.flags |= WQ_FLAG_EXCLUSIVE;
  680. __add_wait_queue_tail(&x->wait, &wait);
  681. do {
  682. __set_current_state(TASK_UNINTERRUPTIBLE);
  683. spin_unlock_irq(&x->wait.lock);
  684. schedule();
  685. spin_lock_irq(&x->wait.lock);
  686. } while (!x->done);
  687. __remove_wait_queue(&x->wait, &wait);
  688. }
  689. x->done--;
  690. spin_unlock_irq(&x->wait.lock);
  691. }
  692. #define SLEEP_ON_VAR
  693. unsigned long flags;
  694. wait_queue_t wait;
  695. init_waitqueue_entry(&wait, current);
  696. #define SLEEP_ON_HEAD
  697. wq_write_lock_irqsave(&q->lock,flags);
  698. __add_wait_queue(q, &wait);
  699. wq_write_unlock(&q->lock);
  700. #define SLEEP_ON_TAIL
  701. wq_write_lock_irq(&q->lock);
  702. __remove_wait_queue(q, &wait);
  703. wq_write_unlock_irqrestore(&q->lock,flags);
  704. void interruptible_sleep_on(wait_queue_head_t *q)
  705. {
  706. SLEEP_ON_VAR
  707. current->state = TASK_INTERRUPTIBLE;
  708. SLEEP_ON_HEAD
  709. schedule();
  710. SLEEP_ON_TAIL
  711. }
  712. long interruptible_sleep_on_timeout(wait_queue_head_t *q, long timeout)
  713. {
  714. SLEEP_ON_VAR
  715. current->state = TASK_INTERRUPTIBLE;
  716. SLEEP_ON_HEAD
  717. timeout = schedule_timeout(timeout);
  718. SLEEP_ON_TAIL
  719. return timeout;
  720. }
  721. void sleep_on(wait_queue_head_t *q)
  722. {
  723. SLEEP_ON_VAR
  724. current->state = TASK_UNINTERRUPTIBLE;
  725. SLEEP_ON_HEAD
  726. schedule();
  727. SLEEP_ON_TAIL
  728. }
  729. long sleep_on_timeout(wait_queue_head_t *q, long timeout)
  730. {
  731. SLEEP_ON_VAR
  732. current->state = TASK_UNINTERRUPTIBLE;
  733. SLEEP_ON_HEAD
  734. timeout = schedule_timeout(timeout);
  735. SLEEP_ON_TAIL
  736. return timeout;
  737. }
  738. void scheduling_functions_end_here(void) { }
  739. #ifndef __alpha__
  740. /*
  741.  * This has been replaced by sys_setpriority.  Maybe it should be
  742.  * moved into the arch dependent tree for those ports that require
  743.  * it for backward compatibility?
  744.  */
  745. asmlinkage long sys_nice(int increment)
  746. {
  747. long newprio;
  748. /*
  749.  * Setpriority might change our priority at the same moment.
  750.  * We don't have to worry. Conceptually one call occurs first
  751.  * and we have a single winner.
  752.  */
  753. if (increment < 0) {
  754. if (!capable(CAP_SYS_NICE))
  755. return -EPERM;
  756. if (increment < -40)
  757. increment = -40;
  758. }
  759. if (increment > 40)
  760. increment = 40;
  761. newprio = current->nice + increment;
  762. if (newprio < -20)
  763. newprio = -20;
  764. if (newprio > 19)
  765. newprio = 19;
  766. current->nice = newprio;
  767. return 0;
  768. }
  769. #endif
  770. static inline struct task_struct *find_process_by_pid(pid_t pid)
  771. {
  772. struct task_struct *tsk = current;
  773. if (pid)
  774. tsk = find_task_by_pid(pid);
  775. return tsk;
  776. }
  777. static int setscheduler(pid_t pid, int policy, 
  778. struct sched_param *param)
  779. {
  780. struct sched_param lp;
  781. struct task_struct *p;
  782. int retval;
  783. retval = -EINVAL;
  784. if (!param || pid < 0)
  785. goto out_nounlock;
  786. retval = -EFAULT;
  787. if (copy_from_user(&lp, param, sizeof(struct sched_param)))
  788. goto out_nounlock;
  789. /*
  790.  * We play safe to avoid deadlocks.
  791.  */
  792. read_lock_irq(&tasklist_lock);
  793. spin_lock(&runqueue_lock);
  794. p = find_process_by_pid(pid);
  795. retval = -ESRCH;
  796. if (!p)
  797. goto out_unlock;
  798. if (policy < 0)
  799. policy = p->policy;
  800. else {
  801. retval = -EINVAL;
  802. if (policy != SCHED_FIFO && policy != SCHED_RR &&
  803. policy != SCHED_OTHER)
  804. goto out_unlock;
  805. }
  806. /*
  807.  * Valid priorities for SCHED_FIFO and SCHED_RR are 1..99, valid
  808.  * priority for SCHED_OTHER is 0.
  809.  */
  810. retval = -EINVAL;
  811. if (lp.sched_priority < 0 || lp.sched_priority > 99)
  812. goto out_unlock;
  813. if ((policy == SCHED_OTHER) != (lp.sched_priority == 0))
  814. goto out_unlock;
  815. retval = -EPERM;
  816. if ((policy == SCHED_FIFO || policy == SCHED_RR) && 
  817.     !capable(CAP_SYS_NICE))
  818. goto out_unlock;
  819. if ((current->euid != p->euid) && (current->euid != p->uid) &&
  820.     !capable(CAP_SYS_NICE))
  821. goto out_unlock;
  822. retval = 0;
  823. p->policy = policy;
  824. p->rt_priority = lp.sched_priority;
  825. current->need_resched = 1;
  826. out_unlock:
  827. spin_unlock(&runqueue_lock);
  828. read_unlock_irq(&tasklist_lock);
  829. out_nounlock:
  830. return retval;
  831. }
  832. asmlinkage long sys_sched_setscheduler(pid_t pid, int policy, 
  833.       struct sched_param *param)
  834. {
  835. return setscheduler(pid, policy, param);
  836. }
  837. asmlinkage long sys_sched_setparam(pid_t pid, struct sched_param *param)
  838. {
  839. return setscheduler(pid, -1, param);
  840. }
  841. asmlinkage long sys_sched_getscheduler(pid_t pid)
  842. {
  843. struct task_struct *p;
  844. int retval;
  845. retval = -EINVAL;
  846. if (pid < 0)
  847. goto out_nounlock;
  848. retval = -ESRCH;
  849. read_lock(&tasklist_lock);
  850. p = find_process_by_pid(pid);
  851. if (p)
  852. retval = p->policy & ~SCHED_YIELD;
  853. read_unlock(&tasklist_lock);
  854. out_nounlock:
  855. return retval;
  856. }
  857. asmlinkage long sys_sched_getparam(pid_t pid, struct sched_param *param)
  858. {
  859. struct task_struct *p;
  860. struct sched_param lp;
  861. int retval;
  862. retval = -EINVAL;
  863. if (!param || pid < 0)
  864. goto out_nounlock;
  865. read_lock(&tasklist_lock);
  866. p = find_process_by_pid(pid);
  867. retval = -ESRCH;
  868. if (!p)
  869. goto out_unlock;
  870. lp.sched_priority = p->rt_priority;
  871. read_unlock(&tasklist_lock);
  872. /*
  873.  * This one might sleep, we cannot do it with a spinlock held ...
  874.  */
  875. retval = copy_to_user(param, &lp, sizeof(*param)) ? -EFAULT : 0;
  876. out_nounlock:
  877. return retval;
  878. out_unlock:
  879. read_unlock(&tasklist_lock);
  880. return retval;
  881. }
  882. asmlinkage long sys_sched_yield(void)
  883. {
  884. /*
  885.  * Trick. sched_yield() first counts the number of truly 
  886.  * 'pending' runnable processes, then returns if it's
  887.  * only the current processes. (This test does not have
  888.  * to be atomic.) In threaded applications this optimization
  889.  * gets triggered quite often.
  890.  */
  891. int nr_pending = nr_running;
  892. #if CONFIG_SMP
  893. int i;
  894. // Subtract non-idle processes running on other CPUs.
  895. for (i = 0; i < smp_num_cpus; i++) {
  896. int cpu = cpu_logical_map(i);
  897. if (aligned_data[cpu].schedule_data.curr != idle_task(cpu))
  898. nr_pending--;
  899. }
  900. #else
  901. // on UP this process is on the runqueue as well
  902. nr_pending--;
  903. #endif
  904. if (nr_pending) {
  905. /*
  906.  * This process can only be rescheduled by us,
  907.  * so this is safe without any locking.
  908.  */
  909. if (current->policy == SCHED_OTHER)
  910. current->policy |= SCHED_YIELD;
  911. current->need_resched = 1;
  912. spin_lock_irq(&runqueue_lock);
  913. move_last_runqueue(current);
  914. spin_unlock_irq(&runqueue_lock);
  915. }
  916. return 0;
  917. }
  918. /**
  919.  * yield - yield the current processor to other threads.
  920.  *
  921.  * this is a shortcut for kernel-space yielding - it marks the
  922.  * thread runnable and calls sys_sched_yield().
  923.  */
  924. void yield(void)
  925. {
  926. set_current_state(TASK_RUNNING);
  927. sys_sched_yield();
  928. schedule();
  929. }
  930. void __cond_resched(void)
  931. {
  932. set_current_state(TASK_RUNNING);
  933. schedule();
  934. }
  935. asmlinkage long sys_sched_get_priority_max(int policy)
  936. {
  937. int ret = -EINVAL;
  938. switch (policy) {
  939. case SCHED_FIFO:
  940. case SCHED_RR:
  941. ret = 99;
  942. break;
  943. case SCHED_OTHER:
  944. ret = 0;
  945. break;
  946. }
  947. return ret;
  948. }
  949. asmlinkage long sys_sched_get_priority_min(int policy)
  950. {
  951. int ret = -EINVAL;
  952. switch (policy) {
  953. case SCHED_FIFO:
  954. case SCHED_RR:
  955. ret = 1;
  956. break;
  957. case SCHED_OTHER:
  958. ret = 0;
  959. }
  960. return ret;
  961. }
  962. asmlinkage long sys_sched_rr_get_interval(pid_t pid, struct timespec *interval)
  963. {
  964. struct timespec t;
  965. struct task_struct *p;
  966. int retval = -EINVAL;
  967. if (pid < 0)
  968. goto out_nounlock;
  969. retval = -ESRCH;
  970. read_lock(&tasklist_lock);
  971. p = find_process_by_pid(pid);
  972. if (p)
  973. jiffies_to_timespec(p->policy & SCHED_FIFO ? 0 : NICE_TO_TICKS(p->nice),
  974.     &t);
  975. read_unlock(&tasklist_lock);
  976. if (p)
  977. retval = copy_to_user(interval, &t, sizeof(t)) ? -EFAULT : 0;
  978. out_nounlock:
  979. return retval;
  980. }
  981. static void show_task(struct task_struct * p)
  982. {
  983. unsigned long free = 0;
  984. int state;
  985. static const char * stat_nam[] = { "R", "S", "D", "Z", "T", "W" };
  986. printk("%-13.13s ", p->comm);
  987. state = p->state ? ffz(~p->state) + 1 : 0;
  988. if (((unsigned) state) < sizeof(stat_nam)/sizeof(char *))
  989. printk(stat_nam[state]);
  990. else
  991. printk(" ");
  992. #if (BITS_PER_LONG == 32)
  993. if (p == current)
  994. printk(" current  ");
  995. else
  996. printk(" %08lX ", thread_saved_pc(&p->thread));
  997. #else
  998. if (p == current)
  999. printk("   current task   ");
  1000. else
  1001. printk(" %016lx ", thread_saved_pc(&p->thread));
  1002. #endif
  1003. {
  1004. unsigned long * n = (unsigned long *) (p+1);
  1005. while (!*n)
  1006. n++;
  1007. free = (unsigned long) n - (unsigned long)(p+1);
  1008. }
  1009. printk("%5lu %5d %6d ", free, p->pid, p->p_pptr->pid);
  1010. if (p->p_cptr)
  1011. printk("%5d ", p->p_cptr->pid);
  1012. else
  1013. printk("      ");
  1014. if (p->p_ysptr)
  1015. printk("%7d", p->p_ysptr->pid);
  1016. else
  1017. printk("       ");
  1018. if (p->p_osptr)
  1019. printk(" %5d", p->p_osptr->pid);
  1020. else
  1021. printk("      ");
  1022. if (!p->mm)
  1023. printk(" (L-TLB)n");
  1024. else
  1025. printk(" (NOTLB)n");
  1026. {
  1027. extern void show_trace_task(struct task_struct *tsk);
  1028. show_trace_task(p);
  1029. }
  1030. }
  1031. char * render_sigset_t(sigset_t *set, char *buffer)
  1032. {
  1033. int i = _NSIG, x;
  1034. do {
  1035. i -= 4, x = 0;
  1036. if (sigismember(set, i+1)) x |= 1;
  1037. if (sigismember(set, i+2)) x |= 2;
  1038. if (sigismember(set, i+3)) x |= 4;
  1039. if (sigismember(set, i+4)) x |= 8;
  1040. *buffer++ = (x < 10 ? '0' : 'a' - 10) + x;
  1041. } while (i >= 4);
  1042. *buffer = 0;
  1043. return buffer;
  1044. }
  1045. void show_state(void)
  1046. {
  1047. struct task_struct *p;
  1048. #if (BITS_PER_LONG == 32)
  1049. printk("n"
  1050.        "                         free                        siblingn");
  1051. printk("  task             PC    stack   pid father child younger oldern");
  1052. #else
  1053. printk("n"
  1054.        "                                 free                        siblingn");
  1055. printk("  task                 PC        stack   pid father child younger oldern");
  1056. #endif
  1057. read_lock(&tasklist_lock);
  1058. for_each_task(p) {
  1059. /*
  1060.  * reset the NMI-timeout, listing all files on a slow
  1061.  * console might take alot of time:
  1062.  */
  1063. touch_nmi_watchdog();
  1064. show_task(p);
  1065. }
  1066. read_unlock(&tasklist_lock);
  1067. }
  1068. /**
  1069.  * reparent_to_init() - Reparent the calling kernel thread to the init task.
  1070.  *
  1071.  * If a kernel thread is launched as a result of a system call, or if
  1072.  * it ever exits, it should generally reparent itself to init so that
  1073.  * it is correctly cleaned up on exit.
  1074.  *
  1075.  * The various task state such as scheduling policy and priority may have
  1076.  * been inherited fro a user process, so we reset them to sane values here.
  1077.  *
  1078.  * NOTE that reparent_to_init() gives the caller full capabilities.
  1079.  */
  1080. void reparent_to_init(void)
  1081. {
  1082. struct task_struct *this_task = current;
  1083. write_lock_irq(&tasklist_lock);
  1084. /* Reparent to init */
  1085. REMOVE_LINKS(this_task);
  1086. this_task->p_pptr = child_reaper;
  1087. this_task->p_opptr = child_reaper;
  1088. SET_LINKS(this_task);
  1089. /* Set the exit signal to SIGCHLD so we signal init on exit */
  1090. this_task->exit_signal = SIGCHLD;
  1091. /* We also take the runqueue_lock while altering task fields
  1092.  * which affect scheduling decisions */
  1093. spin_lock(&runqueue_lock);
  1094. this_task->ptrace = 0;
  1095. this_task->nice = DEF_NICE;
  1096. this_task->policy = SCHED_OTHER;
  1097. /* cpus_allowed? */
  1098. /* rt_priority? */
  1099. /* signals? */
  1100. this_task->cap_effective = CAP_INIT_EFF_SET;
  1101. this_task->cap_inheritable = CAP_INIT_INH_SET;
  1102. this_task->cap_permitted = CAP_FULL_SET;
  1103. this_task->keep_capabilities = 0;
  1104. memcpy(this_task->rlim, init_task.rlim, sizeof(*(this_task->rlim)));
  1105. this_task->user = INIT_USER;
  1106. spin_unlock(&runqueue_lock);
  1107. write_unlock_irq(&tasklist_lock);
  1108. }
  1109. /*
  1110.  * Put all the gunge required to become a kernel thread without
  1111.  * attached user resources in one place where it belongs.
  1112.  */
  1113. void daemonize(void)
  1114. {
  1115. struct fs_struct *fs;
  1116. /*
  1117.  * If we were started as result of loading a module, close all of the
  1118.  * user space pages.  We don't need them, and if we didn't close them
  1119.  * they would be locked into memory.
  1120.  */
  1121. exit_mm(current);
  1122. current->session = 1;
  1123. current->pgrp = 1;
  1124. current->tty = NULL;
  1125. /* Become as one with the init task */
  1126. exit_fs(current); /* current->fs->count--; */
  1127. fs = init_task.fs;
  1128. current->fs = fs;
  1129. atomic_inc(&fs->count);
  1130.   exit_files(current);
  1131. current->files = init_task.files;
  1132. atomic_inc(&current->files->count);
  1133. }
  1134. extern unsigned long wait_init_idle;
  1135. void __init init_idle(void)
  1136. {
  1137. struct schedule_data * sched_data;
  1138. sched_data = &aligned_data[smp_processor_id()].schedule_data;
  1139. if (current != &init_task && task_on_runqueue(current)) {
  1140. printk("UGH! (%d:%d) was on the runqueue, removing.n",
  1141. smp_processor_id(), current->pid);
  1142. del_from_runqueue(current);
  1143. }
  1144. sched_data->curr = current;
  1145. sched_data->last_schedule = get_cycles();
  1146. clear_bit(current->processor, &wait_init_idle);
  1147. }
  1148. extern void init_timervecs (void);
  1149. void __init sched_init(void)
  1150. {
  1151. /*
  1152.  * We have to do a little magic to get the first
  1153.  * process right in SMP mode.
  1154.  */
  1155. int cpu = smp_processor_id();
  1156. int nr;
  1157. init_task.processor = cpu;
  1158. for(nr = 0; nr < PIDHASH_SZ; nr++)
  1159. pidhash[nr] = NULL;
  1160. init_timervecs();
  1161. init_bh(TIMER_BH, timer_bh);
  1162. init_bh(TQUEUE_BH, tqueue_bh);
  1163. init_bh(IMMEDIATE_BH, immediate_bh);
  1164. /*
  1165.  * The boot idle thread does lazy MMU switching as well:
  1166.  */
  1167. atomic_inc(&init_mm.mm_count);
  1168. enter_lazy_tlb(&init_mm, current, cpu);
  1169. }