[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v7 17/32] xen/x86: allow disabling the emulated RTC
Signed-off-by: Roger Pau Monnà <roger.pau@xxxxxxxxxx> Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Cc: Jan Beulich <jbeulich@xxxxxxxx> Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- Changes since v6: - Return ENODEV in rtc_load if rtc is disabled. - Add checks to rtc_reset and rtc_update_clock to prevent calling them if rtc is disabled. Changes since v4: - Add Andrew Cooper Acked-by. --- xen/arch/x86/hvm/rtc.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/xen/arch/x86/hvm/rtc.c b/xen/arch/x86/hvm/rtc.c index a9efeaf..d391e38 100644 --- a/xen/arch/x86/hvm/rtc.c +++ b/xen/arch/x86/hvm/rtc.c @@ -726,6 +726,9 @@ void rtc_migrate_timers(struct vcpu *v) { RTCState *s = vcpu_vrtc(v); + if ( !has_vrtc(v->domain) ) + return; + if ( v->vcpu_id == 0 ) { migrate_timer(&s->update_timer, v->processor);; @@ -739,6 +742,10 @@ static int rtc_save(struct domain *d, hvm_domain_context_t *h) { RTCState *s = domain_vrtc(d); int rc; + + if ( !has_vrtc(d) ) + return 0; + spin_lock(&s->lock); rc = hvm_save_entry(RTC, 0, h, &s->hw); spin_unlock(&s->lock); @@ -750,6 +757,9 @@ static int rtc_load(struct domain *d, hvm_domain_context_t *h) { RTCState *s = domain_vrtc(d); + if ( !has_vrtc(d) ) + return -ENODEV; + spin_lock(&s->lock); /* Restore the registers */ @@ -780,6 +790,9 @@ void rtc_reset(struct domain *d) { RTCState *s = domain_vrtc(d); + if ( !has_vrtc(d) ) + return; + TRACE_0D(TRC_HVM_EMUL_RTC_STOP_TIMER); destroy_periodic_time(&s->pt); s->period = 0; @@ -790,6 +803,9 @@ void rtc_init(struct domain *d) { RTCState *s = domain_vrtc(d); + if ( !has_vrtc(d) ) + return; + spin_lock_init(&s->lock); init_timer(&s->update_timer, rtc_update_timer, s, smp_processor_id()); @@ -820,6 +836,9 @@ void rtc_deinit(struct domain *d) { RTCState *s = domain_vrtc(d); + if ( !has_vrtc(d) ) + return; + spin_barrier(&s->lock); TRACE_0D(TRC_HVM_EMUL_RTC_STOP_TIMER); @@ -833,6 +852,9 @@ void rtc_update_clock(struct domain *d) { RTCState *s = domain_vrtc(d); + if ( !has_vrtc(d) ) + return; + spin_lock(&s->lock); s->current_tm = gmtime(get_localtime(d)); spin_unlock(&s->lock); -- 1.9.5 (Apple Git-50.3) _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |