9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
From: Leendert van Doorn <leendert@watson.ibm.com>
To: Peter Bosch <pb@research.bell-labs.com>
Cc: philw@entrisphere.com, 9fans@cse.psu.edu
Subject: [9fans] (no subject)
Date: Sun, 23 Feb 2003 01:14:21 -0500	[thread overview]
Message-ID: <20030223061422.043E9F222@huxley.watson.ibm.com> (raw)
In-Reply-To: Your message of "Sat, 22 Feb 2003 16:11:44 EST." <2ba8f07c025d45604e247b27a02d4123@plan9.bell-labs.com>


I was indeed an intern but in 1995, I was also the author of the x86
port of Amoeba and wrote that timer code around 1990. My code never
contained the offending cpuspeed routine. In fact, I just looked at
the RCS repository that still exists at the VU and it isn't in there
either. Who ever added cpuspeed to this file, it was not one of the
VU Amoeba developers.

	Leendert


# From: philw@entrisphere.com
# Date: Sat Feb 22 15:35:26 EST 2003
# To: 9fans@cse.psu.edu
# Subject: RE: [9fans] A quite amusing thing...
#
#
# Leendert van Doorn was a summer student at the labs that year I think
#
# phil
#
# 	-----Original Message-----
# 	From: Russ Cox [mailto:rsc@plan9.bell-labs.com]
# 	Sent: Sat 2/22/2003 12:30 PM
# 	To: 9fans@cse.psu.edu
# 	Cc:
# 	Subject: Re: [9fans] A quite amusing thing...
#
#
#
# 	That _is_ fairly amusing.
#
# 	We've had a form of that code (including the big
# 	comment) in our source tree since July 15, 1994.
# 	But the 1994 code didn't have the for loop to run
# 	until loops got big enough (it assumed 10000 was
# 	enough) and it didn't have all the clock frequency
# 	stuff (which got added later).
#
# 	So either Plan 9 copied Amoeba back in 1994 (before
# 	the original project was terminated) and has been
# 	secretly tracking the code since then, or Amoeba copied
# 	Plan 9 some time later after the code was changed to
# 	look more like it does today.  I know where my money is.
#
# 	Also, I downloaded the original Amoeba code and the
# 	pit.c looked nothing like the Plan 9 code as of 1996.
#
# 	Below you'll find Plan 9's clock.c from 1994, Amoeba's
# 	pit.c from 1996, and Amoeba's pit.c from today.
# 	Note the difference between the last two.  Sure looks like
#
# 	 * Stefan Bosse (12/1999-7/2000)
# 	 * sbosse@physik.uni-bremen.de
# 	 *
# 	 * -> pit_hw_milli now default routine with 1ms resolution
# 	 * -> cpuspeed measurement and delay loop reference
#
# 	copied the Plan 9 code.
#
# 	> Hmm... It is possible too that Amoeba developer's have copied this co
de
# 	> but I doubt it.
#
# 	Why?
#
# 	Russ
#
# 	/* --rw-rw-r-- M 3014 jmk sys 2766 Jul 15  1994 sys/src/brazil/pc/clock
.c */
#
# 	void
# 	clockinit(void)
# 	{
# 	        ulong x, y;     /* change in counter */
# 	        ulong cycles, loops;
#
# 	        /*
# 	         *  set vector for clock interrupts
# 	         */
# 	        setvec(Clockvec, clock, 0);
#
# 	        /*
# 	         *  set clock for 1/HZ seconds
# 	         */
# 	        outb(Tmode, Load0|Square);
# 	        outb(T0cntr, (Freq/HZ));        /* low byte */
# 	        outb(T0cntr, (Freq/HZ)>>8);     /* high byte */
#
# 	        /*
# 	         *  measure time for the loop
# 	         *
# 	         *                      MOVL    loops,CX
# 	         *      aaml1:          AAM
# 	         *                      LOOP    aaml1
# 	         *
# 	         *  the time for the loop should be independent from external
# 	         *  cache's and memory system since it fits in the execution
# 	         *  prefetch buffer.
# 	         *
# 	         */
# 	        loops = 10000;
# 	        outb(Tmode, Latch0);
# 	        x = inb(T0cntr);
# 	        x |= inb(T0cntr)<<8;
# 	        aamloop(loops);
# 	        outb(Tmode, Latch0);
# 	        y = inb(T0cntr);
# 	        y |= inb(T0cntr)<<8;
# 	        x -= y;
#
# 	        /*
# 	         *  counter  goes at twice the frequency, once per transition,
# 	         *  i.e., twice per the square wave
# 	         */
# 	        x >>= 1;
#
# 	        /*
# 	         *  figure out clock frequency and a loop multiplier for delay(
).
# 	         */
# 	        switch(cputype = x86()){
# 	        case 386:
# 	                cycles = 30;
# 	                break;
# 	        case 486:
# 	                cycles = 24;
# 	                break;
# 	        default:
# 	                cycles = 23;
# 	                break;
# 	        }
# 	        cpufreq = (cycles*loops) * (Freq/x);
# 	        loopconst = (cpufreq/1000)/cycles;      /* AAM+LOOP's for 1 ms
*/
# 	}
#
#
# 	/*      @(#)pit.c       1.4     94/04/06 09:23:12 */
# 	/*
# 	 * Copyright 1994 Vrije Universiteit, The Netherlands.
# 	 * For full copyright and restrictions on use see the file COPYRIGHT in
 the
# 	 * top level of the Amoeba distribution.
# 	 */
#
# 	/*
# 	 * pit.c
# 	 *
# 	 * Driver for the 8254 timer (PIT). The i8254 timer has three timer cha
nnels
# 	 * of which only one (channel 0) is available for timer interrupts. The
 other
# 	 * channels are used for the speaker and memory refresh.
# 	 *
# 	 * Author:
# 	 *      Leendert van Doorn
# 	 */
# 	#include <amoeba.h>
# 	#include <assert.h>
# 	INIT_ASSERT
# 	#include <fault.h>
# 	#include <bool.h>
# 	#include "sys/proto.h"
# 	#include "i386_proto.h"
# 	#include "pit.h"
#
# 	#ifndef PIT_DEBUG
# 	#define PIT_DEBUG       0
# 	#endif
#
# 	static int pit_debug;                   /* current debug level */
#
# 	#ifdef notyet
# 	static uint32 pit_hw_milli();
# 	#endif
# 	static void pit_intr();
#
# 	/*
# 	 * Initialize channel 0 of the i8254A timer
# 	 */
# 	void
# 	pit_init()
# 	{
# 	    register uint32 counter = (PIT_FREQ * PIT_INTERVAL) / 1000L;
#
# 	#ifndef NDEBUG
# 	    if ((pit_debug = kernel_option("pit")) == 0)
# 	        pit_debug = PIT_DEBUG;
# 	    if (pit_debug > 1)
# 	        printf("pit_init(), pit_interval = 0x%x (%d), counter = %x\n",
# 	            PIT_INTERVAL, PIT_INTERVAL, counter);
# 	#endif
#
# 	    /* set timer to run continuously */
# 	    assert(counter <= 0xFFFF);
# 	    out_byte(PIT_MODE, PIT_MODE3);
# 	    out_byte(PIT_CH0, (int) (counter & 0xFF));
# 	    out_byte(PIT_CH0, (int) ((counter >> 8) & 0xFF));
#
# 	#ifdef notyet
# 	    /* I still have to thoroughly test this */
# 	    set_hw_milli(pit_hw_milli);
# 	#endif
#
# 	    setirq(PIT_IRQ, pit_intr);
# 	    pic_enable(PIT_IRQ);
# 	}
#
# 	/*
# 	 * Read i8254's channel 0 counter. The counter decrements at twice the
# 	 * timer frequency (one full cycle for each half of a square wave).
# 	 */
# 	uint16
# 	pit_channel0()
# 	{
# 	    register uint16 counter;
#
# 	    out_byte(PIT_MODE, PIT_LC);
# 	    counter = in_byte(PIT_CH0), counter |= (in_byte(PIT_CH0) << 8);
# 	    return counter;
# 	}
#
# 	/*
# 	 * Delay for at least ``msec'' milli seconds
# 	 */
# 	void
# 	pit_delay(msec)
# 	    int msec;
# 	{
# 	    register uint16 current, previous, diff;
# 	    register uint32 total;
#
# 	    /*
# 	     * The counter decrements at twice the timer frequency
# 	     * (one full cycle for each half of a square wave).
# 	     */
# 	    diff = 100; /* just in case */
# 	    total = (uint32) msec * (2 * PIT_FREQ / 1000);
# 	    previous = pit_channel0();
# 	    for (;;) {
# 	        current = pit_channel0();
# 	        if (current < previous)
# 	            diff = previous - current;
# 	        if (diff >= total)
# 	            break;
# 	        total -= diff;
# 	        previous = current;
# 	    }
# 	}
#
# 	#ifdef notyet
# 	/*
# 	 * Return number of actual milli-seconds that have passed
# 	 */
# 	static uint32
# 	pit_hw_milli()
# 	{
# 	    extern uint32 milli_uptime;
# 	    register uint32 milli;
# 	    register int flags;
# 	    uint16 counter;
# 	    int status;
#
# 	    flags = get_flags(); disable();
# 	    out_byte(PIT_MODE, PIT_RB);
# 	    out_byte(PIT_MODE, 0xC2);
# 	    status = in_byte(PIT_CH0);
# 	    counter = in_byte(PIT_CH0), counter |= (in_byte(PIT_CH0) << 8);
# 	    milli = milli_uptime + (PIT_INTERVAL / 2) *
# 	        (counter / (PIT_FREQ * PIT_INTERVAL) / 1000L);
# 	    if ((status & 0x80) == 0) milli += PIT_INTERVAL/2;
# 	    set_flags(flags);
# 	    return milli;
# 	}
# 	#endif
#
# 	/*
# 	 * The actual clock interrupt
# 	 */
# 	/* ARGSUSED */
# 	static void
# 	pit_intr(reason, frame)
# 	    int reason;
# 	    struct fault *frame;
# 	{
# 	    void sweeper_run();
# 	    void flp_motoroff();
# 	    extern int motortime;
#
# 	#ifdef MCA
# 	    /* ps/2 clock needs to be told to stop interrupting */
# 	    out_byte(0x61, in_byte(0x61) | 0x80);
# 	#endif
#
# 	    enqueue(sweeper_run, (long) PIT_INTERVAL);
#
# 	#if (defined(ISA) || defined(MCA)) && !defined(NOFLOPPY)
# 	    /* stop running floppy motor */
# 	    if (motortime != 0 && --motortime == 0)
# 	        flp_motoroff();
# 	#endif
# 	}
#
#
# 	/*
# 	 * This file is part of the FIREBALL AMOEBA System.
# 	 *
# 	 *
# 	 * Last modified:
# 	 *              18/02/01
# 	 *
# 	 * Stefan Bosse (12/1999-7/2000)
# 	 * sbosse@physik.uni-bremen.de
# 	 *
# 	 * -> pit_hw_milli now default routine with 1ms resolution
# 	 * -> cpuspeed measurement and delay loop reference
# 	 *
# 	 *
# 	 *
# 	 * FIREBALL AMOEBA is free software; you can redistribute it and/or
# 	 * modify it under the terms of the GNU General Public License as
# 	 * published by the Free Software Foundation; version 2.
# 	 *
# 	 * The FIREBALL AMOEBA is distributed in the hope that it will be usefu
ll,
# 	 * but WITHOUT ANY WARRANTY; without even implied warranty of
# 	 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# 	 * General Public License for more details.
# 	 *
# 	 * Original Copyright: Vrije Universiteit, The Netherlands.
# 	 */
#
#
#
#
# 	/*
# 	 * pit.c
# 	 *
# 	 * Driver for the 8254 timer (PIT). The i8254 timer has three timer cha
nnels
# 	 * of which only one (channel 0) is available for timer interrupts. The
 other
# 	 * channels are used for the speaker and memory refresh.
# 	 *
# 	 * Author:
# 	 *      Leendert van Doorn
# 	 */
#
#
# 	#include <amoeba.h>
# 	#include <assert.h>
# 	INIT_ASSERT
# 	#include <fault.h>
# 	#include <bool.h>
# 	#include "sys/proto.h"
# 	#include "i386_proto.h"
# 	#include <irq.h>
# 	#include "pit.h"
# 	#include <cpu.h>
#
# 	#ifndef PIT_DEBUG
# 	#define PIT_DEBUG       0
# 	#endif
#
# 	#ifdef STATISTICS
# 	static unsigned long pit_hw_milli_count=0;
# 	static unsigned long pit_hw_milli_wrap1=0;
# 	static unsigned long pit_hw_milli_wrap2=0;
# 	static unsigned long pit_delay_count=0;
# 	#endif
#
# 	static int pit_debug;                   /* current debug level */
# 	static int initialized=0;
#
# 	#ifdef PIT_HW_MILLI
# 	static uint32 pit_hw_milli();
# 	#endif
# 	static void pit_intr();
#
# 	/*
# 	 * milli_uptime will be incremented in sweeper_run, but it's delayed
# 	 * because of enqueue() handling.
# 	 * milli_uptime should be handled ***here***.
# 	 * Hack: Local we use timer_ticks for pit_hw_milli(), incremented in lo
w
# 	 * level ISR below...
# 	 */
# 	unsigned long timer_ticks=0;
#
# 	/* for time monotony checking; we have a serious problem with
# 	 * this faulty timer hardware
# 	 */
# 	static unsigned long last_time=0;
#
# 	/*
# 	 * Initialize channel 0 of the i8254A timer
# 	 */
# 	void
# 	pit_init()
# 	{
# 	    register uint32 counter = (PIT_FREQ * PIT_INTERVAL) / 1000L;
#
#
# 	    if(!initialized)
# 	    {
#
# 	        initialized=1;
# 	#ifndef NDEBUG
# 	        if ((pit_debug = kernel_option("pit")) == 0)
# 	                pit_debug = PIT_DEBUG;
# 	        if (pit_debug > 1)
# 	                printf("pit_init(), pit_interval = 0x%x (%d), counter =
 %x\n",
# 	                       PIT_INTERVAL, PIT_INTERVAL, counter);
# 	#endif
#
# 	        /* set timer to run continuously */
# 	        assert(counter <= 0xFFFF);
#
# 	        if(check_region(PIT_CH0,4)<0)
# 	                panic("Some fool allocated timer ports");
# 	        request_region(PIT_CH0,4,"PIT");
#
# 	        out_byte(PIT_MODE, PIT_MODE2);
#
# 	        out_byte(PIT_CH0, (int) (counter & 0xFF));
# 	        out_byte(PIT_CH0, (int) ((counter >> 8) & 0xFF));
#
# 	#ifdef PIT_HW_MILLI
# 	        /* I still have to thoroughly test this */
# 	        /* SB: still timer wrap problems; but time monotonie is gurante
ed */
# 	        set_hw_milli(pit_hw_milli);
# 	#endif
#
# 	        if(request_irq(PIT_IRQ,
# 	                       pit_intr,
# 	                       SA_NORMAL,
# 	                       "PIT",
# 	                       (void *)NULL)!=0)
# 	                panic("Some fool allocated timer irq");
#
# 	        enable_irq(PIT_IRQ);
# 	        /*pic_enable(PIT_IRQ);*/
# 	    }
# 	}
#
# 	/*
# 	 * Read i8254's channel 0 counter. The counter decrements at twice the
# 	 * timer frequency (one full cycle for each half of a square wave).
# 	 */
# 	uint16
# 	pit_channel0()
# 	{
# 	    register uint16 counter;
# 	    unsigned long flags;
#
# 	    save_flags(flags);cli();
# 	    out_byte(PIT_MODE, PIT_LC);
# 	    counter = in_byte(PIT_CH0), counter |= (in_byte(PIT_CH0) << 8);
# 	    restore_flags(flags);
# 	    return counter;
# 	}
#
# 	/*
# 	 * Delay for at least ``msec'' milli seconds
# 	 */
# 	void
# 	pit_delay(msec)
# 	    int msec;
# 	{
# 	    register uint16 current, previous, diff;
# 	    register uint32 total;
#
#
# 	#ifdef STATISTICS
# 	    pit_delay_count++;
# 	#endif
# 	    /*
# 	     * The counter decrements at twice the timer frequency
# 	     * (one full cycle for each half of a square wave).
# 	     */
# 	    diff = 100; /* just in case */
# 	    total = (uint32) msec * (PIT_FREQ / 1000);
# 	    previous = pit_channel0();
# 	    for (;;) {
# 	        current = pit_channel0();
# 	        if (current < previous)
# 	            diff = previous - current;
# 	        if (diff >= total)
# 	            break;
# 	        total -= diff;
# 	        previous = current;
# 	    }
# 	}
#
#
# 	#ifdef PIT_HW_MILLI
# 	/*
# 	 * Return number of actual milli-seconds that have passed
# 	 */
# 	static uint32
# 	pit_hw_milli()
# 	{
# 	    extern uint32 milli_uptime;
# 	    register uint32 milli;
# 	    uint16 counter,counter2;
# 	    int status,status2;
# 	    unsigned long flags;
# 	    unsigned long ticks=timer_ticks;
#
#
#
# 	#ifdef STATISTICS
# 	    pit_hw_milli_count++;
# 	#endif
#
# 	    save_flags(flags);cli();
# 	    /* Select timer0 and latch counter value. */
# 	    out_byte(PIT_MODE,PIT_LC);
# 	    counter = in_byte(PIT_CH0), counter |= (in_byte(PIT_CH0) << 8);
# 	    restore_flags(flags);
#
# 	    milli = timer_ticks*PIT_INTERVAL +
# 	        (1000*(((PIT_FREQ*PIT_INTERVAL)/1000) - counter )/(PIT_FREQ) );
#
#
# 	    /* check time monotony */
# 	    if(milli<last_time)
# 	    {
# 	#ifdef STATISTICS
# 	        pit_hw_milli_wrap1++;
# 	#endif
# 	        if(ticks<timer_ticks)
# 	        {
# 	                milli=timer_ticks*PIT_INTERVAL;
# 	#ifdef STATISTICS
# 	                pit_hw_milli_wrap2++;
# 	#endif
# 	        }
# 	        else
# 	                milli=last_time;
# 	    }
#
#
# 	    last_time=milli;
#
#
# 	    if(ticks<timer_ticks) /* Between start and here pit_intr was called
 */
# 	        return (timer_ticks*PIT_INTERVAL);
# 	    else
# 	        return milli;
# 	}
# 	#endif
#
# 	/*
# 	 * The actual clock interrupt
# 	 */
# 	/* ARGSUSED */
# 	#ifdef __KERNEL__       /* Work with Linux-ISR  */
# 	static void
# 	pit_intr(reason,dev_idt,frame)
# 	    int reason;
# 	    void *dev_idt;
# 	    struct fault *frame;
# 	#else
# 	static void
# 	pit_intr(reason,frame)
# 	    int reason;
# 	    struct fault *frame;
# 	#endif
# 	{
# 	    void sweeper_run();
# 	    void flp_motoroff();
# 	    extern int motortime;
#
#
# 	    timer_ticks++;
#
# 	#ifdef MCA
# 	    /* ps/2 clock needs to be told to stop interrupting */
# 	    out_byte(0x61, in_byte(0x61) | 0x80);
# 	#endif
#
# 	    enqueue(sweeper_run, (long) PIT_INTERVAL);
#
# 	#if (defined(ISA) || defined(MCA)) && !defined(NOFLOPPY)
# 	    /* stop running floppy motor */
# 	    if (motortime != 0 && --motortime == 0)
# 	        flp_motoroff();
# 	#endif
# 	}
#
# 	#ifdef STATISTICS
# 	int
# 	pit_stat(begin,end)
# 	char    *begin;
# 	char    *end;
# 	{
# 	        char *p;
# 	        int     i;
#
# 	        p=bprintf(begin,end,"**** Hardware Timer statistics *****\n");
# 	        p=bprintf(p,end,"pit_hw_milli() calls: %d\n",
# 	                  pit_hw_milli_count);
# 	        p=bprintf(p,end,"pit_hw_milli time wrap check failed: %d\n",
# 	                  pit_hw_milli_wrap1);
# 	        p=bprintf(p,end,"pit_hw_milli dirty ticks increment: %d\n",
# 	                  pit_hw_milli_wrap2);
#
# 	        p=bprintf(p,end,"pit_delay() calls: %d\n",
# 	                  pit_delay_count);
#
# 	        return p-begin;
# 	}
# 	#endif
#
# 	/* For cpu speed measurement. We need timer access. */
#
# 	void
# 	cpuspeed(int aalcycles, int havecycleclock)
# 	{
# 	        int cpufreq, loops, incr, x, y;
# 	        unsigned long ax1,dx1,ax2,dx2,a,b;
#
# 	        pit_init();
#
# 	        /* find biggest loop that doesn't wrap */
# 	        incr = 16000000/(aalcycles*HZ*2);
# 	        x = 2000;
# 	        for(loops = incr; loops < 64*1024; loops += incr) {
#
# 	                /*
# 	                 *  measure time for the loop
# 	                 *
# 	                 *                      MOVL    loops,CX
# 	                 *      aaml1:          AAM
# 	                 *                      LOOP    aaml1
# 	                 *
# 	                 *  the time for the loop should be independent of exte
rnal
# 	                 *  cache and memory system since it fits in the execut
ion
# 	                 *  prefetch buffer.
# 	                 *
# 	                 */
#
# 	                /* Beware of counter reset's (wraps)... */
#
# 	                /* Read the cpu internal clock if available */
# 	                if(havecycleclock)
# 	                        rdmsr(0x10, &ax1,&dx1);
# 	                x = (int)pit_channel0();
#
# 	                aamloop(loops);
#
# 	                if(havecycleclock)
# 	                        rdmsr(0x10, &ax2,&dx2);
#
# 	                y = (int)pit_channel0();
#
# 	                x -= y;
#
# 	                if(x < 0)
# 	                        x += PIT_FREQ/PIT_HZ;
#
# 	                if(x > PIT_FREQ/(3*PIT_HZ))
# 	                        break;
# 	        }
#
# 	        /*
# 	         *  figure out clock frequency and a loop multiplier for delay(
).
# 	         *  n.b. counter goes up by 2*PIT_FREQ
# 	         */
# 	        cpufreq = loops*((aalcycles*PIT_FREQ)/x);
# 	        cpu.loopconst = (cpufreq/1000)/aalcycles; /* AAM+LOOP's for 1ms
 */
#
# 	        /* check aalcycle value */
# 	        if(kernel_option("cud") == 1)
# 	                printf("cpuspeed: aalcycle MHz=%d\n",
# 	                        (cpufreq + cpufreq/200)/1000000);
#
# 	        if(havecycleclock){
#
#
# 	                if(dx2 == dx1)
# 	                        b = (ax2-ax1);
# 	                else    /* counter wrap */
# 	                        b = (ax2+0xffffffff-ax1);
#
# 	                b /= x;
# 	                b *= PIT_FREQ;
#
#
# 	                /*
# 	                 *  round to the nearest megahz
# 	                 */
# 	                cpu.cpumhz = (b+500000)/1000000L;
# 	                cpu.cpuhz = b;
# 	        } else {
# 	                /*
# 	                 *  add in possible 0.5% error and convert to MHz
# 	                 */
# 	                cpu.cpumhz = (cpufreq + cpufreq/200)/1000000;
# 	                cpu.cpuhz = cpufreq;
# 	        }
#
#
# 	}
#
#
#
#
# ===> 2/ (multipart/mixed) [inline]
#
#
# The following attachment had content that we can't
# prove to be harmless.  To avoid possible automatic
# execution, we changed the content headers.
# The original header was:
#
# 	Content-Type: application/ms-tnef;
# 	name="winmail.dat"
# 	Content-Transfer-Encoding: base64
#
# ===> 2/2/ (application/octet-stream) [file]
# 	cp /mail/fs/mbox/68/2/2/body /usr/pb/winmail.dat.suspect
#

--
Leendert van Doorn                                    <leendert@watson.ibm.com>
IBM T.J. Watson Research Center                       (914) 784-7831
30 Saw Mill River Road, Hawthorne, NY 10532


       reply	other threads:[~2003-02-23  6:14 UTC|newest]

Thread overview: 433+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <2ba8f07c025d45604e247b27a02d4123@plan9.bell-labs.com>
2003-02-23  6:14 ` Leendert van Doorn [this message]
2018-04-02 15:27 Steve Simon
2018-04-02 21:08 ` Digby R.S. Tarvin
  -- strict thread matches above, loose matches on Subject: below --
2018-01-04 20:11 Steve Simon
2018-01-04 20:22 ` Lyndon Nerenberg
2018-01-04 21:20   ` Steve Simon
2018-01-04 22:27     ` Joseph Stewart
2018-01-04 23:22       ` Rob Pike
2018-01-04 23:37 ` Greg Lewin
2017-08-30 14:12 Steve Simon
2017-08-30 16:36 ` Steven Stallion
2016-12-02 11:44 Steve Simon
2016-12-02 19:12 ` Bakul Shah
2016-07-29  0:01 kokamoto
2014-11-25  4:20 trebol
2014-07-31  5:18 kokamoto
2014-07-05  0:38 kokamoto
2014-06-21 19:45 Steve Simon
2014-06-21 23:39 ` cinap_lenrek
2014-06-22  6:54   ` Steve Simon
2014-04-16  1:52 sl
2014-04-16  9:39 ` Ingo Krabbe
2014-04-15 14:41 Steve Simon
2014-04-15 15:36 ` Anthony Sorace
2014-04-15 18:18   ` sl
2014-04-15 22:42     ` erik quanstrom
2014-04-15 23:40       ` arisawa
2014-04-16  1:20     ` Anthony Sorace
2014-04-15 15:50 ` erik quanstrom
2014-04-15 17:46   ` Aram Hăvărneanu
2014-04-15 17:53     ` erik quanstrom
2014-03-19 18:44 Jacob Todd
2014-03-15 23:07 Steve Simon
2014-03-15 23:26 ` Jacob Todd
2014-03-16 14:51   ` erik quanstrom
2014-03-16  1:51 ` Jeff Sickel
2013-11-17 23:04 Steve Simon
2013-06-03 15:43 sl
2013-04-30 15:56 lucio
2013-04-30 17:11 ` erik quanstrom
2012-10-19  9:46 Sophit4
2012-09-03 11:16 yaroslav
2012-09-03 11:40 ` Charles Forsyth
2012-04-11  9:38 陈俊秀
2011-12-30 18:08 erik quanstrom, erik quanstrom
2011-12-30 18:49 ` Jack Norton
2011-12-30 19:24   ` erik quanstrom
2011-12-30 20:35 ` Aram Hăvărneanu
2011-12-30 21:28   ` Bakul Shah
2011-12-30 21:34     ` Charles Forsyth
2011-12-30 21:38       ` Aram Hăvărneanu
2011-12-30 21:53       ` Bakul Shah
2011-12-30 21:56         ` Aram Hăvărneanu
2011-12-30 22:41           ` Charles Forsyth
2011-12-30 23:00             ` Lyndon Nerenberg
     [not found] ` <CAEAzY38puVSzEnn90mmi+Bq4hnL9WpbBsnysjJYvXYw3xvE=xA@mail.gmail.c>
2011-12-30 21:05   ` erik quanstrom
2011-12-30 21:39     ` Jack Norton
2011-12-31  5:31       ` erik quanstrom
2011-12-31 17:40         ` Aram Hăvărneanu
     [not found]         ` <CAEAzY39S9z6mKtun68DGFbEkA6y8kaqTEyDCkW6ydHK8aHFG5A@mail.gmail.c>
2011-12-31 19:32           ` erik quanstrom
2012-01-05 18:03             ` Aram Hăvărneanu
2011-11-22 18:32 Steve Simon
2011-08-09 12:40 Steve Simon
2011-08-09 12:54 ` erik quanstrom
2011-08-09 13:07   ` Steve Simon
2011-08-09 14:52     ` erik quanstrom
2011-08-09 18:21     ` Lyndon Nerenberg (VE6BBM/VE7TFX)
2011-08-09 18:31       ` Steve Simon
2011-08-09 14:12 ` Russ Cox
2011-04-06  9:09 Stanley Lieber
2011-04-25  7:42 ` Steve Simon
2011-04-25 13:11   ` erik quanstrom
     [not found] <96cc26fe3002748983b3fc16cc949bab@quintile.net>
2011-03-28 13:56 ` erik quanstrom
2011-03-28 14:50   ` cinap_lenrek at gmx.de
2011-03-28 15:18     ` ron minnich
2011-03-28 22:57       ` erik quanstrom
2010-12-21  3:43 erik quanstrom, erik quanstrom
2010-05-06 19:55 erik quanstrom
2010-03-08  4:22 lucio
2010-03-08  4:49 ` ron minnich
2010-03-08  4:58   ` lucio
2010-03-08  6:17     ` Russ Cox
2010-03-08  6:22       ` lucio
2010-03-08 15:13     ` Patrick Kelly
2010-03-08 15:57       ` Francisco J Ballesteros
2010-03-08  8:54 ` Richard Miller
2010-03-08  9:31   ` lucio
2010-03-08 22:53 ` Sascha Retzki
2010-03-08 18:01   ` lucio
2010-03-08 19:20     ` Lyndon Nerenberg (VE6BBM/VE7TFX)
2010-03-09  4:20       ` lucio
2010-03-09  5:26         ` Lyndon Nerenberg (VE6BBM/VE7TFX)
2010-03-09  5:32           ` erik quanstrom
2010-03-09  5:50             ` Lyndon Nerenberg (VE6BBM/VE7TFX)
2010-03-09 20:08               ` Patrick Kelly
2010-03-08 19:41     ` erik quanstrom
2010-03-08 22:19     ` James Tomaschke
2010-03-09  4:34       ` lucio
     [not found] <mailman.26991.1268008023.1512.9fans@9fans.net>
2010-03-08  0:54 ` - Choc -
2010-03-07 17:47 lucio
2010-03-07 18:37 ` John Floren
2010-03-07 19:16   ` lucio
2010-03-07 19:57     ` erik quanstrom
2010-03-08  4:29       ` lucio
2010-03-06  9:32 [9fans] nb—search and index notes in files by keyword Peter A. Cejchan
2010-03-07  4:30 ` [9fans] (no subject) lucio
2010-03-07  5:05   ` Anthony Sorace
2010-03-07 17:31     ` ron minnich
2010-03-07 17:43       ` erik quanstrom
2010-03-07 18:14         ` lucio
2010-03-07 19:25           ` cinap_lenrek
2010-03-07 17:42     ` lucio
2010-03-07 17:53       ` erik quanstrom
2010-03-07 18:06         ` lucio
2010-03-07 18:59       ` Iruata Souza
2010-03-07 19:26         ` lucio
2010-03-07 19:36           ` ron minnich
2010-03-07  9:14   ` Skip Tavakkolian
2010-03-07 11:04     ` lucio
2010-02-05  1:53 erik quanstrom
2010-01-18 21:55 erik quanstrom
2009-09-29 23:25 [9fans] acme without a heavy grid (SFW) Jason Catena
2009-10-01 16:49 ` J.R. Mauro
2009-10-01 17:18   ` [9fans] (no subject) Pablo Alonso Salas Alvarez
2009-09-15 22:34 erik quanstrom
2009-07-24 17:18 erik quanstrom
2009-07-24 17:20 ` erik quanstrom
2009-07-24 16:14 [9fans] Does "as little software as possible" include a modern maht
2009-07-24 17:16 ` [9fans] (no subject) erik quanstrom
2009-07-17 21:09 drivers
2009-05-28 11:08 Gregory Pavelcak
2009-04-23 11:38 Steve Simon
2009-04-23 12:34 ` Charles Forsyth
2009-04-23 13:07   ` Devon H. O'Dell
2009-04-23 17:13   ` lucio
2009-04-23 17:17     ` erik quanstrom
2009-04-23 17:28       ` David Leimbach
2009-04-23 19:32 ` lucio
2009-04-27  4:42 ` lucio
2009-04-27 11:57   ` lucio
2009-04-27 21:30   ` Steve Simon
2009-02-24  0:29 mattmobile
2009-02-24  0:48 ` ron minnich
2009-02-24  1:02   ` Jeff Sickel
2009-02-24  1:25     ` sixforty
2009-02-24  2:13       ` Anthony Sorace
2009-02-23  0:13 [9fans] actionfs mattmobile
2009-03-05 13:16 ` [9fans] (no subject) cej
2009-01-02  2:30 erik quanstrom
2008-12-06 19:28 Dave Eckhardt
2008-12-06 23:42 ` Roman Shaposhnik
2008-12-07  0:04   ` erik quanstrom
2008-11-21 18:28 erik quanstrom
2008-11-21 21:33 ` Kenji Arisawa
2008-11-21 22:55   ` erik quanstrom
2008-08-14 19:09 akumar
2008-08-14 19:14 ` andrey mirtchovski
2008-07-19  2:37 [9fans] 9vx and local file systems Russ Cox
2008-07-21 13:26 ` [9fans] (no subject) kokamoto
2008-07-21 14:45   ` a
2008-03-19  5:03 Skip Tavakkolian
2008-03-19 12:41 ` erik quanstrom
2008-03-19 17:16   ` Lyndon Nerenberg
2007-12-14 23:02 Joshua Wood
2007-11-15 20:00 erik quanstrom
2007-08-24  1:54 YAMANASHI Takeshi
2007-08-24  2:04 ` erik quanstrom
2007-07-08 12:37 Gregory Pavelcak
2007-07-08 14:08 ` erik quanstrom
2007-07-08 14:50   ` erik quanstrom
2007-07-12 20:57     ` erik quanstrom
2007-05-25 23:29 ozan s. yigit
2007-05-25 23:42 ` Charles Forsyth
2007-05-26  0:09   ` ozan s. yigit
2007-05-28 12:36   ` Lluís Batlle
2007-05-11  6:57 Lyndon Nerenberg
2007-05-08 23:02 Steve Simon
2007-04-13 22:16 devon.odell
2007-04-14 11:17 ` W B Hacker
2007-01-15 23:24 steve
2006-12-12 21:20 Steve Simon
2006-12-10 13:49 sape
2006-09-13  7:28 Aw: " chuckf
2006-09-13  7:55 ` Sascha Retzki
2006-09-12 20:44 Chuck Foreman
2006-09-12 20:47 ` David Hendricks
2006-09-12 20:55 ` Federico Benavento
2006-09-02 11:16 lucio
2006-09-02 17:49 ` Gorka guardiola
2006-09-02 18:38   ` Gorka guardiola
2006-09-03  5:46     ` geoff
2006-09-03 10:51       ` Álvaro Jurado Cuevas
2006-08-21 12:43 Steve Simon
2006-08-22 17:56 ` Sergey Zhilkin
2006-04-21  4:09 Rafeek Raja
2006-02-10 15:30 quanstro
2006-02-10 14:10 quanstro
2006-02-10 15:17 ` jmk
2006-02-07 17:09 Riza Dindir
2005-09-09 18:46 Fco. J. Ballesteros
2005-08-07 22:24 Steve Simon
2005-08-08 13:25 ` Sape Mullender
2005-05-31  3:53 焕宇 苏
2005-05-30 19:01 quanstro
2005-02-10 15:28 tapique
2005-02-11 18:12 ` Bruce Ellis
2004-12-14 20:33 Charles Forsyth
2004-12-14 21:02 ` Bruce Ellis
2004-12-14 21:19 ` Ronald G. Minnich
2004-12-14 21:33   ` boyd, rounin
2004-12-14 21:38   ` Charles Forsyth
2004-12-14 22:01     ` Ronald G. Minnich
2004-12-14 22:12       ` andrey mirtchovski
2004-12-14 22:25         ` Ronald G. Minnich
2004-12-14 22:16       ` Charles Forsyth
2004-12-14 22:26         ` Ronald G. Minnich
2004-12-14 22:26           ` boyd, rounin
2004-12-14 22:36             ` jim
2004-12-14 22:48               ` Dan Cross
2004-12-14 22:47                 ` boyd, rounin
2004-12-14 23:00                 ` jim
2004-12-14 23:07                   ` boyd, rounin
2004-12-14 23:27                   ` Dan Cross
2004-12-14 22:50               ` Brantley Coile
2004-12-14 23:08                 ` jim
2004-12-14 23:12                   ` Brantley Coile
2004-12-14 22:55               ` andrey mirtchovski
2004-12-14 23:35               ` Ronald G. Minnich
2004-12-14 23:35                 ` boyd, rounin
2004-12-14 23:41                 ` andrey mirtchovski
2004-12-01 10:57 Steve Simon
2004-12-01 11:03 ` Tiit Lankots
2004-12-01 18:37 ` Jack Johnson
2004-12-01 18:47   ` Christopher Nielsen
2004-11-09 13:28 cej
2004-07-28  2:10 YAMANASHI Takeshi
2004-07-27  9:08 Steve Simon
2004-07-27  9:38 ` Kenji Okamoto
2004-07-27  9:44   ` Lucio De Re
2004-07-27 10:54   ` Steve Simon
2004-07-27 13:36     ` Boris Maryshev
2004-07-27 15:23       ` Justin Herald
2004-07-27 19:55     ` Francisco Ballesteros
2004-07-27 20:22     ` Skip Tavakkolian
2004-07-28  4:08     ` Dan Cross
2004-07-28  4:39       ` Justin Herald
2004-07-26 17:59 steve
2004-07-26 17:48 The Post Office
2004-07-26 17:30 join-jibjab
2004-07-26 17:18 melinda.proost
2004-07-26 16:58 Mail Delivery Subsystem
2004-07-26 16:21 swe
2004-07-26 16:06 library
2004-07-26 15:59 justin.jaffe
2004-07-26 15:44 The Post Office
2004-07-26 15:25 andrewm
2004-07-26 15:20 Automatic Email Delivery Software
2004-07-26 15:14 newswire
2004-07-19  8:17 judge
2004-07-16 11:38 Chris
2004-07-15  3:46 Michelle
2004-07-13 15:19 Fco. J. Ballesteros
2004-07-09 17:25 Steven
2004-07-07  1:49 Pam Moran
2004-07-03 22:23 Joseph
2004-07-02 12:05 Don
2004-06-28 12:49 Steve Simon
2004-06-22 20:43 Pete
2004-05-17 15:50 matt lawless
2004-05-18  8:31 ` john grove
2004-05-19  8:31 ` john grove
2004-04-19  8:29 Steve Simon
2004-04-13 11:54 matt
2004-04-13 21:25 ` Geoff Collyer
2004-04-13 21:28   ` boyd, rounin
2004-03-23 16:12 David Presotto
2004-03-04 17:57 David Presotto
2004-03-04 18:12 ` Charles Forsyth
2004-03-04 18:21   ` Dave Lukes
2004-03-04 18:29     ` Charles Forsyth
2004-03-04 22:21     ` boyd, rounin
2004-02-22 20:07 Russ Cox
2004-02-17 14:26 David Presotto
2004-02-17 16:13 ` Rob Pike
2004-02-17 16:17   ` David Presotto
2004-02-17 16:29     ` Rob Pike
2004-02-18  3:52   ` boyd, rounin
2004-02-17 21:25 ` C H Forsyth
2004-02-17 23:57 ` Charles Forsyth
2004-02-18  0:03   ` David Presotto
2004-02-18  6:58   ` 9nut
2004-02-18 16:56   ` rog
2004-02-01  0:34 sam
2004-01-30 18:10 engineering
2004-01-27 12:47 ravi
2004-01-22 15:22 Sape Mullender
2003-12-11 21:38 David Presotto
2003-11-25 15:18 Steve Simon
2003-11-02 21:12 andrey mirtchovski
2003-11-02 21:29 ` David Presotto
2003-10-19 14:22 David Presotto
2003-10-16 13:13 David Presotto
2003-10-14 12:11 David Presotto
2003-10-14 14:40 ` a
2003-10-14 15:43   ` Dan Cross
2003-10-12  0:43 matt
2003-10-11 23:43 ` David Presotto
2003-10-12  0:52   ` matt
2003-10-09 16:46 David Presotto
2003-10-09 16:52 ` Richard Miller
2003-09-25 14:24 steve.simon
2003-09-24  0:11 matt
2003-09-24  0:15 ` matt
2003-09-24  0:11 matt
2003-09-16  1:16 David Presotto
2003-09-16  7:38 ` Charles Forsyth
2003-09-01 23:47 matt
2003-09-01 19:14 ` David Presotto
2003-09-01 19:24   ` Skip Tavakkolian
2003-09-02  0:42   ` boyd, rounin
2003-09-01 14:08 David Presotto
2003-08-31 23:46 David Presotto
2003-07-26 16:11 David Presotto
2003-07-23 15:34 Vincenzo Volpe
2003-07-23 16:36 ` jmk
2003-07-26  0:46   ` David Presotto
2003-08-01  9:02     ` Vincenzo Volpe
2003-08-01 17:53       ` David Presotto
2003-06-21 19:15 David Presotto
2003-06-19 13:57 David Presotto
2003-06-19 14:16 ` boyd, rounin
2003-05-10  5:24 Andrew Simmons
2003-04-21 17:54 bigfoot
2003-04-21 18:12 ` David Presotto
2003-04-21 19:06   ` Russ Cox
2003-04-21 19:08     ` rsc
2003-04-25 10:40     ` vic zandy
2003-04-19 13:02 David Presotto
2003-02-25 12:40 Steve Simon
2003-02-24 16:52 Steve Simon
2003-02-24 16:06 ` Wayne Walker
2003-02-24 17:18   ` William Josephson
2003-02-24 19:37 ` northern snowfall
2003-02-24 13:49 David Presotto
2003-02-24 15:11 ` Sam
2003-02-17 15:30 Steve Simon
2003-02-14 16:19 Steve Simon
2003-02-12 15:41 David Presotto
2003-02-12 15:37 David Presotto
2003-02-12 15:34 David Presotto
2003-02-10 17:20 Steve Simon
2003-02-10 18:26 ` Russ Cox
2002-12-03  9:02 Ian Dichkovsky
2002-12-01 20:33 bwc
2002-12-01 17:38 Skip Tavakkolian
2002-12-01 15:46 presotto
2002-11-19 20:04 presotto
2002-11-19 19:36 bwc
2002-11-19 19:50 ` George Michaelson
2002-11-19  1:44 bwc
2002-11-18 21:40 bwc
2002-11-18 21:39 bwc
2002-11-18 21:39 bwc
2002-10-17  3:49 rob pike, esq.
2002-09-30 23:48 Adrian L. Thiele
2002-09-19 17:54 Sape Mullender
     [not found] <20020814092910.8DBA973C99@wintermute.cse.psu.edu>
     [not found] ` <3D5AC220.F7A7ED77@null.net>
2002-08-15  9:55   ` matt
2002-08-15 16:24   ` Ronald G Minnich
2002-08-15 17:08   ` Dennis Davis
2002-07-19  0:59 presotto
2002-07-16 19:21 presotto
2002-07-03 13:17 presotto
2002-06-10 19:10 Russ Cox
2002-04-12 17:43 Russ Cox
2002-04-12 17:20 /dev/null
2002-03-12  1:04 markp
2002-03-12  9:42 ` Thomas Bushnell, BSG
2002-03-13 10:04   ` bs
2002-03-11 18:33 Russ Cox
2002-03-12  9:42 ` Thomas Bushnell, BSG
2002-03-11 16:28 bwc
2002-03-11 16:24 bwc
2002-03-11 15:57 presotto
2002-03-11 17:51 ` Thomas Bushnell, BSG
2002-03-12  9:42   ` ozan s yigit
2002-03-11 19:51 ` Sam Ducksworth
2002-03-11 19:53 ` Andrew Simmons
2002-03-12 11:05 ` Anthony Mandic
2002-03-13 10:05 ` Douglas A. Gwyn
2002-02-28 11:26 sape
2002-03-04  6:51 ` Sean Quinlan
2002-02-27 22:47 presotto
2002-02-27 17:57 stanv
2001-12-13 14:35 presotto
2001-12-13 15:10 ` Ronald G Minnich
2001-12-13 15:47 ` Lucio De Re
2001-12-11 18:27 bwc
2001-12-11 18:17 Russ Cox
2001-12-11 18:17 bwc
2001-12-11 16:24 Russ Cox
2001-12-11 16:33 ` Boyd Roberts
2001-12-09 14:48 rob pike
2001-12-11 10:07 ` Douglas A. Gwyn
2001-12-11 11:55   ` Boyd Roberts
2001-12-12  9:47     ` Douglas A. Gwyn
2002-01-02 10:04       ` John R. Strohm
2002-01-03  9:52         ` Douglas A. Gwyn
2001-12-12  9:48   ` Thomas Bushnell, BSG
2001-12-12 11:14     ` Boyd Roberts
2001-12-09  8:22 arisawa
2001-11-30 14:14 steve.simon
2001-11-30 14:30 ` Boyd Roberts
2001-11-01 21:27 presotto
2001-11-01 21:26 presotto
2001-10-26 18:10 presotto
2001-10-26 14:45 peh
2001-09-07 13:48 Peter Bosch
2001-09-05  7:25 Fco.J.Ballesteros
2001-09-04 13:30 Fco.J.Ballesteros
2001-09-04 20:51 ` Martin Harriss
2001-09-04 12:08 geoff
2001-08-14 11:10 Usenet News system
2001-08-12 21:38 Philippe Anel
2001-08-13  7:45 ` andrey mirtchovski
2001-08-14  9:44   ` Ralph Corderoy
2001-08-05 14:02 jmk
2001-05-20  1:41 rob pike
2001-05-20  6:31 ` Dan Cross
2001-05-20 12:40   ` Donald Brownlee
2001-05-20 13:16     ` Boyd Roberts
2001-05-20 19:38     ` Dan Cross
2001-05-20 19:57       ` Richard Elberger
2001-05-21  4:56         ` Jonathan Sergent
2001-04-09 14:52 presotto
2001-04-09 13:47 forsyth
2001-04-09 13:26 presotto
2001-03-30 15:56 presotto
2001-03-22 15:09 Gorka Guardiola Muzquiz
2001-03-06 14:44 presotto
2000-11-29  8:03 Russ Cox

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=20030223061422.043E9F222@huxley.watson.ibm.com \
    --to=leendert@watson.ibm.com \
    --cc=9fans@cse.psu.edu \
    --cc=pb@research.bell-labs.com \
    --cc=philw@entrisphere.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).