diff -ruP -X ../ignorediff linux-2.4.2-pre2-bk20010209.pre/arch/ppc/kernel/ppc_htab.c linux-2.4.2-pre2-bk20010209-JPG02/arch/ppc/kernel/ppc_htab.c
--- linux-2.4.2-pre2-bk20010209.pre/arch/ppc/kernel/ppc_htab.c	Thu Jan 25 01:58:22 2001
+++ linux-2.4.2-pre2-bk20010209-JPG02/arch/ppc/kernel/ppc_htab.c	Fri Feb  9 15:12:48 2001
@@ -35,6 +35,8 @@
 static long long ppc_htab_lseek(struct file * file, loff_t offset, int orig);
 int proc_dol2crvec(ctl_table *table, int write, struct file *filp,
 		  void *buffer, size_t *lenp);
+int proc_doictcvec(ctl_table *table, int write, struct file *filp,
+		  void *buffer, size_t *lenp);
 
 extern PTE *Hash, *Hash_end;
 extern unsigned long Hash_size, Hash_mask;
@@ -499,7 +501,7 @@
 		  void *buffer, size_t *lenp)
 {
 	int vleft, first=1, len, left, val;
-	#define TMPBUFLEN 256
+	#define TMPBUFLEN 512
 	char buf[TMPBUFLEN], *p;
 	static const char *sizestrings[4] = {
 		"2MB", "256KB", "512KB", "1MB"
@@ -564,7 +566,7 @@
 			val = _get_L2CR();
 			p += sprintf(p, "0x%08x: ", val);
 			p += sprintf(p, " %s", (val >> 31) & 1 ? "enabled" :
-				     	"disabled");
+						 "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]);
@@ -572,15 +574,107 @@
 			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");
+						 "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" :"");
-			
-			p += sprintf(p,"\n");
+			p += sprintf(p, "%s", (val>>13)&1 ? ", DLL bypass" :"");          
+			p += sprintf(p, "\n");
 			
+			len = strlen(buf);
+			if (len > left)
+			  len = left;
+			if(copy_to_user(buffer, buf, len))
+			  return -EFAULT;
+			left -= len;
+			buffer += len;
+			break;
+		}
+       }
+
+       if (!write && !first && left) {
+               if(put_user('\n', (char *) buffer))
+                       return -EFAULT;
+               left--, buffer++;
+       }
+       if (write) {
+               p = (char *) buffer;
+               while (left) {
+                       char c;
+                       if(get_user(c, p++))
+                               return -EFAULT;
+                       if (!isspace(c))
+                               break;
+                       left--;
+               }
+       }
+       if (write && first)
+               return -EINVAL;
+       *lenp -= left;
+       filp->f_pos += *lenp;
+       return 0;
+}
+
+int proc_doictcvec(ctl_table *table, int write, struct file *filp,
+                 void *buffer, size_t *lenp)
+{
+       int vleft, first=1, len, left, val;
+       #define TMPBUFLEN 128
+       char buf[TMPBUFLEN], *p;
+
+       if ( ((_get_PVR() >> 16) != 8) && ((_get_PVR() >> 16) != 12))
+               return -EFAULT;
+       
+       if ( /*!table->maxlen ||*/ (filp->f_pos && !write)) {
+               *lenp = 0;
+               return 0;
+       }
+       
+       vleft = table->maxlen / sizeof(int);
+       left = *lenp;
+       
+       for (; left /*&& vleft--*/; first=0) {
+               if (write) {
+                       while (left) {
+                               char c;
+                               if(get_user(c,(char *) buffer))
+                                       return -EFAULT;
+                               if (!isspace(c))
+                                       break;
+                               left--;
+                               ((char *) buffer)++;
+                       }
+                       if (!left)
+                               break;
+                       len = left;
+                       if (len > TMPBUFLEN-1)
+                               len = TMPBUFLEN-1;
+                       if(copy_from_user(buf, buffer, len))
+                               return -EFAULT;
+                       buf[len] = 0;
+                       p = buf;
+                       if (*p < '0' || *p > '9')
+                               break;
+                       val = simple_strtoul(p, &p, 0);
+                       len = p-buf;
+                       if ((len < left) && *p && !isspace(*p))
+                               break;
+                       buffer += len;
+                       left -= len;
+                       _set_ICTC(val);
+                         
+               } else {
+                       p = buf;
+                       if (!first)
+                               *p++ = '\t';
+                       val = _get_ICTC();
+                       p += sprintf(p, "Instruction Cache Throttling Control:\n\n");
+                       p += sprintf(p, "0x%08x: ", val);
+                       p += sprintf(p, " %s", val & 1 ? "enabled" :
+                                       "disabled");
+                       p += sprintf(p, ", delay: %d clock cycles.\n",
+                                       (val >> 1) & 255 );			
 			len = strlen(buf);
 			if (len > left)
 				len = left;
diff -ruP -X ../ignorediff linux-2.4.2-pre2-bk20010209.pre/include/linux/sysctl.h linux-2.4.2-pre2-bk20010209-JPG02/include/linux/sysctl.h
--- linux-2.4.2-pre2-bk20010209.pre/include/linux/sysctl.h	Fri Jan 12 15:58:58 2001
+++ linux-2.4.2-pre2-bk20010209-JPG02/include/linux/sysctl.h	Fri Feb  9 15:20:59 2001
@@ -117,6 +117,7 @@
 	KERN_OVERFLOWGID=47,	/* int: overflow GID */
 	KERN_SHMPATH=48,	/* string: path to shm fs */
 	KERN_HOTPLUG=49,	/* string: path to hotplug policy agent */
+	KERN_PPC_ICTC=50,	/* ictc register on PPC */
 };
 
 
@@ -594,7 +595,9 @@
