Deleted Added
sdiff udiff text old ( 113386 ) new ( 113387 )
full compact
1/*-
2 * Copyright (c) 2002-2003, Jeffrey Roberson <jeff@freebsd.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 *
26 * $FreeBSD: head/sys/kern/sched_ule.c 113386 2003-04-12 07:00:16Z jeff $
27 */
28
29#include <sys/param.h>
30#include <sys/systm.h>
31#include <sys/kernel.h>
32#include <sys/ktr.h>
33#include <sys/lock.h>
34#include <sys/mutex.h>

--- 1022 unchanged lines hidden (view full) ---

1057 KASSERT((ke->ke_thread != NULL), ("sched_add: No thread on KSE"));
1058 KASSERT((ke->ke_thread->td_kse != NULL),
1059 ("sched_add: No KSE on thread"));
1060 KASSERT(ke->ke_state != KES_ONRUNQ,
1061 ("sched_add: kse %p (%s) already in run queue", ke,
1062 ke->ke_proc->p_comm));
1063 KASSERT(ke->ke_proc->p_sflag & PS_INMEM,
1064 ("sched_add: process swapped out"));
1065
1066 kg = ke->ke_ksegrp;
1067
1068 if (ke->ke_runq)
1069 Debugger("hrm?");
1070
1071 switch (PRI_BASE(kg->kg_pri_class)) {
1072 case PRI_ITHD:
1073 case PRI_REALTIME:
1074 kseq = KSEQ_SELF();
1075 if (ke->ke_runq == NULL)
1076 kseq_add(kseq, ke);
1077 ke->ke_runq = kseq->ksq_curr;
1078 ke->ke_slice = SCHED_SLICE_MAX;
1079 break;
1080 case PRI_TIMESHARE:
1081 kseq = KSEQ_CPU(ke->ke_cpu);
1082 if (ke->ke_runq == NULL) {
1083 if (SCHED_CURR(kg, ke))
1084 ke->ke_runq = kseq->ksq_curr;
1085 else
1086 ke->ke_runq = kseq->ksq_next;
1087 kseq_add(kseq, ke);
1088 }
1089 break;
1090 case PRI_IDLE:
1091 kseq = KSEQ_CPU(ke->ke_cpu);
1092
1093 if (ke->ke_runq == NULL)
1094 kseq_add(kseq, ke);
1095 /*
1096 * This is for priority prop.
1097 */
1098 if (ke->ke_thread->td_priority < PRI_MAX_TIMESHARE)
1099 ke->ke_runq = kseq->ksq_curr;
1100 else
1101 ke->ke_runq = &kseq->ksq_idle;
1102 ke->ke_slice = SCHED_SLICE_MIN;
1103 break;
1104 default:
1105 panic("Unknown pri class.\n");
1106 break;
1107 }
1108
1109 ke->ke_ksegrp->kg_runq_kses++;
1110 ke->ke_state = KES_ONRUNQ;
1111
1112 runq_add(ke->ke_runq, ke);
1113}
1114
1115void
1116sched_rem(struct kse *ke)
1117{
1118 struct kseq *kseq;
1119
1120 mtx_assert(&sched_lock, MA_OWNED);
1121 /* KASSERT((ke->ke_state == KES_ONRUNQ), ("KSE not on run queue")); */
1122 panic("WTF\n");
1123
1124 ke->ke_state = KES_THREAD;
1125 ke->ke_ksegrp->kg_runq_kses--;
1126 kseq = KSEQ_CPU(ke->ke_cpu);
1127 runq_remove(ke->ke_runq, ke);
1128 kseq_rem(kseq, ke);
1129}
1130

--- 47 unchanged lines hidden ---