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