Merge branch 'urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/rric/oprofile into perf/urgent
This commit is contained in:
Коммит
b4c69d45c4
|
@ -568,8 +568,13 @@ static int __init init_sysfs(void)
|
|||
int error;
|
||||
|
||||
error = sysdev_class_register(&oprofile_sysclass);
|
||||
if (!error)
|
||||
error = sysdev_register(&device_oprofile);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
error = sysdev_register(&device_oprofile);
|
||||
if (error)
|
||||
sysdev_class_unregister(&oprofile_sysclass);
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
|
@ -580,8 +585,10 @@ static void exit_sysfs(void)
|
|||
}
|
||||
|
||||
#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 */
|
||||
|
||||
static int __init p4_init(char **cpu_type)
|
||||
|
@ -695,6 +702,8 @@ int __init op_nmi_init(struct oprofile_operations *ops)
|
|||
char *cpu_type = NULL;
|
||||
int ret = 0;
|
||||
|
||||
using_nmi = 0;
|
||||
|
||||
if (!cpu_has_apic)
|
||||
return -ENODEV;
|
||||
|
||||
|
@ -774,7 +783,10 @@ int __init op_nmi_init(struct oprofile_operations *ops)
|
|||
|
||||
mux_init(ops);
|
||||
|
||||
init_sysfs();
|
||||
ret = init_sysfs();
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
using_nmi = 1;
|
||||
printk(KERN_INFO "oprofile: using NMI interrupt.\n");
|
||||
return 0;
|
||||
|
|
|
@ -141,16 +141,6 @@ static struct notifier_block module_load_nb = {
|
|||
.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 err;
|
||||
|
@ -158,7 +148,7 @@ int sync_start(void)
|
|||
if (!zalloc_cpumask_var(&marked_cpus, GFP_KERNEL))
|
||||
return -ENOMEM;
|
||||
|
||||
start_cpu_work();
|
||||
mutex_lock(&buffer_mutex);
|
||||
|
||||
err = task_handoff_register(&task_free_nb);
|
||||
if (err)
|
||||
|
@ -173,7 +163,10 @@ int sync_start(void)
|
|||
if (err)
|
||||
goto out4;
|
||||
|
||||
start_cpu_work();
|
||||
|
||||
out:
|
||||
mutex_unlock(&buffer_mutex);
|
||||
return err;
|
||||
out4:
|
||||
profile_event_unregister(PROFILE_MUNMAP, &munmap_nb);
|
||||
|
@ -182,7 +175,6 @@ out3:
|
|||
out2:
|
||||
task_handoff_unregister(&task_free_nb);
|
||||
out1:
|
||||
end_sync();
|
||||
free_cpumask_var(marked_cpus);
|
||||
goto out;
|
||||
}
|
||||
|
@ -190,11 +182,20 @@ out1:
|
|||
|
||||
void sync_stop(void)
|
||||
{
|
||||
/* flush buffers */
|
||||
mutex_lock(&buffer_mutex);
|
||||
end_cpu_work();
|
||||
unregister_module_notifier(&module_load_nb);
|
||||
profile_event_unregister(PROFILE_MUNMAP, &munmap_nb);
|
||||
profile_event_unregister(PROFILE_TASK_EXIT, &task_exit_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);
|
||||
}
|
||||
|
||||
|
|
|
@ -120,8 +120,6 @@ void end_cpu_work(void)
|
|||
|
||||
cancel_delayed_work(&b->work);
|
||||
}
|
||||
|
||||
flush_scheduled_work();
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Загрузка…
Ссылка в новой задаче