lkml.org 
[lkml]   [2021]   [Jul]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 12/21] drm/i915/gvt: devirtualize ->{get,put}_vfio_device
    Date
    Just open code the calls to the VFIO APIs.

    Signed-off-by: Christoph Hellwig <hch@lst.de>
    ---
    drivers/gpu/drm/i915/gvt/dmabuf.c | 12 ++++++-----
    drivers/gpu/drm/i915/gvt/hypercall.h | 2 --
    drivers/gpu/drm/i915/gvt/kvmgt.c | 22 --------------------
    drivers/gpu/drm/i915/gvt/mpt.h | 30 ----------------------------
    4 files changed, 7 insertions(+), 59 deletions(-)

    diff --git a/drivers/gpu/drm/i915/gvt/dmabuf.c b/drivers/gpu/drm/i915/gvt/dmabuf.c
    index 8e65cd8258b9..bc53a0c60b44 100644
    --- a/drivers/gpu/drm/i915/gvt/dmabuf.c
    +++ b/drivers/gpu/drm/i915/gvt/dmabuf.c
    @@ -29,7 +29,7 @@
    */

    #include <linux/dma-buf.h>
    -#include <linux/vfio.h>
    +#include <linux/mdev.h>

    #include "i915_drv.h"
    #include "gvt.h"
    @@ -152,7 +152,7 @@ static void dmabuf_gem_object_free(struct kref *kref)
    struct intel_vgpu_dmabuf_obj, list);
    if (dmabuf_obj == obj) {
    list_del(pos);
    - intel_gvt_hypervisor_put_vfio_device(vgpu);
    + vfio_device_put(vgpu->vfio_device);
    idr_remove(&vgpu->object_idr,
    dmabuf_obj->dmabuf_id);
    kfree(dmabuf_obj->info);
    @@ -493,9 +493,11 @@ int intel_vgpu_query_plane(struct intel_vgpu *vgpu, void *args)
    kref_init(&dmabuf_obj->kref);

    mutex_lock(&vgpu->dmabuf_lock);
    - if (intel_gvt_hypervisor_get_vfio_device(vgpu)) {
    - gvt_vgpu_err("get vfio device failed\n");
    + vgpu->vfio_device = vfio_device_get_from_dev(mdev_dev(vgpu->mdev));
    + if (!vgpu->vfio_device) {
    + gvt_vgpu_err("failed to get vfio device\n");
    mutex_unlock(&vgpu->dmabuf_lock);
    + ret = -ENODEV;
    goto out_free_info;
    }
    mutex_unlock(&vgpu->dmabuf_lock);
    @@ -605,7 +607,7 @@ void intel_vgpu_dmabuf_cleanup(struct intel_vgpu *vgpu)
    dmabuf_obj->vgpu = NULL;

    idr_remove(&vgpu->object_idr, dmabuf_obj->dmabuf_id);
    - intel_gvt_hypervisor_put_vfio_device(vgpu);
    + vfio_device_put(vgpu->vfio_device);
    list_del(pos);

    /* dmabuf_obj might be freed in dmabuf_obj_put */
    diff --git a/drivers/gpu/drm/i915/gvt/hypercall.h b/drivers/gpu/drm/i915/gvt/hypercall.h
    index 61e493e2de85..fd903d52f431 100644
    --- a/drivers/gpu/drm/i915/gvt/hypercall.h
    +++ b/drivers/gpu/drm/i915/gvt/hypercall.h
    @@ -60,8 +60,6 @@ struct intel_gvt_mpt {

    int (*set_opregion)(struct intel_vgpu *vgpu);
    int (*set_edid)(struct intel_vgpu *vgpu, int port_num);
    - int (*get_vfio_device)(struct intel_vgpu *vgpu);
    - void (*put_vfio_device)(struct intel_vgpu *vgpu);
    bool (*is_valid_gfn)(struct intel_vgpu *vgpu, unsigned long gfn);
    };

    diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c
    index 7b588a371adb..a74fd4c78f35 100644
    --- a/drivers/gpu/drm/i915/gvt/kvmgt.c
    +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c
    @@ -643,18 +643,6 @@ static int intel_vgpu_register_reg(struct intel_vgpu *vgpu,
    return 0;
    }

    -static int kvmgt_get_vfio_device(struct intel_vgpu *vgpu)
    -{
    - vgpu->vfio_device = vfio_device_get_from_dev(
    - mdev_dev(vgpu->mdev));
    - if (!vgpu->vfio_device) {
    - gvt_vgpu_err("failed to get vfio device\n");
    - return -ENODEV;
    - }
    - return 0;
    -}
    -
    -
    static int kvmgt_set_opregion(struct intel_vgpu *vgpu)
    {
    void *base;
    @@ -711,14 +699,6 @@ static int kvmgt_set_edid(struct intel_vgpu *vgpu, int port_num)
    return ret;
    }

    -static void kvmgt_put_vfio_device(struct intel_vgpu *vgpu)
    -{
    - if (WARN_ON(!vgpu->vfio_device))
    - return;
    -
    - vfio_device_put(vgpu->vfio_device);
    -}
    -
    static int intel_vgpu_create(struct mdev_device *mdev)
    {
    struct intel_vgpu *vgpu = NULL;
    @@ -2033,8 +2013,6 @@ static const struct intel_gvt_mpt kvmgt_mpt = {
    .dma_pin_guest_page = kvmgt_dma_pin_guest_page,
    .set_opregion = kvmgt_set_opregion,
    .set_edid = kvmgt_set_edid,
    - .get_vfio_device = kvmgt_get_vfio_device,
    - .put_vfio_device = kvmgt_put_vfio_device,
    .is_valid_gfn = kvmgt_is_valid_gfn,
    };

    diff --git a/drivers/gpu/drm/i915/gvt/mpt.h b/drivers/gpu/drm/i915/gvt/mpt.h
    index 72388ceec596..2196187203af 100644
    --- a/drivers/gpu/drm/i915/gvt/mpt.h
    +++ b/drivers/gpu/drm/i915/gvt/mpt.h
    @@ -242,36 +242,6 @@ static inline int intel_gvt_hypervisor_set_edid(struct intel_vgpu *vgpu,
    return intel_gvt_host.mpt->set_edid(vgpu, port_num);
    }

    -/**
    - * intel_gvt_hypervisor_get_vfio_device - increase vfio device ref count
    - * @vgpu: a vGPU
    - *
    - * Returns:
    - * Zero on success, negative error code if failed.
    - */
    -static inline int intel_gvt_hypervisor_get_vfio_device(struct intel_vgpu *vgpu)
    -{
    - if (!intel_gvt_host.mpt->get_vfio_device)
    - return 0;
    -
    - return intel_gvt_host.mpt->get_vfio_device(vgpu);
    -}
    -
    -/**
    - * intel_gvt_hypervisor_put_vfio_device - decrease vfio device ref count
    - * @vgpu: a vGPU
    - *
    - * Returns:
    - * Zero on success, negative error code if failed.
    - */
    -static inline void intel_gvt_hypervisor_put_vfio_device(struct intel_vgpu *vgpu)
    -{
    - if (!intel_gvt_host.mpt->put_vfio_device)
    - return;
    -
    - intel_gvt_host.mpt->put_vfio_device(vgpu);
    -}
    -
    /**
    * intel_gvt_hypervisor_is_valid_gfn - check if a visible gfn
    * @vgpu: a vGPU
    --
    2.30.2
    \
     
     \ /
      Last update: 2021-07-21 17:59    [W:4.165 / U:0.220 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site