[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 05/12] x86/hvm: Remove duplicate calls caused by tracing
On 20.09.2021 19:25, Andrew Cooper wrote: > 1) vpic_ack_pending_irq() calls vlapic_accept_pic_intr() twice, once in the > TRACE_2D() instantiation and once "for real". Make the call only once. > > 2) vlapic_accept_pic_intr() similarly calls __vlapic_accept_pic_intr() twice, > although this is more complicated to disentangle. > > v cannot be NULL because it has already been dereferenced in the function, > causing the ternary expression to always call __vlapic_accept_pic_intr(). > However, the return expression of the function takes care to skip the call > if this vCPU isn't the PIC target. As __vlapic_accept_pic_intr() is far > from trivial, make the TRACE_2D() semantics match the return semantics by > only calling __vlapic_accept_pic_intr() when the vCPU is the PIC target. > > 3) hpet_set_timer() duplicates calls to hpet_tick_to_ns(). Pull the logic out > which simplifies both the TRACE and create_periodic_time() calls. > > 4) lapic_rearm() makes multiple calls to vlapic_lvtt_period(). Pull it out > into a local variable. > > vlapic_accept_pic_intr() is called on every VMEntry, so this is a reduction in > VMEntry complexity across the board. > > Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> > --- a/xen/arch/x86/hvm/vpic.c > +++ b/xen/arch/x86/hvm/vpic.c > @@ -512,14 +512,15 @@ void vpic_irq_negative_edge(struct domain *d, int irq) > > int vpic_ack_pending_irq(struct vcpu *v) > { > - int irq; > + int irq, accept; Strictly speaking "accept" wants to be bool, and ... > struct hvm_hw_vpic *vpic = &v->domain->arch.hvm.vpic[0]; > > ASSERT(has_vpic(v->domain)); > > - TRACE_2D(TRC_HVM_EMUL_PIC_PEND_IRQ_CALL, vlapic_accept_pic_intr(v), > - vpic->int_output); > - if ( !vlapic_accept_pic_intr(v) || !vpic->int_output ) > + accept = vlapic_accept_pic_intr(v); ... vlapic_accept_pic_intr() would eventually also want to be converted to return bool. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |