From owner-svn-src-all@FreeBSD.ORG Fri Jan 29 05:29:29 2010 Return-Path: Delivered-To: svn-src-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C89C8106574C; Fri, 29 Jan 2010 05:29:29 +0000 (UTC) (envelope-from rrs@lakerest.net) Received: from lakerest.net (unknown [IPv6:2001:240:585:2:213:d4ff:fef3:2d8d]) by mx1.freebsd.org (Postfix) with ESMTP id 6B93E8FC12; Fri, 29 Jan 2010 05:29:29 +0000 (UTC) Received: from [192.168.2.175] (pool-96-249-204-75.snfcca.dsl-w.verizon.net [96.249.204.75]) (authenticated bits=0) by lakerest.net (8.14.3/8.14.3) with ESMTP id o0T5Svfe002324 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NOT); Fri, 29 Jan 2010 00:29:27 -0500 (EST) (envelope-from rrs@lakerest.net) Message-Id: From: Randall Stewart To: Neel Natu In-Reply-To: Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v936) Date: Thu, 28 Jan 2010 21:29:27 -0800 References: <201001290407.o0T47cC0046783@svn.freebsd.org> X-Mailer: Apple Mail (2.936) Cc: svn-src-head@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org Subject: Re: svn commit: r203151 - head/sys/mips/mips X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 29 Jan 2010 05:29:29 -0000 Good point ;-) I will make some adjustments and fix it ;-) R On Jan 28, 2010, at 9:11 PM, Neel Natu wrote: > Hi Randall, > > You should use restoreintr() instead of unconditionally enabling > interrupts using enableintr(). > > Otherwise these functions may end up inadvertently enabling interrupts > if they are called with interrupts disabled to begin with. > > best > Neel > > On Thu, Jan 28, 2010 at 8:07 PM, Randall Stewart > wrote: >> Author: rrs >> Date: Fri Jan 29 04:07:38 2010 >> New Revision: 203151 >> URL: http://svn.freebsd.org/changeset/base/203151 >> >> Log: >> For our memory re-mapping trick to work >> interrupts must be disabled through the >> page_zero's or copys etc. Note that the >> temporary mapping used by panic's may >> cause us pain since int's may not be disabled. >> When we get dumps working we may have to revist >> this. Note that with this fix the build got >> much much further.. until it hung on disk IO (I >> would imagine thats the rge/msgring driver acting >> up). >> >> Modified: >> head/sys/mips/mips/pmap.c >> >> Modified: head/sys/mips/mips/pmap.c >> = >> = >> = >> = >> = >> = >> = >> = >> = >> ===================================================================== >> --- head/sys/mips/mips/pmap.c Fri Jan 29 04:05:17 2010 >> (r203150) >> +++ head/sys/mips/mips/pmap.c Fri Jan 29 04:07:38 2010 >> (r203151) >> @@ -2101,14 +2101,20 @@ pmap_kenter_temporary(vm_paddr_t pa, int >> } else { >> int cpu; >> struct local_sysmaps *sysm; >> - >> + /* If this is used other than for dumps, we may >> need to leave >> + * interrupts disasbled on return. If crash dumps >> don't work when >> + * we get to this point, we might want to consider >> this (leaving things >> + * disabled as a starting point ;-) >> + */ >> + disableintr(); >> cpu = PCPU_GET(cpuid); >> sysm = &sysmap_lmem[cpu]; >> /* Since this is for the debugger, no locks or any >> other fun */ >> sysm->CMAP1 = mips_paddr_to_tlbpfn(pa) | PTE_RW | >> PTE_V | PTE_G | PTE_W | PTE_CACHE; >> - pmap_TLB_update_kernel((vm_offset_t)sysm->CADDR1, >> sysm->CMAP1); >> sysm->valid1 = 1; >> + pmap_TLB_update_kernel((vm_offset_t)sysm->CADDR1, >> sysm->CMAP1); >> va = (vm_offset_t)sysm->CADDR1; >> + enableintr(); >> } >> return ((void *)va); >> } >> @@ -2126,7 +2132,9 @@ pmap_kenter_temporary_free(vm_paddr_t pa >> cpu = PCPU_GET(cpuid); >> sysm = &sysmap_lmem[cpu]; >> if (sysm->valid1) { >> + disableintr(); >> pmap_TLB_invalidate_kernel((vm_offset_t)sysm->CADDR1); >> + enableintr(); >> sysm->CMAP1 = 0; >> sysm->valid1 = 0; >> } >> @@ -2272,11 +2280,13 @@ pmap_zero_page(vm_page_t m) >> sysm = &sysmap_lmem[cpu]; >> PMAP_LGMEM_LOCK(sysm); >> sched_pin(); >> + disableintr(); >> sysm->CMAP1 = mips_paddr_to_tlbpfn(phys) | PTE_RW | >> PTE_V | PTE_G | PTE_W | PTE_CACHE; >> sysm->valid1 = 1; >> pmap_TLB_update_kernel((vm_offset_t)sysm->CADDR1, >> sysm->CMAP1); >> bzero(sysm->CADDR1, PAGE_SIZE); >> pmap_TLB_invalidate_kernel((vm_offset_t)sysm->CADDR1); >> + enableintr(); >> sysm->CMAP1 = 0; >> sysm->valid1 = 0; >> sched_unpin(); >> @@ -2326,12 +2336,14 @@ pmap_zero_page_area(vm_page_t m, int off >> cpu = PCPU_GET(cpuid); >> sysm = &sysmap_lmem[cpu]; >> PMAP_LGMEM_LOCK(sysm); >> + disableintr(); >> sched_pin(); >> sysm->CMAP1 = mips_paddr_to_tlbpfn(phys) | PTE_RW | >> PTE_V | PTE_G | PTE_W | PTE_CACHE; >> - pmap_TLB_update_kernel((vm_offset_t)sysm->CADDR1, >> sysm->CMAP1); >> sysm->valid1 = 1; >> + pmap_TLB_update_kernel((vm_offset_t)sysm->CADDR1, >> sysm->CMAP1); >> bzero((char *)sysm->CADDR1 + off, size); >> pmap_TLB_invalidate_kernel((vm_offset_t)sysm->CADDR1); >> + enableintr(); >> sysm->CMAP1 = 0; >> sysm->valid1 = 0; >> sched_unpin(); >> @@ -2365,12 +2377,14 @@ pmap_zero_page_idle(vm_page_t m) >> cpu = PCPU_GET(cpuid); >> sysm = &sysmap_lmem[cpu]; >> PMAP_LGMEM_LOCK(sysm); >> + disableintr(); >> sched_pin(); >> sysm->CMAP1 = mips_paddr_to_tlbpfn(phys) | PTE_RW | >> PTE_V | PTE_G | PTE_W | PTE_CACHE; >> - pmap_TLB_update_kernel((vm_offset_t)sysm->CADDR1, >> sysm->CMAP1); >> sysm->valid1 = 1; >> + pmap_TLB_update_kernel((vm_offset_t)sysm->CADDR1, >> sysm->CMAP1); >> bzero(sysm->CADDR1, PAGE_SIZE); >> pmap_TLB_invalidate_kernel((vm_offset_t)sysm->CADDR1); >> + enableintr(); >> sysm->CMAP1 = 0; >> sysm->valid1 = 0; >> sched_unpin(); >> @@ -2441,6 +2455,7 @@ pmap_copy_page(vm_page_t src, vm_page_t >> sysm = &sysmap_lmem[cpu]; >> PMAP_LGMEM_LOCK(sysm); >> sched_pin(); >> + disableintr(); >> if (phy_src < MIPS_KSEG0_LARGEST_PHYS) { >> /* one side needs mapping - dest */ >> va_src = MIPS_PHYS_TO_CACHED(phy_src); >> @@ -2476,6 +2491,7 @@ pmap_copy_page(vm_page_t src, vm_page_t >> sysm->CMAP2 = 0; >> sysm->valid2 = 0; >> } >> + enableintr(); >> sched_unpin(); >> PMAP_LGMEM_UNLOCK(sysm); >> } >> > ------------------------------ Randall Stewart 803-317-4952 (cell) 803-345-0391(direct)