Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8f89743b authored by Jike Song's avatar Jike Song Committed by Zhenyu Wang
Browse files

drm/i915/gvt: remove obsolete code for old kvmgt opregion



Current GVT contains some obsolete logic originally cooked to
support the old, non-vfio kvmgt, which is actually workarounds.
We don't support that anymore, so it's safe to remove it and
make a better framework.

Signed-off-by: default avatarJike Song <jike.song@intel.com>
Signed-off-by: default avatarZhenyu Wang <zhenyuw@linux.intel.com>
parent 1f31c829
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -82,9 +82,8 @@ static int map_aperture(struct intel_vgpu *vgpu, bool map)

	ret = intel_gvt_hypervisor_map_gfn_to_mfn(vgpu, first_gfn,
						  first_mfn,
						  vgpu_aperture_sz(vgpu)
						  >> PAGE_SHIFT, map,
						  GVT_MAP_APERTURE);
						  vgpu_aperture_sz(vgpu) >>
						  PAGE_SHIFT, map);
	if (ret)
		return ret;

+1 −2
Original line number Diff line number Diff line
@@ -60,8 +60,7 @@ struct intel_gvt_mpt {
			 unsigned long len);
	unsigned long (*gfn_to_mfn)(unsigned long handle, unsigned long gfn);
	int (*map_gfn_to_mfn)(unsigned long handle, unsigned long gfn,
			      unsigned long mfn, unsigned int nr, bool map,
			      int type);
			      unsigned long mfn, unsigned int nr, bool map);
	int (*set_trap_area)(unsigned long handle, u64 start, u64 end,
			     bool map);
};
+2 −8
Original line number Diff line number Diff line
@@ -224,11 +224,6 @@ static inline unsigned long intel_gvt_hypervisor_gfn_to_mfn(
	return intel_gvt_host.mpt->gfn_to_mfn(vgpu->handle, gfn);
}

enum {
	GVT_MAP_APERTURE = 0,
	GVT_MAP_OPREGION,
};

/**
 * intel_gvt_hypervisor_map_gfn_to_mfn - map a GFN region to MFN
 * @vgpu: a vGPU
@@ -236,7 +231,6 @@ enum {
 * @mfn: host PFN
 * @nr: amount of PFNs
 * @map: map or unmap
 * @type: map type
 *
 * Returns:
 * Zero on success, negative error code if failed.
@@ -244,10 +238,10 @@ enum {
static inline int intel_gvt_hypervisor_map_gfn_to_mfn(
		struct intel_vgpu *vgpu, unsigned long gfn,
		unsigned long mfn, unsigned int nr,
		bool map, int type)
		bool map)
{
	return intel_gvt_host.mpt->map_gfn_to_mfn(vgpu->handle, gfn, mfn, nr,
						  map, type);
						  map);
}

/**
+5 −29
Original line number Diff line number Diff line
@@ -73,7 +73,7 @@ static int map_vgpu_opregion(struct intel_vgpu *vgpu, bool map)
		}
		ret = intel_gvt_hypervisor_map_gfn_to_mfn(vgpu,
				vgpu_opregion(vgpu)->gfn[i],
				mfn, 1, map, GVT_MAP_OPREGION);
				mfn, 1, map);
		if (ret) {
			gvt_err("fail to map GFN to MFN, errno: %d\n", ret);
			return ret;
@@ -89,29 +89,19 @@ static int map_vgpu_opregion(struct intel_vgpu *vgpu, bool map)
 */
void intel_vgpu_clean_opregion(struct intel_vgpu *vgpu)
{
	int i;

	gvt_dbg_core("vgpu%d: clean vgpu opregion\n", vgpu->id);

	if (!vgpu_opregion(vgpu)->va)
		return;

	if (intel_gvt_host.hypervisor_type == INTEL_GVT_HYPERVISOR_KVM) {
		vunmap(vgpu_opregion(vgpu)->va);
		for (i = 0; i < INTEL_GVT_OPREGION_PAGES; i++) {
			if (vgpu_opregion(vgpu)->pages[i]) {
				put_page(vgpu_opregion(vgpu)->pages[i]);
				vgpu_opregion(vgpu)->pages[i] = NULL;
			}
		}
	} else {
	if (intel_gvt_host.hypervisor_type == INTEL_GVT_HYPERVISOR_XEN) {
		map_vgpu_opregion(vgpu, false);
		free_pages((unsigned long)vgpu_opregion(vgpu)->va,
				INTEL_GVT_OPREGION_PORDER);
	}

		vgpu_opregion(vgpu)->va = NULL;
	}
}

/**
 * intel_vgpu_init_opregion - initialize the stuff used to emulate opregion
@@ -137,22 +127,8 @@ int intel_vgpu_init_opregion(struct intel_vgpu *vgpu, u32 gpa)
		ret = map_vgpu_opregion(vgpu, true);
		if (ret)
			return ret;
	} else {
		gvt_dbg_core("emulate opregion from userspace\n");

		/*
		 * If opregion pages are not allocated from host kenrel,
		 * most of the params are meaningless
		 */
		ret = intel_gvt_hypervisor_map_gfn_to_mfn(vgpu,
				0, /* not used */
				0, /* not used */
				2, /* not used */
				1,
				GVT_MAP_OPREGION);
		if (ret)
			return ret;
	}

	return 0;
}

+1 −9
Original line number Diff line number Diff line
@@ -315,15 +315,9 @@ static struct intel_vgpu *__intel_gvt_create_vgpu(struct intel_gvt *gvt,
	if (ret)
		goto out_detach_hypervisor_vgpu;

	if (intel_gvt_host.hypervisor_type == INTEL_GVT_HYPERVISOR_KVM) {
		ret = intel_vgpu_init_opregion(vgpu, 0);
		if (ret)
			goto out_clean_gtt;
	}

	ret = intel_vgpu_init_display(vgpu);
	if (ret)
		goto out_clean_opregion;
		goto out_clean_gtt;

	ret = intel_vgpu_init_execlist(vgpu);
	if (ret)
@@ -348,8 +342,6 @@ static struct intel_vgpu *__intel_gvt_create_vgpu(struct intel_gvt *gvt,
	intel_vgpu_clean_execlist(vgpu);
out_clean_display:
	intel_vgpu_clean_display(vgpu);
out_clean_opregion:
	intel_vgpu_clean_opregion(vgpu);
out_clean_gtt:
	intel_vgpu_clean_gtt(vgpu);
out_detach_hypervisor_vgpu: