Commit ca95150b authored by Alexander Graf's avatar Alexander Graf Committed by Benjamin Herrenschmidt

Add Book3s fields to vcpu structs

We need to store more information than we currently have for vcpus
when running on Book3s.

So let's extend the internal struct definitions.
Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 83cd259d
...@@ -37,6 +37,8 @@ ...@@ -37,6 +37,8 @@
#define KVM_NR_PAGE_SIZES 1 #define KVM_NR_PAGE_SIZES 1
#define KVM_PAGES_PER_HPAGE(x) (1UL<<31) #define KVM_PAGES_PER_HPAGE(x) (1UL<<31)
#define HPTEG_CACHE_NUM 1024
struct kvm; struct kvm;
struct kvm_run; struct kvm_run;
struct kvm_vcpu; struct kvm_vcpu;
...@@ -63,6 +65,17 @@ struct kvm_vcpu_stat { ...@@ -63,6 +65,17 @@ struct kvm_vcpu_stat {
u32 dec_exits; u32 dec_exits;
u32 ext_intr_exits; u32 ext_intr_exits;
u32 halt_wakeup; u32 halt_wakeup;
#ifdef CONFIG_PPC64
u32 pf_storage;
u32 pf_instruc;
u32 sp_storage;
u32 sp_instruc;
u32 queue_intr;
u32 ld;
u32 ld_slow;
u32 st;
u32 st_slow;
#endif
}; };
enum kvm_exit_types { enum kvm_exit_types {
...@@ -109,9 +122,53 @@ struct kvmppc_exit_timing { ...@@ -109,9 +122,53 @@ struct kvmppc_exit_timing {
struct kvm_arch { struct kvm_arch {
}; };
struct kvmppc_pte {
u64 eaddr;
u64 vpage;
u64 raddr;
bool may_read;
bool may_write;
bool may_execute;
};
struct kvmppc_mmu {
/* book3s_64 only */
void (*slbmte)(struct kvm_vcpu *vcpu, u64 rb, u64 rs);
u64 (*slbmfee)(struct kvm_vcpu *vcpu, u64 slb_nr);
u64 (*slbmfev)(struct kvm_vcpu *vcpu, u64 slb_nr);
void (*slbie)(struct kvm_vcpu *vcpu, u64 slb_nr);
void (*slbia)(struct kvm_vcpu *vcpu);
/* book3s */
void (*mtsrin)(struct kvm_vcpu *vcpu, u32 srnum, ulong value);
u32 (*mfsrin)(struct kvm_vcpu *vcpu, u32 srnum);
int (*xlate)(struct kvm_vcpu *vcpu, gva_t eaddr, struct kvmppc_pte *pte, bool data);
void (*reset_msr)(struct kvm_vcpu *vcpu);
void (*tlbie)(struct kvm_vcpu *vcpu, ulong addr, bool large);
int (*esid_to_vsid)(struct kvm_vcpu *vcpu, u64 esid, u64 *vsid);
u64 (*ea_to_vp)(struct kvm_vcpu *vcpu, gva_t eaddr, bool data);
bool (*is_dcbz32)(struct kvm_vcpu *vcpu);
};
struct hpte_cache {
u64 host_va;
u64 pfn;
ulong slot;
struct kvmppc_pte pte;
};
struct kvm_vcpu_arch { struct kvm_vcpu_arch {
u32 host_stack; ulong host_stack;
u32 host_pid; u32 host_pid;
#ifdef CONFIG_PPC64
ulong host_msr;
ulong host_r2;
void *host_retip;
ulong trampoline_lowmem;
ulong trampoline_enter;
ulong highmem_handler;
ulong host_paca_phys;
struct kvmppc_mmu mmu;
#endif
u64 fpr[32]; u64 fpr[32];
ulong gpr[32]; ulong gpr[32];
...@@ -123,6 +180,10 @@ struct kvm_vcpu_arch { ...@@ -123,6 +180,10 @@ struct kvm_vcpu_arch {
ulong xer; ulong xer;
ulong msr; ulong msr;
#ifdef CONFIG_PPC64
ulong shadow_msr;
ulong hflags;
#endif
u32 mmucr; u32 mmucr;
ulong sprg0; ulong sprg0;
ulong sprg1; ulong sprg1;
...@@ -149,6 +210,7 @@ struct kvm_vcpu_arch { ...@@ -149,6 +210,7 @@ struct kvm_vcpu_arch {
u32 ivor[64]; u32 ivor[64];
ulong ivpr; ulong ivpr;
u32 pir; u32 pir;
u32 pvr;
u32 shadow_pid; u32 shadow_pid;
u32 pid; u32 pid;
...@@ -174,6 +236,9 @@ struct kvm_vcpu_arch { ...@@ -174,6 +236,9 @@ struct kvm_vcpu_arch {
#endif #endif
u32 last_inst; u32 last_inst;
#ifdef CONFIG_PPC64
ulong fault_dsisr;
#endif
ulong fault_dear; ulong fault_dear;
ulong fault_esr; ulong fault_esr;
gpa_t paddr_accessed; gpa_t paddr_accessed;
...@@ -186,7 +251,13 @@ struct kvm_vcpu_arch { ...@@ -186,7 +251,13 @@ struct kvm_vcpu_arch {
u32 cpr0_cfgaddr; /* holds the last set cpr0_cfgaddr */ u32 cpr0_cfgaddr; /* holds the last set cpr0_cfgaddr */
struct timer_list dec_timer; struct timer_list dec_timer;
u64 dec_jiffies;
unsigned long pending_exceptions; unsigned long pending_exceptions;
#ifdef CONFIG_PPC64
struct hpte_cache hpte_cache[HPTEG_CACHE_NUM];
int hpte_cache_offset;
#endif
}; };
#endif /* __POWERPC_KVM_HOST_H__ */ #endif /* __POWERPC_KVM_HOST_H__ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment