On Thu, Apr 19, 2018 at 06:59:39PM +0200, Paolo Bonzini wrote: > On 19/04/2018 18:52, Liang, Cunming wrote: > >>> Oh you are right. > >>> > >>> So it's only needed for non-intel platforms or when packets are > >>> in WC memory then. And I don't know whether dpdk ever puts > >>> packets in WC memory. > >>> > >>> I guess we'll cross this bridge when we get to it. > >> Non-TSO architectures seem important... > > > > I'm not familiar with Non-TSO, trying to understand the difference > > according to the feature set. Let's say non-TSO architectures do not > > set 'weak_barriers'. Then mandatory barrier is used for software. HW > > offload on that platform would choose different feature set against > > software? If it's not, essentially we're worried about live migration > > from a TSO to a non-TSO architectures platform? > > I'm worried about live migration from software virtio to hardware virtio > on non-TSO architectures. For example, on ARM you would have a "dmb > ishst" (smp_wmb) for software virtio and a "dsb st" (wmb) or "dmb oshst" > (dma_wmb) for hardware virtio. > > For this to work, you would have to set up the VM so that it uses the > heavier barriers from the beginning, even when backed by software virtio. > > Paolo
Right. Or disallow hardware to software migrations. But generally the mandatory and even dma barriers in Linux are often an overkill. See ARM for example: #if defined(CONFIG_ARM_DMA_MEM_BUFFERABLE) || defined(CONFIG_SMP) #define mb() __arm_heavy_mb() #define rmb() dsb() #define wmb() __arm_heavy_mb(st) #define dma_rmb() dmb(osh) #define dma_wmb() dmb(oshst) #else #define mb() barrier() #define rmb() barrier() #define wmb() barrier() #define dma_rmb() barrier() #define dma_wmb() barrier() #endif That CONFIG_SMP here is clearly wrong but I don't really know what to set it to. Also, we probably should switch virtio_wmb to dma_XX barriers. That's actually easy. Will try to do. -- MST