Re: [PATCH 05/13] rcu: Fix unraised IPI to timekeeping CPU

From: Peter Zijlstra
Date: Wed Dec 18 2013 - 07:12:32 EST


On Tue, Dec 17, 2013 at 11:51:24PM +0100, Frederic Weisbecker wrote:
> - rcu_kick_nohz_cpu(tick_do_timer_cpu);
> + smp_send_reschedule(tick_do_timer_cpu);

Hurm.. so I don't really like this (same for the other patches doing the
similar change).

Why not have a function called: wake_time_keeper_cpu(), and have that do
the right thing?

Also, afaict, all you want is that remote cpu to run
tick_nohz_full_check(), right?

So why are you (ab)using the scheduler_ipi for this at all? Why not have
something like:

static DEFINE_PER_CPU(struct call_single_data, nohz_full_csd);

int init_nohz_full(void)
{
int cpu;

for_each_possible_cpu(cpu) {
struct call_single_data *csd = &per_cpu(nohz_full_csd, cpu);

csd->flags = 0;
csd->func = &tick_nohz_full_check;
csd->info = NULL;
}

return 0;
}

void wake_time_keeper_cpu(void)
{
int cpu = pick_timekeeper_cpu();
struct single_call_data *csd = &per_cpu(nohz_full_csd, cpu);

__smp_call_function_single(cpu, csd, 0);
}
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/