Commit e44370ab authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Michael Ellerman
Browse files

powerpc/64s: slb comment update



This makes a small improvement to the description of the SLB interrupt
environment. Move the memory access restrictions into one paragraph,
and the interrupt restrictions into the next rather than mix them.

Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20210130130852.2952424-18-npiggin@gmail.com
parent 31d6490c
Loading
Loading
Loading
Loading
+15 −13
Original line number Diff line number Diff line
@@ -825,19 +825,21 @@ long do_slb_fault(struct pt_regs *regs)
		return -EINVAL;

	/*
	 * SLB kernel faults must be very careful not to touch anything
	 * that is not bolted. E.g., PACA and global variables are okay,
	 * mm->context stuff is not.
	 *
	 * SLB user faults can access all of kernel memory, but must be
	 * careful not to touch things like IRQ state because it is not
	 * "reconciled" here. The difficulty is that we must use
	 * fast_exception_return to return from kernel SLB faults without
	 * looking at possible non-bolted memory. We could test user vs
	 * kernel faults in the interrupt handler asm and do a full fault,
	 * reconcile, ret_from_except for user faults which would make them
	 * first class kernel code. But for performance it's probably nicer
	 * if they go via fast_exception_return too.
	 * SLB kernel faults must be very careful not to touch anything that is
	 * not bolted. E.g., PACA and global variables are okay, mm->context
	 * stuff is not. SLB user faults may access all of memory (and induce
	 * one recursive SLB kernel fault), so the kernel fault must not
	 * trample on the user fault state at those points.
	 */

	/*
	 * The interrupt state is not reconciled, for performance, so that
	 * fast_interrupt_return can be used. The handler must not touch local
	 * irq state, or schedule. We could test for usermode and upgrade to a
	 * normal process context (synchronous) interrupt for those, which
	 * would make them first-class kernel code and able to be traced and
	 * instrumented, although performance would suffer a bit, it would
	 * probably be a good tradeoff.
	 */
	if (id >= LINEAR_MAP_REGION_ID) {
		long err;