Date: Wednesday, January 20, 2021 @ 06:55:21 Author: eworm Revision: 823932
upgpkg: virtualbox 6.1.18-1: new upstream release Modified: virtualbox/trunk/PKGBUILD Deleted: virtualbox/trunk/020-linux-5-10.patch ----------------------+ 020-linux-5-10.patch | 440 ------------------------------------------------- PKGBUILD | 12 - 2 files changed, 5 insertions(+), 447 deletions(-) Deleted: 020-linux-5-10.patch =================================================================== --- 020-linux-5-10.patch 2021-01-20 06:35:23 UTC (rev 823931) +++ 020-linux-5-10.patch 2021-01-20 06:55:21 UTC (rev 823932) @@ -1,440 +0,0 @@ -From df0ee1389b64bdfd5afa91d6377f5dd2bd9dfc3b Mon Sep 17 00:00:00 2001 -From: Christian Hesse <m...@eworm.de> -Date: Tue, 15 Dec 2020 23:07:27 +0100 -Subject: [PATCH 1/3] linux-5.10-r0drv-memobj-fix-r0.patch ---- - .../Runtime/r0drv/linux/memobj-r0drv-linux.c | 61 ++++++++++++++++++- - 1 file changed, 60 insertions(+), 1 deletion(-) - -diff --git a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c -index 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); - -From 3735d45f5ac89f436b7024de5558f5db6aa332b8 Mon Sep 17 00:00:00 2001 -From: Christian Hesse <m...@eworm.de> -Date: Tue, 15 Dec 2020 23:09:24 +0100 -Subject: [PATCH 2/3] linux-5.10-address-space-fixes.patch ---- - src/VBox/Additions/linux/sharedfolders/regops.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -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 - -From f8b4225c8deaac3d7528e0d8433c8360f792b4cc Mon Sep 17 00:00:00 2001 -From: Christian Hesse <m...@eworm.de> -Date: Tue, 15 Dec 2020 23:12:38 +0100 -Subject: [PATCH 3/3] linux-5.10-framebuffer-fixes.patch ---- - src/VBox/Additions/linux/drm/vbox_drv.h | 10 ++- - src/VBox/Additions/linux/drm/vbox_fb.c | 2 +- - src/VBox/Additions/linux/drm/vbox_mode.c | 2 +- - src/VBox/Additions/linux/drm/vbox_ttm.c | 99 +++++++++++++++++++++--- - 4 files changed, 99 insertions(+), 14 deletions(-) - -diff --git a/src/VBox/Additions/linux/drm/vbox_drv.h b/src/VBox/Additions/linux/drm/vbox_drv.h -index 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; Modified: PKGBUILD =================================================================== --- PKGBUILD 2021-01-20 06:35:23 UTC (rev 823931) +++ PKGBUILD 2021-01-20 06:55:21 UTC (rev 823932) @@ -9,9 +9,9 @@ 'virtualbox-guest-utils' 'virtualbox-guest-utils-nox' 'virtualbox-ext-vnc') -pkgver=6.1.16 +pkgver=6.1.18 _tarver=${pkgver} -pkgrel=4 +pkgrel=1 _vboxsf_commit='5aba938bcabd978e4615186ad7d8617d633e6f30' arch=('x86_64') url='https://virtualbox.org/' @@ -79,9 +79,8 @@ '016-VBoxServiceAutoMount-Change-Linux-mount-code-to-use-.patch' '017-fix-narrowing-conversion.patch' '018-xclient.patch' - '019-python3.9.patch' - '020-linux-5-10.patch') -sha256sums=('49c1990da16d8a3d5bda8cdb961ec8195a901e67e4c79aea44c1521a5fc2f9f1' + '019-python3.9.patch') +sha256sums=('108d42b9b391b7a332a33df1662cf7b0e9d9a80f3079d16288d8b9487f427d40' 'SKIP' '76d98ea062fcad9e5e3fa981d046a6eb12a3e718a296544a68b66f4b65cb56db' 'c1ccfaa3a37d6b227cd65de944df2d68cbf178a857b6ab15c04b8fa05693f252' @@ -105,8 +104,7 @@ '100c9e14e9cfb12ae65364e830153d2481cf272ceeb39d11c6b203bc6e35bf0c' '5aac692909a0a0ec56b08bdece9e42cf7463abdca9da2f990d441ff463be6a99' 'cac5a573e9ed5aafb2f469c2e6fffb8cd4f389bbadba5a968c9f65be7a72fee3' - '039c7b520ae589bc52dc6c0e658f7ec28ca8defb12ccbc32ad9834361d23162c' - 'd0308e7dc4ec81274a41c79e13aa460360f63bf19cf31938e665685c5b276b9c') + '039c7b520ae589bc52dc6c0e658f7ec28ca8defb12ccbc32ad9834361d23162c') prepare() { cd "VirtualBox-$pkgver"