diff options
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/blkdev.h | 2 | ||||
-rw-r--r-- | include/linux/ide.h | 2 | ||||
-rw-r--r-- | include/linux/init_task.h | 1 | ||||
-rw-r--r-- | include/linux/intel-iommu.h | 3 | ||||
-rw-r--r-- | include/linux/io-mapping.h | 46 | ||||
-rw-r--r-- | include/linux/latencytop.h | 10 | ||||
-rw-r--r-- | include/linux/plist.h | 9 | ||||
-rw-r--r-- | include/linux/sched.h | 11 | ||||
-rw-r--r-- | include/linux/user_namespace.h | 1 |
9 files changed, 67 insertions, 18 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index dcaa0fd84b02..465d6babc847 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -708,6 +708,8 @@ struct req_iterator { | |||
708 | }; | 708 | }; |
709 | 709 | ||
710 | /* This should not be used directly - use rq_for_each_segment */ | 710 | /* This should not be used directly - use rq_for_each_segment */ |
711 | #define for_each_bio(_bio) \ | ||
712 | for (; _bio; _bio = _bio->bi_next) | ||
711 | #define __rq_for_each_bio(_bio, rq) \ | 713 | #define __rq_for_each_bio(_bio, rq) \ |
712 | if ((rq->bio)) \ | 714 | if ((rq->bio)) \ |
713 | for (_bio = (rq)->bio; _bio; _bio = _bio->bi_next) | 715 | for (_bio = (rq)->bio; _bio; _bio = _bio->bi_next) |
diff --git a/include/linux/ide.h b/include/linux/ide.h index 194da5a4b0d6..fe235b65207e 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
@@ -663,7 +663,7 @@ typedef struct ide_drive_s ide_drive_t; | |||
663 | #define to_ide_device(dev) container_of(dev, ide_drive_t, gendev) | 663 | #define to_ide_device(dev) container_of(dev, ide_drive_t, gendev) |
664 | 664 | ||
665 | #define to_ide_drv(obj, cont_type) \ | 665 | #define to_ide_drv(obj, cont_type) \ |
666 | container_of(obj, struct cont_type, kref) | 666 | container_of(obj, struct cont_type, dev) |
667 | 667 | ||
668 | #define ide_drv_g(disk, cont_type) \ | 668 | #define ide_drv_g(disk, cont_type) \ |
669 | container_of((disk)->private_data, struct cont_type, driver) | 669 | container_of((disk)->private_data, struct cont_type, driver) |
diff --git a/include/linux/init_task.h b/include/linux/init_task.h index e752d973fa21..af1de95e711e 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h | |||
@@ -147,6 +147,7 @@ extern struct cred init_cred; | |||
147 | .nr_cpus_allowed = NR_CPUS, \ | 147 | .nr_cpus_allowed = NR_CPUS, \ |
148 | }, \ | 148 | }, \ |
149 | .tasks = LIST_HEAD_INIT(tsk.tasks), \ | 149 | .tasks = LIST_HEAD_INIT(tsk.tasks), \ |
150 | .pushable_tasks = PLIST_NODE_INIT(tsk.pushable_tasks, MAX_PRIO), \ | ||
150 | .ptraced = LIST_HEAD_INIT(tsk.ptraced), \ | 151 | .ptraced = LIST_HEAD_INIT(tsk.ptraced), \ |
151 | .ptrace_entry = LIST_HEAD_INIT(tsk.ptrace_entry), \ | 152 | .ptrace_entry = LIST_HEAD_INIT(tsk.ptrace_entry), \ |
152 | .real_parent = &tsk, \ | 153 | .real_parent = &tsk, \ |
diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h index c4f6c101dbcd..d2e3cbfba14f 100644 --- a/include/linux/intel-iommu.h +++ b/include/linux/intel-iommu.h | |||
@@ -194,6 +194,7 @@ static inline void dmar_writeq(void __iomem *addr, u64 val) | |||
194 | /* FSTS_REG */ | 194 | /* FSTS_REG */ |
195 | #define DMA_FSTS_PPF ((u32)2) | 195 | #define DMA_FSTS_PPF ((u32)2) |
196 | #define DMA_FSTS_PFO ((u32)1) | 196 | #define DMA_FSTS_PFO ((u32)1) |
197 | #define DMA_FSTS_IQE (1 << 4) | ||
197 | #define dma_fsts_fault_record_index(s) (((s) >> 8) & 0xff) | 198 | #define dma_fsts_fault_record_index(s) (((s) >> 8) & 0xff) |
198 | 199 | ||
199 | /* FRCD_REG, 32 bits access */ | 200 | /* FRCD_REG, 32 bits access */ |
@@ -328,7 +329,7 @@ extern int qi_flush_iotlb(struct intel_iommu *iommu, u16 did, u64 addr, | |||
328 | unsigned int size_order, u64 type, | 329 | unsigned int size_order, u64 type, |
329 | int non_present_entry_flush); | 330 | int non_present_entry_flush); |
330 | 331 | ||
331 | extern void qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu); | 332 | extern int qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu); |
332 | 333 | ||
333 | extern void *intel_alloc_coherent(struct device *, size_t, dma_addr_t *, gfp_t); | 334 | extern void *intel_alloc_coherent(struct device *, size_t, dma_addr_t *, gfp_t); |
334 | extern void intel_free_coherent(struct device *, size_t, void *, dma_addr_t); | 335 | extern void intel_free_coherent(struct device *, size_t, void *, dma_addr_t); |
diff --git a/include/linux/io-mapping.h b/include/linux/io-mapping.h index 82df31726a54..cbc2f0cd631b 100644 --- a/include/linux/io-mapping.h +++ b/include/linux/io-mapping.h | |||
@@ -30,11 +30,14 @@ | |||
30 | * See Documentation/io_mapping.txt | 30 | * See Documentation/io_mapping.txt |
31 | */ | 31 | */ |
32 | 32 | ||
33 | /* this struct isn't actually defined anywhere */ | ||
34 | struct io_mapping; | ||
35 | |||
36 | #ifdef CONFIG_HAVE_ATOMIC_IOMAP | 33 | #ifdef CONFIG_HAVE_ATOMIC_IOMAP |
37 | 34 | ||
35 | struct io_mapping { | ||
36 | resource_size_t base; | ||
37 | unsigned long size; | ||
38 | pgprot_t prot; | ||
39 | }; | ||
40 | |||
38 | /* | 41 | /* |
39 | * For small address space machines, mapping large objects | 42 | * For small address space machines, mapping large objects |
40 | * into the kernel virtual space isn't practical. Where | 43 | * into the kernel virtual space isn't practical. Where |
@@ -43,23 +46,40 @@ struct io_mapping; | |||
43 | */ | 46 | */ |
44 | 47 | ||
45 | static inline struct io_mapping * | 48 | static inline struct io_mapping * |
46 | io_mapping_create_wc(unsigned long base, unsigned long size) | 49 | io_mapping_create_wc(resource_size_t base, unsigned long size) |
47 | { | 50 | { |
48 | return (struct io_mapping *) base; | 51 | struct io_mapping *iomap; |
52 | |||
53 | if (!is_io_mapping_possible(base, size)) | ||
54 | return NULL; | ||
55 | |||
56 | iomap = kmalloc(sizeof(*iomap), GFP_KERNEL); | ||
57 | if (!iomap) | ||
58 | return NULL; | ||
59 | |||
60 | iomap->base = base; | ||
61 | iomap->size = size; | ||
62 | iomap->prot = pgprot_writecombine(__pgprot(__PAGE_KERNEL)); | ||
63 | return iomap; | ||
49 | } | 64 | } |
50 | 65 | ||
51 | static inline void | 66 | static inline void |
52 | io_mapping_free(struct io_mapping *mapping) | 67 | io_mapping_free(struct io_mapping *mapping) |
53 | { | 68 | { |
69 | kfree(mapping); | ||
54 | } | 70 | } |
55 | 71 | ||
56 | /* Atomic map/unmap */ | 72 | /* Atomic map/unmap */ |
57 | static inline void * | 73 | static inline void * |
58 | io_mapping_map_atomic_wc(struct io_mapping *mapping, unsigned long offset) | 74 | io_mapping_map_atomic_wc(struct io_mapping *mapping, unsigned long offset) |
59 | { | 75 | { |
60 | offset += (unsigned long) mapping; | 76 | resource_size_t phys_addr; |
61 | return iomap_atomic_prot_pfn(offset >> PAGE_SHIFT, KM_USER0, | 77 | unsigned long pfn; |
62 | __pgprot(__PAGE_KERNEL_WC)); | 78 | |
79 | BUG_ON(offset >= mapping->size); | ||
80 | phys_addr = mapping->base + offset; | ||
81 | pfn = (unsigned long) (phys_addr >> PAGE_SHIFT); | ||
82 | return iomap_atomic_prot_pfn(pfn, KM_USER0, mapping->prot); | ||
63 | } | 83 | } |
64 | 84 | ||
65 | static inline void | 85 | static inline void |
@@ -71,8 +91,9 @@ io_mapping_unmap_atomic(void *vaddr) | |||
71 | static inline void * | 91 | static inline void * |
72 | io_mapping_map_wc(struct io_mapping *mapping, unsigned long offset) | 92 | io_mapping_map_wc(struct io_mapping *mapping, unsigned long offset) |
73 | { | 93 | { |
74 | offset += (unsigned long) mapping; | 94 | BUG_ON(offset >= mapping->size); |
75 | return ioremap_wc(offset, PAGE_SIZE); | 95 | resource_size_t phys_addr = mapping->base + offset; |
96 | return ioremap_wc(phys_addr, PAGE_SIZE); | ||
76 | } | 97 | } |
77 | 98 | ||
78 | static inline void | 99 | static inline void |
@@ -83,9 +104,12 @@ io_mapping_unmap(void *vaddr) | |||
83 | 104 | ||
84 | #else | 105 | #else |
85 | 106 | ||
107 | /* this struct isn't actually defined anywhere */ | ||
108 | struct io_mapping; | ||
109 | |||
86 | /* Create the io_mapping object*/ | 110 | /* Create the io_mapping object*/ |
87 | static inline struct io_mapping * | 111 | static inline struct io_mapping * |
88 | io_mapping_create_wc(unsigned long base, unsigned long size) | 112 | io_mapping_create_wc(resource_size_t base, unsigned long size) |
89 | { | 113 | { |
90 | return (struct io_mapping *) ioremap_wc(base, size); | 114 | return (struct io_mapping *) ioremap_wc(base, size); |
91 | } | 115 | } |
diff --git a/include/linux/latencytop.h b/include/linux/latencytop.h index 901c2d6377a8..b0e99898527c 100644 --- a/include/linux/latencytop.h +++ b/include/linux/latencytop.h | |||
@@ -9,6 +9,7 @@ | |||
9 | #ifndef _INCLUDE_GUARD_LATENCYTOP_H_ | 9 | #ifndef _INCLUDE_GUARD_LATENCYTOP_H_ |
10 | #define _INCLUDE_GUARD_LATENCYTOP_H_ | 10 | #define _INCLUDE_GUARD_LATENCYTOP_H_ |
11 | 11 | ||
12 | #include <linux/compiler.h> | ||
12 | #ifdef CONFIG_LATENCYTOP | 13 | #ifdef CONFIG_LATENCYTOP |
13 | 14 | ||
14 | #define LT_SAVECOUNT 32 | 15 | #define LT_SAVECOUNT 32 |
@@ -24,7 +25,14 @@ struct latency_record { | |||
24 | 25 | ||
25 | struct task_struct; | 26 | struct task_struct; |
26 | 27 | ||
27 | void account_scheduler_latency(struct task_struct *task, int usecs, int inter); | 28 | extern int latencytop_enabled; |
29 | void __account_scheduler_latency(struct task_struct *task, int usecs, int inter); | ||
30 | static inline void | ||
31 | account_scheduler_latency(struct task_struct *task, int usecs, int inter) | ||
32 | { | ||
33 | if (unlikely(latencytop_enabled)) | ||
34 | __account_scheduler_latency(task, usecs, inter); | ||
35 | } | ||
28 | 36 | ||
29 | void clear_all_latency_tracing(struct task_struct *p); | 37 | void clear_all_latency_tracing(struct task_struct *p); |
30 | 38 | ||
diff --git a/include/linux/plist.h b/include/linux/plist.h index 85de2f055874..45926d77d6ac 100644 --- a/include/linux/plist.h +++ b/include/linux/plist.h | |||
@@ -96,6 +96,10 @@ struct plist_node { | |||
96 | # define PLIST_HEAD_LOCK_INIT(_lock) | 96 | # define PLIST_HEAD_LOCK_INIT(_lock) |
97 | #endif | 97 | #endif |
98 | 98 | ||
99 | #define _PLIST_HEAD_INIT(head) \ | ||
100 | .prio_list = LIST_HEAD_INIT((head).prio_list), \ | ||
101 | .node_list = LIST_HEAD_INIT((head).node_list) | ||
102 | |||
99 | /** | 103 | /** |
100 | * PLIST_HEAD_INIT - static struct plist_head initializer | 104 | * PLIST_HEAD_INIT - static struct plist_head initializer |
101 | * @head: struct plist_head variable name | 105 | * @head: struct plist_head variable name |
@@ -103,8 +107,7 @@ struct plist_node { | |||
103 | */ | 107 | */ |
104 | #define PLIST_HEAD_INIT(head, _lock) \ | 108 | #define PLIST_HEAD_INIT(head, _lock) \ |
105 | { \ | 109 | { \ |
106 | .prio_list = LIST_HEAD_INIT((head).prio_list), \ | 110 | _PLIST_HEAD_INIT(head), \ |
107 | .node_list = LIST_HEAD_INIT((head).node_list), \ | ||
108 | PLIST_HEAD_LOCK_INIT(&(_lock)) \ | 111 | PLIST_HEAD_LOCK_INIT(&(_lock)) \ |
109 | } | 112 | } |
110 | 113 | ||
@@ -116,7 +119,7 @@ struct plist_node { | |||
116 | #define PLIST_NODE_INIT(node, __prio) \ | 119 | #define PLIST_NODE_INIT(node, __prio) \ |
117 | { \ | 120 | { \ |
118 | .prio = (__prio), \ | 121 | .prio = (__prio), \ |
119 | .plist = PLIST_HEAD_INIT((node).plist, NULL), \ | 122 | .plist = { _PLIST_HEAD_INIT((node).plist) }, \ |
120 | } | 123 | } |
121 | 124 | ||
122 | /** | 125 | /** |
diff --git a/include/linux/sched.h b/include/linux/sched.h index a063d19b7a7d..75bf49291c60 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -998,6 +998,7 @@ struct sched_class { | |||
998 | struct rq *busiest, struct sched_domain *sd, | 998 | struct rq *busiest, struct sched_domain *sd, |
999 | enum cpu_idle_type idle); | 999 | enum cpu_idle_type idle); |
1000 | void (*pre_schedule) (struct rq *this_rq, struct task_struct *task); | 1000 | void (*pre_schedule) (struct rq *this_rq, struct task_struct *task); |
1001 | int (*needs_post_schedule) (struct rq *this_rq); | ||
1001 | void (*post_schedule) (struct rq *this_rq); | 1002 | void (*post_schedule) (struct rq *this_rq); |
1002 | void (*task_wake_up) (struct rq *this_rq, struct task_struct *task); | 1003 | void (*task_wake_up) (struct rq *this_rq, struct task_struct *task); |
1003 | 1004 | ||
@@ -1052,6 +1053,10 @@ struct sched_entity { | |||
1052 | u64 last_wakeup; | 1053 | u64 last_wakeup; |
1053 | u64 avg_overlap; | 1054 | u64 avg_overlap; |
1054 | 1055 | ||
1056 | u64 start_runtime; | ||
1057 | u64 avg_wakeup; | ||
1058 | u64 nr_migrations; | ||
1059 | |||
1055 | #ifdef CONFIG_SCHEDSTATS | 1060 | #ifdef CONFIG_SCHEDSTATS |
1056 | u64 wait_start; | 1061 | u64 wait_start; |
1057 | u64 wait_max; | 1062 | u64 wait_max; |
@@ -1067,7 +1072,6 @@ struct sched_entity { | |||
1067 | u64 exec_max; | 1072 | u64 exec_max; |
1068 | u64 slice_max; | 1073 | u64 slice_max; |
1069 | 1074 | ||
1070 | u64 nr_migrations; | ||
1071 | u64 nr_migrations_cold; | 1075 | u64 nr_migrations_cold; |
1072 | u64 nr_failed_migrations_affine; | 1076 | u64 nr_failed_migrations_affine; |
1073 | u64 nr_failed_migrations_running; | 1077 | u64 nr_failed_migrations_running; |
@@ -1164,6 +1168,7 @@ struct task_struct { | |||
1164 | #endif | 1168 | #endif |
1165 | 1169 | ||
1166 | struct list_head tasks; | 1170 | struct list_head tasks; |
1171 | struct plist_node pushable_tasks; | ||
1167 | 1172 | ||
1168 | struct mm_struct *mm, *active_mm; | 1173 | struct mm_struct *mm, *active_mm; |
1169 | 1174 | ||
@@ -2301,9 +2306,13 @@ extern long sched_group_rt_runtime(struct task_group *tg); | |||
2301 | extern int sched_group_set_rt_period(struct task_group *tg, | 2306 | extern int sched_group_set_rt_period(struct task_group *tg, |
2302 | long rt_period_us); | 2307 | long rt_period_us); |
2303 | extern long sched_group_rt_period(struct task_group *tg); | 2308 | extern long sched_group_rt_period(struct task_group *tg); |
2309 | extern int sched_rt_can_attach(struct task_group *tg, struct task_struct *tsk); | ||
2304 | #endif | 2310 | #endif |
2305 | #endif | 2311 | #endif |
2306 | 2312 | ||
2313 | extern int task_can_switch_user(struct user_struct *up, | ||
2314 | struct task_struct *tsk); | ||
2315 | |||
2307 | #ifdef CONFIG_TASK_XACCT | 2316 | #ifdef CONFIG_TASK_XACCT |
2308 | static inline void add_rchar(struct task_struct *tsk, ssize_t amt) | 2317 | static inline void add_rchar(struct task_struct *tsk, ssize_t amt) |
2309 | { | 2318 | { |
diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h index 315bcd375224..cc4f45361dbb 100644 --- a/include/linux/user_namespace.h +++ b/include/linux/user_namespace.h | |||
@@ -13,6 +13,7 @@ struct user_namespace { | |||
13 | struct kref kref; | 13 | struct kref kref; |
14 | struct hlist_head uidhash_table[UIDHASH_SZ]; | 14 | struct hlist_head uidhash_table[UIDHASH_SZ]; |
15 | struct user_struct *creator; | 15 | struct user_struct *creator; |
16 | struct work_struct destroyer; | ||
16 | }; | 17 | }; |
17 | 18 | ||
18 | extern struct user_namespace init_user_ns; | 19 | extern struct user_namespace init_user_ns; |