OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [include/] [linux/] [ioprio.h] - Blame information for rev 81

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
#ifndef IOPRIO_H
2
#define IOPRIO_H
3
 
4
#include <linux/sched.h>
5
 
6
/*
7
 * Gives us 8 prio classes with 13-bits of data for each class
8
 */
9
#define IOPRIO_BITS             (16)
10
#define IOPRIO_CLASS_SHIFT      (13)
11
#define IOPRIO_PRIO_MASK        ((1UL << IOPRIO_CLASS_SHIFT) - 1)
12
 
13
#define IOPRIO_PRIO_CLASS(mask) ((mask) >> IOPRIO_CLASS_SHIFT)
14
#define IOPRIO_PRIO_DATA(mask)  ((mask) & IOPRIO_PRIO_MASK)
15
#define IOPRIO_PRIO_VALUE(class, data)  (((class) << IOPRIO_CLASS_SHIFT) | data)
16
 
17
#define ioprio_valid(mask)      (IOPRIO_PRIO_CLASS((mask)) != IOPRIO_CLASS_NONE)
18
 
19
/*
20
 * These are the io priority groups as implemented by CFQ. RT is the realtime
21
 * class, it always gets premium service. BE is the best-effort scheduling
22
 * class, the default for any process. IDLE is the idle scheduling class, it
23
 * is only served when no one else is using the disk.
24
 */
25
enum {
26
        IOPRIO_CLASS_NONE,
27
        IOPRIO_CLASS_RT,
28
        IOPRIO_CLASS_BE,
29
        IOPRIO_CLASS_IDLE,
30
};
31
 
32
/*
33
 * 8 best effort priority levels are supported
34
 */
35
#define IOPRIO_BE_NR    (8)
36
 
37
enum {
38
        IOPRIO_WHO_PROCESS = 1,
39
        IOPRIO_WHO_PGRP,
40
        IOPRIO_WHO_USER,
41
};
42
 
43
/*
44
 * if process has set io priority explicitly, use that. if not, convert
45
 * the cpu scheduler nice value to an io priority
46
 */
47
#define IOPRIO_NORM     (4)
48
static inline int task_ioprio(struct task_struct *task)
49
{
50
        if (ioprio_valid(task->ioprio))
51
                return IOPRIO_PRIO_DATA(task->ioprio);
52
 
53
        return IOPRIO_NORM;
54
}
55
 
56
static inline int task_ioprio_class(struct task_struct *task)
57
{
58
        if (ioprio_valid(task->ioprio))
59
                return IOPRIO_PRIO_CLASS(task->ioprio);
60
 
61
        return IOPRIO_CLASS_BE;
62
}
63
 
64
static inline int task_nice_ioprio(struct task_struct *task)
65
{
66
        return (task_nice(task) + 20) / 5;
67
}
68
 
69
/*
70
 * For inheritance, return the highest of the two given priorities
71
 */
72
extern int ioprio_best(unsigned short aprio, unsigned short bprio);
73
 
74
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.