[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 5/7] xen: Switch to new TRACE() API
On 20.03.2024 16:46, George Dunlap wrote: > On Wed, Mar 20, 2024 at 1:45 PM Jan Beulich <jbeulich@xxxxxxxx> wrote: >> >> On 18.03.2024 17:35, Andrew Cooper wrote: >>> @@ -736,9 +736,19 @@ static void vlapic_update_timer(struct vlapic *vlapic, >>> uint32_t lvtt, >>> delta = delta * vlapic->hw.timer_divisor / old_divisor; >>> } >>> >>> - TRACE_2_LONG_3D(TRC_HVM_EMUL_LAPIC_START_TIMER, >>> TRC_PAR_LONG(delta), >>> - TRC_PAR_LONG(is_periodic ? period : 0), >>> - vlapic->pt.irq); >>> + if ( unlikely(tb_init_done) ) >>> + { >>> + struct { >>> + uint64_t delta, period; >>> + uint32_t irq; >>> + } __packed d = { >>> + .delta = delta, >>> + .period = is_periodic ? period : 0, >>> + .irq = vlapic->pt.irq, >>> + }; >>> + >>> + trace_time(TRC_HVM_EMUL_LAPIC_START_TIMER, sizeof(d), &d); >>> + } >> >> Instead of this open-coding, how about >> >> if ( is_periodic ) >> TRACE_TIME(TRC_HVM_EMUL_LAPIC_START_TIMER, delta, delta >> 32, >> period, period >> 32, vlapic->pt.irq); >> else >> TRACE_TIME(TRC_HVM_EMUL_LAPIC_START_TIMER, delta, delta >> 32, >> 0, 0, vlapic->pt.irq); >> >> thus improving similarity / grep-ability with ... > > Yuck -- I'm not keen on breaking the similarity, but I'm *really* not > a fan of duplicating code. Neither am I, just that ... > Both are kind of "code smell"-y to me, but I think the second seems worse. ... it was the other way around to me. > It sort of looks to me like the source of the problem is that the > `period` variable is overloaded somehow; in that it's used to update > some calculation even if !is_periodic, and so the two places it's used > as an actual period (the trace code, and the call to > `create_periodic_time()`) need to figure out if `periodic` is for them > to use or not. > > What about adding a variable, "timer_period" for that purpose? > Something like the following? Yeah, why not. Jan > diff --git a/xen/arch/x86/hvm/vlapic.c b/xen/arch/x86/hvm/vlapic.c > index dcbcf4a1fe..ea14fc1587 100644 > --- a/xen/arch/x86/hvm/vlapic.c > +++ b/xen/arch/x86/hvm/vlapic.c > @@ -729,6 +729,8 @@ static void vlapic_update_timer(struct vlapic > *vlapic, uint32_t lvtt, > > if ( delta && (is_oneshot || is_periodic) ) > { > + uint64_t timer_period = 0; > + > if ( vlapic->hw.timer_divisor != old_divisor ) > { > period = (uint64_t)vlapic_get_reg(vlapic, APIC_TMICT) > @@ -736,12 +738,15 @@ static void vlapic_update_timer(struct vlapic > *vlapic, uint32_t lvtt, > delta = delta * vlapic->hw.timer_divisor / old_divisor; > } > > - TRACE_2_LONG_3D(TRC_HVM_EMUL_LAPIC_START_TIMER, TRC_PAR_LONG(delta), > - TRC_PAR_LONG(is_periodic ? period : 0), > - vlapic->pt.irq); > + if ( is_periodic ) > + timer_period = period; > + > + TRACE_TIME(TRC_HVM_EMUL_LAPIC_START_TIMER, delta, delta >> 32, > + timer_period, timer_period >> 32, > + vlapic->pt.irq); > > create_periodic_time(current, &vlapic->pt, delta, > - is_periodic ? period : 0, vlapic->pt.irq, > + timer_period, vlapic->pt.irq, > is_periodic ? vlapic_pt_cb : NULL, > &vlapic->timer_last_update, false); > > > As with Jan, I'd be OK with checking it in the way it is if you prefer, so: > > Reviewed-by: George Dunlap <george.dunlap@xxxxxxxxx>
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |