xref: /openbmc/linux/include/linux/kvm_host.h (revision 62d9f0dbc92d7e398fde53fc6021338393522e68)
1edf88417SAvi Kivity #ifndef __KVM_HOST_H
2edf88417SAvi Kivity #define __KVM_HOST_H
3edf88417SAvi Kivity 
4edf88417SAvi Kivity /*
5edf88417SAvi Kivity  * This work is licensed under the terms of the GNU GPL, version 2.  See
6edf88417SAvi Kivity  * the COPYING file in the top-level directory.
7edf88417SAvi Kivity  */
8edf88417SAvi Kivity 
9edf88417SAvi Kivity #include <linux/types.h>
10edf88417SAvi Kivity #include <linux/hardirq.h>
11edf88417SAvi Kivity #include <linux/list.h>
12edf88417SAvi Kivity #include <linux/mutex.h>
13edf88417SAvi Kivity #include <linux/spinlock.h>
14edf88417SAvi Kivity #include <linux/signal.h>
15edf88417SAvi Kivity #include <linux/sched.h>
16edf88417SAvi Kivity #include <linux/mm.h>
17edf88417SAvi Kivity #include <linux/preempt.h>
18d4c9ff2dSFeng(Eric) Liu #include <linux/marker.h>
19edf88417SAvi Kivity #include <asm/signal.h>
20edf88417SAvi Kivity 
21edf88417SAvi Kivity #include <linux/kvm.h>
22edf88417SAvi Kivity #include <linux/kvm_para.h>
23edf88417SAvi Kivity 
24edf88417SAvi Kivity #include <linux/kvm_types.h>
25edf88417SAvi Kivity 
26edf88417SAvi Kivity #include <asm/kvm_host.h>
27edf88417SAvi Kivity 
28edf88417SAvi Kivity /*
29edf88417SAvi Kivity  * vcpu->requests bit members
30edf88417SAvi Kivity  */
31edf88417SAvi Kivity #define KVM_REQ_TLB_FLUSH          0
322f52d58cSAvi Kivity #define KVM_REQ_MIGRATE_TIMER      1
33b209749fSAvi Kivity #define KVM_REQ_REPORT_TPR_ACCESS  2
342e53d63aSMarcelo Tosatti #define KVM_REQ_MMU_RELOAD         3
3571c4dfafSJoerg Roedel #define KVM_REQ_TRIPLE_FAULT       4
36edf88417SAvi Kivity 
37edf88417SAvi Kivity struct kvm_vcpu;
38edf88417SAvi Kivity extern struct kmem_cache *kvm_vcpu_cache;
39edf88417SAvi Kivity 
40edf88417SAvi Kivity /*
41edf88417SAvi Kivity  * It would be nice to use something smarter than a linear search, TBD...
42edf88417SAvi Kivity  * Thankfully we dont expect many devices to register (famous last words :),
43edf88417SAvi Kivity  * so until then it will suffice.  At least its abstracted so we can change
44edf88417SAvi Kivity  * in one place.
45edf88417SAvi Kivity  */
46edf88417SAvi Kivity struct kvm_io_bus {
47edf88417SAvi Kivity 	int                   dev_count;
48edf88417SAvi Kivity #define NR_IOBUS_DEVS 6
49edf88417SAvi Kivity 	struct kvm_io_device *devs[NR_IOBUS_DEVS];
50edf88417SAvi Kivity };
51edf88417SAvi Kivity 
52edf88417SAvi Kivity void kvm_io_bus_init(struct kvm_io_bus *bus);
53edf88417SAvi Kivity void kvm_io_bus_destroy(struct kvm_io_bus *bus);
54edf88417SAvi Kivity struct kvm_io_device *kvm_io_bus_find_dev(struct kvm_io_bus *bus, gpa_t addr);
55edf88417SAvi Kivity void kvm_io_bus_register_dev(struct kvm_io_bus *bus,
56edf88417SAvi Kivity 			     struct kvm_io_device *dev);
57edf88417SAvi Kivity 
58edf88417SAvi Kivity struct kvm_vcpu {
59edf88417SAvi Kivity 	struct kvm *kvm;
6031bb117eSHollis Blanchard #ifdef CONFIG_PREEMPT_NOTIFIERS
61edf88417SAvi Kivity 	struct preempt_notifier preempt_notifier;
6231bb117eSHollis Blanchard #endif
63edf88417SAvi Kivity 	int vcpu_id;
64edf88417SAvi Kivity 	struct mutex mutex;
65edf88417SAvi Kivity 	int   cpu;
66edf88417SAvi Kivity 	struct kvm_run *run;
67edf88417SAvi Kivity 	int guest_mode;
68edf88417SAvi Kivity 	unsigned long requests;
69edf88417SAvi Kivity 	struct kvm_guest_debug guest_debug;
70edf88417SAvi Kivity 	int fpu_active;
71edf88417SAvi Kivity 	int guest_fpu_loaded;
72edf88417SAvi Kivity 	wait_queue_head_t wq;
73edf88417SAvi Kivity 	int sigset_active;
74edf88417SAvi Kivity 	sigset_t sigset;
75edf88417SAvi Kivity 	struct kvm_vcpu_stat stat;
76edf88417SAvi Kivity 
77edf88417SAvi Kivity #ifdef CONFIG_HAS_IOMEM
78edf88417SAvi Kivity 	int mmio_needed;
79edf88417SAvi Kivity 	int mmio_read_completed;
80edf88417SAvi Kivity 	int mmio_is_write;
81edf88417SAvi Kivity 	int mmio_size;
82edf88417SAvi Kivity 	unsigned char mmio_data[8];
83edf88417SAvi Kivity 	gpa_t mmio_phys_addr;
84edf88417SAvi Kivity #endif
85edf88417SAvi Kivity 
86edf88417SAvi Kivity 	struct kvm_vcpu_arch arch;
87edf88417SAvi Kivity };
88edf88417SAvi Kivity 
89edf88417SAvi Kivity struct kvm_memory_slot {
90edf88417SAvi Kivity 	gfn_t base_gfn;
91edf88417SAvi Kivity 	unsigned long npages;
92edf88417SAvi Kivity 	unsigned long flags;
93edf88417SAvi Kivity 	unsigned long *rmap;
94edf88417SAvi Kivity 	unsigned long *dirty_bitmap;
9505da4558SMarcelo Tosatti 	struct {
9605da4558SMarcelo Tosatti 		unsigned long rmap_pde;
9705da4558SMarcelo Tosatti 		int write_count;
9805da4558SMarcelo Tosatti 	} *lpage_info;
99edf88417SAvi Kivity 	unsigned long userspace_addr;
100edf88417SAvi Kivity 	int user_alloc;
101edf88417SAvi Kivity };
102edf88417SAvi Kivity 
103edf88417SAvi Kivity struct kvm {
104aaee2c94SMarcelo Tosatti 	struct mutex lock; /* protects the vcpus array and APIC accesses */
105aaee2c94SMarcelo Tosatti 	spinlock_t mmu_lock;
10672dc67a6SIzik Eidus 	struct rw_semaphore slots_lock;
107edf88417SAvi Kivity 	struct mm_struct *mm; /* userspace tied to this vm */
108edf88417SAvi Kivity 	int nmemslots;
109edf88417SAvi Kivity 	struct kvm_memory_slot memslots[KVM_MEMORY_SLOTS +
110edf88417SAvi Kivity 					KVM_PRIVATE_MEM_SLOTS];
111edf88417SAvi Kivity 	struct kvm_vcpu *vcpus[KVM_MAX_VCPUS];
112edf88417SAvi Kivity 	struct list_head vm_list;
113edf88417SAvi Kivity 	struct file *filp;
114edf88417SAvi Kivity 	struct kvm_io_bus mmio_bus;
115edf88417SAvi Kivity 	struct kvm_io_bus pio_bus;
116edf88417SAvi Kivity 	struct kvm_vm_stat stat;
117edf88417SAvi Kivity 	struct kvm_arch arch;
118d39f13b0SIzik Eidus 	atomic_t users_count;
119edf88417SAvi Kivity };
120edf88417SAvi Kivity 
121edf88417SAvi Kivity /* The guest did something we don't support. */
122edf88417SAvi Kivity #define pr_unimpl(vcpu, fmt, ...)					\
123edf88417SAvi Kivity  do {									\
124edf88417SAvi Kivity 	if (printk_ratelimit())						\
125edf88417SAvi Kivity 		printk(KERN_ERR "kvm: %i: cpu%i " fmt,			\
126edf88417SAvi Kivity 		       current->tgid, (vcpu)->vcpu_id , ## __VA_ARGS__); \
127edf88417SAvi Kivity  } while (0)
128edf88417SAvi Kivity 
129edf88417SAvi Kivity #define kvm_printf(kvm, fmt ...) printk(KERN_DEBUG fmt)
130edf88417SAvi Kivity #define vcpu_printf(vcpu, fmt...) kvm_printf(vcpu->kvm, fmt)
131edf88417SAvi Kivity 
132edf88417SAvi Kivity int kvm_vcpu_init(struct kvm_vcpu *vcpu, struct kvm *kvm, unsigned id);
133edf88417SAvi Kivity void kvm_vcpu_uninit(struct kvm_vcpu *vcpu);
134edf88417SAvi Kivity 
135edf88417SAvi Kivity void vcpu_load(struct kvm_vcpu *vcpu);
136edf88417SAvi Kivity void vcpu_put(struct kvm_vcpu *vcpu);
137edf88417SAvi Kivity 
138edf88417SAvi Kivity void decache_vcpus_on_cpu(int cpu);
139edf88417SAvi Kivity 
140edf88417SAvi Kivity 
141edf88417SAvi Kivity int kvm_init(void *opaque, unsigned int vcpu_size,
142edf88417SAvi Kivity 		  struct module *module);
143edf88417SAvi Kivity void kvm_exit(void);
144edf88417SAvi Kivity 
145d39f13b0SIzik Eidus void kvm_get_kvm(struct kvm *kvm);
146d39f13b0SIzik Eidus void kvm_put_kvm(struct kvm *kvm);
147d39f13b0SIzik Eidus 
148edf88417SAvi Kivity #define HPA_MSB ((sizeof(hpa_t) * 8) - 1)
149edf88417SAvi Kivity #define HPA_ERR_MASK ((hpa_t)1 << HPA_MSB)
150edf88417SAvi Kivity static inline int is_error_hpa(hpa_t hpa) { return hpa >> HPA_MSB; }
151edf88417SAvi Kivity struct page *gva_to_page(struct kvm_vcpu *vcpu, gva_t gva);
152edf88417SAvi Kivity 
153edf88417SAvi Kivity extern struct page *bad_page;
15435149e21SAnthony Liguori extern pfn_t bad_pfn;
155edf88417SAvi Kivity 
156edf88417SAvi Kivity int is_error_page(struct page *page);
15735149e21SAnthony Liguori int is_error_pfn(pfn_t pfn);
158edf88417SAvi Kivity int kvm_is_error_hva(unsigned long addr);
159edf88417SAvi Kivity int kvm_set_memory_region(struct kvm *kvm,
160edf88417SAvi Kivity 			  struct kvm_userspace_memory_region *mem,
161edf88417SAvi Kivity 			  int user_alloc);
162edf88417SAvi Kivity int __kvm_set_memory_region(struct kvm *kvm,
163edf88417SAvi Kivity 			    struct kvm_userspace_memory_region *mem,
164edf88417SAvi Kivity 			    int user_alloc);
165edf88417SAvi Kivity int kvm_arch_set_memory_region(struct kvm *kvm,
166edf88417SAvi Kivity 				struct kvm_userspace_memory_region *mem,
167edf88417SAvi Kivity 				struct kvm_memory_slot old,
168edf88417SAvi Kivity 				int user_alloc);
169edf88417SAvi Kivity gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn);
170edf88417SAvi Kivity struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn);
17105da4558SMarcelo Tosatti unsigned long gfn_to_hva(struct kvm *kvm, gfn_t gfn);
172edf88417SAvi Kivity void kvm_release_page_clean(struct page *page);
173edf88417SAvi Kivity void kvm_release_page_dirty(struct page *page);
17435149e21SAnthony Liguori void kvm_set_page_dirty(struct page *page);
17535149e21SAnthony Liguori void kvm_set_page_accessed(struct page *page);
17635149e21SAnthony Liguori 
17735149e21SAnthony Liguori pfn_t gfn_to_pfn(struct kvm *kvm, gfn_t gfn);
17835149e21SAnthony Liguori void kvm_release_pfn_dirty(pfn_t);
17935149e21SAnthony Liguori void kvm_release_pfn_clean(pfn_t pfn);
18035149e21SAnthony Liguori void kvm_set_pfn_dirty(pfn_t pfn);
18135149e21SAnthony Liguori void kvm_set_pfn_accessed(pfn_t pfn);
18235149e21SAnthony Liguori void kvm_get_pfn(pfn_t pfn);
18335149e21SAnthony Liguori 
184edf88417SAvi Kivity int kvm_read_guest_page(struct kvm *kvm, gfn_t gfn, void *data, int offset,
185edf88417SAvi Kivity 			int len);
1867ec54588SMarcelo Tosatti int kvm_read_guest_atomic(struct kvm *kvm, gpa_t gpa, void *data,
1877ec54588SMarcelo Tosatti 			  unsigned long len);
188edf88417SAvi Kivity int kvm_read_guest(struct kvm *kvm, gpa_t gpa, void *data, unsigned long len);
189edf88417SAvi Kivity int kvm_write_guest_page(struct kvm *kvm, gfn_t gfn, const void *data,
190edf88417SAvi Kivity 			 int offset, int len);
191edf88417SAvi Kivity int kvm_write_guest(struct kvm *kvm, gpa_t gpa, const void *data,
192edf88417SAvi Kivity 		    unsigned long len);
193edf88417SAvi Kivity int kvm_clear_guest_page(struct kvm *kvm, gfn_t gfn, int offset, int len);
194edf88417SAvi Kivity int kvm_clear_guest(struct kvm *kvm, gpa_t gpa, unsigned long len);
195edf88417SAvi Kivity struct kvm_memory_slot *gfn_to_memslot(struct kvm *kvm, gfn_t gfn);
196edf88417SAvi Kivity int kvm_is_visible_gfn(struct kvm *kvm, gfn_t gfn);
197edf88417SAvi Kivity void mark_page_dirty(struct kvm *kvm, gfn_t gfn);
198edf88417SAvi Kivity 
199edf88417SAvi Kivity void kvm_vcpu_block(struct kvm_vcpu *vcpu);
200edf88417SAvi Kivity void kvm_resched(struct kvm_vcpu *vcpu);
201edf88417SAvi Kivity void kvm_load_guest_fpu(struct kvm_vcpu *vcpu);
202edf88417SAvi Kivity void kvm_put_guest_fpu(struct kvm_vcpu *vcpu);
203edf88417SAvi Kivity void kvm_flush_remote_tlbs(struct kvm *kvm);
2042e53d63aSMarcelo Tosatti void kvm_reload_remote_mmus(struct kvm *kvm);
205edf88417SAvi Kivity 
206edf88417SAvi Kivity long kvm_arch_dev_ioctl(struct file *filp,
207edf88417SAvi Kivity 			unsigned int ioctl, unsigned long arg);
208edf88417SAvi Kivity long kvm_arch_vcpu_ioctl(struct file *filp,
209edf88417SAvi Kivity 			 unsigned int ioctl, unsigned long arg);
210edf88417SAvi Kivity void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu);
211edf88417SAvi Kivity void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu);
212edf88417SAvi Kivity 
213edf88417SAvi Kivity int kvm_dev_ioctl_check_extension(long ext);
214edf88417SAvi Kivity 
215edf88417SAvi Kivity int kvm_get_dirty_log(struct kvm *kvm,
216edf88417SAvi Kivity 			struct kvm_dirty_log *log, int *is_dirty);
217edf88417SAvi Kivity int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
218edf88417SAvi Kivity 				struct kvm_dirty_log *log);
219edf88417SAvi Kivity 
220edf88417SAvi Kivity int kvm_vm_ioctl_set_memory_region(struct kvm *kvm,
221edf88417SAvi Kivity 				   struct
222edf88417SAvi Kivity 				   kvm_userspace_memory_region *mem,
223edf88417SAvi Kivity 				   int user_alloc);
224edf88417SAvi Kivity long kvm_arch_vm_ioctl(struct file *filp,
225edf88417SAvi Kivity 		       unsigned int ioctl, unsigned long arg);
226edf88417SAvi Kivity void kvm_arch_destroy_vm(struct kvm *kvm);
227edf88417SAvi Kivity 
228edf88417SAvi Kivity int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu);
229edf88417SAvi Kivity int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu);
230edf88417SAvi Kivity 
231edf88417SAvi Kivity int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,
232edf88417SAvi Kivity 				    struct kvm_translation *tr);
233edf88417SAvi Kivity 
234edf88417SAvi Kivity int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs);
235edf88417SAvi Kivity int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs);
236edf88417SAvi Kivity int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu,
237edf88417SAvi Kivity 				  struct kvm_sregs *sregs);
238edf88417SAvi Kivity int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
239edf88417SAvi Kivity 				  struct kvm_sregs *sregs);
240*62d9f0dbSMarcelo Tosatti int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu,
241*62d9f0dbSMarcelo Tosatti 				    struct kvm_mp_state *mp_state);
242*62d9f0dbSMarcelo Tosatti int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,
243*62d9f0dbSMarcelo Tosatti 				    struct kvm_mp_state *mp_state);
244edf88417SAvi Kivity int kvm_arch_vcpu_ioctl_debug_guest(struct kvm_vcpu *vcpu,
245edf88417SAvi Kivity 				    struct kvm_debug_guest *dbg);
246edf88417SAvi Kivity int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run);
247edf88417SAvi Kivity 
248edf88417SAvi Kivity int kvm_arch_init(void *opaque);
249edf88417SAvi Kivity void kvm_arch_exit(void);
250edf88417SAvi Kivity 
251edf88417SAvi Kivity int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu);
252edf88417SAvi Kivity void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu);
253edf88417SAvi Kivity 
254edf88417SAvi Kivity void kvm_arch_vcpu_free(struct kvm_vcpu *vcpu);
255edf88417SAvi Kivity void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu);
256edf88417SAvi Kivity void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu);
257edf88417SAvi Kivity struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm, unsigned int id);
258edf88417SAvi Kivity int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu);
259edf88417SAvi Kivity void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu);
260edf88417SAvi Kivity 
261edf88417SAvi Kivity int kvm_arch_vcpu_reset(struct kvm_vcpu *vcpu);
262edf88417SAvi Kivity void kvm_arch_hardware_enable(void *garbage);
263edf88417SAvi Kivity void kvm_arch_hardware_disable(void *garbage);
264edf88417SAvi Kivity int kvm_arch_hardware_setup(void);
265edf88417SAvi Kivity void kvm_arch_hardware_unsetup(void);
266edf88417SAvi Kivity void kvm_arch_check_processor_compat(void *rtn);
267edf88417SAvi Kivity int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu);
268edf88417SAvi Kivity 
269edf88417SAvi Kivity void kvm_free_physmem(struct kvm *kvm);
270edf88417SAvi Kivity 
271edf88417SAvi Kivity struct  kvm *kvm_arch_create_vm(void);
272edf88417SAvi Kivity void kvm_arch_destroy_vm(struct kvm *kvm);
273edf88417SAvi Kivity 
274edf88417SAvi Kivity int kvm_cpu_get_interrupt(struct kvm_vcpu *v);
275edf88417SAvi Kivity int kvm_cpu_has_interrupt(struct kvm_vcpu *v);
2763d80840dSMarcelo Tosatti int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu);
2775736199aSZhang Xiantao void kvm_vcpu_kick(struct kvm_vcpu *vcpu);
278edf88417SAvi Kivity 
279edf88417SAvi Kivity static inline void kvm_guest_enter(void)
280edf88417SAvi Kivity {
281edf88417SAvi Kivity 	account_system_vtime(current);
282edf88417SAvi Kivity 	current->flags |= PF_VCPU;
283edf88417SAvi Kivity }
284edf88417SAvi Kivity 
285edf88417SAvi Kivity static inline void kvm_guest_exit(void)
286edf88417SAvi Kivity {
287edf88417SAvi Kivity 	account_system_vtime(current);
288edf88417SAvi Kivity 	current->flags &= ~PF_VCPU;
289edf88417SAvi Kivity }
290edf88417SAvi Kivity 
291edf88417SAvi Kivity static inline int memslot_id(struct kvm *kvm, struct kvm_memory_slot *slot)
292edf88417SAvi Kivity {
293edf88417SAvi Kivity 	return slot - kvm->memslots;
294edf88417SAvi Kivity }
295edf88417SAvi Kivity 
296edf88417SAvi Kivity static inline gpa_t gfn_to_gpa(gfn_t gfn)
297edf88417SAvi Kivity {
298edf88417SAvi Kivity 	return (gpa_t)gfn << PAGE_SHIFT;
299edf88417SAvi Kivity }
300edf88417SAvi Kivity 
3012f52d58cSAvi Kivity static inline void kvm_migrate_apic_timer(struct kvm_vcpu *vcpu)
3022f52d58cSAvi Kivity {
3032f52d58cSAvi Kivity 	set_bit(KVM_REQ_MIGRATE_TIMER, &vcpu->requests);
3042f52d58cSAvi Kivity }
3052f52d58cSAvi Kivity 
306edf88417SAvi Kivity enum kvm_stat_kind {
307edf88417SAvi Kivity 	KVM_STAT_VM,
308edf88417SAvi Kivity 	KVM_STAT_VCPU,
309edf88417SAvi Kivity };
310edf88417SAvi Kivity 
311edf88417SAvi Kivity struct kvm_stats_debugfs_item {
312edf88417SAvi Kivity 	const char *name;
313edf88417SAvi Kivity 	int offset;
314edf88417SAvi Kivity 	enum kvm_stat_kind kind;
315edf88417SAvi Kivity 	struct dentry *dentry;
316edf88417SAvi Kivity };
317edf88417SAvi Kivity extern struct kvm_stats_debugfs_item debugfs_entries[];
318d4c9ff2dSFeng(Eric) Liu extern struct dentry *debugfs_dir;
319d4c9ff2dSFeng(Eric) Liu 
320d4c9ff2dSFeng(Eric) Liu #ifdef CONFIG_KVM_TRACE
321d4c9ff2dSFeng(Eric) Liu int kvm_trace_ioctl(unsigned int ioctl, unsigned long arg);
322d4c9ff2dSFeng(Eric) Liu void kvm_trace_cleanup(void);
323d4c9ff2dSFeng(Eric) Liu #else
324d4c9ff2dSFeng(Eric) Liu static inline
325d4c9ff2dSFeng(Eric) Liu int kvm_trace_ioctl(unsigned int ioctl, unsigned long arg)
326d4c9ff2dSFeng(Eric) Liu {
327d4c9ff2dSFeng(Eric) Liu 	return -EINVAL;
328d4c9ff2dSFeng(Eric) Liu }
329d4c9ff2dSFeng(Eric) Liu #define kvm_trace_cleanup() ((void)0)
330d4c9ff2dSFeng(Eric) Liu #endif
331edf88417SAvi Kivity 
332edf88417SAvi Kivity #endif
333