Skip to content

Commit

Permalink
consolidate WARN_...ONCE() static variables
Browse files Browse the repository at this point in the history
Due to the alignment of following variables, these typically consume
more than just the single byte that 'bool' requires, and as there are a
few hundred instances, the cache pollution (not so much the waste of
memory) sums up.  Put these variables into their own section, outside of
any half way frequently used memory range.

Do the same also to the __warned variable of rcu_lockdep_assert().
(Don't, however, include the ones used by printk_once() and alike, as
they can potentially be hot.)

Signed-off-by: Jan Beulich <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
jbeulich authored and torvalds committed Mar 23, 2012
1 parent 10db4e1 commit 7ccaba5
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 4 deletions.
6 changes: 3 additions & 3 deletions include/asm-generic/bug.h
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ extern void warn_slowpath_null(const char *file, const int line);
#endif

#define WARN_ON_ONCE(condition) ({ \
static bool __warned; \
static bool __section(.data.unlikely) __warned; \
int __ret_warn_once = !!(condition); \
\
if (unlikely(__ret_warn_once)) \
Expand All @@ -144,7 +144,7 @@ extern void warn_slowpath_null(const char *file, const int line);
})

#define WARN_ONCE(condition, format...) ({ \
static bool __warned; \
static bool __section(.data.unlikely) __warned; \
int __ret_warn_once = !!(condition); \
\
if (unlikely(__ret_warn_once)) \
Expand All @@ -154,7 +154,7 @@ extern void warn_slowpath_null(const char *file, const int line);
})

#define WARN_TAINT_ONCE(condition, taint, format...) ({ \
static bool __warned; \
static bool __section(.data.unlikely) __warned; \
int __ret_warn_once = !!(condition); \
\
if (unlikely(__ret_warn_once)) \
Expand Down
1 change: 1 addition & 0 deletions include/asm-generic/vmlinux.lds.h
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,7 @@
CPU_KEEP(exit.data) \
MEM_KEEP(init.data) \
MEM_KEEP(exit.data) \
*(.data.unlikely) \
STRUCT_ALIGN(); \
*(__tracepoints) \
/* implement dynamic printk debug */ \
Expand Down
2 changes: 1 addition & 1 deletion include/linux/rcupdate.h
Original file line number Diff line number Diff line change
Expand Up @@ -418,7 +418,7 @@ extern int rcu_my_thread_group_empty(void);
*/
#define rcu_lockdep_assert(c, s) \
do { \
static bool __warned; \
static bool __section(.data.unlikely) __warned; \
if (debug_lockdep_rcu_enabled() && !__warned && !(c)) { \
__warned = true; \
lockdep_rcu_suspicious(__FILE__, __LINE__, s); \
Expand Down

0 comments on commit 7ccaba5

Please sign in to comment.