aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-generic
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2009-03-29 23:04:53 -0400
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2009-03-29 23:04:53 -0400
commit9ff9a26b786c35ee8d2a66222924a807ec851a9f (patch)
treedb432a17bccca1ca2c16907f0ee83ac449ed4012 /include/asm-generic
parent0a3108beea9143225119d5e7c72a8e2c64f3eb7d (diff)
parent0d34fb8e93ceba7b6dad0062dbb4a0813bacd75b (diff)
Merge commit 'origin/master' into next
Manual merge of: arch/powerpc/include/asm/elf.h drivers/i2c/busses/i2c-mpc.c
Diffstat (limited to 'include/asm-generic')
-rw-r--r--include/asm-generic/fcntl.h12
-rw-r--r--include/asm-generic/percpu.h52
-rw-r--r--include/asm-generic/sections.h2
-rw-r--r--include/asm-generic/siginfo.h14
-rw-r--r--include/asm-generic/statfs.h5
-rw-r--r--include/asm-generic/vmlinux.lds.h70
6 files changed, 126 insertions, 29 deletions
diff --git a/include/asm-generic/fcntl.h b/include/asm-generic/fcntl.h
index b8477414c5c8..4d3e48373e74 100644
--- a/include/asm-generic/fcntl.h
+++ b/include/asm-generic/fcntl.h
@@ -117,9 +117,9 @@
117struct flock { 117struct flock {
118 short l_type; 118 short l_type;
119 short l_whence; 119 short l_whence;
120 off_t l_start; 120 __kernel_off_t l_start;
121 off_t l_len; 121 __kernel_off_t l_len;
122 pid_t l_pid; 122 __kernel_pid_t l_pid;
123 __ARCH_FLOCK_PAD 123 __ARCH_FLOCK_PAD
124}; 124};
125#endif 125#endif
@@ -140,9 +140,9 @@ struct flock {
140struct flock64 { 140struct flock64 {
141 short l_type; 141 short l_type;
142 short l_whence; 142 short l_whence;
143 loff_t l_start; 143 __kernel_loff_t l_start;
144 loff_t l_len; 144 __kernel_loff_t l_len;
145 pid_t l_pid; 145 __kernel_pid_t l_pid;
146 __ARCH_FLOCK64_PAD 146 __ARCH_FLOCK64_PAD
147}; 147};
148#endif 148#endif
diff --git a/include/asm-generic/percpu.h b/include/asm-generic/percpu.h
index b0e63c672ebd..00f45ff081a6 100644
--- a/include/asm-generic/percpu.h
+++ b/include/asm-generic/percpu.h
@@ -80,4 +80,56 @@ extern void setup_per_cpu_areas(void);
80#define DECLARE_PER_CPU(type, name) extern PER_CPU_ATTRIBUTES \ 80#define DECLARE_PER_CPU(type, name) extern PER_CPU_ATTRIBUTES \
81 __typeof__(type) per_cpu_var(name) 81 __typeof__(type) per_cpu_var(name)
82 82
83/*
84 * Optional methods for optimized non-lvalue per-cpu variable access.
85 *
86 * @var can be a percpu variable or a field of it and its size should
87 * equal char, int or long. percpu_read() evaluates to a lvalue and
88 * all others to void.
89 *
90 * These operations are guaranteed to be atomic w.r.t. preemption.
91 * The generic versions use plain get/put_cpu_var(). Archs are
92 * encouraged to implement single-instruction alternatives which don't
93 * require preemption protection.
94 */
95#ifndef percpu_read
96# define percpu_read(var) \
97 ({ \
98 typeof(per_cpu_var(var)) __tmp_var__; \
99 __tmp_var__ = get_cpu_var(var); \
100 put_cpu_var(var); \
101 __tmp_var__; \
102 })
103#endif
104
105#define __percpu_generic_to_op(var, val, op) \
106do { \
107 get_cpu_var(var) op val; \
108 put_cpu_var(var); \
109} while (0)
110
111#ifndef percpu_write
112# define percpu_write(var, val) __percpu_generic_to_op(var, (val), =)
113#endif
114
115#ifndef percpu_add
116# define percpu_add(var, val) __percpu_generic_to_op(var, (val), +=)
117#endif
118
119#ifndef percpu_sub
120# define percpu_sub(var, val) __percpu_generic_to_op(var, (val), -=)
121#endif
122
123#ifndef percpu_and
124# define percpu_and(var, val) __percpu_generic_to_op(var, (val), &=)
125#endif
126
127#ifndef percpu_or
128# define percpu_or(var, val) __percpu_generic_to_op(var, (val), |=)
129#endif
130
131#ifndef percpu_xor
132# define percpu_xor(var, val) __percpu_generic_to_op(var, (val), ^=)
133#endif
134
83#endif /* _ASM_GENERIC_PERCPU_H_ */ 135#endif /* _ASM_GENERIC_PERCPU_H_ */
diff --git a/include/asm-generic/sections.h b/include/asm-generic/sections.h
index 79a7ff925bf8..4ce48e878530 100644
--- a/include/asm-generic/sections.h
+++ b/include/asm-generic/sections.h
@@ -9,7 +9,7 @@ extern char __bss_start[], __bss_stop[];
9extern char __init_begin[], __init_end[]; 9extern char __init_begin[], __init_end[];
10extern char _sinittext[], _einittext[]; 10extern char _sinittext[], _einittext[];
11extern char _end[]; 11extern char _end[];
12extern char __per_cpu_start[], __per_cpu_end[]; 12extern char __per_cpu_load[], __per_cpu_start[], __per_cpu_end[];
13extern char __kprobes_text_start[], __kprobes_text_end[]; 13extern char __kprobes_text_start[], __kprobes_text_end[];
14extern char __initdata_begin[], __initdata_end[]; 14extern char __initdata_begin[], __initdata_end[];
15extern char __start_rodata[], __end_rodata[]; 15extern char __start_rodata[], __end_rodata[];
diff --git a/include/asm-generic/siginfo.h b/include/asm-generic/siginfo.h
index 969570167e9e..35752dadd6df 100644
--- a/include/asm-generic/siginfo.h
+++ b/include/asm-generic/siginfo.h
@@ -23,7 +23,7 @@ typedef union sigval {
23#endif 23#endif
24 24
25#ifndef __ARCH_SI_UID_T 25#ifndef __ARCH_SI_UID_T
26#define __ARCH_SI_UID_T uid_t 26#define __ARCH_SI_UID_T __kernel_uid32_t
27#endif 27#endif
28 28
29/* 29/*
@@ -47,13 +47,13 @@ typedef struct siginfo {
47 47
48 /* kill() */ 48 /* kill() */
49 struct { 49 struct {
50 pid_t _pid; /* sender's pid */ 50 __kernel_pid_t _pid; /* sender's pid */
51 __ARCH_SI_UID_T _uid; /* sender's uid */ 51 __ARCH_SI_UID_T _uid; /* sender's uid */
52 } _kill; 52 } _kill;
53 53
54 /* POSIX.1b timers */ 54 /* POSIX.1b timers */
55 struct { 55 struct {
56 timer_t _tid; /* timer id */ 56 __kernel_timer_t _tid; /* timer id */
57 int _overrun; /* overrun count */ 57 int _overrun; /* overrun count */
58 char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)]; 58 char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)];
59 sigval_t _sigval; /* same as below */ 59 sigval_t _sigval; /* same as below */
@@ -62,18 +62,18 @@ typedef struct siginfo {
62 62
63 /* POSIX.1b signals */ 63 /* POSIX.1b signals */
64 struct { 64 struct {
65 pid_t _pid; /* sender's pid */ 65 __kernel_pid_t _pid; /* sender's pid */
66 __ARCH_SI_UID_T _uid; /* sender's uid */ 66 __ARCH_SI_UID_T _uid; /* sender's uid */
67 sigval_t _sigval; 67 sigval_t _sigval;
68 } _rt; 68 } _rt;
69 69
70 /* SIGCHLD */ 70 /* SIGCHLD */
71 struct { 71 struct {
72 pid_t _pid; /* which child */ 72 __kernel_pid_t _pid; /* which child */
73 __ARCH_SI_UID_T _uid; /* sender's uid */ 73 __ARCH_SI_UID_T _uid; /* sender's uid */
74 int _status; /* exit code */ 74 int _status; /* exit code */
75 clock_t _utime; 75 __kernel_clock_t _utime;
76 clock_t _stime; 76 __kernel_clock_t _stime;
77 } _sigchld; 77 } _sigchld;
78 78
79 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */ 79 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
diff --git a/include/asm-generic/statfs.h b/include/asm-generic/statfs.h
index 6129d6802149..3b4fb3e52f0d 100644
--- a/include/asm-generic/statfs.h
+++ b/include/asm-generic/statfs.h
@@ -1,8 +1,9 @@
1#ifndef _GENERIC_STATFS_H 1#ifndef _GENERIC_STATFS_H
2#define _GENERIC_STATFS_H 2#define _GENERIC_STATFS_H
3 3
4#ifndef __KERNEL_STRICT_NAMES 4#include <linux/types.h>
5# include <linux/types.h> 5
6#ifdef __KERNEL__
6typedef __kernel_fsid_t fsid_t; 7typedef __kernel_fsid_t fsid_t;
7#endif 8#endif
8 9
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index c61fab1dd2f8..a654d724d3b0 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -80,6 +80,11 @@
80 VMLINUX_SYMBOL(__start___tracepoints) = .; \ 80 VMLINUX_SYMBOL(__start___tracepoints) = .; \
81 *(__tracepoints) \ 81 *(__tracepoints) \
82 VMLINUX_SYMBOL(__stop___tracepoints) = .; \ 82 VMLINUX_SYMBOL(__stop___tracepoints) = .; \
83 /* implement dynamic printk debug */ \
84 . = ALIGN(8); \
85 VMLINUX_SYMBOL(__start___verbose) = .; \
86 *(__verbose) \
87 VMLINUX_SYMBOL(__stop___verbose) = .; \
83 LIKELY_PROFILE() \ 88 LIKELY_PROFILE() \
84 BRANCH_PROFILE() 89 BRANCH_PROFILE()
85 90
@@ -309,15 +314,7 @@
309 CPU_DISCARD(init.data) \ 314 CPU_DISCARD(init.data) \
310 CPU_DISCARD(init.rodata) \ 315 CPU_DISCARD(init.rodata) \
311 MEM_DISCARD(init.data) \ 316 MEM_DISCARD(init.data) \
312 MEM_DISCARD(init.rodata) \ 317 MEM_DISCARD(init.rodata)
313 /* implement dynamic printk debug */ \
314 VMLINUX_SYMBOL(__start___verbose_strings) = .; \
315 *(__verbose_strings) \
316 VMLINUX_SYMBOL(__stop___verbose_strings) = .; \
317 . = ALIGN(8); \
318 VMLINUX_SYMBOL(__start___verbose) = .; \
319 *(__verbose) \
320 VMLINUX_SYMBOL(__stop___verbose) = .;
321 318
322#define INIT_TEXT \ 319#define INIT_TEXT \
323 *(.init.text) \ 320 *(.init.text) \
@@ -430,12 +427,59 @@
430 *(.initcall7.init) \ 427 *(.initcall7.init) \
431 *(.initcall7s.init) 428 *(.initcall7s.init)
432 429
430/**
431 * PERCPU_VADDR - define output section for percpu area
432 * @vaddr: explicit base address (optional)
433 * @phdr: destination PHDR (optional)
434 *
435 * Macro which expands to output section for percpu area. If @vaddr
436 * is not blank, it specifies explicit base address and all percpu
437 * symbols will be offset from the given address. If blank, @vaddr
438 * always equals @laddr + LOAD_OFFSET.
439 *
440 * @phdr defines the output PHDR to use if not blank. Be warned that
441 * output PHDR is sticky. If @phdr is specified, the next output
442 * section in the linker script will go there too. @phdr should have
443 * a leading colon.
444 *
445 * Note that this macros defines __per_cpu_load as an absolute symbol.
446 * If there is no need to put the percpu section at a predetermined
447 * address, use PERCPU().
448 */
449#define PERCPU_VADDR(vaddr, phdr) \
450 VMLINUX_SYMBOL(__per_cpu_load) = .; \
451 .data.percpu vaddr : AT(VMLINUX_SYMBOL(__per_cpu_load) \
452 - LOAD_OFFSET) { \
453 VMLINUX_SYMBOL(__per_cpu_start) = .; \
454 *(.data.percpu.first) \
455 *(.data.percpu.page_aligned) \
456 *(.data.percpu) \
457 *(.data.percpu.shared_aligned) \
458 VMLINUX_SYMBOL(__per_cpu_end) = .; \
459 } phdr \
460 . = VMLINUX_SYMBOL(__per_cpu_load) + SIZEOF(.data.percpu);
461
462/**
463 * PERCPU - define output section for percpu area, simple version
464 * @align: required alignment
465 *
466 * Align to @align and outputs output section for percpu area. This
467 * macro doesn't maniuplate @vaddr or @phdr and __per_cpu_load and
468 * __per_cpu_start will be identical.
469 *
470 * This macro is equivalent to ALIGN(align); PERCPU_VADDR( , ) except
471 * that __per_cpu_load is defined as a relative symbol against
472 * .data.percpu which is required for relocatable x86_32
473 * configuration.
474 */
433#define PERCPU(align) \ 475#define PERCPU(align) \
434 . = ALIGN(align); \ 476 . = ALIGN(align); \
435 VMLINUX_SYMBOL(__per_cpu_start) = .; \ 477 .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) { \
436 .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) { \ 478 VMLINUX_SYMBOL(__per_cpu_load) = .; \
479 VMLINUX_SYMBOL(__per_cpu_start) = .; \
480 *(.data.percpu.first) \
437 *(.data.percpu.page_aligned) \ 481 *(.data.percpu.page_aligned) \
438 *(.data.percpu) \ 482 *(.data.percpu) \
439 *(.data.percpu.shared_aligned) \ 483 *(.data.percpu.shared_aligned) \
440 } \ 484 VMLINUX_SYMBOL(__per_cpu_end) = .; \
441 VMLINUX_SYMBOL(__per_cpu_end) = .; 485 }