[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v4 2/3] xen/oprofile: use NMI continuation for sending virq to guest
On 09.11.2020 10:50, Juergen Gross wrote: > @@ -83,14 +85,28 @@ void passive_domain_destroy(struct vcpu *v) > model->free_msr(v); > } > > +bool nmi_oprofile_send_virq(void) > +{ > + struct vcpu *v = this_cpu(nmi_cont_vcpu); > + > + if ( v ) > + send_guest_vcpu_virq(v, VIRQ_XENOPROF); > + > + this_cpu(nmi_cont_vcpu) = NULL; What if, by the time we make it here, a 2nd NMI has arrived? I agree the next overflow interrupt shouldn't arrive this quickly, but I also think you want to zap the per-CPU variable first here, and ... > + > + return v; > +} > + > static int nmi_callback(const struct cpu_user_regs *regs, int cpu) > { > int xen_mode, ovf; > > ovf = model->check_ctrs(cpu, &cpu_msrs[cpu], regs); > xen_mode = ring_0(regs); > - if ( ovf && is_active(current->domain) && !xen_mode ) > - send_guest_vcpu_virq(current, VIRQ_XENOPROF); > + if ( ovf && is_active(current->domain) && !xen_mode ) { > + this_cpu(nmi_cont_vcpu) = current; ... avoid overwriting any non-NULL value here. That's then of course still not closing the window, but has (imo) overall better behavior. Also, style-wise, going through the file it looks to be mainly Linux style, so may I suggest your additions / changes to be done that way, rather than extending use of this funny mixed style? Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |