On Mon, May 25, 2020 at 02:14:18AM -0700, Pratik Vyas wrote: > * Claudio Jeker <cje...@diehard.n-r-g.com> [2020-05-25 10:14:11 +0200]: > > > The problem is that the vm exit is handled by a different thread then the > > event loop. So some event_add/evtimer_add calls are done from a different > > thread then the main event loop (mainly interrupt processing). > > > > One approach to fix this is to ensure that the event functions are > > exclusivly used in the main event thread but as usual it is easy to > > introduce bugs again. > > Hi Claudio, > > I think it is possible to do this without too much complexity till we > have one only one cpu. Bascially, we have two threads right now that do > event_add/evtimer_add, > 1) vmm_pipe / imsg comm channel between vmm and vm process > 2) vcpu0 loop > > I think it's possible to make the vmm_pipe be not its own thread and > just be an event based implementation. > > Dave actually discovered that if you disable vmm_pipe, this libevent > state corruption does not occour. > > I will take a stab at this.
Sure, this is a simple fix. In the long run I guess we need to fix this better (also the way devices are implemented could benefit from this, since they are currently too synchronous to get a lot of performance out of them). -- :wq Claudio