From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qk1-f172.google.com (mail-qk1-f172.google.com [209.85.222.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7F8EC2D73B5 for ; Mon, 9 Mar 2026 17:48:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773078482; cv=none; b=fVSMmwjblzLAurS0nBV3/rSABjX0B7nlLwcvvAvgQtf0vA5qu/OH4aW5CKsjaUIgOZThl84VoUcak3olkBVtkZGC39hqo9aDO/DwqdB+pEDIA9WHWK1UZ1ieOQk10/phEmNWDouvrv3P33zRCNqW9GeOhU7po2PRRSAlks50Gt0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773078482; c=relaxed/simple; bh=AK+k1qV3vUGgBkhUMtURpvua9TmtQZljosk/cXxx0bc=; h=Mime-Version:Content-Type:Date:Message-Id:Cc:Subject:From:To: References:In-Reply-To; b=bsZsr2bCvKvi+QsvjADW6VUOolumA2hJX7glNnRPn1yspdxmDtNANsSMVHCT0l3tawMeFSmijLvvbHXKsyvUoGvXZIeSB6FJuOa9Dx110jZg/+jmfKInadqQSp+q0bijm0pRzfdRrYIM8oojvvJrYUwuShRVUxNakaq7na45b/Q= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=etsalapatis.com; spf=pass smtp.mailfrom=etsalapatis.com; dkim=pass (2048-bit key) header.d=etsalapatis-com.20230601.gappssmtp.com header.i=@etsalapatis-com.20230601.gappssmtp.com header.b=npJK5pt/; arc=none smtp.client-ip=209.85.222.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=etsalapatis.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=etsalapatis.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=etsalapatis-com.20230601.gappssmtp.com header.i=@etsalapatis-com.20230601.gappssmtp.com header.b="npJK5pt/" Received: by mail-qk1-f172.google.com with SMTP id af79cd13be357-8cd79e43da3so203183685a.1 for ; Mon, 09 Mar 2026 10:48:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=etsalapatis-com.20230601.gappssmtp.com; s=20230601; t=1773078480; x=1773683280; darn=vger.kernel.org; h=in-reply-to:references:to:from:subject:cc:message-id:date :content-transfer-encoding:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=wCKTTr+L1FYL8d5Z4Ne3jyr/o8eaoC3+JTEqsPyvFTo=; b=npJK5pt/mYHggFFQ0WKlNt3YAa0P4KC2bCoEfLp29vAB1qHtvQBCYqiGIAWnZXzIic 71dPi/H8qvWRGDY+2hDo5f9WgkeBUZx4sUui1yWAZSbiJMpKmWkgn8h/d4lmZuk8ZFyr sHtuEH2CJTK5w2xi7cYsq7rcoCZFVP/ck/OyqMUqxfzGFC1tGzMtZQt/qTlcjYanBL2l GwHC9prMLpgtp1aY1z+L2EX8sBkHiJQlpG0RcELWw4Dow0ByBw+rAspdVf/2nnwThtjx 9Ngj29EXHo3RB9wHzyV6elNZHCuyWKMpbj2jkD2q6B3VSDmQ1FFDYRwjQOkW83D4Vt32 jMMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773078480; x=1773683280; h=in-reply-to:references:to:from:subject:cc:message-id:date :content-transfer-encoding:mime-version:x-gm-gg:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=wCKTTr+L1FYL8d5Z4Ne3jyr/o8eaoC3+JTEqsPyvFTo=; b=k6T4lUDGbb9aF5mDu9L5Ps0mPi08wtGnfJx7kENiLPWv43KbHrFC8cxgivbiSePZJo 1zQRxqPbEkvwsT+jpziiKk8OfxNXEYQvJP4N/Njo09XVX+FE1hNLpDKxZIiK+OANt8Nw jGjFkn8C7YmDyVb+piGxcU4UKlzjVT+7PYRK8ep48v60gh94aJcU9S8HHWLMCtQ2ed0a 3v+KpVmF3nxyXTtW+F7ukU+cjdv2M1Ac/LcoRijA66gh/F0GVL4M4/5gAMF/XbSnhrRQ tgRNg1ldjertpF7+W6BSmvBwE8iYxQe+EzgdtMMAj+i7EyUTCPy+hM2F88Uw1N1lPYH1 YKOg== X-Forwarded-Encrypted: i=1; AJvYcCXW5OVF9Zo+l8nZa4zlldzIcp+Gt6uAaxynWgOUniUM2PSCu2bJGwS7ffwwgclHiowps2X1wcaYfQ0tWj8=@vger.kernel.org X-Gm-Message-State: AOJu0YyubpFA+IJ8FZzrMk4y6QJVwJwngPAQ+IUgJXyl67LnfSgGgsXT 0KW5HAjBPU0ks7vKCcLcEH7OfHeM+rrj9QeY5vRWRjyReu9HwAtLMLHTtXvaGadEzJE= X-Gm-Gg: ATEYQzzifTmjMC+h5T4tG29Hc24wuQ2EMm7CbPQZMEQz96KpGYUqxrWX7+CCgnMa3Ar iIwZQa3OykO8E/SXu5nYA+zhkHkA734STkPFDtcUKrYmMs7gtNTZGyaQ1lACZgyFZRoiX70JajZ gmsZ3ZqlzEr0pCe7tAN38wk2B1VbJpjsqEj61e4ZEy2Z5lajTMEAIqaCegfP6WXJtBzvq/MHUQc v10zrWus8dm9ujJFqes9IAGNZLQiyznB54B6WYeHHezya1XqqFmZZJyKxHJl0Dy8vvxuLv68fCr U9KU9vvF/jQUpASnRoxJJUphBUiPbg/jYfcOk7bg3KXivmCXs15fpoWmH4CMliij7fU8z3HYyH4 n0zsC0PTbOjgWwKruSMh4d9fazLKgcTNhyTYjD3FuzQT3o+apuIe3MOt9VJzg+OiJakgFLo8Kfq /ELe2mkB9oJeLFPEkOwTsUpYA= X-Received: by 2002:a05:620a:1723:b0:8cd:8ddd:26a3 with SMTP id af79cd13be357-8cd8ddd2bdbmr373075385a.48.1773078480378; Mon, 09 Mar 2026 10:48:00 -0700 (PDT) Received: from localhost ([140.174.219.137]) by smtp.gmail.com with ESMTPSA id af79cd13be357-8cd8641d344sm276812085a.31.2026.03.09.10.47.59 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 09 Mar 2026 10:48:00 -0700 (PDT) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=UTF-8 Date: Mon, 09 Mar 2026 13:47:58 -0400 Message-Id: Cc: , , Subject: Re: [PATCH 09/15] sched_ext: Add reenq_flags plumbing to scx_bpf_dsq_reenq() From: "Emil Tsalapatis" To: "Tejun Heo" , , X-Mailer: aerc 0.20.1 References: <20260306190623.1076074-1-tj@kernel.org> <20260306190623.1076074-10-tj@kernel.org> In-Reply-To: <20260306190623.1076074-10-tj@kernel.org> On Fri Mar 6, 2026 at 2:06 PM EST, Tejun Heo wrote: > Add infrastructure to pass flags through the deferred reenqueue path. > reenq_local() now takes a reenq_flags parameter, and scx_sched_pcpu gains= a > deferred_reenq_local_flags field to accumulate flags from multiple > scx_bpf_dsq_reenq() calls before processing. No flags are defined yet. > > Signed-off-by: Tejun Heo Reviewed-by: Emil Tsalapatis > --- > kernel/sched/ext.c | 33 ++++++++++++++++++++++++++++----- > kernel/sched/ext_internal.h | 10 ++++++++++ > 2 files changed, 38 insertions(+), 5 deletions(-) > > diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c > index b02143b10f0f..c9b0e94d59bd 100644 > --- a/kernel/sched/ext.c > +++ b/kernel/sched/ext.c > @@ -1080,7 +1080,8 @@ static void schedule_deferred_locked(struct rq *rq) > schedule_deferred(rq); > } > =20 > -static void schedule_dsq_reenq(struct scx_sched *sch, struct scx_dispatc= h_q *dsq) > +static void schedule_dsq_reenq(struct scx_sched *sch, struct scx_dispatc= h_q *dsq, > + u64 reenq_flags) > { > /* > * Allowing reenqueues doesn't make sense while bypassing. This also > @@ -1097,6 +1098,7 @@ static void schedule_dsq_reenq(struct scx_sched *sc= h, struct scx_dispatch_q *dsq > scoped_guard (raw_spinlock_irqsave, &rq->scx.deferred_reenq_lock) { > if (list_empty(&drl->node)) > list_move_tail(&drl->node, &rq->scx.deferred_reenq_locals); > + drl->flags |=3D reenq_flags; > } > =20 > schedule_deferred(rq); > @@ -3618,7 +3620,14 @@ int scx_check_setscheduler(struct task_struct *p, = int policy) > return 0; > } > =20 > -static u32 reenq_local(struct scx_sched *sch, struct rq *rq) > +static bool task_should_reenq(struct task_struct *p, u64 reenq_flags) > +{ > + if (reenq_flags & SCX_REENQ_ANY) > + return true; > + return false; Nit: (reenq_flags & SCX_REENQ_ANY) !=3D 0? > +} > + > +static u32 reenq_local(struct scx_sched *sch, struct rq *rq, u64 reenq_f= lags) > { > LIST_HEAD(tasks); > u32 nr_enqueued =3D 0; > @@ -3652,6 +3661,9 @@ static u32 reenq_local(struct scx_sched *sch, struc= t rq *rq) > if (!scx_is_descendant(task_sch, sch)) > continue; > =20 > + if (!task_should_reenq(p, reenq_flags)) > + continue; > + > dispatch_dequeue(rq, p); > list_add_tail(&p->scx.dsq_list.node, &tasks); > } > @@ -3671,6 +3683,7 @@ static void process_deferred_reenq_locals(struct rq= *rq) > =20 > while (true) { > struct scx_sched *sch; > + u64 reenq_flags =3D 0; > =20 > scoped_guard (raw_spinlock, &rq->scx.deferred_reenq_lock) { > struct scx_deferred_reenq_local *drl =3D > @@ -3685,10 +3698,11 @@ static void process_deferred_reenq_locals(struct = rq *rq) > sch_pcpu =3D container_of(drl, struct scx_sched_pcpu, > deferred_reenq_local); > sch =3D sch_pcpu->sch; > + swap(drl->flags, reenq_flags); > list_del_init(&drl->node); > } > =20 > - reenq_local(sch, rq); > + reenq_local(sch, rq, reenq_flags); > } > } > =20 > @@ -7817,7 +7831,7 @@ __bpf_kfunc u32 scx_bpf_reenqueue_local(const struc= t bpf_prog_aux *aux) > rq =3D cpu_rq(smp_processor_id()); > lockdep_assert_rq_held(rq); > =20 > - return reenq_local(sch, rq); > + return reenq_local(sch, rq, 0); > } > =20 > __bpf_kfunc_end_defs(); > @@ -8255,8 +8269,17 @@ __bpf_kfunc void scx_bpf_dsq_reenq(u64 dsq_id, u64= reenq_flags, > if (unlikely(!sch)) > return; > =20 > + if (unlikely(reenq_flags & ~__SCX_REENQ_USER_MASK)) { > + scx_error(sch, "invalid SCX_REENQ flags 0x%llx", reenq_flags); > + return; > + } > + > + /* not specifying any filter bits is the same as %SCX_REENQ_ANY */ > + if (!(reenq_flags & __SCX_REENQ_FILTER_MASK)) > + reenq_flags |=3D SCX_REENQ_ANY; > + > dsq =3D find_dsq_for_dispatch(sch, this_rq(), dsq_id, smp_processor_id(= )); > - schedule_dsq_reenq(sch, dsq); > + schedule_dsq_reenq(sch, dsq, reenq_flags); > } > =20 > /** > diff --git a/kernel/sched/ext_internal.h b/kernel/sched/ext_internal.h > index 1a8d61097cab..d9eda2e8701c 100644 > --- a/kernel/sched/ext_internal.h > +++ b/kernel/sched/ext_internal.h > @@ -956,6 +956,7 @@ struct scx_dsp_ctx { > =20 > struct scx_deferred_reenq_local { > struct list_head node; > + u64 flags; > }; > =20 > struct scx_sched_pcpu { > @@ -1128,6 +1129,15 @@ enum scx_deq_flags { > SCX_DEQ_SCHED_CHANGE =3D 1LLU << 33, > }; > =20 > +enum scx_reenq_flags { > + /* low 16bits determine which tasks should be reenqueued */ > + SCX_REENQ_ANY =3D 1LLU << 0, /* all tasks */ > + > + __SCX_REENQ_FILTER_MASK =3D 0xffffLLU, > + > + __SCX_REENQ_USER_MASK =3D SCX_REENQ_ANY, > +}; > + > enum scx_pick_idle_cpu_flags { > SCX_PICK_IDLE_CORE =3D 1LLU << 0, /* pick a CPU whose SMT siblings are = also idle */ > SCX_PICK_IDLE_IN_NODE =3D 1LLU << 1, /* pick a CPU in the same target N= UMA node */