Home | History | Annotate | Download | only in libcutils
      1 
      2 /* libs/cutils/iosched_policy.c
      3 **
      4 ** Copyright 2007, The Android Open Source Project
      5 **
      6 ** Licensed under the Apache License, Version 2.0 (the "License");
      7 ** you may not use this file except in compliance with the License.
      8 ** You may obtain a copy of the License at
      9 **
     10 **     http://www.apache.org/licenses/LICENSE-2.0
     11 **
     12 ** Unless required by applicable law or agreed to in writing, software
     13 ** distributed under the License is distributed on an "AS IS" BASIS,
     14 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     15 ** See the License for the specific language governing permissions and
     16 ** limitations under the License.
     17 */
     18 
     19 #include <stdio.h>
     20 #include <stdlib.h>
     21 #include <unistd.h>
     22 #include <string.h>
     23 #include <errno.h>
     24 #include <fcntl.h>
     25 
     26 #ifdef HAVE_SCHED_H
     27 
     28 #include <cutils/iosched_policy.h>
     29 
     30 extern int ioprio_set(int which, int who, int ioprio);
     31 
     32 enum {
     33     WHO_PROCESS = 1,
     34     WHO_PGRP,
     35     WHO_USER,
     36 };
     37 
     38 #define CLASS_SHIFT 13
     39 #define IOPRIO_NORM 4
     40 
     41 int android_set_ioprio(int pid, IoSchedClass clazz, int ioprio) {
     42 #ifdef HAVE_ANDROID_OS
     43     if (ioprio_set(WHO_PROCESS, pid, ioprio | (clazz << CLASS_SHIFT))) {
     44         return -1;
     45     }
     46 #endif
     47     return 0;
     48 }
     49 
     50 int android_get_ioprio(int pid, IoSchedClass *clazz, int *ioprio) {
     51 #ifdef HAVE_ANDROID_OS
     52     int rc;
     53 
     54     if ((rc = ioprio_get(WHO_PROCESS, pid)) < 0) {
     55         return -1;
     56     }
     57 
     58     *clazz = (rc >> CLASS_SHIFT);
     59     *ioprio = (rc & 0xff);
     60 #else
     61     *clazz = IoSchedClass_NONE;
     62     *ioprio = 0;
     63 #endif
     64     return 0;
     65 }
     66 
     67 #endif /* HAVE_SCHED_H */
     68