Index: VirtualBox-6.1.18/src/VBox/Additions/linux/drm/vbox_drv.c =================================================================== --- VirtualBox-6.1.18.orig/src/VBox/Additions/linux/drm/vbox_drv.c +++ VirtualBox-6.1.18/src/VBox/Additions/linux/drm/vbox_drv.c @@ -331,7 +331,9 @@ static struct drm_driver driver = { .master_drop = vbox_master_drop, #if RTLNX_VER_MIN(3,18,0) || RTLNX_RHEL_MAJ_PREREQ(7,2) # if RTLNX_VER_MAX(4,14,0) && !RTLNX_RHEL_MAJ_PREREQ(7,5) && !RTLNX_SUSE_MAJ_PREREQ(15,1) && !RTLNX_SUSE_MAJ_PREREQ(12,5) +#if !(defined(CONFIG_SUSE_VERSION) && CONFIG_SUSE_VERSION == 12 && CONFIG_SUSE_PATCHLEVEL >= 4) .set_busid = drm_pci_set_busid, +#endif # endif #endif Index: VirtualBox-6.1.18/src/VBox/Additions/linux/drm/vbox_main.c =================================================================== --- VirtualBox-6.1.18.orig/src/VBox/Additions/linux/drm/vbox_main.c +++ VirtualBox-6.1.18/src/VBox/Additions/linux/drm/vbox_main.c @@ -618,11 +618,13 @@ int vbox_dumb_destroy(struct drm_file *f #endif #if RTLNX_VER_MAX(4,19,0) && !RTLNX_RHEL_MAJ_PREREQ(7,7) && !RTLNX_RHEL_MAJ_PREREQ(8,1) && !RTLNX_SUSE_MAJ_PREREQ(15,1) && !RTLNX_SUSE_MAJ_PREREQ(12,5) +#if !(defined(CONFIG_SUSE_VERSION) && CONFIG_SUSE_VERSION == 12 && CONFIG_SUSE_PATCHLEVEL >= 4) static void ttm_bo_put(struct ttm_buffer_object *bo) { ttm_bo_unref(&bo); } #endif +#endif void vbox_gem_free_object(struct drm_gem_object *obj) { Index: VirtualBox-6.1.18/src/VBox/Additions/linux/drm/vbox_ttm.c =================================================================== --- VirtualBox-6.1.18.orig/src/VBox/Additions/linux/drm/vbox_ttm.c +++ VirtualBox-6.1.18/src/VBox/Additions/linux/drm/vbox_ttm.c @@ -256,7 +256,7 @@ static struct ttm_backend_func vbox_tt_b }; #endif -#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) +#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) && !defined(SUSE_SLE12) static struct ttm_tt *vbox_ttm_tt_create(struct ttm_bo_device *bdev, unsigned long size, u32 page_flags, @@ -275,7 +275,7 @@ static struct ttm_tt *vbox_ttm_tt_create #if RTLNX_VER_MAX(5,10,0) tt->func = &vbox_tt_backend_func; #endif -#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) +#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) && !defined(SUSE_SLE12) if (ttm_tt_init(tt, bdev, size, page_flags, dummy_read_page)) { #else if (ttm_tt_init(tt, bo, page_flags)) { @@ -288,7 +288,7 @@ static struct ttm_tt *vbox_ttm_tt_create } #if RTLNX_VER_MAX(4,17,0) -# if RTLNX_VER_MAX(4,16,0) && !RTLNX_RHEL_MAJ_PREREQ(7,6) && !RTLNX_SUSE_MAJ_PREREQ(15,1) && !RTLNX_SUSE_MAJ_PREREQ(12,5) +# if RTLNX_VER_MAX(4,16,0) && !RTLNX_RHEL_MAJ_PREREQ(7,6) && !RTLNX_SUSE_MAJ_PREREQ(15,1) && !RTLNX_SUSE_MAJ_PREREQ(12,5) && !defined(SUSE_SLE12) static int vbox_ttm_tt_populate(struct ttm_tt *ttm) { return ttm_pool_populate(ttm); @@ -327,7 +327,7 @@ static struct ttm_bo_driver vbox_bo_driv .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) -# if RTLNX_VER_MAX(4,16,0) && !RTLNX_RHEL_MAJ_PREREQ(7,6) && !RTLNX_SUSE_MAJ_PREREQ(15,1) && !RTLNX_SUSE_MAJ_PREREQ(12,5) +# if RTLNX_VER_MAX(4,16,0) && !RTLNX_RHEL_MAJ_PREREQ(7,6) && !RTLNX_SUSE_MAJ_PREREQ(15,1) && !RTLNX_SUSE_MAJ_PREREQ(12,5) && !defined(SUSE_SLE12) .io_mem_pfn = ttm_bo_default_io_mem_pfn, # endif #endif @@ -500,7 +500,7 @@ int vbox_bo_create(struct drm_device *de 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) +#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) && !defined(SUSE_SLE12) align >> PAGE_SHIFT, false, NULL, acc_size, #else align >> PAGE_SHIFT, false, acc_size, @@ -533,7 +533,7 @@ static inline u64 vbox_bo_gpu_offset(str int vbox_bo_pin(struct vbox_bo *bo, u32 mem_type, u64 *gpu_addr) { -#if RTLNX_VER_MIN(4,16,0) || RTLNX_RHEL_MAJ_PREREQ(7,6) || RTLNX_SUSE_MAJ_PREREQ(15,1) || RTLNX_SUSE_MAJ_PREREQ(12,5) +#if RTLNX_VER_MIN(4,16,0) || RTLNX_RHEL_MAJ_PREREQ(7,6) || RTLNX_SUSE_MAJ_PREREQ(15,1) || RTLNX_SUSE_MAJ_PREREQ(12,5) || defined(SUSE_SLE12) struct ttm_operation_ctx ctx = { false, false }; #endif int i, ret; @@ -551,7 +551,7 @@ int vbox_bo_pin(struct vbox_bo *bo, u32 for (i = 0; i < bo->placement.num_placement; i++) PLACEMENT_FLAGS(bo->placements[i]) |= TTM_PL_FLAG_NO_EVICT; -#if RTLNX_VER_MAX(4,16,0) && !RTLNX_RHEL_MAJ_PREREQ(7,6) && !RTLNX_SUSE_MAJ_PREREQ(15,1) && !RTLNX_SUSE_MAJ_PREREQ(12,5) +#if RTLNX_VER_MAX(4,16,0) && !RTLNX_RHEL_MAJ_PREREQ(7,6) && !RTLNX_SUSE_MAJ_PREREQ(15,1) && !RTLNX_SUSE_MAJ_PREREQ(12,5) && !defined(SUSE_SLE12) ret = ttm_bo_validate(&bo->bo, &bo->placement, false, false); #else ret = ttm_bo_validate(&bo->bo, &bo->placement, &ctx); @@ -569,7 +569,7 @@ int vbox_bo_pin(struct vbox_bo *bo, u32 int vbox_bo_unpin(struct vbox_bo *bo) { -#if RTLNX_VER_MIN(4,16,0) || RTLNX_RHEL_MAJ_PREREQ(7,6) || RTLNX_SUSE_MAJ_PREREQ(15,1) || RTLNX_SUSE_MAJ_PREREQ(12,5) +#if RTLNX_VER_MIN(4,16,0) || RTLNX_RHEL_MAJ_PREREQ(7,6) || RTLNX_SUSE_MAJ_PREREQ(15,1) || RTLNX_SUSE_MAJ_PREREQ(12,5) || defined(SUSE_SLE12) struct ttm_operation_ctx ctx = { false, false }; #endif int i, ret; @@ -585,7 +585,7 @@ int vbox_bo_unpin(struct vbox_bo *bo) for (i = 0; i < bo->placement.num_placement; i++) PLACEMENT_FLAGS(bo->placements[i]) &= ~TTM_PL_FLAG_NO_EVICT; -#if RTLNX_VER_MAX(4,16,0) && !RTLNX_RHEL_MAJ_PREREQ(7,6) && !RTLNX_SUSE_MAJ_PREREQ(15,1) && !RTLNX_SUSE_MAJ_PREREQ(12,5) +#if RTLNX_VER_MAX(4,16,0) && !RTLNX_RHEL_MAJ_PREREQ(7,6) && !RTLNX_SUSE_MAJ_PREREQ(15,1) && !RTLNX_SUSE_MAJ_PREREQ(12,5) && !defined(SUSE_SLE12) ret = ttm_bo_validate(&bo->bo, &bo->placement, false, false); #else ret = ttm_bo_validate(&bo->bo, &bo->placement, &ctx); @@ -603,7 +603,7 @@ int vbox_bo_unpin(struct vbox_bo *bo) */ int vbox_bo_push_sysram(struct vbox_bo *bo) { -#if RTLNX_VER_MIN(4,16,0) || RTLNX_RHEL_MAJ_PREREQ(7,6) || RTLNX_SUSE_MAJ_PREREQ(15,1) || RTLNX_SUSE_MAJ_PREREQ(12,5) +#if RTLNX_VER_MIN(4,16,0) || RTLNX_RHEL_MAJ_PREREQ(7,6) || RTLNX_SUSE_MAJ_PREREQ(15,1) || RTLNX_SUSE_MAJ_PREREQ(12,5) || defined(SUSE_SLE12) struct ttm_operation_ctx ctx = { false, false }; #endif int i, ret; @@ -624,7 +624,7 @@ int vbox_bo_push_sysram(struct vbox_bo * for (i = 0; i < bo->placement.num_placement; i++) PLACEMENT_FLAGS(bo->placements[i]) |= TTM_PL_FLAG_NO_EVICT; -#if RTLNX_VER_MAX(4,16,0) && !RTLNX_RHEL_MAJ_PREREQ(7,6) && !RTLNX_SUSE_MAJ_PREREQ(15,1) && !RTLNX_SUSE_MAJ_PREREQ(12,5) +#if RTLNX_VER_MAX(4,16,0) && !RTLNX_RHEL_MAJ_PREREQ(7,6) && !RTLNX_SUSE_MAJ_PREREQ(15,1) && !RTLNX_SUSE_MAJ_PREREQ(12,5) && !defined(SUSE_SLE12) ret = ttm_bo_validate(&bo->bo, &bo->placement, false, false); #else ret = ttm_bo_validate(&bo->bo, &bo->placement, &ctx); Index: VirtualBox-6.1.18/src/VBox/Additions/linux/drm/vbox_drv.h =================================================================== --- VirtualBox-6.1.18.orig/src/VBox/Additions/linux/drm/vbox_drv.h +++ VirtualBox-6.1.18/src/VBox/Additions/linux/drm/vbox_drv.h @@ -87,6 +87,9 @@ #else # define RTLNX_RHEL_MAX(a_iMajor, a_iMinor) (0) #endif +#if defined(CONFIG_SUSE_VERSION) && CONFIG_SUSE_VERSION == 12 && CONFIG_SUSE_PATCHLEVEL >= 4 +# define SUSE_SLE12 +#endif /** @def RTLNX_RHEL_RANGE * Check that it's a RedHat kernel in the given version range. Index: VirtualBox-6.1.18/src/VBox/Additions/linux/drm/vbox_mode.c =================================================================== --- VirtualBox-6.1.18.orig/src/VBox/Additions/linux/drm/vbox_mode.c +++ VirtualBox-6.1.18/src/VBox/Additions/linux/drm/vbox_mode.c @@ -544,7 +544,8 @@ static void vbox_set_edid(struct drm_con for (i = 0; i < EDID_SIZE - 1; ++i) sum += edid[i]; edid[EDID_SIZE - 1] = (0x100 - (sum & 0xFF)) & 0xFF; -#if RTLNX_VER_MIN(4,19,0) || RTLNX_RHEL_MAJ_PREREQ(7,7) || RTLNX_RHEL_MAJ_PREREQ(8,1) || RTLNX_SUSE_MAJ_PREREQ(15,1) || RTLNX_SUSE_MAJ_PREREQ(12,5) +#if RTLNX_VER_MIN(4,19,0) || RTLNX_RHEL_MAJ_PREREQ(7,7) || \ + defined(SUSE_SLE12) || RTLNX_RHEL_MAJ_PREREQ(8,1) || RTLNX_SUSE_MAJ_PREREQ(15,1) || RTLNX_SUSE_MAJ_PREREQ(12,5) drm_connector_update_edid_property(connector, (struct edid *)edid); #else drm_mode_connector_update_edid_property(connector, (struct edid *)edid); @@ -719,7 +720,7 @@ static int vbox_connector_init(struct dr drm_connector_register(connector); #endif -#if RTLNX_VER_MIN(4,19,0) || RTLNX_RHEL_MAJ_PREREQ(7,7) || RTLNX_RHEL_MAJ_PREREQ(8,1) || RTLNX_SUSE_MAJ_PREREQ(15,1) || RTLNX_SUSE_MAJ_PREREQ(12,5) +#if RTLNX_VER_MIN(4,19,0) || RTLNX_RHEL_MAJ_PREREQ(7,7) || defined(SUSE_SLE12) || RTLNX_RHEL_MAJ_PREREQ(8,1) || RTLNX_SUSE_MAJ_PREREQ(15,1) || RTLNX_SUSE_MAJ_PREREQ(12,5) drm_connector_attach_encoder(connector, encoder); #else drm_mode_connector_attach_encoder(connector, encoder);