110d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat
210d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat/* libs/cutils/iosched_policy.c
310d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat**
410d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** Copyright 2007, The Android Open Source Project
510d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat**
610d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** Licensed under the Apache License, Version 2.0 (the "License");
710d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** you may not use this file except in compliance with the License.
810d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** You may obtain a copy of the License at
910d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat**
1010d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat**     http://www.apache.org/licenses/LICENSE-2.0
1110d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat**
1210d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** Unless required by applicable law or agreed to in writing, software
1310d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** distributed under the License is distributed on an "AS IS" BASIS,
1410d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1510d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** See the License for the specific language governing permissions and
1610d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** limitations under the License.
1710d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat*/
1810d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat
1910d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat#include <stdio.h>
2010d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat#include <stdlib.h>
2110d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat#include <unistd.h>
2210d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat#include <string.h>
2310d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat#include <errno.h>
2410d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat#include <fcntl.h>
2510d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat
2610d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat#ifdef HAVE_SCHED_H
2710d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat
2810d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat#include <cutils/iosched_policy.h>
2910d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat
3010d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehatextern int ioprio_set(int which, int who, int ioprio);
3110d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat
3210d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehatenum {
3310d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat    WHO_PROCESS = 1,
3410d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat    WHO_PGRP,
3510d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat    WHO_USER,
3610d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat};
3710d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat
3810d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat#define CLASS_SHIFT 13
3910d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat#define IOPRIO_NORM 4
4010d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat
4110d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehatint android_set_ioprio(int pid, IoSchedClass clazz, int ioprio) {
42e2fe261d1ac775e9e6501bf976cd4fef4c1cf5ddSan Mehat#ifdef HAVE_ANDROID_OS
4310d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat    if (ioprio_set(WHO_PROCESS, pid, ioprio | (clazz << CLASS_SHIFT))) {
4410d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat        return -1;
4510d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat    }
46e2fe261d1ac775e9e6501bf976cd4fef4c1cf5ddSan Mehat#endif
4710d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat    return 0;
4810d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat}
4910d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat
5010d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehatint android_get_ioprio(int pid, IoSchedClass *clazz, int *ioprio) {
51e2fe261d1ac775e9e6501bf976cd4fef4c1cf5ddSan Mehat#ifdef HAVE_ANDROID_OS
5210d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat    int rc;
5310d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat
5410d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat    if ((rc = ioprio_get(WHO_PROCESS, pid)) < 0) {
5510d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat        return -1;
5610d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat    }
5710d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat
5810d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat    *clazz = (rc >> CLASS_SHIFT);
5910d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat    *ioprio = (rc & 0xff);
60e2fe261d1ac775e9e6501bf976cd4fef4c1cf5ddSan Mehat#else
61e2fe261d1ac775e9e6501bf976cd4fef4c1cf5ddSan Mehat    *clazz = IoSchedClass_NONE;
62e2fe261d1ac775e9e6501bf976cd4fef4c1cf5ddSan Mehat    *ioprio = 0;
63e2fe261d1ac775e9e6501bf976cd4fef4c1cf5ddSan Mehat#endif
6410d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat    return 0;
6510d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat}
6610d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat
6710d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat#endif /* HAVE_SCHED_H */
68