linux/arch/powerpc/include/asm/kvm_host.h
<<
>>
Prefs
   1/*
   2 * This program is free software; you can redistribute it and/or modify
   3 * it under the terms of the GNU General Public License, version 2, as
   4 * published by the Free Software Foundation.
   5 *
   6 * This program is distributed in the hope that it will be useful,
   7 * but WITHOUT ANY WARRANTY; without even the implied warranty of
   8 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   9 * GNU General Public License for more details.
  10 *
  11 * You should have received a copy of the GNU General Public License
  12 * along with this program; if not, write to the Free Software
  13 * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  14 *
  15 * Copyright IBM Corp. 2007
  16 *
  17 * Authors: Hollis Blanchard <hollisb@us.ibm.com>
  18 */
  19
  20#ifndef __POWERPC_KVM_HOST_H__
  21#define __POWERPC_KVM_HOST_H__
  22
  23#include <linux/mutex.h>
  24#include <linux/hrtimer.h>
  25#include <linux/interrupt.h>
  26#include <linux/types.h>
  27#include <linux/kvm_types.h>
  28#include <linux/threads.h>
  29#include <linux/spinlock.h>
  30#include <linux/kvm_para.h>
  31#include <linux/list.h>
  32#include <linux/atomic.h>
  33#include <asm/kvm_asm.h>
  34#include <asm/processor.h>
  35#include <asm/page.h>
  36#include <asm/cacheflush.h>
  37
  38#define KVM_MAX_VCPUS           NR_CPUS
  39#define KVM_MAX_VCORES          NR_CPUS
  40#define KVM_MEMORY_SLOTS 32
  41/* memory slots that does not exposed to userspace */
  42#define KVM_PRIVATE_MEM_SLOTS 4
  43#define KVM_MEM_SLOTS_NUM (KVM_MEMORY_SLOTS + KVM_PRIVATE_MEM_SLOTS)
  44
  45#ifdef CONFIG_KVM_MMIO
  46#define KVM_COALESCED_MMIO_PAGE_OFFSET 1
  47#endif
  48
  49#ifdef CONFIG_KVM_BOOK3S_64_HV
  50#include <linux/mmu_notifier.h>
  51
  52#define KVM_ARCH_WANT_MMU_NOTIFIER
  53
  54struct kvm;
  55extern int kvm_unmap_hva(struct kvm *kvm, unsigned long hva);
  56extern int kvm_age_hva(struct kvm *kvm, unsigned long hva);
  57extern int kvm_test_age_hva(struct kvm *kvm, unsigned long hva);
  58extern void kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte);
  59
  60#endif
  61
  62/* We don't currently support large pages. */
  63#define KVM_HPAGE_GFN_SHIFT(x)  0
  64#define KVM_NR_PAGE_SIZES       1
  65#define KVM_PAGES_PER_HPAGE(x)  (1UL<<31)
  66
  67#define HPTEG_CACHE_NUM                 (1 << 15)
  68#define HPTEG_HASH_BITS_PTE             13
  69#define HPTEG_HASH_BITS_PTE_LONG        12
  70#define HPTEG_HASH_BITS_VPTE            13
  71#define HPTEG_HASH_BITS_VPTE_LONG       5
  72#define HPTEG_HASH_NUM_PTE              (1 << HPTEG_HASH_BITS_PTE)
  73#define HPTEG_HASH_NUM_PTE_LONG         (1 << HPTEG_HASH_BITS_PTE_LONG)
  74#define HPTEG_HASH_NUM_VPTE             (1 << HPTEG_HASH_BITS_VPTE)
  75#define HPTEG_HASH_NUM_VPTE_LONG        (1 << HPTEG_HASH_BITS_VPTE_LONG)
  76
  77/* Physical Address Mask - allowed range of real mode RAM access */
  78#define KVM_PAM                 0x0fffffffffffffffULL
  79
  80struct kvm;
  81struct kvm_run;
  82struct kvm_vcpu;
  83
  84struct lppaca;
  85struct slb_shadow;
  86struct dtl_entry;
  87
  88struct kvm_vm_stat {
  89        u32 remote_tlb_flush;
  90};
  91
  92struct kvm_vcpu_stat {
  93        u32 sum_exits;
  94        u32 mmio_exits;
  95        u32 dcr_exits;
  96        u32 signal_exits;
  97        u32 light_exits;
  98        /* Account for special types of light exits: */
  99        u32 itlb_real_miss_exits;
 100        u32 itlb_virt_miss_exits;
 101        u32 dtlb_real_miss_exits;
 102        u32 dtlb_virt_miss_exits;
 103        u32 syscall_exits;
 104        u32 isi_exits;
 105        u32 dsi_exits;
 106        u32 emulated_inst_exits;
 107        u32 dec_exits;
 108        u32 ext_intr_exits;
 109        u32 halt_wakeup;
 110        u32 dbell_exits;
 111        u32 gdbell_exits;
 112#ifdef CONFIG_PPC_BOOK3S
 113        u32 pf_storage;
 114        u32 pf_instruc;
 115        u32 sp_storage;
 116        u32 sp_instruc;
 117        u32 queue_intr;
 118        u32 ld;
 119        u32 ld_slow;
 120        u32 st;
 121        u32 st_slow;
 122#endif
 123};
 124
 125enum kvm_exit_types {
 126        MMIO_EXITS,
 127        DCR_EXITS,
 128        SIGNAL_EXITS,
 129        ITLB_REAL_MISS_EXITS,
 130        ITLB_VIRT_MISS_EXITS,
 131        DTLB_REAL_MISS_EXITS,
 132        DTLB_VIRT_MISS_EXITS,
 133        SYSCALL_EXITS,
 134        ISI_EXITS,
 135        DSI_EXITS,
 136        EMULATED_INST_EXITS,
 137        EMULATED_MTMSRWE_EXITS,
 138        EMULATED_WRTEE_EXITS,
 139        EMULATED_MTSPR_EXITS,
 140        EMULATED_MFSPR_EXITS,
 141        EMULATED_MTMSR_EXITS,
 142        EMULATED_MFMSR_EXITS,
 143        EMULATED_TLBSX_EXITS,
 144        EMULATED_TLBWE_EXITS,
 145        EMULATED_RFI_EXITS,
 146        EMULATED_RFCI_EXITS,
 147        DEC_EXITS,
 148        EXT_INTR_EXITS,
 149        HALT_WAKEUP,
 150        USR_PR_INST,
 151        FP_UNAVAIL,
 152        DEBUG_EXITS,
 153        TIMEINGUEST,
 154        DBELL_EXITS,
 155        GDBELL_EXITS,
 156        __NUMBER_OF_KVM_EXIT_TYPES
 157};
 158
 159/* allow access to big endian 32bit upper/lower parts and 64bit var */
 160struct kvmppc_exit_timing {
 161        union {
 162                u64 tv64;
 163                struct {
 164                        u32 tbu, tbl;
 165                } tv32;
 166        };
 167};
 168
 169struct kvmppc_pginfo {
 170        unsigned long pfn;
 171        atomic_t refcnt;
 172};
 173
 174struct kvmppc_spapr_tce_table {
 175        struct list_head list;
 176        struct kvm *kvm;
 177        u64 liobn;
 178        u32 window_size;
 179        struct page *pages[0];
 180};
 181
 182struct kvmppc_linear_info {
 183        void            *base_virt;
 184        unsigned long    base_pfn;
 185        unsigned long    npages;
 186        struct list_head list;
 187        atomic_t         use_count;
 188        int              type;
 189};
 190
 191/*
 192 * The reverse mapping array has one entry for each HPTE,
 193 * which stores the guest's view of the second word of the HPTE
 194 * (including the guest physical address of the mapping),
 195 * plus forward and backward pointers in a doubly-linked ring
 196 * of HPTEs that map the same host page.  The pointers in this
 197 * ring are 32-bit HPTE indexes, to save space.
 198 */
 199struct revmap_entry {
 200        unsigned long guest_rpte;
 201        unsigned int forw, back;
 202};
 203
 204/*
 205 * We use the top bit of each memslot->rmap entry as a lock bit,
 206 * and bit 32 as a present flag.  The bottom 32 bits are the
 207 * index in the guest HPT of a HPTE that points to the page.
 208 */
 209#define KVMPPC_RMAP_LOCK_BIT    63
 210#define KVMPPC_RMAP_RC_SHIFT    32
 211#define KVMPPC_RMAP_REFERENCED  (HPTE_R_R << KVMPPC_RMAP_RC_SHIFT)
 212#define KVMPPC_RMAP_CHANGED     (HPTE_R_C << KVMPPC_RMAP_RC_SHIFT)
 213#define KVMPPC_RMAP_PRESENT     0x100000000ul
 214#define KVMPPC_RMAP_INDEX       0xfffffffful
 215
 216/* Low-order bits in kvm->arch.slot_phys[][] */
 217#define KVMPPC_PAGE_ORDER_MASK  0x1f
 218#define KVMPPC_PAGE_NO_CACHE    HPTE_R_I        /* 0x20 */
 219#define KVMPPC_PAGE_WRITETHRU   HPTE_R_W        /* 0x40 */
 220#define KVMPPC_GOT_PAGE         0x80
 221
 222struct kvm_arch_memory_slot {
 223};
 224
 225struct kvm_arch {
 226        unsigned int lpid;
 227#ifdef CONFIG_KVM_BOOK3S_64_HV
 228        unsigned long hpt_virt;
 229        struct revmap_entry *revmap;
 230        unsigned int host_lpid;
 231        unsigned long host_lpcr;
 232        unsigned long sdr1;
 233        unsigned long host_sdr1;
 234        int tlbie_lock;
 235        unsigned long lpcr;
 236        unsigned long rmor;
 237        struct kvmppc_linear_info *rma;
 238        unsigned long vrma_slb_v;
 239        int rma_setup_done;
 240        int using_mmu_notifiers;
 241        u32 hpt_order;
 242        atomic_t vcpus_running;
 243        unsigned long hpt_npte;
 244        unsigned long hpt_mask;
 245        spinlock_t slot_phys_lock;
 246        unsigned long *slot_phys[KVM_MEM_SLOTS_NUM];
 247        int slot_npages[KVM_MEM_SLOTS_NUM];
 248        unsigned short last_vcpu[NR_CPUS];
 249        struct kvmppc_vcore *vcores[KVM_MAX_VCORES];
 250        struct kvmppc_linear_info *hpt_li;
 251#endif /* CONFIG_KVM_BOOK3S_64_HV */
 252#ifdef CONFIG_PPC_BOOK3S_64
 253        struct list_head spapr_tce_tables;
 254#endif
 255};
 256
 257/*
 258 * Struct for a virtual core.
 259 * Note: entry_exit_count combines an entry count in the bottom 8 bits
 260 * and an exit count in the next 8 bits.  This is so that we can
 261 * atomically increment the entry count iff the exit count is 0
 262 * without taking the lock.
 263 */
 264struct kvmppc_vcore {
 265        int n_runnable;
 266        int n_busy;
 267        int num_threads;
 268        int entry_exit_count;
 269        int n_woken;
 270        int nap_count;
 271        int napping_threads;
 272        u16 pcpu;
 273        u8 vcore_state;
 274        u8 in_guest;
 275        struct list_head runnable_threads;
 276        spinlock_t lock;
 277        wait_queue_head_t wq;
 278        u64 stolen_tb;
 279        u64 preempt_tb;
 280        struct kvm_vcpu *runner;
 281};
 282
 283#define VCORE_ENTRY_COUNT(vc)   ((vc)->entry_exit_count & 0xff)
 284#define VCORE_EXIT_COUNT(vc)    ((vc)->entry_exit_count >> 8)
 285
 286/* Values for vcore_state */
 287#define VCORE_INACTIVE  0
 288#define VCORE_RUNNING   1
 289#define VCORE_EXITING   2
 290#define VCORE_SLEEPING  3
 291
 292/*
 293 * Struct used to manage memory for a virtual processor area
 294 * registered by a PAPR guest.  There are three types of area
 295 * that a guest can register.
 296 */
 297struct kvmppc_vpa {
 298        void *pinned_addr;      /* Address in kernel linear mapping */
 299        void *pinned_end;       /* End of region */
 300        unsigned long next_gpa; /* Guest phys addr for update */
 301        unsigned long len;      /* Number of bytes required */
 302        u8 update_pending;      /* 1 => update pinned_addr from next_gpa */
 303};
 304
 305struct kvmppc_pte {
 306        ulong eaddr;
 307        u64 vpage;
 308        ulong raddr;
 309        bool may_read           : 1;
 310        bool may_write          : 1;
 311        bool may_execute        : 1;
 312};
 313
 314struct kvmppc_mmu {
 315        /* book3s_64 only */
 316        void (*slbmte)(struct kvm_vcpu *vcpu, u64 rb, u64 rs);
 317        u64  (*slbmfee)(struct kvm_vcpu *vcpu, u64 slb_nr);
 318        u64  (*slbmfev)(struct kvm_vcpu *vcpu, u64 slb_nr);
 319        void (*slbie)(struct kvm_vcpu *vcpu, u64 slb_nr);
 320        void (*slbia)(struct kvm_vcpu *vcpu);
 321        /* book3s */
 322        void (*mtsrin)(struct kvm_vcpu *vcpu, u32 srnum, ulong value);
 323        u32  (*mfsrin)(struct kvm_vcpu *vcpu, u32 srnum);
 324        int  (*xlate)(struct kvm_vcpu *vcpu, gva_t eaddr, struct kvmppc_pte *pte, bool data);
 325        void (*reset_msr)(struct kvm_vcpu *vcpu);
 326        void (*tlbie)(struct kvm_vcpu *vcpu, ulong addr, bool large);
 327        int  (*esid_to_vsid)(struct kvm_vcpu *vcpu, ulong esid, u64 *vsid);
 328        u64  (*ea_to_vp)(struct kvm_vcpu *vcpu, gva_t eaddr, bool data);
 329        bool (*is_dcbz32)(struct kvm_vcpu *vcpu);
 330};
 331
 332struct kvmppc_slb {
 333        u64 esid;
 334        u64 vsid;
 335        u64 orige;
 336        u64 origv;
 337        bool valid      : 1;
 338        bool Ks         : 1;
 339        bool Kp         : 1;
 340        bool nx         : 1;
 341        bool large      : 1;    /* PTEs are 16MB */
 342        bool tb         : 1;    /* 1TB segment */
 343        bool class      : 1;
 344};
 345
 346struct kvm_vcpu_arch {
 347        ulong host_stack;
 348        u32 host_pid;
 349#ifdef CONFIG_PPC_BOOK3S
 350        struct kvmppc_slb slb[64];
 351        int slb_max;            /* 1 + index of last valid entry in slb[] */
 352        int slb_nr;             /* total number of entries in SLB */
 353        struct kvmppc_mmu mmu;
 354#endif
 355
 356        ulong gpr[32];
 357
 358        u64 fpr[32];
 359        u64 fpscr;
 360
 361#ifdef CONFIG_SPE
 362        ulong evr[32];
 363        ulong spefscr;
 364        ulong host_spefscr;
 365        u64 acc;
 366#endif
 367#ifdef CONFIG_ALTIVEC
 368        vector128 vr[32];
 369        vector128 vscr;
 370#endif
 371
 372#ifdef CONFIG_VSX
 373        u64 vsr[64];
 374#endif
 375
 376#ifdef CONFIG_KVM_BOOKE_HV
 377        u32 host_mas4;
 378        u32 host_mas6;
 379        u32 shadow_epcr;
 380        u32 epcr;
 381        u32 shadow_msrp;
 382        u32 eplc;
 383        u32 epsc;
 384        u32 oldpir;
 385#endif
 386
 387#ifdef CONFIG_PPC_BOOK3S
 388        /* For Gekko paired singles */
 389        u32 qpr[32];
 390#endif
 391
 392        ulong pc;
 393        ulong ctr;
 394        ulong lr;
 395
 396        ulong xer;
 397        u32 cr;
 398
 399#ifdef CONFIG_PPC_BOOK3S
 400        ulong hflags;
 401        ulong guest_owned_ext;
 402        ulong purr;
 403        ulong spurr;
 404        ulong dscr;
 405        ulong amr;
 406        ulong uamor;
 407        u32 ctrl;
 408        ulong dabr;
 409#endif
 410        u32 vrsave; /* also USPRG0 */
 411        u32 mmucr;
 412        /* shadow_msr is unused for BookE HV */
 413        ulong shadow_msr;
 414        ulong csrr0;
 415        ulong csrr1;
 416        ulong dsrr0;
 417        ulong dsrr1;
 418        ulong mcsrr0;
 419        ulong mcsrr1;
 420        ulong mcsr;
 421        u32 dec;
 422#ifdef CONFIG_BOOKE
 423        u32 decar;
 424#endif
 425        u32 tbl;
 426        u32 tbu;
 427        u32 tcr;
 428        ulong tsr; /* we need to perform set/clr_bits() which requires ulong */
 429        u32 ivor[64];
 430        ulong ivpr;
 431        u32 pvr;
 432
 433        u32 shadow_pid;
 434        u32 shadow_pid1;
 435        u32 pid;
 436        u32 swap_pid;
 437
 438        u32 ccr0;
 439        u32 ccr1;
 440        u32 dbcr0;
 441        u32 dbcr1;
 442        u32 dbsr;
 443
 444        u64 mmcr[3];
 445        u32 pmc[8];
 446
 447#ifdef CONFIG_KVM_EXIT_TIMING
 448        struct mutex exit_timing_lock;
 449        struct kvmppc_exit_timing timing_exit;
 450        struct kvmppc_exit_timing timing_last_enter;
 451        u32 last_exit_type;
 452        u32 timing_count_type[__NUMBER_OF_KVM_EXIT_TYPES];
 453        u64 timing_sum_duration[__NUMBER_OF_KVM_EXIT_TYPES];
 454        u64 timing_sum_quad_duration[__NUMBER_OF_KVM_EXIT_TYPES];
 455        u64 timing_min_duration[__NUMBER_OF_KVM_EXIT_TYPES];
 456        u64 timing_max_duration[__NUMBER_OF_KVM_EXIT_TYPES];
 457        u64 timing_last_exit;
 458        struct dentry *debugfs_exit_timing;
 459#endif
 460
 461#ifdef CONFIG_PPC_BOOK3S
 462        ulong fault_dar;
 463        u32 fault_dsisr;
 464#endif
 465
 466#ifdef CONFIG_BOOKE
 467        ulong fault_dear;
 468        ulong fault_esr;
 469        ulong queued_dear;
 470        ulong queued_esr;
 471        u32 tlbcfg[4];
 472        u32 mmucfg;
 473        u32 epr;
 474#endif
 475        gpa_t paddr_accessed;
 476        gva_t vaddr_accessed;
 477
 478        u8 io_gpr; /* GPR used as IO source/target */
 479        u8 mmio_is_bigendian;
 480        u8 mmio_sign_extend;
 481        u8 dcr_needed;
 482        u8 dcr_is_write;
 483        u8 osi_needed;
 484        u8 osi_enabled;
 485        u8 papr_enabled;
 486        u8 sane;
 487        u8 cpu_type;
 488        u8 hcall_needed;
 489
 490        u32 cpr0_cfgaddr; /* holds the last set cpr0_cfgaddr */
 491
 492        struct hrtimer dec_timer;
 493        struct tasklet_struct tasklet;
 494        u64 dec_jiffies;
 495        u64 dec_expires;
 496        unsigned long pending_exceptions;
 497        u16 last_cpu;
 498        u8 ceded;
 499        u8 prodded;
 500        u32 last_inst;
 501
 502        wait_queue_head_t *wqp;
 503        struct kvmppc_vcore *vcore;
 504        int ret;
 505        int trap;
 506        int state;
 507        int ptid;
 508        bool timer_running;
 509        wait_queue_head_t cpu_run;
 510
 511        struct kvm_vcpu_arch_shared *shared;
 512        unsigned long magic_page_pa; /* phys addr to map the magic page to */
 513        unsigned long magic_page_ea; /* effect. addr to map the magic page to */
 514
 515#ifdef CONFIG_KVM_BOOK3S_64_HV
 516        struct kvm_vcpu_arch_shared shregs;
 517
 518        unsigned long pgfault_addr;
 519        long pgfault_index;
 520        unsigned long pgfault_hpte[2];
 521
 522        struct list_head run_list;
 523        struct task_struct *run_task;
 524        struct kvm_run *kvm_run;
 525        pgd_t *pgdir;
 526
 527        spinlock_t vpa_update_lock;
 528        struct kvmppc_vpa vpa;
 529        struct kvmppc_vpa dtl;
 530        struct dtl_entry *dtl_ptr;
 531        unsigned long dtl_index;
 532        u64 stolen_logged;
 533        struct kvmppc_vpa slb_shadow;
 534#endif
 535};
 536
 537/* Values for vcpu->arch.state */
 538#define KVMPPC_VCPU_STOPPED             0
 539#define KVMPPC_VCPU_BUSY_IN_HOST        1
 540#define KVMPPC_VCPU_RUNNABLE            2
 541
 542/* Values for vcpu->arch.io_gpr */
 543#define KVM_MMIO_REG_MASK       0x001f
 544#define KVM_MMIO_REG_EXT_MASK   0xffe0
 545#define KVM_MMIO_REG_GPR        0x0000
 546#define KVM_MMIO_REG_FPR        0x0020
 547#define KVM_MMIO_REG_QPR        0x0040
 548#define KVM_MMIO_REG_FQPR       0x0060
 549
 550#define __KVM_HAVE_ARCH_WQP
 551
 552#endif /* __POWERPC_KVM_HOST_H__ */
 553