oprofile, x86: fix init_sysfs error handling
On failure init_sysfs() might not properly free resources. The error code of the function is not checked. And, when reinitializing the exit function might be called twice. This patch fixes all this. Cc: stable@kernel.org Signed-off-by: Robert Richter <robert.richter@amd.com>
This commit is contained in:
parent
750d857c68
commit
10f0412f57
1 changed files with 13 additions and 3 deletions
|
@ -568,8 +568,13 @@ static int __init init_sysfs(void)
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
error = sysdev_class_register(&oprofile_sysclass);
|
error = sysdev_class_register(&oprofile_sysclass);
|
||||||
if (!error)
|
if (error)
|
||||||
error = sysdev_register(&device_oprofile);
|
return error;
|
||||||
|
|
||||||
|
error = sysdev_register(&device_oprofile);
|
||||||
|
if (error)
|
||||||
|
sysdev_class_unregister(&oprofile_sysclass);
|
||||||
|
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -695,6 +700,8 @@ int __init op_nmi_init(struct oprofile_operations *ops)
|
||||||
char *cpu_type = NULL;
|
char *cpu_type = NULL;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
|
using_nmi = 0;
|
||||||
|
|
||||||
if (!cpu_has_apic)
|
if (!cpu_has_apic)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
@ -774,7 +781,10 @@ int __init op_nmi_init(struct oprofile_operations *ops)
|
||||||
|
|
||||||
mux_init(ops);
|
mux_init(ops);
|
||||||
|
|
||||||
init_sysfs();
|
ret = init_sysfs();
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
using_nmi = 1;
|
using_nmi = 1;
|
||||||
printk(KERN_INFO "oprofile: using NMI interrupt.\n");
|
printk(KERN_INFO "oprofile: using NMI interrupt.\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in a new issue