1
0
Fork 0

staging: unisys: visorbus: fix error handling in create_bus_instance

The function get_vbus_header_info returns errors that were being handled
incorrectly. Fix the error handling in create_bus_instance.

Signed-off-by: David Kershner <david.kershner@unisys.com>
Reviewed-by: Reviewed-by: Tim Sell <timothy.sell@unisys.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
hifive-unleashed-5.1
David Kershner 2017-03-28 09:34:45 -04:00 committed by Greg Kroah-Hartman
parent 5dca9b2944
commit 362f87f312
1 changed files with 17 additions and 28 deletions

View File

@ -1023,46 +1023,35 @@ create_bus_instance(struct visor_device *dev)
dev->debugfs_dir = debugfs_create_dir(dev_name(&dev->device),
visorbus_debugfs_dir);
if (!dev->debugfs_dir) {
err = -ENOMEM;
goto err_hdr_info;
}
dev->debugfs_client_bus_info =
debugfs_create_file("client_bus_info", 0440,
dev->debugfs_dir, dev,
&client_bus_info_debugfs_fops);
if (!dev->debugfs_client_bus_info) {
err = -ENOMEM;
dev_set_drvdata(&dev->device, dev);
err = get_vbus_header_info(dev->visorchannel, hdr_info);
if (err < 0)
goto err_debugfs_dir;
err = device_register(&dev->device);
if (err < 0) {
POSTCODE_LINUX(DEVICE_CREATE_FAILURE_PC, 0, id,
DIAG_SEVERITY_ERR);
goto err_debugfs_dir;
}
if (device_register(&dev->device) < 0) {
POSTCODE_LINUX(DEVICE_CREATE_FAILURE_PC, 0, id,
DIAG_SEVERITY_ERR);
err = -ENODEV;
goto err_debugfs_created;
}
if (get_vbus_header_info(dev->visorchannel, hdr_info) >= 0) {
dev->vbus_hdr_info = (void *)hdr_info;
write_vbus_chp_info(dev->visorchannel, hdr_info,
&chipset_driverinfo);
write_vbus_bus_info(dev->visorchannel, hdr_info,
&clientbus_driverinfo);
} else {
kfree(hdr_info);
}
list_add_tail(&dev->list_all, &list_all_bus_instances);
dev_set_drvdata(&dev->device, dev);
return 0;
err_debugfs_created:
debugfs_remove(dev->debugfs_client_bus_info);
dev->vbus_hdr_info = (void *)hdr_info;
write_vbus_chp_info(dev->visorchannel, hdr_info,
&chipset_driverinfo);
write_vbus_bus_info(dev->visorchannel, hdr_info,
&clientbus_driverinfo);
return 0;
err_debugfs_dir:
debugfs_remove_recursive(dev->debugfs_dir);
err_hdr_info:
kfree(hdr_info);
return err;
}