]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/linux/ioprio.h
cfq-iosched: make io priorities inherit CPU scheduling class as well as nice
[linux-2.6-omap-h63xx.git] / include / linux / ioprio.h
index 8e2042b9d471024635bb412b5ac1a1b0fe075108..f98a656b17e5b4b732e57e0e70e4eb5ec53bce84 100644 (file)
@@ -2,6 +2,7 @@
 #define IOPRIO_H
 
 #include <linux/sched.h>
+#include <linux/iocontext.h>
 
 /*
  * Gives us 8 prio classes with 13-bits of data for each class
@@ -45,10 +46,20 @@ enum {
  * the cpu scheduler nice value to an io priority
  */
 #define IOPRIO_NORM    (4)
-static inline int task_ioprio(struct task_struct *task)
+static inline int task_ioprio(struct io_context *ioc)
 {
-       WARN_ON(!ioprio_valid(task->ioprio));
-       return IOPRIO_PRIO_DATA(task->ioprio);
+       if (ioprio_valid(ioc->ioprio))
+               return IOPRIO_PRIO_DATA(ioc->ioprio);
+
+       return IOPRIO_NORM;
+}
+
+static inline int task_ioprio_class(struct io_context *ioc)
+{
+       if (ioprio_valid(ioc->ioprio))
+               return IOPRIO_PRIO_CLASS(ioc->ioprio);
+
+       return IOPRIO_CLASS_BE;
 }
 
 static inline int task_nice_ioprio(struct task_struct *task)
@@ -56,6 +67,20 @@ static inline int task_nice_ioprio(struct task_struct *task)
        return (task_nice(task) + 20) / 5;
 }
 
+/*
+ * This is for the case where the task hasn't asked for a specific IO class.
+ * Check for idle and rt task process, and return appropriate IO class.
+ */
+static inline int task_nice_ioclass(struct task_struct *task)
+{
+       if (task->policy == SCHED_IDLE)
+               return IOPRIO_CLASS_IDLE;
+       else if (task->policy == SCHED_FIFO || task->policy == SCHED_RR)
+               return IOPRIO_CLASS_RT;
+       else
+               return IOPRIO_CLASS_BE;
+}
+
 /*
  * For inheritance, return the highest of the two given priorities
  */