On Thu, Jan 05, 2017 at 03:35:15PM -0500, Ted Unangst wrote:
> Stefan Sperling wrote:
> > The problem seems to be that iwm's various tasks will sleep while waiting
> > for a device command to finish. If an ioctl process now sneaks in it will
> > trigger new commands to be sent in parallel, which the hardware does not 
> > like.
> > 
> > I see one way of fixing this: grab the ioctl lock in all of iwm's tasks.
> > With this patch I cannot reproduce the problem anymore.
> 
> This sounds a little backwards. The ioctl should queue a task, then wait for
> the result.
> 
> So you'd have:
> 
> iwm_ioctl() {
>       case SETRATES:
>               task.wait = "setrates"
>               task.params = whatever_else;
>               task_queue(&task);
>               tsleep(&task.wait);
> 
> iwm_setrates_task() {
>       /* do the thing */
>       if (task.wait)
>               wakeup(task.wait);
> 

A bit late, but I found this old thread today and have now committed
such a change. Thanks for suggesting this.

Reply via email to