All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Jan Beulich" <JBeulich@novell.com>
To: <linux-kernel@vger.kernel.org>
Subject: [PATCH 22/39] NLKD - core
Date: Wed, 09 Nov 2005 15:18:55 +0100	[thread overview]
Message-ID: <4372135F.76F0.0078.0@novell.com> (raw)
In-Reply-To: 43721184.76F0.0078.0@novell.com

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

The core NLKD additions.

With other debugging code living scattered across the (official or
external) tree(s), this tries to atb once establish a common place
for debugging code in a new debug/ directory.

Note that this depends on the i386 cmpxchg adjustments patch, which
isn't in 2.6.14, but has supposedly been merged already into 2.6.15.

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

(actual patch attached)


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

The core NLKD additions.

With other debugging code living scattered across the (official or
external) tree(s), this tries to atb once establish a common place
for debugging code in a new debug/ directory.

Note that this depends on the i386 cmpxchg adjustments patch, which
isn't in 2.6.14, but has supposedly been merged already into 2.6.15.

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

Index: 2.6.14-nlkd/Makefile
===================================================================
--- 2.6.14-nlkd.orig/Makefile	2005-11-09 11:12:42.000000000 +0100
+++ 2.6.14-nlkd/Makefile	2005-11-04 16:20:57.000000000 +0100
@@ -592,6 +592,7 @@ export MODLIB
 
 ifeq ($(KBUILD_EXTMOD),)
 core-y		+= kernel/ mm/ fs/ ipc/ security/ crypto/
+core-$(CONFIG_DEBUG_KERNEL) += debug/
 
 vmlinux-dirs	:= $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
 		     $(core-y) $(core-m) $(drivers-y) $(drivers-m) \
Index: 2.6.14-nlkd/debug/Kconfig
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/debug/Kconfig	2005-11-07 14:01:48.000000000 +0100
@@ -0,0 +1,22 @@
+choice
+	prompt "Kernel debugger"
+	optional
+	depends on DEBUG_KERNEL
+	---help---
+	  Kernel debuggers contain commands which allow memory to be examined,
+	  instructions to be disassembled and breakpoints to be set.
+
+	  If unsure, say N.
+
+config NLKD
+	bool "Novell Linux Kernel Debugger"
+	depends on DEBUG_KERNEL
+	depends on (X86_CMOVE && X86_CMPXCHG64 && X86_TSC) || X86_64
+	depends on !X86 || !OPROFILE
+	---help---
+	  This option provides a kernel debugger framework.  Sub-component
+	  selection will follow later.
+
+endchoice
+
+source "debug/nlkd/Kconfig"
Index: 2.6.14-nlkd/debug/Makefile
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/debug/Makefile	2005-11-04 14:15:23.000000000 +0100
@@ -0,0 +1 @@
+obj-$(CONFIG_NLKD)            += nlkd/
Index: 2.6.14-nlkd/debug/nlkd/Kconfig
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/debug/nlkd/Kconfig	2005-11-04 09:52:36.000000000 +0100
@@ -0,0 +1,71 @@
+#*****************************************************************************
+#*
+#*   File Name:      Kconfig
+#*   Created by:     Jan Beulich
+#*   %version:       5 %
+#*   %derived_by:    jbeulich %
+#*   %date_modified: Thu Nov 03 04:12:25 2005 %
+#*
+#*****************************************************************************
+#*****************************************************************************
+#*                                                                           *
+#* Copyright (c) 2004-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:
+#*
+#*****************************************************************************
+
+config DEBUGRTL
+	tristate
+	default n
+
+config CDE
+	tristate "Core Debug Engine" #todo if ???
+	depends on NLKD
+	select DEBUGRTL
+	default NLKD
+	---help---
+	  This enables NLKD's core component.  Front-end (agent) selection
+	  will follow later.
+
+	  If compiled as a module, the module will be called cde.
+
+config CDA
+	tristate "Console Debug Agent"
+	depends on CDE && (VGA_CONSOLE || FRAMEBUFFER_CONSOLE) && SERIO_I8042
+	default CDE
+	---help---
+	  This option provides a console based kernel debugger front-end.
+	  See Documentation/cda.txt for additional information.
+
+	  To compile this agent as a module, choose M here: the
+	  module will be called cda.
+
+config RDA
+	tristate "Remote Debug Agent (EXPERIMENTAL)"
+	depends on CDE && EXPERIMENTAL
+	default n
+	---help---
+	  This option provides a remote kernel debugger interface supporting
+	  gdb's protocol.
+
+	  To compile this agent as a module, choose M here: the
+	  module will be called rda.
Index: 2.6.14-nlkd/debug/nlkd/Makefile
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/debug/nlkd/Makefile	2005-11-09 10:50:39.000000000 +0100
@@ -0,0 +1,108 @@
+#*****************************************************************************
+#*
+#*   File Name:      Makefile
+#*   Created by:     Jan Beulich
+#*   %version:       12 %
+#*   %derived_by:    jbeulich %
+#*   %date_modified: Thu Nov 03 04:12:54 2005 %
+#*
+#*****************************************************************************
+#*****************************************************************************
+#*                                                                           *
+#* Copyright (c) 2004-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:
+#*
+#*****************************************************************************
+
+ifeq ($(CONFIG_DEBUGRTL),y)
+dbg   := obj
+endif
+ifeq ($(CONFIG_DEBUGRTL),m)
+dbg   := debugrtl
+obj-m := debugrtl.o
+dbg-y :=
+endif
+
+ifeq ($(CONFIG_CDE),y)
+cde   := obj
+endif
+ifeq ($(CONFIG_CDE),m)
+cde   := cde
+obj-m := cde.o
+cde-y :=
+endif
+
+arch-$(CONFIG_X86)        := $(if $(CONFIG_X86_64),AMD64,IA32)
+arch-$(CONFIG_IA64)       := IA64
+export arch-y
+
+obj-y                     := nlkd.o nlkd$(arch-y).o
+$(dbg)-$(CONFIG_DEBUGRTL) += dbgutil.o dbg$(arch-y).o
+$(cde)-y                  += cde$(arch-y).o cdeext.o cdefocus.o cdemain.o \
+                             cde$(arch-y)lock.o cdemem.o cdestatemach.o \
+                             cdesym.o $(if $(CONFIG_IA64),,cdeunwind.o) \
+                             cdeutil.o cde$(arch-y)util.o
+$(cde)-$(CONFIG_MODULES)  += cde_syms.o
+$(cde)-$(CONFIG_SMP)      += cderendezvous.o cderpc.o
+$(cde)-$(CONFIG_EFI)      += cdeefi.o
+$(cde)-$(CONFIG_X86)      += cdeX86brkp.o
+$(cde)-$(CONFIG_IA64)     += cdeIA64brkp.o
+
+obj-$(CONFIG_CDA)         += cda/
+obj-$(CONFIG_RDA)         += rda/
+
+EXTRA_AFLAGS := -Wa,--strip-local-absolute
+
+# Need a version of 'as' that supports various features not present or broken
+# in older binutils versions. But since one can't tell gcc what assembler
+# binary to use we have to use another compiler driver that will find the
+# right assembler if the default one doesn't fit our needs. (Note that -Wa,-Z
+# below is necessary because otherwise, up to version 2.15, it will [try to]
+# unlink /dev/null [and succeed at least when run as root]).
+
+assembler_test_body-y := .altmacro;
+assembler_test_body-y += .macro .xyz; .endm; .xyz;
+assembler_test_body-y += .struct; .previous;
+ifneq ($(CONFIG_IA64),y)
+assembler_test_body-$(CONFIG_UNWIND_INFO) += .cfi_startproc;
+ifeq ($(CONFIG_X86),y)
+assembler_test_body-$(CONFIG_UNWIND_INFO) += .cfi_rel_offset $(if $(CONFIG_X86_64),r,e)flags, 0;
+endif
+assembler_test_body-$(CONFIG_UNWIND_INFO) += .cfi_endproc;
+endif
+assembler_test_body-$(CONFIG_X86) += .intel_syntax noprefix;
+assembler_test_body-$(CONFIG_X86) += .bss; .previous;
+assembler_test_body-$(CONFIG_X86) += push (1 shl 1) or not (1 shr 1) mod (1 and 1 xor 2);
+assembler_test_body-$(CONFIG_X86) += .equiv dword, 4; .equiv reg, eax; lea reg, [reg*dword];
+
+assembler_test = $(shell echo '$(assembler_test_body-y)' \
+                   | $(1) -c -o /dev/null -Wa,-Z -xassembler-with-cpp - 2>&1 >/dev/null)
+
+ifneq ($(call assembler_test,$(CC)),)
+CCx := $(shell echo '$(CC)' | sed 's,\(^\|[[:space:]]\)\([^=[:space:]]\+\)\([[:space:]]\|$$\),\1\2x\3,')
+ifneq ($(shell which $(filter-out -%,$(CCx)) 2>/dev/null | grep '/$(CCx)$$'),)
+ifneq ($(call assembler_test,$(CCx)),)
+CCx := echo "Assembler update needed" >&2 && /bin/false
+endif
+endif
+override cmd_as_o_S   = $(CCx) $(a_flags) -c -o $@ $<
+endif
Index: 2.6.14-nlkd/debug/nlkd/nlkd.c
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/debug/nlkd/nlkd.c	2005-11-03 12:23:43.000000000 +0100
@@ -0,0 +1,161 @@
+/*****************************************************************************
+ *
+ *   File Name:      nlkd.c
+ *   Created by:     Jan Beulich
+ *   %version:       4 %
+ *   %derived_by:    jbeulich %
+ *   %date_modified: Thu Nov 03 04:23:30 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:
+ *
+ *****************************************************************************/
+
+#include <linux/module.h>
+#include <linux/nlkd.h>
+#include <asm/fta-frame.h>
+#include <asm/fta-type.h>
+#include <asm/segment.h>
+#include "nlkd.h"
+
+#if defined(_M_IA64) || defined(__ia64__)
+# include "nlkdIA64.h"
+#elif defined(_M_IX86) || defined(__i386__)
+# include "nlkdIA32.h"
+#elif defined(_M_AMD64) || defined(__x86_64__)
+# include "nlkdAMD64.h"
+#endif
+
+EXPORT_SYMBOL(nlkdAssert);
+EXPORT_SYMBOL(nlkdDebugEvent);
+EXPORT_SYMBOL(nlkdEnterDebugger);
+EXPORT_SYMBOL(nlkdPanic);
+
+#ifdef CONFIG_NLKD_FTA
+struct notifier_block *nlkd_keypress_chain = NULL;
+EXPORT_SYMBOL(nlkd_keypress_chain);
+#endif
+
+volatile int nlkdAgentCount = -1;
+#ifndef CONFIG_CDE
+EXPORT_SYMBOL(nlkdAgentCount);
+const struct nlkdBPXface_s*nlkdBPXface = NULL;
+EXPORT_SYMBOL(nlkdBPXface);
+#endif
+
+#ifndef CONFIG_CDE
+# include <asm/debugreg.h>
+void (*set_debugreg)(uintptr_t value, nuint_t regnum) = _set_debugreg;
+EXPORT_SYMBOL(set_debugreg);
+static int _enable_debugreg(struct task_struct *task, nuint_t regnum, uintptr_t value) {}
+int (*enable_debugreg)(struct task_struct *, nuint_t, uintptr_t) = _enable_debugreg;
+EXPORT_SYMBOL(enable_debugreg);
+int (*disable_debugreg)(struct pt_regs *, nuint_t) = _disable_debugreg;
+EXPORT_SYMBOL(disable_debugreg);
+int (*restore_debugreg)(void) = _restore_debugreg;
+EXPORT_SYMBOL(restore_debugreg);
+#endif
+
+#if defined(CONFIG_X86)
+# ifdef CONFIG_X86_64
+#  define PLT(x) AMD64_##x
+#  define PC rip
+# else
+#  define PLT(x) IA32_##x
+#  define PC eip
+# endif
+# define TYPE PLT(BREAKPOINT)
+# define SUBTYPE eax
+# define TARGET _nlkdEnterDebuggerInstruction_
+# define EXTRA FRAME_PTREGS(frame, cs) == __KERNEL_CS
+# define IPI_TYPE PLT(NMI)
+# define IPI_SUBTYPE cr2
+#elif defined(CONFIG_IA64)
+# define PC iip
+# define TYPE IA64_BREAKFLT
+# define SUBTYPE r8
+# define TARGET _nlkdEnterDebuggerBundle_
+# define EXTRA frame->iim == BREAK_ENTER_DEBUGGER
+# define IPI_TYPE PLT(NMI)
+# define IPI_SUBTYPE iim
+#endif
+
+int nlkdIsDebugEvent(const struct ftaInterruptionCtx_s*frame) {
+	extern const char TARGET[];
+
+	return frame->type == TYPE
+	       && FRAME_PTREGS(frame, PC) == (uintptr_t)TARGET
+	       && EXTRA;
+}
+EXPORT_SYMBOL(nlkdIsDebugEvent);
+
+#ifndef CONFIG_NLKD_FTA
+void nlkdSetDebugEventType(struct ftaInterruptionCtx_s*frame) {
+	if(!frame->sub_type) {
+		if(nlkdIsDebugEvent(frame))
+			frame->sub_type = FRAME_PTREGS(frame, SUBTYPE);
+		else if(frame->type == IPI_TYPE) {
+			frame->sub_type = frame->IPI_SUBTYPE;
+			frame->IPI_SUBTYPE = 0;
+		}
+	}
+}
+EXPORT_SYMBOL(nlkdSetDebugEventType);
+#endif
+
+#undef IPI_TYPE
+#undef IPI_SUBTYPE
+#undef EXTRA
+#undef TARGET
+#undef SUBTYPE
+#undef TYPE
+#undef PC
+#undef PLT
+
+void nlkd_init() {
+	extern nlkdExtension_t __start_nlkd_ext[], __stop_nlkd_ext[];
+	nlkdExtension_t*ext;
+
+	for(ext = __start_nlkd_ext; ext < __stop_nlkd_ext; ++ext) {
+		LSTATUS status = nlkdExtRegister(ext->id,
+		                                 ext->handler,
+		                                 ext->handlerContext,
+		                                 *ext->pModuleId,
+		                                 ext->description,
+		                                 ext->flags);
+		if(status != LSTATUS_SUCCESS)
+			printk(KERN_WARNING "Registration of %s debug extension failed (%08"NPRIX")\n",
+			       ext->id,
+			       status);
+	}
+	cde_init();
+}
+
+void nlkd_init_done() {
+	cde_init_done();
+}
+
+#define NLKD
+#include "cdeext.c"
Index: 2.6.14-nlkd/debug/nlkd/nlkd.h
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/debug/nlkd/nlkd.h	2005-10-07 17:18:18.000000000 +0200
@@ -0,0 +1,48 @@
+/*****************************************************************************
+ *
+ *   File Name:      nlkd.h
+ *   Created by:     Jan Beulich
+ *   %version:       2 %
+ *   %derived_by:    jbeulich %
+ *   %date_modified: Fri Oct 07 09:18:08 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:
+ *
+ *****************************************************************************/
+
+extern volatile int nlkdAgentCount;
+
+#ifdef CONFIG_CDE
+
+void cde_init(void);
+void cde_init_done(void);
+
+#else
+
+# define cde_init()
+# define cde_init_done()
+
+#endif
Index: 2.6.14-nlkd/include/linux/fta.h
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/include/linux/fta.h	2005-11-03 12:03:37.000000000 +0100
@@ -0,0 +1,261 @@
+/*****************************************************************************
+ *
+ *   File Name:      fta.h
+ *   Created by:     Jan Beulich
+ *   %version:       12 %
+ *   %derived_by:    jbeulich %
+ *   %date_modified: Thu Nov 03 04:03:24 2005 %
+ *
+ *****************************************************************************/
+/*****************************************************************************
+ *                                                                           *
+ * Copyright (c) 2004-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 _LINUX_FTA_H
+# define _LINUX_FTA_H
+
+# include <linux/config.h>
+# include <asm/fta-type.h>
+
+typedef enum ftaInterruptionId_e ftaInterruptionId_t;
+typedef struct ftaInterruptionCtx_s ftaFullInterruptionCtx_t;
+
+# ifdef CONFIG_NLKD_FTA
+#  include <linux/linkage.h>
+#  include <linux/lstatus.h>
+#  include <linux/module-id.h>
+#  include <linux/nint.h>
+
+/* --------------------------------------------------------------------------- */
+/* LSTATUS Defines for                                                         */
+/* ftaFaultInterruption..., ftaTrapInterruption... and ftaAbortInterruption... */
+/* --------------------------------------------------------------------------- */
+
+#  define LSTATUS_FTA_HANDLED              MAKE_LSTATUS(FTA, SUCCESS, 0)
+#  define LSTATUS_FTA_NOT_HANDLED          MAKE_LSTATUS(FTA, INFORMATION, 0x0100)
+#  define LSTATUS_FTA_ID_INVALID           MAKE_LSTATUS(FTA, ERROR, 0x0100)
+#  define LSTATUS_FTA_ROUTINE_ADDR_INVALID MAKE_LSTATUS(FTA, ERROR, 0x0101)
+#  define LSTATUS_FTA_STAGE_INVALID        MAKE_LSTATUS(FTA, ERROR, 0x0102)
+#  define LSTATUS_FTA_STAGE_NOT_AVAILABLE  MAKE_LSTATUS(FTA, ERROR, 0x0103)
+#  define LSTATUS_FTA_TAG_ALLOC_FAILURE    MAKE_LSTATUS(FTA, ERROR, 0x0104)
+#  define LSTATUS_FTA_SIGNATURE_INVALID    MAKE_LSTATUS(FTA, ERROR, 0x0105)
+#  define LSTATUS_FTA_TAG_INVALID          MAKE_LSTATUS(FTA, ERROR, 0x0106)
+
+typedef enum ftaInterruptionId_e fta_id_t;
+struct pt_regs;
+
+/*
+ * ftaInterruptionTag_t
+ *
+ * ftaInterruptionTag_t is used as a handle.  When ftaInterruptionSetup()
+ * is called it is passed the address of a variable type of ftaInterruptionTag_t.
+ *
+ * When ftaInterruptionSetup() successfully completes ftaInterruptionTag_t
+ * contains a valid value that can should be used as a parameter when
+ * ftaInterruptionClear() is called.
+ */
+typedef struct ftaInterruption *ftaInterruptionTag_t, *fta_tag_t;
+
+/*
+ * Special flags for this interruption handler.
+ */
+typedef uint64_t	ftaInterruptionFlags_t;
+
+/*
+ * ftaInterruptionStage_t
+ *
+ * ftaInterruptionStage_t is used as a parameter to ftaTrapInterruptionSetup(),
+ * ftaFaultInterruptionSetup() and ftaAbortInterruptionSetup().
+ *
+ * It is used to indicate during which stage the interruption handler should
+ * be called.  For each interruption there may be a specific order in which
+ * different handlers should be called.  The callout order is referred to as
+ * the stage and may be interruption specific.  Providing for a stage
+ * definition for handlers allows the infrastructure to prioritize the callout
+ * order of handlers by stage type.
+ *
+ * Interruption stages as defined as follows:
+ *
+ * FTA_INTERRUPTION_NOTIFIER_ENTRY
+ *     Frame Modification: Not Allowed
+ *     Number Of Handlers: Multiple
+ *            Other Notes: Entry notifier slots are provided for debug purposes.
+ *                         The handler is invoked just after the frame has been
+ *                         saved but before any other handlers are called.
+ *                         These handlers may examine the frame but may not
+ *                         modify it in any way whatsoever.  Notifiers are
+ *                         maintained on a linked list and are called on a
+ *                         first linked, first called basis.
+ *
+ * FTA_INTERRUPTION_NOTIFIER_EXIT
+ *     Frame Modification: Not Allowed
+ *     Number Of Handlers: Multiple
+ *            Other Notes: Exit notifier slots are provided for debug purposes.
+ *                         The handler is invoked after other handlers have
+ *                         been called and just before the stack frame is
+ *                         restored prior to a return from interruption.
+ *                         These handlers may examine the frame but may not
+ *                         modify it in any way whatsoever.  Notifiers are
+ *                         maintained on a linked list and are called on a
+ *                         first linked, first called basis.
+ *
+ * FTA_INTERRUPTION_HANDLER_DEFAULT
+ *     Frame Modification: Allowed
+ *     Number Of Handlers: One
+ *            Other Notes: This is the OS default handler for the interruption.
+ *                         This handler slot is reserved for OS kernel use only.
+ *                         An attempt to register for this handler slot will fail
+ *                         until the previous handler has been cleared.
+ *
+ * FTA_INTERRUPTION_HANDLER_GENERAL_PURPOSE
+ *     Frame Modification: Allowed
+ *     Number Of Handlers: Multiple
+ *            Other Notes: General purpose handlers are maintained on a
+ *                         linked list and are called on a first linked, first
+ *                         called basis.  When a handler of this type claims
+ *                         the interruption has been handled by its return
+ *                         status other general purpose handlers will not be
+ *                         invoked.
+ *
+ * FTA_INTERRUPTION_HANDLER_HEALTH_MONITOR
+ *     Frame Modification: Not Allowed
+ *     Number Of Handlers: One
+ *            Other Notes: The health driver may perform such actions as
+ *                         monitoring the health of the system or logging
+ *                         the cause of critical errors to NVRAM prior to a
+ *                         system crash.  A health handler may view the contents
+ *                         of the frame but should not modify the frame contents.
+ *                         If modification of the frame is required a separate
+ *                         general purpose handler should be registered.
+ *                         An attempt to register for this handler slot will fail
+ *                         until the previous handler has been cleared.
+ *
+ * FTA_INTERRUPTION_HANDLER_APPLICATION_DEBUGGER
+ *     Frame Modification: Allowed
+ *     Number Of Handlers: Multiple
+ *            Other Notes: An application level debugger registration will
+ *                         take precedence over kernel level debuggers.
+ *
+ * FTA_INTERRUPTION_HANDLER_CORE_DEBUG_ENGINE
+ *     Frame Modification: Allowed
+ *     Number Of Handlers: One
+ *            Other Notes: The intention here is to allow the CDE an early peek at the
+ *                         the frame to recover from internally generated interruptions.
+ *
+ * FTA_INTERRUPTION_PATCH_REPLACEMENT
+ *     Frame Modification: Allowed
+ *     Number Of Handlers: One
+ *            Other Notes: A patch replacement handler provides a mechanism whereby
+ *                         the infrastructure for a given interruption may be
+ *                         completely replaced.  The writer of this handler should
+ *                         be intimately familiar with the requirements of the
+ *                         interruption event.  This slot is provided as a means
+ *                         field replacement of the interruption handling infrastructure
+ *                         may be replaced.  Please see ftaGetInterruptionHandlers()
+ *                         for more information on how to find and call registered
+ *                         handlers for the given interruption ID.
+ *                         An attempt to register for this handler slot will fail
+ *                         until the previous handler has been cleared.
+ */
+typedef enum {
+	FTA_INTERRUPTION_NOTIFIER_ENTRY,
+	FTA_INTERRUPTION_NOTIFIER_EXIT,
+	FTA_INTERRUPTION_HANDLER_DEFAULT,
+	FTA_INTERRUPTION_HANDLER_GENERAL_PURPOSE,
+	FTA_INTERRUPTION_HANDLER_HEALTH_MONITOR,
+	FTA_INTERRUPTION_HANDLER_APPLICATION_DEBUGGER,
+	FTA_INTERRUPTION_HANDLER_CORE_DEBUG_ENGINE,
+	FTA_INTERRUPTION_PATCH_REPLACEMENT
+} ftaInterruptionStage_t;
+
+typedef enum {
+	FTA_NOTIFIER_ENTRY = FTA_INTERRUPTION_NOTIFIER_ENTRY,
+	FTA_NOTIFIER_EXIT = FTA_INTERRUPTION_NOTIFIER_EXIT,
+	FTA_HANDLER_DEFAULT = FTA_INTERRUPTION_HANDLER_DEFAULT,
+	FTA_HANDLER_GENERAL_PURPOSE = FTA_INTERRUPTION_HANDLER_GENERAL_PURPOSE,
+	FTA_HANDLER_HEALTH_MONITOR = FTA_INTERRUPTION_HANDLER_HEALTH_MONITOR,
+	FTA_HANDLER_APPLICATION_DEBUGGER = FTA_INTERRUPTION_HANDLER_APPLICATION_DEBUGGER
+} fta_stage_t;
+
+typedef enum {
+	fta_no_async,
+	fta_async_breakpoints,
+	fta_async_interrupts,
+	fta_async_preemption
+} fta_async_level_t;
+
+#  ifndef MODULE
+void asmlinkage ftaAbandonFrame(const ftaFullInterruptionCtx_t *);
+#  endif
+
+#  ifndef FTA_EXPORT
+#   define FTA_EXPORT(type, name, ...) type name(__VA_ARGS__)
+#  endif
+
+# else /* CONFIG_NLKD_FTA */
+#  undef FTA_EXPORT
+# endif /* CONFIG_NLKD_FTA */
+#endif /* _LINUX_FTA_H */
+
+#ifdef FTA_EXPORT
+# include <asm/fta.h>
+
+FTA_EXPORT(LSTATUS, ftaInterruptionSetup,
+	ftaInterruptionId_t,
+	LSTATUS (*)(void *, ftaFullInterruptionCtx_t *),
+	void *,
+	ftaInterruptionFlags_t,
+	ftaInterruptionStage_t,
+	moduleId_t,
+	ftaInterruptionTag_t *);
+FTA_EXPORT(LSTATUS, ftaInterruptionClear, ftaInterruptionTag_t);
+
+FTA_EXPORT(fta_async_level_t, ftaEnable,
+	ftaFullInterruptionCtx_t *,
+	fta_async_level_t);
+FTA_EXPORT(const char*, ftaGetInterruptionName,
+	const ftaFullInterruptionCtx_t *);
+FTA_EXPORT(void, ftaRestore, ftaFullInterruptionCtx_t *, fta_async_level_t);
+
+FTA_EXPORT(int, fta_register_handler,
+	fta_id_t,
+	int(*)(struct pt_regs *, void *),
+	void *,
+	unsigned long flags,
+	fta_stage_t,
+	moduleId_t,
+	fta_tag_t *);
+FTA_EXPORT(int, fta_deregister_handler, fta_tag_t);
+
+FTA_EXPORT(fta_id_t, fta_type, const struct pt_regs *);
+FTA_EXPORT(int, fta_subtype, const struct pt_regs *);
+FTA_EXPORT(void, fta_subtype_set, struct pt_regs *, int);
+FTA_EXPORT(int, fta_from_kernel, const struct pt_regs *);
+
+FTA_EXPORT(void, fta_abandon, const struct pt_regs *);
+FTA_EXPORT(fta_async_level_t, fta_enable, struct pt_regs *, fta_async_level_t);
+FTA_EXPORT(void, fta_restore, struct pt_regs *, fta_async_level_t);
+
+# undef FTA_EXPORT
+#endif /* FTA_EXPORT */
Index: 2.6.14-nlkd/include/linux/lstatus.h
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/include/linux/lstatus.h	2005-06-27 12:49:22.000000000 +0200
@@ -0,0 +1,241 @@
+/*****************************************************************************
+ *
+ *   File Name:      lstatus.h
+ *   Created by:     Clyde Griffin
+ *   Date created:   11/1/1998
+ *
+ *   %version:       6 %
+ *   %derived_by:    jbeulich %
+ *   %date_modified: Mon Jun 27 04:49:11 2005 %
+ *
+ *****************************************************************************/
+/*****************************************************************************
+ *                                                                           *
+ * Copyright (c) 1998-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 _LINUX_LSTATUS_H
+#define _LINUX_LSTATUS_H
+
+#include <linux/config.h>
+#ifdef __ASSEMBLY__
+# define NUINT_C(v) v
+#else
+# include <linux/nint.h>
+#endif
+
+/*
+ *    The purpose of this file is to provide a common format and encoding
+ *    scheme for API status codes.
+ *    The status classification and naming conventions used in this file are
+ *    as follows.
+ *
+ *    LSTATUS is defined as a native unsigned return code. There are four
+ *    parts to the status.  The low bits contain the status code.  The next
+ *    portion contains the sybsystem identifier, followed by an optional
+ *    subsystem specific unique identifier.  The top bits
+ *    The unique ID may be used in a number of ways and is subsystem
+ *    specific.  It is optional and should be zero if not used.
+ *
+ *    The LSTATUS return code may be viewed as a union defined as follows:
+ *
+ *    typedef union {
+ *    	struct {
+ *    		nuint_t	status:N1;
+ *    		nuint_t	subsystem:N2;
+ *    		nuint_t	uniqueId:N3;
+ *    		nuint_t	category:N4;
+ *    	} fields;
+ *    	LSTATUS status;
+ *    } lStatus_t;
+ *
+ *    Each major subsystem within may allocate a range of status codes by
+ *    adding a #define to the classification section below.
+ *    The convention allows for 255/65535 subsystems in the system with each
+ *    subsystem being allowed to define up to as many as 4095/65535 unique
+ *    status codes or errors. This should be adequate.
+ *
+ *    The first subsystem known as LSTATUS_ is a general purpose
+ *    classification to be used for smaller subsystems, components or
+ *    stand alone APIs which do not clearly fit into a larger grouping.
+ *    Status code additions to the general area should be carefully chosen
+ *    and somewhat generic in flavor as another developer of a different
+ *    component may also use that defined status/error code.
+ *
+ *    In general you are encouraged to create unique classifications
+ *    for large and middle sized subcomponents of the kernel.
+ *
+ *    Status code return types are 32/64 bits in size.
+ *
+ *    Nano kernel subsystems are numbered using bits 31:16.
+ *
+ *    Status codes within each subsystem are defined using bits 15:0.
+ *
+ *    The status codes 0-255 in each {category,subsystem} must be identical
+ *    to those in the generic subsystem.  The first unique status code in any
+ *    given subsystem should not be less than 256.  This convention will
+ *    allow us to become familiar with return codes < 256 regardless of what
+ *    subsystem the status code came from.
+ *
+ *    We do not expect to have more that 256 generic status codes.
+ *
+ *    Specific status definitions within a general classification may be
+ *    defined in another header file more specific to the subcomponent.
+ *    However, general subsystem classifications must be defined in this
+ *    file and listed in numeric order.  Status code definitions in the generic
+ *    classification, LSTATUS_, must also be listed in this file.
+ *
+ *    APIs returning status codes defined by this file must be declared to
+ *    return LSTATUS.  LSTATUS is defined as a nuint_t.
+ *
+ *
+ * Naming:
+ * 	 For the purposes of providing a common look and feel, and to avoid
+ *    naming conflicts the defined names of each status code shall follow the
+ *    rules below.
+ *
+ * 	  1) The status code will be described in all capital letters with the under
+ *        score chararacter separating descriptive words.
+ *
+ * 	  2) The status code will be prefixed with the classification name.
+ *        Example:  Status codes in the SCHED subclassification will begin
+ *        with LSTATUS_SCHED.
+ *
+ * 	  3) The descriptive portion of the status code definition will follow the
+ *        the general classification.
+ *        Example: LSTATUS_SCHED_PARAMETER_INVALID.
+ *
+ */
+
+#if defined(CONFIG_X86_64) || !defined(CONFIG_64BIT)
+# define LSTATUS_WIDTH_STATUS		12
+# define LSTATUS_WIDTH_SUBSYSTEM	8
+# define LSTATUS_WIDTH_UNIQUEID	9
+# define LSTATUS_WIDTH_CATEGORY	3
+#else
+# define LSTATUS_WIDTH_STATUS		16
+# define LSTATUS_WIDTH_SUBSYSTEM	16
+# define LSTATUS_WIDTH_UNIQUEID	28
+# define LSTATUS_WIDTH_CATEGORY	4
+#endif
+
+#ifndef __ASSEMBLY__
+/* ----------------------------------------------------------------------- */
+/*                                                                         */
+/* ----------------------------------------------------------------------- */
+/*
+ *
+ * Use LSTATUS when declaring APIs that return status code definitions defined
+ * using the conventions outlined in this file.
+ *
+ * Example: LSTATUS foo(void);
+ */
+typedef nuint_t LSTATUS;
+
+typedef union {
+	struct {
+		nuint_t status:LSTATUS_WIDTH_STATUS;
+		nuint_t subsystem:LSTATUS_WIDTH_SUBSYSTEM;
+		nuint_t uniqueId:LSTATUS_WIDTH_UNIQUEID;
+		nuint_t category:LSTATUS_WIDTH_CATEGORY;
+	} fields;
+	LSTATUS status;
+} lStatus_t;
+
+typedef struct { int _:sizeof(lStatus_t) <= sizeof(LSTATUS); } lStatus_Size_Assert;
+
+#endif /* __ASSEMBLY__ */
+
+/* ----------------------------------------------------------------------- */
+/*                                                                         */
+/* ----------------------------------------------------------------------- */
+/*
+ * Status code category classifications.
+ */
+#define LSTATUS_CATEGORY_SUCCESS       NUINT_C(0)
+#define LSTATUS_CATEGORY_INFORMATION   NUINT_C(1)
+#define LSTATUS_CATEGORY_NOTICE        NUINT_C(2)
+#define LSTATUS_CATEGORY_WARNING       NUINT_C(3)
+#define LSTATUS_CATEGORY_ERROR         ((NUINT_C(1) << LSTATUS_WIDTH_CATEGORY) - 4)
+#define LSTATUS_CATEGORY_FATAL         ((NUINT_C(1) << LSTATUS_WIDTH_CATEGORY) - 1)
+
+/* ----------------------------------------------------------------------- */
+/*                                                                         */
+/* ----------------------------------------------------------------------- */
+/*
+ * Status code subsystem classifications.
+ */
+#define LSTATUS_SUBSYS_                                          0x0000
+#define LSTATUS_SUBSYS_SCHED                                     0x0001
+#define LSTATUS_SUBSYS_MEMORY                                    0x0002
+#define LSTATUS_SUBSYS_MMU                                       0x0003
+#define LSTATUS_SUBSYS_INTR                                      0x0004
+#define LSTATUS_SUBSYS_FTA                                       0x0005
+#define LSTATUS_SUBSYS_CPU                                       0x0006
+#define LSTATUS_SUBSYS_RESOURCE                                  0x0007
+#define LSTATUS_SUBSYS_CONSOLE                                   0x0008
+#define LSTATUS_SUBSYS_CIOS                                      0x0009
+#define LSTATUS_SUBSYS_PSM                                       0x000A
+#define LSTATUS_SUBSYS_TIMEOUT                                   0x000B
+
+
+/* ----------------------------------------------------------------------- */
+/*                                                                         */
+/* ----------------------------------------------------------------------- */
+/*
+ * LSTATUS construction.
+ */
+#define MAKE_LSTATUS(sub, cat, code)                         \
+	(((((LSTATUS_CATEGORY_##cat << LSTATUS_WIDTH_UNIQUEID)  \
+	    << LSTATUS_WIDTH_SUBSYSTEM) | LSTATUS_SUBSYS_##sub) \
+	  << LSTATUS_WIDTH_STATUS) | (code))
+#define MAKE_LSTATUS_UNIQUE(sub, cat, uid, code)             \
+	((((((LSTATUS_CATEGORY_##cat                            \
+	      << LSTATUS_WIDTH_UNIQUEID) | (uid))               \
+	    << LSTATUS_WIDTH_SUBSYSTEM) | LSTATUS_SUBSYS_##sub) \
+	  << LSTATUS_WIDTH_STATUS) | (code))
+
+/* ----------------------------------------------------------------------- */
+/*                                                                         */
+/* ----------------------------------------------------------------------- */
+/*
+ * LSTATUS_ classification.
+ *
+ * LSTATUS_ is a generic classification.  These definitions may be used
+ * by small subsystems or stand alone APIs which do not require status
+ * code definitions within a unique range.
+ */
+#define LSTATUS_SUCCESS                       MAKE_LSTATUS(, SUCCESS, 0x0000)
+#define LSTATUS_DEFERRED                      MAKE_LSTATUS(, SUCCESS, 0x0001)
+#define LSTATUS_FAILURE                         MAKE_LSTATUS(, ERROR, 0x0001)
+#define LSTATUS_PARAMETER_INVALID               MAKE_LSTATUS(, ERROR, 0x0002)
+#define LSTATUS_PARAMETER_NULL                  MAKE_LSTATUS(, ERROR, 0x0003)
+#define LSTATUS_PARAMETER_OUT_OF_RANGE          MAKE_LSTATUS(, ERROR, 0x0004)
+#define LSTATUS_PARAMETER_INCORRECT_TYPE        MAKE_LSTATUS(, ERROR, 0x0005)
+#define LSTATUS_INVALID_MODULE_ID               MAKE_LSTATUS(, ERROR, 0x0006)
+#define LSTATUS_BUFFER_MISALIGNED               MAKE_LSTATUS(, ERROR, 0x0007)
+
+#define LSTATUS_MEMORY_UNAVAILABLE        MAKE_LSTATUS(MEMORY, ERROR, 0x0000)
+
+#endif /* _LINUX_LSTATUS_H */
Index: 2.6.14-nlkd/include/linux/module-id.h
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/include/linux/module-id.h	2005-06-27 12:49:47.000000000 +0200
@@ -0,0 +1,53 @@
+/*****************************************************************************
+ *
+ *   File Name:      module-id.h
+ *   Created by:     Clyde Griffin
+ *   Date created:   11/1/1998
+ *
+ *   %version:       5 %
+ *   %derived_by:    jbeulich %
+ *   %date_modified: Mon Jun 27 04:49:36 2005 %
+ *
+ *****************************************************************************/
+/*****************************************************************************
+ *                                                                           *
+ * Copyright (c) 1998-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 _LINUX_MODULE_ID_H
+#define _LINUX_MODULE_ID_H
+
+typedef struct module * moduleId_t;
+
+/* Since THIS_MODULE is NULL for components not built as module, and
+   since we need a non-NULL unique per-component ID in various places,
+   we fake things here. */
+#ifdef MODULE
+extern struct module __this_module;
+# define THIS_MODULE_ID(ident) const moduleId_t ident = &__this_module
+#else
+# define THIS_MODULE_ID(ident) const moduleId_t ident = (moduleId_t)&ident
+#endif
+
+#endif /* _LINUX_MODULE_ID_H */
Index: 2.6.14-nlkd/include/linux/nint.h
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/include/linux/nint.h	2005-06-27 14:05:48.000000000 +0200
@@ -0,0 +1,240 @@
+/*****************************************************************************
+ *
+ *   File Name:      nint.h
+ *   Created by:     Clyde Griffin
+ *   Date created:   11/1/1998
+ *
+ *   %version:       5 %
+ *   %derived_by:    jbeulich %
+ *   %date_modified: Mon Jun 27 04:50:01 2005 %
+ *
+ *****************************************************************************/
+/*****************************************************************************
+ *                                                                           *
+ * Copyright (c) 1998-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 _LINUX_NINT_H
+#define _LINUX_NINT_H
+
+#include <linux/config.h>
+#include <linux/stddef.h>
+#include <linux/types.h>
+#include <linux/nls.h> /* for wchar_t */
+
+/*
+ * Alignment Macros for LoHi Machine Types
+ */
+#ifndef STRICT_ALIGNMENT
+# if defined(_M_IX86) || defined(__i386__) \
+  || defined(_M_AMD64) || defined(__x86_64__)
+#  define STRICT_ALIGNMENT 0
+# else
+#  define STRICT_ALIGNMENT 1
+# endif
+#endif
+#ifndef UNALIGNED_SUPPORT
+# if defined(__INTEL_COMPILER) || (defined(_MSC_VER) && defined(_M_IA64))
+#  define UNALIGNED_SUPPORT __unaligned
+# elif !STRICT_ALIGNMENT
+#  define UNALIGNED_SUPPORT
+# endif
+#endif
+
+#if defined(_M_IA64) || defined(__ia64__)
+
+# define NATIVE_APPEND_(p)		p##64
+# define NATIVE_EMBED_(p, s)		p##64##s
+# define PHYSADDR_APPEND_(p)		p##64
+# define PHYSADDR_EMBED_(p, s)	p##64##s
+
+#elif defined(_M_IX86) || defined(__i386__) \
+   || defined(_M_AMD64) || defined(__x86_64__)
+
+# define NATIVE_APPEND_(p)		p##32
+# define NATIVE_EMBED_(p, s)		p##32##s
+# define PHYSADDR_APPEND_(p)		p##64
+# define PHYSADDR_EMBED_(p, s)	p##64##s
+
+#elif !defined(NATIVE_APPEND_) || !defined(NATIVE_EMBED_) || !defined(PHYSADDR_APPEND_) || !defined(PHYSADDR_EMBED_)
+# error Unimplemented!
+#endif
+
+#ifdef CONFIG_64BIT
+# define POINTER_APPEND_(p)		p##64
+# define POINTER_EMBED_(p, s)		p##64##s
+#else
+# define POINTER_APPEND_(p)		p##32
+# define POINTER_EMBED_(p, s)		p##32##s
+#endif
+
+typedef POINTER_EMBED_(int, _t)	intptr_t;
+typedef POINTER_EMBED_(uint, _t)	uintptr_t;
+typedef NATIVE_EMBED_(int, _t)	nint_t;
+typedef NATIVE_EMBED_(uint, _t)	nuint_t;
+typedef PHYSADDR_EMBED_(uint, _t)	physaddr_t;
+
+#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS)
+# ifndef INT32_MAX
+#  define INT8_MAX		INT8_C (0x7f)
+#  define INT8_MIN		(-INT8_MAX-1)
+#  define INT16_MAX		INT16_C(0x7fff)
+#  define INT16_MIN		(-INT16_MAX-1)
+#  define INT32_MAX		INT32_C(0x7fffffff)
+#  define INT32_MIN		(-INT32_MAX-1)
+#  define INT64_MAX		INT64_C(0x7fffffffffffffff)
+#  define INT64_MIN		(-INT64_MAX-1)
+# endif
+# ifndef UINT32_MAX
+#  define UINT8_MAX		UINT8_C (0xff)
+#  define UINT16_MAX	UINT16_C(0xffff)
+#  define UINT32_MAX	UINT32_C(0xffffffff)
+#  define UINT64_MAX	UINT64_C(0xffffffffffffffff)
+# endif
+# define INTPTR_MIN		POINTER_EMBED_(INT, _MIN)
+# define INTPTR_MAX		POINTER_EMBED_(INT, _MAX)
+# define UINTPTR_MAX	POINTER_EMBED_(UINT, _MAX)
+# define NINT_MIN		NATIVE_EMBED_(INT, _MIN)
+# define NINT_MAX		NATIVE_EMBED_(INT, _MAX)
+# define NUINT_MAX		NATIVE_EMBED_(UINT, _MAX)
+# define PHYSADDR_MAX	PHYSADDR_EMBED_(UINT, _MAX)
+#endif
+
+#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS)
+# ifndef INT32_C
+#  define INT8_C(n)		(n)
+#  define INT16_C(n)	(n)
+#  define INT32_C(n)	(n)
+#  define INT64_C(n)	(n##LL)
+# endif
+# ifndef UINT32_C
+#  define UINT8_C(n)	(n)
+#  define UINT16_C(n)	(n)
+#  define UINT32_C(n)	(n##U)
+#  define UINT64_C(n)	(n##ULL)
+# endif
+# define INTPTR_C		POINTER_EMBED_(INT, _C)
+# define UINTPTR_C		POINTER_EMBED_(UINT, _C)
+# define NINT_C		NATIVE_EMBED_(INT, _C)
+# define NUINT_C		NATIVE_EMBED_(UINT, _C)
+# define PHYSADDR_C		PHYSADDR_EMBED_(UINT, _C)
+#endif
+
+#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS)
+# ifndef PRId32
+#  define PRI_8(t)  #t
+#  define PRId8 PRI_8(d)
+#  define PRIi8 PRI_8(i)
+#  define PRIo8 PRI_8(o)
+#  define PRIu8 PRI_8(u)
+#  define PRIx8 PRI_8(x)
+#  define PRIX8 PRI_8(X)
+
+#  define PRI_16(t) #t
+#  define PRId16 PRI_16(d)
+#  define PRIi16 PRI_16(i)
+#  define PRIo16 PRI_16(o)
+#  define PRIu16 PRI_16(u)
+#  define PRIx16 PRI_16(x)
+#  define PRIX16 PRI_16(X)
+
+#  define PRI_32(t) #t
+#  define PRId32 PRI_32(d)
+#  define PRIi32 PRI_32(i)
+#  define PRIo32 PRI_32(o)
+#  define PRIu32 PRI_32(u)
+#  define PRIx32 PRI_32(x)
+#  define PRIX32 PRI_32(X)
+
+#  define PRI_64(t) "L"#t
+#  define PRId64 PRI_64(d)
+#  define PRIi64 PRI_64(i)
+#  define PRIo64 PRI_64(o)
+#  define PRIu64 PRI_64(u)
+#  define PRIx64 PRI_64(x)
+#  define PRIX64 PRI_64(X)
+
+# endif
+# define NPRId		NATIVE_APPEND_(PRId)
+# define NPRIi		NATIVE_APPEND_(PRIi)
+# define NPRIo		NATIVE_APPEND_(PRIo)
+# define NPRIu		NATIVE_APPEND_(PRIu)
+# define NPRIx		NATIVE_APPEND_(PRIx)
+# define NPRIX		NATIVE_APPEND_(PRIX)
+# define NSCNd		NATIVE_APPEND_(SCNd)
+# define NSCNi		NATIVE_APPEND_(SCNi)
+# define NSCNo		NATIVE_APPEND_(SCNo)
+# define NSCNu		NATIVE_APPEND_(SCNu)
+# define NSCNx		NATIVE_APPEND_(SCNx)
+# define PPRId		PHYSADDR_APPEND_(PRId)
+# define PPRIi		PHYSADDR_APPEND_(PRIi)
+# define PPRIo		PHYSADDR_APPEND_(PRIo)
+# define PPRIu		PHYSADDR_APPEND_(PRIu)
+# define PPRIx		PHYSADDR_APPEND_(PRIx)
+# define PPRIX		PHYSADDR_APPEND_(PRIX)
+# define PSCNd		PHYSADDR_APPEND_(SCNd)
+# define PSCNi		PHYSADDR_APPEND_(SCNi)
+# define PSCNo		PHYSADDR_APPEND_(SCNo)
+# define PSCNu		PHYSADDR_APPEND_(SCNu)
+# define PSCNx		PHYSADDR_APPEND_(SCNx)
+#endif
+
+#define GETPTR(addr)	POINTER_APPEND_(GET)(addr)
+#define PUTPTR(n, addr)	POINTER_APPEND_(PUT)(n, addr)
+#define GETN(addr)		NATIVE_APPEND_(GET)(addr)
+#define PUTN(n, addr)	NATIVE_APPEND_(PUT)(n, addr)
+#define GETPHYS(addr)	PHYSADDR_APPEND_(GET)(addr)
+#define PUTPHYS(pa, addr) PHYSADDR_APPEND_(PUT)(pa, addr)
+
+/*
+ * Define a type suitable for forcing 128-bit (16-byte) structure alignment
+ */
+#if defined(__INTEL_COMPILER)
+
+typedef long long __m128;
+typedef __m128 align128_t;
+
+#elif defined(__ECL)
+
+typedef __int128 align128_t;
+
+#elif defined(__GNUC__)
+
+typedef struct {
+	char _;
+} align128_t __attribute__((__aligned__(16)));
+
+#endif
+
+typedef union {
+#if defined(_M_IA64) || defined(__ia64__)
+	align128_t        fp128;
+#endif
+	struct {
+		uint64_t loflt;
+		uint64_t hiflt;
+	} real_fp;
+} float128_t;
+
+#endif /* _LINUX_NINT_H */
Index: 2.6.14-nlkd/include/linux/nlkd.h
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/include/linux/nlkd.h	2005-11-03 12:04:12.000000000 +0100
@@ -0,0 +1,241 @@
+/*****************************************************************************
+ *
+ *   File Name:      nlkd.h
+ *   Created by:     Jan Beulich
+ *   %version:       17 %
+ *   %derived_by:    jbeulich %
+ *   %date_modified: Thu Nov 03 04:03: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:
+ *
+ *****************************************************************************/
+
+#include <linux/config.h>
+
+#ifndef DEBUG_EVENT_ENTER_DEBUGGER
+# define DEBUG_EVENT_ENTER_DEBUGGER		0
+
+/* negative values are error conditions */
+# define DEBUG_EVENT_PANIC			(-1)
+# define DEBUG_EVENT_ASSERT			(-2)
+
+/* positive values are informational */
+# define DEBUG_EVENT_MESSAGE			1
+# define DEBUG_EVENT_MODULE_LOAD		2
+# define DEBUG_EVENT_MODULE_UNLOAD		3
+# define DEBUG_EVENT_THREAD_CREATE		4
+# define DEBUG_EVENT_THREAD_DESTROY	5
+
+# ifndef __ASSEMBLY__
+#  ifdef CONFIG_NLKD
+
+#   include <linux/linkage.h>
+#   include <linux/compiler.h>
+
+asmlinkage void nlkdAssert(const char*string,
+	const char*file,
+	const char*func,
+	unsigned line);
+asmlinkage void nlkdDebugEvent(int eventCode, ...);
+asmlinkage void nlkdEnterDebugger(void);
+asmlinkage void nlkdPanic(const char*, ...);
+struct ftaInterruptionCtx_s;
+int nlkdIsDebugEvent(const struct ftaInterruptionCtx_s*);
+#   ifndef CONFIG_NLKD_FTA
+void nlkdSetDebugEventType(struct ftaInterruptionCtx_s*);
+#   endif
+
+#   if defined(__GNUC__)
+#    define rtASSERT(e) ((void)(likely(e) || (nlkdAssert(#e, __FILE__, __PRETTY_FUNCTION__, __LINE__), 0)))
+#   elif __STDC_VERSION__ >= 199901L
+#    define rtASSERT(e) ((void)(likely(e) || (nlkdAssert(#e, __FILE__, __func__, __LINE__), 0)))
+#   else
+#    define rtASSERT(e) ((void)(likely(e) || (nlkdAssert(#e, __FILE__, NULL, __LINE__), 0)))
+#   endif
+
+#  else /* CONFIG_NLKD */
+
+#   include <linux/kernel.h>
+
+static inline void nlkdDebugEvent(int eventCode, ...) {}
+#   define nlkdPanic panic
+
+#  endif /* CONFIG_NLKD */
+# endif /* !__ASSEMBLY__ */
+#endif /* DEBUG_EVENT_xxx */
+
+#ifndef _LINUX_NLKD_H
+#define _LINUX_NLKD_H
+# ifndef __ASSEMBLY__
+
+#  ifdef CONFIG_NLKD
+
+#   include <linux/module-id.h>
+#   include <linux/nint.h>
+#   include <linux/lstatus.h>
+#   include <stdarg.h>
+
+void nlkd_init(void);
+void nlkd_init_done(void);
+
+#   define NLKD_EXT_ID_MAX 32
+
+typedef void nlkdExtHandler_t(void*context, const char*command);
+
+void nlkdExtInputString(char*buffer, nuint_t bufferSize);
+void nlkdExtOutputString(const char*);
+int nlkdExtPrintf(const char*, ...) __attribute__((__format__(__printf__, 1, 2)));
+LSTATUS nlkdExtRegister(const char*id,
+	nlkdExtHandler_t*,
+	void*handlerContext,
+	moduleId_t,
+	const char*description,
+	nuint_t flags);
+LSTATUS nlkdExtUnregister(const char*id, moduleId_t);
+int nlkdExtVprintf(const char*, va_list);
+
+#   ifndef MODULE
+/* For code needing no initialization (e.g. printk), provide a way to store
+   the handler information without the need to call nlkdExtRegister(). */
+typedef const struct {
+	const char*id;
+	nlkdExtHandler_t*handler;
+	void*handlerContext;
+	const moduleId_t*pModuleId;
+	const char*description;
+	nuint_t flags;
+} nlkdExtension_t;
+#    define NLKD_EXTENSION(id, handler, ctx, mod, descr, flg) \
+	static nlkdExtension_t __nlkd_ext_##id                \
+		__attribute__((__section__(".nlkd.ext")))     \
+		__attribute__((__aligned__(sizeof(void*))))   \
+		__attribute_used__ = {                        \
+		#id, handler, ctx, &mod, descr, flg           \
+	}
+#   endif
+
+struct pt_regs;
+struct cdeBPStruct_s;
+
+#   ifdef CONFIG_CDE
+#    define MAYBE_INDIR(x) cdeBP##x
+#   else
+#    define MAYBE_INDIR(x) (*x)
+extern struct nlkdBPXface_s {
+#   endif
+
+/*
+ *
+ */
+void MAYBE_INDIR(Load)(
+	void);
+
+/*
+ *
+ */
+void MAYBE_INDIR(EnvClearAll)(
+	struct cdeBPStruct_s * * bpHead);
+
+/*
+ *
+ */
+void MAYBE_INDIR(EnvDisableAll)(
+	const struct cdeBPStruct_s * const * bpHead);
+
+/*
+ *
+ */
+void MAYBE_INDIR(EnvEnableAll)(
+	const struct cdeBPStruct_s * const * bpHead);
+
+/*
+ *
+ */
+int MAYBE_INDIR(EnvCheckAll)(
+	const struct pt_regs *,
+	const struct cdeBPStruct_s * const * bpHead);
+
+#   undef MAYBE_INDIR
+#   ifndef CONFIG_CDE
+} const * nlkdBPXface;
+#   endif
+
+#  else
+
+#   define nlkd_init()
+#   define nlkd_init_done()
+
+#  endif
+
+#  ifndef bp_list_handle
+#   if defined(CONFIG_CDE)
+#    define bp_list_handle(what, cond, obj) ((cond) \
+                                             ? cdeBPEnv##what##All(&(obj)->bpList) \
+                                             : (void)(obj))
+#    define bp_list_clear(obj) bp_list_handle(Clear, (obj)->bpList, obj)
+#    define bp_list_check(regs, obj) ((obj)->bpList \
+                                      ? cdeBPEnvCheckAll(regs, &(obj)->bpList) \
+                                      : ((void)(regs), (void)(obj), -1))
+#    define bp_load() cdeBPLoad()
+#   elif defined(CONFIG_NLKD)
+#    define bp_list_handle(what, cond, obj) ((cond) && nlkdBPXface \
+                                             ? nlkdBPXface->Env##what##All(&(obj)->bpList) \
+                                             : (void)(obj))
+#    define bp_list_clear(obj) bp_list_handle(Clear, (obj)->bpList, obj)
+#    define bp_list_check(regs, obj) ((obj)->bpList && nlkdBPXface \
+                                      ? nlkdBPXface->EnvCheckAll(regs, &(obj)->bpList) \
+                                      : ((void)(regs), (void)(obj), 0))
+#    define bp_load() (nlkdBPXface ? nlkdBPXface->Load() : (void)0)
+#   else
+#    define bp_list_handle(what, cond, obj) ((void)(cond), (void)(obj))
+#    define bp_list_clear(obj) ((void)(obj))
+#    define bp_list_check(regs, obj) ((void)(regs), (void)(obj), -1)
+#    define bp_load() ((void)0)
+#   endif
+#   define bp_list_disable(cond, obj) bp_list_handle(Disable, cond, obj)
+#   define bp_list_enable(cond, obj) bp_list_handle(Enable, cond, obj)
+#  endif
+
+#  define ctASSERT_GLUE(x, y) x##y
+#  define ctASSERT_NAME(tag) ctASSERT_GLUE(_ctassert_, tag)
+#  define CTASSERT_DECL(e) struct ctASSERT_NAME(__LINE__) {unsigned _:!!(e);}
+#  define CTASSERT_TYPED_EXPR(t, e) ((t)sizeof(char[1 - 2 * !(e)]))
+#  define CTASSERT_EXPR(e) CTASSERT_TYPED_EXPR(void, e)
+
+# endif /* __ASSEMBLY__ */
+#endif /* _LINUX_NLKD_H */
+
+#undef RTASSERT
+#undef RTVERIFY
+#ifndef __ASSEMBLY__
+# if !defined(CONFIG_NLKD) || !defined(CONFIG_DEBUG_KERNEL) || defined(NDEBUG)
+#  define RTASSERT(e) ((void)0)
+#  define RTVERIFY(e) ((void)(e))
+# else
+#  define RTASSERT rtASSERT
+#  define RTVERIFY rtASSERT
+# endif
+#endif /* !__ASSEMBLY__ */

  parent reply	other threads:[~2005-11-09 14:18 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                         ` Jan Beulich [this message]
2005-11-09 14:19                           ` [PATCH 23/39] NLKD/x86 - core Jan Beulich
2005-11-09 14:20                             ` [PATCH 24/39] NLKD/i386 " Jan Beulich
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=4372135F.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.