From owner-p4-projects Thu Jul 11 20:21:40 2002 Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id DE03237B401; Thu, 11 Jul 2002 20:21:33 -0700 (PDT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 8284937B400 for ; Thu, 11 Jul 2002 20:21:33 -0700 (PDT) Received: from freefall.freebsd.org (freefall.FreeBSD.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 2878A43E31 for ; Thu, 11 Jul 2002 20:21:33 -0700 (PDT) (envelope-from peter@freebsd.org) Received: from freefall.freebsd.org (perforce@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.4/8.12.4) with ESMTP id g6C3LXJU097209 for ; Thu, 11 Jul 2002 20:21:33 -0700 (PDT) (envelope-from peter@freebsd.org) Received: (from perforce@localhost) by freefall.freebsd.org (8.12.4/8.12.4/Submit) id g6C3LWj8097206 for perforce@freebsd.org; Thu, 11 Jul 2002 20:21:32 -0700 (PDT) Date: Thu, 11 Jul 2002 20:21:32 -0700 (PDT) Message-Id: <200207120321.g6C3LWj8097206@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: perforce set sender to peter@freebsd.org using -f From: Peter Wemm Subject: PERFORCE change 14123 for review To: Perforce Change Reviews Sender: owner-p4-projects@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG http://people.freebsd.org/~peter/p4db/chv.cgi?CH=14123 Change 14123 by peter@peter_daintree on 2002/07/11 20:20:33 Back off on the pmap_zero_page and pmap_copy_page optimizations, since they could suffer the same problem as pmap_zero_page_idle (noticed by Matt). These can be fixed with a cpu_switch hook. Affected files ... .. //depot/projects/pmap/sys/i386/i386/pmap.c#22 edit Differences ... ==== //depot/projects/pmap/sys/i386/i386/pmap.c#22 (text+ko) ==== @@ -2674,7 +2674,7 @@ if (*CMAP2) panic("pmap_zero_page: CMAP2 busy"); *CMAP2 = PG_V | PG_RW | phys | PG_A | PG_M; - invlpg((vm_offset_t)CADDR2); /* SMP: local cpu only */ + pmap_invalidate_page(kernel_pmap, (vm_offset_t)CADDR2); #if defined(I686_CPU) if (cpu_class == CPUCLASS_686) i686_pagezero(CADDR2); @@ -2682,7 +2682,6 @@ #endif bzero(CADDR2, PAGE_SIZE); *CMAP2 = 0; - invlpg((vm_offset_t)CADDR2); /* SMP: local cpu only */ } /* @@ -2707,7 +2706,7 @@ if (*CMAP2) panic("pmap_zero_page: CMAP2 busy"); *CMAP2 = PG_V | PG_RW | phys | PG_A | PG_M; - invlpg((vm_offset_t)CADDR2); /* SMP: local cpu only */ + pmap_invalidate_page(kernel_pmap, (vm_offset_t)CADDR2); #if defined(I686_CPU) if (cpu_class == CPUCLASS_686 && off == 0 && size == PAGE_SIZE) i686_pagezero(CADDR2); @@ -2715,7 +2714,6 @@ #endif bzero((char *)CADDR2 + off, size); *CMAP2 = 0; - invlpg((vm_offset_t)CADDR2); /* SMP: local cpu only */ } /* @@ -2748,7 +2746,6 @@ #endif bzero(CADDR3, PAGE_SIZE); *CMAP3 = 0; - invlpg((vm_offset_t)CADDR3); /* SMP: local cpu only */ } /* @@ -2767,13 +2764,15 @@ panic("pmap_copy_page: CMAP2 busy"); *CMAP1 = PG_V | VM_PAGE_TO_PHYS(src) | PG_A; *CMAP2 = PG_V | PG_RW | VM_PAGE_TO_PHYS(dst) | PG_A | PG_M; - invlpg((vm_offset_t)CADDR1); /* SMP: local cpu only */ - invlpg((vm_offset_t)CADDR2); /* SMP: local cpu only */ + /* + * XXX we "know" that CADDR2 immediately follows CADDR1 and use + * that to save an IPI on SMP systems. + */ + pmap_invalidate_range(kernel_pmap, (vm_offset_t)CADDR1, + (vm_offset_t)CADDR2); bcopy(CADDR1, CADDR2, PAGE_SIZE); *CMAP1 = 0; *CMAP2 = 0; - invlpg((vm_offset_t)CADDR1); /* SMP: local cpu only */ - invlpg((vm_offset_t)CADDR2); /* SMP: local cpu only */ } To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe p4-projects" in the body of the message