-
Notifications
You must be signed in to change notification settings - Fork 65
Open
Description
The branch stack entry reader will warn about reserved bits being non-zero, so the reader needs to know about all the fields that the kernel is producing:
diff --git a/src/quipper/kernel/perf_event.h b/src/quipper/kernel/perf_event.h
index 9f44a26..2a9ac28 100644
--- a/src/quipper/kernel/perf_event.h
+++ b/src/quipper/kernel/perf_event.h
@@ -1065,7 +1065,11 @@ struct perf_branch_entry {
in_tx : 1, /* in transaction */
abort : 1, /* transaction abort */
cycles : 16, /* cycle count to last branch */
- reserved : 44;
+ type : 4, /* branch type, or 15 to indicate new type */
+ spec : 2, /* speculation outcome */
+ new_type : 4, /* branch type (new types) */
+ priv : 3, /* privilege level */
+ reserved : 31;
};
} // namespace quipper
diff --git a/src/quipper/kernel/perf_internals.h b/src/quipper/kernel/perf_internals.h
index 3906e1f..f72122a 100644
--- a/src/quipper/kernel/perf_internals.h
+++ b/src/quipper/kernel/perf_internals.h
@@ -259,7 +259,11 @@ struct branch_flags {
u64 in_tx : 1;
u64 abort : 1;
u64 cycles : 16;
- u64 reserved : 44;
+ u64 type : 4;
+ u64 spec : 2;
+ u64 new_type : 4;
+ u64 priv : 3;
+ u64 reserved : 31;
};
struct branch_entry {
Probably, it should save at least some of this new information in the entry. The 'type' field may be needed by whoever is consuming this infomation, in order to ignore or distinguish some kinds of branches (e.g. interrupts). If type==15, new_type is used as an extended type field.
(Support for 'type' seems to have been added by the recent "update to latest internal version" merge, but "new_type" is still missing and we are already seeing kernels make use of that.)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels