linux/kernel/up.c
<<
>>
Prefs
   1/*
   2 * Uniprocessor-only support functions.  The counterpart to kernel/smp.c
   3 */
   4
   5#include <linux/interrupt.h>
   6#include <linux/kernel.h>
   7#include <linux/export.h>
   8#include <linux/smp.h>
   9
  10int smp_call_function_single(int cpu, void (*func) (void *info), void *info,
  11                                int wait)
  12{
  13        unsigned long flags;
  14
  15        WARN_ON(cpu != 0);
  16
  17        local_irq_save(flags);
  18        func(info);
  19        local_irq_restore(flags);
  20
  21        return 0;
  22}
  23EXPORT_SYMBOL(smp_call_function_single);
  24
  25int on_each_cpu(smp_call_func_t func, void *info, int wait)
  26{
  27        unsigned long flags;
  28
  29        local_irq_save(flags);
  30        func(info);
  31        local_irq_restore(flags);
  32        return 0;
  33}
  34EXPORT_SYMBOL(on_each_cpu);
  35
  36/*
  37 * Note we still need to test the mask even for UP
  38 * because we actually can get an empty mask from
  39 * code that on SMP might call us without the local
  40 * CPU in the mask.
  41 */
  42void on_each_cpu_mask(const struct cpumask *mask,
  43                      smp_call_func_t func, void *info, bool wait)
  44{
  45        unsigned long flags;
  46
  47        if (cpumask_test_cpu(0, mask)) {
  48                local_irq_save(flags);
  49                func(info);
  50                local_irq_restore(flags);
  51        }
  52}
  53EXPORT_SYMBOL(on_each_cpu_mask);
  54
  55/*
  56 * Preemption is disabled here to make sure the cond_func is called under the
  57 * same condtions in UP and SMP.
  58 */
  59void on_each_cpu_cond(bool (*cond_func)(int cpu, void *info),
  60                      smp_call_func_t func, void *info, bool wait,
  61                      gfp_t gfp_flags)
  62{
  63        unsigned long flags;
  64
  65        preempt_disable();
  66        if (cond_func(0, info)) {
  67                local_irq_save(flags);
  68                func(info);
  69                local_irq_restore(flags);
  70        }
  71        preempt_enable();
  72}
  73EXPORT_SYMBOL(on_each_cpu_cond);
  74
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.