diff options
Diffstat (limited to 'libcutils')
| -rw-r--r-- | libcutils/Android.mk | 3 | ||||
| -rw-r--r-- | libcutils/iosched_policy.c | 61 |
2 files changed, 63 insertions, 1 deletions
diff --git a/libcutils/Android.mk b/libcutils/Android.mk index 93933e2c..4c45cc92 100644 --- a/libcutils/Android.mk +++ b/libcutils/Android.mk @@ -38,7 +38,8 @@ commonSources := \ process_name.c \ properties.c \ threads.c \ - sched_policy.c + sched_policy.c \ + iosched_policy.c commonHostSources := \ ashmem-host.c diff --git a/libcutils/iosched_policy.c b/libcutils/iosched_policy.c new file mode 100644 index 00000000..4004a2af --- /dev/null +++ b/libcutils/iosched_policy.c @@ -0,0 +1,61 @@ + +/* libs/cutils/iosched_policy.c +** +** Copyright 2007, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <errno.h> +#include <fcntl.h> +#include <linux/unistd.h> + +#ifdef HAVE_SCHED_H + +#include <cutils/iosched_policy.h> + +extern int ioprio_set(int which, int who, int ioprio); + +enum { + WHO_PROCESS = 1, + WHO_PGRP, + WHO_USER, +}; + +#define CLASS_SHIFT 13 +#define IOPRIO_NORM 4 + +int android_set_ioprio(int pid, IoSchedClass clazz, int ioprio) { + if (ioprio_set(WHO_PROCESS, pid, ioprio | (clazz << CLASS_SHIFT))) { + return -1; + } + return 0; +} + +int android_get_ioprio(int pid, IoSchedClass *clazz, int *ioprio) { + int rc; + + if ((rc = ioprio_get(WHO_PROCESS, pid)) < 0) { + return -1; + } + + *clazz = (rc >> CLASS_SHIFT); + *ioprio = (rc & 0xff); + return 0; +} + +#endif /* HAVE_SCHED_H */ |
