[PATCH v1 2/2] powerpc/code-patching: Convert to open_patch_window()/close_patch_window()

Christophe Leroy christophe.leroy at csgroup.eu
Sat Mar 16 21:10:48 AEDT 2024



Le 15/03/2024 à 09:38, Christophe Leroy a écrit :
> 
> 
> Le 15/03/2024 à 03:59, Benjamin Gray a écrit :
>> The existing patching alias page setup and teardown sections can be
>> simplified to make use of the new open_patch_window() abstraction.
>>
>> This eliminates the _mm variants of the helpers, consumers no longer
>> need to check mm_patch_enabled(), and consumers no longer need to worry
>> about synchronization and flushing beyond the changes they make in the
>> patching window.
> 
> With this patch, the time needed to activate or de-activate function 
> tracer is approx 10% longer on powerpc 8xx.

With the following changes, the performance is restored:

diff --git a/arch/powerpc/lib/code-patching.c 
b/arch/powerpc/lib/code-patching.c
index fd6f8576033a..bc92b85913d8 100644
--- a/arch/powerpc/lib/code-patching.c
+++ b/arch/powerpc/lib/code-patching.c
@@ -282,13 +282,13 @@ struct patch_window {
   * Interrupts must be disabled for the entire duration of the 
patching. The PIDR
   * is potentially changed during this time.
   */
-static int open_patch_window(void *addr, struct patch_window *ctx)
+static __always_inline int open_patch_window(void *addr, struct 
patch_window *ctx)
  {
  	unsigned long pfn = get_patch_pfn(addr);

  	lockdep_assert_irqs_disabled();

-	ctx->text_poke_addr = (unsigned 
long)__this_cpu_read(cpu_patching_context.addr);
+	ctx->text_poke_addr = (unsigned 
long)__this_cpu_read(cpu_patching_context.addr) & PAGE_MASK;

  	if (!mm_patch_enabled()) {
  		ctx->ptep = __this_cpu_read(cpu_patching_context.pte);
@@ -331,7 +331,7 @@ static int open_patch_window(void *addr, struct 
patch_window *ctx)
  	return 0;
  }

-static void close_patch_window(struct patch_window *ctx)
+static __always_inline void close_patch_window(struct patch_window *ctx)
  {
  	lockdep_assert_irqs_disabled();




More information about the Linuxppc-dev mailing list