[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Time Skewing on Windows XP
At 08:23 +0000 on 15 Mar (1363335830), Jan Beulich wrote: > >>> On 14.03.13 at 21:23, Suravee Suthikulanit > >>> <suravee.suthikulpanit@xxxxxxx> wrote: > > So far, this patch allows me to get the correct timing on the XP. > > At the price of never stopping the periodic time - other than said > yesterday, _that_ was the main point of the flow change. I.e. > making the host wake up more frequently even on an otherwise > idle system. > > It ought to be possible to keep the timer off when unused by > the guest _and_ have the time remain stable... Sure, but right now, timekeeping in XP is totally borked. So we should probably revert 620d5dad54008e40798c4a0c4322aef274c36fa3 until a proper fix can be found. Cheers, Tim. > > --- a/xen/arch/x86/hvm/rtc.c > > +++ b/xen/arch/x86/hvm/rtc.c > > @@ -76,6 +76,15 @@ void rtc_periodic_interrupt(void *opaque) > > spin_unlock(&s->lock); > > } > > > > +static void rtc_periodic_cb(struct vcpu *v, void *opaque) > > +{ > > + RTCState *s = opaque; > > + > > + spin_lock(&s->lock); > > + s->hw.cmos_data[RTC_REG_C] |= RTC_PF | RTC_IRQF; > > + spin_unlock(&s->lock); > > +} > > And if we indeed revert that part of the original patch, then > properly - this function then ought to replace the now dead > rtc_periodic_interrupt(). > > Jan > > > + > > /* Enable/configure/disable the periodic timer based on the RTC_PIE and > > * RTC_RATE_SELECT settings */ > > static void rtc_timer_update(RTCState *s) > > @@ -98,7 +107,7 @@ static void rtc_timer_update(RTCState *s) > > { > > 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, > > NULL, s); > > + create_periodic_time(v, &s->pt, period, period, RTC_IRQ, > > rtc_periodic_cb, s); > > break; > > } > > /* fall through */ > > @@ -619,7 +628,6 @@ static uint32_t rtc_ioport_read(RTCState *s, > > uint32_t addr) > > s->hw.cmos_data[RTC_REG_C] = 0x00; > > check_update_timer(s); > > alarm_timer_update(s); > > - rtc_timer_update(s); > > break; > > default: > > ret = s->hw.cmos_data[s->hw.cmos_index]; > > diff --git a/xen/arch/x86/hvm/vpt.c b/xen/arch/x86/hvm/vpt.c > > index 46d3ec6..9c1dbfb 100644 > > --- a/xen/arch/x86/hvm/vpt.c > > +++ b/xen/arch/x86/hvm/vpt.c > > @@ -259,8 +259,6 @@ int pt_update_irq(struct vcpu *v) > > > > if ( is_lapic ) > > vlapic_set_irq(vcpu_vlapic(v), irq, 0); > > - else if ( irq == RTC_IRQ && pt_priv ) > > - rtc_periodic_interrupt(pt_priv); > > else > > { > > hvm_isa_irq_deassert(v->domain, irq); > > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |