Пример #1
0
static int nmi_timer_setup(void)
{
	int cpu, err;
	u64 period;

	/* clock cycles per tick: */
	period = (u64)cpu_khz * 1000;
	do_div(period, HZ);
	nmi_timer_attr.sample_period = period;

	cpu_notifier_register_begin();
	err = __register_cpu_notifier(&nmi_timer_cpu_nb);
	if (err)
		goto out;

	/* can't attach events to offline cpus: */
	for_each_online_cpu(cpu) {
		err = nmi_timer_start_cpu(cpu);
		if (err) {
			cpu_notifier_register_done();
			nmi_timer_shutdown();
			return err;
		}
	}

out:
	cpu_notifier_register_done();
	return err;
}
Пример #2
0
static int nmi_timer_start(void)
{
	int cpu;

	get_online_cpus();
	ctr_running = 1;
	for_each_online_cpu(cpu)
		nmi_timer_start_cpu(cpu);
	put_online_cpus();

	return 0;
}
Пример #3
0
static int nmi_timer_cpu_notifier(struct notifier_block *b, unsigned long action,
				  void *data)
{
	int cpu = (unsigned long)data;
	switch (action) {
	case CPU_DOWN_FAILED:
	case CPU_ONLINE:
		nmi_timer_start_cpu(cpu);
		break;
	case CPU_DOWN_PREPARE:
		nmi_timer_stop_cpu(cpu);
		break;
	}
	return NOTIFY_DONE;
}
Пример #4
0
static int nmi_timer_cpu_online(unsigned int cpu)
{
	nmi_timer_start_cpu(cpu);
	return 0;
}