13bca60611702f21738b1d45892bcf33847c4877eMark Salyzyn/* 2af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes** Copyright 2007, The Android Open Source Project 310d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** 410d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** Licensed under the Apache License, Version 2.0 (the "License"); 510d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** you may not use this file except in compliance with the License. 610d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** You may obtain a copy of the License at 710d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** 810d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** http://www.apache.org/licenses/LICENSE-2.0 910d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** 1010d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** Unless required by applicable law or agreed to in writing, software 1110d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** distributed under the License is distributed on an "AS IS" BASIS, 1210d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1310d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** See the License for the specific language governing permissions and 1410d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** limitations under the License. 1510d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat*/ 1610d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat 1712717169a51335f4b20b7c78a63b9ab66a81a366Mark Salyzyn#include <errno.h> 1812717169a51335f4b20b7c78a63b9ab66a81a366Mark Salyzyn#include <fcntl.h> 1910d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat#include <stdio.h> 2010d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat#include <stdlib.h> 2110d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat#include <string.h> 2212717169a51335f4b20b7c78a63b9ab66a81a366Mark Salyzyn#include <unistd.h> 2310d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat 2410d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat#include <cutils/iosched_policy.h> 2510d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat 269b828adfad09200f3f1bd3602187fe3dd5335774Elliott Hughes#if defined(__ANDROID__) 27167c0ed6da9d6c67d01d1e4635d8773a606419c0Dan Albert#include <linux/ioprio.h> 285e541bf47d28bae4a04ad124c3a82b0f33f85d17Dan Albert#include <sys/syscall.h> 2912717169a51335f4b20b7c78a63b9ab66a81a366Mark Salyzyn#define __android_unused 3012717169a51335f4b20b7c78a63b9ab66a81a366Mark Salyzyn#else 3112717169a51335f4b20b7c78a63b9ab66a81a366Mark Salyzyn#define __android_unused __attribute__((__unused__)) 323bca60611702f21738b1d45892bcf33847c4877eMark Salyzyn#endif 3310d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat 3412717169a51335f4b20b7c78a63b9ab66a81a366Mark Salyzynint android_set_ioprio(int pid __android_unused, IoSchedClass clazz __android_unused, int ioprio __android_unused) { 359b828adfad09200f3f1bd3602187fe3dd5335774Elliott Hughes#if defined(__ANDROID__) 36167c0ed6da9d6c67d01d1e4635d8773a606419c0Dan Albert if (syscall(SYS_ioprio_set, IOPRIO_WHO_PROCESS, pid, ioprio | (clazz << IOPRIO_CLASS_SHIFT))) { 3710d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat return -1; 3810d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat } 39e2fe261d1ac775e9e6501bf976cd4fef4c1cf5ddSan Mehat#endif 4010d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat return 0; 4110d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat} 4210d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat 4312717169a51335f4b20b7c78a63b9ab66a81a366Mark Salyzynint android_get_ioprio(int pid __android_unused, IoSchedClass *clazz, int *ioprio) { 449b828adfad09200f3f1bd3602187fe3dd5335774Elliott Hughes#if defined(__ANDROID__) 4510d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat int rc; 4610d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat 47167c0ed6da9d6c67d01d1e4635d8773a606419c0Dan Albert if ((rc = syscall(SYS_ioprio_get, IOPRIO_WHO_PROCESS, pid)) < 0) { 4810d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat return -1; 4910d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat } 5010d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat 51167c0ed6da9d6c67d01d1e4635d8773a606419c0Dan Albert *clazz = (rc >> IOPRIO_CLASS_SHIFT); 5210d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat *ioprio = (rc & 0xff); 53e2fe261d1ac775e9e6501bf976cd4fef4c1cf5ddSan Mehat#else 54e2fe261d1ac775e9e6501bf976cd4fef4c1cf5ddSan Mehat *clazz = IoSchedClass_NONE; 55e2fe261d1ac775e9e6501bf976cd4fef4c1cf5ddSan Mehat *ioprio = 0; 56e2fe261d1ac775e9e6501bf976cd4fef4c1cf5ddSan Mehat#endif 5710d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat return 0; 5810d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat} 59