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

Commit 1e4de816 authored by Axel Lin's avatar Axel Lin Committed by Greg Kroah-Hartman
Browse files

firmware: gsmi: remove sysfs entries when unload the module



This patch removes sysfs entries in gsmi_exit() and gsmi_init() error path.

Also move the driver successfully loaded message to the end of gsmi_init()
and return proper error if register_efivars() fails.

Signed-off-by: default avatarAxel Lin <axel.lin@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 48d98542
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -869,8 +869,6 @@ static __init int gsmi_init(void)
		goto out_err;
	}

	printk(KERN_INFO "gsmi version " DRIVER_VERSION " loaded\n");

	/* Register in the firmware directory */
	ret = -ENOMEM;
	gsmi_kobj = kobject_create_and_add("gsmi", firmware_kobj);
@@ -890,12 +888,13 @@ static __init int gsmi_init(void)
	ret = sysfs_create_files(gsmi_kobj, gsmi_attrs);
	if (ret) {
		printk(KERN_INFO "gsmi: Failed to add attrs");
		goto out_err;
		goto out_remove_bin_file;
	}

	if (register_efivars(&efivars, &efivar_ops, gsmi_kobj)) {
	ret = register_efivars(&efivars, &efivar_ops, gsmi_kobj);
	if (ret) {
		printk(KERN_INFO "gsmi: Failed to register efivars\n");
		goto out_err;
		goto out_remove_sysfs_files;
	}

	register_reboot_notifier(&gsmi_reboot_notifier);
@@ -903,8 +902,14 @@ static __init int gsmi_init(void)
	atomic_notifier_chain_register(&panic_notifier_list,
				       &gsmi_panic_notifier);

	printk(KERN_INFO "gsmi version " DRIVER_VERSION " loaded\n");

	return 0;

out_remove_sysfs_files:
	sysfs_remove_files(gsmi_kobj, gsmi_attrs);
out_remove_bin_file:
	sysfs_remove_bin_file(gsmi_kobj, &eventlog_bin_attr);
out_err:
	kobject_put(gsmi_kobj);
	gsmi_buf_free(gsmi_dev.param_buf);
@@ -925,6 +930,8 @@ static void __exit gsmi_exit(void)
					 &gsmi_panic_notifier);
	unregister_efivars(&efivars);

	sysfs_remove_files(gsmi_kobj, gsmi_attrs);
	sysfs_remove_bin_file(gsmi_kobj, &eventlog_bin_attr);
	kobject_put(gsmi_kobj);
	gsmi_buf_free(gsmi_dev.param_buf);
	gsmi_buf_free(gsmi_dev.data_buf);