Re: [PATCH v2 2/4] usb: udc: add udc_driver_find_udc

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 13 Jan 2015, Peter Chen wrote:

> This is an internal API, it can be used to find corresponding udc
> according to usb_gadget_driver.
> 
> Signed-off-by: Peter Chen <peter.chen@xxxxxxxxxxxxx>
> ---
>  drivers/usb/gadget/udc/udc-core.c | 33 +++++++++++++++++++++++----------
>  1 file changed, 23 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c
> index 0156709..7f8dc5b 100644
> --- a/drivers/usb/gadget/udc/udc-core.c
> +++ b/drivers/usb/gadget/udc/udc-core.c
> @@ -70,6 +70,22 @@ found:
>  	return udc;
>  }
>  
> +static struct usb_udc *udc_driver_find_udc(struct usb_gadget_driver *driver)
> +{
> +	struct usb_udc		*udc = NULL;
> +
> +	mutex_lock(&udc_lock);
> +	list_for_each_entry(udc, &udc_list, list)
> +		if (udc->driver == driver)
> +			goto found;
> +	mutex_unlock(&udc_lock);
> +
> +	return NULL;
> +
> +found:
> +	mutex_unlock(&udc_lock);
> +	return udc;
> +}
>  /* ------------------------------------------------------------------------- */
>  #ifdef	CONFIG_HAS_DMA
>  
> @@ -469,17 +485,14 @@ int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
>  	if (!driver || !driver->unbind)
>  		return -EINVAL;
>  
> -	mutex_lock(&udc_lock);
> -	list_for_each_entry(udc, &udc_list, list)
> -		if (udc->driver == driver) {
> -			usb_gadget_remove_driver(udc);
> -			usb_gadget_set_state(udc->gadget,
> -					USB_STATE_NOTATTACHED);
> -			ret = 0;
> -			break;
> -		}
> +	udc = udc_driver_find_udc(driver);
> +	if (udc) {
> +		usb_gadget_remove_driver(udc);
> +		usb_gadget_set_state(udc->gadget,
> +				USB_STATE_NOTATTACHED);
> +		ret = 0;
> +	}
>  
> -	mutex_unlock(&udc_lock);
>  	return ret;
>  }
>  EXPORT_SYMBOL_GPL(usb_gadget_unregister_driver);

This doesn't seem to be an improvement.  All it does is increase the
amount of code, because the new subroutine gets used in only one place.

Also, it means that now you are calling usb_gadget_remove_driver() 
without holding the udc_lock mutex, which probably isn't a good idea.

(In addition, this change will make it more difficult in the future if
we ever allow a single driver to support more than one gadget.)

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux