Thread (15 messages) 15 messages, 3 authors, 2012-07-26

RE: [PATCH 2/2 v5] KVM: PPC: booke: Add watchdog emulation

From: Bhushan Bharat-R65777 <hidden>
Date: 2012-07-23 04:10:50

-----Original Message-----
From: Wood Scott-B07421
Sent: Saturday, July 21, 2012 2:59 AM
To: Bhushan Bharat-R65777
Cc: kvm-ppc@vger.kernel.org; kvm@vger.kernel.org; agraf@suse.de; Bhushan Bharat-
R65777
Subject: Re: [PATCH 2/2 v5] KVM: PPC: booke: Add watchdog emulation

On 07/20/2012 12:00 AM, Bharat Bhushan wrote:
quoted
This patch adds the watchdog emulation in KVM. The watchdog emulation
is enabled by KVM_ENABLE_CAP(KVM_CAP_PPC_WDT) ioctl.
The kernel timer are used for watchdog emulation and emulates h/w
watchdog state machine. On watchdog timer expiry, it exit to QEMU if
TCR.WRC is non ZERO. QEMU can reset/shutdown etc depending upon how it
is configured.

Signed-off-by: Liu Yu <redacted>
Signed-off-by: Scott Wood <redacted>
Signed-off-by: Bharat Bhushan <redacted>
[bharat.bhushan@freescale.com: reworked patch]
Typically the [] note goes immediately before your signoff (but after the
others).
quoted
+static void arm_next_watchdog(struct kvm_vcpu *vcpu) {
+	unsigned long nr_jiffies;
+
+	spin_lock(&vcpu->arch.wdt_lock);
+	nr_jiffies = watchdog_next_timeout(vcpu);
+	/*
+	 * If the number of jiffies of watchdog timer >= NEXT_TIMER_MAX_DELTA
+	 * then do not run the watchdog timer as this can break timer APIs.
+	 */
+	if (nr_jiffies < NEXT_TIMER_MAX_DELTA)
+		mod_timer(&vcpu->arch.wdt_timer, jiffies + nr_jiffies);
+	else
+		del_timer(&vcpu->arch.wdt_timer);
+	spin_unlock(&vcpu->arch.wdt_lock);
+}
This needs to be an irqsave lock.
quoted
@@ -386,13 +387,23 @@ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
#ifdef CONFIG_KVM_EXIT_TIMING
 	mutex_init(&vcpu->arch.exit_timing_lock);
 #endif
-
+#ifdef CONFIG_BOOKE
+	spin_lock_init(&vcpu->arch.wdt_lock);
+	/* setup watchdog timer once */
+	setup_timer(&vcpu->arch.wdt_timer, kvmppc_watchdog_func,
+		    (unsigned long)vcpu);
+#endif
 	return 0;
 }
Can you do this in kvmppc_booke_init()?
I do not think we can do this in kvmppc_booke_init(). Watchdog have association with vcpu, while there is no vcpu at kvmppc_booke_init().

Thanks
-Bharat
quoted
 void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu)  {
 	kvmppc_mmu_destroy(vcpu);
+#ifdef CONFIG_BOOKE
+	spin_lock(&vcpu->arch.wdt_lock);
+	del_timer(&vcpu->arch.wdt_timer);
+	spin_unlock(&vcpu->arch.wdt_lock);
+#endif
 }
Don't acquire the lock here, but use del_timer_sync().

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