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
This commit is contained in:
parent
a36b6afde9
commit
6b7b0965af
96
fix_7.0.6_locking_problems.patch
Normal file
96
fix_7.0.6_locking_problems.patch
Normal file
@ -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));
|
@ -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 <Larry.Finger@lwfinger.net>
|
||||
|
||||
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 <drm/drm_gem.h>
|
||||
#endif
|
||||
|
||||
-#include <drm/ttm/ttm_bo_api.h>
|
||||
-#include <drm/ttm/ttm_bo_driver.h>
|
||||
+#if RTLNX_VER_MIN(6,3,0)
|
||||
+# include <drm/ttm/ttm_bo.h>
|
||||
+#else
|
||||
+# include <drm/ttm/ttm_bo_api.h>
|
||||
+# include <drm/ttm/ttm_bo_driver.h>
|
||||
+#endif
|
||||
#include <drm/ttm/ttm_placement.h>
|
||||
#if RTLNX_VER_MAX(5,13,0) && !RTLNX_RHEL_RANGE(8,6, 8,99)
|
||||
# include <drm/ttm/ttm_memory.h>
|
||||
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 <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
|
||||
+#if RTLNX_VER_MIN(6,3,0)
|
||||
+# include <drm/drm_modeset_helper.h>
|
||||
+#endif
|
||||
+
|
||||
#include <VBoxVideoGuest.h>
|
||||
#include <VBoxVideoVBE.h>
|
||||
|
||||
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 <linux/export.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
+#if RTLNX_VER_MIN(6,3,0)
|
||||
+# include <drm/drm_modeset_helper_vtables.h>
|
||||
+# include <drm/drm_modeset_helper.h>
|
||||
+#endif
|
||||
#if RTLNX_VER_MIN(3,18,0) || RTLNX_RHEL_MAJ_PREREQ(7,2)
|
||||
# include <drm/drm_plane_helper.h>
|
||||
#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 <michael.thayer@oracle.com>
|
||||
*/
|
||||
#include "vbox_drv.h"
|
||||
+
|
||||
+#if RTLNX_VER_MIN(6,3,0)
|
||||
+# include <drm/ttm/ttm_tt.h>
|
||||
+#endif
|
||||
+
|
||||
#if RTLNX_VER_MIN(5,11,0) || RTLNX_RHEL_MAJ_PREREQ(8,5)
|
||||
# include <drm/drm_gem.h>
|
||||
# include <drm/drm_gem_ttm_helper.h>
|
||||
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
|
||||
|
@ -1,8 +1,27 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Mar 21 17:05:39 UTC 2023 - Larry Finger <Larry.Finger@gmail.com>
|
||||
|
||||
- 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 <Larry.Finger@gmail.com>
|
||||
|
||||
- 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 <Larry.Finger@gmail.com>
|
||||
|
@ -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}
|
||||
|
Loading…
Reference in New Issue
Block a user