All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <gregkh@linuxfoundation.org>
To: Prashanth K <quic_prashk@quicinc.com>
Cc: Mathias Nyman <mathias.nyman@linux.intel.com>,
	linux-usb@vger.kernel.org, Hongyu Xie <xy521521@gmail.com>,
	stable@kernel.org, Hongyu Xie <xiehongyu1@kylinos.cn>,
	"# 5 . 15" <stable@vger.kernel.org>
Subject: Re: [PATCH 1/4] xhci: Keep interrupt disabled in initialization until host is running.
Date: Wed, 13 Sep 2023 09:16:36 +0200	[thread overview]
Message-ID: <2023091323-splinter-skinless-7c57@gregkh> (raw)
In-Reply-To: <42bcb910-7748-cf73-a40d-217c39a63dd1@quicinc.com>

On Wed, Sep 13, 2023 at 11:30:41AM +0530, Prashanth K wrote:
> 
> 
> On 23-06-22 04:49 pm, Mathias Nyman wrote:
> > From: Hongyu Xie <xy521521@gmail.com>
> > 
> > irq is disabled in xhci_quiesce(called by xhci_halt, with bit:2 cleared
> > in USBCMD register), but xhci_run(called by usb_add_hcd) re-enable it.
> > It's possible that you will receive thousands of interrupt requests
> > after initialization for 2.0 roothub. And you will get a lot of
> > warning like, "xHCI dying, ignoring interrupt. Shouldn't IRQs be
> > disabled?". This amount of interrupt requests will cause the entire
> > system to freeze.
> > This problem was first found on a device with ASM2142 host controller
> > on it.
> > 
> > [tidy up old code while moving it, reword header -Mathias]
> > Cc: stable@kernel.org
> > Signed-off-by: Hongyu Xie <xiehongyu1@kylinos.cn>
> > Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
> > ---
> >   drivers/usb/host/xhci.c | 35 ++++++++++++++++++++++-------------
> >   1 file changed, 22 insertions(+), 13 deletions(-)
> > 
> > diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
> > index 9ac56e9ffc64..cb99bed5f755 100644
> > --- a/drivers/usb/host/xhci.c
> > +++ b/drivers/usb/host/xhci.c
> > @@ -611,15 +611,37 @@ static int xhci_init(struct usb_hcd *hcd)
> >   static int xhci_run_finished(struct xhci_hcd *xhci)
> >   {
> > +	unsigned long	flags;
> > +	u32		temp;
> > +
> > +	/*
> > +	 * Enable interrupts before starting the host (xhci 4.2 and 5.5.2).
> > +	 * Protect the short window before host is running with a lock
> > +	 */
> > +	spin_lock_irqsave(&xhci->lock, flags);
> > +
> > +	xhci_dbg_trace(xhci, trace_xhci_dbg_init, "Enable interrupts");
> > +	temp = readl(&xhci->op_regs->command);
> > +	temp |= (CMD_EIE);
> > +	writel(temp, &xhci->op_regs->command);
> > +
> > +	xhci_dbg_trace(xhci, trace_xhci_dbg_init, "Enable primary interrupter");
> > +	temp = readl(&xhci->ir_set->irq_pending);
> > +	writel(ER_IRQ_ENABLE(temp), &xhci->ir_set->irq_pending);
> > +
> >   	if (xhci_start(xhci)) {
> >   		xhci_halt(xhci);
> > +		spin_unlock_irqrestore(&xhci->lock, flags);
> >   		return -ENODEV;
> >   	}
> > +
> >   	xhci->cmd_ring_state = CMD_RING_STATE_RUNNING;
> >   	if (xhci->quirks & XHCI_NEC_HOST)
> >   		xhci_ring_cmd_db(xhci);
> > +	spin_unlock_irqrestore(&xhci->lock, flags);
> > +
> >   	return 0;
> >   }
> > @@ -668,19 +690,6 @@ int xhci_run(struct usb_hcd *hcd)
> >   	temp |= (xhci->imod_interval / 250) & ER_IRQ_INTERVAL_MASK;
> >   	writel(temp, &xhci->ir_set->irq_control);
> > -	/* Set the HCD state before we enable the irqs */
> > -	temp = readl(&xhci->op_regs->command);
> > -	temp |= (CMD_EIE);
> > -	xhci_dbg_trace(xhci, trace_xhci_dbg_init,
> > -			"// Enable interrupts, cmd = 0x%x.", temp);
> > -	writel(temp, &xhci->op_regs->command);
> > -
> > -	temp = readl(&xhci->ir_set->irq_pending);
> > -	xhci_dbg_trace(xhci, trace_xhci_dbg_init,
> > -			"// Enabling event ring interrupter %p by writing 0x%x to irq_pending",
> > -			xhci->ir_set, (unsigned int) ER_IRQ_ENABLE(temp));
> > -	writel(ER_IRQ_ENABLE(temp), &xhci->ir_set->irq_pending);
> > -
> >   	if (xhci->quirks & XHCI_NEC_HOST) {
> >   		struct xhci_command *command;
> This is not available to older kernels [< 5.19]. Can we get this backported
> to 5.15 as well? Please let me know if there is some other way to do it.
> 
> Cc: <stable@vger.kernel.org> # 5.15


<formletter>

This is not the correct way to submit patches for inclusion in the
stable kernel tree.  Please read:
    https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
for how to do this properly.

</formletter>

  reply	other threads:[~2023-09-13  7:16 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-23 11:19 [PATCH 0/4] xhci fixes for usb-linus Mathias Nyman
2022-06-23 11:19 ` [PATCH 1/4] xhci: Keep interrupt disabled in initialization until host is running Mathias Nyman
2023-09-13  6:00   ` Prashanth K
2023-09-13  7:16     ` Greg KH [this message]
2022-06-23 11:19 ` [PATCH 2/4] xhci: turn off port power in shutdown Mathias Nyman
2022-07-19 13:42   ` Joey Corleone
2022-07-19 16:49     ` Mathias Nyman
2022-07-20 10:36     ` [PATCH 2/4] xhci: turn off port power in shutdown #forregzbot Thorsten Leemhuis
2022-09-29  9:27       ` Thorsten Leemhuis
2022-06-23 11:19 ` [PATCH 3/4] xhci-pci: Allow host runtime PM as default for Intel Raptor Lake xHCI Mathias Nyman
2022-06-23 11:19 ` [PATCH 4/4] xhci-pci: Allow host runtime PM as default for Intel Meteor " Mathias Nyman

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=2023091323-splinter-skinless-7c57@gregkh \
    --to=gregkh@linuxfoundation.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=mathias.nyman@linux.intel.com \
    --cc=quic_prashk@quicinc.com \
    --cc=stable@kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=xiehongyu1@kylinos.cn \
    --cc=xy521521@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.