Re: [RFT] Fix for unhandled msr c0000081 problems under Intel cpus

Ingo Molnar
2006-12-28T14:08:36Z

* Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org> wrote:

> Ingo Molnar wrote:
> >* Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org> wrote:
> >
> >
> >>>that did the trick. The only messages remaining are:
> >>>
> >>>kvm: unhandled wrmsr: 0xc1
> >>>inject_general_protection: rip 0xc011b8ae
> >>>
> >>>
> >>>
> >>That's a performance counter. What guest triggers it?
> >>
> >
> >a 32-bit Linux bzImage:
> >
> > c011b8ae: 0f 30 wrmsr
> >
> > (gdb) list *0xc011b8ae
> > 0xc011b8ae is in setup_apic_nmi_watchdog (include/asm/msr.h:36).
> > 31 static inline void wrmsrl (unsigned long msr, unsigned long long
> > val)
> > 32 {
> > 33 unsigned long lo, hi;
> > 34 lo = (unsigned long) val;
> > 35 hi = val >> 32;
> > 36 wrmsr (msr, lo, hi);
> > 37 }
> > 38
> > 39 /* wrmsr with exception handling */
> > 40 #define wrmsr_safe(msr,a,b) ({ int ret__;
> >
> >the guest also obviously crashes due to this #GPF.
> >
>
> The wary ones use wrmsr_safe().
>
> >[ 2.6.20-rc2-rt2 kernel of course ;-) ]
> >
> >
>
> Who's the caller? I boot 2.6.18 variants regularly and they don't touch
> that msr.

the caller is in the gdb dump above:

> > 0xc011b8ae is in setup_apic_nmi_watchdog (include/asm/msr.h:36).

i'll change it to wrmsr_safe().

Ingo