From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Michael Neuling To: Benjamin Herrenschmidt Subject: Re: [PATCH] fixes for the SLB shadow buffer In-reply-to: <1186007636.5495.536.camel@localhost.localdomain> References: <17055.1185944172@neuling.org> <18096.6654.934841.561238@cargo.ozlabs.ibm.com> <31580.1185948147@neuling.org> <1186007636.5495.536.camel@localhost.localdomain> Date: Thu, 02 Aug 2007 09:32:12 +1000 Message-ID: <1491.1186011132@neuling.org> Cc: linuxppc-dev@ozlabs.org, Paul Mackerras List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , > On Wed, 2007-08-01 at 16:02 +1000, Michael Neuling wrote: > > We sometimes change the vmalloc segment in slb_flush_and_rebolt but we > > never updated with slb shadow buffer. This fixes it. Thanks to paulus > > for finding this. > > > > Also added some write barriers to ensure the shadow buffer is always > > valid. > > The shadow is global or per-cpu ? > > Because in the later case, I think you need more than that. It's per CPU. > > @@ -759,6 +762,9 @@ int hash_page(unsigned long ea, unsigned > > mmu_psize_defs[mmu_vmalloc_psize].sllp) { > > get_paca()->vmalloc_sllp = > > mmu_psize_defs[mmu_vmalloc_psize].sllp; > > + vflags = SLB_VSID_KERNEL | > > + mmu_psize_defs[mmu_vmalloc_psize].sllp; > > + slb_shadow_update(VMALLOC_START, vflags, 1); > > slb_flush_and_rebolt(); > > } > > Later on: > > } else if (get_paca()->vmalloc_sllp != > mmu_psize_defs[mmu_vmalloc_psize].sllp) { > get_paca()->vmalloc_sllp = > mmu_psize_defs[mmu_vmalloc_psize].sllp; > slb_flush_and_rebolt(); > } > > If your shadow is per-cpu, you need to fix that up too. I'm confused... isn't that the same section of code? > I'm tempted to think you should just expose an slb_vmalloc_update() > from slb.c that does the shadow update and calls flush_and_rebolt. > That would also get rid of your ifdef on vflags definition (which > wasn't necessary in the first place if you had put it inside the > if statement anyway). OK, I'll create an slb_vmalloc_update for the next rev. Mikey