提交 ecd02ddd 编写于 作者: R Roland McGrath 提交者: Linus Torvalds

[PATCH] i386: Use loaddebug macro consistently

This moves the macro loaddebug from asm-i386/suspend.h to
asm-i386/processor.h, which is the place that makes sense for it to be
defined, removes the extra copy of the same macro in
arch/i386/kernel/process.c, and makes arch/i386/kernel/signal.c use the
macro in place of its expansion.

This is a purely cosmetic cleanup for the normal i386 kernel.  However, it
is handy for Xen to be able to just redefine the loaddebug macro once
instead of also changing the signal.c code.
Signed-off-by: NRoland McGrath <roland@redhat.com>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 b0a70b57
...@@ -558,13 +558,6 @@ handle_io_bitmap(struct thread_struct *next, struct tss_struct *tss) ...@@ -558,13 +558,6 @@ handle_io_bitmap(struct thread_struct *next, struct tss_struct *tss)
*/ */
tss->io_bitmap_base = INVALID_IO_BITMAP_OFFSET_LAZY; tss->io_bitmap_base = INVALID_IO_BITMAP_OFFSET_LAZY;
} }
/*
* This special macro can be used to load a debugging register
*/
#define loaddebug(thread,register) \
__asm__("movl %0,%%db" #register \
: /* no output */ \
:"r" (thread->debugreg[register]))
/* /*
* switch_to(x,yn) should switch tasks from x to y. * switch_to(x,yn) should switch tasks from x to y.
......
...@@ -618,7 +618,7 @@ int fastcall do_signal(struct pt_regs *regs, sigset_t *oldset) ...@@ -618,7 +618,7 @@ int fastcall do_signal(struct pt_regs *regs, sigset_t *oldset)
* inside the kernel. * inside the kernel.
*/ */
if (unlikely(current->thread.debugreg[7])) { if (unlikely(current->thread.debugreg[7])) {
__asm__("movl %0,%%db7" : : "r" (current->thread.debugreg[7])); loaddebug(&current->thread, 7);
} }
/* Whee! Actually deliver the signal. */ /* Whee! Actually deliver the signal. */
......
...@@ -499,6 +499,14 @@ static inline void load_esp0(struct tss_struct *tss, struct thread_struct *threa ...@@ -499,6 +499,14 @@ static inline void load_esp0(struct tss_struct *tss, struct thread_struct *threa
regs->esp = new_esp; \ regs->esp = new_esp; \
} while (0) } while (0)
/*
* This special macro can be used to load a debugging register
*/
#define loaddebug(thread,register) \
__asm__("movl %0,%%db" #register \
: /* no output */ \
:"r" ((thread)->debugreg[register]))
/* Forward declaration, a strange C thing */ /* Forward declaration, a strange C thing */
struct task_struct; struct task_struct;
struct mm_struct; struct mm_struct;
......
...@@ -36,11 +36,6 @@ struct saved_context { ...@@ -36,11 +36,6 @@ struct saved_context {
unsigned long return_address; unsigned long return_address;
} __attribute__((packed)); } __attribute__((packed));
#define loaddebug(thread,register) \
__asm__("movl %0,%%db" #register \
: /* no output */ \
:"r" ((thread)->debugreg[register]))
#ifdef CONFIG_ACPI_SLEEP #ifdef CONFIG_ACPI_SLEEP
extern unsigned long saved_eip; extern unsigned long saved_eip;
extern unsigned long saved_esp; extern unsigned long saved_esp;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册