Re: [PATCH kvm-unit-tests 0/3] arm/arm64: smp: prepare for on_cpu

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, May 30, 2017 at 04:26:34PM +0200, Paolo Bonzini wrote:
> 
> 
> On 30/05/2017 15:39, Andrew Jones wrote:
> > On Tue, May 30, 2017 at 02:13:34PM +0200, Paolo Bonzini wrote:
> > Yes, I know, I even wrote something similar to that already and it
> > works fine, *if* the calling cpu can always expect the target cpu
> > to eventually (for some value of eventually) run its code (the "other
> > side" code above). When I implemented it I decided that that code
> > implements an idle loop, i.e.
> > 
> >  void secondary_halt(void)  <-- maybe rename to do_idle()
> >  {
> >    cpu = smp_processor_id();
> >    set_cpu_idle(cpu, true);
> >    for (;;) {
> >        while (cpu_idle(cpu))
> >            wfe();
> >        ...
> >        cb(opaque);
> >        set_cpu_idle(cpu, true);
> >    }
> >  }
> > 
> > This implies on_cpu*() must wait for a target cpu's currently running
> > task to finish, i.e., as I said above, no arbitrary preemption.
> 
> Yes, that's okay.
> 
> > So it's not as nice as an IPI solution that doesn't block an asynchronise
> > caller (possibly indefinitely), which would mean it doesn't actually
> > implement the semantics of on_cpu_async anyway.
> 
> It's probably a bug anyway to have on_cpu_async while a previous
> on_cpu_async is running.  If you look at x86 tests, on_cpu_async usually
> is followed by a busy wait for all CPUs to complete.

OK, I'll clean up my idle-loop wfe/sev series and post soon then.

Thanks,
drew



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux