All of lore.kernel.org
 help / color / mirror / Atom feed
From: 정재훈 <jh0801.jung@samsung.com>
To: "'Thinh Nguyen'" <Thinh.Nguyen@synopsys.com>,
	"'Felipe Balbi'" <balbi@kernel.org>,
	"'Greg Kroah-Hartman'" <gregkh@linuxfoundation.org>
Cc: "'open list:USB XHCI DRIVER'" <linux-usb@vger.kernel.org>,
	"'open list'" <linux-kernel@vger.kernel.org>,
	"'Seungchull Suh'" <sc.suh@samsung.com>,
	"'Daehwan Jung'" <dh10.jung@samsung.com>, <cpgs@samsung.com>,
	<cpgsproxy5@samsung.com>
Subject: RE: [PATCH] usb: dwc3: Add dwc3 lock for blocking interrupt storming
Date: Fri, 11 Mar 2022 10:29:27 +0900	[thread overview]
Message-ID: <016a01d834e7$72b11fd0$58135f70$@samsung.com> (raw)
In-Reply-To: <99eabe6c-8782-1bc6-e1d7-09b019cee65b@synopsys.com>

Hi.

> -----Original Message-----
> From: Thinh Nguyen [mailto:Thinh.Nguyen@synopsys.com]
> Sent: Thursday, March 10, 2022 11:14 AM
> To: JaeHun Jung; Felipe Balbi; Greg Kroah-Hartman
> Cc: open list:USB XHCI DRIVER; open list; Seungchull Suh; Daehwan Jung
> Subject: Re: [PATCH] usb: dwc3: Add dwc3 lock for blocking interrupt
> storming
> 
> Hi,
> 
> JaeHun Jung wrote:
> > Interrupt Storming occurred with a very low probability of occurrence.
> > The occurrence of the problem is estimated to be caused by a race
> > condition between the top half and bottom half of the interrupt service
> routine.
> > It was confirmed that variables have values that cannot be held when
> > ISR occurs through normal H / W irq.
> > =====================================================================
> > (struct dwc3_event_buffer *) ev_buf = 0xFFFFFF88DE6A0380 (
> > 	(void *) buf = 0xFFFFFFC01594E000,
> > 	(void *) cache = 0xFFFFFF88DDC14080,
> > 	(unsigned int) length = 4096,
> > 	(unsigned int) lpos = 0,
> > 	(unsigned int) count = 0, <<
> > 	(unsigned int) flags = 1, <<
> > =====================================================================
> > "evt->count=0" and "evt->flags=DWC3_EVENT_PENDING" cannot be set at
> > the same time.
> >
> > We estimate that a race condition occurred between dwc3_interrupt()
> > and dwc3_process_event_buf() called by
> > dwc3_gadget_process_pending_events().
> > So I try to block the race condition through spin_lock.
> 
> This looks like it needs a memory barrier. Would this work for you?
Maybe it could be. But "evt->count = 0;" is updated on dwc3_process_event_buf().
So, I think spin_lock is more clear routine for this issue.

> 
> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index
> c02e239978e0..a96c344b9f17 100644
> --- a/drivers/usb/dwc3/gadget.c
> +++ b/drivers/usb/dwc3/gadget.c
> @@ -5340,6 +5340,9 @@ static irqreturn_t dwc3_check_event_buf(struct
> dwc3_event_buffer *evt)
>                 return IRQ_HANDLED;
>         }
> 
> +       /* Make sure the event flags is updated */
> +       wmb();
> +
>         /*
>          * With PCIe legacy interrupt, test shows that top-half irq handler
> can
>          * be called again after HW interrupt deassertion. Check if bottom-
> half
> 
> 
> Thanks,
> Thinh


  reply	other threads:[~2022-03-11  1:29 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20220307052605epcas2p2b84f6db2642863ed61373070f508e200@epcas2p2.samsung.com>
2022-03-07  5:24 ` [PATCH] usb: dwc3: Add dwc3 lock for blocking interrupt storming JaeHun Jung
2022-03-10  2:13   ` Thinh Nguyen
2022-03-11  1:29     ` 정재훈 [this message]
2022-03-11  1:56       ` Thinh Nguyen
2022-03-11  2:43         ` 정재훈
2022-03-11  3:51           ` Thinh Nguyen
2022-03-11  3:55             ` Thinh Nguyen
2022-03-11  5:01               ` 정재훈
2022-03-14 23:18                 ` Thinh Nguyen

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='016a01d834e7$72b11fd0$58135f70$@samsung.com' \
    --to=jh0801.jung@samsung.com \
    --cc=Thinh.Nguyen@synopsys.com \
    --cc=balbi@kernel.org \
    --cc=cpgs@samsung.com \
    --cc=cpgsproxy5@samsung.com \
    --cc=dh10.jung@samsung.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=sc.suh@samsung.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.