|
@@ -368,11 +368,18 @@ static void vhost_vdpa_get_iova_range(struct vhost_vdpa *v)
|
|
|
v->iova_range.last);
|
|
|
}
|
|
|
|
|
|
-static bool vhost_vdpa_one_time_request(struct vhost_dev *dev)
|
|
|
+/*
|
|
|
+ * The use of this function is for requests that only need to be
|
|
|
+ * applied once. Typically such request occurs at the beginning
|
|
|
+ * of operation, and before setting up queues. It should not be
|
|
|
+ * used for request that performs operation until all queues are
|
|
|
+ * set, which would need to check dev->vq_index_end instead.
|
|
|
+ */
|
|
|
+static bool vhost_vdpa_first_dev(struct vhost_dev *dev)
|
|
|
{
|
|
|
struct vhost_vdpa *v = dev->opaque;
|
|
|
|
|
|
- return v->index != 0;
|
|
|
+ return v->index == 0;
|
|
|
}
|
|
|
|
|
|
static int vhost_vdpa_get_dev_features(struct vhost_dev *dev,
|
|
@@ -453,7 +460,7 @@ static int vhost_vdpa_init(struct vhost_dev *dev, void *opaque, Error **errp)
|
|
|
|
|
|
vhost_vdpa_get_iova_range(v);
|
|
|
|
|
|
- if (vhost_vdpa_one_time_request(dev)) {
|
|
|
+ if (!vhost_vdpa_first_dev(dev)) {
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -596,7 +603,7 @@ static int vhost_vdpa_memslots_limit(struct vhost_dev *dev)
|
|
|
static int vhost_vdpa_set_mem_table(struct vhost_dev *dev,
|
|
|
struct vhost_memory *mem)
|
|
|
{
|
|
|
- if (vhost_vdpa_one_time_request(dev)) {
|
|
|
+ if (!vhost_vdpa_first_dev(dev)) {
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -625,7 +632,7 @@ static int vhost_vdpa_set_features(struct vhost_dev *dev,
|
|
|
struct vhost_vdpa *v = dev->opaque;
|
|
|
int ret;
|
|
|
|
|
|
- if (vhost_vdpa_one_time_request(dev)) {
|
|
|
+ if (!vhost_vdpa_first_dev(dev)) {
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -667,7 +674,7 @@ static int vhost_vdpa_set_backend_cap(struct vhost_dev *dev)
|
|
|
|
|
|
features &= f;
|
|
|
|
|
|
- if (!vhost_vdpa_one_time_request(dev)) {
|
|
|
+ if (vhost_vdpa_first_dev(dev)) {
|
|
|
r = vhost_vdpa_call(dev, VHOST_SET_BACKEND_FEATURES, &features);
|
|
|
if (r) {
|
|
|
return -EFAULT;
|
|
@@ -1120,7 +1127,7 @@ static int vhost_vdpa_set_log_base(struct vhost_dev *dev, uint64_t base,
|
|
|
struct vhost_log *log)
|
|
|
{
|
|
|
struct vhost_vdpa *v = dev->opaque;
|
|
|
- if (v->shadow_vqs_enabled || vhost_vdpa_one_time_request(dev)) {
|
|
|
+ if (v->shadow_vqs_enabled || !vhost_vdpa_first_dev(dev)) {
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -1242,7 +1249,7 @@ static int vhost_vdpa_get_features(struct vhost_dev *dev,
|
|
|
|
|
|
static int vhost_vdpa_set_owner(struct vhost_dev *dev)
|
|
|
{
|
|
|
- if (vhost_vdpa_one_time_request(dev)) {
|
|
|
+ if (!vhost_vdpa_first_dev(dev)) {
|
|
|
return 0;
|
|
|
}
|
|
|
|