mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v2 0/2] sched/deadline: Fix zero-CPU DL bandwidth handling
@ 2026-09-19 15:31 Hui Su
  2026-09-19 15:31 ` [PATCH v2 1/2] sched/deadline: Fix divide-by-zero in DL bandwidth accounting Hui Su
  2026-09-19 15:31 ` [PATCH v2 2/2] sched/deadline: Reject debugfs dl_server writes for inactive CPUs Hui Su
  0 siblings, 2 replies; 5+ messages in thread
From: Hui Su @ 2026-09-19 15:31 UTC (permalink / raw)
  To: Ingo Molnar, Peter Zijlstra, Juri Lelli, Vincent Guittot,
	Mikhail Zaslonko
  Cc: Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman,
	Valentin Schneider, K Prateek Nayak, Luca Abeni,
	Daniel Bristot de Oliveira, linux-kernel

During CPU hot-unplug, a CPU is removed from cpu_active_mask before it
becomes offline. If it is the last active CPU in a root domain,
dl_bw_cpus() can therefore return zero while paths associated with the CPU
are still reachable.

v1 addressed this in the DL server parameter-update path. Mikhail Zaslonko
reported the same divide-by-zero on s390x through sched_setscheduler(),
showing that the problem is more general, and pointed out several other
callers of __dl_sub() and __dl_add().

This version moves the zero-CPU handling into those common helpers. The
debugfs cpu_active() check is kept as a separate follow-up because it
completes the offline-CPU check added by 4043f5498416, while the generic
helper issue dates back much further. Keeping them separate also gives the
two fixes the appropriate stable backport scopes.

Patch 1 fixes the generic divide-by-zero while retaining the existing
total_bw update when no active CPU remains.

Patch 2 rejects per-CPU DL server debugfs writes once the CPU becomes
inactive instead of waiting until it is fully offline.

Validation on x86_64 included:
- cpus=0/1/2/4 DL bandwidth accounting
- targeted task_non_contending() and inactive_task_timer() zero-CPU paths
- 100 root-domain rebuild/offline-online cycles with accounting checks
- 200 cross-root-domain SCHED_DEADLINE cpuset moves
- SCHED_FLAG_RECLAIM policy transitions
- concurrent SCHED_DEADLINE/SCHED_OTHER transitions and CPU hotplug
- 100 CPU hotplug/debugfs update cycles
- A/B validation of the inactive-but-online debugfs window: the write was
  accepted and changed runtime with patch 1 only, but was rejected and left
  runtime unchanged with both patches

The final series was also built and boot-smoke-tested from its exact HEAD.

Changes since v1:
- Handle cpus == 0 in __dl_sub() and __dl_add(), as suggested by Mikhail.
- Split the generic bandwidth fix from the DL server debugfs check.
- Add the s390x sched_setscheduler() report.
- Extend validation to the other DL bandwidth paths and accounting cases.

Hui Su (2):
  sched/deadline: Fix divide-by-zero in DL bandwidth accounting
  sched/deadline: Reject debugfs dl_server writes for inactive CPUs

 kernel/sched/deadline.c | 6 ++++--
 kernel/sched/debug.c    | 2 +-
 2 files changed, 5 insertions(+), 3 deletions(-)


base-commit: f259f446f5198d98e13756d2cd531812a0ad3064
-- 
2.55.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-09-22 12:30 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-19 15:31 [PATCH v2 0/2] sched/deadline: Fix zero-CPU DL bandwidth handling Hui Su
2026-09-19 15:31 ` [PATCH v2 1/2] sched/deadline: Fix divide-by-zero in DL bandwidth accounting Hui Su
2026-09-22 12:29   ` Juri Lelli
2026-09-19 15:31 ` [PATCH v2 2/2] sched/deadline: Reject debugfs dl_server writes for inactive CPUs Hui Su
2026-09-22 12:30   ` Juri Lelli

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®