1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
29745512cSArjan van de Ven /*
39745512cSArjan van de Ven * latencytop.h: Infrastructure for displaying latency
49745512cSArjan van de Ven *
59745512cSArjan van de Ven * (C) Copyright 2008 Intel Corporation
69745512cSArjan van de Ven * Author: Arjan van de Ven <arjan@linux.intel.com>
79745512cSArjan van de Ven *
89745512cSArjan van de Ven */
99745512cSArjan van de Ven
109745512cSArjan van de Ven #ifndef _INCLUDE_GUARD_LATENCYTOP_H_
119745512cSArjan van de Ven #define _INCLUDE_GUARD_LATENCYTOP_H_
129745512cSArjan van de Ven
13ad0b0fd5SArjan van de Ven #include <linux/compiler.h>
14029632fbSPeter Zijlstra struct task_struct;
15029632fbSPeter Zijlstra
169745512cSArjan van de Ven #ifdef CONFIG_LATENCYTOP
179745512cSArjan van de Ven
189745512cSArjan van de Ven #define LT_SAVECOUNT 32
199745512cSArjan van de Ven #define LT_BACKTRACEDEPTH 12
209745512cSArjan van de Ven
219745512cSArjan van de Ven struct latency_record {
229745512cSArjan van de Ven unsigned long backtrace[LT_BACKTRACEDEPTH];
239745512cSArjan van de Ven unsigned int count;
249745512cSArjan van de Ven unsigned long time;
259745512cSArjan van de Ven unsigned long max;
269745512cSArjan van de Ven };
279745512cSArjan van de Ven
289745512cSArjan van de Ven
299745512cSArjan van de Ven
30ad0b0fd5SArjan van de Ven extern int latencytop_enabled;
31ad0b0fd5SArjan van de Ven void __account_scheduler_latency(struct task_struct *task, int usecs, int inter);
32ad0b0fd5SArjan van de Ven static inline void
account_scheduler_latency(struct task_struct * task,int usecs,int inter)33ad0b0fd5SArjan van de Ven account_scheduler_latency(struct task_struct *task, int usecs, int inter)
34ad0b0fd5SArjan van de Ven {
35ad0b0fd5SArjan van de Ven if (unlikely(latencytop_enabled))
36ad0b0fd5SArjan van de Ven __account_scheduler_latency(task, usecs, inter);
37ad0b0fd5SArjan van de Ven }
389745512cSArjan van de Ven
39e02c9b0dSLin Feng void clear_tsk_latency_tracing(struct task_struct *p);
409745512cSArjan van de Ven
419745512cSArjan van de Ven #else
429745512cSArjan van de Ven
439745512cSArjan van de Ven static inline void
account_scheduler_latency(struct task_struct * task,int usecs,int inter)449745512cSArjan van de Ven account_scheduler_latency(struct task_struct *task, int usecs, int inter)
459745512cSArjan van de Ven {
469745512cSArjan van de Ven }
479745512cSArjan van de Ven
clear_tsk_latency_tracing(struct task_struct * p)48e02c9b0dSLin Feng static inline void clear_tsk_latency_tracing(struct task_struct *p)
499745512cSArjan van de Ven {
509745512cSArjan van de Ven }
519745512cSArjan van de Ven
529745512cSArjan van de Ven #endif
539745512cSArjan van de Ven
549745512cSArjan van de Ven #endif
55