Re: [RFCv4 PATCH 12/13] usb: gadget: example port of mass storage to UFG: f_mass_storage: use new function registration framework

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

 



On Thu, Nov 22 2012, Andrzej Pietrasiewicz wrote:
> +static void fsg_free(struct usb_function *f)
> +{
> +	struct fsg_dev		*fsg = fsg_from_func(f);
> +
>  	kfree(fsg);
>  }

	kfree(fsg_from_func(f));

if you ask me, but feel free to ignore me.

>  
> @@ -2970,22 +2981,65 @@ autoconf_fail:
>  }
>  
>  /****************************** ADD FUNCTION ******************************/
> +static void msg_cleanup(void)
> +{
> +	clear_bit(0, &msg_registered);
> +}
> +
> +static int msg_thread_exits(struct fsg_common *common)
> +{
> +	msg_cleanup();
> +	return 0;
> +}
> +
> +static int fsg_add_function(struct usb_configuration *c, struct usb_function *f,
> +		      struct config_item *item, void *data)
> +{
> +	static const struct fsg_operations ops = {
> +		.thread_exits = msg_thread_exits,
> +	};
> +
> +	struct fsg_common *common = to_fsg_common(item);
> +	struct fsg_dev *fsg;
> +	struct usb_composite_dev *cdev = data;
> +	int status;
> +	

By the way, you keep leaving trailing tabs on otherwise empty lines.

> +	common->ops = &ops;
> +	fsg_common_init_cdev(common, cdev);
> +	
> +	fsg = container_of(f, struct fsg_dev, function);
> +	fsg->common = common;
> +
> +	status = usb_add_function(c, f);
> +	if (status)
> +		goto err_ms_get;
> +	else
> +		fsg_common_get(common);

This could get away w/o goto if the error handling was put inside if
body, ie.:

	if (status) {
		usb_put_function(f);
		fsg_common_put(common);
		return status;
	}

	fsg_common_get(common);

> +	set_bit(0, &msg_registered);
> +	fsg_common_put(common);
> +
> +	return status;
> +
> +err_ms_get:
> +	usb_put_function(f);
> +	fsg_common_put(common);
> +	return status;
> +}
> +
> +/****************************** ALLOCATE FUNCTION *************************/
>  
>  static struct usb_gadget_strings *fsg_strings_array[] = {
>  	&fsg_stringtab,
>  	NULL,
>  };
>  
> -static int fsg_bind_config(struct usb_composite_dev *cdev,
> -			   struct usb_configuration *c,
> -			   struct fsg_common *common)
> +static struct usb_function *fsg_alloc(void)
>  {
>  	struct fsg_dev *fsg;
> -	int rc;
>  
>  	fsg = kzalloc(sizeof *fsg, GFP_KERNEL);
>  	if (unlikely(!fsg))
> -		return -ENOMEM;
> +		return NULL;
>  
>  	fsg->function.name        = FSG_DRIVER_DESC;
>  	fsg->function.strings     = fsg_strings_array;
> @@ -2994,8 +3048,10 @@ static int fsg_bind_config(struct usb_composite_dev *cdev,
>  	fsg->function.setup       = fsg_setup;
>  	fsg->function.set_alt     = fsg_set_alt;
>  	fsg->function.disable     = fsg_disable;
> +	fsg->function.free_func	  = fsg_free;

Since I've started nitpicking white space errors, there's tab character
after “free_func”.

> +	fsg->function.make_group  = alloc_fsg_common;
> +	fsg->function.add_function = fsg_add_function;
>  
> -	fsg->common               = common;
>  	/*
>  	 * Our caller holds a reference to common structure so we
>  	 * don't have to be worry about it being freed until we return

-- 
Best regards,                                         _     _
.o. | Liege of Serenely Enlightened Majesty of      o' \,=./ `o
..o | Computer Science,  Michał “mina86” Nazarewicz    (o o)
ooo +----<email/xmpp: mpn@xxxxxxxxxx>--------------ooO--(_)--Ooo--

Attachment: pgpYv2yq3aKuR.pgp
Description: PGP signature


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

  Powered by Linux