KVM: PPC: fix exit accounting for SPRs, tlbwe, tlbsx
authorScott Wood <scottwood@freescale.com>
Mon, 28 Mar 2011 20:01:24 +0000 (15:01 -0500)
committerAvi Kivity <avi@redhat.com>
Sun, 22 May 2011 12:47:47 +0000 (08:47 -0400)
The exit type setting for mfspr/mtspr is moved from 44x to toplevel SPR
emulation.  This enables it on e500, and makes sure that all SPRs
are covered.

Exit accounting for tlbwe and tlbsx is added to e500.

Signed-off-by: Stuart Yoder <stuart.yoder@freescale.com>
Signed-off-by: Scott Wood <scottwood@freescale.com>
Signed-off-by: Alexander Graf <agraf@suse.de>
arch/powerpc/kvm/44x_emulate.c
arch/powerpc/kvm/e500_tlb.c
arch/powerpc/kvm/emulate.c

index 65ea083a5b27bda5ba4cacb875894ec127513bde..549bb2c9a47a389eb997bc632faf98ef3c2751e3 100644 (file)
@@ -158,7 +158,6 @@ int kvmppc_core_emulate_mtspr(struct kvm_vcpu *vcpu, int sprn, int rs)
                emulated = kvmppc_booke_emulate_mtspr(vcpu, sprn, rs);
        }
 
-       kvmppc_set_exit_type(vcpu, EMULATED_MTSPR_EXITS);
        return emulated;
 }
 
@@ -179,7 +178,6 @@ int kvmppc_core_emulate_mfspr(struct kvm_vcpu *vcpu, int sprn, int rt)
                emulated = kvmppc_booke_emulate_mfspr(vcpu, sprn, rt);
        }
 
-       kvmppc_set_exit_type(vcpu, EMULATED_MFSPR_EXITS);
        return emulated;
 }
 
index d6d6d47a75a97b8ecd754964ee87fd7769327255..56ac4523857d14f7903df33830bedf0ababe0988 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008 Freescale Semiconductor, Inc. All rights reserved.
+ * Copyright (C) 2008-2011 Freescale Semiconductor, Inc. All rights reserved.
  *
  * Author: Yu Liu, yu.liu@freescale.com
  *
@@ -24,6 +24,7 @@
 #include "../mm/mmu_decl.h"
 #include "e500_tlb.h"
 #include "trace.h"
+#include "timing.h"
 
 #define to_htlb1_esel(esel) (tlb1_entry_num - (esel) - 1)
 
@@ -506,6 +507,7 @@ int kvmppc_e500_emul_tlbsx(struct kvm_vcpu *vcpu, int rb)
                vcpu_e500->mas7 = 0;
        }
 
+       kvmppc_set_exit_type(vcpu, EMULATED_TLBSX_EXITS);
        return EMULATE_DONE;
 }
 
@@ -571,6 +573,7 @@ int kvmppc_e500_emul_tlbwe(struct kvm_vcpu *vcpu)
                write_host_tlbe(vcpu_e500, stlbsel, sesel);
        }
 
+       kvmppc_set_exit_type(vcpu, EMULATED_TLBWE_EXITS);
        return EMULATE_DONE;
 }
 
index c64fd2909bb2e892536bd7776fc4b683d06d2c3b..8f7a3aa03c262b705fd0ccfab9d94bb811d5233c 100644 (file)
@@ -294,6 +294,7 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu)
                                }
                                break;
                        }
+                       kvmppc_set_exit_type(vcpu, EMULATED_MFSPR_EXITS);
                        break;
 
                case OP_31_XOP_STHX:
@@ -363,6 +364,7 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu)
                                        printk("mtspr: unknown spr %x\n", sprn);
                                break;
                        }
+                       kvmppc_set_exit_type(vcpu, EMULATED_MTSPR_EXITS);
                        break;
 
                case OP_31_XOP_DCBI: