[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] x86/HVM: adjust rtc_timer_update()
# HG changeset patch # User Jan Beulich <jbeulich@xxxxxxxx> # Date 1358947122 -3600 # Node ID 7eaabf48f7b78751ab1203f42b31e5c7f032c8bb # Parent aa82638d58b0b033eedeb1c3255e5cfbde788584 x86/HVM: adjust rtc_timer_update() Don't look at RTC_PIE in rtc_timer_update(), and hence don't call the function on REG_B writes at all. Also handle the two other possible clock bases. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Keir Fraser <keir@xxxxxxx> --- diff -r aa82638d58b0 -r 7eaabf48f7b7 xen/arch/x86/hvm/rtc.c --- a/xen/arch/x86/hvm/rtc.c Wed Jan 23 14:17:56 2013 +0100 +++ b/xen/arch/x86/hvm/rtc.c Wed Jan 23 14:18:42 2013 +0100 @@ -79,19 +79,26 @@ static void rtc_timer_update(RTCState *s ASSERT(spin_is_locked(&s->lock)); period_code = s->hw.cmos_data[RTC_REG_A] & RTC_RATE_SELECT; - if ( (period_code != 0) && (s->hw.cmos_data[RTC_REG_B] & RTC_PIE) ) + switch ( s->hw.cmos_data[RTC_REG_A] & RTC_DIV_CTL ) { - if ( period_code <= 2 ) + case RTC_REF_CLCK_32KHZ: + if ( (period_code != 0) && (period_code <= 2) ) period_code += 7; - - period = 1 << (period_code - 1); /* period in 32 Khz cycles */ - period = DIV_ROUND((period * 1000000000ULL), 32768); /* period in ns */ - create_periodic_time(v, &s->pt, period, period, RTC_IRQ, - rtc_periodic_cb, s); - } - else - { + /* fall through */ + case RTC_REF_CLCK_1MHZ: + case RTC_REF_CLCK_4MHZ: + if ( period_code != 0 ) + { + period = 1 << (period_code - 1); /* period in 32 Khz cycles */ + period = DIV_ROUND(period * 1000000000ULL, 32768); /* in ns */ + create_periodic_time(v, &s->pt, period, period, RTC_IRQ, + rtc_periodic_cb, s); + break; + } + /* fall through */ + default: destroy_periodic_time(&s->pt); + break; } } @@ -445,8 +452,6 @@ static int rtc_ioport_write(void *opaque rtc_toggle_irq(s); } s->hw.cmos_data[RTC_REG_B] = data; - if ( (data ^ orig) & RTC_PIE ) - rtc_timer_update(s); check_update_timer(s); alarm_timer_update(s); break; _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |