* progress on l2cr
@ 2000-07-17 22:26 Guillaume Laurès
2000-07-18 6:54 ` Guillaume Laurès
2000-07-18 8:03 ` Benjamin Herrenschmidt
0 siblings, 2 replies; 9+ messages in thread
From: Guillaume Laurès @ 2000-07-17 22:26 UTC (permalink / raw)
To: linuxppc-dev@lists.linuxppc.org
[-- Attachment #1: Type: text/plain, Size: 1586 bytes --]
Hi all,
I've made big improvements in understantding basic kernel code ;-), but
it's still not that good...
Here are two patches against current stable tree, the first,
l2cr-display-gom.diff, fixes the ouput of "cat /proc/sys/kernel.l2cr"
according to M Lanners' patch for G3, and according to the Motorola 7400
Users' Manual.
Tested on G4, but not G3 yet. It should be clean and harmful anyway.
The second, l2cr-cmdline-gom.diff, is a try to enable "l2cr=xx" kernel
command line option.
All is fine if you don't put the option, and hangs at boot with
something like this: l2cr=0xb5100000.
Since when I tried to kill calls to __set_L2CR in ppc_setup_l2cr()
commenting the following two lines:
_set_L2CR(0); /* disable cache */
_set_L2CR(val); /* enable it */
it stills hangs at the same point, I guess the way I call
ppc_setup_l2cr() is wrong. I couldn't find documentation on this, but I
figured out reading init/main.c that doing this would be sufficient,
tell me were I'm wrong :
--- linux-pmac-stable-orig/init/main.c Mon Jul 17 21:31:00 2000
+++ linux/init/main.c Mon Jul 17 21:04:15 2000
@@ -355,6 +355,9 @@
#ifdef CONFIG_ADBMOUSE
extern void adb_mouse_setup(char *str, int *ints);
#endif
+#ifdef CONFIG_PPC
+extern void ppc_setup_l2cr(char *str, int *ints);
+#endif
#ifdef CONFIG_WDT
extern void wdt_setup(char *str, int *ints);
#endif
@@ -1044,6 +1047,9 @@
#endif
#ifdef CONFIG_ADBMOUSE
{ "adb_buttons=", adb_mouse_setup },
+#endif
+#ifdef CONFIG_PPC
+ { "l2cr=", ppc_setup_l2cr },
#endif
#ifdef CONFIG_LTPC
{ "ltpc=", ltpc_setup },
Thanks,
--
Guillaume
[-- Attachment #2: l2cr-display-gom.diff --]
[-- Type: image/x-xbitmap, Size: 3232 bytes --]
[-- Attachment #3: l2cr-cmdline-gom.diff --]
[-- Type: image/x-xbitmap, Size: 1329 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: progress on l2cr 2000-07-17 22:26 progress on l2cr Guillaume Laurès @ 2000-07-18 6:54 ` Guillaume Laurès 2000-07-18 8:03 ` Benjamin Herrenschmidt 1 sibling, 0 replies; 9+ messages in thread From: Guillaume Laurès @ 2000-07-18 6:54 UTC (permalink / raw) To: linuxppc-dev@lists.linuxppc.org [-- Attachment #1: Type: text/plain, Size: 4843 bytes --] Guillaume Laurès a écrit : [...]- > > Here are two patches against current stable tree, Sorry, they didn't make trough, here there are in the body and in attachement again : l2cr-display-gom.diff--------------- --- linux-pmac-stable-orig/arch/ppc/kernel/ppc_htab.c Mon Jul 17 21:30:43 2000 +++ linux-pmac-stable/arch/ppc/kernel/ppc_htab.c Mon Jul 17 22:14:46 2000 @@ -536,8 +536,8 @@ "unknown size", "256KB", "512KB", "1MB" }; static const char *clockstrings[8] = { - "clock disabled", "+1 clock", "+1.5 clock", "reserved(3)", - "+2 clock", "+2.5 clock", "+3 clock", "reserved(7)" + "clock disabled", "1 clock", "1.5 clock", "reserved(3)", + "2 clock", "2.5 clock", "3 clock", "reserved(7)" }; static const char *typestrings[4] = { "flow-through burst SRAM", "reserved SRAM", @@ -547,6 +547,17 @@ "0.5", "1.0", "(reserved2)", "(reserved3)" }; + if ((_get_PVR() >> 16) == 12) { + /* update those values when CPU is a G4 */ + sizestrings[0] = "2MB"; + clockstrings[3] = "3.5 clock"; + clockstrings[3] = "4 clock"; + holdstrings[0] = "0.6"; + holdstrings[1] = "1.0"; + holdstrings[2] = "1.4"; + holdstrings[3] = "1.8"; + } + if ( ((_get_PVR() >> 16) != 8) && ((_get_PVR() >> 16) != 12)) return -EFAULT; @@ -590,25 +601,43 @@ _set_L2CR(val); while ( _get_L2CR() & 0x1 ) /* wait for invalidate to finish */; - + } else { p = buf; if (!first) *p++ = '\t'; val = _get_L2CR(); - p += sprintf(p, "%08x: ", val); - p += sprintf(p, " %s", - (val&0x80000000)?"enabled":"disabled"); - p += sprintf(p,",%sparity",(val&0x40000000)?"":"no "); - p += sprintf(p, ",%s", sizestrings[(val >> 28) & 3]); - p += sprintf(p, ",%s", clockstrings[(val >> 25) & 7]); - p += sprintf(p, ",%s", typestrings[(val >> 23) & 0x2]); - p += sprintf(p,"%s",(val>>22)&1?"":",data only"); - p += sprintf(p,"%s",(val>>20)&1?",ZZ enabled":""); - p += sprintf(p,",%s",(val>>19)&1?"write-through":"copy-back"); - p += sprintf(p,",%sns hold", holdstrings[(val>>16)&3]); + p += sprintf(p, "0x%08x: ", val); + p += sprintf(p, " %s", (val >> 31) & 1 ? "enabled" : + "disabled"); + p += sprintf(p, ", %sparity", (val>>30)&1 ? "" : "no "); + p += sprintf(p, ", %s", sizestrings[(val >> 28) & 3]); + p += sprintf(p, ", %s", clockstrings[(val >> 25) & 7]); + p += sprintf(p, ", %s", typestrings[(val >> 23) & 2]); + p += sprintf(p, "%s", (val>>22)&1 ? ", data only" : ""); + p += sprintf(p, "%s", (val>>20)&1 ? ", ZZ enabled": ""); + p += sprintf(p, ", %s", (val>>19)&1 ? "write-through" : + "copy-back"); + p += sprintf(p, "%s", (val>>18)&1 ? ", testing" : ""); + p += sprintf(p, ", %sns hold",holdstrings[(val>>16)&3]); + p += sprintf(p, "%s", (val>>15)&1 ? ", DLL slow" : ""); + p += sprintf(p, "%s", (val>>14)&1 ? ", diff clock" :""); + p += sprintf(p, "%s", (val>>13)&1 ? ", DLL bypass" :""); + if ((_get_PVR() >> 16) == 12) { + /* G4 have more significant bits than G3 */ + p += sprintf(p, "%s", (val>>12)&1 ? ", + flush assist" :""); + p += sprintf(p, "%s", (val>>11)&1 ? ", + hardware flush" :""); + p += sprintf(p, "%s", (val>>10)&1 ? ", + instruction-only" :""); + p += sprintf(p, "%s", (val>>9)&1 ? ", + clock stop" :""); + p += sprintf(p, "%s", (val>>8)&1 ? ", + rollover checkstop" :""); + } - p += sprintf(p,"\n"); + p += sprintf(p, "\n"); len = strlen(buf); if (len > left) l2cr-cmdline-gom.diff----------------------- --- linux-pmac-stable-orig/arch/ppc/kernel/setup.c Mon Jul 17 21:30:43 2000 +++ linux/arch/ppc/kernel/setup.c Mon Jul 17 23:13:58 2000 @@ -549,15 +549,19 @@ return 0; } -/* Checks "l2cr=xxxx" command-line option */ +/* Takes care of "l2cr=xxxx" command-line option */ void ppc_setup_l2cr(char *str, int *ints) { if ( ((_get_PVR() >> 16) == 8) || ((_get_PVR() >> 16) == 12) ) + /* Make sure cpu is G3 or G4 */ { unsigned long val = simple_strtoul(str, NULL, 0); printk(KERN_INFO "l2cr set to %lx\n", val); - _set_L2CR(0); - _set_L2CR(val); + val |= 0x00200000; /* perform global invalidate */ + _set_L2CR(0); /* disable cache */ + _set_L2CR(val); /* enable it */ + } else { + printk(KERN_INFO "l2cr: cpu is not suitable\n"); } } --- linux-pmac-stable-orig/init/main.c Mon Jul 17 21:31:00 2000 +++ linux/init/main.c Mon Jul 17 21:04:15 2000 @@ -355,6 +355,9 @@ #ifdef CONFIG_ADBMOUSE extern void adb_mouse_setup(char *str, int *ints); #endif +#ifdef CONFIG_PPC +extern void ppc_setup_l2cr(char *str, int *ints); +#endif #ifdef CONFIG_WDT extern void wdt_setup(char *str, int *ints); #endif @@ -1044,6 +1047,9 @@ #endif #ifdef CONFIG_ADBMOUSE { "adb_buttons=", adb_mouse_setup }, +#endif +#ifdef CONFIG_PPC + { "l2cr=", ppc_setup_l2cr }, #endif #ifdef CONFIG_LTPC { "ltpc=", ltpc_setup }, @+ -- Guillaume [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: Unknown Document --] [-- Type: text/plain; charset=us-ascii; x-mac-type="54455854"; x-mac-creator="522A6368"; name="l2cr-display-gom.diff", Size: 3233 bytes --] --- linux-pmac-stable-orig/arch/ppc/kernel/ppc_htab.c Mon Jul 17 21:30:43 2000 +++ linux-pmac-stable/arch/ppc/kernel/ppc_htab.c Mon Jul 17 22:14:46 2000 @@ -536,8 +536,8 @@ "unknown size", "256KB", "512KB", "1MB" }; static const char *clockstrings[8] = { - "clock disabled", "+1 clock", "+1.5 clock", "reserved(3)", - "+2 clock", "+2.5 clock", "+3 clock", "reserved(7)" + "clock disabled", "ò1 clock", "ò1.5 clock", "reserved(3)", + "ò2 clock", "ò2.5 clock", "ò3 clock", "reserved(7)" }; static const char *typestrings[4] = { "flow-through burst SRAM", "reserved SRAM", @@ -547,6 +547,17 @@ "0.5", "1.0", "(reserved2)", "(reserved3)" }; + if ((_get_PVR() >> 16) == 12) { + /* update those values when CPU is a G4 */ + sizestrings[0] = "2MB"; + clockstrings[3] = "ò3.5 clock"; + clockstrings[3] = "ò4 clock"; + holdstrings[0] = "0.6"; + holdstrings[1] = "1.0"; + holdstrings[2] = "1.4"; + holdstrings[3] = "1.8"; + } + if ( ((_get_PVR() >> 16) != 8) && ((_get_PVR() >> 16) != 12)) return -EFAULT; @@ -590,25 +601,43 @@ _set_L2CR(val); while ( _get_L2CR() & 0x1 ) /* wait for invalidate to finish */; - + } else { p = buf; if (!first) *p++ = '\t'; val = _get_L2CR(); - p += sprintf(p, "%08x: ", val); - p += sprintf(p, " %s", - (val&0x80000000)?"enabled":"disabled"); - p += sprintf(p,",%sparity",(val&0x40000000)?"":"no "); - p += sprintf(p, ",%s", sizestrings[(val >> 28) & 3]); - p += sprintf(p, ",%s", clockstrings[(val >> 25) & 7]); - p += sprintf(p, ",%s", typestrings[(val >> 23) & 0x2]); - p += sprintf(p,"%s",(val>>22)&1?"":",data only"); - p += sprintf(p,"%s",(val>>20)&1?",ZZ enabled":""); - p += sprintf(p,",%s",(val>>19)&1?"write-through":"copy-back"); - p += sprintf(p,",%sns hold", holdstrings[(val>>16)&3]); + p += sprintf(p, "0x%08x: ", val); + p += sprintf(p, " %s", (val >> 31) & 1 ? "enabled" : + "disabled"); + p += sprintf(p, ", %sparity", (val>>30)&1 ? "" : "no "); + p += sprintf(p, ", %s", sizestrings[(val >> 28) & 3]); + p += sprintf(p, ", %s", clockstrings[(val >> 25) & 7]); + p += sprintf(p, ", %s", typestrings[(val >> 23) & 2]); + p += sprintf(p, "%s", (val>>22)&1 ? ", data only" : ""); + p += sprintf(p, "%s", (val>>20)&1 ? ", ZZ enabled": ""); + p += sprintf(p, ", %s", (val>>19)&1 ? "write-through" : + "copy-back"); + p += sprintf(p, "%s", (val>>18)&1 ? ", testing" : ""); + p += sprintf(p, ", %sns hold",holdstrings[(val>>16)&3]); + p += sprintf(p, "%s", (val>>15)&1 ? ", DLL slow" : ""); + p += sprintf(p, "%s", (val>>14)&1 ? ", diff clock" :""); + p += sprintf(p, "%s", (val>>13)&1 ? ", DLL bypass" :""); + if ((_get_PVR() >> 16) == 12) { + /* G4 have more significant bits than G3 */ + p += sprintf(p, "%s", (val>>12)&1 ? ", + flush assist" :""); + p += sprintf(p, "%s", (val>>11)&1 ? ", + hardware flush" :""); + p += sprintf(p, "%s", (val>>10)&1 ? ", + instruction-only" :""); + p += sprintf(p, "%s", (val>>9)&1 ? ", + clock stop" :""); + p += sprintf(p, "%s", (val>>8)&1 ? ", + rollover checkstop" :""); + } - p += sprintf(p,"\n"); + p += sprintf(p, "\n"); len = strlen(buf); if (len > left) [-- Attachment #3: Unknown Document --] [-- Type: text/plain, Size: 1330 bytes --] --- linux-pmac-stable-orig/arch/ppc/kernel/setup.c Mon Jul 17 21:30:43 2000 +++ linux/arch/ppc/kernel/setup.c Mon Jul 17 23:13:58 2000 @@ -549,15 +549,19 @@ return 0; } -/* Checks "l2cr=xxxx" command-line option */ +/* Takes care of "l2cr=xxxx" command-line option */ void ppc_setup_l2cr(char *str, int *ints) { if ( ((_get_PVR() >> 16) == 8) || ((_get_PVR() >> 16) == 12) ) + /* Make sure cpu is G3 or G4 */ { unsigned long val = simple_strtoul(str, NULL, 0); printk(KERN_INFO "l2cr set to %lx\n", val); - _set_L2CR(0); - _set_L2CR(val); + val |= 0x00200000; /* perform global invalidate */ + _set_L2CR(0); /* disable cache */ + _set_L2CR(val); /* enable it */ + } else { + printk(KERN_INFO "l2cr: cpu is not suitable\n"); } } --- linux-pmac-stable-orig/init/main.c Mon Jul 17 21:31:00 2000 +++ linux/init/main.c Mon Jul 17 21:04:15 2000 @@ -355,6 +355,9 @@ #ifdef CONFIG_ADBMOUSE extern void adb_mouse_setup(char *str, int *ints); #endif +#ifdef CONFIG_PPC +extern void ppc_setup_l2cr(char *str, int *ints); +#endif #ifdef CONFIG_WDT extern void wdt_setup(char *str, int *ints); #endif @@ -1044,6 +1047,9 @@ #endif #ifdef CONFIG_ADBMOUSE { "adb_buttons=", adb_mouse_setup }, +#endif +#ifdef CONFIG_PPC + { "l2cr=", ppc_setup_l2cr }, #endif #ifdef CONFIG_LTPC { "ltpc=", ltpc_setup }, ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: progress on l2cr 2000-07-17 22:26 progress on l2cr Guillaume Laurès 2000-07-18 6:54 ` Guillaume Laurès @ 2000-07-18 8:03 ` Benjamin Herrenschmidt 2000-07-22 1:38 ` Giuliano Pochini 1 sibling, 1 reply; 9+ messages in thread From: Benjamin Herrenschmidt @ 2000-07-18 8:03 UTC (permalink / raw) To: guillaume.laures, linuxppc-dev > > >Here are two patches against current stable tree, the first, >l2cr-display-gom.diff, fixes the ouput of "cat /proc/sys/kernel.l2cr" >according to M Lanners' patch for G3, and according to the Motorola 7400 >Users' Manual. >Tested on G4, but not G3 yet. It should be clean and harmful anyway. > >The second, l2cr-cmdline-gom.diff, is a try to enable "l2cr=xx" kernel >command line option. >All is fine if you don't put the option, and hangs at boot with >something like this: l2cr=0xb5100000. >Since when I tried to kill calls to __set_L2CR in ppc_setup_l2cr() >commenting the following two lines: > _set_L2CR(0); /* disable cache */ > _set_L2CR(val); /* enable it */ >it stills hangs at the same point, I guess the way I call >ppc_setup_l2cr() is wrong. I couldn't find documentation on this, but I >figured out reading init/main.c that doing this would be sufficient, >tell me were I'm wrong : Try my current rsync tree. I merged in some new code from PowerLogix in the _set_L2CR() function that work around a few CPU erratas and increase a few things. You'll notice that when calling _set_L2CR(x) with x!=0, I always OR x with the invalidate bit to force an invalidation. It's not necessary to wait for the invaldation to complete inside the ppc_htab.c code however since it's done inside the _set_L2CR() function in misc.S Ben. ** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/ ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: progress on l2cr 2000-07-18 8:03 ` Benjamin Herrenschmidt @ 2000-07-22 1:38 ` Giuliano Pochini 2000-07-22 20:13 ` Benjamin Herrenschmidt 0 siblings, 1 reply; 9+ messages in thread From: Giuliano Pochini @ 2000-07-22 1:38 UTC (permalink / raw) To: linuxppc-dev > + p += sprintf(p, "%s", (val>>22)&1 ? ", data only" : ""); Is there any reason to keep the L2 cache data-only ? Bye. ** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/ ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: progress on l2cr 2000-07-22 1:38 ` Giuliano Pochini @ 2000-07-22 20:13 ` Benjamin Herrenschmidt 2000-08-01 0:18 ` Giuliano Pochini 0 siblings, 1 reply; 9+ messages in thread From: Benjamin Herrenschmidt @ 2000-07-22 20:13 UTC (permalink / raw) To: Giuliano Pochini, linuxppc-dev > >Is there any reason to keep the L2 cache data-only ? There are some rare cases where it can be useful, yes. Like when flushing it, to avoid the flush code to pollute it. Ben. ** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/ ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: progress on l2cr 2000-07-22 20:13 ` Benjamin Herrenschmidt @ 2000-08-01 0:18 ` Giuliano Pochini 2000-07-31 18:42 ` Benjamin Herrenschmidt 0 siblings, 1 reply; 9+ messages in thread From: Giuliano Pochini @ 2000-08-01 0:18 UTC (permalink / raw) To: Benjamin Herrenschmidt; +Cc: linuxppc-dev > >Is there any reason to keep the L2 cache data-only ? > > There are some rare cases where it can be useful, yes. Like when flushing > it, to avoid the flush code to pollute it. A few bytes inside a 1MB cache are't a problem IMHO. Anyway I enabled it and performance compiling programs is 15% lower. Bye. ** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/ ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: progress on l2cr 2000-08-01 0:18 ` Giuliano Pochini @ 2000-07-31 18:42 ` Benjamin Herrenschmidt 2000-08-06 3:25 ` Giuliano Pochini 0 siblings, 1 reply; 9+ messages in thread From: Benjamin Herrenschmidt @ 2000-07-31 18:42 UTC (permalink / raw) To: Giuliano Pochini, linuxppc-dev >> >Is there any reason to keep the L2 cache data-only ? >> >> There are some rare cases where it can be useful, yes. Like when flushing >> it, to avoid the flush code to pollute it. > >A few bytes inside a 1MB cache are't a problem IMHO. Anyway I enabled it and >performance compiling programs is 15% lower. You have no reason to enable "data only" in normal use. It's used during the flush cycle of the cache to avoid polluting it while the flush code runs, but it's set and unset automatically, so you don't need to care. My latest rsync tree also contains an improved l2cr set routine which should no longer require Michel's trick to manually disable&flush it before setting it. It also work around some CPU bugs when DPM (dynamic power management) is enabled why flushing the L2 cache. Ben. ** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/ ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: progress on l2cr 2000-07-31 18:42 ` Benjamin Herrenschmidt @ 2000-08-06 3:25 ` Giuliano Pochini 2000-08-06 9:33 ` Timothy A. Seufert 0 siblings, 1 reply; 9+ messages in thread From: Giuliano Pochini @ 2000-08-06 3:25 UTC (permalink / raw) To: Benjamin Herrenschmidt; +Cc: linuxppc-dev > >> >Is there any reason to keep the L2 cache data-only ? > >> > >> There are some rare cases where it can be useful, yes. Like when flushing > >> it, to avoid the flush code to pollute it. > > > >A few bytes inside a 1MB cache are't a problem IMHO. Anyway I enabled it and > >performance compiling programs is 15% lower. > > You have no reason to enable "data only" in normal use. It's used during > the flush cycle of the cache to avoid polluting it while the flush code > runs, but it's set and unset automatically, so you don't need to care. Ok, but /proc/.../l2cr tells it's data-only at boot. Bye. ** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/ ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: progress on l2cr 2000-08-06 3:25 ` Giuliano Pochini @ 2000-08-06 9:33 ` Timothy A. Seufert 0 siblings, 0 replies; 9+ messages in thread From: Timothy A. Seufert @ 2000-08-06 9:33 UTC (permalink / raw) To: Giuliano Pochini, Benjamin Herrenschmidt; +Cc: linuxppc-dev [-- Attachment #1: Type: text/plain, Size: 2056 bytes --] At 11:25 PM -0400 8/5/00, Giuliano Pochini wrote: >> >> >Is there any reason to keep the L2 cache data-only ? >> >> >> >> There are some rare cases where it can be useful, yes. Like when flushing >> >> it, to avoid the flush code to pollute it. >> > >> >A few bytes inside a 1MB cache are't a problem IMHO. Anyway I >>enabled it and >> >performance compiling programs is 15% lower. >> >> You have no reason to enable "data only" in normal use. It's used during >> the flush cycle of the cache to avoid polluting it while the flush code >> runs, but it's set and unset automatically, so you don't need to care. > >Ok, but /proc/.../l2cr tells it's data-only at boot. It's lying. There is a longstanding bug in the kernel L2CR printout routine. The kernel routine prints "data only" if the L2DO bit in L2CR is 0. However, the actual meaning of this bit is 0 = data only mode off, 1 = data only mode on. This kernel bug probably happened because early revisions of Motorola's MPC750 manual have several errors in the L2CR section, including an error about the interpretation of L2DO. Early revision Motorola processor manuals are very dangerous things and should not be relied upon to get anything right (you should see the errata list for the MPC8260 manual). Unfortunately, this documentation-caused kernel bug seems to have slipped through the cracks. Ben, could you get this patch to fix L2CR reporting into the official kernel? It does the following things: 1. Fixes L2DO reporting as discussed above. 2. Fixes cache type reporting (the 2-bit cache memory type field should be masked using a mask value of 0x03 not 0x02). 3. Sanitizes code so that only one method is used to extract bit fields from L2CR (better readability) 4. Uses a more sensible format for reporting the L2 cache clock (the old "+2 clock", "+1.5 clock" stuff doesn't make sense, since we're reporting the ratio between the processor core clock and the L2 cache clock, not a delta.) 5. Saves a few bytes of memory by having shorter clock ratio string constants. [-- Attachment #2: ppc_htab.c.patch --] [-- Type: application/octet-stream, Size: 2043 bytes --] begin 644 ppc_htab.pat M+2TM(&%R8V@O<'!C+VME<FYE;"]P<&-?:'1A8BYC+F]R:6<)4W5N($%U9R`@ M-B`P,3HT.#HT-"`R,#`P"BLK*R!A<F-H+W!P8R]K97)N96PO<'!C7VAT86(N M8PE3=6X@075G("`V(#`R.C$U.C`W(#(P,#`*0$`@+34S-BPX("LU,S8L."!` M0`H@"0DB=6YK;F]W;B!S:7IE(BP@(C(U-DM"(BP@(C4Q,DM"(BP@(C%-0B(* M(`E].PH@"7-T871I8R!C;VYS="!C:&%R("IC;&]C:W-T<FEN9W-;.%T@/2![ M"BT)"2)C;&]C:R!D:7-A8FQE9"(L("(K,2!C;&]C:R(L("(K,2XU(&-L;V-K M(BP@(G)E<V5R=F5D*#,I(BP*+0D)(BLR(&-L;V-K(BP@(BLR+C4@8VQO8VLB M+"`B*S,@8VQO8VLB+"`B<F5S97)V960H-RDB"BL)"2)D:7-A8FQE9"(L("(Q M.C$B+"`B,2XU.C$B+"`B<F5S97)V960H,RDB+`HK"0DB,CHQ(BP@(C(N-3HQ M(BP@(C,Z,2(L(")R97-E<G9E9"@W*2(*(`E].PH@"7-T871I8R!C;VYS="!C M:&%R("IT>7!E<W1R:6YG<ULT72`]('L*(`D)(F9L;W<M=&AR;W5G:"!B=7)S M="!34D%-(BP@(G)E<V5R=F5D(%-204TB+`I`0"`M-3DW+#$S("LU.3<L,3(@ M0$`*(`D)"0DJ<"LK(#T@)UQT)SL*(`D)"79A;"`](%]G971?3#)#4B@I.PH@ M"0D)<"`K/2!S<')I;G1F*'`L("(E,#AX.B`B+"!V86PI.PHM"0D)<"`K/2!S M<')I;G1F*'`L("(@)7,B+`HM"0D)"2`@("`@*'9A;"8P>#@P,#`P,#`P*3\B M96YA8FQE9"(Z(F1I<V%B;&5D(BD["BT)"0EP("L]('-P<FEN=&8H<"PB+"5S M<&%R:71Y(BPH=F%L)C!X-#`P,#`P,#`I/R(B.B)N;R`B*3L**PD)"7`@*ST@ M<W!R:6YT9BAP+"(@)7,B+"AV86P^/C,Q*28Q/R)E;F%B;&5D(CHB9&ES86)L M960B*3L**PD)"7`@*ST@<W!R:6YT9BAP+"(L)7-P87)I='DB+"AV86P^/C,P M*28Q/R(B.B)N;R`B*3L*(`D)"7`@*ST@<W!R:6YT9BAP+"`B+"5S(BP@<VEZ M97-T<FEN9W-;*'9A;"`^/B`R."D@)B`S72D["BT)"0EP("L]('-P<FEN=&8H M<"P@(BPE<R(L(&-L;V-K<W1R:6YG<ULH=F%L(#X^(#(U*2`F(#==*3L*+0D) M"7`@*ST@<W!R:6YT9BAP+"`B+"5S(BP@='EP97-T<FEN9W-;*'9A;"`^/B`R M,RD@)B`P>#)=*3L*+0D)"7`@*ST@<W!R:6YT9BAP+"(E<R(L*'9A;#X^,C(I M)C$_(B(Z(BQD871A(&]N;'DB*3L**PD)"7`@*ST@<W!R:6YT9BAP+"`B+"5S M(&-L;V-K(BP@8VQO8VMS=')I;F=S6RAV86P@/CX@,C4I("8@-UTI.PHK"0D) M<"`K/2!S<')I;G1F*'`L("(L)7,B+"!T>7!E<W1R:6YG<ULH=F%L(#X^(#(S M*2`F(#-=*3L**PD)"7`@*ST@<W!R:6YT9BAP+"(E<R(L*'9A;#X^,C(I)C$_ M(BQD871A(&]N;'DB.B(B*3L*(`D)"7`@*ST@<W!R:6YT9BAP+"(E<R(L*'9A M;#X^,C`I)C$_(BQ:6B!E;F%B;&5D(CHB(BD["B`)"0EP("L]('-P<FEN=&8H M<"PB+"5S(BPH=F%L/CXQ.2DF,3\B=W)I=&4M=&AR;W5G:"(Z(F-O<'DM8F%C M:R(I.PH@"0D)<"`K/2!S<')I;G1F*'`L(BPE<VYS(&AO;&0B+"!H;VQD<W1R 4:6YG<ULH=F%L/CXQ-BDF,UTI.PH` ` end [-- Attachment #3: Type: text/plain, Size: 15 bytes --] Tim Seufert ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2000-08-06 9:33 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2000-07-17 22:26 progress on l2cr Guillaume Laurès 2000-07-18 6:54 ` Guillaume Laurès 2000-07-18 8:03 ` Benjamin Herrenschmidt 2000-07-22 1:38 ` Giuliano Pochini 2000-07-22 20:13 ` Benjamin Herrenschmidt 2000-08-01 0:18 ` Giuliano Pochini 2000-07-31 18:42 ` Benjamin Herrenschmidt 2000-08-06 3:25 ` Giuliano Pochini 2000-08-06 9:33 ` Timothy A. Seufert
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).