~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/powerpc/include/asm/kvm_host.h

Version: ~ [ linux-5.1-rc5 ] ~ [ linux-5.0.7 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.34 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.111 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.168 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.178 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.138 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.65 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.39.4 ] ~ [ linux-2.6.38.8 ] ~ [ linux-2.6.37.6 ] ~ [ linux-2.6.36.4 ] ~ [ linux-2.6.35.14 ] ~ [ linux-2.6.34.15 ] ~ [ linux-2.6.33.20 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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/kvm_para.h>
 29 #include <asm/kvm_asm.h>
 30 
 31 #define KVM_MAX_VCPUS 1
 32 #define KVM_MEMORY_SLOTS 32
 33 /* memory slots that does not exposed to userspace */
 34 #define KVM_PRIVATE_MEM_SLOTS 4
 35 
 36 #define KVM_COALESCED_MMIO_PAGE_OFFSET 1
 37 
 38 /* We don't currently support large pages. */
 39 #define KVM_HPAGE_GFN_SHIFT(x)  0
 40 #define KVM_NR_PAGE_SIZES       1
 41 #define KVM_PAGES_PER_HPAGE(x)  (1UL<<31)
 42 
 43 #define HPTEG_CACHE_NUM                 (1 << 15)
 44 #define HPTEG_HASH_BITS_PTE             13
 45 #define HPTEG_HASH_BITS_PTE_LONG        12
 46 #define HPTEG_HASH_BITS_VPTE            13
 47 #define HPTEG_HASH_BITS_VPTE_LONG       5
 48 #define HPTEG_HASH_NUM_PTE              (1 << HPTEG_HASH_BITS_PTE)
 49 #define HPTEG_HASH_NUM_PTE_LONG         (1 << HPTEG_HASH_BITS_PTE_LONG)
 50 #define HPTEG_HASH_NUM_VPTE             (1 << HPTEG_HASH_BITS_VPTE)
 51 #define HPTEG_HASH_NUM_VPTE_LONG        (1 << HPTEG_HASH_BITS_VPTE_LONG)
 52 
 53 /* Physical Address Mask - allowed range of real mode RAM access */
 54 #define KVM_PAM                 0x0fffffffffffffffULL
 55 
 56 struct kvm;
 57 struct kvm_run;
 58 struct kvm_vcpu;
 59 
 60 struct kvm_vm_stat {
 61         u32 remote_tlb_flush;
 62 };
 63 
 64 struct kvm_vcpu_stat {
 65         u32 sum_exits;
 66         u32 mmio_exits;
 67         u32 dcr_exits;
 68         u32 signal_exits;
 69         u32 light_exits;
 70         /* Account for special types of light exits: */
 71         u32 itlb_real_miss_exits;
 72         u32 itlb_virt_miss_exits;
 73         u32 dtlb_real_miss_exits;
 74         u32 dtlb_virt_miss_exits;
 75         u32 syscall_exits;
 76         u32 isi_exits;
 77         u32 dsi_exits;
 78         u32 emulated_inst_exits;
 79         u32 dec_exits;
 80         u32 ext_intr_exits;
 81         u32 halt_wakeup;
 82 #ifdef CONFIG_PPC_BOOK3S
 83         u32 pf_storage;
 84         u32 pf_instruc;
 85         u32 sp_storage;
 86         u32 sp_instruc;
 87         u32 queue_intr;
 88         u32 ld;
 89         u32 ld_slow;
 90         u32 st;
 91         u32 st_slow;
 92 #endif
 93 };
 94 
 95 enum kvm_exit_types {
 96         MMIO_EXITS,
 97         DCR_EXITS,
 98         SIGNAL_EXITS,
 99         ITLB_REAL_MISS_EXITS,
100         ITLB_VIRT_MISS_EXITS,
101         DTLB_REAL_MISS_EXITS,
102         DTLB_VIRT_MISS_EXITS,
103         SYSCALL_EXITS,
104         ISI_EXITS,
105         DSI_EXITS,
106         EMULATED_INST_EXITS,
107         EMULATED_MTMSRWE_EXITS,
108         EMULATED_WRTEE_EXITS,
109         EMULATED_MTSPR_EXITS,
110         EMULATED_MFSPR_EXITS,
111         EMULATED_MTMSR_EXITS,
112         EMULATED_MFMSR_EXITS,
113         EMULATED_TLBSX_EXITS,
114         EMULATED_TLBWE_EXITS,
115         EMULATED_RFI_EXITS,
116         DEC_EXITS,
117         EXT_INTR_EXITS,
118         HALT_WAKEUP,
119         USR_PR_INST,
120         FP_UNAVAIL,
121         DEBUG_EXITS,
122         TIMEINGUEST,
123         __NUMBER_OF_KVM_EXIT_TYPES
124 };
125 
126 /* allow access to big endian 32bit upper/lower parts and 64bit var */
127 struct kvmppc_exit_timing {
128         union {
129                 u64 tv64;
130                 struct {
131                         u32 tbu, tbl;
132                 } tv32;
133         };
134 };
135 
136 struct kvm_arch {
137 };
138 
139 struct kvmppc_pte {
140         ulong eaddr;
141         u64 vpage;
142         ulong raddr;
143         bool may_read           : 1;
144         bool may_write          : 1;
145         bool may_execute        : 1;
146 };
147 
148 struct kvmppc_mmu {
149         /* book3s_64 only */
150         void (*slbmte)(struct kvm_vcpu *vcpu, u64 rb, u64 rs);
151         u64  (*slbmfee)(struct kvm_vcpu *vcpu, u64 slb_nr);
152         u64  (*slbmfev)(struct kvm_vcpu *vcpu, u64 slb_nr);
153         void (*slbie)(struct kvm_vcpu *vcpu, u64 slb_nr);
154         void (*slbia)(struct kvm_vcpu *vcpu);
155         /* book3s */
156         void (*mtsrin)(struct kvm_vcpu *vcpu, u32 srnum, ulong value);
157         u32  (*mfsrin)(struct kvm_vcpu *vcpu, u32 srnum);
158         int  (*xlate)(struct kvm_vcpu *vcpu, gva_t eaddr, struct kvmppc_pte *pte, bool data);
159         void (*reset_msr)(struct kvm_vcpu *vcpu);
160         void (*tlbie)(struct kvm_vcpu *vcpu, ulong addr, bool large);
161         int  (*esid_to_vsid)(struct kvm_vcpu *vcpu, ulong esid, u64 *vsid);
162         u64  (*ea_to_vp)(struct kvm_vcpu *vcpu, gva_t eaddr, bool data);
163         bool (*is_dcbz32)(struct kvm_vcpu *vcpu);
164 };
165 
166 struct hpte_cache {
167         struct hlist_node list_pte;
168         struct hlist_node list_pte_long;
169         struct hlist_node list_vpte;
170         struct hlist_node list_vpte_long;
171         struct rcu_head rcu_head;
172         u64 host_va;
173         u64 pfn;
174         ulong slot;
175         struct kvmppc_pte pte;
176 };
177 
178 struct kvm_vcpu_arch {
179         ulong host_stack;
180         u32 host_pid;
181 #ifdef CONFIG_PPC_BOOK3S
182         ulong host_msr;
183         ulong host_r2;
184         void *host_retip;
185         ulong trampoline_lowmem;
186         ulong trampoline_enter;
187         ulong highmem_handler;
188         ulong rmcall;
189         ulong host_paca_phys;
190         struct kvmppc_mmu mmu;
191 #endif
192 
193         ulong gpr[32];
194 
195         u64 fpr[32];
196         u64 fpscr;
197 
198 #ifdef CONFIG_ALTIVEC
199         vector128 vr[32];
200         vector128 vscr;
201 #endif
202 
203 #ifdef CONFIG_VSX
204         u64 vsr[32];
205 #endif
206 
207 #ifdef CONFIG_PPC_BOOK3S
208         /* For Gekko paired singles */
209         u32 qpr[32];
210 #endif
211 
212 #ifdef CONFIG_BOOKE
213         ulong pc;
214         ulong ctr;
215         ulong lr;
216 
217         ulong xer;
218         u32 cr;
219 #endif
220 
221 #ifdef CONFIG_PPC_BOOK3S
222         ulong shadow_msr;
223         ulong hflags;
224         ulong guest_owned_ext;
225 #endif
226         u32 vrsave; /* also USPRG0 */
227         u32 mmucr;
228         ulong sprg4;
229         ulong sprg5;
230         ulong sprg6;
231         ulong sprg7;
232         ulong csrr0;
233         ulong csrr1;
234         ulong dsrr0;
235         ulong dsrr1;
236         ulong mcsrr0;
237         ulong mcsrr1;
238         ulong mcsr;
239         ulong esr;
240         u32 dec;
241         u32 decar;
242         u32 tbl;
243         u32 tbu;
244         u32 tcr;
245         u32 tsr;
246         u32 ivor[64];
247         ulong ivpr;
248         u32 pir;
249         u32 pvr;
250 
251         u32 shadow_pid;
252         u32 pid;
253         u32 swap_pid;
254 
255         u32 ccr0;
256         u32 ccr1;
257         u32 dbcr0;
258         u32 dbcr1;
259         u32 dbsr;
260 
261 #ifdef CONFIG_KVM_EXIT_TIMING
262         struct mutex exit_timing_lock;
263         struct kvmppc_exit_timing timing_exit;
264         struct kvmppc_exit_timing timing_last_enter;
265         u32 last_exit_type;
266         u32 timing_count_type[__NUMBER_OF_KVM_EXIT_TYPES];
267         u64 timing_sum_duration[__NUMBER_OF_KVM_EXIT_TYPES];
268         u64 timing_sum_quad_duration[__NUMBER_OF_KVM_EXIT_TYPES];
269         u64 timing_min_duration[__NUMBER_OF_KVM_EXIT_TYPES];
270         u64 timing_max_duration[__NUMBER_OF_KVM_EXIT_TYPES];
271         u64 timing_last_exit;
272         struct dentry *debugfs_exit_timing;
273 #endif
274 
275 #ifdef CONFIG_BOOKE
276         u32 last_inst;
277         ulong fault_dear;
278         ulong fault_esr;
279         ulong queued_dear;
280         ulong queued_esr;
281 #endif
282         gpa_t paddr_accessed;
283 
284         u8 io_gpr; /* GPR used as IO source/target */
285         u8 mmio_is_bigendian;
286         u8 mmio_sign_extend;
287         u8 dcr_needed;
288         u8 dcr_is_write;
289         u8 osi_needed;
290         u8 osi_enabled;
291 
292         u32 cpr0_cfgaddr; /* holds the last set cpr0_cfgaddr */
293 
294         struct hrtimer dec_timer;
295         struct tasklet_struct tasklet;
296         u64 dec_jiffies;
297         unsigned long pending_exceptions;
298         struct kvm_vcpu_arch_shared *shared;
299         unsigned long magic_page_pa; /* phys addr to map the magic page to */
300         unsigned long magic_page_ea; /* effect. addr to map the magic page to */
301 
302 #ifdef CONFIG_PPC_BOOK3S
303         struct hlist_head hpte_hash_pte[HPTEG_HASH_NUM_PTE];
304         struct hlist_head hpte_hash_pte_long[HPTEG_HASH_NUM_PTE_LONG];
305         struct hlist_head hpte_hash_vpte[HPTEG_HASH_NUM_VPTE];
306         struct hlist_head hpte_hash_vpte_long[HPTEG_HASH_NUM_VPTE_LONG];
307         int hpte_cache_count;
308         spinlock_t mmu_lock;
309 #endif
310 };
311 
312 #endif /* __POWERPC_KVM_HOST_H__ */
313 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp