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 #include #include +#if RTLNX_VER_MAX(5,13,0) #include +#endif #if RTLNX_VER_MAX(5,12,0) # include #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