[alsa-devel] snd_mixart_send_msg / snd_mixart_send_msg_wait_notif

Rene Herman rene.herman at gmail.com
Tue Sep 18 15:13:42 CEST 2007


On 09/18/2007 02:40 PM, Takashi Iwai wrote:

> At Tue, 18 Sep 2007 13:54:23 +0200,
> Rene Herman wrote:
>> Hi.
>>
>> While looking through ALSA for schedule_timeout() calls, I ran into:
>>
>> int snd_mixart_send_msg(...)
>> {
>>
>> 	[ ... ]
>>
>>          set_current_state(TASK_UNINTERRUPTIBLE);
>>          add_wait_queue(&mgr->msg_sleep, &wait);
>>          spin_unlock_irq(&mgr->msg_lock);
>>          timeout = schedule_timeout(MSG_TIMEOUT_JIFFIES);
>>          remove_wait_queue(&mgr->msg_sleep, &wait);
>>
>>          if (! timeout) {
>>                  /* error - no ack */
>>                  mutex_unlock(&mgr->msg_mutex);
>>                  snd_printk(KERN_ERR "error: no reponse on msg %x\n", 
>> msg_frame);
>>                  return -EIO;
>>          }
>>
>> 	[ ... ]
>>
>> }
>>
>> and the same in snd_mixart_send_msg_wait_notif().
>>
>> I believe there to be  something wrong with this code. A schedule_timeout() 
>> in TASK_UNINTERRUPTIBLE is always going to return 0.
> 
> No, it returns the time left at the point it's woken up.
> *_uninterruptible() ignores signals but not wake_up() itself
> (otherwise it makes no sense).  The description in the kernel comment
> is misleading indeed.

And the wake_up() is done from interrupt here -- yes, okay, I understand 
now. Thanks.

(send email to digigram asking what happened to that alsa@ address by the way).

Rene.


More information about the Alsa-devel mailing list