public inbox for kvm-ppc@vger.kernel.org
 help / color / mirror / Atom feed
* Magic Page in e500v2
@ 2012-05-21 11:51 Aashish Mittal
  2012-05-21 12:17 ` Alexander Graf
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Aashish Mittal @ 2012-05-21 11:51 UTC (permalink / raw)
  To: kvm-ppc

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)<<PAGE_SHIFT));
	

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 



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-05-21 15:41 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-21 11:51 Magic Page in e500v2 Aashish Mittal
2012-05-21 12:17 ` Alexander Graf
2012-05-21 12:49 ` Aashish Mittal
2012-05-21 13:17 ` Aashish Mittal
2012-05-21 15:41 ` Scott Wood

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox