aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/blkdev.h2
-rw-r--r--include/linux/ide.h2
-rw-r--r--include/linux/intel-iommu.h3
-rw-r--r--include/linux/io-mapping.h46
-rw-r--r--include/linux/sched.h14
-rw-r--r--include/linux/user_namespace.h1
6 files changed, 55 insertions, 13 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/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
331extern void qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu); 332extern int qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu);
332 333
333extern void *intel_alloc_coherent(struct device *, size_t, dma_addr_t *, gfp_t); 334extern void *intel_alloc_coherent(struct device *, size_t, dma_addr_t *, gfp_t);
334extern void intel_free_coherent(struct device *, size_t, void *, dma_addr_t); 335extern 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 */
34struct io_mapping;
35
36#ifdef CONFIG_HAVE_ATOMIC_IOMAP 33#ifdef CONFIG_HAVE_ATOMIC_IOMAP
37 34
35struct 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
45static inline struct io_mapping * 48static inline struct io_mapping *
46io_mapping_create_wc(unsigned long base, unsigned long size) 49io_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
51static inline void 66static inline void
52io_mapping_free(struct io_mapping *mapping) 67io_mapping_free(struct io_mapping *mapping)
53{ 68{
69 kfree(mapping);
54} 70}
55 71
56/* Atomic map/unmap */ 72/* Atomic map/unmap */
57static inline void * 73static inline void *
58io_mapping_map_atomic_wc(struct io_mapping *mapping, unsigned long offset) 74io_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
65static inline void 85static inline void
@@ -71,8 +91,9 @@ io_mapping_unmap_atomic(void *vaddr)
71static inline void * 91static inline void *
72io_mapping_map_wc(struct io_mapping *mapping, unsigned long offset) 92io_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
78static inline void 99static 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 */
108struct io_mapping;
109
86/* Create the io_mapping object*/ 110/* Create the io_mapping object*/
87static inline struct io_mapping * 111static inline struct io_mapping *
88io_mapping_create_wc(unsigned long base, unsigned long size) 112io_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/sched.h b/include/linux/sched.h
index b339a0bef024..75bf49291c60 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1675,6 +1675,16 @@ static inline int set_cpus_allowed(struct task_struct *p, cpumask_t new_mask)
1675 return set_cpus_allowed_ptr(p, &new_mask); 1675 return set_cpus_allowed_ptr(p, &new_mask);
1676} 1676}
1677 1677
1678/*
1679 * Architectures can set this to 1 if they have specified
1680 * CONFIG_HAVE_UNSTABLE_SCHED_CLOCK in their arch Kconfig,
1681 * but then during bootup it turns out that sched_clock()
1682 * is reliable after all:
1683 */
1684#ifdef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK
1685extern int sched_clock_stable;
1686#endif
1687
1678extern unsigned long long sched_clock(void); 1688extern unsigned long long sched_clock(void);
1679 1689
1680extern void sched_clock_init(void); 1690extern void sched_clock_init(void);
@@ -2296,9 +2306,13 @@ extern long sched_group_rt_runtime(struct task_group *tg);
2296extern int sched_group_set_rt_period(struct task_group *tg, 2306extern int sched_group_set_rt_period(struct task_group *tg,
2297 long rt_period_us); 2307 long rt_period_us);
2298extern long sched_group_rt_period(struct task_group *tg); 2308extern long sched_group_rt_period(struct task_group *tg);
2309extern int sched_rt_can_attach(struct task_group *tg, struct task_struct *tsk);
2299#endif 2310#endif
2300#endif 2311#endif
2301 2312
2313extern int task_can_switch_user(struct user_struct *up,
2314 struct task_struct *tsk);
2315
2302#ifdef CONFIG_TASK_XACCT 2316#ifdef CONFIG_TASK_XACCT
2303static inline void add_rchar(struct task_struct *tsk, ssize_t amt) 2317static inline void add_rchar(struct task_struct *tsk, ssize_t amt)
2304{ 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
18extern struct user_namespace init_user_ns; 19extern struct user_namespace init_user_ns;