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.