Messages in this thread Patch in this message |  | | Subject | Re: [patch] rt: fix ipi kfree(), introduce IPI_SOFTIRQ | | From | Peter Zijlstra <> | | Date | Thu, 12 Feb 2009 10:22:44 +0100 |
| |
On Thu, 2009-02-12 at 09:19 +0100, Ingo Molnar wrote: > * Ingo Molnar <mingo@elte.hu> wrote: > > > hm, that's a complex one - we do kfree() from IPI context, [...] > > The patch below might do the trick - it offloads this to a softirq. > Not tested yet.
The simple fix is something like:
--- kernel/smp.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/kernel/smp.c b/kernel/smp.c index bbedbb7..9b974c1 100644 --- a/kernel/smp.c +++ b/kernel/smp.c @@ -252,7 +252,11 @@ int smp_call_function_single(int cpu, void (*func) (void *info), void *info, * will make sure the callee is done with the * data before a new caller will use it. */ +#ifndef CONFIG_PREEMPT_RT data = kmalloc(sizeof(*data), GFP_ATOMIC); +#else + data = NULL; +#endif if (data) data->flags = CSD_FLAG_ALLOC; else { @@ -347,7 +351,11 @@ void smp_call_function_many(const struct cpumask *mask, return; } +#ifndef CONFIG_PREEMPT_RT data = kmalloc(sizeof(*data) + cpumask_size(), GFP_ATOMIC); +#else + data = NULL; +#endif if (unlikely(!data)) { /* Slow path. */ for_each_online_cpu(cpu) {
|  |