Linux USB
 help / color / mirror / Atom feed
* [PATCH v4] usb: gadget: udc: Handle gadget_connect failure during bind operation
@ 2023-09-26 19:37 Krishna Kurapati
  2023-09-26 19:54 ` Alan Stern
  0 siblings, 1 reply; 6+ messages in thread
From: Krishna Kurapati @ 2023-09-26 19:37 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Alan Stern, Francesco Dolcini,
	Badhri Jagan Sridharan, Michael Grzeschik, Ivan Orlov
  Cc: linux-usb, linux-kernel, quic_ppratap, quic_wcheng, quic_jackp,
	Krishna Kurapati

In the event, gadget_connect call (which invokes pullup) fails,
propagate the error to udc bind operation which inturn sends the
error to configfs. The userspace can then retry enumeartion if
it chooses to.

Signed-off-by: Krishna Kurapati <quic_kriskura@quicinc.com>
---
Changes in v4: Fixed mutex locking imbalance during connect_control
failure
Link to v3: https://lore.kernel.org/all/20230510075252.31023-3-quic_kriskura@quicinc.com/

 drivers/usb/gadget/udc/core.c | 23 +++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core.c
index 7d49d8a0b00c..53af25a333a1 100644
--- a/drivers/usb/gadget/udc/core.c
+++ b/drivers/usb/gadget/udc/core.c
@@ -1125,12 +1125,16 @@ EXPORT_SYMBOL_GPL(usb_gadget_set_state);
 /* ------------------------------------------------------------------------- */
 
 /* Acquire connect_lock before calling this function. */
-static void usb_udc_connect_control_locked(struct usb_udc *udc) __must_hold(&udc->connect_lock)
+static int usb_udc_connect_control_locked(struct usb_udc *udc) __must_hold(&udc->connect_lock)
 {
+	int ret;
+
 	if (udc->vbus)
-		usb_gadget_connect_locked(udc->gadget);
+		ret = usb_gadget_connect_locked(udc->gadget);
 	else
-		usb_gadget_disconnect_locked(udc->gadget);
+		ret = usb_gadget_disconnect_locked(udc->gadget);
+
+	return ret;
 }
 
 static void vbus_event_work(struct work_struct *work)
@@ -1604,12 +1608,23 @@ static int gadget_bind_driver(struct device *dev)
 	}
 	usb_gadget_enable_async_callbacks(udc);
 	udc->allow_connect = true;
-	usb_udc_connect_control_locked(udc);
+	ret = usb_udc_connect_control_locked(udc);
+	if (ret) {
+		mutex_unlock(&udc->connect_lock);
+		goto err_connect_control;
+	}
+
 	mutex_unlock(&udc->connect_lock);
 
 	kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE);
 	return 0;
 
+ err_connect_control:
+	usb_gadget_disable_async_callbacks(udc);
+	if (gadget->irq)
+		synchronize_irq(gadget->irq);
+	usb_gadget_udc_stop_locked(udc);
+
  err_start:
 	driver->unbind(udc->gadget);
 
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v4] usb: gadget: udc: Handle gadget_connect failure during bind operation
  2023-09-26 19:37 [PATCH v4] usb: gadget: udc: Handle gadget_connect failure during bind operation Krishna Kurapati
@ 2023-09-26 19:54 ` Alan Stern
  2023-09-26 20:06   ` Krishna Kurapati PSSNV
  0 siblings, 1 reply; 6+ messages in thread
From: Alan Stern @ 2023-09-26 19:54 UTC (permalink / raw)
  To: Krishna Kurapati
  Cc: Greg Kroah-Hartman, Francesco Dolcini, Badhri Jagan Sridharan,
	Michael Grzeschik, Ivan Orlov, linux-usb, linux-kernel,
	quic_ppratap, quic_wcheng, quic_jackp

On Wed, Sep 27, 2023 at 01:07:08AM +0530, Krishna Kurapati wrote:
> In the event, gadget_connect call (which invokes pullup) fails,

s/event,/event/

> propagate the error to udc bind operation which inturn sends the

s/inturn/in turn/

> error to configfs. The userspace can then retry enumeartion if

s/enumeartion/enumeration/

> it chooses to.
> 
> Signed-off-by: Krishna Kurapati <quic_kriskura@quicinc.com>
> ---
> Changes in v4: Fixed mutex locking imbalance during connect_control
> failure
> Link to v3: https://lore.kernel.org/all/20230510075252.31023-3-quic_kriskura@quicinc.com/
> 
>  drivers/usb/gadget/udc/core.c | 23 +++++++++++++++++++----
>  1 file changed, 19 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core.c
> index 7d49d8a0b00c..53af25a333a1 100644
> --- a/drivers/usb/gadget/udc/core.c
> +++ b/drivers/usb/gadget/udc/core.c
> @@ -1125,12 +1125,16 @@ EXPORT_SYMBOL_GPL(usb_gadget_set_state);
>  /* ------------------------------------------------------------------------- */
>  
>  /* Acquire connect_lock before calling this function. */
> -static void usb_udc_connect_control_locked(struct usb_udc *udc) __must_hold(&udc->connect_lock)
> +static int usb_udc_connect_control_locked(struct usb_udc *udc) __must_hold(&udc->connect_lock)
>  {
> +	int ret;
> +
>  	if (udc->vbus)
> -		usb_gadget_connect_locked(udc->gadget);
> +		ret = usb_gadget_connect_locked(udc->gadget);
>  	else
> -		usb_gadget_disconnect_locked(udc->gadget);
> +		ret = usb_gadget_disconnect_locked(udc->gadget);
> +
> +	return ret;

You don't actually need the new variable ret.  You can just do:

	if (udc->vbus)
		return usb_gadget_connect_locked(udc->gadget);
	else
		return usb_gadget_disconnect_locked(udc->gadget);

>  }
>  
>  static void vbus_event_work(struct work_struct *work)
> @@ -1604,12 +1608,23 @@ static int gadget_bind_driver(struct device *dev)
>  	}
>  	usb_gadget_enable_async_callbacks(udc);
>  	udc->allow_connect = true;
> -	usb_udc_connect_control_locked(udc);
> +	ret = usb_udc_connect_control_locked(udc);
> +	if (ret) {
> +		mutex_unlock(&udc->connect_lock);
> +		goto err_connect_control;
> +	}
> +
>  	mutex_unlock(&udc->connect_lock);
>  
>  	kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE);
>  	return 0;
>  
> + err_connect_control:
> +	usb_gadget_disable_async_callbacks(udc);
> +	if (gadget->irq)
> +		synchronize_irq(gadget->irq);
> +	usb_gadget_udc_stop_locked(udc);

Not good -- usb_gadget_udc_stop_locked() expects you to be holding 
udc->connect_lock, but you just dropped the lock!  Also, you never set 
udc->allow_connect back to false.

You should move the mutex_unlock() call from inside the "if" statement 
to down here, and add a line for udc->allow_connect.

Alan Stern

> +
>   err_start:
>  	driver->unbind(udc->gadget);
>  
> -- 
> 2.42.0
> 

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v4] usb: gadget: udc: Handle gadget_connect failure during bind operation
  2023-09-26 19:54 ` Alan Stern
@ 2023-09-26 20:06   ` Krishna Kurapati PSSNV
  2023-09-26 20:24     ` Krishna Kurapati PSSNV
  0 siblings, 1 reply; 6+ messages in thread
From: Krishna Kurapati PSSNV @ 2023-09-26 20:06 UTC (permalink / raw)
  To: Alan Stern
  Cc: Greg Kroah-Hartman, Francesco Dolcini, Badhri Jagan Sridharan,
	Michael Grzeschik, Ivan Orlov, linux-usb, linux-kernel,
	quic_ppratap, quic_wcheng, quic_jackp



On 9/27/2023 1:24 AM, Alan Stern wrote:
> On Wed, Sep 27, 2023 at 01:07:08AM +0530, Krishna Kurapati wrote:
>> In the event, gadget_connect call (which invokes pullup) fails,
> 
> s/event,/event/
> 
>> propagate the error to udc bind operation which inturn sends the
> 
> s/inturn/in turn/
> 
>> error to configfs. The userspace can then retry enumeartion if
> 
> s/enumeartion/enumeration/
> 
>> it chooses to.
>>
>> Signed-off-by: Krishna Kurapati <quic_kriskura@quicinc.com>
>> ---
>> Changes in v4: Fixed mutex locking imbalance during connect_control
>> failure
>> Link to v3: https://lore.kernel.org/all/20230510075252.31023-3-quic_kriskura@quicinc.com/
>>
>>   drivers/usb/gadget/udc/core.c | 23 +++++++++++++++++++----
>>   1 file changed, 19 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core.c
>> index 7d49d8a0b00c..53af25a333a1 100644
>> --- a/drivers/usb/gadget/udc/core.c
>> +++ b/drivers/usb/gadget/udc/core.c
>> @@ -1125,12 +1125,16 @@ EXPORT_SYMBOL_GPL(usb_gadget_set_state);
>>   /* ------------------------------------------------------------------------- */
>>   
>>   /* Acquire connect_lock before calling this function. */
>> -static void usb_udc_connect_control_locked(struct usb_udc *udc) __must_hold(&udc->connect_lock)
>> +static int usb_udc_connect_control_locked(struct usb_udc *udc) __must_hold(&udc->connect_lock)
>>   {
>> +	int ret;
>> +
>>   	if (udc->vbus)
>> -		usb_gadget_connect_locked(udc->gadget);
>> +		ret = usb_gadget_connect_locked(udc->gadget);
>>   	else
>> -		usb_gadget_disconnect_locked(udc->gadget);
>> +		ret = usb_gadget_disconnect_locked(udc->gadget);
>> +
>> +	return ret;
> 
> You don't actually need the new variable ret.  You can just do:
> 
> 	if (udc->vbus)
> 		return usb_gadget_connect_locked(udc->gadget);
> 	else
> 		return usb_gadget_disconnect_locked(udc->gadget);
> 
>>   }
>>   
>>   static void vbus_event_work(struct work_struct *work)
>> @@ -1604,12 +1608,23 @@ static int gadget_bind_driver(struct device *dev)
>>   	}
>>   	usb_gadget_enable_async_callbacks(udc);
>>   	udc->allow_connect = true;
>> -	usb_udc_connect_control_locked(udc);
>> +	ret = usb_udc_connect_control_locked(udc);
>> +	if (ret) {
>> +		mutex_unlock(&udc->connect_lock);
>> +		goto err_connect_control;
>> +	}
>> +
>>   	mutex_unlock(&udc->connect_lock);
>>   
>>   	kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE);
>>   	return 0;
>>   
>> + err_connect_control:
>> +	usb_gadget_disable_async_callbacks(udc);
>> +	if (gadget->irq)
>> +		synchronize_irq(gadget->irq);
>> +	usb_gadget_udc_stop_locked(udc);
> 
> Not good -- usb_gadget_udc_stop_locked() expects you to be holding
> udc->connect_lock, but you just dropped the lock!  Also, you never set
> udc->allow_connect back to false.
> 
> You should move the mutex_unlock() call from inside the "if" statement
> to down here, and add a line for udc->allow_connect.
> 

Hi Alan,

  Thanks for the review. Will push v5 addressing the changes.


Regards,
Krishna,

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v4] usb: gadget: udc: Handle gadget_connect failure during bind operation
  2023-09-26 20:06   ` Krishna Kurapati PSSNV
@ 2023-09-26 20:24     ` Krishna Kurapati PSSNV
  2023-09-26 21:24       ` Alan Stern
  0 siblings, 1 reply; 6+ messages in thread
From: Krishna Kurapati PSSNV @ 2023-09-26 20:24 UTC (permalink / raw)
  To: Alan Stern
  Cc: Greg Kroah-Hartman, Francesco Dolcini, Badhri Jagan Sridharan,
	Michael Grzeschik, Ivan Orlov, linux-usb, linux-kernel,
	quic_ppratap, quic_wcheng, quic_jackp



On 9/27/2023 1:36 AM, Krishna Kurapati PSSNV wrote:
>>>   drivers/usb/gadget/udc/core.c | 23 +++++++++++++++++++----
>>>   1 file changed, 19 insertions(+), 4 deletions(-)
>>>
>>>   static void vbus_event_work(struct work_struct *work)
>>> @@ -1604,12 +1608,23 @@ static int gadget_bind_driver(struct device 
>>> *dev)
>>>       }
>>>       usb_gadget_enable_async_callbacks(udc);
>>>       udc->allow_connect = true;
>>> -    usb_udc_connect_control_locked(udc);
>>> +    ret = usb_udc_connect_control_locked(udc);
>>> +    if (ret) {
>>> +        mutex_unlock(&udc->connect_lock);
>>> +        goto err_connect_control;
>>> +    }
>>> +
>>>       mutex_unlock(&udc->connect_lock);
>>>       kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE);
>>>       return 0;
>>> + err_connect_control:
>>> +    usb_gadget_disable_async_callbacks(udc);
>>> +    if (gadget->irq)
>>> +        synchronize_irq(gadget->irq);
>>> +    usb_gadget_udc_stop_locked(udc);
>>
>> Not good -- usb_gadget_udc_stop_locked() expects you to be holding
>> udc->connect_lock, but you just dropped the lock!  Also, you never set
>> udc->allow_connect back to false.
>>
>> You should move the mutex_unlock() call from inside the "if" statement
>> to down here, and add a line for udc->allow_connect.
>>
> 
> Hi Alan,
> 
>   Thanks for the review. Will push v5 addressing the changes.
> 
> 
Hi Alan,

I tried out the following diff:

-       usb_udc_connect_control_locked(udc);
+       ret = usb_udc_connect_control_locked(udc);
+       if (ret)
+               goto err_connect_control;
+
         mutex_unlock(&udc->connect_lock);

         kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE);
         return 0;

+ err_connect_control:
+       udc->allow_connect = false;
+       usb_gadget_disable_async_callbacks(udc);
+       if (gadget->irq)
+               synchronize_irq(gadget->irq);
+       usb_gadget_udc_stop_locked(udc);
+       mutex_unlock(&udc->connect_lock);
+

If I clear UDC and fail dwc3 soft reset on purpose, I see UDC_store failing:

#echo a600000.usb > /sys/kernel/config/usb_gadget/g1/UDC
[  127.394087] dwc3 a600000.usb: request 000000003f43f907 was not queued 
to ep0out
[  127.401637] udc a600000.usb: failed to start g1: -110
[  127.406841] configfs-gadget.g1: probe of gadget.0 failed with error -110
[  127.413809] UDC core: g1: couldn't find an available UDC or it's busy

The same output came when I tested v4 as well. Every time soft_reset 
would fail when I try to write to UDC, UDC_store fails and above log 
will come up. Can you help confirm if the diff above is proper as I 
don't see any diff in the logs in v4 and about to push v5.

Regards,
Krishna,

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v4] usb: gadget: udc: Handle gadget_connect failure during bind operation
  2023-09-26 20:24     ` Krishna Kurapati PSSNV
@ 2023-09-26 21:24       ` Alan Stern
  2023-09-27  7:28         ` Krishna Kurapati PSSNV
  0 siblings, 1 reply; 6+ messages in thread
From: Alan Stern @ 2023-09-26 21:24 UTC (permalink / raw)
  To: Krishna Kurapati PSSNV
  Cc: Greg Kroah-Hartman, Francesco Dolcini, Badhri Jagan Sridharan,
	Michael Grzeschik, Ivan Orlov, linux-usb, linux-kernel,
	quic_ppratap, quic_wcheng, quic_jackp

On Wed, Sep 27, 2023 at 01:54:34AM +0530, Krishna Kurapati PSSNV wrote:
> 
> 
> On 9/27/2023 1:36 AM, Krishna Kurapati PSSNV wrote:
> > > >   drivers/usb/gadget/udc/core.c | 23 +++++++++++++++++++----
> > > >   1 file changed, 19 insertions(+), 4 deletions(-)
> > > > 
> > > >   static void vbus_event_work(struct work_struct *work)
> > > > @@ -1604,12 +1608,23 @@ static int gadget_bind_driver(struct
> > > > device *dev)
> > > >       }
> > > >       usb_gadget_enable_async_callbacks(udc);
> > > >       udc->allow_connect = true;
> > > > -    usb_udc_connect_control_locked(udc);
> > > > +    ret = usb_udc_connect_control_locked(udc);
> > > > +    if (ret) {
> > > > +        mutex_unlock(&udc->connect_lock);
> > > > +        goto err_connect_control;
> > > > +    }
> > > > +
> > > >       mutex_unlock(&udc->connect_lock);
> > > >       kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE);
> > > >       return 0;
> > > > + err_connect_control:
> > > > +    usb_gadget_disable_async_callbacks(udc);
> > > > +    if (gadget->irq)
> > > > +        synchronize_irq(gadget->irq);
> > > > +    usb_gadget_udc_stop_locked(udc);
> > > 
> > > Not good -- usb_gadget_udc_stop_locked() expects you to be holding
> > > udc->connect_lock, but you just dropped the lock!  Also, you never set
> > > udc->allow_connect back to false.
> > > 
> > > You should move the mutex_unlock() call from inside the "if" statement
> > > to down here, and add a line for udc->allow_connect.
> > > 
> > 
> > Hi Alan,
> > 
> >   Thanks for the review. Will push v5 addressing the changes.
> > 
> > 
> Hi Alan,
> 
> I tried out the following diff:
> 
> -       usb_udc_connect_control_locked(udc);
> +       ret = usb_udc_connect_control_locked(udc);
> +       if (ret)
> +               goto err_connect_control;
> +
>         mutex_unlock(&udc->connect_lock);
> 
>         kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE);
>         return 0;
> 
> + err_connect_control:
> +       udc->allow_connect = false;
> +       usb_gadget_disable_async_callbacks(udc);
> +       if (gadget->irq)
> +               synchronize_irq(gadget->irq);
> +       usb_gadget_udc_stop_locked(udc);
> +       mutex_unlock(&udc->connect_lock);
> +
> 
> If I clear UDC and fail dwc3 soft reset on purpose, I see UDC_store failing:
> 
> #echo a600000.usb > /sys/kernel/config/usb_gadget/g1/UDC
> [  127.394087] dwc3 a600000.usb: request 000000003f43f907 was not queued to
> ep0out
> [  127.401637] udc a600000.usb: failed to start g1: -110
> [  127.406841] configfs-gadget.g1: probe of gadget.0 failed with error -110
> [  127.413809] UDC core: g1: couldn't find an available UDC or it's busy
> 
> The same output came when I tested v4 as well. Every time soft_reset would
> fail when I try to write to UDC, UDC_store fails and above log will come up.

Isn't that what you want?  I thought the whole purpose of this patch was 
to make it so that configfs would realize when 
usb_udc_connect_control_locked() had failed.   So you should be happy 
that the log shows a failure occurred.

> Can you help confirm if the diff above is proper as I don't see any diff in
> the logs in v4 and about to push v5.

"Diff in the logs in v4"?  What does that mean?  A diff is a comparison 
between two text files (often between before-and-after versions of a 
source code file).  Why would you expect a diff to show up in the logs?

This revised patch looks okay to me.

Alan Stern

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v4] usb: gadget: udc: Handle gadget_connect failure during bind operation
  2023-09-26 21:24       ` Alan Stern
@ 2023-09-27  7:28         ` Krishna Kurapati PSSNV
  0 siblings, 0 replies; 6+ messages in thread
From: Krishna Kurapati PSSNV @ 2023-09-27  7:28 UTC (permalink / raw)
  To: Alan Stern
  Cc: Greg Kroah-Hartman, Francesco Dolcini, Badhri Jagan Sridharan,
	Michael Grzeschik, Ivan Orlov, linux-usb, linux-kernel,
	quic_ppratap, quic_wcheng, quic_jackp



On 9/27/2023 2:54 AM, Alan Stern wrote:
> On Wed, Sep 27, 2023 at 01:54:34AM +0530, Krishna Kurapati PSSNV wrote:
>>
>>
>> On 9/27/2023 1:36 AM, Krishna Kurapati PSSNV wrote:
>>>>>    drivers/usb/gadget/udc/core.c | 23 +++++++++++++++++++----
>>>>>    1 file changed, 19 insertions(+), 4 deletions(-)
>>>>>
>>>>>    static void vbus_event_work(struct work_struct *work)
>>>>> @@ -1604,12 +1608,23 @@ static int gadget_bind_driver(struct
>>>>> device *dev)
>>>>>        }
>>>>>        usb_gadget_enable_async_callbacks(udc);
>>>>>        udc->allow_connect = true;
>>>>> -    usb_udc_connect_control_locked(udc);
>>>>> +    ret = usb_udc_connect_control_locked(udc);
>>>>> +    if (ret) {
>>>>> +        mutex_unlock(&udc->connect_lock);
>>>>> +        goto err_connect_control;
>>>>> +    }
>>>>> +
>>>>>        mutex_unlock(&udc->connect_lock);
>>>>>        kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE);
>>>>>        return 0;
>>>>> + err_connect_control:
>>>>> +    usb_gadget_disable_async_callbacks(udc);
>>>>> +    if (gadget->irq)
>>>>> +        synchronize_irq(gadget->irq);
>>>>> +    usb_gadget_udc_stop_locked(udc);
>>>>
>>>> Not good -- usb_gadget_udc_stop_locked() expects you to be holding
>>>> udc->connect_lock, but you just dropped the lock!  Also, you never set
>>>> udc->allow_connect back to false.
>>>>
>>>> You should move the mutex_unlock() call from inside the "if" statement
>>>> to down here, and add a line for udc->allow_connect.
>>>>
>>>
>>> Hi Alan,
>>>
>>>    Thanks for the review. Will push v5 addressing the changes.
>>>
>>>
>> Hi Alan,
>>
>> I tried out the following diff:
>>
>> -       usb_udc_connect_control_locked(udc);
>> +       ret = usb_udc_connect_control_locked(udc);
>> +       if (ret)
>> +               goto err_connect_control;
>> +
>>          mutex_unlock(&udc->connect_lock);
>>
>>          kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE);
>>          return 0;
>>
>> + err_connect_control:
>> +       udc->allow_connect = false;
>> +       usb_gadget_disable_async_callbacks(udc);
>> +       if (gadget->irq)
>> +               synchronize_irq(gadget->irq);
>> +       usb_gadget_udc_stop_locked(udc);
>> +       mutex_unlock(&udc->connect_lock);
>> +
>>
>> If I clear UDC and fail dwc3 soft reset on purpose, I see UDC_store failing:
>>
>> #echo a600000.usb > /sys/kernel/config/usb_gadget/g1/UDC
>> [  127.394087] dwc3 a600000.usb: request 000000003f43f907 was not queued to
>> ep0out
>> [  127.401637] udc a600000.usb: failed to start g1: -110
>> [  127.406841] configfs-gadget.g1: probe of gadget.0 failed with error -110
>> [  127.413809] UDC core: g1: couldn't find an available UDC or it's busy
>>
>> The same output came when I tested v4 as well. Every time soft_reset would
>> fail when I try to write to UDC, UDC_store fails and above log will come up.
> 
> Isn't that what you want?  I thought the whole purpose of this patch was
> to make it so that configfs would realize when
> usb_udc_connect_control_locked() had failed.   So you should be happy
> that the log shows a failure occurred.
>  >> Can you help confirm if the diff above is proper as I don't see any 
diff in
>> the logs in v4 and about to push v5.
> 
> "Diff in the logs in v4"?  What does that mean?  A diff is a comparison
> between two text files (often between before-and-after versions of a
> source code file).  Why would you expect a diff to show up in the logs?
> 
> This revised patch looks okay to me.
> 
Thanks for the confirmation. Will push v5.

Regards,
Krishna,

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2023-09-27  7:29 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-09-26 19:37 [PATCH v4] usb: gadget: udc: Handle gadget_connect failure during bind operation Krishna Kurapati
2023-09-26 19:54 ` Alan Stern
2023-09-26 20:06   ` Krishna Kurapati PSSNV
2023-09-26 20:24     ` Krishna Kurapati PSSNV
2023-09-26 21:24       ` Alan Stern
2023-09-27  7:28         ` Krishna Kurapati PSSNV

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox