[PATCH 2/2] KVM: PPC: Book3E: Get vcpu's last instruction for emulation

Alexander Graf agraf at suse.de
Wed Jul 10 20:18:10 EST 2013


On 10.07.2013, at 02:12, Scott Wood wrote:

> On 07/09/2013 04:45:10 PM, Alexander Graf wrote:
>> On 28.06.2013, at 11:20, Mihai Caraman wrote:
>> > +	/* Get page size */
>> > +	if (MAS0_GET_TLBSEL(mfspr(SPRN_MAS0)) == 0)
>> > +		psize_shift = PAGE_SHIFT;
>> > +	else
>> > +		psize_shift = MAS1_GET_TSIZE(mas1) + 10;
>> > +
>> > +	mas7_mas3 = (((u64) mfspr(SPRN_MAS7)) << 32) |
>> > +		    mfspr(SPRN_MAS3);
>> > +	addr = (mas7_mas3 & (~0ULL << psize_shift)) |
>> > +	       (geaddr & ((1ULL << psize_shift) - 1ULL));
>> > +
>> > +	/* Map a page and get guest's instruction */
>> > +	page = pfn_to_page(addr >> PAGE_SHIFT);
>> While looking at this I just realized that you're missing a check here. What if our IP is in some PCI BAR? Or can't we execute from those?
> 
> We at least need to check pfn_valid() first.  That'll just keep us from accessing a bad pointer in the host kernel, though -- it won't make the emulation actually work.  If we need that, we'll probably need to create a temporary TLB entry manually.

ioremap()?

However, if we were walking the guest TLB cache instead we would get a guest physical address which we can always resolve to a host virtual address.

I'm not sure how important that whole use case is though. Maybe we should just error out to the guest for now.


Alex



More information about the Linuxppc-dev mailing list