On 4/8/21 11:14 AM, Paolo Bonzini wrote: > On 08/04/21 18:04, Tom Lendacky wrote: >>>>> + if (!err || !sev_es_guest(vcpu->kvm) || >>>>> !WARN_ON_ONCE(svm->ghcb)) >>>> This should be WARN_ON_ONCE(!svm->ghcb), otherwise you'll get the right >>>> result, but get a stack trace immediately. >>> Doh, yep. >> Actually, because of the "or's", this needs to be: >> >> if (!err || !sev_es_guest(vcpu->kvm) || (sev_es_guest(vcpu->kvm) && >> WARN_ON_ONCE(!svm->ghcb))) > > No, || cuts the right-hand side if the left-hand side is true. So: > > - if err == 0, the rest is not evaluated > > - if !sev_es_guest(vcpu->kvm), WARN_ON_ONCE(!svm->ghcb) is not evaluated That's what I was doing in my head, but I guess I need more coffee... :) Thanks, Tom > > Paolo >