kgsl_trace.h 34 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2011-2021, The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved.
  5. */
  6. #if !defined(_KGSL_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
  7. #define _KGSL_TRACE_H
  8. #undef TRACE_SYSTEM
  9. #define TRACE_SYSTEM kgsl
  10. #undef TRACE_INCLUDE_PATH
  11. #define TRACE_INCLUDE_PATH .
  12. #undef TRACE_INCLUDE_FILE
  13. #define TRACE_INCLUDE_FILE kgsl_trace
  14. #include <linux/tracepoint.h>
  15. #include "kgsl.h"
  16. #include "kgsl_drawobj.h"
  17. #include "kgsl_sharedmem.h"
  18. #define show_memtype(type) \
  19. __print_symbolic(type, \
  20. { KGSL_MEM_ENTRY_KERNEL, "gpumem" }, \
  21. { KGSL_MEM_ENTRY_USER, "usermem" }, \
  22. { KGSL_MEM_ENTRY_ION, "ion" })
  23. #define show_constraint(type) \
  24. __print_symbolic(type, \
  25. { KGSL_CONSTRAINT_NONE, "None" }, \
  26. { KGSL_CONSTRAINT_PWRLEVEL, "Pwrlevel" }, \
  27. { KGSL_CONSTRAINT_L3_NONE, "L3_none" }, \
  28. { KGSL_CONSTRAINT_L3_PWRLEVEL, "L3_pwrlevel" })
  29. struct kgsl_ringbuffer_issueibcmds;
  30. struct kgsl_device_waittimestamp;
  31. /*
  32. * Tracepoint for kgsl issue ib commands
  33. */
  34. TRACE_EVENT(kgsl_issueibcmds,
  35. TP_PROTO(struct kgsl_device *device,
  36. int drawctxt_id,
  37. unsigned int numibs,
  38. int timestamp,
  39. int flags,
  40. int result,
  41. unsigned int type),
  42. TP_ARGS(device, drawctxt_id, numibs, timestamp,
  43. flags, result, type),
  44. TP_STRUCT__entry(
  45. __string(device_name, device->name)
  46. __field(unsigned int, drawctxt_id)
  47. __field(unsigned int, numibs)
  48. __field(unsigned int, timestamp)
  49. __field(unsigned int, flags)
  50. __field(int, result)
  51. __field(unsigned int, drawctxt_type)
  52. ),
  53. TP_fast_assign(
  54. __assign_str(device_name, device->name);
  55. __entry->drawctxt_id = drawctxt_id;
  56. __entry->numibs = numibs;
  57. __entry->timestamp = timestamp;
  58. __entry->flags = flags;
  59. __entry->result = result;
  60. __entry->drawctxt_type = type;
  61. ),
  62. TP_printk(
  63. "d_name=%s ctx=%u ib=0x0 numibs=%u ts=%u flags=%s result=%d type=%s",
  64. __get_str(device_name),
  65. __entry->drawctxt_id,
  66. __entry->numibs,
  67. __entry->timestamp,
  68. __entry->flags ? __print_flags(__entry->flags, "|",
  69. KGSL_DRAWOBJ_FLAGS) : "None",
  70. __entry->result,
  71. kgsl_context_type(__entry->drawctxt_type)
  72. )
  73. );
  74. /*
  75. * Tracepoint for kgsl readtimestamp
  76. */
  77. TRACE_EVENT(kgsl_readtimestamp,
  78. TP_PROTO(struct kgsl_device *device,
  79. unsigned int context_id,
  80. unsigned int type,
  81. unsigned int timestamp),
  82. TP_ARGS(device, context_id, type, timestamp),
  83. TP_STRUCT__entry(
  84. __string(device_name, device->name)
  85. __field(unsigned int, context_id)
  86. __field(unsigned int, type)
  87. __field(unsigned int, timestamp)
  88. ),
  89. TP_fast_assign(
  90. __assign_str(device_name, device->name);
  91. __entry->context_id = context_id;
  92. __entry->type = type;
  93. __entry->timestamp = timestamp;
  94. ),
  95. TP_printk(
  96. "d_name=%s context_id=%u type=%u ts=%u",
  97. __get_str(device_name),
  98. __entry->context_id,
  99. __entry->type,
  100. __entry->timestamp
  101. )
  102. );
  103. /*
  104. * Tracepoint for kgsl waittimestamp entry
  105. */
  106. TRACE_EVENT(kgsl_waittimestamp_entry,
  107. TP_PROTO(struct kgsl_device *device,
  108. unsigned int context_id,
  109. unsigned int curr_ts,
  110. unsigned int wait_ts,
  111. unsigned int timeout),
  112. TP_ARGS(device, context_id, curr_ts, wait_ts, timeout),
  113. TP_STRUCT__entry(
  114. __string(device_name, device->name)
  115. __field(unsigned int, context_id)
  116. __field(unsigned int, curr_ts)
  117. __field(unsigned int, wait_ts)
  118. __field(unsigned int, timeout)
  119. ),
  120. TP_fast_assign(
  121. __assign_str(device_name, device->name);
  122. __entry->context_id = context_id;
  123. __entry->curr_ts = curr_ts;
  124. __entry->wait_ts = wait_ts;
  125. __entry->timeout = timeout;
  126. ),
  127. TP_printk(
  128. "d_name=%s ctx=%u curr_ts=%u ts=%u timeout=%u",
  129. __get_str(device_name),
  130. __entry->context_id,
  131. __entry->curr_ts,
  132. __entry->wait_ts,
  133. __entry->timeout
  134. )
  135. );
  136. /*
  137. * Tracepoint for kgsl waittimestamp exit
  138. */
  139. TRACE_EVENT(kgsl_waittimestamp_exit,
  140. TP_PROTO(struct kgsl_device *device, unsigned int curr_ts,
  141. int result),
  142. TP_ARGS(device, curr_ts, result),
  143. TP_STRUCT__entry(
  144. __string(device_name, device->name)
  145. __field(unsigned int, curr_ts)
  146. __field(int, result)
  147. ),
  148. TP_fast_assign(
  149. __assign_str(device_name, device->name);
  150. __entry->curr_ts = curr_ts;
  151. __entry->result = result;
  152. ),
  153. TP_printk(
  154. "d_name=%s curr_ts=%u result=%d",
  155. __get_str(device_name),
  156. __entry->curr_ts,
  157. __entry->result
  158. )
  159. );
  160. DECLARE_EVENT_CLASS(kgsl_pwr_template,
  161. TP_PROTO(struct kgsl_device *device, bool on),
  162. TP_ARGS(device, on),
  163. TP_STRUCT__entry(
  164. __string(device_name, device->name)
  165. __field(bool, on)
  166. ),
  167. TP_fast_assign(
  168. __assign_str(device_name, device->name);
  169. __entry->on = on;
  170. ),
  171. TP_printk(
  172. "d_name=%s flag=%s",
  173. __get_str(device_name),
  174. __entry->on ? "on" : "off"
  175. )
  176. );
  177. DEFINE_EVENT(kgsl_pwr_template, kgsl_irq,
  178. TP_PROTO(struct kgsl_device *device, bool on),
  179. TP_ARGS(device, on)
  180. );
  181. DEFINE_EVENT(kgsl_pwr_template, kgsl_bus,
  182. TP_PROTO(struct kgsl_device *device, bool on),
  183. TP_ARGS(device, on)
  184. );
  185. DEFINE_EVENT(kgsl_pwr_template, kgsl_rail,
  186. TP_PROTO(struct kgsl_device *device, bool on),
  187. TP_ARGS(device, on)
  188. );
  189. TRACE_EVENT(kgsl_clk,
  190. TP_PROTO(struct kgsl_device *device, bool on,
  191. unsigned int freq),
  192. TP_ARGS(device, on, freq),
  193. TP_STRUCT__entry(
  194. __string(device_name, device->name)
  195. __field(bool, on)
  196. __field(unsigned int, freq)
  197. ),
  198. TP_fast_assign(
  199. __assign_str(device_name, device->name);
  200. __entry->on = on;
  201. __entry->freq = freq;
  202. ),
  203. TP_printk(
  204. "d_name=%s flag=%s active_freq=%d",
  205. __get_str(device_name),
  206. __entry->on ? "on" : "off",
  207. __entry->freq
  208. )
  209. );
  210. TRACE_EVENT(kgsl_gmu_pwrlevel,
  211. TP_PROTO(unsigned long freq,
  212. unsigned long prev_freq),
  213. TP_ARGS(freq, prev_freq),
  214. TP_STRUCT__entry(
  215. __field(unsigned long, freq)
  216. __field(unsigned long, prev_freq)
  217. ),
  218. TP_fast_assign(
  219. __entry->freq = freq;
  220. __entry->prev_freq = prev_freq;
  221. ),
  222. TP_printk(
  223. "gmu_freq=%ld gmu_prev_freq=%ld",
  224. __entry->freq,
  225. __entry->prev_freq
  226. )
  227. );
  228. TRACE_EVENT(kgsl_pwrlevel,
  229. TP_PROTO(struct kgsl_device *device,
  230. unsigned int pwrlevel,
  231. unsigned int freq,
  232. unsigned int prev_pwrlevel,
  233. unsigned int prev_freq),
  234. TP_ARGS(device, pwrlevel, freq, prev_pwrlevel, prev_freq),
  235. TP_STRUCT__entry(
  236. __string(device_name, device->name)
  237. __field(unsigned int, pwrlevel)
  238. __field(unsigned int, freq)
  239. __field(unsigned int, prev_pwrlevel)
  240. __field(unsigned int, prev_freq)
  241. ),
  242. TP_fast_assign(
  243. __assign_str(device_name, device->name);
  244. __entry->pwrlevel = pwrlevel;
  245. __entry->freq = freq;
  246. __entry->prev_pwrlevel = prev_pwrlevel;
  247. __entry->prev_freq = prev_freq;
  248. ),
  249. TP_printk(
  250. "d_name=%s pwrlevel=%d freq=%d prev_pwrlevel=%d prev_freq=%d",
  251. __get_str(device_name),
  252. __entry->pwrlevel,
  253. __entry->freq,
  254. __entry->prev_pwrlevel,
  255. __entry->prev_freq
  256. )
  257. );
  258. /*
  259. * Tracepoint for kgsl gpu_frequency
  260. */
  261. TRACE_EVENT(gpu_frequency,
  262. TP_PROTO(unsigned int gpu_freq, unsigned int gpu_id),
  263. TP_ARGS(gpu_freq, gpu_id),
  264. TP_STRUCT__entry(
  265. __field(unsigned int, gpu_freq)
  266. __field(unsigned int, gpu_id)
  267. ),
  268. TP_fast_assign(
  269. __entry->gpu_freq = gpu_freq;
  270. __entry->gpu_id = gpu_id;
  271. ),
  272. TP_printk("gpu_freq=%luKhz gpu_id=%lu",
  273. (unsigned long)__entry->gpu_freq,
  274. (unsigned long)__entry->gpu_id)
  275. );
  276. TRACE_EVENT(kgsl_buslevel,
  277. TP_PROTO(struct kgsl_device *device, u32 pwrlevel,
  278. u32 bus, u32 avg_bw),
  279. TP_ARGS(device, pwrlevel, bus, avg_bw),
  280. TP_STRUCT__entry(
  281. __string(device_name, device->name)
  282. __field(u32, pwrlevel)
  283. __field(u32, bus)
  284. __field(u32, avg_bw)
  285. ),
  286. TP_fast_assign(
  287. __assign_str(device_name, device->name);
  288. __entry->pwrlevel = pwrlevel;
  289. __entry->bus = bus;
  290. __entry->avg_bw = avg_bw;
  291. ),
  292. TP_printk(
  293. "d_name=%s pwrlevel=%u bus=%u avg_bw=%u",
  294. __get_str(device_name),
  295. __entry->pwrlevel,
  296. __entry->bus,
  297. __entry->avg_bw
  298. )
  299. );
  300. TRACE_EVENT(kgsl_gpubusy,
  301. TP_PROTO(struct kgsl_device *device, unsigned int busy,
  302. unsigned int elapsed),
  303. TP_ARGS(device, busy, elapsed),
  304. TP_STRUCT__entry(
  305. __string(device_name, device->name)
  306. __field(unsigned int, busy)
  307. __field(unsigned int, elapsed)
  308. ),
  309. TP_fast_assign(
  310. __assign_str(device_name, device->name);
  311. __entry->busy = busy;
  312. __entry->elapsed = elapsed;
  313. ),
  314. TP_printk(
  315. "d_name=%s busy=%u elapsed=%d",
  316. __get_str(device_name),
  317. __entry->busy,
  318. __entry->elapsed
  319. )
  320. );
  321. TRACE_EVENT(kgsl_pwrstats,
  322. TP_PROTO(struct kgsl_device *device, s64 time,
  323. struct kgsl_power_stats *pstats, u32 ctxt_count),
  324. TP_ARGS(device, time, pstats, ctxt_count),
  325. TP_STRUCT__entry(
  326. __string(device_name, device->name)
  327. __field(s64, total_time)
  328. __field(u64, busy_time)
  329. __field(u64, ram_time)
  330. __field(u64, ram_wait)
  331. __field(u32, context_count)
  332. ),
  333. TP_fast_assign(
  334. __assign_str(device_name, device->name);
  335. __entry->total_time = time;
  336. __entry->busy_time = pstats->busy_time;
  337. __entry->ram_time = pstats->ram_time;
  338. __entry->ram_wait = pstats->ram_wait;
  339. __entry->context_count = ctxt_count;
  340. ),
  341. TP_printk(
  342. "d_name=%s total=%lld busy=%lld ram_time=%lld ram_wait=%lld context_count=%u",
  343. __get_str(device_name), __entry->total_time, __entry->busy_time,
  344. __entry->ram_time, __entry->ram_wait, __entry->context_count
  345. )
  346. );
  347. DECLARE_EVENT_CLASS(kgsl_pwrstate_template,
  348. TP_PROTO(struct kgsl_device *device, unsigned int state),
  349. TP_ARGS(device, state),
  350. TP_STRUCT__entry(
  351. __string(device_name, device->name)
  352. __field(unsigned int, state)
  353. ),
  354. TP_fast_assign(
  355. __assign_str(device_name, device->name);
  356. __entry->state = state;
  357. ),
  358. TP_printk(
  359. "d_name=%s state=%s",
  360. __get_str(device_name),
  361. kgsl_pwrstate_to_str(__entry->state)
  362. )
  363. );
  364. DEFINE_EVENT(kgsl_pwrstate_template, kgsl_pwr_set_state,
  365. TP_PROTO(struct kgsl_device *device, unsigned int state),
  366. TP_ARGS(device, state)
  367. );
  368. DEFINE_EVENT(kgsl_pwrstate_template, kgsl_pwr_request_state,
  369. TP_PROTO(struct kgsl_device *device, unsigned int state),
  370. TP_ARGS(device, state)
  371. );
  372. TRACE_EVENT(kgsl_mem_alloc,
  373. TP_PROTO(struct kgsl_mem_entry *mem_entry),
  374. TP_ARGS(mem_entry),
  375. TP_STRUCT__entry(
  376. __field(uint64_t, gpuaddr)
  377. __field(uint64_t, size)
  378. __field(unsigned int, tgid)
  379. __array(char, usage, 16)
  380. __field(unsigned int, id)
  381. __field(uint64_t, flags)
  382. ),
  383. TP_fast_assign(
  384. __entry->gpuaddr = mem_entry->memdesc.gpuaddr;
  385. __entry->size = mem_entry->memdesc.size;
  386. __entry->tgid = pid_nr(mem_entry->priv->pid);
  387. kgsl_get_memory_usage(__entry->usage, sizeof(__entry->usage),
  388. mem_entry->memdesc.flags);
  389. __entry->id = mem_entry->id;
  390. __entry->flags = mem_entry->memdesc.flags;
  391. ),
  392. TP_printk(
  393. "gpuaddr=0x%llx size=%llu tgid=%u usage=%s id=%u flags=0x%llx",
  394. __entry->gpuaddr, __entry->size, __entry->tgid,
  395. __entry->usage, __entry->id, __entry->flags
  396. )
  397. );
  398. TRACE_EVENT(kgsl_mem_mmap,
  399. TP_PROTO(struct kgsl_mem_entry *mem_entry, unsigned long useraddr),
  400. TP_ARGS(mem_entry, useraddr),
  401. TP_STRUCT__entry(
  402. __field(unsigned long, useraddr)
  403. __field(uint64_t, gpuaddr)
  404. __field(uint64_t, size)
  405. __array(char, usage, 16)
  406. __field(unsigned int, id)
  407. __field(uint64_t, flags)
  408. ),
  409. TP_fast_assign(
  410. __entry->useraddr = useraddr;
  411. __entry->gpuaddr = mem_entry->memdesc.gpuaddr;
  412. __entry->size = mem_entry->memdesc.size;
  413. kgsl_get_memory_usage(__entry->usage, sizeof(__entry->usage),
  414. mem_entry->memdesc.flags);
  415. __entry->id = mem_entry->id;
  416. __entry->flags = mem_entry->memdesc.flags;
  417. ),
  418. TP_printk(
  419. "useraddr=0x%lx gpuaddr=0x%llx size=%llu usage=%s id=%u flags=0x%llx",
  420. __entry->useraddr, __entry->gpuaddr, __entry->size,
  421. __entry->usage, __entry->id, __entry->flags
  422. )
  423. );
  424. TRACE_EVENT(kgsl_mem_unmapped_area_collision,
  425. TP_PROTO(struct kgsl_mem_entry *mem_entry,
  426. unsigned long addr,
  427. unsigned long len),
  428. TP_ARGS(mem_entry, addr, len),
  429. TP_STRUCT__entry(
  430. __field(unsigned int, id)
  431. __field(unsigned long, addr)
  432. __field(unsigned long, len)
  433. ),
  434. TP_fast_assign(
  435. __entry->id = mem_entry->id;
  436. __entry->len = len;
  437. __entry->addr = addr;
  438. ),
  439. TP_printk(
  440. "id=%u len=%lu addr=0x%lx",
  441. __entry->id, __entry->len, __entry->addr
  442. )
  443. );
  444. TRACE_EVENT(kgsl_mem_map,
  445. TP_PROTO(struct kgsl_mem_entry *mem_entry, int fd),
  446. TP_ARGS(mem_entry, fd),
  447. TP_STRUCT__entry(
  448. __field(uint64_t, gpuaddr)
  449. __field(uint64_t, size)
  450. __field(int, fd)
  451. __field(int, type)
  452. __field(unsigned int, tgid)
  453. __array(char, usage, 16)
  454. __field(unsigned int, id)
  455. ),
  456. TP_fast_assign(
  457. __entry->gpuaddr = mem_entry->memdesc.gpuaddr;
  458. __entry->size = mem_entry->memdesc.size;
  459. __entry->fd = fd;
  460. __entry->type = kgsl_memdesc_usermem_type(&mem_entry->memdesc);
  461. __entry->tgid = pid_nr(mem_entry->priv->pid);
  462. kgsl_get_memory_usage(__entry->usage, sizeof(__entry->usage),
  463. mem_entry->memdesc.flags);
  464. __entry->id = mem_entry->id;
  465. ),
  466. TP_printk(
  467. "gpuaddr=0x%llx size=%llu type=%s fd=%d tgid=%u usage=%s id=%u",
  468. __entry->gpuaddr, __entry->size,
  469. show_memtype(__entry->type),
  470. __entry->fd, __entry->tgid,
  471. __entry->usage, __entry->id
  472. )
  473. );
  474. TRACE_EVENT(kgsl_mem_free,
  475. TP_PROTO(struct kgsl_mem_entry *mem_entry),
  476. TP_ARGS(mem_entry),
  477. TP_STRUCT__entry(
  478. __field(uint64_t, gpuaddr)
  479. __field(uint64_t, size)
  480. __field(int, type)
  481. __field(int, fd)
  482. __field(unsigned int, tgid)
  483. __array(char, usage, 16)
  484. __field(unsigned int, id)
  485. ),
  486. TP_fast_assign(
  487. __entry->gpuaddr = mem_entry->memdesc.gpuaddr;
  488. __entry->size = mem_entry->memdesc.size;
  489. __entry->type = kgsl_memdesc_usermem_type(&mem_entry->memdesc);
  490. __entry->tgid = pid_nr(mem_entry->priv->pid);
  491. kgsl_get_memory_usage(__entry->usage, sizeof(__entry->usage),
  492. mem_entry->memdesc.flags);
  493. __entry->id = mem_entry->id;
  494. ),
  495. TP_printk(
  496. "gpuaddr=0x%llx size=%llu type=%s tgid=%u usage=%s id=%u",
  497. __entry->gpuaddr, __entry->size,
  498. show_memtype(__entry->type),
  499. __entry->tgid, __entry->usage, __entry->id
  500. )
  501. );
  502. TRACE_EVENT(kgsl_mem_sync_cache,
  503. TP_PROTO(struct kgsl_mem_entry *mem_entry, uint64_t offset,
  504. uint64_t length, unsigned int op),
  505. TP_ARGS(mem_entry, offset, length, op),
  506. TP_STRUCT__entry(
  507. __field(uint64_t, gpuaddr)
  508. __array(char, usage, 16)
  509. __field(unsigned int, tgid)
  510. __field(unsigned int, id)
  511. __field(unsigned int, op)
  512. __field(uint64_t, offset)
  513. __field(uint64_t, length)
  514. ),
  515. TP_fast_assign(
  516. __entry->gpuaddr = mem_entry->memdesc.gpuaddr;
  517. kgsl_get_memory_usage(__entry->usage, sizeof(__entry->usage),
  518. mem_entry->memdesc.flags);
  519. __entry->tgid = pid_nr(mem_entry->priv->pid);
  520. __entry->id = mem_entry->id;
  521. __entry->op = op;
  522. __entry->offset = offset;
  523. __entry->length = (length == 0) ?
  524. mem_entry->memdesc.size : length;
  525. ),
  526. TP_printk(
  527. "gpuaddr=0x%llx size=%llu tgid=%u usage=%s id=%u op=%c%c offset=%llu",
  528. __entry->gpuaddr, __entry->length,
  529. __entry->tgid, __entry->usage, __entry->id,
  530. (__entry->op & KGSL_GPUMEM_CACHE_CLEAN) ? 'c' : '.',
  531. (__entry->op & KGSL_GPUMEM_CACHE_INV) ? 'i' : '.',
  532. __entry->offset
  533. )
  534. );
  535. TRACE_EVENT(kgsl_mem_add_bind_range,
  536. TP_PROTO(struct kgsl_mem_entry *target, u64 offset,
  537. struct kgsl_mem_entry *child, u64 length),
  538. TP_ARGS(target, offset, child, length),
  539. TP_STRUCT__entry(
  540. __field(u64, gpuaddr)
  541. __field(u32, target)
  542. __field(u32, tgid)
  543. __field(u32, child)
  544. __field(u64, length)
  545. ),
  546. TP_fast_assign(
  547. __entry->gpuaddr = target->memdesc.gpuaddr + offset;
  548. __entry->tgid = pid_nr(target->priv->pid);
  549. __entry->target = target->id;
  550. __entry->child = child->id;
  551. __entry->length = length;
  552. ),
  553. TP_printk(
  554. "tgid=%u target=%d gpuaddr=%llx length %llu child=%d",
  555. __entry->tgid, __entry->target, __entry->gpuaddr,
  556. __entry->length, __entry->child
  557. )
  558. );
  559. TRACE_EVENT(kgsl_mem_remove_bind_range,
  560. TP_PROTO(struct kgsl_mem_entry *target, u64 offset,
  561. struct kgsl_mem_entry *child, u64 length),
  562. TP_ARGS(target, offset, child, length),
  563. TP_STRUCT__entry(
  564. __field(u64, gpuaddr)
  565. __field(u32, target)
  566. __field(u32, tgid)
  567. __field(u32, child)
  568. __field(u64, length)
  569. ),
  570. TP_fast_assign(
  571. __entry->gpuaddr = target->memdesc.gpuaddr + offset;
  572. __entry->tgid = pid_nr(target->priv->pid);
  573. __entry->target = target->id;
  574. __entry->child = child->id;
  575. __entry->length = length;
  576. ),
  577. TP_printk(
  578. "tgid=%u target=%d gpuaddr=%llx length %llu child=%d",
  579. __entry->tgid, __entry->target, __entry->gpuaddr,
  580. __entry->length, __entry->child
  581. )
  582. );
  583. TRACE_EVENT(kgsl_mem_sync_full_cache,
  584. TP_PROTO(unsigned int num_bufs, uint64_t bulk_size),
  585. TP_ARGS(num_bufs, bulk_size),
  586. TP_STRUCT__entry(
  587. __field(unsigned int, num_bufs)
  588. __field(uint64_t, bulk_size)
  589. ),
  590. TP_fast_assign(
  591. __entry->num_bufs = num_bufs;
  592. __entry->bulk_size = bulk_size;
  593. ),
  594. TP_printk(
  595. "num_bufs=%u bulk_size=%llu op=ci",
  596. __entry->num_bufs, __entry->bulk_size
  597. )
  598. );
  599. DECLARE_EVENT_CLASS(kgsl_mem_timestamp_template,
  600. TP_PROTO(struct kgsl_device *device, struct kgsl_mem_entry *mem_entry,
  601. unsigned int id, unsigned int curr_ts, unsigned int free_ts),
  602. TP_ARGS(device, mem_entry, id, curr_ts, free_ts),
  603. TP_STRUCT__entry(
  604. __string(device_name, device->name)
  605. __field(uint64_t, gpuaddr)
  606. __field(uint64_t, size)
  607. __field(int, type)
  608. __array(char, usage, 16)
  609. __field(unsigned int, id)
  610. __field(unsigned int, drawctxt_id)
  611. __field(unsigned int, curr_ts)
  612. __field(unsigned int, free_ts)
  613. ),
  614. TP_fast_assign(
  615. __assign_str(device_name, device->name);
  616. __entry->gpuaddr = mem_entry->memdesc.gpuaddr;
  617. __entry->size = mem_entry->memdesc.size;
  618. kgsl_get_memory_usage(__entry->usage, sizeof(__entry->usage),
  619. mem_entry->memdesc.flags);
  620. __entry->id = mem_entry->id;
  621. __entry->drawctxt_id = id;
  622. __entry->type = kgsl_memdesc_usermem_type(&mem_entry->memdesc);
  623. __entry->curr_ts = curr_ts;
  624. __entry->free_ts = free_ts;
  625. ),
  626. TP_printk(
  627. "d_name=%s gpuaddr=0x%llx size=%llu type=%s usage=%s id=%u ctx=%u curr_ts=%u free_ts=%u",
  628. __get_str(device_name),
  629. __entry->gpuaddr,
  630. __entry->size,
  631. show_memtype(__entry->type),
  632. __entry->usage,
  633. __entry->id,
  634. __entry->drawctxt_id,
  635. __entry->curr_ts,
  636. __entry->free_ts
  637. )
  638. );
  639. DEFINE_EVENT(kgsl_mem_timestamp_template, kgsl_mem_timestamp_queue,
  640. TP_PROTO(struct kgsl_device *device, struct kgsl_mem_entry *mem_entry,
  641. unsigned int id, unsigned int curr_ts, unsigned int free_ts),
  642. TP_ARGS(device, mem_entry, id, curr_ts, free_ts)
  643. );
  644. DEFINE_EVENT(kgsl_mem_timestamp_template, kgsl_mem_timestamp_free,
  645. TP_PROTO(struct kgsl_device *device, struct kgsl_mem_entry *mem_entry,
  646. unsigned int id, unsigned int curr_ts, unsigned int free_ts),
  647. TP_ARGS(device, mem_entry, id, curr_ts, free_ts)
  648. );
  649. TRACE_EVENT(kgsl_context_create,
  650. TP_PROTO(struct kgsl_device *device, struct kgsl_context *context,
  651. unsigned int flags),
  652. TP_ARGS(device, context, flags),
  653. TP_STRUCT__entry(
  654. __string(device_name, device->name)
  655. __field(unsigned int, id)
  656. __field(unsigned int, flags)
  657. __field(unsigned int, priority)
  658. __field(unsigned int, type)
  659. ),
  660. TP_fast_assign(
  661. __assign_str(device_name, device->name);
  662. __entry->id = context->id;
  663. __entry->flags = flags & ~(KGSL_CONTEXT_PRIORITY_MASK |
  664. KGSL_CONTEXT_TYPE_MASK);
  665. __entry->priority =
  666. (flags & KGSL_CONTEXT_PRIORITY_MASK)
  667. >> KGSL_CONTEXT_PRIORITY_SHIFT;
  668. __entry->type =
  669. (flags & KGSL_CONTEXT_TYPE_MASK)
  670. >> KGSL_CONTEXT_TYPE_SHIFT;
  671. ),
  672. TP_printk(
  673. "d_name=%s ctx=%u flags=%s priority=%u type=%s",
  674. __get_str(device_name), __entry->id,
  675. __entry->flags ? __print_flags(__entry->flags, "|",
  676. KGSL_CONTEXT_FLAGS) : "None",
  677. __entry->priority,
  678. kgsl_context_type(__entry->type)
  679. )
  680. );
  681. TRACE_EVENT(kgsl_context_detach,
  682. TP_PROTO(struct kgsl_device *device, struct kgsl_context *context),
  683. TP_ARGS(device, context),
  684. TP_STRUCT__entry(
  685. __string(device_name, device->name)
  686. __field(unsigned int, id)
  687. ),
  688. TP_fast_assign(
  689. __assign_str(device_name, device->name);
  690. __entry->id = context->id;
  691. ),
  692. TP_printk(
  693. "d_name=%s ctx=%u",
  694. __get_str(device_name), __entry->id
  695. )
  696. );
  697. TRACE_EVENT(kgsl_context_destroy,
  698. TP_PROTO(struct kgsl_device *device, struct kgsl_context *context),
  699. TP_ARGS(device, context),
  700. TP_STRUCT__entry(
  701. __string(device_name, device->name)
  702. __field(unsigned int, id)
  703. ),
  704. TP_fast_assign(
  705. __assign_str(device_name, device->name);
  706. __entry->id = context->id;
  707. ),
  708. TP_printk(
  709. "d_name=%s ctx=%u",
  710. __get_str(device_name), __entry->id
  711. )
  712. );
  713. TRACE_EVENT(kgsl_user_pwrlevel_constraint,
  714. TP_PROTO(struct kgsl_device *device, unsigned int id, unsigned int type,
  715. unsigned int sub_type),
  716. TP_ARGS(device, id, type, sub_type),
  717. TP_STRUCT__entry(
  718. __string(device_name, device->name)
  719. __field(unsigned int, id)
  720. __field(unsigned int, type)
  721. __field(unsigned int, sub_type)
  722. ),
  723. TP_fast_assign(
  724. __assign_str(device_name, device->name);
  725. __entry->id = id;
  726. __entry->type = type;
  727. __entry->sub_type = sub_type;
  728. ),
  729. TP_printk(
  730. "d_name=%s ctx=%u constraint_type=%s constraint_subtype=%s",
  731. __get_str(device_name), __entry->id,
  732. show_constraint(__entry->type),
  733. __print_symbolic(__entry->sub_type,
  734. { KGSL_CONSTRAINT_PWR_MIN, "Min" },
  735. { KGSL_CONSTRAINT_PWR_MAX, "Max" })
  736. )
  737. );
  738. TRACE_EVENT(kgsl_constraint,
  739. TP_PROTO(struct kgsl_device *device, unsigned int type,
  740. unsigned int value, unsigned int on),
  741. TP_ARGS(device, type, value, on),
  742. TP_STRUCT__entry(
  743. __string(device_name, device->name)
  744. __field(unsigned int, type)
  745. __field(unsigned int, value)
  746. __field(unsigned int, on)
  747. ),
  748. TP_fast_assign(
  749. __assign_str(device_name, device->name);
  750. __entry->type = type;
  751. __entry->value = value;
  752. __entry->on = on;
  753. ),
  754. TP_printk(
  755. "d_name=%s constraint_type=%s constraint_value=%u status=%s",
  756. __get_str(device_name),
  757. show_constraint(__entry->type),
  758. __entry->value,
  759. __entry->on ? "ON" : "OFF"
  760. )
  761. );
  762. TRACE_EVENT(kgsl_mmu_pagefault,
  763. TP_PROTO(struct kgsl_device *device, unsigned long page,
  764. unsigned int pt, const char *name, const char *op),
  765. TP_ARGS(device, page, pt, name, op),
  766. TP_STRUCT__entry(
  767. __string(device_name, device->name)
  768. __field(unsigned long, page)
  769. __field(unsigned int, pt)
  770. __string(name, name)
  771. __string(op, op)
  772. ),
  773. TP_fast_assign(
  774. __assign_str(device_name, device->name);
  775. __entry->page = page;
  776. __entry->pt = pt;
  777. __assign_str(name, name);
  778. __assign_str(op, op);
  779. ),
  780. TP_printk(
  781. "d_name=%s page=0x%lx pt=%u op=%s name=%s",
  782. __get_str(device_name), __entry->page, __entry->pt,
  783. __get_str(op), __get_str(name)
  784. )
  785. );
  786. TRACE_EVENT(kgsl_regwrite,
  787. TP_PROTO(unsigned int offset, unsigned int value),
  788. TP_ARGS(offset, value),
  789. TP_STRUCT__entry(
  790. __string(device_name, "kgsl-3d0")
  791. __field(unsigned int, offset)
  792. __field(unsigned int, value)
  793. ),
  794. TP_fast_assign(
  795. __assign_str(device_name, "kgsl-3d0");
  796. __entry->offset = offset;
  797. __entry->value = value;
  798. ),
  799. TP_printk(
  800. "d_name=%s reg=0x%x value=0x%x",
  801. __get_str(device_name), __entry->offset, __entry->value
  802. )
  803. );
  804. TRACE_EVENT(kgsl_register_event,
  805. TP_PROTO(unsigned int id, unsigned int timestamp, void *func),
  806. TP_ARGS(id, timestamp, func),
  807. TP_STRUCT__entry(
  808. __field(unsigned int, id)
  809. __field(unsigned int, timestamp)
  810. __field(void *, func)
  811. ),
  812. TP_fast_assign(
  813. __entry->id = id;
  814. __entry->timestamp = timestamp;
  815. __entry->func = func;
  816. ),
  817. TP_printk(
  818. "ctx=%u ts=%u cb=%pS",
  819. __entry->id, __entry->timestamp, __entry->func)
  820. );
  821. TRACE_EVENT(kgsl_fire_event,
  822. TP_PROTO(unsigned int id, unsigned int ts,
  823. unsigned int type, unsigned int age, void *func),
  824. TP_ARGS(id, ts, type, age, func),
  825. TP_STRUCT__entry(
  826. __field(unsigned int, id)
  827. __field(unsigned int, ts)
  828. __field(unsigned int, type)
  829. __field(unsigned int, age)
  830. __field(void *, func)
  831. ),
  832. TP_fast_assign(
  833. __entry->id = id;
  834. __entry->ts = ts;
  835. __entry->type = type;
  836. __entry->age = age;
  837. __entry->func = func;
  838. ),
  839. TP_printk(
  840. "ctx=%u ts=%u type=%s age=%u cb=%pS",
  841. __entry->id, __entry->ts,
  842. __print_symbolic(__entry->type,
  843. { KGSL_EVENT_RETIRED, "retired" },
  844. { KGSL_EVENT_CANCELLED, "cancelled" }),
  845. __entry->age, __entry->func)
  846. );
  847. TRACE_EVENT(kgsl_active_count,
  848. TP_PROTO(struct kgsl_device *device, unsigned long ip),
  849. TP_ARGS(device, ip),
  850. TP_STRUCT__entry(
  851. __string(device_name, device->name)
  852. __field(unsigned int, count)
  853. __field(unsigned long, ip)
  854. ),
  855. TP_fast_assign(
  856. __assign_str(device_name, device->name);
  857. __entry->count = atomic_read(&device->active_cnt);
  858. __entry->ip = ip;
  859. ),
  860. TP_printk(
  861. "d_name=%s active_cnt=%u func=%ps",
  862. __get_str(device_name), __entry->count, (void *) __entry->ip
  863. )
  864. );
  865. TRACE_EVENT(kgsl_pagetable_destroy,
  866. TP_PROTO(u64 ptbase, unsigned int name),
  867. TP_ARGS(ptbase, name),
  868. TP_STRUCT__entry(
  869. __field(u64, ptbase)
  870. __field(unsigned int, name)
  871. ),
  872. TP_fast_assign(
  873. __entry->ptbase = ptbase;
  874. __entry->name = name;
  875. ),
  876. TP_printk("ptbase=%llx name=%u", __entry->ptbase, __entry->name)
  877. );
  878. DECLARE_EVENT_CLASS(syncpoint_timestamp_template,
  879. TP_PROTO(struct kgsl_drawobj_sync *syncobj,
  880. struct kgsl_context *context,
  881. unsigned int timestamp),
  882. TP_ARGS(syncobj, context, timestamp),
  883. TP_STRUCT__entry(
  884. __field(unsigned int, syncobj_context_id)
  885. __field(unsigned int, context_id)
  886. __field(unsigned int, timestamp)
  887. ),
  888. TP_fast_assign(
  889. __entry->syncobj_context_id = syncobj->base.context->id;
  890. __entry->context_id = context->id;
  891. __entry->timestamp = timestamp;
  892. ),
  893. TP_printk("ctx=%u sync ctx=%u ts=%u",
  894. __entry->syncobj_context_id, __entry->context_id,
  895. __entry->timestamp)
  896. );
  897. DEFINE_EVENT(syncpoint_timestamp_template, syncpoint_timestamp,
  898. TP_PROTO(struct kgsl_drawobj_sync *syncobj,
  899. struct kgsl_context *context,
  900. unsigned int timestamp),
  901. TP_ARGS(syncobj, context, timestamp)
  902. );
  903. DEFINE_EVENT(syncpoint_timestamp_template, syncpoint_timestamp_expire,
  904. TP_PROTO(struct kgsl_drawobj_sync *syncobj,
  905. struct kgsl_context *context,
  906. unsigned int timestamp),
  907. TP_ARGS(syncobj, context, timestamp)
  908. );
  909. DECLARE_EVENT_CLASS(syncpoint_fence_template,
  910. TP_PROTO(struct kgsl_drawobj_sync *syncobj, char *name),
  911. TP_ARGS(syncobj, name),
  912. TP_STRUCT__entry(
  913. __string(fence_name, name)
  914. __field(unsigned int, syncobj_context_id)
  915. ),
  916. TP_fast_assign(
  917. __entry->syncobj_context_id = syncobj->base.context->id;
  918. __assign_str(fence_name, name);
  919. ),
  920. TP_printk("ctx=%u fence=%s",
  921. __entry->syncobj_context_id, __get_str(fence_name))
  922. );
  923. DEFINE_EVENT(syncpoint_fence_template, syncpoint_fence,
  924. TP_PROTO(struct kgsl_drawobj_sync *syncobj, char *name),
  925. TP_ARGS(syncobj, name)
  926. );
  927. DEFINE_EVENT(syncpoint_fence_template, syncpoint_fence_expire,
  928. TP_PROTO(struct kgsl_drawobj_sync *syncobj, char *name),
  929. TP_ARGS(syncobj, name)
  930. );
  931. TRACE_EVENT(kgsl_msg,
  932. TP_PROTO(const char *msg),
  933. TP_ARGS(msg),
  934. TP_STRUCT__entry(
  935. __string(msg, msg)
  936. ),
  937. TP_fast_assign(
  938. __assign_str(msg, msg);
  939. ),
  940. TP_printk(
  941. "%s", __get_str(msg)
  942. )
  943. );
  944. TRACE_EVENT(kgsl_clock_throttling,
  945. TP_PROTO(
  946. int idle_10pct,
  947. int crc_50pct,
  948. int crc_more50pct,
  949. int crc_less50pct,
  950. int64_t adj
  951. ),
  952. TP_ARGS(
  953. idle_10pct,
  954. crc_50pct,
  955. crc_more50pct,
  956. crc_less50pct,
  957. adj
  958. ),
  959. TP_STRUCT__entry(
  960. __field(int, idle_10pct)
  961. __field(int, crc_50pct)
  962. __field(int, crc_more50pct)
  963. __field(int, crc_less50pct)
  964. __field(int64_t, adj)
  965. ),
  966. TP_fast_assign(
  967. __entry->idle_10pct = idle_10pct;
  968. __entry->crc_50pct = crc_50pct;
  969. __entry->crc_more50pct = crc_more50pct;
  970. __entry->crc_less50pct = crc_less50pct;
  971. __entry->adj = adj;
  972. ),
  973. TP_printk("idle_10=%d crc_50=%d crc_more50=%d crc_less50=%d adj=%lld",
  974. __entry->idle_10pct, __entry->crc_50pct, __entry->crc_more50pct,
  975. __entry->crc_less50pct, __entry->adj
  976. )
  977. );
  978. TRACE_EVENT(kgsl_bcl_clock_throttling,
  979. TP_PROTO(
  980. int crc_25pct,
  981. int crc_58pct,
  982. int crc_75pct
  983. ),
  984. TP_ARGS(
  985. crc_25pct,
  986. crc_58pct,
  987. crc_75pct
  988. ),
  989. TP_STRUCT__entry(
  990. __field(int, crc_25pct)
  991. __field(int, crc_58pct)
  992. __field(int, crc_75pct)
  993. ),
  994. TP_fast_assign(
  995. __entry->crc_25pct = crc_25pct;
  996. __entry->crc_58pct = crc_58pct;
  997. __entry->crc_75pct = crc_75pct;
  998. ),
  999. TP_printk("crc_25=%d crc_58=%d crc_75=%d",
  1000. __entry->crc_25pct, __entry->crc_58pct,
  1001. __entry->crc_75pct
  1002. )
  1003. );
  1004. DECLARE_EVENT_CLASS(gmu_oob_template,
  1005. TP_PROTO(unsigned int mask),
  1006. TP_ARGS(mask),
  1007. TP_STRUCT__entry(
  1008. __field(unsigned int, mask)
  1009. ),
  1010. TP_fast_assign(
  1011. __entry->mask = mask;
  1012. ),
  1013. TP_printk("mask=0x%08x", __entry->mask)
  1014. );
  1015. DEFINE_EVENT(gmu_oob_template, kgsl_gmu_oob_set,
  1016. TP_PROTO(unsigned int mask),
  1017. TP_ARGS(mask)
  1018. );
  1019. DEFINE_EVENT(gmu_oob_template, kgsl_gmu_oob_clear,
  1020. TP_PROTO(unsigned int mask),
  1021. TP_ARGS(mask)
  1022. );
  1023. DECLARE_EVENT_CLASS(hfi_msg_template,
  1024. TP_PROTO(unsigned int id, unsigned int size, unsigned int seqnum),
  1025. TP_ARGS(id, size, seqnum),
  1026. TP_STRUCT__entry(
  1027. __field(unsigned int, id)
  1028. __field(unsigned int, size)
  1029. __field(unsigned int, seq)
  1030. ),
  1031. TP_fast_assign(
  1032. __entry->id = id;
  1033. __entry->size = size;
  1034. __entry->seq = seqnum;
  1035. ),
  1036. TP_printk("id=0x%x size=0x%x seqnum=0x%x",
  1037. __entry->id, __entry->size, __entry->seq)
  1038. );
  1039. DEFINE_EVENT(hfi_msg_template, kgsl_hfi_send,
  1040. TP_PROTO(unsigned int id, unsigned int size, unsigned int seqnum),
  1041. TP_ARGS(id, size, seqnum)
  1042. );
  1043. DEFINE_EVENT(hfi_msg_template, kgsl_hfi_receive,
  1044. TP_PROTO(unsigned int id, unsigned int size, unsigned int seqnum),
  1045. TP_ARGS(id, size, seqnum)
  1046. );
  1047. TRACE_EVENT(kgsl_timeline_alloc,
  1048. TP_PROTO(
  1049. u32 id,
  1050. u64 seqno
  1051. ),
  1052. TP_ARGS(
  1053. id,
  1054. seqno
  1055. ),
  1056. TP_STRUCT__entry(
  1057. __field(u32, id)
  1058. __field(u64, seqno)
  1059. ),
  1060. TP_fast_assign(
  1061. __entry->id = id;
  1062. __entry->seqno = seqno;
  1063. ),
  1064. TP_printk("id=%u initial=%llu",
  1065. __entry->id, __entry->seqno
  1066. )
  1067. );
  1068. TRACE_EVENT(kgsl_timeline_destroy,
  1069. TP_PROTO(
  1070. u32 id
  1071. ),
  1072. TP_ARGS(
  1073. id
  1074. ),
  1075. TP_STRUCT__entry(
  1076. __field(u32, id)
  1077. ),
  1078. TP_fast_assign(
  1079. __entry->id = id;
  1080. ),
  1081. TP_printk("id=%u",
  1082. __entry->id
  1083. )
  1084. );
  1085. TRACE_EVENT(kgsl_timeline_signal,
  1086. TP_PROTO(
  1087. u32 id,
  1088. u64 seqno
  1089. ),
  1090. TP_ARGS(
  1091. id,
  1092. seqno
  1093. ),
  1094. TP_STRUCT__entry(
  1095. __field(u32, id)
  1096. __field(u64, seqno)
  1097. ),
  1098. TP_fast_assign(
  1099. __entry->id = id;
  1100. __entry->seqno = seqno;
  1101. ),
  1102. TP_printk("id=%u seqno=%llu",
  1103. __entry->id, __entry->seqno
  1104. )
  1105. );
  1106. TRACE_EVENT(kgsl_timeline_fence_alloc,
  1107. TP_PROTO(
  1108. u32 timeline,
  1109. u64 seqno
  1110. ),
  1111. TP_ARGS(
  1112. timeline,
  1113. seqno
  1114. ),
  1115. TP_STRUCT__entry(
  1116. __field(u32, timeline)
  1117. __field(u64, seqno)
  1118. ),
  1119. TP_fast_assign(
  1120. __entry->timeline = timeline;
  1121. __entry->seqno = seqno;
  1122. ),
  1123. TP_printk("timeline=%u seqno=%llu",
  1124. __entry->timeline, __entry->seqno
  1125. )
  1126. );
  1127. TRACE_EVENT(kgsl_timeline_fence_release,
  1128. TP_PROTO(
  1129. u32 timeline,
  1130. u64 seqno
  1131. ),
  1132. TP_ARGS(
  1133. timeline,
  1134. seqno
  1135. ),
  1136. TP_STRUCT__entry(
  1137. __field(u32, timeline)
  1138. __field(u64, seqno)
  1139. ),
  1140. TP_fast_assign(
  1141. __entry->timeline = timeline;
  1142. __entry->seqno = seqno;
  1143. ),
  1144. TP_printk("timeline=%u seqno=%llu",
  1145. __entry->timeline, __entry->seqno
  1146. )
  1147. );
  1148. TRACE_EVENT(kgsl_timeline_wait,
  1149. TP_PROTO(
  1150. u32 flags,
  1151. s64 tv_sec,
  1152. s64 tv_nsec
  1153. ),
  1154. TP_ARGS(
  1155. flags,
  1156. tv_sec,
  1157. tv_nsec
  1158. ),
  1159. TP_STRUCT__entry(
  1160. __field(u32, flags)
  1161. __field(s64, tv_sec)
  1162. __field(s64, tv_nsec)
  1163. ),
  1164. TP_fast_assign(
  1165. __entry->flags = flags;
  1166. __entry->tv_sec = tv_sec;
  1167. __entry->tv_nsec = tv_nsec;
  1168. ),
  1169. TP_printk("flags=0x%x tv_sec=%llu tv_nsec=%llu",
  1170. __entry->flags, __entry->tv_sec, __entry->tv_nsec
  1171. )
  1172. );
  1173. TRACE_EVENT(kgsl_aux_command,
  1174. TP_PROTO(u32 drawctxt_id, u32 numcmds, u32 flags, u32 timestamp
  1175. ),
  1176. TP_ARGS(drawctxt_id, numcmds, flags, timestamp
  1177. ),
  1178. TP_STRUCT__entry(
  1179. __field(u32, drawctxt_id)
  1180. __field(u32, numcmds)
  1181. __field(u32, flags)
  1182. __field(u32, timestamp)
  1183. ),
  1184. TP_fast_assign(
  1185. __entry->drawctxt_id = drawctxt_id;
  1186. __entry->numcmds = numcmds;
  1187. __entry->flags = flags;
  1188. __entry->timestamp = timestamp;
  1189. ),
  1190. TP_printk("context=%u numcmds=%u flags=0x%x timestamp=%u",
  1191. __entry->drawctxt_id, __entry->numcmds, __entry->flags,
  1192. __entry->timestamp
  1193. )
  1194. );
  1195. TRACE_EVENT(kgsl_drawobj_timeline,
  1196. TP_PROTO(u32 timeline, u64 seqno
  1197. ),
  1198. TP_ARGS(timeline, seqno
  1199. ),
  1200. TP_STRUCT__entry(
  1201. __field(u32, timeline)
  1202. __field(u64, seqno)
  1203. ),
  1204. TP_fast_assign(
  1205. __entry->timeline = timeline;
  1206. __entry->seqno = seqno;
  1207. ),
  1208. TP_printk("timeline=%u seqno=%llu",
  1209. __entry->timeline, __entry->seqno
  1210. )
  1211. );
  1212. TRACE_EVENT(kgsl_thermal_constraint,
  1213. TP_PROTO(
  1214. s32 max_freq
  1215. ),
  1216. TP_ARGS(
  1217. max_freq
  1218. ),
  1219. TP_STRUCT__entry(
  1220. __field(s32, max_freq)
  1221. ),
  1222. TP_fast_assign(
  1223. __entry->max_freq = max_freq;
  1224. ),
  1225. TP_printk("Thermal max freq=%d",
  1226. __entry->max_freq
  1227. )
  1228. );
  1229. TRACE_EVENT(kgsl_pool_add_page,
  1230. TP_PROTO(int order, u32 count),
  1231. TP_ARGS(order, count),
  1232. TP_STRUCT__entry(
  1233. __field(int, order)
  1234. __field(u32, count)
  1235. ),
  1236. TP_fast_assign(
  1237. __entry->order = order;
  1238. __entry->count = count;
  1239. ),
  1240. TP_printk("order=%d count=%u",
  1241. __entry->order, __entry->count
  1242. )
  1243. );
  1244. TRACE_EVENT(kgsl_pool_get_page,
  1245. TP_PROTO(int order, u32 count),
  1246. TP_ARGS(order, count),
  1247. TP_STRUCT__entry(
  1248. __field(int, order)
  1249. __field(u32, count)
  1250. ),
  1251. TP_fast_assign(
  1252. __entry->order = order;
  1253. __entry->count = count;
  1254. ),
  1255. TP_printk("order=%d count=%u",
  1256. __entry->order, __entry->count
  1257. )
  1258. );
  1259. TRACE_EVENT(kgsl_pool_alloc_page_system,
  1260. TP_PROTO(int order),
  1261. TP_ARGS(order),
  1262. TP_STRUCT__entry(
  1263. __field(int, order)
  1264. ),
  1265. TP_fast_assign(
  1266. __entry->order = order;
  1267. ),
  1268. TP_printk("order=%d",
  1269. __entry->order
  1270. )
  1271. );
  1272. TRACE_EVENT(kgsl_pool_try_page_lower,
  1273. TP_PROTO(int order),
  1274. TP_ARGS(order),
  1275. TP_STRUCT__entry(
  1276. __field(int, order)
  1277. ),
  1278. TP_fast_assign(
  1279. __entry->order = order;
  1280. ),
  1281. TP_printk("order=%d",
  1282. __entry->order
  1283. )
  1284. );
  1285. TRACE_EVENT(kgsl_pool_free_page,
  1286. TP_PROTO(int order),
  1287. TP_ARGS(order),
  1288. TP_STRUCT__entry(
  1289. __field(int, order)
  1290. ),
  1291. TP_fast_assign(
  1292. __entry->order = order;
  1293. ),
  1294. TP_printk("order=%d",
  1295. __entry->order
  1296. )
  1297. );
  1298. TRACE_EVENT(kgsl_reclaim_memdesc,
  1299. TP_PROTO(
  1300. struct kgsl_mem_entry *mem_entry,
  1301. bool swapout
  1302. ),
  1303. TP_ARGS(mem_entry, swapout
  1304. ),
  1305. TP_STRUCT__entry(
  1306. __field(uint64_t, gpuaddr)
  1307. __field(uint64_t, size)
  1308. __field(unsigned int, page_count)
  1309. __field(unsigned int, tgid)
  1310. __field(unsigned int, id)
  1311. __field(uint64_t, flags)
  1312. __field(bool, swapout)
  1313. ),
  1314. TP_fast_assign(
  1315. __entry->gpuaddr = mem_entry->memdesc.gpuaddr;
  1316. __entry->size = mem_entry->memdesc.size;
  1317. __entry->page_count = mem_entry->memdesc.page_count;
  1318. __entry->tgid = pid_nr(mem_entry->priv->pid);
  1319. __entry->id = mem_entry->id;
  1320. __entry->flags = mem_entry->memdesc.flags;
  1321. __entry->swapout = swapout;
  1322. ),
  1323. TP_printk(
  1324. "gpuaddr=0x%llx size=%llu page_count=%u tgid=%u id=%u flags=0x%llx swap=%s",
  1325. __entry->gpuaddr, __entry->size, __entry->page_count, __entry->tgid,
  1326. __entry->id, __entry->flags, __entry->swapout ? "out" : "in"
  1327. )
  1328. );
  1329. TRACE_EVENT(kgsl_reclaim_process,
  1330. TP_PROTO(
  1331. struct kgsl_process_private *process,
  1332. u32 swap_count,
  1333. bool swapout
  1334. ),
  1335. TP_ARGS(process, swap_count, swapout
  1336. ),
  1337. TP_STRUCT__entry(
  1338. __field(unsigned int, pid)
  1339. __field(u32, swap_count)
  1340. __field(u32, unpinned_page_count)
  1341. __field(bool, swapout)
  1342. ),
  1343. TP_fast_assign(
  1344. __entry->pid = pid_nr(process->pid);
  1345. __entry->swap_count = swap_count;
  1346. __entry->unpinned_page_count = atomic_read(&process->unpinned_page_count);
  1347. __entry->swapout = swapout;
  1348. ),
  1349. TP_printk(
  1350. "tgid=%u swapped=%u swapped_out_total=%u swap=%s",
  1351. __entry->pid, __entry->swap_count, __entry->unpinned_page_count,
  1352. __entry->swapout ? "out" : "in"
  1353. )
  1354. );
  1355. #endif /* _KGSL_TRACE_H */
  1356. /* This part must be outside protection */
  1357. #include <trace/define_trace.h>