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.
Thanks