VirtualBox

Changeset 36239 in vbox for trunk/src/VBox/Runtime


Ignore:
Timestamp:
Mar 9, 2011 5:43:15 PM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
70462
Message:

IPRT: set Linux R0 thread priority, compilation warning

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/r0drv/linux/thread2-r0drv-linux.c

    r36233 r36239  
    4848}
    4949
     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
    5065int rtThreadNativeSetPriority(PRTTHREADINT pThread, RTTHREADTYPE enmType)
    5166{
    52     int Priority = 0;
     67    int    sched_class = SCHED_NORMAL;
     68    struct sched_param param = { .sched_priority = MAX_PRIO-1 };
    5369    switch (enmType)
    5470    {
    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        }
    62102        default:
    63103            AssertMsgFailed(("enmType=%d\n", enmType));
    64104            return VERR_INVALID_PARAMETER;
    65105    }
     106    sched_setscheduler(current, sched_class, &param);
     107
    66108    return VINF_SUCCESS;
    67109}
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette