On Wed, Feb 1, 2023 at 10:58 PM Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote: > > BTW, speaking of alpha page faults - maybe I'm misreading the manual, > but it seems to imply that interrupts are *not* disabled when entering > page fault handler: Yeah, I think you are right. And we *thought* we didn't need to disable interrupts like we do on x86, because (unlike x86), we get the fault address in an interrupt-safe way as an argument from palcode, rather than having to read it from a register. But now interrupts can race with that vmalloc case. > is not just missing local_irq_save()/local_irq_restore() around that > fragment - if it finds pgd already present, it needs to check pte > before deciding to proceed to no_context. Well, the logic there is that if the pgd was already present, then something *else* wasn't present, so no_context makes perfect sense. But that assumption does not hold for the "we raced with an interrupt" case, so yes, it's broken. And as you point out, it's doubly broken because "pgd_present()" doesn't actually do what it historically did, and what that code *thinks* it still does. So yeah, this looks all broken. Linus