X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/3e170ce000f1506b7b5d2c5c7faec85ceabb573d..008676633c2ad2c325837c2b64915f7ded690a8f:/iokit/Kernel/IOHistogramReporter.cpp diff --git a/iokit/Kernel/IOHistogramReporter.cpp b/iokit/Kernel/IOHistogramReporter.cpp index 21e92e935..929a830f2 100644 --- a/iokit/Kernel/IOHistogramReporter.cpp +++ b/iokit/Kernel/IOHistogramReporter.cpp @@ -62,6 +62,8 @@ IOHistogramReporter::with(IOService *reportingService, return reporter; } } + OSSafeReleaseNULL(reporter); + OSSafeReleaseNULL(tmpChannelName); return 0; } @@ -208,7 +210,8 @@ IOHistogramReporter::initWith(IOService *reportingService, if (cnt3 >= _nElements) { IORLOG("ERROR: _bucketBounds init"); - return false; + result = false; + goto finish; } if (_histogramSegmentsConfig[cnt].scale_flag) { @@ -245,21 +248,6 @@ IOHistogramReporter::initWith(IOService *reportingService, result = true; finish: - if (result != true) { - - if (_histogramSegmentsConfig) - IOFree(_histogramSegmentsConfig, configSize); - - if (_elements) - IOFree(_elements, elementsSize); - - if (_enableCounts) - IOFree(_enableCounts, eCountsSize); - - if (_bucketBounds) - IOFree(_bucketBounds, boundsSize); - } - return result; } @@ -314,6 +302,33 @@ finish: return legendEntry; } +IOReturn +IOHistogramReporter::overrideBucketValues(unsigned int index, + uint64_t bucket_hits, + int64_t bucket_min, + int64_t bucket_max, + int64_t bucket_sum) +{ + IOReturn result; + IOHistogramReportValues bucket; + lockReporter(); + + if (index >= (unsigned int)_bucketCount) { + result = kIOReturnBadArgument; + goto finish; + } + + bucket.bucket_hits = bucket_hits; + bucket.bucket_min = bucket_min; + bucket.bucket_max = bucket_max; + bucket.bucket_sum = bucket_sum; + + result = setElementValues(index, (IOReportElementValues *)&bucket); +finish: + unlockReporter(); + return result; +} + int IOHistogramReporter::tallyValue(int64_t value) {