KVM: Use printk_rlimit() instead of reporting emulation failures just once
authorAvi Kivity <avi@qumranet.com>
Fri, 13 Jun 2008 19:45:42 +0000 (22:45 +0300)
committerAvi Kivity <avi@qumranet.com>
Sun, 20 Jul 2008 09:42:32 +0000 (12:42 +0300)
Emulation failure reports are useful, so allow more than one per the lifetime
of the module.

Signed-off-by: Avi Kivity <avi@qumranet.com>
arch/x86/kvm/x86.c

index 5d21bb69d88c99d56c9aa22f9c26536c2cbf876c..d1db5aa5c7f42dfd38d4426ee36c7a92c946fdc1 100644 (file)
@@ -2076,12 +2076,11 @@ int emulator_set_dr(struct x86_emulate_ctxt *ctxt, int dr, unsigned long value)
 
 void kvm_report_emulation_failure(struct kvm_vcpu *vcpu, const char *context)
 {
-       static int reported;
        u8 opcodes[4];
        unsigned long rip = vcpu->arch.rip;
        unsigned long rip_linear;
 
-       if (reported)
+       if (!printk_ratelimit())
                return;
 
        rip_linear = rip + get_segment_base(vcpu, VCPU_SREG_CS);
@@ -2090,7 +2089,6 @@ void kvm_report_emulation_failure(struct kvm_vcpu *vcpu, const char *context)
 
        printk(KERN_ERR "emulation failed (%s) rip %lx %02x %02x %02x %02x\n",
               context, rip, opcodes[0], opcodes[1], opcodes[2], opcodes[3]);
-       reported = 1;
 }
 EXPORT_SYMBOL_GPL(kvm_report_emulation_failure);