Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ae54a287 authored by David Kershner's avatar David Kershner Committed by Greg Kroah-Hartman
Browse files

staging: unisys: fix up device_destroy



Visorbus_remove_instance calls device_unregister which in turn will call
visorbus_release_busdevice. The function visorbus_release_busdevice was
freeing the visor_device. The code in visorbus_remove_instance was then
trying to reference the visor_device. This patch cleans up the code so
the visor_device is not referenced after the unregister.

Signed-off-by: default avatarDavid Kershner <david.kershner@unisys.com>
Reviewed-by: default avatarTim Sell <timothy.sell@unisys.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent fd9e450c
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -181,6 +181,7 @@ static void visorbus_release_busdevice(struct device *xdev)

	debugfs_remove(dev->debugfs_client_bus_info);
	debugfs_remove_recursive(dev->debugfs_dir);
	visorchannel_destroy(dev->visorchannel);
	kfree(dev);
}

@@ -1069,11 +1070,11 @@ void visorbus_remove_instance(struct visor_device *dev)
	 * successfully been able to trace thru the code to see where/how
	 * release() gets called.  But I know it does.
	 */
	visorchannel_destroy(dev->visorchannel);
	kfree(dev->vbus_hdr_info);
	list_del(&dev->list_all);
	device_unregister(&dev->device);
	if (dev->pending_msg_hdr)
		visorbus_response(dev, 0, CONTROLVM_BUS_DESTROY);
	device_unregister(&dev->device);
}

/*