On Mon, Aug 13, 2012 at 5:36 PM, Mike Belopuhov <m...@crypt.org.ru> wrote: > On Mon, Aug 13, 2012 at 5:30 PM, Stefan Fritsch <stefan_frit...@genua.de> > wrote: >> On Monday 13 August 2012 17:07:41 you wrote: >>> > * Note: the i386 does not currently require barriers, but we must >>> > * provide the flags to MI code. >>> > >>> > This is not correct for virtio. We need a memory barrier. >>> >>> sure, copy it from amd64. >> >> OK. A slight complication: >> >> sfence/mfence/lfence do not exist on all i386 CPUs. sfence was introduced >> with >> SSE, [lm]fence with SSE2. This is not really a problem with the virtio driver >> because the virtualization extensions were introduced much later. But it may >> be a problem with the rest of the i386 code. >> >> How do you normally handle this? Check during boot and set a pointer to the >> function to be used and call that function pointer from bus_space_barrier()? >> > > actually you might try this: > > http://nxr.netbsd.org/xref/src/sys/arch/x86/x86/bus_space.c#877 > > same as we do with bus_dmamap_sync on i386/amd64.
but otherwise i think you should test the presense of the instruction and set a function pointer somewhere in machdep.