Revision 98c8573e
b/Makefile.target | ||
---|---|---|
1 | 1 |
# -*- Mode: makefile -*- |
2 | 2 |
|
3 | 3 |
GENERATED_HEADERS = config-target.h |
4 |
CONFIG_NO_KVM = $(if $(subst n,,$(CONFIG_KVM)),n,y) |
|
4 | 5 |
|
5 | 6 |
include ../config-host.mak |
6 | 7 |
include config-devices.mak |
... | ... | |
171 | 172 |
obj-$(CONFIG_VHOST_NET) += vhost.o |
172 | 173 |
obj-y += rwhandler.o |
173 | 174 |
obj-$(CONFIG_KVM) += kvm.o kvm-all.o |
175 |
obj-$(CONFIG_NO_KVM) += kvm-stub.o |
|
174 | 176 |
LIBS+=-lz |
175 | 177 |
|
176 | 178 |
QEMU_CFLAGS += $(VNC_TLS_CFLAGS) |
b/kvm-all.c | ||
---|---|---|
1157 | 1157 |
return r; |
1158 | 1158 |
} |
1159 | 1159 |
|
1160 |
#ifdef KVM_IOEVENTFD |
|
1161 | 1160 |
int kvm_set_ioeventfd_pio_word(int fd, uint16_t addr, uint16_t val, bool assign) |
1162 | 1161 |
{ |
1162 |
#ifdef KVM_IOEVENTFD |
|
1163 | 1163 |
struct kvm_ioeventfd kick = { |
1164 | 1164 |
.datamatch = val, |
1165 | 1165 |
.addr = addr, |
... | ... | |
1176 | 1176 |
if (r < 0) |
1177 | 1177 |
return r; |
1178 | 1178 |
return 0; |
1179 |
} |
|
1179 |
#else |
|
1180 |
return -ENOSYS; |
|
1180 | 1181 |
#endif |
1182 |
} |
b/kvm-stub.c | ||
---|---|---|
1 |
/* |
|
2 |
* QEMU KVM stub |
|
3 |
* |
|
4 |
* Copyright Red Hat, Inc. 2010 |
|
5 |
* |
|
6 |
* Author: Paolo Bonzini <pbonzini@redhat.com> |
|
7 |
* |
|
8 |
* This work is licensed under the terms of the GNU GPL, version 2 or later. |
|
9 |
* See the COPYING file in the top-level directory. |
|
10 |
* |
|
11 |
*/ |
|
12 |
|
|
13 |
#include "qemu-common.h" |
|
14 |
#include "sysemu.h" |
|
15 |
#include "hw/hw.h" |
|
16 |
#include "gdbstub.h" |
|
17 |
#include "kvm.h" |
|
18 |
|
|
19 |
int kvm_irqchip_in_kernel(void) |
|
20 |
{ |
|
21 |
return 0; |
|
22 |
} |
|
23 |
|
|
24 |
int kvm_pit_in_kernel(void) |
|
25 |
{ |
|
26 |
return 0; |
|
27 |
} |
|
28 |
|
|
29 |
|
|
30 |
int kvm_init_vcpu(CPUState *env) |
|
31 |
{ |
|
32 |
return -ENOSYS; |
|
33 |
} |
|
34 |
|
|
35 |
int kvm_log_start(target_phys_addr_t phys_addr, ram_addr_t size) |
|
36 |
{ |
|
37 |
return -ENOSYS; |
|
38 |
} |
|
39 |
|
|
40 |
int kvm_log_stop(target_phys_addr_t phys_addr, ram_addr_t size) |
|
41 |
{ |
|
42 |
return -ENOSYS; |
|
43 |
} |
|
44 |
|
|
45 |
int kvm_coalesce_mmio_region(target_phys_addr_t start, ram_addr_t size) |
|
46 |
{ |
|
47 |
return -ENOSYS; |
|
48 |
} |
|
49 |
|
|
50 |
int kvm_uncoalesce_mmio_region(target_phys_addr_t start, ram_addr_t size) |
|
51 |
{ |
|
52 |
return -ENOSYS; |
|
53 |
} |
|
54 |
|
|
55 |
int kvm_check_extension(KVMState *s, unsigned int extension) |
|
56 |
{ |
|
57 |
return 0; |
|
58 |
} |
|
59 |
|
|
60 |
int kvm_init(int smp_cpus) |
|
61 |
{ |
|
62 |
return -ENOSYS; |
|
63 |
} |
|
64 |
|
|
65 |
void kvm_flush_coalesced_mmio_buffer(void) |
|
66 |
{ |
|
67 |
} |
|
68 |
|
|
69 |
void kvm_cpu_synchronize_state(CPUState *env) |
|
70 |
{ |
|
71 |
} |
|
72 |
|
|
73 |
void kvm_cpu_synchronize_post_reset(CPUState *env) |
|
74 |
{ |
|
75 |
} |
|
76 |
|
|
77 |
void kvm_cpu_synchronize_post_init(CPUState *env) |
|
78 |
{ |
|
79 |
} |
|
80 |
|
|
81 |
int kvm_cpu_exec(CPUState *env) |
|
82 |
{ |
|
83 |
abort (); |
|
84 |
} |
|
85 |
|
|
86 |
int kvm_has_sync_mmu(void) |
|
87 |
{ |
|
88 |
return 0; |
|
89 |
} |
|
90 |
|
|
91 |
int kvm_has_vcpu_events(void) |
|
92 |
{ |
|
93 |
return 0; |
|
94 |
} |
|
95 |
|
|
96 |
int kvm_has_robust_singlestep(void) |
|
97 |
{ |
|
98 |
return 0; |
|
99 |
} |
|
100 |
|
|
101 |
void kvm_setup_guest_memory(void *start, size_t size) |
|
102 |
{ |
|
103 |
} |
|
104 |
|
|
105 |
int kvm_update_guest_debug(CPUState *env, unsigned long reinject_trap) |
|
106 |
{ |
|
107 |
tb_flush(env); |
|
108 |
return 0; |
|
109 |
} |
|
110 |
|
|
111 |
int kvm_insert_breakpoint(CPUState *current_env, target_ulong addr, |
|
112 |
target_ulong len, int type) |
|
113 |
{ |
|
114 |
return -EINVAL; |
|
115 |
} |
|
116 |
|
|
117 |
int kvm_remove_breakpoint(CPUState *current_env, target_ulong addr, |
|
118 |
target_ulong len, int type) |
|
119 |
{ |
|
120 |
return -EINVAL; |
|
121 |
} |
|
122 |
|
|
123 |
void kvm_remove_all_breakpoints(CPUState *current_env) |
|
124 |
{ |
|
125 |
} |
|
126 |
|
|
127 |
#ifndef _WIN32 |
|
128 |
int kvm_set_signal_mask(CPUState *env, const sigset_t *sigset) |
|
129 |
{ |
|
130 |
abort(); |
|
131 |
} |
|
132 |
#endif |
|
133 |
|
|
134 |
int kvm_set_ioeventfd_pio_word(int fd, uint16_t addr, uint16_t val, bool assign) |
|
135 |
{ |
|
136 |
return -ENOSYS; |
|
137 |
} |
b/kvm.h | ||
---|---|---|
23 | 23 |
#include <linux/kvm.h> |
24 | 24 |
#endif |
25 | 25 |
|
26 |
#ifdef CONFIG_KVM |
|
27 | 26 |
extern int kvm_allowed; |
27 |
|
|
28 |
#if defined CONFIG_KVM || !defined NEED_CPU_H |
|
28 | 29 |
#define kvm_enabled() (kvm_allowed) |
29 | 30 |
#else |
30 | 31 |
#define kvm_enabled() (0) |
... | ... | |
167 | 168 |
} |
168 | 169 |
} |
169 | 170 |
|
170 |
#if defined(KVM_IOEVENTFD) && defined(CONFIG_KVM) |
|
171 |
int kvm_set_ioeventfd_pio_word(int fd, uint16_t adr, uint16_t val, bool assign); |
|
172 |
#else |
|
173 |
static inline |
|
174 |
int kvm_set_ioeventfd_pio_word(int fd, uint16_t adr, uint16_t val, bool assign) |
|
175 |
{ |
|
176 |
return -ENOSYS; |
|
177 |
} |
|
178 | 171 |
#endif |
179 | 172 |
|
180 |
#endif
|
|
173 |
int kvm_set_ioeventfd_pio_word(int fd, uint16_t adr, uint16_t val, bool assign);
|
|
181 | 174 |
#endif |
b/vl.c | ||
---|---|---|
3157 | 3157 |
do_smbios_option(optarg); |
3158 | 3158 |
break; |
3159 | 3159 |
case QEMU_OPTION_enable_kvm: |
3160 |
if (!(kvm_available())) { |
|
3161 |
printf("Option %s not supported for this target\n", popt->name); |
|
3162 |
exit(1); |
|
3163 |
} |
|
3164 | 3160 |
kvm_allowed = 1; |
3165 | 3161 |
break; |
3166 | 3162 |
case QEMU_OPTION_usb: |
... | ... | |
3506 | 3502 |
exit(1); |
3507 | 3503 |
} |
3508 | 3504 |
|
3509 |
if (kvm_enabled()) { |
|
3510 |
int ret; |
|
3511 |
|
|
3512 |
ret = kvm_init(smp_cpus); |
|
3505 |
if (kvm_allowed) { |
|
3506 |
int ret = kvm_init(smp_cpus); |
|
3513 | 3507 |
if (ret < 0) { |
3514 |
fprintf(stderr, "failed to initialize KVM\n"); |
|
3508 |
if (!kvm_available()) { |
|
3509 |
printf("KVM not supported for this target\n"); |
|
3510 |
} else { |
|
3511 |
fprintf(stderr, "failed to initialize KVM: %s\n", strerror(-ret)); |
|
3512 |
} |
|
3515 | 3513 |
exit(1); |
3516 | 3514 |
} |
3517 | 3515 |
} |
Also available in: Unified diff