VirtualBox

Changeset 105352 in vbox


Ignore:
Timestamp:
Jul 16, 2024 11:21:19 AM (6 months ago)
Author:
vboxsync
Message:

VMM/VMR3Req,iprt/cdefs.h: Adjustments of VMR3ReqCallUV family to fit darwin/arm64 restrictions. bugref:10725

Location:
trunk
Files:
20 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vmm/pdmdev.h

    r101617 r105352  
    34373437     * @remarks See remarks on VMR3ReqCallVU.
    34383438     */
    3439     DECLR3CALLBACKMEMBER(int, pfnVMReqCallNoWaitV,(PPDMDEVINS pDevIns, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, va_list Args));
     3439    DECLR3CALLBACKMEMBER(int, pfnVMReqCallNoWaitV,(PPDMDEVINS pDevIns, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs,
     3440                                                   va_list Args)) RT_IPRT_CALL_ATTR(3, 4, 0);
    34403441
    34413442    /**
     
    34583459     * @remarks See remarks on VMR3ReqCallVU.
    34593460     */
    3460     DECLR3CALLBACKMEMBER(int, pfnVMReqPriorityCallWaitV,(PPDMDEVINS pDevIns, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, va_list Args));
     3461    DECLR3CALLBACKMEMBER(int, pfnVMReqPriorityCallWaitV,(PPDMDEVINS pDevIns, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs,
     3462                                                         va_list Args)) RT_IPRT_CALL_ATTR(3, 4, 0);
    34613463
    34623464    /**
     
    76127614 * @remarks See remarks on VMR3ReqCallVU.
    76137615 */
    7614 DECLINLINE(int) PDMDevHlpVMReqCallNoWait(PPDMDEVINS pDevIns, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...)
     7616DECLINLINE(int) RT_IPRT_CALL_ATTR(3, 4, 5)
     7617PDMDevHlpVMReqCallNoWait(PPDMDEVINS pDevIns, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...)
    76157618{
    76167619    va_list Args;
     
    76407643 * @remarks See remarks on VMR3ReqCallVU.
    76417644 */
    7642 DECLINLINE(int) PDMDevHlpVMReqPriorityCallWait(PPDMDEVINS pDevIns, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...)
     7645DECLINLINE(int) RT_IPRT_CALL_ATTR(3, 4, 5)
     7646PDMDevHlpVMReqPriorityCallWait(PPDMDEVINS pDevIns, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...)
    76437647{
    76447648    va_list Args;
  • trunk/include/VBox/vmm/vmapi.h

    r99576 r105352  
    435435VMMR3_INT_DECL(uint32_t) VMR3GetRuntimeErrorCount(PUVM pUVM);
    436436
    437 VMMR3DECL(int)          VMR3ReqCallU(PUVM pUVM, VMCPUID idDstCpu, PVMREQ *ppReq, RTMSINTERVAL cMillies, uint32_t fFlags, PFNRT pfnFunction, unsigned cArgs, ...);
    438 VMMR3DECL(int)          VMR3ReqCallVU(PUVM pUVM, VMCPUID idDstCpu, PVMREQ *ppReq, RTMSINTERVAL cMillies, uint32_t fFlags, PFNRT pfnFunction, unsigned cArgs, va_list Args);
    439 VMMR3_INT_DECL(int)     VMR3ReqCallWait(PVM pVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...);
    440 VMMR3DECL(int)          VMR3ReqCallWaitU(PUVM pUVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...);
    441 VMMR3DECL(int)          VMR3ReqCallNoWait(PVM pVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...);
    442 VMMR3DECL(int)          VMR3ReqCallNoWaitU(PUVM pUVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...);
    443 VMMR3_INT_DECL(int)     VMR3ReqCallVoidWait(PVM pVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...);
    444 VMMR3DECL(int)          VMR3ReqCallVoidWaitU(PUVM pUVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...);
    445 VMMR3DECL(int)          VMR3ReqCallVoidNoWait(PVM pVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...);
    446 VMMR3DECL(int)          VMR3ReqPriorityCallWait(PVM pVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...);
    447 VMMR3DECL(int)          VMR3ReqPriorityCallWaitU(PUVM pUVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...);
    448 VMMR3DECL(int)          VMR3ReqPriorityCallVoidWaitU(PUVM pUVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...);
     437/** Maximum argument count for VMR3ReqCallU and friends. */
     438#define VMREQ_MAX_ARGS              9
     439/** Maximum argument count for VMR3ReqCallU and friends when
     440 *  VMREQ_F_EXTRA_ARGS_ALL_PTRS is used. */
     441#define VMREQ_MAX_ARGS_EXTENDED     15
     442/** Flag to OR into the argumnet count to indicate that all arguments
     443 * starting with VMREQ_MAX_ARGS are pointer size and won't cause trouble.
     444 * @see @bugref{10725} and VMR3ReqCallVU caveats.  */
     445#define VMREQ_F_EXTRA_ARGS_ALL_PTRS 0x00008000U
     446VMMR3DECL(int)          VMR3ReqCallU(PUVM pUVM, VMCPUID idDstCpu, PVMREQ *ppReq, RTMSINTERVAL cMillies, uint32_t fFlags,
     447                                     PFNRT pfnFunction, unsigned cArgs, ...) RT_IPRT_CALL_ATTR(6, 7, 8);
     448VMMR3DECL(int)          VMR3ReqCallVU(PUVM pUVM, VMCPUID idDstCpu, PVMREQ *ppReq, RTMSINTERVAL cMillies, uint32_t fFlags,
     449                                      PFNRT pfnFunction, unsigned cArgs, va_list Args) RT_IPRT_CALL_ATTR(6, 7, 0);
     450VMMR3_INT_DECL(int)     VMR3ReqCallWait(PVM pVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...) RT_IPRT_CALL_ATTR(3, 4, 5);
     451VMMR3DECL(int)          VMR3ReqCallWaitU(PUVM pUVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...) RT_IPRT_CALL_ATTR(3, 4, 5);
     452VMMR3DECL(int)          VMR3ReqCallNoWait(PVM pVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...) RT_IPRT_CALL_ATTR(3, 4, 5);
     453VMMR3DECL(int)          VMR3ReqCallNoWaitU(PUVM pUVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...) RT_IPRT_CALL_ATTR(3, 4, 5);
     454VMMR3_INT_DECL(int)     VMR3ReqCallVoidWait(PVM pVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...) RT_IPRT_CALL_ATTR(3, 4, 5);
     455VMMR3DECL(int)          VMR3ReqCallVoidWaitU(PUVM pUVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...) RT_IPRT_CALL_ATTR(3, 4, 5);
     456VMMR3DECL(int)          VMR3ReqCallVoidNoWait(PVM pVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...) RT_IPRT_CALL_ATTR(3, 4, 5);
     457VMMR3DECL(int)          VMR3ReqPriorityCallWait(PVM pVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...) RT_IPRT_CALL_ATTR(3, 4, 5);
     458VMMR3DECL(int)          VMR3ReqPriorityCallWaitU(PUVM pUVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...) RT_IPRT_CALL_ATTR(3, 4, 5);
     459VMMR3DECL(int)          VMR3ReqPriorityCallVoidWaitU(PUVM pUVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...) RT_IPRT_CALL_ATTR(3, 4, 5);
    449460VMMR3DECL(int)          VMR3ReqAlloc(PUVM pUVM, PVMREQ *ppReq, VMREQTYPE enmType, VMCPUID idDstCpu);
    450461VMMR3DECL(int)          VMR3ReqFree(PVMREQ pReq);
  • trunk/include/iprt/cdefs.h

    r104365 r105352  
    15111511#else
    15121512# define RT_IPRT_FORMAT_ATTR_MAYBE_NULL(a_iFmt, a_iArgs)
     1513#endif
     1514
     1515/** @def RT_IPRT_CALL_ATTR
     1516 * Identifies a function taking an IPRT format string.
     1517 * @param   a_iFn   The index (1-based) of the function pointer argument.
     1518 * @param   a_iArgc The index (1-based) of the argument count.
     1519 * @param   a_iArgs The index (1-based) of the first argument, use 0 for
     1520 *                  va_list.
     1521 */
     1522#if defined(__GNUC__) && defined(WITH_IPRT_CALL_ATTRIBUTE)
     1523# define RT_IPRT_CALL_ATTR(a_iFn, a_iArgc, a_iArgs)   __attribute__((__iprt_call__(a_iFn, a_iArgc, a_iArgs)))
     1524#else
     1525# define RT_IPRT_CALL_ATTR(a_iFn, a_iArgc, a_iArgs)
    15131526#endif
    15141527
  • trunk/src/VBox/Main/include/ConsoleImpl.h

    r105266 r105352  
    812812                       HRESULT *phrc);
    813813    int i_configMediumProperties(PCFGMNODE pCur, IMedium *pMedium, bool *pfHostIP, bool *pfEncrypted);
     814    /** i_reconfigureMediumAttachment has too many problematic arguments for
     815     * passing directly to VMR3ReqCallUV, so we pack them up. @bugref{10725} */
     816    struct ReconfigureMediumAttachmentArgs
     817    {
     818        const char *pcszDevice;         /**< The name of the controller type. */
     819        unsigned uInstance;             /**< The instance of the controller. */
     820        StorageBus_T enmBus;            /**< The storage bus type of the controller. */
     821        bool fUseHostIOCache;           /**< Use the host I/O cache (disable async I/O). */
     822        bool fBuiltinIOCache;           /**< Use the builtin I/O cache. */
     823        bool fInsertDiskIntegrityDrv;   /**< Flag whether to insert the disk integrity driver into the chain for additionalk debugging aids. */
     824        bool fSetupMerge;               /**< Whether to set up a medium merge */
     825        unsigned uMergeSource;          /**< Merge source image index */
     826        unsigned uMergeTarget;          /**< Merge target image index */
     827        IMediumAttachment *aMediumAtt;  /**< The medium attachment. */
     828        MachineState_T aMachineState;   /**< The current machine state. */
     829    };
    814830    static DECLCALLBACK(int) i_reconfigureMediumAttachment(Console *pThis,
    815831                                                           PUVM pUVM,
    816832                                                           PCVMMR3VTABLE pVMM,
    817                                                            const char *pcszDevice,
    818                                                            unsigned uInstance,
    819                                                            StorageBus_T enmBus,
    820                                                            bool fUseHostIOCache,
    821                                                            bool fBuiltinIoCache,
    822                                                            bool fInsertDiskIntegrityDrv,
    823                                                            bool fSetupMerge,
    824                                                            unsigned uMergeSource,
    825                                                            unsigned uMergeTarget,
    826                                                            IMediumAttachment *aMediumAtt,
    827                                                            MachineState_T aMachineState,
     833                                                           ReconfigureMediumAttachmentArgs const *pArgs,
    828834                                                           HRESULT *phrc);
    829835    static DECLCALLBACK(int) i_changeRemovableMedium(Console *pThis,
     
    892898
    893899    static DECLCALLBACK(int) i_usbAttachCallback(Console *that, PUVM pUVM, PCVMMR3VTABLE pVMM, IUSBDevice *aHostDevice,
    894                                                  PCRTUUID aUuid, const char *aBackend, const char *aAddress,
    895                                                  PCFGMNODE pRemoteCfg, USBConnectionSpeed_T enmSpeed, ULONG aMaskedIfs,
     900                                                 PCRTUUID aUuid, const char *aBackend, const char *aAddress, PCFGMNODE pRemoteCfg,
     901                                                 USBConnectionSpeed_T *penmSpeed, ULONG *pfMaskedIfs,
    896902                                                 const char *pszCaptureFilename);
    897903    static DECLCALLBACK(int) i_usbDetachCallback(Console *that, PUVM pUVM, PCVMMR3VTABLE pVMM, PCRTUUID aUuid);
  • trunk/src/VBox/Main/src-client/ConsoleImpl.cpp

    r105301 r105352  
    25312531         */
    25322532        PVMREQ pReq;
    2533         vrc = pVMM->pfnVMR3ReqCallU(pUVM, 0, &pReq, 0 /* no wait! */, VMREQFLAGS_VBOX_STATUS,
    2534                                     (PFNRT)i_unplugCpu, 4,
     2533        vrc = pVMM->pfnVMR3ReqCallU(pUVM, 0, &pReq, 0 /* no wait! */, VMREQFLAGS_VBOX_STATUS, (PFNRT)i_unplugCpu, 4,
    25352534                                    this, pUVM, pVMM, (VMCPUID)aCpu);
    25362535
     
    26362635     */
    26372636    PVMREQ pReq;
    2638     int vrc = pVMM->pfnVMR3ReqCallU(pUVM, 0, &pReq, 0 /* no wait! */, VMREQFLAGS_VBOX_STATUS,
    2639                                     (PFNRT)i_plugCpu, 4,
     2637    int vrc = pVMM->pfnVMR3ReqCallU(pUVM, 0, &pReq, 0 /* no wait! */, VMREQFLAGS_VBOX_STATUS, (PFNRT)i_plugCpu, 4,
    26402638                                    this, pUVM, pVMM, aCpu);
    26412639
     
    38053803     */
    38063804    PVMREQ pReq;
    3807     int vrc = pVMM->pfnVMR3ReqCallU(pUVM, 0, &pReq, 0 /* no wait! */, VMREQFLAGS_VBOX_STATUS,
    3808                                     (PFNRT)i_changeRemovableMedium, 9,
     3805    int vrc = pVMM->pfnVMR3ReqCallU(pUVM, 0, &pReq, 0 /* no wait! */, VMREQFLAGS_VBOX_STATUS, (PFNRT)i_changeRemovableMedium, 9,
    38093806                                    this, pUVM, pVMM, pszDevice, uInstance, enmBus, fUseHostIOCache, aMediumAttachment, fForce);
    38103807
     
    39843981     */
    39853982    PVMREQ pReq;
    3986     int vrc = pVMM->pfnVMR3ReqCallU(pUVM, 0, &pReq, 0 /* no wait! */, VMREQFLAGS_VBOX_STATUS,
    3987                                     (PFNRT)i_attachStorageDevice, 9,
     3983    int vrc = pVMM->pfnVMR3ReqCallU(pUVM, 0, &pReq, 0 /* no wait! */, VMREQFLAGS_VBOX_STATUS, (PFNRT)i_attachStorageDevice, 9,
    39883984                                    this, pUVM, pVMM, pszDevice, uInstance, enmBus, fUseHostIOCache, aMediumAttachment, fSilent);
    39893985
     
    41594155     */
    41604156    PVMREQ pReq;
    4161     int vrc = pVMM->pfnVMR3ReqCallU(pUVM, 0, &pReq, 0 /* no wait! */, VMREQFLAGS_VBOX_STATUS,
    4162                                     (PFNRT)i_detachStorageDevice, 8,
     4157    int vrc = pVMM->pfnVMR3ReqCallU(pUVM, 0, &pReq, 0 /* no wait! */, VMREQFLAGS_VBOX_STATUS, (PFNRT)i_detachStorageDevice, 8,
    41634158                                    this, pUVM, pVMM, pszDevice, uInstance, enmBus, aMediumAttachment, fSilent);
    41644159
     
    52125207     * here to make requests from under the lock in order to serialize them.
    52135208     */
    5214     int vrc = pVMM->pfnVMR3ReqCallWaitU(pUVM, 0 /*idDstCpu*/,
    5215                                         (PFNRT)i_changeNetworkAttachment, 7,
     5209    int vrc = pVMM->pfnVMR3ReqCallWaitU(pUVM, 0 /*idDstCpu*/, (PFNRT)i_changeNetworkAttachment, 7,
    52165210                                        this, pUVM, pVMM, pszDevice, uInstance, uLun, aNetworkAdapter);
    52175211
     
    69226916
    69236917    alock.release();
    6924     vrc = ptrVM.vtable()->pfnVMR3ReqCallWaitU(ptrVM.rawUVM(), VMCPUID_ANY,
    6925                                               (PFNRT)i_reconfigureMediumAttachment, 15,
    6926                                               this, ptrVM.rawUVM(), ptrVM.vtable(), pcszDevice, uInstance, enmBus,
    6927                                               fUseHostIOCache, fBuiltinIOCache, fInsertDiskIntegrityDrv, true /* fSetupMerge */,
    6928                                               aSourceIdx, aTargetIdx, aMediumAttachment, mMachineState, &hrc);
     6918
     6919    Console::ReconfigureMediumAttachmentArgs Args1;
     6920    Args1.pcszDevice                = pcszDevice;
     6921    Args1.uInstance                 = uInstance;
     6922    Args1.enmBus                    = enmBus;
     6923    Args1.fUseHostIOCache           = fUseHostIOCache;
     6924    Args1.fBuiltinIOCache           = fBuiltinIOCache;
     6925    Args1.fInsertDiskIntegrityDrv   = fInsertDiskIntegrityDrv;
     6926    Args1.fSetupMerge               = true;
     6927    Args1.uMergeSource              = aSourceIdx;
     6928    Args1.uMergeTarget              = aTargetIdx;
     6929    Args1.aMediumAtt                = aMediumAttachment;
     6930    Args1.aMachineState             = mMachineState;
     6931    vrc = ptrVM.vtable()->pfnVMR3ReqCallWaitU(ptrVM.rawUVM(), VMCPUID_ANY, (PFNRT)i_reconfigureMediumAttachment, 5,
     6932                                              this, ptrVM.rawUVM(), ptrVM.vtable(), &Args1, &hrc);
    69296933    /* error handling is after resuming the VM */
    69306934
     
    69676971    hrc = mControl->FinishOnlineMergeMedium();
    69686972
    6969     vrc = ptrVM.vtable()->pfnVMR3ReqCallWaitU(ptrVM.rawUVM(), VMCPUID_ANY,
    6970                                               (PFNRT)i_reconfigureMediumAttachment, 15,
    6971                                               this, ptrVM.rawUVM(), ptrVM.vtable(), pcszDevice, uInstance, enmBus,
    6972                                               fUseHostIOCache, fBuiltinIOCache, fInsertDiskIntegrityDrv, false /* fSetupMerge */,
    6973                                               0 /* uMergeSource */, 0 /* uMergeTarget */, aMediumAttachment, mMachineState, &hrc);
     6973    Console::ReconfigureMediumAttachmentArgs Args2;
     6974    Args2.pcszDevice                = pcszDevice;
     6975    Args2.uInstance                 = uInstance;
     6976    Args2.enmBus                    = enmBus;
     6977    Args2.fUseHostIOCache           = fUseHostIOCache;
     6978    Args2.fBuiltinIOCache           = fBuiltinIOCache;
     6979    Args2.fInsertDiskIntegrityDrv   = fInsertDiskIntegrityDrv;
     6980    Args2.fSetupMerge               = false;
     6981    Args2.uMergeSource              = 0;
     6982    Args2.uMergeTarget              = 0;
     6983    Args2.aMediumAtt                = aMediumAttachment;
     6984    Args2.aMachineState             = mMachineState;
     6985    vrc = ptrVM.vtable()->pfnVMR3ReqCallWaitU(ptrVM.rawUVM(), VMCPUID_ANY, (PFNRT)i_reconfigureMediumAttachment, 5,
     6986                                              this, ptrVM.rawUVM(), ptrVM.vtable(), &Args2, &hrc);
    69746987    /* error handling is after resuming the VM */
    69756988
     
    70537066
    70547067        hrc = S_OK;
    7055         IMediumAttachment *pAttachment = aAttachments[i];
    7056         int vrc = ptrVM.vtable()->pfnVMR3ReqCallWaitU(ptrVM.rawUVM(), VMCPUID_ANY,
    7057                                                       (PFNRT)i_reconfigureMediumAttachment, 15,
    7058                                                       this, ptrVM.rawUVM(), ptrVM.vtable(), pcszDevice, lInstance, enmBus,
    7059                                                       fUseHostIOCache, fBuiltinIOCache, fInsertDiskIntegrityDrv,
    7060                                                       false /* fSetupMerge */, 0 /* uMergeSource */, 0 /* uMergeTarget */,
    7061                                                       pAttachment, mMachineState, &hrc);
     7068        Console::ReconfigureMediumAttachmentArgs Args;
     7069        Args.pcszDevice                 = pcszDevice;
     7070        Args.uInstance                  = lInstance;
     7071        Args.enmBus                     = enmBus;
     7072        Args.fUseHostIOCache            = fUseHostIOCache;
     7073        Args.fBuiltinIOCache            = fBuiltinIOCache;
     7074        Args.fInsertDiskIntegrityDrv    = fInsertDiskIntegrityDrv;
     7075        Args.fSetupMerge                = false;
     7076        Args.uMergeSource               = 0;
     7077        Args.uMergeTarget               = 0;
     7078        Args.aMediumAtt                 = aAttachments[i];
     7079        Args.aMachineState              = mMachineState;
     7080        int vrc = ptrVM.vtable()->pfnVMR3ReqCallWaitU(ptrVM.rawUVM(), VMCPUID_ANY, (PFNRT)i_reconfigureMediumAttachment, 5,
     7081                                                      this, ptrVM.rawUVM(), ptrVM.vtable(), &Args, &hrc);
    70627082        if (RT_FAILURE(vrc))
    70637083            throw setErrorBoth(E_FAIL, vrc, "%Rrc", vrc);
     
    1034610366
    1034710367    int vrc = ptrVM.vtable()->pfnVMR3ReqCallWaitU(ptrVM.rawUVM(), 0 /* idDstCpu (saved state, see #6232) */,
    10348                                                   (PFNRT)i_usbAttachCallback, 11,
     10368                                                  (PFNRT)i_usbAttachCallback, 11 | VMREQ_F_EXTRA_ARGS_ALL_PTRS,
    1034910369                                                  this, ptrVM.rawUVM(), ptrVM.vtable(), aHostDevice, uuid.raw(),
    10350                                                   strBackend.c_str(), Address.c_str(), pRemoteCfg, enmSpeed, aMaskedIfs,
    10351                                                   aCaptureFilename.isEmpty() ? NULL : aCaptureFilename.c_str());
     10370                                                  strBackend.c_str(), Address.c_str(), pRemoteCfg, /* extra arg (ptrs only): */
     10371                                                  &enmSpeed, &aMaskedIfs, aCaptureFilename.isEmpty()
     10372                                                                        ? (const char *)NULL : aCaptureFilename.c_str());
    1035210373    if (RT_SUCCESS(vrc))
    1035310374    {
     
    1039810419DECLCALLBACK(int)
    1039910420Console::i_usbAttachCallback(Console *that, PUVM pUVM, PCVMMR3VTABLE pVMM, IUSBDevice *aHostDevice, PCRTUUID aUuid,
    10400                              const char *pszBackend, const char *aAddress, PCFGMNODE pRemoteCfg, USBConnectionSpeed_T aEnmSpeed,
    10401                              ULONG aMaskedIfs, const char *pszCaptureFilename)
     10421                             const char *pszBackend, const char *aAddress, PCFGMNODE pRemoteCfg,
     10422                             USBConnectionSpeed_T *penmSpeed, ULONG *pfMaskedIfs, const char *pszCaptureFilename)
    1040210423{
    1040310424    RT_NOREF(aHostDevice);
     
    1040910430
    1041010431    VUSBSPEED enmSpeed = VUSB_SPEED_UNKNOWN;
    10411     switch (aEnmSpeed)
     10432    switch (*penmSpeed)
    1041210433    {
    1041310434        case USBConnectionSpeed_Low:        enmSpeed = VUSB_SPEED_LOW;          break;
     
    1042010441
    1042110442    int vrc = pVMM->pfnPDMR3UsbCreateProxyDevice(pUVM, aUuid, pszBackend, aAddress, pRemoteCfg,
    10422                                                  enmSpeed, aMaskedIfs, pszCaptureFilename);
     10443                                                 enmSpeed, *pfMaskedIfs, pszCaptureFilename);
    1042310444    LogFlowFunc(("vrc=%Rrc\n", vrc));
    1042410445    LogFlowFuncLeave();
     
    1046910490    alock.release();
    1047010491    int vrc = ptrVM.vtable()->pfnVMR3ReqCallWaitU(ptrVM.rawUVM(), 0 /* idDstCpu (saved state, see #6232) */,
    10471                                                   (PFNRT)i_usbDetachCallback, 4,
    10472                                                   this, ptrVM.rawUVM(), ptrVM.vtable(), pUuid);
     10492                                                  (PFNRT)i_usbDetachCallback, 4, this, ptrVM.rawUVM(), ptrVM.vtable(), pUuid);
    1047310493    if (RT_SUCCESS(vrc))
    1047410494    {
     
    1164211662 * @param   pUVM                    The VM handle.
    1164311663 * @param   pVMM                    The VMM vtable.
    11644  * @param   pcszDevice              The name of the controller type.
    11645  * @param   uInstance               The instance of the controller.
    11646  * @param   enmBus                  The storage bus type of the controller.
    11647  * @param   fUseHostIOCache         Use the host I/O cache (disable async I/O).
    11648  * @param   fBuiltinIOCache         Use the builtin I/O cache.
    11649  * @param   fInsertDiskIntegrityDrv Flag whether to insert the disk integrity driver into the chain
    11650  *                                  for additionalk debugging aids.
    11651  * @param   fSetupMerge             Whether to set up a medium merge
    11652  * @param   uMergeSource            Merge source image index
    11653  * @param   uMergeTarget            Merge target image index
    11654  * @param   aMediumAtt              The medium attachment.
    11655  * @param   aMachineState           The current machine state.
     11664 * @param   pArgs                   Argument package.
    1165611665 * @param   phrc                    Where to store com error - only valid if we return VERR_GENERAL_FAILURE.
    1165711666 * @return  VBox status code.
     
    1166111670                                                         PUVM pUVM,
    1166211671                                                         PCVMMR3VTABLE pVMM,
    11663                                                          const char *pcszDevice,
    11664                                                          unsigned uInstance,
    11665                                                          StorageBus_T enmBus,
    11666                                                          bool fUseHostIOCache,
    11667                                                          bool fBuiltinIOCache,
    11668                                                          bool fInsertDiskIntegrityDrv,
    11669                                                          bool fSetupMerge,
    11670                                                          unsigned uMergeSource,
    11671                                                          unsigned uMergeTarget,
    11672                                                          IMediumAttachment *aMediumAtt,
    11673                                                          MachineState_T aMachineState,
     11672                                                         Console::ReconfigureMediumAttachmentArgs const *pArgs,
    1167411673                                                         HRESULT *phrc)
    1167511674{
    11676     LogFlowFunc(("pUVM=%p aMediumAtt=%p phrc=%p\n", pUVM, aMediumAtt, phrc));
     11675    LogFlowFunc(("pUVM=%p aMediumAtt=%p phrc=%p\n", pUVM, pArgs->aMediumAtt, phrc));
    1167711676
    1167811677    HRESULT         hrc;
     
    1168411683     * not subject to snapshotting in general. */
    1168511684    DeviceType_T lType;
    11686     hrc = aMediumAtt->COMGETTER(Type)(&lType);                                  H();
     11685    hrc = pArgs->aMediumAtt->COMGETTER(Type)(&lType); H();
    1168711686    if (lType != DeviceType_HardDisk)
    1168811687        return VINF_SUCCESS;
    1168911688
    1169011689    /* Update the device instance configuration. */
    11691     int vrc = pThis->i_configMediumAttachment(pcszDevice,
    11692                                               uInstance,
    11693                                               enmBus,
    11694                                               fUseHostIOCache,
    11695                                               fBuiltinIOCache,
    11696                                               fInsertDiskIntegrityDrv,
    11697                                               fSetupMerge,
    11698                                               uMergeSource,
    11699                                               uMergeTarget,
    11700                                               aMediumAtt,
    11701                                               aMachineState,
     11690    int vrc = pThis->i_configMediumAttachment(pArgs->pcszDevice,
     11691                                              pArgs->uInstance,
     11692                                              pArgs->enmBus,
     11693                                              pArgs->fUseHostIOCache,
     11694                                              pArgs->fBuiltinIOCache,
     11695                                              pArgs->fInsertDiskIntegrityDrv,
     11696                                              pArgs->fSetupMerge,
     11697                                              pArgs->uMergeSource,
     11698                                              pArgs->uMergeTarget,
     11699                                              pArgs->aMediumAtt,
     11700                                              pArgs->aMachineState,
    1170211701                                              phrc,
    1170311702                                              true /* fAttachDetach */,
  • trunk/src/VBox/Main/src-client/DisplayImpl.cpp

    r105135 r105352  
    15951595    Console::SafeVMPtrQuiet ptrVM(mParent);
    15961596    if (ptrVM.isOk()) /** @todo r=andy This apparently *never* is true at this point? */
    1597         ptrVM.vtable()->pfnVMR3ReqCallNoWaitU(ptrVM.rawUVM(), VMCPUID_ANY, (PFNRT)Display::i_InvalidateAndUpdateEMT,
    1598                                               3, this, aScreenId, false);
     1597        ptrVM.vtable()->pfnVMR3ReqCallNoWaitU(ptrVM.rawUVM(), VMCPUID_ANY, (PFNRT)Display::i_InvalidateAndUpdateEMT, 3,
     1598                                              this, aScreenId, false);
    15991599
    16001600    LogRelFlowFunc(("Attached to %d %RTuuid\n", aScreenId, aId.raw()));
     
    26772677        alock.release();
    26782678
    2679         int vrc = ptrVM.vtable()->pfnVMR3ReqCallNoWaitU(ptrVM.rawUVM(), VMCPUID_ANY, (PFNRT)Display::i_InvalidateAndUpdateEMT,
    2680                                                         3, this, 0, true);
     2679        int vrc = ptrVM.vtable()->pfnVMR3ReqCallNoWaitU(ptrVM.rawUVM(), VMCPUID_ANY, (PFNRT)Display::i_InvalidateAndUpdateEMT, 3,
     2680                                                        this, 0, true);
    26812681        alock.acquire();
    26822682
     
    26972697    if (SUCCEEDED(hrc))
    26982698    {
    2699         int vrc = ptrVM.vtable()->pfnVMR3ReqCallNoWaitU(ptrVM.rawUVM(), VMCPUID_ANY, (PFNRT)Display::i_InvalidateAndUpdateEMT,
    2700                                                         3, this, aScreenId, false);
     2699        int vrc = ptrVM.vtable()->pfnVMR3ReqCallNoWaitU(ptrVM.rawUVM(), VMCPUID_ANY, (PFNRT)Display::i_InvalidateAndUpdateEMT, 3,
     2700                                                        this, aScreenId, false);
    27012701        if (RT_FAILURE(vrc))
    27022702            hrc = setErrorBoth(VBOX_E_IPRT_ERROR, vrc, tr("Could not invalidate and update the screen %d (%Rrc)"), aScreenId, vrc);
  • trunk/src/VBox/Main/src-client/EmulatedUSBImpl.cpp

    r98278 r105352  
    288288HRESULT EUSBWEBCAM::Attach(Console *pConsole, PUVM pUVM, PCVMMR3VTABLE pVMM, const char *pszDriver)
    289289{
    290     int vrc = pVMM->pfnVMR3ReqCallWaitU(pUVM, 0 /* idDstCpu (saved state, see #6232) */,
    291                                         (PFNRT)emulatedWebcamAttach, 4,
     290    int vrc = pVMM->pfnVMR3ReqCallWaitU(pUVM, 0 /* idDstCpu (saved state, see #6232) */, (PFNRT)emulatedWebcamAttach, 4,
    292291                                        pUVM, pVMM, this, pszDriver);
    293292    if (RT_SUCCESS(vrc))
     
    299298HRESULT EUSBWEBCAM::Detach(Console *pConsole, PUVM pUVM, PCVMMR3VTABLE pVMM)
    300299{
    301     int vrc = pVMM->pfnVMR3ReqCallWaitU(pUVM, 0 /* idDstCpu (saved state, see #6232) */,
    302                                         (PFNRT)emulatedWebcamDetach, 3,
     300    int vrc = pVMM->pfnVMR3ReqCallWaitU(pUVM, 0 /* idDstCpu (saved state, see #6232) */, (PFNRT)emulatedWebcamDetach, 3,
    303301                                        pUVM, pVMM, this);
    304302    if (RT_SUCCESS(vrc))
  • trunk/src/VBox/VMM/VMMAll/VMAll.cpp

    r98103 r105352  
    275275        va_list va2;
    276276        va_copy(va2, va); /* Have to make a copy here or GCC will break. */
    277         rc = VMR3ReqPriorityCallWait(pVM, VMCPUID_ANY,
    278                                      (PFNRT)vmR3SetRuntimeErrorV, 5, pVM, fFlags, pszErrorId, pszFormat, &va2);
     277        rc = VMR3ReqPriorityCallWait(pVM, VMCPUID_ANY, (PFNRT)vmR3SetRuntimeErrorV, 5,
     278                                     pVM, fFlags, pszErrorId, pszFormat, &va2);
    279279        va_end(va2);
    280280    }
     
    282282    {
    283283        char *pszMessage = MMR3HeapAPrintfV(pVM, MM_TAG_VM, pszFormat, va);
    284         rc = VMR3ReqCallNoWait(pVM, VMCPUID_ANY,
    285                                (PFNRT)vmR3SetRuntimeError, 4, pVM, fFlags, pszErrorId, pszMessage);
     284        rc = VMR3ReqCallNoWait(pVM, VMCPUID_ANY, (PFNRT)vmR3SetRuntimeError, 4,
     285                               pVM, fFlags, pszErrorId, pszMessage);
    286286        if (RT_FAILURE(rc))
    287287            MMR3HeapFree(pszMessage);
  • trunk/src/VBox/VMM/VMMR3/DBGFAddr.cpp

    r103359 r105352  
    296296            rc = dbgfR3AddrToPhysOnVCpu(pVCpu, pAddress, pGCPhys);
    297297        else
    298             rc = VMR3ReqPriorityCallWaitU(pUVM, pVCpu->idCpu,
    299                                           (PFNRT)dbgfR3AddrToPhysOnVCpu, 3, pVCpu, pAddress, pGCPhys);
     298            rc = VMR3ReqPriorityCallWaitU(pUVM, pVCpu->idCpu, (PFNRT)dbgfR3AddrToPhysOnVCpu, 3,
     299                                          pVCpu, pAddress, pGCPhys);
    300300    }
    301301    return rc;
  • trunk/src/VBox/VMM/VMMR3/DBGFDisas.cpp

    r104672 r105352  
    662662    else
    663663        rc = VMR3ReqPriorityCallWait(pVM, idCpu, (PFNRT)dbgfR3DisasInstrExOnVCpu, 9,
    664                                      pVM, VMMGetCpuById(pVM, idCpu), pAddr->Sel, &pAddr->off, fFlags, pszOutput, cbOutput, NULL, pDisState);
     664                                     pVM, VMMGetCpuById(pVM, idCpu), pAddr->Sel, &pAddr->off, fFlags,
     665                                     pszOutput, cbOutput, NULL, pDisState);
    665666    return rc;
    666667}
  • trunk/src/VBox/VMM/VMMR3/DBGFInfo.cpp

    r98103 r105352  
    12021202    if (idCpu == NIL_VMCPUID)
    12031203        return dbgfR3Info(pUVM, NIL_VMCPUID, pszName, pszArgs, pHlp);
    1204     return VMR3ReqPriorityCallWaitU(pUVM, idCpu,
    1205                                     (PFNRT)dbgfR3Info, 5, pUVM, idCpu, pszName, pszArgs, pHlp);
     1204    return VMR3ReqPriorityCallWaitU(pUVM, idCpu, (PFNRT)dbgfR3Info, 5, pUVM, idCpu, pszName, pszArgs, pHlp);
    12061205}
    12071206
  • trunk/src/VBox/VMM/VMMR3/DBGFMem.cpp

    r99051 r105352  
    661661     */
    662662    return VMR3ReqPriorityCallWaitU(pUVM, idCpu, (PFNRT)dbgfR3PagingDumpEx, 8,
    663                                     pUVM, idCpu, fFlags, &cr3, &u64FirstAddr, &u64LastAddr, cMaxDepth, pHlp ? pHlp : DBGFR3InfoLogHlp());
    664 }
    665 
     663                                    pUVM, idCpu, fFlags, &cr3, &u64FirstAddr, &u64LastAddr, cMaxDepth,
     664                                    pHlp ? pHlp : DBGFR3InfoLogHlp());
     665}
     666
  • trunk/src/VBox/VMM/VMMR3/DBGFOS.cpp

    r98103 r105352  
    520520     * Pass it on to EMT(0).
    521521     */
    522     return VMR3ReqPriorityCallWaitU(pUVM, 0 /*idDstCpu*/,
    523                                    (PFNRT)dbgfR3OSQueryNameAndVersion, 5, pUVM, pszName, cchName, pszVersion, cchVersion);
     522    return VMR3ReqPriorityCallWaitU(pUVM, 0 /*idDstCpu*/, (PFNRT)dbgfR3OSQueryNameAndVersion, 5,
     523                                    pUVM, pszName, cchName, pszVersion, cchVersion);
    524524}
    525525
  • trunk/src/VBox/VMM/VMMR3/DBGFStack.cpp

    r103374 r105352  
    803803                                                PCDBGFADDRESS pAddrStack,
    804804                                                PCDBGFADDRESS pAddrPC,
    805                                                 RTDBGRETURNTYPE enmReturnType,
     805                                                RTDBGRETURNTYPE const *penmReturnType,
    806806                                                PCDBGFSTACKFRAME *ppFirstFrame)
    807807{
    808     DBGFUNWINDCTX UnwindCtx(pUVM, idCpu, pCtx, hAs);
     808    RTDBGRETURNTYPE const enmReturnType = *penmReturnType; /* darwin/arm64 fun, see @bugref{10725} */
     809    DBGFUNWINDCTX         UnwindCtx(pUVM, idCpu, pCtx, hAs);
    809810
    810811    /* alloc first frame. */
     
    10431044            AssertFailedReturn(VERR_INVALID_PARAMETER);
    10441045    }
    1045     return VMR3ReqPriorityCallWaitU(pUVM, idCpu, (PFNRT)dbgfR3StackWalkCtxFull, 10,
    1046                                     pUVM, idCpu, pCtx, hAs, enmCodeType,
    1047                                     pAddrFrame, pAddrStack, pAddrPC, enmReturnType, ppFirstFrame);
     1046    return VMR3ReqPriorityCallWaitU(pUVM, idCpu, (PFNRT)dbgfR3StackWalkCtxFull, 10 | VMREQ_F_EXTRA_ARGS_ALL_PTRS,
     1047                                    pUVM, idCpu, pCtx, hAs, enmCodeType, pAddrFrame, pAddrStack, pAddrPC,
     1048                                    &enmReturnType, ppFirstFrame);
    10481049}
    10491050
  • trunk/src/VBox/VMM/VMMR3/PDMDevHlp.cpp

    r104840 r105352  
    15191519
    15201520    PVMREQ pReq;
    1521     int rc = VMR3ReqCallVU(pDevIns->Internal.s.pVMR3->pUVM, idDstCpu, &pReq, RT_INDEFINITE_WAIT, VMREQFLAGS_VBOX_STATUS | VMREQFLAGS_PRIORITY,
    1522                            pfnFunction, cArgs, Args);
     1521    int rc = VMR3ReqCallVU(pDevIns->Internal.s.pVMR3->pUVM, idDstCpu, &pReq, RT_INDEFINITE_WAIT,
     1522                           VMREQFLAGS_VBOX_STATUS | VMREQFLAGS_PRIORITY, pfnFunction, cArgs, Args);
    15231523    if (RT_SUCCESS(rc))
    15241524        rc = pReq->iStatus;
  • trunk/src/VBox/VMM/VMMR3/PGMPhys.cpp

    r104990 r105352  
    55525552        memcpy(paPhysPageCopy, paPhysPage, cbPhysPage);
    55535553
    5554         rc = VMR3ReqCallNoWait(pVM, VMCPUID_ANY_QUEUE, (PFNRT)pgmR3PhysChangeMemBalloonHelper, 4, pVM, fInflate, cPages, paPhysPageCopy);
     5554        rc = VMR3ReqCallNoWait(pVM, VMCPUID_ANY_QUEUE, (PFNRT)pgmR3PhysChangeMemBalloonHelper, 4,
     5555                               pVM, fInflate, cPages, paPhysPageCopy);
    55555556        AssertRC(rc);
    55565557    }
  • trunk/src/VBox/VMM/VMMR3/VMReq.cpp

    r98103 r105352  
    7171 * @param   pfnFunction     Pointer to the function to call.
    7272 * @param   cArgs           Number of arguments following in the ellipsis.
     73 *                          The max is VMREQ_MAX_ARGS (9) (ARM64/darwin
     74 *                          peculiarities), unless VMREQ_F_EXTRA_ARGS_ALL_PTRS
     75 *                          is ORed in.
    7376 * @param   ...             Function arguments.
    7477 *
     
    108111 * @param   pfnFunction     Pointer to the function to call.
    109112 * @param   cArgs           Number of arguments following in the ellipsis.
     113 *                          The max is VMREQ_MAX_ARGS (9) (ARM64/darwin
     114 *                          peculiarities), unless VMREQ_F_EXTRA_ARGS_ALL_PTRS
     115 *                          is ORed in.
    110116 * @param   ...             Function arguments.
    111117 *
     
    142148 * @param   pfnFunction     Pointer to the function to call.
    143149 * @param   cArgs           Number of arguments following in the ellipsis.
     150 *                          The max is VMREQ_MAX_ARGS (9) (ARM64/darwin
     151 *                          peculiarities), unless VMREQ_F_EXTRA_ARGS_ALL_PTRS
     152 *                          is ORed in.
    144153 * @param   ...             Function arguments.
    145154 *
     
    172181 * @param   pfnFunction     Pointer to the function to call.
    173182 * @param   cArgs           Number of arguments following in the ellipsis.
     183 *                          The max is VMREQ_MAX_ARGS (9) (ARM64/darwin
     184 *                          peculiarities), unless VMREQ_F_EXTRA_ARGS_ALL_PTRS
     185 *                          is ORed in.
    174186 * @param   ...             Function arguments.
    175187 *
     
    201213 * @param   pfnFunction     Pointer to the function to call.
    202214 * @param   cArgs           Number of arguments following in the ellipsis.
     215 *                          The max is VMREQ_MAX_ARGS (9) (ARM64/darwin
     216 *                          peculiarities), unless VMREQ_F_EXTRA_ARGS_ALL_PTRS
     217 *                          is ORed in.
    203218 * @param   ...             Function arguments.
    204219 *
     
    233248 * @param   pfnFunction     Pointer to the function to call.
    234249 * @param   cArgs           Number of arguments following in the ellipsis.
     250 *                          The max is VMREQ_MAX_ARGS (9) (ARM64/darwin
     251 *                          peculiarities), unless VMREQ_F_EXTRA_ARGS_ALL_PTRS
     252 *                          is ORed in.
    235253 * @param   ...             Function arguments.
    236254 *
     
    264282 * @param   pfnFunction     Pointer to the function to call.
    265283 * @param   cArgs           Number of arguments following in the ellipsis.
     284 *                          The max is VMREQ_MAX_ARGS (9) (ARM64/darwin
     285 *                          peculiarities), unless VMREQ_F_EXTRA_ARGS_ALL_PTRS
     286 *                          is ORed in.
    266287 * @param   ...             Function arguments.
    267288 *
     
    300321 * @param   pfnFunction     Pointer to the function to call.
    301322 * @param   cArgs           Number of arguments following in the ellipsis.
     323 *                          The max is VMREQ_MAX_ARGS (9) (ARM64/darwin
     324 *                          peculiarities), unless VMREQ_F_EXTRA_ARGS_ALL_PTRS
     325 *                          is ORed in.
    302326 * @param   ...             Function arguments.
    303327 *
     
    338362 * @param   pfnFunction     Pointer to the function to call.
    339363 * @param   cArgs           Number of arguments following in the ellipsis.
     364 *                          The max is VMREQ_MAX_ARGS (9) (ARM64/darwin
     365 *                          peculiarities), unless VMREQ_F_EXTRA_ARGS_ALL_PTRS
     366 *                          is ORed in.
    340367 * @param   ...             Function arguments.
    341368 *
     
    372399 * @param   pfnFunction     Pointer to the function to call.
    373400 * @param   cArgs           Number of arguments following in the ellipsis.
     401 *                          The max is VMREQ_MAX_ARGS (9) (ARM64/darwin
     402 *                          peculiarities), unless VMREQ_F_EXTRA_ARGS_ALL_PTRS
     403 *                          is ORed in.
    374404 * @param   ...             Function arguments.
    375405 *
     
    414444 * @param   pfnFunction     Pointer to the function to call.
    415445 * @param   cArgs           Number of arguments following in the ellipsis.
     446 *                          The max is VMREQ_MAX_ARGS (9) (ARM64/darwin
     447 *                          peculiarities), unless VMREQ_F_EXTRA_ARGS_ALL_PTRS
     448 *                          is ORed in.
    416449 * @param   ...             Function arguments.
    417450 *
     
    454487 * @param   fFlags          A combination of the VMREQFLAGS values.
    455488 * @param   cArgs           Number of arguments following in the ellipsis.
     489 *                          The max is VMREQ_MAX_ARGS (9) (ARM64/darwin
     490 *                          peculiarities), unless VMREQ_F_EXTRA_ARGS_ALL_PTRS
     491 *                          is ORed in.
    456492 *                          Stuff which differs in size from uintptr_t is gonna make trouble, so don't try!
    457493 * @param   Args            Argument vector.
     
    465501 *                hosts because 'int' is 32-bit.
    466502 *                Use (void *)NULL or (uintptr_t)0 instead of NULL.
     503 *              - The max number of arguments is currently limited to 9, because
     504 *                on macOS/arm64 arguments passed on the stack that are 32-bit
     505 *                or smaller will not get a full 64-bit stack slot.  So,
     506 *                we cannot pretend @a pfnFunction takes a list of @a cArgs
     507 *                uintptr_t parameters, unless all parameters above 9 actually
     508 *                are more than 32 bits wide.   (This would've kind of worked
     509 *                iff the variadict functions didn't use different size round up
     510 *                and alignment rules.)  See @bugref{10725}.
    467511 */
    468512VMMR3DECL(int) VMR3ReqCallVU(PUVM pUVM, VMCPUID idDstCpu, PVMREQ *ppReq, RTMSINTERVAL cMillies, uint32_t fFlags,
    469513                             PFNRT pfnFunction, unsigned cArgs, va_list Args)
    470514{
    471     LogFlow(("VMR3ReqCallV: idDstCpu=%u cMillies=%d fFlags=%#x pfnFunction=%p cArgs=%d\n", idDstCpu, cMillies, fFlags, pfnFunction, cArgs));
     515    LogFlow(("VMR3ReqCallV: idDstCpu=%u cMillies=%d fFlags=%#x pfnFunction=%p cArgs=%#x\n", idDstCpu, cMillies, fFlags, pfnFunction, cArgs));
    472516
    473517    /*
     
    482526        *ppReq = NULL;
    483527    }
     528    AssertMsgReturn(   cArgs <= VMREQ_MAX_ARGS
     529                    || (   (cArgs & VMREQ_F_EXTRA_ARGS_ALL_PTRS)
     530                        && (cArgs & ~(unsigned)VMREQ_F_EXTRA_ARGS_ALL_PTRS) <= VMREQ_MAX_ARGS_EXTENDED),
     531                    ("cArgs=%#x\n", cArgs),
     532                    VERR_TOO_MUCH_DATA);
     533    cArgs &= ~(unsigned)VMREQ_F_EXTRA_ARGS_ALL_PTRS;
     534
     535    /*
     536     * Allocate request
     537     */
    484538    PVMREQ pReq = NULL;
    485     AssertMsgReturn(cArgs * sizeof(uintptr_t) <= sizeof(pReq->u.Internal.aArgs),
    486                     ("cArg=%d\n", cArgs),
    487                     VERR_TOO_MUCH_DATA);
    488 
    489     /*
    490      * Allocate request
    491      */
     539    AssertCompile(VMREQ_MAX_ARGS_EXTENDED * sizeof(uintptr_t) <= sizeof(pReq->u.Internal.aArgs));
    492540    int rc = VMR3ReqAlloc(pUVM, &pReq, VMREQTYPE_INTERNAL, idDstCpu);
    493541    if (RT_FAILURE(rc))
     
    497545     * Initialize the request data.
    498546     */
    499     pReq->fFlags         = fFlags;
    500     pReq->u.Internal.pfn = pfnFunction;
    501     pReq->u.Internal.cArgs = cArgs;
     547    pReq->fFlags            = fFlags;
     548    pReq->u.Internal.pfn    = pfnFunction;
     549    pReq->u.Internal.cArgs  = cArgs;
    502550    for (unsigned iArg = 0; iArg < cArgs; iArg++)
    503551        pReq->u.Internal.aArgs[iArg] = va_arg(Args, uintptr_t);
  • trunk/src/VBox/VMM/testcase/tstAnimate.cpp

    r99897 r105352  
    848848            rc = VMR3ReqCallWaitU(pUVM, VMCPUID_ANY, (PFNRT)loadMem, 3, pVM, FileRawMem, &offRawMem);
    849849        else
    850             rc = VMR3ReqCallWaitU(pUVM, VMCPUID_ANY, (PFNRT)SSMR3Load,
    851                                   7, pVM, pszSavedState, (uintptr_t)NULL /*pStreamOps*/, (uintptr_t)NULL /*pvUser*/,
     850            rc = VMR3ReqCallWaitU(pUVM, VMCPUID_ANY, (PFNRT)SSMR3Load, 7,
     851                                  pVM, pszSavedState, (uintptr_t)NULL /*pStreamOps*/, (uintptr_t)NULL /*pvUser*/,
    852852                                  SSMAFTER_DEBUG_IT, (uintptr_t)NULL /*pfnProgress*/, (uintptr_t)NULL /*pvProgressUser*/);
    853853        if (RT_SUCCESS(rc))
  • trunk/src/VBox/VMM/testcase/tstVMREQ.cpp

    r105332 r105352  
    330330    CHECK_ARG_EX(8, uArg8, a_Type); \
    331331    return VINF_SUCCESS; \
    332 } \
    333 \
    334 \
     332}
     333
     334/* The max is now 9. See @bugref{10725}.
    335335static DECLCALLBACK(int) a_BaseName##_10Args(a_Type uArg0, a_Type uArg1, a_Type uArg2, a_Type uArg3, a_Type uArg4, \
    336336                                             a_Type uArg5, a_Type uArg6, a_Type uArg7, a_Type uArg8, a_Type uArg9) \
     
    458458    CHECK_ARG_EX(14, uArg14, a_Type); \
    459459    return VINF_SUCCESS; \
    460 }
     460} */
    461461
    462462#if ARCH_BITS == 64
     
    561561    cCalled += 1; \
    562562    RTTEST_CHECK(g_hTest, g_cCalled == cCalled); \
    563     \
     563/* The max is now 9. See @bugref{10725}.
    564564    rc = VMR3ReqCallWaitU(pUVM, VMCPUID_ANY, (PFNRT)a_CallbackBaseName##_10Args, 10, \
    565565                          a_fnRandArg(a_Type, 0), a_fnRandArg(a_Type, 1), a_fnRandArg(a_Type, 2), a_fnRandArg(a_Type, 3), \
     
    611611    RTTEST_CHECK_RC(g_hTest, rc, VINF_SUCCESS); \
    612612    cCalled += 1; \
    613     RTTEST_CHECK(g_hTest, g_cCalled == cCalled)
     613    RTTEST_CHECK(g_hTest, g_cCalled == cCalled) */
    614614
    615615
  • trunk/src/bldprogs/VBoxCompilerPlugInsGcc.cpp

    r103960 r105352  
    244244
    245245/** Attribute specifications. */
    246 static const struct attribute_spec g_AttribSpecs[] =
     246static const struct attribute_spec g_aAttribSpecs[] =
    247247{
    248248    {
     
    809809    dprintf("RegisterAttributesEvent: pvEventData=%p\n", pvEventData);
    810810
    811     register_attribute(&g_AttribSpecs[0]);
    812     register_attribute(&g_AttribSpecs[1]);
     811    for (unsigned i = 0; i < RT_ELEMENTS(g_aAttribSpecs); i++)
     812        register_attribute(&g_aAttribSpecs[i]);
    813813}
    814814
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette