commit: e3b36a12c3fee777b63bea55e9cc9f5691cd0fce Author: Viorel Munteanu <ceamac <AT> gentoo <DOT> org> AuthorDate: Fri Feb 20 18:22:49 2026 +0000 Commit: Viorel Munteanu <ceamac <AT> gentoo <DOT> org> CommitDate: Fri Feb 20 18:33:25 2026 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=e3b36a12
app-emulation/virtualbox-modules: kernel 6.19 support Bug: https://bugs.gentoo.org/970012 Signed-off-by: Viorel Munteanu <ceamac <AT> gentoo.org> .../virtualbox-modules-7.2.6-kernel-6.19-1.patch | 243 +++++++++++++++++++++ .../virtualbox-modules-7.2.6-kernel-6.19-2.patch | 53 +++++ .../virtualbox-modules-7.2.6-kernel-6.19-3.patch | 40 ++++ .../virtualbox-modules-7.2.6-r1.ebuild | 52 +++++ 4 files changed, 388 insertions(+) diff --git a/app-emulation/virtualbox-modules/files/virtualbox-modules-7.2.6-kernel-6.19-1.patch b/app-emulation/virtualbox-modules/files/virtualbox-modules-7.2.6-kernel-6.19-1.patch new file mode 100644 index 000000000000..ff31366604c8 --- /dev/null +++ b/app-emulation/virtualbox-modules/files/virtualbox-modules-7.2.6-kernel-6.19-1.patch @@ -0,0 +1,243 @@ +https://github.com/VirtualBox/virtualbox/commit/280303b3f03d7087b9c955088a3cf499414f6ec1 + +From 280303b3f03d7087b9c955088a3cf499414f6ec1 Mon Sep 17 00:00:00 2001 +From: Vadim Galitsyn <[email protected]> +Date: Tue, 17 Feb 2026 15:00:09 +0000 +Subject: [PATCH] Linux host: Introduce initial support for kernel 6.19 + bugref:11038. + +svn:sync-xref-src-repo-rev: r172809 +--- a/vboxdrv/linux/SUPDrv-linux.c ++++ b/vboxdrv/linux/SUPDrv-linux.c +@@ -190,6 +190,12 @@ static bool g_fEnabledHwvirtUsingKvm; + static int (*g_pfnKvmEnableVirtualization)(void); + /** Function pointer to kvm_disable_virtualization(). */ + static void (*g_pfnKvmDisableVirtualization)(void); ++# if RTLNX_VER_MIN(6,19,0) ++/** Function pointer to cr4_update_irqsoff(). */ ++static void (*g_pfnCr4UpdateIrqsoff)(unsigned long set, unsigned long clear); ++/** Function pointer to cr4_read_shadow(). */ ++static unsigned long (*g_pfnCr4ReadShadow)(void); ++# endif + /** Pointer to the KVM hardware specific module. */ + struct module *g_pKvmHwvirtModule; + #endif +@@ -395,6 +401,28 @@ static int supdrvLinuxInitKvmSymbols(void) + void *pfnDisable = __symbol_get("kvm_disable_virtualization"); + if (pfnDisable) + { ++# if RTLNX_VER_MIN(6,19,0) ++ void *pfnCr4UpdateIrqsoff = __symbol_get("cr4_update_irqsoff"); ++ void *pfnRr4ReadShadow = __symbol_get("cr4_read_shadow"); ++ ++ if ( pfnCr4UpdateIrqsoff ++ && pfnRr4ReadShadow) ++ { ++ g_pfnCr4UpdateIrqsoff = pfnCr4UpdateIrqsoff; ++ g_pfnCr4ReadShadow = pfnRr4ReadShadow; ++ ++ printk(KERN_INFO "vboxdrv: Found extra KVM hardware-virtualization symbols\n"); ++ } ++ else ++ { ++ printk(KERN_WARNING "vboxdrv: Failed to find extra KVM hardware-virtualization symbols\n"); ++ ++ if (pfnCr4UpdateIrqsoff) ++ symbol_put_addr(pfnCr4UpdateIrqsoff); ++ if (pfnRr4ReadShadow) ++ symbol_put_addr(pfnRr4ReadShadow); ++ } ++#endif + /* + * Try to obtain a reference to kvm_intel/kvm_amd module in addition to the + * reference to the kvm module. If we fail, we will not try to use KVM for +@@ -479,6 +507,18 @@ static void supdrvLinuxTermKvmSymbols(void) + symbol_put_addr(g_pfnKvmDisableVirtualization); + g_pfnKvmDisableVirtualization = NULL; + } ++# if RTLNX_VER_MIN(6,19,0) ++ if (g_pfnCr4UpdateIrqsoff) ++ { ++ symbol_put_addr(g_pfnCr4UpdateIrqsoff); ++ g_pfnCr4UpdateIrqsoff = NULL; ++ } ++ if (g_pfnCr4ReadShadow) ++ { ++ symbol_put_addr(g_pfnCr4ReadShadow); ++ g_pfnCr4ReadShadow = NULL; ++ } ++#endif + if (g_pKvmHwvirtModule) + { + module_put(g_pKvmHwvirtModule); +@@ -1159,6 +1199,35 @@ SUPR0DECL(int) SUPDrvLinuxLdrDeregisterWrappedModule(PCSUPLDRWRAPPEDMODULE pWrap + } + EXPORT_SYMBOL(SUPDrvLinuxLdrDeregisterWrappedModule); + ++/** ++ * Wrapper function for cr4_update_irqsoff() which was ++ * exported only for KVM starting from kernel 6.19. ++ */ ++static void supdrvLinux_cr4_update_irqsoff(unsigned long set, unsigned long clear) ++{ ++#if RTLNX_VER_MIN(6,19,0) && defined(SUPDRV_LINUX_HAS_KVM_HWVIRT_API) ++ if (g_pfnCr4UpdateIrqsoff) ++ g_pfnCr4UpdateIrqsoff(set, clear); ++#else ++ cr4_update_irqsoff(set, clear); ++#endif ++} ++ ++/** ++ * Wrapper function for supdrvLinux_cr4_read_shadow() which was ++ * exported only for KVM starting from kernel 6.19. ++ */ ++static unsigned long supdrvLinux_cr4_read_shadow(void) ++{ ++ unsigned long cr4 = 0; ++#if RTLNX_VER_MIN(6,19,0) && defined(SUPDRV_LINUX_HAS_KVM_HWVIRT_API) ++ if (g_pfnCr4ReadShadow) ++ cr4 = g_pfnCr4ReadShadow(); ++#else ++ cr4 = cr4_read_shadow(); ++#endif ++ return cr4; ++} + + #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) + RTCCUINTREG VBOXCALL supdrvOSChangeCR4(RTCCUINTREG fOrMask, RTCCUINTREG fAndMask) +@@ -1166,10 +1235,10 @@ RTCCUINTREG VBOXCALL supdrvOSChangeCR4(RTCCUINTREG fOrMask, RTCCUINTREG fAndMask + # if RTLNX_VER_MIN(5,8,0) + unsigned long fSavedFlags; + local_irq_save(fSavedFlags); +- RTCCUINTREG const uOld = cr4_read_shadow(); +- cr4_update_irqsoff(fOrMask, ~fAndMask); /* Same as this function, only it is not returning the old value. */ +- AssertMsg(cr4_read_shadow() == ((uOld & fAndMask) | fOrMask), +- ("fOrMask=%#RTreg fAndMask=%#RTreg uOld=%#RTreg; new cr4=%#llx\n", fOrMask, fAndMask, uOld, cr4_read_shadow())); ++ RTCCUINTREG const uOld = supdrvLinux_cr4_read_shadow(); ++ supdrvLinux_cr4_update_irqsoff(fOrMask, ~fAndMask); /* Same as this function, only it is not returning the old value. */ ++ AssertMsg(supdrvLinux_cr4_read_shadow() == ((uOld & fAndMask) | fOrMask), ++ ("fOrMask=%#RTreg fAndMask=%#RTreg uOld=%#RTreg; new cr4=%#llx\n", fOrMask, fAndMask, uOld, supdrvLinux_cr4_read_shadow())); + local_irq_restore(fSavedFlags); + # else + # if RTLNX_VER_MIN(3,20,0) +--- a/vboxdrv/r0drv/linux/initterm-r0drv-linux.c ++++ b/vboxdrv/r0drv/linux/initterm-r0drv-linux.c +@@ -60,6 +60,11 @@ static DECLARE_TASK_QUEUE(g_rtR0LnxWorkQueue); + * This is a special mm structure used to manage the kernel address space. */ + struct mm_struct *g_pLnxInitMm = NULL; + ++#if RTLNX_VER_MIN(6,19,0) ++/** Pointer to __flush_tlb_all kernel symbol. */ ++void (*g_pfnLinuxFlushTlbAll)(void); ++#endif ++ + + /** + * Pushes an item onto the IPRT work queue. +@@ -136,6 +141,11 @@ DECLHIDDEN(int) rtR0InitNative(void) + printk("rtR0InitNative: g_pLnxInitMm=%p\n", g_pLnxInitMm); + + RTR0DbgKrnlInfoRelease(hKrnlInfo); ++# if RTLNX_VER_MIN(6,19,0) ++ g_pfnLinuxFlushTlbAll = __symbol_get("__flush_tlb_all"); ++ if (!RT_VALID_PTR(g_pfnLinuxFlushTlbAll)) ++ printk("rtR0InitNative: can't load __flush_tlb_all\n"); ++# endif + } + else + printk("rtR0InitNative: RTR0DbgKrnlInfoOpen failed: %d\n", rc); +@@ -151,6 +161,12 @@ DECLHIDDEN(void) rtR0TermNative(void) + { + IPRT_LINUX_SAVE_EFL_AC(); + ++# if RTLNX_VER_MIN(6,19,0) ++ if (RT_VALID_PTR(g_pfnLinuxFlushTlbAll)) ++ symbol_put_addr(g_pfnLinuxFlushTlbAll); ++ g_pfnLinuxFlushTlbAll = NULL; ++#endif ++ + rtR0LnxWorkqueueFlush(); + #if RTLNX_VER_MIN(2,5,41) + destroy_workqueue(g_prtR0LnxWorkQueue); +--- a/vboxdrv/r0drv/linux/memobj-r0drv-linux.c ++++ b/vboxdrv/r0drv/linux/memobj-r0drv-linux.c +@@ -181,7 +181,7 @@ static const struct + * Internal Functions * + *********************************************************************************************************************************/ + static void rtR0MemObjLinuxFreePages(PRTR0MEMOBJLNX pMemLnx); +- ++static void rtR0MemObjLinuxFlushTlbAll(void); + + + /** +@@ -2245,6 +2245,15 @@ DECLHIDDEN(int) rtR0MemObjNativeMapUser(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJ p + return rc; + } + ++static void rtR0MemObjLinuxFlushTlbAll(void) ++{ ++#if RTLNX_VER_MIN(6,19,0) ++ if (RT_LIKELY(RT_VALID_PTR(g_pfnLinuxFlushTlbAll))) ++ g_pfnLinuxFlushTlbAll(); ++#else ++ __flush_tlb_all(); ++#endif ++} + + DECLHIDDEN(int) rtR0MemObjNativeProtect(PRTR0MEMOBJINTERNAL pMem, size_t offSub, size_t cbSub, uint32_t fProt) + { +@@ -2265,7 +2274,7 @@ DECLHIDDEN(int) rtR0MemObjNativeProtect(PRTR0MEMOBJINTERNAL pMem, size_t offSub, + set_pte(papPtes[i], mk_pte(pMemLnx->apPages[i], fPg)); + } + preempt_disable(); +- __flush_tlb_all(); ++ rtR0MemObjLinuxFlushTlbAll(); + preempt_enable(); + return VINF_SUCCESS; + } +@@ -2311,7 +2320,7 @@ DECLHIDDEN(int) rtR0MemObjNativeProtect(PRTR0MEMOBJINTERNAL pMem, size_t offSub, + flush_icache_range((uintptr_t)pMemLnx->Core.pv + offSub, cbSub); + # if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) /* flush_tlb_kernel_range is not exported, but __flush_tlb_all is. */ + preempt_disable(); +- __flush_tlb_all(); ++ rtR0MemObjLinuxFlushTlbAll(); + preempt_enable(); + # else + flush_tlb_kernel_range((uintptr_t)pMemLnx->Core.pv + offSub, cbSub); +--- a/vboxdrv/r0drv/linux/the-linux-kernel.h ++++ b/vboxdrv/r0drv/linux/the-linux-kernel.h +@@ -512,6 +512,9 @@ RTDECL(struct page *) rtR0MemObjLinuxVirtToPage(void *pv); + + + extern struct mm_struct *g_pLnxInitMm; ++#if RTLNX_VER_MIN(6,19,0) ++extern void (*g_pfnLinuxFlushTlbAll)(void); ++#endif + + + #endif /* !IPRT_INCLUDED_SRC_r0drv_linux_the_linux_kernel_h */ +--- a/vboxnetflt/r0drv/linux/the-linux-kernel.h ++++ b/vboxnetflt/r0drv/linux/the-linux-kernel.h +@@ -512,6 +512,9 @@ RTDECL(struct page *) rtR0MemObjLinuxVirtToPage(void *pv); + + + extern struct mm_struct *g_pLnxInitMm; ++#if RTLNX_VER_MIN(6,19,0) ++extern void (*g_pfnLinuxFlushTlbAll)(void); ++#endif + + + #endif /* !IPRT_INCLUDED_SRC_r0drv_linux_the_linux_kernel_h */ +--- a/vboxnetadp/r0drv/linux/the-linux-kernel.h ++++ b/vboxnetadp/r0drv/linux/the-linux-kernel.h +@@ -512,6 +512,9 @@ RTDECL(struct page *) rtR0MemObjLinuxVirtToPage(void *pv); + + + extern struct mm_struct *g_pLnxInitMm; ++#if RTLNX_VER_MIN(6,19,0) ++extern void (*g_pfnLinuxFlushTlbAll)(void); ++#endif + + + #endif /* !IPRT_INCLUDED_SRC_r0drv_linux_the_linux_kernel_h */ diff --git a/app-emulation/virtualbox-modules/files/virtualbox-modules-7.2.6-kernel-6.19-2.patch b/app-emulation/virtualbox-modules/files/virtualbox-modules-7.2.6-kernel-6.19-2.patch new file mode 100644 index 000000000000..f5e727bf1024 --- /dev/null +++ b/app-emulation/virtualbox-modules/files/virtualbox-modules-7.2.6-kernel-6.19-2.patch @@ -0,0 +1,53 @@ +https://github.com/VirtualBox/virtualbox/commit/8902311a0d88a2d14a1b8ee224008a4c7061854b + +From 8902311a0d88a2d14a1b8ee224008a4c7061854b Mon Sep 17 00:00:00 2001 +From: Vadim Galitsyn <[email protected]> +Date: Tue, 17 Feb 2026 15:20:09 +0000 +Subject: [PATCH] Linux host: Introduce initial support for kernel 6.19 (build + fix), bugref:11038. + +svn:sync-xref-src-repo-rev: r172810 +--- a/vboxdrv/linux/SUPDrv-linux.c ++++ b/vboxdrv/linux/SUPDrv-linux.c +@@ -1199,18 +1199,19 @@ SUPR0DECL(int) SUPDrvLinuxLdrDeregisterWrappedModule(PCSUPLDRWRAPPEDMODULE pWrap + } + EXPORT_SYMBOL(SUPDrvLinuxLdrDeregisterWrappedModule); + ++#if RTLNX_VER_MIN(5,8,0) + /** + * Wrapper function for cr4_update_irqsoff() which was + * exported only for KVM starting from kernel 6.19. + */ + static void supdrvLinux_cr4_update_irqsoff(unsigned long set, unsigned long clear) + { +-#if RTLNX_VER_MIN(6,19,0) && defined(SUPDRV_LINUX_HAS_KVM_HWVIRT_API) ++# if RTLNX_VER_MIN(6,19,0) && defined(SUPDRV_LINUX_HAS_KVM_HWVIRT_API) + if (g_pfnCr4UpdateIrqsoff) + g_pfnCr4UpdateIrqsoff(set, clear); +-#else ++# else + cr4_update_irqsoff(set, clear); +-#endif ++# endif + } + + /** +@@ -1220,14 +1221,15 @@ static void supdrvLinux_cr4_update_irqsoff(unsigned long set, unsigned long clea + static unsigned long supdrvLinux_cr4_read_shadow(void) + { + unsigned long cr4 = 0; +-#if RTLNX_VER_MIN(6,19,0) && defined(SUPDRV_LINUX_HAS_KVM_HWVIRT_API) ++# if RTLNX_VER_MIN(6,19,0) && defined(SUPDRV_LINUX_HAS_KVM_HWVIRT_API) + if (g_pfnCr4ReadShadow) + cr4 = g_pfnCr4ReadShadow(); +-#else ++# else + cr4 = cr4_read_shadow(); +-#endif ++# endif + return cr4; + } ++#endif /* 5.8.0 */ + + #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) + RTCCUINTREG VBOXCALL supdrvOSChangeCR4(RTCCUINTREG fOrMask, RTCCUINTREG fAndMask) diff --git a/app-emulation/virtualbox-modules/files/virtualbox-modules-7.2.6-kernel-6.19-3.patch b/app-emulation/virtualbox-modules/files/virtualbox-modules-7.2.6-kernel-6.19-3.patch new file mode 100644 index 000000000000..7a3d2a89b0b8 --- /dev/null +++ b/app-emulation/virtualbox-modules/files/virtualbox-modules-7.2.6-kernel-6.19-3.patch @@ -0,0 +1,40 @@ +https://github.com/VirtualBox/virtualbox/commit/33992f0e56b8a9bb565e0beecad91e87362ab390 + +From 33992f0e56b8a9bb565e0beecad91e87362ab390 Mon Sep 17 00:00:00 2001 +From: Vadim Galitsyn <[email protected]> +Date: Tue, 17 Feb 2026 15:37:37 +0000 +Subject: [PATCH] Linux host: Introduce initial support for kernel 6.19 (build + fix for old kernels),bugref:11038. + +svn:sync-xref-src-repo-rev: r172811 +--- a/vboxdrv/r0drv/linux/memobj-r0drv-linux.c ++++ b/vboxdrv/r0drv/linux/memobj-r0drv-linux.c +@@ -181,7 +181,6 @@ static const struct + * Internal Functions * + *********************************************************************************************************************************/ + static void rtR0MemObjLinuxFreePages(PRTR0MEMOBJLNX pMemLnx); +-static void rtR0MemObjLinuxFlushTlbAll(void); + + + /** +@@ -2245,15 +2244,17 @@ DECLHIDDEN(int) rtR0MemObjNativeMapUser(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJ p + return rc; + } + ++#if defined(IPRT_USE_ALLOC_VM_AREA_FOR_EXEC) || defined(IPRT_USE_APPLY_TO_PAGE_RANGE_FOR_EXEC) + static void rtR0MemObjLinuxFlushTlbAll(void) + { +-#if RTLNX_VER_MIN(6,19,0) ++# if RTLNX_VER_MIN(6,19,0) + if (RT_LIKELY(RT_VALID_PTR(g_pfnLinuxFlushTlbAll))) + g_pfnLinuxFlushTlbAll(); +-#else ++# else + __flush_tlb_all(); +-#endif ++# endif + } ++#endif + + DECLHIDDEN(int) rtR0MemObjNativeProtect(PRTR0MEMOBJINTERNAL pMem, size_t offSub, size_t cbSub, uint32_t fProt) + { diff --git a/app-emulation/virtualbox-modules/virtualbox-modules-7.2.6-r1.ebuild b/app-emulation/virtualbox-modules/virtualbox-modules-7.2.6-r1.ebuild new file mode 100644 index 000000000000..3b63af16f43c --- /dev/null +++ b/app-emulation/virtualbox-modules/virtualbox-modules-7.2.6-r1.ebuild @@ -0,0 +1,52 @@ +# Copyright 2022-2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +# XXX: the tarball here is just the kernel modules split out of the binary +# package that comes from VirtualBox-*.run +# XXX: update: now it is split from virtualbox-*-Debian~bullseye_amd64.deb + +EAPI=8 + +inherit linux-mod-r1 + +MY_P="vbox-host-kernel-module-src-${PV^^}" +DESCRIPTION="Kernel Modules for Virtualbox" +HOMEPAGE="https://www.virtualbox.org/" +SRC_URI="https://dev.gentoo.org/~ceamac/${CATEGORY}/${PN}/${MY_P}.tar.xz" +S="${WORKDIR}" + +LICENSE="GPL-3" +SLOT="0/$(ver_cut 1-2)" +KEYWORDS="~amd64" + +PATCHES=( + "${FILESDIR}"/${P}-kernel-6.19-{1..3}.patch +) + +CONFIG_CHECK="~!SPINLOCK JUMP_LABEL ~PREEMPT_NOTIFIERS" + +src_compile() { + local modlist=( {vboxdrv,vboxnetflt,vboxnetadp}=misc ) + local modargs=( KERN_DIR="${KV_OUT_DIR}" KERN_VER="${KV_FULL}" ) + linux-mod-r1_src_compile +} + +src_install() { + linux-mod-r1_src_install + insinto /usr/lib/modules-load.d/ + newins "${FILESDIR}"/virtualbox.conf-r1 virtualbox.conf + + insinto /etc/modprobe.d # bug #945135 + newins - virtualbox.conf <<-EOF + # modprobe.d configuration file for VBOXSF + + # Starting with kernel 6.12, + # KVM initializes virtualization on module loading by default. + # This prevents VirtualBox VMs from starting. + # See also: + # https://bugs.gentoo.org/945135 + # https://www.virtualbox.org/wiki/Changelog-7.1 + # ------------------------------ + options kvm enable_virt_at_load=0 + EOF +}
