From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Subject: Re: [PATCH 1/1] usb: xhci: hold lock over xhci_abort_cmd_ring() To: Lu Baolu References: <1482475583-18030-1-git-send-email-baolu.lu@linux.intel.com> <1482475583-18030-2-git-send-email-baolu.lu@linux.intel.com> Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org From: Mathias Nyman Message-ID: <585D15A2.2000909@linux.intel.com> Date: Fri, 23 Dec 2016 14:16:34 +0200 MIME-Version: 1.0 In-Reply-To: <1482475583-18030-2-git-send-email-baolu.lu@linux.intel.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: On 23.12.2016 08:46, Lu Baolu wrote: > In command timer function, xhci_handle_command_timeout(), xhci->lock > is unlocked before call into xhci_abort_cmd_ring(). This might cause > race between the timer function and the event handler. > > The xhci_abort_cmd_ring() function sets the CMD_RING_ABORT bit in the > command register and polling it until the setting takes effect. A stop > command ring event might be handled between writing the abort bit and > polling for it. The event handler will restart the command ring, which > causes the failure of polling, and we ever believed that we failed to > stop it. > > As a bonus, this also fixes some issues of calling functions without > locking in xhci_handle_command_timeout(). > Did the same thing, moved the unlock to cover also abort_cmd_ring(), but this one takes care of locking the command ring cleanup as well so I'll pick up this instead -Mathias