Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7c22f1aa authored by Takashi Iwai's avatar Takashi Iwai Committed by Jaroslav Kysela
Browse files

[ALSA] Remove snd_runtime_check() macro



Remove snd_runtime_check() macro.
This macro worsens the readability of codes.  They should be either
normal if() or removable asserts.

Also, the assert displays stack-dump, instead of only the last caller
pointer.

Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent f01cc521
Loading
Loading
Loading
Loading
+12 −21
Original line number Original line Diff line number Diff line
@@ -18,8 +18,8 @@
      </affiliation>
      </affiliation>
     </author>
     </author>


     <date>March 6, 2005</date>
     <date>October 6, 2005</date>
     <edition>0.3.4</edition>
     <edition>0.3.5</edition>


    <abstract>
    <abstract>
      <para>
      <para>
@@ -30,7 +30,7 @@


    <legalnotice>
    <legalnotice>
    <para>
    <para>
    Copyright (c) 2002-2004  Takashi Iwai <email>tiwai@suse.de</email>
    Copyright (c) 2002-2005  Takashi Iwai <email>tiwai@suse.de</email>
    </para>
    </para>


    <para>
    <para>
@@ -5998,32 +5998,23 @@ struct _snd_pcm_runtime {
        The first argument is the expression to evaluate, and the
        The first argument is the expression to evaluate, and the
      second argument is the action if it fails. When
      second argument is the action if it fails. When
      <constant>CONFIG_SND_DEBUG</constant>, is set, it will show an
      <constant>CONFIG_SND_DEBUG</constant>, is set, it will show an
      error message such as <computeroutput>BUG? (xxx) (called from
      error message such as <computeroutput>BUG? (xxx)</computeroutput>
      yyy)</computeroutput>. When no debug flag is set, this is
      together with stack trace.
      ignored. 
      </para>
      </para>
    </section>

    <section id="useful-functions-snd-runtime-check">
      <title><function>snd_runtime_check()</function></title>
      <para>
      <para>
        This macro is quite similar with
	 When no debug flag is set, this macro is ignored. 
      <function>snd_assert()</function>. Unlike
      <function>snd_assert()</function>, the expression is always
      evaluated regardless of
      <constant>CONFIG_SND_DEBUG</constant>. When
      <constant>CONFIG_SND_DEBUG</constant> is set, the macro will
      show a message like <computeroutput>ERROR (xx) (called from
      yyy)</computeroutput>. 
      </para>
      </para>
    </section>
    </section>


    <section id="useful-functions-snd-bug">
    <section id="useful-functions-snd-bug">
      <title><function>snd_BUG()</function></title>
      <title><function>snd_BUG()</function></title>
      <para>
      <para>
        It calls <function>snd_assert(0,)</function> -- that is, just
        It shows <computeroutput>BUG?</computeroutput> message and
      prints the error message at the point. It's useful to show that
      stack trace as well as <function>snd_assert</function> at the point.
      a fatal error happens there. 
      It's useful to show that a fatal error happens there. 
      </para>
      <para>
	 When no debug flag is set, this macro is ignored. 
      </para>
      </para>
    </section>
    </section>
  </chapter>
  </chapter>
+11 −23
Original line number Original line Diff line number Diff line
@@ -431,32 +431,22 @@ void snd_verbose_printd(const char *file, int line, const char *format, ...)
 */
 */
#define snd_assert(expr, args...) do {					\
#define snd_assert(expr, args...) do {					\
	if (unlikely(!(expr))) {					\
	if (unlikely(!(expr))) {					\
		snd_printk(KERN_ERR "BUG? (%s) (called from %p)\n", __ASTRING__(expr), __builtin_return_address(0));\
		snd_printk(KERN_ERR "BUG? (%s)\n", __ASTRING__(expr));	\
		dump_stack();						\
		args;							\
		args;							\
	}								\
	}								\
} while (0)
} while (0)
/**

 * snd_runtime_check - run-time assertion macro
#define snd_BUG() do {				\
 * @expr: expression
	snd_printk(KERN_ERR "BUG?\n");		\
 * @args...: the action
	dump_stack();				\
 *
 * This macro checks the expression in run-time and invokes the commands
 * given in the rest arguments if the assertion is failed.
 * Unlike snd_assert(), the action commands are executed even if
 * CONFIG_SND_DEBUG is not set but without any error messages.
 */
#define snd_runtime_check(expr, args...) do {\
	if (unlikely(!(expr))) {				\
		snd_printk(KERN_ERR "ERROR (%s) (called from %p)\n", __ASTRING__(expr), __builtin_return_address(0));\
		args;\
	}\
} while (0)
} while (0)


#else /* !CONFIG_SND_DEBUG */
#else /* !CONFIG_SND_DEBUG */


#define snd_printd(fmt, args...)	/* nothing */
#define snd_printd(fmt, args...)	/* nothing */
#define snd_assert(expr, args...)	(void)(expr)
#define snd_assert(expr, args...)	(void)(expr)
#define snd_runtime_check(expr, args...) do { if (!(expr)) { args; } } while (0)
#define snd_BUG()			/* nothing */


#endif /* CONFIG_SND_DEBUG */
#endif /* CONFIG_SND_DEBUG */


@@ -473,8 +463,6 @@ void snd_verbose_printd(const char *file, int line, const char *format, ...)
#define snd_printdd(format, args...) /* nothing */
#define snd_printdd(format, args...) /* nothing */
#endif
#endif


#define snd_BUG() snd_assert(0, )



static inline void snd_timestamp_now(struct timespec *tstamp, int timespec)
static inline void snd_timestamp_now(struct timespec *tstamp, int timespec)
{
{
+9 −9
Original line number Original line Diff line number Diff line
@@ -144,7 +144,7 @@ void snd_ctl_notify(snd_card_t *card, unsigned int mask, snd_ctl_elem_id_t *id)
	snd_ctl_file_t *ctl;
	snd_ctl_file_t *ctl;
	snd_kctl_event_t *ev;
	snd_kctl_event_t *ev;
	
	
	snd_runtime_check(card != NULL && id != NULL, return);
	snd_assert(card != NULL && id != NULL, return);
	read_lock(&card->ctl_files_rwlock);
	read_lock(&card->ctl_files_rwlock);
#if defined(CONFIG_SND_MIXER_OSS) || defined(CONFIG_SND_MIXER_OSS_MODULE)
#if defined(CONFIG_SND_MIXER_OSS) || defined(CONFIG_SND_MIXER_OSS_MODULE)
	card->mixer_oss_change_count++;
	card->mixer_oss_change_count++;
@@ -193,8 +193,8 @@ snd_kcontrol_t *snd_ctl_new(snd_kcontrol_t * control, unsigned int access)
	snd_kcontrol_t *kctl;
	snd_kcontrol_t *kctl;
	unsigned int idx;
	unsigned int idx;
	
	
	snd_runtime_check(control != NULL, return NULL);
	snd_assert(control != NULL, return NULL);
	snd_runtime_check(control->count > 0, return NULL);
	snd_assert(control->count > 0, return NULL);
	kctl = kzalloc(sizeof(*kctl) + sizeof(snd_kcontrol_volatile_t) * control->count, GFP_KERNEL);
	kctl = kzalloc(sizeof(*kctl) + sizeof(snd_kcontrol_volatile_t) * control->count, GFP_KERNEL);
	if (kctl == NULL)
	if (kctl == NULL)
		return NULL;
		return NULL;
@@ -220,7 +220,7 @@ snd_kcontrol_t *snd_ctl_new1(const snd_kcontrol_new_t * ncontrol, void *private_
	snd_kcontrol_t kctl;
	snd_kcontrol_t kctl;
	unsigned int access;
	unsigned int access;
	
	
	snd_runtime_check(ncontrol != NULL, return NULL);
	snd_assert(ncontrol != NULL, return NULL);
	snd_assert(ncontrol->info != NULL, return NULL);
	snd_assert(ncontrol->info != NULL, return NULL);
	memset(&kctl, 0, sizeof(kctl));
	memset(&kctl, 0, sizeof(kctl));
	kctl.id.iface = ncontrol->iface;
	kctl.id.iface = ncontrol->iface;
@@ -309,7 +309,7 @@ int snd_ctl_add(snd_card_t * card, snd_kcontrol_t * kcontrol)
	snd_ctl_elem_id_t id;
	snd_ctl_elem_id_t id;
	unsigned int idx;
	unsigned int idx;


	snd_runtime_check(card != NULL && kcontrol != NULL, return -EINVAL);
	snd_assert(card != NULL && kcontrol != NULL, return -EINVAL);
	snd_assert(kcontrol->info != NULL, return -EINVAL);
	snd_assert(kcontrol->info != NULL, return -EINVAL);
	id = kcontrol->id;
	id = kcontrol->id;
	down_write(&card->controls_rwsem);
	down_write(&card->controls_rwsem);
@@ -355,7 +355,7 @@ int snd_ctl_remove(snd_card_t * card, snd_kcontrol_t * kcontrol)
	snd_ctl_elem_id_t id;
	snd_ctl_elem_id_t id;
	unsigned int idx;
	unsigned int idx;


	snd_runtime_check(card != NULL && kcontrol != NULL, return -EINVAL);
	snd_assert(card != NULL && kcontrol != NULL, return -EINVAL);
	list_del(&kcontrol->list);
	list_del(&kcontrol->list);
	card->controls_count -= kcontrol->count;
	card->controls_count -= kcontrol->count;
	id = kcontrol->id;
	id = kcontrol->id;
@@ -468,7 +468,7 @@ snd_kcontrol_t *snd_ctl_find_numid(snd_card_t * card, unsigned int numid)
	struct list_head *list;
	struct list_head *list;
	snd_kcontrol_t *kctl;
	snd_kcontrol_t *kctl;


	snd_runtime_check(card != NULL && numid != 0, return NULL);
	snd_assert(card != NULL && numid != 0, return NULL);
	list_for_each(list, &card->controls) {
	list_for_each(list, &card->controls) {
		kctl = snd_kcontrol(list);
		kctl = snd_kcontrol(list);
		if (kctl->id.numid <= numid && kctl->id.numid + kctl->count > numid)
		if (kctl->id.numid <= numid && kctl->id.numid + kctl->count > numid)
@@ -494,7 +494,7 @@ snd_kcontrol_t *snd_ctl_find_id(snd_card_t * card, snd_ctl_elem_id_t *id)
	struct list_head *list;
	struct list_head *list;
	snd_kcontrol_t *kctl;
	snd_kcontrol_t *kctl;


	snd_runtime_check(card != NULL && id != NULL, return NULL);
	snd_assert(card != NULL && id != NULL, return NULL);
	if (id->numid != 0)
	if (id->numid != 0)
		return snd_ctl_find_numid(card, id->numid);
		return snd_ctl_find_numid(card, id->numid);
	list_for_each(list, &card->controls) {
	list_for_each(list, &card->controls) {
@@ -1215,7 +1215,7 @@ static int _snd_ctl_unregister_ioctl(snd_kctl_ioctl_func_t fcn, struct list_head
	struct list_head *list;
	struct list_head *list;
	snd_kctl_ioctl_t *p;
	snd_kctl_ioctl_t *p;


	snd_runtime_check(fcn != NULL, return -EINVAL);
	snd_assert(fcn != NULL, return -EINVAL);
	down_write(&snd_ioctl_rwsem);
	down_write(&snd_ioctl_rwsem);
	list_for_each(list, lists) {
	list_for_each(list, lists) {
		p = list_entry(list, snd_kctl_ioctl_t, list);
		p = list_entry(list, snd_kctl_ioctl_t, list);
+3 −2
Original line number Original line Diff line number Diff line
@@ -420,7 +420,7 @@ int snd_card_register(snd_card_t * card)
	int err;
	int err;
	snd_info_entry_t *entry;
	snd_info_entry_t *entry;


	snd_runtime_check(card != NULL, return -EINVAL);
	snd_assert(card != NULL, return -EINVAL);
	if ((err = snd_device_register_all(card)) < 0)
	if ((err = snd_device_register_all(card)) < 0)
		return err;
		return err;
	write_lock(&snd_card_rwlock);
	write_lock(&snd_card_rwlock);
@@ -524,7 +524,8 @@ int __init snd_card_info_init(void)
	snd_info_entry_t *entry;
	snd_info_entry_t *entry;


	entry = snd_info_create_module_entry(THIS_MODULE, "cards", NULL);
	entry = snd_info_create_module_entry(THIS_MODULE, "cards", NULL);
	snd_runtime_check(entry != NULL, return -ENOMEM);
	if (! entry)
		return -ENOMEM;
	entry->c.text.read_size = PAGE_SIZE;
	entry->c.text.read_size = PAGE_SIZE;
	entry->c.text.read = snd_card_info_read;
	entry->c.text.read = snd_card_info_read;
	if (snd_info_register(entry) < 0) {
	if (snd_info_register(entry) < 0) {
+41 −18
Original line number Original line Diff line number Diff line
@@ -521,9 +521,13 @@ static void snd_mixer_oss_get_volume1_vol(snd_mixer_oss_file_t *fmixer,
	uctl = kzalloc(sizeof(*uctl), GFP_KERNEL);
	uctl = kzalloc(sizeof(*uctl), GFP_KERNEL);
	if (uinfo == NULL || uctl == NULL)
	if (uinfo == NULL || uctl == NULL)
		goto __unalloc;
		goto __unalloc;
	snd_runtime_check(!kctl->info(kctl, uinfo), goto __unalloc);
	if (kctl->info(kctl, uinfo))
	snd_runtime_check(!kctl->get(kctl, uctl), goto __unalloc);
		goto __unalloc;
	snd_runtime_check(uinfo->type != SNDRV_CTL_ELEM_TYPE_BOOLEAN || uinfo->value.integer.min != 0 || uinfo->value.integer.max != 1, goto __unalloc);
	if (kctl->get(kctl, uctl))
		goto __unalloc;
	if (uinfo->type == SNDRV_CTL_ELEM_TYPE_BOOLEAN &&
	    uinfo->value.integer.min == 0 && uinfo->value.integer.max == 1)
		goto __unalloc;
	*left = snd_mixer_oss_conv1(uctl->value.integer.value[0], uinfo->value.integer.min, uinfo->value.integer.max, &pslot->volume[0]);
	*left = snd_mixer_oss_conv1(uctl->value.integer.value[0], uinfo->value.integer.min, uinfo->value.integer.max, &pslot->volume[0]);
	if (uinfo->count > 1)
	if (uinfo->count > 1)
		*right = snd_mixer_oss_conv1(uctl->value.integer.value[1], uinfo->value.integer.min, uinfo->value.integer.max, &pslot->volume[1]);
		*right = snd_mixer_oss_conv1(uctl->value.integer.value[1], uinfo->value.integer.min, uinfo->value.integer.max, &pslot->volume[1]);
@@ -555,8 +559,10 @@ static void snd_mixer_oss_get_volume1_sw(snd_mixer_oss_file_t *fmixer,
	uctl = kzalloc(sizeof(*uctl), GFP_KERNEL);
	uctl = kzalloc(sizeof(*uctl), GFP_KERNEL);
	if (uinfo == NULL || uctl == NULL)
	if (uinfo == NULL || uctl == NULL)
		goto __unalloc;
		goto __unalloc;
	snd_runtime_check(!kctl->info(kctl, uinfo), goto __unalloc);
	if (kctl->info(kctl, uinfo))
	snd_runtime_check(!kctl->get(kctl, uctl), goto __unalloc);
		goto __unalloc;
	if (kctl->get(kctl, uctl))
		goto __unalloc;
	if (!uctl->value.integer.value[0]) {
	if (!uctl->value.integer.value[0]) {
		*left = 0;
		*left = 0;
		if (uinfo->count == 1)
		if (uinfo->count == 1)
@@ -616,12 +622,16 @@ static void snd_mixer_oss_put_volume1_vol(snd_mixer_oss_file_t *fmixer,
	uctl = kzalloc(sizeof(*uctl), GFP_KERNEL);
	uctl = kzalloc(sizeof(*uctl), GFP_KERNEL);
	if (uinfo == NULL || uctl == NULL)
	if (uinfo == NULL || uctl == NULL)
		goto __unalloc;
		goto __unalloc;
	snd_runtime_check(!kctl->info(kctl, uinfo), goto __unalloc);
	if (kctl->info(kctl, uinfo))
	snd_runtime_check(uinfo->type != SNDRV_CTL_ELEM_TYPE_BOOLEAN || uinfo->value.integer.min != 0 || uinfo->value.integer.max != 1, goto __unalloc);
		goto __unalloc;
	if (uinfo->type == SNDRV_CTL_ELEM_TYPE_BOOLEAN &&
	    uinfo->value.integer.min == 0 && uinfo->value.integer.max == 1)
		goto __unalloc;
	uctl->value.integer.value[0] = snd_mixer_oss_conv2(left, uinfo->value.integer.min, uinfo->value.integer.max);
	uctl->value.integer.value[0] = snd_mixer_oss_conv2(left, uinfo->value.integer.min, uinfo->value.integer.max);
	if (uinfo->count > 1)
	if (uinfo->count > 1)
		uctl->value.integer.value[1] = snd_mixer_oss_conv2(right, uinfo->value.integer.min, uinfo->value.integer.max);
		uctl->value.integer.value[1] = snd_mixer_oss_conv2(right, uinfo->value.integer.min, uinfo->value.integer.max);
	snd_runtime_check((res = kctl->put(kctl, uctl)) >= 0, goto __unalloc);
	if ((res = kctl->put(kctl, uctl)) < 0)
		goto __unalloc;
	if (res > 0)
	if (res > 0)
		snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE, &kctl->id);
		snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE, &kctl->id);
      __unalloc:
      __unalloc:
@@ -653,7 +663,8 @@ static void snd_mixer_oss_put_volume1_sw(snd_mixer_oss_file_t *fmixer,
	uctl = kzalloc(sizeof(*uctl), GFP_KERNEL);
	uctl = kzalloc(sizeof(*uctl), GFP_KERNEL);
	if (uinfo == NULL || uctl == NULL)
	if (uinfo == NULL || uctl == NULL)
		goto __unalloc;
		goto __unalloc;
	snd_runtime_check(!kctl->info(kctl, uinfo), goto __unalloc);
	if (kctl->info(kctl, uinfo))
		goto __unalloc;
	if (uinfo->count > 1) {
	if (uinfo->count > 1) {
		uctl->value.integer.value[0] = left > 0 ? 1 : 0;
		uctl->value.integer.value[0] = left > 0 ? 1 : 0;
		uctl->value.integer.value[route ? 3 : 1] = right > 0 ? 1 : 0;
		uctl->value.integer.value[route ? 3 : 1] = right > 0 ? 1 : 0;
@@ -664,7 +675,8 @@ static void snd_mixer_oss_put_volume1_sw(snd_mixer_oss_file_t *fmixer,
	} else {
	} else {
		uctl->value.integer.value[0] = (left > 0 || right > 0) ? 1 : 0;
		uctl->value.integer.value[0] = (left > 0 || right > 0) ? 1 : 0;
	}
	}
	snd_runtime_check((res = kctl->put(kctl, uctl)) >= 0, goto __unalloc);
	if ((res = kctl->put(kctl, uctl)) < 0)
		goto __unalloc;
	if (res > 0)
	if (res > 0)
		snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE, &kctl->id);
		snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE, &kctl->id);
      __unalloc:
      __unalloc:
@@ -776,9 +788,14 @@ static int snd_mixer_oss_get_recsrc2(snd_mixer_oss_file_t *fmixer, unsigned int
	}
	}
	down_read(&card->controls_rwsem);
	down_read(&card->controls_rwsem);
	kctl = snd_mixer_oss_test_id(mixer, "Capture Source", 0);
	kctl = snd_mixer_oss_test_id(mixer, "Capture Source", 0);
	snd_runtime_check(kctl != NULL, err = -ENOENT; goto __unlock);
	if (! kctl) {
	snd_runtime_check(!(err = kctl->info(kctl, uinfo)), goto __unlock);
		err = -ENOENT;
	snd_runtime_check(!(err = kctl->get(kctl, uctl)), goto __unlock);
		goto __unlock;
	}
	if ((err = kctl->info(kctl, uinfo)) < 0)
		goto __unlock;
	if ((err = kctl->get(kctl, uctl)) < 0)
		goto __unlock;
	for (idx = 0; idx < 32; idx++) {
	for (idx = 0; idx < 32; idx++) {
		if (!(mixer->mask_recsrc & (1 << idx)))
		if (!(mixer->mask_recsrc & (1 << idx)))
			continue;
			continue;
@@ -821,8 +838,12 @@ static int snd_mixer_oss_put_recsrc2(snd_mixer_oss_file_t *fmixer, unsigned int
	}
	}
	down_read(&card->controls_rwsem);
	down_read(&card->controls_rwsem);
	kctl = snd_mixer_oss_test_id(mixer, "Capture Source", 0);
	kctl = snd_mixer_oss_test_id(mixer, "Capture Source", 0);
	snd_runtime_check(kctl != NULL, err = -ENOENT; goto __unlock);
	if (! kctl) {
	snd_runtime_check(!(err = kctl->info(kctl, uinfo)), goto __unlock);
		err = -ENOENT;
		goto __unlock;
	}
	if ((err = kctl->info(kctl, uinfo)) < 0)
		goto __unlock;
	for (idx = 0; idx < 32; idx++) {
	for (idx = 0; idx < 32; idx++) {
		if (!(mixer->mask_recsrc & (1 << idx)))
		if (!(mixer->mask_recsrc & (1 << idx)))
			continue;
			continue;
@@ -836,10 +857,11 @@ static int snd_mixer_oss_put_recsrc2(snd_mixer_oss_file_t *fmixer, unsigned int
			break;
			break;
		slot = NULL;
		slot = NULL;
	}
	}
	snd_runtime_check(slot != NULL, goto __unlock);
	if (! slot)
		goto __unlock;
	for (idx = 0; idx < uinfo->count; idx++)
	for (idx = 0; idx < uinfo->count; idx++)
		uctl->value.enumerated.item[idx] = slot->capture_item;
		uctl->value.enumerated.item[idx] = slot->capture_item;
	snd_runtime_check((err = kctl->put(kctl, uctl)) >= 0, );
	err = kctl->put(kctl, uctl);
	if (err > 0)
	if (err > 0)
		snd_ctl_notify(fmixer->card, SNDRV_CTL_EVENT_MASK_VALUE, &kctl->id);
		snd_ctl_notify(fmixer->card, SNDRV_CTL_EVENT_MASK_VALUE, &kctl->id);
	err = 0;
	err = 0;
@@ -1008,7 +1030,8 @@ static int snd_mixer_oss_build_input(snd_mixer_oss_t *mixer, struct snd_mixer_os
	up_read(&mixer->card->controls_rwsem);
	up_read(&mixer->card->controls_rwsem);
	if (slot.present != 0) {
	if (slot.present != 0) {
		pslot = (struct slot *)kmalloc(sizeof(slot), GFP_KERNEL);
		pslot = (struct slot *)kmalloc(sizeof(slot), GFP_KERNEL);
		snd_runtime_check(pslot != NULL, return -ENOMEM);
		if (! pslot)
			return -ENOMEM;
		*pslot = slot;
		*pslot = slot;
		pslot->signature = SNDRV_MIXER_OSS_SIGNATURE;
		pslot->signature = SNDRV_MIXER_OSS_SIGNATURE;
		pslot->assigned = ptr;
		pslot->assigned = ptr;
Loading