Bug 2037769
Summary: | Softirq hrtimers are being placed on the per-CPU softirq clocks on isolcpu’s. | |||
---|---|---|---|---|
Product: | Red Hat Enterprise Linux 8 | Reporter: | vlovejoy | |
Component: | kernel-rt | Assignee: | Clark Williams <williams> | |
kernel-rt sub component: | Core-Kernel | QA Contact: | Qiao Zhao <qzhao> | |
Status: | CLOSED ERRATA | Docs Contact: | ||
Severity: | urgent | |||
Priority: | urgent | CC: | bhu, jlelli, jwyatt, kcarcia, mstowell, mtosatti, qzhao, rt-qe, saime, soakley, williams | |
Version: | 8.4 | Keywords: | TestOnly, Triaged | |
Target Milestone: | rc | |||
Target Release: | --- | |||
Hardware: | x86_64 | |||
OS: | Linux | |||
Whiteboard: | ||||
Fixed In Version: | kernel-rt-4.18.0-391.rt7.176.el8 | Doc Type: | If docs needed, set a value | |
Doc Text: | Story Points: | --- | ||
Clone Of: | ||||
: | 2071776 (view as bug list) | Environment: | ||
Last Closed: | 2022-11-08 09:10:42 UTC | Type: | Bug | |
Regression: | --- | Mount Type: | --- | |
Documentation: | --- | CRM: | ||
Verified Versions: | Category: | --- | ||
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | ||
Cloudforms Team: | --- | Target Upstream Version: | ||
Embargoed: | ||||
Bug Depends On: | 2071776 | |||
Bug Blocks: | 2045902 | |||
Deadline: | 2022-06-13 |
Description
vlovejoy
2022-01-06 14:24:08 UTC
As I see the path when setting the timer it goes. hrtimer_nanosleep()-> do_nanosleep()-> hrtimer_sleeper_start_expires()-> hrtimer_start_expires()-> hrtimer_start_range_ns()-> __hrtimer_start_range_ns() 1095 static int __hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim, 1096 u64 delta_ns, const enum hrtimer_mode mode, 1097 struct hrtimer_clock_base *base) 1098 { . . . 1111 /* Switch the timer base, if necessary: */ 1112 new_base = switch_hrtimer_base(timer, base, mode & HRTIMER_MODE_PINNED); <--- base is decided here 1113 1114 return enqueue_hrtimer(timer, new_base, mode); <--- 235 switch_hrtimer_base(struct hrtimer *timer, struct hrtimer_clock_base *base, 236 int pinned) 237 { 238 struct hrtimer_cpu_base *new_cpu_base, *this_cpu_base; 239 struct hrtimer_clock_base *new_base; 240 int basenum = base->index; 241 242 this_cpu_base = this_cpu_ptr(&hrtimer_bases); 243 new_cpu_base = get_target_base(this_cpu_base, pinned); <---- If sysctl kernel.timer_migration=0 the get_target_base() returns this_cpu_base to new_cpu_base for both RT task and non RT task. 211 static inline 212 struct hrtimer_cpu_base *get_target_base(struct hrtimer_cpu_base *base, 213 int pinned) 214 { 215 #if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ_COMMON) 216 if (static_branch_likely(&timers_migration_enabled) && !pinned) <-- 217 return &per_cpu(hrtimer_bases, get_nohz_timer_target()); <-- call if not pinned/ not rt 218 #endif 219 return base; If it was off then we would see the hrtimer placed on the isolcpu timer list just like we see in the dumps. But kernel.timer_migration is on in the dumps. Not sure if it applies. Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory (Moderate: kernel-rt security and bug fix update), and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHSA-2022:7444 |