From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id D2025C433EF for ; Fri, 22 Oct 2021 19:56:07 +0000 (UTC) Received: from mail-ua1-f46.google.com (mail-ua1-f46.google.com [209.85.222.46]) by mx.groups.io with SMTP id smtpd.web08.2580.1634932566372134664 for ; Fri, 22 Oct 2021 12:56:06 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@gmail.com header.s=20210112 header.b=AfCDiwNO; spf=pass (domain: gmail.com, ip: 209.85.222.46, mailfrom: costamagna.gianfranco@gmail.com) Received: by mail-ua1-f46.google.com with SMTP id f4so9864274uad.4 for ; Fri, 22 Oct 2021 12:56:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=9NLYDoo0VawAugIkFRC/bnIdN2WvISey2KpDno1+HzM=; b=AfCDiwNOyaiuWfn+jjwL+r2p1wPXApyDcsrR6ca6A9+Kt36ciWcYScb26Z9nQJO5x2 WIg71bWQ5w6nQpkeYkdMsyBOQIlMJPbHg/RJ10SgiWGz4zu5hNF9Tul2o9UAKjL3t3af /UgAuMl6DDgIuAentQtMG/vLwUVH8QsREhm5Jo323vXMMfZMr3E/skrL6xnqTKTQ+MIP Q3dpD1Ah81U+vC6G7n14AqGEpzmlgUM+8kc0FmAMPJmasKMs0iU5hRt1uw7iDLJaAHx7 YDQbgFsuB19ZEO01yrFVONstMZeS4SUuv6GH7g35YbnGOzKL/HTFTGz0ewgGiFkYDRPr 7Azw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=9NLYDoo0VawAugIkFRC/bnIdN2WvISey2KpDno1+HzM=; b=AQbozd/zsvIMg07V5kOeW+yr+MXXPUKyOqkq2AGKJ6Kz1BVkj0UFW9V+oOG4uOMZWv 0rJYOSctjt8yu+0VUUNOBP7NPmN0IfOjClLgJeeBe/r+zvclLHLelpIIfIQ8HyK0jiqE ypoi6sjouyGbkW6OaPM0+d70gz4ItzlmchjoI3e/Npf1ZpYS7dGhH8a8NYVBBVi5yfLf xNgqd5fogUsy66flbu+fnzctGvC1Lb1n7UL84WVUC9gPWQW23Jr1Z6G6a4chrB2e5cnj bB1zz+xImcqEzS/gh6Ci5EA6KVNgsN8YRCI7KOgtD95vijzsZT84SQ4NzTuX4UlKBwXb 28+g== X-Gm-Message-State: AOAM531ZveUp8oUCB9zMFgWuP01eikQURfDnTlksJ8zV3YuDxmVi3S+B WWVkiRVM0+diF49fOnwWvVXYHgD+iZHiJmtgv3Y= X-Google-Smtp-Source: ABdhPJzhUWYwYX4F9YV5ujxMMsmTNpjVD0IulTBd6kh2N5yWiIaFvE4OFZE3W1+iEfp2595V4rx4V0/6ZU8fa6djGsA= X-Received: by 2002:ab0:4751:: with SMTP id i17mr2412922uac.86.1634932565211; Fri, 22 Oct 2021 12:56:05 -0700 (PDT) MIME-Version: 1.0 References: <20211020105613.164741-1-costamagnagianfranco@yahoo.it> In-Reply-To: From: Gianfranco Costamagna Date: Fri, 22 Oct 2021 21:55:53 +0200 Message-ID: Subject: Re: [oe] [meta-oe][PATCH] vboxguestdrivers: upgrade 6.1.26 -> 6.1.28 To: Bruce Ashfield Cc: Khem Raj , openembeded-devel , Gianfranco Costamagna , Gianfranco Costamagna Content-Type: multipart/alternative; boundary="000000000000c7fe4305cef66621" List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Fri, 22 Oct 2021 19:56:07 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-devel/message/93541 --000000000000c7fe4305cef66621 Content-Type: text/plain; charset="UTF-8" Hello Bruce you are right, the problem is not in the kernel module but into the vboxsf binary. I tweak our custom Makefile to accept one additional flag, and submitted a newer and better version --- a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/Makefile.utils +++ b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/Makefile.utils @@ -13,7 +13,7 @@ INCLUDES = -I. -I../vboxsf -I../vboxsf/include MOD_DEFS = -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 \ -DIN_SUP_R0 -DVBOX -DVBOX_WITH_HGCM -DIN_MODULE -DIN_GUEST_R0 -CFLAGS = ${INCLUDES} ${MOD_DEFS} +CFLAGS = ${INCLUDES} ${MOD_DEFS} ${EXTRA_CFLAGS} LDFLAGS = SRCS = mount.vboxsf.c \ diff --git a/meta-oe/recipes-support/vboxguestdrivers/ vboxguestdrivers_6.1.28.bb b/meta-oe/recipes-support/vboxguestdrivers/ vboxguestdrivers_6.1.28.bb index c7e73b222..0265e38f5 100644 --- a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.28.bb +++ b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.28.bb @@ -54,7 +54,7 @@ do_configure:prepend() { # compile and install mount utility do_compile() { oe_runmake all - oe_runmake 'LD=${CC}' 'LDFLAGS=${LDFLAGS}' -C ${S}/utils + oe_runmake 'LD=${CC}' 'EXTRA_CFLAGS=-I${STAGING_KERNEL_BUILDDIR}/include/' 'LDFLAGS=${LDFLAGS}' -C ${S}/utils if ! [ -e vboxguest.ko -a -e vboxsf.ko -a -e vboxvideo.ko ] ; then echo "ERROR: One of vbox*.ko modules wasn't built" exit 1 thanks Gianfranco Il giorno ven 22 ott 2021 alle ore 18:58 Bruce Ashfield < bruce.ashfield@gmail.com> ha scritto: > onto the > > On Fri, Oct 22, 2021 at 5:50 AM Gianfranco Costamagna > wrote: > > > > Hello, > > FYI I traced down the upstream change that introduced this regression: > > > https://www.virtualbox.org/changeset?reponame=vbox&new=91232%40trunk%2Finclude%2Fiprt%2Fstdarg.h&old=82968%40trunk%2Finclude%2Fiprt%2Fstdarg.h > > > > --- a/vboxsf/include/iprt/stdarg.h > > +++ b/vboxsf/include/iprt/stdarg.h > > @@ -43,13 +43,6 @@ > > # if __GNUC__ >= 4 /* System headers refers to __builtin_stdarg_start. > */ > > # define __builtin_stdarg_start __builtin_va_start > > # endif > > -# elif defined(RT_OS_LINUX) && defined(IN_RING0) > > -# include "linux/version.h" > > -# if RTLNX_VER_MIN(5,15,0) > > -# include > > -# else > > -# include > > -# endif > > # else > > # include > > # endif > > > > I did grep into the kernel source code and that files is already > included in lots of places and drivers. > > > > I honestly think that file should be ship into STAGING_KERNEL_DIR > instead of STAGING_KERNEL_BUILDDIR > > because other binaries will need it probably in the future. > > But this change needs to be done in poky, not meta-openembedded. > > The STAGING_KERNEL_DIR is only the source (up to the build), it > contains no build artifacts .. we probably won't start copying > generated files to that directory (unless for whatever reason it > became universally common, with no other approach). There's been races > doing that, there's the breakage of the source/build split, dirty > tree, etc, that all happen when that staged source directory gets > written to. Other parts of the system (module*, etc) all > manipulate/read the directory there. > > If something needs generated / output files, it is the design to look > in the staging_kerne_buildir (or $B if within the kernel recipe > context), or again, if all of our out of tree builds started needing > that, the module.bbclass might be able to arrange something to get the > search paths correctly modified. > > > > > For now I'm submitting you a patch that does this: > > + # hack to include in the source directory the utsrelease.h file, > making the build succeed. > > + # this might be removed in future releases if the kernel starts > shipping this generated file into KERNEL_DIR and not KERNEL_BUILDDIR > > + ln -snf ${STAGING_KERNEL_BUILDDIR}/include/* ${S}/vboxsf/include > > > > Why not just get the STAGING_KERNEL_DIR into the search path (via > CFLAGS or whatever) ? It may take a patch to the package's source, but > that's preferable to breaking the split between staged source and > staged build artifacts. > > Bruce > > > fixing the build. > > (please let me know if you can forward the request to poky/kernel devs) > > > > Gianfranco > > > > Il giorno gio 21 ott 2021 alle ore 00:28 Khem Raj > ha scritto: > >> > >> On Wed, Oct 20, 2021 at 2:26 PM Gianfranco Costamagna > >> wrote: > >> > > >> > Hello, > >> > any idea is welcome, I can't yet figure out why this file is not in > recipes-sysroot or whatever. > >> > Do you have any help? Of course copy-pasting the "generated" > directory from the kernel build artifacts works, > >> > but I think there should a better way than patching the kernel > recipe... > >> > > >> > >> this file should be in kernel-build-artifacts, so I wonder why this is > >> not available. Bruce any ideas ? > >> > >> > Gianfranco > >> > > >> > Il giorno mer 20 ott 2021 alle ore 21:32 Khem Raj > ha scritto: > >> >> > >> >> seeing this failure on qemux86 > >> >> > >> >> https://errors.yoctoproject.org/Errors/Details/613563/ > >> >> > >> >> On Wed, Oct 20, 2021 at 3:56 AM Gianfranco > >> >> wrote: > >> >> > > >> >> > drop two upstream cherry-pick patches: > >> >> > r89690-5.14-fixes.patch > >> >> > r90497-regops-5.14-fix.patch > >> >> > > >> >> > Signed-off-by: Gianfranco Costamagna < > costamagnagianfranco@yahoo.it> > >> >> > Signed-off-by: Gianfranco Costamagna > >> >> > --- > >> >> > .../vboxguestdrivers/r89690-5.14-fixes.patch | 442 > ------------------ > >> >> > .../r90497-regops-5.14-fix.patch | 118 ----- > >> >> > ...s_6.1.26.bb => vboxguestdrivers_6.1.28.bb} | 6 +- > >> >> > 3 files changed, 2 insertions(+), 564 deletions(-) > >> >> > delete mode 100644 > meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/r89690-5.14-fixes.patch > >> >> > delete mode 100644 > meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/r90497-regops-5.14-fix.patch > >> >> > rename meta-oe/recipes-support/vboxguestdrivers/{ > vboxguestdrivers_6.1.26.bb => vboxguestdrivers_6.1.28.bb} (92%) > >> >> > > >> >> > diff --git > a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/r89690-5.14-fixes.patch > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/r89690-5.14-fixes.patch > >> >> > deleted file mode 100644 > >> >> > index 951bd5013..000000000 > >> >> > --- > a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/r89690-5.14-fixes.patch > >> >> > +++ /dev/null > >> >> > @@ -1,442 +0,0 @@ > >> >> > -Subject: Fix build errors with linux 5.14 > >> >> > - > >> >> > -Upstream-Status: backport > >> >> > - > >> >> > -svn-id: r89690 > >> >> > - > >> >> > -Signed-off-by: Bruce Ashfield > >> >> > - > >> >> > -Index: a/src/VBox/Additions/linux/drm/vbox_drv.h > >> >> > > -=================================================================== > >> >> > ---- a/src/VBox/Additions/linux/drm/vbox_drv.h (revision 89690) > >> >> > -+++ a/src/VBox/Additions/linux/drm/vbox_drv.h (revision 90498) > >> >> > -@@ -227,6 +227,15 @@ > >> >> > - sizeof(HGSMIHOSTFLAGS)) > >> >> > - #define HOST_FLAGS_OFFSET GUEST_HEAP_USABLE_SIZE > >> >> > - > >> >> > -+/** Field @pdev of struct drm_device was removed in 5.14. This > macro > >> >> > -+ * transparently handles this change. Input argument is a pointer > >> >> > -+ * to struct drm_device. */ > >> >> > -+#if RTLNX_VER_MIN(5,14,0) > >> >> > -+# define VBOX_DRM_TO_PCI_DEV(_dev) to_pci_dev(_dev->dev) > >> >> > -+#else > >> >> > -+# define VBOX_DRM_TO_PCI_DEV(_dev) _dev->pdev > >> >> > -+#endif > >> >> > -+ > >> >> > - /** How frequently we refresh if the guest is not providing > dirty rectangles. */ > >> >> > - #define VBOX_REFRESH_PERIOD (HZ / 2) > >> >> > - > >> >> > -Index: a/src/VBox/Additions/linux/drm/vbox_main.c > >> >> > > -=================================================================== > >> >> > ---- a/src/VBox/Additions/linux/drm/vbox_main.c (revision 89690) > >> >> > -+++ a/src/VBox/Additions/linux/drm/vbox_main.c (revision 90498) > >> >> > -@@ -290,7 +290,7 @@ > >> >> > - /* Take a command buffer for each screen from the end of > usable VRAM. */ > >> >> > - vbox->available_vram_size -= vbox->num_crtcs * > VBVA_MIN_BUFFER_SIZE; > >> >> > - > >> >> > -- vbox->vbva_buffers = pci_iomap_range(vbox->dev->pdev, 0, > >> >> > -+ vbox->vbva_buffers = > pci_iomap_range(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0, > >> >> > - > vbox->available_vram_size, > >> >> > - vbox->num_crtcs * > >> >> > - VBVA_MIN_BUFFER_SIZE); > >> >> > -@@ -311,7 +311,7 @@ > >> >> > - return 0; > >> >> > - > >> >> > - err_pci_iounmap: > >> >> > -- pci_iounmap(vbox->dev->pdev, vbox->vbva_buffers); > >> >> > -+ pci_iounmap(VBOX_DRM_TO_PCI_DEV(vbox->dev), > vbox->vbva_buffers); > >> >> > - return ret; > >> >> > - } > >> >> > - > >> >> > -@@ -318,7 +318,7 @@ > >> >> > - static void vbox_accel_fini(struct vbox_private *vbox) > >> >> > - { > >> >> > - vbox_disable_accel(vbox); > >> >> > -- pci_iounmap(vbox->dev->pdev, vbox->vbva_buffers); > >> >> > -+ pci_iounmap(VBOX_DRM_TO_PCI_DEV(vbox->dev), > vbox->vbva_buffers); > >> >> > - } > >> >> > - > >> >> > - /** Do we support the 4.3 plus mode hint reporting interface? */ > >> >> > -@@ -393,7 +393,7 @@ > >> >> > - > >> >> > - /* Map guest-heap at end of vram */ > >> >> > - vbox->guest_heap = > >> >> > -- pci_iomap_range(vbox->dev->pdev, 0, > GUEST_HEAP_OFFSET(vbox), > >> >> > -+ pci_iomap_range(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0, > GUEST_HEAP_OFFSET(vbox), > >> >> > - GUEST_HEAP_SIZE); > >> >> > - if (!vbox->guest_heap) > >> >> > - return -ENOMEM; > >> >> > -@@ -442,7 +442,7 @@ > >> >> > - err_destroy_guest_pool: > >> >> > - gen_pool_destroy(vbox->guest_pool); > >> >> > - err_unmap_guest_heap: > >> >> > -- pci_iounmap(vbox->dev->pdev, vbox->guest_heap); > >> >> > -+ pci_iounmap(VBOX_DRM_TO_PCI_DEV(vbox->dev), > vbox->guest_heap); > >> >> > - return ret; > >> >> > - } > >> >> > - > >> >> > -@@ -452,7 +452,7 @@ > >> >> > - cancel_delayed_work(&vbox->refresh_work); > >> >> > - vbox_accel_fini(vbox); > >> >> > - gen_pool_destroy(vbox->guest_pool); > >> >> > -- pci_iounmap(vbox->dev->pdev, vbox->guest_heap); > >> >> > -+ pci_iounmap(VBOX_DRM_TO_PCI_DEV(vbox->dev), > vbox->guest_heap); > >> >> > - } > >> >> > - > >> >> > - #if RTLNX_VER_MIN(4,19,0) || RTLNX_RHEL_MIN(8,3) > >> >> > -@@ -567,12 +567,16 @@ > >> >> > - > >> >> > - size = roundup(size, PAGE_SIZE); > >> >> > - if (size == 0) > >> >> > -+ { > >> >> > -+ DRM_ERROR("bad size\n"); > >> >> > - return -EINVAL; > >> >> > -+ } > >> >> > - > >> >> > - ret = vbox_bo_create(dev, size, 0, 0, &vboxbo); > >> >> > - if (ret) { > >> >> > - if (ret != -ERESTARTSYS) > >> >> > - DRM_ERROR("failed to allocate GEM > object\n"); > >> >> > -+ DRM_ERROR("failed to allocate GEM (%d)\n", ret); > >> >> > - return ret; > >> >> > - } > >> >> > - > >> >> > -@@ -628,6 +632,21 @@ > >> >> > - { > >> >> > - struct vbox_bo *vbox_bo = gem_to_vbox_bo(obj); > >> >> > - > >> >> > -+#if RTLNX_VER_MIN(5,14,0) > >> >> > -+ /* Starting from kernel 5.14, there is a warning appears > in dmesg > >> >> > -+ * on attempt to desroy pinned buffer object. Make sure it > is unpinned. */ > >> >> > -+ while (vbox_bo->bo.pin_count) > >> >> > -+ { > >> >> > -+ int ret; > >> >> > -+ ret = vbox_bo_unpin(vbox_bo); > >> >> > -+ if (ret) > >> >> > -+ { > >> >> > -+ DRM_ERROR("unable to unpin buffer > object\n"); > >> >> > -+ break; > >> >> > -+ } > >> >> > -+ } > >> >> > -+#endif > >> >> > -+ > >> >> > - ttm_bo_put(&vbox_bo->bo); > >> >> > - } > >> >> > - > >> >> > -@@ -648,7 +667,7 @@ > >> >> > - u32 handle, u64 *offset) > >> >> > - { > >> >> > - struct drm_gem_object *obj; > >> >> > -- int ret; > >> >> > -+ int ret = 0; > >> >> > - struct vbox_bo *bo; > >> >> > - > >> >> > - mutex_lock(&dev->struct_mutex); > >> >> > -@@ -665,8 +684,15 @@ > >> >> > - bo = gem_to_vbox_bo(obj); > >> >> > - *offset = vbox_bo_mmap_offset(bo); > >> >> > - > >> >> > -+#if RTLNX_VER_MIN(5,14,0) > >> >> > -+ ret = drm_vma_node_allow(&bo->bo.base.vma_node, file); > >> >> > -+ if (ret) > >> >> > -+ { > >> >> > -+ DRM_ERROR("unable to grant previladges to user"); > >> >> > -+ } > >> >> > -+#endif > >> >> > -+ > >> >> > - drm_gem_object_put(obj); > >> >> > -- ret = 0; > >> >> > - > >> >> > - out_unlock: > >> >> > - mutex_unlock(&dev->struct_mutex); > >> >> > -Index: a/src/VBox/Additions/linux/drm/vbox_mode.c > >> >> > > -=================================================================== > >> >> > ---- a/src/VBox/Additions/linux/drm/vbox_mode.c (revision 89690) > >> >> > -+++ a/src/VBox/Additions/linux/drm/vbox_mode.c (revision 90498) > >> >> > -@@ -245,6 +245,10 @@ > >> >> > - vbox_bo_unpin(bo); > >> >> > - vbox_bo_unreserve(bo); > >> >> > - } > >> >> > -+ else > >> >> > -+ { > >> >> > -+ DRM_ERROR("unable to lock buffer object: > error %d\n", ret); > >> >> > -+ } > >> >> > - } > >> >> > - > >> >> > - if (&vbox->fbdev->afb == vbox_fb) > >> >> > -@@ -856,7 +860,9 @@ > >> >> > - vbox->cursor_data_size = data_size; > >> >> > - dst = vbox->cursor_data; > >> >> > - > >> >> > --#if RTLNX_VER_MIN(5,12,0) > >> >> > -+#if RTLNX_VER_MIN(5,14,0) > >> >> > -+ ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.resource->num_pages, > &uobj_map); > >> >> > -+#elif RTLNX_VER_MIN(5,12,0) > >> >> > - ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.mem.num_pages, > &uobj_map); > >> >> > - #else > >> >> > - ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.num_pages, &uobj_map); > >> >> > -Index: a/src/VBox/Additions/linux/drm/vbox_ttm.c > >> >> > > -=================================================================== > >> >> > ---- a/src/VBox/Additions/linux/drm/vbox_ttm.c (revision 89690) > >> >> > -+++ a/src/VBox/Additions/linux/drm/vbox_ttm.c (revision 90498) > >> >> > -@@ -41,6 +41,10 @@ > >> >> > - # include > >> >> > - #endif > >> >> > - > >> >> > -+#if RTLNX_VER_MIN(5,14,0) > >> >> > -+# include > >> >> > -+#endif > >> >> > -+ > >> >> > - #if RTLNX_VER_MAX(3,18,0) && !RTLNX_RHEL_MAJ_PREREQ(7,2) > >> >> > - #define PLACEMENT_FLAGS(placement) (placement) > >> >> > - #else > >> >> > -@@ -174,11 +178,13 @@ > >> >> > - *pl = vboxbo->placement; > >> >> > - } > >> >> > - > >> >> > -+#if RTLNX_VER_MAX(5,14,0) > >> >> > - static int vbox_bo_verify_access(struct ttm_buffer_object *bo, > >> >> > - struct file *filp) > >> >> > - { > >> >> > - return 0; > >> >> > - } > >> >> > -+#endif > >> >> > - > >> >> > - #if RTLNX_VER_MAX(5,10,0) > >> >> > - static int vbox_ttm_io_mem_reserve(struct ttm_bo_device *bdev, > >> >> > -@@ -234,10 +240,10 @@ > >> >> > - mem->bus.caching = ttm_write_combined; > >> >> > - # endif > >> >> > - # if RTLNX_VER_MIN(5,10,0) > >> >> > -- mem->bus.offset = (mem->start << PAGE_SHIFT) + > pci_resource_start(vbox->dev->pdev, 0); > >> >> > -+ mem->bus.offset = (mem->start << PAGE_SHIFT) + > pci_resource_start(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0); > >> >> > - # else > >> >> > - mem->bus.offset = mem->start << PAGE_SHIFT; > >> >> > -- mem->start = pci_resource_start(vbox->dev->pdev, > 0); > >> >> > -+ mem->start = > pci_resource_start(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0); > >> >> > - # endif > >> >> > - mem->bus.is_iomem = true; > >> >> > - break; > >> >> > -@@ -373,7 +379,9 @@ > >> >> > - .eviction_valuable = ttm_bo_eviction_valuable, > >> >> > - #endif > >> >> > - .evict_flags = vbox_bo_evict_flags, > >> >> > -+#if RTLNX_VER_MAX(5,14,0) > >> >> > - .verify_access = vbox_bo_verify_access, > >> >> > -+#endif > >> >> > - .io_mem_reserve = &vbox_ttm_io_mem_reserve, > >> >> > - .io_mem_free = &vbox_ttm_io_mem_free, > >> >> > - #if RTLNX_VER_MIN(4,12,0) || RTLNX_RHEL_MAJ_PREREQ(7,5) > >> >> > -@@ -451,12 +459,12 @@ > >> >> > - } > >> >> > - > >> >> > - #ifdef DRM_MTRR_WC > >> >> > -- vbox->fb_mtrr = drm_mtrr_add(pci_resource_start(dev->pdev, > 0), > >> >> > -- pci_resource_len(dev->pdev, > 0), > >> >> > -+ vbox->fb_mtrr = > drm_mtrr_add(pci_resource_start(VBOX_DRM_TO_PCI_DEV(dev), 0), > >> >> > -+ > pci_resource_len(VBOX_DRM_TO_PCI_DEV(dev), 0), > >> >> > - DRM_MTRR_WC); > >> >> > - #else > >> >> > -- vbox->fb_mtrr = > arch_phys_wc_add(pci_resource_start(dev->pdev, 0), > >> >> > -- > pci_resource_len(dev->pdev, 0)); > >> >> > -+ vbox->fb_mtrr = > arch_phys_wc_add(pci_resource_start(VBOX_DRM_TO_PCI_DEV(dev), 0), > >> >> > -+ > pci_resource_len(VBOX_DRM_TO_PCI_DEV(dev), 0)); > >> >> > - #endif > >> >> > - return 0; > >> >> > - > >> >> > -@@ -477,8 +485,8 @@ > >> >> > - { > >> >> > - #ifdef DRM_MTRR_WC > >> >> > - drm_mtrr_del(vbox->fb_mtrr, > >> >> > -- pci_resource_start(vbox->dev->pdev, 0), > >> >> > -- pci_resource_len(vbox->dev->pdev, 0), > DRM_MTRR_WC); > >> >> > -+ > pci_resource_start(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0), > >> >> > -+ > pci_resource_len(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0), DRM_MTRR_WC); > >> >> > - #else > >> >> > - arch_phys_wc_del(vbox->fb_mtrr); > >> >> > - #endif > >> >> > -@@ -560,6 +568,9 @@ > >> >> > - static const struct drm_gem_object_funcs > vbox_drm_gem_object_funcs = { > >> >> > - .free = vbox_gem_free_object, > >> >> > - .print_info = drm_gem_ttm_print_info, > >> >> > -+# if RTLNX_VER_MIN(5,14,0) > >> >> > -+ .mmap = drm_gem_ttm_mmap, > >> >> > -+# endif > >> >> > - }; > >> >> > - #endif > >> >> > - > >> >> > -@@ -598,6 +609,17 @@ > >> >> > - sizeof(struct vbox_bo)); > >> >> > - #endif > >> >> > - > >> >> > -+#if RTLNX_VER_MIN(5,14,0) > >> >> > -+ /* Initialization of the following was removed from DRM > stack > >> >> > -+ * in 5.14, so we need to do it manually. */ > >> >> > -+ vboxbo->bo.base.funcs = &vbox_drm_gem_object_funcs; > >> >> > -+ kref_init(&vboxbo->bo.base.refcount); > >> >> > -+ vboxbo->bo.base.size = size; > >> >> > -+ vboxbo->bo.base.dev = dev; > >> >> > -+ dma_resv_init(&vboxbo->bo.base._resv); > >> >> > -+ drm_vma_node_reset(&vboxbo->bo.base.vma_node); > >> >> > -+#endif > >> >> > -+ > >> >> > - ret = ttm_bo_init(&vbox->ttm.bdev, &vboxbo->bo, size, > >> >> > - ttm_bo_type_device, &vboxbo->placement, > >> >> > - #if RTLNX_VER_MAX(4,17,0) && !RTLNX_RHEL_MAJ_PREREQ(7,6) && > !RTLNX_SUSE_MAJ_PREREQ(15,1) && !RTLNX_SUSE_MAJ_PREREQ(12,5) > >> >> > -@@ -613,7 +635,11 @@ > >> >> > - NULL, vbox_bo_ttm_destroy); > >> >> > - #endif > >> >> > - if (ret) > >> >> > -- goto err_free_vboxbo; > >> >> > -+ { > >> >> > -+ /* In case of failure, ttm_bo_init() supposed to > call > >> >> > -+ * vbox_bo_ttm_destroy() which in turn will free > @vboxbo. */ > >> >> > -+ goto err_exit; > >> >> > -+ } > >> >> > - > >> >> > - *pvboxbo = vboxbo; > >> >> > - > >> >> > -@@ -621,12 +647,15 @@ > >> >> > - > >> >> > - err_free_vboxbo: > >> >> > - kfree(vboxbo); > >> >> > -+err_exit: > >> >> > - return ret; > >> >> > - } > >> >> > - > >> >> > - static inline u64 vbox_bo_gpu_offset(struct vbox_bo *bo) > >> >> > - { > >> >> > --#if RTLNX_VER_MIN(5,9,0) || RTLNX_RHEL_MIN(8,4) || > RTLNX_SUSE_MAJ_PREREQ(15,3) > >> >> > -+#if RTLNX_VER_MIN(5,14,0) > >> >> > -+ return bo->bo.resource->start << PAGE_SHIFT; > >> >> > -+#elif RTLNX_VER_MIN(5,9,0) || RTLNX_RHEL_MIN(8,4) || > RTLNX_SUSE_MAJ_PREREQ(15,3) > >> >> > - return bo->bo.mem.start << PAGE_SHIFT; > >> >> > - #else > >> >> > - return bo->bo.offset; > >> >> > -@@ -685,7 +714,7 @@ > >> >> > - struct ttm_operation_ctx ctx = { false, false }; > >> >> > - # endif > >> >> > - #endif > >> >> > -- int ret; > >> >> > -+ int ret = 0; > >> >> > - #if RTLNX_VER_MAX(5,11,0) > >> >> > - int i; > >> >> > - #endif > >> >> > -@@ -765,6 +794,7 @@ > >> >> > - { > >> >> > - struct drm_file *file_priv; > >> >> > - struct vbox_private *vbox; > >> >> > -+ int ret = -EINVAL; > >> >> > - > >> >> > - if (unlikely(vma->vm_pgoff < DRM_FILE_PAGE_OFFSET)) > >> >> > - return -EINVAL; > >> >> > -@@ -772,5 +802,12 @@ > >> >> > - file_priv = filp->private_data; > >> >> > - vbox = file_priv->minor->dev->dev_private; > >> >> > - > >> >> > -- return ttm_bo_mmap(filp, vma, &vbox->ttm.bdev); > >> >> > -+#if RTLNX_VER_MIN(5,14,0) > >> >> > -+ if (drm_dev_is_unplugged(file_priv->minor->dev)) > >> >> > -+ return -ENODEV; > >> >> > -+ ret = drm_gem_mmap(filp, vma); > >> >> > -+#else > >> >> > -+ ret = ttm_bo_mmap(filp, vma, &vbox->ttm.bdev); > >> >> > -+#endif > >> >> > -+ return ret; > >> >> > - } > >> >> > -Index: a/src/VBox/Additions/linux/drm/vbox_fb.c > >> >> > > -=================================================================== > >> >> > ---- a/src/VBox/Additions/linux/drm/vbox_fb.c (revision 89690) > >> >> > -+++ a/src/VBox/Additions/linux/drm/vbox_fb.c (revision 90498) > >> >> > -@@ -301,7 +301,9 @@ > >> >> > - return ret; > >> >> > - } > >> >> > - > >> >> > --#if RTLNX_VER_MIN(5,12,0) > >> >> > -+#if RTLNX_VER_MIN(5,14,0) > >> >> > -+ ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.resource->num_pages, > &bo->kmap); > >> >> > -+#elif RTLNX_VER_MIN(5,12,0) > >> >> > - ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.mem.num_pages, > &bo->kmap); > >> >> > - #else > >> >> > - ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.num_pages, &bo->kmap); > >> >> > -@@ -337,8 +339,8 @@ > >> >> > - * This seems to be done for safety checking that the > framebuffer > >> >> > - * is not registered twice by different drivers. > >> >> > - */ > >> >> > -- info->apertures->ranges[0].base = > pci_resource_start(dev->pdev, 0); > >> >> > -- info->apertures->ranges[0].size = > pci_resource_len(dev->pdev, 0); > >> >> > -+ info->apertures->ranges[0].base = > pci_resource_start(VBOX_DRM_TO_PCI_DEV(dev), 0); > >> >> > -+ info->apertures->ranges[0].size = > pci_resource_len(VBOX_DRM_TO_PCI_DEV(dev), 0); > >> >> > - > >> >> > - #if RTLNX_VER_MIN(5,2,0) || RTLNX_RHEL_MAJ_PREREQ(8,2) > >> >> > - /* > >> >> > -Index: a/src/VBox/Additions/linux/drm/vbox_drv.c > >> >> > > -=================================================================== > >> >> > ---- a/src/VBox/Additions/linux/drm/vbox_drv.c (revision 89690) > >> >> > -+++ a/src/VBox/Additions/linux/drm/vbox_drv.c (revision 90498) > >> >> > -@@ -43,6 +43,10 @@ > >> >> > - # include > >> >> > - #endif > >> >> > - > >> >> > -+#if RTLNX_VER_MIN(5,14,0) > >> >> > -+# include > >> >> > -+#endif > >> >> > -+ > >> >> > - #include "version-generated.h" > >> >> > - #include "revision-generated.h" > >> >> > - > >> >> > -@@ -65,12 +69,23 @@ > >> >> > - struct drm_device *dev = NULL; > >> >> > - int ret = 0; > >> >> > - > >> >> > -+# if RTLNX_VER_MIN(5,14,0) > >> >> > -+ ret = > drm_aperture_remove_conflicting_pci_framebuffers(pdev, "vboxvideofb"); > >> >> > -+ if (ret) > >> >> > -+ { > >> >> > -+ printk("unable to remove conflicting framebuffer > devices\n"); > >> >> > -+ return ret; > >> >> > -+ } > >> >> > -+# endif /* 5.14 */ > >> >> > -+ > >> >> > - dev = drm_dev_alloc(&driver, &pdev->dev); > >> >> > - if (IS_ERR(dev)) { > >> >> > - ret = PTR_ERR(dev); > >> >> > - goto err_drv_alloc; > >> >> > - } > >> >> > -+#if RTLNX_VER_MAX(5,14,0) > >> >> > - dev->pdev = pdev; > >> >> > -+#endif > >> >> > - pci_set_drvdata(pdev, dev); > >> >> > - > >> >> > - ret = vbox_driver_load(dev); > >> >> > -@@ -125,7 +140,7 @@ > >> >> > - > >> >> > - drm_kms_helper_poll_disable(dev); > >> >> > - > >> >> > -- pci_save_state(dev->pdev); > >> >> > -+ pci_save_state(VBOX_DRM_TO_PCI_DEV(dev)); > >> >> > - > >> >> > - drm_fb_helper_set_suspend_unlocked(&vbox->fbdev->helper, > true); > >> >> > - > >> >> > -@@ -147,7 +162,7 @@ > >> >> > - { > >> >> > - int ret; > >> >> > - > >> >> > -- if (pci_enable_device(dev->pdev)) > >> >> > -+ if (pci_enable_device(VBOX_DRM_TO_PCI_DEV(dev))) > >> >> > - return -EIO; > >> >> > - > >> >> > - ret = vbox_drm_thaw(dev); > >> >> > -Index: a/src/VBox/Additions/linux/drm/vbox_irq.c > >> >> > > -=================================================================== > >> >> > ---- a/src/VBox/Additions/linux/drm/vbox_irq.c (revision 89690) > >> >> > -+++ a/src/VBox/Additions/linux/drm/vbox_irq.c (revision 90498) > >> >> > -@@ -206,7 +206,7 @@ > >> >> > - INIT_WORK(&vbox->hotplug_work, vbox_hotplug_worker); > >> >> > - vbox_update_mode_hints(vbox); > >> >> > - #if RTLNX_VER_MIN(3,16,0) || RTLNX_RHEL_MAJ_PREREQ(7,1) > >> >> > -- return drm_irq_install(vbox->dev, vbox->dev->pdev->irq); > >> >> > -+ return drm_irq_install(vbox->dev, > VBOX_DRM_TO_PCI_DEV(vbox->dev)->irq); > >> >> > - #else > >> >> > - return drm_irq_install(vbox->dev); > >> >> > - #endif > >> >> > diff --git > a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/r90497-regops-5.14-fix.patch > b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/r90497-regops-5.14-fix.patch > >> >> > deleted file mode 100644 > >> >> > index 0d960fa4f..000000000 > >> >> > --- > a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/r90497-regops-5.14-fix.patch > >> >> > +++ /dev/null > >> >> > @@ -1,118 +0,0 @@ > >> >> > -Subject: Fix regops build errors with linux 5.14 > >> >> > - > >> >> > -Upstream-Status: backport > >> >> > - > >> >> > -svn-id: r90497 > >> >> > - > >> >> > -Signed-off-by: Bruce Ashfield > >> >> > - > >> >> > -Index: a/src/VBox/Additions/linux/sharedfolders/regops.c > >> >> > > -=================================================================== > >> >> > ---- a/src/VBox/Additions/linux/sharedfolders/regops.c (revision > 88716) > >> >> > -+++ a/src/VBox/Additions/linux/sharedfolders/regops.c (revision > 90497) > >> >> > -@@ -2126,7 +2126,11 @@ > >> >> > - int rc = 0; > >> >> > - > >> >> > - Assert(iov_iter_count(iter) + pStash->cb > 0); > >> >> > -+# if RTLNX_VER_MIN(5,14,0) > >> >> > -+ if (!(iter->iter_type & ITER_KVEC)) { > >> >> > -+#else > >> >> > - if (!(iter->type & ITER_KVEC)) { > >> >> > -+#endif > >> >> > - /* > >> >> > - * Do we have a stashed page? > >> >> > - */ > >> >> > -@@ -2372,7 +2376,9 @@ > >> >> > - static size_t vbsf_iter_max_span_of_pages(struct iov_iter *iter) > >> >> > - { > >> >> > - size_t cPages; > >> >> > --# if RTLNX_VER_MIN(3,16,0) > >> >> > -+#if RTLNX_VER_MIN(5,14,0) > >> >> > -+ if (iter_is_iovec(iter) || (iter->iter_type & ITER_KVEC)) { > >> >> > -+#elif RTLNX_VER_MIN(3,16,0) > >> >> > - if (iter_is_iovec(iter) || (iter->type & ITER_KVEC)) { > >> >> > - #endif > >> >> > - const struct iovec *pCurIov = iter->iov; > >> >> > -@@ -2436,7 +2442,11 @@ > >> >> > - } else { > >> >> > - /* Won't bother with accurate counts for the next two > types, just make > >> >> > - some rough estimates (does pipes have segments?): */ > >> >> > -+# if RTLNX_VER_MIN(5,14,0) > >> >> > -+ size_t cSegs = iter->iter_type & ITER_BVEC ? RT_MAX(1, > iter->nr_segs) : 1; > >> >> > -+# else > >> >> > - size_t cSegs = iter->type & ITER_BVEC ? RT_MAX(1, > iter->nr_segs) : 1; > >> >> > -+#endif > >> >> > - cPages = (iov_iter_count(iter) + (PAGE_SIZE * 2 - 2) * > cSegs) >> PAGE_SHIFT; > >> >> > - } > >> >> > - # endif > >> >> > -@@ -2588,8 +2598,14 @@ > >> >> > - struct vbsf_reg_info *sf_r = > kio->ki_filp->private_data; > >> >> > - struct vbsf_super_info *pSuperInfo = > VBSF_GET_SUPER_INFO(inode->i_sb); > >> >> > - > >> >> > -+#if RTLNX_VER_MIN(5,14,0) > >> >> > - SFLOGFLOW(("vbsf_reg_read_iter: inode=%p file=%p size=%#zx > off=%#llx type=%#x\n", > >> >> > -+ inode, kio->ki_filp, cbToRead, kio->ki_pos, > iter->iter_type)); > >> >> > -+#else > >> >> > -+ SFLOGFLOW(("vbsf_reg_read_iter: inode=%p file=%p size=%#zx > off=%#llx type=%#x\n", > >> >> > - inode, kio->ki_filp, cbToRead, kio->ki_pos, > iter->type)); > >> >> > -+#endif > >> >> > -+ > >> >> > - AssertReturn(S_ISREG(inode->i_mode), -EINVAL); > >> >> > - > >> >> > - /* > >> >> > -@@ -2823,9 +2839,13 @@ > >> >> > - bool const fAppend = > RT_BOOL(kio->ki_filp->f_flags & O_APPEND); > >> >> > - # endif > >> >> > - > >> >> > -- > >> >> > -+#if RTLNX_VER_MIN(5,14,0) > >> >> > - SFLOGFLOW(("vbsf_reg_write_iter: inode=%p file=%p size=%#zx > off=%#llx type=%#x\n", > >> >> > -+ inode, kio->ki_filp, cbToWrite, offFile, > iter->iter_type)); > >> >> > -+#else > >> >> > -+ SFLOGFLOW(("vbsf_reg_write_iter: inode=%p file=%p size=%#zx > off=%#llx type=%#x\n", > >> >> > - inode, kio->ki_filp, cbToWrite, offFile, > iter->type)); > >> >> > -+#endif > >> >> > - AssertReturn(S_ISREG(inode->i_mode), -EINVAL); > >> >> > - > >> >> > - /* > >> >> > -@@ -3737,7 +3757,27 @@ > >> >> > - } > >> >> > - #endif /* KERNEL_VERSION >= 2.6.24 */ > >> >> > - > >> >> > -+#if RTLNX_VER_MIN(5,14,0) > >> >> > -+static int vbsf_write_end(struct file *file, struct > address_space *mapping, > >> >> > -+ loff_t pos, unsigned int len, unsigned int > copied, > >> >> > -+ struct page *page, void *fsdata) > >> >> > -+{ > >> >> > -+ static uint64_t volatile s_cCalls = 0; > >> >> > -+ if (s_cCalls++ < 16) > >> >> > -+ { > >> >> > -+ printk("vboxsf: Unexpected call to > vbsf_write_end(pos=%#llx len=%#x)! Please report.\n", > >> >> > -+ (unsigned long long)pos, len); > >> >> > -+ RTLogBackdoorPrintf("vboxsf: Unexpected call to > vbsf_write_end(pos=%#llx len=%#x)! Please report.\n", > >> >> > -+ (unsigned long long)pos, len); > >> >> > -+# ifdef WARN_ON > >> >> > -+ WARN_ON(1); > >> >> > -+# endif > >> >> > -+ } > >> >> > - > >> >> > -+ return -ENOTSUPP; > >> >> > -+} > >> >> > -+#endif > >> >> > -+ > >> >> > - #if RTLNX_VER_MIN(2,4,10) > >> >> > - > >> >> > - # ifdef VBOX_UEK > >> >> > -@@ -3791,8 +3831,11 @@ > >> >> > - #if RTLNX_VER_MIN(2,5,12) > >> >> > - .set_page_dirty = __set_page_dirty_buffers, > >> >> > - #endif > >> >> > --#if RTLNX_VER_MIN(2,6,24) > >> >> > -+#if RTLNX_VER_MIN(5,14,0) > >> >> > - .write_begin = vbsf_write_begin, > >> >> > -+ .write_end = vbsf_write_end, > >> >> > -+#elif RTLNX_VER_MIN(2,6,24) > >> >> > -+ .write_begin = vbsf_write_begin, > >> >> > - .write_end = simple_write_end, > >> >> > - #elif RTLNX_VER_MIN(2,5,45) > >> >> > - .prepare_write = simple_prepare_write, > >> >> > diff --git a/meta-oe/recipes-support/vboxguestdrivers/ > vboxguestdrivers_6.1.26.bb b/meta-oe/recipes-support/vboxguestdrivers/ > vboxguestdrivers_6.1.28.bb > >> >> > similarity index 92% > >> >> > rename from meta-oe/recipes-support/vboxguestdrivers/ > vboxguestdrivers_6.1.26.bb > >> >> > rename to meta-oe/recipes-support/vboxguestdrivers/ > vboxguestdrivers_6.1.28.bb > >> >> > index 84651ae64..c7e73b222 100644 > >> >> > --- a/meta-oe/recipes-support/vboxguestdrivers/ > vboxguestdrivers_6.1.26.bb > >> >> > +++ b/meta-oe/recipes-support/vboxguestdrivers/ > vboxguestdrivers_6.1.28.bb > >> >> > @@ -13,12 +13,10 @@ VBOX_NAME = "VirtualBox-${PV}" > >> >> > > >> >> > SRC_URI = " > http://download.virtualbox.org/virtualbox/${PV}/${VBOX_NAME}.tar.bz2 \ > >> >> > file://Makefile.utils \ > >> >> > - file://r89690-5.14-fixes.patch \ > >> >> > - file://r90497-regops-5.14-fix.patch \ > >> >> > " > >> >> > > >> >> > -SRC_URI[md5sum] = "fce04bbef244b4df1a50e53d132d3e6f" > >> >> > -SRC_URI[sha256sum] = > "0212602eea878d6c9fd7f4a3e0182da3e4505f31d25f5539fb8f7b1fbe366195" > >> >> > +SRC_URI[md5sum] = "c6efae8dc115b90c6124e13126794c4f" > >> >> > +SRC_URI[sha256sum] = > "8d34993d8e9c0cf35e7bd44dd26c8c757f17a3b7d5a64052f945d00fd798ebfe" > >> >> > > >> >> > S ?= "${WORKDIR}/vbox_module" > >> >> > S:task-patch = "${WORKDIR}/${VBOX_NAME}" > >> >> > -- > >> >> > 2.25.1 > >> >> > > >> >> > > >> >> > -=-=-=-=-=-=-=-=-=-=-=- > >> >> > Links: You receive all messages sent to this group. > >> >> > View/Reply Online (#93478): > https://lists.openembedded.org/g/openembedded-devel/message/93478 > >> >> > Mute This Topic: > https://lists.openembedded.org/mt/86462001/1997914 > >> >> > Group Owner: openembedded-devel+owner@lists.openembedded.org > >> >> > Unsubscribe: > https://lists.openembedded.org/g/openembedded-devel/unsub [ > raj.khem@gmail.com] > >> >> > -=-=-=-=-=-=-=-=-=-=-=- > >> >> > > > > > -- > - Thou shalt not follow the NULL pointer, for chaos and madness await > thee at its end > - "Use the force Harry" - Gandalf, Star Trek II > --000000000000c7fe4305cef66621 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello Bruce

you are right, t= he problem is not in the kernel module but into the vboxsf binary.
I tweak our custom Makefile to accept one additional flag, and submitted = a newer and better version

--- a/meta-oe/recipes-s= upport/vboxguestdrivers/vboxguestdrivers/Makefile.utils
+++ b/meta-oe/re= cipes-support/vboxguestdrivers/vboxguestdrivers/Makefile.utils
@@ -13,7 = +13,7 @@
=C2=A0INCLUDES =3D -I. -I../vboxsf -I../vboxsf/include
=C2= =A0MOD_DEFS =3D -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 \
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 -DIN_SUP_R0 -DVBOX -DVBOX_WITH_HGCM -DIN_MODULE -D= IN_GUEST_R0
-CFLAGS =C2=A0=3D ${INCLUDES} ${MOD_DEFS}
+CFLAGS =C2=A0= =3D ${INCLUDES} ${MOD_DEFS} ${EXTRA_CFLAGS}
=C2=A0LDFLAGS =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =3D
=C2=A0
=C2=A0SRCS =C2=A0 =C2=A0 =3D mount.vboxsf.c = \
diff --git a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.28.bb b/meta-oe/reci= pes-support/vboxguestdrivers/= vboxguestdrivers_6.1.28.bb
index c7e73b222..0265e38f5 100644
--- = a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.28.bb
+++ b/meta-oe/recipes-suppo= rt/vboxguestdrivers/vboxguest= drivers_6.1.28.bb
@@ -54,7 +54,7 @@ do_configure:prepend() {
=C2= =A0# compile and install mount utility
=C2=A0do_compile() {
=C2=A0 = =C2=A0 =C2=A0oe_runmake all
- =C2=A0 =C2=A0oe_runmake 'LD=3D${CC}= 9; 'LDFLAGS=3D${LDFLAGS}' -C ${S}/utils
+ =C2=A0 =C2=A0oe_runmak= e 'LD=3D${CC}' 'EXTRA_CFLAGS=3D-I${STAGING_KERNEL_BUILDDIR}/inc= lude/' 'LDFLAGS=3D${LDFLAGS}' -C ${S}/utils
=C2=A0 =C2=A0 = =C2=A0if ! [ -e vboxguest.ko -a -e vboxsf.ko -a -e vboxvideo.ko ] ; then=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0echo "ERROR: One of vbox*.ko module= s wasn't built"
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0exit 1
<= div>
thanks

Gianfranco

Il g= iorno ven 22 ott 2021 alle ore 18:58 Bruce Ashfield <bruce.ashfield@gmail.com> ha scritto:
=C2=A0onto the

On Fri, Oct 22, 2021 at 5:50 AM Gianfranco Costamagna
<co= stamagna.gianfranco@gmail.com> wrote:
>
> Hello,
> FYI I traced down the upstream change that introduced this regression:=
> https://www.vi= rtualbox.org/changeset?reponame=3Dvbox&new=3D91232%40trunk%2Finclude%2F= iprt%2Fstdarg.h&old=3D82968%40trunk%2Finclude%2Fiprt%2Fstdarg.h
>
> --- a/vboxsf/include/iprt/stdarg.h
> +++ b/vboxsf/include/iprt/stdarg.h
> @@ -43,13 +43,6 @@
>=C2=A0 #=C2=A0 if __GNUC__ >=3D 4 /* System headers refers to __buil= tin_stdarg_start. */
>=C2=A0 #=C2=A0 =C2=A0define __builtin_stdarg_start __builtin_va_start >=C2=A0 #=C2=A0 endif
> -# elif defined(RT_OS_LINUX) && defined(IN_RING0)
> -#=C2=A0 include "linux/version.h"
> -#=C2=A0 if RTLNX_VER_MIN(5,15,0)
> -#=C2=A0 =C2=A0include <linux/stdarg.h>
> -#=C2=A0 else
> -#=C2=A0 =C2=A0include <stdarg.h>
> -#=C2=A0 endif
>=C2=A0 # else
>=C2=A0 #=C2=A0 include <stdarg.h>
>=C2=A0 # endif
>
> I did grep into the kernel source code and that files is already inclu= ded in lots of places and drivers.
>
> I honestly think that file should be ship into STAGING_KERNEL_DIR inst= ead of STAGING_KERNEL_BUILDDIR
> because other binaries will need it probably in the future.
> But this change needs to be done in poky, not meta-openembedded.

The STAGING_KERNEL_DIR is only the source (up to the build), it
contains no build artifacts .. we probably won't start copying
generated files to that directory (unless for whatever reason it
became universally common, with no other approach). There's been races<= br> doing that, there's the breakage of the source/build split, dirty
tree, etc, that all happen when that staged source directory gets
written to. Other parts of the system (module*, etc) all
manipulate/read the directory there.

If something needs generated / output files, it is the design to look
in the staging_kerne_buildir (or $B if within the kernel recipe
context), or again, if all of our out of tree builds started needing
that, the module.bbclass might be able to arrange something to get the
search paths correctly modified.

>
> For now I'm submitting you a patch that does this:
> +=C2=A0 =C2=A0 # hack to include in the source directory the utsreleas= e.h file, making the build succeed.
> +=C2=A0 =C2=A0 # this might be removed in future releases if the kerne= l starts shipping this generated file into KERNEL_DIR and not KERNEL_BUILDD= IR
> +=C2=A0 =C2=A0 ln -snf ${STAGING_KERNEL_BUILDDIR}/include/* ${S}/vboxs= f/include
>

Why not just get the STAGING_KERNEL_DIR into the search path (via
CFLAGS or whatever) ? It may take a patch to the package's source, but<= br> that's preferable to breaking the split between staged source and
staged build artifacts.

Bruce

> fixing the build.
> (please let me know if you can forward the request to poky/kernel devs= )
>
> Gianfranco
>
> Il giorno gio 21 ott 2021 alle ore 00:28 Khem Raj <raj.khem@gmail.com> ha scrit= to:
>>
>> On Wed, Oct 20, 2021 at 2:26 PM Gianfranco Costamagna
>> <costamagna.gianfranco@gmail.com> wrote:
>> >
>> > Hello,
>> > any idea is welcome, I can't yet figure out why this file= is not in recipes-sysroot or whatever.
>> > Do you have any help? Of course copy-pasting the "genera= ted" directory from the kernel build artifacts works,
>> > but I think there should a better way than patching the kerne= l recipe...
>> >
>>
>> this file should be in kernel-build-artifacts, so I wonder why thi= s is
>> not available. Bruce any ideas ?
>>
>> > Gianfranco
>> >
>> > Il giorno mer 20 ott 2021 alle ore 21:32 Khem Raj <raj.khem@gmail.com>= ha scritto:
>> >>
>> >> seeing this failure on qemux86
>> >>
>> >> https://errors.yoctoproject.= org/Errors/Details/613563/
>> >>
>> >> On Wed, Oct 20, 2021 at 3:56 AM Gianfranco
>> >> <costamagna.gianfranco@gmail.com> wrote:
>> >> >
>> >> > drop two upstream cherry-pick patches:
>> >> > r89690-5.14-fixes.patch
>> >> > r90497-regops-5.14-fix.patch
>> >> >
>> >> > Signed-off-by: Gianfranco Costamagna <costamagnagianfranc= o@yahoo.it>
>> >> > Signed-off-by: Gianfranco Costamagna <locutusofborg@debian.org= >
>> >> > ---
>> >> >=C2=A0 .../vboxguestdrivers/r89690-5.14-fixes.patch= =C2=A0 | 442 ------------------
>> >> >=C2=A0 .../r90497-regops-5.14-fix.patch=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 118 -----
>> >> >=C2=A0 ...s_6.1.26.bb =3D> vboxguestdrivers_6= .1.28.bb} |=C2=A0 =C2=A06 +-
>> >> >=C2=A0 3 files changed, 2 insertions(+), 564 deletion= s(-)
>> >> >=C2=A0 delete mode 100644 meta-oe/recipes-support/vbo= xguestdrivers/vboxguestdrivers/r89690-5.14-fixes.patch
>> >> >=C2=A0 delete mode 100644 meta-oe/recipes-support/vbo= xguestdrivers/vboxguestdrivers/r90497-regops-5.14-fix.patch
>> >> >=C2=A0 rename meta-oe/recipes-support/vboxguestdriver= s/{vboxguestdrivers_6.1.26.bb =3D> vboxguestdrivers= _6.1.28.bb} (92%)
>> >> >
>> >> > diff --git a/meta-oe/recipes-support/vboxguestdriver= s/vboxguestdrivers/r89690-5.14-fixes.patch b/meta-oe/recipes-support/vboxgu= estdrivers/vboxguestdrivers/r89690-5.14-fixes.patch
>> >> > deleted file mode 100644
>> >> > index 951bd5013..000000000
>> >> > --- a/meta-oe/recipes-support/vboxguestdrivers/vboxg= uestdrivers/r89690-5.14-fixes.patch
>> >> > +++ /dev/null
>> >> > @@ -1,442 +0,0 @@
>> >> > -Subject: Fix build errors with linux 5.14
>> >> > -
>> >> > -Upstream-Status: backport
>> >> > -
>> >> > -svn-id: r89690
>> >> > -
>> >> > -Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com&g= t;
>> >> > -
>> >> > -Index: a/src/VBox/Additions/linux/drm/vbox_drv.h >> >> > -=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
>> >> > ---- a/src/VBox/Additions/linux/drm/vbox_drv.h=C2=A0= (revision 89690)
>> >> > -+++ a/src/VBox/Additions/linux/drm/vbox_drv.h=C2=A0= (revision 90498)
>> >> > -@@ -227,6 +227,15 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0sizeof(HGSMIH= OSTFLAGS))
>> >> > - #define HOST_FLAGS_OFFSET GUEST_HEAP_USABLE_SIZE >> >> > -
>> >> > -+/** Field @pdev of struct drm_device was removed i= n 5.14. This macro
>> >> > -+ * transparently handles this change. Input argume= nt is a pointer
>> >> > -+ * to struct drm_device. */
>> >> > -+#if RTLNX_VER_MIN(5,14,0)
>> >> > -+# define VBOX_DRM_TO_PCI_DEV(_dev) to_pci_dev(_dev= ->dev)
>> >> > -+#else
>> >> > -+# define VBOX_DRM_TO_PCI_DEV(_dev) _dev->pdev >> >> > -+#endif
>> >> > -+
>> >> > - /** How frequently we refresh if the guest is not = providing dirty rectangles. */
>> >> > - #define VBOX_REFRESH_PERIOD (HZ / 2)
>> >> > -
>> >> > -Index: a/src/VBox/Additions/linux/drm/vbox_main.c >> >> > -=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
>> >> > ---- a/src/VBox/Additions/linux/drm/vbox_main.c (rev= ision 89690)
>> >> > -+++ a/src/VBox/Additions/linux/drm/vbox_main.c (rev= ision 90498)
>> >> > -@@ -290,7 +290,7 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0/* Take a command buffer= for each screen from the end of usable VRAM. */
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0vbox->available_vram_= size -=3D vbox->num_crtcs * VBVA_MIN_BUFFER_SIZE;
>> >> > -
>> >> > --=C2=A0 =C2=A0 =C2=A0 vbox->vbva_buffers =3D pci= _iomap_range(vbox->dev->pdev, 0,
>> >> > -+=C2=A0 =C2=A0 =C2=A0 vbox->vbva_buffers =3D pci= _iomap_range(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0,
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 vbox->available_vram_size,
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 vbox->num_crtcs *
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 VBVA_MIN_BUFFER_SIZE);
>> >> > -@@ -311,7 +311,7 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
>> >> > -
>> >> > - err_pci_iounmap:
>> >> > --=C2=A0 =C2=A0 =C2=A0 pci_iounmap(vbox->dev->= pdev, vbox->vbva_buffers);
>> >> > -+=C2=A0 =C2=A0 =C2=A0 pci_iounmap(VBOX_DRM_TO_PCI_D= EV(vbox->dev), vbox->vbva_buffers);
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0return ret;
>> >> > - }
>> >> > -
>> >> > -@@ -318,7 +318,7 @@
>> >> > - static void vbox_accel_fini(struct vbox_private *v= box)
>> >> > - {
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0vbox_disable_accel(vbox)= ;
>> >> > --=C2=A0 =C2=A0 =C2=A0 pci_iounmap(vbox->dev->= pdev, vbox->vbva_buffers);
>> >> > -+=C2=A0 =C2=A0 =C2=A0 pci_iounmap(VBOX_DRM_TO_PCI_D= EV(vbox->dev), vbox->vbva_buffers);
>> >> > - }
>> >> > -
>> >> > - /** Do we support the 4.3 plus mode hint reporting= interface? */
>> >> > -@@ -393,7 +393,7 @@
>> >> > -
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0/* Map guest-heap at end= of vram */
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0vbox->guest_heap =3D<= br> >> >> > --=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 pci_iomap_range= (vbox->dev->pdev, 0, GUEST_HEAP_OFFSET(vbox),
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 pci_iomap_range= (VBOX_DRM_TO_PCI_DEV(vbox->dev), 0, GUEST_HEAP_OFFSET(vbox),
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0GUEST_HEAP_SIZE);
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0if (!vbox->guest_heap= )
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0return -ENOMEM;
>> >> > -@@ -442,7 +442,7 @@
>> >> > - err_destroy_guest_pool:
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0gen_pool_destroy(vbox-&g= t;guest_pool);
>> >> > - err_unmap_guest_heap:
>> >> > --=C2=A0 =C2=A0 =C2=A0 pci_iounmap(vbox->dev->= pdev, vbox->guest_heap);
>> >> > -+=C2=A0 =C2=A0 =C2=A0 pci_iounmap(VBOX_DRM_TO_PCI_D= EV(vbox->dev), vbox->guest_heap);
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0return ret;
>> >> > - }
>> >> > -
>> >> > -@@ -452,7 +452,7 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0cancel_delayed_work(&= ;vbox->refresh_work);
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0vbox_accel_fini(vbox); >> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0gen_pool_destroy(vbox-&g= t;guest_pool);
>> >> > --=C2=A0 =C2=A0 =C2=A0 pci_iounmap(vbox->dev->= pdev, vbox->guest_heap);
>> >> > -+=C2=A0 =C2=A0 =C2=A0 pci_iounmap(VBOX_DRM_TO_PCI_D= EV(vbox->dev), vbox->guest_heap);
>> >> > - }
>> >> > -
>> >> > - #if RTLNX_VER_MIN(4,19,0) || RTLNX_RHEL_MIN(8,3) >> >> > -@@ -567,12 +567,16 @@
>> >> > -
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0size =3D roundup(size, P= AGE_SIZE);
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0if (size =3D=3D 0)
>> >> > -+=C2=A0 =C2=A0 =C2=A0 {
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 D= RM_ERROR("bad size\n");
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0return -EINVAL;
>> >> > -+=C2=A0 =C2=A0 =C2=A0 }
>> >> > -
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0ret =3D vbox_bo_create(d= ev, size, 0, 0, &vboxbo);
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0if (ret) {
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0if (ret !=3D -ERESTARTSYS)
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0DRM_ERROR("failed to allocate GEM ob= ject\n");
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 D= RM_ERROR("failed to allocate GEM (%d)\n", ret);
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0return ret;
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0}
>> >> > -
>> >> > -@@ -628,6 +632,21 @@
>> >> > - {
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0struct vbox_bo *vbox_bo = =3D gem_to_vbox_bo(obj);
>> >> > -
>> >> > -+#if RTLNX_VER_MIN(5,14,0)
>> >> > -+=C2=A0 =C2=A0 =C2=A0 /* Starting from kernel 5.14,= there is a warning appears in dmesg
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0* on attempt to desroy = pinned buffer object. Make sure it is unpinned. */
>> >> > -+=C2=A0 =C2=A0 =C2=A0 while (vbox_bo->bo.pin_cou= nt)
>> >> > -+=C2=A0 =C2=A0 =C2=A0 {
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 i= nt ret;
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 r= et =3D vbox_bo_unpin(vbox_bo);
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 i= f (ret)
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 {=
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 DRM_ERROR("unable to unpin buffer object\n= ");
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 break;
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }=
>> >> > -+=C2=A0 =C2=A0 =C2=A0 }
>> >> > -+#endif
>> >> > -+
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0ttm_bo_put(&vbox_bo-= >bo);
>> >> > - }
>> >> > -
>> >> > -@@ -648,7 +667,7 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0u32 handle, u64 *offset)
>> >> > - {
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0struct drm_gem_object *o= bj;
>> >> > --=C2=A0 =C2=A0 =C2=A0 int ret;
>> >> > -+=C2=A0 =C2=A0 =C2=A0 int ret =3D 0;
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0struct vbox_bo *bo;
>> >> > -
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0mutex_lock(&dev->= struct_mutex);
>> >> > -@@ -665,8 +684,15 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0bo =3D gem_to_vbox_bo(ob= j);
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0*offset =3D vbox_bo_mmap= _offset(bo);
>> >> > -
>> >> > -+#if RTLNX_VER_MIN(5,14,0)
>> >> > -+=C2=A0 =C2=A0 =C2=A0 ret =3D drm_vma_node_allow(&a= mp;bo->bo.base.vma_node, file);
>> >> > -+=C2=A0 =C2=A0 =C2=A0 if (ret)
>> >> > -+=C2=A0 =C2=A0 =C2=A0 {
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 D= RM_ERROR("unable to grant previladges to user");
>> >> > -+=C2=A0 =C2=A0 =C2=A0 }
>> >> > -+#endif
>> >> > -+
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0drm_gem_object_put(obj);=
>> >> > --=C2=A0 =C2=A0 =C2=A0 ret =3D 0;
>> >> > -
>> >> > - out_unlock:
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0mutex_unlock(&dev-&g= t;struct_mutex);
>> >> > -Index: a/src/VBox/Additions/linux/drm/vbox_mode.c >> >> > -=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
>> >> > ---- a/src/VBox/Additions/linux/drm/vbox_mode.c (rev= ision 89690)
>> >> > -+++ a/src/VBox/Additions/linux/drm/vbox_mode.c (rev= ision 90498)
>> >> > -@@ -245,6 +245,10 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0vbox_bo_unpin(bo);
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0vbox_bo_unreserve(bo);
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0}
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 e= lse
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 {=
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 DRM_ERROR("unable to lock buffer object: e= rror %d\n", ret);
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }=
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0}
>> >> > -
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0if (&vbox->fbdev-= >afb =3D=3D vbox_fb)
>> >> > -@@ -856,7 +860,9 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0vbox->cursor_data_siz= e =3D data_size;
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0dst =3D vbox->cursor_= data;
>> >> > -
>> >> > --#if RTLNX_VER_MIN(5,12,0)
>> >> > -+#if RTLNX_VER_MIN(5,14,0)
>> >> > -+=C2=A0 =C2=A0 =C2=A0 ret =3D ttm_bo_kmap(&bo-&= gt;bo, 0, bo->bo.resource->num_pages, &uobj_map);
>> >> > -+#elif RTLNX_VER_MIN(5,12,0)
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0ret =3D ttm_bo_kmap(&= ;bo->bo, 0, bo->bo.mem.num_pages, &uobj_map);
>> >> > - #else
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0ret =3D ttm_bo_kmap(&= ;bo->bo, 0, bo->bo.num_pages, &uobj_map);
>> >> > -Index: a/src/VBox/Additions/linux/drm/vbox_ttm.c >> >> > -=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
>> >> > ---- a/src/VBox/Additions/linux/drm/vbox_ttm.c=C2=A0= (revision 89690)
>> >> > -+++ a/src/VBox/Additions/linux/drm/vbox_ttm.c=C2=A0= (revision 90498)
>> >> > -@@ -41,6 +41,10 @@
>> >> > - # include <drm/ttm/ttm_page_alloc.h>
>> >> > - #endif
>> >> > -
>> >> > -+#if RTLNX_VER_MIN(5,14,0)
>> >> > -+# include <drm/ttm/ttm_range_manager.h>
>> >> > -+#endif
>> >> > -+
>> >> > - #if RTLNX_VER_MAX(3,18,0) && !RTLNX_RHEL_M= AJ_PREREQ(7,2)
>> >> > - #define PLACEMENT_FLAGS(placement) (placement)
>> >> > - #else
>> >> > -@@ -174,11 +178,13 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0*pl =3D vboxbo->place= ment;
>> >> > - }
>> >> > -
>> >> > -+#if RTLNX_VER_MAX(5,14,0)
>> >> > - static int vbox_bo_verify_access(struct ttm_buffer= _object *bo,
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 struct file = *filp)
>> >> > - {
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
>> >> > - }
>> >> > -+#endif
>> >> > -
>> >> > - #if RTLNX_VER_MAX(5,10,0)
>> >> > - static int vbox_ttm_io_mem_reserve(struct ttm_bo_d= evice *bdev,
>> >> > -@@ -234,10 +240,10 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0mem->bus.caching =3D ttm_write_combined;
>> >> > - # endif
>> >> > - # if RTLNX_VER_MIN(5,10,0)
>> >> > --=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 m= em->bus.offset =3D (mem->start << PAGE_SHIFT) + pci_resource_st= art(vbox->dev->pdev, 0);
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 m= em->bus.offset =3D (mem->start << PAGE_SHIFT) + pci_resource_st= art(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0);
>> >> > - # else
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0mem->bus.offset =3D mem->start << PAGE_SHIFT;
>> >> > --=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 m= em->start =3D pci_resource_start(vbox->dev->pdev, 0);
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 m= em->start =3D pci_resource_start(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0);<= br> >> >> > - # endif
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0mem->bus.is_iomem =3D true;
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0break;
>> >> > -@@ -373,7 +379,9 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0.eviction_valuable =3D t= tm_bo_eviction_valuable,
>> >> > - #endif
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0.evict_flags =3D vbox_bo= _evict_flags,
>> >> > -+#if RTLNX_VER_MAX(5,14,0)
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0.verify_access =3D vbox_= bo_verify_access,
>> >> > -+#endif
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0.io_mem_reserve =3D &= ;vbox_ttm_io_mem_reserve,
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0.io_mem_free =3D &vb= ox_ttm_io_mem_free,
>> >> > - #if RTLNX_VER_MIN(4,12,0) || RTLNX_RHEL_MAJ_PREREQ= (7,5)
>> >> > -@@ -451,12 +459,12 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0}
>> >> > -
>> >> > - #ifdef DRM_MTRR_WC
>> >> > --=C2=A0 =C2=A0 =C2=A0 vbox->fb_mtrr =3D drm_mtrr= _add(pci_resource_start(dev->pdev, 0),
>> >> > --=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0pci_resource_len(dev->pdev, 0),
>> >> > -+=C2=A0 =C2=A0 =C2=A0 vbox->fb_mtrr =3D drm_mtrr= _add(pci_resource_start(VBOX_DRM_TO_PCI_DEV(dev), 0),
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0pci_resource_len(VBOX_DRM_TO_PCI_DEV(dev), 0),
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 DRM_MTRR_WC);
>> >> > - #else
>> >> > --=C2=A0 =C2=A0 =C2=A0 vbox->fb_mtrr =3D arch_phy= s_wc_add(pci_resource_start(dev->pdev, 0),
>> >> > --=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0pci_resource_len(dev->pdev, 0));
>> >> > -+=C2=A0 =C2=A0 =C2=A0 vbox->fb_mtrr =3D arch_phy= s_wc_add(pci_resource_start(VBOX_DRM_TO_PCI_DEV(dev), 0),
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0pci_resource_len(VBOX_DRM_TO_PCI_DEV(dev), 0));
>> >> > - #endif
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
>> >> > -
>> >> > -@@ -477,8 +485,8 @@
>> >> > - {
>> >> > - #ifdef DRM_MTRR_WC
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0drm_mtrr_del(vbox->fb= _mtrr,
>> >> > --=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0pci_resource_start(vbox->dev->pdev, 0),
>> >> > --=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0pci_resource_len(vbox->dev->pdev, 0), DRM_MTRR_WC= );
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0pci_resource_start(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0= ),
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0pci_resource_len(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0),= DRM_MTRR_WC);
>> >> > - #else
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0arch_phys_wc_del(vbox-&g= t;fb_mtrr);
>> >> > - #endif
>> >> > -@@ -560,6 +568,9 @@
>> >> > - static const struct drm_gem_object_funcs vbox_drm_= gem_object_funcs =3D {
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0.free=C2=A0 =C2=A0=3D vb= ox_gem_free_object,
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0.print_info =3D drm_gem_= ttm_print_info,
>> >> > -+# if RTLNX_VER_MIN(5,14,0)
>> >> > -+=C2=A0 =C2=A0 =C2=A0 .mmap =3D drm_gem_ttm_mmap, >> >> > -+# endif
>> >> > - };
>> >> > - #endif
>> >> > -
>> >> > -@@ -598,6 +609,17 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 sizeof(struct vbox_bo));
>> >> > - #endif
>> >> > -
>> >> > -+#if RTLNX_VER_MIN(5,14,0)
>> >> > -+=C2=A0 =C2=A0 =C2=A0 /* Initialization of the foll= owing was removed from DRM stack
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0* in 5.14, so we need t= o do it manually. */
>> >> > -+=C2=A0 =C2=A0 =C2=A0 vboxbo->bo.base.funcs =3D = &vbox_drm_gem_object_funcs;
>> >> > -+=C2=A0 =C2=A0 =C2=A0 kref_init(&vboxbo->bo.= base.refcount);
>> >> > -+=C2=A0 =C2=A0 =C2=A0 vboxbo->bo.base.size =3D s= ize;
>> >> > -+=C2=A0 =C2=A0 =C2=A0 vboxbo->bo.base.dev =3D dev;<= br> >> >> > -+=C2=A0 =C2=A0 =C2=A0 dma_resv_init(&vboxbo->= ;bo.base._resv);
>> >> > -+=C2=A0 =C2=A0 =C2=A0 drm_vma_node_reset(&vboxb= o->bo.base.vma_node);
>> >> > -+#endif
>> >> > -+
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0ret =3D ttm_bo_init(&= ;vbox->ttm.bdev, &vboxbo->bo, size,
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ttm_bo_type_device, &vboxbo-&g= t;placement,
>> >> > - #if RTLNX_VER_MAX(4,17,0) && !RTLNX_RHEL_M= AJ_PREREQ(7,6) && !RTLNX_SUSE_MAJ_PREREQ(15,1) && !RTLNX_SU= SE_MAJ_PREREQ(12,5)
>> >> > -@@ -613,7 +635,11 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0NULL, vbox_bo_ttm_destroy);
>> >> > - #endif
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0if (ret)
>> >> > --=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 g= oto err_free_vboxbo;
>> >> > -+=C2=A0 =C2=A0 =C2=A0 {
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 /= * In case of failure, ttm_bo_init() supposed to call
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0* vbox_bo_ttm_destroy() which in turn will free @vboxbo. */
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 g= oto err_exit;
>> >> > -+=C2=A0 =C2=A0 =C2=A0 }
>> >> > -
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0*pvboxbo =3D vboxbo;
>> >> > -
>> >> > -@@ -621,12 +647,15 @@
>> >> > -
>> >> > - err_free_vboxbo:
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0kfree(vboxbo);
>> >> > -+err_exit:
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0return ret;
>> >> > - }
>> >> > -
>> >> > - static inline u64 vbox_bo_gpu_offset(struct vbox_b= o *bo)
>> >> > - {
>> >> > --#if RTLNX_VER_MIN(5,9,0) || RTLNX_RHEL_MIN(8,4) ||= RTLNX_SUSE_MAJ_PREREQ(15,3)
>> >> > -+#if RTLNX_VER_MIN(5,14,0)
>> >> > -+=C2=A0 =C2=A0 =C2=A0 return bo->bo.resource->= ;start << PAGE_SHIFT;
>> >> > -+#elif RTLNX_VER_MIN(5,9,0) || RTLNX_RHEL_MIN(8,4) = || RTLNX_SUSE_MAJ_PREREQ(15,3)
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0return bo->bo.mem.sta= rt << PAGE_SHIFT;
>> >> > - #else
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0return bo->bo.offset;=
>> >> > -@@ -685,7 +714,7 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0struct ttm_operation_ctx= ctx =3D { false, false };
>> >> > - # endif
>> >> > - #endif
>> >> > --=C2=A0 =C2=A0 =C2=A0 int ret;
>> >> > -+=C2=A0 =C2=A0 =C2=A0 int ret =3D 0;
>> >> > - #if RTLNX_VER_MAX(5,11,0)
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0int i;
>> >> > - #endif
>> >> > -@@ -765,6 +794,7 @@
>> >> > - {
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0struct drm_file *file_pr= iv;
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0struct vbox_private *vbo= x;
>> >> > -+=C2=A0 =C2=A0 =C2=A0 int ret =3D -EINVAL;
>> >> > -
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0if (unlikely(vma->vm_= pgoff < DRM_FILE_PAGE_OFFSET))
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0return -EINVAL;
>> >> > -@@ -772,5 +802,12 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0file_priv =3D filp->p= rivate_data;
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0vbox =3D file_priv->m= inor->dev->dev_private;
>> >> > -
>> >> > --=C2=A0 =C2=A0 =C2=A0 return ttm_bo_mmap(filp, vma,= &vbox->ttm.bdev);
>> >> > -+#if RTLNX_VER_MIN(5,14,0)
>> >> > -+=C2=A0 =C2=A0 =C2=A0 if (drm_dev_is_unplugged(file= _priv->minor->dev))
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 r= eturn -ENODEV;
>> >> > -+=C2=A0 =C2=A0 =C2=A0 ret =3D drm_gem_mmap(filp, vm= a);
>> >> > -+#else
>> >> > -+=C2=A0 =C2=A0 =C2=A0 ret =3D ttm_bo_mmap(filp, vma= , &vbox->ttm.bdev);
>> >> > -+#endif
>> >> > -+=C2=A0 =C2=A0 =C2=A0 return ret;
>> >> > - }
>> >> > -Index: a/src/VBox/Additions/linux/drm/vbox_fb.c
>> >> > -=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
>> >> > ---- a/src/VBox/Additions/linux/drm/vbox_fb.c=C2=A0 = =C2=A0(revision 89690)
>> >> > -+++ a/src/VBox/Additions/linux/drm/vbox_fb.c=C2=A0 = =C2=A0(revision 90498)
>> >> > -@@ -301,7 +301,9 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0return ret;
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0}
>> >> > -
>> >> > --#if RTLNX_VER_MIN(5,12,0)
>> >> > -+#if RTLNX_VER_MIN(5,14,0)
>> >> > -+=C2=A0 =C2=A0 =C2=A0 ret =3D ttm_bo_kmap(&bo-&= gt;bo, 0, bo->bo.resource->num_pages, &bo->kmap);
>> >> > -+#elif RTLNX_VER_MIN(5,12,0)
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0ret =3D ttm_bo_kmap(&= ;bo->bo, 0, bo->bo.mem.num_pages, &bo->kmap);
>> >> > - #else
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0ret =3D ttm_bo_kmap(&= ;bo->bo, 0, bo->bo.num_pages, &bo->kmap);
>> >> > -@@ -337,8 +339,8 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 * This seems to be done= for safety checking that the framebuffer
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 * is not registered twi= ce by different drivers.
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 */
>> >> > --=C2=A0 =C2=A0 =C2=A0 info->apertures->ranges= [0].base =3D pci_resource_start(dev->pdev, 0);
>> >> > --=C2=A0 =C2=A0 =C2=A0 info->apertures->ranges= [0].size =3D pci_resource_len(dev->pdev, 0);
>> >> > -+=C2=A0 =C2=A0 =C2=A0 info->apertures->ranges= [0].base =3D pci_resource_start(VBOX_DRM_TO_PCI_DEV(dev), 0);
>> >> > -+=C2=A0 =C2=A0 =C2=A0 info->apertures->ranges= [0].size =3D pci_resource_len(VBOX_DRM_TO_PCI_DEV(dev), 0);
>> >> > -
>> >> > - #if RTLNX_VER_MIN(5,2,0) || RTLNX_RHEL_MAJ_PREREQ(= 8,2)
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0/*
>> >> > -Index: a/src/VBox/Additions/linux/drm/vbox_drv.c >> >> > -=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
>> >> > ---- a/src/VBox/Additions/linux/drm/vbox_drv.c=C2=A0= (revision 89690)
>> >> > -+++ a/src/VBox/Additions/linux/drm/vbox_drv.c=C2=A0= (revision 90498)
>> >> > -@@ -43,6 +43,10 @@
>> >> > - # include <drm/drm_probe_helper.h>
>> >> > - #endif
>> >> > -
>> >> > -+#if RTLNX_VER_MIN(5,14,0)
>> >> > -+# include <drm/drm_aperture.h>
>> >> > -+#endif
>> >> > -+
>> >> > - #include "version-generated.h"
>> >> > - #include "revision-generated.h"
>> >> > -
>> >> > -@@ -65,12 +69,23 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0struct drm_device *dev = =3D NULL;
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0int ret =3D 0;
>> >> > -
>> >> > -+# if RTLNX_VER_MIN(5,14,0)
>> >> > -+=C2=A0 =C2=A0 =C2=A0 ret =3D drm_aperture_remove_c= onflicting_pci_framebuffers(pdev, "vboxvideofb");
>> >> > -+=C2=A0 =C2=A0 =C2=A0 if (ret)
>> >> > -+=C2=A0 =C2=A0 =C2=A0 {
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 p= rintk("unable to remove conflicting framebuffer devices\n");
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 r= eturn ret;
>> >> > -+=C2=A0 =C2=A0 =C2=A0 }
>> >> > -+# endif /* 5.14 */
>> >> > -+
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0dev =3D drm_dev_alloc(&a= mp;driver, &pdev->dev);
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0if (IS_ERR(dev)) {
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0ret =3D PTR_ERR(dev);
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0goto err_drv_alloc;
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0}
>> >> > -+#if RTLNX_VER_MAX(5,14,0)
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0dev->pdev =3D pdev; >> >> > -+#endif
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0pci_set_drvdata(pdev, de= v);
>> >> > -
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0ret =3D vbox_driver_load= (dev);
>> >> > -@@ -125,7 +140,7 @@
>> >> > -
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0drm_kms_helper_poll_disa= ble(dev);
>> >> > -
>> >> > --=C2=A0 =C2=A0 =C2=A0 pci_save_state(dev->pdev);=
>> >> > -+=C2=A0 =C2=A0 =C2=A0 pci_save_state(VBOX_DRM_TO_PC= I_DEV(dev));
>> >> > -
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0drm_fb_helper_set_suspen= d_unlocked(&vbox->fbdev->helper, true);
>> >> > -
>> >> > -@@ -147,7 +162,7 @@
>> >> > - {
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0int ret;
>> >> > -
>> >> > --=C2=A0 =C2=A0 =C2=A0 if (pci_enable_device(dev->= ;pdev))
>> >> > -+=C2=A0 =C2=A0 =C2=A0 if (pci_enable_device(VBOX_DR= M_TO_PCI_DEV(dev)))
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0return -EIO;
>> >> > -
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0ret =3D vbox_drm_thaw(de= v);
>> >> > -Index: a/src/VBox/Additions/linux/drm/vbox_irq.c >> >> > -=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
>> >> > ---- a/src/VBox/Additions/linux/drm/vbox_irq.c=C2=A0= (revision 89690)
>> >> > -+++ a/src/VBox/Additions/linux/drm/vbox_irq.c=C2=A0= (revision 90498)
>> >> > -@@ -206,7 +206,7 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0INIT_WORK(&vbox->= hotplug_work, vbox_hotplug_worker);
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0vbox_update_mode_hints(v= box);
>> >> > - #if RTLNX_VER_MIN(3,16,0) || RTLNX_RHEL_MAJ_PREREQ= (7,1)
>> >> > --=C2=A0 =C2=A0 =C2=A0 return drm_irq_install(vbox-&= gt;dev, vbox->dev->pdev->irq);
>> >> > -+=C2=A0 =C2=A0 =C2=A0 return drm_irq_install(vbox-&= gt;dev, VBOX_DRM_TO_PCI_DEV(vbox->dev)->irq);
>> >> > - #else
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0return drm_irq_install(v= box->dev);
>> >> > - #endif
>> >> > diff --git a/meta-oe/recipes-support/vboxguestdriver= s/vboxguestdrivers/r90497-regops-5.14-fix.patch b/meta-oe/recipes-support/v= boxguestdrivers/vboxguestdrivers/r90497-regops-5.14-fix.patch
>> >> > deleted file mode 100644
>> >> > index 0d960fa4f..000000000
>> >> > --- a/meta-oe/recipes-support/vboxguestdrivers/vboxg= uestdrivers/r90497-regops-5.14-fix.patch
>> >> > +++ /dev/null
>> >> > @@ -1,118 +0,0 @@
>> >> > -Subject: Fix regops build errors with linux 5.14 >> >> > -
>> >> > -Upstream-Status: backport
>> >> > -
>> >> > -svn-id: r90497
>> >> > -
>> >> > -Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com&g= t;
>> >> > -
>> >> > -Index: a/src/VBox/Additions/linux/sharedfolders/reg= ops.c
>> >> > -=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
>> >> > ---- a/src/VBox/Additions/linux/sharedfolders/regops= .c=C2=A0 (revision 88716)
>> >> > -+++ a/src/VBox/Additions/linux/sharedfolders/regops= .c=C2=A0 (revision 90497)
>> >> > -@@ -2126,7 +2126,11 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0int=C2=A0 =C2=A0 rc=C2=A0 =C2= =A0 =C2=A0 =C2=A0=3D 0;
>> >> > -
>> >> > -=C2=A0 =C2=A0 =C2=A0Assert(iov_iter_count(iter) + p= Stash->cb > 0);
>> >> > -+# if RTLNX_VER_MIN(5,14,0)
>> >> > -+=C2=A0 =C2=A0 if (!(iter->iter_type & ITER_= KVEC)) {
>> >> > -+#else
>> >> > -=C2=A0 =C2=A0 =C2=A0if (!(iter->type & ITER_= KVEC)) {
>> >> > -+#endif
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0/*
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 * Do we have a s= tashed page?
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 */
>> >> > -@@ -2372,7 +2376,9 @@
>> >> > - static size_t vbsf_iter_max_span_of_pages(struct i= ov_iter *iter)
>> >> > - {
>> >> > -=C2=A0 =C2=A0 =C2=A0size_t cPages;
>> >> > --# if RTLNX_VER_MIN(3,16,0)
>> >> > -+#if RTLNX_VER_MIN(5,14,0)
>> >> > -+=C2=A0 =C2=A0 if (iter_is_iovec(iter) || (iter->= ;iter_type & ITER_KVEC)) {
>> >> > -+#elif RTLNX_VER_MIN(3,16,0)
>> >> > -=C2=A0 =C2=A0 =C2=A0if (iter_is_iovec(iter) || (ite= r->type & ITER_KVEC)) {
>> >> > - #endif
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0const struct iove= c *pCurIov=C2=A0 =C2=A0 =3D iter->iov;
>> >> > -@@ -2436,7 +2442,11 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0} else {
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Won't both= er with accurate counts for the next two types, just make
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 some roug= h estimates (does pipes have segments?): */
>> >> > -+#=C2=A0 if RTLNX_VER_MIN(5,14,0)
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 size_t cSegs =3D iter-= >iter_type & ITER_BVEC ? RT_MAX(1, iter->nr_segs) : 1;
>> >> > -+#=C2=A0 else
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0size_t cSegs =3D = iter->type & ITER_BVEC ? RT_MAX(1, iter->nr_segs) : 1;
>> >> > -+#endif
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0cPages =3D (iov_i= ter_count(iter) + (PAGE_SIZE * 2 - 2) * cSegs) >> PAGE_SHIFT;
>> >> > -=C2=A0 =C2=A0 =C2=A0}
>> >> > - # endif
>> >> > -@@ -2588,8 +2598,14 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0struct vbsf_reg_info=C2=A0 =C2= =A0*sf_r=C2=A0 =C2=A0 =C2=A0 =C2=A0=3D kio->ki_filp->private_data; >> >> > -=C2=A0 =C2=A0 =C2=A0struct vbsf_super_info *pSuperI= nfo =3D VBSF_GET_SUPER_INFO(inode->i_sb);
>> >> > -
>> >> > -+#if RTLNX_VER_MIN(5,14,0)
>> >> > -=C2=A0 =C2=A0 =C2=A0SFLOGFLOW(("vbsf_reg_read_= iter: inode=3D%p file=3D%p size=3D%#zx off=3D%#llx type=3D%#x\n",
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0inode, kio->ki_filp, cbToRead, kio->ki_pos, iter->iter_type)= );
>> >> > -+#else
>> >> > -+=C2=A0 =C2=A0 SFLOGFLOW(("vbsf_reg_read_iter:= inode=3D%p file=3D%p size=3D%#zx off=3D%#llx type=3D%#x\n",
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 inode, kio->ki_filp, cbToRead, kio->ki_pos, iter->type)); >> >> > -+#endif
>> >> > -+
>> >> > -=C2=A0 =C2=A0 =C2=A0AssertReturn(S_ISREG(inode->= i_mode), -EINVAL);
>> >> > -
>> >> > -=C2=A0 =C2=A0 =C2=A0/*
>> >> > -@@ -2823,9 +2839,13 @@
>> >> > -=C2=A0 =C2=A0 =C2=A0bool const=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 fAppend=C2=A0 =C2=A0 =3D RT_BOOL(kio->ki_fil= p->f_flags & O_APPEND);
>> >> > - # endif
>> >> > -
>> >> > --
>> >> > -+#if RTLNX_VER_MIN(5,14,0)
>> >> > -=C2=A0 =C2=A0 =C2=A0SFLOGFLOW(("vbsf_reg_write= _iter: inode=3D%p file=3D%p size=3D%#zx off=3D%#llx type=3D%#x\n",
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0inode, kio->ki_filp, cbToWrite, offFile, iter->iter_type));
>> >> > -+#else
>> >> > -+=C2=A0 =C2=A0 SFLOGFLOW(("vbsf_reg_write_iter= : inode=3D%p file=3D%p size=3D%#zx off=3D%#llx type=3D%#x\n",
>> >> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 inode, kio->ki_filp, cbToWrite, offFile, iter->type));
>> >> > -+#endif
>> >> > -=C2=A0 =C2=A0 =C2=A0AssertReturn(S_ISREG(inode->= i_mode), -EINVAL);
>> >> > -
>> >> > -=C2=A0 =C2=A0 =C2=A0/*
>> >> > -@@ -3737,7 +3757,27 @@
>> >> > - }
>> >> > - #endif /* KERNEL_VERSION >=3D 2.6.24 */
>> >> > -
>> >> > -+#if RTLNX_VER_MIN(5,14,0)
>> >> > -+static int vbsf_write_end(struct file *file, struc= t address_space *mapping,
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 loff_t pos, unsigned int len, unsigned int copied,
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 struct page *page, void *fsdata)
>> >> > -+{
>> >> > -+=C2=A0 =C2=A0 static uint64_t volatile s_cCalls = =3D 0;
>> >> > -+=C2=A0 =C2=A0 if (s_cCalls++ < 16)
>> >> > -+=C2=A0 =C2=A0 {
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 printk("vboxsf: U= nexpected call to vbsf_write_end(pos=3D%#llx len=3D%#x)! Please report.\n&q= uot;,
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0(unsigned long long)pos, len);
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 RTLogBackdoorPrintf(&q= uot;vboxsf: Unexpected call to vbsf_write_end(pos=3D%#llx len=3D%#x)!=C2=A0= Please report.\n",
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (unsigned long long)pos, l= en);
>> >> > -+# ifdef WARN_ON
>> >> > -+=C2=A0 =C2=A0 =C2=A0 =C2=A0 WARN_ON(1);
>> >> > -+# endif
>> >> > -+=C2=A0 =C2=A0 }
>> >> > -
>> >> > -+=C2=A0 =C2=A0 return -ENOTSUPP;
>> >> > -+}
>> >> > -+#endif
>> >> > -+
>> >> > - #if RTLNX_VER_MIN(2,4,10)
>> >> > -
>> >> > - # ifdef VBOX_UEK
>> >> > -@@ -3791,8 +3831,11 @@
>> >> > - #if RTLNX_VER_MIN(2,5,12)
>> >> > -=C2=A0 =C2=A0 =C2=A0.set_page_dirty =3D __set_page_= dirty_buffers,
>> >> > - #endif
>> >> > --#if RTLNX_VER_MIN(2,6,24)
>> >> > -+#if RTLNX_VER_MIN(5,14,0)
>> >> > -=C2=A0 =C2=A0 =C2=A0.write_begin=C2=A0 =C2=A0 =3D v= bsf_write_begin,
>> >> > -+=C2=A0 =C2=A0 .write_end=C2=A0 =C2=A0 =C2=A0 =3D v= bsf_write_end,
>> >> > -+#elif RTLNX_VER_MIN(2,6,24)
>> >> > -+=C2=A0 =C2=A0 .write_begin=C2=A0 =C2=A0 =3D vbsf_w= rite_begin,
>> >> > -=C2=A0 =C2=A0 =C2=A0.write_end=C2=A0 =C2=A0 =C2=A0 = =3D simple_write_end,
>> >> > - #elif RTLNX_VER_MIN(2,5,45)
>> >> > -=C2=A0 =C2=A0 =C2=A0.prepare_write=C2=A0 =3D simple= _prepare_write,
>> >> > diff --git a/meta-oe/recipes-support/vboxguestdriver= s/vboxguestdrivers_6.1.26.bb b/meta-oe/recipes-support/vboxgu= estdrivers/vboxguestdrivers_6.1.28.bb
>> >> > similarity index 92%
>> >> > rename from meta-oe/recipes-support/vboxguestdrivers= /vboxguestdrivers_6.1.26.bb
>> >> > rename to meta-oe/recipes-support/vboxguestdrivers/<= a href=3D"http://vboxguestdrivers_6.1.28.bb" rel=3D"noreferrer" target=3D"_= blank">vboxguestdrivers_6.1.28.bb
>> >> > index 84651ae64..c7e73b222 100644
>> >> > --- a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.26.bb
>> >> > +++ b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.28.bb
>> >> > @@ -13,12 +13,10 @@ VBOX_NAME =3D "VirtualBox-$= {PV}"
>> >> >
>> >> >=C2=A0 SRC_URI =3D "http://download.virtualbox.org/virtualbox/${PV}/${VB= OX_NAME}.tar.bz2 \
>> >> >=C2=A0 =C2=A0 =C2=A0 file://Makefile.utils \
>> >> > -=C2=A0 =C2=A0 file://r89690-5.14-fixes.patch \
>> >> > -=C2=A0 =C2=A0 file://r90497-regops-5.14-fix.patch \=
>> >> >=C2=A0 "
>> >> >
>> >> > -SRC_URI[md5sum] =3D "fce04bbef244b4df1a50e53d1= 32d3e6f"
>> >> > -SRC_URI[sha256sum] =3D "0212602eea878d6c9fd7f4= a3e0182da3e4505f31d25f5539fb8f7b1fbe366195"
>> >> > +SRC_URI[md5sum] =3D "c6efae8dc115b90c6124e1312= 6794c4f"
>> >> > +SRC_URI[sha256sum] =3D "8d34993d8e9c0cf35e7bd4= 4dd26c8c757f17a3b7d5a64052f945d00fd798ebfe"
>> >> >
>> >> >=C2=A0 S ?=3D "${WORKDIR}/vbox_module"
>> >> >=C2=A0 S:task-patch =3D "${WORKDIR}/${VBOX_NAME}= "
>> >> > --
>> >> > 2.25.1
>> >> >
>> >> >
>> >> > -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-
>> >> > Links: You receive all messages sent to this group.<= br> >> >> > View/Reply Online (#93478): https://lists.openembedded.org/g/openembedded-devel/message= /93478
>> >> > Mute This Topic: https://li= sts.openembedded.org/mt/86462001/1997914
>> >> > Group Owner: openembedded-devel+owner@li= sts.openembedded.org
>> >> > Unsubscribe: https:/= /lists.openembedded.org/g/openembedded-devel/unsub [raj.khem@gmail.com]
>> >> > -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-
>> >> >



--
- Thou shalt not follow the NULL pointer, for chaos and madness await
thee at its end
- "Use the force Harry" - Gandalf, Star Trek II
--000000000000c7fe4305cef66621--