From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexander Graf Date: Mon, 21 May 2012 12:17:06 +0000 Subject: Re: Magic Page in e500v2 Message-Id: <4FBA3242.7090602@suse.de> List-Id: References: In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: kvm-ppc@vger.kernel.org Hi Aashish, On 05/21/2012 01:51 PM, Aashish Mittal wrote: > Hi > I'm working on KVM optimizations on Powerpc e500v2 embedded architecture. For my > project i'm trying to increase the size of shared region mapped my Magic Page > between host and guest for paravirtual support. I was expecting this would > possible since we are using a TLB1 entry to map the magic page entry inside the > host. I'm trying to increase it's size to 1MB. I've declared a shared structure > tcache of 1MB similar to vcpu->arch.shared and trying to map it in the guest > virtual space. The shared page earlier is now the last page of this tcache > structure. > > This is the modified code : > > Initialization in e500.c in function kvmppc_core_vcpu_create > > shared = (void*)__get_free_pages(GFP_KERNEL|__GFP_ZERO,10); > vcpu->arch.tcache = (void*)(shared); > vcpu->arch.shared = (void*)(shared + (((1<< 10)-1)< > > void kvmppc_map_magic(struct kvm_vcpu *vcpu) > { > struct kvmppc_vcpu_e500 *vcpu_e500 = to_e500(vcpu); > struct kvm_book3e_206_tlb_entry magic; > ulong shared_page = ((ulong)vcpu->arch.tcache)& PAGE_MASK; > ulong page = shared_page; > unsigned int stid; > pfn_t pfn,pfn1; > int i = 0; > > for(i=0;i< 1024;i++){ > pfn1 = (pfn_t)virt_to_phys((void *)page)>> PAGE_SHIFT; > get_page(pfn_to_page(pfn1)); > page += 0x1000; > } > > pfn = (pfn_t)virt_to_phys((void *)shared_page)>> PAGE_SHIFT; > > > preempt_disable(); > stid = e500_get_sid(vcpu_e500, 0, 0, 0, 0); > > magic.mas1 = MAS1_VALID | MAS1_TS | MAS1_TID(stid) | > MAS1_TSIZE(BOOK3E_PAGESZ_1M); > magic.mas2 = (vcpu->arch.magic_page_ea& 0xfff00000)| MAS2_M; > > magic.mas7_3 = ((u64)pfn<< PAGE_SHIFT) | > MAS3_SW | MAS3_SR | MAS3_UW | MAS3_UR; > > __write_host_tlbe(&magic, MAS0_TLBSEL(1) | MAS0_ESEL(tlbcam_index)); > preempt_enable(); > } > > But i'm experiencing the following error printed in the guest > > KVM: Live patching for a fast VM worked > initcall kvm_guest_init+0x0/0x1f8 returned with disabled interrupts > initcall migration_init+0x0/0x8c returned with disabled interrupts > > and then the guest just hangs. > > Does anybody have any idea how to map it correctly > > Thanks > > > -- > To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html