提交 f7b548fa 编写于 作者: L Linus Torvalds

Merge branch 'x86-fixes-for-linus' of...

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()
...@@ -273,34 +273,34 @@ do { \ ...@@ -273,34 +273,34 @@ do { \
typeof(var) pxo_new__ = (nval); \ typeof(var) pxo_new__ = (nval); \
switch (sizeof(var)) { \ switch (sizeof(var)) { \
case 1: \ case 1: \
asm("\n1:mov "__percpu_arg(1)",%%al" \ asm("\n\tmov "__percpu_arg(1)",%%al" \
"\n\tcmpxchgb %2, "__percpu_arg(1) \ "\n1:\tcmpxchgb %2, "__percpu_arg(1) \
"\n\tjnz 1b" \ "\n\tjnz 1b" \
: "=a" (pxo_ret__), "+m" (var) \ : "=&a" (pxo_ret__), "+m" (var) \
: "q" (pxo_new__) \ : "q" (pxo_new__) \
: "memory"); \ : "memory"); \
break; \ break; \
case 2: \ case 2: \
asm("\n1:mov "__percpu_arg(1)",%%ax" \ asm("\n\tmov "__percpu_arg(1)",%%ax" \
"\n\tcmpxchgw %2, "__percpu_arg(1) \ "\n1:\tcmpxchgw %2, "__percpu_arg(1) \
"\n\tjnz 1b" \ "\n\tjnz 1b" \
: "=a" (pxo_ret__), "+m" (var) \ : "=&a" (pxo_ret__), "+m" (var) \
: "r" (pxo_new__) \ : "r" (pxo_new__) \
: "memory"); \ : "memory"); \
break; \ break; \
case 4: \ case 4: \
asm("\n1:mov "__percpu_arg(1)",%%eax" \ asm("\n\tmov "__percpu_arg(1)",%%eax" \
"\n\tcmpxchgl %2, "__percpu_arg(1) \ "\n1:\tcmpxchgl %2, "__percpu_arg(1) \
"\n\tjnz 1b" \ "\n\tjnz 1b" \
: "=a" (pxo_ret__), "+m" (var) \ : "=&a" (pxo_ret__), "+m" (var) \
: "r" (pxo_new__) \ : "r" (pxo_new__) \
: "memory"); \ : "memory"); \
break; \ break; \
case 8: \ case 8: \
asm("\n1:mov "__percpu_arg(1)",%%rax" \ asm("\n\tmov "__percpu_arg(1)",%%rax" \
"\n\tcmpxchgq %2, "__percpu_arg(1) \ "\n1:\tcmpxchgq %2, "__percpu_arg(1) \
"\n\tjnz 1b" \ "\n\tjnz 1b" \
: "=a" (pxo_ret__), "+m" (var) \ : "=&a" (pxo_ret__), "+m" (var) \
: "r" (pxo_new__) \ : "r" (pxo_new__) \
: "memory"); \ : "memory"); \
break; \ break; \
......
#ifndef _ASM_X86_SYSTEM_64_H
#define _ASM_X86_SYSTEM_64_H
#include <asm/segment.h>
#include <asm/cmpxchg.h>
static inline unsigned long read_cr8(void)
{
unsigned long cr8;
asm volatile("movq %%cr8,%0" : "=r" (cr8));
return cr8;
}
static inline void write_cr8(unsigned long val)
{
asm volatile("movq %0,%%cr8" :: "r" (val) : "memory");
}
#include <linux/irqflags.h>
#endif /* _ASM_X86_SYSTEM_64_H */
...@@ -149,13 +149,13 @@ void dump_trace(struct task_struct *task, ...@@ -149,13 +149,13 @@ void dump_trace(struct task_struct *task,
unsigned used = 0; unsigned used = 0;
struct thread_info *tinfo; struct thread_info *tinfo;
int graph = 0; int graph = 0;
unsigned long dummy;
unsigned long bp; unsigned long bp;
if (!task) if (!task)
task = current; task = current;
if (!stack) { if (!stack) {
unsigned long dummy;
stack = &dummy; stack = &dummy;
if (task && task != current) if (task && task != current)
stack = (unsigned long *)task->thread.sp; stack = (unsigned long *)task->thread.sp;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册