From: Mathias Nyman <mathias.nyman@linux.intel.com>
To: Thinh Nguyen <Thinh.Nguyen@synopsys.com>,
Dayu Jiang <jiangdayu@xiaomi.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Mathias Nyman <mathias.nyman@intel.com>,
Longfang Liu <liulongfang@huawei.com>,
"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
yudongbin <yudongbin@xiaomi.com>, guhuinan <guhuinan@xiaomi.com>,
chenyu45 <chenyu45@xiaomi.com>,
mahongwei3 <mahongwei3@xiaomi.com>,
Niklas Neronin <niklas.neronin@linux.intel.com>
Subject: Re: [PATCH] usb: xhci: add xhci_halt() for HCE Handling
Date: Fri, 27 Feb 2026 11:43:45 +0200 [thread overview]
Message-ID: <9113319a-b82c-42c7-ba1a-19113a5edb80@linux.intel.com> (raw)
In-Reply-To: <20260226181715.ofgjiq3iq7d7dx6y@synopsys.com>
On 2/26/26 20:17, Thinh Nguyen wrote:
> On Thu, Feb 26, 2026, Mathias Nyman wrote:
>> On 2/26/26 11:27, Dayu Jiang wrote:
>>> Hi Greg,
>>>
>>> I have updated the changelog text as requested and resubmitted the patch.
>>> https://urldefense.com/v3/__https://lore.kernel.org/linux-usb/20260128100746.561626-1-jiangdayu@xiaomi.com/__;!!A4F2R9G_pg!ZSJNDKyOinm26qngopLW-axiQtwDAMely4bDqtqYDGv1ErWCtS6kZ6ZamdiKoZKuCyCk0IxMQK5g625GEIxYWFzKpAEiCUq7$
>>> Please kindly review it and let me know if it is acceptable now.
>>
>> I'll send it forward, but changed the commit message.
>> Does this modified version still describe the case accurately:
>>
>> usb: xhci: Prevent interrupt storm on host controller error (HCE)
>>
>> The xHCI controller reports a Host Controller Error (HCE) in UAS Storage
>> Device plug/unplug scenarios on Android devices, which is checked in
>> xhci_irq() function and causes an interrupt storm (since the interrupt
>> isn’t cleared), leading to severe system-level faults.
>>
>> When the xHC controller reports HCE in the interrupt handler, the driver
>> only logs a warning and assumes xHC activity will stop. The interrupt storm
>> does however continue until driver manually disables xHC interrupt and
>> stops the controller by calling xhci_halt().
>>
>> The change is made in xhci_irq() function where STS_HCE status is
>> checked, mirroring the existing error handling pattern used for
>> STS_FATAL errors.
>>
>> This only fixes the interrupt storm. Proper HCE recovery requires resetting
>> and re-initializing the xHC.
>>
>
> The controller is halted if there's an error like HCE. It's odd to try
> to "halt" it again. Not sure how this will impact for other controllers.
This is why I changed the commit message from:
"When the xHCI controller reports HCE in the interrupt handler, the driver
currently only logs a warning and continues execution. However, HCE
indicates a critical hardware failure that requires the controller to be
halted. This ensures the controller is in a consistent state and prevents
further operations on failed hardware."
to:
"When the xHC controller reports HCE in the interrupt handler, the driver
only logs a warning and assumes xHC activity will stop. The interrupt storm
does however continue until driver manually disables xHC interrupt and
stops the controller by calling xhci_halt()."
I can clarify it further by stating that .."assumes xHC activity will stop
as stated in xHCI spec. On some xHC controllers an interrupt storm continues after
HCE error, and only ceases after manually"..
The host is messed up at this point, and we are not recovering it. I don't think
there is any harm in a manual halt at this stage.
> Even if we don't have the full HCE recovery implemented, did we try to
> just do HCRST, which is the first step of the recovery?
Specs state that HCRST might re-trigger the HCE if it's due to a "hard" fault,
and driver needs to take action to prevent a HCE - HCRST recovery loop.
HCRST will clear all registers, so we need to reinitialize everything here,
write back addresses of event rings, command rings, DCBAA, scratchpads
dequeue pointers etc.
I support taking this fix to prevent the interrupt storm, an issue seen in real
life. And then solve proper recovery later.
Niklas is actually working on decoupling memory allocation and xHC register
initialization which will help future HCE recovery work.
Thanks
Mathias
next prev parent reply other threads:[~2026-02-27 9:43 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-27 11:04 jiangdayu
2026-01-27 11:22 ` Greg Kroah-Hartman
2026-01-28 8:48 ` Dayu Jiang
2026-01-28 8:56 ` Greg Kroah-Hartman
2026-02-26 9:27 ` Dayu Jiang
2026-02-26 16:44 ` Mathias Nyman
2026-02-26 18:17 ` Thinh Nguyen
2026-02-27 7:26 ` Dayu Jiang
2026-02-28 0:22 ` Thinh Nguyen
2026-02-27 9:43 ` Mathias Nyman [this message]
2026-02-27 11:05 ` Michal Pecio
2026-02-28 0:06 ` Thinh Nguyen
2026-02-28 0:18 ` Thinh Nguyen
2026-02-27 7:33 ` Dayu Jiang
2026-01-27 12:25 ` Mathias Nyman
2026-01-28 8:53 ` Dayu Jiang
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=9113319a-b82c-42c7-ba1a-19113a5edb80@linux.intel.com \
--to=mathias.nyman@linux.intel.com \
--cc=Thinh.Nguyen@synopsys.com \
--cc=chenyu45@xiaomi.com \
--cc=gregkh@linuxfoundation.org \
--cc=guhuinan@xiaomi.com \
--cc=jiangdayu@xiaomi.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=liulongfang@huawei.com \
--cc=mahongwei3@xiaomi.com \
--cc=mathias.nyman@intel.com \
--cc=niklas.neronin@linux.intel.com \
--cc=yudongbin@xiaomi.com \
/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
Powered by JetHome