Re: [PATCH]: Fix MSR_K7_EVNTSEL{0,3} for SVM

Avi Kivity
2008-04-24T07:35:49Z

Chris Lalancette wrote:
> Avi, Joerg,
> While trying to boot a RHEL-4 guest on latest KVM tip on an AMD machine, I
> found that the guest would consistently crash when trying to setup the NMI
> watchdog. I traced it down to the following commit:
>
> 51ef1ac7b23ee32bfcc61c229d634fdc1c68b38a
>
> It seems that in that commit, the K7_EVNTSEL MSR's were set to fail if the data
> != 0. That test is actually fine, the problem is how the code around it is
> generated. That is, we are only supposed to go to unhandled if data != 0; but
> for some reason, we are *always* going to unhandled, even when the data == 0.
> That causes RHEL-4 kernel to crash. If I rearrange the code to look like this:
>
> case MSR_K7_EVNTSEL0:
> case MSR_K7_EVNTSEL1:
> case MSR_K7_EVNTSEL2:
> case MSR_K7_EVNTSEL3:
>
> if (data != 0)
> return kvm_set_msr_common(vcpu, ecx, data);
>
> default:
> return kvm_set_msr_common(vcpu, ecx, data);
> }
>
> Then everything works again. A patch that does just this is attached. It might
> be slightly nicer to say "if (data == 0) return 0" and then just fall through to
> the default case, but I don't much care either way.
>

You mean the gcc generates wrong code? It seems fine here (though
wonderfully obfuscated).

Can you attach an objdump -Sr svm.o? Also, what gcc version are you using?

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