Thread (45 messages) 45 messages, 6 authors, 2011-12-22

Re: [PATCH 2/5 V5] Add functions to check if the host has stopped the vm

From: Eric B Munson <hidden>
Date: 2011-12-08 15:23:14
Also in: kvm, lkml

On Wed, 07 Dec 2011, Avi Kivity wrote:
On 12/05/2011 10:19 PM, Eric B Munson wrote:
quoted
When a host stops or suspends a VM it will set a flag to show this.  The
watchdog will use these functions to determine if a softlockup is real, or the
result of a suspended VM.
 
+bool kvm_check_and_clear_guest_paused(int cpu)
+{
+	bool ret = false;
+	struct pvclock_vcpu_time_info *src;
+
+	/*
+	 * per_cpu() is safe here because this function is only called from
+	 * timer functions where preemption is already disabled.
+	 */
+	WARN_ON(!in_atomic());
+	src = &per_cpu(hv_clock, cpu);
__get_cpu_var(); drop the cpu argument
Will change for V6.
quoted
+	if ((src->flags & PVCLOCK_GUEST_STOPPED) != 0) {
+		src->flags = src->flags & (~PVCLOCK_GUEST_STOPPED);
Isn't this racy?  Between reading and writing src->flags, we can exit to
the hypervisor and add/remove new flags.  The write then overrides those
new flags.
If I understand (please correct me if this is wrong) because this is only
called from the watchdog, which disables preemption, we should be protected
from something else writing to these flags.
quoted
+		ret = true;
+	}
+
+	return ret;
+}
+EXPORT_SYMBOL_GPL(kvm_check_and_clear_guest_paused);
+
 static struct clocksource kvm_clock = {
 	.name = "kvm-clock",
 	.read = kvm_clock_get_cycles,

-- 
error compiling committee.c: too many arguments to function

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help