* [PATCH -rt] powerpc update
@ 2006-10-03 15:53 Daniel Walker
2006-10-18 7:28 ` Ingo Molnar
0 siblings, 1 reply; 10+ messages in thread
From: Daniel Walker @ 2006-10-03 15:53 UTC (permalink / raw)
To: mingo; +Cc: linuxppc-dev, tglx, linux-kernel
This updates arch/powerpc/ so that it boots PREEMPT_RT on a Apple
G4 PowerBook. It should also get other powerpc boards functional to
some extent.
Pay close attention to the fasteoi interrupt threading. I added usage
of mask/unmask instead of using level handling, which worked well on PPC.
There is still a todo to update highmems kmap_atomic() for realtime.
So don't turn on highmem.
Signed-Off-By: Daniel Walker <dwalker@mvista.com>
---
arch/powerpc/Kconfig.debug | 4 ++++
arch/powerpc/kernel/idle.c | 2 +-
drivers/macintosh/adb.c | 13 +++++++------
drivers/net/sungem.c | 4 +---
include/asm-powerpc/hw_irq.h | 2 +-
include/asm-powerpc/pmac_feature.h | 2 +-
kernel/irq/chip.c | 17 +++++++++++------
7 files changed, 26 insertions(+), 18 deletions(-)
Index: linux-2.6.18/arch/powerpc/Kconfig.debug
===================================================================
--- linux-2.6.18.orig/arch/powerpc/Kconfig.debug
+++ linux-2.6.18/arch/powerpc/Kconfig.debug
@@ -2,6 +2,10 @@ menu "Kernel hacking"
source "lib/Kconfig.debug"
+config TRACE_IRQFLAGS_SUPPORT
+ bool
+ default y
+
config DEBUG_STACKOVERFLOW
bool "Check for stack overflows"
depends on DEBUG_KERNEL && PPC64
Index: linux-2.6.18/arch/powerpc/kernel/idle.c
===================================================================
--- linux-2.6.18.orig/arch/powerpc/kernel/idle.c
+++ linux-2.6.18/arch/powerpc/kernel/idle.c
@@ -82,7 +82,7 @@ void cpu_idle(void)
ppc64_runlatch_on();
if (cpu_should_die())
cpu_die();
- preempt_enable_no_resched();
+ __preempt_enable_no_resched();
schedule();
preempt_disable();
}
Index: linux-2.6.18/drivers/macintosh/adb.c
===================================================================
--- linux-2.6.18.orig/drivers/macintosh/adb.c
+++ linux-2.6.18/drivers/macintosh/adb.c
@@ -256,6 +256,8 @@ adb_probe_task(void *x)
sigprocmask(SIG_BLOCK, &blocked, NULL);
flush_signals(current);
+ down(&adb_probe_mutex);
+
printk(KERN_INFO "adb: starting probe task...\n");
do_adb_reset_bus();
printk(KERN_INFO "adb: finished probe task...\n");
@@ -282,7 +284,9 @@ adb_reset_bus(void)
return 0;
}
- down(&adb_probe_mutex);
+ if (adb_got_sleep)
+ return 0;
+
schedule_work(&adb_reset_work);
return 0;
}
@@ -347,23 +351,21 @@ adb_notify_sleep(struct pmu_sleep_notifi
switch (when) {
case PBOOK_SLEEP_REQUEST:
+ /* Signal to discontiue probing */
adb_got_sleep = 1;
- /* We need to get a lock on the probe thread */
- down(&adb_probe_mutex);
/* Stop autopoll */
if (adb_controller->autopoll)
adb_controller->autopoll(0);
ret = blocking_notifier_call_chain(&adb_client_list,
ADB_MSG_POWERDOWN, NULL);
if (ret & NOTIFY_STOP_MASK) {
- up(&adb_probe_mutex);
+ adb_got_sleep = 0;
return PBOOK_SLEEP_REFUSE;
}
break;
case PBOOK_SLEEP_REJECT:
if (adb_got_sleep) {
adb_got_sleep = 0;
- up(&adb_probe_mutex);
adb_reset_bus();
}
break;
@@ -372,7 +374,6 @@ adb_notify_sleep(struct pmu_sleep_notifi
break;
case PBOOK_WAKE:
adb_got_sleep = 0;
- up(&adb_probe_mutex);
adb_reset_bus();
break;
}
Index: linux-2.6.18/drivers/net/sungem.c
===================================================================
--- linux-2.6.18.orig/drivers/net/sungem.c
+++ linux-2.6.18/drivers/net/sungem.c
@@ -1037,10 +1037,8 @@ static int gem_start_xmit(struct sk_buff
(csum_stuff_off << 21));
}
- local_irq_save(flags);
- if (!spin_trylock(&gp->tx_lock)) {
+ if (!spin_trylock_irqsave(&gp->tx_lock, flags)) {
/* Tell upper layer to requeue */
- local_irq_restore(flags);
return NETDEV_TX_LOCKED;
}
/* We raced with gem_do_stop() */
Index: linux-2.6.18/include/asm-powerpc/hw_irq.h
===================================================================
--- linux-2.6.18.orig/include/asm-powerpc/hw_irq.h
+++ linux-2.6.18/include/asm-powerpc/hw_irq.h
@@ -85,7 +85,7 @@ static inline void raw_local_irq_save_pt
#endif /* CONFIG_PPC_ISERIES */
-#include <linux/trace_irqflags.h>
+#include <linux/irqflags.h>
#define mask_irq(irq) \
({ \
Index: linux-2.6.18/include/asm-powerpc/pmac_feature.h
===================================================================
--- linux-2.6.18.orig/include/asm-powerpc/pmac_feature.h
+++ linux-2.6.18/include/asm-powerpc/pmac_feature.h
@@ -378,7 +378,7 @@ extern struct macio_chip* macio_find(str
* Those are exported by pmac feature for internal use by arch code
* only like the platform function callbacks, do not use directly in drivers
*/
-extern spinlock_t feature_lock;
+extern raw_spinlock_t feature_lock;
extern struct device_node *uninorth_node;
extern u32 __iomem *uninorth_base;
Index: linux-2.6.18/kernel/irq/chip.c
===================================================================
--- linux-2.6.18.orig/kernel/irq/chip.c
+++ linux-2.6.18/kernel/irq/chip.c
@@ -386,13 +386,19 @@ handle_fasteoi_irq(unsigned int irq, str
}
desc->status |= IRQ_INPROGRESS;
- /*
- * fasteoi should not be used for threaded IRQ handlers!
- */
+
if (redirect_hardirq(desc)) {
- WARN_ON_ONCE(1);
- goto out_unlock;
+ if (desc->chip->mask)
+ desc->chip->mask(irq);
+ else
+ /*
+ * Threading on eoi chips w/o a mask/unmask is not
+ * likely to work well.
+ */
+ WARN_ON_ONCE(1);
+ goto out;
}
+
desc->status &= ~IRQ_PENDING;
spin_unlock(&desc->lock);
@@ -404,7 +410,6 @@ handle_fasteoi_irq(unsigned int irq, str
desc->status &= ~IRQ_INPROGRESS;
out:
desc->chip->eoi(irq);
-out_unlock:
spin_unlock(&desc->lock);
}
--
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH -rt] powerpc update
2006-10-03 15:53 [PATCH -rt] powerpc update Daniel Walker
@ 2006-10-18 7:28 ` Ingo Molnar
2006-10-18 7:32 ` Ingo Molnar
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: Ingo Molnar @ 2006-10-18 7:28 UTC (permalink / raw)
To: Daniel Walker; +Cc: linuxppc-dev, tglx, linux-kernel
* Daniel Walker <dwalker@mvista.com> wrote:
> Pay close attention to the fasteoi interrupt threading. I added usage
> of mask/unmask instead of using level handling, which worked well on
> PPC.
this is wrong - it should be doing mask+ack.
also note that you changed:
> - goto out_unlock;
to:
> + goto out;
and you even tried to hide your tracks:
> out:
> desc->chip->eoi(irq);
> -out_unlock:
> spin_unlock(&desc->lock);
:-)
really, the ->eoi() op should only be called for true fasteoi cases.
What we want here is to turn the fasteoi handler into a handler that
does mask+ack and then unmask. Not 'mask+eoi ... unmask' as your patch
does.
Ingo
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH -rt] powerpc update
2006-10-18 7:28 ` Ingo Molnar
@ 2006-10-18 7:32 ` Ingo Molnar
2006-10-18 14:32 ` Daniel Walker
2006-10-28 15:05 ` Sergei Shtylyov
2 siblings, 0 replies; 10+ messages in thread
From: Ingo Molnar @ 2006-10-18 7:32 UTC (permalink / raw)
To: Daniel Walker; +Cc: linuxppc-dev, tglx, linux-kernel
* Ingo Molnar <mingo@elte.hu> wrote:
> really, the ->eoi() op should only be called for true fasteoi cases.
> What we want here is to turn the fasteoi handler into a handler that
> does mask+ack and then unmask. Not 'mask+eoi ... unmask' as your patch
> does.
i.e. like the much simpler patch below. That's what i've applied to the
soon-to-be-rt6 tree, plus the other bits of your patch. Can you confirm
this works well on PPC?
Ingo
Index: linux-rt.q/kernel/irq/chip.c
===================================================================
--- linux-rt.q.orig/kernel/irq/chip.c
+++ linux-rt.q/kernel/irq/chip.c
@@ -386,13 +386,15 @@ handle_fasteoi_irq(unsigned int irq, str
}
desc->status |= IRQ_INPROGRESS;
+
/*
- * fasteoi should not be used for threaded IRQ handlers!
+ * In the threaded case we fall back to a mask+ack sequence:
*/
if (redirect_hardirq(desc)) {
- WARN_ON_ONCE(1);
+ mask_ack_irq(desc, irq);
goto out_unlock;
}
+
desc->status &= ~IRQ_PENDING;
spin_unlock(&desc->lock);
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH -rt] powerpc update
2006-10-18 14:32 ` Daniel Walker
@ 2006-10-18 14:32 ` Ingo Molnar
2006-10-18 14:33 ` Ingo Molnar
1 sibling, 0 replies; 10+ messages in thread
From: Ingo Molnar @ 2006-10-18 14:32 UTC (permalink / raw)
To: Daniel Walker; +Cc: linuxppc-dev, tglx, linux-kernel
* Daniel Walker <dwalker@mvista.com> wrote:
> > also note that you changed:
>
> > > - goto out_unlock;
> >
> > to:
> >
> > > + goto out;
> >
> > and you even tried to hide your tracks:
>
> hiding something? I made note of these changes specifically so you
> would review them.
hey, it was a joke:
> > :-)
Ingo
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH -rt] powerpc update
2006-10-18 7:28 ` Ingo Molnar
2006-10-18 7:32 ` Ingo Molnar
@ 2006-10-18 14:32 ` Daniel Walker
2006-10-18 14:32 ` Ingo Molnar
2006-10-18 14:33 ` Ingo Molnar
2006-10-28 15:05 ` Sergei Shtylyov
2 siblings, 2 replies; 10+ messages in thread
From: Daniel Walker @ 2006-10-18 14:32 UTC (permalink / raw)
To: Ingo Molnar; +Cc: linuxppc-dev, tglx, linux-kernel
On Wed, 2006-10-18 at 09:28 +0200, Ingo Molnar wrote:
> * Daniel Walker <dwalker@mvista.com> wrote:
>
> > Pay close attention to the fasteoi interrupt threading. I added usage
> > of mask/unmask instead of using level handling, which worked well on
> > PPC.
>
> this is wrong - it should be doing mask+ack.
The main reason I did it this way is cause the current threaded eoi
expected the line to be masked. So if you happen to have a eoi that's
threaded you get a warning then the interrupt hangs.
> also note that you changed:
> > - goto out_unlock;
>
> to:
>
> > + goto out;
>
> and you even tried to hide your tracks:
hiding something? I made note of these changes specifically so you would
review them.
Daniel
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH -rt] powerpc update
2006-10-18 14:32 ` Daniel Walker
2006-10-18 14:32 ` Ingo Molnar
@ 2006-10-18 14:33 ` Ingo Molnar
2006-10-18 14:52 ` Daniel Walker
2006-10-18 20:54 ` Daniel Walker
1 sibling, 2 replies; 10+ messages in thread
From: Ingo Molnar @ 2006-10-18 14:33 UTC (permalink / raw)
To: Daniel Walker; +Cc: linuxppc-dev, tglx, linux-kernel
* Daniel Walker <dwalker@mvista.com> wrote:
> On Wed, 2006-10-18 at 09:28 +0200, Ingo Molnar wrote:
> > * Daniel Walker <dwalker@mvista.com> wrote:
> >
> > > Pay close attention to the fasteoi interrupt threading. I added usage
> > > of mask/unmask instead of using level handling, which worked well on
> > > PPC.
> >
> > this is wrong - it should be doing mask+ack.
>
> The main reason I did it this way is cause the current threaded eoi
> expected the line to be masked. So if you happen to have a eoi that's
> threaded you get a warning then the interrupt hangs.
does that in fact happen on -rt6? If yes, could you send the warning
that is produced?
Ingo
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH -rt] powerpc update
2006-10-18 14:33 ` Ingo Molnar
@ 2006-10-18 14:52 ` Daniel Walker
2006-10-18 20:54 ` Daniel Walker
1 sibling, 0 replies; 10+ messages in thread
From: Daniel Walker @ 2006-10-18 14:52 UTC (permalink / raw)
To: Ingo Molnar; +Cc: linuxppc-dev, tglx, linux-kernel
On Wed, 2006-10-18 at 16:33 +0200, Ingo Molnar wrote:
> * Daniel Walker <dwalker@mvista.com> wrote:
>
> > On Wed, 2006-10-18 at 09:28 +0200, Ingo Molnar wrote:
> > > * Daniel Walker <dwalker@mvista.com> wrote:
> > >
> > > > Pay close attention to the fasteoi interrupt threading. I added usage
> > > > of mask/unmask instead of using level handling, which worked well on
> > > > PPC.
> > >
> > > this is wrong - it should be doing mask+ack.
> >
> > The main reason I did it this way is cause the current threaded eoi
> > expected the line to be masked. So if you happen to have a eoi that's
> > threaded you get a warning then the interrupt hangs.
>
> does that in fact happen on -rt6? If yes, could you send the warning
> that is produced?
>
> Ingo
The warning was the WARN_ON_ONCE from the section below (which is gone
is -rt6)
if (redirect_hardirq(desc)) {
- WARN_ON_ONCE(1);
+ mask_ack_irq(desc, irq);
goto out_unlock;
}
+
I haven't tried it, but I'd think it will work. That's assuming you have
an "ack" which I hear some PowerPC don't (Benjamin Herrenschmidt talked
about having no "ack" when discussing fasteoi a few month back).
Daniel
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH -rt] powerpc update
2006-10-18 14:33 ` Ingo Molnar
2006-10-18 14:52 ` Daniel Walker
@ 2006-10-18 20:54 ` Daniel Walker
1 sibling, 0 replies; 10+ messages in thread
From: Daniel Walker @ 2006-10-18 20:54 UTC (permalink / raw)
To: Ingo Molnar; +Cc: linuxppc-dev, tglx, linux-kernel
On Wed, 2006-10-18 at 16:33 +0200, Ingo Molnar wrote:
> * Daniel Walker <dwalker@mvista.com> wrote:
>
> > On Wed, 2006-10-18 at 09:28 +0200, Ingo Molnar wrote:
> > > * Daniel Walker <dwalker@mvista.com> wrote:
> > >
> > > > Pay close attention to the fasteoi interrupt threading. I added usage
> > > > of mask/unmask instead of using level handling, which worked well on
> > > > PPC.
> > >
> > > this is wrong - it should be doing mask+ack.
> >
> > The main reason I did it this way is cause the current threaded eoi
> > expected the line to be masked. So if you happen to have a eoi that's
> > threaded you get a warning then the interrupt hangs.
>
> does that in fact happen on -rt6? If yes, could you send the warning
> that is produced?
Here's the kernel messages (from Sergei who is CC'd)
---
Subject: 2.6.18-rt6 failure on MPC8540ADS
My PPC32 board doesn't boot with 2.6.18-rt6, I'm getting this nice trace:
Time: timebase clocksource has been installed.
Unable to handle kernel paging request for instruction fetch
Faulting instruction address: 0x00000000
Oops: Kernel access of bad area, sig: 11 [#1]
PREEMPT
Modules linked in:
NIP: 00000000 LR: C0051AA8 CTR: 00000000
REGS: c0615cf0 TRAP: 0400 Not tainted (2.6.18_dev)
MSR: 00021000 <ME> CR: 42028088 XER: 20000000
TASK = cffea600[4] 'softirq-timer/0' THREAD: c0614000
GPR00: C0051A94 C0615DA0 CFFEA600 00000035 C0339CC0 00000035 00000013 00000003
GPR08: 00010000 00000000 FCFED080 C0480035 28028084 00000000 0FFFE700 FFFFFFFF
GPR16: FFFD7C1E FFFFFFFF FFFD7B78 C02E5930 00000000 00028488 00000000 FFFFFFFF
GPR24: C033FB1C C0699498 00008000 C0615DE0 C06BBCA0 C0614000 00000035 C0323AC0
NIP [00000000] _start+0x40000000/0x20
LR [C0051AA8] handle_fasteoi_irq+0x170/0x1b8
Call Trace:
[C0615DA0] [C0051A94] handle_fasteoi_irq+0x15c/0x1b8 (unreliable)
[C0615DC0] [C00045A4] do_IRQ+0x9c/0xbc
[C0615DD0] [C000E0C8] ret_from_except+0x0/0x18
[C0615E90] [C01B4A90] phy_write+0x2c/0x6c
[C0615EC0] [C01B6450] marvell_config_aneg+0x24/0xc8
[C0615ED0] [C01B48F8] phy_start_aneg+0x44/0xcc
[C0615EF0] [C01B50E8] phy_timer+0xd8/0x588
[C0615F10] [C0031EC4] run_timer_softirq+0x224/0x1048
[C0615F80] [C002D1EC] ksoftirqd+0x100/0x1ac
[C0615FC0] [C003F36C] kthread+0xc0/0xfc
[C0615FF0] [C000EC4C] original_kernel_thread+0x44/0x60
Instruction dump:
XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
<0>Kernel panic - not syncing: Fatal exception in interrupt
Call Trace:
[C0615C30] [C0006DA8] show_stack+0x3c/0x1a0 (unreliable)
[C0615C60] [C0026484] panic+0x98/0x170
[C0615CB0] [C000BF60] die+0x120/0x130
[C0615CD0] [C0010D38] bad_page_fault+0xcc/0xe8
[C0615CE0] [C000DF24] handle_page_fault+0x7c/0x80
[C0615DA0] [C0051A94] handle_fasteoi_irq+0x15c/0x1b8
[C0615DC0] [C00045A4] do_IRQ+0x9c/0xbc
[C0615DD0] [C000E0C8] ret_from_except+0x0/0x18
[C0615E90] [C01B4A90] phy_write+0x2c/0x6c
[C0615EC0] [C01B6450] marvell_config_aneg+0x24/0xc8
[C0615ED0] [C01B48F8] phy_start_aneg+0x44/0xcc
[C0615EF0] [C01B50E8] phy_timer+0xd8/0x588
[C0615F10] [C0031EC4] run_timer_softirq+0x224/0x1048
[C0615F80] [C002D1EC] ksoftirqd+0x100/0x1ac
[C0615FC0] [C003F36C] kthread+0xc0/0xfc
[C0615FF0] [C000EC4C] original_kernel_thread+0x44/0x60
After looking into the source, I figured out that handle_fasteoi_irq() is
trying to call ack() handler for the irq_chip but arch/powerpc/sysdev/mpic.c
(driving OpenPIC-compatible chips) doesn't have it (and I suppose is not
obliged to since it's using the "fasteoi" flow)...
WBR, Sergei
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH -rt] powerpc update
2006-10-18 7:28 ` Ingo Molnar
2006-10-18 7:32 ` Ingo Molnar
2006-10-18 14:32 ` Daniel Walker
@ 2006-10-28 15:05 ` Sergei Shtylyov
2006-10-28 15:33 ` Sergei Shtylyov
2 siblings, 1 reply; 10+ messages in thread
From: Sergei Shtylyov @ 2006-10-28 15:05 UTC (permalink / raw)
To: Ingo Molnar; +Cc: Daniel Walker, tglx, linux-kernel, linuxppc-dev
Hello.
Ingo Molnar wrote:
> * Daniel Walker <dwalker@mvista.com> wrote:
>>Pay close attention to the fasteoi interrupt threading. I added usage
>>of mask/unmask instead of using level handling, which worked well on
>>PPC.
> this is wrong - it should be doing mask+ack.
It's what it was doing effectively. And what was wrong was calling ack()
which OpenPIC driver didn't (and was not obliged to) support.
> also note that you changed:
>>- goto out_unlock;
> to:
>>+ goto out;
> and you even tried to hide your tracks:
>
>
>> out:
>> desc->chip->eoi(irq);
>>-out_unlock:
>> spin_unlock(&desc->lock);
> :-)
> really, the ->eoi() op should only be called for true fasteoi cases.
Why is that? eoi() is effectively the same as ack() in this case. I must
note that what's the "standard" 8259 driver is doing in mask_ack() seems
misleading since it actually masks IRQ and sends EOI there.
> What we want here is to turn the fasteoi handler into a handler that
> does mask+ack and then unmask. Not 'mask+eoi ... unmask' as your patch
> does.
That's effectively the same for OpenPIC. Maybe that implemetation just
didn't look graceful but it was *correct*. And the current one is at least
incomplete.
I can see 3 ways to get out of this situation now:
1. Revert this change and use mask() + eoi() approach suggested by Daniel.
2. Add the ack() handler to OpenPIC driver -- and point it to mpic_eoi().
3. Do the same as x86 APIC driver does and use level/egde flows instead of
fasteoi for the case when IRQs are threaded -- that ensues doing (2) as well.
Note that all three aproaches lead to the effectively the same behavior
WRT OpenPIC (except for the edge-triggered IRQs in 3rd case). Opinions?
> Ingo
WBR, Sergei
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH -rt] powerpc update
2006-10-28 15:05 ` Sergei Shtylyov
@ 2006-10-28 15:33 ` Sergei Shtylyov
0 siblings, 0 replies; 10+ messages in thread
From: Sergei Shtylyov @ 2006-10-28 15:33 UTC (permalink / raw)
To: linuxppc-dev; +Cc: Daniel Walker, Ingo Molnar, tglx, linux-kernel
Hello, I wrote:
> 3. Do the same as x86 APIC driver does and use level/egde flows instead
> of fasteoi for the case when IRQs are threaded -- that ensues doing (2)
> as well.
Note that OpenPIC (as far as I could understand its h/w) is essentially
the same as IOAPIC/LAPIC couple on x86, i.e. a level-triggered IRQ remains
effectively globally masked until CPU writes to its local EOI reg. However,
the repetitive edge-triggered IRQ from the same line may still be detected
while being serviced on a CPU (hm, the questions is, can it be sent to any
other CPU in system while being handled on a certain CPU?)...
I hope somebody corrects me if I'm wrong about both x86 and PPC. :-)
>> Ingo
WBR, Sergei
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2006-10-28 15:33 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-10-03 15:53 [PATCH -rt] powerpc update Daniel Walker
2006-10-18 7:28 ` Ingo Molnar
2006-10-18 7:32 ` Ingo Molnar
2006-10-18 14:32 ` Daniel Walker
2006-10-18 14:32 ` Ingo Molnar
2006-10-18 14:33 ` Ingo Molnar
2006-10-18 14:52 ` Daniel Walker
2006-10-18 20:54 ` Daniel Walker
2006-10-28 15:05 ` Sergei Shtylyov
2006-10-28 15:33 ` Sergei Shtylyov
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).