VirtualBox

Changeset 50699 in vbox for trunk/src/VBox/Additions/common


Ignore:
Timestamp:
Mar 5, 2014 11:37:08 AM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
92653
Message:

Darwin Additions: fix kernel panic during VBoxGuest.kext unloading (do not use logger in IOService' ::stop and ::terminate sinse its instance was destroyed in BSD kext unload handler); log messages updated slightly; use macro instead of printf()s.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest-darwin.cpp

    r50688 r50699  
    7070
    7171
     72/** PINFO() - always does printf(). */
     73#define PINFO(fmt, args...) \
     74    printf(fmt "\n", ## args)
     75
     76/** PDEBUG() - does printf() with extra debug data on DEBUG build and keep silence on a release one. */
     77#if DEBUG
     78# define MODULE_NAME "VBoxGuest"
     79# define PDEBUG(fmt, args...) \
     80     printf(MODULE_NAME ": DEBUG: %s:%d %s(): " fmt "\n", __FILE__, __LINE__, __FUNCTION__, ## args)
     81#else
     82# define PDEBUG(fmt, args...) { ; }
     83#endif
     84
    7285
    7386/*******************************************************************************
     
    217230static kern_return_t    VbgdDarwinStart(struct kmod_info *pKModInfo, void *pvData)
    218231{
    219 #ifdef DEBUG
    220     printf("VbgdDarwinStart\n");
    221 #endif
    222 
    223232    /*
    224233     * Initialize IPRT.
     
    227236    if (RT_FAILURE(rc))
    228237    {
    229         printf("VBoxGuest: RTR0Init failed with rc=%d\n", rc);
     238        PDEBUG("VBoxGuest: RTR0Init failed with rc=%d\n", rc);
    230239        return KMOD_RETURN_FAILURE;
    231240    }
     241
     242    PDEBUG("VBoxGuest: driver loaded\n");
    232243
    233244    return KMOD_RETURN_SUCCESS;
     
    280291{
    281292    RTR0TermForced();
    282 #ifdef DEBUG
    283     printf("VbgdDarwinStop - done\n");
    284 #endif
     293
     294    PDEBUG("VBoxGuest: driver unloaded\n");
     295
    285296    return KMOD_RETURN_SUCCESS;
    286297}
     
    671682    bool fTaken = VBoxGuestCommonISR(&g_DevExt);
    672683    if (!fTaken) /** @todo r=bird: This looks bogus as we might actually be sharing interrupts with someone. */
    673         printf("VBoxGuestCommonISR error\n");
     684        PDEBUG("VBoxGuestCommonISR error\n");
    674685
    675686    return fTaken;
     
    799810                                /* register the service. */
    800811                                registerService();
    801                                 LogRel(("VBoxGuest: Successfully started I/O kit class instance.\n"));
     812                                LogRel(("VBoxGuest: IOService started\n"));
    802813                                return true;
    803814                            }
     
    844855void org_virtualbox_VBoxGuest::stop(IOService *pProvider)
    845856{
    846     LogFlow(("org_virtualbox_VBoxGuest::stop([%p], %p)\n", this, pProvider));
     857    /* Do not use Log*() here (in IOService instance) because its instance
     858     * already terminated in BSD's module unload callback! */
     859    PDEBUG("org_virtualbox_VBoxGuest::stop([%p], %p)\n", this, pProvider);
    847860
    848861    AssertReturnVoid(ASMAtomicReadBool(&g_fInstantiated));
     
    850863    /* Low level termination should be performed only once */
    851864    if (!disableVmmDevInterrupts())
    852         LogRel(("vboxguest: unable to unregister interrupt handler\n"));
     865        PDEBUG("VBoxGuest: unable to unregister interrupt handler\n");
    853866
    854867    VbgdDarwinCharDevRemove();
     
    865878    ASMAtomicWriteBool(&g_fInstantiated, false);
    866879
    867     LogRel(("vboxguest module unloaded\n"));
     880    PINFO("VBoxGuest: IOService stopped\n");
    868881}
    869882
     
    877890bool org_virtualbox_VBoxGuest::terminate(IOOptionBits fOptions)
    878891{
     892    /* Do not use Log*() here (in IOService instance) because its instance
     893     * already terminated in BSD's module unload callback! */
     894
    879895    bool fRc;
    880     LogFlow(("org_virtualbox_VBoxGuest::terminate: reference_count=%d g_cSessions=%d (fOptions=%#x)\n",
    881              KMOD_INFO_NAME.reference_count, ASMAtomicUoReadS32(&g_cSessions), fOptions));
     896    PDEBUG("org_virtualbox_VBoxGuest::terminate: reference_count=%d g_cSessions=%d (fOptions=%#x)\n",
     897             KMOD_INFO_NAME.reference_count, ASMAtomicUoReadS32(&g_cSessions), fOptions);
    882898    if (    KMOD_INFO_NAME.reference_count != 0
    883899        ||  ASMAtomicUoReadS32(&g_cSessions))
     
    885901    else
    886902        fRc = IOService::terminate(fOptions);
    887     LogFlow(("org_virtualbox_SupDrv::terminate: returns %d\n", fRc));
     903    PDEBUG("org_virtualbox_SupDrv::terminate: returns %d\n", fRc);
    888904    return fRc;
    889905}
Note: See TracChangeset for help on using the changeset viewer.

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