On Tue, Jun 6, 2017 at 8:17 PM, Michael Ellerman <[email protected]> wrote: > Balbir Singh <[email protected]> writes: >> On Tue, Jun 6, 2017 at 3:48 PM, Michael Ellerman <[email protected]> wrote: >>> Currently we map the whole linear mapping with PAGE_KERNEL_X. Instead we >>> should check if the page overlaps the kernel text and only then add >>> PAGE_KERNEL_X. > ... >>> @@ -145,8 +147,14 @@ static int __meminit create_physical_mapping(unsigned >>> long start, >>> start = addr; >>> } >>> >>> - rc = radix__map_kernel_page((unsigned long)__va(addr), addr, >>> - PAGE_KERNEL_X, mapping_size); >>> + vaddr = (unsigned long)__va(addr); >>> + >>> + if (overlaps_kernel_text(vaddr, vaddr + mapping_size)) >>> + prot = PAGE_KERNEL_X; >>> + else >>> + prot = PAGE_KERNEL; >> >> Do we need the kvm tmp/trampoline bits like hash? > > Ugh, I hope not. What is that crap. > > It appears to be epapr paravirt only: > > static int __init kvm_guest_init(void) > { > if (!kvm_para_available()) > goto free_tmp; > > if (!epapr_paravirt_enabled) > goto free_tmp; > > > But I can't convince myself whether epapr_paravirt_enabled is ever set > on Book3S guests or not. > > Looking at Qemu it looks like it *could* be. > > And why isn't that code in arch/powerpc/kvm ?
Not sure, for now Acked-by: Balbir Singh <[email protected]>
