aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/Kconfig2
-rw-r--r--arch/avr32/kernel/process.c2
-rw-r--r--arch/h8300/kernel/asm-offsets.c1
-rw-r--r--arch/ia64/Kconfig1
-rw-r--r--arch/ia64/include/asm/dma-mapping.h110
-rw-r--r--arch/m32r/kernel/process.c5
-rw-r--r--arch/m32r/kernel/ptrace.c4
-rw-r--r--arch/m68k/kernel/traps.c1
-rw-r--r--arch/m68knommu/kernel/asm-offsets.c1
-rw-r--r--arch/m68knommu/kernel/traps.c1
-rw-r--r--arch/mn10300/include/asm/elf.h2
-rw-r--r--arch/mn10300/kernel/module.c39
-rw-r--r--arch/mn10300/kernel/process.c3
-rw-r--r--arch/parisc/hpux/fs.c5
-rw-r--r--arch/parisc/kernel/process.c5
-rw-r--r--arch/parisc/kernel/sys_parisc32.c5
-rw-r--r--arch/powerpc/kernel/prom_init.c40
-rw-r--r--arch/powerpc/platforms/maple/setup.c59
-rw-r--r--arch/s390/kernel/compat_linux.c3
-rw-r--r--arch/s390/kernel/process.c3
-rw-r--r--arch/sh/kernel/process_32.c5
-rw-r--r--arch/sh/kernel/process_64.c5
-rw-r--r--arch/x86/Kconfig1
-rw-r--r--arch/x86/boot/Makefile1
-rw-r--r--arch/x86/boot/compressed/Makefile1
-rw-r--r--arch/x86/include/asm/dma-mapping.h173
-rw-r--r--arch/x86/kernel/Makefile2
-rw-r--r--arch/x86/kernel/acpi/realmode/Makefile1
-rw-r--r--arch/x86/vdso/Makefile1
-rw-r--r--arch/xtensa/kernel/process.c5
30 files changed, 159 insertions, 328 deletions
diff --git a/arch/Kconfig b/arch/Kconfig
index 78a35e9dc104..99193b160232 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -112,3 +112,5 @@ config HAVE_DMA_API_DEBUG
112 112
113config HAVE_DEFAULT_NO_SPIN_MUTEXES 113config HAVE_DEFAULT_NO_SPIN_MUTEXES
114 bool 114 bool
115
116source "kernel/gcov/Kconfig"
diff --git a/arch/avr32/kernel/process.c b/arch/avr32/kernel/process.c
index 1bbe1da54869..93c0342530a0 100644
--- a/arch/avr32/kernel/process.c
+++ b/arch/avr32/kernel/process.c
@@ -394,8 +394,6 @@ asmlinkage int sys_execve(char __user *ufilename, char __user *__user *uargv,
394 goto out; 394 goto out;
395 395
396 error = do_execve(filename, uargv, uenvp, regs); 396 error = do_execve(filename, uargv, uenvp, regs);
397 if (error == 0)
398 current->ptrace &= ~PT_DTRACE;
399 putname(filename); 397 putname(filename);
400 398
401out: 399out:
diff --git a/arch/h8300/kernel/asm-offsets.c b/arch/h8300/kernel/asm-offsets.c
index 2042552e0871..fd961e0bd741 100644
--- a/arch/h8300/kernel/asm-offsets.c
+++ b/arch/h8300/kernel/asm-offsets.c
@@ -55,7 +55,6 @@ int main(void)
55 DEFINE(LRET, offsetof(struct pt_regs, pc) - sizeof(long)); 55 DEFINE(LRET, offsetof(struct pt_regs, pc) - sizeof(long));
56 56
57 DEFINE(PT_PTRACED, PT_PTRACED); 57 DEFINE(PT_PTRACED, PT_PTRACED);
58 DEFINE(PT_DTRACE, PT_DTRACE);
59 58
60 return 0; 59 return 0;
61} 60}
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
index 294a3b13ecac..170042b420d4 100644
--- a/arch/ia64/Kconfig
+++ b/arch/ia64/Kconfig
@@ -28,6 +28,7 @@ config IA64
28 select HAVE_DMA_ATTRS 28 select HAVE_DMA_ATTRS
29 select HAVE_KVM 29 select HAVE_KVM
30 select HAVE_ARCH_TRACEHOOK 30 select HAVE_ARCH_TRACEHOOK
31 select HAVE_DMA_API_DEBUG
31 default y 32 default y
32 help 33 help
33 The Itanium Processor Family is Intel's 64-bit successor to 34 The Itanium Processor Family is Intel's 64-bit successor to
diff --git a/arch/ia64/include/asm/dma-mapping.h b/arch/ia64/include/asm/dma-mapping.h
index 36c0009dbece..5a61b5c2e18f 100644
--- a/arch/ia64/include/asm/dma-mapping.h
+++ b/arch/ia64/include/asm/dma-mapping.h
@@ -8,6 +8,7 @@
8#include <asm/machvec.h> 8#include <asm/machvec.h>
9#include <linux/scatterlist.h> 9#include <linux/scatterlist.h>
10#include <asm/swiotlb.h> 10#include <asm/swiotlb.h>
11#include <linux/dma-debug.h>
11 12
12#define ARCH_HAS_DMA_GET_REQUIRED_MASK 13#define ARCH_HAS_DMA_GET_REQUIRED_MASK
13 14
@@ -24,95 +25,28 @@ static inline void *dma_alloc_coherent(struct device *dev, size_t size,
24 dma_addr_t *daddr, gfp_t gfp) 25 dma_addr_t *daddr, gfp_t gfp)
25{ 26{
26 struct dma_map_ops *ops = platform_dma_get_ops(dev); 27 struct dma_map_ops *ops = platform_dma_get_ops(dev);
27 return ops->alloc_coherent(dev, size, daddr, gfp); 28 void *caddr;
29
30 caddr = ops->alloc_coherent(dev, size, daddr, gfp);
31 debug_dma_alloc_coherent(dev, size, *daddr, caddr);
32 return caddr;
28} 33}
29 34
30static inline void dma_free_coherent(struct device *dev, size_t size, 35static inline void dma_free_coherent(struct device *dev, size_t size,
31 void *caddr, dma_addr_t daddr) 36 void *caddr, dma_addr_t daddr)
32{ 37{
33 struct dma_map_ops *ops = platform_dma_get_ops(dev); 38 struct dma_map_ops *ops = platform_dma_get_ops(dev);
39 debug_dma_free_coherent(dev, size, caddr, daddr);
34 ops->free_coherent(dev, size, caddr, daddr); 40 ops->free_coherent(dev, size, caddr, daddr);
35} 41}
36 42
37#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) 43#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
38#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) 44#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
39 45
40static inline dma_addr_t dma_map_single_attrs(struct device *dev, 46#define get_dma_ops(dev) platform_dma_get_ops(dev)
41 void *caddr, size_t size, 47#define flush_write_buffers()
42 enum dma_data_direction dir,
43 struct dma_attrs *attrs)
44{
45 struct dma_map_ops *ops = platform_dma_get_ops(dev);
46 return ops->map_page(dev, virt_to_page(caddr),
47 (unsigned long)caddr & ~PAGE_MASK, size,
48 dir, attrs);
49}
50
51static inline void dma_unmap_single_attrs(struct device *dev, dma_addr_t daddr,
52 size_t size,
53 enum dma_data_direction dir,
54 struct dma_attrs *attrs)
55{
56 struct dma_map_ops *ops = platform_dma_get_ops(dev);
57 ops->unmap_page(dev, daddr, size, dir, attrs);
58}
59
60#define dma_map_single(d, a, s, r) dma_map_single_attrs(d, a, s, r, NULL)
61#define dma_unmap_single(d, a, s, r) dma_unmap_single_attrs(d, a, s, r, NULL)
62
63static inline int dma_map_sg_attrs(struct device *dev, struct scatterlist *sgl,
64 int nents, enum dma_data_direction dir,
65 struct dma_attrs *attrs)
66{
67 struct dma_map_ops *ops = platform_dma_get_ops(dev);
68 return ops->map_sg(dev, sgl, nents, dir, attrs);
69}
70
71static inline void dma_unmap_sg_attrs(struct device *dev,
72 struct scatterlist *sgl, int nents,
73 enum dma_data_direction dir,
74 struct dma_attrs *attrs)
75{
76 struct dma_map_ops *ops = platform_dma_get_ops(dev);
77 ops->unmap_sg(dev, sgl, nents, dir, attrs);
78}
79
80#define dma_map_sg(d, s, n, r) dma_map_sg_attrs(d, s, n, r, NULL)
81#define dma_unmap_sg(d, s, n, r) dma_unmap_sg_attrs(d, s, n, r, NULL)
82
83static inline void dma_sync_single_for_cpu(struct device *dev, dma_addr_t daddr,
84 size_t size,
85 enum dma_data_direction dir)
86{
87 struct dma_map_ops *ops = platform_dma_get_ops(dev);
88 ops->sync_single_for_cpu(dev, daddr, size, dir);
89}
90
91static inline void dma_sync_sg_for_cpu(struct device *dev,
92 struct scatterlist *sgl,
93 int nents, enum dma_data_direction dir)
94{
95 struct dma_map_ops *ops = platform_dma_get_ops(dev);
96 ops->sync_sg_for_cpu(dev, sgl, nents, dir);
97}
98 48
99static inline void dma_sync_single_for_device(struct device *dev, 49#include <asm-generic/dma-mapping-common.h>
100 dma_addr_t daddr,
101 size_t size,
102 enum dma_data_direction dir)
103{
104 struct dma_map_ops *ops = platform_dma_get_ops(dev);
105 ops->sync_single_for_device(dev, daddr, size, dir);
106}
107
108static inline void dma_sync_sg_for_device(struct device *dev,
109 struct scatterlist *sgl,
110 int nents,
111 enum dma_data_direction dir)
112{
113 struct dma_map_ops *ops = platform_dma_get_ops(dev);
114 ops->sync_sg_for_device(dev, sgl, nents, dir);
115}
116 50
117static inline int dma_mapping_error(struct device *dev, dma_addr_t daddr) 51static inline int dma_mapping_error(struct device *dev, dma_addr_t daddr)
118{ 52{
@@ -120,30 +54,6 @@ static inline int dma_mapping_error(struct device *dev, dma_addr_t daddr)
120 return ops->mapping_error(dev, daddr); 54 return ops->mapping_error(dev, daddr);
121} 55}
122 56
123static inline dma_addr_t dma_map_page(struct device *dev, struct page *page,
124 size_t offset, size_t size,
125 enum dma_data_direction dir)
126{
127 struct dma_map_ops *ops = platform_dma_get_ops(dev);
128 return ops->map_page(dev, page, offset, size, dir, NULL);
129}
130
131static inline void dma_unmap_page(struct device *dev, dma_addr_t addr,
132 size_t size, enum dma_data_direction dir)
133{
134 dma_unmap_single(dev, addr, size, dir);
135}
136
137/*
138 * Rest of this file is part of the "Advanced DMA API". Use at your own risk.
139 * See Documentation/DMA-API.txt for details.
140 */
141
142#define dma_sync_single_range_for_cpu(dev, dma_handle, offset, size, dir) \
143 dma_sync_single_for_cpu(dev, dma_handle, size, dir)
144#define dma_sync_single_range_for_device(dev, dma_handle, offset, size, dir) \
145 dma_sync_single_for_device(dev, dma_handle, size, dir)
146
147static inline int dma_supported(struct device *dev, u64 mask) 57static inline int dma_supported(struct device *dev, u64 mask)
148{ 58{
149 struct dma_map_ops *ops = platform_dma_get_ops(dev); 59 struct dma_map_ops *ops = platform_dma_get_ops(dev);
diff --git a/arch/m32r/kernel/process.c b/arch/m32r/kernel/process.c
index 3e876f0baebc..67a01e1e4283 100644
--- a/arch/m32r/kernel/process.c
+++ b/arch/m32r/kernel/process.c
@@ -302,11 +302,6 @@ asmlinkage int sys_execve(char __user *ufilename, char __user * __user *uargv,
302 goto out; 302 goto out;
303 303
304 error = do_execve(filename, uargv, uenvp, &regs); 304 error = do_execve(filename, uargv, uenvp, &regs);
305 if (error == 0) {
306 task_lock(current);
307 current->ptrace &= ~PT_DTRACE;
308 task_unlock(current);
309 }
310 putname(filename); 305 putname(filename);
311out: 306out:
312 return error; 307 return error;
diff --git a/arch/m32r/kernel/ptrace.c b/arch/m32r/kernel/ptrace.c
index 9aa615d3a5b2..bf0abe9e1f73 100644
--- a/arch/m32r/kernel/ptrace.c
+++ b/arch/m32r/kernel/ptrace.c
@@ -676,10 +676,6 @@ arch_ptrace(struct task_struct *child, long request, long addr, long data)
676 if (!valid_signal(data)) 676 if (!valid_signal(data))
677 break; 677 break;
678 clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); 678 clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
679 if ((child->ptrace & PT_DTRACE) == 0) {
680 /* Spurious delayed TF traps may occur */
681 child->ptrace |= PT_DTRACE;
682 }
683 679
684 /* Compute next pc. */ 680 /* Compute next pc. */
685 pc = get_stack_long(child, PT_BPC); 681 pc = get_stack_long(child, PT_BPC);
diff --git a/arch/m68k/kernel/traps.c b/arch/m68k/kernel/traps.c
index 184acc90808d..aacd6d17b833 100644
--- a/arch/m68k/kernel/traps.c
+++ b/arch/m68k/kernel/traps.c
@@ -1057,7 +1057,6 @@ asmlinkage void trap_c(struct frame *fp)
1057 if (fp->ptregs.sr & PS_S) { 1057 if (fp->ptregs.sr & PS_S) {
1058 if ((fp->ptregs.vector >> 2) == VEC_TRACE) { 1058 if ((fp->ptregs.vector >> 2) == VEC_TRACE) {
1059 /* traced a trapping instruction */ 1059 /* traced a trapping instruction */
1060 current->ptrace |= PT_DTRACE;
1061 } else 1060 } else
1062 bad_super_trap(fp); 1061 bad_super_trap(fp);
1063 return; 1062 return;
diff --git a/arch/m68knommu/kernel/asm-offsets.c b/arch/m68knommu/kernel/asm-offsets.c
index f500dd6935d6..594ee0e657fe 100644
--- a/arch/m68knommu/kernel/asm-offsets.c
+++ b/arch/m68knommu/kernel/asm-offsets.c
@@ -73,7 +73,6 @@ int main(void)
73 DEFINE(TRAP_TRACE, TRAP_TRACE); 73 DEFINE(TRAP_TRACE, TRAP_TRACE);
74 74
75 DEFINE(PT_PTRACED, PT_PTRACED); 75 DEFINE(PT_PTRACED, PT_PTRACED);
76 DEFINE(PT_DTRACE, PT_DTRACE);
77 76
78 DEFINE(THREAD_SIZE, THREAD_SIZE); 77 DEFINE(THREAD_SIZE, THREAD_SIZE);
79 78
diff --git a/arch/m68knommu/kernel/traps.c b/arch/m68knommu/kernel/traps.c
index 5d5d56bcd0ef..51d325343ab5 100644
--- a/arch/m68knommu/kernel/traps.c
+++ b/arch/m68knommu/kernel/traps.c
@@ -200,7 +200,6 @@ asmlinkage void trap_c(struct frame *fp)
200 if (fp->ptregs.sr & PS_S) { 200 if (fp->ptregs.sr & PS_S) {
201 if ((fp->ptregs.vector >> 2) == VEC_TRACE) { 201 if ((fp->ptregs.vector >> 2) == VEC_TRACE) {
202 /* traced a trapping instruction */ 202 /* traced a trapping instruction */
203 current->ptrace |= PT_DTRACE;
204 } else 203 } else
205 bad_super_trap(fp); 204 bad_super_trap(fp);
206 return; 205 return;
diff --git a/arch/mn10300/include/asm/elf.h b/arch/mn10300/include/asm/elf.h
index 49105462e6fc..75a70aa9fd6f 100644
--- a/arch/mn10300/include/asm/elf.h
+++ b/arch/mn10300/include/asm/elf.h
@@ -28,6 +28,8 @@
28#define R_MN10300_PCREL8 6 /* PC-relative 8-bit signed. */ 28#define R_MN10300_PCREL8 6 /* PC-relative 8-bit signed. */
29#define R_MN10300_24 9 /* Direct 24 bit. */ 29#define R_MN10300_24 9 /* Direct 24 bit. */
30#define R_MN10300_RELATIVE 23 /* Adjust by program base. */ 30#define R_MN10300_RELATIVE 23 /* Adjust by program base. */
31#define R_MN10300_SYM_DIFF 33 /* Adjustment when relaxing. */
32#define R_MN10300_ALIGN 34 /* Alignment requirement. */
31 33
32/* 34/*
33 * ELF register definitions.. 35 * ELF register definitions..
diff --git a/arch/mn10300/kernel/module.c b/arch/mn10300/kernel/module.c
index 4fa0e3648d8e..6aea7fd76993 100644
--- a/arch/mn10300/kernel/module.c
+++ b/arch/mn10300/kernel/module.c
@@ -1,6 +1,6 @@
1/* MN10300 Kernel module helper routines 1/* MN10300 Kernel module helper routines
2 * 2 *
3 * Copyright (C) 2007, 2008 Red Hat, Inc. All Rights Reserved. 3 * Copyright (C) 2007, 2008, 2009 Red Hat, Inc. All Rights Reserved.
4 * Written by Mark Salter (msalter@redhat.com) 4 * Written by Mark Salter (msalter@redhat.com)
5 * - Derived from arch/i386/kernel/module.c 5 * - Derived from arch/i386/kernel/module.c
6 * 6 *
@@ -103,10 +103,10 @@ int apply_relocate_add(Elf32_Shdr *sechdrs,
103 unsigned int relsec, 103 unsigned int relsec,
104 struct module *me) 104 struct module *me)
105{ 105{
106 unsigned int i; 106 unsigned int i, sym_diff_seen = 0;
107 Elf32_Rela *rel = (void *)sechdrs[relsec].sh_addr; 107 Elf32_Rela *rel = (void *)sechdrs[relsec].sh_addr;
108 Elf32_Sym *sym; 108 Elf32_Sym *sym;
109 Elf32_Addr relocation; 109 Elf32_Addr relocation, sym_diff_val = 0;
110 uint8_t *location; 110 uint8_t *location;
111 uint32_t value; 111 uint32_t value;
112 112
@@ -126,6 +126,22 @@ int apply_relocate_add(Elf32_Shdr *sechdrs,
126 /* this is the adjustment to be made */ 126 /* this is the adjustment to be made */
127 relocation = sym->st_value + rel[i].r_addend; 127 relocation = sym->st_value + rel[i].r_addend;
128 128
129 if (sym_diff_seen) {
130 switch (ELF32_R_TYPE(rel[i].r_info)) {
131 case R_MN10300_32:
132 case R_MN10300_24:
133 case R_MN10300_16:
134 case R_MN10300_8:
135 relocation -= sym_diff_val;
136 sym_diff_seen = 0;
137 break;
138 default:
139 printk(KERN_ERR "module %s: Unexpected SYM_DIFF relocation: %u\n",
140 me->name, ELF32_R_TYPE(rel[i].r_info));
141 return -ENOEXEC;
142 }
143 }
144
129 switch (ELF32_R_TYPE(rel[i].r_info)) { 145 switch (ELF32_R_TYPE(rel[i].r_info)) {
130 /* for the first four relocation types, we simply 146 /* for the first four relocation types, we simply
131 * store the adjustment at the location given */ 147 * store the adjustment at the location given */
@@ -157,12 +173,29 @@ int apply_relocate_add(Elf32_Shdr *sechdrs,
157 *location = relocation - (uint32_t) location; 173 *location = relocation - (uint32_t) location;
158 break; 174 break;
159 175
176 case R_MN10300_SYM_DIFF:
177 /* This is used to adjust the next reloc as required
178 * by relaxation. */
179 sym_diff_seen = 1;
180 sym_diff_val = sym->st_value;
181 break;
182
183 case R_MN10300_ALIGN:
184 /* Just ignore the ALIGN relocs.
185 * Only interesting if kernel performed relaxation. */
186 continue;
187
160 default: 188 default:
161 printk(KERN_ERR "module %s: Unknown relocation: %u\n", 189 printk(KERN_ERR "module %s: Unknown relocation: %u\n",
162 me->name, ELF32_R_TYPE(rel[i].r_info)); 190 me->name, ELF32_R_TYPE(rel[i].r_info));
163 return -ENOEXEC; 191 return -ENOEXEC;
164 } 192 }
165 } 193 }
194 if (sym_diff_seen) {
195 printk(KERN_ERR "module %s: Nothing follows SYM_DIFF relocation: %u\n",
196 me->name, ELF32_R_TYPE(rel[i].r_info));
197 return -ENOEXEC;
198 }
166 return 0; 199 return 0;
167} 200}
168 201
diff --git a/arch/mn10300/kernel/process.c b/arch/mn10300/kernel/process.c
index 234cf344cdce..892cce82867e 100644
--- a/arch/mn10300/kernel/process.c
+++ b/arch/mn10300/kernel/process.c
@@ -281,9 +281,6 @@ asmlinkage long sys_execve(char __user *name,
281 error = PTR_ERR(filename); 281 error = PTR_ERR(filename);
282 if (!IS_ERR(filename)) { 282 if (!IS_ERR(filename)) {
283 error = do_execve(filename, argv, envp, __frame); 283 error = do_execve(filename, argv, envp, __frame);
284 if (error == 0)
285 current->ptrace &= ~PT_DTRACE;
286
287 putname(filename); 284 putname(filename);
288 } 285 }
289 286
diff --git a/arch/parisc/hpux/fs.c b/arch/parisc/hpux/fs.c
index 5cbe9f9e5d9e..54075360a8fd 100644
--- a/arch/parisc/hpux/fs.c
+++ b/arch/parisc/hpux/fs.c
@@ -44,11 +44,6 @@ int hpux_execve(struct pt_regs *regs)
44 error = do_execve(filename, (char __user * __user *) regs->gr[25], 44 error = do_execve(filename, (char __user * __user *) regs->gr[25],
45 (char __user * __user *) regs->gr[24], regs); 45 (char __user * __user *) regs->gr[24], regs);
46 46
47 if (error == 0) {
48 task_lock(current);
49 current->ptrace &= ~PT_DTRACE;
50 task_unlock(current);
51 }
52 putname(filename); 47 putname(filename);
53 48
54out: 49out:
diff --git a/arch/parisc/kernel/process.c b/arch/parisc/kernel/process.c
index 6f69101f90bb..61c07078c072 100644
--- a/arch/parisc/kernel/process.c
+++ b/arch/parisc/kernel/process.c
@@ -349,11 +349,6 @@ asmlinkage int sys_execve(struct pt_regs *regs)
349 goto out; 349 goto out;
350 error = do_execve(filename, (char __user * __user *) regs->gr[25], 350 error = do_execve(filename, (char __user * __user *) regs->gr[25],
351 (char __user * __user *) regs->gr[24], regs); 351 (char __user * __user *) regs->gr[24], regs);
352 if (error == 0) {
353 task_lock(current);
354 current->ptrace &= ~PT_DTRACE;
355 task_unlock(current);
356 }
357 putname(filename); 352 putname(filename);
358out: 353out:
359 354
diff --git a/arch/parisc/kernel/sys_parisc32.c b/arch/parisc/kernel/sys_parisc32.c
index 0838155b7a88..1adb40c81669 100644
--- a/arch/parisc/kernel/sys_parisc32.c
+++ b/arch/parisc/kernel/sys_parisc32.c
@@ -77,11 +77,6 @@ asmlinkage int sys32_execve(struct pt_regs *regs)
77 goto out; 77 goto out;
78 error = compat_do_execve(filename, compat_ptr(regs->gr[25]), 78 error = compat_do_execve(filename, compat_ptr(regs->gr[25]),
79 compat_ptr(regs->gr[24]), regs); 79 compat_ptr(regs->gr[24]), regs);
80 if (error == 0) {
81 task_lock(current);
82 current->ptrace &= ~PT_DTRACE;
83 task_unlock(current);
84 }
85 putname(filename); 80 putname(filename);
86out: 81out:
87 82
diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
index ef6f64950e9b..a538824616fd 100644
--- a/arch/powerpc/kernel/prom_init.c
+++ b/arch/powerpc/kernel/prom_init.c
@@ -1947,8 +1947,47 @@ static void __init fixup_device_tree_maple(void)
1947 prom_setprop(isa, name, "ranges", 1947 prom_setprop(isa, name, "ranges",
1948 isa_ranges, sizeof(isa_ranges)); 1948 isa_ranges, sizeof(isa_ranges));
1949} 1949}
1950
1951#define CPC925_MC_START 0xf8000000
1952#define CPC925_MC_LENGTH 0x1000000
1953/* The values for memory-controller don't have right number of cells */
1954static void __init fixup_device_tree_maple_memory_controller(void)
1955{
1956 phandle mc;
1957 u32 mc_reg[4];
1958 char *name = "/hostbridge@f8000000";
1959 struct prom_t *_prom = &RELOC(prom);
1960 u32 ac, sc;
1961
1962 mc = call_prom("finddevice", 1, 1, ADDR(name));
1963 if (!PHANDLE_VALID(mc))
1964 return;
1965
1966 if (prom_getproplen(mc, "reg") != 8)
1967 return;
1968
1969 prom_getprop(_prom->root, "#address-cells", &ac, sizeof(ac));
1970 prom_getprop(_prom->root, "#size-cells", &sc, sizeof(sc));
1971 if ((ac != 2) || (sc != 2))
1972 return;
1973
1974 if (prom_getprop(mc, "reg", mc_reg, sizeof(mc_reg)) == PROM_ERROR)
1975 return;
1976
1977 if (mc_reg[0] != CPC925_MC_START || mc_reg[1] != CPC925_MC_LENGTH)
1978 return;
1979
1980 prom_printf("Fixing up bogus hostbridge on Maple...\n");
1981
1982 mc_reg[0] = 0x0;
1983 mc_reg[1] = CPC925_MC_START;
1984 mc_reg[2] = 0x0;
1985 mc_reg[3] = CPC925_MC_LENGTH;
1986 prom_setprop(mc, name, "reg", mc_reg, sizeof(mc_reg));
1987}
1950#else 1988#else
1951#define fixup_device_tree_maple() 1989#define fixup_device_tree_maple()
1990#define fixup_device_tree_maple_memory_controller()
1952#endif 1991#endif
1953 1992
1954#ifdef CONFIG_PPC_CHRP 1993#ifdef CONFIG_PPC_CHRP
@@ -2189,6 +2228,7 @@ static void __init fixup_device_tree_efika(void)
2189static void __init fixup_device_tree(void) 2228static void __init fixup_device_tree(void)
2190{ 2229{
2191 fixup_device_tree_maple(); 2230 fixup_device_tree_maple();
2231 fixup_device_tree_maple_memory_controller();
2192 fixup_device_tree_chrp(); 2232 fixup_device_tree_chrp();
2193 fixup_device_tree_pmac(); 2233 fixup_device_tree_pmac();
2194 fixup_device_tree_efika(); 2234 fixup_device_tree_efika();
diff --git a/arch/powerpc/platforms/maple/setup.c b/arch/powerpc/platforms/maple/setup.c
index bfd60e4accee..0636a3df6978 100644
--- a/arch/powerpc/platforms/maple/setup.c
+++ b/arch/powerpc/platforms/maple/setup.c
@@ -335,3 +335,62 @@ define_machine(maple) {
335 .progress = maple_progress, 335 .progress = maple_progress,
336 .power_save = power4_idle, 336 .power_save = power4_idle,
337}; 337};
338
339#ifdef CONFIG_EDAC
340/*
341 * Register a platform device for CPC925 memory controller on
342 * Motorola ATCA-6101 blade.
343 */
344#define MAPLE_CPC925_MODEL "Motorola,ATCA-6101"
345static int __init maple_cpc925_edac_setup(void)
346{
347 struct platform_device *pdev;
348 struct device_node *np = NULL;
349 struct resource r;
350 const unsigned char *model;
351 int ret;
352
353 np = of_find_node_by_path("/");
354 if (!np) {
355 printk(KERN_ERR "%s: Unable to get root node\n", __func__);
356 return -ENODEV;
357 }
358
359 model = (const unsigned char *)of_get_property(np, "model", NULL);
360 if (!model) {
361 printk(KERN_ERR "%s: Unabel to get model info\n", __func__);
362 return -ENODEV;
363 }
364
365 ret = strcmp(model, MAPLE_CPC925_MODEL);
366 of_node_put(np);
367
368 if (ret != 0)
369 return 0;
370
371 np = of_find_node_by_type(NULL, "memory-controller");
372 if (!np) {
373 printk(KERN_ERR "%s: Unable to find memory-controller node\n",
374 __func__);
375 return -ENODEV;
376 }
377
378 ret = of_address_to_resource(np, 0, &r);
379 of_node_put(np);
380
381 if (ret < 0) {
382 printk(KERN_ERR "%s: Unable to get memory-controller reg\n",
383 __func__);
384 return -ENODEV;
385 }
386
387 pdev = platform_device_register_simple("cpc925_edac", 0, &r, 1);
388 if (IS_ERR(pdev))
389 return PTR_ERR(pdev);
390
391 printk(KERN_INFO "%s: CPC925 platform device created\n", __func__);
392
393 return 0;
394}
395machine_device_initcall(maple, maple_cpc925_edac_setup);
396#endif
diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c
index 002c70d3cb75..9ab188d67a3d 100644
--- a/arch/s390/kernel/compat_linux.c
+++ b/arch/s390/kernel/compat_linux.c
@@ -461,9 +461,6 @@ asmlinkage long sys32_execve(void)
461 result = rc; 461 result = rc;
462 goto out_putname; 462 goto out_putname;
463 } 463 }
464 task_lock(current);
465 current->ptrace &= ~PT_DTRACE;
466 task_unlock(current);
467 current->thread.fp_regs.fpc=0; 464 current->thread.fp_regs.fpc=0;
468 asm volatile("sfpc %0,0" : : "d" (0)); 465 asm volatile("sfpc %0,0" : : "d" (0));
469 result = regs->gprs[2]; 466 result = regs->gprs[2];
diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c
index 355f7a30c3f1..5a43f27eec13 100644
--- a/arch/s390/kernel/process.c
+++ b/arch/s390/kernel/process.c
@@ -266,9 +266,6 @@ SYSCALL_DEFINE0(vfork)
266 266
267asmlinkage void execve_tail(void) 267asmlinkage void execve_tail(void)
268{ 268{
269 task_lock(current);
270 current->ptrace &= ~PT_DTRACE;
271 task_unlock(current);
272 current->thread.fp_regs.fpc = 0; 269 current->thread.fp_regs.fpc = 0;
273 if (MACHINE_HAS_IEEE) 270 if (MACHINE_HAS_IEEE)
274 asm volatile("sfpc %0,%0" : : "d" (0)); 271 asm volatile("sfpc %0,%0" : : "d" (0));
diff --git a/arch/sh/kernel/process_32.c b/arch/sh/kernel/process_32.c
index 9289ede29c7b..601bbc0ec74e 100644
--- a/arch/sh/kernel/process_32.c
+++ b/arch/sh/kernel/process_32.c
@@ -367,11 +367,6 @@ asmlinkage int sys_execve(char __user *ufilename, char __user * __user *uargv,
367 goto out; 367 goto out;
368 368
369 error = do_execve(filename, uargv, uenvp, regs); 369 error = do_execve(filename, uargv, uenvp, regs);
370 if (error == 0) {
371 task_lock(current);
372 current->ptrace &= ~PT_DTRACE;
373 task_unlock(current);
374 }
375 putname(filename); 370 putname(filename);
376out: 371out:
377 return error; 372 return error;
diff --git a/arch/sh/kernel/process_64.c b/arch/sh/kernel/process_64.c
index 96be839040f8..3826773496d8 100644
--- a/arch/sh/kernel/process_64.c
+++ b/arch/sh/kernel/process_64.c
@@ -529,11 +529,6 @@ asmlinkage int sys_execve(char *ufilename, char **uargv,
529 (char __user * __user *)uargv, 529 (char __user * __user *)uargv,
530 (char __user * __user *)uenvp, 530 (char __user * __user *)uenvp,
531 pregs); 531 pregs);
532 if (error == 0) {
533 task_lock(current);
534 current->ptrace &= ~PT_DTRACE;
535 task_unlock(current);
536 }
537 putname(filename); 532 putname(filename);
538out: 533out:
539 return error; 534 return error;
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index cf42fc305419..73c0bda73fcd 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -28,6 +28,7 @@ config X86
28 select HAVE_KPROBES 28 select HAVE_KPROBES
29 select ARCH_WANT_OPTIONAL_GPIOLIB 29 select ARCH_WANT_OPTIONAL_GPIOLIB
30 select ARCH_WANT_FRAME_POINTERS 30 select ARCH_WANT_FRAME_POINTERS
31 select HAVE_DMA_ATTRS
31 select HAVE_KRETPROBES 32 select HAVE_KRETPROBES
32 select HAVE_FTRACE_MCOUNT_RECORD 33 select HAVE_FTRACE_MCOUNT_RECORD
33 select HAVE_DYNAMIC_FTRACE 34 select HAVE_DYNAMIC_FTRACE
diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile
index 8d16ada25048..ec749c2bfdd7 100644
--- a/arch/x86/boot/Makefile
+++ b/arch/x86/boot/Makefile
@@ -70,6 +70,7 @@ KBUILD_CFLAGS := $(LINUXINCLUDE) -g -Os -D_SETUP -D__KERNEL__ \
70 $(call cc-option, -mpreferred-stack-boundary=2) 70 $(call cc-option, -mpreferred-stack-boundary=2)
71KBUILD_CFLAGS += $(call cc-option, -m32) 71KBUILD_CFLAGS += $(call cc-option, -m32)
72KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__ 72KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__
73GCOV_PROFILE := n
73 74
74$(obj)/bzImage: asflags-y := $(SVGA_MODE) 75$(obj)/bzImage: asflags-y := $(SVGA_MODE)
75 76
diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
index 49c8a4c37d7c..e2ff504b4ddc 100644
--- a/arch/x86/boot/compressed/Makefile
+++ b/arch/x86/boot/compressed/Makefile
@@ -15,6 +15,7 @@ KBUILD_CFLAGS += $(call cc-option,-ffreestanding)
15KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector) 15KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector)
16 16
17KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__ 17KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__
18GCOV_PROFILE := n
18 19
19LDFLAGS := -m elf_$(UTS_MACHINE) 20LDFLAGS := -m elf_$(UTS_MACHINE)
20LDFLAGS_vmlinux := -T 21LDFLAGS_vmlinux := -T
diff --git a/arch/x86/include/asm/dma-mapping.h b/arch/x86/include/asm/dma-mapping.h
index b93405b228b4..1c3f9435f1c9 100644
--- a/arch/x86/include/asm/dma-mapping.h
+++ b/arch/x86/include/asm/dma-mapping.h
@@ -33,6 +33,8 @@ static inline struct dma_map_ops *get_dma_ops(struct device *dev)
33#endif 33#endif
34} 34}
35 35
36#include <asm-generic/dma-mapping-common.h>
37
36/* Make sure we keep the same behaviour */ 38/* Make sure we keep the same behaviour */
37static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr) 39static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
38{ 40{
@@ -53,177 +55,6 @@ extern int dma_set_mask(struct device *dev, u64 mask);
53extern void *dma_generic_alloc_coherent(struct device *dev, size_t size, 55extern void *dma_generic_alloc_coherent(struct device *dev, size_t size,
54 dma_addr_t *dma_addr, gfp_t flag); 56 dma_addr_t *dma_addr, gfp_t flag);
55 57
56static inline dma_addr_t
57dma_map_single(struct device *hwdev, void *ptr, size_t size,
58 enum dma_data_direction dir)
59{
60 struct dma_map_ops *ops = get_dma_ops(hwdev);
61 dma_addr_t addr;
62
63 BUG_ON(!valid_dma_direction(dir));
64 kmemcheck_mark_initialized(ptr, size);
65 addr = ops->map_page(hwdev, virt_to_page(ptr),
66 (unsigned long)ptr & ~PAGE_MASK, size,
67 dir, NULL);
68 debug_dma_map_page(hwdev, virt_to_page(ptr),
69 (unsigned long)ptr & ~PAGE_MASK, size,
70 dir, addr, true);
71 return addr;
72}
73
74static inline void
75dma_unmap_single(struct device *dev, dma_addr_t addr, size_t size,
76 enum dma_data_direction dir)
77{
78 struct dma_map_ops *ops = get_dma_ops(dev);
79
80 BUG_ON(!valid_dma_direction(dir));
81 if (ops->unmap_page)
82 ops->unmap_page(dev, addr, size, dir, NULL);
83 debug_dma_unmap_page(dev, addr, size, dir, true);
84}
85
86static inline int
87dma_map_sg(struct device *hwdev, struct scatterlist *sg,
88 int nents, enum dma_data_direction dir)
89{
90 struct dma_map_ops *ops = get_dma_ops(hwdev);
91 int ents;
92 struct scatterlist *s;
93 int i;
94
95 BUG_ON(!valid_dma_direction(dir));
96 for_each_sg(sg, s, nents, i)
97 kmemcheck_mark_initialized(sg_virt(s), s->length);
98 ents = ops->map_sg(hwdev, sg, nents, dir, NULL);
99 debug_dma_map_sg(hwdev, sg, nents, ents, dir);
100
101 return ents;
102}
103
104static inline void
105dma_unmap_sg(struct device *hwdev, struct scatterlist *sg, int nents,
106 enum dma_data_direction dir)
107{
108 struct dma_map_ops *ops = get_dma_ops(hwdev);
109
110 BUG_ON(!valid_dma_direction(dir));
111 debug_dma_unmap_sg(hwdev, sg, nents, dir);
112 if (ops->unmap_sg)
113 ops->unmap_sg(hwdev, sg, nents, dir, NULL);
114}
115
116static inline void
117dma_sync_single_for_cpu(struct device *hwdev, dma_addr_t dma_handle,
118 size_t size, enum dma_data_direction dir)
119{
120 struct dma_map_ops *ops = get_dma_ops(hwdev);
121
122 BUG_ON(!valid_dma_direction(dir));
123 if (ops->sync_single_for_cpu)
124 ops->sync_single_for_cpu(hwdev, dma_handle, size, dir);
125 debug_dma_sync_single_for_cpu(hwdev, dma_handle, size, dir);
126 flush_write_buffers();
127}
128
129static inline void
130dma_sync_single_for_device(struct device *hwdev, dma_addr_t dma_handle,
131 size_t size, enum dma_data_direction dir)
132{
133 struct dma_map_ops *ops = get_dma_ops(hwdev);
134
135 BUG_ON(!valid_dma_direction(dir));
136 if (ops->sync_single_for_device)
137 ops->sync_single_for_device(hwdev, dma_handle, size, dir);
138 debug_dma_sync_single_for_device(hwdev, dma_handle, size, dir);
139 flush_write_buffers();
140}
141
142static inline void
143dma_sync_single_range_for_cpu(struct device *hwdev, dma_addr_t dma_handle,
144 unsigned long offset, size_t size,
145 enum dma_data_direction dir)
146{
147 struct dma_map_ops *ops = get_dma_ops(hwdev);
148
149 BUG_ON(!valid_dma_direction(dir));
150 if (ops->sync_single_range_for_cpu)
151 ops->sync_single_range_for_cpu(hwdev, dma_handle, offset,
152 size, dir);
153 debug_dma_sync_single_range_for_cpu(hwdev, dma_handle,
154 offset, size, dir);
155 flush_write_buffers();
156}
157
158static inline void
159dma_sync_single_range_for_device(struct device *hwdev, dma_addr_t dma_handle,
160 unsigned long offset, size_t size,
161 enum dma_data_direction dir)
162{
163 struct dma_map_ops *ops = get_dma_ops(hwdev);
164
165 BUG_ON(!valid_dma_direction(dir));
166 if (ops->sync_single_range_for_device)
167 ops->sync_single_range_for_device(hwdev, dma_handle,
168 offset, size, dir);
169 debug_dma_sync_single_range_for_device(hwdev, dma_handle,
170 offset, size, dir);
171 flush_write_buffers();
172}
173
174static inline void
175dma_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sg,
176 int nelems, enum dma_data_direction dir)
177{
178 struct dma_map_ops *ops = get_dma_ops(hwdev);
179
180 BUG_ON(!valid_dma_direction(dir));
181 if (ops->sync_sg_for_cpu)
182 ops->sync_sg_for_cpu(hwdev, sg, nelems, dir);
183 debug_dma_sync_sg_for_cpu(hwdev, sg, nelems, dir);
184 flush_write_buffers();
185}
186
187static inline void
188dma_sync_sg_for_device(struct device *hwdev, struct scatterlist *sg,
189 int nelems, enum dma_data_direction dir)
190{
191 struct dma_map_ops *ops = get_dma_ops(hwdev);
192
193 BUG_ON(!valid_dma_direction(dir));
194 if (ops->sync_sg_for_device)
195 ops->sync_sg_for_device(hwdev, sg, nelems, dir);
196 debug_dma_sync_sg_for_device(hwdev, sg, nelems, dir);
197
198 flush_write_buffers();
199}
200
201static inline dma_addr_t dma_map_page(struct device *dev, struct page *page,
202 size_t offset, size_t size,
203 enum dma_data_direction dir)
204{
205 struct dma_map_ops *ops = get_dma_ops(dev);
206 dma_addr_t addr;
207
208 BUG_ON(!valid_dma_direction(dir));
209 kmemcheck_mark_initialized(page_address(page) + offset, size);
210 addr = ops->map_page(dev, page, offset, size, dir, NULL);
211 debug_dma_map_page(dev, page, offset, size, dir, addr, false);
212
213 return addr;
214}
215
216static inline void dma_unmap_page(struct device *dev, dma_addr_t addr,
217 size_t size, enum dma_data_direction dir)
218{
219 struct dma_map_ops *ops = get_dma_ops(dev);
220
221 BUG_ON(!valid_dma_direction(dir));
222 if (ops->unmap_page)
223 ops->unmap_page(dev, addr, size, dir, NULL);
224 debug_dma_unmap_page(dev, addr, size, dir, false);
225}
226
227static inline void 58static inline void
228dma_cache_sync(struct device *dev, void *vaddr, size_t size, 59dma_cache_sync(struct device *dev, void *vaddr, size_t size,
229 enum dma_data_direction dir) 60 enum dma_data_direction dir)
diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile
index f3477bb84566..6c327b852e23 100644
--- a/arch/x86/kernel/Makefile
+++ b/arch/x86/kernel/Makefile
@@ -24,6 +24,8 @@ CFLAGS_vsyscall_64.o := $(PROFILING) -g0 $(nostackp)
24CFLAGS_hpet.o := $(nostackp) 24CFLAGS_hpet.o := $(nostackp)
25CFLAGS_tsc.o := $(nostackp) 25CFLAGS_tsc.o := $(nostackp)
26CFLAGS_paravirt.o := $(nostackp) 26CFLAGS_paravirt.o := $(nostackp)
27GCOV_PROFILE_vsyscall_64.o := n
28GCOV_PROFILE_hpet.o := n
27 29
28obj-y := process_$(BITS).o signal.o entry_$(BITS).o 30obj-y := process_$(BITS).o signal.o entry_$(BITS).o
29obj-y += traps.o irq.o irq_$(BITS).o dumpstack_$(BITS).o 31obj-y += traps.o irq.o irq_$(BITS).o dumpstack_$(BITS).o
diff --git a/arch/x86/kernel/acpi/realmode/Makefile b/arch/x86/kernel/acpi/realmode/Makefile
index 167bc16ce0e5..6a564ac67ef5 100644
--- a/arch/x86/kernel/acpi/realmode/Makefile
+++ b/arch/x86/kernel/acpi/realmode/Makefile
@@ -42,6 +42,7 @@ KBUILD_CFLAGS := $(LINUXINCLUDE) -g -Os -D_SETUP -D_WAKEUP -D__KERNEL__ \
42 $(call cc-option, -mpreferred-stack-boundary=2) 42 $(call cc-option, -mpreferred-stack-boundary=2)
43KBUILD_CFLAGS += $(call cc-option, -m32) 43KBUILD_CFLAGS += $(call cc-option, -m32)
44KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__ 44KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__
45GCOV_PROFILE := n
45 46
46WAKEUP_OBJS = $(addprefix $(obj)/,$(wakeup-y)) 47WAKEUP_OBJS = $(addprefix $(obj)/,$(wakeup-y))
47 48
diff --git a/arch/x86/vdso/Makefile b/arch/x86/vdso/Makefile
index 16a9020c8f11..88112b49f02c 100644
--- a/arch/x86/vdso/Makefile
+++ b/arch/x86/vdso/Makefile
@@ -123,6 +123,7 @@ quiet_cmd_vdso = VDSO $@
123 -Wl,-T,$(filter %.lds,$^) $(filter %.o,$^) 123 -Wl,-T,$(filter %.lds,$^) $(filter %.o,$^)
124 124
125VDSO_LDFLAGS = -fPIC -shared $(call ld-option, -Wl$(comma)--hash-style=sysv) 125VDSO_LDFLAGS = -fPIC -shared $(call ld-option, -Wl$(comma)--hash-style=sysv)
126GCOV_PROFILE := n
126 127
127# 128#
128# Install the unstripped copy of vdso*.so listed in $(vdso-install-y). 129# Install the unstripped copy of vdso*.so listed in $(vdso-install-y).
diff --git a/arch/xtensa/kernel/process.c b/arch/xtensa/kernel/process.c
index 031f36685710..e1a04a346e75 100644
--- a/arch/xtensa/kernel/process.c
+++ b/arch/xtensa/kernel/process.c
@@ -331,11 +331,6 @@ long xtensa_execve(char __user *name, char __user * __user *argv,
331 if (IS_ERR(filename)) 331 if (IS_ERR(filename))
332 goto out; 332 goto out;
333 error = do_execve(filename, argv, envp, regs); 333 error = do_execve(filename, argv, envp, regs);
334 if (error == 0) {
335 task_lock(current);
336 current->ptrace &= ~PT_DTRACE;
337 task_unlock(current);
338 }
339 putname(filename); 334 putname(filename);
340out: 335out:
341 return error; 336 return error;