From owner-freebsd-current Wed Sep 11 05:42:05 1996 Return-Path: owner-current Received: (from root@localhost) by freefall.freebsd.org (8.7.5/8.7.3) id FAA00484 for current-outgoing; Wed, 11 Sep 1996 05:42:05 -0700 (PDT) Received: from root.com (implode.root.com [198.145.90.17]) by freefall.freebsd.org (8.7.5/8.7.3) with ESMTP id FAA00476 for ; Wed, 11 Sep 1996 05:42:02 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by root.com (8.7.5/8.6.5) with SMTP id FAA07735; Wed, 11 Sep 1996 05:42:29 -0700 (PDT) Message-Id: <199609111242.FAA07735@root.com> X-Authentication-Warning: implode.root.com: Host localhost [127.0.0.1] didn't use HELO protocol To: KATO Takenori cc: current@freebsd.org Subject: Re: patch for Cyrix/Ti 486SLC/DLC CPU bug In-reply-to: Your message of "Wed, 11 Sep 1996 20:39:15 +0900." <199609111139.UAA00456@marble.eps.nagoya-u.ac.jp> From: David Greenman Reply-To: dg@root.com Date: Wed, 11 Sep 1996 05:42:29 -0700 Sender: owner-current@freebsd.org X-Loop: FreeBSD.org Precedence: bulk >Hi, Cyrix/Ti 486 users, > >Some version of Cyrix 486SLC/DLC and TI 486DLC have paging related >bug, and they cause strange segmentation fault and/or page fault >trap. I got some information for that bug and fix, and I made the >patch for FreeBSD-current. > >The patch contains: > > 1) FPU exception is handled by interrupt gate (machdep.c). ... >+ #ifdef CYRIX_486_BUG > setidt(14, &IDTVEC(page), SDT_SYS386IGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL)); >+ #else >+ setidt(14, &IDTVEC(page), SDT_SYS386TGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL)); >+ #endif Your patch changes the page fault exception to an interrupt gate, not the FPU exception, but I understand what you meant. > 2) The function trap gets fault page address as soon as possible > (trap.c). I'd be interested to hear more about why this is required. The register should contain only the information about the last exception - and there shouldn't be any opportunity to trap again while in trap() before it is read. > 3) The functions pmap_update_{1,2}pg don't use LMSW instruction > but call pmap_update in cpufunc.h (pmap.c). Is this because the Cyrix chip doesn't support selective TLB updates? -DG David Greenman Core-team/Principal Architect, The FreeBSD Project