Re: [RFC] nmi watchdog in kvm

Balaji Rao
2008-01-28T14:42:26Z

On Monday 28 January 2008 05:59:25 pm Joerg Roedel wrote:
> On Mon, Jan 28, 2008 at 01:48:40PM +0530, Balaji Rao wrote:
> > Hello,
> >
> > I was trying to enable the use of nmi watchdog within a linux guest
> > running in kvm. I have done it by allowing direct access to perfmon msrs
> > using the MSR_BITMAP field in vmcs region.
>
> Is there a proper virtualization of the performance counter MSRs on
> Intel? If not this patch will destroy any host side performance
> monitoring.
>
No. It has to be handled by the VMM. I shall do this in a later patch. This is
just a quick and dirty attempt to solve this problem.

<snip>

> This patch kills the ability of KVM to migrate between AMD and Intel
> because the Intel performance counters are not available on AMD and vice
> verca.
>
Yes. The way we should solve this is by emulating the MSRs. Am not sure about
the overhead involved. What are your thoughts on this ?

> > diff --git a/include/asm-x86/kvm_host.h b/include/asm-x86/kvm_host.h
> > index 67ae307..f17248d 100644
> > --- a/include/asm-x86/kvm_host.h
> > +++ b/include/asm-x86/kvm_host.h
> > @@ -387,6 +387,7 @@ struct kvm_x86_ops {
> > void (*queue_exception)(struct kvm_vcpu *vcpu, unsigned nr,
> > bool has_error_code, u32 error_code);
> > bool (*exception_injected)(struct kvm_vcpu *vcpu);
> > + void (*inject_nmi)(struct kvm_vcpu *vcpu);
>
> The implementation of this new callback for SVM is missing.
I just wanted to get it running on my hardware first! :) Will implement it for
SVM once I get the approach right.
>
> > void (*inject_pending_irq)(struct kvm_vcpu *vcpu);
> > void (*inject_pending_vectors)(struct kvm_vcpu *vcpu,
> > struct kvm_run *run);
> > ---

thank you for the comments,

regards,
balaji rao