Commit 536e1715 authored by Thierry Reding's avatar Thierry Reding

gpu: host1x: Call ->remove() only when a device is bound

When a driver's ->probe() function fails, the host1x bus must not call
its ->remove() function because the driver will already have cleaned up
in the error handling path in ->probe().
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
parent 281d1bbd
...@@ -116,7 +116,10 @@ static void host1x_subdev_register(struct host1x_device *device, ...@@ -116,7 +116,10 @@ static void host1x_subdev_register(struct host1x_device *device,
if (list_empty(&device->subdevs)) { if (list_empty(&device->subdevs)) {
err = device->driver->probe(device); err = device->driver->probe(device);
if (err < 0) if (err < 0)
dev_err(&device->dev, "probe failed: %d\n", err); dev_err(&device->dev, "probe failed for %ps: %d\n",
device->driver, err);
else
device->bound = true;
} }
} }
...@@ -130,10 +133,12 @@ static void __host1x_subdev_unregister(struct host1x_device *device, ...@@ -130,10 +133,12 @@ static void __host1x_subdev_unregister(struct host1x_device *device,
* If all subdevices have been activated, we're about to remove the * If all subdevices have been activated, we're about to remove the
* first active subdevice, so unload the driver first. * first active subdevice, so unload the driver first.
*/ */
if (list_empty(&device->subdevs)) { if (list_empty(&device->subdevs) && device->bound) {
err = device->driver->remove(device); err = device->driver->remove(device);
if (err < 0) if (err < 0)
dev_err(&device->dev, "remove failed: %d\n", err); dev_err(&device->dev, "remove failed: %d\n", err);
device->bound = false;
} }
/* /*
......
...@@ -272,6 +272,8 @@ struct host1x_device { ...@@ -272,6 +272,8 @@ struct host1x_device {
struct mutex clients_lock; struct mutex clients_lock;
struct list_head clients; struct list_head clients;
bool bound;
}; };
static inline struct host1x_device *to_host1x_device(struct device *dev) static inline struct host1x_device *to_host1x_device(struct device *dev)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment