X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/5ba3f43ea354af8ad55bea84372a2bc834d8757c..94ff46dc2849db4d43eaaf144872decc522aafb4:/bsd/netinet/in_stat.c diff --git a/bsd/netinet/in_stat.c b/bsd/netinet/in_stat.c index c7f36defb..c47255185 100644 --- a/bsd/netinet/in_stat.c +++ b/bsd/netinet/in_stat.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 Apple Inc. All rights reserved. + * Copyright (c) 2017-2018 Apple Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * @@ -28,20 +28,22 @@ #include -#define IN_STAT_ACTIVITY_GRANULARITY 8 /* 8 sec granularity */ -#define IN_STAT_ACTIVITY_TIME_SEC_SHIFT 3 /* 8 sec per bit */ -#define IN_STAT_ACTIVITY_BITMAP_TOTAL_SIZE ((uint64_t) 128) -#define IN_STAT_ACTIVITY_BITMAP_FIELD_SIZE ((uint64_t) 64) -#define IN_STAT_ACTIVITY_TOTAL_TIME ((uint64_t) (8 * 128)) -#define IN_STAT_SET_MOST_SIGNIFICANT_BIT ((u_int64_t )0x8000000000000000) +#define IN_STAT_ACTIVITY_GRANULARITY 8 /* 8 sec granularity */ +#define IN_STAT_ACTIVITY_TIME_SEC_SHIFT 3 /* 8 sec per bit */ +#define IN_STAT_ACTIVITY_BITMAP_TOTAL_SIZE ((uint64_t) 128) +#define IN_STAT_ACTIVITY_BITMAP_FIELD_SIZE ((uint64_t) 64) +#define IN_STAT_ACTIVITY_TOTAL_TIME ((uint64_t) (8 * 128)) +#define IN_STAT_SET_MOST_SIGNIFICANT_BIT ((u_int64_t )0x8000000000000000) void in_stat_set_activity_bitmap(activity_bitmap_t *activity, uint64_t now) { uint64_t elapsed_time, slot; uint64_t *bitmap; - if (activity->start == 0) - activity->start = now; + if (activity->start == 0) { + // Align all activity maps + activity->start = now - (now % IN_STAT_ACTIVITY_GRANULARITY); + } elapsed_time = now - activity->start; slot = elapsed_time >> IN_STAT_ACTIVITY_TIME_SEC_SHIFT; @@ -70,10 +72,11 @@ in_stat_set_activity_bitmap(activity_bitmap_t *activity, uint64_t now) activity->bitmap[0] = activity->bitmap[1]; activity->bitmap[1] = 0; shift -= IN_STAT_ACTIVITY_BITMAP_FIELD_SIZE; - if (shift == IN_STAT_ACTIVITY_BITMAP_FIELD_SIZE) + if (shift == IN_STAT_ACTIVITY_BITMAP_FIELD_SIZE) { activity->bitmap[0] = 0; - else + } else { activity->bitmap[0] >>= shift; + } } else { uint64_t mask_lower, tmp; uint64_t b1_low, b0_high; @@ -89,7 +92,7 @@ in_stat_set_activity_bitmap(activity_bitmap_t *activity, uint64_t now) b0_high = (b1_low << (IN_STAT_ACTIVITY_BITMAP_FIELD_SIZE - - shift)); + shift)); activity->bitmap[0] |= b0_high; activity->bitmap[1] >>= shift; }