// SPDX-License-Identifier: GPL-2.0 // Copyright (c) 2022 Jingxiang Zeng #include #include #include #include #include "oomkill.h" struct { __uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY); __uint(key_size, sizeof(u32)); __uint(value_size, sizeof(u32)); } events SEC(".maps"); SEC("kprobe/oom_kill_process") int BPF_KPROBE(oom_kill_process, struct oom_control *oc, const char *message) { struct data_t data; data.fpid = bpf_get_current_pid_tgid() >> 32; data.tpid = BPF_CORE_READ(oc, chosen, tgid); data.pages = BPF_CORE_READ(oc, totalpages); bpf_get_current_comm(&data.fcomm, sizeof(data.fcomm)); bpf_probe_read_kernel(&data.tcomm, sizeof(data.tcomm), BPF_CORE_READ(oc, chosen, comm)); bpf_perf_event_output(ctx, &events, BPF_F_CURRENT_CPU, &data, sizeof(data)); return 0; } char LICENSE[] SEC("license") = "GPL";