From owner-freebsd-current Thu Feb 24 16:33:50 2000 Delivered-To: freebsd-current@freebsd.org Received: from apollo.backplane.com (apollo.backplane.com [216.240.41.2]) by hub.freebsd.org (Postfix) with ESMTP id B2D1C37BCF4 for ; Thu, 24 Feb 2000 16:33:44 -0800 (PST) (envelope-from dillon@apollo.backplane.com) Received: (from dillon@localhost) by apollo.backplane.com (8.9.3/8.9.1) id QAA43662; Thu, 24 Feb 2000 16:33:44 -0800 (PST) (envelope-from dillon) Date: Thu, 24 Feb 2000 16:33:44 -0800 (PST) From: Matthew Dillon Message-Id: <200002250033.QAA43662@apollo.backplane.com> To: Bruce Evans , David Gilbert , freebsd-current@FreeBSD.ORG Subject: Patch to try (was Re: Wierd AMD panics caused by VMWare?) References: <200002242105.NAA42378@apollo.backplane.com> Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG Please try the following patch and tell me if the crashes still occur. If this fixes the problem then I'm homing in on the bug. I am beginning to suspect that there is a case where a pmap can get cleared without the tlb being flushed, causing origpte to be 0 when the new pte is later created again at the same spot. When the new page is allocated and added to the pmap later on, it fails to flush the tlb entry in pmap_enter() because it believes it does not have to. This would explain why messing with the pmap_remove_all() case does not do what we expect -- I suspect that routine is not being called at all in certain cases. I have not found the case where the pmap gets cleared without being flushed yet but when I force the flush in pmap_enter(), it seems to stop the crashes (but I can't be 100% sure because I had to mess around with that file descriptor program to get it to crash the first time). (This patch is relative to 3.x) -Matt Matthew Dillon Index: pmap.c =================================================================== RCS file: /home/ncvs/src/sys/i386/i386/pmap.c,v retrieving revision 1.219.2.6 diff -u -r1.219.2.6 pmap.c --- pmap.c 1999/09/02 23:56:47 1.219.2.6 +++ pmap.c 2000/02/25 00:06:50 @@ -2204,7 +2204,7 @@ */ if ((origpte & ~(PG_M|PG_A)) != newpte) { *pte = newpte | PG_A; - if (origpte) + /*if (origpte)*/ invltlb_1pg(va); } } To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message