x86/time: slightly streamline __update_vcpu_system_time() Fold two if()-s using the same condition, converting the memset() so far separating them to a simple initializer. Move common assignments out of the conditional. Drop an unnecessary initializer. Signed-off-by: Jan Beulich --- Additionally the is_hvm_domain() visible in the last hunk's tail context looks, along with a few other releated ones, suspicious - shouldn't these be has_hvm_container_domain() instead? --- a/xen/arch/x86/time.c +++ b/xen/arch/x86/time.c @@ -790,9 +790,9 @@ uint64_t tsc_ticks2ns(uint64_t ticks) static void __update_vcpu_system_time(struct vcpu *v, int force) { struct cpu_time *t; - struct vcpu_time_info *u, _u; + struct vcpu_time_info *u, _u = {}; struct domain *d = v->domain; - s_time_t tsc_stamp = 0; + s_time_t tsc_stamp; if ( v->vcpu_info == NULL ) return; @@ -816,28 +816,21 @@ static void __update_vcpu_system_time(st } else tsc_stamp = gtime_to_gtsc(d, stime); - } - else - { - tsc_stamp = t->local_tsc_stamp; - } - - memset(&_u, 0, sizeof(_u)); - if ( d->arch.vtsc ) - { - _u.tsc_timestamp = tsc_stamp; - _u.system_time = t->stime_local_stamp; _u.tsc_to_system_mul = d->arch.vtsc_to_ns.mul_frac; _u.tsc_shift = d->arch.vtsc_to_ns.shift; } else { - _u.tsc_timestamp = t->local_tsc_stamp; - _u.system_time = t->stime_local_stamp; + tsc_stamp = t->local_tsc_stamp; + _u.tsc_to_system_mul = t->tsc_scale.mul_frac; _u.tsc_shift = (s8)t->tsc_scale.shift; } + + _u.tsc_timestamp = tsc_stamp; + _u.system_time = t->stime_local_stamp; + if ( is_hvm_domain(d) ) _u.tsc_timestamp += v->arch.hvm_vcpu.cache_tsc_offset;