Unverified Commit f3af467e authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!12701 vhost_vdpa: assign irq bypass producer token correctly

parents 4233328a d30be112
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -193,11 +193,9 @@ static void vhost_vdpa_setup_vq_irq(struct vhost_vdpa *v, u16 qid)
	if (irq < 0)
		return;

	irq_bypass_unregister_producer(&vq->call_ctx.producer);
	if (!vq->call_ctx.ctx)
		return;

	vq->call_ctx.producer.token = vq->call_ctx.ctx;
	vq->call_ctx.producer.irq = irq;
	ret = irq_bypass_register_producer(&vq->call_ctx.producer);
	if (unlikely(ret))
@@ -750,6 +748,14 @@ static long vhost_vdpa_vring_ioctl(struct vhost_vdpa *v, unsigned int cmd,
			vq->last_avail_idx = vq_state.split.avail_index;
		}
		break;
	case VHOST_SET_VRING_CALL:
		if (vq->call_ctx.ctx) {
			if (ops->get_status(vdpa) &
			    VIRTIO_CONFIG_S_DRIVER_OK)
				vhost_vdpa_unsetup_vq_irq(v, idx);
			vq->call_ctx.producer.token = NULL;
		}
		break;
	}

	r = vhost_vring_ioctl(&v->vdev, cmd, argp);
@@ -781,12 +787,15 @@ static long vhost_vdpa_vring_ioctl(struct vhost_vdpa *v, unsigned int cmd,
		if (vq->call_ctx.ctx) {
			cb.callback = vhost_vdpa_virtqueue_cb;
			cb.private = vq;
			vq->call_ctx.producer.token = vq->call_ctx.ctx;
			if (ops->get_status(vdpa) &
			    VIRTIO_CONFIG_S_DRIVER_OK)
				vhost_vdpa_setup_vq_irq(v, idx);
		} else {
			cb.callback = NULL;
			cb.private = NULL;
		}
		ops->set_vq_cb(vdpa, idx, &cb);
		vhost_vdpa_setup_vq_irq(v, idx);
		break;

	case VHOST_SET_VRING_NUM:
@@ -1510,6 +1519,7 @@ static int vhost_vdpa_open(struct inode *inode, struct file *filep)
	for (i = 0; i < nvqs; i++) {
		vqs[i] = &v->vqs[i];
		vqs[i]->handle_kick = handle_vq_kick;
		vqs[i]->call_ctx.ctx = NULL;
	}
	vhost_dev_init(dev, vqs, nvqs, 0, 0, 0, false,
		       vhost_vdpa_process_iotlb_msg);