Commit 4073bf5c authored by Haoqian He's avatar Haoqian He Committed by Tomasz Zawadzki
Browse files

vhost: fix the no fd SET_VRING_CALL/SET_VRING_KICK issue



According vHost-user SPEC, for SET_VRING_KICK and SET_VRING_CALL
message, bits (0-7) of the payload contain the vring index and
bit 8 is the invalid FD flag.

We should use VHOST_USER_VRING_IDX_MASK to get the correct qid.
Otherwise, if ancillary data doesn't have fd, we will get error
from post_msg_handler functions cuz bit 8 is set.

Signed-off-by: default avatarHaoqian He <haoqian.he@smartx.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/23265

 (master)

(cherry picked from commit 71c1bbee)
Change-Id: I714a048c1d2f82abc98d66ed77e10a93ad271b58
Signed-off-by: default avatarMarek Chomnicki <marek.chomnicki@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/23315


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
parent 4a5c3954
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1536,14 +1536,14 @@ extern_vhost_post_msg_handler(int vid, void *_msg)
		}
		break;
	case VHOST_USER_SET_VRING_CALL:
		qid = (uint16_t)msg->payload.u64;
		qid = ((uint16_t)msg->payload.u64) & VHOST_USER_VRING_IDX_MASK;
		rc = set_device_vq_callfd(vsession, qid);
		if (rc) {
			return RTE_VHOST_MSG_RESULT_ERR;
		}
		break;
	case VHOST_USER_SET_VRING_KICK:
		qid = (uint16_t)msg->payload.u64;
		qid = ((uint16_t)msg->payload.u64) & VHOST_USER_VRING_IDX_MASK;
		rc = enable_device_vq(vsession, qid);
		if (rc) {
			return RTE_VHOST_MSG_RESULT_ERR;