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

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

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
Loading
Loading
Loading
Loading
+14 −25
Original line number Diff line number Diff line
@@ -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;
	}

	if (device_register(&dev->device) < 0) {
	err = device_register(&dev->device);
	if (err < 0) {
		POSTCODE_LINUX(DEVICE_CREATE_FAILURE_PC, 0, id,
			       DIAG_SEVERITY_ERR);
		err = -ENODEV;
		goto err_debugfs_created;
		goto err_debugfs_dir;
	}

	if (get_vbus_header_info(dev->visorchannel, hdr_info) >= 0) {
	list_add_tail(&dev->list_all, &list_all_bus_instances);

	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);
	return 0;

err_debugfs_dir:
	debugfs_remove_recursive(dev->debugfs_dir);

err_hdr_info:
	kfree(hdr_info);
	return err;
}