diff options
author | San Mehat <san@google.com> | 2010-02-25 14:02:55 -0800 |
---|---|---|
committer | San Mehat <san@google.com> | 2010-02-25 14:02:55 -0800 |
commit | 10d469bff9031e857c7a290dae7d6ccf7b3a18f8 (patch) | |
tree | cfd47c56e88088785967417773a2380a81b9fb38 /libcutils/iosched_policy.c | |
parent | d969faa161310d0a3792766320daa3200b84bd74 (diff) | |
download | system_core-10d469bff9031e857c7a290dae7d6ccf7b3a18f8.zip system_core-10d469bff9031e857c7a290dae7d6ccf7b3a18f8.tar.gz system_core-10d469bff9031e857c7a290dae7d6ccf7b3a18f8.tar.bz2 |
system: Add support for getting/setting i/o priorities and include a userspace tool
Signed-off-by: San Mehat <san@google.com>
Diffstat (limited to 'libcutils/iosched_policy.c')
-rw-r--r-- | libcutils/iosched_policy.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/libcutils/iosched_policy.c b/libcutils/iosched_policy.c new file mode 100644 index 0000000..4004a2a --- /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 */ |