Add cpuhp ftrace events

Bug: 162568746
Change-Id: I633757f32df107d669addfaf4cc065a2ae00aa04
diff --git a/Android.bp b/Android.bp
index a5a45c5..cf155f9 100644
--- a/Android.bp
+++ b/Android.bp
@@ -3707,6 +3707,7 @@
     "protos/perfetto/trace/ftrace/cgroup.proto",
     "protos/perfetto/trace/ftrace/clk.proto",
     "protos/perfetto/trace/ftrace/compaction.proto",
+    "protos/perfetto/trace/ftrace/cpuhp.proto",
     "protos/perfetto/trace/ftrace/ext4.proto",
     "protos/perfetto/trace/ftrace/f2fs.proto",
     "protos/perfetto/trace/ftrace/fence.proto",
@@ -3752,6 +3753,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/cgroup.gen.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/clk.gen.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/compaction.gen.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/cpuhp.gen.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/ext4.gen.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/f2fs.gen.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/fence.gen.cc",
@@ -3797,6 +3799,7 @@
     "protos/perfetto/trace/ftrace/cgroup.proto",
     "protos/perfetto/trace/ftrace/clk.proto",
     "protos/perfetto/trace/ftrace/compaction.proto",
+    "protos/perfetto/trace/ftrace/cpuhp.proto",
     "protos/perfetto/trace/ftrace/ext4.proto",
     "protos/perfetto/trace/ftrace/f2fs.proto",
     "protos/perfetto/trace/ftrace/fence.proto",
@@ -3842,6 +3845,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/cgroup.gen.h",
     "external/perfetto/protos/perfetto/trace/ftrace/clk.gen.h",
     "external/perfetto/protos/perfetto/trace/ftrace/compaction.gen.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/cpuhp.gen.h",
     "external/perfetto/protos/perfetto/trace/ftrace/ext4.gen.h",
     "external/perfetto/protos/perfetto/trace/ftrace/f2fs.gen.h",
     "external/perfetto/protos/perfetto/trace/ftrace/fence.gen.h",
@@ -3891,6 +3895,7 @@
     "protos/perfetto/trace/ftrace/cgroup.proto",
     "protos/perfetto/trace/ftrace/clk.proto",
     "protos/perfetto/trace/ftrace/compaction.proto",
+    "protos/perfetto/trace/ftrace/cpuhp.proto",
     "protos/perfetto/trace/ftrace/ext4.proto",
     "protos/perfetto/trace/ftrace/f2fs.proto",
     "protos/perfetto/trace/ftrace/fence.proto",
@@ -3935,6 +3940,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/cgroup.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/clk.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/compaction.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/cpuhp.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/ext4.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/f2fs.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/fence.pb.cc",
@@ -3980,6 +3986,7 @@
     "protos/perfetto/trace/ftrace/cgroup.proto",
     "protos/perfetto/trace/ftrace/clk.proto",
     "protos/perfetto/trace/ftrace/compaction.proto",
+    "protos/perfetto/trace/ftrace/cpuhp.proto",
     "protos/perfetto/trace/ftrace/ext4.proto",
     "protos/perfetto/trace/ftrace/f2fs.proto",
     "protos/perfetto/trace/ftrace/fence.proto",
@@ -4024,6 +4031,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/cgroup.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/clk.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/compaction.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/cpuhp.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/ext4.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/f2fs.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/fence.pb.h",
@@ -4073,6 +4081,7 @@
     "protos/perfetto/trace/ftrace/cgroup.proto",
     "protos/perfetto/trace/ftrace/clk.proto",
     "protos/perfetto/trace/ftrace/compaction.proto",
+    "protos/perfetto/trace/ftrace/cpuhp.proto",
     "protos/perfetto/trace/ftrace/ext4.proto",
     "protos/perfetto/trace/ftrace/f2fs.proto",
     "protos/perfetto/trace/ftrace/fence.proto",
@@ -4118,6 +4127,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/cgroup.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/clk.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/compaction.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/cpuhp.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/ext4.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/f2fs.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/fence.pbzero.cc",
@@ -4163,6 +4173,7 @@
     "protos/perfetto/trace/ftrace/cgroup.proto",
     "protos/perfetto/trace/ftrace/clk.proto",
     "protos/perfetto/trace/ftrace/compaction.proto",
+    "protos/perfetto/trace/ftrace/cpuhp.proto",
     "protos/perfetto/trace/ftrace/ext4.proto",
     "protos/perfetto/trace/ftrace/f2fs.proto",
     "protos/perfetto/trace/ftrace/fence.proto",
@@ -4208,6 +4219,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/cgroup.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/clk.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/compaction.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/cpuhp.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/ext4.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/f2fs.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/fence.pbzero.h",
diff --git a/BUILD b/BUILD
index 576dc0e..0af3576 100644
--- a/BUILD
+++ b/BUILD
@@ -2187,6 +2187,7 @@
         "protos/perfetto/trace/ftrace/cgroup.proto",
         "protos/perfetto/trace/ftrace/clk.proto",
         "protos/perfetto/trace/ftrace/compaction.proto",
+        "protos/perfetto/trace/ftrace/cpuhp.proto",
         "protos/perfetto/trace/ftrace/ext4.proto",
         "protos/perfetto/trace/ftrace/f2fs.proto",
         "protos/perfetto/trace/ftrace/fence.proto",
diff --git a/protos/perfetto/trace/ftrace/all_protos.gni b/protos/perfetto/trace/ftrace/all_protos.gni
index 5eb1823..74f00d3 100644
--- a/protos/perfetto/trace/ftrace/all_protos.gni
+++ b/protos/perfetto/trace/ftrace/all_protos.gni
@@ -25,6 +25,7 @@
   "cgroup.proto",
   "clk.proto",
   "compaction.proto",
+  "cpuhp.proto",
   "ext4.proto",
   "f2fs.proto",
   "fence.proto",
diff --git a/protos/perfetto/trace/ftrace/cpuhp.proto b/protos/perfetto/trace/ftrace/cpuhp.proto
new file mode 100644
index 0000000..3214b51
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/cpuhp.proto
@@ -0,0 +1,31 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+package perfetto.protos;
+
+message CpuhpExitFtraceEvent {
+  optional uint32 cpu = 1;
+  optional int32 idx = 2;
+  optional int32 ret = 3;
+  optional int32 state = 4;
+}
+message CpuhpMultiEnterFtraceEvent {
+  optional uint32 cpu = 1;
+  optional uint64 fun = 2;
+  optional int32 idx = 3;
+  optional int32 target = 4;
+}
+message CpuhpEnterFtraceEvent {
+  optional uint32 cpu = 1;
+  optional uint64 fun = 2;
+  optional int32 idx = 3;
+  optional int32 target = 4;
+}
+message CpuhpLatencyFtraceEvent {
+  optional uint32 cpu = 1;
+  optional int32 ret = 2;
+  optional uint32 state = 3;
+  optional uint64 time = 4;
+}
diff --git a/protos/perfetto/trace/ftrace/ftrace_event.proto b/protos/perfetto/trace/ftrace/ftrace_event.proto
index 72b2f89..3550a9f 100644
--- a/protos/perfetto/trace/ftrace/ftrace_event.proto
+++ b/protos/perfetto/trace/ftrace/ftrace_event.proto
@@ -25,6 +25,7 @@
 import "protos/perfetto/trace/ftrace/cgroup.proto";
 import "protos/perfetto/trace/ftrace/clk.proto";
 import "protos/perfetto/trace/ftrace/compaction.proto";
+import "protos/perfetto/trace/ftrace/cpuhp.proto";
 import "protos/perfetto/trace/ftrace/ext4.proto";
 import "protos/perfetto/trace/ftrace/f2fs.proto";
 import "protos/perfetto/trace/ftrace/fence.proto";
@@ -425,5 +426,9 @@
     GpuMemTotalFtraceEvent gpu_mem_total = 340;
     ThermalTemperatureFtraceEvent thermal_temperature = 341;
     CdevUpdateFtraceEvent cdev_update = 342;
+    CpuhpExitFtraceEvent cpuhp_exit = 343;
+    CpuhpMultiEnterFtraceEvent cpuhp_multi_enter = 344;
+    CpuhpEnterFtraceEvent cpuhp_enter = 345;
+    CpuhpLatencyFtraceEvent cpuhp_latency = 346;
   }
 }
diff --git a/protos/perfetto/trace/perfetto_trace.proto b/protos/perfetto/trace/perfetto_trace.proto
index 0be07f5..e0cb07e 100644
--- a/protos/perfetto/trace/perfetto_trace.proto
+++ b/protos/perfetto/trace/perfetto_trace.proto
@@ -2579,6 +2579,35 @@
 
 // End of protos/perfetto/trace/ftrace/compaction.proto
 
+// Begin of protos/perfetto/trace/ftrace/cpuhp.proto
+
+message CpuhpExitFtraceEvent {
+  optional uint32 cpu = 1;
+  optional int32 idx = 2;
+  optional int32 ret = 3;
+  optional int32 state = 4;
+}
+message CpuhpMultiEnterFtraceEvent {
+  optional uint32 cpu = 1;
+  optional uint64 fun = 2;
+  optional int32 idx = 3;
+  optional int32 target = 4;
+}
+message CpuhpEnterFtraceEvent {
+  optional uint32 cpu = 1;
+  optional uint64 fun = 2;
+  optional int32 idx = 3;
+  optional int32 target = 4;
+}
+message CpuhpLatencyFtraceEvent {
+  optional uint32 cpu = 1;
+  optional int32 ret = 2;
+  optional uint32 state = 3;
+  optional uint64 time = 4;
+}
+
+// End of protos/perfetto/trace/ftrace/cpuhp.proto
+
 // Begin of protos/perfetto/trace/ftrace/ext4.proto
 
 message Ext4DaWriteBeginFtraceEvent {
@@ -4785,6 +4814,10 @@
     GpuMemTotalFtraceEvent gpu_mem_total = 340;
     ThermalTemperatureFtraceEvent thermal_temperature = 341;
     CdevUpdateFtraceEvent cdev_update = 342;
+    CpuhpExitFtraceEvent cpuhp_exit = 343;
+    CpuhpMultiEnterFtraceEvent cpuhp_multi_enter = 344;
+    CpuhpEnterFtraceEvent cpuhp_enter = 345;
+    CpuhpLatencyFtraceEvent cpuhp_latency = 346;
   }
 }
 
diff --git a/src/traced/probes/ftrace/event_info.cc b/src/traced/probes/ftrace/event_info.cc
index a90eca9..fa18e1c 100644
--- a/src/traced/probes/ftrace/event_info.cc
+++ b/src/traced/probes/ftrace/event_info.cc
@@ -1009,6 +1009,82 @@
        kUnsetFtraceId,
        112,
        kUnsetSize},
+      {"cpuhp_exit",
+       "cpuhp",
+       {
+           {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType,
+            "cpu", 1, ProtoSchemaType::kUint32,
+            TranslationStrategy::kInvalidTranslationStrategy},
+           {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType,
+            "idx", 2, ProtoSchemaType::kInt32,
+            TranslationStrategy::kInvalidTranslationStrategy},
+           {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType,
+            "ret", 3, ProtoSchemaType::kInt32,
+            TranslationStrategy::kInvalidTranslationStrategy},
+           {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType,
+            "state", 4, ProtoSchemaType::kInt32,
+            TranslationStrategy::kInvalidTranslationStrategy},
+       },
+       kUnsetFtraceId,
+       343,
+       kUnsetSize},
+      {"cpuhp_multi_enter",
+       "cpuhp",
+       {
+           {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType,
+            "cpu", 1, ProtoSchemaType::kUint32,
+            TranslationStrategy::kInvalidTranslationStrategy},
+           {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType,
+            "fun", 2, ProtoSchemaType::kUint64,
+            TranslationStrategy::kInvalidTranslationStrategy},
+           {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType,
+            "idx", 3, ProtoSchemaType::kInt32,
+            TranslationStrategy::kInvalidTranslationStrategy},
+           {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType,
+            "target", 4, ProtoSchemaType::kInt32,
+            TranslationStrategy::kInvalidTranslationStrategy},
+       },
+       kUnsetFtraceId,
+       344,
+       kUnsetSize},
+      {"cpuhp_enter",
+       "cpuhp",
+       {
+           {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType,
+            "cpu", 1, ProtoSchemaType::kUint32,
+            TranslationStrategy::kInvalidTranslationStrategy},
+           {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType,
+            "fun", 2, ProtoSchemaType::kUint64,
+            TranslationStrategy::kInvalidTranslationStrategy},
+           {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType,
+            "idx", 3, ProtoSchemaType::kInt32,
+            TranslationStrategy::kInvalidTranslationStrategy},
+           {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType,
+            "target", 4, ProtoSchemaType::kInt32,
+            TranslationStrategy::kInvalidTranslationStrategy},
+       },
+       kUnsetFtraceId,
+       345,
+       kUnsetSize},
+      {"cpuhp_latency",
+       "cpuhp",
+       {
+           {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType,
+            "cpu", 1, ProtoSchemaType::kUint32,
+            TranslationStrategy::kInvalidTranslationStrategy},
+           {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType,
+            "ret", 2, ProtoSchemaType::kInt32,
+            TranslationStrategy::kInvalidTranslationStrategy},
+           {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType,
+            "state", 3, ProtoSchemaType::kUint32,
+            TranslationStrategy::kInvalidTranslationStrategy},
+           {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType,
+            "time", 4, ProtoSchemaType::kUint64,
+            TranslationStrategy::kInvalidTranslationStrategy},
+       },
+       kUnsetFtraceId,
+       346,
+       kUnsetSize},
       {"ext4_da_write_begin",
        "ext4",
        {
diff --git a/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_enter/format b/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_enter/format
new file mode 100644
index 0000000..fd990fb
--- /dev/null
+++ b/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_enter/format
@@ -0,0 +1,14 @@
+name: cpuhp_enter
+ID: 33
+format:
+	field:unsigned short common_type;	offset:0;	size:2;	signed:0;
+	field:unsigned char common_flags;	offset:2;	size:1;	signed:0;
+	field:unsigned char common_preempt_count;	offset:3;	size:1;	signed:0;
+	field:int common_pid;	offset:4;	size:4;	signed:1;
+
+	field:unsigned int cpu;	offset:8;	size:4;	signed:0;
+	field:int target;	offset:12;	size:4;	signed:1;
+	field:int idx;	offset:16;	size:4;	signed:1;
+	field:void * fun;	offset:24;	size:8;	signed:0;
+
+print fmt: "cpu: %04u target: %3d step: %3d (%pf)", REC->cpu, REC->target, REC->idx, REC->fun
diff --git a/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_enter/id b/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_enter/id
new file mode 100644
index 0000000..bb95160
--- /dev/null
+++ b/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_enter/id
@@ -0,0 +1 @@
+33
diff --git a/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_exit/format b/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_exit/format
new file mode 100644
index 0000000..ec5fdde
--- /dev/null
+++ b/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_exit/format
@@ -0,0 +1,14 @@
+name: cpuhp_exit
+ID: 34
+format:
+	field:unsigned short common_type;	offset:0;	size:2;	signed:0;
+	field:unsigned char common_flags;	offset:2;	size:1;	signed:0;
+	field:unsigned char common_preempt_count;	offset:3;	size:1;	signed:0;
+	field:int common_pid;	offset:4;	size:4;	signed:1;
+
+	field:unsigned int cpu;	offset:8;	size:4;	signed:0;
+	field:int state;	offset:12;	size:4;	signed:1;
+	field:int idx;	offset:16;	size:4;	signed:1;
+	field:int ret;	offset:20;	size:4;	signed:1;
+
+print fmt: " cpu: %04u  state: %3d step: %3d ret: %d", REC->cpu, REC->state, REC->idx, REC->ret
diff --git a/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_exit/id b/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_exit/id
new file mode 100644
index 0000000..a787364
--- /dev/null
+++ b/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_exit/id
@@ -0,0 +1 @@
+34
diff --git a/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_latency/format b/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_latency/format
new file mode 100644
index 0000000..9d01304
--- /dev/null
+++ b/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_latency/format
@@ -0,0 +1,14 @@
+name: cpuhp_latency
+ID: 35
+format:
+	field:unsigned short common_type;	offset:0;	size:2;	signed:0;
+	field:unsigned char common_flags;	offset:2;	size:1;	signed:0;
+	field:unsigned char common_preempt_count;	offset:3;	size:1;	signed:0;
+	field:int common_pid;	offset:4;	size:4;	signed:1;
+
+	field:unsigned int cpu;	offset:8;	size:4;	signed:0;
+	field:unsigned int state;	offset:12;	size:4;	signed:0;
+	field:u64 time;	offset:16;	size:8;	signed:0;
+	field:int ret;	offset:24;	size:4;	signed:1;
+
+print fmt: " cpu:%d state:%s latency:%llu USEC ret: %d", REC->cpu, REC->state ? "online" : "offline", REC->time, REC->ret
diff --git a/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_latency/id b/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_latency/id
new file mode 100644
index 0000000..8f92bfd
--- /dev/null
+++ b/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_latency/id
@@ -0,0 +1 @@
+35
diff --git a/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_multi_enter/format b/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_multi_enter/format
new file mode 100644
index 0000000..fef4f62
--- /dev/null
+++ b/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_multi_enter/format
@@ -0,0 +1,14 @@
+name: cpuhp_multi_enter
+ID: 36
+format:
+	field:unsigned short common_type;	offset:0;	size:2;	signed:0;
+	field:unsigned char common_flags;	offset:2;	size:1;	signed:0;
+	field:unsigned char common_preempt_count;	offset:3;	size:1;	signed:0;
+	field:int common_pid;	offset:4;	size:4;	signed:1;
+
+	field:unsigned int cpu;	offset:8;	size:4;	signed:0;
+	field:int target;	offset:12;	size:4;	signed:1;
+	field:int idx;	offset:16;	size:4;	signed:1;
+	field:void * fun;	offset:24;	size:8;	signed:0;
+
+print fmt: "cpu: %04u target: %3d step: %3d (%pf)", REC->cpu, REC->target, REC->idx, REC->fun
diff --git a/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_multi_enter/id b/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_multi_enter/id
new file mode 100644
index 0000000..7facc89
--- /dev/null
+++ b/src/traced/probes/ftrace/test/data/synthetic/events/cpuhp/cpuhp_multi_enter/id
@@ -0,0 +1 @@
+36
diff --git a/tools/ftrace_proto_gen/event_list b/tools/ftrace_proto_gen/event_list
index e89131a..8bff045 100644
--- a/tools/ftrace_proto_gen/event_list
+++ b/tools/ftrace_proto_gen/event_list
@@ -337,3 +337,7 @@
 gpu_mem/gpu_mem_total
 thermal/thermal_temperature
 thermal/cdev_update
+cpuhp/cpuhp_exit
+cpuhp/cpuhp_multi_enter
+cpuhp/cpuhp_enter
+cpuhp/cpuhp_latency