From: Sean Christopherson <seanjc@google.com>
To: Dan Carpenter <dan.carpenter@linaro.org>
Cc: kvm@vger.kernel.org, "Yafang Shao" <laoar.shao@gmail.com>,
"Peter Zijlstra" <peterz@infradead.org>,
"Michal Koutný" <mkoutny@suse.com>,
"Vincent Guittot" <vincent.guittot@linaro.org>
Subject: Re: [bug report] KVM: x86: Unify TSC logic (sleeping in atomic?)
Date: Fri, 17 Jan 2025 09:51:41 -0800 [thread overview]
Message-ID: <Z4qYrXJ4YtvpNztT@google.com> (raw)
In-Reply-To: <37a79ba3-9ce0-479c-a5b0-2bd75d573ed3@stanley.mountain>
+sched folks
On Fri, Jan 17, 2025, Dan Carpenter wrote:
> I don't know why I'm seeing this static checker warning only now. All
> this code looks to be about 15 years old...
>
> Commit e48672fa25e8 ("KVM: x86: Unify TSC logic") from Aug 19, 2010
> (linux-next), leads to the following Smatch static checker warning:
That's not the problematic commit. This popped because commit 8722903cbb8f
("sched: Define sched_clock_irqtime as static key") in the tip tree turned
sched_clock_irqtime into a static key (it was a simple "int").
https://lore.kernel.org/all/20250103022409.2544-2-laoar.shao@gmail.com
> arch/x86/kernel/tsc.c:1214 mark_tsc_unstable()
> warn: sleeping in atomic context
>
> The code path is:
>
> vcpu_load() <- disables preempt
> -> kvm_arch_vcpu_load()
> -> mark_tsc_unstable() <- sleeps
>
> virt/kvm/kvm_main.c
> 166 void vcpu_load(struct kvm_vcpu *vcpu)
> 167 {
> 168 int cpu = get_cpu();
> ^^^^^^^^^^
> This get_cpu() disables preemption.
>
> 169
> 170 __this_cpu_write(kvm_running_vcpu, vcpu);
> 171 preempt_notifier_register(&vcpu->preempt_notifier);
> 172 kvm_arch_vcpu_load(vcpu, cpu);
> 173 put_cpu();
> 174 }
>
> arch/x86/kvm/x86.c
> 4979 if (unlikely(vcpu->cpu != cpu) || kvm_check_tsc_unstable()) {
> 4980 s64 tsc_delta = !vcpu->arch.last_host_tsc ? 0 :
> 4981 rdtsc() - vcpu->arch.last_host_tsc;
> 4982 if (tsc_delta < 0)
> 4983 mark_tsc_unstable("KVM discovered backwards TSC");
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> It seems pretty unlikely that we'll get a backwards tsc.
TSC will go "backwards" if the host is suspended, in which case host TSC gets
reset to 0.
> 1215 pr_info("Marking TSC unstable due to %s\n", reason);
> 1216
> 1217 clocksource_mark_unstable(&clocksource_tsc_early);
> 1218 clocksource_mark_unstable(&clocksource_tsc);
> 1219 }
>
> kernel/jump_label.c
> 245 void static_key_disable(struct static_key *key)
> 246 {
> 247 cpus_read_lock();
> ^^^^^^^^^^^^^^^^
> This lock has a might_sleep() in it which triggers the static checker
> warning.
>
> 248 static_key_disable_cpuslocked(key);
> 249 cpus_read_unlock();
> 250 }
>
> regards,
> dan carpenter
next prev parent reply other threads:[~2025-01-17 17:51 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-17 6:08 [bug report] KVM: x86: Unify TSC logic (sleeping in atomic?) Dan Carpenter
2025-01-17 17:51 ` Sean Christopherson [this message]
2025-01-24 10:34 ` Michal Koutný
2025-01-24 15:36 ` Sean Christopherson
2025-01-26 2:16 ` Yafang Shao
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=Z4qYrXJ4YtvpNztT@google.com \
--to=seanjc@google.com \
--cc=dan.carpenter@linaro.org \
--cc=kvm@vger.kernel.org \
--cc=laoar.shao@gmail.com \
--cc=mkoutny@suse.com \
--cc=peterz@infradead.org \
--cc=vincent.guittot@linaro.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox