Skip site navigation (1)Skip section navigation (2)
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>

next in thread | raw e-mail | index | archive | help

>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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199807072005.NAA26120>