The following reply was made to PR kern/37884; it has been noted by GNATS.
From: "Jonathan A. Kollasch" <jakllsch%NetBSD.org@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc:
Subject: Re: kern/37884: nvidia ehci umass
Date: Wed, 26 May 2010 03:27:50 +0000
This bug can probably be traced to the unusual way we activate Queue
Heads.
We currently link the Queue Head into the Asynchronous List upon pipe
open. Then we use the method implemented in ehci_set_qh_qtd() to activate
the transaction. This is a somewhat risky method. The controller is
constantly reading from and writing to the chained-together Queue Heads
that we are writing to.
The ehci_set_qh_qtd() method of activation seems hard to derive from
the EHCI 1.0 specification. The apparent best-practice for activating
Queue Heads is to link/unlink them into/from the Asynchronous List.
Linux and FreeBSD (HPS stack) both appear follow this suggestion.
I've confirmed that the link/unlink method eliminates the problem
described in this PR. In the process of testing, it became apparent that
completely fixing this would amount to a somewhat noticable rototill of
the driver.