Subversion Repositories shark

Rev

Rev 422 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
422 giacomo 1
#ifndef __LINUX_SMP_H
2
#define __LINUX_SMP_H
3
 
4
/*
5
 *      Generic SMP support
6
 *              Alan Cox. <alan@redhat.com>
7
 */
8
 
9
#include <linux/config.h>
10
 
11
#ifdef CONFIG_SMP
12
 
13
#include <linux/preempt.h>
14
#include <linux/kernel.h>
15
#include <linux/compiler.h>
16
#include <linux/thread_info.h>
17
#include <asm/smp.h>
18
#include <asm/bug.h>
19
 
20
/*
21
 * main cross-CPU interfaces, handles INIT, TLB flush, STOP, etc.
22
 * (defined in asm header):
23
 */
24
 
25
/*
26
 * stops all CPUs but the current one:
27
 */
28
extern void smp_send_stop(void);
29
 
30
/*
31
 * sends a 'reschedule' event to another CPU:
32
 */
33
extern void FASTCALL(smp_send_reschedule(int cpu));
34
 
35
 
36
/*
37
 * Prepare machine for booting other CPUs.
38
 */
39
extern void smp_prepare_cpus(unsigned int max_cpus);
40
 
41
/*
42
 * Bring a CPU up
43
 */
44
extern int __cpu_up(unsigned int cpunum);
45
 
46
/*
47
 * Final polishing of CPUs
48
 */
49
extern void smp_cpus_done(unsigned int max_cpus);
50
 
51
/*
52
 * Call a function on all other processors
53
 */
54
extern int smp_call_function (void (*func) (void *info), void *info,
55
                              int retry, int wait);
56
 
57
/*
58
 * Call a function on all processors
59
 */
60
static inline int on_each_cpu(void (*func) (void *info), void *info,
61
                              int retry, int wait)
62
{
63
        int ret = 0;
64
 
65
        preempt_disable();
66
        ret = smp_call_function(func, info, retry, wait);
67
        func(info);
68
        preempt_enable();
69
        return ret;
70
}
71
 
72
/*
73
 * True once the per process idle is forked
74
 */
75
extern int smp_threads_ready;
76
 
77
#define MSG_ALL_BUT_SELF        0x8000  /* Assume <32768 CPU's */
78
#define MSG_ALL                 0x8001
79
 
80
#define MSG_INVALIDATE_TLB      0x0001  /* Remote processor TLB invalidate */
81
#define MSG_STOP_CPU            0x0002  /* Sent to shut down slave CPU's
82
                                         * when rebooting
83
                                         */
84
#define MSG_RESCHEDULE          0x0003  /* Reschedule request from master CPU*/
85
#define MSG_CALL_FUNCTION       0x0004  /* Call function on all other CPUs */
86
 
87
/*
88
 * Mark the boot cpu "online" so that it can call console drivers in
89
 * printk() and can access its per-cpu storage.
90
 */
91
void smp_prepare_boot_cpu(void);
92
 
93
#else /* !SMP */
94
 
95
/*
96
 *      These macros fold the SMP functionality into a single CPU system
97
 */
98
 
99
#define smp_processor_id()                      0
100
#define hard_smp_processor_id()                 0
101
#define smp_threads_ready                       1
102
#define smp_call_function(func,info,retry,wait) ({ 0; })
103
#define on_each_cpu(func,info,retry,wait)       ({ func(info); 0; })
104
static inline void smp_send_reschedule(int cpu) { }
105
#define num_booting_cpus()                      1
106
#define cpu_possible(cpu)                       ({ BUG_ON((cpu) != 0); 1; })
107
#define smp_prepare_boot_cpu()                  do {} while (0)
108
 
109
#endif /* !SMP */
110
 
111
#define get_cpu()               ({ preempt_disable(); smp_processor_id(); })
112
#define put_cpu()               preempt_enable()
113
#define put_cpu_no_resched()    preempt_enable_no_resched()
114
 
115
#endif /* __LINUX_SMP_H */