summaryrefslogtreecommitdiffstats
path: root/libcutils/iosched_policy.c
diff options
context:
space:
mode:
authorSan Mehat <san@google.com>2010-02-25 14:02:55 -0800
committerSan Mehat <san@google.com>2010-02-25 14:02:55 -0800
commit10d469bff9031e857c7a290dae7d6ccf7b3a18f8 (patch)
treecfd47c56e88088785967417773a2380a81b9fb38 /libcutils/iosched_policy.c
parentd969faa161310d0a3792766320daa3200b84bd74 (diff)
downloadsystem_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.c61
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 */