Thread (1 message) 1 message, 1 author, 2015-01-28

Re: [PATCH v2 02/24] virtio: Use weaker barriers

From: Ouyang, Changchun <hidden>
Date: 2015-01-28 06:12:59

-----Original Message-----
From: Xie, Huawei
Sent: Wednesday, January 28, 2015 12:16 AM
To: Stephen Hemminger
Cc: Ouyang, Changchun; dev-VfR2kkLFssw@public.gmane.org
Subject: RE: [dpdk-dev] [PATCH v2 02/24] virtio: Use weaker barriers


quoted
-----Original Message-----
From: Stephen Hemminger [mailto:stephen-OTpzqLSitTUnbdJkjeBofR2eb7JE58TQ@public.gmane.org]
Sent: Tuesday, January 27, 2015 5:59 PM
To: Xie, Huawei
Cc: Ouyang, Changchun; dev-VfR2kkLFssw@public.gmane.org
Subject: Re: [dpdk-dev] [PATCH v2 02/24] virtio: Use weaker barriers

quoted
I recall our original code is virtio_wmb().
Use store fence to ensure all updates to entries before updating the
index.
quoted
quoted
Why do we need virtio_rmb() here and add virtio_wmb after
vq_update_avail_idx()?

Store fence is unnecessary, Intel CPU's are cache coherent, please
read the virtio Linux ring header file for explanation. A full fence
WMB is more expensive and causes CPU stall

I mean virtio_wmb rather than virtio_rmb should be used here, and both of
them are defined as compiler barrier.

The following code is linux virtio driver for adding buffer to vring.
/* Put entry in available array (but don't update avail->idx until they
	 * do sync). */
	avail = (vq->vring.avail->idx & (vq->vring.num-1));
	vq->vring.avail->ring[avail] = head;

	/* Descriptors and available array need to be set before we expose
the
	 * new available array entries. */
	virtio_wmb(vq->weak_barriers);
	vq->vring.avail->idx++;
Yes, use virtio_wmb is better here, will change it in next version.

Thanks
Changchun
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help