[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] hvm/hpet: In hpet_save, call hpet_get_comparator.
commit a206319856c6b59b606bb27f1ee896b5ff5a74e7 Author: Don Slutz <dslutz@xxxxxxxxxxx> AuthorDate: Fri May 2 16:18:04 2014 -0400 Commit: Tim Deegan <tim@xxxxxxx> CommitDate: Thu May 8 12:03:53 2014 +0100 hvm/hpet: In hpet_save, call hpet_get_comparator. This changes save data to consistent/expected values. It is not technically required because hpet_get_comparator() will adjust from any value to the correct value. And hpet_get_comparator() is effectivly called in hpet_load via hpet_set_timer. However it does look strange to people that the output from xen-hvmctx for the comparator values do not change when the master clock does. The software-developers-hpet-spec-1-0a.pdf says that the comparator will allways be greater than master clock for a periodic timer. Signed-off-by: Don Slutz <dslutz@xxxxxxxxxxx> Acked-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Tim Deegan <tim@xxxxxxx> --- xen/arch/x86/hvm/hpet.c | 18 +++++++++++++++--- 1 files changed, 15 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/hvm/hpet.c b/xen/arch/x86/hvm/hpet.c index 0789947..b611304 100644 --- a/xen/arch/x86/hvm/hpet.c +++ b/xen/arch/x86/hvm/hpet.c @@ -495,12 +495,14 @@ static int hpet_save(struct domain *d, hvm_domain_context_t *h) { HPETState *hp = domain_vhpet(d); int rc; + uint64_t guest_time; spin_lock(&hp->lock); + guest_time = guest_time_hpet(hp); /* Write the proper value into the main counter */ if ( hpet_enabled(hp) ) - hp->hpet.mc64 = hp->mc_offset + guest_time_hpet(hp); + hp->hpet.mc64 = hp->mc_offset + guest_time; /* Save the HPET registers */ rc = _hvm_init_entry(h, HVM_SAVE_CODE(HPET), 0, HVM_SAVE_LENGTH(HPET)); @@ -524,8 +526,18 @@ static int hpet_save(struct domain *d, hvm_domain_context_t *h) C(period[1]); C(period[2]); #undef C - /* save the 64 bit comparator in the 64 bit timer[n].cmp field - * regardless of whether or not the timer is in 32 bit mode. */ + /* + * read the comparator to get it updated so hpet_save will + * return the expected value. + */ + hpet_get_comparator(hp, 0, guest_time); + hpet_get_comparator(hp, 1, guest_time); + hpet_get_comparator(hp, 2, guest_time); + /* + * save the 64 bit comparator in the 64 bit timer[n].cmp + * field regardless of whether or not the timer is in 32 bit + * mode. + */ rec->timers[0].cmp = hp->hpet.comparator64[0]; rec->timers[1].cmp = hp->hpet.comparator64[1]; rec->timers[2].cmp = hp->hpet.comparator64[2]; -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |