Changeset 36239 in vbox for trunk/src/VBox/Runtime
- Timestamp:
- Mar 9, 2011 5:43:15 PM (14 years ago)
- svn:sync-xref-src-repo-rev:
- 70462
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/r0drv/linux/thread2-r0drv-linux.c
r36233 r36239 48 48 } 49 49 50 /* 51 * Following is verbatim comment from Linux's sched.h. 52 * 53 * Priority of a process goes from 0..MAX_PRIO-1, valid RT 54 * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH 55 * tasks are in the range MAX_RT_PRIO..MAX_PRIO-1. Priority 56 * values are inverted: lower p->prio value means higher priority. 57 * 58 * The MAX_USER_RT_PRIO value allows the actual maximum 59 * RT priority to be separate from the value exported to 60 * user-space. This allows kernel threads to set their 61 * priority to a value higher than any user task. Note: 62 * MAX_RT_PRIO must not be smaller than MAX_USER_RT_PRIO. 63 */ 64 50 65 int rtThreadNativeSetPriority(PRTTHREADINT pThread, RTTHREADTYPE enmType) 51 66 { 52 int Priority = 0; 67 int sched_class = SCHED_NORMAL; 68 struct sched_param param = { .sched_priority = MAX_PRIO-1 }; 53 69 switch (enmType) 54 70 { 55 case RTTHREADTYPE_INFREQUENT_POLLER: Priority = 9; break; 56 case RTTHREADTYPE_EMULATION: Priority = 7; break; 57 case RTTHREADTYPE_DEFAULT: Priority = 8; break; 58 case RTTHREADTYPE_MSG_PUMP: Priority = 9; break; 59 case RTTHREADTYPE_IO: Priority = 10; break; 60 case RTTHREADTYPE_TIMER: Priority = 11; break; 61 71 case RTTHREADTYPE_INFREQUENT_POLLER: 72 { 73 param.sched_priority = MAX_RT_PRIO + 2; 74 break; 75 } 76 case RTTHREADTYPE_EMULATION: 77 { 78 param.sched_priority = MAX_RT_PRIO + 3; 79 break; 80 } 81 case RTTHREADTYPE_DEFAULT: 82 { 83 param.sched_priority = MAX_RT_PRIO + 4; 84 break; 85 } 86 case RTTHREADTYPE_MSG_PUMP: 87 { 88 param.sched_priority = MAX_RT_PRIO + 5; 89 break; 90 } 91 case RTTHREADTYPE_IO: 92 { 93 sched_class = SCHED_FIFO; 94 param.sched_priority = MAX_RT_PRIO - 1; 95 break; 96 } 97 case RTTHREADTYPE_TIMER: 98 { 99 sched_class = SCHED_FIFO; 100 param.sched_priority = 1; /* not 0 just in case */ 101 } 62 102 default: 63 103 AssertMsgFailed(("enmType=%d\n", enmType)); 64 104 return VERR_INVALID_PARAMETER; 65 105 } 106 sched_setscheduler(current, sched_class, ¶m); 107 66 108 return VINF_SUCCESS; 67 109 }
Note:
See TracChangeset
for help on using the changeset viewer.