Messages in this thread | | | Date | Fri, 21 Nov 2014 20:51:43 +0100 (CET) | From | Thomas Gleixner <> | Subject | Re: frequent lockups in 3.18rc4 |
| |
On Fri, 21 Nov 2014, Linus Torvalds wrote: > Here's the simplified end result. Again, this is TOTALLY UNTESTED. I > compiled it and verified that the code generation looks like what I'd > have expected, but that's literally it. > > static noinline int vmalloc_fault(unsigned long address) > { > pgd_t *pgd_dst; > pgdval_t pgd_entry; > unsigned index = pgd_index(address); > > if (index < KERNEL_PGD_BOUNDARY) > return -1; > > pgd_entry = init_mm.pgd[index].pgd; > if (!pgd_entry) > return -1; > > pgd_dst = __va(PAGE_MASK & read_cr3()); > pgd_dst += index; > > if (pgd_dst->pgd) > return -1; > > ACCESS_ONCE(pgd_dst->pgd) = pgd_entry;
This will break paravirt. set_pgd/set_pmd are paravirt functions.
But I'm fine with breaking it, then you just need to change CONFIG_PARAVIRT to 'def_bool n'
Thanks,
tglx
| |