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