* Re: [PATCH 12/16] 2.6.17-rc6 perfmon2 patch for review: modified i386 files
@ 2006-06-16 3:00 Chuck Ebbert
2006-06-16 7:47 ` Stephane Eranian
0 siblings, 1 reply; 3+ messages in thread
From: Chuck Ebbert @ 2006-06-16 3:00 UTC (permalink / raw)
To: Stephane Eranian; +Cc: linux-kernel, Stephane Eranian
In-Reply-To: <200606150907.k5F97g7B008214@frankl.hpl.hp.com>
On Thu, 15 Jun 2006 02:07:42 -0700, Stephane Eranian wrote:
> This patch contains the modified i386 files
>
> <...>
>
> diff -ur linux-2.6.17-rc6.orig/arch/i386/kernel/apic.c linux-2.6.17-rc6/arch/i386/kernel/apic.c
> --- linux-2.6.17-rc6.orig/arch/i386/kernel/apic.c 2006-06-08 01:42:30.000000000 -0700
> +++ linux-2.6.17-rc6/arch/i386/kernel/apic.c 2006-06-08 01:49:22.000000000 -0700
> @@ -27,6 +27,7 @@
> #include <linux/sysdev.h>
> #include <linux/cpu.h>
> #include <linux/module.h>
> +#include <linux/perfmon.h>
>
> #include <asm/atomic.h>
> #include <asm/smp.h>
> @@ -1179,6 +1180,8 @@
> update_process_times(user_mode_vm(regs));
> #endif
>
> + pfm_handle_switch_timeout();
> +
> /*
> * We take the 'long' return path, and there every subsystem
> * grabs the apropriate locks (kernel lock/ irq lock).
Please add '-p' to your diff options. It makes it easier to see what is
happening.
>
> <...>
>
> diff -ur linux-2.6.17-rc6.orig/arch/i386/kernel/syscall_table.S linux-2.6.17-rc6/arch/i386/kernel/syscall_table.S
> --- linux-2.6.17-rc6.orig/arch/i386/kernel/syscall_table.S 2006-06-08 01:42:30.000000000 -0700
> +++ linux-2.6.17-rc6/arch/i386/kernel/syscall_table.S 2006-06-08 01:50:27.000000000 -0700
> @@ -316,3 +316,15 @@
> .long sys_sync_file_range
> .long sys_tee /* 315 */
> .long sys_vmsplice
> + .long sys_pfm_create_context
> + .long sys_pfm_write_pmcs
> + .long sys_pfm_write_pmds
> + .long sys_pfm_read_pmds /* 320 */
> + .long sys_pfm_load_context
> + .long sys_pfm_start
> + .long sys_pfm_stop
> + .long sys_pfm_restart
> + .long sys_pfm_create_evtsets /* 325 */
> + .long sys_pfm_getinfo_evtsets
> + .long sys_pfm_delete_evtsets
> + .long sys_pfm_unload_context
I think there are seven spaces plus a tab here for the first 11 new
syscalls? (You won't be able to tell from my quote because my mail
program mangles quoted text.)
>
> <...>
>
> --- linux-2.6.17-rc6.orig/include/asm-i386/unistd.h 2006-06-08 01:42:35.000000000 -0700
> +++ linux-2.6.17-rc6/include/asm-i386/unistd.h 2006-06-08 01:49:22.000000000 -0700
> @@ -322,8 +322,19 @@
> #define __NR_sync_file_range 314
> #define __NR_tee 315
> #define __NR_vmsplice 316
> +#define __NR_pfm_create_context 317
> +#define __NR_pfm_write_pmcs (__NR_pfm_create_context+1)
> +#define __NR_pfm_write_pmds (__NR_pfm_create_context+2)
> +#define __NR_pfm_read_pmds (__NR_pfm_create_context+3)
> +#define __NR_pfm_load_context (__NR_pfm_create_context+4)
> +#define __NR_pfm_start (__NR_pfm_create_context+5)
> +#define __NR_pfm_stop (__NR_pfm_create_context+6)
> +#define __NR_pfm_restart (__NR_pfm_create_context+7)
> +#define __NR_pfm_create_evtsets (__NR_pfm_create_context+8)
> +#define __NR_pfm_getinfo_evtsets (__NR_pfm_create_context+9)
> +#define __NR_pfm_delete_evtsets (__NR_pfm_create_context+10)
>
> -#define NR_syscalls 317
> +#define NR_syscalls 329
>
> /*
> * user-visible error numbers are in the range -1 - -128: see
You missed __NR_pfm_unload_context.
--
Chuck
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 12/16] 2.6.17-rc6 perfmon2 patch for review: modified i386 files
2006-06-16 3:00 [PATCH 12/16] 2.6.17-rc6 perfmon2 patch for review: modified i386 files Chuck Ebbert
@ 2006-06-16 7:47 ` Stephane Eranian
0 siblings, 0 replies; 3+ messages in thread
From: Stephane Eranian @ 2006-06-16 7:47 UTC (permalink / raw)
To: Chuck Ebbert; +Cc: linux-kernel
Chuck,
On Thu, Jun 15, 2006 at 11:00:01PM -0400, Chuck Ebbert wrote:
> >
> > diff -ur linux-2.6.17-rc6.orig/arch/i386/kernel/apic.c linux-2.6.17-rc6/arch/i386/kernel/apic.c
> > --- linux-2.6.17-rc6.orig/arch/i386/kernel/apic.c 2006-06-08 01:42:30.000000000 -0700
> > +++ linux-2.6.17-rc6/arch/i386/kernel/apic.c 2006-06-08 01:49:22.000000000 -0700
> > @@ -27,6 +27,7 @@
> > #include <linux/sysdev.h>
> > #include <linux/cpu.h>
> > #include <linux/module.h>
> > +#include <linux/perfmon.h>
> >
> > #include <asm/atomic.h>
> > #include <asm/smp.h>
> > @@ -1179,6 +1180,8 @@
> > update_process_times(user_mode_vm(regs));
> > #endif
> >
> > + pfm_handle_switch_timeout();
> > +
> > /*
> > * We take the 'long' return path, and there every subsystem
> > * grabs the apropriate locks (kernel lock/ irq lock).
>
> Please add '-p' to your diff options. It makes it easier to see what is
> happening.
>
Will do for next patch. This is indeed a very useful option I did not know about.
> > diff -ur linux-2.6.17-rc6.orig/arch/i386/kernel/syscall_table.S linux-2.6.17-rc6/arch/i386/kernel/syscall_table.S
> > --- linux-2.6.17-rc6.orig/arch/i386/kernel/syscall_table.S 2006-06-08 01:42:30.000000000 -0700
> > +++ linux-2.6.17-rc6/arch/i386/kernel/syscall_table.S 2006-06-08 01:50:27.000000000 -0700
> > @@ -316,3 +316,15 @@
> > .long sys_sync_file_range
> > .long sys_tee /* 315 */
> > .long sys_vmsplice
> > + .long sys_pfm_create_context
> > + .long sys_pfm_write_pmcs
> > + .long sys_pfm_write_pmds
> > + .long sys_pfm_read_pmds /* 320 */
> > + .long sys_pfm_load_context
> > + .long sys_pfm_start
> > + .long sys_pfm_stop
> > + .long sys_pfm_restart
> > + .long sys_pfm_create_evtsets /* 325 */
> > + .long sys_pfm_getinfo_evtsets
> > + .long sys_pfm_delete_evtsets
> > + .long sys_pfm_unload_context
>
> I think there are seven spaces plus a tab here for the first 11 new
> syscalls? (You won't be able to tell from my quote because my mail
> program mangles quoted text.)
>
I fixed that now.
> >
> > <...>
> >
> > --- linux-2.6.17-rc6.orig/include/asm-i386/unistd.h 2006-06-08 01:42:35.000000000 -0700
> > +++ linux-2.6.17-rc6/include/asm-i386/unistd.h 2006-06-08 01:49:22.000000000 -0700
> > @@ -322,8 +322,19 @@
> > #define __NR_sync_file_range 314
> > #define __NR_tee 315
> > #define __NR_vmsplice 316
> > +#define __NR_pfm_create_context 317
> > +#define __NR_pfm_write_pmcs (__NR_pfm_create_context+1)
> > +#define __NR_pfm_write_pmds (__NR_pfm_create_context+2)
> > +#define __NR_pfm_read_pmds (__NR_pfm_create_context+3)
> > +#define __NR_pfm_load_context (__NR_pfm_create_context+4)
> > +#define __NR_pfm_start (__NR_pfm_create_context+5)
> > +#define __NR_pfm_stop (__NR_pfm_create_context+6)
> > +#define __NR_pfm_restart (__NR_pfm_create_context+7)
> > +#define __NR_pfm_create_evtsets (__NR_pfm_create_context+8)
> > +#define __NR_pfm_getinfo_evtsets (__NR_pfm_create_context+9)
> > +#define __NR_pfm_delete_evtsets (__NR_pfm_create_context+10)
> >
> > -#define NR_syscalls 317
> > +#define NR_syscalls 329
> >
> > /*
> > * user-visible error numbers are in the range -1 - -128: see
>
> You missed __NR_pfm_unload_context.
>
I think, I dropped the line when I edit the patch to make it fit lkml limitations. The line
is there is the actual patch.
Thanks for your review.
--
-Stephane
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 12/16] 2.6.17-rc6 perfmon2 patch for review: modified i386 files
@ 2006-06-15 9:07 Stephane Eranian
0 siblings, 0 replies; 3+ messages in thread
From: Stephane Eranian @ 2006-06-15 9:07 UTC (permalink / raw)
To: linux-kernel; +Cc: eranian
This patch contains the modified i386 files
diff -ur linux-2.6.17-rc6.orig/arch/i386/Kconfig linux-2.6.17-rc6/arch/i386/Kconfig
--- linux-2.6.17-rc6.orig/arch/i386/Kconfig 2006-06-08 01:42:30.000000000 -0700
+++ linux-2.6.17-rc6/arch/i386/Kconfig 2006-06-13 06:58:13.000000000 -0700
@@ -762,6 +762,7 @@
enable suspend on SMP systems. CPUs can be controlled through
/sys/devices/system/cpu.
+source "arch/i386/perfmon/Kconfig"
endmenu
diff -ur linux-2.6.17-rc6.orig/arch/i386/Makefile linux-2.6.17-rc6/arch/i386/Makefile
--- linux-2.6.17-rc6.orig/arch/i386/Makefile 2006-06-08 01:42:30.000000000 -0700
+++ linux-2.6.17-rc6/arch/i386/Makefile 2006-06-08 01:49:22.000000000 -0700
@@ -87,6 +87,7 @@
head-y := arch/i386/kernel/head.o arch/i386/kernel/init_task.o
libs-y += arch/i386/lib/
+core-$(CONFIG_PERFMON) += arch/i386/perfmon/
core-y += arch/i386/kernel/ \
arch/i386/mm/ \
arch/i386/$(mcore-y)/ \
diff -ur linux-2.6.17-rc6.orig/arch/i386/kernel/apic.c linux-2.6.17-rc6/arch/i386/kernel/apic.c
--- linux-2.6.17-rc6.orig/arch/i386/kernel/apic.c 2006-06-08 01:42:30.000000000 -0700
+++ linux-2.6.17-rc6/arch/i386/kernel/apic.c 2006-06-08 01:49:22.000000000 -0700
@@ -27,6 +27,7 @@
#include <linux/sysdev.h>
#include <linux/cpu.h>
#include <linux/module.h>
+#include <linux/perfmon.h>
#include <asm/atomic.h>
#include <asm/smp.h>
@@ -1179,6 +1180,8 @@
update_process_times(user_mode_vm(regs));
#endif
+ pfm_handle_switch_timeout();
+
/*
* We take the 'long' return path, and there every subsystem
* grabs the apropriate locks (kernel lock/ irq lock).
diff -ur linux-2.6.17-rc6.orig/arch/i386/kernel/i8259.c linux-2.6.17-rc6/arch/i386/kernel/i8259.c
--- linux-2.6.17-rc6.orig/arch/i386/kernel/i8259.c 2006-03-19 21:53:29.000000000 -0800
+++ linux-2.6.17-rc6/arch/i386/kernel/i8259.c 2006-06-08 01:49:22.000000000 -0700
@@ -11,6 +11,7 @@
#include <linux/kernel_stat.h>
#include <linux/sysdev.h>
#include <linux/bitops.h>
+#include <linux/perfmon.h>
#include <asm/8253pit.h>
#include <asm/atomic.h>
@@ -427,6 +428,8 @@
*/
setup_pit_timer();
+ pfm_vector_init();
+
/*
* External FPU? Set up irq13 if so, for
* original braindamaged IBM FERR coupling.
diff -ur linux-2.6.17-rc6.orig/arch/i386/kernel/process.c linux-2.6.17-rc6/arch/i386/kernel/process.c
--- linux-2.6.17-rc6.orig/arch/i386/kernel/process.c 2006-06-08 01:42:30.000000000 -0700
+++ linux-2.6.17-rc6/arch/i386/kernel/process.c 2006-06-08 01:49:22.000000000 -0700
@@ -33,6 +33,7 @@
#include <linux/delay.h>
#include <linux/reboot.h>
#include <linux/init.h>
+#include <linux/perfmon.h>
#include <linux/mc146818rtc.h>
#include <linux/module.h>
#include <linux/kallsyms.h>
@@ -380,6 +381,7 @@
tss->io_bitmap_base = INVALID_IO_BITMAP_OFFSET;
put_cpu();
}
+ pfm_exit_thread(tsk);
}
void flush_thread(void)
@@ -431,6 +433,8 @@
savesegment(fs,p->thread.fs);
savesegment(gs,p->thread.gs);
+ pfm_copy_thread(p, childregs);
+
tsk = current;
if (unlikely(NULL != tsk->thread.io_bitmap_ptr)) {
p->thread.io_bitmap_ptr = kmalloc(IO_BITMAP_BYTES, GFP_KERNEL);
@@ -689,6 +693,8 @@
disable_tsc(prev_p, next_p);
+ pfm_ctxswin(next_p);
+
return prev_p;
}
diff -ur linux-2.6.17-rc6.orig/arch/i386/kernel/signal.c linux-2.6.17-rc6/arch/i386/kernel/signal.c
--- linux-2.6.17-rc6.orig/arch/i386/kernel/signal.c 2006-06-08 01:42:30.000000000 -0700
+++ linux-2.6.17-rc6/arch/i386/kernel/signal.c 2006-06-08 01:49:22.000000000 -0700
@@ -21,6 +21,7 @@
#include <linux/suspend.h>
#include <linux/ptrace.h>
#include <linux/elf.h>
+#include <linux/perfmon.h>
#include <asm/processor.h>
#include <asm/ucontext.h>
#include <asm/uaccess.h>
@@ -651,6 +652,11 @@
clear_thread_flag(TIF_SINGLESTEP);
}
+ /*
+ * must be done before signals
+ */
+ pfm_handle_work();
+
/* deal with pending signal delivery */
if (thread_info_flags & (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK))
do_signal(regs);
diff -ur linux-2.6.17-rc6.orig/arch/i386/kernel/smp.c linux-2.6.17-rc6/arch/i386/kernel/smp.c
--- linux-2.6.17-rc6.orig/arch/i386/kernel/smp.c 2006-06-08 01:42:30.000000000 -0700
+++ linux-2.6.17-rc6/arch/i386/kernel/smp.c 2006-06-08 01:49:22.000000000 -0700
@@ -624,3 +624,69 @@
}
}
+/*
+ * this function sends a 'generic call function' IPI to one other CPU
+ * in the system.
+ *
+ * cpu is a standard Linux logical CPU number.
+ */
+static void
+__smp_call_function_single(int cpu, void (*func) (void *info), void *info,
+ int nonatomic, int wait)
+{
+ struct call_data_struct data;
+ int cpus = 1;
+
+ data.func = func;
+ data.info = info;
+ atomic_set(&data.started, 0);
+ data.wait = wait;
+ if (wait)
+ atomic_set(&data.finished, 0);
+
+ call_data = &data;
+ wmb();
+ /* Send a message to all other CPUs and wait for them to respond */
+ send_IPI_mask(cpumask_of_cpu(cpu), CALL_FUNCTION_VECTOR);
+
+ /* Wait for response */
+ while (atomic_read(&data.started) != cpus)
+ cpu_relax();
+
+ if (!wait)
+ return;
+
+ while (atomic_read(&data.finished) != cpus)
+ cpu_relax();
+}
+
+/*
+ * smp_call_function_single - Run a function on another CPU
+ * @func: The function to run. This must be fast and non-blocking.
+ * @info: An arbitrary pointer to pass to the function.
+ * @nonatomic: Currently unused.
+ * @wait: If true, wait until function has completed on other CPUs.
+ *
+ * Retrurns 0 on success, else a negative status code.
+ *
+ * Does not return until the remote CPU is nearly ready to execute <func>
+ * or is or has executed.
+ */
+
+int smp_call_function_single (int cpu, void (*func) (void *info), void *info,
+ int nonatomic, int wait)
+{
+ /* prevent preemption and reschedule on another processor */
+ int me = get_cpu();
+ if (cpu == me) {
+ WARN_ON(1);
+ put_cpu();
+ return -EBUSY;
+ }
+ spin_lock_bh(&call_lock);
+ __smp_call_function_single(cpu, func, info, nonatomic, wait);
+ spin_unlock_bh(&call_lock);
+ put_cpu();
+ return 0;
+}
+EXPORT_SYMBOL(smp_call_function_single);
diff -ur linux-2.6.17-rc6.orig/arch/i386/kernel/syscall_table.S linux-2.6.17-rc6/arch/i386/kernel/syscall_table.S
--- linux-2.6.17-rc6.orig/arch/i386/kernel/syscall_table.S 2006-06-08 01:42:30.000000000 -0700
+++ linux-2.6.17-rc6/arch/i386/kernel/syscall_table.S 2006-06-08 01:50:27.000000000 -0700
@@ -316,3 +316,15 @@
.long sys_sync_file_range
.long sys_tee /* 315 */
.long sys_vmsplice
+ .long sys_pfm_create_context
+ .long sys_pfm_write_pmcs
+ .long sys_pfm_write_pmds
+ .long sys_pfm_read_pmds /* 320 */
+ .long sys_pfm_load_context
+ .long sys_pfm_start
+ .long sys_pfm_stop
+ .long sys_pfm_restart
+ .long sys_pfm_create_evtsets /* 325 */
+ .long sys_pfm_getinfo_evtsets
+ .long sys_pfm_delete_evtsets
+ .long sys_pfm_unload_context
Only in linux-2.6.17-rc6/arch/i386: perfmon
diff -ur linux-2.6.17-rc6.orig/include/asm-i386/mach-default/entry_arch.h linux-2.6.17-rc6/include/asm-i386/mach-default/entry_arch.h
--- linux-2.6.17-rc6.orig/include/asm-i386/mach-default/entry_arch.h 2006-03-19 21:53:29.000000000 -0800
+++ linux-2.6.17-rc6/include/asm-i386/mach-default/entry_arch.h 2006-06-08 01:49:22.000000000 -0700
@@ -31,4 +31,8 @@
BUILD_INTERRUPT(thermal_interrupt,THERMAL_APIC_VECTOR)
#endif
+#ifdef CONFIG_PERFMON
+BUILD_INTERRUPT(pmu_interrupt,LOCAL_PERFMON_VECTOR)
+#endif
+
#endif
diff -ur linux-2.6.17-rc6.orig/include/asm-i386/mach-default/irq_vectors.h linux-2.6.17-rc6/include/asm-i386/mach-default/irq_vectors.h
--- linux-2.6.17-rc6.orig/include/asm-i386/mach-default/irq_vectors.h 2006-03-19 21:53:29.000000000 -0800
+++ linux-2.6.17-rc6/include/asm-i386/mach-default/irq_vectors.h 2006-06-08 01:49:22.000000000 -0700
@@ -56,6 +56,7 @@
* sources per level' errata.
*/
#define LOCAL_TIMER_VECTOR 0xef
+#define LOCAL_PERFMON_VECTOR 0xee
/*
* First APIC vector available to drivers: (vectors 0x30-0xee)
@@ -63,7 +64,7 @@
* levels. (0x80 is the syscall vector)
*/
#define FIRST_DEVICE_VECTOR 0x31
-#define FIRST_SYSTEM_VECTOR 0xef
+#define FIRST_SYSTEM_VECTOR 0xee
#define TIMER_IRQ 0
Only in linux-2.6.17-rc6/include/asm-i386: perfmon.h
Only in linux-2.6.17-rc6/include/asm-i386: perfmon_p4_pebs_smpl.h
diff -ur linux-2.6.17-rc6.orig/include/asm-i386/processor.h linux-2.6.17-rc6/include/asm-i386/processor.h
--- linux-2.6.17-rc6.orig/include/asm-i386/processor.h 2006-06-08 01:42:35.000000000 -0700
+++ linux-2.6.17-rc6/include/asm-i386/processor.h 2006-06-08 01:49:22.000000000 -0700
@@ -432,6 +432,7 @@
*/
unsigned long io_bitmap_max;
struct thread_struct *io_bitmap_owner;
+
/*
* pads the TSS to be cacheline-aligned (size is 0x100)
*/
@@ -469,6 +470,7 @@
unsigned long iopl;
/* max allowed port in the bitmap, in bytes: */
unsigned long io_bitmap_max;
+ void *pfm_context;
};
#define INIT_THREAD { \
diff -ur linux-2.6.17-rc6.orig/include/asm-i386/smp.h linux-2.6.17-rc6/include/asm-i386/smp.h
--- linux-2.6.17-rc6.orig/include/asm-i386/smp.h 2006-03-19 21:53:29.000000000 -0800
+++ linux-2.6.17-rc6/include/asm-i386/smp.h 2006-06-08 01:49:22.000000000 -0700
@@ -41,7 +41,8 @@
extern void zap_low_mappings (void);
extern void lock_ipi_call_lock(void);
extern void unlock_ipi_call_lock(void);
-
+extern int smp_call_function_single(int cpuid, void (*func) (void *info),
+ void *info, int retry, int wait);
#define MAX_APICID 256
extern u8 x86_cpu_to_apicid[];
diff -ur linux-2.6.17-rc6.orig/include/asm-i386/system.h linux-2.6.17-rc6/include/asm-i386/system.h
--- linux-2.6.17-rc6.orig/include/asm-i386/system.h 2006-06-08 01:42:35.000000000 -0700
+++ linux-2.6.17-rc6/include/asm-i386/system.h 2006-06-08 01:49:22.000000000 -0700
@@ -14,6 +14,7 @@
#define switch_to(prev,next,last) do { \
unsigned long esi,edi; \
+ pfm_ctxswout(prev); \
asm volatile("pushl %%ebp\n\t" \
"movl %%esp,%0\n\t" /* save ESP */ \
"movl %5,%%esp\n\t" /* restore ESP */ \
diff -ur linux-2.6.17-rc6.orig/include/asm-i386/unistd.h linux-2.6.17-rc6/include/asm-i386/unistd.h
--- linux-2.6.17-rc6.orig/include/asm-i386/unistd.h 2006-06-08 01:42:35.000000000 -0700
+++ linux-2.6.17-rc6/include/asm-i386/unistd.h 2006-06-08 01:49:22.000000000 -0700
@@ -322,8 +322,19 @@
#define __NR_sync_file_range 314
#define __NR_tee 315
#define __NR_vmsplice 316
+#define __NR_pfm_create_context 317
+#define __NR_pfm_write_pmcs (__NR_pfm_create_context+1)
+#define __NR_pfm_write_pmds (__NR_pfm_create_context+2)
+#define __NR_pfm_read_pmds (__NR_pfm_create_context+3)
+#define __NR_pfm_load_context (__NR_pfm_create_context+4)
+#define __NR_pfm_start (__NR_pfm_create_context+5)
+#define __NR_pfm_stop (__NR_pfm_create_context+6)
+#define __NR_pfm_restart (__NR_pfm_create_context+7)
+#define __NR_pfm_create_evtsets (__NR_pfm_create_context+8)
+#define __NR_pfm_getinfo_evtsets (__NR_pfm_create_context+9)
+#define __NR_pfm_delete_evtsets (__NR_pfm_create_context+10)
-#define NR_syscalls 317
+#define NR_syscalls 329
/*
* user-visible error numbers are in the range -1 - -128: see
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2006-06-16 7:55 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-06-16 3:00 [PATCH 12/16] 2.6.17-rc6 perfmon2 patch for review: modified i386 files Chuck Ebbert
2006-06-16 7:47 ` Stephane Eranian
-- strict thread matches above, loose matches on Subject: below --
2006-06-15 9:07 Stephane Eranian
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®