On Tue, Mar 07, 2017 at 05:13:59PM -0800, Stefano Stabellini wrote: > On Tue, 7 Mar 2017, Stefano Stabellini wrote: > > > > + > > > > + ring = container_of(work, struct xen_9pfs_dataring, work); > > > > + priv = ring->priv; > > > > + > > > > + while (1) { > > > > + cons = ring->intf->in_cons; > > > > + prod = ring->intf->in_prod; > > > > + rmb(); > > > > > > > > > Is this rmb() or mb()? (Or, in fact, virt_XXX()?) You used mb() in the > > > previous patch. > > > > I think they should all be virt_XXX, thanks. > > regarding mb() vs. rmb(), give a look at the workflow at the end of > docs/misc/9pfs.markdown, under "Ring Usage".
That is not what Boris meant. He meant that you should use the virt_ variants instead of the rmb() or wmb(). The reason that on UP kernels the rmb() and wmb() can be converted to NOPs. While that is OK for a UP kernel it is not good in virtualization as we need those barriers regardless of the flavor of the kernel. > > _______________________________________________ > Xen-devel mailing list > xen-de...@lists.xen.org > https://lists.xen.org/xen-devel