Date: Tue, 28 Jul 2009 08:15:59 GMT From: Hans Petter Selasky <hselasky@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 166669 for review Message-ID: <200907280815.n6S8Fx8A025025@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=166669 Change 166669 by hselasky@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); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907280815.n6S8Fx8A025025>