Commit 0fd542bc authored by Changpeng Liu's avatar Changpeng Liu Committed by Tomasz Zawadzki
Browse files

vhost: remove session interrupt mode flag



Interrupt mode is a global configuration when starting SPDK,
`vhost_vq_avail_ring_get` and `vhost_vq_used_ring_enqueue` will
not be called before the device is started, just use the global
configuration flag is OK.

Change-Id: I33ca96a4e39d0fc2657ab4a410ad9daf496446bb
Signed-off-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/22734


Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Reviewed-by: default avatarArtur Paszkiewicz <artur.paszkiewicz@intel.com>
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent b838741d
Loading
Loading
Loading
Loading
+3 −8
Original line number Diff line number Diff line
@@ -149,7 +149,7 @@ vhost_vq_avail_ring_get(struct spdk_vhost_virtqueue *virtqueue, uint16_t *reqs,

	spdk_smp_rmb();

	if (virtqueue->vsession && spdk_unlikely(virtqueue->vsession->interrupt_mode)) {
	if (virtqueue->vsession && spdk_unlikely(spdk_interrupt_mode_is_enabled())) {
		/* Read to clear vring's kickfd */
		rc = read(vring->kickfd, &u64_value, sizeof(u64_value));
		if (rc < 0) {
@@ -174,7 +174,7 @@ vhost_vq_avail_ring_get(struct spdk_vhost_virtqueue *virtqueue, uint16_t *reqs,

	virtqueue->last_avail_idx += count;
	/* Check whether there are unprocessed reqs in vq, then kick vq manually */
	if (virtqueue->vsession && spdk_unlikely(virtqueue->vsession->interrupt_mode)) {
	if (virtqueue->vsession && spdk_unlikely(spdk_interrupt_mode_is_enabled())) {
		/* If avail_idx is larger than virtqueue's last_avail_idx, then there is unprocessed reqs.
		 * avail_idx should get updated here from memory, in case of race condition with guest.
		 */
@@ -472,7 +472,7 @@ vhost_vq_used_ring_enqueue(struct spdk_vhost_session *vsession,

	virtqueue->used_req_cnt++;

	if (vsession->interrupt_mode) {
	if (spdk_unlikely(spdk_interrupt_mode_is_enabled())) {
		if (virtqueue->vring.desc == NULL || vhost_vq_event_is_suppressed(virtqueue)) {
			return;
		}
@@ -1431,11 +1431,6 @@ vhost_user_session_set_interrupt_mode(struct spdk_vhost_session *vsession, bool
			if (rc < 0) {
				SPDK_ERRLOG("failed to kick vring: %s.\n", spdk_strerror(errno));
			}

			vsession->interrupt_mode = true;
		} else {

			vsession->interrupt_mode = false;
		}
	}
}
+1 −1
Original line number Diff line number Diff line
@@ -1195,7 +1195,7 @@ vhost_user_session_bdev_remove_cb(struct spdk_vhost_dev *vdev,
	bvsession = to_blk_session(vsession);
	if (bvsession->requestq_poller) {
		spdk_poller_unregister(&bvsession->requestq_poller);
		if (vsession->interrupt_mode) {
		if (spdk_interrupt_mode_is_enabled()) {
			vhost_blk_session_unregister_interrupts(bvsession);
			rc = vhost_blk_session_register_no_bdev_interrupts(bvsession);
			if (rc) {
+0 −1
Original line number Diff line number Diff line
@@ -115,7 +115,6 @@ struct spdk_vhost_session {

	bool started;
	bool starting;
	bool interrupt_mode;
	bool needs_restart;

	struct rte_vhost_memory *mem;