summaryrefslogtreecommitdiffstats
path: root/drivers/usb/host/xhci.c
diff options
context:
space:
mode:
authorElric Fu <elricfu1@gmail.com>2012-06-27 16:55:43 +0800
committerSarah Sharp <sarah.a.sharp@linux.intel.com>2012-09-13 15:49:51 -0700
commitb63f4053cc8aa22a98e3f9a97845afe6c15d0a0d (patch)
treea0c3d0261c91cff70a2bfa653ff4c37d23b4a9b0 /drivers/usb/host/xhci.c
parent6e4468b9a0793dfb53eb80d9fe52c739b13b27fd (diff)
downloadop-kernel-dev-b63f4053cc8aa22a98e3f9a97845afe6c15d0a0d.zip
op-kernel-dev-b63f4053cc8aa22a98e3f9a97845afe6c15d0a0d.tar.gz
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 7ed603ecf8b68ab81f4c83097d3063d43ec73bb8 "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
Diffstat (limited to 'drivers/usb/host/xhci.c')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud