diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-27 15:43:41 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-27 15:43:41 -0500 |
| commit | f7b548fa3d74f0db9af4fd41fbef973231d384fd (patch) | |
| tree | ef4eee8f3b293599e378e30c58903eab425ecb49 | |
| parent | 95f9354b4cd23902e0556348325366378cb5e621 (diff) | |
| parent | 889a7a6a5d5e64063effd40056bdc7b8fb336bd1 (diff) | |
Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
percpu, x86: Fix percpu_xchg_op()
x86: Remove left over system_64.h
x86-64: Don't use pointer to out-of-scope variable in dump_trace()
| -rw-r--r-- | arch/x86/include/asm/percpu.h | 24 | ||||
| -rw-r--r-- | arch/x86/include/asm/system_64.h | 22 | ||||
| -rw-r--r-- | arch/x86/kernel/dumpstack_64.c | 2 |
3 files changed, 13 insertions, 35 deletions
diff --git a/arch/x86/include/asm/percpu.h b/arch/x86/include/asm/percpu.h index 3788f4649db4..7e172955ee57 100644 --- a/arch/x86/include/asm/percpu.h +++ b/arch/x86/include/asm/percpu.h | |||
| @@ -273,34 +273,34 @@ do { \ | |||
| 273 | typeof(var) pxo_new__ = (nval); \ | 273 | typeof(var) pxo_new__ = (nval); \ |
| 274 | switch (sizeof(var)) { \ | 274 | switch (sizeof(var)) { \ |
| 275 | case 1: \ | 275 | case 1: \ |
| 276 | asm("\n1:mov "__percpu_arg(1)",%%al" \ | 276 | asm("\n\tmov "__percpu_arg(1)",%%al" \ |
| 277 | "\n\tcmpxchgb %2, "__percpu_arg(1) \ | 277 | "\n1:\tcmpxchgb %2, "__percpu_arg(1) \ |
| 278 | "\n\tjnz 1b" \ | 278 | "\n\tjnz 1b" \ |
| 279 | : "=a" (pxo_ret__), "+m" (var) \ | 279 | : "=&a" (pxo_ret__), "+m" (var) \ |
| 280 | : "q" (pxo_new__) \ | 280 | : "q" (pxo_new__) \ |
| 281 | : "memory"); \ | 281 | : "memory"); \ |
| 282 | break; \ | 282 | break; \ |
| 283 | case 2: \ | 283 | case 2: \ |
| 284 | asm("\n1:mov "__percpu_arg(1)",%%ax" \ | 284 | asm("\n\tmov "__percpu_arg(1)",%%ax" \ |
| 285 | "\n\tcmpxchgw %2, "__percpu_arg(1) \ | 285 | "\n1:\tcmpxchgw %2, "__percpu_arg(1) \ |
| 286 | "\n\tjnz 1b" \ | 286 | "\n\tjnz 1b" \ |
| 287 | : "=a" (pxo_ret__), "+m" (var) \ | 287 | : "=&a" (pxo_ret__), "+m" (var) \ |
| 288 | : "r" (pxo_new__) \ | 288 | : "r" (pxo_new__) \ |
| 289 | : "memory"); \ | 289 | : "memory"); \ |
| 290 | break; \ | 290 | break; \ |
| 291 | case 4: \ | 291 | case 4: \ |
| 292 | asm("\n1:mov "__percpu_arg(1)",%%eax" \ | 292 | asm("\n\tmov "__percpu_arg(1)",%%eax" \ |
| 293 | "\n\tcmpxchgl %2, "__percpu_arg(1) \ | 293 | "\n1:\tcmpxchgl %2, "__percpu_arg(1) \ |
| 294 | "\n\tjnz 1b" \ | 294 | "\n\tjnz 1b" \ |
| 295 | : "=a" (pxo_ret__), "+m" (var) \ | 295 | : "=&a" (pxo_ret__), "+m" (var) \ |
| 296 | : "r" (pxo_new__) \ | 296 | : "r" (pxo_new__) \ |
| 297 | : "memory"); \ | 297 | : "memory"); \ |
| 298 | break; \ | 298 | break; \ |
| 299 | case 8: \ | 299 | case 8: \ |
| 300 | asm("\n1:mov "__percpu_arg(1)",%%rax" \ | 300 | asm("\n\tmov "__percpu_arg(1)",%%rax" \ |
| 301 | "\n\tcmpxchgq %2, "__percpu_arg(1) \ | 301 | "\n1:\tcmpxchgq %2, "__percpu_arg(1) \ |
| 302 | "\n\tjnz 1b" \ | 302 | "\n\tjnz 1b" \ |
| 303 | : "=a" (pxo_ret__), "+m" (var) \ | 303 | : "=&a" (pxo_ret__), "+m" (var) \ |
| 304 | : "r" (pxo_new__) \ | 304 | : "r" (pxo_new__) \ |
| 305 | : "memory"); \ | 305 | : "memory"); \ |
| 306 | break; \ | 306 | break; \ |
diff --git a/arch/x86/include/asm/system_64.h b/arch/x86/include/asm/system_64.h deleted file mode 100644 index 1159e091ad09..000000000000 --- a/arch/x86/include/asm/system_64.h +++ /dev/null | |||
| @@ -1,22 +0,0 @@ | |||
| 1 | #ifndef _ASM_X86_SYSTEM_64_H | ||
| 2 | #define _ASM_X86_SYSTEM_64_H | ||
| 3 | |||
| 4 | #include <asm/segment.h> | ||
| 5 | #include <asm/cmpxchg.h> | ||
| 6 | |||
| 7 | |||
| 8 | static inline unsigned long read_cr8(void) | ||
| 9 | { | ||
| 10 | unsigned long cr8; | ||
| 11 | asm volatile("movq %%cr8,%0" : "=r" (cr8)); | ||
| 12 | return cr8; | ||
| 13 | } | ||
| 14 | |||
| 15 | static inline void write_cr8(unsigned long val) | ||
| 16 | { | ||
| 17 | asm volatile("movq %0,%%cr8" :: "r" (val) : "memory"); | ||
| 18 | } | ||
| 19 | |||
| 20 | #include <linux/irqflags.h> | ||
| 21 | |||
| 22 | #endif /* _ASM_X86_SYSTEM_64_H */ | ||
diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c index 64101335de19..a6b6fcf7f0ae 100644 --- a/arch/x86/kernel/dumpstack_64.c +++ b/arch/x86/kernel/dumpstack_64.c | |||
| @@ -149,13 +149,13 @@ void dump_trace(struct task_struct *task, | |||
| 149 | unsigned used = 0; | 149 | unsigned used = 0; |
| 150 | struct thread_info *tinfo; | 150 | struct thread_info *tinfo; |
| 151 | int graph = 0; | 151 | int graph = 0; |
| 152 | unsigned long dummy; | ||
| 152 | unsigned long bp; | 153 | unsigned long bp; |
| 153 | 154 | ||
| 154 | if (!task) | 155 | if (!task) |
| 155 | task = current; | 156 | task = current; |
| 156 | 157 | ||
| 157 | if (!stack) { | 158 | if (!stack) { |
| 158 | unsigned long dummy; | ||
| 159 | stack = &dummy; | 159 | stack = &dummy; |
| 160 | if (task && task != current) | 160 | if (task && task != current) |
| 161 | stack = (unsigned long *)task->thread.sp; | 161 | stack = (unsigned long *)task->thread.sp; |
