Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide-2.6
[sfrench/cifs-2.6.git] / arch / blackfin / include / asm / bug.h
1 /*
2  * Copyright 2004-2009 Analog Devices Inc.
3  *
4  * Licensed under the GPL-2 or later.
5  */
6
7 #ifndef _BLACKFIN_BUG_H
8 #define _BLACKFIN_BUG_H
9
10 #ifdef CONFIG_BUG
11
12 /*
13  * This can be any undefined 16-bit opcode, meaning
14  * ((opcode & 0xc000) != 0xc000)
15  * Anything from 0x0001 to 0x000A (inclusive) will work
16  */
17 #define BFIN_BUG_OPCODE 0x0001
18
19 #ifdef CONFIG_DEBUG_BUGVERBOSE
20
21 #define _BUG_OR_WARN(flags)                                             \
22         asm volatile(                                                   \
23                 "1:     .hword  %0\n"                                   \
24                 "       .section __bug_table,\"a\",@progbits\n"         \
25                 "2:     .long   1b\n"                                   \
26                 "       .long   %1\n"                                   \
27                 "       .short  %2\n"                                   \
28                 "       .short  %3\n"                                   \
29                 "       .org    2b + %4\n"                              \
30                 "       .previous"                                      \
31                 :                                                       \
32                 : "i"(BFIN_BUG_OPCODE), "i"(__FILE__),                  \
33                   "i"(__LINE__), "i"(flags),                            \
34                   "i"(sizeof(struct bug_entry)))
35
36 #else
37
38 #define _BUG_OR_WARN(flags)                                             \
39         asm volatile(                                                   \
40                 "1:     .hword  %0\n"                                   \
41                 "       .section __bug_table,\"a\",@progbits\n"         \
42                 "2:     .long   1b\n"                                   \
43                 "       .short  %1\n"                                   \
44                 "       .org    2b + %2\n"                              \
45                 "       .previous"                                      \
46                 :                                                       \
47                 : "i"(BFIN_BUG_OPCODE), "i"(flags),                     \
48                   "i"(sizeof(struct bug_entry)))
49
50 #endif /* CONFIG_DEBUG_BUGVERBOSE */
51
52 #define BUG()                                                           \
53         do {                                                            \
54                 _BUG_OR_WARN(0);                                        \
55                 unreachable();                                          \
56         } while (0)
57
58 #define WARN_ON(condition)                                                      \
59         ({                                                              \
60                 int __ret_warn_on = !!(condition);                      \
61                 if (unlikely(__ret_warn_on))                            \
62                         _BUG_OR_WARN(BUGFLAG_WARNING);                  \
63                 unlikely(__ret_warn_on);                                \
64         })
65
66 #define HAVE_ARCH_BUG
67 #define HAVE_ARCH_WARN_ON
68
69 #endif
70
71 #include <asm-generic/bug.h>
72
73 #endif