public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Jan Beulich" <JBeulich@novell.com>
To: <linux-kernel@vger.kernel.org>
Subject: [PATCH 24/39] NLKD/i386 - core
Date: Wed, 09 Nov 2005 15:20:11 +0100	[thread overview]
Message-ID: <437213AB.76F0.0078.0@novell.com> (raw)
In-Reply-To: 4372138D.76F0.0078.0@novell.com

[-- Attachment #1: Type: text/plain, Size: 106 bytes --]

The core i386 NLKD additions.

Signed-Off-By: Jan Beulich <jbeulich@novell.com>

(actual patch attached)


[-- Attachment #2: nlkd-i386.patch --]
[-- Type: application/octet-stream, Size: 47522 bytes --]

The core i386 NLKD additions.

Signed-Off-By: Jan Beulich <jbeulich@novell.com>

Index: 2.6.14-nlkd/arch/i386/Kconfig.debug
===================================================================
--- 2.6.14-nlkd.orig/arch/i386/Kconfig.debug	2005-11-09 11:12:40.000000000 +0100
+++ 2.6.14-nlkd/arch/i386/Kconfig.debug	2005-11-04 16:19:32.000000000 +0100
@@ -1,6 +1,7 @@
 menu "Kernel hacking"
 
 source "lib/Kconfig.debug"
+source "debug/Kconfig"
 
 config EARLY_PRINTK
 	bool "Early printk" if EMBEDDED && DEBUG_KERNEL
Index: 2.6.14-nlkd/arch/i386/kernel/asm-offsets.c
===================================================================
--- 2.6.14-nlkd.orig/arch/i386/kernel/asm-offsets.c	2005-11-09 11:12:40.000000000 +0100
+++ 2.6.14-nlkd/arch/i386/kernel/asm-offsets.c	2005-11-04 16:19:32.000000000 +0100
@@ -4,6 +4,7 @@
  * to extract and format the required data.
  */
 
+#include <linux/config.h>
 #include <linux/sched.h>
 #include <linux/signal.h>
 #include <linux/personality.h>
@@ -13,6 +14,13 @@
 #include <asm/fixmap.h>
 #include <asm/processor.h>
 #include <asm/thread_info.h>
+#ifdef CONFIG_NLKD
+# include <asm/fta-frame.h>
+# include <asm/fta-type.h>
+#endif
+#if defined(CONFIG_CDE) || defined(CONFIG_CDE_MODULE)
+# include <../debug/nlkd/cdelock.h>
+#endif
 
 #define DEFINE(sym, val) \
         asm volatile("\n->" #sym " %0 " #val : : "i" (val))
@@ -70,4 +78,88 @@ void foo(void)
 	DEFINE(PAGE_SIZE_asm, PAGE_SIZE);
 	DEFINE(THREAD_SIZE_asm, THREAD_SIZE);
 	DEFINE(VSYSCALL_BASE, __fix_to_virt(FIX_VSYSCALL));
+
+#ifdef CONFIG_NLKD
+	BLANK();
+# define TSS_DEF(f) DEFINE(TSS_##f, offsetof (struct tss_struct, f))
+	TSS_DEF(back_link);
+	TSS_DEF(esp0);
+	TSS_DEF(ss0);
+	TSS_DEF(esp1);
+	TSS_DEF(ss1);
+	TSS_DEF(esp2);
+	TSS_DEF(ss2);
+	TSS_DEF(__cr3);
+	TSS_DEF(eip);
+	TSS_DEF(eflags);
+	TSS_DEF(eax);
+	TSS_DEF(ecx);
+	TSS_DEF(edx);
+	TSS_DEF(ebx);
+	TSS_DEF(esp);
+	TSS_DEF(ebp);
+	TSS_DEF(esi);
+	TSS_DEF(edi);
+	TSS_DEF(es);
+	TSS_DEF(cs);
+	TSS_DEF(ss);
+	TSS_DEF(ds);
+	TSS_DEF(fs);
+	TSS_DEF(gs);
+	TSS_DEF(ldt);
+# undef TSS_DEF
+
+	BLANK();
+# define FRAME_TYPE(t) DEFINE(IA32_##t, IA32_##t)
+	FRAME_TYPE(DIVIDE_ERROR);
+	FRAME_TYPE(DEBUG);
+	FRAME_TYPE(NMI);
+	FRAME_TYPE(BREAKPOINT);
+	FRAME_TYPE(OVERFLOW);
+	FRAME_TYPE(BOUNDS_CHECK);
+	FRAME_TYPE(ILLEGAL_OPCODE);
+	FRAME_TYPE(DEVICE_NOT_AVAILABLE);
+	FRAME_TYPE(DOUBLE_FAULT);
+	FRAME_TYPE(COPROCESSOR_SEGMENT_OVERRUN);
+	FRAME_TYPE(INVALID_TSS);
+	FRAME_TYPE(SEGMENT_NOT_PRESENT);
+	FRAME_TYPE(STACK_FAULT);
+	FRAME_TYPE(GENERAL_PROTECTION_FAULT);
+	FRAME_TYPE(PAGE_FAULT);
+	FRAME_TYPE(FP_ERROR);
+	FRAME_TYPE(ALIGNMENT_CHECK);
+	FRAME_TYPE(MACHINE_CHECK);
+	FRAME_TYPE(SIMD_FP_ERROR);
+# undef FRAME_TYPE
+	BLANK();
+# define FRAME_DEF(f) DEFINE(FRAME_##f, offsetof (struct ftaInterruptionCtx_s, f))
+	FRAME_DEF(type);
+	FRAME_DEF(sub_type);
+	FRAME_DEF(state);
+	FRAME_DEF(esp);
+	FRAME_DEF(ss);
+	FRAME_DEF(fs);
+	FRAME_DEF(gs);
+	FRAME_DEF(ldtr);
+	FRAME_DEF(tr);
+	FRAME_DEF(cr0);
+	FRAME_DEF(cr2);
+	FRAME_DEF(cr3);
+	FRAME_DEF(cr4);
+	FRAME_DEF(dr7);
+	FRAME_DEF(debugCtl);
+	FRAME_DEF(ec);
+	FRAME_DEF(pt_regs);
+	FRAME_DEF(fp_mmx_xmm);
+# undef FRAME_DEF
+#endif
+
+#if defined(CONFIG_CDE) || defined(CONFIG_CDE_MODULE)
+	BLANK();
+	DEFINE(CDESPINLOCK_signature, offsetof (cdeSpinLock_t, cdeSpinLockSignature));
+	DEFINE(CDESPINLOCK_cpu,       offsetof (cdeSpinLock_t, cdeSpinLockCpu));
+	DEFINE(CDE_VALID_SPINLOCK_SIGNATURE_LO, (uint32_t)CDE_VALID_SPINLOCK_SIGNATURE);
+	DEFINE(CDE_VALID_SPINLOCK_SIGNATURE_HI, CDE_VALID_SPINLOCK_SIGNATURE >> 32);
+	DEFINE(CDE_SPINLOCK_NOT_OWNED,          CDE_SPINLOCK_NOT_OWNED);
+#endif
 }
Index: 2.6.14-nlkd/debug/nlkd/asm-ia32.h
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/debug/nlkd/asm-ia32.h	2005-11-07 12:11:32.000000000 +0100
@@ -0,0 +1,121 @@
+/*****************************************************************************
+ *
+ *   File Name:      asm-ia32.h
+ *   Created by:     Jan Beulich
+ *   %version:       7 %
+ *   %derived_by:    jbeulich %
+ *   %date_modified: Thu Nov 03 04:13:50 2005 %
+ *
+ *****************************************************************************/
+/*****************************************************************************
+ *                                                                           *
+ * Copyright (c) 2002-2005 Novell, Inc. All Rights Reserved.                 *
+ *                                                                           *
+ * This program is free software; you can redistribute it and/or             *
+ * modify it under the terms of version 2 of the GNU General Public License  *
+ * as published by the Free Software Foundation.                             *
+ *                                                                           *
+ * This program is distributed in the hope that it will be useful,           *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of            *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the              *
+ * GNU General Public License for more details.                              *
+ *                                                                           *
+ * You should have received a copy of the GNU General Public License         *
+ * along with this program; if not, contact Novell, Inc.                     *
+ *                                                                           *
+ * To contact Novell about this file by physical or electronic mail,         *
+ * you may find current contact information at www.novell.com.               *
+ *                                                                           *
+ *****************************************************************************/
+/*****************************************************************************
+ *
+ *	File Description:
+ *
+ *****************************************************************************/
+
+#if defined(__ASSEMBLY__) && !defined(ASM_IA32_H)
+#define ASM_IA32_H
+
+#include <linux/config.h>
+#include <linux/version.h>
+
+#ifdef CONFIG_UNWIND_INFO
+.equiv eh.eax, 0
+.equiv eh.ecx, 1
+.equiv eh.edx, 2
+.equiv eh.ebx, 3
+.equiv eh.esp, 4
+.equiv eh.ebp, 5
+.equiv eh.esi, 6
+.equiv eh.edi, 7
+.equiv eh.es, 8
+.equiv eh.cs, 9
+.equiv eh.ss, 10
+.equiv eh.ds, 11
+.equiv eh.fs, 12
+.equiv eh.gs, 13
+
+# define SP esp
+# define BP ebp
+# define FLAGS eflags
+.equiv .eh.stkword, dword
+.equiv .eh.preserved, (1 << eh.ebx) | (1 << eh.ebp) | (1 << eh.esi) | (1 << eh.edi) \
+                      | (1 << eh.es) | (1 << eh.cs) | (1 << eh.ds) | (1 << eh.ss) | (1 << eh.fs) | (1 << eh.gs)
+#endif
+
+#include "asm-x86.h"
+
+.ifndef PROCEDURE_ALIGN
+ .equiv PROCEDURE_ALIGN, 0x10
+.endif
+
+.macro load sreg:req, loc:req, aux:req
+	LOCAL set, adj, skip
+set:
+	mov	sreg, loc
+skip:
+ .section .fixup, "ax"
+adj:
+	xor	aux, aux
+	mov	sreg, aux
+	jmp	skip
+ .previous
+ .section __ex_table, "a"
+ .align	dword
+ .long	set, adj
+ .previous
+.endm
+
+.macro fnrstor loc:req
+	frstor	loc
+.endm
+
+.macro fxsr what:req, loc:req
+	LOCAL where, fix, done
+where:
+	fx&what	loc
+done:
+ .section .fixup, "ax"
+fix:
+	fn&what	loc
+	jmp	done
+ .previous
+ .section __ex_table, "a"
+ .align dword
+ .long where, fix
+ .previous
+.endm
+
+.macro fxinit mxcsr:req
+	LOCAL where, fix
+where:
+	ldmxcsr	mxcsr
+fix:
+	fninit
+ .section __ex_table, "a"
+ .align dword
+ .long where, fix
+ .previous
+.endm
+
+#endif /* ASM_IA32_H */
Index: 2.6.14-nlkd/debug/nlkd/nlkdIA32.S
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/debug/nlkd/nlkdIA32.S	2005-10-07 17:19:06.000000000 +0200
@@ -0,0 +1,86 @@
+/*****************************************************************************
+ *
+ *   File Name:      nlkdIA32.S
+ *   Created by:     jbeulich
+ *   %version:       2 %
+ *   %derived_by:    jbeulich %
+ *   %date_modified: Fri Oct 07 09:18:56 2005 %
+ *
+ ****************************************************************************/
+/*****************************************************************************
+ *                                                                           *
+ * Copyright (c) 2001-2005 Novell, Inc. All Rights Reserved.                 *
+ *                                                                           *
+ * This program is free software; you can redistribute it and/or             *
+ * modify it under the terms of version 2 of the GNU General Public License  *
+ * as published by the Free Software Foundation.                             *
+ *                                                                           *
+ * This program is distributed in the hope that it will be useful,           *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of            *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the              *
+ * GNU General Public License for more details.                              *
+ *                                                                           *
+ * You should have received a copy of the GNU General Public License         *
+ * along with this program; if not, contact Novell, Inc.                     *
+ *                                                                           *
+ * To contact Novell about this file by physical or electronic mail,         *
+ * you may find current contact information at www.novell.com.               *
+ *                                                                           *
+ *****************************************************************************/
+/*****************************************************************************
+ *
+ *	 File Description:
+ *
+ ****************************************************************************/
+
+.equiv PROCEDURE_ALIGN, 1
+#include "asm-ia32.h"
+#include <linux/nlkd.h>
+
+//todo .file "nlkd"
+.text
+
+// void nlkdDebugEvent(nint_t eventCode, ...);
+.pubproc nlkdDebugEvent
+	cmp	dword ptr [nlkdAgentCount], 0
+	movsx	eax, byte ptr [esp+dword]
+	jg	_nlkdEnterDebuggerInstruction_
+	test	eax, eax
+	jg	0f
+ .hidentry _nlkdEnterDebuggerInstruction_
+	int	3
+0:
+	jc	1f
+	ret
+1:
+#ifdef CONFIG_UNWIND_INFO
+// Once we get here, the dual frame layout ceases to exist,
+// and hence we can now express the (alternate) frame state.
+ .cfi_def_cfa esp, 2*dword
+ .cfi_offset eip, -2*dword
+#endif
+	ret	dword				// discard eventCode for special case entries
+.endp nlkdDebugEvent
+// void nlkdEnterDebugger(void);
+.pubproc nlkdEnterDebugger
+	mov	eax, DEBUG_EVENT_ENTER_DEBUGGER
+2:
+	push	dword ptr [esp]			// make stack frame consistent with nlkdDebugEvent
+						// (note that there's no point in using EHpush here
+						// because the .eh_frame unwind information can't
+						// express the dual (conditional upon EFLAGS.CF)
+						// frame layout at _nlkdEnterDebuggerInstruction_.
+	stc
+	mov	[esp+dword], eax			// store eventCode
+	jmp	_nlkdEnterDebuggerInstruction_
+.endp nlkdEnterDebugger
+// void nlkdPanic(const char*string, ...);
+.pubproc nlkdPanic
+	mov	eax, DEBUG_EVENT_PANIC
+	jmp	2b
+.endp nlkdPanic
+// void nlkdAssert(const char*string, const char*file, const char*func, nuint_t line);
+.pubproc nlkdAssert
+	mov	eax, DEBUG_EVENT_ASSERT
+	jmp	2b
+.endp nlkdAssert
Index: 2.6.14-nlkd/debug/nlkd/nlkdIA32.h
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/debug/nlkd/nlkdIA32.h	2005-10-10 14:52:40.000000000 +0200
@@ -0,0 +1,55 @@
+/*****************************************************************************
+ *
+ *   File Name:      nlkdIA32.h
+ *   Created by:     Jan Beulich
+ *   %version:       1 %
+ *   %derived_by:    jbeulich %
+ *   %date_modified: Mon Oct 10 06:52:33 2005 %
+ *
+ *****************************************************************************/
+/*****************************************************************************
+ *                                                                           *
+ * Copyright (c) 1999-2005 Novell, Inc. All Rights Reserved.                 *
+ *                                                                           *
+ * This program is free software; you can redistribute it and/or             *
+ * modify it under the terms of version 2 of the GNU General Public License  *
+ * as published by the Free Software Foundation.                             *
+ *                                                                           *
+ * This program is distributed in the hope that it will be useful,           *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of            *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the              *
+ * GNU General Public License for more details.                              *
+ *                                                                           *
+ * You should have received a copy of the GNU General Public License         *
+ * along with this program; if not, contact Novell, Inc.                     *
+ *                                                                           *
+ * To contact Novell about this file by physical or electronic mail,         *
+ * you may find current contact information at www.novell.com.               *
+ *                                                                           *
+ *****************************************************************************/
+/*****************************************************************************
+ *
+ *	File Description:
+ *
+ *****************************************************************************/
+
+#ifndef CONFIG_CDE
+static void _set_debugreg(uintptr_t value, nuint_t regnum) {
+	switch(regnum) {
+	case 0: __asm__("movl %0,%%db0" : : "r" (value)); break;
+	case 1: __asm__("movl %0,%%db1" : : "r" (value)); break;
+	case 2: __asm__("movl %0,%%db2" : : "r" (value)); break;
+	case 3: __asm__("movl %0,%%db3" : : "r" (value)); break;
+	case 6: __asm__("movl %0,%%db6" : : "r" (value)); break;
+	case 7: __asm__("movl %0,%%db7" : : "r" (value)); break;
+	}
+}
+static int _disable_debugreg(struct pt_regs *regs, nuint_t regnum)
+{
+	_set_debugreg(0, 7);
+}
+static int _restore_debugreg(void)
+{
+	_set_debugreg(current->thread.debugreg[7], 7);
+}
+#endif
Index: 2.6.14-nlkd/include/asm-i386/fta-frame.h
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/include/asm-i386/fta-frame.h	2005-11-03 11:49:06.000000000 +0100
@@ -0,0 +1,177 @@
+/*****************************************************************************
+ *
+ *   File Name:      fta-frame.h
+ *   Created by:     Clyde Griffin
+ *   Date created:   1/1/1999
+ *
+ *   %version:       7 %
+ *   %derived_by:    jbeulich %
+ *   %date_modified: Thu Nov 03 03:48:54 2005 %
+ *
+ *****************************************************************************/
+/*****************************************************************************
+ *                                                                           *
+ * Copyright (c) 1999-2005 Novell, Inc. All Rights Reserved.                 *
+ *                                                                           *
+ * This program is free software; you can redistribute it and/or             *
+ * modify it under the terms of version 2 of the GNU General Public License  *
+ * as published by the Free Software Foundation.                             *
+ *                                                                           *
+ * This program is distributed in the hope that it will be useful,           *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of            *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the              *
+ * GNU General Public License for more details.                              *
+ *                                                                           *
+ * You should have received a copy of the GNU General Public License         *
+ * along with this program; if not, contact Novell, Inc.                     *
+ *                                                                           *
+ * To contact Novell about this file by physical or electronic mail,         *
+ * you may find current contact information at www.novell.com.               *
+ *                                                                           *
+ *****************************************************************************/
+/*****************************************************************************
+ *
+ *	File Description:
+ *  This module contains the definition of a trap frame.
+ *
+ *****************************************************************************/
+
+#ifndef _ASM_I386_FTA_FRAME_H
+#define _ASM_I386_FTA_FRAME_H
+
+/* values for ftaInterruptionCtx_s.state */
+#ifdef CONFIG_NLKD_FTA
+# define FRAME_COMPLETE_BIT 0
+# define FRAME_COMPLETE (1 << FRAME_COMPLETE_BIT)
+#endif
+
+# ifndef __ASSEMBLY__
+#  include <asm/ia_32.h>
+#  include <asm/ptrace.h>
+
+struct ftaInterruptionCtx_s {
+	uint16_t	type;		/* Trap type */
+	 int8_t	sub_type;		/* Extended type */
+	uint8_t	state;		/* Framework/Debugger only */
+	uint32_t	ec;			/* Error code */
+	uint32_t	cr0;
+	uint32_t	cr4;
+	uint32_t	cr2;
+	uint32_t	cr3;
+	uint64_t	debugCtl;
+	uint32_t	dr7;
+	union {
+		// fp/mmx/sse state (which requires 16-byte alignment and thus needs to be referenced indirectly)
+		fxsave_t	*fp_mmx_xmm;
+		// fp/mmx state
+		fsave_t	*fp_mmx;
+	};
+	uint16_t	ldtr;
+	uint16_t	tr;
+	uint16_t	fs;
+	uint16_t	gs;
+	union {
+		uint32_t	esp;
+		uint16_t	sp;
+	};
+	uint16_t	ss, _ss_pad;
+	union {
+		struct pt_regs pt_regs;
+		struct {
+			union {
+				uint32_t	ebx;
+				uint16_t	bx;
+				struct {
+					uint8_t	bl;
+					uint8_t	bh;
+				};
+			};
+			union {
+				uint32_t	ecx;
+				uint16_t	cx;
+				struct {
+					uint8_t	cl;
+					uint8_t	ch;
+				};
+			};
+			union {
+				uint32_t	edx;
+				uint16_t	dx;
+				struct {
+					uint8_t	dl;
+					uint8_t	dh;
+				};
+			};
+			union {
+				uint32_t	esi;
+				uint16_t	si;
+			};
+			union {
+				uint32_t	edi;
+				uint16_t	di;
+			};
+			union {
+				uint32_t	ebp;
+				uint16_t	bp;
+			};
+			union {
+				uint32_t	eax;
+				uint16_t	ax;
+				struct {
+					uint8_t	al;
+					uint8_t	ah;
+				};
+			};
+			union {
+				struct {
+					uint16_t	ds, _ds_pad;
+				};
+#  ifdef CONFIG_NLKD_FTA
+				uint32_t	_type_raw;
+#  endif
+			};
+			union {
+				struct {
+					uint16_t	es, _es_pad;
+				};
+#  ifdef CONFIG_NLKD_FTA
+				uint32_t	_ebx_raw;
+#  endif
+			};
+			union {
+				uint32_t	orig_eax;
+#  ifdef CONFIG_NLKD_FTA
+				uint32_t	_ec_raw;
+#  endif
+			};
+			union {
+				uint32_t	eip;
+				uint16_t	ip;
+			};
+			uint16_t	cs, _cs_pad;
+			union {
+				uint32_t	eflags;
+				uint16_t	flags;
+			};
+			/*
+			 * From here on field presence dependent on the value in eflags
+			 */
+			union {
+				uint32_t	r3_esp;
+				uint16_t	r3_sp;
+			};
+			uint16_t	r3_ss, _r3_ss_pad;
+		};
+#  ifdef CONFIG_NLKD_FTA
+	};
+#   define FRAME_PTREGS(frame, field) (frame)->field
+#  else
+	} *pt_regs;
+#   define FRAME_PTREGS(frame, field) (frame)->pt_regs->field
+#  endif
+	/* This is only used in cloned frames. */
+	uint32_t	_fp_mmx_xmm_area_[(sizeof(fxsave_t) + 0xf) / sizeof(uint32_t)];
+};
+# endif /* __ASSEMBLY__ */
+
+#endif /* _ASM_I386_FTA_FRAME_H */
Index: 2.6.14-nlkd/include/asm-i386/fta-type.h
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/include/asm-i386/fta-type.h	2005-06-27 13:56:50.000000000 +0200
@@ -0,0 +1,89 @@
+/*****************************************************************************
+ *
+ *   File Name:      fta-type.h
+ *   Created by:     Clyde Griffin
+ *   Date created:   1/1/1999
+ *
+ *   %version:       5 %
+ *   %derived_by:    jbeulich %
+ *   %date_modified: Mon Jun 27 05:21:26 2005 %
+ *
+ *****************************************************************************/
+/*****************************************************************************
+ *                                                                           *
+ * Copyright (c) 1999-2005 Novell, Inc. All Rights Reserved.                 *
+ *                                                                           *
+ * This program is free software; you can redistribute it and/or             *
+ * modify it under the terms of version 2 of the GNU General Public License  *
+ * as published by the Free Software Foundation.                             *
+ *                                                                           *
+ * This program is distributed in the hope that it will be useful,           *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of            *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the              *
+ * GNU General Public License for more details.                              *
+ *                                                                           *
+ * You should have received a copy of the GNU General Public License         *
+ * along with this program; if not, contact Novell, Inc.                     *
+ *                                                                           *
+ * To contact Novell about this file by physical or electronic mail,         *
+ * you may find current contact information at www.novell.com.               *
+ *                                                                           *
+ *****************************************************************************/
+/*****************************************************************************
+ *
+ *	File Description:
+ *  This module contains the definition of a trap frame.
+ *
+ *****************************************************************************/
+
+#ifndef _ASM_I386_FTA_TYPE_H
+#define _ASM_I386_FTA_TYPE_H
+
+/*
+ * ftaInterruptionId_t
+ *
+ * ftaInterruptionId_t uniquely identifies each type of interruption.
+ *
+ * NOTE:
+ *    Interruption frames may be different for faults, traps, external
+ *    interrupts and aborts.  The consumer of an interruption frame
+ *    needs to be aware of which interruption types are associated with
+ *    with interruption frame types.
+ */
+enum ftaInterruptionId_e
+{
+	IA32_DIVIDE_ERROR,
+	IA32_DEBUG,
+	IA32_NMI,
+	IA32_BREAKPOINT,
+	IA32_OVERFLOW,
+	IA32_BOUNDS_CHECK,
+	IA32_ILLEGAL_OPCODE,
+	IA32_DEVICE_NOT_AVAILABLE,
+	IA32_DOUBLE_FAULT,
+	IA32_COPROCESSOR_SEGMENT_OVERRUN,
+	IA32_INVALID_TSS,
+	IA32_SEGMENT_NOT_PRESENT,
+	IA32_STACK_FAULT,
+	IA32_GENERAL_PROTECTION_FAULT,
+	IA32_PAGE_FAULT,
+	IA32_RSVD_0F,
+	IA32_FP_ERROR,
+	IA32_ALIGNMENT_CHECK,
+	IA32_MACHINE_CHECK,
+	IA32_SIMD_FP_ERROR,
+	IA32_RSVD_14,
+	IA32_RSVD_15,
+	IA32_RSVD_16,
+	IA32_RSVD_17,
+	IA32_RSVD_18,
+	IA32_RSVD_19,
+	IA32_RSVD_1A,
+	IA32_RSVD_1B,
+	IA32_RSVD_1C,
+	IA32_RSVD_1D,
+	IA32_RSVD_1E,
+	IA32_RSVD_1F
+};
+
+#endif /* _ASM_I386_FTA_TYPE_H */
Index: 2.6.14-nlkd/include/asm-i386/ia_32.h
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/include/asm-i386/ia_32.h	2005-06-30 15:54:35.000000000 +0200
@@ -0,0 +1,907 @@
+/*****************************************************************************
+ *
+ *   File Name:      ia_32.h
+ *   Created by:     Clyde Griffin, Jan Beulich
+ *   Date created:   21Feb2001
+ *
+ *   %version:       9 %
+ *   %derived_by:    jbeulich %
+ *   %date_modified: Thu Jun 30 07:54:20 2005 %
+ *
+ *****************************************************************************/
+/*****************************************************************************
+ *                                                                           *
+ * Copyright (c) 2001-2005 Novell, Inc. All Rights Reserved.                 *
+ *                                                                           *
+ * This program is free software; you can redistribute it and/or             *
+ * modify it under the terms of version 2 of the GNU General Public License  *
+ * as published by the Free Software Foundation.                             *
+ *                                                                           *
+ * This program is distributed in the hope that it will be useful,           *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of            *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the              *
+ * GNU General Public License for more details.                              *
+ *                                                                           *
+ * You should have received a copy of the GNU General Public License         *
+ * along with this program; if not, contact Novell, Inc.                     *
+ *                                                                           *
+ * To contact Novell about this file by physical or electronic mail,         *
+ * you may find current contact information at www.novell.com.               *
+ *                                                                           *
+ *****************************************************************************/
+/*****************************************************************************
+ *
+ *	File Description:
+ *
+ *****************************************************************************/
+
+#ifndef _ASM_IA_32_H
+#define _ASM_IA_32_H
+
+#ifdef __ASSEMBLY__
+# define UINT64_C(v) (v)
+#else
+# include <linux/types.h>
+#endif
+
+/*
+ * EFLAGS
+ */
+#define EFLAGS_MBZ			0xffc08028
+#define EFLAGS_MBS			0x00000002
+#define EFLAGS_CF			0
+#define EFLAGS_PF			2
+#define EFLAGS_AF			4
+#define EFLAGS_ZF			6
+#define EFLAGS_SF			7
+#define EFLAGS_TF			8
+#define EFLAGS_IF			9
+#define EFLAGS_DF			10
+#define EFLAGS_OF			11
+#define EFLAGS_IOPL			12
+#define EFLAGS_IOPL_LEN		2
+#define EFLAGS_NT			14
+#define EFLAGS_RF			16
+#define EFLAGS_VM			17
+#define EFLAGS_AC			18
+#define EFLAGS_VIF			19
+#define EFLAGS_VIP			20
+#define EFLAGS_ID			21
+
+/*
+ * Privilege levels
+ */
+#define PL_KERNEL			0
+#define PL_USER			3
+
+/*
+ * Selector layout
+ */
+#define SELECTOR_RPL		0
+#define SELECTOR_RPL_LEN		2
+#define SELECTOR_TI			2
+#define SELECTOR_INDEX		3
+#define SELECTOR_INDEX_LEN	13
+
+/*
+ * Descriptor Attributes
+ */
+#define DESCRIPTOR_TYPE		0
+#define DESCRIPTOR_TYPE_LEN	5
+#	define DESCRIPTOR_INVALID	0x00
+#	define DESCRIPTOR_AVAILTSS16	0x01
+#	define DESCRIPTOR_LDT		0x02
+#	define DESCRIPTOR_BUSYTSS16	0x03
+#	define DESCRIPTOR_CALLGATE16	0x04
+#	define DESCRIPTOR_TASKGATE	0x05
+#	define DESCRIPTOR_INTGATE16	0x06
+#	define DESCRIPTOR_TRAPGATE16	0x07
+#	define DESCRIPTOR_AVAILTSS32	0x09
+#	define DESCRIPTOR_BUSYTSS32	0x0b
+#	define DESCRIPTOR_CALLGATE32	0x0c
+#	define DESCRIPTOR_INTGATE32	0x0e
+#	define DESCRIPTOR_TRAPGATE32	0x0f
+#	define DESCRIPTOR_DATA_RO	0x10
+#	define DESCRIPTOR_DATA_RO_ACC	0x11
+#	define DESCRIPTOR_DATA_RW	0x12
+#	define DESCRIPTOR_DATA_RW_ACC	0x13
+#	define DESCRIPTOR_DOWN_RO	0x14
+#	define DESCRIPTOR_DOWN_RO_ACC	0x15
+#	define DESCRIPTOR_DOWN_RW	0x16
+#	define DESCRIPTOR_DOWN_RW_ACC	0x17
+#	define DESCRIPTOR_CODE_XO	0x18
+#	define DESCRIPTOR_CODE_XO_ACC	0x19
+#	define DESCRIPTOR_CODE_XR	0x1a
+#	define DESCRIPTOR_CODE_XR_ACC	0x1b
+#	define DESCRIPTOR_CONF_XO	0x1c
+#	define DESCRIPTOR_CONF_XO_ACC	0x1d
+#	define DESCRIPTOR_CONF_XR	0x1e
+#	define DESCRIPTOR_CONF_XR_ACC	0x1f
+#define DESCRIPTOR_A		0
+#define DESCRIPTOR_W		1
+#define DESCRIPTOR_R		1
+#define DESCRIPTOR_E		2
+#define DESCRIPTOR_C		2
+#define DESCRIPTOR_CODE		3
+#define DESCRIPTOR_S		4
+#define DESCRIPTOR_DPL		5
+#define DESCRIPTOR_DPL_LEN	2
+#define DESCRIPTOR_P		7
+
+#define DESCRIPTOR_AVL		12
+#define DESCRIPTOR_D		14
+#define DESCRIPTOR_B		14
+#define DESCRIPTOR_G		15
+
+/*
+ * Error code layout (different for Page Fault)
+ */
+#define EC_EXT				0
+#define EC_IDT				1
+#define EC_TI				2
+#define EC_SELECTOR_INDEX	3
+#define EC_SELECTOR_INDEX_LEN	13
+
+/*
+ * Control Register 0
+ */
+#define CR0_MBZ			0x1ffaffc0
+#define CR0_PE				0
+#define CR0_MP				1
+#define CR0_EM				2
+#define CR0_TS				3
+#define CR0_ET				4
+#define CR0_NE				5
+#define CR0_WP				16
+#define CR0_AM				18
+#define CR0_NW				29
+#define CR0_CD				30
+#define CR0_PG				31
+
+/*
+ * Control Register 3
+ */
+#define CR3_MBZ			0x00000fe7
+#define CR3_PWT			3
+#define CR3_PCD			4
+#define CR3_PHYS			12
+#define CR3_PHYS_LEN		20
+
+#define PDBR_MBZ			CR3_MBZ
+#define PDBR_PWT			CR3_PWT
+#define PDBR_PCD			CR3_PCD
+#define PDBR_PHYS			CR3_PHYS
+#define PDBR_PHYS_LEN		CR3_PHYS_LEN
+
+#define PDPTR_MBZ			0x00000007
+#define PDPTR_PWT			CR3_PWT
+#define PDPTR_PCD			CR3_PCD
+#define PDPTR_PHYS			5
+#define PDPTR_PHYS_LEN		27
+
+/*
+ * Control Register 4
+ */
+#define CR4_MBZ			0xfffff800
+#define CR4_VME			0
+#define CR4_PVI			1
+#define CR4_TSD			2
+#define CR4_DE				3
+#define CR4_PSE			4
+#define CR4_PAE			5
+#define CR4_MCE			6
+#define CR4_PGE			7
+#define CR4_PCE			8
+#define CR4_OSFXSR			9
+#define CR4_OSXMMEXCPT		10
+
+/*
+ * Page Directory Pointer Table Entry
+ */
+#define PDPTE_MBZ			0x000001e6
+#define PDPTE_MBS			0x00000001
+#define PDPTE_PWT			3
+#define PDPTE_PCD			4
+#define PDPTE_AVL			9
+#define PDPTE_AVL_LEN		3
+#define PDPTE_PHYS			12
+#define PDPTE_PHYS_LEN		40
+
+/*
+ * Page Directory Entry
+ */
+#define PDE_MBZ			0x000001c0
+#define PDE_P				0
+#define PDE_W				1
+#define PDE_U				2
+#define PDE_PWT			3
+#define PDE_PCD			4
+#define PDE_A				5
+#define PDE_LARGE_PTE		7
+#define PDE_AVL			9
+#define PDE_AVL_LEN			3
+#define PDE_PHYS			12
+#define PDE_PHYS_LEN		40
+#define PDE_NX				63
+
+/*
+ * Page Table Entry
+ */
+#define PTE4K_MBZ			0x00000080
+#define PTE2M_MBZ			0x001fe000
+#define PTE2M_MBS			(1U << PDE_LARGE_PTE)
+#define PTE4M_MBZ			0x00000000
+#define PTE4M_MBS			(1U << PDE_LARGE_PTE)
+#define PTE_P				0
+#define PTE_W				1
+#define PTE_U				2
+#define PTE_PWT			3
+#define PTE_PCD			4
+#define PTE_A				5
+#define PTE_D				6
+#define PTE4K_PAT			7
+#define PTE_G				8
+#define PTE_AVL			9
+#define PTE_AVL_LEN			3
+#define PTE2M_PAT			12
+#define PTE4M_PAT			12
+#define PTE4K_PHYS			12
+#define PTE4K_PHYS_LEN		40
+#define PTE2M_PHYS			21
+#define PTE2M_PHYS_LEN		31
+#define PTE4M_PHYS1			13
+#define PTE4M_PHYS1_LEN			9
+#define PTE4M_PHYS			22
+#define PTE4M_PHYS_LEN			10
+#define PTE_NX				63
+
+/*
+ * Debug Register 6
+ */
+#define DR6_B0				0
+#define DR6_B1				1
+#define DR6_B2				2
+#define DR6_B3				3
+#define DR6_BD				13
+#define DR6_BS				14
+#define DR6_BT				15
+
+/*
+ * Debug Register 7
+ */
+#define DR7_RW_LEN			2
+#	define DR7_RW_X			0U
+#	define DR7_RW_W			1U
+#	define DR7_RW_IO			2U
+#	define DR7_RW_RW			3U
+#define DR7_LEN_LEN			2
+#	define DR7_LEN_1			0U
+#	define DR7_LEN_2			1U
+#	define DR7_LEN_4			3U
+#define DR7_L0				0
+#define DR7_G0				1
+#define DR7_L1				2
+#define DR7_G1				3
+#define DR7_L2				4
+#define DR7_G2				5
+#define DR7_L3				6
+#define DR7_G3				7
+#define DR7_LE				8
+#define DR7_GE				9
+#define DR7_GD				13
+#define DR7_RW0			16
+#define DR7_RW0_LEN			DR7_RW_LEN
+#define DR7_LEN0			18
+#define DR7_LEN0_LEN		DR7_LEN_LEN
+#define DR7_RW1			20
+#define DR7_RW1_LEN			DR7_RW_LEN
+#define DR7_LEN1			22
+#define DR7_LEN1_LEN		DR7_LEN_LEN
+#define DR7_RW2			24
+#define DR7_RW2_LEN			DR7_RW_LEN
+#define DR7_LEN2			26
+#define DR7_LEN2_LEN		DR7_LEN_LEN
+#define DR7_RW3			28
+#define DR7_RW3_LEN			DR7_RW_LEN
+#define DR7_LEN3			30
+#define DR7_LEN3_LEN		DR7_LEN_LEN
+
+/*
+ * CPUID return values
+ */
+#define CPUID1_EAX_STEPPING		0
+#define CPUID1_EAX_STEPPING_LEN	4
+#define CPUID1_EAX_MODEL			4
+#define CPUID1_EAX_MODEL_LEN		4
+#define CPUID1_EAX_FAMILY		8
+#define CPUID1_EAX_FAMILY_LEN		4
+#define CPUID1_EAX_TYPE			12
+#define CPUID1_EAX_TYPE_LEN		2
+#define CPUID1_EAX_XMODEL		16
+#define CPUID1_EAX_XMODEL_LEN		4
+#define CPUID1_EAX_XFAMILY		20
+#define CPUID1_EAX_XFAMILY_LEN	4
+#define CPUID1_EBX_BRAND			0
+#define CPUID1_EBX_BRAND_LEN		8
+#define CPUID1_EBX_CLFLSHSZ		8
+#define CPUID1_EBX_CLFLSHSZ_LEN	8
+#define CPUID1_EBX_LPPP			16
+#define CPUID1_EBX_LPPP_LEN		8
+#define CPUID1_EBX_LAPIC_ID		24
+#define CPUID1_EBX_LAPIC_ID_LEN	8
+#define CPUID1_ECX_SSE3			0
+#define CPUID1_ECX_MONITOR		3
+#define CPUID1_ECX_DSCPL			4
+#define CPUID1_ECX_EIST			7
+#define CPUID1_ECX_TM2			8
+#define CPUID1_ECX_CID			10
+#define CPUID1_ECX_CX16			13
+#define CPUID1_ECX_xTPR			14
+#define CPUID1_EDX_FPU			0
+#define CPUID1_EDX_VME			1
+#define CPUID1_EDX_DE			2
+#define CPUID1_EDX_PSE			3
+#define CPUID1_EDX_TSC			4
+#define CPUID1_EDX_MSR			5
+#define CPUID1_EDX_PAE			6
+#define CPUID1_EDX_MCE			7
+#define CPUID1_EDX_CX8			8
+#define CPUID1_EDX_APIC			9
+#define CPUID1_EDX_SEP			11
+#define CPUID1_EDX_MTRR			12
+#define CPUID1_EDX_PGE			13
+#define CPUID1_EDX_MCA			14
+#define CPUID1_EDX_CMOV			15
+#define CPUID1_EDX_PAT			16
+#define CPUID1_EDX_PSE36			17
+#define CPUID1_EDX_PSN			18
+#define CPUID1_EDX_CLFSH			19
+#define CPUID1_EDX_DS			21
+#define CPUID1_EDX_ACPI			22
+#define CPUID1_EDX_MMX			23
+#define CPUID1_EDX_FXSR			24
+#define CPUID1_EDX_SSE			25
+#define CPUID1_EDX_SSE2			26
+#define CPUID1_EDX_SS			27
+#define CPUID1_EDX_HTT			28
+#define CPUID1_EDX_TM			29
+#define CPUID1_EDX_IA64			30
+#define CPUID1_EDX_PBE			31
+
+#define CPUID2_RESERVED			31
+
+#define CPUIDx1_AMD_EAX_STEPPING		CPUID1_EAX_STEPPING
+#define CPUIDx1_AMD_EAX_STEPPING_LEN	CPUID1_EAX_STEPPING_LEN
+#define CPUIDx1_AMD_EAX_MODEL			CPUID1_EAX_MODEL
+#define CPUIDx1_AMD_EAX_MODEL_LEN		CPUID1_EAX_MODEL_LEN
+#define CPUIDx1_AMD_EAX_FAMILY		CPUID1_EAX_FAMILY
+#define CPUIDx1_AMD_EAX_FAMILY_LEN		CPUID1_EAX_FAMILY_LEN
+#define CPUIDx1_AMD_EAX_TYPE			CPUID1_EAX_TYPE
+#define CPUIDx1_AMD_EAX_TYPE_LEN		CPUID1_EAX_TYPE_LEN
+#define CPUIDx1_AMD_EAX_XMODEL		CPUID1_EAX_XMODEL
+#define CPUIDx1_AMD_EAX_XMODEL_LEN		CPUID1_EAX_XMODEL_LEN
+#define CPUIDx1_AMD_EAX_XFAMILY		CPUID1_EAX_XFAMILY
+#define CPUIDx1_AMD_EAX_XFAMILY_LEN	CPUID1_EAX_XFAMILY_LEN
+#define CPUIDx1_AMD_EBX_BRAND			0
+#define CPUIDx1_AMD_EBX_BRAND_LEN		16
+#define CPUIDx1_ECX_LAHF			0
+#define CPUIDx1_ECX_CMP_LEGACY	1
+#define CPUIDx1_ECX_SVM		2
+#define CPUIDx1_ECX_EXT_APIC		3
+#define CPUIDx1_ECX_LOCK_MOV_CR		4
+#define CPUIDx1_ECX_3DNOW_PREFETCH	8
+#define CPUIDx1_EDX_FPU			0
+#define CPUIDx1_EDX_VME			1
+#define CPUIDx1_EDX_DE			2
+#define CPUIDx1_EDX_PSE			3
+#define CPUIDx1_EDX_TSC			4
+#define CPUIDx1_EDX_MSR			5
+#define CPUIDx1_EDX_PAE			6
+#define CPUIDx1_EDX_MCE			7
+#define CPUIDx1_EDX_CX8			8
+#define CPUIDx1_EDX_APIC			9
+#define CPUIDx1_EDX_SCR			11
+#define CPUIDx1_EDX_MTRR			12
+#define CPUIDx1_EDX_PGE			13
+#define CPUIDx1_EDX_MCA			14
+#define CPUIDx1_EDX_CMOV			15
+#define CPUIDx1_EDX_PAT			16
+#define CPUIDx1_EDX_PSE36		17
+#define CPUIDx1_EDX_NX			20
+#define CPUIDx1_EDX_MMX			22
+#define CPUIDx1_EDX_AMDMMX		23
+#define CPUIDx1_EDX_FXSR			24
+#define CPUIDx1_EDX_FXSROPT		25
+#define CPUIDx1_EDX_RDTSCP		27
+#define CPUIDx1_EDX_LM			29
+#define CPUIDx1_EDX_AMD3DNOW		30
+#define CPUIDx1_EDX_3DNOW		31
+
+#define CPUIDx5_AMD_EAX_L1ITLB_2M_NUM		0
+#define CPUIDx5_AMD_EAX_L1ITLB_2M_NUM_LEN	8
+#define CPUIDx5_AMD_EAX_L1ITLB_2M_ASSOC		8
+#define CPUIDx5_AMD_EAX_L1ITLB_2M_ASSOC_LEN	8
+#define CPUIDx5_AMD_EAX_L1DTLB_2M_NUM		16
+#define CPUIDx5_AMD_EAX_L1DTLB_2M_NUM_LEN	8
+#define CPUIDx5_AMD_EAX_L1DTLB_2M_ASSOC		24
+#define CPUIDx5_AMD_EAX_L1DTLB_2M_ASSOC_LEN	8
+#define CPUIDx5_AMD_EBX_L1ITLB_4K_NUM		0
+#define CPUIDx5_AMD_EBX_L1ITLB_4K_NUM_LEN	8
+#define CPUIDx5_AMD_EBX_L1ITLB_4K_ASSOC		8
+#define CPUIDx5_AMD_EBX_L1ITLB_4K_ASSOC_LEN	8
+#define CPUIDx5_AMD_EBX_L1DTLB_4K_NUM		16
+#define CPUIDx5_AMD_EBX_L1DTLB_4K_NUM_LEN	8
+#define CPUIDx5_AMD_EBX_L1DTLB_4K_ASSOC		24
+#define CPUIDx5_AMD_EBX_L1DTLB_4K_ASSOC_LEN	8
+#define CPUIDx5_AMD_ECX_L1IC_LINESIZE		0
+#define CPUIDx5_AMD_ECX_L1IC_LINESIZE_LEN	8
+#define CPUIDx5_AMD_ECX_L1IC_ASSOC			8
+#define CPUIDx5_AMD_ECX_L1IC_ASSOC_LEN		8
+#define CPUIDx5_AMD_ECX_L1IC_LPT			16
+#define CPUIDx5_AMD_ECX_L1IC_LPT_LEN		8
+#define CPUIDx5_AMD_ECX_L1IC_SIZE			24
+#define CPUIDx5_AMD_ECX_L1IC_SIZE_LEN		8
+#define CPUIDx5_AMD_EDX_L1DC_LINESIZE		0
+#define CPUIDx5_AMD_EDX_L1DC_LINESIZE_LEN	8
+#define CPUIDx5_AMD_EDX_L1DC_ASSOC			8
+#define CPUIDx5_AMD_EDX_L1DC_ASSOC_LEN		8
+#define CPUIDx5_AMD_EDX_L1DC_LPT			16
+#define CPUIDx5_AMD_EDX_L1DC_LPT_LEN		8
+#define CPUIDx5_AMD_EDX_L1DC_SIZE			24
+#define CPUIDx5_AMD_EDX_L1DC_SIZE_LEN		8
+
+#define CPUIDx6_AMD_EAX_L2ITLB_2M_NUM		0
+#define CPUIDx6_AMD_EAX_L2ITLB_2M_NUM_LEN	12
+#define CPUIDx6_AMD_EAX_L2ITLB_2M_ASSOC		12
+#define CPUIDx6_AMD_EAX_L2ITLB_2M_ASSOC_LEN	4
+#define CPUIDx6_AMD_EAX_L2DTLB_2M_NUM		16
+#define CPUIDx6_AMD_EAX_L2DTLB_2M_NUM_LEN	12
+#define CPUIDx6_AMD_EAX_L2DTLB_2M_ASSOC		28
+#define CPUIDx6_AMD_EAX_L2DTLB_2M_ASSOC_LEN	4
+#define CPUIDx6_AMD_EBX_L2ITLB_4K_NUM		0
+#define CPUIDx6_AMD_EBX_L2ITLB_4K_NUM_LEN	12
+#define CPUIDx6_AMD_EBX_L2ITLB_4K_ASSOC		12
+#define CPUIDx6_AMD_EBX_L2ITLB_4K_ASSOC_LEN	4
+#define CPUIDx6_AMD_EBX_L2DTLB_4K_NUM		16
+#define CPUIDx6_AMD_EBX_L2DTLB_4K_NUM_LEN	12
+#define CPUIDx6_AMD_EBX_L2DTLB_4K_ASSOC		28
+#define CPUIDx6_AMD_EBX_L2DTLB_4K_ASSOC_LEN	4
+#define CPUIDx6_AMD_ECX_L2UC_LINESIZE		0
+#define CPUIDx6_AMD_ECX_L2UC_LINESIZE_LEN	8
+#define CPUIDx6_AMD_ECX_L2UC_ASSOC			8
+#define CPUIDx6_AMD_ECX_L2UC_ASSOC_LEN		4
+#define CPUIDx6_AMD_ECX_L2UC_LPT			12
+#define CPUIDx6_AMD_ECX_L2UC_LPT_LEN		4
+#define CPUIDx6_AMD_ECX_L2UC_SIZE			16
+#define CPUIDx6_AMD_ECX_L2UC_SIZE_LEN		16
+
+#define CPUIDx7_AMD_EDX_TS			0
+#define CPUIDx7_AMD_EDX_FID			1
+#define CPUIDx7_AMD_EDX_VID			2
+#define CPUIDx7_AMD_EDX_TTP			3
+#define CPUIDx7_AMD_EDX_TM			4
+#define CPUIDx7_AMD_EDX_STC			5
+#define CPUIDx7_AMD_EDX_100MHZ			6
+
+#define CPUIDx8_EAX_PA_BITS			0
+#define CPUIDx8_EAX_PA_BITS_LEN		8
+#define CPUIDx8_EAX_VA_BITS			8
+#define CPUIDx8_EAX_VA_BITS_LEN		16
+#define CPUIDx8_ECX_MAX_CORE			0
+#define CPUIDx8_ECX_MAX_CORE_LEN		8
+
+#define CPUIDxA_EAX_SVMREV		0
+#define CPUIDxA_EAX_SVMREV_LEN		8
+#define CPUIDxA_EAX_0			8
+#define CPUIDxA_EDX_NP			0
+
+#ifndef __ASSEMBLY__
+
+typedef union {
+	uint64_t	q;
+	uint32_t	d[2];
+	uint16_t	w[4];
+	uint8_t	b[8];
+} mmxreg_t;
+
+typedef union {
+	double	dbl[2];
+	float	flt[4];
+	uint64_t	q[2];
+	uint32_t	d[4];
+	uint16_t	w[8];
+	uint8_t	b[16];
+} xmmreg_t;
+
+/*
+ * FXSAVE / FXRSTOR layout
+ */
+typedef struct {
+	uint16_t	fcw;
+	uint16_t	fsw;
+	uint8_t	ftw;
+	uint8_t	_rsrvd1_;
+	uint16_t	fop;
+	uint32_t	fip;
+	uint16_t	fcs;
+	uint16_t	_rsrvd2_;
+	uint32_t	fdp;
+	uint16_t	fds;
+	uint16_t	_rsrvd3_;
+	uint32_t	mxcsr;
+	uint32_t	mxcsr_mask;
+	union {
+		struct {
+			uint64_t	mant;
+			uint32_t	exp:15;
+			int32_t	sign:1;
+			uint32_t	_pad_;
+		}		fp;
+		mmxreg_t	mmx;
+	}		reg[8];
+	xmmreg_t	xmm[8];
+	uint8_t	_rsrvd5_[14*16];
+} fxsave_t __attribute__((__aligned__(16)));
+
+#pragma pack(push, 2)
+
+/*
+ * FSAVE / FRSTOR layout
+ */
+typedef struct {
+	uint16_t	fcw;
+	uint16_t	_rsrvd1_;
+	uint16_t	fsw;
+	uint16_t	_rsrvd2_;
+	uint16_t	ftw;
+	uint16_t	_rsrvd3_;
+	uint32_t	fip;
+	uint16_t	fcs;
+	uint16_t	fop:11;
+	uint16_t	:5;
+	uint32_t	fdp;
+	uint16_t	fds;
+	uint16_t	_rsrvd4_;
+	union {
+		struct {
+			uint64_t	mant;
+			uint16_t	exp:15;
+			int16_t	sign:1;
+		}		fp;
+		mmxreg_t	mmx;
+	}		reg[8];
+} fsave_t;
+
+/*
+ * Descriptor Attributes
+ */
+typedef struct {
+	uint8_t	type:5;
+	uint8_t	dpl:2;
+	uint8_t	p:1;
+} DescriptorAttributes_t;
+
+/*
+ * Descriptor Table Entry
+ */
+typedef union {
+	struct {
+		uint16_t	limitLow;
+		uint16_t	baseLow;
+		uint8_t	baseMid;
+		union {
+			uint8_t	attrLow;
+			DescriptorAttributes_t attr;
+		};
+		union {
+			uint8_t	attrHigh;
+			struct {
+				uint8_t	limitHigh:4;
+				uint8_t	avl:1;
+				uint8_t	:1;
+				uint8_t	d:1;
+				uint8_t	g:1;
+			};
+		};
+		uint8_t	baseHigh;
+	}		segment;
+	struct {
+		uint16_t	offsetLow;
+		uint16_t	selector;
+		union {
+			uint16_t	control;
+			struct {
+				uint8_t	numParms:5;
+				uint8_t	:3;
+				DescriptorAttributes_t attr;
+			};
+		};
+		uint16_t	offsetHigh;
+	}		gate;
+} DescriptorTableEntry_t;
+
+#define IS_SEGMENT(d)		(((d).segment.attrLow & 0x14) != 0x04)
+#define IS_SEGMENT_EXEC(d)	(((d).segment.attrLow & ((1U << DESCRIPTOR_S) | (1U << DESCRIPTOR_CODE))) \
+							== ((1U << DESCRIPTOR_S) | (1U << DESCRIPTOR_CODE)))
+#define IS_SEGMENT_READ(d)	(((d).segment.attrLow & ((1U << DESCRIPTOR_S) | (1U << DESCRIPTOR_CODE))) \
+							== (1U << DESCRIPTOR_S) \
+						   || ((d).segment.attrLow & ((1U << DESCRIPTOR_S) | (1U << DESCRIPTOR_CODE) | (1U << DESCRIPTOR_R))) \
+							== ((1U << DESCRIPTOR_S) | (1U << DESCRIPTOR_CODE) | (1U << DESCRIPTOR_R)))
+#define IS_SEGMENT_WRITE(d)	(((d).segment.attrLow & ((1U << DESCRIPTOR_S) | (1U << DESCRIPTOR_CODE) | (1U << DESCRIPTOR_W))) \
+							== ((1U << DESCRIPTOR_S) | (1U << DESCRIPTOR_W)))
+#define SEGMENT_BASE(d)		((d).segment.baseLow | ((uint32_t)(d).segment.baseMid << 16) | ((uint32_t)(d).segment.baseHigh << 24))
+#define SEGMENT_LIMIT(d)		((d).segment.g \
+							? ((uint32_t)(d).segment.limitLow << 12) | ((uint32_t)(d).segment.limitHigh << 28) | 0xfff \
+							: (d).segment.limitLow | ((uint32_t)(d).segment.limitHigh << 16))
+
+#define IS_GATE(d)			(((d).gate.control & 0x1400) == 0x0400)
+#define GATE_SELECTOR(d)		((d).gate.selector)
+#define GATE_OFFSET(d)		((d).gate.offsetLow | ((uint32_t)(d).gate.offsetHigh << 16))
+
+/*
+ * GDTR/IDTR memory format
+ */
+typedef struct {
+	uint16_t limit;
+	uint32_t base;
+} PseudoDescriptor_t;
+
+#pragma pack(pop)
+
+#endif /* __ASSEMBLY__ */
+
+/*
+ * FPU Control Word
+ */
+#define FCW_MBZ					0xe0c0
+#define FCW_IM					0
+#define FCW_DM					1
+#define FCW_ZM					2
+#define FCW_OM					3
+#define FCW_UM					4
+#define FCW_PM					5
+#define FCW_PC					8
+#define FCW_PC_LEN				2
+#	define FCW_PC_SINGLE			0U
+#	define FCW_PC_DOUBLE			2U
+#	define FCW_PC_EXTENDED			3U
+#define FCW_RC					10
+#define FCW_RC_LEN				2
+/* The rounding control values are used for both FCW and MXCSR. */
+#	define RC_NEAREST				0U
+#	define RC_DOWN					1U
+#	define RC_UP					2U
+#	define RC_CHOP					3U
+#	define RC_TRUNCATE				RC_CHOP
+#define FCW_X					12
+
+/*
+ * FPU Status Word
+ */
+#define FSW_IE					0
+#define FSW_DE					1
+#define FSW_ZE					2
+#define FSW_OE					3
+#define FSW_UE					4
+#define FSW_PE					5
+#define FSW_SF					6
+#define FSW_ES					7
+#define FSW_C0					8
+#define FSW_C1					9
+#define FSW_C2					10
+#define FSW_TOP				11
+#define FSW_TOP_LEN				3
+#define FSW_C3					14
+#define FSW_B					15
+
+/*
+ * FPU Tag Word
+ */
+#define FTW_TAG_LEN				2
+#	define FTW_VALID				0U
+#	define FTW_ZERO				1U
+#	define FTW_SPECIAL				2U
+#	define FTW_EMPTY				3U
+
+/*
+ * MMX Control and Status Register
+ */
+#define MXCSR_IE				0
+#define MXCSR_DE				1
+#define MXCSR_ZE				2
+#define MXCSR_OE				3
+#define MXCSR_UE				4
+#define MXCSR_PE				5
+#define MXCSR_DAZ				6
+#define MXCSR_IM				7
+#define MXCSR_DM				8
+#define MXCSR_ZM				9
+#define MXCSR_OM				10
+#define MXCSR_UM				11
+#define MXCSR_PM				12
+#define MXCSR_RC				13
+#define MXCSR_RC_LEN			2
+#define MXCSR_FZ				15
+
+#ifndef __ASSEMBLY__
+
+/*
+ * 32-bit Task State Segment layout
+ */
+typedef struct {
+	uint16_t	backlink, _backlink_pad;
+	uint32_t	esp0;
+	uint16_t	ss0, _ss0_pad;
+	uint32_t	esp1;
+	uint16_t	ss1, _ss1_pad;
+	uint32_t	esp2;
+	uint16_t	ss2, _ss2_pad;
+	union {
+		uint32_t	cr3;
+		uint32_t	pdbr;
+		uint32_t	pdptr;
+	};
+	uint32_t	eip;
+	uint32_t	eflags;
+	uint32_t	eax;
+	uint32_t	ecx;
+	uint32_t	edx;
+	uint32_t	ebx;
+	uint32_t	esp;
+	uint32_t	ebp;
+	uint32_t	esi;
+	uint32_t	edi;
+	uint16_t	es, _es_pad;
+	uint16_t	cs, _cs_pad;
+	uint16_t	ss, _ss_pad;
+	uint16_t	ds, _ds_pad;
+	uint16_t	fs, _fs_pad;
+	uint16_t	gs, _gs_pad;
+	uint16_t	ldtr, _ldtr_pad;
+	uint16_t	t:1;
+	uint16_t	iobase;
+} tss32_t;
+
+#endif
+
+/*
+ * MSR indexes
+ */
+#define IA32_TIMESTAMP_COUNTER	0x10
+#define IA32_PLATFORM_ID			0x17
+#define IA32_APIC_BASE			0x1b
+#define IA32_BIOS_UPDATE_TRIG		0x79
+#define IA32_BIOS_SIGN_ID		0x8b
+#define IA32_MTRRCAP			0xfe
+#define IA32_MISC_CTL			0x119
+#define IA32_SYSENTER_CS			0x174
+#define IA32_SYSENTER_ESP		0x175
+#define IA32_SYSENTER_EIP		0x176
+#define IA32_MCG_CAP			0x179
+#define IA32_MCG_STATUS			0x17a
+#define IA32_MCG_CTL			0x17b
+#define IA32_MCG_EAX			0x180
+#define IA32_MCG_EBX			0x181
+#define IA32_MCG_ECX			0x182
+#define IA32_MCG_EDX			0x183
+#define IA32_MCG_ESI			0x184
+#define IA32_MCG_EDI			0x185
+#define IA32_MCG_EBP			0x186
+#define IA32_MCG_ESP			0x187
+#define IA32_MCG_EFLAGS			0x188
+#define IA32_MCG_EIP			0x189
+#define IA32_MCG_MISC			0x18a
+#define IA32_TERM_CONTROL		0x19a
+#define IA32_TERM_INTERRUPT		0x19b
+#define IA32_TERM_STATUS			0x19c
+#define IA32_MISC_ENAB			0x1a0
+#define IA32_DEBUGCTL			0x1d9
+#define IA32_MTRR_PHYSBASE0		0x200
+#define IA32_MTRR_PHYSMASK0		0x201
+#define IA32_MTRR_FIX64K_00000	0x250
+#define IA32_MTRR_FIX16K_80000	0x258
+#define IA32_MTRR_FIX16K_A0000	0x259
+#define IA32_MTRR_FIX4K_C0000		0x268
+#define IA32_MTRR_FIX4K_C8000		0x269
+#define IA32_MTRR_FIX4K_D0000		0x26a
+#define IA32_MTRR_FIX4K_D8000		0x26b
+#define IA32_MTRR_FIX4K_E0000		0x26c
+#define IA32_MTRR_FIX4K_E8000		0x26d
+#define IA32_MTRR_FIX4K_F0000		0x26e
+#define IA32_MTRR_FIX4K_F8000		0x26f
+#define IA32_CR_PAT				0x277
+#define IA32_MTRR_DEFTYPE		0x2ff
+#define IA32_PEBS_ENABLE			0x3f1
+#define IA32_MCi_START			0x400
+#	define IA32_MCi_STEP			4
+#	define IA32_MCi_CTL_OFFSET		0
+#	define IA32_MCi_STATUS_OFFSET		1
+#	define IA32_MCi_ADDR_OFFSET		2
+#	define IA32_MCi_MISC_OFFSET		3
+#define IA32_DTES_AREA			0x600
+
+/*
+ * IA32_APIC_BASE
+ */
+#define APIC_BASE_BSP			8
+#define APIC_BASE_ENABLE			11
+#define APIC_BASE_BASE			12
+#define APIC_BASE_BASE_LEN		24
+
+/*
+ * IA32_MTRRCAP
+ */
+#define MTRRCAP_VCNT			0
+#define MTRRCAP_VCNT_LEN			8
+#define MTRRCAP_FIX				8
+#define MTRRCAP_WC				10
+
+/*
+ * IA32_DEBUGCTL
+ */
+#define DEBUGCTL_LBR			0
+#define DEBUGCTL_BTF			1
+
+/*
+ * IA32_MTRR_DEFTYPE
+ */
+#define MTRR_DEFTYPE_TYPE		0
+#define MTRR_DEFTYPE_TYPE_LEN		8
+#define MTRR_DEFTYPE_FE			10
+#define MTRR_DEFTYPE_E			11
+
+/*
+ * IA32_MTRR_PHYSBASEx
+ */
+#define MTRR_PHYSBASE_TYPE		0
+#define MTRR_PHYSBASE_TYPE_LEN	8
+#define MTRR_PHYSBASE_BASE		12
+#define MTRR_PHYSBASE_BASE_LEN	24
+
+/*
+ * IA32_MTRR_PHYSMASKx
+ */
+#define MTRR_PHYSMASK_V			11
+#define MTRR_PHYSMASK_MASK		12
+#define MTRR_PHYSMASK_MASK_LEN	24
+
+/*
+ * Memory Attributes (MTRRs & PAT)
+ */
+#define IA32_MA_UC				0x00
+#define IA32_MA_WC				0x01
+#define IA32_MA_WT				0x04
+#define IA32_MA_WP				0x05
+#define IA32_MA_WB				0x06
+#define IA32_MA_UC_MINUS			0x07		/* PAT only */
+
+/*
+ * IA32_MCG_CAP
+ */
+#define IA32_MCG_CAP_COUNT		0
+#define IA32_MCG_CAP_COUNT_LEN	8
+#define IA32_MCG_CTL_P			8
+
+/*
+ * IA32_MCG_STATUS
+ */
+#define IA32_MCG_STATUS_RIPV		0
+#define IA32_MCG_STATUS_EIPV		1
+#define IA32_MCG_STATUS_MCIP		2
+
+/*
+ * IA32_MCi
+ */
+#define IA32_MCi_STATUS_MCA_EC	0
+#define IA32_MCi_STATUS_MCA_EC_LEN	16
+#define IA32_MCi_STATUS_MOD_EC	16
+#define IA32_MCi_STATUS_MOD_EC_LEN	16
+#define IA32_MCi_STATUS_PCC		57
+#define IA32_MCi_STATUS_ADDRV		58
+#define IA32_MCi_STATUS_MISCV		59
+#define IA32_MCi_STATUS_EN		60
+#define IA32_MCi_STATUS_UC		61
+#define IA32_MCi_STATUS_OVER		62
+#define IA32_MCi_STATUS_VAL		63
+
+#endif /* _ASM_IA_32_H */

  reply	other threads:[~2005-11-09 14:19 UTC|newest]

Thread overview: 105+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-11-09 13:54 [PATCH 0/39] NLKD - Novell Linux Kernel Debugger Jan Beulich
2005-11-09 13:56 ` [PATCH 1/39] NLKD - an alternative kallsyms approach Jan Beulich
2005-11-09 13:57   ` [PATCH 2/39] NLKD - an alternative early ioremap approach Jan Beulich
2005-11-09 13:58     ` [PATCH 3/39] NLKD - early/late CPU up/down notification Jan Beulich
2005-11-09 13:59       ` [PATCH 4/39] NLKD/i386 " Jan Beulich
2005-11-09 14:01       ` [PATCH 5/39] NLKD/x86-64 " Jan Beulich
2005-11-10 13:10         ` Andi Kleen
2005-11-14  8:04           ` [discuss] " Jan Beulich
2005-11-14 12:37             ` Andi Kleen
2005-11-09 14:01       ` [PATCH 6/39] NLKD - early panic notification Jan Beulich
2005-11-09 14:02         ` [PATCH 7/39] NLKD - task create/destroy notification Jan Beulich
2005-11-09 14:03           ` [PATCH 8/39] NLKD - rmmod notification Jan Beulich
2005-11-09 14:04             ` [PATCH 9/39] NLKD - hotkey notification Jan Beulich
2005-11-09 14:05               ` [PATCH 10/39] NLKD - console layout change notification Jan Beulich
2005-11-09 14:06                 ` [PATCH 11/39] NLKD - time adjustment Jan Beulich
2005-11-09 14:06                   ` [PATCH 12/39] NLKD/i386 " Jan Beulich
2005-11-09 19:10                     ` George Anzinger
2005-11-10  8:12                       ` Jan Beulich
2005-11-11  0:17                         ` George Anzinger
2005-11-09 14:08                   ` [PATCH 13/39] NLKD/x86-64 " Jan Beulich
2005-11-09 14:13                     ` [PATCH 18/39] NLKD/x86-64 - INT1/INT3 handling changes Jan Beulich
2005-11-09 14:14                       ` [PATCH 19/39] NLKD/x86-64 - stack-pointer-invalid markers Jan Beulich
2005-11-09 14:15                         ` [PATCH 20/39] NLKD/x86-64 - switch_to() floating point adjustment Jan Beulich
2005-11-09 14:16                           ` [PATCH 21/39] NLKD/x86-64 - core adjustments Jan Beulich
2005-11-10 13:24                           ` [PATCH 20/39] NLKD/x86-64 - switch_to() floating point adjustment Andi Kleen
2005-11-10 14:07                             ` Jan Beulich
2005-11-10 13:23                         ` [PATCH 19/39] NLKD/x86-64 - stack-pointer-invalid markers Andi Kleen
2005-11-10 14:25                           ` Jan Beulich
2005-11-10 13:21                       ` [PATCH 18/39] NLKD/x86-64 - INT1/INT3 handling changes Andi Kleen
2005-11-10 14:07                         ` Jan Beulich
2005-11-10 14:25                           ` Andi Kleen
2005-11-10 15:00                             ` Jan Beulich
2005-11-11  3:39                               ` [discuss] " Andi Kleen
2005-11-10 13:19                     ` [PATCH 13/39] NLKD/x86-64 - time adjustment Andi Kleen
2005-11-10 14:23                       ` Jan Beulich
2005-11-11  2:12                         ` Andi Kleen
2005-11-12  9:22                           ` Vojtech Pavlik
2005-11-12 17:21                             ` Andi Kleen
2005-11-12 20:44                               ` Vojtech Pavlik
2005-11-15  0:38                                 ` George Anzinger
2005-11-15  1:05                                   ` [discuss] " Andi Kleen
2005-11-15  7:50                                     ` Vojtech Pavlik
2005-11-15  8:24                                       ` Jan Beulich
2005-11-10 14:43                       ` Vojtech Pavlik
2005-11-09 14:09                   ` [PATCH 14/39] NLKD - kernel trace buffer access Jan Beulich
2005-11-09 14:09                     ` [PATCH 15/39] NLKD - early pseudo-fs Jan Beulich
2005-11-09 14:11                       ` [PATCH 16/39] NLKD - core adjustments Jan Beulich
2005-11-09 14:11                         ` [PATCH 17/39] NLKD/i386 " Jan Beulich
2005-11-09 19:00                           ` Adrian Bunk
2005-11-10  8:04                             ` Jan Beulich
2005-11-10 10:29                               ` Adrian Bunk
2005-11-10 11:52                                 ` Jan Beulich
2005-11-10 12:36                                   ` Lars Marowsky-Bree
2005-11-09 14:18                         ` [PATCH 22/39] NLKD - core Jan Beulich
2005-11-09 14:19                           ` [PATCH 23/39] NLKD/x86 " Jan Beulich
2005-11-09 14:20                             ` Jan Beulich [this message]
2005-11-09 14:21                             ` [PATCH 25/39] NLKD/x86-64 " Jan Beulich
2005-11-10 13:30                               ` Andi Kleen
2005-11-09 14:22                           ` [PATCH 26/39] NLKD - run time library Jan Beulich
2005-11-09 14:23                             ` [PATCH 27/39] NLKD/i386 " Jan Beulich
2005-11-09 14:23                               ` [PATCH 28/39] NLKD/x86-64 " Jan Beulich
2005-11-10 13:32                                 ` Andi Kleen
     [not found]                             ` <437214B7.76F0.0078.0@novell.com>
     [not found]                               ` <4372156A.76F0.0078.0@novell.com>
2005-11-09 14:28                                 ` [PATCH 34/39] NLKD/x86 - Console Debug Agent Jan Beulich
     [not found]                                 ` <43721600.76F0.0078.0@novell.com>
2005-11-09 14:30                                   ` [PATCH 38/39] NLKD/i386 - Remote " Jan Beulich
2005-11-09 14:31                                   ` [PATCH 39/39] NLKD/x86-64 " Jan Beulich
2005-11-09 14:29                       ` [PATCH 15/39] NLKD - early pseudo-fs Al Viro
2005-11-09 14:37                         ` Jan Beulich
2005-11-09 15:00                           ` Al Viro
2005-11-09 16:00                             ` Jan Beulich
2005-11-10  5:44                     ` [PATCH 14/39] NLKD - kernel trace buffer access Keith Owens
2005-11-10  8:02                       ` Jan Beulich
2005-11-09 18:51                   ` [PATCH 11/39] NLKD - time adjustment George Anzinger
2005-11-09 16:50         ` [PATCH 6/39] NLKD - early panic notification Greg KH
2005-11-09 16:45       ` [PATCH 3/39] NLKD - early/late CPU up/down notification Greg KH
2005-11-09 17:09         ` Jan Beulich
2005-11-09 17:19           ` Greg KH
2005-11-10  7:41             ` Jan Beulich
2005-11-10 20:59               ` Sam Ravnborg
2005-11-11  7:52                 ` Jan Beulich
2005-11-12 20:52                   ` Randy.Dunlap
2005-11-10 23:01               ` Greg KH
2005-11-11 10:06     ` [PATCH 2/39] NLKD - an alternative early ioremap approach Pavel Machek
2005-11-11 10:19       ` Jan Beulich
2005-11-09 16:50   ` [PATCH 1/39] NLKD - an alternative kallsyms approach Randy.Dunlap
2005-11-09 16:57     ` Greg KH
2005-11-09 17:20     ` Jan Beulich
2005-11-09 16:59 ` [PATCH 0/39] NLKD - Novell Linux Kernel Debugger Jeff Garzik
2005-11-09 17:06   ` Randy.Dunlap
2005-11-09 17:14     ` Jan Beulich
2005-11-09 17:56       ` Alan Cox
2005-11-09 18:05       ` Greg KH
2005-11-09 18:54       ` Paul Jackson
2005-11-10 12:41       ` Christoph Hellwig
2005-11-13  1:09     ` Andi Kleen
2005-11-13  2:53       ` jmerkey
2005-11-13  3:44         ` Andi Kleen
2005-11-13  3:26           ` Jeff V. Merkey
2005-11-13  3:32             ` Jeff V. Merkey
2005-11-09 17:53   ` Alan Cox
2005-11-09 16:25     ` Jeffrey V. Merkey
2005-11-10 14:48     ` Mark Lord
2005-11-10 15:28       ` Tom Rini
2005-11-10 16:37       ` Alan Cox
2005-11-13  1:11       ` Andi Kleen
     [not found] ` <437214E4.76F0.0078.0@novell.com>
     [not found]   ` <4372153C.76F0.0078.0@novell.com>
2005-11-10 13:33     ` [PATCH 32/39] NLKD/x86-64 - Core Debug Engine Andi Kleen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=437213AB.76F0.0078.0@novell.com \
    --to=jbeulich@novell.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox