diff options
| -rw-r--r-- | drivers/gpu/drm/i915/gvt/hypercall.h | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/gvt/kvmgt.c | 16 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/gvt/mpt.h | 2 |
3 files changed, 16 insertions, 4 deletions
diff --git a/drivers/gpu/drm/i915/gvt/hypercall.h b/drivers/gpu/drm/i915/gvt/hypercall.h index 5af11cf1b482..e1675a00df12 100644 --- a/drivers/gpu/drm/i915/gvt/hypercall.h +++ b/drivers/gpu/drm/i915/gvt/hypercall.h | |||
| @@ -41,7 +41,7 @@ struct intel_gvt_mpt { | |||
| 41 | int (*host_init)(struct device *dev, void *gvt, const void *ops); | 41 | int (*host_init)(struct device *dev, void *gvt, const void *ops); |
| 42 | void (*host_exit)(struct device *dev, void *gvt); | 42 | void (*host_exit)(struct device *dev, void *gvt); |
| 43 | int (*attach_vgpu)(void *vgpu, unsigned long *handle); | 43 | int (*attach_vgpu)(void *vgpu, unsigned long *handle); |
| 44 | void (*detach_vgpu)(unsigned long handle); | 44 | void (*detach_vgpu)(void *vgpu); |
| 45 | int (*inject_msi)(unsigned long handle, u32 addr, u16 data); | 45 | int (*inject_msi)(unsigned long handle, u32 addr, u16 data); |
| 46 | unsigned long (*from_virt_to_mfn)(void *p); | 46 | unsigned long (*from_virt_to_mfn)(void *p); |
| 47 | int (*enable_page_track)(unsigned long handle, u64 gfn); | 47 | int (*enable_page_track)(unsigned long handle, u64 gfn); |
diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index c1072143da1d..a3ee6b7c3cfc 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c | |||
| @@ -1662,9 +1662,21 @@ static int kvmgt_attach_vgpu(void *vgpu, unsigned long *handle) | |||
| 1662 | return 0; | 1662 | return 0; |
| 1663 | } | 1663 | } |
| 1664 | 1664 | ||
| 1665 | static void kvmgt_detach_vgpu(unsigned long handle) | 1665 | static void kvmgt_detach_vgpu(void *p_vgpu) |
| 1666 | { | 1666 | { |
| 1667 | /* nothing to do here */ | 1667 | int i; |
| 1668 | struct intel_vgpu *vgpu = (struct intel_vgpu *)p_vgpu; | ||
| 1669 | |||
| 1670 | if (!vgpu->vdev.region) | ||
| 1671 | return; | ||
| 1672 | |||
| 1673 | for (i = 0; i < vgpu->vdev.num_regions; i++) | ||
| 1674 | if (vgpu->vdev.region[i].ops->release) | ||
| 1675 | vgpu->vdev.region[i].ops->release(vgpu, | ||
| 1676 | &vgpu->vdev.region[i]); | ||
| 1677 | vgpu->vdev.num_regions = 0; | ||
| 1678 | kfree(vgpu->vdev.region); | ||
| 1679 | vgpu->vdev.region = NULL; | ||
| 1668 | } | 1680 | } |
| 1669 | 1681 | ||
| 1670 | static int kvmgt_inject_msi(unsigned long handle, u32 addr, u16 data) | 1682 | static int kvmgt_inject_msi(unsigned long handle, u32 addr, u16 data) |
diff --git a/drivers/gpu/drm/i915/gvt/mpt.h b/drivers/gpu/drm/i915/gvt/mpt.h index 67f19992b226..3ed34123d8d1 100644 --- a/drivers/gpu/drm/i915/gvt/mpt.h +++ b/drivers/gpu/drm/i915/gvt/mpt.h | |||
| @@ -101,7 +101,7 @@ static inline void intel_gvt_hypervisor_detach_vgpu(struct intel_vgpu *vgpu) | |||
| 101 | if (!intel_gvt_host.mpt->detach_vgpu) | 101 | if (!intel_gvt_host.mpt->detach_vgpu) |
| 102 | return; | 102 | return; |
| 103 | 103 | ||
| 104 | intel_gvt_host.mpt->detach_vgpu(vgpu->handle); | 104 | intel_gvt_host.mpt->detach_vgpu(vgpu); |
| 105 | } | 105 | } |
| 106 | 106 | ||
| 107 | #define MSI_CAP_CONTROL(offset) (offset + 2) | 107 | #define MSI_CAP_CONTROL(offset) (offset + 2) |
