All of lore.kernel.org
 help / color / mirror / Atom feed
* RFC: snd_card_create() function
@ 2009-01-12 14:35 Takashi Iwai
  2009-01-12 14:42 ` James Courtier-Dutton
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Takashi Iwai @ 2009-01-12 14:35 UTC (permalink / raw)
  To: alsa-devel

Hi,

so far, we use snd_card_new() function to create a card instance.
A known problem regarding this API is that it doesn't return a proper
error code, thus the probe callback always returns -ENOMEM (or
whatever the driver defines) no matter which error occurred actually.
A typical case is the card slot conflict.  Even in such a case, it
returns -ENOMEM, which may mislead the user.

For fixing this situation, I'd like to convert from snd_card_new() to
a new function, snd_card_create():

int snd_card_create(int idx, const char *id,
		    struct module *module, int extra_size,
		    struct snd_card **card_ret);

and provides snd_card_new() as a wrapper with deprecated flag:

static inline __deprecated
struct snd_card *snd_card_new(int idx, const char *id,
			      struct module *module, int extra_size)
{
	struct snd_card *card;
	if (snd_card_create(idx, id, module, extra_size, &card) < 0)
		return NULL;
	return card;
}

The merit of creating a new function is that the older and out-of-tree
codes (like xfi) work without modification.  There is alternative
option, namely to use PTR_ERR() and keep the function as is.
But this has no advantage in practice -- it can't detect the old API
at build time, and it may Oops.

The preliminary patches are found in test/snd_card_new-err branch
of sound git tree:
  git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6.git test/snd_card_new-err

If anyone finds problems with this, please let me know.


thanks,

Takashi

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2009-01-15 13:05 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-01-12 14:35 RFC: snd_card_create() function Takashi Iwai
2009-01-12 14:42 ` James Courtier-Dutton
2009-01-12 14:47   ` Takashi Iwai
2009-01-12 15:06     ` James Courtier-Dutton
2009-01-12 15:25       ` Takashi Iwai
2009-01-14 15:14         ` James Courtier-Dutton
2009-01-14 15:31           ` Takashi Iwai
2009-01-12 16:08 ` Krzysztof Helt
2009-01-12 16:12   ` Takashi Iwai
2009-01-15 13:05 ` Takashi Iwai

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.