From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: Re: [PATCH v3 2/3] net/virtio: update memory ordering comment for vq notify Date: Thu, 10 Jan 2019 09:56:36 -0500 Message-ID: <20190110094353-mutt-send-email-mst@kernel.org> References: <20181226163712.31596-1-i.maximets@samsung.com> <20190109145015.3010-1-i.maximets@samsung.com> <20190109145015.3010-3-i.maximets@samsung.com> <3fc0c642-6b4e-5d3f-4e95-f0e3f343e4e1@redhat.com> <8fdbcaef-05ba-230f-a2eb-21a4014ad699@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Cc: Maxime Coquelin , "Gavin Hu (Arm Technology China)" , "dev@dpdk.org" , Xiao Wang , Tiwei Bie , Zhihong Wang , "jfreimann@redhat.com" , Jason Wang , "xiaolong.ye@intel.com" , "alejandro.lucero@netronome.com" , Honnappa Nagarahalli , "jerinj@marvell.com" , nd To: Ilya Maximets Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id D76561B76E for ; Thu, 10 Jan 2019 15:56:44 +0100 (CET) Content-Disposition: inline In-Reply-To: <8fdbcaef-05ba-230f-a2eb-21a4014ad699@samsung.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Thu, Jan 10, 2019 at 12:55:19PM +0300, Ilya Maximets wrote: > On 10.01.2019 12:18, Maxime Coquelin wrote: > > Hi Gavin, > > > > On 1/10/19 9:19 AM, Gavin Hu (Arm Technology China) wrote: > >> > >> > >>> -----Original Message----- > >>> From: dev On Behalf Of Ilya Maximets > >>> Sent: Wednesday, January 9, 2019 10:50 PM > >>> To: dev@dpdk.org; Maxime Coquelin ; > >>> Michael S . Tsirkin ; Xiao Wang > >>> > >>> Cc: Tiwei Bie ; Zhihong Wang > >>> ; jfreimann@redhat.com; Jason Wang > >>> ; xiaolong.ye@intel.com; > >>> alejandro.lucero@netronome.com; Ilya Maximets > >>> > >>> Subject: [dpdk-dev] [PATCH v3 2/3] net/virtio: update memory ordering > >>> comment for vq notify > >>> > >>> We're not using io ports in case of modern device even on IA. > >>> Also, this comment useless for other architectures. > >> > >> Agree, it should be architecture neutral. > >> > >>> > >>> Signed-off-by: Ilya Maximets > >>> --- > >>>   drivers/net/virtio/virtqueue.h | 9 ++++----- > >>>   1 file changed, 4 insertions(+), 5 deletions(-) > >>> > >>> diff --git a/drivers/net/virtio/virtqueue.h b/drivers/net/virtio/virtqueue.h > >>> index dffa03669..53aeac238 100644 > >>> --- a/drivers/net/virtio/virtqueue.h > >>> +++ b/drivers/net/virtio/virtqueue.h > >>> @@ -437,14 +437,13 @@ virtqueue_kick_prepare_packed(struct virtqueue > >>> *vq) > >>>       return flags != RING_EVENT_FLAGS_DISABLE; > >>>   } > >>> > >>> +/* > >>> + * virtqueue_kick_prepare*() or the virtio_wmb() should be called > >>> + * before this function to be sure that all the data is visible to vhost. > >>> + */ > >> > >> C11 _atomic APIs are preferred for new code, other than wmb or rmb,  could you work on that? > > > > Thanks for the review. > > -rc2 deadline is today, so I may apply this series as is if no reply > > from Ilya today. If a change is agreed, it could be made on top for > > -rc3. > > IMHO, If we'll decide to move to C11 atomics, we'll need to rewrite all > the significant memory accesses in virtio driver at once. We can't do > this partially. This will require significant amount of work to understand > how to do that and will require a lot of testing. So, it's definitely not > for current release. Also, there are possible performance concerns about > such solution. > > But I have even more significant concern: C11 atomics are designed for > inter-thread synchronization on multi-core systems. But in case of vDPA we > have real hardware and I'm not sure if we can use C11 atomics for > cross-domain synchronizations. Do you know if some of the memory ordering > types in C11 provide outer domain sync on ARMv8, for example ? I would add to that - compiler support might not work well in all versions which can be used to build dpdk. E.g. this article https://lwn.net/Articles/691128/ says that "there will be some seriously suboptimal code production before gcc-7.1". HTH > > > > Regards, > > Maxime > >>>   static inline void > >>>   virtqueue_notify(struct virtqueue *vq) > >>>   { > >>> -    /* > >>> -     * Ensure updated avail->idx is visible to host. > >>> -     * For virtio on IA, the notificaiton is through io port operation > >>> -     * which is a serialization instruction itself. > >>> -     */ > >>>       VTPCI_OPS(vq->hw)->notify_queue(vq->hw, vq); > >>>   } > >>> > >>> -- > >>> 2.17.1 > >> > > > >