• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python3
2# -*- coding: utf-8 -*-
3#
4# Copyright (c) 2024 Huawei Device Co., Ltd.
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9#     http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16#
17import re
18
19
20def parse_bytes_to_str(data):
21    decoded_str = ""
22
23    if data is None or data.strip() == "":
24        return decoded_str
25
26    if data.find(b'\x00') == -1:
27        decoded_str = data[:].decode('utf-8', errors="ignore")
28        return decoded_str
29
30    decoded_str = data[:data.index(b'\x00')].decode('utf-8', errors="ignore")
31
32    return decoded_str
33
34
35def parse_int_field(one_event, name, int_signed):
36    return int.from_bytes(one_event["fields"][name], byteorder='little', signed=int_signed)
37
38
39def parse(event_print_fmt, data, one_event):
40    result = None
41    parse_func = print_fmt_func_map.get(event_print_fmt, "")
42    if parse_func != "":
43        result = parse_func(data, one_event)
44    return result
45
46
47def parse_irq_handler_entry(data, one_event):
48    irq = parse_int_field(one_event, "irq", True)
49    data_pos = parse_int_field(one_event, "name", False) & 0xffff
50
51    return "irq=%d name=%s" % (irq, parse_bytes_to_str(data[data_pos:]))
52
53
54def parse_irq_handler_exit(data, one_event):
55    irq = parse_int_field(one_event, "irq", True)
56    ret = parse_int_field(one_event, "ret", True)
57    return "irq=%d ret=%s" % (irq, "handled" if ret else "unhandled")
58
59
60def parse_softirq_entry_exit(data, one_event):
61    vec = parse_int_field(one_event, "vec", False)
62    vec_map = {0: "HI", 1: "TIMER", 2: "NET_TX", 3: "NET_RX", 4: "BLOCK", 5: "IRQ_POLL", \
63        6: "TASKLET", 7: "SCHED", 8: "HRTIMER", 9: "RCU"}
64    return "vec=%d [action=%s]" % (vec, vec_map.get(vec, ''))
65
66
67def parse_sched_wakeup_hm(data, one_event):
68    pname = parse_bytes_to_str(one_event["fields"]["pname[16]"])
69    pid = parse_int_field(one_event, "pid", True)
70    prio = parse_int_field(one_event, "prio", True)
71    target_cpu = parse_int_field(one_event, "target_cpu", True)
72
73    return "comm=%s pid=%d prio=%d target_cpu=%03d" % (pname, pid, prio, target_cpu)
74
75
76def parse_sched_wakeup(data, one_event):
77    comm = parse_bytes_to_str(one_event["fields"]["comm[16]"])
78    pid = parse_int_field(one_event, "pid", True)
79    prio = parse_int_field(one_event, "prio", True)
80    success = parse_int_field(one_event, "success", True)
81    target_cpu = parse_int_field(one_event, "target_cpu", True)
82
83    return "comm=%s pid=%d prio=%d target_cpu=%03d" % (comm, pid, prio, target_cpu)
84
85
86def parse_sched_switch_hm_new(data, one_event):
87    pname = parse_bytes_to_str(one_event["fields"]["pname[16]"])
88    prev_tid = parse_int_field(one_event, "prev_tid", True)
89    pprio = parse_int_field(one_event, "pprio", True)
90    pstate = parse_int_field(one_event, "pstate", False)
91    nname = parse_bytes_to_str(one_event["fields"]["nname[16]"])
92    next_tid = parse_int_field(one_event, "next_tid", True)
93    nprio = parse_int_field(one_event, "nprio", True)
94    ninfo = one_event["fields"]["ninfo[8]"]
95
96    tmp_affinity = int.from_bytes(ninfo[:4], byteorder="little")
97    affinity = hex(tmp_affinity)[2:]
98    affinity = affinity.lstrip('0') or '0'
99    remaining = int.from_bytes(ninfo[4:], byteorder='little')
100
101    # 位域参数定义
102    load_mask = (1 << 10) - 1
103    group_mask = (1 << 2) - 1
104    restricted_mask = 1
105    expel_mask = (1 << 3) - 1
106    cgid_mask = (1 << 5) - 1
107
108    # 按位域偏移量解析
109    load = (remaining >> 0) & load_mask      # 0-9 bit
110    group = (remaining >> 10) & group_mask     # 10-11 bit
111    restricted = (remaining >> 12) & restricted_mask # 12 bit
112    expel = (remaining >> 13) & expel_mask     # 13-15 bit
113    cgid = (remaining >> 16) & cgid_mask      # 16-20 bit
114
115    # The load has been moved one bit to right before storing. Hence, it should be moved one bit to left.
116    next_info = affinity + ',' + str(load << 1) + ',' + str(group) + ',' + str(restricted) + ',' + str(expel) + \
117        ',' + str(cgid)
118
119    pstate_map = {0x0: 'R', 0x1: 'S', 0x2: 'D', 0x10: 'X', 0x100: 'R+'}
120    prev_state = pstate_map.get(pstate, '?')
121
122    return "prev_comm=%s prev_pid=%d prev_prio=%d prev_state=%s ==> next_comm=%s next_pid=%d next_prio=%d next_info=%s" \
123        % (pname, prev_tid, pprio, prev_state, nname, next_tid, nprio, next_info)
124
125
126def parse_sched_switch_hm_ninfo_cg(data, one_event):
127    pname = parse_bytes_to_str(one_event["fields"]["pname[16]"])
128    prev_tid = parse_int_field(one_event, "prev_tid", True)
129    pprio = parse_int_field(one_event, "pprio", True)
130    pstate = parse_int_field(one_event, "pstate", False)
131    nname = parse_bytes_to_str(one_event["fields"]["nname[16]"])
132    next_tid = parse_int_field(one_event, "next_tid", True)
133    nprio = parse_int_field(one_event, "nprio", True)
134    ninfo = one_event["fields"]["ninfo[8]"]
135    cg = parse_bytes_to_str(one_event["fields"]["cg[32]"])
136
137    tmp_affinity = int.from_bytes(ninfo[:4], byteorder="little")
138    affinity = hex(tmp_affinity)[2:]
139    affinity = affinity.lstrip('0') or '0'
140    remaining = int.from_bytes(ninfo[4:], byteorder='little')
141
142    # 位域参数定义
143    load_mask = (1 << 10) - 1
144    group_mask = (1 << 2) - 1
145    restricted_mask = 1
146    expel_mask = (1 << 3) - 1
147
148    # 按位域偏移量解析
149    load = (remaining >> 0) & load_mask      # 0-9 bit
150    group = (remaining >> 10) & group_mask     # 10-11 bit
151    restricted = (remaining >> 12) & restricted_mask # 12 bit
152    expel = (remaining >> 13) & expel_mask     # 13-15 bit
153
154    # The load has been moved one bit to right before storing. Hence, it should be moved one bit to left.
155    next_info = affinity + ',' + str(load << 1) + ',' + str(group) + ',' + str(restricted) + ',' + str(expel)
156
157    pstate_map = {0x0: 'R', 0x1: 'S', 0x2: 'D', 0x10: 'X', 0x100: 'R+'}
158    prev_state = pstate_map.get(pstate, '?')
159
160    return "prev_comm=%s prev_pid=%d prev_prio=%d prev_state=%s ==> next_comm=%s next_pid=%d next_prio=%d next_info=%s cg=%s" \
161        % (pname, prev_tid, pprio, prev_state, nname, next_tid, nprio, next_info, cg)
162
163
164def parse_sched_switch_hm(data, one_event):
165    pname = parse_bytes_to_str(one_event["fields"]["pname[16]"])
166    prev_tid = parse_int_field(one_event, "prev_tid", True)
167    pprio = parse_int_field(one_event, "pprio", True)
168    pstate = parse_int_field(one_event, "pstate", False)
169    nname = parse_bytes_to_str(one_event["fields"]["nname[16]"])
170    next_tid = parse_int_field(one_event, "next_tid", True)
171    nprio = parse_int_field(one_event, "nprio", True)
172
173    pstate_map = {0x0: 'R', 0x1: 'S', 0x2: 'D', 0x10: 'X', 0x100: 'R+'}
174    prev_state = pstate_map.get(pstate, '?')
175
176    return "prev_comm=%s prev_pid=%d prev_prio=%d prev_state=%s ==> next_comm=%s next_pid=%d next_prio=%d" \
177        % (pname, prev_tid, pprio, prev_state, nname, next_tid, nprio)
178
179
180def parse_sched_switch(data, one_event):
181    prev_comm = parse_bytes_to_str(one_event["fields"]["prev_comm[16]"])
182    prev_pid = parse_int_field(one_event, "prev_pid", True)
183    prev_prio = parse_int_field(one_event, "prev_prio", True)
184    prev_state = parse_int_field(one_event, "prev_state", True)
185    next_comm = parse_bytes_to_str(one_event["fields"]["next_comm[16]"])
186    next_pid = parse_int_field(one_event, "next_pid", True)
187    next_prio = parse_int_field(one_event, "next_prio", True)
188    expeller_type = parse_int_field(one_event, "expeller_type", False)
189
190    pstate_map = {0x1: 'S', 0x2: 'D', 0x4: 'T', 0x8: 't', 0x10: 'X', 0x20: 'Z', 0x40: 'P', 0x80: 'I'}
191    pstate = pstate_map.get(prev_state & 0xff, 'R')
192    if prev_state & 0x100 != 0:
193        pstate += '+'
194
195    return "prev_comm=%s prev_pid=%d prev_prio=%d prev_state=%s ==> next_comm=%s next_pid=%d next_prio=%d expeller_type=%d" \
196    % (prev_comm, prev_pid, prev_prio, pstate, next_comm, next_pid, next_prio, expeller_type)
197
198
199def parse_sched_blocked_reason_hm_old(data, one_event):
200    pid = parse_int_field(one_event, "pid", True)
201    caller = parse_int_field(one_event, "caller", False)
202    iowait = parse_int_field(one_event, "iowait", False)
203    delay = parse_int_field(one_event, "delay", False)
204    cnode_idx = parse_int_field(one_event, "cnode_idx", False)
205
206    return "pid=%d iowait=%d caller=0x%x cnode_idx=%d delay=%d" % (pid, iowait, caller, cnode_idx, delay >> 10)
207
208
209def parse_sched_blocked_reason_hm(data, one_event):
210    pid = parse_int_field(one_event, "pid", True)
211    iowait = parse_int_field(one_event, "iowait", False)
212    func_name = parse_bytes_to_str(one_event["fields"]["func_name[20]"])
213    offset = parse_int_field(one_event, "offset", False)
214    size = parse_int_field(one_event, "size", False)
215    mod_name = parse_bytes_to_str(one_event["fields"]["mod_name[12]"])
216    delay = parse_int_field(one_event, "delay", False)
217
218    return "pid=%d iowait=%d caller=%s+0x%lx/0x%lx[%s] delay=%d" \
219        % (pid, iowait, func_name, offset, size, mod_name, delay >> 10)
220
221
222def parse_sched_blocked_reason(data, one_event):
223    pid = parse_int_field(one_event, "pid", True)
224    caller = parse_int_field(one_event, "caller", False)
225    iowait = parse_int_field(one_event, "iowait", False)
226    delay = parse_int_field(one_event, "delay", False)
227
228    return "pid=%d iowait=%d caller=0x%x delay=%d" % (pid, iowait, caller, delay >> 10)
229
230
231def parse_cpu_frequency(data, one_event):
232    state = parse_int_field(one_event, "state", False)
233    cpu_id = parse_int_field(one_event, "cpu_id", False)
234
235    return "state=%d cpu_id=%d" % (state, cpu_id)
236
237
238def parse_clock_set_rate(data, one_event):
239    data_pos = parse_int_field(one_event, "name", False) & 0xffff
240    state = parse_int_field(one_event, "state", False)
241    cpu_id = parse_int_field(one_event, "cpu_id", False)
242
243    return "%s state=%lu cpu_id=%lu" % (parse_bytes_to_str(data[data_pos:]), state, cpu_id)
244
245
246def parse_clock_set_rate_powerkernel_hm(data, one_event):
247    data_pos = parse_int_field(one_event, "name", False) & 0xffff
248    state = parse_int_field(one_event, "state", False)
249    cpu_id = parse_int_field(one_event, "cpu_id", False)
250
251    return "%s state=%u cpu_id=%u" % (parse_bytes_to_str(data[data_pos:]), state, cpu_id)
252
253
254def parse_cpu_frequency_limits_hm(data, one_event):
255    min_freq = parse_int_field(one_event, "min", False)
256    max_freq = parse_int_field(one_event, "max", False)
257    cpu_id = parse_int_field(one_event, "cpu_id", False)
258
259    return "min=%d max=%d cpu_id=%d" % (min_freq, max_freq, cpu_id)
260
261
262def parse_cpu_frequency_limits(data, one_event):
263    min_freq = parse_int_field(one_event, "min_freq", False)
264    max_freq = parse_int_field(one_event, "max_freq", False)
265    cpu_id = parse_int_field(one_event, "cpu_id", False)
266
267    return "min=%d max=%d cpu_id=%d" % (min_freq, max_freq, cpu_id)
268
269
270def parse_cpu_idle(data, one_event):
271    state = parse_int_field(one_event, "state", False)
272    cpu_id = parse_int_field(one_event, "cpu_id", False)
273
274    return "state=%d cpu_id=%d" % (state, cpu_id)
275
276
277def parse_ext4_da_write_begin(data, one_event):
278    dev = parse_int_field(one_event, "dev", False)
279    ino = parse_int_field(one_event, "ino", False)
280    pos = parse_int_field(one_event, "pos", True)
281    len_write = parse_int_field(one_event, "len", False)
282    flags = parse_int_field(one_event, "flags", False)
283
284    return "dev %d,%d ino %d pos %d len %d flags %d" \
285        % (dev >> 20, dev & 0xfffff, ino, pos, len_write, flags)
286
287
288def parse_ext4_da_write_end(data, one_event):
289    dev = parse_int_field(one_event, "dev", False)
290    ino = parse_int_field(one_event, "ino", False)
291    pos = parse_int_field(one_event, "pos", True)
292    len_write = parse_int_field(one_event, "len", False)
293    copied = parse_int_field(one_event, "copied", False)
294
295    return "dev %d,%d ino %d pos %d len %d copied %d" \
296        % (dev >> 20, dev & 0xfffff, ino, pos, len_write, copied)
297
298
299def parse_ext4_sync_file_enter(data, one_event):
300    dev = parse_int_field(one_event, "dev", False)
301    ino = parse_int_field(one_event, "ino", False)
302    parent = parse_int_field(one_event, "parent", False)
303    datasync = parse_int_field(one_event, "datasync", True)
304
305    return "dev %d,%d ino %d parent %d datasync %d " \
306        % (dev >> 20, dev & 0xfffff, ino, parent, datasync)
307
308
309def parse_ext4_sync_file_exit(data, one_event):
310    dev = parse_int_field(one_event, "dev", False)
311    ino = parse_int_field(one_event, "ino", False)
312    ret = parse_int_field(one_event, "ret", True)
313    return "dev %d,%d ino %d ret %d" % (dev >> 20, dev & 0xfffff, ino, ret)
314
315
316def parse_block_bio_remap(data, one_event):
317    dev = parse_int_field(one_event, "dev", False)
318    sector = parse_int_field(one_event, "sector", False)
319    nr_sector = parse_int_field(one_event, "nr_sector", False)
320    old_dev = parse_int_field(one_event, "old_dev", False)
321    old_sector = parse_int_field(one_event, "old_sector", False)
322    rwbs = parse_bytes_to_str(one_event["fields"]["rwbs[8]"])
323
324    return "%d,%d %s %d + %d <- (%d,%d) %d" \
325        % (dev >> 20, dev & 0xfffff, rwbs, sector, nr_sector, old_dev >> 20, old_dev & 0xfffff, old_sector)
326
327
328def parse_block_bio_remap_new(data, one_event):
329    dev = parse_int_field(one_event, "dev", False)
330    sector = parse_int_field(one_event, "sector", False)
331    nr_sector = parse_int_field(one_event, "nr_sector", False)
332    old_dev = parse_int_field(one_event, "old_dev", False)
333    old_sector = parse_int_field(one_event, "old_sector", False)
334
335    return "%d,%d %d + %d <- (%d,%d) %d" \
336        % (dev >> 20, dev & 0xfffff, sector, nr_sector, old_dev >> 20, old_dev & 0xfffff, old_sector)
337
338
339def parse_block_rq_issue_hm(data, one_event):
340    dev = parse_int_field(one_event, "dev", False)
341    sector = parse_int_field(one_event, "sector", False)
342    nr_sector = parse_int_field(one_event, "nr_sector", False)
343    bytes_num = parse_int_field(one_event, "bytes", False)
344    rwbs = parse_bytes_to_str(one_event["fields"]["rwbs[8]"])
345    comm = parse_bytes_to_str(one_event["fields"]["comm[16]"])
346    cmd = parse_bytes_to_str(one_event["fields"]["cmd[16]"])
347
348    return "%d,%d %s %d (%s) %d + %d [%s]" \
349        % (dev >> 20, dev & 0xfffff, rwbs, bytes_num, cmd, sector, nr_sector, comm)
350
351
352def parse_block_rq_issue_or_insert(data, one_event):
353    dev = parse_int_field(one_event, "dev", False)
354    sector = parse_int_field(one_event, "sector", False)
355    nr_sector = parse_int_field(one_event, "nr_sector", False)
356    bytes_num = parse_int_field(one_event, "bytes", False)
357    rwbs = parse_bytes_to_str(one_event["fields"]["rwbs[8]"])
358    comm = parse_bytes_to_str(one_event["fields"]["comm[16]"])
359    cmd_pos = parse_int_field(one_event, "cmd", False) & 0xffff
360
361    return "%d,%d %s %d (%s) %d + %d [%s]" \
362        % (dev >> 20, dev & 0xfffff, rwbs, bytes_num, parse_bytes_to_str(data[cmd_pos:]), sector, nr_sector, comm)
363
364
365def parse_block_rq_complete_hm(data, one_event):
366    dev = parse_int_field(one_event, "dev", False)
367    sector = parse_int_field(one_event, "sector", False)
368    nr_sector = parse_int_field(one_event, "nr_sector", False)
369    error = parse_int_field(one_event, "error", True)
370    rwbs = parse_bytes_to_str(one_event["fields"]["rwbs[8]"])
371    cmd = parse_bytes_to_str(one_event["fields"]["cmd[16]"])
372
373    return "%d,%d %s (%s) %d + %d [%d]" \
374        % (dev >> 20, dev & 0xfffff, rwbs, cmd, sector, nr_sector, error)
375
376
377def parse_block_rq_complete(data, one_event):
378    dev = parse_int_field(one_event, "dev", False)
379    sector = parse_int_field(one_event, "sector", False)
380    nr_sector = parse_int_field(one_event, "nr_sector", False)
381    error = parse_int_field(one_event, "error", True)
382    rwbs = parse_bytes_to_str(one_event["fields"]["rwbs[8]"])
383    cmd_pos = parse_int_field(one_event, "cmd", False) & 0xffff
384
385    return "%d,%d %s (%s) %d + %d [%d]" \
386        % (dev >> 20, dev & 0xfffff, rwbs, parse_bytes_to_str(data[cmd_pos:]), sector, nr_sector, error)
387
388
389def parse_ufshcd_command_hm(data, one_event):
390    dev_name = parse_bytes_to_str(one_event["fields"]["dev_name[16]"])
391    command_str = parse_bytes_to_str(one_event["fields"]["str[16]"])
392    tag = parse_int_field(one_event, "tag", False)
393    doorbell = parse_int_field(one_event, "doorbell", False)
394    transfer_len = parse_int_field(one_event, "transfer_len", True)
395    intr = parse_int_field(one_event, "intr", False)
396    lba = parse_int_field(one_event, "lba", False)
397    opcode = parse_int_field(one_event, "opcode", False)
398
399    return "%s: %s: tag: %d, DB: 0x%x, size: %d, IS: %d, LBA: %d, opcode: 0x%x" \
400        % (command_str, dev_name, tag, doorbell, transfer_len, intr, lba, opcode)
401
402
403def parse_ufshcd_command(data, one_event):
404    dev_name_pos = parse_int_field(one_event, "dev_name", False) & 0xffff
405    str_pos = parse_int_field(one_event, "str", False) & 0xffff
406    tag = parse_int_field(one_event, "tag", False)
407    doorbell = parse_int_field(one_event, "doorbell", False)
408    transfer_len = parse_int_field(one_event, "transfer_len", True)
409    intr = parse_int_field(one_event, "intr", False)
410    lba = parse_int_field(one_event, "lba", False)
411    opcode = parse_int_field(one_event, "opcode", False)
412    group_id = parse_int_field(one_event, "group_id", False)
413
414    opcode_map = {0x8a: "WRITE_16", 0x2a: "WRITE_10", 0x88: "READ_16", \
415    0x28: "READ_10", 0x35: "SYNC", 0x42: "UNMAP"}
416
417    return "%s: %s: tag: %d, DB: 0x%x, size: %d, IS: %d, LBA: %d, opcode: 0x%x (%s), group_id: 0x%x" \
418        % (parse_bytes_to_str(data[str_pos:]), parse_bytes_to_str(data[dev_name_pos:]), tag, doorbell, \
419        transfer_len, intr, lba, opcode, opcode_map.get(opcode, ""), group_id)
420
421
422def parse_ufshcd_upiu(data, one_event):
423    dev_name_pos = parse_int_field(one_event, "dev_name", False) & 0xffff
424    str_pos = parse_int_field(one_event, "str", False) & 0xffff
425    hdr = parse_int_field(one_event, "hdr[12]", False)
426    tsf = parse_int_field(one_event, "tsf[16]", False)
427
428    return "%s: %s: HDR:0x%x, CDB:0x%x" % (parse_bytes_to_str(data[str_pos:]), \
429        parse_bytes_to_str(data[dev_name_pos:]), hdr, tsf)
430
431
432def parse_ufshcd_uic_command(data, one_event):
433    dev_name_pos = parse_int_field(one_event, "dev_name", False) & 0xffff
434    str_pos = parse_int_field(one_event, "str", False) & 0xffff
435    cmd = parse_int_field(one_event, "cmd", False)
436    arg1 = parse_int_field(one_event, "arg1", False)
437    arg2 = parse_int_field(one_event, "arg2", False)
438    arg3 = parse_int_field(one_event, "arg3", False)
439
440    return "%s: %s: cmd: 0x%x, arg1: 0x%x, arg2: 0x%x, arg3: 0x%x" \
441        % (parse_bytes_to_str(data[str_pos:]), parse_bytes_to_str(data[dev_name_pos:]), cmd, arg1, arg2, arg3)
442
443
444def parse_ufshcd_funcs(data, one_event):
445    usecs = parse_int_field(one_event, "usecs", True)
446    err = parse_int_field(one_event, "err", True)
447    dev_name_pos = parse_int_field(one_event, "dev_name", False) & 0xffff
448    dev_state = parse_int_field(one_event, "dev_state", True)
449    link_state = parse_int_field(one_event, "link_state", True)
450
451    dev_state_map = {1: "UFS_ACTIVE_PWR_MODE", 2: "UFS_SLEEP_PWR_MODE", 3: "UFS_POWERDOWN_PWR_MODE"}
452    link_state_map = {0: "UIC_LINK_OFF_STATE", 1: "UIC_LINK_ACTIVE_STATE", 2: "UIC_LINK_HIBERN8_STATE"}
453
454    return "%s: took %d usecs, dev_state: %s, link_state: %s, err %d" \
455        % (parse_bytes_to_str(data[dev_name_pos:]), usecs, dev_state_map.get(dev_state, ""), \
456        link_state_map.get(link_state, ""), err)
457
458
459def parse_ufshcd_profile_funcs(data, one_event):
460    dev_name_pos = parse_int_field(one_event, "dev_name", False) & 0xffff
461    profile_info_pos = parse_int_field(one_event, "profile_info", False) & 0xffff
462    time_us = parse_int_field(one_event, "time_us", True)
463    err = parse_int_field(one_event, "err", True)
464
465    return "%s: %s: took %d usecs, err %d" \
466        % (parse_bytes_to_str(data[dev_name_pos:]), parse_bytes_to_str(data[profile_info_pos:]), time_us, err)
467
468
469def parse_ufshcd_auto_bkops_state(data, one_event):
470    dev_name_pos = parse_int_field(one_event, "dev_name", False) & 0xffff
471    state_pos = parse_int_field(one_event, "state", False) & 0xffff
472
473    return "%s: auto bkops - %s" % (parse_bytes_to_str(data[dev_name_pos:]), parse_bytes_to_str(data[state_pos:]))
474
475
476def parse_ufshcd_clk_scaling(data, one_event):
477    dev_name_pos = parse_int_field(one_event, "dev_name", False) & 0xffff
478    state_pos = parse_int_field(one_event, "state", False) & 0xffff
479    clk_pos = parse_int_field(one_event, "clk", False) & 0xffff
480    prev_state = parse_int_field(one_event, "prev_state", False)
481    curr_state = parse_int_field(one_event, "curr_state", False)
482
483    return "%s: %s %s from %d to %d Hz" % (parse_bytes_to_str(data[dev_name_pos:]), \
484        parse_bytes_to_str(data[state_pos:]), parse_bytes_to_str(data[clk_pos:]), prev_state, curr_state)
485
486
487def parse_ufshcd_clk_gating(data, one_event):
488    dev_name_pos = parse_int_field(one_event, "dev_name", False) & 0xffff
489    state = parse_int_field(one_event, "state", True)
490
491    state_map = {0: "CLKS_OFF", 1: "CLKS_ON", 2: "REQ_CLKS_OFF", 3: "REQ_CLKS_ON"}
492
493    return "%s: gating state changed to %s" % (parse_bytes_to_str(data[dev_name_pos:]), state_map.get(state, ''))
494
495
496def parse_i2c_read(data, one_event):
497    adapter_nr = parse_int_field(one_event, "adapter_nr", True)
498    msg_nr = parse_int_field(one_event, "msg_nr", False)
499    addr = parse_int_field(one_event, "addr", False)
500    flags = parse_int_field(one_event, "flags", False)
501    len_read = parse_int_field(one_event, "len", False)
502
503    return "i2c-%d #%d a=%03x f=%04x l=%d" % (adapter_nr, msg_nr, addr, flags, len_read)
504
505
506def parse_i2c_write_or_reply(data, one_event):
507    adapter_nr = parse_int_field(one_event, "adapter_nr", True)
508    msg_nr = parse_int_field(one_event, "msg_nr", False)
509    addr = parse_int_field(one_event, "addr", False)
510    flags = parse_int_field(one_event, "flags", False)
511    len_write = parse_int_field(one_event, "len", False)
512    buf_pos = parse_int_field(one_event, "buf", False) & 0xffff
513    buf_str = ""
514    read_cnt = 0
515    while read_cnt < len_write:
516        temp_data = parse_bytes_to_str(data[buf_pos + read_cnt : buf_pos + read_cnt + 1])
517        if temp_data == "" or temp_data == '\x00':
518            buf_str += "00"
519        else:
520            buf_str += temp_data.encode('utf-8').hex()
521        if read_cnt < (len_write - 1):
522            buf_str += "-"
523        read_cnt += 1
524    buf_str += "]"
525    return ("i2c-%d #%d a=%03x f=%04x l=%d %s" % (adapter_nr, msg_nr, addr, flags, len_write, buf_str))
526
527
528def parse_i2c_result(data, one_event):
529    adapter_nr = parse_int_field(one_event, "adapter_nr", True)
530    nr_msgs = parse_int_field(one_event, "nr_msgs", False)
531    ret = parse_int_field(one_event, "ret", True)
532
533    return "i2c-%d n=%d ret=%d" % (adapter_nr, nr_msgs, ret)
534
535
536def parse_smbus_read(data, one_event):
537    adapter_nr = parse_int_field(one_event, "adapter_nr", True)
538    flags = parse_int_field(one_event, "flags", False)
539    addr = parse_int_field(one_event, "addr", False)
540    command = parse_int_field(one_event, "command", False)
541    protocol = parse_int_field(one_event, "protocol", False)
542
543    protocol_map = {0: "QUICK", 1: "BYTE", 2: "BYTE_DATA", 3: "WORD_DATA", \
544        4: "PROC_CALL", 5: "BLOCK_DATA", 6: "I2C_BLOCK_BROKEN", 7: "BLOCK_PROC_CALL", 8: "I2C_BLOCK_DATA"}
545
546    return "i2c-%d a=%03x f=%04x c=%x %s" % (adapter_nr, addr, flags, command, protocol_map.get(protocol, ''))
547
548
549def parse_smbus_write_or_reply(data, one_event):
550    adapter_nr = parse_int_field(one_event, "adapter_nr", True)
551    addr = parse_int_field(one_event, "addr", False)
552    flags = parse_int_field(one_event, "flags", False)
553    command = parse_int_field(one_event, "command", False)
554    len_write = parse_int_field(one_event, "len", False)
555    protocol = parse_int_field(one_event, "protocol", False)
556    buf_key = "buf[32 + 2]"
557    buf_str = ""
558    if buf_key in one_event["fields"]:
559        buf_str = parse_bytes_to_str(one_event["fields"][buf_key])
560
561    protocol_map = {0: "QUICK", 1: "BYTE", 2: "BYTE_DATA", 3: "WORD_DATA", \
562        4: "PROC_CALL", 5: "BLOCK_DATA", 6: "I2C_BLOCK_BROKEN", 7: "BLOCK_PROC_CALL", 8: "I2C_BLOCK_DATA"}
563
564    return ("i2c-%d a=%03x f=%04x c=%x %s l=%d %s" \
565        % (adapter_nr, addr, flags, command, protocol_map.get(protocol, ''), len_write, buf_str))
566
567
568def parse_smbus_result(data, one_event):
569    adapter_nr = parse_int_field(one_event, "adapter_nr", True)
570    addr = parse_int_field(one_event, "addr", False)
571    flags = parse_int_field(one_event, "flags", False)
572    read_write_value = parse_int_field(one_event, "read_write", False)
573    command = parse_int_field(one_event, "command", False)
574    res = parse_int_field(one_event, "res", True)
575    protocol = parse_int_field(one_event, "protocol", False)
576
577    protocol_map = {0: "QUICK", 1: "BYTE", 2: "BYTE_DATA", 3: "WORD_DATA", \
578        4: "PROC_CALL", 5: "BLOCK_DATA", 6: "I2C_BLOCK_BROKEN", 7: "BLOCK_PROC_CALL", 8: "I2C_BLOCK_DATA"}
579    read_write = "wr" if read_write_value == 0 else "rd"
580
581    return "i2c-%d a=%03x f=%04x c=%x %s %s res=%d" \
582        % (adapter_nr, addr, flags, command, protocol_map.get(protocol, ''), read_write, res)
583
584
585def parse_regulator_set_voltage_complete(data, one_event):
586    name_pos = parse_int_field(one_event, "name", False) & 0xffff
587    val = parse_int_field(one_event, "val", False)
588
589    return "name=%s, val=%d" % (parse_bytes_to_str(data[name_pos:]), val)
590
591
592def parse_regulator_set_voltage(data, one_event):
593    name_pos = parse_int_field(one_event, "name", False) & 0xffff
594    min_voltage = parse_int_field(one_event, "min", True)
595    max_voltage = parse_int_field(one_event, "max", True)
596
597    return "name=%s (%d-%d)" % (parse_bytes_to_str(data[name_pos:]), min_voltage, max_voltage)
598
599
600def parse_regulator_funcs(data, one_event):
601    name_pos = parse_int_field(one_event, "name", False) & 0xffff
602
603    return "name=%s" % (parse_bytes_to_str(data[name_pos:]))
604
605
606def parse_dma_fence_funcs(data, one_event):
607    driver_pos = parse_int_field(one_event, "driver", False) & 0xffff
608    timeline_pos = parse_int_field(one_event, "timeline", False) & 0xffff
609    context = parse_int_field(one_event, "context", False)
610    seqno = parse_int_field(one_event, "seqno", False)
611
612    return "driver=%s timeline=%s context=%d seqno=%d" \
613        % (parse_bytes_to_str(data[driver_pos:]), parse_bytes_to_str(data[timeline_pos:]), context, seqno)
614
615
616def parse_binder_transaction(data, one_event):
617    debug_id = parse_int_field(one_event, "debug_id", True)
618    target_node = parse_int_field(one_event, "target_node", True)
619    to_proc = parse_int_field(one_event, "to_proc", True)
620    to_thread = parse_int_field(one_event, "to_thread", True)
621    reply = parse_int_field(one_event, "reply", True)
622    code = parse_int_field(one_event, "code", False)
623    flags = parse_int_field(one_event, "flags", False)
624
625    return "transaction=%d dest_node=%d dest_proc=%d dest_thread=%d reply=%d flags=0x%x code=0x%x" \
626        % (debug_id, target_node, to_proc, to_thread, reply, flags, code)
627
628
629def parse_binder_transaction_received(data, one_event):
630    debug_id = parse_int_field(one_event, "debug_id", True)
631
632    return "transaction=%d" % (debug_id)
633
634
635def parse_mmc_request_start(data, one_event):
636    cmd_opcode = parse_int_field(one_event, "cmd_opcode", False)
637    cmd_arg = parse_int_field(one_event, "cmd_arg", False)
638    cmd_flags = parse_int_field(one_event, "cmd_flags", False)
639    cmd_retries = parse_int_field(one_event, "cmd_retries", False)
640    stop_opcode = parse_int_field(one_event, "stop_opcode", False)
641    stop_arg = parse_int_field(one_event, "stop_arg", False)
642    stop_flags = parse_int_field(one_event, "stop_flags", False)
643    stop_retries = parse_int_field(one_event, "stop_retries", False)
644    sbc_opcode = parse_int_field(one_event, "sbc_opcode", False)
645    sbc_arg = parse_int_field(one_event, "sbc_arg", False)
646    sbc_flags = parse_int_field(one_event, "sbc_flags", False)
647    sbc_retries = parse_int_field(one_event, "sbc_retries", False)
648    blocks = parse_int_field(one_event, "blocks", False)
649    blk_addr = parse_int_field(one_event, "blk_addr", False)
650    blksz = parse_int_field(one_event, "blksz", False)
651    data_flags = parse_int_field(one_event, "data_flags", False)
652    tag = parse_int_field(one_event, "tag", True)
653    can_retune = parse_int_field(one_event, "can_retune", False)
654    doing_retune = parse_int_field(one_event, "doing_retune", False)
655    retune_now = parse_int_field(one_event, "retune_now", False)
656    need_retune = parse_int_field(one_event, "need_retune", False)
657    hold_retune = parse_int_field(one_event, "hold_retune", True)
658    retune_period = parse_int_field(one_event, "retune_period", True)
659    mrq = parse_int_field(one_event, "mrq", False)
660    name = parse_bytes_to_str(one_event["fields"]["name"])
661
662    return "%s: start struct mmc_request[0x%x]: cmd_opcode=%d cmd_arg=0x%x cmd_flags=0x%x \
663        cmd_retries=%d stop_opcode=%d stop_arg=0x%x stop_flags=0x%x stop_retries=%d sbc_opcode=%d \
664        sbc_arg=0x%x sbc_flags=0x%x sbc_retires=%d blocks=%d block_size=%d blk_addr=%d data_flags=0x%x \
665        tag=%d can_retune=%d doing_retune=%d retune_now=%d need_retune=%d hold_retune=%d retune_period=%d" \
666        % (name, mrq, cmd_opcode, cmd_arg, cmd_flags, cmd_retries, stop_opcode, stop_arg, stop_flags, \
667        stop_retries, sbc_opcode, sbc_arg, sbc_flags, sbc_retries, blocks, blksz, blk_addr, data_flags, \
668        tag, can_retune, doing_retune, retune_now, need_retune, hold_retune, retune_period)
669
670
671def parse_mmc_request_done(data, one_event):
672    cmd_opcode = parse_int_field(one_event, "cmd_opcode", False)
673    cmd_err = parse_int_field(one_event, "cmd_err", True)
674    cmd_resp = list(one_event["fields"]["cmd_resp[4]"])
675    cmd_retries = parse_int_field(one_event, "cmd_retries", False)
676    stop_opcode = parse_int_field(one_event, "stop_opcode", False)
677    stop_err = parse_int_field(one_event, "stop_err", True)
678    stop_resp = list(one_event["fields"]["stop_resp[4]"])
679    stop_retries = parse_int_field(one_event, "stop_retries", False)
680    sbc_opcode = parse_int_field(one_event, "sbc_opcode", False)
681    sbc_err = parse_int_field(one_event, "sbc_err", True)
682    sbc_resp = list(one_event["fields"]["sbc_resp[4]"])
683    sbc_retries = parse_int_field(one_event, "sbc_retries", False)
684    bytes_xfered = parse_int_field(one_event, "bytes_xfered", False)
685    data_err = parse_int_field(one_event, "data_err", True)
686    tag = parse_int_field(one_event, "tag", True)
687    can_retune = parse_int_field(one_event, "can_retune", False)
688    doing_retune = parse_int_field(one_event, "doing_retune", False)
689    retune_now = parse_int_field(one_event, "retune_now", False)
690    need_retune = parse_int_field(one_event, "need_retune", True)
691    hold_retune = parse_int_field(one_event, "hold_retune", True)
692    retune_period = parse_int_field(one_event, "retune_period", False)
693    mrq = parse_int_field(one_event, "mrq", False)
694    name = parse_bytes_to_str(one_event["fields"]["name"])
695
696    return "%s: end struct mmc_request[0x%x]: cmd_opcode=%d cmd_err=%d cmd_resp=0x%x 0x%x 0x%x 0x%x \
697        cmd_retries=%d stop_opcode=%d stop_err=%d stop_resp=0x%x 0x%x 0x%x 0x%x stop_retries=%d sbc_opcode=%d \
698        sbc_err=%d sbc_resp=0x%x 0x%x 0x%x 0x%x sbc_retries=%d bytes_xfered=%d data_err=%d tag=%d can_retune=%d \
699        doing_retune=%d retune_now=%d need_retune=%d hold_retune=%d retune_period=%d" \
700        % (name, mrq, cmd_opcode, cmd_err, cmd_resp[0], cmd_resp[1], cmd_resp[2], cmd_resp[3], cmd_retries, \
701        stop_opcode, stop_err, stop_resp[0], stop_resp[1], stop_resp[2], stop_resp[3], stop_retries, sbc_opcode, \
702        sbc_err, sbc_resp[0], sbc_resp[1], sbc_resp[2], sbc_resp[3], sbc_retries, bytes_xfered, data_err, tag, \
703        can_retune, doing_retune, retune_now, need_retune, hold_retune, retune_period)
704
705
706def parse_file_check_and_advance_wb_err(data, one_event):
707    file = parse_int_field(one_event, "file", False)
708    i_ino = parse_int_field(one_event, "i_ino", False)
709    s_dev = parse_int_field(one_event, "s_dev", False)
710    old = parse_int_field(one_event, "old", False)
711    new = parse_int_field(one_event, "new", False)
712
713    return "file=0x%x dev=%d:%d ino=0x%x old=0x%x new=0x%x" \
714        % (file, s_dev >> 20, s_dev & 0xfffff, i_ino, old, new)
715
716
717def parse_filemap_set_wb_err(data, one_event):
718    i_ino = parse_int_field(one_event, "i_ino", False)
719    s_dev = parse_int_field(one_event, "s_dev", False)
720    errseq = parse_int_field(one_event, "errseq", False)
721
722    return "dev=%d:%d ino=0x%x errseq=0x%x" \
723        % (s_dev >> 20, s_dev & 0xfffff, i_ino, errseq)
724
725
726def parse_mm_filemap_add_or_delete_page_cache(data, one_event):
727    pfn = parse_int_field(one_event, "pfn", False)
728    i_ino = parse_int_field(one_event, "i_ino", False)
729    index = parse_int_field(one_event, "index", False)
730    s_dev = parse_int_field(one_event, "s_dev", False)
731    pg = parse_int_field(one_event, "pg", False)
732
733    return "dev %d:%d ino 0x%x page=0x%x pfn=%d ofs=%d" \
734        % (s_dev >> 20, s_dev & 0xfffff, i_ino, pg, pfn, index << 12)
735
736
737def parse_mm_filemap_add_or_delete_page_cache_new(data, one_event):
738    pfn = parse_int_field(one_event, "pfn", False)
739    i_ino = parse_int_field(one_event, "i_ino", False)
740    index = parse_int_field(one_event, "index", False)
741    s_dev = parse_int_field(one_event, "s_dev", False)
742    pg = parse_int_field(one_event, "pg", False)
743
744    return "dev %d:%d ino 0x%x page=0x%x pfn=%d ofs=%d" \
745        % (s_dev >> 20, s_dev & 0xfffff, i_ino, pg, pfn, index << 12)
746
747
748def parse_rss_stat(data, one_event):
749    mm_id = parse_int_field(one_event, "mm_id", False)
750    curr = parse_int_field(one_event, "curr", False)
751    member = parse_int_field(one_event, "member", True)
752    size = parse_int_field(one_event, "size", True)
753
754    return "mm_id=%d curr=%d member=%d size=%d" % (mm_id, curr, member, size)
755
756
757def parse_workqueue_execute_start_or_end(data, one_event):
758    work = parse_int_field(one_event, "work", False)
759    function = parse_int_field(one_event, "function", False)
760
761    return "work struct 0x%x: function 0x%x" % (work, function)
762
763
764def parse_thermal_power_allocator(data, one_event):
765    tz_id = parse_int_field(one_event, "tz_id", True)
766    req_power_pos = parse_int_field(one_event, "req_power", False) & 0xffff
767    total_req_power = parse_int_field(one_event, "total_req_power", False)
768    granted_power_pos = parse_int_field(one_event, "granted_power", False) & 0xffff
769    total_granted_power = parse_int_field(one_event, "total_granted_power", False)
770    num_actors = parse_int_field(one_event, "num_actors", False)
771    power_range = parse_int_field(one_event, "power_range", False)
772    max_allocatable_power = parse_int_field(one_event, "max_allocatable_power", False)
773    current_temp = parse_int_field(one_event, "current_temp", True)
774    delta_temp = parse_int_field(one_event, "delta_temp", True)
775
776    req_power = "{" + ", ".join(str(x) for x in list(data[req_power_pos:req_power_pos + num_actors * 4])) + "}"
777    granted_power = "{" + \
778        ", ".join(str(x) for x in list(data[granted_power_pos:granted_power_pos + num_actors * 4])) + "}"
779
780    return "thermal_zone_id=%d req_power=%s total_req_power=%d granted_power=%s total_granted_power=%d \
781        power_range=%d max_allocatable_power=%d current_temperature=%d delta_temperature=%d" \
782        % (tz_id, req_power, total_req_power, granted_power, total_granted_power, power_range, \
783        max_allocatable_power, current_temp, delta_temp)
784
785
786def parse_thermal_power_allocator_pid(data, one_event):
787    tz_id = parse_int_field(one_event, "tz_id", True)
788    err = parse_int_field(one_event, "err", True)
789    err_integral = parse_int_field(one_event, "err_integral", True)
790    p = parse_int_field(one_event, "p", True)
791    i = parse_int_field(one_event, "i", True)
792    d = parse_int_field(one_event, "d", True)
793    output = parse_int_field(one_event, "output", True)
794
795    return "thermal_zone_id=%d err=%d err_integral=%d p=%d i=%d d=%d output=%d" \
796        % (tz_id, err, err_integral, p, i, d, output)
797
798
799def parse_print(data, one_event):
800    ip = parse_int_field(one_event, "ip", False)
801    buf_pos = 16
802
803    return "0x%x: %s" % (ip, parse_bytes_to_str(data[buf_pos:]))
804
805
806def parse_tracing_mark_write(data, one_event):
807    data_pos = parse_int_field(one_event, "buffer", False) & 0xffff
808    result_str = parse_bytes_to_str(data[data_pos:])
809    if result_str is None:
810        return ""
811
812    if result_str is not None:
813        if result_str.startswith("E|") and result_str[-1] == "|":
814            result_str = result_str[:-1]
815    return result_str
816
817
818def parse_xacct_tracing_mark_write(data, one_event):
819    start = parse_int_field(one_event, "start", False)
820    pid = parse_int_field(one_event, "pid", False)
821    if start == 1:
822        trace_type = "B"
823        name = parse_bytes_to_str(one_event["fields"]["name[64]"])
824    else:
825        trace_type = "E"
826        name = ""
827    return "%c|%d|%s" % (trace_type, pid, name)
828
829def parse_phase_task_delta(data, one_event):
830    name = parse_bytes_to_str(one_event["fields"]["name[16]"])
831    tid = parse_int_field(one_event, "tid", False)
832    delta_exec = parse_int_field(one_event, "delta_exec", False)
833    info = parse_bytes_to_str(one_event["fields"]["info[256]"])
834    return "comm=%s tid=%d delta_exec=%d deltas={%s}" % (name, tid, delta_exec, info)
835
836
837def parse_erofs_read_enter(data, one_event):
838    dev = parse_int_field(one_event, "dev", False)
839    ino = parse_int_field(one_event, "ino", False)
840    off = parse_int_field(one_event, "off", False)
841    size = parse_int_field(one_event, "size", False)
842    data_loc_name = parse_int_field(one_event, "name", False) & 0xffff
843    return "dev:%d,%d ino:%lu offset:%lu size:%d entry_name:%s" % (dev >> 20, dev & 0xfffff, ino, off, size, parse_bytes_to_str(data[data_loc_name:]))
844
845
846def parse_erofs_read_exit(data, one_event):
847    dev = parse_int_field(one_event, "dev", False)
848    ino = parse_int_field(one_event, "ino", False)
849    off = parse_int_field(one_event, "off", False)
850    size = parse_int_field(one_event, "size", False)
851    res = parse_int_field(one_event, "res", False)
852    return "dev:%d,%d ino:%lu offset:%lu size:%d res:%d" % (dev >> 20, dev & 0xfffff, ino, off, size, res)
853
854
855def parse_erofs_read_iter_enter(data, one_event):
856    dev = parse_int_field(one_event, "dev", False)
857    ino = parse_int_field(one_event, "ino", False)
858    off = parse_int_field(one_event, "off", False)
859    size = parse_int_field(one_event, "size", False)
860    return "dev:%d,%d ino:%lu offset:%lu size:%d" % (dev >> 20, dev & 0xfffff, ino, off, size)
861
862
863def parse_erofs_read_iter_exit(data, one_event):
864    dev = parse_int_field(one_event, "dev", False)
865    ino = parse_int_field(one_event, "ino", False)
866    off = parse_int_field(one_event, "off", False)
867    size = parse_int_field(one_event, "size", False)
868    res = parse_int_field(one_event, "res", False)
869    return "dev:%d,%d ino:%lu offset:%lu size:%d res:%d" % (dev >> 20, dev & 0xfffff, ino, off, size, res)
870
871
872def parse_erofs_readdir(data, one_event):
873    dev = parse_int_field(one_event, "dev", False)
874    index = parse_int_field(one_event, "index", False)
875    start_pos = parse_int_field(one_event, "start_pos", False)
876    end_pos = parse_int_field(one_event, "end_pos", False)
877    res = parse_int_field(one_event, "res", False)
878    return "dev:(%d,%d), ino:%lu, start_pos:%lu, end_pos:%lu, err:%d" % (dev >> 20, dev & 0xfffff, index, start_pos, end_pos, res)
879
880
881def parse_erofs_lookup_start(data, one_event):
882    dev = parse_int_field(one_event, "dev", False)
883    index = parse_int_field(one_event, "index", False)
884    data_loc_name = parse_int_field(one_event, "name", False) & 0xffff
885    return "dev:(%d,%d), ino:%lu, name:%s" % (dev >> 20, dev & 0xfffff, index, parse_bytes_to_str(data[data_loc_name:]))
886
887
888def parse_erofs_lookup_end(data, one_event):
889    dev = parse_int_field(one_event, "dev", False)
890    index = parse_int_field(one_event, "index", False)
891    data_loc_name = parse_int_field(one_event, "name", False) & 0xffff
892    ino = parse_int_field(one_event, "cino", False)
893    res = parse_int_field(one_event, "res", False)
894    return "dev:(%d,%d), pino:%lu, name:%s, ino:%lu, err:%d" % (dev >> 20, dev & 0xfffff, index, parse_bytes_to_str(data[data_loc_name:]), ino, res)
895
896
897def parse_erofs_getattr_enter(data, one_event):
898    dev = parse_int_field(one_event, "dev", False)
899    index = parse_int_field(one_event, "index", False)
900    mode = parse_int_field(one_event, "mode", False)
901    size = parse_int_field(one_event, "size", False)
902    blocks = parse_int_field(one_event, "blocks", False)
903    nlink = parse_int_field(one_event, "nlink", False)
904    return "dev:(%d,%d), ino:%lu, mode:0x%hx, " "size:%ld, blocks:%lu, linkcnt:%u" % (dev >> 20, dev & 0xfffff, index, mode, size, blocks, nlink)
905
906
907def parse_erofs_getattr_exit(data, one_event):
908    dev = parse_int_field(one_event, "dev", False)
909    index = parse_int_field(one_event, "index", False)
910    mode = parse_int_field(one_event, "mode", False)
911    size = parse_int_field(one_event, "size", False)
912    blocks = parse_int_field(one_event, "blocks", False)
913    nlink = parse_int_field(one_event, "nlink", False)
914    return "dev:(%d,%d), ino:%lu, mode:0x%hx, " "size:%ld, blocks:%lu, linkcnt:%u" % (dev >> 20, dev & 0xfffff, index, mode, size, blocks, nlink)
915
916
917def parse_erofs_listxattr_enter(data, one_event):
918    dev = parse_int_field(one_event, "dev", False)
919    index = parse_int_field(one_event, "index", False)
920    mode = parse_int_field(one_event, "mode", False)
921    xattr_nid = parse_int_field(one_event, "xattr_nid", False)
922    size = parse_int_field(one_event, "size", False)
923    return "dev:(%d,%d), ino:%lu, mode:0x%hx, xattr_nid:%ld, size:%ld" % (dev >> 20, dev & 0xfffff, index, mode, xattr_nid, size)
924
925
926def parse_erofs_listxattr_exit(data, one_event):
927    dev = parse_int_field(one_event, "dev", False)
928    index = parse_int_field(one_event, "index", False)
929    mode = parse_int_field(one_event, "mode", False)
930    size = parse_int_field(one_event, "size", False)
931    blocks = parse_int_field(one_event, "blocks", False)
932    nlink = parse_int_field(one_event, "nlink", False)
933    res = parse_int_field(one_event, "res", False)
934    return "dev:(%d,%d), ino:%lu, mode:0x%hx, " "size:%ld, blocks:%lu, linkcnt:%u, err:%d" % (dev >> 20, dev & 0xfffff, index, mode, size, blocks, nlink, res)
935
936
937def parse_erofs_raw_access_readpages_start(data, one_event):
938    index = parse_int_field(one_event, "index", False)
939    nr_pages = parse_int_field(one_event, "nr_pages", False)
940    nid = parse_int_field(one_event, "index", False)
941    return "index:%lu nr_pages:%u nid:%lu" % (index, nr_pages, nid)
942
943
944def parse_erofs_raw_access_readpages_end(data, one_event):
945    nid = parse_int_field(one_event, "nid", False)
946    res = parse_int_field(one_event, "res", False)
947    return "nid:%lu res:%d" % (nid, res)
948
949
950def parse_erofs_read_raw_page_start(data, one_event):
951    index = parse_int_field(one_event, "index", False)
952    nid = parse_int_field(one_event, "nid", False)
953    return "index:%lu nid:%lu" % (index, nid)
954
955
956def parse_erofs_read_raw_page_end(data, one_event):
957    nid = parse_int_field(one_event, "nid", False)
958    res = parse_int_field(one_event, "res", False)
959    return "nid:%lu res:%d" % (nid, res)
960
961
962def parse_z_erofs_vle_normalaccess_readpage_end(data, one_event):
963    nid = parse_int_field(one_event, "nid", False)
964    res = parse_int_field(one_event, "res", False)
965    return "nid:%lu res:%d" % (nid, res)
966
967
968def parse_z_erofs_vle_normalaccess_readpage_start(data, one_event):
969    index = parse_int_field(one_event, "index", False)
970    nid = parse_int_field(one_event, "nid", False)
971    return "index:%lu nid:%lu" % (index, nid)
972
973
974def parse_z_erofs_vle_normalaccess_readpages_end(data, one_event):
975    nid = parse_int_field(one_event, "nid", False)
976    res = parse_int_field(one_event, "res", False)
977    return "nid:%lu res:%d" % (nid, res)
978
979
980def parse_z_erofs_vle_normalaccess_readpages_start(data, one_event):
981    index = parse_int_field(one_event, "index", False)
982    nr_pages = parse_int_field(one_event, "nr_pages", False)
983    nid = parse_int_field(one_event, "nid", False)
984    return "index:%lu nr_pages:%u nid:%lu" % (index, nr_pages, nid)
985
986PRINT_FMT_IRQ_HANDLER_ENTRY = '"irq=%d name=%s", REC->irq, ((char *)((void *)((char *)REC + (REC->__data_loc_name & 0xffff))))'
987PRINT_FMT_IRQ_HANDLER_EXIT = '"irq=%d ret=%s", REC->irq, REC->ret ? "handled" : "unhandled"'
988PRINT_FMT_SOFTIRQ_ENTRY_EXIT = '"vec=%u [action=%s]", REC->vec, __print_symbolic(REC->vec, { 0, "HI" }, { 1, "TIMER" }, { 2, "NET_TX" }, { 3, "NET_RX" }, { 4, "BLOCK" }, { 5, "IRQ_POLL" }, { 6, "TASKLET" }, { 7, "SCHED" }, { 8, "HRTIMER" }, { 9, "RCU" })'
989PRINT_FMT_SCHED_WAKEUP_HM = '"comm=%s pid=%d prio=%d target_cpu=%03d", REC->pname, REC->pid, REC->prio, REC->target_cpu'
990PRINT_FMT_SCHED_WAKEUP = '"comm=%s pid=%d prio=%d target_cpu=%03d", REC->comm, REC->pid, REC->prio, REC->target_cpu'
991PRINT_FMT_SCHED_SWITCH_HM = '"prev_comm=%s prev_pid=%d prev_prio=%d prev_state=%s" " ==> next_comm=%s next_pid=%d next_prio=%d", REC->pname, REC->prev_tid, REC->pprio, hm_trace_tcb_state2str(REC->pstate), REC->nname, REC->next_tid, REC->nprio'
992PRINT_FMT_SCHED_SWITCH_HM_NEW = '"prev_comm=%s prev_pid=%d prev_prio=%d prev_state=%s" " ==> next_comm=%s next_pid=%d next_prio=%d next_info=%s", REC->pname, REC->prev_tid, REC->pprio, hm_trace_tcb_state2str(REC->pstate), REC->nname, REC->next_tid, REC->nprio, hm_trace_tcb_unpack_schedinfo(REC->ninfo, sizeof(REC->ninfo))'
993PRINT_FMT_SCHED_SWITCH_HM_NINFO_CG = '"prev_comm=%s prev_pid=%d prev_prio=%d prev_state=%s" " ==> next_comm=%s next_pid=%d next_prio=%d next_info=%s cg=%s", REC->pname, REC->prev_tid, REC->pprio, hm_trace_tcb_state2str(REC->pstate), REC->nname, REC->next_tid, REC->nprio, hm_trace_tcb_unpack_schedinfo(REC->ninfo, sizeof(REC->ninfo)), REC->cg'
994PRINT_FMT_SCHED_SWITCH = '"prev_comm=%s prev_pid=%d prev_prio=%d prev_state=%s%s ==> next_comm=%s next_pid=%d next_prio=%d expeller_type=%u", REC->prev_comm, REC->prev_pid, REC->prev_prio, (REC->prev_state & ((((0x0000 | 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040) + 1) << 1) - 1)) ? __print_flags(REC->prev_state & ((((0x0000 | 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040) + 1) << 1) - 1), "|", { 0x0001, "S" }, { 0x0002, "D" }, { 0x0004, "T" }, { 0x0008, "t" }, { 0x0010, "X" }, { 0x0020, "Z" }, { 0x0040, "P" }, { 0x0080, "I" }) : "R", REC->prev_state & (((0x0000 | 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040) + 1) << 1) ? "+" : "", REC->next_comm, REC->next_pid, REC->next_prio, REC->expeller_type'
995PRINT_FMT_SCHED_BLOCKED_REASON_HM_OLD = '"pid=%d iowait=%d caller=%s delay=%llu", REC->pid, REC->iowait, hm_trace_sched_blocked_reason_of(REC->cnode_idx, REC->caller), REC->delay >> 10'
996PRINT_FMT_SCHED_BLOCKED_REASON_HM = '"pid=%d iowait=%d caller=%s+0x%lx/0x%lx[%s] delay=%llu", REC->pid, REC->iowait, REC->func_name, REC->offset, REC->size, REC->mod_name, REC->delay >> 10'
997PRINT_FMT_SCHED_BLOCKED_REASON = '"pid=%d iowait=%d caller=%pS delay=%lu", REC->pid, REC->io_wait, REC->caller, REC->delay>>10'
998PRINT_FMT_CPU_FREQUENCY_HM = '"state=%u cpu_id=%u", REC->state, REC->cpu_id'
999PRINT_FMT_CPU_FREQUENCY = '"state=%lu cpu_id=%lu", (unsigned long)REC->state, (unsigned long)REC->cpu_id'
1000PRINT_FMT_CLOCK_SET_RATE_POWER_HM = '"%s state=%lu cpu_id=%lu", ((char *)((void *)((char *)REC + (REC->__data_loc_name & 0xffff)))), (unsigned long)REC->state, (unsigned long)REC->cpu_id'
1001PRINT_FMT_CLOCK_SET_RATE_POWERKERNEL_HM = '"%s state=%u cpu_id=%u", ((char *)((void *)((char *)REC + (REC->__data_loc_name & 0xffff)))), REC->state, REC->cpu_id'
1002PRINT_FMT_CLOCK_SET_RATE = '"%s state=%lu cpu_id=%lu", __get_str(name), (unsigned long)REC->state, (unsigned long)REC->cpu_id'
1003PRINT_FMT_CPU_FREQUENCY_LIMITS_HM = '"min=%lu max=%lu cpu_id=%lu", (unsigned long)REC->min, (unsigned long)REC->max, (unsigned long)REC->cpu_id'
1004PRINT_FMT_CPU_FREQUENCY_LIMITS = '"min=%lu max=%lu cpu_id=%lu", (unsigned long)REC->min_freq, (unsigned long)REC->max_freq, (unsigned long)REC->cpu_id'
1005PRINT_FMT_CPU_IDLE_HM = '"state=%u cpu_id=%u", REC->state, REC->cpu_id'
1006PRINT_FMT_CPU_IDLE = '"state=%lu cpu_id=%lu", (unsigned long)REC->state, (unsigned long)REC->cpu_id'
1007PRINT_FMT_EXT4_DA_WRITE_BEGIN = '"dev %d,%d ino %lu pos %lld len %u flags %u", ((unsigned int) ((REC->dev) >> 20)), ((unsigned int) ((REC->dev) & ((1U << 20) - 1))), (unsigned long) REC->ino, REC->pos, REC->len, REC->flags'
1008PRINT_FMT_EXT4_DA_WRITE_END = '"dev %d,%d ino %lu pos %lld len %u copied %u", ((unsigned int) ((REC->dev) >> 20)), ((unsigned int) ((REC->dev) & ((1U << 20) - 1))), (unsigned long) REC->ino, REC->pos, REC->len, REC->copied'
1009PRINT_FMT_EXT4_SYNC_FILE_ENTER = '"dev %d,%d ino %lu parent %lu datasync %d ", ((unsigned int) ((REC->dev) >> 20)), ((unsigned int) ((REC->dev) & ((1U << 20) - 1))), (unsigned long) REC->ino, (unsigned long) REC->parent, REC->datasync'
1010PRINT_FMT_EXT4_SYNC_FILE_EXIT = '"dev %d,%d ino %lu ret %d", ((unsigned int) ((REC->dev) >> 20)), ((unsigned int) ((REC->dev) & ((1U << 20) - 1))), (unsigned long) REC->ino, REC->ret'
1011PRINT_FMT_BLOCK_BIO_REMAP = '"%d,%d %s %llu + %u <- (%d,%d) %llu", ((unsigned int) ((REC->dev) >> 20)), ((unsigned int) ((REC->dev) & ((1U << 20) - 1))), REC->rwbs, (unsigned long long)REC->sector, REC->nr_sector, ((unsigned int) ((REC->old_dev) >> 20)), ((unsigned int) ((REC->old_dev) & ((1U << 20) - 1))), (unsigned long long)REC->old_sector'
1012PRINT_FMT_BLOCK_BIO_REMAP_NEW = '"%d,%d %llu + %u <- (%d,%d) %llu", ((unsigned int) ((REC->dev) >> 20U)), ((unsigned int) ((REC->dev) & ((1U << 20U) - 1U))), (unsigned long long)REC->sector, REC->nr_sector, ((unsigned int) ((REC->old_dev) >> 20U)), ((unsigned int) ((REC->old_dev) & ((1U << 20U) - 1U))), (unsigned long long)REC->old_sector'
1013PRINT_FMT_BLOCK_RQ_ISSUE_HM = '"%d,%d %s %u (%s) %llu + %u [%s]", ((unsigned int) ((REC->dev) >> 20U)), ((unsigned int) ((REC->dev) & ((1U << 20U) - 1U))), REC->rwbs, REC->bytes, REC->cmd, (unsigned long long)REC->sector, REC->nr_sector, REC->comm'
1014PRINT_FMT_BLOCK_RQ_ISSUE_OR_INSERT = '"%d,%d %s %u (%s) %llu + %u [%s]", ((unsigned int) ((REC->dev) >> 20)), ((unsigned int) ((REC->dev) & ((1U << 20) - 1))), REC->rwbs, REC->bytes, __get_str(cmd), (unsigned long long)REC->sector, REC->nr_sector, REC->comm'
1015PRINT_FMT_BLOCK_RQ_COMPLETE_HM = '"%d,%d %s (%s) %llu + %u [%d]", ((unsigned int) ((REC->dev) >> 20U)), ((unsigned int) ((REC->dev) & ((1U << 20U) - 1U))), REC->rwbs, REC->cmd, (unsigned long long)REC->sector, REC->nr_sector, REC->error'
1016PRINT_FMT_BLOCK_RQ_COMPLETE = '"%d,%d %s (%s) %llu + %u [%d]", ((unsigned int) ((REC->dev) >> 20)), ((unsigned int) ((REC->dev) & ((1U << 20) - 1))), REC->rwbs, __get_str(cmd), (unsigned long long)REC->sector, REC->nr_sector, REC->error'
1017PRINT_FMT_UFSHCD_COMMAND_HM = '"%s: %s: tag: %u, DB: 0x%x, size: %d, IS: %u, LBA: %llu, opcode: 0x%x", REC->str, REC->dev_name, REC->tag, REC->doorbell, REC->transfer_len, REC->intr, REC->lba, (uint32_t)REC->opcode'
1018PRINT_FMT_UFSHCD_COMMAND = '"%s: %s: tag: %u, DB: 0x%x, size: %d, IS: %u, LBA: %llu, opcode: 0x%x (%s), group_id: 0x%x", __get_str(str), __get_str(dev_name), REC->tag, REC->doorbell, REC->transfer_len, REC->intr, REC->lba, (u32)REC->opcode, __print_symbolic(REC->opcode, { 0x8a, "WRITE_16" }, { 0x2a, "WRITE_10" }, { 0x88, "READ_16" }, { 0x28, "READ_10" }, { 0x35, "SYNC" }, { 0x42, "UNMAP" }), (u32)REC->group_id'
1019PRINT_FMT_UFSHCD_UPIU = '"%s: %s: HDR:%s, CDB:%s", __get_str(str), __get_str(dev_name), __print_hex(REC->hdr, sizeof(REC->hdr)), __print_hex(REC->tsf, sizeof(REC->tsf))'
1020PRINT_FMT_UFSHCD_UIC_COMMAND = '"%s: %s: cmd: 0x%x, arg1: 0x%x, arg2: 0x%x, arg3: 0x%x", __get_str(str), __get_str(dev_name), REC->cmd, REC->arg1, REC->arg2, REC->arg3'
1021PRINT_FMT_UFSHCD_FUNCS = '"%s: took %lld usecs, dev_state: %s, link_state: %s, err %d", __get_str(dev_name), REC->usecs, __print_symbolic(REC->dev_state, { 1, "UFS_ACTIVE_PWR_MODE" }, { 2, "UFS_SLEEP_PWR_MODE" }, { 3, "UFS_POWERDOWN_PWR_MODE" }), __print_symbolic(REC->link_state, { 0, "UIC_LINK_OFF_STATE" }, { 1, "UIC_LINK_ACTIVE_STATE" }, { 2, "UIC_LINK_HIBERN8_STATE" }), REC->err'
1022PRINT_FMT_UFSHCD_PROFILE_FUNCS = '"%s: %s: took %lld usecs, err %d", __get_str(dev_name), __get_str(profile_info), REC->time_us, REC->err'
1023PRINT_FMT_UFSHCD_AUTO_BKOPS_STATE = '"%s: auto bkops - %s", __get_str(dev_name), __get_str(state)'
1024PRINT_FMT_UFSHCD_CLK_SCALING = '"%s: %s %s from %u to %u Hz", __get_str(dev_name), __get_str(state), __get_str(clk), REC->prev_state, REC->curr_state'
1025PRINT_FMT_UFSHCD_CLK_GATING = '"%s: gating state changed to %s", __get_str(dev_name), __print_symbolic(REC->state, { 0, "CLKS_OFF" }, { 1, "CLKS_ON" }, { 2, "REQ_CLKS_OFF" }, { 3, "REQ_CLKS_ON" })'
1026PRINT_FMT_I2C_READ = '"i2c-%d #%u a=%03x f=%04x l=%u", REC->adapter_nr, REC->msg_nr, REC->addr, REC->flags, REC->len'
1027PRINT_FMT_I2C_WRITE_OR_REPLY = '"i2c-%d #%u a=%03x f=%04x l=%u [%*phD]", REC->adapter_nr, REC->msg_nr, REC->addr, REC->flags, REC->len, REC->len, __get_dynamic_array(buf)'
1028PRINT_FMT_I2C_RESULT = '"i2c-%d n=%u ret=%d", REC->adapter_nr, REC->nr_msgs, REC->ret'
1029PRINT_FMT_SMBUS_READ = '"i2c-%d a=%03x f=%04x c=%x %s", REC->adapter_nr, REC->addr, REC->flags, REC->command, __print_symbolic(REC->protocol, { 0, "QUICK" }, { 1, "BYTE" }, { 2, "BYTE_DATA" }, { 3, "WORD_DATA" }, { 4, "PROC_CALL" }, { 5, "BLOCK_DATA" }, { 6, "I2C_BLOCK_BROKEN" }, { 7, "BLOCK_PROC_CALL" }, { 8, "I2C_BLOCK_DATA" })'
1030PRINT_FMT_SMBUS_WRITE_OR_REPLY = '"i2c-%d a=%03x f=%04x c=%x %s l=%u [%*phD]", REC->adapter_nr, REC->addr, REC->flags, REC->command, __print_symbolic(REC->protocol, { 0, "QUICK" }, { 1, "BYTE" }, { 2, "BYTE_DATA" }, { 3, "WORD_DATA" }, { 4, "PROC_CALL" }, { 5, "BLOCK_DATA" }, { 6, "I2C_BLOCK_BROKEN" }, { 7, "BLOCK_PROC_CALL" }, { 8, "I2C_BLOCK_DATA" }), REC->len, REC->len, REC->buf'
1031PRINT_FMT_SMBUS_RESULT = '"i2c-%d a=%03x f=%04x c=%x %s %s res=%d", REC->adapter_nr, REC->addr, REC->flags, REC->command, __print_symbolic(REC->protocol, { 0, "QUICK" }, { 1, "BYTE" }, { 2, "BYTE_DATA" }, { 3, "WORD_DATA" }, { 4, "PROC_CALL" }, { 5, "BLOCK_DATA" }, { 6, "I2C_BLOCK_BROKEN" }, { 7, "BLOCK_PROC_CALL" }, { 8, "I2C_BLOCK_DATA" }), REC->read_write == 0 ? "wr" : "rd", REC->res'
1032PRINT_FMT_REGULATOR_SET_VOLTAGE_COMPLETE = '"name=%s, val=%u", __get_str(name), (int)REC->val'
1033PRINT_FMT_REGULATOR_SET_VOLTAGE = '"name=%s (%d-%d)", __get_str(name), (int)REC->min, (int)REC->max'
1034PRINT_FMT_REGULATOR_FUNCS = '"name=%s", __get_str(name)'
1035PRINT_FMT_DMA_FENCE_FUNCS = '"driver=%s timeline=%s context=%u seqno=%u", __get_str(driver), __get_str(timeline), REC->context, REC->seqno'
1036PRINT_FMT_BINDER_TRANSACTION = '"transaction=%d dest_node=%d dest_proc=%d dest_thread=%d reply=%d flags=0x%x code=0x%x", REC->debug_id, REC->target_node, REC->to_proc, REC->to_thread, REC->reply, REC->flags, REC->code'
1037PRINT_FMT_BINDER_TRANSACTION_RECEIVED = '"transaction=%d", REC->debug_id'
1038PRINT_FMT_MMC_REQUEST_START = '"%s: start struct mmc_request[%p]: cmd_opcode=%u cmd_arg=0x%x cmd_flags=0x%x cmd_retries=%u stop_opcode=%u stop_arg=0x%x stop_flags=0x%x stop_retries=%u sbc_opcode=%u sbc_arg=0x%x sbc_flags=0x%x sbc_retires=%u blocks=%u block_size=%u blk_addr=%u data_flags=0x%x tag=%d can_retune=%u doing_retune=%u retune_now=%u need_retune=%d hold_retune=%d retune_period=%u", __get_str(name), REC->mrq, REC->cmd_opcode, REC->cmd_arg, REC->cmd_flags, REC->cmd_retries, REC->stop_opcode, REC->stop_arg, REC->stop_flags, REC->stop_retries, REC->sbc_opcode, REC->sbc_arg, REC->sbc_flags, REC->sbc_retries, REC->blocks, REC->blksz, REC->blk_addr, REC->data_flags, REC->tag, REC->can_retune, REC->doing_retune, REC->retune_now, REC->need_retune, REC->hold_retune, REC->retune_period'
1039PRINT_FMT_MMC_REQUEST_DONE = '"%s: end struct mmc_request[%p]: cmd_opcode=%u cmd_err=%d cmd_resp=0x%x 0x%x 0x%x 0x%x cmd_retries=%u stop_opcode=%u stop_err=%d stop_resp=0x%x 0x%x 0x%x 0x%x stop_retries=%u sbc_opcode=%u sbc_err=%d sbc_resp=0x%x 0x%x 0x%x 0x%x sbc_retries=%u bytes_xfered=%u data_err=%d tag=%d can_retune=%u doing_retune=%u retune_now=%u need_retune=%d hold_retune=%d retune_period=%u", __get_str(name), REC->mrq, REC->cmd_opcode, REC->cmd_err, REC->cmd_resp[0], REC->cmd_resp[1], REC->cmd_resp[2], REC->cmd_resp[3], REC->cmd_retries, REC->stop_opcode, REC->stop_err, REC->stop_resp[0], REC->stop_resp[1], REC->stop_resp[2], REC->stop_resp[3], REC->stop_retries, REC->sbc_opcode, REC->sbc_err, REC->sbc_resp[0], REC->sbc_resp[1], REC->sbc_resp[2], REC->sbc_resp[3], REC->sbc_retries, REC->bytes_xfered, REC->data_err, REC->tag, REC->can_retune, REC->doing_retune, REC->retune_now, REC->need_retune, REC->hold_retune, REC->retune_period'
1040PRINT_FMT_FILE_CHECK_AND_ADVANCE_WB_ERR = '"file=%p dev=%d:%d ino=0x%lx old=0x%x new=0x%x", REC->file, ((unsigned int)((REC->s_dev) >> 20)), ((unsigned int)((REC->s_dev) & ((1U << 20) - 1))), REC->i_ino, REC->old, REC->new'
1041PRINT_FMT_FILEMAP_SET_WB_ERR = '"dev=%d:%d ino=0x%lx errseq=0x%x", ((unsigned int)((REC->s_dev) >> 20)), ((unsigned int)((REC->s_dev) & ((1U << 20) - 1))), REC->i_ino, REC->errseq'
1042PRINT_FMT_MM_FILEMAP_ADD_OR_DELETE_PAGE_CACHE = '"dev %d:%d ino %lx page=%px pfn=%lu ofs=%lu", ((unsigned int)((REC->s_dev) >> 20)), ((unsigned int)((REC->s_dev) & ((1U << 20) - 1))), REC->i_ino, REC->pg, REC->pfn, REC->index << 12'
1043PRINT_FMT_MM_FILEMAP_ADD_OR_DELETE_PAGE_CACHE_NEW = '"dev %d:%d ino %lx page=%p pfn=%lu ofs=%lu", ((unsigned int)((REC->s_dev) >> 20)), ((unsigned int)((REC->s_dev) & ((1U << 20) - 1))), REC->i_ino, REC->pg, REC->pfn, REC->index << 12'
1044PRINT_FMT_RSS_STAT_HM = '"mm_id=%u curr=%d member=%d size=%ldB", REC->mm_id, REC->curr, REC->member, REC->size'
1045PRINT_FMT_WORKQUEUE_EXECUTE_START_OR_END = '"work struct %p: function %ps", REC->work, REC->function'
1046PRINT_FMT_THERMAL_POWER_ALLOCATOR_PID = '"thermal_zone_id=%d err=%d err_integral=%d p=%lld i=%lld d=%lld output=%d", REC->tz_id, REC->err, REC->err_integral, REC->p, REC->i, REC->d, REC->output'
1047PRINT_FMT_THERMAL_POWER_ALLOCATOR = '"thermal_zone_id=%d req_power={%s} total_req_power=%u granted_power={%s} total_granted_power=%u power_range=%u max_allocatable_power=%u current_temperature=%d delta_temperature=%d", REC->tz_id, __print_array(__get_dynamic_array(req_power), REC->num_actors, 4), REC->total_req_power, __print_array(__get_dynamic_array(granted_power), REC->num_actors, 4), REC->total_granted_power, REC->power_range, REC->max_allocatable_power, REC->current_temp, REC->delta_temp'
1048PRINT_FMT_PRINT = '"%ps: %s", (void *)REC->ip, REC->buf'
1049PRINT_FMT_TRACING_MARK_WRITE = '"%s", ((void *)((char *)REC + (REC->__data_loc_buffer & 0xffff)))'
1050PRINT_FMT_XACCT_TRACING_MARK_WRITE = '"%c|%d|%s", "EB"[REC->start], REC->pid, REC->start ? REC->name : ""'
1051PRINT_FMT_PHASE_TASK_DELTA = '"comm=%s tid=%d delta_exec=%llu deltas={%s}", REC->name, REC->tid, REC->delta_exec, REC->info'
1052PRINT_FMT_EROFS_READ_ENTER = '"dev:%d,%d ino:%lu offset:%llu size:%zd entry_name:%s", ((unsigned int) ((REC->dev) >> 20)), ((unsigned int) ((REC->dev) & ((1U << 20) - 1))), REC->ino, REC->off, REC->size, ((char *)((void *)((char *)REC + (REC->__data_loc_name & 0xffff))))'
1053PRINT_FMT_EROFS_READ_EXIT = '"dev:%d,%d ino:%lu offset:%llu size:%zd res:%zd", ((unsigned int) ((REC->dev) >> 20)), ((unsigned int) ((REC->dev) & ((1U << 20) - 1))), REC->ino, REC->off, REC->size, REC->res'
1054PRINT_FMT_EROFS_READ_ITER_ENTER = '"dev:%d,%d ino:%lu offset:%llu size:%zd", ((unsigned int) ((REC->dev) >> 20)), ((unsigned int) ((REC->dev) & ((1U << 20) - 1))), REC->ino, REC->off, REC->size'
1055PRINT_FMT_EROFS_READ_ITER_EXIT = '"dev:%d,%d ino:%lu offset:%llu size:%zd res:%zd", ((unsigned int) ((REC->dev) >> 20)), ((unsigned int) ((REC->dev) & ((1U << 20) - 1))), REC->ino, REC->off, REC->size, REC->res'
1056PRINT_FMT_EROFS_READDIR = '"dev:(%d,%d), ino:%lu, start_pos:%llu, end_pos:%llu, err:%d", ((unsigned int) (((REC)->dev) >> 20)), ((unsigned int) (((REC)->dev) & ((1U << 20) - 1))), ((unsigned long)((REC)->index)), REC->start_pos, REC->end_pos, REC->res'
1057PRINT_FMT_EROFS_LOOKUP_START = '"dev:(%d,%d), ino:%lu, name:%s", ((unsigned int) (((REC)->dev) >> 20)), ((unsigned int) (((REC)->dev) & ((1U << 20) - 1))), ((unsigned long)((REC)->index)), ((char *)((void *)((char *)REC + (REC->__data_loc_name &0xffff))))'
1058PRINT_FMT_EROFS_LOOKUP_END = '"dev:(%d,%d), pino:%lu, name:%s, ino:%lu, err:%d", ((unsigned int) (((REC)->dev) >> 20)), ((unsigned int) (((REC)->dev) & ((1U << 20) - 1))), ((unsigned long)((REC)->index)), ((char *)((void *)((char *)REC + (REC->__data_loc_name & 0xffff)))), REC->cino, REC->res'
1059PRINT_FMT_EROFS_GETATTR_ENTER = '"dev:(%d,%d), ino:%lu, mode:0x%hx, " "size:%lld, blocks:%llu, linkcnt:%u", ((unsigned int) (((REC)->dev) >> 20)), ((unsigned int) (((REC)->dev) & ((1U << 20) - 1))), ((unsigned long)((REC)->index)), REC->mode, REC->size, (unsigned long long)REC->blocks, REC->nlink'
1060PRINT_FMT_EROFS_GETATTR_EXIT = '"dev:(%d,%d), ino:%lu, mode:0x%hx, " "size:%lld, blocks:%llu, linkcnt:%u", ((unsigned int) (((REC)->dev) >> 20)), ((unsigned int) (((REC)->dev) & ((1U << 20) - 1))), ((unsigned long)((REC)->index)), REC->mode, REC->size, (unsigned long long)REC->blocks, REC->nlink'
1061PRINT_FMT_EROFS_LISTXATTR_ENTER = '"dev:(%d,%d), ino:%lu, mode:0x%hx, xattr_nid:%lld, size:%lld", ((unsigned int) (((REC)->dev) >> 20)), ((unsigned int) (((REC)->dev) & ((1U << 20) - 1))), ((unsigned long)((REC)->index)), REC->mode, REC->xattr_nid, REC->size'
1062PRINT_FMT_EROFS_LISTXATTR_EXIT = '"dev:(%d,%d), ino:%lu, mode:0x%hx, " "size:%lld, blocks:%llu, linkcnt:%u, err:%d", ((unsigned int) (((REC)->dev) >> 20)), ((unsigned int) (((REC)->dev) & ((1U << 20) - 1))), ((unsigned long)((REC)->index)), REC->mode, REC->size, (unsigned long long)REC->blocks, REC->nlink, REC->res'
1063PRINT_FMT_EROFS_RAW_ACCESS_READPAGES_START = '"index:%llu nr_pages:%u nid:%lu", REC->index, REC->nr_pages, REC->nid'
1064PRINT_FMT_EROFS_RAW_ACCESS_READPAGES_END = '"nid:%lu res:%d", REC->nid, REC->res'
1065PRINT_FMT_EROFS_READ_RAW_PAGE_START = '"index:%llu nid:%lu", REC->index, REC->nid'
1066PRINT_FMT_EROFS_READ_RAW_PAGE_END = '"nid:%lu res:%d", REC->nid, REC->res'
1067PRINT_FMT_Z_EROFS_VLE_NORMALACCESS_READPAGE_END = '"nid:%lu res:%d", REC->nid, REC->res'
1068PRINT_FMT_Z_EROFS_VLE_NORMALACCESS_READPAGE_START = '"index:%llu nid:%lu", REC->index, REC->nid'
1069PRINT_FMT_Z_EROFS_VLE_NORMALACCESS_READPAGES_END = '"nid:%lu res:%d", REC->nid, REC->res'
1070PRINT_FMT_Z_EROFS_VLE_NORMALACCESS_READPAGES_START = '"index:%llu nr_pages:%u nid:%lu", REC->index, REC->nr_pages, REC->nid'
1071
1072print_fmt_func_map = {
1073PRINT_FMT_IRQ_HANDLER_ENTRY: parse_irq_handler_entry,
1074PRINT_FMT_IRQ_HANDLER_EXIT: parse_irq_handler_exit,
1075PRINT_FMT_SOFTIRQ_ENTRY_EXIT: parse_softirq_entry_exit,
1076PRINT_FMT_SCHED_WAKEUP_HM: parse_sched_wakeup_hm,
1077PRINT_FMT_SCHED_WAKEUP: parse_sched_wakeup,
1078PRINT_FMT_SCHED_SWITCH_HM: parse_sched_switch_hm,
1079PRINT_FMT_SCHED_SWITCH_HM_NEW: parse_sched_switch_hm_new,
1080PRINT_FMT_SCHED_SWITCH_HM_NINFO_CG: parse_sched_switch_hm_ninfo_cg,
1081PRINT_FMT_SCHED_SWITCH: parse_sched_switch,
1082PRINT_FMT_SCHED_BLOCKED_REASON_HM_OLD: parse_sched_blocked_reason_hm_old,
1083PRINT_FMT_SCHED_BLOCKED_REASON_HM: parse_sched_blocked_reason_hm,
1084PRINT_FMT_SCHED_BLOCKED_REASON: parse_sched_blocked_reason,
1085PRINT_FMT_CPU_FREQUENCY_HM: parse_cpu_frequency,
1086PRINT_FMT_CPU_FREQUENCY: parse_cpu_frequency,
1087PRINT_FMT_CLOCK_SET_RATE_POWER_HM: parse_clock_set_rate,
1088PRINT_FMT_CLOCK_SET_RATE_POWERKERNEL_HM: parse_clock_set_rate_powerkernel_hm,
1089PRINT_FMT_CLOCK_SET_RATE: parse_clock_set_rate,
1090PRINT_FMT_CPU_FREQUENCY_LIMITS_HM: parse_cpu_frequency_limits_hm,
1091PRINT_FMT_CPU_FREQUENCY_LIMITS: parse_cpu_frequency_limits,
1092PRINT_FMT_CPU_IDLE_HM: parse_cpu_idle,
1093PRINT_FMT_CPU_IDLE: parse_cpu_idle,
1094PRINT_FMT_EXT4_DA_WRITE_BEGIN: parse_ext4_da_write_begin,
1095PRINT_FMT_EXT4_DA_WRITE_END: parse_ext4_da_write_end,
1096PRINT_FMT_EXT4_SYNC_FILE_ENTER: parse_ext4_sync_file_enter,
1097PRINT_FMT_EXT4_SYNC_FILE_EXIT: parse_ext4_sync_file_exit,
1098PRINT_FMT_BLOCK_BIO_REMAP: parse_block_bio_remap,
1099PRINT_FMT_BLOCK_BIO_REMAP_NEW: parse_block_bio_remap_new,
1100PRINT_FMT_BLOCK_RQ_ISSUE_HM: parse_block_rq_issue_hm,
1101PRINT_FMT_BLOCK_RQ_ISSUE_OR_INSERT: parse_block_rq_issue_or_insert,
1102PRINT_FMT_BLOCK_RQ_COMPLETE_HM: parse_block_rq_complete_hm,
1103PRINT_FMT_BLOCK_RQ_COMPLETE: parse_block_rq_complete,
1104PRINT_FMT_UFSHCD_COMMAND_HM: parse_ufshcd_command_hm,
1105PRINT_FMT_UFSHCD_COMMAND: parse_ufshcd_command,
1106PRINT_FMT_UFSHCD_UPIU: parse_ufshcd_upiu,
1107PRINT_FMT_UFSHCD_UIC_COMMAND: parse_ufshcd_uic_command,
1108PRINT_FMT_UFSHCD_FUNCS: parse_ufshcd_funcs,
1109PRINT_FMT_UFSHCD_PROFILE_FUNCS: parse_ufshcd_profile_funcs,
1110PRINT_FMT_UFSHCD_AUTO_BKOPS_STATE: parse_ufshcd_auto_bkops_state,
1111PRINT_FMT_UFSHCD_CLK_SCALING: parse_ufshcd_clk_scaling,
1112PRINT_FMT_UFSHCD_CLK_GATING: parse_ufshcd_clk_gating,
1113PRINT_FMT_I2C_READ: parse_i2c_read,
1114PRINT_FMT_I2C_WRITE_OR_REPLY: parse_i2c_write_or_reply,
1115PRINT_FMT_I2C_RESULT: parse_i2c_result,
1116PRINT_FMT_SMBUS_READ: parse_smbus_read,
1117PRINT_FMT_SMBUS_WRITE_OR_REPLY: parse_smbus_write_or_reply,
1118PRINT_FMT_SMBUS_RESULT: parse_smbus_result,
1119PRINT_FMT_REGULATOR_SET_VOLTAGE_COMPLETE: parse_regulator_set_voltage_complete,
1120PRINT_FMT_REGULATOR_SET_VOLTAGE: parse_regulator_set_voltage,
1121PRINT_FMT_REGULATOR_FUNCS: parse_regulator_funcs,
1122PRINT_FMT_DMA_FENCE_FUNCS: parse_dma_fence_funcs,
1123PRINT_FMT_BINDER_TRANSACTION: parse_binder_transaction,
1124PRINT_FMT_BINDER_TRANSACTION_RECEIVED: parse_binder_transaction_received,
1125PRINT_FMT_MMC_REQUEST_START: parse_mmc_request_start,
1126PRINT_FMT_MMC_REQUEST_DONE: parse_mmc_request_done,
1127PRINT_FMT_FILE_CHECK_AND_ADVANCE_WB_ERR: parse_file_check_and_advance_wb_err,
1128PRINT_FMT_FILEMAP_SET_WB_ERR: parse_filemap_set_wb_err,
1129PRINT_FMT_MM_FILEMAP_ADD_OR_DELETE_PAGE_CACHE: parse_mm_filemap_add_or_delete_page_cache,
1130PRINT_FMT_MM_FILEMAP_ADD_OR_DELETE_PAGE_CACHE_NEW: parse_mm_filemap_add_or_delete_page_cache_new,
1131PRINT_FMT_RSS_STAT_HM: parse_rss_stat,
1132PRINT_FMT_WORKQUEUE_EXECUTE_START_OR_END: parse_workqueue_execute_start_or_end,
1133PRINT_FMT_THERMAL_POWER_ALLOCATOR_PID: parse_thermal_power_allocator_pid,
1134PRINT_FMT_THERMAL_POWER_ALLOCATOR: parse_thermal_power_allocator,
1135PRINT_FMT_PRINT: parse_print,
1136PRINT_FMT_TRACING_MARK_WRITE: parse_tracing_mark_write,
1137PRINT_FMT_XACCT_TRACING_MARK_WRITE: parse_xacct_tracing_mark_write,
1138PRINT_FMT_PHASE_TASK_DELTA: parse_phase_task_delta,
1139PRINT_FMT_EROFS_READ_ENTER: parse_erofs_read_enter,
1140PRINT_FMT_EROFS_READ_EXIT: parse_erofs_read_exit,
1141PRINT_FMT_EROFS_READ_ITER_ENTER: parse_erofs_read_iter_enter,
1142PRINT_FMT_EROFS_READ_ITER_EXIT: parse_erofs_read_iter_exit,
1143PRINT_FMT_EROFS_READDIR: parse_erofs_readdir,
1144PRINT_FMT_EROFS_LOOKUP_START: parse_erofs_lookup_start,
1145PRINT_FMT_EROFS_LOOKUP_END: parse_erofs_lookup_end,
1146PRINT_FMT_EROFS_GETATTR_ENTER: parse_erofs_getattr_enter,
1147PRINT_FMT_EROFS_GETATTR_EXIT: parse_erofs_getattr_exit,
1148PRINT_FMT_EROFS_LISTXATTR_ENTER: parse_erofs_listxattr_enter,
1149PRINT_FMT_EROFS_LISTXATTR_EXIT: parse_erofs_listxattr_exit,
1150PRINT_FMT_EROFS_RAW_ACCESS_READPAGES_START: parse_erofs_raw_access_readpages_start,
1151PRINT_FMT_EROFS_RAW_ACCESS_READPAGES_END: parse_erofs_raw_access_readpages_end,
1152PRINT_FMT_EROFS_READ_RAW_PAGE_START: parse_erofs_read_raw_page_start,
1153PRINT_FMT_EROFS_READ_RAW_PAGE_END: parse_erofs_read_raw_page_end,
1154PRINT_FMT_Z_EROFS_VLE_NORMALACCESS_READPAGE_END: parse_z_erofs_vle_normalaccess_readpage_end,
1155PRINT_FMT_Z_EROFS_VLE_NORMALACCESS_READPAGE_START: parse_z_erofs_vle_normalaccess_readpage_start,
1156PRINT_FMT_Z_EROFS_VLE_NORMALACCESS_READPAGES_END: parse_z_erofs_vle_normalaccess_readpages_end,
1157PRINT_FMT_Z_EROFS_VLE_NORMALACCESS_READPAGES_START: parse_z_erofs_vle_normalaccess_readpages_start
1158}
1159