drm/i915/gvt: addressed vGPU hang during OCL conformance test

Submitted by Xiaolin Zhang on July 17, 2019, 2:06 p.m.


Message ID 1563372360-38030-1-git-send-email-xiaolin.zhang@intel.com
State New
Headers show
Series "drm/i915/gvt: addressed vGPU hang during OCL conformance test" ( rev: 1 ) in Intel GVT devel

Not browsing as part of any series.

Commit Message

Xiaolin Zhang July 17, 2019, 2:06 p.m.
GPU hang observed during the guest OCL conformance test which is caused
by THP GTT feature used durning the test.

it was observed the same GFN with different size (4K and 2M) requested
from the quest in GVT. so during the guest page dma map stage, it is
required to unmap first with orginal size and then remap again with
requested size.

Signed-off-by: Xiaolin Zhang <xiaolin.zhang@intel.com>
 drivers/gpu/drm/i915/gvt/kvmgt.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

Patch hide | download patch | download mbox

diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c
index a68addf..4a7cf86 100644
--- a/drivers/gpu/drm/i915/gvt/kvmgt.c
+++ b/drivers/gpu/drm/i915/gvt/kvmgt.c
@@ -1911,6 +1911,18 @@  static int kvmgt_dma_map_guest_page(unsigned long handle, unsigned long gfn,
 		ret = __gvt_cache_add(info->vgpu, gfn, *dma_addr, size);
 		if (ret)
 			goto err_unmap;
+	} else if (entry->size != size) {
+		/* the same gfn with different size: unmap and re-map */
+		gvt_dma_unmap_page(vgpu, gfn, entry->dma_addr, entry->size);
+		__gvt_cache_remove_entry(vgpu, entry);
+		ret = gvt_dma_map_page(vgpu, gfn, dma_addr, size);
+		if (ret)
+			goto err_unlock;
+		ret = __gvt_cache_add(info->vgpu, gfn, *dma_addr, size);
+		if (ret)
+			goto err_unmap;
 	} else {
 		*dma_addr = entry->dma_addr;