Date: Tue, 7 Jul 1998 13:05:41 -0700 (PDT) From: gallatin@cs.duke.edu To: freebsd-gnats-submit@FreeBSD.ORG Subject: i386/7201: (cpu == CPU_686) in pmap.c shoud also apply to CPU_PII, pmap_setdevram() disabled in wrong place Message-ID: <199807072005.NAA26120@hub.freebsd.org>
index | next in thread | raw e-mail
>Number: 7201
>Category: i386
>Synopsis: (cpu == CPU_686) in pmap.c shoud also apply to CPU_PII, pmap_setdevram() disabled in wrong place
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Tue Jul 7 13:10:01 PDT 1998
>Last-Modified:
>Originator: Andrew Gallatin
>Organization:
Duke University, Department of Computer Science
>Release: FreeBSD 3.0-CURRENT
>Environment:
FreeBSD ladybug 3.0-CURRENT FreeBSD 3.0-CURRENT #10: Tue Jul 7 15:18:52 EDT 1998 gallatin@grasshopper.cs.duke.edu:/usr/src/sys/compile/TPZ i386
>Description:
o Many Pentium Pro class features in pmap.c are enabled if cpu == CPU_686.
With the recent addition of the CPU_PII, the CPU_PII cpu needs to be
added to those tests.
o The dangerous call to pmap_setdevram() which enables write combining
on video cards in P6/PII machines is already disabled in vga_probe().
Others may want to enable write combining on other devices (like Myrinet
cards) -- the immediate return in pmap_setdevram() should go away.
>How-To-Repeat:
Try enabling WC on a memory mapped PCI device on a PII ;-)
>Fix:
Index: pmap.c
===================================================================
RCS file: /scratch/freebsd-cvs/src/sys/i386/i386/pmap.c,v
retrieving revision 1.202
diff -c -r1.202 pmap.c
*** pmap.c 1998/05/21 07:47:34 1.202
--- pmap.c 1998/07/07 18:42:08
***************
*** 458,464 ****
{
int i;
! if (cpu == CPU_686) {
for(i = 0; i < NPPROVMTRR; i++) {
PPro_vmtrr[i].base = rdmsr(PPRO_VMTRRphysBase0 + i * 2);
PPro_vmtrr[i].mask = rdmsr(PPRO_VMTRRphysMask0 + i * 2);
--- 458,464 ----
{
int i;
! if ((cpu == CPU_686) || (cpu == CPU_PII)) {
for(i = 0; i < NPPROVMTRR; i++) {
PPro_vmtrr[i].base = rdmsr(PPRO_VMTRRphysBase0 + i * 2);
PPro_vmtrr[i].mask = rdmsr(PPRO_VMTRRphysMask0 + i * 2);
***************
*** 471,477 ****
{
int i;
! if (cpu == CPU_686) {
wbinvd();
for(i = 0; i < NPPROVMTRR; i++) {
wrmsr(PPRO_VMTRRphysBase0 + i * 2, PPro_vmtrr[i].base);
--- 471,477 ----
{
int i;
! if ((cpu == CPU_686) || (cpu == CPU_PII)) {
wbinvd();
for(i = 0; i < NPPROVMTRR; i++) {
wrmsr(PPRO_VMTRRphysBase0 + i * 2, PPro_vmtrr[i].base);
***************
*** 483,489 ****
void
pmap_setvidram(void)
{
! if (cpu == CPU_686) {
wbinvd();
/*
* Set memory between 0-640K to be WB
--- 483,489 ----
void
pmap_setvidram(void)
{
! if ((cpu == CPU_686) || (cpu == CPU_PII)) {
wbinvd();
/*
* Set memory between 0-640K to be WB
***************
*** 505,512 ****
unsigned long long base;
unsigned long long mask;
! return;
! if (cpu != CPU_686)
return;
free = -1;
--- 505,511 ----
unsigned long long base;
unsigned long long mask;
! if ((cpu != CPU_686) && (cpu != CPU_PII))
return;
free = -1;
***************
*** 2799,2805 ****
cpu_invlpg(&prv_CPAGE3);
#if defined(I686_CPU)
! if (cpu == CPU_686)
i686_pagezero(&prv_CPAGE3);
else
#endif
--- 2798,2804 ----
cpu_invlpg(&prv_CPAGE3);
#if defined(I686_CPU)
! if ((cpu == CPU_686) || (cpu == CPU_PII))
i686_pagezero(&prv_CPAGE3);
else
#endif
***************
*** 2820,2826 ****
}
#if defined(I686_CPU)
! if (cpu == CPU_686)
i686_pagezero(CADDR2);
else
#endif
--- 2819,2825 ----
}
#if defined(I686_CPU)
! if ((cpu == CPU_686) || (cpu == CPU_PII))
i686_pagezero(CADDR2);
else
#endif
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199807072005.NAA26120>
