From: Shrikanth Hegde <sshegde@linux.ibm.com>
To: Dietmar Eggemann <dietmar.eggemann@arm.com>,
linux-kernel@vger.kernel.org, mingo@kernel.org,
peterz@infradead.org, juri.lelli@redhat.com,
vincent.guittot@linaro.org, yury.norov@gmail.com,
kprateek.nayak@amd.com, iii@linux.ibm.com, corbet@lwn.net,
meted@linux.ibm.com, ynorov@nvidia.com
Cc: tglx@kernel.org, gregkh@linuxfoundation.org, pbonzini@redhat.com,
seanjc@google.com, vschneid@redhat.com, huschle@linux.ibm.com,
rostedt@goodmis.org, maddy@linux.ibm.com, srikar@linux.ibm.com,
hdanton@sina.com, chleroy@kernel.org, vineeth@bitbyteword.org,
frederic@kernel.org, arighi@nvidia.com, pauld@redhat.com,
christian.loehle@arm.com, tj@kernel.org,
tommaso.cucinotta@gmail.com, maz@kernel.org, rafael@kernel.org,
rdunlap@infradead.org, kernellwp@gmail.com,
linux-doc@vger.kernel.org, jgross@suse.com,
virtualization@lists.linux.dev,
"Ionut Nechita (Sunlight Linux)" <sunlightlinux@gmail.com>
Subject: Re: [PATCH v10 00/12] sched, steal_governor: Introduce preferred CPUs and steal-driven vCPU backoff
Date: Thu, 27 Aug 2026 19:06:23 +0530 [thread overview]
Message-ID: <0a62143d-6d8d-46a4-ac92-f8ca7268e555@linux.ibm.com> (raw)
In-Reply-To: <2e1085f1-82f2-42dc-ae72-0bedffb414f3@arm.com>
On 8/27/26 4:20 PM, Dietmar Eggemann wrote:
> Hi Shrikanth,
>
Hi Dietmar. Thanks for checking it.
> On 17.08.26 09:39, Shrikanth Hegde wrote:
>> Hi.
>>
>> In addition to what's currently planned for v11 which was posted here,
>> https://lore.kernel.org/all/895a058a-475e-42ca-
>> a7a3-2c854598eea4@linux.ibm.com/
>>
>> I was going through sashiko's comments at:
>> https://sashiko.dev/#/patchset/20260812054033.95658-1-
>> sshegde%40linux.ibm.com
>> This has revealed some gaps. Thanks to some really nice insights too.
>> Report quality improving day by day!
>>
>>
>> Vincent, Dietmar, please check the 32-bit task issue fix on ARM64.
>
> See below.
>
>> On 8/12/26 11:10 AM, Shrikanth Hegde wrote:
>
> [...]
>
>> Issue1: Possible crash on 32-bit tasks on ARM64.
>> =======
>>>> +static inline bool task_can_sched_on_preferred(int cpu, struct
>>>> task_struct *p)
>>>> +{
>>>> + if (cpu_preferred(cpu))
>>>> + return false;
>>>> +
>>>> + /* Only FAIR tasks honor preferred CPU state */
>>>> + if (unlikely(p->sched_class != &fair_sched_class))
>>>> + return false;
>>>> +
>>>> + return cpumask_intersects(p->cpus_ptr, cpu_preferred_mask);
>>>> +}
>>> Does this intersection check need to account for the architectural CPU
>>> mask?
>>> On asymmetric systems, 32-bit tasks are architecturally restricted by
>>> task_cpu_possible_mask(). If a 32-bit task's mask intersects with
>>> 64-bit-only preferred CPUs, this function might return true, causing
>>> is_cpu_allowed() to falsely return false for valid 32-bit non-
>>> preferred CPUs.
>>> Since 64-bit CPUs are rightfully rejected by task_allowed_on_cpu(),
>>> all CPUs
>>> end up rejected. Could this regression cause the select_fallback_rq()
>>> loop
>>> to exhaust all options and hit the BUG() case for 32-bit tasks?
>>
>> Fix:
>> ====
>> I wasn;t aware of this case, thanks to sashiko for bring it up.
>> Yes, it could potentially cause a BUG in select_fallback_rq.
>>
>> Do a simple check if mask differ from possible mask which indicates we
>> are on 32-bit task on 64 bit
>> kernel. Do the below. I think that should solve it.
>>
>> static inline bool task_can_sched_on_preferred(int cpu, struct
>> task_struct *p)
>> {
>> + const struct cpumask *valid_mask;
>> + int i;
>> [...]
>> + valid_mask = task_cpu_possible_mask(p);
>> + if (likely(valid_mask == cpu_possible_mask))
>> + return cpumask_intersects(p->cpus_ptr, cpu_preferred_mask);
>> +
>> + /* 32-bit task */
>> + for_each_cpu_and(i, p->cpus_ptr, cpu_preferred_mask) {
>> + if (cpumask_test_cpu(i, valid_mask))
>> + return true;
>> + }
>
> I assume the question is whether task_can_sched_on_preferred() would
> have to be changed:
>
> - return cpumask_intersects(p->cpus_ptr, cpu_preferred_mask);
> + return cpumask_first_and_and(p->cpus_ptr, cpu_preferred_mask,
> + task_cpu_possible_mask(p)) < nr_cpu_ids;
>> so that cpu_preferred_mask can play together nicely with the 'asymmetric
> AArch32 EL0 (executing 32-bit Arm userspace under an AArch64 kernel)
> support' feature on some mobile Arm64 Socs.
>
> IMHO, this is not necessary since for those tasks p->cpus_ptr is always
> a subset of task_cpu_possible_mask(p). 'p->cpus_ptr ∩
> cpu_preferred_mask' already cannot contain an architecturally impossible
> CPU for those 32-bit Arm userspace tasks.
>
> [...]
>
Based on the report, I thought there maybe cases where p->cpus_ptr may contain.
Specifically after looking at:
static inline bool task_allowed_on_cpu(struct task_struct *p, int cpu)
{
/* When not in the task's cpumask, no point in looking further. */
if (!cpumask_test_cpu(cpu, p->cpus_ptr))
return false;
/* Can @cpu run a user thread? */
if (!(p->flags & PF_KTHREAD) && !task_cpu_possible(cpu, p))
return false;
return true;
}
If p->cpus_ptr is cannot contain an architecturally impossible, then check for
task_cpu_possible again is necessary? I thought there may be cases.
So i kept the defensive check not to fall into BUG later on.
If you think cpumask_intersects(p->cpus_ptr, cpu_preferred_mask) is sufficient and cover
all cases of 32 bit tasks, then i can drop that v11 change specific to 32-bit tasks.
What do you suggest?
next prev parent reply other threads:[~2026-08-27 13:37 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-12 5:40 [PATCH v10 00/12] sched, steal_governor: Introduce preferred CPUs and steal-driven vCPU backoff Shrikanth Hegde
2026-08-12 5:40 ` [PATCH v10 01/12] sched/cputime: Add kcpustat_field_total helper Shrikanth Hegde
2026-08-12 18:44 ` Yury Norov
2026-08-14 9:04 ` Mete Durlu
2026-08-12 5:40 ` [PATCH v10 02/12] sched/docs: Document cpu_preferred_mask and Preferred CPU concept Shrikanth Hegde
2026-08-12 5:40 ` [PATCH v10 03/12] cpumask: Introduce cpu_preferred_mask Shrikanth Hegde
2026-08-12 5:40 ` [PATCH v10 04/12] sysfs: Add preferred CPU file Shrikanth Hegde
2026-08-12 5:40 ` [PATCH v10 05/12] sched/core: Try to use a preferred CPU in is_cpu_allowed Shrikanth Hegde
2026-08-12 5:40 ` [PATCH v10 06/12] sched/fair: Load balance only among preferred CPUs Shrikanth Hegde
2026-08-12 5:40 ` [PATCH v10 07/12] sched/core: Push current task from non preferred CPU Shrikanth Hegde
2026-08-12 5:40 ` [PATCH v10 08/12] sched/debug: Add migration stats due to non preferred CPUs Shrikanth Hegde
2026-08-12 5:40 ` [PATCH v10 09/12] virt: Introduce steal governor driver Shrikanth Hegde
2026-08-12 5:40 ` [PATCH v10 10/12] virt/steal_governor: Add control knobs for handling steal values Shrikanth Hegde
2026-08-12 5:40 ` [PATCH v10 11/12] virt/steal_governor: Implement steal_governor policy loop Shrikanth Hegde
2026-08-12 5:40 ` [PATCH v10 12/12] virt/steal_governor: Enable the driver Shrikanth Hegde
2026-08-12 19:45 ` [PATCH] Re: [PATCH v10 00/12] sched, steal_governor: Introduce preferred CPUs and steal-driven vCPU backoff Ionut Nechita (Sunlight Linux)
2026-08-13 0:13 ` Yury Norov
2026-08-13 6:50 ` Mete Durlu
2026-08-13 11:12 ` Shrikanth Hegde
2026-08-14 9:22 ` Mete Durlu
2026-08-14 11:08 ` Shrikanth Hegde
2026-08-13 10:56 ` Shrikanth Hegde
2026-08-17 7:39 ` Shrikanth Hegde
2026-08-27 10:50 ` Dietmar Eggemann
2026-08-27 13:36 ` Shrikanth Hegde [this message]
2026-08-21 22:27 ` Yury Norov
2026-08-22 4:11 ` Shrikanth Hegde
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=0a62143d-6d8d-46a4-ac92-f8ca7268e555@linux.ibm.com \
--to=sshegde@linux.ibm.com \
--cc=arighi@nvidia.com \
--cc=chleroy@kernel.org \
--cc=christian.loehle@arm.com \
--cc=corbet@lwn.net \
--cc=dietmar.eggemann@arm.com \
--cc=frederic@kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=hdanton@sina.com \
--cc=huschle@linux.ibm.com \
--cc=iii@linux.ibm.com \
--cc=jgross@suse.com \
--cc=juri.lelli@redhat.com \
--cc=kernellwp@gmail.com \
--cc=kprateek.nayak@amd.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maddy@linux.ibm.com \
--cc=maz@kernel.org \
--cc=meted@linux.ibm.com \
--cc=mingo@kernel.org \
--cc=pauld@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=rafael@kernel.org \
--cc=rdunlap@infradead.org \
--cc=rostedt@goodmis.org \
--cc=seanjc@google.com \
--cc=srikar@linux.ibm.com \
--cc=sunlightlinux@gmail.com \
--cc=tglx@kernel.org \
--cc=tj@kernel.org \
--cc=tommaso.cucinotta@gmail.com \
--cc=vincent.guittot@linaro.org \
--cc=vineeth@bitbyteword.org \
--cc=virtualization@lists.linux.dev \
--cc=vschneid@redhat.com \
--cc=ynorov@nvidia.com \
--cc=yury.norov@gmail.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.