On 2019/1/30 上午11:58, Yongji Xie wrote:
On Wed, 30 Jan 2019 at 10:32, Jason Wang <jasow...@redhat.com> wrote:
On 2019/1/22 下午4:31, elohi...@gmail.com wrote:
+static int
+vu_queue_inflight_get(VuDev *dev, VuVirtq *vq, int desc_idx)
+{
+ if (!has_feature(dev->protocol_features,
+ VHOST_USER_PROTOCOL_F_INFLIGHT_SHMFD)) {
+ return 0;
+ }
+
+ if (unlikely(!vq->inflight)) {
+ return -1;
+ }
+
+ vq->inflight->desc[desc_idx].inuse = 1;
+
+ vq->inflight->desc[desc_idx].avail_idx = vq->last_avail_idx;
+
+ return 0;
+}
+
+static int
+vu_queue_inflight_pre_put(VuDev *dev, VuVirtq *vq, int desc_idx)
+{
+ if (!has_feature(dev->protocol_features,
+ VHOST_USER_PROTOCOL_F_INFLIGHT_SHMFD)) {
+ return 0;
+ }
+
+ if (unlikely(!vq->inflight)) {
+ return -1;
+ }
+
+ vq->inflight->desc[desc_idx].used_idx = vq->used_idx;
+
+ barrier();
+
+ vq->inflight->desc[desc_idx].version++;
+
+ return 0;
+}
You probably need WRITE_ONCE() semantic (e.g volatile) to make sure the
value reach memory.
Is it enough to declare those variables as volatile?
Thanks,
Yongji
I think so.
Thanks