it works on x86_64 but fails on x86 see https://errors.yoctoproject.org/Errors/Details/540534/
I wonder if we should just blacklist it on 32bit x86 On Tue, Jan 5, 2021 at 7:21 AM <[email protected]> wrote: > > From: Bruce Ashfield <[email protected]> > > We need to adjust the vboxguest drivers to build against kernels > 5.10+. > > These are backports from the virtual box SVN repository and can be > dropped in future uprevs. > > Signed-off-by: Bruce Ashfield <[email protected]> > --- > ...-linux-drm-Adjustment-for-Linux-5.10.patch | 321 ++++++++++++++++++ > ...0drv-linux.c-Changes-to-support-the-.patch | 120 +++++++ > ...justment-for-linux-5.10-TASK_SIZE_MA.patch | 46 +++ > .../vboxguestdrivers_6.1.16.bb | 3 + > 4 files changed, 490 insertions(+) > create mode 100644 > meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-Additions-linux-drm-Adjustment-for-Linux-5.10.patch > create mode 100644 > meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-Runtime-memobj-r0drv-linux.c-Changes-to-support-the-.patch > create mode 100644 > meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-linser-vboxsf-Adjustment-for-linux-5.10-TASK_SIZE_MA.patch > > diff --git > a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-Additions-linux-drm-Adjustment-for-Linux-5.10.patch > > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-Additions-linux-drm-Adjustment-for-Linux-5.10.patch > new file mode 100644 > index 000000000..a444901f8 > --- /dev/null > +++ > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-Additions-linux-drm-Adjustment-for-Linux-5.10.patch > @@ -0,0 +1,321 @@ > +From b6c765d693a0833b94cb2e91b32842570c3458d2 Mon Sep 17 00:00:00 2001 > +From: vboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f> > +Date: Tue, 15 Dec 2020 22:29:56 +0000 > +Subject: [PATCH] Additions/linux/drm: Adjustment for Linux 5.10. > + > +Upstream-Status: Backport > + > +git-svn-id: http://www.virtualbox.org/svn/vbox@87092 > cfe28804-0f27-0410-a406-dd0f0b0b656f > + > +Signed-off-by: Bruce Ashfield <[email protected]> > + > +--- > + src/VBox/Additions/linux/drm/vbox_drv.h | 10 +- > + src/VBox/Additions/linux/drm/vbox_fb.c | 2 +- > + .../src/VBox/Additions/linux/drm/vbox_mode.c | 2 +- > + src/VBox/Additions/linux/drm/vbox_ttm.c | 99 +++++++++++++++++-- > + 4 files changed, 99 insertions(+), 14 deletions(-) > + > +diff --git a/src/VBox/Additions/linux/drm/vbox_drv.h > b/src/VBox/Additions/linux/drm/vbox_drv.h > +index 8c85371749..7937f2f2d2 100644 > +--- a/src/VBox/Additions/linux/drm/vbox_drv.h > ++++ b/src/VBox/Additions/linux/drm/vbox_drv.h > +@@ -175,6 +175,9 @@ > + #include <drm/ttm/ttm_placement.h> > + #include <drm/ttm/ttm_memory.h> > + #include <drm/ttm/ttm_module.h> > ++#if RTLNX_VER_MIN(5,10,0) > ++# include <drm/ttm/ttm_resource.h> > ++#endif > + > + #include "vboxvideo_guest.h" > + #include "vboxvideo_vbe.h" > +@@ -444,7 +447,10 @@ int vbox_bo_create(struct drm_device *dev, int size, > int align, > + int vbox_gem_create(struct drm_device *dev, > + u32 size, bool iskernel, struct drm_gem_object **obj); > + > +-int vbox_bo_pin(struct vbox_bo *bo, u32 pl_flag, u64 *gpu_addr); > ++#define VBOX_MEM_TYPE_VRAM 0x1 > ++#define VBOX_MEM_TYPE_SYSTEM 0x2 > ++ > ++int vbox_bo_pin(struct vbox_bo *bo, u32 mem_type, u64 *gpu_addr); > + int vbox_bo_unpin(struct vbox_bo *bo); > + > + static inline int vbox_bo_reserve(struct vbox_bo *bo, bool no_wait) > +@@ -469,7 +475,7 @@ static inline void vbox_bo_unreserve(struct vbox_bo *bo) > + ttm_bo_unreserve(&bo->bo); > + } > + > +-void vbox_ttm_placement(struct vbox_bo *bo, int domain); > ++void vbox_ttm_placement(struct vbox_bo *bo, u32 mem_type); > + int vbox_bo_push_sysram(struct vbox_bo *bo); > + int vbox_mmap(struct file *filp, struct vm_area_struct *vma); > + > +diff --git a/src/VBox/Additions/linux/drm/vbox_fb.c > b/src/VBox/Additions/linux/drm/vbox_fb.c > +index adead98d3d..7182d9da1a 100644 > +--- a/src/VBox/Additions/linux/drm/vbox_fb.c > ++++ b/src/VBox/Additions/linux/drm/vbox_fb.c > +@@ -295,7 +295,7 @@ static int vboxfb_create(struct drm_fb_helper *helper, > + if (ret) > + return ret; > + > +- ret = vbox_bo_pin(bo, TTM_PL_FLAG_VRAM, NULL); > ++ ret = vbox_bo_pin(bo, VBOX_MEM_TYPE_VRAM, NULL); > + if (ret) { > + vbox_bo_unreserve(bo); > + return ret; > +diff --git a/src/VBox/Additions/linux/drm/vbox_mode.c > b/src/VBox/Additions/linux/drm/vbox_mode.c > +index ce7d135cb6..5557db5ef8 100644 > +--- a/src/VBox/Additions/linux/drm/vbox_mode.c > ++++ b/src/VBox/Additions/linux/drm/vbox_mode.c > +@@ -227,7 +227,7 @@ static int vbox_crtc_set_base(struct drm_crtc *crtc, > + if (ret) > + return ret; > + > +- ret = vbox_bo_pin(bo, TTM_PL_FLAG_VRAM, &gpu_addr); > ++ ret = vbox_bo_pin(bo, VBOX_MEM_TYPE_VRAM, &gpu_addr); > + vbox_bo_unreserve(bo); > + if (ret) > + return ret; > +diff --git a/src/VBox/Additions/linux/drm/vbox_ttm.c > b/src/VBox/Additions/linux/drm/vbox_ttm.c > +index bf87aabc05..5eac926a42 100644 > +--- a/src/VBox/Additions/linux/drm/vbox_ttm.c > ++++ b/src/VBox/Additions/linux/drm/vbox_ttm.c > +@@ -41,6 +41,7 @@ > + #define PLACEMENT_FLAGS(placement) ((placement).flags) > + #endif > + > ++ > + static inline struct vbox_private *vbox_bdev(struct ttm_bo_device *bd) > + { > + return container_of(bd, struct vbox_private, ttm.bdev); > +@@ -125,6 +126,7 @@ static bool vbox_ttm_bo_is_vbox_bo(struct > ttm_buffer_object *bo) > + return false; > + } > + > ++#if RTLNX_VER_MAX(5,10,0) > + static int > + vbox_bo_init_mem_type(struct ttm_bo_device *bdev, u32 type, > + struct ttm_mem_type_manager *man) > +@@ -148,6 +150,7 @@ vbox_bo_init_mem_type(struct ttm_bo_device *bdev, u32 > type, > + > + return 0; > + } > ++#endif > + > + static void > + vbox_bo_evict_flags(struct ttm_buffer_object *bo, struct ttm_placement *pl) > +@@ -157,7 +160,7 @@ vbox_bo_evict_flags(struct ttm_buffer_object *bo, struct > ttm_placement *pl) > + if (!vbox_ttm_bo_is_vbox_bo(bo)) > + return; > + > +- vbox_ttm_placement(vboxbo, TTM_PL_FLAG_SYSTEM); > ++ vbox_ttm_placement(vboxbo, VBOX_MEM_TYPE_SYSTEM); > + *pl = vboxbo->placement; > + } > + > +@@ -167,11 +170,12 @@ static int vbox_bo_verify_access(struct > ttm_buffer_object *bo, > + return 0; > + } > + > ++#if RTLNX_VER_MAX(5,10,0) > + static int vbox_ttm_io_mem_reserve(struct ttm_bo_device *bdev, > + struct ttm_mem_reg *mem) > + { > +- struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type]; > + struct vbox_private *vbox = vbox_bdev(bdev); > ++ struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type]; > + > + mem->bus.addr = NULL; > + mem->bus.offset = 0; > +@@ -194,12 +198,53 @@ static int vbox_ttm_io_mem_reserve(struct > ttm_bo_device *bdev, > + } > + return 0; > + } > ++#else > ++static int vbox_ttm_io_mem_reserve(struct ttm_bo_device *bdev, > ++ struct ttm_resource *mem) > ++{ > ++ struct vbox_private *vbox = vbox_bdev(bdev); > ++ mem->bus.addr = NULL; > ++ mem->bus.offset = 0; > ++ mem->size = mem->num_pages << PAGE_SHIFT; > ++ mem->start = 0; > ++ mem->bus.is_iomem = false; > ++ switch (mem->mem_type) { > ++ case TTM_PL_SYSTEM: > ++ /* system memory */ > ++ return 0; > ++ case TTM_PL_VRAM: > ++ mem->bus.offset = mem->start << PAGE_SHIFT; > ++ mem->start = pci_resource_start(vbox->dev->pdev, 0); > ++ mem->bus.is_iomem = true; > ++ break; > ++ default: > ++ return -EINVAL; > ++ } > ++ return 0; > ++} > ++#endif > + > ++ > ++ > ++#if RTLNX_VER_MIN(5,10,0) > ++static void vbox_ttm_io_mem_free(struct ttm_bo_device *bdev, > ++ struct ttm_resource *mem) > ++{ > ++} > ++#else > + static void vbox_ttm_io_mem_free(struct ttm_bo_device *bdev, > + struct ttm_mem_reg *mem) > + { > + } > ++#endif > + > ++#if 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); > ++ kfree(tt); > ++} > ++#else > + static void vbox_ttm_backend_destroy(struct ttm_tt *tt) > + { > + ttm_tt_fini(tt); > +@@ -209,6 +254,7 @@ static void vbox_ttm_backend_destroy(struct ttm_tt *tt) > + static struct ttm_backend_func vbox_tt_backend_func = { > + .destroy = &vbox_ttm_backend_destroy, > + }; > ++#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) > + static struct ttm_tt *vbox_ttm_tt_create(struct ttm_bo_device *bdev, > +@@ -226,7 +272,9 @@ static struct ttm_tt *vbox_ttm_tt_create(struct > ttm_buffer_object *bo, > + if (!tt) > + return NULL; > + > ++#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 (ttm_tt_init(tt, bdev, size, page_flags, dummy_read_page)) { > + #else > +@@ -261,11 +309,16 @@ static void vbox_ttm_tt_unpopulate(struct ttm_tt *ttm) > + > + static struct ttm_bo_driver vbox_bo_driver = { > + .ttm_tt_create = vbox_ttm_tt_create, > ++#if RTLNX_VER_MIN(5,10,0) > ++ .ttm_tt_destroy = vbox_ttm_tt_destroy, > ++#endif > + #if RTLNX_VER_MAX(4,17,0) > + .ttm_tt_populate = vbox_ttm_tt_populate, > + .ttm_tt_unpopulate = vbox_ttm_tt_unpopulate, > + #endif > ++#if RTLNX_VER_MAX(5,10,0) > + .init_mem_type = vbox_bo_init_mem_type, > ++#endif > + #if RTLNX_VER_MIN(4,10,0) || RTLNX_RHEL_MAJ_PREREQ(7,4) > + .eviction_valuable = ttm_bo_eviction_valuable, > + #endif > +@@ -318,8 +371,13 @@ int vbox_mm_init(struct vbox_private *vbox) > + #endif > + } > + > ++#if RTLNX_VER_MIN(5,10,0) > ++ ret = ttm_range_man_init(bdev, TTM_PL_VRAM, false, > ++ vbox->available_vram_size >> PAGE_SHIFT); > ++#else > + ret = ttm_bo_init_mm(bdev, TTM_PL_VRAM, > + vbox->available_vram_size >> PAGE_SHIFT); > ++#endif > + if (ret) { > + DRM_ERROR("Failed ttm VRAM init: %d\n", ret); > + goto err_device_release; > +@@ -359,7 +417,7 @@ void vbox_mm_fini(struct vbox_private *vbox) > + #endif > + } > + > +-void vbox_ttm_placement(struct vbox_bo *bo, int domain) > ++void vbox_ttm_placement(struct vbox_bo *bo, u32 mem_type) > + { > + u32 c = 0; > + #if RTLNX_VER_MAX(3,18,0) && !RTLNX_RHEL_MAJ_PREREQ(7,2) > +@@ -372,15 +430,36 @@ void vbox_ttm_placement(struct vbox_bo *bo, int domain) > + bo->placement.placement = bo->placements; > + bo->placement.busy_placement = bo->placements; > + > +- if (domain & TTM_PL_FLAG_VRAM) > ++ if (mem_type & VBOX_MEM_TYPE_VRAM) { > ++#if RTLNX_VER_MIN(5,10,0) > ++ bo->placements[c].mem_type = TTM_PL_VRAM; > ++ PLACEMENT_FLAGS(bo->placements[c++]) = > ++ TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED; > ++#else > + PLACEMENT_FLAGS(bo->placements[c++]) = > + TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_VRAM; > +- if (domain & TTM_PL_FLAG_SYSTEM) > ++#endif > ++ } > ++ if (mem_type & VBOX_MEM_TYPE_SYSTEM) { > ++#if RTLNX_VER_MIN(5,10,0) > ++ bo->placements[c].mem_type = TTM_PL_SYSTEM; > ++ PLACEMENT_FLAGS(bo->placements[c++]) = > ++ TTM_PL_MASK_CACHING; > ++#else > + PLACEMENT_FLAGS(bo->placements[c++]) = > + TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM; > +- if (!c) > ++#endif > ++ } > ++ if (!c) { > ++#if RTLNX_VER_MIN(5,10,0) > ++ bo->placements[c].mem_type = TTM_PL_SYSTEM; > ++ PLACEMENT_FLAGS(bo->placements[c++]) = > ++ TTM_PL_MASK_CACHING; > ++#else > + PLACEMENT_FLAGS(bo->placements[c++]) = > + TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM; > ++#endif > ++ } > + > + bo->placement.num_placement = c; > + bo->placement.num_busy_placement = c; > +@@ -414,7 +493,7 @@ int vbox_bo_create(struct drm_device *dev, int size, int > align, > + vboxbo->bo.bdev->dev_mapping = dev->dev_mapping; > + #endif > + > +- vbox_ttm_placement(vboxbo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM); > ++ vbox_ttm_placement(vboxbo, VBOX_MEM_TYPE_VRAM | VBOX_MEM_TYPE_SYSTEM); > + > + acc_size = ttm_bo_dma_acc_size(&vbox->ttm.bdev, size, > + sizeof(struct vbox_bo)); > +@@ -452,7 +531,7 @@ static inline u64 vbox_bo_gpu_offset(struct vbox_bo *bo) > + #endif > + } > + > +-int vbox_bo_pin(struct vbox_bo *bo, u32 pl_flag, u64 *gpu_addr) > ++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) > + struct ttm_operation_ctx ctx = { false, false }; > +@@ -467,7 +546,7 @@ int vbox_bo_pin(struct vbox_bo *bo, u32 pl_flag, u64 > *gpu_addr) > + return 0; > + } > + > +- vbox_ttm_placement(bo, pl_flag); > ++ vbox_ttm_placement(bo, mem_type); > + > + for (i = 0; i < bo->placement.num_placement; i++) > + PLACEMENT_FLAGS(bo->placements[i]) |= TTM_PL_FLAG_NO_EVICT; > +@@ -540,7 +619,7 @@ int vbox_bo_push_sysram(struct vbox_bo *bo) > + if (bo->kmap.virtual) > + ttm_bo_kunmap(&bo->kmap); > + > +- vbox_ttm_placement(bo, TTM_PL_FLAG_SYSTEM); > ++ vbox_ttm_placement(bo, VBOX_MEM_TYPE_SYSTEM); > + > + for (i = 0; i < bo->placement.num_placement; i++) > + PLACEMENT_FLAGS(bo->placements[i]) |= TTM_PL_FLAG_NO_EVICT; > +-- > +2.19.1 > + > diff --git > a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-Runtime-memobj-r0drv-linux.c-Changes-to-support-the-.patch > > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-Runtime-memobj-r0drv-linux.c-Changes-to-support-the-.patch > new file mode 100644 > index 000000000..039d447da > --- /dev/null > +++ > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-Runtime-memobj-r0drv-linux.c-Changes-to-support-the-.patch > @@ -0,0 +1,120 @@ > +From 2a6e3cf63f58e289802a11faad5fb495e2d04e97 Mon Sep 17 00:00:00 2001 > +From: vboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f> > +Date: Wed, 9 Dec 2020 18:59:04 +0000 > +Subject: [PATCH] Runtime/memobj-r0drv-linux.c: Changes to support the > upcoming > + 5.10 kernel, bugref:9879 > + > +Upstream-Status: Backport > + > +git-svn-id: http://www.virtualbox.org/svn/vbox@87074 > cfe28804-0f27-0410-a406-dd0f0b0b656f > + > +Signed-off-by: Bruce Ashfield <[email protected]> > +--- > + .../Runtime/r0drv/linux/memobj-r0drv-linux.c | 68 ++++++++++++++++++- > + 1 file changed, 67 insertions(+), 1 deletion(-) > + > +diff --git a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > +index 13f5f4236d..66c3bb364b 100644 > +--- a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > ++++ b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > +@@ -56,9 +56,19 @@ > + * Whether we use alloc_vm_area (3.2+) for executable memory. > + * This is a must for 5.8+, but we enable it all the way back to 3.2.x for > + * better W^R compliance (fExecutable flag). */ > +-#if RTLNX_VER_MIN(3,2,0) || defined(DOXYGEN_RUNNING) > ++#if RTLNX_VER_RANGE(3,2,0, 5,10,0) || defined(DOXYGEN_RUNNING) > + # define IPRT_USE_ALLOC_VM_AREA_FOR_EXEC > + #endif > ++/** @def IPRT_USE_APPLY_TO_PAGE_RANGE_FOR_EXEC > ++ * alloc_vm_area was removed with 5.10 so we have to resort to a different > way > ++ * to allocate executable memory. > ++ * It would be possible to remove IPRT_USE_ALLOC_VM_AREA_FOR_EXEC and use > ++ * this path execlusively for 3.2+ but no time to test it really works on > every > ++ * supported kernel, so better play safe for now. > ++ */ > ++#if RTLNX_VER_MIN(5,10,0) || defined(DOXYGEN_RUNNING) > ++# define IPRT_USE_APPLY_TO_PAGE_RANGE_FOR_EXEC > ++#endif > + > + /* > + * 2.6.29+ kernels don't work with remap_pfn_range() anymore because > +@@ -502,6 +512,42 @@ static void rtR0MemObjLinuxFreePages(PRTR0MEMOBJLNX > pMemLnx) > + } > + > + > ++#ifdef IPRT_USE_APPLY_TO_PAGE_RANGE_FOR_EXEC > ++/** > ++ * User data passed to the apply_to_page_range() callback. > ++ */ > ++typedef struct LNXAPPLYPGRANGE > ++{ > ++ /** Pointer to the memory object. */ > ++ PRTR0MEMOBJLNX pMemLnx; > ++ /** The page protection flags to apply. */ > ++ pgprot_t fPg; > ++} LNXAPPLYPGRANGE; > ++/** Pointer to the user data. */ > ++typedef LNXAPPLYPGRANGE *PLNXAPPLYPGRANGE; > ++/** Pointer to the const user data. */ > ++typedef const LNXAPPLYPGRANGE *PCLNXAPPLYPGRANGE; > ++ > ++/** > ++ * Callback called in apply_to_page_range(). > ++ * > ++ * @returns Linux status code. > ++ * @param pPte Pointer to the page table entry for the > given address. > ++ * @param uAddr The address to apply the new protection to. > ++ * @param pvUser The opaque user data. > ++ */ > ++static DECLCALLBACK(int) rtR0MemObjLinuxApplyPageRange(pte_t *pPte, > unsigned long uAddr, void *pvUser) > ++{ > ++ PCLNXAPPLYPGRANGE pArgs = (PCLNXAPPLYPGRANGE)pvUser; > ++ PRTR0MEMOBJLNX pMemLnx = pArgs->pMemLnx; > ++ size_t idxPg = (uAddr - (unsigned long)pMemLnx->Core.pv) >> PAGE_SHIFT; > ++ > ++ set_pte(pPte, mk_pte(pMemLnx->apPages[idxPg], pArgs->fPg)); > ++ return 0; > ++} > ++#endif > ++ > ++ > + /** > + * Maps the allocation into ring-0. > + * > +@@ -584,6 +630,11 @@ static int rtR0MemObjLinuxVMap(PRTR0MEMOBJLNX pMemLnx, > bool fExecutable) > + else > + # endif > + { > ++# if defined(IPRT_USE_APPLY_TO_PAGE_RANGE_FOR_EXEC) > ++ if (fExecutable) > ++ pgprot_val(fPg) |= _PAGE_NX; /* Uses RTR0MemObjProtect to > clear NX when memory ready, W^X fashion. */ > ++# endif > ++ > + # ifdef VM_MAP > + pMemLnx->Core.pv = vmap(&pMemLnx->apPages[0], pMemLnx->cPages, > VM_MAP, fPg); > + # else > +@@ -1851,6 +1902,21 @@ DECLHIDDEN(int) > rtR0MemObjNativeProtect(PRTR0MEMOBJINTERNAL pMem, size_t offSub, > + preempt_enable(); > + return VINF_SUCCESS; > + } > ++# elif defined(IPRT_USE_APPLY_TO_PAGE_RANGE_FOR_EXEC) > ++ PRTR0MEMOBJLNX pMemLnx = (PRTR0MEMOBJLNX)pMem; > ++ if ( pMemLnx->fExecutable > ++ && pMemLnx->fMappedToRing0) > ++ { > ++ LNXAPPLYPGRANGE Args; > ++ Args.pMemLnx = pMemLnx; > ++ Args.fPg = rtR0MemObjLinuxConvertProt(fProt, true /*fKernel*/); > ++ int rcLnx = apply_to_page_range(current->active_mm, (unsigned > long)pMemLnx->Core.pv + offSub, cbSub, > ++ rtR0MemObjLinuxApplyPageRange, > (void *)&Args); > ++ if (rcLnx) > ++ return VERR_NOT_SUPPORTED; > ++ > ++ return VINF_SUCCESS; > ++ } > + # endif > + > + NOREF(pMem); > +-- > +2.19.1 > + > diff --git > a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-linser-vboxsf-Adjustment-for-linux-5.10-TASK_SIZE_MA.patch > > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-linser-vboxsf-Adjustment-for-linux-5.10-TASK_SIZE_MA.patch > new file mode 100644 > index 000000000..3cfe2e917 > --- /dev/null > +++ > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-linser-vboxsf-Adjustment-for-linux-5.10-TASK_SIZE_MA.patch > @@ -0,0 +1,46 @@ > +From a276f8bc5e4515f7ea51e2c56e0e634a723ca104 Mon Sep 17 00:00:00 2001 > +From: vboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f> > +Date: Tue, 8 Dec 2020 13:52:53 +0000 > +Subject: [PATCH] linser/vboxsf: Adjustment for linux 5.10 - TASK_SIZE_MAX > + replaces USER_DS.seg. bugref:9879 > + > +Upstream-Status: Backport > + > +git-svn-id: http://www.virtualbox.org/svn/vbox@87053 > cfe28804-0f27-0410-a406-dd0f0b0b656f > + > +Signed-off-by: Bruce Ashfield <[email protected]> > +--- > + src/VBox/Additions/linux/sharedfolders/regops.c | 9 ++++++++- > + 1 file changed, 8 insertions(+), 1 deletion(-) > + > +diff --git a/src/VBox/Additions/linux/sharedfolders/regops.c > b/src/VBox/Additions/linux/sharedfolders/regops.c > +index e1fad3d820..401fd69930 100644 > +--- a/src/VBox/Additions/linux/sharedfolders/regops.c > ++++ b/src/VBox/Additions/linux/sharedfolders/regops.c > +@@ -147,7 +147,11 @@ static int vbsf_iov_iter_detect_type(struct iovec const > *paIov, size_t cSegs) > + while (cSegs-- > 0) { > + if (paIov->iov_len > 0) { > + if (access_ok(VERIFY_READ, paIov->iov_base, paIov->iov_len)) > ++#if RTLNX_VER_MIN(5,10,0) > ++ return (uintptr_t)paIov->iov_base >= TASK_SIZE_MAX ? > ITER_KVEC : 0; > ++#else > + return (uintptr_t)paIov->iov_base >= USER_DS.seg ? > ITER_KVEC : 0; > ++#endif > + AssertMsgFailed(("%p LB %#zx\n", paIov->iov_base, > paIov->iov_len)); > + break; > + } > +@@ -1401,7 +1405,10 @@ static int > vbsf_lock_user_pages_failed_check_kernel(uintptr_t uPtrFrom, size_t c > + /* > + * Check that this is valid user memory that is actually in the kernel > range. > + */ > +-#if RTLNX_VER_MIN(5,0,0) || RTLNX_RHEL_MIN(8,1) > ++#if RTLNX_VER_MIN(5,10,0) > ++ if ( access_ok((void *)uPtrFrom, cPages << PAGE_SHIFT) > ++ && uPtrFrom >= TASK_SIZE_MAX) > ++#elif RTLNX_VER_MIN(5,0,0) || RTLNX_RHEL_MIN(8,1) > + if ( access_ok((void *)uPtrFrom, cPages << PAGE_SHIFT) > + && uPtrFrom >= USER_DS.seg) > + #else > +-- > +2.19.1 > + > diff --git > a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb > index 9282f663b..ff639c09f 100644 > --- a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb > +++ b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb > @@ -13,6 +13,9 @@ VBOX_NAME = "VirtualBox-${PV}" > > SRC_URI = > "http://download.virtualbox.org/virtualbox/${PV}/${VBOX_NAME}.tar.bz2 \ > file://Makefile.utils \ > + file://0001-Additions-linux-drm-Adjustment-for-Linux-5.10.patch \ > + file://0001-Runtime-memobj-r0drv-linux.c-Changes-to-support-the-.patch \ > + file://0001-linser-vboxsf-Adjustment-for-linux-5.10-TASK_SIZE_MA.patch \ > " > SRC_URI[md5sum] = "a12a647f6c114f2cb1571089b36841fe" > SRC_URI[sha256sum] = > "49c1990da16d8a3d5bda8cdb961ec8195a901e67e4c79aea44c1521a5fc2f9f1" > -- > 2.19.1 >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#88545): https://lists.openembedded.org/g/openembedded-devel/message/88545 Mute This Topic: https://lists.openembedded.org/mt/79452020/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-devel/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
