• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
android_set_ioprio(int pid,IoSchedClass clazz,int ioprio)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 
android_get_ioprio(int pid,IoSchedClass * clazz,int * ioprio)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