blob: 2357eef204710c5e79404d881b662564e7246d94 [file] [log] [blame]
Hector Dearman85ef5362018-03-27 14:48:47 +01001/*
2 * Copyright (C) 2018 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include "tools/trace_to_text/ftrace_event_formatter.h"
18
19#include <inttypes.h>
Lalit Maganti910852d2018-03-28 13:16:45 +010020#include <algorithm>
21#include <string>
Hector Dearman85ef5362018-03-27 14:48:47 +010022
Primiano Tucci21c19d82018-03-29 12:35:08 +010023#include "perfetto/base/build_config.h"
24
25#if PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX) || \
26 PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID)
27#include <sys/sysmacros.h> // For major() / minor()
28#endif
29
Primiano Tucci3cbb10a2018-04-10 17:52:40 +010030// Not worth doing casts for printfs in this translation unit.
31#pragma GCC diagnostic ignored "-Wformat"
32#pragma GCC diagnostic ignored "-Wunused-parameter"
33
Hector Dearman85ef5362018-03-27 14:48:47 +010034namespace perfetto {
35namespace {
36
37using protos::BinderLockFtraceEvent;
38using protos::BinderLockedFtraceEvent;
39using protos::BinderSetPriorityFtraceEvent;
40using protos::BinderTransactionFtraceEvent;
41using protos::BinderTransactionReceivedFtraceEvent;
42using protos::BinderUnlockFtraceEvent;
43using protos::BlockBioBackmergeFtraceEvent;
44using protos::BlockBioBounceFtraceEvent;
45using protos::BlockBioCompleteFtraceEvent;
46using protos::BlockBioFrontmergeFtraceEvent;
47using protos::BlockBioQueueFtraceEvent;
48using protos::BlockBioRemapFtraceEvent;
49using protos::BlockDirtyBufferFtraceEvent;
50using protos::BlockGetrqFtraceEvent;
51using protos::BlockPlugFtraceEvent;
52using protos::BlockRqAbortFtraceEvent;
53using protos::BlockRqCompleteFtraceEvent;
54using protos::BlockRqInsertFtraceEvent;
55using protos::BlockRqIssueFtraceEvent;
56using protos::BlockRqRemapFtraceEvent;
57using protos::BlockRqRequeueFtraceEvent;
58using protos::BlockSleeprqFtraceEvent;
59using protos::BlockSplitFtraceEvent;
60using protos::BlockTouchBufferFtraceEvent;
61using protos::BlockUnplugFtraceEvent;
62using protos::CgroupAttachTaskFtraceEvent;
63using protos::CgroupDestroyRootFtraceEvent;
64using protos::CgroupMkdirFtraceEvent;
65using protos::CgroupReleaseFtraceEvent;
66using protos::CgroupRemountFtraceEvent;
67using protos::CgroupRenameFtraceEvent;
68using protos::CgroupRmdirFtraceEvent;
69using protos::CgroupSetupRootFtraceEvent;
70using protos::CgroupTransferTasksFtraceEvent;
71using protos::MmCompactionBeginFtraceEvent;
72using protos::MmCompactionDeferCompactionFtraceEvent;
73using protos::MmCompactionDeferResetFtraceEvent;
74using protos::MmCompactionDeferredFtraceEvent;
75using protos::MmCompactionEndFtraceEvent;
76using protos::MmCompactionFinishedFtraceEvent;
77using protos::MmCompactionIsolateFreepagesFtraceEvent;
78using protos::MmCompactionIsolateMigratepagesFtraceEvent;
79using protos::MmCompactionKcompactdSleepFtraceEvent;
80using protos::MmCompactionKcompactdWakeFtraceEvent;
81using protos::MmCompactionMigratepagesFtraceEvent;
82using protos::MmCompactionSuitableFtraceEvent;
83using protos::MmCompactionTryToCompactPagesFtraceEvent;
84using protos::MmCompactionWakeupKcompactdFtraceEvent;
Hector Dearman85ef5362018-03-27 14:48:47 +010085using protos::Ext4AllocDaBlocksFtraceEvent;
86using protos::Ext4AllocateBlocksFtraceEvent;
87using protos::Ext4AllocateInodeFtraceEvent;
88using protos::Ext4BeginOrderedTruncateFtraceEvent;
89using protos::Ext4CollapseRangeFtraceEvent;
90using protos::Ext4DaReleaseSpaceFtraceEvent;
91using protos::Ext4DaReserveSpaceFtraceEvent;
92using protos::Ext4DaUpdateReserveSpaceFtraceEvent;
93using protos::Ext4DaWriteBeginFtraceEvent;
94using protos::Ext4DaWriteEndFtraceEvent;
95using protos::Ext4DaWritePagesFtraceEvent;
96using protos::Ext4DaWritePagesExtentFtraceEvent;
97using protos::Ext4DirectIOEnterFtraceEvent;
98using protos::Ext4DirectIOExitFtraceEvent;
99using protos::Ext4DiscardBlocksFtraceEvent;
100using protos::Ext4DiscardPreallocationsFtraceEvent;
101using protos::Ext4DropInodeFtraceEvent;
102using protos::Ext4EsCacheExtentFtraceEvent;
103using protos::Ext4EsFindDelayedExtentRangeEnterFtraceEvent;
104using protos::Ext4EsFindDelayedExtentRangeExitFtraceEvent;
105using protos::Ext4EsInsertExtentFtraceEvent;
106using protos::Ext4EsLookupExtentEnterFtraceEvent;
107using protos::Ext4EsLookupExtentExitFtraceEvent;
108using protos::Ext4EsRemoveExtentFtraceEvent;
109using protos::Ext4EsShrinkFtraceEvent;
110using protos::Ext4EsShrinkCountFtraceEvent;
111using protos::Ext4EsShrinkScanEnterFtraceEvent;
112using protos::Ext4EsShrinkScanExitFtraceEvent;
113using protos::Ext4EvictInodeFtraceEvent;
114using protos::Ext4ExtConvertToInitializedEnterFtraceEvent;
115using protos::Ext4ExtConvertToInitializedFastpathFtraceEvent;
116using protos::Ext4ExtHandleUnwrittenExtentsFtraceEvent;
117using protos::Ext4ExtInCacheFtraceEvent;
118using protos::Ext4ExtLoadExtentFtraceEvent;
119using protos::Ext4ExtMapBlocksEnterFtraceEvent;
120using protos::Ext4ExtMapBlocksExitFtraceEvent;
121using protos::Ext4ExtPutInCacheFtraceEvent;
122using protos::Ext4ExtRemoveSpaceFtraceEvent;
123using protos::Ext4ExtRemoveSpaceDoneFtraceEvent;
124using protos::Ext4ExtRmIdxFtraceEvent;
125using protos::Ext4ExtRmLeafFtraceEvent;
126using protos::Ext4ExtShowExtentFtraceEvent;
127using protos::Ext4FallocateEnterFtraceEvent;
128using protos::Ext4FallocateExitFtraceEvent;
129using protos::Ext4FindDelallocRangeFtraceEvent;
130using protos::Ext4ForgetFtraceEvent;
131using protos::Ext4FreeBlocksFtraceEvent;
132using protos::Ext4FreeInodeFtraceEvent;
133using protos::Ext4GetImpliedClusterAllocExitFtraceEvent;
134using protos::Ext4GetReservedClusterAllocFtraceEvent;
135using protos::Ext4IndMapBlocksEnterFtraceEvent;
136using protos::Ext4IndMapBlocksExitFtraceEvent;
137using protos::Ext4InsertRangeFtraceEvent;
138using protos::Ext4InvalidatepageFtraceEvent;
139using protos::Ext4JournalStartFtraceEvent;
140using protos::Ext4JournalStartReservedFtraceEvent;
141using protos::Ext4JournalledInvalidatepageFtraceEvent;
142using protos::Ext4JournalledWriteEndFtraceEvent;
143using protos::Ext4LoadInodeFtraceEvent;
144using protos::Ext4LoadInodeBitmapFtraceEvent;
145using protos::Ext4MarkInodeDirtyFtraceEvent;
146using protos::Ext4MbBitmapLoadFtraceEvent;
147using protos::Ext4MbBuddyBitmapLoadFtraceEvent;
148using protos::Ext4MbDiscardPreallocationsFtraceEvent;
149using protos::Ext4MbNewGroupPaFtraceEvent;
150using protos::Ext4MbNewInodePaFtraceEvent;
151using protos::Ext4MbReleaseGroupPaFtraceEvent;
152using protos::Ext4MbReleaseInodePaFtraceEvent;
153using protos::Ext4MballocAllocFtraceEvent;
154using protos::Ext4MballocDiscardFtraceEvent;
155using protos::Ext4MballocFreeFtraceEvent;
156using protos::Ext4MballocPreallocFtraceEvent;
157using protos::Ext4OtherInodeUpdateTimeFtraceEvent;
158using protos::Ext4PunchHoleFtraceEvent;
159using protos::Ext4ReadBlockBitmapLoadFtraceEvent;
160using protos::Ext4ReadpageFtraceEvent;
161using protos::Ext4ReleasepageFtraceEvent;
162using protos::Ext4RemoveBlocksFtraceEvent;
163using protos::Ext4RequestBlocksFtraceEvent;
164using protos::Ext4RequestInodeFtraceEvent;
165using protos::Ext4SyncFileEnterFtraceEvent;
166using protos::Ext4SyncFileExitFtraceEvent;
167using protos::Ext4SyncFsFtraceEvent;
168using protos::Ext4TrimAllFreeFtraceEvent;
169using protos::Ext4TrimExtentFtraceEvent;
170using protos::Ext4TruncateEnterFtraceEvent;
171using protos::Ext4TruncateExitFtraceEvent;
172using protos::Ext4UnlinkEnterFtraceEvent;
173using protos::Ext4UnlinkExitFtraceEvent;
174using protos::Ext4WriteBeginFtraceEvent;
175using protos::Ext4WriteEndFtraceEvent;
176using protos::Ext4WritepageFtraceEvent;
177using protos::Ext4WritepagesFtraceEvent;
178using protos::Ext4WritepagesResultFtraceEvent;
179using protos::Ext4ZeroRangeFtraceEvent;
180using protos::MmFilemapAddToPageCacheFtraceEvent;
181using protos::MmFilemapDeleteFromPageCacheFtraceEvent;
182using protos::PrintFtraceEvent;
183using protos::I2cReadFtraceEvent;
184using protos::I2cReplyFtraceEvent;
185using protos::I2cResultFtraceEvent;
186using protos::I2cWriteFtraceEvent;
187using protos::SmbusReadFtraceEvent;
188using protos::SmbusReplyFtraceEvent;
189using protos::SmbusResultFtraceEvent;
190using protos::SmbusWriteFtraceEvent;
191using protos::IpiEntryFtraceEvent;
192using protos::IpiExitFtraceEvent;
193using protos::IpiRaiseFtraceEvent;
194using protos::IrqHandlerEntryFtraceEvent;
195using protos::IrqHandlerExitFtraceEvent;
196using protos::SoftirqEntryFtraceEvent;
197using protos::SoftirqExitFtraceEvent;
198using protos::SoftirqRaiseFtraceEvent;
199using protos::LowmemoryKillFtraceEvent;
200using protos::MdpCmdKickoffFtraceEvent;
201using protos::MdpCmdPingpongDoneFtraceEvent;
202using protos::MdpCmdReadptrDoneFtraceEvent;
203using protos::MdpCmdReleaseBwFtraceEvent;
204using protos::MdpCmdWaitPingpongFtraceEvent;
205using protos::MdpCommitFtraceEvent;
206using protos::MdpCompareBwFtraceEvent;
207using protos::MdpMisrCrcFtraceEvent;
208using protos::MdpMixerUpdateFtraceEvent;
209using protos::MdpPerfPrefillCalcFtraceEvent;
210using protos::MdpPerfSetOtFtraceEvent;
211using protos::MdpPerfSetPanicLutsFtraceEvent;
212using protos::MdpPerfSetQosLutsFtraceEvent;
213using protos::MdpPerfSetWmLevelsFtraceEvent;
214using protos::MdpPerfUpdateBusFtraceEvent;
215using protos::MdpSsppChangeFtraceEvent;
216using protos::MdpSsppSetFtraceEvent;
217using protos::MdpTraceCounterFtraceEvent;
218using protos::MdpVideoUnderrunDoneFtraceEvent;
219using protos::RotatorBwAoAsContextFtraceEvent;
220using protos::TracingMarkWriteFtraceEvent;
221using protos::ClockDisableFtraceEvent;
222using protos::ClockEnableFtraceEvent;
223using protos::ClockSetRateFtraceEvent;
224using protos::CpuFrequencyFtraceEvent;
225using protos::CpuFrequencyLimitsFtraceEvent;
226using protos::CpuIdleFtraceEvent;
227using protos::SuspendResumeFtraceEvent;
228using protos::RegulatorDisableFtraceEvent;
229using protos::RegulatorDisableCompleteFtraceEvent;
230using protos::RegulatorEnableFtraceEvent;
231using protos::RegulatorEnableCompleteFtraceEvent;
232using protos::RegulatorEnableDelayFtraceEvent;
233using protos::RegulatorSetVoltageFtraceEvent;
234using protos::RegulatorSetVoltageCompleteFtraceEvent;
235using protos::SchedBlockedReasonFtraceEvent;
236using protos::SchedCpuHotplugFtraceEvent;
237using protos::SchedProcessExecFtraceEvent;
238using protos::SchedProcessExitFtraceEvent;
239using protos::SchedProcessForkFtraceEvent;
240using protos::SchedProcessFreeFtraceEvent;
241using protos::SchedProcessHangFtraceEvent;
242using protos::SchedProcessWaitFtraceEvent;
243using protos::SchedSwitchFtraceEvent;
244using protos::SchedWakeupFtraceEvent;
245using protos::SchedWakeupNewFtraceEvent;
246using protos::SchedWakingFtraceEvent;
247using protos::SyncPtFtraceEvent;
248using protos::SyncTimelineFtraceEvent;
249using protos::SyncWaitFtraceEvent;
250using protos::MmVmscanDirectReclaimBeginFtraceEvent;
251using protos::MmVmscanDirectReclaimEndFtraceEvent;
252using protos::MmVmscanKswapdSleepFtraceEvent;
253using protos::MmVmscanKswapdWakeFtraceEvent;
254using protos::WorkqueueActivateWorkFtraceEvent;
255using protos::WorkqueueExecuteEndFtraceEvent;
256using protos::WorkqueueExecuteStartFtraceEvent;
257using protos::WorkqueueQueueWorkFtraceEvent;
258using protos::TaskNewtaskFtraceEvent;
259using protos::TaskRenameFtraceEvent;
Florian Mayer1d8956a2018-04-10 13:59:19 +0100260using protos::F2fsDoSubmitBioFtraceEvent;
261using protos::F2fsEvictInodeFtraceEvent;
262using protos::F2fsFallocateFtraceEvent;
263using protos::F2fsGetDataBlockFtraceEvent;
264using protos::F2fsGetVictimFtraceEvent;
265using protos::F2fsIgetFtraceEvent;
266using protos::F2fsIgetExitFtraceEvent;
267using protos::F2fsNewInodeFtraceEvent;
268using protos::F2fsReadpageFtraceEvent;
269using protos::F2fsReserveNewBlockFtraceEvent;
270using protos::F2fsSetPageDirtyFtraceEvent;
271using protos::F2fsSubmitWritePageFtraceEvent;
272using protos::F2fsSyncFileEnterFtraceEvent;
273using protos::F2fsSyncFileExitFtraceEvent;
274using protos::F2fsSyncFsFtraceEvent;
275using protos::F2fsTruncateFtraceEvent;
276using protos::F2fsTruncateBlocksEnterFtraceEvent;
277using protos::F2fsTruncateBlocksExitFtraceEvent;
278using protos::F2fsTruncateDataBlocksRangeFtraceEvent;
279using protos::F2fsTruncateInodeBlocksEnterFtraceEvent;
280using protos::F2fsTruncateInodeBlocksExitFtraceEvent;
281using protos::F2fsTruncateNodeFtraceEvent;
282using protos::F2fsTruncateNodesEnterFtraceEvent;
283using protos::F2fsTruncateNodesExitFtraceEvent;
284using protos::F2fsTruncatePartialNodesFtraceEvent;
285using protos::F2fsUnlinkEnterFtraceEvent;
286using protos::F2fsUnlinkExitFtraceEvent;
287using protos::F2fsVmPageMkwriteFtraceEvent;
288using protos::F2fsWriteBeginFtraceEvent;
289using protos::F2fsWriteCheckpointFtraceEvent;
290using protos::F2fsWriteEndFtraceEvent;
Isabelle Taylor4ce49972018-10-19 18:53:15 +0100291using protos::AllocPagesIommuEndFtraceEvent;
292using protos::AllocPagesIommuFailFtraceEvent;
293using protos::AllocPagesIommuStartFtraceEvent;
294using protos::AllocPagesSysEndFtraceEvent;
295using protos::AllocPagesSysFailFtraceEvent;
296using protos::AllocPagesSysStartFtraceEvent;
297using protos::DmaAllocContiguousRetryFtraceEvent;
298using protos::IommuMapRangeFtraceEvent;
299using protos::IommuSecPtblMapRangeEndFtraceEvent;
300using protos::IommuSecPtblMapRangeStartFtraceEvent;
301using protos::IonAllocBufferEndFtraceEvent;
302using protos::IonAllocBufferFailFtraceEvent;
303using protos::IonAllocBufferFallbackFtraceEvent;
304using protos::IonAllocBufferStartFtraceEvent;
305using protos::IonCpAllocRetryFtraceEvent;
306using protos::IonCpSecureBufferEndFtraceEvent;
307using protos::IonCpSecureBufferStartFtraceEvent;
308using protos::IonHeapGrowFtraceEvent;
309using protos::IonHeapShrinkFtraceEvent;
310using protos::IonPrefetchingFtraceEvent;
311using protos::IonSecureCmaAddToPoolEndFtraceEvent;
312using protos::IonSecureCmaAddToPoolStartFtraceEvent;
313using protos::IonSecureCmaAllocateEndFtraceEvent;
314using protos::IonSecureCmaAllocateStartFtraceEvent;
315using protos::IonSecureCmaShrinkPoolEndFtraceEvent;
316using protos::IonSecureCmaShrinkPoolStartFtraceEvent;
317using protos::KfreeFtraceEvent;
318using protos::KmallocFtraceEvent;
319using protos::KmallocNodeFtraceEvent;
320using protos::KmemCacheAllocFtraceEvent;
321using protos::KmemCacheAllocNodeFtraceEvent;
322using protos::KmemCacheFreeFtraceEvent;
323using protos::MigratePagesEndFtraceEvent;
324using protos::MigratePagesStartFtraceEvent;
325using protos::MigrateRetryFtraceEvent;
326using protos::MmPageAllocFtraceEvent;
327using protos::MmPageAllocExtfragFtraceEvent;
328using protos::MmPageAllocZoneLockedFtraceEvent;
329using protos::MmPageFreeFtraceEvent;
330using protos::MmPageFreeBatchedFtraceEvent;
331using protos::MmPagePcpuDrainFtraceEvent;
332using protos::RssStatFtraceEvent;
Isabelle Taylor8d49fa02018-10-26 13:23:00 +0100333using protos::BinderTransactionAllocBufFtraceEvent;
334using protos::FenceDestroyFtraceEvent;
335using protos::FenceEnableSignalFtraceEvent;
336using protos::FenceInitFtraceEvent;
337using protos::FenceSignaledFtraceEvent;
338using protos::ClkDisableFtraceEvent;
339using protos::ClkEnableFtraceEvent;
340using protos::ClkSetRateFtraceEvent;
Isabelle Taylorc8c11202018-11-05 11:36:22 +0000341using protos::SignalDeliverFtraceEvent;
342using protos::SignalGenerateFtraceEvent;
Hector Dearman85ef5362018-03-27 14:48:47 +0100343
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100344const char* GetSchedSwitchFlag(int64_t state) {
Hector Dearman85ef5362018-03-27 14:48:47 +0100345 state &= 511;
346 if (state & 1)
347 return "S";
348 if (state & 2)
349 return "D";
350 if (state & 4)
351 return "T";
352 if (state & 8)
353 return "t";
354 if (state & 16)
355 return "Z";
356 if (state & 32)
357 return "X";
358 if (state & 64)
359 return "x";
360 if (state & 128)
361 return "W";
362 return "R";
363}
364
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100365const char* GetExt4HintFlag(int64_t state) {
Hector Dearman85ef5362018-03-27 14:48:47 +0100366 if (state & 0x0001)
367 return "HINT_MERGE";
368 if (state & 0x0002)
369 return "HINT_RESV";
370 if (state & 0x0004)
371 return "HINT_MDATA";
372 if (state & 0x0008)
373 return "HINT_FIRST";
374 if (state & 0x0010)
375 return "HINT_BEST";
376 if (state & 0x0020)
377 return "HINT_DATA";
378 if (state & 0x0040)
379 return "HINT_NOPREALLOC";
380 if (state & 0x0080)
381 return "HINT_GRP_ALLOCE";
382 if (state & 0x0100)
383 return "HINT_GOAL_ONLY";
384 if (state & 0x0200)
385 return "HINT_DATA";
386 if (state & 0x0400)
387 return "HINT_NOPREALLOC";
388 if (state & 0x0800)
389 return "HINT_GRP_ALLOCE";
390 if (state & 0x2000)
391 return "HINT_GOAL_ONLY";
392 return "";
393}
394
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100395const char* GetExt4FreeBlocksFlag(int64_t state) {
Hector Dearman85ef5362018-03-27 14:48:47 +0100396 if (state & 0x0001)
397 return "METADATA";
398 if (state & 0x0002)
399 return "FORGET";
400 if (state & 0x0004)
401 return "VALIDATED";
402 if (state & 0x0008)
403 return "NO_QUOTA";
404 if (state & 0x0010)
405 return "1ST_CLUSTER";
406 if (state & 0x0020)
407 return "LAST_CLUSTER";
408 return "";
409}
410
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100411const char* GetExt4ModeFlag(int64_t state) {
Hector Dearman85ef5362018-03-27 14:48:47 +0100412 if (state & 0x01)
413 return "KEEP_SIZE";
414 if (state & 0x02)
415 return "PUNCH_HOLE";
416 if (state & 0x04)
417 return "NO_HIDE_STALE";
418 if (state & 0x08)
419 return "COLLAPSE_RANGE";
420 if (state & 0x10)
421 return "ZERO_RANGE";
422 return "";
423}
424
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100425const char* GetExt4ExtFlag(int64_t state) {
Hector Dearman85ef5362018-03-27 14:48:47 +0100426 if (state & 0x0001)
427 return "CREATE";
428 if (state & 0x0002)
429 return "UNWRIT";
430 if (state & 0x0004)
431 return "DEALLOC";
432 if (state & 0x0008)
433 return "PRE_IO";
434 if (state & 0x0010)
435 return "CONVERT";
436 if (state & 0x0020)
437 return "METADATA_NOFAIL";
438 if (state & 0x0040)
439 return "NO_NORMALIZE";
440 if (state & 0x0080)
441 return "KEEP_SIZE";
442 if (state & 0x0100)
443 return "NO_LOCK";
444 return "";
445}
446
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100447int BlkMaj(uint64_t n) {
448 return static_cast<int>(((n >> 32) & 0xfffff000) | ((n >> 8) & 0xfff));
449}
450
451int BlkMin(uint64_t n) {
452 return static_cast<int>(((n >> 12) & 0xffffff00) | (n & 0xff));
453}
454
Hector Dearman85ef5362018-03-27 14:48:47 +0100455constexpr const char* MmCompactionRetArray[] = {
456 "deferred", "skipped", "continue", "partial",
457 "complete", "no_suitable_page", "not_suitable_zone", "contended"};
458
459constexpr const char* MmCompactionSuitableArray[] = {"DMA", "Normal",
460 "Movable"};
461
462constexpr const char* SoftirqArray[] = {
463 "HI", "TIMER", "NET_TX", "NET_RX", "BLOCK",
464 "BLOCK_IOPOLL", "TASKLET", "SCHED", "HRTIMER", "RCU"};
465
466std::string FormatSchedSwitch(const SchedSwitchFtraceEvent& sched_switch) {
467 char line[2048];
468 sprintf(line,
469 "sched_switch: prev_comm=%s "
470 "prev_pid=%d prev_prio=%d prev_state=%s ==> next_comm=%s next_pid=%d "
Primiano Tucci45c9b182018-03-29 14:10:51 +0100471 "next_prio=%d",
Hector Dearman85ef5362018-03-27 14:48:47 +0100472 sched_switch.prev_comm().c_str(), sched_switch.prev_pid(),
473 sched_switch.prev_prio(),
474 GetSchedSwitchFlag(sched_switch.prev_state()),
475 sched_switch.next_comm().c_str(), sched_switch.next_pid(),
476 sched_switch.next_prio());
477 return std::string(line);
478}
479
480std::string FormatSchedWakeup(const SchedWakeupFtraceEvent& sched_wakeup) {
481 char line[2048];
482 sprintf(line,
483 "sched_wakeup: comm=%s "
Primiano Tucci45c9b182018-03-29 14:10:51 +0100484 "pid=%d prio=%d success=%d target_cpu=%03d",
Hector Dearman85ef5362018-03-27 14:48:47 +0100485 sched_wakeup.comm().c_str(), sched_wakeup.pid(), sched_wakeup.prio(),
486 sched_wakeup.success(), sched_wakeup.target_cpu());
487 return std::string(line);
488}
489
490std::string FormatSchedBlockedReason(
491 const SchedBlockedReasonFtraceEvent& event) {
492 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100493 sprintf(line, "sched_blocked_reason: pid=%d iowait=%d caller=%llxS",
Hector Dearman85ef5362018-03-27 14:48:47 +0100494 event.pid(), event.io_wait(), event.caller());
495 return std::string(line);
496}
497
498std::string FormatPrint(const PrintFtraceEvent& print) {
Primiano Tucci45c9b182018-03-29 14:10:51 +0100499 std::string line = "tracing_mark_write: ";
500 size_t dst = line.size();
501 line.resize(2048);
502 const std::string& msg = print.buf();
503
Hector Dearman85ef5362018-03-27 14:48:47 +0100504 // Remove any newlines in the message. It's not entirely clear what the right
505 // behaviour is here. Maybe we should escape them instead?
Primiano Tucci45c9b182018-03-29 14:10:51 +0100506 for (size_t src = 0; src < msg.size() && dst < line.size() - 1; src++) {
507 char c = msg[src];
508 if (c != '\n')
509 line[dst++] = c;
510 }
511 line.resize(dst);
512 return line;
Hector Dearman85ef5362018-03-27 14:48:47 +0100513}
514
515std::string FormatCpuFrequency(const CpuFrequencyFtraceEvent& event) {
516 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100517 sprintf(line, "cpu_frequency: state=%" PRIu32 " cpu_id=%" PRIu32,
Hector Dearman85ef5362018-03-27 14:48:47 +0100518 event.state(), event.cpu_id());
519 return std::string(line);
520}
521
522std::string FormatCpuFrequencyLimits(
523 const CpuFrequencyLimitsFtraceEvent& event) {
524 char line[2048];
525 sprintf(line,
526 "cpu_frequency_limits: min_freq=%" PRIu32 "max_freq=%" PRIu32
Primiano Tucci45c9b182018-03-29 14:10:51 +0100527 " cpu_id=%" PRIu32,
Hector Dearman85ef5362018-03-27 14:48:47 +0100528 event.min_freq(), event.max_freq(), event.cpu_id());
529 return std::string(line);
530}
531
532std::string FormatCpuIdle(const CpuIdleFtraceEvent& event) {
533 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100534 sprintf(line, "cpu_idle: state=%" PRIu32 " cpu_id=%" PRIu32, event.state(),
535 event.cpu_id());
Hector Dearman85ef5362018-03-27 14:48:47 +0100536 return std::string(line);
537}
538
539std::string FormatClockSetRate(const ClockSetRateFtraceEvent& event) {
540 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100541 sprintf(line, "clock_set_rate: %s state=%llu cpu_id=%llu",
Hector Dearman85ef5362018-03-27 14:48:47 +0100542 event.name().empty() ? "todo" : event.name().c_str(), event.state(),
543 event.cpu_id());
544 return std::string(line);
545}
546
547std::string FormatClockEnable(const ClockEnableFtraceEvent& event) {
548 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100549 sprintf(line, "clock_enable: %s state=%llu cpu_id=%llu",
Hector Dearman85ef5362018-03-27 14:48:47 +0100550 event.name().empty() ? "todo" : event.name().c_str(), event.state(),
551 event.cpu_id());
552 return std::string(line);
553}
554
555std::string FormatClockDisable(const ClockDisableFtraceEvent& event) {
556 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100557 sprintf(line, "clock_disable: %s state=%llu cpu_id=%llu",
Hector Dearman85ef5362018-03-27 14:48:47 +0100558 event.name().empty() ? "todo" : event.name().c_str(), event.state(),
559 event.cpu_id());
560 return std::string(line);
561}
562
563std::string FormatTracingMarkWrite(const TracingMarkWriteFtraceEvent& event) {
564 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100565 sprintf(line, "tracing_mark_write: %s|%d|%s", event.trace_begin() ? "B" : "E",
566 event.pid(), event.trace_name().c_str());
Hector Dearman85ef5362018-03-27 14:48:47 +0100567 return std::string(line);
568}
569
570std::string FormatBinderLocked(const BinderLockedFtraceEvent& event) {
571 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100572 sprintf(line, "binder_locked: tag=%s", event.tag().c_str());
Hector Dearman85ef5362018-03-27 14:48:47 +0100573 return std::string(line);
574}
575
576std::string FormatBinderUnlock(const BinderUnlockFtraceEvent& event) {
577 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100578 sprintf(line, "binder_unlock: tag=%s", event.tag().c_str());
Hector Dearman85ef5362018-03-27 14:48:47 +0100579 return std::string(line);
580}
581
582std::string FormatBinderLock(const BinderLockFtraceEvent& event) {
583 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100584 sprintf(line, "binder_lock: tag=%s", event.tag().c_str());
Hector Dearman85ef5362018-03-27 14:48:47 +0100585 return std::string(line);
586}
587
588std::string FormatBinderTransaction(const BinderTransactionFtraceEvent& event) {
589 char line[2048];
590 sprintf(line,
591 "binder_transaction: transaction=%d dest_node=%d dest_proc=%d "
Primiano Tucci45c9b182018-03-29 14:10:51 +0100592 "dest_thread=%d reply=%d flags=0x%x code=0x%x",
Hector Dearman85ef5362018-03-27 14:48:47 +0100593 event.debug_id(), event.target_node(), event.to_proc(),
594 event.to_thread(), event.reply(), event.flags(), event.code());
595 return std::string(line);
596}
597
598std::string FormatBinderTransactionReceived(
599 const BinderTransactionReceivedFtraceEvent& event) {
600 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100601 sprintf(line, "binder_transaction_received: transaction=%d",
Hector Dearman85ef5362018-03-27 14:48:47 +0100602 event.debug_id());
603 return std::string(line);
604}
605
Isabelle Taylor8d49fa02018-10-26 13:23:00 +0100606std::string FormatBinderTransactionAllocBuf(
607 const BinderTransactionAllocBufFtraceEvent& event) {
608 char line[2048];
609 sprintf(line,
610 "binder_transaction_alloc_buf: transaction=%d data_size=%zd "
611 "offsets_size=%zd",
612 event.debug_id(), event.data_size(), event.offsets_size());
613 return std::string(line);
614}
615
Hector Dearman85ef5362018-03-27 14:48:47 +0100616std::string FormatExt4SyncFileEnter(const Ext4SyncFileEnterFtraceEvent& event) {
617 char line[2048];
618 sprintf(line,
Primiano Tucci45c9b182018-03-29 14:10:51 +0100619 "ext4_sync_file_enter: dev %d,%d ino %lu parent %lu datasync %d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100620 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.parent(),
621 event.datasync());
Hector Dearman85ef5362018-03-27 14:48:47 +0100622 return std::string(line);
623}
624
625std::string FormatExt4SyncFileExit(const Ext4SyncFileExitFtraceEvent& event) {
626 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100627 sprintf(line, "ext4_sync_file_exit: dev %d,%d ino %lu ret %d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100628 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.ret());
Hector Dearman85ef5362018-03-27 14:48:47 +0100629 return std::string(line);
630}
631
632std::string FormatExt4DaWriteBegin(const Ext4DaWriteBeginFtraceEvent& event) {
633 char line[2048];
634 sprintf(line,
Primiano Tucci45c9b182018-03-29 14:10:51 +0100635 "ext4_da_write_begin: dev %d,%d ino %lu pos %lld len %u flags %u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100636 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.pos(),
637 event.len(), event.flags());
Hector Dearman85ef5362018-03-27 14:48:47 +0100638 return std::string(line);
639}
640
641std::string FormatExt4DaWriteEnd(const Ext4DaWriteEndFtraceEvent& event) {
642 char line[2048];
643 sprintf(line,
Primiano Tucci45c9b182018-03-29 14:10:51 +0100644 "ext4_da_write_end: dev %d,%d ino %lu pos %lld len %u copied %u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100645 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.pos(),
646 event.len(), event.copied());
Hector Dearman85ef5362018-03-27 14:48:47 +0100647 return std::string(line);
648}
649
650std::string FormatBlockRqIssue(const BlockRqIssueFtraceEvent& event) {
651 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100652 sprintf(line, "block_rq_issue: %d,%d %s %u (%s) %llu + %u [%s]",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +0100653 BlkMaj(event.dev()), BlkMin(event.dev()), event.rwbs().c_str(),
Hector Dearman85ef5362018-03-27 14:48:47 +0100654 event.bytes(), event.cmd().c_str(),
Primiano Tucci21c19d82018-03-29 12:35:08 +0100655 static_cast<unsigned long long>(event.sector()), event.nr_sector(),
Hector Dearman85ef5362018-03-27 14:48:47 +0100656 event.comm().c_str());
657 return std::string(line);
658}
659
660std::string FormatI2cRead(const I2cReadFtraceEvent& event) {
661 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100662 sprintf(line, "i2c_read: i2c-%d #%u a=%03x f=%04x l=%u", event.adapter_nr(),
663 event.msg_nr(), event.addr(), event.flags(), event.len());
Hector Dearman85ef5362018-03-27 14:48:47 +0100664 return std::string(line);
665}
666
667std::string FormatI2cResult(const I2cResultFtraceEvent& event) {
668 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100669 sprintf(line, "i2c_result: i2c-%d n=%u ret=%d", event.adapter_nr(),
Hector Dearman85ef5362018-03-27 14:48:47 +0100670 event.nr_msgs(), event.ret());
671 return std::string(line);
672}
673
674std::string FormatIrqHandlerEntry(const IrqHandlerEntryFtraceEvent& event) {
675 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100676 sprintf(line, "irq_handler_entry: irq=%d name=%s", event.irq(),
Hector Dearman85ef5362018-03-27 14:48:47 +0100677 event.name().c_str());
678 return std::string(line);
679}
680
681std::string FormatIrqHandlerExit(const IrqHandlerExitFtraceEvent& event) {
682 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100683 sprintf(line, "irq_handler_exit: irq=%d ret=%s", event.irq(),
Hector Dearman85ef5362018-03-27 14:48:47 +0100684 event.ret() ? "handled" : "unhandled");
685 return std::string(line);
686}
687
688std::string FormatMmVmscanKswapdWake(
689 const MmVmscanKswapdWakeFtraceEvent& event) {
690 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100691 sprintf(line, "mm_vmscan_kswapd_wake: nid=%d order=%d", event.nid(),
Hector Dearman85ef5362018-03-27 14:48:47 +0100692 event.order());
693 return std::string(line);
694}
695
696std::string FormatMmVmscanKswapdSleep(
697 const MmVmscanKswapdSleepFtraceEvent& event) {
698 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100699 sprintf(line, "mm_vmscan_kswapd_sleep: nid=%d", event.nid());
Hector Dearman85ef5362018-03-27 14:48:47 +0100700 return std::string(line);
701}
702
703std::string FormatRegulatorEnable(const RegulatorEnableFtraceEvent& event) {
704 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100705 sprintf(line, "regulator_enable: name=%s", event.name().c_str());
Hector Dearman85ef5362018-03-27 14:48:47 +0100706 return std::string(line);
707}
708
709std::string FormatRegulatorEnableDelay(
710 const RegulatorEnableDelayFtraceEvent& event) {
711 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100712 sprintf(line, "regulator_enable_delay: name=%s", event.name().c_str());
Hector Dearman85ef5362018-03-27 14:48:47 +0100713 return std::string(line);
714}
715
716std::string FormatRegulatorEnableComplete(
717 const RegulatorEnableCompleteFtraceEvent& event) {
718 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100719 sprintf(line, "regulator_enable_complete: name=%s", event.name().c_str());
Hector Dearman85ef5362018-03-27 14:48:47 +0100720 return std::string(line);
721}
722
723std::string FormatRegulatorDisable(const RegulatorDisableFtraceEvent& event) {
724 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100725 sprintf(line, "regulator_disable: name=%s", event.name().c_str());
Hector Dearman85ef5362018-03-27 14:48:47 +0100726 return std::string(line);
727}
728
729std::string FormatRegulatorDisableComplete(
730 const RegulatorDisableCompleteFtraceEvent& event) {
731 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100732 sprintf(line, "regulator_disable_complete: name=%s", event.name().c_str());
Hector Dearman85ef5362018-03-27 14:48:47 +0100733 return std::string(line);
734}
735
736std::string FormatRegulatorSetVoltage(
737 const RegulatorSetVoltageFtraceEvent& event) {
738 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100739 sprintf(line, "regulator_set_voltage: name=%s (%d-%d)", event.name().c_str(),
740 event.min(), event.max());
Hector Dearman85ef5362018-03-27 14:48:47 +0100741 return std::string(line);
742}
743
744std::string FormatRegulatorSetVoltageComplete(
745 const RegulatorSetVoltageCompleteFtraceEvent& event) {
746 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100747 sprintf(line, "regulator_set_voltage_complete: name=%s, val=%u",
Hector Dearman85ef5362018-03-27 14:48:47 +0100748 event.name().c_str(), event.val());
749 return std::string(line);
750}
751
752std::string FormatSchedCpuHotplug(const SchedCpuHotplugFtraceEvent& event) {
753 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100754 sprintf(line, "sched_cpu_hotplug: cpu %d %s error=%d", event.affected_cpu(),
755 event.status() ? "online" : "offline", event.error());
Hector Dearman85ef5362018-03-27 14:48:47 +0100756 return std::string(line);
757}
758
759std::string FormatSyncTimeline(const SyncTimelineFtraceEvent& event) {
760 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100761 sprintf(line, "sync_timeline: name=%s value=%s", event.name().c_str(),
Hector Dearman85ef5362018-03-27 14:48:47 +0100762 event.value().c_str());
763 return std::string(line);
764}
765
766std::string FormatSyncWait(const SyncWaitFtraceEvent& event) {
767 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100768 sprintf(line, "sync_wait: %s name=%s state=%d",
Hector Dearman85ef5362018-03-27 14:48:47 +0100769 event.begin() ? "begin" : "end", event.name().c_str(),
770 event.status());
771 return std::string(line);
772}
773
774std::string FormatSyncPt(const SyncPtFtraceEvent& event) {
775 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100776 sprintf(line, "sync_pt: name=%s value=%s", event.timeline().c_str(),
Hector Dearman85ef5362018-03-27 14:48:47 +0100777 event.value().c_str());
778 return std::string(line);
779}
780
781std::string FormatSoftirqRaise(const SoftirqRaiseFtraceEvent& event) {
782 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100783 sprintf(line, "softirq_raise: vec=%u [action=%s]", event.vec(),
Hector Dearman85ef5362018-03-27 14:48:47 +0100784 SoftirqArray[event.vec()]);
785 return std::string(line);
786}
787
788std::string FormatSoftirqEntry(const SoftirqEntryFtraceEvent& event) {
789 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100790 sprintf(line, "softirq_entry: vec=%u [action=%s]", event.vec(),
Hector Dearman85ef5362018-03-27 14:48:47 +0100791 SoftirqArray[event.vec()]);
792 return std::string(line);
793}
794
795std::string FormatSoftirqExit(const SoftirqExitFtraceEvent& event) {
796 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100797 sprintf(line, "softirq_exit: vec=%u [action=%s]", event.vec(),
Hector Dearman85ef5362018-03-27 14:48:47 +0100798 SoftirqArray[event.vec()]);
799 return std::string(line);
800}
801
802std::string FormatI2cWrite(const I2cWriteFtraceEvent& event) {
803 char line[2048];
804 // TODO(hjd): Check event.buf().
Primiano Tucci45c9b182018-03-29 14:10:51 +0100805 sprintf(line, "i2c_write: i2c-%d #%u a=%03x f=%04x l=%u", event.adapter_nr(),
806 event.msg_nr(), event.addr(), event.flags(), event.len());
Hector Dearman85ef5362018-03-27 14:48:47 +0100807 return std::string(line);
808}
809
810std::string FormatI2cReply(const I2cReplyFtraceEvent& event) {
811 char line[2048];
812 // TODO(hjd): Check event.buf().
Primiano Tucci45c9b182018-03-29 14:10:51 +0100813 sprintf(line, "i2c_reply: i2c-%d #%u a=%03x f=%04x l=%u", event.adapter_nr(),
814 event.msg_nr(), event.addr(), event.flags(), event.len());
Hector Dearman85ef5362018-03-27 14:48:47 +0100815 return std::string(line);
816}
817
Hector Dearman85ef5362018-03-27 14:48:47 +0100818std::string FormatMmVmscanDirectReclaimBegin(
819 const MmVmscanDirectReclaimBeginFtraceEvent& event) {
820 char line[2048];
Isabelle Taylor4ce49972018-10-19 18:53:15 +0100821 // TODO(b/117966147): Translate binary to gfp_flag
822 sprintf(
823 line,
824 "mm_vmscan_direct_reclaim_begin: order=%d may_writepage=%d gfp_flags=%d",
825 event.order(), event.may_writepage(), event.gfp_flags());
Hector Dearman85ef5362018-03-27 14:48:47 +0100826 return std::string(line);
827}
828
829std::string FormatMmVmscanDirectReclaimEnd(
830 const MmVmscanDirectReclaimEndFtraceEvent& event) {
831 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100832 sprintf(line, "mm_vmscan_direct_reclaim_end: nr_reclaimed=%llu",
Hector Dearman85ef5362018-03-27 14:48:47 +0100833 event.nr_reclaimed());
834 return std::string(line);
835}
836
837std::string FormatLowmemoryKill(const LowmemoryKillFtraceEvent& event) {
838 char line[2048];
839 sprintf(line,
840 "lowmemory_kill: %s (%d), page cache %lldkB (limit %lldkB), free "
Primiano Tucci45c9b182018-03-29 14:10:51 +0100841 "%lldKb",
Hector Dearman85ef5362018-03-27 14:48:47 +0100842 event.comm().c_str(), event.pid(), event.pagecache_size(),
843 event.pagecache_limit(), event.free());
844 return std::string(line);
845}
846
847std::string FormatWorkqueueExecuteStart(
848 const WorkqueueExecuteStartFtraceEvent& event) {
849 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100850 sprintf(line, "workqueue_execute_start: work struct %llx: function %llxf",
Hector Dearman85ef5362018-03-27 14:48:47 +0100851 event.work(), event.function());
852 return std::string(line);
853}
854
855std::string FormatWorkqueueExecuteEnd(
856 const WorkqueueExecuteEndFtraceEvent& event) {
857 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100858 sprintf(line, "workqueue_execute_end: work struct %llx", event.work());
Hector Dearman85ef5362018-03-27 14:48:47 +0100859 return std::string(line);
860}
861
862std::string FormatWorkqueueQueueWork(
863 const WorkqueueQueueWorkFtraceEvent& event) {
864 char line[2048];
865 sprintf(
866 line,
867 "workqueue_queue_work: work struct=%llx function=%llxf workqueue=%llx "
Primiano Tucci45c9b182018-03-29 14:10:51 +0100868 "req_cpu=%u cpu=%u",
Hector Dearman85ef5362018-03-27 14:48:47 +0100869 event.work(), event.function(), event.workqueue(), event.req_cpu(),
870 event.cpu());
871 return std::string(line);
872}
873
874std::string FormatWorkqueueActivateWork(
875 const WorkqueueActivateWorkFtraceEvent& event) {
876 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100877 sprintf(line, "workqueue_activate_work: work struct %llx", event.work());
Hector Dearman85ef5362018-03-27 14:48:47 +0100878 return std::string(line);
879}
880
881std::string FormatMmCompactionBegin(const MmCompactionBeginFtraceEvent& event) {
882 char line[2048];
883 sprintf(line,
884 "mm_compaction_begin: zone_start=0x%llx migrate_pfn=0x%llx "
Primiano Tucci45c9b182018-03-29 14:10:51 +0100885 "free_pfn=0x%llx zone_end=0x%llx, mode=%s",
Hector Dearman85ef5362018-03-27 14:48:47 +0100886 event.zone_start(), event.migrate_pfn(), event.free_pfn(),
887 event.zone_end(), event.sync() ? "sync" : "async");
888 return std::string(line);
889}
890
891std::string FormatMmCompactionDeferCompaction(
892 const MmCompactionDeferCompactionFtraceEvent& event) {
893 char line[2048];
894 sprintf(line,
895 "mm_compaction_defer_compaction: node=%d zone=%-8s order=%d "
Primiano Tucci45c9b182018-03-29 14:10:51 +0100896 "order_failed=%d consider=%u limit=%lu",
Hector Dearman85ef5362018-03-27 14:48:47 +0100897 event.nid(), MmCompactionSuitableArray[event.idx()], event.order(),
898 event.order_failed(), event.considered(), 1UL << event.defer_shift());
899 return std::string(line);
900}
901
902std::string FormatMmCompactionDeferred(
903 const MmCompactionDeferredFtraceEvent& event) {
904 char line[2048];
905 sprintf(line,
906 "mm_compaction_deferred: node=%d zone=%-8s order=%d order_failed=%d "
Primiano Tucci45c9b182018-03-29 14:10:51 +0100907 "consider=%u limit=%lu",
Hector Dearman85ef5362018-03-27 14:48:47 +0100908 event.nid(), MmCompactionSuitableArray[event.idx()], event.order(),
909 event.order_failed(), event.considered(), 1UL << event.defer_shift());
910 return std::string(line);
911}
912
913std::string FormatMmCompactionDeferReset(
914 const MmCompactionDeferResetFtraceEvent& event) {
915 char line[2048];
916 sprintf(line,
917 "mm_compaction_defer_reset: node=%d zone=%-8s order=%d "
Primiano Tucci45c9b182018-03-29 14:10:51 +0100918 "order_failed=%d consider=%u limit=%lu",
Hector Dearman85ef5362018-03-27 14:48:47 +0100919 event.nid(), MmCompactionSuitableArray[event.idx()], event.order(),
920 event.order_failed(), event.considered(), 1UL << event.defer_shift());
921 return std::string(line);
922}
923
924std::string FormatMmCompactionEnd(const MmCompactionEndFtraceEvent& event) {
925 char line[2048];
926 sprintf(line,
927 "mm_compaction_end: zone_start=0x%llx migrate_pfn=0x%llx "
Primiano Tucci45c9b182018-03-29 14:10:51 +0100928 "free_pfn=0x%llx zone_end=0x%llx, mode=%s status=%s",
Hector Dearman85ef5362018-03-27 14:48:47 +0100929 event.zone_start(), event.migrate_pfn(), event.free_pfn(),
930 event.zone_end(), event.sync() ? "sync" : "aysnc",
931 MmCompactionRetArray[event.status()]);
932 return std::string(line);
933}
934
935std::string FormatMmCompactionFinished(
936 const MmCompactionFinishedFtraceEvent& event) {
937 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100938 sprintf(line, "mm_compaction_finished: node=%d zone=%-8s order=%d ret=%s",
Hector Dearman85ef5362018-03-27 14:48:47 +0100939 event.nid(), MmCompactionSuitableArray[event.idx()], event.order(),
940 MmCompactionRetArray[event.ret()]);
941 return std::string(line);
942}
943
944std::string FormatMmCompactionIsolateFreepages(
945 const MmCompactionIsolateFreepagesFtraceEvent& event) {
946 char line[2048];
947 sprintf(line,
948 "mm_compaction_isolate_freepages: range=(0x%llx ~ 0x%llx) "
Primiano Tucci45c9b182018-03-29 14:10:51 +0100949 "nr_scanned=%llu nr_taken=%llu",
Hector Dearman85ef5362018-03-27 14:48:47 +0100950 event.start_pfn(), event.end_pfn(), event.nr_scanned(),
951 event.nr_taken());
952 return std::string(line);
953}
954
955std::string FormatMmCompactionIsolateMigratepages(
956 const MmCompactionIsolateMigratepagesFtraceEvent& event) {
957 char line[2048];
958 sprintf(line,
959 "mm_compaction_isolate_migratepages: range=(0x%llx ~ 0x%llx) "
Primiano Tucci45c9b182018-03-29 14:10:51 +0100960 "nr_scanned=%llu nr_taken=%llu",
Hector Dearman85ef5362018-03-27 14:48:47 +0100961 event.start_pfn(), event.end_pfn(), event.nr_scanned(),
962 event.nr_taken());
963 return std::string(line);
964}
965
966std::string FormatMmCompactionKcompactdSleep(
967 const MmCompactionKcompactdSleepFtraceEvent& event) {
968 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100969 sprintf(line, "mm_compaction_kcompactd_sleep: nid=%d", event.nid());
Hector Dearman85ef5362018-03-27 14:48:47 +0100970 return std::string(line);
971}
972
973std::string FormatMmCompactionKcompactdWake(
974 const MmCompactionKcompactdWakeFtraceEvent& event) {
975 char line[2048];
976 sprintf(line,
Primiano Tucci45c9b182018-03-29 14:10:51 +0100977 "mm_compaction_kcompactd_wake: nid=%d order=%d classzone_idx=%-8s",
Hector Dearman85ef5362018-03-27 14:48:47 +0100978 event.nid(), event.order(),
979 MmCompactionSuitableArray[event.classzone_idx()]);
980 return std::string(line);
981}
982
983std::string FormatMmCompactionMigratepages(
984 const MmCompactionMigratepagesFtraceEvent& event) {
985 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100986 sprintf(line, "mm_compaction_migratepages: nr_migrated=%llu nr_failed=%llu",
Hector Dearman85ef5362018-03-27 14:48:47 +0100987 event.nr_migrated(), event.nr_failed());
988 return std::string(line);
989}
990
991std::string FormatMmCompactionSuitable(
992 const MmCompactionSuitableFtraceEvent& event) {
993 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +0100994 sprintf(line, "mm_compaction_suitable: node=%d zone=%-8s order=%d ret=%s",
Hector Dearman85ef5362018-03-27 14:48:47 +0100995 event.nid(), MmCompactionSuitableArray[event.idx()], event.order(),
996 MmCompactionRetArray[event.ret()]);
997 return std::string(line);
998}
999
1000std::string FormatMmCompactionTryToCompactPages(
1001 const MmCompactionTryToCompactPagesFtraceEvent& event) {
1002 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001003 sprintf(line,
1004 "mm_compaction_try_to_compact_pages: order=%d gfp_mask=0x%x mode=%d",
1005 event.order(), event.gfp_mask(),
1006 event.mode()); // convert to int?
Hector Dearman85ef5362018-03-27 14:48:47 +01001007 return std::string(line);
1008}
1009
1010std::string FormatMmCompactionWakeupKcompactd(
1011 const MmCompactionWakeupKcompactdFtraceEvent& event) {
1012 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001013 sprintf(line,
1014 "mm_compaction_wakeup_kcompactd: nid=%d order=%d classzone_idx=%-8s",
1015 event.nid(), event.order(),
1016 MmCompactionSuitableArray[event.classzone_idx()]);
Hector Dearman85ef5362018-03-27 14:48:47 +01001017 return std::string(line);
1018}
1019
1020std::string FormatSuspendResume(const SuspendResumeFtraceEvent& event) {
1021 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001022 sprintf(line, "suspend_resume: %s[%u] %s", event.action().c_str(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001023 event.val(), event.start() ? "begin" : "end");
1024 return std::string(line);
1025}
1026
1027std::string FormatSchedWakeupNew(const SchedWakeupNewFtraceEvent& event) {
1028 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001029 sprintf(line, "sched_wakeup_new: comm=%s pid=%d prio=%d target_cpu=%03d",
Hector Dearman85ef5362018-03-27 14:48:47 +01001030 event.comm().c_str(), event.pid(), event.prio(), event.target_cpu());
1031 return std::string(line);
1032}
1033
1034std::string FormatSchedProcessExec(const SchedProcessExecFtraceEvent& event) {
1035 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001036 sprintf(line, "sched_process_exec: filename=%s pid=%d old_pid=%d",
Hector Dearman85ef5362018-03-27 14:48:47 +01001037 event.filename().c_str(), event.pid(), event.old_pid());
1038 return std::string(line);
1039}
1040std::string FormatSchedProcessExit(const SchedProcessExitFtraceEvent& event) {
1041 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001042 sprintf(line, "sched_process_exit: comm=%s pid=%d tgid=%d prio=%d",
Hector Dearman85ef5362018-03-27 14:48:47 +01001043 event.comm().c_str(), event.pid(), event.tgid(), event.prio());
1044 return std::string(line);
1045}
1046std::string FormatSchedProcessFork(const SchedProcessForkFtraceEvent& event) {
1047 char line[2048];
1048 sprintf(line,
1049 "sched_process_fork: parent_comm=%s parent_pid=%d child_comm=%s "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001050 "child_pid=%d",
Hector Dearman85ef5362018-03-27 14:48:47 +01001051 event.parent_comm().c_str(), event.parent_pid(),
1052 event.child_comm().c_str(), event.child_pid());
1053 return std::string(line);
1054}
1055std::string FormatSchedProcessFree(const SchedProcessFreeFtraceEvent& event) {
1056 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001057 sprintf(line, "sched_process_free: comm=%s pid=%d prio=%d",
Hector Dearman85ef5362018-03-27 14:48:47 +01001058 event.comm().c_str(), event.pid(), event.prio());
1059 return std::string(line);
1060}
1061std::string FormatSchedProcessHang(const SchedProcessHangFtraceEvent& event) {
1062 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001063 sprintf(line, "sched_process_hang: comm=%s pid=%d", event.comm().c_str(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001064 event.pid());
1065 return std::string(line);
1066}
1067
1068std::string FormatSchedProcessWait(const SchedProcessWaitFtraceEvent& event) {
1069 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001070 sprintf(line, "sched_process_wait: comm=%s pid=%d", event.comm().c_str(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001071 event.pid());
1072 return std::string(line);
1073}
1074
1075std::string FormatTaskNewtask(const TaskNewtaskFtraceEvent& event) {
1076 char line[2048];
1077 sprintf(line,
Primiano Tucci45c9b182018-03-29 14:10:51 +01001078 "task_newtask: comm=%s pid=%d clone_flags=%llu oom_score_adj=%d",
Hector Dearman85ef5362018-03-27 14:48:47 +01001079 event.comm().c_str(), event.pid(), event.clone_flags(),
1080 event.oom_score_adj());
1081 return std::string(line);
1082}
1083
1084std::string FormatTaskRename(const TaskRenameFtraceEvent& event) {
1085 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001086 sprintf(line, "task_rename: pid=%d oldcomm=%s newcomm=%s oom_score_adj=%d",
Hector Dearman85ef5362018-03-27 14:48:47 +01001087 event.pid(), event.newcomm().c_str(), event.oldcomm().c_str(),
1088 event.oom_score_adj());
1089 return std::string(line);
1090}
1091
1092std::string FormatBlockBioBackmerge(const BlockBioBackmergeFtraceEvent& event) {
1093 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001094 sprintf(line, "block_bio_backmerge: %d,%d %s %llu + %u [%s]",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001095 BlkMaj(event.dev()), BlkMin(event.dev()), event.rwbs().c_str(),
Primiano Tucci21c19d82018-03-29 12:35:08 +01001096 static_cast<unsigned long long>(event.sector()), event.nr_sector(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001097 event.comm().c_str());
1098 return std::string(line);
1099}
1100
1101std::string FormatBlockBioBounce(const BlockBioBounceFtraceEvent& event) {
1102 char line[2048];
1103 sprintf(line,
1104 "block_bio_bounce:"
Primiano Tucci45c9b182018-03-29 14:10:51 +01001105 "%d,%d %s %llu + %u [%s]",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001106 BlkMaj(event.dev()), BlkMin(event.dev()), event.rwbs().c_str(),
Primiano Tucci21c19d82018-03-29 12:35:08 +01001107 static_cast<unsigned long long>(event.sector()), event.nr_sector(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001108 event.comm().c_str());
1109 return std::string(line);
1110}
1111
1112std::string FormatBlockBioComplete(const BlockBioCompleteFtraceEvent& event) {
1113 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001114 sprintf(line, "block_bio_complete: %d,%d %s %llu + %u [%d]",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001115 BlkMaj(event.dev()), BlkMin(event.dev()), event.rwbs().c_str(),
Primiano Tucci21c19d82018-03-29 12:35:08 +01001116 static_cast<unsigned long long>(event.sector()), event.nr_sector(),
1117 event.error());
Hector Dearman85ef5362018-03-27 14:48:47 +01001118 return std::string(line);
1119}
1120
1121std::string FormatBlockBioFrontmerge(
1122 const BlockBioFrontmergeFtraceEvent& event) {
1123 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001124 sprintf(line, "block_bio_frontmerge: %d,%d %s %llu + %u [%s]",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001125 BlkMaj(event.dev()), BlkMin(event.dev()), event.rwbs().c_str(),
Primiano Tucci21c19d82018-03-29 12:35:08 +01001126 static_cast<unsigned long long>(event.sector()), event.nr_sector(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001127 event.comm().c_str());
1128 return std::string(line);
1129}
1130
1131std::string FormatBlockBioQueue(const BlockBioQueueFtraceEvent& event) {
1132 char line[2048];
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001133 sprintf(line, "block_bio_queue: %d,%d %s %llu + %u [%s]", BlkMaj(event.dev()),
1134 BlkMin(event.dev()), event.rwbs().c_str(),
Primiano Tucci21c19d82018-03-29 12:35:08 +01001135 static_cast<unsigned long long>(event.sector()), event.nr_sector(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001136 event.comm().c_str());
1137 return std::string(line);
1138}
1139
1140std::string FormatBlockBioRemap(const BlockBioRemapFtraceEvent& event) {
1141 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001142 sprintf(line, "block_bio_remap: %d,%d %s %llu + %u <- (%d,%d) %llu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001143 BlkMaj(event.dev()), BlkMin(event.dev()), event.rwbs().c_str(),
Primiano Tucci21c19d82018-03-29 12:35:08 +01001144 static_cast<unsigned long long>(event.sector()), event.nr_sector(),
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001145 BlkMaj(event.dev()), BlkMin(event.dev()), event.old_sector());
Hector Dearman85ef5362018-03-27 14:48:47 +01001146 return std::string(line);
1147}
1148
1149std::string FormatBlockDirtyBuffer(const BlockDirtyBufferFtraceEvent& event) {
1150 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001151 sprintf(line, "block_dirty_buffer: %d,%d sector=%llu size=%zu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001152 BlkMaj(event.dev()), BlkMin(event.dev()),
Primiano Tucci21c19d82018-03-29 12:35:08 +01001153 static_cast<unsigned long long>(event.sector()),
1154 static_cast<size_t>(event.size()));
Hector Dearman85ef5362018-03-27 14:48:47 +01001155 return std::string(line);
1156}
1157
1158std::string FormatBlockGetrq(const BlockGetrqFtraceEvent& event) {
1159 char line[2048];
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001160 sprintf(line, "block_getrq: %d,%d %s %llu + %u [%s]", BlkMaj(event.dev()),
1161 BlkMin(event.dev()), event.rwbs().c_str(),
Primiano Tucci21c19d82018-03-29 12:35:08 +01001162 static_cast<unsigned long long>(event.sector()), event.nr_sector(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001163 event.comm().c_str());
1164 return std::string(line);
1165}
1166
1167std::string FormatBlockPlug(const BlockPlugFtraceEvent& event) {
1168 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001169 sprintf(line, "block_plug: comm=[%s]", event.comm().c_str());
Hector Dearman85ef5362018-03-27 14:48:47 +01001170 return std::string(line);
1171}
1172
1173std::string FormatBlockRqAbort(const BlockRqAbortFtraceEvent& event) {
1174 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001175 sprintf(line, "block_rq_abort: %d,%d %s (%s) %llu + %u [%d]",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001176 BlkMaj(event.dev()), BlkMin(event.dev()), event.rwbs().c_str(),
Primiano Tucci21c19d82018-03-29 12:35:08 +01001177 event.cmd().c_str(), static_cast<unsigned long long>(event.sector()),
Hector Dearman85ef5362018-03-27 14:48:47 +01001178 event.nr_sector(), event.errors());
1179 return std::string(line);
1180}
1181
1182std::string FormatBlockRqComplete(const BlockRqCompleteFtraceEvent& event) {
1183 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001184 sprintf(line, "block_rq_complete: %d,%d %s (%s) %llu + %u [%d]",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001185 BlkMaj(event.dev()), BlkMin(event.dev()), event.rwbs().c_str(),
Primiano Tucci21c19d82018-03-29 12:35:08 +01001186 event.cmd().c_str(), static_cast<unsigned long long>(event.sector()),
Hector Dearman85ef5362018-03-27 14:48:47 +01001187 event.nr_sector(), event.errors());
1188 return std::string(line);
1189}
1190
1191std::string FormatBlockRqInsert(const BlockRqInsertFtraceEvent& event) {
1192 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001193 sprintf(line, "block_rq_insert: %d,%d %s %u (%s) %llu + %u [%s]",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001194 BlkMaj(event.dev()), BlkMin(event.dev()), event.rwbs().c_str(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001195 event.bytes(), event.cmd().c_str(),
Primiano Tucci21c19d82018-03-29 12:35:08 +01001196 static_cast<unsigned long long>(event.sector()), event.nr_sector(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001197 event.comm().c_str());
1198 return std::string(line);
1199}
1200
1201std::string FormatBlockRqRemap(const BlockRqRemapFtraceEvent& event) {
1202 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001203 sprintf(line, "block_rq_remap: %d,%d %s %llu + %u <- (%d,%d) %llu %u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001204 BlkMaj(event.dev()), BlkMin(event.dev()), event.rwbs().c_str(),
Primiano Tucci21c19d82018-03-29 12:35:08 +01001205 static_cast<unsigned long long>(event.sector()), event.nr_sector(),
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001206 BlkMaj(event.dev()), BlkMin(event.dev()), event.old_sector(),
1207 event.nr_bios());
Hector Dearman85ef5362018-03-27 14:48:47 +01001208 return std::string(line);
1209}
1210
1211std::string FormatBlockRqRequeue(const BlockRqRequeueFtraceEvent& event) {
1212 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001213 sprintf(line, "block_rq_requeue: %d,%d %s (%s) %llu + %u [%d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001214 BlkMaj(event.dev()), BlkMin(event.dev()), event.rwbs().c_str(),
Primiano Tucci21c19d82018-03-29 12:35:08 +01001215 event.cmd().c_str(), static_cast<unsigned long long>(event.sector()),
Hector Dearman85ef5362018-03-27 14:48:47 +01001216 event.nr_sector(), event.errors());
1217 return std::string(line);
1218}
1219
1220std::string FormatBlockSleeprq(const BlockSleeprqFtraceEvent& event) {
1221 char line[2048];
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001222 sprintf(line, "block_sleeprq: %d,%d %s %llu + %u [%s]", BlkMaj(event.dev()),
1223 BlkMin(event.dev()), event.rwbs().c_str(),
Primiano Tucci21c19d82018-03-29 12:35:08 +01001224 static_cast<unsigned long long>(event.sector()), event.nr_sector(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001225 event.comm().c_str());
1226 return std::string(line);
1227}
1228
1229std::string FormatBlockSplit(const BlockSplitFtraceEvent& event) {
1230 char line[2048];
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001231 sprintf(line, "block_split: %d,%d %s %llu / %llu [%s]", BlkMaj(event.dev()),
1232 BlkMin(event.dev()), event.rwbs().c_str(),
1233 static_cast<unsigned long long>(event.sector()), event.new_sector(),
1234 event.comm().c_str());
Hector Dearman85ef5362018-03-27 14:48:47 +01001235 return std::string(line);
1236}
1237
1238std::string FormatBlockTouchBuffer(const BlockTouchBufferFtraceEvent& event) {
1239 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001240 sprintf(line, "block_touch_buffer: %d,%d sector=%llu size=%zu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001241 BlkMaj(event.dev()), BlkMin(event.dev()),
Primiano Tucci21c19d82018-03-29 12:35:08 +01001242 static_cast<unsigned long long>(event.sector()),
1243 static_cast<size_t>(event.size()));
Hector Dearman85ef5362018-03-27 14:48:47 +01001244 return std::string(line);
1245}
1246
1247std::string FormatBlockUnplug(const BlockUnplugFtraceEvent& event) {
1248 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001249 sprintf(line, "block_unplug: [%s] %d", event.comm().c_str(), event.nr_rq());
Hector Dearman85ef5362018-03-27 14:48:47 +01001250 return std::string(line);
1251}
1252
1253std::string FormatExt4AllocDaBlocks(const Ext4AllocDaBlocksFtraceEvent& event) {
1254 char line[2048];
1255 sprintf(line,
1256 "ext4_alloc_da_blocks: dev %d,%d ino %lu data_blocks %u meta_blocks "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001257 "%u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001258 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001259 event.data_blocks(), event.meta_blocks());
1260 return std::string(line);
1261}
1262
1263std::string FormatExt4AllocateBlocks(
1264 const Ext4AllocateBlocksFtraceEvent& event) {
1265 char line[2048];
1266 sprintf(line,
1267 "ext4_allocate_blocks: dev %d,%d ino %lu flags %s len %u block %llu "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001268 "lblk %u goal %llu lleft %u lright %u pleft %llu pright %llu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001269 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001270 GetExt4HintFlag(event.flags()), event.len(), event.block(),
1271 event.logical(), event.goal(), event.lleft(), event.lright(),
1272 event.pleft(), event.pright());
1273 return std::string(line);
1274}
1275
1276std::string FormatExt4AllocateInode(const Ext4AllocateInodeFtraceEvent& event) {
1277 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001278 sprintf(line, "ext4_allocate_inode: dev %d,%d ino %lu dir %lu mode 0%o",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001279 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.dir(),
1280 event.mode());
Hector Dearman85ef5362018-03-27 14:48:47 +01001281 return std::string(line);
1282}
1283
1284std::string FormatExt4BeginOrderedTruncate(
1285 const Ext4BeginOrderedTruncateFtraceEvent& event) {
1286 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001287 sprintf(line, "ext4_begin_ordered_truncate: dev %d,%d ino %lu new_size %lld",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001288 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001289 event.new_size());
1290 return std::string(line);
1291}
1292
1293std::string FormatExt4CollapseRange(const Ext4CollapseRangeFtraceEvent& event) {
1294 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001295 sprintf(line, "ext4_collapse_range: dev %d,%d ino %lu offset %lld len %lld",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001296 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.offset(),
1297 event.len());
Hector Dearman85ef5362018-03-27 14:48:47 +01001298 return std::string(line);
1299}
1300
1301std::string FormatExt4DaReleaseSpace(
1302 const Ext4DaReleaseSpaceFtraceEvent& event) {
1303 char line[2048];
1304 sprintf(line,
1305 "ext4_da_release_space: dev %d,%d ino %lu mode 0%o i_blocks %llu "
1306 "freed_blocks %d reserved_data_blocks %d reserved_meta_blocks %d "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001307 "allocated_meta_blocks %d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001308 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.mode(),
1309 event.i_blocks(), event.freed_blocks(), event.reserved_data_blocks(),
1310 event.reserved_meta_blocks(), event.allocated_meta_blocks());
Hector Dearman85ef5362018-03-27 14:48:47 +01001311 return std::string(line);
1312}
1313
1314std::string FormatExt4DaReserveSpace(
1315 const Ext4DaReserveSpaceFtraceEvent& event) {
1316 char line[2048];
1317 sprintf(line,
1318 "ext4_da_reserve_space:dev %d,%d ino %lu mode 0%o i_blocks %llu "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001319 "reserved_data_blocks %d reserved_meta_blocks %d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001320 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.mode(),
1321 event.i_blocks(), event.reserved_data_blocks(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001322 event.reserved_meta_blocks());
1323 return std::string(line);
1324}
1325
1326std::string FormatExt4DaUpdateReserveSpace(
1327 const Ext4DaUpdateReserveSpaceFtraceEvent& event) {
1328 char line[2048];
1329 sprintf(line,
1330 "ext4_da_update_reserve_space: dev %d,%d ino %lu mode 0%o i_blocks "
1331 "%llu used_blocks %d reserved_data_blocks %d reserved_meta_blocks %d "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001332 "allocated_meta_blocks %d quota_claim %d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001333 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.mode(),
1334 event.i_blocks(), event.used_blocks(), event.reserved_data_blocks(),
1335 event.reserved_meta_blocks(), event.allocated_meta_blocks(),
1336 event.quota_claim());
Hector Dearman85ef5362018-03-27 14:48:47 +01001337 return std::string(line);
1338}
1339
1340std::string FormatExt4DaWritePages(const Ext4DaWritePagesFtraceEvent& event) {
1341 char line[2048];
1342 sprintf(line,
1343 "ext4_da_write_pages: dev %d,%d ino %lu first_page %lu nr_to_write "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001344 "%ld sync_mode %d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001345 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(),
1346 event.first_page(), event.nr_to_write(), event.sync_mode());
Hector Dearman85ef5362018-03-27 14:48:47 +01001347 return std::string(line);
1348}
1349
1350// TODO(hjd): Check flags
1351std::string FormatExt4DaWritePagesExtent(
1352 const Ext4DaWritePagesExtentFtraceEvent& event) {
1353 char line[2048];
1354 sprintf(line,
Primiano Tucci45c9b182018-03-29 14:10:51 +01001355 "ext4_da_write_pages_extent: dev %d,%d ino %lu lblk %llu len %u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001356 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.lblk(),
1357 event.len());
Hector Dearman85ef5362018-03-27 14:48:47 +01001358 return std::string(line);
1359}
1360
1361std::string FormatExt4DiscardBlocks(const Ext4DiscardBlocksFtraceEvent& event) {
1362 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001363 sprintf(line, "ext4_discard_blocks: dev %d,%d blk %llu count %llu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001364 BlkMaj(event.dev()), BlkMin(event.dev()), event.blk(), event.count());
Hector Dearman85ef5362018-03-27 14:48:47 +01001365 return std::string(line);
1366}
1367
1368std::string FormatExt4DiscardPreallocations(
1369 const Ext4DiscardPreallocationsFtraceEvent& event) {
1370 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001371 sprintf(line, "ext4_discard_preallocations: dev %d,%d ino %lu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001372 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino());
Hector Dearman85ef5362018-03-27 14:48:47 +01001373 return std::string(line);
1374}
1375
1376std::string FormatExt4DropInode(const Ext4DropInodeFtraceEvent& event) {
1377 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001378 sprintf(line, "ext4_drop_inode: dev %d,%d ino %lu drop %d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001379 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.drop());
Hector Dearman85ef5362018-03-27 14:48:47 +01001380 return std::string(line);
1381}
1382
1383// TODO(hjd): Check Es status flags
1384std::string FormatExt4EsCacheExtent(const Ext4EsCacheExtentFtraceEvent& event) {
1385 char line[2048];
1386 sprintf(line,
Primiano Tucci45c9b182018-03-29 14:10:51 +01001387 "ext4_es_cache_extent: dev %d,%d ino %lu es [%u/%u) mapped %llu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001388 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.lblk(),
1389 event.len(), event.pblk());
Hector Dearman85ef5362018-03-27 14:48:47 +01001390 return std::string(line);
1391}
1392
1393std::string FormatExt4EsFindDelayedExtentRangeEnter(
1394 const Ext4EsFindDelayedExtentRangeEnterFtraceEvent& event) {
1395 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001396 sprintf(line,
1397 "ext4_es_find_delayed_extent_range_enter: dev %d,%d ino %lu lblk %u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001398 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.lblk());
Hector Dearman85ef5362018-03-27 14:48:47 +01001399 return std::string(line);
1400}
1401
1402// TODO(hjd): Check Es status flags
1403std::string FormatExt4EsFindDelayedExtentRangeExit(
1404 const Ext4EsFindDelayedExtentRangeExitFtraceEvent& event) {
1405 char line[2048];
1406 sprintf(line,
1407 "ext4_es_find_delayed_extent_range_exit: dev %d,%d ino %lu es "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001408 "[%u/%u) mapped %llu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001409 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.lblk(),
1410 event.len(), event.pblk());
Hector Dearman85ef5362018-03-27 14:48:47 +01001411 return std::string(line);
1412}
1413
1414// TODO(hjd): Check Es status flags
1415std::string FormatExt4EsInsertExtent(
1416 const Ext4EsInsertExtentFtraceEvent& event) {
1417 char line[2048];
1418 sprintf(line,
Primiano Tucci45c9b182018-03-29 14:10:51 +01001419 "ext4_es_insert_extent: dev %d,%d ino %lu es [%u/%u) mapped %llu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001420 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.lblk(),
1421 event.len(), event.pblk());
Hector Dearman85ef5362018-03-27 14:48:47 +01001422 return std::string(line);
1423}
1424
1425std::string FormatExt4EsLookupExtentEnter(
1426 const Ext4EsLookupExtentEnterFtraceEvent& event) {
1427 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001428 sprintf(line, "ext4_es_lookup_extent_enter: dev %d,%d ino %lu lblk %u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001429 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.lblk());
Hector Dearman85ef5362018-03-27 14:48:47 +01001430 return std::string(line);
1431}
1432
1433// TODO(hjd): Check Es status flags
1434std::string FormatExt4EsLookupExtentExit(
1435 const Ext4EsLookupExtentExitFtraceEvent& event) {
1436 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001437 sprintf(line,
1438 "ext4_es_lookup_extent_exit: dev %d,%d ino %lu found %d [%u/%u) %llu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001439 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.found(),
1440 event.lblk(), event.len(), event.found() ? event.pblk() : 0);
Hector Dearman85ef5362018-03-27 14:48:47 +01001441 return std::string(line);
1442}
1443
1444std::string FormatExt4EsRemoveExtent(
1445 const Ext4EsRemoveExtentFtraceEvent& event) {
1446 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001447 sprintf(line, "ext4_es_remove_extent: dev %d,%d ino %lu es [%lld/%lld)",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001448 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.lblk(),
1449 event.len());
Hector Dearman85ef5362018-03-27 14:48:47 +01001450 return std::string(line);
1451}
1452
1453std::string FormatExt4EsShrink(const Ext4EsShrinkFtraceEvent& event) {
1454 char line[2048];
1455 sprintf(line,
1456 "ext4_es_shrink: dev %d,%d nr_shrunk %d, scan_time %llu nr_skipped "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001457 "%d retried %d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001458 BlkMaj(event.dev()), BlkMin(event.dev()), event.nr_shrunk(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001459 event.scan_time(), event.nr_skipped(), event.retried());
1460 return std::string(line);
1461}
1462
1463std::string FormatExt4EsShrinkCount(const Ext4EsShrinkCountFtraceEvent& event) {
1464 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001465 sprintf(line, "ext4_es_shrink_count: dev %d,%d nr_to_scan %d cache_cnt %d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001466 BlkMaj(event.dev()), BlkMin(event.dev()), event.nr_to_scan(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001467 event.cache_cnt());
1468 return std::string(line);
1469}
1470
1471std::string FormatExt4EsShrinkScanEnter(
1472 const Ext4EsShrinkScanEnterFtraceEvent& event) {
1473 char line[2048];
1474 sprintf(line,
Primiano Tucci45c9b182018-03-29 14:10:51 +01001475 "ext4_es_shrink_scan_enter: dev %d,%d nr_to_scan %d cache_cnt %d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001476 BlkMaj(event.dev()), BlkMin(event.dev()), event.nr_to_scan(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001477 event.cache_cnt());
1478 return std::string(line);
1479}
1480
1481std::string FormatExt4EsShrinkScanExit(
1482 const Ext4EsShrinkScanExitFtraceEvent& event) {
1483 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001484 sprintf(line, "ext4_es_shrink_scan_exit: dev %d,%d nr_shrunk %d cache_cnt %d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001485 BlkMaj(event.dev()), BlkMin(event.dev()), event.nr_shrunk(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001486 event.cache_cnt());
1487 return std::string(line);
1488}
1489
1490std::string FormatExt4EvictInode(const Ext4EvictInodeFtraceEvent& event) {
1491 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001492 sprintf(line, "ext4_evict_inode: dev %d,%d ino %lu nlink %d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001493 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.nlink());
Hector Dearman85ef5362018-03-27 14:48:47 +01001494 return std::string(line);
1495}
1496
1497std::string FormatExt4ExtConvertToInitializedEnter(
1498 const Ext4ExtConvertToInitializedEnterFtraceEvent& event) {
1499 char line[2048];
1500 sprintf(line,
1501 "ext4_ext_convert_to_initialized_enter: dev %d,%d ino %lu m_lblk %u "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001502 "m_len %u u_lblk %u u_len %u u_pblk %llu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001503 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.m_lblk(),
1504 event.m_len(), event.u_lblk(), event.u_len(), event.u_pblk());
Hector Dearman85ef5362018-03-27 14:48:47 +01001505 return std::string(line);
1506}
1507
1508std::string FormatExt4ExtConvertToInitializedFastpath(
1509 const Ext4ExtConvertToInitializedFastpathFtraceEvent& event) {
1510 char line[2048];
1511 sprintf(line,
1512 "ext4_ext_convert_to_initialized_fastpath: dev %d,%d ino %lu m_lblk "
1513 "%u m_len %u u_lblk %u u_len %u u_pblk %llu i_lblk %u i_len %u "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001514 "i_pblk %llu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001515 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.m_lblk(),
1516 event.m_len(), event.u_lblk(), event.u_len(), event.u_pblk(),
1517 event.i_lblk(), event.i_len(), event.i_pblk());
Hector Dearman85ef5362018-03-27 14:48:47 +01001518 return std::string(line);
1519}
1520
1521std::string FormatExt4ExtHandleUnwrittenExtents(
1522 const Ext4ExtHandleUnwrittenExtentsFtraceEvent& event) {
1523 char line[2048];
1524 sprintf(line,
1525 "ext4_ext_handle_unwritten_extents: dev %d,%d ino %lu m_lblk %u "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001526 "m_pblk %llu m_len %u flags %s allocated %d newblock %llu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001527 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.lblk(),
1528 event.pblk(), event.len(), GetExt4ExtFlag(event.flags()),
1529 event.allocated(), event.newblk());
Hector Dearman85ef5362018-03-27 14:48:47 +01001530 return std::string(line);
1531}
1532
1533std::string FormatExt4ExtInCache(const Ext4ExtInCacheFtraceEvent& event) {
1534 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001535 sprintf(line, "ext4_ext_in_cache: dev %d,%d ino %lu lblk %u ret %d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001536 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.lblk(),
1537 event.ret());
Hector Dearman85ef5362018-03-27 14:48:47 +01001538 return std::string(line);
1539}
1540
1541std::string FormatExt4ExtLoadExtent(const Ext4ExtLoadExtentFtraceEvent& event) {
1542 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001543 sprintf(line, "ext4_ext_load_extent: dev %d,%d ino %lu lblk %u pblk %llu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001544 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.lblk(),
1545 event.pblk());
Hector Dearman85ef5362018-03-27 14:48:47 +01001546 return std::string(line);
1547}
1548
1549std::string FormatExt4ExtMapBlocksEnter(
1550 const Ext4ExtMapBlocksEnterFtraceEvent& event) {
1551 char line[2048];
1552 sprintf(
1553 line,
Primiano Tucci45c9b182018-03-29 14:10:51 +01001554 "ext4_ext_map_blocks_enter: dev %d,%d ino %lu lblk %u len %u flags %s",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001555 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(),
1556 static_cast<unsigned>(event.lblk()), event.len(),
1557 GetExt4ExtFlag(event.flags()));
Hector Dearman85ef5362018-03-27 14:48:47 +01001558 return std::string(line);
1559}
1560
1561std::string FormatExt4ExtMapBlocksExit(
1562 const Ext4ExtMapBlocksExitFtraceEvent& event) {
1563 char line[2048];
1564 sprintf(line,
1565 "ext4_ext_map_blocks_exit: dev %d,%d ino %lu lblk %u pblk %llu len "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001566 "%u flags %x ret %d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001567 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.lblk(),
1568 event.pblk(), event.len(), event.flags(), event.ret());
Hector Dearman85ef5362018-03-27 14:48:47 +01001569 return std::string(line);
1570}
1571
1572std::string FormatExt4ExtPutInCache(const Ext4ExtPutInCacheFtraceEvent& event) {
1573 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001574 sprintf(line,
1575 "ext4_ext_put_in_cache: dev %d,%d ino %lu lblk %u len %u start %llu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001576 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.lblk(),
1577 event.len(), event.start());
Hector Dearman85ef5362018-03-27 14:48:47 +01001578 return std::string(line);
1579}
1580
1581std::string FormatExt4ExtRemoveSpace(
1582 const Ext4ExtRemoveSpaceFtraceEvent& event) {
1583 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001584 sprintf(line,
1585 "ext4_ext_remove_space: dev %d,%d ino %lu since %u end %u depth %d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001586 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.start(),
1587 event.end(), event.depth());
Hector Dearman85ef5362018-03-27 14:48:47 +01001588 return std::string(line);
1589}
1590
1591std::string FormatExt4ExtRemoveSpaceDone(
1592 const Ext4ExtRemoveSpaceDoneFtraceEvent& event) {
1593 char line[2048];
1594 sprintf(line,
1595 "ext4_ext_remove_space_done: dev %d,%d ino %lu since %u end %u depth "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001596 "%d partial %lld remaining_entries %u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001597 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.start(),
1598 event.end(), event.depth(), event.partial(), event.eh_entries());
Hector Dearman85ef5362018-03-27 14:48:47 +01001599 return std::string(line);
1600}
1601
1602std::string FormatExt4ExtRmIdx(const Ext4ExtRmIdxFtraceEvent& event) {
1603 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001604 sprintf(line, "ext4_ext_rm_idx: dev %d,%d ino %lu index_pblk %llu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001605 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.pblk());
Hector Dearman85ef5362018-03-27 14:48:47 +01001606 return std::string(line);
1607}
1608
1609std::string FormatExt4ExtRmLeaf(const Ext4ExtRmLeafFtraceEvent& event) {
1610 char line[2048];
1611 sprintf(line,
1612 "ext4_ext_rm_leaf: dev %d,%d ino %lu start_lblk %u last_extent "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001613 "[%u(%llu), %u]partial_cluster %lld",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001614 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.start(),
1615 event.ee_lblk(), event.ee_pblk(), event.ee_len(), event.partial());
Hector Dearman85ef5362018-03-27 14:48:47 +01001616 return std::string(line);
1617}
1618
1619std::string FormatExt4ExtShowExtent(const Ext4ExtShowExtentFtraceEvent& event) {
1620 char line[2048];
1621 sprintf(line,
Primiano Tucci45c9b182018-03-29 14:10:51 +01001622 "ext4_ext_show_extent: dev %d,%d ino %lu lblk %u pblk %llu len %u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001623 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.lblk(),
1624 event.pblk(), event.len());
Hector Dearman85ef5362018-03-27 14:48:47 +01001625 return std::string(line);
1626}
1627
1628std::string FormatExt4FallocateEnter(
1629 const Ext4FallocateEnterFtraceEvent& event) {
1630 char line[2048];
1631 sprintf(
1632 line,
Primiano Tucci45c9b182018-03-29 14:10:51 +01001633 "ext4_fallocate_enter: dev %d,%d ino %lu offset %lld len %lld mode %s",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001634 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.offset(),
1635 event.len(), GetExt4ModeFlag(event.mode()));
Hector Dearman85ef5362018-03-27 14:48:47 +01001636 return std::string(line);
1637}
1638
1639std::string FormatExt4FallocateExit(const Ext4FallocateExitFtraceEvent& event) {
1640 char line[2048];
1641 sprintf(line,
Primiano Tucci45c9b182018-03-29 14:10:51 +01001642 "ext4_fallocate_exit: dev %d,%d ino %lu pos %lld blocks %u ret %d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001643 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.pos(),
1644 event.blocks(), event.ret());
Hector Dearman85ef5362018-03-27 14:48:47 +01001645 return std::string(line);
1646}
1647
1648std::string FormatExt4FindDelallocRange(
1649 const Ext4FindDelallocRangeFtraceEvent& event) {
1650 char line[2048];
1651 sprintf(line,
1652 "ext4_find_delalloc_range: dev %d,%d ino %lu from %u to %u reverse "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001653 "%d found %d (blk = %u)",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001654 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.from(),
1655 event.to(), event.reverse(), event.found(), event.found_blk());
Hector Dearman85ef5362018-03-27 14:48:47 +01001656 return std::string(line);
1657}
1658
1659std::string FormatExt4Forget(const Ext4ForgetFtraceEvent& event) {
1660 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001661 sprintf(line,
1662 "ext4_forget: dev %d,%d ino %lu mode 0%o is_metadata %d block %llu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001663 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.mode(),
1664 event.is_metadata(), event.block());
Hector Dearman85ef5362018-03-27 14:48:47 +01001665 return std::string(line);
1666}
1667
1668std::string FormatExt4FreeBlocks(const Ext4FreeBlocksFtraceEvent& event) {
1669 char line[2048];
1670 sprintf(line,
1671 "ext4_free_blocks: dev %d,%d ino %lu mode 0%o block %llu count %lu "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001672 "flags %s",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001673 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.mode(),
1674 event.block(), event.count(), GetExt4FreeBlocksFlag(event.flags()));
Hector Dearman85ef5362018-03-27 14:48:47 +01001675 return std::string(line);
1676}
1677
1678std::string FormatExt4FreeInode(const Ext4FreeInodeFtraceEvent& event) {
1679 char line[2048];
1680 sprintf(line,
1681 "ext4_free_inode: dev %d,%d ino %lu mode 0%o uid %u gid %u blocks "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001682 "%llu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001683 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.mode(),
1684 event.uid(), event.gid(), event.blocks());
Hector Dearman85ef5362018-03-27 14:48:47 +01001685 return std::string(line);
1686}
1687
1688std::string FormatExt4GetImpliedClusterAllocExit(
1689 const Ext4GetImpliedClusterAllocExitFtraceEvent& event) {
1690 char line[2048];
1691 sprintf(line,
1692 "ext4_get_implied_cluster_alloc_exit: dev %d,%d m_lblk %u m_pblk "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001693 "%llu m_len %u m_flags %u ret %d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001694 BlkMaj(event.dev()), BlkMin(event.dev()), event.lblk(), event.pblk(),
1695 event.len(), event.flags(), event.ret());
Hector Dearman85ef5362018-03-27 14:48:47 +01001696 return std::string(line);
1697}
1698
1699std::string FormatExt4GetReservedClusterAlloc(
1700 const Ext4GetReservedClusterAllocFtraceEvent& event) {
1701 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001702 sprintf(line,
1703 "ext4_get_reserved_cluster_alloc: dev %d,%d ino %lu lblk %u len %u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001704 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.lblk(),
1705 event.len());
Hector Dearman85ef5362018-03-27 14:48:47 +01001706 return std::string(line);
1707}
1708
1709std::string FormatExt4IndMapBlocksEnter(
1710 const Ext4IndMapBlocksEnterFtraceEvent& event) {
1711 char line[2048];
1712 sprintf(
1713 line,
Primiano Tucci45c9b182018-03-29 14:10:51 +01001714 "ext4_ind_map_blocks_enter: dev %d,%d ino %lu lblk %u len %u flags %u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001715 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.lblk(),
1716 event.len(), event.flags());
Hector Dearman85ef5362018-03-27 14:48:47 +01001717 return std::string(line);
1718}
1719
1720std::string FormatExt4IndMapBlocksExit(
1721 const Ext4IndMapBlocksExitFtraceEvent& event) {
1722 char line[2048];
1723 sprintf(line,
1724 "ext4_ind_map_blocks_exit: dev %d,%d ino %lu lblk %u pblk %llu len "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001725 "%u flags %x ret %d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001726 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.lblk(),
1727 event.pblk(), event.len(), event.flags(), event.ret());
Hector Dearman85ef5362018-03-27 14:48:47 +01001728 return std::string(line);
1729}
1730
1731std::string FormatExt4InsertRange(const Ext4InsertRangeFtraceEvent& event) {
1732 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001733 sprintf(line, "ext4_insert_range: dev %d,%d ino %lu offset %lld len %lld",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001734 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.offset(),
1735 event.len());
Hector Dearman85ef5362018-03-27 14:48:47 +01001736 return std::string(line);
1737}
1738
1739std::string FormatExt4Invalidatepage(
1740 const Ext4InvalidatepageFtraceEvent& event) {
1741 char line[2048];
1742 sprintf(line,
1743 "ext4_invalidatepage: dev %d,%d ino %lu page_index %lu offset %u "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001744 "length %u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001745 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.index(),
1746 event.offset(), event.length());
Hector Dearman85ef5362018-03-27 14:48:47 +01001747 return std::string(line);
1748}
1749
1750std::string FormatExt4JournalStart(const Ext4JournalStartFtraceEvent& event) {
1751 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001752 sprintf(line,
1753 "ext4_journal_start: dev %d,%d blocks, %d rsv_blocks, %d caller %pS",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001754 BlkMaj(event.dev()), BlkMin(event.dev()), event.blocks(),
1755 event.rsv_blocks(), event.ip());
Hector Dearman85ef5362018-03-27 14:48:47 +01001756 return std::string(line);
1757}
1758
1759std::string FormatExt4JournalStartReserved(
1760 const Ext4JournalStartReservedFtraceEvent& event) {
1761 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001762 sprintf(line, "ext4_journal_start_reserved: dev %d,%d blocks, %d caller %pS",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001763 BlkMaj(event.dev()), BlkMin(event.dev()), event.blocks(), event.ip());
Hector Dearman85ef5362018-03-27 14:48:47 +01001764 return std::string(line);
1765}
1766
1767std::string FormatExt4JournalledInvalidatepage(
1768 const Ext4JournalledInvalidatepageFtraceEvent& event) {
1769 char line[2048];
1770 sprintf(line,
1771 "ext4_journalled_invalidatepage: dev %d,%d ino %lu page_index %lu "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001772 "offset %u length %u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001773 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.index(),
1774 event.offset(), event.length());
Hector Dearman85ef5362018-03-27 14:48:47 +01001775 return std::string(line);
1776}
1777
1778std::string FormatExt4JournalledWriteEnd(
1779 const Ext4JournalledWriteEndFtraceEvent& event) {
1780 char line[2048];
1781 sprintf(line,
1782 "ext4_journalled_write_end: dev %d,%d ino %lu pos %lld len %u copied "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001783 "%u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001784 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.pos(),
1785 event.len(), event.copied());
Hector Dearman85ef5362018-03-27 14:48:47 +01001786 return std::string(line);
1787}
1788
1789std::string FormatExt4LoadInode(const Ext4LoadInodeFtraceEvent& event) {
1790 char line[2048];
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001791 sprintf(line, "ext4_load_inode: dev %d,%d ino %ld", BlkMaj(event.dev()),
1792 BlkMin(event.dev()), event.ino());
Hector Dearman85ef5362018-03-27 14:48:47 +01001793 return std::string(line);
1794}
1795
1796std::string FormatExt4LoadInodeBitmap(
1797 const Ext4LoadInodeBitmapFtraceEvent& event) {
1798 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001799 sprintf(line, "ext4_load_inode_bitmap: dev %d,%d group %u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001800 BlkMaj(event.dev()), BlkMin(event.dev()), event.group());
Hector Dearman85ef5362018-03-27 14:48:47 +01001801 return std::string(line);
1802}
1803
1804std::string FormatExt4MarkInodeDirty(
1805 const Ext4MarkInodeDirtyFtraceEvent& event) {
1806 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001807 sprintf(line, "ext4_mark_inode_dirty: dev %d,%d ino %lu caller %pS",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001808 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.ip());
Hector Dearman85ef5362018-03-27 14:48:47 +01001809 return std::string(line);
1810}
1811
1812std::string FormatExt4MbBitmapLoad(const Ext4MbBitmapLoadFtraceEvent& event) {
1813 char line[2048];
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001814 sprintf(line, "ext4_mb_bitmap_load: dev %d,%d group %u", BlkMaj(event.dev()),
1815 BlkMin(event.dev()), event.group());
Hector Dearman85ef5362018-03-27 14:48:47 +01001816 return std::string(line);
1817}
1818
1819std::string FormatExt4MbBuddyBitmapLoad(
1820 const Ext4MbBuddyBitmapLoadFtraceEvent& event) {
1821 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001822 sprintf(line, "ext4_mb_buddy_bitmap_load: dev %d,%d group %u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001823 BlkMaj(event.dev()), BlkMin(event.dev()), event.group());
Hector Dearman85ef5362018-03-27 14:48:47 +01001824 return std::string(line);
1825}
1826
1827std::string FormatExt4MbDiscardPreallocations(
1828 const Ext4MbDiscardPreallocationsFtraceEvent& event) {
1829 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001830 sprintf(line, "ext4_mb_discard_preallocations: dev %d,%d needed %d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001831 BlkMaj(event.dev()), BlkMin(event.dev()), event.needed());
Hector Dearman85ef5362018-03-27 14:48:47 +01001832 return std::string(line);
1833}
1834
1835std::string FormatExt4MbNewGroupPa(const Ext4MbNewGroupPaFtraceEvent& event) {
1836 char line[2048];
1837 sprintf(line,
1838 "ext4_mb_new_group_pa: dev %d,%d ino %lu pstart %llu len %u lstart "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001839 "%llu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001840 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001841 event.pa_pstart(), event.pa_len(), event.pa_lstart());
1842 return std::string(line);
1843}
1844
1845std::string FormatExt4MbNewInodePa(const Ext4MbNewInodePaFtraceEvent& event) {
1846 char line[2048];
1847 sprintf(line,
1848 "ext4_mb_new_inode_pa: dev %d,%d ino %lu pstart %llu len %u lstart "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001849 "%llu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001850 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001851 event.pa_pstart(), event.pa_len(), event.pa_lstart());
1852 return std::string(line);
1853}
1854
1855std::string FormatExt4MbReleaseGroupPa(
1856 const Ext4MbReleaseGroupPaFtraceEvent& event) {
1857 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001858 sprintf(line, "ext4_mb_release_group_pa: dev %d,%d pstart %llu len %u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001859 BlkMaj(event.dev()), BlkMin(event.dev()), event.pa_pstart(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001860 event.pa_len());
1861 return std::string(line);
1862}
1863
1864std::string FormatExt4MbReleaseInodePa(
1865 const Ext4MbReleaseInodePaFtraceEvent& event) {
1866 char line[2048];
1867 sprintf(line,
Primiano Tucci45c9b182018-03-29 14:10:51 +01001868 "ext4_mb_release_inode_pa: dev %d,%d ino %lu block %llu count %u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001869 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.block(),
1870 event.count());
Hector Dearman85ef5362018-03-27 14:48:47 +01001871 return std::string(line);
1872}
1873
1874std::string FormatExt4MballocAlloc(const Ext4MballocAllocFtraceEvent& event) {
1875 char line[2048];
1876 sprintf(line,
1877 "ext4_mballoc_alloc: dev %d,%d inode %lu orig %u/%d/%u@%u goal "
1878 "%u/%d/%u@%u result %u/%d/%u@%u blks %u grps %u cr %u flags %s tail "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001879 "%u broken %u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001880 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001881 event.orig_group(), event.orig_start(), event.orig_len(),
1882 event.orig_logical(), event.goal_group(), event.goal_start(),
1883 event.goal_len(), event.goal_logical(), event.result_group(),
1884 event.result_start(), event.result_len(), event.result_logical(),
1885 event.found(), event.groups(), event.cr(),
1886 GetExt4HintFlag(event.flags()), event.tail(),
1887 event.buddy() ? 1 << event.buddy() : 0);
1888 return std::string(line);
1889}
1890
1891std::string FormatExt4MballocDiscard(
1892 const Ext4MballocDiscardFtraceEvent& event) {
1893 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001894 sprintf(line, "ext4_mballoc_discard: dev %d,%d inode %lu extent %u/%d/%d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001895 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001896 event.result_group(), event.result_start(), event.result_len());
1897 return std::string(line);
1898}
1899
1900std::string FormatExt4MballocFree(const Ext4MballocFreeFtraceEvent& event) {
1901 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001902 sprintf(line, "ext4_mballoc_free: dev %d,%d inode %lu extent %u/%d/%d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001903 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001904 event.result_group(), event.result_start(), event.result_len());
1905 return std::string(line);
1906}
1907
1908std::string FormatExt4MballocPrealloc(
1909 const Ext4MballocPreallocFtraceEvent& event) {
1910 char line[2048];
1911 sprintf(line,
1912 "ext4_mballoc_prealloc: dev %d,%d inode %lu orig %u/%d/%u@%u result "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001913 "%u/%d/%u@%u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001914 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001915 event.orig_group(), event.orig_start(), event.orig_len(),
1916 event.orig_logical(), event.result_group(), event.result_start(),
1917 event.result_len(), event.result_logical());
1918 return std::string(line);
1919}
1920
1921std::string FormatExt4OtherInodeUpdateTime(
1922 const Ext4OtherInodeUpdateTimeFtraceEvent& event) {
1923 char line[2048];
1924 sprintf(line,
1925 "ext4_other_inode_update_time: dev %d,%d orig_ino %lu ino %lu mode "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001926 "0%o uid %u gid %u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001927 BlkMaj(event.dev()), BlkMin(event.dev()), event.orig_ino(),
1928 event.ino(), event.mode(), event.uid(), event.gid());
Hector Dearman85ef5362018-03-27 14:48:47 +01001929 return std::string(line);
1930}
1931
1932std::string FormatExt4PunchHole(const Ext4PunchHoleFtraceEvent& event) {
1933 char line[2048];
1934 sprintf(line,
Primiano Tucci45c9b182018-03-29 14:10:51 +01001935 "ext4_punch_hole: dev %d,%d ino %lu offset %lld len %lld mode %s",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001936 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.offset(),
1937 event.len(), GetExt4ModeFlag(event.mode()));
Hector Dearman85ef5362018-03-27 14:48:47 +01001938 return std::string(line);
1939}
1940
1941std::string FormatExt4ReadBlockBitmapLoad(
1942 const Ext4ReadBlockBitmapLoadFtraceEvent& event) {
1943 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001944 sprintf(line, "ext4_read_block_bitmap_load: dev %d,%d group %u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001945 BlkMaj(event.dev()), BlkMin(event.dev()), event.group());
Hector Dearman85ef5362018-03-27 14:48:47 +01001946 return std::string(line);
1947}
1948
1949std::string FormatExt4Readpage(const Ext4ReadpageFtraceEvent& event) {
1950 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001951 sprintf(line, "ext4_readpage: dev %d,%d ino %lu page_index %lu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001952 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.index());
Hector Dearman85ef5362018-03-27 14:48:47 +01001953 return std::string(line);
1954}
1955
1956std::string FormatExt4Releasepage(const Ext4ReleasepageFtraceEvent& event) {
1957 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001958 sprintf(line, "ext4_releasepage: dev %d,%d ino %lu page_index %lu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001959 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.index());
Hector Dearman85ef5362018-03-27 14:48:47 +01001960 return std::string(line);
1961}
1962
1963std::string FormatExt4RemoveBlocks(const Ext4RemoveBlocksFtraceEvent& event) {
1964 char line[2048];
1965 sprintf(line,
1966 "ext4_remove_blocks: dev %d,%d ino %lu extent [%u(%llu), %u]from %u "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001967 "to %u partial_cluster %lld",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001968 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(),
1969 event.ee_lblk(), event.ee_pblk(), event.ee_len(), event.from(),
1970 event.to(), event.partial());
Hector Dearman85ef5362018-03-27 14:48:47 +01001971 return std::string(line);
1972}
1973
1974std::string FormatExt4RequestBlocks(const Ext4RequestBlocksFtraceEvent& event) {
1975 char line[2048];
1976 sprintf(line,
1977 "ext4_request_blocks: dev %d,%d ino %lu flags %s len %u lblk %u goal "
Primiano Tucci45c9b182018-03-29 14:10:51 +01001978 "%llu lleft %u lright %u pleft %llu pright %llu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001979 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(),
Hector Dearman85ef5362018-03-27 14:48:47 +01001980 GetExt4HintFlag(event.flags()), event.len(), event.logical(),
1981 event.goal(), event.lleft(), event.lright(), event.pleft(),
1982 event.pright());
1983 return std::string(line);
1984}
1985
1986std::string FormatExt4RequestInode(const Ext4RequestInodeFtraceEvent& event) {
1987 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01001988 sprintf(line, "ext4_request_inode: dev %d,%d dir %lu mode 0%o",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001989 BlkMaj(event.dev()), BlkMin(event.dev()), event.dir(), event.mode());
Hector Dearman85ef5362018-03-27 14:48:47 +01001990 return std::string(line);
1991}
1992
1993std::string FormatExt4SyncFs(const Ext4SyncFsFtraceEvent& event) {
1994 char line[2048];
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01001995 sprintf(line, "ext4_sync_fs: dev %d,%d wait %d", BlkMaj(event.dev()),
1996 BlkMin(event.dev()), event.wait());
Hector Dearman85ef5362018-03-27 14:48:47 +01001997 return std::string(line);
1998}
1999
2000std::string FormatExt4TrimAllFree(const Ext4TrimAllFreeFtraceEvent& event) {
2001 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01002002 sprintf(line, "ext4_trim_all_free: dev %d,%d group %u, start %d, len %d",
Hector Dearman85ef5362018-03-27 14:48:47 +01002003 event.dev_major(), event.dev_minor(), event.group(), event.start(),
2004 event.len());
2005 return std::string(line);
2006}
2007
2008std::string FormatExt4TrimExtent(const Ext4TrimExtentFtraceEvent& event) {
2009 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01002010 sprintf(line, "ext4_trim_extent: dev %d,%d group %u, start %d, len %d",
Hector Dearman85ef5362018-03-27 14:48:47 +01002011 event.dev_major(), event.dev_minor(), event.group(), event.start(),
2012 event.len());
2013 return std::string(line);
2014}
2015
2016std::string FormatExt4TruncateEnter(const Ext4TruncateEnterFtraceEvent& event) {
2017 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01002018 sprintf(line, "ext4_truncate_enter: dev %d,%d ino %lu blocks %llu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01002019 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(),
Hector Dearman85ef5362018-03-27 14:48:47 +01002020 event.blocks());
2021 return std::string(line);
2022}
2023
2024std::string FormatExt4TruncateExit(const Ext4TruncateExitFtraceEvent& event) {
2025 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01002026 sprintf(line, "ext4_truncate_exit: dev %d,%d ino %lu blocks %llu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01002027 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(),
Hector Dearman85ef5362018-03-27 14:48:47 +01002028 event.blocks());
2029 return std::string(line);
2030}
2031
2032std::string FormatExt4UnlinkEnter(const Ext4UnlinkEnterFtraceEvent& event) {
2033 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01002034 sprintf(line, "ext4_unlink_enter: dev %d,%d ino %lu size %lld parent %lu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01002035 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.size(),
2036 event.parent());
Hector Dearman85ef5362018-03-27 14:48:47 +01002037 return std::string(line);
2038}
2039
2040std::string FormatExt4UnlinkExit(const Ext4UnlinkExitFtraceEvent& event) {
2041 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01002042 sprintf(line, "ext4_unlink_exit: dev %d,%d ino %lu ret %d",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01002043 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.ret());
Hector Dearman85ef5362018-03-27 14:48:47 +01002044 return std::string(line);
2045}
2046
2047std::string FormatExt4WriteBegin(const Ext4WriteBeginFtraceEvent& event) {
2048 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01002049 sprintf(line, "ext4_write_begin: dev %d,%d ino %lu pos %lld len %u flags %u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01002050 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.pos(),
2051 event.len(), event.flags());
Hector Dearman85ef5362018-03-27 14:48:47 +01002052 return std::string(line);
2053}
2054
2055std::string FormatExt4WriteEnd(const Ext4WriteEndFtraceEvent& event) {
2056 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01002057 sprintf(line, "ext4_write_end: %d,%d ino %lu pos %lld len %u copied %u",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01002058 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.pos(),
2059 event.len(), event.copied());
Hector Dearman85ef5362018-03-27 14:48:47 +01002060 return std::string(line);
2061}
2062
2063std::string FormatExt4Writepage(const Ext4WritepageFtraceEvent& event) {
2064 char line[2048];
Primiano Tucci45c9b182018-03-29 14:10:51 +01002065 sprintf(line, "ext4_writepage: dev %d,%d ino %lu page_index %lu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01002066 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.index());
Hector Dearman85ef5362018-03-27 14:48:47 +01002067 return std::string(line);
2068}
2069
2070std::string FormatExt4Writepages(const Ext4WritepagesFtraceEvent& event) {
2071 char line[2048];
2072 sprintf(line,
2073 "ext4_writepages: dev %d,%d ino %lu nr_to_write %ld pages_skipped "
2074 "%ld range_start %lld range_end %lld sync_mode %d for_kupdate %d "
Primiano Tucci45c9b182018-03-29 14:10:51 +01002075 "range_cyclic %d writeback_index %lu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01002076 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(),
2077 event.nr_to_write(), event.pages_skipped(), event.range_start(),
2078 event.range_end(), event.sync_mode(), event.for_kupdate(),
2079 event.range_cyclic(), event.writeback_index());
Hector Dearman85ef5362018-03-27 14:48:47 +01002080 return std::string(line);
2081}
2082
2083std::string FormatExt4WritepagesResult(
2084 const Ext4WritepagesResultFtraceEvent& event) {
2085 char line[2048];
2086 sprintf(line,
2087 "ext4_writepages_result: dev %d,%d ino %lu ret %d pages_written %d "
Primiano Tucci45c9b182018-03-29 14:10:51 +01002088 "pages_skipped %ld sync_mode %d writeback_index %lu",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01002089 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.ret(),
2090 event.pages_written(), event.pages_skipped(), event.sync_mode(),
2091 event.writeback_index());
Hector Dearman85ef5362018-03-27 14:48:47 +01002092 return std::string(line);
2093}
2094
2095std::string FormatExt4ZeroRange(const Ext4ZeroRangeFtraceEvent& event) {
2096 char line[2048];
2097 sprintf(line,
Primiano Tucci45c9b182018-03-29 14:10:51 +01002098 "ext4_zero_range: dev %d,%d ino %lu offset %lld len %lld mode %s",
Primiano Tucci3cbb10a2018-04-10 17:52:40 +01002099 BlkMaj(event.dev()), BlkMin(event.dev()), event.ino(), event.offset(),
2100 event.len(), GetExt4ModeFlag(event.mode()));
Hector Dearman85ef5362018-03-27 14:48:47 +01002101 return std::string(line);
2102}
2103
Florian Mayer1d8956a2018-04-10 13:59:19 +01002104std::string FormatF2fsDoSubmitBio(const F2fsDoSubmitBioFtraceEvent& event) {
2105 char line[2048];
2106 sprintf(line, "f2fs_do_submit_bio: TODO(fmayer): add format");
2107 return std::string(line);
2108}
2109std::string FormatF2fsEvictInode(const F2fsEvictInodeFtraceEvent& event) {
2110 char line[2048];
2111 sprintf(line, "f2fs_evict_inode: TODO(fmayer): add format");
2112 return std::string(line);
2113}
2114std::string FormatF2fsFallocate(const F2fsFallocateFtraceEvent& event) {
2115 char line[2048];
2116 sprintf(line, "f2fs_fallocate: TODO(fmayer): add format");
2117 return std::string(line);
2118}
2119std::string FormatF2fsGetDataBlock(const F2fsGetDataBlockFtraceEvent& event) {
2120 char line[2048];
2121 sprintf(line, "f2fs_get_data_block: TODO(fmayer): add format");
2122 return std::string(line);
2123}
2124std::string FormatF2fsGetVictim(const F2fsGetVictimFtraceEvent& event) {
2125 char line[2048];
2126 sprintf(line, "f2fs_get_victim: TODO(fmayer): add format");
2127 return std::string(line);
2128}
2129std::string FormatF2fsIget(const F2fsIgetFtraceEvent& event) {
2130 char line[2048];
2131 sprintf(line, "f2fs_iget: TODO(fmayer): add format");
2132 return std::string(line);
2133}
2134std::string FormatF2fsIgetExit(const F2fsIgetExitFtraceEvent& event) {
2135 char line[2048];
2136 sprintf(line, "f2fs_iget_exit: TODO(fmayer): add format");
2137 return std::string(line);
2138}
2139std::string FormatF2fsNewInode(const F2fsNewInodeFtraceEvent& event) {
2140 char line[2048];
2141 sprintf(line, "f2fs_new_inode: TODO(fmayer): add format");
2142 return std::string(line);
2143}
2144std::string FormatF2fsReadpage(const F2fsReadpageFtraceEvent& event) {
2145 char line[2048];
2146 sprintf(line, "f2fs_readpage: TODO(fmayer): add format");
2147 return std::string(line);
2148}
2149std::string FormatF2fsReserveNewBlock(
2150 const F2fsReserveNewBlockFtraceEvent& event) {
2151 char line[2048];
2152 sprintf(line, "f2fs_reserve_new_block: TODO(fmayer): add format");
2153 return std::string(line);
2154}
2155std::string FormatF2fsSetPageDirty(const F2fsSetPageDirtyFtraceEvent& event) {
2156 char line[2048];
2157 sprintf(line, "f2fs_set_page_dirty: TODO(fmayer): add format");
2158 return std::string(line);
2159}
2160std::string FormatF2fsSubmitWritePage(
2161 const F2fsSubmitWritePageFtraceEvent& event) {
2162 char line[2048];
2163 sprintf(line, "f2fs_submit_write_page: TODO(fmayer): add format");
2164 return std::string(line);
2165}
2166std::string FormatF2fsSyncFileEnter(const F2fsSyncFileEnterFtraceEvent& event) {
2167 char line[2048];
Isabelle Taylor8d49fa02018-10-26 13:23:00 +01002168 sprintf(line,
2169 "f2fs_sync_file_enter: dev = (%d,%d), ino = %lu, pino = %lu, i_mode "
2170 "= 0x%hx, i_size = %lld, i_nlink = %u, i_blocks = %llu, i_advise = "
2171 "0x%x",
2172 static_cast<int>(event.dev() >> 20),
2173 static_cast<int>(event.dev() & ((1U << 20) - 1)), event.ino(),
2174 event.pino(), event.mode(), event.size(), event.nlink(),
2175 event.blocks(), static_cast<unsigned char>(event.advise()));
Florian Mayer1d8956a2018-04-10 13:59:19 +01002176 return std::string(line);
2177}
2178std::string FormatF2fsSyncFileExit(const F2fsSyncFileExitFtraceEvent& event) {
2179 char line[2048];
Isabelle Taylor8d49fa02018-10-26 13:23:00 +01002180 std::string cp = event.need_cp() ? "needed" : "not needed";
2181 sprintf(line,
2182 "f2fs_sync_file_exit: dev = (%d,%d), ino = %lu, checkpoint is %s, "
2183 "datasync = %d, ret = %d",
2184 static_cast<int>(event.dev() >> 20),
2185 static_cast<int>(event.dev() & ((1U << 20) - 1)), event.ino(),
2186 cp.c_str(), event.datasync(), event.ret());
Florian Mayer1d8956a2018-04-10 13:59:19 +01002187 return std::string(line);
2188}
2189std::string FormatF2fsSyncFs(const F2fsSyncFsFtraceEvent& event) {
2190 char line[2048];
2191 sprintf(line, "f2fs_sync_fs: TODO(fmayer): add format");
2192 return std::string(line);
2193}
2194std::string FormatF2fsTruncate(const F2fsTruncateFtraceEvent& event) {
2195 char line[2048];
2196 sprintf(line, "f2fs_truncate: TODO(fmayer): add format");
2197 return std::string(line);
2198}
2199std::string FormatF2fsTruncateBlocksEnter(
2200 const F2fsTruncateBlocksEnterFtraceEvent& event) {
2201 char line[2048];
2202 sprintf(line, "f2fs_truncate_blocks_enter: TODO(fmayer): add format");
2203 return std::string(line);
2204}
2205std::string FormatF2fsTruncateBlocksExit(
2206 const F2fsTruncateBlocksExitFtraceEvent& event) {
2207 char line[2048];
2208 sprintf(line, "f2fs_truncate_blocks_exit: TODO(fmayer): add format");
2209 return std::string(line);
2210}
2211std::string FormatF2fsTruncateDataBlocksRange(
2212 const F2fsTruncateDataBlocksRangeFtraceEvent& event) {
2213 char line[2048];
2214 sprintf(line, "f2fs_truncate_data_blocks_range: TODO(fmayer): add format");
2215 return std::string(line);
2216}
2217std::string FormatF2fsTruncateInodeBlocksEnter(
2218 const F2fsTruncateInodeBlocksEnterFtraceEvent& event) {
2219 char line[2048];
2220 sprintf(line, "f2fs_truncate_inode_blocks_enter: TODO(fmayer): add format");
2221 return std::string(line);
2222}
2223std::string FormatF2fsTruncateInodeBlocksExit(
2224 const F2fsTruncateInodeBlocksExitFtraceEvent& event) {
2225 char line[2048];
2226 sprintf(line, "f2fs_truncate_inode_blocks_exit: TODO(fmayer): add format");
2227 return std::string(line);
2228}
2229std::string FormatF2fsTruncateNode(const F2fsTruncateNodeFtraceEvent& event) {
2230 char line[2048];
2231 sprintf(line, "f2fs_truncate_node: TODO(fmayer): add format");
2232 return std::string(line);
2233}
2234std::string FormatF2fsTruncateNodesEnter(
2235 const F2fsTruncateNodesEnterFtraceEvent& event) {
2236 char line[2048];
2237 sprintf(line, "f2fs_truncate_nodes_enter: TODO(fmayer): add format");
2238 return std::string(line);
2239}
2240std::string FormatF2fsTruncateNodesExit(
2241 const F2fsTruncateNodesExitFtraceEvent& event) {
2242 char line[2048];
2243 sprintf(line, "f2fs_truncate_nodes_exit: TODO(fmayer): add format");
2244 return std::string(line);
2245}
2246std::string FormatF2fsTruncatePartialNodes(
2247 const F2fsTruncatePartialNodesFtraceEvent& event) {
2248 char line[2048];
2249 sprintf(line, "f2fs_truncate_partial_nodes: TODO(fmayer): add format");
2250 return std::string(line);
2251}
2252std::string FormatF2fsUnlinkEnter(const F2fsUnlinkEnterFtraceEvent& event) {
2253 char line[2048];
2254 sprintf(line, "f2fs_unlink_enter: TODO(fmayer): add format");
2255 return std::string(line);
2256}
2257std::string FormatF2fsUnlinkExit(const F2fsUnlinkExitFtraceEvent& event) {
2258 char line[2048];
2259 sprintf(line, "f2fs_unlink_exit: TODO(fmayer): add format");
2260 return std::string(line);
2261}
2262std::string FormatF2fsVmPageMkwrite(const F2fsVmPageMkwriteFtraceEvent& event) {
2263 char line[2048];
2264 sprintf(line, "f2fs_vm_page_mkwrite: TODO(fmayer): add format");
2265 return std::string(line);
2266}
2267std::string FormatF2fsWriteBegin(const F2fsWriteBeginFtraceEvent& event) {
2268 char line[2048];
Isabelle Taylor8d49fa02018-10-26 13:23:00 +01002269 sprintf(
2270 line,
2271 "f2fs_write_begin: dev = (%d,%d), ino %lu, pos %lld, len %u, flags %u",
2272 static_cast<int>(event.dev() >> 20),
2273 static_cast<int>(event.dev() & ((1U << 20) - 1)), event.ino(),
2274 event.pos(), event.len(), event.flags());
Florian Mayer1d8956a2018-04-10 13:59:19 +01002275 return std::string(line);
2276}
2277std::string FormatF2fsWriteCheckpoint(
2278 const F2fsWriteCheckpointFtraceEvent& event) {
2279 char line[2048];
2280 sprintf(line, "f2fs_write_checkpoint: TODO(fmayer): add format");
2281 return std::string(line);
2282}
2283std::string FormatF2fsWriteEnd(const F2fsWriteEndFtraceEvent& event) {
2284 char line[2048];
Isabelle Taylor8d49fa02018-10-26 13:23:00 +01002285 sprintf(line,
2286 "f2fs_write_end: dev = (%d,%d), ino %lu, pos %lld, len %u, copied %u",
2287 static_cast<int>(event.dev() >> 20),
2288 static_cast<int>(event.dev() & ((1U << 20) - 1)), event.ino(),
2289 event.pos(), event.len(), event.copied());
2290 return std::string(line);
2291}
2292std::string FormatFenceDestroy(const FenceDestroyFtraceEvent& event) {
2293 char line[2048];
2294 sprintf(line, "fence_destroy: driver=%s timeline=%s context=%u seqno=%u",
2295 event.driver().c_str(), event.timeline().c_str(), event.context(),
2296 event.seqno());
2297 return std::string(line);
2298}
2299std::string FormatFenceEnableSignal(const FenceEnableSignalFtraceEvent& event) {
2300 char line[2048];
2301 sprintf(line,
2302 "fence_enable_signal: driver=%s timeline=%s context=%u seqno=%u",
2303 event.driver().c_str(), event.timeline().c_str(), event.context(),
2304 event.seqno());
2305 return std::string(line);
2306}
2307std::string FormatFenceInit(const FenceInitFtraceEvent& event) {
2308 char line[2048];
2309 sprintf(line, "fence_init: driver=%s timeline=%s context=%u seqno=%u",
2310 event.driver().c_str(), event.timeline().c_str(), event.context(),
2311 event.seqno());
2312 return std::string(line);
2313}
2314std::string FormatFenceSignaled(const FenceSignaledFtraceEvent& event) {
2315 char line[2048];
2316 sprintf(line, "fence_signaled: driver=%s timeline=%s context=%u seqno=%u",
2317 event.driver().c_str(), event.timeline().c_str(), event.context(),
2318 event.seqno());
2319 return std::string(line);
2320}
2321std::string FormatClkDisable(const ClkDisableFtraceEvent& event) {
2322 char line[2048];
2323 sprintf(line, "clk_disable: %s", event.name().c_str());
2324 return std::string(line);
2325}
2326std::string FormatClkEnable(const ClkEnableFtraceEvent& event) {
2327 char line[2048];
2328 sprintf(line, "clk_enable: %s", event.name().c_str());
2329 return std::string(line);
2330}
2331std::string FormatClkSetRate(const ClkSetRateFtraceEvent& event) {
2332 char line[2048];
2333 sprintf(line, "clk_set_rate: %s %lu", event.name().c_str(), event.rate());
2334 return std::string(line);
2335}
2336std::string FormatIpiEntry(const IpiEntryFtraceEvent& event) {
2337 char line[2048];
2338 sprintf(line, "ipi_entry: (%s)", event.reason().c_str());
2339 return std::string(line);
2340}
2341std::string FormatIpiExit(const IpiExitFtraceEvent& event) {
2342 char line[2048];
2343 sprintf(line, "ipi_exit: (%s)", event.reason().c_str());
Florian Mayer1d8956a2018-04-10 13:59:19 +01002344 return std::string(line);
2345}
Isabelle Taylor4ce49972018-10-19 18:53:15 +01002346std::string FormatAllocPagesIommuEnd(
2347 const AllocPagesIommuEndFtraceEvent& event) {
2348 char line[2048];
2349 // TODO(b/117966147): Translate binary to gfp_flag
2350 sprintf(line, "alloc_pages_iommu_end: gfp_flags=%d order=%d",
2351 event.gfp_flags(), event.order());
2352 return std::string(line);
2353}
2354std::string FormatAllocPagesIommuFail(
2355 const AllocPagesIommuFailFtraceEvent& event) {
2356 char line[2048];
2357 // TODO(b/117966147): Translate binary to gfp_flag
2358 sprintf(line, "alloc_pages_iommu_fail: gfp_flags=%d order=%d",
2359 event.gfp_flags(), event.order());
2360 return std::string(line);
2361}
2362std::string FormatAllocPagesIommuStart(
2363 const AllocPagesIommuStartFtraceEvent& event) {
2364 char line[2048];
2365 // TODO(b/117966147): Translate binary to gfp_flag
2366 sprintf(line, "alloc_pages_iommu_start: gfp_flags=%d order=%d",
2367 event.gfp_flags(), event.order());
2368 return std::string(line);
2369}
2370std::string FormatAllocPagesSysEnd(const AllocPagesSysEndFtraceEvent& event) {
2371 char line[2048];
2372 // TODO(b/117966147): Translate binary to gfp_flag
2373 sprintf(line, "alloc_pages_sys_end: gfp_flags=%d order=%d", event.gfp_flags(),
2374 event.order());
2375 return std::string(line);
2376}
2377std::string FormatAllocPagesSysFail(const AllocPagesSysFailFtraceEvent& event) {
2378 char line[2048];
2379 // TODO(b/117966147): Translate binary to gfp_flag
2380 sprintf(line, "alloc_pages_sys_fail: gfp_flags=%d order=%d",
2381 event.gfp_flags(), event.order());
2382 return std::string(line);
2383}
2384std::string FormatAllocPagesSysStart(
2385 const AllocPagesSysStartFtraceEvent& event) {
2386 char line[2048];
2387 // TODO(b/117966147): Translate binary to gfp_flag
2388 sprintf(line, "alloc_pages_sys_start: gfp_flags=%d order=%d",
2389 event.gfp_flags(), event.order());
2390 return std::string(line);
2391}
2392std::string FormatDmaAllocContiguousRetry(
2393 const DmaAllocContiguousRetryFtraceEvent& event) {
2394 char line[2048];
2395 sprintf(line, "dma_alloc_contiguous_retry: tries=%d", event.tries());
2396 return std::string(line);
2397}
2398std::string FormatIommuMapRange(const IommuMapRangeFtraceEvent& event) {
2399 char line[2048];
2400 sprintf(line,
2401 "iommu_map_range: v_addr=%p p_addr=%pa chunk_size=0x%lu len=%zu",
2402 event.va(), event.pa(), event.chunk_size(), event.len());
2403 return std::string(line);
2404}
2405std::string FormatIommuSecPtblMapRangeEnd(
2406 const IommuSecPtblMapRangeEndFtraceEvent& event) {
2407 char line[2048];
2408 sprintf(line,
2409 "iommu_sec_ptbl_map_range_end: sec_id=%d num=%d va=%lx pa=%u len=%zu",
2410 event.sec_id(), event.num(), event.va(), event.pa(), event.len());
2411 return std::string(line);
2412}
2413std::string FormatIommuSecPtblMapRangeStart(
2414 const IommuSecPtblMapRangeStartFtraceEvent& event) {
2415 char line[2048];
2416 sprintf(
2417 line,
2418 "iommu_sec_ptbl_map_range_start: sec_id=%d num=%d va=%lx pa=%u len=%zu",
2419 event.sec_id(), event.num(), event.va(), event.pa(), event.len());
2420 return std::string(line);
2421}
2422std::string FormatIonAllocBufferEnd(const IonAllocBufferEndFtraceEvent& event) {
2423 char line[2048];
2424 sprintf(line,
2425 "ion_alloc_buffer_end: client_name=%s heap_name=%s len=%zu mask=0x%x "
2426 "flags=0x%x",
2427 event.client_name().c_str(), event.heap_name().c_str(), event.len(),
2428 event.mask(), event.flags());
2429 return std::string(line);
2430}
2431std::string FormatIonAllocBufferFail(
2432 const IonAllocBufferFailFtraceEvent& event) {
2433 char line[2048];
2434 sprintf(line,
2435 "ion_alloc_buffer_fail: client_name=%s heap_name=%s len=%zu "
2436 "mask=0x%x flags=0x%x error=%ld",
2437 event.client_name().c_str(), event.heap_name().c_str(), event.len(),
2438 event.mask(), event.flags(), event.error());
2439 return std::string(line);
2440}
2441std::string FormatIonAllocBufferFallback(
2442 const IonAllocBufferFallbackFtraceEvent& event) {
2443 char line[2048];
2444 sprintf(line,
2445 "ion_alloc_buffer_fallback: client_name=%s heap_name=%s len=%zu "
2446 "mask=0x%x flags=0x%x error=%ld",
2447 event.client_name().c_str(), event.heap_name().c_str(), event.len(),
2448 event.mask(), event.flags(), event.error());
2449 return std::string(line);
2450}
2451std::string FormatIonAllocBufferStart(
2452 const IonAllocBufferStartFtraceEvent& event) {
2453 char line[2048];
2454 sprintf(line,
2455 "ion_alloc_buffer_start: client_name=%s heap_name=%s len=%zu "
2456 "mask=0x%x flags=0x%x",
2457 event.client_name().c_str(), event.heap_name().c_str(), event.len(),
2458 event.mask(), event.flags());
2459 return std::string(line);
2460}
2461std::string FormatIonCpAllocRetry(const IonCpAllocRetryFtraceEvent& event) {
2462 char line[2048];
2463 sprintf(line, "ion_cp_alloc_retry: tries=%d", event.tries());
2464 return std::string(line);
2465}
2466std::string FormatIonCpSecureBufferEnd(
2467 const IonCpSecureBufferEndFtraceEvent& event) {
2468 char line[2048];
2469 sprintf(line,
2470 "ion_cp_secure_buffer_end: heap_name=%s len=%lx align=%lx flags=%lx",
2471 event.heap_name().c_str(), event.len(), event.align(), event.flags());
2472 return std::string(line);
2473}
2474std::string FormatIonCpSecureBufferStart(
2475 const IonCpSecureBufferStartFtraceEvent& event) {
2476 char line[2048];
2477 sprintf(
2478 line,
2479 "ion_cp_secure_buffer_start: heap_name=%s len=%lx align=%lx flags=%lx",
2480 event.heap_name().c_str(), event.len(), event.align(), event.flags());
2481 return std::string(line);
2482}
2483std::string FormatIonHeapGrow(const IonHeapGrowFtraceEvent& event) {
2484 char line[2048];
2485 sprintf(line, "ion_heap_grow: heap_name=%s, len=%zu, total_allocated=%ld",
2486 event.heap_name().c_str(), event.len(), event.total_allocated());
2487 return std::string(line);
2488}
2489std::string FormatIonHeapShrink(const IonHeapShrinkFtraceEvent& event) {
2490 char line[2048];
2491 sprintf(line, "ion_heap_shrink: heap_name=%s, len=%zu, total_allocated=%ld",
2492 event.heap_name().c_str(), event.len(), event.total_allocated());
2493 return std::string(line);
2494}
2495std::string FormatIonPrefetching(const IonPrefetchingFtraceEvent& event) {
2496 char line[2048];
2497 sprintf(line, "ion_prefetching: prefetch size %lx", event.len());
2498 return std::string(line);
2499}
2500std::string FormatIonSecureCmaAddToPoolEnd(
2501 const IonSecureCmaAddToPoolEndFtraceEvent& event) {
2502 char line[2048];
2503 sprintf(
2504 line,
2505 "ion_secure_cma_add_to_pool_end: len %lx, pool total %x is_prefetch %d",
2506 event.len(), event.pool_total(), event.is_prefetch());
2507 return std::string(line);
2508}
2509std::string FormatIonSecureCmaAddToPoolStart(
2510 const IonSecureCmaAddToPoolStartFtraceEvent& event) {
2511 char line[2048];
2512 sprintf(
2513 line,
2514 "ion_secure_cma_add_to_pool_start: len %lx, pool total %x is_prefetch %d",
2515 event.len(), event.pool_total(), event.is_prefetch());
2516 return std::string(line);
2517}
2518std::string FormatIonSecureCmaAllocateEnd(
2519 const IonSecureCmaAllocateEndFtraceEvent& event) {
2520 char line[2048];
2521 sprintf(
2522 line,
2523 "ion_secure_cma_allocate_end: heap_name=%s len=%lx align=%lx flags=%lx",
2524 event.heap_name().c_str(), event.len(), event.align(), event.flags());
2525 return std::string(line);
2526}
2527std::string FormatIonSecureCmaAllocateStart(
2528 const IonSecureCmaAllocateStartFtraceEvent& event) {
2529 char line[2048];
2530 sprintf(
2531 line,
2532 "ion_secure_cma_allocate_start: heap_name=%s len=%lx align=%lx flags=%lx",
2533 event.heap_name().c_str(), event.len(), event.align(), event.flags());
2534 return std::string(line);
2535}
2536std::string FormatIonSecureCmaShrinkPoolEnd(
2537 const IonSecureCmaShrinkPoolEndFtraceEvent& event) {
2538 char line[2048];
2539 sprintf(line,
2540 "ion_secure_cma_shrink_pool_end: drained size %lx, skipped size %lx",
2541 event.drained_size(), event.skipped_size());
2542 return std::string(line);
2543}
2544std::string FormatIonSecureCmaShrinkPoolStart(
2545 const IonSecureCmaShrinkPoolStartFtraceEvent& event) {
2546 char line[2048];
2547 sprintf(
2548 line,
2549 "ion_secure_cma_shrink_pool_start: drained size %lx, skipped size %lx",
2550 event.drained_size(), event.skipped_size());
2551 return std::string(line);
2552}
2553std::string FormatKfree(const KfreeFtraceEvent& event) {
2554 char line[2048];
2555 sprintf(line, "kfree: call_site=%lx ptr=%p", event.call_site(), event.ptr());
2556 return std::string(line);
2557}
2558std::string FormatKmalloc(const KmallocFtraceEvent& event) {
2559 char line[2048];
2560 // TODO(b/117966147): Translate binary to gfp_flag
2561 sprintf(line,
2562 "kmalloc: call_site=%lx ptr=%p bytes_req=%zu bytes_alloc=%zu "
2563 "gfp_flags=%d",
2564 event.call_site(), event.ptr(), event.bytes_req(),
2565 event.bytes_alloc(), event.gfp_flags());
2566 return std::string(line);
2567}
2568std::string FormatKmallocNode(const KmallocNodeFtraceEvent& event) {
2569 char line[2048];
2570 // TODO(b/117966147): Translate binary to gfp_flag
2571 sprintf(line,
2572 "kmalloc_node: call_site=%lx ptr=%p bytes_req=%zu bytes_alloc=%zu "
2573 "gfp_flags=%d node=%d",
2574 event.call_site(), event.ptr(), event.bytes_req(),
2575 event.bytes_alloc(), event.gfp_flags(), event.node());
2576 return std::string(line);
2577}
2578std::string FormatKmemCacheAlloc(const KmemCacheAllocFtraceEvent& event) {
2579 char line[2048];
2580 // TODO(b/117966147): Translate binary to gfp_flag
2581 sprintf(line,
2582 "kmem_cache_alloc: call_site=%lx ptr=%p bytes_req=%zu "
2583 "bytes_alloc=%zu gfp_flags=%d",
2584 event.call_site(), event.ptr(), event.bytes_req(),
2585 event.bytes_alloc(), event.gfp_flags());
2586 return std::string(line);
2587}
2588std::string FormatKmemCacheAllocNode(
2589 const KmemCacheAllocNodeFtraceEvent& event) {
2590 char line[2048];
2591 // TODO(b/117966147): Translate binary to gfp_flag
2592 sprintf(line,
2593 "kmem_cache_alloc_node: call_site=%lx ptr=%p bytes_req=%zu "
2594 "bytes_alloc=%zu gfp_flags=%d node=%d",
2595 event.call_site(), event.ptr(), event.bytes_req(),
2596 event.bytes_alloc(), event.gfp_flags(), event.node());
2597 return std::string(line);
2598}
2599std::string FormatKmemCacheFree(const KmemCacheFreeFtraceEvent& event) {
2600 char line[2048];
2601 sprintf(line, "kmem_cache_free: call_site=%lx ptr=%p", event.call_site(),
2602 event.ptr());
2603 return std::string(line);
2604}
2605std::string FormatMigratePagesEnd(const MigratePagesEndFtraceEvent& event) {
2606 char line[2048];
2607 sprintf(line, "migrate_pages_end: mode=%d", event.mode());
2608 return std::string(line);
2609}
2610std::string FormatMigratePagesStart(const MigratePagesStartFtraceEvent& event) {
2611 char line[2048];
2612 sprintf(line, "migrate_pages_start: mode=%d", event.mode());
2613 return std::string(line);
2614}
2615std::string FormatMigrateRetry(const MigrateRetryFtraceEvent& event) {
2616 char line[2048];
2617 sprintf(line, "migrate_retry: tries=%d", event.tries());
2618 return std::string(line);
2619}
2620std::string FormatMmPageAlloc(const MmPageAllocFtraceEvent& event) {
2621 char line[2048];
2622 // TODO(b/117966147): Translate binary to gfp_flag
2623 // TODO(taylori): Figure out pfn correctly
2624 sprintf(line,
2625 "mm_page_alloc: page=%p pfn=%lu order=%d migratetype=%d gfp_flags=%d",
2626 event.page(), 0, event.order(), event.migratetype(),
2627 event.gfp_flags());
2628 return std::string(line);
2629}
2630std::string FormatMmPageAllocExtfrag(
2631 const MmPageAllocExtfragFtraceEvent& event) {
2632 char line[2048];
2633 // TODO(taylori): Figure out pfn correctly
2634 sprintf(line,
2635 "mm_page_alloc_extfrag: page=%p pfn=%lu alloc_order=%d "
2636 "fallback_order=%d pageblock_order=%d alloc_migratetype=%d "
2637 "fallback_migratetype=%d fragmenting=%d change_ownership=%d",
2638 event.page(), 0, event.alloc_order(), event.fallback_order(), 11 - 1,
2639 event.alloc_migratetype(), event.fallback_migratetype(),
2640 event.fallback_order() < (11 - 1), event.change_ownership());
2641 return std::string(line);
2642}
2643std::string FormatMmPageAllocZoneLocked(
2644 const MmPageAllocZoneLockedFtraceEvent& event) {
2645 char line[2048];
2646 // TODO(taylori): Figure out pfn correctly
2647 sprintf(line,
2648 "mm_page_alloc_zone_locked: page=%p pfn=%lu order=%u migratetype=%d "
2649 "percpu_refill=%d",
2650 event.page(), 0, event.order(), event.migratetype(),
2651 event.order() == 0);
2652 return std::string(line);
2653}
2654std::string FormatMmPageFree(const MmPageFreeFtraceEvent& event) {
2655 char line[2048];
2656 // TODO(taylori): Figure out pfn correctly
2657 sprintf(line, "mm_page_free: page=%p pfn=%lu order=%d", event.page(), 0,
2658 event.order());
2659 return std::string(line);
2660}
2661std::string FormatMmPageFreeBatched(const MmPageFreeBatchedFtraceEvent& event) {
2662 char line[2048];
2663 // TODO(taylori): Figure out pfn correctly
2664 sprintf(line, "mm_page_free_batched: page=%p pfn=%lu order=0 cold=%d",
2665 event.page(), 0, event.cold());
2666 return std::string(line);
2667}
2668std::string FormatMmPagePcpuDrain(const MmPagePcpuDrainFtraceEvent& event) {
2669 char line[2048];
2670 // TODO(taylori): Figure out pfn correctly
2671 sprintf(line, "mm_page_pcpu_drain: page=%p pfn=%lu order=%d migratetype=%d",
2672 event.page(), 0, event.order(), event.migratetype());
2673 return std::string(line);
2674}
2675std::string FormatRssStat(const RssStatFtraceEvent& event) {
2676 char line[2048];
2677 sprintf(line, "rss_stat: member=%d size=%ldKB", event.member(), event.size());
2678 return std::string(line);
2679}
Isabelle Taylorc8c11202018-11-05 11:36:22 +00002680std::string FormatSignalDeliver(const SignalDeliverFtraceEvent& event) {
2681 char line[2048];
2682 sprintf(line, "signal_deliver: sig=%d code=%d sa_flags=%lx", event.sig(),
2683 event.code(), event.sa_flags());
2684 return std::string(line);
2685}
2686std::string FormatSignalGenerate(const SignalGenerateFtraceEvent& event) {
2687 char line[2048];
2688 sprintf(line, "signal_generate: sig=%d code=%d comm=%s pid=%d grp=%d res=%d",
2689 event.sig(), event.code(), event.comm().c_str(), event.pid(),
2690 event.group(), event.result());
2691 return std::string(line);
2692}
Florian Mayer1d8956a2018-04-10 13:59:19 +01002693
Hector Dearman85ef5362018-03-27 14:48:47 +01002694std::string FormatEventText(const protos::FtraceEvent& event) {
2695 if (event.has_binder_lock()) {
2696 const auto& inner = event.binder_lock();
2697 return FormatBinderLock(inner);
2698 } else if (event.has_binder_locked()) {
2699 const auto& inner = event.binder_locked();
2700 return FormatBinderLocked(inner);
2701 } else if (event.has_binder_transaction()) {
2702 const auto& inner = event.binder_transaction();
2703 return FormatBinderTransaction(inner);
2704 } else if (event.has_binder_transaction_received()) {
2705 const auto& inner = event.binder_transaction_received();
2706 return FormatBinderTransactionReceived(inner);
2707 } else if (event.has_binder_unlock()) {
2708 const auto& inner = event.binder_unlock();
2709 return FormatBinderUnlock(inner);
2710 } else if (event.has_block_bio_backmerge()) {
2711 const auto& inner = event.block_bio_backmerge();
2712 return FormatBlockBioBackmerge(inner);
2713 } else if (event.has_block_bio_bounce()) {
2714 const auto& inner = event.block_bio_bounce();
2715 return FormatBlockBioBounce(inner);
2716 } else if (event.has_block_bio_complete()) {
2717 const auto& inner = event.block_bio_complete();
2718 return FormatBlockBioComplete(inner);
2719 } else if (event.has_block_bio_frontmerge()) {
2720 const auto& inner = event.block_bio_frontmerge();
2721 return FormatBlockBioFrontmerge(inner);
2722 } else if (event.has_block_bio_queue()) {
2723 const auto& inner = event.block_bio_queue();
2724 return FormatBlockBioQueue(inner);
2725 } else if (event.has_block_bio_remap()) {
2726 const auto& inner = event.block_bio_remap();
2727 return FormatBlockBioRemap(inner);
2728 } else if (event.has_block_dirty_buffer()) {
2729 const auto& inner = event.block_dirty_buffer();
2730 return FormatBlockDirtyBuffer(inner);
2731 } else if (event.has_block_getrq()) {
2732 const auto& inner = event.block_getrq();
2733 return FormatBlockGetrq(inner);
2734 } else if (event.has_block_plug()) {
2735 const auto& inner = event.block_plug();
2736 return FormatBlockPlug(inner);
2737 } else if (event.has_block_rq_abort()) {
2738 const auto& inner = event.block_rq_abort();
2739 return FormatBlockRqAbort(inner);
2740 } else if (event.has_block_rq_complete()) {
2741 const auto& inner = event.block_rq_complete();
2742 return FormatBlockRqComplete(inner);
2743 } else if (event.has_block_rq_insert()) {
2744 const auto& inner = event.block_rq_insert();
2745 return FormatBlockRqInsert(inner);
2746 } else if (event.has_block_rq_issue()) {
2747 const auto& inner = event.block_rq_issue();
2748 return FormatBlockRqIssue(inner);
2749 } else if (event.has_block_rq_remap()) {
2750 const auto& inner = event.block_rq_remap();
2751 return FormatBlockRqRemap(inner);
2752 } else if (event.has_block_rq_requeue()) {
2753 const auto& inner = event.block_rq_requeue();
2754 return FormatBlockRqRequeue(inner);
2755 } else if (event.has_block_sleeprq()) {
2756 const auto& inner = event.block_sleeprq();
2757 return FormatBlockSleeprq(inner);
2758 } else if (event.has_block_split()) {
2759 const auto& inner = event.block_split();
2760 return FormatBlockSplit(inner);
2761 } else if (event.has_block_touch_buffer()) {
2762 const auto& inner = event.block_touch_buffer();
2763 return FormatBlockTouchBuffer(inner);
2764 } else if (event.has_block_unplug()) {
2765 const auto& inner = event.block_unplug();
2766 return FormatBlockUnplug(inner);
2767 } else if (event.has_mm_compaction_begin()) {
2768 const auto& inner = event.mm_compaction_begin();
2769 return FormatMmCompactionBegin(inner);
2770 } else if (event.has_mm_compaction_defer_compaction()) {
2771 const auto& inner = event.mm_compaction_defer_compaction();
2772 return FormatMmCompactionDeferCompaction(inner);
2773 } else if (event.has_mm_compaction_defer_reset()) {
2774 const auto& inner = event.mm_compaction_defer_reset();
2775 return FormatMmCompactionDeferReset(inner);
2776 } else if (event.has_mm_compaction_deferred()) {
2777 const auto& inner = event.mm_compaction_deferred();
2778 return FormatMmCompactionDeferred(inner);
2779 } else if (event.has_mm_compaction_end()) {
2780 const auto& inner = event.mm_compaction_end();
2781 return FormatMmCompactionEnd(inner);
2782 } else if (event.has_mm_compaction_finished()) {
2783 const auto& inner = event.mm_compaction_finished();
2784 return FormatMmCompactionFinished(inner);
2785 } else if (event.has_mm_compaction_isolate_freepages()) {
2786 const auto& inner = event.mm_compaction_isolate_freepages();
2787 return FormatMmCompactionIsolateFreepages(inner);
2788 } else if (event.has_mm_compaction_isolate_migratepages()) {
2789 const auto& inner = event.mm_compaction_isolate_migratepages();
2790 return FormatMmCompactionIsolateMigratepages(inner);
2791 } else if (event.has_mm_compaction_kcompactd_sleep()) {
2792 const auto& inner = event.mm_compaction_kcompactd_sleep();
2793 return FormatMmCompactionKcompactdSleep(inner);
2794 } else if (event.has_mm_compaction_kcompactd_wake()) {
2795 const auto& inner = event.mm_compaction_kcompactd_wake();
2796 return FormatMmCompactionKcompactdWake(inner);
2797 } else if (event.has_mm_compaction_migratepages()) {
2798 const auto& inner = event.mm_compaction_migratepages();
2799 return FormatMmCompactionMigratepages(inner);
2800 } else if (event.has_mm_compaction_suitable()) {
2801 const auto& inner = event.mm_compaction_suitable();
2802 return FormatMmCompactionSuitable(inner);
2803 } else if (event.has_mm_compaction_try_to_compact_pages()) {
2804 const auto& inner = event.mm_compaction_try_to_compact_pages();
2805 return FormatMmCompactionTryToCompactPages(inner);
2806 } else if (event.has_mm_compaction_wakeup_kcompactd()) {
2807 const auto& inner = event.mm_compaction_wakeup_kcompactd();
2808 return FormatMmCompactionWakeupKcompactd(inner);
2809 } else if (event.has_ext4_alloc_da_blocks()) {
2810 const auto& inner = event.ext4_alloc_da_blocks();
2811 return FormatExt4AllocDaBlocks(inner);
2812 } else if (event.has_ext4_allocate_blocks()) {
2813 const auto& inner = event.ext4_allocate_blocks();
2814 return FormatExt4AllocateBlocks(inner);
2815 } else if (event.has_ext4_allocate_inode()) {
2816 const auto& inner = event.ext4_allocate_inode();
2817 return FormatExt4AllocateInode(inner);
2818 } else if (event.has_ext4_begin_ordered_truncate()) {
2819 const auto& inner = event.ext4_begin_ordered_truncate();
2820 return FormatExt4BeginOrderedTruncate(inner);
2821 } else if (event.has_ext4_collapse_range()) {
2822 const auto& inner = event.ext4_collapse_range();
2823 return FormatExt4CollapseRange(inner);
2824 } else if (event.has_ext4_da_release_space()) {
2825 const auto& inner = event.ext4_da_release_space();
2826 return FormatExt4DaReleaseSpace(inner);
2827 } else if (event.has_ext4_da_reserve_space()) {
2828 const auto& inner = event.ext4_da_reserve_space();
2829 return FormatExt4DaReserveSpace(inner);
2830 } else if (event.has_ext4_da_update_reserve_space()) {
2831 const auto& inner = event.ext4_da_update_reserve_space();
2832 return FormatExt4DaUpdateReserveSpace(inner);
2833 } else if (event.has_ext4_da_write_begin()) {
2834 const auto& inner = event.ext4_da_write_begin();
2835 return FormatExt4DaWriteBegin(inner);
2836 } else if (event.has_ext4_da_write_end()) {
2837 const auto& inner = event.ext4_da_write_end();
2838 return FormatExt4DaWriteEnd(inner);
2839 } else if (event.has_ext4_da_write_pages()) {
2840 const auto& inner = event.ext4_da_write_pages();
2841 return FormatExt4DaWritePages(inner);
2842 } else if (event.has_ext4_da_write_pages_extent()) {
2843 const auto& inner = event.ext4_da_write_pages_extent();
2844 return FormatExt4DaWritePagesExtent(inner);
2845 } else if (event.has_ext4_discard_blocks()) {
2846 const auto& inner = event.ext4_discard_blocks();
2847 return FormatExt4DiscardBlocks(inner);
2848 } else if (event.has_ext4_discard_preallocations()) {
2849 const auto& inner = event.ext4_discard_preallocations();
2850 return FormatExt4DiscardPreallocations(inner);
2851 } else if (event.has_ext4_drop_inode()) {
2852 const auto& inner = event.ext4_drop_inode();
2853 return FormatExt4DropInode(inner);
2854 } else if (event.has_ext4_es_cache_extent()) {
2855 const auto& inner = event.ext4_es_cache_extent();
2856 return FormatExt4EsCacheExtent(inner);
2857 } else if (event.has_ext4_es_find_delayed_extent_range_enter()) {
2858 const auto& inner = event.ext4_es_find_delayed_extent_range_enter();
2859 return FormatExt4EsFindDelayedExtentRangeEnter(inner);
2860 } else if (event.has_ext4_es_find_delayed_extent_range_exit()) {
2861 const auto& inner = event.ext4_es_find_delayed_extent_range_exit();
2862 return FormatExt4EsFindDelayedExtentRangeExit(inner);
2863 } else if (event.has_ext4_es_insert_extent()) {
2864 const auto& inner = event.ext4_es_insert_extent();
2865 return FormatExt4EsInsertExtent(inner);
2866 } else if (event.has_ext4_es_lookup_extent_enter()) {
2867 const auto& inner = event.ext4_es_lookup_extent_enter();
2868 return FormatExt4EsLookupExtentEnter(inner);
2869 } else if (event.has_ext4_es_lookup_extent_exit()) {
2870 const auto& inner = event.ext4_es_lookup_extent_exit();
2871 return FormatExt4EsLookupExtentExit(inner);
2872 } else if (event.has_ext4_es_remove_extent()) {
2873 const auto& inner = event.ext4_es_remove_extent();
2874 return FormatExt4EsRemoveExtent(inner);
2875 } else if (event.has_ext4_es_shrink()) {
2876 const auto& inner = event.ext4_es_shrink();
2877 return FormatExt4EsShrink(inner);
2878 } else if (event.has_ext4_es_shrink_count()) {
2879 const auto& inner = event.ext4_es_shrink_count();
2880 return FormatExt4EsShrinkCount(inner);
2881 } else if (event.has_ext4_es_shrink_scan_enter()) {
2882 const auto& inner = event.ext4_es_shrink_scan_enter();
2883 return FormatExt4EsShrinkScanEnter(inner);
2884 } else if (event.has_ext4_es_shrink_scan_exit()) {
2885 const auto& inner = event.ext4_es_shrink_scan_exit();
2886 return FormatExt4EsShrinkScanExit(inner);
2887 } else if (event.has_ext4_evict_inode()) {
2888 const auto& inner = event.ext4_evict_inode();
2889 return FormatExt4EvictInode(inner);
2890 } else if (event.has_ext4_ext_convert_to_initialized_enter()) {
2891 const auto& inner = event.ext4_ext_convert_to_initialized_enter();
2892 return FormatExt4ExtConvertToInitializedEnter(inner);
2893 } else if (event.has_ext4_ext_convert_to_initialized_fastpath()) {
2894 const auto& inner = event.ext4_ext_convert_to_initialized_fastpath();
2895 return FormatExt4ExtConvertToInitializedFastpath(inner);
2896 } else if (event.has_ext4_ext_handle_unwritten_extents()) {
2897 const auto& inner = event.ext4_ext_handle_unwritten_extents();
2898 return FormatExt4ExtHandleUnwrittenExtents(inner);
2899 } else if (event.has_ext4_ext_in_cache()) {
2900 const auto& inner = event.ext4_ext_in_cache();
2901 return FormatExt4ExtInCache(inner);
2902 } else if (event.has_ext4_ext_load_extent()) {
2903 const auto& inner = event.ext4_ext_load_extent();
2904 return FormatExt4ExtLoadExtent(inner);
2905 } else if (event.has_ext4_ext_map_blocks_enter()) {
2906 const auto& inner = event.ext4_ext_map_blocks_enter();
2907 return FormatExt4ExtMapBlocksEnter(inner);
2908 } else if (event.has_ext4_ext_map_blocks_exit()) {
2909 const auto& inner = event.ext4_ext_map_blocks_exit();
2910 return FormatExt4ExtMapBlocksExit(inner);
2911 } else if (event.has_ext4_ext_put_in_cache()) {
2912 const auto& inner = event.ext4_ext_put_in_cache();
2913 return FormatExt4ExtPutInCache(inner);
2914 } else if (event.has_ext4_ext_remove_space()) {
2915 const auto& inner = event.ext4_ext_remove_space();
2916 return FormatExt4ExtRemoveSpace(inner);
2917 } else if (event.has_ext4_ext_remove_space_done()) {
2918 const auto& inner = event.ext4_ext_remove_space_done();
2919 return FormatExt4ExtRemoveSpaceDone(inner);
2920 } else if (event.has_ext4_ext_rm_idx()) {
2921 const auto& inner = event.ext4_ext_rm_idx();
2922 return FormatExt4ExtRmIdx(inner);
2923 } else if (event.has_ext4_ext_rm_leaf()) {
2924 const auto& inner = event.ext4_ext_rm_leaf();
2925 return FormatExt4ExtRmLeaf(inner);
2926 } else if (event.has_ext4_ext_show_extent()) {
2927 const auto& inner = event.ext4_ext_show_extent();
2928 return FormatExt4ExtShowExtent(inner);
2929 } else if (event.has_ext4_fallocate_enter()) {
2930 const auto& inner = event.ext4_fallocate_enter();
2931 return FormatExt4FallocateEnter(inner);
2932 } else if (event.has_ext4_fallocate_exit()) {
2933 const auto& inner = event.ext4_fallocate_exit();
2934 return FormatExt4FallocateExit(inner);
2935 } else if (event.has_ext4_find_delalloc_range()) {
2936 const auto& inner = event.ext4_find_delalloc_range();
2937 return FormatExt4FindDelallocRange(inner);
2938 } else if (event.has_ext4_forget()) {
2939 const auto& inner = event.ext4_forget();
2940 return FormatExt4Forget(inner);
2941 } else if (event.has_ext4_free_blocks()) {
2942 const auto& inner = event.ext4_free_blocks();
2943 return FormatExt4FreeBlocks(inner);
2944 } else if (event.has_ext4_free_inode()) {
2945 const auto& inner = event.ext4_free_inode();
2946 return FormatExt4FreeInode(inner);
2947 } else if (event.has_ext4_get_implied_cluster_alloc_exit()) {
2948 const auto& inner = event.ext4_get_implied_cluster_alloc_exit();
2949 return FormatExt4GetImpliedClusterAllocExit(inner);
2950 } else if (event.has_ext4_get_reserved_cluster_alloc()) {
2951 const auto& inner = event.ext4_get_reserved_cluster_alloc();
2952 return FormatExt4GetReservedClusterAlloc(inner);
2953 } else if (event.has_ext4_ind_map_blocks_enter()) {
2954 const auto& inner = event.ext4_ind_map_blocks_enter();
2955 return FormatExt4IndMapBlocksEnter(inner);
2956 } else if (event.has_ext4_ind_map_blocks_exit()) {
2957 const auto& inner = event.ext4_ind_map_blocks_exit();
2958 return FormatExt4IndMapBlocksExit(inner);
2959 } else if (event.has_ext4_insert_range()) {
2960 const auto& inner = event.ext4_insert_range();
2961 return FormatExt4InsertRange(inner);
2962 } else if (event.has_ext4_invalidatepage()) {
2963 const auto& inner = event.ext4_invalidatepage();
2964 return FormatExt4Invalidatepage(inner);
2965 } else if (event.has_ext4_journal_start()) {
2966 const auto& inner = event.ext4_journal_start();
2967 return FormatExt4JournalStart(inner);
2968 } else if (event.has_ext4_journal_start_reserved()) {
2969 const auto& inner = event.ext4_journal_start_reserved();
2970 return FormatExt4JournalStartReserved(inner);
2971 } else if (event.has_ext4_journalled_invalidatepage()) {
2972 const auto& inner = event.ext4_journalled_invalidatepage();
2973 return FormatExt4JournalledInvalidatepage(inner);
2974 } else if (event.has_ext4_journalled_write_end()) {
2975 const auto& inner = event.ext4_journalled_write_end();
2976 return FormatExt4JournalledWriteEnd(inner);
2977 } else if (event.has_ext4_load_inode()) {
2978 const auto& inner = event.ext4_load_inode();
2979 return FormatExt4LoadInode(inner);
2980 } else if (event.has_ext4_load_inode_bitmap()) {
2981 const auto& inner = event.ext4_load_inode_bitmap();
2982 return FormatExt4LoadInodeBitmap(inner);
2983 } else if (event.has_ext4_mark_inode_dirty()) {
2984 const auto& inner = event.ext4_mark_inode_dirty();
2985 return FormatExt4MarkInodeDirty(inner);
2986 } else if (event.has_ext4_mb_bitmap_load()) {
2987 const auto& inner = event.ext4_mb_bitmap_load();
2988 return FormatExt4MbBitmapLoad(inner);
2989 } else if (event.has_ext4_mb_buddy_bitmap_load()) {
2990 const auto& inner = event.ext4_mb_buddy_bitmap_load();
2991 return FormatExt4MbBuddyBitmapLoad(inner);
2992 } else if (event.has_ext4_mb_discard_preallocations()) {
2993 const auto& inner = event.ext4_mb_discard_preallocations();
2994 return FormatExt4MbDiscardPreallocations(inner);
2995 } else if (event.has_ext4_mb_new_group_pa()) {
2996 const auto& inner = event.ext4_mb_new_group_pa();
2997 return FormatExt4MbNewGroupPa(inner);
2998 } else if (event.has_ext4_mb_new_inode_pa()) {
2999 const auto& inner = event.ext4_mb_new_inode_pa();
3000 return FormatExt4MbNewInodePa(inner);
3001 } else if (event.has_ext4_mb_release_group_pa()) {
3002 const auto& inner = event.ext4_mb_release_group_pa();
3003 return FormatExt4MbReleaseGroupPa(inner);
3004 } else if (event.has_ext4_mb_release_inode_pa()) {
3005 const auto& inner = event.ext4_mb_release_inode_pa();
3006 return FormatExt4MbReleaseInodePa(inner);
3007 } else if (event.has_ext4_mballoc_alloc()) {
3008 const auto& inner = event.ext4_mballoc_alloc();
3009 return FormatExt4MballocAlloc(inner);
3010 } else if (event.has_ext4_mballoc_discard()) {
3011 const auto& inner = event.ext4_mballoc_discard();
3012 return FormatExt4MballocDiscard(inner);
3013 } else if (event.has_ext4_mballoc_free()) {
3014 const auto& inner = event.ext4_mballoc_free();
3015 return FormatExt4MballocFree(inner);
3016 } else if (event.has_ext4_mballoc_prealloc()) {
3017 const auto& inner = event.ext4_mballoc_prealloc();
3018 return FormatExt4MballocPrealloc(inner);
3019 } else if (event.has_ext4_other_inode_update_time()) {
3020 const auto& inner = event.ext4_other_inode_update_time();
3021 return FormatExt4OtherInodeUpdateTime(inner);
3022 } else if (event.has_ext4_punch_hole()) {
3023 const auto& inner = event.ext4_punch_hole();
3024 return FormatExt4PunchHole(inner);
3025 } else if (event.has_ext4_read_block_bitmap_load()) {
3026 const auto& inner = event.ext4_read_block_bitmap_load();
3027 return FormatExt4ReadBlockBitmapLoad(inner);
3028 } else if (event.has_ext4_readpage()) {
3029 const auto& inner = event.ext4_readpage();
3030 return FormatExt4Readpage(inner);
3031 } else if (event.has_ext4_releasepage()) {
3032 const auto& inner = event.ext4_releasepage();
3033 return FormatExt4Releasepage(inner);
3034 } else if (event.has_ext4_remove_blocks()) {
3035 const auto& inner = event.ext4_remove_blocks();
3036 return FormatExt4RemoveBlocks(inner);
3037 } else if (event.has_ext4_request_blocks()) {
3038 const auto& inner = event.ext4_request_blocks();
3039 return FormatExt4RequestBlocks(inner);
3040 } else if (event.has_ext4_request_inode()) {
3041 const auto& inner = event.ext4_request_inode();
3042 return FormatExt4RequestInode(inner);
3043 } else if (event.has_ext4_sync_file_enter()) {
3044 const auto& inner = event.ext4_sync_file_enter();
3045 return FormatExt4SyncFileEnter(inner);
3046 } else if (event.has_ext4_sync_file_exit()) {
3047 const auto& inner = event.ext4_sync_file_exit();
3048 return FormatExt4SyncFileExit(inner);
3049 } else if (event.has_ext4_sync_fs()) {
3050 const auto& inner = event.ext4_sync_fs();
3051 return FormatExt4SyncFs(inner);
3052 } else if (event.has_ext4_trim_all_free()) {
3053 const auto& inner = event.ext4_trim_all_free();
3054 return FormatExt4TrimAllFree(inner);
3055 } else if (event.has_ext4_trim_extent()) {
3056 const auto& inner = event.ext4_trim_extent();
3057 return FormatExt4TrimExtent(inner);
3058 } else if (event.has_ext4_truncate_enter()) {
3059 const auto& inner = event.ext4_truncate_enter();
3060 return FormatExt4TruncateEnter(inner);
3061 } else if (event.has_ext4_truncate_exit()) {
3062 const auto& inner = event.ext4_truncate_exit();
3063 return FormatExt4TruncateExit(inner);
3064 } else if (event.has_ext4_unlink_enter()) {
3065 const auto& inner = event.ext4_unlink_enter();
3066 return FormatExt4UnlinkEnter(inner);
3067 } else if (event.has_ext4_unlink_exit()) {
3068 const auto& inner = event.ext4_unlink_exit();
3069 return FormatExt4UnlinkExit(inner);
3070 } else if (event.has_ext4_write_begin()) {
3071 const auto& inner = event.ext4_write_begin();
3072 return FormatExt4WriteBegin(inner);
3073 } else if (event.has_ext4_write_end()) {
3074 const auto& inner = event.ext4_write_end();
3075 return FormatExt4WriteEnd(inner);
3076 } else if (event.has_ext4_writepage()) {
3077 const auto& inner = event.ext4_writepage();
3078 return FormatExt4Writepage(inner);
3079 } else if (event.has_ext4_writepages()) {
3080 const auto& inner = event.ext4_writepages();
3081 return FormatExt4Writepages(inner);
3082 } else if (event.has_ext4_writepages_result()) {
3083 const auto& inner = event.ext4_writepages_result();
3084 return FormatExt4WritepagesResult(inner);
3085 } else if (event.has_ext4_zero_range()) {
3086 const auto& inner = event.ext4_zero_range();
3087 return FormatExt4ZeroRange(inner);
3088 } else if (event.has_print()) {
3089 const auto& inner = event.print();
3090 return FormatPrint(inner);
3091 } else if (event.has_i2c_read()) {
3092 const auto& inner = event.i2c_read();
3093 return FormatI2cRead(inner);
3094 } else if (event.has_i2c_reply()) {
3095 const auto& inner = event.i2c_reply();
3096 return FormatI2cReply(inner);
3097 } else if (event.has_i2c_result()) {
3098 const auto& inner = event.i2c_result();
3099 return FormatI2cResult(inner);
3100 } else if (event.has_i2c_write()) {
3101 const auto& inner = event.i2c_write();
3102 return FormatI2cWrite(inner);
3103 } else if (event.has_irq_handler_entry()) {
3104 const auto& inner = event.irq_handler_entry();
3105 return FormatIrqHandlerEntry(inner);
3106 } else if (event.has_irq_handler_exit()) {
3107 const auto& inner = event.irq_handler_exit();
3108 return FormatIrqHandlerExit(inner);
3109 } else if (event.has_softirq_entry()) {
3110 const auto& inner = event.softirq_entry();
3111 return FormatSoftirqEntry(inner);
3112 } else if (event.has_softirq_exit()) {
3113 const auto& inner = event.softirq_exit();
3114 return FormatSoftirqExit(inner);
3115 } else if (event.has_softirq_raise()) {
3116 const auto& inner = event.softirq_raise();
3117 return FormatSoftirqRaise(inner);
3118 } else if (event.has_lowmemory_kill()) {
3119 const auto& inner = event.lowmemory_kill();
3120 return FormatLowmemoryKill(inner);
3121 } else if (event.has_tracing_mark_write()) {
3122 const auto& inner = event.tracing_mark_write();
3123 return FormatTracingMarkWrite(inner);
3124 } else if (event.has_clock_disable()) {
3125 const auto& inner = event.clock_disable();
3126 return FormatClockDisable(inner);
3127 } else if (event.has_clock_enable()) {
3128 const auto& inner = event.clock_enable();
3129 return FormatClockEnable(inner);
3130 } else if (event.has_clock_set_rate()) {
3131 const auto& inner = event.clock_set_rate();
3132 return FormatClockSetRate(inner);
3133 } else if (event.has_cpu_frequency()) {
3134 const auto& inner = event.cpu_frequency();
3135 return FormatCpuFrequency(inner);
3136 } else if (event.has_cpu_frequency_limits()) {
3137 const auto& inner = event.cpu_frequency_limits();
3138 return FormatCpuFrequencyLimits(inner);
3139 } else if (event.has_cpu_idle()) {
3140 const auto& inner = event.cpu_idle();
3141 return FormatCpuIdle(inner);
3142 } else if (event.has_suspend_resume()) {
3143 const auto& inner = event.suspend_resume();
3144 return FormatSuspendResume(inner);
3145 } else if (event.has_regulator_disable()) {
3146 const auto& inner = event.regulator_disable();
3147 return FormatRegulatorDisable(inner);
3148 } else if (event.has_regulator_disable_complete()) {
3149 const auto& inner = event.regulator_disable_complete();
3150 return FormatRegulatorDisableComplete(inner);
3151 } else if (event.has_regulator_enable()) {
3152 const auto& inner = event.regulator_enable();
3153 return FormatRegulatorEnable(inner);
3154 } else if (event.has_regulator_enable_complete()) {
3155 const auto& inner = event.regulator_enable_complete();
3156 return FormatRegulatorEnableComplete(inner);
3157 } else if (event.has_regulator_enable_delay()) {
3158 const auto& inner = event.regulator_enable_delay();
3159 return FormatRegulatorEnableDelay(inner);
3160 } else if (event.has_regulator_set_voltage()) {
3161 const auto& inner = event.regulator_set_voltage();
3162 return FormatRegulatorSetVoltage(inner);
3163 } else if (event.has_regulator_set_voltage_complete()) {
3164 const auto& inner = event.regulator_set_voltage_complete();
3165 return FormatRegulatorSetVoltageComplete(inner);
3166 } else if (event.has_sched_blocked_reason()) {
3167 const auto& inner = event.sched_blocked_reason();
3168 return FormatSchedBlockedReason(inner);
3169 } else if (event.has_sched_cpu_hotplug()) {
3170 const auto& inner = event.sched_cpu_hotplug();
3171 return FormatSchedCpuHotplug(inner);
3172 } else if (event.has_sched_switch()) {
3173 const auto& inner = event.sched_switch();
3174 return FormatSchedSwitch(inner);
3175 } else if (event.has_sched_wakeup()) {
3176 const auto& inner = event.sched_wakeup();
3177 return FormatSchedWakeup(inner);
3178 } else if (event.has_sched_wakeup_new()) {
3179 const auto& inner = event.sched_wakeup_new();
3180 return FormatSchedWakeupNew(inner);
3181 } else if (event.has_sync_pt()) {
3182 const auto& inner = event.sync_pt();
3183 return FormatSyncPt(inner);
3184 } else if (event.has_sync_timeline()) {
3185 const auto& inner = event.sync_timeline();
3186 return FormatSyncTimeline(inner);
3187 } else if (event.has_sync_wait()) {
3188 const auto& inner = event.sync_wait();
3189 return FormatSyncWait(inner);
3190 } else if (event.has_mm_vmscan_direct_reclaim_begin()) {
3191 const auto& inner = event.mm_vmscan_direct_reclaim_begin();
3192 return FormatMmVmscanDirectReclaimBegin(inner);
3193 } else if (event.has_mm_vmscan_direct_reclaim_end()) {
3194 const auto& inner = event.mm_vmscan_direct_reclaim_end();
3195 return FormatMmVmscanDirectReclaimEnd(inner);
3196 } else if (event.has_mm_vmscan_kswapd_sleep()) {
3197 const auto& inner = event.mm_vmscan_kswapd_sleep();
3198 return FormatMmVmscanKswapdSleep(inner);
3199 } else if (event.has_mm_vmscan_kswapd_wake()) {
3200 const auto& inner = event.mm_vmscan_kswapd_wake();
3201 return FormatMmVmscanKswapdWake(inner);
3202 } else if (event.has_workqueue_activate_work()) {
3203 const auto& inner = event.workqueue_activate_work();
3204 return FormatWorkqueueActivateWork(inner);
3205 } else if (event.has_workqueue_execute_end()) {
3206 const auto& inner = event.workqueue_execute_end();
3207 return FormatWorkqueueExecuteEnd(inner);
3208 } else if (event.has_workqueue_execute_start()) {
3209 const auto& inner = event.workqueue_execute_start();
3210 return FormatWorkqueueExecuteStart(inner);
3211 } else if (event.has_workqueue_queue_work()) {
3212 const auto& inner = event.workqueue_queue_work();
3213 return FormatWorkqueueQueueWork(inner);
3214 } else if (event.has_sched_process_fork()) {
3215 const auto& inner = event.sched_process_fork();
3216 return FormatSchedProcessFork(inner);
3217 } else if (event.has_sched_process_hang()) {
3218 const auto& inner = event.sched_process_hang();
3219 return FormatSchedProcessHang(inner);
3220 } else if (event.has_sched_process_free()) {
3221 const auto& inner = event.sched_process_free();
3222 return FormatSchedProcessFree(inner);
3223 } else if (event.has_sched_process_exec()) {
3224 const auto& inner = event.sched_process_exec();
3225 return FormatSchedProcessExec(inner);
3226 } else if (event.has_sched_process_exit()) {
3227 const auto& inner = event.sched_process_exit();
3228 return FormatSchedProcessExit(inner);
3229 } else if (event.has_sched_process_wait()) {
3230 const auto& inner = event.sched_process_wait();
3231 return FormatSchedProcessWait(inner);
3232 } else if (event.has_task_rename()) {
3233 const auto& inner = event.task_rename();
3234 return FormatTaskRename(inner);
3235 } else if (event.has_task_newtask()) {
3236 const auto& inner = event.task_newtask();
3237 return FormatTaskNewtask(inner);
Florian Mayer1d8956a2018-04-10 13:59:19 +01003238 } else if (event.has_f2fs_do_submit_bio()) {
3239 const auto& inner = event.f2fs_do_submit_bio();
3240 return FormatF2fsDoSubmitBio(inner);
3241 } else if (event.has_f2fs_evict_inode()) {
3242 const auto& inner = event.f2fs_evict_inode();
3243 return FormatF2fsEvictInode(inner);
3244 } else if (event.has_f2fs_fallocate()) {
3245 const auto& inner = event.f2fs_fallocate();
3246 return FormatF2fsFallocate(inner);
3247 } else if (event.has_f2fs_get_data_block()) {
3248 const auto& inner = event.f2fs_get_data_block();
3249 return FormatF2fsGetDataBlock(inner);
3250 } else if (event.has_f2fs_get_victim()) {
3251 const auto& inner = event.f2fs_get_victim();
3252 return FormatF2fsGetVictim(inner);
3253 } else if (event.has_f2fs_iget()) {
3254 const auto& inner = event.f2fs_iget();
3255 return FormatF2fsIget(inner);
3256 } else if (event.has_f2fs_iget_exit()) {
3257 const auto& inner = event.f2fs_iget_exit();
3258 return FormatF2fsIgetExit(inner);
3259 } else if (event.has_f2fs_new_inode()) {
3260 const auto& inner = event.f2fs_new_inode();
3261 return FormatF2fsNewInode(inner);
3262 } else if (event.has_f2fs_readpage()) {
3263 const auto& inner = event.f2fs_readpage();
3264 return FormatF2fsReadpage(inner);
3265 } else if (event.has_f2fs_reserve_new_block()) {
3266 const auto& inner = event.f2fs_reserve_new_block();
3267 return FormatF2fsReserveNewBlock(inner);
3268 } else if (event.has_f2fs_set_page_dirty()) {
3269 const auto& inner = event.f2fs_set_page_dirty();
3270 return FormatF2fsSetPageDirty(inner);
3271 } else if (event.has_f2fs_submit_write_page()) {
3272 const auto& inner = event.f2fs_submit_write_page();
3273 return FormatF2fsSubmitWritePage(inner);
3274 } else if (event.has_f2fs_sync_file_enter()) {
3275 const auto& inner = event.f2fs_sync_file_enter();
3276 return FormatF2fsSyncFileEnter(inner);
3277 } else if (event.has_f2fs_sync_file_exit()) {
3278 const auto& inner = event.f2fs_sync_file_exit();
3279 return FormatF2fsSyncFileExit(inner);
3280 } else if (event.has_f2fs_sync_fs()) {
3281 const auto& inner = event.f2fs_sync_fs();
3282 return FormatF2fsSyncFs(inner);
3283 } else if (event.has_f2fs_truncate()) {
3284 const auto& inner = event.f2fs_truncate();
3285 return FormatF2fsTruncate(inner);
3286 } else if (event.has_f2fs_truncate_blocks_enter()) {
3287 const auto& inner = event.f2fs_truncate_blocks_enter();
3288 return FormatF2fsTruncateBlocksEnter(inner);
3289 } else if (event.has_f2fs_truncate_blocks_exit()) {
3290 const auto& inner = event.f2fs_truncate_blocks_exit();
3291 return FormatF2fsTruncateBlocksExit(inner);
3292 } else if (event.has_f2fs_truncate_data_blocks_range()) {
3293 const auto& inner = event.f2fs_truncate_data_blocks_range();
3294 return FormatF2fsTruncateDataBlocksRange(inner);
3295 } else if (event.has_f2fs_truncate_inode_blocks_enter()) {
3296 const auto& inner = event.f2fs_truncate_inode_blocks_enter();
3297 return FormatF2fsTruncateInodeBlocksEnter(inner);
3298 } else if (event.has_f2fs_truncate_inode_blocks_exit()) {
3299 const auto& inner = event.f2fs_truncate_inode_blocks_exit();
3300 return FormatF2fsTruncateInodeBlocksExit(inner);
3301 } else if (event.has_f2fs_truncate_node()) {
3302 const auto& inner = event.f2fs_truncate_node();
3303 return FormatF2fsTruncateNode(inner);
3304 } else if (event.has_f2fs_truncate_nodes_enter()) {
3305 const auto& inner = event.f2fs_truncate_nodes_enter();
3306 return FormatF2fsTruncateNodesEnter(inner);
3307 } else if (event.has_f2fs_truncate_nodes_exit()) {
3308 const auto& inner = event.f2fs_truncate_nodes_exit();
3309 return FormatF2fsTruncateNodesExit(inner);
3310 } else if (event.has_f2fs_truncate_partial_nodes()) {
3311 const auto& inner = event.f2fs_truncate_partial_nodes();
3312 return FormatF2fsTruncatePartialNodes(inner);
3313 } else if (event.has_f2fs_unlink_enter()) {
3314 const auto& inner = event.f2fs_unlink_enter();
3315 return FormatF2fsUnlinkEnter(inner);
3316 } else if (event.has_f2fs_unlink_exit()) {
3317 const auto& inner = event.f2fs_unlink_exit();
3318 return FormatF2fsUnlinkExit(inner);
3319 } else if (event.has_f2fs_vm_page_mkwrite()) {
3320 const auto& inner = event.f2fs_vm_page_mkwrite();
3321 return FormatF2fsVmPageMkwrite(inner);
3322 } else if (event.has_f2fs_write_begin()) {
3323 const auto& inner = event.f2fs_write_begin();
3324 return FormatF2fsWriteBegin(inner);
3325 } else if (event.has_f2fs_write_checkpoint()) {
3326 const auto& inner = event.f2fs_write_checkpoint();
3327 return FormatF2fsWriteCheckpoint(inner);
3328 } else if (event.has_f2fs_write_end()) {
3329 const auto& inner = event.f2fs_write_end();
3330 return FormatF2fsWriteEnd(inner);
Isabelle Taylor4ce49972018-10-19 18:53:15 +01003331 } else if (event.has_alloc_pages_iommu_end()) {
3332 const auto& inner = event.alloc_pages_iommu_end();
3333 return FormatAllocPagesIommuEnd(inner);
Isabelle Taylor4ce49972018-10-19 18:53:15 +01003334 } else if (event.has_alloc_pages_iommu_fail()) {
3335 const auto& inner = event.alloc_pages_iommu_fail();
3336 return FormatAllocPagesIommuFail(inner);
3337 } else if (event.has_alloc_pages_iommu_start()) {
3338 const auto& inner = event.alloc_pages_iommu_start();
3339 return FormatAllocPagesIommuStart(inner);
3340 } else if (event.has_alloc_pages_sys_end()) {
3341 const auto& inner = event.alloc_pages_sys_end();
3342 return FormatAllocPagesSysEnd(inner);
3343 } else if (event.has_alloc_pages_sys_fail()) {
3344 const auto& inner = event.alloc_pages_sys_fail();
3345 return FormatAllocPagesSysFail(inner);
3346 } else if (event.has_alloc_pages_sys_start()) {
3347 const auto& inner = event.alloc_pages_sys_start();
3348 return FormatAllocPagesSysStart(inner);
3349 } else if (event.has_dma_alloc_contiguous_retry()) {
3350 const auto& inner = event.dma_alloc_contiguous_retry();
3351 return FormatDmaAllocContiguousRetry(inner);
3352 } else if (event.has_iommu_map_range()) {
3353 const auto& inner = event.iommu_map_range();
3354 return FormatIommuMapRange(inner);
3355 } else if (event.has_iommu_sec_ptbl_map_range_end()) {
3356 const auto& inner = event.iommu_sec_ptbl_map_range_end();
3357 return FormatIommuSecPtblMapRangeEnd(inner);
3358 } else if (event.has_iommu_sec_ptbl_map_range_start()) {
3359 const auto& inner = event.iommu_sec_ptbl_map_range_start();
3360 return FormatIommuSecPtblMapRangeStart(inner);
3361 } else if (event.has_ion_alloc_buffer_end()) {
3362 const auto& inner = event.ion_alloc_buffer_end();
3363 return FormatIonAllocBufferEnd(inner);
3364 } else if (event.has_ion_alloc_buffer_fail()) {
3365 const auto& inner = event.ion_alloc_buffer_fail();
3366 return FormatIonAllocBufferFail(inner);
3367 } else if (event.has_ion_alloc_buffer_fallback()) {
3368 const auto& inner = event.ion_alloc_buffer_fallback();
3369 return FormatIonAllocBufferFallback(inner);
3370 } else if (event.has_ion_alloc_buffer_start()) {
3371 const auto& inner = event.ion_alloc_buffer_start();
3372 return FormatIonAllocBufferStart(inner);
3373 } else if (event.has_ion_cp_alloc_retry()) {
3374 const auto& inner = event.ion_cp_alloc_retry();
3375 return FormatIonCpAllocRetry(inner);
3376 } else if (event.has_ion_cp_secure_buffer_end()) {
3377 const auto& inner = event.ion_cp_secure_buffer_end();
3378 return FormatIonCpSecureBufferEnd(inner);
3379 } else if (event.has_ion_cp_secure_buffer_start()) {
3380 const auto& inner = event.ion_cp_secure_buffer_start();
3381 return FormatIonCpSecureBufferStart(inner);
3382 } else if (event.has_ion_heap_grow()) {
3383 const auto& inner = event.ion_heap_grow();
3384 return FormatIonHeapGrow(inner);
3385 } else if (event.has_ion_heap_shrink()) {
3386 const auto& inner = event.ion_heap_shrink();
3387 return FormatIonHeapShrink(inner);
3388 } else if (event.has_ion_prefetching()) {
3389 const auto& inner = event.ion_prefetching();
3390 return FormatIonPrefetching(inner);
3391 } else if (event.has_ion_secure_cma_add_to_pool_end()) {
3392 const auto& inner = event.ion_secure_cma_add_to_pool_end();
3393 return FormatIonSecureCmaAddToPoolEnd(inner);
3394 } else if (event.has_ion_secure_cma_add_to_pool_start()) {
3395 const auto& inner = event.ion_secure_cma_add_to_pool_start();
3396 return FormatIonSecureCmaAddToPoolStart(inner);
3397 } else if (event.has_ion_secure_cma_allocate_end()) {
3398 const auto& inner = event.ion_secure_cma_allocate_end();
3399 return FormatIonSecureCmaAllocateEnd(inner);
3400 } else if (event.has_ion_secure_cma_allocate_start()) {
3401 const auto& inner = event.ion_secure_cma_allocate_start();
3402 return FormatIonSecureCmaAllocateStart(inner);
3403 } else if (event.has_ion_secure_cma_shrink_pool_end()) {
3404 const auto& inner = event.ion_secure_cma_shrink_pool_end();
3405 return FormatIonSecureCmaShrinkPoolEnd(inner);
3406 } else if (event.has_ion_secure_cma_shrink_pool_start()) {
3407 const auto& inner = event.ion_secure_cma_shrink_pool_start();
3408 return FormatIonSecureCmaShrinkPoolStart(inner);
3409 } else if (event.has_kfree()) {
3410 const auto& inner = event.kfree();
3411 return FormatKfree(inner);
3412 } else if (event.has_kmalloc()) {
3413 const auto& inner = event.kmalloc();
3414 return FormatKmalloc(inner);
3415 } else if (event.has_kmalloc_node()) {
3416 const auto& inner = event.kmalloc_node();
3417 return FormatKmallocNode(inner);
3418 } else if (event.has_kmem_cache_alloc()) {
3419 const auto& inner = event.kmem_cache_alloc();
3420 return FormatKmemCacheAlloc(inner);
3421 } else if (event.has_kmem_cache_alloc_node()) {
3422 const auto& inner = event.kmem_cache_alloc_node();
3423 return FormatKmemCacheAllocNode(inner);
3424 } else if (event.has_kmem_cache_free()) {
3425 const auto& inner = event.kmem_cache_free();
3426 return FormatKmemCacheFree(inner);
3427 } else if (event.has_migrate_pages_end()) {
3428 const auto& inner = event.migrate_pages_end();
3429 return FormatMigratePagesEnd(inner);
3430 } else if (event.has_migrate_pages_start()) {
3431 const auto& inner = event.migrate_pages_start();
3432 return FormatMigratePagesStart(inner);
3433 } else if (event.has_migrate_retry()) {
3434 const auto& inner = event.migrate_retry();
3435 return FormatMigrateRetry(inner);
3436 } else if (event.has_mm_page_alloc()) {
3437 const auto& inner = event.mm_page_alloc();
3438 return FormatMmPageAlloc(inner);
3439 } else if (event.has_mm_page_alloc_extfrag()) {
3440 const auto& inner = event.mm_page_alloc_extfrag();
3441 return FormatMmPageAllocExtfrag(inner);
3442 } else if (event.has_mm_page_alloc_zone_locked()) {
3443 const auto& inner = event.mm_page_alloc_zone_locked();
3444 return FormatMmPageAllocZoneLocked(inner);
3445 } else if (event.has_mm_page_free()) {
3446 const auto& inner = event.mm_page_free();
3447 return FormatMmPageFree(inner);
3448 } else if (event.has_mm_page_free_batched()) {
3449 const auto& inner = event.mm_page_free_batched();
3450 return FormatMmPageFreeBatched(inner);
3451 } else if (event.has_mm_page_pcpu_drain()) {
3452 const auto& inner = event.mm_page_pcpu_drain();
3453 return FormatMmPagePcpuDrain(inner);
3454 } else if (event.has_rss_stat()) {
3455 const auto& inner = event.rss_stat();
3456 return FormatRssStat(inner);
Isabelle Taylor8d49fa02018-10-26 13:23:00 +01003457 } else if (event.has_binder_transaction_alloc_buf()) {
3458 const auto& inner = event.binder_transaction_alloc_buf();
3459 return FormatBinderTransactionAllocBuf(inner);
3460 } else if (event.has_fence_destroy()) {
3461 const auto& inner = event.fence_destroy();
3462 return FormatFenceDestroy(inner);
3463 } else if (event.has_fence_enable_signal()) {
3464 const auto& inner = event.fence_enable_signal();
3465 return FormatFenceEnableSignal(inner);
3466 } else if (event.has_fence_init()) {
3467 const auto& inner = event.fence_init();
3468 return FormatFenceInit(inner);
3469 } else if (event.has_fence_signaled()) {
3470 const auto& inner = event.fence_signaled();
3471 return FormatFenceSignaled(inner);
3472 } else if (event.has_clk_disable()) {
3473 const auto& inner = event.clk_disable();
3474 return FormatClkDisable(inner);
3475 } else if (event.has_clk_enable()) {
3476 const auto& inner = event.clk_enable();
3477 return FormatClkEnable(inner);
3478 } else if (event.has_clk_set_rate()) {
3479 const auto& inner = event.clk_set_rate();
3480 return FormatClkSetRate(inner);
3481 } else if (event.has_ipi_entry()) {
3482 const auto& inner = event.ipi_entry();
3483 return FormatIpiEntry(inner);
3484 } else if (event.has_ipi_exit()) {
3485 const auto& inner = event.ipi_exit();
3486 return FormatIpiExit(inner);
Isabelle Taylorc8c11202018-11-05 11:36:22 +00003487 } else if (event.has_signal_deliver()) {
3488 const auto& inner = event.signal_deliver();
3489 return FormatSignalDeliver(inner);
3490 } else if (event.has_signal_generate()) {
3491 const auto& inner = event.signal_generate();
3492 return FormatSignalGenerate(inner);
Hector Dearman85ef5362018-03-27 14:48:47 +01003493 }
Isabelle Taylor4ce49972018-10-19 18:53:15 +01003494
Hector Dearman85ef5362018-03-27 14:48:47 +01003495 return "";
3496}
3497
3498uint64_t TimestampToSeconds(uint64_t timestamp) {
3499 return timestamp / 1000000000ul;
3500}
3501
3502uint64_t TimestampToMicroseconds(uint64_t timestamp) {
3503 return (timestamp / 1000) % 1000000ul;
3504}
3505
Isabelle Taylor0a6b4c72018-10-15 11:30:52 +01003506std::string FormatPrefix(uint64_t timestamp,
Primiano Tucci1c752c12018-10-23 09:27:19 +01003507 uint32_t cpu,
Isabelle Taylor0a6b4c72018-10-15 11:30:52 +01003508 uint32_t pid,
3509 uint32_t tgid,
3510 std::string name) {
Hector Dearman85ef5362018-03-27 14:48:47 +01003511 char line[2048];
3512 uint64_t seconds = TimestampToSeconds(timestamp);
3513 uint64_t useconds = TimestampToMicroseconds(timestamp);
Isabelle Taylor0a6b4c72018-10-15 11:30:52 +01003514 if (pid == 0) {
3515 name = "<idle>";
3516 }
3517 if (tgid == 0) {
3518 sprintf(line,
3519 "%s-%" PRIu32 " (-----) [%03" PRIu32 "] d..3 %" PRIu64
3520 ".%.6" PRIu64 ": ",
3521 name.c_str(), pid, cpu, seconds, useconds);
3522 } else {
3523 sprintf(line,
3524 "%s-%" PRIu32 " (%5" PRIu32 ") [%03" PRIu32 "] d..3 %" PRIu64
3525 ".%.6" PRIu64 ": ",
3526 name.c_str(), pid, tgid, cpu, seconds, useconds);
3527 }
Hector Dearman85ef5362018-03-27 14:48:47 +01003528 return std::string(line);
3529}
3530
3531} // namespace
3532
Isabelle Taylor0a6b4c72018-10-15 11:30:52 +01003533std::string FormatFtraceEvent(
3534 uint64_t timestamp,
Primiano Tucci1c752c12018-10-23 09:27:19 +01003535 uint32_t cpu,
Isabelle Taylor0a6b4c72018-10-15 11:30:52 +01003536 const protos::FtraceEvent& event,
Isabelle Taylor62f35852018-11-08 10:54:39 +00003537 const std::unordered_map<uint32_t /*tid*/, uint32_t /*tgid*/>& thread_map,
3538 std::unordered_map<uint32_t /*tid*/, std::string>& thread_names) {
Isabelle Taylor0a6b4c72018-10-15 11:30:52 +01003539 // Sched_switch events contain the thread name so use that in the prefix.
3540 std::string name;
3541 if (event.has_sched_switch()) {
3542 name = event.sched_switch().prev_comm();
Isabelle Taylor62f35852018-11-08 10:54:39 +00003543 thread_names[event.pid()] = event.sched_switch().prev_comm();
Isabelle Taylor0a6b4c72018-10-15 11:30:52 +01003544 } else {
Isabelle Taylor62f35852018-11-08 10:54:39 +00003545 // For non sched switch events use name stored from a sched switch event.
3546 auto it = thread_names.find(event.pid());
3547 if (it != thread_names.end()) {
3548 name = it->second;
3549 } else {
3550 name = "<...>";
3551 }
Isabelle Taylor0a6b4c72018-10-15 11:30:52 +01003552 }
3553
Hector Dearman85ef5362018-03-27 14:48:47 +01003554 std::string line = FormatEventText(event);
3555 if (line == "")
3556 return "";
Isabelle Taylor0a6b4c72018-10-15 11:30:52 +01003557
3558 // Retrieve the tgid if it exists for the current event pid.
3559 uint32_t pid = event.pid();
3560 uint32_t tgid = 0;
3561 auto it = thread_map.find(pid);
3562 if (it != thread_map.end()) {
3563 tgid = it->second;
3564 }
3565 return FormatPrefix(timestamp, cpu, pid, tgid, name) + line;
Hector Dearman85ef5362018-03-27 14:48:47 +01003566}
3567
3568} // namespace perfetto