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