From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com ([134.134.136.100]:5686 "EHLO mga07.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751972AbdCHJmt (ORCPT ); Wed, 8 Mar 2017 04:42:49 -0500 From: Felipe Balbi To: Thinh Nguyen Cc: Linux USB , "stable\@vger.kernel.org" , John Youn Subject: RE: [PATCH] usb: dwc3: gadget: skip Set/Clear Halt when invalid In-Reply-To: <30102591E157244384E984126FC3CB4F2FF567F3@US01WEMBX2.internal.synopsys.com> References: <20170119114034.15184-1-felipe.balbi@linux.intel.com> <30102591E157244384E984126FC3CB4F2FF567F3@US01WEMBX2.internal.synopsys.com> Date: Wed, 08 Mar 2017 11:29:35 +0200 Message-ID: <87vark15hc.fsf@linux.intel.com> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" Sender: stable-owner@vger.kernel.org List-ID: --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Hi Thinh, Thinh Nguyen writes: >> drivers/usb/dwc3/gadget.c | 5 +++++ >> 1 file changed, 5 insertions(+) >>=20 >> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c >> index 6faf484e5dfc..0a664d8eba3f 100644 >> --- a/drivers/usb/dwc3/gadget.c >> +++ b/drivers/usb/dwc3/gadget.c >> @@ -1379,6 +1379,9 @@ int __dwc3_gadget_ep_set_halt(struct dwc3_ep >> *dep, int value, int protocol) >> unsigned transfer_in_flight; >> unsigned started; >>=20 >> + if (dep->flags & DWC3_EP_STALL) >> + return 0; >> + >> if (dep->number > 1) >> trb =3D dwc3_ep_prev_trb(dep, dep->trb_enqueue); >> else >> @@ -1400,6 +1403,8 @@ int __dwc3_gadget_ep_set_halt(struct dwc3_ep >> *dep, int value, int protocol) >> else >> dep->flags |=3D DWC3_EP_STALL; >> } else { >> + if (!(dep->flags & DWC3_EP_STALL)) >> + return 0; >>=20 >> ret =3D dwc3_send_clear_stall_ep_cmd(dep); >> if (ret) >> -- >> 2.11.0.295.gd7dffce1ce >>=20 >> -- > > I encounter an issue when I test mainline with USB 3 CV MSC test and > bisected to this patch. > > Tester: USB 3 CV test (v2.1.3.0). > Function Driver: f_mass_storage > Reproducibility: always=20 > > The failure occurs under MSC Error Recovery Test (TD 1.4). > > Failure from the test sequence as follow (MSC compliance test spec) : > 1. Place the device in the desired starting state. > 2. Issue a Case 9 CBW (see Table 2) but with invalid signature of 0xDEADB= EEF. > 3. Issue several In requests to the Bulk-Only Data Interface Bulk In endp= oint. Verify a > STALL handshake is returned. If STALL handshake is not returned, skip to = step 11. > 4. Issue a Get_Status(endpoint) request targeting the Bulk-Only Data Inte= rface bulk In > endpoint. Verify that it completes normally, reports endpoint halt status. > > ***After this point the device idles for 10 seconds and resets. *** > > Test fails. I've been looking at this and based on sniffer and dwc3 tracepoints, it seems like dwc3 is behaving properly. The real issue seems to be that g_mass_storage isn't queueing a new request to IN endpoint. I'll continue debugging this and try to find a solution that doesn't involve reverting $subject. =2D-=20 balbi --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEElLzh7wn96CXwjh2IzL64meEamQYFAli/zv8ACgkQzL64meEa mQY2uQ//X6QUOtZH37avcj3UKoRmNkeki2/ykghO7SK1+Wi46Je53hPmYyO2BDrg 4dGM7VnRQu2dJRCA4c4kD2HZ4cH/nYncO+Dp/EGgwnk39Nud3zpAQYCejRq3JT4q PM2xaVhGqIvaVNhPAhyt1VAmSRLyqZepK/DMQORDhFEUAeHPx/kLCkj9Gnhe+jF9 4cmo/L9bJi9cYxIBrdGTyz0gF8Zuq3/OkEjnxMDHzvIv2QS1Ppg7qQiFEJJAadL/ RoYcB1humEjns54BFmAQ4kUBKI3TNQJZ6gxmtukBzQm99j0LhN/dW4ubQe4RL+Of llVZ2xncN/CrhhDMpoJxMPYBG/vBBFcU6vzVMc0YJD8ESGruQRf6lI4ue2OZ1CXe T0Joe8pvPgzemoOYH/IqbYp8EoMqwomg0hUovPkXJDHvTejfS5jgEY25rEhZhX5D OFZPdXyVWVo9Jjzu2cdnkwh3kzgK2O4pq98E8cARIlszKY/6dSZGADUfnaAodzAX Lp4gAy/5WDtPAdvZGMV6Oe/mmXjP1riE/jtB0tVWKhSdo/uO2vFer8/ZFh7NnrQ+ BatO4oratmYMzcrp85MBoXLvvhRWS4csc2jv5ukH9IOKqAC64Q7LXE8JrdZCS2L6 +zgudJRTTuHDesTZO++N0gOZdsJZWO8mKNAOi9fvTAqCGZLMwDc= =fTk2 -----END PGP SIGNATURE----- --=-=-=--