[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