lkml.org 
[lkml]   [2008]   [Apr]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 17/35] KVM: Add reset support for in kernel PIT
    Date
    From: Sheng Yang <sheng.yang@intel.com>

    Separate the reset part and prepare for reset support.

    Signed-off-by: Sheng Yang <sheng.yang@intel.com>
    Signed-off-by: Avi Kivity <avi@qumranet.com>
    ---
    arch/x86/kvm/i8254.c | 30 +++++++++++++++++++-----------
    arch/x86/kvm/i8254.h | 1 +
    2 files changed, 20 insertions(+), 11 deletions(-)

    diff --git a/arch/x86/kvm/i8254.c b/arch/x86/kvm/i8254.c
    index 7776f50..06a241a 100644
    --- a/arch/x86/kvm/i8254.c
    +++ b/arch/x86/kvm/i8254.c
    @@ -476,12 +476,28 @@ static int speaker_in_range(struct kvm_io_device *this, gpa_t addr)
    return (addr == KVM_SPEAKER_BASE_ADDRESS);
    }

    -struct kvm_pit *kvm_create_pit(struct kvm *kvm)
    +void kvm_pit_reset(struct kvm_pit *pit)
    {
    int i;
    + struct kvm_kpit_channel_state *c;
    +
    + mutex_lock(&pit->pit_state.lock);
    + for (i = 0; i < 3; i++) {
    + c = &pit->pit_state.channels[i];
    + c->mode = 0xff;
    + c->gate = (i != 2);
    + pit_load_count(pit->kvm, i, 0);
    + }
    + mutex_unlock(&pit->pit_state.lock);
    +
    + atomic_set(&pit->pit_state.pit_timer.pending, 0);
    + pit->pit_state.inject_pending = 1;
    +}
    +
    +struct kvm_pit *kvm_create_pit(struct kvm *kvm)
    +{
    struct kvm_pit *pit;
    struct kvm_kpit_state *pit_state;
    - struct kvm_kpit_channel_state *c;

    pit = kzalloc(sizeof(struct kvm_pit), GFP_KERNEL);
    if (!pit)
    @@ -510,17 +526,9 @@ struct kvm_pit *kvm_create_pit(struct kvm *kvm)
    pit_state->pit = pit;
    hrtimer_init(&pit_state->pit_timer.timer,
    CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
    - atomic_set(&pit_state->pit_timer.pending, 0);
    - for (i = 0; i < 3; i++) {
    - c = &pit_state->channels[i];
    - c->mode = 0xff;
    - c->gate = (i != 2);
    - pit_load_count(kvm, i, 0);
    - }
    -
    mutex_unlock(&pit->pit_state.lock);

    - pit->pit_state.inject_pending = 1;
    + kvm_pit_reset(pit);

    return pit;
    }
    diff --git a/arch/x86/kvm/i8254.h b/arch/x86/kvm/i8254.h
    index 586bbf0..e63ef38 100644
    --- a/arch/x86/kvm/i8254.h
    +++ b/arch/x86/kvm/i8254.h
    @@ -57,5 +57,6 @@ void kvm_pit_timer_intr_post(struct kvm_vcpu *vcpu, int vec);
    void kvm_pit_load_count(struct kvm *kvm, int channel, u32 val);
    struct kvm_pit *kvm_create_pit(struct kvm *kvm);
    void kvm_free_pit(struct kvm *kvm);
    +void kvm_pit_reset(struct kvm_pit *pit);

    #endif
    --
    1.5.4.5


    \
     
     \ /
      Last update: 2008-04-03 21:39    [W:0.027 / U:0.232 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site