* [PATCH 0/4] traps: x86: more unification
@ 2008-09-30 16:41 Alexander van Heukelum
2008-09-30 16:41 ` [PATCH 1/4] traps: x86_64: split out math_error and simd_math_error Alexander van Heukelum
` (2 more replies)
0 siblings, 3 replies; 12+ messages in thread
From: Alexander van Heukelum @ 2008-09-30 16:41 UTC (permalink / raw)
To: Ingo Molnar, LKML, Yinghai Lu; +Cc: Alexander van Heukelum
Hi Ingo,
Here are some more unification patches for traps_xx.c. They
are against the current x86/traps branch in the tip tree and
work fine for my miniconfigs.
The branch does not at the moment compile a defconfig kernel,
due to a missing PCI_DEVICE_ID_AMD_10H_NB_MISC define, however.
Moreover, a defconfig won't run :-/ (on qemu-system-x86_64).
Bisection pointed to commit 10a434fcb "x86: remove cpu_vendor_dev".
The kernel crashes early with a general protection fault in a call
to strnlen. I have no idea what goes wrong, yet.
Greetings,
Alexander
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/4] traps: x86_64: split out math_error and simd_math_error
2008-09-30 16:41 [PATCH 0/4] traps: x86: more unification Alexander van Heukelum
@ 2008-09-30 16:41 ` Alexander van Heukelum
2008-09-30 16:41 ` [PATCH 2/4] traps: i386: factor out lazy io-bitmap copy Alexander van Heukelum
2008-09-30 19:37 ` [PATCH] fix: x86: remove cpu_vendor_dev Alexander van Heukelum
2008-10-01 7:06 ` [PATCH 0/4] traps: x86: more unification Ingo Molnar
2 siblings, 1 reply; 12+ messages in thread
From: Alexander van Heukelum @ 2008-09-30 16:41 UTC (permalink / raw)
To: Ingo Molnar, LKML, Yinghai Lu; +Cc: Alexander van Heukelum
Split out math_error from do_coprocessor_error and simd_math_error
from do_simd_coprocessor_error, like on i386. While at it, add the
"error_code" parameter to do_coprocessor_error, do_simd_coprocessor_error
and do_spurious_interrupt_bug. This does not change the generated
code, but brings the declarations in line with all the other trap
handlers.
Signed-off-by: Alexander van Heukelum <heukelum@fastmail.fm>
---
arch/x86/kernel/traps_64.c | 36 +++++++++++++++++++++---------------
include/asm-x86/traps.h | 6 +++---
2 files changed, 24 insertions(+), 18 deletions(-)
diff --git a/arch/x86/kernel/traps_64.c b/arch/x86/kernel/traps_64.c
index 8ab8f81..201f98d 100644
--- a/arch/x86/kernel/traps_64.c
+++ b/arch/x86/kernel/traps_64.c
@@ -457,18 +457,12 @@ static int kernel_math_error(struct pt_regs *regs, const char *str, int trapnr)
* the correct behaviour even in the presence of the asynchronous
* IRQ13 behaviour
*/
-asmlinkage void do_coprocessor_error(struct pt_regs *regs)
+void math_error(void __user *ip)
{
- void __user *ip = (void __user *)(regs->ip);
struct task_struct *task;
siginfo_t info;
unsigned short cwd, swd;
- conditional_sti(regs);
- if (!user_mode(regs) &&
- kernel_math_error(regs, "kernel x87 math error", 16))
- return;
-
/*
* Save the info for the exception handler and clear the error.
*/
@@ -521,23 +515,26 @@ asmlinkage void do_coprocessor_error(struct pt_regs *regs)
force_sig_info(SIGFPE, &info, task);
}
+asmlinkage void do_coprocessor_error(struct pt_regs *regs, long error_code)
+{
+ conditional_sti(regs);
+ if (!user_mode(regs) &&
+ kernel_math_error(regs, "kernel x87 math error", 16))
+ return;
+ math_error((void __user *)regs->ip);
+}
+
asmlinkage void bad_intr(void)
{
printk("bad interrupt");
}
-asmlinkage void do_simd_coprocessor_error(struct pt_regs *regs)
+static void simd_math_error(void __user *ip)
{
- void __user *ip = (void __user *)(regs->ip);
struct task_struct *task;
siginfo_t info;
unsigned short mxcsr;
- conditional_sti(regs);
- if (!user_mode(regs) &&
- kernel_math_error(regs, "kernel simd math error", 19))
- return;
-
/*
* Save the info for the exception handler and clear the error.
*/
@@ -580,7 +577,16 @@ asmlinkage void do_simd_coprocessor_error(struct pt_regs *regs)
force_sig_info(SIGFPE, &info, task);
}
-asmlinkage void do_spurious_interrupt_bug(struct pt_regs *regs)
+asmlinkage void do_simd_coprocessor_error(struct pt_regs *regs, long error_code)
+{
+ conditional_sti(regs);
+ if (!user_mode(regs) &&
+ kernel_math_error(regs, "kernel simd math error", 19))
+ return;
+ simd_math_error((void __user *)regs->ip);
+}
+
+asmlinkage void do_spurious_interrupt_bug(struct pt_regs *regs, long error_code)
{
}
diff --git a/include/asm-x86/traps.h b/include/asm-x86/traps.h
index 7a692ba..c82c39c 100644
--- a/include/asm-x86/traps.h
+++ b/include/asm-x86/traps.h
@@ -72,9 +72,9 @@ asmlinkage void double_fault(void);
asmlinkage void do_int3(struct pt_regs *, long);
asmlinkage void do_stack_segment(struct pt_regs *, long);
asmlinkage void do_debug(struct pt_regs *, unsigned long);
-asmlinkage void do_coprocessor_error(struct pt_regs *);
-asmlinkage void do_simd_coprocessor_error(struct pt_regs *);
-asmlinkage void do_spurious_interrupt_bug(struct pt_regs *);
+asmlinkage void do_coprocessor_error(struct pt_regs *, long);
+asmlinkage void do_simd_coprocessor_error(struct pt_regs *, long);
+asmlinkage void do_spurious_interrupt_bug(struct pt_regs *, long);
asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code);
--
1.5.4.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/4] traps: i386: factor out lazy io-bitmap copy
2008-09-30 16:41 ` [PATCH 1/4] traps: x86_64: split out math_error and simd_math_error Alexander van Heukelum
@ 2008-09-30 16:41 ` Alexander van Heukelum
2008-09-30 16:41 ` [PATCH 3/4] traps: x86: introduce dotraplinkage Alexander van Heukelum
0 siblings, 1 reply; 12+ messages in thread
From: Alexander van Heukelum @ 2008-09-30 16:41 UTC (permalink / raw)
To: Ingo Molnar, LKML, Yinghai Lu; +Cc: Alexander van Heukelum
x86_64 does not do the lazy io-bitmap dance. Putting it in
its own function makes i386's do_general_protection look
much more like x86_64's.
Signed-off-by: Alexander van Heukelum <heukelum@fastmail.fm>
---
arch/x86/kernel/traps_32.c | 76 +++++++++++++++++++++++++-------------------
1 files changed, 43 insertions(+), 33 deletions(-)
diff --git a/arch/x86/kernel/traps_32.c b/arch/x86/kernel/traps_32.c
index dd183a2..78113d3 100644
--- a/arch/x86/kernel/traps_32.c
+++ b/arch/x86/kernel/traps_32.c
@@ -96,6 +96,47 @@ die_if_kernel(const char *str, struct pt_regs *regs, long err)
die(str, regs, err);
}
+/*
+ * Perform the lazy TSS's I/O bitmap copy. If the TSS has an
+ * invalid offset set (the LAZY one) and the faulting thread has
+ * a valid I/O bitmap pointer, we copy the I/O bitmap in the TSS,
+ * we set the offset field correctly and return 1.
+ */
+static int lazy_iobitmap_copy(void)
+{
+ struct thread_struct *thread;
+ struct tss_struct *tss;
+ int cpu;
+
+ cpu = get_cpu();
+ tss = &per_cpu(init_tss, cpu);
+ thread = ¤t->thread;
+
+ if (tss->x86_tss.io_bitmap_base == INVALID_IO_BITMAP_OFFSET_LAZY &&
+ thread->io_bitmap_ptr) {
+ memcpy(tss->io_bitmap, thread->io_bitmap_ptr,
+ thread->io_bitmap_max);
+ /*
+ * If the previously set map was extending to higher ports
+ * than the current one, pad extra space with 0xff (no access).
+ */
+ if (thread->io_bitmap_max < tss->io_bitmap_max) {
+ memset((char *) tss->io_bitmap +
+ thread->io_bitmap_max, 0xff,
+ tss->io_bitmap_max - thread->io_bitmap_max);
+ }
+ tss->io_bitmap_max = thread->io_bitmap_max;
+ tss->x86_tss.io_bitmap_base = IO_BITMAP_OFFSET;
+ tss->io_bitmap_owner = thread;
+ put_cpu();
+
+ return 1;
+ }
+ put_cpu();
+
+ return 0;
+}
+
static void __kprobes
do_trap(int trapnr, int signr, char *str, struct pt_regs *regs,
long error_code, siginfo_t *info)
@@ -188,44 +229,13 @@ void __kprobes
do_general_protection(struct pt_regs *regs, long error_code)
{
struct task_struct *tsk;
- struct thread_struct *thread;
- struct tss_struct *tss;
- int cpu;
conditional_sti(regs);
- cpu = get_cpu();
- tss = &per_cpu(init_tss, cpu);
- thread = ¤t->thread;
-
- /*
- * Perform the lazy TSS's I/O bitmap copy. If the TSS has an
- * invalid offset set (the LAZY one) and the faulting thread has
- * a valid I/O bitmap pointer, we copy the I/O bitmap in the TSS
- * and we set the offset field correctly. Then we let the CPU to
- * restart the faulting instruction.
- */
- if (tss->x86_tss.io_bitmap_base == INVALID_IO_BITMAP_OFFSET_LAZY &&
- thread->io_bitmap_ptr) {
- memcpy(tss->io_bitmap, thread->io_bitmap_ptr,
- thread->io_bitmap_max);
- /*
- * If the previously set map was extending to higher ports
- * than the current one, pad extra space with 0xff (no access).
- */
- if (thread->io_bitmap_max < tss->io_bitmap_max) {
- memset((char *) tss->io_bitmap +
- thread->io_bitmap_max, 0xff,
- tss->io_bitmap_max - thread->io_bitmap_max);
- }
- tss->io_bitmap_max = thread->io_bitmap_max;
- tss->x86_tss.io_bitmap_base = IO_BITMAP_OFFSET;
- tss->io_bitmap_owner = thread;
- put_cpu();
-
+ if (lazy_iobitmap_copy()) {
+ /* restart the faulting instruction */
return;
}
- put_cpu();
if (regs->flags & X86_VM_MASK)
goto gp_in_vm86;
--
1.5.4.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/4] traps: x86: introduce dotraplinkage
2008-09-30 16:41 ` [PATCH 2/4] traps: i386: factor out lazy io-bitmap copy Alexander van Heukelum
@ 2008-09-30 16:41 ` Alexander van Heukelum
2008-09-30 16:41 ` [PATCH 4/4] traps: x86: converge do_debug handlers Alexander van Heukelum
0 siblings, 1 reply; 12+ messages in thread
From: Alexander van Heukelum @ 2008-09-30 16:41 UTC (permalink / raw)
To: Ingo Molnar, LKML, Yinghai Lu; +Cc: Alexander van Heukelum
Mark the exception handlers with "dotraplinkage" to hide the
calling convention differences between i386 and x86_64.
Signed-off-by: Alexander van Heukelum <heukelum@fastmail.fm>
---
arch/x86/kernel/entry_64.S | 2 +-
arch/x86/kernel/traps_32.c | 28 +++++++++-------
arch/x86/kernel/traps_64.c | 31 +++++++++++-------
include/asm-x86/traps.h | 73 +++++++++++++++++++++----------------------
4 files changed, 72 insertions(+), 62 deletions(-)
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index 1924659..291dd21 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -1266,7 +1266,7 @@ ENTRY(simd_coprocessor_error)
END(simd_coprocessor_error)
ENTRY(device_not_available)
- zeroentry math_state_restore
+ zeroentry do_device_not_available
END(device_not_available)
/* runs on exception stack */
diff --git a/arch/x86/kernel/traps_32.c b/arch/x86/kernel/traps_32.c
index 78113d3..6ecc1b7 100644
--- a/arch/x86/kernel/traps_32.c
+++ b/arch/x86/kernel/traps_32.c
@@ -191,7 +191,7 @@ vm86_trap:
}
#define DO_ERROR(trapnr, signr, str, name) \
-void do_##name(struct pt_regs *regs, long error_code) \
+dotraplinkage void do_##name(struct pt_regs *regs, long error_code) \
{ \
if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) \
== NOTIFY_STOP) \
@@ -201,7 +201,7 @@ void do_##name(struct pt_regs *regs, long error_code) \
}
#define DO_ERROR_INFO(trapnr, signr, str, name, sicode, siaddr) \
-void do_##name(struct pt_regs *regs, long error_code) \
+dotraplinkage void do_##name(struct pt_regs *regs, long error_code) \
{ \
siginfo_t info; \
info.si_signo = signr; \
@@ -225,7 +225,7 @@ DO_ERROR(11, SIGBUS, "segment not present", segment_not_present)
DO_ERROR(12, SIGBUS, "stack segment", stack_segment)
DO_ERROR_INFO(17, SIGBUS, "alignment check", alignment_check, BUS_ADRALN, 0)
-void __kprobes
+dotraplinkage void __kprobes
do_general_protection(struct pt_regs *regs, long error_code)
{
struct task_struct *tsk;
@@ -429,7 +429,8 @@ static notrace __kprobes void default_do_nmi(struct pt_regs *regs)
reassert_nmi();
}
-notrace __kprobes void do_nmi(struct pt_regs *regs, long error_code)
+dotraplinkage notrace __kprobes void
+do_nmi(struct pt_regs *regs, long error_code)
{
int cpu;
@@ -457,7 +458,7 @@ void restart_nmi(void)
acpi_nmi_enable();
}
-void __kprobes do_int3(struct pt_regs *regs, long error_code)
+dotraplinkage void __kprobes do_int3(struct pt_regs *regs, long error_code)
{
#ifdef CONFIG_KPROBES
if (notify_die(DIE_INT3, "int3", regs, error_code, 3, SIGTRAP)
@@ -495,7 +496,7 @@ void __kprobes do_int3(struct pt_regs *regs, long error_code)
* find every occurrence of the TF bit that could be saved away even
* by user code)
*/
-void __kprobes do_debug(struct pt_regs *regs, long error_code)
+dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code)
{
struct task_struct *tsk = current;
unsigned int condition;
@@ -632,7 +633,7 @@ void math_error(void __user *ip)
force_sig_info(SIGFPE, &info, task);
}
-void do_coprocessor_error(struct pt_regs *regs, long error_code)
+dotraplinkage void do_coprocessor_error(struct pt_regs *regs, long error_code)
{
conditional_sti(regs);
ignore_fpu_irq = 1;
@@ -687,7 +688,8 @@ static void simd_math_error(void __user *ip)
force_sig_info(SIGFPE, &info, task);
}
-void do_simd_coprocessor_error(struct pt_regs *regs, long error_code)
+dotraplinkage void
+do_simd_coprocessor_error(struct pt_regs *regs, long error_code)
{
conditional_sti(regs);
@@ -711,7 +713,8 @@ void do_simd_coprocessor_error(struct pt_regs *regs, long error_code)
force_sig(SIGSEGV, current);
}
-void do_spurious_interrupt_bug(struct pt_regs *regs, long error_code)
+dotraplinkage void
+do_spurious_interrupt_bug(struct pt_regs *regs, long error_code)
{
conditional_sti(regs);
#if 0
@@ -789,7 +792,8 @@ asmlinkage void math_emulate(long arg)
#endif /* CONFIG_MATH_EMULATION */
-void __kprobes do_device_not_available(struct pt_regs *regs, long error)
+dotraplinkage void __kprobes
+do_device_not_available(struct pt_regs *regs, long error)
{
if (read_cr0() & X86_CR0_EM) {
conditional_sti(regs);
@@ -801,14 +805,14 @@ void __kprobes do_device_not_available(struct pt_regs *regs, long error)
}
#ifdef CONFIG_X86_MCE
-void __kprobes do_machine_check(struct pt_regs *regs, long error)
+dotraplinkage void __kprobes do_machine_check(struct pt_regs *regs, long error)
{
conditional_sti(regs);
machine_check_vector(regs, error);
}
#endif
-void do_iret_error(struct pt_regs *regs, long error_code)
+dotraplinkage void do_iret_error(struct pt_regs *regs, long error_code)
{
siginfo_t info;
local_irq_enable();
diff --git a/arch/x86/kernel/traps_64.c b/arch/x86/kernel/traps_64.c
index 201f98d..d4e02c1 100644
--- a/arch/x86/kernel/traps_64.c
+++ b/arch/x86/kernel/traps_64.c
@@ -126,7 +126,7 @@ kernel_trap:
}
#define DO_ERROR(trapnr, signr, str, name) \
-asmlinkage void do_##name(struct pt_regs *regs, long error_code) \
+dotraplinkage void do_##name(struct pt_regs *regs, long error_code) \
{ \
if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) \
== NOTIFY_STOP) \
@@ -136,7 +136,7 @@ asmlinkage void do_##name(struct pt_regs *regs, long error_code) \
}
#define DO_ERROR_INFO(trapnr, signr, str, name, sicode, siaddr) \
-asmlinkage void do_##name(struct pt_regs *regs, long error_code) \
+dotraplinkage void do_##name(struct pt_regs *regs, long error_code) \
{ \
siginfo_t info; \
info.si_signo = signr; \
@@ -160,7 +160,7 @@ DO_ERROR(11, SIGBUS, "segment not present", segment_not_present)
DO_ERROR_INFO(17, SIGBUS, "alignment check", alignment_check, BUS_ADRALN, 0)
/* Runs on IST stack */
-asmlinkage void do_stack_segment(struct pt_regs *regs, long error_code)
+dotraplinkage void do_stack_segment(struct pt_regs *regs, long error_code)
{
if (notify_die(DIE_TRAP, "stack segment", regs, error_code,
12, SIGBUS) == NOTIFY_STOP)
@@ -170,7 +170,7 @@ asmlinkage void do_stack_segment(struct pt_regs *regs, long error_code)
preempt_conditional_cli(regs);
}
-asmlinkage void do_double_fault(struct pt_regs *regs, long error_code)
+dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code)
{
static const char str[] = "double fault";
struct task_struct *tsk = current;
@@ -187,7 +187,7 @@ asmlinkage void do_double_fault(struct pt_regs *regs, long error_code)
die(str, regs, error_code);
}
-asmlinkage void __kprobes
+dotraplinkage void __kprobes
do_general_protection(struct pt_regs *regs, long error_code)
{
struct task_struct *tsk;
@@ -318,7 +318,7 @@ asmlinkage notrace __kprobes void default_do_nmi(struct pt_regs *regs)
io_check_error(reason, regs);
}
-asmlinkage notrace __kprobes void
+dotraplinkage notrace __kprobes void
do_nmi(struct pt_regs *regs, long error_code)
{
nmi_enter();
@@ -344,7 +344,7 @@ void restart_nmi(void)
}
/* runs on IST stack. */
-asmlinkage void __kprobes do_int3(struct pt_regs *regs, long error_code)
+dotraplinkage void __kprobes do_int3(struct pt_regs *regs, long error_code)
{
if (notify_die(DIE_INT3, "int3", regs, error_code, 3, SIGTRAP)
== NOTIFY_STOP)
@@ -377,8 +377,7 @@ asmlinkage __kprobes struct pt_regs *sync_regs(struct pt_regs *eregs)
}
/* runs on IST stack. */
-asmlinkage void __kprobes do_debug(struct pt_regs *regs,
- unsigned long error_code)
+dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code)
{
struct task_struct *tsk = current;
unsigned long condition;
@@ -515,7 +514,7 @@ void math_error(void __user *ip)
force_sig_info(SIGFPE, &info, task);
}
-asmlinkage void do_coprocessor_error(struct pt_regs *regs, long error_code)
+dotraplinkage void do_coprocessor_error(struct pt_regs *regs, long error_code)
{
conditional_sti(regs);
if (!user_mode(regs) &&
@@ -577,7 +576,8 @@ static void simd_math_error(void __user *ip)
force_sig_info(SIGFPE, &info, task);
}
-asmlinkage void do_simd_coprocessor_error(struct pt_regs *regs, long error_code)
+dotraplinkage void
+do_simd_coprocessor_error(struct pt_regs *regs, long error_code)
{
conditional_sti(regs);
if (!user_mode(regs) &&
@@ -586,7 +586,8 @@ asmlinkage void do_simd_coprocessor_error(struct pt_regs *regs, long error_code)
simd_math_error((void __user *)regs->ip);
}
-asmlinkage void do_spurious_interrupt_bug(struct pt_regs *regs, long error_code)
+dotraplinkage void
+do_spurious_interrupt_bug(struct pt_regs *regs, long error_code)
{
}
@@ -638,6 +639,12 @@ asmlinkage void math_state_restore(void)
}
EXPORT_SYMBOL_GPL(math_state_restore);
+dotraplinkage void __kprobes
+do_device_not_available(struct pt_regs *regs, long error)
+{
+ math_state_restore();
+}
+
void __init trap_init(void)
{
set_intr_gate(0, ÷_error);
diff --git a/include/asm-x86/traps.h b/include/asm-x86/traps.h
index c82c39c..6c3dc2c 100644
--- a/include/asm-x86/traps.h
+++ b/include/asm-x86/traps.h
@@ -3,7 +3,12 @@
#include <asm/debugreg.h>
-/* Common in X86_32 and X86_64 */
+#ifdef CONFIG_X86_32
+#define dotraplinkage
+#else
+#define dotraplinkage asmlinkage
+#endif
+
asmlinkage void divide_error(void);
asmlinkage void debug(void);
asmlinkage void nmi(void);
@@ -12,31 +17,47 @@ asmlinkage void overflow(void);
asmlinkage void bounds(void);
asmlinkage void invalid_op(void);
asmlinkage void device_not_available(void);
+#ifdef CONFIG_X86_64
+asmlinkage void double_fault(void);
+#endif
asmlinkage void coprocessor_segment_overrun(void);
asmlinkage void invalid_TSS(void);
asmlinkage void segment_not_present(void);
asmlinkage void stack_segment(void);
asmlinkage void general_protection(void);
asmlinkage void page_fault(void);
+asmlinkage void spurious_interrupt_bug(void);
asmlinkage void coprocessor_error(void);
-asmlinkage void simd_coprocessor_error(void);
asmlinkage void alignment_check(void);
-asmlinkage void spurious_interrupt_bug(void);
#ifdef CONFIG_X86_MCE
asmlinkage void machine_check(void);
#endif /* CONFIG_X86_MCE */
+asmlinkage void simd_coprocessor_error(void);
-void do_divide_error(struct pt_regs *, long);
-void do_overflow(struct pt_regs *, long);
-void do_bounds(struct pt_regs *, long);
-void do_coprocessor_segment_overrun(struct pt_regs *, long);
-void do_invalid_TSS(struct pt_regs *, long);
-void do_segment_not_present(struct pt_regs *, long);
-void do_stack_segment(struct pt_regs *, long);
-void do_alignment_check(struct pt_regs *, long);
-void do_invalid_op(struct pt_regs *, long);
-void do_general_protection(struct pt_regs *, long);
-void do_nmi(struct pt_regs *, long);
+dotraplinkage void do_divide_error(struct pt_regs *, long);
+dotraplinkage void do_debug(struct pt_regs *, long);
+dotraplinkage void do_nmi(struct pt_regs *, long);
+dotraplinkage void do_int3(struct pt_regs *, long);
+dotraplinkage void do_overflow(struct pt_regs *, long);
+dotraplinkage void do_bounds(struct pt_regs *, long);
+dotraplinkage void do_invalid_op(struct pt_regs *, long);
+dotraplinkage void do_device_not_available(struct pt_regs *, long);
+dotraplinkage void do_coprocessor_segment_overrun(struct pt_regs *, long);
+dotraplinkage void do_invalid_TSS(struct pt_regs *, long);
+dotraplinkage void do_segment_not_present(struct pt_regs *, long);
+dotraplinkage void do_stack_segment(struct pt_regs *, long);
+dotraplinkage void do_general_protection(struct pt_regs *, long);
+dotraplinkage void do_page_fault(struct pt_regs *, unsigned long);
+dotraplinkage void do_spurious_interrupt_bug(struct pt_regs *, long);
+dotraplinkage void do_coprocessor_error(struct pt_regs *, long);
+dotraplinkage void do_alignment_check(struct pt_regs *, long);
+#ifdef CONFIG_X86_MCE
+dotraplinkage void do_machine_check(struct pt_regs *, long);
+#endif
+dotraplinkage void do_simd_coprocessor_error(struct pt_regs *, long);
+#ifdef CONFIG_X86_32
+dotraplinkage void do_iret_error(struct pt_regs *, long);
+#endif
static inline int get_si_code(unsigned long condition)
{
@@ -52,31 +73,9 @@ extern int panic_on_unrecovered_nmi;
extern int kstack_depth_to_print;
#ifdef CONFIG_X86_32
-
-void do_iret_error(struct pt_regs *, long);
-void do_int3(struct pt_regs *, long);
-void do_debug(struct pt_regs *, long);
void math_error(void __user *);
-void do_coprocessor_error(struct pt_regs *, long);
-void do_simd_coprocessor_error(struct pt_regs *, long);
-void do_spurious_interrupt_bug(struct pt_regs *, long);
unsigned long patch_espfix_desc(unsigned long, unsigned long);
asmlinkage void math_emulate(long);
+#endif
-void do_page_fault(struct pt_regs *regs, unsigned long error_code);
-
-#else /* CONFIG_X86_32 */
-
-asmlinkage void double_fault(void);
-
-asmlinkage void do_int3(struct pt_regs *, long);
-asmlinkage void do_stack_segment(struct pt_regs *, long);
-asmlinkage void do_debug(struct pt_regs *, unsigned long);
-asmlinkage void do_coprocessor_error(struct pt_regs *, long);
-asmlinkage void do_simd_coprocessor_error(struct pt_regs *, long);
-asmlinkage void do_spurious_interrupt_bug(struct pt_regs *, long);
-
-asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code);
-
-#endif /* CONFIG_X86_32 */
#endif /* ASM_X86__TRAPS_H */
--
1.5.4.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 4/4] traps: x86: converge do_debug handlers
2008-09-30 16:41 ` [PATCH 3/4] traps: x86: introduce dotraplinkage Alexander van Heukelum
@ 2008-09-30 16:41 ` Alexander van Heukelum
0 siblings, 0 replies; 12+ messages in thread
From: Alexander van Heukelum @ 2008-09-30 16:41 UTC (permalink / raw)
To: Ingo Molnar, LKML, Yinghai Lu; +Cc: Alexander van Heukelum
Make the x86_64-version and the i386-version of do_debug
more similar.
- introduce preempt_conditional_sti/cli to i386. The preempt-count
is now elevated during the trap handler, like on x86_64. It
does not run on a separate stack, however.
- replace an open-coded "send_sigtrap"
- copy some comments
Signed-off-by: Alexander van Heukelum <heukelum@fastmail.fm>
---
arch/x86/kernel/traps_32.c | 30 +++++++++++++++++++++---------
arch/x86/kernel/traps_64.c | 17 +++++++++--------
include/asm-x86/ptrace.h | 4 ----
3 files changed, 30 insertions(+), 21 deletions(-)
diff --git a/arch/x86/kernel/traps_32.c b/arch/x86/kernel/traps_32.c
index 6ecc1b7..da97cd2 100644
--- a/arch/x86/kernel/traps_32.c
+++ b/arch/x86/kernel/traps_32.c
@@ -89,6 +89,20 @@ static inline void conditional_sti(struct pt_regs *regs)
local_irq_enable();
}
+static inline void preempt_conditional_sti(struct pt_regs *regs)
+{
+ inc_preempt_count();
+ if (regs->flags & X86_EFLAGS_IF)
+ local_irq_enable();
+}
+
+static inline void preempt_conditional_cli(struct pt_regs *regs)
+{
+ if (regs->flags & X86_EFLAGS_IF)
+ local_irq_disable();
+ dec_preempt_count();
+}
+
static inline void
die_if_kernel(const char *str, struct pt_regs *regs, long err)
{
@@ -499,7 +513,7 @@ dotraplinkage void __kprobes do_int3(struct pt_regs *regs, long error_code)
dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code)
{
struct task_struct *tsk = current;
- unsigned int condition;
+ unsigned long condition;
int si_code;
get_debugreg(condition, 6);
@@ -517,9 +531,9 @@ dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code)
if (notify_die(DIE_DEBUG, "debug", regs, condition, error_code,
SIGTRAP) == NOTIFY_STOP)
return;
+
/* It's safe to allow irq's after DR6 has been saved */
- if (regs->flags & X86_EFLAGS_IF)
- local_irq_enable();
+ preempt_conditional_sti(regs);
/* Mask out spurious debug traps due to lazy DR7 setting */
if (condition & (DR_TRAP0|DR_TRAP1|DR_TRAP2|DR_TRAP3)) {
@@ -538,16 +552,11 @@ dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code)
* kernel space (but re-enable TF when returning to user mode).
*/
if (condition & DR_STEP) {
- /*
- * We already checked v86 mode above, so we can
- * check for kernel mode by just checking the CPL
- * of CS.
- */
if (!user_mode(regs))
goto clear_TF_reenable;
}
- si_code = get_si_code((unsigned long)condition);
+ si_code = get_si_code(condition);
/* Ok, finally something we can handle */
send_sigtrap(tsk, regs, error_code, si_code);
@@ -557,15 +566,18 @@ dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code)
*/
clear_dr7:
set_debugreg(0, 7);
+ preempt_conditional_cli(regs);
return;
debug_vm86:
handle_vm86_trap((struct kernel_vm86_regs *) regs, error_code, 1);
+ preempt_conditional_cli(regs);
return;
clear_TF_reenable:
set_tsk_thread_flag(tsk, TIF_SINGLESTEP);
regs->flags &= ~X86_EFLAGS_TF;
+ preempt_conditional_cli(regs);
return;
}
diff --git a/arch/x86/kernel/traps_64.c b/arch/x86/kernel/traps_64.c
index d4e02c1..80dbbc7 100644
--- a/arch/x86/kernel/traps_64.c
+++ b/arch/x86/kernel/traps_64.c
@@ -381,7 +381,7 @@ dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code)
{
struct task_struct *tsk = current;
unsigned long condition;
- siginfo_t info;
+ int si_code;
get_debugreg(condition, 6);
@@ -399,6 +399,7 @@ dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code)
SIGTRAP) == NOTIFY_STOP)
return;
+ /* It's safe to allow irq's after DR6 has been saved */
preempt_conditional_sti(regs);
/* Mask out spurious debug traps due to lazy DR7 setting */
@@ -407,6 +408,7 @@ dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code)
goto clear_dr7;
}
+ /* Save debug status register where ptrace can see it */
tsk->thread.debugreg6 = condition;
/*
@@ -418,15 +420,14 @@ dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code)
goto clear_TF_reenable;
}
+ si_code = get_si_code(condition);
/* Ok, finally something we can handle */
- tsk->thread.trap_no = 1;
- tsk->thread.error_code = error_code;
- info.si_signo = SIGTRAP;
- info.si_errno = 0;
- info.si_code = get_si_code(condition);
- info.si_addr = user_mode(regs) ? (void __user *)regs->ip : NULL;
- force_sig_info(SIGTRAP, &info, tsk);
+ send_sigtrap(tsk, regs, error_code, si_code);
+ /*
+ * Disable additional traps. They'll be re-enabled when
+ * the signal is delivered.
+ */
clear_dr7:
set_debugreg(0, 7);
preempt_conditional_cli(regs);
diff --git a/include/asm-x86/ptrace.h b/include/asm-x86/ptrace.h
index ac578f1..a202552 100644
--- a/include/asm-x86/ptrace.h
+++ b/include/asm-x86/ptrace.h
@@ -174,12 +174,8 @@ extern unsigned long profile_pc(struct pt_regs *regs);
extern unsigned long
convert_ip_to_linear(struct task_struct *child, struct pt_regs *regs);
-
-#ifdef CONFIG_X86_32
extern void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs,
int error_code, int si_code);
-#endif
-
void signal_fault(struct pt_regs *regs, void __user *frame, char *where);
extern long syscall_trace_enter(struct pt_regs *);
--
1.5.4.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH] fix: x86: remove cpu_vendor_dev
2008-09-30 16:41 [PATCH 0/4] traps: x86: more unification Alexander van Heukelum
2008-09-30 16:41 ` [PATCH 1/4] traps: x86_64: split out math_error and simd_math_error Alexander van Heukelum
@ 2008-09-30 19:37 ` Alexander van Heukelum
2008-09-30 20:37 ` Yinghai Lu
2008-10-01 7:06 ` [PATCH 0/4] traps: x86: more unification Ingo Molnar
2 siblings, 1 reply; 12+ messages in thread
From: Alexander van Heukelum @ 2008-09-30 19:37 UTC (permalink / raw)
To: Ingo Molnar, LKML, Yinghai Lu
x86_64-kernels after commit 10a434fcb "x86: remove cpu_vendor_dev"
crashed on qemu-system-x86_64 due to a typo in vmlinux_64.lds.S.
Signed-off-by: Alexander van Heukelum <heukelum@fastmail.fm>
---
On Tue, Sep 30, 2008 at 06:41:33PM +0200, Alexander van Heukelum wrote:
> Moreover, a defconfig won't run :-/ (on qemu-system-x86_64).
> Bisection pointed to commit 10a434fcb "x86: remove cpu_vendor_dev".
> The kernel crashes early with a general protection fault in a call
> to strnlen. I have no idea what goes wrong, yet.
It took quite some time, but I found the problem... I'll leave
the other one to you ;).
Greetings,
Alexander
arch/x86/kernel/vmlinux_64.lds.S | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/x86/kernel/vmlinux_64.lds.S b/arch/x86/kernel/vmlinux_64.lds.S
index 201e81a..46e0544 100644
--- a/arch/x86/kernel/vmlinux_64.lds.S
+++ b/arch/x86/kernel/vmlinux_64.lds.S
@@ -172,8 +172,8 @@ SECTIONS
.x86_cpu_dev.init : AT(ADDR(.x86_cpu_dev.init) - LOAD_OFFSET) {
*(.x86_cpu_dev.init)
}
- SECURITY_INIT
__x86_cpu_dev_end = .;
+ SECURITY_INIT
. = ALIGN(8);
.parainstructions : AT(ADDR(.parainstructions) - LOAD_OFFSET) {
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH] fix: x86: remove cpu_vendor_dev
2008-09-30 19:37 ` [PATCH] fix: x86: remove cpu_vendor_dev Alexander van Heukelum
@ 2008-09-30 20:37 ` Yinghai Lu
2008-10-01 6:49 ` Ingo Molnar
0 siblings, 1 reply; 12+ messages in thread
From: Yinghai Lu @ 2008-09-30 20:37 UTC (permalink / raw)
To: Alexander van Heukelum; +Cc: Ingo Molnar, LKML
On Tue, Sep 30, 2008 at 12:37 PM, Alexander van Heukelum
<heukelum@mailshack.com> wrote:
> x86_64-kernels after commit 10a434fcb "x86: remove cpu_vendor_dev"
> crashed on qemu-system-x86_64 due to a typo in vmlinux_64.lds.S.
>
> Signed-off-by: Alexander van Heukelum <heukelum@fastmail.fm>
>
> ---
>
> On Tue, Sep 30, 2008 at 06:41:33PM +0200, Alexander van Heukelum wrote:
>> Moreover, a defconfig won't run :-/ (on qemu-system-x86_64).
>> Bisection pointed to commit 10a434fcb "x86: remove cpu_vendor_dev".
>> The kernel crashes early with a general protection fault in a call
>> to strnlen. I have no idea what goes wrong, yet.
>
> It took quite some time, but I found the problem... I'll leave
> the other one to you ;).
>
> Greetings,
> Alexander
>
> arch/x86/kernel/vmlinux_64.lds.S | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/arch/x86/kernel/vmlinux_64.lds.S b/arch/x86/kernel/vmlinux_64.lds.S
> index 201e81a..46e0544 100644
> --- a/arch/x86/kernel/vmlinux_64.lds.S
> +++ b/arch/x86/kernel/vmlinux_64.lds.S
> @@ -172,8 +172,8 @@ SECTIONS
> .x86_cpu_dev.init : AT(ADDR(.x86_cpu_dev.init) - LOAD_OFFSET) {
> *(.x86_cpu_dev.init)
> }
> - SECURITY_INIT
> __x86_cpu_dev_end = .;
> + SECURITY_INIT
>
> . = ALIGN(8);
> .parainstructions : AT(ADDR(.parainstructions) - LOAD_OFFSET) {
>
that is merging problem, Ingo should fix that already...
YH
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] fix: x86: remove cpu_vendor_dev
2008-09-30 20:37 ` Yinghai Lu
@ 2008-10-01 6:49 ` Ingo Molnar
2008-10-01 7:22 ` Yinghai Lu
0 siblings, 1 reply; 12+ messages in thread
From: Ingo Molnar @ 2008-10-01 6:49 UTC (permalink / raw)
To: Yinghai Lu; +Cc: Alexander van Heukelum, LKML
* Yinghai Lu <yinghai@kernel.org> wrote:
> On Tue, Sep 30, 2008 at 12:37 PM, Alexander van Heukelum
> <heukelum@mailshack.com> wrote:
> > x86_64-kernels after commit 10a434fcb "x86: remove cpu_vendor_dev"
> > crashed on qemu-system-x86_64 due to a typo in vmlinux_64.lds.S.
> >
> > Signed-off-by: Alexander van Heukelum <heukelum@fastmail.fm>
> >
> > ---
> >
> > On Tue, Sep 30, 2008 at 06:41:33PM +0200, Alexander van Heukelum wrote:
> >> Moreover, a defconfig won't run :-/ (on qemu-system-x86_64).
> >> Bisection pointed to commit 10a434fcb "x86: remove cpu_vendor_dev".
> >> The kernel crashes early with a general protection fault in a call
> >> to strnlen. I have no idea what goes wrong, yet.
> >
> > It took quite some time, but I found the problem... I'll leave
> > the other one to you ;).
> >
> > Greetings,
> > Alexander
> >
> > arch/x86/kernel/vmlinux_64.lds.S | 2 +-
> > 1 files changed, 1 insertions(+), 1 deletions(-)
> >
> > diff --git a/arch/x86/kernel/vmlinux_64.lds.S b/arch/x86/kernel/vmlinux_64.lds.S
> > index 201e81a..46e0544 100644
> > --- a/arch/x86/kernel/vmlinux_64.lds.S
> > +++ b/arch/x86/kernel/vmlinux_64.lds.S
> > @@ -172,8 +172,8 @@ SECTIONS
> > .x86_cpu_dev.init : AT(ADDR(.x86_cpu_dev.init) - LOAD_OFFSET) {
> > *(.x86_cpu_dev.init)
> > }
> > - SECURITY_INIT
> > __x86_cpu_dev_end = .;
> > + SECURITY_INIT
> >
> > . = ALIGN(8);
> > .parainstructions : AT(ADDR(.parainstructions) - LOAD_OFFSET) {
> >
>
> that is merging problem, Ingo should fix that already...
indeed. I've fixed it in tip/x86/traps by applying Alexander's patch.
Ingo
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 0/4] traps: x86: more unification
2008-09-30 16:41 [PATCH 0/4] traps: x86: more unification Alexander van Heukelum
2008-09-30 16:41 ` [PATCH 1/4] traps: x86_64: split out math_error and simd_math_error Alexander van Heukelum
2008-09-30 19:37 ` [PATCH] fix: x86: remove cpu_vendor_dev Alexander van Heukelum
@ 2008-10-01 7:06 ` Ingo Molnar
2 siblings, 0 replies; 12+ messages in thread
From: Ingo Molnar @ 2008-10-01 7:06 UTC (permalink / raw)
To: Alexander van Heukelum; +Cc: LKML, Yinghai Lu
* Alexander van Heukelum <heukelum@fastmail.fm> wrote:
> Hi Ingo,
>
> Here are some more unification patches for traps_xx.c. They
> are against the current x86/traps branch in the tip tree and
> work fine for my miniconfigs.
applied to tip/x86/traps, thanks Alexander!
> The branch does not at the moment compile a defconfig kernel, due to a
> missing PCI_DEVICE_ID_AMD_10H_NB_MISC define, however.
hm, commit 021f8b7 was missing, cf16970 got detached from that commit. I
fixed it all up in tip/x86/traps.
Ingo
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] fix: x86: remove cpu_vendor_dev
2008-10-01 6:49 ` Ingo Molnar
@ 2008-10-01 7:22 ` Yinghai Lu
2008-10-01 7:36 ` Ingo Molnar
0 siblings, 1 reply; 12+ messages in thread
From: Yinghai Lu @ 2008-10-01 7:22 UTC (permalink / raw)
To: Ingo Molnar; +Cc: Alexander van Heukelum, LKML
On Tue, Sep 30, 2008 at 11:49 PM, Ingo Molnar <mingo@elte.hu> wrote:
>
> * Yinghai Lu <yinghai@kernel.org> wrote:
>
>> On Tue, Sep 30, 2008 at 12:37 PM, Alexander van Heukelum
>> <heukelum@mailshack.com> wrote:
>> > x86_64-kernels after commit 10a434fcb "x86: remove cpu_vendor_dev"
>> > crashed on qemu-system-x86_64 due to a typo in vmlinux_64.lds.S.
>> >
>> > Signed-off-by: Alexander van Heukelum <heukelum@fastmail.fm>
>> >
>> > ---
>> >
>> > On Tue, Sep 30, 2008 at 06:41:33PM +0200, Alexander van Heukelum wrote:
>> >> Moreover, a defconfig won't run :-/ (on qemu-system-x86_64).
>> >> Bisection pointed to commit 10a434fcb "x86: remove cpu_vendor_dev".
>> >> The kernel crashes early with a general protection fault in a call
>> >> to strnlen. I have no idea what goes wrong, yet.
>> >
>> > It took quite some time, but I found the problem... I'll leave
>> > the other one to you ;).
>> >
>> > Greetings,
>> > Alexander
>> >
>> > arch/x86/kernel/vmlinux_64.lds.S | 2 +-
>> > 1 files changed, 1 insertions(+), 1 deletions(-)
>> >
>> > diff --git a/arch/x86/kernel/vmlinux_64.lds.S b/arch/x86/kernel/vmlinux_64.lds.S
>> > index 201e81a..46e0544 100644
>> > --- a/arch/x86/kernel/vmlinux_64.lds.S
>> > +++ b/arch/x86/kernel/vmlinux_64.lds.S
>> > @@ -172,8 +172,8 @@ SECTIONS
>> > .x86_cpu_dev.init : AT(ADDR(.x86_cpu_dev.init) - LOAD_OFFSET) {
>> > *(.x86_cpu_dev.init)
>> > }
>> > - SECURITY_INIT
>> > __x86_cpu_dev_end = .;
>> > + SECURITY_INIT
>> >
>> > . = ALIGN(8);
>> > .parainstructions : AT(ADDR(.parainstructions) - LOAD_OFFSET) {
>> >
>>
>> that is merging problem, Ingo should fix that already...
>
> indeed. I've fixed it in tip/x86/traps by applying Alexander's patch.
>
still have merging problem... in tip/master we have
__x86_cpu_dev_start = .;
.x86_cpu_dev.init : AT(ADDR(.x86_cpu_dev.init) - LOAD_OFFSET) {
*(.x86_cpu_dev.init)
}
__x86_cpu_dev_end = .;
SECURITY_INIT
DYN_ARRAY_INIT(8)
SECURITY_INIT
there is two copy of SECURITY_INIT
YH
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] fix: x86: remove cpu_vendor_dev
2008-10-01 7:22 ` Yinghai Lu
@ 2008-10-01 7:36 ` Ingo Molnar
2008-10-01 14:53 ` Yinghai Lu
0 siblings, 1 reply; 12+ messages in thread
From: Ingo Molnar @ 2008-10-01 7:36 UTC (permalink / raw)
To: Yinghai Lu; +Cc: Alexander van Heukelum, LKML
* Yinghai Lu <yinghai@kernel.org> wrote:
> On Tue, Sep 30, 2008 at 11:49 PM, Ingo Molnar <mingo@elte.hu> wrote:
> >
> > * Yinghai Lu <yinghai@kernel.org> wrote:
> >
> >> On Tue, Sep 30, 2008 at 12:37 PM, Alexander van Heukelum
> >> <heukelum@mailshack.com> wrote:
> >> > x86_64-kernels after commit 10a434fcb "x86: remove cpu_vendor_dev"
> >> > crashed on qemu-system-x86_64 due to a typo in vmlinux_64.lds.S.
> >> >
> >> > Signed-off-by: Alexander van Heukelum <heukelum@fastmail.fm>
> >> >
> >> > ---
> >> >
> >> > On Tue, Sep 30, 2008 at 06:41:33PM +0200, Alexander van Heukelum wrote:
> >> >> Moreover, a defconfig won't run :-/ (on qemu-system-x86_64).
> >> >> Bisection pointed to commit 10a434fcb "x86: remove cpu_vendor_dev".
> >> >> The kernel crashes early with a general protection fault in a call
> >> >> to strnlen. I have no idea what goes wrong, yet.
> >> >
> >> > It took quite some time, but I found the problem... I'll leave
> >> > the other one to you ;).
> >> >
> >> > Greetings,
> >> > Alexander
> >> >
> >> > arch/x86/kernel/vmlinux_64.lds.S | 2 +-
> >> > 1 files changed, 1 insertions(+), 1 deletions(-)
> >> >
> >> > diff --git a/arch/x86/kernel/vmlinux_64.lds.S b/arch/x86/kernel/vmlinux_64.lds.S
> >> > index 201e81a..46e0544 100644
> >> > --- a/arch/x86/kernel/vmlinux_64.lds.S
> >> > +++ b/arch/x86/kernel/vmlinux_64.lds.S
> >> > @@ -172,8 +172,8 @@ SECTIONS
> >> > .x86_cpu_dev.init : AT(ADDR(.x86_cpu_dev.init) - LOAD_OFFSET) {
> >> > *(.x86_cpu_dev.init)
> >> > }
> >> > - SECURITY_INIT
> >> > __x86_cpu_dev_end = .;
> >> > + SECURITY_INIT
> >> >
> >> > . = ALIGN(8);
> >> > .parainstructions : AT(ADDR(.parainstructions) - LOAD_OFFSET) {
> >> >
> >>
> >> that is merging problem, Ingo should fix that already...
> >
> > indeed. I've fixed it in tip/x86/traps by applying Alexander's patch.
> >
>
> still have merging problem... in tip/master we have
>
> __x86_cpu_dev_start = .;
> .x86_cpu_dev.init : AT(ADDR(.x86_cpu_dev.init) - LOAD_OFFSET) {
> *(.x86_cpu_dev.init)
> }
> __x86_cpu_dev_end = .;
> SECURITY_INIT
>
> DYN_ARRAY_INIT(8)
>
> SECURITY_INIT
>
> there is two copy of SECURITY_INIT
indeed. I fixed this up now.
interestingly, this seems to be one of the rare cases where Git
auto-merge does the wrong thing - tt should have detected a conflict.
Ingo
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] fix: x86: remove cpu_vendor_dev
2008-10-01 7:36 ` Ingo Molnar
@ 2008-10-01 14:53 ` Yinghai Lu
0 siblings, 0 replies; 12+ messages in thread
From: Yinghai Lu @ 2008-10-01 14:53 UTC (permalink / raw)
To: Ingo Molnar; +Cc: Alexander van Heukelum, LKML
On Wed, Oct 1, 2008 at 12:36 AM, Ingo Molnar <mingo@elte.hu> wrote:
>
>> there is two copy of SECURITY_INIT
>
> indeed. I fixed this up now.
>
> interestingly, this seems to be one of the rare cases where Git
> auto-merge does the wrong thing - tt should have detected a conflict.
>
should let git guys know that.
YH
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2008-10-01 14:53 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-09-30 16:41 [PATCH 0/4] traps: x86: more unification Alexander van Heukelum
2008-09-30 16:41 ` [PATCH 1/4] traps: x86_64: split out math_error and simd_math_error Alexander van Heukelum
2008-09-30 16:41 ` [PATCH 2/4] traps: i386: factor out lazy io-bitmap copy Alexander van Heukelum
2008-09-30 16:41 ` [PATCH 3/4] traps: x86: introduce dotraplinkage Alexander van Heukelum
2008-09-30 16:41 ` [PATCH 4/4] traps: x86: converge do_debug handlers Alexander van Heukelum
2008-09-30 19:37 ` [PATCH] fix: x86: remove cpu_vendor_dev Alexander van Heukelum
2008-09-30 20:37 ` Yinghai Lu
2008-10-01 6:49 ` Ingo Molnar
2008-10-01 7:22 ` Yinghai Lu
2008-10-01 7:36 ` Ingo Molnar
2008-10-01 14:53 ` Yinghai Lu
2008-10-01 7:06 ` [PATCH 0/4] traps: x86: more unification Ingo Molnar
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.