From 6b7b0965afce90237edc4fe87e4db7172eae9569eef7f90753e9e5aa8d04a5da Mon Sep 17 00:00:00 2001 From: Larry Finger Date: Tue, 21 Mar 2023 19:09:44 +0000 Subject: [PATCH] Accepting request 1073624 from home:lwfinger:branches:Virtualization - File "fixes_for_kernel_6.3.patch" is updated for more API changes File "fix_7.0.6_locking_problems.patch" is added. Fixes boo#1209529. Larry Len Rainey and I have worked on this bug for some time. It only happened on systems with large numbers of processors and many virtual machines. We suspected a locking problem, but the thought of auditing the entire code was daunting until it was discovered that there was no problem if the host ran VB 6.1.40. It did not matter what version the guests were running. That essentially eliminated every code part except for vboxdrv.ko. That made the audit tractable. There were two files and a total of 8 places where the locking was suspect. When those were changed, the lockups while using 7.0.6 host code were no longer observed. The lockups were infrequent, thus it is impossible to say that we have fixed everything, but the frequency is clearly diminished. spec-cleaner used to remove extra blank line is spec file. OBS-URL: https://build.opensuse.org/request/show/1073624 OBS-URL: https://build.opensuse.org/package/show/Virtualization/virtualbox?expand=0&rev=685 --- fix_7.0.6_locking_problems.patch | 96 +++++++++ fixes_for_kernel_6.3.patch | 336 ++++++++++++++++++++++++++++--- virtualbox.changes | 19 ++ virtualbox.spec | 3 + 4 files changed, 429 insertions(+), 25 deletions(-) create mode 100644 fix_7.0.6_locking_problems.patch diff --git a/fix_7.0.6_locking_problems.patch b/fix_7.0.6_locking_problems.patch new file mode 100644 index 0000000..4904335 --- /dev/null +++ b/fix_7.0.6_locking_problems.patch @@ -0,0 +1,96 @@ +Index: VirtualBox-7.0.6/src/VBox/HostDrivers/Support/SUPDrv.cpp +=================================================================== +--- VirtualBox-7.0.6.orig/src/VBox/HostDrivers/Support/SUPDrv.cpp ++++ VirtualBox-7.0.6/src/VBox/HostDrivers/Support/SUPDrv.cpp +@@ -871,8 +871,8 @@ void VBOXCALL supdrvDeleteDevExt(PSUPDRV + + /* kill the GIP. */ + supdrvGipDestroy(pDevExt); +- RTSpinlockDestroy(pDevExt->hGipSpinlock); + pDevExt->hGipSpinlock = NIL_RTSPINLOCK; ++ RTSpinlockDestroy(pDevExt->hGipSpinlock); + + supdrvTracerTerm(pDevExt); + +@@ -5351,8 +5351,8 @@ static int supdrvIOCtl_LdrOpen(PSUPDRVDE + rc = supdrvLdrAddUsage(pDevExt, pSession, pImage, true /*fRing3Usage*/); + if (RT_FAILURE(rc)) + { +- supdrvLdrUnlock(pDevExt); + pImage->uMagic = SUPDRVLDRIMAGE_MAGIC_DEAD; ++ supdrvLdrUnlock(pDevExt); + RTMemFree(pImage); + Log(("supdrvIOCtl_LdrOpen(%s): failed - %Rrc\n", pReq->u.In.szName, rc)); + return rc; +@@ -6095,6 +6095,7 @@ static int supdrvIOCtl_LdrFree(PSUPDRVDE + /* free it */ + pUsage->pImage = NULL; + pUsage->pNext = NULL; ++ RTSpinlockRelease(pDevExt->Spinlock); + RTMemFree(pUsage); + + /* +@@ -6106,7 +6107,10 @@ static int supdrvIOCtl_LdrFree(PSUPDRVDE + supdrvLdrSubtractUsage(pDevExt, pImage, 1); + } + else ++ { ++ RTSpinlockRelease(pDevExt->Spinlock); + Log(("supdrvIOCtl_LdrFree: Dangling objects in %p/%s!\n", pImage->pvImage, pImage->szName)); ++ } + } + else + { +@@ -6334,9 +6338,9 @@ static int supdrvIOCtl_LdrQuerySymbol(PS + rc = VERR_INVALID_HANDLE; + } + ++ pReq->u.Out.pvSymbol = pvSymbol; + supdrvLdrUnlock(pDevExt); + +- pReq->u.Out.pvSymbol = pvSymbol; + return rc; + } + +Index: VirtualBox-7.0.6/src/VBox/HostDrivers/Support/SUPDrvGip.cpp +=================================================================== +--- VirtualBox-7.0.6.orig/src/VBox/HostDrivers/Support/SUPDrvGip.cpp ++++ VirtualBox-7.0.6/src/VBox/HostDrivers/Support/SUPDrvGip.cpp +@@ -4537,9 +4537,9 @@ static int supdrvTscDeltaThreadWait(PSUP + */ + static void supdrvTscDeltaThreadStartMeasurement(PSUPDRVDEVEXT pDevExt, bool fForceAll) + { ++ RTSpinlockAcquire(pDevExt->hTscDeltaSpinlock); + if (pDevExt->hTscDeltaThread != NIL_RTTHREAD) + { +- RTSpinlockAcquire(pDevExt->hTscDeltaSpinlock); + if ( pDevExt->enmTscDeltaThreadState == kTscDeltaThreadState_Listening + || pDevExt->enmTscDeltaThreadState == kTscDeltaThreadState_Measuring) + { +@@ -4550,9 +4550,9 @@ static void supdrvTscDeltaThreadStartMea + else if ( pDevExt->enmTscDeltaThreadState == kTscDeltaThreadState_WaitAndMeasure + && fForceAll) + pDevExt->fTscThreadRecomputeAllDeltas = true; +- RTSpinlockRelease(pDevExt->hTscDeltaSpinlock); + RTThreadUserSignal(pDevExt->hTscDeltaThread); + } ++ RTSpinlockRelease(pDevExt->hTscDeltaSpinlock); + } + + +@@ -4628,13 +4628,13 @@ static int supdrvTscDeltaThreadInit(PSUP + } + else + OSDBGPRINT(("supdrvTscDeltaInit: RTThreadCreate failed. rc=%Rrc\n", rc)); +- RTSemEventDestroy(pDevExt->hTscDeltaEvent); + pDevExt->hTscDeltaEvent = NIL_RTSEMEVENT; ++ RTSemEventDestroy(pDevExt->hTscDeltaEvent); + } + else + OSDBGPRINT(("supdrvTscDeltaInit: RTSemEventCreate failed. rc=%Rrc\n", rc)); +- RTSpinlockDestroy(pDevExt->hTscDeltaSpinlock); + pDevExt->hTscDeltaSpinlock = NIL_RTSPINLOCK; ++ RTSpinlockDestroy(pDevExt->hTscDeltaSpinlock); + } + else + OSDBGPRINT(("supdrvTscDeltaInit: RTSpinlockCreate failed. rc=%Rrc\n", rc)); diff --git a/fixes_for_kernel_6.3.patch b/fixes_for_kernel_6.3.patch index d370f90..dee9629 100644 --- a/fixes_for_kernel_6.3.patch +++ b/fixes_for_kernel_6.3.patch @@ -1,40 +1,326 @@ -Patch to fix VirtualBox builds on kernel 6.3.0 and newer - -Beginning with 6.3, a user is no loncer to write directly info the -vm_flags member of struct vm_area_struct. It is now necessary to use -the vm_flags_set() wrapper. Two locations in memobj-r0drv-linux.c are -affected. - -Signed-off-by: Larry Finger - -Index: VirtualBox-7.0.6/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c +Index: a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c =================================================================== ---- VirtualBox-7.0.6.orig/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c -+++ VirtualBox-7.0.6/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c -@@ -1401,8 +1401,12 @@ DECLHIDDEN(int) rtR0MemObjNativeLockUser +--- a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c (revision 156192) ++++ b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c (revision 156193) +@@ -1401,7 +1401,11 @@ while (rc-- > 0) { flush_dcache_page(pMemLnx->apPages[rc]); -- papVMAs[rc]->vm_flags |= VM_DONTCOPY | VM_LOCKED; -- } -+# if RTLNX_VER_MIN(6, 3, 0) -+ vm_flags_set(papVMAs[rc], VM_DONTCOPY | VM_LOCKED); ++#if RTLNX_VER_MIN(6,3,0) ++ vm_flags_set(papVMAs[rc], VM_DONTCOPY | VM_LOCKED); +#else -+ papVMAs[rc]->vm_flags |= VM_DONTCOPY | VM_LOCKED; + papVMAs[rc]->vm_flags |= VM_DONTCOPY | VM_LOCKED; +#endif -+ } + } LNX_MM_UP_READ(pTask->mm); - -@@ -1873,7 +1877,11 @@ DECLHIDDEN(int) rtR0MemObjNativeMapUser( +@@ -1872,7 +1876,10 @@ + rc = vm_insert_page(vma, ulAddrCur, pMemLnxToMap->apPages[iPage]); /* Thes flags help making 100% sure some bad stuff wont happen (swap, core, ++). * See remap_pfn_range() in mm/memory.c */ - #if RTLNX_VER_MIN(3,7,0) -+# if RTLNX_VER_MIN(6, 3, 0) +-#if RTLNX_VER_MIN(3,7,0) ++ ++#if RTLNX_VER_MIN(6,3,0) + vm_flags_set(vma, VM_DONTEXPAND | VM_DONTDUMP); -+#else ++#elif RTLNX_VER_MIN(3,7,0) vma->vm_flags |= VM_DONTEXPAND | VM_DONTDUMP; -+#endif #else vma->vm_flags |= VM_RESERVED; +Index: s/rc/VBox/Additions/linux/drm/vbox_drv.h +=================================================================== +--- a/src/VBox/Additions/linux/drm/vbox_drv.h (revision 156193) ++++ b/src/VBox/Additions/linux/drm/vbox_drv.h (revision 156194) +@@ -172,8 +172,12 @@ + # include #endif + +-#include +-#include ++#if RTLNX_VER_MIN(6,3,0) ++# include ++#else ++# include ++# include ++#endif + #include + #if RTLNX_VER_MAX(5,13,0) && !RTLNX_RHEL_RANGE(8,6, 8,99) + # include +Index: a/src/VBox/Additions/linux/drm/vbox_fb.c +=================================================================== +--- a/src/VBox/Additions/linux/drm/vbox_fb.c (revision 156193) ++++ b.src/VBox/Additions/linux/drm/vbox_fb.c (revision 156194) +@@ -345,6 +345,7 @@ + info->flags = FBINFO_DEFAULT | FBINFO_MISC_ALWAYS_SETPAR; + info->fbops = &vboxfb_ops; + ++#if RTLNX_VER_MAX(6,3,0) + /* + * This seems to be done for safety checking that the framebuffer + * is not registered twice by different drivers. +@@ -351,6 +352,7 @@ + */ + 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); ++#endif + + #if RTLNX_VER_MIN(5,2,0) || RTLNX_RHEL_MAJ_PREREQ(8,2) + /* +@@ -457,11 +459,14 @@ + vbox->fbdev = fbdev; + spin_lock_init(&fbdev->dirty_lock); + +-#if RTLNX_VER_MAX(3,17,0) && !RTLNX_RHEL_MAJ_PREREQ(7,2) ++#if RTLNX_VER_MIN(6,3,0) ++ drm_fb_helper_prepare(dev, &fbdev->helper, 32, &vbox_fb_helper_funcs); ++#elif RTLNX_VER_MIN(3,17,0) || RTLNX_RHEL_MIN(7,2) ++ drm_fb_helper_prepare(dev, &fbdev->helper, &vbox_fb_helper_funcs); ++#else + fbdev->helper.funcs = &vbox_fb_helper_funcs; +-#else +- drm_fb_helper_prepare(dev, &fbdev->helper, &vbox_fb_helper_funcs); + #endif ++ + #if RTLNX_VER_MIN(5,7,0) || RTLNX_RHEL_MIN(8,4) || RTLNX_SUSE_MAJ_PREREQ(15,3) + ret = drm_fb_helper_init(dev, &fbdev->helper); + #elif RTLNX_VER_MIN(4,11,0) || RTLNX_RHEL_MAJ_PREREQ(7,5) +@@ -483,7 +488,11 @@ + /* disable all the possible outputs/crtcs before entering KMS mode */ + drm_helper_disable_unused_functions(dev); + ++#if RTLNX_VER_MIN(6,3,0) ++ ret = drm_fb_helper_initial_config(&fbdev->helper); ++#else + ret = drm_fb_helper_initial_config(&fbdev->helper, 32); ++#endif + if (ret) + goto err_fini; + +@@ -498,6 +507,11 @@ + { + struct fb_info *fbdev = VBOX_FBDEV_INFO(vbox->fbdev->helper); + ++#if RTLNX_VER_MIN(6,3,0) ++ fbdev->fix.smem_start = ++pci_resource_start(VBOX_DRM_TO_PCI_DEV(vbox->fbdev->helper.dev), 0) + gpu_addr; ++#else + fbdev->fix.smem_start = fbdev->apertures->ranges[0].base + gpu_addr; ++#endif + fbdev->fix.smem_len = vbox->available_vram_size - gpu_addr; + } +Index: a/src/VBox/Additions/linux/drm/vbox_main.c +=================================================================== +--- a/src/VBox/Additions/linux/drm/vbox_main.c (revision 156193) ++++ b/src/VBox/Additions/linux/drm/vbox_main.c (revision 156194) +@@ -36,6 +36,10 @@ + #include + #include + ++#if RTLNX_VER_MIN(6,3,0) ++# include ++#endif ++ + #include + #include + +Index: a/src/VBox/Additions/linux/drm/vbox_mode.c +=================================================================== +--- a/src/VBox/Additions/linux/drm/vbox_mode.c (revision 156193) ++++ b/src/VBox/Additions/linux/drm/vbox_mode.c (revision 156194) +@@ -39,6 +39,10 @@ + #include "vbox_drv.h" + #include + #include ++#if RTLNX_VER_MIN(6,3,0) ++# include ++# include ++#endif + #if RTLNX_VER_MIN(3,18,0) || RTLNX_RHEL_MAJ_PREREQ(7,2) + # include + #endif +Index: a/src/VBox/Additions/linux/drm/vbox_ttm.c +=================================================================== +--- a/src/VBox/Additions/linux/drm/vbox_ttm.c (revision 156193) ++++ b/src/VBox/Additions/linux/drm/vbox_ttm.c (revision 156194) +@@ -33,6 +33,11 @@ + * Michael Thayer + */ + #include "vbox_drv.h" ++ ++#if RTLNX_VER_MIN(6,3,0) ++# include ++#endif ++ + #if RTLNX_VER_MIN(5,11,0) || RTLNX_RHEL_MAJ_PREREQ(8,5) + # include + # include +Index: a/src/VBox/Additions/linux/drm/vbox_fb.c +=================================================================== +--- a/src/VBox/Additions/linux/drm/vbox_fb.c (revision 156195) ++++ b/src/VBox/Additions/linux/drm/vbox_fb.c (revision 156196) +@@ -508,7 +508,7 @@ + struct fb_info *fbdev = VBOX_FBDEV_INFO(vbox->fbdev->helper); + + #if RTLNX_VER_MIN(6,3,0) +- fbdev->fix.smem_start = ++ fbdev->fix.smem_start = + pci_resource_start(VBOX_DRM_TO_PCI_DEV(vbox->fbdev->helper.dev), 0) + gpu_addr; + #else + fbdev->fix.smem_start = fbdev->apertures->ranges[0].base + gpu_addr; +Index: a/src/VBox/Additions/linux/sharedfolders/dirops.c +=================================================================== +--- a/src/VBox/Additions/linux/sharedfolders/dirops.c (revision 156194) ++++ b/src/VBox/Additions/linux/sharedfolders/dirops.c (revision 156195) +@@ -1045,7 +1045,9 @@ + * @param excl Possible O_EXCL... + * @returns 0 on success, Linux error code otherwise + */ +-#if RTLNX_VER_MIN(5,12,0) || defined(DOXYGEN_RUNNING) ++#if RTLNX_VER_MIN(6,3,0) ++static int vbsf_inode_create(struct mnt_idmap *idmap, struct inode *parent, struct dentry *dentry, umode_t mode, bool excl) ++#elif RTLNX_VER_MIN(5,12,0) || defined(DOXYGEN_RUNNING) + static int vbsf_inode_create(struct user_namespace *ns, struct inode *parent, struct dentry *dentry, umode_t mode, bool excl) + #elif RTLNX_VER_MIN(3,6,0) + static int vbsf_inode_create(struct inode *parent, struct dentry *dentry, umode_t mode, bool excl) +@@ -1085,7 +1087,9 @@ + * @param mode file mode + * @returns 0 on success, Linux error code otherwise + */ +-#if RTLNX_VER_MIN(5,12,0) || defined(DOXYGEN_RUNNING) ++#if RTLNX_VER_MIN(6,3,0) ++static int vbsf_inode_mkdir(struct mnt_idmap *idmap, struct inode *parent, struct dentry *dentry, umode_t mode) ++#elif RTLNX_VER_MIN(5,12,0) || defined(DOXYGEN_RUNNING) + static int vbsf_inode_mkdir(struct user_namespace *ns, struct inode *parent, struct dentry *dentry, umode_t mode) + #elif RTLNX_VER_MIN(3,3,0) + static int vbsf_inode_mkdir(struct inode *parent, struct dentry *dentry, umode_t mode) +@@ -1200,7 +1204,11 @@ + * @param flags flags + * @returns 0 on success, Linux error code otherwise + */ +-#if RTLNX_VER_MIN(5,12,0) || defined(DOXYGEN_RUNNING) ++#if RTLNX_VER_MIN(6,3,0) ++static int vbsf_inode_rename(struct mnt_idmap *idmap, ++ struct inode *old_parent, struct dentry *old_dentry, ++ struct inode *new_parent, struct dentry *new_dentry, unsigned flags) ++#elif RTLNX_VER_MIN(5,12,0) || defined(DOXYGEN_RUNNING) + static int vbsf_inode_rename(struct user_namespace *ns, + struct inode *old_parent, struct dentry *old_dentry, + struct inode *new_parent, struct dentry *new_dentry, unsigned flags) +@@ -1312,7 +1320,9 @@ + /** + * Create a symbolic link. + */ +-#if RTLNX_VER_MIN(5,12,0) ++#if RTLNX_VER_MIN(6,3,0) ++static int vbsf_inode_symlink(struct mnt_idmap *idmap, struct inode *parent, struct dentry *dentry, const char *target) ++#elif RTLNX_VER_MIN(5,12,0) + static int vbsf_inode_symlink(struct user_namespace *ns, struct inode *parent, struct dentry *dentry, const char *target) + #else + static int vbsf_inode_symlink(struct inode *parent, struct dentry *dentry, const char *target) +Index: a/src/VBox/Additions/linux/sharedfolders/utils.c +=================================================================== +--- a/src/VBox/Additions/linux/sharedfolders/utils.c (revision 156194) ++++ b/src/VBox/Additions/linux/sharedfolders/utils.c (revision 156195) +@@ -697,8 +697,10 @@ + has inode at all) from these new attributes we derive [kstat] via + [generic_fillattr] */ + #if RTLNX_VER_MIN(2,5,18) +- +-# if RTLNX_VER_MIN(5,12,0) ++# if RTLNX_VER_MIN(6,3,0) ++int vbsf_inode_getattr(struct mnt_idmap *idmap, const struct path *path, ++ struct kstat *kstat, u32 request_mask, unsigned int flags) ++# elif RTLNX_VER_MIN(5,12,0) + int vbsf_inode_getattr(struct user_namespace *ns, const struct path *path, + struct kstat *kstat, u32 request_mask, unsigned int flags) + # elif RTLNX_VER_MIN(4,11,0) +@@ -741,7 +743,9 @@ + # endif + if (rc == 0) { + /* Do generic filling in of info. */ +-# if RTLNX_VER_MIN(5,12,0) ++# if RTLNX_VER_MIN(6,3,0) ++ generic_fillattr(idmap, dentry->d_inode, kstat); ++# elif RTLNX_VER_MIN(5,12,0) + generic_fillattr(ns, dentry->d_inode, kstat); + # else + generic_fillattr(dentry->d_inode, kstat); +@@ -791,7 +795,9 @@ + /** + * Modify inode attributes. + */ +-#if RTLNX_VER_MIN(5,12,0) ++#if RTLNX_VER_MIN(6,3,0) ++int vbsf_inode_setattr(struct mnt_idmap *idmap, struct dentry *dentry, struct iattr *iattr) ++#elif RTLNX_VER_MIN(5,12,0) + int vbsf_inode_setattr(struct user_namespace *ns, struct dentry *dentry, struct iattr *iattr) + #else + int vbsf_inode_setattr(struct dentry *dentry, struct iattr *iattr) +@@ -815,7 +821,9 @@ + */ + iattr->ia_valid |= ATTR_FORCE; + #if (RTLNX_VER_RANGE(3,16,39, 3,17,0)) || RTLNX_VER_MIN(4,9,0) || (RTLNX_VER_RANGE(4,1,37, 4,2,0)) || RTLNX_UBUNTU_ABI_MIN(4,4,255,208) +-# if RTLNX_VER_MIN(5,12,0) ++# if RTLNX_VER_MIN(6,3,0) ++ rc = setattr_prepare(idmap, dentry, iattr); ++# elif RTLNX_VER_MIN(5,12,0) + rc = setattr_prepare(ns, dentry, iattr); + # else + rc = setattr_prepare(dentry, iattr); +Index: a/src/VBox/Additions/linux/sharedfolders/vfsmod.h +=================================================================== +--- a/src/VBox/Additions/linux/sharedfolders/vfsmod.h (revision 156194) ++++ b/src/VBox/Additions/linux/sharedfolders/vfsmod.h (revision 156195) +@@ -275,7 +275,10 @@ + extern int vbsf_inode_revalidate_worker(struct dentry *dentry, bool fForced, bool fInodeLocked); + extern int vbsf_inode_revalidate_with_handle(struct dentry *dentry, SHFLHANDLE hHostFile, bool fForced, bool fInodeLocked); + #if RTLNX_VER_MIN(2,5,18) +-# if RTLNX_VER_MIN(5,12,0) ++# if RTLNX_VER_MIN(6,3,0) ++extern int vbsf_inode_getattr(struct mnt_idmap *idmap, const struct path *path, ++ struct kstat *kstat, u32 request_mask, unsigned int query_flags); ++# elif RTLNX_VER_MIN(5,12,0) + extern int vbsf_inode_getattr(struct user_namespace *ns, const struct path *path, + struct kstat *kstat, u32 request_mask, unsigned int query_flags); + # elif RTLNX_VER_MIN(4,11,0) +@@ -286,7 +289,9 @@ + #else /* < 2.5.44 */ + extern int vbsf_inode_revalidate(struct dentry *dentry); + #endif /* < 2.5.44 */ +-#if RTLNX_VER_MIN(5,12,0) ++#if RTLNX_VER_MIN(6,3,0) ++extern int vbsf_inode_setattr(struct mnt_idmap *idmap, struct dentry *dentry, struct iattr *iattr); ++#elif RTLNX_VER_MIN(5,12,0) + extern int vbsf_inode_setattr(struct user_namespace *ns, struct dentry *dentry, struct iattr *iattr); + #else + extern int vbsf_inode_setattr(struct dentry *dentry, struct iattr *iattr); +Index: a/src/VBox/Additions/linux/sharedfolders/dirops.c +=================================================================== +--- a/src/VBox/Additions/linux/sharedfolders/dirops.c (revision 156196) ++++ b/src/VBox/Additions/linux/sharedfolders/dirops.c (revision 156197) +@@ -1038,7 +1038,7 @@ + /** + * Create a new regular file. + * +- * @param ns The name space. ++ * @param idmap idmap of the mount. + * @param parent inode of the directory + * @param dentry directory cache entry + * @param mode file mode +@@ -1081,7 +1081,7 @@ + /** + * Create a new directory. + * +- * @param ns The name space. ++ * @param idmap idmap of the mount. + * @param parent inode of the directory + * @param dentry directory cache entry + * @param mode file mode +@@ -1196,7 +1196,7 @@ + /** + * Rename a regular file / directory. + * +- * @param ns The name space. ++ * @param idmap idmap of the mount. + * @param old_parent inode of the old parent directory + * @param old_dentry old directory cache entry + * @param new_parent inode of the new parent directory diff --git a/virtualbox.changes b/virtualbox.changes index 4261cdf..1af992f 100644 --- a/virtualbox.changes +++ b/virtualbox.changes @@ -1,8 +1,27 @@ +------------------------------------------------------------------- +Tue Mar 21 17:05:39 UTC 2023 - Larry Finger + +- File "fixes_for_kernel_6.3.patch" is updated for more API changes + File "fix_7.0.6_locking_problems.patch" is added. Fixes boo#1209529. + Larry Len Rainey and I have worked on this bug for some time. It only + happened on systems with large numbers of processors and many virtual + machines. We suspected a locking problem, but the thought of auditing + the entire code was daunting until it was discovered that there was no + problem if the host ran VB 6.1.40. It did not matter what version the + guests were running. That essentially eliminated every code part except + for vboxdrv.ko. That made the audit tractable. There were two files and + a total of 8 places where the locking was suspect. When those were + changed, the lockups while using 7.0.6 host code were no longer observed. + + The lockups were infrequent, thus it is impossible to say that we have + fixed everything, but the frequency is clearly diminished. + ------------------------------------------------------------------- Mon Mar 6 21:14:12 UTC 2023 - Larry Finger - Added file "fixes_for_kernel_6.3.patch" to handle API change. - File "fixes_for_gcc13.patch" updated for additional changes in GCC 13 boo#1207468 + spec-cleaner used to remove extra blank line is spec file. ------------------------------------------------------------------- Wed Mar 1 16:13:24 UTC 2023 - Larry Finger diff --git a/virtualbox.spec b/virtualbox.spec index 11b7141..07760a0 100644 --- a/virtualbox.spec +++ b/virtualbox.spec @@ -162,6 +162,8 @@ Patch35: fixes_for_leap15.5.patch Patch36: fixes_for_gcc13.patch # Fix for kernel 6.3 Patch37: fixes_for_kernel_6.3.patch +# Fix locking problem in 7.0.6 +Patch38: fix_7.0.6_locking_problems.patch # # Common BuildRequires for both virtualbox and virtualbox-kmp BuildRequires: %{kernel_module_package_buildreqs} @@ -498,6 +500,7 @@ This package contains the kernel-modules that VirtualBox uses to create or run v %patch36 -p1 %endif %patch37 -p1 +%patch38 -p1 ### Documents for virtualbox main package ### %if %{main_package}