From: Andrea Righi <arighi@nvidia.com>
To: Hui Su <sh_def@163.com>
Cc: Tejun Heo <tj@kernel.org>, David Vernet <void@manifault.com>,
Changwoo Min <changwoo@igalia.com>,
sched-ext@lists.linux.dev, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] sched_ext: Reject oversized automatic CID shards
Date: Wed, 21 Oct 2026 09:42:54 +0200 [thread overview]
Message-ID: <aths_re-QX5Er4Vq@gpd4> (raw)
In-Reply-To: <20261021064946.1445728-1-sh_def@163.com>
Hi Hui,
On Wed, Oct 21, 2026 at 03:49:46PM +0900, Hui Su wrote:
> Automatic topology packing starts a new shard before adding a core when
> the current shard would exceed its target size. However, a first core is
> always accepted so that cores remain indivisible. An indivisible core with
> more than SCX_CID_SHARD_MAX_CPUS CPUs cannot be represented without
> exceeding the hard shard limit.
>
> Per-shard state uses fixed-size inline cmask storage sized for
> SCX_CID_SHARD_MAX_CPUS. Passing an oversized shard to alloc_pshard() can
> therefore make cmask initialization overwrite the following fields.
>
> Reject an indivisible core larger than SCX_CID_SHARD_MAX_CPUS before adding
> it to a shard. Existing non-empty shard splitting already keeps the total
> within the hard cap, while an indivisible core may still exceed
> cid_shard_size when it fits within the hard limit.
>
> Fixes: e2c841b91bf9 ("sched_ext: Add CID sharding")
> Signed-off-by: Hui Su <sh_def@163.com>
> ---
> kernel/sched/ext/cid.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/kernel/sched/ext/cid.c b/kernel/sched/ext/cid.c
> index 4b08866d75f6..3c38650d78d5 100644
> --- a/kernel/sched/ext/cid.c
> +++ b/kernel/sched/ext/cid.c
> @@ -287,6 +287,9 @@ s32 scx_cid_init(struct scx_sched *sch)
> * empty shard.
> */
> cids_in_core = cpumask_weight(core_scratch);
> + if (cids_in_core > SCX_CID_SHARD_MAX_CPUS)
> + return -E2BIG;
> +
This requires more than 512 SMT siblings in a single core, which doesn't
exist on real hardware, but it's possible to trigger with a synthetic
topology (unlikely in practice, but not impossible).
In fact, I've reproduced this with virtme-ng (and CONFIG_MAXSMP=y):
$ vng --disable-microvm --cpus 600,sockets=1,cores=1,threads=600 -m 4G \
--qemu-opts='-machine q35,kernel-irqchip=split'
Without this patch, loading scx_qmap triggers the WARN_ON_ONCE() in
__scx_cmask_init() and then panics with stack corruption in
scx_bpf_sub_caps(). With this patch, the scheduler is rejected with
-E2BIG.
However, the only thing reported is "scx_root_enable() failed (-7)",
which doesn't say much about what went wrong. Can we report the reason
with scx_error(), similar to what scx_bpf_cid_override() does for
oversized shards? Something like:
if (cids_in_core > SCX_CID_SHARD_MAX_CPUS) {
scx_error(sch, "core with %u cpus exceeds max shard size %d",
cids_in_core, SCX_CID_SHARD_MAX_CPUS);
return -E2BIG;
}
With that addressed, feel free to add:
Reviewed-by: Andrea Righi <arighi@nvidia.com>
Tested-by: Andrea Righi <arighi@nvidia.com>
Thanks,
-Andrea
> max_cores = cores_per_shard + (shard_local < nr_large ? 1 : 0);
> if (cores_in_shard &&
> (cores_in_shard >= max_cores ||
>
>
next prev parent reply other threads:[~2026-10-21 7:43 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-21 6:49 [PATCH] sched_ext: Reject oversized automatic CID shards Hui Su
2026-10-21 7:42 ` Andrea Righi [this message]
2026-10-21 8:36 ` Hui Su
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=aths_re-QX5Er4Vq@gpd4 \
--to=arighi@nvidia.com \
--cc=changwoo@igalia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=sched-ext@lists.linux.dev \
--cc=sh_def@163.com \
--cc=tj@kernel.org \
--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.