greybus: interface: disable control connection on initialisation errors

Disable the control connection immediately on any errors during
interface initialisation as there's no need to keep it around for an
interface in an error state.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Jeffrey Carlyle <jcarlyle@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
Johan Hovold 2016-03-09 12:20:39 +01:00 committed by Greg Kroah-Hartman
parent 986d691108
commit 11548c8327
1 changed files with 11 additions and 4 deletions

View File

@ -198,15 +198,20 @@ int gb_interface_init(struct gb_interface *intf)
size = gb_control_get_manifest_size_operation(intf);
if (size <= 0) {
dev_err(&intf->dev, "failed to get manifest size: %d\n", size);
if (size)
return size;
ret = size;
else
return -EINVAL;
ret = -EINVAL;
goto err_disable_control;
}
manifest = kmalloc(size, GFP_KERNEL);
if (!manifest)
return -ENOMEM;
if (!manifest) {
ret = -ENOMEM;
goto err_disable_control;
}
/* Get manifest using control protocol on CPort */
ret = gb_control_get_manifest_operation(intf, manifest, size);
@ -242,6 +247,8 @@ int gb_interface_init(struct gb_interface *intf)
gb_bundle_destroy(bundle);
err_free_manifest:
kfree(manifest);
err_disable_control:
gb_control_disable(intf->control);
return ret;
}