VirtualBox

Changeset 33375 in vbox for trunk


Ignore:
Timestamp:
Oct 24, 2010 12:29:42 PM (14 years ago)
Author:
vboxsync
Message:

SUPDrv: dtrace experiments.

Location:
trunk/src/VBox/HostDrivers/Support
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/Support/Makefile.kmk

    r32183 r33375  
    315315VBoxDrv_DEFS       := VBOX_WITH_HOST_VMX IN_RT_R0 IN_SUP_R0 SUPDRV_WITH_RELEASE_LOGGER VBOX_SVN_REV=$(VBOX_SVN_REV)
    316316VBoxDrv_DEFS.debug  = DEBUG_DARWIN_GIP
    317 VBoxDrv_INCS        = .
     317VBoxDrv_INCS        = . $(VBoxDrv_0_OUTDIR)
    318318VBoxDrv_LIBS        = $(PATH_LIB)/RuntimeR0Drv$(VBOX_SUFF_LIB)
    319319#VBoxDrv_LDFLAGS     = -v -Wl,-whyload -Wl,-v -Wl,-whatsloaded
     
    322322        SUPDrvSem.c \
    323323        $(KBUILD_TARGET)/SUPDrv-$(KBUILD_TARGET).cpp
     324
     325ifdef VBOX_WITH_DTRACE_R0DRV
     326 VBoxDrv_DEFS += VBOX_WITH_DTRACE
     327 VBoxDrv_INTERMEDIATES += $(VBoxDrv_0_OUTDIR)/SUPDrv-dtrace.h
     328 VBoxDrv_CLEAN         += $(VBoxDrv_0_OUTDIR)/SUPDrv-dtrace.h $(VBoxDrv_0_OUTDIR)/SUPDrv-dtrace.tmp
     329 $$(VBoxDrv_0_OUTDIR)/SUPDrv-dtrace.h: $(PATH_SUB_CURRENT)/SUPDrv-dtrace.d | $$(dir $$@)
     330        dtrace -C -h -o [email protected] -s $<
     331        $(SED) -e '/<unistd\.h>/d' [email protected] --output $@
     332        $(RM) -f [email protected]
     333endif
    324334
    325335INSTALLS += VBoxDrv.kext
  • trunk/src/VBox/HostDrivers/Support/SUPDrv.c

    r33269 r33375  
    6262#include <VBox/hwacc_vmx.h>
    6363#include <VBox/x86.h>
     64
     65#ifdef VBOX_WITH_DTRACE
     66# include "SUPDrv-dtrace.h"
     67#else
     68# define VBOXDRV_SUPDRV_SESSION_CREATE(pvSession, fUser) do { } while (0)
     69# define VBOXDRV_SUPDRV_SESSION_CLOSE(pvSession) do { } while (0)
     70# define VBOXDRV_SUPDRV_IOCCLOSE(pvSession) do { } while (0)
     71# define VBOXDRV_SUPDRV_IOCTL_ENTRY(pvSession, uIOCtl, pvReqHdr) do { } while (0)
     72# define VBOXDRV_SUPDRV_IOCTL_RETURN(pvSession, uIOCtl, pvReqHdr, rcRet, rcReq) do { } while (0)
     73#endif
    6474
    6575/*
     
    653663                }
    654664
     665                VBOXDRV_SUPDRV_SESSION_CREATE(pSession, fUser);
    655666                LogFlow(("Created session %p initial cookie=%#x\n", pSession, pSession->u32Cookie));
    656667                return VINF_SUCCESS;
     
    679690void VBOXCALL supdrvCloseSession(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession)
    680691{
     692    VBOXDRV_SUPDRV_SESSION_CLOSE(pSession);
     693
    681694    /*
    682695     * Cleanup the session first.
     
    10161029int VBOXCALL supdrvIOCtl(uintptr_t uIOCtl, PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPREQHDR pReqHdr)
    10171030{
     1031    VBOXDRV_SUPDRV_IOCTL_ENTRY(pSession, uIOCtl, pReqHdr);
     1032
    10181033    /*
    10191034     * Validate the request.
     
    10261041        OSDBGPRINT(("vboxdrv: Bad ioctl request header; cbIn=%#lx cbOut=%#lx fFlags=%#lx\n",
    10271042                    (long)pReqHdr->cbIn, (long)pReqHdr->cbOut, (long)pReqHdr->fFlags));
     1043        VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VERR_INVALID_PARAMETER, VINF_SUCCESS);
    10281044        return VERR_INVALID_PARAMETER;
    10291045    }
     
    10331049        {
    10341050            OSDBGPRINT(("SUP_IOCTL_COOKIE: bad cookie %#lx\n", (long)pReqHdr->u32Cookie));
     1051            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VERR_INVALID_PARAMETER, VINF_SUCCESS);
    10351052            return VERR_INVALID_PARAMETER;
    10361053        }
     
    10401057    {
    10411058        OSDBGPRINT(("vboxdrv: bad cookie %#lx / %#lx.\n", (long)pReqHdr->u32Cookie, (long)pReqHdr->u32SessionCookie));
     1059        VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VERR_INVALID_PARAMETER, VINF_SUCCESS);
    10421060        return VERR_INVALID_PARAMETER;
    10431061    }
     
    10521070            OSDBGPRINT(( #Name ": Invalid input/output sizes. cbIn=%ld expected %ld. cbOut=%ld expected %ld.\n", \
    10531071                        (long)pReq->Hdr.cbIn, (long)(cbInExpect), (long)pReq->Hdr.cbOut, (long)(cbOutExpect))); \
     1072            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VERR_INVALID_PARAMETER, VERR_INVALID_PARAMETER); \
    10541073            return pReq->Hdr.rc = VERR_INVALID_PARAMETER; \
    10551074        } \
     
    10641083            OSDBGPRINT(( #Name ": Invalid input/output sizes. cbIn=%ld expected %ld.\n", \
    10651084                        (long)pReq->Hdr.cbIn, (long)(cbInExpect))); \
     1085            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VERR_INVALID_PARAMETER, VERR_INVALID_PARAMETER); \
    10661086            return pReq->Hdr.rc = VERR_INVALID_PARAMETER; \
    10671087        } \
     
    10741094            OSDBGPRINT(( #Name ": Invalid input/output sizes. cbOut=%ld expected %ld.\n", \
    10751095                        (long)pReq->Hdr.cbOut, (long)(cbOutExpect))); \
     1096            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VERR_INVALID_PARAMETER, VERR_INVALID_PARAMETER); \
    10761097            return pReq->Hdr.rc = VERR_INVALID_PARAMETER; \
    10771098        } \
     
    10831104        { \
    10841105            OSDBGPRINT(( #Name ": %s\n", #expr)); \
     1106            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VERR_INVALID_PARAMETER, VERR_INVALID_PARAMETER); \
    10851107            return pReq->Hdr.rc = VERR_INVALID_PARAMETER; \
    10861108        } \
     
    10921114        { \
    10931115            OSDBGPRINT( fmt ); \
     1116            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VERR_INVALID_PARAMETER, VERR_INVALID_PARAMETER); \
    10941117            return pReq->Hdr.rc = VERR_INVALID_PARAMETER; \
    10951118        } \
     
    11101133                OSDBGPRINT(("SUP_IOCTL_COOKIE: invalid magic %.16s\n", pReq->u.In.szMagic));
    11111134                pReq->Hdr.rc = VERR_INVALID_MAGIC;
     1135                VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, VERR_INVALID_MAGIC);
    11121136                return 0;
    11131137            }
     
    11271151                pReq->u.Out.cFunctions        = 0;
    11281152                pReq->Hdr.rc = VERR_PERMISSION_DENIED;
     1153                VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, VERR_PERMISSION_DENIED);
    11291154                return 0;
    11301155            }
     
    11471172                pReq->u.Out.cFunctions        = 0;
    11481173                pReq->Hdr.rc = VERR_VERSION_MISMATCH;
     1174                VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    11491175                return 0;
    11501176            }
     
    11631189            pReq->u.Out.cFunctions        = sizeof(g_aFunctions) / sizeof(g_aFunctions[0]);
    11641190            pReq->Hdr.rc = VINF_SUCCESS;
     1191            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    11651192            return 0;
    11661193        }
     
    11761203            memcpy(&pReq->u.Out.aFunctions[0], g_aFunctions, sizeof(g_aFunctions));
    11771204            pReq->Hdr.rc = VINF_SUCCESS;
     1205            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    11781206            return 0;
    11791207        }
     
    11921220            if (RT_FAILURE(pReq->Hdr.rc))
    11931221                pReq->Hdr.cbOut = sizeof(pReq->Hdr);
     1222            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    11941223            return 0;
    11951224        }
     
    12031232            /* execute */
    12041233            pReq->Hdr.rc = SUPR0UnlockMem(pSession, pReq->u.In.pvR3);
     1234            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    12051235            return 0;
    12061236        }
     
    12161246            if (RT_FAILURE(pReq->Hdr.rc))
    12171247                pReq->Hdr.cbOut = sizeof(pReq->Hdr);
     1248            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    12181249            return 0;
    12191250        }
     
    12271258            /* execute */
    12281259            pReq->Hdr.rc = SUPR0ContFree(pSession, (RTHCUINTPTR)pReq->u.In.pvR3);
     1260            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    12291261            return 0;
    12301262        }
     
    12471279            /* execute */
    12481280            pReq->Hdr.rc = supdrvIOCtl_LdrOpen(pDevExt, pSession, pReq);
     1281            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    12491282            return 0;
    12501283        }
     
    12871320            /* execute */
    12881321            pReq->Hdr.rc = supdrvIOCtl_LdrLoad(pDevExt, pSession, pReq);
     1322            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    12891323            return 0;
    12901324        }
     
    12981332            /* execute */
    12991333            pReq->Hdr.rc = supdrvIOCtl_LdrFree(pDevExt, pSession, pReq);
     1334            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    13001335            return 0;
    13011336        }
     
    13101345            /* execute */
    13111346            pReq->Hdr.rc = supdrvIOCtl_LdrGetSymbol(pDevExt, pSession, pReq);
     1347            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    13121348            return 0;
    13131349        }
     
    13531389                Log4(("SUP_IOCTL_CALL_VMMR0: rc=%Rrc op=%u out=%u arg=%RX64 p/t=%RTproc/%RTthrd\n",
    13541390                      pReq->Hdr.rc, pReq->u.In.uOperation, pReq->Hdr.cbOut, pReq->u.In.u64Arg, RTProcSelf(), RTThreadNativeSelf()));
     1391            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    13551392            return 0;
    13561393        }
     
    13651402            pReq->Hdr.rc = VINF_SUCCESS;
    13661403            pReq->u.Out.enmMode = SUPR0GetPagingMode();
     1404            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    13671405            return 0;
    13681406        }
     
    13791417            if (RT_FAILURE(pReq->Hdr.rc))
    13801418                pReq->Hdr.cbOut = sizeof(pReq->Hdr);
     1419            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    13811420            return 0;
    13821421        }
     
    13901429            /* execute */
    13911430            pReq->Hdr.rc = SUPR0LowFree(pSession, (RTHCUINTPTR)pReq->u.In.pvR3);
     1431            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    13921432            return 0;
    13931433        }
     
    14031443            if (RT_SUCCESS(pReq->Hdr.rc))
    14041444                pReq->u.Out.pGipR0 = pDevExt->pGip;
     1445            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    14051446            return 0;
    14061447        }
     
    14141455            /* execute */
    14151456            pReq->Hdr.rc = SUPR0GipUnmap(pSession);
     1457            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    14161458            return 0;
    14171459        }
     
    14291471            pSession->pVM = pReq->u.In.pVMR0;
    14301472            pReq->Hdr.rc = VINF_SUCCESS;
     1473            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    14311474            return 0;
    14321475        }
     
    14521495            if (RT_FAILURE(pReq->Hdr.rc))
    14531496                pReq->Hdr.cbOut = sizeof(pReq->Hdr);
     1497            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    14541498            return 0;
    14551499        }
     
    14701514            if (RT_FAILURE(pReq->Hdr.rc))
    14711515                pReq->Hdr.cbOut = sizeof(pReq->Hdr);
     1516            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    14721517            return 0;
    14731518        }
     
    14861531            /* execute */
    14871532            pReq->Hdr.rc = SUPR0PageProtect(pSession, pReq->u.In.pvR3, pReq->u.In.pvR0, pReq->u.In.offSub, pReq->u.In.cbSub, pReq->u.In.fProt);
     1533            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    14881534            return 0;
    14891535        }
     
    14971543            /* execute */
    14981544            pReq->Hdr.rc = SUPR0PageFree(pSession, pReq->u.In.pvR3);
     1545            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    14991546            return 0;
    15001547        }
     
    15211568            /* execute */
    15221569            pReq->Hdr.rc = supdrvIOCtl_CallServiceModule(pDevExt, pSession, pReq);
     1570            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    15231571            return 0;
    15241572        }
     
    15431591            /* execute */
    15441592            pReq->Hdr.rc = supdrvIOCtl_LoggerSettings(pDevExt, pSession, pReq);
     1593            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    15451594            return 0;
    15461595        }
     
    15751624                    break;
    15761625            }
     1626            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    15771627            return 0;
    15781628        }
     
    16371687                    break;
    16381688            }
     1689            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    16391690            return 0;
    16401691        }
     
    17881839            if (RT_FAILURE(pReq->Hdr.rc))
    17891840                pReq->Hdr.cbOut = sizeof(pReq->Hdr);
     1841            VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VINF_SUCCESS, pReq->Hdr.rc);
    17901842            return 0;
    17911843        }
     
    17951847            break;
    17961848    }
     1849    VBOXDRV_SUPDRV_IOCTL_RETURN(pSession, uIOCtl, pReqHdr, VERR_GENERAL_FAILURE, VERR_GENERAL_FAILURE);
    17971850    return VERR_GENERAL_FAILURE;
    17981851}
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