Lines 54-104
Link Here
|
54 |
|
54 |
|
55 |
DECLHIDDEN(int) rtThreadNativeSetPriority(PRTTHREADINT pThread, RTTHREADTYPE enmType) |
55 |
DECLHIDDEN(int) rtThreadNativeSetPriority(PRTTHREADINT pThread, RTTHREADTYPE enmType) |
56 |
{ |
56 |
{ |
57 |
#if RTLNX_VER_MIN(2,6,11) |
57 |
int iSchedClass = SCHED_FIFO; |
58 |
/* See comment near MAX_RT_PRIO in linux/sched.h for details on |
58 |
int rc = VINF_SUCCESS; |
59 |
sched_priority. */ |
59 |
struct sched_param Param = { 0 }; |
60 |
int iSchedClass = SCHED_NORMAL; |
60 |
|
61 |
struct sched_param Param = { .sched_priority = MAX_PRIO - 1 }; |
61 |
RT_NOREF_PV(pThread); |
|
|
62 |
#if RTLNX_VER_MIN(5,9,0) |
63 |
RT_NOREF_PV(iSchedClass); |
64 |
RT_NOREF_PV(Param); |
65 |
#endif |
62 |
switch (enmType) |
66 |
switch (enmType) |
63 |
{ |
67 |
{ |
64 |
case RTTHREADTYPE_INFREQUENT_POLLER: |
|
|
65 |
Param.sched_priority = MAX_RT_PRIO + 5; |
66 |
break; |
67 |
|
68 |
case RTTHREADTYPE_EMULATION: |
69 |
Param.sched_priority = MAX_RT_PRIO + 4; |
70 |
break; |
71 |
|
72 |
case RTTHREADTYPE_DEFAULT: |
73 |
Param.sched_priority = MAX_RT_PRIO + 3; |
74 |
break; |
75 |
|
76 |
case RTTHREADTYPE_MSG_PUMP: |
77 |
Param.sched_priority = MAX_RT_PRIO + 2; |
78 |
break; |
79 |
|
80 |
case RTTHREADTYPE_IO: |
68 |
case RTTHREADTYPE_IO: |
81 |
iSchedClass = SCHED_FIFO; |
69 |
#if RTLNX_VER_MAX(5,9,0) |
|
|
70 |
/* Set max. priority to preempt all other threads on this CPU. */ |
82 |
Param.sched_priority = MAX_RT_PRIO - 1; |
71 |
Param.sched_priority = MAX_RT_PRIO - 1; |
|
|
72 |
#else |
73 |
/* Effectively changes prio to 50 */ |
74 |
sched_set_fifo(current); |
75 |
#endif |
83 |
break; |
76 |
break; |
84 |
|
|
|
85 |
case RTTHREADTYPE_TIMER: |
77 |
case RTTHREADTYPE_TIMER: |
86 |
iSchedClass = SCHED_FIFO; |
78 |
#if RTLNX_VER_MAX(5,9,0) |
87 |
Param.sched_priority = 1; /* not 0 just in case */ |
79 |
Param.sched_priority = 1; /* not 0 just in case */ |
|
|
80 |
#else |
81 |
/* Just one above SCHED_NORMAL class */ |
82 |
sched_set_fifo_low(current); |
83 |
#endif |
88 |
break; |
84 |
break; |
89 |
|
|
|
90 |
default: |
85 |
default: |
91 |
AssertMsgFailed(("enmType=%d\n", enmType)); |
86 |
/* pretend success instead of VERR_NOT_SUPPORTED */ |
92 |
return VERR_INVALID_PARAMETER; |
87 |
return rc; |
|
|
88 |
} |
89 |
#if RTLNX_VER_MAX(5,9,0) |
90 |
if ((sched_setscheduler(current, iSchedClass, &Param)) != 0) { |
91 |
rc = VERR_GENERAL_FAILURE; |
93 |
} |
92 |
} |
94 |
|
|
|
95 |
sched_setscheduler(current, iSchedClass, &Param); |
96 |
#else |
97 |
RT_NOREF_PV(enmType); |
98 |
#endif |
93 |
#endif |
99 |
RT_NOREF_PV(pThread); |
94 |
return rc; |
100 |
|
|
|
101 |
return VINF_SUCCESS; |
102 |
} |
95 |
} |
103 |
|
96 |
|
104 |
|
97 |
|