diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-21 20:25:01 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-21 20:25:01 -0400 |
commit | 0961d6581c870850342ad6ea25263763433d666f (patch) | |
tree | 371c61fd7f621397907983031003e784a040402e /include/asm-generic | |
parent | 1756ac3d3c41341297ea25b818b7fce505bb2a9a (diff) | |
parent | fd0c8894893cba722bdea12de25b49f980795d06 (diff) |
Merge git://git.infradead.org/iommu-2.6
* git://git.infradead.org/iommu-2.6:
intel-iommu: Set a more specific taint flag for invalid BIOS DMAR tables
intel-iommu: Combine the BIOS DMAR table warning messages
panic: Add taint flag TAINT_FIRMWARE_WORKAROUND ('I')
panic: Allow warnings to set different taint flags
intel-iommu: intel_iommu_map_range failed at very end of address space
intel-iommu: errors with smaller iommu widths
intel-iommu: Fix boot inside 64bit virtualbox with io-apic disabled
intel-iommu: use physfn to search drhd for VF
intel-iommu: Print out iommu seq_id
intel-iommu: Don't complain that ACPI_DMAR_SCOPE_TYPE_IOAPIC is not supported
intel-iommu: Avoid global flushes with caching mode.
intel-iommu: Use correct domain ID when caching mode is enabled
intel-iommu mistakenly uses offset_pfn when caching mode is enabled
intel-iommu: use for_each_set_bit()
intel-iommu: Fix section mismatch dmar_ir_support() uses dmar_tbl.
Diffstat (limited to 'include/asm-generic')
-rw-r--r-- | include/asm-generic/bug.h | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h index 18c435d7c082..c2c9ba032d46 100644 --- a/include/asm-generic/bug.h +++ b/include/asm-generic/bug.h | |||
@@ -25,7 +25,10 @@ struct bug_entry { | |||
25 | }; | 25 | }; |
26 | #endif /* __ASSEMBLY__ */ | 26 | #endif /* __ASSEMBLY__ */ |
27 | 27 | ||
28 | #define BUGFLAG_WARNING (1<<0) | 28 | #define BUGFLAG_WARNING (1 << 0) |
29 | #define BUGFLAG_TAINT(taint) (BUGFLAG_WARNING | ((taint) << 8)) | ||
30 | #define BUG_GET_TAINT(bug) ((bug)->flags >> 8) | ||
31 | |||
29 | #endif /* CONFIG_GENERIC_BUG */ | 32 | #endif /* CONFIG_GENERIC_BUG */ |
30 | 33 | ||
31 | /* | 34 | /* |
@@ -56,17 +59,25 @@ struct bug_entry { | |||
56 | * appear at runtime. Use the versions with printk format strings | 59 | * appear at runtime. Use the versions with printk format strings |
57 | * to provide better diagnostics. | 60 | * to provide better diagnostics. |
58 | */ | 61 | */ |
59 | #ifndef __WARN | 62 | #ifndef __WARN_TAINT |
60 | #ifndef __ASSEMBLY__ | 63 | #ifndef __ASSEMBLY__ |
61 | extern void warn_slowpath_fmt(const char *file, const int line, | 64 | extern void warn_slowpath_fmt(const char *file, const int line, |
62 | const char *fmt, ...) __attribute__((format(printf, 3, 4))); | 65 | const char *fmt, ...) __attribute__((format(printf, 3, 4))); |
66 | extern void warn_slowpath_fmt_taint(const char *file, const int line, | ||
67 | unsigned taint, const char *fmt, ...) | ||
68 | __attribute__((format(printf, 4, 5))); | ||
63 | extern void warn_slowpath_null(const char *file, const int line); | 69 | extern void warn_slowpath_null(const char *file, const int line); |
64 | #define WANT_WARN_ON_SLOWPATH | 70 | #define WANT_WARN_ON_SLOWPATH |
65 | #endif | 71 | #endif |
66 | #define __WARN() warn_slowpath_null(__FILE__, __LINE__) | 72 | #define __WARN() warn_slowpath_null(__FILE__, __LINE__) |
67 | #define __WARN_printf(arg...) warn_slowpath_fmt(__FILE__, __LINE__, arg) | 73 | #define __WARN_printf(arg...) warn_slowpath_fmt(__FILE__, __LINE__, arg) |
74 | #define __WARN_printf_taint(taint, arg...) \ | ||
75 | warn_slowpath_fmt_taint(__FILE__, __LINE__, taint, arg) | ||
68 | #else | 76 | #else |
77 | #define __WARN() __WARN_TAINT(TAINT_WARN) | ||
69 | #define __WARN_printf(arg...) do { printk(arg); __WARN(); } while (0) | 78 | #define __WARN_printf(arg...) do { printk(arg); __WARN(); } while (0) |
79 | #define __WARN_printf_taint(taint, arg...) \ | ||
80 | do { printk(arg); __WARN_TAINT(taint); } while (0) | ||
70 | #endif | 81 | #endif |
71 | 82 | ||
72 | #ifndef WARN_ON | 83 | #ifndef WARN_ON |
@@ -87,6 +98,13 @@ extern void warn_slowpath_null(const char *file, const int line); | |||
87 | }) | 98 | }) |
88 | #endif | 99 | #endif |
89 | 100 | ||
101 | #define WARN_TAINT(condition, taint, format...) ({ \ | ||
102 | int __ret_warn_on = !!(condition); \ | ||
103 | if (unlikely(__ret_warn_on)) \ | ||
104 | __WARN_printf_taint(taint, format); \ | ||
105 | unlikely(__ret_warn_on); \ | ||
106 | }) | ||
107 | |||
90 | #else /* !CONFIG_BUG */ | 108 | #else /* !CONFIG_BUG */ |
91 | #ifndef HAVE_ARCH_BUG | 109 | #ifndef HAVE_ARCH_BUG |
92 | #define BUG() do {} while(0) | 110 | #define BUG() do {} while(0) |
@@ -110,6 +128,8 @@ extern void warn_slowpath_null(const char *file, const int line); | |||
110 | }) | 128 | }) |
111 | #endif | 129 | #endif |
112 | 130 | ||
131 | #define WARN_TAINT(condition, taint, format...) WARN_ON(condition) | ||
132 | |||
113 | #endif | 133 | #endif |
114 | 134 | ||
115 | #define WARN_ON_ONCE(condition) ({ \ | 135 | #define WARN_ON_ONCE(condition) ({ \ |
@@ -132,6 +152,16 @@ extern void warn_slowpath_null(const char *file, const int line); | |||
132 | unlikely(__ret_warn_once); \ | 152 | unlikely(__ret_warn_once); \ |
133 | }) | 153 | }) |
134 | 154 | ||
155 | #define WARN_TAINT_ONCE(condition, taint, format...) ({ \ | ||
156 | static bool __warned; \ | ||
157 | int __ret_warn_once = !!(condition); \ | ||
158 | \ | ||
159 | if (unlikely(__ret_warn_once)) \ | ||
160 | if (WARN_TAINT(!__warned, taint, format)) \ | ||
161 | __warned = true; \ | ||
162 | unlikely(__ret_warn_once); \ | ||
163 | }) | ||
164 | |||
135 | #define WARN_ON_RATELIMIT(condition, state) \ | 165 | #define WARN_ON_RATELIMIT(condition, state) \ |
136 | WARN_ON((condition) && __ratelimit(state)) | 166 | WARN_ON((condition) && __ratelimit(state)) |
137 | 167 | ||