From: Mathias Nyman <mathias.nyman@linux.intel.com>
To: Faisal Hassan <quic_faisalh@quicinc.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Mathias Nyman <mathias.nyman@intel.com>
Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
stable@vger.kernel.org
Subject: Re: [PATCH v2] xhci: Fix Link TRB DMA in command ring stopped completion event
Date: Tue, 22 Oct 2024 17:33:37 +0300 [thread overview]
Message-ID: <118041cf-07b1-457c-ad59-b9c8d48342b9@linux.intel.com> (raw)
In-Reply-To: <07744fc7-633f-477e-96e9-8f498a3b40e8@quicinc.com>
On 22.10.2024 15.34, Faisal Hassan wrote:
> Hi Mathias,
>
>> Do we in this COMP_COMMAND_RING_STOPPED case even need to check if
>> cmd_dma != (u64)cmd_dequeue_dma, or if command ring stopped on a link TRB?
>>
>> Could we just move the COMP_COMMAND_RING_STOPPED handling a bit earlier?
>>
>> if (cmd_comp_code == COMP_COMMAND_RING_STOPPED) {
>> complete_all(&xhci->cmd_ring_stop_completion);
>> return;
>> }
>>
>> If I remember correctly it should just turn aborted command TRBs into
>> no-ops,
>> and restart the command ring
>>
>
> Thanks for reviewing the changes!
>
> Yes, you’re right. As part of restarting the command ring, we just ring
> the doorbell.
>
> If we move the event handling without validating the dequeue pointer,
> wouldn’t it be a risk if we don’t check what the xHC is holding in its
> dequeue pointer? If we are not setting it, it starts from wherever it
> stopped. What if the dequeue pointer got corrupted or is not pointing to
> any of the TRBs in the command ring?
For that to happen the xHC host would have to corrupt its internal command
ring dequeue pointer. Not impossible, but an unlikely HW flaw, and a separate
issue. A case like that could be solved by writing the address of the next valid
(non-aborted) command to the CRCR register in xhci_handle_stopped_cmd_ring() before
ringing the doorbell.
The case you found where a command abort is not handled properly due to stopping
on a link TRB is a real xhci driver issue that would be nice to get solved.
For the COMP_COMMAND_RING_STOPPED case we don't really care that much
on which command it stopped, for other commands we do.
Thanks
Mathias
next prev parent reply other threads:[~2024-10-22 14:31 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-21 13:19 [PATCH v2] xhci: Fix Link TRB DMA in command ring stopped completion event Faisal Hassan
2024-10-21 15:39 ` Mathias Nyman
2024-10-22 12:34 ` Faisal Hassan
2024-10-22 14:33 ` Mathias Nyman [this message]
2024-10-22 15:27 ` Faisal Hassan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=118041cf-07b1-457c-ad59-b9c8d48342b9@linux.intel.com \
--to=mathias.nyman@linux.intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mathias.nyman@intel.com \
--cc=quic_faisalh@quicinc.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox