mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-23 12:43:55 +08:00
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: David Kershner <david.kershner@unisys.com> Reviewed-by: Tim Sell <timothy.sell@unisys.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
fd9e450cf5
commit
ae54a28796
@ -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);
|
||||
if (dev->pending_msg_hdr)
|
||||
visorbus_response(dev, 0, CONTROLVM_BUS_DESTROY);
|
||||
device_unregister(&dev->device);
|
||||
visorbus_response(dev, 0, CONTROLVM_BUS_DESTROY);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user