On Wed, Sep 21, 2016 at 18:19:26 +0200, Paolo Bonzini wrote: > > > On 21/09/2016 18:05, Emilio G. Cota wrote: > >> > + tb_lock(); > >> > + > >> > + /* If it's already been done on request of another CPU, > >> > + * just retry. > >> > + */ > >> > + if (atomic_read(&tcg_ctx.tb_ctx.tb_flush_count) != tb_flush_req) { > >> > + goto done; > > tb_flush_count is always accessed with tb_lock held, right? If so, I don't > > see a reason to access it with atomic_read/set. > > tb_flush accesses it outside tb_lock. Technically this one you're > quoting need not use atomic_read, but others need to.
Sorry for being thick, but when does tb_flush not own tb_lock? (I'm assuming we're talking only user-mode, since full-system has for now empty tb_lock/unlock helpers.) E.