Path: blob/master/tools/sched_ext/include/scx/user_exit_info.bpf.h
29271 views
/* SPDX-License-Identifier: GPL-2.0 */1/*2* Define struct user_exit_info which is shared between BPF and userspace parts3* to communicate exit status and other information.4*5* Copyright (c) 2022 Meta Platforms, Inc. and affiliates.6* Copyright (c) 2022 Tejun Heo <[email protected]>7* Copyright (c) 2022 David Vernet <[email protected]>8*/910#ifndef __USER_EXIT_INFO_BPF_H11#define __USER_EXIT_INFO_BPF_H1213#ifndef LSP14#include "vmlinux.h"15#endif16#include <bpf/bpf_core_read.h>1718#include "user_exit_info_common.h"1920#define UEI_DEFINE(__name) \21char RESIZABLE_ARRAY(data, __name##_dump); \22const volatile u32 __name##_dump_len; \23struct user_exit_info __name SEC(".data")2425#define UEI_RECORD(__uei_name, __ei) ({ \26bpf_probe_read_kernel_str(__uei_name.reason, \27sizeof(__uei_name.reason), (__ei)->reason); \28bpf_probe_read_kernel_str(__uei_name.msg, \29sizeof(__uei_name.msg), (__ei)->msg); \30bpf_probe_read_kernel_str(__uei_name##_dump, \31__uei_name##_dump_len, (__ei)->dump); \32if (bpf_core_field_exists((__ei)->exit_code)) \33__uei_name.exit_code = (__ei)->exit_code; \34/* use __sync to force memory barrier */ \35__sync_val_compare_and_swap(&__uei_name.kind, __uei_name.kind, \36(__ei)->kind); \37})3839#endif /* __USER_EXIT_INFO_BPF_H */404142