|
@@ -298,3 +298,162 @@ union ia64_ipi_d {
|
|
|
unsigned long vector : 8;
|
|
|
unsigned long dm : 3;
|
|
|
unsigned long ig : 53;
|
|
|
+ };
|
|
|
+};
|
|
|
+
|
|
|
+/*ipi check exit data*/
|
|
|
+struct kvm_ipi_data{
|
|
|
+ union ia64_ipi_a addr;
|
|
|
+ union ia64_ipi_d data;
|
|
|
+};
|
|
|
+
|
|
|
+/*global purge data*/
|
|
|
+struct kvm_ptc_g {
|
|
|
+ unsigned long vaddr;
|
|
|
+ unsigned long rr;
|
|
|
+ unsigned long ps;
|
|
|
+ struct kvm_vcpu *vcpu;
|
|
|
+};
|
|
|
+
|
|
|
+/*Exit control data */
|
|
|
+struct exit_ctl_data{
|
|
|
+ uint32_t exit_reason;
|
|
|
+ uint32_t vm_status;
|
|
|
+ union {
|
|
|
+ struct kvm_mmio_req ioreq;
|
|
|
+ struct kvm_pal_call pal_data;
|
|
|
+ struct kvm_sal_call sal_data;
|
|
|
+ struct kvm_switch_rr6 rr_data;
|
|
|
+ struct kvm_ipi_data ipi_data;
|
|
|
+ struct kvm_ptc_g ptc_g_data;
|
|
|
+ } u;
|
|
|
+};
|
|
|
+
|
|
|
+union pte_flags {
|
|
|
+ unsigned long val;
|
|
|
+ struct {
|
|
|
+ unsigned long p : 1; /*0 */
|
|
|
+ unsigned long : 1; /* 1 */
|
|
|
+ unsigned long ma : 3; /* 2-4 */
|
|
|
+ unsigned long a : 1; /* 5 */
|
|
|
+ unsigned long d : 1; /* 6 */
|
|
|
+ unsigned long pl : 2; /* 7-8 */
|
|
|
+ unsigned long ar : 3; /* 9-11 */
|
|
|
+ unsigned long ppn : 38; /* 12-49 */
|
|
|
+ unsigned long : 2; /* 50-51 */
|
|
|
+ unsigned long ed : 1; /* 52 */
|
|
|
+ };
|
|
|
+};
|
|
|
+
|
|
|
+union ia64_pta {
|
|
|
+ unsigned long val;
|
|
|
+ struct {
|
|
|
+ unsigned long ve : 1;
|
|
|
+ unsigned long reserved0 : 1;
|
|
|
+ unsigned long size : 6;
|
|
|
+ unsigned long vf : 1;
|
|
|
+ unsigned long reserved1 : 6;
|
|
|
+ unsigned long base : 49;
|
|
|
+ };
|
|
|
+};
|
|
|
+
|
|
|
+struct thash_cb {
|
|
|
+ /* THASH base information */
|
|
|
+ struct thash_data *hash; /* hash table pointer */
|
|
|
+ union ia64_pta pta;
|
|
|
+ int num;
|
|
|
+};
|
|
|
+
|
|
|
+struct kvm_vcpu_stat {
|
|
|
+ u32 halt_wakeup;
|
|
|
+};
|
|
|
+
|
|
|
+struct kvm_vcpu_arch {
|
|
|
+ int launched;
|
|
|
+ int last_exit;
|
|
|
+ int last_run_cpu;
|
|
|
+ int vmm_tr_slot;
|
|
|
+ int vm_tr_slot;
|
|
|
+ int sn_rtc_tr_slot;
|
|
|
+
|
|
|
+#define KVM_MP_STATE_RUNNABLE 0
|
|
|
+#define KVM_MP_STATE_UNINITIALIZED 1
|
|
|
+#define KVM_MP_STATE_INIT_RECEIVED 2
|
|
|
+#define KVM_MP_STATE_HALTED 3
|
|
|
+ int mp_state;
|
|
|
+
|
|
|
+#define MAX_PTC_G_NUM 3
|
|
|
+ int ptc_g_count;
|
|
|
+ struct kvm_ptc_g ptc_g_data[MAX_PTC_G_NUM];
|
|
|
+
|
|
|
+ /*halt timer to wake up sleepy vcpus*/
|
|
|
+ struct hrtimer hlt_timer;
|
|
|
+ long ht_active;
|
|
|
+
|
|
|
+ struct kvm_lapic *apic; /* kernel irqchip context */
|
|
|
+ struct vpd *vpd;
|
|
|
+
|
|
|
+ /* Exit data for vmm_transition*/
|
|
|
+ struct exit_ctl_data exit_data;
|
|
|
+
|
|
|
+ cpumask_t cache_coherent_map;
|
|
|
+
|
|
|
+ unsigned long vmm_rr;
|
|
|
+ unsigned long host_rr6;
|
|
|
+ unsigned long psbits[8];
|
|
|
+ unsigned long cr_iipa;
|
|
|
+ unsigned long cr_isr;
|
|
|
+ unsigned long vsa_base;
|
|
|
+ unsigned long dirty_log_lock_pa;
|
|
|
+ unsigned long __gp;
|
|
|
+ /* TR and TC. */
|
|
|
+ struct thash_data itrs[NITRS];
|
|
|
+ struct thash_data dtrs[NDTRS];
|
|
|
+ /* Bit is set if there is a tr/tc for the region. */
|
|
|
+ unsigned char itr_regions;
|
|
|
+ unsigned char dtr_regions;
|
|
|
+ unsigned char tc_regions;
|
|
|
+ /* purge all */
|
|
|
+ unsigned long ptce_base;
|
|
|
+ unsigned long ptce_count[2];
|
|
|
+ unsigned long ptce_stride[2];
|
|
|
+ /* itc/itm */
|
|
|
+ unsigned long last_itc;
|
|
|
+ long itc_offset;
|
|
|
+ unsigned long itc_check;
|
|
|
+ unsigned long timer_check;
|
|
|
+ unsigned int timer_pending;
|
|
|
+ unsigned int timer_fired;
|
|
|
+
|
|
|
+ unsigned long vrr[8];
|
|
|
+ unsigned long ibr[8];
|
|
|
+ unsigned long dbr[8];
|
|
|
+ unsigned long insvc[4]; /* Interrupt in service. */
|
|
|
+ unsigned long xtp;
|
|
|
+
|
|
|
+ unsigned long metaphysical_rr0; /* from kvm_arch (so is pinned) */
|
|
|
+ unsigned long metaphysical_rr4; /* from kvm_arch (so is pinned) */
|
|
|
+ unsigned long metaphysical_saved_rr0; /* from kvm_arch */
|
|
|
+ unsigned long metaphysical_saved_rr4; /* from kvm_arch */
|
|
|
+ unsigned long fp_psr; /*used for lazy float register */
|
|
|
+ unsigned long saved_gp;
|
|
|
+ /*for phycial emulation */
|
|
|
+ int mode_flags;
|
|
|
+ struct thash_cb vtlb;
|
|
|
+ struct thash_cb vhpt;
|
|
|
+ char irq_check;
|
|
|
+ char irq_new_pending;
|
|
|
+
|
|
|
+ unsigned long opcode;
|
|
|
+ unsigned long cause;
|
|
|
+ char log_buf[VMM_LOG_LEN];
|
|
|
+ union context host;
|
|
|
+ union context guest;
|
|
|
+
|
|
|
+ char mmio_data[8];
|
|
|
+};
|
|
|
+
|
|
|
+struct kvm_vm_stat {
|
|
|
+ u64 remote_tlb_flush;
|
|
|
+};
|
|
|
+
|