diff options
author | Christine Spang <christine.spang@oracle.com> | 2013-03-04 17:02:59 -0500 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2013-03-11 04:33:34 -0400 |
commit | d5702162f85526319c848c667df49ee1754dccef (patch) | |
tree | 15285b7b5a202a7f5629080fc3224a358378d0f1 /include/sound | |
parent | 8ba955cef30921417dffba901a8af5a2662a1dec (diff) |
ALSA: Make snd_BUG_ON() always evaluate and return the conditional expression
Having snd_BUG_ON() only evaluate its conditional when CONFIG_SND_DEBUG
is set leads to frequent bugs, since other similar macros in the kernel
have different behavior. Let's make snd_BUG_ON() act like those macros
so it will stop being accidentally misused.
Signed-off-by: Christine Spang <christine.spang@oracle.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'include/sound')
-rw-r--r-- | include/sound/core.h | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/include/sound/core.h b/include/sound/core.h index 7cede2d6aa86..a63680b9819d 100644 --- a/include/sound/core.h +++ b/include/sound/core.h | |||
@@ -379,18 +379,10 @@ void __snd_printk(unsigned int level, const char *file, int line, | |||
379 | * snd_BUG_ON - debugging check macro | 379 | * snd_BUG_ON - debugging check macro |
380 | * @cond: condition to evaluate | 380 | * @cond: condition to evaluate |
381 | * | 381 | * |
382 | * When CONFIG_SND_DEBUG is set, this macro evaluates the given condition, | 382 | * Has the same behavior as WARN_ON when CONFIG_SND_DEBUG is set, |
383 | * and call WARN() and returns the value if it's non-zero. | 383 | * otherwise just evaluates the conditional and returns the value. |
384 | * | ||
385 | * When CONFIG_SND_DEBUG is not set, this just returns zero, and the given | ||
386 | * condition is ignored. | ||
387 | * | ||
388 | * NOTE: the argument won't be evaluated at all when CONFIG_SND_DEBUG=n. | ||
389 | * Thus, don't put any statement that influences on the code behavior, | ||
390 | * such as pre/post increment, to the argument of this macro. | ||
391 | * If you want to evaluate and give a warning, use standard WARN_ON(). | ||
392 | */ | 384 | */ |
393 | #define snd_BUG_ON(cond) WARN((cond), "BUG? (%s)\n", __stringify(cond)) | 385 | #define snd_BUG_ON(cond) WARN_ON((cond)) |
394 | 386 | ||
395 | #else /* !CONFIG_SND_DEBUG */ | 387 | #else /* !CONFIG_SND_DEBUG */ |
396 | 388 | ||
@@ -400,11 +392,11 @@ __printf(2, 3) | |||
400 | static inline void _snd_printd(int level, const char *format, ...) {} | 392 | static inline void _snd_printd(int level, const char *format, ...) {} |
401 | 393 | ||
402 | #define snd_BUG() do { } while (0) | 394 | #define snd_BUG() do { } while (0) |
403 | static inline int __snd_bug_on(int cond) | 395 | |
404 | { | 396 | #define snd_BUG_ON(condition) ({ \ |
405 | return 0; | 397 | int __ret_warn_on = !!(condition); \ |
406 | } | 398 | unlikely(__ret_warn_on); \ |
407 | #define snd_BUG_ON(cond) __snd_bug_on(0 && (cond)) /* always false */ | 399 | }) |
408 | 400 | ||
409 | #endif /* CONFIG_SND_DEBUG */ | 401 | #endif /* CONFIG_SND_DEBUG */ |
410 | 402 | ||