All of lore.kernel.org
 help / color / mirror / Atom feed
From: Valentin Schneider <vschneid@redhat.com>
To: linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org,
	kvm@vger.kernel.org, linux-mm@kvack.org, bpf@vger.kernel.org,
	x86@kernel.org, rcu@vger.kernel.org,
	linux-kselftest@vger.kernel.org
Cc: "Steven Rostedt" <rostedt@goodmis.org>,
	"Masami Hiramatsu" <mhiramat@kernel.org>,
	"Jonathan Corbet" <corbet@lwn.net>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Ingo Molnar" <mingo@redhat.com>,
	"Borislav Petkov" <bp@alien8.de>,
	"Dave Hansen" <dave.hansen@linux.intel.com>,
	"H. Peter Anvin" <hpa@zytor.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Wanpeng Li" <wanpengli@tencent.com>,
	"Vitaly Kuznetsov" <vkuznets@redhat.com>,
	"Andy Lutomirski" <luto@kernel.org>,
	"Peter Zijlstra" <peterz@infradead.org>,
	"Frederic Weisbecker" <frederic@kernel.org>,
	"Paul E. McKenney" <paulmck@kernel.org>,
	"Neeraj Upadhyay" <quic_neeraju@quicinc.com>,
	"Joel Fernandes" <joel@joelfernandes.org>,
	"Josh Triplett" <josh@joshtriplett.org>,
	"Boqun Feng" <boqun.feng@gmail.com>,
	"Mathieu Desnoyers" <mathieu.desnoyers@efficios.com>,
	"Lai Jiangshan" <jiangshanlai@gmail.com>,
	Zqiang <qiang.zhang1211@gmail.com>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Uladzislau Rezki" <urezki@gmail.com>,
	"Christoph Hellwig" <hch@infradead.org>,
	"Lorenzo Stoakes" <lstoakes@gmail.com>,
	"Josh Poimboeuf" <jpoimboe@kernel.org>,
	"Jason Baron" <jbaron@akamai.com>,
	"Kees Cook" <keescook@chromium.org>,
	"Sami Tolvanen" <samitolvanen@google.com>,
	"Ard Biesheuvel" <ardb@kernel.org>,
	"Nicholas Piggin" <npiggin@gmail.com>,
	"Juerg Haefliger" <juerg.haefliger@canonical.com>,
	"Nicolas Saenz Julienne" <nsaenz@kernel.org>,
	"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
	"Nadav Amit" <namit@vmware.com>,
	"Dan Carpenter" <error27@gmail.com>,
	"Chuang Wang" <nashuiliang@gmail.com>,
	"Yang Jihong" <yangjihong1@huawei.com>,
	"Petr Mladek" <pmladek@suse.com>,
	"Jason A. Donenfeld" <Jason@zx2c4.com>,
	"Song Liu" <song@kernel.org>,
	"Julian Pidancet" <julian.pidancet@oracle.com>,
	"Tom Lendacky" <thomas.lendacky@amd.com>,
	"Dionna Glaze" <dionnaglaze@google.com>,
	"Thomas Weißschuh" <linux@weissschuh.net>,
	"Juri Lelli" <juri.lelli@redhat.com>,
	"Marcelo Tosatti" <mtosatti@redhat.com>,
	"Yair Podemsky" <ypodemsk@redhat.com>,
	"Daniel Wagner" <dwagner@suse.de>,
	"Petr Tesarik" <ptesarik@suse.com>
Subject: [RFC PATCH v3 10/15] x86/alternatives: Record text_poke's of JUMP_TYPE_FORCEFUL labels
Date: Tue, 19 Nov 2024 16:34:57 +0100	[thread overview]
Message-ID: <20241119153502.41361-11-vschneid@redhat.com> (raw)
In-Reply-To: <20241119153502.41361-1-vschneid@redhat.com>

Forceful static keys are used in early entry code where it is unsafe to
defer the sync_core() IPIs, and flagged as such via their ->type field.

Record that information when creating a text_poke_loc. The
text_poke_loc.old field is written to when first iterating a text_poke()
entry, and as such can be (ab)used to store this information at the start
of text_poke_bp_batch().

Signed-off-by: Valentin Schneider <vschneid@redhat.com>
---
 arch/x86/include/asm/text-patching.h | 12 ++++++++++--
 arch/x86/kernel/alternative.c        | 16 ++++++++++------
 arch/x86/kernel/jump_label.c         |  7 ++++---
 3 files changed, 24 insertions(+), 11 deletions(-)

diff --git a/arch/x86/include/asm/text-patching.h b/arch/x86/include/asm/text-patching.h
index 6259f1937fe77..e34de36cab61e 100644
--- a/arch/x86/include/asm/text-patching.h
+++ b/arch/x86/include/asm/text-patching.h
@@ -38,9 +38,17 @@ extern void *text_poke_copy(void *addr, const void *opcode, size_t len);
 extern void *text_poke_copy_locked(void *addr, const void *opcode, size_t len, bool core_ok);
 extern void *text_poke_set(void *addr, int c, size_t len);
 extern int poke_int3_handler(struct pt_regs *regs);
-extern void text_poke_bp(void *addr, const void *opcode, size_t len, const void *emulate);
+extern void __text_poke_bp(void *addr, const void *opcode, size_t len, const void *emulate, bool force_ipi);
+static inline void text_poke_bp(void *addr, const void *opcode, size_t len, const void *emulate)
+{
+	__text_poke_bp(addr, opcode, len, emulate, false);
+}
 
-extern void text_poke_queue(void *addr, const void *opcode, size_t len, const void *emulate);
+extern void __text_poke_queue(void *addr, const void *opcode, size_t len, const void *emulate, bool force_ipi);
+static inline void text_poke_queue(void *addr, const void *opcode, size_t len, const void *emulate)
+{
+	__text_poke_queue(addr, opcode, len, emulate, false);
+}
 extern void text_poke_finish(void);
 
 #define INT3_INSN_SIZE		1
diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
index d17518ca19b8b..954c4c0f7fc58 100644
--- a/arch/x86/kernel/alternative.c
+++ b/arch/x86/kernel/alternative.c
@@ -2098,7 +2098,10 @@ struct text_poke_loc {
 	u8 opcode;
 	const u8 text[POKE_MAX_OPCODE_SIZE];
 	/* see text_poke_bp_batch() */
-	u8 old;
+	union {
+		u8 old;
+		u8 force_ipi;
+	};
 };
 
 struct bp_patching_desc {
@@ -2385,7 +2388,7 @@ static void text_poke_bp_batch(struct text_poke_loc *tp, unsigned int nr_entries
 }
 
 static void text_poke_loc_init(struct text_poke_loc *tp, void *addr,
-			       const void *opcode, size_t len, const void *emulate)
+			       const void *opcode, size_t len, const void *emulate, bool force_ipi)
 {
 	struct insn insn;
 	int ret, i = 0;
@@ -2402,6 +2405,7 @@ static void text_poke_loc_init(struct text_poke_loc *tp, void *addr,
 	tp->rel_addr = addr - (void *)_stext;
 	tp->len = len;
 	tp->opcode = insn.opcode.bytes[0];
+	tp->force_ipi = force_ipi;
 
 	if (is_jcc32(&insn)) {
 		/*
@@ -2493,14 +2497,14 @@ void text_poke_finish(void)
 	text_poke_flush(NULL);
 }
 
-void __ref text_poke_queue(void *addr, const void *opcode, size_t len, const void *emulate)
+void __ref __text_poke_queue(void *addr, const void *opcode, size_t len, const void *emulate, bool force_ipi)
 {
 	struct text_poke_loc *tp;
 
 	text_poke_flush(addr);
 
 	tp = &tp_vec[tp_vec_nr++];
-	text_poke_loc_init(tp, addr, opcode, len, emulate);
+	text_poke_loc_init(tp, addr, opcode, len, emulate, force_ipi);
 }
 
 /**
@@ -2514,10 +2518,10 @@ void __ref text_poke_queue(void *addr, const void *opcode, size_t len, const voi
  * dynamically allocated memory. This function should be used when it is
  * not possible to allocate memory.
  */
-void __ref text_poke_bp(void *addr, const void *opcode, size_t len, const void *emulate)
+void __ref __text_poke_bp(void *addr, const void *opcode, size_t len, const void *emulate, bool force_ipi)
 {
 	struct text_poke_loc tp;
 
-	text_poke_loc_init(&tp, addr, opcode, len, emulate);
+	text_poke_loc_init(&tp, addr, opcode, len, emulate, force_ipi);
 	text_poke_bp_batch(&tp, 1);
 }
diff --git a/arch/x86/kernel/jump_label.c b/arch/x86/kernel/jump_label.c
index f5b8ef02d172c..e03a4f56b30fd 100644
--- a/arch/x86/kernel/jump_label.c
+++ b/arch/x86/kernel/jump_label.c
@@ -101,8 +101,8 @@ __jump_label_transform(struct jump_entry *entry,
 		text_poke_early((void *)jump_entry_code(entry), jlp.code, jlp.size);
 		return;
 	}
-
-	text_poke_bp((void *)jump_entry_code(entry), jlp.code, jlp.size, NULL);
+	__text_poke_bp((void *)jump_entry_code(entry), jlp.code, jlp.size, NULL,
+		     jump_entry_key(entry)->type & JUMP_TYPE_FORCEFUL);
 }
 
 static void __ref jump_label_transform(struct jump_entry *entry,
@@ -135,7 +135,8 @@ bool arch_jump_label_transform_queue(struct jump_entry *entry,
 
 	mutex_lock(&text_mutex);
 	jlp = __jump_label_patch(entry, type);
-	text_poke_queue((void *)jump_entry_code(entry), jlp.code, jlp.size, NULL);
+	__text_poke_queue((void *)jump_entry_code(entry), jlp.code, jlp.size, NULL,
+			jump_entry_key(entry)->type & JUMP_TYPE_FORCEFUL);
 	mutex_unlock(&text_mutex);
 	return true;
 }
-- 
2.43.0


  parent reply	other threads:[~2024-11-19 15:38 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-11-19 15:34 [RFC PATCH v3 00/15] context_tracking,x86: Defer some IPIs until a user->kernel transition Valentin Schneider
2024-11-19 15:34 ` [RFC PATCH v3 01/15] objtool: Make validate_call() recognize indirect calls to pv_ops[] Valentin Schneider
2024-11-19 20:38   ` Josh Poimboeuf
2024-11-19 15:34 ` [RFC PATCH v3 02/15] objtool: Flesh out warning related to pv_ops[] calls Valentin Schneider
2024-11-19 20:38   ` Josh Poimboeuf
2024-11-19 15:34 ` [RFC PATCH v3 03/15] sched/clock: Make sched_clock_running __ro_after_init Valentin Schneider
2024-11-19 15:34 ` [RFC PATCH v3 04/15] rcu: Add a small-width RCU watching counter debug option Valentin Schneider
2024-11-20 14:50   ` Peter Zijlstra
2024-11-20 16:15     ` Valentin Schneider
2024-11-22 12:53   ` Paul E. McKenney
2024-11-22 13:56     ` Valentin Schneider
2024-11-19 15:34 ` [RFC PATCH v3 05/15] rcutorture: Make TREE04 use CONFIG_RCU_DYNTICKS_TORTURE Valentin Schneider
2024-11-22 12:54   ` Paul E. McKenney
2024-11-19 15:34 ` [RFC PATCH v3 06/15] jump_label: Add forceful jump label type Valentin Schneider
2024-11-19 23:39   ` Josh Poimboeuf
2024-11-20 14:56     ` Peter Zijlstra
2024-11-20 14:57       ` Peter Zijlstra
2024-11-20 16:55         ` Josh Poimboeuf
2024-11-21 11:00           ` Peter Zijlstra
2024-11-21 15:38             ` Josh Poimboeuf
2024-11-21 15:51             ` Valentin Schneider
2024-11-21 20:21               ` Josh Poimboeuf
2024-11-22 10:17                 ` Valentin Schneider
2024-11-20 16:24     ` Valentin Schneider
2024-11-20  0:05   ` Josh Poimboeuf
2024-11-20 10:22     ` Peter Zijlstra
2024-11-19 15:34 ` [RFC PATCH v3 07/15] x86/speculation/mds: Make mds_idle_clear forceful Valentin Schneider
2024-11-19 15:34 ` [RFC PATCH v3 08/15] sched/clock, x86: Make __sched_clock_stable forceful Valentin Schneider
2024-11-20 14:59   ` Peter Zijlstra
2024-11-20 16:34     ` Valentin Schneider
2024-11-21 11:02       ` Peter Zijlstra
2024-11-19 15:34 ` [RFC PATCH v3 09/15] objtool: Warn about non __ro_after_init static key usage in .noinstr Valentin Schneider
2024-11-20 17:13   ` Josh Poimboeuf
2024-11-19 15:34 ` Valentin Schneider [this message]
2024-11-19 15:34 ` [RFC PATCH v3 11/15] context-tracking: Introduce work deferral infrastructure Valentin Schneider
2024-11-20 10:54   ` Frederic Weisbecker
2024-11-20 14:23     ` Frederic Weisbecker
2024-11-20 17:10       ` Valentin Schneider
2024-11-20 17:30         ` Frederic Weisbecker
2024-11-22 14:56           ` Valentin Schneider
2024-11-24 21:46             ` Frederic Weisbecker
2024-11-29 16:40               ` Valentin Schneider
2024-11-29 22:19                 ` Frederic Weisbecker
2024-11-19 15:34 ` [RFC PATCH v3 12/15] context_tracking,x86: Defer kernel text patching IPIs Valentin Schneider
2024-11-20 15:13   ` Peter Zijlstra
2024-11-19 15:35 ` [RFC PATCH v3 13/15] context_tracking,x86: Add infrastructure to defer kernel TLBI Valentin Schneider
2024-11-20 15:22   ` Peter Zijlstra
2024-11-20 15:32     ` Peter Zijlstra
2024-11-20 17:24       ` Valentin Schneider
2024-11-21 11:12         ` Peter Zijlstra
2024-11-21 15:07           ` Dave Hansen
2024-11-21 15:30             ` Peter Zijlstra
2024-12-05 17:31               ` Petr Tesarik
2024-12-09 12:04                 ` Valentin Schneider
2024-12-09 12:12                   ` Peter Zijlstra
2024-12-09 14:42                     ` Petr Tesarik
2024-12-10 13:53                       ` Valentin Schneider
2024-12-10 14:42                         ` Petr Tesarik
2024-12-09 12:33                   ` Petr Tesarik
2024-11-21 16:26   ` Peter Zijlstra
2024-11-19 15:35 ` [RFC PATCH v3 14/15] x86/mm, mm/vmalloc: Defer flush_tlb_kernel_range() targeting NOHZ_FULL CPUs Valentin Schneider
2024-11-19 15:35 ` [RFC PATCH v3 15/15] context-tracking: Add a Kconfig to enable IPI deferral for NO_HZ_IDLE Valentin Schneider
2024-11-19 16:45 ` [RFC PATCH v3 00/15] context_tracking,x86: Defer some IPIs until a user->kernel transition Steven Rostedt
2024-11-19 22:51   ` Valentin Schneider

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=20241119153502.41361-11-vschneid@redhat.com \
    --to=vschneid@redhat.com \
    --cc=Jason@zx2c4.com \
    --cc=akpm@linux-foundation.org \
    --cc=ardb@kernel.org \
    --cc=boqun.feng@gmail.com \
    --cc=bp@alien8.de \
    --cc=bpf@vger.kernel.org \
    --cc=corbet@lwn.net \
    --cc=dave.hansen@linux.intel.com \
    --cc=dionnaglaze@google.com \
    --cc=dwagner@suse.de \
    --cc=error27@gmail.com \
    --cc=frederic@kernel.org \
    --cc=hch@infradead.org \
    --cc=hpa@zytor.com \
    --cc=jbaron@akamai.com \
    --cc=jiangshanlai@gmail.com \
    --cc=joel@joelfernandes.org \
    --cc=josh@joshtriplett.org \
    --cc=jpoimboe@kernel.org \
    --cc=juerg.haefliger@canonical.com \
    --cc=julian.pidancet@oracle.com \
    --cc=juri.lelli@redhat.com \
    --cc=keescook@chromium.org \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux@weissschuh.net \
    --cc=lstoakes@gmail.com \
    --cc=luto@kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mhiramat@kernel.org \
    --cc=mingo@redhat.com \
    --cc=mtosatti@redhat.com \
    --cc=namit@vmware.com \
    --cc=nashuiliang@gmail.com \
    --cc=npiggin@gmail.com \
    --cc=nsaenz@kernel.org \
    --cc=paulmck@kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=peterz@infradead.org \
    --cc=pmladek@suse.com \
    --cc=ptesarik@suse.com \
    --cc=qiang.zhang1211@gmail.com \
    --cc=quic_neeraju@quicinc.com \
    --cc=rcu@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=samitolvanen@google.com \
    --cc=song@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=thomas.lendacky@amd.com \
    --cc=urezki@gmail.com \
    --cc=vkuznets@redhat.com \
    --cc=wanpengli@tencent.com \
    --cc=x86@kernel.org \
    --cc=yangjihong1@huawei.com \
    --cc=ypodemsk@redhat.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.