PERFORCE change 166669 for review

Hans Petter Selasky hselasky at FreeBSD.org
Tue Jul 28 08:16:01 UTC 2009


http://perforce.freebsd.org/chv.cgi?CH=166669

Change 166669 by hselasky at hselasky_laptop001 on 2009/07/28 08:15:39

	
	Revert some local MacBookPro5.5 patches which sneaked into change 166667.

Affected files ...

.. //depot/projects/usb/src/sys/i386/i386/pmap.c#24 integrate
.. //depot/projects/usb/src/sys/kern/kern_sysctl.c#20 integrate
.. //depot/projects/usb/src/sys/vm/uma_dbg.c#4 integrate

Differences ...

==== //depot/projects/usb/src/sys/i386/i386/pmap.c#24 (text+ko) ====

@@ -211,6 +211,8 @@
 static uma_zone_t pdptzone;
 #endif
 
+static int pat_works;			/* Is page attribute table sane? */
+
 SYSCTL_NODE(_vm, OID_AUTO, pmap, CTLFLAG_RD, 0, "VM/pmap parameters");
 
 static int pg_ps_enabled;
@@ -477,33 +479,36 @@
 	if (!(cpu_feature & CPUID_PAT))
 		return;
 
-#ifdef PAT_WORKS
-	/*
-	 * Leave the indices 0-3 at the default of WB, WT, UC, and UC-.
-	 * Program 4 and 5 as WP and WC.
-	 * Leave 6 and 7 as UC and UC-.
-	 */
-	pat_msr = rdmsr(MSR_PAT);
-	pat_msr &= ~(PAT_MASK(4) | PAT_MASK(5));
-	pat_msr |= PAT_VALUE(4, PAT_WRITE_PROTECTED) |
-	    PAT_VALUE(5, PAT_WRITE_COMBINING);
-#else
-	/*
-	 * Due to some Intel errata, we can only safely use the lower 4
-	 * PAT entries.  Thus, just replace PAT Index 2 with WC instead
-	 * of UC-.
-	 *
-	 *   Intel Pentium III Processor Specification Update
-	 * Errata E.27 (Upper Four PAT Entries Not Usable With Mode B
-	 * or Mode C Paging)
-	 *
-	 *   Intel Pentium IV  Processor Specification Update
-	 * Errata N46 (PAT Index MSB May Be Calculated Incorrectly)
-	 */
-	pat_msr = rdmsr(MSR_PAT);
-	pat_msr &= ~PAT_MASK(2);
-	pat_msr |= PAT_VALUE(2, PAT_WRITE_COMBINING);
-#endif
+	if (cpu_vendor_id != CPU_VENDOR_INTEL ||
+	    (I386_CPU_FAMILY(cpu_id) == 6 && I386_CPU_MODEL(cpu_id) >= 0xe)) {
+		/*
+		 * Leave the indices 0-3 at the default of WB, WT, UC, and UC-.
+		 * Program 4 and 5 as WP and WC.
+		 * Leave 6 and 7 as UC and UC-.
+		 */
+		pat_msr = rdmsr(MSR_PAT);
+		pat_msr &= ~(PAT_MASK(4) | PAT_MASK(5));
+		pat_msr |= PAT_VALUE(4, PAT_WRITE_PROTECTED) |
+		    PAT_VALUE(5, PAT_WRITE_COMBINING);
+		pat_works = 1;
+	} else {
+		/*
+		 * Due to some Intel errata, we can only safely use the lower 4
+		 * PAT entries.  Thus, just replace PAT Index 2 with WC instead
+		 * of UC-.
+		 *
+		 *   Intel Pentium III Processor Specification Update
+		 * Errata E.27 (Upper Four PAT Entries Not Usable With Mode B
+		 * or Mode C Paging)
+		 *
+		 *   Intel Pentium IV  Processor Specification Update
+		 * Errata N46 (PAT Index MSB May Be Calculated Incorrectly)
+		 */
+		pat_msr = rdmsr(MSR_PAT);
+		pat_msr &= ~PAT_MASK(2);
+		pat_msr |= PAT_VALUE(2, PAT_WRITE_COMBINING);
+		pat_works = 0;
+	}
 	wrmsr(MSR_PAT, pat_msr);
 }
 
@@ -751,45 +756,49 @@
 	}
 	
 	/* Map the caching mode to a PAT index. */
-	switch (mode) {
-#ifdef PAT_WORKS
-	case PAT_UNCACHEABLE:
-		pat_index = 3;
-		break;
-	case PAT_WRITE_THROUGH:
-		pat_index = 1;
-		break;
-	case PAT_WRITE_BACK:
-		pat_index = 0;
-		break;
-	case PAT_UNCACHED:
-		pat_index = 2;
-		break;
-	case PAT_WRITE_COMBINING:
-		pat_index = 5;
-		break;
-	case PAT_WRITE_PROTECTED:
-		pat_index = 4;
-		break;
-#else
-	case PAT_UNCACHED:
-	case PAT_UNCACHEABLE:
-	case PAT_WRITE_PROTECTED:
-		pat_index = 3;
-		break;
-	case PAT_WRITE_THROUGH:
-		pat_index = 1;
-		break;
-	case PAT_WRITE_BACK:
-		pat_index = 0;
-		break;
-	case PAT_WRITE_COMBINING:
-		pat_index = 2;
-		break;
-#endif
-	default:
-		panic("Unknown caching mode %d\n", mode);
-	}	
+	if (pat_works) {
+		switch (mode) {
+		case PAT_UNCACHEABLE:
+			pat_index = 3;
+			break;
+		case PAT_WRITE_THROUGH:
+			pat_index = 1;
+			break;
+		case PAT_WRITE_BACK:
+			pat_index = 0;
+			break;
+		case PAT_UNCACHED:
+			pat_index = 2;
+			break;
+		case PAT_WRITE_COMBINING:
+			pat_index = 5;
+			break;
+		case PAT_WRITE_PROTECTED:
+			pat_index = 4;
+			break;
+		default:
+			panic("Unknown caching mode %d\n", mode);
+		}
+	} else {
+		switch (mode) {
+		case PAT_UNCACHED:
+		case PAT_UNCACHEABLE:
+		case PAT_WRITE_PROTECTED:
+			pat_index = 3;
+			break;
+		case PAT_WRITE_THROUGH:
+			pat_index = 1;
+			break;
+		case PAT_WRITE_BACK:
+			pat_index = 0;
+			break;
+		case PAT_WRITE_COMBINING:
+			pat_index = 2;
+			break;
+		default:
+			panic("Unknown caching mode %d\n", mode);
+		}
+	}
 
 	/* Map the 3-bit index value into the PAT, PCD, and PWT bits. */
 	cache_bits = 0;

==== //depot/projects/usb/src/sys/kern/kern_sysctl.c#20 (text+ko) ====

@@ -55,8 +55,6 @@
 #include <sys/sysproto.h>
 #include <sys/uio.h>
 #include <sys/vimage.h>
-#include <sys/kdb.h>
-
 #ifdef KTRACE
 #include <sys/ktrace.h>
 #endif
@@ -242,14 +240,6 @@
 	return (0);
 }
 
-static void
-sysctl_free(void *ptr, struct malloc_type *mt, const char *file, int line)
-{
-	printf("%s:%d:0x%08lx\n", file, line, (long)ptr);
-	//kdb_backtrace();
-	free(ptr, mt);
-}
-
 /* Free the context, and destroy all dynamic oids registered in this context */
 int
 sysctl_ctx_free(struct sysctl_ctx_list *clist)
@@ -270,7 +260,6 @@
 		if (error)
 			break;
 	}
-
 	/*
 	 * Restore deregistered entries, either from the end,
 	 * or from the place where error occured.
@@ -296,7 +285,7 @@
 		if (error)
 			panic("sysctl_remove_oid: corrupt tree, entry: %s",
 			    e->entry->oid_name);
-		sysctl_free(e, M_SYSCTLOID, __FILE__, __LINE__);
+		free(e, M_SYSCTLOID);
 		e = e1;
 	}
 	SYSCTL_XUNLOCK();
@@ -351,7 +340,7 @@
 	if (e != NULL) {
 		TAILQ_REMOVE(clist, e, link);
 		SYSCTL_XUNLOCK();
-		sysctl_free(e, M_SYSCTLOID, __FILE__, __LINE__);
+		free(e, M_SYSCTLOID);
 		return (0);
 	} else {
 		SYSCTL_XUNLOCK();
@@ -407,7 +396,7 @@
 					return (error);
 			}
 			if (del)
-			  sysctl_free(SYSCTL_CHILDREN(oidp), M_SYSCTLOID, __FILE__, __LINE__);
+				free(SYSCTL_CHILDREN(oidp), M_SYSCTLOID);
 		}
 	}
 	if (oidp->oid_refcnt > 1 ) {
@@ -421,10 +410,10 @@
 		sysctl_unregister_oid(oidp);
 		if (del) {
 			if (oidp->oid_descr)
-			  sysctl_free((void *)(uintptr_t)(const void *)oidp->oid_descr, M_SYSCTLOID, __FILE__, __LINE__);
-			sysctl_free((void *)(uintptr_t)(const void *)oidp->oid_name,
-				    M_SYSCTLOID, __FILE__, __LINE__);
-			sysctl_free(oidp, M_SYSCTLOID, __FILE__, __LINE__);
+				free((void *)(uintptr_t)(const void *)oidp->oid_descr, M_SYSCTLOID);
+			free((void *)(uintptr_t)(const void *)oidp->oid_name,
+			     M_SYSCTLOID);
+			free(oidp, M_SYSCTLOID);
 		}
 	}
 	return (0);
@@ -518,7 +507,7 @@
 	oldname = (void *)(uintptr_t)(const void *)oidp->oid_name;
 	oidp->oid_name = newname;
 	SYSCTL_XUNLOCK();
-	sysctl_free(oldname, M_SYSCTLOID, __FILE__, __LINE__);
+	free(oldname, M_SYSCTLOID);
 }
 
 /*
@@ -672,13 +661,9 @@
 
 			if (req->oldidx)
 				error = SYSCTL_OUT(req, ".", 1);
-			if (!error) {
-			  if (oid->oid_name != NULL)
+			if (!error)
 				error = SYSCTL_OUT(req, oid->oid_name,
 					strlen(oid->oid_name));
-			  else
-			    error = SYSCTL_OUT(req, "ZFAILED", sizeof("ZFAILED")-1);
-			}
 			if (error)
 				return (error);
 
@@ -857,7 +842,7 @@
 
 	error = SYSCTL_IN(req, p, req->newlen);
 	if (error) {
-	  sysctl_free(p, M_SYSCTL, __FILE__, __LINE__);
+		free(p, M_SYSCTL);
 		return (error);
 	}
 
@@ -865,7 +850,7 @@
 
 	error = name2oid(p, oid, &len, &op);
 
-	sysctl_free(p, M_SYSCTL, __FILE__, __LINE__);
+	free(p, M_SYSCTL);
 
 	if (error)
 		return (error);
@@ -1067,12 +1052,12 @@
 	tmparg = malloc(outlen, M_SYSCTLTMP, M_WAITOK);
 
 	if (strlcpy(tmparg, (char *)arg1, outlen) >= outlen) {
-	  sysctl_free(tmparg, M_SYSCTLTMP, __FILE__, __LINE__);
+		free(tmparg, M_SYSCTLTMP);
 		goto retry;
 	}
 
 	error = SYSCTL_OUT(req, tmparg, outlen);
-	sysctl_free(tmparg, M_SYSCTLTMP, __FILE__, __LINE__);
+	free(tmparg, M_SYSCTLTMP);
 
 	if (error || !req->newptr)
 		return (error);

==== //depot/projects/usb/src/sys/vm/uma_dbg.c#4 (text+ko) ====

@@ -134,10 +134,8 @@
 		if (*p != uma_junk) {
 			printf("Memory modified after free %p(%d) val=%x @ %p\n",
 			    mem, size, *p, p);
-#if 0
 			panic("Most recently used by %s\n", (*ksp == NULL)?
 			    "none" : (*ksp)->ks_shortdesc);
-#endif
 		}
 	return (0);
 }


More information about the p4-projects mailing list