/* PV guests by default have a 100Hz ticker. */
v->periodic_period = MILLISECS(10);
-
- /* PV guests get an emulated PIT too for video BIOSes to use. */
- if ( v->vcpu_id == 0 )
- pit_init(v, cpu_khz);
}
v->arch.schedule_tail = continue_nonidle_domain;
tsc_set_info(d, TSC_MODE_DEFAULT, 0UL, 0, 0);
spin_lock_init(&d->arch.vtsc_lock);
+ /* PV/PVH guests get an emulated PIT too for video BIOSes to use. */
+ pit_init(d, cpu_khz);
+
return 0;
fail:
BUG();
}
+ pit_deinit(d);
+
if ( has_hvm_container_domain(d) )
hvm_domain_relinquish_resources(d);
rtc_deinit(d);
if ( d->vcpu != NULL && d->vcpu[0] != NULL )
{
- pit_deinit(d);
pmtimer_deinit(d);
hpet_deinit(d);
}
if ( v->vcpu_id == 0 )
{
/* NB. All these really belong in hvm_domain_initialise(). */
- pit_init(v, cpu_khz);
pmtimer_init(v);
hpet_init(v);
spin_unlock(&pit->lock);
}
-void pit_init(struct vcpu *v, unsigned long cpu_khz)
+void pit_init(struct domain *d, unsigned long cpu_khz)
{
- struct domain *d = v->domain;
PITState *pit = domain_vpit(d);
spin_lock_init(&pit->lock);
int pv_pit_handler(int port, int data, int write);
void pit_reset(struct domain *d);
-void pit_init(struct vcpu *v, unsigned long cpu_khz);
+void pit_init(struct domain *d, unsigned long cpu_khz);
void pit_stop_channel0_irq(PITState * pit);
void pit_deinit(struct domain *d);
void rtc_init(struct domain *d);