/* * Check that a priority value has a valid class.
*/ staticinlinebool ioprio_valid(unsignedshort ioprio)
{ unsignedshortclass = IOPRIO_PRIO_CLASS(ioprio);
returnclass > IOPRIO_CLASS_NONE && class <= IOPRIO_CLASS_IDLE;
}
/* * if process has set io priority explicitly, use that. if not, convert * the cpu scheduler nice value to an io priority
*/ staticinlineint 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.
*/ staticinlineint task_nice_ioclass(struct task_struct *task)
{ if (task->policy == SCHED_IDLE) return IOPRIO_CLASS_IDLE; elseif (rt_or_dl_task_policy(task)) return IOPRIO_CLASS_RT; else return IOPRIO_CLASS_BE;
}
#ifdef CONFIG_BLOCK /* * If the task has set an I/O priority, use that. Otherwise, return * the default I/O priority. * * Expected to be called for current task or with task_lock() held to keep * io_context stable.
*/ staticinlineint __get_task_ioprio(struct task_struct *p)
{ struct io_context *ioc = p->io_context; int prio;
if (!ioc) return IOPRIO_PRIO_VALUE(task_nice_ioclass(p),
task_nice_ioprio(p));
if (p != current)
lockdep_assert_held(&p->alloc_lock);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.