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