mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Nikolay Borisov <nik.borisov@suse.com>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org, Juergen Gross <jgross@suse.com>,
	"H . Peter Anvin" <hpa@zytor.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Borislav Petkov <bp@alien8.de>,
	Thomas Gleixner <tglx@linutronix.de>
Subject: Re: [PATCH 37/49] x86/alternatives: Move text_poke_array completion from smp_text_poke_batch_finish() and smp_text_poke_batch_flush() to smp_text_poke_batch_process()
Date: Thu, 3 Apr 2025 17:39:18 +0300	[thread overview]
Message-ID: <b0b87bd7-e104-4c9b-b9e2-0682dfef28e9@suse.com> (raw)
In-Reply-To: <Z-6XkEpiXg4stqLY@gmail.com>



On 3.04.25 г. 17:13 ч., Ingo Molnar wrote:
> 
> * Nikolay Borisov <nik.borisov@suse.com> wrote:
> 
>>
>>
>> On 3.04.25 г. 16:38 ч., Ingo Molnar wrote:
>>>
>>> * Nikolay Borisov <nik.borisov@suse.com> wrote:
>>>
>>>>
>>>>
>>>> On 28.03.25 г. 15:26 ч., Ingo Molnar wrote:
>>>>> Simplifies the code and improves code generation a bit:
>>>>>
>>>>>       text	   data	    bss	    dec	    hex	filename
>>>>>      14769	   1017	   4112	  19898	   4dba	alternative.o.before
>>>>>      14742	   1017	   4112	  19871	   4d9f	alternative.o.after
>>>>>
>>>>> Signed-off-by: Ingo Molnar <mingo@kernel.org>
>>>>> ---
>>>>>     arch/x86/kernel/alternative.c | 11 +++++------
>>>>>     1 file changed, 5 insertions(+), 6 deletions(-)
>>>>>
>>>>> diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
>>>>> index 1df8fac6740d..5293929488f0 100644
>>>>> --- a/arch/x86/kernel/alternative.c
>>>>> +++ b/arch/x86/kernel/alternative.c
>>>>> @@ -2750,6 +2750,9 @@ static void smp_text_poke_batch_process(void)
>>>>>     		if (unlikely(!atomic_dec_and_test(refs)))
>>>>>     			atomic_cond_read_acquire(refs, !VAL);
>>>>>     	}
>>>>> +
>>>>> +	/* They are all completed: */
>>>>> +	text_poke_array.nr_entries = 0;
>>>>>     }
>>>>>     static void __smp_text_poke_batch_add(void *addr, const void *opcode, size_t len, const void *emulate)
>>>>> @@ -2857,20 +2860,16 @@ static bool text_poke_addr_ordered(void *addr)
>>>>>     void smp_text_poke_batch_finish(void)
>>>>>     {
>>>>> -	if (text_poke_array.nr_entries) {
>>>>> +	if (text_poke_array.nr_entries)
>>>>>     		smp_text_poke_batch_process();
>>>>> -		text_poke_array.nr_entries = 0;
>>>>> -	}
>>>>>     }
>>>>
>>>> This function becomes trivial, why not simply move the check into
>>>> smp_text_poke_batch_process and rename it to smp_text_poke_batch_finish ?
>>>
>>> Yeah, that's pretty much what happens in patch #47:
>>>
>>>     x86/alternatives: Remove 'smp_text_poke_batch_flush()'
>>
>> Well, that patch removes poke_batch_flush but still retains
>> poke_batch_finish + poke_batch_process. My suggestion is to eliminate
>> poke_batch_process name and turn it into poke_batch_finish by moving the
>> check from poke_batch_finish into poke_batch_process.
> 
> So, in the context of the full tree at:
> 
>    git://git.kernel.org/pub/scm/linux/kernel/git/mingo/tip.git WIP.x86/alternatives
> 
> Standalone smp_text_poke_batch_process() is still needed, because
> smp_text_poke_batch_add() uses it to drive the whole 'batching'
> machinery.
> 
> If smp_text_poke_batch_process() finishes for each call, if I
> understand your suggestion correctly, that reduces the amount of
> batching done, which is a disadvantage.
> 
> Note how right now it's possible to do something like this:
> 
> 	smp_text_poke_batch_add(1);
> 	smp_text_poke_batch_add(1);
> 	smp_text_poke_batch_add(1);
> 	smp_text_poke_batch_add(1);
> 	smp_text_poke_batch_finish();
> 
> This results in a single call to smp_text_poke_batch_process(), with 4
> entries, a single 4-entry flush in essence.

I meant doing this:

diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
index 5b1a6252a4b9..b6a781b9de26 100644
--- a/arch/x86/kernel/alternative.c
+++ b/arch/x86/kernel/alternative.c
@@ -2587,12 +2587,16 @@ noinstr int 
smp_text_poke_int3_trap_handler(struct pt_regs *regs)
   *               replacing opcode
   *     - SMP sync all CPUs
   */
-static void smp_text_poke_batch_process(void)
+void smp_text_poke_batch_finish(void)
  {
         unsigned char int3 = INT3_INSN_OPCODE;
         unsigned int i;
         int do_sync;

+
+       if (!text_poke_array.nr_entries)
+               return;
+
         lockdep_assert_held(&text_mutex);

         /*
@@ -2832,12 +2836,6 @@ static bool text_poke_addr_ordered(void *addr)
         return true;
  }

-void smp_text_poke_batch_finish(void)
-{
-       if (text_poke_array.nr_entries)
-               smp_text_poke_batch_process();
-}
-
  /**
   * smp_text_poke_batch_add() -- update instruction on live kernel on 
SMP, batched
   * @addr:      address to patch
@@ -2854,7 +2852,7 @@ void smp_text_poke_batch_finish(void)
  void __ref smp_text_poke_batch_add(void *addr, const void *opcode, 
size_t len, const void *emulate)
  {
         if (text_poke_array.nr_entries == TEXT_POKE_ARRAY_MAX || 
!text_poke_addr_ordered(addr))
-               smp_text_poke_batch_process();
+               smp_text_poke_batch_finish();
         __smp_text_poke_batch_add(addr, opcode, len, emulate);
  }


AFAICS this doesn't change the semantics. I.e smp_text_poke_batch_add 
will call poke_batch_finish iff the address to be added violates the 
sorted order of text_poke_array. The net effect is we have 1 less 
function name to care about.

> 
> Thanks,
> 
> 	Ingo


  reply	other threads:[~2025-04-03 14:39 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-28 13:26 [PATCH -v2 00/49] Simplify, reorganize and clean up the x86 text-patching code (alternative.c) Ingo Molnar
2025-03-28 13:26 ` [PATCH 01/49] x86/alternatives: Rename 'struct bp_patching_desc' to 'struct int3_patching_desc' Ingo Molnar
2025-03-28 13:26 ` [PATCH 02/49] x86/alternatives: Rename 'bp_refs' to 'int3_refs' Ingo Molnar
2025-03-28 13:26 ` [PATCH 03/49] x86/alternatives: Rename 'text_poke_bp_batch()' to 'smp_text_poke_batch_process()' Ingo Molnar
2025-03-28 13:26 ` [PATCH 04/49] x86/alternatives: Rename 'text_poke_bp()' to 'smp_text_poke_single()' Ingo Molnar
2025-03-28 13:26 ` [PATCH 05/49] x86/alternatives: Rename 'poke_int3_handler()' to 'smp_text_poke_int3_trap_handler()' Ingo Molnar
2025-03-28 13:26 ` [PATCH 06/49] x86/alternatives: Rename 'poking_mm' to 'text_poke_mm' Ingo Molnar
2025-03-28 13:26 ` [PATCH 07/49] x86/alternatives: Rename 'poking_addr' to 'text_poke_mm_addr' Ingo Molnar
2025-03-28 13:26 ` [PATCH 08/49] x86/alternatives: Rename 'bp_desc' to 'int3_desc' Ingo Molnar
2025-03-28 13:26 ` [PATCH 09/49] x86/alternatives: Remove duplicate 'text_poke_early()' prototype Ingo Molnar
2025-03-28 13:26 ` [PATCH 10/49] x86/alternatives: Update comments in int3_emulate_push() Ingo Molnar
2025-03-28 13:26 ` [PATCH 11/49] x86/alternatives: Remove the confusing, inaccurate & unnecessary 'temp_mm_state_t' abstraction Ingo Molnar
2025-04-01 14:36   ` Peter Zijlstra
2025-04-01 19:06     ` Ingo Molnar
2025-04-02  4:07       ` Ingo Molnar
2025-04-02  7:54         ` Peter Zijlstra
2025-03-28 13:26 ` [PATCH 12/49] x86/alternatives: Rename 'text_poke_flush()' to 'smp_text_poke_batch_flush()' Ingo Molnar
2025-03-28 13:26 ` [PATCH 13/49] x86/alternatives: Rename 'text_poke_finish()' to 'smp_text_poke_batch_finish()' Ingo Molnar
2025-03-28 13:26 ` [PATCH 14/49] x86/alternatives: Rename 'text_poke_queue()' to 'smp_text_poke_batch_add()' Ingo Molnar
2025-03-28 13:26 ` [PATCH 15/49] x86/alternatives: Rename 'text_poke_loc_init()' to 'text_poke_int3_loc_init()' Ingo Molnar
2025-03-28 13:26 ` [PATCH 16/49] x86/alternatives: Rename 'struct text_poke_loc' to 'struct smp_text_poke_loc' Ingo Molnar
2025-03-28 13:26 ` [PATCH 17/49] x86/alternatives: Rename 'struct int3_patching_desc' to 'struct text_poke_int3_vec' Ingo Molnar
2025-03-28 13:26 ` [PATCH 18/49] x86/alternatives: Rename 'int3_desc' to 'int3_vec' Ingo Molnar
2025-03-28 13:26 ` [PATCH 19/49] x86/alternatives: Add text_mutex) assert to smp_text_poke_batch_flush() Ingo Molnar
2025-03-28 13:26 ` [PATCH 20/49] x86/alternatives: Assert that smp_text_poke_int3_trap_handler() can only ever handle 'tp_vec[]' based requests Ingo Molnar
2025-03-28 13:26 ` [PATCH 21/49] x86/alternatives: Use non-inverted logic instead of 'tp_order_fail()' Ingo Molnar
2025-03-28 13:26 ` [PATCH 22/49] x86/alternatives: Remove the 'addr == NULL means forced-flush' hack from smp_text_poke_batch_finish()/smp_text_poke_batch_flush()/text_poke_addr_ordered() Ingo Molnar
2025-03-28 13:26 ` [PATCH 23/49] x86/alternatives: Simplify smp_text_poke_single() by using tp_vec and existing APIs Ingo Molnar
2025-04-01 14:40   ` Peter Zijlstra
2025-04-01 18:49     ` Ingo Molnar
2025-03-28 13:26 ` [PATCH 24/49] x86/alternatives: Assert input parameters in smp_text_poke_batch_process() Ingo Molnar
2025-03-28 13:26 ` [PATCH 25/49] x86/alternatives: Introduce 'struct smp_text_poke_array' and move tp_vec and tp_vec_nr to it Ingo Molnar
2025-03-28 13:26 ` [PATCH 26/49] x86/alternatives: Remove the tp_vec indirection Ingo Molnar
2025-03-28 13:26 ` [PATCH 27/49] x86/alternatives: Rename 'try_get_desc()' to 'try_get_text_poke_array()' Ingo Molnar
2025-03-28 13:26 ` [PATCH 28/49] x86/alternatives: Rename 'put_desc()' to 'put_text_poke_array()' Ingo Molnar
2025-03-28 13:26 ` [PATCH 29/49] x86/alternatives: Simplify try_get_text_poke_array() Ingo Molnar
2025-03-28 13:26 ` [PATCH 30/49] x86/alternatives: Simplify smp_text_poke_int3_trap_handler() Ingo Molnar
2025-03-28 13:26 ` [PATCH 31/49] x86/alternatives: Simplify smp_text_poke_batch_process() Ingo Molnar
2025-03-28 13:26 ` [PATCH 32/49] x86/alternatives: Rename 'int3_refs' to 'text_poke_array_refs' Ingo Molnar
2025-03-28 13:26 ` [PATCH 33/49] x86/alternatives: Move the text_poke_array manipulation into text_poke_int3_loc_init() and rename it to __smp_text_poke_batch_add() Ingo Molnar
2025-03-28 13:26 ` [PATCH 34/49] x86/alternatives: Remove the mixed-patching restriction on smp_text_poke_single() Ingo Molnar
2025-03-28 13:26 ` [PATCH 35/49] x86/alternatives: Document 'smp_text_poke_single()' Ingo Molnar
2025-03-28 13:26 ` [PATCH 36/49] x86/alternatives: Add documentation for smp_text_poke_batch_add() Ingo Molnar
2025-03-28 13:26 ` [PATCH 37/49] x86/alternatives: Move text_poke_array completion from smp_text_poke_batch_finish() and smp_text_poke_batch_flush() to smp_text_poke_batch_process() Ingo Molnar
2025-04-03 13:08   ` Nikolay Borisov
2025-04-03 13:38     ` Ingo Molnar
2025-04-03 13:41       ` Nikolay Borisov
2025-04-03 14:13         ` Ingo Molnar
2025-04-03 14:39           ` Nikolay Borisov [this message]
2025-04-03 15:29             ` Ingo Molnar
2025-04-03 15:34               ` Nikolay Borisov
2025-04-04  7:48                 ` Ingo Molnar
2025-03-28 13:26 ` [PATCH 38/49] x86/alternatives: Rename 'text_poke_sync()' to 'smp_text_poke_sync_each_cpu()' Ingo Molnar
2025-03-28 13:26 ` [PATCH 39/49] x86/alternatives: Simplify text_poke_addr_ordered() Ingo Molnar
2025-03-28 13:26 ` [PATCH 40/49] x86/alternatives: Constify text_poke_addr() Ingo Molnar
2025-03-28 13:26 ` [PATCH 41/49] x86/alternatives: Simplify and clean up patch_cmp() Ingo Molnar
2025-03-28 13:26 ` [PATCH 42/49] x86/alternatives: Standardize on 'tpl' local variable names for 'struct smp_text_poke_loc *' Ingo Molnar
2025-03-28 13:26 ` [PATCH 43/49] x86/alternatives: Rename 'TP_ARRAY_NR_ENTRIES_MAX' to 'TEXT_POKE_ARRAY_MAX' Ingo Molnar
2025-03-28 13:26 ` [PATCH 44/49] x86/alternatives: Rename 'POKE_MAX_OPCODE_SIZE' to 'TEXT_POKE_MAX_OPCODE_SIZE' Ingo Molnar
2025-03-28 13:27 ` [PATCH 45/49] x86/alternatives: Simplify the #include section Ingo Molnar
2025-03-28 13:27 ` [PATCH 46/49] x86/alternatives: Move declarations of vmlinux.lds.S defined section symbols to <asm/alternative.h> Ingo Molnar
2025-03-28 13:27 ` [PATCH 47/49] x86/alternatives: Remove 'smp_text_poke_batch_flush()' Ingo Molnar
2025-03-28 13:27 ` [PATCH 48/49] x86/alternatives: Update the comments in smp_text_poke_batch_process() Ingo Molnar
2025-03-28 13:27 ` [PATCH 49/49] x86/alternatives: Rename 'apply_relocation()' to 'text_poke_apply_relocation()' Ingo Molnar
2025-04-01 14:31 ` [PATCH -v2 00/49] Simplify, reorganize and clean up the x86 text-patching code (alternative.c) Peter Zijlstra
2025-04-09 20:51   ` Ingo Molnar
2025-04-10 12:57     ` Peter Zijlstra
2025-04-01 14:31 ` Peter Zijlstra
2025-04-02  3:47   ` Ingo Molnar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b0b87bd7-e104-4c9b-b9e2-0682dfef28e9@suse.com \
    --to=nik.borisov@suse.com \
    --cc=bp@alien8.de \
    --cc=hpa@zytor.com \
    --cc=jgross@suse.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®