aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-generic
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-generic')
-rw-r--r--include/asm-generic/bug.h18
-rw-r--r--include/asm-generic/page.h38
-rw-r--r--include/asm-generic/termios.h4
-rw-r--r--include/asm-generic/vmlinux.lds.h9
4 files changed, 62 insertions, 7 deletions
diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h
index c92ae0f166ff..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__
10struct 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 } \
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/*
10static __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
16static inline __attribute__((const))
17int __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 */
14static inline int user_termio_to_kernel_termios(struct termios *termios, 14static 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 */
50static inline int kernel_termios_to_user_termio(struct termio __user *termio, 50static 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 4d4c62d11059..7437ccaada77 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -218,6 +218,14 @@
218 .stab.indexstr 0 : { *(.stab.indexstr) } \ 218 .stab.indexstr 0 : { *(.stab.indexstr) } \
219 .comment 0 : { *(.comment) } 219 .comment 0 : { *(.comment) }
220 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
221#define NOTES \ 229#define NOTES \
222 .notes : { *(.note.*) } :note 230 .notes : { *(.note.*) } :note
223 231
@@ -234,6 +242,7 @@
234 *(.initcall4s.init) \ 242 *(.initcall4s.init) \
235 *(.initcall5.init) \ 243 *(.initcall5.init) \
236 *(.initcall5s.init) \ 244 *(.initcall5s.init) \
245 *(.initcallrootfs.init) \
237 *(.initcall6.init) \ 246 *(.initcall6.init) \
238 *(.initcall6s.init) \ 247 *(.initcall6s.init) \
239 *(.initcall7.init) \ 248 *(.initcall7.init) \