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