Commit b4c69d45 authored by Ingo Molnar's avatar Ingo Molnar

Merge branch 'urgent' of...

Merge branch 'urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/rric/oprofile into perf/urgent
parents 68d3f1d8 269f45c2
...@@ -568,8 +568,13 @@ static int __init init_sysfs(void) ...@@ -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;
} }
...@@ -580,8 +585,10 @@ static void exit_sysfs(void) ...@@ -580,8 +585,10 @@ static void exit_sysfs(void)
} }
#else #else
#define init_sysfs() do { } while (0)
#define exit_sysfs() do { } while (0) static inline int init_sysfs(void) { return 0; }
static inline void exit_sysfs(void) { }
#endif /* CONFIG_PM */ #endif /* CONFIG_PM */
static int __init p4_init(char **cpu_type) static int __init p4_init(char **cpu_type)
...@@ -695,6 +702,8 @@ int __init op_nmi_init(struct oprofile_operations *ops) ...@@ -695,6 +702,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 +783,10 @@ int __init op_nmi_init(struct oprofile_operations *ops) ...@@ -774,7 +783,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;
......
...@@ -141,16 +141,6 @@ static struct notifier_block module_load_nb = { ...@@ -141,16 +141,6 @@ static struct notifier_block module_load_nb = {
.notifier_call = module_load_notify, .notifier_call = module_load_notify,
}; };
static void end_sync(void)
{
end_cpu_work();
/* make sure we don't leak task structs */
process_task_mortuary();
process_task_mortuary();
}
int sync_start(void) int sync_start(void)
{ {
int err; int err;
...@@ -158,7 +148,7 @@ int sync_start(void) ...@@ -158,7 +148,7 @@ int sync_start(void)
if (!zalloc_cpumask_var(&marked_cpus, GFP_KERNEL)) if (!zalloc_cpumask_var(&marked_cpus, GFP_KERNEL))
return -ENOMEM; return -ENOMEM;
start_cpu_work(); mutex_lock(&buffer_mutex);
err = task_handoff_register(&task_free_nb); err = task_handoff_register(&task_free_nb);
if (err) if (err)
...@@ -173,7 +163,10 @@ int sync_start(void) ...@@ -173,7 +163,10 @@ int sync_start(void)
if (err) if (err)
goto out4; goto out4;
start_cpu_work();
out: out:
mutex_unlock(&buffer_mutex);
return err; return err;
out4: out4:
profile_event_unregister(PROFILE_MUNMAP, &munmap_nb); profile_event_unregister(PROFILE_MUNMAP, &munmap_nb);
...@@ -182,7 +175,6 @@ int sync_start(void) ...@@ -182,7 +175,6 @@ int sync_start(void)
out2: out2:
task_handoff_unregister(&task_free_nb); task_handoff_unregister(&task_free_nb);
out1: out1:
end_sync();
free_cpumask_var(marked_cpus); free_cpumask_var(marked_cpus);
goto out; goto out;
} }
...@@ -190,11 +182,20 @@ int sync_start(void) ...@@ -190,11 +182,20 @@ int sync_start(void)
void sync_stop(void) void sync_stop(void)
{ {
/* flush buffers */
mutex_lock(&buffer_mutex);
end_cpu_work();
unregister_module_notifier(&module_load_nb); unregister_module_notifier(&module_load_nb);
profile_event_unregister(PROFILE_MUNMAP, &munmap_nb); profile_event_unregister(PROFILE_MUNMAP, &munmap_nb);
profile_event_unregister(PROFILE_TASK_EXIT, &task_exit_nb); profile_event_unregister(PROFILE_TASK_EXIT, &task_exit_nb);
task_handoff_unregister(&task_free_nb); task_handoff_unregister(&task_free_nb);
end_sync(); mutex_unlock(&buffer_mutex);
flush_scheduled_work();
/* make sure we don't leak task structs */
process_task_mortuary();
process_task_mortuary();
free_cpumask_var(marked_cpus); free_cpumask_var(marked_cpus);
} }
......
...@@ -120,8 +120,6 @@ void end_cpu_work(void) ...@@ -120,8 +120,6 @@ void end_cpu_work(void)
cancel_delayed_work(&b->work); cancel_delayed_work(&b->work);
} }
flush_scheduled_work();
} }
/* /*
......
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