[alsa-devel] ALSA Control Questions (atomicity, error handling)
Daniel Mack
daniel at caiaq.de
Fri Dec 4 12:34:34 CET 2009
On Fri, Dec 04, 2009 at 10:31:06AM +0100, Tobias Schneider wrote:
> (for the interested ones, here is the code..)
One more thing: in case you intend to bring your code mainline, please
run scripts/checkpatch.pl on the patches before you submit. The sniplet
you posted has a number of style issues that should be fixed. In
particular, pay attention to indentation, comment style and parenthesis
positions - checkpatch.pl will help pointing out most if them.
Daniel
> static int snd_mychip_output_set_put(struct snd_kcontrol *kcontrol,
> struct snd_ctl_elem_value *ucontrol)
> {
> struct snd_mychip *mychip = snd_kcontrol_chip(kcontrol);
> int addr = kcontrol->private_value;
> short change = 0;
>
> spin_lock_irq(&mychip->mixer_lock);
> if (ucontrol->value.integer.value[0] != mychip->output_set[addr]) {
> if (dsp_setoutput(addr+1, ucontrol->value.integer.value[0]) >= 0)
> {
> mychip->output_set[addr] = ucontrol->value.integer.value[0];
> change = 1;
> }
> else // error sending signal
> {
> change = -EBUSY; // device or resource busy
> }
> }
> spin_unlock_irq(&mychip->mixer_lock);
> return change;
> }
>
> later on in the called function...
> // wait for reply via semaphore
> while(!end)
> {
> if (down_interruptible(&dsp_reply_sema)==-EINTR) // HERE WE GET
> BUG: scheduling while atomic: amixer/0x00000001/430 ...
> // waked by signal (terminate), leave thread
> printk(INFO "reply: catched signal\n");
> end=1;
> break;
> } printk(INFO "dsp_reply signaled (saved status =
> %i)\n",stDspReply.status);
> end=1;
> ...
> }
More information about the Alsa-devel
mailing list