43 #ifndef _KLRESTRICTED_CODE_PATH_H
44 #define _KLRESTRICTED_CODE_PATH_H
58 uint64_t minimumIntervalMs;
60 struct timeval lastExecuteTime;
61 uint64_t countBlockEntered;
62 uint64_t countBlockAvoided;
65 static __inline__
int klrcp_timeval_subtract(
struct timeval *result,
struct timeval *x,
struct timeval *y)
68 if (x->tv_usec < y->tv_usec)
70 int nsec = (y->tv_usec - x->tv_usec) / 1000000 + 1;
71 y->tv_usec -= 1000000 * nsec;
74 if (x->tv_usec - y->tv_usec > 1000000)
76 int nsec = (x->tv_usec - y->tv_usec) / 1000000;
77 y->tv_usec += 1000000 * nsec;
82 result->tv_sec = x->tv_sec - y->tv_sec;
83 result->tv_usec = x->tv_usec - y->tv_usec;
86 return x->tv_sec < y->tv_sec;
89 static __inline uint64_t klrcp_timediff_to_msecs(
struct timeval *tv)
91 return (tv->tv_sec * 1000) + (tv->tv_usec / 1000);
95 int enableChecking, uint64_t minimumIntervalMs)
97 memset(blk, 0,
sizeof(*blk));
99 blk->enableChecking = enableChecking;
100 blk->minimumIntervalMs = minimumIntervalMs;
105 if (blk->enableChecking == 0) {
106 blk->countBlockEntered++;
110 struct timeval now, diff;
111 gettimeofday(&now, 0);
112 klrcp_timeval_subtract(&diff, &now, &blk->lastExecuteTime);
113 if (klrcp_timediff_to_msecs(&diff) < blk->minimumIntervalMs) {
114 blk->countBlockAvoided++;
118 blk->lastExecuteTime = now;
119 blk->countBlockEntered++;
Definition: klrestricted_code_path.h:54