Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ALSA: Introduce snd_BUG_ON() macro

Introduced snd_BUG_ON() macro as a replacement of snd_assert() macro.
snd_assert() is pretty ugly as it has the control flow in its argument.
OTOH, snd_BUG_ON() behaves like a normal conditional, thus it's much
easier to read the flow.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>

authored by

Takashi Iwai and committed by
Jaroslav Kysela
5ef03460 3caf8c08

+45
+41
Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
··· 6173 6173 When no debug flag is set, this macro is ignored. 6174 6174 </para> 6175 6175 </section> 6176 + 6177 + <section id="useful-functions-snd-bug-on"> 6178 + <title><function>snd_BUG_ON()</function></title> 6179 + <para> 6180 + <function>snd_BUG_ON()</function> macro is similar with 6181 + <function>WARN_ON()</function> macro. For example, 6182 + 6183 + <informalexample> 6184 + <programlisting> 6185 + <![CDATA[ 6186 + snd_BUG_ON(!pointer); 6187 + ]]> 6188 + </programlisting> 6189 + </informalexample> 6190 + 6191 + or it can be used as the condition, 6192 + <informalexample> 6193 + <programlisting> 6194 + <![CDATA[ 6195 + if (snd_BUG_ON(non_zero_is_bug)) 6196 + return -EINVAL; 6197 + ]]> 6198 + </programlisting> 6199 + </informalexample> 6200 + 6201 + </para> 6202 + 6203 + <para> 6204 + The macro takes an conditional expression to evaluate. 6205 + When <constant>CONFIG_SND_DEBUG</constant>, is set, the 6206 + expression is actually evaluated. If it's non-zero, it shows 6207 + the warning message such as 6208 + <computeroutput>BUG? (xxx)</computeroutput> 6209 + normally followed by stack trace. It returns the evaluated 6210 + value. 6211 + When no <constant>CONFIG_SND_DEBUG</constant> is set, this 6212 + macro always returns zero. 6213 + </para> 6214 + 6215 + </section> 6216 + 6176 6217 </chapter> 6177 6218 6178 6219
+4
include/sound/core.h
··· 28 28 #include <linux/rwsem.h> /* struct rw_semaphore */ 29 29 #include <linux/pm.h> /* pm_message_t */ 30 30 #include <linux/device.h> 31 + #include <linux/stringify.h> 31 32 32 33 /* number of supported soundcards */ 33 34 #ifdef CONFIG_SND_DYNAMIC_MINORS ··· 406 405 dump_stack(); \ 407 406 } while (0) 408 407 408 + #define snd_BUG_ON(cond) WARN((cond), "BUG? (%s)\n", __stringify(cond)) 409 + 409 410 #else /* !CONFIG_SND_DEBUG */ 410 411 411 412 #define snd_printd(fmt, args...) /* nothing */ 412 413 #define snd_assert(expr, args...) (void)(expr) 413 414 #define snd_BUG() /* nothing */ 415 + #define snd_BUG_ON(cond) ({/*(void)(cond);*/ 0;}) /* always false */ 414 416 415 417 #endif /* CONFIG_SND_DEBUG */ 416 418