From: Thierry Reding Date: Wed, 8 Nov 2017 12:08:21 +0000 (+0100) Subject: gpu: host1x: Cleanup on initialization failure X-Git-Tag: v4.16-rc1~96^2~7^2~47 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8f7da1578e90bf1af30269dc6dd8806c96e9c683;p=thirdparty%2Flinux.git gpu: host1x: Cleanup on initialization failure When an error happens during the initialization of one of the sub- devices, make sure to properly cleanup all sub-devices that have been initialized up to that point. Signed-off-by: Thierry Reding --- diff --git a/drivers/gpu/host1x/bus.c b/drivers/gpu/host1x/bus.c index 2e57c9cea696e..88a3558b7916e 100644 --- a/drivers/gpu/host1x/bus.c +++ b/drivers/gpu/host1x/bus.c @@ -211,8 +211,7 @@ int host1x_device_init(struct host1x_device *device) dev_err(&device->dev, "failed to initialize %s: %d\n", dev_name(client->dev), err); - mutex_unlock(&device->clients_lock); - return err; + goto teardown; } } } @@ -220,6 +219,14 @@ int host1x_device_init(struct host1x_device *device) mutex_unlock(&device->clients_lock); return 0; + +teardown: + list_for_each_entry_continue_reverse(client, &device->clients, list) + if (client->ops->exit) + client->ops->exit(client); + + mutex_unlock(&device->clients_lock); + return err; } EXPORT_SYMBOL(host1x_device_init);