diff options
Diffstat (limited to 'include/asm-generic')
-rw-r--r-- | include/asm-generic/Kbuild | 1 | ||||
-rw-r--r-- | include/asm-generic/Kbuild.asm | 1 | ||||
-rw-r--r-- | include/asm-generic/atomic.h | 7 | ||||
-rw-r--r-- | include/asm-generic/bug.h | 23 | ||||
-rw-r--r-- | include/asm-generic/device.h | 12 | ||||
-rw-r--r-- | include/asm-generic/dma-mapping.h | 4 | ||||
-rw-r--r-- | include/asm-generic/futex.h | 4 | ||||
-rw-r--r-- | include/asm-generic/page.h | 38 | ||||
-rw-r--r-- | include/asm-generic/termios.h | 4 | ||||
-rw-r--r-- | include/asm-generic/vmlinux.lds.h | 55 |
10 files changed, 131 insertions, 18 deletions
diff --git a/include/asm-generic/Kbuild b/include/asm-generic/Kbuild index 3c06be381701..fa14f8cd30c5 100644 --- a/include/asm-generic/Kbuild +++ b/include/asm-generic/Kbuild | |||
@@ -1,4 +1,3 @@ | |||
1 | header-y += atomic.h | ||
2 | header-y += errno-base.h | 1 | header-y += errno-base.h |
3 | header-y += errno.h | 2 | header-y += errno.h |
4 | header-y += fcntl.h | 3 | header-y += fcntl.h |
diff --git a/include/asm-generic/Kbuild.asm b/include/asm-generic/Kbuild.asm index a84c3d88a189..a37e95fe58d6 100644 --- a/include/asm-generic/Kbuild.asm +++ b/include/asm-generic/Kbuild.asm | |||
@@ -14,6 +14,7 @@ unifdef-y += posix_types.h | |||
14 | unifdef-y += ptrace.h | 14 | unifdef-y += ptrace.h |
15 | unifdef-y += resource.h | 15 | unifdef-y += resource.h |
16 | unifdef-y += sembuf.h | 16 | unifdef-y += sembuf.h |
17 | unifdef-y += setup.h | ||
17 | unifdef-y += shmbuf.h | 18 | unifdef-y += shmbuf.h |
18 | unifdef-y += sigcontext.h | 19 | unifdef-y += sigcontext.h |
19 | unifdef-y += siginfo.h | 20 | unifdef-y += siginfo.h |
diff --git a/include/asm-generic/atomic.h b/include/asm-generic/atomic.h index 42a95d9a0641..b7e4a0467cb1 100644 --- a/include/asm-generic/atomic.h +++ b/include/asm-generic/atomic.h | |||
@@ -66,7 +66,7 @@ static inline void atomic_long_sub(long i, atomic_long_t *l) | |||
66 | atomic64_sub(i, v); | 66 | atomic64_sub(i, v); |
67 | } | 67 | } |
68 | 68 | ||
69 | #else | 69 | #else /* BITS_PER_LONG == 64 */ |
70 | 70 | ||
71 | typedef atomic_t atomic_long_t; | 71 | typedef atomic_t atomic_long_t; |
72 | 72 | ||
@@ -113,5 +113,6 @@ static inline void atomic_long_sub(long i, atomic_long_t *l) | |||
113 | atomic_sub(i, v); | 113 | atomic_sub(i, v); |
114 | } | 114 | } |
115 | 115 | ||
116 | #endif | 116 | #endif /* BITS_PER_LONG == 64 */ |
117 | #endif | 117 | |
118 | #endif /* _ASM_GENERIC_ATOMIC_H */ | ||
diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h index 1d9573cf4a0b..a06eecd48292 100644 --- a/include/asm-generic/bug.h +++ b/include/asm-generic/bug.h | |||
@@ -4,6 +4,22 @@ | |||
4 | #include <linux/compiler.h> | 4 | #include <linux/compiler.h> |
5 | 5 | ||
6 | #ifdef CONFIG_BUG | 6 | #ifdef CONFIG_BUG |
7 | |||
8 | #ifdef CONFIG_GENERIC_BUG | ||
9 | #ifndef __ASSEMBLY__ | ||
10 | struct bug_entry { | ||
11 | unsigned long bug_addr; | ||
12 | #ifdef CONFIG_DEBUG_BUGVERBOSE | ||
13 | const char *file; | ||
14 | unsigned short line; | ||
15 | #endif | ||
16 | unsigned short flags; | ||
17 | }; | ||
18 | #endif /* __ASSEMBLY__ */ | ||
19 | |||
20 | #define BUGFLAG_WARNING (1<<0) | ||
21 | #endif /* CONFIG_GENERIC_BUG */ | ||
22 | |||
7 | #ifndef HAVE_ARCH_BUG | 23 | #ifndef HAVE_ARCH_BUG |
8 | #define BUG() do { \ | 24 | #define BUG() do { \ |
9 | printk("BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __FUNCTION__); \ | 25 | printk("BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __FUNCTION__); \ |
@@ -19,7 +35,7 @@ | |||
19 | #define WARN_ON(condition) ({ \ | 35 | #define WARN_ON(condition) ({ \ |
20 | typeof(condition) __ret_warn_on = (condition); \ | 36 | typeof(condition) __ret_warn_on = (condition); \ |
21 | if (unlikely(__ret_warn_on)) { \ | 37 | if (unlikely(__ret_warn_on)) { \ |
22 | printk("BUG: warning at %s:%d/%s()\n", __FILE__, \ | 38 | printk("WARNING at %s:%d %s()\n", __FILE__, \ |
23 | __LINE__, __FUNCTION__); \ | 39 | __LINE__, __FUNCTION__); \ |
24 | dump_stack(); \ | 40 | dump_stack(); \ |
25 | } \ | 41 | } \ |
@@ -37,7 +53,10 @@ | |||
37 | #endif | 53 | #endif |
38 | 54 | ||
39 | #ifndef HAVE_ARCH_WARN_ON | 55 | #ifndef HAVE_ARCH_WARN_ON |
40 | #define WARN_ON(condition) unlikely((condition)) | 56 | #define WARN_ON(condition) ({ \ |
57 | typeof(condition) __ret_warn_on = (condition); \ | ||
58 | unlikely(__ret_warn_on); \ | ||
59 | }) | ||
41 | #endif | 60 | #endif |
42 | #endif | 61 | #endif |
43 | 62 | ||
diff --git a/include/asm-generic/device.h b/include/asm-generic/device.h new file mode 100644 index 000000000000..c17c9600f220 --- /dev/null +++ b/include/asm-generic/device.h | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | * Arch specific extensions to struct device | ||
3 | * | ||
4 | * This file is released under the GPLv2 | ||
5 | */ | ||
6 | #ifndef _ASM_GENERIC_DEVICE_H | ||
7 | #define _ASM_GENERIC_DEVICE_H | ||
8 | |||
9 | struct dev_archdata { | ||
10 | }; | ||
11 | |||
12 | #endif /* _ASM_GENERIC_DEVICE_H */ | ||
diff --git a/include/asm-generic/dma-mapping.h b/include/asm-generic/dma-mapping.h index b541e48cc545..783ab9944d70 100644 --- a/include/asm-generic/dma-mapping.h +++ b/include/asm-generic/dma-mapping.h | |||
@@ -266,7 +266,7 @@ dma_error(dma_addr_t dma_addr) | |||
266 | 266 | ||
267 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) | 267 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) |
268 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) | 268 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) |
269 | #define dma_is_consistent(d) (1) | 269 | #define dma_is_consistent(d, h) (1) |
270 | 270 | ||
271 | static inline int | 271 | static inline int |
272 | dma_get_cache_alignment(void) | 272 | dma_get_cache_alignment(void) |
@@ -295,7 +295,7 @@ dma_sync_single_range_for_device(struct device *dev, dma_addr_t dma_handle, | |||
295 | } | 295 | } |
296 | 296 | ||
297 | static inline void | 297 | static inline void |
298 | dma_cache_sync(void *vaddr, size_t size, | 298 | dma_cache_sync(struct device *dev, void *vaddr, size_t size, |
299 | enum dma_data_direction direction) | 299 | enum dma_data_direction direction) |
300 | { | 300 | { |
301 | /* could define this in terms of the dma_cache ... operations, | 301 | /* could define this in terms of the dma_cache ... operations, |
diff --git a/include/asm-generic/futex.h b/include/asm-generic/futex.h index df893c160318..f422df0956a2 100644 --- a/include/asm-generic/futex.h +++ b/include/asm-generic/futex.h | |||
@@ -21,7 +21,7 @@ futex_atomic_op_inuser (int encoded_op, int __user *uaddr) | |||
21 | if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int))) | 21 | if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int))) |
22 | return -EFAULT; | 22 | return -EFAULT; |
23 | 23 | ||
24 | inc_preempt_count(); | 24 | pagefault_disable(); |
25 | 25 | ||
26 | switch (op) { | 26 | switch (op) { |
27 | case FUTEX_OP_SET: | 27 | case FUTEX_OP_SET: |
@@ -33,7 +33,7 @@ futex_atomic_op_inuser (int encoded_op, int __user *uaddr) | |||
33 | ret = -ENOSYS; | 33 | ret = -ENOSYS; |
34 | } | 34 | } |
35 | 35 | ||
36 | dec_preempt_count(); | 36 | pagefault_enable(); |
37 | 37 | ||
38 | if (!ret) { | 38 | if (!ret) { |
39 | switch (cmp) { | 39 | switch (cmp) { |
diff --git a/include/asm-generic/page.h b/include/asm-generic/page.h index a96b5d986b6e..b55052ce2330 100644 --- a/include/asm-generic/page.h +++ b/include/asm-generic/page.h | |||
@@ -4,21 +4,51 @@ | |||
4 | #ifdef __KERNEL__ | 4 | #ifdef __KERNEL__ |
5 | #ifndef __ASSEMBLY__ | 5 | #ifndef __ASSEMBLY__ |
6 | 6 | ||
7 | #include <linux/compiler.h> | 7 | #include <linux/log2.h> |
8 | 8 | ||
9 | /* Pure 2^n version of get_order */ | 9 | /* |
10 | static __inline__ __attribute_const__ int get_order(unsigned long size) | 10 | * non-const pure 2^n version of get_order |
11 | * - the arch may override these in asm/bitops.h if they can be implemented | ||
12 | * more efficiently than using the arch log2 routines | ||
13 | * - we use the non-const log2() instead if the arch has defined one suitable | ||
14 | */ | ||
15 | #ifndef ARCH_HAS_GET_ORDER | ||
16 | static inline __attribute__((const)) | ||
17 | int __get_order(unsigned long size, int page_shift) | ||
11 | { | 18 | { |
19 | #if BITS_PER_LONG == 32 && defined(ARCH_HAS_ILOG2_U32) | ||
20 | int order = __ilog2_u32(size) - page_shift; | ||
21 | return order >= 0 ? order : 0; | ||
22 | #elif BITS_PER_LONG == 64 && defined(ARCH_HAS_ILOG2_U64) | ||
23 | int order = __ilog2_u64(size) - page_shift; | ||
24 | return order >= 0 ? order : 0; | ||
25 | #else | ||
12 | int order; | 26 | int order; |
13 | 27 | ||
14 | size = (size - 1) >> (PAGE_SHIFT - 1); | 28 | size = (size - 1) >> (page_shift - 1); |
15 | order = -1; | 29 | order = -1; |
16 | do { | 30 | do { |
17 | size >>= 1; | 31 | size >>= 1; |
18 | order++; | 32 | order++; |
19 | } while (size); | 33 | } while (size); |
20 | return order; | 34 | return order; |
35 | #endif | ||
21 | } | 36 | } |
37 | #endif | ||
38 | |||
39 | /** | ||
40 | * get_order - calculate log2(pages) to hold a block of the specified size | ||
41 | * @n - size | ||
42 | * | ||
43 | * calculate allocation order based on the current page size | ||
44 | * - this can be used to initialise global variables from constant data | ||
45 | */ | ||
46 | #define get_order(n) \ | ||
47 | ( \ | ||
48 | __builtin_constant_p(n) ? \ | ||
49 | ((n < (1UL << PAGE_SHIFT)) ? 0 : ilog2(n) - PAGE_SHIFT) : \ | ||
50 | __get_order(n, PAGE_SHIFT) \ | ||
51 | ) | ||
22 | 52 | ||
23 | #endif /* __ASSEMBLY__ */ | 53 | #endif /* __ASSEMBLY__ */ |
24 | #endif /* __KERNEL__ */ | 54 | #endif /* __KERNEL__ */ |
diff --git a/include/asm-generic/termios.h b/include/asm-generic/termios.h index 1e58ca39592c..3769e6bd63b1 100644 --- a/include/asm-generic/termios.h +++ b/include/asm-generic/termios.h | |||
@@ -11,7 +11,7 @@ | |||
11 | /* | 11 | /* |
12 | * Translate a "termio" structure into a "termios". Ugh. | 12 | * Translate a "termio" structure into a "termios". Ugh. |
13 | */ | 13 | */ |
14 | static inline int user_termio_to_kernel_termios(struct termios *termios, | 14 | static inline int user_termio_to_kernel_termios(struct ktermios *termios, |
15 | struct termio __user *termio) | 15 | struct termio __user *termio) |
16 | { | 16 | { |
17 | unsigned short tmp; | 17 | unsigned short tmp; |
@@ -48,7 +48,7 @@ static inline int user_termio_to_kernel_termios(struct termios *termios, | |||
48 | * Translate a "termios" structure into a "termio". Ugh. | 48 | * Translate a "termios" structure into a "termio". Ugh. |
49 | */ | 49 | */ |
50 | static inline int kernel_termios_to_user_termio(struct termio __user *termio, | 50 | static inline int kernel_termios_to_user_termio(struct termio __user *termio, |
51 | struct termios *termios) | 51 | struct ktermios *termios) |
52 | { | 52 | { |
53 | if (put_user(termios->c_iflag, &termio->c_iflag) < 0 || | 53 | if (put_user(termios->c_iflag, &termio->c_iflag) < 0 || |
54 | put_user(termios->c_oflag, &termio->c_oflag) < 0 || | 54 | put_user(termios->c_oflag, &termio->c_oflag) < 0 || |
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index 69240b52f8e1..7437ccaada77 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h | |||
@@ -11,8 +11,8 @@ | |||
11 | 11 | ||
12 | #define RODATA \ | 12 | #define RODATA \ |
13 | . = ALIGN(4096); \ | 13 | . = ALIGN(4096); \ |
14 | __start_rodata = .; \ | ||
15 | .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \ | 14 | .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \ |
15 | VMLINUX_SYMBOL(__start_rodata) = .; \ | ||
16 | *(.rodata) *(.rodata.*) \ | 16 | *(.rodata) *(.rodata.*) \ |
17 | *(__vermagic) /* Kernel version magic */ \ | 17 | *(__vermagic) /* Kernel version magic */ \ |
18 | } \ | 18 | } \ |
@@ -119,13 +119,16 @@ | |||
119 | *(__ksymtab_strings) \ | 119 | *(__ksymtab_strings) \ |
120 | } \ | 120 | } \ |
121 | \ | 121 | \ |
122 | EH_FRAME \ | ||
123 | \ | ||
122 | /* Built-in module parameters. */ \ | 124 | /* Built-in module parameters. */ \ |
123 | __param : AT(ADDR(__param) - LOAD_OFFSET) { \ | 125 | __param : AT(ADDR(__param) - LOAD_OFFSET) { \ |
124 | VMLINUX_SYMBOL(__start___param) = .; \ | 126 | VMLINUX_SYMBOL(__start___param) = .; \ |
125 | *(__param) \ | 127 | *(__param) \ |
126 | VMLINUX_SYMBOL(__stop___param) = .; \ | 128 | VMLINUX_SYMBOL(__stop___param) = .; \ |
129 | VMLINUX_SYMBOL(__end_rodata) = .; \ | ||
127 | } \ | 130 | } \ |
128 | __end_rodata = .; \ | 131 | \ |
129 | . = ALIGN(4096); | 132 | . = ALIGN(4096); |
130 | 133 | ||
131 | #define SECURITY_INIT \ | 134 | #define SECURITY_INIT \ |
@@ -157,6 +160,26 @@ | |||
157 | *(.kprobes.text) \ | 160 | *(.kprobes.text) \ |
158 | VMLINUX_SYMBOL(__kprobes_text_end) = .; | 161 | VMLINUX_SYMBOL(__kprobes_text_end) = .; |
159 | 162 | ||
163 | #ifdef CONFIG_STACK_UNWIND | ||
164 | #define EH_FRAME \ | ||
165 | /* Unwind data binary search table */ \ | ||
166 | . = ALIGN(8); \ | ||
167 | .eh_frame_hdr : AT(ADDR(.eh_frame_hdr) - LOAD_OFFSET) { \ | ||
168 | VMLINUX_SYMBOL(__start_unwind_hdr) = .; \ | ||
169 | *(.eh_frame_hdr) \ | ||
170 | VMLINUX_SYMBOL(__end_unwind_hdr) = .; \ | ||
171 | } \ | ||
172 | /* Unwind data */ \ | ||
173 | . = ALIGN(8); \ | ||
174 | .eh_frame : AT(ADDR(.eh_frame) - LOAD_OFFSET) { \ | ||
175 | VMLINUX_SYMBOL(__start_unwind) = .; \ | ||
176 | *(.eh_frame) \ | ||
177 | VMLINUX_SYMBOL(__end_unwind) = .; \ | ||
178 | } | ||
179 | #else | ||
180 | #define EH_FRAME | ||
181 | #endif | ||
182 | |||
160 | /* DWARF debug sections. | 183 | /* DWARF debug sections. |
161 | Symbols in the DWARF debugging sections are relative to | 184 | Symbols in the DWARF debugging sections are relative to |
162 | the beginning of the section so we begin them at 0. */ | 185 | the beginning of the section so we begin them at 0. */ |
@@ -195,5 +218,33 @@ | |||
195 | .stab.indexstr 0 : { *(.stab.indexstr) } \ | 218 | .stab.indexstr 0 : { *(.stab.indexstr) } \ |
196 | .comment 0 : { *(.comment) } | 219 | .comment 0 : { *(.comment) } |
197 | 220 | ||
221 | #define BUG_TABLE \ | ||
222 | . = ALIGN(8); \ | ||
223 | __bug_table : AT(ADDR(__bug_table) - LOAD_OFFSET) { \ | ||
224 | __start___bug_table = .; \ | ||
225 | *(__bug_table) \ | ||
226 | __stop___bug_table = .; \ | ||
227 | } | ||
228 | |||
198 | #define NOTES \ | 229 | #define NOTES \ |
199 | .notes : { *(.note.*) } :note | 230 | .notes : { *(.note.*) } :note |
231 | |||
232 | #define INITCALLS \ | ||
233 | *(.initcall0.init) \ | ||
234 | *(.initcall0s.init) \ | ||
235 | *(.initcall1.init) \ | ||
236 | *(.initcall1s.init) \ | ||
237 | *(.initcall2.init) \ | ||
238 | *(.initcall2s.init) \ | ||
239 | *(.initcall3.init) \ | ||
240 | *(.initcall3s.init) \ | ||
241 | *(.initcall4.init) \ | ||
242 | *(.initcall4s.init) \ | ||
243 | *(.initcall5.init) \ | ||
244 | *(.initcall5s.init) \ | ||
245 | *(.initcallrootfs.init) \ | ||
246 | *(.initcall6.init) \ | ||
247 | *(.initcall6s.init) \ | ||
248 | *(.initcall7.init) \ | ||
249 | *(.initcall7s.init) | ||
250 | |||