All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tejun Heo <tj@kernel.org>
To: David Vernet <void@manifault.com>,
	Andrea Righi <arighi@nvidia.com>,
	Changwoo Min <changwoo@igalia.com>
Cc: sched-ext@lists.linux.dev, linux-kernel@vger.kernel.org
Subject: [PATCH sched_ext/for-6.19] sched_ext: Fix scx_bpf_dsq_insert() backward binary compatibility
Date: Tue, 21 Oct 2025 06:47:57 -1000	[thread overview]
Message-ID: <c860cc12b4b0da311fa8cbbbe17f8199@kernel.org> (raw)

commit cded46d97159 ("sched_ext: Make scx_bpf_dsq_insert*() return bool")
introduced a new bool-returning scx_bpf_dsq_insert() and renamed the old
void-returning version to scx_bpf_dsq_insert___compat, with the expectation
that libbpf would match old binaries to the ___compat variant, maintaining
backward binary compatibility. However, while libbpf ignores ___suffix on
the BPF side when matching symbols, it doesn't do so for kernel-side
symbols. Old binaries compiled with the original scx_bpf_dsq_insert() could
no longer resolve the symbol.

Fix by reversing the naming: Keep scx_bpf_dsq_insert() as the old
void-returning interface and add ___new to the new bool-returning version.
This allows old binaries to continue working while new code can use the
___new variant. Once libbpf is updated to ignore kernel-side ___suffix, the
___new suffix can be dropped when the compat interface is removed.

Fixes: cded46d97159 ("sched_ext: Make scx_bpf_dsq_insert*() return bool")
Signed-off-by: Tejun Heo <tj@kernel.org>
---
 kernel/sched/ext.c                       |    8 ++++----
 tools/sched_ext/include/scx/compat.bpf.h |    4 ++--
 2 files changed, 6 insertions(+), 6 deletions(-)

--- a/kernel/sched/ext.c
+++ b/kernel/sched/ext.c
@@ -5407,7 +5407,7 @@ __bpf_kfunc_start_defs();
  * scheduler, %false return triggers scheduler abort and the caller doesn't need
  * to check the return value.
  */
-__bpf_kfunc bool scx_bpf_dsq_insert(struct task_struct *p, u64 dsq_id, u64 slice,
+__bpf_kfunc bool scx_bpf_dsq_insert___new(struct task_struct *p, u64 dsq_id, u64 slice,
 				    u64 enq_flags)
 {
 	struct scx_sched *sch;
@@ -5433,10 +5433,10 @@ __bpf_kfunc bool scx_bpf_dsq_insert(stru
 /*
  * COMPAT: Will be removed in v6.23.
  */
-__bpf_kfunc void scx_bpf_dsq_insert___compat(struct task_struct *p, u64 dsq_id,
+__bpf_kfunc void scx_bpf_dsq_insert(struct task_struct *p, u64 dsq_id,
 					     u64 slice, u64 enq_flags)
 {
-	scx_bpf_dsq_insert(p, dsq_id, slice, enq_flags);
+	scx_bpf_dsq_insert___new(p, dsq_id, slice, enq_flags);
 }

 static bool scx_dsq_insert_vtime(struct scx_sched *sch, struct task_struct *p,
@@ -5532,7 +5532,7 @@ __bpf_kfunc_end_defs();

 BTF_KFUNCS_START(scx_kfunc_ids_enqueue_dispatch)
 BTF_ID_FLAGS(func, scx_bpf_dsq_insert, KF_RCU)
-BTF_ID_FLAGS(func, scx_bpf_dsq_insert___compat, KF_RCU)
+BTF_ID_FLAGS(func, scx_bpf_dsq_insert___new, KF_RCU)
 BTF_ID_FLAGS(func, __scx_bpf_dsq_insert_vtime, KF_RCU)
 BTF_ID_FLAGS(func, scx_bpf_dsq_insert_vtime, KF_RCU)
 BTF_KFUNCS_END(scx_kfunc_ids_enqueue_dispatch)
--- a/tools/sched_ext/include/scx/compat.bpf.h
+++ b/tools/sched_ext/include/scx/compat.bpf.h
@@ -239,7 +239,7 @@ scx_bpf_dsq_insert_vtime(struct task_str
  * scx_bpf_dsq_insert() decl to common.bpf.h and drop compat helper after v6.22.
  */
 bool scx_bpf_dsq_insert___new(struct task_struct *p, u64 dsq_id, u64 slice, u64 enq_flags) __ksym __weak;
-void scx_bpf_dsq_insert___compat(struct task_struct *p, u64 dsq_id, u64 slice, u64 enq_flags) __ksym __weak;
+void scx_bpf_dsq_insert___old(struct task_struct *p, u64 dsq_id, u64 slice, u64 enq_flags) __ksym __weak;

 static inline bool
 scx_bpf_dsq_insert(struct task_struct *p, u64 dsq_id, u64 slice, u64 enq_flags)
@@ -247,7 +247,7 @@ scx_bpf_dsq_insert(struct task_struct *p
 	if (bpf_ksym_exists(scx_bpf_dsq_insert___new)) {
 		return scx_bpf_dsq_insert___new(p, dsq_id, slice, enq_flags);
 	} else {
-		scx_bpf_dsq_insert___compat(p, dsq_id, slice, enq_flags);
+		scx_bpf_dsq_insert___old(p, dsq_id, slice, enq_flags);
 		return true;
 	}
 }

             reply	other threads:[~2025-10-21 16:47 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-21 16:47 Tejun Heo [this message]
2025-10-21 20:39 ` [PATCH v2 sched_ext/for-6.19] sched_ext: Fix scx_bpf_dsq_insert() backward binary compatibility Tejun Heo

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=c860cc12b4b0da311fa8cbbbe17f8199@kernel.org \
    --to=tj@kernel.org \
    --cc=arighi@nvidia.com \
    --cc=changwoo@igalia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sched-ext@lists.linux.dev \
    --cc=void@manifault.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.