On 07/18/2012 06:34 AM, Bharat Bhushan wrote: > diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h > index 4b9e575..64d94da 100644 > --- a/linux-headers/linux/kvm.h > +++ b/linux-headers/linux/kvm.h > @@ -163,6 +163,7 @@ struct kvm_pit_config { > #define KVM_EXIT_OSI 18 > #define KVM_EXIT_PAPR_HCALL 19 > #define KVM_EXIT_S390_UCONTROL 20 > +#define KVM_EXIT_WATCHDOG 21 > > /* For KVM_EXIT_INTERNAL_ERROR */ > #define KVM_INTERNAL_ERROR_EMULATION 1 > @@ -618,6 +619,7 @@ struct kvm_ppc_smmu_info { > #define KVM_CAP_PPC_GET_SMMU_INFO 78 > #define KVM_CAP_S390_COW 79 > #define KVM_CAP_PPC_ALLOC_HTAB 80 > +#define KVM_CAP_PPC_WDT 81 > > #ifdef KVM_CAP_IRQ_ROUTING > linux headers update should be a separate patch. > @@ -371,6 +393,33 @@ static inline void kvm_fixup_page_sizes(CPUPPCState *env) > > #endif /* !defined (TARGET_PPC64) */ > > +static void cpu_state_change_handler(void *opaque, int running, RunState state) > +{ > + CPUPPCState *env = opaque; > + > + struct kvm_sregs sregs; > + > + printf("running = %d, state = %d \n", running, state); Remove this printf. > + if (!running) > + return; > + > + /* > + * Clear watchdog interrupt condition by clearing TSR. > + * Similar logic needed to be implemented for watchdog > + * emulation in qemu. > + */ > + if (cap_booke_sregs && cap_ppc_wdt) { > + kvm_vcpu_ioctl(env, KVM_GET_SREGS, &sregs); > + > + /* Clear TSR.ENW, TSR.WIS and TSR.WRS */ > + ppc_booke_wdt_clear_tsr(env, sregs.u.e.tsr); > + sregs.u.e.tsr = env->spr[SPR_BOOKE_TSR]; > + sregs.u.e.update_special = KVM_SREGS_E_BASE | KVM_SREGS_E_UPDATE_TSR; KVM_SREGS_E_BASE is for "features", not "update_special". Used here it'll translate to KVM_SREGS_E_UPDATE_MCSR. > + kvm_vcpu_ioctl(env, KVM_SET_SREGS, &sregs); > + } > +} > + > int kvm_arch_init_vcpu(CPUPPCState *cenv) > { > int ret; > @@ -384,6 +433,13 @@ int kvm_arch_init_vcpu(CPUPPCState *cenv) > return ret; > } > > + ret = kvm_wdt_enable(cenv); > + if (ret) { > + return ret; > + } s/wdt/watchdog/g Only do this if the user asks for a watchdog enforcement action -- and if they do, make sure to at least warn if KVM doesn't support it. > + qemu_add_vm_change_state_handler(cpu_state_change_handler, cenv); > + > idle_timer = qemu_new_timer_ns(vm_clock, kvm_kick_env, cenv); > > /* Some targets support access to KVM's guest TLB. */ > @@ -769,6 +825,13 @@ int kvm_arch_handle_exit(CPUPPCState *env, struct kvm_run *run) > ret = 1; > break; > #endif > +#ifdef KVM_EXIT_WATCHDOG > + case KVM_EXIT_WATCHDOG: > + dprintf("booke watchdog action\n"); > + watchdog_perform_action(); > + ret = 0; > + break; Indentation. Is this part really booke-specific? -Scott -- To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html