diff options
Diffstat (limited to 'arch')
92 files changed, 449 insertions, 218 deletions
diff --git a/arch/alpha/include/asm/barrier.h b/arch/alpha/include/asm/barrier.h index ac78eba909bc..ce8860a0b32d 100644 --- a/arch/alpha/include/asm/barrier.h +++ b/arch/alpha/include/asm/barrier.h | |||
@@ -16,11 +16,13 @@ __asm__ __volatile__("wmb": : :"memory") | |||
16 | __asm__ __volatile__("mb": : :"memory") | 16 | __asm__ __volatile__("mb": : :"memory") |
17 | 17 | ||
18 | #ifdef CONFIG_SMP | 18 | #ifdef CONFIG_SMP |
19 | #define __ASM_SMP_MB "\tmb\n" | ||
19 | #define smp_mb() mb() | 20 | #define smp_mb() mb() |
20 | #define smp_rmb() rmb() | 21 | #define smp_rmb() rmb() |
21 | #define smp_wmb() wmb() | 22 | #define smp_wmb() wmb() |
22 | #define smp_read_barrier_depends() read_barrier_depends() | 23 | #define smp_read_barrier_depends() read_barrier_depends() |
23 | #else | 24 | #else |
25 | #define __ASM_SMP_MB | ||
24 | #define smp_mb() barrier() | 26 | #define smp_mb() barrier() |
25 | #define smp_rmb() barrier() | 27 | #define smp_rmb() barrier() |
26 | #define smp_wmb() barrier() | 28 | #define smp_wmb() barrier() |
diff --git a/arch/alpha/include/asm/futex.h b/arch/alpha/include/asm/futex.h index 6a332a9f099c..945de222ab91 100644 --- a/arch/alpha/include/asm/futex.h +++ b/arch/alpha/include/asm/futex.h | |||
@@ -1,6 +1,116 @@ | |||
1 | #ifndef _ASM_FUTEX_H | 1 | #ifndef _ASM_ALPHA_FUTEX_H |
2 | #define _ASM_FUTEX_H | 2 | #define _ASM_ALPHA_FUTEX_H |
3 | 3 | ||
4 | #include <asm-generic/futex.h> | 4 | #ifdef __KERNEL__ |
5 | 5 | ||
6 | #endif | 6 | #include <linux/futex.h> |
7 | #include <linux/uaccess.h> | ||
8 | #include <asm/errno.h> | ||
9 | #include <asm/barrier.h> | ||
10 | |||
11 | #define __futex_atomic_op(insn, ret, oldval, uaddr, oparg) \ | ||
12 | __asm__ __volatile__( \ | ||
13 | __ASM_SMP_MB \ | ||
14 | "1: ldl_l %0,0(%2)\n" \ | ||
15 | insn \ | ||
16 | "2: stl_c %1,0(%2)\n" \ | ||
17 | " beq %1,4f\n" \ | ||
18 | " mov $31,%1\n" \ | ||
19 | "3: .subsection 2\n" \ | ||
20 | "4: br 1b\n" \ | ||
21 | " .previous\n" \ | ||
22 | " .section __ex_table,\"a\"\n" \ | ||
23 | " .long 1b-.\n" \ | ||
24 | " lda $31,3b-1b(%1)\n" \ | ||
25 | " .long 2b-.\n" \ | ||
26 | " lda $31,3b-2b(%1)\n" \ | ||
27 | " .previous\n" \ | ||
28 | : "=&r" (oldval), "=&r"(ret) \ | ||
29 | : "r" (uaddr), "r"(oparg) \ | ||
30 | : "memory") | ||
31 | |||
32 | static inline int futex_atomic_op_inuser (int encoded_op, int __user *uaddr) | ||
33 | { | ||
34 | int op = (encoded_op >> 28) & 7; | ||
35 | int cmp = (encoded_op >> 24) & 15; | ||
36 | int oparg = (encoded_op << 8) >> 20; | ||
37 | int cmparg = (encoded_op << 20) >> 20; | ||
38 | int oldval = 0, ret; | ||
39 | if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28)) | ||
40 | oparg = 1 << oparg; | ||
41 | |||
42 | if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int))) | ||
43 | return -EFAULT; | ||
44 | |||
45 | pagefault_disable(); | ||
46 | |||
47 | switch (op) { | ||
48 | case FUTEX_OP_SET: | ||
49 | __futex_atomic_op("mov %3,%1\n", ret, oldval, uaddr, oparg); | ||
50 | break; | ||
51 | case FUTEX_OP_ADD: | ||
52 | __futex_atomic_op("addl %0,%3,%1\n", ret, oldval, uaddr, oparg); | ||
53 | break; | ||
54 | case FUTEX_OP_OR: | ||
55 | __futex_atomic_op("or %0,%3,%1\n", ret, oldval, uaddr, oparg); | ||
56 | break; | ||
57 | case FUTEX_OP_ANDN: | ||
58 | __futex_atomic_op("andnot %0,%3,%1\n", ret, oldval, uaddr, oparg); | ||
59 | break; | ||
60 | case FUTEX_OP_XOR: | ||
61 | __futex_atomic_op("xor %0,%3,%1\n", ret, oldval, uaddr, oparg); | ||
62 | break; | ||
63 | default: | ||
64 | ret = -ENOSYS; | ||
65 | } | ||
66 | |||
67 | pagefault_enable(); | ||
68 | |||
69 | if (!ret) { | ||
70 | switch (cmp) { | ||
71 | case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break; | ||
72 | case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break; | ||
73 | case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break; | ||
74 | case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break; | ||
75 | case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break; | ||
76 | case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break; | ||
77 | default: ret = -ENOSYS; | ||
78 | } | ||
79 | } | ||
80 | return ret; | ||
81 | } | ||
82 | |||
83 | static inline int | ||
84 | futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval) | ||
85 | { | ||
86 | int prev, cmp; | ||
87 | |||
88 | if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int))) | ||
89 | return -EFAULT; | ||
90 | |||
91 | __asm__ __volatile__ ( | ||
92 | __ASM_SMP_MB | ||
93 | "1: ldl_l %0,0(%2)\n" | ||
94 | " cmpeq %0,%3,%1\n" | ||
95 | " beq %1,3f\n" | ||
96 | " mov %4,%1\n" | ||
97 | "2: stl_c %1,0(%2)\n" | ||
98 | " beq %1,4f\n" | ||
99 | "3: .subsection 2\n" | ||
100 | "4: br 1b\n" | ||
101 | " .previous\n" | ||
102 | " .section __ex_table,\"a\"\n" | ||
103 | " .long 1b-.\n" | ||
104 | " lda $31,3b-1b(%0)\n" | ||
105 | " .long 2b-.\n" | ||
106 | " lda $31,3b-2b(%0)\n" | ||
107 | " .previous\n" | ||
108 | : "=&r"(prev), "=&r"(cmp) | ||
109 | : "r"(uaddr), "r"((long)oldval), "r"(newval) | ||
110 | : "memory"); | ||
111 | |||
112 | return prev; | ||
113 | } | ||
114 | |||
115 | #endif /* __KERNEL__ */ | ||
116 | #endif /* _ASM_ALPHA_FUTEX_H */ | ||
diff --git a/arch/alpha/include/asm/uaccess.h b/arch/alpha/include/asm/uaccess.h index 163f3053001c..b49ec2f8d6e3 100644 --- a/arch/alpha/include/asm/uaccess.h +++ b/arch/alpha/include/asm/uaccess.h | |||
@@ -507,5 +507,7 @@ struct exception_table_entry | |||
507 | (pc) + (_fixup)->fixup.bits.nextinsn; \ | 507 | (pc) + (_fixup)->fixup.bits.nextinsn; \ |
508 | }) | 508 | }) |
509 | 509 | ||
510 | #define ARCH_HAS_SORT_EXTABLE | ||
511 | #define ARCH_HAS_SEARCH_EXTABLE | ||
510 | 512 | ||
511 | #endif /* __ALPHA_UACCESS_H */ | 513 | #endif /* __ALPHA_UACCESS_H */ |
diff --git a/arch/alpha/kernel/Makefile b/arch/alpha/kernel/Makefile index a427538252f8..7739a62440a7 100644 --- a/arch/alpha/kernel/Makefile +++ b/arch/alpha/kernel/Makefile | |||
@@ -8,7 +8,7 @@ EXTRA_CFLAGS := -Werror -Wno-sign-compare | |||
8 | 8 | ||
9 | obj-y := entry.o traps.o process.o init_task.o osf_sys.o irq.o \ | 9 | obj-y := entry.o traps.o process.o init_task.o osf_sys.o irq.o \ |
10 | irq_alpha.o signal.o setup.o ptrace.o time.o \ | 10 | irq_alpha.o signal.o setup.o ptrace.o time.o \ |
11 | alpha_ksyms.o systbls.o err_common.o io.o binfmt_loader.o | 11 | alpha_ksyms.o systbls.o err_common.o io.o |
12 | 12 | ||
13 | obj-$(CONFIG_VGA_HOSE) += console.o | 13 | obj-$(CONFIG_VGA_HOSE) += console.o |
14 | obj-$(CONFIG_SMP) += smp.o | 14 | obj-$(CONFIG_SMP) += smp.o |
@@ -43,6 +43,10 @@ else | |||
43 | # Misc support | 43 | # Misc support |
44 | obj-$(CONFIG_ALPHA_SRM) += srmcons.o | 44 | obj-$(CONFIG_ALPHA_SRM) += srmcons.o |
45 | 45 | ||
46 | ifdef CONFIG_BINFMT_AOUT | ||
47 | obj-y += binfmt_loader.o | ||
48 | endif | ||
49 | |||
46 | # Core logic support | 50 | # Core logic support |
47 | obj-$(CONFIG_ALPHA_APECS) += core_apecs.o | 51 | obj-$(CONFIG_ALPHA_APECS) += core_apecs.o |
48 | obj-$(CONFIG_ALPHA_CIA) += core_cia.o | 52 | obj-$(CONFIG_ALPHA_CIA) += core_cia.o |
diff --git a/arch/alpha/kernel/binfmt_loader.c b/arch/alpha/kernel/binfmt_loader.c index 4a0af906b00a..3fcfad410130 100644 --- a/arch/alpha/kernel/binfmt_loader.c +++ b/arch/alpha/kernel/binfmt_loader.c | |||
@@ -46,6 +46,6 @@ static struct linux_binfmt loader_format = { | |||
46 | 46 | ||
47 | static int __init init_loader_binfmt(void) | 47 | static int __init init_loader_binfmt(void) |
48 | { | 48 | { |
49 | return register_binfmt(&loader_format); | 49 | return insert_binfmt(&loader_format); |
50 | } | 50 | } |
51 | arch_initcall(init_loader_binfmt); | 51 | arch_initcall(init_loader_binfmt); |
diff --git a/arch/alpha/kernel/err_ev6.c b/arch/alpha/kernel/err_ev6.c index 985e5c1681ac..8ca6345bf131 100644 --- a/arch/alpha/kernel/err_ev6.c +++ b/arch/alpha/kernel/err_ev6.c | |||
@@ -229,7 +229,7 @@ ev6_process_logout_frame(struct el_common *mchk_header, int print) | |||
229 | } | 229 | } |
230 | 230 | ||
231 | void | 231 | void |
232 | ev6_machine_check(u64 vector, u64 la_ptr) | 232 | ev6_machine_check(unsigned long vector, unsigned long la_ptr) |
233 | { | 233 | { |
234 | struct el_common *mchk_header = (struct el_common *)la_ptr; | 234 | struct el_common *mchk_header = (struct el_common *)la_ptr; |
235 | 235 | ||
diff --git a/arch/alpha/kernel/err_ev7.c b/arch/alpha/kernel/err_ev7.c index 73770c6ca013..d738a67112d4 100644 --- a/arch/alpha/kernel/err_ev7.c +++ b/arch/alpha/kernel/err_ev7.c | |||
@@ -117,7 +117,7 @@ ev7_collect_logout_frame_subpackets(struct el_subpacket *el_ptr, | |||
117 | } | 117 | } |
118 | 118 | ||
119 | void | 119 | void |
120 | ev7_machine_check(u64 vector, u64 la_ptr) | 120 | ev7_machine_check(unsigned long vector, unsigned long la_ptr) |
121 | { | 121 | { |
122 | struct el_subpacket *el_ptr = (struct el_subpacket *)la_ptr; | 122 | struct el_subpacket *el_ptr = (struct el_subpacket *)la_ptr; |
123 | char *saved_err_prefix = err_print_prefix; | 123 | char *saved_err_prefix = err_print_prefix; |
@@ -246,7 +246,7 @@ ev7_process_pal_subpacket(struct el_subpacket *header) | |||
246 | 246 | ||
247 | switch(header->type) { | 247 | switch(header->type) { |
248 | case EL_TYPE__PAL__LOGOUT_FRAME: | 248 | case EL_TYPE__PAL__LOGOUT_FRAME: |
249 | printk("%s*** MCHK occurred on LPID %ld (RBOX %llx)\n", | 249 | printk("%s*** MCHK occurred on LPID %lld (RBOX %llx)\n", |
250 | err_print_prefix, | 250 | err_print_prefix, |
251 | packet->by_type.logout.whami, | 251 | packet->by_type.logout.whami, |
252 | packet->by_type.logout.rbox_whami); | 252 | packet->by_type.logout.rbox_whami); |
diff --git a/arch/alpha/kernel/err_impl.h b/arch/alpha/kernel/err_impl.h index 3c12258158e6..0c010ca4611e 100644 --- a/arch/alpha/kernel/err_impl.h +++ b/arch/alpha/kernel/err_impl.h | |||
@@ -60,26 +60,26 @@ extern struct ev7_lf_subpackets * | |||
60 | ev7_collect_logout_frame_subpackets(struct el_subpacket *, | 60 | ev7_collect_logout_frame_subpackets(struct el_subpacket *, |
61 | struct ev7_lf_subpackets *); | 61 | struct ev7_lf_subpackets *); |
62 | extern void ev7_register_error_handlers(void); | 62 | extern void ev7_register_error_handlers(void); |
63 | extern void ev7_machine_check(u64, u64); | 63 | extern void ev7_machine_check(unsigned long, unsigned long); |
64 | 64 | ||
65 | /* | 65 | /* |
66 | * err_ev6.c | 66 | * err_ev6.c |
67 | */ | 67 | */ |
68 | extern void ev6_register_error_handlers(void); | 68 | extern void ev6_register_error_handlers(void); |
69 | extern int ev6_process_logout_frame(struct el_common *, int); | 69 | extern int ev6_process_logout_frame(struct el_common *, int); |
70 | extern void ev6_machine_check(u64, u64); | 70 | extern void ev6_machine_check(unsigned long, unsigned long); |
71 | 71 | ||
72 | /* | 72 | /* |
73 | * err_marvel.c | 73 | * err_marvel.c |
74 | */ | 74 | */ |
75 | extern void marvel_machine_check(u64, u64); | 75 | extern void marvel_machine_check(unsigned long, unsigned long); |
76 | extern void marvel_register_error_handlers(void); | 76 | extern void marvel_register_error_handlers(void); |
77 | 77 | ||
78 | /* | 78 | /* |
79 | * err_titan.c | 79 | * err_titan.c |
80 | */ | 80 | */ |
81 | extern int titan_process_logout_frame(struct el_common *, int); | 81 | extern int titan_process_logout_frame(struct el_common *, int); |
82 | extern void titan_machine_check(u64, u64); | 82 | extern void titan_machine_check(unsigned long, unsigned long); |
83 | extern void titan_register_error_handlers(void); | 83 | extern void titan_register_error_handlers(void); |
84 | extern int privateer_process_logout_frame(struct el_common *, int); | 84 | extern int privateer_process_logout_frame(struct el_common *, int); |
85 | extern void privateer_machine_check(u64, u64); | 85 | extern void privateer_machine_check(unsigned long, unsigned long); |
diff --git a/arch/alpha/kernel/err_marvel.c b/arch/alpha/kernel/err_marvel.c index 6bfd243efba3..52a79dfc13c6 100644 --- a/arch/alpha/kernel/err_marvel.c +++ b/arch/alpha/kernel/err_marvel.c | |||
@@ -1042,7 +1042,7 @@ marvel_process_logout_frame(struct ev7_lf_subpackets *lf_subpackets, int print) | |||
1042 | } | 1042 | } |
1043 | 1043 | ||
1044 | void | 1044 | void |
1045 | marvel_machine_check(u64 vector, u64 la_ptr) | 1045 | marvel_machine_check(unsigned long vector, unsigned long la_ptr) |
1046 | { | 1046 | { |
1047 | struct el_subpacket *el_ptr = (struct el_subpacket *)la_ptr; | 1047 | struct el_subpacket *el_ptr = (struct el_subpacket *)la_ptr; |
1048 | int (*process_frame)(struct ev7_lf_subpackets *, int) = NULL; | 1048 | int (*process_frame)(struct ev7_lf_subpackets *, int) = NULL; |
diff --git a/arch/alpha/kernel/err_titan.c b/arch/alpha/kernel/err_titan.c index c7e28a88d6e3..f7ed97ce0dfd 100644 --- a/arch/alpha/kernel/err_titan.c +++ b/arch/alpha/kernel/err_titan.c | |||
@@ -380,7 +380,7 @@ titan_process_logout_frame(struct el_common *mchk_header, int print) | |||
380 | } | 380 | } |
381 | 381 | ||
382 | void | 382 | void |
383 | titan_machine_check(u64 vector, u64 la_ptr) | 383 | titan_machine_check(unsigned long vector, unsigned long la_ptr) |
384 | { | 384 | { |
385 | struct el_common *mchk_header = (struct el_common *)la_ptr; | 385 | struct el_common *mchk_header = (struct el_common *)la_ptr; |
386 | struct el_TITAN_sysdata_mcheck *tmchk = | 386 | struct el_TITAN_sysdata_mcheck *tmchk = |
@@ -702,7 +702,7 @@ privateer_process_logout_frame(struct el_common *mchk_header, int print) | |||
702 | } | 702 | } |
703 | 703 | ||
704 | void | 704 | void |
705 | privateer_machine_check(u64 vector, u64 la_ptr) | 705 | privateer_machine_check(unsigned long vector, unsigned long la_ptr) |
706 | { | 706 | { |
707 | struct el_common *mchk_header = (struct el_common *)la_ptr; | 707 | struct el_common *mchk_header = (struct el_common *)la_ptr; |
708 | struct el_TITAN_sysdata_mcheck *tmchk = | 708 | struct el_TITAN_sysdata_mcheck *tmchk = |
diff --git a/arch/alpha/kernel/head.S b/arch/alpha/kernel/head.S index 7ac1f1372c36..4bdd1d2ff353 100644 --- a/arch/alpha/kernel/head.S +++ b/arch/alpha/kernel/head.S | |||
@@ -7,10 +7,11 @@ | |||
7 | * the kernel global pointer and jump to the kernel entry-point. | 7 | * the kernel global pointer and jump to the kernel entry-point. |
8 | */ | 8 | */ |
9 | 9 | ||
10 | #include <linux/init.h> | ||
10 | #include <asm/system.h> | 11 | #include <asm/system.h> |
11 | #include <asm/asm-offsets.h> | 12 | #include <asm/asm-offsets.h> |
12 | 13 | ||
13 | .section .text.head, "ax" | 14 | __HEAD |
14 | .globl swapper_pg_dir | 15 | .globl swapper_pg_dir |
15 | .globl _stext | 16 | .globl _stext |
16 | swapper_pg_dir=SWAPPER_PGD | 17 | swapper_pg_dir=SWAPPER_PGD |
diff --git a/arch/alpha/kernel/proto.h b/arch/alpha/kernel/proto.h index 567f2598d090..3d2627ec9860 100644 --- a/arch/alpha/kernel/proto.h +++ b/arch/alpha/kernel/proto.h | |||
@@ -36,7 +36,6 @@ extern void cia_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); | |||
36 | extern struct pci_ops irongate_pci_ops; | 36 | extern struct pci_ops irongate_pci_ops; |
37 | extern int irongate_pci_clr_err(void); | 37 | extern int irongate_pci_clr_err(void); |
38 | extern void irongate_init_arch(void); | 38 | extern void irongate_init_arch(void); |
39 | extern void irongate_machine_check(u64, u64); | ||
40 | #define irongate_pci_tbi ((void *)0) | 39 | #define irongate_pci_tbi ((void *)0) |
41 | 40 | ||
42 | /* core_lca.c */ | 41 | /* core_lca.c */ |
@@ -49,7 +48,7 @@ extern void lca_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); | |||
49 | extern struct pci_ops marvel_pci_ops; | 48 | extern struct pci_ops marvel_pci_ops; |
50 | extern void marvel_init_arch(void); | 49 | extern void marvel_init_arch(void); |
51 | extern void marvel_kill_arch(int); | 50 | extern void marvel_kill_arch(int); |
52 | extern void marvel_machine_check(u64, u64); | 51 | extern void marvel_machine_check(unsigned long, unsigned long); |
53 | extern void marvel_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); | 52 | extern void marvel_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); |
54 | extern int marvel_pa_to_nid(unsigned long); | 53 | extern int marvel_pa_to_nid(unsigned long); |
55 | extern int marvel_cpuid_to_nid(int); | 54 | extern int marvel_cpuid_to_nid(int); |
@@ -86,7 +85,7 @@ extern void t2_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); | |||
86 | extern struct pci_ops titan_pci_ops; | 85 | extern struct pci_ops titan_pci_ops; |
87 | extern void titan_init_arch(void); | 86 | extern void titan_init_arch(void); |
88 | extern void titan_kill_arch(int); | 87 | extern void titan_kill_arch(int); |
89 | extern void titan_machine_check(u64, u64); | 88 | extern void titan_machine_check(unsigned long, unsigned long); |
90 | extern void titan_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); | 89 | extern void titan_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); |
91 | extern struct _alpha_agp_info *titan_agp_info(void); | 90 | extern struct _alpha_agp_info *titan_agp_info(void); |
92 | 91 | ||
diff --git a/arch/alpha/kernel/vmlinux.lds.S b/arch/alpha/kernel/vmlinux.lds.S index ef37fc1acaea..b9d6568e5f7f 100644 --- a/arch/alpha/kernel/vmlinux.lds.S +++ b/arch/alpha/kernel/vmlinux.lds.S | |||
@@ -16,7 +16,7 @@ SECTIONS | |||
16 | 16 | ||
17 | _text = .; /* Text and read-only data */ | 17 | _text = .; /* Text and read-only data */ |
18 | .text : { | 18 | .text : { |
19 | *(.text.head) | 19 | HEAD_TEXT |
20 | TEXT_TEXT | 20 | TEXT_TEXT |
21 | SCHED_TEXT | 21 | SCHED_TEXT |
22 | LOCK_TEXT | 22 | LOCK_TEXT |
diff --git a/arch/alpha/mm/extable.c b/arch/alpha/mm/extable.c index dc7aeda15773..62dc379d301a 100644 --- a/arch/alpha/mm/extable.c +++ b/arch/alpha/mm/extable.c | |||
@@ -3,11 +3,49 @@ | |||
3 | */ | 3 | */ |
4 | 4 | ||
5 | #include <linux/module.h> | 5 | #include <linux/module.h> |
6 | #include <linux/sort.h> | ||
6 | #include <asm/uaccess.h> | 7 | #include <asm/uaccess.h> |
7 | 8 | ||
9 | static inline unsigned long ex_to_addr(const struct exception_table_entry *x) | ||
10 | { | ||
11 | return (unsigned long)&x->insn + x->insn; | ||
12 | } | ||
13 | |||
14 | static void swap_ex(void *a, void *b, int size) | ||
15 | { | ||
16 | struct exception_table_entry *ex_a = a, *ex_b = b; | ||
17 | unsigned long addr_a = ex_to_addr(ex_a), addr_b = ex_to_addr(ex_b); | ||
18 | unsigned int t = ex_a->fixup.unit; | ||
19 | |||
20 | ex_a->fixup.unit = ex_b->fixup.unit; | ||
21 | ex_b->fixup.unit = t; | ||
22 | ex_a->insn = (int)(addr_b - (unsigned long)&ex_a->insn); | ||
23 | ex_b->insn = (int)(addr_a - (unsigned long)&ex_b->insn); | ||
24 | } | ||
25 | |||
26 | /* | ||
27 | * The exception table needs to be sorted so that the binary | ||
28 | * search that we use to find entries in it works properly. | ||
29 | * This is used both for the kernel exception table and for | ||
30 | * the exception tables of modules that get loaded. | ||
31 | */ | ||
32 | static int cmp_ex(const void *a, const void *b) | ||
33 | { | ||
34 | const struct exception_table_entry *x = a, *y = b; | ||
35 | |||
36 | /* avoid overflow */ | ||
37 | if (ex_to_addr(x) > ex_to_addr(y)) | ||
38 | return 1; | ||
39 | if (ex_to_addr(x) < ex_to_addr(y)) | ||
40 | return -1; | ||
41 | return 0; | ||
42 | } | ||
43 | |||
8 | void sort_extable(struct exception_table_entry *start, | 44 | void sort_extable(struct exception_table_entry *start, |
9 | struct exception_table_entry *finish) | 45 | struct exception_table_entry *finish) |
10 | { | 46 | { |
47 | sort(start, finish - start, sizeof(struct exception_table_entry), | ||
48 | cmp_ex, swap_ex); | ||
11 | } | 49 | } |
12 | 50 | ||
13 | const struct exception_table_entry * | 51 | const struct exception_table_entry * |
@@ -20,7 +58,7 @@ search_extable(const struct exception_table_entry *first, | |||
20 | unsigned long mid_value; | 58 | unsigned long mid_value; |
21 | 59 | ||
22 | mid = (last - first) / 2 + first; | 60 | mid = (last - first) / 2 + first; |
23 | mid_value = (unsigned long)&mid->insn + mid->insn; | 61 | mid_value = ex_to_addr(mid); |
24 | if (mid_value == value) | 62 | if (mid_value == value) |
25 | return mid; | 63 | return mid; |
26 | else if (mid_value < value) | 64 | else if (mid_value < value) |
diff --git a/arch/arm/mm/proc-v6.S b/arch/arm/mm/proc-v6.S index f0cc599facb7..087e239704df 100644 --- a/arch/arm/mm/proc-v6.S +++ b/arch/arm/mm/proc-v6.S | |||
@@ -10,6 +10,7 @@ | |||
10 | * | 10 | * |
11 | * This is the "shell" of the ARMv6 processor support. | 11 | * This is the "shell" of the ARMv6 processor support. |
12 | */ | 12 | */ |
13 | #include <linux/init.h> | ||
13 | #include <linux/linkage.h> | 14 | #include <linux/linkage.h> |
14 | #include <asm/assembler.h> | 15 | #include <asm/assembler.h> |
15 | #include <asm/asm-offsets.h> | 16 | #include <asm/asm-offsets.h> |
@@ -132,7 +133,7 @@ cpu_v6_name: | |||
132 | .asciz "ARMv6-compatible processor" | 133 | .asciz "ARMv6-compatible processor" |
133 | .align | 134 | .align |
134 | 135 | ||
135 | .section ".text.init", #alloc, #execinstr | 136 | __INIT |
136 | 137 | ||
137 | /* | 138 | /* |
138 | * __v6_setup | 139 | * __v6_setup |
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S index f2305441e7d1..3397f1e64d76 100644 --- a/arch/arm/mm/proc-v7.S +++ b/arch/arm/mm/proc-v7.S | |||
@@ -9,6 +9,7 @@ | |||
9 | * | 9 | * |
10 | * This is the "shell" of the ARMv7 processor support. | 10 | * This is the "shell" of the ARMv7 processor support. |
11 | */ | 11 | */ |
12 | #include <linux/init.h> | ||
12 | #include <linux/linkage.h> | 13 | #include <linux/linkage.h> |
13 | #include <asm/assembler.h> | 14 | #include <asm/assembler.h> |
14 | #include <asm/asm-offsets.h> | 15 | #include <asm/asm-offsets.h> |
@@ -156,7 +157,7 @@ cpu_v7_name: | |||
156 | .ascii "ARMv7 Processor" | 157 | .ascii "ARMv7 Processor" |
157 | .align | 158 | .align |
158 | 159 | ||
159 | .section ".text.init", #alloc, #execinstr | 160 | __INIT |
160 | 161 | ||
161 | /* | 162 | /* |
162 | * __v7_setup | 163 | * __v7_setup |
diff --git a/arch/arm/mm/tlb-v6.S b/arch/arm/mm/tlb-v6.S index 20f84bbaa9bb..73d7d89b04c4 100644 --- a/arch/arm/mm/tlb-v6.S +++ b/arch/arm/mm/tlb-v6.S | |||
@@ -10,6 +10,7 @@ | |||
10 | * ARM architecture version 6 TLB handling functions. | 10 | * ARM architecture version 6 TLB handling functions. |
11 | * These assume a split I/D TLB. | 11 | * These assume a split I/D TLB. |
12 | */ | 12 | */ |
13 | #include <linux/init.h> | ||
13 | #include <linux/linkage.h> | 14 | #include <linux/linkage.h> |
14 | #include <asm/asm-offsets.h> | 15 | #include <asm/asm-offsets.h> |
15 | #include <asm/page.h> | 16 | #include <asm/page.h> |
@@ -87,7 +88,7 @@ ENTRY(v6wbi_flush_kern_tlb_range) | |||
87 | mcr p15, 0, r2, c7, c5, 4 @ prefetch flush | 88 | mcr p15, 0, r2, c7, c5, 4 @ prefetch flush |
88 | mov pc, lr | 89 | mov pc, lr |
89 | 90 | ||
90 | .section ".text.init", #alloc, #execinstr | 91 | __INIT |
91 | 92 | ||
92 | .type v6wbi_tlb_fns, #object | 93 | .type v6wbi_tlb_fns, #object |
93 | ENTRY(v6wbi_tlb_fns) | 94 | ENTRY(v6wbi_tlb_fns) |
diff --git a/arch/arm/mm/tlb-v7.S b/arch/arm/mm/tlb-v7.S index 24ba5109f2e7..b637e7380ab7 100644 --- a/arch/arm/mm/tlb-v7.S +++ b/arch/arm/mm/tlb-v7.S | |||
@@ -11,6 +11,7 @@ | |||
11 | * ARM architecture version 6 TLB handling functions. | 11 | * ARM architecture version 6 TLB handling functions. |
12 | * These assume a split I/D TLB. | 12 | * These assume a split I/D TLB. |
13 | */ | 13 | */ |
14 | #include <linux/init.h> | ||
14 | #include <linux/linkage.h> | 15 | #include <linux/linkage.h> |
15 | #include <asm/asm-offsets.h> | 16 | #include <asm/asm-offsets.h> |
16 | #include <asm/page.h> | 17 | #include <asm/page.h> |
@@ -80,7 +81,7 @@ ENTRY(v7wbi_flush_kern_tlb_range) | |||
80 | mov pc, lr | 81 | mov pc, lr |
81 | ENDPROC(v7wbi_flush_kern_tlb_range) | 82 | ENDPROC(v7wbi_flush_kern_tlb_range) |
82 | 83 | ||
83 | .section ".text.init", #alloc, #execinstr | 84 | __INIT |
84 | 85 | ||
85 | .type v7wbi_tlb_fns, #object | 86 | .type v7wbi_tlb_fns, #object |
86 | ENTRY(v7wbi_tlb_fns) | 87 | ENTRY(v7wbi_tlb_fns) |
diff --git a/arch/avr32/Makefile b/arch/avr32/Makefile index 0b97e14f73f6..c21a3290d542 100644 --- a/arch/avr32/Makefile +++ b/arch/avr32/Makefile | |||
@@ -43,8 +43,6 @@ core-y += arch/avr32/mm/ | |||
43 | drivers-$(CONFIG_OPROFILE) += arch/avr32/oprofile/ | 43 | drivers-$(CONFIG_OPROFILE) += arch/avr32/oprofile/ |
44 | libs-y += arch/avr32/lib/ | 44 | libs-y += arch/avr32/lib/ |
45 | 45 | ||
46 | CLEAN_FILES += include/asm-avr32/.arch include/asm-avr32/arch | ||
47 | |||
48 | BOOT_TARGETS := vmlinux.elf vmlinux.bin uImage uImage.srec | 46 | BOOT_TARGETS := vmlinux.elf vmlinux.bin uImage uImage.srec |
49 | 47 | ||
50 | .PHONY: $(BOOT_TARGETS) install | 48 | .PHONY: $(BOOT_TARGETS) install |
diff --git a/arch/frv/include/asm/bug.h b/arch/frv/include/asm/bug.h index 6b1b44d71028..2e054508a2f6 100644 --- a/arch/frv/include/asm/bug.h +++ b/arch/frv/include/asm/bug.h | |||
@@ -30,7 +30,7 @@ extern void __debug_bug_printk(const char *file, unsigned line); | |||
30 | do { \ | 30 | do { \ |
31 | __debug_bug_trap(signr); \ | 31 | __debug_bug_trap(signr); \ |
32 | asm volatile("nop"); \ | 32 | asm volatile("nop"); \ |
33 | } while(0) | 33 | } while(1) |
34 | 34 | ||
35 | #define HAVE_ARCH_BUG | 35 | #define HAVE_ARCH_BUG |
36 | #define BUG() \ | 36 | #define BUG() \ |
@@ -46,7 +46,8 @@ do { \ | |||
46 | #define HAVE_ARCH_KGDB_BAD_PAGE | 46 | #define HAVE_ARCH_KGDB_BAD_PAGE |
47 | #define kgdb_bad_page(page) do { kgdb_raise(SIGABRT); } while(0) | 47 | #define kgdb_bad_page(page) do { kgdb_raise(SIGABRT); } while(0) |
48 | #endif | 48 | #endif |
49 | #endif | 49 | |
50 | #endif /* CONFIG_BUG */ | ||
50 | 51 | ||
51 | #include <asm-generic/bug.h> | 52 | #include <asm-generic/bug.h> |
52 | 53 | ||
diff --git a/arch/frv/include/asm/init.h b/arch/frv/include/asm/init.h deleted file mode 100644 index 8b15838de216..000000000000 --- a/arch/frv/include/asm/init.h +++ /dev/null | |||
@@ -1,12 +0,0 @@ | |||
1 | #ifndef _ASM_INIT_H | ||
2 | #define _ASM_INIT_H | ||
3 | |||
4 | #define __init __attribute__ ((__section__ (".text.init"))) | ||
5 | #define __initdata __attribute__ ((__section__ (".data.init"))) | ||
6 | /* For assembly routines */ | ||
7 | #define __INIT .section ".text.init",#alloc,#execinstr | ||
8 | #define __FINIT .previous | ||
9 | #define __INITDATA .section ".data.init",#alloc,#write | ||
10 | |||
11 | #endif | ||
12 | |||
diff --git a/arch/frv/include/asm/unistd.h b/arch/frv/include/asm/unistd.h index edcfaf5f0414..96d78d5d2c41 100644 --- a/arch/frv/include/asm/unistd.h +++ b/arch/frv/include/asm/unistd.h | |||
@@ -339,10 +339,12 @@ | |||
339 | #define __NR_dup3 330 | 339 | #define __NR_dup3 330 |
340 | #define __NR_pipe2 331 | 340 | #define __NR_pipe2 331 |
341 | #define __NR_inotify_init1 332 | 341 | #define __NR_inotify_init1 332 |
342 | #define __NR_preadv 333 | ||
343 | #define __NR_pwritev 334 | ||
342 | 344 | ||
343 | #ifdef __KERNEL__ | 345 | #ifdef __KERNEL__ |
344 | 346 | ||
345 | #define NR_syscalls 333 | 347 | #define NR_syscalls 335 |
346 | 348 | ||
347 | #define __ARCH_WANT_IPC_PARSE_VERSION | 349 | #define __ARCH_WANT_IPC_PARSE_VERSION |
348 | /* #define __ARCH_WANT_OLD_READDIR */ | 350 | /* #define __ARCH_WANT_OLD_READDIR */ |
diff --git a/arch/frv/kernel/entry.S b/arch/frv/kernel/entry.S index 99060ab507ee..1da523b3298e 100644 --- a/arch/frv/kernel/entry.S +++ b/arch/frv/kernel/entry.S | |||
@@ -1525,5 +1525,7 @@ sys_call_table: | |||
1525 | .long sys_dup3 /* 330 */ | 1525 | .long sys_dup3 /* 330 */ |
1526 | .long sys_pipe2 | 1526 | .long sys_pipe2 |
1527 | .long sys_inotify_init1 | 1527 | .long sys_inotify_init1 |
1528 | .long sys_preadv | ||
1529 | .long sys_pwritev | ||
1528 | 1530 | ||
1529 | syscall_table_size = (. - sys_call_table) | 1531 | syscall_table_size = (. - sys_call_table) |
diff --git a/arch/frv/kernel/head-mmu-fr451.S b/arch/frv/kernel/head-mmu-fr451.S index c8f210d84ff5..98f87d586e59 100644 --- a/arch/frv/kernel/head-mmu-fr451.S +++ b/arch/frv/kernel/head-mmu-fr451.S | |||
@@ -9,6 +9,7 @@ | |||
9 | * 2 of the License, or (at your option) any later version. | 9 | * 2 of the License, or (at your option) any later version. |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/init.h> | ||
12 | #include <linux/threads.h> | 13 | #include <linux/threads.h> |
13 | #include <linux/linkage.h> | 14 | #include <linux/linkage.h> |
14 | #include <asm/ptrace.h> | 15 | #include <asm/ptrace.h> |
@@ -31,7 +32,7 @@ | |||
31 | #define __400_LCR 0xfe000100 | 32 | #define __400_LCR 0xfe000100 |
32 | #define __400_LSBR 0xfe000c00 | 33 | #define __400_LSBR 0xfe000c00 |
33 | 34 | ||
34 | .section .text.init,"ax" | 35 | __INIT |
35 | .balign 4 | 36 | .balign 4 |
36 | 37 | ||
37 | ############################################################################### | 38 | ############################################################################### |
diff --git a/arch/frv/kernel/head-uc-fr401.S b/arch/frv/kernel/head-uc-fr401.S index ee282be20fff..438643cfa38e 100644 --- a/arch/frv/kernel/head-uc-fr401.S +++ b/arch/frv/kernel/head-uc-fr401.S | |||
@@ -9,6 +9,7 @@ | |||
9 | * 2 of the License, or (at your option) any later version. | 9 | * 2 of the License, or (at your option) any later version. |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/init.h> | ||
12 | #include <linux/threads.h> | 13 | #include <linux/threads.h> |
13 | #include <linux/linkage.h> | 14 | #include <linux/linkage.h> |
14 | #include <asm/ptrace.h> | 15 | #include <asm/ptrace.h> |
@@ -30,7 +31,7 @@ | |||
30 | #define __400_LCR 0xfe000100 | 31 | #define __400_LCR 0xfe000100 |
31 | #define __400_LSBR 0xfe000c00 | 32 | #define __400_LSBR 0xfe000c00 |
32 | 33 | ||
33 | .section .text.init,"ax" | 34 | __INIT |
34 | .balign 4 | 35 | .balign 4 |
35 | 36 | ||
36 | ############################################################################### | 37 | ############################################################################### |
diff --git a/arch/frv/kernel/head-uc-fr451.S b/arch/frv/kernel/head-uc-fr451.S index b10d9c8295d2..b2a76c4a1786 100644 --- a/arch/frv/kernel/head-uc-fr451.S +++ b/arch/frv/kernel/head-uc-fr451.S | |||
@@ -9,6 +9,7 @@ | |||
9 | * 2 of the License, or (at your option) any later version. | 9 | * 2 of the License, or (at your option) any later version. |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/init.h> | ||
12 | #include <linux/threads.h> | 13 | #include <linux/threads.h> |
13 | #include <linux/linkage.h> | 14 | #include <linux/linkage.h> |
14 | #include <asm/ptrace.h> | 15 | #include <asm/ptrace.h> |
@@ -30,7 +31,7 @@ | |||
30 | #define __400_LCR 0xfe000100 | 31 | #define __400_LCR 0xfe000100 |
31 | #define __400_LSBR 0xfe000c00 | 32 | #define __400_LSBR 0xfe000c00 |
32 | 33 | ||
33 | .section .text.init,"ax" | 34 | __INIT |
34 | .balign 4 | 35 | .balign 4 |
35 | 36 | ||
36 | ############################################################################### | 37 | ############################################################################### |
diff --git a/arch/frv/kernel/head-uc-fr555.S b/arch/frv/kernel/head-uc-fr555.S index 39937c19b460..5497aaf34f77 100644 --- a/arch/frv/kernel/head-uc-fr555.S +++ b/arch/frv/kernel/head-uc-fr555.S | |||
@@ -9,6 +9,7 @@ | |||
9 | * 2 of the License, or (at your option) any later version. | 9 | * 2 of the License, or (at your option) any later version. |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/init.h> | ||
12 | #include <linux/threads.h> | 13 | #include <linux/threads.h> |
13 | #include <linux/linkage.h> | 14 | #include <linux/linkage.h> |
14 | #include <asm/ptrace.h> | 15 | #include <asm/ptrace.h> |
@@ -29,7 +30,7 @@ | |||
29 | #define __551_LCR 0xfeff1100 | 30 | #define __551_LCR 0xfeff1100 |
30 | #define __551_LSBR 0xfeff1c00 | 31 | #define __551_LSBR 0xfeff1c00 |
31 | 32 | ||
32 | .section .text.init,"ax" | 33 | __INIT |
33 | .balign 4 | 34 | .balign 4 |
34 | 35 | ||
35 | ############################################################################### | 36 | ############################################################################### |
diff --git a/arch/frv/kernel/head.S b/arch/frv/kernel/head.S index fecf751c5cae..b825ef3f2d54 100644 --- a/arch/frv/kernel/head.S +++ b/arch/frv/kernel/head.S | |||
@@ -9,6 +9,7 @@ | |||
9 | * 2 of the License, or (at your option) any later version. | 9 | * 2 of the License, or (at your option) any later version. |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/init.h> | ||
12 | #include <linux/threads.h> | 13 | #include <linux/threads.h> |
13 | #include <linux/linkage.h> | 14 | #include <linux/linkage.h> |
14 | #include <asm/thread_info.h> | 15 | #include <asm/thread_info.h> |
@@ -27,7 +28,7 @@ | |||
27 | # command line string | 28 | # command line string |
28 | # | 29 | # |
29 | ############################################################################### | 30 | ############################################################################### |
30 | .section .text.head,"ax" | 31 | __HEAD |
31 | .balign 4 | 32 | .balign 4 |
32 | 33 | ||
33 | .globl _boot, __head_reference | 34 | .globl _boot, __head_reference |
diff --git a/arch/frv/kernel/vmlinux.lds.S b/arch/frv/kernel/vmlinux.lds.S index b95c4eace62f..22d9787406ed 100644 --- a/arch/frv/kernel/vmlinux.lds.S +++ b/arch/frv/kernel/vmlinux.lds.S | |||
@@ -26,7 +26,7 @@ SECTIONS | |||
26 | 26 | ||
27 | _sinittext = .; | 27 | _sinittext = .; |
28 | .init.text : { | 28 | .init.text : { |
29 | *(.text.head) | 29 | HEAD_TEXT |
30 | #ifndef CONFIG_DEBUG_INFO | 30 | #ifndef CONFIG_DEBUG_INFO |
31 | INIT_TEXT | 31 | INIT_TEXT |
32 | EXIT_TEXT | 32 | EXIT_TEXT |
diff --git a/arch/m32r/boot/compressed/Makefile b/arch/m32r/boot/compressed/Makefile index d908e1d3c07f..560484ae35ec 100644 --- a/arch/m32r/boot/compressed/Makefile +++ b/arch/m32r/boot/compressed/Makefile | |||
@@ -6,7 +6,6 @@ | |||
6 | 6 | ||
7 | targets := vmlinux vmlinux.bin vmlinux.bin.gz head.o misc.o \ | 7 | targets := vmlinux vmlinux.bin vmlinux.bin.gz head.o misc.o \ |
8 | piggy.o vmlinux.lds | 8 | piggy.o vmlinux.lds |
9 | EXTRA_AFLAGS := -traditional | ||
10 | 9 | ||
11 | OBJECTS = $(obj)/head.o $(obj)/misc.o | 10 | OBJECTS = $(obj)/head.o $(obj)/misc.o |
12 | 11 | ||
diff --git a/arch/m32r/include/asm/assembler.h b/arch/m32r/include/asm/assembler.h index 26351539b5ff..728799fc70aa 100644 --- a/arch/m32r/include/asm/assembler.h +++ b/arch/m32r/include/asm/assembler.h | |||
@@ -9,14 +9,15 @@ | |||
9 | * This file contains M32R architecture specific macro definitions. | 9 | * This file contains M32R architecture specific macro definitions. |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/stringify.h> | ||
13 | |||
14 | #undef __STR | ||
12 | 15 | ||
13 | #ifndef __STR | ||
14 | #ifdef __ASSEMBLY__ | 16 | #ifdef __ASSEMBLY__ |
15 | #define __STR(x) x | 17 | #define __STR(x) x |
16 | #else | 18 | #else |
17 | #define __STR(x) #x | 19 | #define __STR(x) __stringify(x) |
18 | #endif | 20 | #endif |
19 | #endif /* __STR */ | ||
20 | 21 | ||
21 | #ifdef CONFIG_SMP | 22 | #ifdef CONFIG_SMP |
22 | #define M32R_LOCK __STR(lock) | 23 | #define M32R_LOCK __STR(lock) |
diff --git a/arch/m32r/kernel/Makefile b/arch/m32r/kernel/Makefile index 09200d4886e3..b1a4b6036591 100644 --- a/arch/m32r/kernel/Makefile +++ b/arch/m32r/kernel/Makefile | |||
@@ -9,5 +9,3 @@ obj-y := process.o entry.o traps.o align.o irq.o setup.o time.o \ | |||
9 | 9 | ||
10 | obj-$(CONFIG_SMP) += smp.o smpboot.o | 10 | obj-$(CONFIG_SMP) += smp.o smpboot.o |
11 | obj-$(CONFIG_MODULES) += module.o | 11 | obj-$(CONFIG_MODULES) += module.o |
12 | |||
13 | EXTRA_AFLAGS := -traditional | ||
diff --git a/arch/m32r/kernel/head.S b/arch/m32r/kernel/head.S index 90916067b9c1..0a7194439eb1 100644 --- a/arch/m32r/kernel/head.S +++ b/arch/m32r/kernel/head.S | |||
@@ -23,7 +23,7 @@ __INITDATA | |||
23 | /* | 23 | /* |
24 | * References to members of the boot_cpu_data structure. | 24 | * References to members of the boot_cpu_data structure. |
25 | */ | 25 | */ |
26 | .section .text.head, "ax" | 26 | __HEAD |
27 | .global start_kernel | 27 | .global start_kernel |
28 | .global __bss_start | 28 | .global __bss_start |
29 | .global _end | 29 | .global _end |
diff --git a/arch/m32r/kernel/vmlinux.lds.S b/arch/m32r/kernel/vmlinux.lds.S index 9db05df20c0e..4179adf6c624 100644 --- a/arch/m32r/kernel/vmlinux.lds.S +++ b/arch/m32r/kernel/vmlinux.lds.S | |||
@@ -27,7 +27,7 @@ SECTIONS | |||
27 | _text = .; /* Text and read-only data */ | 27 | _text = .; /* Text and read-only data */ |
28 | .boot : { *(.boot) } = 0 | 28 | .boot : { *(.boot) } = 0 |
29 | .text : { | 29 | .text : { |
30 | *(.text.head) | 30 | HEAD_TEXT |
31 | TEXT_TEXT | 31 | TEXT_TEXT |
32 | SCHED_TEXT | 32 | SCHED_TEXT |
33 | LOCK_TEXT | 33 | LOCK_TEXT |
diff --git a/arch/m68k/kernel/head.S b/arch/m68k/kernel/head.S index f513f530de91..86edb5fbcfc3 100644 --- a/arch/m68k/kernel/head.S +++ b/arch/m68k/kernel/head.S | |||
@@ -577,7 +577,7 @@ func_define putn,1 | |||
577 | #endif | 577 | #endif |
578 | .endm | 578 | .endm |
579 | 579 | ||
580 | .section ".text.head","ax" | 580 | __HEAD |
581 | ENTRY(_stext) | 581 | ENTRY(_stext) |
582 | /* | 582 | /* |
583 | * Version numbers of the bootinfo interface | 583 | * Version numbers of the bootinfo interface |
diff --git a/arch/m68k/kernel/sun3-head.S b/arch/m68k/kernel/sun3-head.S index aad01592dbbc..43036bf4aeed 100644 --- a/arch/m68k/kernel/sun3-head.S +++ b/arch/m68k/kernel/sun3-head.S | |||
@@ -1,4 +1,5 @@ | |||
1 | #include <linux/linkage.h> | 1 | #include <linux/linkage.h> |
2 | #include <linux/init.h> | ||
2 | 3 | ||
3 | #include <asm/entry.h> | 4 | #include <asm/entry.h> |
4 | #include <asm/page.h> | 5 | #include <asm/page.h> |
@@ -29,7 +30,7 @@ kernel_pmd_table: .skip 0x2000 | |||
29 | .globl kernel_pg_dir | 30 | .globl kernel_pg_dir |
30 | .equ kernel_pg_dir,kernel_pmd_table | 31 | .equ kernel_pg_dir,kernel_pmd_table |
31 | 32 | ||
32 | .section .text.head | 33 | __HEAD |
33 | ENTRY(_stext) | 34 | ENTRY(_stext) |
34 | ENTRY(_start) | 35 | ENTRY(_start) |
35 | 36 | ||
diff --git a/arch/m68k/kernel/vmlinux-std.lds b/arch/m68k/kernel/vmlinux-std.lds index f846d4e3e5e1..01d212bb05a6 100644 --- a/arch/m68k/kernel/vmlinux-std.lds +++ b/arch/m68k/kernel/vmlinux-std.lds | |||
@@ -12,7 +12,7 @@ SECTIONS | |||
12 | . = 0x1000; | 12 | . = 0x1000; |
13 | _text = .; /* Text and read-only data */ | 13 | _text = .; /* Text and read-only data */ |
14 | .text : { | 14 | .text : { |
15 | *(.text.head) | 15 | HEAD_TEXT |
16 | TEXT_TEXT | 16 | TEXT_TEXT |
17 | SCHED_TEXT | 17 | SCHED_TEXT |
18 | LOCK_TEXT | 18 | LOCK_TEXT |
diff --git a/arch/m68k/kernel/vmlinux-sun3.lds b/arch/m68k/kernel/vmlinux-sun3.lds index d9368c0709ba..c192f773db96 100644 --- a/arch/m68k/kernel/vmlinux-sun3.lds +++ b/arch/m68k/kernel/vmlinux-sun3.lds | |||
@@ -12,7 +12,7 @@ SECTIONS | |||
12 | . = 0xE002000; | 12 | . = 0xE002000; |
13 | _text = .; /* Text and read-only data */ | 13 | _text = .; /* Text and read-only data */ |
14 | .text : { | 14 | .text : { |
15 | *(.text.head) | 15 | HEAD_TEXT |
16 | TEXT_TEXT | 16 | TEXT_TEXT |
17 | SCHED_TEXT | 17 | SCHED_TEXT |
18 | LOCK_TEXT | 18 | LOCK_TEXT |
diff --git a/arch/microblaze/include/asm/of_platform.h b/arch/microblaze/include/asm/of_platform.h index 187c0eedaece..37491276c6ca 100644 --- a/arch/microblaze/include/asm/of_platform.h +++ b/arch/microblaze/include/asm/of_platform.h | |||
@@ -36,16 +36,6 @@ static const struct of_device_id of_default_bus_ids[] = { | |||
36 | {}, | 36 | {}, |
37 | }; | 37 | }; |
38 | 38 | ||
39 | /* Platform drivers register/unregister */ | ||
40 | static inline int of_register_platform_driver(struct of_platform_driver *drv) | ||
41 | { | ||
42 | return of_register_driver(drv, &of_platform_bus_type); | ||
43 | } | ||
44 | static inline void of_unregister_platform_driver(struct of_platform_driver *drv) | ||
45 | { | ||
46 | of_unregister_driver(drv); | ||
47 | } | ||
48 | |||
49 | /* Platform devices and busses creation */ | 39 | /* Platform devices and busses creation */ |
50 | extern struct of_device *of_platform_device_create(struct device_node *np, | 40 | extern struct of_device *of_platform_device_create(struct device_node *np, |
51 | const char *bus_id, | 41 | const char *bus_id, |
diff --git a/arch/mn10300/kernel/head.S b/arch/mn10300/kernel/head.S index 8a8309fbe3c4..14f27f3bfaf4 100644 --- a/arch/mn10300/kernel/head.S +++ b/arch/mn10300/kernel/head.S | |||
@@ -9,6 +9,7 @@ | |||
9 | * 2 of the Licence, or (at your option) any later version. | 9 | * 2 of the Licence, or (at your option) any later version. |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/init.h> | ||
12 | #include <linux/threads.h> | 13 | #include <linux/threads.h> |
13 | #include <linux/linkage.h> | 14 | #include <linux/linkage.h> |
14 | #include <linux/serial_reg.h> | 15 | #include <linux/serial_reg.h> |
@@ -19,7 +20,7 @@ | |||
19 | #include <asm/param.h> | 20 | #include <asm/param.h> |
20 | #include <unit/serial.h> | 21 | #include <unit/serial.h> |
21 | 22 | ||
22 | .section .text.head,"ax" | 23 | __HEAD |
23 | 24 | ||
24 | ############################################################################### | 25 | ############################################################################### |
25 | # | 26 | # |
diff --git a/arch/mn10300/kernel/vmlinux.lds.S b/arch/mn10300/kernel/vmlinux.lds.S index b8259668f7dc..24de6b90f401 100644 --- a/arch/mn10300/kernel/vmlinux.lds.S +++ b/arch/mn10300/kernel/vmlinux.lds.S | |||
@@ -27,10 +27,7 @@ SECTIONS | |||
27 | _stext = .; | 27 | _stext = .; |
28 | _text = .; /* Text and read-only data */ | 28 | _text = .; /* Text and read-only data */ |
29 | .text : { | 29 | .text : { |
30 | *( | 30 | HEAD_TEXT |
31 | .text.head | ||
32 | .text | ||
33 | ) | ||
34 | TEXT_TEXT | 31 | TEXT_TEXT |
35 | SCHED_TEXT | 32 | SCHED_TEXT |
36 | LOCK_TEXT | 33 | LOCK_TEXT |
diff --git a/arch/powerpc/boot/4xx.c b/arch/powerpc/boot/4xx.c index 5c878436f348..325b310573b9 100644 --- a/arch/powerpc/boot/4xx.c +++ b/arch/powerpc/boot/4xx.c | |||
@@ -158,21 +158,33 @@ void ibm440spe_fixup_memsize(void) | |||
158 | 158 | ||
159 | #define DDR_GET_VAL(val, mask, shift) (((val) >> (shift)) & (mask)) | 159 | #define DDR_GET_VAL(val, mask, shift) (((val) >> (shift)) & (mask)) |
160 | 160 | ||
161 | void ibm4xx_denali_fixup_memsize(void) | 161 | /* |
162 | * Some U-Boot versions set the number of chipselects to two | ||
163 | * for Sequoia/Rainier boards while they only have one chipselect | ||
164 | * hardwired. Hardcode the number of chipselects to one | ||
165 | * for sequioa/rainer board models or read the actual value | ||
166 | * from the memory controller register DDR0_10 otherwise. | ||
167 | */ | ||
168 | static inline u32 ibm4xx_denali_get_cs(void) | ||
162 | { | 169 | { |
163 | u32 val, max_cs, max_col, max_row; | 170 | void *devp; |
164 | u32 cs, col, row, bank, dpath; | 171 | char model[64]; |
165 | unsigned long memsize; | 172 | u32 val, cs; |
166 | 173 | ||
167 | val = SDRAM0_READ(DDR0_02); | 174 | devp = finddevice("/"); |
168 | if (!DDR_GET_VAL(val, DDR_START, DDR_START_SHIFT)) | 175 | if (!devp) |
169 | fatal("DDR controller is not initialized\n"); | 176 | goto read_cs; |
170 | 177 | ||
171 | /* get maximum cs col and row values */ | 178 | if (getprop(devp, "model", model, sizeof(model)) <= 0) |
172 | max_cs = DDR_GET_VAL(val, DDR_MAX_CS_REG, DDR_MAX_CS_REG_SHIFT); | 179 | goto read_cs; |
173 | max_col = DDR_GET_VAL(val, DDR_MAX_COL_REG, DDR_MAX_COL_REG_SHIFT); | ||
174 | max_row = DDR_GET_VAL(val, DDR_MAX_ROW_REG, DDR_MAX_ROW_REG_SHIFT); | ||
175 | 180 | ||
181 | model[sizeof(model)-1] = 0; | ||
182 | |||
183 | if (!strcmp(model, "amcc,sequoia") || | ||
184 | !strcmp(model, "amcc,rainier")) | ||
185 | return 1; | ||
186 | |||
187 | read_cs: | ||
176 | /* get CS value */ | 188 | /* get CS value */ |
177 | val = SDRAM0_READ(DDR0_10); | 189 | val = SDRAM0_READ(DDR0_10); |
178 | 190 | ||
@@ -183,7 +195,25 @@ void ibm4xx_denali_fixup_memsize(void) | |||
183 | cs++; | 195 | cs++; |
184 | val = val >> 1; | 196 | val = val >> 1; |
185 | } | 197 | } |
198 | return cs; | ||
199 | } | ||
200 | |||
201 | void ibm4xx_denali_fixup_memsize(void) | ||
202 | { | ||
203 | u32 val, max_cs, max_col, max_row; | ||
204 | u32 cs, col, row, bank, dpath; | ||
205 | unsigned long memsize; | ||
206 | |||
207 | val = SDRAM0_READ(DDR0_02); | ||
208 | if (!DDR_GET_VAL(val, DDR_START, DDR_START_SHIFT)) | ||
209 | fatal("DDR controller is not initialized\n"); | ||
186 | 210 | ||
211 | /* get maximum cs col and row values */ | ||
212 | max_cs = DDR_GET_VAL(val, DDR_MAX_CS_REG, DDR_MAX_CS_REG_SHIFT); | ||
213 | max_col = DDR_GET_VAL(val, DDR_MAX_COL_REG, DDR_MAX_COL_REG_SHIFT); | ||
214 | max_row = DDR_GET_VAL(val, DDR_MAX_ROW_REG, DDR_MAX_ROW_REG_SHIFT); | ||
215 | |||
216 | cs = ibm4xx_denali_get_cs(); | ||
187 | if (!cs) | 217 | if (!cs) |
188 | fatal("No memory installed\n"); | 218 | fatal("No memory installed\n"); |
189 | if (cs > max_cs) | 219 | if (cs > max_cs) |
@@ -193,9 +223,9 @@ void ibm4xx_denali_fixup_memsize(void) | |||
193 | val = SDRAM0_READ(DDR0_14); | 223 | val = SDRAM0_READ(DDR0_14); |
194 | 224 | ||
195 | if (DDR_GET_VAL(val, DDR_REDUC, DDR_REDUC_SHIFT)) | 225 | if (DDR_GET_VAL(val, DDR_REDUC, DDR_REDUC_SHIFT)) |
196 | dpath = 8; /* 64 bits */ | ||
197 | else | ||
198 | dpath = 4; /* 32 bits */ | 226 | dpath = 4; /* 32 bits */ |
227 | else | ||
228 | dpath = 8; /* 64 bits */ | ||
199 | 229 | ||
200 | /* get address pins (rows) */ | 230 | /* get address pins (rows) */ |
201 | val = SDRAM0_READ(DDR0_42); | 231 | val = SDRAM0_READ(DDR0_42); |
diff --git a/arch/powerpc/boot/dts/gef_ppc9a.dts b/arch/powerpc/boot/dts/gef_ppc9a.dts index d47ad0718759..53a7a6255909 100644 --- a/arch/powerpc/boot/dts/gef_ppc9a.dts +++ b/arch/powerpc/boot/dts/gef_ppc9a.dts | |||
@@ -161,6 +161,7 @@ | |||
161 | #address-cells = <1>; | 161 | #address-cells = <1>; |
162 | #size-cells = <1>; | 162 | #size-cells = <1>; |
163 | #interrupt-cells = <2>; | 163 | #interrupt-cells = <2>; |
164 | device_type = "soc"; | ||
164 | compatible = "fsl,mpc8641-soc", "simple-bus"; | 165 | compatible = "fsl,mpc8641-soc", "simple-bus"; |
165 | ranges = <0x0 0xfef00000 0x00100000>; | 166 | ranges = <0x0 0xfef00000 0x00100000>; |
166 | reg = <0xfef00000 0x100000>; // CCSRBAR 1M | 167 | reg = <0xfef00000 0x100000>; // CCSRBAR 1M |
diff --git a/arch/powerpc/include/asm/elf.h b/arch/powerpc/include/asm/elf.h index 087c22f1d368..d6b4a12cdeff 100644 --- a/arch/powerpc/include/asm/elf.h +++ b/arch/powerpc/include/asm/elf.h | |||
@@ -260,6 +260,7 @@ do { \ | |||
260 | #else | 260 | #else |
261 | # define SET_PERSONALITY(ex) \ | 261 | # define SET_PERSONALITY(ex) \ |
262 | set_personality(PER_LINUX | (current->personality & (~PER_MASK))) | 262 | set_personality(PER_LINUX | (current->personality & (~PER_MASK))) |
263 | # define elf_read_implies_exec(ex, exec_stk) (exec_stk != EXSTACK_DISABLE_X) | ||
263 | #endif /* __powerpc64__ */ | 264 | #endif /* __powerpc64__ */ |
264 | 265 | ||
265 | extern int dcache_bsize; | 266 | extern int dcache_bsize; |
diff --git a/arch/powerpc/include/asm/mmu.h b/arch/powerpc/include/asm/mmu.h index 86d2366ab6a1..cbf154387091 100644 --- a/arch/powerpc/include/asm/mmu.h +++ b/arch/powerpc/include/asm/mmu.h | |||
@@ -52,12 +52,6 @@ | |||
52 | */ | 52 | */ |
53 | #define MMU_FTR_NEED_DTLB_SW_LRU ASM_CONST(0x00200000) | 53 | #define MMU_FTR_NEED_DTLB_SW_LRU ASM_CONST(0x00200000) |
54 | 54 | ||
55 | /* This indicates that the processor uses the wrong opcode for tlbilx | ||
56 | * instructions. During the ISA 2.06 development the opcode for tlbilx | ||
57 | * changed and some early implementations used to old opcode | ||
58 | */ | ||
59 | #define MMU_FTR_TLBILX_EARLY_OPCODE ASM_CONST(0x00400000) | ||
60 | |||
61 | #ifndef __ASSEMBLY__ | 55 | #ifndef __ASSEMBLY__ |
62 | #include <asm/cputable.h> | 56 | #include <asm/cputable.h> |
63 | 57 | ||
diff --git a/arch/powerpc/include/asm/of_platform.h b/arch/powerpc/include/asm/of_platform.h index 53b46507ffde..d4aaa3489440 100644 --- a/arch/powerpc/include/asm/of_platform.h +++ b/arch/powerpc/include/asm/of_platform.h | |||
@@ -11,16 +11,6 @@ | |||
11 | * | 11 | * |
12 | */ | 12 | */ |
13 | 13 | ||
14 | /* Platform drivers register/unregister */ | ||
15 | static inline int of_register_platform_driver(struct of_platform_driver *drv) | ||
16 | { | ||
17 | return of_register_driver(drv, &of_platform_bus_type); | ||
18 | } | ||
19 | static inline void of_unregister_platform_driver(struct of_platform_driver *drv) | ||
20 | { | ||
21 | of_unregister_driver(drv); | ||
22 | } | ||
23 | |||
24 | /* Platform devices and busses creation */ | 14 | /* Platform devices and busses creation */ |
25 | extern struct of_device *of_platform_device_create(struct device_node *np, | 15 | extern struct of_device *of_platform_device_create(struct device_node *np, |
26 | const char *bus_id, | 16 | const char *bus_id, |
diff --git a/arch/powerpc/include/asm/ppc-opcode.h b/arch/powerpc/include/asm/ppc-opcode.h index ef4da37f3c10..640ccbbc0977 100644 --- a/arch/powerpc/include/asm/ppc-opcode.h +++ b/arch/powerpc/include/asm/ppc-opcode.h | |||
@@ -44,7 +44,6 @@ | |||
44 | #define PPC_INST_STSWI 0x7c0005aa | 44 | #define PPC_INST_STSWI 0x7c0005aa |
45 | #define PPC_INST_STSWX 0x7c00052a | 45 | #define PPC_INST_STSWX 0x7c00052a |
46 | #define PPC_INST_TLBILX 0x7c000024 | 46 | #define PPC_INST_TLBILX 0x7c000024 |
47 | #define PPC_INST_TLBILX_EARLY 0x7c000626 | ||
48 | #define PPC_INST_WAIT 0x7c00007c | 47 | #define PPC_INST_WAIT 0x7c00007c |
49 | 48 | ||
50 | /* macros to insert fields into opcodes */ | 49 | /* macros to insert fields into opcodes */ |
@@ -64,18 +63,10 @@ | |||
64 | #define PPC_RFDI stringify_in_c(.long PPC_INST_RFDI) | 63 | #define PPC_RFDI stringify_in_c(.long PPC_INST_RFDI) |
65 | #define PPC_RFMCI stringify_in_c(.long PPC_INST_RFMCI) | 64 | #define PPC_RFMCI stringify_in_c(.long PPC_INST_RFMCI) |
66 | #define PPC_TLBILX(t, a, b) stringify_in_c(.long PPC_INST_TLBILX | \ | 65 | #define PPC_TLBILX(t, a, b) stringify_in_c(.long PPC_INST_TLBILX | \ |
67 | __PPC_T_TLB(t) | \ | 66 | __PPC_T_TLB(t) | __PPC_RA(a) | __PPC_RB(b)) |
68 | __PPC_RA(a) | __PPC_RB(b)) | ||
69 | #define PPC_TLBILX_ALL(a, b) PPC_TLBILX(0, a, b) | 67 | #define PPC_TLBILX_ALL(a, b) PPC_TLBILX(0, a, b) |
70 | #define PPC_TLBILX_PID(a, b) PPC_TLBILX(1, a, b) | 68 | #define PPC_TLBILX_PID(a, b) PPC_TLBILX(1, a, b) |
71 | #define PPC_TLBILX_VA(a, b) PPC_TLBILX(3, a, b) | 69 | #define PPC_TLBILX_VA(a, b) PPC_TLBILX(3, a, b) |
72 | |||
73 | #define PPC_TLBILX_EARLY(t, a, b) stringify_in_c(.long PPC_INST_TLBILX_EARLY | \ | ||
74 | __PPC_T_TLB(t) | \ | ||
75 | __PPC_RA(a) | __PPC_RB(b)) | ||
76 | #define PPC_TLBILX_ALL_EARLY(a, b) PPC_TLBILX_EARLY(0, a, b) | ||
77 | #define PPC_TLBILX_PID_EARLY(a, b) PPC_TLBILX_EARLY(1, a, b) | ||
78 | #define PPC_TLBILX_VA_EARLY(a, b) PPC_TLBILX_EARLY(3, a, b) | ||
79 | #define PPC_WAIT(w) stringify_in_c(.long PPC_INST_WAIT | \ | 70 | #define PPC_WAIT(w) stringify_in_c(.long PPC_INST_WAIT | \ |
80 | __PPC_WC(w)) | 71 | __PPC_WC(w)) |
81 | 72 | ||
diff --git a/arch/powerpc/include/asm/ppc_asm.h b/arch/powerpc/include/asm/ppc_asm.h index f59a66684aed..384d90c9c272 100644 --- a/arch/powerpc/include/asm/ppc_asm.h +++ b/arch/powerpc/include/asm/ppc_asm.h | |||
@@ -4,6 +4,7 @@ | |||
4 | #ifndef _ASM_POWERPC_PPC_ASM_H | 4 | #ifndef _ASM_POWERPC_PPC_ASM_H |
5 | #define _ASM_POWERPC_PPC_ASM_H | 5 | #define _ASM_POWERPC_PPC_ASM_H |
6 | 6 | ||
7 | #include <linux/init.h> | ||
7 | #include <linux/stringify.h> | 8 | #include <linux/stringify.h> |
8 | #include <asm/asm-compat.h> | 9 | #include <asm/asm-compat.h> |
9 | #include <asm/processor.h> | 10 | #include <asm/processor.h> |
@@ -189,7 +190,7 @@ name: \ | |||
189 | GLUE(.,name): | 190 | GLUE(.,name): |
190 | 191 | ||
191 | #define _INIT_GLOBAL(name) \ | 192 | #define _INIT_GLOBAL(name) \ |
192 | .section ".text.init.refok"; \ | 193 | __REF; \ |
193 | .align 2 ; \ | 194 | .align 2 ; \ |
194 | .globl name; \ | 195 | .globl name; \ |
195 | .globl GLUE(.,name); \ | 196 | .globl GLUE(.,name); \ |
@@ -229,7 +230,7 @@ name: \ | |||
229 | GLUE(.,name): | 230 | GLUE(.,name): |
230 | 231 | ||
231 | #define _INIT_STATIC(name) \ | 232 | #define _INIT_STATIC(name) \ |
232 | .section ".text.init.refok"; \ | 233 | __REF; \ |
233 | .align 2 ; \ | 234 | .align 2 ; \ |
234 | .section ".opd","aw"; \ | 235 | .section ".opd","aw"; \ |
235 | name: \ | 236 | name: \ |
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index 57db50f40289..cd1b687544f3 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c | |||
@@ -1766,7 +1766,7 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
1766 | .cpu_features = CPU_FTRS_E500MC, | 1766 | .cpu_features = CPU_FTRS_E500MC, |
1767 | .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU, | 1767 | .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU, |
1768 | .mmu_features = MMU_FTR_TYPE_FSL_E | MMU_FTR_BIG_PHYS | | 1768 | .mmu_features = MMU_FTR_TYPE_FSL_E | MMU_FTR_BIG_PHYS | |
1769 | MMU_FTR_USE_TLBILX | MMU_FTR_TLBILX_EARLY_OPCODE, | 1769 | MMU_FTR_USE_TLBILX, |
1770 | .icache_bsize = 64, | 1770 | .icache_bsize = 64, |
1771 | .dcache_bsize = 64, | 1771 | .dcache_bsize = 64, |
1772 | .num_pmcs = 4, | 1772 | .num_pmcs = 4, |
diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S index 54e68c11ae15..c01467f952d3 100644 --- a/arch/powerpc/kernel/head_32.S +++ b/arch/powerpc/kernel/head_32.S | |||
@@ -21,6 +21,7 @@ | |||
21 | * | 21 | * |
22 | */ | 22 | */ |
23 | 23 | ||
24 | #include <linux/init.h> | ||
24 | #include <asm/reg.h> | 25 | #include <asm/reg.h> |
25 | #include <asm/page.h> | 26 | #include <asm/page.h> |
26 | #include <asm/mmu.h> | 27 | #include <asm/mmu.h> |
@@ -50,7 +51,7 @@ | |||
50 | mtspr SPRN_DBAT##n##L,RB; \ | 51 | mtspr SPRN_DBAT##n##L,RB; \ |
51 | 1: | 52 | 1: |
52 | 53 | ||
53 | .section .text.head, "ax" | 54 | __HEAD |
54 | .stabs "arch/powerpc/kernel/",N_SO,0,0,0f | 55 | .stabs "arch/powerpc/kernel/",N_SO,0,0,0f |
55 | .stabs "head_32.S",N_SO,0,0,0f | 56 | .stabs "head_32.S",N_SO,0,0,0f |
56 | 0: | 57 | 0: |
diff --git a/arch/powerpc/kernel/head_40x.S b/arch/powerpc/kernel/head_40x.S index 56d8e5d90c5b..0c96911d4299 100644 --- a/arch/powerpc/kernel/head_40x.S +++ b/arch/powerpc/kernel/head_40x.S | |||
@@ -31,6 +31,7 @@ | |||
31 | * | 31 | * |
32 | */ | 32 | */ |
33 | 33 | ||
34 | #include <linux/init.h> | ||
34 | #include <asm/processor.h> | 35 | #include <asm/processor.h> |
35 | #include <asm/page.h> | 36 | #include <asm/page.h> |
36 | #include <asm/mmu.h> | 37 | #include <asm/mmu.h> |
@@ -52,7 +53,7 @@ | |||
52 | * | 53 | * |
53 | * This is all going to change RSN when we add bi_recs....... -- Dan | 54 | * This is all going to change RSN when we add bi_recs....... -- Dan |
54 | */ | 55 | */ |
55 | .section .text.head, "ax" | 56 | __HEAD |
56 | _ENTRY(_stext); | 57 | _ENTRY(_stext); |
57 | _ENTRY(_start); | 58 | _ENTRY(_start); |
58 | 59 | ||
diff --git a/arch/powerpc/kernel/head_44x.S b/arch/powerpc/kernel/head_44x.S index b56fecc93a16..18d8a1677c4d 100644 --- a/arch/powerpc/kernel/head_44x.S +++ b/arch/powerpc/kernel/head_44x.S | |||
@@ -28,6 +28,7 @@ | |||
28 | * option) any later version. | 28 | * option) any later version. |
29 | */ | 29 | */ |
30 | 30 | ||
31 | #include <linux/init.h> | ||
31 | #include <asm/processor.h> | 32 | #include <asm/processor.h> |
32 | #include <asm/page.h> | 33 | #include <asm/page.h> |
33 | #include <asm/mmu.h> | 34 | #include <asm/mmu.h> |
@@ -50,7 +51,7 @@ | |||
50 | * r7 - End of kernel command line string | 51 | * r7 - End of kernel command line string |
51 | * | 52 | * |
52 | */ | 53 | */ |
53 | .section .text.head, "ax" | 54 | __HEAD |
54 | _ENTRY(_stext); | 55 | _ENTRY(_stext); |
55 | _ENTRY(_start); | 56 | _ENTRY(_start); |
56 | /* | 57 | /* |
diff --git a/arch/powerpc/kernel/head_8xx.S b/arch/powerpc/kernel/head_8xx.S index 3c9452d4308b..52ff8c53b93c 100644 --- a/arch/powerpc/kernel/head_8xx.S +++ b/arch/powerpc/kernel/head_8xx.S | |||
@@ -19,6 +19,7 @@ | |||
19 | * | 19 | * |
20 | */ | 20 | */ |
21 | 21 | ||
22 | #include <linux/init.h> | ||
22 | #include <asm/processor.h> | 23 | #include <asm/processor.h> |
23 | #include <asm/page.h> | 24 | #include <asm/page.h> |
24 | #include <asm/mmu.h> | 25 | #include <asm/mmu.h> |
@@ -38,7 +39,7 @@ | |||
38 | #else | 39 | #else |
39 | #define DO_8xx_CPU6(val, reg) | 40 | #define DO_8xx_CPU6(val, reg) |
40 | #endif | 41 | #endif |
41 | .section .text.head, "ax" | 42 | __HEAD |
42 | _ENTRY(_stext); | 43 | _ENTRY(_stext); |
43 | _ENTRY(_start); | 44 | _ENTRY(_start); |
44 | 45 | ||
diff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/kernel/head_fsl_booke.S index 4c22620d009b..5bdcc06d294c 100644 --- a/arch/powerpc/kernel/head_fsl_booke.S +++ b/arch/powerpc/kernel/head_fsl_booke.S | |||
@@ -30,6 +30,7 @@ | |||
30 | * option) any later version. | 30 | * option) any later version. |
31 | */ | 31 | */ |
32 | 32 | ||
33 | #include <linux/init.h> | ||
33 | #include <linux/threads.h> | 34 | #include <linux/threads.h> |
34 | #include <asm/processor.h> | 35 | #include <asm/processor.h> |
35 | #include <asm/page.h> | 36 | #include <asm/page.h> |
@@ -53,7 +54,7 @@ | |||
53 | * r7 - End of kernel command line string | 54 | * r7 - End of kernel command line string |
54 | * | 55 | * |
55 | */ | 56 | */ |
56 | .section .text.head, "ax" | 57 | __HEAD |
57 | _ENTRY(_stext); | 58 | _ENTRY(_stext); |
58 | _ENTRY(_start); | 59 | _ENTRY(_start); |
59 | /* | 60 | /* |
diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S index b9ef1644a722..a047a6cfca4d 100644 --- a/arch/powerpc/kernel/vmlinux.lds.S +++ b/arch/powerpc/kernel/vmlinux.lds.S | |||
@@ -52,9 +52,10 @@ SECTIONS | |||
52 | /* Text and gots */ | 52 | /* Text and gots */ |
53 | .text : AT(ADDR(.text) - LOAD_OFFSET) { | 53 | .text : AT(ADDR(.text) - LOAD_OFFSET) { |
54 | ALIGN_FUNCTION(); | 54 | ALIGN_FUNCTION(); |
55 | *(.text.head) | 55 | HEAD_TEXT |
56 | _text = .; | 56 | _text = .; |
57 | *(.text .fixup .text.init.refok .exit.text.refok __ftr_alt_*) | 57 | /* careful! __ftr_alt_* sections need to be close to .text */ |
58 | *(.text .fixup __ftr_alt_* .ref.text) | ||
58 | SCHED_TEXT | 59 | SCHED_TEXT |
59 | LOCK_TEXT | 60 | LOCK_TEXT |
60 | KPROBES_TEXT | 61 | KPROBES_TEXT |
diff --git a/arch/powerpc/mm/tlb_nohash_low.S b/arch/powerpc/mm/tlb_nohash_low.S index 45fed3698349..3037911279b1 100644 --- a/arch/powerpc/mm/tlb_nohash_low.S +++ b/arch/powerpc/mm/tlb_nohash_low.S | |||
@@ -138,11 +138,7 @@ BEGIN_MMU_FTR_SECTION | |||
138 | andi. r3,r3,MMUCSR0_TLBFI@l | 138 | andi. r3,r3,MMUCSR0_TLBFI@l |
139 | bne 1b | 139 | bne 1b |
140 | MMU_FTR_SECTION_ELSE | 140 | MMU_FTR_SECTION_ELSE |
141 | BEGIN_MMU_FTR_SECTION_NESTED(96) | 141 | PPC_TLBILX_ALL(0,0) |
142 | PPC_TLBILX_ALL(0,r3) | ||
143 | MMU_FTR_SECTION_ELSE_NESTED(96) | ||
144 | PPC_TLBILX_ALL_EARLY(0,r3) | ||
145 | ALT_MMU_FTR_SECTION_END_NESTED_IFCLR(MMU_FTR_TLBILX_EARLY_OPCODE, 96) | ||
146 | ALT_MMU_FTR_SECTION_END_IFCLR(MMU_FTR_USE_TLBILX) | 142 | ALT_MMU_FTR_SECTION_END_IFCLR(MMU_FTR_USE_TLBILX) |
147 | msync | 143 | msync |
148 | isync | 144 | isync |
@@ -155,11 +151,7 @@ BEGIN_MMU_FTR_SECTION | |||
155 | wrteei 0 | 151 | wrteei 0 |
156 | mfspr r4,SPRN_MAS6 /* save MAS6 */ | 152 | mfspr r4,SPRN_MAS6 /* save MAS6 */ |
157 | mtspr SPRN_MAS6,r3 | 153 | mtspr SPRN_MAS6,r3 |
158 | BEGIN_MMU_FTR_SECTION_NESTED(96) | ||
159 | PPC_TLBILX_PID(0,0) | 154 | PPC_TLBILX_PID(0,0) |
160 | MMU_FTR_SECTION_ELSE_NESTED(96) | ||
161 | PPC_TLBILX_PID_EARLY(0,0) | ||
162 | ALT_MMU_FTR_SECTION_END_NESTED_IFCLR(MMU_FTR_TLBILX_EARLY_OPCODE, 96) | ||
163 | mtspr SPRN_MAS6,r4 /* restore MAS6 */ | 155 | mtspr SPRN_MAS6,r4 /* restore MAS6 */ |
164 | wrtee r10 | 156 | wrtee r10 |
165 | MMU_FTR_SECTION_ELSE | 157 | MMU_FTR_SECTION_ELSE |
@@ -193,16 +185,12 @@ BEGIN_MMU_FTR_SECTION | |||
193 | mtspr SPRN_MAS1,r4 | 185 | mtspr SPRN_MAS1,r4 |
194 | tlbwe | 186 | tlbwe |
195 | MMU_FTR_SECTION_ELSE | 187 | MMU_FTR_SECTION_ELSE |
196 | BEGIN_MMU_FTR_SECTION_NESTED(96) | ||
197 | PPC_TLBILX_VA(0,r3) | 188 | PPC_TLBILX_VA(0,r3) |
198 | MMU_FTR_SECTION_ELSE_NESTED(96) | ||
199 | PPC_TLBILX_VA_EARLY(0,r3) | ||
200 | ALT_MMU_FTR_SECTION_END_NESTED_IFCLR(MMU_FTR_TLBILX_EARLY_OPCODE, 96) | ||
201 | ALT_MMU_FTR_SECTION_END_IFCLR(MMU_FTR_USE_TLBILX) | 189 | ALT_MMU_FTR_SECTION_END_IFCLR(MMU_FTR_USE_TLBILX) |
202 | msync | 190 | msync |
203 | isync | 191 | isync |
204 | 1: wrtee r10 | 192 | 1: wrtee r10 |
205 | blr | 193 | blr |
206 | #elif | 194 | #else |
207 | #error Unsupported processor type ! | 195 | #error Unsupported processor type ! |
208 | #endif | 196 | #endif |
diff --git a/arch/powerpc/platforms/cell/Kconfig b/arch/powerpc/platforms/cell/Kconfig index 40e24c39ad06..50f17bdd3c16 100644 --- a/arch/powerpc/platforms/cell/Kconfig +++ b/arch/powerpc/platforms/cell/Kconfig | |||
@@ -13,7 +13,6 @@ config PPC_CELL_COMMON | |||
13 | config PPC_CELL_NATIVE | 13 | config PPC_CELL_NATIVE |
14 | bool | 14 | bool |
15 | select PPC_CELL_COMMON | 15 | select PPC_CELL_COMMON |
16 | select PPC_OF_PLATFORM_PCI | ||
17 | select MPIC | 16 | select MPIC |
18 | select IBM_NEW_EMAC_EMAC4 | 17 | select IBM_NEW_EMAC_EMAC4 |
19 | select IBM_NEW_EMAC_RGMII | 18 | select IBM_NEW_EMAC_RGMII |
@@ -25,6 +24,8 @@ config PPC_IBM_CELL_BLADE | |||
25 | bool "IBM Cell Blade" | 24 | bool "IBM Cell Blade" |
26 | depends on PPC64 && PPC_BOOK3S | 25 | depends on PPC64 && PPC_BOOK3S |
27 | select PPC_CELL_NATIVE | 26 | select PPC_CELL_NATIVE |
27 | select PPC_OF_PLATFORM_PCI | ||
28 | select PCI | ||
28 | select MMIO_NVRAM | 29 | select MMIO_NVRAM |
29 | select PPC_UDBG_16550 | 30 | select PPC_UDBG_16550 |
30 | select UDBG_RTAS_CONSOLE | 31 | select UDBG_RTAS_CONSOLE |
@@ -33,6 +34,8 @@ config PPC_CELLEB | |||
33 | bool "Toshiba's Cell Reference Set 'Celleb' Architecture" | 34 | bool "Toshiba's Cell Reference Set 'Celleb' Architecture" |
34 | depends on PPC64 && PPC_BOOK3S | 35 | depends on PPC64 && PPC_BOOK3S |
35 | select PPC_CELL_NATIVE | 36 | select PPC_CELL_NATIVE |
37 | select PPC_OF_PLATFORM_PCI | ||
38 | select PCI | ||
36 | select HAS_TXX9_SERIAL | 39 | select HAS_TXX9_SERIAL |
37 | select PPC_UDBG_BEAT | 40 | select PPC_UDBG_BEAT |
38 | select USB_OHCI_BIG_ENDIAN_MMIO | 41 | select USB_OHCI_BIG_ENDIAN_MMIO |
diff --git a/arch/powerpc/platforms/ps3/setup.c b/arch/powerpc/platforms/ps3/setup.c index 66181821322a..1a7b5ae0c83e 100644 --- a/arch/powerpc/platforms/ps3/setup.c +++ b/arch/powerpc/platforms/ps3/setup.c | |||
@@ -45,10 +45,6 @@ | |||
45 | DEFINE_MUTEX(ps3_gpu_mutex); | 45 | DEFINE_MUTEX(ps3_gpu_mutex); |
46 | EXPORT_SYMBOL_GPL(ps3_gpu_mutex); | 46 | EXPORT_SYMBOL_GPL(ps3_gpu_mutex); |
47 | 47 | ||
48 | #if !defined(CONFIG_SMP) | ||
49 | static void smp_send_stop(void) {} | ||
50 | #endif | ||
51 | |||
52 | static union ps3_firmware_version ps3_firmware_version; | 48 | static union ps3_firmware_version ps3_firmware_version; |
53 | 49 | ||
54 | void ps3_get_firmware_version(union ps3_firmware_version *v) | 50 | void ps3_get_firmware_version(union ps3_firmware_version *v) |
diff --git a/arch/s390/kernel/head.S b/arch/s390/kernel/head.S index bba14494ee00..22596d70fc2e 100644 --- a/arch/s390/kernel/head.S +++ b/arch/s390/kernel/head.S | |||
@@ -23,6 +23,7 @@ | |||
23 | * | 23 | * |
24 | */ | 24 | */ |
25 | 25 | ||
26 | #include <linux/init.h> | ||
26 | #include <asm/setup.h> | 27 | #include <asm/setup.h> |
27 | #include <asm/lowcore.h> | 28 | #include <asm/lowcore.h> |
28 | #include <asm/asm-offsets.h> | 29 | #include <asm/asm-offsets.h> |
@@ -35,7 +36,7 @@ | |||
35 | #define ARCH_OFFSET 0 | 36 | #define ARCH_OFFSET 0 |
36 | #endif | 37 | #endif |
37 | 38 | ||
38 | .section ".text.head","ax" | 39 | __HEAD |
39 | #ifndef CONFIG_IPL | 40 | #ifndef CONFIG_IPL |
40 | .org 0 | 41 | .org 0 |
41 | .long 0x00080000,0x80000000+startup # Just a restart PSW | 42 | .long 0x00080000,0x80000000+startup # Just a restart PSW |
diff --git a/arch/s390/kernel/vmlinux.lds.S b/arch/s390/kernel/vmlinux.lds.S index 7a2063eb88f0..89399b8756c2 100644 --- a/arch/s390/kernel/vmlinux.lds.S +++ b/arch/s390/kernel/vmlinux.lds.S | |||
@@ -29,8 +29,8 @@ SECTIONS | |||
29 | . = 0x00000000; | 29 | . = 0x00000000; |
30 | .text : { | 30 | .text : { |
31 | _text = .; /* Text and read-only data */ | 31 | _text = .; /* Text and read-only data */ |
32 | *(.text.head) | 32 | HEAD_TEXT |
33 | TEXT_TEXT | 33 | TEXT_TEXT |
34 | SCHED_TEXT | 34 | SCHED_TEXT |
35 | LOCK_TEXT | 35 | LOCK_TEXT |
36 | KPROBES_TEXT | 36 | KPROBES_TEXT |
diff --git a/arch/sh/configs/sh7785lcr_defconfig b/arch/sh/configs/sh7785lcr_defconfig index 8a42bbef1f50..e4fac2efc055 100644 --- a/arch/sh/configs/sh7785lcr_defconfig +++ b/arch/sh/configs/sh7785lcr_defconfig | |||
@@ -1,10 +1,11 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.29 | 3 | # Linux kernel version: 2.6.30-rc2 |
4 | # Thu Apr 2 19:15:58 2009 | 4 | # Wed Apr 22 19:17:56 2009 |
5 | # | 5 | # |
6 | CONFIG_SUPERH=y | 6 | CONFIG_SUPERH=y |
7 | CONFIG_SUPERH32=y | 7 | CONFIG_SUPERH32=y |
8 | # CONFIG_SUPERH64 is not set | ||
8 | CONFIG_ARCH_DEFCONFIG="arch/sh/configs/shx3_defconfig" | 9 | CONFIG_ARCH_DEFCONFIG="arch/sh/configs/shx3_defconfig" |
9 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 10 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
10 | CONFIG_GENERIC_BUG=y | 11 | CONFIG_GENERIC_BUG=y |
@@ -79,6 +80,7 @@ CONFIG_SYSCTL_SYSCALL=y | |||
79 | CONFIG_KALLSYMS=y | 80 | CONFIG_KALLSYMS=y |
80 | # CONFIG_KALLSYMS_ALL is not set | 81 | # CONFIG_KALLSYMS_ALL is not set |
81 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 82 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
83 | # CONFIG_STRIP_ASM_SYMS is not set | ||
82 | CONFIG_HOTPLUG=y | 84 | CONFIG_HOTPLUG=y |
83 | CONFIG_PRINTK=y | 85 | CONFIG_PRINTK=y |
84 | CONFIG_BUG=y | 86 | CONFIG_BUG=y |
@@ -98,6 +100,7 @@ CONFIG_SLAB=y | |||
98 | # CONFIG_SLUB is not set | 100 | # CONFIG_SLUB is not set |
99 | # CONFIG_SLOB is not set | 101 | # CONFIG_SLOB is not set |
100 | CONFIG_PROFILING=y | 102 | CONFIG_PROFILING=y |
103 | # CONFIG_MARKERS is not set | ||
101 | # CONFIG_OPROFILE is not set | 104 | # CONFIG_OPROFILE is not set |
102 | CONFIG_HAVE_OPROFILE=y | 105 | CONFIG_HAVE_OPROFILE=y |
103 | # CONFIG_KPROBES is not set | 106 | # CONFIG_KPROBES is not set |
@@ -106,6 +109,8 @@ CONFIG_HAVE_KPROBES=y | |||
106 | CONFIG_HAVE_KRETPROBES=y | 109 | CONFIG_HAVE_KRETPROBES=y |
107 | CONFIG_HAVE_ARCH_TRACEHOOK=y | 110 | CONFIG_HAVE_ARCH_TRACEHOOK=y |
108 | CONFIG_HAVE_CLK=y | 111 | CONFIG_HAVE_CLK=y |
112 | CONFIG_HAVE_DMA_API_DEBUG=y | ||
113 | # CONFIG_SLOW_WORK is not set | ||
109 | CONFIG_HAVE_GENERIC_DMA_COHERENT=y | 114 | CONFIG_HAVE_GENERIC_DMA_COHERENT=y |
110 | CONFIG_SLABINFO=y | 115 | CONFIG_SLABINFO=y |
111 | CONFIG_RT_MUTEXES=y | 116 | CONFIG_RT_MUTEXES=y |
@@ -118,7 +123,6 @@ CONFIG_MODULE_UNLOAD=y | |||
118 | # CONFIG_MODULE_SRCVERSION_ALL is not set | 123 | # CONFIG_MODULE_SRCVERSION_ALL is not set |
119 | CONFIG_BLOCK=y | 124 | CONFIG_BLOCK=y |
120 | # CONFIG_LBD is not set | 125 | # CONFIG_LBD is not set |
121 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
122 | # CONFIG_BLK_DEV_BSG is not set | 126 | # CONFIG_BLK_DEV_BSG is not set |
123 | # CONFIG_BLK_DEV_INTEGRITY is not set | 127 | # CONFIG_BLK_DEV_INTEGRITY is not set |
124 | 128 | ||
@@ -166,6 +170,7 @@ CONFIG_CPU_SHX2=y | |||
166 | # CONFIG_CPU_SUBTYPE_SH7760 is not set | 170 | # CONFIG_CPU_SUBTYPE_SH7760 is not set |
167 | # CONFIG_CPU_SUBTYPE_SH4_202 is not set | 171 | # CONFIG_CPU_SUBTYPE_SH4_202 is not set |
168 | # CONFIG_CPU_SUBTYPE_SH7723 is not set | 172 | # CONFIG_CPU_SUBTYPE_SH7723 is not set |
173 | # CONFIG_CPU_SUBTYPE_SH7724 is not set | ||
169 | # CONFIG_CPU_SUBTYPE_SH7763 is not set | 174 | # CONFIG_CPU_SUBTYPE_SH7763 is not set |
170 | # CONFIG_CPU_SUBTYPE_SH7770 is not set | 175 | # CONFIG_CPU_SUBTYPE_SH7770 is not set |
171 | # CONFIG_CPU_SUBTYPE_SH7780 is not set | 176 | # CONFIG_CPU_SUBTYPE_SH7780 is not set |
@@ -175,8 +180,6 @@ CONFIG_CPU_SUBTYPE_SH7785=y | |||
175 | # CONFIG_CPU_SUBTYPE_SH7343 is not set | 180 | # CONFIG_CPU_SUBTYPE_SH7343 is not set |
176 | # CONFIG_CPU_SUBTYPE_SH7722 is not set | 181 | # CONFIG_CPU_SUBTYPE_SH7722 is not set |
177 | # CONFIG_CPU_SUBTYPE_SH7366 is not set | 182 | # CONFIG_CPU_SUBTYPE_SH7366 is not set |
178 | # CONFIG_CPU_SUBTYPE_SH5_101 is not set | ||
179 | # CONFIG_CPU_SUBTYPE_SH5_103 is not set | ||
180 | 183 | ||
181 | # | 184 | # |
182 | # Memory management options | 185 | # Memory management options |
@@ -186,38 +189,31 @@ CONFIG_MMU=y | |||
186 | CONFIG_PAGE_OFFSET=0x80000000 | 189 | CONFIG_PAGE_OFFSET=0x80000000 |
187 | CONFIG_MEMORY_START=0x08000000 | 190 | CONFIG_MEMORY_START=0x08000000 |
188 | CONFIG_MEMORY_SIZE=0x08000000 | 191 | CONFIG_MEMORY_SIZE=0x08000000 |
189 | # CONFIG_29BIT is not set | 192 | CONFIG_29BIT=y |
190 | CONFIG_32BIT=y | 193 | # CONFIG_PMB_ENABLE is not set |
191 | CONFIG_PMB_ENABLE=y | ||
192 | # CONFIG_PMB is not set | ||
193 | CONFIG_PMB_FIXED=y | ||
194 | # CONFIG_X2TLB is not set | 194 | # CONFIG_X2TLB is not set |
195 | CONFIG_VSYSCALL=y | 195 | CONFIG_VSYSCALL=y |
196 | # CONFIG_NUMA is not set | 196 | # CONFIG_NUMA is not set |
197 | CONFIG_ARCH_FLATMEM_ENABLE=y | 197 | CONFIG_ARCH_FLATMEM_ENABLE=y |
198 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | 198 | CONFIG_ARCH_SPARSEMEM_ENABLE=y |
199 | CONFIG_ARCH_SPARSEMEM_DEFAULT=y | 199 | CONFIG_ARCH_SPARSEMEM_DEFAULT=y |
200 | CONFIG_MAX_ACTIVE_REGIONS=2 | 200 | CONFIG_MAX_ACTIVE_REGIONS=1 |
201 | CONFIG_ARCH_POPULATES_NODE_MAP=y | 201 | CONFIG_ARCH_POPULATES_NODE_MAP=y |
202 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | 202 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y |
203 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
204 | CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y | ||
205 | CONFIG_PAGE_SIZE_4KB=y | 203 | CONFIG_PAGE_SIZE_4KB=y |
206 | # CONFIG_PAGE_SIZE_8KB is not set | 204 | # CONFIG_PAGE_SIZE_8KB is not set |
207 | # CONFIG_PAGE_SIZE_16KB is not set | 205 | # CONFIG_PAGE_SIZE_16KB is not set |
208 | # CONFIG_PAGE_SIZE_64KB is not set | 206 | # CONFIG_PAGE_SIZE_64KB is not set |
209 | CONFIG_ENTRY_OFFSET=0x00001000 | 207 | CONFIG_ENTRY_OFFSET=0x00001000 |
210 | CONFIG_SELECT_MEMORY_MODEL=y | 208 | CONFIG_SELECT_MEMORY_MODEL=y |
211 | # CONFIG_FLATMEM_MANUAL is not set | 209 | CONFIG_FLATMEM_MANUAL=y |
212 | # CONFIG_DISCONTIGMEM_MANUAL is not set | 210 | # CONFIG_DISCONTIGMEM_MANUAL is not set |
213 | CONFIG_SPARSEMEM_MANUAL=y | 211 | # CONFIG_SPARSEMEM_MANUAL is not set |
214 | CONFIG_SPARSEMEM=y | 212 | CONFIG_FLATMEM=y |
215 | CONFIG_HAVE_MEMORY_PRESENT=y | 213 | CONFIG_FLAT_NODE_MEM_MAP=y |
216 | CONFIG_SPARSEMEM_STATIC=y | 214 | CONFIG_SPARSEMEM_STATIC=y |
217 | # CONFIG_MEMORY_HOTPLUG is not set | ||
218 | CONFIG_PAGEFLAGS_EXTENDED=y | 215 | CONFIG_PAGEFLAGS_EXTENDED=y |
219 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 216 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
220 | CONFIG_MIGRATION=y | ||
221 | # CONFIG_PHYS_ADDR_T_64BIT is not set | 217 | # CONFIG_PHYS_ADDR_T_64BIT is not set |
222 | CONFIG_ZONE_DMA_FLAG=0 | 218 | CONFIG_ZONE_DMA_FLAG=0 |
223 | CONFIG_NR_QUICK=2 | 219 | CONFIG_NR_QUICK=2 |
@@ -249,6 +245,7 @@ CONFIG_CPU_HAS_FPU=y | |||
249 | # | 245 | # |
250 | # CONFIG_SH_HIGHLANDER is not set | 246 | # CONFIG_SH_HIGHLANDER is not set |
251 | CONFIG_SH_SH7785LCR=y | 247 | CONFIG_SH_SH7785LCR=y |
248 | CONFIG_SH_SH7785LCR_29BIT_PHYSMAPS=y | ||
252 | 249 | ||
253 | # | 250 | # |
254 | # Timer and clock configuration | 251 | # Timer and clock configuration |
@@ -672,6 +669,7 @@ CONFIG_NETDEV_1000=y | |||
672 | # CONFIG_E1000E is not set | 669 | # CONFIG_E1000E is not set |
673 | # CONFIG_IP1000 is not set | 670 | # CONFIG_IP1000 is not set |
674 | # CONFIG_IGB is not set | 671 | # CONFIG_IGB is not set |
672 | # CONFIG_IGBVF is not set | ||
675 | # CONFIG_NS83820 is not set | 673 | # CONFIG_NS83820 is not set |
676 | # CONFIG_HAMACHI is not set | 674 | # CONFIG_HAMACHI is not set |
677 | # CONFIG_YELLOWFIN is not set | 675 | # CONFIG_YELLOWFIN is not set |
@@ -1009,15 +1007,17 @@ CONFIG_USB_HID=y | |||
1009 | # | 1007 | # |
1010 | # Special HID drivers | 1008 | # Special HID drivers |
1011 | # | 1009 | # |
1012 | CONFIG_HID_COMPAT=y | ||
1013 | CONFIG_HID_A4TECH=y | 1010 | CONFIG_HID_A4TECH=y |
1014 | CONFIG_HID_APPLE=y | 1011 | CONFIG_HID_APPLE=y |
1015 | CONFIG_HID_BELKIN=y | 1012 | CONFIG_HID_BELKIN=y |
1016 | CONFIG_HID_CHERRY=y | 1013 | CONFIG_HID_CHERRY=y |
1017 | CONFIG_HID_CHICONY=y | 1014 | CONFIG_HID_CHICONY=y |
1018 | CONFIG_HID_CYPRESS=y | 1015 | CONFIG_HID_CYPRESS=y |
1016 | # CONFIG_DRAGONRISE_FF is not set | ||
1019 | CONFIG_HID_EZKEY=y | 1017 | CONFIG_HID_EZKEY=y |
1018 | # CONFIG_HID_KYE is not set | ||
1020 | CONFIG_HID_GYRATION=y | 1019 | CONFIG_HID_GYRATION=y |
1020 | # CONFIG_HID_KENSINGTON is not set | ||
1021 | CONFIG_HID_LOGITECH=y | 1021 | CONFIG_HID_LOGITECH=y |
1022 | # CONFIG_LOGITECH_FF is not set | 1022 | # CONFIG_LOGITECH_FF is not set |
1023 | # CONFIG_LOGIRUMBLEPAD2_FF is not set | 1023 | # CONFIG_LOGIRUMBLEPAD2_FF is not set |
@@ -1218,6 +1218,7 @@ CONFIG_EXT2_FS=y | |||
1218 | # CONFIG_EXT2_FS_XATTR is not set | 1218 | # CONFIG_EXT2_FS_XATTR is not set |
1219 | # CONFIG_EXT2_FS_XIP is not set | 1219 | # CONFIG_EXT2_FS_XIP is not set |
1220 | CONFIG_EXT3_FS=y | 1220 | CONFIG_EXT3_FS=y |
1221 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | ||
1221 | CONFIG_EXT3_FS_XATTR=y | 1222 | CONFIG_EXT3_FS_XATTR=y |
1222 | # CONFIG_EXT3_FS_POSIX_ACL is not set | 1223 | # CONFIG_EXT3_FS_POSIX_ACL is not set |
1223 | # CONFIG_EXT3_FS_SECURITY is not set | 1224 | # CONFIG_EXT3_FS_SECURITY is not set |
@@ -1240,6 +1241,11 @@ CONFIG_INOTIFY_USER=y | |||
1240 | # CONFIG_FUSE_FS is not set | 1241 | # CONFIG_FUSE_FS is not set |
1241 | 1242 | ||
1242 | # | 1243 | # |
1244 | # Caches | ||
1245 | # | ||
1246 | # CONFIG_FSCACHE is not set | ||
1247 | |||
1248 | # | ||
1243 | # CD-ROM/DVD Filesystems | 1249 | # CD-ROM/DVD Filesystems |
1244 | # | 1250 | # |
1245 | # CONFIG_ISO9660_FS is not set | 1251 | # CONFIG_ISO9660_FS is not set |
@@ -1289,6 +1295,7 @@ CONFIG_MINIX_FS=y | |||
1289 | # CONFIG_ROMFS_FS is not set | 1295 | # CONFIG_ROMFS_FS is not set |
1290 | # CONFIG_SYSV_FS is not set | 1296 | # CONFIG_SYSV_FS is not set |
1291 | # CONFIG_UFS_FS is not set | 1297 | # CONFIG_UFS_FS is not set |
1298 | # CONFIG_NILFS2_FS is not set | ||
1292 | CONFIG_NETWORK_FILESYSTEMS=y | 1299 | CONFIG_NETWORK_FILESYSTEMS=y |
1293 | CONFIG_NFS_FS=y | 1300 | CONFIG_NFS_FS=y |
1294 | CONFIG_NFS_V3=y | 1301 | CONFIG_NFS_V3=y |
@@ -1377,6 +1384,9 @@ CONFIG_DEBUG_KERNEL=y | |||
1377 | CONFIG_DETECT_SOFTLOCKUP=y | 1384 | CONFIG_DETECT_SOFTLOCKUP=y |
1378 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set | 1385 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set |
1379 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 | 1386 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 |
1387 | CONFIG_DETECT_HUNG_TASK=y | ||
1388 | # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set | ||
1389 | CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 | ||
1380 | CONFIG_SCHED_DEBUG=y | 1390 | CONFIG_SCHED_DEBUG=y |
1381 | # CONFIG_SCHEDSTATS is not set | 1391 | # CONFIG_SCHEDSTATS is not set |
1382 | # CONFIG_TIMER_STATS is not set | 1392 | # CONFIG_TIMER_STATS is not set |
@@ -1413,6 +1423,7 @@ CONFIG_SYSCTL_SYSCALL_CHECK=y | |||
1413 | CONFIG_HAVE_FUNCTION_TRACER=y | 1423 | CONFIG_HAVE_FUNCTION_TRACER=y |
1414 | CONFIG_HAVE_DYNAMIC_FTRACE=y | 1424 | CONFIG_HAVE_DYNAMIC_FTRACE=y |
1415 | CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y | 1425 | CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y |
1426 | CONFIG_TRACING_SUPPORT=y | ||
1416 | 1427 | ||
1417 | # | 1428 | # |
1418 | # Tracers | 1429 | # Tracers |
@@ -1422,9 +1433,14 @@ CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y | |||
1422 | # CONFIG_PREEMPT_TRACER is not set | 1433 | # CONFIG_PREEMPT_TRACER is not set |
1423 | # CONFIG_SCHED_TRACER is not set | 1434 | # CONFIG_SCHED_TRACER is not set |
1424 | # CONFIG_CONTEXT_SWITCH_TRACER is not set | 1435 | # CONFIG_CONTEXT_SWITCH_TRACER is not set |
1436 | # CONFIG_EVENT_TRACER is not set | ||
1425 | # CONFIG_BOOT_TRACER is not set | 1437 | # CONFIG_BOOT_TRACER is not set |
1426 | # CONFIG_TRACE_BRANCH_PROFILING is not set | 1438 | # CONFIG_TRACE_BRANCH_PROFILING is not set |
1427 | # CONFIG_STACK_TRACER is not set | 1439 | # CONFIG_STACK_TRACER is not set |
1440 | # CONFIG_KMEMTRACE is not set | ||
1441 | # CONFIG_WORKQUEUE_TRACER is not set | ||
1442 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
1443 | # CONFIG_DMA_API_DEBUG is not set | ||
1428 | # CONFIG_SAMPLES is not set | 1444 | # CONFIG_SAMPLES is not set |
1429 | CONFIG_HAVE_ARCH_KGDB=y | 1445 | CONFIG_HAVE_ARCH_KGDB=y |
1430 | # CONFIG_KGDB is not set | 1446 | # CONFIG_KGDB is not set |
@@ -1542,6 +1558,7 @@ CONFIG_CRYPTO_DES=y | |||
1542 | # | 1558 | # |
1543 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 1559 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
1544 | # CONFIG_CRYPTO_HW is not set | 1560 | # CONFIG_CRYPTO_HW is not set |
1561 | # CONFIG_BINARY_PRINTF is not set | ||
1545 | 1562 | ||
1546 | # | 1563 | # |
1547 | # Library routines | 1564 | # Library routines |
diff --git a/arch/sh/include/asm/ptrace.h b/arch/sh/include/asm/ptrace.h index d3f6caa936b0..68e20ff9aa9b 100644 --- a/arch/sh/include/asm/ptrace.h +++ b/arch/sh/include/asm/ptrace.h | |||
@@ -9,7 +9,7 @@ | |||
9 | struct pt_regs { | 9 | struct pt_regs { |
10 | unsigned long long pc; | 10 | unsigned long long pc; |
11 | unsigned long long sr; | 11 | unsigned long long sr; |
12 | unsigned long long syscall_nr; | 12 | long long syscall_nr; |
13 | unsigned long long regs[63]; | 13 | unsigned long long regs[63]; |
14 | unsigned long long tregs[8]; | 14 | unsigned long long tregs[8]; |
15 | unsigned long long pad[2]; | 15 | unsigned long long pad[2]; |
diff --git a/arch/sh/kernel/cpu/sh5/entry.S b/arch/sh/kernel/cpu/sh5/entry.S index e640c63d5811..7e49cb812f8b 100644 --- a/arch/sh/kernel/cpu/sh5/entry.S +++ b/arch/sh/kernel/cpu/sh5/entry.S | |||
@@ -10,6 +10,7 @@ | |||
10 | * for more details. | 10 | * for more details. |
11 | */ | 11 | */ |
12 | #include <linux/errno.h> | 12 | #include <linux/errno.h> |
13 | #include <linux/init.h> | ||
13 | #include <linux/sys.h> | 14 | #include <linux/sys.h> |
14 | #include <cpu/registers.h> | 15 | #include <cpu/registers.h> |
15 | #include <asm/processor.h> | 16 | #include <asm/processor.h> |
@@ -2058,10 +2059,10 @@ asm_uaccess_end: | |||
2058 | 2059 | ||
2059 | 2060 | ||
2060 | /* | 2061 | /* |
2061 | * --- .text.init Section | 2062 | * --- .init.text Section |
2062 | */ | 2063 | */ |
2063 | 2064 | ||
2064 | .section .text.init, "ax" | 2065 | __INIT |
2065 | 2066 | ||
2066 | /* | 2067 | /* |
2067 | * void trap_init (void) | 2068 | * void trap_init (void) |
diff --git a/arch/sh/kernel/head_32.S b/arch/sh/kernel/head_32.S index 788605ff7088..a78be74b8d3e 100644 --- a/arch/sh/kernel/head_32.S +++ b/arch/sh/kernel/head_32.S | |||
@@ -10,6 +10,7 @@ | |||
10 | * | 10 | * |
11 | * Head.S contains the SH exception handlers and startup code. | 11 | * Head.S contains the SH exception handlers and startup code. |
12 | */ | 12 | */ |
13 | #include <linux/init.h> | ||
13 | #include <linux/linkage.h> | 14 | #include <linux/linkage.h> |
14 | #include <asm/thread_info.h> | 15 | #include <asm/thread_info.h> |
15 | 16 | ||
@@ -40,7 +41,7 @@ ENTRY(empty_zero_page) | |||
40 | 1: | 41 | 1: |
41 | .skip PAGE_SIZE - empty_zero_page - 1b | 42 | .skip PAGE_SIZE - empty_zero_page - 1b |
42 | 43 | ||
43 | .section .text.head, "ax" | 44 | __HEAD |
44 | 45 | ||
45 | /* | 46 | /* |
46 | * Condition at the entry of _stext: | 47 | * Condition at the entry of _stext: |
diff --git a/arch/sh/kernel/head_64.S b/arch/sh/kernel/head_64.S index 7ccfb995a398..3ea765844c74 100644 --- a/arch/sh/kernel/head_64.S +++ b/arch/sh/kernel/head_64.S | |||
@@ -8,6 +8,9 @@ | |||
8 | * License. See the file "COPYING" in the main directory of this archive | 8 | * License. See the file "COPYING" in the main directory of this archive |
9 | * for more details. | 9 | * for more details. |
10 | */ | 10 | */ |
11 | |||
12 | #include <linux/init.h> | ||
13 | |||
11 | #include <asm/page.h> | 14 | #include <asm/page.h> |
12 | #include <asm/cache.h> | 15 | #include <asm/cache.h> |
13 | #include <asm/tlb.h> | 16 | #include <asm/tlb.h> |
@@ -110,7 +113,7 @@ empty_bad_pte_table: | |||
110 | fpu_in_use: .quad 0 | 113 | fpu_in_use: .quad 0 |
111 | 114 | ||
112 | 115 | ||
113 | .section .text.head, "ax" | 116 | __HEAD |
114 | .balign L1_CACHE_BYTES | 117 | .balign L1_CACHE_BYTES |
115 | /* | 118 | /* |
116 | * Condition at the entry of __stext: | 119 | * Condition at the entry of __stext: |
diff --git a/arch/sh/kernel/vmlinux_32.lds.S b/arch/sh/kernel/vmlinux_32.lds.S index d0b2a715cd14..dd9b2ee1312d 100644 --- a/arch/sh/kernel/vmlinux_32.lds.S +++ b/arch/sh/kernel/vmlinux_32.lds.S | |||
@@ -31,7 +31,7 @@ SECTIONS | |||
31 | } = 0 | 31 | } = 0 |
32 | 32 | ||
33 | .text : { | 33 | .text : { |
34 | *(.text.head) | 34 | HEAD_TEXT |
35 | TEXT_TEXT | 35 | TEXT_TEXT |
36 | SCHED_TEXT | 36 | SCHED_TEXT |
37 | LOCK_TEXT | 37 | LOCK_TEXT |
diff --git a/arch/sh/kernel/vmlinux_64.lds.S b/arch/sh/kernel/vmlinux_64.lds.S index 33fa46451406..69664460c688 100644 --- a/arch/sh/kernel/vmlinux_64.lds.S +++ b/arch/sh/kernel/vmlinux_64.lds.S | |||
@@ -42,7 +42,7 @@ SECTIONS | |||
42 | } = 0 | 42 | } = 0 |
43 | 43 | ||
44 | .text : C_PHYS(.text) { | 44 | .text : C_PHYS(.text) { |
45 | *(.text.head) | 45 | HEAD_TEXT |
46 | TEXT_TEXT | 46 | TEXT_TEXT |
47 | *(.text64) | 47 | *(.text64) |
48 | *(.text..SHmedia32) | 48 | *(.text..SHmedia32) |
diff --git a/arch/sparc/kernel/head_32.S b/arch/sparc/kernel/head_32.S index f0b4b516304f..6b4d8acc4c83 100644 --- a/arch/sparc/kernel/head_32.S +++ b/arch/sparc/kernel/head_32.S | |||
@@ -72,7 +72,7 @@ sun4e_notsup: | |||
72 | .align 4 | 72 | .align 4 |
73 | 73 | ||
74 | /* The Sparc trap table, bootloader gives us control at _start. */ | 74 | /* The Sparc trap table, bootloader gives us control at _start. */ |
75 | .section .text.head,"ax" | 75 | __HEAD |
76 | .globl start, _stext, _start, __stext | 76 | .globl start, _stext, _start, __stext |
77 | .globl trapbase | 77 | .globl trapbase |
78 | _start: /* danger danger */ | 78 | _start: /* danger danger */ |
@@ -735,7 +735,7 @@ go_to_highmem: | |||
735 | nop | 735 | nop |
736 | 736 | ||
737 | /* The code above should be at beginning and we have to take care about | 737 | /* The code above should be at beginning and we have to take care about |
738 | * short jumps, as branching to .text.init section from .text is usually | 738 | * short jumps, as branching to .init.text section from .text is usually |
739 | * impossible */ | 739 | * impossible */ |
740 | __INIT | 740 | __INIT |
741 | /* Acquire boot time privileged register values, this will help debugging. | 741 | /* Acquire boot time privileged register values, this will help debugging. |
diff --git a/arch/sparc/kernel/head_64.S b/arch/sparc/kernel/head_64.S index 3a1b7bf03cff..91bf4c7f79b9 100644 --- a/arch/sparc/kernel/head_64.S +++ b/arch/sparc/kernel/head_64.S | |||
@@ -467,7 +467,7 @@ jump_to_sun4u_init: | |||
467 | jmpl %g2 + %g0, %g0 | 467 | jmpl %g2 + %g0, %g0 |
468 | nop | 468 | nop |
469 | 469 | ||
470 | .section .text.init.refok | 470 | __REF |
471 | sun4u_init: | 471 | sun4u_init: |
472 | BRANCH_IF_SUN4V(g1, sun4v_init) | 472 | BRANCH_IF_SUN4V(g1, sun4v_init) |
473 | 473 | ||
diff --git a/arch/sparc/kernel/vmlinux.lds.S b/arch/sparc/kernel/vmlinux.lds.S index 76267085b13b..fcbbd000ec08 100644 --- a/arch/sparc/kernel/vmlinux.lds.S +++ b/arch/sparc/kernel/vmlinux.lds.S | |||
@@ -41,7 +41,7 @@ SECTIONS | |||
41 | .text TEXTSTART : | 41 | .text TEXTSTART : |
42 | { | 42 | { |
43 | _text = .; | 43 | _text = .; |
44 | *(.text.head) | 44 | HEAD_TEXT |
45 | TEXT_TEXT | 45 | TEXT_TEXT |
46 | SCHED_TEXT | 46 | SCHED_TEXT |
47 | LOCK_TEXT | 47 | LOCK_TEXT |
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index c9086e6307a5..df9e885eee14 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
@@ -277,6 +277,7 @@ config SPARSE_IRQ | |||
277 | config NUMA_MIGRATE_IRQ_DESC | 277 | config NUMA_MIGRATE_IRQ_DESC |
278 | bool "Move irq desc when changing irq smp_affinity" | 278 | bool "Move irq desc when changing irq smp_affinity" |
279 | depends on SPARSE_IRQ && NUMA | 279 | depends on SPARSE_IRQ && NUMA |
280 | depends on BROKEN | ||
280 | default n | 281 | default n |
281 | ---help--- | 282 | ---help--- |
282 | This enables moving irq_desc to cpu/node that irq will use handled. | 283 | This enables moving irq_desc to cpu/node that irq will use handled. |
@@ -664,6 +665,7 @@ config MAXSMP | |||
664 | 665 | ||
665 | config NR_CPUS | 666 | config NR_CPUS |
666 | int "Maximum number of CPUs" if SMP && !MAXSMP | 667 | int "Maximum number of CPUs" if SMP && !MAXSMP |
668 | range 2 8 if SMP && X86_32 && !X86_BIGSMP | ||
667 | range 2 512 if SMP && !MAXSMP | 669 | range 2 512 if SMP && !MAXSMP |
668 | default "1" if !SMP | 670 | default "1" if !SMP |
669 | default "4096" if MAXSMP | 671 | default "4096" if MAXSMP |
diff --git a/arch/x86/Makefile b/arch/x86/Makefile index f05d8c91d9e5..8c86b72afdc2 100644 --- a/arch/x86/Makefile +++ b/arch/x86/Makefile | |||
@@ -153,7 +153,7 @@ endif | |||
153 | 153 | ||
154 | boot := arch/x86/boot | 154 | boot := arch/x86/boot |
155 | 155 | ||
156 | BOOT_TARGETS = bzlilo bzdisk fdimage fdimage144 fdimage288 isoimage install | 156 | BOOT_TARGETS = bzlilo bzdisk fdimage fdimage144 fdimage288 isoimage |
157 | 157 | ||
158 | PHONY += bzImage $(BOOT_TARGETS) | 158 | PHONY += bzImage $(BOOT_TARGETS) |
159 | 159 | ||
@@ -171,6 +171,10 @@ bzImage: vmlinux | |||
171 | $(BOOT_TARGETS): vmlinux | 171 | $(BOOT_TARGETS): vmlinux |
172 | $(Q)$(MAKE) $(build)=$(boot) $@ | 172 | $(Q)$(MAKE) $(build)=$(boot) $@ |
173 | 173 | ||
174 | PHONY += install | ||
175 | install: | ||
176 | $(Q)$(MAKE) $(build)=$(boot) $@ | ||
177 | |||
174 | PHONY += vdso_install | 178 | PHONY += vdso_install |
175 | vdso_install: | 179 | vdso_install: |
176 | $(Q)$(MAKE) $(build)=arch/x86/vdso $@ | 180 | $(Q)$(MAKE) $(build)=arch/x86/vdso $@ |
diff --git a/arch/x86/include/asm/mce.h b/arch/x86/include/asm/mce.h index 563933e06a35..4f8c199584e7 100644 --- a/arch/x86/include/asm/mce.h +++ b/arch/x86/include/asm/mce.h | |||
@@ -137,6 +137,7 @@ DECLARE_PER_CPU(mce_banks_t, mce_poll_banks); | |||
137 | enum mcp_flags { | 137 | enum mcp_flags { |
138 | MCP_TIMESTAMP = (1 << 0), /* log time stamp */ | 138 | MCP_TIMESTAMP = (1 << 0), /* log time stamp */ |
139 | MCP_UC = (1 << 1), /* log uncorrected errors */ | 139 | MCP_UC = (1 << 1), /* log uncorrected errors */ |
140 | MCP_DONTLOG = (1 << 2), /* only clear, don't log */ | ||
140 | }; | 141 | }; |
141 | extern void machine_check_poll(enum mcp_flags flags, mce_banks_t *b); | 142 | extern void machine_check_poll(enum mcp_flags flags, mce_banks_t *b); |
142 | 143 | ||
diff --git a/arch/x86/include/asm/topology.h b/arch/x86/include/asm/topology.h index 892b119dba6f..f44b49abca49 100644 --- a/arch/x86/include/asm/topology.h +++ b/arch/x86/include/asm/topology.h | |||
@@ -200,7 +200,7 @@ static inline void arch_fix_phys_package_id(int num, u32 slot) | |||
200 | } | 200 | } |
201 | 201 | ||
202 | struct pci_bus; | 202 | struct pci_bus; |
203 | void set_pci_bus_resources_arch_default(struct pci_bus *b); | 203 | void x86_pci_root_bus_res_quirks(struct pci_bus *b); |
204 | 204 | ||
205 | #ifdef CONFIG_SMP | 205 | #ifdef CONFIG_SMP |
206 | #define mc_capable() (cpumask_weight(cpu_core_mask(0)) != nr_cpu_ids) | 206 | #define mc_capable() (cpumask_weight(cpu_core_mask(0)) != nr_cpu_ids) |
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index a2789e42e162..30da617d18e4 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c | |||
@@ -3670,12 +3670,14 @@ int arch_setup_hpet_msi(unsigned int irq) | |||
3670 | { | 3670 | { |
3671 | int ret; | 3671 | int ret; |
3672 | struct msi_msg msg; | 3672 | struct msi_msg msg; |
3673 | struct irq_desc *desc = irq_to_desc(irq); | ||
3673 | 3674 | ||
3674 | ret = msi_compose_msg(NULL, irq, &msg); | 3675 | ret = msi_compose_msg(NULL, irq, &msg); |
3675 | if (ret < 0) | 3676 | if (ret < 0) |
3676 | return ret; | 3677 | return ret; |
3677 | 3678 | ||
3678 | hpet_msi_write(irq, &msg); | 3679 | hpet_msi_write(irq, &msg); |
3680 | desc->status |= IRQ_MOVE_PCNTXT; | ||
3679 | set_irq_chip_and_handler_name(irq, &hpet_msi_type, handle_edge_irq, | 3681 | set_irq_chip_and_handler_name(irq, &hpet_msi_type, handle_edge_irq, |
3680 | "edge"); | 3682 | "edge"); |
3681 | 3683 | ||
diff --git a/arch/x86/kernel/apic/nmi.c b/arch/x86/kernel/apic/nmi.c index d6bd62407152..ce4fbfa315a1 100644 --- a/arch/x86/kernel/apic/nmi.c +++ b/arch/x86/kernel/apic/nmi.c | |||
@@ -138,7 +138,7 @@ int __init check_nmi_watchdog(void) | |||
138 | if (!prev_nmi_count) | 138 | if (!prev_nmi_count) |
139 | goto error; | 139 | goto error; |
140 | 140 | ||
141 | alloc_cpumask_var(&backtrace_mask, GFP_KERNEL); | 141 | alloc_cpumask_var(&backtrace_mask, GFP_KERNEL|__GFP_ZERO); |
142 | printk(KERN_INFO "Testing NMI watchdog ... "); | 142 | printk(KERN_INFO "Testing NMI watchdog ... "); |
143 | 143 | ||
144 | #ifdef CONFIG_SMP | 144 | #ifdef CONFIG_SMP |
@@ -414,7 +414,8 @@ nmi_watchdog_tick(struct pt_regs *regs, unsigned reason) | |||
414 | touched = 1; | 414 | touched = 1; |
415 | } | 415 | } |
416 | 416 | ||
417 | if (cpumask_test_cpu(cpu, backtrace_mask)) { | 417 | /* We can be called before check_nmi_watchdog, hence NULL check. */ |
418 | if (backtrace_mask != NULL && cpumask_test_cpu(cpu, backtrace_mask)) { | ||
418 | static DEFINE_SPINLOCK(lock); /* Serialise the printks */ | 419 | static DEFINE_SPINLOCK(lock); /* Serialise the printks */ |
419 | 420 | ||
420 | spin_lock(&lock); | 421 | spin_lock(&lock); |
diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c index de1a50af807b..2bda69352976 100644 --- a/arch/x86/kernel/apic/x2apic_uv_x.c +++ b/arch/x86/kernel/apic/x2apic_uv_x.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/timer.h> | 19 | #include <linux/timer.h> |
20 | #include <linux/cpu.h> | 20 | #include <linux/cpu.h> |
21 | #include <linux/init.h> | 21 | #include <linux/init.h> |
22 | #include <linux/io.h> | ||
22 | 23 | ||
23 | #include <asm/uv/uv_mmrs.h> | 24 | #include <asm/uv/uv_mmrs.h> |
24 | #include <asm/uv/uv_hub.h> | 25 | #include <asm/uv/uv_hub.h> |
@@ -34,6 +35,17 @@ DEFINE_PER_CPU(int, x2apic_extra_bits); | |||
34 | 35 | ||
35 | static enum uv_system_type uv_system_type; | 36 | static enum uv_system_type uv_system_type; |
36 | 37 | ||
38 | static int early_get_nodeid(void) | ||
39 | { | ||
40 | union uvh_node_id_u node_id; | ||
41 | unsigned long *mmr; | ||
42 | |||
43 | mmr = early_ioremap(UV_LOCAL_MMR_BASE | UVH_NODE_ID, sizeof(*mmr)); | ||
44 | node_id.v = *mmr; | ||
45 | early_iounmap(mmr, sizeof(*mmr)); | ||
46 | return node_id.s.node_id; | ||
47 | } | ||
48 | |||
37 | static int uv_acpi_madt_oem_check(char *oem_id, char *oem_table_id) | 49 | static int uv_acpi_madt_oem_check(char *oem_id, char *oem_table_id) |
38 | { | 50 | { |
39 | if (!strcmp(oem_id, "SGI")) { | 51 | if (!strcmp(oem_id, "SGI")) { |
@@ -42,6 +54,8 @@ static int uv_acpi_madt_oem_check(char *oem_id, char *oem_table_id) | |||
42 | else if (!strcmp(oem_table_id, "UVX")) | 54 | else if (!strcmp(oem_table_id, "UVX")) |
43 | uv_system_type = UV_X2APIC; | 55 | uv_system_type = UV_X2APIC; |
44 | else if (!strcmp(oem_table_id, "UVH")) { | 56 | else if (!strcmp(oem_table_id, "UVH")) { |
57 | __get_cpu_var(x2apic_extra_bits) = | ||
58 | early_get_nodeid() << (UV_APIC_PNODE_SHIFT - 1); | ||
45 | uv_system_type = UV_NON_UNIQUE_APIC; | 59 | uv_system_type = UV_NON_UNIQUE_APIC; |
46 | return 1; | 60 | return 1; |
47 | } | 61 | } |
@@ -638,6 +652,7 @@ void __init uv_system_init(void) | |||
638 | if (uv_node_to_blade[nid] >= 0) | 652 | if (uv_node_to_blade[nid] >= 0) |
639 | continue; | 653 | continue; |
640 | paddr = node_start_pfn(nid) << PAGE_SHIFT; | 654 | paddr = node_start_pfn(nid) << PAGE_SHIFT; |
655 | paddr = uv_soc_phys_ram_to_gpa(paddr); | ||
641 | pnode = (paddr >> m_val) & pnode_mask; | 656 | pnode = (paddr >> m_val) & pnode_mask; |
642 | blade = boot_pnode_to_blade(pnode); | 657 | blade = boot_pnode_to_blade(pnode); |
643 | uv_node_to_blade[nid] = blade; | 658 | uv_node_to_blade[nid] = blade; |
diff --git a/arch/x86/kernel/cpu/mcheck/mce_64.c b/arch/x86/kernel/cpu/mcheck/mce_64.c index 863f89568b1a..6fb0b359d2a5 100644 --- a/arch/x86/kernel/cpu/mcheck/mce_64.c +++ b/arch/x86/kernel/cpu/mcheck/mce_64.c | |||
@@ -239,9 +239,10 @@ void machine_check_poll(enum mcp_flags flags, mce_banks_t *b) | |||
239 | * Don't get the IP here because it's unlikely to | 239 | * Don't get the IP here because it's unlikely to |
240 | * have anything to do with the actual error location. | 240 | * have anything to do with the actual error location. |
241 | */ | 241 | */ |
242 | 242 | if (!(flags & MCP_DONTLOG)) { | |
243 | mce_log(&m); | 243 | mce_log(&m); |
244 | add_taint(TAINT_MACHINE_CHECK); | 244 | add_taint(TAINT_MACHINE_CHECK); |
245 | } | ||
245 | 246 | ||
246 | /* | 247 | /* |
247 | * Clear state for this bank. | 248 | * Clear state for this bank. |
@@ -452,13 +453,14 @@ void mce_log_therm_throt_event(__u64 status) | |||
452 | */ | 453 | */ |
453 | 454 | ||
454 | static int check_interval = 5 * 60; /* 5 minutes */ | 455 | static int check_interval = 5 * 60; /* 5 minutes */ |
455 | static int next_interval; /* in jiffies */ | 456 | static DEFINE_PER_CPU(int, next_interval); /* in jiffies */ |
456 | static void mcheck_timer(unsigned long); | 457 | static void mcheck_timer(unsigned long); |
457 | static DEFINE_PER_CPU(struct timer_list, mce_timer); | 458 | static DEFINE_PER_CPU(struct timer_list, mce_timer); |
458 | 459 | ||
459 | static void mcheck_timer(unsigned long data) | 460 | static void mcheck_timer(unsigned long data) |
460 | { | 461 | { |
461 | struct timer_list *t = &per_cpu(mce_timer, data); | 462 | struct timer_list *t = &per_cpu(mce_timer, data); |
463 | int *n; | ||
462 | 464 | ||
463 | WARN_ON(smp_processor_id() != data); | 465 | WARN_ON(smp_processor_id() != data); |
464 | 466 | ||
@@ -470,14 +472,14 @@ static void mcheck_timer(unsigned long data) | |||
470 | * Alert userspace if needed. If we logged an MCE, reduce the | 472 | * Alert userspace if needed. If we logged an MCE, reduce the |
471 | * polling interval, otherwise increase the polling interval. | 473 | * polling interval, otherwise increase the polling interval. |
472 | */ | 474 | */ |
475 | n = &__get_cpu_var(next_interval); | ||
473 | if (mce_notify_user()) { | 476 | if (mce_notify_user()) { |
474 | next_interval = max(next_interval/2, HZ/100); | 477 | *n = max(*n/2, HZ/100); |
475 | } else { | 478 | } else { |
476 | next_interval = min(next_interval * 2, | 479 | *n = min(*n*2, (int)round_jiffies_relative(check_interval*HZ)); |
477 | (int)round_jiffies_relative(check_interval*HZ)); | ||
478 | } | 480 | } |
479 | 481 | ||
480 | t->expires = jiffies + next_interval; | 482 | t->expires = jiffies + *n; |
481 | add_timer(t); | 483 | add_timer(t); |
482 | } | 484 | } |
483 | 485 | ||
@@ -584,7 +586,7 @@ static void mce_init(void *dummy) | |||
584 | * Log the machine checks left over from the previous reset. | 586 | * Log the machine checks left over from the previous reset. |
585 | */ | 587 | */ |
586 | bitmap_fill(all_banks, MAX_NR_BANKS); | 588 | bitmap_fill(all_banks, MAX_NR_BANKS); |
587 | machine_check_poll(MCP_UC, &all_banks); | 589 | machine_check_poll(MCP_UC|(!mce_bootlog ? MCP_DONTLOG : 0), &all_banks); |
588 | 590 | ||
589 | set_in_cr4(X86_CR4_MCE); | 591 | set_in_cr4(X86_CR4_MCE); |
590 | 592 | ||
@@ -632,14 +634,13 @@ static void mce_cpu_features(struct cpuinfo_x86 *c) | |||
632 | static void mce_init_timer(void) | 634 | static void mce_init_timer(void) |
633 | { | 635 | { |
634 | struct timer_list *t = &__get_cpu_var(mce_timer); | 636 | struct timer_list *t = &__get_cpu_var(mce_timer); |
637 | int *n = &__get_cpu_var(next_interval); | ||
635 | 638 | ||
636 | /* data race harmless because everyone sets to the same value */ | 639 | *n = check_interval * HZ; |
637 | if (!next_interval) | 640 | if (!*n) |
638 | next_interval = check_interval * HZ; | ||
639 | if (!next_interval) | ||
640 | return; | 641 | return; |
641 | setup_timer(t, mcheck_timer, smp_processor_id()); | 642 | setup_timer(t, mcheck_timer, smp_processor_id()); |
642 | t->expires = round_jiffies(jiffies + next_interval); | 643 | t->expires = round_jiffies(jiffies + *n); |
643 | add_timer(t); | 644 | add_timer(t); |
644 | } | 645 | } |
645 | 646 | ||
@@ -907,7 +908,6 @@ static void mce_cpu_restart(void *data) | |||
907 | /* Reinit MCEs after user configuration changes */ | 908 | /* Reinit MCEs after user configuration changes */ |
908 | static void mce_restart(void) | 909 | static void mce_restart(void) |
909 | { | 910 | { |
910 | next_interval = check_interval * HZ; | ||
911 | on_each_cpu(mce_cpu_restart, NULL, 1); | 911 | on_each_cpu(mce_cpu_restart, NULL, 1); |
912 | } | 912 | } |
913 | 913 | ||
@@ -1110,7 +1110,8 @@ static int __cpuinit mce_cpu_callback(struct notifier_block *nfb, | |||
1110 | break; | 1110 | break; |
1111 | case CPU_DOWN_FAILED: | 1111 | case CPU_DOWN_FAILED: |
1112 | case CPU_DOWN_FAILED_FROZEN: | 1112 | case CPU_DOWN_FAILED_FROZEN: |
1113 | t->expires = round_jiffies(jiffies + next_interval); | 1113 | t->expires = round_jiffies(jiffies + |
1114 | __get_cpu_var(next_interval)); | ||
1114 | add_timer_on(t, cpu); | 1115 | add_timer_on(t, cpu); |
1115 | smp_call_function_single(cpu, mce_reenable_cpu, &action, 1); | 1116 | smp_call_function_single(cpu, mce_reenable_cpu, &action, 1); |
1116 | break; | 1117 | break; |
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index a331ec38af9e..38946c6e8433 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S | |||
@@ -1410,7 +1410,10 @@ ENTRY(paranoid_exit) | |||
1410 | paranoid_swapgs: | 1410 | paranoid_swapgs: |
1411 | TRACE_IRQS_IRETQ 0 | 1411 | TRACE_IRQS_IRETQ 0 |
1412 | SWAPGS_UNSAFE_STACK | 1412 | SWAPGS_UNSAFE_STACK |
1413 | RESTORE_ALL 8 | ||
1414 | jmp irq_return | ||
1413 | paranoid_restore: | 1415 | paranoid_restore: |
1416 | TRACE_IRQS_IRETQ 0 | ||
1414 | RESTORE_ALL 8 | 1417 | RESTORE_ALL 8 |
1415 | jmp irq_return | 1418 | jmp irq_return |
1416 | paranoid_userspace: | 1419 | paranoid_userspace: |
diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c index 3f0019e0a229..81408b93f887 100644 --- a/arch/x86/kernel/hpet.c +++ b/arch/x86/kernel/hpet.c | |||
@@ -236,6 +236,10 @@ static void hpet_stop_counter(void) | |||
236 | unsigned long cfg = hpet_readl(HPET_CFG); | 236 | unsigned long cfg = hpet_readl(HPET_CFG); |
237 | cfg &= ~HPET_CFG_ENABLE; | 237 | cfg &= ~HPET_CFG_ENABLE; |
238 | hpet_writel(cfg, HPET_CFG); | 238 | hpet_writel(cfg, HPET_CFG); |
239 | } | ||
240 | |||
241 | static void hpet_reset_counter(void) | ||
242 | { | ||
239 | hpet_writel(0, HPET_COUNTER); | 243 | hpet_writel(0, HPET_COUNTER); |
240 | hpet_writel(0, HPET_COUNTER + 4); | 244 | hpet_writel(0, HPET_COUNTER + 4); |
241 | } | 245 | } |
@@ -250,6 +254,7 @@ static void hpet_start_counter(void) | |||
250 | static void hpet_restart_counter(void) | 254 | static void hpet_restart_counter(void) |
251 | { | 255 | { |
252 | hpet_stop_counter(); | 256 | hpet_stop_counter(); |
257 | hpet_reset_counter(); | ||
253 | hpet_start_counter(); | 258 | hpet_start_counter(); |
254 | } | 259 | } |
255 | 260 | ||
@@ -309,7 +314,7 @@ static int hpet_setup_msi_irq(unsigned int irq); | |||
309 | static void hpet_set_mode(enum clock_event_mode mode, | 314 | static void hpet_set_mode(enum clock_event_mode mode, |
310 | struct clock_event_device *evt, int timer) | 315 | struct clock_event_device *evt, int timer) |
311 | { | 316 | { |
312 | unsigned long cfg; | 317 | unsigned long cfg, cmp, now; |
313 | uint64_t delta; | 318 | uint64_t delta; |
314 | 319 | ||
315 | switch (mode) { | 320 | switch (mode) { |
@@ -317,12 +322,23 @@ static void hpet_set_mode(enum clock_event_mode mode, | |||
317 | hpet_stop_counter(); | 322 | hpet_stop_counter(); |
318 | delta = ((uint64_t)(NSEC_PER_SEC/HZ)) * evt->mult; | 323 | delta = ((uint64_t)(NSEC_PER_SEC/HZ)) * evt->mult; |
319 | delta >>= evt->shift; | 324 | delta >>= evt->shift; |
325 | now = hpet_readl(HPET_COUNTER); | ||
326 | cmp = now + (unsigned long) delta; | ||
320 | cfg = hpet_readl(HPET_Tn_CFG(timer)); | 327 | cfg = hpet_readl(HPET_Tn_CFG(timer)); |
321 | /* Make sure we use edge triggered interrupts */ | 328 | /* Make sure we use edge triggered interrupts */ |
322 | cfg &= ~HPET_TN_LEVEL; | 329 | cfg &= ~HPET_TN_LEVEL; |
323 | cfg |= HPET_TN_ENABLE | HPET_TN_PERIODIC | | 330 | cfg |= HPET_TN_ENABLE | HPET_TN_PERIODIC | |
324 | HPET_TN_SETVAL | HPET_TN_32BIT; | 331 | HPET_TN_SETVAL | HPET_TN_32BIT; |
325 | hpet_writel(cfg, HPET_Tn_CFG(timer)); | 332 | hpet_writel(cfg, HPET_Tn_CFG(timer)); |
333 | hpet_writel(cmp, HPET_Tn_CMP(timer)); | ||
334 | udelay(1); | ||
335 | /* | ||
336 | * HPET on AMD 81xx needs a second write (with HPET_TN_SETVAL | ||
337 | * cleared) to T0_CMP to set the period. The HPET_TN_SETVAL | ||
338 | * bit is automatically cleared after the first write. | ||
339 | * (See AMD-8111 HyperTransport I/O Hub Data Sheet, | ||
340 | * Publication # 24674) | ||
341 | */ | ||
326 | hpet_writel((unsigned long) delta, HPET_Tn_CMP(timer)); | 342 | hpet_writel((unsigned long) delta, HPET_Tn_CMP(timer)); |
327 | hpet_start_counter(); | 343 | hpet_start_counter(); |
328 | hpet_print_config(); | 344 | hpet_print_config(); |
diff --git a/arch/x86/kernel/quirks.c b/arch/x86/kernel/quirks.c index e95022e4f5d5..7563b31b4f03 100644 --- a/arch/x86/kernel/quirks.c +++ b/arch/x86/kernel/quirks.c | |||
@@ -261,8 +261,6 @@ static void old_ich_force_enable_hpet_user(struct pci_dev *dev) | |||
261 | { | 261 | { |
262 | if (hpet_force_user) | 262 | if (hpet_force_user) |
263 | old_ich_force_enable_hpet(dev); | 263 | old_ich_force_enable_hpet(dev); |
264 | else | ||
265 | hpet_print_force_info(); | ||
266 | } | 264 | } |
267 | 265 | ||
268 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_1, | 266 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_1, |
diff --git a/arch/x86/kernel/uv_time.c b/arch/x86/kernel/uv_time.c index 2ffb6c53326e..583f11d5c480 100644 --- a/arch/x86/kernel/uv_time.c +++ b/arch/x86/kernel/uv_time.c | |||
@@ -29,7 +29,7 @@ | |||
29 | 29 | ||
30 | #define RTC_NAME "sgi_rtc" | 30 | #define RTC_NAME "sgi_rtc" |
31 | 31 | ||
32 | static cycle_t uv_read_rtc(void); | 32 | static cycle_t uv_read_rtc(struct clocksource *cs); |
33 | static int uv_rtc_next_event(unsigned long, struct clock_event_device *); | 33 | static int uv_rtc_next_event(unsigned long, struct clock_event_device *); |
34 | static void uv_rtc_timer_setup(enum clock_event_mode, | 34 | static void uv_rtc_timer_setup(enum clock_event_mode, |
35 | struct clock_event_device *); | 35 | struct clock_event_device *); |
@@ -123,7 +123,7 @@ static int uv_setup_intr(int cpu, u64 expires) | |||
123 | /* Initialize comparator value */ | 123 | /* Initialize comparator value */ |
124 | uv_write_global_mmr64(pnode, UVH_INT_CMPB, expires); | 124 | uv_write_global_mmr64(pnode, UVH_INT_CMPB, expires); |
125 | 125 | ||
126 | return (expires < uv_read_rtc() && !uv_intr_pending(pnode)); | 126 | return (expires < uv_read_rtc(NULL) && !uv_intr_pending(pnode)); |
127 | } | 127 | } |
128 | 128 | ||
129 | /* | 129 | /* |
@@ -256,7 +256,7 @@ static int uv_rtc_unset_timer(int cpu) | |||
256 | 256 | ||
257 | spin_lock_irqsave(&head->lock, flags); | 257 | spin_lock_irqsave(&head->lock, flags); |
258 | 258 | ||
259 | if (head->next_cpu == bcpu && uv_read_rtc() >= *t) | 259 | if (head->next_cpu == bcpu && uv_read_rtc(NULL) >= *t) |
260 | rc = 1; | 260 | rc = 1; |
261 | 261 | ||
262 | *t = ULLONG_MAX; | 262 | *t = ULLONG_MAX; |
@@ -278,7 +278,7 @@ static int uv_rtc_unset_timer(int cpu) | |||
278 | /* | 278 | /* |
279 | * Read the RTC. | 279 | * Read the RTC. |
280 | */ | 280 | */ |
281 | static cycle_t uv_read_rtc(void) | 281 | static cycle_t uv_read_rtc(struct clocksource *cs) |
282 | { | 282 | { |
283 | return (cycle_t)uv_read_local_mmr(UVH_RTC); | 283 | return (cycle_t)uv_read_local_mmr(UVH_RTC); |
284 | } | 284 | } |
@@ -291,7 +291,7 @@ static int uv_rtc_next_event(unsigned long delta, | |||
291 | { | 291 | { |
292 | int ced_cpu = cpumask_first(ced->cpumask); | 292 | int ced_cpu = cpumask_first(ced->cpumask); |
293 | 293 | ||
294 | return uv_rtc_set_timer(ced_cpu, delta + uv_read_rtc()); | 294 | return uv_rtc_set_timer(ced_cpu, delta + uv_read_rtc(NULL)); |
295 | } | 295 | } |
296 | 296 | ||
297 | /* | 297 | /* |
diff --git a/arch/x86/kernel/xsave.c b/arch/x86/kernel/xsave.c index 0a5b04aa98f1..c5ee17e8c6d9 100644 --- a/arch/x86/kernel/xsave.c +++ b/arch/x86/kernel/xsave.c | |||
@@ -89,7 +89,7 @@ int save_i387_xstate(void __user *buf) | |||
89 | 89 | ||
90 | if (!used_math()) | 90 | if (!used_math()) |
91 | return 0; | 91 | return 0; |
92 | clear_used_math(); /* trigger finit */ | 92 | |
93 | if (task_thread_info(tsk)->status & TS_USEDFPU) { | 93 | if (task_thread_info(tsk)->status & TS_USEDFPU) { |
94 | /* | 94 | /* |
95 | * Start with clearing the user buffer. This will present a | 95 | * Start with clearing the user buffer. This will present a |
@@ -114,6 +114,8 @@ int save_i387_xstate(void __user *buf) | |||
114 | return -1; | 114 | return -1; |
115 | } | 115 | } |
116 | 116 | ||
117 | clear_used_math(); /* trigger finit */ | ||
118 | |||
117 | if (task_thread_info(tsk)->status & TS_XSAVE) { | 119 | if (task_thread_info(tsk)->status & TS_XSAVE) { |
118 | struct _fpstate __user *fx = buf; | 120 | struct _fpstate __user *fx = buf; |
119 | struct _xstate __user *x = buf; | 121 | struct _xstate __user *x = buf; |
diff --git a/arch/x86/mm/numa_32.c b/arch/x86/mm/numa_32.c index 3daefa04ace5..d2530062fe00 100644 --- a/arch/x86/mm/numa_32.c +++ b/arch/x86/mm/numa_32.c | |||
@@ -257,7 +257,7 @@ void resume_map_numa_kva(pgd_t *pgd_base) | |||
257 | } | 257 | } |
258 | #endif | 258 | #endif |
259 | 259 | ||
260 | static unsigned long calculate_numa_remap_pages(void) | 260 | static __init unsigned long calculate_numa_remap_pages(void) |
261 | { | 261 | { |
262 | int nid; | 262 | int nid; |
263 | unsigned long size, reserve_pages = 0; | 263 | unsigned long size, reserve_pages = 0; |
diff --git a/arch/x86/mm/numa_64.c b/arch/x86/mm/numa_64.c index d73aaa892371..2d05a12029dc 100644 --- a/arch/x86/mm/numa_64.c +++ b/arch/x86/mm/numa_64.c | |||
@@ -188,6 +188,9 @@ void __init setup_node_bootmem(int nodeid, unsigned long start, | |||
188 | const int pgdat_size = roundup(sizeof(pg_data_t), PAGE_SIZE); | 188 | const int pgdat_size = roundup(sizeof(pg_data_t), PAGE_SIZE); |
189 | int nid; | 189 | int nid; |
190 | 190 | ||
191 | if (!end) | ||
192 | return; | ||
193 | |||
191 | start = roundup(start, ZONE_ALIGN); | 194 | start = roundup(start, ZONE_ALIGN); |
192 | 195 | ||
193 | printk(KERN_INFO "Bootmem setup node %d %016lx-%016lx\n", nodeid, | 196 | printk(KERN_INFO "Bootmem setup node %d %016lx-%016lx\n", nodeid, |
diff --git a/arch/x86/mm/srat_64.c b/arch/x86/mm/srat_64.c index c7d272b8574c..33c5fa57e43d 100644 --- a/arch/x86/mm/srat_64.c +++ b/arch/x86/mm/srat_64.c | |||
@@ -28,6 +28,7 @@ int acpi_numa __initdata; | |||
28 | static struct acpi_table_slit *acpi_slit; | 28 | static struct acpi_table_slit *acpi_slit; |
29 | 29 | ||
30 | static nodemask_t nodes_parsed __initdata; | 30 | static nodemask_t nodes_parsed __initdata; |
31 | static nodemask_t cpu_nodes_parsed __initdata; | ||
31 | static struct bootnode nodes[MAX_NUMNODES] __initdata; | 32 | static struct bootnode nodes[MAX_NUMNODES] __initdata; |
32 | static struct bootnode nodes_add[MAX_NUMNODES]; | 33 | static struct bootnode nodes_add[MAX_NUMNODES]; |
33 | static int found_add_area __initdata; | 34 | static int found_add_area __initdata; |
@@ -141,6 +142,7 @@ acpi_numa_x2apic_affinity_init(struct acpi_srat_x2apic_cpu_affinity *pa) | |||
141 | 142 | ||
142 | apic_id = pa->apic_id; | 143 | apic_id = pa->apic_id; |
143 | apicid_to_node[apic_id] = node; | 144 | apicid_to_node[apic_id] = node; |
145 | node_set(node, cpu_nodes_parsed); | ||
144 | acpi_numa = 1; | 146 | acpi_numa = 1; |
145 | printk(KERN_INFO "SRAT: PXM %u -> APIC %u -> Node %u\n", | 147 | printk(KERN_INFO "SRAT: PXM %u -> APIC %u -> Node %u\n", |
146 | pxm, apic_id, node); | 148 | pxm, apic_id, node); |
@@ -174,6 +176,7 @@ acpi_numa_processor_affinity_init(struct acpi_srat_cpu_affinity *pa) | |||
174 | else | 176 | else |
175 | apic_id = pa->apic_id; | 177 | apic_id = pa->apic_id; |
176 | apicid_to_node[apic_id] = node; | 178 | apicid_to_node[apic_id] = node; |
179 | node_set(node, cpu_nodes_parsed); | ||
177 | acpi_numa = 1; | 180 | acpi_numa = 1; |
178 | printk(KERN_INFO "SRAT: PXM %u -> APIC %u -> Node %u\n", | 181 | printk(KERN_INFO "SRAT: PXM %u -> APIC %u -> Node %u\n", |
179 | pxm, apic_id, node); | 182 | pxm, apic_id, node); |
@@ -402,7 +405,8 @@ int __init acpi_scan_nodes(unsigned long start, unsigned long end) | |||
402 | return -1; | 405 | return -1; |
403 | } | 406 | } |
404 | 407 | ||
405 | node_possible_map = nodes_parsed; | 408 | /* Account for nodes with cpus and no memory */ |
409 | nodes_or(node_possible_map, nodes_parsed, cpu_nodes_parsed); | ||
406 | 410 | ||
407 | /* Finally register nodes */ | 411 | /* Finally register nodes */ |
408 | for_each_node_mask(i, node_possible_map) | 412 | for_each_node_mask(i, node_possible_map) |
diff --git a/arch/x86/pci/amd_bus.c b/arch/x86/pci/amd_bus.c index 9bb09823b362..f893d6a6e803 100644 --- a/arch/x86/pci/amd_bus.c +++ b/arch/x86/pci/amd_bus.c | |||
@@ -94,12 +94,16 @@ struct pci_root_info { | |||
94 | static int pci_root_num; | 94 | static int pci_root_num; |
95 | static struct pci_root_info pci_root_info[PCI_ROOT_NR]; | 95 | static struct pci_root_info pci_root_info[PCI_ROOT_NR]; |
96 | 96 | ||
97 | void set_pci_bus_resources_arch_default(struct pci_bus *b) | 97 | void x86_pci_root_bus_res_quirks(struct pci_bus *b) |
98 | { | 98 | { |
99 | int i; | 99 | int i; |
100 | int j; | 100 | int j; |
101 | struct pci_root_info *info; | 101 | struct pci_root_info *info; |
102 | 102 | ||
103 | /* don't go for it if _CRS is used */ | ||
104 | if (pci_probe & PCI_USE__CRS) | ||
105 | return; | ||
106 | |||
103 | /* if only one root bus, don't need to anything */ | 107 | /* if only one root bus, don't need to anything */ |
104 | if (pci_root_num < 2) | 108 | if (pci_root_num < 2) |
105 | return; | 109 | return; |
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c index 8c362b96b644..2202b6257b82 100644 --- a/arch/x86/pci/common.c +++ b/arch/x86/pci/common.c | |||
@@ -147,10 +147,13 @@ static void __devinit pcibios_fixup_device_resources(struct pci_dev *dev) | |||
147 | * are examined. | 147 | * are examined. |
148 | */ | 148 | */ |
149 | 149 | ||
150 | void __devinit pcibios_fixup_bus(struct pci_bus *b) | 150 | void __devinit pcibios_fixup_bus(struct pci_bus *b) |
151 | { | 151 | { |
152 | struct pci_dev *dev; | 152 | struct pci_dev *dev; |
153 | 153 | ||
154 | /* root bus? */ | ||
155 | if (!b->parent) | ||
156 | x86_pci_root_bus_res_quirks(b); | ||
154 | pci_read_bridge_bases(b); | 157 | pci_read_bridge_bases(b); |
155 | list_for_each_entry(dev, &b->devices, bus_list) | 158 | list_for_each_entry(dev, &b->devices, bus_list) |
156 | pcibios_fixup_device_resources(dev); | 159 | pcibios_fixup_device_resources(dev); |
diff --git a/arch/x86/pci/i386.c b/arch/x86/pci/i386.c index f1817f71e009..a85bef20a3b9 100644 --- a/arch/x86/pci/i386.c +++ b/arch/x86/pci/i386.c | |||
@@ -238,6 +238,10 @@ void __init pcibios_resource_survey(void) | |||
238 | */ | 238 | */ |
239 | fs_initcall(pcibios_assign_resources); | 239 | fs_initcall(pcibios_assign_resources); |
240 | 240 | ||
241 | void __weak x86_pci_root_bus_res_quirks(struct pci_bus *b) | ||
242 | { | ||
243 | } | ||
244 | |||
241 | /* | 245 | /* |
242 | * If we set up a device for bus mastering, we need to check the latency | 246 | * If we set up a device for bus mastering, we need to check the latency |
243 | * timer as certain crappy BIOSes forget to set it properly. | 247 | * timer as certain crappy BIOSes forget to set it properly. |
diff --git a/arch/x86/pci/mmconfig-shared.c b/arch/x86/pci/mmconfig-shared.c index 905bb526b133..5fa10bb9604f 100644 --- a/arch/x86/pci/mmconfig-shared.c +++ b/arch/x86/pci/mmconfig-shared.c | |||
@@ -375,7 +375,7 @@ static acpi_status __init check_mcfg_resource(struct acpi_resource *res, | |||
375 | if (!fixmem32) | 375 | if (!fixmem32) |
376 | return AE_OK; | 376 | return AE_OK; |
377 | if ((mcfg_res->start >= fixmem32->address) && | 377 | if ((mcfg_res->start >= fixmem32->address) && |
378 | (mcfg_res->end < (fixmem32->address + | 378 | (mcfg_res->end <= (fixmem32->address + |
379 | fixmem32->address_length))) { | 379 | fixmem32->address_length))) { |
380 | mcfg_res->flags = 1; | 380 | mcfg_res->flags = 1; |
381 | return AE_CTRL_TERMINATE; | 381 | return AE_CTRL_TERMINATE; |
@@ -392,7 +392,7 @@ static acpi_status __init check_mcfg_resource(struct acpi_resource *res, | |||
392 | return AE_OK; | 392 | return AE_OK; |
393 | 393 | ||
394 | if ((mcfg_res->start >= address.minimum) && | 394 | if ((mcfg_res->start >= address.minimum) && |
395 | (mcfg_res->end < (address.minimum + address.address_length))) { | 395 | (mcfg_res->end <= (address.minimum + address.address_length))) { |
396 | mcfg_res->flags = 1; | 396 | mcfg_res->flags = 1; |
397 | return AE_CTRL_TERMINATE; | 397 | return AE_CTRL_TERMINATE; |
398 | } | 398 | } |
@@ -439,7 +439,7 @@ static int __init is_mmconf_reserved(check_reserved_t is_reserved, | |||
439 | u64 old_size = size; | 439 | u64 old_size = size; |
440 | int valid = 0; | 440 | int valid = 0; |
441 | 441 | ||
442 | while (!is_reserved(addr, addr + size - 1, E820_RESERVED)) { | 442 | while (!is_reserved(addr, addr + size, E820_RESERVED)) { |
443 | size >>= 1; | 443 | size >>= 1; |
444 | if (size < (16UL<<20)) | 444 | if (size < (16UL<<20)) |
445 | break; | 445 | break; |
diff --git a/arch/xtensa/kernel/head.S b/arch/xtensa/kernel/head.S index 0817f9db836e..d9ddc1ba761c 100644 --- a/arch/xtensa/kernel/head.S +++ b/arch/xtensa/kernel/head.S | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <asm/page.h> | 19 | #include <asm/page.h> |
20 | #include <asm/cacheasm.h> | 20 | #include <asm/cacheasm.h> |
21 | 21 | ||
22 | #include <linux/init.h> | ||
22 | #include <linux/linkage.h> | 23 | #include <linux/linkage.h> |
23 | 24 | ||
24 | /* | 25 | /* |
@@ -45,7 +46,7 @@ | |||
45 | * instruction. | 46 | * instruction. |
46 | */ | 47 | */ |
47 | 48 | ||
48 | .section .head.text, "ax" | 49 | __HEAD |
49 | .globl _start | 50 | .globl _start |
50 | _start: _j 2f | 51 | _start: _j 2f |
51 | .align 4 | 52 | .align 4 |
diff --git a/arch/xtensa/kernel/vmlinux.lds.S b/arch/xtensa/kernel/vmlinux.lds.S index c1be9a4a740c..5accf51053da 100644 --- a/arch/xtensa/kernel/vmlinux.lds.S +++ b/arch/xtensa/kernel/vmlinux.lds.S | |||
@@ -85,8 +85,8 @@ SECTIONS | |||
85 | 85 | ||
86 | .text : | 86 | .text : |
87 | { | 87 | { |
88 | /* The .head.text section must be the first section! */ | 88 | /* The HEAD_TEXT section must be the first section! */ |
89 | *(.head.text) | 89 | HEAD_TEXT |
90 | *(.literal .text) | 90 | *(.literal .text) |
91 | VMLINUX_SYMBOL(__sched_text_start) = .; | 91 | VMLINUX_SYMBOL(__sched_text_start) = .; |
92 | *(.sched.literal .sched.text) | 92 | *(.sched.literal .sched.text) |