On 10.07.2013, at 20:37, Scott Wood wrote:

> On 07/10/2013 05:18:10 AM, Alexander Graf wrote:
>> 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()?
> 
> That's a bit heavy... also we'd need to deal with cacheability.  This code is 
> already engaged in directly creating TLB entries, so it doesn't seem like 
> much of a stretch to create one for this.  It should be faster than ioremap() 
> or kmap_atomic().

Do we have any guarantees that the TLB entry we create doesn't get evicted by 
another thread by the time we want to use it?


Alex

> The one complication is allocating the virtual address space, but maybe we 
> could just use the page that kmap_atomic would have used?  Of course, if we 
> want to handle execution from other than normal kernel memory, we'll need to 
> make sure that the virtual address space is allocated even when highmem is 
> not present (e.g. 64-bit).
> 
>> 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.
> 
> It's not that important, now that we are using hugetlb rather than directly 
> mapping a large hunk of reserved memory.  It would be nice to handle it 
> though, if we can do without too much hassle.  And I think manually creating 
> a TLB entry could be faster than kmap_atomic(), or searching the guest TLB 
> and then doing a reverse memslot lookup.
> 
> -Scott
> --
> To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to