On Wed, Oct 23 2013, Andrzej Pietrasiewicz wrote: > This will be required in order to use the new function interface > (usb_get_function_instance/usb_put_function_instance) > > Signed-off-by: Andrzej Pietrasiewicz <[email protected]> > Signed-off-by: Kyunmgin Park <[email protected]> > --- > drivers/usb/gadget/f_fs.c | 41 ++++++++++++++++++++++++++++++++++++ > drivers/usb/gadget/g_ffs.c | 50 ++++++++++++++++++++++++++----------------- > drivers/usb/gadget/u_fs.h | 2 + > 3 files changed, 73 insertions(+), 20 deletions(-)
> @@ -175,35 +175,49 @@ static DEFINE_MUTEX(gfs_lock);
> static unsigned int missing_funcs;
> static bool gfs_registered;
> static bool gfs_single_func;
> -static struct ffs_dev *ffs_tab;
> +static struct ffs_dev **ffs_tab;
>
> static int __init gfs_init(void)
> {
> int i;
> + int ret = 0;
>
> ENTER();
>
> - if (!func_num) {
> + if (func_num < 2) {
> gfs_single_func = true;
> func_num = 1;
> }
>
> - ffs_tab = kcalloc(func_num, sizeof *ffs_tab, GFP_KERNEL);
> + ffs_tab = kcalloc(func_num, sizeof(ffs_tab), GFP_KERNEL);
What just happened here? I'm pretty sure the star is required.
> if (!ffs_tab)
> return -ENOMEM;
>
> - if (!gfs_single_func)
> - for (i = 0; i < func_num; i++)
> - ffs_tab[i].name = func_names[i];
> + for (i = 0; i < func_num; i++) {
> + ffs_tab[i] = ffs_alloc_dev();
> + if (IS_ERR(ffs_tab[i])) {
> + ret = PTR_ERR(ffs_tab[i]);
> + goto no_dev;
> + }
> + if (!gfs_single_func)
> + ffs_tab[i]->name = func_names[i];
> + }
>
> missing_funcs = func_num;
>
> return functionfs_init();
> +no_dev:
> + while (--i >= 0)
> + ffs_free_dev(ffs_tab[i]);
> + kfree(ffs_tab);
> + return ret;
> }
> module_init(gfs_init);
>
> static void __exit gfs_exit(void)
> {
> + int i;
> +
> ENTER();
> mutex_lock(&gfs_lock);
>
signature.asc
Description: PGP signature
