| From efa38019aaa4457e19a632c69f4b6df8721fc0cc Mon Sep 17 00:00:00 2001 |
| From: Thierry Reding <treding@nvidia.com> |
| Date: Wed, 8 Apr 2020 19:38:02 +0200 |
| Subject: [PATCH] gpu: host1x: Detach driver on unregister |
| |
| commit d9a0a05bf8c76e6dc79230669a8b5d685b168c30 upstream. |
| |
| Currently when a host1x device driver is unregistered, it is not |
| detached from the host1x controller, which means that the device |
| will stay around and when the driver is registered again, it may |
| bind to the old, stale device rather than the new one that was |
| created from scratch upon driver registration. This in turn can |
| cause various weird crashes within the driver core because it is |
| confronted with a device that was already deleted. |
| |
| Fix this by detaching the driver from the host1x controller when |
| it is unregistered. This ensures that the deleted device also is |
| no longer present in the device list that drivers will bind to. |
| |
| Reported-by: Sowjanya Komatineni <skomatineni@nvidia.com> |
| Signed-off-by: Thierry Reding <treding@nvidia.com> |
| Tested-by: Sowjanya Komatineni <skomatineni@nvidia.com> |
| Signed-off-by: Thierry Reding <treding@nvidia.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/gpu/host1x/bus.c b/drivers/gpu/host1x/bus.c |
| index 6387302c1245..148af90cefc6 100644 |
| --- a/drivers/gpu/host1x/bus.c |
| +++ b/drivers/gpu/host1x/bus.c |
| @@ -656,8 +656,17 @@ EXPORT_SYMBOL(host1x_driver_register_full); |
| */ |
| void host1x_driver_unregister(struct host1x_driver *driver) |
| { |
| + struct host1x *host1x; |
| + |
| driver_unregister(&driver->driver); |
| |
| + mutex_lock(&devices_lock); |
| + |
| + list_for_each_entry(host1x, &devices, list) |
| + host1x_detach_driver(host1x, driver); |
| + |
| + mutex_unlock(&devices_lock); |
| + |
| mutex_lock(&drivers_lock); |
| list_del_init(&driver->list); |
| mutex_unlock(&drivers_lock); |
| -- |
| 2.27.0 |
| |