All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Jan Beulich" <JBeulich@novell.com>
To: <linux-kernel@vger.kernel.org>
Subject: [PATCH 12/39] NLKD/i386 - time adjustment
Date: Wed, 09 Nov 2005 15:06:41 +0100	[thread overview]
Message-ID: <43721081.76F0.0078.0@novell.com> (raw)
In-Reply-To: 4372105B.76F0.0078.0@novell.com

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

Since i386 time handling is not overflow-safe, these are the
adjustments needed for allowing debuggers to update time after
having halted the system for perhaps extended periods of time.

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

(actual patch attached)


[-- Attachment #2: linux-2.6.14-nlkd-time-i386.patch --]
[-- Type: application/octet-stream, Size: 12073 bytes --]

Since i386 time handling is not overflow-safe, these are the
adjustments needed for allowing debuggers to update time after
having halted the system for perhaps extended periods of time.

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

Index: 2.6.14-nlkd/arch/i386/kernel/timers/common.c
===================================================================
--- 2.6.14-nlkd.orig/arch/i386/kernel/timers/common.c	2005-11-09 10:40:17.000000000 +0100
+++ 2.6.14-nlkd/arch/i386/kernel/timers/common.c	2005-11-04 16:19:33.000000000 +0100
@@ -149,7 +149,7 @@ unsigned long read_timer_tsc(void)
 
 
 /* calculate cpu_khz */
-void init_cpu_khz(void)
+unsigned long init_cpu_khz(void)
 {
 	if (cpu_has_tsc) {
 		unsigned long tsc_quotient = calibrate_tsc();
@@ -166,7 +166,9 @@ void init_cpu_khz(void)
 				printk("Detected %u.%03u MHz processor.\n",
 					cpu_khz / 1000, cpu_khz % 1000);
 			}
+			return tsc_quotient;
 		}
 	}
+	return 0;
 }
 
Index: 2.6.14-nlkd/arch/i386/kernel/timers/timer_hpet.c
===================================================================
--- 2.6.14-nlkd.orig/arch/i386/kernel/timers/timer_hpet.c	2005-11-09 10:40:17.000000000 +0100
+++ 2.6.14-nlkd/arch/i386/kernel/timers/timer_hpet.c	2005-11-04 16:19:33.000000000 +0100
@@ -99,7 +99,7 @@ static unsigned long get_offset_hpet(voi
 static void mark_offset_hpet(void)
 {
 	unsigned long long this_offset, last_offset;
-	unsigned long offset;
+	unsigned long offset, lost_ticks = 0;
 
 	write_seqlock(&monotonic_lock);
 	last_offset = ((unsigned long long)last_tsc_high<<32)|last_tsc_low;
@@ -109,14 +109,34 @@ static void mark_offset_hpet(void)
 		offset = hpet_readl(HPET_T0_CMP) - hpet_tick;
 	else
 		offset = hpet_readl(HPET_COUNTER);
-	if (unlikely(((offset - hpet_last) >= (2*hpet_tick)) && (hpet_last != 0))) {
-		int lost_ticks = ((offset - hpet_last) / hpet_tick) - 1;
-		jiffies_64 += lost_ticks;
+	this_offset = ((unsigned long long)last_tsc_high<<32)|last_tsc_low;
+	if (unlikely(debugger_jiffies)) {
+		unsigned long long delta = this_offset - last_offset;
+		unsigned long lo, hi, lo1;
+
+#ifndef CONFIG_SMP
+		/* When the TSC gets reset during AP startup, the code below would
+		   incorrectly think we lost a huge amount of ticks. */
+		if (unlikely((long long)delta < 0))
+			delta = this_offset;
+#endif
+		ASM_MUL64_REG(hi /* dummy */, lo1, tsc_hpet_quotient, (unsigned long)delta);
+		ASM_MUL64_REG(lo, hi, tsc_hpet_quotient, (unsigned long)(delta >> 32));
+		__asm__("addl %3, %1\n\t"
+		        "adcl $0, %2"
+		        : "=A" (delta)
+		        : "a" (lo), "d" (hi), "rm" (lo1)
+		        : "flags");
+		do_div(delta, hpet_tick);
+		lost_ticks = delta;
 	}
+	else if (unlikely(((offset - hpet_last) >= (2*hpet_tick)) && (hpet_last != 0)))
+		lost_ticks = ((offset - hpet_last) / hpet_tick);
+	if (lost_ticks)
+		jiffies_64 += lost_ticks - 1;
 	hpet_last = offset;
 
 	/* update the monotonic base value */
-	this_offset = ((unsigned long long)last_tsc_high<<32)|last_tsc_low;
 	monotonic_base += cycles_2_ns(this_offset - last_offset);
 	write_sequnlock(&monotonic_lock);
 }
Index: 2.6.14-nlkd/arch/i386/kernel/timers/timer_pm.c
===================================================================
--- 2.6.14-nlkd.orig/arch/i386/kernel/timers/timer_pm.c	2005-11-09 10:40:17.000000000 +0100
+++ 2.6.14-nlkd/arch/i386/kernel/timers/timer_pm.c	2005-11-04 16:19:33.000000000 +0100
@@ -42,6 +42,10 @@ static u32 offset_delay;
 
 static unsigned long long monotonic_base;
 static seqlock_t monotonic_lock = SEQLOCK_UNLOCKED;
+#ifndef debugger_jiffies
+static unsigned long tsc_quotient;
+static u64 tsc_offset;
+#endif
 
 #define ACPI_PM_MASK 0xFFFFFF /* limit it to 24 bits */
 
@@ -127,6 +131,9 @@ pm_good:
 	if (verify_pmtmr_rate() != 0)
 		return -ENODEV;
 
+#ifndef debugger_jiffies
+	tsc_quotient =
+#endif
 	init_cpu_khz();
 	return 0;
 }
@@ -151,6 +158,11 @@ static inline u32 cyc2us(u32 cycles)
 static void mark_offset_pmtmr(void)
 {
 	u32 lost, delta, last_offset;
+#ifdef debugger_jiffies
+# define delta64 delta
+#else
+	u64 delta64, last_tsc_offset = tsc_offset;
+#endif
 	static int first_run = 1;
 	last_offset = offset_tick;
 
@@ -158,21 +170,60 @@ static void mark_offset_pmtmr(void)
 
 	offset_tick = read_pmtmr();
 
-	/* calculate tick interval */
-	delta = (offset_tick - last_offset) & ACPI_PM_MASK;
+#ifndef debugger_jiffies
+	rdtscll(tsc_offset);
 
-	/* convert to usecs */
-	delta = cyc2us(delta);
+	if (likely(!debugger_jiffies)) {
+#endif
+
+		/* calculate tick interval */
+		delta = (offset_tick - last_offset) & ACPI_PM_MASK;
+
+		/* convert to usecs */
+		delta = cyc2us(delta);
+
+#ifndef debugger_jiffies
+		delta64 = delta;
+	}
+	else {
+# ifdef CONFIG_SMP
+		/* When the TSC gets reset during AP startup, the code below would
+		   incorrectly think we lost a huge amount of ticks. */
+		if (unlikely((long long)(tsc_offset - last_tsc_offset) < 0))
+			delta64 = tsc_offset;
+		else
+# endif
+			delta64 = tsc_offset - last_tsc_offset;
+		__asm__("mull %2"
+			: "=a" (lost /* just a dummy */),
+			  "=d" (delta)
+			: "rm" (tsc_quotient),
+			  "0" ((unsigned long)delta64));
+		__asm__("mull %1"
+			: "=A" (delta64)
+			: "rm" (tsc_quotient),
+			  "a" ((unsigned long)(delta64 >> 32)));
+		delta64 += delta;
+		delta = (u32)delta64 ? (u32)delta64 - 1 : (offset_delay = 0);
+	}
+#endif
 
 	/* update the monotonic base value */
 	monotonic_base += delta * NSEC_PER_USEC;
 	write_sequnlock(&monotonic_lock);
 
 	/* convert to ticks */
-	delta += offset_delay;
-	lost = delta / (USEC_PER_SEC / HZ);
-	offset_delay = delta % (USEC_PER_SEC / HZ);
-
+	if (likely(delta == delta64)) {
+		delta += offset_delay;
+		lost = delta / (USEC_PER_SEC / HZ);
+		offset_delay = delta % (USEC_PER_SEC / HZ);
+	}
+	else {
+		do_div(delta64, USEC_PER_SEC / HZ);
+		lost = delta64;
+		offset_delay = 0;
+	}
+#undef delta64
 
 	/* compensate for lost ticks */
 	if (lost >= 2)
Index: 2.6.14-nlkd/arch/i386/kernel/timers/timer_tsc.c
===================================================================
--- 2.6.14-nlkd.orig/arch/i386/kernel/timers/timer_tsc.c	2005-11-09 10:40:17.000000000 +0100
+++ 2.6.14-nlkd/arch/i386/kernel/timers/timer_tsc.c	2005-11-04 16:19:33.000000000 +0100
@@ -38,11 +38,21 @@ int tsc_disable __devinitdata = 0;
 
 static int use_tsc;
 /* Number of usecs that the last interrupt was delayed */
-static int delay_at_last_interrupt;
+static unsigned long delay_at_last_interrupt;
 
 static unsigned long last_tsc_low; /* lsb 32 bits of Time Stamp Counter */
 static unsigned long last_tsc_high; /* msb 32 bits of Time Stamp Counter */
 static unsigned long long monotonic_base;
+#ifdef CONFIG_HPET_TIMER
+#ifdef CONFIG_DEBUG_KERNEL
+static unsigned long tsc_hpet_quotient;		/* convert tsc to hpet clks */
+#define TSC_HPET_QUOTIENT_PTR (&tsc_hpet_quotient)
+#else
+#define tsc_hpet_quotient 0
+#define TSC_HPET_QUOTIENT_PTR NULL
+#endif
+#endif
+
 static seqlock_t monotonic_lock = SEQLOCK_UNLOCKED;
 
 /* convert from cycles(64bits) => nanoseconds (64bits)
@@ -170,7 +180,7 @@ static void delay_tsc(unsigned long loop
 static void mark_offset_tsc_hpet(void)
 {
 	unsigned long long this_offset, last_offset;
- 	unsigned long offset, temp, hpet_current;
+ 	unsigned long offset, temp, hpet_current, lost_ticks = 0;
 
 	write_seqlock(&monotonic_lock);
 	last_offset = ((unsigned long long)last_tsc_high<<32)|last_tsc_low;
@@ -190,15 +200,33 @@ static void mark_offset_tsc_hpet(void)
 	rdtsc(last_tsc_low, last_tsc_high);
 
 	/* lost tick compensation */
+	this_offset = ((unsigned long long)last_tsc_high<<32)|last_tsc_low;
 	offset = hpet_readl(HPET_T0_CMP) - hpet_tick;
-	if (unlikely(((offset - hpet_last) > hpet_tick) && (hpet_last != 0))) {
-		int lost_ticks = (offset - hpet_last) / hpet_tick;
-		jiffies_64 += lost_ticks;
+	if (unlikely(debugger_jiffies)) {
+		unsigned long long delta = this_offset - last_offset;
+
+		if (likely((long long)delta > 0)) {
+			unsigned long lo, hi, lo1;
+			unsigned long long full;
+
+			ASM_MUL64_REG(temp, lo1, tsc_hpet_quotient, (unsigned long)delta);
+			ASM_MUL64_REG(lo, hi, tsc_hpet_quotient, (unsigned long)(delta >> 32));
+			__asm__("addl %3, %1\n\t"
+			        "adcl $0, %2"
+			        : "=A" (full)
+			        : "a" (lo), "d" (hi), "rm" (lo1)
+			        : "flags");
+			do_div(full, hpet_tick);
+			lost_ticks = full;
+		}
 	}
+	else if (unlikely(((offset - hpet_last) > hpet_tick) && (hpet_last != 0)))
+		lost_ticks = (offset - hpet_last) / hpet_tick;
+	if (lost_ticks)
+		jiffies_64 += lost_ticks - 1;
 	hpet_last = hpet_current;
 
 	/* update the monotonic base value */
-	this_offset = ((unsigned long long)last_tsc_high<<32)|last_tsc_low;
 	monotonic_base += cycles_2_ns(this_offset - last_offset);
 	write_sequnlock(&monotonic_lock);
 
@@ -342,7 +370,6 @@ EXPORT_SYMBOL(recalibrate_cpu_khz);
 static void mark_offset_tsc(void)
 {
 	unsigned long lost,delay;
-	unsigned long delta = last_tsc_low;
 	int count;
 	int countmp;
 	static int count1 = 0;
@@ -400,25 +427,55 @@ static void mark_offset_tsc(void)
 		}
 	}
 
+	this_offset = ((unsigned long long)last_tsc_high<<32)|last_tsc_low;
+
 	/* lost tick compensation */
-	delta = last_tsc_low - delta;
-	{
+	if (likely(!debugger_jiffies)) {
+		unsigned long delta = last_tsc_low - (unsigned long)last_offset;
 		register unsigned long eax, edx;
+
 		eax = delta;
 		__asm__("mull %2"
 		:"=a" (eax), "=d" (edx)
 		:"rm" (fast_gettimeoffset_quotient),
 		 "0" (eax));
 		delta = edx;
+		delta += delay_at_last_interrupt;
+		lost = delta / (USEC_PER_SEC / HZ);
+		delay = delta % (USEC_PER_SEC / HZ);
+	}
+	else {
+		unsigned long long delta;
+		unsigned long delta_low;
+
+#ifdef CONFIG_SMP
+		/* When the TSC gets reset during AP startup, the code below would
+		   incorrectly think we lost a huge amount of ticks. */
+		if (unlikely((long long)(this_offset - last_offset) < 0))
+			delta = this_offset;
+		else
+#endif
+			delta = this_offset - last_offset;
+
+		__asm__("mull %2"
+			: "=a" (lost /* just a dummy */),
+			  "=d" (delta_low)
+			: "rm" (fast_gettimeoffset_quotient),
+			  "0" ((unsigned long)delta));
+		__asm__("mull %1"
+			: "=A" (delta)
+			: "rm" (fast_gettimeoffset_quotient),
+			  "a" ((unsigned long)(delta >> 32)));
+		delta += delta_low;
+		delta += delay_at_last_interrupt;
+		delay = do_div(delta, USEC_PER_SEC / HZ);
+		lost = delta;
 	}
-	delta += delay_at_last_interrupt;
-	lost = delta/(1000000/HZ);
-	delay = delta%(1000000/HZ);
 	if (lost >= 2) {
 		jiffies_64 += lost-1;
 
 		/* sanity check to ensure we're not always losing ticks */
-		if (lost_count++ > 100) {
+		if (!debugger_jiffies && lost_count++ > 100) {
 			printk(KERN_WARNING "Losing too many ticks!\n");
 			printk(KERN_WARNING "TSC cannot be used as a timesource.  \n");
 			printk(KERN_WARNING "Possible reasons for this are:\n");
@@ -435,7 +492,6 @@ static void mark_offset_tsc(void)
 	} else
 		lost_count = 0;
 	/* update the monotonic base value */
-	this_offset = ((unsigned long long)last_tsc_high<<32)|last_tsc_low;
 	monotonic_base += cycles_2_ns(this_offset - last_offset);
 	write_sequnlock(&monotonic_lock);
 
@@ -499,7 +555,7 @@ static int __init init_tsc(char* overrid
 		if (is_hpet_enabled() && hpet_use_timer) {
 			unsigned long result, remain;
 			printk("Using TSC for gettimeofday\n");
-			tsc_quotient = calibrate_tsc_hpet(NULL);
+			tsc_quotient = calibrate_tsc_hpet(TSC_HPET_QUOTIENT_PTR);
 			timer_tsc.mark_offset = &mark_offset_tsc_hpet;
 			/*
 			 * Math to calculate hpet to usec multiplier
Index: 2.6.14-nlkd/include/asm-i386/timer.h
===================================================================
--- 2.6.14-nlkd.orig/include/asm-i386/timer.h	2005-11-09 10:40:17.000000000 +0100
+++ 2.6.14-nlkd/include/asm-i386/timer.h	2005-11-04 16:19:34.000000000 +0100
@@ -57,7 +57,7 @@ extern struct init_timer_opts timer_cycl
 
 extern unsigned long calibrate_tsc(void);
 extern unsigned long read_timer_tsc(void);
-extern void init_cpu_khz(void);
+extern unsigned long init_cpu_khz(void);
 extern int recalibrate_cpu_khz(void);
 #ifdef CONFIG_HPET_TIMER
 extern struct init_timer_opts timer_hpet_init;

  reply	other threads:[~2005-11-09 14:05 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                   ` Jan Beulich [this message]
2005-11-09 19:10                     ` [PATCH 12/39] NLKD/i386 " 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                             ` [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=43721081.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.