Commit 362f87f3 authored by David Kershner's avatar David Kershner Committed by Greg Kroah-Hartman

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: default avatarDavid Kershner <david.kershner@unisys.com>
Reviewed-by: default avatarReviewed-by: Tim Sell <timothy.sell@unisys.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 5dca9b29
...@@ -1023,46 +1023,35 @@ create_bus_instance(struct visor_device *dev) ...@@ -1023,46 +1023,35 @@ create_bus_instance(struct visor_device *dev)
dev->debugfs_dir = debugfs_create_dir(dev_name(&dev->device), dev->debugfs_dir = debugfs_create_dir(dev_name(&dev->device),
visorbus_debugfs_dir); visorbus_debugfs_dir);
if (!dev->debugfs_dir) {
err = -ENOMEM;
goto err_hdr_info;
}
dev->debugfs_client_bus_info = dev->debugfs_client_bus_info =
debugfs_create_file("client_bus_info", 0440, debugfs_create_file("client_bus_info", 0440,
dev->debugfs_dir, dev, dev->debugfs_dir, dev,
&client_bus_info_debugfs_fops); &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; goto err_debugfs_dir;
}
if (device_register(&dev->device) < 0) { err = device_register(&dev->device);
if (err < 0) {
POSTCODE_LINUX(DEVICE_CREATE_FAILURE_PC, 0, id, POSTCODE_LINUX(DEVICE_CREATE_FAILURE_PC, 0, id,
DIAG_SEVERITY_ERR); DIAG_SEVERITY_ERR);
err = -ENODEV; goto err_debugfs_dir;
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); list_add_tail(&dev->list_all, &list_all_bus_instances);
dev_set_drvdata(&dev->device, dev);
return 0;
err_debugfs_created: dev->vbus_hdr_info = (void *)hdr_info;
debugfs_remove(dev->debugfs_client_bus_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: err_debugfs_dir:
debugfs_remove_recursive(dev->debugfs_dir); debugfs_remove_recursive(dev->debugfs_dir);
err_hdr_info:
kfree(hdr_info); kfree(hdr_info);
return err; return err;
} }
......
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