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