From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ilya Maximets Subject: Re: [PATCH RFC v3 1/3] vhost: use SMP barriers instead of compiler ones. Date: Fri, 18 Mar 2016 13:39:13 +0300 Message-ID: <56EBDAD1.1090608@samsung.com> References: <1456314438-4021-1-git-send-email-i.maximets@samsung.com> <1456314438-4021-2-git-send-email-i.maximets@samsung.com> <56EBD718.8010604@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Cc: Dyasly Sergey , Jerin Jacob , Jianbo Liu , Thomas Monjalon , Tetsuya Mukawa To: "Xie, Huawei" , "dev@dpdk.org" , Yuanhan Liu Return-path: Received: from mailout4.w1.samsung.com (mailout4.w1.samsung.com [210.118.77.14]) by dpdk.org (Postfix) with ESMTP id 503A22BD7 for ; Fri, 18 Mar 2016 11:39:16 +0100 (CET) Received: from eucpsbgm1.samsung.com (unknown [203.254.199.244]) by mailout4.w1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0O4800215DLEUH90@mailout4.w1.samsung.com> for dev@dpdk.org; Fri, 18 Mar 2016 10:39:14 +0000 (GMT) In-reply-to: List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On 18.03.2016 13:27, Xie, Huawei wrote: > On 3/18/2016 6:23 PM, Ilya Maximets wrote: >> On 18.03.2016 13:08, Xie, Huawei wrote: >>> On 2/24/2016 7:47 PM, Ilya Maximets wrote: >>>> * Wait until it's our turn to add our buffer >>>> @@ -979,7 +979,7 @@ rte_vhost_dequeue_burst(struct virtio_net *dev, uint16_t queue_id, >>>> entry_success++; >>>> } >>>> >>>> - rte_compiler_barrier(); >>>> + rte_smp_rmb(); >>> smp_rmb()? >> There is no such function 'smp_rmb' in DPDK. >> But: >> .../arch/arm/rte_atomic.h:#define rte_smp_rmb() rte_rmb() >> .../arch/ppc_64/rte_atomic.h:#define rte_smp_rmb() rte_compiler_barrier() >> .../arch/tile/rte_atomic.h:#define rte_smp_rmb() rte_compiler_barrier() >> .../arch/x86/rte_atomic.h:#define rte_smp_rmb() rte_compiler_barrier() > > I mean shoudn't be rte_smp_wmb()? No. Here we need to be sure that copying of data from descriptor to our local mbuf completed before 'vq->used->idx += entry_success;'. Read memory barrier will help us with it. In other places write barriers used because copying performed in opposite direction. > >> >>>> vq->used->idx += entry_success; >>>> vhost_log_used_vring(dev, vq, offsetof(struct vring_used, idx), >>>> sizeof(vq->used->idx)); >>>> -- 2.5.0 >>> >>> > > >