Commit 09edea72 authored by Radim Krčmář's avatar Radim Krčmář Committed by Paolo Bonzini

KVM: i8254: pass struct kvm_pit instead of kvm in PIT

This patch passes struct kvm_pit into internal PIT functions.
Those functions used to get PIT through kvm->arch.vpit, even though most
of them never used *kvm for other purposes.  Another benefit is that we
don't need to set kvm->arch.vpit during initialization.
Signed-off-by: default avatarRadim Krčmář <rkrcmar@redhat.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent b69d920f
This diff is collapsed.
...@@ -56,9 +56,11 @@ struct kvm_pit { ...@@ -56,9 +56,11 @@ struct kvm_pit {
#define KVM_MAX_PIT_INTR_INTERVAL HZ / 100 #define KVM_MAX_PIT_INTR_INTERVAL HZ / 100
#define KVM_PIT_CHANNEL_MASK 0x3 #define KVM_PIT_CHANNEL_MASK 0x3
void kvm_pit_load_count(struct kvm *kvm, int channel, u32 val, int hpet_legacy_start);
struct kvm_pit *kvm_create_pit(struct kvm *kvm, u32 flags); struct kvm_pit *kvm_create_pit(struct kvm *kvm, u32 flags);
void kvm_free_pit(struct kvm *kvm); void kvm_free_pit(struct kvm *kvm);
void kvm_pit_reset(struct kvm_pit *pit); void kvm_pit_reset(struct kvm_pit *pit);
void kvm_pit_load_count(struct kvm_pit *pit, int channel, u32 val,
int hpet_legacy_start);
#endif #endif
...@@ -3613,11 +3613,13 @@ static int kvm_vm_ioctl_get_pit(struct kvm *kvm, struct kvm_pit_state *ps) ...@@ -3613,11 +3613,13 @@ static int kvm_vm_ioctl_get_pit(struct kvm *kvm, struct kvm_pit_state *ps)
static int kvm_vm_ioctl_set_pit(struct kvm *kvm, struct kvm_pit_state *ps) static int kvm_vm_ioctl_set_pit(struct kvm *kvm, struct kvm_pit_state *ps)
{ {
int i; int i;
mutex_lock(&kvm->arch.vpit->pit_state.lock); struct kvm_pit *pit = kvm->arch.vpit;
memcpy(&kvm->arch.vpit->pit_state, ps, sizeof(struct kvm_pit_state));
mutex_lock(&pit->pit_state.lock);
memcpy(&pit->pit_state, ps, sizeof(struct kvm_pit_state));
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
kvm_pit_load_count(kvm, i, ps->channels[i].count, 0); kvm_pit_load_count(pit, i, ps->channels[i].count, 0);
mutex_unlock(&kvm->arch.vpit->pit_state.lock); mutex_unlock(&pit->pit_state.lock);
return 0; return 0;
} }
...@@ -3637,18 +3639,20 @@ static int kvm_vm_ioctl_set_pit2(struct kvm *kvm, struct kvm_pit_state2 *ps) ...@@ -3637,18 +3639,20 @@ static int kvm_vm_ioctl_set_pit2(struct kvm *kvm, struct kvm_pit_state2 *ps)
int start = 0; int start = 0;
int i; int i;
u32 prev_legacy, cur_legacy; u32 prev_legacy, cur_legacy;
mutex_lock(&kvm->arch.vpit->pit_state.lock); struct kvm_pit *pit = kvm->arch.vpit;
prev_legacy = kvm->arch.vpit->pit_state.flags & KVM_PIT_FLAGS_HPET_LEGACY;
mutex_lock(&pit->pit_state.lock);
prev_legacy = pit->pit_state.flags & KVM_PIT_FLAGS_HPET_LEGACY;
cur_legacy = ps->flags & KVM_PIT_FLAGS_HPET_LEGACY; cur_legacy = ps->flags & KVM_PIT_FLAGS_HPET_LEGACY;
if (!prev_legacy && cur_legacy) if (!prev_legacy && cur_legacy)
start = 1; start = 1;
memcpy(&kvm->arch.vpit->pit_state.channels, &ps->channels, memcpy(&pit->pit_state.channels, &ps->channels,
sizeof(kvm->arch.vpit->pit_state.channels)); sizeof(pit->pit_state.channels));
kvm->arch.vpit->pit_state.flags = ps->flags; pit->pit_state.flags = ps->flags;
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
kvm_pit_load_count(kvm, i, kvm->arch.vpit->pit_state.channels[i].count, kvm_pit_load_count(pit, i, pit->pit_state.channels[i].count,
start && i == 0); start && i == 0);
mutex_unlock(&kvm->arch.vpit->pit_state.lock); mutex_unlock(&pit->pit_state.lock);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment