Merge tag 'kbuild-v5.13-2' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy...
[linux-2.6-microblaze.git] / drivers / vhost / vdpa.c
index bfa4c6e..fb41db3 100644 (file)
 #include <linux/cdev.h>
 #include <linux/device.h>
 #include <linux/mm.h>
+#include <linux/slab.h>
 #include <linux/iommu.h>
 #include <linux/uuid.h>
 #include <linux/vdpa.h>
 #include <linux/nospec.h>
 #include <linux/vhost.h>
-#include <linux/virtio_net.h>
 
 #include "vhost.h"
 
@@ -188,13 +188,8 @@ static long vhost_vdpa_set_status(struct vhost_vdpa *v, u8 __user *statusp)
 static int vhost_vdpa_config_validate(struct vhost_vdpa *v,
                                      struct vhost_vdpa_config *c)
 {
-       long size = 0;
-
-       switch (v->virtio_id) {
-       case VIRTIO_ID_NET:
-               size = sizeof(struct virtio_net_config);
-               break;
-       }
+       struct vdpa_device *vdpa = v->vdpa;
+       long size = vdpa->config->get_config_size(vdpa);
 
        if (c->len == 0)
                return -EINVAL;
@@ -836,18 +831,14 @@ static void vhost_vdpa_free_domain(struct vhost_vdpa *v)
 static void vhost_vdpa_set_iova_range(struct vhost_vdpa *v)
 {
        struct vdpa_iova_range *range = &v->range;
-       struct iommu_domain_geometry geo;
        struct vdpa_device *vdpa = v->vdpa;
        const struct vdpa_config_ops *ops = vdpa->config;
 
        if (ops->get_iova_range) {
                *range = ops->get_iova_range(vdpa);
-       } else if (v->domain &&
-                  !iommu_domain_get_attr(v->domain,
-                  DOMAIN_ATTR_GEOMETRY, &geo) &&
-                  geo.force_aperture) {
-               range->first = geo.aperture_start;
-               range->last = geo.aperture_end;
+       } else if (v->domain && v->domain->geometry.force_aperture) {
+               range->first = v->domain->geometry.aperture_start;
+               range->last = v->domain->geometry.aperture_end;
        } else {
                range->first = 0;
                range->last = ULLONG_MAX;
@@ -993,6 +984,7 @@ static int vhost_vdpa_mmap(struct file *file, struct vm_area_struct *vma)
        if (vma->vm_end - vma->vm_start != notify.size)
                return -ENOTSUPP;
 
+       vma->vm_flags |= VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP;
        vma->vm_ops = &vhost_vdpa_vm_ops;
        return 0;
 }
@@ -1027,10 +1019,6 @@ static int vhost_vdpa_probe(struct vdpa_device *vdpa)
        int minor;
        int r;
 
-       /* Currently, we only accept the network devices. */
-       if (ops->get_device_id(vdpa) != VIRTIO_ID_NET)
-               return -ENOTSUPP;
-
        v = kzalloc(sizeof(*v), GFP_KERNEL | __GFP_RETRY_MAYFAIL);
        if (!v)
                return -ENOMEM;