[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86/time: Correctly update the domain watchdog in the shared info page
On 16/07/2013 10:51, "Andrew Cooper" <andrew.cooper3@xxxxxxxxxx> wrote: > For a normal HVM domain on 64bit Xen, the shared info switches to 32bit for > hvmloader, then to the native size for the HVM guest. This guarantees at > least one transition during which the wallclock information will be updated. > > The wallclock for each domain gets updated when dom0 issues a XENPF_settime > hypercall to updated the wallclock base time. > > However, for a 64bit domain on 64bit Xen which is resuming from S4, > (i.e. bypassing hvmloader), there are no transitions in the size of the shared > info page, meaning that before the next XENPF_settime from dom0, the domU PV > drivers will find the Unix Epoch in the wallclock rather than the correct > time. > > Therefore, manually set the watchdog when creating the domain, so it is set > right from the start of the domain, and when manually adjusting the domain > time offset, as it depends on the same value which has just been adjusted. s/watchdog/wallclock/ Also I wonder if this is not fixed by f8e8fd56 already? Not that I'm averse to throwing in a few more update_domain_wallclock_time() calls if they are useful. -- Keir > Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> > CC: Keir Fraser <keir@xxxxxxx> > CC: Jan Beulich <JBeulich@xxxxxxxx> > CC: Paul Durrant <Paul.Durrant@xxxxxxxxxx> > --- > This fixes a bug presence since Xen gained 64bit support, which had been > hacked around in a gross way in XenServer. > > It should be backported to all stable releases. > --- > xen/arch/x86/domain.c | 1 + > xen/arch/x86/time.c | 1 + > 2 files changed, 2 insertions(+) > > diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c > index 874742c..664d598 100644 > --- a/xen/arch/x86/domain.c > +++ b/xen/arch/x86/domain.c > @@ -546,6 +546,7 @@ int arch_domain_create(struct domain *d, unsigned int > domcr_flags) > clear_page(d->shared_info); > share_xen_page_with_guest( > virt_to_page(d->shared_info), d, XENSHARE_writable); > + update_domain_wallclock_time(d); > > if ( (rc = init_domain_irq_mapping(d)) != 0 ) > goto fail; > diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c > index cf8bc78..f047cb3 100644 > --- a/xen/arch/x86/time.c > +++ b/xen/arch/x86/time.c > @@ -931,6 +931,7 @@ void domain_set_time_offset(struct domain *d, int32_t > time_offset_seconds) > d->time_offset_seconds = time_offset_seconds; > if ( is_hvm_domain(d) ) > rtc_update_clock(d); > + update_domain_wallclock_time(d); > } > > int cpu_frequency_change(u64 freq) _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |