10910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/* libs/cutils/iosched_policy.c
30910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project**
40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** Copyright 2007, The Android Open Source Project
50910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project**
60910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License");
70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** you may not use this file except in compliance with the License.
80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** You may obtain a copy of the License at
90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project**
100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project**     http://www.apache.org/licenses/LICENSE-2.0
110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project**
120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** Unless required by applicable law or agreed to in writing, software
130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS,
140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** See the License for the specific language governing permissions and
160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** limitations under the License.
170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project*/
180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include <stdio.h>
200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include <stdlib.h>
210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include <unistd.h>
220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include <string.h>
230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include <errno.h>
240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include <fcntl.h>
250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef HAVE_SCHED_H
270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include <cutils/iosched_policy.h>
290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectextern int ioprio_set(int which, int who, int ioprio);
310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectenum {
330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    WHO_PROCESS = 1,
340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    WHO_PGRP,
350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    WHO_USER,
360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define CLASS_SHIFT 13
390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define IOPRIO_NORM 4
400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectint android_set_ioprio(int pid, IoSchedClass clazz, int ioprio) {
420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef HAVE_ANDROID_OS
430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (ioprio_set(WHO_PROCESS, pid, ioprio | (clazz << CLASS_SHIFT))) {
440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        return -1;
450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return 0;
480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectint android_get_ioprio(int pid, IoSchedClass *clazz, int *ioprio) {
510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef HAVE_ANDROID_OS
520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    int rc;
530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if ((rc = ioprio_get(WHO_PROCESS, pid)) < 0) {
550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        return -1;
560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    *clazz = (rc >> CLASS_SHIFT);
590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    *ioprio = (rc & 0xff);
600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#else
610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    *clazz = IoSchedClass_NONE;
620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    *ioprio = 0;
630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return 0;
650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif /* HAVE_SCHED_H */
680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project