All of lore.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 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.