Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
lib
smp_processor_id.c
Go to the documentation of this file.
1
/*
2
* lib/smp_processor_id.c
3
*
4
* DEBUG_PREEMPT variant of smp_processor_id().
5
*/
6
#include <linux/export.h>
7
#include <
linux/kallsyms.h
>
8
#include <linux/sched.h>
9
10
notrace
unsigned
int
debug_smp_processor_id
(
void
)
11
{
12
unsigned
long
preempt_count
=
preempt_count
();
13
int
this_cpu =
raw_smp_processor_id
();
14
15
if
(
likely
(preempt_count))
16
goto
out
;
17
18
if
(
irqs_disabled
())
19
goto
out
;
20
21
/*
22
* Kernel threads bound to a single CPU can safely use
23
* smp_processor_id():
24
*/
25
if
(cpumask_equal(
tsk_cpus_allowed
(
current
),
cpumask_of
(this_cpu)))
26
goto
out
;
27
28
/*
29
* It is valid to assume CPU-locality during early bootup:
30
*/
31
if
(
system_state
!=
SYSTEM_RUNNING
)
32
goto
out
;
33
34
/*
35
* Avoid recursion:
36
*/
37
preempt_disable_notrace
();
38
39
if
(!printk_ratelimit())
40
goto
out_enable;
41
42
printk
(
KERN_ERR
"BUG: using smp_processor_id() in preemptible [%08x] "
43
"code: %s/%d\n"
,
44
preempt_count
() - 1,
current
->comm,
current
->pid);
45
print_symbol(
"caller is %s\n"
, (
long
)__builtin_return_address(0));
46
dump_stack
();
47
48
out_enable:
49
preempt_enable_no_resched_notrace
();
50
out
:
51
return
this_cpu;
52
}
53
54
EXPORT_SYMBOL
(
debug_smp_processor_id
);
55
Generated on Thu Jan 10 2013 14:55:54 for Linux Kernel by
1.8.2