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 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.