VirtualBox

Changeset 87092 in vbox for trunk


Ignore:
Timestamp:
Dec 15, 2020 10:29:56 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
141912
Message:

Additions/linux/drm: Adjustment for Linux 5.10.

Location:
trunk/src/VBox/Additions/linux/drm
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/linux/drm/vbox_drv.h

    r86196 r87092  
    176176#include <drm/ttm/ttm_memory.h>
    177177#include <drm/ttm/ttm_module.h>
     178#if RTLNX_VER_MIN(5,10,0)
     179# include <drm/ttm/ttm_resource.h>
     180#endif
    178181
    179182#include "vboxvideo_guest.h"
     
    445448                    u32 size, bool iskernel, struct drm_gem_object **obj);
    446449
    447 int vbox_bo_pin(struct vbox_bo *bo, u32 pl_flag, u64 *gpu_addr);
     450#define VBOX_MEM_TYPE_VRAM   0x1
     451#define VBOX_MEM_TYPE_SYSTEM 0x2
     452
     453int vbox_bo_pin(struct vbox_bo *bo, u32 mem_type, u64 *gpu_addr);
    448454int vbox_bo_unpin(struct vbox_bo *bo);
    449455
     
    470476}
    471477
    472 void vbox_ttm_placement(struct vbox_bo *bo, int domain);
     478void vbox_ttm_placement(struct vbox_bo *bo, u32 mem_type);
    473479int vbox_bo_push_sysram(struct vbox_bo *bo);
    474480int vbox_mmap(struct file *filp, struct vm_area_struct *vma);
  • trunk/src/VBox/Additions/linux/drm/vbox_fb.c

    r86542 r87092  
    296296                return ret;
    297297
    298         ret = vbox_bo_pin(bo, TTM_PL_FLAG_VRAM, NULL);
     298        ret = vbox_bo_pin(bo, VBOX_MEM_TYPE_VRAM, NULL);
    299299        if (ret) {
    300300                vbox_bo_unreserve(bo);
  • trunk/src/VBox/Additions/linux/drm/vbox_mode.c

    r86542 r87092  
    228228                return ret;
    229229
    230         ret = vbox_bo_pin(bo, TTM_PL_FLAG_VRAM, &gpu_addr);
     230        ret = vbox_bo_pin(bo, VBOX_MEM_TYPE_VRAM, &gpu_addr);
    231231        vbox_bo_unreserve(bo);
    232232        if (ret)
  • trunk/src/VBox/Additions/linux/drm/vbox_ttm.c

    r86542 r87092  
    4242#endif
    4343
     44
    4445static inline struct vbox_private *vbox_bdev(struct ttm_bo_device *bd)
    4546{
     
    126127}
    127128
     129#if RTLNX_VER_MAX(5,10,0)
    128130static int
    129131vbox_bo_init_mem_type(struct ttm_bo_device *bdev, u32 type,
     
    149151        return 0;
    150152}
     153#endif
    151154
    152155static void
     
    158161                return;
    159162
    160         vbox_ttm_placement(vboxbo, TTM_PL_FLAG_SYSTEM);
     163        vbox_ttm_placement(vboxbo, VBOX_MEM_TYPE_SYSTEM);
    161164        *pl = vboxbo->placement;
    162165}
     
    168171}
    169172
     173#if RTLNX_VER_MAX(5,10,0)
    170174static int vbox_ttm_io_mem_reserve(struct ttm_bo_device *bdev,
    171175                                   struct ttm_mem_reg *mem)
    172176{
     177        struct vbox_private *vbox = vbox_bdev(bdev);
    173178        struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type];
    174         struct vbox_private *vbox = vbox_bdev(bdev);
    175179
    176180        mem->bus.addr = NULL;
     
    195199        return 0;
    196200}
    197 
     201#else
     202static int vbox_ttm_io_mem_reserve(struct ttm_bo_device *bdev,
     203                                   struct ttm_resource *mem)
     204{
     205        struct vbox_private *vbox = vbox_bdev(bdev);
     206        mem->bus.addr = NULL;
     207        mem->bus.offset = 0;
     208        mem->size = mem->num_pages << PAGE_SHIFT;
     209        mem->start = 0;
     210        mem->bus.is_iomem = false;
     211        switch (mem->mem_type) {
     212        case TTM_PL_SYSTEM:
     213                /* system memory */
     214                return 0;
     215        case TTM_PL_VRAM:
     216                mem->bus.offset = mem->start << PAGE_SHIFT;
     217                mem->start = pci_resource_start(vbox->dev->pdev, 0);
     218                mem->bus.is_iomem = true;
     219                break;
     220        default:
     221                return -EINVAL;
     222        }
     223        return 0;
     224}
     225#endif
     226
     227
     228
     229#if RTLNX_VER_MIN(5,10,0)
     230static void vbox_ttm_io_mem_free(struct ttm_bo_device *bdev,
     231                                 struct ttm_resource *mem)
     232{
     233}
     234#else
    198235static void vbox_ttm_io_mem_free(struct ttm_bo_device *bdev,
    199236                                 struct ttm_mem_reg *mem)
    200237{
    201238}
    202 
     239#endif
     240
     241#if RTLNX_VER_MIN(5,10,0)
     242static void vbox_ttm_tt_destroy(struct ttm_bo_device *bdev, struct ttm_tt *tt)
     243{
     244        ttm_tt_fini(tt);
     245        kfree(tt);
     246}
     247#else
    203248static void vbox_ttm_backend_destroy(struct ttm_tt *tt)
    204249{
     
    210255        .destroy = &vbox_ttm_backend_destroy,
    211256};
     257#endif
    212258
    213259#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)
     
    227273                return NULL;
    228274
     275#if RTLNX_VER_MAX(5,10,0)
    229276        tt->func = &vbox_tt_backend_func;
     277#endif
    230278#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)
    231279        if (ttm_tt_init(tt, bdev, size, page_flags, dummy_read_page)) {
     
    262310static struct ttm_bo_driver vbox_bo_driver = {
    263311        .ttm_tt_create = vbox_ttm_tt_create,
     312#if RTLNX_VER_MIN(5,10,0)
     313        .ttm_tt_destroy = vbox_ttm_tt_destroy,
     314#endif
    264315#if RTLNX_VER_MAX(4,17,0)
    265316        .ttm_tt_populate = vbox_ttm_tt_populate,
    266317        .ttm_tt_unpopulate = vbox_ttm_tt_unpopulate,
    267318#endif
     319#if RTLNX_VER_MAX(5,10,0)
    268320        .init_mem_type = vbox_bo_init_mem_type,
     321#endif
    269322#if RTLNX_VER_MIN(4,10,0) || RTLNX_RHEL_MAJ_PREREQ(7,4)
    270323        .eviction_valuable = ttm_bo_eviction_valuable,
     
    319372        }
    320373
     374#if RTLNX_VER_MIN(5,10,0)
     375        ret = ttm_range_man_init(bdev, TTM_PL_VRAM, false,
     376                             vbox->available_vram_size >> PAGE_SHIFT);
     377#else
    321378        ret = ttm_bo_init_mm(bdev, TTM_PL_VRAM,
    322379                             vbox->available_vram_size >> PAGE_SHIFT);
     380#endif
    323381        if (ret) {
    324382                DRM_ERROR("Failed ttm VRAM init: %d\n", ret);
     
    360418}
    361419
    362 void vbox_ttm_placement(struct vbox_bo *bo, int domain)
     420void vbox_ttm_placement(struct vbox_bo *bo, u32 mem_type)
    363421{
    364422        u32 c = 0;
     
    373431        bo->placement.busy_placement = bo->placements;
    374432
    375         if (domain & TTM_PL_FLAG_VRAM)
     433        if (mem_type & VBOX_MEM_TYPE_VRAM) {
     434#if RTLNX_VER_MIN(5,10,0)
     435                bo->placements[c].mem_type = TTM_PL_VRAM;
     436                PLACEMENT_FLAGS(bo->placements[c++]) =
     437                    TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED;
     438#else
    376439                PLACEMENT_FLAGS(bo->placements[c++]) =
    377440                    TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_VRAM;
    378         if (domain & TTM_PL_FLAG_SYSTEM)
     441#endif
     442        }
     443        if (mem_type & VBOX_MEM_TYPE_SYSTEM) {
     444#if RTLNX_VER_MIN(5,10,0)
     445                bo->placements[c].mem_type = TTM_PL_SYSTEM;
     446                PLACEMENT_FLAGS(bo->placements[c++]) =
     447                    TTM_PL_MASK_CACHING;
     448#else
    379449                PLACEMENT_FLAGS(bo->placements[c++]) =
    380450                    TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM;
    381         if (!c)
     451#endif
     452        }
     453        if (!c) {
     454#if RTLNX_VER_MIN(5,10,0)
     455                bo->placements[c].mem_type = TTM_PL_SYSTEM;
     456                PLACEMENT_FLAGS(bo->placements[c++]) =
     457                    TTM_PL_MASK_CACHING;
     458#else
    382459                PLACEMENT_FLAGS(bo->placements[c++]) =
    383460                    TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM;
     461#endif
     462        }
    384463
    385464        bo->placement.num_placement = c;
     
    415494#endif
    416495
    417         vbox_ttm_placement(vboxbo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM);
     496        vbox_ttm_placement(vboxbo, VBOX_MEM_TYPE_VRAM | VBOX_MEM_TYPE_SYSTEM);
    418497
    419498        acc_size = ttm_bo_dma_acc_size(&vbox->ttm.bdev, size,
     
    453532}
    454533
    455 int vbox_bo_pin(struct vbox_bo *bo, u32 pl_flag, u64 *gpu_addr)
     534int vbox_bo_pin(struct vbox_bo *bo, u32 mem_type, u64 *gpu_addr)
    456535{
    457536#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)
     
    468547        }
    469548
    470         vbox_ttm_placement(bo, pl_flag);
     549        vbox_ttm_placement(bo, mem_type);
    471550
    472551        for (i = 0; i < bo->placement.num_placement; i++)
     
    541620                ttm_bo_kunmap(&bo->kmap);
    542621
    543         vbox_ttm_placement(bo, TTM_PL_FLAG_SYSTEM);
     622        vbox_ttm_placement(bo, VBOX_MEM_TYPE_SYSTEM);
    544623
    545624        for (i = 0; i < bo->placement.num_placement; i++)
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette