* [meta-oe][PATCH] vboxguestdrivers: Fix build with kernel 5.10 @ 2021-01-05 4:04 Khem Raj 2021-01-05 10:50 ` [oe] " Jose Quaresma 0 siblings, 1 reply; 7+ messages in thread From: Khem Raj @ 2021-01-05 4:04 UTC (permalink / raw) To: openembedded-devel; +Cc: Khem Raj Signed-off-by: Khem Raj <raj.khem@gmail.com> --- .../0001-support-python-5.9.patch | 129 ++++++ .../0002-Backport-5.10-fixes.patch | 432 ++++++++++++++++++ .../vboxguestdrivers_6.1.16.bb | 2 + 3 files changed, 563 insertions(+) create mode 100644 meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch create mode 100644 meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch diff --git a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch new file mode 100644 index 0000000000..f1c4194633 --- /dev/null +++ b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch @@ -0,0 +1,129 @@ +From d4df52c9442d44adfc492e8e1b682ab638f10c0c Mon Sep 17 00:00:00 2001 +From: Khem Raj <raj.khem@gmail.com> +Date: Mon, 4 Jan 2021 19:52:10 -0800 +Subject: [PATCH 1/2] support python 5.9 + +Imported from + +https://github.com/archlinux/svntogit-community/commit/9276e06052e89615fe8bf3a30d04f5803ad2e539 + +Signed-off-by: Khem Raj <raj.khem@gmail.com> +--- + configure | 2 +- + src/libs/xpcom18a4/python/Makefile.kmk | 48 ++++++++++++++++++- + src/libs/xpcom18a4/python/gen_python_deps.py | 2 +- + .../xpcom18a4/python/src/module/_xpcom.cpp | 6 ++- + 4 files changed, 54 insertions(+), 4 deletions(-) + +diff --git a/configure b/configure +index 55390478..50f53434 100755 +--- a/configure ++++ b/configure +@@ -2028,7 +2028,7 @@ extern "C" int main(void) + } + EOF + found= +- SUPPYTHONLIBS="python2.7 python2.6 python3.1 python3.2 python3.3 python3.4 python3.4m python3.5 python3.5m python3.6 python3.6m python3.7 python3.7m python3.8 python3.8m" ++ SUPPYTHONLIBS="python2.7 python2.6 python3.1 python3.2 python3.3 python3.4 python3.4m python3.5 python3.5m python3.6 python3.6m python3.7 python3.7m python3.8 python3.8m python3.9 python3.9m" + for p in $PYTHONDIR; do + for d in $SUPPYTHONLIBS; do + for b in lib/x86_64-linux-gnu lib/i386-linux-gnu lib64 lib/64 lib; do +diff --git a/src/libs/xpcom18a4/python/Makefile.kmk b/src/libs/xpcom18a4/python/Makefile.kmk +index f854ea84..afc3d6b3 100644 +--- a/src/libs/xpcom18a4/python/Makefile.kmk ++++ b/src/libs/xpcom18a4/python/Makefile.kmk +@@ -26,7 +26,7 @@ endif + + # + # List of supported Python versions, defining a number of +-# VBOX_PYTHON[26|27|31|32|32M|33|33M|34|34M|35|35M|36|36M|37|37M|38|38M|DEF]_[INC|LIB] variables ++# VBOX_PYTHON[26|27|31|32|32M|33|33M|34|34M|35|35M|36|36M|37|37M|38|38M|39|39M|DEF]_[INC|LIB] variables + # which get picked up below. + # + ifeq ($(KBUILD_TARGET),darwin) # Relatively predictable, don't script. +@@ -533,6 +533,52 @@ VBoxPython3_8m_x86_LIBS = $(VBOX_PYTHON38M_LIB_X86) + endif + endif + ++ifdef VBOX_PYTHON39_INC ++# ++# Python 3.9 version ++# ++DLLS += VBoxPython3_9 ++VBoxPython3_9_EXTENDS = VBoxPythonBase ++VBoxPython3_9_EXTENDS_BY = appending ++VBoxPython3_9_TEMPLATE = XPCOM ++VBoxPython3_9_INCS = $(VBOX_PYTHON39_INC) ++VBoxPython3_9_LIBS = $(VBOX_PYTHON39_LIB) ++ ++ ifdef VBOX_WITH_32_ON_64_MAIN_API ++ ifdef VBOX_PYTHON39_LIB_X86 ++DLLS += VBoxPython3_9_x86 ++VBoxPython3_9_x86_EXTENDS = VBoxPythonBase_x86 ++VBoxPython3_9_x86_EXTENDS_BY = appending ++VBoxPython3_9_x86_TEMPLATE = XPCOM ++VBoxPython3_9_x86_INCS = $(VBOX_PYTHON39_INC) ++VBoxPython3_9_x86_LIBS = $(VBOX_PYTHON39_LIB_X86) ++ endif ++ endif ++endif ++ ++ifdef VBOX_PYTHON39M_INC ++# ++# Python 3.9 version with pymalloc ++# ++DLLS += VBoxPython3_9m ++VBoxPython3_9m_EXTENDS = VBoxPythonBase_m ++VBoxPython3_9m_EXTENDS_BY = appending ++VBoxPython3_9m_TEMPLATE = XPCOM ++VBoxPython3_9m_INCS = $(VBOX_PYTHON39M_INC) ++VBoxPython3_9m_LIBS = $(VBOX_PYTHON39M_LIB) ++ ++ ifdef VBOX_WITH_32_ON_64_MAIN_API ++ ifdef VBOX_PYTHON39M_LIB_X86 ++DLLS += VBoxPython3_9m_x86 ++VBoxPython3_9m_x86_EXTENDS = VBoxPythonBase_x86_m ++VBoxPython3_9m_x86_EXTENDS_BY = appending ++VBoxPython3_9m_x86_TEMPLATE_ = XPCOM ++VBoxPython3_9m_x86_INCS = $(VBOX_PYTHON39M_INC) ++VBoxPython3_9m_x86_LIBS = $(VBOX_PYTHON39M_LIB_X86) ++ endif ++ endif ++endif ++ + ifdef VBOX_PYTHONDEF_INC + # + # Python without versioning +diff --git a/src/libs/xpcom18a4/python/gen_python_deps.py b/src/libs/xpcom18a4/python/gen_python_deps.py +index 848dddf3..b116313a 100755 +--- a/src/libs/xpcom18a4/python/gen_python_deps.py ++++ b/src/libs/xpcom18a4/python/gen_python_deps.py +@@ -16,7 +16,7 @@ from __future__ import print_function + import os,sys + from distutils.version import StrictVersion + +-versions = ["2.6", "2.7", "3.1", "3.2", "3.2m", "3.3", "3.3m", "3.4", "3.4m", "3.5", "3.5m", "3.6", "3.6m", "3.7", "3.7m", "3.8", "3.8m" ] ++versions = ["2.6", "2.7", "3.1", "3.2", "3.2m", "3.3", "3.3m", "3.4", "3.4m", "3.5", "3.5m", "3.6", "3.6m", "3.7", "3.7m", "3.8", "3.8m", "3.9", "3.9m" ] + prefixes = ["/usr", "/usr/local", "/opt", "/opt/local"] + known = {} + +diff --git a/src/libs/xpcom18a4/python/src/module/_xpcom.cpp b/src/libs/xpcom18a4/python/src/module/_xpcom.cpp +index d35eb607..93ce03fd 100644 +--- a/src/libs/xpcom18a4/python/src/module/_xpcom.cpp ++++ b/src/libs/xpcom18a4/python/src/module/_xpcom.cpp +@@ -84,7 +84,11 @@ extern PYXPCOM_EXPORT void PyXPCOM_InterpreterState_Ensure(); + # define MANGLE_MODULE_INIT(a_Name) RT_CONCAT(a_Name, MODULE_NAME_SUFFIX) + # endif + # ifdef VBOX_PYXPCOM_VERSIONED +-# if PY_VERSION_HEX >= 0x03080000 && PY_VERSION_HEX < 0x03090000 ++# if PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x03100000 ++# define MODULE_NAME MANGLE_MODULE_NAME("VBoxPython3_9") ++# define initVBoxPython MANGLE_MODULE_INIT(PyInit_VBoxPython3_9) ++ ++# elif PY_VERSION_HEX >= 0x03080000 && PY_VERSION_HEX < 0x03090000 + # define MODULE_NAME MANGLE_MODULE_NAME("VBoxPython3_8") + # define initVBoxPython MANGLE_MODULE_INIT(PyInit_VBoxPython3_8) + +-- +2.30.0 + diff --git a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch new file mode 100644 index 0000000000..f277ced902 --- /dev/null +++ b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch @@ -0,0 +1,432 @@ +From ac018c7fe2215aab028615b2823cc8fba97cf8c2 Mon Sep 17 00:00:00 2001 +From: Khem Raj <raj.khem@gmail.com> +Date: Mon, 4 Jan 2021 19:54:52 -0800 +Subject: [PATCH 2/2] Backport 5.10 fixes + +Imported from +https://raw.githubusercontent.com/archlinux/svntogit-community/packages/virtualbox/trunk/020-linux-5-10.patch + +Signed-off-by: Khem Raj <raj.khem@gmail.com> +--- + 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 +++++++++++++++++-- + .../Additions/linux/sharedfolders/regops.c | 5 +- + .../Runtime/r0drv/linux/memobj-r0drv-linux.c | 61 +++++++++++- + 6 files changed, 163 insertions(+), 16 deletions(-) + +diff --git a/src/VBox/Additions/linux/drm/vbox_drv.h b/src/VBox/Additions/linux/drm/vbox_drv.h +index c680f3b4..d21d023c 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 811d0040..44b1ef52 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 1e2691fd..52fd10fd 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 4e990843..ee2da4aa 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; +diff --git a/src/VBox/Additions/linux/sharedfolders/regops.c b/src/VBox/Additions/linux/sharedfolders/regops.c +index 3ad9c566..ec298a1b 100644 +--- a/src/VBox/Additions/linux/sharedfolders/regops.c ++++ b/src/VBox/Additions/linux/sharedfolders/regops.c +@@ -1401,7 +1401,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 +diff --git a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c +index c771c1ba..a34eb149 100644 +--- a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c ++++ b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c +@@ -56,9 +56,12 @@ + * 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 ++#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 +505,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; ++ uint32_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 +623,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 +1895,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.30.0 + 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 9282f663b4..fef7ffa954 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,8 @@ VBOX_NAME = "VirtualBox-${PV}" SRC_URI = "http://download.virtualbox.org/virtualbox/${PV}/${VBOX_NAME}.tar.bz2 \ file://Makefile.utils \ + file://0001-support-python-5.9.patch \ + file://0002-Backport-5.10-fixes.patch \ " SRC_URI[md5sum] = "a12a647f6c114f2cb1571089b36841fe" SRC_URI[sha256sum] = "49c1990da16d8a3d5bda8cdb961ec8195a901e67e4c79aea44c1521a5fc2f9f1" -- 2.30.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [oe] [meta-oe][PATCH] vboxguestdrivers: Fix build with kernel 5.10 2021-01-05 4:04 [meta-oe][PATCH] vboxguestdrivers: Fix build with kernel 5.10 Khem Raj @ 2021-01-05 10:50 ` Jose Quaresma 2021-01-05 17:05 ` Khem Raj 0 siblings, 1 reply; 7+ messages in thread From: Jose Quaresma @ 2021-01-05 10:50 UTC (permalink / raw) To: Khem Raj; +Cc: openembeded-devel [-- Attachment #1: Type: text/plain, Size: 25627 bytes --] Hi, I think there are a typo in python version the patch mention 5.9 instead of 3.9 Khem Raj <raj.khem@gmail.com> escreveu no dia terça, 5/01/2021 à(s) 04:04: > Signed-off-by: Khem Raj <raj.khem@gmail.com> > --- > .../0001-support-python-5.9.patch | 129 ++++++ > .../0001-support-python-3.9.patch > .../0002-Backport-5.10-fixes.patch | 432 ++++++++++++++++++ > .../vboxguestdrivers_6.1.16.bb | 2 + > 3 files changed, 563 insertions(+) > create mode 100644 > meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch > create mode 100644 > meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch > > diff --git > a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch > new file mode 100644 > index 0000000000..f1c4194633 > --- /dev/null > +++ > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch > @@ -0,0 +1,129 @@ > +From d4df52c9442d44adfc492e8e1b682ab638f10c0c Mon Sep 17 00:00:00 2001 > +From: Khem Raj <raj.khem@gmail.com> > +Date: Mon, 4 Jan 2021 19:52:10 -0800 > +Subject: [PATCH 1/2] support python 5.9 > Subject: [PATCH 1/2] support python 3.9 > + > +Imported from > + > + > https://github.com/archlinux/svntogit-community/commit/9276e06052e89615fe8bf3a30d04f5803ad2e539 > + > +Signed-off-by: Khem Raj <raj.khem@gmail.com> > +--- > + configure | 2 +- > + src/libs/xpcom18a4/python/Makefile.kmk | 48 ++++++++++++++++++- > + src/libs/xpcom18a4/python/gen_python_deps.py | 2 +- > + .../xpcom18a4/python/src/module/_xpcom.cpp | 6 ++- > + 4 files changed, 54 insertions(+), 4 deletions(-) > + > +diff --git a/configure b/configure > +index 55390478..50f53434 100755 > +--- a/configure > ++++ b/configure > +@@ -2028,7 +2028,7 @@ extern "C" int main(void) > + } > + EOF > + found= > +- SUPPYTHONLIBS="python2.7 python2.6 python3.1 python3.2 python3.3 > python3.4 python3.4m python3.5 python3.5m python3.6 python3.6m python3.7 > python3.7m python3.8 python3.8m" > ++ SUPPYTHONLIBS="python2.7 python2.6 python3.1 python3.2 python3.3 > python3.4 python3.4m python3.5 python3.5m python3.6 python3.6m python3.7 > python3.7m python3.8 python3.8m python3.9 python3.9m" > + for p in $PYTHONDIR; do > + for d in $SUPPYTHONLIBS; do > + for b in lib/x86_64-linux-gnu lib/i386-linux-gnu lib64 lib/64 lib; > do > +diff --git a/src/libs/xpcom18a4/python/Makefile.kmk > b/src/libs/xpcom18a4/python/Makefile.kmk > +index f854ea84..afc3d6b3 100644 > +--- a/src/libs/xpcom18a4/python/Makefile.kmk > ++++ b/src/libs/xpcom18a4/python/Makefile.kmk > +@@ -26,7 +26,7 @@ endif > + > + # > + # List of supported Python versions, defining a number of > +-# > VBOX_PYTHON[26|27|31|32|32M|33|33M|34|34M|35|35M|36|36M|37|37M|38|38M|DEF]_[INC|LIB] > variables > ++# > VBOX_PYTHON[26|27|31|32|32M|33|33M|34|34M|35|35M|36|36M|37|37M|38|38M|39|39M|DEF]_[INC|LIB] > variables > + # which get picked up below. > + # > + ifeq ($(KBUILD_TARGET),darwin) # Relatively predictable, don't script. > +@@ -533,6 +533,52 @@ VBoxPython3_8m_x86_LIBS = > $(VBOX_PYTHON38M_LIB_X86) > + endif > + endif > + > ++ifdef VBOX_PYTHON39_INC > ++# > ++# Python 3.9 version > ++# > ++DLLS += VBoxPython3_9 > ++VBoxPython3_9_EXTENDS = VBoxPythonBase > ++VBoxPython3_9_EXTENDS_BY = appending > ++VBoxPython3_9_TEMPLATE = XPCOM > ++VBoxPython3_9_INCS = $(VBOX_PYTHON39_INC) > ++VBoxPython3_9_LIBS = $(VBOX_PYTHON39_LIB) > ++ > ++ ifdef VBOX_WITH_32_ON_64_MAIN_API > ++ ifdef VBOX_PYTHON39_LIB_X86 > ++DLLS += VBoxPython3_9_x86 > ++VBoxPython3_9_x86_EXTENDS = VBoxPythonBase_x86 > ++VBoxPython3_9_x86_EXTENDS_BY = appending > ++VBoxPython3_9_x86_TEMPLATE = XPCOM > ++VBoxPython3_9_x86_INCS = $(VBOX_PYTHON39_INC) > ++VBoxPython3_9_x86_LIBS = $(VBOX_PYTHON39_LIB_X86) > ++ endif > ++ endif > ++endif > ++ > ++ifdef VBOX_PYTHON39M_INC > ++# > ++# Python 3.9 version with pymalloc > ++# > ++DLLS += VBoxPython3_9m > ++VBoxPython3_9m_EXTENDS = VBoxPythonBase_m > ++VBoxPython3_9m_EXTENDS_BY = appending > ++VBoxPython3_9m_TEMPLATE = XPCOM > ++VBoxPython3_9m_INCS = $(VBOX_PYTHON39M_INC) > ++VBoxPython3_9m_LIBS = $(VBOX_PYTHON39M_LIB) > ++ > ++ ifdef VBOX_WITH_32_ON_64_MAIN_API > ++ ifdef VBOX_PYTHON39M_LIB_X86 > ++DLLS += VBoxPython3_9m_x86 > ++VBoxPython3_9m_x86_EXTENDS = VBoxPythonBase_x86_m > ++VBoxPython3_9m_x86_EXTENDS_BY = appending > ++VBoxPython3_9m_x86_TEMPLATE_ = XPCOM > ++VBoxPython3_9m_x86_INCS = $(VBOX_PYTHON39M_INC) > ++VBoxPython3_9m_x86_LIBS = $(VBOX_PYTHON39M_LIB_X86) > ++ endif > ++ endif > ++endif > ++ > + ifdef VBOX_PYTHONDEF_INC > + # > + # Python without versioning > +diff --git a/src/libs/xpcom18a4/python/gen_python_deps.py > b/src/libs/xpcom18a4/python/gen_python_deps.py > +index 848dddf3..b116313a 100755 > +--- a/src/libs/xpcom18a4/python/gen_python_deps.py > ++++ b/src/libs/xpcom18a4/python/gen_python_deps.py > +@@ -16,7 +16,7 @@ from __future__ import print_function > + import os,sys > + from distutils.version import StrictVersion > + > +-versions = ["2.6", "2.7", "3.1", "3.2", "3.2m", "3.3", "3.3m", "3.4", > "3.4m", "3.5", "3.5m", "3.6", "3.6m", "3.7", "3.7m", "3.8", "3.8m" ] > ++versions = ["2.6", "2.7", "3.1", "3.2", "3.2m", "3.3", "3.3m", "3.4", > "3.4m", "3.5", "3.5m", "3.6", "3.6m", "3.7", "3.7m", "3.8", "3.8m", "3.9", > "3.9m" ] > + prefixes = ["/usr", "/usr/local", "/opt", "/opt/local"] > + known = {} > + > +diff --git a/src/libs/xpcom18a4/python/src/module/_xpcom.cpp > b/src/libs/xpcom18a4/python/src/module/_xpcom.cpp > +index d35eb607..93ce03fd 100644 > +--- a/src/libs/xpcom18a4/python/src/module/_xpcom.cpp > ++++ b/src/libs/xpcom18a4/python/src/module/_xpcom.cpp > +@@ -84,7 +84,11 @@ extern PYXPCOM_EXPORT void > PyXPCOM_InterpreterState_Ensure(); > + # define MANGLE_MODULE_INIT(a_Name) RT_CONCAT(a_Name, > MODULE_NAME_SUFFIX) > + # endif > + # ifdef VBOX_PYXPCOM_VERSIONED > +-# if PY_VERSION_HEX >= 0x03080000 && PY_VERSION_HEX < 0x03090000 > ++# if PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x03100000 > ++# define MODULE_NAME MANGLE_MODULE_NAME("VBoxPython3_9") > ++# define initVBoxPython MANGLE_MODULE_INIT(PyInit_VBoxPython3_9) > ++ > ++# elif PY_VERSION_HEX >= 0x03080000 && PY_VERSION_HEX < 0x03090000 > + # define MODULE_NAME MANGLE_MODULE_NAME("VBoxPython3_8") > + # define initVBoxPython MANGLE_MODULE_INIT(PyInit_VBoxPython3_8) > + > +-- > +2.30.0 > + > diff --git > a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch > new file mode 100644 > index 0000000000..f277ced902 > --- /dev/null > +++ > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch > @@ -0,0 +1,432 @@ > +From ac018c7fe2215aab028615b2823cc8fba97cf8c2 Mon Sep 17 00:00:00 2001 > +From: Khem Raj <raj.khem@gmail.com> > +Date: Mon, 4 Jan 2021 19:54:52 -0800 > +Subject: [PATCH 2/2] Backport 5.10 fixes > + > +Imported from > + > https://raw.githubusercontent.com/archlinux/svntogit-community/packages/virtualbox/trunk/020-linux-5-10.patch > + > +Signed-off-by: Khem Raj <raj.khem@gmail.com> > +--- > + 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 +++++++++++++++++-- > + .../Additions/linux/sharedfolders/regops.c | 5 +- > + .../Runtime/r0drv/linux/memobj-r0drv-linux.c | 61 +++++++++++- > + 6 files changed, 163 insertions(+), 16 deletions(-) > + > +diff --git a/src/VBox/Additions/linux/drm/vbox_drv.h > b/src/VBox/Additions/linux/drm/vbox_drv.h > +index c680f3b4..d21d023c 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 811d0040..44b1ef52 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 1e2691fd..52fd10fd 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 4e990843..ee2da4aa 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; > +diff --git a/src/VBox/Additions/linux/sharedfolders/regops.c > b/src/VBox/Additions/linux/sharedfolders/regops.c > +index 3ad9c566..ec298a1b 100644 > +--- a/src/VBox/Additions/linux/sharedfolders/regops.c > ++++ b/src/VBox/Additions/linux/sharedfolders/regops.c > +@@ -1401,7 +1401,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 > +diff --git a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > +index c771c1ba..a34eb149 100644 > +--- a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > ++++ b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > +@@ -56,9 +56,12 @@ > + * 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 > ++#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 +505,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; > ++ uint32_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 +623,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 +1895,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.30.0 > + > 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 9282f663b4..fef7ffa954 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,8 @@ VBOX_NAME = "VirtualBox-${PV}" > > SRC_URI = " > http://download.virtualbox.org/virtualbox/${PV}/${VBOX_NAME}.tar.bz2 \ > file://Makefile.utils \ > + file://0001-support-python-5.9.patch \ > file://0001-support-python-3.9.patch > + file://0002-Backport-5.10-fixes.patch \ > " > SRC_URI[md5sum] = "a12a647f6c114f2cb1571089b36841fe" > SRC_URI[sha256sum] = > "49c1990da16d8a3d5bda8cdb961ec8195a901e67e4c79aea44c1521a5fc2f9f1" > -- > 2.30.0 > > > > > -- best regards, José Quaresma [-- Attachment #2: Type: text/html, Size: 30725 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [oe] [meta-oe][PATCH] vboxguestdrivers: Fix build with kernel 5.10 2021-01-05 10:50 ` [oe] " Jose Quaresma @ 2021-01-05 17:05 ` Khem Raj 2021-01-05 17:12 ` Bruce Ashfield 0 siblings, 1 reply; 7+ messages in thread From: Khem Raj @ 2021-01-05 17:05 UTC (permalink / raw) To: Jose Quaresma; +Cc: openembeded-devel On 1/5/21 2:50 AM, Jose Quaresma wrote: > Hi, > > I think there are a typo in python version the patch mention 5.9 instead > of 3.9 thanks I will fix it > > Khem Raj <raj.khem@gmail.com <mailto:raj.khem@gmail.com>> escreveu no > dia terça, 5/01/2021 à(s) 04:04: > > Signed-off-by: Khem Raj <raj.khem@gmail.com <mailto:raj.khem@gmail.com>> > --- > .../0001-support-python-5.9.patch | 129 ++++++ > > > .../0001-support-python-3.9.patch > > .../0002-Backport-5.10-fixes.patch | 432 ++++++++++++++++++ > .../vboxguestdrivers_6.1.16.bb > <http://vboxguestdrivers_6.1.16.bb> | 2 + > 3 files changed, 563 insertions(+) > create mode 100644 > meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch > create mode 100644 > meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch > > diff --git > a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch > new file mode 100644 > index 0000000000..f1c4194633 > --- /dev/null > +++ > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch > @@ -0,0 +1,129 @@ > +From d4df52c9442d44adfc492e8e1b682ab638f10c0c Mon Sep 17 00:00:00 2001 > +From: Khem Raj <raj.khem@gmail.com <mailto:raj.khem@gmail.com>> > +Date: Mon, 4 Jan 2021 19:52:10 -0800 > +Subject: [PATCH 1/2] support python 5.9 > > > Subject: [PATCH 1/2] support python 3.9 > > + > +Imported from > + > +https://github.com/archlinux/svntogit-community/commit/9276e06052e89615fe8bf3a30d04f5803ad2e539 > <https://github.com/archlinux/svntogit-community/commit/9276e06052e89615fe8bf3a30d04f5803ad2e539> > + > +Signed-off-by: Khem Raj <raj.khem@gmail.com > <mailto:raj.khem@gmail.com>> > +--- > + configure | 2 +- > + src/libs/xpcom18a4/python/Makefile.kmk | 48 ++++++++++++++++++- > + src/libs/xpcom18a4/python/gen_python_deps.py | 2 +- > + .../xpcom18a4/python/src/module/_xpcom.cpp | 6 ++- > + 4 files changed, 54 insertions(+), 4 deletions(-) > + > +diff --git a/configure b/configure > +index 55390478..50f53434 100755 > +--- a/configure > ++++ b/configure > +@@ -2028,7 +2028,7 @@ extern "C" int main(void) > + } > + EOF > + found= > +- SUPPYTHONLIBS="python2.7 python2.6 python3.1 python3.2 python3.3 > python3.4 python3.4m python3.5 python3.5m python3.6 python3.6m > python3.7 python3.7m python3.8 python3.8m" > ++ SUPPYTHONLIBS="python2.7 python2.6 python3.1 python3.2 python3.3 > python3.4 python3.4m python3.5 python3.5m python3.6 python3.6m > python3.7 python3.7m python3.8 python3.8m python3.9 python3.9m" > + for p in $PYTHONDIR; do > + for d in $SUPPYTHONLIBS; do > + for b in lib/x86_64-linux-gnu lib/i386-linux-gnu lib64 > lib/64 lib; do > +diff --git a/src/libs/xpcom18a4/python/Makefile.kmk > b/src/libs/xpcom18a4/python/Makefile.kmk > +index f854ea84..afc3d6b3 100644 > +--- a/src/libs/xpcom18a4/python/Makefile.kmk > ++++ b/src/libs/xpcom18a4/python/Makefile.kmk > +@@ -26,7 +26,7 @@ endif > + > + # > + # List of supported Python versions, defining a number of > +-# > VBOX_PYTHON[26|27|31|32|32M|33|33M|34|34M|35|35M|36|36M|37|37M|38|38M|DEF]_[INC|LIB] > variables > ++# > VBOX_PYTHON[26|27|31|32|32M|33|33M|34|34M|35|35M|36|36M|37|37M|38|38M|39|39M|DEF]_[INC|LIB] > variables > + # which get picked up below. > + # > + ifeq ($(KBUILD_TARGET),darwin) # Relatively predictable, don't script. > +@@ -533,6 +533,52 @@ VBoxPython3_8m_x86_LIBS = > $(VBOX_PYTHON38M_LIB_X86) > + endif > + endif > + > ++ifdef VBOX_PYTHON39_INC > ++# > ++# Python 3.9 version > ++# > ++DLLS += VBoxPython3_9 > ++VBoxPython3_9_EXTENDS = VBoxPythonBase > ++VBoxPython3_9_EXTENDS_BY = appending > ++VBoxPython3_9_TEMPLATE = XPCOM > ++VBoxPython3_9_INCS = $(VBOX_PYTHON39_INC) > ++VBoxPython3_9_LIBS = $(VBOX_PYTHON39_LIB) > ++ > ++ ifdef VBOX_WITH_32_ON_64_MAIN_API > ++ ifdef VBOX_PYTHON39_LIB_X86 > ++DLLS += VBoxPython3_9_x86 > ++VBoxPython3_9_x86_EXTENDS = VBoxPythonBase_x86 > ++VBoxPython3_9_x86_EXTENDS_BY = appending > ++VBoxPython3_9_x86_TEMPLATE = XPCOM > ++VBoxPython3_9_x86_INCS = $(VBOX_PYTHON39_INC) > ++VBoxPython3_9_x86_LIBS = $(VBOX_PYTHON39_LIB_X86) > ++ endif > ++ endif > ++endif > ++ > ++ifdef VBOX_PYTHON39M_INC > ++# > ++# Python 3.9 version with pymalloc > ++# > ++DLLS += VBoxPython3_9m > ++VBoxPython3_9m_EXTENDS = VBoxPythonBase_m > ++VBoxPython3_9m_EXTENDS_BY = appending > ++VBoxPython3_9m_TEMPLATE = XPCOM > ++VBoxPython3_9m_INCS = $(VBOX_PYTHON39M_INC) > ++VBoxPython3_9m_LIBS = $(VBOX_PYTHON39M_LIB) > ++ > ++ ifdef VBOX_WITH_32_ON_64_MAIN_API > ++ ifdef VBOX_PYTHON39M_LIB_X86 > ++DLLS += VBoxPython3_9m_x86 > ++VBoxPython3_9m_x86_EXTENDS = VBoxPythonBase_x86_m > ++VBoxPython3_9m_x86_EXTENDS_BY = appending > ++VBoxPython3_9m_x86_TEMPLATE_ = XPCOM > ++VBoxPython3_9m_x86_INCS = $(VBOX_PYTHON39M_INC) > ++VBoxPython3_9m_x86_LIBS = $(VBOX_PYTHON39M_LIB_X86) > ++ endif > ++ endif > ++endif > ++ > + ifdef VBOX_PYTHONDEF_INC > + # > + # Python without versioning > +diff --git a/src/libs/xpcom18a4/python/gen_python_deps.py > b/src/libs/xpcom18a4/python/gen_python_deps.py > +index 848dddf3..b116313a 100755 > +--- a/src/libs/xpcom18a4/python/gen_python_deps.py > ++++ b/src/libs/xpcom18a4/python/gen_python_deps.py > +@@ -16,7 +16,7 @@ from __future__ import print_function > + import os,sys > + from distutils.version import StrictVersion > + > +-versions = ["2.6", "2.7", "3.1", "3.2", "3.2m", "3.3", "3.3m", > "3.4", "3.4m", "3.5", "3.5m", "3.6", "3.6m", "3.7", "3.7m", "3.8", > "3.8m" ] > ++versions = ["2.6", "2.7", "3.1", "3.2", "3.2m", "3.3", "3.3m", > "3.4", "3.4m", "3.5", "3.5m", "3.6", "3.6m", "3.7", "3.7m", "3.8", > "3.8m", "3.9", "3.9m" ] > + prefixes = ["/usr", "/usr/local", "/opt", "/opt/local"] > + known = {} > + > +diff --git a/src/libs/xpcom18a4/python/src/module/_xpcom.cpp > b/src/libs/xpcom18a4/python/src/module/_xpcom.cpp > +index d35eb607..93ce03fd 100644 > +--- a/src/libs/xpcom18a4/python/src/module/_xpcom.cpp > ++++ b/src/libs/xpcom18a4/python/src/module/_xpcom.cpp > +@@ -84,7 +84,11 @@ extern PYXPCOM_EXPORT void > PyXPCOM_InterpreterState_Ensure(); > + # define MANGLE_MODULE_INIT(a_Name) RT_CONCAT(a_Name, > MODULE_NAME_SUFFIX) > + # endif > + # ifdef VBOX_PYXPCOM_VERSIONED > +-# if PY_VERSION_HEX >= 0x03080000 && PY_VERSION_HEX < 0x03090000 > ++# if PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x03100000 > ++# define MODULE_NAME MANGLE_MODULE_NAME("VBoxPython3_9") > ++# define initVBoxPython MANGLE_MODULE_INIT(PyInit_VBoxPython3_9) > ++ > ++# elif PY_VERSION_HEX >= 0x03080000 && PY_VERSION_HEX < 0x03090000 > + # define MODULE_NAME MANGLE_MODULE_NAME("VBoxPython3_8") > + # define initVBoxPython MANGLE_MODULE_INIT(PyInit_VBoxPython3_8) > + > +-- > +2.30.0 > + > diff --git > a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch > new file mode 100644 > index 0000000000..f277ced902 > --- /dev/null > +++ > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch > @@ -0,0 +1,432 @@ > +From ac018c7fe2215aab028615b2823cc8fba97cf8c2 Mon Sep 17 00:00:00 2001 > +From: Khem Raj <raj.khem@gmail.com <mailto:raj.khem@gmail.com>> > +Date: Mon, 4 Jan 2021 19:54:52 -0800 > +Subject: [PATCH 2/2] Backport 5.10 fixes > + > +Imported from > +https://raw.githubusercontent.com/archlinux/svntogit-community/packages/virtualbox/trunk/020-linux-5-10.patch > <https://raw.githubusercontent.com/archlinux/svntogit-community/packages/virtualbox/trunk/020-linux-5-10.patch> > + > +Signed-off-by: Khem Raj <raj.khem@gmail.com > <mailto:raj.khem@gmail.com>> > +--- > + 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 +++++++++++++++++-- > + .../Additions/linux/sharedfolders/regops.c | 5 +- > + .../Runtime/r0drv/linux/memobj-r0drv-linux.c | 61 +++++++++++- > + 6 files changed, 163 insertions(+), 16 deletions(-) > + > +diff --git a/src/VBox/Additions/linux/drm/vbox_drv.h > b/src/VBox/Additions/linux/drm/vbox_drv.h > +index c680f3b4..d21d023c 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 811d0040..44b1ef52 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 1e2691fd..52fd10fd 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 4e990843..ee2da4aa 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; > +diff --git a/src/VBox/Additions/linux/sharedfolders/regops.c > b/src/VBox/Additions/linux/sharedfolders/regops.c > +index 3ad9c566..ec298a1b 100644 > +--- a/src/VBox/Additions/linux/sharedfolders/regops.c > ++++ b/src/VBox/Additions/linux/sharedfolders/regops.c > +@@ -1401,7 +1401,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 > +diff --git a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > +index c771c1ba..a34eb149 100644 > +--- a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > ++++ b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > +@@ -56,9 +56,12 @@ > + * 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 > ++#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 +505,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; > ++ uint32_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 +623,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 +1895,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.30.0 > + > diff --git > a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb <http://vboxguestdrivers_6.1.16.bb> > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb <http://vboxguestdrivers_6.1.16.bb> > index 9282f663b4..fef7ffa954 100644 > --- > a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb <http://vboxguestdrivers_6.1.16.bb> > +++ > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb <http://vboxguestdrivers_6.1.16.bb> > @@ -13,6 +13,8 @@ VBOX_NAME = "VirtualBox-${PV}" > > SRC_URI = > "http://download.virtualbox.org/virtualbox/${PV}/${VBOX_NAME}.tar.bz2 <http://download.virtualbox.org/virtualbox/$%7BPV%7D/$%7BVBOX_NAME%7D.tar.bz2> > \ > file://Makefile.utils \ > + file://0001-support-python-5.9.patch \ > > > file://0001-support-python-3.9.patch > > + file://0002-Backport-5.10-fixes.patch \ > " > SRC_URI[md5sum] = "a12a647f6c114f2cb1571089b36841fe" > SRC_URI[sha256sum] = > "49c1990da16d8a3d5bda8cdb961ec8195a901e67e4c79aea44c1521a5fc2f9f1" > -- > 2.30.0 > > > > > > > -- > best regards, > José Quaresma ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [oe] [meta-oe][PATCH] vboxguestdrivers: Fix build with kernel 5.10 2021-01-05 17:05 ` Khem Raj @ 2021-01-05 17:12 ` Bruce Ashfield 2021-01-05 17:22 ` Khem Raj 0 siblings, 1 reply; 7+ messages in thread From: Bruce Ashfield @ 2021-01-05 17:12 UTC (permalink / raw) To: Khem Raj; +Cc: Jose Quaresma, openembeded-devel On Tue, Jan 5, 2021 at 12:05 PM Khem Raj <raj.khem@gmail.com> wrote: > > > > On 1/5/21 2:50 AM, Jose Quaresma wrote: > > Hi, > > > > I think there are a typo in python version the patch mention 5.9 instead > > of 3.9 > > thanks I will fix it Ha! Sorry about the double send of the fix, I checked the list this morning and somehow managed to miss this! Bruce > > > > > Khem Raj <raj.khem@gmail.com <mailto:raj.khem@gmail.com>> escreveu no > > dia terça, 5/01/2021 à(s) 04:04: > > > > Signed-off-by: Khem Raj <raj.khem@gmail.com <mailto:raj.khem@gmail.com>> > > --- > > .../0001-support-python-5.9.patch | 129 ++++++ > > > > > > .../0001-support-python-3.9.patch > > > > .../0002-Backport-5.10-fixes.patch | 432 ++++++++++++++++++ > > .../vboxguestdrivers_6.1.16.bb > > <http://vboxguestdrivers_6.1.16.bb> | 2 + > > 3 files changed, 563 insertions(+) > > create mode 100644 > > meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch > > create mode 100644 > > meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch > > > > diff --git > > a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch > > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch > > new file mode 100644 > > index 0000000000..f1c4194633 > > --- /dev/null > > +++ > > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch > > @@ -0,0 +1,129 @@ > > +From d4df52c9442d44adfc492e8e1b682ab638f10c0c Mon Sep 17 00:00:00 2001 > > +From: Khem Raj <raj.khem@gmail.com <mailto:raj.khem@gmail.com>> > > +Date: Mon, 4 Jan 2021 19:52:10 -0800 > > +Subject: [PATCH 1/2] support python 5.9 > > > > > > Subject: [PATCH 1/2] support python 3.9 > > > > + > > +Imported from > > + > > +https://github.com/archlinux/svntogit-community/commit/9276e06052e89615fe8bf3a30d04f5803ad2e539 > > <https://github.com/archlinux/svntogit-community/commit/9276e06052e89615fe8bf3a30d04f5803ad2e539> > > + > > +Signed-off-by: Khem Raj <raj.khem@gmail.com > > <mailto:raj.khem@gmail.com>> > > +--- > > + configure | 2 +- > > + src/libs/xpcom18a4/python/Makefile.kmk | 48 ++++++++++++++++++- > > + src/libs/xpcom18a4/python/gen_python_deps.py | 2 +- > > + .../xpcom18a4/python/src/module/_xpcom.cpp | 6 ++- > > + 4 files changed, 54 insertions(+), 4 deletions(-) > > + > > +diff --git a/configure b/configure > > +index 55390478..50f53434 100755 > > +--- a/configure > > ++++ b/configure > > +@@ -2028,7 +2028,7 @@ extern "C" int main(void) > > + } > > + EOF > > + found= > > +- SUPPYTHONLIBS="python2.7 python2.6 python3.1 python3.2 python3.3 > > python3.4 python3.4m python3.5 python3.5m python3.6 python3.6m > > python3.7 python3.7m python3.8 python3.8m" > > ++ SUPPYTHONLIBS="python2.7 python2.6 python3.1 python3.2 python3.3 > > python3.4 python3.4m python3.5 python3.5m python3.6 python3.6m > > python3.7 python3.7m python3.8 python3.8m python3.9 python3.9m" > > + for p in $PYTHONDIR; do > > + for d in $SUPPYTHONLIBS; do > > + for b in lib/x86_64-linux-gnu lib/i386-linux-gnu lib64 > > lib/64 lib; do > > +diff --git a/src/libs/xpcom18a4/python/Makefile.kmk > > b/src/libs/xpcom18a4/python/Makefile.kmk > > +index f854ea84..afc3d6b3 100644 > > +--- a/src/libs/xpcom18a4/python/Makefile.kmk > > ++++ b/src/libs/xpcom18a4/python/Makefile.kmk > > +@@ -26,7 +26,7 @@ endif > > + > > + # > > + # List of supported Python versions, defining a number of > > +-# > > VBOX_PYTHON[26|27|31|32|32M|33|33M|34|34M|35|35M|36|36M|37|37M|38|38M|DEF]_[INC|LIB] > > variables > > ++# > > VBOX_PYTHON[26|27|31|32|32M|33|33M|34|34M|35|35M|36|36M|37|37M|38|38M|39|39M|DEF]_[INC|LIB] > > variables > > + # which get picked up below. > > + # > > + ifeq ($(KBUILD_TARGET),darwin) # Relatively predictable, don't script. > > +@@ -533,6 +533,52 @@ VBoxPython3_8m_x86_LIBS = > > $(VBOX_PYTHON38M_LIB_X86) > > + endif > > + endif > > + > > ++ifdef VBOX_PYTHON39_INC > > ++# > > ++# Python 3.9 version > > ++# > > ++DLLS += VBoxPython3_9 > > ++VBoxPython3_9_EXTENDS = VBoxPythonBase > > ++VBoxPython3_9_EXTENDS_BY = appending > > ++VBoxPython3_9_TEMPLATE = XPCOM > > ++VBoxPython3_9_INCS = $(VBOX_PYTHON39_INC) > > ++VBoxPython3_9_LIBS = $(VBOX_PYTHON39_LIB) > > ++ > > ++ ifdef VBOX_WITH_32_ON_64_MAIN_API > > ++ ifdef VBOX_PYTHON39_LIB_X86 > > ++DLLS += VBoxPython3_9_x86 > > ++VBoxPython3_9_x86_EXTENDS = VBoxPythonBase_x86 > > ++VBoxPython3_9_x86_EXTENDS_BY = appending > > ++VBoxPython3_9_x86_TEMPLATE = XPCOM > > ++VBoxPython3_9_x86_INCS = $(VBOX_PYTHON39_INC) > > ++VBoxPython3_9_x86_LIBS = $(VBOX_PYTHON39_LIB_X86) > > ++ endif > > ++ endif > > ++endif > > ++ > > ++ifdef VBOX_PYTHON39M_INC > > ++# > > ++# Python 3.9 version with pymalloc > > ++# > > ++DLLS += VBoxPython3_9m > > ++VBoxPython3_9m_EXTENDS = VBoxPythonBase_m > > ++VBoxPython3_9m_EXTENDS_BY = appending > > ++VBoxPython3_9m_TEMPLATE = XPCOM > > ++VBoxPython3_9m_INCS = $(VBOX_PYTHON39M_INC) > > ++VBoxPython3_9m_LIBS = $(VBOX_PYTHON39M_LIB) > > ++ > > ++ ifdef VBOX_WITH_32_ON_64_MAIN_API > > ++ ifdef VBOX_PYTHON39M_LIB_X86 > > ++DLLS += VBoxPython3_9m_x86 > > ++VBoxPython3_9m_x86_EXTENDS = VBoxPythonBase_x86_m > > ++VBoxPython3_9m_x86_EXTENDS_BY = appending > > ++VBoxPython3_9m_x86_TEMPLATE_ = XPCOM > > ++VBoxPython3_9m_x86_INCS = $(VBOX_PYTHON39M_INC) > > ++VBoxPython3_9m_x86_LIBS = $(VBOX_PYTHON39M_LIB_X86) > > ++ endif > > ++ endif > > ++endif > > ++ > > + ifdef VBOX_PYTHONDEF_INC > > + # > > + # Python without versioning > > +diff --git a/src/libs/xpcom18a4/python/gen_python_deps.py > > b/src/libs/xpcom18a4/python/gen_python_deps.py > > +index 848dddf3..b116313a 100755 > > +--- a/src/libs/xpcom18a4/python/gen_python_deps.py > > ++++ b/src/libs/xpcom18a4/python/gen_python_deps.py > > +@@ -16,7 +16,7 @@ from __future__ import print_function > > + import os,sys > > + from distutils.version import StrictVersion > > + > > +-versions = ["2.6", "2.7", "3.1", "3.2", "3.2m", "3.3", "3.3m", > > "3.4", "3.4m", "3.5", "3.5m", "3.6", "3.6m", "3.7", "3.7m", "3.8", > > "3.8m" ] > > ++versions = ["2.6", "2.7", "3.1", "3.2", "3.2m", "3.3", "3.3m", > > "3.4", "3.4m", "3.5", "3.5m", "3.6", "3.6m", "3.7", "3.7m", "3.8", > > "3.8m", "3.9", "3.9m" ] > > + prefixes = ["/usr", "/usr/local", "/opt", "/opt/local"] > > + known = {} > > + > > +diff --git a/src/libs/xpcom18a4/python/src/module/_xpcom.cpp > > b/src/libs/xpcom18a4/python/src/module/_xpcom.cpp > > +index d35eb607..93ce03fd 100644 > > +--- a/src/libs/xpcom18a4/python/src/module/_xpcom.cpp > > ++++ b/src/libs/xpcom18a4/python/src/module/_xpcom.cpp > > +@@ -84,7 +84,11 @@ extern PYXPCOM_EXPORT void > > PyXPCOM_InterpreterState_Ensure(); > > + # define MANGLE_MODULE_INIT(a_Name) RT_CONCAT(a_Name, > > MODULE_NAME_SUFFIX) > > + # endif > > + # ifdef VBOX_PYXPCOM_VERSIONED > > +-# if PY_VERSION_HEX >= 0x03080000 && PY_VERSION_HEX < 0x03090000 > > ++# if PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x03100000 > > ++# define MODULE_NAME MANGLE_MODULE_NAME("VBoxPython3_9") > > ++# define initVBoxPython MANGLE_MODULE_INIT(PyInit_VBoxPython3_9) > > ++ > > ++# elif PY_VERSION_HEX >= 0x03080000 && PY_VERSION_HEX < 0x03090000 > > + # define MODULE_NAME MANGLE_MODULE_NAME("VBoxPython3_8") > > + # define initVBoxPython MANGLE_MODULE_INIT(PyInit_VBoxPython3_8) > > + > > +-- > > +2.30.0 > > + > > diff --git > > a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch > > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch > > new file mode 100644 > > index 0000000000..f277ced902 > > --- /dev/null > > +++ > > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch > > @@ -0,0 +1,432 @@ > > +From ac018c7fe2215aab028615b2823cc8fba97cf8c2 Mon Sep 17 00:00:00 2001 > > +From: Khem Raj <raj.khem@gmail.com <mailto:raj.khem@gmail.com>> > > +Date: Mon, 4 Jan 2021 19:54:52 -0800 > > +Subject: [PATCH 2/2] Backport 5.10 fixes > > + > > +Imported from > > +https://raw.githubusercontent.com/archlinux/svntogit-community/packages/virtualbox/trunk/020-linux-5-10.patch > > <https://raw.githubusercontent.com/archlinux/svntogit-community/packages/virtualbox/trunk/020-linux-5-10.patch> > > + > > +Signed-off-by: Khem Raj <raj.khem@gmail.com > > <mailto:raj.khem@gmail.com>> > > +--- > > + 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 +++++++++++++++++-- > > + .../Additions/linux/sharedfolders/regops.c | 5 +- > > + .../Runtime/r0drv/linux/memobj-r0drv-linux.c | 61 +++++++++++- > > + 6 files changed, 163 insertions(+), 16 deletions(-) > > + > > +diff --git a/src/VBox/Additions/linux/drm/vbox_drv.h > > b/src/VBox/Additions/linux/drm/vbox_drv.h > > +index c680f3b4..d21d023c 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 811d0040..44b1ef52 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 1e2691fd..52fd10fd 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 4e990843..ee2da4aa 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; > > +diff --git a/src/VBox/Additions/linux/sharedfolders/regops.c > > b/src/VBox/Additions/linux/sharedfolders/regops.c > > +index 3ad9c566..ec298a1b 100644 > > +--- a/src/VBox/Additions/linux/sharedfolders/regops.c > > ++++ b/src/VBox/Additions/linux/sharedfolders/regops.c > > +@@ -1401,7 +1401,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 > > +diff --git a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > > b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > > +index c771c1ba..a34eb149 100644 > > +--- a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > > ++++ b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > > +@@ -56,9 +56,12 @@ > > + * 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 > > ++#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 +505,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; > > ++ uint32_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 +623,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 +1895,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.30.0 > > + > > diff --git > > a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb <http://vboxguestdrivers_6.1.16.bb> > > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb <http://vboxguestdrivers_6.1.16.bb> > > index 9282f663b4..fef7ffa954 100644 > > --- > > a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb <http://vboxguestdrivers_6.1.16.bb> > > +++ > > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb <http://vboxguestdrivers_6.1.16.bb> > > @@ -13,6 +13,8 @@ VBOX_NAME = "VirtualBox-${PV}" > > > > SRC_URI = > > "http://download.virtualbox.org/virtualbox/${PV}/${VBOX_NAME}.tar.bz2 <http://download.virtualbox.org/virtualbox/$%7BPV%7D/$%7BVBOX_NAME%7D.tar.bz2> > > \ > > file://Makefile.utils \ > > + file://0001-support-python-5.9.patch \ > > > > > > file://0001-support-python-3.9.patch > > > > + file://0002-Backport-5.10-fixes.patch \ > > " > > SRC_URI[md5sum] = "a12a647f6c114f2cb1571089b36841fe" > > SRC_URI[sha256sum] = > > "49c1990da16d8a3d5bda8cdb961ec8195a901e67e4c79aea44c1521a5fc2f9f1" > > -- > > 2.30.0 > > > > > > > > > > > > > > -- > > best regards, > > José Quaresma > > > -- - Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end - "Use the force Harry" - Gandalf, Star Trek II ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [oe] [meta-oe][PATCH] vboxguestdrivers: Fix build with kernel 5.10 2021-01-05 17:12 ` Bruce Ashfield @ 2021-01-05 17:22 ` Khem Raj 2021-01-06 5:30 ` Khem Raj 0 siblings, 1 reply; 7+ messages in thread From: Khem Raj @ 2021-01-05 17:22 UTC (permalink / raw) To: Bruce Ashfield; +Cc: Jose Quaresma, openembeded-devel On 1/5/21 9:12 AM, Bruce Ashfield wrote: > On Tue, Jan 5, 2021 at 12:05 PM Khem Raj <raj.khem@gmail.com> wrote: >> >> >> >> On 1/5/21 2:50 AM, Jose Quaresma wrote: >>> Hi, >>> >>> I think there are a typo in python version the patch mention 5.9 instead >>> of 3.9 >> >> thanks I will fix it > > Ha! > > Sorry about the double send of the fix, I checked the list this > morning and somehow managed to miss this! I think your patch looks better organized so I will pick this one. > > Bruce > >> >>> >>> Khem Raj <raj.khem@gmail.com <mailto:raj.khem@gmail.com>> escreveu no >>> dia terça, 5/01/2021 à(s) 04:04: >>> >>> Signed-off-by: Khem Raj <raj.khem@gmail.com <mailto:raj.khem@gmail.com>> >>> --- >>> .../0001-support-python-5.9.patch | 129 ++++++ >>> >>> >>> .../0001-support-python-3.9.patch >>> >>> .../0002-Backport-5.10-fixes.patch | 432 ++++++++++++++++++ >>> .../vboxguestdrivers_6.1.16.bb >>> <http://vboxguestdrivers_6.1.16.bb> | 2 + >>> 3 files changed, 563 insertions(+) >>> create mode 100644 >>> meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch >>> create mode 100644 >>> meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch >>> >>> diff --git >>> a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch >>> b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch >>> new file mode 100644 >>> index 0000000000..f1c4194633 >>> --- /dev/null >>> +++ >>> b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch >>> @@ -0,0 +1,129 @@ >>> +From d4df52c9442d44adfc492e8e1b682ab638f10c0c Mon Sep 17 00:00:00 2001 >>> +From: Khem Raj <raj.khem@gmail.com <mailto:raj.khem@gmail.com>> >>> +Date: Mon, 4 Jan 2021 19:52:10 -0800 >>> +Subject: [PATCH 1/2] support python 5.9 >>> >>> >>> Subject: [PATCH 1/2] support python 3.9 >>> >>> + >>> +Imported from >>> + >>> +https://github.com/archlinux/svntogit-community/commit/9276e06052e89615fe8bf3a30d04f5803ad2e539 >>> <https://github.com/archlinux/svntogit-community/commit/9276e06052e89615fe8bf3a30d04f5803ad2e539> >>> + >>> +Signed-off-by: Khem Raj <raj.khem@gmail.com >>> <mailto:raj.khem@gmail.com>> >>> +--- >>> + configure | 2 +- >>> + src/libs/xpcom18a4/python/Makefile.kmk | 48 ++++++++++++++++++- >>> + src/libs/xpcom18a4/python/gen_python_deps.py | 2 +- >>> + .../xpcom18a4/python/src/module/_xpcom.cpp | 6 ++- >>> + 4 files changed, 54 insertions(+), 4 deletions(-) >>> + >>> +diff --git a/configure b/configure >>> +index 55390478..50f53434 100755 >>> +--- a/configure >>> ++++ b/configure >>> +@@ -2028,7 +2028,7 @@ extern "C" int main(void) >>> + } >>> + EOF >>> + found= >>> +- SUPPYTHONLIBS="python2.7 python2.6 python3.1 python3.2 python3.3 >>> python3.4 python3.4m python3.5 python3.5m python3.6 python3.6m >>> python3.7 python3.7m python3.8 python3.8m" >>> ++ SUPPYTHONLIBS="python2.7 python2.6 python3.1 python3.2 python3.3 >>> python3.4 python3.4m python3.5 python3.5m python3.6 python3.6m >>> python3.7 python3.7m python3.8 python3.8m python3.9 python3.9m" >>> + for p in $PYTHONDIR; do >>> + for d in $SUPPYTHONLIBS; do >>> + for b in lib/x86_64-linux-gnu lib/i386-linux-gnu lib64 >>> lib/64 lib; do >>> +diff --git a/src/libs/xpcom18a4/python/Makefile.kmk >>> b/src/libs/xpcom18a4/python/Makefile.kmk >>> +index f854ea84..afc3d6b3 100644 >>> +--- a/src/libs/xpcom18a4/python/Makefile.kmk >>> ++++ b/src/libs/xpcom18a4/python/Makefile.kmk >>> +@@ -26,7 +26,7 @@ endif >>> + >>> + # >>> + # List of supported Python versions, defining a number of >>> +-# >>> VBOX_PYTHON[26|27|31|32|32M|33|33M|34|34M|35|35M|36|36M|37|37M|38|38M|DEF]_[INC|LIB] >>> variables >>> ++# >>> VBOX_PYTHON[26|27|31|32|32M|33|33M|34|34M|35|35M|36|36M|37|37M|38|38M|39|39M|DEF]_[INC|LIB] >>> variables >>> + # which get picked up below. >>> + # >>> + ifeq ($(KBUILD_TARGET),darwin) # Relatively predictable, don't script. >>> +@@ -533,6 +533,52 @@ VBoxPython3_8m_x86_LIBS = >>> $(VBOX_PYTHON38M_LIB_X86) >>> + endif >>> + endif >>> + >>> ++ifdef VBOX_PYTHON39_INC >>> ++# >>> ++# Python 3.9 version >>> ++# >>> ++DLLS += VBoxPython3_9 >>> ++VBoxPython3_9_EXTENDS = VBoxPythonBase >>> ++VBoxPython3_9_EXTENDS_BY = appending >>> ++VBoxPython3_9_TEMPLATE = XPCOM >>> ++VBoxPython3_9_INCS = $(VBOX_PYTHON39_INC) >>> ++VBoxPython3_9_LIBS = $(VBOX_PYTHON39_LIB) >>> ++ >>> ++ ifdef VBOX_WITH_32_ON_64_MAIN_API >>> ++ ifdef VBOX_PYTHON39_LIB_X86 >>> ++DLLS += VBoxPython3_9_x86 >>> ++VBoxPython3_9_x86_EXTENDS = VBoxPythonBase_x86 >>> ++VBoxPython3_9_x86_EXTENDS_BY = appending >>> ++VBoxPython3_9_x86_TEMPLATE = XPCOM >>> ++VBoxPython3_9_x86_INCS = $(VBOX_PYTHON39_INC) >>> ++VBoxPython3_9_x86_LIBS = $(VBOX_PYTHON39_LIB_X86) >>> ++ endif >>> ++ endif >>> ++endif >>> ++ >>> ++ifdef VBOX_PYTHON39M_INC >>> ++# >>> ++# Python 3.9 version with pymalloc >>> ++# >>> ++DLLS += VBoxPython3_9m >>> ++VBoxPython3_9m_EXTENDS = VBoxPythonBase_m >>> ++VBoxPython3_9m_EXTENDS_BY = appending >>> ++VBoxPython3_9m_TEMPLATE = XPCOM >>> ++VBoxPython3_9m_INCS = $(VBOX_PYTHON39M_INC) >>> ++VBoxPython3_9m_LIBS = $(VBOX_PYTHON39M_LIB) >>> ++ >>> ++ ifdef VBOX_WITH_32_ON_64_MAIN_API >>> ++ ifdef VBOX_PYTHON39M_LIB_X86 >>> ++DLLS += VBoxPython3_9m_x86 >>> ++VBoxPython3_9m_x86_EXTENDS = VBoxPythonBase_x86_m >>> ++VBoxPython3_9m_x86_EXTENDS_BY = appending >>> ++VBoxPython3_9m_x86_TEMPLATE_ = XPCOM >>> ++VBoxPython3_9m_x86_INCS = $(VBOX_PYTHON39M_INC) >>> ++VBoxPython3_9m_x86_LIBS = $(VBOX_PYTHON39M_LIB_X86) >>> ++ endif >>> ++ endif >>> ++endif >>> ++ >>> + ifdef VBOX_PYTHONDEF_INC >>> + # >>> + # Python without versioning >>> +diff --git a/src/libs/xpcom18a4/python/gen_python_deps.py >>> b/src/libs/xpcom18a4/python/gen_python_deps.py >>> +index 848dddf3..b116313a 100755 >>> +--- a/src/libs/xpcom18a4/python/gen_python_deps.py >>> ++++ b/src/libs/xpcom18a4/python/gen_python_deps.py >>> +@@ -16,7 +16,7 @@ from __future__ import print_function >>> + import os,sys >>> + from distutils.version import StrictVersion >>> + >>> +-versions = ["2.6", "2.7", "3.1", "3.2", "3.2m", "3.3", "3.3m", >>> "3.4", "3.4m", "3.5", "3.5m", "3.6", "3.6m", "3.7", "3.7m", "3.8", >>> "3.8m" ] >>> ++versions = ["2.6", "2.7", "3.1", "3.2", "3.2m", "3.3", "3.3m", >>> "3.4", "3.4m", "3.5", "3.5m", "3.6", "3.6m", "3.7", "3.7m", "3.8", >>> "3.8m", "3.9", "3.9m" ] >>> + prefixes = ["/usr", "/usr/local", "/opt", "/opt/local"] >>> + known = {} >>> + >>> +diff --git a/src/libs/xpcom18a4/python/src/module/_xpcom.cpp >>> b/src/libs/xpcom18a4/python/src/module/_xpcom.cpp >>> +index d35eb607..93ce03fd 100644 >>> +--- a/src/libs/xpcom18a4/python/src/module/_xpcom.cpp >>> ++++ b/src/libs/xpcom18a4/python/src/module/_xpcom.cpp >>> +@@ -84,7 +84,11 @@ extern PYXPCOM_EXPORT void >>> PyXPCOM_InterpreterState_Ensure(); >>> + # define MANGLE_MODULE_INIT(a_Name) RT_CONCAT(a_Name, >>> MODULE_NAME_SUFFIX) >>> + # endif >>> + # ifdef VBOX_PYXPCOM_VERSIONED >>> +-# if PY_VERSION_HEX >= 0x03080000 && PY_VERSION_HEX < 0x03090000 >>> ++# if PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x03100000 >>> ++# define MODULE_NAME MANGLE_MODULE_NAME("VBoxPython3_9") >>> ++# define initVBoxPython MANGLE_MODULE_INIT(PyInit_VBoxPython3_9) >>> ++ >>> ++# elif PY_VERSION_HEX >= 0x03080000 && PY_VERSION_HEX < 0x03090000 >>> + # define MODULE_NAME MANGLE_MODULE_NAME("VBoxPython3_8") >>> + # define initVBoxPython MANGLE_MODULE_INIT(PyInit_VBoxPython3_8) >>> + >>> +-- >>> +2.30.0 >>> + >>> diff --git >>> a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch >>> b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch >>> new file mode 100644 >>> index 0000000000..f277ced902 >>> --- /dev/null >>> +++ >>> b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch >>> @@ -0,0 +1,432 @@ >>> +From ac018c7fe2215aab028615b2823cc8fba97cf8c2 Mon Sep 17 00:00:00 2001 >>> +From: Khem Raj <raj.khem@gmail.com <mailto:raj.khem@gmail.com>> >>> +Date: Mon, 4 Jan 2021 19:54:52 -0800 >>> +Subject: [PATCH 2/2] Backport 5.10 fixes >>> + >>> +Imported from >>> +https://raw.githubusercontent.com/archlinux/svntogit-community/packages/virtualbox/trunk/020-linux-5-10.patch >>> <https://raw.githubusercontent.com/archlinux/svntogit-community/packages/virtualbox/trunk/020-linux-5-10.patch> >>> + >>> +Signed-off-by: Khem Raj <raj.khem@gmail.com >>> <mailto:raj.khem@gmail.com>> >>> +--- >>> + 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 +++++++++++++++++-- >>> + .../Additions/linux/sharedfolders/regops.c | 5 +- >>> + .../Runtime/r0drv/linux/memobj-r0drv-linux.c | 61 +++++++++++- >>> + 6 files changed, 163 insertions(+), 16 deletions(-) >>> + >>> +diff --git a/src/VBox/Additions/linux/drm/vbox_drv.h >>> b/src/VBox/Additions/linux/drm/vbox_drv.h >>> +index c680f3b4..d21d023c 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 811d0040..44b1ef52 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 1e2691fd..52fd10fd 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 4e990843..ee2da4aa 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; >>> +diff --git a/src/VBox/Additions/linux/sharedfolders/regops.c >>> b/src/VBox/Additions/linux/sharedfolders/regops.c >>> +index 3ad9c566..ec298a1b 100644 >>> +--- a/src/VBox/Additions/linux/sharedfolders/regops.c >>> ++++ b/src/VBox/Additions/linux/sharedfolders/regops.c >>> +@@ -1401,7 +1401,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 >>> +diff --git a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c >>> b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c >>> +index c771c1ba..a34eb149 100644 >>> +--- a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c >>> ++++ b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c >>> +@@ -56,9 +56,12 @@ >>> + * 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 >>> ++#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 +505,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; >>> ++ uint32_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 +623,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 +1895,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.30.0 >>> + >>> diff --git >>> a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb <http://vboxguestdrivers_6.1.16.bb> >>> b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb <http://vboxguestdrivers_6.1.16.bb> >>> index 9282f663b4..fef7ffa954 100644 >>> --- >>> a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb <http://vboxguestdrivers_6.1.16.bb> >>> +++ >>> b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb <http://vboxguestdrivers_6.1.16.bb> >>> @@ -13,6 +13,8 @@ VBOX_NAME = "VirtualBox-${PV}" >>> >>> SRC_URI = >>> "http://download.virtualbox.org/virtualbox/${PV}/${VBOX_NAME}.tar.bz2 <http://download.virtualbox.org/virtualbox/$%7BPV%7D/$%7BVBOX_NAME%7D.tar.bz2> >>> \ >>> file://Makefile.utils \ >>> + file://0001-support-python-5.9.patch \ >>> >>> >>> file://0001-support-python-3.9.patch >>> >>> + file://0002-Backport-5.10-fixes.patch \ >>> " >>> SRC_URI[md5sum] = "a12a647f6c114f2cb1571089b36841fe" >>> SRC_URI[sha256sum] = >>> "49c1990da16d8a3d5bda8cdb961ec8195a901e67e4c79aea44c1521a5fc2f9f1" >>> -- >>> 2.30.0 >>> >>> >>> >>> >>> >>> >>> -- >>> best regards, >>> José Quaresma >> >> >> > > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [oe] [meta-oe][PATCH] vboxguestdrivers: Fix build with kernel 5.10 2021-01-05 17:22 ` Khem Raj @ 2021-01-06 5:30 ` Khem Raj 2021-01-06 13:41 ` Bruce Ashfield 0 siblings, 1 reply; 7+ messages in thread From: Khem Raj @ 2021-01-06 5:30 UTC (permalink / raw) To: Bruce Ashfield; +Cc: Jose Quaresma, openembeded-devel I have altered your patch a little which makes 32bit builds happy too http://sprunge.us/jqxsFO I think this should be ok for us to live with. On Tue, Jan 5, 2021 at 9:22 AM Khem Raj <raj.khem@gmail.com> wrote: > > > > On 1/5/21 9:12 AM, Bruce Ashfield wrote: > > On Tue, Jan 5, 2021 at 12:05 PM Khem Raj <raj.khem@gmail.com> wrote: > >> > >> > >> > >> On 1/5/21 2:50 AM, Jose Quaresma wrote: > >>> Hi, > >>> > >>> I think there are a typo in python version the patch mention 5.9 instead > >>> of 3.9 > >> > >> thanks I will fix it > > > > Ha! > > > > Sorry about the double send of the fix, I checked the list this > > morning and somehow managed to miss this! > > I think your patch looks better organized so I will pick this one. > > > > > Bruce > > > >> > >>> > >>> Khem Raj <raj.khem@gmail.com <mailto:raj.khem@gmail.com>> escreveu no > >>> dia terça, 5/01/2021 à(s) 04:04: > >>> > >>> Signed-off-by: Khem Raj <raj.khem@gmail.com <mailto:raj.khem@gmail.com>> > >>> --- > >>> .../0001-support-python-5.9.patch | 129 ++++++ > >>> > >>> > >>> .../0001-support-python-3.9.patch > >>> > >>> .../0002-Backport-5.10-fixes.patch | 432 ++++++++++++++++++ > >>> .../vboxguestdrivers_6.1.16.bb > >>> <http://vboxguestdrivers_6.1.16.bb> | 2 + > >>> 3 files changed, 563 insertions(+) > >>> create mode 100644 > >>> meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch > >>> create mode 100644 > >>> meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch > >>> > >>> diff --git > >>> a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch > >>> b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch > >>> new file mode 100644 > >>> index 0000000000..f1c4194633 > >>> --- /dev/null > >>> +++ > >>> b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch > >>> @@ -0,0 +1,129 @@ > >>> +From d4df52c9442d44adfc492e8e1b682ab638f10c0c Mon Sep 17 00:00:00 2001 > >>> +From: Khem Raj <raj.khem@gmail.com <mailto:raj.khem@gmail.com>> > >>> +Date: Mon, 4 Jan 2021 19:52:10 -0800 > >>> +Subject: [PATCH 1/2] support python 5.9 > >>> > >>> > >>> Subject: [PATCH 1/2] support python 3.9 > >>> > >>> + > >>> +Imported from > >>> + > >>> +https://github.com/archlinux/svntogit-community/commit/9276e06052e89615fe8bf3a30d04f5803ad2e539 > >>> <https://github.com/archlinux/svntogit-community/commit/9276e06052e89615fe8bf3a30d04f5803ad2e539> > >>> + > >>> +Signed-off-by: Khem Raj <raj.khem@gmail.com > >>> <mailto:raj.khem@gmail.com>> > >>> +--- > >>> + configure | 2 +- > >>> + src/libs/xpcom18a4/python/Makefile.kmk | 48 ++++++++++++++++++- > >>> + src/libs/xpcom18a4/python/gen_python_deps.py | 2 +- > >>> + .../xpcom18a4/python/src/module/_xpcom.cpp | 6 ++- > >>> + 4 files changed, 54 insertions(+), 4 deletions(-) > >>> + > >>> +diff --git a/configure b/configure > >>> +index 55390478..50f53434 100755 > >>> +--- a/configure > >>> ++++ b/configure > >>> +@@ -2028,7 +2028,7 @@ extern "C" int main(void) > >>> + } > >>> + EOF > >>> + found= > >>> +- SUPPYTHONLIBS="python2.7 python2.6 python3.1 python3.2 python3.3 > >>> python3.4 python3.4m python3.5 python3.5m python3.6 python3.6m > >>> python3.7 python3.7m python3.8 python3.8m" > >>> ++ SUPPYTHONLIBS="python2.7 python2.6 python3.1 python3.2 python3.3 > >>> python3.4 python3.4m python3.5 python3.5m python3.6 python3.6m > >>> python3.7 python3.7m python3.8 python3.8m python3.9 python3.9m" > >>> + for p in $PYTHONDIR; do > >>> + for d in $SUPPYTHONLIBS; do > >>> + for b in lib/x86_64-linux-gnu lib/i386-linux-gnu lib64 > >>> lib/64 lib; do > >>> +diff --git a/src/libs/xpcom18a4/python/Makefile.kmk > >>> b/src/libs/xpcom18a4/python/Makefile.kmk > >>> +index f854ea84..afc3d6b3 100644 > >>> +--- a/src/libs/xpcom18a4/python/Makefile.kmk > >>> ++++ b/src/libs/xpcom18a4/python/Makefile.kmk > >>> +@@ -26,7 +26,7 @@ endif > >>> + > >>> + # > >>> + # List of supported Python versions, defining a number of > >>> +-# > >>> VBOX_PYTHON[26|27|31|32|32M|33|33M|34|34M|35|35M|36|36M|37|37M|38|38M|DEF]_[INC|LIB] > >>> variables > >>> ++# > >>> VBOX_PYTHON[26|27|31|32|32M|33|33M|34|34M|35|35M|36|36M|37|37M|38|38M|39|39M|DEF]_[INC|LIB] > >>> variables > >>> + # which get picked up below. > >>> + # > >>> + ifeq ($(KBUILD_TARGET),darwin) # Relatively predictable, don't script. > >>> +@@ -533,6 +533,52 @@ VBoxPython3_8m_x86_LIBS = > >>> $(VBOX_PYTHON38M_LIB_X86) > >>> + endif > >>> + endif > >>> + > >>> ++ifdef VBOX_PYTHON39_INC > >>> ++# > >>> ++# Python 3.9 version > >>> ++# > >>> ++DLLS += VBoxPython3_9 > >>> ++VBoxPython3_9_EXTENDS = VBoxPythonBase > >>> ++VBoxPython3_9_EXTENDS_BY = appending > >>> ++VBoxPython3_9_TEMPLATE = XPCOM > >>> ++VBoxPython3_9_INCS = $(VBOX_PYTHON39_INC) > >>> ++VBoxPython3_9_LIBS = $(VBOX_PYTHON39_LIB) > >>> ++ > >>> ++ ifdef VBOX_WITH_32_ON_64_MAIN_API > >>> ++ ifdef VBOX_PYTHON39_LIB_X86 > >>> ++DLLS += VBoxPython3_9_x86 > >>> ++VBoxPython3_9_x86_EXTENDS = VBoxPythonBase_x86 > >>> ++VBoxPython3_9_x86_EXTENDS_BY = appending > >>> ++VBoxPython3_9_x86_TEMPLATE = XPCOM > >>> ++VBoxPython3_9_x86_INCS = $(VBOX_PYTHON39_INC) > >>> ++VBoxPython3_9_x86_LIBS = $(VBOX_PYTHON39_LIB_X86) > >>> ++ endif > >>> ++ endif > >>> ++endif > >>> ++ > >>> ++ifdef VBOX_PYTHON39M_INC > >>> ++# > >>> ++# Python 3.9 version with pymalloc > >>> ++# > >>> ++DLLS += VBoxPython3_9m > >>> ++VBoxPython3_9m_EXTENDS = VBoxPythonBase_m > >>> ++VBoxPython3_9m_EXTENDS_BY = appending > >>> ++VBoxPython3_9m_TEMPLATE = XPCOM > >>> ++VBoxPython3_9m_INCS = $(VBOX_PYTHON39M_INC) > >>> ++VBoxPython3_9m_LIBS = $(VBOX_PYTHON39M_LIB) > >>> ++ > >>> ++ ifdef VBOX_WITH_32_ON_64_MAIN_API > >>> ++ ifdef VBOX_PYTHON39M_LIB_X86 > >>> ++DLLS += VBoxPython3_9m_x86 > >>> ++VBoxPython3_9m_x86_EXTENDS = VBoxPythonBase_x86_m > >>> ++VBoxPython3_9m_x86_EXTENDS_BY = appending > >>> ++VBoxPython3_9m_x86_TEMPLATE_ = XPCOM > >>> ++VBoxPython3_9m_x86_INCS = $(VBOX_PYTHON39M_INC) > >>> ++VBoxPython3_9m_x86_LIBS = $(VBOX_PYTHON39M_LIB_X86) > >>> ++ endif > >>> ++ endif > >>> ++endif > >>> ++ > >>> + ifdef VBOX_PYTHONDEF_INC > >>> + # > >>> + # Python without versioning > >>> +diff --git a/src/libs/xpcom18a4/python/gen_python_deps.py > >>> b/src/libs/xpcom18a4/python/gen_python_deps.py > >>> +index 848dddf3..b116313a 100755 > >>> +--- a/src/libs/xpcom18a4/python/gen_python_deps.py > >>> ++++ b/src/libs/xpcom18a4/python/gen_python_deps.py > >>> +@@ -16,7 +16,7 @@ from __future__ import print_function > >>> + import os,sys > >>> + from distutils.version import StrictVersion > >>> + > >>> +-versions = ["2.6", "2.7", "3.1", "3.2", "3.2m", "3.3", "3.3m", > >>> "3.4", "3.4m", "3.5", "3.5m", "3.6", "3.6m", "3.7", "3.7m", "3.8", > >>> "3.8m" ] > >>> ++versions = ["2.6", "2.7", "3.1", "3.2", "3.2m", "3.3", "3.3m", > >>> "3.4", "3.4m", "3.5", "3.5m", "3.6", "3.6m", "3.7", "3.7m", "3.8", > >>> "3.8m", "3.9", "3.9m" ] > >>> + prefixes = ["/usr", "/usr/local", "/opt", "/opt/local"] > >>> + known = {} > >>> + > >>> +diff --git a/src/libs/xpcom18a4/python/src/module/_xpcom.cpp > >>> b/src/libs/xpcom18a4/python/src/module/_xpcom.cpp > >>> +index d35eb607..93ce03fd 100644 > >>> +--- a/src/libs/xpcom18a4/python/src/module/_xpcom.cpp > >>> ++++ b/src/libs/xpcom18a4/python/src/module/_xpcom.cpp > >>> +@@ -84,7 +84,11 @@ extern PYXPCOM_EXPORT void > >>> PyXPCOM_InterpreterState_Ensure(); > >>> + # define MANGLE_MODULE_INIT(a_Name) RT_CONCAT(a_Name, > >>> MODULE_NAME_SUFFIX) > >>> + # endif > >>> + # ifdef VBOX_PYXPCOM_VERSIONED > >>> +-# if PY_VERSION_HEX >= 0x03080000 && PY_VERSION_HEX < 0x03090000 > >>> ++# if PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x03100000 > >>> ++# define MODULE_NAME MANGLE_MODULE_NAME("VBoxPython3_9") > >>> ++# define initVBoxPython MANGLE_MODULE_INIT(PyInit_VBoxPython3_9) > >>> ++ > >>> ++# elif PY_VERSION_HEX >= 0x03080000 && PY_VERSION_HEX < 0x03090000 > >>> + # define MODULE_NAME MANGLE_MODULE_NAME("VBoxPython3_8") > >>> + # define initVBoxPython MANGLE_MODULE_INIT(PyInit_VBoxPython3_8) > >>> + > >>> +-- > >>> +2.30.0 > >>> + > >>> diff --git > >>> a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch > >>> b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch > >>> new file mode 100644 > >>> index 0000000000..f277ced902 > >>> --- /dev/null > >>> +++ > >>> b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch > >>> @@ -0,0 +1,432 @@ > >>> +From ac018c7fe2215aab028615b2823cc8fba97cf8c2 Mon Sep 17 00:00:00 2001 > >>> +From: Khem Raj <raj.khem@gmail.com <mailto:raj.khem@gmail.com>> > >>> +Date: Mon, 4 Jan 2021 19:54:52 -0800 > >>> +Subject: [PATCH 2/2] Backport 5.10 fixes > >>> + > >>> +Imported from > >>> +https://raw.githubusercontent.com/archlinux/svntogit-community/packages/virtualbox/trunk/020-linux-5-10.patch > >>> <https://raw.githubusercontent.com/archlinux/svntogit-community/packages/virtualbox/trunk/020-linux-5-10.patch> > >>> + > >>> +Signed-off-by: Khem Raj <raj.khem@gmail.com > >>> <mailto:raj.khem@gmail.com>> > >>> +--- > >>> + 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 +++++++++++++++++-- > >>> + .../Additions/linux/sharedfolders/regops.c | 5 +- > >>> + .../Runtime/r0drv/linux/memobj-r0drv-linux.c | 61 +++++++++++- > >>> + 6 files changed, 163 insertions(+), 16 deletions(-) > >>> + > >>> +diff --git a/src/VBox/Additions/linux/drm/vbox_drv.h > >>> b/src/VBox/Additions/linux/drm/vbox_drv.h > >>> +index c680f3b4..d21d023c 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 811d0040..44b1ef52 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 1e2691fd..52fd10fd 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 4e990843..ee2da4aa 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; > >>> +diff --git a/src/VBox/Additions/linux/sharedfolders/regops.c > >>> b/src/VBox/Additions/linux/sharedfolders/regops.c > >>> +index 3ad9c566..ec298a1b 100644 > >>> +--- a/src/VBox/Additions/linux/sharedfolders/regops.c > >>> ++++ b/src/VBox/Additions/linux/sharedfolders/regops.c > >>> +@@ -1401,7 +1401,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 > >>> +diff --git a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > >>> b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > >>> +index c771c1ba..a34eb149 100644 > >>> +--- a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > >>> ++++ b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > >>> +@@ -56,9 +56,12 @@ > >>> + * 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 > >>> ++#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 +505,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; > >>> ++ uint32_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 +623,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 +1895,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.30.0 > >>> + > >>> diff --git > >>> a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb <http://vboxguestdrivers_6.1.16.bb> > >>> b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb <http://vboxguestdrivers_6.1.16.bb> > >>> index 9282f663b4..fef7ffa954 100644 > >>> --- > >>> a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb <http://vboxguestdrivers_6.1.16.bb> > >>> +++ > >>> b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb <http://vboxguestdrivers_6.1.16.bb> > >>> @@ -13,6 +13,8 @@ VBOX_NAME = "VirtualBox-${PV}" > >>> > >>> SRC_URI = > >>> "http://download.virtualbox.org/virtualbox/${PV}/${VBOX_NAME}.tar.bz2 <http://download.virtualbox.org/virtualbox/$%7BPV%7D/$%7BVBOX_NAME%7D.tar.bz2> > >>> \ > >>> file://Makefile.utils \ > >>> + file://0001-support-python-5.9.patch \ > >>> > >>> > >>> file://0001-support-python-3.9.patch > >>> > >>> + file://0002-Backport-5.10-fixes.patch \ > >>> " > >>> SRC_URI[md5sum] = "a12a647f6c114f2cb1571089b36841fe" > >>> SRC_URI[sha256sum] = > >>> "49c1990da16d8a3d5bda8cdb961ec8195a901e67e4c79aea44c1521a5fc2f9f1" > >>> -- > >>> 2.30.0 > >>> > >>> > >>> > >>> > >>> > >>> > >>> -- > >>> best regards, > >>> José Quaresma > >> > >> > >> > > > > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [oe] [meta-oe][PATCH] vboxguestdrivers: Fix build with kernel 5.10 2021-01-06 5:30 ` Khem Raj @ 2021-01-06 13:41 ` Bruce Ashfield 0 siblings, 0 replies; 7+ messages in thread From: Bruce Ashfield @ 2021-01-06 13:41 UTC (permalink / raw) To: Khem Raj; +Cc: Jose Quaresma, openembeded-devel On Wed, Jan 6, 2021 at 12:30 AM Khem Raj <raj.khem@gmail.com> wrote: > > I have altered your patch a little which makes 32bit builds happy too > > http://sprunge.us/jqxsFO > > I think this should be ok for us to live with. Yup. No concerns here. Bruce > > On Tue, Jan 5, 2021 at 9:22 AM Khem Raj <raj.khem@gmail.com> wrote: > > > > > > > > On 1/5/21 9:12 AM, Bruce Ashfield wrote: > > > On Tue, Jan 5, 2021 at 12:05 PM Khem Raj <raj.khem@gmail.com> wrote: > > >> > > >> > > >> > > >> On 1/5/21 2:50 AM, Jose Quaresma wrote: > > >>> Hi, > > >>> > > >>> I think there are a typo in python version the patch mention 5.9 instead > > >>> of 3.9 > > >> > > >> thanks I will fix it > > > > > > Ha! > > > > > > Sorry about the double send of the fix, I checked the list this > > > morning and somehow managed to miss this! > > > > I think your patch looks better organized so I will pick this one. > > > > > > > > Bruce > > > > > >> > > >>> > > >>> Khem Raj <raj.khem@gmail.com <mailto:raj.khem@gmail.com>> escreveu no > > >>> dia terça, 5/01/2021 à(s) 04:04: > > >>> > > >>> Signed-off-by: Khem Raj <raj.khem@gmail.com <mailto:raj.khem@gmail.com>> > > >>> --- > > >>> .../0001-support-python-5.9.patch | 129 ++++++ > > >>> > > >>> > > >>> .../0001-support-python-3.9.patch > > >>> > > >>> .../0002-Backport-5.10-fixes.patch | 432 ++++++++++++++++++ > > >>> .../vboxguestdrivers_6.1.16.bb > > >>> <http://vboxguestdrivers_6.1.16.bb> | 2 + > > >>> 3 files changed, 563 insertions(+) > > >>> create mode 100644 > > >>> meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch > > >>> create mode 100644 > > >>> meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch > > >>> > > >>> diff --git > > >>> a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch > > >>> b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch > > >>> new file mode 100644 > > >>> index 0000000000..f1c4194633 > > >>> --- /dev/null > > >>> +++ > > >>> b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-support-python-5.9.patch > > >>> @@ -0,0 +1,129 @@ > > >>> +From d4df52c9442d44adfc492e8e1b682ab638f10c0c Mon Sep 17 00:00:00 2001 > > >>> +From: Khem Raj <raj.khem@gmail.com <mailto:raj.khem@gmail.com>> > > >>> +Date: Mon, 4 Jan 2021 19:52:10 -0800 > > >>> +Subject: [PATCH 1/2] support python 5.9 > > >>> > > >>> > > >>> Subject: [PATCH 1/2] support python 3.9 > > >>> > > >>> + > > >>> +Imported from > > >>> + > > >>> +https://github.com/archlinux/svntogit-community/commit/9276e06052e89615fe8bf3a30d04f5803ad2e539 > > >>> <https://github.com/archlinux/svntogit-community/commit/9276e06052e89615fe8bf3a30d04f5803ad2e539> > > >>> + > > >>> +Signed-off-by: Khem Raj <raj.khem@gmail.com > > >>> <mailto:raj.khem@gmail.com>> > > >>> +--- > > >>> + configure | 2 +- > > >>> + src/libs/xpcom18a4/python/Makefile.kmk | 48 ++++++++++++++++++- > > >>> + src/libs/xpcom18a4/python/gen_python_deps.py | 2 +- > > >>> + .../xpcom18a4/python/src/module/_xpcom.cpp | 6 ++- > > >>> + 4 files changed, 54 insertions(+), 4 deletions(-) > > >>> + > > >>> +diff --git a/configure b/configure > > >>> +index 55390478..50f53434 100755 > > >>> +--- a/configure > > >>> ++++ b/configure > > >>> +@@ -2028,7 +2028,7 @@ extern "C" int main(void) > > >>> + } > > >>> + EOF > > >>> + found= > > >>> +- SUPPYTHONLIBS="python2.7 python2.6 python3.1 python3.2 python3.3 > > >>> python3.4 python3.4m python3.5 python3.5m python3.6 python3.6m > > >>> python3.7 python3.7m python3.8 python3.8m" > > >>> ++ SUPPYTHONLIBS="python2.7 python2.6 python3.1 python3.2 python3.3 > > >>> python3.4 python3.4m python3.5 python3.5m python3.6 python3.6m > > >>> python3.7 python3.7m python3.8 python3.8m python3.9 python3.9m" > > >>> + for p in $PYTHONDIR; do > > >>> + for d in $SUPPYTHONLIBS; do > > >>> + for b in lib/x86_64-linux-gnu lib/i386-linux-gnu lib64 > > >>> lib/64 lib; do > > >>> +diff --git a/src/libs/xpcom18a4/python/Makefile.kmk > > >>> b/src/libs/xpcom18a4/python/Makefile.kmk > > >>> +index f854ea84..afc3d6b3 100644 > > >>> +--- a/src/libs/xpcom18a4/python/Makefile.kmk > > >>> ++++ b/src/libs/xpcom18a4/python/Makefile.kmk > > >>> +@@ -26,7 +26,7 @@ endif > > >>> + > > >>> + # > > >>> + # List of supported Python versions, defining a number of > > >>> +-# > > >>> VBOX_PYTHON[26|27|31|32|32M|33|33M|34|34M|35|35M|36|36M|37|37M|38|38M|DEF]_[INC|LIB] > > >>> variables > > >>> ++# > > >>> VBOX_PYTHON[26|27|31|32|32M|33|33M|34|34M|35|35M|36|36M|37|37M|38|38M|39|39M|DEF]_[INC|LIB] > > >>> variables > > >>> + # which get picked up below. > > >>> + # > > >>> + ifeq ($(KBUILD_TARGET),darwin) # Relatively predictable, don't script. > > >>> +@@ -533,6 +533,52 @@ VBoxPython3_8m_x86_LIBS = > > >>> $(VBOX_PYTHON38M_LIB_X86) > > >>> + endif > > >>> + endif > > >>> + > > >>> ++ifdef VBOX_PYTHON39_INC > > >>> ++# > > >>> ++# Python 3.9 version > > >>> ++# > > >>> ++DLLS += VBoxPython3_9 > > >>> ++VBoxPython3_9_EXTENDS = VBoxPythonBase > > >>> ++VBoxPython3_9_EXTENDS_BY = appending > > >>> ++VBoxPython3_9_TEMPLATE = XPCOM > > >>> ++VBoxPython3_9_INCS = $(VBOX_PYTHON39_INC) > > >>> ++VBoxPython3_9_LIBS = $(VBOX_PYTHON39_LIB) > > >>> ++ > > >>> ++ ifdef VBOX_WITH_32_ON_64_MAIN_API > > >>> ++ ifdef VBOX_PYTHON39_LIB_X86 > > >>> ++DLLS += VBoxPython3_9_x86 > > >>> ++VBoxPython3_9_x86_EXTENDS = VBoxPythonBase_x86 > > >>> ++VBoxPython3_9_x86_EXTENDS_BY = appending > > >>> ++VBoxPython3_9_x86_TEMPLATE = XPCOM > > >>> ++VBoxPython3_9_x86_INCS = $(VBOX_PYTHON39_INC) > > >>> ++VBoxPython3_9_x86_LIBS = $(VBOX_PYTHON39_LIB_X86) > > >>> ++ endif > > >>> ++ endif > > >>> ++endif > > >>> ++ > > >>> ++ifdef VBOX_PYTHON39M_INC > > >>> ++# > > >>> ++# Python 3.9 version with pymalloc > > >>> ++# > > >>> ++DLLS += VBoxPython3_9m > > >>> ++VBoxPython3_9m_EXTENDS = VBoxPythonBase_m > > >>> ++VBoxPython3_9m_EXTENDS_BY = appending > > >>> ++VBoxPython3_9m_TEMPLATE = XPCOM > > >>> ++VBoxPython3_9m_INCS = $(VBOX_PYTHON39M_INC) > > >>> ++VBoxPython3_9m_LIBS = $(VBOX_PYTHON39M_LIB) > > >>> ++ > > >>> ++ ifdef VBOX_WITH_32_ON_64_MAIN_API > > >>> ++ ifdef VBOX_PYTHON39M_LIB_X86 > > >>> ++DLLS += VBoxPython3_9m_x86 > > >>> ++VBoxPython3_9m_x86_EXTENDS = VBoxPythonBase_x86_m > > >>> ++VBoxPython3_9m_x86_EXTENDS_BY = appending > > >>> ++VBoxPython3_9m_x86_TEMPLATE_ = XPCOM > > >>> ++VBoxPython3_9m_x86_INCS = $(VBOX_PYTHON39M_INC) > > >>> ++VBoxPython3_9m_x86_LIBS = $(VBOX_PYTHON39M_LIB_X86) > > >>> ++ endif > > >>> ++ endif > > >>> ++endif > > >>> ++ > > >>> + ifdef VBOX_PYTHONDEF_INC > > >>> + # > > >>> + # Python without versioning > > >>> +diff --git a/src/libs/xpcom18a4/python/gen_python_deps.py > > >>> b/src/libs/xpcom18a4/python/gen_python_deps.py > > >>> +index 848dddf3..b116313a 100755 > > >>> +--- a/src/libs/xpcom18a4/python/gen_python_deps.py > > >>> ++++ b/src/libs/xpcom18a4/python/gen_python_deps.py > > >>> +@@ -16,7 +16,7 @@ from __future__ import print_function > > >>> + import os,sys > > >>> + from distutils.version import StrictVersion > > >>> + > > >>> +-versions = ["2.6", "2.7", "3.1", "3.2", "3.2m", "3.3", "3.3m", > > >>> "3.4", "3.4m", "3.5", "3.5m", "3.6", "3.6m", "3.7", "3.7m", "3.8", > > >>> "3.8m" ] > > >>> ++versions = ["2.6", "2.7", "3.1", "3.2", "3.2m", "3.3", "3.3m", > > >>> "3.4", "3.4m", "3.5", "3.5m", "3.6", "3.6m", "3.7", "3.7m", "3.8", > > >>> "3.8m", "3.9", "3.9m" ] > > >>> + prefixes = ["/usr", "/usr/local", "/opt", "/opt/local"] > > >>> + known = {} > > >>> + > > >>> +diff --git a/src/libs/xpcom18a4/python/src/module/_xpcom.cpp > > >>> b/src/libs/xpcom18a4/python/src/module/_xpcom.cpp > > >>> +index d35eb607..93ce03fd 100644 > > >>> +--- a/src/libs/xpcom18a4/python/src/module/_xpcom.cpp > > >>> ++++ b/src/libs/xpcom18a4/python/src/module/_xpcom.cpp > > >>> +@@ -84,7 +84,11 @@ extern PYXPCOM_EXPORT void > > >>> PyXPCOM_InterpreterState_Ensure(); > > >>> + # define MANGLE_MODULE_INIT(a_Name) RT_CONCAT(a_Name, > > >>> MODULE_NAME_SUFFIX) > > >>> + # endif > > >>> + # ifdef VBOX_PYXPCOM_VERSIONED > > >>> +-# if PY_VERSION_HEX >= 0x03080000 && PY_VERSION_HEX < 0x03090000 > > >>> ++# if PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x03100000 > > >>> ++# define MODULE_NAME MANGLE_MODULE_NAME("VBoxPython3_9") > > >>> ++# define initVBoxPython MANGLE_MODULE_INIT(PyInit_VBoxPython3_9) > > >>> ++ > > >>> ++# elif PY_VERSION_HEX >= 0x03080000 && PY_VERSION_HEX < 0x03090000 > > >>> + # define MODULE_NAME MANGLE_MODULE_NAME("VBoxPython3_8") > > >>> + # define initVBoxPython MANGLE_MODULE_INIT(PyInit_VBoxPython3_8) > > >>> + > > >>> +-- > > >>> +2.30.0 > > >>> + > > >>> diff --git > > >>> a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch > > >>> b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch > > >>> new file mode 100644 > > >>> index 0000000000..f277ced902 > > >>> --- /dev/null > > >>> +++ > > >>> b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-Backport-5.10-fixes.patch > > >>> @@ -0,0 +1,432 @@ > > >>> +From ac018c7fe2215aab028615b2823cc8fba97cf8c2 Mon Sep 17 00:00:00 2001 > > >>> +From: Khem Raj <raj.khem@gmail.com <mailto:raj.khem@gmail.com>> > > >>> +Date: Mon, 4 Jan 2021 19:54:52 -0800 > > >>> +Subject: [PATCH 2/2] Backport 5.10 fixes > > >>> + > > >>> +Imported from > > >>> +https://raw.githubusercontent.com/archlinux/svntogit-community/packages/virtualbox/trunk/020-linux-5-10.patch > > >>> <https://raw.githubusercontent.com/archlinux/svntogit-community/packages/virtualbox/trunk/020-linux-5-10.patch> > > >>> + > > >>> +Signed-off-by: Khem Raj <raj.khem@gmail.com > > >>> <mailto:raj.khem@gmail.com>> > > >>> +--- > > >>> + 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 +++++++++++++++++-- > > >>> + .../Additions/linux/sharedfolders/regops.c | 5 +- > > >>> + .../Runtime/r0drv/linux/memobj-r0drv-linux.c | 61 +++++++++++- > > >>> + 6 files changed, 163 insertions(+), 16 deletions(-) > > >>> + > > >>> +diff --git a/src/VBox/Additions/linux/drm/vbox_drv.h > > >>> b/src/VBox/Additions/linux/drm/vbox_drv.h > > >>> +index c680f3b4..d21d023c 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 811d0040..44b1ef52 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 1e2691fd..52fd10fd 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 4e990843..ee2da4aa 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; > > >>> +diff --git a/src/VBox/Additions/linux/sharedfolders/regops.c > > >>> b/src/VBox/Additions/linux/sharedfolders/regops.c > > >>> +index 3ad9c566..ec298a1b 100644 > > >>> +--- a/src/VBox/Additions/linux/sharedfolders/regops.c > > >>> ++++ b/src/VBox/Additions/linux/sharedfolders/regops.c > > >>> +@@ -1401,7 +1401,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 > > >>> +diff --git a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > > >>> b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > > >>> +index c771c1ba..a34eb149 100644 > > >>> +--- a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > > >>> ++++ b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c > > >>> +@@ -56,9 +56,12 @@ > > >>> + * 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 > > >>> ++#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 +505,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; > > >>> ++ uint32_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 +623,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 +1895,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.30.0 > > >>> + > > >>> diff --git > > >>> a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb <http://vboxguestdrivers_6.1.16.bb> > > >>> b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb <http://vboxguestdrivers_6.1.16.bb> > > >>> index 9282f663b4..fef7ffa954 100644 > > >>> --- > > >>> a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb <http://vboxguestdrivers_6.1.16.bb> > > >>> +++ > > >>> b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.16.bb <http://vboxguestdrivers_6.1.16.bb> > > >>> @@ -13,6 +13,8 @@ VBOX_NAME = "VirtualBox-${PV}" > > >>> > > >>> SRC_URI = > > >>> "http://download.virtualbox.org/virtualbox/${PV}/${VBOX_NAME}.tar.bz2 <http://download.virtualbox.org/virtualbox/$%7BPV%7D/$%7BVBOX_NAME%7D.tar.bz2> > > >>> \ > > >>> file://Makefile.utils \ > > >>> + file://0001-support-python-5.9.patch \ > > >>> > > >>> > > >>> file://0001-support-python-3.9.patch > > >>> > > >>> + file://0002-Backport-5.10-fixes.patch \ > > >>> " > > >>> SRC_URI[md5sum] = "a12a647f6c114f2cb1571089b36841fe" > > >>> SRC_URI[sha256sum] = > > >>> "49c1990da16d8a3d5bda8cdb961ec8195a901e67e4c79aea44c1521a5fc2f9f1" > > >>> -- > > >>> 2.30.0 > > >>> > > >>> > > >>> > > >>> > > >>> > > >>> > > >>> -- > > >>> best regards, > > >>> José Quaresma > > >> > > >> > > >> > > > > > > -- - Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end - "Use the force Harry" - Gandalf, Star Trek II ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2021-01-06 13:42 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-01-05 4:04 [meta-oe][PATCH] vboxguestdrivers: Fix build with kernel 5.10 Khem Raj 2021-01-05 10:50 ` [oe] " Jose Quaresma 2021-01-05 17:05 ` Khem Raj 2021-01-05 17:12 ` Bruce Ashfield 2021-01-05 17:22 ` Khem Raj 2021-01-06 5:30 ` Khem Raj 2021-01-06 13:41 ` Bruce Ashfield
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.