mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Jan Beulich" <JBeulich@novell.com>
To: "Andreas Kleen" <ak@suse.de>
Cc: <linux-kernel@vger.kernel.org>, <discuss@x86-64.org>
Subject: [PATCH 25/39] NLKD/x86-64 - core
Date: Wed, 09 Nov 2005 15:21:04 +0100	[thread overview]
Message-ID: <437213E0.76F0.0078.0@novell.com> (raw)
In-Reply-To: <4372138D.76F0.0078.0@novell.com>

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

The core x86-64 NLKD additions.

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

(actual patch attached)


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

The core x86-64 NLKD additions.

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

Index: 2.6.14-nlkd/arch/x86_64/Kconfig.debug
===================================================================
--- 2.6.14-nlkd.orig/arch/x86_64/Kconfig.debug	2005-11-09 11:12:39.000000000 +0100
+++ 2.6.14-nlkd/arch/x86_64/Kconfig.debug	2005-11-04 16:19:33.000000000 +0100
@@ -1,6 +1,7 @@
 menu "Kernel hacking"
 
 source "lib/Kconfig.debug"
+source "debug/Kconfig"
 
 # !SMP for now because the context switch early causes GPF in segment reloading
 # and the GS base checking does the wrong thing then, causing a hang.
Index: 2.6.14-nlkd/arch/x86_64/kernel/asm-offsets.c
===================================================================
--- 2.6.14-nlkd.orig/arch/x86_64/kernel/asm-offsets.c	2005-11-04 17:14:08.000000000 +0100
+++ 2.6.14-nlkd/arch/x86_64/kernel/asm-offsets.c	2005-11-04 17:14:08.000000000 +0100
@@ -14,6 +14,13 @@
 #include <asm/segment.h>
 #include <asm/thread_info.h>
 #include <asm/ia32.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))
@@ -39,6 +46,7 @@ int main(void)
 	ENTRY(kernelstack); 
 	ENTRY(oldrsp); 
 	ENTRY(pcurrent); 
+	ENTRY(data_offset);
 	ENTRY(irqcount);
 	ENTRY(cpunumber);
 	ENTRY(irqstackptr);
@@ -65,9 +73,71 @@ int main(void)
 	DEFINE(pbe_orig_address, offsetof(struct pbe, orig_address));
 	DEFINE(pbe_next, offsetof(struct pbe, next));
 	BLANK();
+#define ENTRY(f) DEFINE(TSS_##f, offsetof (struct tss_struct, f))
+	ENTRY(rsp0);
+	ENTRY(rsp1);
+	ENTRY(rsp2);
+	ENTRY(ist);
+#undef ENTRY
+	BLANK();
 	DEFINE(EXCEPTION_STACK_SIZE, EXCEPTION_STKSZ);
 #if DEBUG_STKSZ > EXCEPTION_STKSZ
 	DEFINE(DEBUG_IST, DEBUG_STACK);
 #endif
+#ifdef CONFIG_NLKD
+	DEFINE(NMI_IST, NMI_STACK);
+	BLANK();
+# define FRAME_TYPE(t) DEFINE(AMD64_##t, AMD64_##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(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);
+	BLANK();
+# undef FRAME_TYPE
+# define FRAME_DEF(f) DEFINE(FRAME_##f, offsetof (struct ftaInterruptionCtx_s, f))
+	FRAME_DEF(type);
+	FRAME_DEF(sub_type);
+	FRAME_DEF(state);
+	FRAME_DEF(es);
+	FRAME_DEF(ds);
+	FRAME_DEF(fs);
+	FRAME_DEF(gs);
+	FRAME_DEF(ldtr);
+	FRAME_DEF(tr);
+	FRAME_DEF(fs_base);
+	FRAME_DEF(gs_base);
+	FRAME_DEF(cr0);
+	FRAME_DEF(cr2);
+	FRAME_DEF(cr3);
+	FRAME_DEF(cr4);
+	FRAME_DEF(cr8);
+	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, CDE_VALID_SPINLOCK_SIGNATURE);
+	DEFINE(CDE_SPINLOCK_NOT_OWNED,       CDE_SPINLOCK_NOT_OWNED);
+#endif
 	return 0;
 }
Index: 2.6.14-nlkd/debug/nlkd/asm-amd64.h
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/debug/nlkd/asm-amd64.h	2005-11-07 12:11:27.000000000 +0100
@@ -0,0 +1,100 @@
+/*****************************************************************************
+ *
+ *   File Name:      asm-amd64.h
+ *   Created by:     Jan Beulich
+ *   %version:       7 %
+ *   %derived_by:    jbeulich %
+ *   %date_modified: Thu Nov 03 04:13:21 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_AMD64_H)
+#define ASM_AMD64_H
+
+#include <linux/config.h>
+#include <linux/version.h>
+
+#ifdef CONFIG_UNWIND_INFO
+.equiv eh.rax, 0
+.equiv eh.rcx, 1
+.equiv eh.rdx, 2
+.equiv eh.rbx, 3
+.equiv eh.rsp, 4
+.equiv eh.rbp, 5
+.equiv eh.rsi, 6
+.equiv eh.rdi, 7
+.equiv eh.r8, 8
+.equiv eh.r9, 9
+.equiv eh.r10, 10
+.equiv eh.r11, 11
+.equiv eh.r12, 12
+.equiv eh.r13, 13
+.equiv eh.r14, 14
+.equiv eh.r15, 15
+.equiv eh.es, 16
+.equiv eh.cs, 17
+.equiv eh.ss, 18
+.equiv eh.ds, 19
+.equiv eh.fs, 20
+.equiv eh.gs, 21
+
+# define SP rsp
+# define BP rbp
+# define FLAGS rflags
+.equiv .eh.stkword, qword
+.equiv .eh.preserved, (1 << eh.rbx) | (1 << eh.rbp) | (1 << eh.r12) | (1 << eh.r13) | (1 << eh.r14) | (1 << eh.r15) \
+                      | (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
+ .ifeqs "gs", "&sreg"
+ 	swapgs
+ .endif
+	mov	sreg, aux
+	jmp	skip
+ .previous
+ .section __ex_table, "a"
+ .align	qword
+ .quad	set, adj
+ .previous
+.endm
+
+#endif /* ASM_AMD64_H */
Index: 2.6.14-nlkd/debug/nlkd/nlkdAMD64.S
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/debug/nlkd/nlkdAMD64.S	2005-10-07 17:18:42.000000000 +0200
@@ -0,0 +1,75 @@
+/*****************************************************************************
+ *
+ *   File Name:      nlkdAMD64.S
+ *   Created by:     jbeulich
+ *   %version:       2 %
+ *   %derived_by:    jbeulich %
+ *   %date_modified: Fri Oct 07 09:18:32 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:
+ *
+ ****************************************************************************/
+
+.equiv PROCEDURE_ALIGN, 1
+#include "asm-amd64.h"
+#include <linux/nlkd.h>
+
+//todo .file "nlkd"
+.text
+
+// void nlkdDebugEvent(nint_t eventCode, ...);
+.pubproc nlkdDebugEvent
+	cmp	dword ptr [rip+nlkdAgentCount], 0
+	jg	0f
+	test	di, di
+	jg	1f
+0:
+	movsx	eax, di
+	mov	rdi, rsi
+	mov	rsi, rdx
+	mov	rdx, rcx
+	mov	rcx, r8
+	mov	r8, r9
+ .hidentry _nlkdEnterDebuggerInstruction_
+	int	3
+1:
+	ret
+.endp nlkdDebugEvent
+// void nlkdEnterDebugger(void);
+.pubproc nlkdEnterDebugger
+	mov	eax, DEBUG_EVENT_ENTER_DEBUGGER
+	jmp	_nlkdEnterDebuggerInstruction_
+.endp nlkdEnterDebugger
+// void nlkdPanic(const char*string, ...);
+.pubproc nlkdPanic
+	mov	eax, DEBUG_EVENT_PANIC
+	jmp	_nlkdEnterDebuggerInstruction_
+.endp nlkdPanic
+// void nlkdAssert(const char*string, const char*file, const char*func, nuint_t line);
+.pubproc nlkdAssert
+	mov	eax, DEBUG_EVENT_ASSERT
+	jmp	_nlkdEnterDebuggerInstruction_
+.endp nlkdAssert
Index: 2.6.14-nlkd/debug/nlkd/nlkdAMD64.h
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/debug/nlkd/nlkdAMD64.h	2005-10-10 14:50:39.000000000 +0200
@@ -0,0 +1,55 @@
+/*****************************************************************************
+ *
+ *   File Name:      nlkdAMD64.h
+ *   Created by:     Jan Beulich
+ *   %version:       1 %
+ *   %derived_by:    jbeulich %
+ *   %date_modified: Mon Oct 10 06:50:19 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__("movq %0,%%db0" : : "r" (value)); break;
+	case 1: __asm__("movq %0,%%db1" : : "r" (value)); break;
+	case 2: __asm__("movq %0,%%db2" : : "r" (value)); break;
+	case 3: __asm__("movq %0,%%db3" : : "r" (value)); break;
+	case 6: __asm__("movq %0,%%db6" : : "r" (value)); break;
+	case 7: __asm__("movq %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.debugreg7, 7);
+}
+#endif
Index: 2.6.14-nlkd/include/asm-x86_64/fta-frame.h
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/include/asm-x86_64/fta-frame.h	2005-11-03 11:51:11.000000000 +0100
@@ -0,0 +1,216 @@
+/*****************************************************************************
+ *
+ *   File Name:      fta-frame.h
+ *   Created by:     Clyde Griffin
+ *   Date created:   1/1/1999
+ *
+ *   %version:       8 %
+ *   %derived_by:    jbeulich %
+ *   %date_modified: Thu Nov 03 03:50:57 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_X86_64_FTA_FRAME_H
+#define _ASM_X86_64_FTA_FRAME_H
+
+/* values for ftaInterruptionCtx_s.state */
+# ifdef CONFIG_NLKD_FTA
+#  define FRAME_COMPLETE_BIT 0
+#  define FRAME_COMPLETE (1 << FRAME_COMPLETE_BIT)
+#  define FRAME_NESTED_BIT 1
+#  define FRAME_NESTED (1 << FRAME_NESTED_BIT)
+# endif
+
+# include <asm/ptrace.h>
+# include <asm/x86_64.h>
+
+# ifndef __ASSEMBLY__
+
+struct ftaInterruptionCtx_s {
+	uint32_t	type;		/* Trap type */
+	int16_t	sub_type;		/* Extended type */
+	uint16_t	state;		/* Framework/Debugger only */
+	uint64_t	ec;			/* Error code */
+	uint64_t	cr0;
+	uint64_t	cr4;
+	uint64_t	cr2;
+	uint64_t	cr3;
+	uint64_t	debugCtl;
+	uint64_t	dr7;
+	uint16_t	ldtr;
+	uint16_t	tr;
+	uint32_t	_spare_;
+	uint16_t	ds;
+	uint16_t	es;
+	uint16_t	fs;
+	uint16_t	gs;
+	uint64_t	fs_base;
+	uint64_t	gs_base;
+	fxsave_t	fp_mmx_xmm;
+	uint64_t	cr8;
+	union {
+		struct pt_regs pt_regs;
+		struct {
+			union {
+				uint64_t	r15;
+				uint32_t	r15d;
+				uint16_t	r15w;
+				uint8_t	r15b;
+			};
+			union {
+				uint64_t	r14;
+				uint32_t	r14d;
+				uint16_t	r14w;
+				uint8_t	r14b;
+			};
+			union {
+				uint64_t	r13;
+				uint32_t	r13d;
+				uint16_t	r13w;
+				uint8_t	r13b;
+			};
+			union {
+				uint64_t	r12;
+				uint32_t	r12d;
+				uint16_t	r12w;
+				uint8_t	r12b;
+			};
+			union {
+				uint64_t	rbp;
+				uint32_t	ebp;
+				uint16_t	bp;
+				uint8_t	bpl;
+			};
+			union {
+				uint64_t	rbx;
+				uint32_t	ebx;
+				uint16_t	bx;
+				struct {
+					uint8_t	bl;
+					uint8_t	bh;
+				};
+			};
+			union {
+				uint64_t	r11;
+				uint32_t	r11d;
+				uint16_t	r11w;
+				uint8_t	r11b;
+			};
+			union {
+				uint64_t	r10;
+				uint32_t	r10d;
+				uint16_t	r10w;
+				uint8_t	r10b;
+			};
+			union {
+				uint64_t	r9;
+				uint32_t	r9d;
+				uint16_t	r9w;
+				uint8_t	r9b;
+			};
+			union {
+				uint64_t	r8;
+				uint32_t	r8d;
+				uint16_t	r8w;
+				uint8_t	r8b;
+			};
+			union {
+				uint64_t	rax;
+				uint32_t	eax;
+				uint16_t	ax;
+				struct {
+					uint8_t	al;
+					uint8_t	ah;
+				};
+			};
+			union {
+				uint64_t	rcx;
+				uint32_t	ecx;
+				uint16_t	cx;
+				struct {
+					uint8_t	cl;
+					uint8_t	ch;
+				};
+			};
+			union {
+				uint64_t	rdx;
+				uint32_t	edx;
+				uint16_t	dx;
+				struct {
+					uint8_t	dl;
+					uint8_t	dh;
+				};
+			};
+			union {
+				uint64_t	rsi;
+				uint32_t	esi;
+				uint16_t	si;
+				uint8_t	sil;
+			};
+			union {
+				uint64_t	rdi;
+				uint32_t	edi;
+				uint16_t	di;
+				uint8_t	dil;
+			};
+			union {
+				uint64_t	orig_rax;
+#  ifdef CONFIG_NLKD_FTA
+				uint64_t	_ec_raw;
+#  endif
+			};
+			union {
+				uint64_t	rip;
+				uint32_t	eip;
+			};
+			uint16_t	cs, _cs_pad[3];
+			union {
+				uint64_t	rflags;
+				uint32_t	eflags;
+				uint16_t	flags;
+			};
+			union {
+				uint64_t	rsp;
+				uint32_t	esp;
+				uint16_t	sp;
+				uint8_t	spl;
+			};
+			uint16_t	ss, _ss_pad[3];
+		};
+#  ifdef CONFIG_NLKD_FTA
+	};
+#   define FRAME_PTREGS(frame, field) (frame)->field
+#  else
+	} *pt_regs;
+#   define FRAME_PTREGS(frame, field) (frame)->pt_regs->field
+#  endif
+};
+# endif /* __ASSEMBLY__ */
+
+#endif /* _ASM_X86_64_FTA_FRAME_H */
Index: 2.6.14-nlkd/include/asm-x86_64/fta-type.h
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/include/asm-x86_64/fta-type.h	2005-06-27 14:04:21.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:11:34 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_X86_64_FTA_TYPE_H
+#define _ASM_X86_64_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
+{
+	AMD64_DIVIDE_ERROR,
+	AMD64_DEBUG,
+	AMD64_NMI,
+	AMD64_BREAKPOINT,
+	AMD64_OVERFLOW,				/* compatibility mode only */
+	AMD64_BOUNDS_CHECK,				/* compatibility mode only */
+	AMD64_ILLEGAL_OPCODE,
+	AMD64_DEVICE_NOT_AVAILABLE,
+	AMD64_DOUBLE_FAULT,
+	AMD64_RSVD_09,
+	AMD64_INVALID_TSS,
+	AMD64_SEGMENT_NOT_PRESENT,
+	AMD64_STACK_FAULT,
+	AMD64_GENERAL_PROTECTION_FAULT,
+	AMD64_PAGE_FAULT,
+	AMD64_RSVD_0F,
+	AMD64_FP_ERROR,
+	AMD64_ALIGNMENT_CHECK,
+	AMD64_MACHINE_CHECK,
+	AMD64_SIMD_FP_ERROR,
+	AMD64_RSVD_14,
+	AMD64_RSVD_15,
+	AMD64_RSVD_16,
+	AMD64_RSVD_17,
+	AMD64_RSVD_18,
+	AMD64_RSVD_19,
+	AMD64_RSVD_1A,
+	AMD64_RSVD_1B,
+	AMD64_RSVD_1C,
+	AMD64_RSVD_1D,
+	AMD64_RSVD_1E,
+	AMD64_RSVD_1F
+};
+
+#endif /* _ASM_X86_64_FTA_TYPE_H */
Index: 2.6.14-nlkd/include/asm-x86_64/x86_64.h
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/include/asm-x86_64/x86_64.h	2005-11-03 11:51:44.000000000 +0100
@@ -0,0 +1,934 @@
+/*****************************************************************************
+ *
+ *   File Name:      x86_64.h
+ *   Created by:     Jan Beulich
+ *   Date created:   Wed Aug 28 02:58:50 2002
+ *
+ *   %version:       9 %
+ *   %derived_by:    jbeulich %
+ *   %date_modified: Thu Nov 03 03:51:31 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:
+ *
+ *****************************************************************************/
+
+#ifndef _ASM_X86_64_X86_64_H
+#define _ASM_X86_64_X86_64_H
+
+#ifdef __ASSEMBLY__
+# define UINT64_C(v) (v)
+#else
+# include <linux/types.h>
+#endif
+
+/*
+ * RFLAGS
+ */
+#define RFLAGS_MBZ			UINT64_C(0xffffffffffc08028)
+#define RFLAGS_MBS			UINT64_C(0x0000000000000002)
+#define RFLAGS_CF			0
+#define RFLAGS_PF			2
+#define RFLAGS_AF			4
+#define RFLAGS_ZF			6
+#define RFLAGS_SF			7
+#define RFLAGS_TF			8
+#define RFLAGS_IF			9
+#define RFLAGS_DF			10
+#define RFLAGS_OF			11
+#define RFLAGS_IOPL			12
+#define RFLAGS_IOPL_LEN		2
+#define RFLAGS_NT			14
+#define RFLAGS_RF			16
+#define RFLAGS_VM			17
+#define RFLAGS_AC			18
+#define RFLAGS_VIF			19
+#define RFLAGS_VIP			20
+#define RFLAGS_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_LDT		0x02
+#	define DESCRIPTOR_AVAILTSS	0x09
+#	define DESCRIPTOR_BUSYTSS	0x0b
+#	define DESCRIPTOR_CALLGATE	0x0c
+#	define DESCRIPTOR_INTGATE	0x0e
+#	define DESCRIPTOR_TRAPGATE	0x0f
+#	define DESCRIPTOR_DATASEG	0x10
+#	define DESCRIPTOR_CODESEG	0x18
+#	define DESCRIPTOR_CONFORMING	0x1c
+#	define DESCR32_DATA_RO		0x10
+#	define DESCR32_DATA_RO_ACC	0x11
+#	define DESCR32_DATA_RW		0x12
+#	define DESCR32_DATA_RW_ACC	0x13
+#	define DESCR32_DOWN_RO		0x14
+#	define DESCR32_DOWN_RO_ACC	0x15
+#	define DESCR32_DOWN_RW		0x16
+#	define DESCR32_DOWN_RW_ACC	0x17
+#	define DESCR32_CODE_XO		0x18
+#	define DESCR32_CODE_XO_ACC	0x19
+#	define DESCR32_CODE_XR		0x1a
+#	define DESCR32_CODE_XR_ACC	0x1b
+#	define DESCR32_CONF_XO		0x1c
+#	define DESCR32_CONF_XO_ACC	0x1d
+#	define DESCR32_CONF_XR		0x1e
+#	define DESCR32_CONF_XR_ACC	0x1f
+#define DESCR32_A			0
+#define DESCR32_W			1
+#define DESCR32_R			1
+#define DESCR32_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_L		13
+#define DESCRIPTOR_D		14
+#define DESCR32_B			14
+#define DESCR32_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			UINT64_C(0xffffffff1ffaffc0)
+#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			UINT64_C(0x0000000000000fe7)
+#define CR3_PWT			3
+#define CR3_PCD			4
+#define CR3_PHYS			12
+#define CR3_PHYS_LEN		40
+
+/*
+ * Control Register 4
+ */
+#define CR4_MBZ			UINT64_C(0xfffffffffffff800)
+#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
+
+/*
+ * Control Register 8
+ */
+#define CR8_MBZ			UINT64_C(0xfffffffffffffff0)
+#define CR8_TPR			0
+#define CR8_TPR_LEN			4
+
+/*
+ * Page Directory Pointer Table Entry
+ */
+#define PML4E_MBZ			UINT64_C(0x00000000000001c0)
+#define PML4E_P			0
+#define PML4E_W			1
+#define PML4E_U			2
+#define PML4E_PWT			3
+#define PML4E_PCD			4
+#define PML4E_A			5
+#define PML4E_AVL			9
+#define PML4E_AVL_LEN		3
+#define PML4E_PHYS			12
+#define PML4E_PHYS_LEN		40
+#define PML4E_AVL2			52
+#define PML4E_AVL2_LEN		11
+#define PML4E_NX			63
+
+/*
+ * Page Directory Pointer Table Entry
+ */
+#define PDPE_MBZ			UINT64_C(0x00000000000001c0)
+#define PDPE_P				0
+#define PDPE_W				1
+#define PDPE_U				2
+#define PDPE_PWT			3
+#define PDPE_PCD			4
+#define PDPE_A				5
+#define PDPE_AVL			9
+#define PDPE_AVL_LEN		3
+#define PDPE_PHYS			12
+#define PDPE_PHYS_LEN		40
+#define PDPE_AVL2			52
+#define PDPE_AVL2_LEN		11
+#define PDPE_NX			63
+
+/*
+ * Page Directory Entry
+ */
+#define PDE_MBZ			UINT64_C(0x00000000000001c0)
+#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_AVL2			52
+#define PDE_AVL2_LEN		11
+#define PDE_NX				63
+
+/*
+ * Page Table Entry
+ */
+#define PTE4K_MBZ			(UINT64_C(1) << PDE_LARGE_PTE)
+#define PTE2M_MBZ			UINT64_C(0x00000000001fe000)
+#define PTE2M_MBS			(UINT64_C(1) << 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 PTE4K_PHYS			12
+#define PTE4K_PHYS_LEN		40
+#define PTE2M_PHYS			21
+#define PTE2M_PHYS_LEN		31
+#define PTE_AVL2			52
+#define PTE_AVL2_LEN		11
+#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_LEN_8			2U
+#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	8
+#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_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 __attribute__((__aligned__(16)));
+
+/*
+ * FXSAVE / FXRSTOR layout
+ */
+typedef struct {
+	uint16_t	fcw;
+	uint16_t	fsw;
+	uint8_t	ftw;
+	uint8_t	_rsrvd1_;
+	uint16_t	fop;
+	union {
+		uint64_t	rip;
+		struct {
+			uint32_t	fip;
+			uint16_t	fcs;
+			uint16_t	_rsrvd2_;
+		};
+	};
+	union {
+		uint64_t	rdp;
+		struct {
+			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[16];
+	uint8_t	_rsrvd5_[6*16];
+} fxsave_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	baseMidLo;
+		union {
+			uint8_t	attrLow;
+			DescriptorAttributes_t attr;
+		};
+		union {
+			uint8_t	attrHigh;
+			struct {
+				uint8_t	limitHigh:4;
+				uint8_t	avl:1;
+				uint8_t	l:1;
+				uint8_t	d:1;
+				uint8_t	g:1;
+			};
+		};
+		uint8_t	baseMidHi;
+		uint32_t	baseHigh;
+		uint32_t	mbz;
+	}		segment;
+	struct {
+		uint16_t	offsetLow;
+		uint16_t	selector;
+		union {
+			uint16_t	control;
+			struct {
+				union {
+					struct {
+						uint8_t	ist:3;
+						uint8_t	:5;
+					};
+					struct {
+						uint8_t	numParm32:5;
+						uint8_t	:3;
+					};
+				};
+				DescriptorAttributes_t attr;
+			};
+		};
+		uint16_t	offsetMid;
+		uint32_t	offsetHigh;
+		uint32_t	mbz;
+	}		gate;
+} DescriptorTableEntry_t;
+
+# define IS_SEGMENT(d)		(((d).segment.attrLow & 0x14) != 0x04)
+# define IS_SEGMENT_EXEC(d)	(!((d).segment.attrLow & (1U << DESCRIPTOR_S)) \
+						 && ((d).segment.l || ((d).segment.attrLow & (1U << DESCR32_CODE))))
+# define IS_SEGMENT_READ(d)	(!((d).segment.attrLow & (1U << DESCRIPTOR_S)) \
+						 && ((d).segment.l \
+						  || !((d).segment.attrLow & (1U << DESCR32_CODE)) \
+						  || ((d).segment.attrLow & (1U << DESCR32_R))))
+# define IS_SEGMENT_WRITE(d)	(!((d).segment.attrLow & (1U << DESCRIPTOR_S)) \
+						 && ((d).segment.l \
+						  || (!((d).segment.attrLow & (1U << DESCR32_CODE)) \
+						   && ((d).segment.attrLow & (1U << DESCR32_W)))))
+# define SEGMENT_BASE(d)		(((d).segment.attrLow & (1U << DESCRIPTOR_S)) ? 0 : \
+						 (d).segment.baseLow | ((uint64_t)(d).segment.baseMidLo << 16) \
+						 | ((uint64_t)(d).segment.baseMidHi << 24) | ((uint64_t)(d).segment.baseHigh << 32))
+# define SEG32_BASE(d)		((d).segment.baseLow | ((uint32_t)(d).segment.baseMidLo << 16) | ((uint32_t)(d).segment.baseMidHi << 24))
+# define SEG32_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)		((uint64_t)(d).gate.offsetLow | ((uint64_t)(d).gate.offsetMid << 16) | ((uint64_t)(d).gate.offsetHigh << 32))
+# define GATE32_OFFSET(d)	((uint32_t)(d).gate.offsetLow | ((uint32_t)(d).gate.offsetMid << 16))
+
+# pragma pack(push, 2)
+
+/*
+ * GDTR/IDTR memory format
+ */
+typedef struct {
+	uint16_t limit;
+	uint64_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			0
+#	define FCW_PC_DOUBLE			2
+#	define FCW_PC_EXTENDED			3
+#define FCW_RC					10
+#define FCW_RC_LEN				2
+/* The rounding control values are used for both FCW and MXCSR. */
+#	define RC_NEAREST				0
+#	define RC_DOWN					1
+#	define RC_UP					2
+#	define RC_CHOP					3
+#	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__
+# pragma pack(push, 4)
+
+/*
+ * 64-bit Task State Segment layout
+ */
+typedef struct {
+	uint32_t	_mbz1_;
+	uint64_t	rsp0;
+	uint64_t	rsp1;
+	uint64_t	rsp2;
+	uint64_t	_mbz2_;
+	uint64_t	ist[7];
+	uint64_t	_mbz3_;
+	uint16_t	_mbz4_;
+	uint16_t	iobase;
+} tss64_t;
+
+# pragma pack(pop)
+#endif
+
+/*
+ * MSR indexes
+ */
+#define X86_TSC				0x10
+#define X86_MTRRCAP				0xfe
+#define X86_SYSENTER_CS			0x174
+#define X86_SYSENTER_ESP			0x175
+#define X86_SYSENTER_EIP			0x176
+#define X86_MCG_CAP				0x179
+#define X86_MCG_STATUS			0x17a
+#define X86_MCG_CTL				0x17b
+#define X86_DEBUGCTL			0x1d9
+#define X86_LBF				0x1db
+#define X86_LBT				0x1dc
+#define X86_LIF				0x1dd
+#define X86_LIT				0x1de
+#define X86_MTRR_PHYSBASE0		0x200
+#define X86_MTRR_PHYSMASK0		0x201
+#define X86_MTRR_FIX64K_00000		0x250
+#define X86_MTRR_FIX16K_80000		0x258
+#define X86_MTRR_FIX16K_A0000		0x259
+#define X86_MTRR_FIX4K_C0000		0x268
+#define X86_MTRR_FIX4K_C8000		0x269
+#define X86_MTRR_FIX4K_D0000		0x26a
+#define X86_MTRR_FIX4K_D8000		0x26b
+#define X86_MTRR_FIX4K_E0000		0x26c
+#define X86_MTRR_FIX4K_E8000		0x26d
+#define X86_MTRR_FIX4K_F0000		0x26e
+#define X86_MTRR_FIX4K_F8000		0x26f
+#define X86_CR_PAT				0x277
+#define X86_MTRR_DEFTYPE			0x2ff
+#define X86_MCi_START			0x400
+#	define X86_MCi_STEP				4
+#	define X86_MCi_CTL_OFFSET		0
+#	define X86_MCi_STATUS_OFFSET		1
+#	define X86_MCi_ADDR_OFFSET		2
+#	define X86_MCi_MISC_OFFSET		3
+#define X86_EFER				0xC0000080
+#define X86_STAR				0xC0000081
+#define X86_LSTAR				0xC0000082
+#define X86_CSTAR				0xC0000083
+#define X86_SF_MASK				0xC0000084
+#define X86_FS_BASE				0xC0000100
+#define X86_GS_BASE				0xC0000101
+#define X86_KERNEL_GS_BASE		0xC0000102
+#define X86_SYSCFG				0xC0010010
+#define X86_IORRBASE0			0xC0010016
+#define X86_IORRMASK0			0xC0010017
+#define X86_IORRBASE1			0xC0010018
+#define X86_IORRMASK1			0xC0010019
+#define X86_TOP_MEM				0xC001001a
+#define X86_TOP_MEM2			0xC001001d
+
+/*
+ * X86_MTRRCAP
+ */
+#define MTRRCAP_VCNT			0
+#define MTRRCAP_VCNT_LEN			8
+#define MTRRCAP_FIX				8
+#define MTRRCAP_WC				10
+
+/*
+ * X86_DEBUGCTL
+ */
+#define DEBUGCTL_LBR			0
+#define DEBUGCTL_BTF			1
+#define DEBUGCTL_PB0			2
+#define DEBUGCTL_PB1			3
+#define DEBUGCTL_PB2			4
+#define DEBUGCTL_PB3			5
+
+/*
+ * X86_MTRR_DEFTYPE
+ */
+#define MTRR_DEFTYPE_TYPE		0
+#define MTRR_DEFTYPE_TYPE_LEN		8
+#define MTRR_DEFTYPE_FE			10
+#define MTRR_DEFTYPE_E			11
+
+/*
+ * X86_MTRR_PHYSBASEx
+ */
+#define MTRR_PHYSBASE_TYPE		0
+#define MTRR_PHYSBASE_TYPE_LEN	8
+#define MTRR_PHYSBASE_BASE		12
+#define MTRR_PHYSBASE_BASE_LEN	40
+
+/*
+ * X86_MTRR_PHYSMASKx
+ */
+#define MTRR_PHYSMASK_V			11
+#define MTRR_PHYSMASK_MASK		12
+#define MTRR_PHYSMASK_MASK_LEN	40
+
+/*
+ * Memory Attributes (MTRRs & PAT)
+ */
+#define X86_MA_UC				0x00
+#define X86_MA_WC				0x01
+#define X86_MA_WT				0x04
+#define X86_MA_WP				0x05
+#define X86_MA_WB				0x06
+#define X86_MA_UC_MINUS			0x07		/* PAT only */
+#define X86_MA_WRMEM			0x08		/* mask, fixed-range MTRRs (and IORRs) only */
+#define X86_MA_RDMEM			0x10		/* mask, fixed-range MTRRs (and IORRs) only */
+
+/*
+ * X86_MCG_CAP
+ */
+#define X86_MCG_CAP_COUNT		0
+#define X86_MCG_CAP_COUNT_LEN		8
+#define X86_MCG_CTL_P			8
+
+/*
+ * X86_MCG_STATUS
+ */
+#define X86_MCG_STATUS_RIPV		0
+#define X86_MCG_STATUS_EIPV		1
+#define X86_MCG_STATUS_MCIP		2
+
+/*
+ * X86_MCi
+ */
+#define X86_MCi_STATUS_MCA_EC		0
+#define X86_MCi_STATUS_MCA_EC_LEN	16
+#define X86_MCi_STATUS_MOD_EC		16
+#define X86_MCi_STATUS_MOD_EC_LEN	16
+#define X86_MCi_STATUS_PCC		57
+#define X86_MCi_STATUS_ADDRV		58
+#define X86_MCi_STATUS_MISCV		59
+#define X86_MCi_STATUS_EN		60
+#define X86_MCi_STATUS_UC		61
+#define X86_MCi_STATUS_OVER		62
+#define X86_MCi_STATUS_VAL		63
+
+/*
+ * X86_EFER
+ */
+#define X86_EFER_SCE			0
+#define X86_EFER_LME			8
+#define X86_EFER_LMA			10
+#define X86_EFER_NXE			11
+
+/*
+ * X86_SYSCFG
+ */
+#define X86_SYSCFG_MFDE			18
+#define X86_SYSCFG_MFDM			19
+#define X86_SYSCFG_MVDM			20
+#define X86_SYSCFG_TOM2			21
+
+/*
+ * X86_IORR_PHYSBASEx
+ */
+#define MTRR_PHYSBASE_WRMEM		3
+#define MTRR_PHYSBASE_RDMEM		4
+#define MTRR_PHYSBASE_BASE		12
+#define MTRR_PHYSBASE_LEN		40
+
+/*
+ * X86_IORR_PHYSMASKx
+ */
+#define MTRR_PHYSMASK_V			11
+#define MTRR_PHYSMASK_BASE		12
+#define MTRR_PHYSMASK_LEN		40
+
+/*
+ * X86_TOP_MEMx
+ */
+#define X86_TOP_MEM_PHYS			23
+#define X86_TOP_MEM_LEN			29
+
+#endif /* _ASM_X86_64_X86_64_H */

  parent reply	other threads:[~2005-11-09 14:20 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                             ` [PATCH 24/39] NLKD/i386 " Jan Beulich
2005-11-09 14:21                             ` Jan Beulich [this message]
2005-11-10 13:30                               ` [PATCH 25/39] NLKD/x86-64 " 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=437213E0.76F0.0078.0@novell.com \
    --to=jbeulich@novell.com \
    --cc=ak@suse.de \
    --cc=discuss@x86-64.org \
    --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

Powered by JetHome