arch/powerpc/perf/req-gen/perf.h
Source file repositories/reference/linux-study-clean/arch/powerpc/perf/req-gen/perf.h
File Facts
- System
- Linux kernel
- Corpus path
arch/powerpc/perf/req-gen/perf.h- Extension
.h- Size
- 5641 bytes
- Lines
- 178
- Domain
- Architecture Layer
- Bucket
- arch/powerpc
- Inferred role
- Architecture Layer: implementation source
- Status
- source implementation candidate
Why This File Exists
CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/perf_event.hlinux/stringify.h_clear.h
Detected Declarations
function CAT2function STRUCT_NAMEfunction CAT2
Annotated Snippet
enum CAT2(NAME_LOWER, _requests) {
#include REQUEST_FILE
};
/*
* For each request:
* struct <NAME_LOWER>_<request name> {
* r_fields
* };
*/
#include "_clear.h"
#define STRUCT_NAME__(name_lower, r_name) name_lower ## _ ## r_name
#define STRUCT_NAME_(name_lower, r_name) STRUCT_NAME__(name_lower, r_name)
#define STRUCT_NAME(r_name) STRUCT_NAME_(NAME_LOWER, r_name)
#define REQUEST_(r_name, r_value, r_idx_1, r_fields) \
struct STRUCT_NAME(r_name) { \
r_fields \
};
#define __field_(r_name, r_value, r_idx_1, f_offset, f_bytes, f_name) \
BYTES_TO_BE_TYPE(f_bytes) f_name;
#define __count_(r_name, r_value, r_idx_1, f_offset, f_bytes, f_name) \
__field_(r_name, r_value, r_idx_1, f_offset, f_bytes, f_name)
#define __array_(r_name, r_value, r_idx_1, a_offset, a_bytes, a_name) \
__u8 a_name[a_bytes];
#include REQUEST_FILE
/*
* Generate a check of the field offsets
* <NAME_LOWER>_assert_offsets_correct()
*/
#include "_clear.h"
#define REQUEST_(r_name, r_value, index, r_fields) \
r_fields
#define __field_(r_name, r_value, r_idx_1, f_offset, f_size, f_name) \
BUILD_BUG_ON(offsetof(struct STRUCT_NAME(r_name), f_name) != f_offset);
#define __count_(r_name, r_value, r_idx_1, c_offset, c_size, c_name) \
__field_(r_name, r_value, r_idx_1, c_offset, c_size, c_name)
#define __array_(r_name, r_value, r_idx_1, a_offset, a_size, a_name) \
__field_(r_name, r_value, r_idx_1, a_offset, a_size, a_name)
static inline void CAT2(NAME_LOWER, _assert_offsets_correct)(void)
{
#include REQUEST_FILE
}
/*
* Generate event attributes:
* PMU_EVENT_ATTR_STRING(<request name>_<field name>,
* <NAME_LOWER>_event_attr_<request name>_<field name>,
* "request=<request value>"
* "starting_index=<starting index type>"
* "counter_info_version=CURRENT_COUNTER_INFO_VERSION"
* "length=<f_size>"
* "offset=<f_offset>")
*
* TODO: counter_info_version may need to vary, we should interperate the
* value to some extent
*/
#define EVENT_ATTR_NAME__(name, r_name, c_name) \
name ## _event_attr_ ## r_name ## _ ## c_name
#define EVENT_ATTR_NAME_(name, r_name, c_name) \
EVENT_ATTR_NAME__(name, r_name, c_name)
#define EVENT_ATTR_NAME(r_name, c_name) \
EVENT_ATTR_NAME_(NAME_LOWER, r_name, c_name)
#include "_clear.h"
#define __field_(r_name, r_value, r_idx_1, f_offset, f_size, f_name)
#define __array_(r_name, r_value, r_idx_1, a_offset, a_size, a_name)
#define __count_(r_name, r_value, r_idx_1, c_offset, c_size, c_name) \
PMU_EVENT_ATTR_STRING( \
CAT3(r_name, _, c_name), \
EVENT_ATTR_NAME(r_name, c_name), \
"request=" __stringify(r_value) "," \
r_idx_1 "," \
"counter_info_version=" \
__stringify(COUNTER_INFO_VERSION_CURRENT) "," \
"length=" #c_size "," \
"offset=" #c_offset)
#define REQUEST_(r_name, r_value, r_idx_1, r_fields) \
r_fields
#include REQUEST_FILE
/*
* Define event attribute array
* static struct attribute *hv_gpci_event_attrs[] = {
* &<NAME_LOWER>_event_attr_<request name>_<field name>.attr,
* };
*/
Annotation
- Immediate include surface: `linux/perf_event.h`, `linux/stringify.h`, `_clear.h`.
- Detected declarations: `function CAT2`, `function STRUCT_NAME`, `function CAT2`.
- Atlas domain: Architecture Layer / arch/powerpc.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.