cyclic->cpu_time_us += cpu_time;
/* Check if cpu-time exceeds max allowed time */
- if (cpu_time > CONFIG_CYCLIC_MAX_CPU_TIME_US) {
- pr_err("cyclic function %s took too long: %lldus vs %dus max, disabling\n",
+ if ((cpu_time > CONFIG_CYCLIC_MAX_CPU_TIME_US) &&
+ (!cyclic->already_warned)) {
+ pr_err("cyclic function %s took too long: %lldus vs %dus max\n",
cyclic->name, cpu_time,
CONFIG_CYCLIC_MAX_CPU_TIME_US);
- /* Unregister this cyclic function */
- cyclic_unregister(cyclic);
+ /*
+ * Don't disable this function, just warn once
+ * about this exceeding CPU time usage
+ */
+ cyclic->already_warned = true;
}
}
}
* @run_cnt: Counter of executions occurances
* @next_call: Next time in us, when the function shall be executed again
* @list: List node
+ * @already_warned: Flag that we've warned about exceeding CPU time usage
*/
struct cyclic_info {
void (*func)(void *ctx);
uint64_t run_cnt;
uint64_t next_call;
struct list_head list;
+ bool already_warned;
};
/** Function type for cyclic functions */