summaryrefslogtreecommitdiffstats
path: root/meta-moblin/packages/sreadahead/sreadahead-0.02/set_to_idle.patch
blob: b48659048ab5b86aa59c021e8d8786816145d3d3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
diff -Naurp sreadahead-0.02/readahead.c sreadahead-0.02-nice/readahead.c
--- sreadahead-0.02/readahead.c	2008-11-06 00:57:17.000000000 -0500
+++ sreadahead-0.02-nice/readahead.c	2008-11-06 02:28:29.000000000 -0500
@@ -26,7 +26,18 @@
 #include <errno.h>
 
 #include "readahead.h"
+#include <sys/syscall.h>
 
+# if defined(__i386__)
+#  define __NR_ioprio_set	289
+# elif defined(__x86_64__)
+#  define __NR_ioprio_set	251
+# else
+#  error "Unsupported arch"
+# endif
+
+#define IOPRIO_WHO_PROCESS	1
+#define IOPRIO_CLASS_SHIFT	13
 #define MAXR 1024
 static struct readahead files[MAXR];
 static unsigned int total_files = 0;
@@ -68,7 +79,15 @@ void *one_thread(void *ptr)
 
 int main(int argc, char **argv)
 {
-	FILE *file = fopen("/etc/readahead.packed", "r");
+	int iopriority = 7; /* hard code for idle */
+	int iopriority_class = 3; /* 3 stands for idle */
+	int pid = 0;
+	FILE *file;
+
+	if (syscall(__NR_ioprio_set, IOPRIO_WHO_PROCESS, pid, iopriority | iopriority_class << IOPRIO_CLASS_SHIFT) == -1)
+		perror("Can not set priority to idle class");
+
+	file = fopen("/etc/readahead.packed", "r");
 	if (!file) {
 		perror("Couldnt open /etc/readahead.packed");
 		return -errno;