sched_ule.c (113386) | sched_ule.c (113387) |
---|---|
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 * | 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 $ | 26 * $FreeBSD: head/sys/kern/sched_ule.c 113387 2003-04-12 07:28:36Z 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")); | 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 KASSERT(ke->ke_runq == NULL, 1066 ("sched_add: KSE %p is still assigned to a run queue", ke)); |
|
1065 1066 kg = ke->ke_ksegrp; 1067 | 1067 1068 kg = ke->ke_ksegrp; 1069 |
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(); | 1070 switch (PRI_BASE(kg->kg_pri_class)) { 1071 case PRI_ITHD: 1072 case PRI_REALTIME: 1073 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); | 1074 ke->ke_runq = kseq->ksq_curr; 1075 ke->ke_slice = SCHED_SLICE_MAX; 1076 break; 1077 case PRI_TIMESHARE: 1078 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 } | 1079 if (SCHED_CURR(kg, ke)) 1080 ke->ke_runq = kseq->ksq_curr; 1081 else 1082 ke->ke_runq = kseq->ksq_next; |
1089 break; 1090 case PRI_IDLE: 1091 kseq = KSEQ_CPU(ke->ke_cpu); | 1083 break; 1084 case PRI_IDLE: 1085 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); | 1086 /* 1087 * This is for priority prop. 1088 */ 1089 if (ke->ke_thread->td_priority < PRI_MAX_TIMESHARE) 1090 ke->ke_runq = kseq->ksq_curr; 1091 else 1092 ke->ke_runq = &kseq->ksq_idle; 1093 ke->ke_slice = SCHED_SLICE_MIN; 1094 break; 1095 default: 1096 panic("Unknown pri class.\n"); 1097 break; 1098 } 1099 1100 ke->ke_ksegrp->kg_runq_kses++; 1101 ke->ke_state = KES_ONRUNQ; 1102 1103 runq_add(ke->ke_runq, ke); |
1104 kseq_add(kseq, ke); |
|
1113} 1114 1115void 1116sched_rem(struct kse *ke) 1117{ 1118 struct kseq *kseq; 1119 1120 mtx_assert(&sched_lock, MA_OWNED); | 1105} 1106 1107void 1108sched_rem(struct kse *ke) 1109{ 1110 struct kseq *kseq; 1111 1112 mtx_assert(&sched_lock, MA_OWNED); |
1121 /* KASSERT((ke->ke_state == KES_ONRUNQ), ("KSE not on run queue")); */ 1122 panic("WTF\n"); | 1113 KASSERT((ke->ke_state == KES_ONRUNQ), ("KSE not on run queue")); |
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 --- | 1114 1115 ke->ke_state = KES_THREAD; 1116 ke->ke_ksegrp->kg_runq_kses--; 1117 kseq = KSEQ_CPU(ke->ke_cpu); 1118 runq_remove(ke->ke_runq, ke); 1119 kseq_rem(kseq, ke); 1120} 1121 --- 47 unchanged lines hidden --- |