]> git.baikalelectronics.ru Git - kernel.git/commit
xHCI: handle command after aborting the command ring
authorElric Fu <elricfu1@gmail.com>
Wed, 27 Jun 2012 08:55:43 +0000 (16:55 +0800)
committerSarah Sharp <sarah.a.sharp@linux.intel.com>
Thu, 13 Sep 2012 22:49:51 +0000 (15:49 -0700)
commit37be0dc20a384ebd5d807e91f50e2a350105ad7e
treea0c3d0261c91cff70a2bfa653ff4c37d23b4a9b0
parent7c1a6ad83b82ac09286901478f2222740282c12e
xHCI: handle command after aborting the command ring

According to xHCI spec section 4.6.1.1 and section 4.6.1.2,
after aborting a command on the command ring, xHC will
generate a command completion event with its completion
code set to Command Ring Stopped at least. If a command is
currently executing at the time of aborting a command, xHC
also generate a command completion event with its completion
code set to Command Abort. When the command ring is stopped,
software may remove, add, or rearrage Command Descriptors.

To cancel a command, software will initialize a command
descriptor for the cancel command, and add it into a
cancel_cmd_list of xhci. When the command ring is stopped,
software will find the command trbs described by command
descriptors in cancel_cmd_list and modify it to No Op
command. If software can't find the matched trbs, we can
think it had been finished.

This patch should be backported to kernels as old as 3.0, that contain
the commit 28bbb37fc072d0c231264f9c80e0550b2ebf71f1 "xhci: Add an
assertion to check for virt_dev=0 bug." That commit papers over a NULL
pointer dereference, and this patch fixes the underlying issue that
caused the NULL pointer dereference.

Signed-off-by: Elric Fu <elricfu1@gmail.com>
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Tested-by: Miroslav Sabljic <miroslav.sabljic@avl.com>
Cc: stable@vger.kernel.org
drivers/usb/host/xhci-ring.c