[PATCH 0/8] riscv/mm/fault: Page fault handler cleanups

Palmer Dabbelt palmer at dabbelt.com
Fri Sep 4 13:37:38 EDT 2020


On Tue, 25 Aug 2020 11:38:59 PDT (-0700), penberg at gmail.com wrote:
> From: Pekka Enberg <penberg at kernel.org>
>
> This patch series cleans up the do_page_fault() function by replacing
> gotos with function calls, similar to what the x86 architecture does.
> The motivation for this series is to make thepage fault handling code
> easier to read and reason about.
>
> The use of gotos has no advantage in kernel code size either. In fact,
> the bloatometer script shows a tiny decrease in kernel text size:
>
>   add/remove: 1/0 grow/shrink: 0/2 up/down: 96/-99 (-3)
>   Function                                     old     new   delta
>   no_context.part                                -      96     +96
>   __func__                                      14      13      -1
>   do_page_fault                                778     680     -98
>   Total: Before=792, After=789, chg -0.38%
>
> Please note tht x86 also moves these functions out-of-line with the
> "noinline" annotation, which supposedly decreases stack usage in
> do_page_fault() at the expense of slighly larger kernel code size.
>
> However, in my testing, I was able to reduce stack usage at maximum by
> 16 bytes, at the expense of much larger kernel code size, so I am
> keeping the functions inline, and letting the compiler do its job.

This all seems fine to me, they're on for-next.

> The patch series has been tested on QEMU.
>
> You can pull the series from:
>
>   git at github.com:penberg/linux.git penberg/riscv/mm-fault-cleanups
>
> Pekka Enberg (8):
>   riscv/mm/fault: Move no context handling to no_context()
>   riscv/mm/fault: Move bad area handling to bad_area()
>   riscv/mm/fault: Move vmalloc fault handling to vmalloc_fault()
>   riscv/mm/fault: Simplify fault error handling
>   riscv/mm/fault: Move fault error handling to mm_fault_error()
>   riscv/mm/fault: Simplify mm_fault_error()
>   riscv/mm/fault: Move FAULT_FLAG_WRITE handling in do_page_fault()
>   riscv/mm/fault: Move access error check to function
>
>  arch/riscv/mm/fault.c | 337 +++++++++++++++++++++++-------------------
>  1 file changed, 189 insertions(+), 148 deletions(-)



More information about the linux-riscv mailing list