Subject: Fix build errors with linux 5.13
Origin: upstream, https://www.virtualbox.org/browser/vbox/trunk
Bug: https://bugs.launchpad.net/bugs/1929193

diff -urpN virtualbox-6.1.22-dfsg.orig/src/VBox/Additions/linux/drm/vbox_drv.h virtualbox-6.1.22-dfsg/src/VBox/Additions/linux/drm/vbox_drv.h
--- virtualbox-6.1.22-dfsg.orig/src/VBox/Additions/linux/drm/vbox_drv.h	2021-04-28 16:24:47.000000000 +0000
+++ virtualbox-6.1.22-dfsg/src/VBox/Additions/linux/drm/vbox_drv.h	2021-06-23 10:08:44.431714404 +0000
@@ -46,20 +41,20 @@
  * Evaluates to true if the linux kernel version is equal or higher to the
  * one specfied. */
 #define RTLNX_VER_MIN(a_Major, a_Minor, a_Patch) \
-    (LINUX_VERSION_CODE >= KERNEL_VERSION(a_Major, a_Minor, a_Patch))
+	(LINUX_VERSION_CODE >= KERNEL_VERSION(a_Major, a_Minor, a_Patch))
 
 /** @def RTLNX_VER_MAX
  * Evaluates to true if the linux kernel version is less to the one specfied
  * (exclusive). */
 #define RTLNX_VER_MAX(a_Major, a_Minor, a_Patch) \
-    (LINUX_VERSION_CODE < KERNEL_VERSION(a_Major, a_Minor, a_Patch))
+	(LINUX_VERSION_CODE < KERNEL_VERSION(a_Major, a_Minor, a_Patch))
 
 /** @def RTLNX_VER_RANGE
  * Evaluates to true if the linux kernel version is equal or higher to the given
  * minimum version and less (but not equal) to the maximum version (exclusive). */
 #define RTLNX_VER_RANGE(a_MajorMin, a_MinorMin, a_PatchMin,  a_MajorMax, a_MinorMax, a_PatchMax) \
-    (   LINUX_VERSION_CODE >= KERNEL_VERSION(a_MajorMin, a_MinorMin, a_PatchMin) \
-     && LINUX_VERSION_CODE <  KERNEL_VERSION(a_MajorMax, a_MinorMax, a_PatchMax) )
+	(   LINUX_VERSION_CODE >= KERNEL_VERSION(a_MajorMin, a_MinorMin, a_PatchMin) \
+	 && LINUX_VERSION_CODE <  KERNEL_VERSION(a_MajorMax, a_MinorMax, a_PatchMax) )
 
 
 /** @def RTLNX_RHEL_MIN
@@ -70,7 +65,7 @@
  */
 #if defined(RHEL_MAJOR) && defined(RHEL_MINOR)
 # define RTLNX_RHEL_MIN(a_iMajor, a_iMinor) \
-     ((RHEL_MAJOR) > (a_iMajor) || ((RHEL_MAJOR) == (a_iMajor) && (RHEL_MINOR) >= (a_iMinor)))
+	 ((RHEL_MAJOR) > (a_iMajor) || ((RHEL_MAJOR) == (a_iMajor) && (RHEL_MINOR) >= (a_iMinor)))
 #else
 # define RTLNX_RHEL_MIN(a_iMajor, a_iMinor) (0)
 #endif
@@ -83,7 +78,7 @@
  */
 #if defined(RHEL_MAJOR) && defined(RHEL_MINOR)
 # define RTLNX_RHEL_MAX(a_iMajor, a_iMinor) \
-     ((RHEL_MAJOR) < (a_iMajor) || ((RHEL_MAJOR) == (a_iMajor) && (RHEL_MINOR) < (a_iMinor)))
+	 ((RHEL_MAJOR) < (a_iMajor) || ((RHEL_MAJOR) == (a_iMajor) && (RHEL_MINOR) < (a_iMinor)))
 #else
 # define RTLNX_RHEL_MAX(a_iMajor, a_iMinor) (0)
 #endif
@@ -95,7 +90,7 @@
  */
 #if defined(RHEL_MAJOR) && defined(RHEL_MINOR)
 # define RTLNX_RHEL_RANGE(a_iMajorMin, a_iMinorMin,  a_iMajorMax, a_iMinorMax) \
-     (RTLNX_RHEL_MIN(a_iMajorMin, a_iMinorMin) && RTLNX_RHEL_MAX(a_iMajorMax, a_iMinorMax))
+	 (RTLNX_RHEL_MIN(a_iMajorMin, a_iMinorMin) && RTLNX_RHEL_MAX(a_iMajorMax, a_iMinorMax))
 #else
 # define RTLNX_RHEL_RANGE(a_iMajorMin, a_iMinorMin,  a_iMajorMax, a_iMinorMax)  (0)
 #endif
@@ -173,7 +168,9 @@
 #include <drm/ttm/ttm_bo_api.h>
 #include <drm/ttm/ttm_bo_driver.h>
 #include <drm/ttm/ttm_placement.h>
+#if RTLNX_VER_MAX(5,13,0)
 #include <drm/ttm/ttm_memory.h>
+#endif
 #if RTLNX_VER_MAX(5,12,0)
 # include <drm/ttm/ttm_module.h>
 #endif
@@ -222,7 +219,7 @@ static inline void drm_gem_object_put(st
 				 VBVA_ADAPTER_INFORMATION_SIZE)
 #define GUEST_HEAP_SIZE   VBVA_ADAPTER_INFORMATION_SIZE
 #define GUEST_HEAP_USABLE_SIZE (VBVA_ADAPTER_INFORMATION_SIZE - \
-				sizeof(HGSMIHOSTFLAGS))
+				sizeof(struct hgsmi_host_flags))
 #define HOST_FLAGS_OFFSET GUEST_HEAP_USABLE_SIZE
 
 /** How frequently we refresh if the guest is not providing dirty rectangles. */
@@ -232,7 +229,7 @@ static inline void drm_gem_object_put(st
 static inline void *devm_kcalloc(struct device *dev, size_t n, size_t size,
 				 gfp_t flags)
 {
-    return devm_kzalloc(dev, n * size, flags);
+	return devm_kzalloc(dev, n * size, flags);
 }
 #endif
 
@@ -244,7 +241,7 @@ struct vbox_private {
 	u8 __iomem *guest_heap;
 	u8 __iomem *vbva_buffers;
 	struct gen_pool *guest_pool;
-	struct VBVABUFFERCONTEXT *vbva_info;
+	struct vbva_buf_context *vbva_info;
 	bool any_pitch;
 	u32 num_crtcs;
 	/** Amount of available VRAM, including space used for buffers. */
@@ -252,7 +249,7 @@ struct vbox_private {
 	/** Amount of available VRAM, not including space used for buffers. */
 	u32 available_vram_size;
 	/** Array of structures for receiving mode hints. */
-	VBVAMODEHINT *last_mode_hints;
+	struct vbva_modehint *last_mode_hints;
 
 	struct vbox_fbdev *fbdev;
 
@@ -263,7 +260,11 @@ struct vbox_private {
 		struct drm_global_reference mem_global_ref;
 		struct ttm_bo_global_ref bo_global_ref;
 #endif
+#if RTLNX_VER_MIN(5,13,0) 
+		struct ttm_device bdev; 
+#else
 		struct ttm_bo_device bdev;
+#endif
 		bool mm_initialised;
 	} ttm;
 
diff -urpN virtualbox-6.1.22-dfsg.orig/src/VBox/Additions/linux/drm/vbox_ttm.c virtualbox-6.1.22-dfsg/src/VBox/Additions/linux/drm/vbox_ttm.c
--- virtualbox-6.1.22-dfsg.orig/src/VBox/Additions/linux/drm/vbox_ttm.c	2021-04-28 16:24:47.000000000 +0000
+++ virtualbox-6.1.22-dfsg/src/VBox/Additions/linux/drm/vbox_ttm.c	2021-06-23 10:08:07.164057918 +0000
@@ -48,7 +43,11 @@
 #endif
 
 
+#if RTLNX_VER_MIN(5,13,0)
+static inline struct vbox_private *vbox_bdev(struct ttm_device *bd)
+#else
 static inline struct vbox_private *vbox_bdev(struct ttm_bo_device *bd)
+#endif
 {
 	return container_of(bd, struct vbox_private, ttm.bdev);
 }
@@ -188,7 +187,7 @@ static int vbox_ttm_io_mem_reserve(struc
 	mem->bus.size = mem->num_pages << PAGE_SHIFT;
 	mem->bus.base = 0;
 	mem->bus.is_iomem = false;
-	if (!(man->flags & TTM_MEMTYPE_FLAG_MAPPABLE))
+	 if (!(man->flags & TTM_MEMTYPE_FLAG_MAPPABLE))
 		return -EINVAL;
 	switch (mem->mem_type) {
 	case TTM_PL_SYSTEM:
@@ -205,8 +204,13 @@ static int vbox_ttm_io_mem_reserve(struc
 	return 0;
 }
 #else
+# if RTLNX_VER_MAX(5,13,0)
 static int vbox_ttm_io_mem_reserve(struct ttm_bo_device *bdev,
 				   struct ttm_resource *mem)
+# else /* > 5.13.0 */
+static int vbox_ttm_io_mem_reserve(struct ttm_device *bdev,
+				   struct ttm_resource *mem)
+# endif /* > 5.13.0 */
 {
 	struct vbox_private *vbox = vbox_bdev(bdev);
 	mem->bus.addr = NULL;
@@ -241,7 +245,12 @@ static int vbox_ttm_io_mem_reserve(struc
 
 
 
-#if RTLNX_VER_MIN(5,10,0)
+#if RTLNX_VER_MIN(5,13,0)
+static void vbox_ttm_io_mem_free(struct ttm_device *bdev,
+				 struct ttm_resource *mem)
+{
+}
+#elif RTLNX_VER_MIN(5,10,0)
 static void vbox_ttm_io_mem_free(struct ttm_bo_device *bdev,
 				 struct ttm_resource *mem)
 {
@@ -253,7 +262,13 @@ static void vbox_ttm_io_mem_free(struct
 }
 #endif
 
-#if RTLNX_VER_MIN(5,10,0)
+#if RTLNX_VER_MIN(5,13,0)
+static void vbox_ttm_tt_destroy(struct ttm_device *bdev, struct ttm_tt *tt)
+{
+	ttm_tt_fini(tt);
+	kfree(tt);
+}
+#elif RTLNX_VER_MIN(5,10,0)
 static void vbox_ttm_tt_destroy(struct ttm_bo_device *bdev, struct ttm_tt *tt)
 {
 	ttm_tt_fini(tt);
@@ -333,7 +348,11 @@ static int vbox_bo_move(struct ttm_buffe
 }
 #endif
 
+#if RTLNX_VER_MIN(5,13,0)
+static struct ttm_device_funcs vbox_bo_driver = {
+#else /* < 5.13.0 */
 static struct ttm_bo_driver vbox_bo_driver = {
+#endif /* < 5.13.0 */
 	.ttm_tt_create = vbox_ttm_tt_create,
 #if RTLNX_VER_MIN(5,10,0)
 	.ttm_tt_destroy = vbox_ttm_tt_destroy,
@@ -370,14 +389,22 @@ int vbox_mm_init(struct vbox_private *vb
 {
 	int ret;
 	struct drm_device *dev = vbox->dev;
+#if RTLNX_VER_MIN(5,13,0)
+	struct ttm_device *bdev = &vbox->ttm.bdev;
+#else
 	struct ttm_bo_device *bdev = &vbox->ttm.bdev;
+#endif
 
 #if RTLNX_VER_MAX(5,0,0) && !RTLNX_RHEL_MAJ_PREREQ(7,7) && !RTLNX_RHEL_MAJ_PREREQ(8,1)
 	ret = vbox_ttm_global_init(vbox);
 	if (ret)
 		return ret;
 #endif
+#if RTLNX_VER_MIN(5,13,0)
+	ret = ttm_device_init(&vbox->ttm.bdev,
+#else
 	ret = ttm_bo_device_init(&vbox->ttm.bdev,
+#endif
 #if RTLNX_VER_MAX(5,0,0) && !RTLNX_RHEL_MAJ_PREREQ(7,7) && !RTLNX_RHEL_MAJ_PREREQ(8,1)
 				 vbox->ttm.bo_global_ref.ref.object,
 #endif
@@ -429,7 +456,11 @@ int vbox_mm_init(struct vbox_private *vb
 	return 0;
 
 err_device_release:
+#if RTLNX_VER_MIN(5,13,0)
+	ttm_device_fini(&vbox->ttm.bdev);
+#else
 	ttm_bo_device_release(&vbox->ttm.bdev);
+#endif
 #if RTLNX_VER_MAX(5,0,0) && !RTLNX_RHEL_MAJ_PREREQ(7,7) && !RTLNX_RHEL_MAJ_PREREQ(8,1)
 err_ttm_global_release:
 	vbox_ttm_global_release(vbox);
@@ -446,7 +477,11 @@ void vbox_mm_fini(struct vbox_private *v
 #else
 	arch_phys_wc_del(vbox->fb_mtrr);
 #endif
+#if RTLNX_VER_MIN(5,13,0)
+        ttm_device_fini(&vbox->ttm.bdev);
+#else
 	ttm_bo_device_release(&vbox->ttm.bdev);
+#endif
 #if RTLNX_VER_MAX(5,0,0) && !RTLNX_RHEL_MAJ_PREREQ(7,7) && !RTLNX_RHEL_MAJ_PREREQ(8,1)
 	vbox_ttm_global_release(vbox);
 #endif
@@ -528,7 +563,9 @@ int vbox_bo_create(struct drm_device *de
 {
 	struct vbox_private *vbox = dev->dev_private;
 	struct vbox_bo *vboxbo;
+#if RTLNX_VER_MAX(5,13,0)
 	size_t acc_size;
+#endif
 	int ret;
 
 	vboxbo = kzalloc(sizeof(*vboxbo), GFP_KERNEL);
@@ -551,16 +588,20 @@ int vbox_bo_create(struct drm_device *de
 
 	vbox_ttm_placement(vboxbo, VBOX_MEM_TYPE_VRAM | VBOX_MEM_TYPE_SYSTEM);
 
+#if RTLNX_VER_MAX(5,13,0)
 	acc_size = ttm_bo_dma_acc_size(&vbox->ttm.bdev, size,
 				       sizeof(struct vbox_bo));
+#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)
 			  align >> PAGE_SHIFT, false, NULL, acc_size,
-#else
+#elif RTLNX_VER_MAX(5,13,0) /* < 5.13.0 */
 			  align >> PAGE_SHIFT, false, acc_size,
-#endif
+#else /* > 5.13.0 */
+			  align >> PAGE_SHIFT, false,
+#endif /* > 5.13.0 */
 #if RTLNX_VER_MIN(3,18,0) || RTLNX_RHEL_MAJ_PREREQ(7,2)
 			  NULL, NULL, vbox_bo_ttm_destroy);
 #else
