@@ -491,7 +491,7 @@ void hpet_disable_pit(void)
{
PITChannelState *s = &pit_state.channels[0];
- if (kvm_enabled() && qemu_kvm_pit_in_kernel()) {
+ if (kvm_enabled() && kvm_pit_in_kernel()) {
if (qemu_kvm_has_pit_state2()) {
kvm_hpet_disable_kpit();
} else {
@@ -515,7 +515,7 @@ void hpet_enable_pit(void)
PITState *pit = &pit_state;
PITChannelState *s = &pit->channels[0];
- if (kvm_enabled() && qemu_kvm_pit_in_kernel()) {
+ if (kvm_enabled() && kvm_pit_in_kernel()) {
if (qemu_kvm_has_pit_state2()) {
kvm_hpet_enable_kpit();
} else {
@@ -951,7 +951,7 @@ static void pc_init1(ram_addr_t ram_size,
ioapic_irq_hack = isa_irq;
}
#ifdef CONFIG_KVM_PIT
- if (kvm_enabled() && qemu_kvm_pit_in_kernel())
+ if (kvm_enabled() && kvm_pit_in_kernel())
pit = kvm_pit_init(0x40, isa_reserve_irq(0));
else
#endif
@@ -56,7 +56,7 @@ static void kvm_get_pit_ch2(PITState *pit,
{
struct kvm_pit_state pit_state;
- if (kvm_enabled() && qemu_kvm_pit_in_kernel()) {
+ if (kvm_enabled() && kvm_pit_in_kernel()) {
kvm_get_pit(kvm_context, &pit_state);
pit->channels[2].mode = pit_state.channels[2].mode;
pit->channels[2].count = pit_state.channels[2].count;
@@ -71,7 +71,7 @@ static void kvm_get_pit_ch2(PITState *pit,
static void kvm_set_pit_ch2(PITState *pit,
struct kvm_pit_state *inkernel_state)
{
- if (kvm_enabled() && qemu_kvm_pit_in_kernel()) {
+ if (kvm_enabled() && kvm_pit_in_kernel()) {
inkernel_state->channels[2].mode = pit->channels[2].mode;
inkernel_state->channels[2].count = pit->channels[2].count;
inkernel_state->channels[2].count_load_time =
@@ -164,13 +164,13 @@ int kvm_irqchip_in_kernel(void)
return kvm_state->irqchip_in_kernel;
}
-#ifdef KVM_UPSTREAM
int kvm_pit_in_kernel(void)
{
return kvm_state->pit_in_kernel;
}
+#ifdef KVM_UPSTREAM
int kvm_init_vcpu(CPUState *env)
{
KVMState *s = kvm_state;
@@ -68,10 +68,10 @@ int kvm_remove_breakpoint(CPUState *current_env, target_ulong addr,
target_ulong len, int type);
void kvm_remove_all_breakpoints(CPUState *current_env);
int kvm_update_guest_debug(CPUState *env, unsigned long reinject_trap);
+#endif /* KVM_UPSTREAM */
int kvm_pit_in_kernel(void);
int kvm_irqchip_in_kernel(void);
-#endif /* KVM_UPSTREAM */
/* internal API */
@@ -119,13 +119,13 @@ static int kvm_create_pit(kvm_context_t kvm)
#ifdef KVM_CAP_PIT
int r;
- kvm->pit_in_kernel = 0;
+ kvm_state->pit_in_kernel = 0;
if (!kvm->no_pit_creation) {
r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_PIT);
if (r > 0) {
r = kvm_vm_ioctl(kvm_state, KVM_CREATE_PIT);
if (r >= 0)
- kvm->pit_in_kernel = 1;
+ kvm_state->pit_in_kernel = 1;
else {
fprintf(stderr, "Create kernel PIC irqchip failed\n");
return r;
@@ -311,14 +311,14 @@ int kvm_set_lapic(CPUState *env, struct kvm_lapic_state *s)
int kvm_get_pit(kvm_context_t kvm, struct kvm_pit_state *s)
{
- if (!kvm->pit_in_kernel)
+ if (!kvm_pit_in_kernel())
return 0;
return kvm_vm_ioctl(kvm_state, KVM_GET_PIT, s);
}
int kvm_set_pit(kvm_context_t kvm, struct kvm_pit_state *s)
{
- if (!kvm->pit_in_kernel)
+ if (!kvm_pit_in_kernel())
return 0;
return kvm_vm_ioctl(kvm_state, KVM_SET_PIT, s);
}
@@ -326,14 +326,14 @@ int kvm_set_pit(kvm_context_t kvm, struct kvm_pit_state *s)
#ifdef KVM_CAP_PIT_STATE2
int kvm_get_pit2(kvm_context_t kvm, struct kvm_pit_state2 *ps2)
{
- if (!kvm->pit_in_kernel)
+ if (!kvm_pit_in_kernel())
return 0;
return kvm_vm_ioctl(kvm_state, KVM_GET_PIT2, ps2);
}
int kvm_set_pit2(kvm_context_t kvm, struct kvm_pit_state2 *ps2)
{
- if (!kvm->pit_in_kernel)
+ if (!kvm_pit_in_kernel())
return 0;
return kvm_vm_ioctl(kvm_state, KVM_SET_PIT2, ps2);
}
@@ -1040,11 +1040,6 @@ int kvm_set_signal_mask(CPUState *env, const sigset_t *sigset)
return r;
}
-int kvm_pit_in_kernel(kvm_context_t kvm)
-{
- return kvm->pit_in_kernel;
-}
-
int kvm_inject_nmi(CPUState *env)
{
#ifdef KVM_CAP_USER_NMI
@@ -64,8 +64,6 @@ struct kvm_context {
int irqchip_inject_ioctl;
/// do not create in-kernel pit if set
int no_pit_creation;
- /// in-kernel pit status
- int pit_in_kernel;
#ifdef KVM_CAP_IRQ_ROUTING
struct kvm_irq_routing *irq_routes;
int nr_allocated_irq_routes;
@@ -563,13 +561,6 @@ void kvm_inject_x86_mce(CPUState *cenv, int bank, uint64_t status,
int abort_on_error);
/*!
- * \brief Query wheather in kernel pit is used
- *
- * \param kvm Pointer to the current kvm_context
- */
-int kvm_pit_in_kernel(kvm_context_t kvm);
-
-/*!
* \brief Initialize coalesced MMIO
*
* Check for coalesced MMIO capability and store in context
@@ -1014,7 +1005,6 @@ int kvm_arch_halt(CPUState *env);
int handle_tpr_access(void *opaque, CPUState *env, uint64_t rip,
int is_write);
-#define qemu_kvm_pit_in_kernel() kvm_pit_in_kernel(kvm_context)
#define qemu_kvm_has_gsi_routing() kvm_has_gsi_routing(kvm_context)
#ifdef TARGET_I386
#define qemu_kvm_has_pit_state2() kvm_has_pit_state2(kvm_context)
@@ -1022,7 +1012,6 @@ int handle_tpr_access(void *opaque, CPUState *env, uint64_t rip,
void kvm_load_tsc(CPUState *env);
#else
#define kvm_nested 0
-#define qemu_kvm_pit_in_kernel() (0)
#define qemu_kvm_has_gsi_routing() (0)
#ifdef TARGET_I386
#define qemu_kvm_has_pit_state2() (0)
@@ -1055,7 +1044,6 @@ static inline int kvm_set_migration_log(int enable)
}
-int kvm_irqchip_in_kernel(void);
#ifdef CONFIG_KVM
typedef struct KVMSlot {
@@ -1080,6 +1068,7 @@ struct KVMState {
QTAILQ_HEAD(, kvm_sw_breakpoint) kvm_sw_breakpoints;
#endif
int irqchip_in_kernel;
+ int pit_in_kernel;
struct kvm_context kvm_context;
};