>> interrupts being serviced while the page fault is in progress on x86 but not on ARM or did I miss something in my reading of the code?
Turns out I did miss something in my reading of the code. Interrupts are indeed disabled on x86 on entry into the page fault handler until we save the CR2 register (which holds the faulting address). Local IRQs are enabled in the fault handler after that. This prevents an interrupt (or maybe another thread too?) clobbering the CR2 value before the faulting address is saved. However, this still leaves me with my original "guesses": >> I would have guessed that (non-threaded) interrupts be disabled during page faults because of the possibility of a recursive lock acquire or stack overflow if the interrupt handler itself page faults. I assume this is not a problem because we don't actually "handle" page faults that happen because of interrupts? Going off of this comment: _If we're in an interrupt, have no user context or are running in a region with pagefaults disabled then we must not take the fault_ in arch/x86/mm/fault.c I does indeed look like that. I'd be glad if someone can clarify this. Shrikant On Tue, May 7, 2019, 10:19 AM Shrikant Giridhar <[email protected]> wrote: > Hi, > > I was looking at arch code setting up page fault handling in the kernel > and came away with a couple of questions. > > Can hardware interrupts (non-NMI) occur during page faults? On x86, I > notice that the page fault handler is set up with an interrupt gate which > should clear the IF (Interrupt Enable) bit - disabling maskable interrupts > in the process. I also don't see interrupts being enabled later in the > handler (arch/x86/mm/fault.c:do_page_fault). > > However, from a quick skim, it doesn't look like the same rule is followed > on ARM (32-bit) where local IRQs are enabled after we enter the page fault > handler (arch/arm/mm/fault.c:do_page_fault). > > Is there a general policy for interrupt handling during page faults? I > would have guessed that (non-threaded) interrupts be disabled during page > faults because of the possibility of a recursive lock acquire or stack > overflow if the interrupt handler itself page faults. > > Is there an arch-specific factor involved which prevents (AFAICT) > interrupts being serviced while the page fault is in progress on x86 but > not on ARM or did I miss something in my reading of the code? > > > Shrikant >
_______________________________________________ Kernelnewbies mailing list [email protected] https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
