Subject: Fix build errors with linux 5.14

Upstream-Status: backport

svn-id: r89690

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>

Index: a/src/VBox/Additions/linux/drm/vbox_drv.h
===================================================================
--- a/src/VBox/Additions/linux/drm/vbox_drv.h	(revision 89690)
+++ a/src/VBox/Additions/linux/drm/vbox_drv.h	(revision 90498)
@@ -227,6 +227,15 @@
 				sizeof(HGSMIHOSTFLAGS))
 #define HOST_FLAGS_OFFSET GUEST_HEAP_USABLE_SIZE
 
+/** Field @pdev of struct drm_device was removed in 5.14. This macro
+ * transparently handles this change. Input argument is a pointer
+ * to struct drm_device. */
+#if RTLNX_VER_MIN(5,14,0)
+# define VBOX_DRM_TO_PCI_DEV(_dev) to_pci_dev(_dev->dev)
+#else
+# define VBOX_DRM_TO_PCI_DEV(_dev) _dev->pdev
+#endif
+
 /** How frequently we refresh if the guest is not providing dirty rectangles. */
 #define VBOX_REFRESH_PERIOD (HZ / 2)
 
Index: a/src/VBox/Additions/linux/drm/vbox_main.c
===================================================================
--- a/src/VBox/Additions/linux/drm/vbox_main.c	(revision 89690)
+++ a/src/VBox/Additions/linux/drm/vbox_main.c	(revision 90498)
@@ -290,7 +290,7 @@
 	/* Take a command buffer for each screen from the end of usable VRAM. */
 	vbox->available_vram_size -= vbox->num_crtcs * VBVA_MIN_BUFFER_SIZE;
 
-	vbox->vbva_buffers = pci_iomap_range(vbox->dev->pdev, 0,
+	vbox->vbva_buffers = pci_iomap_range(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0,
 					     vbox->available_vram_size,
 					     vbox->num_crtcs *
 					     VBVA_MIN_BUFFER_SIZE);
@@ -311,7 +311,7 @@
 	return 0;
 
 err_pci_iounmap:
-	pci_iounmap(vbox->dev->pdev, vbox->vbva_buffers);
+	pci_iounmap(VBOX_DRM_TO_PCI_DEV(vbox->dev), vbox->vbva_buffers);
 	return ret;
 }
 
@@ -318,7 +318,7 @@
 static void vbox_accel_fini(struct vbox_private *vbox)
 {
 	vbox_disable_accel(vbox);
-	pci_iounmap(vbox->dev->pdev, vbox->vbva_buffers);
+	pci_iounmap(VBOX_DRM_TO_PCI_DEV(vbox->dev), vbox->vbva_buffers);
 }
 
 /** Do we support the 4.3 plus mode hint reporting interface? */
@@ -393,7 +393,7 @@
 
 	/* Map guest-heap at end of vram */
 	vbox->guest_heap =
-	    pci_iomap_range(vbox->dev->pdev, 0, GUEST_HEAP_OFFSET(vbox),
+	    pci_iomap_range(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0, GUEST_HEAP_OFFSET(vbox),
 			    GUEST_HEAP_SIZE);
 	if (!vbox->guest_heap)
 		return -ENOMEM;
@@ -442,7 +442,7 @@
 err_destroy_guest_pool:
 	gen_pool_destroy(vbox->guest_pool);
 err_unmap_guest_heap:
-	pci_iounmap(vbox->dev->pdev, vbox->guest_heap);
+	pci_iounmap(VBOX_DRM_TO_PCI_DEV(vbox->dev), vbox->guest_heap);
 	return ret;
 }
 
@@ -452,7 +452,7 @@
 	cancel_delayed_work(&vbox->refresh_work);
 	vbox_accel_fini(vbox);
 	gen_pool_destroy(vbox->guest_pool);
-	pci_iounmap(vbox->dev->pdev, vbox->guest_heap);
+	pci_iounmap(VBOX_DRM_TO_PCI_DEV(vbox->dev), vbox->guest_heap);
 }
 
 #if RTLNX_VER_MIN(4,19,0) || RTLNX_RHEL_MIN(8,3)
@@ -567,12 +567,16 @@
 
 	size = roundup(size, PAGE_SIZE);
 	if (size == 0)
+	{
+		DRM_ERROR("bad size\n");
 		return -EINVAL;
+	}
 
 	ret = vbox_bo_create(dev, size, 0, 0, &vboxbo);
 	if (ret) {
 		if (ret != -ERESTARTSYS)
 			DRM_ERROR("failed to allocate GEM object\n");
+		DRM_ERROR("failed to allocate GEM (%d)\n", ret);
 		return ret;
 	}
 
@@ -628,6 +632,21 @@
 {
 	struct vbox_bo *vbox_bo = gem_to_vbox_bo(obj);
 
+#if RTLNX_VER_MIN(5,14,0)
+	/* Starting from kernel 5.14, there is a warning appears in dmesg
+	 * on attempt to desroy pinned buffer object. Make sure it is unpinned. */
+	while (vbox_bo->bo.pin_count)
+	{
+		int ret;
+		ret = vbox_bo_unpin(vbox_bo);
+		if (ret)
+		{
+			DRM_ERROR("unable to unpin buffer object\n");
+			break;
+		}
+	}
+#endif
+
 	ttm_bo_put(&vbox_bo->bo);
 }
 
@@ -648,7 +667,7 @@
 		      u32 handle, u64 *offset)
 {
 	struct drm_gem_object *obj;
-	int ret;
+	int ret = 0;
 	struct vbox_bo *bo;
 
 	mutex_lock(&dev->struct_mutex);
@@ -665,8 +684,15 @@
 	bo = gem_to_vbox_bo(obj);
 	*offset = vbox_bo_mmap_offset(bo);
 
+#if RTLNX_VER_MIN(5,14,0)
+	ret = drm_vma_node_allow(&bo->bo.base.vma_node, file);
+	if (ret)
+	{
+		DRM_ERROR("unable to grant previladges to user");
+	}
+#endif
+
 	drm_gem_object_put(obj);
-	ret = 0;
 
 out_unlock:
 	mutex_unlock(&dev->struct_mutex);
Index: a/src/VBox/Additions/linux/drm/vbox_mode.c
===================================================================
--- a/src/VBox/Additions/linux/drm/vbox_mode.c	(revision 89690)
+++ a/src/VBox/Additions/linux/drm/vbox_mode.c	(revision 90498)
@@ -245,6 +245,10 @@
 			vbox_bo_unpin(bo);
 			vbox_bo_unreserve(bo);
 		}
+		else
+		{
+			DRM_ERROR("unable to lock buffer object: error %d\n", ret);
+		}
 	}
 
 	if (&vbox->fbdev->afb == vbox_fb)
@@ -856,7 +860,9 @@
 	vbox->cursor_data_size = data_size;
 	dst = vbox->cursor_data;
 
-#if RTLNX_VER_MIN(5,12,0)
+#if RTLNX_VER_MIN(5,14,0)
+	ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.resource->num_pages, &uobj_map);
+#elif RTLNX_VER_MIN(5,12,0)
 	ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.mem.num_pages, &uobj_map);
 #else
 	ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.num_pages, &uobj_map);
Index: a/src/VBox/Additions/linux/drm/vbox_ttm.c
===================================================================
--- a/src/VBox/Additions/linux/drm/vbox_ttm.c	(revision 89690)
+++ a/src/VBox/Additions/linux/drm/vbox_ttm.c	(revision 90498)
@@ -41,6 +41,10 @@
 # include <drm/ttm/ttm_page_alloc.h>
 #endif
 
+#if RTLNX_VER_MIN(5,14,0)
+# include <drm/ttm/ttm_range_manager.h>
+#endif
+
 #if RTLNX_VER_MAX(3,18,0) && !RTLNX_RHEL_MAJ_PREREQ(7,2)
 #define PLACEMENT_FLAGS(placement) (placement)
 #else
@@ -174,11 +178,13 @@
 	*pl = vboxbo->placement;
 }
 
+#if RTLNX_VER_MAX(5,14,0)
 static int vbox_bo_verify_access(struct ttm_buffer_object *bo,
 				 struct file *filp)
 {
 	return 0;
 }
+#endif
 
 #if RTLNX_VER_MAX(5,10,0)
 static int vbox_ttm_io_mem_reserve(struct ttm_bo_device *bdev,
@@ -234,10 +240,10 @@
 		mem->bus.caching = ttm_write_combined;
 # endif
 # if RTLNX_VER_MIN(5,10,0)
-		mem->bus.offset = (mem->start << PAGE_SHIFT) + pci_resource_start(vbox->dev->pdev, 0);
+		mem->bus.offset = (mem->start << PAGE_SHIFT) + pci_resource_start(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0);
 # else
 		mem->bus.offset = mem->start << PAGE_SHIFT;
-		mem->start = pci_resource_start(vbox->dev->pdev, 0);
+		mem->start = pci_resource_start(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0);
 # endif
 		mem->bus.is_iomem = true;
 		break;
@@ -373,7 +379,9 @@
 	.eviction_valuable = ttm_bo_eviction_valuable,
 #endif
 	.evict_flags = vbox_bo_evict_flags,
+#if RTLNX_VER_MAX(5,14,0)
 	.verify_access = vbox_bo_verify_access,
+#endif
 	.io_mem_reserve = &vbox_ttm_io_mem_reserve,
 	.io_mem_free = &vbox_ttm_io_mem_free,
 #if RTLNX_VER_MIN(4,12,0) || RTLNX_RHEL_MAJ_PREREQ(7,5)
@@ -451,12 +459,12 @@
 	}
 
 #ifdef DRM_MTRR_WC
-	vbox->fb_mtrr = drm_mtrr_add(pci_resource_start(dev->pdev, 0),
-				     pci_resource_len(dev->pdev, 0),
+	vbox->fb_mtrr = drm_mtrr_add(pci_resource_start(VBOX_DRM_TO_PCI_DEV(dev), 0),
+				     pci_resource_len(VBOX_DRM_TO_PCI_DEV(dev), 0),
 				     DRM_MTRR_WC);
 #else
-	vbox->fb_mtrr = arch_phys_wc_add(pci_resource_start(dev->pdev, 0),
-					 pci_resource_len(dev->pdev, 0));
+	vbox->fb_mtrr = arch_phys_wc_add(pci_resource_start(VBOX_DRM_TO_PCI_DEV(dev), 0),
+					 pci_resource_len(VBOX_DRM_TO_PCI_DEV(dev), 0));
 #endif
 	return 0;
 
@@ -477,8 +485,8 @@
 {
 #ifdef DRM_MTRR_WC
 	drm_mtrr_del(vbox->fb_mtrr,
-		     pci_resource_start(vbox->dev->pdev, 0),
-		     pci_resource_len(vbox->dev->pdev, 0), DRM_MTRR_WC);
+		     pci_resource_start(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0),
+		     pci_resource_len(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0), DRM_MTRR_WC);
 #else
 	arch_phys_wc_del(vbox->fb_mtrr);
 #endif
@@ -560,6 +568,9 @@
 static const struct drm_gem_object_funcs vbox_drm_gem_object_funcs = {
 	.free   = vbox_gem_free_object,
 	.print_info = drm_gem_ttm_print_info,
+# if RTLNX_VER_MIN(5,14,0)
+	.mmap = drm_gem_ttm_mmap,
+# endif
 };
 #endif
 
@@ -598,6 +609,17 @@
 				       sizeof(struct vbox_bo));
 #endif
 
+#if RTLNX_VER_MIN(5,14,0)
+	/* Initialization of the following was removed from DRM stack
+	 * in 5.14, so we need to do it manually. */
+	vboxbo->bo.base.funcs = &vbox_drm_gem_object_funcs;
+	kref_init(&vboxbo->bo.base.refcount);
+	vboxbo->bo.base.size = size;
+	vboxbo->bo.base.dev = dev;
+	dma_resv_init(&vboxbo->bo.base._resv);
+	drm_vma_node_reset(&vboxbo->bo.base.vma_node);
+#endif
+
 	ret = ttm_bo_init(&vbox->ttm.bdev, &vboxbo->bo, size,
 			  ttm_bo_type_device, &vboxbo->placement,
 #if RTLNX_VER_MAX(4,17,0) && !RTLNX_RHEL_MAJ_PREREQ(7,6) && !RTLNX_SUSE_MAJ_PREREQ(15,1) && !RTLNX_SUSE_MAJ_PREREQ(12,5)
@@ -613,7 +635,11 @@
 			  NULL, vbox_bo_ttm_destroy);
 #endif
 	if (ret)
-		goto err_free_vboxbo;
+	{
+		/* In case of failure, ttm_bo_init() supposed to call
+		 * vbox_bo_ttm_destroy() which in turn will free @vboxbo. */
+		goto err_exit;
+	}
 
 	*pvboxbo = vboxbo;
 
@@ -621,12 +647,15 @@
 
 err_free_vboxbo:
 	kfree(vboxbo);
+err_exit:
 	return ret;
 }
 
 static inline u64 vbox_bo_gpu_offset(struct vbox_bo *bo)
 {
-#if RTLNX_VER_MIN(5,9,0) || RTLNX_RHEL_MIN(8,4) || RTLNX_SUSE_MAJ_PREREQ(15,3)
+#if RTLNX_VER_MIN(5,14,0)
+	return bo->bo.resource->start << PAGE_SHIFT;
+#elif RTLNX_VER_MIN(5,9,0) || RTLNX_RHEL_MIN(8,4) || RTLNX_SUSE_MAJ_PREREQ(15,3)
 	return bo->bo.mem.start << PAGE_SHIFT;
 #else
 	return bo->bo.offset;
@@ -685,7 +714,7 @@
 	struct ttm_operation_ctx ctx = { false, false };
 # endif
 #endif
-	int ret;
+	int ret = 0;
 #if RTLNX_VER_MAX(5,11,0)
 	int i;
 #endif
@@ -765,6 +794,7 @@
 {
 	struct drm_file *file_priv;
 	struct vbox_private *vbox;
+	int ret = -EINVAL;
 
 	if (unlikely(vma->vm_pgoff < DRM_FILE_PAGE_OFFSET))
 		return -EINVAL;
@@ -772,5 +802,12 @@
 	file_priv = filp->private_data;
 	vbox = file_priv->minor->dev->dev_private;
 
-	return ttm_bo_mmap(filp, vma, &vbox->ttm.bdev);
+#if RTLNX_VER_MIN(5,14,0)
+	if (drm_dev_is_unplugged(file_priv->minor->dev))
+		return -ENODEV;
+	ret = drm_gem_mmap(filp, vma);
+#else
+	ret = ttm_bo_mmap(filp, vma, &vbox->ttm.bdev);
+#endif
+	return ret;
 }
Index: a/src/VBox/Additions/linux/drm/vbox_fb.c
===================================================================
--- a/src/VBox/Additions/linux/drm/vbox_fb.c	(revision 89690)
+++ a/src/VBox/Additions/linux/drm/vbox_fb.c	(revision 90498)
@@ -301,7 +301,9 @@
 		return ret;
 	}
 
-#if RTLNX_VER_MIN(5,12,0)
+#if RTLNX_VER_MIN(5,14,0)
+	ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.resource->num_pages, &bo->kmap);
+#elif RTLNX_VER_MIN(5,12,0)
 	ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.mem.num_pages, &bo->kmap);
 #else
 	ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.num_pages, &bo->kmap);
@@ -337,8 +339,8 @@
 	 * This seems to be done for safety checking that the framebuffer
 	 * is not registered twice by different drivers.
 	 */
-	info->apertures->ranges[0].base = pci_resource_start(dev->pdev, 0);
-	info->apertures->ranges[0].size = pci_resource_len(dev->pdev, 0);
+	info->apertures->ranges[0].base = pci_resource_start(VBOX_DRM_TO_PCI_DEV(dev), 0);
+	info->apertures->ranges[0].size = pci_resource_len(VBOX_DRM_TO_PCI_DEV(dev), 0);
 
 #if RTLNX_VER_MIN(5,2,0) || RTLNX_RHEL_MAJ_PREREQ(8,2)
         /*
Index: a/src/VBox/Additions/linux/drm/vbox_drv.c
===================================================================
--- a/src/VBox/Additions/linux/drm/vbox_drv.c	(revision 89690)
+++ a/src/VBox/Additions/linux/drm/vbox_drv.c	(revision 90498)
@@ -43,6 +43,10 @@
 # include <drm/drm_probe_helper.h>
 #endif
 
+#if RTLNX_VER_MIN(5,14,0)
+# include <drm/drm_aperture.h>
+#endif
+
 #include "version-generated.h"
 #include "revision-generated.h"
 
@@ -65,12 +69,23 @@
 	struct drm_device *dev = NULL;
 	int ret = 0;
 
+# if RTLNX_VER_MIN(5,14,0)
+	ret = drm_aperture_remove_conflicting_pci_framebuffers(pdev, "vboxvideofb");
+	if (ret)
+	{
+		printk("unable to remove conflicting framebuffer devices\n");
+		return ret;
+	}
+# endif /* 5.14 */
+
 	dev = drm_dev_alloc(&driver, &pdev->dev);
 	if (IS_ERR(dev)) {
 		ret = PTR_ERR(dev);
 		goto err_drv_alloc;
 	}
+#if RTLNX_VER_MAX(5,14,0)
 	dev->pdev = pdev;
+#endif
 	pci_set_drvdata(pdev, dev);
 
 	ret = vbox_driver_load(dev);
@@ -125,7 +140,7 @@
 
 	drm_kms_helper_poll_disable(dev);
 
-	pci_save_state(dev->pdev);
+	pci_save_state(VBOX_DRM_TO_PCI_DEV(dev));
 
 	drm_fb_helper_set_suspend_unlocked(&vbox->fbdev->helper, true);
 
@@ -147,7 +162,7 @@
 {
 	int ret;
 
-	if (pci_enable_device(dev->pdev))
+	if (pci_enable_device(VBOX_DRM_TO_PCI_DEV(dev)))
 		return -EIO;
 
 	ret = vbox_drm_thaw(dev);
Index: a/src/VBox/Additions/linux/drm/vbox_irq.c
===================================================================
--- a/src/VBox/Additions/linux/drm/vbox_irq.c	(revision 89690)
+++ a/src/VBox/Additions/linux/drm/vbox_irq.c	(revision 90498)
@@ -206,7 +206,7 @@
 	INIT_WORK(&vbox->hotplug_work, vbox_hotplug_worker);
 	vbox_update_mode_hints(vbox);
 #if RTLNX_VER_MIN(3,16,0) || RTLNX_RHEL_MAJ_PREREQ(7,1)
-	return drm_irq_install(vbox->dev, vbox->dev->pdev->irq);
+	return drm_irq_install(vbox->dev, VBOX_DRM_TO_PCI_DEV(vbox->dev)->irq);
 #else
 	return drm_irq_install(vbox->dev);
 #endif
