]> git.saurik.com Git - apple/xnu.git/blobdiff - iokit/Kernel/IOFilterInterruptEventSource.cpp
xnu-7195.101.1.tar.gz
[apple/xnu.git] / iokit / Kernel / IOFilterInterruptEventSource.cpp
index e3b9803cf3b813343fadfae0401b7e032a681a2c..a5d36fe37769af67de2233392ae6c108e473082c 100644 (file)
@@ -26,6 +26,8 @@
  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
  */
 
+#define IOKIT_ENABLE_SHARED_PTR
+
 #include <IOKit/IOFilterInterruptEventSource.h>
 #include <IOKit/IOService.h>
 #include <IOKit/IOKitDebug.h>
@@ -78,13 +80,13 @@ IOFilterInterruptEventSource::init(OSObject *inOwner,
        return false;
 }
 
-IOInterruptEventSource *
+OSSharedPtr<IOInterruptEventSource>
 IOFilterInterruptEventSource::interruptEventSource(OSObject *inOwner,
     Action inAction,
     IOService *inProvider,
     int inIntIndex)
 {
-       return 0;
+       return NULL;
 }
 
 bool
@@ -109,7 +111,7 @@ IOFilterInterruptEventSource::init(OSObject *inOwner,
        return true;
 }
 
-IOFilterInterruptEventSource *
+OSSharedPtr<IOFilterInterruptEventSource>
 IOFilterInterruptEventSource
 ::filterInterruptEventSource(OSObject *inOwner,
     Action inAction,
@@ -117,19 +119,18 @@ IOFilterInterruptEventSource
     IOService *inProvider,
     int inIntIndex)
 {
-       IOFilterInterruptEventSource *me = new IOFilterInterruptEventSource;
+       OSSharedPtr<IOFilterInterruptEventSource> me = OSMakeShared<IOFilterInterruptEventSource>();
 
        if (me
            && !me->init(inOwner, inAction, inFilterAction, inProvider, inIntIndex)) {
-               me->release();
-               return 0;
+               return nullptr;
        }
 
        return me;
 }
 
 
-IOFilterInterruptEventSource *
+OSSharedPtr<IOFilterInterruptEventSource>
 IOFilterInterruptEventSource
 ::filterInterruptEventSource(OSObject *inOwner,
     IOService *inProvider,
@@ -137,18 +138,17 @@ IOFilterInterruptEventSource
     ActionBlock inAction,
     FilterBlock inFilterAction)
 {
-       IOFilterInterruptEventSource *me = new IOFilterInterruptEventSource;
+       OSSharedPtr<IOFilterInterruptEventSource> me = OSMakeShared<IOFilterInterruptEventSource>();
 
        FilterBlock filter = Block_copy(inFilterAction);
        if (!filter) {
-               return 0;
+               return nullptr;
        }
 
        if (me
            && !me->init(inOwner, (Action) NULL, (Filter) filter, inProvider, inIntIndex)) {
-               me->release();
                Block_release(filter);
-               return 0;
+               return nullptr;
        }
        me->flags |= kFilterBlock;
        me->setActionBlock((IOEventSource::ActionBlock) inAction);
@@ -220,9 +220,13 @@ IOFilterInterruptEventSource::normalInterruptOccurred
        }
 
        if (IOInterruptEventSource::reserved->statistics) {
-               if (IA_GET_STATISTIC_ENABLED(kInterruptAccountingFirstLevelTimeIndex)) {
+               if (IA_GET_STATISTIC_ENABLED(kInterruptAccountingFirstLevelTimeIndex)
+                   || IOInterruptEventSource::reserved->statistics->enablePrimaryTimestamp) {
                        startTime = mach_absolute_time();
                }
+               if (IOInterruptEventSource::reserved->statistics->enablePrimaryTimestamp) {
+                       IOInterruptEventSource::reserved->statistics->primaryTimestamp = startTime;
+               }
        }
 
        // Call the filter.
@@ -269,9 +273,13 @@ IOFilterInterruptEventSource::disableInterruptOccurred
        }
 
        if (IOInterruptEventSource::reserved->statistics) {
-               if (IA_GET_STATISTIC_ENABLED(kInterruptAccountingFirstLevelTimeIndex)) {
+               if (IA_GET_STATISTIC_ENABLED(kInterruptAccountingFirstLevelTimeIndex)
+                   || IOInterruptEventSource::reserved->statistics->enablePrimaryTimestamp) {
                        startTime = mach_absolute_time();
                }
+               if (IOInterruptEventSource::reserved->statistics->enablePrimaryTimestamp) {
+                       IOInterruptEventSource::reserved->statistics->primaryTimestamp = startTime;
+               }
        }
 
        // Call the filter.