vhost: fix missing virtqueue status check in async path

Vring should not be touched if vq is disabled. This patch adds the vq
status check in async enqueue polling to avoid accessing to a disabled
queue.

Fixes: cd6760da10 ("vhost: introduce async enqueue for split ring")

Signed-off-by: Patrick Fu <patrick.fu@intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
This commit is contained in:
Patrick Fu 2020-07-21 11:35:57 +08:00 committed by Ferruh Yigit
parent 6a82bceb56
commit 5c7ddd6b14

View File

@ -1689,9 +1689,11 @@ uint16_t rte_vhost_poll_enqueue_completed(int vid, uint16_t queue_id,
if (n_pkts_put) {
vq->async_pkts_inflight_n -= n_pkts_put;
__atomic_add_fetch(&vq->used->idx, n_descs, __ATOMIC_RELEASE);
vhost_vring_call_split(dev, vq);
if (likely(vq->enabled && vq->access_ok)) {
__atomic_add_fetch(&vq->used->idx,
n_descs, __ATOMIC_RELEASE);
vhost_vring_call_split(dev, vq);
}
}
if (start_idx + n_pkts_put <= vq_size) {