#include #include #define MAX_TIMER_NUM (128) // max timer number #define TIMER_MAX_WATCH_NUM (32) // A timer max watch number at once time #define MAX_NAME_LEN (15) // max name length typedef struct { pid_t task_id; // current process id char name[MAX_NAME_LEN + 1]; // name void *ptr; // virtual address int length_byte; // byte long long threshold; // threshold value unsigned char unsigned_flag; // unsigned flag (true: unsigned, false: signed) unsigned char above_threshold; // reverse flag (true: >, false: <) unsigned long time_ns; // timer interval (ns) } watch_arg; typedef struct { pid_t task_id; // current process id char name[MAX_NAME_LEN + 2]; // name, last char automatically add '\0' void *ptr; // user space virtual address void *kptr; // kernel address + offset int length_byte; // byte long long threshold; // threshold value unsigned char unsigned_flag; // unsigned flag (true: unsigned, false: signed) unsigned char above_threshold; // reverse flag (true: >, false: <) } kernel_watch_arg; typedef struct { unsigned long long time_ns; // hrTimer time interval (ns) struct hrtimer hr_timer; // hrTimer ktime_t kt; // hrTimer time unsigned sentinel; // sentinel kernel_watch_arg k_watch_args[TIMER_MAX_WATCH_NUM]; // all watched kernel_watch_arg int threshold_num; // all over threshold number, // 0 means no handle needed int threshold_buffer[TIMER_MAX_WATCH_NUM]; // struct work_struct wk; // for handle } kernel_watch_timer; // Global variable extern kernel_watch_timer kernel_wtimer_list[MAX_TIMER_NUM]; // all kernel_watch_timer extern int kernel_wtimer_num; // current kernel_watch_timer number // EXPORT_SYMBOL(kernel_wtimer_list); // export kernel_watch_timer_list // EXPORT_SYMBOL(kernel_wtimer_num); // export kernel_watch_timer_num unsigned char del_all_kwarg_by_pid(pid_t pid); #define TIMER_START(timer) \ (hrtimer_start(&timer->hr_timer, timer->kt, HRTIMER_MODE_REL)) #define TIMER_CANCEL(timer) (hrtimer_cancel(&timer->hr_timer)) // for timer kernel_watch_timer *get_timer(unsigned long long time_ns); unsigned char timer_add_watch(kernel_watch_timer *timer, kernel_watch_arg k_watch_arg); unsigned char timer_del_watch_by_pid(kernel_watch_timer *timer, pid_t pid); extern enum hrtimer_restart check_variable_cb(struct hrtimer *timer); // callback void start_all_hrTimer(void); void cancel_all_hrTimer(void);