# 1 "" # 1 "core.bpf.c" #if 0 /* expanded by -frewrite-includes */ #include "vmlinux.h" #endif /* expanded by -frewrite-includes */ # 1 "core.bpf.c" # 1 "./vmlinux.h" 1 #ifndef __VMLINUX_H__ #define __VMLINUX_H__ #ifndef BPF_NO_PRESERVE_ACCESS_INDEX #pragma clang attribute push (__attribute__((preserve_access_index)), apply_to = record) #endif # 7 "./vmlinux.h" typedef signed char __s8; typedef unsigned char __u8; typedef short int __s16; typedef short unsigned int __u16; typedef int __s32; typedef unsigned int __u32; typedef long long int __s64; typedef long long unsigned int __u64; typedef __s8 s8; typedef __u8 u8; typedef __s16 s16; typedef __u16 u16; typedef __s32 s32; typedef __u32 u32; typedef __s64 s64; typedef __u64 u64; enum { false = 0, true = 1, }; typedef long int __kernel_long_t; typedef long unsigned int __kernel_ulong_t; typedef int __kernel_pid_t; typedef unsigned int __kernel_uid32_t; typedef unsigned int __kernel_gid32_t; typedef __kernel_ulong_t __kernel_size_t; typedef __kernel_long_t __kernel_ssize_t; typedef long long int __kernel_loff_t; typedef long long int __kernel_time64_t; typedef __kernel_long_t __kernel_clock_t; typedef int __kernel_timer_t; typedef int __kernel_clockid_t; typedef unsigned int __poll_t; typedef u32 __kernel_dev_t; typedef __kernel_dev_t dev_t; typedef short unsigned int umode_t; typedef __kernel_pid_t pid_t; typedef __kernel_clockid_t clockid_t; typedef _Bool bool; typedef __kernel_uid32_t uid_t; typedef __kernel_gid32_t gid_t; typedef __kernel_loff_t loff_t; typedef __kernel_size_t size_t; typedef __kernel_ssize_t ssize_t; typedef s32 int32_t; typedef u32 uint32_t; typedef u64 sector_t; typedef u64 blkcnt_t; typedef unsigned int gfp_t; typedef unsigned int fmode_t; typedef u64 phys_addr_t; typedef struct { int counter; } atomic_t; typedef struct { s64 counter; } atomic64_t; struct list_head { struct list_head *next; struct list_head *prev; }; struct hlist_node; struct hlist_head { struct hlist_node *first; }; struct hlist_node { struct hlist_node *next; struct hlist_node **pprev; }; struct callback_head { struct callback_head *next; void (*func)(struct callback_head *); }; struct lock_class_key {}; struct fs_context; struct fs_parameter_spec; struct dentry; struct super_block; struct module; struct file_system_type { const char *name; int fs_flags; int (*init_fs_context)(struct fs_context *); const struct fs_parameter_spec *parameters; struct dentry * (*mount)(struct file_system_type *, int, const char *, void *); void (*kill_sb)(struct super_block *); struct module *owner; struct file_system_type *next; struct hlist_head fs_supers; struct lock_class_key s_lock_key; struct lock_class_key s_umount_key; struct lock_class_key s_vfs_rename_key; struct lock_class_key s_writers_key[3]; struct lock_class_key i_lock_key; struct lock_class_key i_mutex_key; struct lock_class_key invalidate_lock_key; struct lock_class_key i_mutex_dir_key; }; struct kernel_symbol { int value_offset; int name_offset; int namespace_offset; }; struct qspinlock { union { atomic_t val; struct { u8 locked; u8 pending; }; struct { u16 locked_pending; u16 tail; }; }; }; typedef struct qspinlock arch_spinlock_t; struct qrwlock { union { atomic_t cnts; struct { u8 wlocked; u8 __lstate[3]; }; }; arch_spinlock_t wait_lock; }; typedef struct qrwlock arch_rwlock_t; struct lockdep_map {}; struct raw_spinlock { arch_spinlock_t raw_lock; }; typedef struct raw_spinlock raw_spinlock_t; struct spinlock { union { struct raw_spinlock rlock; }; }; typedef struct spinlock spinlock_t; typedef struct { arch_rwlock_t raw_lock; } rwlock_t; struct ratelimit_state { raw_spinlock_t lock; int interval; int burst; int printed; int missed; long unsigned int begin; long unsigned int flags; }; typedef void *fl_owner_t; struct file; struct kiocb; struct iov_iter; struct io_comp_batch; struct dir_context; struct poll_table_struct; struct vm_area_struct; struct inode; struct file_lock; struct page; struct pipe_inode_info; struct seq_file; struct file_operations { struct module *owner; loff_t (*llseek)(struct file *, loff_t, int); ssize_t (*read)(struct file *, char *, size_t, loff_t *); ssize_t (*write)(struct file *, const char *, size_t, loff_t *); ssize_t (*read_iter)(struct kiocb *, struct iov_iter *); ssize_t (*write_iter)(struct kiocb *, struct iov_iter *); int (*iopoll)(struct kiocb *, struct io_comp_batch *, unsigned int); int (*iterate)(struct file *, struct dir_context *); int (*iterate_shared)(struct file *, struct dir_context *); __poll_t (*poll)(struct file *, struct poll_table_struct *); long int (*unlocked_ioctl)(struct file *, unsigned int, long unsigned int); long int (*compat_ioctl)(struct file *, unsigned int, long unsigned int); int (*mmap)(struct file *, struct vm_area_struct *); long unsigned int mmap_supported_flags; int (*open)(struct inode *, struct file *); int (*flush)(struct file *, fl_owner_t); int (*release)(struct inode *, struct file *); int (*fsync)(struct file *, loff_t, loff_t, int); int (*fasync)(int, struct file *, int); int (*lock)(struct file *, int, struct file_lock *); ssize_t (*sendpage)(struct file *, struct page *, int, size_t, loff_t *, int); long unsigned int (*get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int); int (*check_flags)(int); int (*flock)(struct file *, int, struct file_lock *); ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int); ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int); int (*setlease)(struct file *, long int, struct file_lock **, void **); long int (*fallocate)(struct file *, int, loff_t, loff_t); void (*show_fdinfo)(struct seq_file *, struct file *); ssize_t (*copy_file_range)(struct file *, loff_t, struct file *, loff_t, size_t, unsigned int); loff_t (*remap_file_range)(struct file *, loff_t, struct file *, loff_t, loff_t, unsigned int); int (*fadvise)(struct file *, loff_t, loff_t, int); }; struct static_call_site { s32 addr; s32 key; }; struct static_call_mod; struct static_call_key { void *func; union { long unsigned int type; struct static_call_mod *mods; struct static_call_site *sites; }; }; struct jump_entry { s32 code; s32 target; long int key; }; struct static_key_mod; struct static_key { atomic_t enabled; union { long unsigned int type; struct jump_entry *entries; struct static_key_mod *next; }; }; struct bug_entry { int bug_addr_disp; int file_disp; short unsigned int line; short unsigned int flags; }; typedef __s64 time64_t; struct __kernel_timespec { __kernel_time64_t tv_sec; long long int tv_nsec; }; struct timespec64 { time64_t tv_sec; long int tv_nsec; }; enum timespec_type { TT_NONE = 0, TT_NATIVE = 1, TT_COMPAT = 2, }; typedef s32 old_time32_t; struct old_timespec32 { old_time32_t tv_sec; s32 tv_nsec; }; struct pollfd; struct restart_block { long unsigned int arch_data; long int (*fn)(struct restart_block *); union { struct { u32 *uaddr; u32 val; u32 flags; u32 bitset; u64 time; u32 *uaddr2; } futex; struct { clockid_t clockid; enum timespec_type type; union { struct __kernel_timespec *rmtp; struct old_timespec32 *compat_rmtp; }; u64 expires; } nanosleep; struct { struct pollfd *ufds; int nfds; int has_timeout; long unsigned int tv_sec; long unsigned int tv_nsec; } poll; }; }; struct thread_info { long unsigned int flags; long unsigned int syscall_work; u32 status; u32 cpu; }; struct refcount_struct { atomic_t refs; }; typedef struct refcount_struct refcount_t; struct llist_node { struct llist_node *next; }; struct __call_single_node { struct llist_node llist; union { unsigned int u_flags; atomic_t a_flags; }; u16 src; u16 dst; }; struct load_weight { long unsigned int weight; u32 inv_weight; }; struct rb_node { long unsigned int __rb_parent_color; struct rb_node *rb_right; struct rb_node *rb_left; }; struct util_est { unsigned int enqueued; unsigned int ewma; }; struct sched_avg { u64 last_update_time; u64 load_sum; u64 runnable_sum; u32 util_sum; u32 period_contrib; long unsigned int load_avg; long unsigned int runnable_avg; long unsigned int util_avg; struct util_est util_est; }; struct cfs_rq; struct sched_entity { struct load_weight load; struct rb_node run_node; struct list_head group_node; unsigned int on_rq; u64 exec_start; u64 sum_exec_runtime; u64 vruntime; u64 prev_sum_exec_runtime; u64 nr_migrations; int depth; struct sched_entity *parent; struct cfs_rq *cfs_rq; struct cfs_rq *my_q; long unsigned int runnable_weight; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; struct sched_avg avg; }; struct sched_rt_entity { struct list_head run_list; long unsigned int timeout; long unsigned int watchdog_stamp; unsigned int time_slice; short unsigned int on_rq; short unsigned int on_list; struct sched_rt_entity *back; }; typedef s64 ktime_t; struct timerqueue_node { struct rb_node node; ktime_t expires; }; enum hrtimer_restart { HRTIMER_NORESTART = 0, HRTIMER_RESTART = 1, }; struct hrtimer_clock_base; struct hrtimer { struct timerqueue_node node; ktime_t _softexpires; enum hrtimer_restart (*function)(struct hrtimer *); struct hrtimer_clock_base *base; u8 state; u8 is_rel; u8 is_soft; u8 is_hard; }; struct sched_dl_entity { struct rb_node rb_node; u64 dl_runtime; u64 dl_deadline; u64 dl_period; u64 dl_bw; u64 dl_density; s64 runtime; u64 deadline; unsigned int flags; unsigned int dl_throttled: 1; unsigned int dl_yielded: 1; unsigned int dl_non_contending: 1; unsigned int dl_overrun: 1; struct hrtimer dl_timer; struct hrtimer inactive_timer; struct sched_dl_entity *pi_se; }; struct sched_statistics {}; struct cpumask { long unsigned int bits[1]; }; typedef struct cpumask cpumask_t; union rcu_special { struct { u8 blocked; u8 need_qs; u8 exp_hint; u8 need_mb; } b; u32 s; }; struct sched_info {}; struct plist_node { int prio; struct list_head prio_list; struct list_head node_list; }; struct vmacache { u64 seqnum; struct vm_area_struct *vmas[4]; }; struct task_rss_stat { int events; int count[4]; }; struct prev_cputime { u64 utime; u64 stime; raw_spinlock_t lock; }; struct rb_root { struct rb_node *rb_node; }; struct rb_root_cached { struct rb_root rb_root; struct rb_node *rb_leftmost; }; struct timerqueue_head { struct rb_root_cached rb_root; }; struct posix_cputimer_base { u64 nextevt; struct timerqueue_head tqhead; }; struct posix_cputimers { struct posix_cputimer_base bases[3]; unsigned int timers_active; unsigned int expiry_active; }; struct posix_cputimers_work { struct callback_head work; unsigned int scheduled; }; struct sem_undo_list; struct sysv_sem { struct sem_undo_list *undo_list; }; struct sysv_shm { struct list_head shm_clist; }; typedef struct { long unsigned int sig[1]; } sigset_t; struct sigpending { struct list_head list; sigset_t signal; }; struct seccomp_filter; struct seccomp { int mode; atomic_t filter_count; struct seccomp_filter *filter; }; struct syscall_user_dispatch { char *selector; long unsigned int offset; long unsigned int len; bool on_dispatch; }; struct wake_q_node { struct wake_q_node *next; }; struct task_io_accounting {}; typedef atomic64_t atomic_long_t; struct optimistic_spin_queue { atomic_t tail; }; struct mutex { atomic_long_t owner; raw_spinlock_t wait_lock; struct optimistic_spin_queue osq; struct list_head wait_list; }; struct arch_tlbflush_unmap_batch { struct cpumask cpumask; }; struct tlbflush_unmap_batch { struct arch_tlbflush_unmap_batch arch; bool flush_required; bool writable; }; struct page_frag { struct page *page; __u32 offset; __u32 size; }; struct kmap_ctrl {}; struct llist_head { struct llist_node *first; }; struct desc_struct { u16 limit0; u16 base0; u16 base1: 8; u16 type: 4; u16 s: 1; u16 dpl: 2; u16 p: 1; u16 limit1: 4; u16 avl: 1; u16 l: 1; u16 d: 1; u16 g: 1; u16 base2: 8; }; struct fpu_state_perm { u64 __state_perm; unsigned int __state_size; unsigned int __user_state_size; }; struct fregs_state { u32 cwd; u32 swd; u32 twd; u32 fip; u32 fcs; u32 foo; u32 fos; u32 st_space[20]; u32 status; }; struct fxregs_state { u16 cwd; u16 swd; u16 twd; u16 fop; union { struct { u64 rip; u64 rdp; }; struct { u32 fip; u32 fcs; u32 foo; u32 fos; }; }; u32 mxcsr; u32 mxcsr_mask; u32 st_space[32]; u32 xmm_space[64]; u32 padding[12]; union { u32 padding1[12]; u32 sw_reserved[12]; }; }; struct math_emu_info; struct swregs_state { u32 cwd; u32 swd; u32 twd; u32 fip; u32 fcs; u32 foo; u32 fos; u32 st_space[20]; u8 ftop; u8 changed; u8 lookahead; u8 no_update; u8 rm; u8 alimit; struct math_emu_info *info; u32 entry_eip; }; struct xstate_header { u64 xfeatures; u64 xcomp_bv; u64 reserved[6]; }; struct xregs_state { struct fxregs_state i387; struct xstate_header header; u8 extended_state_area[0]; }; union fpregs_state { struct fregs_state fsave; struct fxregs_state fxsave; struct swregs_state soft; struct xregs_state xsave; u8 __padding[4096]; }; struct fpstate { unsigned int size; unsigned int user_size; u64 xfeatures; u64 user_xfeatures; u64 xfd; unsigned int is_valloc: 1; unsigned int is_guest: 1; unsigned int is_confidential: 1; unsigned int in_use: 1; long: 60; long: 64; long: 64; long: 64; union fpregs_state regs; }; struct fpu { unsigned int last_cpu; long unsigned int avx512_timestamp; struct fpstate *fpstate; struct fpstate *__task_fpstate; struct fpu_state_perm perm; long: 64; long: 64; struct fpstate __fpstate; }; struct perf_event; struct io_bitmap; struct thread_struct { struct desc_struct tls_array[3]; long unsigned int sp; short unsigned int es; short unsigned int ds; short unsigned int fsindex; short unsigned int gsindex; long unsigned int fsbase; long unsigned int gsbase; struct perf_event *ptrace_bps[4]; long unsigned int virtual_dr6; long unsigned int ptrace_dr7; long unsigned int cr2; long unsigned int trap_nr; long unsigned int error_code; struct io_bitmap *io_bitmap; long unsigned int iopl_emul; unsigned int iopl_warn: 1; unsigned int sig_on_uaccess_err: 1; u32 pkru; long: 64; long: 64; long: 64; long: 64; long: 64; struct fpu fpu; }; struct sched_class; struct task_group; struct mm_struct; struct pid; struct completion; struct cred; struct key; struct nameidata; struct fs_struct; struct files_struct; struct nsproxy; struct signal_struct; struct sighand_struct; struct rt_mutex_waiter; struct bio_list; struct blk_plug; struct reclaim_state; struct backing_dev_info; struct io_context; struct capture_control; struct kernel_siginfo; typedef struct kernel_siginfo kernel_siginfo_t; struct css_set; struct robust_list_head; struct futex_pi_state; struct perf_event_context; struct rseq; struct ftrace_ret_stack; struct mem_cgroup; struct request_queue; struct uprobe_task; struct vm_struct; struct bpf_local_storage; struct bpf_run_ctx; struct task_struct { struct thread_info thread_info; unsigned int __state; void *stack; refcount_t usage; unsigned int flags; unsigned int ptrace; int on_cpu; struct __call_single_node wake_entry; unsigned int wakee_flips; long unsigned int wakee_flip_decay_ts; struct task_struct *last_wakee; int recent_used_cpu; int wake_cpu; int on_rq; int prio; int static_prio; int normal_prio; unsigned int rt_priority; struct sched_entity se; struct sched_rt_entity rt; struct sched_dl_entity dl; const struct sched_class *sched_class; struct task_group *sched_task_group; long: 64; long: 64; long: 64; long: 64; struct sched_statistics stats; unsigned int policy; int nr_cpus_allowed; const cpumask_t *cpus_ptr; cpumask_t *user_cpus_ptr; cpumask_t cpus_mask; void *migration_pending; short unsigned int migration_disabled; short unsigned int migration_flags; int trc_reader_nesting; int trc_ipi_to_cpu; union rcu_special trc_reader_special; bool trc_reader_checked; struct list_head trc_holdout_list; struct sched_info sched_info; struct list_head tasks; struct plist_node pushable_tasks; struct rb_node pushable_dl_tasks; struct mm_struct *mm; struct mm_struct *active_mm; struct vmacache vmacache; struct task_rss_stat rss_stat; int exit_state; int exit_code; int exit_signal; int pdeath_signal; long unsigned int jobctl; unsigned int personality; unsigned int sched_reset_on_fork: 1; unsigned int sched_contributes_to_load: 1; unsigned int sched_migrated: 1; int: 29; unsigned int sched_remote_wakeup: 1; unsigned int in_execve: 1; unsigned int in_iowait: 1; unsigned int restore_sigmask: 1; unsigned int in_user_fault: 1; unsigned int no_cgroup_migration: 1; unsigned int frozen: 1; unsigned int use_memdelay: 1; unsigned int in_eventfd_signal: 1; long unsigned int atomic_flags; struct restart_block restart_block; pid_t pid; pid_t tgid; struct task_struct *real_parent; struct task_struct *parent; struct list_head children; struct list_head sibling; struct task_struct *group_leader; struct list_head ptraced; struct list_head ptrace_entry; struct pid *thread_pid; struct hlist_node pid_links[4]; struct list_head thread_group; struct list_head thread_node; struct completion *vfork_done; int *set_child_tid; int *clear_child_tid; void *pf_io_worker; u64 utime; u64 stime; u64 gtime; struct prev_cputime prev_cputime; long unsigned int nvcsw; long unsigned int nivcsw; u64 start_time; u64 start_boottime; long unsigned int min_flt; long unsigned int maj_flt; struct posix_cputimers posix_cputimers; struct posix_cputimers_work posix_cputimers_work; const struct cred *ptracer_cred; const struct cred *real_cred; const struct cred *cred; struct key *cached_requested_key; char comm[16]; struct nameidata *nameidata; struct sysv_sem sysvsem; struct sysv_shm sysvshm; struct fs_struct *fs; struct files_struct *files; struct nsproxy *nsproxy; struct signal_struct *signal; struct sighand_struct *sighand; sigset_t blocked; sigset_t real_blocked; sigset_t saved_sigmask; struct sigpending pending; long unsigned int sas_ss_sp; size_t sas_ss_size; unsigned int sas_ss_flags; struct callback_head *task_works; struct seccomp seccomp; struct syscall_user_dispatch syscall_dispatch; u64 parent_exec_id; u64 self_exec_id; spinlock_t alloc_lock; raw_spinlock_t pi_lock; struct wake_q_node wake_q; struct rb_root_cached pi_waiters; struct task_struct *pi_top_task; struct rt_mutex_waiter *pi_blocked_on; void *journal_info; struct bio_list *bio_list; struct blk_plug *plug; struct reclaim_state *reclaim_state; struct backing_dev_info *backing_dev_info; struct io_context *io_context; struct capture_control *capture_control; long unsigned int ptrace_message; kernel_siginfo_t *last_siginfo; struct task_io_accounting ioac; struct css_set *cgroups; struct list_head cg_list; struct robust_list_head *robust_list; struct list_head pi_state_list; struct futex_pi_state *pi_state_cache; struct mutex futex_exit_mutex; unsigned int futex_state; struct perf_event_context *perf_event_ctxp[2]; struct mutex perf_event_mutex; struct list_head perf_event_list; struct rseq *rseq; u32 rseq_sig; long unsigned int rseq_event_mask; struct tlbflush_unmap_batch tlb_ubc; union { refcount_t rcu_users; struct callback_head rcu; }; struct pipe_inode_info *splice_pipe; struct page_frag task_frag; int nr_dirtied; int nr_dirtied_pause; long unsigned int dirty_paused_when; u64 timer_slack_ns; u64 default_timer_slack_ns; int curr_ret_stack; int curr_ret_depth; struct ftrace_ret_stack *ret_stack; long long unsigned int ftrace_timestamp; atomic_t trace_overrun; atomic_t tracing_graph_pause; long unsigned int trace; long unsigned int trace_recursion; struct mem_cgroup *memcg_in_oom; gfp_t memcg_oom_gfp_mask; int memcg_oom_order; unsigned int memcg_nr_pages_over_high; struct mem_cgroup *active_memcg; struct request_queue *throttle_queue; struct uprobe_task *utask; struct kmap_ctrl kmap_ctrl; int pagefault_disabled; struct task_struct *oom_reaper_list; struct vm_struct *stack_vm_area; refcount_t stack_refcount; struct bpf_local_storage *bpf_storage; struct bpf_run_ctx *bpf_ctx; struct llist_head kretprobe_instances; struct callback_head l1d_flush_kill; struct thread_struct thread; }; struct screen_info { __u8 orig_x; __u8 orig_y; __u16 ext_mem_k; __u16 orig_video_page; __u8 orig_video_mode; __u8 orig_video_cols; __u8 flags; __u8 unused2; __u16 orig_video_ega_bx; __u16 unused3; __u8 orig_video_lines; __u8 orig_video_isVGA; __u16 orig_video_points; __u16 lfb_width; __u16 lfb_height; __u16 lfb_depth; __u32 lfb_base; __u32 lfb_size; __u16 cl_magic; __u16 cl_offset; __u16 lfb_linelength; __u8 red_size; __u8 red_pos; __u8 green_size; __u8 green_pos; __u8 blue_size; __u8 blue_pos; __u8 rsvd_size; __u8 rsvd_pos; __u16 vesapm_seg; __u16 vesapm_off; __u16 pages; __u16 vesa_attributes; __u32 capabilities; __u32 ext_lfb_base; __u8 _reserved[2]; } __attribute__((packed)); struct apm_bios_info { __u16 version; __u16 cseg; __u32 offset; __u16 cseg_16; __u16 dseg; __u16 flags; __u16 cseg_len; __u16 cseg_16_len; __u16 dseg_len; }; struct edd_device_params { __u16 length; __u16 info_flags; __u32 num_default_cylinders; __u32 num_default_heads; __u32 sectors_per_track; __u64 number_of_sectors; __u16 bytes_per_sector; __u32 dpte_ptr; __u16 key; __u8 device_path_info_length; __u8 reserved2; __u16 reserved3; __u8 host_bus_type[4]; __u8 interface_type[8]; union { struct { __u16 base_address; __u16 reserved1; __u32 reserved2; } isa; struct { __u8 bus; __u8 slot; __u8 function; __u8 channel; __u32 reserved; } pci; struct { __u64 reserved; } ibnd; struct { __u64 reserved; } xprs; struct { __u64 reserved; } htpt; struct { __u64 reserved; } unknown; } interface_path; union { struct { __u8 device; __u8 reserved1; __u16 reserved2; __u32 reserved3; __u64 reserved4; } ata; struct { __u8 device; __u8 lun; __u8 reserved1; __u8 reserved2; __u32 reserved3; __u64 reserved4; } atapi; struct { __u16 id; __u64 lun; __u16 reserved1; __u32 reserved2; } __attribute__((packed)) scsi; struct { __u64 serial_number; __u64 reserved; } usb; struct { __u64 eui; __u64 reserved; } i1394; struct { __u64 wwid; __u64 lun; } fibre; struct { __u64 identity_tag; __u64 reserved; } i2o; struct { __u32 array_number; __u32 reserved1; __u64 reserved2; } raid; struct { __u8 device; __u8 reserved1; __u16 reserved2; __u32 reserved3; __u64 reserved4; } sata; struct { __u64 reserved1; __u64 reserved2; } unknown; } device_path; __u8 reserved4; __u8 checksum; } __attribute__((packed)); struct edd_info { __u8 device; __u8 version; __u16 interface_support; __u16 legacy_max_cylinder; __u8 legacy_max_head; __u8 legacy_sectors_per_track; struct edd_device_params params; } __attribute__((packed)); struct ist_info { __u32 signature; __u32 command; __u32 event; __u32 perf_level; }; struct edid_info { unsigned char dummy[128]; }; struct setup_header { __u8 setup_sects; __u16 root_flags; __u32 syssize; __u16 ram_size; __u16 vid_mode; __u16 root_dev; __u16 boot_flag; __u16 jump; __u32 header; __u16 version; __u32 realmode_swtch; __u16 start_sys_seg; __u16 kernel_version; __u8 type_of_loader; __u8 loadflags; __u16 setup_move_size; __u32 code32_start; __u32 ramdisk_image; __u32 ramdisk_size; __u32 bootsect_kludge; __u16 heap_end_ptr; __u8 ext_loader_ver; __u8 ext_loader_type; __u32 cmd_line_ptr; __u32 initrd_addr_max; __u32 kernel_alignment; __u8 relocatable_kernel; __u8 min_alignment; __u16 xloadflags; __u32 cmdline_size; __u32 hardware_subarch; __u64 hardware_subarch_data; __u32 payload_offset; __u32 payload_length; __u64 setup_data; __u64 pref_address; __u32 init_size; __u32 handover_offset; __u32 kernel_info_offset; } __attribute__((packed)); struct sys_desc_table { __u16 length; __u8 table[14]; }; struct olpc_ofw_header { __u32 ofw_magic; __u32 ofw_version; __u32 cif_handler; __u32 irq_desc_table; }; struct efi_info { __u32 efi_loader_signature; __u32 efi_systab; __u32 efi_memdesc_size; __u32 efi_memdesc_version; __u32 efi_memmap; __u32 efi_memmap_size; __u32 efi_systab_hi; __u32 efi_memmap_hi; }; struct boot_e820_entry { __u64 addr; __u64 size; __u32 type; } __attribute__((packed)); struct boot_params { struct screen_info screen_info; struct apm_bios_info apm_bios_info; __u8 _pad2[4]; __u64 tboot_addr; struct ist_info ist_info; __u64 acpi_rsdp_addr; __u8 _pad3[8]; __u8 hd0_info[16]; __u8 hd1_info[16]; struct sys_desc_table sys_desc_table; struct olpc_ofw_header olpc_ofw_header; __u32 ext_ramdisk_image; __u32 ext_ramdisk_size; __u32 ext_cmd_line_ptr; __u8 _pad4[116]; struct edid_info edid_info; struct efi_info efi_info; __u32 alt_mem_k; __u32 scratch; __u8 e820_entries; __u8 eddbuf_entries; __u8 edd_mbr_sig_buf_entries; __u8 kbd_status; __u8 secure_boot; __u8 _pad5[2]; __u8 sentinel; __u8 _pad6[1]; struct setup_header hdr; __u8 _pad7[36]; __u32 edd_mbr_sig_buffer[16]; struct boot_e820_entry e820_table[128]; __u8 _pad8[48]; struct edd_info eddbuf[6]; __u8 _pad9[276]; } __attribute__((packed)); enum x86_hardware_subarch { X86_SUBARCH_PC = 0, X86_SUBARCH_LGUEST = 1, X86_SUBARCH_XEN = 2, X86_SUBARCH_INTEL_MID = 3, X86_SUBARCH_CE4100 = 4, X86_NR_SUBARCHS = 5, }; struct range { u64 start; u64 end; }; struct pt_regs { long unsigned int r15; long unsigned int r14; long unsigned int r13; long unsigned int r12; long unsigned int bp; long unsigned int bx; long unsigned int r11; long unsigned int r10; long unsigned int r9; long unsigned int r8; long unsigned int ax; long unsigned int cx; long unsigned int dx; long unsigned int si; long unsigned int di; long unsigned int orig_ax; long unsigned int ip; long unsigned int cs; long unsigned int flags; long unsigned int sp; long unsigned int ss; }; struct idt_bits { u16 ist: 3; u16 zero: 5; u16 type: 5; u16 dpl: 2; u16 p: 1; }; struct gate_struct { u16 offset_low; u16 segment; struct idt_bits bits; u16 offset_middle; u32 offset_high; u32 reserved; }; typedef struct gate_struct gate_desc; struct desc_ptr { short unsigned int size; long unsigned int address; } __attribute__((packed)); typedef long unsigned int pteval_t; typedef long unsigned int pmdval_t; typedef long unsigned int pudval_t; typedef long unsigned int p4dval_t; typedef long unsigned int pgdval_t; typedef long unsigned int pgprotval_t; typedef struct { pteval_t pte; } pte_t; struct pgprot { pgprotval_t pgprot; }; typedef struct pgprot pgprot_t; typedef struct { pgdval_t pgd; } pgd_t; typedef struct { pgd_t pgd; } p4d_t; typedef struct { pudval_t pud; } pud_t; typedef struct { pmdval_t pmd; } pmd_t; typedef struct page *pgtable_t; struct address_space; struct page_pool; struct kmem_cache; struct dev_pagemap; struct page { long unsigned int flags; union { struct { struct list_head lru; struct address_space *mapping; long unsigned int index; long unsigned int private; }; struct { long unsigned int pp_magic; struct page_pool *pp; long unsigned int _pp_mapping_pad; long unsigned int dma_addr; union { long unsigned int dma_addr_upper; atomic_long_t pp_frag_count; }; }; struct { union { struct list_head slab_list; struct { struct page *next; int pages; }; }; struct kmem_cache *slab_cache; void *freelist; union { void *s_mem; long unsigned int counters; struct { unsigned int inuse: 16; unsigned int objects: 15; unsigned int frozen: 1; }; }; }; struct { long unsigned int compound_head; unsigned char compound_dtor; unsigned char compound_order; atomic_t compound_mapcount; unsigned int compound_nr; }; struct { long unsigned int _compound_pad_1; atomic_t hpage_pinned_refcount; struct list_head deferred_list; }; struct { long unsigned int _pt_pad_1; pgtable_t pmd_huge_pte; long unsigned int _pt_pad_2; union { struct mm_struct *pt_mm; atomic_t pt_frag_refcount; }; spinlock_t ptl; }; struct { struct dev_pagemap *pgmap; void *zone_device_data; }; struct callback_head callback_head; }; union { atomic_t _mapcount; unsigned int page_type; unsigned int active; int units; }; atomic_t _refcount; long unsigned int memcg_data; }; struct orc_entry { s16 sp_offset; s16 bp_offset; unsigned int sp_reg: 4; unsigned int bp_reg: 4; unsigned int type: 2; unsigned int end: 1; } __attribute__((packed)); struct rw_semaphore { atomic_long_t count; atomic_long_t owner; struct optimistic_spin_queue osq; raw_spinlock_t wait_lock; struct list_head wait_list; }; struct seqcount { unsigned int sequence; }; typedef struct seqcount seqcount_t; struct mm_rss_stat { atomic_long_t count[4]; }; struct vdso_image; typedef struct { u64 ctx_id; atomic64_t tlb_gen; short unsigned int flags; struct mutex lock; void *vdso; const struct vdso_image *vdso_image; atomic_t perf_rdpmc_allowed; } mm_context_t; struct xol_area; struct uprobes_state { struct xol_area *xol_area; }; struct work_struct; typedef void (*work_func_t)(struct work_struct *); struct work_struct { atomic_long_t data; struct list_head entry; work_func_t func; }; struct linux_binfmt; struct kioctx_table; struct user_namespace; struct mm_struct { struct { struct vm_area_struct *mmap; struct rb_root mm_rb; u64 vmacache_seqnum; long unsigned int (*get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int); long unsigned int mmap_base; long unsigned int mmap_legacy_base; long unsigned int task_size; long unsigned int highest_vm_end; pgd_t *pgd; atomic_t membarrier_state; atomic_t mm_users; atomic_t mm_count; atomic_long_t pgtables_bytes; int map_count; spinlock_t page_table_lock; struct rw_semaphore mmap_lock; struct list_head mmlist; long unsigned int hiwater_rss; long unsigned int hiwater_vm; long unsigned int total_vm; long unsigned int locked_vm; atomic64_t pinned_vm; long unsigned int data_vm; long unsigned int exec_vm; long unsigned int stack_vm; long unsigned int def_flags; seqcount_t write_protect_seq; spinlock_t arg_lock; long unsigned int start_code; long unsigned int end_code; long unsigned int start_data; long unsigned int end_data; long unsigned int start_brk; long unsigned int brk; long unsigned int start_stack; long unsigned int arg_start; long unsigned int arg_end; long unsigned int env_start; long unsigned int env_end; long unsigned int saved_auxv[46]; struct mm_rss_stat rss_stat; struct linux_binfmt *binfmt; mm_context_t context; long unsigned int flags; spinlock_t ioctx_lock; struct kioctx_table *ioctx_table; struct task_struct *owner; struct user_namespace *user_ns; struct file *exe_file; atomic_t tlb_flush_pending; bool tlb_flush_batched; struct uprobes_state uprobes_state; struct work_struct async_put_work; }; long unsigned int cpu_bitmap[0]; }; struct math_emu_info { long int ___orig_eip; struct pt_regs *regs; }; struct tracepoint_func { void *func; void *data; int prio; }; struct tracepoint { const char *name; struct static_key key; struct static_call_key *static_call_key; void *static_call_tramp; void *iterator; int (*regfunc)(); void (*unregfunc)(); struct tracepoint_func *funcs; }; typedef const int tracepoint_ptr_t; struct bpf_raw_event_map { struct tracepoint *tp; void *bpf_func; u32 num_args; u32 writable_size; long: 64; }; enum { UNAME26 = 131072, ADDR_NO_RANDOMIZE = 262144, FDPIC_FUNCPTRS = 524288, MMAP_PAGE_ZERO = 1048576, ADDR_COMPAT_LAYOUT = 2097152, READ_IMPLIES_EXEC = 4194304, ADDR_LIMIT_32BIT = 8388608, SHORT_INODE = 16777216, WHOLE_SECONDS = 33554432, STICKY_TIMEOUTS = 67108864, ADDR_LIMIT_3GB = 134217728, }; enum tlb_infos { ENTRIES = 0, NR_INFO = 1, }; enum pcpu_fc { PCPU_FC_AUTO = 0, PCPU_FC_EMBED = 1, PCPU_FC_PAGE = 2, PCPU_FC_NR = 3, }; struct vm_struct { struct vm_struct *next; void *addr; long unsigned int size; long unsigned int flags; struct page **pages; unsigned int nr_pages; phys_addr_t phys_addr; const void *caller; }; struct wait_queue_head { spinlock_t lock; struct list_head head; }; typedef struct wait_queue_head wait_queue_head_t; struct seqcount_raw_spinlock { seqcount_t seqcount; }; typedef struct seqcount_raw_spinlock seqcount_raw_spinlock_t; struct seqcount_spinlock { seqcount_t seqcount; }; typedef struct seqcount_spinlock seqcount_spinlock_t; typedef struct { seqcount_spinlock_t seqcount; spinlock_t lock; } seqlock_t; enum node_states { N_POSSIBLE = 0, N_ONLINE = 1, N_NORMAL_MEMORY = 2, N_HIGH_MEMORY = 2, N_MEMORY = 3, N_CPU = 4, N_GENERIC_INITIATOR = 5, NR_NODE_STATES = 6, }; struct vm_userfaultfd_ctx {}; struct anon_vma; struct vm_operations_struct; struct vm_area_struct { long unsigned int vm_start; long unsigned int vm_end; struct vm_area_struct *vm_next; struct vm_area_struct *vm_prev; struct rb_node vm_rb; long unsigned int rb_subtree_gap; struct mm_struct *vm_mm; pgprot_t vm_page_prot; long unsigned int vm_flags; struct { struct rb_node rb; long unsigned int rb_subtree_last; } shared; struct list_head anon_vma_chain; struct anon_vma *anon_vma; const struct vm_operations_struct *vm_ops; long unsigned int vm_pgoff; struct file *vm_file; void *vm_private_data; struct vm_userfaultfd_ctx vm_userfaultfd_ctx; }; enum { MM_FILEPAGES = 0, MM_ANONPAGES = 1, MM_SWAPENTS = 2, MM_SHMEMPAGES = 3, NR_MM_COUNTERS = 4, }; struct swait_queue_head { raw_spinlock_t lock; struct list_head task_list; }; struct completion { unsigned int done; struct swait_queue_head wait; }; struct timer_list { struct hlist_node entry; long unsigned int expires; void (*function)(struct timer_list *); u32 flags; }; struct workqueue_struct; struct delayed_work { struct work_struct work; struct timer_list timer; struct workqueue_struct *wq; int cpu; }; struct rcu_segcblist { struct callback_head *head; struct callback_head **tails[4]; long unsigned int gp_seq[4]; long int len; long int seglen[4]; u8 flags; }; struct srcu_node; struct srcu_struct; struct srcu_data { long unsigned int srcu_lock_count[2]; long unsigned int srcu_unlock_count[2]; long: 64; long: 64; long: 64; long: 64; spinlock_t lock; struct rcu_segcblist srcu_cblist; long unsigned int srcu_gp_seq_needed; long unsigned int srcu_gp_seq_needed_exp; bool srcu_cblist_invoking; struct timer_list delay_work; struct work_struct work; struct callback_head srcu_barrier_head; struct srcu_node *mynode; long unsigned int grpmask; int cpu; struct srcu_struct *ssp; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct srcu_node { spinlock_t lock; long unsigned int srcu_have_cbs[4]; long unsigned int srcu_data_have_cbs[4]; long unsigned int srcu_gp_seq_needed_exp; struct srcu_node *srcu_parent; int grplo; int grphi; }; struct srcu_struct { struct srcu_node node[1]; struct srcu_node *level[2]; struct mutex srcu_cb_mutex; spinlock_t lock; struct mutex srcu_gp_mutex; unsigned int srcu_idx; long unsigned int srcu_gp_seq; long unsigned int srcu_gp_seq_needed; long unsigned int srcu_gp_seq_needed_exp; long unsigned int srcu_last_gp_end; struct srcu_data *sda; long unsigned int srcu_barrier_seq; struct mutex srcu_barrier_mutex; struct completion srcu_barrier_completion; atomic_t srcu_barrier_cpu_cnt; struct delayed_work work; struct lockdep_map dep_map; }; struct arch_uprobe_task { long unsigned int saved_scratch_register; unsigned int saved_trap_nr; unsigned int saved_tf; }; enum uprobe_task_state { UTASK_RUNNING = 0, UTASK_SSTEP = 1, UTASK_SSTEP_ACK = 2, UTASK_SSTEP_TRAPPED = 3, }; struct uprobe; struct return_instance; struct uprobe_task { enum uprobe_task_state state; union { struct { struct arch_uprobe_task autask; long unsigned int vaddr; }; struct { struct callback_head dup_xol_work; long unsigned int dup_xol_addr; }; }; struct uprobe *active_uprobe; long unsigned int xol_vaddr; struct return_instance *return_instances; unsigned int depth; }; struct return_instance { struct uprobe *uprobe; long unsigned int func; long unsigned int stack; long unsigned int orig_ret_vaddr; bool chained; struct return_instance *next; }; struct vdso_image { void *data; long unsigned int size; long unsigned int alt; long unsigned int alt_len; long unsigned int extable_base; long unsigned int extable_len; const void *extable; long int sym_vvar_start; long int sym_vvar_page; long int sym_pvclock_page; long int sym_hvclock_page; long int sym_timens_page; long int sym_VDSO32_NOTE_MASK; long int sym___kernel_sigreturn; long int sym___kernel_rt_sigreturn; long int sym___kernel_vsyscall; long int sym_int80_landing_pad; long int sym_vdso32_sigreturn_landing_pad; long int sym_vdso32_rt_sigreturn_landing_pad; }; struct xarray { spinlock_t xa_lock; gfp_t xa_flags; void *xa_head; }; typedef u32 errseq_t; struct address_space_operations; struct address_space { struct inode *host; struct xarray i_pages; struct rw_semaphore invalidate_lock; gfp_t gfp_mask; atomic_t i_mmap_writable; struct rb_root_cached i_mmap; struct rw_semaphore i_mmap_rwsem; long unsigned int nrpages; long unsigned int writeback_index; const struct address_space_operations *a_ops; long unsigned int flags; errseq_t wb_err; spinlock_t private_lock; struct list_head private_list; void *private_data; }; struct vmem_altmap { long unsigned int base_pfn; const long unsigned int end_pfn; const long unsigned int reserve; long unsigned int free; long unsigned int align; long unsigned int alloc; }; struct percpu_ref_data; struct percpu_ref { long unsigned int percpu_count_ptr; struct percpu_ref_data *data; }; enum memory_type { MEMORY_DEVICE_PRIVATE = 1, MEMORY_DEVICE_FS_DAX = 2, MEMORY_DEVICE_GENERIC = 3, MEMORY_DEVICE_PCI_P2PDMA = 4, }; struct dev_pagemap_ops; struct dev_pagemap { struct vmem_altmap altmap; struct percpu_ref *ref; struct percpu_ref internal_ref; struct completion done; enum memory_type type; unsigned int flags; const struct dev_pagemap_ops *ops; void *owner; int nr_range; union { struct range range; struct range ranges[0]; }; }; struct vfsmount; struct path { struct vfsmount *mnt; struct dentry *dentry; }; enum rw_hint { WRITE_LIFE_NOT_SET = 0, WRITE_LIFE_NONE = 1, WRITE_LIFE_SHORT = 2, WRITE_LIFE_MEDIUM = 3, WRITE_LIFE_LONG = 4, WRITE_LIFE_EXTREME = 5, }; enum pid_type { PIDTYPE_PID = 0, PIDTYPE_TGID = 1, PIDTYPE_PGID = 2, PIDTYPE_SID = 3, PIDTYPE_MAX = 4, }; typedef struct { uid_t val; } kuid_t; struct fown_struct { rwlock_t lock; struct pid *pid; enum pid_type pid_type; kuid_t uid; kuid_t euid; int signum; }; struct file_ra_state { long unsigned int start; unsigned int size; unsigned int async_size; unsigned int ra_pages; unsigned int mmap_miss; loff_t prev_pos; }; struct file { union { struct llist_node fu_llist; struct callback_head fu_rcuhead; } f_u; struct path f_path; struct inode *f_inode; const struct file_operations *f_op; spinlock_t f_lock; enum rw_hint f_write_hint; atomic_long_t f_count; unsigned int f_flags; fmode_t f_mode; struct mutex f_pos_lock; loff_t f_pos; struct fown_struct f_owner; const struct cred *f_cred; struct file_ra_state f_ra; u64 f_version; void *private_data; struct hlist_head *f_ep; struct address_space *f_mapping; errseq_t f_wb_err; errseq_t f_sb_err; }; typedef unsigned int vm_fault_t; enum page_entry_size { PE_SIZE_PTE = 0, PE_SIZE_PMD = 1, PE_SIZE_PUD = 2, }; struct vm_fault; struct vm_operations_struct { void (*open)(struct vm_area_struct *); void (*close)(struct vm_area_struct *); int (*may_split)(struct vm_area_struct *, long unsigned int); int (*mremap)(struct vm_area_struct *); int (*mprotect)(struct vm_area_struct *, long unsigned int, long unsigned int, long unsigned int); vm_fault_t (*fault)(struct vm_fault *); vm_fault_t (*huge_fault)(struct vm_fault *, enum page_entry_size); vm_fault_t (*map_pages)(struct vm_fault *, long unsigned int, long unsigned int); long unsigned int (*pagesize)(struct vm_area_struct *); vm_fault_t (*page_mkwrite)(struct vm_fault *); vm_fault_t (*pfn_mkwrite)(struct vm_fault *); int (*access)(struct vm_area_struct *, long unsigned int, void *, int, int); const char * (*name)(struct vm_area_struct *); struct page * (*find_special_page)(struct vm_area_struct *, long unsigned int); }; enum fault_flag { FAULT_FLAG_WRITE = 1, FAULT_FLAG_MKWRITE = 2, FAULT_FLAG_ALLOW_RETRY = 4, FAULT_FLAG_RETRY_NOWAIT = 8, FAULT_FLAG_KILLABLE = 16, FAULT_FLAG_TRIED = 32, FAULT_FLAG_USER = 64, FAULT_FLAG_REMOTE = 128, FAULT_FLAG_INSTRUCTION = 256, FAULT_FLAG_INTERRUPTIBLE = 512, }; struct vm_fault { const struct { struct vm_area_struct *vma; gfp_t gfp_mask; long unsigned int pgoff; long unsigned int address; }; enum fault_flag flags; pmd_t *pmd; pud_t *pud; union { pte_t orig_pte; pmd_t orig_pmd; }; struct page *cow_page; struct page *page; pte_t *pte; spinlock_t *ptl; pgtable_t prealloc_pte; }; enum migratetype { MIGRATE_UNMOVABLE = 0, MIGRATE_MOVABLE = 1, MIGRATE_RECLAIMABLE = 2, MIGRATE_PCPTYPES = 3, MIGRATE_HIGHATOMIC = 3, MIGRATE_TYPES = 4, }; enum zone_stat_item { NR_FREE_PAGES = 0, NR_ZONE_LRU_BASE = 1, NR_ZONE_INACTIVE_ANON = 1, NR_ZONE_ACTIVE_ANON = 2, NR_ZONE_INACTIVE_FILE = 3, NR_ZONE_ACTIVE_FILE = 4, NR_ZONE_UNEVICTABLE = 5, NR_ZONE_WRITE_PENDING = 6, NR_MLOCK = 7, NR_BOUNCE = 8, NR_FREE_CMA_PAGES = 9, NR_VM_ZONE_STAT_ITEMS = 10, }; enum node_stat_item { NR_LRU_BASE = 0, NR_INACTIVE_ANON = 0, NR_ACTIVE_ANON = 1, NR_INACTIVE_FILE = 2, NR_ACTIVE_FILE = 3, NR_UNEVICTABLE = 4, NR_SLAB_RECLAIMABLE_B = 5, NR_SLAB_UNRECLAIMABLE_B = 6, NR_ISOLATED_ANON = 7, NR_ISOLATED_FILE = 8, WORKINGSET_NODES = 9, WORKINGSET_REFAULT_BASE = 10, WORKINGSET_REFAULT_ANON = 10, WORKINGSET_REFAULT_FILE = 11, WORKINGSET_ACTIVATE_BASE = 12, WORKINGSET_ACTIVATE_ANON = 12, WORKINGSET_ACTIVATE_FILE = 13, WORKINGSET_RESTORE_BASE = 14, WORKINGSET_RESTORE_ANON = 14, WORKINGSET_RESTORE_FILE = 15, WORKINGSET_NODERECLAIM = 16, NR_ANON_MAPPED = 17, NR_FILE_MAPPED = 18, NR_FILE_PAGES = 19, NR_FILE_DIRTY = 20, NR_WRITEBACK = 21, NR_WRITEBACK_TEMP = 22, NR_SHMEM = 23, NR_SHMEM_THPS = 24, NR_SHMEM_PMDMAPPED = 25, NR_FILE_THPS = 26, NR_FILE_PMDMAPPED = 27, NR_ANON_THPS = 28, NR_VMSCAN_WRITE = 29, NR_VMSCAN_IMMEDIATE = 30, NR_DIRTIED = 31, NR_WRITTEN = 32, NR_THROTTLED_WRITTEN = 33, NR_KERNEL_MISC_RECLAIMABLE = 34, NR_FOLL_PIN_ACQUIRED = 35, NR_FOLL_PIN_RELEASED = 36, NR_KERNEL_STACK_KB = 37, NR_PAGETABLE = 38, NR_VM_NODE_STAT_ITEMS = 39, }; enum lru_list { LRU_INACTIVE_ANON = 0, LRU_ACTIVE_ANON = 1, LRU_INACTIVE_FILE = 2, LRU_ACTIVE_FILE = 3, LRU_UNEVICTABLE = 4, NR_LRU_LISTS = 5, }; enum vmscan_throttle_state { VMSCAN_THROTTLE_WRITEBACK = 0, VMSCAN_THROTTLE_ISOLATED = 1, VMSCAN_THROTTLE_NOPROGRESS = 2, NR_VMSCAN_THROTTLE = 3, }; typedef unsigned int isolate_mode_t; enum zone_watermarks { WMARK_MIN = 0, WMARK_LOW = 1, WMARK_HIGH = 2, NR_WMARK = 3, }; enum { ZONELIST_FALLBACK = 0, MAX_ZONELISTS = 1, }; typedef void percpu_ref_func_t(struct percpu_ref *); struct percpu_ref_data { atomic_long_t count; percpu_ref_func_t *release; percpu_ref_func_t *confirm_switch; bool force_atomic: 1; bool allow_reinit: 1; struct callback_head rcu; struct percpu_ref *ref; }; struct shrink_control { gfp_t gfp_mask; int nid; long unsigned int nr_to_scan; long unsigned int nr_scanned; struct mem_cgroup *memcg; }; struct shrinker { long unsigned int (*count_objects)(struct shrinker *, struct shrink_control *); long unsigned int (*scan_objects)(struct shrinker *, struct shrink_control *); long int batch; int seeks; unsigned int flags; struct list_head list; int id; atomic_long_t *nr_deferred; }; struct rlimit { __kernel_ulong_t rlim_cur; __kernel_ulong_t rlim_max; }; struct dev_pagemap_ops { void (*page_free)(struct page *); void (*kill)(struct dev_pagemap *); void (*cleanup)(struct dev_pagemap *); vm_fault_t (*migrate_to_ram)(struct vm_fault *); }; struct pid_namespace; struct upid { int nr; struct pid_namespace *ns; }; struct pid { refcount_t count; unsigned int level; spinlock_t lock; struct hlist_head tasks[4]; struct hlist_head inodes; wait_queue_head_t wait_pidfd; struct callback_head rcu; struct upid numbers[1]; }; typedef struct { gid_t val; } kgid_t; struct hrtimer_cpu_base; struct hrtimer_clock_base { struct hrtimer_cpu_base *cpu_base; unsigned int index; clockid_t clockid; seqcount_raw_spinlock_t seq; struct hrtimer *running; struct timerqueue_head active; ktime_t (*get_time)(); ktime_t offset; }; struct hrtimer_cpu_base { raw_spinlock_t lock; unsigned int cpu; unsigned int active_bases; unsigned int clock_was_set_seq; unsigned int hres_active: 1; unsigned int in_hrtirq: 1; unsigned int hang_detected: 1; unsigned int softirq_activated: 1; unsigned int nr_events; short unsigned int nr_retries; short unsigned int nr_hangs; unsigned int max_hang_time; ktime_t expires_next; struct hrtimer *next_timer; ktime_t softirq_expires_next; struct hrtimer *softirq_next_timer; struct hrtimer_clock_base clock_base[8]; }; enum hrtimer_base_type { HRTIMER_BASE_MONOTONIC = 0, HRTIMER_BASE_REALTIME = 1, HRTIMER_BASE_BOOTTIME = 2, HRTIMER_BASE_TAI = 3, HRTIMER_BASE_MONOTONIC_SOFT = 4, HRTIMER_BASE_REALTIME_SOFT = 5, HRTIMER_BASE_BOOTTIME_SOFT = 6, HRTIMER_BASE_TAI_SOFT = 7, HRTIMER_MAX_CLOCK_BASES = 8, }; typedef void __signalfn_t(int); typedef __signalfn_t *__sighandler_t; typedef void __restorefn_t(); typedef __restorefn_t *__sigrestore_t; union sigval { int sival_int; void *sival_ptr; }; typedef union sigval sigval_t; union __sifields { struct { __kernel_pid_t _pid; __kernel_uid32_t _uid; } _kill; struct { __kernel_timer_t _tid; int _overrun; sigval_t _sigval; int _sys_private; } _timer; struct { __kernel_pid_t _pid; __kernel_uid32_t _uid; sigval_t _sigval; } _rt; struct { __kernel_pid_t _pid; __kernel_uid32_t _uid; int _status; __kernel_clock_t _utime; __kernel_clock_t _stime; } _sigchld; struct { void *_addr; union { int _trapno; short int _addr_lsb; struct { char _dummy_bnd[8]; void *_lower; void *_upper; } _addr_bnd; struct { char _dummy_pkey[8]; __u32 _pkey; } _addr_pkey; struct { long unsigned int _data; __u32 _type; } _perf; }; } _sigfault; struct { long int _band; int _fd; } _sigpoll; struct { void *_call_addr; int _syscall; unsigned int _arch; } _sigsys; }; struct kernel_siginfo { struct { int si_signo; int si_errno; int si_code; union __sifields _sifields; }; }; struct sigaction { __sighandler_t sa_handler; long unsigned int sa_flags; __sigrestore_t sa_restorer; sigset_t sa_mask; }; struct k_sigaction { struct sigaction sa; }; struct cpu_itimer { u64 expires; u64 incr; }; struct task_cputime_atomic { atomic64_t utime; atomic64_t stime; atomic64_t sum_exec_runtime; }; struct thread_group_cputimer { struct task_cputime_atomic cputime_atomic; }; struct core_state; struct tty_struct; struct signal_struct { refcount_t sigcnt; atomic_t live; int nr_threads; struct list_head thread_head; wait_queue_head_t wait_chldexit; struct task_struct *curr_target; struct sigpending shared_pending; struct hlist_head multiprocess; int group_exit_code; int notify_count; struct task_struct *group_exit_task; int group_stop_count; unsigned int flags; struct core_state *core_state; unsigned int is_child_subreaper: 1; unsigned int has_child_subreaper: 1; int posix_timer_id; struct list_head posix_timers; struct hrtimer real_timer; ktime_t it_real_incr; struct cpu_itimer it[2]; struct thread_group_cputimer cputimer; struct posix_cputimers posix_cputimers; struct pid *pids[4]; struct pid *tty_old_pgrp; int leader; struct tty_struct *tty; seqlock_t stats_lock; u64 utime; u64 stime; u64 cutime; u64 cstime; u64 gtime; u64 cgtime; struct prev_cputime prev_cputime; long unsigned int nvcsw; long unsigned int nivcsw; long unsigned int cnvcsw; long unsigned int cnivcsw; long unsigned int min_flt; long unsigned int maj_flt; long unsigned int cmin_flt; long unsigned int cmaj_flt; long unsigned int inblock; long unsigned int oublock; long unsigned int cinblock; long unsigned int coublock; long unsigned int maxrss; long unsigned int cmaxrss; struct task_io_accounting ioac; long long unsigned int sum_sched_runtime; struct rlimit rlim[16]; bool oom_flag_origin; short int oom_score_adj; short int oom_score_adj_min; struct mm_struct *oom_mm; struct mutex cred_guard_mutex; struct rw_semaphore exec_update_lock; }; enum rseq_cs_flags_bit { RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT = 0, RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT = 1, RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT = 2, }; struct rseq { __u32 cpu_id_start; __u32 cpu_id; union { __u64 ptr64; __u64 ptr; } rseq_cs; __u32 flags; long: 32; long: 64; }; enum perf_event_task_context { perf_invalid_context = 4294967295, perf_hw_context = 0, perf_sw_context = 1, perf_nr_task_contexts = 2, }; struct rq; struct rq_flags; struct sched_class { void (*enqueue_task)(struct rq *, struct task_struct *, int); void (*dequeue_task)(struct rq *, struct task_struct *, int); void (*yield_task)(struct rq *); bool (*yield_to_task)(struct rq *, struct task_struct *); void (*check_preempt_curr)(struct rq *, struct task_struct *, int); struct task_struct * (*pick_next_task)(struct rq *); void (*put_prev_task)(struct rq *, struct task_struct *); void (*set_next_task)(struct rq *, struct task_struct *, bool); int (*balance)(struct rq *, struct task_struct *, struct rq_flags *); int (*select_task_rq)(struct task_struct *, int, int); struct task_struct * (*pick_task)(struct rq *); void (*migrate_task_rq)(struct task_struct *, int); void (*task_woken)(struct rq *, struct task_struct *); void (*set_cpus_allowed)(struct task_struct *, const struct cpumask *, u32); void (*rq_online)(struct rq *); void (*rq_offline)(struct rq *); struct rq * (*find_lock_rq)(struct task_struct *, struct rq *); void (*task_tick)(struct rq *, struct task_struct *, int); void (*task_fork)(struct task_struct *); void (*task_dead)(struct task_struct *); void (*switched_from)(struct rq *, struct task_struct *); void (*switched_to)(struct rq *, struct task_struct *); void (*prio_changed)(struct rq *, struct task_struct *, int); unsigned int (*get_rr_interval)(struct rq *, struct task_struct *); void (*update_curr)(struct rq *); void (*task_change_group)(struct task_struct *, int); }; struct kernel_cap_struct { __u32 cap[2]; }; typedef struct kernel_cap_struct kernel_cap_t; struct user_struct; struct ucounts; struct group_info; struct cred { atomic_t usage; kuid_t uid; kgid_t gid; kuid_t suid; kgid_t sgid; kuid_t euid; kgid_t egid; kuid_t fsuid; kgid_t fsgid; unsigned int securebits; kernel_cap_t cap_inheritable; kernel_cap_t cap_permitted; kernel_cap_t cap_effective; kernel_cap_t cap_bset; kernel_cap_t cap_ambient; unsigned char jit_keyring; struct key *session_keyring; struct key *process_keyring; struct key *thread_keyring; struct key *request_key_auth; struct user_struct *user; struct user_namespace *user_ns; struct ucounts *ucounts; struct group_info *group_info; union { int non_rcu; struct callback_head rcu; }; }; typedef int32_t key_serial_t; typedef uint32_t key_perm_t; struct key_type; struct key_tag; struct keyring_index_key { long unsigned int hash; union { struct { u16 desc_len; char desc[6]; }; long unsigned int x; }; struct key_type *type; struct key_tag *domain_tag; const char *description; }; union key_payload { void *rcu_data0; void *data[4]; }; struct assoc_array_ptr; struct assoc_array { struct assoc_array_ptr *root; long unsigned int nr_leaves_on_tree; }; struct key_user; struct key_restriction; struct key { refcount_t usage; key_serial_t serial; union { struct list_head graveyard_link; struct rb_node serial_node; }; struct rw_semaphore sem; struct key_user *user; void *security; union { time64_t expiry; time64_t revoked_at; }; time64_t last_used_at; kuid_t uid; kgid_t gid; key_perm_t perm; short unsigned int quotalen; short unsigned int datalen; short int state; long unsigned int flags; union { struct keyring_index_key index_key; struct { long unsigned int hash; long unsigned int len_desc; struct key_type *type; struct key_tag *domain_tag; char *description; }; }; union { union key_payload payload; struct { struct list_head name_link; struct assoc_array keys; }; }; struct key_restriction *restrict_link; }; struct sighand_struct { spinlock_t siglock; refcount_t count; wait_queue_head_t signalfd_wqh; struct k_sigaction action[64]; }; struct io_cq; struct io_context { atomic_long_t refcount; atomic_t active_ref; atomic_t nr_tasks; spinlock_t lock; short unsigned int ioprio; struct xarray icq_tree; struct io_cq *icq_hint; struct hlist_head icq_list; struct work_struct release_work; }; enum rseq_event_mask_bits { RSEQ_EVENT_PREEMPT_BIT = 0, RSEQ_EVENT_SIGNAL_BIT = 1, RSEQ_EVENT_MIGRATE_BIT = 2, }; enum fixed_addresses { FIX_DBGP_BASE = 0, FIX_EARLYCON_MEM_BASE = 1, FIX_APIC_BASE = 2, FIX_IO_APIC_BASE_0 = 3, FIX_IO_APIC_BASE_END = 130, __end_of_permanent_fixed_addresses = 131, FIX_BTMAP_END = 512, FIX_BTMAP_BEGIN = 1023, __end_of_fixed_addresses = 1024, }; struct hlist_bl_node; struct hlist_bl_head { struct hlist_bl_node *first; }; struct hlist_bl_node { struct hlist_bl_node *next; struct hlist_bl_node **pprev; }; struct lockref { union { __u64 lock_count; struct { spinlock_t lock; int count; }; }; }; struct qstr { union { struct { u32 hash; u32 len; }; u64 hash_len; }; const unsigned char *name; }; struct dentry_operations; struct dentry { unsigned int d_flags; seqcount_spinlock_t d_seq; struct hlist_bl_node d_hash; struct dentry *d_parent; struct qstr d_name; struct inode *d_inode; unsigned char d_iname[32]; struct lockref d_lockref; const struct dentry_operations *d_op; struct super_block *d_sb; long unsigned int d_time; void *d_fsdata; union { struct list_head d_lru; wait_queue_head_t *d_wait; }; struct list_head d_child; struct list_head d_subdirs; union { struct hlist_node d_alias; struct hlist_bl_node d_in_lookup_hash; struct callback_head d_rcu; } d_u; }; struct posix_acl; struct inode_operations; struct bdi_writeback; struct file_lock_context; struct cdev; struct fsnotify_mark_connector; struct inode { umode_t i_mode; short unsigned int i_opflags; kuid_t i_uid; kgid_t i_gid; unsigned int i_flags; struct posix_acl *i_acl; struct posix_acl *i_default_acl; const struct inode_operations *i_op; struct super_block *i_sb; struct address_space *i_mapping; long unsigned int i_ino; union { const unsigned int i_nlink; unsigned int __i_nlink; }; dev_t i_rdev; loff_t i_size; struct timespec64 i_atime; struct timespec64 i_mtime; struct timespec64 i_ctime; spinlock_t i_lock; short unsigned int i_bytes; u8 i_blkbits; u8 i_write_hint; blkcnt_t i_blocks; long unsigned int i_state; struct rw_semaphore i_rwsem; long unsigned int dirtied_when; long unsigned int dirtied_time_when; struct hlist_node i_hash; struct list_head i_io_list; struct bdi_writeback *i_wb; int i_wb_frn_winner; u16 i_wb_frn_avg_time; u16 i_wb_frn_history; struct list_head i_lru; struct list_head i_sb_list; struct list_head i_wb_list; union { struct hlist_head i_dentry; struct callback_head i_rcu; }; atomic64_t i_version; atomic64_t i_sequence; atomic_t i_count; atomic_t i_dio_count; atomic_t i_writecount; atomic_t i_readcount; union { const struct file_operations *i_fop; void (*free_inode)(struct inode *); }; struct file_lock_context *i_flctx; struct address_space i_data; struct list_head i_devices; union { struct pipe_inode_info *i_pipe; struct cdev *i_cdev; char *i_link; unsigned int i_dir_seq; }; __u32 i_generation; __u32 i_fsnotify_mask; struct fsnotify_mark_connector *i_fsnotify_marks; void *i_private; }; struct dentry_operations { int (*d_revalidate)(struct dentry *, unsigned int); int (*d_weak_revalidate)(struct dentry *, unsigned int); int (*d_hash)(const struct dentry *, struct qstr *); int (*d_compare)(const struct dentry *, unsigned int, const char *, const struct qstr *); int (*d_delete)(const struct dentry *); int (*d_init)(struct dentry *); void (*d_release)(struct dentry *); void (*d_prune)(struct dentry *); void (*d_iput)(struct dentry *, struct inode *); char * (*d_dname)(struct dentry *, char *, int); struct vfsmount * (*d_automount)(struct path *); int (*d_manage)(const struct path *, bool); struct dentry * (*d_real)(struct dentry *, const struct inode *); long: 64; long: 64; long: 64; }; struct mtd_info; typedef long long int qsize_t; struct quota_format_type; struct mem_dqinfo { struct quota_format_type *dqi_format; int dqi_fmt_id; struct list_head dqi_dirty_list; long unsigned int dqi_flags; unsigned int dqi_bgrace; unsigned int dqi_igrace; qsize_t dqi_max_spc_limit; qsize_t dqi_max_ino_limit; void *dqi_priv; }; struct quota_format_ops; struct quota_info { unsigned int flags; struct rw_semaphore dqio_sem; struct inode *files[3]; struct mem_dqinfo info[3]; const struct quota_format_ops *ops[3]; }; struct rcu_sync { int gp_state; int gp_count; wait_queue_head_t gp_wait; struct callback_head cb_head; }; struct rcuwait { struct task_struct *task; }; struct percpu_rw_semaphore { struct rcu_sync rss; unsigned int *read_count; struct rcuwait writer; wait_queue_head_t waiters; atomic_t block; }; struct sb_writers { int frozen; wait_queue_head_t wait_unfrozen; struct percpu_rw_semaphore rw_sem[3]; }; typedef struct { __u8 b[16]; } uuid_t; struct list_lru_node; struct list_lru { struct list_lru_node *node; struct list_head list; int shrinker_id; bool memcg_aware; }; struct super_operations; struct dquot_operations; struct quotactl_ops; struct export_operations; struct xattr_handler; struct block_device; struct super_block { struct list_head s_list; dev_t s_dev; unsigned char s_blocksize_bits; long unsigned int s_blocksize; loff_t s_maxbytes; struct file_system_type *s_type; const struct super_operations *s_op; const struct dquot_operations *dq_op; const struct quotactl_ops *s_qcop; const struct export_operations *s_export_op; long unsigned int s_flags; long unsigned int s_iflags; long unsigned int s_magic; struct dentry *s_root; struct rw_semaphore s_umount; int s_count; atomic_t s_active; const struct xattr_handler **s_xattr; struct hlist_bl_head s_roots; struct list_head s_mounts; struct block_device *s_bdev; struct backing_dev_info *s_bdi; struct mtd_info *s_mtd; struct hlist_node s_instances; unsigned int s_quota_types; struct quota_info s_dquot; struct sb_writers s_writers; void *s_fs_info; u32 s_time_gran; time64_t s_time_min; time64_t s_time_max; __u32 s_fsnotify_mask; struct fsnotify_mark_connector *s_fsnotify_marks; char s_id[32]; uuid_t s_uuid; unsigned int s_max_links; fmode_t s_mode; struct mutex s_vfs_rename_mutex; const char *s_subtype; const struct dentry_operations *s_d_op; int cleancache_poolid; struct shrinker s_shrink; atomic_long_t s_remove_count; atomic_long_t s_fsnotify_connectors; int s_readonly_remount; errseq_t s_wb_err; struct workqueue_struct *s_dio_done_wq; struct hlist_head s_pins; struct user_namespace *s_user_ns; struct list_lru s_dentry_lru; struct list_lru s_inode_lru; struct callback_head rcu; struct work_struct destroy_work; struct mutex s_sync_lock; int s_stack_depth; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; spinlock_t s_inode_list_lock; struct list_head s_inodes; spinlock_t s_inode_wblist_lock; struct list_head s_inodes_wb; long: 64; long: 64; }; struct vfsmount { struct dentry *mnt_root; struct super_block *mnt_sb; int mnt_flags; struct user_namespace *mnt_userns; }; struct kstat { u32 result_mask; umode_t mode; unsigned int nlink; uint32_t blksize; u64 attributes; u64 attributes_mask; u64 ino; dev_t dev; dev_t rdev; kuid_t uid; kgid_t gid; loff_t size; struct timespec64 atime; struct timespec64 mtime; struct timespec64 ctime; struct timespec64 btime; u64 blocks; u64 mnt_id; }; struct list_lru_one { struct list_head list; long int nr_items; }; struct list_lru_memcg { struct callback_head rcu; struct list_lru_one *lru[0]; }; struct list_lru_node { spinlock_t lock; struct list_lru_one lru; struct list_lru_memcg *memcg_lrus; long int nr_items; long: 64; long: 64; }; enum migrate_mode { MIGRATE_ASYNC = 0, MIGRATE_SYNC_LIGHT = 1, MIGRATE_SYNC = 2, MIGRATE_SYNC_NO_COPY = 3, }; struct exception_table_entry { int insn; int fixup; int type; }; struct key_tag { struct callback_head rcu; refcount_t usage; bool removed; }; typedef int (*request_key_actor_t)(struct key *, void *); struct key_preparsed_payload; struct key_match_data; struct kernel_pkey_params; struct kernel_pkey_query; struct key_type { const char *name; size_t def_datalen; unsigned int flags; int (*vet_description)(const char *); int (*preparse)(struct key_preparsed_payload *); void (*free_preparse)(struct key_preparsed_payload *); int (*instantiate)(struct key *, struct key_preparsed_payload *); int (*update)(struct key *, struct key_preparsed_payload *); int (*match_preparse)(struct key_match_data *); void (*match_free)(struct key_match_data *); void (*revoke)(struct key *); void (*destroy)(struct key *); void (*describe)(const struct key *, struct seq_file *); long int (*read)(const struct key *, char *, size_t); request_key_actor_t request_key; struct key_restriction * (*lookup_restriction)(const char *); int (*asym_query)(const struct kernel_pkey_params *, struct kernel_pkey_query *); int (*asym_eds_op)(struct kernel_pkey_params *, const void *, void *); int (*asym_verify_signature)(struct kernel_pkey_params *, const void *, const void *); struct list_head link; struct lock_class_key lock_class; }; typedef int (*key_restrict_link_func_t)(struct key *, const struct key_type *, const union key_payload *, struct key *); struct key_restriction { key_restrict_link_func_t check; struct key *key; struct key_type *keytype; }; struct percpu_counter { raw_spinlock_t lock; s64 count; struct list_head list; s32 *counters; }; struct user_struct { refcount_t __count; struct percpu_counter epoll_watches; long unsigned int unix_inflight; atomic_long_t pipe_bufs; struct hlist_node uidhash_node; kuid_t uid; atomic_long_t locked_vm; atomic_t nr_watches; struct ratelimit_state ratelimit; }; struct group_info { atomic_t usage; int ngroups; kgid_t gid[0]; }; struct core_thread { struct task_struct *task; struct core_thread *next; }; struct core_state { atomic_t nr_threads; struct core_thread dumper; struct completion startup; }; struct delayed_call { void (*fn)(void *); void *arg; }; struct io_cq { struct request_queue *q; struct io_context *ioc; union { struct list_head q_node; struct kmem_cache *__rcu_icq_cache; }; union { struct hlist_node ioc_node; struct callback_head __rcu_head; }; unsigned int flags; }; struct wait_page_queue; struct kiocb { struct file *ki_filp; loff_t ki_pos; void (*ki_complete)(struct kiocb *, long int); void *private; int ki_flags; u16 ki_hint; u16 ki_ioprio; struct wait_page_queue *ki_waitq; }; struct iattr { unsigned int ia_valid; umode_t ia_mode; kuid_t ia_uid; kgid_t ia_gid; loff_t ia_size; struct timespec64 ia_atime; struct timespec64 ia_mtime; struct timespec64 ia_ctime; struct file *ia_file; }; typedef __kernel_uid32_t projid_t; typedef struct { projid_t val; } kprojid_t; enum quota_type { USRQUOTA = 0, GRPQUOTA = 1, PRJQUOTA = 2, }; struct kqid { union { kuid_t uid; kgid_t gid; kprojid_t projid; }; enum quota_type type; }; struct mem_dqblk { qsize_t dqb_bhardlimit; qsize_t dqb_bsoftlimit; qsize_t dqb_curspace; qsize_t dqb_rsvspace; qsize_t dqb_ihardlimit; qsize_t dqb_isoftlimit; qsize_t dqb_curinodes; time64_t dqb_btime; time64_t dqb_itime; }; struct dquot { struct hlist_node dq_hash; struct list_head dq_inuse; struct list_head dq_free; struct list_head dq_dirty; struct mutex dq_lock; spinlock_t dq_dqb_lock; atomic_t dq_count; struct super_block *dq_sb; struct kqid dq_id; loff_t dq_off; long unsigned int dq_flags; struct mem_dqblk dq_dqb; }; enum { DQF_ROOT_SQUASH_B = 0, DQF_SYS_FILE_B = 16, DQF_PRIVATE = 17, }; struct quota_format_type { int qf_fmt_id; const struct quota_format_ops *qf_ops; struct module *qf_owner; struct quota_format_type *qf_next; }; enum { DQST_LOOKUPS = 0, DQST_DROPS = 1, DQST_READS = 2, DQST_WRITES = 3, DQST_CACHE_HITS = 4, DQST_ALLOC_DQUOTS = 5, DQST_FREE_DQUOTS = 6, DQST_SYNCS = 7, _DQST_DQSTAT_LAST = 8, }; struct quota_format_ops { int (*check_quota_file)(struct super_block *, int); int (*read_file_info)(struct super_block *, int); int (*write_file_info)(struct super_block *, int); int (*free_file_info)(struct super_block *, int); int (*read_dqblk)(struct dquot *); int (*commit_dqblk)(struct dquot *); int (*release_dqblk)(struct dquot *); int (*get_next_id)(struct super_block *, struct kqid *); }; struct dquot_operations { int (*write_dquot)(struct dquot *); struct dquot * (*alloc_dquot)(struct super_block *, int); void (*destroy_dquot)(struct dquot *); int (*acquire_dquot)(struct dquot *); int (*release_dquot)(struct dquot *); int (*mark_dirty)(struct dquot *); int (*write_info)(struct super_block *, int); qsize_t * (*get_reserved_space)(struct inode *); int (*get_projid)(struct inode *, kprojid_t *); int (*get_inode_usage)(struct inode *, qsize_t *); int (*get_next_id)(struct super_block *, struct kqid *); }; struct qc_dqblk { int d_fieldmask; u64 d_spc_hardlimit; u64 d_spc_softlimit; u64 d_ino_hardlimit; u64 d_ino_softlimit; u64 d_space; u64 d_ino_count; s64 d_ino_timer; s64 d_spc_timer; int d_ino_warns; int d_spc_warns; u64 d_rt_spc_hardlimit; u64 d_rt_spc_softlimit; u64 d_rt_space; s64 d_rt_spc_timer; int d_rt_spc_warns; }; struct qc_type_state { unsigned int flags; unsigned int spc_timelimit; unsigned int ino_timelimit; unsigned int rt_spc_timelimit; unsigned int spc_warnlimit; unsigned int ino_warnlimit; unsigned int rt_spc_warnlimit; long long unsigned int ino; blkcnt_t blocks; blkcnt_t nextents; }; struct qc_state { unsigned int s_incoredqs; struct qc_type_state s_state[3]; }; struct qc_info { int i_fieldmask; unsigned int i_flags; unsigned int i_spc_timelimit; unsigned int i_ino_timelimit; unsigned int i_rt_spc_timelimit; unsigned int i_spc_warnlimit; unsigned int i_ino_warnlimit; unsigned int i_rt_spc_warnlimit; }; struct quotactl_ops { int (*quota_on)(struct super_block *, int, int, const struct path *); int (*quota_off)(struct super_block *, int); int (*quota_enable)(struct super_block *, unsigned int); int (*quota_disable)(struct super_block *, unsigned int); int (*quota_sync)(struct super_block *, int); int (*set_info)(struct super_block *, int, struct qc_info *); int (*get_dqblk)(struct super_block *, struct kqid, struct qc_dqblk *); int (*get_nextdqblk)(struct super_block *, struct kqid *, struct qc_dqblk *); int (*set_dqblk)(struct super_block *, struct kqid, struct qc_dqblk *); int (*get_state)(struct super_block *, struct qc_state *); int (*rm_xquota)(struct super_block *, unsigned int); }; enum module_state { MODULE_STATE_LIVE = 0, MODULE_STATE_COMING = 1, MODULE_STATE_GOING = 2, MODULE_STATE_UNFORMED = 3, }; struct kref { refcount_t refcount; }; struct kset; struct kobj_type; struct kernfs_node; struct kobject { const char *name; struct list_head entry; struct kobject *parent; struct kset *kset; struct kobj_type *ktype; struct kernfs_node *sd; struct kref kref; unsigned int state_initialized: 1; unsigned int state_in_sysfs: 1; unsigned int state_add_uevent_sent: 1; unsigned int state_remove_uevent_sent: 1; unsigned int uevent_suppress: 1; }; struct module_param_attrs; struct module_kobject { struct kobject kobj; struct module *mod; struct kobject *drivers_dir; struct module_param_attrs *mp; struct completion *kobj_completion; }; struct latch_tree_node { struct rb_node node[2]; }; struct mod_tree_node { struct module *mod; struct latch_tree_node node; }; struct module_layout { void *base; unsigned int size; unsigned int text_size; unsigned int ro_size; unsigned int ro_after_init_size; struct mod_tree_node mtn; }; struct mod_arch_specific { unsigned int num_orcs; int *orc_unwind_ip; struct orc_entry *orc_unwind; }; struct elf64_sym; typedef struct elf64_sym Elf64_Sym; struct mod_kallsyms { Elf64_Sym *symtab; unsigned int num_symtab; char *strtab; char *typetab; }; struct module_attribute; struct kernel_param; struct module_sect_attrs; struct module_notes_attrs; struct trace_event_call; struct trace_eval_map; struct error_injection_entry; struct module { enum module_state state; struct list_head list; char name[56]; struct module_kobject mkobj; struct module_attribute *modinfo_attrs; const char *version; const char *srcversion; struct kobject *holders_dir; const struct kernel_symbol *syms; const s32 *crcs; unsigned int num_syms; struct mutex param_lock; struct kernel_param *kp; unsigned int num_kp; unsigned int num_gpl_syms; const struct kernel_symbol *gpl_syms; const s32 *gpl_crcs; bool using_gplonly_symbols; bool sig_ok; bool async_probe_requested; unsigned int num_exentries; struct exception_table_entry *extable; int (*init)(); struct module_layout core_layout; struct module_layout init_layout; struct mod_arch_specific arch; long unsigned int taints; unsigned int num_bugs; struct list_head bug_list; struct bug_entry *bug_table; struct mod_kallsyms *kallsyms; struct mod_kallsyms core_kallsyms; struct module_sect_attrs *sect_attrs; struct module_notes_attrs *notes_attrs; char *args; void *percpu; unsigned int percpu_size; void *noinstr_text_start; unsigned int noinstr_text_size; unsigned int num_tracepoints; tracepoint_ptr_t *tracepoints_ptrs; unsigned int num_srcu_structs; struct srcu_struct **srcu_struct_ptrs; unsigned int num_bpf_raw_events; struct bpf_raw_event_map *bpf_raw_events; unsigned int btf_data_size; void *btf_data; struct jump_entry *jump_entries; unsigned int num_jump_entries; unsigned int num_trace_bprintk_fmt; const char **trace_bprintk_fmt_start; struct trace_event_call **trace_events; unsigned int num_trace_events; struct trace_eval_map **trace_evals; unsigned int num_trace_evals; unsigned int num_ftrace_callsites; long unsigned int *ftrace_callsites; void *kprobes_text_start; unsigned int kprobes_text_size; long unsigned int *kprobe_blacklist; unsigned int num_kprobe_blacklist; int num_static_call_sites; struct static_call_site *static_call_sites; struct list_head source_list; struct list_head target_list; void (*exit)(); atomic_t refcnt; struct error_injection_entry *ei_funcs; unsigned int num_ei_funcs; long: 32; long: 64; long: 64; long: 64; long: 64; }; struct writeback_control; struct readahead_control; struct swap_info_struct; struct address_space_operations { int (*writepage)(struct page *, struct writeback_control *); int (*readpage)(struct file *, struct page *); int (*writepages)(struct address_space *, struct writeback_control *); int (*set_page_dirty)(struct page *); int (*readpages)(struct file *, struct address_space *, struct list_head *, unsigned int); void (*readahead)(struct readahead_control *); int (*write_begin)(struct file *, struct address_space *, loff_t, unsigned int, unsigned int, struct page **, void **); int (*write_end)(struct file *, struct address_space *, loff_t, unsigned int, unsigned int, struct page *, void *); sector_t (*bmap)(struct address_space *, sector_t); void (*invalidatepage)(struct page *, unsigned int, unsigned int); int (*releasepage)(struct page *, gfp_t); void (*freepage)(struct page *); ssize_t (*direct_IO)(struct kiocb *, struct iov_iter *); int (*migratepage)(struct address_space *, struct page *, struct page *, enum migrate_mode); bool (*isolate_page)(struct page *, isolate_mode_t); void (*putback_page)(struct page *); int (*launder_page)(struct page *); int (*is_partially_uptodate)(struct page *, long unsigned int, long unsigned int); void (*is_dirty_writeback)(struct page *, bool *, bool *); int (*error_remove_page)(struct address_space *, struct page *); int (*swap_activate)(struct swap_info_struct *, struct file *, sector_t *); void (*swap_deactivate)(struct file *); }; struct fiemap_extent_info; struct fileattr; struct inode_operations { struct dentry * (*lookup)(struct inode *, struct dentry *, unsigned int); const char * (*get_link)(struct dentry *, struct inode *, struct delayed_call *); int (*permission)(struct user_namespace *, struct inode *, int); struct posix_acl * (*get_acl)(struct inode *, int, bool); int (*readlink)(struct dentry *, char *, int); int (*create)(struct user_namespace *, struct inode *, struct dentry *, umode_t, bool); int (*link)(struct dentry *, struct inode *, struct dentry *); int (*unlink)(struct inode *, struct dentry *); int (*symlink)(struct user_namespace *, struct inode *, struct dentry *, const char *); int (*mkdir)(struct user_namespace *, struct inode *, struct dentry *, umode_t); int (*rmdir)(struct inode *, struct dentry *); int (*mknod)(struct user_namespace *, struct inode *, struct dentry *, umode_t, dev_t); int (*rename)(struct user_namespace *, struct inode *, struct dentry *, struct inode *, struct dentry *, unsigned int); int (*setattr)(struct user_namespace *, struct dentry *, struct iattr *); int (*getattr)(struct user_namespace *, const struct path *, struct kstat *, u32, unsigned int); ssize_t (*listxattr)(struct dentry *, char *, size_t); int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64, u64); int (*update_time)(struct inode *, struct timespec64 *, int); int (*atomic_open)(struct inode *, struct dentry *, struct file *, unsigned int, umode_t); int (*tmpfile)(struct user_namespace *, struct inode *, struct dentry *, umode_t); int (*set_acl)(struct user_namespace *, struct inode *, struct posix_acl *, int); int (*fileattr_set)(struct user_namespace *, struct dentry *, struct fileattr *); int (*fileattr_get)(struct dentry *, struct fileattr *); long: 64; }; struct file_lock_context { spinlock_t flc_lock; struct list_head flc_flock; struct list_head flc_posix; struct list_head flc_lease; }; struct file_lock_operations { void (*fl_copy_lock)(struct file_lock *, struct file_lock *); void (*fl_release_private)(struct file_lock *); }; struct nlm_lockowner; struct nfs_lock_info { u32 state; struct nlm_lockowner *owner; struct list_head list; }; struct nfs4_lock_state; struct nfs4_lock_info { struct nfs4_lock_state *owner; }; struct fasync_struct; struct lock_manager_operations; struct file_lock { struct file_lock *fl_blocker; struct list_head fl_list; struct hlist_node fl_link; struct list_head fl_blocked_requests; struct list_head fl_blocked_member; fl_owner_t fl_owner; unsigned int fl_flags; unsigned char fl_type; unsigned int fl_pid; int fl_link_cpu; wait_queue_head_t fl_wait; struct file *fl_file; loff_t fl_start; loff_t fl_end; struct fasync_struct *fl_fasync; long unsigned int fl_break_time; long unsigned int fl_downgrade_time; const struct file_lock_operations *fl_ops; const struct lock_manager_operations *fl_lmops; union { struct nfs_lock_info nfs_fl; struct nfs4_lock_info nfs4_fl; struct { struct list_head link; int state; unsigned int debug_id; } afs; } fl_u; }; struct lock_manager_operations { fl_owner_t (*lm_get_owner)(fl_owner_t); void (*lm_put_owner)(fl_owner_t); void (*lm_notify)(struct file_lock *); int (*lm_grant)(struct file_lock *, int); bool (*lm_break)(struct file_lock *); int (*lm_change)(struct file_lock *, int, struct list_head *); void (*lm_setup)(struct file_lock *, void **); bool (*lm_breaker_owns_lease)(struct file_lock *); }; struct fasync_struct { rwlock_t fa_lock; int magic; int fa_fd; struct fasync_struct *fa_next; struct file *fa_file; struct callback_head fa_rcu; }; enum { SB_UNFROZEN = 0, SB_FREEZE_WRITE = 1, SB_FREEZE_PAGEFAULT = 2, SB_FREEZE_FS = 3, SB_FREEZE_COMPLETE = 4, }; struct kstatfs; struct super_operations { struct inode * (*alloc_inode)(struct super_block *); void (*destroy_inode)(struct inode *); void (*free_inode)(struct inode *); void (*dirty_inode)(struct inode *, int); int (*write_inode)(struct inode *, struct writeback_control *); int (*drop_inode)(struct inode *); void (*evict_inode)(struct inode *); void (*put_super)(struct super_block *); int (*sync_fs)(struct super_block *, int); int (*freeze_super)(struct super_block *); int (*freeze_fs)(struct super_block *); int (*thaw_super)(struct super_block *); int (*unfreeze_fs)(struct super_block *); int (*statfs)(struct dentry *, struct kstatfs *); int (*remount_fs)(struct super_block *, int *, char *); void (*umount_begin)(struct super_block *); int (*show_options)(struct seq_file *, struct dentry *); int (*show_devname)(struct seq_file *, struct dentry *); int (*show_path)(struct seq_file *, struct dentry *); int (*show_stats)(struct seq_file *, struct dentry *); long int (*nr_cached_objects)(struct super_block *, struct shrink_control *); long int (*free_cached_objects)(struct super_block *, struct shrink_control *); }; struct iomap; struct fid; struct export_operations { int (*encode_fh)(struct inode *, __u32 *, int *, struct inode *); struct dentry * (*fh_to_dentry)(struct super_block *, struct fid *, int, int); struct dentry * (*fh_to_parent)(struct super_block *, struct fid *, int, int); int (*get_name)(struct dentry *, char *, struct dentry *); struct dentry * (*get_parent)(struct dentry *); int (*commit_metadata)(struct inode *); int (*get_uuid)(struct super_block *, u8 *, u32 *, u64 *); int (*map_blocks)(struct inode *, loff_t, u64, struct iomap *, bool, u32 *); int (*commit_blocks)(struct inode *, struct iomap *, int, struct iattr *); u64 (*fetch_iversion)(struct inode *); long unsigned int flags; }; struct xattr_handler { const char *name; const char *prefix; int flags; bool (*list)(struct dentry *); int (*get)(const struct xattr_handler *, struct dentry *, struct inode *, const char *, void *, size_t); int (*set)(const struct xattr_handler *, struct user_namespace *, struct dentry *, struct inode *, const char *, const void *, size_t, int); }; typedef int (*filldir_t)(struct dir_context *, const char *, int, loff_t, u64, unsigned int); struct dir_context { filldir_t actor; loff_t pos; }; struct p_log; struct fs_parameter; struct fs_parse_result; typedef int fs_param_type(struct p_log *, const struct fs_parameter_spec *, struct fs_parameter *, struct fs_parse_result *); struct fs_parameter_spec { const char *name; fs_param_type *type; u8 opt; short unsigned int flags; const void *data; }; enum compound_dtor_id { NULL_COMPOUND_DTOR = 0, COMPOUND_PAGE_DTOR = 1, TRANSHUGE_PAGE_DTOR = 2, NR_COMPOUND_DTORS = 3, }; struct tlb_context { u64 ctx_id; u64 tlb_gen; }; struct tlb_state { struct mm_struct *loaded_mm; union { struct mm_struct *last_user_mm; long unsigned int last_user_mm_spec; }; u16 loaded_mm_asid; u16 next_asid; bool invalidate_other; short unsigned int user_pcid_flush_mask; long unsigned int cr4; struct tlb_context ctxs[6]; }; struct boot_params_to_save { unsigned int start; unsigned int len; }; struct idr { struct xarray idr_rt; unsigned int idr_base; unsigned int idr_next; }; struct kernfs_root; struct kernfs_elem_dir { long unsigned int subdirs; struct rb_root children; struct kernfs_root *root; long unsigned int rev; }; struct kernfs_syscall_ops; struct kernfs_root { struct kernfs_node *kn; unsigned int flags; struct idr ino_idr; u32 last_id_lowbits; u32 id_highbits; struct kernfs_syscall_ops *syscall_ops; struct list_head supers; wait_queue_head_t deactivate_waitq; }; struct kernfs_elem_symlink { struct kernfs_node *target_kn; }; struct kernfs_ops; struct kernfs_open_node; struct kernfs_elem_attr { const struct kernfs_ops *ops; struct kernfs_open_node *open; loff_t size; struct kernfs_node *notify_next; }; struct kernfs_iattrs; struct kernfs_node { atomic_t count; atomic_t active; struct kernfs_node *parent; const char *name; struct rb_node rb; const void *ns; unsigned int hash; union { struct kernfs_elem_dir dir; struct kernfs_elem_symlink symlink; struct kernfs_elem_attr attr; }; void *priv; u64 id; short unsigned int flags; umode_t mode; struct kernfs_iattrs *iattr; }; struct kernfs_open_file; struct kernfs_ops { int (*open)(struct kernfs_open_file *); void (*release)(struct kernfs_open_file *); int (*seq_show)(struct seq_file *, void *); void * (*seq_start)(struct seq_file *, loff_t *); void * (*seq_next)(struct seq_file *, void *, loff_t *); void (*seq_stop)(struct seq_file *, void *); ssize_t (*read)(struct kernfs_open_file *, char *, size_t, loff_t); size_t atomic_write_len; bool prealloc; ssize_t (*write)(struct kernfs_open_file *, char *, size_t, loff_t); __poll_t (*poll)(struct kernfs_open_file *, struct poll_table_struct *); int (*mmap)(struct kernfs_open_file *, struct vm_area_struct *); }; struct kernfs_syscall_ops { int (*show_options)(struct seq_file *, struct kernfs_root *); int (*mkdir)(struct kernfs_node *, const char *, umode_t); int (*rmdir)(struct kernfs_node *); int (*rename)(struct kernfs_node *, struct kernfs_node *, const char *); int (*show_path)(struct seq_file *, struct kernfs_node *, struct kernfs_root *); }; struct kernfs_open_file { struct kernfs_node *kn; struct file *file; struct seq_file *seq_file; void *priv; struct mutex mutex; struct mutex prealloc_mutex; int event; struct list_head list; char *prealloc_buf; size_t atomic_write_len; bool mmapped: 1; bool released: 1; const struct vm_operations_struct *vm_ops; }; enum kobj_ns_type { KOBJ_NS_TYPE_NONE = 0, KOBJ_NS_TYPE_NET = 1, KOBJ_NS_TYPES = 2, }; struct sock; struct kobj_ns_type_operations { enum kobj_ns_type type; bool (*current_may_mount)(); void * (*grab_current_ns)(); const void * (*netlink_ns)(struct sock *); const void * (*initial_ns)(); void (*drop_ns)(void *); }; struct attribute { const char *name; umode_t mode; }; struct bin_attribute; struct attribute_group { const char *name; umode_t (*is_visible)(struct kobject *, struct attribute *, int); umode_t (*is_bin_visible)(struct kobject *, struct bin_attribute *, int); struct attribute **attrs; struct bin_attribute **bin_attrs; }; struct bin_attribute { struct attribute attr; size_t size; void *private; struct address_space * (*f_mapping)(); ssize_t (*read)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t); ssize_t (*write)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t); int (*mmap)(struct file *, struct kobject *, struct bin_attribute *, struct vm_area_struct *); }; struct sysfs_ops { ssize_t (*show)(struct kobject *, struct attribute *, char *); ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t); }; struct kset_uevent_ops; struct kset { struct list_head list; spinlock_t list_lock; struct kobject kobj; const struct kset_uevent_ops *uevent_ops; }; struct kobj_type { void (*release)(struct kobject *); const struct sysfs_ops *sysfs_ops; struct attribute **default_attrs; const struct attribute_group **default_groups; const struct kobj_ns_type_operations * (*child_ns_type)(struct kobject *); const void * (*namespace)(struct kobject *); void (*get_ownership)(struct kobject *, kuid_t *, kgid_t *); }; struct kobj_uevent_env { char *argv[3]; char *envp[64]; int envp_idx; char buf[2048]; int buflen; }; struct kset_uevent_ops { int (* const filter)(struct kset *, struct kobject *); const char * (* const name)(struct kset *, struct kobject *); int (* const uevent)(struct kset *, struct kobject *, struct kobj_uevent_env *); }; enum { __SD_BALANCE_NEWIDLE = 0, __SD_BALANCE_EXEC = 1, __SD_BALANCE_FORK = 2, __SD_BALANCE_WAKE = 3, __SD_WAKE_AFFINE = 4, __SD_ASYM_CPUCAPACITY = 5, __SD_ASYM_CPUCAPACITY_FULL = 6, __SD_SHARE_CPUCAPACITY = 7, __SD_SHARE_PKG_RESOURCES = 8, __SD_SERIALIZE = 9, __SD_ASYM_PACKING = 10, __SD_PREFER_SIBLING = 11, __SD_OVERLAP = 12, __SD_NUMA = 13, __SD_FLAG_CNT = 14, }; typedef __u64 Elf64_Addr; typedef __u16 Elf64_Half; typedef __u32 Elf64_Word; typedef __u64 Elf64_Xword; struct elf64_sym { Elf64_Word st_name; unsigned char st_info; unsigned char st_other; Elf64_Half st_shndx; Elf64_Addr st_value; Elf64_Xword st_size; }; struct kernel_param_ops { unsigned int flags; int (*set)(const char *, const struct kernel_param *); int (*get)(char *, const struct kernel_param *); void (*free)(void *); }; struct kparam_string; struct kparam_array; struct kernel_param { const char *name; struct module *mod; const struct kernel_param_ops *ops; const u16 perm; s8 level; u8 flags; union { void *arg; const struct kparam_string *str; const struct kparam_array *arr; }; }; struct kparam_string { unsigned int maxlen; char *string; }; struct kparam_array { unsigned int max; unsigned int elemsize; unsigned int *num; const struct kernel_param_ops *ops; void *elem; }; struct error_injection_entry { long unsigned int addr; int etype; }; struct module_attribute { struct attribute attr; ssize_t (*show)(struct module_attribute *, struct module_kobject *, char *); ssize_t (*store)(struct module_attribute *, struct module_kobject *, const char *, size_t); void (*setup)(struct module *, const char *); int (*test)(struct module *); void (*free)(struct module *); }; struct x86_legacy_devices { int pnpbios; }; enum x86_legacy_i8042_state { X86_LEGACY_I8042_PLATFORM_ABSENT = 0, X86_LEGACY_I8042_FIRMWARE_ABSENT = 1, X86_LEGACY_I8042_EXPECTED_PRESENT = 2, }; struct x86_legacy_features { enum x86_legacy_i8042_state i8042; int rtc; int warm_reset; int no_vga; int reserve_bios_regions; struct x86_legacy_devices devices; }; struct ghcb; struct x86_hyper_runtime { void (*pin_vcpu)(int); void (*sev_es_hcall_prepare)(struct ghcb *, struct pt_regs *); bool (*sev_es_hcall_finish)(struct ghcb *, struct pt_regs *); }; struct x86_platform_ops { long unsigned int (*calibrate_cpu)(); long unsigned int (*calibrate_tsc)(); void (*get_wallclock)(struct timespec64 *); int (*set_wallclock)(const struct timespec64 *); void (*iommu_shutdown)(); bool (*is_untracked_pat_range)(u64, u64); void (*nmi_init)(); unsigned char (*get_nmi_reason)(); void (*save_sched_clock_state)(); void (*restore_sched_clock_state)(); void (*apic_post_init)(); struct x86_legacy_features legacy; void (*set_legacy_features)(); struct x86_hyper_runtime hyper; }; typedef long unsigned int irq_hw_number_t; typedef int (*initcall_t)(); typedef int initcall_entry_t; struct obs_kernel_param { const char *str; int (*setup_func)(char *); int early; }; struct static_key_false { struct static_key key; }; struct static_call_mod { struct static_call_mod *next; struct module *mod; struct static_call_site *sites; }; enum system_states { SYSTEM_BOOTING = 0, SYSTEM_SCHEDULING = 1, SYSTEM_FREEING_INITMEM = 2, SYSTEM_RUNNING = 3, SYSTEM_HALT = 4, SYSTEM_POWER_OFF = 5, SYSTEM_RESTART = 6, SYSTEM_SUSPEND = 7, }; typedef struct cpumask cpumask_var_t[1]; struct seq_operations { void * (*start)(struct seq_file *, loff_t *); void (*stop)(struct seq_file *, void *); void * (*next)(struct seq_file *, void *, loff_t *); int (*show)(struct seq_file *, void *); }; enum perf_event_state { PERF_EVENT_STATE_DEAD = 4294967292, PERF_EVENT_STATE_EXIT = 4294967293, PERF_EVENT_STATE_ERROR = 4294967294, PERF_EVENT_STATE_OFF = 4294967295, PERF_EVENT_STATE_INACTIVE = 0, PERF_EVENT_STATE_ACTIVE = 1, }; typedef struct { atomic_long_t a; } local_t; typedef struct { local_t a; } local64_t; struct perf_event_attr { __u32 type; __u32 size; __u64 config; union { __u64 sample_period; __u64 sample_freq; }; __u64 sample_type; __u64 read_format; __u64 disabled: 1; __u64 inherit: 1; __u64 pinned: 1; __u64 exclusive: 1; __u64 exclude_user: 1; __u64 exclude_kernel: 1; __u64 exclude_hv: 1; __u64 exclude_idle: 1; __u64 mmap: 1; __u64 comm: 1; __u64 freq: 1; __u64 inherit_stat: 1; __u64 enable_on_exec: 1; __u64 task: 1; __u64 watermark: 1; __u64 precise_ip: 2; __u64 mmap_data: 1; __u64 sample_id_all: 1; __u64 exclude_host: 1; __u64 exclude_guest: 1; __u64 exclude_callchain_kernel: 1; __u64 exclude_callchain_user: 1; __u64 mmap2: 1; __u64 comm_exec: 1; __u64 use_clockid: 1; __u64 context_switch: 1; __u64 write_backward: 1; __u64 namespaces: 1; __u64 ksymbol: 1; __u64 bpf_event: 1; __u64 aux_output: 1; __u64 cgroup: 1; __u64 text_poke: 1; __u64 build_id: 1; __u64 inherit_thread: 1; __u64 remove_on_exec: 1; __u64 sigtrap: 1; __u64 __reserved_1: 26; union { __u32 wakeup_events; __u32 wakeup_watermark; }; __u32 bp_type; union { __u64 bp_addr; __u64 kprobe_func; __u64 uprobe_path; __u64 config1; }; union { __u64 bp_len; __u64 kprobe_addr; __u64 probe_offset; __u64 config2; }; __u64 branch_sample_type; __u64 sample_regs_user; __u32 sample_stack_user; __s32 clockid; __u64 sample_regs_intr; __u32 aux_watermark; __u16 sample_max_stack; __u16 __reserved_2; __u32 aux_sample_size; __u32 __reserved_3; __u64 sig_data; }; struct hw_perf_event_extra { u64 config; unsigned int reg; int alloc; int idx; }; struct arch_hw_breakpoint { long unsigned int address; long unsigned int mask; u8 len; u8 type; }; struct hw_perf_event { union { struct { u64 config; u64 last_tag; long unsigned int config_base; long unsigned int event_base; int event_base_rdpmc; int idx; int last_cpu; int flags; struct hw_perf_event_extra extra_reg; struct hw_perf_event_extra branch_reg; }; struct { struct hrtimer hrtimer; }; struct { struct list_head tp_list; }; struct { u64 pwr_acc; u64 ptsc; }; struct { struct arch_hw_breakpoint info; struct list_head bp_list; }; struct { u8 iommu_bank; u8 iommu_cntr; u16 padding; u64 conf; u64 conf1; }; }; struct task_struct *target; void *addr_filters; long unsigned int addr_filters_gen; int state; local64_t prev_count; u64 sample_period; union { struct { u64 last_period; local64_t period_left; }; struct { u64 saved_metric; u64 saved_slots; }; }; u64 interrupts_seq; u64 interrupts; u64 freq_time_stamp; u64 freq_count_stamp; }; struct irq_work { struct __call_single_node node; void (*func)(struct irq_work *); struct rcuwait irqwait; }; struct perf_addr_filters_head { struct list_head list; raw_spinlock_t lock; unsigned int nr_file_filters; }; struct perf_sample_data; typedef void (*perf_overflow_handler_t)(struct perf_event *, struct perf_sample_data *, struct pt_regs *); struct ftrace_ops; struct ftrace_regs; typedef void (*ftrace_func_t)(long unsigned int, long unsigned int, struct ftrace_ops *, struct ftrace_regs *); struct ftrace_hash; struct ftrace_ops_hash { struct ftrace_hash *notrace_hash; struct ftrace_hash *filter_hash; struct mutex regex_lock; }; struct ftrace_ops { ftrace_func_t func; struct ftrace_ops *next; long unsigned int flags; void *private; ftrace_func_t saved_func; struct ftrace_ops_hash local_hash; struct ftrace_ops_hash *func_hash; struct ftrace_ops_hash old_hash; long unsigned int trampoline; long unsigned int trampoline_size; struct list_head list; }; struct pmu; struct perf_buffer; struct perf_addr_filter_range; struct bpf_prog; struct event_filter; struct perf_event { struct list_head event_entry; struct list_head sibling_list; struct list_head active_list; struct rb_node group_node; u64 group_index; struct list_head migrate_entry; struct hlist_node hlist_entry; struct list_head active_entry; int nr_siblings; int event_caps; int group_caps; struct perf_event *group_leader; struct pmu *pmu; void *pmu_private; enum perf_event_state state; unsigned int attach_state; local64_t count; atomic64_t child_count; u64 total_time_enabled; u64 total_time_running; u64 tstamp; u64 shadow_ctx_time; struct perf_event_attr attr; u16 header_size; u16 id_header_size; u16 read_size; struct hw_perf_event hw; struct perf_event_context *ctx; atomic_long_t refcount; atomic64_t child_total_time_enabled; atomic64_t child_total_time_running; struct mutex child_mutex; struct list_head child_list; struct perf_event *parent; int oncpu; int cpu; struct list_head owner_entry; struct task_struct *owner; struct mutex mmap_mutex; atomic_t mmap_count; struct perf_buffer *rb; struct list_head rb_entry; long unsigned int rcu_batches; int rcu_pending; wait_queue_head_t waitq; struct fasync_struct *fasync; int pending_wakeup; int pending_kill; int pending_disable; long unsigned int pending_addr; struct irq_work pending; atomic_t event_limit; struct perf_addr_filters_head addr_filters; struct perf_addr_filter_range *addr_filter_ranges; long unsigned int addr_filters_gen; struct perf_event *aux_event; void (*destroy)(struct perf_event *); struct callback_head callback_head; struct pid_namespace *ns; u64 id; u64 (*clock)(); perf_overflow_handler_t overflow_handler; void *overflow_handler_context; perf_overflow_handler_t orig_overflow_handler; struct bpf_prog *prog; u64 bpf_cookie; struct trace_event_call *tp_event; struct event_filter *filter; struct ftrace_ops ftrace_ops; struct list_head sb_list; }; struct uid_gid_extent { u32 first; u32 lower_first; u32 count; }; struct uid_gid_map { u32 nr_extents; union { struct uid_gid_extent extent[5]; struct { struct uid_gid_extent *forward; struct uid_gid_extent *reverse; }; }; }; struct proc_ns_operations; struct ns_common { atomic_long_t stashed; const struct proc_ns_operations *ops; unsigned int inum; refcount_t count; }; struct ctl_table; struct ctl_table_root; struct ctl_table_set; struct ctl_dir; struct ctl_node; struct ctl_table_header { union { struct { struct ctl_table *ctl_table; int used; int count; int nreg; }; struct callback_head rcu; }; struct completion *unregistering; struct ctl_table *ctl_table_arg; struct ctl_table_root *root; struct ctl_table_set *set; struct ctl_dir *parent; struct ctl_node *node; struct hlist_head inodes; }; struct ctl_dir { struct ctl_table_header header; struct rb_root root; }; struct ctl_table_set { int (*is_seen)(struct ctl_table_set *); struct ctl_dir dir; }; struct user_namespace { struct uid_gid_map uid_map; struct uid_gid_map gid_map; struct uid_gid_map projid_map; struct user_namespace *parent; int level; kuid_t owner; kgid_t group; struct ns_common ns; long unsigned int flags; bool parent_could_setfcap; struct list_head keyring_name_list; struct key *user_keyring_register; struct rw_semaphore keyring_sem; struct work_struct work; struct ctl_table_set set; struct ctl_table_header *sysctls; struct ucounts *ucounts; long int ucount_max[16]; }; struct pollfd { int fd; short int events; short int revents; }; struct smp_ops { void (*smp_prepare_boot_cpu)(); void (*smp_prepare_cpus)(unsigned int); void (*smp_cpus_done)(unsigned int); void (*stop_other_cpus)(int); void (*crash_stop_other_cpus)(); void (*smp_send_reschedule)(int); int (*cpu_up)(unsigned int, struct task_struct *); int (*cpu_disable)(); void (*cpu_die)(unsigned int); void (*play_dead)(); void (*send_call_func_ipi)(const struct cpumask *); void (*send_call_func_single_ipi)(int); }; struct wait_queue_entry; typedef int (*wait_queue_func_t)(struct wait_queue_entry *, unsigned int, int, void *); struct wait_queue_entry { unsigned int flags; void *private; wait_queue_func_t func; struct list_head entry; }; typedef struct wait_queue_entry wait_queue_entry_t; struct rcu_work { struct work_struct work; struct callback_head rcu; struct workqueue_struct *wq; }; struct folio { union { struct { long unsigned int flags; struct list_head lru; struct address_space *mapping; long unsigned int index; void *private; atomic_t _mapcount; atomic_t _refcount; long unsigned int memcg_data; }; struct page page; }; }; struct anon_vma { struct anon_vma *root; struct rw_semaphore rwsem; atomic_t refcount; unsigned int degree; struct anon_vma *parent; struct rb_root_cached rb_root; }; struct linux_binprm; struct coredump_params; struct linux_binfmt { struct list_head lh; struct module *module; int (*load_binary)(struct linux_binprm *); int (*load_shlib)(struct file *); int (*core_dump)(struct coredump_params *); long unsigned int min_coredump; }; typedef struct { long unsigned int bits[1]; } nodemask_t; struct free_area { struct list_head free_list[4]; long unsigned int nr_free; }; struct zone_padding { char x[0]; }; struct pglist_data; struct lruvec { struct list_head lists[5]; spinlock_t lru_lock; long unsigned int anon_cost; long unsigned int file_cost; atomic_long_t nonresident_age; long unsigned int refaults[2]; long unsigned int flags; struct pglist_data *pgdat; }; struct per_cpu_pages; struct per_cpu_zonestat; struct zone { long unsigned int _watermark[3]; long unsigned int watermark_boost; long unsigned int nr_reserved_highatomic; long int lowmem_reserve[3]; struct pglist_data *zone_pgdat; struct per_cpu_pages *per_cpu_pageset; struct per_cpu_zonestat *per_cpu_zonestats; int pageset_high; int pageset_batch; long unsigned int zone_start_pfn; atomic_long_t managed_pages; long unsigned int spanned_pages; long unsigned int present_pages; const char *name; int initialized; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; struct zone_padding _pad1_; struct free_area free_area[11]; long unsigned int flags; spinlock_t lock; long: 32; long: 64; long: 64; long: 64; struct zone_padding _pad2_; long unsigned int percpu_drift_mark; long unsigned int compact_cached_free_pfn; long unsigned int compact_cached_migrate_pfn[2]; long unsigned int compact_init_migrate_pfn; long unsigned int compact_init_free_pfn; unsigned int compact_considered; unsigned int compact_defer_shift; int compact_order_failed; bool compact_blockskip_flush; bool contiguous; short: 16; struct zone_padding _pad3_; atomic_long_t vm_stat[10]; atomic_long_t vm_numa_event[0]; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct zoneref { struct zone *zone; int zone_idx; }; struct zonelist { struct zoneref _zonerefs[4]; }; enum zone_type { ZONE_DMA32 = 0, ZONE_NORMAL = 1, ZONE_MOVABLE = 2, __MAX_NR_ZONES = 3, }; struct deferred_split { spinlock_t split_queue_lock; struct list_head split_queue; long unsigned int split_queue_len; }; struct per_cpu_nodestat; struct pglist_data { struct zone node_zones[3]; struct zonelist node_zonelists[1]; int nr_zones; long unsigned int node_start_pfn; long unsigned int node_present_pages; long unsigned int node_spanned_pages; int node_id; wait_queue_head_t kswapd_wait; wait_queue_head_t pfmemalloc_wait; wait_queue_head_t reclaim_wait[3]; atomic_t nr_writeback_throttled; long unsigned int nr_reclaim_start; struct task_struct *kswapd; int kswapd_order; enum zone_type kswapd_highest_zoneidx; int kswapd_failures; int kcompactd_max_order; enum zone_type kcompactd_highest_zoneidx; wait_queue_head_t kcompactd_wait; struct task_struct *kcompactd; bool proactive_compact_trigger; long unsigned int totalreserve_pages; struct zone_padding _pad1_; struct deferred_split deferred_split_queue; struct lruvec __lruvec; long unsigned int flags; long: 64; struct zone_padding _pad2_; struct per_cpu_nodestat *per_cpu_nodestats; atomic_long_t vm_stat[39]; }; struct per_cpu_pages { int count; int high; int batch; short int free_factor; struct list_head lists[15]; }; struct per_cpu_zonestat { s8 vm_stat_diff[10]; s8 stat_threshold; }; struct per_cpu_nodestat { s8 stat_threshold; s8 vm_node_stat_diff[39]; }; typedef struct pglist_data pg_data_t; typedef int proc_handler(struct ctl_table *, int, void *, size_t *, loff_t *); struct ctl_table_poll; struct ctl_table { const char *procname; void *data; int maxlen; umode_t mode; struct ctl_table *child; proc_handler *proc_handler; struct ctl_table_poll *poll; void *extra1; void *extra2; }; struct ctl_table_poll { atomic_t event; wait_queue_head_t wait; }; struct ctl_node { struct rb_node node; struct ctl_table_header *header; }; struct ctl_table_root { struct ctl_table_set default_set; struct ctl_table_set * (*lookup)(struct ctl_table_root *); void (*set_ownership)(struct ctl_table_header *, struct ctl_table *, kuid_t *, kgid_t *); int (*permissions)(struct ctl_table_header *, struct ctl_table *); }; struct seq_file { char *buf; size_t size; size_t from; size_t count; size_t pad_until; loff_t index; loff_t read_pos; struct mutex lock; const struct seq_operations *op; int poll_event; const struct file *file; void *private; }; typedef void (*poll_queue_proc)(struct file *, wait_queue_head_t *, struct poll_table_struct *); struct poll_table_struct { poll_queue_proc _qproc; __poll_t _key; }; enum refcount_saturation_type { REFCOUNT_ADD_NOT_ZERO_OVF = 0, REFCOUNT_ADD_OVF = 1, REFCOUNT_ADD_UAF = 2, REFCOUNT_SUB_UAF = 3, REFCOUNT_DEC_LEAK = 4, }; struct trace_event_functions; struct trace_event { struct hlist_node node; struct list_head list; int type; struct trace_event_functions *funcs; }; struct trace_event_class; struct bpf_prog_array; struct trace_event_call { struct list_head list; struct trace_event_class *class; union { char *name; struct tracepoint *tp; }; struct trace_event event; char *print_fmt; struct event_filter *filter; union { void *module; atomic_t refcnt; }; void *data; int flags; int perf_refcount; struct hlist_head *perf_events; struct bpf_prog_array *prog_array; int (*perf_perm)(struct trace_event_call *, struct perf_event *); }; struct trace_eval_map { const char *system; const char *eval_string; long unsigned int eval_value; }; struct cgroup; struct cgroup_subsys; struct cgroup_subsys_state { struct cgroup *cgroup; struct cgroup_subsys *ss; struct percpu_ref refcnt; struct list_head sibling; struct list_head children; struct list_head rstat_css_node; int id; unsigned int flags; u64 serial_nr; atomic_t online_cnt; struct work_struct destroy_work; struct rcu_work destroy_rwork; struct cgroup_subsys_state *parent; }; struct mem_cgroup_id { int id; refcount_t ref; }; struct page_counter { atomic_long_t usage; long unsigned int min; long unsigned int low; long unsigned int high; long unsigned int max; long unsigned int emin; atomic_long_t min_usage; atomic_long_t children_min_usage; long unsigned int elow; atomic_long_t low_usage; atomic_long_t children_low_usage; long unsigned int watermark; long unsigned int failcnt; struct page_counter *parent; }; struct vmpressure { long unsigned int scanned; long unsigned int reclaimed; long unsigned int tree_scanned; long unsigned int tree_reclaimed; spinlock_t sr_lock; struct list_head events; struct mutex events_lock; struct work_struct work; }; struct cgroup_file { struct kernfs_node *kn; long unsigned int notified_at; struct timer_list notify_timer; }; struct mem_cgroup_threshold_ary; struct mem_cgroup_thresholds { struct mem_cgroup_threshold_ary *primary; struct mem_cgroup_threshold_ary *spare; }; struct memcg_padding { char x[0]; }; struct memcg_vmstats { long int state[42]; long unsigned int events[84]; long int state_pending[42]; long unsigned int events_pending[84]; }; struct fprop_global { struct percpu_counter events; unsigned int period; seqcount_t sequence; }; struct wb_domain { spinlock_t lock; struct fprop_global completions; struct timer_list period_timer; long unsigned int period_time; long unsigned int dirty_limit_tstamp; long unsigned int dirty_limit; }; struct wb_completion { atomic_t cnt; wait_queue_head_t *waitq; }; struct memcg_cgwb_frn { u64 bdi_id; int memcg_id; u64 at; struct wb_completion done; }; struct obj_cgroup; struct memcg_vmstats_percpu; struct mem_cgroup_per_node; struct mem_cgroup { struct cgroup_subsys_state css; struct mem_cgroup_id id; struct page_counter memory; union { struct page_counter swap; struct page_counter memsw; }; struct page_counter kmem; struct page_counter tcpmem; struct work_struct high_work; long unsigned int soft_limit; struct vmpressure vmpressure; bool oom_group; bool oom_lock; int under_oom; int swappiness; int oom_kill_disable; struct cgroup_file events_file; struct cgroup_file events_local_file; struct cgroup_file swap_events_file; struct mutex thresholds_lock; struct mem_cgroup_thresholds thresholds; struct mem_cgroup_thresholds memsw_thresholds; struct list_head oom_notify; long unsigned int move_charge_at_immigrate; spinlock_t move_lock; long unsigned int move_lock_flags; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; struct memcg_padding _pad1_; struct memcg_vmstats vmstats; atomic_long_t memory_events[8]; atomic_long_t memory_events_local[8]; long unsigned int socket_pressure; bool tcpmem_active; int tcpmem_pressure; int kmemcg_id; struct obj_cgroup *objcg; struct list_head objcg_list; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; struct memcg_padding _pad2_; atomic_t moving_account; struct task_struct *move_lock_task; struct memcg_vmstats_percpu *vmstats_percpu; struct list_head cgwb_list; struct wb_domain cgwb_domain; struct memcg_cgwb_frn cgwb_frn[4]; struct list_head event_list; spinlock_t event_list_lock; struct deferred_split deferred_split_queue; struct mem_cgroup_per_node *nodeinfo[0]; long: 64; }; struct pid_namespace { struct idr idr; struct callback_head rcu; unsigned int pid_allocated; struct task_struct *child_reaper; struct kmem_cache *pid_cachep; unsigned int level; struct pid_namespace *parent; struct user_namespace *user_ns; struct ucounts *ucounts; int reboot; struct ns_common ns; }; struct ucounts { struct hlist_node node; struct user_namespace *ns; kuid_t uid; atomic_t count; atomic_long_t ucount[16]; }; struct task_cputime { u64 stime; u64 utime; long long unsigned int sum_exec_runtime; }; struct uts_namespace; struct ipc_namespace; struct mnt_namespace; struct net; struct time_namespace; struct cgroup_namespace; struct nsproxy { atomic_t count; struct uts_namespace *uts_ns; struct ipc_namespace *ipc_ns; struct mnt_namespace *mnt_ns; struct pid_namespace *pid_ns_for_children; struct net *net_ns; struct time_namespace *time_ns; struct time_namespace *time_ns_for_children; struct cgroup_namespace *cgroup_ns; }; struct bio; struct bio_list { struct bio *head; struct bio *tail; }; struct request; struct blk_plug { struct request *mq_list; struct request *cached_rq; short unsigned int nr_ios; short unsigned int rq_count; bool multiple_queues; bool has_elevator; bool nowait; struct list_head cb_list; }; struct reclaim_state { long unsigned int reclaimed_slab; }; struct fprop_local_percpu { struct percpu_counter events; unsigned int period; raw_spinlock_t lock; }; enum wb_reason { WB_REASON_BACKGROUND = 0, WB_REASON_VMSCAN = 1, WB_REASON_SYNC = 2, WB_REASON_PERIODIC = 3, WB_REASON_LAPTOP_TIMER = 4, WB_REASON_FS_FREE_SPACE = 5, WB_REASON_FORKER_THREAD = 6, WB_REASON_FOREIGN_FLUSH = 7, WB_REASON_MAX = 8, }; struct bdi_writeback { struct backing_dev_info *bdi; long unsigned int state; long unsigned int last_old_flush; struct list_head b_dirty; struct list_head b_io; struct list_head b_more_io; struct list_head b_dirty_time; spinlock_t list_lock; atomic_t writeback_inodes; struct percpu_counter stat[4]; long unsigned int congested; long unsigned int bw_time_stamp; long unsigned int dirtied_stamp; long unsigned int written_stamp; long unsigned int write_bandwidth; long unsigned int avg_write_bandwidth; long unsigned int dirty_ratelimit; long unsigned int balanced_dirty_ratelimit; struct fprop_local_percpu completions; int dirty_exceeded; enum wb_reason start_all_reason; spinlock_t work_lock; struct list_head work_list; struct delayed_work dwork; struct delayed_work bw_dwork; long unsigned int dirty_sleep; struct list_head bdi_node; struct percpu_ref refcnt; struct fprop_local_percpu memcg_completions; struct cgroup_subsys_state *memcg_css; struct cgroup_subsys_state *blkcg_css; struct list_head memcg_node; struct list_head blkcg_node; struct list_head b_attached; struct list_head offline_node; union { struct work_struct release_work; struct callback_head rcu; }; }; struct device; struct backing_dev_info { u64 id; struct rb_node rb_node; struct list_head bdi_list; long unsigned int ra_pages; long unsigned int io_pages; struct kref refcnt; unsigned int capabilities; unsigned int min_ratio; unsigned int max_ratio; unsigned int max_prop_frac; atomic_long_t tot_write_bandwidth; struct bdi_writeback wb; struct list_head wb_list; struct xarray cgwb_tree; struct mutex cgwb_release_mutex; struct rw_semaphore wb_switch_rwsem; wait_queue_head_t wb_waitq; struct device *dev; char dev_name[64]; struct device *owner; struct timer_list laptop_mode_wb_timer; struct dentry *debug_dir; }; struct css_set { struct cgroup_subsys_state *subsys[5]; refcount_t refcount; struct css_set *dom_cset; struct cgroup *dfl_cgrp; int nr_tasks; struct list_head tasks; struct list_head mg_tasks; struct list_head dying_tasks; struct list_head task_iters; struct list_head e_cset_node[5]; struct list_head threaded_csets; struct list_head threaded_csets_node; struct hlist_node hlist; struct list_head cgrp_links; struct list_head mg_preload_node; struct list_head mg_node; struct cgroup *mg_src_cgrp; struct cgroup *mg_dst_cgrp; struct css_set *mg_dst_cset; bool dead; struct callback_head callback_head; }; struct perf_event_groups { struct rb_root tree; u64 index; }; struct perf_event_context { struct pmu *pmu; raw_spinlock_t lock; struct mutex mutex; struct list_head active_ctx_list; struct perf_event_groups pinned_groups; struct perf_event_groups flexible_groups; struct list_head event_list; struct list_head pinned_active; struct list_head flexible_active; int nr_events; int nr_active; int is_active; int nr_stat; int nr_freq; int rotate_disable; int rotate_necessary; refcount_t refcount; struct task_struct *task; u64 time; u64 timestamp; struct perf_event_context *parent_ctx; u64 parent_gen; u64 generation; int pin_count; void *task_ctx_data; struct callback_head callback_head; }; struct ftrace_ret_stack { long unsigned int ret; long unsigned int func; long long unsigned int calltime; long unsigned int *retp; }; struct blk_rq_stat { u64 mean; u64 min; u64 max; u32 nr_samples; u64 batch; }; enum blk_bounce { BLK_BOUNCE_NONE = 0, BLK_BOUNCE_HIGH = 1, }; enum blk_zoned_model { BLK_ZONED_NONE = 0, BLK_ZONED_HA = 1, BLK_ZONED_HM = 2, }; struct queue_limits { enum blk_bounce bounce; long unsigned int seg_boundary_mask; long unsigned int virt_boundary_mask; unsigned int max_hw_sectors; unsigned int max_dev_sectors; unsigned int chunk_sectors; unsigned int max_sectors; unsigned int max_segment_size; unsigned int physical_block_size; unsigned int logical_block_size; unsigned int alignment_offset; unsigned int io_min; unsigned int io_opt; unsigned int max_discard_sectors; unsigned int max_hw_discard_sectors; unsigned int max_write_same_sectors; unsigned int max_write_zeroes_sectors; unsigned int max_zone_append_sectors; unsigned int discard_granularity; unsigned int discard_alignment; unsigned int zone_write_granularity; short unsigned int max_segments; short unsigned int max_integrity_segments; short unsigned int max_discard_segments; unsigned char misaligned; unsigned char discard_misaligned; unsigned char raid_partial_stripes_expensive; enum blk_zoned_model zoned; }; typedef void *mempool_alloc_t(gfp_t, void *); typedef void mempool_free_t(void *, void *); struct mempool_s { spinlock_t lock; int min_nr; int curr_nr; void **elements; void *pool_data; mempool_alloc_t *alloc; mempool_free_t *free; wait_queue_head_t wait; }; typedef struct mempool_s mempool_t; struct bio_alloc_cache; struct bio_set { struct kmem_cache *bio_slab; unsigned int front_pad; struct bio_alloc_cache *cache; mempool_t bio_pool; mempool_t bvec_pool; unsigned int back_pad; spinlock_t rescue_lock; struct bio_list rescue_list; struct work_struct rescue_work; struct workqueue_struct *rescue_workqueue; struct hlist_node cpuhp_dead; }; struct elevator_queue; struct blk_queue_stats; struct rq_qos; struct blk_mq_ops; struct blk_mq_ctx; struct blk_mq_hw_ctx; struct gendisk; struct blk_stat_callback; struct blk_mq_tags; struct blkcg_gq; struct blk_flush_queue; struct blk_mq_tag_set; struct blk_independent_access_ranges; struct request_queue { struct request *last_merge; struct elevator_queue *elevator; struct percpu_ref q_usage_counter; struct blk_queue_stats *stats; struct rq_qos *rq_qos; const struct blk_mq_ops *mq_ops; struct blk_mq_ctx *queue_ctx; unsigned int queue_depth; struct blk_mq_hw_ctx **queue_hw_ctx; unsigned int nr_hw_queues; void *queuedata; long unsigned int queue_flags; atomic_t pm_only; int id; spinlock_t queue_lock; struct gendisk *disk; struct kobject kobj; struct kobject *mq_kobj; long unsigned int nr_requests; unsigned int dma_pad_mask; unsigned int dma_alignment; unsigned int rq_timeout; int poll_nsec; struct blk_stat_callback *poll_cb; struct blk_rq_stat poll_stat[16]; struct timer_list timeout; struct work_struct timeout_work; atomic_t nr_active_requests_shared_tags; struct blk_mq_tags *sched_shared_tags; struct list_head icq_list; long unsigned int blkcg_pols[1]; struct blkcg_gq *root_blkg; struct list_head blkg_list; struct queue_limits limits; unsigned int required_elevator_features; int node; struct mutex debugfs_mutex; struct blk_flush_queue *fq; struct list_head requeue_list; spinlock_t requeue_lock; struct delayed_work requeue_work; struct mutex sysfs_lock; struct mutex sysfs_dir_lock; struct list_head unused_hctx_list; spinlock_t unused_hctx_lock; int mq_freeze_depth; struct callback_head callback_head; wait_queue_head_t mq_freeze_wq; struct mutex mq_freeze_lock; int quiesce_depth; struct blk_mq_tag_set *tag_set; struct list_head tag_set_list; struct bio_set bio_split; struct dentry *debugfs_dir; struct dentry *sched_debugfs_dir; struct dentry *rqos_debugfs_dir; bool mq_sysfs_init_done; u64 write_hints[5]; struct blk_independent_access_ranges *ia_ranges; }; struct bpf_run_ctx {}; struct cgroup_base_stat { struct task_cputime cputime; }; struct psi_group {}; struct cgroup_bpf { struct bpf_prog_array *effective[23]; struct list_head progs[23]; u32 flags[23]; struct list_head storages; struct bpf_prog_array *inactive; struct percpu_ref refcnt; struct work_struct release_work; }; struct cgroup_freezer_state { bool freeze; int e_freeze; int nr_frozen_descendants; int nr_frozen_tasks; }; struct cgroup_root; struct cgroup_rstat_cpu; struct cgroup { struct cgroup_subsys_state self; long unsigned int flags; int level; int max_depth; int nr_descendants; int nr_dying_descendants; int max_descendants; int nr_populated_csets; int nr_populated_domain_children; int nr_populated_threaded_children; int nr_threaded_children; struct kernfs_node *kn; struct cgroup_file procs_file; struct cgroup_file events_file; u16 subtree_control; u16 subtree_ss_mask; u16 old_subtree_control; u16 old_subtree_ss_mask; struct cgroup_subsys_state *subsys[5]; struct cgroup_root *root; struct list_head cset_links; struct list_head e_csets[5]; struct cgroup *dom_cgrp; struct cgroup *old_dom_cgrp; struct cgroup_rstat_cpu *rstat_cpu; struct list_head rstat_css_list; struct cgroup_base_stat last_bstat; struct cgroup_base_stat bstat; struct prev_cputime prev_cputime; struct list_head pidlists; struct mutex pidlist_mutex; wait_queue_head_t offline_waitq; struct work_struct release_agent_work; struct psi_group psi; struct cgroup_bpf bpf; atomic_t congestion_count; struct cgroup_freezer_state freezer; u64 ancestor_ids[0]; }; struct wait_page_queue { struct folio *folio; int bit_nr; wait_queue_entry_t wait; }; enum writeback_sync_modes { WB_SYNC_NONE = 0, WB_SYNC_ALL = 1, }; struct writeback_control { long int nr_to_write; long int pages_skipped; loff_t range_start; loff_t range_end; enum writeback_sync_modes sync_mode; unsigned int for_kupdate: 1; unsigned int for_background: 1; unsigned int tagged_writepages: 1; unsigned int for_reclaim: 1; unsigned int range_cyclic: 1; unsigned int for_sync: 1; unsigned int no_cgroup_owner: 1; unsigned int punt_to_cgroup: 1; struct bdi_writeback *wb; struct inode *inode; int wb_id; int wb_lcand_id; int wb_tcand_id; size_t wb_bytes; size_t wb_lcand_bytes; size_t wb_tcand_bytes; }; struct readahead_control { struct file *file; struct address_space *mapping; struct file_ra_state *ra; long unsigned int _index; unsigned int _nr_pages; unsigned int _batch_count; }; struct iovec; struct kvec; struct bio_vec; struct iov_iter { u8 iter_type; bool nofault; bool data_source; size_t iov_offset; size_t count; union { const struct iovec *iov; const struct kvec *kvec; const struct bio_vec *bvec; struct xarray *xarray; struct pipe_inode_info *pipe; }; union { long unsigned int nr_segs; struct { unsigned int head; unsigned int start_head; }; loff_t xarray_start; }; }; struct swap_cluster_info { spinlock_t lock; unsigned int data: 24; unsigned int flags: 8; }; struct swap_cluster_list { struct swap_cluster_info head; struct swap_cluster_info tail; }; struct percpu_cluster; struct swap_info_struct { struct percpu_ref users; long unsigned int flags; short int prio; struct plist_node list; signed char type; unsigned int max; unsigned char *swap_map; struct swap_cluster_info *cluster_info; struct swap_cluster_list free_clusters; unsigned int lowest_bit; unsigned int highest_bit; unsigned int pages; unsigned int inuse_pages; unsigned int cluster_next; unsigned int cluster_nr; unsigned int *cluster_next_cpu; struct percpu_cluster *percpu_cluster; struct rb_root swap_extent_root; struct block_device *bdev; struct file *swap_file; unsigned int old_block_size; struct completion comp; spinlock_t lock; spinlock_t cont_lock; struct work_struct discard_work; struct swap_cluster_list discard_clusters; struct plist_node avail_lists[0]; }; struct cdev { struct kobject kobj; struct module *owner; const struct file_operations *ops; struct list_head list; dev_t dev; unsigned int count; }; enum dl_dev_state { DL_DEV_NO_DRIVER = 0, DL_DEV_PROBING = 1, DL_DEV_DRIVER_BOUND = 2, DL_DEV_UNBINDING = 3, }; struct dev_links_info { struct list_head suppliers; struct list_head consumers; struct list_head defer_sync; enum dl_dev_state status; }; struct pm_message { int event; }; typedef struct pm_message pm_message_t; struct pm_subsys_data; struct dev_pm_qos; struct dev_pm_info { pm_message_t power_state; unsigned int can_wakeup: 1; unsigned int async_suspend: 1; bool in_dpm_list: 1; bool is_prepared: 1; bool is_suspended: 1; bool is_noirq_suspended: 1; bool is_late_suspended: 1; bool no_pm: 1; bool early_init: 1; bool direct_complete: 1; u32 driver_flags; spinlock_t lock; unsigned int should_wakeup: 1; struct pm_subsys_data *subsys_data; void (*set_latency_tolerance)(struct device *, s32); struct dev_pm_qos *qos; }; struct dev_archdata {}; struct dev_iommu; enum device_removable { DEVICE_REMOVABLE_NOT_SUPPORTED = 0, DEVICE_REMOVABLE_UNKNOWN = 1, DEVICE_FIXED = 2, DEVICE_REMOVABLE = 3, }; struct device_private; struct device_type; struct bus_type; struct device_driver; struct dev_pm_domain; struct irq_domain; struct bus_dma_region; struct device_dma_parameters; struct io_tlb_mem; struct device_node; struct fwnode_handle; struct class; struct iommu_group; struct device { struct kobject kobj; struct device *parent; struct device_private *p; const char *init_name; const struct device_type *type; struct bus_type *bus; struct device_driver *driver; void *platform_data; void *driver_data; struct mutex mutex; struct dev_links_info links; struct dev_pm_info power; struct dev_pm_domain *pm_domain; struct irq_domain *msi_domain; raw_spinlock_t msi_lock; struct list_head msi_list; u64 *dma_mask; u64 coherent_dma_mask; u64 bus_dma_limit; const struct bus_dma_region *dma_range_map; struct device_dma_parameters *dma_parms; struct list_head dma_pools; struct io_tlb_mem *dma_io_tlb_mem; struct dev_archdata archdata; struct device_node *of_node; struct fwnode_handle *fwnode; dev_t devt; u32 id; spinlock_t devres_lock; struct list_head devres_head; struct class *class; const struct attribute_group **groups; void (*release)(struct device *); struct iommu_group *iommu_group; struct dev_iommu *iommu; enum device_removable removable; bool offline_disabled: 1; bool offline: 1; bool of_node_reused: 1; bool state_synced: 1; bool can_match: 1; }; struct disk_stats; struct partition_meta_info; struct block_device { sector_t bd_start_sect; sector_t bd_nr_sectors; struct disk_stats *bd_stats; long unsigned int bd_stamp; bool bd_read_only; dev_t bd_dev; int bd_openers; struct inode *bd_inode; struct super_block *bd_super; void *bd_claiming; struct device bd_device; void *bd_holder; int bd_holders; bool bd_write_holder; struct kobject *bd_holder_dir; u8 bd_partno; spinlock_t bd_size_lock; struct gendisk *bd_disk; struct request_queue *bd_queue; int bd_fsfreeze_count; struct mutex bd_fsfreeze_mutex; struct super_block *bd_fsfreeze_sb; struct partition_meta_info *bd_meta_info; }; struct io_comp_batch { struct request *req_list; bool need_ts; void (*complete)(struct io_comp_batch *); }; struct fc_log; struct p_log { const char *prefix; struct fc_log *log; }; enum fs_context_purpose { FS_CONTEXT_FOR_MOUNT = 0, FS_CONTEXT_FOR_SUBMOUNT = 1, FS_CONTEXT_FOR_RECONFIGURE = 2, }; enum fs_context_phase { FS_CONTEXT_CREATE_PARAMS = 0, FS_CONTEXT_CREATING = 1, FS_CONTEXT_AWAITING_MOUNT = 2, FS_CONTEXT_AWAITING_RECONF = 3, FS_CONTEXT_RECONF_PARAMS = 4, FS_CONTEXT_RECONFIGURING = 5, FS_CONTEXT_FAILED = 6, }; struct fs_context_operations; struct fs_context { const struct fs_context_operations *ops; struct mutex uapi_mutex; struct file_system_type *fs_type; void *fs_private; void *sget_key; struct dentry *root; struct user_namespace *user_ns; struct net *net_ns; const struct cred *cred; struct p_log log; const char *source; void *security; void *s_fs_info; unsigned int sb_flags; unsigned int sb_flags_mask; unsigned int s_iflags; unsigned int lsm_flags; enum fs_context_purpose purpose: 8; enum fs_context_phase phase: 8; bool need_free: 1; bool global: 1; bool oldapi: 1; }; struct audit_names; struct filename { const char *name; const char *uptr; int refcnt; struct audit_names *aname; const char iname[0]; }; typedef u8 blk_status_t; struct bvec_iter { sector_t bi_sector; unsigned int bi_size; unsigned int bi_idx; unsigned int bi_bvec_done; } __attribute__((packed)); typedef unsigned int blk_qc_t; typedef void bio_end_io_t(struct bio *); struct bio_issue { u64 value; }; struct bio_vec { struct page *bv_page; unsigned int bv_len; unsigned int bv_offset; }; struct bio { struct bio *bi_next; struct block_device *bi_bdev; unsigned int bi_opf; short unsigned int bi_flags; short unsigned int bi_ioprio; short unsigned int bi_write_hint; blk_status_t bi_status; atomic_t __bi_remaining; struct bvec_iter bi_iter; blk_qc_t bi_cookie; bio_end_io_t *bi_end_io; void *bi_private; struct blkcg_gq *bi_blkg; struct bio_issue bi_issue; union { }; short unsigned int bi_vcnt; short unsigned int bi_max_vecs; atomic_t __bi_cnt; struct bio_vec *bi_io_vec; struct bio_set *bi_pool; struct bio_vec bi_inline_vecs[0]; }; struct linux_binprm { struct vm_area_struct *vma; long unsigned int vma_pages; struct mm_struct *mm; long unsigned int p; long unsigned int argmin; unsigned int have_execfd: 1; unsigned int execfd_creds: 1; unsigned int secureexec: 1; unsigned int point_of_no_return: 1; struct file *executable; struct file *interpreter; struct file *file; struct cred *cred; int unsafe; unsigned int per_clear; int argc; int envc; const char *filename; const char *interp; const char *fdpath; unsigned int interp_flags; int execfd; long unsigned int loader; long unsigned int exec; struct rlimit rlim_stack; char buf[256]; }; struct coredump_params { const kernel_siginfo_t *siginfo; struct pt_regs *regs; struct file *file; long unsigned int limit; long unsigned int mm_flags; loff_t written; loff_t pos; loff_t to_skip; }; struct dev_pm_ops { int (*prepare)(struct device *); void (*complete)(struct device *); int (*suspend)(struct device *); int (*resume)(struct device *); int (*freeze)(struct device *); int (*thaw)(struct device *); int (*poweroff)(struct device *); int (*restore)(struct device *); int (*suspend_late)(struct device *); int (*resume_early)(struct device *); int (*freeze_late)(struct device *); int (*thaw_early)(struct device *); int (*poweroff_late)(struct device *); int (*restore_early)(struct device *); int (*suspend_noirq)(struct device *); int (*resume_noirq)(struct device *); int (*freeze_noirq)(struct device *); int (*thaw_noirq)(struct device *); int (*poweroff_noirq)(struct device *); int (*restore_noirq)(struct device *); int (*runtime_suspend)(struct device *); int (*runtime_resume)(struct device *); int (*runtime_idle)(struct device *); }; struct pm_subsys_data { spinlock_t lock; unsigned int refcount; }; struct dev_pm_domain { struct dev_pm_ops ops; int (*start)(struct device *); void (*detach)(struct device *, bool); int (*activate)(struct device *); void (*sync)(struct device *); void (*dismiss)(struct device *); }; struct iommu_ops; struct subsys_private; struct bus_type { const char *name; const char *dev_name; struct device *dev_root; const struct attribute_group **bus_groups; const struct attribute_group **dev_groups; const struct attribute_group **drv_groups; int (*match)(struct device *, struct device_driver *); int (*uevent)(struct device *, struct kobj_uevent_env *); int (*probe)(struct device *); void (*sync_state)(struct device *); void (*remove)(struct device *); void (*shutdown)(struct device *); int (*online)(struct device *); int (*offline)(struct device *); int (*suspend)(struct device *, pm_message_t); int (*resume)(struct device *); int (*num_vf)(struct device *); int (*dma_configure)(struct device *); const struct dev_pm_ops *pm; const struct iommu_ops *iommu_ops; struct subsys_private *p; struct lock_class_key lock_key; bool need_parent_lock; }; enum probe_type { PROBE_DEFAULT_STRATEGY = 0, PROBE_PREFER_ASYNCHRONOUS = 1, PROBE_FORCE_SYNCHRONOUS = 2, }; struct of_device_id; struct acpi_device_id; struct driver_private; struct device_driver { const char *name; struct bus_type *bus; struct module *owner; const char *mod_name; bool suppress_bind_attrs; enum probe_type probe_type; const struct of_device_id *of_match_table; const struct acpi_device_id *acpi_match_table; int (*probe)(struct device *); void (*sync_state)(struct device *); int (*remove)(struct device *); void (*shutdown)(struct device *); int (*suspend)(struct device *, pm_message_t); int (*resume)(struct device *); const struct attribute_group **groups; const struct attribute_group **dev_groups; const struct dev_pm_ops *pm; void (*coredump)(struct device *); struct driver_private *p; }; struct iommu_ops {}; struct device_type { const char *name; const struct attribute_group **groups; int (*uevent)(struct device *, struct kobj_uevent_env *); char * (*devnode)(struct device *, umode_t *, kuid_t *, kgid_t *); void (*release)(struct device *); const struct dev_pm_ops *pm; }; struct class { const char *name; struct module *owner; const struct attribute_group **class_groups; const struct attribute_group **dev_groups; struct kobject *dev_kobj; int (*dev_uevent)(struct device *, struct kobj_uevent_env *); char * (*devnode)(struct device *, umode_t *); void (*class_release)(struct class *); void (*dev_release)(struct device *); int (*shutdown_pre)(struct device *); const struct kobj_ns_type_operations *ns_type; const void * (*namespace)(struct device *); void (*get_ownership)(struct device *, kuid_t *, kgid_t *); const struct dev_pm_ops *pm; struct subsys_private *p; }; struct of_device_id { char name[32]; char type[32]; char compatible[128]; const void *data; }; typedef long unsigned int kernel_ulong_t; struct acpi_device_id { __u8 id[9]; kernel_ulong_t driver_data; __u32 cls; __u32 cls_msk; }; struct device_dma_parameters { unsigned int max_segment_size; unsigned int min_align_mask; long unsigned int segment_boundary_mask; }; enum irq_domain_bus_token { DOMAIN_BUS_ANY = 0, DOMAIN_BUS_WIRED = 1, DOMAIN_BUS_GENERIC_MSI = 2, DOMAIN_BUS_PCI_MSI = 3, DOMAIN_BUS_PLATFORM_MSI = 4, DOMAIN_BUS_NEXUS = 5, DOMAIN_BUS_IPI = 6, DOMAIN_BUS_FSL_MC_MSI = 7, DOMAIN_BUS_TI_SCI_INTA_MSI = 8, DOMAIN_BUS_WAKEUP = 9, DOMAIN_BUS_VMD_MSI = 10, }; struct irq_domain_ops; struct irq_domain_chip_generic; struct irq_data; struct irq_domain { struct list_head link; const char *name; const struct irq_domain_ops *ops; void *host_data; unsigned int flags; unsigned int mapcount; struct fwnode_handle *fwnode; enum irq_domain_bus_token bus_token; struct irq_domain_chip_generic *gc; struct irq_domain *parent; irq_hw_number_t hwirq_max; unsigned int revmap_size; struct xarray revmap_tree; struct mutex revmap_mutex; struct irq_data *revmap[0]; }; typedef u64 dma_addr_t; struct bus_dma_region { phys_addr_t cpu_start; dma_addr_t dma_start; u64 size; u64 offset; }; typedef u32 phandle; struct fwnode_operations; struct fwnode_handle { struct fwnode_handle *secondary; const struct fwnode_operations *ops; struct device *dev; struct list_head suppliers; struct list_head consumers; u8 flags; }; struct property; struct device_node { const char *name; phandle phandle; const char *full_name; struct fwnode_handle fwnode; struct property *properties; struct property *deadprops; struct device_node *parent; struct device_node *child; struct device_node *sibling; long unsigned int _flags; void *data; }; enum cpuhp_state { CPUHP_INVALID = 4294967295, CPUHP_OFFLINE = 0, CPUHP_CREATE_THREADS = 1, CPUHP_PERF_PREPARE = 2, CPUHP_PERF_X86_PREPARE = 3, CPUHP_PERF_X86_AMD_UNCORE_PREP = 4, CPUHP_PERF_POWER = 5, CPUHP_PERF_SUPERH = 6, CPUHP_X86_HPET_DEAD = 7, CPUHP_X86_APB_DEAD = 8, CPUHP_X86_MCE_DEAD = 9, CPUHP_VIRT_NET_DEAD = 10, CPUHP_SLUB_DEAD = 11, CPUHP_DEBUG_OBJ_DEAD = 12, CPUHP_MM_WRITEBACK_DEAD = 13, CPUHP_MM_DEMOTION_DEAD = 14, CPUHP_MM_VMSTAT_DEAD = 15, CPUHP_SOFTIRQ_DEAD = 16, CPUHP_NET_MVNETA_DEAD = 17, CPUHP_CPUIDLE_DEAD = 18, CPUHP_ARM64_FPSIMD_DEAD = 19, CPUHP_ARM_OMAP_WAKE_DEAD = 20, CPUHP_IRQ_POLL_DEAD = 21, CPUHP_BLOCK_SOFTIRQ_DEAD = 22, CPUHP_BIO_DEAD = 23, CPUHP_ACPI_CPUDRV_DEAD = 24, CPUHP_S390_PFAULT_DEAD = 25, CPUHP_BLK_MQ_DEAD = 26, CPUHP_FS_BUFF_DEAD = 27, CPUHP_PRINTK_DEAD = 28, CPUHP_MM_MEMCQ_DEAD = 29, CPUHP_XFS_DEAD = 30, CPUHP_PERCPU_CNT_DEAD = 31, CPUHP_RADIX_DEAD = 32, CPUHP_PAGE_ALLOC = 33, CPUHP_NET_DEV_DEAD = 34, CPUHP_PCI_XGENE_DEAD = 35, CPUHP_IOMMU_IOVA_DEAD = 36, CPUHP_LUSTRE_CFS_DEAD = 37, CPUHP_AP_ARM_CACHE_B15_RAC_DEAD = 38, CPUHP_PADATA_DEAD = 39, CPUHP_AP_DTPM_CPU_DEAD = 40, CPUHP_WORKQUEUE_PREP = 41, CPUHP_POWER_NUMA_PREPARE = 42, CPUHP_HRTIMERS_PREPARE = 43, CPUHP_PROFILE_PREPARE = 44, CPUHP_X2APIC_PREPARE = 45, CPUHP_SMPCFD_PREPARE = 46, CPUHP_RELAY_PREPARE = 47, CPUHP_SLAB_PREPARE = 48, CPUHP_MD_RAID5_PREPARE = 49, CPUHP_RCUTREE_PREP = 50, CPUHP_CPUIDLE_COUPLED_PREPARE = 51, CPUHP_POWERPC_PMAC_PREPARE = 52, CPUHP_POWERPC_MMU_CTX_PREPARE = 53, CPUHP_XEN_PREPARE = 54, CPUHP_XEN_EVTCHN_PREPARE = 55, CPUHP_ARM_SHMOBILE_SCU_PREPARE = 56, CPUHP_SH_SH3X_PREPARE = 57, CPUHP_NET_FLOW_PREPARE = 58, CPUHP_TOPOLOGY_PREPARE = 59, CPUHP_NET_IUCV_PREPARE = 60, CPUHP_ARM_BL_PREPARE = 61, CPUHP_TRACE_RB_PREPARE = 62, CPUHP_MM_ZS_PREPARE = 63, CPUHP_MM_ZSWP_MEM_PREPARE = 64, CPUHP_MM_ZSWP_POOL_PREPARE = 65, CPUHP_KVM_PPC_BOOK3S_PREPARE = 66, CPUHP_ZCOMP_PREPARE = 67, CPUHP_TIMERS_PREPARE = 68, CPUHP_MIPS_SOC_PREPARE = 69, CPUHP_BP_PREPARE_DYN = 70, CPUHP_BP_PREPARE_DYN_END = 90, CPUHP_BRINGUP_CPU = 91, CPUHP_AP_IDLE_DEAD = 92, CPUHP_AP_OFFLINE = 93, CPUHP_AP_SCHED_STARTING = 94, CPUHP_AP_RCUTREE_DYING = 95, CPUHP_AP_CPU_PM_STARTING = 96, CPUHP_AP_IRQ_GIC_STARTING = 97, CPUHP_AP_IRQ_HIP04_STARTING = 98, CPUHP_AP_IRQ_APPLE_AIC_STARTING = 99, CPUHP_AP_IRQ_ARMADA_XP_STARTING = 100, CPUHP_AP_IRQ_BCM2836_STARTING = 101, CPUHP_AP_IRQ_MIPS_GIC_STARTING = 102, CPUHP_AP_IRQ_RISCV_STARTING = 103, CPUHP_AP_IRQ_SIFIVE_PLIC_STARTING = 104, CPUHP_AP_ARM_MVEBU_COHERENCY = 105, CPUHP_AP_MICROCODE_LOADER = 106, CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING = 107, CPUHP_AP_PERF_X86_STARTING = 108, CPUHP_AP_PERF_X86_AMD_IBS_STARTING = 109, CPUHP_AP_PERF_X86_CQM_STARTING = 110, CPUHP_AP_PERF_X86_CSTATE_STARTING = 111, CPUHP_AP_PERF_XTENSA_STARTING = 112, CPUHP_AP_MIPS_OP_LOONGSON3_STARTING = 113, CPUHP_AP_ARM_SDEI_STARTING = 114, CPUHP_AP_ARM_VFP_STARTING = 115, CPUHP_AP_ARM64_DEBUG_MONITORS_STARTING = 116, CPUHP_AP_PERF_ARM_HW_BREAKPOINT_STARTING = 117, CPUHP_AP_PERF_ARM_ACPI_STARTING = 118, CPUHP_AP_PERF_ARM_STARTING = 119, CPUHP_AP_ARM_L2X0_STARTING = 120, CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING = 121, CPUHP_AP_ARM_ARCH_TIMER_STARTING = 122, CPUHP_AP_ARM_GLOBAL_TIMER_STARTING = 123, CPUHP_AP_JCORE_TIMER_STARTING = 124, CPUHP_AP_ARM_TWD_STARTING = 125, CPUHP_AP_QCOM_TIMER_STARTING = 126, CPUHP_AP_TEGRA_TIMER_STARTING = 127, CPUHP_AP_ARMADA_TIMER_STARTING = 128, CPUHP_AP_MARCO_TIMER_STARTING = 129, CPUHP_AP_MIPS_GIC_TIMER_STARTING = 130, CPUHP_AP_ARC_TIMER_STARTING = 131, CPUHP_AP_RISCV_TIMER_STARTING = 132, CPUHP_AP_CLINT_TIMER_STARTING = 133, CPUHP_AP_CSKY_TIMER_STARTING = 134, CPUHP_AP_TI_GP_TIMER_STARTING = 135, CPUHP_AP_HYPERV_TIMER_STARTING = 136, CPUHP_AP_KVM_STARTING = 137, CPUHP_AP_KVM_ARM_VGIC_INIT_STARTING = 138, CPUHP_AP_KVM_ARM_VGIC_STARTING = 139, CPUHP_AP_KVM_ARM_TIMER_STARTING = 140, CPUHP_AP_DUMMY_TIMER_STARTING = 141, CPUHP_AP_ARM_XEN_STARTING = 142, CPUHP_AP_ARM_CORESIGHT_STARTING = 143, CPUHP_AP_ARM_CORESIGHT_CTI_STARTING = 144, CPUHP_AP_ARM64_ISNDEP_STARTING = 145, CPUHP_AP_SMPCFD_DYING = 146, CPUHP_AP_X86_TBOOT_DYING = 147, CPUHP_AP_ARM_CACHE_B15_RAC_DYING = 148, CPUHP_AP_ONLINE = 149, CPUHP_TEARDOWN_CPU = 150, CPUHP_AP_ONLINE_IDLE = 151, CPUHP_AP_SCHED_WAIT_EMPTY = 152, CPUHP_AP_SMPBOOT_THREADS = 153, CPUHP_AP_X86_VDSO_VMA_ONLINE = 154, CPUHP_AP_IRQ_AFFINITY_ONLINE = 155, CPUHP_AP_BLK_MQ_ONLINE = 156, CPUHP_AP_ARM_MVEBU_SYNC_CLOCKS = 157, CPUHP_AP_X86_INTEL_EPB_ONLINE = 158, CPUHP_AP_PERF_ONLINE = 159, CPUHP_AP_PERF_X86_ONLINE = 160, CPUHP_AP_PERF_X86_UNCORE_ONLINE = 161, CPUHP_AP_PERF_X86_AMD_UNCORE_ONLINE = 162, CPUHP_AP_PERF_X86_AMD_POWER_ONLINE = 163, CPUHP_AP_PERF_X86_RAPL_ONLINE = 164, CPUHP_AP_PERF_X86_CQM_ONLINE = 165, CPUHP_AP_PERF_X86_CSTATE_ONLINE = 166, CPUHP_AP_PERF_X86_IDXD_ONLINE = 167, CPUHP_AP_PERF_S390_CF_ONLINE = 168, CPUHP_AP_PERF_S390_SF_ONLINE = 169, CPUHP_AP_PERF_ARM_CCI_ONLINE = 170, CPUHP_AP_PERF_ARM_CCN_ONLINE = 171, CPUHP_AP_PERF_ARM_HISI_DDRC_ONLINE = 172, CPUHP_AP_PERF_ARM_HISI_HHA_ONLINE = 173, CPUHP_AP_PERF_ARM_HISI_L3_ONLINE = 174, CPUHP_AP_PERF_ARM_HISI_PA_ONLINE = 175, CPUHP_AP_PERF_ARM_HISI_SLLC_ONLINE = 176, CPUHP_AP_PERF_ARM_L2X0_ONLINE = 177, CPUHP_AP_PERF_ARM_QCOM_L2_ONLINE = 178, CPUHP_AP_PERF_ARM_QCOM_L3_ONLINE = 179, CPUHP_AP_PERF_ARM_APM_XGENE_ONLINE = 180, CPUHP_AP_PERF_ARM_CAVIUM_TX2_UNCORE_ONLINE = 181, CPUHP_AP_PERF_POWERPC_NEST_IMC_ONLINE = 182, CPUHP_AP_PERF_POWERPC_CORE_IMC_ONLINE = 183, CPUHP_AP_PERF_POWERPC_THREAD_IMC_ONLINE = 184, CPUHP_AP_PERF_POWERPC_TRACE_IMC_ONLINE = 185, CPUHP_AP_PERF_POWERPC_HV_24x7_ONLINE = 186, CPUHP_AP_PERF_POWERPC_HV_GPCI_ONLINE = 187, CPUHP_AP_PERF_CSKY_ONLINE = 188, CPUHP_AP_WATCHDOG_ONLINE = 189, CPUHP_AP_WORKQUEUE_ONLINE = 190, CPUHP_AP_RCUTREE_ONLINE = 191, CPUHP_AP_BASE_CACHEINFO_ONLINE = 192, CPUHP_AP_ONLINE_DYN = 193, CPUHP_AP_ONLINE_DYN_END = 223, CPUHP_AP_MM_DEMOTION_ONLINE = 224, CPUHP_AP_X86_HPET_ONLINE = 225, CPUHP_AP_X86_KVM_CLK_ONLINE = 226, CPUHP_AP_ACTIVE = 227, CPUHP_ONLINE = 228, }; enum vm_event_item { PGPGIN = 0, PGPGOUT = 1, PSWPIN = 2, PSWPOUT = 3, PGALLOC_DMA32 = 4, PGALLOC_NORMAL = 5, PGALLOC_MOVABLE = 6, ALLOCSTALL_DMA32 = 7, ALLOCSTALL_NORMAL = 8, ALLOCSTALL_MOVABLE = 9, PGSCAN_SKIP_DMA32 = 10, PGSCAN_SKIP_NORMAL = 11, PGSCAN_SKIP_MOVABLE = 12, PGFREE = 13, PGACTIVATE = 14, PGDEACTIVATE = 15, PGLAZYFREE = 16, PGFAULT = 17, PGMAJFAULT = 18, PGLAZYFREED = 19, PGREFILL = 20, PGREUSE = 21, PGSTEAL_KSWAPD = 22, PGSTEAL_DIRECT = 23, PGDEMOTE_KSWAPD = 24, PGDEMOTE_DIRECT = 25, PGSCAN_KSWAPD = 26, PGSCAN_DIRECT = 27, PGSCAN_DIRECT_THROTTLE = 28, PGSCAN_ANON = 29, PGSCAN_FILE = 30, PGSTEAL_ANON = 31, PGSTEAL_FILE = 32, PGINODESTEAL = 33, SLABS_SCANNED = 34, KSWAPD_INODESTEAL = 35, KSWAPD_LOW_WMARK_HIT_QUICKLY = 36, KSWAPD_HIGH_WMARK_HIT_QUICKLY = 37, PAGEOUTRUN = 38, PGROTATED = 39, DROP_PAGECACHE = 40, DROP_SLAB = 41, OOM_KILL = 42, PGMIGRATE_SUCCESS = 43, PGMIGRATE_FAIL = 44, THP_MIGRATION_SUCCESS = 45, THP_MIGRATION_FAIL = 46, THP_MIGRATION_SPLIT = 47, COMPACTMIGRATE_SCANNED = 48, COMPACTFREE_SCANNED = 49, COMPACTISOLATED = 50, COMPACTSTALL = 51, COMPACTFAIL = 52, COMPACTSUCCESS = 53, KCOMPACTD_WAKE = 54, KCOMPACTD_MIGRATE_SCANNED = 55, KCOMPACTD_FREE_SCANNED = 56, UNEVICTABLE_PGCULLED = 57, UNEVICTABLE_PGSCANNED = 58, UNEVICTABLE_PGRESCUED = 59, UNEVICTABLE_PGMLOCKED = 60, UNEVICTABLE_PGMUNLOCKED = 61, UNEVICTABLE_PGCLEARED = 62, UNEVICTABLE_PGSTRANDED = 63, THP_FAULT_ALLOC = 64, THP_FAULT_FALLBACK = 65, THP_FAULT_FALLBACK_CHARGE = 66, THP_COLLAPSE_ALLOC = 67, THP_COLLAPSE_ALLOC_FAILED = 68, THP_FILE_ALLOC = 69, THP_FILE_FALLBACK = 70, THP_FILE_FALLBACK_CHARGE = 71, THP_FILE_MAPPED = 72, THP_SPLIT_PAGE = 73, THP_SPLIT_PAGE_FAILED = 74, THP_DEFERRED_SPLIT_PAGE = 75, THP_SPLIT_PMD = 76, THP_SPLIT_PUD = 77, THP_ZERO_PAGE_ALLOC = 78, THP_ZERO_PAGE_ALLOC_FAILED = 79, THP_SWPOUT = 80, THP_SWPOUT_FALLBACK = 81, DIRECT_MAP_LEVEL2_SPLIT = 82, DIRECT_MAP_LEVEL3_SPLIT = 83, NR_VM_EVENT_ITEMS = 84, }; struct ring_buffer_event { u32 type_len: 5; u32 time_delta: 27; u32 array[0]; }; struct seq_buf { char *buffer; size_t size; size_t len; loff_t readpos; }; struct trace_seq { char buffer[4096]; struct seq_buf seq; int full; }; enum perf_sw_ids { PERF_COUNT_SW_CPU_CLOCK = 0, PERF_COUNT_SW_TASK_CLOCK = 1, PERF_COUNT_SW_PAGE_FAULTS = 2, PERF_COUNT_SW_CONTEXT_SWITCHES = 3, PERF_COUNT_SW_CPU_MIGRATIONS = 4, PERF_COUNT_SW_PAGE_FAULTS_MIN = 5, PERF_COUNT_SW_PAGE_FAULTS_MAJ = 6, PERF_COUNT_SW_ALIGNMENT_FAULTS = 7, PERF_COUNT_SW_EMULATION_FAULTS = 8, PERF_COUNT_SW_DUMMY = 9, PERF_COUNT_SW_BPF_OUTPUT = 10, PERF_COUNT_SW_CGROUP_SWITCHES = 11, PERF_COUNT_SW_MAX = 12, }; union perf_mem_data_src { __u64 val; struct { __u64 mem_op: 5; __u64 mem_lvl: 14; __u64 mem_snoop: 5; __u64 mem_lock: 2; __u64 mem_dtlb: 7; __u64 mem_lvl_num: 4; __u64 mem_remote: 1; __u64 mem_snoopx: 2; __u64 mem_blk: 3; __u64 mem_hops: 3; __u64 mem_rsvd: 18; }; }; struct perf_branch_entry { __u64 from; __u64 to; __u64 mispred: 1; __u64 predicted: 1; __u64 in_tx: 1; __u64 abort: 1; __u64 cycles: 16; __u64 type: 4; __u64 reserved: 40; }; union perf_sample_weight { __u64 full; struct { __u32 var1_dw; __u16 var2_w; __u16 var3_w; }; }; struct new_utsname { char sysname[65]; char nodename[65]; char release[65]; char version[65]; char machine[65]; char domainname[65]; }; struct uts_namespace { struct new_utsname name; struct user_namespace *user_ns; struct ucounts *ucounts; struct ns_common ns; }; struct cgroup_namespace { struct ns_common ns; struct user_namespace *user_ns; struct ucounts *ucounts; struct css_set *root_cset; }; struct nsset { unsigned int flags; struct nsproxy *nsproxy; struct fs_struct *fs; const struct cred *cred; }; struct proc_ns_operations { const char *name; const char *real_ns_name; int type; struct ns_common * (*get)(struct task_struct *); void (*put)(struct ns_common *); int (*install)(struct nsset *, struct ns_common *); struct user_namespace * (*owner)(struct ns_common *); struct ns_common * (*get_parent)(struct ns_common *); }; struct perf_cpu_context; struct perf_output_handle; struct pmu { struct list_head entry; struct module *module; struct device *dev; const struct attribute_group **attr_groups; const struct attribute_group **attr_update; const char *name; int type; int capabilities; int *pmu_disable_count; struct perf_cpu_context *pmu_cpu_context; atomic_t exclusive_cnt; int task_ctx_nr; int hrtimer_interval_ms; unsigned int nr_addr_filters; void (*pmu_enable)(struct pmu *); void (*pmu_disable)(struct pmu *); int (*event_init)(struct perf_event *); void (*event_mapped)(struct perf_event *, struct mm_struct *); void (*event_unmapped)(struct perf_event *, struct mm_struct *); int (*add)(struct perf_event *, int); void (*del)(struct perf_event *, int); void (*start)(struct perf_event *, int); void (*stop)(struct perf_event *, int); void (*read)(struct perf_event *); void (*start_txn)(struct pmu *, unsigned int); int (*commit_txn)(struct pmu *); void (*cancel_txn)(struct pmu *); int (*event_idx)(struct perf_event *); void (*sched_task)(struct perf_event_context *, bool); struct kmem_cache *task_ctx_cache; void (*swap_task_ctx)(struct perf_event_context *, struct perf_event_context *); void * (*setup_aux)(struct perf_event *, void **, int, bool); void (*free_aux)(void *); long int (*snapshot_aux)(struct perf_event *, struct perf_output_handle *, long unsigned int); int (*addr_filters_validate)(struct list_head *); void (*addr_filters_sync)(struct perf_event *); int (*aux_output_match)(struct perf_event *); int (*filter_match)(struct perf_event *); int (*check_period)(struct perf_event *, u64); }; struct ftrace_regs { struct pt_regs regs; }; struct perf_regs { __u64 abi; struct pt_regs *regs; }; struct u64_stats_sync {}; struct bpf_cgroup_storage_key { __u64 cgroup_inode_id; __u32 attach_type; }; enum kmalloc_cache_type { KMALLOC_NORMAL = 0, KMALLOC_DMA = 0, KMALLOC_CGROUP = 1, KMALLOC_RECLAIM = 2, NR_KMALLOC_TYPES = 3, }; struct bpf_storage_buffer; struct bpf_cgroup_storage_map; struct bpf_cgroup_storage { union { struct bpf_storage_buffer *buf; void *percpu_buf; }; struct bpf_cgroup_storage_map *map; struct bpf_cgroup_storage_key key; struct list_head list_map; struct list_head list_cg; struct rb_node node; struct callback_head rcu; }; struct bpf_prog_array_item { struct bpf_prog *prog; union { struct bpf_cgroup_storage *cgroup_storage[2]; u64 bpf_cookie; }; }; struct bpf_prog_array { struct callback_head rcu; struct bpf_prog_array_item items[0]; }; struct bpf_storage_buffer { struct callback_head rcu; char data[0]; }; struct cgroup_taskset; struct cftype; struct cgroup_subsys { struct cgroup_subsys_state * (*css_alloc)(struct cgroup_subsys_state *); int (*css_online)(struct cgroup_subsys_state *); void (*css_offline)(struct cgroup_subsys_state *); void (*css_released)(struct cgroup_subsys_state *); void (*css_free)(struct cgroup_subsys_state *); void (*css_reset)(struct cgroup_subsys_state *); void (*css_rstat_flush)(struct cgroup_subsys_state *, int); int (*css_extra_stat_show)(struct seq_file *, struct cgroup_subsys_state *); int (*can_attach)(struct cgroup_taskset *); void (*cancel_attach)(struct cgroup_taskset *); void (*attach)(struct cgroup_taskset *); void (*post_attach)(); int (*can_fork)(struct task_struct *, struct css_set *); void (*cancel_fork)(struct task_struct *, struct css_set *); void (*fork)(struct task_struct *); void (*exit)(struct task_struct *); void (*release)(struct task_struct *); void (*bind)(struct cgroup_subsys_state *); bool early_init: 1; bool implicit_on_dfl: 1; bool threaded: 1; int id; const char *name; const char *legacy_name; struct cgroup_root *root; struct idr css_idr; struct list_head cfts; struct cftype *dfl_cftypes; struct cftype *legacy_cftypes; unsigned int depends_on; }; struct cgroup_rstat_cpu { struct u64_stats_sync bsync; struct cgroup_base_stat bstat; struct cgroup_base_stat last_bstat; struct cgroup *updated_children; struct cgroup *updated_next; }; struct cgroup_root { struct kernfs_root *kf_root; unsigned int subsys_mask; int hierarchy_id; struct cgroup cgrp; u64 cgrp_ancestor_id_storage; atomic_t nr_cgrps; struct list_head root_list; unsigned int flags; char release_agent_path[4096]; char name[64]; }; struct cftype { char name[64]; long unsigned int private; size_t max_write_len; unsigned int flags; unsigned int file_offset; struct cgroup_subsys *ss; struct list_head node; struct kernfs_ops *kf_ops; int (*open)(struct kernfs_open_file *); void (*release)(struct kernfs_open_file *); u64 (*read_u64)(struct cgroup_subsys_state *, struct cftype *); s64 (*read_s64)(struct cgroup_subsys_state *, struct cftype *); int (*seq_show)(struct seq_file *, void *); void * (*seq_start)(struct seq_file *, loff_t *); void * (*seq_next)(struct seq_file *, void *, loff_t *); void (*seq_stop)(struct seq_file *, void *); int (*write_u64)(struct cgroup_subsys_state *, struct cftype *, u64); int (*write_s64)(struct cgroup_subsys_state *, struct cftype *, s64); ssize_t (*write)(struct kernfs_open_file *, char *, size_t, loff_t); __poll_t (*poll)(struct kernfs_open_file *, struct poll_table_struct *); }; struct perf_callchain_entry { __u64 nr; __u64 ip[0]; }; typedef long unsigned int (*perf_copy_f)(void *, const void *, long unsigned int, long unsigned int); struct perf_raw_frag { union { struct perf_raw_frag *next; long unsigned int pad; }; perf_copy_f copy; void *data; u32 size; } __attribute__((packed)); struct perf_raw_record { struct perf_raw_frag frag; u32 size; }; struct perf_branch_stack { __u64 nr; __u64 hw_idx; struct perf_branch_entry entries[0]; }; struct perf_cpu_context { struct perf_event_context ctx; struct perf_event_context *task_ctx; int active_oncpu; int exclusive; raw_spinlock_t hrtimer_lock; struct hrtimer hrtimer; ktime_t hrtimer_interval; unsigned int hrtimer_active; struct list_head sched_cb_entry; int sched_cb_usage; int online; int heap_size; struct perf_event **heap; struct perf_event *heap_default[2]; }; struct perf_output_handle { struct perf_event *event; struct perf_buffer *rb; long unsigned int wakeup; long unsigned int size; u64 aux_flags; union { void *addr; long unsigned int head; }; int page; }; struct perf_addr_filter_range { long unsigned int start; long unsigned int size; }; struct perf_sample_data { u64 addr; struct perf_raw_record *raw; struct perf_branch_stack *br_stack; u64 period; union perf_sample_weight weight; u64 txn; union perf_mem_data_src data_src; u64 type; u64 ip; struct { u32 pid; u32 tid; } tid_entry; u64 time; u64 id; u64 stream_id; struct { u32 cpu; u32 reserved; } cpu_entry; struct perf_callchain_entry *callchain; u64 aux_size; struct perf_regs regs_user; struct perf_regs regs_intr; u64 stack_user_size; u64 phys_addr; u64 cgroup; u64 data_page_size; u64 code_page_size; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct trace_entry { short unsigned int type; unsigned char flags; unsigned char preempt_count; int pid; }; struct trace_array; struct tracer; struct array_buffer; struct ring_buffer_iter; struct trace_iterator { struct trace_array *tr; struct tracer *trace; struct array_buffer *array_buffer; void *private; int cpu_file; struct mutex mutex; struct ring_buffer_iter **buffer_iter; long unsigned int iter_flags; void *temp; unsigned int temp_size; char *fmt; unsigned int fmt_size; struct trace_seq tmp_seq; cpumask_var_t started; bool snapshot; struct trace_seq seq; struct trace_entry *ent; long unsigned int lost_events; int leftover; int ent_size; int cpu; u64 ts; loff_t pos; long int idx; }; enum print_line_t { TRACE_TYPE_PARTIAL_LINE = 0, TRACE_TYPE_HANDLED = 1, TRACE_TYPE_UNHANDLED = 2, TRACE_TYPE_NO_CONSUME = 3, }; typedef enum print_line_t (*trace_print_func)(struct trace_iterator *, int, struct trace_event *); struct trace_event_functions { trace_print_func trace; trace_print_func raw; trace_print_func hex; trace_print_func binary; }; enum trace_reg { TRACE_REG_REGISTER = 0, TRACE_REG_UNREGISTER = 1, TRACE_REG_PERF_REGISTER = 2, TRACE_REG_PERF_UNREGISTER = 3, TRACE_REG_PERF_OPEN = 4, TRACE_REG_PERF_CLOSE = 5, TRACE_REG_PERF_ADD = 6, TRACE_REG_PERF_DEL = 7, }; struct trace_event_fields { const char *type; union { struct { const char *name; const int size; const int align; const int is_signed; const int filter_type; }; int (*define_fields)(struct trace_event_call *); }; }; struct trace_event_class { const char *system; void *probe; void *perf_probe; int (*reg)(struct trace_event_call *, enum trace_reg, void *); struct trace_event_fields *fields_array; struct list_head * (*get_fields)(struct trace_event_call *); struct list_head fields; int (*raw_init)(struct trace_event_call *); }; struct trace_buffer; struct trace_event_file; struct trace_event_buffer { struct trace_buffer *buffer; struct ring_buffer_event *event; struct trace_event_file *trace_file; void *entry; unsigned int trace_ctx; struct pt_regs *regs; }; struct trace_subsystem_dir; struct trace_event_file { struct list_head list; struct trace_event_call *event_call; struct event_filter *filter; struct dentry *dir; struct trace_array *tr; struct trace_subsystem_dir *system; struct list_head triggers; long unsigned int flags; atomic_t sm_ref; atomic_t tm_ref; }; enum { TRACE_EVENT_FL_FILTERED_BIT = 0, TRACE_EVENT_FL_CAP_ANY_BIT = 1, TRACE_EVENT_FL_NO_SET_FILTER_BIT = 2, TRACE_EVENT_FL_IGNORE_ENABLE_BIT = 3, TRACE_EVENT_FL_TRACEPOINT_BIT = 4, TRACE_EVENT_FL_DYNAMIC_BIT = 5, TRACE_EVENT_FL_KPROBE_BIT = 6, TRACE_EVENT_FL_UPROBE_BIT = 7, TRACE_EVENT_FL_EPROBE_BIT = 8, }; enum { TRACE_EVENT_FL_FILTERED = 1, TRACE_EVENT_FL_CAP_ANY = 2, TRACE_EVENT_FL_NO_SET_FILTER = 4, TRACE_EVENT_FL_IGNORE_ENABLE = 8, TRACE_EVENT_FL_TRACEPOINT = 16, TRACE_EVENT_FL_DYNAMIC = 32, TRACE_EVENT_FL_KPROBE = 64, TRACE_EVENT_FL_UPROBE = 128, TRACE_EVENT_FL_EPROBE = 256, }; enum { EVENT_FILE_FL_ENABLED_BIT = 0, EVENT_FILE_FL_RECORDED_CMD_BIT = 1, EVENT_FILE_FL_RECORDED_TGID_BIT = 2, EVENT_FILE_FL_FILTERED_BIT = 3, EVENT_FILE_FL_NO_SET_FILTER_BIT = 4, EVENT_FILE_FL_SOFT_MODE_BIT = 5, EVENT_FILE_FL_SOFT_DISABLED_BIT = 6, EVENT_FILE_FL_TRIGGER_MODE_BIT = 7, EVENT_FILE_FL_TRIGGER_COND_BIT = 8, EVENT_FILE_FL_PID_FILTER_BIT = 9, EVENT_FILE_FL_WAS_ENABLED_BIT = 10, }; enum { EVENT_FILE_FL_ENABLED = 1, EVENT_FILE_FL_RECORDED_CMD = 2, EVENT_FILE_FL_RECORDED_TGID = 4, EVENT_FILE_FL_FILTERED = 8, EVENT_FILE_FL_NO_SET_FILTER = 16, EVENT_FILE_FL_SOFT_MODE = 32, EVENT_FILE_FL_SOFT_DISABLED = 64, EVENT_FILE_FL_TRIGGER_MODE = 128, EVENT_FILE_FL_TRIGGER_COND = 256, EVENT_FILE_FL_PID_FILTER = 512, EVENT_FILE_FL_WAS_ENABLED = 1024, }; enum event_trigger_type { ETT_NONE = 0, ETT_TRACE_ONOFF = 1, ETT_SNAPSHOT = 2, ETT_STACKTRACE = 4, ETT_EVENT_ENABLE = 8, ETT_EVENT_HIST = 16, ETT_HIST_ENABLE = 32, ETT_EVENT_EPROBE = 64, }; enum { FILTER_OTHER = 0, FILTER_STATIC_STRING = 1, FILTER_DYN_STRING = 2, FILTER_PTR_STRING = 3, FILTER_TRACE_FN = 4, FILTER_COMM = 5, FILTER_CPU = 6, }; struct fwnode_reference_args; struct fwnode_endpoint; struct fwnode_operations { struct fwnode_handle * (*get)(struct fwnode_handle *); void (*put)(struct fwnode_handle *); bool (*device_is_available)(const struct fwnode_handle *); const void * (*device_get_match_data)(const struct fwnode_handle *, const struct device *); bool (*property_present)(const struct fwnode_handle *, const char *); int (*property_read_int_array)(const struct fwnode_handle *, const char *, unsigned int, void *, size_t); int (*property_read_string_array)(const struct fwnode_handle *, const char *, const char **, size_t); const char * (*get_name)(const struct fwnode_handle *); const char * (*get_name_prefix)(const struct fwnode_handle *); struct fwnode_handle * (*get_parent)(const struct fwnode_handle *); struct fwnode_handle * (*get_next_child_node)(const struct fwnode_handle *, struct fwnode_handle *); struct fwnode_handle * (*get_named_child_node)(const struct fwnode_handle *, const char *); int (*get_reference_args)(const struct fwnode_handle *, const char *, const char *, unsigned int, unsigned int, struct fwnode_reference_args *); struct fwnode_handle * (*graph_get_next_endpoint)(const struct fwnode_handle *, struct fwnode_handle *); struct fwnode_handle * (*graph_get_remote_endpoint)(const struct fwnode_handle *); struct fwnode_handle * (*graph_get_port_parent)(struct fwnode_handle *); int (*graph_parse_endpoint)(const struct fwnode_handle *, struct fwnode_endpoint *); int (*add_links)(struct fwnode_handle *); }; struct fwnode_endpoint { unsigned int port; unsigned int id; const struct fwnode_handle *local_fwnode; }; struct fwnode_reference_args { struct fwnode_handle *fwnode; unsigned int nargs; u64 args[8]; }; struct property { char *name; int length; void *value; struct property *next; }; struct irq_fwspec { struct fwnode_handle *fwnode; int param_count; u32 param[16]; }; struct irq_domain_ops { int (*match)(struct irq_domain *, struct device_node *, enum irq_domain_bus_token); int (*select)(struct irq_domain *, struct irq_fwspec *, enum irq_domain_bus_token); int (*map)(struct irq_domain *, unsigned int, irq_hw_number_t); void (*unmap)(struct irq_domain *, unsigned int); int (*xlate)(struct irq_domain *, struct device_node *, const u32 *, unsigned int, long unsigned int *, unsigned int *); int (*alloc)(struct irq_domain *, unsigned int, unsigned int, void *); void (*free)(struct irq_domain *, unsigned int, unsigned int); int (*activate)(struct irq_domain *, struct irq_data *, bool); void (*deactivate)(struct irq_domain *, struct irq_data *); int (*translate)(struct irq_domain *, struct irq_fwspec *, long unsigned int *, unsigned int *); }; enum wb_stat_item { WB_RECLAIMABLE = 0, WB_WRITEBACK = 1, WB_DIRTIED = 2, WB_WRITTEN = 3, NR_WB_STAT_ITEMS = 4, }; struct block_device_operations; struct timer_rand_state; struct disk_events; struct badblocks; struct gendisk { int major; int first_minor; int minors; char disk_name[32]; short unsigned int events; short unsigned int event_flags; struct xarray part_tbl; struct block_device *part0; const struct block_device_operations *fops; struct request_queue *queue; void *private_data; int flags; long unsigned int state; struct mutex open_mutex; unsigned int open_partitions; struct backing_dev_info *bdi; struct kobject *slave_dir; struct timer_rand_state *random; atomic_t sync_io; struct disk_events *ev; int node_id; struct badblocks *bb; struct lockdep_map lockdep_map; u64 diskseq; }; struct partition_meta_info { char uuid[37]; u8 volname[64]; }; struct iovec { void *iov_base; __kernel_size_t iov_len; }; struct kvec { void *iov_base; size_t iov_len; }; enum memcg_stat_item { MEMCG_SWAP = 39, MEMCG_SOCK = 40, MEMCG_PERCPU_B = 41, MEMCG_NR_STAT = 42, }; enum memcg_memory_event { MEMCG_LOW = 0, MEMCG_HIGH = 1, MEMCG_MAX = 2, MEMCG_OOM = 3, MEMCG_OOM_KILL = 4, MEMCG_SWAP_HIGH = 5, MEMCG_SWAP_MAX = 6, MEMCG_SWAP_FAIL = 7, MEMCG_NR_MEMORY_EVENTS = 8, }; enum mem_cgroup_events_target { MEM_CGROUP_TARGET_THRESH = 0, MEM_CGROUP_TARGET_SOFTLIMIT = 1, MEM_CGROUP_NTARGETS = 2, }; struct memcg_vmstats_percpu { long int state[42]; long unsigned int events[84]; long int state_prev[42]; long unsigned int events_prev[84]; long unsigned int nr_page_events; long unsigned int targets[2]; }; struct mem_cgroup_reclaim_iter { struct mem_cgroup *position; unsigned int generation; }; struct shrinker_info { struct callback_head rcu; atomic_long_t *nr_deferred; long unsigned int *map; }; struct lruvec_stats_percpu { long int state[39]; long int state_prev[39]; }; struct lruvec_stats { long int state[39]; long int state_pending[39]; }; struct mem_cgroup_per_node { struct lruvec lruvec; struct lruvec_stats_percpu *lruvec_stats_percpu; struct lruvec_stats lruvec_stats; long unsigned int lru_zone_size[15]; struct mem_cgroup_reclaim_iter iter; struct shrinker_info *shrinker_info; struct rb_node tree_node; long unsigned int usage_in_excess; bool on_tree; struct mem_cgroup *memcg; }; struct eventfd_ctx; struct mem_cgroup_threshold { struct eventfd_ctx *eventfd; long unsigned int threshold; }; struct mem_cgroup_threshold_ary { int current_threshold; unsigned int size; struct mem_cgroup_threshold entries[0]; }; struct obj_cgroup { struct percpu_ref refcnt; struct mem_cgroup *memcg; atomic_t nr_charged_bytes; union { struct list_head list; struct callback_head rcu; }; }; struct percpu_cluster { struct swap_cluster_info index; unsigned int next; }; enum fs_value_type { fs_value_is_undefined = 0, fs_value_is_flag = 1, fs_value_is_string = 2, fs_value_is_blob = 3, fs_value_is_filename = 4, fs_value_is_file = 5, }; struct fs_parameter { const char *key; enum fs_value_type type: 8; union { char *string; void *blob; struct filename *name; struct file *file; }; size_t size; int dirfd; }; struct fc_log { refcount_t usage; u8 head; u8 tail; u8 need_free; struct module *owner; char *buffer[8]; }; struct fs_context_operations { void (*free)(struct fs_context *); int (*dup)(struct fs_context *, struct fs_context *); int (*parse_param)(struct fs_context *, struct fs_parameter *); int (*parse_monolithic)(struct fs_context *, void *); int (*get_tree)(struct fs_context *); int (*reconfigure)(struct fs_context *); }; struct fs_parse_result { bool negated; union { bool boolean; int int_32; unsigned int uint_32; u64 uint_64; }; }; struct blk_zone; typedef int (*report_zones_cb)(struct blk_zone *, unsigned int, void *); enum blk_unique_id { BLK_UID_T10 = 1, BLK_UID_EUI64 = 2, BLK_UID_NAA = 3, }; struct hd_geometry; struct pr_ops; struct block_device_operations { void (*submit_bio)(struct bio *); int (*open)(struct block_device *, fmode_t); void (*release)(struct gendisk *, fmode_t); int (*rw_page)(struct block_device *, sector_t, struct page *, unsigned int); int (*ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int); int (*compat_ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int); unsigned int (*check_events)(struct gendisk *, unsigned int); void (*unlock_native_capacity)(struct gendisk *); int (*getgeo)(struct block_device *, struct hd_geometry *); int (*set_read_only)(struct block_device *, bool); void (*swap_slot_free_notify)(struct block_device *, long unsigned int); int (*report_zones)(struct gendisk *, sector_t, unsigned int, report_zones_cb, void *); char * (*devnode)(struct gendisk *, umode_t *); int (*get_unique_id)(struct gendisk *, u8 *, enum blk_unique_id); struct module *owner; const struct pr_ops *pr_ops; int (*alternative_gpt_sector)(struct gendisk *, sector_t *); }; struct blk_zone { __u64 start; __u64 len; __u64 wp; __u8 type; __u8 cond; __u8 non_seq; __u8 reset; __u8 resv[4]; __u64 capacity; __u8 reserved[24]; }; struct blk_independent_access_range { struct kobject kobj; struct request_queue *queue; sector_t sector; sector_t nr_sectors; }; struct blk_independent_access_ranges { struct kobject kobj; bool sysfs_registered; unsigned int nr_ia_ranges; struct blk_independent_access_range ia_range[0]; }; enum blk_eh_timer_return { BLK_EH_DONE = 0, BLK_EH_RESET_TIMER = 1, }; struct blk_mq_queue_data; struct blk_mq_ops { blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *); void (*commit_rqs)(struct blk_mq_hw_ctx *); int (*get_budget)(struct request_queue *); void (*put_budget)(struct request_queue *, int); void (*set_rq_budget_token)(struct request *, int); int (*get_rq_budget_token)(struct request *); enum blk_eh_timer_return (*timeout)(struct request *, bool); int (*poll)(struct blk_mq_hw_ctx *, struct io_comp_batch *); void (*complete)(struct request *); int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int); void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int); int (*init_request)(struct blk_mq_tag_set *, struct request *, unsigned int, unsigned int); void (*exit_request)(struct blk_mq_tag_set *, struct request *, unsigned int); void (*cleanup_rq)(struct request *); bool (*busy)(struct request_queue *); int (*map_queues)(struct blk_mq_tag_set *); void (*show_rq)(struct seq_file *, struct request *); }; enum pr_type { PR_WRITE_EXCLUSIVE = 1, PR_EXCLUSIVE_ACCESS = 2, PR_WRITE_EXCLUSIVE_REG_ONLY = 3, PR_EXCLUSIVE_ACCESS_REG_ONLY = 4, PR_WRITE_EXCLUSIVE_ALL_REGS = 5, PR_EXCLUSIVE_ACCESS_ALL_REGS = 6, }; struct pr_ops { int (*pr_register)(struct block_device *, u64, u64, u32); int (*pr_reserve)(struct block_device *, u64, enum pr_type, u32); int (*pr_release)(struct block_device *, u64, enum pr_type); int (*pr_preempt)(struct block_device *, u64, u64, enum pr_type, bool); int (*pr_clear)(struct block_device *, u64); }; struct trace_event_raw_initcall_level { struct trace_entry ent; u32 __data_loc_level; char __data[0]; }; struct trace_event_raw_initcall_start { struct trace_entry ent; initcall_t func; char __data[0]; }; struct trace_event_raw_initcall_finish { struct trace_entry ent; initcall_t func; int ret; char __data[0]; }; struct trace_event_data_offsets_initcall_level { u32 level; }; struct trace_event_data_offsets_initcall_start {}; struct trace_event_data_offsets_initcall_finish {}; typedef void (*btf_trace_initcall_level)(void *, const char *); typedef void (*btf_trace_initcall_start)(void *, initcall_t); typedef void (*btf_trace_initcall_finish)(void *, initcall_t, int); struct blacklist_entry { struct list_head next; char *buf; }; typedef __u32 Elf32_Word; struct elf32_note { Elf32_Word n_namesz; Elf32_Word n_descsz; Elf32_Word n_type; }; enum { PROC_ROOT_INO = 1, PROC_IPC_INIT_INO = 4026531839, PROC_UTS_INIT_INO = 4026531838, PROC_USER_INIT_INO = 4026531837, PROC_PID_INIT_INO = 4026531836, PROC_CGROUP_INIT_INO = 4026531835, PROC_TIME_INIT_INO = 4026531834, }; typedef __u16 __be16; typedef __u32 __be32; typedef __u32 __wsum; typedef unsigned int slab_flags_t; struct notifier_block; typedef int (*notifier_fn_t)(struct notifier_block *, long unsigned int, void *); struct notifier_block { notifier_fn_t notifier_call; struct notifier_block *next; int priority; }; struct blocking_notifier_head { struct rw_semaphore rwsem; struct notifier_block *head; }; struct raw_notifier_head { struct notifier_block *head; }; enum dma_data_direction { DMA_BIDIRECTIONAL = 0, DMA_TO_DEVICE = 1, DMA_FROM_DEVICE = 2, DMA_NONE = 3, }; struct page_pool_params { unsigned int flags; unsigned int order; unsigned int pool_size; int nid; struct device *dev; enum dma_data_direction dma_dir; unsigned int max_len; unsigned int offset; }; struct pp_alloc_cache { u32 count; struct page *cache[128]; }; struct ptr_ring { int producer; spinlock_t producer_lock; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; int consumer_head; int consumer_tail; spinlock_t consumer_lock; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; int size; int batch; void **queue; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct page_pool { struct page_pool_params p; struct delayed_work release_dw; void (*disconnect)(void *); long unsigned int defer_start; long unsigned int defer_warn; u32 pages_state_hold_cnt; unsigned int frag_offset; struct page *frag_page; long int frag_users; long: 64; long: 64; struct pp_alloc_cache alloc; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; struct ptr_ring ring; atomic_t pages_state_release_cnt; refcount_t user_cnt; u64 destroy_cnt; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; typedef __u64 __addrpair; typedef __u32 __portpair; typedef struct { struct net *net; } possible_net_t; struct in6_addr { union { __u8 u6_addr8[16]; __be16 u6_addr16[8]; __be32 u6_addr32[4]; } in6_u; }; struct hlist_nulls_node { struct hlist_nulls_node *next; struct hlist_nulls_node **pprev; }; struct proto; struct inet_timewait_death_row; struct sock_common { union { __addrpair skc_addrpair; struct { __be32 skc_daddr; __be32 skc_rcv_saddr; }; }; union { unsigned int skc_hash; __u16 skc_u16hashes[2]; }; union { __portpair skc_portpair; struct { __be16 skc_dport; __u16 skc_num; }; }; short unsigned int skc_family; volatile unsigned char skc_state; unsigned char skc_reuse: 4; unsigned char skc_reuseport: 1; unsigned char skc_ipv6only: 1; unsigned char skc_net_refcnt: 1; int skc_bound_dev_if; union { struct hlist_node skc_bind_node; struct hlist_node skc_portaddr_node; }; struct proto *skc_prot; possible_net_t skc_net; struct in6_addr skc_v6_daddr; struct in6_addr skc_v6_rcv_saddr; atomic64_t skc_cookie; union { long unsigned int skc_flags; struct sock *skc_listener; struct inet_timewait_death_row *skc_tw_dr; }; int skc_dontcopy_begin[0]; union { struct hlist_node skc_node; struct hlist_nulls_node skc_nulls_node; }; short unsigned int skc_tx_queue_mapping; short unsigned int skc_rx_queue_mapping; union { int skc_incoming_cpu; u32 skc_rcv_wnd; u32 skc_tw_rcv_nxt; }; refcount_t skc_refcnt; int skc_dontcopy_end[0]; union { u32 skc_rxhash; u32 skc_window_clamp; u32 skc_tw_snd_nxt; }; }; typedef struct { spinlock_t slock; int owned; wait_queue_head_t wq; } socket_lock_t; struct sk_buff; struct sk_buff_list { struct sk_buff *next; struct sk_buff *prev; }; struct sk_buff_head { union { struct { struct sk_buff *next; struct sk_buff *prev; }; struct sk_buff_list list; }; __u32 qlen; spinlock_t lock; }; typedef u64 netdev_features_t; struct sock_cgroup_data { struct cgroup *cgroup; }; typedef struct {} netns_tracker; struct dst_entry; struct sk_filter; struct socket_wq; struct socket; struct sock_reuseport; struct sock { struct sock_common __sk_common; struct dst_entry *sk_rx_dst; int sk_rx_dst_ifindex; u32 sk_rx_dst_cookie; socket_lock_t sk_lock; atomic_t sk_drops; int sk_rcvlowat; struct sk_buff_head sk_error_queue; struct sk_buff_head sk_receive_queue; struct { atomic_t rmem_alloc; int len; struct sk_buff *head; struct sk_buff *tail; } sk_backlog; struct llist_head defer_list; int sk_forward_alloc; u32 sk_reserved_mem; unsigned int sk_ll_usec; unsigned int sk_napi_id; int sk_rcvbuf; struct sk_filter *sk_filter; union { struct socket_wq *sk_wq; struct socket_wq *sk_wq_raw; }; struct dst_entry *sk_dst_cache; atomic_t sk_omem_alloc; int sk_sndbuf; int sk_wmem_queued; refcount_t sk_wmem_alloc; long unsigned int sk_tsq_flags; union { struct sk_buff *sk_send_head; struct rb_root tcp_rtx_queue; }; struct sk_buff_head sk_write_queue; __s32 sk_peek_off; int sk_write_pending; __u32 sk_dst_pending_confirm; u32 sk_pacing_status; long int sk_sndtimeo; struct timer_list sk_timer; __u32 sk_priority; __u32 sk_mark; long unsigned int sk_pacing_rate; long unsigned int sk_max_pacing_rate; struct page_frag sk_frag; netdev_features_t sk_route_caps; int sk_gso_type; unsigned int sk_gso_max_size; gfp_t sk_allocation; __u32 sk_txhash; u8 sk_gso_disabled: 1; u8 sk_kern_sock: 1; u8 sk_no_check_tx: 1; u8 sk_no_check_rx: 1; u8 sk_userlocks: 4; u8 sk_pacing_shift; u16 sk_type; u16 sk_protocol; u16 sk_gso_max_segs; long unsigned int sk_lingertime; struct proto *sk_prot_creator; rwlock_t sk_callback_lock; int sk_err; int sk_err_soft; u32 sk_ack_backlog; u32 sk_max_ack_backlog; kuid_t sk_uid; u8 sk_prefer_busy_poll; u16 sk_busy_poll_budget; spinlock_t sk_peer_lock; int sk_bind_phc; struct pid *sk_peer_pid; const struct cred *sk_peer_cred; long int sk_rcvtimeo; ktime_t sk_stamp; u16 sk_tsflags; u8 sk_shutdown; u32 sk_tskey; atomic_t sk_zckey; u8 sk_clockid; u8 sk_txtime_deadline_mode: 1; u8 sk_txtime_report_errors: 1; u8 sk_txtime_unused: 6; struct socket *sk_socket; void *sk_user_data; struct sock_cgroup_data sk_cgrp_data; struct mem_cgroup *sk_memcg; void (*sk_state_change)(struct sock *); void (*sk_data_ready)(struct sock *); void (*sk_write_space)(struct sock *); void (*sk_error_report)(struct sock *); int (*sk_backlog_rcv)(struct sock *, struct sk_buff *); void (*sk_destruct)(struct sock *); struct sock_reuseport *sk_reuseport_cb; struct bpf_local_storage *sk_bpf_storage; struct callback_head sk_rcu; netns_tracker ns_tracker; }; struct rhash_head { struct rhash_head *next; }; struct rhashtable; struct rhashtable_compare_arg { struct rhashtable *ht; const void *key; }; typedef u32 (*rht_hashfn_t)(const void *, u32, u32); typedef u32 (*rht_obj_hashfn_t)(const void *, u32, u32); typedef int (*rht_obj_cmpfn_t)(struct rhashtable_compare_arg *, const void *); struct rhashtable_params { u16 nelem_hint; u16 key_len; u16 key_offset; u16 head_offset; unsigned int max_size; u16 min_size; bool automatic_shrinking; rht_hashfn_t hashfn; rht_obj_hashfn_t obj_hashfn; rht_obj_cmpfn_t obj_cmpfn; }; struct bucket_table; struct rhashtable { struct bucket_table *tbl; unsigned int key_len; unsigned int max_elems; struct rhashtable_params p; bool rhlist; struct work_struct run_work; struct mutex mutex; spinlock_t lock; atomic_t nelems; }; struct fs_struct { int users; spinlock_t lock; seqcount_spinlock_t seq; int umask; int in_exec; struct path root; struct path pwd; }; struct pipe_buffer; struct watch_queue; struct pipe_inode_info { struct mutex mutex; wait_queue_head_t rd_wait; wait_queue_head_t wr_wait; unsigned int head; unsigned int tail; unsigned int max_usage; unsigned int ring_size; bool note_loss; unsigned int nr_accounted; unsigned int readers; unsigned int writers; unsigned int files; unsigned int r_counter; unsigned int w_counter; unsigned int poll_usage; struct page *tmp_page; struct fasync_struct *fasync_readers; struct fasync_struct *fasync_writers; struct pipe_buffer *bufs; struct user_struct *user; struct watch_queue *watch_queue; }; struct ld_semaphore { atomic_long_t count; raw_spinlock_t wait_lock; unsigned int wait_readers; struct list_head read_wait; struct list_head write_wait; }; typedef unsigned int tcflag_t; typedef unsigned char cc_t; typedef unsigned int speed_t; struct ktermios { tcflag_t c_iflag; tcflag_t c_oflag; tcflag_t c_cflag; tcflag_t c_lflag; cc_t c_line; cc_t c_cc[19]; speed_t c_ispeed; speed_t c_ospeed; }; struct winsize { short unsigned int ws_row; short unsigned int ws_col; short unsigned int ws_xpixel; short unsigned int ws_ypixel; }; struct tty_driver; struct tty_operations; struct tty_ldisc; struct tty_port; struct tty_struct { int magic; struct kref kref; struct device *dev; struct tty_driver *driver; const struct tty_operations *ops; int index; struct ld_semaphore ldisc_sem; struct tty_ldisc *ldisc; struct mutex atomic_write_lock; struct mutex legacy_mutex; struct mutex throttle_mutex; struct rw_semaphore termios_rwsem; struct mutex winsize_mutex; struct ktermios termios; struct ktermios termios_locked; char name[64]; long unsigned int flags; int count; struct winsize winsize; struct { spinlock_t lock; bool stopped; bool tco_stopped; long unsigned int unused[0]; } flow; struct { spinlock_t lock; struct pid *pgrp; struct pid *session; unsigned char pktstatus; bool packet; long unsigned int unused[0]; } ctrl; int hw_stopped; unsigned int receive_room; int flow_change; struct tty_struct *link; struct fasync_struct *fasync; wait_queue_head_t write_wait; wait_queue_head_t read_wait; struct work_struct hangup_work; void *disc_data; void *driver_data; spinlock_t files_lock; struct list_head tty_files; int closing; unsigned char *write_buf; int write_cnt; struct work_struct SAK_work; struct tty_port *port; }; typedef struct { size_t written; size_t count; union { char *buf; void *data; } arg; int error; } read_descriptor_t; struct posix_acl_entry { short int e_tag; short unsigned int e_perm; union { kuid_t e_uid; kgid_t e_gid; }; }; struct posix_acl { refcount_t a_refcount; struct callback_head a_rcu; unsigned int a_count; struct posix_acl_entry a_entries[0]; }; struct tty_buffer { union { struct tty_buffer *next; struct llist_node free; }; int used; int size; int commit; int read; int flags; long unsigned int data[0]; }; struct tty_bufhead { struct tty_buffer *head; struct work_struct work; struct mutex lock; atomic_t priority; struct tty_buffer sentinel; struct llist_head free; atomic_t mem_used; int mem_limit; struct tty_buffer *tail; }; struct serial_icounter_struct; struct serial_struct; struct tty_operations { struct tty_struct * (*lookup)(struct tty_driver *, struct file *, int); int (*install)(struct tty_driver *, struct tty_struct *); void (*remove)(struct tty_driver *, struct tty_struct *); int (*open)(struct tty_struct *, struct file *); void (*close)(struct tty_struct *, struct file *); void (*shutdown)(struct tty_struct *); void (*cleanup)(struct tty_struct *); int (*write)(struct tty_struct *, const unsigned char *, int); int (*put_char)(struct tty_struct *, unsigned char); void (*flush_chars)(struct tty_struct *); unsigned int (*write_room)(struct tty_struct *); unsigned int (*chars_in_buffer)(struct tty_struct *); int (*ioctl)(struct tty_struct *, unsigned int, long unsigned int); long int (*compat_ioctl)(struct tty_struct *, unsigned int, long unsigned int); void (*set_termios)(struct tty_struct *, struct ktermios *); void (*throttle)(struct tty_struct *); void (*unthrottle)(struct tty_struct *); void (*stop)(struct tty_struct *); void (*start)(struct tty_struct *); void (*hangup)(struct tty_struct *); int (*break_ctl)(struct tty_struct *, int); void (*flush_buffer)(struct tty_struct *); void (*set_ldisc)(struct tty_struct *); void (*wait_until_sent)(struct tty_struct *, int); void (*send_xchar)(struct tty_struct *, char); int (*tiocmget)(struct tty_struct *); int (*tiocmset)(struct tty_struct *, unsigned int, unsigned int); int (*resize)(struct tty_struct *, struct winsize *); int (*get_icount)(struct tty_struct *, struct serial_icounter_struct *); int (*get_serial)(struct tty_struct *, struct serial_struct *); int (*set_serial)(struct tty_struct *, struct serial_struct *); void (*show_fdinfo)(struct tty_struct *, struct seq_file *); int (*proc_show)(struct seq_file *, void *); }; struct proc_dir_entry; struct tty_driver { int magic; struct kref kref; struct cdev **cdevs; struct module *owner; const char *driver_name; const char *name; int name_base; int major; int minor_start; unsigned int num; short int type; short int subtype; struct ktermios init_termios; long unsigned int flags; struct proc_dir_entry *proc_entry; struct tty_driver *other; struct tty_struct **ttys; struct tty_port **ports; struct ktermios **termios; void *driver_state; const struct tty_operations *ops; struct list_head tty_drivers; }; struct tty_port_operations; struct tty_port_client_operations; struct tty_port { struct tty_bufhead buf; struct tty_struct *tty; struct tty_struct *itty; const struct tty_port_operations *ops; const struct tty_port_client_operations *client_ops; spinlock_t lock; int blocked_open; int count; wait_queue_head_t open_wait; wait_queue_head_t delta_msr_wait; long unsigned int flags; long unsigned int iflags; unsigned char console: 1; struct mutex mutex; struct mutex buf_mutex; unsigned char *xmit_buf; unsigned int close_delay; unsigned int closing_wait; int drain_delay; struct kref kref; void *client_data; }; struct tty_ldisc_ops { char *name; int num; int (*open)(struct tty_struct *); void (*close)(struct tty_struct *); void (*flush_buffer)(struct tty_struct *); ssize_t (*read)(struct tty_struct *, struct file *, unsigned char *, size_t, void **, long unsigned int); ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t); int (*ioctl)(struct tty_struct *, struct file *, unsigned int, long unsigned int); int (*compat_ioctl)(struct tty_struct *, struct file *, unsigned int, long unsigned int); void (*set_termios)(struct tty_struct *, struct ktermios *); __poll_t (*poll)(struct tty_struct *, struct file *, struct poll_table_struct *); void (*hangup)(struct tty_struct *); void (*receive_buf)(struct tty_struct *, const unsigned char *, const char *, int); void (*write_wakeup)(struct tty_struct *); void (*dcd_change)(struct tty_struct *, unsigned int); int (*receive_buf2)(struct tty_struct *, const unsigned char *, const char *, int); struct module *owner; }; struct tty_ldisc { struct tty_ldisc_ops *ops; struct tty_struct *tty; }; struct tty_port_operations { int (*carrier_raised)(struct tty_port *); void (*dtr_rts)(struct tty_port *, int); void (*shutdown)(struct tty_port *); int (*activate)(struct tty_port *, struct tty_struct *); void (*destruct)(struct tty_port *); }; struct tty_port_client_operations { int (*receive_buf)(struct tty_port *, const unsigned char *, const unsigned char *, size_t); void (*write_wakeup)(struct tty_port *); }; struct ref_tracker_dir {}; struct prot_inuse; struct netns_core { struct ctl_table_header *sysctl_hdr; int sysctl_somaxconn; struct prot_inuse *prot_inuse; }; struct ipstats_mib; struct tcp_mib; struct linux_mib; struct udp_mib; struct icmp_mib; struct icmpmsg_mib; struct icmpv6_mib; struct icmpv6msg_mib; struct netns_mib { struct ipstats_mib *ip_statistics; struct ipstats_mib *ipv6_statistics; struct tcp_mib *tcp_statistics; struct linux_mib *net_statistics; struct udp_mib *udp_statistics; struct udp_mib *udp_stats_in6; struct udp_mib *udplite_statistics; struct udp_mib *udplite_stats_in6; struct icmp_mib *icmp_statistics; struct icmpmsg_mib *icmpmsg_statistics; struct icmpv6_mib *icmpv6_statistics; struct icmpv6msg_mib *icmpv6msg_statistics; struct proc_dir_entry *proc_net_devsnmp6; }; struct netns_packet { struct mutex sklist_lock; struct hlist_head sklist; }; struct netns_unix { int sysctl_max_dgram_qlen; struct ctl_table_header *ctl; }; struct netns_nexthop { struct rb_root rb_root; struct hlist_head *devhash; unsigned int seq; u32 last_id_allocated; struct blocking_notifier_head notifier_chain; }; struct inet_hashinfo; struct inet_timewait_death_row { atomic_t tw_count; char tw_pad[60]; struct inet_hashinfo *hashinfo; int sysctl_max_tw_buckets; }; struct local_ports { seqlock_t lock; int range[2]; bool warned; }; struct ping_group_range { seqlock_t lock; kgid_t range[2]; }; typedef struct { u64 key[2]; } siphash_key_t; struct ipv4_devconf; struct ip_ra_chain; struct inet_peer_base; struct fqdir; struct tcp_congestion_ops; struct tcp_fastopen_context; struct fib_notifier_ops; struct netns_ipv4 { struct inet_timewait_death_row tcp_death_row; struct ctl_table_header *forw_hdr; struct ctl_table_header *frags_hdr; struct ctl_table_header *ipv4_hdr; struct ctl_table_header *route_hdr; struct ctl_table_header *xfrm4_hdr; struct ipv4_devconf *devconf_all; struct ipv4_devconf *devconf_dflt; struct ip_ra_chain *ra_chain; struct mutex ra_mutex; bool fib_has_custom_local_routes; bool fib_offload_disabled; struct hlist_head *fib_table_hash; struct sock *fibnl; struct sock **icmp_sk; struct sock *mc_autojoin_sk; struct inet_peer_base *peers; struct sock **tcp_sk; struct fqdir *fqdir; u8 sysctl_icmp_echo_ignore_all; u8 sysctl_icmp_echo_enable_probe; u8 sysctl_icmp_echo_ignore_broadcasts; u8 sysctl_icmp_ignore_bogus_error_responses; u8 sysctl_icmp_errors_use_inbound_ifaddr; int sysctl_icmp_ratelimit; int sysctl_icmp_ratemask; struct local_ports ip_local_ports; u8 sysctl_tcp_ecn; u8 sysctl_tcp_ecn_fallback; u8 sysctl_ip_default_ttl; u8 sysctl_ip_no_pmtu_disc; u8 sysctl_ip_fwd_use_pmtu; u8 sysctl_ip_fwd_update_priority; u8 sysctl_ip_nonlocal_bind; u8 sysctl_ip_autobind_reuse; u8 sysctl_ip_dynaddr; u8 sysctl_ip_early_demux; u8 sysctl_tcp_early_demux; u8 sysctl_udp_early_demux; u8 sysctl_nexthop_compat_mode; u8 sysctl_fwmark_reflect; u8 sysctl_tcp_fwmark_accept; u8 sysctl_tcp_mtu_probing; int sysctl_tcp_mtu_probe_floor; int sysctl_tcp_base_mss; int sysctl_tcp_min_snd_mss; int sysctl_tcp_probe_threshold; u32 sysctl_tcp_probe_interval; int sysctl_tcp_keepalive_time; int sysctl_tcp_keepalive_intvl; u8 sysctl_tcp_keepalive_probes; u8 sysctl_tcp_syn_retries; u8 sysctl_tcp_synack_retries; u8 sysctl_tcp_syncookies; u8 sysctl_tcp_migrate_req; int sysctl_tcp_reordering; u8 sysctl_tcp_retries1; u8 sysctl_tcp_retries2; u8 sysctl_tcp_orphan_retries; u8 sysctl_tcp_tw_reuse; int sysctl_tcp_fin_timeout; unsigned int sysctl_tcp_notsent_lowat; u8 sysctl_tcp_sack; u8 sysctl_tcp_window_scaling; u8 sysctl_tcp_timestamps; u8 sysctl_tcp_early_retrans; u8 sysctl_tcp_recovery; u8 sysctl_tcp_thin_linear_timeouts; u8 sysctl_tcp_slow_start_after_idle; u8 sysctl_tcp_retrans_collapse; u8 sysctl_tcp_stdurg; u8 sysctl_tcp_rfc1337; u8 sysctl_tcp_abort_on_overflow; u8 sysctl_tcp_fack; int sysctl_tcp_max_reordering; int sysctl_tcp_adv_win_scale; u8 sysctl_tcp_dsack; u8 sysctl_tcp_app_win; u8 sysctl_tcp_frto; u8 sysctl_tcp_nometrics_save; u8 sysctl_tcp_no_ssthresh_metrics_save; u8 sysctl_tcp_moderate_rcvbuf; u8 sysctl_tcp_tso_win_divisor; u8 sysctl_tcp_workaround_signed_windows; int sysctl_tcp_limit_output_bytes; int sysctl_tcp_challenge_ack_limit; int sysctl_tcp_min_rtt_wlen; u8 sysctl_tcp_min_tso_segs; u8 sysctl_tcp_autocorking; u8 sysctl_tcp_reflect_tos; u8 sysctl_tcp_comp_sack_nr; int sysctl_tcp_invalid_ratelimit; int sysctl_tcp_pacing_ss_ratio; int sysctl_tcp_pacing_ca_ratio; int sysctl_tcp_wmem[3]; int sysctl_tcp_rmem[3]; long unsigned int sysctl_tcp_comp_sack_delay_ns; long unsigned int sysctl_tcp_comp_sack_slack_ns; int sysctl_max_syn_backlog; int sysctl_tcp_fastopen; const struct tcp_congestion_ops *tcp_congestion_control; struct tcp_fastopen_context *tcp_fastopen_ctx; unsigned int sysctl_tcp_fastopen_blackhole_timeout; atomic_t tfo_active_disable_times; long unsigned int tfo_active_disable_stamp; int sysctl_udp_wmem_min; int sysctl_udp_rmem_min; u8 sysctl_fib_notify_on_flag_change; u8 sysctl_igmp_llm_reports; int sysctl_igmp_max_memberships; int sysctl_igmp_max_msf; int sysctl_igmp_qrv; struct ping_group_range ping_group_range; atomic_t dev_addr_genid; long unsigned int *sysctl_local_reserved_ports; int sysctl_ip_prot_sock; struct fib_notifier_ops *notifier_ops; unsigned int fib_seq; struct fib_notifier_ops *ipmr_notifier_ops; unsigned int ipmr_seq; atomic_t rt_genid; siphash_key_t ip_id_key; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct net_device; struct neighbour; struct dst_ops { short unsigned int family; unsigned int gc_thresh; int (*gc)(struct dst_ops *); struct dst_entry * (*check)(struct dst_entry *, __u32); unsigned int (*default_advmss)(const struct dst_entry *); unsigned int (*mtu)(const struct dst_entry *); u32 * (*cow_metrics)(struct dst_entry *, long unsigned int); void (*destroy)(struct dst_entry *); void (*ifdown)(struct dst_entry *, struct net_device *, int); struct dst_entry * (*negative_advice)(struct dst_entry *); void (*link_failure)(struct sk_buff *); void (*update_pmtu)(struct dst_entry *, struct sock *, struct sk_buff *, u32, bool); void (*redirect)(struct dst_entry *, struct sock *, struct sk_buff *); int (*local_out)(struct net *, struct sock *, struct sk_buff *); struct neighbour * (*neigh_lookup)(const struct dst_entry *, struct sk_buff *, const void *); void (*confirm_neigh)(const struct dst_entry *, const void *); struct kmem_cache *kmem_cachep; struct percpu_counter pcpuc_entries; long: 64; long: 64; long: 64; }; struct netns_sysctl_ipv6 { struct ctl_table_header *hdr; struct ctl_table_header *route_hdr; struct ctl_table_header *icmp_hdr; struct ctl_table_header *frags_hdr; struct ctl_table_header *xfrm6_hdr; int flush_delay; int ip6_rt_max_size; int ip6_rt_gc_min_interval; int ip6_rt_gc_timeout; int ip6_rt_gc_interval; int ip6_rt_gc_elasticity; int ip6_rt_mtu_expires; int ip6_rt_min_advmss; u32 multipath_hash_fields; u8 multipath_hash_policy; u8 bindv6only; u8 flowlabel_consistency; u8 auto_flowlabels; int icmpv6_time; u8 icmpv6_echo_ignore_all; u8 icmpv6_echo_ignore_multicast; u8 icmpv6_echo_ignore_anycast; long unsigned int icmpv6_ratemask[4]; long unsigned int *icmpv6_ratemask_ptr; u8 anycast_src_echo_reply; u8 ip_nonlocal_bind; u8 fwmark_reflect; u8 flowlabel_state_ranges; int idgen_retries; int idgen_delay; int flowlabel_reflect; int max_dst_opts_cnt; int max_hbh_opts_cnt; int max_dst_opts_len; int max_hbh_opts_len; int seg6_flowlabel; u32 ioam6_id; u64 ioam6_id_wide; bool skip_notify_on_dev_down; u8 fib_notify_on_flag_change; }; struct ioam6_pernet_data; struct ipv6_devconf; struct fib6_info; struct rt6_info; struct rt6_statistics; struct fib6_table; struct seg6_pernet_data; struct netns_ipv6 { struct dst_ops ip6_dst_ops; struct netns_sysctl_ipv6 sysctl; struct ipv6_devconf *devconf_all; struct ipv6_devconf *devconf_dflt; struct inet_peer_base *peers; struct fqdir *fqdir; struct fib6_info *fib6_null_entry; struct rt6_info *ip6_null_entry; struct rt6_statistics *rt6_stats; struct timer_list ip6_fib_timer; struct hlist_head *fib_table_hash; struct fib6_table *fib6_main_tbl; struct list_head fib6_walkers; rwlock_t fib6_walker_lock; spinlock_t fib6_gc_lock; unsigned int ip6_rt_gc_expire; long unsigned int ip6_rt_last_gc; struct sock **icmp_sk; struct sock *ndisc_sk; struct sock *tcp_sk; struct sock *igmp_sk; struct sock *mc_autojoin_sk; atomic_t dev_addr_genid; atomic_t fib6_sernum; struct seg6_pernet_data *seg6_data; struct fib_notifier_ops *notifier_ops; struct fib_notifier_ops *ip6mr_notifier_ops; unsigned int ipmr_seq; struct { struct hlist_head head; spinlock_t lock; u32 seq; } ip6addrlbl_table; struct ioam6_pernet_data *ioam6_data; long: 64; }; struct netns_bpf { struct bpf_prog_array *run_array[2]; struct bpf_prog *progs[2]; struct list_head links[2]; }; struct netns_xdp { struct mutex lock; struct hlist_head list; }; struct uevent_sock; struct net_generic; struct net { refcount_t passive; spinlock_t rules_mod_lock; unsigned int dev_unreg_count; unsigned int dev_base_seq; int ifindex; spinlock_t nsid_lock; atomic_t fnhe_genid; struct list_head list; struct list_head exit_list; struct llist_node cleanup_list; struct key_tag *key_domain; struct user_namespace *user_ns; struct ucounts *ucounts; struct idr netns_ids; struct ns_common ns; struct ref_tracker_dir refcnt_tracker; struct list_head dev_base_head; struct proc_dir_entry *proc_net; struct proc_dir_entry *proc_net_stat; struct ctl_table_set sysctls; struct sock *rtnl; struct sock *genl_sock; struct uevent_sock *uevent_sock; struct hlist_head *dev_name_head; struct hlist_head *dev_index_head; struct raw_notifier_head netdev_chain; u32 hash_mix; struct net_device *loopback_dev; struct list_head rules_ops; struct netns_core core; struct netns_mib mib; struct netns_packet packet; struct netns_unix unx; struct netns_nexthop nexthop; long: 64; long: 64; long: 64; long: 64; struct netns_ipv4 ipv4; struct netns_ipv6 ipv6; struct net_generic *gen; struct netns_bpf bpf; u64 net_cookie; struct netns_xdp xdp; struct sock *diag_nlsk; }; typedef struct { local64_t v; } u64_stats_t; struct bpf_insn { __u8 code; __u8 dst_reg: 4; __u8 src_reg: 4; __s16 off; __s32 imm; }; enum bpf_map_type { BPF_MAP_TYPE_UNSPEC = 0, BPF_MAP_TYPE_HASH = 1, BPF_MAP_TYPE_ARRAY = 2, BPF_MAP_TYPE_PROG_ARRAY = 3, BPF_MAP_TYPE_PERF_EVENT_ARRAY = 4, BPF_MAP_TYPE_PERCPU_HASH = 5, BPF_MAP_TYPE_PERCPU_ARRAY = 6, BPF_MAP_TYPE_STACK_TRACE = 7, BPF_MAP_TYPE_CGROUP_ARRAY = 8, BPF_MAP_TYPE_LRU_HASH = 9, BPF_MAP_TYPE_LRU_PERCPU_HASH = 10, BPF_MAP_TYPE_LPM_TRIE = 11, BPF_MAP_TYPE_ARRAY_OF_MAPS = 12, BPF_MAP_TYPE_HASH_OF_MAPS = 13, BPF_MAP_TYPE_DEVMAP = 14, BPF_MAP_TYPE_SOCKMAP = 15, BPF_MAP_TYPE_CPUMAP = 16, BPF_MAP_TYPE_XSKMAP = 17, BPF_MAP_TYPE_SOCKHASH = 18, BPF_MAP_TYPE_CGROUP_STORAGE = 19, BPF_MAP_TYPE_REUSEPORT_SOCKARRAY = 20, BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = 21, BPF_MAP_TYPE_QUEUE = 22, BPF_MAP_TYPE_STACK = 23, BPF_MAP_TYPE_SK_STORAGE = 24, BPF_MAP_TYPE_DEVMAP_HASH = 25, BPF_MAP_TYPE_STRUCT_OPS = 26, BPF_MAP_TYPE_RINGBUF = 27, BPF_MAP_TYPE_INODE_STORAGE = 28, BPF_MAP_TYPE_TASK_STORAGE = 29, BPF_MAP_TYPE_BLOOM_FILTER = 30, }; enum bpf_prog_type { BPF_PROG_TYPE_UNSPEC = 0, BPF_PROG_TYPE_SOCKET_FILTER = 1, BPF_PROG_TYPE_KPROBE = 2, BPF_PROG_TYPE_SCHED_CLS = 3, BPF_PROG_TYPE_SCHED_ACT = 4, BPF_PROG_TYPE_TRACEPOINT = 5, BPF_PROG_TYPE_XDP = 6, BPF_PROG_TYPE_PERF_EVENT = 7, BPF_PROG_TYPE_CGROUP_SKB = 8, BPF_PROG_TYPE_CGROUP_SOCK = 9, BPF_PROG_TYPE_LWT_IN = 10, BPF_PROG_TYPE_LWT_OUT = 11, BPF_PROG_TYPE_LWT_XMIT = 12, BPF_PROG_TYPE_SOCK_OPS = 13, BPF_PROG_TYPE_SK_SKB = 14, BPF_PROG_TYPE_CGROUP_DEVICE = 15, BPF_PROG_TYPE_SK_MSG = 16, BPF_PROG_TYPE_RAW_TRACEPOINT = 17, BPF_PROG_TYPE_CGROUP_SOCK_ADDR = 18, BPF_PROG_TYPE_LWT_SEG6LOCAL = 19, BPF_PROG_TYPE_LIRC_MODE2 = 20, BPF_PROG_TYPE_SK_REUSEPORT = 21, BPF_PROG_TYPE_FLOW_DISSECTOR = 22, BPF_PROG_TYPE_CGROUP_SYSCTL = 23, BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 24, BPF_PROG_TYPE_CGROUP_SOCKOPT = 25, BPF_PROG_TYPE_TRACING = 26, BPF_PROG_TYPE_STRUCT_OPS = 27, BPF_PROG_TYPE_EXT = 28, BPF_PROG_TYPE_LSM = 29, BPF_PROG_TYPE_SK_LOOKUP = 30, BPF_PROG_TYPE_SYSCALL = 31, }; enum bpf_attach_type { BPF_CGROUP_INET_INGRESS = 0, BPF_CGROUP_INET_EGRESS = 1, BPF_CGROUP_INET_SOCK_CREATE = 2, BPF_CGROUP_SOCK_OPS = 3, BPF_SK_SKB_STREAM_PARSER = 4, BPF_SK_SKB_STREAM_VERDICT = 5, BPF_CGROUP_DEVICE = 6, BPF_SK_MSG_VERDICT = 7, BPF_CGROUP_INET4_BIND = 8, BPF_CGROUP_INET6_BIND = 9, BPF_CGROUP_INET4_CONNECT = 10, BPF_CGROUP_INET6_CONNECT = 11, BPF_CGROUP_INET4_POST_BIND = 12, BPF_CGROUP_INET6_POST_BIND = 13, BPF_CGROUP_UDP4_SENDMSG = 14, BPF_CGROUP_UDP6_SENDMSG = 15, BPF_LIRC_MODE2 = 16, BPF_FLOW_DISSECTOR = 17, BPF_CGROUP_SYSCTL = 18, BPF_CGROUP_UDP4_RECVMSG = 19, BPF_CGROUP_UDP6_RECVMSG = 20, BPF_CGROUP_GETSOCKOPT = 21, BPF_CGROUP_SETSOCKOPT = 22, BPF_TRACE_RAW_TP = 23, BPF_TRACE_FENTRY = 24, BPF_TRACE_FEXIT = 25, BPF_MODIFY_RETURN = 26, BPF_LSM_MAC = 27, BPF_TRACE_ITER = 28, BPF_CGROUP_INET4_GETPEERNAME = 29, BPF_CGROUP_INET6_GETPEERNAME = 30, BPF_CGROUP_INET4_GETSOCKNAME = 31, BPF_CGROUP_INET6_GETSOCKNAME = 32, BPF_XDP_DEVMAP = 33, BPF_CGROUP_INET_SOCK_RELEASE = 34, BPF_XDP_CPUMAP = 35, BPF_SK_LOOKUP = 36, BPF_XDP = 37, BPF_SK_SKB_VERDICT = 38, BPF_SK_REUSEPORT_SELECT = 39, BPF_SK_REUSEPORT_SELECT_OR_MIGRATE = 40, BPF_PERF_EVENT = 41, __MAX_BPF_ATTACH_TYPE = 42, }; union bpf_attr { struct { __u32 map_type; __u32 key_size; __u32 value_size; __u32 max_entries; __u32 map_flags; __u32 inner_map_fd; __u32 numa_node; char map_name[16]; __u32 map_ifindex; __u32 btf_fd; __u32 btf_key_type_id; __u32 btf_value_type_id; __u32 btf_vmlinux_value_type_id; __u64 map_extra; }; struct { __u32 map_fd; __u64 key; union { __u64 value; __u64 next_key; }; __u64 flags; }; struct { __u64 in_batch; __u64 out_batch; __u64 keys; __u64 values; __u32 count; __u32 map_fd; __u64 elem_flags; __u64 flags; } batch; struct { __u32 prog_type; __u32 insn_cnt; __u64 insns; __u64 license; __u32 log_level; __u32 log_size; __u64 log_buf; __u32 kern_version; __u32 prog_flags; char prog_name[16]; __u32 prog_ifindex; __u32 expected_attach_type; __u32 prog_btf_fd; __u32 func_info_rec_size; __u64 func_info; __u32 func_info_cnt; __u32 line_info_rec_size; __u64 line_info; __u32 line_info_cnt; __u32 attach_btf_id; union { __u32 attach_prog_fd; __u32 attach_btf_obj_fd; }; __u32 core_relo_cnt; __u64 fd_array; __u64 core_relos; __u32 core_relo_rec_size; }; struct { __u64 pathname; __u32 bpf_fd; __u32 file_flags; }; struct { __u32 target_fd; __u32 attach_bpf_fd; __u32 attach_type; __u32 attach_flags; __u32 replace_bpf_fd; }; struct { __u32 prog_fd; __u32 retval; __u32 data_size_in; __u32 data_size_out; __u64 data_in; __u64 data_out; __u32 repeat; __u32 duration; __u32 ctx_size_in; __u32 ctx_size_out; __u64 ctx_in; __u64 ctx_out; __u32 flags; __u32 cpu; } test; struct { union { __u32 start_id; __u32 prog_id; __u32 map_id; __u32 btf_id; __u32 link_id; }; __u32 next_id; __u32 open_flags; }; struct { __u32 bpf_fd; __u32 info_len; __u64 info; } info; struct { __u32 target_fd; __u32 attach_type; __u32 query_flags; __u32 attach_flags; __u64 prog_ids; __u32 prog_cnt; } query; struct { __u64 name; __u32 prog_fd; } raw_tracepoint; struct { __u64 btf; __u64 btf_log_buf; __u32 btf_size; __u32 btf_log_size; __u32 btf_log_level; }; struct { __u32 pid; __u32 fd; __u32 flags; __u32 buf_len; __u64 buf; __u32 prog_id; __u32 fd_type; __u64 probe_offset; __u64 probe_addr; } task_fd_query; struct { __u32 prog_fd; union { __u32 target_fd; __u32 target_ifindex; }; __u32 attach_type; __u32 flags; union { __u32 target_btf_id; struct { __u64 iter_info; __u32 iter_info_len; }; struct { __u64 bpf_cookie; } perf_event; }; } link_create; struct { __u32 link_fd; __u32 new_prog_fd; __u32 flags; __u32 old_prog_fd; } link_update; struct { __u32 link_fd; } link_detach; struct { __u32 type; } enable_stats; struct { __u32 link_fd; __u32 flags; } iter_create; struct { __u32 prog_fd; __u32 map_fd; __u32 flags; } prog_bind_map; }; struct bpf_func_info { __u32 insn_off; __u32 type_id; }; struct bpf_line_info { __u32 insn_off; __u32 file_name_off; __u32 line_off; __u32 line_col; }; typedef struct { union { void *kernel; void *user; }; bool is_kernel: 1; } sockptr_t; typedef u64 (*bpf_callback_t)(u64, u64, u64, u64, u64); struct bpf_iter_aux_info; typedef int (*bpf_iter_init_seq_priv_t)(void *, struct bpf_iter_aux_info *); struct bpf_map; struct bpf_iter_aux_info { struct bpf_map *map; }; typedef void (*bpf_iter_fini_seq_priv_t)(void *); struct bpf_iter_seq_info { const struct seq_operations *seq_ops; bpf_iter_init_seq_priv_t init_seq_private; bpf_iter_fini_seq_priv_t fini_seq_private; u32 seq_priv_size; }; struct btf; struct btf_type; struct bpf_prog_aux; struct bpf_local_storage_map; struct bpf_verifier_env; struct bpf_func_state; struct bpf_map_ops { int (*map_alloc_check)(union bpf_attr *); struct bpf_map * (*map_alloc)(union bpf_attr *); void (*map_release)(struct bpf_map *, struct file *); void (*map_free)(struct bpf_map *); int (*map_get_next_key)(struct bpf_map *, void *, void *); void (*map_release_uref)(struct bpf_map *); void * (*map_lookup_elem_sys_only)(struct bpf_map *, void *); int (*map_lookup_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *); int (*map_lookup_and_delete_elem)(struct bpf_map *, void *, void *, u64); int (*map_lookup_and_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *); int (*map_update_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *); int (*map_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *); void * (*map_lookup_elem)(struct bpf_map *, void *); int (*map_update_elem)(struct bpf_map *, void *, void *, u64); int (*map_delete_elem)(struct bpf_map *, void *); int (*map_push_elem)(struct bpf_map *, void *, u64); int (*map_pop_elem)(struct bpf_map *, void *); int (*map_peek_elem)(struct bpf_map *, void *); void * (*map_fd_get_ptr)(struct bpf_map *, struct file *, int); void (*map_fd_put_ptr)(void *); int (*map_gen_lookup)(struct bpf_map *, struct bpf_insn *); u32 (*map_fd_sys_lookup_elem)(void *); void (*map_seq_show_elem)(struct bpf_map *, void *, struct seq_file *); int (*map_check_btf)(const struct bpf_map *, const struct btf *, const struct btf_type *, const struct btf_type *); int (*map_poke_track)(struct bpf_map *, struct bpf_prog_aux *); void (*map_poke_untrack)(struct bpf_map *, struct bpf_prog_aux *); void (*map_poke_run)(struct bpf_map *, u32, struct bpf_prog *, struct bpf_prog *); int (*map_direct_value_addr)(const struct bpf_map *, u64 *, u32); int (*map_direct_value_meta)(const struct bpf_map *, u64, u32 *); int (*map_mmap)(struct bpf_map *, struct vm_area_struct *); __poll_t (*map_poll)(struct bpf_map *, struct file *, struct poll_table_struct *); int (*map_local_storage_charge)(struct bpf_local_storage_map *, void *, u32); void (*map_local_storage_uncharge)(struct bpf_local_storage_map *, void *, u32); struct bpf_local_storage ** (*map_owner_storage_ptr)(void *); int (*map_redirect)(struct bpf_map *, u32, u64); bool (*map_meta_equal)(const struct bpf_map *, const struct bpf_map *); int (*map_set_for_each_callback_args)(struct bpf_verifier_env *, struct bpf_func_state *, struct bpf_func_state *); int (*map_for_each_callback)(struct bpf_map *, bpf_callback_t, void *, u64); const char * const map_btf_name; int *map_btf_id; const struct bpf_iter_seq_info *iter_seq_info; }; struct bpf_map { const struct bpf_map_ops *ops; struct bpf_map *inner_map_meta; enum bpf_map_type map_type; u32 key_size; u32 value_size; u32 max_entries; u64 map_extra; u32 map_flags; int spin_lock_off; int timer_off; u32 id; int numa_node; u32 btf_key_type_id; u32 btf_value_type_id; u32 btf_vmlinux_value_type_id; struct btf *btf; struct mem_cgroup *memcg; char name[16]; bool bypass_spec_v1; bool frozen; long: 48; long: 64; long: 64; atomic64_t refcnt; atomic64_t usercnt; struct work_struct work; struct mutex freeze_mutex; atomic64_t writecnt; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct btf_header { __u16 magic; __u8 version; __u8 flags; __u32 hdr_len; __u32 type_off; __u32 type_len; __u32 str_off; __u32 str_len; }; struct btf { void *data; struct btf_type **types; u32 *resolved_ids; u32 *resolved_sizes; const char *strings; void *nohdr_data; struct btf_header hdr; u32 nr_types; u32 types_size; u32 data_size; refcount_t refcnt; u32 id; struct callback_head rcu; struct btf *base_btf; u32 start_id; u32 start_str_off; char name[56]; bool kernel_btf; }; struct btf_type { __u32 name_off; __u32 info; union { __u32 size; __u32 type; }; }; struct bpf_ksym { long unsigned int start; long unsigned int end; char name[128]; struct list_head lnode; struct latch_tree_node tnode; bool prog; }; struct bpf_ctx_arg_aux; struct bpf_trampoline; struct bpf_jit_poke_descriptor; struct bpf_kfunc_desc_tab; struct bpf_kfunc_btf_tab; struct bpf_prog_ops; struct btf_mod_pair; struct bpf_prog_offload; struct bpf_func_info_aux; struct bpf_prog_aux { atomic64_t refcnt; u32 used_map_cnt; u32 used_btf_cnt; u32 max_ctx_offset; u32 max_pkt_offset; u32 max_tp_access; u32 stack_depth; u32 id; u32 func_cnt; u32 func_idx; u32 attach_btf_id; u32 ctx_arg_info_size; u32 max_rdonly_access; u32 max_rdwr_access; struct btf *attach_btf; const struct bpf_ctx_arg_aux *ctx_arg_info; struct mutex dst_mutex; struct bpf_prog *dst_prog; struct bpf_trampoline *dst_trampoline; enum bpf_prog_type saved_dst_prog_type; enum bpf_attach_type saved_dst_attach_type; bool verifier_zext; bool offload_requested; bool attach_btf_trace; bool func_proto_unreliable; bool sleepable; bool tail_call_reachable; struct hlist_node tramp_hlist; const struct btf_type *attach_func_proto; const char *attach_func_name; struct bpf_prog **func; void *jit_data; struct bpf_jit_poke_descriptor *poke_tab; struct bpf_kfunc_desc_tab *kfunc_tab; struct bpf_kfunc_btf_tab *kfunc_btf_tab; u32 size_poke_tab; struct bpf_ksym ksym; const struct bpf_prog_ops *ops; struct bpf_map **used_maps; struct mutex used_maps_mutex; struct btf_mod_pair *used_btfs; struct bpf_prog *prog; struct user_struct *user; u64 load_time; u32 verified_insns; struct bpf_map *cgroup_storage[2]; char name[16]; struct bpf_prog_offload *offload; struct btf *btf; struct bpf_func_info *func_info; struct bpf_func_info_aux *func_info_aux; struct bpf_line_info *linfo; void **jited_linfo; u32 func_info_cnt; u32 nr_linfo; u32 linfo_idx; u32 num_exentries; struct exception_table_entry *extable; union { struct work_struct work; struct callback_head rcu; }; }; struct sock_filter { __u16 code; __u8 jt; __u8 jf; __u32 k; }; struct bpf_prog_stats; struct sock_fprog_kern; struct bpf_prog { u16 pages; u16 jited: 1; u16 jit_requested: 1; u16 gpl_compatible: 1; u16 cb_access: 1; u16 dst_needed: 1; u16 blinded: 1; u16 is_func: 1; u16 kprobe_override: 1; u16 has_callchain_buf: 1; u16 enforce_expected_attach_type: 1; u16 call_get_stack: 1; u16 call_get_func_ip: 1; enum bpf_prog_type type; enum bpf_attach_type expected_attach_type; u32 len; u32 jited_len; u8 tag[8]; struct bpf_prog_stats *stats; int *active; unsigned int (*bpf_func)(const void *, const struct bpf_insn *); struct bpf_prog_aux *aux; struct sock_fprog_kern *orig_prog; union { struct { struct { } __empty_insns; struct sock_filter insns[0]; }; struct { struct { } __empty_insnsi; struct bpf_insn insnsi[0]; }; }; }; struct bpf_offloaded_map; struct bpf_map_dev_ops { int (*map_get_next_key)(struct bpf_offloaded_map *, void *, void *); int (*map_lookup_elem)(struct bpf_offloaded_map *, void *, void *); int (*map_update_elem)(struct bpf_offloaded_map *, void *, void *, u64); int (*map_delete_elem)(struct bpf_offloaded_map *, void *); }; struct bpf_offloaded_map { struct bpf_map map; struct net_device *netdev; const struct bpf_map_dev_ops *dev_ops; void *dev_priv; struct list_head offloads; long: 64; long: 64; long: 64; }; struct net_device_stats { long unsigned int rx_packets; long unsigned int tx_packets; long unsigned int rx_bytes; long unsigned int tx_bytes; long unsigned int rx_errors; long unsigned int tx_errors; long unsigned int rx_dropped; long unsigned int tx_dropped; long unsigned int multicast; long unsigned int collisions; long unsigned int rx_length_errors; long unsigned int rx_over_errors; long unsigned int rx_crc_errors; long unsigned int rx_frame_errors; long unsigned int rx_fifo_errors; long unsigned int rx_missed_errors; long unsigned int tx_aborted_errors; long unsigned int tx_carrier_errors; long unsigned int tx_fifo_errors; long unsigned int tx_heartbeat_errors; long unsigned int tx_window_errors; long unsigned int rx_compressed; long unsigned int tx_compressed; }; struct netdev_hw_addr_list { struct list_head list; int count; struct rb_root tree; }; struct wireless_dev; struct wpan_dev; enum rx_handler_result { RX_HANDLER_CONSUMED = 0, RX_HANDLER_ANOTHER = 1, RX_HANDLER_EXACT = 2, RX_HANDLER_PASS = 3, }; typedef enum rx_handler_result rx_handler_result_t; typedef rx_handler_result_t rx_handler_func_t(struct sk_buff **); enum netdev_ml_priv_type { ML_PRIV_NONE = 0, ML_PRIV_CAN = 1, }; struct pcpu_dstats; struct netdev_tc_txq { u16 count; u16 offset; }; struct sfp_bus; struct udp_tunnel_nic; struct bpf_xdp_link; struct bpf_xdp_entity { struct bpf_prog *prog; struct bpf_xdp_link *link; }; typedef struct {} netdevice_tracker; struct netdev_name_node; struct dev_ifalias; struct net_device_ops; struct ethtool_ops; struct ndisc_ops; struct header_ops; struct in_device; struct inet6_dev; struct netdev_rx_queue; struct netdev_queue; struct cpu_rmap; struct Qdisc; struct xdp_dev_bulk_queue; struct xps_dev_maps; struct pcpu_lstats; struct pcpu_sw_netstats; struct rtnl_link_ops; struct phy_device; struct udp_tunnel_nic_info; struct net_device { char name[16]; struct netdev_name_node *name_node; struct dev_ifalias *ifalias; long unsigned int mem_end; long unsigned int mem_start; long unsigned int base_addr; long unsigned int state; struct list_head dev_list; struct list_head napi_list; struct list_head unreg_list; struct list_head close_list; struct list_head ptype_all; struct list_head ptype_specific; struct { struct list_head upper; struct list_head lower; } adj_list; unsigned int flags; long long unsigned int priv_flags; const struct net_device_ops *netdev_ops; int ifindex; short unsigned int gflags; short unsigned int hard_header_len; unsigned int mtu; short unsigned int needed_headroom; short unsigned int needed_tailroom; netdev_features_t features; netdev_features_t hw_features; netdev_features_t wanted_features; netdev_features_t vlan_features; netdev_features_t hw_enc_features; netdev_features_t mpls_features; netdev_features_t gso_partial_features; unsigned int min_mtu; unsigned int max_mtu; short unsigned int type; unsigned char min_header_len; unsigned char name_assign_type; int group; struct net_device_stats stats; atomic_long_t rx_dropped; atomic_long_t tx_dropped; atomic_long_t rx_nohandler; atomic_t carrier_up_count; atomic_t carrier_down_count; const struct ethtool_ops *ethtool_ops; const struct ndisc_ops *ndisc_ops; const struct header_ops *header_ops; unsigned char operstate; unsigned char link_mode; unsigned char if_port; unsigned char dma; unsigned char perm_addr[32]; unsigned char addr_assign_type; unsigned char addr_len; unsigned char upper_level; unsigned char lower_level; short unsigned int neigh_priv_len; short unsigned int dev_id; short unsigned int dev_port; short unsigned int padded; spinlock_t addr_list_lock; int irq; struct netdev_hw_addr_list uc; struct netdev_hw_addr_list mc; struct netdev_hw_addr_list dev_addrs; struct kset *queues_kset; unsigned int promiscuity; unsigned int allmulti; bool uc_promisc; struct in_device *ip_ptr; struct inet6_dev *ip6_ptr; struct wireless_dev *ieee80211_ptr; struct wpan_dev *ieee802154_ptr; const unsigned char *dev_addr; struct netdev_rx_queue *_rx; unsigned int num_rx_queues; unsigned int real_num_rx_queues; struct bpf_prog *xdp_prog; long unsigned int gro_flush_timeout; int napi_defer_hard_irqs; rx_handler_func_t *rx_handler; void *rx_handler_data; struct netdev_queue *ingress_queue; unsigned char broadcast[32]; struct cpu_rmap *rx_cpu_rmap; struct hlist_node index_hlist; long: 64; long: 64; struct netdev_queue *_tx; unsigned int num_tx_queues; unsigned int real_num_tx_queues; struct Qdisc *qdisc; unsigned int tx_queue_len; spinlock_t tx_global_lock; struct xdp_dev_bulk_queue *xdp_bulkq; struct xps_dev_maps *xps_maps[2]; struct timer_list watchdog_timer; int watchdog_timeo; u32 proto_down_reason; struct list_head todo_list; int *pcpu_refcnt; struct ref_tracker_dir refcnt_tracker; struct list_head link_watch_list; enum { NETREG_UNINITIALIZED = 0, NETREG_REGISTERED = 1, NETREG_UNREGISTERING = 2, NETREG_UNREGISTERED = 3, NETREG_RELEASED = 4, NETREG_DUMMY = 5, } reg_state: 8; bool dismantle; enum { RTNL_LINK_INITIALIZED = 0, RTNL_LINK_INITIALIZING = 1, } rtnl_link_state: 16; bool needs_free_netdev; void (*priv_destructor)(struct net_device *); possible_net_t nd_net; void *ml_priv; enum netdev_ml_priv_type ml_priv_type; union { struct pcpu_lstats *lstats; struct pcpu_sw_netstats *tstats; struct pcpu_dstats *dstats; }; struct device dev; const struct attribute_group *sysfs_groups[4]; const struct attribute_group *sysfs_rx_queue_group; const struct rtnl_link_ops *rtnl_link_ops; unsigned int gso_max_size; u16 gso_max_segs; s16 num_tc; struct netdev_tc_txq tc_to_txq[16]; u8 prio_tc_map[16]; struct phy_device *phydev; struct sfp_bus *sfp_bus; struct lock_class_key *qdisc_tx_busylock; bool proto_down; unsigned int wol_enabled: 1; unsigned int threaded: 1; struct list_head net_notifier_list; const struct udp_tunnel_nic_info *udp_tunnel_nic_info; struct udp_tunnel_nic *udp_tunnel_nic; struct bpf_xdp_entity xdp_state[3]; u8 dev_addr_shadow[32]; netdevice_tracker linkwatch_dev_tracker; netdevice_tracker watchdog_dev_tracker; long: 64; long: 64; long: 64; }; enum bpf_reg_type { NOT_INIT = 0, SCALAR_VALUE = 1, PTR_TO_CTX = 2, CONST_PTR_TO_MAP = 3, PTR_TO_MAP_VALUE = 4, PTR_TO_MAP_VALUE_OR_NULL = 5, PTR_TO_STACK = 6, PTR_TO_PACKET_META = 7, PTR_TO_PACKET = 8, PTR_TO_PACKET_END = 9, PTR_TO_FLOW_KEYS = 10, PTR_TO_SOCKET = 11, PTR_TO_SOCKET_OR_NULL = 12, PTR_TO_SOCK_COMMON = 13, PTR_TO_SOCK_COMMON_OR_NULL = 14, PTR_TO_TCP_SOCK = 15, PTR_TO_TCP_SOCK_OR_NULL = 16, PTR_TO_TP_BUFFER = 17, PTR_TO_XDP_SOCK = 18, PTR_TO_BTF_ID = 19, PTR_TO_BTF_ID_OR_NULL = 20, PTR_TO_MEM = 21, PTR_TO_MEM_OR_NULL = 22, PTR_TO_RDONLY_BUF = 23, PTR_TO_RDONLY_BUF_OR_NULL = 24, PTR_TO_RDWR_BUF = 25, PTR_TO_RDWR_BUF_OR_NULL = 26, PTR_TO_PERCPU_BTF_ID = 27, PTR_TO_FUNC = 28, PTR_TO_MAP_KEY = 29, __BPF_REG_TYPE_MAX = 30, }; struct bpf_prog_ops { int (*test_run)(struct bpf_prog *, const union bpf_attr *, union bpf_attr *); }; struct bpf_offload_dev; struct bpf_prog_offload { struct bpf_prog *prog; struct net_device *netdev; struct bpf_offload_dev *offdev; void *dev_priv; struct list_head offloads; bool dev_state; bool opt_failed; void *jited_image; u32 jited_len; }; struct btf_func_model { u8 ret_size; u8 nr_args; u8 arg_size[12]; }; struct bpf_tramp_image { void *image; struct bpf_ksym ksym; struct percpu_ref pcref; void *ip_after_call; void *ip_epilogue; union { struct callback_head rcu; struct work_struct work; }; }; struct bpf_trampoline { struct hlist_node hlist; struct mutex mutex; refcount_t refcnt; u64 key; struct { struct btf_func_model model; void *addr; bool ftrace_managed; } func; struct bpf_prog *extension_prog; struct hlist_head progs_hlist[3]; int progs_cnt[3]; struct bpf_tramp_image *cur_image; u64 selector; struct module *mod; }; struct bpf_func_info_aux { u16 linkage; bool unreliable; }; struct bpf_jit_poke_descriptor { void *tailcall_target; void *tailcall_bypass; void *bypass_addr; void *aux; union { struct { struct bpf_map *map; u32 key; } tail_call; }; bool tailcall_target_stable; u8 adj_off; u16 reason; u32 insn_idx; }; struct bpf_ctx_arg_aux { u32 offset; enum bpf_reg_type reg_type; u32 btf_id; }; struct btf_mod_pair { struct btf *btf; struct module *module; }; typedef unsigned int sk_buff_data_t; struct sk_buff { union { struct { struct sk_buff *next; struct sk_buff *prev; union { struct net_device *dev; long unsigned int dev_scratch; }; }; struct rb_node rbnode; struct list_head list; struct llist_node ll_node; }; union { struct sock *sk; int ip_defrag_offset; }; union { ktime_t tstamp; u64 skb_mstamp_ns; }; char cb[48]; union { struct { long unsigned int _skb_refdst; void (*destructor)(struct sk_buff *); }; struct list_head tcp_tsorted_anchor; long unsigned int _sk_redir; }; unsigned int len; unsigned int data_len; __u16 mac_len; __u16 hdr_len; __u16 queue_mapping; __u8 __cloned_offset[0]; __u8 cloned: 1; __u8 nohdr: 1; __u8 fclone: 2; __u8 peeked: 1; __u8 head_frag: 1; __u8 pfmemalloc: 1; __u8 pp_recycle: 1; union { struct { __u8 __pkt_type_offset[0]; __u8 pkt_type: 3; __u8 ignore_df: 1; __u8 nf_trace: 1; __u8 ip_summed: 2; __u8 ooo_okay: 1; __u8 l4_hash: 1; __u8 sw_hash: 1; __u8 wifi_acked_valid: 1; __u8 wifi_acked: 1; __u8 no_fcs: 1; __u8 encapsulation: 1; __u8 encap_hdr_csum: 1; __u8 csum_valid: 1; __u8 __pkt_vlan_present_offset[0]; __u8 vlan_present: 1; __u8 csum_complete_sw: 1; __u8 csum_level: 2; __u8 csum_not_inet: 1; __u8 dst_pending_confirm: 1; __u8 ndisc_nodetype: 2; __u8 ipvs_property: 1; __u8 inner_protocol_type: 1; __u8 remcsum_offload: 1; __u8 redirected: 1; __u8 slow_gro: 1; union { __wsum csum; struct { __u16 csum_start; __u16 csum_offset; }; }; __u32 priority; int skb_iif; __u32 hash; __be16 vlan_proto; __u16 vlan_tci; union { unsigned int napi_id; unsigned int sender_cpu; }; union { __u32 mark; __u32 reserved_tailroom; }; union { __be16 inner_protocol; __u8 inner_ipproto; }; __u16 inner_transport_header; __u16 inner_network_header; __u16 inner_mac_header; __be16 protocol; __u16 transport_header; __u16 network_header; __u16 mac_header; }; struct { __u8 __pkt_type_offset[0]; __u8 pkt_type: 3; __u8 ignore_df: 1; __u8 nf_trace: 1; __u8 ip_summed: 2; __u8 ooo_okay: 1; __u8 l4_hash: 1; __u8 sw_hash: 1; __u8 wifi_acked_valid: 1; __u8 wifi_acked: 1; __u8 no_fcs: 1; __u8 encapsulation: 1; __u8 encap_hdr_csum: 1; __u8 csum_valid: 1; __u8 __pkt_vlan_present_offset[0]; __u8 vlan_present: 1; __u8 csum_complete_sw: 1; __u8 csum_level: 2; __u8 csum_not_inet: 1; __u8 dst_pending_confirm: 1; __u8 ndisc_nodetype: 2; __u8 ipvs_property: 1; __u8 inner_protocol_type: 1; __u8 remcsum_offload: 1; __u8 redirected: 1; __u8 slow_gro: 1; union { __wsum csum; struct { __u16 csum_start; __u16 csum_offset; }; }; __u32 priority; int skb_iif; __u32 hash; __be16 vlan_proto; __u16 vlan_tci; union { unsigned int napi_id; unsigned int sender_cpu; }; union { __u32 mark; __u32 reserved_tailroom; }; union { __be16 inner_protocol; __u8 inner_ipproto; }; __u16 inner_transport_header; __u16 inner_network_header; __u16 inner_mac_header; __be16 protocol; __u16 transport_header; __u16 network_header; __u16 mac_header; } headers; }; sk_buff_data_t tail; sk_buff_data_t end; unsigned char *head; unsigned char *data; unsigned int truesize; refcount_t users; }; enum { Root_NFS = 255, Root_CIFS = 254, Root_RAM0 = 1048576, Root_RAM1 = 1048577, Root_FD0 = 2097152, Root_HDA1 = 3145729, Root_HDA2 = 3145730, Root_SDA1 = 8388609, Root_SDA2 = 8388610, Root_HDC1 = 23068673, Root_SR0 = 11534336, }; typedef short unsigned int __kernel_sa_family_t; typedef __kernel_sa_family_t sa_family_t; struct sockaddr { sa_family_t sa_family; char sa_data[14]; }; struct msghdr { void *msg_name; int msg_namelen; struct iov_iter msg_iter; union { void *msg_control; void *msg_control_user; }; bool msg_control_is_user: 1; __kernel_size_t msg_controllen; unsigned int msg_flags; struct kiocb *msg_iocb; }; struct prot_inuse { int all; int val[64]; }; struct ipstats_mib { u64 mibs[37]; struct u64_stats_sync syncp; }; struct icmp_mib { long unsigned int mibs[28]; }; struct icmpmsg_mib { atomic_long_t mibs[512]; }; struct icmpv6_mib { long unsigned int mibs[6]; }; struct icmpv6_mib_device { atomic_long_t mibs[6]; }; struct icmpv6msg_mib { atomic_long_t mibs[512]; }; struct icmpv6msg_mib_device { atomic_long_t mibs[512]; }; struct tcp_mib { long unsigned int mibs[16]; }; struct udp_mib { long unsigned int mibs[10]; }; struct linux_mib { long unsigned int mibs[126]; }; struct inet_frags; struct fqdir { long int high_thresh; long int low_thresh; int timeout; int max_dist; struct inet_frags *f; struct net *net; bool dead; long: 56; long: 64; long: 64; struct rhashtable rhashtable; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; atomic_long_t mem; struct work_struct destroy_work; struct llist_node free_list; long: 64; long: 64; }; struct inet_frag_queue; struct inet_frags { unsigned int qsize; void (*constructor)(struct inet_frag_queue *, const void *); void (*destructor)(struct inet_frag_queue *); void (*frag_expire)(struct timer_list *); struct kmem_cache *frags_cachep; const char *frags_cache_name; struct rhashtable_params rhash_params; refcount_t refcnt; struct completion completion; }; struct frag_v4_compare_key { __be32 saddr; __be32 daddr; u32 user; u32 vif; __be16 id; u16 protocol; }; struct frag_v6_compare_key { struct in6_addr saddr; struct in6_addr daddr; u32 user; __be32 id; u32 iif; }; struct inet_frag_queue { struct rhash_head node; union { struct frag_v4_compare_key v4; struct frag_v6_compare_key v6; } key; struct timer_list timer; spinlock_t lock; refcount_t refcnt; struct rb_root rb_fragments; struct sk_buff *fragments_tail; struct sk_buff *last_run_head; ktime_t stamp; int len; int meat; __u8 flags; u16 max_size; struct fqdir *fqdir; struct callback_head rcu; }; enum tcp_ca_event { CA_EVENT_TX_START = 0, CA_EVENT_CWND_RESTART = 1, CA_EVENT_COMPLETE_CWR = 2, CA_EVENT_LOSS = 3, CA_EVENT_ECN_NO_CE = 4, CA_EVENT_ECN_IS_CE = 5, }; struct ack_sample; struct rate_sample; union tcp_cc_info; struct tcp_congestion_ops { u32 (*ssthresh)(struct sock *); void (*cong_avoid)(struct sock *, u32, u32); void (*set_state)(struct sock *, u8); void (*cwnd_event)(struct sock *, enum tcp_ca_event); void (*in_ack_event)(struct sock *, u32); void (*pkts_acked)(struct sock *, const struct ack_sample *); u32 (*min_tso_segs)(struct sock *); void (*cong_control)(struct sock *, const struct rate_sample *); u32 (*undo_cwnd)(struct sock *); u32 (*sndbuf_expand)(struct sock *); size_t (*get_info)(struct sock *, u32, int *, union tcp_cc_info *); char name[16]; struct module *owner; struct list_head list; u32 key; u32 flags; void (*init)(struct sock *); void (*release)(struct sock *); long: 64; long: 64; long: 64; long: 64; long: 64; }; struct netlink_ext_ack; struct fib_notifier_ops { int family; struct list_head list; unsigned int (*fib_seq_read)(struct net *); int (*fib_dump)(struct net *, struct notifier_block *, struct netlink_ext_ack *); struct module *owner; struct callback_head rcu; }; struct lwtunnel_state; struct dst_entry { struct net_device *dev; struct dst_ops *ops; long unsigned int _metrics; long unsigned int expires; void *__pad1; int (*input)(struct sk_buff *); int (*output)(struct net *, struct sock *, struct sk_buff *); short unsigned int flags; short int obsolete; short unsigned int header_len; short unsigned int trailer_len; atomic_t __refcnt; int __use; long unsigned int lastuse; struct lwtunnel_state *lwtstate; struct callback_head callback_head; short int error; short int __pad; __u32 tclassid; netdevice_tracker dev_tracker; }; struct hh_cache { unsigned int hh_len; seqlock_t hh_lock; long unsigned int hh_data[4]; }; struct neigh_table; struct neigh_parms; struct neigh_ops; struct neighbour { struct neighbour *next; struct neigh_table *tbl; struct neigh_parms *parms; long unsigned int confirmed; long unsigned int updated; rwlock_t lock; refcount_t refcnt; unsigned int arp_queue_len_bytes; struct sk_buff_head arp_queue; struct timer_list timer; long unsigned int used; atomic_t probes; u8 nud_state; u8 type; u8 dead; u8 protocol; u32 flags; seqlock_t ha_lock; int: 32; unsigned char ha[32]; struct hh_cache hh; int (*output)(struct neighbour *, struct sk_buff *); const struct neigh_ops *ops; struct list_head gc_list; struct list_head managed_list; struct callback_head rcu; struct net_device *dev; netdevice_tracker dev_tracker; u8 primary_key[0]; }; struct ipv6_stable_secret { bool initialized; struct in6_addr secret; }; struct ipv6_devconf { __s32 forwarding; __s32 hop_limit; __s32 mtu6; __s32 accept_ra; __s32 accept_redirects; __s32 autoconf; __s32 dad_transmits; __s32 rtr_solicits; __s32 rtr_solicit_interval; __s32 rtr_solicit_max_interval; __s32 rtr_solicit_delay; __s32 force_mld_version; __s32 mldv1_unsolicited_report_interval; __s32 mldv2_unsolicited_report_interval; __s32 use_tempaddr; __s32 temp_valid_lft; __s32 temp_prefered_lft; __s32 regen_max_retry; __s32 max_desync_factor; __s32 max_addresses; __s32 accept_ra_defrtr; __u32 ra_defrtr_metric; __s32 accept_ra_min_hop_limit; __s32 accept_ra_pinfo; __s32 ignore_routes_with_linkdown; __s32 proxy_ndp; __s32 accept_source_route; __s32 accept_ra_from_local; __s32 disable_ipv6; __s32 drop_unicast_in_l2_multicast; __s32 accept_dad; __s32 force_tllao; __s32 ndisc_notify; __s32 suppress_frag_ndisc; __s32 accept_ra_mtu; __s32 drop_unsolicited_na; struct ipv6_stable_secret stable_secret; __s32 use_oif_addrs_only; __s32 keep_addr_on_down; __s32 seg6_enabled; __u32 enhanced_dad; __u32 addr_gen_mode; __s32 disable_policy; __s32 ndisc_tclass; __s32 rpl_seg_enabled; __u32 ioam6_id; __u32 ioam6_id_wide; __u8 ioam6_enabled; __u8 ndisc_evict_nocarrier; struct ctl_table_header *sysctl_header; }; typedef enum { SS_FREE = 0, SS_UNCONNECTED = 1, SS_CONNECTING = 2, SS_CONNECTED = 3, SS_DISCONNECTING = 4, } socket_state; struct socket_wq { wait_queue_head_t wait; struct fasync_struct *fasync_list; long unsigned int flags; struct callback_head rcu; long: 64; }; struct proto_ops; struct socket { socket_state state; short int type; long unsigned int flags; struct file *file; struct sock *sk; const struct proto_ops *ops; long: 64; long: 64; long: 64; struct socket_wq wq; }; typedef int (*sk_read_actor_t)(read_descriptor_t *, struct sk_buff *, unsigned int, size_t); struct proto_ops { int family; struct module *owner; int (*release)(struct socket *); int (*bind)(struct socket *, struct sockaddr *, int); int (*connect)(struct socket *, struct sockaddr *, int, int); int (*socketpair)(struct socket *, struct socket *); int (*accept)(struct socket *, struct socket *, int, bool); int (*getname)(struct socket *, struct sockaddr *, int); __poll_t (*poll)(struct file *, struct socket *, struct poll_table_struct *); int (*ioctl)(struct socket *, unsigned int, long unsigned int); int (*gettstamp)(struct socket *, void *, bool, bool); int (*listen)(struct socket *, int); int (*shutdown)(struct socket *, int); int (*setsockopt)(struct socket *, int, int, sockptr_t, unsigned int); int (*getsockopt)(struct socket *, int, int, char *, int *); void (*show_fdinfo)(struct seq_file *, struct socket *); int (*sendmsg)(struct socket *, struct msghdr *, size_t); int (*recvmsg)(struct socket *, struct msghdr *, size_t, int); int (*mmap)(struct file *, struct socket *, struct vm_area_struct *); ssize_t (*sendpage)(struct socket *, struct page *, int, size_t, int); ssize_t (*splice_read)(struct socket *, loff_t *, struct pipe_inode_info *, size_t, unsigned int); int (*set_peek_off)(struct sock *, int); int (*peek_len)(struct socket *); int (*read_sock)(struct sock *, read_descriptor_t *, sk_read_actor_t); int (*sendpage_locked)(struct sock *, struct page *, int, size_t, int); int (*sendmsg_locked)(struct sock *, struct msghdr *, size_t); int (*set_rcvlowat)(struct sock *, int); }; struct pipe_buf_operations; struct pipe_buffer { struct page *page; unsigned int offset; unsigned int len; const struct pipe_buf_operations *ops; unsigned int flags; long unsigned int private; }; struct pipe_buf_operations { int (*confirm)(struct pipe_inode_info *, struct pipe_buffer *); void (*release)(struct pipe_inode_info *, struct pipe_buffer *); bool (*try_steal)(struct pipe_inode_info *, struct pipe_buffer *); bool (*get)(struct pipe_inode_info *, struct pipe_buffer *); }; struct dql { unsigned int num_queued; unsigned int adj_limit; unsigned int last_obj_cnt; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; unsigned int limit; unsigned int num_completed; unsigned int prev_ovlimit; unsigned int prev_num_queued; unsigned int prev_last_obj_cnt; unsigned int lowest_slack; long unsigned int slack_start_time; unsigned int max_limit; unsigned int min_limit; unsigned int slack_hold_time; long: 32; long: 64; long: 64; }; struct xdp_mem_info { u32 type; u32 id; }; struct xdp_rxq_info { struct net_device *dev; u32 queue_index; u32 reg_state; struct xdp_mem_info mem; unsigned int napi_id; long: 32; long: 64; long: 64; long: 64; long: 64; }; struct xdp_txq_info { struct net_device *dev; }; struct xdp_buff { void *data; void *data_end; void *data_meta; void *data_hard_start; struct xdp_rxq_info *rxq; struct xdp_txq_info *txq; u32 frame_sz; }; struct xdp_frame { void *data; u16 len; u16 headroom; u32 metasize: 8; u32 frame_sz: 24; struct xdp_mem_info mem; struct net_device *dev_rx; }; struct nlmsghdr { __u32 nlmsg_len; __u16 nlmsg_type; __u16 nlmsg_flags; __u32 nlmsg_seq; __u32 nlmsg_pid; }; struct nlattr { __u16 nla_len; __u16 nla_type; }; struct nla_policy; struct netlink_ext_ack { const char *_msg; const struct nlattr *bad_attr; const struct nla_policy *policy; u8 cookie[20]; u8 cookie_len; }; struct netlink_range_validation; struct netlink_range_validation_signed; struct nla_policy { u8 type; u8 validation_type; u16 len; union { const u32 bitfield32_valid; const u32 mask; const char *reject_message; const struct nla_policy *nested_policy; struct netlink_range_validation *range; struct netlink_range_validation_signed *range_signed; struct { s16 min; s16 max; }; int (*validate)(const struct nlattr *, struct netlink_ext_ack *); u16 strict_start_type; }; }; struct netlink_callback { struct sk_buff *skb; const struct nlmsghdr *nlh; int (*dump)(struct sk_buff *, struct netlink_callback *); int (*done)(struct netlink_callback *); void *data; struct module *module; struct netlink_ext_ack *extack; u16 family; u16 answer_flags; u32 min_dump_alloc; unsigned int prev_seq; unsigned int seq; bool strict_check; union { u8 ctx[48]; long int args[6]; }; }; struct ndmsg { __u8 ndm_family; __u8 ndm_pad1; __u16 ndm_pad2; __s32 ndm_ifindex; __u16 ndm_state; __u8 ndm_flags; __u8 ndm_type; }; typedef struct { unsigned int clock_rate; unsigned int clock_type; short unsigned int loopback; } sync_serial_settings; typedef struct { unsigned int clock_rate; unsigned int clock_type; short unsigned int loopback; unsigned int slot_map; } te1_settings; typedef struct { short unsigned int encoding; short unsigned int parity; } raw_hdlc_proto; typedef struct { unsigned int t391; unsigned int t392; unsigned int n391; unsigned int n392; unsigned int n393; short unsigned int lmi; short unsigned int dce; } fr_proto; typedef struct { unsigned int dlci; } fr_proto_pvc; typedef struct { unsigned int dlci; char master[16]; } fr_proto_pvc_info; typedef struct { unsigned int interval; unsigned int timeout; } cisco_proto; typedef struct { short unsigned int dce; unsigned int modulo; unsigned int window; unsigned int t1; unsigned int t2; unsigned int n2; } x25_hdlc_proto; struct ifmap { long unsigned int mem_start; long unsigned int mem_end; short unsigned int base_addr; unsigned char irq; unsigned char dma; unsigned char port; }; struct if_settings { unsigned int type; unsigned int size; union { raw_hdlc_proto *raw_hdlc; cisco_proto *cisco; fr_proto *fr; fr_proto_pvc *fr_pvc; fr_proto_pvc_info *fr_pvc_info; x25_hdlc_proto *x25; sync_serial_settings *sync; te1_settings *te1; } ifs_ifsu; }; struct ifreq { union { char ifrn_name[16]; } ifr_ifrn; union { struct sockaddr ifru_addr; struct sockaddr ifru_dstaddr; struct sockaddr ifru_broadaddr; struct sockaddr ifru_netmask; struct sockaddr ifru_hwaddr; short int ifru_flags; int ifru_ivalue; int ifru_mtu; struct ifmap ifru_map; char ifru_slave[16]; char ifru_newname[16]; void *ifru_data; struct if_settings ifru_settings; } ifr_ifru; }; struct rtnl_link_stats64 { __u64 rx_packets; __u64 tx_packets; __u64 rx_bytes; __u64 tx_bytes; __u64 rx_errors; __u64 tx_errors; __u64 rx_dropped; __u64 tx_dropped; __u64 multicast; __u64 collisions; __u64 rx_length_errors; __u64 rx_over_errors; __u64 rx_crc_errors; __u64 rx_frame_errors; __u64 rx_fifo_errors; __u64 rx_missed_errors; __u64 tx_aborted_errors; __u64 tx_carrier_errors; __u64 tx_fifo_errors; __u64 tx_heartbeat_errors; __u64 tx_window_errors; __u64 rx_compressed; __u64 tx_compressed; __u64 rx_nohandler; }; struct ifla_vf_guid { __u32 vf; __u64 guid; }; struct ifla_vf_stats { __u64 rx_packets; __u64 tx_packets; __u64 rx_bytes; __u64 tx_bytes; __u64 broadcast; __u64 multicast; __u64 rx_dropped; __u64 tx_dropped; }; struct ifla_vf_info { __u32 vf; __u8 mac[32]; __u32 vlan; __u32 qos; __u32 spoofchk; __u32 linkstate; __u32 min_tx_rate; __u32 max_tx_rate; __u32 rss_query_en; __u32 trusted; __be16 vlan_proto; }; struct tc_stats { __u64 bytes; __u32 packets; __u32 drops; __u32 overlimits; __u32 bps; __u32 pps; __u32 qlen; __u32 backlog; }; struct tc_sizespec { unsigned char cell_log; unsigned char size_log; short int cell_align; int overhead; unsigned int linklayer; unsigned int mpu; unsigned int mtu; unsigned int tsize; }; enum netdev_tx { __NETDEV_TX_MIN = 2147483648, NETDEV_TX_OK = 0, NETDEV_TX_BUSY = 16, }; typedef enum netdev_tx netdev_tx_t; struct header_ops { int (*create)(struct sk_buff *, struct net_device *, short unsigned int, const void *, const void *, unsigned int); int (*parse)(const struct sk_buff *, unsigned char *); int (*cache)(const struct neighbour *, struct hh_cache *, __be16); void (*cache_update)(struct hh_cache *, const struct net_device *, const unsigned char *); bool (*validate)(const char *, unsigned int); __be16 (*parse_protocol)(const struct sk_buff *); }; struct xsk_buff_pool; struct netdev_queue { struct net_device *dev; netdevice_tracker dev_tracker; struct Qdisc *qdisc; struct Qdisc *qdisc_sleeping; struct kobject kobj; long unsigned int tx_maxrate; atomic_long_t trans_timeout; struct net_device *sb_dev; struct xsk_buff_pool *pool; long: 64; spinlock_t _xmit_lock; int xmit_lock_owner; long unsigned int trans_start; long unsigned int state; long: 64; long: 64; long: 64; long: 64; long: 64; struct dql dql; }; struct qdisc_skb_head { struct sk_buff *head; struct sk_buff *tail; __u32 qlen; spinlock_t lock; }; struct gnet_stats_basic_sync { u64_stats_t bytes; u64_stats_t packets; struct u64_stats_sync syncp; }; struct gnet_stats_queue { __u32 qlen; __u32 backlog; __u32 drops; __u32 requeues; __u32 overlimits; }; struct Qdisc_ops; struct qdisc_size_table; struct net_rate_estimator; struct Qdisc { int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **); struct sk_buff * (*dequeue)(struct Qdisc *); unsigned int flags; u32 limit; const struct Qdisc_ops *ops; struct qdisc_size_table *stab; struct hlist_node hash; u32 handle; u32 parent; struct netdev_queue *dev_queue; struct net_rate_estimator *rate_est; struct gnet_stats_basic_sync *cpu_bstats; struct gnet_stats_queue *cpu_qstats; int pad; refcount_t refcnt; long: 64; long: 64; long: 64; struct sk_buff_head gso_skb; struct qdisc_skb_head q; struct gnet_stats_basic_sync bstats; struct gnet_stats_queue qstats; long unsigned int state; long unsigned int state2; struct Qdisc *next_sched; struct sk_buff_head skb_bad_txq; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; spinlock_t busylock; spinlock_t seqlock; struct callback_head rcu; netdevice_tracker dev_tracker; long: 64; long: 64; long: 64; long: 64; long: 64; long int privdata[0]; }; struct rps_map { unsigned int len; struct callback_head rcu; u16 cpus[0]; }; struct rps_dev_flow { u16 cpu; u16 filter; unsigned int last_qtail; }; struct rps_dev_flow_table { unsigned int mask; struct callback_head rcu; struct rps_dev_flow flows[0]; }; struct netdev_rx_queue { struct xdp_rxq_info xdp_rxq; struct rps_map *rps_map; struct rps_dev_flow_table *rps_flow_table; struct kobject kobj; struct net_device *dev; netdevice_tracker dev_tracker; struct xsk_buff_pool *pool; long: 64; long: 64; long: 64; long: 64; }; struct xps_map { unsigned int len; unsigned int alloc_len; struct callback_head rcu; u16 queues[0]; }; struct xps_dev_maps { struct callback_head rcu; unsigned int nr_ids; s16 num_tc; struct xps_map *attr_map[0]; }; struct netdev_phys_item_id { unsigned char id[32]; unsigned char id_len; }; enum net_device_path_type { DEV_PATH_ETHERNET = 0, DEV_PATH_VLAN = 1, DEV_PATH_BRIDGE = 2, DEV_PATH_PPPOE = 3, DEV_PATH_DSA = 4, }; struct net_device_path { enum net_device_path_type type; const struct net_device *dev; union { struct { u16 id; __be16 proto; u8 h_dest[6]; } encap; struct { enum { DEV_PATH_BR_VLAN_KEEP = 0, DEV_PATH_BR_VLAN_TAG = 1, DEV_PATH_BR_VLAN_UNTAG = 2, DEV_PATH_BR_VLAN_UNTAG_HW = 3, } vlan_mode; u16 vlan_id; __be16 vlan_proto; } bridge; struct { int port; u16 proto; } dsa; }; }; struct net_device_path_ctx { const struct net_device *dev; const u8 *daddr; int num_vlans; struct { u16 id; __be16 proto; } vlan[2]; }; enum tc_setup_type { TC_SETUP_QDISC_MQPRIO = 0, TC_SETUP_CLSU32 = 1, TC_SETUP_CLSFLOWER = 2, TC_SETUP_CLSMATCHALL = 3, TC_SETUP_CLSBPF = 4, TC_SETUP_BLOCK = 5, TC_SETUP_QDISC_CBS = 6, TC_SETUP_QDISC_RED = 7, TC_SETUP_QDISC_PRIO = 8, TC_SETUP_QDISC_MQ = 9, TC_SETUP_QDISC_ETF = 10, TC_SETUP_ROOT_QDISC = 11, TC_SETUP_QDISC_GRED = 12, TC_SETUP_QDISC_TAPRIO = 13, TC_SETUP_FT = 14, TC_SETUP_QDISC_ETS = 15, TC_SETUP_QDISC_TBF = 16, TC_SETUP_QDISC_FIFO = 17, TC_SETUP_QDISC_HTB = 18, }; enum bpf_netdev_command { XDP_SETUP_PROG = 0, XDP_SETUP_PROG_HW = 1, BPF_OFFLOAD_MAP_ALLOC = 2, BPF_OFFLOAD_MAP_FREE = 3, XDP_SETUP_XSK_POOL = 4, }; struct netdev_bpf { enum bpf_netdev_command command; union { struct { u32 flags; struct bpf_prog *prog; struct netlink_ext_ack *extack; }; struct { struct bpf_offloaded_map *offmap; }; struct { struct xsk_buff_pool *pool; u16 queue_id; } xsk; }; }; struct dev_ifalias { struct callback_head rcuhead; char ifalias[0]; }; struct netdev_name_node { struct hlist_node hlist; struct list_head list; struct net_device *dev; const char *name; }; struct devlink_port; struct ip_tunnel_parm; struct net_device_ops { int (*ndo_init)(struct net_device *); void (*ndo_uninit)(struct net_device *); int (*ndo_open)(struct net_device *); int (*ndo_stop)(struct net_device *); netdev_tx_t (*ndo_start_xmit)(struct sk_buff *, struct net_device *); netdev_features_t (*ndo_features_check)(struct sk_buff *, struct net_device *, netdev_features_t); u16 (*ndo_select_queue)(struct net_device *, struct sk_buff *, struct net_device *); void (*ndo_change_rx_flags)(struct net_device *, int); void (*ndo_set_rx_mode)(struct net_device *); int (*ndo_set_mac_address)(struct net_device *, void *); int (*ndo_validate_addr)(struct net_device *); int (*ndo_do_ioctl)(struct net_device *, struct ifreq *, int); int (*ndo_eth_ioctl)(struct net_device *, struct ifreq *, int); int (*ndo_siocbond)(struct net_device *, struct ifreq *, int); int (*ndo_siocwandev)(struct net_device *, struct if_settings *); int (*ndo_siocdevprivate)(struct net_device *, struct ifreq *, void *, int); int (*ndo_set_config)(struct net_device *, struct ifmap *); int (*ndo_change_mtu)(struct net_device *, int); int (*ndo_neigh_setup)(struct net_device *, struct neigh_parms *); void (*ndo_tx_timeout)(struct net_device *, unsigned int); void (*ndo_get_stats64)(struct net_device *, struct rtnl_link_stats64 *); bool (*ndo_has_offload_stats)(const struct net_device *, int); int (*ndo_get_offload_stats)(int, const struct net_device *, void *); struct net_device_stats * (*ndo_get_stats)(struct net_device *); int (*ndo_vlan_rx_add_vid)(struct net_device *, __be16, u16); int (*ndo_vlan_rx_kill_vid)(struct net_device *, __be16, u16); int (*ndo_set_vf_mac)(struct net_device *, int, u8 *); int (*ndo_set_vf_vlan)(struct net_device *, int, u16, u8, __be16); int (*ndo_set_vf_rate)(struct net_device *, int, int, int); int (*ndo_set_vf_spoofchk)(struct net_device *, int, bool); int (*ndo_set_vf_trust)(struct net_device *, int, bool); int (*ndo_get_vf_config)(struct net_device *, int, struct ifla_vf_info *); int (*ndo_set_vf_link_state)(struct net_device *, int, int); int (*ndo_get_vf_stats)(struct net_device *, int, struct ifla_vf_stats *); int (*ndo_set_vf_port)(struct net_device *, int, struct nlattr **); int (*ndo_get_vf_port)(struct net_device *, int, struct sk_buff *); int (*ndo_get_vf_guid)(struct net_device *, int, struct ifla_vf_guid *, struct ifla_vf_guid *); int (*ndo_set_vf_guid)(struct net_device *, int, u64, int); int (*ndo_set_vf_rss_query_en)(struct net_device *, int, bool); int (*ndo_setup_tc)(struct net_device *, enum tc_setup_type, void *); int (*ndo_rx_flow_steer)(struct net_device *, const struct sk_buff *, u16, u32); int (*ndo_add_slave)(struct net_device *, struct net_device *, struct netlink_ext_ack *); int (*ndo_del_slave)(struct net_device *, struct net_device *); struct net_device * (*ndo_get_xmit_slave)(struct net_device *, struct sk_buff *, bool); struct net_device * (*ndo_sk_get_lower_dev)(struct net_device *, struct sock *); netdev_features_t (*ndo_fix_features)(struct net_device *, netdev_features_t); int (*ndo_set_features)(struct net_device *, netdev_features_t); int (*ndo_neigh_construct)(struct net_device *, struct neighbour *); void (*ndo_neigh_destroy)(struct net_device *, struct neighbour *); int (*ndo_fdb_add)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16, u16, struct netlink_ext_ack *); int (*ndo_fdb_del)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16); int (*ndo_fdb_dump)(struct sk_buff *, struct netlink_callback *, struct net_device *, struct net_device *, int *); int (*ndo_fdb_get)(struct sk_buff *, struct nlattr **, struct net_device *, const unsigned char *, u16, u32, u32, struct netlink_ext_ack *); int (*ndo_bridge_setlink)(struct net_device *, struct nlmsghdr *, u16, struct netlink_ext_ack *); int (*ndo_bridge_getlink)(struct sk_buff *, u32, u32, struct net_device *, u32, int); int (*ndo_bridge_dellink)(struct net_device *, struct nlmsghdr *, u16); int (*ndo_change_carrier)(struct net_device *, bool); int (*ndo_get_phys_port_id)(struct net_device *, struct netdev_phys_item_id *); int (*ndo_get_port_parent_id)(struct net_device *, struct netdev_phys_item_id *); int (*ndo_get_phys_port_name)(struct net_device *, char *, size_t); void * (*ndo_dfwd_add_station)(struct net_device *, struct net_device *); void (*ndo_dfwd_del_station)(struct net_device *, void *); int (*ndo_set_tx_maxrate)(struct net_device *, int, u32); int (*ndo_get_iflink)(const struct net_device *); int (*ndo_fill_metadata_dst)(struct net_device *, struct sk_buff *); void (*ndo_set_rx_headroom)(struct net_device *, int); int (*ndo_bpf)(struct net_device *, struct netdev_bpf *); int (*ndo_xdp_xmit)(struct net_device *, int, struct xdp_frame **, u32); struct net_device * (*ndo_xdp_get_xmit_slave)(struct net_device *, struct xdp_buff *); int (*ndo_xsk_wakeup)(struct net_device *, u32, u32); struct devlink_port * (*ndo_get_devlink_port)(struct net_device *); int (*ndo_tunnel_ctl)(struct net_device *, struct ip_tunnel_parm *, int); struct net_device * (*ndo_get_peer_dev)(struct net_device *); int (*ndo_fill_forward_path)(struct net_device_path_ctx *, struct net_device_path *); }; struct neigh_parms { possible_net_t net; struct net_device *dev; netdevice_tracker dev_tracker; struct list_head list; int (*neigh_setup)(struct neighbour *); struct neigh_table *tbl; void *sysctl_table; int dead; refcount_t refcnt; struct callback_head callback_head; int reachable_time; int data[13]; long unsigned int data_state[1]; }; struct pcpu_lstats { u64_stats_t packets; u64_stats_t bytes; struct u64_stats_sync syncp; }; struct pcpu_sw_netstats { u64 rx_packets; u64 rx_bytes; u64 tx_packets; u64 tx_bytes; struct u64_stats_sync syncp; }; enum ethtool_phys_id_state { ETHTOOL_ID_INACTIVE = 0, ETHTOOL_ID_ACTIVE = 1, ETHTOOL_ID_ON = 2, ETHTOOL_ID_OFF = 3, }; struct ethtool_drvinfo; struct ethtool_regs; struct ethtool_wolinfo; struct ethtool_link_ext_state_info; struct ethtool_eeprom; struct ethtool_coalesce; struct kernel_ethtool_coalesce; struct ethtool_ringparam; struct kernel_ethtool_ringparam; struct ethtool_pause_stats; struct ethtool_pauseparam; struct ethtool_test; struct ethtool_stats; struct ethtool_rxnfc; struct ethtool_flash; struct ethtool_channels; struct ethtool_dump; struct ethtool_ts_info; struct ethtool_modinfo; struct ethtool_eee; struct ethtool_tunable; struct ethtool_link_ksettings; struct ethtool_fec_stats; struct ethtool_fecparam; struct ethtool_module_eeprom; struct ethtool_eth_phy_stats; struct ethtool_eth_mac_stats; struct ethtool_eth_ctrl_stats; struct ethtool_rmon_stats; struct ethtool_rmon_hist_range; struct ethtool_module_power_mode_params; struct ethtool_ops { u32 cap_link_lanes_supported: 1; u32 supported_coalesce_params; u32 supported_ring_params; void (*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *); int (*get_regs_len)(struct net_device *); void (*get_regs)(struct net_device *, struct ethtool_regs *, void *); void (*get_wol)(struct net_device *, struct ethtool_wolinfo *); int (*set_wol)(struct net_device *, struct ethtool_wolinfo *); u32 (*get_msglevel)(struct net_device *); void (*set_msglevel)(struct net_device *, u32); int (*nway_reset)(struct net_device *); u32 (*get_link)(struct net_device *); int (*get_link_ext_state)(struct net_device *, struct ethtool_link_ext_state_info *); int (*get_eeprom_len)(struct net_device *); int (*get_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *); int (*set_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *); int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *, struct kernel_ethtool_coalesce *, struct netlink_ext_ack *); int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *, struct kernel_ethtool_coalesce *, struct netlink_ext_ack *); void (*get_ringparam)(struct net_device *, struct ethtool_ringparam *, struct kernel_ethtool_ringparam *, struct netlink_ext_ack *); int (*set_ringparam)(struct net_device *, struct ethtool_ringparam *, struct kernel_ethtool_ringparam *, struct netlink_ext_ack *); void (*get_pause_stats)(struct net_device *, struct ethtool_pause_stats *); void (*get_pauseparam)(struct net_device *, struct ethtool_pauseparam *); int (*set_pauseparam)(struct net_device *, struct ethtool_pauseparam *); void (*self_test)(struct net_device *, struct ethtool_test *, u64 *); void (*get_strings)(struct net_device *, u32, u8 *); int (*set_phys_id)(struct net_device *, enum ethtool_phys_id_state); void (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *); int (*begin)(struct net_device *); void (*complete)(struct net_device *); u32 (*get_priv_flags)(struct net_device *); int (*set_priv_flags)(struct net_device *, u32); int (*get_sset_count)(struct net_device *, int); int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, u32 *); int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *); int (*flash_device)(struct net_device *, struct ethtool_flash *); int (*reset)(struct net_device *, u32 *); u32 (*get_rxfh_key_size)(struct net_device *); u32 (*get_rxfh_indir_size)(struct net_device *); int (*get_rxfh)(struct net_device *, u32 *, u8 *, u8 *); int (*set_rxfh)(struct net_device *, const u32 *, const u8 *, const u8); int (*get_rxfh_context)(struct net_device *, u32 *, u8 *, u8 *, u32); int (*set_rxfh_context)(struct net_device *, const u32 *, const u8 *, const u8, u32 *, bool); void (*get_channels)(struct net_device *, struct ethtool_channels *); int (*set_channels)(struct net_device *, struct ethtool_channels *); int (*get_dump_flag)(struct net_device *, struct ethtool_dump *); int (*get_dump_data)(struct net_device *, struct ethtool_dump *, void *); int (*set_dump)(struct net_device *, struct ethtool_dump *); int (*get_ts_info)(struct net_device *, struct ethtool_ts_info *); int (*get_module_info)(struct net_device *, struct ethtool_modinfo *); int (*get_module_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *); int (*get_eee)(struct net_device *, struct ethtool_eee *); int (*set_eee)(struct net_device *, struct ethtool_eee *); int (*get_tunable)(struct net_device *, const struct ethtool_tunable *, void *); int (*set_tunable)(struct net_device *, const struct ethtool_tunable *, const void *); int (*get_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *); int (*set_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *); int (*get_link_ksettings)(struct net_device *, struct ethtool_link_ksettings *); int (*set_link_ksettings)(struct net_device *, const struct ethtool_link_ksettings *); void (*get_fec_stats)(struct net_device *, struct ethtool_fec_stats *); int (*get_fecparam)(struct net_device *, struct ethtool_fecparam *); int (*set_fecparam)(struct net_device *, struct ethtool_fecparam *); void (*get_ethtool_phy_stats)(struct net_device *, struct ethtool_stats *, u64 *); int (*get_phy_tunable)(struct net_device *, const struct ethtool_tunable *, void *); int (*set_phy_tunable)(struct net_device *, const struct ethtool_tunable *, const void *); int (*get_module_eeprom_by_page)(struct net_device *, const struct ethtool_module_eeprom *, struct netlink_ext_ack *); void (*get_eth_phy_stats)(struct net_device *, struct ethtool_eth_phy_stats *); void (*get_eth_mac_stats)(struct net_device *, struct ethtool_eth_mac_stats *); void (*get_eth_ctrl_stats)(struct net_device *, struct ethtool_eth_ctrl_stats *); void (*get_rmon_stats)(struct net_device *, struct ethtool_rmon_stats *, const struct ethtool_rmon_hist_range **); int (*get_module_power_mode)(struct net_device *, struct ethtool_module_power_mode_params *, struct netlink_ext_ack *); int (*set_module_power_mode)(struct net_device *, const struct ethtool_module_power_mode_params *, struct netlink_ext_ack *); }; struct nd_opt_hdr; struct ndisc_options; struct prefix_info; struct ndisc_ops { int (*is_useropt)(u8); int (*parse_options)(const struct net_device *, struct nd_opt_hdr *, struct ndisc_options *); void (*update)(const struct net_device *, struct neighbour *, u32, u8, const struct ndisc_options *); int (*opt_addr_space)(const struct net_device *, u8, struct neighbour *, u8 *, u8 **); void (*fill_addr_option)(const struct net_device *, struct sk_buff *, u8, const u8 *); void (*prefix_rcv_add_addr)(struct net *, struct net_device *, const struct prefix_info *, struct inet6_dev *, struct in6_addr *, int, u32, bool, bool, __u32, u32, bool); }; struct ipv6_devstat { struct proc_dir_entry *proc_dir_entry; struct ipstats_mib *ipv6; struct icmpv6_mib_device *icmpv6dev; struct icmpv6msg_mib_device *icmpv6msgdev; }; struct ifmcaddr6; struct ifacaddr6; struct inet6_dev { struct net_device *dev; netdevice_tracker dev_tracker; struct list_head addr_list; struct ifmcaddr6 *mc_list; struct ifmcaddr6 *mc_tomb; unsigned char mc_qrv; unsigned char mc_gq_running; unsigned char mc_ifc_count; unsigned char mc_dad_count; long unsigned int mc_v1_seen; long unsigned int mc_qi; long unsigned int mc_qri; long unsigned int mc_maxdelay; struct delayed_work mc_gq_work; struct delayed_work mc_ifc_work; struct delayed_work mc_dad_work; struct delayed_work mc_query_work; struct delayed_work mc_report_work; struct sk_buff_head mc_query_queue; struct sk_buff_head mc_report_queue; spinlock_t mc_query_lock; spinlock_t mc_report_lock; struct mutex mc_lock; struct ifacaddr6 *ac_list; rwlock_t lock; refcount_t refcnt; __u32 if_flags; int dead; u32 desync_factor; struct list_head tempaddr_list; struct in6_addr token; struct neigh_parms *nd_parms; struct ipv6_devconf cnf; struct ipv6_devstat stats; struct timer_list rs_timer; __s32 rs_interval; __u8 rs_probes; long unsigned int tstamp; struct callback_head rcu; unsigned int ra_mtu; }; struct rtnl_link_ops { struct list_head list; const char *kind; size_t priv_size; struct net_device * (*alloc)(struct nlattr **, const char *, unsigned char, unsigned int, unsigned int); void (*setup)(struct net_device *); bool netns_refund; unsigned int maxtype; const struct nla_policy *policy; int (*validate)(struct nlattr **, struct nlattr **, struct netlink_ext_ack *); int (*newlink)(struct net *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *); int (*changelink)(struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *); void (*dellink)(struct net_device *, struct list_head *); size_t (*get_size)(const struct net_device *); int (*fill_info)(struct sk_buff *, const struct net_device *); size_t (*get_xstats_size)(const struct net_device *); int (*fill_xstats)(struct sk_buff *, const struct net_device *); unsigned int (*get_num_tx_queues)(); unsigned int (*get_num_rx_queues)(); unsigned int slave_maxtype; const struct nla_policy *slave_policy; int (*slave_changelink)(struct net_device *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *); size_t (*get_slave_size)(const struct net_device *, const struct net_device *); int (*fill_slave_info)(struct sk_buff *, const struct net_device *, const struct net_device *); struct net * (*get_link_net)(const struct net_device *); size_t (*get_linkxstats_size)(const struct net_device *, int); int (*fill_linkxstats)(struct sk_buff *, const struct net_device *, int *, int); }; struct udp_tunnel_nic_table_info { unsigned int n_entries; unsigned int tunnel_types; }; struct udp_tunnel_info; struct udp_tunnel_nic_shared; struct udp_tunnel_nic_info { int (*set_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *); int (*unset_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *); int (*sync_table)(struct net_device *, unsigned int); struct udp_tunnel_nic_shared *shared; unsigned int flags; struct udp_tunnel_nic_table_info tables[4]; }; enum { RTAX_UNSPEC = 0, RTAX_LOCK = 1, RTAX_MTU = 2, RTAX_WINDOW = 3, RTAX_RTT = 4, RTAX_RTTVAR = 5, RTAX_SSTHRESH = 6, RTAX_CWND = 7, RTAX_ADVMSS = 8, RTAX_REORDERING = 9, RTAX_HOPLIMIT = 10, RTAX_INITCWND = 11, RTAX_FEATURES = 12, RTAX_RTO_MIN = 13, RTAX_INITRWND = 14, RTAX_QUICKACK = 15, RTAX_CC_ALGO = 16, RTAX_FASTOPEN_NO_COOKIE = 17, __RTAX_MAX = 18, }; struct tcmsg { unsigned char tcm_family; unsigned char tcm__pad1; short unsigned int tcm__pad2; int tcm_ifindex; __u32 tcm_handle; __u32 tcm_parent; __u32 tcm_info; }; struct gnet_dump { spinlock_t *lock; struct sk_buff *skb; struct nlattr *tail; int compat_tc_stats; int compat_xstats; int padattr; void *xstats; int xstats_len; struct tc_stats tc_stats; }; struct netlink_range_validation { u64 min; u64 max; }; struct netlink_range_validation_signed { s64 min; s64 max; }; enum flow_action_hw_stats_bit { FLOW_ACTION_HW_STATS_IMMEDIATE_BIT = 0, FLOW_ACTION_HW_STATS_DELAYED_BIT = 1, FLOW_ACTION_HW_STATS_DISABLED_BIT = 2, FLOW_ACTION_HW_STATS_NUM_BITS = 3, }; struct flow_block { struct list_head cb_list; }; typedef int flow_setup_cb_t(enum tc_setup_type, void *, void *); struct qdisc_size_table { struct callback_head rcu; struct list_head list; struct tc_sizespec szopts; int refcnt; u16 data[0]; }; struct Qdisc_class_ops; struct Qdisc_ops { struct Qdisc_ops *next; const struct Qdisc_class_ops *cl_ops; char id[16]; int priv_size; unsigned int static_flags; int (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **); struct sk_buff * (*dequeue)(struct Qdisc *); struct sk_buff * (*peek)(struct Qdisc *); int (*init)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *); void (*reset)(struct Qdisc *); void (*destroy)(struct Qdisc *); int (*change)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *); void (*attach)(struct Qdisc *); int (*change_tx_queue_len)(struct Qdisc *, unsigned int); void (*change_real_num_tx)(struct Qdisc *, unsigned int); int (*dump)(struct Qdisc *, struct sk_buff *); int (*dump_stats)(struct Qdisc *, struct gnet_dump *); void (*ingress_block_set)(struct Qdisc *, u32); void (*egress_block_set)(struct Qdisc *, u32); u32 (*ingress_block_get)(struct Qdisc *); u32 (*egress_block_get)(struct Qdisc *); struct module *owner; }; struct qdisc_walker; struct tcf_block; struct Qdisc_class_ops { unsigned int flags; struct netdev_queue * (*select_queue)(struct Qdisc *, struct tcmsg *); int (*graft)(struct Qdisc *, long unsigned int, struct Qdisc *, struct Qdisc **, struct netlink_ext_ack *); struct Qdisc * (*leaf)(struct Qdisc *, long unsigned int); void (*qlen_notify)(struct Qdisc *, long unsigned int); long unsigned int (*find)(struct Qdisc *, u32); int (*change)(struct Qdisc *, u32, u32, struct nlattr **, long unsigned int *, struct netlink_ext_ack *); int (*delete)(struct Qdisc *, long unsigned int, struct netlink_ext_ack *); void (*walk)(struct Qdisc *, struct qdisc_walker *); struct tcf_block * (*tcf_block)(struct Qdisc *, long unsigned int, struct netlink_ext_ack *); long unsigned int (*bind_tcf)(struct Qdisc *, long unsigned int, u32); void (*unbind_tcf)(struct Qdisc *, long unsigned int); int (*dump)(struct Qdisc *, long unsigned int, struct sk_buff *, struct tcmsg *); int (*dump_stats)(struct Qdisc *, long unsigned int, struct gnet_dump *); }; struct tcf_chain; struct tcf_block { struct mutex lock; struct list_head chain_list; u32 index; u32 classid; refcount_t refcnt; struct net *net; struct Qdisc *q; struct rw_semaphore cb_lock; struct flow_block flow_block; struct list_head owner_list; bool keep_dst; atomic_t offloadcnt; unsigned int nooffloaddevcnt; unsigned int lockeddevcnt; struct { struct tcf_chain *chain; struct list_head filter_chain_list; } chain0; struct callback_head rcu; struct hlist_head proto_destroy_ht[128]; struct mutex proto_destroy_lock; }; struct tcf_result; struct tcf_proto_ops; struct tcf_proto { struct tcf_proto *next; void *root; int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *); __be16 protocol; u32 prio; void *data; const struct tcf_proto_ops *ops; struct tcf_chain *chain; spinlock_t lock; bool deleting; refcount_t refcnt; struct callback_head rcu; struct hlist_node destroy_ht_node; }; struct tcf_result { union { struct { long unsigned int class; u32 classid; }; const struct tcf_proto *goto_tp; struct { bool ingress; struct gnet_stats_queue *qstats; }; }; }; struct tcf_walker; struct tcf_proto_ops { struct list_head head; char kind[16]; int (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *); int (*init)(struct tcf_proto *); void (*destroy)(struct tcf_proto *, bool, struct netlink_ext_ack *); void * (*get)(struct tcf_proto *, u32); void (*put)(struct tcf_proto *, void *); int (*change)(struct net *, struct sk_buff *, struct tcf_proto *, long unsigned int, u32, struct nlattr **, void **, u32, struct netlink_ext_ack *); int (*delete)(struct tcf_proto *, void *, bool *, bool, struct netlink_ext_ack *); bool (*delete_empty)(struct tcf_proto *); void (*walk)(struct tcf_proto *, struct tcf_walker *, bool); int (*reoffload)(struct tcf_proto *, bool, flow_setup_cb_t *, void *, struct netlink_ext_ack *); void (*hw_add)(struct tcf_proto *, void *); void (*hw_del)(struct tcf_proto *, void *); void (*bind_class)(void *, u32, long unsigned int, void *, long unsigned int); void * (*tmplt_create)(struct net *, struct tcf_chain *, struct nlattr **, struct netlink_ext_ack *); void (*tmplt_destroy)(void *); int (*dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool); int (*terse_dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool); int (*tmplt_dump)(struct sk_buff *, struct net *, void *); struct module *owner; int flags; }; struct tcf_chain { struct mutex filter_chain_lock; struct tcf_proto *filter_chain; struct list_head list; struct tcf_block *block; u32 index; unsigned int refcnt; unsigned int action_refcnt; bool explicitly_created; bool flushing; const struct tcf_proto_ops *tmplt_ops; void *tmplt_priv; struct callback_head rcu; }; struct sock_fprog_kern { u16 len; struct sock_filter *filter; }; struct bpf_prog_stats { u64_stats_t cnt; u64_stats_t nsecs; u64_stats_t misses; struct u64_stats_sync syncp; long: 64; }; struct sk_filter { refcount_t refcnt; struct callback_head rcu; struct bpf_prog *prog; }; enum { NEIGH_VAR_MCAST_PROBES = 0, NEIGH_VAR_UCAST_PROBES = 1, NEIGH_VAR_APP_PROBES = 2, NEIGH_VAR_MCAST_REPROBES = 3, NEIGH_VAR_RETRANS_TIME = 4, NEIGH_VAR_BASE_REACHABLE_TIME = 5, NEIGH_VAR_DELAY_PROBE_TIME = 6, NEIGH_VAR_GC_STALETIME = 7, NEIGH_VAR_QUEUE_LEN_BYTES = 8, NEIGH_VAR_PROXY_QLEN = 9, NEIGH_VAR_ANYCAST_DELAY = 10, NEIGH_VAR_PROXY_DELAY = 11, NEIGH_VAR_LOCKTIME = 12, NEIGH_VAR_QUEUE_LEN = 13, NEIGH_VAR_RETRANS_TIME_MS = 14, NEIGH_VAR_BASE_REACHABLE_TIME_MS = 15, NEIGH_VAR_GC_INTERVAL = 16, NEIGH_VAR_GC_THRESH1 = 17, NEIGH_VAR_GC_THRESH2 = 18, NEIGH_VAR_GC_THRESH3 = 19, NEIGH_VAR_MAX = 20, }; struct pneigh_entry; struct neigh_statistics; struct neigh_hash_table; struct neigh_table { int family; unsigned int entry_size; unsigned int key_len; __be16 protocol; __u32 (*hash)(const void *, const struct net_device *, __u32 *); bool (*key_eq)(const struct neighbour *, const void *); int (*constructor)(struct neighbour *); int (*pconstructor)(struct pneigh_entry *); void (*pdestructor)(struct pneigh_entry *); void (*proxy_redo)(struct sk_buff *); int (*is_multicast)(const void *); bool (*allow_add)(const struct net_device *, struct netlink_ext_ack *); char *id; struct neigh_parms parms; struct list_head parms_list; int gc_interval; int gc_thresh1; int gc_thresh2; int gc_thresh3; long unsigned int last_flush; struct delayed_work gc_work; struct delayed_work managed_work; struct timer_list proxy_timer; struct sk_buff_head proxy_queue; atomic_t entries; atomic_t gc_entries; struct list_head gc_list; struct list_head managed_list; rwlock_t lock; long unsigned int last_rand; struct neigh_statistics *stats; struct neigh_hash_table *nht; struct pneigh_entry **phash_buckets; }; struct neigh_statistics { long unsigned int allocs; long unsigned int destroys; long unsigned int hash_grows; long unsigned int res_failed; long unsigned int lookups; long unsigned int hits; long unsigned int rcv_probes_mcast; long unsigned int rcv_probes_ucast; long unsigned int periodic_gc_runs; long unsigned int forced_gc_runs; long unsigned int unres_discards; long unsigned int table_fulls; }; struct neigh_ops { int family; void (*solicit)(struct neighbour *, struct sk_buff *); void (*error_report)(struct neighbour *, struct sk_buff *); int (*output)(struct neighbour *, struct sk_buff *); int (*connected_output)(struct neighbour *, struct sk_buff *); }; struct pneigh_entry { struct pneigh_entry *next; possible_net_t net; struct net_device *dev; netdevice_tracker dev_tracker; u32 flags; u8 protocol; u8 key[0]; }; struct neigh_hash_table { struct neighbour **hash_buckets; unsigned int hash_shift; __u32 hash_rnd[4]; struct callback_head rcu; }; enum { TCP_ESTABLISHED = 1, TCP_SYN_SENT = 2, TCP_SYN_RECV = 3, TCP_FIN_WAIT1 = 4, TCP_FIN_WAIT2 = 5, TCP_TIME_WAIT = 6, TCP_CLOSE = 7, TCP_CLOSE_WAIT = 8, TCP_LAST_ACK = 9, TCP_LISTEN = 10, TCP_CLOSING = 11, TCP_NEW_SYN_RECV = 12, TCP_MAX_STATES = 13, }; struct smc_hashinfo; struct sk_psock; struct request_sock_ops; struct timewait_sock_ops; struct udp_table; struct raw_hashinfo; struct proto { void (*close)(struct sock *, long int); int (*pre_connect)(struct sock *, struct sockaddr *, int); int (*connect)(struct sock *, struct sockaddr *, int); int (*disconnect)(struct sock *, int); struct sock * (*accept)(struct sock *, int, int *, bool); int (*ioctl)(struct sock *, int, long unsigned int); int (*init)(struct sock *); void (*destroy)(struct sock *); void (*shutdown)(struct sock *, int); int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int); int (*getsockopt)(struct sock *, int, int, char *, int *); void (*keepalive)(struct sock *, int); int (*sendmsg)(struct sock *, struct msghdr *, size_t); int (*recvmsg)(struct sock *, struct msghdr *, size_t, int, int, int *); int (*sendpage)(struct sock *, struct page *, int, size_t, int); int (*bind)(struct sock *, struct sockaddr *, int); int (*bind_add)(struct sock *, struct sockaddr *, int); int (*backlog_rcv)(struct sock *, struct sk_buff *); bool (*bpf_bypass_getsockopt)(int, int); void (*release_cb)(struct sock *); int (*hash)(struct sock *); void (*unhash)(struct sock *); void (*rehash)(struct sock *); int (*get_port)(struct sock *, short unsigned int); int (*psock_update_sk_prot)(struct sock *, struct sk_psock *, bool); unsigned int inuse_idx; bool (*stream_memory_free)(const struct sock *, int); bool (*sock_is_readable)(struct sock *); void (*enter_memory_pressure)(struct sock *); void (*leave_memory_pressure)(struct sock *); atomic_long_t *memory_allocated; struct percpu_counter *sockets_allocated; long unsigned int *memory_pressure; long int *sysctl_mem; int *sysctl_wmem; int *sysctl_rmem; u32 sysctl_wmem_offset; u32 sysctl_rmem_offset; int max_header; bool no_autobind; struct kmem_cache *slab; unsigned int obj_size; slab_flags_t slab_flags; unsigned int useroffset; unsigned int usersize; unsigned int *orphan_count; struct request_sock_ops *rsk_prot; struct timewait_sock_ops *twsk_prot; union { struct inet_hashinfo *hashinfo; struct udp_table *udp_table; struct raw_hashinfo *raw_hash; struct smc_hashinfo *smc_hash; } h; struct module *owner; char name[32]; struct list_head node; int (*diag_destroy)(struct sock *, int); }; struct request_sock; struct request_sock_ops { int family; unsigned int obj_size; struct kmem_cache *slab; char *slab_name; int (*rtx_syn_ack)(const struct sock *, struct request_sock *); void (*send_ack)(const struct sock *, struct sk_buff *, struct request_sock *); void (*send_reset)(const struct sock *, struct sk_buff *); void (*destructor)(struct request_sock *); void (*syn_ack_timeout)(const struct request_sock *); }; struct timewait_sock_ops { struct kmem_cache *twsk_slab; char *twsk_slab_name; unsigned int twsk_obj_size; int (*twsk_unique)(struct sock *, struct sock *, void *); void (*twsk_destructor)(struct sock *); }; struct saved_syn; struct request_sock { struct sock_common __req_common; struct request_sock *dl_next; u16 mss; u8 num_retrans; u8 syncookie: 1; u8 num_timeout: 7; u32 ts_recent; struct timer_list rsk_timer; const struct request_sock_ops *rsk_ops; struct sock *sk; struct saved_syn *saved_syn; u32 secid; u32 peer_secid; }; struct saved_syn { u32 mac_hdrlen; u32 network_hdrlen; u32 tcp_hdrlen; u8 data[0]; }; enum tsq_enum { TSQ_THROTTLED = 0, TSQ_QUEUED = 1, TCP_TSQ_DEFERRED = 2, TCP_WRITE_TIMER_DEFERRED = 3, TCP_DELACK_TIMER_DEFERRED = 4, TCP_MTU_REDUCED_DEFERRED = 5, }; struct ip6_sf_list { struct ip6_sf_list *sf_next; struct in6_addr sf_addr; long unsigned int sf_count[2]; unsigned char sf_gsresp; unsigned char sf_oldin; unsigned char sf_crcount; struct callback_head rcu; }; struct ifmcaddr6 { struct in6_addr mca_addr; struct inet6_dev *idev; struct ifmcaddr6 *next; struct ip6_sf_list *mca_sources; struct ip6_sf_list *mca_tomb; unsigned int mca_sfmode; unsigned char mca_crcount; long unsigned int mca_sfcount[2]; struct delayed_work mca_work; unsigned int mca_flags; int mca_users; refcount_t mca_refcnt; long unsigned int mca_cstamp; long unsigned int mca_tstamp; struct callback_head rcu; }; struct ifacaddr6 { struct in6_addr aca_addr; struct fib6_info *aca_rt; struct ifacaddr6 *aca_next; struct hlist_node aca_addr_lst; int aca_users; refcount_t aca_refcnt; long unsigned int aca_cstamp; long unsigned int aca_tstamp; struct callback_head rcu; }; enum { __ND_OPT_PREFIX_INFO_END = 0, ND_OPT_SOURCE_LL_ADDR = 1, ND_OPT_TARGET_LL_ADDR = 2, ND_OPT_PREFIX_INFO = 3, ND_OPT_REDIRECT_HDR = 4, ND_OPT_MTU = 5, ND_OPT_NONCE = 14, __ND_OPT_ARRAY_MAX = 15, ND_OPT_ROUTE_INFO = 24, ND_OPT_RDNSS = 25, ND_OPT_DNSSL = 31, ND_OPT_6CO = 34, ND_OPT_CAPTIVE_PORTAL = 37, ND_OPT_PREF64 = 38, __ND_OPT_MAX = 39, }; struct nd_opt_hdr { __u8 nd_opt_type; __u8 nd_opt_len; }; struct ndisc_options { struct nd_opt_hdr *nd_opt_array[15]; struct nd_opt_hdr *nd_useropts; struct nd_opt_hdr *nd_useropts_end; }; struct prefix_info { __u8 type; __u8 length; __u8 prefix_len; __u8 reserved: 6; __u8 autoconf: 1; __u8 onlink: 1; __be32 valid; __be32 prefered; __be32 reserved2; struct in6_addr prefix; }; enum nfs_opnum4 { OP_ACCESS = 3, OP_CLOSE = 4, OP_COMMIT = 5, OP_CREATE = 6, OP_DELEGPURGE = 7, OP_DELEGRETURN = 8, OP_GETATTR = 9, OP_GETFH = 10, OP_LINK = 11, OP_LOCK = 12, OP_LOCKT = 13, OP_LOCKU = 14, OP_LOOKUP = 15, OP_LOOKUPP = 16, OP_NVERIFY = 17, OP_OPEN = 18, OP_OPENATTR = 19, OP_OPEN_CONFIRM = 20, OP_OPEN_DOWNGRADE = 21, OP_PUTFH = 22, OP_PUTPUBFH = 23, OP_PUTROOTFH = 24, OP_READ = 25, OP_READDIR = 26, OP_READLINK = 27, OP_REMOVE = 28, OP_RENAME = 29, OP_RENEW = 30, OP_RESTOREFH = 31, OP_SAVEFH = 32, OP_SECINFO = 33, OP_SETATTR = 34, OP_SETCLIENTID = 35, OP_SETCLIENTID_CONFIRM = 36, OP_VERIFY = 37, OP_WRITE = 38, OP_RELEASE_LOCKOWNER = 39, OP_BACKCHANNEL_CTL = 40, OP_BIND_CONN_TO_SESSION = 41, OP_EXCHANGE_ID = 42, OP_CREATE_SESSION = 43, OP_DESTROY_SESSION = 44, OP_FREE_STATEID = 45, OP_GET_DIR_DELEGATION = 46, OP_GETDEVICEINFO = 47, OP_GETDEVICELIST = 48, OP_LAYOUTCOMMIT = 49, OP_LAYOUTGET = 50, OP_LAYOUTRETURN = 51, OP_SECINFO_NO_NAME = 52, OP_SEQUENCE = 53, OP_SET_SSV = 54, OP_TEST_STATEID = 55, OP_WANT_DELEGATION = 56, OP_DESTROY_CLIENTID = 57, OP_RECLAIM_COMPLETE = 58, OP_ALLOCATE = 59, OP_COPY = 60, OP_COPY_NOTIFY = 61, OP_DEALLOCATE = 62, OP_IO_ADVISE = 63, OP_LAYOUTERROR = 64, OP_LAYOUTSTATS = 65, OP_OFFLOAD_CANCEL = 66, OP_OFFLOAD_STATUS = 67, OP_READ_PLUS = 68, OP_SEEK = 69, OP_WRITE_SAME = 70, OP_CLONE = 71, OP_GETXATTR = 72, OP_SETXATTR = 73, OP_LISTXATTRS = 74, OP_REMOVEXATTR = 75, OP_ILLEGAL = 10044, }; enum perf_branch_sample_type_shift { PERF_SAMPLE_BRANCH_USER_SHIFT = 0, PERF_SAMPLE_BRANCH_KERNEL_SHIFT = 1, PERF_SAMPLE_BRANCH_HV_SHIFT = 2, PERF_SAMPLE_BRANCH_ANY_SHIFT = 3, PERF_SAMPLE_BRANCH_ANY_CALL_SHIFT = 4, PERF_SAMPLE_BRANCH_ANY_RETURN_SHIFT = 5, PERF_SAMPLE_BRANCH_IND_CALL_SHIFT = 6, PERF_SAMPLE_BRANCH_ABORT_TX_SHIFT = 7, PERF_SAMPLE_BRANCH_IN_TX_SHIFT = 8, PERF_SAMPLE_BRANCH_NO_TX_SHIFT = 9, PERF_SAMPLE_BRANCH_COND_SHIFT = 10, PERF_SAMPLE_BRANCH_CALL_STACK_SHIFT = 11, PERF_SAMPLE_BRANCH_IND_JUMP_SHIFT = 12, PERF_SAMPLE_BRANCH_CALL_SHIFT = 13, PERF_SAMPLE_BRANCH_NO_FLAGS_SHIFT = 14, PERF_SAMPLE_BRANCH_NO_CYCLES_SHIFT = 15, PERF_SAMPLE_BRANCH_TYPE_SAVE_SHIFT = 16, PERF_SAMPLE_BRANCH_HW_INDEX_SHIFT = 17, PERF_SAMPLE_BRANCH_MAX_SHIFT = 18, }; enum exception_stack_ordering { ESTACK_DF = 0, ESTACK_NMI = 1, ESTACK_DB = 2, ESTACK_MCE = 3, ESTACK_VC = 4, ESTACK_VC2 = 5, N_EXCEPTION_STACKS = 6, }; enum { TSK_TRACE_FL_TRACE_BIT = 0, TSK_TRACE_FL_GRAPH_BIT = 1, }; struct uuidcmp { const char *uuid; int len; }; typedef __u16 __le16; typedef __u32 __le32; typedef __u64 __le64; struct minix_super_block { __u16 s_ninodes; __u16 s_nzones; __u16 s_imap_blocks; __u16 s_zmap_blocks; __u16 s_firstdatazone; __u16 s_log_zone_size; __u32 s_max_size; __u16 s_magic; __u16 s_state; __u32 s_zones; }; struct romfs_super_block { __be32 word0; __be32 word1; __be32 size; __be32 checksum; char name[0]; }; struct cramfs_inode { __u32 mode: 16; __u32 uid: 16; __u32 size: 24; __u32 gid: 8; __u32 namelen: 6; __u32 offset: 26; }; struct cramfs_info { __u32 crc; __u32 edition; __u32 blocks; __u32 files; }; struct cramfs_super { __u32 magic; __u32 size; __u32 flags; __u32 future; __u8 signature[16]; struct cramfs_info fsid; __u8 name[16]; struct cramfs_inode root; }; struct squashfs_super_block { __le32 s_magic; __le32 inodes; __le32 mkfs_time; __le32 block_size; __le32 fragments; __le16 compression; __le16 block_log; __le16 flags; __le16 no_ids; __le16 s_major; __le16 s_minor; __le64 root_inode; __le64 bytes_used; __le64 id_table_start; __le64 xattr_id_table_start; __le64 inode_table_start; __le64 directory_table_start; __le64 fragment_table_start; __le64 lookup_table_start; }; typedef int (*decompress_fn)(unsigned char *, long int, long int (*)(void *, long unsigned int), long int (*)(void *, long unsigned int), unsigned char *, long int *, void (*)(char *)); enum umh_disable_depth { UMH_ENABLED = 0, UMH_FREEZING = 1, UMH_DISABLED = 2, }; enum { HI_SOFTIRQ = 0, TIMER_SOFTIRQ = 1, NET_TX_SOFTIRQ = 2, NET_RX_SOFTIRQ = 3, BLOCK_SOFTIRQ = 4, IRQ_POLL_SOFTIRQ = 5, TASKLET_SOFTIRQ = 6, SCHED_SOFTIRQ = 7, HRTIMER_SOFTIRQ = 8, RCU_SOFTIRQ = 9, NR_SOFTIRQS = 10, }; enum ucount_type { UCOUNT_USER_NAMESPACES = 0, UCOUNT_PID_NAMESPACES = 1, UCOUNT_UTS_NAMESPACES = 2, UCOUNT_IPC_NAMESPACES = 3, UCOUNT_NET_NAMESPACES = 4, UCOUNT_MNT_NAMESPACES = 5, UCOUNT_CGROUP_NAMESPACES = 6, UCOUNT_TIME_NAMESPACES = 7, UCOUNT_INOTIFY_INSTANCES = 8, UCOUNT_INOTIFY_WATCHES = 9, UCOUNT_FANOTIFY_GROUPS = 10, UCOUNT_FANOTIFY_MARKS = 11, UCOUNT_RLIMIT_NPROC = 12, UCOUNT_RLIMIT_MSGQUEUE = 13, UCOUNT_RLIMIT_SIGPENDING = 14, UCOUNT_RLIMIT_MEMLOCK = 15, UCOUNT_COUNTS = 16, }; enum flow_dissector_key_id { FLOW_DISSECTOR_KEY_CONTROL = 0, FLOW_DISSECTOR_KEY_BASIC = 1, FLOW_DISSECTOR_KEY_IPV4_ADDRS = 2, FLOW_DISSECTOR_KEY_IPV6_ADDRS = 3, FLOW_DISSECTOR_KEY_PORTS = 4, FLOW_DISSECTOR_KEY_PORTS_RANGE = 5, FLOW_DISSECTOR_KEY_ICMP = 6, FLOW_DISSECTOR_KEY_ETH_ADDRS = 7, FLOW_DISSECTOR_KEY_TIPC = 8, FLOW_DISSECTOR_KEY_ARP = 9, FLOW_DISSECTOR_KEY_VLAN = 10, FLOW_DISSECTOR_KEY_FLOW_LABEL = 11, FLOW_DISSECTOR_KEY_GRE_KEYID = 12, FLOW_DISSECTOR_KEY_MPLS_ENTROPY = 13, FLOW_DISSECTOR_KEY_ENC_KEYID = 14, FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS = 15, FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS = 16, FLOW_DISSECTOR_KEY_ENC_CONTROL = 17, FLOW_DISSECTOR_KEY_ENC_PORTS = 18, FLOW_DISSECTOR_KEY_MPLS = 19, FLOW_DISSECTOR_KEY_TCP = 20, FLOW_DISSECTOR_KEY_IP = 21, FLOW_DISSECTOR_KEY_CVLAN = 22, FLOW_DISSECTOR_KEY_ENC_IP = 23, FLOW_DISSECTOR_KEY_ENC_OPTS = 24, FLOW_DISSECTOR_KEY_META = 25, FLOW_DISSECTOR_KEY_CT = 26, FLOW_DISSECTOR_KEY_HASH = 27, FLOW_DISSECTOR_KEY_MAX = 28, }; enum { IPSTATS_MIB_NUM = 0, IPSTATS_MIB_INPKTS = 1, IPSTATS_MIB_INOCTETS = 2, IPSTATS_MIB_INDELIVERS = 3, IPSTATS_MIB_OUTFORWDATAGRAMS = 4, IPSTATS_MIB_OUTPKTS = 5, IPSTATS_MIB_OUTOCTETS = 6, IPSTATS_MIB_INHDRERRORS = 7, IPSTATS_MIB_INTOOBIGERRORS = 8, IPSTATS_MIB_INNOROUTES = 9, IPSTATS_MIB_INADDRERRORS = 10, IPSTATS_MIB_INUNKNOWNPROTOS = 11, IPSTATS_MIB_INTRUNCATEDPKTS = 12, IPSTATS_MIB_INDISCARDS = 13, IPSTATS_MIB_OUTDISCARDS = 14, IPSTATS_MIB_OUTNOROUTES = 15, IPSTATS_MIB_REASMTIMEOUT = 16, IPSTATS_MIB_REASMREQDS = 17, IPSTATS_MIB_REASMOKS = 18, IPSTATS_MIB_REASMFAILS = 19, IPSTATS_MIB_FRAGOKS = 20, IPSTATS_MIB_FRAGFAILS = 21, IPSTATS_MIB_FRAGCREATES = 22, IPSTATS_MIB_INMCASTPKTS = 23, IPSTATS_MIB_OUTMCASTPKTS = 24, IPSTATS_MIB_INBCASTPKTS = 25, IPSTATS_MIB_OUTBCASTPKTS = 26, IPSTATS_MIB_INMCASTOCTETS = 27, IPSTATS_MIB_OUTMCASTOCTETS = 28, IPSTATS_MIB_INBCASTOCTETS = 29, IPSTATS_MIB_OUTBCASTOCTETS = 30, IPSTATS_MIB_CSUMERRORS = 31, IPSTATS_MIB_NOECTPKTS = 32, IPSTATS_MIB_ECT1PKTS = 33, IPSTATS_MIB_ECT0PKTS = 34, IPSTATS_MIB_CEPKTS = 35, IPSTATS_MIB_REASM_OVERLAPS = 36, __IPSTATS_MIB_MAX = 37, }; enum { ICMP_MIB_NUM = 0, ICMP_MIB_INMSGS = 1, ICMP_MIB_INERRORS = 2, ICMP_MIB_INDESTUNREACHS = 3, ICMP_MIB_INTIMEEXCDS = 4, ICMP_MIB_INPARMPROBS = 5, ICMP_MIB_INSRCQUENCHS = 6, ICMP_MIB_INREDIRECTS = 7, ICMP_MIB_INECHOS = 8, ICMP_MIB_INECHOREPS = 9, ICMP_MIB_INTIMESTAMPS = 10, ICMP_MIB_INTIMESTAMPREPS = 11, ICMP_MIB_INADDRMASKS = 12, ICMP_MIB_INADDRMASKREPS = 13, ICMP_MIB_OUTMSGS = 14, ICMP_MIB_OUTERRORS = 15, ICMP_MIB_OUTDESTUNREACHS = 16, ICMP_MIB_OUTTIMEEXCDS = 17, ICMP_MIB_OUTPARMPROBS = 18, ICMP_MIB_OUTSRCQUENCHS = 19, ICMP_MIB_OUTREDIRECTS = 20, ICMP_MIB_OUTECHOS = 21, ICMP_MIB_OUTECHOREPS = 22, ICMP_MIB_OUTTIMESTAMPS = 23, ICMP_MIB_OUTTIMESTAMPREPS = 24, ICMP_MIB_OUTADDRMASKS = 25, ICMP_MIB_OUTADDRMASKREPS = 26, ICMP_MIB_CSUMERRORS = 27, __ICMP_MIB_MAX = 28, }; enum { ICMP6_MIB_NUM = 0, ICMP6_MIB_INMSGS = 1, ICMP6_MIB_INERRORS = 2, ICMP6_MIB_OUTMSGS = 3, ICMP6_MIB_OUTERRORS = 4, ICMP6_MIB_CSUMERRORS = 5, __ICMP6_MIB_MAX = 6, }; enum { TCP_MIB_NUM = 0, TCP_MIB_RTOALGORITHM = 1, TCP_MIB_RTOMIN = 2, TCP_MIB_RTOMAX = 3, TCP_MIB_MAXCONN = 4, TCP_MIB_ACTIVEOPENS = 5, TCP_MIB_PASSIVEOPENS = 6, TCP_MIB_ATTEMPTFAILS = 7, TCP_MIB_ESTABRESETS = 8, TCP_MIB_CURRESTAB = 9, TCP_MIB_INSEGS = 10, TCP_MIB_OUTSEGS = 11, TCP_MIB_RETRANSSEGS = 12, TCP_MIB_INERRS = 13, TCP_MIB_OUTRSTS = 14, TCP_MIB_CSUMERRORS = 15, __TCP_MIB_MAX = 16, }; enum { UDP_MIB_NUM = 0, UDP_MIB_INDATAGRAMS = 1, UDP_MIB_NOPORTS = 2, UDP_MIB_INERRORS = 3, UDP_MIB_OUTDATAGRAMS = 4, UDP_MIB_RCVBUFERRORS = 5, UDP_MIB_SNDBUFERRORS = 6, UDP_MIB_CSUMERRORS = 7, UDP_MIB_IGNOREDMULTI = 8, UDP_MIB_MEMERRORS = 9, __UDP_MIB_MAX = 10, }; enum { LINUX_MIB_NUM = 0, LINUX_MIB_SYNCOOKIESSENT = 1, LINUX_MIB_SYNCOOKIESRECV = 2, LINUX_MIB_SYNCOOKIESFAILED = 3, LINUX_MIB_EMBRYONICRSTS = 4, LINUX_MIB_PRUNECALLED = 5, LINUX_MIB_RCVPRUNED = 6, LINUX_MIB_OFOPRUNED = 7, LINUX_MIB_OUTOFWINDOWICMPS = 8, LINUX_MIB_LOCKDROPPEDICMPS = 9, LINUX_MIB_ARPFILTER = 10, LINUX_MIB_TIMEWAITED = 11, LINUX_MIB_TIMEWAITRECYCLED = 12, LINUX_MIB_TIMEWAITKILLED = 13, LINUX_MIB_PAWSACTIVEREJECTED = 14, LINUX_MIB_PAWSESTABREJECTED = 15, LINUX_MIB_DELAYEDACKS = 16, LINUX_MIB_DELAYEDACKLOCKED = 17, LINUX_MIB_DELAYEDACKLOST = 18, LINUX_MIB_LISTENOVERFLOWS = 19, LINUX_MIB_LISTENDROPS = 20, LINUX_MIB_TCPHPHITS = 21, LINUX_MIB_TCPPUREACKS = 22, LINUX_MIB_TCPHPACKS = 23, LINUX_MIB_TCPRENORECOVERY = 24, LINUX_MIB_TCPSACKRECOVERY = 25, LINUX_MIB_TCPSACKRENEGING = 26, LINUX_MIB_TCPSACKREORDER = 27, LINUX_MIB_TCPRENOREORDER = 28, LINUX_MIB_TCPTSREORDER = 29, LINUX_MIB_TCPFULLUNDO = 30, LINUX_MIB_TCPPARTIALUNDO = 31, LINUX_MIB_TCPDSACKUNDO = 32, LINUX_MIB_TCPLOSSUNDO = 33, LINUX_MIB_TCPLOSTRETRANSMIT = 34, LINUX_MIB_TCPRENOFAILURES = 35, LINUX_MIB_TCPSACKFAILURES = 36, LINUX_MIB_TCPLOSSFAILURES = 37, LINUX_MIB_TCPFASTRETRANS = 38, LINUX_MIB_TCPSLOWSTARTRETRANS = 39, LINUX_MIB_TCPTIMEOUTS = 40, LINUX_MIB_TCPLOSSPROBES = 41, LINUX_MIB_TCPLOSSPROBERECOVERY = 42, LINUX_MIB_TCPRENORECOVERYFAIL = 43, LINUX_MIB_TCPSACKRECOVERYFAIL = 44, LINUX_MIB_TCPRCVCOLLAPSED = 45, LINUX_MIB_TCPDSACKOLDSENT = 46, LINUX_MIB_TCPDSACKOFOSENT = 47, LINUX_MIB_TCPDSACKRECV = 48, LINUX_MIB_TCPDSACKOFORECV = 49, LINUX_MIB_TCPABORTONDATA = 50, LINUX_MIB_TCPABORTONCLOSE = 51, LINUX_MIB_TCPABORTONMEMORY = 52, LINUX_MIB_TCPABORTONTIMEOUT = 53, LINUX_MIB_TCPABORTONLINGER = 54, LINUX_MIB_TCPABORTFAILED = 55, LINUX_MIB_TCPMEMORYPRESSURES = 56, LINUX_MIB_TCPMEMORYPRESSURESCHRONO = 57, LINUX_MIB_TCPSACKDISCARD = 58, LINUX_MIB_TCPDSACKIGNOREDOLD = 59, LINUX_MIB_TCPDSACKIGNOREDNOUNDO = 60, LINUX_MIB_TCPSPURIOUSRTOS = 61, LINUX_MIB_TCPMD5NOTFOUND = 62, LINUX_MIB_TCPMD5UNEXPECTED = 63, LINUX_MIB_TCPMD5FAILURE = 64, LINUX_MIB_SACKSHIFTED = 65, LINUX_MIB_SACKMERGED = 66, LINUX_MIB_SACKSHIFTFALLBACK = 67, LINUX_MIB_TCPBACKLOGDROP = 68, LINUX_MIB_PFMEMALLOCDROP = 69, LINUX_MIB_TCPMINTTLDROP = 70, LINUX_MIB_TCPDEFERACCEPTDROP = 71, LINUX_MIB_IPRPFILTER = 72, LINUX_MIB_TCPTIMEWAITOVERFLOW = 73, LINUX_MIB_TCPREQQFULLDOCOOKIES = 74, LINUX_MIB_TCPREQQFULLDROP = 75, LINUX_MIB_TCPRETRANSFAIL = 76, LINUX_MIB_TCPRCVCOALESCE = 77, LINUX_MIB_TCPBACKLOGCOALESCE = 78, LINUX_MIB_TCPOFOQUEUE = 79, LINUX_MIB_TCPOFODROP = 80, LINUX_MIB_TCPOFOMERGE = 81, LINUX_MIB_TCPCHALLENGEACK = 82, LINUX_MIB_TCPSYNCHALLENGE = 83, LINUX_MIB_TCPFASTOPENACTIVE = 84, LINUX_MIB_TCPFASTOPENACTIVEFAIL = 85, LINUX_MIB_TCPFASTOPENPASSIVE = 86, LINUX_MIB_TCPFASTOPENPASSIVEFAIL = 87, LINUX_MIB_TCPFASTOPENLISTENOVERFLOW = 88, LINUX_MIB_TCPFASTOPENCOOKIEREQD = 89, LINUX_MIB_TCPFASTOPENBLACKHOLE = 90, LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES = 91, LINUX_MIB_BUSYPOLLRXPACKETS = 92, LINUX_MIB_TCPAUTOCORKING = 93, LINUX_MIB_TCPFROMZEROWINDOWADV = 94, LINUX_MIB_TCPTOZEROWINDOWADV = 95, LINUX_MIB_TCPWANTZEROWINDOWADV = 96, LINUX_MIB_TCPSYNRETRANS = 97, LINUX_MIB_TCPORIGDATASENT = 98, LINUX_MIB_TCPHYSTARTTRAINDETECT = 99, LINUX_MIB_TCPHYSTARTTRAINCWND = 100, LINUX_MIB_TCPHYSTARTDELAYDETECT = 101, LINUX_MIB_TCPHYSTARTDELAYCWND = 102, LINUX_MIB_TCPACKSKIPPEDSYNRECV = 103, LINUX_MIB_TCPACKSKIPPEDPAWS = 104, LINUX_MIB_TCPACKSKIPPEDSEQ = 105, LINUX_MIB_TCPACKSKIPPEDFINWAIT2 = 106, LINUX_MIB_TCPACKSKIPPEDTIMEWAIT = 107, LINUX_MIB_TCPACKSKIPPEDCHALLENGE = 108, LINUX_MIB_TCPWINPROBE = 109, LINUX_MIB_TCPKEEPALIVE = 110, LINUX_MIB_TCPMTUPFAIL = 111, LINUX_MIB_TCPMTUPSUCCESS = 112, LINUX_MIB_TCPDELIVERED = 113, LINUX_MIB_TCPDELIVEREDCE = 114, LINUX_MIB_TCPACKCOMPRESSED = 115, LINUX_MIB_TCPZEROWINDOWDROP = 116, LINUX_MIB_TCPRCVQDROP = 117, LINUX_MIB_TCPWQUEUETOOBIG = 118, LINUX_MIB_TCPFASTOPENPASSIVEALTKEY = 119, LINUX_MIB_TCPTIMEOUTREHASH = 120, LINUX_MIB_TCPDUPLICATEDATAREHASH = 121, LINUX_MIB_TCPDSACKRECVSEGS = 122, LINUX_MIB_TCPDSACKIGNOREDDUBIOUS = 123, LINUX_MIB_TCPMIGRATEREQSUCCESS = 124, LINUX_MIB_TCPMIGRATEREQFAILURE = 125, __LINUX_MIB_MAX = 126, }; enum { LINUX_MIB_XFRMNUM = 0, LINUX_MIB_XFRMINERROR = 1, LINUX_MIB_XFRMINBUFFERERROR = 2, LINUX_MIB_XFRMINHDRERROR = 3, LINUX_MIB_XFRMINNOSTATES = 4, LINUX_MIB_XFRMINSTATEPROTOERROR = 5, LINUX_MIB_XFRMINSTATEMODEERROR = 6, LINUX_MIB_XFRMINSTATESEQERROR = 7, LINUX_MIB_XFRMINSTATEEXPIRED = 8, LINUX_MIB_XFRMINSTATEMISMATCH = 9, LINUX_MIB_XFRMINSTATEINVALID = 10, LINUX_MIB_XFRMINTMPLMISMATCH = 11, LINUX_MIB_XFRMINNOPOLS = 12, LINUX_MIB_XFRMINPOLBLOCK = 13, LINUX_MIB_XFRMINPOLERROR = 14, LINUX_MIB_XFRMOUTERROR = 15, LINUX_MIB_XFRMOUTBUNDLEGENERROR = 16, LINUX_MIB_XFRMOUTBUNDLECHECKERROR = 17, LINUX_MIB_XFRMOUTNOSTATES = 18, LINUX_MIB_XFRMOUTSTATEPROTOERROR = 19, LINUX_MIB_XFRMOUTSTATEMODEERROR = 20, LINUX_MIB_XFRMOUTSTATESEQERROR = 21, LINUX_MIB_XFRMOUTSTATEEXPIRED = 22, LINUX_MIB_XFRMOUTPOLBLOCK = 23, LINUX_MIB_XFRMOUTPOLDEAD = 24, LINUX_MIB_XFRMOUTPOLERROR = 25, LINUX_MIB_XFRMFWDHDRERROR = 26, LINUX_MIB_XFRMOUTSTATEINVALID = 27, LINUX_MIB_XFRMACQUIREERROR = 28, __LINUX_MIB_XFRMMAX = 29, }; enum { LINUX_MIB_TLSNUM = 0, LINUX_MIB_TLSCURRTXSW = 1, LINUX_MIB_TLSCURRRXSW = 2, LINUX_MIB_TLSCURRTXDEVICE = 3, LINUX_MIB_TLSCURRRXDEVICE = 4, LINUX_MIB_TLSTXSW = 5, LINUX_MIB_TLSRXSW = 6, LINUX_MIB_TLSTXDEVICE = 7, LINUX_MIB_TLSRXDEVICE = 8, LINUX_MIB_TLSDECRYPTERROR = 9, LINUX_MIB_TLSRXDEVICERESYNC = 10, __LINUX_MIB_TLSMAX = 11, }; enum nf_inet_hooks { NF_INET_PRE_ROUTING = 0, NF_INET_LOCAL_IN = 1, NF_INET_FORWARD = 2, NF_INET_LOCAL_OUT = 3, NF_INET_POST_ROUTING = 4, NF_INET_NUMHOOKS = 5, NF_INET_INGRESS = 5, }; enum { NFPROTO_UNSPEC = 0, NFPROTO_INET = 1, NFPROTO_IPV4 = 2, NFPROTO_ARP = 3, NFPROTO_NETDEV = 5, NFPROTO_BRIDGE = 7, NFPROTO_IPV6 = 10, NFPROTO_DECNET = 12, NFPROTO_NUMPROTO = 13, }; enum { XFRM_POLICY_IN = 0, XFRM_POLICY_OUT = 1, XFRM_POLICY_FWD = 2, XFRM_POLICY_MASK = 3, XFRM_POLICY_MAX = 3, }; enum netns_bpf_attach_type { NETNS_BPF_INVALID = 4294967295, NETNS_BPF_FLOW_DISSECTOR = 0, NETNS_BPF_SK_LOOKUP = 1, MAX_NETNS_BPF_ATTACH_TYPE = 2, }; typedef long int (*sys_call_ptr_t)(const struct pt_regs *); struct io_bitmap { u64 sequence; refcount_t refcnt; unsigned int max; long unsigned int bitmap[1024]; }; enum { EI_ETYPE_NONE = 0, EI_ETYPE_NULL = 1, EI_ETYPE_ERRNO = 2, EI_ETYPE_ERRNO_NULL = 3, EI_ETYPE_TRUE = 4, }; struct blkg_iostat { u64 bytes[3]; u64 ios[3]; }; struct blkg_iostat_set { struct u64_stats_sync sync; struct blkg_iostat cur; struct blkg_iostat last; }; struct blkcg; struct blkg_policy_data; struct blkcg_gq { struct request_queue *q; struct list_head q_node; struct hlist_node blkcg_node; struct blkcg *blkcg; struct blkcg_gq *parent; struct percpu_ref refcnt; bool online; struct blkg_iostat_set *iostat_cpu; struct blkg_iostat_set iostat; struct blkg_policy_data *pd[6]; spinlock_t async_bio_lock; struct bio_list async_bios; struct work_struct async_bio_work; atomic_t use_delay; atomic64_t delay_nsec; atomic64_t delay_start; u64 last_delay; int last_use; struct callback_head callback_head; }; struct blkcg_policy_data; struct blkcg { struct cgroup_subsys_state css; spinlock_t lock; refcount_t online_pin; struct xarray blkg_tree; struct blkcg_gq *blkg_hint; struct hlist_head blkg_list; struct blkcg_policy_data *cpd[6]; struct list_head all_blkcgs_node; struct list_head cgwb_list; }; struct blkcg_policy_data { struct blkcg *blkcg; int plid; }; struct blkg_policy_data { struct blkcg_gq *blkg; int plid; }; struct syscall_metadata { const char *name; int syscall_nr; int nb_args; const char **types; const char **args; struct list_head enter_fields; struct trace_event_call *enter_event; struct trace_event_call *exit_event; }; struct alt_instr { s32 instr_offset; s32 repl_offset; u16 cpuid; u8 instrlen; u8 replacementlen; }; struct timens_offset { s64 sec; u64 nsec; }; enum vm_fault_reason { VM_FAULT_OOM = 1, VM_FAULT_SIGBUS = 2, VM_FAULT_MAJOR = 4, VM_FAULT_WRITE = 8, VM_FAULT_HWPOISON = 16, VM_FAULT_HWPOISON_LARGE = 32, VM_FAULT_SIGSEGV = 64, VM_FAULT_NOPAGE = 256, VM_FAULT_LOCKED = 512, VM_FAULT_RETRY = 1024, VM_FAULT_FALLBACK = 2048, VM_FAULT_DONE_COW = 4096, VM_FAULT_NEEDDSYNC = 8192, VM_FAULT_HINDEX_MASK = 983040, }; struct vm_special_mapping { const char *name; struct page **pages; vm_fault_t (*fault)(const struct vm_special_mapping *, struct vm_area_struct *, struct vm_fault *); int (*mremap)(const struct vm_special_mapping *, struct vm_area_struct *); }; struct timens_offsets { struct timespec64 monotonic; struct timespec64 boottime; }; struct time_namespace { struct user_namespace *user_ns; struct ucounts *ucounts; struct ns_common ns; struct timens_offsets offsets; struct page *vvar_page; bool frozen_offsets; }; struct pvclock_vcpu_time_info { u32 version; u32 pad0; u64 tsc_timestamp; u64 system_time; u32 tsc_to_system_mul; s8 tsc_shift; u8 flags; u8 pad[2]; }; struct pvclock_vsyscall_time_info { struct pvclock_vcpu_time_info pvti; long: 64; long: 64; long: 64; long: 64; }; enum vdso_clock_mode { VDSO_CLOCKMODE_NONE = 0, VDSO_CLOCKMODE_TSC = 1, VDSO_CLOCKMODE_PVCLOCK = 2, VDSO_CLOCKMODE_HVCLOCK = 3, VDSO_CLOCKMODE_MAX = 4, VDSO_CLOCKMODE_TIMENS = 2147483647, }; struct arch_vdso_data {}; struct vdso_timestamp { u64 sec; u64 nsec; }; struct vdso_data { u32 seq; s32 clock_mode; u64 cycle_last; u64 mask; u32 mult; u32 shift; union { struct vdso_timestamp basetime[12]; struct timens_offset offset[12]; }; s32 tz_minuteswest; s32 tz_dsttime; u32 hrtimer_res; u32 __unused; struct arch_vdso_data arch_data; }; struct ms_hyperv_tsc_page { volatile u32 tsc_sequence; u32 reserved1; volatile u64 tsc_scale; volatile s64 tsc_offset; }; enum { TASKSTATS_CMD_UNSPEC = 0, TASKSTATS_CMD_GET = 1, TASKSTATS_CMD_NEW = 2, __TASKSTATS_CMD_MAX = 3, }; enum cpu_usage_stat { CPUTIME_USER = 0, CPUTIME_NICE = 1, CPUTIME_SYSTEM = 2, CPUTIME_SOFTIRQ = 3, CPUTIME_IRQ = 4, CPUTIME_IDLE = 5, CPUTIME_IOWAIT = 6, CPUTIME_STEAL = 7, CPUTIME_GUEST = 8, CPUTIME_GUEST_NICE = 9, NR_STATS = 10, }; enum bpf_cgroup_storage_type { BPF_CGROUP_STORAGE_SHARED = 0, BPF_CGROUP_STORAGE_PERCPU = 1, __BPF_CGROUP_STORAGE_MAX = 2, }; enum bpf_tramp_prog_type { BPF_TRAMP_FENTRY = 0, BPF_TRAMP_FEXIT = 1, BPF_TRAMP_MODIFY_RETURN = 2, BPF_TRAMP_MAX = 3, BPF_TRAMP_REPLACE = 4, }; enum cgroup_bpf_attach_type { CGROUP_BPF_ATTACH_TYPE_INVALID = 4294967295, CGROUP_INET_INGRESS = 0, CGROUP_INET_EGRESS = 1, CGROUP_INET_SOCK_CREATE = 2, CGROUP_SOCK_OPS = 3, CGROUP_DEVICE = 4, CGROUP_INET4_BIND = 5, CGROUP_INET6_BIND = 6, CGROUP_INET4_CONNECT = 7, CGROUP_INET6_CONNECT = 8, CGROUP_INET4_POST_BIND = 9, CGROUP_INET6_POST_BIND = 10, CGROUP_UDP4_SENDMSG = 11, CGROUP_UDP6_SENDMSG = 12, CGROUP_SYSCTL = 13, CGROUP_UDP4_RECVMSG = 14, CGROUP_UDP6_RECVMSG = 15, CGROUP_GETSOCKOPT = 16, CGROUP_SETSOCKOPT = 17, CGROUP_INET4_GETPEERNAME = 18, CGROUP_INET6_GETPEERNAME = 19, CGROUP_INET4_GETSOCKNAME = 20, CGROUP_INET6_GETSOCKNAME = 21, CGROUP_INET_SOCK_RELEASE = 22, MAX_CGROUP_BPF_ATTACH_TYPE = 23, }; enum cgroup_subsys_id { cpu_cgrp_id = 0, io_cgrp_id = 1, memory_cgrp_id = 2, devices_cgrp_id = 3, pids_cgrp_id = 4, CGROUP_SUBSYS_COUNT = 5, }; struct linux_binprm___2; struct vdso_exception_table_entry { int insn; int fixup; }; enum perf_type_id { PERF_TYPE_HARDWARE = 0, PERF_TYPE_SOFTWARE = 1, PERF_TYPE_TRACEPOINT = 2, PERF_TYPE_HW_CACHE = 3, PERF_TYPE_RAW = 4, PERF_TYPE_BREAKPOINT = 5, PERF_TYPE_MAX = 6, }; enum perf_hw_id { PERF_COUNT_HW_CPU_CYCLES = 0, PERF_COUNT_HW_INSTRUCTIONS = 1, PERF_COUNT_HW_CACHE_REFERENCES = 2, PERF_COUNT_HW_CACHE_MISSES = 3, PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 4, PERF_COUNT_HW_BRANCH_MISSES = 5, PERF_COUNT_HW_BUS_CYCLES = 6, PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 7, PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 8, PERF_COUNT_HW_REF_CPU_CYCLES = 9, PERF_COUNT_HW_MAX = 10, }; enum perf_hw_cache_id { PERF_COUNT_HW_CACHE_L1D = 0, PERF_COUNT_HW_CACHE_L1I = 1, PERF_COUNT_HW_CACHE_LL = 2, PERF_COUNT_HW_CACHE_DTLB = 3, PERF_COUNT_HW_CACHE_ITLB = 4, PERF_COUNT_HW_CACHE_BPU = 5, PERF_COUNT_HW_CACHE_NODE = 6, PERF_COUNT_HW_CACHE_MAX = 7, }; enum perf_hw_cache_op_id { PERF_COUNT_HW_CACHE_OP_READ = 0, PERF_COUNT_HW_CACHE_OP_WRITE = 1, PERF_COUNT_HW_CACHE_OP_PREFETCH = 2, PERF_COUNT_HW_CACHE_OP_MAX = 3, }; enum perf_hw_cache_op_result_id { PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0, PERF_COUNT_HW_CACHE_RESULT_MISS = 1, PERF_COUNT_HW_CACHE_RESULT_MAX = 2, }; enum perf_event_sample_format { PERF_SAMPLE_IP = 1, PERF_SAMPLE_TID = 2, PERF_SAMPLE_TIME = 4, PERF_SAMPLE_ADDR = 8, PERF_SAMPLE_READ = 16, PERF_SAMPLE_CALLCHAIN = 32, PERF_SAMPLE_ID = 64, PERF_SAMPLE_CPU = 128, PERF_SAMPLE_PERIOD = 256, PERF_SAMPLE_STREAM_ID = 512, PERF_SAMPLE_RAW = 1024, PERF_SAMPLE_BRANCH_STACK = 2048, PERF_SAMPLE_REGS_USER = 4096, PERF_SAMPLE_STACK_USER = 8192, PERF_SAMPLE_WEIGHT = 16384, PERF_SAMPLE_DATA_SRC = 32768, PERF_SAMPLE_IDENTIFIER = 65536, PERF_SAMPLE_TRANSACTION = 131072, PERF_SAMPLE_REGS_INTR = 262144, PERF_SAMPLE_PHYS_ADDR = 524288, PERF_SAMPLE_AUX = 1048576, PERF_SAMPLE_CGROUP = 2097152, PERF_SAMPLE_DATA_PAGE_SIZE = 4194304, PERF_SAMPLE_CODE_PAGE_SIZE = 8388608, PERF_SAMPLE_WEIGHT_STRUCT = 16777216, PERF_SAMPLE_MAX = 33554432, __PERF_SAMPLE_CALLCHAIN_EARLY = 0, }; enum perf_branch_sample_type { PERF_SAMPLE_BRANCH_USER = 1, PERF_SAMPLE_BRANCH_KERNEL = 2, PERF_SAMPLE_BRANCH_HV = 4, PERF_SAMPLE_BRANCH_ANY = 8, PERF_SAMPLE_BRANCH_ANY_CALL = 16, PERF_SAMPLE_BRANCH_ANY_RETURN = 32, PERF_SAMPLE_BRANCH_IND_CALL = 64, PERF_SAMPLE_BRANCH_ABORT_TX = 128, PERF_SAMPLE_BRANCH_IN_TX = 256, PERF_SAMPLE_BRANCH_NO_TX = 512, PERF_SAMPLE_BRANCH_COND = 1024, PERF_SAMPLE_BRANCH_CALL_STACK = 2048, PERF_SAMPLE_BRANCH_IND_JUMP = 4096, PERF_SAMPLE_BRANCH_CALL = 8192, PERF_SAMPLE_BRANCH_NO_FLAGS = 16384, PERF_SAMPLE_BRANCH_NO_CYCLES = 32768, PERF_SAMPLE_BRANCH_TYPE_SAVE = 65536, PERF_SAMPLE_BRANCH_HW_INDEX = 131072, PERF_SAMPLE_BRANCH_MAX = 262144, }; struct perf_event_mmap_page { __u32 version; __u32 compat_version; __u32 lock; __u32 index; __s64 offset; __u64 time_enabled; __u64 time_running; union { __u64 capabilities; struct { __u64 cap_bit0: 1; __u64 cap_bit0_is_deprecated: 1; __u64 cap_user_rdpmc: 1; __u64 cap_user_time: 1; __u64 cap_user_time_zero: 1; __u64 cap_user_time_short: 1; __u64 cap_____res: 58; }; }; __u16 pmc_width; __u16 time_shift; __u32 time_mult; __u64 time_offset; __u64 time_zero; __u32 size; __u32 __reserved_1; __u64 time_cycles; __u64 time_mask; __u8 __reserved[928]; __u64 data_head; __u64 data_tail; __u64 data_offset; __u64 data_size; __u64 aux_head; __u64 aux_tail; __u64 aux_offset; __u64 aux_size; }; struct cpuinfo_x86 { __u8 x86; __u8 x86_vendor; __u8 x86_model; __u8 x86_stepping; int x86_tlbsize; __u32 vmx_capability[3]; __u8 x86_virt_bits; __u8 x86_phys_bits; __u8 x86_coreid_bits; __u8 cu_id; __u32 extended_cpuid_level; int cpuid_level; union { __u32 x86_capability[21]; long unsigned int x86_capability_alignment; }; char x86_vendor_id[16]; char x86_model_id[64]; unsigned int x86_cache_size; int x86_cache_alignment; int x86_cache_max_rmid; int x86_cache_occ_scale; int x86_cache_mbm_width_offset; int x86_power; long unsigned int loops_per_jiffy; u16 x86_max_cores; u16 apicid; u16 initial_apicid; u16 x86_clflush_size; u16 booted_cores; u16 phys_proc_id; u16 logical_proc_id; u16 cpu_core_id; u16 cpu_die_id; u16 logical_die_id; u16 cpu_index; bool smt_active; u32 microcode; u8 x86_cache_bits; unsigned int initialized: 1; }; typedef void (*smp_call_func_t)(void *); typedef bool (*smp_cond_func_t)(int, void *); enum apic_delivery_modes { APIC_DELIVERY_MODE_FIXED = 0, APIC_DELIVERY_MODE_LOWESTPRIO = 1, APIC_DELIVERY_MODE_SMI = 2, APIC_DELIVERY_MODE_NMI = 4, APIC_DELIVERY_MODE_INIT = 5, APIC_DELIVERY_MODE_EXTINT = 7, }; struct x86_pmu_capability { int version; int num_counters_gp; int num_counters_fixed; int bit_width_gp; int bit_width_fixed; unsigned int events_mask; int events_mask_len; }; struct debug_store { u64 bts_buffer_base; u64 bts_index; u64 bts_absolute_maximum; u64 bts_interrupt_threshold; u64 pebs_buffer_base; u64 pebs_index; u64 pebs_absolute_maximum; u64 pebs_interrupt_threshold; u64 pebs_event_reset[12]; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; enum stack_type { STACK_TYPE_UNKNOWN = 0, STACK_TYPE_TASK = 1, STACK_TYPE_IRQ = 2, STACK_TYPE_SOFTIRQ = 3, STACK_TYPE_ENTRY = 4, STACK_TYPE_EXCEPTION = 5, STACK_TYPE_EXCEPTION_LAST = 10, }; struct stack_info { enum stack_type type; long unsigned int *begin; long unsigned int *end; long unsigned int *next_sp; }; struct stack_frame { struct stack_frame *next_frame; long unsigned int return_address; }; struct perf_guest_switch_msr { unsigned int msr; u64 host; u64 guest; }; struct perf_guest_info_callbacks { int (*is_in_guest)(); int (*is_user_mode)(); long unsigned int (*get_guest_ip)(); void (*handle_intel_pt_intr)(); }; typedef struct { u16 __softirq_pending; unsigned int __nmi_count; unsigned int apic_timer_irqs; unsigned int irq_spurious_count; unsigned int icr_read_retry_count; unsigned int kvm_posted_intr_ipis; unsigned int kvm_posted_intr_wakeup_ipis; unsigned int kvm_posted_intr_nested_ipis; unsigned int x86_platform_ipis; unsigned int apic_perf_irqs; unsigned int apic_irq_work_irqs; unsigned int irq_resched_count; unsigned int irq_call_count; unsigned int irq_tlb_count; unsigned int irq_thermal_count; unsigned int irq_hv_callback_count; } irq_cpustat_t; struct device_attribute { struct attribute attr; ssize_t (*show)(struct device *, struct device_attribute *, char *); ssize_t (*store)(struct device *, struct device_attribute *, const char *, size_t); }; enum perf_event_x86_regs { PERF_REG_X86_AX = 0, PERF_REG_X86_BX = 1, PERF_REG_X86_CX = 2, PERF_REG_X86_DX = 3, PERF_REG_X86_SI = 4, PERF_REG_X86_DI = 5, PERF_REG_X86_BP = 6, PERF_REG_X86_SP = 7, PERF_REG_X86_IP = 8, PERF_REG_X86_FLAGS = 9, PERF_REG_X86_CS = 10, PERF_REG_X86_SS = 11, PERF_REG_X86_DS = 12, PERF_REG_X86_ES = 13, PERF_REG_X86_FS = 14, PERF_REG_X86_GS = 15, PERF_REG_X86_R8 = 16, PERF_REG_X86_R9 = 17, PERF_REG_X86_R10 = 18, PERF_REG_X86_R11 = 19, PERF_REG_X86_R12 = 20, PERF_REG_X86_R13 = 21, PERF_REG_X86_R14 = 22, PERF_REG_X86_R15 = 23, PERF_REG_X86_32_MAX = 16, PERF_REG_X86_64_MAX = 24, PERF_REG_X86_XMM0 = 32, PERF_REG_X86_XMM1 = 34, PERF_REG_X86_XMM2 = 36, PERF_REG_X86_XMM3 = 38, PERF_REG_X86_XMM4 = 40, PERF_REG_X86_XMM5 = 42, PERF_REG_X86_XMM6 = 44, PERF_REG_X86_XMM7 = 46, PERF_REG_X86_XMM8 = 48, PERF_REG_X86_XMM9 = 50, PERF_REG_X86_XMM10 = 52, PERF_REG_X86_XMM11 = 54, PERF_REG_X86_XMM12 = 56, PERF_REG_X86_XMM13 = 58, PERF_REG_X86_XMM14 = 60, PERF_REG_X86_XMM15 = 62, PERF_REG_X86_XMM_MAX = 64, }; struct perf_callchain_entry_ctx { struct perf_callchain_entry *entry; u32 max_stack; u32 nr; short int contexts; bool contexts_maxed; }; struct perf_pmu_events_attr { struct device_attribute attr; u64 id; const char *event_str; }; struct perf_pmu_events_ht_attr { struct device_attribute attr; u64 id; const char *event_str_ht; const char *event_str_noht; }; struct perf_pmu_events_hybrid_attr { struct device_attribute attr; u64 id; const char *event_str; u64 pmu_type; }; struct physid_mask { long unsigned int mask[512]; }; typedef struct physid_mask physid_mask_t; struct apic { void (*eoi_write)(u32, u32); void (*native_eoi_write)(u32, u32); void (*write)(u32, u32); u32 (*read)(u32); void (*wait_icr_idle)(); u32 (*safe_wait_icr_idle)(); void (*send_IPI)(int, int); void (*send_IPI_mask)(const struct cpumask *, int); void (*send_IPI_mask_allbutself)(const struct cpumask *, int); void (*send_IPI_allbutself)(int); void (*send_IPI_all)(int); void (*send_IPI_self)(int); u32 disable_esr; enum apic_delivery_modes delivery_mode; bool dest_mode_logical; u32 (*calc_dest_apicid)(unsigned int); u64 (*icr_read)(); void (*icr_write)(u32, u32); int (*probe)(); int (*acpi_madt_oem_check)(char *, char *); int (*apic_id_valid)(u32); int (*apic_id_registered)(); bool (*check_apicid_used)(physid_mask_t *, int); void (*init_apic_ldr)(); void (*ioapic_phys_id_map)(physid_mask_t *, physid_mask_t *); void (*setup_apic_routing)(); int (*cpu_present_to_apicid)(int); void (*apicid_to_cpu_present)(int, physid_mask_t *); int (*check_phys_apicid_present)(int); int (*phys_pkg_id)(int, int); u32 (*get_apic_id)(long unsigned int); u32 (*set_apic_id)(unsigned int); int (*wakeup_secondary_cpu)(int, long unsigned int); void (*inquire_remote_apic)(int); char *name; }; enum { NMI_LOCAL = 0, NMI_UNKNOWN = 1, NMI_SERR = 2, NMI_IO_CHECK = 3, NMI_MAX = 4, }; typedef int (*nmi_handler_t)(unsigned int, struct pt_regs *); struct nmiaction { struct list_head list; nmi_handler_t handler; u64 max_duration; long unsigned int flags; const char *name; }; struct gdt_page { struct desc_struct gdt[16]; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct cyc2ns_data { u32 cyc2ns_mul; u32 cyc2ns_shift; u64 cyc2ns_offset; }; struct unwind_state { struct stack_info stack_info; long unsigned int stack_mask; struct task_struct *task; int graph_idx; struct llist_node *kr_cur; bool error; bool signal; bool full_regs; long unsigned int sp; long unsigned int bp; long unsigned int ip; struct pt_regs *regs; struct pt_regs *prev_regs; }; enum extra_reg_type { EXTRA_REG_NONE = 4294967295, EXTRA_REG_RSP_0 = 0, EXTRA_REG_RSP_1 = 1, EXTRA_REG_LBR = 2, EXTRA_REG_LDLAT = 3, EXTRA_REG_FE = 4, EXTRA_REG_MAX = 5, }; struct event_constraint { union { long unsigned int idxmsk[1]; u64 idxmsk64; }; u64 code; u64 cmask; int weight; int overlap; int flags; unsigned int size; }; struct amd_nb { int nb_id; int refcnt; struct perf_event *owners[64]; struct event_constraint event_constraints[64]; }; struct er_account { raw_spinlock_t lock; u64 config; u64 reg; atomic_t ref; }; struct intel_shared_regs { struct er_account regs[5]; int refcnt; unsigned int core_id; }; enum intel_excl_state_type { INTEL_EXCL_UNUSED = 0, INTEL_EXCL_SHARED = 1, INTEL_EXCL_EXCLUSIVE = 2, }; struct intel_excl_states { enum intel_excl_state_type state[64]; bool sched_started; }; struct intel_excl_cntrs { raw_spinlock_t lock; struct intel_excl_states states[2]; union { u16 has_exclusive[2]; u32 exclusive_present; }; int refcnt; unsigned int core_id; }; enum { X86_PERF_KFREE_SHARED = 0, X86_PERF_KFREE_EXCL = 1, X86_PERF_KFREE_MAX = 2, }; struct cpu_hw_events { struct perf_event *events[64]; long unsigned int active_mask[1]; long unsigned int dirty[1]; int enabled; int n_events; int n_added; int n_txn; int n_txn_pair; int n_txn_metric; int assign[64]; u64 tags[64]; struct perf_event *event_list[64]; struct event_constraint *event_constraint[64]; int n_excl; unsigned int txn_flags; int is_fake; struct debug_store *ds; void *ds_pebs_vaddr; void *ds_bts_vaddr; u64 pebs_enabled; int n_pebs; int n_large_pebs; int n_pebs_via_pt; int pebs_output; u64 pebs_data_cfg; u64 active_pebs_data_cfg; int pebs_record_size; int lbr_users; int lbr_pebs_users; struct perf_branch_stack lbr_stack; struct perf_branch_entry lbr_entries[32]; union { struct er_account *lbr_sel; struct er_account *lbr_ctl; }; u64 br_sel; void *last_task_ctx; int last_log_id; int lbr_select; void *lbr_xsave; u64 intel_ctrl_guest_mask; u64 intel_ctrl_host_mask; struct perf_guest_switch_msr guest_switch_msrs[64]; u64 intel_cp_status; struct intel_shared_regs *shared_regs; struct event_constraint *constraint_list; struct intel_excl_cntrs *excl_cntrs; int excl_thread_id; u64 tfa_shadow; int n_metric; struct amd_nb *amd_nb; u64 perf_ctr_virt_mask; int n_pair; void *kfree_on_online[2]; struct pmu *pmu; }; struct extra_reg { unsigned int event; unsigned int msr; u64 config_mask; u64 valid_mask; int idx; bool extra_msr_access; }; union perf_capabilities { struct { u64 lbr_format: 6; u64 pebs_trap: 1; u64 pebs_arch_reg: 1; u64 pebs_format: 4; u64 smm_freeze: 1; u64 full_width_write: 1; u64 pebs_baseline: 1; u64 perf_metrics: 1; u64 pebs_output_pt_available: 1; u64 anythread_deprecated: 1; }; u64 capabilities; }; struct x86_pmu_quirk { struct x86_pmu_quirk *next; void (*func)(); }; enum { x86_lbr_exclusive_lbr = 0, x86_lbr_exclusive_bts = 1, x86_lbr_exclusive_pt = 2, x86_lbr_exclusive_max = 3, }; struct x86_hybrid_pmu { struct pmu pmu; const char *name; u8 cpu_type; cpumask_t supported_cpus; union perf_capabilities intel_cap; u64 intel_ctrl; int max_pebs_events; int num_counters; int num_counters_fixed; struct event_constraint unconstrained; u64 hw_cache_event_ids[42]; u64 hw_cache_extra_regs[42]; struct event_constraint *event_constraints; struct event_constraint *pebs_constraints; struct extra_reg *extra_regs; unsigned int late_ack: 1; unsigned int mid_ack: 1; unsigned int enabled_ack: 1; }; enum hybrid_pmu_type { hybrid_big = 64, hybrid_small = 32, hybrid_big_small = 96, }; struct x86_pmu { const char *name; int version; int (*handle_irq)(struct pt_regs *); void (*disable_all)(); void (*enable_all)(int); void (*enable)(struct perf_event *); void (*disable)(struct perf_event *); void (*assign)(struct perf_event *, int); void (*add)(struct perf_event *); void (*del)(struct perf_event *); void (*read)(struct perf_event *); int (*hw_config)(struct perf_event *); int (*schedule_events)(struct cpu_hw_events *, int, int *); unsigned int eventsel; unsigned int perfctr; int (*addr_offset)(int, bool); int (*rdpmc_index)(int); u64 (*event_map)(int); int max_events; int num_counters; int num_counters_fixed; int cntval_bits; u64 cntval_mask; union { long unsigned int events_maskl; long unsigned int events_mask[1]; }; int events_mask_len; int apic; u64 max_period; struct event_constraint * (*get_event_constraints)(struct cpu_hw_events *, int, struct perf_event *); void (*put_event_constraints)(struct cpu_hw_events *, struct perf_event *); void (*start_scheduling)(struct cpu_hw_events *); void (*commit_scheduling)(struct cpu_hw_events *, int, int); void (*stop_scheduling)(struct cpu_hw_events *); struct event_constraint *event_constraints; struct x86_pmu_quirk *quirks; int perfctr_second_write; u64 (*limit_period)(struct perf_event *, u64); unsigned int late_ack: 1; unsigned int mid_ack: 1; unsigned int enabled_ack: 1; int attr_rdpmc_broken; int attr_rdpmc; struct attribute **format_attrs; ssize_t (*events_sysfs_show)(char *, u64); const struct attribute_group **attr_update; long unsigned int attr_freeze_on_smi; int (*cpu_prepare)(int); void (*cpu_starting)(int); void (*cpu_dying)(int); void (*cpu_dead)(int); void (*check_microcode)(); void (*sched_task)(struct perf_event_context *, bool); u64 intel_ctrl; union perf_capabilities intel_cap; unsigned int bts: 1; unsigned int bts_active: 1; unsigned int pebs: 1; unsigned int pebs_active: 1; unsigned int pebs_broken: 1; unsigned int pebs_prec_dist: 1; unsigned int pebs_no_tlb: 1; unsigned int pebs_no_isolation: 1; unsigned int pebs_block: 1; int pebs_record_size; int pebs_buffer_size; int max_pebs_events; void (*drain_pebs)(struct pt_regs *, struct perf_sample_data *); struct event_constraint *pebs_constraints; void (*pebs_aliases)(struct perf_event *); long unsigned int large_pebs_flags; u64 rtm_abort_event; unsigned int lbr_tos; unsigned int lbr_from; unsigned int lbr_to; unsigned int lbr_info; unsigned int lbr_nr; union { u64 lbr_sel_mask; u64 lbr_ctl_mask; }; union { const int *lbr_sel_map; int *lbr_ctl_map; }; bool lbr_double_abort; bool lbr_pt_coexist; unsigned int lbr_depth_mask: 8; unsigned int lbr_deep_c_reset: 1; unsigned int lbr_lip: 1; unsigned int lbr_cpl: 1; unsigned int lbr_filter: 1; unsigned int lbr_call_stack: 1; unsigned int lbr_mispred: 1; unsigned int lbr_timed_lbr: 1; unsigned int lbr_br_type: 1; void (*lbr_reset)(); void (*lbr_read)(struct cpu_hw_events *); void (*lbr_save)(void *); void (*lbr_restore)(void *); atomic_t lbr_exclusive[3]; int num_topdown_events; u64 (*update_topdown_event)(struct perf_event *); int (*set_topdown_event_period)(struct perf_event *); void (*swap_task_ctx)(struct perf_event_context *, struct perf_event_context *); unsigned int amd_nb_constraints: 1; u64 perf_ctr_pair_en; struct extra_reg *extra_regs; unsigned int flags; struct perf_guest_switch_msr * (*guest_get_msrs)(int *); int (*check_period)(struct perf_event *, u64); int (*aux_output_match)(struct perf_event *); int (*filter_match)(struct perf_event *); int num_hybrid_pmus; struct x86_hybrid_pmu *hybrid_pmu; u8 (*get_hybrid_cpu_type)(); }; struct sched_state { int weight; int event; int counter; int unassigned; int nr_gp; u64 used; }; struct perf_sched { int max_weight; int max_events; int max_gp; int saved_states; struct event_constraint **constraints; struct sched_state state; struct sched_state saved[2]; }; struct perf_msr { u64 msr; struct attribute_group *grp; bool (*test)(int, void *); bool no_check; u64 mask; }; typedef phys_addr_t resource_size_t; struct resource { resource_size_t start; resource_size_t end; const char *name; long unsigned int flags; long unsigned int desc; struct resource *parent; struct resource *sibling; struct resource *child; }; typedef int pci_power_t; typedef unsigned int pci_channel_state_t; typedef short unsigned int pci_dev_flags_t; struct pci_vpd { struct mutex lock; unsigned int len; u8 cap; }; struct pci_bus; struct pci_slot; struct pci_driver; struct pci_dev { struct list_head bus_list; struct pci_bus *bus; struct pci_bus *subordinate; void *sysdata; struct proc_dir_entry *procent; struct pci_slot *slot; unsigned int devfn; short unsigned int vendor; short unsigned int device; short unsigned int subsystem_vendor; short unsigned int subsystem_device; unsigned int class; u8 revision; u8 hdr_type; u32 devcap; u8 pcie_cap; u8 msi_cap; u8 msix_cap; u8 pcie_mpss: 3; u8 rom_base_reg; u8 pin; u16 pcie_flags_reg; long unsigned int *dma_alias_mask; struct pci_driver *driver; u64 dma_mask; struct device_dma_parameters dma_parms; pci_power_t current_state; unsigned int imm_ready: 1; u8 pm_cap; unsigned int pme_support: 5; unsigned int pme_poll: 1; unsigned int d1_support: 1; unsigned int d2_support: 1; unsigned int no_d1d2: 1; unsigned int no_d3cold: 1; unsigned int bridge_d3: 1; unsigned int d3cold_allowed: 1; unsigned int mmio_always_on: 1; unsigned int wakeup_prepared: 1; unsigned int runtime_d3cold: 1; unsigned int skip_bus_pm: 1; unsigned int ignore_hotplug: 1; unsigned int hotplug_user_indicators: 1; unsigned int clear_retrain_link: 1; unsigned int d3hot_delay; unsigned int d3cold_delay; unsigned int pasid_no_tlp: 1; unsigned int eetlp_prefix_path: 1; pci_channel_state_t error_state; struct device dev; int cfg_size; unsigned int irq; struct resource resource[11]; bool match_driver; unsigned int transparent: 1; unsigned int io_window: 1; unsigned int pref_window: 1; unsigned int pref_64_window: 1; unsigned int multifunction: 1; unsigned int is_busmaster: 1; unsigned int no_msi: 1; unsigned int no_64bit_msi: 1; unsigned int block_cfg_access: 1; unsigned int broken_parity_status: 1; unsigned int irq_reroute_variant: 2; unsigned int msi_enabled: 1; unsigned int msix_enabled: 1; unsigned int ari_enabled: 1; unsigned int ats_enabled: 1; unsigned int pasid_enabled: 1; unsigned int pri_enabled: 1; unsigned int is_managed: 1; unsigned int needs_freset: 1; unsigned int state_saved: 1; unsigned int is_physfn: 1; unsigned int is_virtfn: 1; unsigned int is_hotplug_bridge: 1; unsigned int shpc_managed: 1; unsigned int is_thunderbolt: 1; unsigned int untrusted: 1; unsigned int external_facing: 1; unsigned int broken_intx_masking: 1; unsigned int io_window_1k: 1; unsigned int irq_managed: 1; unsigned int non_compliant_bars: 1; unsigned int is_probed: 1; unsigned int link_active_reporting: 1; unsigned int no_vf_scan: 1; unsigned int no_command_memory: 1; pci_dev_flags_t dev_flags; atomic_t enable_cnt; u32 saved_config_space[16]; struct hlist_head saved_cap_space; int rom_attr_enabled; struct bin_attribute *res_attr[11]; struct bin_attribute *res_attr_wc[11]; const struct attribute_group **msi_irq_groups; struct pci_vpd vpd; u16 acs_cap; phys_addr_t rom; size_t romlen; char *driver_override; long unsigned int priv_flags; u8 reset_methods[7]; }; struct pci_device_id { __u32 vendor; __u32 device; __u32 subvendor; __u32 subdevice; __u32 class; __u32 class_mask; kernel_ulong_t driver_data; __u32 override_only; }; struct hotplug_slot; struct pci_slot { struct pci_bus *bus; struct list_head list; struct hotplug_slot *hotplug; unsigned char number; struct kobject kobj; }; typedef short unsigned int pci_bus_flags_t; struct pci_ops; struct pci_bus { struct list_head node; struct pci_bus *parent; struct list_head children; struct list_head devices; struct pci_dev *self; struct list_head slots; struct resource *resource[4]; struct list_head resources; struct resource busn_res; struct pci_ops *ops; void *sysdata; struct proc_dir_entry *procdir; unsigned char number; unsigned char primary; unsigned char max_bus_speed; unsigned char cur_bus_speed; char name[48]; short unsigned int bridge_ctl; pci_bus_flags_t bus_flags; struct device *bridge; struct device dev; struct bin_attribute *legacy_io; struct bin_attribute *legacy_mem; unsigned int is_added: 1; }; enum { PCI_STD_RESOURCES = 0, PCI_STD_RESOURCE_END = 5, PCI_ROM_RESOURCE = 6, PCI_BRIDGE_RESOURCES = 7, PCI_BRIDGE_RESOURCE_END = 10, PCI_NUM_RESOURCES = 11, DEVICE_COUNT_RESOURCE = 11, }; typedef unsigned int pcie_reset_state_t; struct pci_dynids { spinlock_t lock; struct list_head list; }; struct pci_error_handlers; struct pci_driver { struct list_head node; const char *name; const struct pci_device_id *id_table; int (*probe)(struct pci_dev *, const struct pci_device_id *); void (*remove)(struct pci_dev *); int (*suspend)(struct pci_dev *, pm_message_t); int (*resume)(struct pci_dev *); void (*shutdown)(struct pci_dev *); int (*sriov_configure)(struct pci_dev *, int); int (*sriov_set_msix_vec_count)(struct pci_dev *, int); u32 (*sriov_get_vf_total_msix)(struct pci_dev *); const struct pci_error_handlers *err_handler; const struct attribute_group **groups; const struct attribute_group **dev_groups; struct device_driver driver; struct pci_dynids dynids; }; struct pci_ops { int (*add_bus)(struct pci_bus *); void (*remove_bus)(struct pci_bus *); void * (*map_bus)(struct pci_bus *, unsigned int, int); int (*read)(struct pci_bus *, unsigned int, int, int, u32 *); int (*write)(struct pci_bus *, unsigned int, int, int, u32); }; typedef unsigned int pci_ers_result_t; struct pci_error_handlers { pci_ers_result_t (*error_detected)(struct pci_dev *, pci_channel_state_t); pci_ers_result_t (*mmio_enabled)(struct pci_dev *); pci_ers_result_t (*slot_reset)(struct pci_dev *); void (*reset_prepare)(struct pci_dev *); void (*reset_done)(struct pci_dev *); void (*resume)(struct pci_dev *); }; enum perf_msr_id { PERF_MSR_TSC = 0, PERF_MSR_APERF = 1, PERF_MSR_MPERF = 2, PERF_MSR_PPERF = 3, PERF_MSR_SMI = 4, PERF_MSR_PTSC = 5, PERF_MSR_IRPERF = 6, PERF_MSR_THERM = 7, PERF_MSR_EVENT_MAX = 8, }; struct paravirt_callee_save { void *func; }; struct pv_cpu_ops { void (*io_delay)(); }; struct pv_irq_ops {}; struct flush_tlb_info; struct mmu_gather; struct pv_mmu_ops { void (*flush_tlb_user)(); void (*flush_tlb_kernel)(); void (*flush_tlb_one_user)(long unsigned int); void (*flush_tlb_multi)(const struct cpumask *, const struct flush_tlb_info *); void (*tlb_remove_table)(struct mmu_gather *, void *); void (*exit_mmap)(struct mm_struct *); void (*notify_page_enc_status_changed)(long unsigned int, int, bool); }; struct flush_tlb_info { struct mm_struct *mm; long unsigned int start; long unsigned int end; u64 new_tlb_gen; unsigned int initiating_cpu; u8 stride_shift; u8 freed_tables; }; struct pv_lock_ops { void (*queued_spin_lock_slowpath)(struct qspinlock *, u32); struct paravirt_callee_save queued_spin_unlock; void (*wait)(u8 *, u8); void (*kick)(int); struct paravirt_callee_save vcpu_is_preempted; }; struct paravirt_patch_template { struct pv_cpu_ops cpu; struct pv_irq_ops irq; struct pv_mmu_ops mmu; struct pv_lock_ops lock; }; struct x86_cpu_desc { u8 x86_family; u8 x86_vendor; u8 x86_model; u8 x86_stepping; u32 x86_microcode_rev; }; union cpuid10_eax { struct { unsigned int version_id: 8; unsigned int num_counters: 8; unsigned int bit_width: 8; unsigned int mask_length: 8; } split; unsigned int full; }; union cpuid10_ebx { struct { unsigned int no_unhalted_core_cycles: 1; unsigned int no_instructions_retired: 1; unsigned int no_unhalted_reference_cycles: 1; unsigned int no_llc_reference: 1; unsigned int no_llc_misses: 1; unsigned int no_branch_instruction_retired: 1; unsigned int no_branch_misses_retired: 1; } split; unsigned int full; }; union cpuid10_edx { struct { unsigned int num_counters_fixed: 5; unsigned int bit_width_fixed: 8; unsigned int reserved1: 2; unsigned int anythread_deprecated: 1; unsigned int reserved2: 16; } split; unsigned int full; }; struct perf_pmu_format_hybrid_attr { struct device_attribute attr; u64 pmu_type; }; typedef int perf_snapshot_branch_stack_t(struct perf_branch_entry *, unsigned int); enum { LBR_FORMAT_32 = 0, LBR_FORMAT_LIP = 1, LBR_FORMAT_EIP = 2, LBR_FORMAT_EIP_FLAGS = 3, LBR_FORMAT_EIP_FLAGS2 = 4, LBR_FORMAT_INFO = 5, LBR_FORMAT_TIME = 6, LBR_FORMAT_MAX_KNOWN = 6, }; union x86_pmu_config { struct { u64 event: 8; u64 umask: 8; u64 usr: 1; u64 os: 1; u64 edge: 1; u64 pc: 1; u64 interrupt: 1; u64 __reserved1: 1; u64 en: 1; u64 inv: 1; u64 cmask: 8; u64 event2: 4; u64 __reserved2: 4; u64 go: 1; u64 ho: 1; } bits; u64 value; }; enum pageflags { PG_locked = 0, PG_referenced = 1, PG_uptodate = 2, PG_dirty = 3, PG_lru = 4, PG_active = 5, PG_workingset = 6, PG_waiters = 7, PG_error = 8, PG_slab = 9, PG_owner_priv_1 = 10, PG_arch_1 = 11, PG_reserved = 12, PG_private = 13, PG_private_2 = 14, PG_writeback = 15, PG_head = 16, PG_mappedtodisk = 17, PG_reclaim = 18, PG_swapbacked = 19, PG_unevictable = 20, PG_mlocked = 21, PG_uncached = 22, PG_arch_2 = 23, __NR_PAGEFLAGS = 24, PG_readahead = 18, PG_checked = 10, PG_swapcache = 10, PG_fscache = 14, PG_pinned = 10, PG_savepinned = 3, PG_foreign = 10, PG_xen_remapped = 10, PG_slob_free = 13, PG_double_map = 6, PG_isolated = 18, PG_reported = 2, }; struct bts_ctx { struct perf_output_handle handle; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; struct debug_store ds_back; int state; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; enum { BTS_STATE_STOPPED = 0, BTS_STATE_INACTIVE = 1, BTS_STATE_ACTIVE = 2, }; struct bts_phys { struct page *page; long unsigned int size; long unsigned int offset; long unsigned int displacement; }; struct bts_buffer { size_t real_size; unsigned int nr_pages; unsigned int nr_bufs; unsigned int cur_buf; bool snapshot; local_t data_size; local_t head; long unsigned int end; void **data_pages; struct bts_phys buf[0]; }; struct lbr_entry { u64 from; u64 to; u64 info; }; struct x86_hw_tss { u32 reserved1; u64 sp0; u64 sp1; u64 sp2; u64 reserved2; u64 ist[7]; u32 reserved3; u32 reserved4; u16 reserved5; u16 io_bitmap_base; } __attribute__((packed)); struct entry_stack { char stack[4096]; }; struct entry_stack_page { struct entry_stack stack; }; struct x86_io_bitmap { u64 prev_sequence; unsigned int prev_max; long unsigned int bitmap[1025]; long unsigned int mapall[1025]; }; struct tss_struct { struct x86_hw_tss x86_tss; struct x86_io_bitmap io_bitmap; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct debug_store_buffers { char bts_buffer[65536]; char pebs_buffer[65536]; }; struct cea_exception_stacks { char DF_stack_guard[4096]; char DF_stack[8192]; char NMI_stack_guard[4096]; char NMI_stack[8192]; char DB_stack_guard[4096]; char DB_stack[8192]; char MCE_stack_guard[4096]; char MCE_stack[8192]; char VC_stack_guard[4096]; char VC_stack[8192]; char VC2_stack_guard[4096]; char VC2_stack[8192]; char IST_top_guard[4096]; }; struct cpu_entry_area { char gdt[4096]; struct entry_stack_page entry_stack_page; struct tss_struct tss; struct cea_exception_stacks estacks; struct debug_store cpu_debug_store; struct debug_store_buffers cpu_debug_buffers; }; struct pebs_basic { u64 format_size; u64 ip; u64 applicable_counters; u64 tsc; }; struct pebs_meminfo { u64 address; u64 aux; u64 latency; u64 tsx_tuning; }; struct pebs_gprs { u64 flags; u64 ip; u64 ax; u64 cx; u64 dx; u64 bx; u64 sp; u64 bp; u64 si; u64 di; u64 r8; u64 r9; u64 r10; u64 r11; u64 r12; u64 r13; u64 r14; u64 r15; }; struct pebs_xmm { u64 xmm[32]; }; struct x86_perf_regs { struct pt_regs regs; u64 *xmm_regs; }; typedef unsigned int insn_attr_t; typedef unsigned char insn_byte_t; typedef int insn_value_t; struct insn_field { union { insn_value_t value; insn_byte_t bytes[4]; }; unsigned char got; unsigned char nbytes; }; struct insn { struct insn_field prefixes; struct insn_field rex_prefix; struct insn_field vex_prefix; struct insn_field opcode; struct insn_field modrm; struct insn_field sib; struct insn_field displacement; union { struct insn_field immediate; struct insn_field moffset1; struct insn_field immediate1; }; union { struct insn_field moffset2; struct insn_field immediate2; }; int emulate_prefix_size; insn_attr_t attr; unsigned char opnd_bytes; unsigned char addr_bytes; unsigned char length; unsigned char x86_64; const insn_byte_t *kaddr; const insn_byte_t *end_kaddr; const insn_byte_t *next_byte; }; enum { PERF_TXN_ELISION = 1, PERF_TXN_TRANSACTION = 2, PERF_TXN_SYNC = 4, PERF_TXN_ASYNC = 8, PERF_TXN_RETRY = 16, PERF_TXN_CONFLICT = 32, PERF_TXN_CAPACITY_WRITE = 64, PERF_TXN_CAPACITY_READ = 128, PERF_TXN_MAX = 256, PERF_TXN_ABORT_MASK = 0, PERF_TXN_ABORT_SHIFT = 32, }; struct perf_event_header { __u32 type; __u16 misc; __u16 size; }; union intel_x86_pebs_dse { u64 val; struct { unsigned int ld_dse: 4; unsigned int ld_stlb_miss: 1; unsigned int ld_locked: 1; unsigned int ld_data_blk: 1; unsigned int ld_addr_blk: 1; unsigned int ld_reserved: 24; }; struct { unsigned int st_l1d_hit: 1; unsigned int st_reserved1: 3; unsigned int st_stlb_miss: 1; unsigned int st_locked: 1; unsigned int st_reserved2: 26; }; struct { unsigned int st_lat_dse: 4; unsigned int st_lat_stlb_miss: 1; unsigned int st_lat_locked: 1; unsigned int ld_reserved3: 26; }; }; struct pebs_record_core { u64 flags; u64 ip; u64 ax; u64 bx; u64 cx; u64 dx; u64 si; u64 di; u64 bp; u64 sp; u64 r8; u64 r9; u64 r10; u64 r11; u64 r12; u64 r13; u64 r14; u64 r15; }; struct pebs_record_nhm { u64 flags; u64 ip; u64 ax; u64 bx; u64 cx; u64 dx; u64 si; u64 di; u64 bp; u64 sp; u64 r8; u64 r9; u64 r10; u64 r11; u64 r12; u64 r13; u64 r14; u64 r15; u64 status; u64 dla; u64 dse; u64 lat; }; union hsw_tsx_tuning { struct { u32 cycles_last_block: 32; u32 hle_abort: 1; u32 rtm_abort: 1; u32 instruction_abort: 1; u32 non_instruction_abort: 1; u32 retry: 1; u32 data_conflict: 1; u32 capacity_writes: 1; u32 capacity_reads: 1; }; u64 value; }; struct pebs_record_skl { u64 flags; u64 ip; u64 ax; u64 bx; u64 cx; u64 dx; u64 si; u64 di; u64 bp; u64 sp; u64 r8; u64 r9; u64 r10; u64 r11; u64 r12; u64 r13; u64 r14; u64 r15; u64 status; u64 dla; u64 dse; u64 lat; u64 real_ip; u64 tsx_tuning; u64 tsc; }; struct bts_record { u64 from; u64 to; u64 flags; }; enum { PERF_BR_UNKNOWN = 0, PERF_BR_COND = 1, PERF_BR_UNCOND = 2, PERF_BR_IND = 3, PERF_BR_CALL = 4, PERF_BR_IND_CALL = 5, PERF_BR_RET = 6, PERF_BR_SYSCALL = 7, PERF_BR_SYSRET = 8, PERF_BR_COND_CALL = 9, PERF_BR_COND_RET = 10, PERF_BR_MAX = 11, }; enum xfeature { XFEATURE_FP = 0, XFEATURE_SSE = 1, XFEATURE_YMM = 2, XFEATURE_BNDREGS = 3, XFEATURE_BNDCSR = 4, XFEATURE_OPMASK = 5, XFEATURE_ZMM_Hi256 = 6, XFEATURE_Hi16_ZMM = 7, XFEATURE_PT_UNIMPLEMENTED_SO_FAR = 8, XFEATURE_PKRU = 9, XFEATURE_PASID = 10, XFEATURE_RSRVD_COMP_11 = 11, XFEATURE_RSRVD_COMP_12 = 12, XFEATURE_RSRVD_COMP_13 = 13, XFEATURE_RSRVD_COMP_14 = 14, XFEATURE_LBR = 15, XFEATURE_RSRVD_COMP_16 = 16, XFEATURE_XTILE_CFG = 17, XFEATURE_XTILE_DATA = 18, XFEATURE_MAX = 19, }; struct arch_lbr_state { u64 lbr_ctl; u64 lbr_depth; u64 ler_from; u64 ler_to; u64 ler_info; struct lbr_entry entries[0]; }; union cpuid28_eax { struct { unsigned int lbr_depth_mask: 8; unsigned int reserved: 22; unsigned int lbr_deep_c_reset: 1; unsigned int lbr_lip: 1; } split; unsigned int full; }; union cpuid28_ebx { struct { unsigned int lbr_cpl: 1; unsigned int lbr_filter: 1; unsigned int lbr_call_stack: 1; } split; unsigned int full; }; union cpuid28_ecx { struct { unsigned int lbr_mispred: 1; unsigned int lbr_timed_lbr: 1; unsigned int lbr_br_type: 1; } split; unsigned int full; }; struct x86_pmu_lbr { unsigned int nr; unsigned int from; unsigned int to; unsigned int info; }; struct x86_perf_task_context_opt { int lbr_callstack_users; int lbr_stack_state; int log_id; }; struct x86_perf_task_context { u64 lbr_sel; int tos; int valid_lbrs; struct x86_perf_task_context_opt opt; struct lbr_entry lbr[32]; }; struct x86_perf_task_context_arch_lbr { struct x86_perf_task_context_opt opt; struct lbr_entry entries[0]; }; struct x86_perf_task_context_arch_lbr_xsave { struct x86_perf_task_context_opt opt; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; union { struct xregs_state xsave; struct { struct fxregs_state i387; struct xstate_header header; struct arch_lbr_state lbr; long: 64; long: 64; long: 64; }; }; }; enum { X86_BR_NONE = 0, X86_BR_USER = 1, X86_BR_KERNEL = 2, X86_BR_CALL = 4, X86_BR_RET = 8, X86_BR_SYSCALL = 16, X86_BR_SYSRET = 32, X86_BR_INT = 64, X86_BR_IRET = 128, X86_BR_JCC = 256, X86_BR_JMP = 512, X86_BR_IRQ = 1024, X86_BR_IND_CALL = 2048, X86_BR_ABORT = 4096, X86_BR_IN_TX = 8192, X86_BR_NO_TX = 16384, X86_BR_ZERO_CALL = 32768, X86_BR_CALL_STACK = 65536, X86_BR_IND_JMP = 131072, X86_BR_TYPE_SAVE = 262144, }; enum { LBR_NONE = 0, LBR_VALID = 1, }; enum { ARCH_LBR_BR_TYPE_JCC = 0, ARCH_LBR_BR_TYPE_NEAR_IND_JMP = 1, ARCH_LBR_BR_TYPE_NEAR_REL_JMP = 2, ARCH_LBR_BR_TYPE_NEAR_IND_CALL = 3, ARCH_LBR_BR_TYPE_NEAR_REL_CALL = 4, ARCH_LBR_BR_TYPE_NEAR_RET = 5, ARCH_LBR_BR_TYPE_KNOWN_MAX = 5, ARCH_LBR_BR_TYPE_MAP_MAX = 16, }; enum P4_EVENTS { P4_EVENT_TC_DELIVER_MODE = 0, P4_EVENT_BPU_FETCH_REQUEST = 1, P4_EVENT_ITLB_REFERENCE = 2, P4_EVENT_MEMORY_CANCEL = 3, P4_EVENT_MEMORY_COMPLETE = 4, P4_EVENT_LOAD_PORT_REPLAY = 5, P4_EVENT_STORE_PORT_REPLAY = 6, P4_EVENT_MOB_LOAD_REPLAY = 7, P4_EVENT_PAGE_WALK_TYPE = 8, P4_EVENT_BSQ_CACHE_REFERENCE = 9, P4_EVENT_IOQ_ALLOCATION = 10, P4_EVENT_IOQ_ACTIVE_ENTRIES = 11, P4_EVENT_FSB_DATA_ACTIVITY = 12, P4_EVENT_BSQ_ALLOCATION = 13, P4_EVENT_BSQ_ACTIVE_ENTRIES = 14, P4_EVENT_SSE_INPUT_ASSIST = 15, P4_EVENT_PACKED_SP_UOP = 16, P4_EVENT_PACKED_DP_UOP = 17, P4_EVENT_SCALAR_SP_UOP = 18, P4_EVENT_SCALAR_DP_UOP = 19, P4_EVENT_64BIT_MMX_UOP = 20, P4_EVENT_128BIT_MMX_UOP = 21, P4_EVENT_X87_FP_UOP = 22, P4_EVENT_TC_MISC = 23, P4_EVENT_GLOBAL_POWER_EVENTS = 24, P4_EVENT_TC_MS_XFER = 25, P4_EVENT_UOP_QUEUE_WRITES = 26, P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE = 27, P4_EVENT_RETIRED_BRANCH_TYPE = 28, P4_EVENT_RESOURCE_STALL = 29, P4_EVENT_WC_BUFFER = 30, P4_EVENT_B2B_CYCLES = 31, P4_EVENT_BNR = 32, P4_EVENT_SNOOP = 33, P4_EVENT_RESPONSE = 34, P4_EVENT_FRONT_END_EVENT = 35, P4_EVENT_EXECUTION_EVENT = 36, P4_EVENT_REPLAY_EVENT = 37, P4_EVENT_INSTR_RETIRED = 38, P4_EVENT_UOPS_RETIRED = 39, P4_EVENT_UOP_TYPE = 40, P4_EVENT_BRANCH_RETIRED = 41, P4_EVENT_MISPRED_BRANCH_RETIRED = 42, P4_EVENT_X87_ASSIST = 43, P4_EVENT_MACHINE_CLEAR = 44, P4_EVENT_INSTR_COMPLETED = 45, }; enum P4_EVENT_OPCODES { P4_EVENT_TC_DELIVER_MODE_OPCODE = 257, P4_EVENT_BPU_FETCH_REQUEST_OPCODE = 768, P4_EVENT_ITLB_REFERENCE_OPCODE = 6147, P4_EVENT_MEMORY_CANCEL_OPCODE = 517, P4_EVENT_MEMORY_COMPLETE_OPCODE = 2050, P4_EVENT_LOAD_PORT_REPLAY_OPCODE = 1026, P4_EVENT_STORE_PORT_REPLAY_OPCODE = 1282, P4_EVENT_MOB_LOAD_REPLAY_OPCODE = 770, P4_EVENT_PAGE_WALK_TYPE_OPCODE = 260, P4_EVENT_BSQ_CACHE_REFERENCE_OPCODE = 3079, P4_EVENT_IOQ_ALLOCATION_OPCODE = 774, P4_EVENT_IOQ_ACTIVE_ENTRIES_OPCODE = 6662, P4_EVENT_FSB_DATA_ACTIVITY_OPCODE = 5894, P4_EVENT_BSQ_ALLOCATION_OPCODE = 1287, P4_EVENT_BSQ_ACTIVE_ENTRIES_OPCODE = 1543, P4_EVENT_SSE_INPUT_ASSIST_OPCODE = 13313, P4_EVENT_PACKED_SP_UOP_OPCODE = 2049, P4_EVENT_PACKED_DP_UOP_OPCODE = 3073, P4_EVENT_SCALAR_SP_UOP_OPCODE = 2561, P4_EVENT_SCALAR_DP_UOP_OPCODE = 3585, P4_EVENT_64BIT_MMX_UOP_OPCODE = 513, P4_EVENT_128BIT_MMX_UOP_OPCODE = 6657, P4_EVENT_X87_FP_UOP_OPCODE = 1025, P4_EVENT_TC_MISC_OPCODE = 1537, P4_EVENT_GLOBAL_POWER_EVENTS_OPCODE = 4870, P4_EVENT_TC_MS_XFER_OPCODE = 1280, P4_EVENT_UOP_QUEUE_WRITES_OPCODE = 2304, P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE_OPCODE = 1282, P4_EVENT_RETIRED_BRANCH_TYPE_OPCODE = 1026, P4_EVENT_RESOURCE_STALL_OPCODE = 257, P4_EVENT_WC_BUFFER_OPCODE = 1285, P4_EVENT_B2B_CYCLES_OPCODE = 5635, P4_EVENT_BNR_OPCODE = 2051, P4_EVENT_SNOOP_OPCODE = 1539, P4_EVENT_RESPONSE_OPCODE = 1027, P4_EVENT_FRONT_END_EVENT_OPCODE = 2053, P4_EVENT_EXECUTION_EVENT_OPCODE = 3077, P4_EVENT_REPLAY_EVENT_OPCODE = 2309, P4_EVENT_INSTR_RETIRED_OPCODE = 516, P4_EVENT_UOPS_RETIRED_OPCODE = 260, P4_EVENT_UOP_TYPE_OPCODE = 514, P4_EVENT_BRANCH_RETIRED_OPCODE = 1541, P4_EVENT_MISPRED_BRANCH_RETIRED_OPCODE = 772, P4_EVENT_X87_ASSIST_OPCODE = 773, P4_EVENT_MACHINE_CLEAR_OPCODE = 517, P4_EVENT_INSTR_COMPLETED_OPCODE = 1796, }; enum P4_ESCR_EMASKS { P4_EVENT_TC_DELIVER_MODE__DD = 512, P4_EVENT_TC_DELIVER_MODE__DB = 1024, P4_EVENT_TC_DELIVER_MODE__DI = 2048, P4_EVENT_TC_DELIVER_MODE__BD = 4096, P4_EVENT_TC_DELIVER_MODE__BB = 8192, P4_EVENT_TC_DELIVER_MODE__BI = 16384, P4_EVENT_TC_DELIVER_MODE__ID = 32768, P4_EVENT_BPU_FETCH_REQUEST__TCMISS = 512, P4_EVENT_ITLB_REFERENCE__HIT = 512, P4_EVENT_ITLB_REFERENCE__MISS = 1024, P4_EVENT_ITLB_REFERENCE__HIT_UK = 2048, P4_EVENT_MEMORY_CANCEL__ST_RB_FULL = 2048, P4_EVENT_MEMORY_CANCEL__64K_CONF = 4096, P4_EVENT_MEMORY_COMPLETE__LSC = 512, P4_EVENT_MEMORY_COMPLETE__SSC = 1024, P4_EVENT_LOAD_PORT_REPLAY__SPLIT_LD = 1024, P4_EVENT_STORE_PORT_REPLAY__SPLIT_ST = 1024, P4_EVENT_MOB_LOAD_REPLAY__NO_STA = 1024, P4_EVENT_MOB_LOAD_REPLAY__NO_STD = 4096, P4_EVENT_MOB_LOAD_REPLAY__PARTIAL_DATA = 8192, P4_EVENT_MOB_LOAD_REPLAY__UNALGN_ADDR = 16384, P4_EVENT_PAGE_WALK_TYPE__DTMISS = 512, P4_EVENT_PAGE_WALK_TYPE__ITMISS = 1024, P4_EVENT_BSQ_CACHE_REFERENCE__RD_2ndL_HITS = 512, P4_EVENT_BSQ_CACHE_REFERENCE__RD_2ndL_HITE = 1024, P4_EVENT_BSQ_CACHE_REFERENCE__RD_2ndL_HITM = 2048, P4_EVENT_BSQ_CACHE_REFERENCE__RD_3rdL_HITS = 4096, P4_EVENT_BSQ_CACHE_REFERENCE__RD_3rdL_HITE = 8192, P4_EVENT_BSQ_CACHE_REFERENCE__RD_3rdL_HITM = 16384, P4_EVENT_BSQ_CACHE_REFERENCE__RD_2ndL_MISS = 131072, P4_EVENT_BSQ_CACHE_REFERENCE__RD_3rdL_MISS = 262144, P4_EVENT_BSQ_CACHE_REFERENCE__WR_2ndL_MISS = 524288, P4_EVENT_IOQ_ALLOCATION__DEFAULT = 512, P4_EVENT_IOQ_ALLOCATION__ALL_READ = 16384, P4_EVENT_IOQ_ALLOCATION__ALL_WRITE = 32768, P4_EVENT_IOQ_ALLOCATION__MEM_UC = 65536, P4_EVENT_IOQ_ALLOCATION__MEM_WC = 131072, P4_EVENT_IOQ_ALLOCATION__MEM_WT = 262144, P4_EVENT_IOQ_ALLOCATION__MEM_WP = 524288, P4_EVENT_IOQ_ALLOCATION__MEM_WB = 1048576, P4_EVENT_IOQ_ALLOCATION__OWN = 4194304, P4_EVENT_IOQ_ALLOCATION__OTHER = 8388608, P4_EVENT_IOQ_ALLOCATION__PREFETCH = 16777216, P4_EVENT_IOQ_ACTIVE_ENTRIES__DEFAULT = 512, P4_EVENT_IOQ_ACTIVE_ENTRIES__ALL_READ = 16384, P4_EVENT_IOQ_ACTIVE_ENTRIES__ALL_WRITE = 32768, P4_EVENT_IOQ_ACTIVE_ENTRIES__MEM_UC = 65536, P4_EVENT_IOQ_ACTIVE_ENTRIES__MEM_WC = 131072, P4_EVENT_IOQ_ACTIVE_ENTRIES__MEM_WT = 262144, P4_EVENT_IOQ_ACTIVE_ENTRIES__MEM_WP = 524288, P4_EVENT_IOQ_ACTIVE_ENTRIES__MEM_WB = 1048576, P4_EVENT_IOQ_ACTIVE_ENTRIES__OWN = 4194304, P4_EVENT_IOQ_ACTIVE_ENTRIES__OTHER = 8388608, P4_EVENT_IOQ_ACTIVE_ENTRIES__PREFETCH = 16777216, P4_EVENT_FSB_DATA_ACTIVITY__DRDY_DRV = 512, P4_EVENT_FSB_DATA_ACTIVITY__DRDY_OWN = 1024, P4_EVENT_FSB_DATA_ACTIVITY__DRDY_OTHER = 2048, P4_EVENT_FSB_DATA_ACTIVITY__DBSY_DRV = 4096, P4_EVENT_FSB_DATA_ACTIVITY__DBSY_OWN = 8192, P4_EVENT_FSB_DATA_ACTIVITY__DBSY_OTHER = 16384, P4_EVENT_BSQ_ALLOCATION__REQ_TYPE0 = 512, P4_EVENT_BSQ_ALLOCATION__REQ_TYPE1 = 1024, P4_EVENT_BSQ_ALLOCATION__REQ_LEN0 = 2048, P4_EVENT_BSQ_ALLOCATION__REQ_LEN1 = 4096, P4_EVENT_BSQ_ALLOCATION__REQ_IO_TYPE = 16384, P4_EVENT_BSQ_ALLOCATION__REQ_LOCK_TYPE = 32768, P4_EVENT_BSQ_ALLOCATION__REQ_CACHE_TYPE = 65536, P4_EVENT_BSQ_ALLOCATION__REQ_SPLIT_TYPE = 131072, P4_EVENT_BSQ_ALLOCATION__REQ_DEM_TYPE = 262144, P4_EVENT_BSQ_ALLOCATION__REQ_ORD_TYPE = 524288, P4_EVENT_BSQ_ALLOCATION__MEM_TYPE0 = 1048576, P4_EVENT_BSQ_ALLOCATION__MEM_TYPE1 = 2097152, P4_EVENT_BSQ_ALLOCATION__MEM_TYPE2 = 4194304, P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_TYPE0 = 512, P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_TYPE1 = 1024, P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_LEN0 = 2048, P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_LEN1 = 4096, P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_IO_TYPE = 16384, P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_LOCK_TYPE = 32768, P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_CACHE_TYPE = 65536, P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_SPLIT_TYPE = 131072, P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_DEM_TYPE = 262144, P4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_ORD_TYPE = 524288, P4_EVENT_BSQ_ACTIVE_ENTRIES__MEM_TYPE0 = 1048576, P4_EVENT_BSQ_ACTIVE_ENTRIES__MEM_TYPE1 = 2097152, P4_EVENT_BSQ_ACTIVE_ENTRIES__MEM_TYPE2 = 4194304, P4_EVENT_SSE_INPUT_ASSIST__ALL = 16777216, P4_EVENT_PACKED_SP_UOP__ALL = 16777216, P4_EVENT_PACKED_DP_UOP__ALL = 16777216, P4_EVENT_SCALAR_SP_UOP__ALL = 16777216, P4_EVENT_SCALAR_DP_UOP__ALL = 16777216, P4_EVENT_64BIT_MMX_UOP__ALL = 16777216, P4_EVENT_128BIT_MMX_UOP__ALL = 16777216, P4_EVENT_X87_FP_UOP__ALL = 16777216, P4_EVENT_TC_MISC__FLUSH = 8192, P4_EVENT_GLOBAL_POWER_EVENTS__RUNNING = 512, P4_EVENT_TC_MS_XFER__CISC = 512, P4_EVENT_UOP_QUEUE_WRITES__FROM_TC_BUILD = 512, P4_EVENT_UOP_QUEUE_WRITES__FROM_TC_DELIVER = 1024, P4_EVENT_UOP_QUEUE_WRITES__FROM_ROM = 2048, P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE__CONDITIONAL = 1024, P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE__CALL = 2048, P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE__RETURN = 4096, P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE__INDIRECT = 8192, P4_EVENT_RETIRED_BRANCH_TYPE__CONDITIONAL = 1024, P4_EVENT_RETIRED_BRANCH_TYPE__CALL = 2048, P4_EVENT_RETIRED_BRANCH_TYPE__RETURN = 4096, P4_EVENT_RETIRED_BRANCH_TYPE__INDIRECT = 8192, P4_EVENT_RESOURCE_STALL__SBFULL = 16384, P4_EVENT_WC_BUFFER__WCB_EVICTS = 512, P4_EVENT_WC_BUFFER__WCB_FULL_EVICTS = 1024, P4_EVENT_FRONT_END_EVENT__NBOGUS = 512, P4_EVENT_FRONT_END_EVENT__BOGUS = 1024, P4_EVENT_EXECUTION_EVENT__NBOGUS0 = 512, P4_EVENT_EXECUTION_EVENT__NBOGUS1 = 1024, P4_EVENT_EXECUTION_EVENT__NBOGUS2 = 2048, P4_EVENT_EXECUTION_EVENT__NBOGUS3 = 4096, P4_EVENT_EXECUTION_EVENT__BOGUS0 = 8192, P4_EVENT_EXECUTION_EVENT__BOGUS1 = 16384, P4_EVENT_EXECUTION_EVENT__BOGUS2 = 32768, P4_EVENT_EXECUTION_EVENT__BOGUS3 = 65536, P4_EVENT_REPLAY_EVENT__NBOGUS = 512, P4_EVENT_REPLAY_EVENT__BOGUS = 1024, P4_EVENT_INSTR_RETIRED__NBOGUSNTAG = 512, P4_EVENT_INSTR_RETIRED__NBOGUSTAG = 1024, P4_EVENT_INSTR_RETIRED__BOGUSNTAG = 2048, P4_EVENT_INSTR_RETIRED__BOGUSTAG = 4096, P4_EVENT_UOPS_RETIRED__NBOGUS = 512, P4_EVENT_UOPS_RETIRED__BOGUS = 1024, P4_EVENT_UOP_TYPE__TAGLOADS = 1024, P4_EVENT_UOP_TYPE__TAGSTORES = 2048, P4_EVENT_BRANCH_RETIRED__MMNP = 512, P4_EVENT_BRANCH_RETIRED__MMNM = 1024, P4_EVENT_BRANCH_RETIRED__MMTP = 2048, P4_EVENT_BRANCH_RETIRED__MMTM = 4096, P4_EVENT_MISPRED_BRANCH_RETIRED__NBOGUS = 512, P4_EVENT_X87_ASSIST__FPSU = 512, P4_EVENT_X87_ASSIST__FPSO = 1024, P4_EVENT_X87_ASSIST__POAO = 2048, P4_EVENT_X87_ASSIST__POAU = 4096, P4_EVENT_X87_ASSIST__PREA = 8192, P4_EVENT_MACHINE_CLEAR__CLEAR = 512, P4_EVENT_MACHINE_CLEAR__MOCLEAR = 1024, P4_EVENT_MACHINE_CLEAR__SMCLEAR = 2048, P4_EVENT_INSTR_COMPLETED__NBOGUS = 512, P4_EVENT_INSTR_COMPLETED__BOGUS = 1024, }; enum P4_PEBS_METRIC { P4_PEBS_METRIC__none = 0, P4_PEBS_METRIC__1stl_cache_load_miss_retired = 1, P4_PEBS_METRIC__2ndl_cache_load_miss_retired = 2, P4_PEBS_METRIC__dtlb_load_miss_retired = 3, P4_PEBS_METRIC__dtlb_store_miss_retired = 4, P4_PEBS_METRIC__dtlb_all_miss_retired = 5, P4_PEBS_METRIC__tagged_mispred_branch = 6, P4_PEBS_METRIC__mob_load_replay_retired = 7, P4_PEBS_METRIC__split_load_retired = 8, P4_PEBS_METRIC__split_store_retired = 9, P4_PEBS_METRIC__max = 10, }; struct p4_event_bind { unsigned int opcode; unsigned int escr_msr[2]; unsigned int escr_emask; unsigned int shared; char cntr[6]; }; struct p4_pebs_bind { unsigned int metric_pebs; unsigned int metric_vert; }; struct p4_event_alias { u64 original; u64 alternative; }; enum cpuid_regs_idx { CPUID_EAX = 0, CPUID_EBX = 1, CPUID_ECX = 2, CPUID_EDX = 3, }; struct dev_ext_attribute { struct device_attribute attr; void *var; }; enum pt_capabilities { PT_CAP_max_subleaf = 0, PT_CAP_cr3_filtering = 1, PT_CAP_psb_cyc = 2, PT_CAP_ip_filtering = 3, PT_CAP_mtc = 4, PT_CAP_ptwrite = 5, PT_CAP_power_event_trace = 6, PT_CAP_topa_output = 7, PT_CAP_topa_multiple_entries = 8, PT_CAP_single_range_output = 9, PT_CAP_output_subsys = 10, PT_CAP_payloads_lip = 11, PT_CAP_num_address_ranges = 12, PT_CAP_mtc_periods = 13, PT_CAP_cycle_thresholds = 14, PT_CAP_psb_periods = 15, }; enum perf_addr_filter_action_t { PERF_ADDR_FILTER_ACTION_STOP = 0, PERF_ADDR_FILTER_ACTION_START = 1, PERF_ADDR_FILTER_ACTION_FILTER = 2, }; struct perf_addr_filter { struct list_head entry; struct path path; long unsigned int offset; long unsigned int size; enum perf_addr_filter_action_t action; }; struct topa_entry { u64 end: 1; u64 rsvd0: 1; u64 intr: 1; u64 rsvd1: 1; u64 stop: 1; u64 rsvd2: 1; u64 size: 4; u64 rsvd3: 2; u64 base: 36; u64 rsvd4: 16; }; struct pt_pmu { struct pmu pmu; u32 caps[8]; bool vmx; bool branch_en_always_on; long unsigned int max_nonturbo_ratio; unsigned int tsc_art_num; unsigned int tsc_art_den; }; struct topa; struct pt_buffer { struct list_head tables; struct topa *first; struct topa *last; struct topa *cur; unsigned int cur_idx; size_t output_off; long unsigned int nr_pages; local_t data_size; local64_t head; bool snapshot; bool single; long int stop_pos; long int intr_pos; struct topa_entry *stop_te; struct topa_entry *intr_te; void **data_pages; }; struct topa { struct list_head list; u64 offset; size_t size; int last; unsigned int z_count; }; struct pt_filter { long unsigned int msr_a; long unsigned int msr_b; long unsigned int config; }; struct pt_filters { struct pt_filter filter[4]; unsigned int nr_filters; }; struct pt { struct perf_output_handle handle; struct pt_filters filters; int handle_nmi; int vmx_on; u64 output_base; u64 output_mask; }; struct pt_cap_desc { const char *name; u32 leaf; u8 reg; u32 mask; }; struct pt_address_range { long unsigned int msr_a; long unsigned int msr_b; unsigned int reg_off; }; struct topa_page { struct topa_entry table[507]; struct topa topa; }; enum cc_attr { CC_ATTR_MEM_ENCRYPT = 0, CC_ATTR_HOST_MEM_ENCRYPT = 1, CC_ATTR_GUEST_MEM_ENCRYPT = 2, CC_ATTR_GUEST_STATE_ENCRYPT = 3, }; struct real_mode_header { u32 text_start; u32 ro_end; u32 trampoline_start; u32 trampoline_header; u32 trampoline_pgd; u32 machine_real_restart_asm; u32 machine_real_restart_seg; }; struct trampoline_header { u64 start; u64 efer; u32 cr4; u32 flags; }; enum show_regs_mode { SHOW_REGS_SHORT = 0, SHOW_REGS_USER = 1, SHOW_REGS_ALL = 2, }; enum which_selector { FS = 0, GS = 1, }; struct sigcontext_64 { __u64 r8; __u64 r9; __u64 r10; __u64 r11; __u64 r12; __u64 r13; __u64 r14; __u64 r15; __u64 di; __u64 si; __u64 bp; __u64 bx; __u64 dx; __u64 ax; __u64 cx; __u64 sp; __u64 ip; __u64 flags; __u16 cs; __u16 gs; __u16 fs; __u16 ss; __u64 err; __u64 trapno; __u64 oldmask; __u64 cr2; __u64 fpstate; __u64 reserved1[8]; }; typedef sigset_t compat_sigset_t; struct sigaltstack { void *ss_sp; int ss_flags; size_t ss_size; }; typedef struct sigaltstack stack_t; struct siginfo { union { struct { int si_signo; int si_errno; int si_code; union __sifields _sifields; }; int _si_pad[32]; }; }; typedef struct siginfo siginfo_t; struct ksignal { struct k_sigaction ka; kernel_siginfo_t info; int sig; }; struct __large_struct { long unsigned int buf[100]; }; struct ucontext { long unsigned int uc_flags; struct ucontext *uc_link; stack_t uc_stack; struct sigcontext_64 uc_mcontext; sigset_t uc_sigmask; }; struct kernel_vm86_regs { struct pt_regs pt; short unsigned int es; short unsigned int __esh; short unsigned int ds; short unsigned int __dsh; short unsigned int fs; short unsigned int __fsh; short unsigned int gs; short unsigned int __gsh; }; struct rt_sigframe { char *pretcode; struct ucontext uc; struct siginfo info; }; enum bug_trap_type { BUG_TRAP_TYPE_NONE = 0, BUG_TRAP_TYPE_WARN = 1, BUG_TRAP_TYPE_BUG = 2, }; enum insn_mode { INSN_MODE_32 = 0, INSN_MODE_64 = 1, INSN_MODE_KERN = 2, INSN_NUM_MODES = 3, }; typedef u8 kprobe_opcode_t; struct kprobe; struct arch_specific_insn { kprobe_opcode_t *insn; unsigned int boostable: 1; unsigned char size; union { unsigned char opcode; struct { unsigned char type; } jcc; struct { unsigned char type; unsigned char asize; } loop; struct { unsigned char reg; } indirect; }; s32 rel32; void (*emulate_op)(struct kprobe *, struct pt_regs *); int tp_len; }; typedef int (*kprobe_pre_handler_t)(struct kprobe *, struct pt_regs *); typedef void (*kprobe_post_handler_t)(struct kprobe *, struct pt_regs *, long unsigned int); struct kprobe { struct hlist_node hlist; struct list_head list; long unsigned int nmissed; kprobe_opcode_t *addr; const char *symbol_name; unsigned int offset; kprobe_pre_handler_t pre_handler; kprobe_post_handler_t post_handler; kprobe_opcode_t opcode; struct arch_specific_insn ainsn; u32 flags; }; enum die_val { DIE_OOPS = 1, DIE_INT3 = 2, DIE_DEBUG = 3, DIE_PANIC = 4, DIE_NMI = 5, DIE_DIE = 6, DIE_KERNELDEBUG = 7, DIE_TRAP = 8, DIE_GPF = 9, DIE_CALL = 10, DIE_PAGE_FAULT = 11, DIE_NMIUNKNOWN = 12, }; enum blkg_iostat_type { BLKG_IOSTAT_READ = 0, BLKG_IOSTAT_WRITE = 1, BLKG_IOSTAT_DISCARD = 2, BLKG_IOSTAT_NR = 3, }; struct irqentry_state { union { bool exit_rcu; bool lockdep; }; }; typedef struct irqentry_state irqentry_state_t; enum kernel_gp_hint { GP_NO_HINT = 0, GP_NON_CANONICAL = 1, GP_CANONICAL = 2, }; struct bad_iret_stack { void *error_entry_ret; struct pt_regs regs; }; enum { GATE_INTERRUPT = 14, GATE_TRAP = 15, GATE_CALL = 12, GATE_TASK = 5, }; struct idt_data { unsigned int vector; unsigned int segment; struct idt_bits bits; const void *addr; }; enum irqreturn { IRQ_NONE = 0, IRQ_HANDLED = 1, IRQ_WAKE_THREAD = 2, }; typedef enum irqreturn irqreturn_t; typedef irqreturn_t (*irq_handler_t)(int, void *); struct irqaction { irq_handler_t handler; void *dev_id; void *percpu_dev_id; struct irqaction *next; irq_handler_t thread_fn; struct task_struct *thread; struct irqaction *secondary; unsigned int irq; unsigned int flags; long unsigned int thread_flags; long unsigned int thread_mask; const char *name; struct proc_dir_entry *dir; long: 64; long: 64; long: 64; long: 64; }; struct irq_affinity_notify { unsigned int irq; struct kref kref; struct work_struct work; void (*notify)(struct irq_affinity_notify *, const cpumask_t *); void (*release)(struct kref *); }; enum irqchip_irq_state { IRQCHIP_STATE_PENDING = 0, IRQCHIP_STATE_ACTIVE = 1, IRQCHIP_STATE_MASKED = 2, IRQCHIP_STATE_LINE_LEVEL = 3, }; struct irq_desc; typedef void (*irq_flow_handler_t)(struct irq_desc *); struct msi_desc; struct irq_common_data { unsigned int state_use_accessors; void *handler_data; struct msi_desc *msi_desc; cpumask_var_t affinity; cpumask_var_t effective_affinity; }; struct irq_chip; struct irq_data { u32 mask; unsigned int irq; long unsigned int hwirq; struct irq_common_data *common; struct irq_chip *chip; struct irq_domain *domain; struct irq_data *parent_data; void *chip_data; }; struct irq_desc { struct irq_common_data irq_common_data; struct irq_data irq_data; unsigned int *kstat_irqs; irq_flow_handler_t handle_irq; struct irqaction *action; unsigned int status_use_accessors; unsigned int core_internal_state__do_not_mess_with_it; unsigned int depth; unsigned int wake_depth; unsigned int tot_count; unsigned int irq_count; long unsigned int last_unhandled; unsigned int irqs_unhandled; atomic_t threads_handled; int threads_handled_last; raw_spinlock_t lock; struct cpumask *percpu_enabled; const struct cpumask *percpu_affinity; const struct cpumask *affinity_hint; struct irq_affinity_notify *affinity_notify; cpumask_var_t pending_mask; long unsigned int threads_oneshot; atomic_t threads_active; wait_queue_head_t wait_for_threads; struct proc_dir_entry *dir; struct callback_head rcu; struct kobject kobj; struct mutex request_mutex; int parent_irq; struct module *owner; const char *name; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct msi_msg; struct irq_chip { struct device *parent_device; const char *name; unsigned int (*irq_startup)(struct irq_data *); void (*irq_shutdown)(struct irq_data *); void (*irq_enable)(struct irq_data *); void (*irq_disable)(struct irq_data *); void (*irq_ack)(struct irq_data *); void (*irq_mask)(struct irq_data *); void (*irq_mask_ack)(struct irq_data *); void (*irq_unmask)(struct irq_data *); void (*irq_eoi)(struct irq_data *); int (*irq_set_affinity)(struct irq_data *, const struct cpumask *, bool); int (*irq_retrigger)(struct irq_data *); int (*irq_set_type)(struct irq_data *, unsigned int); int (*irq_set_wake)(struct irq_data *, unsigned int); void (*irq_bus_lock)(struct irq_data *); void (*irq_bus_sync_unlock)(struct irq_data *); void (*irq_suspend)(struct irq_data *); void (*irq_resume)(struct irq_data *); void (*irq_pm_shutdown)(struct irq_data *); void (*irq_calc_mask)(struct irq_data *); void (*irq_print_chip)(struct irq_data *, struct seq_file *); int (*irq_request_resources)(struct irq_data *); void (*irq_release_resources)(struct irq_data *); void (*irq_compose_msi_msg)(struct irq_data *, struct msi_msg *); void (*irq_write_msi_msg)(struct irq_data *, struct msi_msg *); int (*irq_get_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool *); int (*irq_set_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool); int (*irq_set_vcpu_affinity)(struct irq_data *, void *); void (*ipi_send_single)(struct irq_data *, unsigned int); void (*ipi_send_mask)(struct irq_data *, const struct cpumask *); int (*irq_nmi_setup)(struct irq_data *); void (*irq_nmi_teardown)(struct irq_data *); long unsigned int flags; }; typedef struct irq_desc *vector_irq_t[256]; struct trace_event_raw_x86_irq_vector { struct trace_entry ent; int vector; char __data[0]; }; struct trace_event_raw_vector_config { struct trace_entry ent; unsigned int irq; unsigned int vector; unsigned int cpu; unsigned int apicdest; char __data[0]; }; struct trace_event_raw_vector_mod { struct trace_entry ent; unsigned int irq; unsigned int vector; unsigned int cpu; unsigned int prev_vector; unsigned int prev_cpu; char __data[0]; }; struct trace_event_raw_vector_reserve { struct trace_entry ent; unsigned int irq; int ret; char __data[0]; }; struct trace_event_raw_vector_alloc { struct trace_entry ent; unsigned int irq; unsigned int vector; bool reserved; int ret; char __data[0]; }; struct trace_event_raw_vector_alloc_managed { struct trace_entry ent; unsigned int irq; unsigned int vector; int ret; char __data[0]; }; struct trace_event_raw_vector_activate { struct trace_entry ent; unsigned int irq; bool is_managed; bool can_reserve; bool reserve; char __data[0]; }; struct trace_event_raw_vector_teardown { struct trace_entry ent; unsigned int irq; bool is_managed; bool has_reserved; char __data[0]; }; struct trace_event_raw_vector_setup { struct trace_entry ent; unsigned int irq; bool is_legacy; int ret; char __data[0]; }; struct trace_event_raw_vector_free_moved { struct trace_entry ent; unsigned int irq; unsigned int cpu; unsigned int vector; bool is_managed; char __data[0]; }; struct trace_event_data_offsets_x86_irq_vector {}; struct trace_event_data_offsets_vector_config {}; struct trace_event_data_offsets_vector_mod {}; struct trace_event_data_offsets_vector_reserve {}; struct trace_event_data_offsets_vector_alloc {}; struct trace_event_data_offsets_vector_alloc_managed {}; struct trace_event_data_offsets_vector_activate {}; struct trace_event_data_offsets_vector_teardown {}; struct trace_event_data_offsets_vector_setup {}; struct trace_event_data_offsets_vector_free_moved {}; typedef void (*btf_trace_local_timer_entry)(void *, int); typedef void (*btf_trace_local_timer_exit)(void *, int); typedef void (*btf_trace_spurious_apic_entry)(void *, int); typedef void (*btf_trace_spurious_apic_exit)(void *, int); typedef void (*btf_trace_error_apic_entry)(void *, int); typedef void (*btf_trace_error_apic_exit)(void *, int); typedef void (*btf_trace_x86_platform_ipi_entry)(void *, int); typedef void (*btf_trace_x86_platform_ipi_exit)(void *, int); typedef void (*btf_trace_irq_work_entry)(void *, int); typedef void (*btf_trace_irq_work_exit)(void *, int); typedef void (*btf_trace_reschedule_entry)(void *, int); typedef void (*btf_trace_reschedule_exit)(void *, int); typedef void (*btf_trace_call_function_entry)(void *, int); typedef void (*btf_trace_call_function_exit)(void *, int); typedef void (*btf_trace_call_function_single_entry)(void *, int); typedef void (*btf_trace_call_function_single_exit)(void *, int); typedef void (*btf_trace_thermal_apic_entry)(void *, int); typedef void (*btf_trace_thermal_apic_exit)(void *, int); typedef void (*btf_trace_vector_config)(void *, unsigned int, unsigned int, unsigned int, unsigned int); typedef void (*btf_trace_vector_update)(void *, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int); typedef void (*btf_trace_vector_clear)(void *, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int); typedef void (*btf_trace_vector_reserve_managed)(void *, unsigned int, int); typedef void (*btf_trace_vector_reserve)(void *, unsigned int, int); typedef void (*btf_trace_vector_alloc)(void *, unsigned int, unsigned int, bool, int); typedef void (*btf_trace_vector_alloc_managed)(void *, unsigned int, unsigned int, int); typedef void (*btf_trace_vector_activate)(void *, unsigned int, bool, bool, bool); typedef void (*btf_trace_vector_deactivate)(void *, unsigned int, bool, bool, bool); typedef void (*btf_trace_vector_teardown)(void *, unsigned int, bool, bool); typedef void (*btf_trace_vector_setup)(void *, unsigned int, bool, int); typedef void (*btf_trace_vector_free_moved)(void *, unsigned int, unsigned int, unsigned int, bool); struct irq_stack { char stack[16384]; }; struct estack_pages { u32 offs; u16 size; u16 type; }; enum clocksource_ids { CSID_GENERIC = 0, CSID_ARM_ARCH_COUNTER = 1, CSID_MAX = 2, }; struct clocksource { u64 (*read)(struct clocksource *); u64 mask; u32 mult; u32 shift; u64 max_idle_ns; u32 maxadj; u32 uncertainty_margin; u64 max_cycles; const char *name; struct list_head list; int rating; enum clocksource_ids id; enum vdso_clock_mode vdso_clock_mode; long unsigned int flags; int (*enable)(struct clocksource *); void (*disable)(struct clocksource *); void (*suspend)(struct clocksource *); void (*resume)(struct clocksource *); void (*mark_unstable)(struct clocksource *); void (*tick_stable)(struct clocksource *); struct list_head wd_list; u64 cs_last; u64 wd_last; struct module *owner; }; enum clock_event_state { CLOCK_EVT_STATE_DETACHED = 0, CLOCK_EVT_STATE_SHUTDOWN = 1, CLOCK_EVT_STATE_PERIODIC = 2, CLOCK_EVT_STATE_ONESHOT = 3, CLOCK_EVT_STATE_ONESHOT_STOPPED = 4, }; struct clock_event_device { void (*event_handler)(struct clock_event_device *); int (*set_next_event)(long unsigned int, struct clock_event_device *); int (*set_next_ktime)(ktime_t, struct clock_event_device *); ktime_t next_event; u64 max_delta_ns; u64 min_delta_ns; u32 mult; u32 shift; enum clock_event_state state_use_accessors; unsigned int features; long unsigned int retries; int (*set_state_periodic)(struct clock_event_device *); int (*set_state_oneshot)(struct clock_event_device *); int (*set_state_oneshot_stopped)(struct clock_event_device *); int (*set_state_shutdown)(struct clock_event_device *); int (*tick_resume)(struct clock_event_device *); void (*broadcast)(const struct cpumask *); void (*suspend)(struct clock_event_device *); void (*resume)(struct clock_event_device *); long unsigned int min_delta_ticks; long unsigned int max_delta_ticks; const char *name; int rating; int irq; int bound_on; const struct cpumask *cpumask; struct list_head list; struct module *owner; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct irq_affinity_desc { struct cpumask mask; unsigned int is_managed: 1; }; struct x86_msi_addr_lo { union { struct { u32 reserved_0: 2; u32 dest_mode_logical: 1; u32 redirect_hint: 1; u32 reserved_1: 1; u32 virt_destid_8_14: 7; u32 destid_0_7: 8; u32 base_address: 12; }; struct { u32 dmar_reserved_0: 2; u32 dmar_index_15: 1; u32 dmar_subhandle_valid: 1; u32 dmar_format: 1; u32 dmar_index_0_14: 15; u32 dmar_base_address: 12; }; }; }; typedef struct x86_msi_addr_lo arch_msi_msg_addr_lo_t; struct x86_msi_addr_hi { u32 reserved: 8; u32 destid_8_31: 24; }; typedef struct x86_msi_addr_hi arch_msi_msg_addr_hi_t; struct x86_msi_data { u32 vector: 8; u32 delivery_mode: 3; u32 dest_mode_logical: 1; u32 reserved: 2; u32 active_low: 1; u32 is_level: 1; u32 dmar_subhandle; } __attribute__((packed)); typedef struct x86_msi_data arch_msi_msg_data_t; struct msi_msg { union { u32 address_lo; arch_msi_msg_addr_lo_t arch_addr_lo; }; union { u32 address_hi; arch_msi_msg_addr_hi_t arch_addr_hi; }; union { u32 data; arch_msi_msg_data_t arch_data; }; }; struct platform_msi_priv_data; struct platform_msi_desc { struct platform_msi_priv_data *msi_priv_data; u16 msi_index; }; struct fsl_mc_msi_desc { u16 msi_index; }; struct ti_sci_inta_msi_desc { u16 dev_index; }; struct msi_desc { struct list_head list; unsigned int irq; unsigned int nvec_used; struct device *dev; struct msi_msg msg; struct irq_affinity_desc *affinity; void (*write_msi_msg)(struct msi_desc *, void *); void *write_msi_msg_data; union { struct { union { u32 msi_mask; u32 msix_ctrl; }; struct { u8 is_msix: 1; u8 multiple: 3; u8 multi_cap: 3; u8 can_mask: 1; u8 is_64: 1; u8 is_virtual: 1; u16 entry_nr; unsigned int default_irq; } msi_attrib; union { u8 mask_pos; void *mask_base; }; }; struct platform_msi_desc platform; struct fsl_mc_msi_desc fsl_mc; struct ti_sci_inta_msi_desc inta; }; }; struct irq_chip_regs { long unsigned int enable; long unsigned int disable; long unsigned int mask; long unsigned int ack; long unsigned int eoi; long unsigned int type; long unsigned int polarity; }; struct irq_chip_type { struct irq_chip chip; struct irq_chip_regs regs; irq_flow_handler_t handler; u32 type; u32 mask_cache_priv; u32 *mask_cache; }; struct irq_chip_generic { raw_spinlock_t lock; void *reg_base; u32 (*reg_readl)(void *); void (*reg_writel)(u32, void *); void (*suspend)(struct irq_chip_generic *); void (*resume)(struct irq_chip_generic *); unsigned int irq_base; unsigned int irq_cnt; u32 mask_cache; u32 type_cache; u32 polarity_cache; u32 wake_enabled; u32 wake_active; unsigned int num_ct; void *private; long unsigned int installed; long unsigned int unused; struct irq_domain *domain; struct list_head list; struct irq_chip_type chip_types[0]; }; enum irq_gc_flags { IRQ_GC_INIT_MASK_CACHE = 1, IRQ_GC_INIT_NESTED_LOCK = 2, IRQ_GC_MASK_CACHE_PER_TYPE = 4, IRQ_GC_NO_MASK = 8, IRQ_GC_BE_IO = 16, }; struct irq_domain_chip_generic { unsigned int irqs_per_chip; unsigned int num_chips; unsigned int irq_flags_to_clear; unsigned int irq_flags_to_set; enum irq_gc_flags gc_flags; struct irq_chip_generic *gc[0]; }; struct x86_init_mpparse { void (*setup_ioapic_ids)(); void (*find_smp_config)(); void (*get_smp_config)(unsigned int); }; struct x86_init_resources { void (*probe_roms)(); void (*reserve_resources)(); char * (*memory_setup)(); }; struct x86_init_irqs { void (*pre_vector_init)(); void (*intr_init)(); void (*intr_mode_select)(); void (*intr_mode_init)(); struct irq_domain * (*create_pci_msi_domain)(); }; struct x86_init_oem { void (*arch_setup)(); void (*banner)(); }; struct x86_init_paging { void (*pagetable_init)(); }; struct x86_init_timers { void (*setup_percpu_clockev)(); void (*timer_init)(); void (*wallclock_init)(); }; struct x86_init_iommu { int (*iommu_init)(); }; struct x86_init_pci { int (*arch_init)(); int (*init)(); void (*init_irq)(); void (*fixup_irqs)(); }; struct x86_hyper_init { void (*init_platform)(); void (*guest_late_init)(); bool (*x2apic_available)(); bool (*msi_ext_dest_id)(); void (*init_mem_mapping)(); void (*init_after_bootmem)(); }; struct x86_init_acpi { void (*set_root_pointer)(u64); u64 (*get_root_pointer)(); void (*reduced_hw_early_init)(); }; struct x86_init_ops { struct x86_init_resources resources; struct x86_init_mpparse mpparse; struct x86_init_irqs irqs; struct x86_init_oem oem; struct x86_init_paging paging; struct x86_init_timers timers; struct x86_init_iommu iommu; struct x86_init_pci pci; struct x86_hyper_init hyper; struct x86_init_acpi acpi; }; enum lockdep_ok { LOCKDEP_STILL_OK = 0, LOCKDEP_NOW_UNRELIABLE = 1, }; typedef long unsigned int uintptr_t; typedef u64 uint64_t; struct trace_event_raw_nmi_handler { struct trace_entry ent; void *handler; s64 delta_ns; int handled; char __data[0]; }; struct trace_event_data_offsets_nmi_handler {}; typedef void (*btf_trace_nmi_handler)(void *, void *, s64, int); struct nmi_desc { raw_spinlock_t lock; struct list_head head; }; struct nmi_stats { unsigned int normal; unsigned int unknown; unsigned int external; unsigned int swallow; }; enum nmi_states { NMI_NOT_RUNNING = 0, NMI_EXECUTING = 1, NMI_LATCHED = 2, }; struct setup_data { __u64 next; __u32 type; __u32 len; __u8 data[0]; }; struct setup_indirect { __u32 type; __u32 reserved; __u64 len; __u64 addr; }; struct atomic_notifier_head { spinlock_t lock; struct notifier_block *head; }; struct io_tlb_slot; struct io_tlb_mem { phys_addr_t start; phys_addr_t end; long unsigned int nslabs; long unsigned int used; unsigned int index; spinlock_t lock; struct dentry *debugfs; bool late_alloc; bool force_bounce; bool for_alloc; struct io_tlb_slot *slots; }; enum efi_secureboot_mode { efi_secureboot_mode_unset = 0, efi_secureboot_mode_unknown = 1, efi_secureboot_mode_disabled = 2, efi_secureboot_mode_enabled = 3, }; struct io_tlb_slot { phys_addr_t orig_addr; size_t alloc_size; unsigned int list; }; enum e820_type { E820_TYPE_RAM = 1, E820_TYPE_RESERVED = 2, E820_TYPE_ACPI = 3, E820_TYPE_NVS = 4, E820_TYPE_UNUSABLE = 5, E820_TYPE_PMEM = 7, E820_TYPE_PRAM = 12, E820_TYPE_SOFT_RESERVED = 4026531839, E820_TYPE_RESERVED_KERN = 128, }; struct e820_entry { u64 addr; u64 size; enum e820_type type; } __attribute__((packed)); struct e820_table { __u32 nr_entries; struct e820_entry entries[131]; } __attribute__((packed)); struct x86_cpuinit_ops { void (*setup_percpu_clockev)(); void (*early_percpu_clock_init)(); void (*fixup_cpu_id)(struct cpuinfo_x86 *, int); }; struct x86_msi_ops { void (*restore_msi_irqs)(struct pci_dev *); }; struct x86_apic_ops { unsigned int (*io_apic_read)(unsigned int, unsigned int); void (*restore)(); }; struct syscore_ops { struct list_head node; int (*suspend)(); void (*resume)(); void (*shutdown)(); }; struct legacy_pic { int nr_legacy_irqs; struct irq_chip *chip; void (*mask)(unsigned int); void (*unmask)(unsigned int); void (*mask_all)(); void (*restore_mask)(); void (*init)(int); int (*probe)(); int (*irq_pending)(unsigned int); void (*make_irq)(unsigned int); }; enum jump_label_type { JUMP_LABEL_NOP = 0, JUMP_LABEL_JMP = 1, }; union text_poke_insn { u8 text[5]; struct { u8 opcode; s32 disp; } __attribute__((packed)); }; struct jump_label_patch { const void *code; int size; }; enum { JL_STATE_START = 0, JL_STATE_NO_UPDATE = 1, JL_STATE_UPDATE = 2, }; enum align_flags { ALIGN_VA_32 = 1, ALIGN_VA_64 = 2, }; struct va_alignment { int flags; long unsigned int mask; long unsigned int bits; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct vm_unmapped_area_info { long unsigned int flags; long unsigned int length; long unsigned int low_limit; long unsigned int high_limit; long unsigned int align_mask; long unsigned int align_offset; }; struct kobj_attribute { struct attribute attr; ssize_t (*show)(struct kobject *, struct kobj_attribute *, char *); ssize_t (*store)(struct kobject *, struct kobj_attribute *, const char *, size_t); }; enum { MEMREMAP_WB = 1, MEMREMAP_WT = 2, MEMREMAP_WC = 4, MEMREMAP_ENC = 8, MEMREMAP_DEC = 16, }; typedef void (*swap_func_t)(void *, void *, int); typedef int (*cmp_func_t)(const void *, const void *); enum { IORES_DESC_NONE = 0, IORES_DESC_CRASH_KERNEL = 1, IORES_DESC_ACPI_TABLES = 2, IORES_DESC_ACPI_NV_STORAGE = 3, IORES_DESC_PERSISTENT_MEMORY = 4, IORES_DESC_PERSISTENT_MEMORY_LEGACY = 5, IORES_DESC_DEVICE_PRIVATE_MEMORY = 6, IORES_DESC_RESERVED = 7, IORES_DESC_SOFT_RESERVED = 8, }; struct change_member { struct e820_entry *entry; long long unsigned int addr; }; struct iommu_group {}; struct scatterlist { long unsigned int page_link; unsigned int offset; unsigned int length; dma_addr_t dma_address; unsigned int dma_length; }; struct sg_table { struct scatterlist *sgl; unsigned int nents; unsigned int orig_nents; }; struct dma_map_ops { void * (*alloc)(struct device *, size_t, dma_addr_t *, gfp_t, long unsigned int); void (*free)(struct device *, size_t, void *, dma_addr_t, long unsigned int); struct page * (*alloc_pages)(struct device *, size_t, dma_addr_t *, enum dma_data_direction, gfp_t); void (*free_pages)(struct device *, size_t, struct page *, dma_addr_t, enum dma_data_direction); struct sg_table * (*alloc_noncontiguous)(struct device *, size_t, enum dma_data_direction, gfp_t, long unsigned int); void (*free_noncontiguous)(struct device *, size_t, struct sg_table *, enum dma_data_direction); int (*mmap)(struct device *, struct vm_area_struct *, void *, dma_addr_t, size_t, long unsigned int); int (*get_sgtable)(struct device *, struct sg_table *, void *, dma_addr_t, size_t, long unsigned int); dma_addr_t (*map_page)(struct device *, struct page *, long unsigned int, size_t, enum dma_data_direction, long unsigned int); void (*unmap_page)(struct device *, dma_addr_t, size_t, enum dma_data_direction, long unsigned int); int (*map_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction, long unsigned int); void (*unmap_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction, long unsigned int); dma_addr_t (*map_resource)(struct device *, phys_addr_t, size_t, enum dma_data_direction, long unsigned int); void (*unmap_resource)(struct device *, dma_addr_t, size_t, enum dma_data_direction, long unsigned int); void (*sync_single_for_cpu)(struct device *, dma_addr_t, size_t, enum dma_data_direction); void (*sync_single_for_device)(struct device *, dma_addr_t, size_t, enum dma_data_direction); void (*sync_sg_for_cpu)(struct device *, struct scatterlist *, int, enum dma_data_direction); void (*sync_sg_for_device)(struct device *, struct scatterlist *, int, enum dma_data_direction); void (*cache_sync)(struct device *, void *, size_t, enum dma_data_direction); int (*dma_supported)(struct device *, u64); u64 (*get_required_mask)(struct device *); size_t (*max_mapping_size)(struct device *); long unsigned int (*get_merge_boundary)(struct device *); }; struct iommu_table_entry { initcall_t detect; initcall_t depend; void (*early_init)(); void (*late_init)(); int flags; }; enum dmi_field { DMI_NONE = 0, DMI_BIOS_VENDOR = 1, DMI_BIOS_VERSION = 2, DMI_BIOS_DATE = 3, DMI_BIOS_RELEASE = 4, DMI_EC_FIRMWARE_RELEASE = 5, DMI_SYS_VENDOR = 6, DMI_PRODUCT_NAME = 7, DMI_PRODUCT_VERSION = 8, DMI_PRODUCT_SERIAL = 9, DMI_PRODUCT_UUID = 10, DMI_PRODUCT_SKU = 11, DMI_PRODUCT_FAMILY = 12, DMI_BOARD_VENDOR = 13, DMI_BOARD_NAME = 14, DMI_BOARD_VERSION = 15, DMI_BOARD_SERIAL = 16, DMI_BOARD_ASSET_TAG = 17, DMI_CHASSIS_VENDOR = 18, DMI_CHASSIS_TYPE = 19, DMI_CHASSIS_VERSION = 20, DMI_CHASSIS_SERIAL = 21, DMI_CHASSIS_ASSET_TAG = 22, DMI_STRING_MAX = 23, DMI_OEM_STRING = 24, }; enum { NONE_FORCE_HPET_RESUME = 0, OLD_ICH_FORCE_HPET_RESUME = 1, ICH_FORCE_HPET_RESUME = 2, VT8237_FORCE_HPET_RESUME = 3, NVIDIA_FORCE_HPET_RESUME = 4, ATI_FORCE_HPET_RESUME = 5, }; struct cpu { int node_id; int hotpluggable; struct device dev; }; struct x86_cpu { struct cpu cpu; }; struct paravirt_patch_site { u8 *instr; u8 type; u8 len; }; struct die_args { struct pt_regs *regs; const char *str; long int err; int trapnr; int signr; }; struct tlb_state_shared { bool is_lazy; }; struct smp_alt_module { struct module *mod; char *name; const s32 *locks; const s32 *locks_end; u8 *text; u8 *text_end; struct list_head next; }; typedef struct { struct mm_struct *mm; } temp_mm_state_t; struct text_poke_loc { s32 rel_addr; s32 rel32; u8 opcode; const u8 text[5]; u8 old; }; struct bp_patching_desc { struct text_poke_loc *vec; int nr_entries; atomic_t refs; }; enum { HW_BREAKPOINT_LEN_1 = 1, HW_BREAKPOINT_LEN_2 = 2, HW_BREAKPOINT_LEN_3 = 3, HW_BREAKPOINT_LEN_4 = 4, HW_BREAKPOINT_LEN_5 = 5, HW_BREAKPOINT_LEN_6 = 6, HW_BREAKPOINT_LEN_7 = 7, HW_BREAKPOINT_LEN_8 = 8, }; enum { HW_BREAKPOINT_EMPTY = 0, HW_BREAKPOINT_R = 1, HW_BREAKPOINT_W = 2, HW_BREAKPOINT_RW = 3, HW_BREAKPOINT_X = 4, HW_BREAKPOINT_INVALID = 7, }; typedef long long unsigned int cycles_t; struct system_counterval_t { u64 cycles; struct clocksource *cs; }; enum { WORK_STRUCT_PENDING_BIT = 0, WORK_STRUCT_INACTIVE_BIT = 1, WORK_STRUCT_PWQ_BIT = 2, WORK_STRUCT_LINKED_BIT = 3, WORK_STRUCT_COLOR_SHIFT = 4, WORK_STRUCT_COLOR_BITS = 4, WORK_STRUCT_PENDING = 1, WORK_STRUCT_INACTIVE = 2, WORK_STRUCT_PWQ = 4, WORK_STRUCT_LINKED = 8, WORK_STRUCT_STATIC = 0, WORK_NR_COLORS = 16, WORK_CPU_UNBOUND = 8, WORK_STRUCT_FLAG_BITS = 8, WORK_OFFQ_FLAG_BASE = 4, __WORK_OFFQ_CANCELING = 4, WORK_OFFQ_CANCELING = 16, WORK_OFFQ_FLAG_BITS = 1, WORK_OFFQ_POOL_SHIFT = 5, WORK_OFFQ_LEFT = 59, WORK_OFFQ_POOL_BITS = 31, WORK_OFFQ_POOL_NONE = 2147483647, WORK_STRUCT_FLAG_MASK = 255, WORK_STRUCT_WQ_DATA_MASK = 4294967040, WORK_STRUCT_NO_POOL = 4294967264, WORK_BUSY_PENDING = 1, WORK_BUSY_RUNNING = 2, WORKER_DESC_LEN = 24, }; typedef struct { seqcount_t seqcount; } seqcount_latch_t; struct cyc2ns { struct cyc2ns_data data[2]; seqcount_latch_t seq; }; struct x86_cpu_id { __u16 vendor; __u16 family; __u16 model; __u16 steppings; __u16 feature; kernel_ulong_t driver_data; }; struct muldiv { u32 multiplier; u32 divider; }; struct freq_desc { bool use_msr_plat; struct muldiv muldiv[16]; u32 freqs[16]; u32 mask; }; struct dmi_strmatch { unsigned char slot: 7; unsigned char exact_match: 1; char substr[79]; }; struct dmi_system_id { int (*callback)(const struct dmi_system_id *); const char *ident; struct dmi_strmatch matches[4]; void *driver_data; }; struct pdev_archdata {}; struct mfd_cell; struct platform_device_id; struct platform_device { const char *name; int id; bool id_auto; struct device dev; u64 platform_dma_mask; struct device_dma_parameters dma_parms; u32 num_resources; struct resource *resource; const struct platform_device_id *id_entry; char *driver_override; struct mfd_cell *mfd_cell; struct pdev_archdata archdata; }; struct platform_device_id { char name[20]; kernel_ulong_t driver_data; }; struct rtc_time { int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; int tm_yday; int tm_isdst; }; struct pnp_device_id { __u8 id[8]; kernel_ulong_t driver_data; }; struct pnp_card_device_id { __u8 id[8]; kernel_ulong_t driver_data; struct { __u8 id[8]; } devs[8]; }; struct acpi_table_header { char signature[4]; u32 length; u8 revision; u8 checksum; char oem_id[6]; char oem_table_id[8]; u32 oem_revision; char asl_compiler_id[4]; u32 asl_compiler_revision; }; struct acpi_generic_address { u8 space_id; u8 bit_width; u8 bit_offset; u8 access_width; u64 address; } __attribute__((packed)); struct acpi_table_fadt { struct acpi_table_header header; u32 facs; u32 dsdt; u8 model; u8 preferred_profile; u16 sci_interrupt; u32 smi_command; u8 acpi_enable; u8 acpi_disable; u8 s4_bios_request; u8 pstate_control; u32 pm1a_event_block; u32 pm1b_event_block; u32 pm1a_control_block; u32 pm1b_control_block; u32 pm2_control_block; u32 pm_timer_block; u32 gpe0_block; u32 gpe1_block; u8 pm1_event_length; u8 pm1_control_length; u8 pm2_control_length; u8 pm_timer_length; u8 gpe0_block_length; u8 gpe1_block_length; u8 gpe1_base; u8 cst_control; u16 c2_latency; u16 c3_latency; u16 flush_size; u16 flush_stride; u8 duty_offset; u8 duty_width; u8 day_alarm; u8 month_alarm; u8 century; u16 boot_flags; u8 reserved; u32 flags; struct acpi_generic_address reset_register; u8 reset_value; u16 arm_boot_flags; u8 minor_revision; u64 Xfacs; u64 Xdsdt; struct acpi_generic_address xpm1a_event_block; struct acpi_generic_address xpm1b_event_block; struct acpi_generic_address xpm1a_control_block; struct acpi_generic_address xpm1b_control_block; struct acpi_generic_address xpm2_control_block; struct acpi_generic_address xpm_timer_block; struct acpi_generic_address xgpe0_block; struct acpi_generic_address xgpe1_block; struct acpi_generic_address sleep_control; struct acpi_generic_address sleep_status; u64 hypervisor_id; } __attribute__((packed)); struct pnp_protocol; struct pnp_id; struct pnp_card { struct device dev; unsigned char number; struct list_head global_list; struct list_head protocol_list; struct list_head devices; struct pnp_protocol *protocol; struct pnp_id *id; char name[50]; unsigned char pnpver; unsigned char productver; unsigned int serial; unsigned char checksum; struct proc_dir_entry *procdir; }; struct pnp_dev; struct pnp_protocol { struct list_head protocol_list; char *name; int (*get)(struct pnp_dev *); int (*set)(struct pnp_dev *); int (*disable)(struct pnp_dev *); bool (*can_wakeup)(struct pnp_dev *); int (*suspend)(struct pnp_dev *, pm_message_t); int (*resume)(struct pnp_dev *); unsigned char number; struct device dev; struct list_head cards; struct list_head devices; }; struct pnp_id { char id[8]; struct pnp_id *next; }; struct pnp_card_driver; struct pnp_card_link { struct pnp_card *card; struct pnp_card_driver *driver; void *driver_data; pm_message_t pm_state; }; struct pnp_driver { const char *name; const struct pnp_device_id *id_table; unsigned int flags; int (*probe)(struct pnp_dev *, const struct pnp_device_id *); void (*remove)(struct pnp_dev *); void (*shutdown)(struct pnp_dev *); int (*suspend)(struct pnp_dev *, pm_message_t); int (*resume)(struct pnp_dev *); struct device_driver driver; }; struct pnp_card_driver { struct list_head global_list; char *name; const struct pnp_card_device_id *id_table; unsigned int flags; int (*probe)(struct pnp_card_link *, const struct pnp_card_device_id *); void (*remove)(struct pnp_card_link *); int (*suspend)(struct pnp_card_link *, pm_message_t); int (*resume)(struct pnp_card_link *); struct pnp_driver link; }; struct pnp_dev { struct device dev; u64 dma_mask; unsigned int number; int status; struct list_head global_list; struct list_head protocol_list; struct list_head card_list; struct list_head rdev_list; struct pnp_protocol *protocol; struct pnp_card *card; struct pnp_driver *driver; struct pnp_card_link *card_link; struct pnp_id *id; int active; int capabilities; unsigned int num_dependent_sets; struct list_head resources; struct list_head options; char name[50]; int flags; struct proc_dir_entry *procent; void *data; }; enum insn_type { CALL = 0, NOP = 1, JMP = 2, RET = 3, }; struct user_desc { unsigned int entry_number; unsigned int base_addr; unsigned int limit; unsigned int seg_32bit: 1; unsigned int contents: 2; unsigned int read_exec_only: 1; unsigned int limit_in_pages: 1; unsigned int seg_not_present: 1; unsigned int useable: 1; unsigned int lm: 1; }; enum idle_boot_override { IDLE_NO_OVERRIDE = 0, IDLE_HALT = 1, IDLE_NOMWAIT = 2, IDLE_POLL = 3, }; struct plist_head { struct list_head node_list; }; enum pm_qos_type { PM_QOS_UNITIALIZED = 0, PM_QOS_MAX = 1, PM_QOS_MIN = 2, }; struct pm_qos_constraints { struct plist_head list; s32 target_value; s32 default_value; s32 no_constraint_value; enum pm_qos_type type; struct blocking_notifier_head *notifiers; }; struct freq_constraints { struct pm_qos_constraints min_freq; struct blocking_notifier_head min_freq_notifiers; struct pm_qos_constraints max_freq; struct blocking_notifier_head max_freq_notifiers; }; struct pm_qos_flags { struct list_head list; s32 effective_flags; }; struct dev_pm_qos_request; struct dev_pm_qos { struct pm_qos_constraints resume_latency; struct pm_qos_constraints latency_tolerance; struct freq_constraints freq; struct pm_qos_flags flags; struct dev_pm_qos_request *resume_latency_req; struct dev_pm_qos_request *latency_tolerance_req; struct dev_pm_qos_request *flags_req; }; enum tick_broadcast_mode { TICK_BROADCAST_OFF = 0, TICK_BROADCAST_ON = 1, TICK_BROADCAST_FORCE = 2, }; enum tick_broadcast_state { TICK_BROADCAST_EXIT = 0, TICK_BROADCAST_ENTER = 1, }; struct pm_qos_flags_request { struct list_head node; s32 flags; }; enum freq_qos_req_type { FREQ_QOS_MIN = 1, FREQ_QOS_MAX = 2, }; struct freq_qos_request { enum freq_qos_req_type type; struct plist_node pnode; struct freq_constraints *qos; }; enum dev_pm_qos_req_type { DEV_PM_QOS_RESUME_LATENCY = 1, DEV_PM_QOS_LATENCY_TOLERANCE = 2, DEV_PM_QOS_MIN_FREQUENCY = 3, DEV_PM_QOS_MAX_FREQUENCY = 4, DEV_PM_QOS_FLAGS = 5, }; struct dev_pm_qos_request { enum dev_pm_qos_req_type type; union { struct plist_node pnode; struct pm_qos_flags_request flr; struct freq_qos_request freq; } data; struct device *dev; }; struct inactive_task_frame { long unsigned int r15; long unsigned int r14; long unsigned int r13; long unsigned int r12; long unsigned int bx; long unsigned int bp; long unsigned int ret_addr; }; struct fork_frame { struct inactive_task_frame frame; struct pt_regs regs; }; struct ssb_state { struct ssb_state *shared_state; raw_spinlock_t lock; unsigned int disable_state; long unsigned int local_state; }; struct fpu_state_config { unsigned int max_size; unsigned int default_size; u64 max_features; u64 default_features; u64 legacy_features; }; struct trace_event_raw_x86_fpu { struct trace_entry ent; struct fpu *fpu; bool load_fpu; u64 xfeatures; u64 xcomp_bv; char __data[0]; }; struct trace_event_data_offsets_x86_fpu {}; typedef void (*btf_trace_x86_fpu_before_save)(void *, struct fpu *); typedef void (*btf_trace_x86_fpu_after_save)(void *, struct fpu *); typedef void (*btf_trace_x86_fpu_before_restore)(void *, struct fpu *); typedef void (*btf_trace_x86_fpu_after_restore)(void *, struct fpu *); typedef void (*btf_trace_x86_fpu_regs_activated)(void *, struct fpu *); typedef void (*btf_trace_x86_fpu_regs_deactivated)(void *, struct fpu *); typedef void (*btf_trace_x86_fpu_init_state)(void *, struct fpu *); typedef void (*btf_trace_x86_fpu_dropped)(void *, struct fpu *); typedef void (*btf_trace_x86_fpu_copy_src)(void *, struct fpu *); typedef void (*btf_trace_x86_fpu_copy_dst)(void *, struct fpu *); typedef void (*btf_trace_x86_fpu_xstate_check_failed)(void *, struct fpu *); struct user32_fxsr_struct { short unsigned int cwd; short unsigned int swd; short unsigned int twd; short unsigned int fop; int fip; int fcs; int foo; int fos; int mxcsr; int reserved; int st_space[32]; int xmm_space[32]; int padding[56]; }; struct membuf { void *p; size_t left; }; struct user_regset; typedef int user_regset_active_fn(struct task_struct *, const struct user_regset *); typedef int user_regset_get2_fn(struct task_struct *, const struct user_regset *, struct membuf); typedef int user_regset_set_fn(struct task_struct *, const struct user_regset *, unsigned int, unsigned int, const void *, const void *); typedef int user_regset_writeback_fn(struct task_struct *, const struct user_regset *, int); struct user_regset { user_regset_get2_fn *regset_get; user_regset_set_fn *set; user_regset_active_fn *active; user_regset_writeback_fn *writeback; unsigned int n; unsigned int size; unsigned int align; unsigned int bias; unsigned int core_note_type; }; enum xstate_copy_mode { XSTATE_COPY_FP = 0, XSTATE_COPY_FX = 1, XSTATE_COPY_XSAVE = 2, }; struct _fpx_sw_bytes { __u32 magic1; __u32 extended_size; __u64 xfeatures; __u32 xstate_size; __u32 padding[7]; }; struct _fpreg { __u16 significand[4]; __u16 exponent; }; struct _fpxreg { __u16 significand[4]; __u16 exponent; __u16 padding[3]; }; struct _xmmreg { __u32 element[4]; }; struct _fpstate_32 { __u32 cw; __u32 sw; __u32 tag; __u32 ipoff; __u32 cssel; __u32 dataoff; __u32 datasel; struct _fpreg _st[8]; __u16 status; __u16 magic; __u32 _fxsr_env[6]; __u32 mxcsr; __u32 reserved; struct _fpxreg _fxsr_st[8]; struct _xmmreg _xmm[8]; union { __u32 padding1[44]; __u32 padding[44]; }; union { __u32 padding2[12]; struct _fpx_sw_bytes sw_reserved; }; }; struct user_i387_ia32_struct { u32 cwd; u32 swd; u32 twd; u32 fip; u32 fcs; u32 foo; u32 fos; u32 st_space[20]; }; struct pkru_state { u32 pkru; u32 pad; }; struct user_regset_view { const char *name; const struct user_regset *regsets; unsigned int n; u32 e_flags; u16 e_machine; u8 ei_osabi; }; enum x86_regset { REGSET_GENERAL = 0, REGSET_FP = 1, REGSET_XFP = 2, REGSET_IOPERM64 = 2, REGSET_XSTATE = 3, REGSET_TLS = 4, REGSET_IOPERM32 = 5, }; struct pt_regs_offset { const char *name; int offset; }; enum syscall_work_bit { SYSCALL_WORK_BIT_SECCOMP = 0, SYSCALL_WORK_BIT_SYSCALL_TRACEPOINT = 1, SYSCALL_WORK_BIT_SYSCALL_TRACE = 2, SYSCALL_WORK_BIT_SYSCALL_EMU = 3, SYSCALL_WORK_BIT_SYSCALL_AUDIT = 4, SYSCALL_WORK_BIT_SYSCALL_USER_DISPATCH = 5, SYSCALL_WORK_BIT_SYSCALL_EXIT_TRAP = 6, }; typedef bool (*stack_trace_consume_fn)(void *, long unsigned int); struct stack_frame_user { const void *next_fp; long unsigned int ret_addr; }; enum cache_type { CACHE_TYPE_NOCACHE = 0, CACHE_TYPE_INST = 1, CACHE_TYPE_DATA = 2, CACHE_TYPE_SEPARATE = 3, CACHE_TYPE_UNIFIED = 4, }; struct cacheinfo { unsigned int id; enum cache_type type; unsigned int level; unsigned int coherency_line_size; unsigned int number_of_sets; unsigned int ways_of_associativity; unsigned int physical_line_partition; unsigned int size; cpumask_t shared_cpu_map; unsigned int attributes; void *fw_token; bool disable_sysfs; void *priv; }; struct cpu_cacheinfo { struct cacheinfo *info_list; unsigned int num_levels; unsigned int num_leaves; bool cpu_map_populated; }; struct amd_l3_cache { unsigned int indices; u8 subcaches[4]; }; struct threshold_block { unsigned int block; unsigned int bank; unsigned int cpu; u32 address; u16 interrupt_enable; bool interrupt_capable; u16 threshold_limit; struct kobject kobj; struct list_head miscj; }; struct threshold_bank { struct kobject *kobj; struct threshold_block *blocks; refcount_t cpus; unsigned int shared; }; struct amd_northbridge { struct pci_dev *root; struct pci_dev *misc; struct pci_dev *link; struct amd_l3_cache l3_cache; struct threshold_bank *bank4; }; struct _cache_table { unsigned char descriptor; char cache_type; short int size; }; enum _cache_type { CTYPE_NULL = 0, CTYPE_DATA = 1, CTYPE_INST = 2, CTYPE_UNIFIED = 3, }; union _cpuid4_leaf_eax { struct { enum _cache_type type: 5; unsigned int level: 3; unsigned int is_self_initializing: 1; unsigned int is_fully_associative: 1; unsigned int reserved: 4; unsigned int num_threads_sharing: 12; unsigned int num_cores_on_die: 6; } split; u32 full; }; union _cpuid4_leaf_ebx { struct { unsigned int coherency_line_size: 12; unsigned int physical_line_partition: 10; unsigned int ways_of_associativity: 10; } split; u32 full; }; union _cpuid4_leaf_ecx { struct { unsigned int number_of_sets: 32; } split; u32 full; }; struct _cpuid4_info_regs { union _cpuid4_leaf_eax eax; union _cpuid4_leaf_ebx ebx; union _cpuid4_leaf_ecx ecx; unsigned int id; long unsigned int size; struct amd_northbridge *nb; }; union l1_cache { struct { unsigned int line_size: 8; unsigned int lines_per_tag: 8; unsigned int assoc: 8; unsigned int size_in_kb: 8; }; unsigned int val; }; union l2_cache { struct { unsigned int line_size: 8; unsigned int lines_per_tag: 4; unsigned int assoc: 4; unsigned int size_in_kb: 16; }; unsigned int val; }; union l3_cache { struct { unsigned int line_size: 8; unsigned int lines_per_tag: 4; unsigned int assoc: 4; unsigned int res: 2; unsigned int size_encoded: 14; }; unsigned int val; }; struct cpuid_bit { u16 feature; u8 reg; u8 bit; u32 level; u32 sub_leaf; }; enum { DESC_TSS = 9, DESC_LDT = 2, DESCTYPE_S = 16, }; struct ldttss_desc { u16 limit0; u16 base0; u16 base1: 8; u16 type: 5; u16 dpl: 2; u16 p: 1; u16 limit1: 4; u16 zero0: 3; u16 g: 1; u16 base2: 8; u32 base3; u32 zero1; }; typedef struct ldttss_desc ldt_desc; typedef struct ldttss_desc tss_desc; struct fixed_percpu_data { char gs_base[40]; long unsigned int stack_canary; }; enum cpuid_leafs { CPUID_1_EDX = 0, CPUID_8000_0001_EDX = 1, CPUID_8086_0001_EDX = 2, CPUID_LNX_1 = 3, CPUID_1_ECX = 4, CPUID_C000_0001_EDX = 5, CPUID_8000_0001_ECX = 6, CPUID_LNX_2 = 7, CPUID_LNX_3 = 8, CPUID_7_0_EBX = 9, CPUID_D_1_EAX = 10, CPUID_LNX_4 = 11, CPUID_7_1_EAX = 12, CPUID_8000_0008_EBX = 13, CPUID_6_EAX = 14, CPUID_8000_000A_EDX = 15, CPUID_7_ECX = 16, CPUID_8000_0007_EBX = 17, CPUID_7_EDX = 18, CPUID_8000_001F_EAX = 19, }; struct cpu_dev { const char *c_vendor; const char *c_ident[2]; void (*c_early_init)(struct cpuinfo_x86 *); void (*c_bsp_init)(struct cpuinfo_x86 *); void (*c_init)(struct cpuinfo_x86 *); void (*c_identify)(struct cpuinfo_x86 *); void (*c_detect_tlb)(struct cpuinfo_x86 *); int c_x86_vendor; }; struct cpuid_dependent_feature { u32 feature; u32 level; }; enum spectre_v2_mitigation { SPECTRE_V2_NONE = 0, SPECTRE_V2_RETPOLINE_GENERIC = 1, SPECTRE_V2_RETPOLINE_AMD = 2, SPECTRE_V2_IBRS_ENHANCED = 3, }; enum spectre_v2_user_mitigation { SPECTRE_V2_USER_NONE = 0, SPECTRE_V2_USER_STRICT = 1, SPECTRE_V2_USER_STRICT_PREFERRED = 2, SPECTRE_V2_USER_PRCTL = 3, SPECTRE_V2_USER_SECCOMP = 4, }; enum ssb_mitigation { SPEC_STORE_BYPASS_NONE = 0, SPEC_STORE_BYPASS_DISABLE = 1, SPEC_STORE_BYPASS_PRCTL = 2, SPEC_STORE_BYPASS_SECCOMP = 3, }; enum l1tf_mitigations { L1TF_MITIGATION_OFF = 0, L1TF_MITIGATION_FLUSH_NOWARN = 1, L1TF_MITIGATION_FLUSH = 2, L1TF_MITIGATION_FLUSH_NOSMT = 3, L1TF_MITIGATION_FULL = 4, L1TF_MITIGATION_FULL_FORCE = 5, }; enum mds_mitigations { MDS_MITIGATION_OFF = 0, MDS_MITIGATION_FULL = 1, MDS_MITIGATION_VMWERV = 2, }; enum cpuhp_smt_control { CPU_SMT_ENABLED = 0, CPU_SMT_DISABLED = 1, CPU_SMT_FORCE_DISABLED = 2, CPU_SMT_NOT_SUPPORTED = 3, CPU_SMT_NOT_IMPLEMENTED = 4, }; enum vmx_l1d_flush_state { VMENTER_L1D_FLUSH_AUTO = 0, VMENTER_L1D_FLUSH_NEVER = 1, VMENTER_L1D_FLUSH_COND = 2, VMENTER_L1D_FLUSH_ALWAYS = 3, VMENTER_L1D_FLUSH_EPT_DISABLED = 4, VMENTER_L1D_FLUSH_NOT_REQUIRED = 5, }; enum x86_hypervisor_type { X86_HYPER_NATIVE = 0, X86_HYPER_VMWARE = 1, X86_HYPER_MS_HYPERV = 2, X86_HYPER_XEN_PV = 3, X86_HYPER_XEN_HVM = 4, X86_HYPER_KVM = 5, X86_HYPER_JAILHOUSE = 6, X86_HYPER_ACRN = 7, }; enum taa_mitigations { TAA_MITIGATION_OFF = 0, TAA_MITIGATION_UCODE_NEEDED = 1, TAA_MITIGATION_VERW = 2, TAA_MITIGATION_TSX_DISABLED = 3, }; enum srbds_mitigations { SRBDS_MITIGATION_OFF = 0, SRBDS_MITIGATION_UCODE_NEEDED = 1, SRBDS_MITIGATION_FULL = 2, SRBDS_MITIGATION_TSX_OFF = 3, SRBDS_MITIGATION_HYPERVISOR = 4, }; enum l1d_flush_mitigations { L1D_FLUSH_OFF = 0, L1D_FLUSH_ON = 1, }; enum spectre_v1_mitigation { SPECTRE_V1_MITIGATION_NONE = 0, SPECTRE_V1_MITIGATION_AUTO = 1, }; enum spectre_v2_mitigation_cmd { SPECTRE_V2_CMD_NONE = 0, SPECTRE_V2_CMD_AUTO = 1, SPECTRE_V2_CMD_FORCE = 2, SPECTRE_V2_CMD_RETPOLINE = 3, SPECTRE_V2_CMD_RETPOLINE_GENERIC = 4, SPECTRE_V2_CMD_RETPOLINE_AMD = 5, }; enum spectre_v2_user_cmd { SPECTRE_V2_USER_CMD_NONE = 0, SPECTRE_V2_USER_CMD_AUTO = 1, SPECTRE_V2_USER_CMD_FORCE = 2, SPECTRE_V2_USER_CMD_PRCTL = 3, SPECTRE_V2_USER_CMD_PRCTL_IBPB = 4, SPECTRE_V2_USER_CMD_SECCOMP = 5, SPECTRE_V2_USER_CMD_SECCOMP_IBPB = 6, }; enum ssb_mitigation_cmd { SPEC_STORE_BYPASS_CMD_NONE = 0, SPEC_STORE_BYPASS_CMD_AUTO = 1, SPEC_STORE_BYPASS_CMD_ON = 2, SPEC_STORE_BYPASS_CMD_PRCTL = 3, SPEC_STORE_BYPASS_CMD_SECCOMP = 4, }; enum hk_flags { HK_FLAG_TIMER = 1, HK_FLAG_RCU = 2, HK_FLAG_MISC = 4, HK_FLAG_SCHED = 8, HK_FLAG_TICK = 16, HK_FLAG_DOMAIN = 32, HK_FLAG_WQ = 64, HK_FLAG_MANAGED_IRQ = 128, HK_FLAG_KTHREAD = 256, }; struct aperfmperf_sample { unsigned int khz; atomic_t scfpending; ktime_t time; u64 aperf; u64 mperf; }; struct cpuid_dep { unsigned int feature; unsigned int depends; }; enum vmx_feature_leafs { MISC_FEATURES = 0, PRIMARY_CTLS = 1, SECONDARY_CTLS = 2, NR_VMX_FEATURE_WORDS = 3, }; struct _tlb_table { unsigned char descriptor; char tlb_type; unsigned int entries; char info[128]; }; enum tsx_ctrl_states { TSX_CTRL_ENABLE = 0, TSX_CTRL_DISABLE = 1, TSX_CTRL_RTM_ALWAYS_ABORT = 2, TSX_CTRL_NOT_SUPPORTED = 3, }; enum split_lock_detect_state { sld_off = 0, sld_warn = 1, sld_fatal = 2, sld_ratelimit = 3, }; struct sku_microcode { u8 model; u8 stepping; u32 microcode; }; struct cpuid_regs { u32 eax; u32 ebx; u32 ecx; u32 edx; }; enum pconfig_target { INVALID_TARGET = 0, MKTME_TARGET = 1, PCONFIG_TARGET_NR = 2, }; enum { PCONFIG_CPUID_SUBLEAF_INVALID = 0, PCONFIG_CPUID_SUBLEAF_TARGETID = 1, }; typedef int (*cpu_stop_fn_t)(void *); typedef __u8 mtrr_type; struct mtrr_ops { u32 vendor; u32 use_intel_if; void (*set)(unsigned int, long unsigned int, long unsigned int, mtrr_type); void (*set_all)(); void (*get)(unsigned int, long unsigned int *, long unsigned int *, mtrr_type *); int (*get_free_region)(long unsigned int, long unsigned int, int); int (*validate_add_page)(long unsigned int, long unsigned int, unsigned int); int (*have_wrcomb)(); }; struct set_mtrr_data { long unsigned int smp_base; long unsigned int smp_size; unsigned int smp_reg; mtrr_type smp_type; }; struct mtrr_value { mtrr_type ltype; long unsigned int lbase; long unsigned int lsize; }; struct proc_ops { unsigned int proc_flags; int (*proc_open)(struct inode *, struct file *); ssize_t (*proc_read)(struct file *, char *, size_t, loff_t *); ssize_t (*proc_read_iter)(struct kiocb *, struct iov_iter *); ssize_t (*proc_write)(struct file *, const char *, size_t, loff_t *); loff_t (*proc_lseek)(struct file *, loff_t, int); int (*proc_release)(struct inode *, struct file *); __poll_t (*proc_poll)(struct file *, struct poll_table_struct *); long int (*proc_ioctl)(struct file *, unsigned int, long unsigned int); int (*proc_mmap)(struct file *, struct vm_area_struct *); long unsigned int (*proc_get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int); }; struct mtrr_sentry { __u64 base; __u32 size; __u32 type; }; struct mtrr_gentry { __u64 base; __u32 size; __u32 regnum; __u32 type; __u32 _pad; }; struct mtrr_var_range { __u32 base_lo; __u32 base_hi; __u32 mask_lo; __u32 mask_hi; }; struct mtrr_state_type { struct mtrr_var_range var_ranges[256]; mtrr_type fixed_ranges[88]; unsigned char enabled; unsigned char have_fixed; mtrr_type def_type; }; struct fixed_range_block { int base_msr; int ranges; }; struct var_mtrr_range_state { long unsigned int base_pfn; long unsigned int size_pfn; mtrr_type type; }; struct var_mtrr_state { long unsigned int range_startk; long unsigned int range_sizek; long unsigned int chunk_sizek; long unsigned int gran_sizek; unsigned int reg; }; struct mtrr_cleanup_result { long unsigned int gran_sizek; long unsigned int chunk_sizek; long unsigned int lose_cover_sizek; unsigned int num_reg; int bad; }; struct pv_info { const char *name; }; struct vmcb_seg { u16 selector; u16 attrib; u32 limit; u64 base; }; struct vmcb_save_area { struct vmcb_seg es; struct vmcb_seg cs; struct vmcb_seg ss; struct vmcb_seg ds; struct vmcb_seg fs; struct vmcb_seg gs; struct vmcb_seg gdtr; struct vmcb_seg ldtr; struct vmcb_seg idtr; struct vmcb_seg tr; u8 reserved_1[43]; u8 cpl; u8 reserved_2[4]; u64 efer; u8 reserved_3[104]; u64 xss; u64 cr4; u64 cr3; u64 cr0; u64 dr7; u64 dr6; u64 rflags; u64 rip; u8 reserved_4[88]; u64 rsp; u8 reserved_5[24]; u64 rax; u64 star; u64 lstar; u64 cstar; u64 sfmask; u64 kernel_gs_base; u64 sysenter_cs; u64 sysenter_esp; u64 sysenter_eip; u64 cr2; u8 reserved_6[32]; u64 g_pat; u64 dbgctl; u64 br_from; u64 br_to; u64 last_excp_from; u64 last_excp_to; u8 reserved_7[72]; u32 spec_ctrl; u8 reserved_7b[4]; u32 pkru; u8 reserved_7a[20]; u64 reserved_8; u64 rcx; u64 rdx; u64 rbx; u64 reserved_9; u64 rbp; u64 rsi; u64 rdi; u64 r8; u64 r9; u64 r10; u64 r11; u64 r12; u64 r13; u64 r14; u64 r15; u8 reserved_10[16]; u64 sw_exit_code; u64 sw_exit_info_1; u64 sw_exit_info_2; u64 sw_scratch; u8 reserved_11[56]; u64 xcr0; u8 valid_bitmap[16]; u64 x87_state_gpa; }; struct ghcb { struct vmcb_save_area save; u8 reserved_save[1016]; u8 shared_buffer[2032]; u8 reserved_1[10]; u16 protocol_version; u32 ghcb_usage; }; struct hypervisor_x86 { const char *name; uint32_t (*detect)(); enum x86_hypervisor_type type; struct x86_hyper_init init; struct x86_hyper_runtime runtime; bool ignore_nopv; }; enum intercept_words { INTERCEPT_CR = 0, INTERCEPT_DR = 1, INTERCEPT_EXCEPTION = 2, INTERCEPT_WORD3 = 3, INTERCEPT_WORD4 = 4, INTERCEPT_WORD5 = 5, MAX_INTERCEPT = 6, }; struct vmware_steal_time { union { uint64_t clock; struct { uint32_t clock_low; uint32_t clock_high; }; }; uint64_t reserved[7]; }; enum hv_isolation_type { HV_ISOLATION_TYPE_NONE = 0, HV_ISOLATION_TYPE_VBS = 1, HV_ISOLATION_TYPE_SNP = 2, }; struct ms_hyperv_info { u32 features; u32 priv_high; u32 misc_features; u32 hints; u32 nested_features; u32 max_vp_index; u32 max_lp_index; u32 isolation_config_a; union { u32 isolation_config_b; struct { u32 cvm_type: 4; u32 reserved1: 1; u32 shared_gpa_boundary_active: 1; u32 shared_gpa_boundary_bits: 6; u32 reserved2: 20; }; }; u64 shared_gpa_boundary; }; typedef u64 acpi_io_address; typedef u64 acpi_physical_address; typedef u32 acpi_status; typedef char *acpi_string; typedef void *acpi_handle; typedef u32 acpi_object_type; typedef u8 acpi_adr_space_type; union acpi_object { acpi_object_type type; struct { acpi_object_type type; u64 value; } integer; struct { acpi_object_type type; u32 length; char *pointer; } string; struct { acpi_object_type type; u32 length; u8 *pointer; } buffer; struct { acpi_object_type type; u32 count; union acpi_object *elements; } package; struct { acpi_object_type type; acpi_object_type actual_type; acpi_handle handle; } reference; struct { acpi_object_type type; u32 proc_id; acpi_io_address pblk_address; u32 pblk_length; } processor; struct { acpi_object_type type; u32 system_level; u32 resource_order; } power_resource; }; struct acpi_object_list { u32 count; union acpi_object *pointer; }; struct acpi_subtable_header { u8 type; u8 length; }; struct acpi_table_boot { struct acpi_table_header header; u8 cmos_index; u8 reserved[3]; }; struct acpi_hmat_structure { u16 type; u16 reserved; u32 length; }; struct acpi_table_hpet { struct acpi_table_header header; u32 id; struct acpi_generic_address address; u8 sequence; u16 minimum_tick; u8 flags; } __attribute__((packed)); struct acpi_table_madt { struct acpi_table_header header; u32 address; u32 flags; }; enum acpi_madt_type { ACPI_MADT_TYPE_LOCAL_APIC = 0, ACPI_MADT_TYPE_IO_APIC = 1, ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, ACPI_MADT_TYPE_NMI_SOURCE = 3, ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, ACPI_MADT_TYPE_IO_SAPIC = 6, ACPI_MADT_TYPE_LOCAL_SAPIC = 7, ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, ACPI_MADT_TYPE_LOCAL_X2APIC = 9, ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16, ACPI_MADT_TYPE_RESERVED = 17, }; struct acpi_madt_local_apic { struct acpi_subtable_header header; u8 processor_id; u8 id; u32 lapic_flags; }; struct acpi_madt_io_apic { struct acpi_subtable_header header; u8 id; u8 reserved; u32 address; u32 global_irq_base; }; struct acpi_madt_interrupt_override { struct acpi_subtable_header header; u8 bus; u8 source_irq; u32 global_irq; u16 inti_flags; } __attribute__((packed)); struct acpi_madt_nmi_source { struct acpi_subtable_header header; u16 inti_flags; u32 global_irq; }; struct acpi_madt_local_apic_nmi { struct acpi_subtable_header header; u8 processor_id; u16 inti_flags; u8 lint; } __attribute__((packed)); struct acpi_madt_local_apic_override { struct acpi_subtable_header header; u16 reserved; u64 address; } __attribute__((packed)); struct acpi_madt_local_sapic { struct acpi_subtable_header header; u8 processor_id; u8 id; u8 eid; u8 reserved[3]; u32 lapic_flags; u32 uid; char uid_string[1]; } __attribute__((packed)); struct acpi_madt_local_x2apic { struct acpi_subtable_header header; u16 reserved; u32 local_apic_id; u32 lapic_flags; u32 uid; }; struct acpi_madt_local_x2apic_nmi { struct acpi_subtable_header header; u16 inti_flags; u32 uid; u8 lint; u8 reserved[3]; }; struct acpi_prmt_module_header { u16 revision; u16 length; }; struct mpc_intsrc { unsigned char type; unsigned char irqtype; short unsigned int irqflag; unsigned char srcbus; unsigned char srcbusirq; unsigned char dstapic; unsigned char dstirq; }; enum mp_irq_source_types { mp_INT = 0, mp_NMI = 1, mp_SMI = 2, mp_ExtINT = 3, }; enum acpi_irq_model_id { ACPI_IRQ_MODEL_PIC = 0, ACPI_IRQ_MODEL_IOAPIC = 1, ACPI_IRQ_MODEL_IOSAPIC = 2, ACPI_IRQ_MODEL_PLATFORM = 3, ACPI_IRQ_MODEL_GIC = 4, ACPI_IRQ_MODEL_COUNT = 5, }; union acpi_subtable_headers { struct acpi_subtable_header common; struct acpi_hmat_structure hmat; struct acpi_prmt_module_header prmt; }; typedef int (*acpi_tbl_table_handler)(struct acpi_table_header *); typedef int (*acpi_tbl_entry_handler)(union acpi_subtable_headers *, const long unsigned int); struct acpi_subtable_proc { int id; acpi_tbl_entry_handler handler; int count; }; typedef u32 phys_cpuid_t; enum irq_alloc_type { X86_IRQ_ALLOC_TYPE_IOAPIC = 1, X86_IRQ_ALLOC_TYPE_HPET = 2, X86_IRQ_ALLOC_TYPE_PCI_MSI = 3, X86_IRQ_ALLOC_TYPE_PCI_MSIX = 4, X86_IRQ_ALLOC_TYPE_DMAR = 5, X86_IRQ_ALLOC_TYPE_AMDVI = 6, X86_IRQ_ALLOC_TYPE_UV = 7, }; struct ioapic_alloc_info { int pin; int node; u32 is_level: 1; u32 active_low: 1; u32 valid: 1; }; struct uv_alloc_info { int limit; int blade; long unsigned int offset; char *name; }; struct irq_alloc_info { enum irq_alloc_type type; u32 flags; u32 devid; irq_hw_number_t hwirq; const struct cpumask *mask; struct msi_desc *desc; void *data; union { struct ioapic_alloc_info ioapic; struct uv_alloc_info uv; }; }; struct serial_icounter_struct { int cts; int dsr; int rng; int dcd; int rx; int tx; int frame; int overrun; int parity; int brk; int buf_overrun; int reserved[9]; }; struct serial_struct { int type; int line; unsigned int port; int irq; int flags; int xmit_fifo_size; int custom_divisor; int baud_base; short unsigned int close_delay; char io_type; char reserved_char[1]; int hub6; short unsigned int closing_wait; short unsigned int closing_wait2; unsigned char *iomem_base; short unsigned int iomem_reg_shift; unsigned int port_high; long unsigned int iomap_base; }; enum ioapic_domain_type { IOAPIC_DOMAIN_INVALID = 0, IOAPIC_DOMAIN_LEGACY = 1, IOAPIC_DOMAIN_STRICT = 2, IOAPIC_DOMAIN_DYNAMIC = 3, }; struct ioapic_domain_cfg { enum ioapic_domain_type type; const struct irq_domain_ops *ops; struct device_node *dev; }; typedef void (*exitcall_t)(); struct acpi_power_register { u8 descriptor; u16 length; u8 space_id; u8 bit_width; u8 bit_offset; u8 access_size; u64 address; } __attribute__((packed)); struct acpi_processor_cx { u8 valid; u8 type; u32 address; u8 entry_method; u8 index; u32 latency; u8 bm_sts_skip; char desc[32]; }; struct acpi_processor_flags { u8 power: 1; u8 performance: 1; u8 throttling: 1; u8 limit: 1; u8 bm_control: 1; u8 bm_check: 1; u8 has_cst: 1; u8 has_lpi: 1; u8 power_setup_done: 1; u8 bm_rld_set: 1; u8 need_hotplug_init: 1; }; struct cstate_entry { struct { unsigned int eax; unsigned int ecx; } states[8]; }; struct mmu_gather_batch { struct mmu_gather_batch *next; unsigned int nr; unsigned int max; struct page *pages[0]; }; struct mmu_table_batch; struct mmu_gather { struct mm_struct *mm; struct mmu_table_batch *batch; long unsigned int start; long unsigned int end; unsigned int fullmm: 1; unsigned int need_flush_all: 1; unsigned int freed_tables: 1; unsigned int cleared_ptes: 1; unsigned int cleared_pmds: 1; unsigned int cleared_puds: 1; unsigned int cleared_p4ds: 1; unsigned int vma_exec: 1; unsigned int vma_huge: 1; unsigned int batch_count; struct mmu_gather_batch *active; struct mmu_gather_batch local; struct page *__pages[8]; }; enum reboot_mode { REBOOT_UNDEFINED = 4294967295, REBOOT_COLD = 0, REBOOT_WARM = 1, REBOOT_HARD = 2, REBOOT_SOFT = 3, REBOOT_GPIO = 4, }; enum reboot_type { BOOT_TRIPLE = 116, BOOT_KBD = 107, BOOT_BIOS = 98, BOOT_ACPI = 97, BOOT_EFI = 101, BOOT_CF9_FORCE = 112, BOOT_CF9_SAFE = 113, }; struct machine_ops { void (*restart)(char *); void (*halt)(); void (*power_off)(); void (*shutdown)(); void (*crash_shutdown)(struct pt_regs *); void (*emergency_restart)(); }; typedef void (*nmi_shootdown_cb)(int, struct pt_regs *); struct mmu_table_batch { struct callback_head rcu; unsigned int nr; void *tables[0]; }; struct intel_early_ops { resource_size_t (*stolen_size)(int, int, int); resource_size_t (*stolen_base)(int, int, int, resource_size_t); }; struct chipset { u32 vendor; u32 device; u32 class; u32 class_mask; u32 flags; void (*f)(int, int, int); }; enum { SD_BALANCE_NEWIDLE = 1, SD_BALANCE_EXEC = 2, SD_BALANCE_FORK = 4, SD_BALANCE_WAKE = 8, SD_WAKE_AFFINE = 16, SD_ASYM_CPUCAPACITY = 32, SD_ASYM_CPUCAPACITY_FULL = 64, SD_SHARE_CPUCAPACITY = 128, SD_SHARE_PKG_RESOURCES = 256, SD_SERIALIZE = 512, SD_ASYM_PACKING = 1024, SD_PREFER_SIBLING = 2048, SD_OVERLAP = 4096, SD_NUMA = 8192, }; struct sched_domain_shared { atomic_t ref; atomic_t nr_busy_cpus; int has_idle_cores; }; struct sched_group; struct sched_domain { struct sched_domain *parent; struct sched_domain *child; struct sched_group *groups; long unsigned int min_interval; long unsigned int max_interval; unsigned int busy_factor; unsigned int imbalance_pct; unsigned int cache_nice_tries; int nohz_idle; int flags; int level; long unsigned int last_balance; unsigned int balance_interval; unsigned int nr_balance_failed; u64 max_newidle_lb_cost; long unsigned int last_decay_max_lb_cost; u64 avg_scan_cost; union { void *private; struct callback_head rcu; }; struct sched_domain_shared *shared; unsigned int span_weight; long unsigned int span[0]; }; typedef const struct cpumask * (*sched_domain_mask_f)(int); typedef int (*sched_domain_flags_f)(); struct sched_group_capacity; struct sd_data { struct sched_domain **sd; struct sched_domain_shared **sds; struct sched_group **sg; struct sched_group_capacity **sgc; }; struct sched_domain_topology_level { sched_domain_mask_f mask; sched_domain_flags_f sd_flags; int flags; int numa_level; struct sd_data data; }; enum apic_intr_mode_id { APIC_PIC = 0, APIC_VIRTUAL_WIRE = 1, APIC_VIRTUAL_WIRE_NO_CONFIG = 2, APIC_SYMMETRIC_IO = 3, APIC_SYMMETRIC_IO_NO_ROUTING = 4, }; struct tsc_adjust { s64 bootval; s64 adjusted; long unsigned int nextcheck; bool warned; }; typedef void * (*pcpu_fc_alloc_fn_t)(unsigned int, size_t, size_t); typedef void (*pcpu_fc_free_fn_t)(void *, size_t); typedef void (*pcpu_fc_populate_pte_fn_t)(long unsigned int); typedef int pcpu_fc_cpu_distance_fn_t(unsigned int, unsigned int); enum { DUMP_PREFIX_NONE = 0, DUMP_PREFIX_ADDRESS = 1, DUMP_PREFIX_OFFSET = 2, }; struct mpf_intel { char signature[4]; unsigned int physptr; unsigned char length; unsigned char specification; unsigned char checksum; unsigned char feature1; unsigned char feature2; unsigned char feature3; unsigned char feature4; unsigned char feature5; }; struct mpc_table { char signature[4]; short unsigned int length; char spec; char checksum; char oem[8]; char productid[12]; unsigned int oemptr; short unsigned int oemsize; short unsigned int oemcount; unsigned int lapic; unsigned int reserved; }; struct mpc_cpu { unsigned char type; unsigned char apicid; unsigned char apicver; unsigned char cpuflag; unsigned int cpufeature; unsigned int featureflag; unsigned int reserved[2]; }; struct mpc_bus { unsigned char type; unsigned char busid; unsigned char bustype[6]; }; struct mpc_ioapic { unsigned char type; unsigned char apicid; unsigned char apicver; unsigned char flags; unsigned int apicaddr; }; struct mpc_lintsrc { unsigned char type; unsigned char irqtype; short unsigned int irqflag; unsigned char srcbusid; unsigned char srcbusirq; unsigned char destapic; unsigned char destapiclint; }; enum page_cache_mode { _PAGE_CACHE_MODE_WB = 0, _PAGE_CACHE_MODE_WC = 1, _PAGE_CACHE_MODE_UC_MINUS = 2, _PAGE_CACHE_MODE_UC = 3, _PAGE_CACHE_MODE_WT = 4, _PAGE_CACHE_MODE_WP = 5, _PAGE_CACHE_MODE_NUM = 8, }; struct irq_cfg { unsigned int dest_apicid; unsigned int vector; }; union apic_ir { long unsigned int map[4]; u32 regs[8]; }; enum { IRQ_SET_MASK_OK = 0, IRQ_SET_MASK_OK_NOCOPY = 1, IRQ_SET_MASK_OK_DONE = 2, }; enum { IRQD_TRIGGER_MASK = 15, IRQD_SETAFFINITY_PENDING = 256, IRQD_ACTIVATED = 512, IRQD_NO_BALANCING = 1024, IRQD_PER_CPU = 2048, IRQD_AFFINITY_SET = 4096, IRQD_LEVEL = 8192, IRQD_WAKEUP_STATE = 16384, IRQD_MOVE_PCNTXT = 32768, IRQD_IRQ_DISABLED = 65536, IRQD_IRQ_MASKED = 131072, IRQD_IRQ_INPROGRESS = 262144, IRQD_WAKEUP_ARMED = 524288, IRQD_FORWARDED_TO_VCPU = 1048576, IRQD_AFFINITY_MANAGED = 2097152, IRQD_IRQ_STARTED = 4194304, IRQD_MANAGED_SHUTDOWN = 8388608, IRQD_SINGLE_TARGET = 16777216, IRQD_DEFAULT_TRIGGER_SET = 33554432, IRQD_CAN_RESERVE = 67108864, IRQD_MSI_NOMASK_QUIRK = 134217728, IRQD_HANDLE_ENFORCE_IRQCTX = 268435456, IRQD_AFFINITY_ON_ACTIVATE = 536870912, IRQD_IRQ_ENABLED_ON_SUSPEND = 1073741824, }; enum { IRQCHIP_FWNODE_REAL = 0, IRQCHIP_FWNODE_NAMED = 1, IRQCHIP_FWNODE_NAMED_ID = 2, }; enum { X86_IRQ_ALLOC_CONTIGUOUS_VECTORS = 1, X86_IRQ_ALLOC_LEGACY = 2, }; struct apic_chip_data { struct irq_cfg hw_irq_cfg; unsigned int vector; unsigned int prev_vector; unsigned int cpu; unsigned int prev_cpu; unsigned int irq; struct hlist_node clist; unsigned int move_in_progress: 1; unsigned int is_managed: 1; unsigned int can_reserve: 1; unsigned int has_reserved: 1; }; struct irq_matrix; enum { IRQ_TYPE_NONE = 0, IRQ_TYPE_EDGE_RISING = 1, IRQ_TYPE_EDGE_FALLING = 2, IRQ_TYPE_EDGE_BOTH = 3, IRQ_TYPE_LEVEL_HIGH = 4, IRQ_TYPE_LEVEL_LOW = 8, IRQ_TYPE_LEVEL_MASK = 12, IRQ_TYPE_SENSE_MASK = 15, IRQ_TYPE_DEFAULT = 15, IRQ_TYPE_PROBE = 16, IRQ_LEVEL = 256, IRQ_PER_CPU = 512, IRQ_NOPROBE = 1024, IRQ_NOREQUEST = 2048, IRQ_NOAUTOEN = 4096, IRQ_NO_BALANCING = 8192, IRQ_MOVE_PCNTXT = 16384, IRQ_NESTED_THREAD = 32768, IRQ_NOTHREAD = 65536, IRQ_PER_CPU_DEVID = 131072, IRQ_IS_POLLED = 262144, IRQ_DISABLE_UNLAZY = 524288, IRQ_HIDDEN = 1048576, IRQ_NO_DEBUG = 2097152, }; enum { IRQCHIP_SET_TYPE_MASKED = 1, IRQCHIP_EOI_IF_HANDLED = 2, IRQCHIP_MASK_ON_SUSPEND = 4, IRQCHIP_ONOFFLINE_ENABLED = 8, IRQCHIP_SKIP_SET_WAKE = 16, IRQCHIP_ONESHOT_SAFE = 32, IRQCHIP_EOI_THREADED = 64, IRQCHIP_SUPPORTS_LEVEL_MSI = 128, IRQCHIP_SUPPORTS_NMI = 256, IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND = 512, IRQCHIP_AFFINITY_PRE_STARTUP = 1024, }; struct clock_event_device___2; union IO_APIC_reg_00 { u32 raw; struct { u32 __reserved_2: 14; u32 LTS: 1; u32 delivery_type: 1; u32 __reserved_1: 8; u32 ID: 8; } bits; }; union IO_APIC_reg_01 { u32 raw; struct { u32 version: 8; u32 __reserved_2: 7; u32 PRQ: 1; u32 entries: 8; u32 __reserved_1: 8; } bits; }; union IO_APIC_reg_02 { u32 raw; struct { u32 __reserved_2: 24; u32 arbitration: 4; u32 __reserved_1: 4; } bits; }; union IO_APIC_reg_03 { u32 raw; struct { u32 boot_DT: 1; u32 __reserved_1: 31; } bits; }; struct IO_APIC_route_entry { union { struct { u64 vector: 8; u64 delivery_mode: 3; u64 dest_mode_logical: 1; u64 delivery_status: 1; u64 active_low: 1; u64 irr: 1; u64 is_level: 1; u64 masked: 1; u64 reserved_0: 15; u64 reserved_1: 17; u64 virt_destid_8_14: 7; u64 destid_0_7: 8; }; struct { u64 ir_shared_0: 8; u64 ir_zero: 3; u64 ir_index_15: 1; u64 ir_shared_1: 5; u64 ir_reserved_0: 31; u64 ir_format: 1; u64 ir_index_0_14: 15; }; struct { u64 w1: 32; u64 w2: 32; }; }; }; struct irq_pin_list { struct list_head list; int apic; int pin; }; struct mp_chip_data { struct list_head irq_2_pin; struct IO_APIC_route_entry entry; bool is_level; bool active_low; bool isa_irq; u32 count; }; struct mp_ioapic_gsi { u32 gsi_base; u32 gsi_end; }; struct ioapic { int nr_registers; struct IO_APIC_route_entry *saved_registers; struct mpc_ioapic mp_config; struct mp_ioapic_gsi gsi_config; struct ioapic_domain_cfg irqdomain_cfg; struct irq_domain *irqdomain; struct resource *iomem_res; }; struct io_apic { unsigned int index; unsigned int unused[3]; unsigned int data; unsigned int unused2[11]; unsigned int eoi; }; enum { IRQ_DOMAIN_FLAG_HIERARCHY = 1, IRQ_DOMAIN_NAME_ALLOCATED = 2, IRQ_DOMAIN_FLAG_IPI_PER_CPU = 4, IRQ_DOMAIN_FLAG_IPI_SINGLE = 8, IRQ_DOMAIN_FLAG_MSI = 16, IRQ_DOMAIN_FLAG_MSI_REMAP = 32, IRQ_DOMAIN_MSI_NOMASK_QUIRK = 64, IRQ_DOMAIN_FLAG_NO_MAP = 128, IRQ_DOMAIN_FLAG_NONCORE = 65536, }; typedef struct irq_alloc_info msi_alloc_info_t; struct msi_domain_info; struct msi_domain_ops { irq_hw_number_t (*get_hwirq)(struct msi_domain_info *, msi_alloc_info_t *); int (*msi_init)(struct irq_domain *, struct msi_domain_info *, unsigned int, irq_hw_number_t, msi_alloc_info_t *); void (*msi_free)(struct irq_domain *, struct msi_domain_info *, unsigned int); int (*msi_check)(struct irq_domain *, struct msi_domain_info *, struct device *); int (*msi_prepare)(struct irq_domain *, struct device *, int, msi_alloc_info_t *); void (*msi_finish)(msi_alloc_info_t *, int); void (*set_desc)(msi_alloc_info_t *, struct msi_desc *); int (*handle_error)(struct irq_domain *, struct msi_desc *, int); int (*domain_alloc_irqs)(struct irq_domain *, struct device *, int); void (*domain_free_irqs)(struct irq_domain *, struct device *); }; struct msi_domain_info { u32 flags; struct msi_domain_ops *ops; struct irq_chip *chip; void *chip_data; irq_flow_handler_t handler; void *handler_data; const char *handler_name; void *data; }; enum { MSI_FLAG_USE_DEF_DOM_OPS = 1, MSI_FLAG_USE_DEF_CHIP_OPS = 2, MSI_FLAG_MULTI_PCI_MSI = 4, MSI_FLAG_PCI_MSIX = 8, MSI_FLAG_ACTIVATE_EARLY = 16, MSI_FLAG_MUST_REACTIVATE = 32, MSI_FLAG_LEVEL_CAPABLE = 64, }; enum { TRACE_FTRACE_BIT = 0, TRACE_FTRACE_NMI_BIT = 1, TRACE_FTRACE_IRQ_BIT = 2, TRACE_FTRACE_SIRQ_BIT = 3, TRACE_FTRACE_TRANSITION_BIT = 4, TRACE_INTERNAL_BIT = 5, TRACE_INTERNAL_NMI_BIT = 6, TRACE_INTERNAL_IRQ_BIT = 7, TRACE_INTERNAL_SIRQ_BIT = 8, TRACE_INTERNAL_TRANSITION_BIT = 9, TRACE_BRANCH_BIT = 10, TRACE_IRQ_BIT = 11, TRACE_GRAPH_BIT = 12, TRACE_GRAPH_DEPTH_START_BIT = 13, TRACE_GRAPH_DEPTH_END_BIT = 14, TRACE_GRAPH_NOTRACE_BIT = 15, TRACE_RECORD_RECURSION_BIT = 16, }; enum { TRACE_CTX_NMI = 0, TRACE_CTX_IRQ = 1, TRACE_CTX_SOFTIRQ = 2, TRACE_CTX_NORMAL = 3, TRACE_CTX_TRANSITION = 4, }; struct dyn_arch_ftrace {}; enum { FTRACE_OPS_FL_ENABLED = 1, FTRACE_OPS_FL_DYNAMIC = 2, FTRACE_OPS_FL_SAVE_REGS = 4, FTRACE_OPS_FL_SAVE_REGS_IF_SUPPORTED = 8, FTRACE_OPS_FL_RECURSION = 16, FTRACE_OPS_FL_STUB = 32, FTRACE_OPS_FL_INITIALIZED = 64, FTRACE_OPS_FL_DELETED = 128, FTRACE_OPS_FL_ADDING = 256, FTRACE_OPS_FL_REMOVING = 512, FTRACE_OPS_FL_MODIFYING = 1024, FTRACE_OPS_FL_ALLOC_TRAMP = 2048, FTRACE_OPS_FL_IPMODIFY = 4096, FTRACE_OPS_FL_PID = 8192, FTRACE_OPS_FL_RCU = 16384, FTRACE_OPS_FL_TRACE_ARRAY = 32768, FTRACE_OPS_FL_PERMANENT = 65536, FTRACE_OPS_FL_DIRECT = 131072, }; enum { FTRACE_FL_ENABLED = 2147483648, FTRACE_FL_REGS = 1073741824, FTRACE_FL_REGS_EN = 536870912, FTRACE_FL_TRAMP = 268435456, FTRACE_FL_TRAMP_EN = 134217728, FTRACE_FL_IPMODIFY = 67108864, FTRACE_FL_DISABLED = 33554432, FTRACE_FL_DIRECT = 16777216, FTRACE_FL_DIRECT_EN = 8388608, }; struct dyn_ftrace { long unsigned int ip; long unsigned int flags; struct dyn_arch_ftrace arch; }; enum { FTRACE_UPDATE_IGNORE = 0, FTRACE_UPDATE_MAKE_CALL = 1, FTRACE_UPDATE_MODIFY_CALL = 2, FTRACE_UPDATE_MAKE_NOP = 3, }; union ftrace_op_code_union { char code[7]; struct { char op[3]; int offset; } __attribute__((packed)); }; struct ftrace_rec_iter; struct freelist_node { atomic_t refs; struct freelist_node *next; }; struct freelist_head { struct freelist_node *head; }; struct prev_kprobe { struct kprobe *kp; long unsigned int status; long unsigned int old_flags; long unsigned int saved_flags; }; struct kprobe_ctlblk { long unsigned int kprobe_status; long unsigned int kprobe_old_flags; long unsigned int kprobe_saved_flags; struct prev_kprobe prev_kprobe; }; struct kretprobe_instance; typedef int (*kretprobe_handler_t)(struct kretprobe_instance *, struct pt_regs *); struct kretprobe_holder; struct kretprobe_instance { union { struct freelist_node freelist; struct callback_head rcu; }; struct llist_node llist; struct kretprobe_holder *rph; kprobe_opcode_t *ret_addr; void *fp; char data[0]; }; struct kretprobe; struct kretprobe_holder { struct kretprobe *rp; refcount_t ref; }; struct kretprobe { struct kprobe kp; kretprobe_handler_t handler; kretprobe_handler_t entry_handler; int maxactive; int nmissed; size_t data_size; struct freelist_head freelist; struct kretprobe_holder *rph; }; struct kretprobe_blackpoint { const char *name; void *addr; }; struct kprobe_insn_cache { struct mutex mutex; void * (*alloc)(); void (*free)(void *); const char *sym; struct list_head pages; size_t insn_size; int nr_garbage; }; struct __arch_relative_insn { u8 op; s32 raddr; } __attribute__((packed)); struct arch_optimized_insn { kprobe_opcode_t copied_insn[4]; kprobe_opcode_t *insn; size_t size; }; struct optimized_kprobe { struct kprobe kp; struct list_head list; struct arch_optimized_insn optinsn; }; typedef __u64 Elf64_Off; typedef __s64 Elf64_Sxword; struct elf64_rela { Elf64_Addr r_offset; Elf64_Xword r_info; Elf64_Sxword r_addend; }; typedef struct elf64_rela Elf64_Rela; struct elf64_hdr { unsigned char e_ident[16]; Elf64_Half e_type; Elf64_Half e_machine; Elf64_Word e_version; Elf64_Addr e_entry; Elf64_Off e_phoff; Elf64_Off e_shoff; Elf64_Word e_flags; Elf64_Half e_ehsize; Elf64_Half e_phentsize; Elf64_Half e_phnum; Elf64_Half e_shentsize; Elf64_Half e_shnum; Elf64_Half e_shstrndx; }; typedef struct elf64_hdr Elf64_Ehdr; struct elf64_shdr { Elf64_Word sh_name; Elf64_Word sh_type; Elf64_Xword sh_flags; Elf64_Addr sh_addr; Elf64_Off sh_offset; Elf64_Xword sh_size; Elf64_Word sh_link; Elf64_Word sh_info; Elf64_Xword sh_addralign; Elf64_Xword sh_entsize; }; typedef struct elf64_shdr Elf64_Shdr; struct hpet_data { long unsigned int hd_phys_address; void *hd_address; short unsigned int hd_nirqs; unsigned int hd_state; unsigned int hd_irq[32]; }; typedef irqreturn_t (*rtc_irq_handler)(int, void *); enum hpet_mode { HPET_MODE_UNUSED = 0, HPET_MODE_LEGACY = 1, HPET_MODE_CLOCKEVT = 2, HPET_MODE_DEVICE = 3, }; struct hpet_channel { struct clock_event_device evt; unsigned int num; unsigned int cpu; unsigned int irq; unsigned int in_use; enum hpet_mode mode; unsigned int boot_cfg; char name[10]; long: 48; long: 64; long: 64; long: 64; }; struct hpet_base { unsigned int nr_channels; unsigned int nr_clockevents; unsigned int boot_cfg; struct hpet_channel *channels; }; union hpet_lock { struct { arch_spinlock_t lock; u32 value; }; u64 lockval; }; struct static_key_true { struct static_key key; }; struct swait_queue { struct task_struct *task; struct list_head task_list; }; struct kvm_steal_time { __u64 steal; __u32 version; __u32 flags; __u8 preempted; __u8 u8_pad[3]; __u32 pad[11]; }; struct kvm_vcpu_pv_apf_data { __u32 flags; __u32 token; __u8 pad[56]; __u32 enabled; }; typedef struct { __u8 b[16]; } guid_t; typedef long unsigned int efi_status_t; typedef u8 efi_bool_t; typedef u16 efi_char16_t; typedef guid_t efi_guid_t; typedef struct { u64 signature; u32 revision; u32 headersize; u32 crc32; u32 reserved; } efi_table_hdr_t; typedef struct { u32 type; u32 pad; u64 phys_addr; u64 virt_addr; u64 num_pages; u64 attribute; } efi_memory_desc_t; typedef struct { efi_guid_t guid; u32 headersize; u32 flags; u32 imagesize; } efi_capsule_header_t; typedef struct { u16 year; u8 month; u8 day; u8 hour; u8 minute; u8 second; u8 pad1; u32 nanosecond; s16 timezone; u8 daylight; u8 pad2; } efi_time_t; typedef struct { u32 resolution; u32 accuracy; u8 sets_to_zero; } efi_time_cap_t; typedef struct { efi_table_hdr_t hdr; u32 get_time; u32 set_time; u32 get_wakeup_time; u32 set_wakeup_time; u32 set_virtual_address_map; u32 convert_pointer; u32 get_variable; u32 get_next_variable; u32 set_variable; u32 get_next_high_mono_count; u32 reset_system; u32 update_capsule; u32 query_capsule_caps; u32 query_variable_info; } efi_runtime_services_32_t; typedef efi_status_t efi_get_time_t(efi_time_t *, efi_time_cap_t *); typedef efi_status_t efi_set_time_t(efi_time_t *); typedef efi_status_t efi_get_wakeup_time_t(efi_bool_t *, efi_bool_t *, efi_time_t *); typedef efi_status_t efi_set_wakeup_time_t(efi_bool_t, efi_time_t *); typedef efi_status_t efi_get_variable_t(efi_char16_t *, efi_guid_t *, u32 *, long unsigned int *, void *); typedef efi_status_t efi_get_next_variable_t(long unsigned int *, efi_char16_t *, efi_guid_t *); typedef efi_status_t efi_set_variable_t(efi_char16_t *, efi_guid_t *, u32, long unsigned int, void *); typedef efi_status_t efi_get_next_high_mono_count_t(u32 *); typedef void efi_reset_system_t(int, efi_status_t, long unsigned int, efi_char16_t *); typedef efi_status_t efi_query_variable_info_t(u32, u64 *, u64 *, u64 *); typedef efi_status_t efi_update_capsule_t(efi_capsule_header_t **, long unsigned int, long unsigned int); typedef efi_status_t efi_query_capsule_caps_t(efi_capsule_header_t **, long unsigned int, u64 *, int *); typedef union { struct { efi_table_hdr_t hdr; efi_status_t (*get_time)(efi_time_t *, efi_time_cap_t *); efi_status_t (*set_time)(efi_time_t *); efi_status_t (*get_wakeup_time)(efi_bool_t *, efi_bool_t *, efi_time_t *); efi_status_t (*set_wakeup_time)(efi_bool_t, efi_time_t *); efi_status_t (*set_virtual_address_map)(long unsigned int, long unsigned int, u32, efi_memory_desc_t *); void *convert_pointer; efi_status_t (*get_variable)(efi_char16_t *, efi_guid_t *, u32 *, long unsigned int *, void *); efi_status_t (*get_next_variable)(long unsigned int *, efi_char16_t *, efi_guid_t *); efi_status_t (*set_variable)(efi_char16_t *, efi_guid_t *, u32, long unsigned int, void *); efi_status_t (*get_next_high_mono_count)(u32 *); void (*reset_system)(int, efi_status_t, long unsigned int, efi_char16_t *); efi_status_t (*update_capsule)(efi_capsule_header_t **, long unsigned int, long unsigned int); efi_status_t (*query_capsule_caps)(efi_capsule_header_t **, long unsigned int, u64 *, int *); efi_status_t (*query_variable_info)(u32, u64 *, u64 *, u64 *); }; efi_runtime_services_32_t mixed_mode; } efi_runtime_services_t; struct efi_memory_map { phys_addr_t phys_map; void *map; void *map_end; int nr_map; long unsigned int desc_version; long unsigned int desc_size; long unsigned int flags; }; struct efi { const efi_runtime_services_t *runtime; unsigned int runtime_version; unsigned int runtime_supported_mask; long unsigned int acpi; long unsigned int acpi20; long unsigned int smbios; long unsigned int smbios3; long unsigned int esrt; long unsigned int tpm_log; long unsigned int tpm_final_log; long unsigned int mokvar_table; efi_get_time_t *get_time; efi_set_time_t *set_time; efi_get_wakeup_time_t *get_wakeup_time; efi_set_wakeup_time_t *set_wakeup_time; efi_get_variable_t *get_variable; efi_get_next_variable_t *get_next_variable; efi_set_variable_t *set_variable; efi_set_variable_t *set_variable_nonblocking; efi_query_variable_info_t *query_variable_info; efi_query_variable_info_t *query_variable_info_nonblocking; efi_update_capsule_t *update_capsule; efi_query_capsule_caps_t *query_capsule_caps; efi_get_next_high_mono_count_t *get_next_high_mono_count; efi_reset_system_t *reset_system; struct efi_memory_map memmap; long unsigned int flags; }; struct kvm_task_sleep_node { struct hlist_node link; struct swait_queue_head wq; u32 token; int cpu; }; struct kvm_task_sleep_head { raw_spinlock_t lock; struct hlist_head list; }; struct pvclock_wall_clock { u32 version; u32 sec; u32 nsec; }; enum paravirt_lazy_mode { PARAVIRT_LAZY_NONE = 0, PARAVIRT_LAZY_MMU = 1, PARAVIRT_LAZY_CPU = 2, }; struct branch { unsigned char opcode; u32 delta; } __attribute__((packed)); typedef long unsigned int ulong; struct property_entry; struct platform_device_info { struct device *parent; struct fwnode_handle *fwnode; bool of_node_reused; const char *name; int id; const struct resource *res; unsigned int num_res; const void *data; size_t size_data; u64 dma_mask; const struct property_entry *properties; }; enum dev_prop_type { DEV_PROP_U8 = 0, DEV_PROP_U16 = 1, DEV_PROP_U32 = 2, DEV_PROP_U64 = 3, DEV_PROP_STRING = 4, DEV_PROP_REF = 5, }; struct property_entry { const char *name; size_t length; bool is_inline; enum dev_prop_type type; union { const void *pointer; union { u8 u8_data[8]; u16 u16_data[4]; u32 u32_data[2]; u64 u64_data[1]; const char *str[1]; } value; }; }; enum swiotlb_force { SWIOTLB_NORMAL = 0, SWIOTLB_FORCE = 1, SWIOTLB_NO_FORCE = 2, }; struct uprobe_xol_ops; struct arch_uprobe { union { u8 insn[16]; u8 ixol[16]; }; const struct uprobe_xol_ops *ops; union { struct { s32 offs; u8 ilen; u8 opc1; } branch; struct { u8 fixups; u8 ilen; } defparam; struct { u8 reg_offset; u8 ilen; } push; }; }; struct uprobe_xol_ops { bool (*emulate)(struct arch_uprobe *, struct pt_regs *); int (*pre_xol)(struct arch_uprobe *, struct pt_regs *); int (*post_xol)(struct arch_uprobe *, struct pt_regs *); void (*abort)(struct arch_uprobe *, struct pt_regs *); }; enum rp_check { RP_CHECK_CALL = 0, RP_CHECK_CHAIN_CALL = 1, RP_CHECK_RET = 2, }; enum perf_sample_regs_abi { PERF_SAMPLE_REGS_ABI_NONE = 0, PERF_SAMPLE_REGS_ABI_32 = 1, PERF_SAMPLE_REGS_ABI_64 = 2, }; struct pci_hostbridge_probe { u32 bus; u32 slot; u32 vendor; u32 device; }; typedef u8 uint8_t; typedef u16 uint16_t; enum pg_level { PG_LEVEL_NONE = 0, PG_LEVEL_4K = 1, PG_LEVEL_2M = 2, PG_LEVEL_1G = 3, PG_LEVEL_512G = 4, PG_LEVEL_NUM = 5, }; struct trace_print_flags { long unsigned int mask; const char *name; }; enum tlb_flush_reason { TLB_FLUSH_ON_TASK_SWITCH = 0, TLB_REMOTE_SHOOTDOWN = 1, TLB_LOCAL_SHOOTDOWN = 2, TLB_LOCAL_MM_SHOOTDOWN = 3, TLB_REMOTE_SEND_IPI = 4, NR_TLB_FLUSH_REASONS = 5, }; enum { REGION_INTERSECTS = 0, REGION_DISJOINT = 1, REGION_MIXED = 2, }; enum memblock_flags { MEMBLOCK_NONE = 0, MEMBLOCK_HOTPLUG = 1, MEMBLOCK_MIRROR = 2, MEMBLOCK_NOMAP = 4, MEMBLOCK_DRIVER_MANAGED = 8, }; struct memblock_region { phys_addr_t base; phys_addr_t size; enum memblock_flags flags; }; struct memblock_type { long unsigned int cnt; long unsigned int max; phys_addr_t total_size; struct memblock_region *regions; char *name; }; struct memblock { bool bottom_up; phys_addr_t current_limit; struct memblock_type memory; struct memblock_type reserved; }; struct trace_event_raw_tlb_flush { struct trace_entry ent; int reason; long unsigned int pages; char __data[0]; }; struct trace_event_data_offsets_tlb_flush {}; typedef void (*btf_trace_tlb_flush)(void *, int, long unsigned int); struct map_range { long unsigned int start; long unsigned int end; unsigned int page_size_mask; }; struct mem_section_usage { long unsigned int subsection_map[1]; long unsigned int pageblock_flags[0]; }; struct mem_section { long unsigned int section_mem_map; struct mem_section_usage *usage; }; enum kcore_type { KCORE_TEXT = 0, KCORE_VMALLOC = 1, KCORE_RAM = 2, KCORE_VMEMMAP = 3, KCORE_USER = 4, }; struct kcore_list { struct list_head list; long unsigned int addr; size_t size; int type; }; struct x86_mapping_info { void * (*alloc_pgt_page)(void *); void *context; long unsigned int page_flag; long unsigned int offset; bool direct_gbpages; long unsigned int kernpg_flag; }; enum x86_pf_error_code { X86_PF_PROT = 1, X86_PF_WRITE = 2, X86_PF_USER = 4, X86_PF_RSVD = 8, X86_PF_INSTR = 16, X86_PF_PK = 32, X86_PF_SGX = 32768, }; struct trace_event_raw_x86_exceptions { struct trace_entry ent; long unsigned int address; long unsigned int ip; long unsigned int error_code; char __data[0]; }; struct trace_event_data_offsets_x86_exceptions {}; typedef void (*btf_trace_page_fault_user)(void *, long unsigned int, struct pt_regs *, long unsigned int); typedef void (*btf_trace_page_fault_kernel)(void *, long unsigned int, struct pt_regs *, long unsigned int); enum { IORES_MAP_SYSTEM_RAM = 1, IORES_MAP_ENCRYPTED = 2, }; struct ioremap_desc { unsigned int flags; }; enum xen_domain_type { XEN_NATIVE = 0, XEN_PV_DOMAIN = 1, XEN_HVM_DOMAIN = 2, }; struct hstate {}; enum task_work_notify_mode { TWA_NONE = 0, TWA_RESUME = 1, TWA_SIGNAL = 2, }; struct exception_stacks { char DF_stack_guard[0]; char DF_stack[8192]; char NMI_stack_guard[0]; char NMI_stack[8192]; char DB_stack_guard[0]; char DB_stack[8192]; char MCE_stack_guard[0]; char MCE_stack[8192]; char VC_stack_guard[0]; char VC_stack[0]; char VC2_stack_guard[0]; char VC2_stack[0]; char IST_top_guard[0]; }; struct cpa_data { long unsigned int *vaddr; pgd_t *pgd; pgprot_t mask_set; pgprot_t mask_clr; long unsigned int numpages; long unsigned int curpage; long unsigned int pfn; unsigned int flags; unsigned int force_split: 1; unsigned int force_static_prot: 1; unsigned int force_flush_all: 1; struct page **pages; }; enum cpa_warn { CPA_CONFLICT = 0, CPA_PROTECT = 1, CPA_DETECT = 2, }; typedef struct { u64 val; } pfn_t; struct memtype { u64 start; u64 end; u64 subtree_max_end; enum page_cache_mode type; struct rb_node rb; }; enum { PAT_UC = 0, PAT_WC = 1, PAT_WT = 4, PAT_WP = 5, PAT_WB = 6, PAT_UC_MINUS = 7, }; struct pagerange_state { long unsigned int cur_pfn; int ram; int not_ram; }; struct rb_augment_callbacks { void (*propagate)(struct rb_node *, struct rb_node *); void (*copy)(struct rb_node *, struct rb_node *); void (*rotate)(struct rb_node *, struct rb_node *); }; enum { MEMTYPE_EXACT_MATCH = 0, MEMTYPE_END_MATCH = 1, }; typedef __u64 __be64; struct crypto_alg; struct crypto_tfm { u32 crt_flags; int node; void (*exit)(struct crypto_tfm *); struct crypto_alg *__crt_alg; void *__crt_ctx[0]; }; struct cipher_alg { unsigned int cia_min_keysize; unsigned int cia_max_keysize; int (*cia_setkey)(struct crypto_tfm *, const u8 *, unsigned int); void (*cia_encrypt)(struct crypto_tfm *, u8 *, const u8 *); void (*cia_decrypt)(struct crypto_tfm *, u8 *, const u8 *); }; struct compress_alg { int (*coa_compress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *); int (*coa_decompress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *); }; struct crypto_type; struct crypto_alg { struct list_head cra_list; struct list_head cra_users; u32 cra_flags; unsigned int cra_blocksize; unsigned int cra_ctxsize; unsigned int cra_alignmask; int cra_priority; refcount_t cra_refcnt; char cra_name[128]; char cra_driver_name[128]; const struct crypto_type *cra_type; union { struct cipher_alg cipher; struct compress_alg compress; } cra_u; int (*cra_init)(struct crypto_tfm *); void (*cra_exit)(struct crypto_tfm *); void (*cra_destroy)(struct crypto_alg *); struct module *cra_module; }; struct crypto_instance; struct crypto_type { unsigned int (*ctxsize)(struct crypto_alg *, u32, u32); unsigned int (*extsize)(struct crypto_alg *); int (*init)(struct crypto_tfm *, u32, u32); int (*init_tfm)(struct crypto_tfm *); void (*show)(struct seq_file *, struct crypto_alg *); int (*report)(struct sk_buff *, struct crypto_alg *); void (*free)(struct crypto_instance *); unsigned int type; unsigned int maskclear; unsigned int maskset; unsigned int tfmsize; }; struct crypto_template; struct crypto_spawn; struct crypto_instance { struct crypto_alg alg; struct crypto_template *tmpl; union { struct hlist_node list; struct crypto_spawn *spawns; }; void *__ctx[0]; }; struct crypto_spawn { struct list_head list; struct crypto_alg *alg; union { struct crypto_instance *inst; struct crypto_spawn *next; }; const struct crypto_type *frontend; u32 mask; bool dead; bool registered; }; struct rtattr; struct crypto_template { struct list_head list; struct hlist_head instances; struct module *module; int (*create)(struct crypto_template *, struct rtattr **); char name[128]; }; struct crypto_shash; struct shash_desc { struct crypto_shash *tfm; void *__ctx[0]; }; struct crypto_shash { unsigned int descsize; struct crypto_tfm base; }; struct shash_alg { int (*init)(struct shash_desc *); int (*update)(struct shash_desc *, const u8 *, unsigned int); int (*final)(struct shash_desc *, u8 *); int (*finup)(struct shash_desc *, const u8 *, unsigned int, u8 *); int (*digest)(struct shash_desc *, const u8 *, unsigned int, u8 *); int (*export)(struct shash_desc *, void *); int (*import)(struct shash_desc *, const void *); int (*setkey)(struct crypto_shash *, const u8 *, unsigned int); int (*init_tfm)(struct crypto_shash *); void (*exit_tfm)(struct crypto_shash *); unsigned int descsize; int: 32; unsigned int digestsize; unsigned int statesize; struct crypto_alg base; }; struct sha1_state { u32 state[5]; u64 count; u8 buffer[64]; }; typedef void sha1_block_fn(struct sha1_state *, const u8 *, int); struct sha256_state { u32 state[8]; u64 count; u8 buf[64]; }; typedef void sha256_block_fn(struct sha256_state *, const u8 *, int); struct sha512_state { u64 state[8]; u64 count[2]; u8 buf[128]; }; typedef void sha512_block_fn(struct sha512_state *, const u8 *, int); enum { BPF_REG_0 = 0, BPF_REG_1 = 1, BPF_REG_2 = 2, BPF_REG_3 = 3, BPF_REG_4 = 4, BPF_REG_5 = 5, BPF_REG_6 = 6, BPF_REG_7 = 7, BPF_REG_8 = 8, BPF_REG_9 = 9, BPF_REG_10 = 10, __MAX_BPF_REG = 11, }; struct bpf_tramp_progs { struct bpf_prog *progs[38]; int nr_progs; }; enum bpf_jit_poke_reason { BPF_POKE_REASON_TAIL_CALL = 0, }; struct bpf_array_aux { struct { spinlock_t lock; enum bpf_prog_type type; bool jited; } owner; struct list_head poke_progs; struct bpf_map *map; struct mutex poke_mutex; struct work_struct work; }; struct bpf_array { struct bpf_map map; u32 elem_size; u32 index_mask; struct bpf_array_aux *aux; union { char value[0]; void *ptrs[0]; void *pptrs[0]; }; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; enum bpf_text_poke_type { BPF_MOD_CALL = 0, BPF_MOD_JUMP = 1, }; struct bpf_binary_header { u32 pages; int: 32; u8 image[0]; }; typedef void (*bpf_jit_fill_hole_t)(void *, unsigned int); struct jit_context { int cleanup_addr; int tail_call_direct_label; int tail_call_indirect_label; }; struct x64_jit_data { struct bpf_binary_header *header; int *addrs; u8 *image; int proglen; struct jit_context ctx; }; typedef void (*rcu_callback_t)(struct callback_head *); enum tk_offsets { TK_OFFS_REAL = 0, TK_OFFS_BOOT = 1, TK_OFFS_TAI = 2, TK_OFFS_MAX = 3, }; typedef long unsigned int vm_flags_t; struct clone_args { __u64 flags; __u64 pidfd; __u64 child_tid; __u64 parent_tid; __u64 exit_signal; __u64 stack; __u64 stack_size; __u64 tls; __u64 set_tid; __u64 set_tid_size; __u64 cgroup; }; enum hrtimer_mode { HRTIMER_MODE_ABS = 0, HRTIMER_MODE_REL = 1, HRTIMER_MODE_PINNED = 2, HRTIMER_MODE_SOFT = 4, HRTIMER_MODE_HARD = 8, HRTIMER_MODE_ABS_PINNED = 2, HRTIMER_MODE_REL_PINNED = 3, HRTIMER_MODE_ABS_SOFT = 4, HRTIMER_MODE_REL_SOFT = 5, HRTIMER_MODE_ABS_PINNED_SOFT = 6, HRTIMER_MODE_REL_PINNED_SOFT = 7, HRTIMER_MODE_ABS_HARD = 8, HRTIMER_MODE_REL_HARD = 9, HRTIMER_MODE_ABS_PINNED_HARD = 10, HRTIMER_MODE_REL_PINNED_HARD = 11, }; struct fdtable { unsigned int max_fds; struct file **fd; long unsigned int *close_on_exec; long unsigned int *open_fds; long unsigned int *full_fds_bits; struct callback_head rcu; }; struct files_struct { atomic_t count; bool resize_in_progress; wait_queue_head_t resize_wait; struct fdtable *fdt; struct fdtable fdtab; long: 64; long: 64; long: 64; long: 64; spinlock_t file_lock; unsigned int next_fd; long unsigned int close_on_exec_init[1]; long unsigned int open_fds_init[1]; long unsigned int full_fds_bits_init[1]; struct file *fd_array[64]; long: 64; long: 64; long: 64; long: 64; }; struct robust_list { struct robust_list *next; }; struct robust_list_head { struct robust_list list; long int futex_offset; struct robust_list *list_op_pending; }; struct kernel_clone_args { u64 flags; int *pidfd; int *child_tid; int *parent_tid; int exit_signal; long unsigned int stack; long unsigned int stack_size; long unsigned int tls; pid_t *set_tid; size_t set_tid_size; int cgroup; int io_thread; struct cgroup *cgrp; struct css_set *cset; }; struct multiprocess_signals { sigset_t signal; struct hlist_node node; }; typedef int (*proc_visitor)(struct task_struct *, void *); enum { IOPRIO_CLASS_NONE = 0, IOPRIO_CLASS_RT = 1, IOPRIO_CLASS_BE = 2, IOPRIO_CLASS_IDLE = 3, }; struct mempolicy {}; typedef struct poll_table_struct poll_table; enum { FUTEX_STATE_OK = 0, FUTEX_STATE_EXITING = 1, FUTEX_STATE_DEAD = 2, }; enum proc_hidepid { HIDEPID_OFF = 0, HIDEPID_NO_ACCESS = 1, HIDEPID_INVISIBLE = 2, HIDEPID_NOT_PTRACEABLE = 4, }; enum proc_pidonly { PROC_PIDONLY_OFF = 0, PROC_PIDONLY_ON = 1, }; struct proc_fs_info { struct pid_namespace *pid_ns; struct dentry *proc_self; struct dentry *proc_thread_self; kgid_t pid_gid; enum proc_hidepid hide_pid; enum proc_pidonly pidonly; }; struct trace_event_raw_task_newtask { struct trace_entry ent; pid_t pid; char comm[16]; long unsigned int clone_flags; short int oom_score_adj; char __data[0]; }; struct trace_event_raw_task_rename { struct trace_entry ent; pid_t pid; char oldcomm[16]; char newcomm[16]; short int oom_score_adj; char __data[0]; }; struct trace_event_data_offsets_task_newtask {}; struct trace_event_data_offsets_task_rename {}; typedef void (*btf_trace_task_newtask)(void *, struct task_struct *, long unsigned int); typedef void (*btf_trace_task_rename)(void *, struct task_struct *, const char *); struct audit_context; struct __va_list_tag { unsigned int gp_offset; unsigned int fp_offset; void *overflow_arg_area; void *reg_save_area; }; typedef __builtin_va_list va_list; struct taint_flag { char c_true; char c_false; bool module; }; enum ftrace_dump_mode { DUMP_NONE = 0, DUMP_ALL = 1, DUMP_ORIG = 2, }; enum kmsg_dump_reason { KMSG_DUMP_UNDEF = 0, KMSG_DUMP_PANIC = 1, KMSG_DUMP_OOPS = 2, KMSG_DUMP_EMERG = 3, KMSG_DUMP_SHUTDOWN = 4, KMSG_DUMP_MAX = 5, }; enum con_flush_mode { CONSOLE_FLUSH_PENDING = 0, CONSOLE_REPLAY_ALL = 1, }; struct warn_args { const char *fmt; va_list args; }; enum kobject_action { KOBJ_ADD = 0, KOBJ_REMOVE = 1, KOBJ_CHANGE = 2, KOBJ_MOVE = 3, KOBJ_ONLINE = 4, KOBJ_OFFLINE = 5, KOBJ_BIND = 6, KOBJ_UNBIND = 7, }; struct smp_hotplug_thread { struct task_struct **store; struct list_head list; int (*thread_should_run)(unsigned int); void (*thread_fn)(unsigned int); void (*create)(unsigned int); void (*setup)(unsigned int); void (*cleanup)(unsigned int, bool); void (*park)(unsigned int); void (*unpark)(unsigned int); bool selfparking; const char *thread_comm; }; struct trace_event_raw_cpuhp_enter { struct trace_entry ent; unsigned int cpu; int target; int idx; void *fun; char __data[0]; }; struct trace_event_raw_cpuhp_multi_enter { struct trace_entry ent; unsigned int cpu; int target; int idx; void *fun; char __data[0]; }; struct trace_event_raw_cpuhp_exit { struct trace_entry ent; unsigned int cpu; int state; int idx; int ret; char __data[0]; }; struct trace_event_data_offsets_cpuhp_enter {}; struct trace_event_data_offsets_cpuhp_multi_enter {}; struct trace_event_data_offsets_cpuhp_exit {}; typedef void (*btf_trace_cpuhp_enter)(void *, unsigned int, int, int, int (*)(unsigned int)); typedef void (*btf_trace_cpuhp_multi_enter)(void *, unsigned int, int, int, int (*)(unsigned int, struct hlist_node *), struct hlist_node *); typedef void (*btf_trace_cpuhp_exit)(void *, unsigned int, int, int, int); struct cpuhp_cpu_state { enum cpuhp_state state; enum cpuhp_state target; enum cpuhp_state fail; struct task_struct *thread; bool should_run; bool rollback; bool single; bool bringup; int cpu; struct hlist_node *node; struct hlist_node *last; enum cpuhp_state cb_state; int result; struct completion done_up; struct completion done_down; }; struct cpuhp_step { const char *name; union { int (*single)(unsigned int); int (*multi)(unsigned int, struct hlist_node *); } startup; union { int (*single)(unsigned int); int (*multi)(unsigned int, struct hlist_node *); } teardown; struct hlist_head list; bool cant_stop; bool multi_instance; }; enum cpu_mitigations { CPU_MITIGATIONS_OFF = 0, CPU_MITIGATIONS_AUTO = 1, CPU_MITIGATIONS_AUTO_NOSMT = 2, }; struct __kernel_old_timeval { __kernel_long_t tv_sec; __kernel_long_t tv_usec; }; struct rusage { struct __kernel_old_timeval ru_utime; struct __kernel_old_timeval ru_stime; __kernel_long_t ru_maxrss; __kernel_long_t ru_ixrss; __kernel_long_t ru_idrss; __kernel_long_t ru_isrss; __kernel_long_t ru_minflt; __kernel_long_t ru_majflt; __kernel_long_t ru_nswap; __kernel_long_t ru_inblock; __kernel_long_t ru_oublock; __kernel_long_t ru_msgsnd; __kernel_long_t ru_msgrcv; __kernel_long_t ru_nsignals; __kernel_long_t ru_nvcsw; __kernel_long_t ru_nivcsw; }; typedef struct {} mm_segment_t; struct waitid_info { pid_t pid; uid_t uid; int status; int cause; }; struct wait_opts { enum pid_type wo_type; int wo_flags; struct pid *wo_pid; struct waitid_info *wo_info; int wo_stat; struct rusage *wo_rusage; wait_queue_entry_t child_wait; int notask_error; }; struct softirq_action { void (*action)(struct softirq_action *); }; struct tasklet_struct { struct tasklet_struct *next; long unsigned int state; atomic_t count; bool use_callback; union { void (*func)(long unsigned int); void (*callback)(struct tasklet_struct *); }; long unsigned int data; }; enum { TASKLET_STATE_SCHED = 0, TASKLET_STATE_RUN = 1, }; struct kernel_stat { long unsigned int irqs_sum; unsigned int softirqs[10]; }; struct wait_bit_key { void *flags; int bit_nr; long unsigned int timeout; }; struct wait_bit_queue_entry { struct wait_bit_key key; struct wait_queue_entry wq_entry; }; struct trace_event_raw_irq_handler_entry { struct trace_entry ent; int irq; u32 __data_loc_name; char __data[0]; }; struct trace_event_raw_irq_handler_exit { struct trace_entry ent; int irq; int ret; char __data[0]; }; struct trace_event_raw_softirq { struct trace_entry ent; unsigned int vec; char __data[0]; }; struct trace_event_data_offsets_irq_handler_entry { u32 name; }; struct trace_event_data_offsets_irq_handler_exit {}; struct trace_event_data_offsets_softirq {}; typedef void (*btf_trace_irq_handler_entry)(void *, int, struct irqaction *); typedef void (*btf_trace_irq_handler_exit)(void *, int, struct irqaction *, int); typedef void (*btf_trace_softirq_entry)(void *, unsigned int); typedef void (*btf_trace_softirq_exit)(void *, unsigned int); typedef void (*btf_trace_softirq_raise)(void *, unsigned int); struct tasklet_head { struct tasklet_struct *head; struct tasklet_struct **tail; }; struct pseudo_fs_context { const struct super_operations *ops; const struct xattr_handler **xattr; const struct dentry_operations *dops; long unsigned int magic; }; typedef void (*dr_release_t)(struct device *, void *); typedef int (*dr_match_t)(struct device *, void *, void *); struct resource_entry { struct list_head node; struct resource *res; resource_size_t offset; struct resource __res; }; struct resource_constraint { resource_size_t min; resource_size_t max; resource_size_t align; resource_size_t (*alignf)(void *, const struct resource *, resource_size_t, resource_size_t); void *alignf_data; }; enum { MAX_IORES_LEVEL = 5, }; struct region_devres { struct resource *parent; resource_size_t start; resource_size_t n; }; typedef __kernel_clock_t clock_t; struct dentry_stat_t { long int nr_dentry; long int nr_unused; long int age_limit; long int want_pages; long int nr_negative; long int dummy; }; struct files_stat_struct { long unsigned int nr_files; long unsigned int nr_free_files; long unsigned int max_files; }; struct inodes_stat_t { long int nr_inodes; long int nr_unused; long int dummy[5]; }; enum sysctl_writes_mode { SYSCTL_WRITES_LEGACY = 4294967295, SYSCTL_WRITES_WARN = 0, SYSCTL_WRITES_STRICT = 1, }; struct do_proc_dointvec_minmax_conv_param { int *min; int *max; }; struct do_proc_douintvec_minmax_conv_param { unsigned int *min; unsigned int *max; }; struct __user_cap_header_struct { __u32 version; int pid; }; typedef struct __user_cap_header_struct *cap_user_header_t; struct __user_cap_data_struct { __u32 effective; __u32 permitted; __u32 inheritable; }; typedef struct __user_cap_data_struct *cap_user_data_t; struct sigqueue { struct list_head list; int flags; kernel_siginfo_t info; struct ucounts *ucounts; }; typedef int wait_bit_action_f(struct wait_bit_key *, int); struct ptrace_peeksiginfo_args { __u64 off; __u32 flags; __s32 nr; }; struct ptrace_syscall_info { __u8 op; __u8 pad[3]; __u32 arch; __u64 instruction_pointer; __u64 stack_pointer; union { struct { __u64 nr; __u64 args[6]; } entry; struct { __s64 rval; __u8 is_error; } exit; struct { __u64 nr; __u64 args[6]; __u32 ret_data; } seccomp; }; }; struct ptrace_rseq_configuration { __u64 rseq_abi_pointer; __u32 rseq_abi_size; __u32 signature; __u32 flags; __u32 pad; }; typedef long unsigned int old_sigset_t; enum siginfo_layout { SIL_KILL = 0, SIL_TIMER = 1, SIL_POLL = 2, SIL_FAULT = 3, SIL_FAULT_TRAPNO = 4, SIL_FAULT_MCEERR = 5, SIL_FAULT_BNDERR = 6, SIL_FAULT_PKUERR = 7, SIL_FAULT_PERF_EVENT = 8, SIL_CHLD = 9, SIL_RT = 10, SIL_SYS = 11, }; struct fd { struct file *file; unsigned int flags; }; enum { TRACE_SIGNAL_DELIVERED = 0, TRACE_SIGNAL_IGNORED = 1, TRACE_SIGNAL_ALREADY_PENDING = 2, TRACE_SIGNAL_OVERFLOW_FAIL = 3, TRACE_SIGNAL_LOSE_INFO = 4, }; struct trace_event_raw_signal_generate { struct trace_entry ent; int sig; int errno; int code; char comm[16]; pid_t pid; int group; int result; char __data[0]; }; struct trace_event_raw_signal_deliver { struct trace_entry ent; int sig; int errno; int code; long unsigned int sa_handler; long unsigned int sa_flags; char __data[0]; }; struct trace_event_data_offsets_signal_generate {}; struct trace_event_data_offsets_signal_deliver {}; typedef void (*btf_trace_signal_generate)(void *, int, struct kernel_siginfo *, struct task_struct *, int, int); typedef void (*btf_trace_signal_deliver)(void *, int, struct kernel_siginfo *, struct k_sigaction *); enum sig_handler { HANDLER_CURRENT = 0, HANDLER_SIG_DFL = 1, HANDLER_EXIT = 2, }; struct sysinfo { __kernel_long_t uptime; __kernel_ulong_t loads[3]; __kernel_ulong_t totalram; __kernel_ulong_t freeram; __kernel_ulong_t sharedram; __kernel_ulong_t bufferram; __kernel_ulong_t totalswap; __kernel_ulong_t freeswap; __u16 procs; __u16 pad; __kernel_ulong_t totalhigh; __kernel_ulong_t freehigh; __u32 mem_unit; char _f[0]; }; enum { PER_LINUX = 0, PER_LINUX_32BIT = 8388608, PER_LINUX_FDPIC = 524288, PER_SVR4 = 68157441, PER_SVR3 = 83886082, PER_SCOSVR3 = 117440515, PER_OSR5 = 100663299, PER_WYSEV386 = 83886084, PER_ISCR4 = 67108869, PER_BSD = 6, PER_SUNOS = 67108870, PER_XENIX = 83886087, PER_LINUX32 = 8, PER_LINUX32_3GB = 134217736, PER_IRIX32 = 67108873, PER_IRIXN32 = 67108874, PER_IRIX64 = 67108875, PER_RISCOS = 12, PER_SOLARIS = 67108877, PER_UW7 = 68157454, PER_OSF4 = 15, PER_HPUX = 16, PER_MASK = 255, }; struct rlimit64 { __u64 rlim_cur; __u64 rlim_max; }; struct oldold_utsname { char sysname[9]; char nodename[9]; char release[9]; char version[9]; char machine[9]; }; struct old_utsname { char sysname[65]; char nodename[65]; char release[65]; char version[65]; char machine[65]; }; enum uts_proc { UTS_PROC_OSTYPE = 0, UTS_PROC_OSRELEASE = 1, UTS_PROC_VERSION = 2, UTS_PROC_HOSTNAME = 3, UTS_PROC_DOMAINNAME = 4, }; struct prctl_mm_map { __u64 start_code; __u64 end_code; __u64 start_data; __u64 end_data; __u64 start_brk; __u64 brk; __u64 start_stack; __u64 arg_start; __u64 arg_end; __u64 env_start; __u64 env_end; __u64 *auxv; __u32 auxv_size; __u32 exe_fd; }; struct tms { __kernel_clock_t tms_utime; __kernel_clock_t tms_stime; __kernel_clock_t tms_cutime; __kernel_clock_t tms_cstime; }; struct getcpu_cache { long unsigned int blob[16]; }; struct subprocess_info { struct work_struct work; struct completion *complete; const char *path; char **argv; char **envp; int wait; int retval; int (*init)(struct subprocess_info *, struct cred *); void (*cleanup)(struct subprocess_info *); void *data; }; struct wq_flusher; struct worker; struct workqueue_attrs; struct pool_workqueue; struct wq_device; struct workqueue_struct { struct list_head pwqs; struct list_head list; struct mutex mutex; int work_color; int flush_color; atomic_t nr_pwqs_to_flush; struct wq_flusher *first_flusher; struct list_head flusher_queue; struct list_head flusher_overflow; struct list_head maydays; struct worker *rescuer; int nr_drainers; int saved_max_active; struct workqueue_attrs *unbound_attrs; struct pool_workqueue *dfl_pwq; struct wq_device *wq_dev; char name[24]; struct callback_head rcu; long: 64; long: 64; long: 64; long: 64; long: 64; unsigned int flags; struct pool_workqueue *cpu_pwqs; struct pool_workqueue *numa_pwq_tbl[0]; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct workqueue_attrs { int nice; cpumask_var_t cpumask; bool no_numa; }; struct execute_work { struct work_struct work; }; enum { WQ_UNBOUND = 2, WQ_FREEZABLE = 4, WQ_MEM_RECLAIM = 8, WQ_HIGHPRI = 16, WQ_CPU_INTENSIVE = 32, WQ_SYSFS = 64, WQ_POWER_EFFICIENT = 128, __WQ_DRAINING = 65536, __WQ_ORDERED = 131072, __WQ_LEGACY = 262144, __WQ_ORDERED_EXPLICIT = 524288, WQ_MAX_ACTIVE = 512, WQ_MAX_UNBOUND_PER_CPU = 4, WQ_DFL_ACTIVE = 256, }; typedef unsigned int xa_mark_t; enum xa_lock_type { XA_LOCK_IRQ = 1, XA_LOCK_BH = 2, }; struct ida { struct xarray xa; }; struct __una_u32 { u32 x; }; struct worker_pool; struct worker { union { struct list_head entry; struct hlist_node hentry; }; struct work_struct *current_work; work_func_t current_func; struct pool_workqueue *current_pwq; unsigned int current_color; struct list_head scheduled; struct task_struct *task; struct worker_pool *pool; struct list_head node; long unsigned int last_active; unsigned int flags; int id; int sleeping; char desc[24]; struct workqueue_struct *rescue_wq; work_func_t last_func; }; struct pool_workqueue { struct worker_pool *pool; struct workqueue_struct *wq; int work_color; int flush_color; int refcnt; int nr_in_flight[16]; int nr_active; int max_active; struct list_head inactive_works; struct list_head pwqs_node; struct list_head mayday_node; struct work_struct unbound_release_work; struct callback_head rcu; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct worker_pool { raw_spinlock_t lock; int cpu; int node; int id; unsigned int flags; long unsigned int watchdog_ts; struct list_head worklist; int nr_workers; int nr_idle; struct list_head idle_list; struct timer_list idle_timer; struct timer_list mayday_timer; struct hlist_head busy_hash[64]; struct worker *manager; struct list_head workers; struct completion *detach_completion; struct ida worker_ida; struct workqueue_attrs *attrs; struct hlist_node hash_node; int refcnt; long: 32; long: 64; long: 64; long: 64; atomic_t nr_running; struct callback_head rcu; long: 64; long: 64; long: 64; long: 64; long: 64; }; enum { POOL_MANAGER_ACTIVE = 1, POOL_DISASSOCIATED = 4, WORKER_DIE = 2, WORKER_IDLE = 4, WORKER_PREP = 8, WORKER_CPU_INTENSIVE = 64, WORKER_UNBOUND = 128, WORKER_REBOUND = 256, WORKER_NOT_RUNNING = 456, NR_STD_WORKER_POOLS = 2, UNBOUND_POOL_HASH_ORDER = 6, BUSY_WORKER_HASH_ORDER = 6, MAX_IDLE_WORKERS_RATIO = 4, IDLE_WORKER_TIMEOUT = 30000, MAYDAY_INITIAL_TIMEOUT = 2, MAYDAY_INTERVAL = 10, CREATE_COOLDOWN = 100, RESCUER_NICE_LEVEL = 4294967276, HIGHPRI_NICE_LEVEL = 4294967276, WQ_NAME_LEN = 24, }; struct wq_flusher { struct list_head list; int flush_color; struct completion done; }; struct wq_device { struct workqueue_struct *wq; struct device dev; }; struct trace_event_raw_workqueue_queue_work { struct trace_entry ent; void *work; void *function; u32 __data_loc_workqueue; unsigned int req_cpu; unsigned int cpu; char __data[0]; }; struct trace_event_raw_workqueue_activate_work { struct trace_entry ent; void *work; char __data[0]; }; struct trace_event_raw_workqueue_execute_start { struct trace_entry ent; void *work; void *function; char __data[0]; }; struct trace_event_raw_workqueue_execute_end { struct trace_entry ent; void *work; void *function; char __data[0]; }; struct trace_event_data_offsets_workqueue_queue_work { u32 workqueue; }; struct trace_event_data_offsets_workqueue_activate_work {}; struct trace_event_data_offsets_workqueue_execute_start {}; struct trace_event_data_offsets_workqueue_execute_end {}; typedef void (*btf_trace_workqueue_queue_work)(void *, unsigned int, struct pool_workqueue *, struct work_struct *); typedef void (*btf_trace_workqueue_activate_work)(void *, struct work_struct *); typedef void (*btf_trace_workqueue_execute_start)(void *, struct work_struct *); typedef void (*btf_trace_workqueue_execute_end)(void *, struct work_struct *, work_func_t); struct wq_barrier { struct work_struct work; struct completion done; struct task_struct *task; }; struct cwt_wait { wait_queue_entry_t wait; struct work_struct *work; }; struct apply_wqattrs_ctx { struct workqueue_struct *wq; struct workqueue_attrs *attrs; struct list_head list; struct pool_workqueue *dfl_pwq; struct pool_workqueue *pwq_tbl[0]; }; struct work_for_cpu { struct work_struct work; long int (*fn)(void *); void *arg; long int ret; }; typedef struct {} local_lock_t; struct xa_node { unsigned char shift; unsigned char offset; unsigned char count; unsigned char nr_values; struct xa_node *parent; struct xarray *array; union { struct list_head private_list; struct callback_head callback_head; }; void *slots[64]; union { long unsigned int tags[3]; long unsigned int marks[3]; }; }; struct radix_tree_preload { local_lock_t lock; unsigned int nr; struct xa_node *nodes; }; typedef void (*task_work_func_t)(struct callback_head *); enum { KERNEL_PARAM_OPS_FL_NOARG = 1, }; enum { KERNEL_PARAM_FL_UNSAFE = 1, KERNEL_PARAM_FL_HWPARAM = 2, }; struct param_attribute { struct module_attribute mattr; const struct kernel_param *param; }; struct module_param_attrs { unsigned int num; struct attribute_group grp; struct param_attribute attrs[0]; }; struct module_version_attribute { struct module_attribute mattr; const char *module_name; const char *version; }; enum lockdown_reason { LOCKDOWN_NONE = 0, LOCKDOWN_MODULE_SIGNATURE = 1, LOCKDOWN_DEV_MEM = 2, LOCKDOWN_EFI_TEST = 3, LOCKDOWN_KEXEC = 4, LOCKDOWN_HIBERNATION = 5, LOCKDOWN_PCI_ACCESS = 6, LOCKDOWN_IOPORT = 7, LOCKDOWN_MSR = 8, LOCKDOWN_ACPI_TABLES = 9, LOCKDOWN_PCMCIA_CIS = 10, LOCKDOWN_TIOCSSERIAL = 11, LOCKDOWN_MODULE_PARAMETERS = 12, LOCKDOWN_MMIOTRACE = 13, LOCKDOWN_DEBUGFS = 14, LOCKDOWN_XMON_WR = 15, LOCKDOWN_BPF_WRITE_USER = 16, LOCKDOWN_INTEGRITY_MAX = 17, LOCKDOWN_KCORE = 18, LOCKDOWN_KPROBES = 19, LOCKDOWN_BPF_READ_KERNEL = 20, LOCKDOWN_PERF = 21, LOCKDOWN_TRACEFS = 22, LOCKDOWN_XMON_RW = 23, LOCKDOWN_XFRM_SECRET = 24, LOCKDOWN_CONFIDENTIALITY_MAX = 25, }; struct kmalloced_param { struct list_head list; char val[0]; }; struct sched_param { int sched_priority; }; enum { __PERCPU_REF_ATOMIC = 1, __PERCPU_REF_DEAD = 2, __PERCPU_REF_ATOMIC_DEAD = 3, __PERCPU_REF_FLAG_BITS = 2, }; struct kthread_work; typedef void (*kthread_work_func_t)(struct kthread_work *); struct kthread_worker; struct kthread_work { struct list_head node; kthread_work_func_t func; struct kthread_worker *worker; int canceling; }; enum { KTW_FREEZABLE = 1, }; struct kthread_worker { unsigned int flags; raw_spinlock_t lock; struct list_head work_list; struct list_head delayed_work_list; struct task_struct *task; struct kthread_work *current_work; }; struct kthread_delayed_work { struct kthread_work work; struct timer_list timer; }; enum { CSS_NO_REF = 1, CSS_ONLINE = 2, CSS_RELEASED = 4, CSS_VISIBLE = 8, CSS_DYING = 16, }; struct kthread_create_info { int (*threadfn)(void *); void *data; int node; struct task_struct *result; struct completion *done; struct list_head list; }; struct kthread { long unsigned int flags; unsigned int cpu; int (*threadfn)(void *); void *data; mm_segment_t oldfs; struct completion parked; struct completion exited; struct cgroup_subsys_state *blkcg_css; }; enum KTHREAD_BITS { KTHREAD_IS_PER_CPU = 0, KTHREAD_SHOULD_STOP = 1, KTHREAD_SHOULD_PARK = 2, }; struct kthread_flush_work { struct kthread_work work; struct completion done; }; struct pt_regs___2; struct ipc_ids { int in_use; short unsigned int seq; struct rw_semaphore rwsem; struct idr ipcs_idr; int max_idx; int last_idx; struct rhashtable key_ht; }; struct ipc_namespace { struct ipc_ids ids[3]; int sem_ctls[4]; int used_sems; unsigned int msg_ctlmax; unsigned int msg_ctlmnb; unsigned int msg_ctlmni; atomic_t msg_bytes; atomic_t msg_hdrs; size_t shm_ctlmax; size_t shm_ctlall; long unsigned int shm_tot; int shm_ctlmni; int shm_rmid_forced; struct notifier_block ipcns_nb; struct vfsmount *mq_mnt; unsigned int mq_queues_count; unsigned int mq_queues_max; unsigned int mq_msg_max; unsigned int mq_msgsize_max; unsigned int mq_msg_default; unsigned int mq_msgsize_default; struct user_namespace *user_ns; struct ucounts *ucounts; struct llist_node mnt_llist; struct ns_common ns; }; struct srcu_notifier_head { struct mutex mutex; struct srcu_struct srcu; struct notifier_block *head; }; enum what { PROC_EVENT_NONE = 0, PROC_EVENT_FORK = 1, PROC_EVENT_EXEC = 2, PROC_EVENT_UID = 4, PROC_EVENT_GID = 64, PROC_EVENT_SID = 128, PROC_EVENT_PTRACE = 256, PROC_EVENT_COMM = 512, PROC_EVENT_COREDUMP = 1073741824, PROC_EVENT_EXIT = 2147483648, }; typedef u64 async_cookie_t; typedef void (*async_func_t)(void *, async_cookie_t); struct async_domain { struct list_head pending; unsigned int registered: 1; }; struct async_entry { struct list_head domain_list; struct list_head global_list; struct work_struct work; async_cookie_t cookie; async_func_t func; void *data; struct async_domain *domain; }; struct smpboot_thread_data { unsigned int cpu; unsigned int status; struct smp_hotplug_thread *ht; }; enum { HP_THREAD_NONE = 0, HP_THREAD_ACTIVE = 1, HP_THREAD_PARKED = 2, }; struct pin_cookie {}; enum { CSD_FLAG_LOCK = 1, IRQ_WORK_PENDING = 1, IRQ_WORK_BUSY = 2, IRQ_WORK_LAZY = 4, IRQ_WORK_HARD_IRQ = 8, IRQ_WORK_CLAIMED = 3, CSD_TYPE_ASYNC = 0, CSD_TYPE_SYNC = 16, CSD_TYPE_IRQ_WORK = 32, CSD_TYPE_TTWU = 48, CSD_FLAG_TYPE_MASK = 240, }; struct __call_single_data { struct __call_single_node node; smp_call_func_t func; void *info; }; typedef struct __call_single_data call_single_data_t; typedef int (*task_call_f)(struct task_struct *, void *); struct dl_bw { raw_spinlock_t lock; u64 bw; u64 total_bw; }; struct cpudl_item; struct cpudl { raw_spinlock_t lock; int size; cpumask_var_t free_cpus; struct cpudl_item *elements; }; struct cpupri_vec { atomic_t count; cpumask_var_t mask; }; struct cpupri { struct cpupri_vec pri_to_cpu[101]; int *cpu_to_pri; }; struct perf_domain; struct root_domain { atomic_t refcount; atomic_t rto_count; struct callback_head rcu; cpumask_var_t span; cpumask_var_t online; int overload; int overutilized; cpumask_var_t dlo_mask; atomic_t dlo_count; struct dl_bw dl_bw; struct cpudl cpudl; u64 visit_gen; struct irq_work rto_push_work; raw_spinlock_t rto_lock; int rto_loop; int rto_cpu; atomic_t rto_loop_next; atomic_t rto_loop_start; cpumask_var_t rto_mask; struct cpupri cpupri; long unsigned int max_cpu_capacity; struct perf_domain *pd; }; struct cfs_rq { struct load_weight load; unsigned int nr_running; unsigned int h_nr_running; unsigned int idle_nr_running; unsigned int idle_h_nr_running; u64 exec_clock; u64 min_vruntime; struct rb_root_cached tasks_timeline; struct sched_entity *curr; struct sched_entity *next; struct sched_entity *last; struct sched_entity *skip; long: 64; long: 64; long: 64; long: 64; struct sched_avg avg; struct { raw_spinlock_t lock; int nr; long unsigned int load_avg; long unsigned int util_avg; long unsigned int runnable_avg; long: 64; long: 64; long: 64; long: 64; } removed; long unsigned int tg_load_avg_contrib; long int propagate; long int prop_runnable_sum; long unsigned int h_load; u64 last_h_load_update; struct sched_entity *h_load_next; struct rq *rq; int on_list; struct list_head leaf_cfs_rq_list; struct task_group *tg; int idle; long: 32; long: 64; long: 64; long: 64; long: 64; }; struct cfs_bandwidth {}; struct task_group { struct cgroup_subsys_state css; struct sched_entity **se; struct cfs_rq **cfs_rq; long unsigned int shares; int idle; long: 32; long: 64; long: 64; long: 64; atomic_long_t load_avg; struct callback_head rcu; struct list_head list; struct task_group *parent; struct list_head siblings; struct list_head children; struct cfs_bandwidth cfs_bandwidth; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct sched_domain_attr { int relax_domain_level; }; struct sched_group { struct sched_group *next; atomic_t ref; unsigned int group_weight; struct sched_group_capacity *sgc; int asym_prefer_cpu; int flags; long unsigned int cpumask[0]; }; struct sched_group_capacity { atomic_t ref; long unsigned int capacity; long unsigned int min_capacity; long unsigned int max_capacity; long unsigned int next_update; int imbalance; long unsigned int cpumask[0]; }; struct em_perf_state { long unsigned int frequency; long unsigned int power; long unsigned int cost; long unsigned int flags; }; struct em_perf_domain { struct em_perf_state *table; int nr_perf_states; long unsigned int flags; long unsigned int cpus[0]; }; enum ctx_state { CONTEXT_DISABLED = 4294967295, CONTEXT_KERNEL = 0, CONTEXT_USER = 1, CONTEXT_GUEST = 2, }; struct kernel_cpustat { u64 cpustat[10]; }; enum { MEMBARRIER_STATE_PRIVATE_EXPEDITED_READY = 1, MEMBARRIER_STATE_PRIVATE_EXPEDITED = 2, MEMBARRIER_STATE_GLOBAL_EXPEDITED_READY = 4, MEMBARRIER_STATE_GLOBAL_EXPEDITED = 8, MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE_READY = 16, MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE = 32, MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ_READY = 64, MEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ = 128, }; enum { CFTYPE_ONLY_ON_ROOT = 1, CFTYPE_NOT_ON_ROOT = 2, CFTYPE_NS_DELEGATABLE = 4, CFTYPE_NO_PREFIX = 8, CFTYPE_WORLD_WRITABLE = 16, CFTYPE_DEBUG = 32, CFTYPE_PRESSURE = 64, __CFTYPE_ONLY_ON_DFL = 65536, __CFTYPE_NOT_ON_DFL = 131072, }; struct trace_event_raw_sched_kthread_stop { struct trace_entry ent; char comm[16]; pid_t pid; char __data[0]; }; struct trace_event_raw_sched_kthread_stop_ret { struct trace_entry ent; int ret; char __data[0]; }; struct trace_event_raw_sched_kthread_work_queue_work { struct trace_entry ent; void *work; void *function; void *worker; char __data[0]; }; struct trace_event_raw_sched_kthread_work_execute_start { struct trace_entry ent; void *work; void *function; char __data[0]; }; struct trace_event_raw_sched_kthread_work_execute_end { struct trace_entry ent; void *work; void *function; char __data[0]; }; struct trace_event_raw_sched_wakeup_template { struct trace_entry ent; char comm[16]; pid_t pid; int prio; int target_cpu; char __data[0]; }; struct trace_event_raw_sched_switch { struct trace_entry ent; char prev_comm[16]; pid_t prev_pid; int prev_prio; long int prev_state; char next_comm[16]; pid_t next_pid; int next_prio; char __data[0]; }; struct trace_event_raw_sched_migrate_task { struct trace_entry ent; char comm[16]; pid_t pid; int prio; int orig_cpu; int dest_cpu; char __data[0]; }; struct trace_event_raw_sched_process_template { struct trace_entry ent; char comm[16]; pid_t pid; int prio; char __data[0]; }; struct trace_event_raw_sched_process_wait { struct trace_entry ent; char comm[16]; pid_t pid; int prio; char __data[0]; }; struct trace_event_raw_sched_process_fork { struct trace_entry ent; char parent_comm[16]; pid_t parent_pid; char child_comm[16]; pid_t child_pid; char __data[0]; }; struct trace_event_raw_sched_process_exec { struct trace_entry ent; u32 __data_loc_filename; pid_t pid; pid_t old_pid; char __data[0]; }; struct trace_event_raw_sched_stat_runtime { struct trace_entry ent; char comm[16]; pid_t pid; u64 runtime; u64 vruntime; char __data[0]; }; struct trace_event_raw_sched_pi_setprio { struct trace_entry ent; char comm[16]; pid_t pid; int oldprio; int newprio; char __data[0]; }; struct trace_event_raw_sched_move_numa { struct trace_entry ent; pid_t pid; pid_t tgid; pid_t ngid; int src_cpu; int src_nid; int dst_cpu; int dst_nid; char __data[0]; }; struct trace_event_raw_sched_numa_pair_template { struct trace_entry ent; pid_t src_pid; pid_t src_tgid; pid_t src_ngid; int src_cpu; int src_nid; pid_t dst_pid; pid_t dst_tgid; pid_t dst_ngid; int dst_cpu; int dst_nid; char __data[0]; }; struct trace_event_raw_sched_wake_idle_without_ipi { struct trace_entry ent; int cpu; char __data[0]; }; struct trace_event_data_offsets_sched_kthread_stop {}; struct trace_event_data_offsets_sched_kthread_stop_ret {}; struct trace_event_data_offsets_sched_kthread_work_queue_work {}; struct trace_event_data_offsets_sched_kthread_work_execute_start {}; struct trace_event_data_offsets_sched_kthread_work_execute_end {}; struct trace_event_data_offsets_sched_wakeup_template {}; struct trace_event_data_offsets_sched_switch {}; struct trace_event_data_offsets_sched_migrate_task {}; struct trace_event_data_offsets_sched_process_template {}; struct trace_event_data_offsets_sched_process_wait {}; struct trace_event_data_offsets_sched_process_fork {}; struct trace_event_data_offsets_sched_process_exec { u32 filename; }; struct trace_event_data_offsets_sched_stat_runtime {}; struct trace_event_data_offsets_sched_pi_setprio {}; struct trace_event_data_offsets_sched_move_numa {}; struct trace_event_data_offsets_sched_numa_pair_template {}; struct trace_event_data_offsets_sched_wake_idle_without_ipi {}; typedef void (*btf_trace_sched_kthread_stop)(void *, struct task_struct *); typedef void (*btf_trace_sched_kthread_stop_ret)(void *, int); typedef void (*btf_trace_sched_kthread_work_queue_work)(void *, struct kthread_worker *, struct kthread_work *); typedef void (*btf_trace_sched_kthread_work_execute_start)(void *, struct kthread_work *); typedef void (*btf_trace_sched_kthread_work_execute_end)(void *, struct kthread_work *, kthread_work_func_t); typedef void (*btf_trace_sched_waking)(void *, struct task_struct *); typedef void (*btf_trace_sched_wakeup)(void *, struct task_struct *); typedef void (*btf_trace_sched_wakeup_new)(void *, struct task_struct *); typedef void (*btf_trace_sched_switch)(void *, bool, struct task_struct *, struct task_struct *); typedef void (*btf_trace_sched_migrate_task)(void *, struct task_struct *, int); typedef void (*btf_trace_sched_process_free)(void *, struct task_struct *); typedef void (*btf_trace_sched_process_exit)(void *, struct task_struct *); typedef void (*btf_trace_sched_wait_task)(void *, struct task_struct *); typedef void (*btf_trace_sched_process_wait)(void *, struct pid *); typedef void (*btf_trace_sched_process_fork)(void *, struct task_struct *, struct task_struct *); typedef void (*btf_trace_sched_process_exec)(void *, struct task_struct *, pid_t, struct linux_binprm *); typedef void (*btf_trace_sched_stat_runtime)(void *, struct task_struct *, u64, u64); typedef void (*btf_trace_sched_pi_setprio)(void *, struct task_struct *, struct task_struct *); typedef void (*btf_trace_sched_move_numa)(void *, struct task_struct *, int, int); typedef void (*btf_trace_sched_stick_numa)(void *, struct task_struct *, int, struct task_struct *, int); typedef void (*btf_trace_sched_swap_numa)(void *, struct task_struct *, int, struct task_struct *, int); typedef void (*btf_trace_sched_wake_idle_without_ipi)(void *, int); typedef void (*btf_trace_pelt_cfs_tp)(void *, struct cfs_rq *); typedef void (*btf_trace_pelt_rt_tp)(void *, struct rq *); struct rt_prio_array { long unsigned int bitmap[2]; struct list_head queue[100]; }; struct rt_rq { struct rt_prio_array active; unsigned int rt_nr_running; unsigned int rr_nr_running; struct { int curr; int next; } highest_prio; unsigned int rt_nr_migratory; unsigned int rt_nr_total; int overloaded; struct plist_head pushable_tasks; int rt_queued; int rt_throttled; u64 rt_time; u64 rt_runtime; raw_spinlock_t rt_runtime_lock; }; struct dl_rq { struct rb_root_cached root; unsigned int dl_nr_running; struct { u64 curr; u64 next; } earliest_dl; unsigned int dl_nr_migratory; int overloaded; struct rb_root_cached pushable_dl_tasks_root; u64 running_bw; u64 this_bw; u64 extra_bw; u64 bw_ratio; }; struct cpu_stop_done; struct cpu_stop_work { struct list_head list; cpu_stop_fn_t fn; long unsigned int caller; void *arg; struct cpu_stop_done *done; }; struct cpuidle_state; struct rq { raw_spinlock_t __lock; unsigned int nr_running; long unsigned int last_blocked_load_update_tick; unsigned int has_blocked_load; long: 32; long: 64; call_single_data_t nohz_csd; unsigned int nohz_tick_stopped; atomic_t nohz_flags; unsigned int ttwu_pending; u64 nr_switches; long: 64; long: 64; long: 64; long: 64; long: 64; struct cfs_rq cfs; struct rt_rq rt; struct dl_rq dl; struct list_head leaf_cfs_rq_list; struct list_head *tmp_alone_branch; unsigned int nr_uninterruptible; struct task_struct *curr; struct task_struct *idle; struct task_struct *stop; long unsigned int next_balance; struct mm_struct *prev_mm; unsigned int clock_update_flags; u64 clock; long: 64; long: 64; long: 64; long: 64; long: 64; u64 clock_task; u64 clock_pelt; long unsigned int lost_idle_time; atomic_t nr_iowait; int membarrier_state; struct root_domain *rd; struct sched_domain *sd; long unsigned int cpu_capacity; long unsigned int cpu_capacity_orig; struct callback_head *balance_callback; unsigned char nohz_idle_balance; unsigned char idle_balance; long unsigned int misfit_task_load; int active_balance; int push_cpu; struct cpu_stop_work active_balance_work; int cpu; int online; struct list_head cfs_tasks; long: 64; long: 64; long: 64; struct sched_avg avg_rt; struct sched_avg avg_dl; u64 idle_stamp; u64 avg_idle; long unsigned int wake_stamp; u64 wake_avg_idle; u64 max_idle_balance_cost; struct rcuwait hotplug_wait; u64 prev_steal_time; long unsigned int calc_load_update; long int calc_load_active; long: 64; long: 64; long: 64; call_single_data_t hrtick_csd; struct hrtimer hrtick_timer; ktime_t hrtick_time; struct cpuidle_state *idle_state; unsigned int nr_pinned; unsigned int push_busy; struct cpu_stop_work push_work; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; typedef void (*btf_trace_pelt_dl_tp)(void *, struct rq *); typedef void (*btf_trace_pelt_thermal_tp)(void *, struct rq *); typedef void (*btf_trace_pelt_irq_tp)(void *, struct rq *); typedef void (*btf_trace_pelt_se_tp)(void *, struct sched_entity *); typedef void (*btf_trace_sched_cpu_capacity_tp)(void *, struct rq *); typedef void (*btf_trace_sched_overutilized_tp)(void *, struct root_domain *, bool); typedef void (*btf_trace_sched_util_est_cfs_tp)(void *, struct cfs_rq *); typedef void (*btf_trace_sched_util_est_se_tp)(void *, struct sched_entity *); typedef void (*btf_trace_sched_update_nr_running_tp)(void *, struct rq *, int); struct wake_q_head { struct wake_q_node *first; struct wake_q_node **lastp; }; struct sched_attr { __u32 size; __u32 sched_policy; __u64 sched_flags; __s32 sched_nice; __u32 sched_priority; __u64 sched_runtime; __u64 sched_deadline; __u64 sched_period; __u32 sched_util_min; __u32 sched_util_max; }; struct cpuidle_state_usage { long long unsigned int disable; long long unsigned int usage; u64 time_ns; long long unsigned int above; long long unsigned int below; long long unsigned int rejected; }; struct cpuidle_device; struct cpuidle_driver; struct cpuidle_state { char name[16]; char desc[32]; s64 exit_latency_ns; s64 target_residency_ns; unsigned int flags; unsigned int exit_latency; int power_usage; unsigned int target_residency; int (*enter)(struct cpuidle_device *, struct cpuidle_driver *, int); int (*enter_dead)(struct cpuidle_device *, int); int (*enter_s2idle)(struct cpuidle_device *, struct cpuidle_driver *, int); }; struct cpuidle_driver_kobj; struct cpuidle_state_kobj; struct cpuidle_device_kobj; struct cpuidle_device { unsigned int registered: 1; unsigned int enabled: 1; unsigned int poll_time_limit: 1; unsigned int cpu; ktime_t next_hrtimer; int last_state_idx; u64 last_residency_ns; u64 poll_limit_ns; u64 forced_idle_latency_limit_ns; struct cpuidle_state_usage states_usage[10]; struct cpuidle_state_kobj *kobjs[10]; struct cpuidle_driver_kobj *kobj_driver; struct cpuidle_device_kobj *kobj_dev; struct list_head device_list; }; struct cpuidle_driver { const char *name; struct module *owner; unsigned int bctimer: 1; struct cpuidle_state states[10]; int state_count; int safe_state_index; struct cpumask *cpumask; const char *governor; }; struct cpudl_item { u64 dl; int cpu; int idx; }; struct rt_bandwidth { raw_spinlock_t rt_runtime_lock; ktime_t rt_period; u64 rt_runtime; struct hrtimer rt_period_timer; unsigned int rt_period_active; }; struct dl_bandwidth { raw_spinlock_t dl_runtime_lock; u64 dl_runtime; u64 dl_period; }; typedef int (*tg_visitor)(struct task_group *, void *); struct perf_domain { struct em_perf_domain *em_pd; struct perf_domain *next; struct callback_head rcu; }; struct rq_flags { long unsigned int flags; struct pin_cookie cookie; }; enum { __SCHED_FEAT_GENTLE_FAIR_SLEEPERS = 0, __SCHED_FEAT_START_DEBIT = 1, __SCHED_FEAT_NEXT_BUDDY = 2, __SCHED_FEAT_LAST_BUDDY = 3, __SCHED_FEAT_CACHE_HOT_BUDDY = 4, __SCHED_FEAT_WAKEUP_PREEMPTION = 5, __SCHED_FEAT_HRTICK = 6, __SCHED_FEAT_HRTICK_DL = 7, __SCHED_FEAT_DOUBLE_TICK = 8, __SCHED_FEAT_NONTASK_CAPACITY = 9, __SCHED_FEAT_TTWU_QUEUE = 10, __SCHED_FEAT_SIS_PROP = 11, __SCHED_FEAT_WARN_DOUBLE_CLOCK = 12, __SCHED_FEAT_RT_PUSH_IPI = 13, __SCHED_FEAT_RT_RUNTIME_SHARE = 14, __SCHED_FEAT_LB_MIN = 15, __SCHED_FEAT_ATTACH_AGE_LOAD = 16, __SCHED_FEAT_WA_IDLE = 17, __SCHED_FEAT_WA_WEIGHT = 18, __SCHED_FEAT_WA_BIAS = 19, __SCHED_FEAT_UTIL_EST = 20, __SCHED_FEAT_UTIL_EST_FASTUP = 21, __SCHED_FEAT_LATENCY_WARN = 22, __SCHED_FEAT_ALT_PERIOD = 23, __SCHED_FEAT_BASE_SLICE = 24, __SCHED_FEAT_NR = 25, }; enum cpu_util_type { FREQUENCY_UTIL = 0, ENERGY_UTIL = 1, }; struct set_affinity_pending; struct migration_arg { struct task_struct *task; int dest_cpu; struct set_affinity_pending *pending; }; struct set_affinity_pending { refcount_t refs; unsigned int stop_pending; struct completion done; struct cpu_stop_work stop_work; struct migration_arg arg; }; enum { cpuset = 0, possible = 1, fail = 2, }; enum tick_dep_bits { TICK_DEP_BIT_POSIX_TIMER = 0, TICK_DEP_BIT_PERF_EVENTS = 1, TICK_DEP_BIT_SCHED = 2, TICK_DEP_BIT_CLOCK_UNSTABLE = 3, TICK_DEP_BIT_RCU = 4, TICK_DEP_BIT_RCU_EXP = 5, }; struct sched_clock_data { u64 tick_raw; u64 tick_gtod; u64 clock; }; struct idle_timer { struct hrtimer timer; int done; }; enum cpu_idle_type { CPU_IDLE = 0, CPU_NOT_IDLE = 1, CPU_NEWLY_IDLE = 2, CPU_MAX_IDLE_TYPES = 3, }; enum sched_tunable_scaling { SCHED_TUNABLESCALING_NONE = 0, SCHED_TUNABLESCALING_LOG = 1, SCHED_TUNABLESCALING_LINEAR = 2, SCHED_TUNABLESCALING_END = 3, }; enum fbq_type { regular = 0, remote = 1, all = 2, }; enum group_type { group_has_spare = 0, group_fully_busy = 1, group_misfit_task = 2, group_asym_packing = 3, group_imbalanced = 4, group_overloaded = 5, }; enum migration_type { migrate_load = 0, migrate_util = 1, migrate_task = 2, migrate_misfit = 3, }; struct lb_env { struct sched_domain *sd; struct rq *src_rq; int src_cpu; int dst_cpu; struct rq *dst_rq; struct cpumask *dst_grpmask; int new_dst_cpu; enum cpu_idle_type idle; long int imbalance; struct cpumask *cpus; unsigned int flags; unsigned int loop; unsigned int loop_break; unsigned int loop_max; enum fbq_type fbq_type; enum migration_type migration_type; struct list_head tasks; }; struct sg_lb_stats { long unsigned int avg_load; long unsigned int group_load; long unsigned int group_capacity; long unsigned int group_util; long unsigned int group_runnable; unsigned int sum_nr_running; unsigned int sum_h_nr_running; unsigned int idle_cpus; unsigned int group_weight; enum group_type group_type; unsigned int group_asym_packing; long unsigned int group_misfit_task_load; }; struct sd_lb_stats { struct sched_group *busiest; struct sched_group *local; long unsigned int total_load; long unsigned int total_capacity; long unsigned int avg_load; unsigned int prefer_sibling; struct sg_lb_stats busiest_stat; struct sg_lb_stats local_stat; }; typedef struct rt_rq *rt_rq_iter_t; struct s_data { struct sched_domain **sd; struct root_domain *rd; }; enum s_alloc { sa_rootdomain = 0, sa_sd = 1, sa_sd_storage = 2, sa_none = 3, }; struct asym_cap_data { struct list_head link; long unsigned int capacity; long unsigned int cpus[0]; }; enum { MEMBARRIER_FLAG_SYNC_CORE = 1, MEMBARRIER_FLAG_RSEQ = 2, }; enum membarrier_cmd { MEMBARRIER_CMD_QUERY = 0, MEMBARRIER_CMD_GLOBAL = 1, MEMBARRIER_CMD_GLOBAL_EXPEDITED = 2, MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED = 4, MEMBARRIER_CMD_PRIVATE_EXPEDITED = 8, MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED = 16, MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE = 32, MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE = 64, MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ = 128, MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ = 256, MEMBARRIER_CMD_SHARED = 1, }; enum membarrier_cmd_flag { MEMBARRIER_CMD_FLAG_CPU = 1, }; struct ww_acquire_ctx; struct ww_mutex { struct mutex base; struct ww_acquire_ctx *ctx; }; struct ww_acquire_ctx { struct task_struct *task; long unsigned int stamp; unsigned int acquired; short unsigned int wounded; short unsigned int is_wait_die; }; struct mutex_waiter { struct list_head list; struct task_struct *task; struct ww_acquire_ctx *ww_ctx; }; struct semaphore { raw_spinlock_t lock; unsigned int count; struct list_head wait_list; }; struct semaphore_waiter { struct list_head list; struct task_struct *task; bool up; }; enum rwsem_waiter_type { RWSEM_WAITING_FOR_WRITE = 0, RWSEM_WAITING_FOR_READ = 1, }; struct rwsem_waiter { struct list_head list; struct task_struct *task; enum rwsem_waiter_type type; long unsigned int timeout; bool handoff_set; }; enum rwsem_wake_type { RWSEM_WAKE_ANY = 0, RWSEM_WAKE_READERS = 1, RWSEM_WAKE_READ_OWNED = 2, }; enum owner_state { OWNER_NULL = 1, OWNER_WRITER = 2, OWNER_READER = 4, OWNER_NONSPINNABLE = 8, }; struct optimistic_spin_node { struct optimistic_spin_node *next; struct optimistic_spin_node *prev; int locked; int cpu; }; struct mcs_spinlock { struct mcs_spinlock *next; int locked; int count; }; struct qnode { struct mcs_spinlock mcs; long int reserved[2]; }; enum vcpu_state { vcpu_running = 0, vcpu_halted = 1, vcpu_hashed = 2, }; struct pv_node { struct mcs_spinlock mcs; int cpu; u8 state; }; struct pv_hash_entry { struct qspinlock *lock; struct pv_node *node; }; struct rt_mutex_base { raw_spinlock_t wait_lock; struct rb_root_cached waiters; struct task_struct *owner; }; struct rt_mutex { struct rt_mutex_base rtmutex; }; struct hrtimer_sleeper { struct hrtimer timer; struct task_struct *task; }; struct rt_mutex_waiter { struct rb_node tree_entry; struct rb_node pi_tree_entry; struct task_struct *task; struct rt_mutex_base *lock; unsigned int wake_state; int prio; u64 deadline; struct ww_acquire_ctx *ww_ctx; }; struct rt_wake_q_head { struct wake_q_head head; struct task_struct *rtlock_task; }; enum rtmutex_chainwalk { RT_MUTEX_MIN_CHAINWALK = 0, RT_MUTEX_FULL_CHAINWALK = 1, }; struct pm_qos_request { struct plist_node node; struct pm_qos_constraints *qos; }; enum pm_qos_req_action { PM_QOS_ADD_REQ = 0, PM_QOS_UPDATE_REQ = 1, PM_QOS_REMOVE_REQ = 2, }; struct miscdevice { int minor; const char *name; const struct file_operations *fops; struct list_head list; struct device *parent; struct device *this_device; const struct attribute_group **groups; const char *nodename; umode_t mode; }; struct sysrq_key_op { void (* const handler)(int); const char * const help_msg; const char * const action_msg; const int enable_mask; }; typedef unsigned int uint; struct dev_printk_info { char subsystem[16]; char device[48]; }; struct console { char name[16]; void (*write)(struct console *, const char *, unsigned int); int (*read)(struct console *, char *, unsigned int); struct tty_driver * (*device)(struct console *, int *); void (*unblank)(); int (*setup)(struct console *, char *); int (*exit)(struct console *); int (*match)(struct console *, char *, int, char *); short int flags; short int index; int cflag; uint ispeed; uint ospeed; void *data; struct console *next; }; struct kmsg_dump_iter { u64 cur_seq; u64 next_seq; }; struct kmsg_dumper { struct list_head list; void (*dump)(struct kmsg_dumper *, enum kmsg_dump_reason); enum kmsg_dump_reason max_reason; bool registered; }; struct trace_event_raw_console { struct trace_entry ent; u32 __data_loc_msg; char __data[0]; }; struct trace_event_data_offsets_console { u32 msg; }; typedef void (*btf_trace_console)(void *, const char *, size_t); struct printk_info { u64 seq; u64 ts_nsec; u16 text_len; u8 facility; u8 flags: 5; u8 level: 3; u32 caller_id; struct dev_printk_info dev_info; }; struct printk_record { struct printk_info *info; char *text_buf; unsigned int text_buf_size; }; struct prb_data_blk_lpos { long unsigned int begin; long unsigned int next; }; struct prb_desc { atomic_long_t state_var; struct prb_data_blk_lpos text_blk_lpos; }; struct prb_data_ring { unsigned int size_bits; char *data; atomic_long_t head_lpos; atomic_long_t tail_lpos; }; struct prb_desc_ring { unsigned int count_bits; struct prb_desc *descs; struct printk_info *infos; atomic_long_t head_id; atomic_long_t tail_id; }; struct printk_ringbuffer { struct prb_desc_ring desc_ring; struct prb_data_ring text_data_ring; atomic_long_t fail; }; struct prb_reserved_entry { struct printk_ringbuffer *rb; long unsigned int irqflags; long unsigned int id; unsigned int text_space; }; enum desc_state { desc_miss = 4294967295, desc_reserved = 0, desc_committed = 1, desc_finalized = 2, desc_reusable = 3, }; struct console_cmdline { char name[16]; int index; bool user_specified; char *options; }; enum printk_info_flags { LOG_NEWLINE = 2, LOG_CONT = 8, }; enum devkmsg_log_bits { __DEVKMSG_LOG_BIT_ON = 0, __DEVKMSG_LOG_BIT_OFF = 1, __DEVKMSG_LOG_BIT_LOCK = 2, }; enum devkmsg_log_masks { DEVKMSG_LOG_MASK_ON = 1, DEVKMSG_LOG_MASK_OFF = 2, DEVKMSG_LOG_MASK_LOCK = 4, }; enum con_msg_format_flags { MSG_FORMAT_DEFAULT = 0, MSG_FORMAT_SYSLOG = 1, }; struct latched_seq { seqcount_latch_t latch; u64 val[2]; }; struct devkmsg_user { atomic64_t seq; struct ratelimit_state rs; struct mutex lock; char buf[8192]; struct printk_info info; char text_buf[8192]; struct printk_record record; }; struct dev_printk_info___2; struct prb_data_block { long unsigned int id; char data[0]; }; enum { IRQS_AUTODETECT = 1, IRQS_SPURIOUS_DISABLED = 2, IRQS_POLL_INPROGRESS = 8, IRQS_ONESHOT = 32, IRQS_REPLAY = 64, IRQS_WAITING = 128, IRQS_PENDING = 512, IRQS_SUSPENDED = 2048, IRQS_TIMINGS = 4096, IRQS_NMI = 8192, }; enum { _IRQ_DEFAULT_INIT_FLAGS = 0, _IRQ_PER_CPU = 512, _IRQ_LEVEL = 256, _IRQ_NOPROBE = 1024, _IRQ_NOREQUEST = 2048, _IRQ_NOTHREAD = 65536, _IRQ_NOAUTOEN = 4096, _IRQ_MOVE_PCNTXT = 16384, _IRQ_NO_BALANCING = 8192, _IRQ_NESTED_THREAD = 32768, _IRQ_PER_CPU_DEVID = 131072, _IRQ_IS_POLLED = 262144, _IRQ_DISABLE_UNLAZY = 524288, _IRQ_HIDDEN = 1048576, _IRQ_NO_DEBUG = 2097152, _IRQF_MODIFY_MASK = 2096911, }; enum { IRQTF_RUNTHREAD = 0, IRQTF_WARNED = 1, IRQTF_AFFINITY = 2, IRQTF_FORCED_THREAD = 3, }; enum { IRQC_IS_HARDIRQ = 0, IRQC_IS_NESTED = 1, }; enum { IRQ_STARTUP_NORMAL = 0, IRQ_STARTUP_MANAGED = 1, IRQ_STARTUP_ABORT = 2, }; struct irq_devres { unsigned int irq; void *dev_id; }; struct irq_desc_devres { unsigned int from; unsigned int cnt; }; struct of_phandle_args { struct device_node *np; int args_count; uint32_t args[16]; }; struct irqchip_fwid { struct fwnode_handle fwnode; unsigned int type; char *name; phys_addr_t *pa; }; enum { AFFINITY = 0, AFFINITY_LIST = 1, EFFECTIVE = 2, EFFECTIVE_LIST = 3, }; struct irq_affinity { unsigned int pre_vectors; unsigned int post_vectors; unsigned int nr_sets; unsigned int set_size[4]; void (*calc_sets)(struct irq_affinity *, unsigned int); void *priv; }; struct node_vectors { unsigned int id; union { unsigned int nvectors; unsigned int ncpus; }; }; struct cpumap { unsigned int available; unsigned int allocated; unsigned int managed; unsigned int managed_allocated; bool initialized; bool online; long unsigned int alloc_map[4]; long unsigned int managed_map[4]; }; struct irq_matrix___2 { unsigned int matrix_bits; unsigned int alloc_start; unsigned int alloc_end; unsigned int alloc_size; unsigned int global_available; unsigned int global_reserved; unsigned int systembits_inalloc; unsigned int total_allocated; unsigned int online_maps; struct cpumap *maps; long unsigned int scratch_map[4]; long unsigned int system_map[4]; }; struct trace_event_raw_irq_matrix_global { struct trace_entry ent; unsigned int online_maps; unsigned int global_available; unsigned int global_reserved; unsigned int total_allocated; char __data[0]; }; struct trace_event_raw_irq_matrix_global_update { struct trace_entry ent; int bit; unsigned int online_maps; unsigned int global_available; unsigned int global_reserved; unsigned int total_allocated; char __data[0]; }; struct trace_event_raw_irq_matrix_cpu { struct trace_entry ent; int bit; unsigned int cpu; bool online; unsigned int available; unsigned int allocated; unsigned int managed; unsigned int online_maps; unsigned int global_available; unsigned int global_reserved; unsigned int total_allocated; char __data[0]; }; struct trace_event_data_offsets_irq_matrix_global {}; struct trace_event_data_offsets_irq_matrix_global_update {}; struct trace_event_data_offsets_irq_matrix_cpu {}; typedef void (*btf_trace_irq_matrix_online)(void *, struct irq_matrix___2 *); typedef void (*btf_trace_irq_matrix_offline)(void *, struct irq_matrix___2 *); typedef void (*btf_trace_irq_matrix_reserve)(void *, struct irq_matrix___2 *); typedef void (*btf_trace_irq_matrix_remove_reserved)(void *, struct irq_matrix___2 *); typedef void (*btf_trace_irq_matrix_assign_system)(void *, int, struct irq_matrix___2 *); typedef void (*btf_trace_irq_matrix_alloc_reserved)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *); typedef void (*btf_trace_irq_matrix_reserve_managed)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *); typedef void (*btf_trace_irq_matrix_remove_managed)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *); typedef void (*btf_trace_irq_matrix_alloc_managed)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *); typedef void (*btf_trace_irq_matrix_assign)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *); typedef void (*btf_trace_irq_matrix_alloc)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *); typedef void (*btf_trace_irq_matrix_free)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *); typedef void (*call_rcu_func_t)(struct callback_head *, rcu_callback_t); struct rcu_synchronize { struct callback_head head; struct completion completion; }; struct trace_event_raw_rcu_utilization { struct trace_entry ent; const char *s; char __data[0]; }; struct trace_event_raw_rcu_stall_warning { struct trace_entry ent; const char *rcuname; const char *msg; char __data[0]; }; struct trace_event_data_offsets_rcu_utilization {}; struct trace_event_data_offsets_rcu_stall_warning {}; typedef void (*btf_trace_rcu_utilization)(void *, const char *); typedef void (*btf_trace_rcu_stall_warning)(void *, const char *, const char *); struct rcu_tasks; typedef void (*rcu_tasks_gp_func_t)(struct rcu_tasks *); typedef void (*pregp_func_t)(); typedef void (*pertask_func_t)(struct task_struct *, struct list_head *); typedef void (*postscan_func_t)(struct list_head *); typedef void (*holdouts_func_t)(struct list_head *, bool, bool *); typedef void (*postgp_func_t)(struct rcu_tasks *); struct rcu_tasks { struct callback_head *cbs_head; struct callback_head **cbs_tail; struct wait_queue_head cbs_wq; raw_spinlock_t cbs_lock; int gp_state; int gp_sleep; int init_fract; long unsigned int gp_jiffies; long unsigned int gp_start; long unsigned int n_gps; long unsigned int n_ipis; long unsigned int n_ipis_fails; struct task_struct *kthread_ptr; rcu_tasks_gp_func_t gp_func; pregp_func_t pregp_func; pertask_func_t pertask_func; postscan_func_t postscan_func; holdouts_func_t holdouts_func; postgp_func_t postgp_func; call_rcu_func_t call_func; char *name; char *kname; }; enum { GP_IDLE = 0, GP_ENTER = 1, GP_PASSED = 2, GP_EXIT = 3, GP_REPLAY = 4, }; struct rcu_cblist { struct callback_head *head; struct callback_head **tail; long int len; }; enum rcutorture_type { RCU_FLAVOR = 0, RCU_TASKS_FLAVOR = 1, RCU_TASKS_RUDE_FLAVOR = 2, RCU_TASKS_TRACING_FLAVOR = 3, RCU_TRIVIAL_FLAVOR = 4, SRCU_FLAVOR = 5, INVALID_RCU_FLAVOR = 6, }; struct rcu_exp_work { long unsigned int rew_s; struct work_struct rew_work; }; struct rcu_node { raw_spinlock_t lock; long unsigned int gp_seq; long unsigned int gp_seq_needed; long unsigned int completedqs; long unsigned int qsmask; long unsigned int rcu_gp_init_mask; long unsigned int qsmaskinit; long unsigned int qsmaskinitnext; long unsigned int ofl_seq; long unsigned int expmask; long unsigned int expmaskinit; long unsigned int expmaskinitnext; long unsigned int cbovldmask; long unsigned int ffmask; long unsigned int grpmask; int grplo; int grphi; u8 grpnum; u8 level; bool wait_blkd_tasks; struct rcu_node *parent; struct list_head blkd_tasks; struct list_head *gp_tasks; struct list_head *exp_tasks; struct list_head *boost_tasks; struct rt_mutex boost_mtx; long unsigned int boost_time; struct task_struct *boost_kthread_task; unsigned int boost_kthread_status; long unsigned int n_boosts; long: 64; raw_spinlock_t fqslock; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; spinlock_t exp_lock; long unsigned int exp_seq_rq; wait_queue_head_t exp_wq[4]; struct rcu_exp_work rew; bool exp_need_flush; long: 56; long: 64; long: 64; long: 64; long: 64; }; union rcu_noqs { struct { u8 norm; u8 exp; } b; u16 s; }; struct rcu_data { long unsigned int gp_seq; long unsigned int gp_seq_needed; union rcu_noqs cpu_no_qs; bool core_needs_qs; bool beenonline; bool gpwrap; bool exp_deferred_qs; bool cpu_started; struct rcu_node *mynode; long unsigned int grpmask; long unsigned int ticks_this_gp; struct irq_work defer_qs_iw; bool defer_qs_iw_pending; struct work_struct strict_work; struct rcu_segcblist cblist; long int qlen_last_fqs_check; long unsigned int n_cbs_invoked; long unsigned int n_force_qs_snap; long int blimit; int dynticks_snap; long int dynticks_nesting; long int dynticks_nmi_nesting; atomic_t dynticks; bool rcu_need_heavy_qs; bool rcu_urgent_qs; bool rcu_forced_tick; bool rcu_forced_tick_exp; struct callback_head barrier_head; int exp_dynticks_snap; struct task_struct *rcu_cpu_kthread_task; unsigned int rcu_cpu_kthread_status; char rcu_cpu_has_work; unsigned int softirq_snap; struct irq_work rcu_iw; bool rcu_iw_pending; long unsigned int rcu_iw_gp_seq; long unsigned int rcu_ofl_gp_seq; short int rcu_ofl_gp_flags; long unsigned int rcu_onl_gp_seq; short int rcu_onl_gp_flags; long unsigned int last_fqs_resched; int cpu; }; struct rcu_state { struct rcu_node node[1]; struct rcu_node *level[2]; int ncpus; int n_online_cpus; long: 64; long: 64; long: 64; long: 64; long: 64; u8 boost; long unsigned int gp_seq; long unsigned int gp_max; struct task_struct *gp_kthread; struct swait_queue_head gp_wq; short int gp_flags; short int gp_state; long unsigned int gp_wake_time; long unsigned int gp_wake_seq; struct mutex barrier_mutex; atomic_t barrier_cpu_count; struct completion barrier_completion; long unsigned int barrier_sequence; struct mutex exp_mutex; struct mutex exp_wake_mutex; long unsigned int expedited_sequence; atomic_t expedited_need_qs; struct swait_queue_head expedited_wq; int ncpus_snap; u8 cbovld; u8 cbovldnext; long unsigned int jiffies_force_qs; long unsigned int jiffies_kick_kthreads; long unsigned int n_force_qs; long unsigned int gp_start; long unsigned int gp_end; long unsigned int gp_activity; long unsigned int gp_req_activity; long unsigned int jiffies_stall; long unsigned int jiffies_resched; long unsigned int n_force_qs_gpstart; const char *name; char abbr; long: 56; long: 64; long: 64; raw_spinlock_t ofl_lock; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct kvfree_rcu_bulk_data { long unsigned int nr_records; struct kvfree_rcu_bulk_data *next; void *records[0]; }; struct kfree_rcu_cpu; struct kfree_rcu_cpu_work { struct rcu_work rcu_work; struct callback_head *head_free; struct kvfree_rcu_bulk_data *bkvhead_free[2]; struct kfree_rcu_cpu *krcp; }; struct kfree_rcu_cpu { struct callback_head *head; struct kvfree_rcu_bulk_data *bkvhead[2]; struct kfree_rcu_cpu_work krw_arr[2]; raw_spinlock_t lock; struct delayed_work monitor_work; bool monitor_todo; bool initialized; int count; struct delayed_work page_cache_work; atomic_t backoff_page_cache_fill; atomic_t work_in_progress; struct hrtimer hrtimer; struct llist_head bkvcache; int nr_bkv_objs; }; struct dma_sgt_handle { struct sg_table sgt; struct page **pages; }; struct dma_devres { size_t size; void *vaddr; dma_addr_t dma_handle; long unsigned int attrs; }; struct trace_event_raw_swiotlb_bounced { struct trace_entry ent; u32 __data_loc_dev_name; u64 dma_mask; dma_addr_t dev_addr; size_t size; enum swiotlb_force swiotlb_force; char __data[0]; }; struct trace_event_data_offsets_swiotlb_bounced { u32 dev_name; }; typedef void (*btf_trace_swiotlb_bounced)(void *, struct device *, dma_addr_t, size_t, enum swiotlb_force); struct seccomp_data { int nr; __u32 arch; __u64 instruction_pointer; __u64 args[6]; }; struct trace_event_raw_sys_enter { struct trace_entry ent; long int id; long unsigned int args[6]; char __data[0]; }; struct trace_event_raw_sys_exit { struct trace_entry ent; long int id; long int ret; char __data[0]; }; struct trace_event_data_offsets_sys_enter {}; struct trace_event_data_offsets_sys_exit {}; typedef void (*btf_trace_sys_enter)(void *, struct pt_regs *, long int); typedef void (*btf_trace_sys_exit)(void *, struct pt_regs *, long int); struct stacktrace_cookie { long unsigned int *store; unsigned int size; unsigned int skip; unsigned int len; }; typedef __kernel_long_t __kernel_suseconds_t; typedef __kernel_long_t __kernel_old_time_t; typedef __kernel_suseconds_t suseconds_t; typedef __u64 timeu64_t; struct __kernel_itimerspec { struct __kernel_timespec it_interval; struct __kernel_timespec it_value; }; struct timezone { int tz_minuteswest; int tz_dsttime; }; struct itimerspec64 { struct timespec64 it_interval; struct timespec64 it_value; }; struct old_itimerspec32 { struct old_timespec32 it_interval; struct old_timespec32 it_value; }; struct __kernel_timex_timeval { __kernel_time64_t tv_sec; long long int tv_usec; }; struct __kernel_timex { unsigned int modes; long long int offset; long long int freq; long long int maxerror; long long int esterror; int status; long long int constant; long long int precision; long long int tolerance; struct __kernel_timex_timeval time; long long int tick; long long int ppsfreq; long long int jitter; int shift; long long int stabil; long long int jitcnt; long long int calcnt; long long int errcnt; long long int stbcnt; int tai; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct trace_event_raw_timer_class { struct trace_entry ent; void *timer; char __data[0]; }; struct trace_event_raw_timer_start { struct trace_entry ent; void *timer; void *function; long unsigned int expires; long unsigned int now; unsigned int flags; char __data[0]; }; struct trace_event_raw_timer_expire_entry { struct trace_entry ent; void *timer; long unsigned int now; void *function; long unsigned int baseclk; char __data[0]; }; struct trace_event_raw_hrtimer_init { struct trace_entry ent; void *hrtimer; clockid_t clockid; enum hrtimer_mode mode; char __data[0]; }; struct trace_event_raw_hrtimer_start { struct trace_entry ent; void *hrtimer; void *function; s64 expires; s64 softexpires; enum hrtimer_mode mode; char __data[0]; }; struct trace_event_raw_hrtimer_expire_entry { struct trace_entry ent; void *hrtimer; s64 now; void *function; char __data[0]; }; struct trace_event_raw_hrtimer_class { struct trace_entry ent; void *hrtimer; char __data[0]; }; struct trace_event_raw_itimer_state { struct trace_entry ent; int which; long long unsigned int expires; long int value_sec; long int value_nsec; long int interval_sec; long int interval_nsec; char __data[0]; }; struct trace_event_raw_itimer_expire { struct trace_entry ent; int which; pid_t pid; long long unsigned int now; char __data[0]; }; struct trace_event_raw_tick_stop { struct trace_entry ent; int success; int dependency; char __data[0]; }; struct trace_event_data_offsets_timer_class {}; struct trace_event_data_offsets_timer_start {}; struct trace_event_data_offsets_timer_expire_entry {}; struct trace_event_data_offsets_hrtimer_init {}; struct trace_event_data_offsets_hrtimer_start {}; struct trace_event_data_offsets_hrtimer_expire_entry {}; struct trace_event_data_offsets_hrtimer_class {}; struct trace_event_data_offsets_itimer_state {}; struct trace_event_data_offsets_itimer_expire {}; struct trace_event_data_offsets_tick_stop {}; typedef void (*btf_trace_timer_init)(void *, struct timer_list *); typedef void (*btf_trace_timer_start)(void *, struct timer_list *, long unsigned int, unsigned int); typedef void (*btf_trace_timer_expire_entry)(void *, struct timer_list *, long unsigned int); typedef void (*btf_trace_timer_expire_exit)(void *, struct timer_list *); typedef void (*btf_trace_timer_cancel)(void *, struct timer_list *); typedef void (*btf_trace_hrtimer_init)(void *, struct hrtimer *, clockid_t, enum hrtimer_mode); typedef void (*btf_trace_hrtimer_start)(void *, struct hrtimer *, enum hrtimer_mode); typedef void (*btf_trace_hrtimer_expire_entry)(void *, struct hrtimer *, ktime_t *); typedef void (*btf_trace_hrtimer_expire_exit)(void *, struct hrtimer *); typedef void (*btf_trace_hrtimer_cancel)(void *, struct hrtimer *); typedef void (*btf_trace_itimer_state)(void *, int, const struct itimerspec64 * const, long long unsigned int); typedef void (*btf_trace_itimer_expire)(void *, int, struct pid *, long long unsigned int); typedef void (*btf_trace_tick_stop)(void *, int, int); struct timer_base { raw_spinlock_t lock; struct timer_list *running_timer; long unsigned int clk; long unsigned int next_expiry; unsigned int cpu; bool next_expiry_recalc; bool is_idle; bool timers_pending; long unsigned int pending_map[8]; struct hlist_head vectors[512]; long: 64; long: 64; long: 64; }; struct process_timer { struct timer_list timer; struct task_struct *task; }; enum tick_device_mode { TICKDEV_MODE_PERIODIC = 0, TICKDEV_MODE_ONESHOT = 1, }; struct tick_device { struct clock_event_device *evtdev; enum tick_device_mode mode; }; struct ktime_timestamps { u64 mono; u64 boot; u64 real; }; struct system_time_snapshot { u64 cycles; ktime_t real; ktime_t raw; enum clocksource_ids cs_id; unsigned int clock_was_set_seq; u8 cs_was_changed_seq; }; struct system_device_crosststamp { ktime_t device; ktime_t sys_realtime; ktime_t sys_monoraw; }; struct tk_read_base { struct clocksource *clock; u64 mask; u64 cycle_last; u32 mult; u32 shift; u64 xtime_nsec; ktime_t base; u64 base_real; }; struct timekeeper { struct tk_read_base tkr_mono; struct tk_read_base tkr_raw; u64 xtime_sec; long unsigned int ktime_sec; struct timespec64 wall_to_monotonic; ktime_t offs_real; ktime_t offs_boot; ktime_t offs_tai; s32 tai_offset; unsigned int clock_was_set_seq; u8 cs_was_changed_seq; ktime_t next_leap_ktime; u64 raw_sec; struct timespec64 monotonic_to_boot; u64 cycle_interval; u64 xtime_interval; s64 xtime_remainder; u64 raw_interval; u64 ntp_tick; s64 ntp_error; u32 ntp_error_shift; u32 ntp_err_mult; u32 skip_second_overflow; }; struct audit_ntp_data {}; enum timekeeping_adv_mode { TK_ADV_TICK = 0, TK_ADV_FREQ = 1, }; struct tk_fast { seqcount_latch_t seq; struct tk_read_base base[2]; }; struct rtc_wkalrm { unsigned char enabled; unsigned char pending; struct rtc_time time; }; struct rtc_param { __u64 param; union { __u64 uvalue; __s64 svalue; __u64 ptr; }; __u32 index; __u32 __pad; }; struct rtc_class_ops { int (*ioctl)(struct device *, unsigned int, long unsigned int); int (*read_time)(struct device *, struct rtc_time *); int (*set_time)(struct device *, struct rtc_time *); int (*read_alarm)(struct device *, struct rtc_wkalrm *); int (*set_alarm)(struct device *, struct rtc_wkalrm *); int (*proc)(struct device *, struct seq_file *); int (*alarm_irq_enable)(struct device *, unsigned int); int (*read_offset)(struct device *, long int *); int (*set_offset)(struct device *, long int); int (*param_get)(struct device *, struct rtc_param *); int (*param_set)(struct device *, struct rtc_param *); }; struct rtc_device; struct rtc_timer { struct timerqueue_node node; ktime_t period; void (*func)(struct rtc_device *); struct rtc_device *rtc; int enabled; }; struct rtc_device { struct device dev; struct module *owner; int id; const struct rtc_class_ops *ops; struct mutex ops_lock; struct cdev char_dev; long unsigned int flags; long unsigned int irq_data; spinlock_t irq_lock; wait_queue_head_t irq_queue; struct fasync_struct *async_queue; int irq_freq; int max_user_freq; struct timerqueue_head timerqueue; struct rtc_timer aie_timer; struct rtc_timer uie_rtctimer; struct hrtimer pie_timer; int pie_enabled; struct work_struct irqwork; int uie_unsupported; long unsigned int set_offset_nsec; long unsigned int features[1]; time64_t range_min; timeu64_t range_max; time64_t start_secs; time64_t offset_secs; bool set_start_time; }; enum audit_ntp_type { AUDIT_NTP_OFFSET = 0, AUDIT_NTP_FREQ = 1, AUDIT_NTP_STATUS = 2, AUDIT_NTP_TAI = 3, AUDIT_NTP_TICK = 4, AUDIT_NTP_ADJUST = 5, AUDIT_NTP_NVALS = 6, }; typedef s64 int64_t; enum tick_nohz_mode { NOHZ_MODE_INACTIVE = 0, NOHZ_MODE_LOWRES = 1, NOHZ_MODE_HIGHRES = 2, }; struct tick_sched { struct hrtimer sched_timer; long unsigned int check_clocks; enum tick_nohz_mode nohz_mode; unsigned int inidle: 1; unsigned int tick_stopped: 1; unsigned int idle_active: 1; unsigned int do_timer_last: 1; unsigned int got_idle_tick: 1; ktime_t last_tick; ktime_t next_tick; long unsigned int idle_jiffies; long unsigned int idle_calls; long unsigned int idle_sleeps; ktime_t idle_entrytime; ktime_t idle_waketime; ktime_t idle_exittime; ktime_t idle_sleeptime; ktime_t iowait_sleeptime; long unsigned int last_jiffies; u64 timer_expires; u64 timer_expires_base; u64 next_timer; ktime_t idle_expires; atomic_t tick_dep_mask; }; struct timer_list_iter { int cpu; bool second_pass; u64 now; }; struct tm { int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; long int tm_year; int tm_wday; int tm_yday; }; struct cyclecounter { u64 (*read)(const struct cyclecounter *); u64 mask; u32 mult; u32 shift; }; struct timecounter { const struct cyclecounter *cc; u64 cycle_last; u64 nsec; u64 mask; u64 frac; }; typedef __kernel_timer_t timer_t; enum alarmtimer_type { ALARM_REALTIME = 0, ALARM_BOOTTIME = 1, ALARM_NUMTYPE = 2, ALARM_REALTIME_FREEZER = 3, ALARM_BOOTTIME_FREEZER = 4, }; enum alarmtimer_restart { ALARMTIMER_NORESTART = 0, ALARMTIMER_RESTART = 1, }; struct alarm { struct timerqueue_node node; struct hrtimer timer; enum alarmtimer_restart (*function)(struct alarm *, ktime_t); enum alarmtimer_type type; int state; void *data; }; struct cpu_timer { struct timerqueue_node node; struct timerqueue_head *head; struct pid *pid; struct list_head elist; int firing; }; struct k_clock; struct k_itimer { struct list_head list; struct hlist_node t_hash; spinlock_t it_lock; const struct k_clock *kclock; clockid_t it_clock; timer_t it_id; int it_active; s64 it_overrun; s64 it_overrun_last; int it_requeue_pending; int it_sigev_notify; ktime_t it_interval; struct signal_struct *it_signal; union { struct pid *it_pid; struct task_struct *it_process; }; struct sigqueue *sigq; union { struct { struct hrtimer timer; } real; struct cpu_timer cpu; struct { struct alarm alarmtimer; } alarm; } it; struct callback_head rcu; }; struct k_clock { int (*clock_getres)(const clockid_t, struct timespec64 *); int (*clock_set)(const clockid_t, const struct timespec64 *); int (*clock_get_timespec)(const clockid_t, struct timespec64 *); ktime_t (*clock_get_ktime)(const clockid_t); int (*clock_adj)(const clockid_t, struct __kernel_timex *); int (*timer_create)(struct k_itimer *); int (*nsleep)(const clockid_t, int, const struct timespec64 *); int (*timer_set)(struct k_itimer *, int, struct itimerspec64 *, struct itimerspec64 *); int (*timer_del)(struct k_itimer *); void (*timer_get)(struct k_itimer *, struct itimerspec64 *); void (*timer_rearm)(struct k_itimer *); s64 (*timer_forward)(struct k_itimer *, ktime_t); ktime_t (*timer_remaining)(struct k_itimer *, ktime_t); int (*timer_try_to_cancel)(struct k_itimer *); void (*timer_arm)(struct k_itimer *, ktime_t, bool, bool); void (*timer_wait_running)(struct k_itimer *); }; struct class_interface { struct list_head node; struct class *class; int (*add_dev)(struct device *, struct class_interface *); void (*remove_dev)(struct device *, struct class_interface *); }; struct platform_driver { int (*probe)(struct platform_device *); int (*remove)(struct platform_device *); void (*shutdown)(struct platform_device *); int (*suspend)(struct platform_device *, pm_message_t); int (*resume)(struct platform_device *); struct device_driver driver; const struct platform_device_id *id_table; bool prevent_deferred_probe; }; struct trace_event_raw_alarmtimer_suspend { struct trace_entry ent; s64 expires; unsigned char alarm_type; char __data[0]; }; struct trace_event_raw_alarm_class { struct trace_entry ent; void *alarm; unsigned char alarm_type; s64 expires; s64 now; char __data[0]; }; struct trace_event_data_offsets_alarmtimer_suspend {}; struct trace_event_data_offsets_alarm_class {}; typedef void (*btf_trace_alarmtimer_suspend)(void *, ktime_t, int); typedef void (*btf_trace_alarmtimer_fired)(void *, struct alarm *, ktime_t); typedef void (*btf_trace_alarmtimer_start)(void *, struct alarm *, ktime_t); typedef void (*btf_trace_alarmtimer_cancel)(void *, struct alarm *, ktime_t); struct alarm_base { spinlock_t lock; struct timerqueue_head timerqueue; ktime_t (*get_ktime)(); void (*get_timespec)(struct timespec64 *); clockid_t base_clockid; }; struct sigevent { sigval_t sigev_value; int sigev_signo; int sigev_notify; union { int _pad[12]; int _tid; struct { void (*_function)(sigval_t); void *_attribute; } _sigev_thread; } _sigev_un; }; typedef struct sigevent sigevent_t; struct posix_clock; struct posix_clock_operations { struct module *owner; int (*clock_adjtime)(struct posix_clock *, struct __kernel_timex *); int (*clock_gettime)(struct posix_clock *, struct timespec64 *); int (*clock_getres)(struct posix_clock *, struct timespec64 *); int (*clock_settime)(struct posix_clock *, const struct timespec64 *); long int (*ioctl)(struct posix_clock *, unsigned int, long unsigned int); int (*open)(struct posix_clock *, fmode_t); __poll_t (*poll)(struct posix_clock *, struct file *, poll_table *); int (*release)(struct posix_clock *); ssize_t (*read)(struct posix_clock *, uint, char *, size_t); }; struct posix_clock { struct posix_clock_operations ops; struct cdev cdev; struct device *dev; struct rw_semaphore rwsem; bool zombie; }; struct posix_clock_desc { struct file *fp; struct posix_clock *clk; }; struct __kernel_old_itimerval { struct __kernel_old_timeval it_interval; struct __kernel_old_timeval it_value; }; struct ce_unbind { struct clock_event_device *ce; int res; }; struct proc_timens_offset { int clockid; struct timespec64 val; }; union futex_key { struct { u64 i_seq; long unsigned int pgoff; unsigned int offset; } shared; struct { union { struct mm_struct *mm; u64 __tmp; }; long unsigned int address; unsigned int offset; } private; struct { u64 ptr; long unsigned int word; unsigned int offset; } both; }; struct futex_pi_state { struct list_head list; struct rt_mutex_base pi_mutex; struct task_struct *owner; refcount_t refcount; union futex_key key; }; struct futex_hash_bucket { atomic_t waiters; spinlock_t lock; struct plist_head chain; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct futex_q { struct plist_node list; struct task_struct *task; spinlock_t *lock_ptr; union futex_key key; struct futex_pi_state *pi_state; struct rt_mutex_waiter *rt_waiter; union futex_key *requeue_pi_key; u32 bitset; atomic_t requeue_state; }; enum futex_access { FUTEX_READ = 0, FUTEX_WRITE = 1, }; struct futex_waitv { __u64 val; __u64 uaddr; __u32 flags; __u32 __reserved; }; struct futex_vector { struct futex_waitv w; struct futex_q q; }; enum { Q_REQUEUE_PI_NONE = 0, Q_REQUEUE_PI_IGNORE = 1, Q_REQUEUE_PI_IN_PROGRESS = 2, Q_REQUEUE_PI_WAIT = 3, Q_REQUEUE_PI_DONE = 4, Q_REQUEUE_PI_LOCKED = 5, }; struct cfd_percpu { call_single_data_t csd; }; struct call_function_data { struct cfd_percpu *pcpu; cpumask_var_t cpumask; cpumask_var_t cpumask_ipi; }; struct smp_call_on_cpu_struct { struct work_struct work; struct completion done; int (*func)(void *); void *data; int ret; int cpu; }; struct latch_tree_root { seqcount_latch_t seq; struct rb_root tree[2]; }; struct latch_tree_ops { bool (*less)(struct latch_tree_node *, struct latch_tree_node *); int (*comp)(void *, struct latch_tree_node *); }; struct module_use { struct list_head source_list; struct list_head target_list; struct module *source; struct module *target; }; struct module_sect_attr { struct bin_attribute battr; long unsigned int address; }; struct module_sect_attrs { struct attribute_group grp; unsigned int nsections; struct module_sect_attr attrs[0]; }; struct module_notes_attrs { struct kobject *dir; unsigned int notes; struct bin_attribute attrs[0]; }; enum kernel_read_file_id { READING_UNKNOWN = 0, READING_FIRMWARE = 1, READING_MODULE = 2, READING_KEXEC_IMAGE = 3, READING_KEXEC_INITRAMFS = 4, READING_POLICY = 5, READING_X509_CERTIFICATE = 6, READING_MAX_ID = 7, }; enum kernel_load_data_id { LOADING_UNKNOWN = 0, LOADING_FIRMWARE = 1, LOADING_MODULE = 2, LOADING_KEXEC_IMAGE = 3, LOADING_KEXEC_INITRAMFS = 4, LOADING_POLICY = 5, LOADING_X509_CERTIFICATE = 6, LOADING_MAX_ID = 7, }; enum { PROC_ENTRY_PERMANENT = 1, }; struct _ddebug { const char *modname; const char *function; const char *filename; const char *format; unsigned int lineno: 18; unsigned int flags: 8; union { struct static_key_true dd_key_true; struct static_key_false dd_key_false; } key; }; struct load_info { const char *name; struct module *mod; Elf64_Ehdr *hdr; long unsigned int len; Elf64_Shdr *sechdrs; char *secstrings; char *strtab; long unsigned int symoffs; long unsigned int stroffs; long unsigned int init_typeoffs; long unsigned int core_typeoffs; struct _ddebug *debug; unsigned int num_debug; bool sig_ok; long unsigned int mod_kallsyms_init_off; struct { unsigned int sym; unsigned int str; unsigned int mod; unsigned int vers; unsigned int info; unsigned int pcpu; } index; }; struct trace_event_raw_module_load { struct trace_entry ent; unsigned int taints; u32 __data_loc_name; char __data[0]; }; struct trace_event_raw_module_free { struct trace_entry ent; u32 __data_loc_name; char __data[0]; }; struct trace_event_raw_module_refcnt { struct trace_entry ent; long unsigned int ip; int refcnt; u32 __data_loc_name; char __data[0]; }; struct trace_event_raw_module_request { struct trace_entry ent; long unsigned int ip; bool wait; u32 __data_loc_name; char __data[0]; }; struct trace_event_data_offsets_module_load { u32 name; }; struct trace_event_data_offsets_module_free { u32 name; }; struct trace_event_data_offsets_module_refcnt { u32 name; }; struct trace_event_data_offsets_module_request { u32 name; }; typedef void (*btf_trace_module_load)(void *, struct module *); typedef void (*btf_trace_module_free)(void *, struct module *); typedef void (*btf_trace_module_get)(void *, struct module *, long unsigned int); typedef void (*btf_trace_module_put)(void *, struct module *, long unsigned int); typedef void (*btf_trace_module_request)(void *, char *, bool, long unsigned int); struct mod_tree_root { struct latch_tree_root root; long unsigned int addr_min; long unsigned int addr_max; }; enum mod_license { NOT_GPL_ONLY = 0, GPL_ONLY = 1, }; struct symsearch { const struct kernel_symbol *start; const struct kernel_symbol *stop; const s32 *crcs; enum mod_license license; }; struct find_symbol_arg { const char *name; bool gplok; bool warn; struct module *owner; const s32 *crc; const struct kernel_symbol *sym; enum mod_license license; }; struct mod_initfree { struct llist_node node; void *module_init; }; struct module_signature { u8 algo; u8 hash; u8 id_type; u8 signer_len; u8 key_id_len; u8 __pad[3]; __be32 sig_len; }; enum key_being_used_for { VERIFYING_MODULE_SIGNATURE = 0, VERIFYING_FIRMWARE_SIGNATURE = 1, VERIFYING_KEXEC_PE_SIGNATURE = 2, VERIFYING_KEY_SIGNATURE = 3, VERIFYING_KEY_SELF_SIGNATURE = 4, VERIFYING_UNSPECIFIED_SIGNATURE = 5, NR__KEY_BEING_USED_FOR = 6, }; enum pkey_id_type { PKEY_ID_PGP = 0, PKEY_ID_X509 = 1, PKEY_ID_PKCS7 = 2, }; struct kallsym_iter { loff_t pos; loff_t pos_arch_end; loff_t pos_mod_end; loff_t pos_ftrace_mod_end; loff_t pos_bpf_end; long unsigned int value; unsigned int nameoff; char type; char name[128]; char module_name[56]; int exported; int show_value; }; typedef __kernel_ulong_t ino_t; enum kernfs_node_type { KERNFS_DIR = 1, KERNFS_FILE = 2, KERNFS_LINK = 4, }; enum kernfs_root_flag { KERNFS_ROOT_CREATE_DEACTIVATED = 1, KERNFS_ROOT_EXTRA_OPEN_PERM_CHECK = 2, KERNFS_ROOT_SUPPORT_EXPORTOP = 4, KERNFS_ROOT_SUPPORT_USER_XATTR = 8, }; struct kernfs_fs_context { struct kernfs_root *root; void *ns_tag; long unsigned int magic; bool new_sb_created; }; enum { CGRP_NOTIFY_ON_RELEASE = 0, CGRP_CPUSET_CLONE_CHILDREN = 1, CGRP_FREEZE = 2, CGRP_FROZEN = 3, CGRP_KILL = 4, }; enum { CGRP_ROOT_NOPREFIX = 2, CGRP_ROOT_XATTR = 4, CGRP_ROOT_NS_DELEGATE = 8, CGRP_ROOT_CPUSET_V2_MODE = 16, CGRP_ROOT_MEMORY_LOCAL_EVENTS = 32, CGRP_ROOT_MEMORY_RECURSIVE_PROT = 64, }; struct cgroup_taskset { struct list_head src_csets; struct list_head dst_csets; int nr_tasks; int ssid; struct list_head *csets; struct css_set *cur_cset; struct task_struct *cur_task; }; struct css_task_iter { struct cgroup_subsys *ss; unsigned int flags; struct list_head *cset_pos; struct list_head *cset_head; struct list_head *tcset_pos; struct list_head *tcset_head; struct list_head *task_pos; struct list_head *cur_tasks_head; struct css_set *cur_cset; struct css_set *cur_dcset; struct task_struct *cur_task; struct list_head iters_node; }; struct cgroup_fs_context { struct kernfs_fs_context kfc; struct cgroup_root *root; struct cgroup_namespace *ns; unsigned int flags; bool cpuset_clone_children; bool none; bool all_ss; u16 subsys_mask; char *name; char *release_agent; }; struct cgrp_cset_link { struct cgroup *cgrp; struct css_set *cset; struct list_head cset_link; struct list_head cgrp_link; }; struct cgroup_mgctx { struct list_head preloaded_src_csets; struct list_head preloaded_dst_csets; struct cgroup_taskset tset; u16 ss_mask; }; struct trace_event_raw_cgroup_root { struct trace_entry ent; int root; u16 ss_mask; u32 __data_loc_name; char __data[0]; }; struct trace_event_raw_cgroup { struct trace_entry ent; int root; int id; int level; u32 __data_loc_path; char __data[0]; }; struct trace_event_raw_cgroup_migrate { struct trace_entry ent; int dst_root; int dst_id; int dst_level; int pid; u32 __data_loc_dst_path; u32 __data_loc_comm; char __data[0]; }; struct trace_event_raw_cgroup_event { struct trace_entry ent; int root; int id; int level; u32 __data_loc_path; int val; char __data[0]; }; struct trace_event_data_offsets_cgroup_root { u32 name; }; struct trace_event_data_offsets_cgroup { u32 path; }; struct trace_event_data_offsets_cgroup_migrate { u32 dst_path; u32 comm; }; struct trace_event_data_offsets_cgroup_event { u32 path; }; typedef void (*btf_trace_cgroup_setup_root)(void *, struct cgroup_root *); typedef void (*btf_trace_cgroup_destroy_root)(void *, struct cgroup_root *); typedef void (*btf_trace_cgroup_remount)(void *, struct cgroup_root *); typedef void (*btf_trace_cgroup_mkdir)(void *, struct cgroup *, const char *); typedef void (*btf_trace_cgroup_rmdir)(void *, struct cgroup *, const char *); typedef void (*btf_trace_cgroup_release)(void *, struct cgroup *, const char *); typedef void (*btf_trace_cgroup_rename)(void *, struct cgroup *, const char *); typedef void (*btf_trace_cgroup_freeze)(void *, struct cgroup *, const char *); typedef void (*btf_trace_cgroup_unfreeze)(void *, struct cgroup *, const char *); typedef void (*btf_trace_cgroup_attach_task)(void *, struct cgroup *, const char *, struct task_struct *, bool); typedef void (*btf_trace_cgroup_transfer_tasks)(void *, struct cgroup *, const char *, struct task_struct *, bool); typedef void (*btf_trace_cgroup_notify_populated)(void *, struct cgroup *, const char *, int); typedef void (*btf_trace_cgroup_notify_frozen)(void *, struct cgroup *, const char *, int); enum cgroup_opt_features { OPT_FEATURE_COUNT = 0, }; enum cgroup2_param { Opt_nsdelegate = 0, Opt_memory_localevents = 1, Opt_memory_recursiveprot = 2, nr__cgroup2_params = 3, }; struct cgroupstats { __u64 nr_sleeping; __u64 nr_running; __u64 nr_stopped; __u64 nr_uninterruptible; __u64 nr_io_wait; }; enum cgroup_filetype { CGROUP_FILE_PROCS = 0, CGROUP_FILE_TASKS = 1, }; struct cgroup_pidlist { struct { enum cgroup_filetype type; struct pid_namespace *ns; } key; pid_t *list; int length; struct list_head links; struct cgroup *owner; struct delayed_work destroy_dwork; }; enum cgroup1_param { Opt_all = 0, Opt_clone_children = 1, Opt_cpuset_v2_mode = 2, Opt_name = 3, Opt_none = 4, Opt_noprefix = 5, Opt_release_agent = 6, Opt_xattr = 7, }; struct pids_cgroup { struct cgroup_subsys_state css; atomic64_t counter; atomic64_t limit; struct cgroup_file events_file; atomic64_t events_limit; }; struct kernel_pkey_query { __u32 supported_ops; __u32 key_size; __u16 max_data_size; __u16 max_sig_size; __u16 max_enc_size; __u16 max_dec_size; }; enum kernel_pkey_operation { kernel_pkey_encrypt = 0, kernel_pkey_decrypt = 1, kernel_pkey_sign = 2, kernel_pkey_verify = 3, }; struct kernel_pkey_params { struct key *key; const char *encoding; const char *hash_algo; char *info; __u32 in_len; union { __u32 out_len; __u32 in2_len; }; enum kernel_pkey_operation op: 8; }; struct key_preparsed_payload { const char *orig_description; char *description; union key_payload payload; const void *data; size_t datalen; size_t quotalen; time64_t expiry; }; struct key_match_data { bool (*cmp)(const struct key *, const struct key_match_data *); const void *raw_data; void *preparsed; unsigned int lookup_type; }; struct idmap_key { bool map_up; u32 id; u32 count; }; struct cpu_stop_done { atomic_t nr_todo; int ret; struct completion completion; }; struct cpu_stopper { struct task_struct *thread; raw_spinlock_t lock; bool enabled; struct list_head works; struct cpu_stop_work stop_work; long unsigned int caller; cpu_stop_fn_t fn; }; enum multi_stop_state { MULTI_STOP_NONE = 0, MULTI_STOP_PREPARE = 1, MULTI_STOP_DISABLE_IRQ = 2, MULTI_STOP_RUN = 3, MULTI_STOP_EXIT = 4, }; struct multi_stop_data { cpu_stop_fn_t fn; void *data; unsigned int num_threads; const struct cpumask *active_cpus; enum multi_stop_state state; atomic_t thread_ack; }; struct kprobe_blacklist_entry { struct list_head list; long unsigned int start_addr; long unsigned int end_addr; }; enum perf_record_ksymbol_type { PERF_RECORD_KSYMBOL_TYPE_UNKNOWN = 0, PERF_RECORD_KSYMBOL_TYPE_BPF = 1, PERF_RECORD_KSYMBOL_TYPE_OOL = 2, PERF_RECORD_KSYMBOL_TYPE_MAX = 3, }; struct kprobe_insn_page { struct list_head list; kprobe_opcode_t *insns; struct kprobe_insn_cache *cache; int nused; int ngarbage; char slot_used[0]; }; enum kprobe_slot_state { SLOT_CLEAN = 0, SLOT_DIRTY = 1, SLOT_USED = 2, }; struct seccomp_notif_sizes { __u16 seccomp_notif; __u16 seccomp_notif_resp; __u16 seccomp_data; }; struct seccomp_notif { __u64 id; __u32 pid; __u32 flags; struct seccomp_data data; }; struct seccomp_notif_resp { __u64 id; __s64 val; __s32 error; __u32 flags; }; struct seccomp_notif_addfd { __u64 id; __u32 flags; __u32 srcfd; __u32 newfd; __u32 newfd_flags; }; struct action_cache { long unsigned int allow_native[8]; }; struct notification; struct seccomp_filter { refcount_t refs; refcount_t users; bool log; struct action_cache cache; struct seccomp_filter *prev; struct bpf_prog *prog; struct notification *notif; struct mutex notify_lock; wait_queue_head_t wqh; }; struct ctl_path { const char *procname; }; struct sock_fprog { short unsigned int len; struct sock_filter *filter; }; typedef unsigned int (*bpf_dispatcher_fn)(const void *, const struct bpf_insn *, unsigned int (*)(const void *, const struct bpf_insn *)); typedef int (*bpf_aux_classic_check_t)(struct sock_filter *, unsigned int); enum notify_state { SECCOMP_NOTIFY_INIT = 0, SECCOMP_NOTIFY_SENT = 1, SECCOMP_NOTIFY_REPLIED = 2, }; struct seccomp_knotif { struct task_struct *task; u64 id; const struct seccomp_data *data; enum notify_state state; int error; long int val; u32 flags; struct completion ready; struct list_head list; struct list_head addfd; }; struct seccomp_kaddfd { struct file *file; int fd; unsigned int flags; __u32 ioctl_flags; union { bool setfd; int ret; }; struct completion completion; struct list_head list; }; struct notification { struct semaphore request; u64 next_id; struct list_head notifications; }; struct seccomp_log_name { u32 log; const char *name; }; struct tp_module { struct list_head list; struct module *mod; }; enum tp_func_state { TP_FUNC_0 = 0, TP_FUNC_1 = 1, TP_FUNC_2 = 2, TP_FUNC_N = 3, }; enum tp_transition_sync { TP_TRANSITION_SYNC_1_0_1 = 0, TP_TRANSITION_SYNC_N_2_1 = 1, _NR_TP_TRANSITION_SYNC = 2, }; struct tp_transition_snapshot { long unsigned int rcu; long unsigned int srcu; bool ongoing; }; struct tp_probes { struct callback_head rcu; struct tracepoint_func probes[0]; }; struct ftrace_hash { long unsigned int size_bits; struct hlist_head *buckets; long unsigned int count; long unsigned int flags; struct callback_head rcu; }; struct ftrace_func_entry { struct hlist_node hlist; long unsigned int ip; long unsigned int direct; }; enum ftrace_bug_type { FTRACE_BUG_UNKNOWN = 0, FTRACE_BUG_INIT = 1, FTRACE_BUG_NOP = 2, FTRACE_BUG_CALL = 3, FTRACE_BUG_UPDATE = 4, }; enum { FTRACE_UPDATE_CALLS = 1, FTRACE_DISABLE_CALLS = 2, FTRACE_UPDATE_TRACE_FUNC = 4, FTRACE_START_FUNC_RET = 8, FTRACE_STOP_FUNC_RET = 16, FTRACE_MAY_SLEEP = 32, }; enum { FTRACE_ITER_FILTER = 1, FTRACE_ITER_NOTRACE = 2, FTRACE_ITER_PRINTALL = 4, FTRACE_ITER_DO_PROBES = 8, FTRACE_ITER_PROBE = 16, FTRACE_ITER_MOD = 32, FTRACE_ITER_ENABLED = 64, }; struct prog_entry; struct event_filter { struct prog_entry *prog; char *filter_string; }; struct trace_array_cpu; struct array_buffer { struct trace_array *tr; struct trace_buffer *buffer; struct trace_array_cpu *data; u64 time_start; int cpu; }; struct trace_pid_list; struct trace_options; struct trace_func_repeats; struct trace_array { struct list_head list; char *name; struct array_buffer array_buffer; struct trace_pid_list *filtered_pids; struct trace_pid_list *filtered_no_pids; arch_spinlock_t max_lock; int buffer_disabled; int sys_refcount_enter; int sys_refcount_exit; struct trace_event_file *enter_syscall_files[450]; struct trace_event_file *exit_syscall_files[450]; int stop_count; int clock_id; int nr_topts; bool clear_trace; int buffer_percent; unsigned int n_err_log_entries; struct tracer *current_trace; unsigned int trace_flags; unsigned char trace_flags_index[32]; unsigned int flags; raw_spinlock_t start_lock; struct list_head err_log; struct dentry *dir; struct dentry *options; struct dentry *percpu_dir; struct dentry *event_dir; struct trace_options *topts; struct list_head systems; struct list_head events; struct trace_event_file *trace_marker_file; cpumask_var_t tracing_cpumask; int ref; int trace_ref; struct ftrace_ops *ops; struct trace_pid_list *function_pids; struct trace_pid_list *function_no_pids; struct list_head func_probes; struct list_head mod_trace; struct list_head mod_notrace; int function_enabled; int no_filter_buffering_ref; struct list_head hist_vars; struct trace_func_repeats *last_func_repeats; }; struct tracer_flags; struct tracer { const char *name; int (*init)(struct trace_array *); void (*reset)(struct trace_array *); void (*start)(struct trace_array *); void (*stop)(struct trace_array *); int (*update_thresh)(struct trace_array *); void (*open)(struct trace_iterator *); void (*pipe_open)(struct trace_iterator *); void (*close)(struct trace_iterator *); void (*pipe_close)(struct trace_iterator *); ssize_t (*read)(struct trace_iterator *, struct file *, char *, size_t, loff_t *); ssize_t (*splice_read)(struct trace_iterator *, struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int); void (*print_header)(struct seq_file *); enum print_line_t (*print_line)(struct trace_iterator *); int (*set_flag)(struct trace_array *, u32, u32, int); int (*flag_changed)(struct trace_array *, u32, int); struct tracer *next; struct tracer_flags *flags; int enabled; bool print_max; bool allow_instances; bool noboot; }; struct event_subsystem; struct trace_subsystem_dir { struct list_head list; struct event_subsystem *subsystem; struct trace_array *tr; struct dentry *entry; int ref_count; int nr_events; }; union lower_chunk { union lower_chunk *next; long unsigned int data[256]; }; union upper_chunk { union upper_chunk *next; union lower_chunk *data[256]; }; struct trace_pid_list { raw_spinlock_t lock; struct irq_work refill_irqwork; union upper_chunk *upper[256]; union upper_chunk *upper_list; union lower_chunk *lower_list; int free_upper_chunks; int free_lower_chunks; }; struct trace_array_cpu { atomic_t disabled; void *buffer_page; long unsigned int entries; long unsigned int saved_latency; long unsigned int critical_start; long unsigned int critical_end; long unsigned int critical_sequence; long unsigned int nice; long unsigned int policy; long unsigned int rt_priority; long unsigned int skipped_entries; u64 preempt_timestamp; pid_t pid; kuid_t uid; char comm[16]; int ftrace_ignore_pid; bool ignore_pid; }; struct trace_option_dentry; struct trace_options { struct tracer *tracer; struct trace_option_dentry *topts; }; struct tracer_opt; struct trace_option_dentry { struct tracer_opt *opt; struct tracer_flags *flags; struct trace_array *tr; struct dentry *entry; }; enum { TRACE_PIDS = 1, TRACE_NO_PIDS = 2, }; struct trace_func_repeats { long unsigned int ip; long unsigned int parent_ip; long unsigned int count; u64 ts_last_call; }; enum { TRACE_ARRAY_FL_GLOBAL = 1, }; struct tracer_opt { const char *name; u32 bit; }; struct tracer_flags { u32 val; struct tracer_opt *opts; struct tracer *trace; }; struct ftrace_mod_load { struct list_head list; char *func; char *module; int enable; }; enum { FTRACE_HASH_FL_MOD = 1, }; struct ftrace_func_command { struct list_head list; char *name; int (*func)(struct trace_array *, struct ftrace_hash *, char *, char *, char *, int); }; struct ftrace_probe_ops { void (*func)(long unsigned int, long unsigned int, struct trace_array *, struct ftrace_probe_ops *, void *); int (*init)(struct ftrace_probe_ops *, struct trace_array *, long unsigned int, void *, void **); void (*free)(struct ftrace_probe_ops *, struct trace_array *, long unsigned int, void *); int (*print)(struct seq_file *, long unsigned int, struct ftrace_probe_ops *, void *); }; typedef int (*ftrace_mapper_func)(void *); struct trace_parser { bool cont; char *buffer; unsigned int idx; unsigned int size; }; enum trace_iterator_bits { TRACE_ITER_PRINT_PARENT_BIT = 0, TRACE_ITER_SYM_OFFSET_BIT = 1, TRACE_ITER_SYM_ADDR_BIT = 2, TRACE_ITER_VERBOSE_BIT = 3, TRACE_ITER_RAW_BIT = 4, TRACE_ITER_HEX_BIT = 5, TRACE_ITER_BIN_BIT = 6, TRACE_ITER_BLOCK_BIT = 7, TRACE_ITER_PRINTK_BIT = 8, TRACE_ITER_ANNOTATE_BIT = 9, TRACE_ITER_USERSTACKTRACE_BIT = 10, TRACE_ITER_SYM_USEROBJ_BIT = 11, TRACE_ITER_PRINTK_MSGONLY_BIT = 12, TRACE_ITER_CONTEXT_INFO_BIT = 13, TRACE_ITER_LATENCY_FMT_BIT = 14, TRACE_ITER_RECORD_CMD_BIT = 15, TRACE_ITER_RECORD_TGID_BIT = 16, TRACE_ITER_OVERWRITE_BIT = 17, TRACE_ITER_STOP_ON_FREE_BIT = 18, TRACE_ITER_IRQ_INFO_BIT = 19, TRACE_ITER_MARKERS_BIT = 20, TRACE_ITER_EVENT_FORK_BIT = 21, TRACE_ITER_PAUSE_ON_TRACE_BIT = 22, TRACE_ITER_HASH_PTR_BIT = 23, TRACE_ITER_FUNCTION_BIT = 24, TRACE_ITER_FUNC_FORK_BIT = 25, TRACE_ITER_DISPLAY_GRAPH_BIT = 26, TRACE_ITER_STACKTRACE_BIT = 27, TRACE_ITER_LAST_BIT = 28, }; struct event_subsystem { struct list_head list; const char *name; struct event_filter *filter; int ref_count; }; enum regex_type { MATCH_FULL = 0, MATCH_FRONT_ONLY = 1, MATCH_MIDDLE_ONLY = 2, MATCH_END_ONLY = 3, MATCH_GLOB = 4, MATCH_INDEX = 5, }; enum { FTRACE_MODIFY_ENABLE_FL = 1, FTRACE_MODIFY_MAY_SLEEP_FL = 2, }; struct ftrace_func_probe { struct ftrace_probe_ops *probe_ops; struct ftrace_ops ops; struct trace_array *tr; struct list_head list; void *data; int ref; }; struct ftrace_page { struct ftrace_page *next; struct dyn_ftrace *records; int index; int order; }; struct ftrace_rec_iter___2 { struct ftrace_page *pg; int index; }; struct ftrace_iterator { loff_t pos; loff_t func_pos; loff_t mod_pos; struct ftrace_page *pg; struct dyn_ftrace *func; struct ftrace_func_probe *probe; struct ftrace_func_entry *probe_entry; struct trace_parser parser; struct ftrace_hash *hash; struct ftrace_ops *ops; struct trace_array *tr; struct list_head *mod_list; int pidx; int idx; unsigned int flags; }; struct ftrace_glob { char *search; unsigned int len; int type; }; struct ftrace_func_map { struct ftrace_func_entry entry; void *data; }; struct ftrace_func_mapper { struct ftrace_hash hash; }; struct ftrace_direct_func { struct list_head next; long unsigned int addr; int count; }; enum graph_filter_type { GRAPH_FILTER_NOTRACE = 0, GRAPH_FILTER_FUNCTION = 1, }; struct ftrace_graph_data { struct ftrace_hash *hash; struct ftrace_func_entry *entry; int idx; enum graph_filter_type type; struct ftrace_hash *new_hash; const struct seq_operations *seq_ops; struct trace_parser parser; }; struct ftrace_mod_func { struct list_head list; char *name; long unsigned int ip; unsigned int size; }; struct ftrace_mod_map { struct callback_head rcu; struct list_head list; struct module *mod; long unsigned int start_addr; long unsigned int end_addr; struct list_head funcs; unsigned int num_funcs; }; struct ftrace_init_func { struct list_head list; long unsigned int ip; }; enum ring_buffer_type { RINGBUF_TYPE_DATA_TYPE_LEN_MAX = 28, RINGBUF_TYPE_PADDING = 29, RINGBUF_TYPE_TIME_EXTEND = 30, RINGBUF_TYPE_TIME_STAMP = 31, }; enum ring_buffer_flags { RB_FL_OVERWRITE = 1, }; struct ring_buffer_per_cpu; struct buffer_page; struct ring_buffer_iter { struct ring_buffer_per_cpu *cpu_buffer; long unsigned int head; long unsigned int next_event; struct buffer_page *head_page; struct buffer_page *cache_reader_page; long unsigned int cache_read; u64 read_stamp; u64 page_stamp; struct ring_buffer_event *event; int missed_events; }; struct rb_irq_work { struct irq_work work; wait_queue_head_t waiters; wait_queue_head_t full_waiters; bool waiters_pending; bool full_waiters_pending; bool wakeup_full; }; struct trace_buffer___2 { unsigned int flags; int cpus; atomic_t record_disabled; cpumask_var_t cpumask; struct lock_class_key *reader_lock_key; struct mutex mutex; struct ring_buffer_per_cpu **buffers; struct hlist_node node; u64 (*clock)(); struct rb_irq_work irq_work; bool time_stamp_abs; }; enum { RB_LEN_TIME_EXTEND = 8, RB_LEN_TIME_STAMP = 8, }; struct buffer_data_page { u64 time_stamp; local_t commit; unsigned char data[0]; }; struct buffer_page { struct list_head list; local_t write; unsigned int read; local_t entries; long unsigned int real_end; struct buffer_data_page *page; }; struct rb_event_info { u64 ts; u64 delta; u64 before; u64 after; long unsigned int length; struct buffer_page *tail_page; int add_timestamp; }; enum { RB_ADD_STAMP_NONE = 0, RB_ADD_STAMP_EXTEND = 2, RB_ADD_STAMP_ABSOLUTE = 4, RB_ADD_STAMP_FORCE = 8, }; enum { RB_CTX_TRANSITION = 0, RB_CTX_NMI = 1, RB_CTX_IRQ = 2, RB_CTX_SOFTIRQ = 3, RB_CTX_NORMAL = 4, RB_CTX_MAX = 5, }; struct rb_time_struct { local64_t time; }; typedef struct rb_time_struct rb_time_t; struct ring_buffer_per_cpu { int cpu; atomic_t record_disabled; atomic_t resize_disabled; struct trace_buffer___2 *buffer; raw_spinlock_t reader_lock; arch_spinlock_t lock; struct lock_class_key lock_key; struct buffer_data_page *free_page; long unsigned int nr_pages; unsigned int current_context; struct list_head *pages; struct buffer_page *head_page; struct buffer_page *tail_page; struct buffer_page *commit_page; struct buffer_page *reader_page; long unsigned int lost_events; long unsigned int last_overrun; long unsigned int nest; local_t entries_bytes; local_t entries; local_t overrun; local_t commit_overrun; local_t dropped_events; local_t committing; local_t commits; local_t pages_touched; local_t pages_read; long int last_pages_touch; size_t shortest_full; long unsigned int read; long unsigned int read_bytes; rb_time_t write_stamp; rb_time_t before_stamp; u64 event_stamp[5]; u64 read_stamp; long int nr_pages_to_update; struct list_head new_pages; struct work_struct update_pages_work; struct completion update_done; struct rb_irq_work irq_work; }; typedef struct { int val[2]; } __kernel_fsid_t; typedef struct fsnotify_mark_connector *fsnotify_connp_t; struct fsnotify_mark_connector { spinlock_t lock; short unsigned int type; short unsigned int flags; __kernel_fsid_t fsid; union { fsnotify_connp_t *obj; struct fsnotify_mark_connector *destroy_next; }; struct hlist_head list; }; typedef struct vfsmount * (*debugfs_automount_t)(struct dentry *, void *); struct partial_page { unsigned int offset; unsigned int len; long unsigned int private; }; struct splice_pipe_desc { struct page **pages; struct partial_page *partial; int nr_pages; unsigned int nr_pages_max; const struct pipe_buf_operations *ops; void (*spd_release)(struct splice_pipe_desc *, unsigned int); }; struct trace_export { struct trace_export *next; void (*write)(struct trace_export *, const void *, unsigned int); int flags; }; enum fsnotify_obj_type { FSNOTIFY_OBJ_TYPE_INODE = 0, FSNOTIFY_OBJ_TYPE_PARENT = 1, FSNOTIFY_OBJ_TYPE_VFSMOUNT = 2, FSNOTIFY_OBJ_TYPE_SB = 3, FSNOTIFY_OBJ_TYPE_COUNT = 4, FSNOTIFY_OBJ_TYPE_DETACHED = 4, }; enum trace_iter_flags { TRACE_FILE_LAT_FMT = 1, TRACE_FILE_ANNOTATE = 2, TRACE_FILE_TIME_IN_NS = 4, }; enum trace_flag_type { TRACE_FLAG_IRQS_OFF = 1, TRACE_FLAG_IRQS_NOSUPPORT = 2, TRACE_FLAG_NEED_RESCHED = 4, TRACE_FLAG_HARDIRQ = 8, TRACE_FLAG_SOFTIRQ = 16, TRACE_FLAG_PREEMPT_RESCHED = 32, TRACE_FLAG_NMI = 64, }; enum trace_type { __TRACE_FIRST_TYPE = 0, TRACE_FN = 1, TRACE_CTX = 2, TRACE_WAKE = 3, TRACE_STACK = 4, TRACE_PRINT = 5, TRACE_BPRINT = 6, TRACE_MMIO_RW = 7, TRACE_MMIO_MAP = 8, TRACE_BRANCH = 9, TRACE_GRAPH_RET = 10, TRACE_GRAPH_ENT = 11, TRACE_USER_STACK = 12, TRACE_BLK = 13, TRACE_BPUTS = 14, TRACE_HWLAT = 15, TRACE_OSNOISE = 16, TRACE_TIMERLAT = 17, TRACE_RAW_DATA = 18, TRACE_FUNC_REPEATS = 19, __TRACE_LAST_TYPE = 20, }; struct ftrace_entry { struct trace_entry ent; long unsigned int ip; long unsigned int parent_ip; }; struct stack_entry { struct trace_entry ent; int size; long unsigned int caller[8]; }; struct userstack_entry { struct trace_entry ent; unsigned int tgid; long unsigned int caller[8]; }; struct bprint_entry { struct trace_entry ent; long unsigned int ip; const char *fmt; u32 buf[0]; }; struct print_entry { struct trace_entry ent; long unsigned int ip; char buf[0]; }; struct raw_data_entry { struct trace_entry ent; unsigned int id; char buf[0]; }; struct bputs_entry { struct trace_entry ent; long unsigned int ip; const char *str; }; struct func_repeats_entry { struct trace_entry ent; long unsigned int ip; long unsigned int parent_ip; u16 count; u16 top_delta_ts; u32 bottom_delta_ts; }; typedef bool (*cond_update_fn_t)(struct trace_array *, void *); enum trace_iterator_flags { TRACE_ITER_PRINT_PARENT = 1, TRACE_ITER_SYM_OFFSET = 2, TRACE_ITER_SYM_ADDR = 4, TRACE_ITER_VERBOSE = 8, TRACE_ITER_RAW = 16, TRACE_ITER_HEX = 32, TRACE_ITER_BIN = 64, TRACE_ITER_BLOCK = 128, TRACE_ITER_PRINTK = 256, TRACE_ITER_ANNOTATE = 512, TRACE_ITER_USERSTACKTRACE = 1024, TRACE_ITER_SYM_USEROBJ = 2048, TRACE_ITER_PRINTK_MSGONLY = 4096, TRACE_ITER_CONTEXT_INFO = 8192, TRACE_ITER_LATENCY_FMT = 16384, TRACE_ITER_RECORD_CMD = 32768, TRACE_ITER_RECORD_TGID = 65536, TRACE_ITER_OVERWRITE = 131072, TRACE_ITER_STOP_ON_FREE = 262144, TRACE_ITER_IRQ_INFO = 524288, TRACE_ITER_MARKERS = 1048576, TRACE_ITER_EVENT_FORK = 2097152, TRACE_ITER_PAUSE_ON_TRACE = 4194304, TRACE_ITER_HASH_PTR = 8388608, TRACE_ITER_FUNCTION = 16777216, TRACE_ITER_FUNC_FORK = 33554432, TRACE_ITER_DISPLAY_GRAPH = 67108864, TRACE_ITER_STACKTRACE = 134217728, }; struct trace_min_max_param { struct mutex *lock; u64 *val; u64 *min; u64 *max; }; struct saved_cmdlines_buffer { unsigned int map_pid_to_cmdline[32769]; unsigned int *map_cmdline_to_pid; unsigned int cmdline_num; int cmdline_idx; char *saved_cmdlines; }; struct ftrace_stack { long unsigned int calls[1024]; }; struct ftrace_stacks { struct ftrace_stack stacks[4]; }; struct trace_buffer_struct { int nesting; char buffer[4096]; }; struct ftrace_buffer_info { struct trace_iterator iter; void *spare; unsigned int spare_cpu; unsigned int read; }; struct err_info { const char **errs; u8 type; u8 pos; u64 ts; }; struct tracing_log_err { struct list_head list; struct err_info info; char loc[128]; char cmd[256]; }; struct buffer_ref { struct trace_buffer *buffer; void *page; int cpu; refcount_t refcount; }; struct ctx_switch_entry { struct trace_entry ent; unsigned int prev_pid; unsigned int next_pid; unsigned int next_cpu; unsigned char prev_prio; unsigned char prev_state; unsigned char next_prio; unsigned char next_state; }; struct hwlat_entry { struct trace_entry ent; u64 duration; u64 outer_duration; u64 nmi_total_ts; struct timespec64 timestamp; unsigned int nmi_count; unsigned int seqnum; unsigned int count; }; struct osnoise_entry { struct trace_entry ent; u64 noise; u64 runtime; u64 max_sample; unsigned int hw_count; unsigned int nmi_count; unsigned int irq_count; unsigned int softirq_count; unsigned int thread_count; }; struct timerlat_entry { struct trace_entry ent; unsigned int seqnum; int context; u64 timer_latency; }; struct trace_mark { long long unsigned int val; char sym; }; struct tracer_stat { const char *name; void * (*stat_start)(struct tracer_stat *); void * (*stat_next)(void *, int); cmp_func_t stat_cmp; int (*stat_show)(struct seq_file *, void *); void (*stat_release)(void *); int (*stat_headers)(struct seq_file *); }; struct stat_node { struct rb_node node; void *stat; }; struct stat_session { struct list_head session_list; struct tracer_stat *ts; struct rb_root stat_root; struct mutex stat_mutex; struct dentry *file; }; struct trace_bprintk_fmt { struct list_head list; const char *fmt; }; enum { TRACE_FUNC_NO_OPTS = 0, TRACE_FUNC_OPT_STACK = 1, TRACE_FUNC_OPT_NO_REPEATS = 2, TRACE_FUNC_OPT_HIGHEST_BIT = 4, }; struct ftrace_func_mapper___2; enum { TRACE_NOP_OPT_ACCEPT = 1, TRACE_NOP_OPT_REFUSE = 2, }; struct ftrace_graph_ent { long unsigned int func; int depth; } __attribute__((packed)); struct ftrace_graph_ret { long unsigned int func; int depth; unsigned int overrun; long long unsigned int calltime; long long unsigned int rettime; }; typedef void (*trace_func_graph_ret_t)(struct ftrace_graph_ret *); typedef int (*trace_func_graph_ent_t)(struct ftrace_graph_ent *); struct fgraph_ops { trace_func_graph_ent_t entryfunc; trace_func_graph_ret_t retfunc; }; struct ftrace_graph_ent_entry { struct trace_entry ent; struct ftrace_graph_ent graph_ent; } __attribute__((packed)); struct ftrace_graph_ret_entry { struct trace_entry ent; struct ftrace_graph_ret ret; }; struct fgraph_cpu_data { pid_t last_pid; int depth; int depth_irq; int ignore; long unsigned int enter_funcs[50]; }; struct fgraph_data { struct fgraph_cpu_data *cpu_data; struct ftrace_graph_ent_entry ent; struct ftrace_graph_ret_entry ret; int failed; int cpu; int: 32; } __attribute__((packed)); enum { FLAGS_FILL_FULL = 268435456, FLAGS_FILL_START = 536870912, FLAGS_FILL_END = 805306368, }; enum req_opf { REQ_OP_READ = 0, REQ_OP_WRITE = 1, REQ_OP_FLUSH = 2, REQ_OP_DISCARD = 3, REQ_OP_SECURE_ERASE = 5, REQ_OP_WRITE_SAME = 7, REQ_OP_WRITE_ZEROES = 9, REQ_OP_ZONE_OPEN = 10, REQ_OP_ZONE_CLOSE = 11, REQ_OP_ZONE_FINISH = 12, REQ_OP_ZONE_APPEND = 13, REQ_OP_ZONE_RESET = 15, REQ_OP_ZONE_RESET_ALL = 17, REQ_OP_DRV_IN = 34, REQ_OP_DRV_OUT = 35, REQ_OP_LAST = 36, }; enum req_flag_bits { __REQ_FAILFAST_DEV = 8, __REQ_FAILFAST_TRANSPORT = 9, __REQ_FAILFAST_DRIVER = 10, __REQ_SYNC = 11, __REQ_META = 12, __REQ_PRIO = 13, __REQ_NOMERGE = 14, __REQ_IDLE = 15, __REQ_INTEGRITY = 16, __REQ_FUA = 17, __REQ_PREFLUSH = 18, __REQ_RAHEAD = 19, __REQ_BACKGROUND = 20, __REQ_NOWAIT = 21, __REQ_CGROUP_PUNT = 22, __REQ_NOUNMAP = 23, __REQ_POLLED = 24, __REQ_DRV = 25, __REQ_SWAP = 26, __REQ_NR_BITS = 27, }; struct ftrace_event_field { struct list_head link; const char *name; const char *type; int filter_type; int offset; int size; int is_signed; }; enum { FORMAT_HEADER = 1, FORMAT_FIELD_SEPERATOR = 2, FORMAT_PRINTFMT = 3, }; struct event_probe_data { struct trace_event_file *file; long unsigned int count; int ref; bool enable; }; struct syscall_trace_enter { struct trace_entry ent; int nr; long unsigned int args[0]; }; struct syscall_trace_exit { struct trace_entry ent; int nr; long int ret; }; struct syscall_tp_t { long long unsigned int regs; long unsigned int syscall_nr; long unsigned int ret; }; struct syscall_tp_t___2 { long long unsigned int regs; long unsigned int syscall_nr; long unsigned int args[6]; }; typedef long unsigned int perf_trace_t[1024]; struct filter_pred; struct prog_entry { int target; int when_to_branch; struct filter_pred *pred; }; typedef int (*filter_pred_fn_t)(struct filter_pred *, void *); struct regex; typedef int (*regex_match_func)(char *, struct regex *, int); struct regex { char pattern[256]; int len; int field_len; regex_match_func match; }; struct filter_pred { filter_pred_fn_t fn; u64 val; struct regex regex; short unsigned int *ops; struct ftrace_event_field *field; int offset; int not; int op; }; enum filter_op_ids { OP_GLOB = 0, OP_NE = 1, OP_EQ = 2, OP_LE = 3, OP_LT = 4, OP_GE = 5, OP_GT = 6, OP_BAND = 7, OP_MAX = 8, }; enum { FILT_ERR_NONE = 0, FILT_ERR_INVALID_OP = 1, FILT_ERR_TOO_MANY_OPEN = 2, FILT_ERR_TOO_MANY_CLOSE = 3, FILT_ERR_MISSING_QUOTE = 4, FILT_ERR_OPERAND_TOO_LONG = 5, FILT_ERR_EXPECT_STRING = 6, FILT_ERR_EXPECT_DIGIT = 7, FILT_ERR_ILLEGAL_FIELD_OP = 8, FILT_ERR_FIELD_NOT_FOUND = 9, FILT_ERR_ILLEGAL_INTVAL = 10, FILT_ERR_BAD_SUBSYS_FILTER = 11, FILT_ERR_TOO_MANY_PREDS = 12, FILT_ERR_INVALID_FILTER = 13, FILT_ERR_IP_FIELD_ONLY = 14, FILT_ERR_INVALID_VALUE = 15, FILT_ERR_ERRNO = 16, FILT_ERR_NO_FILTER = 17, }; struct filter_parse_error { int lasterr; int lasterr_pos; }; typedef int (*parse_pred_fn)(const char *, void *, int, struct filter_parse_error *, struct filter_pred **); enum { INVERT = 1, PROCESS_AND = 2, PROCESS_OR = 4, }; enum { TOO_MANY_CLOSE = 4294967295, TOO_MANY_OPEN = 4294967294, MISSING_QUOTE = 4294967293, }; struct filter_list { struct list_head list; struct event_filter *filter; }; struct function_filter_data { struct ftrace_ops *ops; int first_filter; int first_notrace; }; enum { EVENT_TRIGGER_FL_PROBE = 1, }; struct event_trigger_ops; struct event_command; struct event_trigger_data { long unsigned int count; int ref; int flags; struct event_trigger_ops *ops; struct event_command *cmd_ops; struct event_filter *filter; char *filter_str; void *private_data; bool paused; bool paused_tmp; struct list_head list; char *name; struct list_head named_list; struct event_trigger_data *named_data; }; struct event_trigger_ops { void (*func)(struct event_trigger_data *, struct trace_buffer *, void *, struct ring_buffer_event *); int (*init)(struct event_trigger_ops *, struct event_trigger_data *); void (*free)(struct event_trigger_ops *, struct event_trigger_data *); int (*print)(struct seq_file *, struct event_trigger_ops *, struct event_trigger_data *); }; struct event_command { struct list_head list; char *name; enum event_trigger_type trigger_type; int flags; int (*func)(struct event_command *, struct trace_event_file *, char *, char *, char *); int (*reg)(char *, struct event_trigger_ops *, struct event_trigger_data *, struct trace_event_file *); void (*unreg)(char *, struct event_trigger_ops *, struct event_trigger_data *, struct trace_event_file *); void (*unreg_all)(struct trace_event_file *); int (*set_filter)(char *, struct event_trigger_data *, struct trace_event_file *); struct event_trigger_ops * (*get_trigger_ops)(char *, char *); }; struct enable_trigger_data { struct trace_event_file *file; bool enable; bool hist; }; enum event_command_flags { EVENT_CMD_FL_POST_TRIGGER = 1, EVENT_CMD_FL_NEEDS_REC = 2, }; struct eprobe_trace_entry_head { struct trace_entry ent; unsigned int type; }; struct dyn_event; struct dyn_event_operations { struct list_head list; int (*create)(const char *); int (*show)(struct seq_file *, struct dyn_event *); bool (*is_busy)(struct dyn_event *); int (*free)(struct dyn_event *); bool (*match)(const char *, const char *, int, const char **, struct dyn_event *); }; struct dyn_event { struct list_head list; struct dyn_event_operations *ops; }; typedef int (*print_type_func_t)(struct trace_seq *, void *, void *); enum fetch_op { FETCH_OP_NOP = 0, FETCH_OP_REG = 1, FETCH_OP_STACK = 2, FETCH_OP_STACKP = 3, FETCH_OP_RETVAL = 4, FETCH_OP_IMM = 5, FETCH_OP_COMM = 6, FETCH_OP_ARG = 7, FETCH_OP_FOFFS = 8, FETCH_OP_DATA = 9, FETCH_OP_DEREF = 10, FETCH_OP_UDEREF = 11, FETCH_OP_ST_RAW = 12, FETCH_OP_ST_MEM = 13, FETCH_OP_ST_UMEM = 14, FETCH_OP_ST_STRING = 15, FETCH_OP_ST_USTRING = 16, FETCH_OP_MOD_BF = 17, FETCH_OP_LP_ARRAY = 18, FETCH_OP_TP_ARG = 19, FETCH_OP_END = 20, FETCH_NOP_SYMBOL = 21, }; struct fetch_insn { enum fetch_op op; union { unsigned int param; struct { unsigned int size; int offset; }; struct { unsigned char basesize; unsigned char lshift; unsigned char rshift; }; long unsigned int immediate; void *data; }; }; struct fetch_type { const char *name; size_t size; int is_signed; print_type_func_t print; const char *fmt; const char *fmttype; }; struct probe_arg { struct fetch_insn *code; bool dynamic; unsigned int offset; unsigned int count; const char *name; const char *comm; char *fmt; const struct fetch_type *type; }; struct trace_uprobe_filter { rwlock_t rwlock; int nr_systemwide; struct list_head perf_events; }; struct trace_probe_event { unsigned int flags; struct trace_event_class class; struct trace_event_call call; struct list_head files; struct list_head probes; struct trace_uprobe_filter filter[0]; }; struct trace_probe { struct list_head list; struct trace_probe_event *event; ssize_t size; unsigned int nr_args; struct probe_arg args[0]; }; struct event_file_link { struct trace_event_file *file; struct list_head list; }; enum probe_print_type { PROBE_PRINT_NORMAL = 0, PROBE_PRINT_RETURN = 1, PROBE_PRINT_EVENT = 2, }; enum { TP_ERR_FILE_NOT_FOUND = 0, TP_ERR_NO_REGULAR_FILE = 1, TP_ERR_BAD_REFCNT = 2, TP_ERR_REFCNT_OPEN_BRACE = 3, TP_ERR_BAD_REFCNT_SUFFIX = 4, TP_ERR_BAD_UPROBE_OFFS = 5, TP_ERR_MAXACT_NO_KPROBE = 6, TP_ERR_BAD_MAXACT = 7, TP_ERR_MAXACT_TOO_BIG = 8, TP_ERR_BAD_PROBE_ADDR = 9, TP_ERR_BAD_RETPROBE = 10, TP_ERR_BAD_ADDR_SUFFIX = 11, TP_ERR_NO_GROUP_NAME = 12, TP_ERR_GROUP_TOO_LONG = 13, TP_ERR_BAD_GROUP_NAME = 14, TP_ERR_NO_EVENT_NAME = 15, TP_ERR_EVENT_TOO_LONG = 16, TP_ERR_BAD_EVENT_NAME = 17, TP_ERR_EVENT_EXIST = 18, TP_ERR_RETVAL_ON_PROBE = 19, TP_ERR_BAD_STACK_NUM = 20, TP_ERR_BAD_ARG_NUM = 21, TP_ERR_BAD_VAR = 22, TP_ERR_BAD_REG_NAME = 23, TP_ERR_BAD_MEM_ADDR = 24, TP_ERR_BAD_IMM = 25, TP_ERR_IMMSTR_NO_CLOSE = 26, TP_ERR_FILE_ON_KPROBE = 27, TP_ERR_BAD_FILE_OFFS = 28, TP_ERR_SYM_ON_UPROBE = 29, TP_ERR_TOO_MANY_OPS = 30, TP_ERR_DEREF_NEED_BRACE = 31, TP_ERR_BAD_DEREF_OFFS = 32, TP_ERR_DEREF_OPEN_BRACE = 33, TP_ERR_COMM_CANT_DEREF = 34, TP_ERR_BAD_FETCH_ARG = 35, TP_ERR_ARRAY_NO_CLOSE = 36, TP_ERR_BAD_ARRAY_SUFFIX = 37, TP_ERR_BAD_ARRAY_NUM = 38, TP_ERR_ARRAY_TOO_BIG = 39, TP_ERR_BAD_TYPE = 40, TP_ERR_BAD_STRING = 41, TP_ERR_BAD_BITFIELD = 42, TP_ERR_ARG_NAME_TOO_LONG = 43, TP_ERR_NO_ARG_NAME = 44, TP_ERR_BAD_ARG_NAME = 45, TP_ERR_USED_ARG_NAME = 46, TP_ERR_ARG_TOO_LONG = 47, TP_ERR_NO_ARG_BODY = 48, TP_ERR_BAD_INSN_BNDRY = 49, TP_ERR_FAIL_REG_PROBE = 50, TP_ERR_DIFF_PROBE_TYPE = 51, TP_ERR_DIFF_ARG_TYPE = 52, TP_ERR_SAME_PROBE = 53, }; struct trace_eprobe { const char *event_system; const char *event_name; struct trace_event_call *event; struct dyn_event devent; struct trace_probe tp; }; struct eprobe_data { struct trace_event_file *file; struct trace_eprobe *ep; }; enum bpf_func_id { BPF_FUNC_unspec = 0, BPF_FUNC_map_lookup_elem = 1, BPF_FUNC_map_update_elem = 2, BPF_FUNC_map_delete_elem = 3, BPF_FUNC_probe_read = 4, BPF_FUNC_ktime_get_ns = 5, BPF_FUNC_trace_printk = 6, BPF_FUNC_get_prandom_u32 = 7, BPF_FUNC_get_smp_processor_id = 8, BPF_FUNC_skb_store_bytes = 9, BPF_FUNC_l3_csum_replace = 10, BPF_FUNC_l4_csum_replace = 11, BPF_FUNC_tail_call = 12, BPF_FUNC_clone_redirect = 13, BPF_FUNC_get_current_pid_tgid = 14, BPF_FUNC_get_current_uid_gid = 15, BPF_FUNC_get_current_comm = 16, BPF_FUNC_get_cgroup_classid = 17, BPF_FUNC_skb_vlan_push = 18, BPF_FUNC_skb_vlan_pop = 19, BPF_FUNC_skb_get_tunnel_key = 20, BPF_FUNC_skb_set_tunnel_key = 21, BPF_FUNC_perf_event_read = 22, BPF_FUNC_redirect = 23, BPF_FUNC_get_route_realm = 24, BPF_FUNC_perf_event_output = 25, BPF_FUNC_skb_load_bytes = 26, BPF_FUNC_get_stackid = 27, BPF_FUNC_csum_diff = 28, BPF_FUNC_skb_get_tunnel_opt = 29, BPF_FUNC_skb_set_tunnel_opt = 30, BPF_FUNC_skb_change_proto = 31, BPF_FUNC_skb_change_type = 32, BPF_FUNC_skb_under_cgroup = 33, BPF_FUNC_get_hash_recalc = 34, BPF_FUNC_get_current_task = 35, BPF_FUNC_probe_write_user = 36, BPF_FUNC_current_task_under_cgroup = 37, BPF_FUNC_skb_change_tail = 38, BPF_FUNC_skb_pull_data = 39, BPF_FUNC_csum_update = 40, BPF_FUNC_set_hash_invalid = 41, BPF_FUNC_get_numa_node_id = 42, BPF_FUNC_skb_change_head = 43, BPF_FUNC_xdp_adjust_head = 44, BPF_FUNC_probe_read_str = 45, BPF_FUNC_get_socket_cookie = 46, BPF_FUNC_get_socket_uid = 47, BPF_FUNC_set_hash = 48, BPF_FUNC_setsockopt = 49, BPF_FUNC_skb_adjust_room = 50, BPF_FUNC_redirect_map = 51, BPF_FUNC_sk_redirect_map = 52, BPF_FUNC_sock_map_update = 53, BPF_FUNC_xdp_adjust_meta = 54, BPF_FUNC_perf_event_read_value = 55, BPF_FUNC_perf_prog_read_value = 56, BPF_FUNC_getsockopt = 57, BPF_FUNC_override_return = 58, BPF_FUNC_sock_ops_cb_flags_set = 59, BPF_FUNC_msg_redirect_map = 60, BPF_FUNC_msg_apply_bytes = 61, BPF_FUNC_msg_cork_bytes = 62, BPF_FUNC_msg_pull_data = 63, BPF_FUNC_bind = 64, BPF_FUNC_xdp_adjust_tail = 65, BPF_FUNC_skb_get_xfrm_state = 66, BPF_FUNC_get_stack = 67, BPF_FUNC_skb_load_bytes_relative = 68, BPF_FUNC_fib_lookup = 69, BPF_FUNC_sock_hash_update = 70, BPF_FUNC_msg_redirect_hash = 71, BPF_FUNC_sk_redirect_hash = 72, BPF_FUNC_lwt_push_encap = 73, BPF_FUNC_lwt_seg6_store_bytes = 74, BPF_FUNC_lwt_seg6_adjust_srh = 75, BPF_FUNC_lwt_seg6_action = 76, BPF_FUNC_rc_repeat = 77, BPF_FUNC_rc_keydown = 78, BPF_FUNC_skb_cgroup_id = 79, BPF_FUNC_get_current_cgroup_id = 80, BPF_FUNC_get_local_storage = 81, BPF_FUNC_sk_select_reuseport = 82, BPF_FUNC_skb_ancestor_cgroup_id = 83, BPF_FUNC_sk_lookup_tcp = 84, BPF_FUNC_sk_lookup_udp = 85, BPF_FUNC_sk_release = 86, BPF_FUNC_map_push_elem = 87, BPF_FUNC_map_pop_elem = 88, BPF_FUNC_map_peek_elem = 89, BPF_FUNC_msg_push_data = 90, BPF_FUNC_msg_pop_data = 91, BPF_FUNC_rc_pointer_rel = 92, BPF_FUNC_spin_lock = 93, BPF_FUNC_spin_unlock = 94, BPF_FUNC_sk_fullsock = 95, BPF_FUNC_tcp_sock = 96, BPF_FUNC_skb_ecn_set_ce = 97, BPF_FUNC_get_listener_sock = 98, BPF_FUNC_skc_lookup_tcp = 99, BPF_FUNC_tcp_check_syncookie = 100, BPF_FUNC_sysctl_get_name = 101, BPF_FUNC_sysctl_get_current_value = 102, BPF_FUNC_sysctl_get_new_value = 103, BPF_FUNC_sysctl_set_new_value = 104, BPF_FUNC_strtol = 105, BPF_FUNC_strtoul = 106, BPF_FUNC_sk_storage_get = 107, BPF_FUNC_sk_storage_delete = 108, BPF_FUNC_send_signal = 109, BPF_FUNC_tcp_gen_syncookie = 110, BPF_FUNC_skb_output = 111, BPF_FUNC_probe_read_user = 112, BPF_FUNC_probe_read_kernel = 113, BPF_FUNC_probe_read_user_str = 114, BPF_FUNC_probe_read_kernel_str = 115, BPF_FUNC_tcp_send_ack = 116, BPF_FUNC_send_signal_thread = 117, BPF_FUNC_jiffies64 = 118, BPF_FUNC_read_branch_records = 119, BPF_FUNC_get_ns_current_pid_tgid = 120, BPF_FUNC_xdp_output = 121, BPF_FUNC_get_netns_cookie = 122, BPF_FUNC_get_current_ancestor_cgroup_id = 123, BPF_FUNC_sk_assign = 124, BPF_FUNC_ktime_get_boot_ns = 125, BPF_FUNC_seq_printf = 126, BPF_FUNC_seq_write = 127, BPF_FUNC_sk_cgroup_id = 128, BPF_FUNC_sk_ancestor_cgroup_id = 129, BPF_FUNC_ringbuf_output = 130, BPF_FUNC_ringbuf_reserve = 131, BPF_FUNC_ringbuf_submit = 132, BPF_FUNC_ringbuf_discard = 133, BPF_FUNC_ringbuf_query = 134, BPF_FUNC_csum_level = 135, BPF_FUNC_skc_to_tcp6_sock = 136, BPF_FUNC_skc_to_tcp_sock = 137, BPF_FUNC_skc_to_tcp_timewait_sock = 138, BPF_FUNC_skc_to_tcp_request_sock = 139, BPF_FUNC_skc_to_udp6_sock = 140, BPF_FUNC_get_task_stack = 141, BPF_FUNC_load_hdr_opt = 142, BPF_FUNC_store_hdr_opt = 143, BPF_FUNC_reserve_hdr_opt = 144, BPF_FUNC_inode_storage_get = 145, BPF_FUNC_inode_storage_delete = 146, BPF_FUNC_d_path = 147, BPF_FUNC_copy_from_user = 148, BPF_FUNC_snprintf_btf = 149, BPF_FUNC_seq_printf_btf = 150, BPF_FUNC_skb_cgroup_classid = 151, BPF_FUNC_redirect_neigh = 152, BPF_FUNC_per_cpu_ptr = 153, BPF_FUNC_this_cpu_ptr = 154, BPF_FUNC_redirect_peer = 155, BPF_FUNC_task_storage_get = 156, BPF_FUNC_task_storage_delete = 157, BPF_FUNC_get_current_task_btf = 158, BPF_FUNC_bprm_opts_set = 159, BPF_FUNC_ktime_get_coarse_ns = 160, BPF_FUNC_ima_inode_hash = 161, BPF_FUNC_sock_from_file = 162, BPF_FUNC_check_mtu = 163, BPF_FUNC_for_each_map_elem = 164, BPF_FUNC_snprintf = 165, BPF_FUNC_sys_bpf = 166, BPF_FUNC_btf_find_by_name_kind = 167, BPF_FUNC_sys_close = 168, BPF_FUNC_timer_init = 169, BPF_FUNC_timer_set_callback = 170, BPF_FUNC_timer_start = 171, BPF_FUNC_timer_cancel = 172, BPF_FUNC_get_func_ip = 173, BPF_FUNC_get_attach_cookie = 174, BPF_FUNC_task_pt_regs = 175, BPF_FUNC_get_branch_snapshot = 176, BPF_FUNC_trace_vprintk = 177, BPF_FUNC_skc_to_unix_sock = 178, BPF_FUNC_kallsyms_lookup_name = 179, BPF_FUNC_find_vma = 180, BPF_FUNC_loop = 181, BPF_FUNC_strncmp = 182, BPF_FUNC_get_func_arg = 183, BPF_FUNC_get_func_ret = 184, BPF_FUNC_get_func_arg_cnt = 185, __BPF_FUNC_MAX_ID = 186, }; enum { BPF_F_INDEX_MASK = 4294967295, BPF_F_CURRENT_CPU = 4294967295, BPF_F_CTXLEN_MASK = 0, }; enum { BPF_F_GET_BRANCH_RECORDS_SIZE = 1, }; struct bpf_perf_event_value { __u64 counter; __u64 enabled; __u64 running; }; struct bpf_raw_tracepoint_args { __u64 args[0]; }; enum bpf_task_fd_type { BPF_FD_TYPE_RAW_TRACEPOINT = 0, BPF_FD_TYPE_TRACEPOINT = 1, BPF_FD_TYPE_KPROBE = 2, BPF_FD_TYPE_KRETPROBE = 3, BPF_FD_TYPE_UPROBE = 4, BPF_FD_TYPE_URETPROBE = 5, }; struct btf_ptr { void *ptr; __u32 type_id; __u32 flags; }; enum { BTF_F_COMPACT = 1, BTF_F_NONAME = 2, BTF_F_PTR_RAW = 4, BTF_F_ZERO = 8, }; struct bpf_local_storage_data; struct bpf_local_storage { struct bpf_local_storage_data *cache[16]; struct hlist_head list; void *owner; struct callback_head rcu; raw_spinlock_t lock; }; struct bpf_local_storage_map_bucket; struct bpf_local_storage_map { struct bpf_map map; struct bpf_local_storage_map_bucket *buckets; u32 bucket_log; u16 elem_size; u16 cache_idx; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; enum bpf_arg_type { ARG_DONTCARE = 0, ARG_CONST_MAP_PTR = 1, ARG_PTR_TO_MAP_KEY = 2, ARG_PTR_TO_MAP_VALUE = 3, ARG_PTR_TO_UNINIT_MAP_VALUE = 4, ARG_PTR_TO_MAP_VALUE_OR_NULL = 5, ARG_PTR_TO_MEM = 6, ARG_PTR_TO_MEM_OR_NULL = 7, ARG_PTR_TO_UNINIT_MEM = 8, ARG_CONST_SIZE = 9, ARG_CONST_SIZE_OR_ZERO = 10, ARG_PTR_TO_CTX = 11, ARG_PTR_TO_CTX_OR_NULL = 12, ARG_ANYTHING = 13, ARG_PTR_TO_SPIN_LOCK = 14, ARG_PTR_TO_SOCK_COMMON = 15, ARG_PTR_TO_INT = 16, ARG_PTR_TO_LONG = 17, ARG_PTR_TO_SOCKET = 18, ARG_PTR_TO_SOCKET_OR_NULL = 19, ARG_PTR_TO_BTF_ID = 20, ARG_PTR_TO_ALLOC_MEM = 21, ARG_PTR_TO_ALLOC_MEM_OR_NULL = 22, ARG_CONST_ALLOC_SIZE_OR_ZERO = 23, ARG_PTR_TO_BTF_ID_SOCK_COMMON = 24, ARG_PTR_TO_PERCPU_BTF_ID = 25, ARG_PTR_TO_FUNC = 26, ARG_PTR_TO_STACK_OR_NULL = 27, ARG_PTR_TO_CONST_STR = 28, ARG_PTR_TO_TIMER = 29, __BPF_ARG_TYPE_MAX = 30, }; enum bpf_return_type { RET_INTEGER = 0, RET_VOID = 1, RET_PTR_TO_MAP_VALUE = 2, RET_PTR_TO_MAP_VALUE_OR_NULL = 3, RET_PTR_TO_SOCKET_OR_NULL = 4, RET_PTR_TO_TCP_SOCK_OR_NULL = 5, RET_PTR_TO_SOCK_COMMON_OR_NULL = 6, RET_PTR_TO_ALLOC_MEM_OR_NULL = 7, RET_PTR_TO_BTF_ID_OR_NULL = 8, RET_PTR_TO_MEM_OR_BTF_ID_OR_NULL = 9, RET_PTR_TO_MEM_OR_BTF_ID = 10, RET_PTR_TO_BTF_ID = 11, }; struct bpf_func_proto { u64 (*func)(u64, u64, u64, u64, u64); bool gpl_only; bool pkt_access; enum bpf_return_type ret_type; union { struct { enum bpf_arg_type arg1_type; enum bpf_arg_type arg2_type; enum bpf_arg_type arg3_type; enum bpf_arg_type arg4_type; enum bpf_arg_type arg5_type; }; enum bpf_arg_type arg_type[5]; }; union { struct { u32 *arg1_btf_id; u32 *arg2_btf_id; u32 *arg3_btf_id; u32 *arg4_btf_id; u32 *arg5_btf_id; }; u32 *arg_btf_id[5]; }; int *ret_btf_id; bool (*allowed)(const struct bpf_prog *); }; enum bpf_access_type { BPF_READ = 1, BPF_WRITE = 2, }; struct bpf_verifier_log; struct bpf_insn_access_aux { enum bpf_reg_type reg_type; union { int ctx_field_size; struct { struct btf *btf; u32 btf_id; }; }; struct bpf_verifier_log *log; }; struct bpf_verifier_ops { const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *); bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *); int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *); int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *); u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *); int (*btf_struct_access)(struct bpf_verifier_log *, const struct btf *, const struct btf_type *, int, int, enum bpf_access_type, u32 *); bool (*check_kfunc_call)(u32, struct module *); }; struct bpf_event_entry { struct perf_event *event; struct file *perf_file; struct file *map_file; struct callback_head rcu; }; typedef long unsigned int (*bpf_ctx_copy_t)(void *, const void *, long unsigned int, long unsigned int); struct bpf_trace_run_ctx { struct bpf_run_ctx run_ctx; u64 bpf_cookie; }; typedef u32 (*bpf_prog_run_fn)(const struct bpf_prog *, const void *); typedef struct pt_regs bpf_user_pt_regs_t; struct bpf_perf_event_data { bpf_user_pt_regs_t regs; __u64 sample_period; __u64 addr; }; struct btf_id_set { u32 cnt; u32 ids[0]; }; struct perf_event_query_bpf { __u32 ids_len; __u32 prog_cnt; __u32 ids[0]; }; struct bpf_perf_event_data_kern { bpf_user_pt_regs_t *regs; struct perf_sample_data *data; struct perf_event *event; }; enum { BTF_TRACING_TYPE_TASK = 0, BTF_TRACING_TYPE_FILE = 1, BTF_TRACING_TYPE_VMA = 2, MAX_BTF_TRACING_TYPE = 3, }; struct bpf_local_storage_map_bucket { struct hlist_head list; raw_spinlock_t lock; }; struct bpf_local_storage_data { struct bpf_local_storage_map *smap; u8 data[0]; }; struct trace_event_raw_bpf_trace_printk { struct trace_entry ent; u32 __data_loc_bpf_string; char __data[0]; }; struct trace_event_data_offsets_bpf_trace_printk { u32 bpf_string; }; typedef void (*btf_trace_bpf_trace_printk)(void *, const char *); struct bpf_trace_module { struct module *module; struct list_head list; }; typedef u64 (*btf_bpf_probe_read_user)(void *, u32, const void *); typedef u64 (*btf_bpf_probe_read_user_str)(void *, u32, const void *); typedef u64 (*btf_bpf_probe_read_kernel)(void *, u32, const void *); typedef u64 (*btf_bpf_probe_read_kernel_str)(void *, u32, const void *); typedef u64 (*btf_bpf_probe_read_compat)(void *, u32, const void *); typedef u64 (*btf_bpf_probe_read_compat_str)(void *, u32, const void *); typedef u64 (*btf_bpf_probe_write_user)(void *, const void *, u32); typedef u64 (*btf_bpf_trace_printk)(char *, u32, u64, u64, u64); typedef u64 (*btf_bpf_trace_vprintk)(char *, u32, const void *, u32); typedef u64 (*btf_bpf_seq_printf)(struct seq_file *, char *, u32, const void *, u32); typedef u64 (*btf_bpf_seq_write)(struct seq_file *, const void *, u32); typedef u64 (*btf_bpf_seq_printf_btf)(struct seq_file *, struct btf_ptr *, u32, u64); typedef u64 (*btf_bpf_perf_event_read)(struct bpf_map *, u64); typedef u64 (*btf_bpf_perf_event_read_value)(struct bpf_map *, u64, struct bpf_perf_event_value *, u32); struct bpf_trace_sample_data { struct perf_sample_data sds[3]; }; typedef u64 (*btf_bpf_perf_event_output)(struct pt_regs *, struct bpf_map *, u64, void *, u64); struct bpf_nested_pt_regs { struct pt_regs regs[3]; }; typedef u64 (*btf_bpf_get_current_task)(); typedef u64 (*btf_bpf_get_current_task_btf)(); typedef u64 (*btf_bpf_task_pt_regs)(struct task_struct *); typedef u64 (*btf_bpf_current_task_under_cgroup)(struct bpf_map *, u32); struct send_signal_irq_work { struct irq_work irq_work; struct task_struct *task; u32 sig; enum pid_type type; }; typedef u64 (*btf_bpf_send_signal)(u32); typedef u64 (*btf_bpf_send_signal_thread)(u32); typedef u64 (*btf_bpf_d_path)(struct path *, char *, u32); typedef u64 (*btf_bpf_snprintf_btf)(char *, u32, struct btf_ptr *, u32, u64); typedef u64 (*btf_bpf_get_func_ip_tracing)(void *); typedef u64 (*btf_bpf_get_func_ip_kprobe)(struct pt_regs *); typedef u64 (*btf_bpf_get_attach_cookie_trace)(void *); typedef u64 (*btf_bpf_get_attach_cookie_pe)(struct bpf_perf_event_data_kern *); typedef u64 (*btf_bpf_get_branch_snapshot)(void *, u32, u64); typedef u64 (*btf_get_func_arg)(void *, u32, u64 *); typedef u64 (*btf_get_func_ret)(void *, u64 *); typedef u64 (*btf_get_func_arg_cnt)(void *); typedef u64 (*btf_bpf_perf_event_output_tp)(void *, struct bpf_map *, u64, void *, u64); typedef u64 (*btf_bpf_get_stackid_tp)(void *, struct bpf_map *, u64); typedef u64 (*btf_bpf_get_stack_tp)(void *, void *, u32, u64); typedef u64 (*btf_bpf_perf_prog_read_value)(struct bpf_perf_event_data_kern *, struct bpf_perf_event_value *, u32); typedef u64 (*btf_bpf_read_branch_records)(struct bpf_perf_event_data_kern *, void *, u32, u64); struct bpf_raw_tp_regs { struct pt_regs regs[3]; }; typedef u64 (*btf_bpf_perf_event_output_raw_tp)(struct bpf_raw_tracepoint_args *, struct bpf_map *, u64, void *, u64); typedef u64 (*btf_bpf_get_stackid_raw_tp)(struct bpf_raw_tracepoint_args *, struct bpf_map *, u64); typedef u64 (*btf_bpf_get_stack_raw_tp)(struct bpf_raw_tracepoint_args *, void *, u32, u64); enum dynevent_type { DYNEVENT_TYPE_SYNTH = 1, DYNEVENT_TYPE_KPROBE = 2, DYNEVENT_TYPE_NONE = 3, }; struct dynevent_cmd; typedef int (*dynevent_create_fn_t)(struct dynevent_cmd *); struct dynevent_cmd { struct seq_buf seq; const char *event_name; unsigned int n_fields; enum dynevent_type type; dynevent_create_fn_t run_command; void *private_data; }; struct kprobe_trace_entry_head { struct trace_entry ent; long unsigned int ip; }; struct kretprobe_trace_entry_head { struct trace_entry ent; long unsigned int func; long unsigned int ret_ip; }; typedef int (*dynevent_check_arg_fn_t)(void *); struct dynevent_arg { const char *str; char separator; }; struct trace_kprobe { struct dyn_event devent; struct kretprobe rp; long unsigned int *nhit; const char *symbol; struct trace_probe tp; }; enum error_detector { ERROR_DETECTOR_KFENCE = 0, ERROR_DETECTOR_KASAN = 1, }; struct trace_event_raw_error_report_template { struct trace_entry ent; enum error_detector error_detector; long unsigned int id; char __data[0]; }; struct trace_event_data_offsets_error_report_template {}; typedef void (*btf_trace_error_report_end)(void *, enum error_detector, long unsigned int); enum cpufreq_table_sorting { CPUFREQ_TABLE_UNSORTED = 0, CPUFREQ_TABLE_SORTED_ASCENDING = 1, CPUFREQ_TABLE_SORTED_DESCENDING = 2, }; struct cpufreq_cpuinfo { unsigned int max_freq; unsigned int min_freq; unsigned int transition_latency; }; struct cpufreq_stats; struct clk; struct cpufreq_governor; struct cpufreq_frequency_table; struct thermal_cooling_device; struct cpufreq_policy { cpumask_var_t cpus; cpumask_var_t related_cpus; cpumask_var_t real_cpus; unsigned int shared_type; unsigned int cpu; struct clk *clk; struct cpufreq_cpuinfo cpuinfo; unsigned int min; unsigned int max; unsigned int cur; unsigned int suspend_freq; unsigned int policy; unsigned int last_policy; struct cpufreq_governor *governor; void *governor_data; char last_governor[16]; struct work_struct update; struct freq_constraints constraints; struct freq_qos_request *min_freq_req; struct freq_qos_request *max_freq_req; struct cpufreq_frequency_table *freq_table; enum cpufreq_table_sorting freq_table_sorted; struct list_head policy_list; struct kobject kobj; struct completion kobj_unregister; struct rw_semaphore rwsem; bool fast_switch_possible; bool fast_switch_enabled; bool strict_target; bool efficiencies_available; unsigned int transition_delay_us; bool dvfs_possible_from_any_cpu; unsigned int cached_target_freq; unsigned int cached_resolved_idx; bool transition_ongoing; spinlock_t transition_lock; wait_queue_head_t transition_wait; struct task_struct *transition_task; struct cpufreq_stats *stats; void *driver_data; struct thermal_cooling_device *cdev; struct notifier_block nb_min; struct notifier_block nb_max; }; struct cpufreq_governor { char name[16]; int (*init)(struct cpufreq_policy *); void (*exit)(struct cpufreq_policy *); int (*start)(struct cpufreq_policy *); void (*stop)(struct cpufreq_policy *); void (*limits)(struct cpufreq_policy *); ssize_t (*show_setspeed)(struct cpufreq_policy *, char *); int (*store_setspeed)(struct cpufreq_policy *, unsigned int); struct list_head governor_list; struct module *owner; u8 flags; }; struct cpufreq_frequency_table { unsigned int flags; unsigned int driver_data; unsigned int frequency; }; struct trace_event_raw_cpu { struct trace_entry ent; u32 state; u32 cpu_id; char __data[0]; }; struct trace_event_raw_powernv_throttle { struct trace_entry ent; int chip_id; u32 __data_loc_reason; int pmax; char __data[0]; }; struct trace_event_raw_pstate_sample { struct trace_entry ent; u32 core_busy; u32 scaled_busy; u32 from; u32 to; u64 mperf; u64 aperf; u64 tsc; u32 freq; u32 io_boost; char __data[0]; }; struct trace_event_raw_cpu_frequency_limits { struct trace_entry ent; u32 min_freq; u32 max_freq; u32 cpu_id; char __data[0]; }; struct trace_event_raw_device_pm_callback_start { struct trace_entry ent; u32 __data_loc_device; u32 __data_loc_driver; u32 __data_loc_parent; u32 __data_loc_pm_ops; int event; char __data[0]; }; struct trace_event_raw_device_pm_callback_end { struct trace_entry ent; u32 __data_loc_device; u32 __data_loc_driver; int error; char __data[0]; }; struct trace_event_raw_suspend_resume { struct trace_entry ent; const char *action; int val; bool start; char __data[0]; }; struct trace_event_raw_wakeup_source { struct trace_entry ent; u32 __data_loc_name; u64 state; char __data[0]; }; struct trace_event_raw_clock { struct trace_entry ent; u32 __data_loc_name; u64 state; u64 cpu_id; char __data[0]; }; struct trace_event_raw_power_domain { struct trace_entry ent; u32 __data_loc_name; u64 state; u64 cpu_id; char __data[0]; }; struct trace_event_raw_cpu_latency_qos_request { struct trace_entry ent; s32 value; char __data[0]; }; struct trace_event_raw_pm_qos_update { struct trace_entry ent; enum pm_qos_req_action action; int prev_value; int curr_value; char __data[0]; }; struct trace_event_raw_dev_pm_qos_request { struct trace_entry ent; u32 __data_loc_name; enum dev_pm_qos_req_type type; s32 new_value; char __data[0]; }; struct trace_event_data_offsets_cpu {}; struct trace_event_data_offsets_powernv_throttle { u32 reason; }; struct trace_event_data_offsets_pstate_sample {}; struct trace_event_data_offsets_cpu_frequency_limits {}; struct trace_event_data_offsets_device_pm_callback_start { u32 device; u32 driver; u32 parent; u32 pm_ops; }; struct trace_event_data_offsets_device_pm_callback_end { u32 device; u32 driver; }; struct trace_event_data_offsets_suspend_resume {}; struct trace_event_data_offsets_wakeup_source { u32 name; }; struct trace_event_data_offsets_clock { u32 name; }; struct trace_event_data_offsets_power_domain { u32 name; }; struct trace_event_data_offsets_cpu_latency_qos_request {}; struct trace_event_data_offsets_pm_qos_update {}; struct trace_event_data_offsets_dev_pm_qos_request { u32 name; }; typedef void (*btf_trace_cpu_idle)(void *, unsigned int, unsigned int); typedef void (*btf_trace_powernv_throttle)(void *, int, const char *, int); typedef void (*btf_trace_pstate_sample)(void *, u32, u32, u32, u32, u64, u64, u64, u32, u32); typedef void (*btf_trace_cpu_frequency)(void *, unsigned int, unsigned int); typedef void (*btf_trace_cpu_frequency_limits)(void *, struct cpufreq_policy *); typedef void (*btf_trace_device_pm_callback_start)(void *, struct device *, const char *, int); typedef void (*btf_trace_device_pm_callback_end)(void *, struct device *, int); typedef void (*btf_trace_suspend_resume)(void *, const char *, int, bool); typedef void (*btf_trace_wakeup_source_activate)(void *, const char *, unsigned int); typedef void (*btf_trace_wakeup_source_deactivate)(void *, const char *, unsigned int); typedef void (*btf_trace_clock_enable)(void *, const char *, unsigned int, unsigned int); typedef void (*btf_trace_clock_disable)(void *, const char *, unsigned int, unsigned int); typedef void (*btf_trace_clock_set_rate)(void *, const char *, unsigned int, unsigned int); typedef void (*btf_trace_power_domain_target)(void *, const char *, unsigned int, unsigned int); typedef void (*btf_trace_pm_qos_add_request)(void *, s32); typedef void (*btf_trace_pm_qos_update_request)(void *, s32); typedef void (*btf_trace_pm_qos_remove_request)(void *, s32); typedef void (*btf_trace_pm_qos_update_target)(void *, enum pm_qos_req_action, int, int); typedef void (*btf_trace_pm_qos_update_flags)(void *, enum pm_qos_req_action, int, int); typedef void (*btf_trace_dev_pm_qos_add_request)(void *, const char *, enum dev_pm_qos_req_type, s32); typedef void (*btf_trace_dev_pm_qos_update_request)(void *, const char *, enum dev_pm_qos_req_type, s32); typedef void (*btf_trace_dev_pm_qos_remove_request)(void *, const char *, enum dev_pm_qos_req_type, s32); struct dynevent_arg_pair { const char *lhs; const char *rhs; char operator; char separator; }; struct trace_probe_log { const char *subsystem; const char **argv; int argc; int index; }; enum uprobe_filter_ctx { UPROBE_FILTER_REGISTER = 0, UPROBE_FILTER_UNREGISTER = 1, UPROBE_FILTER_MMAP = 2, }; struct uprobe_consumer { int (*handler)(struct uprobe_consumer *, struct pt_regs *); int (*ret_handler)(struct uprobe_consumer *, long unsigned int, struct pt_regs *); bool (*filter)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *); struct uprobe_consumer *next; }; struct uprobe_trace_entry_head { struct trace_entry ent; long unsigned int vaddr[0]; }; struct trace_uprobe { struct dyn_event devent; struct uprobe_consumer consumer; struct path path; struct inode *inode; char *filename; long unsigned int offset; long unsigned int ref_ctr_offset; long unsigned int nhit; struct trace_probe tp; }; struct uprobe_dispatch_data { struct trace_uprobe *tu; long unsigned int bp_addr; }; struct uprobe_cpu_buffer { struct mutex mutex; void *buf; }; typedef bool (*filter_func_t)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *); enum xdp_action { XDP_ABORTED = 0, XDP_DROP = 1, XDP_PASS = 2, XDP_TX = 3, XDP_REDIRECT = 4, }; struct rhash_lock_head; struct bucket_table { unsigned int size; unsigned int nest; u32 hash_rnd; struct list_head walkers; struct callback_head rcu; struct bucket_table *future_tbl; struct lockdep_map dep_map; long: 64; struct rhash_lock_head *buckets[0]; }; typedef sockptr_t bpfptr_t; struct bpf_verifier_log { u32 level; char kbuf[1024]; char *ubuf; u32 len_used; u32 len_total; }; struct bpf_subprog_info { u32 start; u32 linfo_idx; u16 stack_depth; bool has_tail_call; bool tail_call_reachable; bool has_ld_abs; bool is_async_cb; }; struct bpf_id_pair { u32 old; u32 cur; }; struct bpf_verifier_stack_elem; struct bpf_verifier_state; struct bpf_verifier_state_list; struct bpf_insn_aux_data; struct bpf_verifier_env { u32 insn_idx; u32 prev_insn_idx; struct bpf_prog *prog; const struct bpf_verifier_ops *ops; struct bpf_verifier_stack_elem *head; int stack_size; bool strict_alignment; bool test_state_freq; struct bpf_verifier_state *cur_state; struct bpf_verifier_state_list **explored_states; struct bpf_verifier_state_list *free_list; struct bpf_map *used_maps[64]; struct btf_mod_pair used_btfs[64]; u32 used_map_cnt; u32 used_btf_cnt; u32 id_gen; bool explore_alu_limits; bool allow_ptr_leaks; bool allow_uninit_stack; bool allow_ptr_to_map_access; bool bpf_capable; bool bypass_spec_v1; bool bypass_spec_v4; bool seen_direct_write; struct bpf_insn_aux_data *insn_aux_data; const struct bpf_line_info *prev_linfo; struct bpf_verifier_log log; struct bpf_subprog_info subprog_info[257]; struct bpf_id_pair idmap_scratch[75]; struct { int *insn_state; int *insn_stack; int cur_stack; } cfg; u32 pass_cnt; u32 subprog_cnt; u32 prev_insn_processed; u32 insn_processed; u32 prev_jmps_processed; u32 jmps_processed; u64 verification_time; u32 max_states_per_insn; u32 total_states; u32 peak_states; u32 longest_mark_read_walk; bpfptr_t fd_array; }; struct tnum { u64 value; u64 mask; }; enum bpf_reg_liveness { REG_LIVE_NONE = 0, REG_LIVE_READ32 = 1, REG_LIVE_READ64 = 2, REG_LIVE_READ = 3, REG_LIVE_WRITTEN = 4, REG_LIVE_DONE = 8, }; struct bpf_reg_state { enum bpf_reg_type type; s32 off; union { int range; struct { struct bpf_map *map_ptr; u32 map_uid; }; struct { struct btf *btf; u32 btf_id; }; u32 mem_size; struct { long unsigned int raw1; long unsigned int raw2; } raw; u32 subprogno; }; u32 id; u32 ref_obj_id; struct tnum var_off; s64 smin_value; s64 smax_value; u64 umin_value; u64 umax_value; s32 s32_min_value; s32 s32_max_value; u32 u32_min_value; u32 u32_max_value; struct bpf_reg_state *parent; u32 frameno; s32 subreg_def; enum bpf_reg_liveness live; bool precise; }; struct bpf_reference_state; struct bpf_stack_state; struct bpf_func_state { struct bpf_reg_state regs[11]; int callsite; u32 frameno; u32 subprogno; u32 async_entry_cnt; bool in_callback_fn; bool in_async_callback_fn; int acquired_refs; struct bpf_reference_state *refs; int allocated_stack; struct bpf_stack_state *stack; }; struct rnd_state { __u32 s1; __u32 s2; __u32 s3; __u32 s4; }; enum xdp_mem_type { MEM_TYPE_PAGE_SHARED = 0, MEM_TYPE_PAGE_ORDER0 = 1, MEM_TYPE_PAGE_POOL = 2, MEM_TYPE_XSK_BUFF_POOL = 3, MEM_TYPE_MAX = 4, }; struct xdp_cpumap_stats { unsigned int redirect; unsigned int pass; unsigned int drop; }; struct bpf_stack_state { struct bpf_reg_state spilled_ptr; u8 slot_type[8]; }; struct bpf_reference_state { int id; int insn_idx; }; struct bpf_idx_pair { u32 prev_idx; u32 idx; }; struct bpf_verifier_state { struct bpf_func_state *frame[8]; struct bpf_verifier_state *parent; u32 branches; u32 insn_idx; u32 curframe; u32 active_spin_lock; bool speculative; u32 first_insn_idx; u32 last_insn_idx; struct bpf_idx_pair *jmp_history; u32 jmp_history_cnt; }; struct bpf_verifier_state_list { struct bpf_verifier_state state; struct bpf_verifier_state_list *next; int miss_cnt; int hit_cnt; }; struct bpf_insn_aux_data { union { enum bpf_reg_type ptr_type; long unsigned int map_ptr_state; s32 call_imm; u32 alu_limit; struct { u32 map_index; u32 map_off; }; struct { enum bpf_reg_type reg_type; union { struct { struct btf *btf; u32 btf_id; }; u32 mem_size; }; } btf_var; }; u64 map_key_state; int ctx_field_size; u32 seen; bool sanitize_stack_spill; bool zext_dst; u8 alu_state; unsigned int orig_idx; bool prune_point; }; struct bpf_prog_dummy { struct bpf_prog prog; }; typedef u64 (*btf_bpf_user_rnd_u32)(); typedef u64 (*btf_bpf_get_raw_cpu_id)(); struct _bpf_dtab_netdev { struct net_device *dev; }; struct rhash_lock_head {}; struct xdp_mem_allocator { struct xdp_mem_info mem; union { void *allocator; struct page_pool *page_pool; }; struct rhash_head node; struct callback_head rcu; }; struct trace_event_raw_xdp_exception { struct trace_entry ent; int prog_id; u32 act; int ifindex; char __data[0]; }; struct trace_event_raw_xdp_bulk_tx { struct trace_entry ent; int ifindex; u32 act; int drops; int sent; int err; char __data[0]; }; struct trace_event_raw_xdp_redirect_template { struct trace_entry ent; int prog_id; u32 act; int ifindex; int err; int to_ifindex; u32 map_id; int map_index; char __data[0]; }; struct trace_event_raw_xdp_cpumap_kthread { struct trace_entry ent; int map_id; u32 act; int cpu; unsigned int drops; unsigned int processed; int sched; unsigned int xdp_pass; unsigned int xdp_drop; unsigned int xdp_redirect; char __data[0]; }; struct trace_event_raw_xdp_cpumap_enqueue { struct trace_entry ent; int map_id; u32 act; int cpu; unsigned int drops; unsigned int processed; int to_cpu; char __data[0]; }; struct trace_event_raw_xdp_devmap_xmit { struct trace_entry ent; int from_ifindex; u32 act; int to_ifindex; int drops; int sent; int err; char __data[0]; }; struct trace_event_raw_mem_disconnect { struct trace_entry ent; const struct xdp_mem_allocator *xa; u32 mem_id; u32 mem_type; const void *allocator; char __data[0]; }; struct trace_event_raw_mem_connect { struct trace_entry ent; const struct xdp_mem_allocator *xa; u32 mem_id; u32 mem_type; const void *allocator; const struct xdp_rxq_info *rxq; int ifindex; char __data[0]; }; struct trace_event_raw_mem_return_failed { struct trace_entry ent; const struct page *page; u32 mem_id; u32 mem_type; char __data[0]; }; struct trace_event_data_offsets_xdp_exception {}; struct trace_event_data_offsets_xdp_bulk_tx {}; struct trace_event_data_offsets_xdp_redirect_template {}; struct trace_event_data_offsets_xdp_cpumap_kthread {}; struct trace_event_data_offsets_xdp_cpumap_enqueue {}; struct trace_event_data_offsets_xdp_devmap_xmit {}; struct trace_event_data_offsets_mem_disconnect {}; struct trace_event_data_offsets_mem_connect {}; struct trace_event_data_offsets_mem_return_failed {}; typedef void (*btf_trace_xdp_exception)(void *, const struct net_device *, const struct bpf_prog *, u32); typedef void (*btf_trace_xdp_bulk_tx)(void *, const struct net_device *, int, int, int); typedef void (*btf_trace_xdp_redirect)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32); typedef void (*btf_trace_xdp_redirect_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32); typedef void (*btf_trace_xdp_redirect_map)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32); typedef void (*btf_trace_xdp_redirect_map_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, enum bpf_map_type, u32, u32); typedef void (*btf_trace_xdp_cpumap_kthread)(void *, int, unsigned int, unsigned int, int, struct xdp_cpumap_stats *); typedef void (*btf_trace_xdp_cpumap_enqueue)(void *, int, unsigned int, unsigned int, int); typedef void (*btf_trace_xdp_devmap_xmit)(void *, const struct net_device *, const struct net_device *, int, int, int); typedef void (*btf_trace_mem_disconnect)(void *, const struct xdp_mem_allocator *); typedef void (*btf_trace_mem_connect)(void *, const struct xdp_mem_allocator *, const struct xdp_rxq_info *); typedef void (*btf_trace_mem_return_failed)(void *, const struct xdp_mem_info *, const struct page *); enum bpf_cmd { BPF_MAP_CREATE = 0, BPF_MAP_LOOKUP_ELEM = 1, BPF_MAP_UPDATE_ELEM = 2, BPF_MAP_DELETE_ELEM = 3, BPF_MAP_GET_NEXT_KEY = 4, BPF_PROG_LOAD = 5, BPF_OBJ_PIN = 6, BPF_OBJ_GET = 7, BPF_PROG_ATTACH = 8, BPF_PROG_DETACH = 9, BPF_PROG_TEST_RUN = 10, BPF_PROG_RUN = 10, BPF_PROG_GET_NEXT_ID = 11, BPF_MAP_GET_NEXT_ID = 12, BPF_PROG_GET_FD_BY_ID = 13, BPF_MAP_GET_FD_BY_ID = 14, BPF_OBJ_GET_INFO_BY_FD = 15, BPF_PROG_QUERY = 16, BPF_RAW_TRACEPOINT_OPEN = 17, BPF_BTF_LOAD = 18, BPF_BTF_GET_FD_BY_ID = 19, BPF_TASK_FD_QUERY = 20, BPF_MAP_LOOKUP_AND_DELETE_ELEM = 21, BPF_MAP_FREEZE = 22, BPF_BTF_GET_NEXT_ID = 23, BPF_MAP_LOOKUP_BATCH = 24, BPF_MAP_LOOKUP_AND_DELETE_BATCH = 25, BPF_MAP_UPDATE_BATCH = 26, BPF_MAP_DELETE_BATCH = 27, BPF_LINK_CREATE = 28, BPF_LINK_UPDATE = 29, BPF_LINK_GET_FD_BY_ID = 30, BPF_LINK_GET_NEXT_ID = 31, BPF_ENABLE_STATS = 32, BPF_ITER_CREATE = 33, BPF_LINK_DETACH = 34, BPF_PROG_BIND_MAP = 35, }; enum bpf_link_type { BPF_LINK_TYPE_UNSPEC = 0, BPF_LINK_TYPE_RAW_TRACEPOINT = 1, BPF_LINK_TYPE_TRACING = 2, BPF_LINK_TYPE_CGROUP = 3, BPF_LINK_TYPE_ITER = 4, BPF_LINK_TYPE_NETNS = 5, BPF_LINK_TYPE_XDP = 6, BPF_LINK_TYPE_PERF_EVENT = 7, MAX_BPF_LINK_TYPE = 8, }; enum { BPF_ANY = 0, BPF_NOEXIST = 1, BPF_EXIST = 2, BPF_F_LOCK = 4, }; enum { BPF_F_NO_PREALLOC = 1, BPF_F_NO_COMMON_LRU = 2, BPF_F_NUMA_NODE = 4, BPF_F_RDONLY = 8, BPF_F_WRONLY = 16, BPF_F_STACK_BUILD_ID = 32, BPF_F_ZERO_SEED = 64, BPF_F_RDONLY_PROG = 128, BPF_F_WRONLY_PROG = 256, BPF_F_CLONE = 512, BPF_F_MMAPABLE = 1024, BPF_F_PRESERVE_ELEMS = 2048, BPF_F_INNER_MAP = 4096, }; enum bpf_stats_type { BPF_STATS_RUN_TIME = 0, }; struct bpf_prog_info { __u32 type; __u32 id; __u8 tag[8]; __u32 jited_prog_len; __u32 xlated_prog_len; __u64 jited_prog_insns; __u64 xlated_prog_insns; __u64 load_time; __u32 created_by_uid; __u32 nr_map_ids; __u64 map_ids; char name[16]; __u32 ifindex; __u32 gpl_compatible: 1; __u64 netns_dev; __u64 netns_ino; __u32 nr_jited_ksyms; __u32 nr_jited_func_lens; __u64 jited_ksyms; __u64 jited_func_lens; __u32 btf_id; __u32 func_info_rec_size; __u64 func_info; __u32 nr_func_info; __u32 nr_line_info; __u64 line_info; __u64 jited_line_info; __u32 nr_jited_line_info; __u32 line_info_rec_size; __u32 jited_line_info_rec_size; __u32 nr_prog_tags; __u64 prog_tags; __u64 run_time_ns; __u64 run_cnt; __u64 recursion_misses; __u32 verified_insns; }; struct bpf_map_info { __u32 type; __u32 id; __u32 key_size; __u32 value_size; __u32 max_entries; __u32 map_flags; char name[16]; __u32 ifindex; __u32 btf_vmlinux_value_type_id; __u64 netns_dev; __u64 netns_ino; __u32 btf_id; __u32 btf_key_type_id; __u32 btf_value_type_id; __u64 map_extra; }; struct bpf_btf_info { __u64 btf; __u32 btf_size; __u32 id; __u64 name; __u32 name_len; __u32 kernel_btf; }; struct bpf_link_info { __u32 type; __u32 id; __u32 prog_id; union { struct { __u64 tp_name; __u32 tp_name_len; } raw_tracepoint; struct { __u32 attach_type; __u32 target_obj_id; __u32 target_btf_id; } tracing; struct { __u64 cgroup_id; __u32 attach_type; } cgroup; struct { __u64 target_name; __u32 target_name_len; union { struct { __u32 map_id; } map; }; } iter; struct { __u32 netns_ino; __u32 attach_type; } netns; struct { __u32 ifindex; } xdp; }; }; struct bpf_spin_lock { __u32 val; }; struct bpf_timer { long: 64; long: 64;}; struct bpf_attach_target_info { struct btf_func_model fmodel; long int tgt_addr; const char *tgt_name; const struct btf_type *tgt_type; }; struct bpf_link_ops; struct bpf_link { atomic64_t refcnt; u32 id; enum bpf_link_type type; const struct bpf_link_ops *ops; struct bpf_prog *prog; struct work_struct work; }; struct bpf_link_ops { void (*release)(struct bpf_link *); void (*dealloc)(struct bpf_link *); int (*detach)(struct bpf_link *); int (*update_prog)(struct bpf_link *, struct bpf_prog *, struct bpf_prog *); void (*show_fdinfo)(const struct bpf_link *, struct seq_file *); int (*fill_link_info)(const struct bpf_link *, struct bpf_link_info *); }; struct bpf_link_primer { struct bpf_link *link; struct file *file; int fd; u32 id; }; enum perf_bpf_event_type { PERF_BPF_EVENT_UNKNOWN = 0, PERF_BPF_EVENT_PROG_LOAD = 1, PERF_BPF_EVENT_PROG_UNLOAD = 2, PERF_BPF_EVENT_MAX = 3, }; enum bpf_audit { BPF_AUDIT_LOAD = 0, BPF_AUDIT_UNLOAD = 1, BPF_AUDIT_MAX = 2, }; struct bpf_prog_kstats { u64 nsecs; u64 cnt; u64 misses; }; struct bpf_tracing_link { struct bpf_link link; enum bpf_attach_type attach_type; struct bpf_trampoline *trampoline; struct bpf_prog *tgt_prog; }; struct bpf_raw_tp_link { struct bpf_link link; struct bpf_raw_event_map *btp; }; struct bpf_perf_link { struct bpf_link link; struct file *perf_file; }; typedef u64 (*btf_bpf_sys_bpf)(int, void *, u32); typedef u64 (*btf_bpf_sys_close)(u32); typedef u64 (*btf_bpf_kallsyms_lookup_name)(const char *, int, int, u64 *); struct audit_buffer; enum { BTF_KIND_UNKN = 0, BTF_KIND_INT = 1, BTF_KIND_PTR = 2, BTF_KIND_ARRAY = 3, BTF_KIND_STRUCT = 4, BTF_KIND_UNION = 5, BTF_KIND_ENUM = 6, BTF_KIND_FWD = 7, BTF_KIND_TYPEDEF = 8, BTF_KIND_VOLATILE = 9, BTF_KIND_CONST = 10, BTF_KIND_RESTRICT = 11, BTF_KIND_FUNC = 12, BTF_KIND_FUNC_PROTO = 13, BTF_KIND_VAR = 14, BTF_KIND_DATASEC = 15, BTF_KIND_FLOAT = 16, BTF_KIND_DECL_TAG = 17, BTF_KIND_TYPE_TAG = 18, NR_BTF_KINDS = 19, BTF_KIND_MAX = 18, }; struct btf_member { __u32 name_off; __u32 type; __u32 offset; }; struct btf_param { __u32 name_off; __u32 type; }; enum btf_func_linkage { BTF_FUNC_STATIC = 0, BTF_FUNC_GLOBAL = 1, BTF_FUNC_EXTERN = 2, }; struct btf_var_secinfo { __u32 type; __u32 offset; __u32 size; }; enum sk_action { SK_DROP = 0, SK_PASS = 1, }; enum bpf_core_relo_kind { BPF_CORE_FIELD_BYTE_OFFSET = 0, BPF_CORE_FIELD_BYTE_SIZE = 1, BPF_CORE_FIELD_EXISTS = 2, BPF_CORE_FIELD_SIGNED = 3, BPF_CORE_FIELD_LSHIFT_U64 = 4, BPF_CORE_FIELD_RSHIFT_U64 = 5, BPF_CORE_TYPE_ID_LOCAL = 6, BPF_CORE_TYPE_ID_TARGET = 7, BPF_CORE_TYPE_EXISTS = 8, BPF_CORE_TYPE_SIZE = 9, BPF_CORE_ENUMVAL_EXISTS = 10, BPF_CORE_ENUMVAL_VALUE = 11, }; struct bpf_core_relo { __u32 insn_off; __u32 type_id; __u32 access_str_off; enum bpf_core_relo_kind kind; }; struct bpf_kfunc_desc { struct btf_func_model func_model; u32 func_id; s32 imm; u16 offset; }; struct bpf_kfunc_desc_tab { struct bpf_kfunc_desc descs[256]; u32 nr_descs; }; struct bpf_kfunc_btf { struct btf *btf; struct module *module; u16 offset; }; struct bpf_kfunc_btf_tab { struct bpf_kfunc_btf descs[256]; u32 nr_descs; }; struct bpf_struct_ops { const struct bpf_verifier_ops *verifier_ops; int (*init)(struct btf *); int (*check_member)(const struct btf_type *, const struct btf_member *); int (*init_member)(const struct btf_type *, const struct btf_member *, void *, const void *); int (*reg)(void *); void (*unreg)(void *); const struct btf_type *type; const struct btf_type *value_type; const char *name; struct btf_func_model func_models[64]; u32 type_id; u32 value_id; }; typedef u32 (*bpf_convert_ctx_access_t)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *); struct bpf_core_ctx { struct bpf_verifier_log *log; const struct btf *btf; }; enum bpf_stack_slot_type { STACK_INVALID = 0, STACK_SPILL = 1, STACK_MISC = 2, STACK_ZERO = 3, }; struct bpf_verifier_stack_elem { struct bpf_verifier_state st; int insn_idx; int prev_insn_idx; struct bpf_verifier_stack_elem *next; u32 log_pos; }; enum { BTF_SOCK_TYPE_INET = 0, BTF_SOCK_TYPE_INET_CONN = 1, BTF_SOCK_TYPE_INET_REQ = 2, BTF_SOCK_TYPE_INET_TW = 3, BTF_SOCK_TYPE_REQ = 4, BTF_SOCK_TYPE_SOCK = 5, BTF_SOCK_TYPE_SOCK_COMMON = 6, BTF_SOCK_TYPE_TCP = 7, BTF_SOCK_TYPE_TCP_REQ = 8, BTF_SOCK_TYPE_TCP_TW = 9, BTF_SOCK_TYPE_TCP6 = 10, BTF_SOCK_TYPE_UDP = 11, BTF_SOCK_TYPE_UDP6 = 12, BTF_SOCK_TYPE_UNIX = 13, MAX_BTF_SOCK_TYPE = 14, }; typedef void (*bpf_insn_print_t)(void *, const char *, ...); typedef const char * (*bpf_insn_revmap_call_t)(void *, const struct bpf_insn *); typedef const char * (*bpf_insn_print_imm_t)(void *, const struct bpf_insn *, __u64); struct bpf_insn_cbs { bpf_insn_print_t cb_print; bpf_insn_revmap_call_t cb_call; bpf_insn_print_imm_t cb_imm; void *private_data; }; struct bpf_call_arg_meta { struct bpf_map *map_ptr; bool raw_mode; bool pkt_access; int regno; int access_size; int mem_size; u64 msize_max_value; int ref_obj_id; int map_uid; int func_id; struct btf *btf; u32 btf_id; struct btf *ret_btf; u32 ret_btf_id; u32 subprogno; }; enum reg_arg_type { SRC_OP = 0, DST_OP = 1, DST_OP_NO_MARK = 2, }; enum stack_access_src { ACCESS_DIRECT = 1, ACCESS_HELPER = 2, }; struct bpf_reg_types { const enum bpf_reg_type types[10]; u32 *btf_id; }; enum { AT_PKT_END = 4294967295, BEYOND_PKT_END = 4294967294, }; typedef int (*set_callee_state_fn)(struct bpf_verifier_env *, struct bpf_func_state *, struct bpf_func_state *, int); enum { REASON_BOUNDS = 4294967295, REASON_TYPE = 4294967294, REASON_PATHS = 4294967293, REASON_LIMIT = 4294967292, REASON_STACK = 4294967291, }; struct bpf_sanitize_info { struct bpf_insn_aux_data aux; bool mask_to_left; }; enum { DISCOVERED = 16, EXPLORED = 32, FALLTHROUGH = 1, BRANCH = 2, }; enum { DONE_EXPLORING = 0, KEEP_EXPLORING = 1, }; struct tree_descr { const char *name; const struct file_operations *ops; int mode; }; struct umd_info { const char *driver_name; struct file *pipe_to_umh; struct file *pipe_from_umh; struct path wd; struct pid *tgid; }; struct bpf_preload_info { char link_name[16]; int link_id; }; struct bpf_preload_ops { struct umd_info info; int (*preload)(struct bpf_preload_info *); int (*finish)(); struct module *owner; }; enum bpf_type { BPF_TYPE_UNSPEC = 0, BPF_TYPE_PROG = 1, BPF_TYPE_MAP = 2, BPF_TYPE_LINK = 3, }; struct map_iter { void *key; bool done; }; enum { OPT_MODE = 0, }; struct bpf_mount_opts { umode_t mode; }; struct bpf_pidns_info { __u32 pid; __u32 tgid; }; struct bpf_cg_run_ctx { struct bpf_run_ctx run_ctx; const struct bpf_prog_array_item *prog_item; }; typedef u64 (*btf_bpf_map_lookup_elem)(struct bpf_map *, void *); typedef u64 (*btf_bpf_map_update_elem)(struct bpf_map *, void *, void *, u64); typedef u64 (*btf_bpf_map_delete_elem)(struct bpf_map *, void *); typedef u64 (*btf_bpf_map_push_elem)(struct bpf_map *, void *, u64); typedef u64 (*btf_bpf_map_pop_elem)(struct bpf_map *, void *); typedef u64 (*btf_bpf_map_peek_elem)(struct bpf_map *, void *); typedef u64 (*btf_bpf_get_smp_processor_id)(); typedef u64 (*btf_bpf_get_numa_node_id)(); typedef u64 (*btf_bpf_ktime_get_ns)(); typedef u64 (*btf_bpf_ktime_get_boot_ns)(); typedef u64 (*btf_bpf_ktime_get_coarse_ns)(); typedef u64 (*btf_bpf_get_current_pid_tgid)(); typedef u64 (*btf_bpf_get_current_uid_gid)(); typedef u64 (*btf_bpf_get_current_comm)(char *, u32); typedef u64 (*btf_bpf_spin_lock)(struct bpf_spin_lock *); typedef u64 (*btf_bpf_spin_unlock)(struct bpf_spin_lock *); typedef u64 (*btf_bpf_jiffies64)(); typedef u64 (*btf_bpf_get_current_cgroup_id)(); typedef u64 (*btf_bpf_get_current_ancestor_cgroup_id)(int); typedef u64 (*btf_bpf_get_local_storage)(struct bpf_map *, u64); typedef u64 (*btf_bpf_strtol)(const char *, size_t, u64, long int *); typedef u64 (*btf_bpf_strtoul)(const char *, size_t, u64, long unsigned int *); typedef u64 (*btf_bpf_strncmp)(const char *, u32, const char *); typedef u64 (*btf_bpf_get_ns_current_pid_tgid)(u64, u64, struct bpf_pidns_info *, u32); typedef u64 (*btf_bpf_event_output_data)(void *, struct bpf_map *, u64, void *, u64); typedef u64 (*btf_bpf_copy_from_user)(void *, u32, const void *); typedef u64 (*btf_bpf_per_cpu_ptr)(const void *, u32); typedef u64 (*btf_bpf_this_cpu_ptr)(const void *); struct bpf_bprintf_buffers { char tmp_bufs[1536]; }; typedef u64 (*btf_bpf_snprintf)(char *, u32, char *, const void *, u32); struct bpf_hrtimer { struct hrtimer timer; struct bpf_map *map; struct bpf_prog *prog; void *callback_fn; void *value; }; struct bpf_timer_kern { struct bpf_hrtimer *timer; struct bpf_spin_lock lock; }; typedef u64 (*btf_bpf_timer_init)(struct bpf_timer_kern *, struct bpf_map *, u64); typedef u64 (*btf_bpf_timer_set_callback)(struct bpf_timer_kern *, void *, struct bpf_prog_aux *); typedef u64 (*btf_bpf_timer_start)(struct bpf_timer_kern *, u64, u64); typedef u64 (*btf_bpf_timer_cancel)(struct bpf_timer_kern *); union bpf_iter_link_info { struct { __u32 map_fd; } map; }; typedef int (*bpf_iter_attach_target_t)(struct bpf_prog *, union bpf_iter_link_info *, struct bpf_iter_aux_info *); typedef void (*bpf_iter_detach_target_t)(struct bpf_iter_aux_info *); typedef void (*bpf_iter_show_fdinfo_t)(const struct bpf_iter_aux_info *, struct seq_file *); typedef int (*bpf_iter_fill_link_info_t)(const struct bpf_iter_aux_info *, struct bpf_link_info *); typedef const struct bpf_func_proto * (*bpf_iter_get_func_proto_t)(enum bpf_func_id, const struct bpf_prog *); enum bpf_iter_feature { BPF_ITER_RESCHED = 1, }; struct bpf_iter_reg { const char *target; bpf_iter_attach_target_t attach_target; bpf_iter_detach_target_t detach_target; bpf_iter_show_fdinfo_t show_fdinfo; bpf_iter_fill_link_info_t fill_link_info; bpf_iter_get_func_proto_t get_func_proto; u32 ctx_arg_info_size; u32 feature; struct bpf_ctx_arg_aux ctx_arg_info[2]; const struct bpf_iter_seq_info *seq_info; }; struct bpf_iter_meta { union { struct seq_file *seq; }; u64 session_id; u64 seq_num; }; struct bpf_iter_target_info { struct list_head list; const struct bpf_iter_reg *reg_info; u32 btf_id; }; struct bpf_iter_link { struct bpf_link link; struct bpf_iter_aux_info aux; struct bpf_iter_target_info *tinfo; }; struct bpf_iter_priv_data { struct bpf_iter_target_info *tinfo; const struct bpf_iter_seq_info *seq_info; struct bpf_prog *prog; u64 session_id; u64 seq_num; bool done_stop; long: 56; u8 target_private[0]; }; typedef u64 (*btf_bpf_for_each_map_elem)(struct bpf_map *, void *, void *, u64); typedef u64 (*btf_bpf_loop)(u32, void *, void *, u64); struct bpf_iter_seq_map_info { u32 map_id; }; struct bpf_iter__bpf_map { union { struct bpf_iter_meta *meta; }; union { struct bpf_map *map; }; }; struct mmap_unlock_irq_work { struct irq_work irq_work; struct mm_struct *mm; }; struct bpf_iter_seq_task_common { struct pid_namespace *ns; }; struct bpf_iter_seq_task_info { struct bpf_iter_seq_task_common common; u32 tid; }; struct bpf_iter__task { union { struct bpf_iter_meta *meta; }; union { struct task_struct *task; }; }; struct bpf_iter_seq_task_file_info { struct bpf_iter_seq_task_common common; struct task_struct *task; u32 tid; u32 fd; }; struct bpf_iter__task_file { union { struct bpf_iter_meta *meta; }; union { struct task_struct *task; }; u32 fd; union { struct file *file; }; }; struct bpf_iter_seq_task_vma_info { struct bpf_iter_seq_task_common common; struct task_struct *task; struct vm_area_struct *vma; u32 tid; long unsigned int prev_vm_start; long unsigned int prev_vm_end; }; enum bpf_task_vma_iter_find_op { task_vma_iter_first_vma = 0, task_vma_iter_next_vma = 1, task_vma_iter_find_vma = 2, }; struct bpf_iter__task_vma { union { struct bpf_iter_meta *meta; }; union { struct task_struct *task; }; union { struct vm_area_struct *vma; }; }; typedef u64 (*btf_bpf_find_vma)(struct task_struct *, u64, bpf_callback_t, void *, u64); struct bpf_iter_seq_prog_info { u32 prog_id; }; struct bpf_iter__bpf_prog { union { struct bpf_iter_meta *meta; }; union { struct bpf_prog *prog; }; }; struct bpf_iter__bpf_map_elem { union { struct bpf_iter_meta *meta; }; union { struct bpf_map *map; }; union { void *key; }; union { void *value; }; }; struct hlist_nulls_head { struct hlist_nulls_node *first; }; struct pcpu_freelist_node; struct pcpu_freelist_head { struct pcpu_freelist_node *first; raw_spinlock_t lock; }; struct pcpu_freelist_node { struct pcpu_freelist_node *next; }; struct pcpu_freelist { struct pcpu_freelist_head *freelist; struct pcpu_freelist_head extralist; }; struct bpf_lru_node { struct list_head list; u16 cpu; u8 type; u8 ref; }; struct bpf_lru_list { struct list_head lists[3]; unsigned int counts[2]; struct list_head *next_inactive_rotation; raw_spinlock_t lock; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct bpf_lru_locallist { struct list_head lists[2]; u16 next_steal; raw_spinlock_t lock; }; struct bpf_common_lru { struct bpf_lru_list lru_list; struct bpf_lru_locallist *local_list; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; typedef bool (*del_from_htab_func)(void *, struct bpf_lru_node *); struct bpf_lru { union { struct bpf_common_lru common_lru; struct bpf_lru_list *percpu_lru; }; del_from_htab_func del_from_htab; void *del_arg; unsigned int hash_offset; unsigned int nr_scans; bool percpu; long: 56; long: 64; long: 64; long: 64; long: 64; }; struct bucket { struct hlist_nulls_head head; union { raw_spinlock_t raw_lock; spinlock_t lock; }; }; struct htab_elem; struct bpf_htab { struct bpf_map map; struct bucket *buckets; void *elems; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; union { struct pcpu_freelist freelist; struct bpf_lru lru; }; struct htab_elem **extra_elems; atomic_t count; u32 n_buckets; u32 elem_size; u32 hashrnd; struct lock_class_key lockdep_key; int *map_locked[8]; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct htab_elem { union { struct hlist_nulls_node hash_node; struct { void *padding; union { struct bpf_htab *htab; struct pcpu_freelist_node fnode; struct htab_elem *batch_flink; }; }; }; union { struct callback_head rcu; struct bpf_lru_node lru_node; }; u32 hash; int: 32; char key[0]; }; struct bpf_iter_seq_hash_map_info { struct bpf_map *map; struct bpf_htab *htab; void *percpu_value_buf; u32 bucket_id; u32 skip_elems; }; struct bpf_iter_seq_array_map_info { struct bpf_map *map; void *percpu_value_buf; u32 index; }; struct prog_poke_elem { struct list_head list; struct bpf_prog_aux *aux; }; enum bpf_lru_list_type { BPF_LRU_LIST_T_ACTIVE = 0, BPF_LRU_LIST_T_INACTIVE = 1, BPF_LRU_LIST_T_FREE = 2, BPF_LRU_LOCAL_LIST_T_FREE = 3, BPF_LRU_LOCAL_LIST_T_PENDING = 4, }; struct bpf_lpm_trie_key { __u32 prefixlen; __u8 data[0]; }; struct lpm_trie_node { struct callback_head rcu; struct lpm_trie_node *child[2]; u32 prefixlen; u32 flags; u8 data[0]; }; struct lpm_trie { struct bpf_map map; struct lpm_trie_node *root; size_t n_entries; size_t max_prefixlen; size_t data_size; spinlock_t lock; long: 32; long: 64; long: 64; long: 64; }; struct bpf_bloom_filter { struct bpf_map map; u32 bitset_mask; u32 hash_seed; u32 aligned_u32_count; u32 nr_hash_funcs; long unsigned int bitset[0]; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct bpf_cgroup_storage_map { struct bpf_map map; spinlock_t lock; struct rb_root root; struct list_head list; long: 64; long: 64; long: 64; long: 64; }; struct bpf_queue_stack { struct bpf_map map; raw_spinlock_t lock; u32 head; u32 tail; u32 size; char elements[0]; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; enum { BPF_RB_NO_WAKEUP = 1, BPF_RB_FORCE_WAKEUP = 2, }; enum { BPF_RB_AVAIL_DATA = 0, BPF_RB_RING_SIZE = 1, BPF_RB_CONS_POS = 2, BPF_RB_PROD_POS = 3, }; enum { BPF_RINGBUF_BUSY_BIT = 2147483648, BPF_RINGBUF_DISCARD_BIT = 1073741824, BPF_RINGBUF_HDR_SZ = 8, }; struct bpf_ringbuf { wait_queue_head_t waitq; struct irq_work work; u64 mask; struct page **pages; int nr_pages; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; spinlock_t spinlock; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long unsigned int consumer_pos; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long unsigned int producer_pos; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; char data[0]; }; struct bpf_ringbuf_map { struct bpf_map map; struct bpf_ringbuf *rb; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct bpf_ringbuf_hdr { u32 len; u32 pg_off; }; typedef u64 (*btf_bpf_ringbuf_reserve)(struct bpf_map *, u64, u64); typedef u64 (*btf_bpf_ringbuf_submit)(void *, u64); typedef u64 (*btf_bpf_ringbuf_discard)(void *, u64); typedef u64 (*btf_bpf_ringbuf_output)(struct bpf_map *, void *, u64, u64); typedef u64 (*btf_bpf_ringbuf_query)(struct bpf_map *, u64); struct bpf_local_storage_elem { struct hlist_node map_node; struct hlist_node snode; struct bpf_local_storage *local_storage; struct callback_head rcu; long: 64; struct bpf_local_storage_data sdata; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct bpf_local_storage_cache { spinlock_t idx_lock; u64 idx_usage_counts[16]; }; enum { BPF_LOCAL_STORAGE_GET_F_CREATE = 1, BPF_SK_STORAGE_GET_F_CREATE = 1, }; typedef u64 (*btf_bpf_task_storage_get)(struct bpf_map *, struct task_struct *, void *, u64); typedef u64 (*btf_bpf_task_storage_delete)(struct bpf_map *, struct task_struct *); struct btf_enum { __u32 name_off; __s32 val; }; struct btf_array { __u32 type; __u32 index_type; __u32 nelems; }; enum { BTF_VAR_STATIC = 0, BTF_VAR_GLOBAL_ALLOCATED = 1, BTF_VAR_GLOBAL_EXTERN = 2, }; struct btf_var { __u32 linkage; }; struct btf_decl_tag { __s32 component_idx; }; struct bpf_flow_keys { __u16 nhoff; __u16 thoff; __u16 addr_proto; __u8 is_frag; __u8 is_first_frag; __u8 is_encap; __u8 ip_proto; __be16 n_proto; __be16 sport; __be16 dport; union { struct { __be32 ipv4_src; __be32 ipv4_dst; }; struct { __u32 ipv6_src[4]; __u32 ipv6_dst[4]; }; }; __u32 flags; __be32 flow_label; }; struct bpf_sock { __u32 bound_dev_if; __u32 family; __u32 type; __u32 protocol; __u32 mark; __u32 priority; __u32 src_ip4; __u32 src_ip6[4]; __u32 src_port; __u32 dst_port; __u32 dst_ip4; __u32 dst_ip6[4]; __u32 state; __s32 rx_queue_mapping; }; struct __sk_buff { __u32 len; __u32 pkt_type; __u32 mark; __u32 queue_mapping; __u32 protocol; __u32 vlan_present; __u32 vlan_tci; __u32 vlan_proto; __u32 priority; __u32 ingress_ifindex; __u32 ifindex; __u32 tc_index; __u32 cb[5]; __u32 hash; __u32 tc_classid; __u32 data; __u32 data_end; __u32 napi_id; __u32 family; __u32 remote_ip4; __u32 local_ip4; __u32 remote_ip6[4]; __u32 local_ip6[4]; __u32 remote_port; __u32 local_port; __u32 data_meta; union { struct bpf_flow_keys *flow_keys; }; __u64 tstamp; __u32 wire_len; __u32 gso_segs; union { struct bpf_sock *sk; }; __u32 gso_size; __u64 hwtstamp; }; struct xdp_md { __u32 data; __u32 data_end; __u32 data_meta; __u32 ingress_ifindex; __u32 rx_queue_index; __u32 egress_ifindex; }; struct sk_msg_md { union { void *data; }; union { void *data_end; }; __u32 family; __u32 remote_ip4; __u32 local_ip4; __u32 remote_ip6[4]; __u32 local_ip6[4]; __u32 remote_port; __u32 local_port; __u32 size; union { struct bpf_sock *sk; }; }; struct sk_reuseport_md { union { void *data; }; union { void *data_end; }; __u32 len; __u32 eth_protocol; __u32 ip_protocol; __u32 bind_inany; __u32 hash; union { struct bpf_sock *sk; }; union { struct bpf_sock *migrating_sk; }; }; struct bpf_sock_addr { __u32 user_family; __u32 user_ip4; __u32 user_ip6[4]; __u32 user_port; __u32 family; __u32 type; __u32 protocol; __u32 msg_src_ip4; __u32 msg_src_ip6[4]; union { struct bpf_sock *sk; }; }; struct bpf_sock_ops { __u32 op; union { __u32 args[4]; __u32 reply; __u32 replylong[4]; }; __u32 family; __u32 remote_ip4; __u32 local_ip4; __u32 remote_ip6[4]; __u32 local_ip6[4]; __u32 remote_port; __u32 local_port; __u32 is_fullsock; __u32 snd_cwnd; __u32 srtt_us; __u32 bpf_sock_ops_cb_flags; __u32 state; __u32 rtt_min; __u32 snd_ssthresh; __u32 rcv_nxt; __u32 snd_nxt; __u32 snd_una; __u32 mss_cache; __u32 ecn_flags; __u32 rate_delivered; __u32 rate_interval_us; __u32 packets_out; __u32 retrans_out; __u32 total_retrans; __u32 segs_in; __u32 data_segs_in; __u32 segs_out; __u32 data_segs_out; __u32 lost_out; __u32 sacked_out; __u32 sk_txhash; __u64 bytes_received; __u64 bytes_acked; union { struct bpf_sock *sk; }; union { void *skb_data; }; union { void *skb_data_end; }; __u32 skb_len; __u32 skb_tcp_flags; }; struct bpf_cgroup_dev_ctx { __u32 access_type; __u32 major; __u32 minor; }; struct bpf_sysctl { __u32 write; __u32 file_pos; }; struct bpf_sockopt { union { struct bpf_sock *sk; }; union { void *optval; }; union { void *optval_end; }; __s32 level; __s32 optname; __s32 optlen; __s32 retval; }; struct bpf_sk_lookup { union { union { struct bpf_sock *sk; }; __u64 cookie; }; __u32 family; __u32 protocol; __u32 remote_ip4; __u32 remote_ip6[4]; __u32 remote_port; __u32 local_ip4; __u32 local_ip6[4]; __u32 local_port; __u32 ingress_ifindex; }; struct sk_reuseport_kern { struct sk_buff *skb; struct sock *sk; struct sock *selected_sk; struct sock *migrating_sk; void *data_end; u32 hash; u32 reuseport_id; bool bind_inany; }; struct kfunc_btf_id_set { struct list_head list; struct btf_id_set *set; struct module *owner; }; struct kfunc_btf_id_list { struct list_head list; struct mutex mutex; }; struct bpf_flow_dissector { struct bpf_flow_keys *flow_keys; const struct sk_buff *skb; const void *data; const void *data_end; }; struct inet_listen_hashbucket { spinlock_t lock; unsigned int count; union { struct hlist_head head; struct hlist_nulls_head nulls_head; }; }; struct inet_ehash_bucket; struct inet_bind_hashbucket; struct inet_hashinfo { struct inet_ehash_bucket *ehash; spinlock_t *ehash_locks; unsigned int ehash_mask; unsigned int ehash_locks_mask; struct kmem_cache *bind_bucket_cachep; struct inet_bind_hashbucket *bhash; unsigned int bhash_size; unsigned int lhash2_mask; struct inet_listen_hashbucket *lhash2; long: 64; struct inet_listen_hashbucket listening_hash[32]; }; struct ip_ra_chain { struct ip_ra_chain *next; struct sock *sk; union { void (*destructor)(struct sock *); struct sock *saved_sk; }; struct callback_head rcu; }; struct inet_peer_base { struct rb_root rb_root; seqlock_t lock; int total; }; struct tcp_fastopen_context { siphash_key_t key[2]; int num; struct callback_head rcu; }; struct bpf_sock_addr_kern { struct sock *sk; struct sockaddr *uaddr; u64 tmp_reg; void *t_ctx; }; struct bpf_sock_ops_kern { struct sock *sk; union { u32 args[4]; u32 reply; u32 replylong[4]; }; struct sk_buff *syn_skb; struct sk_buff *skb; void *skb_data_end; u8 op; u8 is_fullsock; u8 remaining_opt_len; u64 temp; }; struct bpf_sysctl_kern { struct ctl_table_header *head; struct ctl_table *table; void *cur_val; size_t cur_len; void *new_val; size_t new_len; int new_updated; int write; loff_t *ppos; u64 tmp_reg; }; struct bpf_sockopt_kern { struct sock *sk; u8 *optval; u8 *optval_end; s32 level; s32 optname; s32 optlen; s32 retval; }; struct bpf_sk_lookup_kern { u16 family; u16 protocol; __be16 sport; u16 dport; struct { __be32 saddr; __be32 daddr; } v4; struct { const struct in6_addr *saddr; const struct in6_addr *daddr; } v6; struct sock *selected_sk; u32 ingress_ifindex; bool no_reuseport; }; struct lwtunnel_state { __u16 type; __u16 flags; __u16 headroom; atomic_t refcnt; int (*orig_output)(struct net *, struct sock *, struct sk_buff *); int (*orig_input)(struct sk_buff *); struct callback_head rcu; __u8 data[0]; }; struct sock_reuseport { struct callback_head rcu; u16 max_socks; u16 num_socks; u16 num_closed_socks; unsigned int synq_overflow_ts; unsigned int reuseport_id; unsigned int bind_inany: 1; unsigned int has_conns: 1; struct bpf_prog *prog; struct sock *socks[0]; }; struct sk_psock_progs { struct bpf_prog *msg_parser; struct bpf_prog *stream_parser; struct bpf_prog *stream_verdict; struct bpf_prog *skb_verdict; }; struct sk_psock_work_state { struct sk_buff *skb; u32 len; u32 off; }; struct sk_msg; struct sk_psock { struct sock *sk; struct sock *sk_redir; u32 apply_bytes; u32 cork_bytes; u32 eval; struct sk_msg *cork; struct sk_psock_progs progs; struct sk_buff_head ingress_skb; struct list_head ingress_msg; spinlock_t ingress_lock; long unsigned int state; struct list_head link; spinlock_t link_lock; refcount_t refcnt; void (*saved_unhash)(struct sock *); void (*saved_close)(struct sock *, long int); void (*saved_write_space)(struct sock *); void (*saved_data_ready)(struct sock *); int (*psock_update_sk_prot)(struct sock *, struct sk_psock *, bool); struct proto *sk_proto; struct mutex work_mutex; struct sk_psock_work_state work_state; struct work_struct work; struct rcu_work rwork; }; struct inet_ehash_bucket { struct hlist_nulls_head chain; }; struct inet_bind_hashbucket { spinlock_t lock; struct hlist_head chain; }; struct ack_sample { u32 pkts_acked; s32 rtt_us; u32 in_flight; }; struct rate_sample { u64 prior_mstamp; u32 prior_delivered; u32 prior_delivered_ce; s32 delivered; s32 delivered_ce; long int interval_us; u32 snd_interval_us; u32 rcv_interval_us; long int rtt_us; int losses; u32 acked_sacked; u32 prior_in_flight; bool is_app_limited; bool is_retrans; bool is_ack_delayed; }; struct sk_msg_sg { u32 start; u32 curr; u32 end; u32 size; u32 copybreak; long unsigned int copy; struct scatterlist data[19]; }; struct sk_msg { struct sk_msg_sg sg; void *data; void *data_end; u32 apply_bytes; u32 cork_bytes; u32 flags; struct sk_buff *skb; struct sock *sk_redir; struct sock *sk; struct list_head list; }; struct bpf_core_cand { const struct btf *btf; __u32 id; }; struct bpf_core_cand_list { struct bpf_core_cand *cands; int len; }; struct bpf_core_accessor { __u32 type_id; __u32 idx; const char *name; }; struct bpf_core_spec { const struct btf *btf; struct bpf_core_accessor spec[64]; __u32 root_type_id; enum bpf_core_relo_kind relo_kind; int len; int raw_spec[64]; int raw_len; __u32 bit_offset; }; enum verifier_phase { CHECK_META = 0, CHECK_TYPE = 1, }; struct resolve_vertex { const struct btf_type *t; u32 type_id; u16 next_member; }; enum visit_state { NOT_VISITED = 0, VISITED = 1, RESOLVED = 2, }; enum resolve_mode { RESOLVE_TBD = 0, RESOLVE_PTR = 1, RESOLVE_STRUCT_OR_ARRAY = 2, }; struct btf_sec_info { u32 off; u32 len; }; struct btf_verifier_env { struct btf *btf; u8 *visit_states; struct resolve_vertex stack[32]; struct bpf_verifier_log log; u32 log_type_id; u32 top_stack; enum verifier_phase phase; enum resolve_mode resolve_mode; }; struct btf_show { u64 flags; void *target; void (*showfn)(struct btf_show *, const char *, struct __va_list_tag *); const struct btf *btf; struct { u8 depth; u8 depth_to_show; u8 depth_check; u8 array_member: 1; u8 array_terminated: 1; u16 array_encoding; u32 type_id; int status; const struct btf_type *type; const struct btf_member *member; char name[80]; } state; struct { u32 size; void *head; void *data; u8 safe[32]; } obj; }; struct btf_kind_operations { s32 (*check_meta)(struct btf_verifier_env *, const struct btf_type *, u32); int (*resolve)(struct btf_verifier_env *, const struct resolve_vertex *); int (*check_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *); int (*check_kflag_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *); void (*log_details)(struct btf_verifier_env *, const struct btf_type *); void (*show)(const struct btf *, const struct btf_type *, u32, void *, u8, struct btf_show *); }; struct bpf_ctx_convert { struct __sk_buff BPF_PROG_TYPE_SOCKET_FILTER_prog; struct sk_buff BPF_PROG_TYPE_SOCKET_FILTER_kern; struct __sk_buff BPF_PROG_TYPE_SCHED_CLS_prog; struct sk_buff BPF_PROG_TYPE_SCHED_CLS_kern; struct __sk_buff BPF_PROG_TYPE_SCHED_ACT_prog; struct sk_buff BPF_PROG_TYPE_SCHED_ACT_kern; struct xdp_md BPF_PROG_TYPE_XDP_prog; struct xdp_buff BPF_PROG_TYPE_XDP_kern; struct __sk_buff BPF_PROG_TYPE_CGROUP_SKB_prog; struct sk_buff BPF_PROG_TYPE_CGROUP_SKB_kern; struct bpf_sock BPF_PROG_TYPE_CGROUP_SOCK_prog; struct sock BPF_PROG_TYPE_CGROUP_SOCK_kern; struct bpf_sock_addr BPF_PROG_TYPE_CGROUP_SOCK_ADDR_prog; struct bpf_sock_addr_kern BPF_PROG_TYPE_CGROUP_SOCK_ADDR_kern; struct __sk_buff BPF_PROG_TYPE_LWT_IN_prog; struct sk_buff BPF_PROG_TYPE_LWT_IN_kern; struct __sk_buff BPF_PROG_TYPE_LWT_OUT_prog; struct sk_buff BPF_PROG_TYPE_LWT_OUT_kern; struct __sk_buff BPF_PROG_TYPE_LWT_XMIT_prog; struct sk_buff BPF_PROG_TYPE_LWT_XMIT_kern; struct __sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_prog; struct sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_kern; struct bpf_sock_ops BPF_PROG_TYPE_SOCK_OPS_prog; struct bpf_sock_ops_kern BPF_PROG_TYPE_SOCK_OPS_kern; struct __sk_buff BPF_PROG_TYPE_SK_SKB_prog; struct sk_buff BPF_PROG_TYPE_SK_SKB_kern; struct sk_msg_md BPF_PROG_TYPE_SK_MSG_prog; struct sk_msg BPF_PROG_TYPE_SK_MSG_kern; struct __sk_buff BPF_PROG_TYPE_FLOW_DISSECTOR_prog; struct bpf_flow_dissector BPF_PROG_TYPE_FLOW_DISSECTOR_kern; bpf_user_pt_regs_t BPF_PROG_TYPE_KPROBE_prog; struct pt_regs BPF_PROG_TYPE_KPROBE_kern; __u64 BPF_PROG_TYPE_TRACEPOINT_prog; u64 BPF_PROG_TYPE_TRACEPOINT_kern; struct bpf_perf_event_data BPF_PROG_TYPE_PERF_EVENT_prog; struct bpf_perf_event_data_kern BPF_PROG_TYPE_PERF_EVENT_kern; struct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_prog; u64 BPF_PROG_TYPE_RAW_TRACEPOINT_kern; struct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_prog; u64 BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_kern; void *BPF_PROG_TYPE_TRACING_prog; void *BPF_PROG_TYPE_TRACING_kern; struct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_prog; struct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_kern; struct bpf_sysctl BPF_PROG_TYPE_CGROUP_SYSCTL_prog; struct bpf_sysctl_kern BPF_PROG_TYPE_CGROUP_SYSCTL_kern; struct bpf_sockopt BPF_PROG_TYPE_CGROUP_SOCKOPT_prog; struct bpf_sockopt_kern BPF_PROG_TYPE_CGROUP_SOCKOPT_kern; struct sk_reuseport_md BPF_PROG_TYPE_SK_REUSEPORT_prog; struct sk_reuseport_kern BPF_PROG_TYPE_SK_REUSEPORT_kern; struct bpf_sk_lookup BPF_PROG_TYPE_SK_LOOKUP_prog; struct bpf_sk_lookup_kern BPF_PROG_TYPE_SK_LOOKUP_kern; void *BPF_PROG_TYPE_STRUCT_OPS_prog; void *BPF_PROG_TYPE_STRUCT_OPS_kern; void *BPF_PROG_TYPE_EXT_prog; void *BPF_PROG_TYPE_EXT_kern; void *BPF_PROG_TYPE_SYSCALL_prog; void *BPF_PROG_TYPE_SYSCALL_kern; }; enum { __ctx_convertBPF_PROG_TYPE_SOCKET_FILTER = 0, __ctx_convertBPF_PROG_TYPE_SCHED_CLS = 1, __ctx_convertBPF_PROG_TYPE_SCHED_ACT = 2, __ctx_convertBPF_PROG_TYPE_XDP = 3, __ctx_convertBPF_PROG_TYPE_CGROUP_SKB = 4, __ctx_convertBPF_PROG_TYPE_CGROUP_SOCK = 5, __ctx_convertBPF_PROG_TYPE_CGROUP_SOCK_ADDR = 6, __ctx_convertBPF_PROG_TYPE_LWT_IN = 7, __ctx_convertBPF_PROG_TYPE_LWT_OUT = 8, __ctx_convertBPF_PROG_TYPE_LWT_XMIT = 9, __ctx_convertBPF_PROG_TYPE_LWT_SEG6LOCAL = 10, __ctx_convertBPF_PROG_TYPE_SOCK_OPS = 11, __ctx_convertBPF_PROG_TYPE_SK_SKB = 12, __ctx_convertBPF_PROG_TYPE_SK_MSG = 13, __ctx_convertBPF_PROG_TYPE_FLOW_DISSECTOR = 14, __ctx_convertBPF_PROG_TYPE_KPROBE = 15, __ctx_convertBPF_PROG_TYPE_TRACEPOINT = 16, __ctx_convertBPF_PROG_TYPE_PERF_EVENT = 17, __ctx_convertBPF_PROG_TYPE_RAW_TRACEPOINT = 18, __ctx_convertBPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 19, __ctx_convertBPF_PROG_TYPE_TRACING = 20, __ctx_convertBPF_PROG_TYPE_CGROUP_DEVICE = 21, __ctx_convertBPF_PROG_TYPE_CGROUP_SYSCTL = 22, __ctx_convertBPF_PROG_TYPE_CGROUP_SOCKOPT = 23, __ctx_convertBPF_PROG_TYPE_SK_REUSEPORT = 24, __ctx_convertBPF_PROG_TYPE_SK_LOOKUP = 25, __ctx_convertBPF_PROG_TYPE_STRUCT_OPS = 26, __ctx_convertBPF_PROG_TYPE_EXT = 27, __ctx_convertBPF_PROG_TYPE_SYSCALL = 28, __ctx_convert_unused = 29, }; enum bpf_struct_walk_result { WALK_SCALAR = 0, WALK_PTR = 1, WALK_STRUCT = 2, }; struct btf_show_snprintf { struct btf_show show; int len_left; int len; }; struct btf_module { struct list_head list; struct module *module; struct btf *btf; struct bin_attribute *sysfs_attr; }; typedef u64 (*btf_bpf_btf_find_by_name_kind)(char *, int, u32, int); struct bpf_cand_cache { const char *name; u32 name_len; u16 kind; u16 cnt; struct { const struct btf *btf; u32 id; } cands[0]; }; struct bpf_dispatcher_prog { struct bpf_prog *prog; refcount_t users; }; struct bpf_dispatcher { struct mutex mutex; void *func; struct bpf_dispatcher_prog progs[48]; int num_progs; void *image; u32 image_off; struct bpf_ksym ksym; }; enum { BPF_F_BROADCAST = 8, BPF_F_EXCLUDE_INGRESS = 16, }; struct bpf_devmap_val { __u32 ifindex; union { int fd; __u32 id; } bpf_prog; }; enum net_device_flags { IFF_UP = 1, IFF_BROADCAST = 2, IFF_DEBUG = 4, IFF_LOOPBACK = 8, IFF_POINTOPOINT = 16, IFF_NOTRAILERS = 32, IFF_RUNNING = 64, IFF_NOARP = 128, IFF_PROMISC = 256, IFF_ALLMULTI = 512, IFF_MASTER = 1024, IFF_SLAVE = 2048, IFF_MULTICAST = 4096, IFF_PORTSEL = 8192, IFF_AUTOMEDIA = 16384, IFF_DYNAMIC = 32768, IFF_LOWER_UP = 65536, IFF_DORMANT = 131072, IFF_ECHO = 262144, }; enum netdev_priv_flags { IFF_802_1Q_VLAN = 1, IFF_EBRIDGE = 2, IFF_BONDING = 4, IFF_ISATAP = 8, IFF_WAN_HDLC = 16, IFF_XMIT_DST_RELEASE = 32, IFF_DONT_BRIDGE = 64, IFF_DISABLE_NETPOLL = 128, IFF_MACVLAN_PORT = 256, IFF_BRIDGE_PORT = 512, IFF_OVS_DATAPATH = 1024, IFF_TX_SKB_SHARING = 2048, IFF_UNICAST_FLT = 4096, IFF_TEAM_PORT = 8192, IFF_SUPP_NOFCS = 16384, IFF_LIVE_ADDR_CHANGE = 32768, IFF_MACVLAN = 65536, IFF_XMIT_DST_RELEASE_PERM = 131072, IFF_L3MDEV_MASTER = 262144, IFF_NO_QUEUE = 524288, IFF_OPENVSWITCH = 1048576, IFF_L3MDEV_SLAVE = 2097152, IFF_TEAM = 4194304, IFF_RXFH_CONFIGURED = 8388608, IFF_PHONY_HEADROOM = 16777216, IFF_MACSEC = 33554432, IFF_NO_RX_HANDLER = 67108864, IFF_FAILOVER = 134217728, IFF_FAILOVER_SLAVE = 268435456, IFF_L3MDEV_RX_HANDLER = 536870912, IFF_LIVE_RENAME_OK = 1073741824, IFF_TX_SKB_NO_LINEAR = 2147483648, IFF_CHANGE_PROTO_DOWN = 0, }; struct xdp_dev_bulk_queue { struct xdp_frame *q[16]; struct list_head flush_node; struct net_device *dev; struct net_device *dev_rx; struct bpf_prog *xdp_prog; unsigned int count; }; enum netdev_cmd { NETDEV_UP = 1, NETDEV_DOWN = 2, NETDEV_REBOOT = 3, NETDEV_CHANGE = 4, NETDEV_REGISTER = 5, NETDEV_UNREGISTER = 6, NETDEV_CHANGEMTU = 7, NETDEV_CHANGEADDR = 8, NETDEV_PRE_CHANGEADDR = 9, NETDEV_GOING_DOWN = 10, NETDEV_CHANGENAME = 11, NETDEV_FEAT_CHANGE = 12, NETDEV_BONDING_FAILOVER = 13, NETDEV_PRE_UP = 14, NETDEV_PRE_TYPE_CHANGE = 15, NETDEV_POST_TYPE_CHANGE = 16, NETDEV_POST_INIT = 17, NETDEV_RELEASE = 18, NETDEV_NOTIFY_PEERS = 19, NETDEV_JOIN = 20, NETDEV_CHANGEUPPER = 21, NETDEV_RESEND_IGMP = 22, NETDEV_PRECHANGEMTU = 23, NETDEV_CHANGEINFODATA = 24, NETDEV_BONDING_INFO = 25, NETDEV_PRECHANGEUPPER = 26, NETDEV_CHANGELOWERSTATE = 27, NETDEV_UDP_TUNNEL_PUSH_INFO = 28, NETDEV_UDP_TUNNEL_DROP_INFO = 29, NETDEV_CHANGE_TX_QUEUE_LEN = 30, NETDEV_CVLAN_FILTER_PUSH_INFO = 31, NETDEV_CVLAN_FILTER_DROP_INFO = 32, NETDEV_SVLAN_FILTER_PUSH_INFO = 33, NETDEV_SVLAN_FILTER_DROP_INFO = 34, }; struct netdev_notifier_info { struct net_device *dev; struct netlink_ext_ack *extack; }; struct bpf_nh_params { u32 nh_family; union { u32 ipv4_nh; struct in6_addr ipv6_nh; }; }; struct bpf_redirect_info { u32 flags; u32 tgt_index; void *tgt_value; struct bpf_map *map; u32 map_id; enum bpf_map_type map_type; u32 kern_flags; struct bpf_nh_params nh; }; struct bpf_dtab; struct bpf_dtab_netdev { struct net_device *dev; struct hlist_node index_hlist; struct bpf_dtab *dtab; struct bpf_prog *xdp_prog; struct callback_head rcu; unsigned int idx; struct bpf_devmap_val val; }; struct bpf_dtab { struct bpf_map map; struct bpf_dtab_netdev **netdev_map; struct list_head list; struct hlist_head *dev_index_head; spinlock_t index_lock; unsigned int items; u32 n_buckets; long: 32; long: 64; long: 64; }; struct bpf_cpumap_val { __u32 qsize; union { int fd; __u32 id; } bpf_prog; }; struct bpf_cpu_map_entry; struct xdp_bulk_queue { void *q[8]; struct list_head flush_node; struct bpf_cpu_map_entry *obj; unsigned int count; }; struct bpf_cpu_map; struct bpf_cpu_map_entry { u32 cpu; int map_id; struct xdp_bulk_queue *bulkq; struct bpf_cpu_map *cmap; struct ptr_ring *queue; struct task_struct *kthread; struct bpf_cpumap_val value; struct bpf_prog *prog; atomic_t refcnt; struct callback_head rcu; struct work_struct kthread_stop_wq; }; struct bpf_cpu_map { struct bpf_map map; struct bpf_cpu_map_entry **cpu_map; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct rhlist_head { struct rhash_head rhead; struct rhlist_head *next; }; struct bpf_prog_offload_ops { int (*insn_hook)(struct bpf_verifier_env *, int, int); int (*finalize)(struct bpf_verifier_env *); int (*replace_insn)(struct bpf_verifier_env *, u32, struct bpf_insn *); int (*remove_insns)(struct bpf_verifier_env *, u32, u32); int (*prepare)(struct bpf_prog *); int (*translate)(struct bpf_prog *); void (*destroy)(struct bpf_prog *); }; struct bpf_offload_dev { const struct bpf_prog_offload_ops *ops; struct list_head netdevs; void *priv; }; typedef struct ns_common *ns_get_path_helper_t(void *); struct bpf_offload_netdev { struct rhash_head l; struct net_device *netdev; struct bpf_offload_dev *offdev; struct list_head progs; struct list_head maps; struct list_head offdev_netdevs; }; struct ns_get_path_bpf_prog_args { struct bpf_prog *prog; struct bpf_prog_info *info; }; struct ns_get_path_bpf_map_args { struct bpf_offloaded_map *offmap; struct bpf_map_info *info; }; struct pernet_operations { struct list_head list; int (*init)(struct net *); void (*pre_exit)(struct net *); void (*exit)(struct net *); void (*exit_batch)(struct list_head *); unsigned int *id; size_t size; }; struct bpf_netns_link { struct bpf_link link; enum bpf_attach_type type; enum netns_bpf_attach_type netns_type; struct net *net; struct list_head node; }; enum bpf_stack_build_id_status { BPF_STACK_BUILD_ID_EMPTY = 0, BPF_STACK_BUILD_ID_VALID = 1, BPF_STACK_BUILD_ID_IP = 2, }; struct bpf_stack_build_id { __s32 status; unsigned char build_id[20]; union { __u64 offset; __u64 ip; }; }; enum { BPF_F_SKIP_FIELD_MASK = 255, BPF_F_USER_STACK = 256, BPF_F_FAST_STACK_CMP = 512, BPF_F_REUSE_STACKID = 1024, BPF_F_USER_BUILD_ID = 2048, }; enum perf_callchain_context { PERF_CONTEXT_HV = 4294967264, PERF_CONTEXT_KERNEL = 4294967168, PERF_CONTEXT_USER = 4294966784, PERF_CONTEXT_GUEST = 4294965248, PERF_CONTEXT_GUEST_KERNEL = 4294965120, PERF_CONTEXT_GUEST_USER = 4294964736, PERF_CONTEXT_MAX = 4294963201, }; struct stack_map_bucket { struct pcpu_freelist_node fnode; u32 hash; u32 nr; u64 data[0]; }; struct bpf_stack_map { struct bpf_map map; void *elems; struct pcpu_freelist freelist; u32 n_buckets; struct stack_map_bucket *buckets[0]; long: 64; long: 64; long: 64; }; typedef u64 (*btf_bpf_get_stackid)(struct pt_regs *, struct bpf_map *, u64); typedef u64 (*btf_bpf_get_stackid_pe)(struct bpf_perf_event_data_kern *, struct bpf_map *, u64); typedef u64 (*btf_bpf_get_stack)(struct pt_regs *, void *, u32, u64); typedef u64 (*btf_bpf_get_task_stack)(struct task_struct *, void *, u32, u64); typedef u64 (*btf_bpf_get_stack_pe)(struct bpf_perf_event_data_kern *, void *, u32, u64); enum { BPF_F_SYSCTL_BASE_NAME = 1, }; struct bpf_cgroup_link { struct bpf_link link; struct cgroup *cgroup; enum bpf_attach_type type; }; struct bpf_prog_list { struct list_head node; struct bpf_prog *prog; struct bpf_cgroup_link *link; struct bpf_cgroup_storage *storage[2]; }; struct __kernel_sockaddr_storage { union { struct { __kernel_sa_family_t ss_family; char __data[126]; }; void *__align; }; }; struct qdisc_skb_cb { struct { unsigned int pkt_len; u16 slave_dev_queue_mapping; u16 tc_classid; }; unsigned char data[20]; u16 mru; bool post_ct; }; struct bpf_skb_data_end { struct qdisc_skb_cb qdisc_cb; void *data_meta; void *data_end; }; struct bpf_sockopt_buf { u8 data[32]; }; enum { TCPF_ESTABLISHED = 2, TCPF_SYN_SENT = 4, TCPF_SYN_RECV = 8, TCPF_FIN_WAIT1 = 16, TCPF_FIN_WAIT2 = 32, TCPF_TIME_WAIT = 64, TCPF_CLOSE = 128, TCPF_CLOSE_WAIT = 256, TCPF_LAST_ACK = 512, TCPF_LISTEN = 1024, TCPF_CLOSING = 2048, TCPF_NEW_SYN_RECV = 4096, }; typedef u64 (*btf_bpf_sysctl_get_name)(struct bpf_sysctl_kern *, char *, size_t, u64); typedef u64 (*btf_bpf_sysctl_get_current_value)(struct bpf_sysctl_kern *, char *, size_t); typedef u64 (*btf_bpf_sysctl_get_new_value)(struct bpf_sysctl_kern *, char *, size_t); typedef u64 (*btf_bpf_sysctl_set_new_value)(struct bpf_sysctl_kern *, const char *, size_t); typedef u64 (*btf_bpf_get_netns_cookie_sockopt)(struct bpf_sockopt_kern *); enum sock_type { SOCK_STREAM = 1, SOCK_DGRAM = 2, SOCK_RAW = 3, SOCK_RDM = 4, SOCK_SEQPACKET = 5, SOCK_DCCP = 6, SOCK_PACKET = 10, }; enum { IPPROTO_IP = 0, IPPROTO_ICMP = 1, IPPROTO_IGMP = 2, IPPROTO_IPIP = 4, IPPROTO_TCP = 6, IPPROTO_EGP = 8, IPPROTO_PUP = 12, IPPROTO_UDP = 17, IPPROTO_IDP = 22, IPPROTO_TP = 29, IPPROTO_DCCP = 33, IPPROTO_IPV6 = 41, IPPROTO_RSVP = 46, IPPROTO_GRE = 47, IPPROTO_ESP = 50, IPPROTO_AH = 51, IPPROTO_MTP = 92, IPPROTO_BEETPH = 94, IPPROTO_ENCAP = 98, IPPROTO_PIM = 103, IPPROTO_COMP = 108, IPPROTO_SCTP = 132, IPPROTO_UDPLITE = 136, IPPROTO_MPLS = 137, IPPROTO_ETHERNET = 143, IPPROTO_RAW = 255, IPPROTO_MPTCP = 262, IPPROTO_MAX = 263, }; enum sock_flags { SOCK_DEAD = 0, SOCK_DONE = 1, SOCK_URGINLINE = 2, SOCK_KEEPOPEN = 3, SOCK_LINGER = 4, SOCK_DESTROY = 5, SOCK_BROADCAST = 6, SOCK_TIMESTAMP = 7, SOCK_ZAPPED = 8, SOCK_USE_WRITE_QUEUE = 9, SOCK_DBG = 10, SOCK_RCVTSTAMP = 11, SOCK_RCVTSTAMPNS = 12, SOCK_LOCALROUTE = 13, SOCK_MEMALLOC = 14, SOCK_TIMESTAMPING_RX_SOFTWARE = 15, SOCK_FASYNC = 16, SOCK_RXQ_OVFL = 17, SOCK_ZEROCOPY = 18, SOCK_WIFI_STATUS = 19, SOCK_NOFCS = 20, SOCK_FILTER_LOCKED = 21, SOCK_SELECT_ERR_QUEUE = 22, SOCK_RCU_FREE = 23, SOCK_TXTIME = 24, SOCK_XDP = 25, SOCK_TSTAMP_NEW = 26, }; struct reuseport_array { struct bpf_map map; struct sock *ptrs[0]; }; struct bpf_dummy_ops_state { int val; }; struct bpf_dummy_ops { int (*test_1)(struct bpf_dummy_ops_state *); int (*test_2)(struct bpf_dummy_ops_state *, int, short unsigned int, char, long unsigned int); }; enum bpf_struct_ops_state { BPF_STRUCT_OPS_STATE_INIT = 0, BPF_STRUCT_OPS_STATE_INUSE = 1, BPF_STRUCT_OPS_STATE_TOBEFREE = 2, }; struct bpf_struct_ops_value { refcount_t refcnt; enum bpf_struct_ops_state state; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; char data[0]; }; struct bpf_struct_ops_map { struct bpf_map map; struct callback_head rcu; const struct bpf_struct_ops *st_ops; struct mutex lock; struct bpf_prog **progs; void *image; struct bpf_struct_ops_value *uvalue; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; struct bpf_struct_ops_value kvalue; }; struct bpf_struct_ops_bpf_dummy_ops { refcount_t refcnt; enum bpf_struct_ops_state state; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; struct bpf_dummy_ops data; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct bpf_struct_ops_tcp_congestion_ops { refcount_t refcnt; enum bpf_struct_ops_state state; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; struct tcp_congestion_ops data; }; enum { BPF_STRUCT_OPS_TYPE_bpf_dummy_ops = 0, BPF_STRUCT_OPS_TYPE_tcp_congestion_ops = 1, __NR_BPF_STRUCT_OPS_TYPE = 2, }; enum libbpf_print_level { LIBBPF_WARN = 0, LIBBPF_INFO = 1, LIBBPF_DEBUG = 2, }; struct bpf_core_relo_res { __u32 orig_val; __u32 new_val; bool poison; bool validate; bool fail_memsz_adjust; __u32 orig_sz; __u32 orig_type_id; __u32 new_sz; __u32 new_type_id; }; struct static_call_tramp_key { s32 tramp; s32 key; }; enum perf_event_read_format { PERF_FORMAT_TOTAL_TIME_ENABLED = 1, PERF_FORMAT_TOTAL_TIME_RUNNING = 2, PERF_FORMAT_ID = 4, PERF_FORMAT_GROUP = 8, PERF_FORMAT_MAX = 16, }; enum perf_event_ioc_flags { PERF_IOC_FLAG_GROUP = 1, }; struct perf_ns_link_info { __u64 dev; __u64 ino; }; enum { NET_NS_INDEX = 0, UTS_NS_INDEX = 1, IPC_NS_INDEX = 2, PID_NS_INDEX = 3, USER_NS_INDEX = 4, MNT_NS_INDEX = 5, CGROUP_NS_INDEX = 6, NR_NAMESPACES = 7, }; enum perf_event_type { PERF_RECORD_MMAP = 1, PERF_RECORD_LOST = 2, PERF_RECORD_COMM = 3, PERF_RECORD_EXIT = 4, PERF_RECORD_THROTTLE = 5, PERF_RECORD_UNTHROTTLE = 6, PERF_RECORD_FORK = 7, PERF_RECORD_READ = 8, PERF_RECORD_SAMPLE = 9, PERF_RECORD_MMAP2 = 10, PERF_RECORD_AUX = 11, PERF_RECORD_ITRACE_START = 12, PERF_RECORD_LOST_SAMPLES = 13, PERF_RECORD_SWITCH = 14, PERF_RECORD_SWITCH_CPU_WIDE = 15, PERF_RECORD_NAMESPACES = 16, PERF_RECORD_KSYMBOL = 17, PERF_RECORD_BPF_EVENT = 18, PERF_RECORD_CGROUP = 19, PERF_RECORD_TEXT_POKE = 20, PERF_RECORD_AUX_OUTPUT_HW_ID = 21, PERF_RECORD_MAX = 22, }; struct swevent_hlist { struct hlist_head heads[256]; struct callback_head callback_head; }; struct pmu_event_list { raw_spinlock_t lock; struct list_head list; }; struct perf_buffer { refcount_t refcount; struct callback_head callback_head; int nr_pages; int overwrite; int paused; atomic_t poll; local_t head; unsigned int nest; local_t events; local_t wakeup; local_t lost; long int watermark; long int aux_watermark; spinlock_t event_lock; struct list_head event_list; atomic_t mmap_count; long unsigned int mmap_locked; struct user_struct *mmap_user; long int aux_head; unsigned int aux_nest; long int aux_wakeup; long unsigned int aux_pgoff; int aux_nr_pages; int aux_overwrite; atomic_t aux_mmap_count; long unsigned int aux_mmap_locked; void (*free_aux)(void *); refcount_t aux_refcount; int aux_in_sampling; void **aux_pages; void *aux_priv; struct perf_event_mmap_page *user_page; void *data_pages[0]; }; struct match_token { int token; const char *pattern; }; enum { MAX_OPT_ARGS = 3, }; typedef struct { char *from; char *to; } substring_t; struct min_heap { void *data; int nr; int size; }; struct min_heap_callbacks { int elem_size; bool (*less)(const void *, const void *); void (*swp)(void *, void *); }; typedef int (*remote_function_f)(void *); struct remote_function_call { struct task_struct *p; remote_function_f func; void *info; int ret; }; typedef void (*event_f)(struct perf_event *, struct perf_cpu_context *, struct perf_event_context *, void *); struct event_function_struct { struct perf_event *event; event_f func; void *data; }; enum event_type_t { EVENT_FLEXIBLE = 1, EVENT_PINNED = 2, EVENT_TIME = 4, EVENT_CPU = 8, EVENT_ALL = 3, }; struct __group_key { int cpu; struct cgroup *cgroup; }; struct stop_event_data { struct perf_event *event; unsigned int restart; }; struct perf_read_data { struct perf_event *event; bool group; int ret; }; struct perf_read_event { struct perf_event_header header; u32 pid; u32 tid; }; typedef void perf_iterate_f(struct perf_event *, void *); struct remote_output { struct perf_buffer *rb; int err; }; struct perf_task_event { struct task_struct *task; struct perf_event_context *task_ctx; struct { struct perf_event_header header; u32 pid; u32 ppid; u32 tid; u32 ptid; u64 time; } event_id; }; struct perf_comm_event { struct task_struct *task; char *comm; int comm_size; struct { struct perf_event_header header; u32 pid; u32 tid; } event_id; }; struct perf_namespaces_event { struct task_struct *task; struct { struct perf_event_header header; u32 pid; u32 tid; u64 nr_namespaces; struct perf_ns_link_info link_info[7]; } event_id; }; struct perf_mmap_event { struct vm_area_struct *vma; const char *file_name; int file_size; int maj; int min; u64 ino; u64 ino_generation; u32 prot; u32 flags; u8 build_id[20]; u32 build_id_size; struct { struct perf_event_header header; u32 pid; u32 tid; u64 start; u64 len; u64 pgoff; } event_id; }; struct perf_switch_event { struct task_struct *task; struct task_struct *next_prev; struct { struct perf_event_header header; u32 next_prev_pid; u32 next_prev_tid; } event_id; }; struct perf_ksymbol_event { const char *name; int name_len; struct { struct perf_event_header header; u64 addr; u32 len; u16 ksym_type; u16 flags; } event_id; }; struct perf_bpf_event { struct bpf_prog *prog; struct { struct perf_event_header header; u16 type; u16 flags; u32 id; u8 tag[8]; } event_id; }; struct perf_text_poke_event { const void *old_bytes; const void *new_bytes; size_t pad; u16 old_len; u16 new_len; struct { struct perf_event_header header; u64 addr; } event_id; }; struct swevent_htable { struct swevent_hlist *swevent_hlist; struct mutex hlist_mutex; int hlist_refcount; int recursion[4]; }; enum perf_probe_config { PERF_PROBE_CONFIG_IS_RETPROBE = 1, PERF_UPROBE_REF_CTR_OFFSET_BITS = 32, PERF_UPROBE_REF_CTR_OFFSET_SHIFT = 32, }; enum { IF_ACT_NONE = 4294967295, IF_ACT_FILTER = 0, IF_ACT_START = 1, IF_ACT_STOP = 2, IF_SRC_FILE = 3, IF_SRC_KERNEL = 4, IF_SRC_FILEADDR = 5, IF_SRC_KERNELADDR = 6, }; enum { IF_STATE_ACTION = 0, IF_STATE_SOURCE = 1, IF_STATE_END = 2, }; struct perf_aux_event { struct perf_event_header header; u64 hw_id; }; struct perf_aux_event___2 { struct perf_event_header header; u32 pid; u32 tid; }; struct perf_aux_event___3 { struct perf_event_header header; u64 offset; u64 size; u64 flags; }; struct callchain_cpus_entries { struct callback_head callback_head; struct perf_callchain_entry *cpu_entries[0]; }; enum bp_type_idx { TYPE_INST = 0, TYPE_DATA = 0, TYPE_MAX = 1, }; struct bp_cpuinfo { unsigned int cpu_pinned; unsigned int *tsk_pinned; unsigned int flexible; }; struct bp_busy_slots { unsigned int pinned; unsigned int flexible; }; typedef u8 uprobe_opcode_t; struct uprobe { struct rb_node rb_node; refcount_t ref; struct rw_semaphore register_rwsem; struct rw_semaphore consumer_rwsem; struct list_head pending_list; struct uprobe_consumer *consumers; struct inode *inode; loff_t offset; loff_t ref_ctr_offset; long unsigned int flags; struct arch_uprobe arch; }; struct xol_area { wait_queue_head_t wq; atomic_t slot_count; long unsigned int *bitmap; struct vm_special_mapping xol_mapping; struct page *pages[2]; long unsigned int vaddr; }; struct compact_control; struct capture_control { struct compact_control *cc; struct page *page; }; typedef int filler_t(void *, struct page *); struct page_vma_mapped_walk { struct page *page; struct vm_area_struct *vma; long unsigned int address; pmd_t *pmd; pte_t *pte; spinlock_t *ptl; unsigned int flags; }; struct mmu_notifier_range { long unsigned int start; long unsigned int end; }; struct compact_control { struct list_head freepages; struct list_head migratepages; unsigned int nr_freepages; unsigned int nr_migratepages; long unsigned int free_pfn; long unsigned int migrate_pfn; long unsigned int fast_start_pfn; struct zone *zone; long unsigned int total_migrate_scanned; long unsigned int total_free_scanned; short unsigned int fast_search_fail; short int search_order; const gfp_t gfp_mask; int order; int migratetype; const unsigned int alloc_flags; const int highest_zoneidx; enum migrate_mode mode; bool ignore_skip_hint; bool no_set_skip_hint; bool ignore_block_suitable; bool direct_compaction; bool proactive_compaction; bool whole_zone; bool contended; bool rescan; bool alloc_contig; }; struct delayed_uprobe { struct list_head list; struct uprobe *uprobe; struct mm_struct *mm; }; struct __uprobe_key { struct inode *inode; loff_t offset; }; struct map_info { struct map_info *next; struct mm_struct *mm; long unsigned int vaddr; }; struct static_key_mod { struct static_key_mod *next; struct jump_entry *entries; struct module *mod; }; struct static_key_deferred { struct static_key key; long unsigned int timeout; struct delayed_work work; }; enum rseq_cpu_id_state { RSEQ_CPU_ID_UNINITIALIZED = 4294967295, RSEQ_CPU_ID_REGISTRATION_FAILED = 4294967294, }; enum rseq_flags { RSEQ_FLAG_UNREGISTER = 1, }; enum rseq_cs_flags { RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT = 1, RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL = 2, RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE = 4, }; struct rseq_cs { __u32 version; __u32 flags; __u64 start_ip; __u64 post_commit_offset; __u64 abort_ip; }; struct trace_event_raw_rseq_update { struct trace_entry ent; s32 cpu_id; char __data[0]; }; struct trace_event_raw_rseq_ip_fixup { struct trace_entry ent; long unsigned int regs_ip; long unsigned int start_ip; long unsigned int post_commit_offset; long unsigned int abort_ip; char __data[0]; }; struct trace_event_data_offsets_rseq_update {}; struct trace_event_data_offsets_rseq_ip_fixup {}; typedef void (*btf_trace_rseq_update)(void *, struct task_struct *); typedef void (*btf_trace_rseq_ip_fixup)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int); enum watch_notification_type { WATCH_TYPE_META = 0, WATCH_TYPE_KEY_NOTIFY = 1, WATCH_TYPE__NR = 2, }; enum watch_meta_notification_subtype { WATCH_META_REMOVAL_NOTIFICATION = 0, WATCH_META_LOSS_NOTIFICATION = 1, }; struct watch_notification { __u32 type: 24; __u32 subtype: 8; __u32 info; }; struct watch_notification_type_filter { __u32 type; __u32 info_filter; __u32 info_mask; __u32 subtype_filter[8]; }; struct watch_notification_filter { __u32 nr_filters; __u32 __reserved; struct watch_notification_type_filter filters[0]; }; struct watch_notification_removal { struct watch_notification watch; __u64 id; }; struct watch_type_filter { enum watch_notification_type type; __u32 subtype_filter[1]; __u32 info_filter; __u32 info_mask; }; struct watch_filter { union { struct callback_head rcu; long unsigned int type_filter[2]; }; u32 nr_filters; struct watch_type_filter filters[0]; }; struct watch_queue { struct callback_head rcu; struct watch_filter *filter; struct pipe_inode_info *pipe; struct hlist_head watches; struct page **notes; long unsigned int *notes_bitmap; struct kref usage; spinlock_t lock; unsigned int nr_notes; unsigned int nr_pages; bool defunct; }; struct watch_list; struct watch { union { struct callback_head rcu; u32 info_id; }; struct watch_queue *queue; struct hlist_node queue_node; struct watch_list *watch_list; struct hlist_node list_node; const struct cred *cred; void *private; u64 id; struct kref usage; }; struct watch_list { struct callback_head rcu; struct hlist_head watchers; void (*release_watch)(struct watch *); spinlock_t lock; }; struct pkcs7_message; struct __key_reference_with_attributes; typedef struct __key_reference_with_attributes *key_ref_t; typedef void (*xa_update_node_t)(struct xa_node *); struct xa_state { struct xarray *xa; long unsigned int xa_index; unsigned char xa_shift; unsigned char xa_sibs; unsigned char xa_offset; unsigned char xa_pad; struct xa_node *xa_node; struct xa_node *xa_alloc; xa_update_node_t xa_update; }; typedef int __kernel_rwf_t; enum positive_aop_returns { AOP_WRITEPAGE_ACTIVATE = 524288, AOP_TRUNCATED_PAGE = 524289, }; enum iter_type { ITER_IOVEC = 0, ITER_KVEC = 1, ITER_BVEC = 2, ITER_PIPE = 3, ITER_XARRAY = 4, ITER_DISCARD = 5, }; enum mapping_flags { AS_EIO = 0, AS_ENOSPC = 1, AS_MM_ALL_LOCKS = 2, AS_UNEVICTABLE = 3, AS_EXITING = 4, AS_NO_WRITEBACK_TAGS = 5, AS_LARGE_FOLIO_SUPPORT = 6, }; struct wait_page_key { struct folio *folio; int bit_nr; int page_match; }; struct pagevec { unsigned char nr; bool percpu_pvec_drained; struct page *pages[15]; }; struct fid { union { struct { u32 ino; u32 gen; u32 parent_ino; u32 parent_gen; } i32; struct { u32 block; u16 partref; u16 parent_partref; u32 generation; u32 parent_block; u32 parent_generation; } udf; __u32 raw[0]; }; }; struct trace_event_raw_mm_filemap_op_page_cache { struct trace_entry ent; long unsigned int pfn; long unsigned int i_ino; long unsigned int index; dev_t s_dev; char __data[0]; }; struct trace_event_raw_filemap_set_wb_err { struct trace_entry ent; long unsigned int i_ino; dev_t s_dev; errseq_t errseq; char __data[0]; }; struct trace_event_raw_file_check_and_advance_wb_err { struct trace_entry ent; struct file *file; long unsigned int i_ino; dev_t s_dev; errseq_t old; errseq_t new; char __data[0]; }; struct trace_event_data_offsets_mm_filemap_op_page_cache {}; struct trace_event_data_offsets_filemap_set_wb_err {}; struct trace_event_data_offsets_file_check_and_advance_wb_err {}; typedef void (*btf_trace_mm_filemap_delete_from_page_cache)(void *, struct page *); typedef void (*btf_trace_mm_filemap_add_to_page_cache)(void *, struct page *); typedef void (*btf_trace_filemap_set_wb_err)(void *, struct address_space *, errseq_t); typedef void (*btf_trace_file_check_and_advance_wb_err)(void *, struct file *, errseq_t); enum behavior { EXCLUSIVE = 0, SHARED = 1, DROP = 2, }; struct reciprocal_value { u32 m; u8 sh1; u8 sh2; }; struct kmem_cache_order_objects { unsigned int x; }; struct kmem_cache_cpu; struct kmem_cache_node; struct kmem_cache { struct kmem_cache_cpu *cpu_slab; slab_flags_t flags; long unsigned int min_partial; unsigned int size; unsigned int object_size; struct reciprocal_value reciprocal_size; unsigned int offset; unsigned int cpu_partial; unsigned int cpu_partial_pages; struct kmem_cache_order_objects oo; struct kmem_cache_order_objects max; struct kmem_cache_order_objects min; gfp_t allocflags; int refcount; void (*ctor)(void *); unsigned int inuse; unsigned int align; unsigned int red_left_pad; const char *name; struct list_head list; struct kobject kobj; unsigned int useroffset; unsigned int usersize; struct kmem_cache_node *node[1]; }; struct kmem_cache_cpu { void **freelist; long unsigned int tid; struct page *page; struct page *partial; local_lock_t lock; }; struct kmem_cache_node { spinlock_t list_lock; long unsigned int nr_partial; struct list_head partial; atomic_long_t nr_slabs; atomic_long_t total_objects; struct list_head full; }; struct zap_details { struct address_space *zap_mapping; struct page *single_page; }; enum oom_constraint { CONSTRAINT_NONE = 0, CONSTRAINT_CPUSET = 1, CONSTRAINT_MEMORY_POLICY = 2, CONSTRAINT_MEMCG = 3, }; struct oom_control { struct zonelist *zonelist; nodemask_t *nodemask; struct mem_cgroup *memcg; const gfp_t gfp_mask; const int order; long unsigned int totalpages; struct task_struct *chosen; long int chosen_points; enum oom_constraint constraint; }; enum compact_priority { COMPACT_PRIO_SYNC_FULL = 0, MIN_COMPACT_PRIORITY = 0, COMPACT_PRIO_SYNC_LIGHT = 1, MIN_COMPACT_COSTLY_PRIORITY = 1, DEF_COMPACT_PRIORITY = 1, COMPACT_PRIO_ASYNC = 2, INIT_COMPACT_PRIORITY = 2, }; enum compact_result { COMPACT_NOT_SUITABLE_ZONE = 0, COMPACT_SKIPPED = 1, COMPACT_DEFERRED = 2, COMPACT_NO_SUITABLE_PAGE = 3, COMPACT_CONTINUE = 4, COMPACT_COMPLETE = 5, COMPACT_PARTIAL_SKIPPED = 6, COMPACT_CONTENDED = 7, COMPACT_SUCCESS = 8, }; struct trace_event_raw_oom_score_adj_update { struct trace_entry ent; pid_t pid; char comm[16]; short int oom_score_adj; char __data[0]; }; struct trace_event_raw_reclaim_retry_zone { struct trace_entry ent; int node; int zone_idx; int order; long unsigned int reclaimable; long unsigned int available; long unsigned int min_wmark; int no_progress_loops; bool wmark_check; char __data[0]; }; struct trace_event_raw_mark_victim { struct trace_entry ent; int pid; char __data[0]; }; struct trace_event_raw_wake_reaper { struct trace_entry ent; int pid; char __data[0]; }; struct trace_event_raw_start_task_reaping { struct trace_entry ent; int pid; char __data[0]; }; struct trace_event_raw_finish_task_reaping { struct trace_entry ent; int pid; char __data[0]; }; struct trace_event_raw_skip_task_reaping { struct trace_entry ent; int pid; char __data[0]; }; struct trace_event_raw_compact_retry { struct trace_entry ent; int order; int priority; int result; int retries; int max_retries; bool ret; char __data[0]; }; struct trace_event_data_offsets_oom_score_adj_update {}; struct trace_event_data_offsets_reclaim_retry_zone {}; struct trace_event_data_offsets_mark_victim {}; struct trace_event_data_offsets_wake_reaper {}; struct trace_event_data_offsets_start_task_reaping {}; struct trace_event_data_offsets_finish_task_reaping {}; struct trace_event_data_offsets_skip_task_reaping {}; struct trace_event_data_offsets_compact_retry {}; typedef void (*btf_trace_oom_score_adj_update)(void *, struct task_struct *); typedef void (*btf_trace_reclaim_retry_zone)(void *, struct zoneref *, int, long unsigned int, long unsigned int, long unsigned int, int, bool); typedef void (*btf_trace_mark_victim)(void *, int); typedef void (*btf_trace_wake_reaper)(void *, int); typedef void (*btf_trace_start_task_reaping)(void *, int); typedef void (*btf_trace_finish_task_reaping)(void *, int); typedef void (*btf_trace_skip_task_reaping)(void *, int); typedef void (*btf_trace_compact_retry)(void *, int, enum compact_priority, enum compact_result, int, int, bool); enum wb_congested_state { WB_async_congested = 0, WB_sync_congested = 1, }; enum { XA_CHECK_SCHED = 4096, }; enum wb_state { WB_registered = 0, WB_writeback_running = 1, WB_has_dirty_io = 2, WB_start_all = 3, }; struct wb_lock_cookie { bool locked; long unsigned int flags; }; typedef int (*writepage_t)(struct page *, struct writeback_control *, void *); enum page_memcg_data_flags { MEMCG_DATA_OBJCGS = 1, MEMCG_DATA_KMEM = 2, __NR_MEMCG_DATA_FLAGS = 4, }; struct dirty_throttle_control { struct wb_domain *dom; struct dirty_throttle_control *gdtc; struct bdi_writeback *wb; struct fprop_local_percpu *wb_completions; long unsigned int avail; long unsigned int dirty; long unsigned int thresh; long unsigned int bg_thresh; long unsigned int wb_dirty; long unsigned int wb_thresh; long unsigned int wb_bg_thresh; long unsigned int pos_ratio; }; enum migrate_reason { MR_COMPACTION = 0, MR_MEMORY_FAILURE = 1, MR_MEMORY_HOTPLUG = 2, MR_SYSCALL = 3, MR_MEMPOLICY_MBIND = 4, MR_NUMA_MISPLACED = 5, MR_CONTIG_RANGE = 6, MR_LONGTERM_PIN = 7, MR_DEMOTION = 8, MR_TYPES = 9, }; typedef void compound_page_dtor(struct page *); struct trace_event_raw_mm_lru_insertion { struct trace_entry ent; struct folio *folio; long unsigned int pfn; enum lru_list lru; long unsigned int flags; char __data[0]; }; struct trace_event_raw_mm_lru_activate { struct trace_entry ent; struct folio *folio; long unsigned int pfn; char __data[0]; }; struct trace_event_data_offsets_mm_lru_insertion {}; struct trace_event_data_offsets_mm_lru_activate {}; typedef void (*btf_trace_mm_lru_insertion)(void *, struct folio *); typedef void (*btf_trace_mm_lru_activate)(void *, struct folio *); struct lru_rotate { local_lock_t lock; struct pagevec pvec; }; struct lru_pvecs { local_lock_t lock; struct pagevec lru_add; struct pagevec lru_deactivate_file; struct pagevec lru_deactivate; struct pagevec lru_lazyfree; struct pagevec activate_page; }; typedef struct { long unsigned int val; } swp_entry_t; enum lruvec_flags { LRUVEC_CONGESTED = 0, }; enum pgdat_flags { PGDAT_DIRTY = 0, PGDAT_WRITEBACK = 1, PGDAT_RECLAIM_LOCKED = 2, }; enum zone_flags { ZONE_BOOSTED_WATERMARK = 0, ZONE_RECLAIM_ACTIVE = 1, }; struct reclaim_stat { unsigned int nr_dirty; unsigned int nr_unqueued_dirty; unsigned int nr_congested; unsigned int nr_writeback; unsigned int nr_immediate; unsigned int nr_pageout; unsigned int nr_activate[2]; unsigned int nr_ref_keep; unsigned int nr_unmap_fail; unsigned int nr_lazyfree_fail; }; struct mem_cgroup_reclaim_cookie { pg_data_t *pgdat; unsigned int generation; }; enum ttu_flags { TTU_SPLIT_HUGE_PMD = 4, TTU_IGNORE_MLOCK = 8, TTU_SYNC = 16, TTU_IGNORE_HWPOISON = 32, TTU_BATCH_FLUSH = 64, TTU_RMAP_LOCKED = 128, }; typedef struct page *new_page_t(struct page *, long unsigned int); typedef void free_page_t(struct page *, long unsigned int); struct migration_target_control { int nid; nodemask_t *nmask; gfp_t gfp_mask; }; struct trace_event_raw_mm_vmscan_kswapd_sleep { struct trace_entry ent; int nid; char __data[0]; }; struct trace_event_raw_mm_vmscan_kswapd_wake { struct trace_entry ent; int nid; int zid; int order; char __data[0]; }; struct trace_event_raw_mm_vmscan_wakeup_kswapd { struct trace_entry ent; int nid; int zid; int order; gfp_t gfp_flags; char __data[0]; }; struct trace_event_raw_mm_vmscan_direct_reclaim_begin_template { struct trace_entry ent; int order; gfp_t gfp_flags; char __data[0]; }; struct trace_event_raw_mm_vmscan_direct_reclaim_end_template { struct trace_entry ent; long unsigned int nr_reclaimed; char __data[0]; }; struct trace_event_raw_mm_shrink_slab_start { struct trace_entry ent; struct shrinker *shr; void *shrink; int nid; long int nr_objects_to_shrink; gfp_t gfp_flags; long unsigned int cache_items; long long unsigned int delta; long unsigned int total_scan; int priority; char __data[0]; }; struct trace_event_raw_mm_shrink_slab_end { struct trace_entry ent; struct shrinker *shr; int nid; void *shrink; long int unused_scan; long int new_scan; int retval; long int total_scan; char __data[0]; }; struct trace_event_raw_mm_vmscan_lru_isolate { struct trace_entry ent; int highest_zoneidx; int order; long unsigned int nr_requested; long unsigned int nr_scanned; long unsigned int nr_skipped; long unsigned int nr_taken; isolate_mode_t isolate_mode; int lru; char __data[0]; }; struct trace_event_raw_mm_vmscan_writepage { struct trace_entry ent; long unsigned int pfn; int reclaim_flags; char __data[0]; }; struct trace_event_raw_mm_vmscan_lru_shrink_inactive { struct trace_entry ent; int nid; long unsigned int nr_scanned; long unsigned int nr_reclaimed; long unsigned int nr_dirty; long unsigned int nr_writeback; long unsigned int nr_congested; long unsigned int nr_immediate; unsigned int nr_activate0; unsigned int nr_activate1; long unsigned int nr_ref_keep; long unsigned int nr_unmap_fail; int priority; int reclaim_flags; char __data[0]; }; struct trace_event_raw_mm_vmscan_lru_shrink_active { struct trace_entry ent; int nid; long unsigned int nr_taken; long unsigned int nr_active; long unsigned int nr_deactivated; long unsigned int nr_referenced; int priority; int reclaim_flags; char __data[0]; }; struct trace_event_raw_mm_vmscan_node_reclaim_begin { struct trace_entry ent; int nid; int order; gfp_t gfp_flags; char __data[0]; }; struct trace_event_raw_mm_vmscan_throttled { struct trace_entry ent; int nid; int usec_timeout; int usec_delayed; int reason; char __data[0]; }; struct trace_event_data_offsets_mm_vmscan_kswapd_sleep {}; struct trace_event_data_offsets_mm_vmscan_kswapd_wake {}; struct trace_event_data_offsets_mm_vmscan_wakeup_kswapd {}; struct trace_event_data_offsets_mm_vmscan_direct_reclaim_begin_template {}; struct trace_event_data_offsets_mm_vmscan_direct_reclaim_end_template {}; struct trace_event_data_offsets_mm_shrink_slab_start {}; struct trace_event_data_offsets_mm_shrink_slab_end {}; struct trace_event_data_offsets_mm_vmscan_lru_isolate {}; struct trace_event_data_offsets_mm_vmscan_writepage {}; struct trace_event_data_offsets_mm_vmscan_lru_shrink_inactive {}; struct trace_event_data_offsets_mm_vmscan_lru_shrink_active {}; struct trace_event_data_offsets_mm_vmscan_node_reclaim_begin {}; struct trace_event_data_offsets_mm_vmscan_throttled {}; typedef void (*btf_trace_mm_vmscan_kswapd_sleep)(void *, int); typedef void (*btf_trace_mm_vmscan_kswapd_wake)(void *, int, int, int); typedef void (*btf_trace_mm_vmscan_wakeup_kswapd)(void *, int, int, int, gfp_t); typedef void (*btf_trace_mm_vmscan_direct_reclaim_begin)(void *, int, gfp_t); typedef void (*btf_trace_mm_vmscan_memcg_reclaim_begin)(void *, int, gfp_t); typedef void (*btf_trace_mm_vmscan_memcg_softlimit_reclaim_begin)(void *, int, gfp_t); typedef void (*btf_trace_mm_vmscan_direct_reclaim_end)(void *, long unsigned int); typedef void (*btf_trace_mm_vmscan_memcg_reclaim_end)(void *, long unsigned int); typedef void (*btf_trace_mm_vmscan_memcg_softlimit_reclaim_end)(void *, long unsigned int); typedef void (*btf_trace_mm_shrink_slab_start)(void *, struct shrinker *, struct shrink_control *, long int, long unsigned int, long long unsigned int, long unsigned int, int); typedef void (*btf_trace_mm_shrink_slab_end)(void *, struct shrinker *, int, int, long int, long int, long int); typedef void (*btf_trace_mm_vmscan_lru_isolate)(void *, int, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, isolate_mode_t, int); typedef void (*btf_trace_mm_vmscan_writepage)(void *, struct page *); typedef void (*btf_trace_mm_vmscan_lru_shrink_inactive)(void *, int, long unsigned int, long unsigned int, struct reclaim_stat *, int, int); typedef void (*btf_trace_mm_vmscan_lru_shrink_active)(void *, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, int, int); typedef void (*btf_trace_mm_vmscan_node_reclaim_begin)(void *, int, int, gfp_t); typedef void (*btf_trace_mm_vmscan_node_reclaim_end)(void *, long unsigned int); typedef void (*btf_trace_mm_vmscan_throttled)(void *, int, int, int, int); struct scan_control { long unsigned int nr_to_reclaim; nodemask_t *nodemask; struct mem_cgroup *target_mem_cgroup; long unsigned int anon_cost; long unsigned int file_cost; unsigned int may_deactivate: 2; unsigned int force_deactivate: 1; unsigned int skipped_deactivate: 1; unsigned int may_writepage: 1; unsigned int may_unmap: 1; unsigned int may_swap: 1; unsigned int memcg_low_reclaim: 1; unsigned int memcg_low_skipped: 1; unsigned int hibernation_mode: 1; unsigned int compaction_ready: 1; unsigned int cache_trim_mode: 1; unsigned int file_is_tiny: 1; unsigned int no_demotion: 1; s8 order; s8 priority; s8 reclaim_idx; gfp_t gfp_mask; long unsigned int nr_scanned; long unsigned int nr_reclaimed; struct { unsigned int dirty; unsigned int unqueued_dirty; unsigned int congested; unsigned int writeback; unsigned int immediate; unsigned int file_taken; unsigned int taken; } nr; struct reclaim_state reclaim_state; }; typedef enum { PAGE_KEEP = 0, PAGE_ACTIVATE = 1, PAGE_SUCCESS = 2, PAGE_CLEAN = 3, } pageout_t; enum page_references { PAGEREF_RECLAIM = 0, PAGEREF_RECLAIM_CLEAN = 1, PAGEREF_KEEP = 2, PAGEREF_ACTIVATE = 3, }; enum scan_balance { SCAN_EQUAL = 0, SCAN_FRACT = 1, SCAN_ANON = 2, SCAN_FILE = 3, }; struct kstatfs { long int f_type; long int f_bsize; u64 f_blocks; u64 f_bfree; u64 f_bavail; u64 f_files; u64 f_ffree; __kernel_fsid_t f_fsid; long int f_namelen; long int f_frsize; long int f_flags; long int f_spare[4]; }; enum transparent_hugepage_flag { TRANSPARENT_HUGEPAGE_NEVER_DAX = 0, TRANSPARENT_HUGEPAGE_FLAG = 1, TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG = 2, TRANSPARENT_HUGEPAGE_DEFRAG_DIRECT_FLAG = 3, TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_FLAG = 4, TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG = 5, TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG = 6, TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG = 7, TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG = 8, }; struct xattr; typedef int (*initxattrs)(struct inode *, const struct xattr *, void *); struct xattr { const char *name; void *value; size_t value_len; }; struct constant_table { const char *name; int value; }; struct shared_policy {}; struct simple_xattrs { struct list_head head; spinlock_t lock; }; struct simple_xattr { struct list_head list; char *name; size_t size; char value[0]; }; struct shmem_inode_info { spinlock_t lock; unsigned int seals; long unsigned int flags; long unsigned int alloced; long unsigned int swapped; long unsigned int fallocend; struct list_head shrinklist; struct list_head swaplist; struct shared_policy policy; struct simple_xattrs xattrs; atomic_t stop_eviction; struct inode vfs_inode; }; struct shmem_sb_info { long unsigned int max_blocks; struct percpu_counter used_blocks; long unsigned int max_inodes; long unsigned int free_inodes; raw_spinlock_t stat_lock; umode_t mode; unsigned char huge; kuid_t uid; kgid_t gid; bool full_inums; ino_t next_ino; ino_t *ino_batch; struct mempolicy *mpol; spinlock_t shrinklist_lock; struct list_head shrinklist; long unsigned int shrinklist_len; }; enum sgp_type { SGP_READ = 0, SGP_NOALLOC = 1, SGP_CACHE = 2, SGP_WRITE = 3, SGP_FALLOC = 4, }; enum fid_type { FILEID_ROOT = 0, FILEID_INO32_GEN = 1, FILEID_INO32_GEN_PARENT = 2, FILEID_BTRFS_WITHOUT_PARENT = 77, FILEID_BTRFS_WITH_PARENT = 78, FILEID_BTRFS_WITH_PARENT_ROOT = 79, FILEID_UDF_WITHOUT_PARENT = 81, FILEID_UDF_WITH_PARENT = 82, FILEID_NILFS_WITHOUT_PARENT = 97, FILEID_NILFS_WITH_PARENT = 98, FILEID_FAT_WITHOUT_PARENT = 113, FILEID_FAT_WITH_PARENT = 114, FILEID_LUSTRE = 151, FILEID_KERNFS = 254, FILEID_INVALID = 255, }; struct shmem_falloc { wait_queue_head_t *waitq; long unsigned int start; long unsigned int next; long unsigned int nr_falloced; long unsigned int nr_unswapped; }; struct shmem_options { long long unsigned int blocks; long long unsigned int inodes; struct mempolicy *mpol; kuid_t uid; kgid_t gid; umode_t mode; bool full_inums; int huge; int seen; }; enum shmem_param { Opt_gid = 0, Opt_huge = 1, Opt_mode = 2, Opt_mpol = 3, Opt_nr_blocks = 4, Opt_nr_inodes = 5, Opt_size = 6, Opt_uid = 7, Opt_inode32 = 8, Opt_inode64 = 9, }; enum writeback_stat_item { NR_DIRTY_THRESHOLD = 0, NR_DIRTY_BG_THRESHOLD = 1, NR_VM_WRITEBACK_STAT_ITEMS = 2, }; struct contig_page_info { long unsigned int free_pages; long unsigned int free_blocks_total; long unsigned int free_blocks_suitable; }; struct radix_tree_iter { long unsigned int index; long unsigned int next_index; long unsigned int tags; struct xa_node *node; }; enum { RADIX_TREE_ITER_TAG_MASK = 15, RADIX_TREE_ITER_TAGGED = 16, RADIX_TREE_ITER_CONTIG = 32, }; struct pcpu_group_info { int nr_units; long unsigned int base_offset; unsigned int *cpu_map; }; struct pcpu_alloc_info { size_t static_size; size_t reserved_size; size_t dyn_size; size_t unit_size; size_t atom_size; size_t alloc_size; size_t __ai_size; int nr_groups; struct pcpu_group_info groups[0]; }; struct trace_event_raw_percpu_alloc_percpu { struct trace_entry ent; bool reserved; bool is_atomic; size_t size; size_t align; void *base_addr; int off; void *ptr; char __data[0]; }; struct trace_event_raw_percpu_free_percpu { struct trace_entry ent; void *base_addr; int off; void *ptr; char __data[0]; }; struct trace_event_raw_percpu_alloc_percpu_fail { struct trace_entry ent; bool reserved; bool is_atomic; size_t size; size_t align; char __data[0]; }; struct trace_event_raw_percpu_create_chunk { struct trace_entry ent; void *base_addr; char __data[0]; }; struct trace_event_raw_percpu_destroy_chunk { struct trace_entry ent; void *base_addr; char __data[0]; }; struct trace_event_data_offsets_percpu_alloc_percpu {}; struct trace_event_data_offsets_percpu_free_percpu {}; struct trace_event_data_offsets_percpu_alloc_percpu_fail {}; struct trace_event_data_offsets_percpu_create_chunk {}; struct trace_event_data_offsets_percpu_destroy_chunk {}; typedef void (*btf_trace_percpu_alloc_percpu)(void *, bool, bool, size_t, size_t, void *, int, void *); typedef void (*btf_trace_percpu_free_percpu)(void *, void *, int, void *); typedef void (*btf_trace_percpu_alloc_percpu_fail)(void *, bool, bool, size_t, size_t); typedef void (*btf_trace_percpu_create_chunk)(void *, void *); typedef void (*btf_trace_percpu_destroy_chunk)(void *, void *); struct pcpu_block_md { int scan_hint; int scan_hint_start; int contig_hint; int contig_hint_start; int left_free; int right_free; int first_free; int nr_bits; }; struct pcpu_chunk { struct list_head list; int free_bytes; struct pcpu_block_md chunk_md; void *base_addr; long unsigned int *alloc_map; long unsigned int *bound_map; struct pcpu_block_md *md_blocks; void *data; bool immutable; bool isolated; int start_offset; int end_offset; struct obj_cgroup **obj_cgroups; int nr_pages; int nr_populated; int nr_empty_pop_pages; long unsigned int populated[0]; }; struct trace_event_raw_kmem_alloc { struct trace_entry ent; long unsigned int call_site; const void *ptr; size_t bytes_req; size_t bytes_alloc; gfp_t gfp_flags; char __data[0]; }; struct trace_event_raw_kmem_alloc_node { struct trace_entry ent; long unsigned int call_site; const void *ptr; size_t bytes_req; size_t bytes_alloc; gfp_t gfp_flags; int node; char __data[0]; }; struct trace_event_raw_kfree { struct trace_entry ent; long unsigned int call_site; const void *ptr; char __data[0]; }; struct trace_event_raw_kmem_cache_free { struct trace_entry ent; long unsigned int call_site; const void *ptr; u32 __data_loc_name; char __data[0]; }; struct trace_event_raw_mm_page_free { struct trace_entry ent; long unsigned int pfn; unsigned int order; char __data[0]; }; struct trace_event_raw_mm_page_free_batched { struct trace_entry ent; long unsigned int pfn; char __data[0]; }; struct trace_event_raw_mm_page_alloc { struct trace_entry ent; long unsigned int pfn; unsigned int order; gfp_t gfp_flags; int migratetype; char __data[0]; }; struct trace_event_raw_mm_page { struct trace_entry ent; long unsigned int pfn; unsigned int order; int migratetype; char __data[0]; }; struct trace_event_raw_mm_page_pcpu_drain { struct trace_entry ent; long unsigned int pfn; unsigned int order; int migratetype; char __data[0]; }; struct trace_event_raw_mm_page_alloc_extfrag { struct trace_entry ent; long unsigned int pfn; int alloc_order; int fallback_order; int alloc_migratetype; int fallback_migratetype; int change_ownership; char __data[0]; }; struct trace_event_raw_rss_stat { struct trace_entry ent; unsigned int mm_id; unsigned int curr; int member; long int size; char __data[0]; }; struct trace_event_data_offsets_kmem_alloc {}; struct trace_event_data_offsets_kmem_alloc_node {}; struct trace_event_data_offsets_kfree {}; struct trace_event_data_offsets_kmem_cache_free { u32 name; }; struct trace_event_data_offsets_mm_page_free {}; struct trace_event_data_offsets_mm_page_free_batched {}; struct trace_event_data_offsets_mm_page_alloc {}; struct trace_event_data_offsets_mm_page {}; struct trace_event_data_offsets_mm_page_pcpu_drain {}; struct trace_event_data_offsets_mm_page_alloc_extfrag {}; struct trace_event_data_offsets_rss_stat {}; typedef void (*btf_trace_kmalloc)(void *, long unsigned int, const void *, size_t, size_t, gfp_t); typedef void (*btf_trace_kmem_cache_alloc)(void *, long unsigned int, const void *, size_t, size_t, gfp_t); typedef void (*btf_trace_kmalloc_node)(void *, long unsigned int, const void *, size_t, size_t, gfp_t, int); typedef void (*btf_trace_kmem_cache_alloc_node)(void *, long unsigned int, const void *, size_t, size_t, gfp_t, int); typedef void (*btf_trace_kfree)(void *, long unsigned int, const void *); typedef void (*btf_trace_kmem_cache_free)(void *, long unsigned int, const void *, const char *); typedef void (*btf_trace_mm_page_free)(void *, struct page *, unsigned int); typedef void (*btf_trace_mm_page_free_batched)(void *, struct page *); typedef void (*btf_trace_mm_page_alloc)(void *, struct page *, unsigned int, gfp_t, int); typedef void (*btf_trace_mm_page_alloc_zone_locked)(void *, struct page *, unsigned int, int); typedef void (*btf_trace_mm_page_pcpu_drain)(void *, struct page *, unsigned int, int); typedef void (*btf_trace_mm_page_alloc_extfrag)(void *, struct page *, int, int, int, int); typedef void (*btf_trace_rss_stat)(void *, struct mm_struct *, int, long int); enum slab_state { DOWN = 0, PARTIAL = 1, PARTIAL_NODE = 2, UP = 3, FULL = 4, }; struct kmalloc_info_struct { const char *name[3]; unsigned int size; }; struct slabinfo { long unsigned int active_objs; long unsigned int num_objs; long unsigned int active_slabs; long unsigned int num_slabs; long unsigned int shared_avail; unsigned int limit; unsigned int batchcount; unsigned int shared; unsigned int objects_per_slab; unsigned int cache_order; }; struct kmem_obj_info { void *kp_ptr; struct page *kp_page; void *kp_objp; long unsigned int kp_data_offset; struct kmem_cache *kp_slab_cache; void *kp_ret; void *kp_stack[16]; void *kp_free_stack[16]; }; enum pageblock_bits { PB_migrate = 0, PB_migrate_end = 2, PB_migrate_skip = 3, NR_PAGEBLOCK_BITS = 4, }; struct alloc_context { struct zonelist *zonelist; nodemask_t *nodemask; struct zoneref *preferred_zoneref; int migratetype; enum zone_type highest_zoneidx; bool spread_dirty_pages; }; struct trace_event_raw_mm_compaction_isolate_template { struct trace_entry ent; long unsigned int start_pfn; long unsigned int end_pfn; long unsigned int nr_scanned; long unsigned int nr_taken; char __data[0]; }; struct trace_event_raw_mm_compaction_migratepages { struct trace_entry ent; long unsigned int nr_migrated; long unsigned int nr_failed; char __data[0]; }; struct trace_event_raw_mm_compaction_begin { struct trace_entry ent; long unsigned int zone_start; long unsigned int migrate_pfn; long unsigned int free_pfn; long unsigned int zone_end; bool sync; char __data[0]; }; struct trace_event_raw_mm_compaction_end { struct trace_entry ent; long unsigned int zone_start; long unsigned int migrate_pfn; long unsigned int free_pfn; long unsigned int zone_end; bool sync; int status; char __data[0]; }; struct trace_event_raw_mm_compaction_try_to_compact_pages { struct trace_entry ent; int order; gfp_t gfp_mask; int prio; char __data[0]; }; struct trace_event_raw_mm_compaction_suitable_template { struct trace_entry ent; int nid; enum zone_type idx; int order; int ret; char __data[0]; }; struct trace_event_raw_mm_compaction_defer_template { struct trace_entry ent; int nid; enum zone_type idx; int order; unsigned int considered; unsigned int defer_shift; int order_failed; char __data[0]; }; struct trace_event_raw_mm_compaction_kcompactd_sleep { struct trace_entry ent; int nid; char __data[0]; }; struct trace_event_raw_kcompactd_wake_template { struct trace_entry ent; int nid; int order; enum zone_type highest_zoneidx; char __data[0]; }; struct trace_event_data_offsets_mm_compaction_isolate_template {}; struct trace_event_data_offsets_mm_compaction_migratepages {}; struct trace_event_data_offsets_mm_compaction_begin {}; struct trace_event_data_offsets_mm_compaction_end {}; struct trace_event_data_offsets_mm_compaction_try_to_compact_pages {}; struct trace_event_data_offsets_mm_compaction_suitable_template {}; struct trace_event_data_offsets_mm_compaction_defer_template {}; struct trace_event_data_offsets_mm_compaction_kcompactd_sleep {}; struct trace_event_data_offsets_kcompactd_wake_template {}; typedef void (*btf_trace_mm_compaction_isolate_migratepages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int); typedef void (*btf_trace_mm_compaction_isolate_freepages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int); typedef void (*btf_trace_mm_compaction_migratepages)(void *, long unsigned int, int, struct list_head *); typedef void (*btf_trace_mm_compaction_begin)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, bool); typedef void (*btf_trace_mm_compaction_end)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, bool, int); typedef void (*btf_trace_mm_compaction_try_to_compact_pages)(void *, int, gfp_t, int); typedef void (*btf_trace_mm_compaction_finished)(void *, struct zone *, int, int); typedef void (*btf_trace_mm_compaction_suitable)(void *, struct zone *, int, int); typedef void (*btf_trace_mm_compaction_deferred)(void *, struct zone *, int); typedef void (*btf_trace_mm_compaction_defer_compaction)(void *, struct zone *, int); typedef void (*btf_trace_mm_compaction_defer_reset)(void *, struct zone *, int); typedef void (*btf_trace_mm_compaction_kcompactd_sleep)(void *, int); typedef void (*btf_trace_mm_compaction_wakeup_kcompactd)(void *, int, int, enum zone_type); typedef void (*btf_trace_mm_compaction_kcompactd_wake)(void *, int, int, enum zone_type); typedef enum { ISOLATE_ABORT = 0, ISOLATE_NONE = 1, ISOLATE_SUCCESS = 2, } isolate_migrate_t; struct anon_vma_chain { struct vm_area_struct *vma; struct anon_vma *anon_vma; struct list_head same_vma; struct rb_node rb; long unsigned int rb_subtree_last; }; enum lru_status { LRU_REMOVED = 0, LRU_REMOVED_RETRY = 1, LRU_ROTATE = 2, LRU_SKIP = 3, LRU_RETRY = 4, }; typedef enum lru_status (*list_lru_walk_cb)(struct list_head *, struct list_lru_one *, spinlock_t *, void *); typedef struct { long unsigned int pd; } hugepd_t; struct follow_page_context { struct dev_pagemap *pgmap; unsigned int page_mask; }; struct trace_event_raw_mmap_lock { struct trace_entry ent; struct mm_struct *mm; u32 __data_loc_memcg_path; bool write; char __data[0]; }; struct trace_event_raw_mmap_lock_acquire_returned { struct trace_entry ent; struct mm_struct *mm; u32 __data_loc_memcg_path; bool write; bool success; char __data[0]; }; struct trace_event_data_offsets_mmap_lock { u32 memcg_path; }; struct trace_event_data_offsets_mmap_lock_acquire_returned { u32 memcg_path; }; typedef void (*btf_trace_mmap_lock_start_locking)(void *, struct mm_struct *, const char *, bool); typedef void (*btf_trace_mmap_lock_released)(void *, struct mm_struct *, const char *, bool); typedef void (*btf_trace_mmap_lock_acquire_returned)(void *, struct mm_struct *, const char *, bool, bool); struct memcg_path { local_lock_t lock; char *buf; local_t buf_idx; }; typedef unsigned int pgtbl_mod_mask; typedef int (*pte_fn_t)(pte_t *, long unsigned int, void *); enum { SWP_USED = 1, SWP_WRITEOK = 2, SWP_DISCARDABLE = 4, SWP_DISCARDING = 8, SWP_SOLIDSTATE = 16, SWP_CONTINUED = 32, SWP_BLKDEV = 64, SWP_ACTIVATED = 128, SWP_FS_OPS = 256, SWP_AREA_DISCARD = 512, SWP_PAGE_DISCARD = 1024, SWP_STABLE_WRITES = 2048, SWP_SYNCHRONOUS_IO = 4096, SWP_SCANNING = 16384, }; struct copy_subpage_arg { struct page *dst; struct page *src; struct vm_area_struct *vma; }; struct mm_walk; struct mm_walk_ops { int (*pgd_entry)(pgd_t *, long unsigned int, long unsigned int, struct mm_walk *); int (*p4d_entry)(p4d_t *, long unsigned int, long unsigned int, struct mm_walk *); int (*pud_entry)(pud_t *, long unsigned int, long unsigned int, struct mm_walk *); int (*pmd_entry)(pmd_t *, long unsigned int, long unsigned int, struct mm_walk *); int (*pte_entry)(pte_t *, long unsigned int, long unsigned int, struct mm_walk *); int (*pte_hole)(long unsigned int, long unsigned int, int, struct mm_walk *); int (*hugetlb_entry)(pte_t *, long unsigned int, long unsigned int, long unsigned int, struct mm_walk *); int (*test_walk)(long unsigned int, long unsigned int, struct mm_walk *); int (*pre_vma)(long unsigned int, long unsigned int, struct mm_walk *); void (*post_vma)(struct mm_walk *); }; enum page_walk_action { ACTION_SUBTREE = 0, ACTION_CONTINUE = 1, ACTION_AGAIN = 2, }; struct mm_walk { const struct mm_walk_ops *ops; struct mm_struct *mm; pgd_t *pgd; struct vm_area_struct *vma; enum page_walk_action action; bool no_vma; void *private; }; enum { HUGETLB_SHMFS_INODE = 1, HUGETLB_ANONHUGE_INODE = 2, }; struct trace_event_raw_vm_unmapped_area { struct trace_entry ent; long unsigned int addr; long unsigned int total_vm; long unsigned int flags; long unsigned int length; long unsigned int low_limit; long unsigned int high_limit; long unsigned int align_mask; long unsigned int align_offset; char __data[0]; }; struct trace_event_data_offsets_vm_unmapped_area {}; typedef void (*btf_trace_vm_unmapped_area)(void *, long unsigned int, struct vm_unmapped_area_info *); enum pgt_entry { NORMAL_PMD = 0, HPAGE_PMD = 1, NORMAL_PUD = 2, HPAGE_PUD = 3, }; struct rmap_walk_control { void *arg; bool (*rmap_one)(struct page *, struct vm_area_struct *, long unsigned int, void *); int (*done)(struct page *); struct anon_vma * (*anon_lock)(struct page *); bool (*invalid_vma)(struct vm_area_struct *, void *); }; struct page_referenced_arg { int mapcount; int referenced; long unsigned int vm_flags; struct mem_cgroup *memcg; }; struct vmap_area { long unsigned int va_start; long unsigned int va_end; struct rb_node rb_node; struct list_head list; union { long unsigned int subtree_max_size; struct vm_struct *vm; }; }; struct vfree_deferred { struct llist_head list; struct work_struct wq; }; enum fit_type { NOTHING_FIT = 0, FL_FIT_TYPE = 1, LE_FIT_TYPE = 2, RE_FIT_TYPE = 3, NE_FIT_TYPE = 4, }; struct vmap_block_queue { spinlock_t lock; struct list_head free; }; struct vmap_block { spinlock_t lock; struct vmap_area *va; long unsigned int free; long unsigned int dirty; long unsigned int dirty_min; long unsigned int dirty_max; struct list_head free_list; struct callback_head callback_head; struct list_head purge; }; struct va_format { const char *fmt; va_list *va; }; struct page_frag_cache { void *va; __u16 offset; __u16 size; unsigned int pagecnt_bias; bool pfmemalloc; }; enum meminit_context { MEMINIT_EARLY = 0, MEMINIT_HOTPLUG = 1, }; enum mminit_level { MMINIT_WARNING = 0, MMINIT_VERIFY = 1, MMINIT_TRACE = 2, }; typedef int fpi_t; struct pagesets { local_lock_t lock; }; struct pcpu_drain { struct zone *zone; struct work_struct work; }; struct madvise_walk_private { struct mmu_gather *tlb; bool pageout; }; struct dma_pool { struct list_head page_list; spinlock_t lock; size_t size; struct device *dev; size_t allocation; size_t boundary; char name[32]; struct list_head pools; }; struct dma_page { struct list_head page_list; void *vaddr; dma_addr_t dma; unsigned int in_use; unsigned int offset; }; struct vmemmap_remap_walk { void (*remap_pte)(pte_t *, long unsigned int, struct vmemmap_remap_walk *); long unsigned int nr_walked; struct page *reuse_page; long unsigned int reuse_addr; struct list_head *vmemmap_pages; }; enum stat_item { ALLOC_FASTPATH = 0, ALLOC_SLOWPATH = 1, FREE_FASTPATH = 2, FREE_SLOWPATH = 3, FREE_FROZEN = 4, FREE_ADD_PARTIAL = 5, FREE_REMOVE_PARTIAL = 6, ALLOC_FROM_PARTIAL = 7, ALLOC_SLAB = 8, ALLOC_REFILL = 9, ALLOC_NODE_MISMATCH = 10, FREE_SLAB = 11, CPUSLAB_FLUSH = 12, DEACTIVATE_FULL = 13, DEACTIVATE_EMPTY = 14, DEACTIVATE_TO_HEAD = 15, DEACTIVATE_TO_TAIL = 16, DEACTIVATE_REMOTE_FREES = 17, DEACTIVATE_BYPASS = 18, ORDER_FALLBACK = 19, CMPXCHG_DOUBLE_CPU_FAIL = 20, CMPXCHG_DOUBLE_FAIL = 21, CPU_PARTIAL_ALLOC = 22, CPU_PARTIAL_FREE = 23, CPU_PARTIAL_NODE = 24, CPU_PARTIAL_DRAIN = 25, NR_SLUB_STAT_ITEMS = 26, }; struct track { long unsigned int addr; long unsigned int addrs[16]; int cpu; int pid; long unsigned int when; }; enum track_item { TRACK_ALLOC = 0, TRACK_FREE = 1, }; struct slub_flush_work { struct work_struct work; struct kmem_cache *s; bool skip; }; struct detached_freelist { struct page *page; void *tail; void *freelist; int cnt; struct kmem_cache *s; }; struct location { long unsigned int count; long unsigned int addr; long long int sum_time; long int min_time; long int max_time; long int min_pid; long int max_pid; long unsigned int cpus[1]; nodemask_t nodes; }; struct loc_track { long unsigned int max; long unsigned int count; struct location *loc; }; enum slab_stat_type { SL_ALL = 0, SL_PARTIAL = 1, SL_CPU = 2, SL_OBJECTS = 3, SL_TOTAL = 4, }; struct slab_attribute { struct attribute attr; ssize_t (*show)(struct kmem_cache *, char *); ssize_t (*store)(struct kmem_cache *, const char *, size_t); }; struct saved_alias { struct kmem_cache *s; const char *name; struct saved_alias *next; }; enum slab_modes { M_NONE = 0, M_PARTIAL = 1, M_FULL = 2, M_FREE = 3, }; struct buffer_head; typedef void bh_end_io_t(struct buffer_head *, int); struct buffer_head { long unsigned int b_state; struct buffer_head *b_this_page; struct page *b_page; sector_t b_blocknr; size_t b_size; char *b_data; struct block_device *b_bdev; bh_end_io_t *b_end_io; void *b_private; struct list_head b_assoc_buffers; struct address_space *b_assoc_map; atomic_t b_count; spinlock_t b_uptodate_lock; }; enum bh_state_bits { BH_Uptodate = 0, BH_Dirty = 1, BH_Lock = 2, BH_Req = 3, BH_Mapped = 4, BH_New = 5, BH_Async_Read = 6, BH_Async_Write = 7, BH_Delay = 8, BH_Boundary = 9, BH_Write_EIO = 10, BH_Unwritten = 11, BH_Quiet = 12, BH_Meta = 13, BH_Prio = 14, BH_Defer_Completion = 15, BH_PrivateStart = 16, }; struct memory_notify { long unsigned int start_pfn; long unsigned int nr_pages; int status_change_nid_normal; int status_change_nid; }; struct trace_event_raw_mm_migrate_pages { struct trace_entry ent; long unsigned int succeeded; long unsigned int failed; long unsigned int thp_succeeded; long unsigned int thp_failed; long unsigned int thp_split; enum migrate_mode mode; int reason; char __data[0]; }; struct trace_event_raw_mm_migrate_pages_start { struct trace_entry ent; enum migrate_mode mode; int reason; char __data[0]; }; struct trace_event_data_offsets_mm_migrate_pages {}; struct trace_event_data_offsets_mm_migrate_pages_start {}; typedef void (*btf_trace_mm_migrate_pages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, enum migrate_mode, int); typedef void (*btf_trace_mm_migrate_pages_start)(void *, enum migrate_mode, int); struct hugepage_subpool; enum scan_result { SCAN_FAIL = 0, SCAN_SUCCEED = 1, SCAN_PMD_NULL = 2, SCAN_EXCEED_NONE_PTE = 3, SCAN_EXCEED_SWAP_PTE = 4, SCAN_EXCEED_SHARED_PTE = 5, SCAN_PTE_NON_PRESENT = 6, SCAN_PTE_UFFD_WP = 7, SCAN_PAGE_RO = 8, SCAN_LACK_REFERENCED_PAGE = 9, SCAN_PAGE_NULL = 10, SCAN_SCAN_ABORT = 11, SCAN_PAGE_COUNT = 12, SCAN_PAGE_LRU = 13, SCAN_PAGE_LOCK = 14, SCAN_PAGE_ANON = 15, SCAN_PAGE_COMPOUND = 16, SCAN_ANY_PROCESS = 17, SCAN_VMA_NULL = 18, SCAN_VMA_CHECK = 19, SCAN_ADDRESS_RANGE = 20, SCAN_SWAP_CACHE_PAGE = 21, SCAN_DEL_PAGE_LRU = 22, SCAN_ALLOC_HUGE_PAGE_FAIL = 23, SCAN_CGROUP_CHARGE_FAIL = 24, SCAN_TRUNCATED = 25, SCAN_PAGE_HAS_PRIVATE = 26, }; struct trace_event_raw_mm_khugepaged_scan_pmd { struct trace_entry ent; struct mm_struct *mm; long unsigned int pfn; bool writable; int referenced; int none_or_zero; int status; int unmapped; char __data[0]; }; struct trace_event_raw_mm_collapse_huge_page { struct trace_entry ent; struct mm_struct *mm; int isolated; int status; char __data[0]; }; struct trace_event_raw_mm_collapse_huge_page_isolate { struct trace_entry ent; long unsigned int pfn; int none_or_zero; int referenced; bool writable; int status; char __data[0]; }; struct trace_event_raw_mm_collapse_huge_page_swapin { struct trace_entry ent; struct mm_struct *mm; int swapped_in; int referenced; int ret; char __data[0]; }; struct trace_event_data_offsets_mm_khugepaged_scan_pmd {}; struct trace_event_data_offsets_mm_collapse_huge_page {}; struct trace_event_data_offsets_mm_collapse_huge_page_isolate {}; struct trace_event_data_offsets_mm_collapse_huge_page_swapin {}; typedef void (*btf_trace_mm_khugepaged_scan_pmd)(void *, struct mm_struct *, struct page *, bool, int, int, int, int); typedef void (*btf_trace_mm_collapse_huge_page)(void *, struct mm_struct *, int, int); typedef void (*btf_trace_mm_collapse_huge_page_isolate)(void *, struct page *, int, int, bool, int); typedef void (*btf_trace_mm_collapse_huge_page_swapin)(void *, struct mm_struct *, int, int, int); struct mm_slot { struct hlist_node hash; struct list_head mm_node; struct mm_struct *mm; int nr_pte_mapped_thp; long unsigned int pte_mapped_thp[8]; }; struct khugepaged_scan { struct list_head mm_head; struct mm_slot *mm_slot; long unsigned int address; }; struct mem_cgroup_tree_per_node { struct rb_root rb_root; struct rb_node *rb_rightmost; spinlock_t lock; }; struct mem_cgroup_tree { struct mem_cgroup_tree_per_node *rb_tree_per_node[1]; }; struct mem_cgroup_eventfd_list { struct list_head list; struct eventfd_ctx *eventfd; }; struct mem_cgroup_event { struct mem_cgroup *memcg; struct eventfd_ctx *eventfd; struct list_head list; int (*register_event)(struct mem_cgroup *, struct eventfd_ctx *, const char *); void (*unregister_event)(struct mem_cgroup *, struct eventfd_ctx *); poll_table pt; wait_queue_head_t *wqh; wait_queue_entry_t wait; struct work_struct remove; }; struct move_charge_struct { spinlock_t lock; struct mm_struct *mm; struct mem_cgroup *from; struct mem_cgroup *to; long unsigned int flags; long unsigned int precharge; long unsigned int moved_charge; long unsigned int moved_swap; struct task_struct *moving_task; wait_queue_head_t waitq; }; enum res_type { _MEM = 0, _MEMSWAP = 1, _OOM_TYPE = 2, _KMEM = 3, _TCP = 4, }; struct memory_stat { const char *name; unsigned int idx; }; struct oom_wait_info { struct mem_cgroup *memcg; wait_queue_entry_t wait; }; enum oom_status { OOM_SUCCESS = 0, OOM_FAILED = 1, OOM_ASYNC = 2, OOM_SKIPPED = 3, }; struct obj_stock { struct obj_cgroup *cached_objcg; struct pglist_data *cached_pgdat; unsigned int nr_bytes; int nr_slab_reclaimable_b; int nr_slab_unreclaimable_b; }; struct memcg_stock_pcp { struct mem_cgroup *cached; unsigned int nr_pages; struct obj_stock task_obj; struct obj_stock irq_obj; struct work_struct work; long unsigned int flags; }; enum { RES_USAGE = 0, RES_LIMIT = 1, RES_MAX_USAGE = 2, RES_FAILCNT = 3, RES_SOFT_LIMIT = 4, }; union mc_target { struct page *page; swp_entry_t ent; }; enum mc_target_type { MC_TARGET_NONE = 0, MC_TARGET_PAGE = 1, MC_TARGET_SWAP = 2, MC_TARGET_DEVICE = 3, }; struct uncharge_gather { struct mem_cgroup *memcg; long unsigned int nr_memory; long unsigned int pgpgout; long unsigned int nr_kmem; int nid; }; enum vmpressure_levels { VMPRESSURE_LOW = 0, VMPRESSURE_MEDIUM = 1, VMPRESSURE_CRITICAL = 2, VMPRESSURE_NUM_LEVELS = 3, }; enum vmpressure_modes { VMPRESSURE_NO_PASSTHROUGH = 0, VMPRESSURE_HIERARCHY = 1, VMPRESSURE_LOCAL = 2, VMPRESSURE_NUM_MODES = 3, }; struct vmpressure_event { struct eventfd_ctx *efd; enum vmpressure_levels level; enum vmpressure_modes mode; struct list_head node; }; struct open_how { __u64 flags; __u64 mode; __u64 resolve; }; enum fsnotify_data_type { FSNOTIFY_EVENT_NONE = 0, FSNOTIFY_EVENT_PATH = 1, FSNOTIFY_EVENT_INODE = 2, FSNOTIFY_EVENT_DENTRY = 3, FSNOTIFY_EVENT_ERROR = 4, }; enum hash_algo { HASH_ALGO_MD4 = 0, HASH_ALGO_MD5 = 1, HASH_ALGO_SHA1 = 2, HASH_ALGO_RIPE_MD_160 = 3, HASH_ALGO_SHA256 = 4, HASH_ALGO_SHA384 = 5, HASH_ALGO_SHA512 = 6, HASH_ALGO_SHA224 = 7, HASH_ALGO_RIPE_MD_128 = 8, HASH_ALGO_RIPE_MD_256 = 9, HASH_ALGO_RIPE_MD_320 = 10, HASH_ALGO_WP_256 = 11, HASH_ALGO_WP_384 = 12, HASH_ALGO_WP_512 = 13, HASH_ALGO_TGR_128 = 14, HASH_ALGO_TGR_160 = 15, HASH_ALGO_TGR_192 = 16, HASH_ALGO_SM3_256 = 17, HASH_ALGO_STREEBOG_256 = 18, HASH_ALGO_STREEBOG_512 = 19, HASH_ALGO__LAST = 20, }; struct open_flags { int open_flag; umode_t mode; int acc_mode; int intent; int lookup_flags; }; typedef __kernel_long_t __kernel_off_t; typedef __kernel_off_t off_t; typedef __kernel_rwf_t rwf_t; enum vfs_get_super_keying { vfs_get_single_super = 0, vfs_get_single_reconf_super = 1, vfs_get_keyed_super = 2, vfs_get_independent_super = 3, }; typedef struct kobject *kobj_probe_t(dev_t, int *, void *); struct kobj_map; struct char_device_struct { struct char_device_struct *next; unsigned int major; unsigned int baseminor; int minorct; char name[64]; struct cdev *cdev; }; struct stat { __kernel_ulong_t st_dev; __kernel_ulong_t st_ino; __kernel_ulong_t st_nlink; unsigned int st_mode; unsigned int st_uid; unsigned int st_gid; unsigned int __pad0; __kernel_ulong_t st_rdev; __kernel_long_t st_size; __kernel_long_t st_blksize; __kernel_long_t st_blocks; __kernel_ulong_t st_atime; __kernel_ulong_t st_atime_nsec; __kernel_ulong_t st_mtime; __kernel_ulong_t st_mtime_nsec; __kernel_ulong_t st_ctime; __kernel_ulong_t st_ctime_nsec; __kernel_long_t __unused[3]; }; struct __old_kernel_stat { short unsigned int st_dev; short unsigned int st_ino; short unsigned int st_mode; short unsigned int st_nlink; short unsigned int st_uid; short unsigned int st_gid; short unsigned int st_rdev; unsigned int st_size; unsigned int st_atime; unsigned int st_mtime; unsigned int st_ctime; }; struct statx_timestamp { __s64 tv_sec; __u32 tv_nsec; __s32 __reserved; }; struct statx { __u32 stx_mask; __u32 stx_blksize; __u64 stx_attributes; __u32 stx_nlink; __u32 stx_uid; __u32 stx_gid; __u16 stx_mode; __u16 __spare0[1]; __u64 stx_ino; __u64 stx_size; __u64 stx_blocks; __u64 stx_attributes_mask; struct statx_timestamp stx_atime; struct statx_timestamp stx_btime; struct statx_timestamp stx_ctime; struct statx_timestamp stx_mtime; __u32 stx_rdev_major; __u32 stx_rdev_minor; __u32 stx_dev_major; __u32 stx_dev_minor; __u64 stx_mnt_id; __u64 __spare2; __u64 __spare3[12]; }; struct mount; struct mnt_namespace { struct ns_common ns; struct mount *root; struct list_head list; spinlock_t ns_lock; struct user_namespace *user_ns; struct ucounts *ucounts; u64 seq; wait_queue_head_t poll; u64 event; unsigned int mounts; unsigned int pending_mounts; }; struct mnt_pcp; struct mountpoint; struct mount { struct hlist_node mnt_hash; struct mount *mnt_parent; struct dentry *mnt_mountpoint; struct vfsmount mnt; union { struct callback_head mnt_rcu; struct llist_node mnt_llist; }; struct mnt_pcp *mnt_pcp; struct list_head mnt_mounts; struct list_head mnt_child; struct list_head mnt_instance; const char *mnt_devname; struct list_head mnt_list; struct list_head mnt_expire; struct list_head mnt_share; struct list_head mnt_slave_list; struct list_head mnt_slave; struct mount *mnt_master; struct mnt_namespace *mnt_ns; struct mountpoint *mnt_mp; union { struct hlist_node mnt_mp_list; struct hlist_node mnt_umount; }; struct list_head mnt_umounting; struct fsnotify_mark_connector *mnt_fsnotify_marks; __u32 mnt_fsnotify_mask; int mnt_id; int mnt_group_id; int mnt_expiry_mark; struct hlist_head mnt_pins; struct hlist_head mnt_stuck_children; }; struct mnt_pcp { int mnt_count; int mnt_writers; }; struct mountpoint { struct hlist_node m_hash; struct dentry *m_dentry; struct hlist_head m_list; int m_count; }; typedef short unsigned int ushort; struct user_arg_ptr { union { const char * const *native; } ptr; }; enum inode_i_mutex_lock_class { I_MUTEX_NORMAL = 0, I_MUTEX_PARENT = 1, I_MUTEX_CHILD = 2, I_MUTEX_XATTR = 3, I_MUTEX_NONDIR2 = 4, I_MUTEX_PARENT2 = 5, }; struct name_snapshot { struct qstr name; unsigned char inline_name[32]; }; struct saved { struct path link; struct delayed_call done; const char *name; unsigned int seq; }; struct nameidata { struct path path; struct qstr last; struct path root; struct inode *inode; unsigned int flags; unsigned int state; unsigned int seq; unsigned int m_seq; unsigned int r_seq; int last_type; unsigned int depth; int total_link_count; struct saved *stack; struct saved internal[2]; struct filename *name; struct nameidata *saved; unsigned int root_seq; int dfd; kuid_t dir_uid; umode_t dir_mode; }; struct renamedata { struct user_namespace *old_mnt_userns; struct inode *old_dir; struct dentry *old_dentry; struct user_namespace *new_mnt_userns; struct inode *new_dir; struct dentry *new_dentry; struct inode **delegated_inode; unsigned int flags; }; enum { LAST_NORM = 0, LAST_ROOT = 1, LAST_DOT = 2, LAST_DOTDOT = 3, }; enum { WALK_TRAILING = 1, WALK_MORE = 2, WALK_NOFOLLOW = 4, }; struct word_at_a_time { const long unsigned int one_bits; const long unsigned int high_bits; }; struct f_owner_ex { int type; __kernel_pid_t pid; }; struct flock { short int l_type; short int l_whence; __kernel_off_t l_start; __kernel_off_t l_len; __kernel_pid_t l_pid; }; struct file_clone_range { __s64 src_fd; __u64 src_offset; __u64 src_length; __u64 dest_offset; }; struct file_dedupe_range_info { __s64 dest_fd; __u64 dest_offset; __u64 bytes_deduped; __s32 status; __u32 reserved; }; struct file_dedupe_range { __u64 src_offset; __u64 src_length; __u16 dest_count; __u16 reserved1; __u32 reserved2; struct file_dedupe_range_info info[0]; }; struct fsxattr { __u32 fsx_xflags; __u32 fsx_extsize; __u32 fsx_nextents; __u32 fsx_projid; __u32 fsx_cowextsize; unsigned char fsx_pad[8]; }; struct fiemap_extent; struct fiemap_extent_info { unsigned int fi_flags; unsigned int fi_extents_mapped; unsigned int fi_extents_max; struct fiemap_extent *fi_extents_start; }; struct fileattr { u32 flags; u32 fsx_xflags; u32 fsx_extsize; u32 fsx_nextents; u32 fsx_projid; u32 fsx_cowextsize; bool flags_valid: 1; bool fsx_valid: 1; }; struct space_resv { __s16 l_type; __s16 l_whence; __s64 l_start; __s64 l_len; __s32 l_sysid; __u32 l_pid; __s32 l_pad[4]; }; struct fiemap_extent { __u64 fe_logical; __u64 fe_physical; __u64 fe_length; __u64 fe_reserved64[2]; __u32 fe_flags; __u32 fe_reserved[3]; }; struct fiemap { __u64 fm_start; __u64 fm_length; __u32 fm_flags; __u32 fm_mapped_extents; __u32 fm_extent_count; __u32 fm_reserved; struct fiemap_extent fm_extents[0]; }; struct linux_dirent64 { u64 d_ino; s64 d_off; short unsigned int d_reclen; unsigned char d_type; char d_name[0]; }; struct old_linux_dirent { long unsigned int d_ino; long unsigned int d_offset; short unsigned int d_namlen; char d_name[1]; }; struct readdir_callback { struct dir_context ctx; struct old_linux_dirent *dirent; int result; }; struct linux_dirent { long unsigned int d_ino; long unsigned int d_off; short unsigned int d_reclen; char d_name[1]; }; struct getdents_callback { struct dir_context ctx; struct linux_dirent *current_dir; int prev_reclen; int count; int error; }; struct getdents_callback64 { struct dir_context ctx; struct linux_dirent64 *current_dir; int prev_reclen; int count; int error; }; typedef struct { long unsigned int fds_bits[16]; } __kernel_fd_set; typedef __kernel_fd_set fd_set; struct old_timeval32 { old_time32_t tv_sec; s32 tv_usec; }; struct poll_table_entry { struct file *filp; __poll_t key; wait_queue_entry_t wait; wait_queue_head_t *wait_address; }; struct poll_table_page; struct poll_wqueues { poll_table pt; struct poll_table_page *table; struct task_struct *polling_task; int triggered; int error; int inline_index; struct poll_table_entry inline_entries[9]; }; struct poll_table_page { struct poll_table_page *next; struct poll_table_entry *entry; struct poll_table_entry entries[0]; }; enum poll_time_type { PT_TIMEVAL = 0, PT_OLD_TIMEVAL = 1, PT_TIMESPEC = 2, PT_OLD_TIMESPEC = 3, }; typedef struct { long unsigned int *in; long unsigned int *out; long unsigned int *ex; long unsigned int *res_in; long unsigned int *res_out; long unsigned int *res_ex; } fd_set_bits; struct sigset_argpack { sigset_t *p; size_t size; }; struct poll_list { struct poll_list *next; int len; struct pollfd entries[0]; }; enum dentry_d_lock_class { DENTRY_D_LOCK_NORMAL = 0, DENTRY_D_LOCK_NESTED = 1, }; struct external_name { union { atomic_t count; struct callback_head head; } u; unsigned char name[0]; }; enum d_walk_ret { D_WALK_CONTINUE = 0, D_WALK_QUIT = 1, D_WALK_NORETRY = 2, D_WALK_SKIP = 3, }; struct check_mount { struct vfsmount *mnt; unsigned int mounted; }; struct select_data { struct dentry *start; union { long int found; struct dentry *victim; }; struct list_head dispose; }; enum file_time_flags { S_ATIME = 1, S_MTIME = 2, S_CTIME = 4, S_VERSION = 8, }; struct mount_attr { __u64 attr_set; __u64 attr_clr; __u64 propagation; __u64 userns_fd; }; struct proc_mounts { struct mnt_namespace *ns; struct path root; int (*show)(struct seq_file *, struct vfsmount *); struct mount cursor; }; struct mount_kattr { unsigned int attr_set; unsigned int attr_clr; unsigned int propagation; unsigned int lookup_flags; bool recurse; struct user_namespace *mnt_userns; }; enum umount_tree_flags { UMOUNT_SYNC = 1, UMOUNT_PROPAGATE = 2, UMOUNT_CONNECTED = 4, }; struct simple_transaction_argresp { ssize_t size; char data[0]; }; struct simple_attr { int (*get)(void *, u64 *); int (*set)(void *, u64); char get_buf[24]; char set_buf[24]; void *data; const char *fmt; struct mutex mutex; }; struct wb_writeback_work { long int nr_pages; struct super_block *sb; enum writeback_sync_modes sync_mode; unsigned int tagged_writepages: 1; unsigned int for_kupdate: 1; unsigned int range_cyclic: 1; unsigned int for_background: 1; unsigned int for_sync: 1; unsigned int auto_free: 1; enum wb_reason reason; struct list_head list; struct wb_completion *done; }; struct trace_event_raw_writeback_folio_template { struct trace_entry ent; char name[32]; ino_t ino; long unsigned int index; char __data[0]; }; struct trace_event_raw_writeback_dirty_inode_template { struct trace_entry ent; char name[32]; ino_t ino; long unsigned int state; long unsigned int flags; char __data[0]; }; struct trace_event_raw_inode_foreign_history { struct trace_entry ent; char name[32]; ino_t ino; ino_t cgroup_ino; unsigned int history; char __data[0]; }; struct trace_event_raw_inode_switch_wbs { struct trace_entry ent; char name[32]; ino_t ino; ino_t old_cgroup_ino; ino_t new_cgroup_ino; char __data[0]; }; struct trace_event_raw_track_foreign_dirty { struct trace_entry ent; char name[32]; u64 bdi_id; ino_t ino; unsigned int memcg_id; ino_t cgroup_ino; ino_t page_cgroup_ino; char __data[0]; }; struct trace_event_raw_flush_foreign { struct trace_entry ent; char name[32]; ino_t cgroup_ino; unsigned int frn_bdi_id; unsigned int frn_memcg_id; char __data[0]; }; struct trace_event_raw_writeback_write_inode_template { struct trace_entry ent; char name[32]; ino_t ino; int sync_mode; ino_t cgroup_ino; char __data[0]; }; struct trace_event_raw_writeback_work_class { struct trace_entry ent; char name[32]; long int nr_pages; dev_t sb_dev; int sync_mode; int for_kupdate; int range_cyclic; int for_background; int reason; ino_t cgroup_ino; char __data[0]; }; struct trace_event_raw_writeback_pages_written { struct trace_entry ent; long int pages; char __data[0]; }; struct trace_event_raw_writeback_class { struct trace_entry ent; char name[32]; ino_t cgroup_ino; char __data[0]; }; struct trace_event_raw_writeback_bdi_register { struct trace_entry ent; char name[32]; char __data[0]; }; struct trace_event_raw_wbc_class { struct trace_entry ent; char name[32]; long int nr_to_write; long int pages_skipped; int sync_mode; int for_kupdate; int for_background; int for_reclaim; int range_cyclic; long int range_start; long int range_end; ino_t cgroup_ino; char __data[0]; }; struct trace_event_raw_writeback_queue_io { struct trace_entry ent; char name[32]; long unsigned int older; long int age; int moved; int reason; ino_t cgroup_ino; char __data[0]; }; struct trace_event_raw_global_dirty_state { struct trace_entry ent; long unsigned int nr_dirty; long unsigned int nr_writeback; long unsigned int background_thresh; long unsigned int dirty_thresh; long unsigned int dirty_limit; long unsigned int nr_dirtied; long unsigned int nr_written; char __data[0]; }; struct trace_event_raw_bdi_dirty_ratelimit { struct trace_entry ent; char bdi[32]; long unsigned int write_bw; long unsigned int avg_write_bw; long unsigned int dirty_rate; long unsigned int dirty_ratelimit; long unsigned int task_ratelimit; long unsigned int balanced_dirty_ratelimit; ino_t cgroup_ino; char __data[0]; }; struct trace_event_raw_balance_dirty_pages { struct trace_entry ent; char bdi[32]; long unsigned int limit; long unsigned int setpoint; long unsigned int dirty; long unsigned int bdi_setpoint; long unsigned int bdi_dirty; long unsigned int dirty_ratelimit; long unsigned int task_ratelimit; unsigned int dirtied; unsigned int dirtied_pause; long unsigned int paused; long int pause; long unsigned int period; long int think; ino_t cgroup_ino; char __data[0]; }; struct trace_event_raw_writeback_sb_inodes_requeue { struct trace_entry ent; char name[32]; ino_t ino; long unsigned int state; long unsigned int dirtied_when; ino_t cgroup_ino; char __data[0]; }; struct trace_event_raw_writeback_congest_waited_template { struct trace_entry ent; unsigned int usec_timeout; unsigned int usec_delayed; char __data[0]; }; struct trace_event_raw_writeback_single_inode_template { struct trace_entry ent; char name[32]; ino_t ino; long unsigned int state; long unsigned int dirtied_when; long unsigned int writeback_index; long int nr_to_write; long unsigned int wrote; ino_t cgroup_ino; char __data[0]; }; struct trace_event_raw_writeback_inode_template { struct trace_entry ent; dev_t dev; ino_t ino; long unsigned int state; __u16 mode; long unsigned int dirtied_when; char __data[0]; }; struct trace_event_data_offsets_writeback_folio_template {}; struct trace_event_data_offsets_writeback_dirty_inode_template {}; struct trace_event_data_offsets_inode_foreign_history {}; struct trace_event_data_offsets_inode_switch_wbs {}; struct trace_event_data_offsets_track_foreign_dirty {}; struct trace_event_data_offsets_flush_foreign {}; struct trace_event_data_offsets_writeback_write_inode_template {}; struct trace_event_data_offsets_writeback_work_class {}; struct trace_event_data_offsets_writeback_pages_written {}; struct trace_event_data_offsets_writeback_class {}; struct trace_event_data_offsets_writeback_bdi_register {}; struct trace_event_data_offsets_wbc_class {}; struct trace_event_data_offsets_writeback_queue_io {}; struct trace_event_data_offsets_global_dirty_state {}; struct trace_event_data_offsets_bdi_dirty_ratelimit {}; struct trace_event_data_offsets_balance_dirty_pages {}; struct trace_event_data_offsets_writeback_sb_inodes_requeue {}; struct trace_event_data_offsets_writeback_congest_waited_template {}; struct trace_event_data_offsets_writeback_single_inode_template {}; struct trace_event_data_offsets_writeback_inode_template {}; typedef void (*btf_trace_writeback_dirty_folio)(void *, struct folio *, struct address_space *); typedef void (*btf_trace_folio_wait_writeback)(void *, struct folio *, struct address_space *); typedef void (*btf_trace_writeback_mark_inode_dirty)(void *, struct inode *, int); typedef void (*btf_trace_writeback_dirty_inode_start)(void *, struct inode *, int); typedef void (*btf_trace_writeback_dirty_inode)(void *, struct inode *, int); typedef void (*btf_trace_inode_foreign_history)(void *, struct inode *, struct writeback_control *, unsigned int); typedef void (*btf_trace_inode_switch_wbs)(void *, struct inode *, struct bdi_writeback *, struct bdi_writeback *); typedef void (*btf_trace_track_foreign_dirty)(void *, struct folio *, struct bdi_writeback *); typedef void (*btf_trace_flush_foreign)(void *, struct bdi_writeback *, unsigned int, unsigned int); typedef void (*btf_trace_writeback_write_inode_start)(void *, struct inode *, struct writeback_control *); typedef void (*btf_trace_writeback_write_inode)(void *, struct inode *, struct writeback_control *); typedef void (*btf_trace_writeback_queue)(void *, struct bdi_writeback *, struct wb_writeback_work *); typedef void (*btf_trace_writeback_exec)(void *, struct bdi_writeback *, struct wb_writeback_work *); typedef void (*btf_trace_writeback_start)(void *, struct bdi_writeback *, struct wb_writeback_work *); typedef void (*btf_trace_writeback_written)(void *, struct bdi_writeback *, struct wb_writeback_work *); typedef void (*btf_trace_writeback_wait)(void *, struct bdi_writeback *, struct wb_writeback_work *); typedef void (*btf_trace_writeback_pages_written)(void *, long int); typedef void (*btf_trace_writeback_wake_background)(void *, struct bdi_writeback *); typedef void (*btf_trace_writeback_bdi_register)(void *, struct backing_dev_info *); typedef void (*btf_trace_wbc_writepage)(void *, struct writeback_control *, struct backing_dev_info *); typedef void (*btf_trace_writeback_queue_io)(void *, struct bdi_writeback *, struct wb_writeback_work *, long unsigned int, int); typedef void (*btf_trace_global_dirty_state)(void *, long unsigned int, long unsigned int); typedef void (*btf_trace_bdi_dirty_ratelimit)(void *, struct bdi_writeback *, long unsigned int, long unsigned int); typedef void (*btf_trace_balance_dirty_pages)(void *, struct bdi_writeback *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long int, long unsigned int); typedef void (*btf_trace_writeback_sb_inodes_requeue)(void *, struct inode *); typedef void (*btf_trace_writeback_congestion_wait)(void *, unsigned int, unsigned int); typedef void (*btf_trace_writeback_single_inode_start)(void *, struct inode *, struct writeback_control *, long unsigned int); typedef void (*btf_trace_writeback_single_inode)(void *, struct inode *, struct writeback_control *, long unsigned int); typedef void (*btf_trace_writeback_lazytime)(void *, struct inode *); typedef void (*btf_trace_writeback_lazytime_iput)(void *, struct inode *); typedef void (*btf_trace_writeback_dirty_inode_enqueue)(void *, struct inode *); typedef void (*btf_trace_sb_mark_inode_writeback)(void *, struct inode *); typedef void (*btf_trace_sb_clear_inode_writeback)(void *, struct inode *); struct inode_switch_wbs_context { struct rcu_work work; struct bdi_writeback *new_wb; struct inode *inodes[0]; }; struct splice_desc { size_t total_len; unsigned int len; unsigned int flags; union { void *userptr; struct file *file; void *data; } u; loff_t pos; loff_t *opos; size_t num_spliced; bool need_wakeup; }; typedef int splice_actor(struct pipe_inode_info *, struct pipe_buffer *, struct splice_desc *); typedef int splice_direct_actor(struct pipe_inode_info *, struct splice_desc *); struct utimbuf { __kernel_old_time_t actime; __kernel_old_time_t modtime; }; struct prepend_buffer { char *buf; int len; }; typedef int __kernel_daddr_t; struct ustat { __kernel_daddr_t f_tfree; long unsigned int f_tinode; char f_fname[6]; char f_fpack[6]; }; struct statfs { __kernel_long_t f_type; __kernel_long_t f_bsize; __kernel_long_t f_blocks; __kernel_long_t f_bfree; __kernel_long_t f_bavail; __kernel_long_t f_files; __kernel_long_t f_ffree; __kernel_fsid_t f_fsid; __kernel_long_t f_namelen; __kernel_long_t f_frsize; __kernel_long_t f_flags; __kernel_long_t f_spare[4]; }; struct statfs64 { __kernel_long_t f_type; __kernel_long_t f_bsize; __u64 f_blocks; __u64 f_bfree; __u64 f_bavail; __u64 f_files; __u64 f_ffree; __kernel_fsid_t f_fsid; __kernel_long_t f_namelen; __kernel_long_t f_frsize; __kernel_long_t f_flags; __kernel_long_t f_spare[4]; }; struct fs_pin { wait_queue_head_t wait; int done; struct hlist_node s_list; struct hlist_node m_list; void (*kill)(struct fs_pin *); }; struct ns_get_path_task_args { const struct proc_ns_operations *ns_ops; struct task_struct *task; }; enum legacy_fs_param { LEGACY_FS_UNSET_PARAMS = 0, LEGACY_FS_MONOLITHIC_PARAMS = 1, LEGACY_FS_INDIVIDUAL_PARAMS = 2, }; struct legacy_fs_context { char *legacy_data; size_t data_size; enum legacy_fs_param param_type; }; enum fsconfig_command { FSCONFIG_SET_FLAG = 0, FSCONFIG_SET_STRING = 1, FSCONFIG_SET_BINARY = 2, FSCONFIG_SET_PATH = 3, FSCONFIG_SET_PATH_EMPTY = 4, FSCONFIG_SET_FD = 5, FSCONFIG_CMD_CREATE = 6, FSCONFIG_CMD_RECONFIGURE = 7, }; typedef int get_block_t(struct inode *, sector_t, struct buffer_head *, int); enum { BIO_NO_PAGE_REF = 0, BIO_CLONED = 1, BIO_BOUNCED = 2, BIO_WORKINGSET = 3, BIO_QUIET = 4, BIO_CHAIN = 5, BIO_REFFED = 6, BIO_THROTTLED = 7, BIO_TRACE_COMPLETION = 8, BIO_CGROUP_ACCT = 9, BIO_TRACKED = 10, BIO_REMAPPED = 11, BIO_ZONE_WRITE_LOCKED = 12, BIO_PERCPU_CACHE = 13, BIO_FLAG_LAST = 14, }; typedef __u32 blk_mq_req_flags_t; struct sbitmap_word { long unsigned int depth; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long unsigned int word; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long unsigned int cleared; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct sbitmap { unsigned int depth; unsigned int shift; unsigned int map_nr; bool round_robin; struct sbitmap_word *map; unsigned int *alloc_hint; }; struct sbq_wait_state { atomic_t wait_cnt; wait_queue_head_t wait; long: 64; long: 64; long: 64; long: 64; }; struct sbitmap_queue { struct sbitmap sb; unsigned int wake_batch; atomic_t wake_index; struct sbq_wait_state *ws; atomic_t ws_active; unsigned int min_shallow_depth; }; typedef __u32 req_flags_t; enum mq_rq_state { MQ_RQ_IDLE = 0, MQ_RQ_IN_FLIGHT = 1, MQ_RQ_COMPLETE = 2, }; typedef void rq_end_io_fn(struct request *, blk_status_t); struct request { struct request_queue *q; struct blk_mq_ctx *mq_ctx; struct blk_mq_hw_ctx *mq_hctx; unsigned int cmd_flags; req_flags_t rq_flags; int tag; int internal_tag; unsigned int timeout; unsigned int __data_len; sector_t __sector; struct bio *bio; struct bio *biotail; union { struct list_head queuelist; struct request *rq_next; }; struct gendisk *rq_disk; struct block_device *part; u64 start_time_ns; u64 io_start_time_ns; short unsigned int stats_sectors; short unsigned int nr_phys_segments; short unsigned int write_hint; short unsigned int ioprio; enum mq_rq_state state; refcount_t ref; long unsigned int deadline; union { struct hlist_node hash; struct llist_node ipi_list; }; union { struct rb_node rb_node; struct bio_vec special_vec; void *completion_data; int error_count; }; union { struct { struct io_cq *icq; void *priv[2]; } elv; struct { unsigned int seq; struct list_head list; rq_end_io_fn *saved_end_io; } flush; }; union { struct __call_single_data csd; u64 fifo_time; }; rq_end_io_fn *end_io; void *end_io_data; }; struct blk_mq_hw_ctx { struct { spinlock_t lock; struct list_head dispatch; long unsigned int state; long: 64; long: 64; long: 64; long: 64; }; struct delayed_work run_work; cpumask_var_t cpumask; int next_cpu; int next_cpu_batch; long unsigned int flags; void *sched_data; struct request_queue *queue; struct blk_flush_queue *fq; void *driver_data; struct sbitmap ctx_map; struct blk_mq_ctx *dispatch_from; unsigned int dispatch_busy; short unsigned int type; short unsigned int nr_ctx; struct blk_mq_ctx **ctxs; spinlock_t dispatch_wait_lock; wait_queue_entry_t dispatch_wait; atomic_t wait_index; struct blk_mq_tags *tags; struct blk_mq_tags *sched_tags; long unsigned int queued; long unsigned int run; unsigned int numa_node; unsigned int queue_num; atomic_t nr_active; struct hlist_node cpuhp_online; struct hlist_node cpuhp_dead; struct kobject kobj; struct dentry *debugfs_dir; struct dentry *sched_debugfs_dir; struct list_head hctx_list; struct srcu_struct srcu[0]; long: 64; long: 64; }; struct blk_mq_tags { unsigned int nr_tags; unsigned int nr_reserved_tags; atomic_t active_queues; struct sbitmap_queue bitmap_tags; struct sbitmap_queue breserved_tags; struct request **rqs; struct request **static_rqs; struct list_head page_list; spinlock_t lock; }; struct blk_mq_queue_map { unsigned int *mq_map; unsigned int nr_queues; unsigned int queue_offset; }; struct blk_mq_tag_set { struct blk_mq_queue_map map[3]; unsigned int nr_maps; const struct blk_mq_ops *ops; unsigned int nr_hw_queues; unsigned int queue_depth; unsigned int reserved_tags; unsigned int cmd_size; int numa_node; unsigned int timeout; unsigned int flags; void *driver_data; struct blk_mq_tags **tags; struct blk_mq_tags *shared_tags; struct mutex tag_list_lock; struct list_head tag_list; }; struct dax_device; struct iomap_page_ops; struct iomap___2 { u64 addr; loff_t offset; u64 length; u16 type; u16 flags; struct block_device *bdev; struct dax_device *dax_dev; void *inline_data; void *private; const struct iomap_page_ops *page_ops; }; struct iomap_page_ops { int (*page_prepare)(struct inode *, loff_t, unsigned int); void (*page_done)(struct inode *, loff_t, unsigned int, struct page *); }; enum hctx_type { HCTX_TYPE_DEFAULT = 0, HCTX_TYPE_READ = 1, HCTX_TYPE_POLL = 2, HCTX_MAX_TYPES = 3, }; struct blk_mq_queue_data { struct request *rq; bool last; }; enum blktrace_act { __BLK_TA_QUEUE = 1, __BLK_TA_BACKMERGE = 2, __BLK_TA_FRONTMERGE = 3, __BLK_TA_GETRQ = 4, __BLK_TA_SLEEPRQ = 5, __BLK_TA_REQUEUE = 6, __BLK_TA_ISSUE = 7, __BLK_TA_COMPLETE = 8, __BLK_TA_PLUG = 9, __BLK_TA_UNPLUG_IO = 10, __BLK_TA_UNPLUG_TIMER = 11, __BLK_TA_INSERT = 12, __BLK_TA_SPLIT = 13, __BLK_TA_BOUNCE = 14, __BLK_TA_REMAP = 15, __BLK_TA_ABORT = 16, __BLK_TA_DRV_DATA = 17, __BLK_TA_CGROUP = 256, }; struct decrypt_bh_ctx { struct work_struct work; struct buffer_head *bh; }; struct bh_lru { struct buffer_head *bhs[16]; }; struct bh_accounting { int nr; int ratelimit; }; typedef int dio_iodone_t(struct kiocb *, loff_t, ssize_t, void *); typedef void dio_submit_t(struct bio *, struct inode *, loff_t); enum { DIO_LOCKING = 1, DIO_SKIP_HOLES = 2, }; struct dio_submit { struct bio *bio; unsigned int blkbits; unsigned int blkfactor; unsigned int start_zero_done; int pages_in_io; sector_t block_in_file; unsigned int blocks_available; int reap_counter; sector_t final_block_in_request; int boundary; get_block_t *get_block; dio_submit_t *submit_io; loff_t logical_offset_in_bio; sector_t final_block_in_bio; sector_t next_block_for_io; struct page *cur_page; unsigned int cur_page_offset; unsigned int cur_page_len; sector_t cur_page_block; loff_t cur_page_fs_offset; struct iov_iter *iter; unsigned int head; unsigned int tail; size_t from; size_t to; }; struct dio { int flags; int op; int op_flags; struct gendisk *bio_disk; struct inode *inode; loff_t i_size; dio_iodone_t *end_io; void *private; spinlock_t bio_lock; int page_errors; int is_async; bool defer_completion; bool should_dirty; int io_error; long unsigned int refcount; struct bio *bio_list; struct task_struct *waiter; struct kiocb *iocb; ssize_t result; union { struct page *pages[64]; struct work_struct complete_work; }; long: 64; }; struct bvec_iter_all { struct bio_vec bv; int idx; unsigned int done; }; struct mpage_readpage_args { struct bio *bio; struct page *page; unsigned int nr_pages; bool is_readahead; sector_t last_block_in_bio; struct buffer_head map_bh; long unsigned int first_logical_block; get_block_t *get_block; }; struct mpage_data { struct bio *bio; sector_t last_block_in_bio; get_block_t *get_block; unsigned int use_writepage; }; typedef u32 nlink_t; typedef int (*proc_write_t)(struct file *, char *, size_t); struct proc_dir_entry { atomic_t in_use; refcount_t refcnt; struct list_head pde_openers; spinlock_t pde_unload_lock; struct completion *pde_unload_completion; const struct inode_operations *proc_iops; union { const struct proc_ops *proc_ops; const struct file_operations *proc_dir_ops; }; const struct dentry_operations *proc_dops; union { const struct seq_operations *seq_ops; int (*single_show)(struct seq_file *, void *); }; proc_write_t write; void *data; unsigned int state_size; unsigned int low_ino; nlink_t nlink; kuid_t uid; kgid_t gid; loff_t size; struct proc_dir_entry *parent; struct rb_root subdir; struct rb_node subdir_node; char *name; umode_t mode; u8 flags; u8 namelen; char inline_name[0]; }; union proc_op { int (*proc_get_link)(struct dentry *, struct path *); int (*proc_show)(struct seq_file *, struct pid_namespace *, struct pid *, struct task_struct *); const char *lsm; }; struct proc_inode { struct pid *pid; unsigned int fd; union proc_op op; struct proc_dir_entry *pde; struct ctl_table_header *sysctl; struct ctl_table *sysctl_entry; struct hlist_node sibling_inodes; const struct proc_ns_operations *ns_ops; struct inode vfs_inode; }; struct proc_fs_opts { int flag; const char *str; }; struct fsnotify_group; struct fsnotify_iter_info; struct fsnotify_mark; struct fsnotify_event; struct fsnotify_ops { int (*handle_event)(struct fsnotify_group *, u32, const void *, int, struct inode *, const struct qstr *, u32, struct fsnotify_iter_info *); int (*handle_inode_event)(struct fsnotify_mark *, u32, struct inode *, struct inode *, const struct qstr *, u32); void (*free_group_priv)(struct fsnotify_group *); void (*freeing_mark)(struct fsnotify_mark *, struct fsnotify_group *); void (*free_event)(struct fsnotify_group *, struct fsnotify_event *); void (*free_mark)(struct fsnotify_mark *); }; struct inotify_group_private_data { spinlock_t idr_lock; struct idr idr; struct ucounts *ucounts; }; struct fanotify_group_private_data { struct hlist_head *merge_hash; struct list_head access_list; wait_queue_head_t access_waitq; int flags; int f_flags; struct ucounts *ucounts; mempool_t error_events_pool; }; struct fsnotify_group { const struct fsnotify_ops *ops; refcount_t refcnt; spinlock_t notification_lock; struct list_head notification_list; wait_queue_head_t notification_waitq; unsigned int q_len; unsigned int max_events; unsigned int priority; bool shutdown; struct mutex mark_mutex; atomic_t user_waits; struct list_head marks_list; struct fasync_struct *fsn_fa; struct fsnotify_event *overflow_event; struct mem_cgroup *memcg; union { void *private; struct inotify_group_private_data inotify_data; struct fanotify_group_private_data fanotify_data; }; }; struct fsnotify_iter_info { struct fsnotify_mark *marks[4]; unsigned int report_mask; int srcu_idx; }; struct fsnotify_mark { __u32 mask; refcount_t refcnt; struct fsnotify_group *group; struct list_head g_list; spinlock_t lock; struct hlist_node obj_list; struct fsnotify_mark_connector *connector; __u32 ignored_mask; unsigned int flags; }; struct fsnotify_event { struct list_head list; }; struct fs_error_report { int error; struct inode *inode; struct super_block *sb; }; struct file_handle { __u32 handle_bytes; int handle_type; unsigned char f_handle[0]; }; struct inotify_inode_mark { struct fsnotify_mark fsn_mark; int wd; }; struct dnotify_struct { struct dnotify_struct *dn_next; __u32 dn_mask; int dn_fd; struct file *dn_filp; fl_owner_t dn_owner; }; struct dnotify_mark { struct fsnotify_mark fsn_mark; struct dnotify_struct *dn; }; struct inotify_event_info { struct fsnotify_event fse; u32 mask; int wd; u32 sync_cookie; int name_len; char name[0]; }; struct inotify_event { __s32 wd; __u32 mask; __u32 cookie; __u32 len; char name[0]; }; enum { FAN_EVENT_INIT = 0, FAN_EVENT_REPORTED = 1, FAN_EVENT_ANSWERED = 2, FAN_EVENT_CANCELED = 3, }; struct fanotify_fh { u8 type; u8 len; u8 flags; u8 pad; unsigned char buf[0]; }; struct fanotify_info { u8 dir_fh_totlen; u8 file_fh_totlen; u8 name_len; u8 pad; unsigned char buf[0]; }; enum fanotify_event_type { FANOTIFY_EVENT_TYPE_FID = 0, FANOTIFY_EVENT_TYPE_FID_NAME = 1, FANOTIFY_EVENT_TYPE_PATH = 2, FANOTIFY_EVENT_TYPE_PATH_PERM = 3, FANOTIFY_EVENT_TYPE_OVERFLOW = 4, FANOTIFY_EVENT_TYPE_FS_ERROR = 5, __FANOTIFY_EVENT_TYPE_NUM = 6, }; struct fanotify_event { struct fsnotify_event fse; struct hlist_node merge_list; u32 mask; struct { unsigned int type: 3; unsigned int hash: 29; }; struct pid *pid; }; struct fanotify_fid_event { struct fanotify_event fae; __kernel_fsid_t fsid; struct { struct fanotify_fh object_fh; unsigned char _inline_fh_buf[12]; }; }; struct fanotify_name_event { struct fanotify_event fae; __kernel_fsid_t fsid; struct fanotify_info info; }; struct fanotify_error_event { struct fanotify_event fae; s32 error; u32 err_count; __kernel_fsid_t fsid; struct { struct fanotify_fh object_fh; unsigned char _inline_fh_buf[128]; }; }; struct fanotify_path_event { struct fanotify_event fae; struct path path; }; struct fanotify_perm_event { struct fanotify_event fae; struct path path; short unsigned int response; short unsigned int state; int fd; }; struct fanotify_event_metadata { __u32 event_len; __u8 vers; __u8 reserved; __u16 metadata_len; __u64 mask; __s32 fd; __s32 pid; }; struct fanotify_event_info_header { __u8 info_type; __u8 pad; __u16 len; }; struct fanotify_event_info_fid { struct fanotify_event_info_header hdr; __kernel_fsid_t fsid; unsigned char handle[0]; }; struct fanotify_event_info_pidfd { struct fanotify_event_info_header hdr; __s32 pidfd; }; struct fanotify_event_info_error { struct fanotify_event_info_header hdr; __s32 error; __u32 error_count; }; struct fanotify_response { __s32 fd; __u32 response; }; struct epoll_event { __poll_t events; __u64 data; } __attribute__((packed)); struct wake_irq; struct wakeup_source { const char *name; int id; struct list_head entry; spinlock_t lock; struct wake_irq *wakeirq; struct timer_list timer; long unsigned int timer_expires; ktime_t total_time; ktime_t max_time; ktime_t last_time; ktime_t start_prevent_time; ktime_t prevent_sleep_time; long unsigned int event_count; long unsigned int active_count; long unsigned int relax_count; long unsigned int expire_count; long unsigned int wakeup_count; struct device *dev; bool active: 1; bool autosleep_enabled: 1; }; struct epoll_filefd { struct file *file; int fd; } __attribute__((packed)); struct epitem; struct eppoll_entry { struct eppoll_entry *next; struct epitem *base; wait_queue_entry_t wait; wait_queue_head_t *whead; }; struct eventpoll; struct epitem { union { struct rb_node rbn; struct callback_head rcu; }; struct list_head rdllink; struct epitem *next; struct epoll_filefd ffd; struct eppoll_entry *pwqlist; struct eventpoll *ep; struct hlist_node fllink; struct wakeup_source *ws; struct epoll_event event; }; struct eventpoll { struct mutex mtx; wait_queue_head_t wq; wait_queue_head_t poll_wait; struct list_head rdllist; rwlock_t lock; struct rb_root_cached rbr; struct epitem *ovflist; struct wakeup_source *ws; struct user_struct *user; struct file *file; u64 gen; struct hlist_head refs; unsigned int napi_id; }; struct ep_pqueue { poll_table pt; struct epitem *epi; }; struct epitems_head { struct hlist_head epitems; struct epitems_head *next; }; struct signalfd_siginfo { __u32 ssi_signo; __s32 ssi_errno; __s32 ssi_code; __u32 ssi_pid; __u32 ssi_uid; __s32 ssi_fd; __u32 ssi_tid; __u32 ssi_band; __u32 ssi_overrun; __u32 ssi_trapno; __s32 ssi_status; __s32 ssi_int; __u64 ssi_ptr; __u64 ssi_utime; __u64 ssi_stime; __u64 ssi_addr; __u16 ssi_addr_lsb; __u16 __pad2; __s32 ssi_syscall; __u64 ssi_call_addr; __u32 ssi_arch; __u8 __pad[28]; }; struct signalfd_ctx { sigset_t sigmask; }; struct timerfd_ctx { union { struct hrtimer tmr; struct alarm alarm; } t; ktime_t tintv; ktime_t moffs; wait_queue_head_t wqh; u64 ticks; int clockid; short unsigned int expired; short unsigned int settime_flags; struct callback_head rcu; struct list_head clist; spinlock_t cancel_lock; bool might_cancel; }; struct eventfd_ctx___2 { struct kref kref; wait_queue_head_t wqh; __u64 count; unsigned int flags; int id; }; struct kioctx; struct kioctx_table { struct callback_head rcu; unsigned int nr; struct kioctx *table[0]; }; typedef __kernel_ulong_t aio_context_t; enum { IOCB_CMD_PREAD = 0, IOCB_CMD_PWRITE = 1, IOCB_CMD_FSYNC = 2, IOCB_CMD_FDSYNC = 3, IOCB_CMD_POLL = 5, IOCB_CMD_NOOP = 6, IOCB_CMD_PREADV = 7, IOCB_CMD_PWRITEV = 8, }; struct io_event { __u64 data; __u64 obj; __s64 res; __s64 res2; }; struct iocb { __u64 aio_data; __u32 aio_key; __kernel_rwf_t aio_rw_flags; __u16 aio_lio_opcode; __s16 aio_reqprio; __u32 aio_fildes; __u64 aio_buf; __u64 aio_nbytes; __s64 aio_offset; __u64 aio_reserved2; __u32 aio_flags; __u32 aio_resfd; }; typedef int kiocb_cancel_fn(struct kiocb *); struct aio_ring { unsigned int id; unsigned int nr; unsigned int head; unsigned int tail; unsigned int magic; unsigned int compat_features; unsigned int incompat_features; unsigned int header_length; struct io_event io_events[0]; }; struct kioctx_cpu; struct ctx_rq_wait; struct kioctx { struct percpu_ref users; atomic_t dead; struct percpu_ref reqs; long unsigned int user_id; struct kioctx_cpu *cpu; unsigned int req_batch; unsigned int max_reqs; unsigned int nr_events; long unsigned int mmap_base; long unsigned int mmap_size; struct page **ring_pages; long int nr_pages; struct rcu_work free_rwork; struct ctx_rq_wait *rq_wait; long: 64; long: 64; long: 64; struct { atomic_t reqs_available; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct { spinlock_t ctx_lock; struct list_head active_reqs; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct { struct mutex ring_lock; wait_queue_head_t wait; long: 64; }; struct { unsigned int tail; unsigned int completed_events; spinlock_t completion_lock; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct page *internal_pages[8]; struct file *aio_ring_file; unsigned int id; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct kioctx_cpu { unsigned int reqs_available; }; struct ctx_rq_wait { struct completion comp; atomic_t count; }; struct fsync_iocb { struct file *file; struct work_struct work; bool datasync; struct cred *creds; }; struct poll_iocb { struct file *file; struct wait_queue_head *head; __poll_t events; bool done; bool cancelled; struct wait_queue_entry wait; struct work_struct work; }; struct aio_kiocb { union { struct file *ki_filp; struct kiocb rw; struct fsync_iocb fsync; struct poll_iocb poll; }; struct kioctx *ki_ctx; kiocb_cancel_fn *ki_cancel; struct io_event ki_res; struct list_head ki_list; refcount_t ki_refcnt; struct eventfd_ctx *ki_eventfd; }; struct aio_poll_table { struct poll_table_struct pt; struct aio_kiocb *iocb; int error; }; struct __aio_sigset { const sigset_t *sigmask; size_t sigsetsize; }; struct flock64 { short int l_type; short int l_whence; __kernel_loff_t l_start; __kernel_loff_t l_len; __kernel_pid_t l_pid; }; struct trace_event_raw_locks_get_lock_context { struct trace_entry ent; long unsigned int i_ino; dev_t s_dev; unsigned char type; struct file_lock_context *ctx; char __data[0]; }; struct trace_event_raw_filelock_lock { struct trace_entry ent; struct file_lock *fl; long unsigned int i_ino; dev_t s_dev; struct file_lock *fl_blocker; fl_owner_t fl_owner; unsigned int fl_pid; unsigned int fl_flags; unsigned char fl_type; loff_t fl_start; loff_t fl_end; int ret; char __data[0]; }; struct trace_event_raw_filelock_lease { struct trace_entry ent; struct file_lock *fl; long unsigned int i_ino; dev_t s_dev; struct file_lock *fl_blocker; fl_owner_t fl_owner; unsigned int fl_flags; unsigned char fl_type; long unsigned int fl_break_time; long unsigned int fl_downgrade_time; char __data[0]; }; struct trace_event_raw_generic_add_lease { struct trace_entry ent; long unsigned int i_ino; int wcount; int rcount; int icount; dev_t s_dev; fl_owner_t fl_owner; unsigned int fl_flags; unsigned char fl_type; char __data[0]; }; struct trace_event_raw_leases_conflict { struct trace_entry ent; void *lease; void *breaker; unsigned int l_fl_flags; unsigned int b_fl_flags; unsigned char l_fl_type; unsigned char b_fl_type; bool conflict; char __data[0]; }; struct trace_event_data_offsets_locks_get_lock_context {}; struct trace_event_data_offsets_filelock_lock {}; struct trace_event_data_offsets_filelock_lease {}; struct trace_event_data_offsets_generic_add_lease {}; struct trace_event_data_offsets_leases_conflict {}; typedef void (*btf_trace_locks_get_lock_context)(void *, struct inode *, int, struct file_lock_context *); typedef void (*btf_trace_posix_lock_inode)(void *, struct inode *, struct file_lock *, int); typedef void (*btf_trace_fcntl_setlk)(void *, struct inode *, struct file_lock *, int); typedef void (*btf_trace_locks_remove_posix)(void *, struct inode *, struct file_lock *, int); typedef void (*btf_trace_flock_lock_inode)(void *, struct inode *, struct file_lock *, int); typedef void (*btf_trace_break_lease_noblock)(void *, struct inode *, struct file_lock *); typedef void (*btf_trace_break_lease_block)(void *, struct inode *, struct file_lock *); typedef void (*btf_trace_break_lease_unblock)(void *, struct inode *, struct file_lock *); typedef void (*btf_trace_generic_delete_lease)(void *, struct inode *, struct file_lock *); typedef void (*btf_trace_time_out_leases)(void *, struct inode *, struct file_lock *); typedef void (*btf_trace_generic_add_lease)(void *, struct inode *, struct file_lock *); typedef void (*btf_trace_leases_conflict)(void *, bool, struct file_lock *, struct file_lock *); struct file_lock_list_struct { spinlock_t lock; struct hlist_head hlist; }; struct locks_iterator { int li_cpu; loff_t li_pos; }; struct elf64_phdr { Elf64_Word p_type; Elf64_Word p_flags; Elf64_Off p_offset; Elf64_Addr p_vaddr; Elf64_Addr p_paddr; Elf64_Xword p_filesz; Elf64_Xword p_memsz; Elf64_Xword p_align; }; struct elf64_note { Elf64_Word n_namesz; Elf64_Word n_descsz; Elf64_Word n_type; }; struct arch_elf_state {}; struct posix_acl_xattr_entry { __le16 e_tag; __le16 e_perm; __le32 e_id; }; struct posix_acl_xattr_header { __le32 a_version; }; struct core_vma_metadata { long unsigned int start; long unsigned int end; long unsigned int flags; long unsigned int dump_size; }; struct core_name { char *corename; int used; int size; }; struct proc_maps_private { struct inode *inode; struct task_struct *task; struct mm_struct *mm; struct vm_area_struct *tail_vma; }; struct mem_size_stats { long unsigned int resident; long unsigned int shared_clean; long unsigned int shared_dirty; long unsigned int private_clean; long unsigned int private_dirty; long unsigned int referenced; long unsigned int anonymous; long unsigned int lazyfree; long unsigned int anonymous_thp; long unsigned int shmem_thp; long unsigned int file_thp; long unsigned int swap; long unsigned int shared_hugetlb; long unsigned int private_hugetlb; u64 pss; u64 pss_anon; u64 pss_file; u64 pss_shmem; u64 pss_locked; u64 swap_pss; }; enum clear_refs_types { CLEAR_REFS_ALL = 1, CLEAR_REFS_ANON = 2, CLEAR_REFS_MAPPED = 3, CLEAR_REFS_SOFT_DIRTY = 4, CLEAR_REFS_MM_HIWATER_RSS = 5, CLEAR_REFS_LAST = 6, }; struct clear_refs_private { enum clear_refs_types type; }; typedef struct { u64 pme; } pagemap_entry_t; struct pagemapread { int pos; int len; pagemap_entry_t *buffer; bool show_pfn; }; struct pde_opener { struct list_head lh; struct file *file; bool closing; struct completion *c; }; enum { BIAS = 2147483648, }; struct proc_fs_context { struct pid_namespace *pid_ns; unsigned int mask; enum proc_hidepid hidepid; int gid; enum proc_pidonly pidonly; }; enum proc_param { Opt_gid___2 = 0, Opt_hidepid = 1, Opt_subset = 2, }; struct genradix_root; struct __genradix { struct genradix_root *root; }; struct syscall_info { __u64 sp; struct seccomp_data data; }; enum resctrl_conf_type { CDP_NONE = 0, CDP_CODE = 1, CDP_DATA = 2, }; typedef struct dentry *instantiate_t(struct dentry *, struct task_struct *, const void *); struct pid_entry { const char *name; unsigned int len; umode_t mode; const struct inode_operations *iop; const struct file_operations *fop; union proc_op op; }; struct limit_names { const char *name; const char *unit; }; struct map_files_info { long unsigned int start; long unsigned int end; fmode_t mode; }; struct tgid_iter { unsigned int tgid; struct task_struct *task; }; struct fd_data { fmode_t mode; unsigned int fd; }; struct sysctl_alias { const char *kernel_param; const char *sysctl_param; }; struct seq_net_private { struct net *net; netns_tracker ns_tracker; }; struct bpf_iter_aux_info___2; struct kernfs_iattrs { kuid_t ia_uid; kgid_t ia_gid; struct timespec64 ia_atime; struct timespec64 ia_mtime; struct timespec64 ia_ctime; struct simple_xattrs xattrs; atomic_t nr_user_xattrs; atomic_t user_xattr_size; }; struct kernfs_super_info { struct super_block *sb; struct kernfs_root *root; const void *ns; struct list_head node; }; enum kernfs_node_flag { KERNFS_ACTIVATED = 16, KERNFS_NS = 32, KERNFS_HAS_SEQ_SHOW = 64, KERNFS_HAS_MMAP = 128, KERNFS_LOCKDEP = 256, KERNFS_SUICIDAL = 1024, KERNFS_SUICIDED = 2048, KERNFS_EMPTY_DIR = 4096, KERNFS_HAS_RELEASE = 8192, }; struct kernfs_open_node { atomic_t refcnt; atomic_t event; wait_queue_head_t poll; struct list_head files; }; struct pts_mount_opts { int setuid; int setgid; kuid_t uid; kgid_t gid; umode_t mode; umode_t ptmxmode; int reserve; int max; }; enum { Opt_uid___2 = 0, Opt_gid___3 = 1, Opt_mode___2 = 2, Opt_ptmxmode = 3, Opt_newinstance = 4, Opt_max = 5, Opt_err = 6, }; struct pts_fs_info { struct ida allocated_ptys; struct pts_mount_opts mount_opts; struct super_block *sb; struct dentry *ptmx_dentry; }; enum netfs_read_source { NETFS_FILL_WITH_ZEROES = 0, NETFS_DOWNLOAD_FROM_SERVER = 1, NETFS_READ_FROM_CACHE = 2, NETFS_INVALID_READ = 3, }; typedef void (*netfs_io_terminated_t)(void *, ssize_t, bool); struct netfs_cache_ops; struct netfs_cache_resources { const struct netfs_cache_ops *ops; void *cache_priv; void *cache_priv2; unsigned int debug_id; }; struct netfs_read_subrequest; struct netfs_cache_ops { void (*end_operation)(struct netfs_cache_resources *); int (*read)(struct netfs_cache_resources *, loff_t, struct iov_iter *, bool, netfs_io_terminated_t, void *); int (*write)(struct netfs_cache_resources *, loff_t, struct iov_iter *, netfs_io_terminated_t, void *); void (*expand_readahead)(struct netfs_cache_resources *, loff_t *, size_t *, loff_t); enum netfs_read_source (*prepare_read)(struct netfs_read_subrequest *, loff_t); int (*prepare_write)(struct netfs_cache_resources *, loff_t *, size_t *, loff_t); }; struct netfs_read_request; struct netfs_read_subrequest { struct netfs_read_request *rreq; struct list_head rreq_link; loff_t start; size_t len; size_t transferred; refcount_t usage; short int error; short unsigned int debug_index; enum netfs_read_source source; long unsigned int flags; }; struct netfs_read_request_ops; struct netfs_read_request { struct work_struct work; struct inode *inode; struct address_space *mapping; struct netfs_cache_resources cache_resources; struct list_head subrequests; void *netfs_priv; unsigned int debug_id; atomic_t nr_rd_ops; atomic_t nr_wr_ops; size_t submitted; size_t len; short int error; loff_t i_size; loff_t start; long unsigned int no_unlock_folio; refcount_t usage; long unsigned int flags; const struct netfs_read_request_ops *netfs_ops; }; struct netfs_read_request_ops { bool (*is_cache_enabled)(struct inode *); void (*init_rreq)(struct netfs_read_request *, struct file *); int (*begin_cache_operation)(struct netfs_read_request *); void (*expand_readahead)(struct netfs_read_request *); bool (*clamp_length)(struct netfs_read_subrequest *); void (*issue_op)(struct netfs_read_subrequest *); bool (*is_still_valid)(struct netfs_read_request *); int (*check_write_begin)(struct file *, loff_t, unsigned int, struct folio *, void **); void (*done)(struct netfs_read_request *); void (*cleanup)(struct address_space *, void *); }; enum netfs_read_trace { netfs_read_trace_expanded = 0, netfs_read_trace_readahead = 1, netfs_read_trace_readpage = 2, netfs_read_trace_write_begin = 3, }; enum netfs_rreq_trace { netfs_rreq_trace_assess = 0, netfs_rreq_trace_done = 1, netfs_rreq_trace_free = 2, netfs_rreq_trace_resubmit = 3, netfs_rreq_trace_unlock = 4, netfs_rreq_trace_unmark = 5, netfs_rreq_trace_write = 6, }; enum netfs_sreq_trace { netfs_sreq_trace_download_instead = 0, netfs_sreq_trace_free = 1, netfs_sreq_trace_prepare = 2, netfs_sreq_trace_resubmit_short = 3, netfs_sreq_trace_submit = 4, netfs_sreq_trace_terminated = 5, netfs_sreq_trace_write = 6, netfs_sreq_trace_write_skip = 7, netfs_sreq_trace_write_term = 8, }; enum netfs_failure { netfs_fail_check_write_begin = 0, netfs_fail_copy_to_cache = 1, netfs_fail_read = 2, netfs_fail_short_readpage = 3, netfs_fail_short_write_begin = 4, netfs_fail_prepare_write = 5, }; struct trace_event_raw_netfs_read { struct trace_entry ent; unsigned int rreq; unsigned int cookie; loff_t start; size_t len; enum netfs_read_trace what; char __data[0]; }; struct trace_event_raw_netfs_rreq { struct trace_entry ent; unsigned int rreq; short unsigned int flags; enum netfs_rreq_trace what; char __data[0]; }; struct trace_event_raw_netfs_sreq { struct trace_entry ent; unsigned int rreq; short unsigned int index; short int error; short unsigned int flags; enum netfs_read_source source; enum netfs_sreq_trace what; size_t len; size_t transferred; loff_t start; char __data[0]; }; struct trace_event_raw_netfs_failure { struct trace_entry ent; unsigned int rreq; short unsigned int index; short int error; short unsigned int flags; enum netfs_read_source source; enum netfs_failure what; size_t len; size_t transferred; loff_t start; char __data[0]; }; struct trace_event_data_offsets_netfs_read {}; struct trace_event_data_offsets_netfs_rreq {}; struct trace_event_data_offsets_netfs_sreq {}; struct trace_event_data_offsets_netfs_failure {}; typedef void (*btf_trace_netfs_read)(void *, struct netfs_read_request *, loff_t, size_t, enum netfs_read_trace); typedef void (*btf_trace_netfs_rreq)(void *, struct netfs_read_request *, enum netfs_rreq_trace); typedef void (*btf_trace_netfs_sreq)(void *, struct netfs_read_subrequest *, enum netfs_sreq_trace); typedef void (*btf_trace_netfs_failure)(void *, struct netfs_read_request *, struct netfs_read_subrequest *, int, enum netfs_failure); struct ramfs_mount_opts { umode_t mode; }; struct ramfs_fs_info { struct ramfs_mount_opts mount_opts; }; enum ramfs_param { Opt_mode___3 = 0, }; struct getdents_callback___2 { struct dir_context ctx; char *name; u64 ino; int found; int sequence; }; typedef u16 wchar_t; typedef u32 unicode_t; struct nls_table { const char *charset; const char *alias; int (*uni2char)(wchar_t, unsigned char *, int); int (*char2uni)(const unsigned char *, int, wchar_t *); const unsigned char *charset2lower; const unsigned char *charset2upper; struct module *owner; struct nls_table *next; }; enum utf16_endian { UTF16_HOST_ENDIAN = 0, UTF16_LITTLE_ENDIAN = 1, UTF16_BIG_ENDIAN = 2, }; struct utf8_table { int cmask; int cval; int shift; long int lmask; long int lval; }; struct p9_qid { u8 type; u32 version; u64 path; }; struct p9_wstat { u16 size; u16 type; u32 dev; struct p9_qid qid; u32 mode; u32 atime; u32 mtime; u64 length; const char *name; const char *uid; const char *gid; const char *muid; char *extension; kuid_t n_uid; kgid_t n_gid; kuid_t n_muid; }; struct p9_stat_dotl { u64 st_result_mask; struct p9_qid qid; u32 st_mode; kuid_t st_uid; kgid_t st_gid; u64 st_nlink; u64 st_rdev; u64 st_size; u64 st_blksize; u64 st_blocks; u64 st_atime_sec; u64 st_atime_nsec; u64 st_mtime_sec; u64 st_mtime_nsec; u64 st_ctime_sec; u64 st_ctime_nsec; u64 st_btime_sec; u64 st_btime_nsec; u64 st_gen; u64 st_data_version; }; struct p9_rstatfs { u32 type; u32 bsize; u64 blocks; u64 bfree; u64 bavail; u64 files; u64 ffree; u64 fsid; u32 namelen; }; enum p9_trans_status { Connected = 0, BeginDisconnect = 1, Disconnected = 2, Hung = 3, }; struct p9_trans_module; struct p9_client { spinlock_t lock; unsigned int msize; unsigned char proto_version; struct p9_trans_module *trans_mod; enum p9_trans_status status; void *trans; struct kmem_cache *fcall_cache; union { struct { int rfd; int wfd; } fd; struct { u16 port; bool privport; } tcp; } trans_opts; struct idr fids; struct idr reqs; char name[65]; }; struct p9_fid { struct p9_client *clnt; u32 fid; refcount_t count; int mode; struct p9_qid qid; u32 iounit; kuid_t uid; void *rdir; struct hlist_node dlist; struct hlist_node ilist; }; enum p9_session_flags { V9FS_PROTO_2000U = 1, V9FS_PROTO_2000L = 2, V9FS_ACCESS_SINGLE = 4, V9FS_ACCESS_USER = 8, V9FS_ACCESS_CLIENT = 16, V9FS_POSIX_ACL = 32, }; enum p9_cache_modes { CACHE_NONE = 0, CACHE_MMAP = 1, CACHE_LOOSE = 2, CACHE_FSCACHE = 3, nr__p9_cache_modes = 4, }; struct v9fs_session_info { unsigned char flags; unsigned char nodev; short unsigned int debug; unsigned int afid; unsigned int cache; char *uname; char *aname; unsigned int maxdata; kuid_t dfltuid; kgid_t dfltgid; kuid_t uid; struct p9_client *clnt; struct list_head slist; struct rw_semaphore rename_sem; long int session_lock_timeout; }; struct v9fs_inode { struct p9_qid qid; unsigned int cache_validity; struct p9_fid *writeback_fid; struct mutex v_mutex; struct inode vfs_inode; }; enum p9_open_mode_t { P9_OREAD = 0, P9_OWRITE = 1, P9_ORDWR = 2, P9_OEXEC = 3, P9_OTRUNC = 16, P9_OREXEC = 32, P9_ORCLOSE = 64, P9_OAPPEND = 128, P9_OEXCL = 4096, }; enum p9_perm_t { P9_DMDIR = 2147483648, P9_DMAPPEND = 1073741824, P9_DMEXCL = 536870912, P9_DMMOUNT = 268435456, P9_DMAUTH = 134217728, P9_DMTMP = 67108864, P9_DMSYMLINK = 33554432, P9_DMLINK = 16777216, P9_DMDEVICE = 8388608, P9_DMNAMEDPIPE = 2097152, P9_DMSOCKET = 1048576, P9_DMSETUID = 524288, P9_DMSETGID = 262144, P9_DMSETVTX = 65536, }; struct p9_iattr_dotl { u32 valid; u32 mode; kuid_t uid; kgid_t gid; u64 size; u64 atime_sec; u64 atime_nsec; u64 mtime_sec; u64 mtime_nsec; }; struct dotl_openflag_map { int open_flag; int dotl_flag; }; struct dotl_iattr_map { int iattr_valid; int p9_iattr_valid; }; enum fscache_checkaux { FSCACHE_CHECKAUX_OKAY = 0, FSCACHE_CHECKAUX_NEEDS_UPDATE = 1, FSCACHE_CHECKAUX_OBSOLETE = 2, }; struct fscache_cache_tag; struct fscache_cookie_def { char name[16]; uint8_t type; struct fscache_cache_tag * (*select_cache)(const void *, const void *); enum fscache_checkaux (*check_aux)(void *, const void *, uint16_t, loff_t); void (*get_context)(void *, void *); void (*put_context)(void *, void *); void (*mark_page_cached)(void *, struct address_space *, struct page *); }; struct fscache_cookie { refcount_t ref; atomic_t n_children; atomic_t n_active; unsigned int debug_id; spinlock_t lock; spinlock_t stores_lock; struct hlist_head backing_objects; const struct fscache_cookie_def *def; struct fscache_cookie *parent; struct hlist_bl_node hash_link; struct list_head proc_link; void *netfs_data; struct xarray stores; long unsigned int flags; u8 type; u8 key_len; u8 aux_len; u32 key_hash; union { void *key; u8 inline_key[16]; }; union { void *aux; u8 inline_aux[8]; }; }; struct p9_flock { u8 type; u32 flags; u64 start; u64 length; u32 proc_id; char *client_id; }; struct p9_getlock { u8 type; u64 start; u64 length; u32 proc_id; char *client_id; }; struct p9_dirent { struct p9_qid qid; u64 d_off; unsigned char d_type; char d_name[256]; }; struct p9_rdir { int head; int tail; uint8_t buf[0]; }; struct p9_fcall { u32 size; u8 id; u16 tag; size_t offset; size_t capacity; struct kmem_cache *cache; u8 *sdata; }; struct p9_req_t { int status; int t_err; struct kref refcount; wait_queue_head_t wq; struct p9_fcall tc; struct p9_fcall rc; struct list_head req_list; }; struct p9_trans_module { struct list_head list; char *name; int maxsize; int def; struct module *owner; int (*create)(struct p9_client *, const char *, char *); void (*close)(struct p9_client *); int (*request)(struct p9_client *, struct p9_req_t *); int (*cancel)(struct p9_client *, struct p9_req_t *); int (*cancelled)(struct p9_client *, struct p9_req_t *); int (*zc_request)(struct p9_client *, struct p9_req_t *, struct iov_iter *, struct iov_iter *, int, int, int); int (*show_options)(struct seq_file *, struct p9_client *); }; enum { Opt_debug = 0, Opt_dfltuid = 1, Opt_dfltgid = 2, Opt_afid = 3, Opt_uname = 4, Opt_remotename = 5, Opt_cache = 6, Opt_cachetag = 7, Opt_nodevmap = 8, Opt_cache_loose = 9, Opt_fscache = 10, Opt_mmap = 11, Opt_access = 12, Opt_posixacl = 13, Opt_locktimeout = 14, Opt_err___2 = 15, }; struct debugfs_fsdata { const struct file_operations *real_fops; refcount_t active_users; struct completion active_users_drained; }; struct debugfs_mount_opts { kuid_t uid; kgid_t gid; umode_t mode; }; enum { Opt_uid___3 = 0, Opt_gid___4 = 1, Opt_mode___4 = 2, Opt_err___3 = 3, }; struct debugfs_fs_info { struct debugfs_mount_opts mount_opts; }; struct debugfs_blob_wrapper { void *data; long unsigned int size; }; struct debugfs_reg32 { char *name; long unsigned int offset; }; struct debugfs_regset32 { const struct debugfs_reg32 *regs; int nregs; void *base; struct device *dev; }; struct debugfs_u32_array { u32 *array; u32 n_elements; }; struct debugfs_devm_entry { int (*read)(struct seq_file *, void *); struct device *dev; }; struct tracefs_dir_ops { int (*mkdir)(const char *); int (*rmdir)(const char *); }; struct tracefs_mount_opts { kuid_t uid; kgid_t gid; umode_t mode; }; struct tracefs_fs_info { struct tracefs_mount_opts mount_opts; }; struct f2fs_device { __u8 path[64]; __le32 total_segments; }; struct f2fs_super_block { __le32 magic; __le16 major_ver; __le16 minor_ver; __le32 log_sectorsize; __le32 log_sectors_per_block; __le32 log_blocksize; __le32 log_blocks_per_seg; __le32 segs_per_sec; __le32 secs_per_zone; __le32 checksum_offset; __le64 block_count; __le32 section_count; __le32 segment_count; __le32 segment_count_ckpt; __le32 segment_count_sit; __le32 segment_count_nat; __le32 segment_count_ssa; __le32 segment_count_main; __le32 segment0_blkaddr; __le32 cp_blkaddr; __le32 sit_blkaddr; __le32 nat_blkaddr; __le32 ssa_blkaddr; __le32 main_blkaddr; __le32 root_ino; __le32 node_ino; __le32 meta_ino; __u8 uuid[16]; __le16 volume_name[512]; __le32 extension_count; __u8 extension_list[512]; __le32 cp_payload; __u8 version[256]; __u8 init_version[256]; __le32 feature; __u8 encryption_level; __u8 encrypt_pw_salt[16]; struct f2fs_device devs[8]; __le32 qf_ino[3]; __u8 hot_ext_count; __le16 s_encoding; __le16 s_encoding_flags; __u8 reserved[306]; __le32 crc; } __attribute__((packed)); struct f2fs_checkpoint { __le64 checkpoint_ver; __le64 user_block_count; __le64 valid_block_count; __le32 rsvd_segment_count; __le32 overprov_segment_count; __le32 free_segment_count; __le32 cur_node_segno[8]; __le16 cur_node_blkoff[8]; __le32 cur_data_segno[8]; __le16 cur_data_blkoff[8]; __le32 ckpt_flags; __le32 cp_pack_total_block_count; __le32 cp_pack_start_sum; __le32 valid_node_count; __le32 valid_inode_count; __le32 next_free_nid; __le32 sit_ver_bitmap_bytesize; __le32 nat_ver_bitmap_bytesize; __le32 checksum_offset; __le64 elapsed_time; unsigned char alloc_type[16]; unsigned char sit_nat_version_bitmap[0]; }; struct f2fs_extent { __le32 fofs; __le32 blk; __le32 len; }; struct f2fs_inode { __le16 i_mode; __u8 i_advise; __u8 i_inline; __le32 i_uid; __le32 i_gid; __le32 i_links; __le64 i_size; __le64 i_blocks; __le64 i_atime; __le64 i_ctime; __le64 i_mtime; __le32 i_atime_nsec; __le32 i_ctime_nsec; __le32 i_mtime_nsec; __le32 i_generation; union { __le32 i_current_depth; __le16 i_gc_failures; }; __le32 i_xattr_nid; __le32 i_flags; __le32 i_pino; __le32 i_namelen; __u8 i_name[255]; __u8 i_dir_level; struct f2fs_extent i_ext; union { struct { __le16 i_extra_isize; __le16 i_inline_xattr_size; __le32 i_projid; __le32 i_inode_checksum; __le64 i_crtime; __le32 i_crtime_nsec; __le64 i_compr_blocks; __u8 i_compress_algorithm; __u8 i_log_cluster_size; __le16 i_compress_flag; __le32 i_extra_end[0]; } __attribute__((packed)); __le32 i_addr[923]; }; __le32 i_nid[5]; }; struct direct_node { __le32 addr[1018]; }; struct indirect_node { __le32 nid[1018]; }; struct node_footer { __le32 nid; __le32 ino; __le32 flag; __le64 cp_ver; __le32 next_blkaddr; } __attribute__((packed)); struct f2fs_node { union { struct f2fs_inode i; struct direct_node dn; struct indirect_node in; }; struct node_footer footer; }; typedef __le32 f2fs_hash_t; struct f2fs_dir_entry { __le32 hash_code; __le32 ino; __le16 name_len; __u8 file_type; } __attribute__((packed)); struct f2fs_dentry_block { __u8 dentry_bitmap[27]; __u8 reserved[3]; struct f2fs_dir_entry dentry[214]; __u8 filename[1712]; } __attribute__((packed)); enum { F2FS_FT_UNKNOWN = 0, F2FS_FT_REG_FILE = 1, F2FS_FT_DIR = 2, F2FS_FT_CHRDEV = 3, F2FS_FT_BLKDEV = 4, F2FS_FT_FIFO = 5, F2FS_FT_SOCK = 6, F2FS_FT_SYMLINK = 7, F2FS_FT_MAX = 8, }; struct disk_stats { u64 nsecs[4]; long unsigned int sectors[4]; long unsigned int ios[4]; long unsigned int merges[4]; long unsigned int io_ticks; local_t in_flight[2]; }; enum stat_group { STAT_READ = 0, STAT_WRITE = 1, STAT_DISCARD = 2, STAT_FLUSH = 3, NR_STAT_GROUPS = 4, }; struct fscrypt_str { unsigned char *name; u32 len; }; struct fscrypt_name { const struct qstr *usr_fname; struct fscrypt_str disk_name; u32 hash; u32 minor_hash; struct fscrypt_str crypto_buf; bool is_nokey_name; }; struct fscrypt_dummy_policy {}; enum { FAULT_KMALLOC = 0, FAULT_KVMALLOC = 1, FAULT_PAGE_ALLOC = 2, FAULT_PAGE_GET = 3, FAULT_ALLOC_BIO = 4, FAULT_ALLOC_NID = 5, FAULT_ORPHAN = 6, FAULT_BLOCK = 7, FAULT_DIR_DEPTH = 8, FAULT_EVICT_INODE = 9, FAULT_TRUNCATE = 10, FAULT_READ_IO = 11, FAULT_CHECKPOINT = 12, FAULT_DISCARD = 13, FAULT_WRITE_IO = 14, FAULT_SLAB_ALLOC = 15, FAULT_DQUOT_INIT = 16, FAULT_MAX = 17, }; typedef u32 block_t; typedef u32 nid_t; struct f2fs_mount_info { unsigned int opt; int write_io_size_bits; block_t root_reserved_blocks; kuid_t s_resuid; kgid_t s_resgid; int active_logs; int inline_xattr_size; int whint_mode; int alloc_mode; int fsync_mode; int fs_mode; int bggc_mode; int discard_unit; struct fscrypt_dummy_policy dummy_enc_policy; block_t unusable_cap_perc; block_t unusable_cap; unsigned char compress_algorithm; unsigned char compress_log_size; unsigned char compress_level; bool compress_chksum; unsigned char compress_ext_cnt; unsigned char nocompress_ext_cnt; int compress_mode; unsigned char extensions[128]; unsigned char noextensions[128]; }; enum { META_CP = 0, META_NAT = 1, META_SIT = 2, META_SSA = 3, META_MAX = 4, META_POR = 5, DATA_GENERIC = 6, DATA_GENERIC_ENHANCE = 7, DATA_GENERIC_ENHANCE_READ = 8, META_GENERIC = 9, }; enum { ORPHAN_INO = 0, APPEND_INO = 1, UPDATE_INO = 2, TRANS_DIR_INO = 3, FLUSH_INO = 4, MAX_INO_ENTRY = 5, }; struct ckpt_req_control { struct task_struct *f2fs_issue_ckpt; int ckpt_thread_ioprio; wait_queue_head_t ckpt_wait_queue; atomic_t issued_ckpt; atomic_t total_ckpt; atomic_t queued_ckpt; struct llist_head issue_list; spinlock_t stat_lock; unsigned int cur_time; unsigned int peak_time; }; struct discard_cmd_control { struct task_struct *f2fs_issue_discard; struct list_head entry_list; struct list_head pend_list[512]; struct list_head wait_list; struct list_head fstrim_list; wait_queue_head_t discard_wait_queue; unsigned int discard_wake; struct mutex cmd_lock; unsigned int nr_discards; unsigned int max_discards; unsigned int discard_granularity; unsigned int undiscard_blks; unsigned int next_pos; atomic_t issued_discard; atomic_t queued_discard; atomic_t discard_cmd_cnt; struct rb_root_cached root; bool rbtree_check; }; struct f2fs_filename { const struct qstr *usr_fname; struct fscrypt_str disk_name; f2fs_hash_t hash; }; struct f2fs_dentry_ptr { struct inode *inode; void *bitmap; struct f2fs_dir_entry *dentry; __u8 (*filename)[8]; int max; int nr_bitmap; }; struct extent_info { unsigned int fofs; unsigned int len; u32 blk; }; struct extent_tree; struct extent_node { struct rb_node rb_node; struct extent_info ei; struct list_head list; struct extent_tree *et; }; struct extent_tree { nid_t ino; struct rb_root_cached root; struct extent_node *cached_en; struct extent_info largest; struct list_head list; rwlock_t lock; atomic_t node_cnt; bool largest_updated; }; enum { GC_FAILURE_PIN = 0, GC_FAILURE_ATOMIC = 1, MAX_GC_FAILURE = 2, }; enum { FI_NEW_INODE = 0, FI_DIRTY_INODE = 1, FI_AUTO_RECOVER = 2, FI_DIRTY_DIR = 3, FI_INC_LINK = 4, FI_ACL_MODE = 5, FI_NO_ALLOC = 6, FI_FREE_NID = 7, FI_NO_EXTENT = 8, FI_INLINE_XATTR = 9, FI_INLINE_DATA = 10, FI_INLINE_DENTRY = 11, FI_APPEND_WRITE = 12, FI_UPDATE_WRITE = 13, FI_NEED_IPU = 14, FI_ATOMIC_FILE = 15, FI_ATOMIC_COMMIT = 16, FI_VOLATILE_FILE = 17, FI_FIRST_BLOCK_WRITTEN = 18, FI_DROP_CACHE = 19, FI_DATA_EXIST = 20, FI_INLINE_DOTS = 21, FI_DO_DEFRAG = 22, FI_DIRTY_FILE = 23, FI_NO_PREALLOC = 24, FI_HOT_DATA = 25, FI_EXTRA_ATTR = 26, FI_PROJ_INHERIT = 27, FI_PIN_FILE = 28, FI_ATOMIC_REVOKE_REQUEST = 29, FI_VERITY_IN_PROGRESS = 30, FI_COMPRESSED_FILE = 31, FI_COMPRESS_CORRUPT = 32, FI_MMAP_FILE = 33, FI_ENABLE_COMPRESS = 34, FI_COMPRESS_RELEASED = 35, FI_ALIGNED_WRITE = 36, FI_MAX = 37, }; struct f2fs_inode_info { struct inode vfs_inode; long unsigned int i_flags; unsigned char i_advise; unsigned char i_dir_level; unsigned int i_current_depth; unsigned int i_gc_failures[2]; unsigned int i_pino; umode_t i_acl_mode; long unsigned int flags[1]; struct rw_semaphore i_sem; atomic_t dirty_pages; f2fs_hash_t chash; unsigned int clevel; struct task_struct *task; struct task_struct *cp_task; nid_t i_xattr_nid; loff_t last_disk_size; spinlock_t i_size_lock; struct list_head dirty_list; struct list_head gdirty_list; struct list_head inmem_ilist; struct list_head inmem_pages; struct task_struct *inmem_task; struct mutex inmem_lock; struct extent_tree *extent_tree; struct rw_semaphore i_gc_rwsem[2]; struct rw_semaphore i_xattr_sem; int i_extra_isize; kprojid_t i_projid; int i_inline_xattr_size; struct timespec64 i_crtime; struct timespec64 i_disk_time[4]; atomic_t i_compr_blocks; unsigned char i_compress_algorithm; unsigned char i_log_cluster_size; unsigned char i_compress_level; short unsigned int i_compress_flag; unsigned int i_cluster_size; }; enum nid_state { FREE_NID = 0, PREALLOC_NID = 1, MAX_NID_STATE = 2, }; enum nat_state { TOTAL_NAT = 0, DIRTY_NAT = 1, RECLAIMABLE_NAT = 2, MAX_NAT_STATE = 3, }; struct f2fs_nm_info { block_t nat_blkaddr; nid_t max_nid; nid_t available_nids; nid_t next_scan_nid; unsigned int ram_thresh; unsigned int ra_nid_pages; unsigned int dirty_nats_ratio; struct xarray nat_root; struct xarray nat_set_root; struct rw_semaphore nat_tree_lock; struct list_head nat_entries; spinlock_t nat_list_lock; unsigned int nat_cnt[3]; unsigned int nat_blocks; struct xarray free_nid_root; struct list_head free_nid_list; unsigned int nid_cnt[2]; spinlock_t nid_list_lock; struct mutex build_lock; unsigned char **free_nid_bitmap; unsigned char *nat_block_bitmap; short unsigned int *free_nid_count; char *nat_bitmap; unsigned int nat_bits_blocks; unsigned char *nat_bits; unsigned char *full_nat_bits; unsigned char *empty_nat_bits; int bitmap_size; }; struct flush_cmd_control { struct task_struct *f2fs_issue_flush; wait_queue_head_t flush_wait_queue; atomic_t issued_flush; atomic_t queued_flush; struct llist_head issue_list; struct llist_node *dispatch_list; }; struct sit_info; struct free_segmap_info; struct dirty_seglist_info; struct curseg_info; struct f2fs_sm_info { struct sit_info *sit_info; struct free_segmap_info *free_info; struct dirty_seglist_info *dirty_info; struct curseg_info *curseg_array; struct rw_semaphore curseg_lock; block_t seg0_blkaddr; block_t main_blkaddr; block_t ssa_blkaddr; unsigned int segment_count; unsigned int main_segments; unsigned int reserved_segments; unsigned int ovp_segments; unsigned int rec_prefree_segments; unsigned int trim_sections; struct list_head sit_entry_set; unsigned int ipu_policy; unsigned int min_ipu_util; unsigned int min_fsync_blocks; unsigned int min_seq_blocks; unsigned int min_hot_blocks; unsigned int min_ssr_sections; struct flush_cmd_control *fcc_info; struct discard_cmd_control *dcc_info; }; enum count_type { F2FS_DIRTY_DENTS = 0, F2FS_DIRTY_DATA = 1, F2FS_DIRTY_QDATA = 2, F2FS_DIRTY_NODES = 3, F2FS_DIRTY_META = 4, F2FS_INMEM_PAGES = 5, F2FS_DIRTY_IMETA = 6, F2FS_WB_CP_DATA = 7, F2FS_WB_DATA = 8, F2FS_RD_DATA = 9, F2FS_RD_NODE = 10, F2FS_RD_META = 11, F2FS_DIO_WRITE = 12, F2FS_DIO_READ = 13, NR_COUNT_TYPE = 14, }; enum page_type { DATA = 0, NODE = 1, META = 2, NR_PAGE_TYPE = 3, META_FLUSH = 4, INMEM = 5, INMEM_DROP = 6, INMEM_INVALIDATE = 7, INMEM_REVOKE = 8, IPU = 9, OPU = 10, }; enum temp_type { HOT = 0, WARM = 1, COLD = 2, NR_TEMP_TYPE = 3, }; enum iostat_type { APP_DIRECT_IO = 0, APP_BUFFERED_IO = 1, APP_WRITE_IO = 2, APP_MAPPED_IO = 3, FS_DATA_IO = 4, FS_NODE_IO = 5, FS_META_IO = 6, FS_GC_DATA_IO = 7, FS_GC_NODE_IO = 8, FS_CP_DATA_IO = 9, FS_CP_NODE_IO = 10, FS_CP_META_IO = 11, APP_DIRECT_READ_IO = 12, APP_BUFFERED_READ_IO = 13, APP_READ_IO = 14, APP_MAPPED_READ_IO = 15, FS_DATA_READ_IO = 16, FS_GDATA_READ_IO = 17, FS_CDATA_READ_IO = 18, FS_NODE_READ_IO = 19, FS_META_READ_IO = 20, FS_DISCARD = 21, NR_IO_TYPE = 22, }; struct f2fs_sb_info; struct f2fs_io_info { struct f2fs_sb_info *sbi; nid_t ino; enum page_type type; enum temp_type temp; int op; int op_flags; block_t new_blkaddr; block_t old_blkaddr; struct page *page; struct page *encrypted_page; struct page *compressed_page; struct list_head list; bool submitted; int need_lock; bool in_list; bool is_por; bool retry; int compr_blocks; bool encrypted; enum iostat_type io_type; struct writeback_control *io_wbc; struct bio **bio; sector_t *last_block; unsigned char version; }; struct inode_management { struct xarray ino_root; spinlock_t ino_lock; struct list_head ino_list; long unsigned int ino_num; }; struct atgc_management { bool atgc_enabled; struct rb_root_cached root; struct list_head victim_list; unsigned int victim_count; unsigned int candidate_ratio; unsigned int max_candidate_count; unsigned int age_weight; long long unsigned int age_threshold; }; struct f2fs_bio_info; struct f2fs_gc_kthread; struct f2fs_stat_info; struct f2fs_dev_info; struct iostat_lat_info; struct f2fs_sb_info { struct super_block *sb; struct proc_dir_entry *s_proc; struct f2fs_super_block *raw_super; struct rw_semaphore sb_lock; int valid_super_block; long unsigned int s_flag; struct mutex writepages; struct f2fs_nm_info *nm_info; struct inode *node_inode; struct f2fs_sm_info *sm_info; struct f2fs_bio_info *write_io[3]; struct rw_semaphore io_order_lock; mempool_t *write_io_dummy; struct f2fs_checkpoint *ckpt; int cur_cp_pack; spinlock_t cp_lock; struct inode *meta_inode; struct rw_semaphore cp_global_sem; struct rw_semaphore cp_rwsem; struct rw_semaphore node_write; struct rw_semaphore node_change; wait_queue_head_t cp_wait; long unsigned int last_time[6]; long int interval_time[6]; struct ckpt_req_control cprc_info; struct inode_management im[5]; spinlock_t fsync_node_lock; struct list_head fsync_node_list; unsigned int fsync_seg_id; unsigned int fsync_node_num; unsigned int max_orphans; struct list_head inode_list[4]; spinlock_t inode_lock[4]; struct mutex flush_lock; struct xarray extent_tree_root; struct mutex extent_tree_lock; struct list_head extent_list; spinlock_t extent_lock; atomic_t total_ext_tree; struct list_head zombie_list; atomic_t total_zombie_tree; atomic_t total_ext_node; unsigned int log_sectors_per_block; unsigned int log_blocksize; unsigned int blocksize; unsigned int root_ino_num; unsigned int node_ino_num; unsigned int meta_ino_num; unsigned int log_blocks_per_seg; unsigned int blocks_per_seg; unsigned int segs_per_sec; unsigned int secs_per_zone; unsigned int total_sections; unsigned int total_node_count; unsigned int total_valid_node_count; int dir_level; int readdir_ra; u64 max_io_bytes; block_t user_block_count; block_t total_valid_block_count; block_t discard_blks; block_t last_valid_block_count; block_t reserved_blocks; block_t current_reserved_blocks; block_t unusable_block_count; unsigned int nquota_files; struct rw_semaphore quota_sem; atomic_t nr_pages[14]; struct percpu_counter alloc_valid_block_count; atomic_t wb_sync_req[2]; struct percpu_counter total_valid_inode_count; struct f2fs_mount_info mount_opt; struct rw_semaphore gc_lock; struct f2fs_gc_kthread *gc_thread; struct atgc_management am; unsigned int cur_victim_sec; unsigned int gc_mode; unsigned int next_victim_seg[2]; unsigned int atomic_files; long long unsigned int skipped_atomic_files[2]; long long unsigned int skipped_gc_rwsem; u64 gc_pin_file_threshold; struct rw_semaphore pin_sem; unsigned int max_victim_search; unsigned int migration_granularity; struct f2fs_stat_info *stat_info; atomic_t meta_count[4]; unsigned int segment_count[2]; unsigned int block_count[2]; atomic_t inplace_count; atomic64_t total_hit_ext; atomic64_t read_hit_rbtree; atomic64_t read_hit_largest; atomic64_t read_hit_cached; atomic_t inline_xattr; atomic_t inline_inode; atomic_t inline_dir; atomic_t compr_inode; atomic64_t compr_blocks; atomic_t vw_cnt; atomic_t max_aw_cnt; atomic_t max_vw_cnt; unsigned int io_skip_bggc; unsigned int other_skip_bggc; unsigned int ndirty_inode[4]; spinlock_t stat_lock; unsigned int data_io_flag; unsigned int node_io_flag; struct kobject s_kobj; struct completion s_kobj_unregister; struct kobject s_stat_kobj; struct completion s_stat_kobj_unregister; struct kobject s_feature_list_kobj; struct completion s_feature_list_kobj_unregister; struct list_head s_list; struct mutex umount_mutex; unsigned int shrinker_run_no; int s_ndevs; struct f2fs_dev_info *devs; unsigned int dirty_device; spinlock_t dev_lock; bool aligned_blksize; u64 sectors_written_start; u64 kbytes_written; struct crypto_shash *s_chksum_driver; __u32 s_chksum_seed; struct workqueue_struct *post_read_wq; struct kmem_cache *inline_xattr_slab; unsigned int inline_xattr_slab_size; unsigned int gc_segment_mode; unsigned int gc_reclaimed_segs[6]; long unsigned int seq_file_ra_mul; int max_fragment_chunk; int max_fragment_hole; spinlock_t iostat_lock; long long unsigned int rw_iostat[22]; long long unsigned int prev_rw_iostat[22]; bool iostat_enable; long unsigned int iostat_next_period; unsigned int iostat_period_ms; spinlock_t iostat_lat_lock; struct iostat_lat_info *iostat_io_lat; }; struct f2fs_bio_info { struct f2fs_sb_info *sbi; struct bio *bio; sector_t last_block_in_bio; struct f2fs_io_info fio; struct rw_semaphore io_rwsem; spinlock_t io_lock; struct list_head io_list; struct list_head bio_list; struct rw_semaphore bio_list_lock; }; struct f2fs_dev_info { struct block_device *bdev; char path[64]; unsigned int total_segments; block_t start_blk; block_t end_blk; }; enum inode_type { DIR_INODE = 0, FILE_INODE = 1, DIRTY_META = 2, ATOMIC_FILE = 3, NR_INODE_TYPE = 4, }; enum { SBI_IS_DIRTY = 0, SBI_IS_CLOSE = 1, SBI_NEED_FSCK = 2, SBI_POR_DOING = 3, SBI_NEED_SB_WRITE = 4, SBI_NEED_CP = 5, SBI_IS_SHUTDOWN = 6, SBI_IS_RECOVERED = 7, SBI_CP_DISABLED = 8, SBI_CP_DISABLED_QUICK = 9, SBI_QUOTA_NEED_FLUSH = 10, SBI_QUOTA_SKIP_FLUSH = 11, SBI_QUOTA_NEED_REPAIR = 12, SBI_IS_RESIZEFS = 13, }; enum { CP_TIME = 0, REQ_TIME = 1, DISCARD_TIME = 2, GC_TIME = 3, DISABLE_TIME = 4, UMOUNT_DISCARD_TIMEOUT = 5, MAX_TIME = 6, }; enum { GC_NORMAL = 0, GC_IDLE_CB = 1, GC_IDLE_GREEDY = 2, GC_IDLE_AT = 3, GC_URGENT_HIGH = 4, GC_URGENT_LOW = 5, MAX_GC_MODE = 6, }; enum fsync_mode { FSYNC_MODE_POSIX = 0, FSYNC_MODE_STRICT = 1, FSYNC_MODE_NOBARRIER = 2, }; enum { PAGE_PRIVATE_NOT_POINTER = 0, PAGE_PRIVATE_ATOMIC_WRITE = 1, PAGE_PRIVATE_DUMMY_WRITE = 2, PAGE_PRIVATE_ONGOING_MIGRATION = 3, PAGE_PRIVATE_INLINE_INODE = 4, PAGE_PRIVATE_REF_RESOURCE = 5, PAGE_PRIVATE_MAX = 6, }; struct f2fs_stat_info { struct list_head stat_list; struct f2fs_sb_info *sbi; int all_area_segs; int sit_area_segs; int nat_area_segs; int ssa_area_segs; int main_area_segs; int main_area_sections; int main_area_zones; long long unsigned int hit_largest; long long unsigned int hit_cached; long long unsigned int hit_rbtree; long long unsigned int hit_total; long long unsigned int total_ext; int ext_tree; int zombie_tree; int ext_node; int ndirty_node; int ndirty_dent; int ndirty_meta; int ndirty_imeta; int ndirty_data; int ndirty_qdata; int inmem_pages; unsigned int ndirty_dirs; unsigned int ndirty_files; unsigned int nquota_files; unsigned int ndirty_all; int nats; int dirty_nats; int sits; int dirty_sits; int free_nids; int avail_nids; int alloc_nids; int total_count; int utilization; int bg_gc; int nr_wb_cp_data; int nr_wb_data; int nr_rd_data; int nr_rd_node; int nr_rd_meta; int nr_dio_read; int nr_dio_write; unsigned int io_skip_bggc; unsigned int other_skip_bggc; int nr_flushing; int nr_flushed; int flush_list_empty; int nr_discarding; int nr_discarded; int nr_discard_cmd; unsigned int undiscard_blks; int nr_issued_ckpt; int nr_total_ckpt; int nr_queued_ckpt; unsigned int cur_ckpt_time; unsigned int peak_ckpt_time; int inline_xattr; int inline_inode; int inline_dir; int append; int update; int orphans; int compr_inode; long long unsigned int compr_blocks; int aw_cnt; int max_aw_cnt; int vw_cnt; int max_vw_cnt; unsigned int valid_count; unsigned int valid_node_count; unsigned int valid_inode_count; unsigned int discard_blks; unsigned int bimodal; unsigned int avg_vblocks; int util_free; int util_valid; int util_invalid; int rsvd_segs; int overp_segs; int dirty_count; int node_pages; int meta_pages; int compress_pages; int compress_page_hit; int prefree_count; int call_count; int cp_count; int bg_cp_count; int tot_segs; int node_segs; int data_segs; int free_segs; int free_secs; int bg_node_segs; int bg_data_segs; int tot_blks; int data_blks; int node_blks; int bg_data_blks; int bg_node_blks; long long unsigned int skipped_atomic_files[2]; int curseg[8]; int cursec[8]; int curzone[8]; unsigned int dirty_seg[8]; unsigned int full_seg[8]; unsigned int valid_blks[8]; unsigned int meta_count[4]; unsigned int segment_count[2]; unsigned int block_count[2]; unsigned int inplace_count; long long unsigned int base_mem; long long unsigned int cache_mem; long long unsigned int page_mem; }; struct fstrim_range { __u64 start; __u64 len; __u64 minlen; }; enum { COLD_BIT_SHIFT = 0, FSYNC_BIT_SHIFT = 1, DENT_BIT_SHIFT = 2, OFFSET_BIT_SHIFT = 3, }; struct f2fs_nat_entry { __u8 version; __le32 ino; __le32 block_addr; } __attribute__((packed)); struct f2fs_sit_entry { __le16 vblocks; __u8 valid_map[64]; __le64 mtime; } __attribute__((packed)); struct f2fs_summary { __le32 nid; union { __u8 reserved[3]; struct { __u8 version; __le16 ofs_in_node; } __attribute__((packed)); }; } __attribute__((packed)); struct summary_footer { unsigned char entry_type; __le32 check_sum; } __attribute__((packed)); struct nat_journal_entry { __le32 nid; struct f2fs_nat_entry ne; } __attribute__((packed)); struct nat_journal { struct nat_journal_entry entries[38]; __u8 reserved[11]; } __attribute__((packed)); struct sit_journal_entry { __le32 segno; struct f2fs_sit_entry se; } __attribute__((packed)); struct sit_journal { struct sit_journal_entry entries[6]; __u8 reserved[37]; } __attribute__((packed)); struct f2fs_extra_info { __le64 kbytes_written; __u8 reserved[497]; } __attribute__((packed)); struct f2fs_journal { union { __le16 n_nats; __le16 n_sits; }; union { struct nat_journal nat_j; struct sit_journal sit_j; struct f2fs_extra_info info; }; } __attribute__((packed)); struct f2fs_summary_block { struct f2fs_summary entries[512]; struct f2fs_journal journal; struct summary_footer footer; } __attribute__((packed)); enum { ALLOC_NODE = 0, LOOKUP_NODE = 1, LOOKUP_NODE_RA = 2, }; struct f2fs_map_blocks { struct block_device *m_bdev; block_t m_pblk; block_t m_lblk; unsigned int m_len; unsigned int m_flags; long unsigned int *m_next_pgofs; long unsigned int *m_next_extent; int m_seg_type; bool m_may_create; bool m_multidev_dio; }; enum { F2FS_GET_BLOCK_DEFAULT = 0, F2FS_GET_BLOCK_FIEMAP = 1, F2FS_GET_BLOCK_BMAP = 2, F2FS_GET_BLOCK_DIO = 3, F2FS_GET_BLOCK_PRE_DIO = 4, F2FS_GET_BLOCK_PRE_AIO = 5, F2FS_GET_BLOCK_PRECACHE = 6, }; struct dnode_of_data { struct inode *inode; struct page *inode_page; struct page *node_page; nid_t nid; unsigned int ofs_in_node; bool inode_page_locked; bool node_changed; char cur_level; char max_level; block_t data_blkaddr; }; enum { CURSEG_HOT_DATA = 0, CURSEG_WARM_DATA = 1, CURSEG_COLD_DATA = 2, CURSEG_HOT_NODE = 3, CURSEG_WARM_NODE = 4, CURSEG_COLD_NODE = 5, NR_PERSISTENT_LOG = 6, CURSEG_COLD_DATA_PINNED = 6, CURSEG_ALL_DATA_ATGC = 7, NO_CHECK_TYPE = 8, }; struct segment_allocation; struct seg_entry; struct sec_entry; struct sit_info { const struct segment_allocation *s_ops; block_t sit_base_addr; block_t sit_blocks; block_t written_valid_blocks; char *bitmap; char *sit_bitmap; unsigned int bitmap_size; long unsigned int *tmp_map; long unsigned int *dirty_sentries_bitmap; unsigned int dirty_sentries; unsigned int sents_per_block; struct rw_semaphore sentry_lock; struct seg_entry *sentries; struct sec_entry *sec_entries; long long unsigned int elapsed_time; long long unsigned int mounted_time; long long unsigned int min_mtime; long long unsigned int max_mtime; long long unsigned int dirty_min_mtime; long long unsigned int dirty_max_mtime; unsigned int last_victim[5]; }; struct free_segmap_info { unsigned int start_segno; unsigned int free_segments; unsigned int free_sections; spinlock_t segmap_lock; long unsigned int *free_segmap; long unsigned int *free_secmap; }; struct victim_selection; struct dirty_seglist_info { const struct victim_selection *v_ops; long unsigned int *dirty_segmap[8]; long unsigned int *dirty_secmap; struct mutex seglist_lock; int nr_dirty[8]; long unsigned int *victim_secmap; }; struct curseg_info { struct mutex curseg_mutex; struct f2fs_summary_block *sum_blk; struct rw_semaphore journal_rwsem; struct f2fs_journal *journal; unsigned char alloc_type; short unsigned int seg_type; unsigned int segno; short unsigned int next_blkoff; unsigned int zone; unsigned int next_segno; int fragment_remained_chunk; bool inited; }; enum cp_reason_type { CP_NO_NEEDED = 0, CP_NON_REGULAR = 1, CP_COMPRESSED = 2, CP_HARDLINK = 3, CP_SB_NEED_CP = 4, CP_WRONG_PINO = 5, CP_NO_SPC_ROLL = 6, CP_NODE_NEED_CP = 7, CP_FASTBOOT_MODE = 8, CP_SPEC_LOG_NUM = 9, CP_RECOVER_DIR = 10, }; enum { FS_MODE_ADAPTIVE = 0, FS_MODE_LFS = 1, FS_MODE_FRAGMENT_SEG = 2, FS_MODE_FRAGMENT_BLK = 3, }; enum { COMPR_MODE_FS = 0, COMPR_MODE_USER = 1, }; enum compress_algorithm_type { COMPRESS_LZO = 0, COMPRESS_LZ4 = 1, COMPRESS_ZSTD = 2, COMPRESS_LZORLE = 3, COMPRESS_MAX = 4, }; enum compress_flag { COMPRESS_CHKSUM = 0, COMPRESS_MAX_FLAG = 1, }; struct f2fs_gc_kthread { struct task_struct *f2fs_gc_task; wait_queue_head_t gc_wait_queue_head; unsigned int urgent_sleep_time; unsigned int min_sleep_time; unsigned int max_sleep_time; unsigned int no_gc_sleep_time; unsigned int gc_wake; wait_queue_head_t fggc_wq; }; struct iostat_lat_info { long unsigned int sum_lat[9]; long unsigned int peak_lat[9]; unsigned int bio_cnt[9]; }; struct node_info { nid_t nid; nid_t ino; block_t blk_addr; unsigned char version; unsigned char flag; }; enum { GC_CB = 0, GC_GREEDY = 1, GC_AT = 2, ALLOC_NEXT = 3, FLUSH_DEVICE = 4, MAX_GC_POLICY = 5, }; struct seg_entry { unsigned int type: 6; unsigned int valid_blocks: 10; unsigned int ckpt_valid_blocks: 10; unsigned int padding: 6; unsigned char *cur_valid_map; unsigned char *ckpt_valid_map; unsigned char *discard_map; long long unsigned int mtime; }; struct sec_entry { unsigned int valid_blocks; }; struct segment_allocation { void (*allocate_segment)(struct f2fs_sb_info *, int, bool); }; enum dirty_type { DIRTY_HOT_DATA = 0, DIRTY_WARM_DATA = 1, DIRTY_COLD_DATA = 2, DIRTY_HOT_NODE = 3, DIRTY_WARM_NODE = 4, DIRTY_COLD_NODE = 5, DIRTY = 6, PRE = 7, NR_DIRTY_TYPE = 8, }; struct victim_selection { int (*get_victim)(struct f2fs_sb_info *, unsigned int *, int, int, char, long long unsigned int); }; enum { READ_IO = 0, WRITE_SYNC_IO = 1, WRITE_ASYNC_IO = 2, MAX_IO_TYPE = 3, }; struct f2fs_gc_range { __u32 sync; __u64 start; __u64 len; }; struct f2fs_defragment { __u64 start; __u64 len; }; struct f2fs_move_range { __u32 dst_fd; __u64 pos_in; __u64 pos_out; __u64 len; }; struct f2fs_flush_device { __u32 dev_num; __u32 segments; }; struct f2fs_sectrim_range { __u64 start; __u64 len; __u64 flags; }; struct f2fs_comp_option { __u8 algorithm; __u8 log_cluster_size; }; struct fsverity_info; enum { BLK_RW_ASYNC = 0, BLK_RW_SYNC = 1, }; typedef void * (*ZSTD_allocFunction)(void *, size_t); typedef void (*ZSTD_freeFunction)(void *, void *); typedef struct { ZSTD_allocFunction customAlloc; ZSTD_freeFunction customFree; void *opaque; } ZSTD_customMem; struct cp_control { int reason; __u64 trim_start; __u64 trim_end; __u64 trim_minlen; }; enum { BGGC_MODE_ON = 0, BGGC_MODE_OFF = 1, BGGC_MODE_SYNC = 2, }; enum { WHINT_MODE_OFF = 0, WHINT_MODE_USER = 1, WHINT_MODE_FS = 2, }; enum { ALLOC_MODE_DEFAULT = 0, ALLOC_MODE_REUSE = 1, }; enum { DISCARD_UNIT_BLOCK = 0, DISCARD_UNIT_SEGMENT = 1, DISCARD_UNIT_SECTION = 2, }; enum { LFS = 0, SSR = 1, AT_SSR = 2, }; enum { BG_GC = 0, FG_GC = 1, }; struct victim_sel_policy { int alloc_mode; int gc_mode; long unsigned int *dirty_bitmap; unsigned int max_search; unsigned int offset; unsigned int ofs_unit; unsigned int min_cost; long long unsigned int oldest_age; unsigned int min_segno; long long unsigned int age; long long unsigned int age_threshold; }; enum { F2FS_IPU_FORCE = 0, F2FS_IPU_SSR = 1, F2FS_IPU_UTIL = 2, F2FS_IPU_SSR_UTIL = 3, F2FS_IPU_FSYNC = 4, F2FS_IPU_ASYNC = 5, F2FS_IPU_NOCACHE = 6, }; struct f2fs_iostat_latency { unsigned int peak_lat; unsigned int avg_lat; unsigned int cnt; }; struct trace_event_raw_f2fs__inode { struct trace_entry ent; dev_t dev; ino_t ino; ino_t pino; umode_t mode; loff_t size; unsigned int nlink; blkcnt_t blocks; __u8 advise; char __data[0]; }; struct trace_event_raw_f2fs__inode_exit { struct trace_entry ent; dev_t dev; ino_t ino; int ret; char __data[0]; }; struct trace_event_raw_f2fs_sync_file_exit { struct trace_entry ent; dev_t dev; ino_t ino; int cp_reason; int datasync; int ret; char __data[0]; }; struct trace_event_raw_f2fs_sync_fs { struct trace_entry ent; dev_t dev; int dirty; int wait; char __data[0]; }; struct trace_event_raw_f2fs_unlink_enter { struct trace_entry ent; dev_t dev; ino_t ino; loff_t size; blkcnt_t blocks; const char *name; char __data[0]; }; struct trace_event_raw_f2fs_truncate_data_blocks_range { struct trace_entry ent; dev_t dev; ino_t ino; nid_t nid; unsigned int ofs; int free; char __data[0]; }; struct trace_event_raw_f2fs__truncate_op { struct trace_entry ent; dev_t dev; ino_t ino; loff_t size; blkcnt_t blocks; u64 from; char __data[0]; }; struct trace_event_raw_f2fs__truncate_node { struct trace_entry ent; dev_t dev; ino_t ino; nid_t nid; block_t blk_addr; char __data[0]; }; struct trace_event_raw_f2fs_truncate_partial_nodes { struct trace_entry ent; dev_t dev; ino_t ino; nid_t nid[3]; int depth; int err; char __data[0]; }; struct trace_event_raw_f2fs_file_write_iter { struct trace_entry ent; dev_t dev; ino_t ino; long unsigned int offset; long unsigned int length; int ret; char __data[0]; }; struct trace_event_raw_f2fs_map_blocks { struct trace_entry ent; dev_t dev; ino_t ino; block_t m_lblk; block_t m_pblk; unsigned int m_len; unsigned int m_flags; int m_seg_type; bool m_may_create; bool m_multidev_dio; int create; int flag; int ret; char __data[0]; }; struct trace_event_raw_f2fs_background_gc { struct trace_entry ent; dev_t dev; unsigned int wait_ms; unsigned int prefree; unsigned int free; char __data[0]; }; struct trace_event_raw_f2fs_gc_begin { struct trace_entry ent; dev_t dev; bool sync; bool background; long long int dirty_nodes; long long int dirty_dents; long long int dirty_imeta; unsigned int free_sec; unsigned int free_seg; int reserved_seg; unsigned int prefree_seg; char __data[0]; }; struct trace_event_raw_f2fs_gc_end { struct trace_entry ent; dev_t dev; int ret; int seg_freed; int sec_freed; long long int dirty_nodes; long long int dirty_dents; long long int dirty_imeta; unsigned int free_sec; unsigned int free_seg; int reserved_seg; unsigned int prefree_seg; char __data[0]; }; struct trace_event_raw_f2fs_get_victim { struct trace_entry ent; dev_t dev; int type; int gc_type; int alloc_mode; int gc_mode; unsigned int victim; unsigned int cost; unsigned int ofs_unit; unsigned int pre_victim; unsigned int prefree; unsigned int free; char __data[0]; }; struct trace_event_raw_f2fs_lookup_start { struct trace_entry ent; dev_t dev; ino_t ino; u32 __data_loc_name; unsigned int flags; char __data[0]; }; struct trace_event_raw_f2fs_lookup_end { struct trace_entry ent; dev_t dev; ino_t ino; u32 __data_loc_name; nid_t cino; int err; char __data[0]; }; struct trace_event_raw_f2fs_readdir { struct trace_entry ent; dev_t dev; ino_t ino; loff_t start; loff_t end; int err; char __data[0]; }; struct trace_event_raw_f2fs_fallocate { struct trace_entry ent; dev_t dev; ino_t ino; int mode; loff_t offset; loff_t len; loff_t size; blkcnt_t blocks; int ret; char __data[0]; }; struct trace_event_raw_f2fs_direct_IO_enter { struct trace_entry ent; dev_t dev; ino_t ino; loff_t pos; long unsigned int len; int rw; char __data[0]; }; struct trace_event_raw_f2fs_direct_IO_exit { struct trace_entry ent; dev_t dev; ino_t ino; loff_t pos; long unsigned int len; int rw; int ret; char __data[0]; }; struct trace_event_raw_f2fs_reserve_new_blocks { struct trace_entry ent; dev_t dev; nid_t nid; unsigned int ofs_in_node; blkcnt_t count; char __data[0]; }; struct trace_event_raw_f2fs__submit_page_bio { struct trace_entry ent; dev_t dev; ino_t ino; long unsigned int index; block_t old_blkaddr; block_t new_blkaddr; int op; int op_flags; int temp; int type; char __data[0]; }; struct trace_event_raw_f2fs__bio { struct trace_entry ent; dev_t dev; dev_t target; int op; int op_flags; int type; sector_t sector; unsigned int size; char __data[0]; }; struct trace_event_raw_f2fs_write_begin { struct trace_entry ent; dev_t dev; ino_t ino; loff_t pos; unsigned int len; unsigned int flags; char __data[0]; }; struct trace_event_raw_f2fs_write_end { struct trace_entry ent; dev_t dev; ino_t ino; loff_t pos; unsigned int len; unsigned int copied; char __data[0]; }; struct trace_event_raw_f2fs__page { struct trace_entry ent; dev_t dev; ino_t ino; int type; int dir; long unsigned int index; int dirty; int uptodate; char __data[0]; }; struct trace_event_raw_f2fs_filemap_fault { struct trace_entry ent; dev_t dev; ino_t ino; long unsigned int index; long unsigned int ret; char __data[0]; }; struct trace_event_raw_f2fs_writepages { struct trace_entry ent; dev_t dev; ino_t ino; int type; int dir; long int nr_to_write; long int pages_skipped; loff_t range_start; loff_t range_end; long unsigned int writeback_index; int sync_mode; char for_kupdate; char for_background; char tagged_writepages; char for_reclaim; char range_cyclic; char for_sync; char __data[0]; }; struct trace_event_raw_f2fs_readpages { struct trace_entry ent; dev_t dev; ino_t ino; long unsigned int start; unsigned int nrpage; char __data[0]; }; struct trace_event_raw_f2fs_write_checkpoint { struct trace_entry ent; dev_t dev; int reason; char *msg; char __data[0]; }; struct trace_event_raw_f2fs_discard { struct trace_entry ent; dev_t dev; block_t blkstart; block_t blklen; char __data[0]; }; struct trace_event_raw_f2fs_issue_reset_zone { struct trace_entry ent; dev_t dev; block_t blkstart; char __data[0]; }; struct trace_event_raw_f2fs_issue_flush { struct trace_entry ent; dev_t dev; unsigned int nobarrier; unsigned int flush_merge; int ret; char __data[0]; }; struct trace_event_raw_f2fs_lookup_extent_tree_start { struct trace_entry ent; dev_t dev; ino_t ino; unsigned int pgofs; char __data[0]; }; struct trace_event_raw_f2fs_lookup_extent_tree_end { struct trace_entry ent; dev_t dev; ino_t ino; unsigned int pgofs; unsigned int fofs; u32 blk; unsigned int len; char __data[0]; }; struct trace_event_raw_f2fs_update_extent_tree_range { struct trace_entry ent; dev_t dev; ino_t ino; unsigned int pgofs; u32 blk; unsigned int len; char __data[0]; }; struct trace_event_raw_f2fs_shrink_extent_tree { struct trace_entry ent; dev_t dev; unsigned int node_cnt; unsigned int tree_cnt; char __data[0]; }; struct trace_event_raw_f2fs_destroy_extent_tree { struct trace_entry ent; dev_t dev; ino_t ino; unsigned int node_cnt; char __data[0]; }; struct trace_event_raw_f2fs_sync_dirty_inodes { struct trace_entry ent; dev_t dev; int type; s64 count; char __data[0]; }; struct trace_event_raw_f2fs_shutdown { struct trace_entry ent; dev_t dev; unsigned int mode; int ret; char __data[0]; }; struct trace_event_raw_f2fs_zip_start { struct trace_entry ent; dev_t dev; ino_t ino; long unsigned int idx; unsigned int size; unsigned int algtype; char __data[0]; }; struct trace_event_raw_f2fs_zip_end { struct trace_entry ent; dev_t dev; ino_t ino; long unsigned int idx; unsigned int size; unsigned int ret; char __data[0]; }; struct trace_event_raw_f2fs_iostat { struct trace_entry ent; dev_t dev; long long unsigned int app_dio; long long unsigned int app_bio; long long unsigned int app_wio; long long unsigned int app_mio; long long unsigned int fs_dio; long long unsigned int fs_nio; long long unsigned int fs_mio; long long unsigned int fs_gc_dio; long long unsigned int fs_gc_nio; long long unsigned int fs_cp_dio; long long unsigned int fs_cp_nio; long long unsigned int fs_cp_mio; long long unsigned int app_drio; long long unsigned int app_brio; long long unsigned int app_rio; long long unsigned int app_mrio; long long unsigned int fs_drio; long long unsigned int fs_gdrio; long long unsigned int fs_cdrio; long long unsigned int fs_nrio; long long unsigned int fs_mrio; long long unsigned int fs_discard; char __data[0]; }; struct trace_event_raw_f2fs_iostat_latency { struct trace_entry ent; dev_t dev; unsigned int d_rd_peak; unsigned int d_rd_avg; unsigned int d_rd_cnt; unsigned int n_rd_peak; unsigned int n_rd_avg; unsigned int n_rd_cnt; unsigned int m_rd_peak; unsigned int m_rd_avg; unsigned int m_rd_cnt; unsigned int d_wr_s_peak; unsigned int d_wr_s_avg; unsigned int d_wr_s_cnt; unsigned int n_wr_s_peak; unsigned int n_wr_s_avg; unsigned int n_wr_s_cnt; unsigned int m_wr_s_peak; unsigned int m_wr_s_avg; unsigned int m_wr_s_cnt; unsigned int d_wr_as_peak; unsigned int d_wr_as_avg; unsigned int d_wr_as_cnt; unsigned int n_wr_as_peak; unsigned int n_wr_as_avg; unsigned int n_wr_as_cnt; unsigned int m_wr_as_peak; unsigned int m_wr_as_avg; unsigned int m_wr_as_cnt; char __data[0]; }; struct trace_event_raw_f2fs_bmap { struct trace_entry ent; dev_t dev; ino_t ino; sector_t lblock; sector_t pblock; char __data[0]; }; struct trace_event_raw_f2fs_fiemap { struct trace_entry ent; dev_t dev; ino_t ino; sector_t lblock; sector_t pblock; long long unsigned int len; unsigned int flags; int ret; char __data[0]; }; struct trace_event_data_offsets_f2fs__inode {}; struct trace_event_data_offsets_f2fs__inode_exit {}; struct trace_event_data_offsets_f2fs_sync_file_exit {}; struct trace_event_data_offsets_f2fs_sync_fs {}; struct trace_event_data_offsets_f2fs_unlink_enter {}; struct trace_event_data_offsets_f2fs_truncate_data_blocks_range {}; struct trace_event_data_offsets_f2fs__truncate_op {}; struct trace_event_data_offsets_f2fs__truncate_node {}; struct trace_event_data_offsets_f2fs_truncate_partial_nodes {}; struct trace_event_data_offsets_f2fs_file_write_iter {}; struct trace_event_data_offsets_f2fs_map_blocks {}; struct trace_event_data_offsets_f2fs_background_gc {}; struct trace_event_data_offsets_f2fs_gc_begin {}; struct trace_event_data_offsets_f2fs_gc_end {}; struct trace_event_data_offsets_f2fs_get_victim {}; struct trace_event_data_offsets_f2fs_lookup_start { u32 name; }; struct trace_event_data_offsets_f2fs_lookup_end { u32 name; }; struct trace_event_data_offsets_f2fs_readdir {}; struct trace_event_data_offsets_f2fs_fallocate {}; struct trace_event_data_offsets_f2fs_direct_IO_enter {}; struct trace_event_data_offsets_f2fs_direct_IO_exit {}; struct trace_event_data_offsets_f2fs_reserve_new_blocks {}; struct trace_event_data_offsets_f2fs__submit_page_bio {}; struct trace_event_data_offsets_f2fs__bio {}; struct trace_event_data_offsets_f2fs_write_begin {}; struct trace_event_data_offsets_f2fs_write_end {}; struct trace_event_data_offsets_f2fs__page {}; struct trace_event_data_offsets_f2fs_filemap_fault {}; struct trace_event_data_offsets_f2fs_writepages {}; struct trace_event_data_offsets_f2fs_readpages {}; struct trace_event_data_offsets_f2fs_write_checkpoint {}; struct trace_event_data_offsets_f2fs_discard {}; struct trace_event_data_offsets_f2fs_issue_reset_zone {}; struct trace_event_data_offsets_f2fs_issue_flush {}; struct trace_event_data_offsets_f2fs_lookup_extent_tree_start {}; struct trace_event_data_offsets_f2fs_lookup_extent_tree_end {}; struct trace_event_data_offsets_f2fs_update_extent_tree_range {}; struct trace_event_data_offsets_f2fs_shrink_extent_tree {}; struct trace_event_data_offsets_f2fs_destroy_extent_tree {}; struct trace_event_data_offsets_f2fs_sync_dirty_inodes {}; struct trace_event_data_offsets_f2fs_shutdown {}; struct trace_event_data_offsets_f2fs_zip_start {}; struct trace_event_data_offsets_f2fs_zip_end {}; struct trace_event_data_offsets_f2fs_iostat {}; struct trace_event_data_offsets_f2fs_iostat_latency {}; struct trace_event_data_offsets_f2fs_bmap {}; struct trace_event_data_offsets_f2fs_fiemap {}; typedef void (*btf_trace_f2fs_sync_file_enter)(void *, struct inode *); typedef void (*btf_trace_f2fs_sync_file_exit)(void *, struct inode *, int, int, int); typedef void (*btf_trace_f2fs_sync_fs)(void *, struct super_block *, int); typedef void (*btf_trace_f2fs_iget)(void *, struct inode *); typedef void (*btf_trace_f2fs_iget_exit)(void *, struct inode *, int); typedef void (*btf_trace_f2fs_evict_inode)(void *, struct inode *); typedef void (*btf_trace_f2fs_new_inode)(void *, struct inode *, int); typedef void (*btf_trace_f2fs_unlink_enter)(void *, struct inode *, struct dentry *); typedef void (*btf_trace_f2fs_unlink_exit)(void *, struct inode *, int); typedef void (*btf_trace_f2fs_drop_inode)(void *, struct inode *, int); typedef void (*btf_trace_f2fs_truncate)(void *, struct inode *); typedef void (*btf_trace_f2fs_truncate_data_blocks_range)(void *, struct inode *, nid_t, unsigned int, int); typedef void (*btf_trace_f2fs_truncate_blocks_enter)(void *, struct inode *, u64); typedef void (*btf_trace_f2fs_truncate_blocks_exit)(void *, struct inode *, int); typedef void (*btf_trace_f2fs_truncate_inode_blocks_enter)(void *, struct inode *, u64); typedef void (*btf_trace_f2fs_truncate_inode_blocks_exit)(void *, struct inode *, int); typedef void (*btf_trace_f2fs_truncate_nodes_enter)(void *, struct inode *, nid_t, block_t); typedef void (*btf_trace_f2fs_truncate_nodes_exit)(void *, struct inode *, int); typedef void (*btf_trace_f2fs_truncate_node)(void *, struct inode *, nid_t, block_t); typedef void (*btf_trace_f2fs_truncate_partial_nodes)(void *, struct inode *, nid_t *, int, int); typedef void (*btf_trace_f2fs_file_write_iter)(void *, struct inode *, long unsigned int, long unsigned int, int); typedef void (*btf_trace_f2fs_map_blocks)(void *, struct inode *, struct f2fs_map_blocks *, int, int, int); typedef void (*btf_trace_f2fs_background_gc)(void *, struct super_block *, unsigned int, unsigned int, unsigned int); typedef void (*btf_trace_f2fs_gc_begin)(void *, struct super_block *, bool, bool, long long int, long long int, long long int, unsigned int, unsigned int, int, unsigned int); typedef void (*btf_trace_f2fs_gc_end)(void *, struct super_block *, int, int, int, long long int, long long int, long long int, unsigned int, unsigned int, int, unsigned int); typedef void (*btf_trace_f2fs_get_victim)(void *, struct super_block *, int, int, struct victim_sel_policy *, unsigned int, unsigned int, unsigned int); typedef void (*btf_trace_f2fs_lookup_start)(void *, struct inode *, struct dentry *, unsigned int); typedef void (*btf_trace_f2fs_lookup_end)(void *, struct inode *, struct dentry *, nid_t, int); typedef void (*btf_trace_f2fs_readdir)(void *, struct inode *, loff_t, loff_t, int); typedef void (*btf_trace_f2fs_fallocate)(void *, struct inode *, int, loff_t, loff_t, int); typedef void (*btf_trace_f2fs_direct_IO_enter)(void *, struct inode *, loff_t, long unsigned int, int); typedef void (*btf_trace_f2fs_direct_IO_exit)(void *, struct inode *, loff_t, long unsigned int, int, int); typedef void (*btf_trace_f2fs_reserve_new_blocks)(void *, struct inode *, nid_t, unsigned int, blkcnt_t); typedef void (*btf_trace_f2fs_submit_page_bio)(void *, struct page *, struct f2fs_io_info *); typedef void (*btf_trace_f2fs_submit_page_write)(void *, struct page *, struct f2fs_io_info *); typedef void (*btf_trace_f2fs_prepare_write_bio)(void *, struct super_block *, int, struct bio *); typedef void (*btf_trace_f2fs_prepare_read_bio)(void *, struct super_block *, int, struct bio *); typedef void (*btf_trace_f2fs_submit_read_bio)(void *, struct super_block *, int, struct bio *); typedef void (*btf_trace_f2fs_submit_write_bio)(void *, struct super_block *, int, struct bio *); typedef void (*btf_trace_f2fs_write_begin)(void *, struct inode *, loff_t, unsigned int, unsigned int); typedef void (*btf_trace_f2fs_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int); typedef void (*btf_trace_f2fs_writepage)(void *, struct page *, int); typedef void (*btf_trace_f2fs_do_write_data_page)(void *, struct page *, int); typedef void (*btf_trace_f2fs_readpage)(void *, struct page *, int); typedef void (*btf_trace_f2fs_set_page_dirty)(void *, struct page *, int); typedef void (*btf_trace_f2fs_vm_page_mkwrite)(void *, struct page *, int); typedef void (*btf_trace_f2fs_register_inmem_page)(void *, struct page *, int); typedef void (*btf_trace_f2fs_commit_inmem_page)(void *, struct page *, int); typedef void (*btf_trace_f2fs_filemap_fault)(void *, struct inode *, long unsigned int, long unsigned int); typedef void (*btf_trace_f2fs_writepages)(void *, struct inode *, struct writeback_control *, int); typedef void (*btf_trace_f2fs_readpages)(void *, struct inode *, long unsigned int, unsigned int); typedef void (*btf_trace_f2fs_write_checkpoint)(void *, struct super_block *, int, char *); typedef void (*btf_trace_f2fs_queue_discard)(void *, struct block_device *, block_t, block_t); typedef void (*btf_trace_f2fs_issue_discard)(void *, struct block_device *, block_t, block_t); typedef void (*btf_trace_f2fs_remove_discard)(void *, struct block_device *, block_t, block_t); typedef void (*btf_trace_f2fs_issue_reset_zone)(void *, struct block_device *, block_t); typedef void (*btf_trace_f2fs_issue_flush)(void *, struct block_device *, unsigned int, unsigned int, int); typedef void (*btf_trace_f2fs_lookup_extent_tree_start)(void *, struct inode *, unsigned int); typedef void (*btf_trace_f2fs_lookup_extent_tree_end)(void *, struct inode *, unsigned int, struct extent_info *); typedef void (*btf_trace_f2fs_update_extent_tree_range)(void *, struct inode *, unsigned int, block_t, unsigned int); typedef void (*btf_trace_f2fs_shrink_extent_tree)(void *, struct f2fs_sb_info *, unsigned int, unsigned int); typedef void (*btf_trace_f2fs_destroy_extent_tree)(void *, struct inode *, unsigned int); typedef void (*btf_trace_f2fs_sync_dirty_inodes_enter)(void *, struct super_block *, int, s64); typedef void (*btf_trace_f2fs_sync_dirty_inodes_exit)(void *, struct super_block *, int, s64); typedef void (*btf_trace_f2fs_shutdown)(void *, struct f2fs_sb_info *, unsigned int, int); typedef void (*btf_trace_f2fs_compress_pages_start)(void *, struct inode *, long unsigned int, unsigned int, unsigned char); typedef void (*btf_trace_f2fs_decompress_pages_start)(void *, struct inode *, long unsigned int, unsigned int, unsigned char); typedef void (*btf_trace_f2fs_compress_pages_end)(void *, struct inode *, long unsigned int, unsigned int, int); typedef void (*btf_trace_f2fs_decompress_pages_end)(void *, struct inode *, long unsigned int, unsigned int, int); typedef void (*btf_trace_f2fs_iostat)(void *, struct f2fs_sb_info *, long long unsigned int *); typedef void (*btf_trace_f2fs_iostat_latency)(void *, struct f2fs_sb_info *, struct f2fs_iostat_latency(*)[3]); typedef void (*btf_trace_f2fs_bmap)(void *, struct inode *, sector_t, sector_t); typedef void (*btf_trace_f2fs_fiemap)(void *, struct inode *, sector_t, sector_t, long long unsigned int, unsigned int, int); enum { Opt_gc_background = 0, Opt_disable_roll_forward = 1, Opt_norecovery = 2, Opt_discard = 3, Opt_nodiscard = 4, Opt_noheap = 5, Opt_heap = 6, Opt_user_xattr = 7, Opt_nouser_xattr = 8, Opt_acl = 9, Opt_noacl = 10, Opt_active_logs = 11, Opt_disable_ext_identify = 12, Opt_inline_xattr = 13, Opt_noinline_xattr = 14, Opt_inline_xattr_size = 15, Opt_inline_data = 16, Opt_inline_dentry = 17, Opt_noinline_dentry = 18, Opt_flush_merge = 19, Opt_noflush_merge = 20, Opt_nobarrier = 21, Opt_fastboot = 22, Opt_extent_cache = 23, Opt_noextent_cache = 24, Opt_noinline_data = 25, Opt_data_flush = 26, Opt_reserve_root = 27, Opt_resgid = 28, Opt_resuid = 29, Opt_mode___5 = 30, Opt_io_size_bits = 31, Opt_fault_injection = 32, Opt_fault_type = 33, Opt_lazytime = 34, Opt_nolazytime = 35, Opt_quota = 36, Opt_noquota = 37, Opt_usrquota = 38, Opt_grpquota = 39, Opt_prjquota = 40, Opt_usrjquota = 41, Opt_grpjquota = 42, Opt_prjjquota = 43, Opt_offusrjquota = 44, Opt_offgrpjquota = 45, Opt_offprjjquota = 46, Opt_jqfmt_vfsold = 47, Opt_jqfmt_vfsv0 = 48, Opt_jqfmt_vfsv1 = 49, Opt_whint = 50, Opt_alloc = 51, Opt_fsync = 52, Opt_test_dummy_encryption = 53, Opt_inlinecrypt = 54, Opt_checkpoint_disable = 55, Opt_checkpoint_disable_cap = 56, Opt_checkpoint_disable_cap_perc = 57, Opt_checkpoint_enable = 58, Opt_checkpoint_merge = 59, Opt_nocheckpoint_merge = 60, Opt_compress_algorithm = 61, Opt_compress_log_size = 62, Opt_compress_extension = 63, Opt_nocompress_extension = 64, Opt_compress_chksum = 65, Opt_compress_mode = 66, Opt_compress_cache = 67, Opt_atgc = 68, Opt_gc_merge = 69, Opt_nogc_merge = 70, Opt_discard_unit = 71, Opt_err___4 = 72, }; struct f2fs_orphan_block { __le32 ino[1020]; __le32 reserved; __le16 blk_addr; __le16 blk_count; __le32 entry_count; __le32 check_sum; }; enum { NAT_BITMAP = 0, SIT_BITMAP = 1, }; struct ino_entry { struct list_head list; nid_t ino; unsigned int dirty_device; }; struct ckpt_req { struct completion wait; struct llist_node llnode; int ret; ktime_t queue_time; }; struct free_nid { struct list_head list; nid_t nid; int state; }; struct inode_entry { struct list_head list; struct inode *inode; }; struct rb_entry { struct rb_node rb_node; union { struct { unsigned int ofs; unsigned int len; }; long long unsigned int key; }; }; enum need_lock_type { LOCK_REQ = 0, LOCK_DONE = 1, LOCK_RETRY = 2, }; struct gc_inode_list { struct list_head ilist; struct xarray iroot; }; struct victim_info { long long unsigned int mtime; unsigned int segno; }; struct victim_entry { struct rb_node rb_node; union { struct { long long unsigned int mtime; unsigned int segno; }; struct victim_info vi; }; struct list_head list; }; enum { BIOSET_NEED_BVECS = 1, BIOSET_NEED_RESCUER = 2, BIOSET_PERCPU_CACHE = 4, }; struct bio_entry { struct bio *bio; struct list_head list; }; struct f2fs_private_dio { struct inode *inode; void *orig_private; bio_end_io_t *orig_end_io; bool write; }; enum mem_type { FREE_NIDS = 0, NAT_ENTRIES = 1, DIRTY_DENTS = 2, INO_ENTRIES = 3, EXTENT_CACHE = 4, INMEM_PAGES = 5, DISCARD_CACHE = 6, COMPRESS_PAGE = 7, BASE_CHECK = 8, }; struct inmem_pages { struct list_head list; struct page *page; block_t old_addr; }; struct bio_post_read_ctx; struct bio_iostat_ctx { struct f2fs_sb_info *sbi; long unsigned int submit_ts; enum page_type type; struct bio_post_read_ctx *post_read_ctx; }; struct bio_post_read_ctx { struct bio *bio; struct f2fs_sb_info *sbi; struct work_struct work; unsigned int enabled_steps; block_t fs_blkaddr; }; enum bio_post_read_step { STEP_DECRYPT = 0, STEP_DECOMPRESS = 0, STEP_VERITY = 0, }; struct f2fs_nat_block { struct f2fs_nat_entry entries[455]; } __attribute__((packed)); enum { NAT_JOURNAL = 0, SIT_JOURNAL = 1, }; struct fsync_node_entry { struct list_head list; struct page *page; unsigned int seq_id; }; enum { IS_CHECKPOINTED = 0, HAS_FSYNCED_INODE = 1, HAS_LAST_FSYNC = 2, IS_DIRTY = 3, IS_PREALLOC = 4, }; struct nat_entry { struct list_head list; struct node_info ni; }; struct nat_entry_set { struct list_head set_list; struct list_head entry_list; nid_t set; unsigned int entry_cnt; }; struct f2fs_sit_block { struct f2fs_sit_entry entries[55]; } __attribute__((packed)); struct discard_entry { struct list_head list; block_t start_blkaddr; unsigned char discard_map[64]; }; enum { D_PREP = 0, D_PARTIAL = 1, D_SUBMIT = 2, D_DONE = 3, }; struct discard_info { block_t lstart; block_t len; block_t start; }; struct discard_cmd { struct rb_node rb_node; union { struct { block_t lstart; block_t len; block_t start; }; struct discard_info di; }; struct list_head list; struct completion wait; struct block_device *bdev; short unsigned int ref; unsigned char state; unsigned char queued; int error; spinlock_t lock; short unsigned int bio_ref; }; enum { DPOLICY_BG = 0, DPOLICY_FORCE = 1, DPOLICY_FSTRIM = 2, DPOLICY_UMOUNT = 3, MAX_DPOLICY = 4, }; struct discard_policy { int type; unsigned int min_interval; unsigned int mid_interval; unsigned int max_interval; unsigned int max_requests; unsigned int io_aware_gran; bool io_aware; bool sync; bool ordered; bool timeout; unsigned int granularity; }; struct flush_cmd { struct completion wait; struct llist_node llnode; nid_t ino; int ret; }; enum { ALLOC_RIGHT = 0, ALLOC_LEFT = 1, }; struct sit_entry_set { struct list_head set_list; unsigned int start_segno; unsigned int entry_cnt; }; struct fsync_inode_entry { struct list_head list; struct inode *inode; block_t blkaddr; block_t last_dentry; }; enum { GC_THREAD = 0, SM_INFO = 1, DCC_INFO = 2, NM_INFO = 3, F2FS_SBI = 4, STAT_INFO = 5, RESERVED_BLOCKS = 6, CPRC_INFO = 7, ATGC_INFO = 8, }; struct f2fs_attr { struct attribute attr; ssize_t (*show)(struct f2fs_attr *, struct f2fs_sb_info *, char *); ssize_t (*store)(struct f2fs_attr *, struct f2fs_sb_info *, const char *, size_t); int struct_type; int offset; int id; }; struct f2fs_xattr_header { __le32 h_magic; __le32 h_refcount; __u32 h_reserved[4]; }; struct f2fs_xattr_entry { __u8 e_name_index; __u8 e_name_len; __le16 e_value_size; char e_name[0]; }; struct f2fs_acl_entry { __le16 e_tag; __le16 e_perm; __le32 e_id; }; struct f2fs_acl_header { __le32 a_version; }; typedef int __kernel_key_t; typedef unsigned int __kernel_mode_t; typedef unsigned int __kernel_uid_t; typedef unsigned int __kernel_gid_t; typedef __kernel_key_t key_t; struct ipc_perm { __kernel_key_t key; __kernel_uid_t uid; __kernel_gid_t gid; __kernel_uid_t cuid; __kernel_gid_t cgid; __kernel_mode_t mode; short unsigned int seq; }; struct ipc64_perm { __kernel_key_t key; __kernel_uid32_t uid; __kernel_gid32_t gid; __kernel_uid32_t cuid; __kernel_gid32_t cgid; __kernel_mode_t mode; unsigned char __pad1[0]; short unsigned int seq; short unsigned int __pad2; __kernel_ulong_t __unused1; __kernel_ulong_t __unused2; }; struct kern_ipc_perm { spinlock_t lock; bool deleted; int id; key_t key; kuid_t uid; kgid_t gid; kuid_t cuid; kgid_t cgid; umode_t mode; long unsigned int seq; void *security; struct rhash_head khtnode; struct callback_head rcu; refcount_t refcount; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct ipc_params { key_t key; int flg; union { size_t size; int nsems; } u; }; struct ipc_ops { int (*getnew)(struct ipc_namespace *, struct ipc_params *); int (*associate)(struct kern_ipc_perm *, int); int (*more_checks)(struct kern_ipc_perm *, struct ipc_params *); }; struct ipc_proc_iface { const char *path; const char *header; int ids; int (*show)(struct seq_file *, void *); }; struct ipc_proc_iter { struct ipc_namespace *ns; struct pid_namespace *pid_ns; struct ipc_proc_iface *iface; }; struct msg_msgseg; struct msg_msg { struct list_head m_list; long int m_type; size_t m_ts; struct msg_msgseg *next; void *security; }; struct msg_msgseg { struct msg_msgseg *next; }; typedef int __kernel_ipc_pid_t; struct msgbuf { __kernel_long_t mtype; char mtext[1]; }; struct msg; struct msqid_ds { struct ipc_perm msg_perm; struct msg *msg_first; struct msg *msg_last; __kernel_old_time_t msg_stime; __kernel_old_time_t msg_rtime; __kernel_old_time_t msg_ctime; long unsigned int msg_lcbytes; long unsigned int msg_lqbytes; short unsigned int msg_cbytes; short unsigned int msg_qnum; short unsigned int msg_qbytes; __kernel_ipc_pid_t msg_lspid; __kernel_ipc_pid_t msg_lrpid; }; struct msqid64_ds { struct ipc64_perm msg_perm; long int msg_stime; long int msg_rtime; long int msg_ctime; long unsigned int msg_cbytes; long unsigned int msg_qnum; long unsigned int msg_qbytes; __kernel_pid_t msg_lspid; __kernel_pid_t msg_lrpid; long unsigned int __unused4; long unsigned int __unused5; }; struct msginfo { int msgpool; int msgmap; int msgmax; int msgmnb; int msgmni; int msgssz; int msgtql; short unsigned int msgseg; }; struct msg_queue { struct kern_ipc_perm q_perm; time64_t q_stime; time64_t q_rtime; time64_t q_ctime; long unsigned int q_cbytes; long unsigned int q_qnum; long unsigned int q_qbytes; struct pid *q_lspid; struct pid *q_lrpid; struct list_head q_messages; struct list_head q_receivers; struct list_head q_senders; long: 64; long: 64; }; struct msg_receiver { struct list_head r_list; struct task_struct *r_tsk; int r_mode; long int r_msgtype; long int r_maxsize; struct msg_msg *r_msg; }; struct msg_sender { struct list_head list; struct task_struct *tsk; size_t msgsz; }; struct sem; struct sem_queue; struct sem_undo; struct semid_ds { struct ipc_perm sem_perm; __kernel_old_time_t sem_otime; __kernel_old_time_t sem_ctime; struct sem *sem_base; struct sem_queue *sem_pending; struct sem_queue **sem_pending_last; struct sem_undo *undo; short unsigned int sem_nsems; }; struct sem { int semval; struct pid *sempid; spinlock_t lock; struct list_head pending_alter; struct list_head pending_const; time64_t sem_otime; }; struct sembuf; struct sem_queue { struct list_head list; struct task_struct *sleeper; struct sem_undo *undo; struct pid *pid; int status; struct sembuf *sops; struct sembuf *blocking; int nsops; bool alter; bool dupsop; }; struct sem_undo { struct list_head list_proc; struct callback_head rcu; struct sem_undo_list *ulp; struct list_head list_id; int semid; short int *semadj; }; struct semid64_ds { struct ipc64_perm sem_perm; __kernel_long_t sem_otime; __kernel_ulong_t __unused1; __kernel_long_t sem_ctime; __kernel_ulong_t __unused2; __kernel_ulong_t sem_nsems; __kernel_ulong_t __unused3; __kernel_ulong_t __unused4; }; struct sembuf { short unsigned int sem_num; short int sem_op; short int sem_flg; }; struct seminfo { int semmap; int semmni; int semmns; int semmnu; int semmsl; int semopm; int semume; int semusz; int semvmx; int semaem; }; struct sem_undo_list { refcount_t refcnt; spinlock_t lock; struct list_head list_proc; }; struct sem_array { struct kern_ipc_perm sem_perm; time64_t sem_ctime; struct list_head pending_alter; struct list_head pending_const; struct list_head list_id; int sem_nsems; int complex_count; unsigned int use_global_lock; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; struct sem sems[0]; }; struct shmid_ds { struct ipc_perm shm_perm; int shm_segsz; __kernel_old_time_t shm_atime; __kernel_old_time_t shm_dtime; __kernel_old_time_t shm_ctime; __kernel_ipc_pid_t shm_cpid; __kernel_ipc_pid_t shm_lpid; short unsigned int shm_nattch; short unsigned int shm_unused; void *shm_unused2; void *shm_unused3; }; struct shmid64_ds { struct ipc64_perm shm_perm; size_t shm_segsz; long int shm_atime; long int shm_dtime; long int shm_ctime; __kernel_pid_t shm_cpid; __kernel_pid_t shm_lpid; long unsigned int shm_nattch; long unsigned int __unused4; long unsigned int __unused5; }; struct shminfo64 { long unsigned int shmmax; long unsigned int shmmin; long unsigned int shmmni; long unsigned int shmseg; long unsigned int shmall; long unsigned int __unused1; long unsigned int __unused2; long unsigned int __unused3; long unsigned int __unused4; }; struct shminfo { int shmmax; int shmmin; int shmmni; int shmseg; int shmall; }; struct shm_info { int used_ids; __kernel_ulong_t shm_tot; __kernel_ulong_t shm_rss; __kernel_ulong_t shm_swp; __kernel_ulong_t swap_attempts; __kernel_ulong_t swap_successes; }; struct shmid_kernel { struct kern_ipc_perm shm_perm; struct file *shm_file; long unsigned int shm_nattch; long unsigned int shm_segsz; time64_t shm_atim; time64_t shm_dtim; time64_t shm_ctim; struct pid *shm_cprid; struct pid *shm_lprid; struct ucounts *mlock_ucounts; struct task_struct *shm_creator; struct list_head shm_clist; struct ipc_namespace *ns; long: 64; long: 64; long: 64; }; struct shm_file_data { int id; struct ipc_namespace *ns; struct file *file; const struct vm_operations_struct *vm_ops; }; enum key_state { KEY_IS_UNINSTANTIATED = 0, KEY_IS_POSITIVE = 1, }; struct key_user { struct rb_node node; struct mutex cons_lock; spinlock_t lock; refcount_t usage; atomic_t nkeys; atomic_t nikeys; kuid_t uid; int qnkeys; int qnbytes; }; enum key_need_perm { KEY_NEED_UNSPECIFIED = 0, KEY_NEED_VIEW = 1, KEY_NEED_READ = 2, KEY_NEED_WRITE = 3, KEY_NEED_SEARCH = 4, KEY_NEED_LINK = 5, KEY_NEED_SETATTR = 6, KEY_NEED_UNLINK = 7, KEY_SYSADMIN_OVERRIDE = 8, KEY_AUTHTOKEN_OVERRIDE = 9, KEY_DEFER_PERM_CHECK = 10, }; enum key_notification_subtype { NOTIFY_KEY_INSTANTIATED = 0, NOTIFY_KEY_UPDATED = 1, NOTIFY_KEY_LINKED = 2, NOTIFY_KEY_UNLINKED = 3, NOTIFY_KEY_CLEARED = 4, NOTIFY_KEY_REVOKED = 5, NOTIFY_KEY_INVALIDATED = 6, NOTIFY_KEY_SETATTR = 7, }; struct assoc_array_edit; struct assoc_array_ops { long unsigned int (*get_key_chunk)(const void *, int); long unsigned int (*get_object_key_chunk)(const void *, int); bool (*compare_object)(const void *, const void *); int (*diff_objects)(const void *, const void *); void (*free_object)(void *); }; struct assoc_array_node { struct assoc_array_ptr *back_pointer; u8 parent_slot; struct assoc_array_ptr *slots[16]; long unsigned int nr_leaves_on_branch; }; struct assoc_array_shortcut { struct assoc_array_ptr *back_pointer; int parent_slot; int skip_to_level; struct assoc_array_ptr *next_node; long unsigned int index_key[0]; }; struct assoc_array_edit___2 { struct callback_head rcu; struct assoc_array *array; const struct assoc_array_ops *ops; const struct assoc_array_ops *ops_for_excised_subtree; struct assoc_array_ptr *leaf; struct assoc_array_ptr **leaf_p; struct assoc_array_ptr *dead_leaf; struct assoc_array_ptr *new_meta[3]; struct assoc_array_ptr *excised_meta[1]; struct assoc_array_ptr *excised_subtree; struct assoc_array_ptr **set_backpointers[16]; struct assoc_array_ptr *set_backpointers_to; struct assoc_array_node *adjust_count_on; long int adjust_count_by; struct { struct assoc_array_ptr **ptr; struct assoc_array_ptr *to; } set[2]; struct { u8 *p; u8 to; } set_parent_slot[1]; u8 segment_cache[17]; }; struct keyring_search_context { struct keyring_index_key index_key; const struct cred *cred; struct key_match_data match_data; unsigned int flags; int (*iterator)(const void *, void *); int skipped_ret; bool possessed; key_ref_t result; time64_t now; }; struct keyring_read_iterator_context { size_t buflen; size_t count; key_serial_t *buffer; }; struct keyctl_dh_params { union { __s32 private; __s32 priv; }; __s32 prime; __s32 base; }; struct keyctl_kdf_params { char *hashname; char *otherinfo; __u32 otherinfolen; __u32 __spare[8]; }; struct keyctl_pkey_query { __u32 supported_ops; __u32 key_size; __u16 max_data_size; __u16 max_sig_size; __u16 max_enc_size; __u16 max_dec_size; __u32 __spare[10]; }; struct keyctl_pkey_params { __s32 key_id; __u32 in_len; union { __u32 out_len; __u32 in2_len; }; __u32 __spare[7]; }; struct request_key_auth { struct callback_head rcu; struct key *target_key; struct key *dest_keyring; const struct cred *cred; void *callout_info; size_t callout_len; pid_t pid; char op[8]; }; struct user_key_payload { struct callback_head rcu; short unsigned int datalen; long: 48; char data[0]; }; enum { Opt_err___5 = 0, Opt_enc = 1, Opt_hash = 2, }; struct vfs_cap_data { __le32 magic_etc; struct { __le32 permitted; __le32 inheritable; } data[2]; }; struct vfs_ns_cap_data { __le32 magic_etc; struct { __le32 permitted; __le32 inheritable; } data[2]; __le32 rootid; }; struct cpu_vfs_cap_data { __u32 magic_etc; kernel_cap_t permitted; kernel_cap_t inheritable; kuid_t rootid; }; enum devcg_behavior { DEVCG_DEFAULT_NONE = 0, DEVCG_DEFAULT_ALLOW = 1, DEVCG_DEFAULT_DENY = 2, }; struct dev_exception_item { u32 major; u32 minor; short int type; short int access; struct list_head list; struct callback_head rcu; }; struct dev_cgroup { struct cgroup_subsys_state css; struct list_head exceptions; enum devcg_behavior behavior; }; struct crypto_async_request; typedef void (*crypto_completion_t)(struct crypto_async_request *, int); struct crypto_async_request { struct list_head list; crypto_completion_t complete; void *data; struct crypto_tfm *tfm; u32 flags; }; struct crypto_wait { struct completion completion; int err; }; enum { CRYPTO_MSG_ALG_REQUEST = 0, CRYPTO_MSG_ALG_REGISTER = 1, CRYPTO_MSG_ALG_LOADED = 2, }; struct crypto_larval { struct crypto_alg alg; struct crypto_alg *adult; struct completion completion; u32 mask; bool test_started; }; struct crypto_cipher { struct crypto_tfm base; }; struct crypto_comp { struct crypto_tfm base; }; struct crypto_queue { struct list_head list; struct list_head *backlog; unsigned int qlen; unsigned int max_qlen; }; struct aead_request { struct crypto_async_request base; unsigned int assoclen; unsigned int cryptlen; u8 *iv; struct scatterlist *src; struct scatterlist *dst; void *__ctx[0]; }; struct akcipher_request { struct crypto_async_request base; struct scatterlist *src; struct scatterlist *dst; unsigned int src_len; unsigned int dst_len; void *__ctx[0]; }; struct ahash_request { struct crypto_async_request base; unsigned int nbytes; struct scatterlist *src; u8 *result; void *priv; void *__ctx[0]; }; struct skcipher_request { unsigned int cryptlen; u8 *iv; struct scatterlist *src; struct scatterlist *dst; struct crypto_async_request base; void *__ctx[0]; }; struct kpp_request { struct crypto_async_request base; struct scatterlist *src; struct scatterlist *dst; unsigned int src_len; unsigned int dst_len; void *__ctx[0]; }; struct crypto_engine { char name[30]; bool idling; bool busy; bool running; bool retry_support; struct list_head list; spinlock_t queue_lock; struct crypto_queue queue; struct device *dev; bool rt; int (*prepare_crypt_hardware)(struct crypto_engine *); int (*unprepare_crypt_hardware)(struct crypto_engine *); int (*do_batch_requests)(struct crypto_engine *); struct kthread_worker *kworker; struct kthread_work pump_requests; void *priv_data; struct crypto_async_request *cur_req; }; struct crypto_engine_op { int (*prepare_request)(struct crypto_engine *, void *); int (*unprepare_request)(struct crypto_engine *, void *); int (*do_one_request)(struct crypto_engine *, void *); }; struct crypto_engine_ctx { struct crypto_engine_op op; }; struct rtattr { short unsigned int rta_len; short unsigned int rta_type; }; struct crypto_attr_alg { char name[128]; }; struct crypto_attr_type { u32 type; u32 mask; }; enum { NAPI_STATE_SCHED = 0, NAPI_STATE_MISSED = 1, NAPI_STATE_DISABLE = 2, NAPI_STATE_NPSVC = 3, NAPI_STATE_LISTED = 4, NAPI_STATE_NO_BUSY_POLL = 5, NAPI_STATE_IN_BUSY_POLL = 6, NAPI_STATE_PREFER_BUSY_POLL = 7, NAPI_STATE_THREADED = 8, NAPI_STATE_SCHED_THREADED = 9, }; enum xps_map_type { XPS_CPUS = 0, XPS_RXQS = 1, XPS_MAPS_MAX = 2, }; enum bpf_xdp_mode { XDP_MODE_SKB = 0, XDP_MODE_DRV = 1, XDP_MODE_HW = 2, __MAX_XDP_MODE = 3, }; enum { NETIF_MSG_DRV_BIT = 0, NETIF_MSG_PROBE_BIT = 1, NETIF_MSG_LINK_BIT = 2, NETIF_MSG_TIMER_BIT = 3, NETIF_MSG_IFDOWN_BIT = 4, NETIF_MSG_IFUP_BIT = 5, NETIF_MSG_RX_ERR_BIT = 6, NETIF_MSG_TX_ERR_BIT = 7, NETIF_MSG_TX_QUEUED_BIT = 8, NETIF_MSG_INTR_BIT = 9, NETIF_MSG_TX_DONE_BIT = 10, NETIF_MSG_RX_STATUS_BIT = 11, NETIF_MSG_PKTDATA_BIT = 12, NETIF_MSG_HW_BIT = 13, NETIF_MSG_WOL_BIT = 14, NETIF_MSG_CLASS_COUNT = 15, }; enum { CRYPTOA_UNSPEC = 0, CRYPTOA_ALG = 1, CRYPTOA_TYPE = 2, __CRYPTOA_MAX = 3, }; struct scatter_walk { struct scatterlist *sg; unsigned int offset; }; struct crypto_aead; struct aead_alg { int (*setkey)(struct crypto_aead *, const u8 *, unsigned int); int (*setauthsize)(struct crypto_aead *, unsigned int); int (*encrypt)(struct aead_request *); int (*decrypt)(struct aead_request *); int (*init)(struct crypto_aead *); void (*exit)(struct crypto_aead *); unsigned int ivsize; unsigned int maxauthsize; unsigned int chunksize; struct crypto_alg base; }; struct crypto_aead { unsigned int authsize; unsigned int reqsize; struct crypto_tfm base; }; struct aead_instance { void (*free)(struct aead_instance *); union { struct { char head[64]; struct crypto_instance base; } s; struct aead_alg alg; }; }; struct crypto_aead_spawn { struct crypto_spawn base; }; enum crypto_attr_type_t { CRYPTOCFGA_UNSPEC = 0, CRYPTOCFGA_PRIORITY_VAL = 1, CRYPTOCFGA_REPORT_LARVAL = 2, CRYPTOCFGA_REPORT_HASH = 3, CRYPTOCFGA_REPORT_BLKCIPHER = 4, CRYPTOCFGA_REPORT_AEAD = 5, CRYPTOCFGA_REPORT_COMPRESS = 6, CRYPTOCFGA_REPORT_RNG = 7, CRYPTOCFGA_REPORT_CIPHER = 8, CRYPTOCFGA_REPORT_AKCIPHER = 9, CRYPTOCFGA_REPORT_KPP = 10, CRYPTOCFGA_REPORT_ACOMP = 11, CRYPTOCFGA_STAT_LARVAL = 12, CRYPTOCFGA_STAT_HASH = 13, CRYPTOCFGA_STAT_BLKCIPHER = 14, CRYPTOCFGA_STAT_AEAD = 15, CRYPTOCFGA_STAT_COMPRESS = 16, CRYPTOCFGA_STAT_RNG = 17, CRYPTOCFGA_STAT_CIPHER = 18, CRYPTOCFGA_STAT_AKCIPHER = 19, CRYPTOCFGA_STAT_KPP = 20, CRYPTOCFGA_STAT_ACOMP = 21, __CRYPTOCFGA_MAX = 22, }; struct crypto_report_aead { char type[64]; char geniv[64]; unsigned int blocksize; unsigned int maxauthsize; unsigned int ivsize; }; struct crypto_sync_skcipher; struct aead_geniv_ctx { spinlock_t lock; struct crypto_aead *child; struct crypto_sync_skcipher *sknull; u8 salt[0]; }; struct crypto_rng; struct rng_alg { int (*generate)(struct crypto_rng *, const u8 *, unsigned int, u8 *, unsigned int); int (*seed)(struct crypto_rng *, const u8 *, unsigned int); void (*set_ent)(struct crypto_rng *, const u8 *, unsigned int); unsigned int seedsize; struct crypto_alg base; }; struct crypto_rng { struct crypto_tfm base; }; struct crypto_cipher_spawn { struct crypto_spawn base; }; struct crypto_skcipher { unsigned int reqsize; struct crypto_tfm base; }; struct crypto_sync_skcipher___2 { struct crypto_skcipher base; }; struct skcipher_alg { int (*setkey)(struct crypto_skcipher *, const u8 *, unsigned int); int (*encrypt)(struct skcipher_request *); int (*decrypt)(struct skcipher_request *); int (*init)(struct crypto_skcipher *); void (*exit)(struct crypto_skcipher *); unsigned int min_keysize; unsigned int max_keysize; unsigned int ivsize; unsigned int chunksize; unsigned int walksize; struct crypto_alg base; }; struct skcipher_instance { void (*free)(struct skcipher_instance *); union { struct { char head[64]; struct crypto_instance base; } s; struct skcipher_alg alg; }; }; struct crypto_skcipher_spawn { struct crypto_spawn base; }; struct skcipher_walk { union { struct { struct page *page; long unsigned int offset; } phys; struct { u8 *page; void *addr; } virt; } src; union { struct { struct page *page; long unsigned int offset; } phys; struct { u8 *page; void *addr; } virt; } dst; struct scatter_walk in; unsigned int nbytes; struct scatter_walk out; unsigned int total; struct list_head buffers; u8 *page; u8 *buffer; u8 *oiv; void *iv; unsigned int ivsize; int flags; unsigned int blocksize; unsigned int stride; unsigned int alignmask; }; struct skcipher_ctx_simple { struct crypto_cipher *cipher; }; struct crypto_report_blkcipher { char type[64]; char geniv[64]; unsigned int blocksize; unsigned int min_keysize; unsigned int max_keysize; unsigned int ivsize; }; enum { SKCIPHER_WALK_PHYS = 1, SKCIPHER_WALK_SLOW = 2, SKCIPHER_WALK_COPY = 4, SKCIPHER_WALK_DIFF = 8, SKCIPHER_WALK_SLEEP = 16, }; struct skcipher_walk_buffer { struct list_head entry; struct scatter_walk dst; unsigned int len; u8 *data; u8 buffer[0]; }; struct hash_alg_common { unsigned int digestsize; unsigned int statesize; struct crypto_alg base; }; struct crypto_ahash; struct ahash_alg { int (*init)(struct ahash_request *); int (*update)(struct ahash_request *); int (*final)(struct ahash_request *); int (*finup)(struct ahash_request *); int (*digest)(struct ahash_request *); int (*export)(struct ahash_request *, void *); int (*import)(struct ahash_request *, const void *); int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int); int (*init_tfm)(struct crypto_ahash *); void (*exit_tfm)(struct crypto_ahash *); struct hash_alg_common halg; }; struct crypto_ahash { int (*init)(struct ahash_request *); int (*update)(struct ahash_request *); int (*final)(struct ahash_request *); int (*finup)(struct ahash_request *); int (*digest)(struct ahash_request *); int (*export)(struct ahash_request *, void *); int (*import)(struct ahash_request *, const void *); int (*setkey)(struct crypto_ahash *, const u8 *, unsigned int); unsigned int reqsize; struct crypto_tfm base; }; struct crypto_hash_walk { char *data; unsigned int offset; unsigned int alignmask; struct page *pg; unsigned int entrylen; unsigned int total; struct scatterlist *sg; unsigned int flags; }; struct ahash_instance { void (*free)(struct ahash_instance *); union { struct { char head[88]; struct crypto_instance base; } s; struct ahash_alg alg; }; }; struct crypto_ahash_spawn { struct crypto_spawn base; }; struct crypto_report_hash { char type[64]; unsigned int blocksize; unsigned int digestsize; }; struct ahash_request_priv { crypto_completion_t complete; void *data; u8 *result; u32 flags; void *ubuf[0]; }; struct shash_instance { void (*free)(struct shash_instance *); union { struct { char head[96]; struct crypto_instance base; } s; struct shash_alg alg; }; }; struct crypto_shash_spawn { struct crypto_spawn base; }; struct crypto_report_akcipher { char type[64]; }; struct crypto_akcipher { struct crypto_tfm base; }; struct akcipher_alg { int (*sign)(struct akcipher_request *); int (*verify)(struct akcipher_request *); int (*encrypt)(struct akcipher_request *); int (*decrypt)(struct akcipher_request *); int (*set_pub_key)(struct crypto_akcipher *, const void *, unsigned int); int (*set_priv_key)(struct crypto_akcipher *, const void *, unsigned int); unsigned int (*max_size)(struct crypto_akcipher *); int (*init)(struct crypto_akcipher *); void (*exit)(struct crypto_akcipher *); unsigned int reqsize; struct crypto_alg base; }; struct akcipher_instance { void (*free)(struct akcipher_instance *); union { struct { char head[80]; struct crypto_instance base; } s; struct akcipher_alg alg; }; }; struct crypto_akcipher_spawn { struct crypto_spawn base; }; struct crypto_report_kpp { char type[64]; }; struct crypto_kpp { struct crypto_tfm base; }; struct kpp_alg { int (*set_secret)(struct crypto_kpp *, const void *, unsigned int); int (*generate_public_key)(struct kpp_request *); int (*compute_shared_secret)(struct kpp_request *); unsigned int (*max_size)(struct crypto_kpp *); int (*init)(struct crypto_kpp *); void (*exit)(struct crypto_kpp *); unsigned int reqsize; struct crypto_alg base; }; enum asn1_class { ASN1_UNIV = 0, ASN1_APPL = 1, ASN1_CONT = 2, ASN1_PRIV = 3, }; enum asn1_method { ASN1_PRIM = 0, ASN1_CONS = 1, }; enum asn1_tag { ASN1_EOC = 0, ASN1_BOOL = 1, ASN1_INT = 2, ASN1_BTS = 3, ASN1_OTS = 4, ASN1_NULL = 5, ASN1_OID = 6, ASN1_ODE = 7, ASN1_EXT = 8, ASN1_REAL = 9, ASN1_ENUM = 10, ASN1_EPDV = 11, ASN1_UTF8STR = 12, ASN1_RELOID = 13, ASN1_SEQ = 16, ASN1_SET = 17, ASN1_NUMSTR = 18, ASN1_PRNSTR = 19, ASN1_TEXSTR = 20, ASN1_VIDSTR = 21, ASN1_IA5STR = 22, ASN1_UNITIM = 23, ASN1_GENTIM = 24, ASN1_GRASTR = 25, ASN1_VISSTR = 26, ASN1_GENSTR = 27, ASN1_UNISTR = 28, ASN1_CHRSTR = 29, ASN1_BMPSTR = 30, ASN1_LONG_TAG = 31, }; typedef int (*asn1_action_t)(void *, size_t, unsigned char, const void *, size_t); struct asn1_decoder { const unsigned char *machine; size_t machlen; const asn1_action_t *actions; }; enum asn1_opcode { ASN1_OP_MATCH = 0, ASN1_OP_MATCH_OR_SKIP = 1, ASN1_OP_MATCH_ACT = 2, ASN1_OP_MATCH_ACT_OR_SKIP = 3, ASN1_OP_MATCH_JUMP = 4, ASN1_OP_MATCH_JUMP_OR_SKIP = 5, ASN1_OP_MATCH_ANY = 8, ASN1_OP_MATCH_ANY_OR_SKIP = 9, ASN1_OP_MATCH_ANY_ACT = 10, ASN1_OP_MATCH_ANY_ACT_OR_SKIP = 11, ASN1_OP_COND_MATCH_OR_SKIP = 17, ASN1_OP_COND_MATCH_ACT_OR_SKIP = 19, ASN1_OP_COND_MATCH_JUMP_OR_SKIP = 21, ASN1_OP_COND_MATCH_ANY = 24, ASN1_OP_COND_MATCH_ANY_OR_SKIP = 25, ASN1_OP_COND_MATCH_ANY_ACT = 26, ASN1_OP_COND_MATCH_ANY_ACT_OR_SKIP = 27, ASN1_OP_COND_FAIL = 28, ASN1_OP_COMPLETE = 29, ASN1_OP_ACT = 30, ASN1_OP_MAYBE_ACT = 31, ASN1_OP_END_SEQ = 32, ASN1_OP_END_SET = 33, ASN1_OP_END_SEQ_OF = 34, ASN1_OP_END_SET_OF = 35, ASN1_OP_END_SEQ_ACT = 36, ASN1_OP_END_SET_ACT = 37, ASN1_OP_END_SEQ_OF_ACT = 38, ASN1_OP_END_SET_OF_ACT = 39, ASN1_OP_RETURN = 40, ASN1_OP__NR = 41, }; enum rsapubkey_actions { ACT_rsa_get_e = 0, ACT_rsa_get_n = 1, NR__rsapubkey_actions = 2, }; enum rsaprivkey_actions { ACT_rsa_get_d = 0, ACT_rsa_get_dp = 1, ACT_rsa_get_dq = 2, ACT_rsa_get_e___2 = 3, ACT_rsa_get_n___2 = 4, ACT_rsa_get_p = 5, ACT_rsa_get_q = 6, ACT_rsa_get_qinv = 7, NR__rsaprivkey_actions = 8, }; typedef long unsigned int mpi_limb_t; struct gcry_mpi { int alloced; int nlimbs; int nbits; int sign; unsigned int flags; mpi_limb_t *d; }; typedef struct gcry_mpi *MPI; struct rsa_key { const u8 *n; const u8 *e; const u8 *d; const u8 *p; const u8 *q; const u8 *dp; const u8 *dq; const u8 *qinv; size_t n_sz; size_t e_sz; size_t d_sz; size_t p_sz; size_t q_sz; size_t dp_sz; size_t dq_sz; size_t qinv_sz; }; struct rsa_mpi_key { MPI n; MPI e; MPI d; }; struct asn1_decoder___2; struct rsa_asn1_template { const char *name; const u8 *data; size_t size; }; struct pkcs1pad_ctx { struct crypto_akcipher *child; unsigned int key_size; }; struct pkcs1pad_inst_ctx { struct crypto_akcipher_spawn spawn; const struct rsa_asn1_template *digest_info; }; struct pkcs1pad_request { struct scatterlist in_sg[2]; struct scatterlist out_sg[1]; uint8_t *in_buf; uint8_t *out_buf; struct akcipher_request child_req; }; struct crypto_report_acomp { char type[64]; }; struct acomp_req { struct crypto_async_request base; struct scatterlist *src; struct scatterlist *dst; unsigned int slen; unsigned int dlen; u32 flags; void *__ctx[0]; }; struct crypto_acomp { int (*compress)(struct acomp_req *); int (*decompress)(struct acomp_req *); void (*dst_free)(struct scatterlist *); unsigned int reqsize; struct crypto_tfm base; }; struct acomp_alg { int (*compress)(struct acomp_req *); int (*decompress)(struct acomp_req *); void (*dst_free)(struct scatterlist *); int (*init)(struct crypto_acomp *); void (*exit)(struct crypto_acomp *); unsigned int reqsize; struct crypto_alg base; }; struct crypto_report_comp { char type[64]; }; struct crypto_scomp { struct crypto_tfm base; }; struct scomp_alg { void * (*alloc_ctx)(struct crypto_scomp *); void (*free_ctx)(struct crypto_scomp *, void *); int (*compress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *); int (*decompress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *); struct crypto_alg base; }; struct scomp_scratch { spinlock_t lock; void *src; void *dst; }; struct cryptomgr_param { struct rtattr *tb[34]; struct { struct rtattr attr; struct crypto_attr_type data; } type; struct { struct rtattr attr; struct crypto_attr_alg data; } attrs[32]; char template[128]; struct crypto_larval *larval; u32 otype; u32 omask; }; struct crypto_test_param { char driver[128]; char alg[128]; u32 type; }; struct crypto_aes_ctx { u32 key_enc[60]; u32 key_dec[60]; u32 key_length; }; struct chksum_ctx { u32 key; }; struct chksum_desc_ctx { u32 crc; }; struct crypto_report_rng { char type[64]; unsigned int seedsize; }; struct sockaddr_alg_new { __u16 salg_family; __u8 salg_type[14]; __u32 salg_feat; __u32 salg_mask; __u8 salg_name[0]; }; struct af_alg_iv { __u32 ivlen; __u8 iv[0]; }; struct cmsghdr { __kernel_size_t cmsg_len; int cmsg_level; int cmsg_type; }; struct net_proto_family { int family; int (*create)(struct net *, struct socket *, int, int); struct module *owner; }; enum { SOCK_WAKE_IO = 0, SOCK_WAKE_WAITD = 1, SOCK_WAKE_SPACE = 2, SOCK_WAKE_URG = 3, }; struct af_alg_type; struct alg_sock { struct sock sk; struct sock *parent; atomic_t refcnt; atomic_t nokey_refcnt; const struct af_alg_type *type; void *private; }; struct af_alg_type { void * (*bind)(const char *, u32, u32); void (*release)(void *); int (*setkey)(void *, const u8 *, unsigned int); int (*setentropy)(void *, sockptr_t, unsigned int); int (*accept)(void *, struct sock *); int (*accept_nokey)(void *, struct sock *); int (*setauthsize)(void *, unsigned int); struct proto_ops *ops; struct proto_ops *ops_nokey; struct module *owner; char name[14]; }; struct af_alg_control { struct af_alg_iv *iv; int op; unsigned int aead_assoclen; }; struct af_alg_sgl { struct scatterlist sg[17]; struct page *pages[16]; unsigned int npages; }; struct af_alg_tsgl { struct list_head list; unsigned int cur; struct scatterlist sg[0]; }; struct af_alg_rsgl { struct af_alg_sgl sgl; struct list_head list; size_t sg_num_bytes; }; struct af_alg_async_req { struct kiocb *iocb; struct sock *sk; struct af_alg_rsgl first_rsgl; struct af_alg_rsgl *last_rsgl; struct list_head rsgl_list; struct scatterlist *tsgl; unsigned int tsgl_entries; unsigned int outlen; unsigned int areqlen; union { struct aead_request aead_req; struct skcipher_request skcipher_req; } cra_u; }; struct af_alg_ctx { struct list_head tsgl_list; void *iv; size_t aead_assoclen; struct crypto_wait wait; size_t used; atomic_t rcvused; bool more; bool merge; bool enc; bool init; unsigned int len; }; struct alg_type_list { const struct af_alg_type *type; struct list_head list; }; struct hash_ctx { struct af_alg_sgl sgl; u8 *result; struct crypto_wait wait; unsigned int len; bool more; struct ahash_request req; }; struct rng_ctx { unsigned int len; struct crypto_rng *drng; u8 *addtl; size_t addtl_len; }; struct rng_parent_ctx { struct crypto_rng *drng; u8 *entropy; }; enum asymmetric_payload_bits { asym_crypto = 0, asym_subtype = 1, asym_key_ids = 2, asym_auth = 3, }; struct asymmetric_key_id { short unsigned int len; unsigned char data[0]; }; struct asymmetric_key_ids { void *id[2]; }; struct public_key_signature; struct asymmetric_key_subtype { struct module *owner; const char *name; short unsigned int name_len; void (*describe)(const struct key *, struct seq_file *); void (*destroy)(void *, void *); int (*query)(const struct kernel_pkey_params *, struct kernel_pkey_query *); int (*eds_op)(struct kernel_pkey_params *, const void *, void *); int (*verify_signature)(const struct key *, const struct public_key_signature *); }; struct public_key_signature { struct asymmetric_key_id *auth_ids[2]; u8 *s; u8 *digest; u32 s_size; u32 digest_size; const char *pkey_algo; const char *hash_algo; const char *encoding; const void *data; unsigned int data_size; }; struct asymmetric_key_parser { struct list_head link; struct module *owner; const char *name; int (*parse)(struct key_preparsed_payload *); }; enum OID { OID_id_dsa_with_sha1 = 0, OID_id_dsa = 1, OID_id_ecPublicKey = 2, OID_id_prime192v1 = 3, OID_id_prime256v1 = 4, OID_id_ecdsa_with_sha1 = 5, OID_id_ecdsa_with_sha224 = 6, OID_id_ecdsa_with_sha256 = 7, OID_id_ecdsa_with_sha384 = 8, OID_id_ecdsa_with_sha512 = 9, OID_rsaEncryption = 10, OID_md2WithRSAEncryption = 11, OID_md3WithRSAEncryption = 12, OID_md4WithRSAEncryption = 13, OID_sha1WithRSAEncryption = 14, OID_sha256WithRSAEncryption = 15, OID_sha384WithRSAEncryption = 16, OID_sha512WithRSAEncryption = 17, OID_sha224WithRSAEncryption = 18, OID_data = 19, OID_signed_data = 20, OID_email_address = 21, OID_contentType = 22, OID_messageDigest = 23, OID_signingTime = 24, OID_smimeCapabilites = 25, OID_smimeAuthenticatedAttrs = 26, OID_md2 = 27, OID_md4 = 28, OID_md5 = 29, OID_mskrb5 = 30, OID_krb5 = 31, OID_krb5u2u = 32, OID_msIndirectData = 33, OID_msStatementType = 34, OID_msSpOpusInfo = 35, OID_msPeImageDataObjId = 36, OID_msIndividualSPKeyPurpose = 37, OID_msOutlookExpress = 38, OID_ntlmssp = 39, OID_spnego = 40, OID_IAKerb = 41, OID_PKU2U = 42, OID_Scram = 43, OID_certAuthInfoAccess = 44, OID_sha1 = 45, OID_id_ansip384r1 = 46, OID_sha256 = 47, OID_sha384 = 48, OID_sha512 = 49, OID_sha224 = 50, OID_commonName = 51, OID_surname = 52, OID_countryName = 53, OID_locality = 54, OID_stateOrProvinceName = 55, OID_organizationName = 56, OID_organizationUnitName = 57, OID_title = 58, OID_description = 59, OID_name = 60, OID_givenName = 61, OID_initials = 62, OID_generationalQualifier = 63, OID_subjectKeyIdentifier = 64, OID_keyUsage = 65, OID_subjectAltName = 66, OID_issuerAltName = 67, OID_basicConstraints = 68, OID_crlDistributionPoints = 69, OID_certPolicies = 70, OID_authorityKeyIdentifier = 71, OID_extKeyUsage = 72, OID_NetlogonMechanism = 73, OID_appleLocalKdcSupported = 74, OID_gostCPSignA = 75, OID_gostCPSignB = 76, OID_gostCPSignC = 77, OID_gost2012PKey256 = 78, OID_gost2012PKey512 = 79, OID_gost2012Digest256 = 80, OID_gost2012Digest512 = 81, OID_gost2012Signature256 = 82, OID_gost2012Signature512 = 83, OID_gostTC26Sign256A = 84, OID_gostTC26Sign256B = 85, OID_gostTC26Sign256C = 86, OID_gostTC26Sign256D = 87, OID_gostTC26Sign512A = 88, OID_gostTC26Sign512B = 89, OID_gostTC26Sign512C = 90, OID_sm2 = 91, OID_sm3 = 92, OID_SM2_with_SM3 = 93, OID_sm3WithRSAEncryption = 94, OID_TPMLoadableKey = 95, OID_TPMImportableKey = 96, OID_TPMSealedData = 97, OID__NR = 98, }; struct public_key { void *key; u32 keylen; enum OID algo; void *params; u32 paramlen; bool key_is_private; const char *id_type; const char *pkey_algo; }; enum x509_actions { ACT_x509_extract_key_data = 0, ACT_x509_extract_name_segment = 1, ACT_x509_note_OID = 2, ACT_x509_note_issuer = 3, ACT_x509_note_not_after = 4, ACT_x509_note_not_before = 5, ACT_x509_note_params = 6, ACT_x509_note_pkey_algo = 7, ACT_x509_note_serial = 8, ACT_x509_note_signature = 9, ACT_x509_note_subject = 10, ACT_x509_note_tbs_certificate = 11, ACT_x509_process_extension = 12, NR__x509_actions = 13, }; enum x509_akid_actions { ACT_x509_akid_note_kid = 0, ACT_x509_akid_note_name = 1, ACT_x509_akid_note_serial = 2, ACT_x509_extract_name_segment___2 = 3, ACT_x509_note_OID___2 = 4, NR__x509_akid_actions = 5, }; struct x509_certificate { struct x509_certificate *next; struct x509_certificate *signer; struct public_key *pub; struct public_key_signature *sig; char *issuer; char *subject; struct asymmetric_key_id *id; struct asymmetric_key_id *skid; time64_t valid_from; time64_t valid_to; const void *tbs; unsigned int tbs_size; unsigned int raw_sig_size; const void *raw_sig; const void *raw_serial; unsigned int raw_serial_size; unsigned int raw_issuer_size; const void *raw_issuer; const void *raw_subject; unsigned int raw_subject_size; unsigned int raw_skid_size; const void *raw_skid; unsigned int index; bool seen; bool verified; bool self_signed; bool unsupported_key; bool unsupported_sig; bool blacklisted; }; struct x509_parse_context { struct x509_certificate *cert; long unsigned int data; const void *cert_start; const void *key; size_t key_size; const void *params; size_t params_size; enum OID key_algo; enum OID last_oid; enum OID algo_oid; unsigned char nr_mpi; u8 o_size; u8 cn_size; u8 email_size; u16 o_offset; u16 cn_offset; u16 email_offset; unsigned int raw_akid_size; const void *raw_akid; const void *akid_raw_issuer; unsigned int akid_raw_issuer_size; }; enum pkcs7_actions { ACT_pkcs7_check_content_type = 0, ACT_pkcs7_extract_cert = 1, ACT_pkcs7_note_OID = 2, ACT_pkcs7_note_certificate_list = 3, ACT_pkcs7_note_content = 4, ACT_pkcs7_note_data = 5, ACT_pkcs7_note_signed_info = 6, ACT_pkcs7_note_signeddata_version = 7, ACT_pkcs7_note_signerinfo_version = 8, ACT_pkcs7_sig_note_authenticated_attr = 9, ACT_pkcs7_sig_note_digest_algo = 10, ACT_pkcs7_sig_note_issuer = 11, ACT_pkcs7_sig_note_pkey_algo = 12, ACT_pkcs7_sig_note_serial = 13, ACT_pkcs7_sig_note_set_of_authattrs = 14, ACT_pkcs7_sig_note_signature = 15, ACT_pkcs7_sig_note_skid = 16, NR__pkcs7_actions = 17, }; struct pkcs7_signed_info { struct pkcs7_signed_info *next; struct x509_certificate *signer; unsigned int index; bool unsupported_crypto; bool blacklisted; const void *msgdigest; unsigned int msgdigest_len; unsigned int authattrs_len; const void *authattrs; long unsigned int aa_set; time64_t signing_time; struct public_key_signature *sig; }; struct pkcs7_message___2 { struct x509_certificate *certs; struct x509_certificate *crl; struct pkcs7_signed_info *signed_infos; u8 version; bool have_authattrs; enum OID data_type; size_t data_len; size_t data_hdrlen; const void *data; }; struct pkcs7_parse_context { struct pkcs7_message___2 *msg; struct pkcs7_signed_info *sinfo; struct pkcs7_signed_info **ppsinfo; struct x509_certificate *certs; struct x509_certificate **ppcerts; long unsigned int data; enum OID last_oid; unsigned int x509_index; unsigned int sinfo_index; const void *raw_serial; unsigned int raw_serial_size; unsigned int raw_issuer_size; const void *raw_issuer; const void *raw_skid; unsigned int raw_skid_size; bool expect_skid; }; enum { DISK_EVENT_MEDIA_CHANGE = 1, DISK_EVENT_EJECT_REQUEST = 2, }; struct blk_integrity_profile; struct blk_integrity { const struct blk_integrity_profile *profile; unsigned char flags; unsigned char tuple_size; unsigned char interval_exp; unsigned char tag_size; }; struct blk_integrity_iter; typedef blk_status_t integrity_processing_fn(struct blk_integrity_iter *); typedef void integrity_prepare_fn(struct request *); typedef void integrity_complete_fn(struct request *, unsigned int); struct blk_integrity_profile { integrity_processing_fn *generate_fn; integrity_processing_fn *verify_fn; integrity_prepare_fn *prepare_fn; integrity_complete_fn *complete_fn; const char *name; }; struct elevator_type; struct elevator_queue { struct elevator_type *type; void *elevator_data; struct kobject kobj; struct mutex sysfs_lock; unsigned int registered: 1; struct hlist_head hash[64]; }; struct blk_mq_ctxs; struct blk_mq_ctx { struct { spinlock_t lock; struct list_head rq_lists[3]; long: 64; }; unsigned int cpu; short unsigned int index_hw[3]; struct blk_mq_hw_ctx *hctxs[3]; struct request_queue *queue; struct blk_mq_ctxs *ctxs; struct kobject kobj; long: 64; }; struct blk_stat_callback { struct list_head list; struct timer_list timer; struct blk_rq_stat *cpu_stat; int (*bucket_fn)(const struct request *); unsigned int buckets; struct blk_rq_stat *stat; void (*timer_fn)(struct blk_stat_callback *); void *data; struct callback_head rcu; }; struct blk_flush_queue { unsigned int flush_pending_idx: 1; unsigned int flush_running_idx: 1; blk_status_t rq_status; long unsigned int flush_pending_since; struct list_head flush_queue[2]; struct list_head flush_data_in_flight; struct request *flush_rq; spinlock_t mq_flush_lock; }; struct blk_integrity_iter { void *prot_buf; void *data_buf; sector_t seed; unsigned int data_size; short unsigned int interval; const char *disk_name; }; struct blk_mq_ctxs { struct kobject kobj; struct blk_mq_ctx *queue_ctx; }; struct blk_mq_alloc_data { struct request_queue *q; blk_mq_req_flags_t flags; unsigned int shallow_depth; unsigned int cmd_flags; req_flags_t rq_flags; unsigned int nr_tags; struct request **cached_rq; struct blk_mq_ctx *ctx; struct blk_mq_hw_ctx *hctx; }; enum elv_merge { ELEVATOR_NO_MERGE = 0, ELEVATOR_FRONT_MERGE = 1, ELEVATOR_BACK_MERGE = 2, ELEVATOR_DISCARD_MERGE = 3, }; struct elevator_mq_ops { int (*init_sched)(struct request_queue *, struct elevator_type *); void (*exit_sched)(struct elevator_queue *); int (*init_hctx)(struct blk_mq_hw_ctx *, unsigned int); void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int); void (*depth_updated)(struct blk_mq_hw_ctx *); bool (*allow_merge)(struct request_queue *, struct request *, struct bio *); bool (*bio_merge)(struct request_queue *, struct bio *, unsigned int); int (*request_merge)(struct request_queue *, struct request **, struct bio *); void (*request_merged)(struct request_queue *, struct request *, enum elv_merge); void (*requests_merged)(struct request_queue *, struct request *, struct request *); void (*limit_depth)(unsigned int, struct blk_mq_alloc_data *); void (*prepare_request)(struct request *); void (*finish_request)(struct request *); void (*insert_requests)(struct blk_mq_hw_ctx *, struct list_head *, bool); struct request * (*dispatch_request)(struct blk_mq_hw_ctx *); bool (*has_work)(struct blk_mq_hw_ctx *); void (*completed_request)(struct request *, u64); void (*requeue_request)(struct request *); struct request * (*former_request)(struct request_queue *, struct request *); struct request * (*next_request)(struct request_queue *, struct request *); void (*init_icq)(struct io_cq *); void (*exit_icq)(struct io_cq *); }; struct elv_fs_entry; struct blk_mq_debugfs_attr; struct elevator_type { struct kmem_cache *icq_cache; struct elevator_mq_ops ops; size_t icq_size; size_t icq_align; struct elv_fs_entry *elevator_attrs; const char *elevator_name; const char *elevator_alias; const unsigned int elevator_features; struct module *elevator_owner; const struct blk_mq_debugfs_attr *queue_debugfs_attrs; const struct blk_mq_debugfs_attr *hctx_debugfs_attrs; char icq_cache_name[22]; struct list_head list; }; struct elv_fs_entry { struct attribute attr; ssize_t (*show)(struct elevator_queue *, char *); ssize_t (*store)(struct elevator_queue *, const char *, size_t); }; struct blk_mq_debugfs_attr { const char *name; umode_t mode; int (*show)(void *, struct seq_file *); ssize_t (*write)(void *, const char *, size_t, loff_t *); const struct seq_operations *seq_ops; }; struct bdev_inode { struct block_device bdev; struct inode vfs_inode; }; enum { DIO_SHOULD_DIRTY = 1, DIO_IS_SYNC = 2, }; struct blkdev_dio { union { struct kiocb *iocb; struct task_struct *waiter; }; size_t size; atomic_t ref; unsigned int flags; long: 64; long: 64; long: 64; long: 64; long: 64; struct bio bio; long: 64; long: 64; }; struct bio_alloc_cache { struct bio_list free_list; unsigned int nr; }; enum rq_qos_id { RQ_QOS_WBT = 0, RQ_QOS_LATENCY = 1, RQ_QOS_COST = 2, RQ_QOS_IOPRIO = 3, }; struct rq_qos_ops; struct rq_qos { struct rq_qos_ops *ops; struct request_queue *q; enum rq_qos_id id; struct rq_qos *next; struct dentry *debugfs_dir; }; enum { sysctl_hung_task_timeout_secs = 0, }; struct rq_qos_ops { void (*throttle)(struct rq_qos *, struct bio *); void (*track)(struct rq_qos *, struct request *, struct bio *); void (*merge)(struct rq_qos *, struct request *, struct bio *); void (*issue)(struct rq_qos *, struct request *); void (*requeue)(struct rq_qos *, struct request *); void (*done)(struct rq_qos *, struct request *); void (*done_bio)(struct rq_qos *, struct bio *); void (*cleanup)(struct rq_qos *, struct bio *); void (*queue_depth_changed)(struct rq_qos *); void (*exit)(struct rq_qos *); const struct blk_mq_debugfs_attr *debugfs_attrs; }; struct biovec_slab { int nr_vecs; char *name; struct kmem_cache *slab; }; struct bio_slab { struct kmem_cache *slab; unsigned int slab_ref; unsigned int slab_size; char name[8]; }; enum { BLK_MQ_F_SHOULD_MERGE = 1, BLK_MQ_F_TAG_QUEUE_SHARED = 2, BLK_MQ_F_STACKING = 4, BLK_MQ_F_TAG_HCTX_SHARED = 8, BLK_MQ_F_BLOCKING = 32, BLK_MQ_F_NO_SCHED = 64, BLK_MQ_F_NO_SCHED_BY_DEFAULT = 128, BLK_MQ_F_ALLOC_POLICY_START_BIT = 8, BLK_MQ_F_ALLOC_POLICY_BITS = 1, BLK_MQ_S_STOPPED = 0, BLK_MQ_S_TAG_ACTIVE = 1, BLK_MQ_S_SCHED_RESTART = 2, BLK_MQ_S_INACTIVE = 3, BLK_MQ_MAX_DEPTH = 10240, BLK_MQ_CPU_WORK_BATCH = 8, }; enum { WBT_RWQ_BG = 0, WBT_RWQ_KSWAPD = 1, WBT_RWQ_DISCARD = 2, WBT_NUM_RWQ = 3, }; enum { PERCPU_REF_INIT_ATOMIC = 1, PERCPU_REF_INIT_DEAD = 2, PERCPU_REF_ALLOW_REINIT = 4, }; enum rpm_status { RPM_ACTIVE = 0, RPM_RESUMING = 1, RPM_SUSPENDED = 2, RPM_SUSPENDING = 3, }; struct blk_plug_cb; typedef void (*blk_plug_cb_fn)(struct blk_plug_cb *, bool); struct blk_plug_cb { struct list_head list; blk_plug_cb_fn callback; void *data; }; enum { BLK_MQ_REQ_NOWAIT = 1, BLK_MQ_REQ_RESERVED = 2, BLK_MQ_REQ_PM = 4, }; struct trace_event_raw_block_buffer { struct trace_entry ent; dev_t dev; sector_t sector; size_t size; char __data[0]; }; struct trace_event_raw_block_rq_requeue { struct trace_entry ent; dev_t dev; sector_t sector; unsigned int nr_sector; char rwbs[8]; u32 __data_loc_cmd; char __data[0]; }; struct trace_event_raw_block_rq_complete { struct trace_entry ent; dev_t dev; sector_t sector; unsigned int nr_sector; int error; char rwbs[8]; u32 __data_loc_cmd; char __data[0]; }; struct trace_event_raw_block_rq { struct trace_entry ent; dev_t dev; sector_t sector; unsigned int nr_sector; unsigned int bytes; char rwbs[8]; char comm[16]; u32 __data_loc_cmd; char __data[0]; }; struct trace_event_raw_block_bio_complete { struct trace_entry ent; dev_t dev; sector_t sector; unsigned int nr_sector; int error; char rwbs[8]; char __data[0]; }; struct trace_event_raw_block_bio { struct trace_entry ent; dev_t dev; sector_t sector; unsigned int nr_sector; char rwbs[8]; char comm[16]; char __data[0]; }; struct trace_event_raw_block_plug { struct trace_entry ent; char comm[16]; char __data[0]; }; struct trace_event_raw_block_unplug { struct trace_entry ent; int nr_rq; char comm[16]; char __data[0]; }; struct trace_event_raw_block_split { struct trace_entry ent; dev_t dev; sector_t sector; sector_t new_sector; char rwbs[8]; char comm[16]; char __data[0]; }; struct trace_event_raw_block_bio_remap { struct trace_entry ent; dev_t dev; sector_t sector; unsigned int nr_sector; dev_t old_dev; sector_t old_sector; char rwbs[8]; char __data[0]; }; struct trace_event_raw_block_rq_remap { struct trace_entry ent; dev_t dev; sector_t sector; unsigned int nr_sector; dev_t old_dev; sector_t old_sector; unsigned int nr_bios; char rwbs[8]; char __data[0]; }; struct trace_event_data_offsets_block_buffer {}; struct trace_event_data_offsets_block_rq_requeue { u32 cmd; }; struct trace_event_data_offsets_block_rq_complete { u32 cmd; }; struct trace_event_data_offsets_block_rq { u32 cmd; }; struct trace_event_data_offsets_block_bio_complete {}; struct trace_event_data_offsets_block_bio {}; struct trace_event_data_offsets_block_plug {}; struct trace_event_data_offsets_block_unplug {}; struct trace_event_data_offsets_block_split {}; struct trace_event_data_offsets_block_bio_remap {}; struct trace_event_data_offsets_block_rq_remap {}; typedef void (*btf_trace_block_touch_buffer)(void *, struct buffer_head *); typedef void (*btf_trace_block_dirty_buffer)(void *, struct buffer_head *); typedef void (*btf_trace_block_rq_requeue)(void *, struct request *); typedef void (*btf_trace_block_rq_complete)(void *, struct request *, blk_status_t, unsigned int); typedef void (*btf_trace_block_rq_insert)(void *, struct request *); typedef void (*btf_trace_block_rq_issue)(void *, struct request *); typedef void (*btf_trace_block_rq_merge)(void *, struct request *); typedef void (*btf_trace_block_bio_complete)(void *, struct request_queue *, struct bio *); typedef void (*btf_trace_block_bio_bounce)(void *, struct bio *); typedef void (*btf_trace_block_bio_backmerge)(void *, struct bio *); typedef void (*btf_trace_block_bio_frontmerge)(void *, struct bio *); typedef void (*btf_trace_block_bio_queue)(void *, struct bio *); typedef void (*btf_trace_block_getrq)(void *, struct bio *); typedef void (*btf_trace_block_plug)(void *, struct request_queue *); typedef void (*btf_trace_block_unplug)(void *, struct request_queue *, unsigned int, bool); typedef void (*btf_trace_block_split)(void *, struct bio *, unsigned int); typedef void (*btf_trace_block_bio_remap)(void *, struct bio *, dev_t, sector_t); typedef void (*btf_trace_block_rq_remap)(void *, struct request *, dev_t, sector_t); enum { BLK_MQ_NO_TAG = 4294967295, BLK_MQ_TAG_MIN = 1, BLK_MQ_TAG_MAX = 4294967294, }; enum blkg_rwstat_type { BLKG_RWSTAT_READ = 0, BLKG_RWSTAT_WRITE = 1, BLKG_RWSTAT_SYNC = 2, BLKG_RWSTAT_ASYNC = 3, BLKG_RWSTAT_DISCARD = 4, BLKG_RWSTAT_NR = 5, BLKG_RWSTAT_TOTAL = 5, }; enum { LIMIT_LOW = 0, LIMIT_MAX = 1, LIMIT_CNT = 2, }; struct queue_sysfs_entry { struct attribute attr; ssize_t (*show)(struct request_queue *, char *); ssize_t (*store)(struct request_queue *, const char *, size_t); }; enum { REQ_FSEQ_PREFLUSH = 1, REQ_FSEQ_DATA = 2, REQ_FSEQ_POSTFLUSH = 4, REQ_FSEQ_DONE = 8, REQ_FSEQ_ACTIONS = 7, FLUSH_PENDING_TIMEOUT = 500, }; enum blk_default_limits { BLK_MAX_SEGMENTS = 128, BLK_SAFE_MAX_SECTORS = 255, BLK_DEF_MAX_SECTORS = 2560, BLK_MAX_SEGMENT_SIZE = 65536, BLK_SEG_BOUNDARY_MASK = 4294967295, }; enum { ICQ_EXITED = 4, ICQ_DESTROYED = 8, }; struct rq_map_data { struct page **pages; int page_order; int nr_entries; long unsigned int offset; int null_mapped; int from_user; }; struct bio_map_data { bool is_our_pages: 1; bool is_null_mapped: 1; struct iov_iter iter; struct iovec iov[0]; }; struct req_iterator { struct bvec_iter iter; struct bio *bio; }; enum bio_merge_status { BIO_MERGE_OK = 0, BIO_MERGE_NONE = 1, BIO_MERGE_FAILED = 2, }; typedef bool (*sb_for_each_fn)(struct sbitmap *, unsigned int, void *); typedef bool busy_iter_fn(struct blk_mq_hw_ctx *, struct request *, void *, bool); typedef bool busy_tag_iter_fn(struct request *, void *, bool); enum { BLK_MQ_UNIQUE_TAG_BITS = 16, BLK_MQ_UNIQUE_TAG_MASK = 65535, }; struct mq_inflight { struct block_device *part; unsigned int inflight[2]; }; struct flush_busy_ctx_data { struct blk_mq_hw_ctx *hctx; struct list_head *list; }; struct dispatch_rq_data { struct blk_mq_hw_ctx *hctx; struct request *rq; }; enum prep_dispatch { PREP_DISPATCH_OK = 0, PREP_DISPATCH_NO_TAG = 1, PREP_DISPATCH_NO_BUDGET = 2, }; struct rq_iter_data { struct blk_mq_hw_ctx *hctx; bool has_rq; }; struct blk_mq_qe_pair { struct list_head node; struct request_queue *q; struct elevator_type *type; }; struct sbq_wait { struct sbitmap_queue *sbq; struct wait_queue_entry wait; }; struct bt_iter_data { struct blk_mq_hw_ctx *hctx; busy_iter_fn *fn; void *data; bool reserved; }; struct bt_tags_iter_data { struct blk_mq_tags *tags; busy_tag_iter_fn *fn; void *data; unsigned int flags; }; struct blk_queue_stats { struct list_head callbacks; spinlock_t lock; bool enable_accounting; }; struct blk_mq_hw_ctx_sysfs_entry { struct attribute attr; ssize_t (*show)(struct blk_mq_hw_ctx *, char *); ssize_t (*store)(struct blk_mq_hw_ctx *, const char *, size_t); }; typedef int (*list_cmp_func_t)(void *, const struct list_head *, const struct list_head *); struct hd_geometry { unsigned char heads; unsigned char sectors; short unsigned int cylinders; long unsigned int start; }; struct blkpg_ioctl_arg { int op; int flags; int datalen; void *data; }; struct blkpg_partition { long long int start; long long int length; int pno; char devname[64]; char volname[64]; }; struct pr_reservation { __u64 key; __u32 type; __u32 flags; }; struct pr_registration { __u64 old_key; __u64 new_key; __u32 flags; __u32 __pad; }; struct pr_preempt { __u64 old_key; __u64 new_key; __u32 type; __u32 flags; }; struct pr_clear { __u64 key; __u32 flags; __u32 __pad; }; struct klist_node; struct klist { spinlock_t k_lock; struct list_head k_list; void (*get)(struct klist_node *); void (*put)(struct klist_node *); }; struct klist_node { void *n_klist; struct list_head n_node; struct kref n_ref; }; struct klist_iter { struct klist *i_klist; struct klist_node *i_cur; }; struct class_dev_iter { struct klist_iter ki; const struct device_type *type; }; struct badblocks { struct device *dev; int count; int unacked_exist; int shift; u64 *page; int changed; seqlock_t lock; sector_t sector; sector_t size; }; struct blk_major_name { struct blk_major_name *next; int major; char name[16]; void (*probe)(dev_t); }; enum { IOPRIO_WHO_PROCESS = 1, IOPRIO_WHO_PGRP = 2, IOPRIO_WHO_USER = 3, }; struct parsed_partitions { struct gendisk *disk; char name[32]; struct { sector_t from; sector_t size; int flags; bool has_info; struct partition_meta_info info; } *parts; int next; int limit; bool access_beyond_eod; char *pp_buf; }; typedef struct { struct page *v; } Sector; struct fat_boot_sector { __u8 ignored[3]; __u8 system_id[8]; __u8 sector_size[2]; __u8 sec_per_clus; __le16 reserved; __u8 fats; __u8 dir_entries[2]; __u8 sectors[2]; __u8 media; __le16 fat_length; __le16 secs_track; __le16 heads; __le32 hidden; __le32 total_sect; union { struct { __u8 drive_number; __u8 state; __u8 signature; __u8 vol_id[4]; __u8 vol_label[11]; __u8 fs_type[8]; } fat16; struct { __le32 length; __le16 flags; __u8 version[2]; __le32 root_cluster; __le16 info_sector; __le16 backup_boot; __le16 reserved2[6]; __u8 drive_number; __u8 state; __u8 signature; __u8 vol_id[4]; __u8 vol_label[11]; __u8 fs_type[8]; } fat32; }; }; struct msdos_partition { u8 boot_ind; u8 head; u8 sector; u8 cyl; u8 sys_ind; u8 end_head; u8 end_sector; u8 end_cyl; __le32 start_sect; __le32 nr_sects; }; enum msdos_sys_ind { DOS_EXTENDED_PARTITION = 5, LINUX_EXTENDED_PARTITION = 133, WIN98_EXTENDED_PARTITION = 15, LINUX_DATA_PARTITION = 131, LINUX_LVM_PARTITION = 142, LINUX_RAID_PARTITION = 253, SOLARIS_X86_PARTITION = 130, NEW_SOLARIS_X86_PARTITION = 191, DM6_AUX1PARTITION = 81, DM6_AUX3PARTITION = 83, DM6_PARTITION = 84, EZD_PARTITION = 85, FREEBSD_PARTITION = 165, OPENBSD_PARTITION = 166, NETBSD_PARTITION = 169, BSDI_PARTITION = 183, MINIX_PARTITION = 129, UNIXWARE_PARTITION = 99, }; struct _gpt_header { __le64 signature; __le32 revision; __le32 header_size; __le32 header_crc32; __le32 reserved1; __le64 my_lba; __le64 alternate_lba; __le64 first_usable_lba; __le64 last_usable_lba; efi_guid_t disk_guid; __le64 partition_entry_lba; __le32 num_partition_entries; __le32 sizeof_partition_entry; __le32 partition_entry_array_crc32; } __attribute__((packed)); typedef struct _gpt_header gpt_header; struct _gpt_entry_attributes { u64 required_to_function: 1; u64 reserved: 47; u64 type_guid_specific: 16; }; typedef struct _gpt_entry_attributes gpt_entry_attributes; struct _gpt_entry { efi_guid_t partition_type_guid; efi_guid_t unique_partition_guid; __le64 starting_lba; __le64 ending_lba; gpt_entry_attributes attributes; __le16 partition_name[36]; }; typedef struct _gpt_entry gpt_entry; struct _gpt_mbr_record { u8 boot_indicator; u8 start_head; u8 start_sector; u8 start_track; u8 os_type; u8 end_head; u8 end_sector; u8 end_track; __le32 starting_lba; __le32 size_in_lba; }; typedef struct _gpt_mbr_record gpt_mbr_record; struct _legacy_mbr { u8 boot_code[440]; __le32 unique_mbr_signature; __le16 unknown; gpt_mbr_record partition_record[4]; __le16 signature; } __attribute__((packed)); typedef struct _legacy_mbr legacy_mbr; struct rq_wait { wait_queue_head_t wait; atomic_t inflight; }; struct rq_depth { unsigned int max_depth; int scale_step; bool scaled_max; unsigned int queue_depth; unsigned int default_depth; }; typedef bool acquire_inflight_cb_t(struct rq_wait *, void *); typedef void cleanup_cb_t(struct rq_wait *, void *); struct rq_qos_wait_data { struct wait_queue_entry wq; struct task_struct *task; struct rq_wait *rqw; acquire_inflight_cb_t *cb; void *private_data; bool got_token; }; enum { DISK_EVENT_FLAG_POLL = 1, DISK_EVENT_FLAG_UEVENT = 2, }; struct disk_events { struct list_head node; struct gendisk *disk; spinlock_t lock; struct mutex block_mutex; int block; unsigned int pending; unsigned int clearing; long int poll_msecs; struct delayed_work dwork; }; struct blk_ia_range_sysfs_entry { struct attribute attr; ssize_t (*show)(struct blk_independent_access_range *, char *); }; typedef struct blkcg_policy_data *blkcg_pol_alloc_cpd_fn(gfp_t); typedef void blkcg_pol_init_cpd_fn(struct blkcg_policy_data *); typedef void blkcg_pol_free_cpd_fn(struct blkcg_policy_data *); typedef void blkcg_pol_bind_cpd_fn(struct blkcg_policy_data *); typedef struct blkg_policy_data *blkcg_pol_alloc_pd_fn(gfp_t, struct request_queue *, struct blkcg *); typedef void blkcg_pol_init_pd_fn(struct blkg_policy_data *); typedef void blkcg_pol_online_pd_fn(struct blkg_policy_data *); typedef void blkcg_pol_offline_pd_fn(struct blkg_policy_data *); typedef void blkcg_pol_free_pd_fn(struct blkg_policy_data *); typedef void blkcg_pol_reset_pd_stats_fn(struct blkg_policy_data *); typedef bool blkcg_pol_stat_pd_fn(struct blkg_policy_data *, struct seq_file *); struct blkcg_policy { int plid; struct cftype *dfl_cftypes; struct cftype *legacy_cftypes; blkcg_pol_alloc_cpd_fn *cpd_alloc_fn; blkcg_pol_init_cpd_fn *cpd_init_fn; blkcg_pol_free_cpd_fn *cpd_free_fn; blkcg_pol_bind_cpd_fn *cpd_bind_fn; blkcg_pol_alloc_pd_fn *pd_alloc_fn; blkcg_pol_init_pd_fn *pd_init_fn; blkcg_pol_online_pd_fn *pd_online_fn; blkcg_pol_offline_pd_fn *pd_offline_fn; blkcg_pol_free_pd_fn *pd_free_fn; blkcg_pol_reset_pd_stats_fn *pd_reset_stats_fn; blkcg_pol_stat_pd_fn *pd_stat_fn; }; struct blkg_conf_ctx { struct block_device *bdev; struct blkcg_gq *blkg; char *body; }; enum dd_data_dir { DD_READ = 0, DD_WRITE = 1, }; enum { DD_DIR_COUNT = 2, }; enum dd_prio { DD_RT_PRIO = 0, DD_BE_PRIO = 1, DD_IDLE_PRIO = 2, DD_PRIO_MAX = 2, }; enum { DD_PRIO_COUNT = 3, }; struct io_stats_per_prio { uint32_t inserted; uint32_t merged; uint32_t dispatched; atomic_t completed; }; struct dd_per_prio { struct list_head dispatch; struct rb_root sort_list[2]; struct list_head fifo_list[2]; struct request *next_rq[2]; struct io_stats_per_prio stats; }; struct deadline_data { struct dd_per_prio per_prio[3]; enum dd_data_dir last_dir; unsigned int batching; unsigned int starved; int fifo_expire[2]; int fifo_batch; int writes_starved; int front_merges; u32 async_depth; int prio_aging_expire; spinlock_t lock; spinlock_t zone_lock; }; struct virtio_device_id { __u32 device; __u32 vendor; }; struct virtio_device; struct virtqueue { struct list_head list; void (*callback)(struct virtqueue *); const char *name; struct virtio_device *vdev; unsigned int index; unsigned int num_free; void *priv; }; struct vringh_config_ops; struct virtio_config_ops; struct virtio_device { int index; bool failed; bool config_enabled; bool config_change_pending; spinlock_t config_lock; spinlock_t vqs_list_lock; struct device dev; struct virtio_device_id id; const struct virtio_config_ops *config; const struct vringh_config_ops *vringh_config; struct list_head vqs; u64 features; void *priv; }; typedef void vq_callback_t(struct virtqueue *); struct virtio_shm_region; struct virtio_config_ops { void (*enable_cbs)(struct virtio_device *); void (*get)(struct virtio_device *, unsigned int, void *, unsigned int); void (*set)(struct virtio_device *, unsigned int, const void *, unsigned int); u32 (*generation)(struct virtio_device *); u8 (*get_status)(struct virtio_device *); void (*set_status)(struct virtio_device *, u8); void (*reset)(struct virtio_device *); int (*find_vqs)(struct virtio_device *, unsigned int, struct virtqueue **, vq_callback_t **, const char * const *, const bool *, struct irq_affinity *); void (*del_vqs)(struct virtio_device *); u64 (*get_features)(struct virtio_device *); int (*finalize_features)(struct virtio_device *); const char * (*bus_name)(struct virtio_device *); int (*set_vq_affinity)(struct virtqueue *, const struct cpumask *); const struct cpumask * (*get_vq_affinity)(struct virtio_device *, int); bool (*get_shm_region)(struct virtio_device *, struct virtio_shm_region *, u8); }; struct virtio_shm_region { u64 addr; u64 len; }; struct show_busy_params { struct seq_file *m; struct blk_mq_hw_ctx *hctx; }; typedef int (*cmp_r_func_t)(const void *, const void *, const void *); struct random_ready_callback { struct list_head list; void (*func)(struct random_ready_callback *); struct module *owner; }; struct siprand_state { long unsigned int v0; long unsigned int v1; long unsigned int v2; long unsigned int v3; }; typedef __kernel_long_t __kernel_ptrdiff_t; typedef __kernel_ptrdiff_t ptrdiff_t; struct region { unsigned int start; unsigned int off; unsigned int group_len; unsigned int end; unsigned int nbits; }; enum { REG_OP_ISFREE = 0, REG_OP_ALLOC = 1, REG_OP_RELEASE = 2, }; struct sg_append_table { struct sg_table sgt; struct scatterlist *prv; unsigned int total_nents; }; typedef struct scatterlist *sg_alloc_fn(unsigned int, gfp_t); typedef void sg_free_fn(struct scatterlist *, unsigned int); struct sg_page_iter { struct scatterlist *sg; unsigned int sg_pgoffset; unsigned int __nents; int __pg_advance; }; struct sg_dma_page_iter { struct sg_page_iter base; }; struct sg_mapping_iter { struct page *page; void *addr; size_t length; size_t consumed; struct sg_page_iter piter; unsigned int __offset; unsigned int __remaining; unsigned int __flags; }; struct iov_iter_state { size_t iov_offset; size_t count; long unsigned int nr_segs; }; struct csum_state { __wsum csum; size_t off; }; typedef u32 compat_size_t; typedef s32 compat_ssize_t; typedef u32 compat_uptr_t; struct compat_iovec { compat_uptr_t iov_base; compat_size_t iov_len; }; struct __kfifo { unsigned int in; unsigned int out; unsigned int mask; unsigned int esize; void *data; }; struct rhltable { struct rhashtable ht; }; struct rhashtable_walker { struct list_head list; struct bucket_table *tbl; }; struct rhashtable_iter { struct rhashtable *ht; struct rhash_head *p; struct rhlist_head *list; struct rhashtable_walker walker; unsigned int slot; unsigned int skip; bool end_of_table; }; union nested_table { union nested_table *table; struct rhash_lock_head *bucket; }; struct once_work { struct work_struct work; struct static_key_true *key; struct module *module; }; struct genradix_iter { size_t offset; size_t pos; }; struct genradix_node { union { struct genradix_node *children[512]; u8 data[4096]; }; }; enum string_size_units { STRING_UNITS_10 = 0, STRING_UNITS_2 = 1, }; struct reciprocal_value_adv { u32 m; u8 sh; u8 exp; bool is_wide_m; }; enum devm_ioremap_type { DEVM_IOREMAP = 0, DEVM_IOREMAP_UC = 1, DEVM_IOREMAP_WC = 2, DEVM_IOREMAP_NP = 3, }; struct pcim_iomap_devres { void *table[6]; }; struct arch_io_reserve_memtype_wc_devres { resource_size_t start; resource_size_t size; }; enum assoc_array_walk_status { assoc_array_walk_tree_empty = 0, assoc_array_walk_found_terminal_node = 1, assoc_array_walk_found_wrong_shortcut = 2, }; struct assoc_array_walk_result { struct { struct assoc_array_node *node; int level; int slot; } terminal_node; struct { struct assoc_array_shortcut *shortcut; int level; int sc_level; long unsigned int sc_segments; long unsigned int dissimilarity; } wrong_shortcut; }; struct assoc_array_delete_collapse_context { struct assoc_array_node *node; const void *skip_leaf; int slot; }; struct ei_entry { struct list_head list; long unsigned int start_addr; long unsigned int end_addr; int etype; void *priv; }; struct nla_bitfield32 { __u32 value; __u32 selector; }; enum { NLA_UNSPEC = 0, NLA_U8 = 1, NLA_U16 = 2, NLA_U32 = 3, NLA_U64 = 4, NLA_STRING = 5, NLA_FLAG = 6, NLA_MSECS = 7, NLA_NESTED = 8, NLA_NESTED_ARRAY = 9, NLA_NUL_STRING = 10, NLA_BINARY = 11, NLA_S8 = 12, NLA_S16 = 13, NLA_S32 = 14, NLA_S64 = 15, NLA_BITFIELD32 = 16, NLA_REJECT = 17, __NLA_TYPE_MAX = 18, }; enum nla_policy_validation { NLA_VALIDATE_NONE = 0, NLA_VALIDATE_RANGE = 1, NLA_VALIDATE_RANGE_WARN_TOO_LONG = 2, NLA_VALIDATE_MIN = 3, NLA_VALIDATE_MAX = 4, NLA_VALIDATE_MASK = 5, NLA_VALIDATE_RANGE_PTR = 6, NLA_VALIDATE_FUNCTION = 7, }; enum netlink_validation { NL_VALIDATE_LIBERAL = 0, NL_VALIDATE_TRAILING = 1, NL_VALIDATE_MAXTYPE = 2, NL_VALIDATE_UNSPEC = 4, NL_VALIDATE_STRICT_ATTRS = 8, NL_VALIDATE_NESTED = 16, }; struct cpu_rmap { struct kref refcount; u16 size; u16 used; void **obj; struct { u16 index; u16 dist; } near[0]; }; struct irq_glue { struct irq_affinity_notify notify; struct cpu_rmap *rmap; u16 index; }; typedef mpi_limb_t *mpi_ptr_t; typedef int mpi_size_t; typedef mpi_limb_t UWtype; typedef unsigned int UHWtype; enum gcry_mpi_constants { MPI_C_ZERO = 0, MPI_C_ONE = 1, MPI_C_TWO = 2, MPI_C_THREE = 3, MPI_C_FOUR = 4, MPI_C_EIGHT = 5, }; struct barrett_ctx_s; typedef struct barrett_ctx_s *mpi_barrett_t; struct gcry_mpi_point { MPI x; MPI y; MPI z; }; typedef struct gcry_mpi_point *MPI_POINT; enum gcry_mpi_ec_models { MPI_EC_WEIERSTRASS = 0, MPI_EC_MONTGOMERY = 1, MPI_EC_EDWARDS = 2, }; enum ecc_dialects { ECC_DIALECT_STANDARD = 0, ECC_DIALECT_ED25519 = 1, ECC_DIALECT_SAFECURVE = 2, }; struct mpi_ec_ctx { enum gcry_mpi_ec_models model; enum ecc_dialects dialect; int flags; unsigned int nbits; MPI p; MPI a; MPI b; MPI_POINT G; MPI n; unsigned int h; MPI_POINT Q; MPI d; const char *name; struct { struct { unsigned int a_is_pminus3: 1; unsigned int two_inv_p: 1; } valid; int a_is_pminus3; MPI two_inv_p; mpi_barrett_t p_barrett; MPI scratch[11]; } t; void (*addm)(MPI, MPI, MPI, struct mpi_ec_ctx *); void (*subm)(MPI, MPI, MPI, struct mpi_ec_ctx *); void (*mulm)(MPI, MPI, MPI, struct mpi_ec_ctx *); void (*pow2)(MPI, const MPI, struct mpi_ec_ctx *); void (*mul2)(MPI, MPI, struct mpi_ec_ctx *); }; struct field_table { const char *p; void (*addm)(MPI, MPI, MPI, struct mpi_ec_ctx *); void (*subm)(MPI, MPI, MPI, struct mpi_ec_ctx *); void (*mulm)(MPI, MPI, MPI, struct mpi_ec_ctx *); void (*mul2)(MPI, MPI, struct mpi_ec_ctx *); void (*pow2)(MPI, const MPI, struct mpi_ec_ctx *); }; enum gcry_mpi_format { GCRYMPI_FMT_NONE = 0, GCRYMPI_FMT_STD = 1, GCRYMPI_FMT_PGP = 2, GCRYMPI_FMT_SSH = 3, GCRYMPI_FMT_HEX = 4, GCRYMPI_FMT_USG = 5, GCRYMPI_FMT_OPAQUE = 8, }; struct barrett_ctx_s___2; typedef struct barrett_ctx_s___2 *mpi_barrett_t___2; struct barrett_ctx_s___2 { MPI m; int m_copied; int k; MPI y; MPI r1; MPI r2; MPI r3; }; struct karatsuba_ctx { struct karatsuba_ctx *next; mpi_ptr_t tspace; mpi_size_t tspace_size; mpi_ptr_t tp; mpi_size_t tp_size; }; typedef long int mpi_limb_signed_t; struct sg_pool { size_t size; char *name; struct kmem_cache *slab; mempool_t *pool; }; struct msr { union { struct { u32 l; u32 h; }; u64 q; }; }; struct msr_info { u32 msr_no; struct msr reg; struct msr *msrs; int err; }; struct msr_regs_info { u32 *regs; int err; }; struct msr_info_completion { struct msr_info msr; struct completion done; }; struct trace_event_raw_msr_trace_class { struct trace_entry ent; unsigned int msr; u64 val; int failed; char __data[0]; }; struct trace_event_data_offsets_msr_trace_class {}; typedef void (*btf_trace_read_msr)(void *, unsigned int, u64, int); typedef void (*btf_trace_write_msr)(void *, unsigned int, u64, int); typedef void (*btf_trace_rdpmc)(void *, unsigned int, u64, int); struct warn_args___2; typedef __u32 Elf32_Addr; typedef __u16 Elf32_Half; typedef __u32 Elf32_Off; struct elf32_hdr { unsigned char e_ident[16]; Elf32_Half e_type; Elf32_Half e_machine; Elf32_Word e_version; Elf32_Addr e_entry; Elf32_Off e_phoff; Elf32_Off e_shoff; Elf32_Word e_flags; Elf32_Half e_ehsize; Elf32_Half e_phentsize; Elf32_Half e_phnum; Elf32_Half e_shentsize; Elf32_Half e_shnum; Elf32_Half e_shstrndx; }; typedef struct elf32_hdr Elf32_Ehdr; struct elf32_phdr { Elf32_Word p_type; Elf32_Off p_offset; Elf32_Addr p_vaddr; Elf32_Addr p_paddr; Elf32_Word p_filesz; Elf32_Word p_memsz; Elf32_Word p_flags; Elf32_Word p_align; }; typedef struct elf32_phdr Elf32_Phdr; typedef struct elf64_phdr Elf64_Phdr; typedef struct elf32_note Elf32_Nhdr; struct compress_format { unsigned char magic[2]; const char *name; decompress_fn decompressor; }; struct cpio_data { void *data; size_t size; char name[18]; }; enum cpio_fields { C_MAGIC = 0, C_INO = 1, C_MODE = 2, C_UID = 3, C_GID = 4, C_NLINK = 5, C_MTIME = 6, C_FILESIZE = 7, C_MAJ = 8, C_MIN = 9, C_RMAJ = 10, C_RMIN = 11, C_NAMESIZE = 12, C_CHKSUM = 13, C_NFIELDS = 14, }; struct fprop_local_single { long unsigned int events; unsigned int period; raw_spinlock_t lock; }; struct ida_bitmap { long unsigned int bitmap[16]; }; struct klist_waiter { struct list_head list; struct klist_node *node; struct task_struct *process; int woken; }; struct scm_creds { u32 pid; kuid_t uid; kgid_t gid; }; struct netlink_skb_parms { struct scm_creds creds; __u32 portid; __u32 dst_group; __u32 flags; struct sock *sk; bool nsid_is_set; int nsid; }; struct netlink_kernel_cfg { unsigned int groups; unsigned int flags; void (*input)(struct sk_buff *); struct mutex *cb_mutex; int (*bind)(struct net *, int); void (*unbind)(struct net *, int); bool (*compare)(struct net *, struct sock *); }; struct uevent_sock { struct list_head list; struct sock *sk; }; enum { LOGIC_PIO_INDIRECT = 0, LOGIC_PIO_CPU_MMIO = 1, }; struct logic_pio_host_ops; struct logic_pio_hwaddr { struct list_head list; struct fwnode_handle *fwnode; resource_size_t hw_start; resource_size_t io_start; resource_size_t size; long unsigned int flags; void *hostdata; const struct logic_pio_host_ops *ops; }; struct logic_pio_host_ops { u32 (*in)(void *, long unsigned int, size_t); void (*out)(void *, long unsigned int, u32, size_t); u32 (*ins)(void *, long unsigned int, void *, size_t, unsigned int); void (*outs)(void *, long unsigned int, const void *, size_t, unsigned int); }; typedef struct { long unsigned int key[2]; } hsiphash_key_t; struct clk_core; struct clk { struct clk_core *core; struct device *dev; const char *dev_id; const char *con_id; long unsigned int min_rate; long unsigned int max_rate; unsigned int exclusive_count; struct hlist_node clks_node; }; struct in_addr { __be32 s_addr; }; struct sockaddr_in { __kernel_sa_family_t sin_family; __be16 sin_port; struct in_addr sin_addr; unsigned char __pad[8]; }; struct sockaddr_in6 { short unsigned int sin6_family; __be16 sin6_port; __be32 sin6_flowinfo; struct in6_addr sin6_addr; __u32 sin6_scope_id; }; enum format_type { FORMAT_TYPE_NONE = 0, FORMAT_TYPE_WIDTH = 1, FORMAT_TYPE_PRECISION = 2, FORMAT_TYPE_CHAR = 3, FORMAT_TYPE_STR = 4, FORMAT_TYPE_PTR = 5, FORMAT_TYPE_PERCENT_CHAR = 6, FORMAT_TYPE_INVALID = 7, FORMAT_TYPE_LONG_LONG = 8, FORMAT_TYPE_ULONG = 9, FORMAT_TYPE_LONG = 10, FORMAT_TYPE_UBYTE = 11, FORMAT_TYPE_BYTE = 12, FORMAT_TYPE_USHORT = 13, FORMAT_TYPE_SHORT = 14, FORMAT_TYPE_UINT = 15, FORMAT_TYPE_INT = 16, FORMAT_TYPE_SIZE_T = 17, FORMAT_TYPE_PTRDIFF = 18, }; struct printf_spec { unsigned int type: 8; int field_width: 24; unsigned int flags: 8; unsigned int base: 8; int precision: 16; }; struct page_flags_fields { int width; int shift; int mask; const struct printf_spec *spec; const char *name; }; struct minmax_sample { u32 t; u32 v; }; struct minmax { struct minmax_sample s[3]; }; struct xa_limit { u32 max; u32 min; }; enum { st_wordstart = 0, st_wordcmp = 1, st_wordskip = 2, st_bufcpy = 3, }; enum { st_wordstart___2 = 0, st_wordcmp___2 = 1, st_wordskip___2 = 2, }; typedef __u16 __sum16; struct in6_addr___2; enum reg_type { REG_TYPE_RM = 0, REG_TYPE_REG = 1, REG_TYPE_INDEX = 2, REG_TYPE_BASE = 3, }; enum { pci_channel_io_normal = 1, pci_channel_io_frozen = 2, pci_channel_io_perm_failure = 3, }; struct acpi_device; struct pci_sysdata { int domain; int node; struct acpi_device *companion; void *iommu; void *fwnode; }; struct pci_bus_resource { struct list_head list; struct resource *res; unsigned int flags; }; typedef u64 pci_bus_addr_t; struct pci_bus_region { pci_bus_addr_t start; pci_bus_addr_t end; }; enum pci_fixup_pass { pci_fixup_early = 0, pci_fixup_header = 1, pci_fixup_final = 2, pci_fixup_enable = 3, pci_fixup_resume = 4, pci_fixup_suspend = 5, pci_fixup_resume_early = 6, pci_fixup_suspend_late = 7, }; struct hotplug_slot_ops; struct hotplug_slot { const struct hotplug_slot_ops *ops; struct list_head slot_list; struct pci_slot *pci_slot; struct module *owner; const char *mod_name; }; enum pci_dev_flags { PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = 1, PCI_DEV_FLAGS_NO_D3 = 2, PCI_DEV_FLAGS_ASSIGNED = 4, PCI_DEV_FLAGS_ACS_ENABLED_QUIRK = 8, PCI_DEV_FLAG_PCIE_BRIDGE_ALIAS = 32, PCI_DEV_FLAGS_NO_BUS_RESET = 64, PCI_DEV_FLAGS_NO_PM_RESET = 128, PCI_DEV_FLAGS_VPD_REF_F0 = 256, PCI_DEV_FLAGS_BRIDGE_XLATE_ROOT = 512, PCI_DEV_FLAGS_NO_FLR_RESET = 1024, PCI_DEV_FLAGS_NO_RELAXED_ORDERING = 2048, PCI_DEV_FLAGS_HAS_MSI_MASKING = 4096, }; enum pci_bus_flags { PCI_BUS_FLAGS_NO_MSI = 1, PCI_BUS_FLAGS_NO_MMRBC = 2, PCI_BUS_FLAGS_NO_AERSID = 4, PCI_BUS_FLAGS_NO_EXTCFG = 8, }; enum pci_bus_speed { PCI_SPEED_33MHz = 0, PCI_SPEED_66MHz = 1, PCI_SPEED_66MHz_PCIX = 2, PCI_SPEED_100MHz_PCIX = 3, PCI_SPEED_133MHz_PCIX = 4, PCI_SPEED_66MHz_PCIX_ECC = 5, PCI_SPEED_100MHz_PCIX_ECC = 6, PCI_SPEED_133MHz_PCIX_ECC = 7, PCI_SPEED_66MHz_PCIX_266 = 9, PCI_SPEED_100MHz_PCIX_266 = 10, PCI_SPEED_133MHz_PCIX_266 = 11, AGP_UNKNOWN = 12, AGP_1X = 13, AGP_2X = 14, AGP_4X = 15, AGP_8X = 16, PCI_SPEED_66MHz_PCIX_533 = 17, PCI_SPEED_100MHz_PCIX_533 = 18, PCI_SPEED_133MHz_PCIX_533 = 19, PCIE_SPEED_2_5GT = 20, PCIE_SPEED_5_0GT = 21, PCIE_SPEED_8_0GT = 22, PCIE_SPEED_16_0GT = 23, PCIE_SPEED_32_0GT = 24, PCIE_SPEED_64_0GT = 25, PCI_SPEED_UNKNOWN = 255, }; struct pci_host_bridge { struct device dev; struct pci_bus *bus; struct pci_ops *ops; struct pci_ops *child_ops; void *sysdata; int busnr; int domain_nr; struct list_head windows; struct list_head dma_ranges; u8 (*swizzle_irq)(struct pci_dev *, u8 *); int (*map_irq)(const struct pci_dev *, u8, u8); void (*release_fn)(struct pci_host_bridge *); void *release_data; unsigned int ignore_reset_delay: 1; unsigned int no_ext_tags: 1; unsigned int native_aer: 1; unsigned int native_pcie_hotplug: 1; unsigned int native_shpc_hotplug: 1; unsigned int native_pme: 1; unsigned int native_ltr: 1; unsigned int native_dpc: 1; unsigned int preserve_config: 1; unsigned int size_windows: 1; unsigned int msi_domain: 1; resource_size_t (*align_resource)(struct pci_dev *, const struct resource *, resource_size_t, resource_size_t, resource_size_t); long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long unsigned int private[0]; }; enum { PCI_REASSIGN_ALL_RSRC = 1, PCI_REASSIGN_ALL_BUS = 2, PCI_PROBE_ONLY = 4, PCI_CAN_SKIP_ISA_ALIGN = 8, PCI_ENABLE_PROC_DOMAINS = 16, PCI_COMPAT_DOMAIN_0 = 32, PCI_SCAN_ALL_PCIE_DEVS = 64, }; enum pcie_bus_config_types { PCIE_BUS_TUNE_OFF = 0, PCIE_BUS_DEFAULT = 1, PCIE_BUS_SAFE = 2, PCIE_BUS_PERFORMANCE = 3, PCIE_BUS_PEER2PEER = 4, }; struct acpi_device_status { u32 present: 1; u32 enabled: 1; u32 show_in_ui: 1; u32 functional: 1; u32 battery_present: 1; u32 reserved: 27; }; struct acpi_device_flags { u32 dynamic_status: 1; u32 removable: 1; u32 ejectable: 1; u32 power_manageable: 1; u32 match_driver: 1; u32 initialized: 1; u32 visited: 1; u32 hotplug_notify: 1; u32 is_dock_station: 1; u32 of_compatible_ok: 1; u32 coherent_dma: 1; u32 cca_seen: 1; u32 enumeration_by_parent: 1; u32 reserved: 19; }; typedef char acpi_bus_id[8]; struct acpi_pnp_type { u32 hardware_id: 1; u32 bus_address: 1; u32 platform_id: 1; u32 reserved: 29; }; typedef u64 acpi_bus_address; typedef char acpi_device_name[40]; typedef char acpi_device_class[20]; struct acpi_device_pnp { acpi_bus_id bus_id; int instance_no; struct acpi_pnp_type type; acpi_bus_address bus_address; char *unique_id; struct list_head ids; acpi_device_name device_name; acpi_device_class device_class; union acpi_object *str_obj; }; struct acpi_device_power_flags { u32 explicit_get: 1; u32 power_resources: 1; u32 inrush_current: 1; u32 power_removed: 1; u32 ignore_parent: 1; u32 dsw_present: 1; u32 reserved: 26; }; struct acpi_device_power_state { struct { u8 valid: 1; u8 explicit_set: 1; u8 reserved: 6; } flags; int power; int latency; struct list_head resources; }; struct acpi_device_power { int state; struct acpi_device_power_flags flags; struct acpi_device_power_state states[5]; u8 state_for_enumeration; }; struct acpi_device_wakeup_flags { u8 valid: 1; u8 notifier_present: 1; }; struct acpi_device_wakeup_context { void (*func)(struct acpi_device_wakeup_context *); struct device *dev; }; struct acpi_device_wakeup { acpi_handle gpe_device; u64 gpe_number; u64 sleep_state; struct list_head resources; struct acpi_device_wakeup_flags flags; struct acpi_device_wakeup_context context; struct wakeup_source *ws; int prepare_count; int enable_count; }; struct acpi_device_perf_flags { u8 reserved: 8; }; struct acpi_device_perf_state; struct acpi_device_perf { int state; struct acpi_device_perf_flags flags; int state_count; struct acpi_device_perf_state *states; }; struct acpi_device_dir { struct proc_dir_entry *entry; }; struct acpi_device_data { const union acpi_object *pointer; struct list_head properties; const union acpi_object *of_compatible; struct list_head subnodes; }; struct acpi_scan_handler; struct acpi_hotplug_context; struct acpi_driver; struct acpi_gpio_mapping; struct acpi_device { int device_type; acpi_handle handle; struct fwnode_handle fwnode; struct acpi_device *parent; struct list_head children; struct list_head node; struct list_head wakeup_list; struct list_head del_list; struct acpi_device_status status; struct acpi_device_flags flags; struct acpi_device_pnp pnp; struct acpi_device_power power; struct acpi_device_wakeup wakeup; struct acpi_device_perf performance; struct acpi_device_dir dir; struct acpi_device_data data; struct acpi_scan_handler *handler; struct acpi_hotplug_context *hp; struct acpi_driver *driver; const struct acpi_gpio_mapping *driver_gpios; void *driver_data; struct device dev; unsigned int physical_node_count; unsigned int dep_unmet; struct list_head physical_node_list; struct mutex physical_node_lock; void (*remove)(struct acpi_device *); }; struct hotplug_slot_ops { int (*enable_slot)(struct hotplug_slot *); int (*disable_slot)(struct hotplug_slot *); int (*set_attention_status)(struct hotplug_slot *, u8); int (*hardware_test)(struct hotplug_slot *, u32); int (*get_power_status)(struct hotplug_slot *, u8 *); int (*get_attention_status)(struct hotplug_slot *, u8 *); int (*get_latch_status)(struct hotplug_slot *, u8 *); int (*get_adapter_status)(struct hotplug_slot *, u8 *); int (*reset_slot)(struct hotplug_slot *, bool); }; struct acpi_hotplug_profile { struct kobject kobj; int (*scan_dependent)(struct acpi_device *); void (*notify_online)(struct acpi_device *); bool enabled: 1; bool demand_offline: 1; }; struct acpi_scan_handler { const struct acpi_device_id *ids; struct list_head list_node; bool (*match)(const char *, const struct acpi_device_id **); int (*attach)(struct acpi_device *, const struct acpi_device_id *); void (*detach)(struct acpi_device *); void (*bind)(struct device *); void (*unbind)(struct device *); struct acpi_hotplug_profile hotplug; }; struct acpi_hotplug_context { struct acpi_device *self; int (*notify)(struct acpi_device *, u32); void (*uevent)(struct acpi_device *, u32); void (*fixup)(struct acpi_device *); }; typedef int (*acpi_op_add)(struct acpi_device *); typedef int (*acpi_op_remove)(struct acpi_device *); typedef void (*acpi_op_notify)(struct acpi_device *, u32); struct acpi_device_ops { acpi_op_add add; acpi_op_remove remove; acpi_op_notify notify; }; struct acpi_driver { char name[80]; char class[80]; const struct acpi_device_id *ids; unsigned int flags; struct acpi_device_ops ops; struct device_driver drv; struct module *owner; }; struct acpi_device_perf_state { struct { u8 valid: 1; u8 reserved: 7; } flags; u8 power; u8 performance; int latency; }; struct acpi_gpio_params; struct acpi_gpio_mapping { const char *name; const struct acpi_gpio_params *data; unsigned int size; unsigned int quirks; }; enum pci_bar_type { pci_bar_unknown = 0, pci_bar_io = 1, pci_bar_mem32 = 2, pci_bar_mem64 = 3, }; struct pci_domain_busn_res { struct list_head list; struct resource res; int domain_nr; }; struct bus_attribute { struct attribute attr; ssize_t (*show)(struct bus_type *, char *); ssize_t (*store)(struct bus_type *, const char *, size_t); }; enum pcie_reset_state { pcie_deassert_reset = 1, pcie_warm_reset = 2, pcie_hot_reset = 3, }; enum pcie_link_width { PCIE_LNK_WIDTH_RESRV = 0, PCIE_LNK_X1 = 1, PCIE_LNK_X2 = 2, PCIE_LNK_X4 = 4, PCIE_LNK_X8 = 8, PCIE_LNK_X12 = 12, PCIE_LNK_X16 = 16, PCIE_LNK_X32 = 32, PCIE_LNK_WIDTH_UNKNOWN = 255, }; typedef int (*arch_set_vga_state_t)(struct pci_dev *, bool, unsigned int, u32); struct pci_cap_saved_data { u16 cap_nr; bool cap_extended; unsigned int size; u32 data[0]; }; struct pci_cap_saved_state { struct hlist_node next; struct pci_cap_saved_data cap; }; struct pci_reset_fn_method { int (*reset_fn)(struct pci_dev *, bool); char *name; }; struct pci_pme_device { struct list_head list; struct pci_dev *dev; }; struct pci_saved_state { u32 config_space[16]; struct pci_cap_saved_data cap[0]; }; struct pci_devres { unsigned int enabled: 1; unsigned int pinned: 1; unsigned int orig_intx: 1; unsigned int restore_intx: 1; unsigned int mwi: 1; u32 region_mask; }; struct driver_attribute { struct attribute attr; ssize_t (*show)(struct device_driver *, char *); ssize_t (*store)(struct device_driver *, const char *, size_t); }; enum dev_dma_attr { DEV_DMA_NOT_SUPPORTED = 0, DEV_DMA_NON_COHERENT = 1, DEV_DMA_COHERENT = 2, }; struct pci_dynid { struct list_head node; struct pci_device_id id; }; struct drv_dev_and_id { struct pci_driver *drv; struct pci_dev *dev; const struct pci_device_id *id; }; enum pci_mmap_state { pci_mmap_io = 0, pci_mmap_mem = 1, }; enum pci_mmap_api { PCI_MMAP_SYSFS = 0, PCI_MMAP_PROCFS = 1, }; struct pci_dev_resource { struct list_head list; struct resource *res; struct pci_dev *dev; resource_size_t start; resource_size_t end; resource_size_t add_size; resource_size_t min_align; long unsigned int flags; }; enum release_type { leaf_only = 0, whole_subtree = 1, }; enum enable_type { undefined = 4294967295, user_disabled = 0, auto_disabled = 1, user_enabled = 2, auto_enabled = 3, }; struct msix_entry { u32 vector; u16 entry; }; struct pci_filp_private { enum pci_mmap_state mmap_state; int write_combine; }; struct pci_slot_attribute { struct attribute attr; ssize_t (*show)(struct pci_slot *, char *); ssize_t (*store)(struct pci_slot *, const char *, size_t); }; typedef u64 acpi_size; struct acpi_buffer { acpi_size length; void *pointer; }; struct acpi_pci_root { struct acpi_device *device; struct pci_bus *bus; u16 segment; struct resource secondary; u32 osc_support_set; u32 osc_control_set; phys_addr_t mcfg_addr; }; enum pm_qos_flags_status { PM_QOS_FLAGS_UNDEFINED = 4294967295, PM_QOS_FLAGS_NONE = 0, PM_QOS_FLAGS_SOME = 1, PM_QOS_FLAGS_ALL = 2, }; struct hpx_type0 { u32 revision; u8 cache_line_size; u8 latency_timer; u8 enable_serr; u8 enable_perr; }; struct hpx_type1 { u32 revision; u8 max_mem_read; u8 avg_max_split; u16 tot_max_split; }; struct hpx_type2 { u32 revision; u32 unc_err_mask_and; u32 unc_err_mask_or; u32 unc_err_sever_and; u32 unc_err_sever_or; u32 cor_err_mask_and; u32 cor_err_mask_or; u32 adv_err_cap_and; u32 adv_err_cap_or; u16 pci_exp_devctl_and; u16 pci_exp_devctl_or; u16 pci_exp_lnkctl_and; u16 pci_exp_lnkctl_or; u32 sec_unc_err_sever_and; u32 sec_unc_err_sever_or; u32 sec_unc_err_mask_and; u32 sec_unc_err_mask_or; }; struct hpx_type3 { u16 device_type; u16 function_type; u16 config_space_location; u16 pci_exp_cap_id; u16 pci_exp_cap_ver; u16 pci_exp_vendor_id; u16 dvsec_id; u16 dvsec_rev; u16 match_offset; u32 match_mask_and; u32 match_value; u16 reg_offset; u32 reg_mask_and; u32 reg_mask_or; }; enum hpx_type3_dev_type { HPX_TYPE_ENDPOINT = 1, HPX_TYPE_LEG_END = 2, HPX_TYPE_RC_END = 4, HPX_TYPE_RC_EC = 8, HPX_TYPE_ROOT_PORT = 16, HPX_TYPE_UPSTREAM = 32, HPX_TYPE_DOWNSTREAM = 64, HPX_TYPE_PCI_BRIDGE = 128, HPX_TYPE_PCIE_BRIDGE = 256, }; enum hpx_type3_fn_type { HPX_FN_NORMAL = 1, HPX_FN_SRIOV_PHYS = 2, HPX_FN_SRIOV_VIRT = 4, }; enum hpx_type3_cfg_loc { HPX_CFG_PCICFG = 0, HPX_CFG_PCIE_CAP = 1, HPX_CFG_PCIE_CAP_EXT = 2, HPX_CFG_VEND_CAP = 3, HPX_CFG_DVSEC = 4, HPX_CFG_MAX = 5, }; enum device_link_state { DL_STATE_NONE = 4294967295, DL_STATE_DORMANT = 0, DL_STATE_AVAILABLE = 1, DL_STATE_CONSUMER_PROBE = 2, DL_STATE_ACTIVE = 3, DL_STATE_SUPPLIER_UNBIND = 4, }; struct device_link { struct device *supplier; struct list_head s_node; struct device *consumer; struct list_head c_node; struct device link_dev; enum device_link_state status; u32 flags; refcount_t rpm_active; struct kref kref; struct work_struct rm_work; bool supplier_preactivated; }; enum pci_irq_reroute_variant { INTEL_IRQ_REROUTE_VARIANT = 1, MAX_IRQ_REROUTE_VARIANTS = 3, }; struct pci_fixup { u16 vendor; u16 device; u32 class; unsigned int class_shift; int hook_offset; }; enum { NVME_REG_CAP = 0, NVME_REG_VS = 8, NVME_REG_INTMS = 12, NVME_REG_INTMC = 16, NVME_REG_CC = 20, NVME_REG_CSTS = 28, NVME_REG_NSSR = 32, NVME_REG_AQA = 36, NVME_REG_ASQ = 40, NVME_REG_ACQ = 48, NVME_REG_CMBLOC = 56, NVME_REG_CMBSZ = 60, NVME_REG_BPINFO = 64, NVME_REG_BPRSEL = 68, NVME_REG_BPMBL = 72, NVME_REG_CMBMSC = 80, NVME_REG_PMRCAP = 3584, NVME_REG_PMRCTL = 3588, NVME_REG_PMRSTS = 3592, NVME_REG_PMREBS = 3596, NVME_REG_PMRSWTP = 3600, NVME_REG_DBS = 4096, }; enum { NVME_CC_ENABLE = 1, NVME_CC_EN_SHIFT = 0, NVME_CC_CSS_SHIFT = 4, NVME_CC_MPS_SHIFT = 7, NVME_CC_AMS_SHIFT = 11, NVME_CC_SHN_SHIFT = 14, NVME_CC_IOSQES_SHIFT = 16, NVME_CC_IOCQES_SHIFT = 20, NVME_CC_CSS_NVM = 0, NVME_CC_CSS_CSI = 96, NVME_CC_CSS_MASK = 112, NVME_CC_AMS_RR = 0, NVME_CC_AMS_WRRU = 2048, NVME_CC_AMS_VS = 14336, NVME_CC_SHN_NONE = 0, NVME_CC_SHN_NORMAL = 16384, NVME_CC_SHN_ABRUPT = 32768, NVME_CC_SHN_MASK = 49152, NVME_CC_IOSQES = 393216, NVME_CC_IOCQES = 4194304, NVME_CAP_CSS_NVM = 1, NVME_CAP_CSS_CSI = 64, NVME_CSTS_RDY = 1, NVME_CSTS_CFS = 2, NVME_CSTS_NSSRO = 16, NVME_CSTS_PP = 32, NVME_CSTS_SHST_NORMAL = 0, NVME_CSTS_SHST_OCCUR = 4, NVME_CSTS_SHST_CMPLT = 8, NVME_CSTS_SHST_MASK = 12, NVME_CMBMSC_CRE = 1, NVME_CMBMSC_CMSE = 2, }; enum { NVME_AEN_BIT_NS_ATTR = 8, NVME_AEN_BIT_FW_ACT = 9, NVME_AEN_BIT_ANA_CHANGE = 11, NVME_AEN_BIT_DISC_CHANGE = 31, }; enum { SWITCHTEC_GAS_MRPC_OFFSET = 0, SWITCHTEC_GAS_TOP_CFG_OFFSET = 4096, SWITCHTEC_GAS_SW_EVENT_OFFSET = 6144, SWITCHTEC_GAS_SYS_INFO_OFFSET = 8192, SWITCHTEC_GAS_FLASH_INFO_OFFSET = 8704, SWITCHTEC_GAS_PART_CFG_OFFSET = 16384, SWITCHTEC_GAS_NTB_OFFSET = 65536, SWITCHTEC_GAS_PFF_CSR_OFFSET = 1261568, }; enum { SWITCHTEC_NTB_REG_INFO_OFFSET = 0, SWITCHTEC_NTB_REG_CTRL_OFFSET = 16384, SWITCHTEC_NTB_REG_DBMSG_OFFSET = 409600, }; struct nt_partition_info { u32 xlink_enabled; u32 target_part_low; u32 target_part_high; u32 reserved; }; struct ntb_info_regs { u8 partition_count; u8 partition_id; u16 reserved1; u64 ep_map; u16 requester_id; u16 reserved2; u32 reserved3[4]; struct nt_partition_info ntp_info[48]; } __attribute__((packed)); struct ntb_ctrl_regs { u32 partition_status; u32 partition_op; u32 partition_ctrl; u32 bar_setup; u32 bar_error; u16 lut_table_entries; u16 lut_table_offset; u32 lut_error; u16 req_id_table_size; u16 req_id_table_offset; u32 req_id_error; u32 reserved1[7]; struct { u32 ctl; u32 win_size; u64 xlate_addr; } bar_entry[6]; struct { u32 win_size; u32 reserved[3]; } bar_ext_entry[6]; u32 reserved2[192]; u32 req_id_table[512]; u32 reserved3[256]; u64 lut_entry[512]; }; struct pci_dev_reset_methods { u16 vendor; u16 device; int (*reset)(struct pci_dev *, bool); }; struct pci_dev_acs_enabled { u16 vendor; u16 device; int (*acs_enabled)(struct pci_dev *, u16); }; struct pci_dev_acs_ops { u16 vendor; u16 device; int (*enable_acs)(struct pci_dev *); int (*disable_acs_redir)(struct pci_dev *); }; enum dmi_device_type { DMI_DEV_TYPE_ANY = 0, DMI_DEV_TYPE_OTHER = 1, DMI_DEV_TYPE_UNKNOWN = 2, DMI_DEV_TYPE_VIDEO = 3, DMI_DEV_TYPE_SCSI = 4, DMI_DEV_TYPE_ETHERNET = 5, DMI_DEV_TYPE_TOKENRING = 6, DMI_DEV_TYPE_SOUND = 7, DMI_DEV_TYPE_PATA = 8, DMI_DEV_TYPE_SATA = 9, DMI_DEV_TYPE_SAS = 10, DMI_DEV_TYPE_IPMI = 4294967295, DMI_DEV_TYPE_OEM_STRING = 4294967294, DMI_DEV_TYPE_DEV_ONBOARD = 4294967293, DMI_DEV_TYPE_DEV_SLOT = 4294967292, }; struct dmi_device { struct list_head list; int type; const char *name; void *device_data; }; struct dmi_dev_onboard { struct dmi_device dev; int instance; int segment; int bus; int devfn; }; enum smbios_attr_enum { SMBIOS_ATTR_NONE = 0, SMBIOS_ATTR_LABEL_SHOW = 1, SMBIOS_ATTR_INSTANCE_SHOW = 2, }; enum acpi_attr_enum { ACPI_ATTR_LABEL_SHOW = 0, ACPI_ATTR_INDEX_SHOW = 1, }; struct thermal_cooling_device_ops; struct thermal_cooling_device { int id; char *type; struct device device; struct device_node *np; void *devdata; void *stats; const struct thermal_cooling_device_ops *ops; bool updated; struct mutex lock; struct list_head thermal_instances; struct list_head node; }; struct idle_cpu { struct cpuidle_state *state_table; long unsigned int auto_demotion_disable_flags; bool byt_auto_demotion_disable_flag; bool disable_promotion_to_c1e; bool use_acpi; }; struct thermal_cooling_device_ops { int (*get_max_state)(struct thermal_cooling_device *, long unsigned int *); int (*get_cur_state)(struct thermal_cooling_device *, long unsigned int *); int (*set_cur_state)(struct thermal_cooling_device *, long unsigned int); int (*get_requested_power)(struct thermal_cooling_device *, u32 *); int (*state2power)(struct thermal_cooling_device *, long unsigned int, u32 *); int (*power2state)(struct thermal_cooling_device *, u32, long unsigned int *); }; struct acpi_lpi_state { u32 min_residency; u32 wake_latency; u32 flags; u32 arch_flags; u32 res_cnt_freq; u32 enable_parent_state; u64 address; u8 index; u8 entry_method; char desc[32]; }; struct acpi_processor_power { int count; union { struct acpi_processor_cx states[8]; struct acpi_lpi_state lpi_states[8]; }; int timer_broadcast_on_state; }; struct acpi_psd_package { u64 num_entries; u64 revision; u64 domain; u64 coord_type; u64 num_processors; }; struct acpi_pct_register { u8 descriptor; u16 length; u8 space_id; u8 bit_width; u8 bit_offset; u8 reserved; u64 address; } __attribute__((packed)); struct acpi_processor_px { u64 core_frequency; u64 power; u64 transition_latency; u64 bus_master_latency; u64 control; u64 status; }; struct acpi_processor_performance { unsigned int state; unsigned int platform_limit; struct acpi_pct_register control_register; struct acpi_pct_register status_register; short: 16; unsigned int state_count; int: 32; struct acpi_processor_px *states; struct acpi_psd_package domain_info; cpumask_var_t shared_cpu_map; unsigned int shared_type; int: 32; } __attribute__((packed)); struct acpi_tsd_package { u64 num_entries; u64 revision; u64 domain; u64 coord_type; u64 num_processors; }; struct acpi_processor_tx_tss { u64 freqpercentage; u64 power; u64 transition_latency; u64 control; u64 status; }; struct acpi_processor_tx { u16 power; u16 performance; }; struct acpi_processor; struct acpi_processor_throttling { unsigned int state; unsigned int platform_limit; struct acpi_pct_register control_register; struct acpi_pct_register status_register; short: 16; unsigned int state_count; int: 32; struct acpi_processor_tx_tss *states_tss; struct acpi_tsd_package domain_info; cpumask_var_t shared_cpu_map; int (*acpi_processor_get_throttling)(struct acpi_processor *); int (*acpi_processor_set_throttling)(struct acpi_processor *, int, bool); u32 address; u8 duty_offset; u8 duty_width; u8 tsd_valid_flag; char: 8; unsigned int shared_type; struct acpi_processor_tx states[16]; int: 32; } __attribute__((packed)); struct acpi_processor_lx { int px; int tx; }; struct acpi_processor_limit { struct acpi_processor_lx state; struct acpi_processor_lx thermal; struct acpi_processor_lx user; }; struct acpi_processor { acpi_handle handle; u32 acpi_id; phys_cpuid_t phys_id; u32 id; u32 pblk; int performance_platform_limit; int throttling_platform_limit; struct acpi_processor_flags flags; struct acpi_processor_power power; struct acpi_processor_performance *performance; struct acpi_processor_throttling throttling; struct acpi_processor_limit limit; struct thermal_cooling_device *cdev; struct device *dev; struct freq_qos_request perflib_req; struct freq_qos_request thermal_req; }; typedef u16 acpi_owner_id; union acpi_name_union { u32 integer; char ascii[4]; }; struct acpi_table_desc { acpi_physical_address address; struct acpi_table_header *pointer; u32 length; union acpi_name_union signature; acpi_owner_id owner_id; u8 flags; u16 validation_count; }; struct acpi_madt_io_sapic { struct acpi_subtable_header header; u8 id; u8 reserved; u32 global_irq_base; u64 address; }; struct acpi_madt_interrupt_source { struct acpi_subtable_header header; u16 inti_flags; u8 type; u8 id; u8 eid; u8 io_sapic_vector; u32 global_irq; u32 flags; }; struct acpi_madt_generic_interrupt { struct acpi_subtable_header header; u16 reserved; u32 cpu_interface_number; u32 uid; u32 flags; u32 parking_version; u32 performance_interrupt; u64 parked_address; u64 base_address; u64 gicv_base_address; u64 gich_base_address; u32 vgic_interrupt; u64 gicr_base_address; u64 arm_mpidr; u8 efficiency_class; u8 reserved2[1]; u16 spe_interrupt; } __attribute__((packed)); struct acpi_madt_generic_distributor { struct acpi_subtable_header header; u16 reserved; u32 gic_id; u64 base_address; u32 global_irq_base; u8 version; u8 reserved2[3]; }; enum acpi_subtable_type { ACPI_SUBTABLE_COMMON = 0, ACPI_SUBTABLE_HMAT = 1, ACPI_SUBTABLE_PRMT = 2, }; struct acpi_subtable_entry { union acpi_subtable_headers *hdr; enum acpi_subtable_type type; }; enum acpi_predicate { all_versions = 0, less_than_or_equal = 1, equal = 2, greater_than_or_equal = 3, }; struct acpi_platform_list { char oem_id[7]; char oem_table_id[9]; u32 oem_revision; char *table; enum acpi_predicate pred; char *reason; u32 data; }; typedef u32 (*acpi_interface_handler)(acpi_string, u32); struct acpi_osi_entry { char string[64]; bool enable; }; struct acpi_osi_config { u8 default_disabling; unsigned int linux_enable: 1; unsigned int linux_dmi: 1; unsigned int linux_cmdline: 1; unsigned int darwin_enable: 1; unsigned int darwin_dmi: 1; unsigned int darwin_cmdline: 1; }; struct acpi_predefined_names { const char *name; u8 type; char *val; }; typedef u32 (*acpi_osd_handler)(void *); typedef void (*acpi_osd_exec_callback)(void *); typedef u32 (*acpi_gpe_handler)(acpi_handle, u32, void *); typedef void (*acpi_notify_handler)(acpi_handle, u32, void *); typedef void (*acpi_object_handler)(acpi_handle, void *); typedef acpi_status (*acpi_adr_space_handler)(u32, acpi_physical_address, u32, u64 *, void *, void *); typedef acpi_status (*acpi_adr_space_setup)(acpi_handle, u32, void *, void **); typedef acpi_status (*acpi_walk_callback)(acpi_handle, u32, void *, void **); struct acpi_pci_id { u16 segment; u16 bus; u16 device; u16 function; }; struct acpi_mem_mapping { acpi_physical_address physical_address; u8 *logical_address; acpi_size length; struct acpi_mem_mapping *next_mm; }; struct acpi_mem_space_context { u32 length; acpi_physical_address address; struct acpi_mem_mapping *cur_mm; struct acpi_mem_mapping *first_mm; }; typedef enum { OSL_GLOBAL_LOCK_HANDLER = 0, OSL_NOTIFY_HANDLER = 1, OSL_GPE_HANDLER = 2, OSL_DEBUGGER_MAIN_THREAD = 3, OSL_DEBUGGER_EXEC_THREAD = 4, OSL_EC_POLL_HANDLER = 5, OSL_EC_BURST_HANDLER = 6, } acpi_execute_type; struct acpi_gpio_params { unsigned int crs_entry_index; unsigned int line_index; bool active_low; }; union acpi_operand_object; struct acpi_namespace_node { union acpi_operand_object *object; u8 descriptor_type; u8 type; u16 flags; union acpi_name_union name; struct acpi_namespace_node *parent; struct acpi_namespace_node *child; struct acpi_namespace_node *peer; acpi_owner_id owner_id; }; struct acpi_object_common { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; }; struct acpi_object_integer { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; u8 fill[3]; u64 value; }; struct acpi_object_string { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; char *pointer; u32 length; }; struct acpi_object_buffer { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; u8 *pointer; u32 length; u32 aml_length; u8 *aml_start; struct acpi_namespace_node *node; }; struct acpi_object_package { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; struct acpi_namespace_node *node; union acpi_operand_object **elements; u8 *aml_start; u32 aml_length; u32 count; }; struct acpi_object_event { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; void *os_semaphore; }; struct acpi_walk_state; typedef acpi_status (*acpi_internal_method)(struct acpi_walk_state *); struct acpi_object_method { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; u8 info_flags; u8 param_count; u8 sync_level; union acpi_operand_object *mutex; union acpi_operand_object *node; u8 *aml_start; union { acpi_internal_method implementation; union acpi_operand_object *handler; } dispatch; u32 aml_length; acpi_owner_id owner_id; u8 thread_count; }; struct acpi_thread_state; struct acpi_object_mutex { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; u8 sync_level; u16 acquisition_depth; void *os_mutex; u64 thread_id; struct acpi_thread_state *owner_thread; union acpi_operand_object *prev; union acpi_operand_object *next; struct acpi_namespace_node *node; u8 original_sync_level; }; struct acpi_object_region { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; u8 space_id; struct acpi_namespace_node *node; union acpi_operand_object *handler; union acpi_operand_object *next; acpi_physical_address address; u32 length; }; struct acpi_object_notify_common { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; union acpi_operand_object *notify_list[2]; union acpi_operand_object *handler; }; struct acpi_gpe_block_info; struct acpi_object_device { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; union acpi_operand_object *notify_list[2]; union acpi_operand_object *handler; struct acpi_gpe_block_info *gpe_block; }; struct acpi_object_power_resource { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; union acpi_operand_object *notify_list[2]; union acpi_operand_object *handler; u32 system_level; u32 resource_order; }; struct acpi_object_processor { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; u8 proc_id; u8 length; union acpi_operand_object *notify_list[2]; union acpi_operand_object *handler; acpi_io_address address; }; struct acpi_object_thermal_zone { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; union acpi_operand_object *notify_list[2]; union acpi_operand_object *handler; }; struct acpi_object_field_common { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; u8 field_flags; u8 attribute; u8 access_byte_width; struct acpi_namespace_node *node; u32 bit_length; u32 base_byte_offset; u32 value; u8 start_field_bit_offset; u8 access_length; union acpi_operand_object *region_obj; }; struct acpi_object_region_field { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; u8 field_flags; u8 attribute; u8 access_byte_width; struct acpi_namespace_node *node; u32 bit_length; u32 base_byte_offset; u32 value; u8 start_field_bit_offset; u8 access_length; u16 resource_length; union acpi_operand_object *region_obj; u8 *resource_buffer; u16 pin_number_index; u8 *internal_pcc_buffer; }; struct acpi_object_buffer_field { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; u8 field_flags; u8 attribute; u8 access_byte_width; struct acpi_namespace_node *node; u32 bit_length; u32 base_byte_offset; u32 value; u8 start_field_bit_offset; u8 access_length; u8 is_create_field; union acpi_operand_object *buffer_obj; }; struct acpi_object_bank_field { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; u8 field_flags; u8 attribute; u8 access_byte_width; struct acpi_namespace_node *node; u32 bit_length; u32 base_byte_offset; u32 value; u8 start_field_bit_offset; u8 access_length; union acpi_operand_object *region_obj; union acpi_operand_object *bank_obj; }; struct acpi_object_index_field { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; u8 field_flags; u8 attribute; u8 access_byte_width; struct acpi_namespace_node *node; u32 bit_length; u32 base_byte_offset; u32 value; u8 start_field_bit_offset; u8 access_length; union acpi_operand_object *index_obj; union acpi_operand_object *data_obj; }; struct acpi_object_notify_handler { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; struct acpi_namespace_node *node; u32 handler_type; acpi_notify_handler handler; void *context; union acpi_operand_object *next[2]; }; struct acpi_object_addr_handler { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; u8 space_id; u8 handler_flags; acpi_adr_space_handler handler; struct acpi_namespace_node *node; void *context; void *context_mutex; acpi_adr_space_setup setup; union acpi_operand_object *region_list; union acpi_operand_object *next; }; struct acpi_object_reference { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; u8 class; u8 target_type; u8 resolved; void *object; struct acpi_namespace_node *node; union acpi_operand_object **where; u8 *index_pointer; u8 *aml; u32 value; }; struct acpi_object_extra { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; struct acpi_namespace_node *method_REG; struct acpi_namespace_node *scope_node; void *region_context; u8 *aml_start; u32 aml_length; }; struct acpi_object_data { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; acpi_object_handler handler; void *pointer; }; struct acpi_object_cache_list { union acpi_operand_object *next_object; u8 descriptor_type; u8 type; u16 reference_count; u8 flags; union acpi_operand_object *next; }; union acpi_operand_object { struct acpi_object_common common; struct acpi_object_integer integer; struct acpi_object_string string; struct acpi_object_buffer buffer; struct acpi_object_package package; struct acpi_object_event event; struct acpi_object_method method; struct acpi_object_mutex mutex; struct acpi_object_region region; struct acpi_object_notify_common common_notify; struct acpi_object_device device; struct acpi_object_power_resource power_resource; struct acpi_object_processor processor; struct acpi_object_thermal_zone thermal_zone; struct acpi_object_field_common common_field; struct acpi_object_region_field field; struct acpi_object_buffer_field buffer_field; struct acpi_object_bank_field bank_field; struct acpi_object_index_field index_field; struct acpi_object_notify_handler notify; struct acpi_object_addr_handler address_space; struct acpi_object_reference reference; struct acpi_object_extra extra; struct acpi_object_data data; struct acpi_object_cache_list cache; struct acpi_namespace_node node; }; union acpi_parse_object; union acpi_generic_state; struct acpi_parse_state { u8 *aml_start; u8 *aml; u8 *aml_end; u8 *pkg_start; u8 *pkg_end; union acpi_parse_object *start_op; struct acpi_namespace_node *start_node; union acpi_generic_state *scope; union acpi_parse_object *start_scope; u32 aml_size; }; typedef acpi_status (*acpi_parse_downwards)(struct acpi_walk_state *, union acpi_parse_object **); typedef acpi_status (*acpi_parse_upwards)(struct acpi_walk_state *); struct acpi_opcode_info; struct acpi_walk_state { struct acpi_walk_state *next; u8 descriptor_type; u8 walk_type; u16 opcode; u8 next_op_info; u8 num_operands; u8 operand_index; acpi_owner_id owner_id; u8 last_predicate; u8 current_result; u8 return_used; u8 scope_depth; u8 pass_number; u8 namespace_override; u8 result_size; u8 result_count; u8 *aml; u32 arg_types; u32 method_breakpoint; u32 user_breakpoint; u32 parse_flags; struct acpi_parse_state parser_state; u32 prev_arg_types; u32 arg_count; u16 method_nesting_depth; u8 method_is_nested; struct acpi_namespace_node arguments[7]; struct acpi_namespace_node local_variables[8]; union acpi_operand_object *operands[9]; union acpi_operand_object **params; u8 *aml_last_while; union acpi_operand_object **caller_return_desc; union acpi_generic_state *control_state; struct acpi_namespace_node *deferred_node; union acpi_operand_object *implicit_return_obj; struct acpi_namespace_node *method_call_node; union acpi_parse_object *method_call_op; union acpi_operand_object *method_desc; struct acpi_namespace_node *method_node; char *method_pathname; union acpi_parse_object *op; const struct acpi_opcode_info *op_info; union acpi_parse_object *origin; union acpi_operand_object *result_obj; union acpi_generic_state *results; union acpi_operand_object *return_desc; union acpi_generic_state *scope_info; union acpi_parse_object *prev_op; union acpi_parse_object *next_op; struct acpi_thread_state *thread; acpi_parse_downwards descending_callback; acpi_parse_upwards ascending_callback; }; struct acpi_gpe_handler_info { acpi_gpe_handler address; void *context; struct acpi_namespace_node *method_node; u8 original_flags; u8 originally_enabled; }; struct acpi_gpe_notify_info { struct acpi_namespace_node *device_node; struct acpi_gpe_notify_info *next; }; union acpi_gpe_dispatch_info { struct acpi_namespace_node *method_node; struct acpi_gpe_handler_info *handler; struct acpi_gpe_notify_info *notify_list; }; struct acpi_gpe_register_info; struct acpi_gpe_event_info { union acpi_gpe_dispatch_info dispatch; struct acpi_gpe_register_info *register_info; u8 flags; u8 gpe_number; u8 runtime_count; u8 disable_for_dispatch; }; struct acpi_gpe_address { u8 space_id; u64 address; }; struct acpi_gpe_register_info { struct acpi_gpe_address status_address; struct acpi_gpe_address enable_address; u16 base_gpe_number; u8 enable_for_wake; u8 enable_for_run; u8 mask_for_run; u8 enable_mask; }; struct acpi_gpe_xrupt_info; struct acpi_gpe_block_info { struct acpi_namespace_node *node; struct acpi_gpe_block_info *previous; struct acpi_gpe_block_info *next; struct acpi_gpe_xrupt_info *xrupt_block; struct acpi_gpe_register_info *register_info; struct acpi_gpe_event_info *event_info; u64 address; u32 register_count; u16 gpe_count; u16 block_base_number; u8 space_id; u8 initialized; }; struct acpi_gpe_xrupt_info { struct acpi_gpe_xrupt_info *previous; struct acpi_gpe_xrupt_info *next; struct acpi_gpe_block_info *gpe_block_list_head; u32 interrupt_number; }; struct acpi_common_state { void *next; u8 descriptor_type; u8 flags; u16 value; u16 state; }; struct acpi_update_state { void *next; u8 descriptor_type; u8 flags; u16 value; u16 state; union acpi_operand_object *object; }; struct acpi_pkg_state { void *next; u8 descriptor_type; u8 flags; u16 value; u16 state; u32 index; union acpi_operand_object *source_object; union acpi_operand_object *dest_object; struct acpi_walk_state *walk_state; void *this_target_obj; u32 num_packages; }; struct acpi_control_state { void *next; u8 descriptor_type; u8 flags; u16 value; u16 state; u16 opcode; union acpi_parse_object *predicate_op; u8 *aml_predicate_start; u8 *package_end; u64 loop_timeout; }; union acpi_parse_value { u64 integer; u32 size; char *string; u8 *buffer; char *name; union acpi_parse_object *arg; }; struct acpi_parse_obj_common { union acpi_parse_object *parent; u8 descriptor_type; u8 flags; u16 aml_opcode; u8 *aml; union acpi_parse_object *next; struct acpi_namespace_node *node; union acpi_parse_value value; u8 arg_list_length; }; struct acpi_parse_obj_named { union acpi_parse_object *parent; u8 descriptor_type; u8 flags; u16 aml_opcode; u8 *aml; union acpi_parse_object *next; struct acpi_namespace_node *node; union acpi_parse_value value; u8 arg_list_length; char *path; u8 *data; u32 length; u32 name; }; struct acpi_parse_obj_asl { union acpi_parse_object *parent; u8 descriptor_type; u8 flags; u16 aml_opcode; u8 *aml; union acpi_parse_object *next; struct acpi_namespace_node *node; union acpi_parse_value value; u8 arg_list_length; union acpi_parse_object *child; union acpi_parse_object *parent_method; char *filename; u8 file_changed; char *parent_filename; char *external_name; char *namepath; char name_seg[4]; u32 extra_value; u32 column; u32 line_number; u32 logical_line_number; u32 logical_byte_offset; u32 end_line; u32 end_logical_line; u32 acpi_btype; u32 aml_length; u32 aml_subtree_length; u32 final_aml_length; u32 final_aml_offset; u32 compile_flags; u16 parse_opcode; u8 aml_opcode_length; u8 aml_pkg_len_bytes; u8 extra; char parse_op_name[20]; }; union acpi_parse_object { struct acpi_parse_obj_common common; struct acpi_parse_obj_named named; struct acpi_parse_obj_asl asl; }; struct acpi_scope_state { void *next; u8 descriptor_type; u8 flags; u16 value; u16 state; struct acpi_namespace_node *node; }; struct acpi_pscope_state { void *next; u8 descriptor_type; u8 flags; u16 value; u16 state; u32 arg_count; union acpi_parse_object *op; u8 *arg_end; u8 *pkg_end; u32 arg_list; }; struct acpi_thread_state { void *next; u8 descriptor_type; u8 flags; u16 value; u16 state; u8 current_sync_level; struct acpi_walk_state *walk_state_list; union acpi_operand_object *acquired_mutex_list; u64 thread_id; }; struct acpi_result_values { void *next; u8 descriptor_type; u8 flags; u16 value; u16 state; union acpi_operand_object *obj_desc[8]; }; struct acpi_global_notify_handler { acpi_notify_handler handler; void *context; }; struct acpi_notify_info { void *next; u8 descriptor_type; u8 flags; u16 value; u16 state; u8 handler_list_id; struct acpi_namespace_node *node; union acpi_operand_object *handler_list_head; struct acpi_global_notify_handler *global; }; union acpi_generic_state { struct acpi_common_state common; struct acpi_control_state control; struct acpi_update_state update; struct acpi_scope_state scope; struct acpi_pscope_state parse_scope; struct acpi_pkg_state pkg; struct acpi_thread_state thread; struct acpi_result_values results; struct acpi_notify_info notify; }; struct acpi_opcode_info { u32 parse_args; u32 runtime_args; u16 flags; u8 object_type; u8 class; u8 type; }; struct acpi_os_dpc { acpi_osd_exec_callback function; void *context; struct work_struct work; }; struct acpi_ioremap { struct list_head list; void *virt; acpi_physical_address phys; acpi_size size; union { long unsigned int refcount; struct rcu_work rwork; } track; }; struct acpi_hp_work { struct work_struct work; struct acpi_device *adev; u32 src; }; struct acpi_pld_info { u8 revision; u8 ignore_color; u8 red; u8 green; u8 blue; u16 width; u16 height; u8 user_visible; u8 dock; u8 lid; u8 panel; u8 vertical_position; u8 horizontal_position; u8 shape; u8 group_orientation; u8 group_token; u8 group_position; u8 bay; u8 ejectable; u8 ospm_eject_required; u8 cabinet_number; u8 card_cage_number; u8 reference; u8 rotation; u8 order; u8 reserved; u16 vertical_offset; u16 horizontal_offset; }; struct acpi_handle_list { u32 count; acpi_handle handles[10]; }; struct acpi_device_bus_id { const char *bus_id; struct ida instance_ida; struct list_head node; }; struct acpi_dev_match_info { struct acpi_device_id hid[2]; const char *uid; s64 hrv; }; struct nvs_region { __u64 phys_start; __u64 size; struct list_head node; }; struct acpi_wakeup_handler { struct list_head list_node; bool (*wakeup)(void *); void *context; }; struct acpi_hardware_id { struct list_head list; const char *id; }; struct acpi_data_node { const char *name; acpi_handle handle; struct fwnode_handle fwnode; struct fwnode_handle *parent; struct acpi_device_data data; struct list_head sibling; struct kobject kobj; struct completion kobj_done; }; struct acpi_data_node_attr { struct attribute attr; ssize_t (*show)(struct acpi_data_node *, char *); ssize_t (*store)(struct acpi_data_node *, const char *, size_t); }; typedef u32 (*acpi_event_handler)(void *); typedef acpi_status (*acpi_table_handler)(u32, void *, void *); enum acpi_bus_device_type { ACPI_BUS_TYPE_DEVICE = 0, ACPI_BUS_TYPE_POWER = 1, ACPI_BUS_TYPE_PROCESSOR = 2, ACPI_BUS_TYPE_THERMAL = 3, ACPI_BUS_TYPE_POWER_BUTTON = 4, ACPI_BUS_TYPE_SLEEP_BUTTON = 5, ACPI_BUS_TYPE_ECDT_EC = 6, ACPI_BUS_DEVICE_TYPE_COUNT = 7, }; struct acpi_device_physical_node { unsigned int node_id; struct list_head node; struct device *dev; bool put_online: 1; }; struct acpi_osc_context { char *uuid_str; int rev; struct acpi_buffer cap; struct acpi_buffer ret; }; struct acpi_bus_type { struct list_head list; const char *name; bool (*match)(struct device *); struct acpi_device * (*find_companion)(struct device *); void (*setup)(struct device *); }; struct acpi_pnp_device_id { u32 length; char *string; }; struct acpi_pnp_device_id_list { u32 count; u32 list_size; struct acpi_pnp_device_id ids[0]; }; struct acpi_device_info { u32 info_size; u32 name; acpi_object_type type; u8 param_count; u16 valid; u8 flags; u8 highest_dstates[4]; u8 lowest_dstates[5]; u64 address; struct acpi_pnp_device_id hardware_id; struct acpi_pnp_device_id unique_id; struct acpi_pnp_device_id class_code; struct acpi_pnp_device_id_list compatible_id_list; }; struct acpi_table_spcr { struct acpi_table_header header; u8 interface_type; u8 reserved[3]; struct acpi_generic_address serial_port; u8 interrupt_type; u8 pc_interrupt; u32 interrupt; u8 baud_rate; u8 parity; u8 stop_bits; u8 flow_control; u8 terminal_type; u8 reserved1; u16 pci_device_id; u16 pci_vendor_id; u8 pci_bus; u8 pci_device; u8 pci_function; u32 pci_flags; u8 pci_segment; u32 reserved2; } __attribute__((packed)); struct acpi_table_stao { struct acpi_table_header header; u8 ignore_uart; } __attribute__((packed)); struct acpi_resource_irq { u8 descriptor_length; u8 triggering; u8 polarity; u8 shareable; u8 wake_capable; u8 interrupt_count; u8 interrupts[1]; }; struct acpi_resource_dma { u8 type; u8 bus_master; u8 transfer; u8 channel_count; u8 channels[1]; }; struct acpi_resource_start_dependent { u8 descriptor_length; u8 compatibility_priority; u8 performance_robustness; }; struct acpi_resource_io { u8 io_decode; u8 alignment; u8 address_length; u16 minimum; u16 maximum; } __attribute__((packed)); struct acpi_resource_fixed_io { u16 address; u8 address_length; } __attribute__((packed)); struct acpi_resource_fixed_dma { u16 request_lines; u16 channels; u8 width; } __attribute__((packed)); struct acpi_resource_vendor { u16 byte_length; u8 byte_data[1]; } __attribute__((packed)); struct acpi_resource_vendor_typed { u16 byte_length; u8 uuid_subtype; u8 uuid[16]; u8 byte_data[1]; }; struct acpi_resource_end_tag { u8 checksum; }; struct acpi_resource_memory24 { u8 write_protect; u16 minimum; u16 maximum; u16 alignment; u16 address_length; } __attribute__((packed)); struct acpi_resource_memory32 { u8 write_protect; u32 minimum; u32 maximum; u32 alignment; u32 address_length; } __attribute__((packed)); struct acpi_resource_fixed_memory32 { u8 write_protect; u32 address; u32 address_length; } __attribute__((packed)); struct acpi_memory_attribute { u8 write_protect; u8 caching; u8 range_type; u8 translation; }; struct acpi_io_attribute { u8 range_type; u8 translation; u8 translation_type; u8 reserved1; }; union acpi_resource_attribute { struct acpi_memory_attribute mem; struct acpi_io_attribute io; u8 type_specific; }; struct acpi_resource_label { u16 string_length; char *string_ptr; } __attribute__((packed)); struct acpi_resource_source { u8 index; u16 string_length; char *string_ptr; } __attribute__((packed)); struct acpi_address16_attribute { u16 granularity; u16 minimum; u16 maximum; u16 translation_offset; u16 address_length; }; struct acpi_address32_attribute { u32 granularity; u32 minimum; u32 maximum; u32 translation_offset; u32 address_length; }; struct acpi_address64_attribute { u64 granularity; u64 minimum; u64 maximum; u64 translation_offset; u64 address_length; }; struct acpi_resource_address { u8 resource_type; u8 producer_consumer; u8 decode; u8 min_address_fixed; u8 max_address_fixed; union acpi_resource_attribute info; }; struct acpi_resource_address16 { u8 resource_type; u8 producer_consumer; u8 decode; u8 min_address_fixed; u8 max_address_fixed; union acpi_resource_attribute info; struct acpi_address16_attribute address; struct acpi_resource_source resource_source; } __attribute__((packed)); struct acpi_resource_address32 { u8 resource_type; u8 producer_consumer; u8 decode; u8 min_address_fixed; u8 max_address_fixed; union acpi_resource_attribute info; struct acpi_address32_attribute address; struct acpi_resource_source resource_source; } __attribute__((packed)); struct acpi_resource_address64 { u8 resource_type; u8 producer_consumer; u8 decode; u8 min_address_fixed; u8 max_address_fixed; union acpi_resource_attribute info; struct acpi_address64_attribute address; struct acpi_resource_source resource_source; } __attribute__((packed)); struct acpi_resource_extended_address64 { u8 resource_type; u8 producer_consumer; u8 decode; u8 min_address_fixed; u8 max_address_fixed; union acpi_resource_attribute info; u8 revision_ID; struct acpi_address64_attribute address; u64 type_specific; } __attribute__((packed)); struct acpi_resource_extended_irq { u8 producer_consumer; u8 triggering; u8 polarity; u8 shareable; u8 wake_capable; u8 interrupt_count; struct acpi_resource_source resource_source; u32 interrupts[1]; } __attribute__((packed)); struct acpi_resource_generic_register { u8 space_id; u8 bit_width; u8 bit_offset; u8 access_size; u64 address; } __attribute__((packed)); struct acpi_resource_gpio { u8 revision_id; u8 connection_type; u8 producer_consumer; u8 pin_config; u8 shareable; u8 wake_capable; u8 io_restriction; u8 triggering; u8 polarity; u16 drive_strength; u16 debounce_timeout; u16 pin_table_length; u16 vendor_length; struct acpi_resource_source resource_source; u16 *pin_table; u8 *vendor_data; } __attribute__((packed)); struct acpi_resource_common_serialbus { u8 revision_id; u8 type; u8 producer_consumer; u8 slave_mode; u8 connection_sharing; u8 type_revision_id; u16 type_data_length; u16 vendor_length; struct acpi_resource_source resource_source; u8 *vendor_data; } __attribute__((packed)); struct acpi_resource_i2c_serialbus { u8 revision_id; u8 type; u8 producer_consumer; u8 slave_mode; u8 connection_sharing; u8 type_revision_id; u16 type_data_length; u16 vendor_length; struct acpi_resource_source resource_source; u8 *vendor_data; u8 access_mode; u16 slave_address; u32 connection_speed; } __attribute__((packed)); struct acpi_resource_spi_serialbus { u8 revision_id; u8 type; u8 producer_consumer; u8 slave_mode; u8 connection_sharing; u8 type_revision_id; u16 type_data_length; u16 vendor_length; struct acpi_resource_source resource_source; u8 *vendor_data; u8 wire_mode; u8 device_polarity; u8 data_bit_length; u8 clock_phase; u8 clock_polarity; u16 device_selection; u32 connection_speed; } __attribute__((packed)); struct acpi_resource_uart_serialbus { u8 revision_id; u8 type; u8 producer_consumer; u8 slave_mode; u8 connection_sharing; u8 type_revision_id; u16 type_data_length; u16 vendor_length; struct acpi_resource_source resource_source; u8 *vendor_data; u8 endian; u8 data_bits; u8 stop_bits; u8 flow_control; u8 parity; u8 lines_enabled; u16 rx_fifo_size; u16 tx_fifo_size; u32 default_baud_rate; } __attribute__((packed)); struct acpi_resource_csi2_serialbus { u8 revision_id; u8 type; u8 producer_consumer; u8 slave_mode; u8 connection_sharing; u8 type_revision_id; u16 type_data_length; u16 vendor_length; struct acpi_resource_source resource_source; u8 *vendor_data; u8 local_port_instance; u8 phy_type; } __attribute__((packed)); struct acpi_resource_pin_function { u8 revision_id; u8 pin_config; u8 shareable; u16 function_number; u16 pin_table_length; u16 vendor_length; struct acpi_resource_source resource_source; u16 *pin_table; u8 *vendor_data; } __attribute__((packed)); struct acpi_resource_pin_config { u8 revision_id; u8 producer_consumer; u8 shareable; u8 pin_config_type; u32 pin_config_value; u16 pin_table_length; u16 vendor_length; struct acpi_resource_source resource_source; u16 *pin_table; u8 *vendor_data; } __attribute__((packed)); struct acpi_resource_pin_group { u8 revision_id; u8 producer_consumer; u16 pin_table_length; u16 vendor_length; u16 *pin_table; struct acpi_resource_label resource_label; u8 *vendor_data; } __attribute__((packed)); struct acpi_resource_pin_group_function { u8 revision_id; u8 producer_consumer; u8 shareable; u16 function_number; u16 vendor_length; struct acpi_resource_source resource_source; struct acpi_resource_label resource_source_label; u8 *vendor_data; } __attribute__((packed)); struct acpi_resource_pin_group_config { u8 revision_id; u8 producer_consumer; u8 shareable; u8 pin_config_type; u32 pin_config_value; u16 vendor_length; struct acpi_resource_source resource_source; struct acpi_resource_label resource_source_label; u8 *vendor_data; } __attribute__((packed)); union acpi_resource_data { struct acpi_resource_irq irq; struct acpi_resource_dma dma; struct acpi_resource_start_dependent start_dpf; struct acpi_resource_io io; struct acpi_resource_fixed_io fixed_io; struct acpi_resource_fixed_dma fixed_dma; struct acpi_resource_vendor vendor; struct acpi_resource_vendor_typed vendor_typed; struct acpi_resource_end_tag end_tag; struct acpi_resource_memory24 memory24; struct acpi_resource_memory32 memory32; struct acpi_resource_fixed_memory32 fixed_memory32; struct acpi_resource_address16 address16; struct acpi_resource_address32 address32; struct acpi_resource_address64 address64; struct acpi_resource_extended_address64 ext_address64; struct acpi_resource_extended_irq extended_irq; struct acpi_resource_generic_register generic_reg; struct acpi_resource_gpio gpio; struct acpi_resource_i2c_serialbus i2c_serial_bus; struct acpi_resource_spi_serialbus spi_serial_bus; struct acpi_resource_uart_serialbus uart_serial_bus; struct acpi_resource_csi2_serialbus csi2_serial_bus; struct acpi_resource_common_serialbus common_serial_bus; struct acpi_resource_pin_function pin_function; struct acpi_resource_pin_config pin_config; struct acpi_resource_pin_group pin_group; struct acpi_resource_pin_group_function pin_group_function; struct acpi_resource_pin_group_config pin_group_config; struct acpi_resource_address address; }; struct acpi_resource { u32 type; u32 length; union acpi_resource_data data; } __attribute__((packed)); typedef acpi_status (*acpi_walk_resource_callback)(struct acpi_resource *, void *); struct acpi_dep_data { struct list_head node; acpi_handle supplier; acpi_handle consumer; }; enum acpi_reconfig_event { ACPI_RECONFIG_DEVICE_ADD = 0, ACPI_RECONFIG_DEVICE_REMOVE = 1, }; struct acpi_probe_entry; typedef bool (*acpi_probe_entry_validate_subtbl)(struct acpi_subtable_header *, struct acpi_probe_entry *); struct acpi_probe_entry { __u8 id[5]; __u8 type; acpi_probe_entry_validate_subtbl subtable_valid; union { acpi_tbl_table_handler probe_table; acpi_tbl_entry_handler probe_subtbl; }; kernel_ulong_t driver_data; }; struct acpi_scan_clear_dep_work { struct work_struct work; struct acpi_device *adev; }; struct platform_device___2; struct resource_win { struct resource res; resource_size_t offset; }; struct irq_override_cmp { const struct dmi_system_id *system; unsigned char irq; unsigned char triggering; unsigned char polarity; unsigned char shareable; }; struct res_proc_context { struct list_head *list; int (*preproc)(struct acpi_resource *, void *); void *preproc_data; int count; int error; }; struct acpi_processor_errata { u8 smp; struct { u8 throttle: 1; u8 fdma: 1; u8 reserved: 6; u32 bmisx; } piix4; }; typedef u32 acpi_event_status; struct acpi_table_ecdt { struct acpi_table_header header; struct acpi_generic_address control; struct acpi_generic_address data; u32 uid; u8 gpe; u8 id[1]; } __attribute__((packed)); struct transaction; struct acpi_ec { acpi_handle handle; int gpe; int irq; long unsigned int command_addr; long unsigned int data_addr; bool global_lock; long unsigned int flags; long unsigned int reference_count; struct mutex mutex; wait_queue_head_t wait; struct list_head list; struct transaction *curr; spinlock_t lock; struct work_struct work; long unsigned int timestamp; long unsigned int nr_pending_queries; bool busy_polling; unsigned int polling_guard; }; struct transaction { const u8 *wdata; u8 *rdata; short unsigned int irq_count; u8 command; u8 wi; u8 ri; u8 wlen; u8 rlen; u8 flags; }; typedef int (*acpi_ec_query_func)(void *); enum ec_command { ACPI_EC_COMMAND_READ = 128, ACPI_EC_COMMAND_WRITE = 129, ACPI_EC_BURST_ENABLE = 130, ACPI_EC_BURST_DISABLE = 131, ACPI_EC_COMMAND_QUERY = 132, }; enum { EC_FLAGS_QUERY_ENABLED = 0, EC_FLAGS_QUERY_PENDING = 1, EC_FLAGS_QUERY_GUARDING = 2, EC_FLAGS_EVENT_HANDLER_INSTALLED = 3, EC_FLAGS_EC_HANDLER_INSTALLED = 4, EC_FLAGS_QUERY_METHODS_INSTALLED = 5, EC_FLAGS_STARTED = 6, EC_FLAGS_STOPPED = 7, EC_FLAGS_EVENTS_MASKED = 8, }; struct acpi_ec_query_handler { struct list_head node; acpi_ec_query_func func; acpi_handle handle; void *data; u8 query_bit; struct kref kref; }; struct acpi_ec_query { struct transaction transaction; struct work_struct work; struct acpi_ec_query_handler *handler; }; struct acpi_pci_root_ops; struct acpi_pci_root_info { struct acpi_pci_root *root; struct acpi_device *bridge; struct acpi_pci_root_ops *ops; struct list_head resources; char name[16]; }; struct acpi_pci_root_ops { struct pci_ops *pci_ops; int (*init_info)(struct acpi_pci_root_info *); void (*release_info)(struct acpi_pci_root_info *); int (*prepare_resources)(struct acpi_pci_root_info *); }; struct pci_osc_bit_struct { u32 bit; char *desc; }; struct acpi_handle_node { struct list_head node; acpi_handle handle; }; struct acpi_pci_link_irq { u32 active; u8 triggering; u8 polarity; u8 resource_type; u8 possible_count; u32 possible[16]; u8 initialized: 1; u8 reserved: 7; }; struct acpi_pci_link { struct list_head list; struct acpi_device *device; struct acpi_pci_link_irq irq; int refcnt; }; struct acpi_pci_routing_table { u32 length; u32 pin; u64 address; u32 source_index; char source[4]; }; struct acpi_prt_entry { struct acpi_pci_id id; u8 pin; acpi_handle link; u32 index; }; struct prt_quirk { const struct dmi_system_id *system; unsigned int segment; unsigned int bus; unsigned int device; unsigned char pin; const char *source; const char *actual_source; }; struct apd_private_data; struct apd_device_desc { unsigned int fixed_clk_rate; struct property_entry *properties; int (*setup)(struct apd_private_data *); }; struct apd_private_data { struct clk *clk; struct acpi_device *adev; const struct apd_device_desc *dev_desc; }; struct acpi_power_dependent_device { struct device *dev; struct list_head node; }; struct acpi_power_resource { struct acpi_device device; struct list_head list_node; u32 system_level; u32 order; unsigned int ref_count; u8 state; struct mutex resource_lock; struct list_head dependents; }; struct acpi_power_resource_entry { struct list_head node; struct acpi_power_resource *resource; }; struct acpi_bus_event { struct list_head node; acpi_device_class device_class; acpi_bus_id bus_id; u32 type; u32 data; }; struct genlmsghdr { __u8 cmd; __u8 version; __u16 reserved; }; struct genl_multicast_group { char name[16]; u8 flags; }; struct genl_ops; struct genl_info; struct genl_small_ops; struct genl_family { int id; unsigned int hdrsize; char name[16]; unsigned int version; unsigned int maxattr; unsigned int mcgrp_offset; u8 netnsok: 1; u8 parallel_ops: 1; u8 n_ops; u8 n_small_ops; u8 n_mcgrps; const struct nla_policy *policy; int (*pre_doit)(const struct genl_ops *, struct sk_buff *, struct genl_info *); void (*post_doit)(const struct genl_ops *, struct sk_buff *, struct genl_info *); const struct genl_ops *ops; const struct genl_small_ops *small_ops; const struct genl_multicast_group *mcgrps; struct module *module; }; struct genl_ops { int (*doit)(struct sk_buff *, struct genl_info *); int (*start)(struct netlink_callback *); int (*dumpit)(struct sk_buff *, struct netlink_callback *); int (*done)(struct netlink_callback *); const struct nla_policy *policy; unsigned int maxattr; u8 cmd; u8 internal_flags; u8 flags; u8 validate; }; struct genl_info { u32 snd_seq; u32 snd_portid; struct nlmsghdr *nlhdr; struct genlmsghdr *genlhdr; void *userhdr; struct nlattr **attrs; possible_net_t _net; void *user_ptr[2]; struct netlink_ext_ack *extack; }; struct genl_small_ops { int (*doit)(struct sk_buff *, struct genl_info *); int (*dumpit)(struct sk_buff *, struct netlink_callback *); u8 cmd; u8 internal_flags; u8 flags; u8 validate; }; struct acpi_genl_event { acpi_device_class device_class; char bus_id[15]; u32 type; u32 data; }; enum { ACPI_GENL_ATTR_UNSPEC = 0, ACPI_GENL_ATTR_EVENT = 1, __ACPI_GENL_ATTR_MAX = 2, }; enum { ACPI_GENL_CMD_UNSPEC = 0, ACPI_GENL_CMD_EVENT = 1, __ACPI_GENL_CMD_MAX = 2, }; struct acpi_ged_device { struct device *dev; struct list_head event_list; }; struct acpi_ged_event { struct list_head node; struct device *dev; unsigned int gsi; unsigned int irq; acpi_handle handle; }; typedef void (*acpi_gbl_event_handler)(u32, acpi_handle, u32, void *); struct acpi_table_bert { struct acpi_table_header header; u32 region_length; u64 address; }; struct acpi_table_attr { struct bin_attribute attr; char name[4]; int instance; char filename[8]; struct list_head node; }; struct acpi_data_attr { struct bin_attribute attr; u64 addr; }; struct acpi_data_obj { char *name; int (*fn)(void *, struct acpi_data_attr *); }; struct event_counter { u32 count; u32 flags; }; struct acpi_device_properties { const guid_t *guid; const union acpi_object *properties; struct list_head list; }; struct always_present_id { struct acpi_device_id hid[2]; struct x86_cpu_id cpu_ids[2]; struct dmi_system_id dmi_ids[2]; const char *uid; }; struct acpi_lpat { int temp; int raw; }; struct acpi_lpat_conversion_table { struct acpi_lpat *lpat; int lpat_count; }; struct acpi_table_lpit { struct acpi_table_header header; }; struct acpi_lpit_header { u32 type; u32 length; u16 unique_id; u16 reserved; u32 flags; }; struct acpi_lpit_native { struct acpi_lpit_header header; struct acpi_generic_address entry_trigger; u32 residency; u32 latency; struct acpi_generic_address residency_counter; u64 counter_frequency; } __attribute__((packed)); struct lpit_residency_info { struct acpi_generic_address gaddr; u64 frequency; void *iomem_addr; }; struct acpi_name_info { char name[4]; u16 argument_list; u8 expected_btypes; } __attribute__((packed)); struct acpi_package_info { u8 type; u8 object_type1; u8 count1; u8 object_type2; u8 count2; u16 reserved; } __attribute__((packed)); struct acpi_package_info2 { u8 type; u8 count; u8 object_type[4]; u8 reserved; }; struct acpi_package_info3 { u8 type; u8 count; u8 object_type[2]; u8 tail_object_type; u16 reserved; } __attribute__((packed)); struct acpi_package_info4 { u8 type; u8 object_type1; u8 count1; u8 sub_object_types; u8 pkg_count; u16 reserved; } __attribute__((packed)); union acpi_predefined_info { struct acpi_name_info info; struct acpi_package_info ret_info; struct acpi_package_info2 ret_info2; struct acpi_package_info3 ret_info3; struct acpi_package_info4 ret_info4; }; struct acpi_evaluate_info { struct acpi_namespace_node *prefix_node; const char *relative_pathname; union acpi_operand_object **parameters; struct acpi_namespace_node *node; union acpi_operand_object *obj_desc; char *full_pathname; const union acpi_predefined_info *predefined; union acpi_operand_object *return_object; union acpi_operand_object *parent_package; u32 return_flags; u32 return_btype; u16 param_count; u16 node_flags; u8 pass_number; u8 return_object_type; u8 flags; }; enum { ACPI_REFCLASS_LOCAL = 0, ACPI_REFCLASS_ARG = 1, ACPI_REFCLASS_REFOF = 2, ACPI_REFCLASS_INDEX = 3, ACPI_REFCLASS_TABLE = 4, ACPI_REFCLASS_NAME = 5, ACPI_REFCLASS_DEBUG = 6, ACPI_REFCLASS_MAX = 6, }; struct acpi_common_descriptor { void *common_pointer; u8 descriptor_type; }; union acpi_descriptor { struct acpi_common_descriptor common; union acpi_operand_object object; struct acpi_namespace_node node; union acpi_parse_object op; }; typedef enum { ACPI_IMODE_LOAD_PASS1 = 1, ACPI_IMODE_LOAD_PASS2 = 2, ACPI_IMODE_EXECUTE = 3, } acpi_interpreter_mode; struct acpi_create_field_info { struct acpi_namespace_node *region_node; struct acpi_namespace_node *field_node; struct acpi_namespace_node *register_node; struct acpi_namespace_node *data_register_node; struct acpi_namespace_node *connection_node; u8 *resource_buffer; u32 bank_value; u32 field_bit_position; u32 field_bit_length; u16 resource_length; u16 pin_number_index; u8 field_flags; u8 attribute; u8 field_type; u8 access_length; }; struct acpi_init_walk_info { u32 table_index; u32 object_count; u32 method_count; u32 serial_method_count; u32 non_serial_method_count; u32 serialized_method_count; u32 device_count; u32 op_region_count; u32 field_count; u32 buffer_count; u32 package_count; u32 op_region_init; u32 field_init; u32 buffer_init; u32 package_init; acpi_owner_id owner_id; }; typedef u32 acpi_name; typedef acpi_status (*acpi_exception_handler)(acpi_status, acpi_name, u16, u32, void *); enum { AML_FIELD_ACCESS_ANY = 0, AML_FIELD_ACCESS_BYTE = 1, AML_FIELD_ACCESS_WORD = 2, AML_FIELD_ACCESS_DWORD = 3, AML_FIELD_ACCESS_QWORD = 4, AML_FIELD_ACCESS_BUFFER = 5, }; typedef acpi_status (*acpi_execute_op)(struct acpi_walk_state *); struct acpi_fixed_event_handler { acpi_event_handler handler; void *context; }; struct acpi_fixed_event_info { u8 status_register_id; u8 enable_register_id; u16 status_bit_mask; u16 enable_bit_mask; }; typedef u32 acpi_mutex_handle; struct acpi_gpe_walk_info { struct acpi_namespace_node *gpe_device; struct acpi_gpe_block_info *gpe_block; u16 count; acpi_owner_id owner_id; u8 execute_by_owner_id; }; struct acpi_gpe_device_info { u32 index; u32 next_block_base_index; acpi_status status; struct acpi_namespace_node *gpe_device; }; typedef acpi_status (*acpi_gpe_callback)(struct acpi_gpe_xrupt_info *, struct acpi_gpe_block_info *, void *); struct acpi_table_facs { char signature[4]; u32 length; u32 hardware_signature; u32 firmware_waking_vector; u32 global_lock; u32 flags; u64 xfirmware_waking_vector; u8 version; u8 reserved[3]; u32 ospm_flags; u8 reserved1[24]; }; struct acpi_connection_info { u8 *connection; u16 length; u8 access_length; }; struct acpi_reg_walk_info { u32 function; u32 reg_run_count; acpi_adr_space_type space_id; }; typedef u32 (*acpi_sci_handler)(void *); struct acpi_sci_handler_info { struct acpi_sci_handler_info *next; acpi_sci_handler address; void *context; }; enum { AML_FIELD_UPDATE_PRESERVE = 0, AML_FIELD_UPDATE_WRITE_AS_ONES = 32, AML_FIELD_UPDATE_WRITE_AS_ZEROS = 64, }; struct acpi_signal_fatal_info { u32 type; u32 code; u32 argument; }; enum { MATCH_MTR = 0, MATCH_MEQ = 1, MATCH_MLE = 2, MATCH_MLT = 3, MATCH_MGE = 4, MATCH_MGT = 5, }; enum { AML_FIELD_ATTRIB_QUICK = 2, AML_FIELD_ATTRIB_SEND_RECEIVE = 4, AML_FIELD_ATTRIB_BYTE = 6, AML_FIELD_ATTRIB_WORD = 8, AML_FIELD_ATTRIB_BLOCK = 10, AML_FIELD_ATTRIB_BYTES = 11, AML_FIELD_ATTRIB_PROCESS_CALL = 12, AML_FIELD_ATTRIB_BLOCK_PROCESS_CALL = 13, AML_FIELD_ATTRIB_RAW_BYTES = 14, AML_FIELD_ATTRIB_RAW_PROCESS_BYTES = 15, }; typedef enum { ACPI_TRACE_AML_METHOD = 0, ACPI_TRACE_AML_OPCODE = 1, ACPI_TRACE_AML_REGION = 2, } acpi_trace_event_type; struct acpi_gpe_block_status_context { struct acpi_gpe_register_info *gpe_skip_register_info; u8 gpe_skip_mask; u8 retval; }; struct acpi_bit_register_info { u8 parent_register; u8 bit_position; u16 access_bit_mask; }; struct acpi_port_info { char *name; u16 start; u16 end; u8 osi_dependency; }; struct acpi_pci_device { acpi_handle device; struct acpi_pci_device *next; }; typedef acpi_status (*acpi_init_handler)(acpi_handle, u32); struct acpi_device_walk_info { struct acpi_table_desc *table_desc; struct acpi_evaluate_info *evaluate_info; u32 device_count; u32 num_STA; u32 num_INI; }; typedef acpi_status (*acpi_pkg_callback)(u8, union acpi_operand_object *, union acpi_generic_state *, void *); struct acpi_table_list { struct acpi_table_desc *tables; u32 current_table_count; u32 max_table_count; u8 flags; }; enum acpi_return_package_types { ACPI_PTYPE1_FIXED = 1, ACPI_PTYPE1_VAR = 2, ACPI_PTYPE1_OPTION = 3, ACPI_PTYPE2 = 4, ACPI_PTYPE2_COUNT = 5, ACPI_PTYPE2_PKG_COUNT = 6, ACPI_PTYPE2_FIXED = 7, ACPI_PTYPE2_MIN = 8, ACPI_PTYPE2_REV_FIXED = 9, ACPI_PTYPE2_FIX_VAR = 10, ACPI_PTYPE2_VAR_VAR = 11, ACPI_PTYPE2_UUID_PAIR = 12, ACPI_PTYPE_CUSTOM = 13, }; typedef acpi_status (*acpi_object_converter)(struct acpi_namespace_node *, union acpi_operand_object *, union acpi_operand_object **); struct acpi_simple_repair_info { char name[4]; u32 unexpected_btypes; u32 package_index; acpi_object_converter object_converter; }; typedef acpi_status (*acpi_repair_function)(struct acpi_evaluate_info *, union acpi_operand_object **); struct acpi_repair_info { char name[4]; acpi_repair_function repair_function; }; struct acpi_namestring_info { const char *external_name; const char *next_external_char; char *internal_name; u32 length; u32 num_segments; u32 num_carats; u8 fully_qualified; }; struct acpi_rw_lock { void *writer_mutex; void *reader_mutex; u32 num_readers; }; struct acpi_get_devices_info { acpi_walk_callback user_function; void *context; const char *hid; }; struct aml_resource_small_header { u8 descriptor_type; }; struct aml_resource_irq { u8 descriptor_type; u16 irq_mask; u8 flags; } __attribute__((packed)); struct aml_resource_dma { u8 descriptor_type; u8 dma_channel_mask; u8 flags; }; struct aml_resource_start_dependent { u8 descriptor_type; u8 flags; }; struct aml_resource_end_dependent { u8 descriptor_type; }; struct aml_resource_io { u8 descriptor_type; u8 flags; u16 minimum; u16 maximum; u8 alignment; u8 address_length; }; struct aml_resource_fixed_io { u8 descriptor_type; u16 address; u8 address_length; } __attribute__((packed)); struct aml_resource_vendor_small { u8 descriptor_type; }; struct aml_resource_end_tag { u8 descriptor_type; u8 checksum; }; struct aml_resource_fixed_dma { u8 descriptor_type; u16 request_lines; u16 channels; u8 width; } __attribute__((packed)); struct aml_resource_large_header { u8 descriptor_type; u16 resource_length; } __attribute__((packed)); struct aml_resource_memory24 { u8 descriptor_type; u16 resource_length; u8 flags; u16 minimum; u16 maximum; u16 alignment; u16 address_length; } __attribute__((packed)); struct aml_resource_vendor_large { u8 descriptor_type; u16 resource_length; } __attribute__((packed)); struct aml_resource_memory32 { u8 descriptor_type; u16 resource_length; u8 flags; u32 minimum; u32 maximum; u32 alignment; u32 address_length; } __attribute__((packed)); struct aml_resource_fixed_memory32 { u8 descriptor_type; u16 resource_length; u8 flags; u32 address; u32 address_length; } __attribute__((packed)); struct aml_resource_address { u8 descriptor_type; u16 resource_length; u8 resource_type; u8 flags; u8 specific_flags; } __attribute__((packed)); struct aml_resource_extended_address64 { u8 descriptor_type; u16 resource_length; u8 resource_type; u8 flags; u8 specific_flags; u8 revision_ID; u8 reserved; u64 granularity; u64 minimum; u64 maximum; u64 translation_offset; u64 address_length; u64 type_specific; } __attribute__((packed)); struct aml_resource_address64 { u8 descriptor_type; u16 resource_length; u8 resource_type; u8 flags; u8 specific_flags; u64 granularity; u64 minimum; u64 maximum; u64 translation_offset; u64 address_length; } __attribute__((packed)); struct aml_resource_address32 { u8 descriptor_type; u16 resource_length; u8 resource_type; u8 flags; u8 specific_flags; u32 granularity; u32 minimum; u32 maximum; u32 translation_offset; u32 address_length; } __attribute__((packed)); struct aml_resource_address16 { u8 descriptor_type; u16 resource_length; u8 resource_type; u8 flags; u8 specific_flags; u16 granularity; u16 minimum; u16 maximum; u16 translation_offset; u16 address_length; } __attribute__((packed)); struct aml_resource_extended_irq { u8 descriptor_type; u16 resource_length; u8 flags; u8 interrupt_count; u32 interrupts[1]; } __attribute__((packed)); struct aml_resource_generic_register { u8 descriptor_type; u16 resource_length; u8 address_space_id; u8 bit_width; u8 bit_offset; u8 access_size; u64 address; } __attribute__((packed)); struct aml_resource_gpio { u8 descriptor_type; u16 resource_length; u8 revision_id; u8 connection_type; u16 flags; u16 int_flags; u8 pin_config; u16 drive_strength; u16 debounce_timeout; u16 pin_table_offset; u8 res_source_index; u16 res_source_offset; u16 vendor_offset; u16 vendor_length; } __attribute__((packed)); struct aml_resource_common_serialbus { u8 descriptor_type; u16 resource_length; u8 revision_id; u8 res_source_index; u8 type; u8 flags; u16 type_specific_flags; u8 type_revision_id; u16 type_data_length; } __attribute__((packed)); struct aml_resource_csi2_serialbus { u8 descriptor_type; u16 resource_length; u8 revision_id; u8 res_source_index; u8 type; u8 flags; u16 type_specific_flags; u8 type_revision_id; u16 type_data_length; } __attribute__((packed)); struct aml_resource_i2c_serialbus { u8 descriptor_type; u16 resource_length; u8 revision_id; u8 res_source_index; u8 type; u8 flags; u16 type_specific_flags; u8 type_revision_id; u16 type_data_length; u32 connection_speed; u16 slave_address; } __attribute__((packed)); struct aml_resource_spi_serialbus { u8 descriptor_type; u16 resource_length; u8 revision_id; u8 res_source_index; u8 type; u8 flags; u16 type_specific_flags; u8 type_revision_id; u16 type_data_length; u32 connection_speed; u8 data_bit_length; u8 clock_phase; u8 clock_polarity; u16 device_selection; } __attribute__((packed)); struct aml_resource_uart_serialbus { u8 descriptor_type; u16 resource_length; u8 revision_id; u8 res_source_index; u8 type; u8 flags; u16 type_specific_flags; u8 type_revision_id; u16 type_data_length; u32 default_baud_rate; u16 rx_fifo_size; u16 tx_fifo_size; u8 parity; u8 lines_enabled; } __attribute__((packed)); struct aml_resource_pin_function { u8 descriptor_type; u16 resource_length; u8 revision_id; u16 flags; u8 pin_config; u16 function_number; u16 pin_table_offset; u8 res_source_index; u16 res_source_offset; u16 vendor_offset; u16 vendor_length; } __attribute__((packed)); struct aml_resource_pin_config { u8 descriptor_type; u16 resource_length; u8 revision_id; u16 flags; u8 pin_config_type; u32 pin_config_value; u16 pin_table_offset; u8 res_source_index; u16 res_source_offset; u16 vendor_offset; u16 vendor_length; } __attribute__((packed)); struct aml_resource_pin_group { u8 descriptor_type; u16 resource_length; u8 revision_id; u16 flags; u16 pin_table_offset; u16 label_offset; u16 vendor_offset; u16 vendor_length; } __attribute__((packed)); struct aml_resource_pin_group_function { u8 descriptor_type; u16 resource_length; u8 revision_id; u16 flags; u16 function_number; u8 res_source_index; u16 res_source_offset; u16 res_source_label_offset; u16 vendor_offset; u16 vendor_length; } __attribute__((packed)); struct aml_resource_pin_group_config { u8 descriptor_type; u16 resource_length; u8 revision_id; u16 flags; u8 pin_config_type; u32 pin_config_value; u8 res_source_index; u16 res_source_offset; u16 res_source_label_offset; u16 vendor_offset; u16 vendor_length; } __attribute__((packed)); union aml_resource { u8 descriptor_type; struct aml_resource_small_header small_header; struct aml_resource_large_header large_header; struct aml_resource_irq irq; struct aml_resource_dma dma; struct aml_resource_start_dependent start_dpf; struct aml_resource_end_dependent end_dpf; struct aml_resource_io io; struct aml_resource_fixed_io fixed_io; struct aml_resource_fixed_dma fixed_dma; struct aml_resource_vendor_small vendor_small; struct aml_resource_end_tag end_tag; struct aml_resource_memory24 memory24; struct aml_resource_generic_register generic_reg; struct aml_resource_vendor_large vendor_large; struct aml_resource_memory32 memory32; struct aml_resource_fixed_memory32 fixed_memory32; struct aml_resource_address16 address16; struct aml_resource_address32 address32; struct aml_resource_address64 address64; struct aml_resource_extended_address64 ext_address64; struct aml_resource_extended_irq extended_irq; struct aml_resource_gpio gpio; struct aml_resource_i2c_serialbus i2c_serial_bus; struct aml_resource_spi_serialbus spi_serial_bus; struct aml_resource_uart_serialbus uart_serial_bus; struct aml_resource_csi2_serialbus csi2_serial_bus; struct aml_resource_common_serialbus common_serial_bus; struct aml_resource_pin_function pin_function; struct aml_resource_pin_config pin_config; struct aml_resource_pin_group pin_group; struct aml_resource_pin_group_function pin_group_function; struct aml_resource_pin_group_config pin_group_config; struct aml_resource_address address; u32 dword_item; u16 word_item; u8 byte_item; }; struct acpi_rsconvert_info { u8 opcode; u8 resource_offset; u8 aml_offset; u8 value; }; enum { ACPI_RSC_INITGET = 0, ACPI_RSC_INITSET = 1, ACPI_RSC_FLAGINIT = 2, ACPI_RSC_1BITFLAG = 3, ACPI_RSC_2BITFLAG = 4, ACPI_RSC_3BITFLAG = 5, ACPI_RSC_6BITFLAG = 6, ACPI_RSC_ADDRESS = 7, ACPI_RSC_BITMASK = 8, ACPI_RSC_BITMASK16 = 9, ACPI_RSC_COUNT = 10, ACPI_RSC_COUNT16 = 11, ACPI_RSC_COUNT_GPIO_PIN = 12, ACPI_RSC_COUNT_GPIO_RES = 13, ACPI_RSC_COUNT_GPIO_VEN = 14, ACPI_RSC_COUNT_SERIAL_RES = 15, ACPI_RSC_COUNT_SERIAL_VEN = 16, ACPI_RSC_DATA8 = 17, ACPI_RSC_EXIT_EQ = 18, ACPI_RSC_EXIT_LE = 19, ACPI_RSC_EXIT_NE = 20, ACPI_RSC_LENGTH = 21, ACPI_RSC_MOVE_GPIO_PIN = 22, ACPI_RSC_MOVE_GPIO_RES = 23, ACPI_RSC_MOVE_SERIAL_RES = 24, ACPI_RSC_MOVE_SERIAL_VEN = 25, ACPI_RSC_MOVE8 = 26, ACPI_RSC_MOVE16 = 27, ACPI_RSC_MOVE32 = 28, ACPI_RSC_MOVE64 = 29, ACPI_RSC_SET8 = 30, ACPI_RSC_SOURCE = 31, ACPI_RSC_SOURCEX = 32, }; typedef u16 acpi_rs_length; typedef acpi_status (*acpi_walk_aml_callback)(u8 *, u32, u32, u8, void **); typedef u32 acpi_rsdesc_size; struct acpi_vendor_uuid { u8 subtype; u8 data[16]; }; struct acpi_vendor_walk_info { struct acpi_vendor_uuid *uuid; struct acpi_buffer *buffer; acpi_status status; }; struct acpi_fadt_info { const char *name; u16 address64; u16 address32; u16 length; u8 default_length; u8 flags; }; struct acpi_fadt_pm_info { struct acpi_generic_address *target; u16 source; u8 register_num; }; struct acpi_table_rsdp { char signature[8]; u8 checksum; char oem_id[6]; u8 revision; u32 rsdt_physical_address; u32 length; u64 xsdt_physical_address; u8 extended_checksum; u8 reserved[3]; } __attribute__((packed)); struct acpi_address_range { struct acpi_address_range *next; struct acpi_namespace_node *region_node; acpi_physical_address start_address; acpi_physical_address end_address; }; struct acpi_pkg_info { u8 *free_space; acpi_size length; u32 object_space; u32 num_packages; }; struct acpi_exception_info { char *name; }; struct acpi_mutex_info { void *mutex; u32 use_count; u64 thread_id; }; struct acpi_comment_node { char *comment; struct acpi_comment_node *next; }; struct acpi_interface_info { char *name; struct acpi_interface_info *next; u8 flags; u8 value; }; struct acpi_lpi_states_array { unsigned int size; unsigned int composite_states_size; struct acpi_lpi_state *entries; struct acpi_lpi_state *composite_states[8]; }; struct throttling_tstate { unsigned int cpu; int target_state; }; struct acpi_processor_throttling_arg { struct acpi_processor *pr; int target_state; bool force; }; struct container_dev { struct device dev; int (*offline)(struct container_dev *); }; struct acpi_pci_ioapic { acpi_handle root_handle; acpi_handle handle; u32 gsi_base; struct resource res; struct pci_dev *pdev; struct list_head list; }; struct pnp_resource { struct list_head list; struct resource res; }; struct pnp_port { resource_size_t min; resource_size_t max; resource_size_t align; resource_size_t size; unsigned char flags; }; typedef struct { long unsigned int bits[4]; } pnp_irq_mask_t; struct pnp_irq { pnp_irq_mask_t map; unsigned char flags; }; struct pnp_dma { unsigned char map; unsigned char flags; }; struct pnp_mem { resource_size_t min; resource_size_t max; resource_size_t align; resource_size_t size; unsigned char flags; }; struct pnp_option { struct list_head list; unsigned int flags; long unsigned int type; union { struct pnp_port port; struct pnp_irq irq; struct pnp_dma dma; struct pnp_mem mem; } u; }; struct pnp_info_buffer { char *buffer; char *curr; long unsigned int size; long unsigned int len; int stop; int error; }; typedef struct pnp_info_buffer pnp_info_buffer_t; struct pnp_fixup { char id[7]; void (*quirk_function)(struct pnp_dev *); }; struct acpipnp_parse_option_s { struct pnp_dev *dev; unsigned int option_flags; }; struct clk_bulk_data { const char *id; struct clk *clk; }; struct clk_bulk_devres { struct clk_bulk_data *clks; int num_clks; }; struct clk_hw; struct clk_lookup { struct list_head node; const char *dev_id; const char *con_id; struct clk *clk; struct clk_hw *clk_hw; }; struct clk_init_data; struct clk_hw { struct clk_core *core; struct clk *clk; const struct clk_init_data *init; }; struct clk_rate_request { long unsigned int rate; long unsigned int min_rate; long unsigned int max_rate; long unsigned int best_parent_rate; struct clk_hw *best_parent_hw; }; struct clk_duty { unsigned int num; unsigned int den; }; struct clk_ops { int (*prepare)(struct clk_hw *); void (*unprepare)(struct clk_hw *); int (*is_prepared)(struct clk_hw *); void (*unprepare_unused)(struct clk_hw *); int (*enable)(struct clk_hw *); void (*disable)(struct clk_hw *); int (*is_enabled)(struct clk_hw *); void (*disable_unused)(struct clk_hw *); int (*save_context)(struct clk_hw *); void (*restore_context)(struct clk_hw *); long unsigned int (*recalc_rate)(struct clk_hw *, long unsigned int); long int (*round_rate)(struct clk_hw *, long unsigned int, long unsigned int *); int (*determine_rate)(struct clk_hw *, struct clk_rate_request *); int (*set_parent)(struct clk_hw *, u8); u8 (*get_parent)(struct clk_hw *); int (*set_rate)(struct clk_hw *, long unsigned int, long unsigned int); int (*set_rate_and_parent)(struct clk_hw *, long unsigned int, long unsigned int, u8); long unsigned int (*recalc_accuracy)(struct clk_hw *, long unsigned int); int (*get_phase)(struct clk_hw *); int (*set_phase)(struct clk_hw *, int); int (*get_duty_cycle)(struct clk_hw *, struct clk_duty *); int (*set_duty_cycle)(struct clk_hw *, struct clk_duty *); int (*init)(struct clk_hw *); void (*terminate)(struct clk_hw *); void (*debug_init)(struct clk_hw *, struct dentry *); }; struct clk_parent_data { const struct clk_hw *hw; const char *fw_name; const char *name; int index; }; struct clk_init_data { const char *name; const struct clk_ops *ops; const char * const *parent_names; const struct clk_parent_data *parent_data; const struct clk_hw **parent_hws; u8 num_parents; long unsigned int flags; }; struct clk_lookup_alloc { struct clk_lookup cl; char dev_id[20]; char con_id[16]; }; struct clk_notifier { struct clk *clk; struct srcu_notifier_head notifier_head; struct list_head node; }; struct clk_notifier_data { struct clk *clk; long unsigned int old_rate; long unsigned int new_rate; }; struct clk_parent_map; struct clk_core { const char *name; const struct clk_ops *ops; struct clk_hw *hw; struct module *owner; struct device *dev; struct device_node *of_node; struct clk_core *parent; struct clk_parent_map *parents; u8 num_parents; u8 new_parent_index; long unsigned int rate; long unsigned int req_rate; long unsigned int new_rate; struct clk_core *new_parent; struct clk_core *new_child; long unsigned int flags; bool orphan; bool rpm_enabled; unsigned int enable_count; unsigned int prepare_count; unsigned int protect_count; long unsigned int min_rate; long unsigned int max_rate; long unsigned int accuracy; int phase; struct clk_duty duty; struct hlist_head children; struct hlist_node child_node; struct hlist_head clks; unsigned int notifier_count; struct dentry *dentry; struct hlist_node debug_node; struct kref ref; }; struct clk_parent_map { const struct clk_hw *hw; struct clk_core *core; const char *fw_name; const char *name; int index; }; struct trace_event_raw_clk { struct trace_entry ent; u32 __data_loc_name; char __data[0]; }; struct trace_event_raw_clk_rate { struct trace_entry ent; u32 __data_loc_name; long unsigned int rate; char __data[0]; }; struct trace_event_raw_clk_rate_range { struct trace_entry ent; u32 __data_loc_name; long unsigned int min; long unsigned int max; char __data[0]; }; struct trace_event_raw_clk_parent { struct trace_entry ent; u32 __data_loc_name; u32 __data_loc_pname; char __data[0]; }; struct trace_event_raw_clk_phase { struct trace_entry ent; u32 __data_loc_name; int phase; char __data[0]; }; struct trace_event_raw_clk_duty_cycle { struct trace_entry ent; u32 __data_loc_name; unsigned int num; unsigned int den; char __data[0]; }; struct trace_event_data_offsets_clk { u32 name; }; struct trace_event_data_offsets_clk_rate { u32 name; }; struct trace_event_data_offsets_clk_rate_range { u32 name; }; struct trace_event_data_offsets_clk_parent { u32 name; u32 pname; }; struct trace_event_data_offsets_clk_phase { u32 name; }; struct trace_event_data_offsets_clk_duty_cycle { u32 name; }; typedef void (*btf_trace_clk_enable)(void *, struct clk_core *); typedef void (*btf_trace_clk_enable_complete)(void *, struct clk_core *); typedef void (*btf_trace_clk_disable)(void *, struct clk_core *); typedef void (*btf_trace_clk_disable_complete)(void *, struct clk_core *); typedef void (*btf_trace_clk_prepare)(void *, struct clk_core *); typedef void (*btf_trace_clk_prepare_complete)(void *, struct clk_core *); typedef void (*btf_trace_clk_unprepare)(void *, struct clk_core *); typedef void (*btf_trace_clk_unprepare_complete)(void *, struct clk_core *); typedef void (*btf_trace_clk_set_rate)(void *, struct clk_core *, long unsigned int); typedef void (*btf_trace_clk_set_rate_complete)(void *, struct clk_core *, long unsigned int); typedef void (*btf_trace_clk_set_min_rate)(void *, struct clk_core *, long unsigned int); typedef void (*btf_trace_clk_set_max_rate)(void *, struct clk_core *, long unsigned int); typedef void (*btf_trace_clk_set_rate_range)(void *, struct clk_core *, long unsigned int, long unsigned int); typedef void (*btf_trace_clk_set_parent)(void *, struct clk_core *, struct clk_core *); typedef void (*btf_trace_clk_set_parent_complete)(void *, struct clk_core *, struct clk_core *); typedef void (*btf_trace_clk_set_phase)(void *, struct clk_core *, int); typedef void (*btf_trace_clk_set_phase_complete)(void *, struct clk_core *, int); typedef void (*btf_trace_clk_set_duty_cycle)(void *, struct clk_core *, struct clk_duty *); typedef void (*btf_trace_clk_set_duty_cycle_complete)(void *, struct clk_core *, struct clk_duty *); struct clk_notifier_devres { struct clk *clk; struct notifier_block *nb; }; struct clk_div_table { unsigned int val; unsigned int div; }; struct clk_divider { struct clk_hw hw; void *reg; u8 shift; u8 width; u8 flags; const struct clk_div_table *table; spinlock_t *lock; }; struct clk_fixed_factor { struct clk_hw hw; unsigned int mult; unsigned int div; }; struct clk_fixed_rate { struct clk_hw hw; long unsigned int fixed_rate; long unsigned int fixed_accuracy; long unsigned int flags; }; struct clk_gate { struct clk_hw hw; void *reg; u8 bit_idx; u8 flags; spinlock_t *lock; }; struct clk_multiplier { struct clk_hw hw; void *reg; u8 shift; u8 width; u8 flags; spinlock_t *lock; }; struct clk_mux { struct clk_hw hw; void *reg; u32 *table; u32 mask; u8 shift; u8 flags; spinlock_t *lock; }; struct clk_composite { struct clk_hw hw; struct clk_ops ops; struct clk_hw *mux_hw; struct clk_hw *rate_hw; struct clk_hw *gate_hw; const struct clk_ops *mux_ops; const struct clk_ops *rate_ops; const struct clk_ops *gate_ops; }; struct clk_fractional_divider { struct clk_hw hw; void *reg; u8 mshift; u8 mwidth; u32 mmask; u8 nshift; u8 nwidth; u32 nmask; u8 flags; void (*approximation)(struct clk_hw *, long unsigned int, long unsigned int *, long unsigned int *, long unsigned int *); spinlock_t *lock; }; struct gpio_desc; enum gpiod_flags { GPIOD_ASIS = 0, GPIOD_IN = 1, GPIOD_OUT_LOW = 3, GPIOD_OUT_HIGH = 7, GPIOD_OUT_LOW_OPEN_DRAIN = 11, GPIOD_OUT_HIGH_OPEN_DRAIN = 15, }; struct clk_gpio { struct clk_hw hw; struct gpio_desc *gpiod; }; struct pmc_clk { const char *name; long unsigned int freq; const char *parent_name; }; struct pmc_clk_data { void *base; const struct pmc_clk *clks; bool critical; }; struct clk_plt_fixed { struct clk_hw *clk; struct clk_lookup *lookup; }; struct clk_plt { struct clk_hw hw; void *reg; struct clk_lookup *lookup; spinlock_t lock; }; struct clk_plt_data { struct clk_plt_fixed **parents; u8 nparents; struct clk_plt *clks[6]; struct clk_lookup *mclk_lookup; struct clk_lookup *ether_clk_lookup; }; struct virtio_driver { struct device_driver driver; const struct virtio_device_id *id_table; const unsigned int *feature_table; unsigned int feature_table_size; const unsigned int *feature_table_legacy; unsigned int feature_table_size_legacy; int (*validate)(struct virtio_device *); int (*probe)(struct virtio_device *); void (*scan)(struct virtio_device *); void (*remove)(struct virtio_device *); void (*config_changed)(struct virtio_device *); }; typedef __u16 __virtio16; typedef __u32 __virtio32; typedef __u64 __virtio64; struct vring_desc { __virtio64 addr; __virtio32 len; __virtio16 flags; __virtio16 next; }; struct vring_avail { __virtio16 flags; __virtio16 idx; __virtio16 ring[0]; }; struct vring_used_elem { __virtio32 id; __virtio32 len; }; typedef struct vring_used_elem vring_used_elem_t; struct vring_used { __virtio16 flags; __virtio16 idx; vring_used_elem_t ring[0]; }; typedef struct vring_desc vring_desc_t; typedef struct vring_avail vring_avail_t; typedef struct vring_used vring_used_t; struct vring { unsigned int num; vring_desc_t *desc; vring_avail_t *avail; vring_used_t *used; }; struct vring_packed_desc_event { __le16 off_wrap; __le16 flags; }; struct vring_packed_desc { __le64 addr; __le32 len; __le16 id; __le16 flags; }; struct vring_desc_state_split { void *data; struct vring_desc *indir_desc; }; struct vring_desc_state_packed { void *data; struct vring_packed_desc *indir_desc; u16 num; u16 last; }; struct vring_desc_extra { dma_addr_t addr; u32 len; u16 flags; u16 next; }; struct vring_virtqueue { struct virtqueue vq; bool packed_ring; bool use_dma_api; bool weak_barriers; bool broken; bool indirect; bool event; unsigned int free_head; unsigned int num_added; u16 last_used_idx; bool event_triggered; union { struct { struct vring vring; u16 avail_flags_shadow; u16 avail_idx_shadow; struct vring_desc_state_split *desc_state; struct vring_desc_extra *desc_extra; dma_addr_t queue_dma_addr; size_t queue_size_in_bytes; } split; struct { struct { unsigned int num; struct vring_packed_desc *desc; struct vring_packed_desc_event *driver; struct vring_packed_desc_event *device; } vring; bool avail_wrap_counter; bool used_wrap_counter; u16 avail_used_flags; u16 next_avail_idx; u16 event_flags_shadow; struct vring_desc_state_packed *desc_state; struct vring_desc_extra *desc_extra; dma_addr_t ring_dma_addr; dma_addr_t driver_event_dma_addr; dma_addr_t device_event_dma_addr; size_t ring_size_in_bytes; size_t event_size_in_bytes; } packed; }; bool (*notify)(struct virtqueue *); bool we_own_ring; }; struct virtio_pci_common_cfg { __le32 device_feature_select; __le32 device_feature; __le32 guest_feature_select; __le32 guest_feature; __le16 msix_config; __le16 num_queues; __u8 device_status; __u8 config_generation; __le16 queue_select; __le16 queue_size; __le16 queue_msix_vector; __le16 queue_enable; __le16 queue_notify_off; __le32 queue_desc_lo; __le32 queue_desc_hi; __le32 queue_avail_lo; __le32 queue_avail_hi; __le32 queue_used_lo; __le32 queue_used_hi; }; struct virtio_pci_modern_device { struct pci_dev *pci_dev; struct virtio_pci_common_cfg *common; void *device; void *notify_base; resource_size_t notify_pa; u8 *isr; size_t notify_len; size_t device_len; int notify_map_cap; u32 notify_offset_multiplier; int modern_bars; struct virtio_device_id id; }; struct virtio_pci_legacy_device { struct pci_dev *pci_dev; u8 *isr; void *ioaddr; struct virtio_device_id id; }; struct virtio_pci_vq_info { struct virtqueue *vq; struct list_head node; unsigned int msix_vector; }; struct virtio_pci_device { struct virtio_device vdev; struct pci_dev *pci_dev; struct virtio_pci_legacy_device ldev; struct virtio_pci_modern_device mdev; bool is_legacy; u8 *isr; spinlock_t lock; struct list_head virtqueues; struct virtio_pci_vq_info **vqs; int msix_enabled; int intx_enabled; bool intx_soft_enabled; cpumask_var_t *msix_affinity_masks; char (*msix_names)[256]; unsigned int msix_vectors; unsigned int msix_used_vectors; bool per_vq_vectors; struct virtqueue * (*setup_vq)(struct virtio_pci_device *, struct virtio_pci_vq_info *, unsigned int, void (*)(struct virtqueue *), const char *, bool, u16); void (*del_vq)(struct virtio_pci_vq_info *); u16 (*config_vector)(struct virtio_pci_device *, u16); }; enum { VP_MSIX_CONFIG_VECTOR = 0, VP_MSIX_VQ_VECTOR = 1, }; struct tty_file_private { struct tty_struct *tty; struct file *file; struct list_head list; }; struct n_tty_data { size_t read_head; size_t commit_head; size_t canon_head; size_t echo_head; size_t echo_commit; size_t echo_mark; long unsigned int char_map[4]; long unsigned int overrun_time; int num_overrun; bool no_room; unsigned char lnext: 1; unsigned char erasing: 1; unsigned char raw: 1; unsigned char real_raw: 1; unsigned char icanon: 1; unsigned char push: 1; char read_buf[4096]; long unsigned int read_flags[64]; unsigned char echo_buf[4096]; size_t read_tail; size_t line_start; unsigned int column; unsigned int canon_column; size_t echo_tail; struct mutex atomic_read_lock; struct mutex output_lock; }; enum { ERASE = 0, WERASE = 1, KILL = 2, }; struct termios { tcflag_t c_iflag; tcflag_t c_oflag; tcflag_t c_cflag; tcflag_t c_lflag; cc_t c_line; cc_t c_cc[19]; }; struct termios2 { tcflag_t c_iflag; tcflag_t c_oflag; tcflag_t c_cflag; tcflag_t c_lflag; cc_t c_line; cc_t c_cc[19]; speed_t c_ispeed; speed_t c_ospeed; }; struct termio { short unsigned int c_iflag; short unsigned int c_oflag; short unsigned int c_cflag; short unsigned int c_lflag; unsigned char c_line; unsigned char c_cc[8]; }; struct ldsem_waiter { struct list_head list; struct task_struct *task; }; struct pts_fs_info___2; enum input_clock_type { INPUT_CLK_REAL = 0, INPUT_CLK_MONO = 1, INPUT_CLK_BOOT = 2, INPUT_CLK_MAX = 3, }; struct hv_ops; struct hvc_struct { struct tty_port port; spinlock_t lock; int index; int do_wakeup; char *outbuf; int outbuf_size; int n_outbuf; uint32_t vtermno; const struct hv_ops *ops; int irq_requested; int data; struct winsize ws; struct work_struct tty_resize; struct list_head next; long unsigned int flags; }; struct hv_ops { int (*get_chars)(uint32_t, char *, int); int (*put_chars)(uint32_t, const char *, int); int (*flush)(uint32_t, bool); int (*notifier_add)(struct hvc_struct *, int); void (*notifier_del)(struct hvc_struct *, int); void (*notifier_hangup)(struct hvc_struct *, int); int (*tiocmget)(struct hvc_struct *); int (*tiocmset)(struct hvc_struct *, unsigned int, unsigned int); void (*dtr_rts)(struct hvc_struct *, int); }; struct memdev { const char *name; umode_t mode; const struct file_operations *fops; fmode_t fmode; }; struct timer_rand_state { cycles_t last_time; long int last_delta; long int last_delta2; }; struct trace_event_raw_add_device_randomness { struct trace_entry ent; int bytes; long unsigned int IP; char __data[0]; }; struct trace_event_raw_random__mix_pool_bytes { struct trace_entry ent; const char *pool_name; int bytes; long unsigned int IP; char __data[0]; }; struct trace_event_raw_credit_entropy_bits { struct trace_entry ent; const char *pool_name; int bits; int entropy_count; long unsigned int IP; char __data[0]; }; struct trace_event_raw_debit_entropy { struct trace_entry ent; const char *pool_name; int debit_bits; char __data[0]; }; struct trace_event_raw_add_input_randomness { struct trace_entry ent; int input_bits; char __data[0]; }; struct trace_event_raw_add_disk_randomness { struct trace_entry ent; dev_t dev; int input_bits; char __data[0]; }; struct trace_event_raw_random__get_random_bytes { struct trace_entry ent; int nbytes; long unsigned int IP; char __data[0]; }; struct trace_event_raw_random__extract_entropy { struct trace_entry ent; const char *pool_name; int nbytes; int entropy_count; long unsigned int IP; char __data[0]; }; struct trace_event_raw_urandom_read { struct trace_entry ent; int got_bits; int pool_left; int input_left; char __data[0]; }; struct trace_event_raw_prandom_u32 { struct trace_entry ent; unsigned int ret; char __data[0]; }; struct trace_event_data_offsets_add_device_randomness {}; struct trace_event_data_offsets_random__mix_pool_bytes {}; struct trace_event_data_offsets_credit_entropy_bits {}; struct trace_event_data_offsets_debit_entropy {}; struct trace_event_data_offsets_add_input_randomness {}; struct trace_event_data_offsets_add_disk_randomness {}; struct trace_event_data_offsets_random__get_random_bytes {}; struct trace_event_data_offsets_random__extract_entropy {}; struct trace_event_data_offsets_urandom_read {}; struct trace_event_data_offsets_prandom_u32 {}; typedef void (*btf_trace_add_device_randomness)(void *, int, long unsigned int); typedef void (*btf_trace_mix_pool_bytes)(void *, const char *, int, long unsigned int); typedef void (*btf_trace_mix_pool_bytes_nolock)(void *, const char *, int, long unsigned int); typedef void (*btf_trace_credit_entropy_bits)(void *, const char *, int, int, long unsigned int); typedef void (*btf_trace_debit_entropy)(void *, const char *, int); typedef void (*btf_trace_add_input_randomness)(void *, int); typedef void (*btf_trace_add_disk_randomness)(void *, dev_t, int); typedef void (*btf_trace_get_random_bytes)(void *, int, long unsigned int); typedef void (*btf_trace_get_random_bytes_arch)(void *, int, long unsigned int); typedef void (*btf_trace_extract_entropy)(void *, const char *, int, int, long unsigned int); typedef void (*btf_trace_urandom_read)(void *, int, int, int); typedef void (*btf_trace_prandom_u32)(void *, unsigned int); struct poolinfo { int poolbitshift; int poolwords; int poolbytes; int poolfracbits; int tap1; int tap2; int tap3; int tap4; int tap5; }; struct crng_state { __u32 state[16]; long unsigned int init_time; spinlock_t lock; }; struct entropy_store { const struct poolinfo *poolinfo; __u32 *pool; const char *name; spinlock_t lock; short unsigned int add_ptr; short unsigned int input_rotate; int entropy_count; unsigned int last_data_init: 1; __u8 last_data[10]; }; struct fast_pool { __u32 pool[4]; long unsigned int last; short unsigned int reg_idx; unsigned char count; }; struct batched_entropy { union { u64 entropy_u64[8]; u32 entropy_u32[16]; }; unsigned int position; spinlock_t batch_lock; }; struct virtio_console_config { __virtio16 cols; __virtio16 rows; __virtio32 max_nr_ports; __virtio32 emerg_wr; }; struct virtio_console_control { __virtio32 id; __virtio16 event; __virtio16 value; }; struct ports_driver_data { struct class *class; struct dentry *debugfs_dir; struct list_head portdevs; unsigned int next_vtermno; struct list_head consoles; }; struct console___2 { struct list_head list; struct hvc_struct *hvc; struct winsize ws; u32 vtermno; }; struct port_buffer { char *buf; size_t size; size_t len; size_t offset; dma_addr_t dma; struct device *dev; struct list_head list; unsigned int sgpages; struct scatterlist sg[0]; }; struct ports_device { struct list_head list; struct work_struct control_work; struct work_struct config_work; struct list_head ports; spinlock_t ports_lock; spinlock_t c_ivq_lock; spinlock_t c_ovq_lock; u32 max_nr_ports; struct virtio_device *vdev; struct virtqueue *c_ivq; struct virtqueue *c_ovq; struct virtio_console_control cpkt; struct virtqueue **in_vqs; struct virtqueue **out_vqs; int chr_major; }; struct port_stats { long unsigned int bytes_sent; long unsigned int bytes_received; long unsigned int bytes_discarded; }; struct port { struct list_head list; struct ports_device *portdev; struct port_buffer *inbuf; spinlock_t inbuf_lock; spinlock_t outvq_lock; struct virtqueue *in_vq; struct virtqueue *out_vq; struct dentry *debugfs_file; struct port_stats stats; struct console___2 cons; struct cdev *cdev; struct device *dev; struct kref kref; wait_queue_head_t waitqueue; char *name; struct fasync_struct *async_queue; u32 id; bool outvq_full; bool host_connected; bool guest_connected; }; struct sg_list { unsigned int n; unsigned int size; size_t len; struct scatterlist *sg; }; struct hpet_info { long unsigned int hi_ireqfreq; long unsigned int hi_flags; short unsigned int hi_hpet; short unsigned int hi_timer; }; struct hpet_timer { u64 hpet_config; union { u64 _hpet_hc64; u32 _hpet_hc32; long unsigned int _hpet_compare; } _u1; u64 hpet_fsb[2]; }; struct hpet { u64 hpet_cap; u64 res0; u64 hpet_config; u64 res1; u64 hpet_isr; u64 res2[25]; union { u64 _hpet_mc64; u32 _hpet_mc32; long unsigned int _hpet_mc; } _u0; u64 res3; struct hpet_timer hpet_timers[1]; }; struct hpets; struct hpet_dev { struct hpets *hd_hpets; struct hpet *hd_hpet; struct hpet_timer *hd_timer; long unsigned int hd_ireqfreq; long unsigned int hd_irqdata; wait_queue_head_t hd_waitqueue; struct fasync_struct *hd_async_queue; unsigned int hd_flags; unsigned int hd_irq; unsigned int hd_hdwirq; char hd_name[7]; }; struct hpets { struct hpets *hp_next; struct hpet *hp_hpet; long unsigned int hp_hpet_phys; struct clocksource *hp_clocksource; long long unsigned int hp_tick_freq; long unsigned int hp_delta; unsigned int hp_ntimer; unsigned int hp_which; struct hpet_dev hp_dev[0]; }; struct hwrng { const char *name; int (*init)(struct hwrng *); void (*cleanup)(struct hwrng *); int (*data_present)(struct hwrng *, int); int (*data_read)(struct hwrng *, u32 *); int (*read)(struct hwrng *, void *, size_t, bool); long unsigned int priv; short unsigned int quality; struct list_head list; struct kref ref; struct completion cleanup_done; }; struct virtrng_info { struct hwrng hwrng; struct virtqueue *vq; char name[25]; int index; bool hwrng_register_done; bool hwrng_removed; struct completion have_data; unsigned int data_avail; unsigned int data_idx; u8 data[64]; }; struct component_ops { int (*bind)(struct device *, struct device *, void *); void (*unbind)(struct device *, struct device *, void *); }; struct component_master_ops { int (*bind)(struct device *); void (*unbind)(struct device *); }; struct component; struct component_match_array { void *data; int (*compare)(struct device *, void *); int (*compare_typed)(struct device *, int, void *); void (*release)(struct device *, void *); struct component *component; bool duplicate; }; struct master; struct component { struct list_head node; struct master *master; bool bound; const struct component_ops *ops; int subcomponent; struct device *dev; }; struct component_match { size_t alloc; size_t num; struct component_match_array *compare; }; struct master { struct list_head node; bool bound; const struct component_master_ops *ops; struct device *parent; struct component_match *match; }; struct fwnode_link { struct fwnode_handle *supplier; struct list_head s_hook; struct fwnode_handle *consumer; struct list_head c_hook; }; enum dpm_order { DPM_ORDER_NONE = 0, DPM_ORDER_DEV_AFTER_PARENT = 1, DPM_ORDER_PARENT_BEFORE_DEV = 2, DPM_ORDER_DEV_LAST = 3, }; struct subsys_private { struct kset subsys; struct kset *devices_kset; struct list_head interfaces; struct mutex mutex; struct kset *drivers_kset; struct klist klist_devices; struct klist klist_drivers; struct blocking_notifier_head bus_notifier; unsigned int drivers_autoprobe: 1; struct bus_type *bus; struct kset glue_dirs; struct class *class; }; struct driver_private { struct kobject kobj; struct klist klist_devices; struct klist_node knode_bus; struct module_kobject *mkobj; struct device_driver *driver; }; struct device_private { struct klist klist_children; struct klist_node knode_parent; struct klist_node knode_driver; struct klist_node knode_bus; struct klist_node knode_class; struct list_head deferred_probe; struct device_driver *async_driver; char *deferred_probe_reason; struct device *device; u8 dead: 1; }; union device_attr_group_devres { const struct attribute_group *group; const struct attribute_group **groups; }; struct class_dir { struct kobject kobj; struct class *class; }; struct root_device { struct device dev; struct module *owner; }; struct subsys_dev_iter { struct klist_iter ki; const struct device_type *type; }; struct subsys_interface { const char *name; struct bus_type *subsys; struct list_head node; int (*add_dev)(struct device *, struct subsys_interface *); void (*remove_dev)(struct device *, struct subsys_interface *); }; struct device_attach_data { struct device *dev; bool check_async; bool want_async; bool have_async; }; struct class_attribute { struct attribute attr; ssize_t (*show)(struct class *, struct class_attribute *, char *); ssize_t (*store)(struct class *, struct class_attribute *, const char *, size_t); }; struct class_attribute_string { struct class_attribute attr; char *str; }; struct class_compat { struct kobject *kobj; }; struct software_node { const char *name; const struct software_node *parent; const struct property_entry *properties; }; struct irq_affinity_devres { unsigned int count; unsigned int irq[0]; }; struct platform_object { struct platform_device pdev; char name[0]; }; struct cpu_attr { struct device_attribute attr; const struct cpumask * const map; }; struct probe { struct probe *next; dev_t dev; long unsigned int range; struct module *owner; kobj_probe_t *get; int (*lock)(dev_t, void *); void *data; }; struct kobj_map___2 { struct probe *probes[255]; struct mutex *lock; }; struct devres_node { struct list_head entry; dr_release_t release; const char *name; size_t size; }; struct devres { struct devres_node node; u8 data[0]; }; struct devres_group { struct devres_node node[2]; void *id; int color; }; struct action_devres { void *data; void (*action)(void *); }; struct pages_devres { long unsigned int addr; unsigned int order; }; struct attribute_container { struct list_head node; struct klist containers; struct class *class; const struct attribute_group *grp; struct device_attribute **attrs; int (*match)(struct attribute_container *, struct device *); long unsigned int flags; }; struct internal_container { struct klist_node node; struct attribute_container *cont; struct device classdev; }; struct transport_container; struct transport_class { struct class class; int (*setup)(struct transport_container *, struct device *, struct device *); int (*configure)(struct transport_container *, struct device *, struct device *); int (*remove)(struct transport_container *, struct device *, struct device *); }; struct transport_container { struct attribute_container ac; const struct attribute_group *statistics; }; struct anon_transport_class { struct transport_class tclass; struct attribute_container container; }; typedef void * (*devcon_match_fn_t)(struct fwnode_handle *, const char *, void *); enum ethtool_link_mode_bit_indices { ETHTOOL_LINK_MODE_10baseT_Half_BIT = 0, ETHTOOL_LINK_MODE_10baseT_Full_BIT = 1, ETHTOOL_LINK_MODE_100baseT_Half_BIT = 2, ETHTOOL_LINK_MODE_100baseT_Full_BIT = 3, ETHTOOL_LINK_MODE_1000baseT_Half_BIT = 4, ETHTOOL_LINK_MODE_1000baseT_Full_BIT = 5, ETHTOOL_LINK_MODE_Autoneg_BIT = 6, ETHTOOL_LINK_MODE_TP_BIT = 7, ETHTOOL_LINK_MODE_AUI_BIT = 8, ETHTOOL_LINK_MODE_MII_BIT = 9, ETHTOOL_LINK_MODE_FIBRE_BIT = 10, ETHTOOL_LINK_MODE_BNC_BIT = 11, ETHTOOL_LINK_MODE_10000baseT_Full_BIT = 12, ETHTOOL_LINK_MODE_Pause_BIT = 13, ETHTOOL_LINK_MODE_Asym_Pause_BIT = 14, ETHTOOL_LINK_MODE_2500baseX_Full_BIT = 15, ETHTOOL_LINK_MODE_Backplane_BIT = 16, ETHTOOL_LINK_MODE_1000baseKX_Full_BIT = 17, ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT = 18, ETHTOOL_LINK_MODE_10000baseKR_Full_BIT = 19, ETHTOOL_LINK_MODE_10000baseR_FEC_BIT = 20, ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT = 21, ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT = 22, ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT = 23, ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT = 24, ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT = 25, ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT = 26, ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT = 27, ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT = 28, ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT = 29, ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT = 30, ETHTOOL_LINK_MODE_25000baseCR_Full_BIT = 31, ETHTOOL_LINK_MODE_25000baseKR_Full_BIT = 32, ETHTOOL_LINK_MODE_25000baseSR_Full_BIT = 33, ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT = 34, ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT = 35, ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT = 36, ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT = 37, ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT = 38, ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT = 39, ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT = 40, ETHTOOL_LINK_MODE_1000baseX_Full_BIT = 41, ETHTOOL_LINK_MODE_10000baseCR_Full_BIT = 42, ETHTOOL_LINK_MODE_10000baseSR_Full_BIT = 43, ETHTOOL_LINK_MODE_10000baseLR_Full_BIT = 44, ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT = 45, ETHTOOL_LINK_MODE_10000baseER_Full_BIT = 46, ETHTOOL_LINK_MODE_2500baseT_Full_BIT = 47, ETHTOOL_LINK_MODE_5000baseT_Full_BIT = 48, ETHTOOL_LINK_MODE_FEC_NONE_BIT = 49, ETHTOOL_LINK_MODE_FEC_RS_BIT = 50, ETHTOOL_LINK_MODE_FEC_BASER_BIT = 51, ETHTOOL_LINK_MODE_50000baseKR_Full_BIT = 52, ETHTOOL_LINK_MODE_50000baseSR_Full_BIT = 53, ETHTOOL_LINK_MODE_50000baseCR_Full_BIT = 54, ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT = 55, ETHTOOL_LINK_MODE_50000baseDR_Full_BIT = 56, ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT = 57, ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT = 58, ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT = 59, ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT = 60, ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT = 61, ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT = 62, ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT = 63, ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = 64, ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT = 65, ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT = 66, ETHTOOL_LINK_MODE_100baseT1_Full_BIT = 67, ETHTOOL_LINK_MODE_1000baseT1_Full_BIT = 68, ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT = 69, ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT = 70, ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT = 71, ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT = 72, ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT = 73, ETHTOOL_LINK_MODE_FEC_LLRS_BIT = 74, ETHTOOL_LINK_MODE_100000baseKR_Full_BIT = 75, ETHTOOL_LINK_MODE_100000baseSR_Full_BIT = 76, ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT = 77, ETHTOOL_LINK_MODE_100000baseCR_Full_BIT = 78, ETHTOOL_LINK_MODE_100000baseDR_Full_BIT = 79, ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT = 80, ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT = 81, ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT = 82, ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT = 83, ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT = 84, ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT = 85, ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT = 86, ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT = 87, ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT = 88, ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT = 89, ETHTOOL_LINK_MODE_100baseFX_Half_BIT = 90, ETHTOOL_LINK_MODE_100baseFX_Full_BIT = 91, __ETHTOOL_LINK_MODE_MASK_NBITS = 92, }; typedef enum { PHY_INTERFACE_MODE_NA = 0, PHY_INTERFACE_MODE_INTERNAL = 1, PHY_INTERFACE_MODE_MII = 2, PHY_INTERFACE_MODE_GMII = 3, PHY_INTERFACE_MODE_SGMII = 4, PHY_INTERFACE_MODE_TBI = 5, PHY_INTERFACE_MODE_REVMII = 6, PHY_INTERFACE_MODE_RMII = 7, PHY_INTERFACE_MODE_REVRMII = 8, PHY_INTERFACE_MODE_RGMII = 9, PHY_INTERFACE_MODE_RGMII_ID = 10, PHY_INTERFACE_MODE_RGMII_RXID = 11, PHY_INTERFACE_MODE_RGMII_TXID = 12, PHY_INTERFACE_MODE_RTBI = 13, PHY_INTERFACE_MODE_SMII = 14, PHY_INTERFACE_MODE_XGMII = 15, PHY_INTERFACE_MODE_XLGMII = 16, PHY_INTERFACE_MODE_MOCA = 17, PHY_INTERFACE_MODE_QSGMII = 18, PHY_INTERFACE_MODE_TRGMII = 19, PHY_INTERFACE_MODE_100BASEX = 20, PHY_INTERFACE_MODE_1000BASEX = 21, PHY_INTERFACE_MODE_2500BASEX = 22, PHY_INTERFACE_MODE_5GBASER = 23, PHY_INTERFACE_MODE_RXAUI = 24, PHY_INTERFACE_MODE_XAUI = 25, PHY_INTERFACE_MODE_10GBASER = 26, PHY_INTERFACE_MODE_25GBASER = 27, PHY_INTERFACE_MODE_USXGMII = 28, PHY_INTERFACE_MODE_10GKR = 29, PHY_INTERFACE_MODE_MAX = 30, } phy_interface_t; struct software_node_ref_args { const struct software_node *node; unsigned int nargs; u64 args[8]; }; struct swnode { struct kobject kobj; struct fwnode_handle fwnode; const struct software_node *node; int id; struct ida child_ids; struct list_head entry; struct list_head children; struct swnode *parent; unsigned int allocated: 1; unsigned int managed: 1; }; struct req { struct req *next; struct completion done; int err; const char *name; umode_t mode; kuid_t uid; kgid_t gid; struct device *dev; }; struct pm_clk_notifier_block { struct notifier_block nb; struct dev_pm_domain *pm_domain; char *con_ids[0]; }; struct firmware { size_t size; const u8 *data; void *priv; }; enum fw_opt { FW_OPT_UEVENT = 1, FW_OPT_NOWAIT = 2, FW_OPT_USERHELPER = 4, FW_OPT_NO_WARN = 8, FW_OPT_NOCACHE = 16, FW_OPT_NOFALLBACK_SYSFS = 32, FW_OPT_FALLBACK_PLATFORM = 64, FW_OPT_PARTIAL = 128, }; enum fw_status { FW_STATUS_UNKNOWN = 0, FW_STATUS_LOADING = 1, FW_STATUS_DONE = 2, FW_STATUS_ABORTED = 3, }; struct fw_state { struct completion completion; enum fw_status status; }; struct firmware_cache; struct fw_priv { struct kref ref; struct list_head list; struct firmware_cache *fwc; struct fw_state fw_st; void *data; size_t size; size_t allocated_size; size_t offset; u32 opt_flags; const char *fw_name; }; struct firmware_cache { spinlock_t lock; struct list_head head; int state; }; struct firmware_work { struct work_struct work; struct module *module; const char *name; struct device *device; void *context; void (*cont)(const struct firmware *, void *); u32 opt_flags; }; struct builtin_fw { char *name; void *data; long unsigned int size; }; typedef void (*irq_write_msi_msg_t)(struct msi_desc *, struct msi_msg *); struct platform_msi_priv_data { struct device *dev; void *host_data; const struct attribute_group **msi_irq_groups; msi_alloc_info_t arg; irq_write_msi_msg_t write_msg; int devid; }; struct trace_event_raw_devres { struct trace_entry ent; u32 __data_loc_devname; struct device *dev; const char *op; void *node; const char *name; size_t size; char __data[0]; }; struct trace_event_data_offsets_devres { u32 devname; }; typedef void (*btf_trace_devres_log)(void *, struct device *, const char *, void *, const char *, size_t); struct brd_device { int brd_number; struct gendisk *brd_disk; struct list_head brd_list; spinlock_t brd_lock; struct xarray brd_pages; u64 brd_nr_pages; }; typedef long unsigned int __kernel_old_dev_t; enum { LO_FLAGS_READ_ONLY = 1, LO_FLAGS_AUTOCLEAR = 4, LO_FLAGS_PARTSCAN = 8, LO_FLAGS_DIRECT_IO = 16, }; struct loop_info { int lo_number; __kernel_old_dev_t lo_device; long unsigned int lo_inode; __kernel_old_dev_t lo_rdevice; int lo_offset; int lo_encrypt_type; int lo_encrypt_key_size; int lo_flags; char lo_name[64]; unsigned char lo_encrypt_key[32]; long unsigned int lo_init[2]; char reserved[4]; }; struct loop_info64 { __u64 lo_device; __u64 lo_inode; __u64 lo_rdevice; __u64 lo_offset; __u64 lo_sizelimit; __u32 lo_number; __u32 lo_encrypt_type; __u32 lo_encrypt_key_size; __u32 lo_flags; __u8 lo_file_name[64]; __u8 lo_crypt_name[64]; __u8 lo_encrypt_key[32]; __u64 lo_init[2]; }; struct loop_config { __u32 fd; __u32 block_size; struct loop_info64 info; __u64 __reserved[8]; }; enum { Lo_unbound = 0, Lo_bound = 1, Lo_rundown = 2, Lo_deleting = 3, }; struct loop_device { int lo_number; atomic_t lo_refcnt; loff_t lo_offset; loff_t lo_sizelimit; int lo_flags; char lo_file_name[64]; struct file *lo_backing_file; struct block_device *lo_device; gfp_t old_gfp_mask; spinlock_t lo_lock; int lo_state; spinlock_t lo_work_lock; struct workqueue_struct *workqueue; struct work_struct rootcg_work; struct list_head rootcg_cmd_list; struct list_head idle_worker_list; struct rb_root worker_tree; struct timer_list timer; bool use_dio; bool sysfs_inited; struct request_queue *lo_queue; struct blk_mq_tag_set tag_set; struct gendisk *lo_disk; struct mutex lo_mutex; bool idr_visible; }; struct loop_cmd { struct list_head list_entry; bool use_aio; atomic_t ref; long int ret; struct kiocb iocb; struct bio_vec *bvec; struct cgroup_subsys_state *blkcg_css; struct cgroup_subsys_state *memcg_css; }; struct loop_worker { struct rb_node rb_node; struct work_struct work; struct list_head cmd_list; struct list_head idle_list; struct loop_device *lo; struct cgroup_subsys_state *blkcg_css; long unsigned int last_ran_at; }; struct virtio_blk_geometry { __virtio16 cylinders; __u8 heads; __u8 sectors; }; struct virtio_blk_config { __virtio64 capacity; __virtio32 size_max; __virtio32 seg_max; struct virtio_blk_geometry geometry; __virtio32 blk_size; __u8 physical_block_exp; __u8 alignment_offset; __virtio16 min_io_size; __virtio32 opt_io_size; __u8 wce; __u8 unused; __virtio16 num_queues; __virtio32 max_discard_sectors; __virtio32 max_discard_seg; __virtio32 discard_sector_alignment; __virtio32 max_write_zeroes_sectors; __virtio32 max_write_zeroes_seg; __u8 write_zeroes_may_unmap; __u8 unused1[3]; } __attribute__((packed)); struct virtio_blk_outhdr { __virtio32 type; __virtio32 ioprio; __virtio64 sector; }; struct virtio_blk_discard_write_zeroes { __le64 sector; __le32 num_sectors; __le32 flags; }; struct virtio_blk_vq { struct virtqueue *vq; spinlock_t lock; char name[16]; long: 32; long: 64; long: 64; long: 64; long: 64; }; struct virtio_blk { struct mutex vdev_mutex; struct virtio_device *vdev; struct gendisk *disk; struct blk_mq_tag_set tag_set; struct work_struct config_work; refcount_t refs; unsigned int sg_elems; int index; int num_vqs; struct virtio_blk_vq *vqs; }; struct virtblk_req { struct virtio_blk_outhdr out_hdr; u8 status; struct sg_table sg_table; struct scatterlist sg[0]; }; struct ethhdr { unsigned char h_dest[6]; unsigned char h_source[6]; __be16 h_proto; }; enum { NETIF_F_SG_BIT = 0, NETIF_F_IP_CSUM_BIT = 1, __UNUSED_NETIF_F_1 = 2, NETIF_F_HW_CSUM_BIT = 3, NETIF_F_IPV6_CSUM_BIT = 4, NETIF_F_HIGHDMA_BIT = 5, NETIF_F_FRAGLIST_BIT = 6, NETIF_F_HW_VLAN_CTAG_TX_BIT = 7, NETIF_F_HW_VLAN_CTAG_RX_BIT = 8, NETIF_F_HW_VLAN_CTAG_FILTER_BIT = 9, NETIF_F_VLAN_CHALLENGED_BIT = 10, NETIF_F_GSO_BIT = 11, NETIF_F_LLTX_BIT = 12, NETIF_F_NETNS_LOCAL_BIT = 13, NETIF_F_GRO_BIT = 14, NETIF_F_LRO_BIT = 15, NETIF_F_GSO_SHIFT = 16, NETIF_F_TSO_BIT = 16, NETIF_F_GSO_ROBUST_BIT = 17, NETIF_F_TSO_ECN_BIT = 18, NETIF_F_TSO_MANGLEID_BIT = 19, NETIF_F_TSO6_BIT = 20, NETIF_F_FSO_BIT = 21, NETIF_F_GSO_GRE_BIT = 22, NETIF_F_GSO_GRE_CSUM_BIT = 23, NETIF_F_GSO_IPXIP4_BIT = 24, NETIF_F_GSO_IPXIP6_BIT = 25, NETIF_F_GSO_UDP_TUNNEL_BIT = 26, NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT = 27, NETIF_F_GSO_PARTIAL_BIT = 28, NETIF_F_GSO_TUNNEL_REMCSUM_BIT = 29, NETIF_F_GSO_SCTP_BIT = 30, NETIF_F_GSO_ESP_BIT = 31, NETIF_F_GSO_UDP_BIT = 32, NETIF_F_GSO_UDP_L4_BIT = 33, NETIF_F_GSO_FRAGLIST_BIT = 34, NETIF_F_GSO_LAST = 34, NETIF_F_FCOE_CRC_BIT = 35, NETIF_F_SCTP_CRC_BIT = 36, NETIF_F_FCOE_MTU_BIT = 37, NETIF_F_NTUPLE_BIT = 38, NETIF_F_RXHASH_BIT = 39, NETIF_F_RXCSUM_BIT = 40, NETIF_F_NOCACHE_COPY_BIT = 41, NETIF_F_LOOPBACK_BIT = 42, NETIF_F_RXFCS_BIT = 43, NETIF_F_RXALL_BIT = 44, NETIF_F_HW_VLAN_STAG_TX_BIT = 45, NETIF_F_HW_VLAN_STAG_RX_BIT = 46, NETIF_F_HW_VLAN_STAG_FILTER_BIT = 47, NETIF_F_HW_L2FW_DOFFLOAD_BIT = 48, NETIF_F_HW_TC_BIT = 49, NETIF_F_HW_ESP_BIT = 50, NETIF_F_HW_ESP_TX_CSUM_BIT = 51, NETIF_F_RX_UDP_TUNNEL_PORT_BIT = 52, NETIF_F_HW_TLS_TX_BIT = 53, NETIF_F_HW_TLS_RX_BIT = 54, NETIF_F_GRO_HW_BIT = 55, NETIF_F_HW_TLS_RECORD_BIT = 56, NETIF_F_GRO_FRAGLIST_BIT = 57, NETIF_F_HW_MACSEC_BIT = 58, NETIF_F_GRO_UDP_FWD_BIT = 59, NETIF_F_HW_HSR_TAG_INS_BIT = 60, NETIF_F_HW_HSR_TAG_RM_BIT = 61, NETIF_F_HW_HSR_FWD_BIT = 62, NETIF_F_HW_HSR_DUP_BIT = 63, NETDEV_FEATURE_COUNT = 64, }; typedef struct bio_vec skb_frag_t; struct skb_shared_hwtstamps { ktime_t hwtstamp; }; enum { SKBTX_HW_TSTAMP = 1, SKBTX_SW_TSTAMP = 2, SKBTX_IN_PROGRESS = 4, SKBTX_WIFI_STATUS = 16, SKBTX_SCHED_TSTAMP = 64, }; struct skb_shared_info { __u8 flags; __u8 meta_len; __u8 nr_frags; __u8 tx_flags; short unsigned int gso_size; short unsigned int gso_segs; struct sk_buff *frag_list; struct skb_shared_hwtstamps hwtstamps; unsigned int gso_type; u32 tskey; atomic_t dataref; void *destructor_arg; skb_frag_t frags[17]; }; struct ethtool_drvinfo { __u32 cmd; char driver[32]; char version[32]; char fw_version[32]; char bus_info[32]; char erom_version[32]; char reserved2[12]; __u32 n_priv_flags; __u32 n_stats; __u32 testinfo_len; __u32 eedump_len; __u32 regdump_len; }; struct ethtool_wolinfo { __u32 cmd; __u32 supported; __u32 wolopts; __u8 sopass[6]; }; struct ethtool_tunable { __u32 cmd; __u32 id; __u32 type_id; __u32 len; void *data[0]; }; struct ethtool_regs { __u32 cmd; __u32 version; __u32 len; __u8 data[0]; }; struct ethtool_eeprom { __u32 cmd; __u32 magic; __u32 offset; __u32 len; __u8 data[0]; }; struct ethtool_eee { __u32 cmd; __u32 supported; __u32 advertised; __u32 lp_advertised; __u32 eee_active; __u32 eee_enabled; __u32 tx_lpi_enabled; __u32 tx_lpi_timer; __u32 reserved[2]; }; struct ethtool_modinfo { __u32 cmd; __u32 type; __u32 eeprom_len; __u32 reserved[8]; }; struct ethtool_coalesce { __u32 cmd; __u32 rx_coalesce_usecs; __u32 rx_max_coalesced_frames; __u32 rx_coalesce_usecs_irq; __u32 rx_max_coalesced_frames_irq; __u32 tx_coalesce_usecs; __u32 tx_max_coalesced_frames; __u32 tx_coalesce_usecs_irq; __u32 tx_max_coalesced_frames_irq; __u32 stats_block_coalesce_usecs; __u32 use_adaptive_rx_coalesce; __u32 use_adaptive_tx_coalesce; __u32 pkt_rate_low; __u32 rx_coalesce_usecs_low; __u32 rx_max_coalesced_frames_low; __u32 tx_coalesce_usecs_low; __u32 tx_max_coalesced_frames_low; __u32 pkt_rate_high; __u32 rx_coalesce_usecs_high; __u32 rx_max_coalesced_frames_high; __u32 tx_coalesce_usecs_high; __u32 tx_max_coalesced_frames_high; __u32 rate_sample_interval; }; struct ethtool_ringparam { __u32 cmd; __u32 rx_max_pending; __u32 rx_mini_max_pending; __u32 rx_jumbo_max_pending; __u32 tx_max_pending; __u32 rx_pending; __u32 rx_mini_pending; __u32 rx_jumbo_pending; __u32 tx_pending; }; struct ethtool_channels { __u32 cmd; __u32 max_rx; __u32 max_tx; __u32 max_other; __u32 max_combined; __u32 rx_count; __u32 tx_count; __u32 other_count; __u32 combined_count; }; struct ethtool_pauseparam { __u32 cmd; __u32 autoneg; __u32 rx_pause; __u32 tx_pause; }; enum ethtool_link_ext_state { ETHTOOL_LINK_EXT_STATE_AUTONEG = 0, ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE = 1, ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH = 2, ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY = 3, ETHTOOL_LINK_EXT_STATE_NO_CABLE = 4, ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE = 5, ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE = 6, ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE = 7, ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED = 8, ETHTOOL_LINK_EXT_STATE_OVERHEAT = 9, ETHTOOL_LINK_EXT_STATE_MODULE = 10, }; enum ethtool_link_ext_substate_autoneg { ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED = 1, ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED = 2, ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED = 3, ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE = 4, ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE = 5, ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD = 6, }; enum ethtool_link_ext_substate_link_training { ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED = 1, ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT = 2, ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY = 3, ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT = 4, }; enum ethtool_link_ext_substate_link_logical_mismatch { ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK = 1, ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK = 2, ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS = 3, ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED = 4, ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED = 5, }; enum ethtool_link_ext_substate_bad_signal_integrity { ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS = 1, ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE = 2, ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_REFERENCE_CLOCK_LOST = 3, ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_ALOS = 4, }; enum ethtool_link_ext_substate_cable_issue { ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE = 1, ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE = 2, }; enum ethtool_link_ext_substate_module { ETHTOOL_LINK_EXT_SUBSTATE_MODULE_CMIS_NOT_READY = 1, }; enum ethtool_module_power_mode_policy { ETHTOOL_MODULE_POWER_MODE_POLICY_HIGH = 1, ETHTOOL_MODULE_POWER_MODE_POLICY_AUTO = 2, }; enum ethtool_module_power_mode { ETHTOOL_MODULE_POWER_MODE_LOW = 1, ETHTOOL_MODULE_POWER_MODE_HIGH = 2, }; struct ethtool_test { __u32 cmd; __u32 flags; __u32 reserved; __u32 len; __u64 data[0]; }; struct ethtool_stats { __u32 cmd; __u32 n_stats; __u64 data[0]; }; struct ethtool_tcpip4_spec { __be32 ip4src; __be32 ip4dst; __be16 psrc; __be16 pdst; __u8 tos; }; struct ethtool_ah_espip4_spec { __be32 ip4src; __be32 ip4dst; __be32 spi; __u8 tos; }; struct ethtool_usrip4_spec { __be32 ip4src; __be32 ip4dst; __be32 l4_4_bytes; __u8 tos; __u8 ip_ver; __u8 proto; }; struct ethtool_tcpip6_spec { __be32 ip6src[4]; __be32 ip6dst[4]; __be16 psrc; __be16 pdst; __u8 tclass; }; struct ethtool_ah_espip6_spec { __be32 ip6src[4]; __be32 ip6dst[4]; __be32 spi; __u8 tclass; }; struct ethtool_usrip6_spec { __be32 ip6src[4]; __be32 ip6dst[4]; __be32 l4_4_bytes; __u8 tclass; __u8 l4_proto; }; union ethtool_flow_union { struct ethtool_tcpip4_spec tcp_ip4_spec; struct ethtool_tcpip4_spec udp_ip4_spec; struct ethtool_tcpip4_spec sctp_ip4_spec; struct ethtool_ah_espip4_spec ah_ip4_spec; struct ethtool_ah_espip4_spec esp_ip4_spec; struct ethtool_usrip4_spec usr_ip4_spec; struct ethtool_tcpip6_spec tcp_ip6_spec; struct ethtool_tcpip6_spec udp_ip6_spec; struct ethtool_tcpip6_spec sctp_ip6_spec; struct ethtool_ah_espip6_spec ah_ip6_spec; struct ethtool_ah_espip6_spec esp_ip6_spec; struct ethtool_usrip6_spec usr_ip6_spec; struct ethhdr ether_spec; __u8 hdata[52]; }; struct ethtool_flow_ext { __u8 padding[2]; unsigned char h_dest[6]; __be16 vlan_etype; __be16 vlan_tci; __be32 data[2]; }; struct ethtool_rx_flow_spec { __u32 flow_type; union ethtool_flow_union h_u; struct ethtool_flow_ext h_ext; union ethtool_flow_union m_u; struct ethtool_flow_ext m_ext; __u64 ring_cookie; __u32 location; }; struct ethtool_rxnfc { __u32 cmd; __u32 flow_type; __u64 data; struct ethtool_rx_flow_spec fs; union { __u32 rule_cnt; __u32 rss_context; }; __u32 rule_locs[0]; }; struct ethtool_flash { __u32 cmd; __u32 region; char data[128]; }; struct ethtool_dump { __u32 cmd; __u32 version; __u32 flag; __u32 len; __u8 data[0]; }; struct ethtool_ts_info { __u32 cmd; __u32 so_timestamping; __s32 phc_index; __u32 tx_types; __u32 tx_reserved[3]; __u32 rx_filters; __u32 rx_reserved[3]; }; struct ethtool_fecparam { __u32 cmd; __u32 active_fec; __u32 fec; __u32 reserved; }; struct ethtool_link_settings { __u32 cmd; __u32 speed; __u8 duplex; __u8 port; __u8 phy_address; __u8 autoneg; __u8 mdio_support; __u8 eth_tp_mdix; __u8 eth_tp_mdix_ctrl; __s8 link_mode_masks_nwords; __u8 transceiver; __u8 master_slave_cfg; __u8 master_slave_state; __u8 reserved1[1]; __u32 reserved[7]; __u32 link_mode_masks[0]; }; struct kernel_ethtool_ringparam { u32 rx_buf_len; }; struct ethtool_link_ext_state_info { enum ethtool_link_ext_state link_ext_state; union { enum ethtool_link_ext_substate_autoneg autoneg; enum ethtool_link_ext_substate_link_training link_training; enum ethtool_link_ext_substate_link_logical_mismatch link_logical_mismatch; enum ethtool_link_ext_substate_bad_signal_integrity bad_signal_integrity; enum ethtool_link_ext_substate_cable_issue cable_issue; enum ethtool_link_ext_substate_module module; u8 __link_ext_substate; }; }; struct ethtool_link_ksettings { struct ethtool_link_settings base; struct { long unsigned int supported[2]; long unsigned int advertising[2]; long unsigned int lp_advertising[2]; } link_modes; u32 lanes; }; struct kernel_ethtool_coalesce { u8 use_cqe_mode_tx; u8 use_cqe_mode_rx; }; struct ethtool_eth_mac_stats { u64 FramesTransmittedOK; u64 SingleCollisionFrames; u64 MultipleCollisionFrames; u64 FramesReceivedOK; u64 FrameCheckSequenceErrors; u64 AlignmentErrors; u64 OctetsTransmittedOK; u64 FramesWithDeferredXmissions; u64 LateCollisions; u64 FramesAbortedDueToXSColls; u64 FramesLostDueToIntMACXmitError; u64 CarrierSenseErrors; u64 OctetsReceivedOK; u64 FramesLostDueToIntMACRcvError; u64 MulticastFramesXmittedOK; u64 BroadcastFramesXmittedOK; u64 FramesWithExcessiveDeferral; u64 MulticastFramesReceivedOK; u64 BroadcastFramesReceivedOK; u64 InRangeLengthErrors; u64 OutOfRangeLengthField; u64 FrameTooLongErrors; }; struct ethtool_eth_phy_stats { u64 SymbolErrorDuringCarrier; }; struct ethtool_eth_ctrl_stats { u64 MACControlFramesTransmitted; u64 MACControlFramesReceived; u64 UnsupportedOpcodesReceived; }; struct ethtool_pause_stats { u64 tx_pause_frames; u64 rx_pause_frames; }; struct ethtool_fec_stat { u64 total; u64 lanes[8]; }; struct ethtool_fec_stats { struct ethtool_fec_stat corrected_blocks; struct ethtool_fec_stat uncorrectable_blocks; struct ethtool_fec_stat corrected_bits; }; struct ethtool_rmon_hist_range { u16 low; u16 high; }; struct ethtool_rmon_stats { u64 undersize_pkts; u64 oversize_pkts; u64 fragments; u64 jabbers; u64 hist[10]; u64 hist_tx[10]; }; struct ethtool_module_eeprom { u32 offset; u32 length; u8 page; u8 bank; u8 i2c_address; u8 *data; }; struct ethtool_module_power_mode_params { enum ethtool_module_power_mode_policy policy; enum ethtool_module_power_mode mode; }; struct flow_dissector_key_control { u16 thoff; u16 addr_type; u32 flags; }; struct flow_dissector_key_basic { __be16 n_proto; u8 ip_proto; u8 padding; }; struct flow_dissector { unsigned int used_keys; short unsigned int offset[28]; }; struct flow_keys_basic { struct flow_dissector_key_control control; struct flow_dissector_key_basic basic; }; enum { SKBFL_ZEROCOPY_ENABLE = 1, SKBFL_SHARED_FRAG = 2, SKBFL_PURE_ZEROCOPY = 4, }; struct mmpin { struct user_struct *user; unsigned int num_pg; }; struct ubuf_info { void (*callback)(struct sk_buff *, struct ubuf_info *, bool); union { struct { long unsigned int desc; void *ctx; }; struct { u32 id; u16 len; u16 zerocopy: 1; u32 bytelen; }; }; refcount_t refcnt; u8 flags; struct mmpin mmp; }; enum { SKB_GSO_TCPV4 = 1, SKB_GSO_DODGY = 2, SKB_GSO_TCP_ECN = 4, SKB_GSO_TCP_FIXEDID = 8, SKB_GSO_TCPV6 = 16, SKB_GSO_FCOE = 32, SKB_GSO_GRE = 64, SKB_GSO_GRE_CSUM = 128, SKB_GSO_IPXIP4 = 256, SKB_GSO_IPXIP6 = 512, SKB_GSO_UDP_TUNNEL = 1024, SKB_GSO_UDP_TUNNEL_CSUM = 2048, SKB_GSO_PARTIAL = 4096, SKB_GSO_TUNNEL_REMCSUM = 8192, SKB_GSO_SCTP = 16384, SKB_GSO_ESP = 32768, SKB_GSO_UDP = 65536, SKB_GSO_UDP_L4 = 131072, SKB_GSO_FRAGLIST = 262144, }; struct netdev_hw_addr { struct list_head list; struct rb_node node; unsigned char addr[32]; unsigned char type; bool global_use; int sync_cnt; int refcount; int synced; struct callback_head callback_head; }; enum netdev_state_t { __LINK_STATE_START = 0, __LINK_STATE_PRESENT = 1, __LINK_STATE_NOCARRIER = 2, __LINK_STATE_LINKWATCH_PENDING = 3, __LINK_STATE_DORMANT = 4, __LINK_STATE_TESTING = 5, }; struct gro_list { struct list_head list; int count; }; struct napi_struct { struct list_head poll_list; long unsigned int state; int weight; int defer_hard_irqs_count; long unsigned int gro_bitmask; int (*poll)(struct napi_struct *, int); struct net_device *dev; struct gro_list gro_hash[8]; struct sk_buff *skb; struct list_head rx_list; int rx_count; struct hrtimer timer; struct list_head dev_list; struct hlist_node napi_hash_node; unsigned int napi_id; struct task_struct *thread; }; enum gro_result { GRO_MERGED = 0, GRO_MERGED_FREE = 1, GRO_HELD = 2, GRO_NORMAL = 3, GRO_CONSUMED = 4, }; typedef enum gro_result gro_result_t; enum netdev_queue_state_t { __QUEUE_STATE_DRV_XOFF = 0, __QUEUE_STATE_STACK_XOFF = 1, __QUEUE_STATE_FROZEN = 2, }; struct rx_queue_attribute { struct attribute attr; ssize_t (*show)(struct netdev_rx_queue *, char *); ssize_t (*store)(struct netdev_rx_queue *, const char *, size_t); }; struct sd_flow_limit { u64 count; unsigned int num_buckets; unsigned int history_head; u16 history[128]; u8 buckets[0]; }; struct softnet_data { struct list_head poll_list; struct sk_buff_head process_queue; unsigned int processed; unsigned int time_squeeze; unsigned int received_rps; struct softnet_data *rps_ipi_list; struct sd_flow_limit *flow_limit; struct Qdisc *output_queue; struct Qdisc **output_queue_tailp; struct sk_buff *completion_queue; struct { u16 recursion; u8 more; } xmit; long: 32; long: 64; long: 64; long: 64; unsigned int input_queue_head; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; call_single_data_t csd; struct softnet_data *rps_ipi_next; unsigned int cpu; unsigned int input_queue_tail; unsigned int dropped; struct sk_buff_head input_pkt_queue; struct napi_struct backlog; long: 64; long: 64; long: 64; long: 64; long: 64; }; enum skb_free_reason { SKB_REASON_CONSUMED = 0, SKB_REASON_DROPPED = 1, }; enum ethtool_stringset { ETH_SS_TEST = 0, ETH_SS_STATS = 1, ETH_SS_PRIV_FLAGS = 2, ETH_SS_NTUPLE_FILTERS = 3, ETH_SS_FEATURES = 4, ETH_SS_RSS_HASH_FUNCS = 5, ETH_SS_TUNABLES = 6, ETH_SS_PHY_STATS = 7, ETH_SS_PHY_TUNABLES = 8, ETH_SS_LINK_MODES = 9, ETH_SS_MSG_CLASSES = 10, ETH_SS_WOL_MODES = 11, ETH_SS_SOF_TIMESTAMPING = 12, ETH_SS_TS_TX_TYPES = 13, ETH_SS_TS_RX_FILTERS = 14, ETH_SS_UDP_TUNNEL_TYPES = 15, ETH_SS_STATS_STD = 16, ETH_SS_STATS_ETH_PHY = 17, ETH_SS_STATS_ETH_MAC = 18, ETH_SS_STATS_ETH_CTRL = 19, ETH_SS_STATS_RMON = 20, ETH_SS_COUNT = 21, }; struct virtio_net_config { __u8 mac[6]; __virtio16 status; __virtio16 max_virtqueue_pairs; __virtio16 mtu; __le32 speed; __u8 duplex; __u8 rss_max_key_size; __le16 rss_max_indirection_table_length; __le32 supported_hash_types; }; struct virtio_net_hdr { __u8 flags; __u8 gso_type; __virtio16 hdr_len; __virtio16 gso_size; __virtio16 csum_start; __virtio16 csum_offset; }; struct virtio_net_hdr_mrg_rxbuf { struct virtio_net_hdr hdr; __virtio16 num_buffers; }; struct virtio_net_ctrl_hdr { __u8 class; __u8 cmd; }; typedef __u8 virtio_net_ctrl_ack; struct virtio_net_ctrl_mac { __virtio32 entries; __u8 macs[0]; }; struct virtio_net_ctrl_mq { __virtio16 virtqueue_pairs; }; struct failover_ops { int (*slave_pre_register)(struct net_device *, struct net_device *); int (*slave_register)(struct net_device *, struct net_device *); int (*slave_pre_unregister)(struct net_device *, struct net_device *); int (*slave_unregister)(struct net_device *, struct net_device *); int (*slave_link_change)(struct net_device *, struct net_device *); int (*slave_name_change)(struct net_device *, struct net_device *); rx_handler_result_t (*slave_handle_frame)(struct sk_buff **); }; struct failover { struct list_head list; struct net_device *failover_dev; netdevice_tracker dev_tracker; struct failover_ops *ops; }; struct ewma_pkt_len { long unsigned int internal; }; struct virtnet_stat_desc { char desc[32]; size_t offset; }; struct virtnet_sq_stats { struct u64_stats_sync syncp; u64 packets; u64 bytes; u64 xdp_tx; u64 xdp_tx_drops; u64 kicks; u64 tx_timeouts; }; struct virtnet_rq_stats { struct u64_stats_sync syncp; u64 packets; u64 bytes; u64 drops; u64 xdp_packets; u64 xdp_tx; u64 xdp_redirects; u64 xdp_drops; u64 kicks; }; struct send_queue { struct virtqueue *vq; struct scatterlist sg[19]; char name[40]; struct virtnet_sq_stats stats; struct napi_struct napi; }; struct receive_queue { struct virtqueue *vq; struct napi_struct napi; struct bpf_prog *xdp_prog; struct virtnet_rq_stats stats; struct page *pages; struct ewma_pkt_len mrg_avg_pkt_len; struct page_frag alloc_frag; struct scatterlist sg[19]; unsigned int min_buf_len; char name[40]; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; struct xdp_rxq_info xdp_rxq; }; struct control_buf { struct virtio_net_ctrl_hdr hdr; virtio_net_ctrl_ack status; struct virtio_net_ctrl_mq mq; u8 promisc; u8 allmulti; __virtio16 vid; __virtio64 offloads; }; struct virtnet_info { struct virtio_device *vdev; struct virtqueue *cvq; struct net_device *dev; struct send_queue *sq; struct receive_queue *rq; unsigned int status; u16 max_queue_pairs; u16 curr_queue_pairs; u16 xdp_queue_pairs; bool xdp_enabled; bool big_packets; bool mergeable_rx_bufs; bool has_cvq; bool any_header_sg; u8 hdr_len; struct delayed_work refill; struct work_struct config_work; bool affinity_hint_set; struct hlist_node node; struct hlist_node node_dead; struct control_buf *ctrl; u8 duplex; u32 speed; long unsigned int guest_offloads; long unsigned int guest_offloads_capable; struct failover *failover; }; struct netdev_lag_lower_state_info { u8 link_up: 1; u8 tx_enabled: 1; }; struct net_failover_info { struct net_device *primary_dev; struct net_device *standby_dev; struct rtnl_link_stats64 primary_stats; struct rtnl_link_stats64 standby_stats; struct rtnl_link_stats64 failover_stats; spinlock_t stats_lock; }; struct trace_event_raw_rtc_time_alarm_class { struct trace_entry ent; time64_t secs; int err; char __data[0]; }; struct trace_event_raw_rtc_irq_set_freq { struct trace_entry ent; int freq; int err; char __data[0]; }; struct trace_event_raw_rtc_irq_set_state { struct trace_entry ent; int enabled; int err; char __data[0]; }; struct trace_event_raw_rtc_alarm_irq_enable { struct trace_entry ent; unsigned int enabled; int err; char __data[0]; }; struct trace_event_raw_rtc_offset_class { struct trace_entry ent; long int offset; int err; char __data[0]; }; struct trace_event_raw_rtc_timer_class { struct trace_entry ent; struct rtc_timer *timer; ktime_t expires; ktime_t period; char __data[0]; }; struct trace_event_data_offsets_rtc_time_alarm_class {}; struct trace_event_data_offsets_rtc_irq_set_freq {}; struct trace_event_data_offsets_rtc_irq_set_state {}; struct trace_event_data_offsets_rtc_alarm_irq_enable {}; struct trace_event_data_offsets_rtc_offset_class {}; struct trace_event_data_offsets_rtc_timer_class {}; typedef void (*btf_trace_rtc_set_time)(void *, time64_t, int); typedef void (*btf_trace_rtc_read_time)(void *, time64_t, int); typedef void (*btf_trace_rtc_set_alarm)(void *, time64_t, int); typedef void (*btf_trace_rtc_read_alarm)(void *, time64_t, int); typedef void (*btf_trace_rtc_irq_set_freq)(void *, int, int); typedef void (*btf_trace_rtc_irq_set_state)(void *, int, int); typedef void (*btf_trace_rtc_alarm_irq_enable)(void *, unsigned int, int); typedef void (*btf_trace_rtc_set_offset)(void *, long int, int); typedef void (*btf_trace_rtc_read_offset)(void *, long int, int); typedef void (*btf_trace_rtc_timer_enqueue)(void *, struct rtc_timer *); typedef void (*btf_trace_rtc_timer_dequeue)(void *, struct rtc_timer *); typedef void (*btf_trace_rtc_timer_fired)(void *, struct rtc_timer *); enum { none = 0, day = 1, month = 2, year = 3, }; typedef int (*nvmem_reg_read_t)(void *, unsigned int, void *, size_t); typedef int (*nvmem_reg_write_t)(void *, unsigned int, void *, size_t); typedef int (*nvmem_cell_post_process_t)(void *, const char *, unsigned int, void *, size_t); enum nvmem_type { NVMEM_TYPE_UNKNOWN = 0, NVMEM_TYPE_EEPROM = 1, NVMEM_TYPE_OTP = 2, NVMEM_TYPE_BATTERY_BACKED = 3, NVMEM_TYPE_FRAM = 4, }; struct nvmem_keepout { unsigned int start; unsigned int end; unsigned char value; }; struct nvmem_cell_info; struct nvmem_config { struct device *dev; const char *name; int id; struct module *owner; struct gpio_desc *wp_gpio; const struct nvmem_cell_info *cells; int ncells; const struct nvmem_keepout *keepout; unsigned int nkeepout; enum nvmem_type type; bool read_only; bool root_only; struct device_node *of_node; bool no_of_node; nvmem_reg_read_t reg_read; nvmem_reg_write_t reg_write; nvmem_cell_post_process_t cell_post_process; int size; int word_size; int stride; void *priv; bool compat; struct device *base_dev; }; struct cmos_rtc_board_info { void (*wake_on)(struct device *); void (*wake_off)(struct device *); u32 flags; int address_space; u8 rtc_day_alarm; u8 rtc_mon_alarm; u8 rtc_century; }; struct cmos_rtc { struct rtc_device *rtc; struct device *dev; int irq; struct resource *iomem; time64_t alarm_expires; void (*wake_on)(struct device *); void (*wake_off)(struct device *); u8 enabled_wake; u8 suspend_ctrl; u8 day_alrm; u8 mon_alrm; u8 century; struct rtc_wkalrm saved_wkalrm; }; struct pps_ktime { __s64 sec; __s32 nsec; __u32 flags; }; struct pps_kinfo { __u32 assert_sequence; __u32 clear_sequence; struct pps_ktime assert_tu; struct pps_ktime clear_tu; int current_mode; }; struct pps_kparams { int api_version; int mode; struct pps_ktime assert_off_tu; struct pps_ktime clear_off_tu; }; struct pps_fdata { struct pps_kinfo info; struct pps_ktime timeout; }; struct pps_bind_args { int tsformat; int edge; int consumer; }; struct pps_device; struct pps_source_info { char name[32]; char path[32]; int mode; void (*echo)(struct pps_device *, int, void *); struct module *owner; struct device *dev; }; struct pps_device { struct pps_source_info info; struct pps_kparams params; __u32 assert_sequence; __u32 clear_sequence; struct pps_ktime assert_tu; struct pps_ktime clear_tu; int current_mode; unsigned int last_ev; wait_queue_head_t queue; unsigned int id; const void *lookup_cookie; struct cdev cdev; struct device *dev; struct fasync_struct *async_queue; spinlock_t lock; }; struct pps_event_time { struct timespec64 ts_real; }; struct ptp_clock_time { __s64 sec; __u32 nsec; __u32 reserved; }; struct ptp_extts_request { unsigned int index; unsigned int flags; unsigned int rsv[2]; }; struct ptp_perout_request { union { struct ptp_clock_time start; struct ptp_clock_time phase; }; struct ptp_clock_time period; unsigned int index; unsigned int flags; union { struct ptp_clock_time on; unsigned int rsv[4]; }; }; enum ptp_pin_function { PTP_PF_NONE = 0, PTP_PF_EXTTS = 1, PTP_PF_PEROUT = 2, PTP_PF_PHYSYNC = 3, }; struct ptp_pin_desc { char name[64]; unsigned int index; unsigned int func; unsigned int chan; unsigned int rsv[5]; }; struct ptp_extts_event { struct ptp_clock_time t; unsigned int index; unsigned int flags; unsigned int rsv[2]; }; struct ptp_clock_request { enum { PTP_CLK_REQ_EXTTS = 0, PTP_CLK_REQ_PEROUT = 1, PTP_CLK_REQ_PPS = 2, } type; union { struct ptp_extts_request extts; struct ptp_perout_request perout; }; }; struct ptp_system_timestamp { struct timespec64 pre_ts; struct timespec64 post_ts; }; struct ptp_clock_info { struct module *owner; char name[32]; s32 max_adj; int n_alarm; int n_ext_ts; int n_per_out; int n_pins; int pps; struct ptp_pin_desc *pin_config; int (*adjfine)(struct ptp_clock_info *, long int); int (*adjfreq)(struct ptp_clock_info *, s32); int (*adjphase)(struct ptp_clock_info *, s32); int (*adjtime)(struct ptp_clock_info *, s64); int (*gettime64)(struct ptp_clock_info *, struct timespec64 *); int (*gettimex64)(struct ptp_clock_info *, struct timespec64 *, struct ptp_system_timestamp *); int (*getcrosststamp)(struct ptp_clock_info *, struct system_device_crosststamp *); int (*settime64)(struct ptp_clock_info *, const struct timespec64 *); int (*enable)(struct ptp_clock_info *, struct ptp_clock_request *, int); int (*verify)(struct ptp_clock_info *, unsigned int, enum ptp_pin_function, unsigned int); long int (*do_aux_work)(struct ptp_clock_info *); }; enum ptp_clock_events { PTP_CLOCK_ALARM = 0, PTP_CLOCK_EXTTS = 1, PTP_CLOCK_PPS = 2, PTP_CLOCK_PPSUSR = 3, }; struct ptp_clock_event { int type; int index; union { u64 timestamp; struct pps_event_time pps_times; }; }; struct timestamp_event_queue { struct ptp_extts_event buf[128]; int head; int tail; spinlock_t lock; }; struct ptp_clock { struct posix_clock clock; struct device dev; struct ptp_clock_info *info; dev_t devid; int index; struct pps_device *pps_source; long int dialed_frequency; struct timestamp_event_queue tsevq; struct mutex tsevq_mux; struct mutex pincfg_mux; wait_queue_head_t tsev_wq; int defunct; struct device_attribute *pin_dev_attr; struct attribute **pin_attr; struct attribute_group pin_attr_group; const struct attribute_group *pin_attr_groups[2]; struct kthread_worker *kworker; struct kthread_delayed_work aux_work; unsigned int max_vclocks; unsigned int n_vclocks; int *vclock_index; struct mutex n_vclocks_mux; bool is_virtual_clock; }; struct ptp_clock_caps { int max_adj; int n_alarm; int n_ext_ts; int n_per_out; int pps; int n_pins; int cross_timestamping; int adjust_phase; int rsv[12]; }; struct ptp_sys_offset { unsigned int n_samples; unsigned int rsv[3]; struct ptp_clock_time ts[51]; }; struct ptp_sys_offset_extended { unsigned int n_samples; unsigned int rsv[3]; struct ptp_clock_time ts[75]; }; struct ptp_sys_offset_precise { struct ptp_clock_time device; struct ptp_clock_time sys_realtime; struct ptp_clock_time sys_monoraw; unsigned int rsv[4]; }; struct ptp_vclock { struct ptp_clock *pclock; struct ptp_clock_info info; struct ptp_clock *clock; struct cyclecounter cc; struct timecounter tc; spinlock_t lock; }; struct kvm_clock_pairing { __s64 sec; __s64 nsec; __u64 tsc; __u32 flags; __u32 pad[9]; }; struct ptp_clock___2; struct kvm_ptp_clock { struct ptp_clock___2 *ptp_clock; struct ptp_clock_info caps; }; enum thermal_device_mode { THERMAL_DEVICE_DISABLED = 0, THERMAL_DEVICE_ENABLED = 1, }; enum thermal_trip_type { THERMAL_TRIP_ACTIVE = 0, THERMAL_TRIP_PASSIVE = 1, THERMAL_TRIP_HOT = 2, THERMAL_TRIP_CRITICAL = 3, }; enum thermal_trend { THERMAL_TREND_STABLE = 0, THERMAL_TREND_RAISING = 1, THERMAL_TREND_DROPPING = 2, THERMAL_TREND_RAISE_FULL = 3, THERMAL_TREND_DROP_FULL = 4, }; enum thermal_notify_event { THERMAL_EVENT_UNSPECIFIED = 0, THERMAL_EVENT_TEMP_SAMPLE = 1, THERMAL_TRIP_VIOLATED = 2, THERMAL_TRIP_CHANGED = 3, THERMAL_DEVICE_DOWN = 4, THERMAL_DEVICE_UP = 5, THERMAL_DEVICE_POWER_CAPABILITY_CHANGED = 6, THERMAL_TABLE_CHANGED = 7, THERMAL_EVENT_KEEP_ALIVE = 8, }; struct thermal_zone_device; struct thermal_zone_device_ops { int (*bind)(struct thermal_zone_device *, struct thermal_cooling_device *); int (*unbind)(struct thermal_zone_device *, struct thermal_cooling_device *); int (*get_temp)(struct thermal_zone_device *, int *); int (*set_trips)(struct thermal_zone_device *, int, int); int (*change_mode)(struct thermal_zone_device *, enum thermal_device_mode); int (*get_trip_type)(struct thermal_zone_device *, int, enum thermal_trip_type *); int (*get_trip_temp)(struct thermal_zone_device *, int, int *); int (*set_trip_temp)(struct thermal_zone_device *, int, int); int (*get_trip_hyst)(struct thermal_zone_device *, int, int *); int (*set_trip_hyst)(struct thermal_zone_device *, int, int); int (*get_crit_temp)(struct thermal_zone_device *, int *); int (*set_emul_temp)(struct thermal_zone_device *, int); int (*get_trend)(struct thermal_zone_device *, int, enum thermal_trend *); void (*hot)(struct thermal_zone_device *); void (*critical)(struct thermal_zone_device *); }; struct thermal_attr; struct thermal_zone_params; struct thermal_governor; struct thermal_zone_device { int id; char type[20]; struct device device; struct attribute_group trips_attribute_group; struct thermal_attr *trip_temp_attrs; struct thermal_attr *trip_type_attrs; struct thermal_attr *trip_hyst_attrs; enum thermal_device_mode mode; void *devdata; int trips; long unsigned int trips_disabled; long unsigned int passive_delay_jiffies; long unsigned int polling_delay_jiffies; int temperature; int last_temperature; int emul_temperature; int passive; int prev_low_trip; int prev_high_trip; atomic_t need_update; struct thermal_zone_device_ops *ops; struct thermal_zone_params *tzp; struct thermal_governor *governor; void *governor_data; struct list_head thermal_instances; struct ida ida; struct mutex lock; struct list_head node; struct delayed_work poll_queue; enum thermal_notify_event notify_event; }; struct thermal_attr { struct device_attribute attr; char name[20]; }; struct thermal_bind_params; struct thermal_zone_params { char governor_name[20]; bool no_hwmon; int num_tbps; struct thermal_bind_params *tbp; u32 sustainable_power; s32 k_po; s32 k_pu; s32 k_i; s32 k_d; s32 integral_cutoff; int slope; int offset; }; struct thermal_governor { char name[20]; int (*bind_to_tz)(struct thermal_zone_device *); void (*unbind_from_tz)(struct thermal_zone_device *); int (*throttle)(struct thermal_zone_device *, int); struct list_head governor_list; }; struct thermal_bind_params { struct thermal_cooling_device *cdev; int weight; int trip_mask; long unsigned int *binding_limits; int (*match)(struct thermal_zone_device *, struct thermal_cooling_device *); }; struct trace_event_raw_thermal_temperature { struct trace_entry ent; u32 __data_loc_thermal_zone; int id; int temp_prev; int temp; char __data[0]; }; struct trace_event_raw_cdev_update { struct trace_entry ent; u32 __data_loc_type; long unsigned int target; char __data[0]; }; struct trace_event_raw_thermal_zone_trip { struct trace_entry ent; u32 __data_loc_thermal_zone; int id; int trip; enum thermal_trip_type trip_type; char __data[0]; }; struct trace_event_data_offsets_thermal_temperature { u32 thermal_zone; }; struct trace_event_data_offsets_cdev_update { u32 type; }; struct trace_event_data_offsets_thermal_zone_trip { u32 thermal_zone; }; typedef void (*btf_trace_thermal_temperature)(void *, struct thermal_zone_device *); typedef void (*btf_trace_cdev_update)(void *, struct thermal_cooling_device *, long unsigned int); typedef void (*btf_trace_thermal_zone_trip)(void *, struct thermal_zone_device *, int, enum thermal_trip_type); struct thermal_instance { int id; char name[20]; struct thermal_zone_device *tz; struct thermal_cooling_device *cdev; int trip; bool initialized; long unsigned int upper; long unsigned int lower; long unsigned int target; char attr_name[20]; struct device_attribute attr; char weight_attr_name[20]; struct device_attribute weight_attr; struct list_head tz_node; struct list_head cdev_node; unsigned int weight; }; struct _thermal_state { u64 next_check; u64 last_interrupt_time; struct delayed_work therm_work; long unsigned int count; long unsigned int last_count; long unsigned int max_time_ms; long unsigned int total_time_ms; bool rate_control_active; bool new_event; u8 level; u8 sample_index; u8 sample_count; u8 average; u8 baseline_temp; u8 temp_samples[3]; }; struct thermal_state { struct _thermal_state core_throttle; struct _thermal_state core_power_limit; struct _thermal_state package_throttle; struct _thermal_state package_power_limit; struct _thermal_state core_thresh0; struct _thermal_state core_thresh1; struct _thermal_state pkg_thresh0; struct _thermal_state pkg_thresh1; }; struct watchdog_info { __u32 options; __u32 firmware_version; __u8 identity[32]; }; struct watchdog_device; struct watchdog_ops { struct module *owner; int (*start)(struct watchdog_device *); int (*stop)(struct watchdog_device *); int (*ping)(struct watchdog_device *); unsigned int (*status)(struct watchdog_device *); int (*set_timeout)(struct watchdog_device *, unsigned int); int (*set_pretimeout)(struct watchdog_device *, unsigned int); unsigned int (*get_timeleft)(struct watchdog_device *); int (*restart)(struct watchdog_device *, long unsigned int, void *); long int (*ioctl)(struct watchdog_device *, unsigned int, long unsigned int); }; struct watchdog_governor; struct watchdog_core_data; struct watchdog_device { int id; struct device *parent; const struct attribute_group **groups; const struct watchdog_info *info; const struct watchdog_ops *ops; const struct watchdog_governor *gov; unsigned int bootstatus; unsigned int timeout; unsigned int pretimeout; unsigned int min_timeout; unsigned int max_timeout; unsigned int min_hw_heartbeat_ms; unsigned int max_hw_heartbeat_ms; struct notifier_block reboot_nb; struct notifier_block restart_nb; struct notifier_block pm_nb; void *driver_data; struct watchdog_core_data *wd_data; long unsigned int status; struct list_head deferred; }; struct watchdog_governor { const char name[20]; void (*pretimeout)(struct watchdog_device *); }; struct watchdog_core_data { struct device dev; struct cdev cdev; struct watchdog_device *wdd; struct mutex lock; ktime_t last_keepalive; ktime_t last_hw_keepalive; ktime_t open_deadline; struct hrtimer timer; struct kthread_work work; long unsigned int status; }; struct esb_dev { struct watchdog_device wdd; void *base; struct pci_dev *pdev; }; struct cpuidle_governor { char name[16]; struct list_head governor_list; unsigned int rating; int (*enable)(struct cpuidle_driver *, struct cpuidle_device *); void (*disable)(struct cpuidle_driver *, struct cpuidle_device *); int (*select)(struct cpuidle_driver *, struct cpuidle_device *, bool *); void (*reflect)(struct cpuidle_device *, int); }; struct cpuidle_state_kobj { struct cpuidle_state *state; struct cpuidle_state_usage *state_usage; struct completion kobj_unregister; struct kobject kobj; struct cpuidle_device *device; }; struct cpuidle_device_kobj { struct cpuidle_device *dev; struct completion kobj_unregister; struct kobject kobj; }; struct cpuidle_attr { struct attribute attr; ssize_t (*show)(struct cpuidle_device *, char *); ssize_t (*store)(struct cpuidle_device *, const char *, size_t); }; struct cpuidle_state_attr { struct attribute attr; ssize_t (*show)(struct cpuidle_state *, struct cpuidle_state_usage *, char *); ssize_t (*store)(struct cpuidle_state *, struct cpuidle_state_usage *, const char *, size_t); }; struct ladder_device_state { struct { u32 promotion_count; u32 demotion_count; u64 promotion_time_ns; u64 demotion_time_ns; } threshold; struct { int promotion_count; int demotion_count; } stats; }; struct ladder_device { struct ladder_device_state states[10]; }; struct menu_device { int needs_update; int tick_wakeup; u64 next_timer_ns; unsigned int bucket; unsigned int correction_factor[12]; unsigned int intervals[8]; int interval_ptr; }; enum dmi_entry_type { DMI_ENTRY_BIOS = 0, DMI_ENTRY_SYSTEM = 1, DMI_ENTRY_BASEBOARD = 2, DMI_ENTRY_CHASSIS = 3, DMI_ENTRY_PROCESSOR = 4, DMI_ENTRY_MEM_CONTROLLER = 5, DMI_ENTRY_MEM_MODULE = 6, DMI_ENTRY_CACHE = 7, DMI_ENTRY_PORT_CONNECTOR = 8, DMI_ENTRY_SYSTEM_SLOT = 9, DMI_ENTRY_ONBOARD_DEVICE = 10, DMI_ENTRY_OEMSTRINGS = 11, DMI_ENTRY_SYSCONF = 12, DMI_ENTRY_BIOS_LANG = 13, DMI_ENTRY_GROUP_ASSOC = 14, DMI_ENTRY_SYSTEM_EVENT_LOG = 15, DMI_ENTRY_PHYS_MEM_ARRAY = 16, DMI_ENTRY_MEM_DEVICE = 17, DMI_ENTRY_32_MEM_ERROR = 18, DMI_ENTRY_MEM_ARRAY_MAPPED_ADDR = 19, DMI_ENTRY_MEM_DEV_MAPPED_ADDR = 20, DMI_ENTRY_BUILTIN_POINTING_DEV = 21, DMI_ENTRY_PORTABLE_BATTERY = 22, DMI_ENTRY_SYSTEM_RESET = 23, DMI_ENTRY_HW_SECURITY = 24, DMI_ENTRY_SYSTEM_POWER_CONTROLS = 25, DMI_ENTRY_VOLTAGE_PROBE = 26, DMI_ENTRY_COOLING_DEV = 27, DMI_ENTRY_TEMP_PROBE = 28, DMI_ENTRY_ELECTRICAL_CURRENT_PROBE = 29, DMI_ENTRY_OOB_REMOTE_ACCESS = 30, DMI_ENTRY_BIS_ENTRY = 31, DMI_ENTRY_SYSTEM_BOOT = 32, DMI_ENTRY_MGMT_DEV = 33, DMI_ENTRY_MGMT_DEV_COMPONENT = 34, DMI_ENTRY_MGMT_DEV_THRES = 35, DMI_ENTRY_MEM_CHANNEL = 36, DMI_ENTRY_IPMI_DEV = 37, DMI_ENTRY_SYS_POWER_SUPPLY = 38, DMI_ENTRY_ADDITIONAL = 39, DMI_ENTRY_ONBOARD_DEV_EXT = 40, DMI_ENTRY_MGMT_CONTROLLER_HOST = 41, DMI_ENTRY_INACTIVE = 126, DMI_ENTRY_END_OF_TABLE = 127, }; struct dmi_header { u8 type; u8 length; u16 handle; }; struct dmi_memdev_info { const char *device; const char *bank; u64 size; u16 handle; u8 type; }; struct dmi_device_attribute { struct device_attribute dev_attr; int field; }; struct mafield { const char *prefix; int field; }; struct firmware_map_entry { u64 start; u64 end; const char *type; struct list_head list; struct kobject kobj; }; struct memmap_attribute { struct attribute attr; ssize_t (*show)(struct firmware_map_entry *, char *); }; struct fw_cfg_file { __be32 size; __be16 select; __u16 reserved; char name[56]; }; struct fw_cfg_sysfs_entry { struct kobject kobj; u32 size; u16 select; char name[56]; struct list_head list; }; struct fw_cfg_sysfs_attribute { struct attribute attr; ssize_t (*show)(struct fw_cfg_sysfs_entry *, char *); }; struct simplefb_platform_data { u32 width; u32 height; u32 stride; const char *format; }; struct virtio_crypto_ctrl_header { __le32 opcode; __le32 algo; __le32 flag; __le32 queue_id; }; struct virtio_crypto_cipher_session_para { __le32 algo; __le32 keylen; __le32 op; __le32 padding; }; struct virtio_crypto_session_input { __le64 session_id; __le32 status; __le32 padding; }; struct virtio_crypto_cipher_session_req { struct virtio_crypto_cipher_session_para para; __u8 padding[32]; }; struct virtio_crypto_hash_session_para { __le32 algo; __le32 hash_result_len; __u8 padding[8]; }; struct virtio_crypto_hash_create_session_req { struct virtio_crypto_hash_session_para para; __u8 padding[40]; }; struct virtio_crypto_mac_session_para { __le32 algo; __le32 hash_result_len; __le32 auth_key_len; __le32 padding; }; struct virtio_crypto_mac_create_session_req { struct virtio_crypto_mac_session_para para; __u8 padding[40]; }; struct virtio_crypto_aead_session_para { __le32 algo; __le32 key_len; __le32 hash_result_len; __le32 aad_len; __le32 op; __le32 padding; }; struct virtio_crypto_aead_create_session_req { struct virtio_crypto_aead_session_para para; __u8 padding[32]; }; struct virtio_crypto_alg_chain_session_para { __le32 alg_chain_order; __le32 hash_mode; struct virtio_crypto_cipher_session_para cipher_param; union { struct virtio_crypto_hash_session_para hash_param; struct virtio_crypto_mac_session_para mac_param; __u8 padding[16]; } u; __le32 aad_len; __le32 padding; }; struct virtio_crypto_alg_chain_session_req { struct virtio_crypto_alg_chain_session_para para; }; struct virtio_crypto_sym_create_session_req { union { struct virtio_crypto_cipher_session_req cipher; struct virtio_crypto_alg_chain_session_req chain; __u8 padding[48]; } u; __le32 op_type; __le32 padding; }; struct virtio_crypto_destroy_session_req { __le64 session_id; __u8 padding[48]; }; struct virtio_crypto_op_ctrl_req { struct virtio_crypto_ctrl_header header; union { struct virtio_crypto_sym_create_session_req sym_create_session; struct virtio_crypto_hash_create_session_req hash_create_session; struct virtio_crypto_mac_create_session_req mac_create_session; struct virtio_crypto_aead_create_session_req aead_create_session; struct virtio_crypto_destroy_session_req destroy_session; __u8 padding[56]; } u; }; struct virtio_crypto_op_header { __le32 opcode; __le32 algo; __le64 session_id; __le32 flag; __le32 padding; }; struct virtio_crypto_cipher_para { __le32 iv_len; __le32 src_data_len; __le32 dst_data_len; __le32 padding; }; struct virtio_crypto_hash_para { __le32 src_data_len; __le32 hash_result_len; }; struct virtio_crypto_mac_para { struct virtio_crypto_hash_para hash; }; struct virtio_crypto_aead_para { __le32 iv_len; __le32 aad_len; __le32 src_data_len; __le32 dst_data_len; }; struct virtio_crypto_cipher_data_req { struct virtio_crypto_cipher_para para; __u8 padding[24]; }; struct virtio_crypto_hash_data_req { struct virtio_crypto_hash_para para; __u8 padding[40]; }; struct virtio_crypto_mac_data_req { struct virtio_crypto_mac_para para; __u8 padding[40]; }; struct virtio_crypto_alg_chain_data_para { __le32 iv_len; __le32 src_data_len; __le32 dst_data_len; __le32 cipher_start_src_offset; __le32 len_to_cipher; __le32 hash_start_src_offset; __le32 len_to_hash; __le32 aad_len; __le32 hash_result_len; __le32 reserved; }; struct virtio_crypto_alg_chain_data_req { struct virtio_crypto_alg_chain_data_para para; }; struct virtio_crypto_sym_data_req { union { struct virtio_crypto_cipher_data_req cipher; struct virtio_crypto_alg_chain_data_req chain; __u8 padding[40]; } u; __le32 op_type; __le32 padding; }; struct virtio_crypto_aead_data_req { struct virtio_crypto_aead_para para; __u8 padding[32]; }; struct virtio_crypto_op_data_req { struct virtio_crypto_op_header header; union { struct virtio_crypto_sym_data_req sym_req; struct virtio_crypto_hash_data_req hash_req; struct virtio_crypto_mac_data_req mac_req; struct virtio_crypto_aead_data_req aead_req; __u8 padding[48]; } u; }; struct virtio_crypto_inhdr { __u8 status; }; struct data_queue { struct virtqueue *vq; spinlock_t lock; char name[32]; struct crypto_engine *engine; }; struct virtio_crypto { struct virtio_device *vdev; struct virtqueue *ctrl_vq; struct data_queue *data_vq; spinlock_t ctrl_lock; u32 max_data_queues; u32 curr_queue; u32 crypto_services; u32 cipher_algo_l; u32 cipher_algo_h; u32 hash_algo; u32 mac_algo_l; u32 mac_algo_h; u32 aead_algo; u32 max_cipher_key_len; u32 max_auth_key_len; u64 max_size; struct virtio_crypto_op_ctrl_req ctrl; struct virtio_crypto_session_input input; struct virtio_crypto_inhdr ctrl_status; long unsigned int status; atomic_t ref_count; struct list_head list; struct module *owner; uint8_t dev_id; bool affinity_hint_set; }; struct virtio_crypto_sym_session_info { __u64 session_id; }; struct virtio_crypto_request; typedef void (*virtio_crypto_data_callback)(struct virtio_crypto_request *, int); struct virtio_crypto_request { uint8_t status; struct virtio_crypto_op_data_req *req_data; struct scatterlist **sgs; struct data_queue *dataq; virtio_crypto_data_callback alg_cb; }; struct virtio_crypto_skcipher_ctx { struct crypto_engine_ctx enginectx; struct virtio_crypto *vcrypto; struct crypto_skcipher *tfm; struct virtio_crypto_sym_session_info enc_sess_info; struct virtio_crypto_sym_session_info dec_sess_info; }; struct virtio_crypto_sym_request { struct virtio_crypto_request base; uint32_t type; struct virtio_crypto_skcipher_ctx *skcipher_ctx; struct skcipher_request *skcipher_req; uint8_t *iv; bool encrypt; }; struct virtio_crypto_algo { uint32_t algonum; uint32_t service; unsigned int active_devs; struct skcipher_alg algo; }; struct virtio_crypto_config { __le32 status; __le32 max_dataqueues; __le32 crypto_services; __le32 cipher_algo_l; __le32 cipher_algo_h; __le32 hash_algo; __le32 mac_algo_l; __le32 mac_algo_h; __le32 aead_algo; __le32 max_cipher_key_len; __le32 max_auth_key_len; __le32 reserve; __le64 max_size; }; struct pmc_bit_map { const char *name; u32 bit_mask; }; struct pmc_reg_map { const struct pmc_bit_map *d3_sts_0; const struct pmc_bit_map *d3_sts_1; const struct pmc_bit_map *func_dis; const struct pmc_bit_map *func_dis_2; const struct pmc_bit_map *pss; }; struct pmc_data { const struct pmc_reg_map *map; const struct pmc_clk *clks; }; struct pmc_dev { u32 base_addr; void *regmap; const struct pmc_reg_map *map; struct dentry *dbgfs_dir; bool init; }; struct net_device_devres { struct net_device *ndev; }; struct __kernel_old_timespec { __kernel_old_time_t tv_sec; long int tv_nsec; }; struct __kernel_sock_timeval { __s64 tv_sec; __s64 tv_usec; }; struct user_msghdr { void *msg_name; int msg_namelen; struct iovec *msg_iov; __kernel_size_t msg_iovlen; void *msg_control; __kernel_size_t msg_controllen; unsigned int msg_flags; }; struct mmsghdr { struct user_msghdr msg_hdr; unsigned int msg_len; }; struct scm_timestamping_internal { struct timespec64 ts[3]; }; struct ifconf { int ifc_len; union { char *ifcu_buf; struct ifreq *ifcu_req; } ifc_ifcu; }; typedef s32 compat_int_t; typedef u32 compat_uint_t; typedef u32 compat_ulong_t; typedef u32 compat_caddr_t; struct compat_ifmap { compat_ulong_t mem_start; compat_ulong_t mem_end; short unsigned int base_addr; unsigned char irq; unsigned char dma; unsigned char port; }; struct compat_if_settings { unsigned int type; unsigned int size; compat_uptr_t ifs_ifsu; }; struct compat_ifreq { union { char ifrn_name[16]; } ifr_ifrn; union { struct sockaddr ifru_addr; struct sockaddr ifru_dstaddr; struct sockaddr ifru_broadaddr; struct sockaddr ifru_netmask; struct sockaddr ifru_hwaddr; short int ifru_flags; compat_int_t ifru_ivalue; compat_int_t ifru_mtu; struct compat_ifmap ifru_map; char ifru_slave[16]; char ifru_newname[16]; compat_caddr_t ifru_data; struct compat_if_settings ifru_settings; } ifr_ifru; }; enum sock_shutdown_cmd { SHUT_RD = 0, SHUT_WR = 1, SHUT_RDWR = 2, }; struct flowi_tunnel { __be64 tun_id; }; struct flowi_common { int flowic_oif; int flowic_iif; __u32 flowic_mark; __u8 flowic_tos; __u8 flowic_scope; __u8 flowic_proto; __u8 flowic_flags; __u32 flowic_secid; kuid_t flowic_uid; struct flowi_tunnel flowic_tun_key; __u32 flowic_multipath_hash; }; union flowi_uli { struct { __be16 dport; __be16 sport; } ports; struct { __u8 type; __u8 code; } icmpt; struct { __le16 dport; __le16 sport; } dnports; __be32 gre_key; struct { __u8 type; } mht; }; struct flowi4 { struct flowi_common __fl_common; __be32 saddr; __be32 daddr; union flowi_uli uli; }; struct flowi6 { struct flowi_common __fl_common; struct in6_addr daddr; struct in6_addr saddr; __be32 flowlabel; union flowi_uli uli; __u32 mp_hash; }; struct flowidn { struct flowi_common __fl_common; __le16 daddr; __le16 saddr; union flowi_uli uli; }; struct flowi { union { struct flowi_common __fl_common; struct flowi4 ip4; struct flowi6 ip6; struct flowidn dn; } u; }; struct compat_msghdr { compat_uptr_t msg_name; compat_int_t msg_namelen; compat_uptr_t msg_iov; compat_size_t msg_iovlen; compat_uptr_t msg_control; compat_size_t msg_controllen; compat_uint_t msg_flags; }; struct compat_mmsghdr { struct compat_msghdr msg_hdr; compat_uint_t msg_len; }; enum { SOF_TIMESTAMPING_TX_HARDWARE = 1, SOF_TIMESTAMPING_TX_SOFTWARE = 2, SOF_TIMESTAMPING_RX_HARDWARE = 4, SOF_TIMESTAMPING_RX_SOFTWARE = 8, SOF_TIMESTAMPING_SOFTWARE = 16, SOF_TIMESTAMPING_SYS_HARDWARE = 32, SOF_TIMESTAMPING_RAW_HARDWARE = 64, SOF_TIMESTAMPING_OPT_ID = 128, SOF_TIMESTAMPING_TX_SCHED = 256, SOF_TIMESTAMPING_TX_ACK = 512, SOF_TIMESTAMPING_OPT_CMSG = 1024, SOF_TIMESTAMPING_OPT_TSONLY = 2048, SOF_TIMESTAMPING_OPT_STATS = 4096, SOF_TIMESTAMPING_OPT_PKTINFO = 8192, SOF_TIMESTAMPING_OPT_TX_SWHW = 16384, SOF_TIMESTAMPING_BIND_PHC = 32768, SOF_TIMESTAMPING_LAST = 32768, SOF_TIMESTAMPING_MASK = 65535, }; struct scm_ts_pktinfo { __u32 if_index; __u32 pkt_length; __u32 reserved[2]; }; struct socket_alloc { struct socket socket; struct inode vfs_inode; long: 64; long: 64; long: 64; long: 64; }; struct sock_skb_cb { u32 dropcount; }; struct ip_options { __be32 faddr; __be32 nexthop; unsigned char optlen; unsigned char srr; unsigned char rr; unsigned char ts; unsigned char is_strictroute: 1; unsigned char srr_is_hit: 1; unsigned char is_changed: 1; unsigned char rr_needaddr: 1; unsigned char ts_needtime: 1; unsigned char ts_needaddr: 1; unsigned char router_alert; unsigned char cipso; unsigned char __pad2; unsigned char __data[0]; }; struct ip_options_rcu { struct callback_head rcu; struct ip_options opt; }; struct ipv6_opt_hdr; struct ipv6_rt_hdr; struct ipv6_txoptions { refcount_t refcnt; int tot_len; __u16 opt_flen; __u16 opt_nflen; struct ipv6_opt_hdr *hopopt; struct ipv6_opt_hdr *dst0opt; struct ipv6_rt_hdr *srcrt; struct ipv6_opt_hdr *dst1opt; struct callback_head rcu; }; struct inet_cork { unsigned int flags; __be32 addr; struct ip_options *opt; unsigned int fragsize; int length; struct dst_entry *dst; u8 tx_flags; __u8 ttl; __s16 tos; char priority; __u16 gso_size; u64 transmit_time; u32 mark; }; struct inet_cork_full { struct inet_cork base; struct flowi fl; }; struct ipv6_pinfo; struct ip_mc_socklist; struct inet_sock { struct sock sk; struct ipv6_pinfo *pinet6; __be32 inet_saddr; __s16 uc_ttl; __u16 cmsg_flags; struct ip_options_rcu *inet_opt; __be16 inet_sport; __u16 inet_id; __u8 tos; __u8 min_ttl; __u8 mc_ttl; __u8 pmtudisc; __u8 recverr: 1; __u8 is_icsk: 1; __u8 freebind: 1; __u8 hdrincl: 1; __u8 mc_loop: 1; __u8 transparent: 1; __u8 mc_all: 1; __u8 nodefrag: 1; __u8 bind_address_no_port: 1; __u8 recverr_rfc4884: 1; __u8 defer_connect: 1; __u8 rcv_tos; __u8 convert_csum; int uc_index; int mc_index; __be32 mc_addr; struct ip_mc_socklist *mc_list; struct inet_cork_full cork; }; struct in6_pktinfo { struct in6_addr ipi6_addr; int ipi6_ifindex; }; struct inet6_cork { struct ipv6_txoptions *opt; u8 hop_limit; u8 tclass; }; struct ipv6_mc_socklist; struct ipv6_ac_socklist; struct ipv6_fl_socklist; struct ipv6_pinfo { struct in6_addr saddr; struct in6_pktinfo sticky_pktinfo; const struct in6_addr *daddr_cache; __be32 flow_label; __u32 frag_size; __u16 __unused_1: 7; __s16 hop_limit: 9; __u16 mc_loop: 1; __u16 __unused_2: 6; __s16 mcast_hops: 9; int ucast_oif; int mcast_oif; union { struct { __u16 srcrt: 1; __u16 osrcrt: 1; __u16 rxinfo: 1; __u16 rxoinfo: 1; __u16 rxhlim: 1; __u16 rxohlim: 1; __u16 hopopts: 1; __u16 ohopopts: 1; __u16 dstopts: 1; __u16 odstopts: 1; __u16 rxflow: 1; __u16 rxtclass: 1; __u16 rxpmtu: 1; __u16 rxorigdstaddr: 1; __u16 recvfragsize: 1; } bits; __u16 all; } rxopt; __u16 recverr: 1; __u16 sndflow: 1; __u16 repflow: 1; __u16 pmtudisc: 3; __u16 padding: 1; __u16 srcprefs: 3; __u16 dontfrag: 1; __u16 autoflowlabel: 1; __u16 autoflowlabel_set: 1; __u16 mc_all: 1; __u16 recverr_rfc4884: 1; __u16 rtalert_isolate: 1; __u8 min_hopcount; __u8 tclass; __be32 rcv_flowinfo; __u32 dst_cookie; struct ipv6_mc_socklist *ipv6_mc_list; struct ipv6_ac_socklist *ipv6_ac_list; struct ipv6_fl_socklist *ipv6_fl_list; struct ipv6_txoptions *opt; struct sk_buff *pktoptions; struct sk_buff *rxpmtu; struct inet6_cork cork; }; struct ipv6_rt_hdr { __u8 nexthdr; __u8 hdrlen; __u8 type; __u8 segments_left; }; struct ipv6_opt_hdr { __u8 nexthdr; __u8 hdrlen; }; struct inet6_skb_parm { int iif; __be16 ra; __u16 dst0; __u16 srcrt; __u16 dst1; __u16 lastopt; __u16 nhoff; __u16 flags; __u16 frag_max_size; }; struct ip6_sf_socklist; struct ipv6_mc_socklist { struct in6_addr addr; int ifindex; unsigned int sfmode; struct ipv6_mc_socklist *next; struct ip6_sf_socklist *sflist; struct callback_head rcu; }; struct ipv6_ac_socklist { struct in6_addr acl_addr; int acl_ifindex; struct ipv6_ac_socklist *acl_next; }; struct ip6_flowlabel; struct ipv6_fl_socklist { struct ipv6_fl_socklist *next; struct ip6_flowlabel *fl; struct callback_head rcu; }; struct ip6_sf_socklist { unsigned int sl_max; unsigned int sl_count; struct callback_head rcu; struct in6_addr sl_addr[0]; }; struct ip6_flowlabel { struct ip6_flowlabel *next; __be32 label; atomic_t users; struct in6_addr dst; struct ipv6_txoptions *opt; long unsigned int linger; struct callback_head rcu; u8 share; union { struct pid *pid; kuid_t uid; } owner; long unsigned int lastuse; long unsigned int expires; struct net *fl_net; }; struct inet_skb_parm { int iif; struct ip_options opt; u16 flags; u16 frag_max_size; }; struct sock_ee_data_rfc4884 { __u16 len; __u8 flags; __u8 reserved; }; struct sock_extended_err { __u32 ee_errno; __u8 ee_origin; __u8 ee_type; __u8 ee_code; __u8 ee_pad; __u32 ee_info; union { __u32 ee_data; struct sock_ee_data_rfc4884 ee_rfc4884; }; }; struct sock_exterr_skb { union { struct inet_skb_parm h4; struct inet6_skb_parm h6; } header; struct sock_extended_err ee; u16 addr_offset; __be16 port; u8 opt_stats: 1; u8 unused: 7; }; struct net_bridge; struct used_address { struct __kernel_sockaddr_storage name; unsigned int name_len; }; struct linger { int l_onoff; int l_linger; }; struct ucred { __u32 pid; __u32 uid; __u32 gid; }; struct rt6key { struct in6_addr addr; int plen; }; struct rtable; struct fnhe_hash_bucket; struct fib_nh_common { struct net_device *nhc_dev; netdevice_tracker nhc_dev_tracker; int nhc_oif; unsigned char nhc_scope; u8 nhc_family; u8 nhc_gw_family; unsigned char nhc_flags; struct lwtunnel_state *nhc_lwtstate; union { __be32 ipv4; struct in6_addr ipv6; } nhc_gw; int nhc_weight; atomic_t nhc_upper_bound; struct rtable **nhc_pcpu_rth_output; struct rtable *nhc_rth_input; struct fnhe_hash_bucket *nhc_exceptions; }; struct rt6_exception_bucket; struct fib6_nh { struct fib_nh_common nh_common; struct rt6_info **rt6i_pcpu; struct rt6_exception_bucket *rt6i_exception_bucket; }; struct fib6_node; struct dst_metrics; struct nexthop; struct fib6_info { struct fib6_table *fib6_table; struct fib6_info *fib6_next; struct fib6_node *fib6_node; union { struct list_head fib6_siblings; struct list_head nh_list; }; unsigned int fib6_nsiblings; refcount_t fib6_ref; long unsigned int expires; struct dst_metrics *fib6_metrics; struct rt6key fib6_dst; u32 fib6_flags; struct rt6key fib6_src; struct rt6key fib6_prefsrc; u32 fib6_metric; u8 fib6_protocol; u8 fib6_type; u8 should_flush: 1; u8 dst_nocount: 1; u8 dst_nopolicy: 1; u8 fib6_destroying: 1; u8 offload: 1; u8 trap: 1; u8 offload_failed: 1; u8 unused: 1; struct callback_head rcu; struct nexthop *nh; struct fib6_nh fib6_nh[0]; }; struct uncached_list; struct rt6_info { struct dst_entry dst; struct fib6_info *from; int sernum; struct rt6key rt6i_dst; struct rt6key rt6i_src; struct in6_addr rt6i_gateway; struct inet6_dev *rt6i_idev; u32 rt6i_flags; struct list_head rt6i_uncached; struct uncached_list *rt6i_uncached_list; short unsigned int rt6i_nfheader_len; }; struct rt6_statistics { __u32 fib_nodes; __u32 fib_route_nodes; __u32 fib_rt_entries; __u32 fib_rt_cache; __u32 fib_discarded_routes; atomic_t fib_rt_alloc; atomic_t fib_rt_uncache; }; struct fib6_node { struct fib6_node *parent; struct fib6_node *left; struct fib6_node *right; struct fib6_info *leaf; __u16 fn_bit; __u16 fn_flags; int fn_sernum; struct fib6_info *rr_ptr; struct callback_head rcu; }; struct fib6_table { struct hlist_node tb6_hlist; u32 tb6_id; spinlock_t tb6_lock; struct fib6_node tb6_root; struct inet_peer_base tb6_peers; unsigned int flags; unsigned int fib_seq; }; enum { XFRM_POLICY_TYPE_MAIN = 0, XFRM_POLICY_TYPE_SUB = 1, XFRM_POLICY_TYPE_MAX = 2, XFRM_POLICY_TYPE_ANY = 255, }; enum { XFRM_MSG_BASE = 16, XFRM_MSG_NEWSA = 16, XFRM_MSG_DELSA = 17, XFRM_MSG_GETSA = 18, XFRM_MSG_NEWPOLICY = 19, XFRM_MSG_DELPOLICY = 20, XFRM_MSG_GETPOLICY = 21, XFRM_MSG_ALLOCSPI = 22, XFRM_MSG_ACQUIRE = 23, XFRM_MSG_EXPIRE = 24, XFRM_MSG_UPDPOLICY = 25, XFRM_MSG_UPDSA = 26, XFRM_MSG_POLEXPIRE = 27, XFRM_MSG_FLUSHSA = 28, XFRM_MSG_FLUSHPOLICY = 29, XFRM_MSG_NEWAE = 30, XFRM_MSG_GETAE = 31, XFRM_MSG_REPORT = 32, XFRM_MSG_MIGRATE = 33, XFRM_MSG_NEWSADINFO = 34, XFRM_MSG_GETSADINFO = 35, XFRM_MSG_NEWSPDINFO = 36, XFRM_MSG_GETSPDINFO = 37, XFRM_MSG_MAPPING = 38, XFRM_MSG_SETDEFAULT = 39, XFRM_MSG_GETDEFAULT = 40, __XFRM_MSG_MAX = 41, }; enum xfrm_attr_type_t { XFRMA_UNSPEC = 0, XFRMA_ALG_AUTH = 1, XFRMA_ALG_CRYPT = 2, XFRMA_ALG_COMP = 3, XFRMA_ENCAP = 4, XFRMA_TMPL = 5, XFRMA_SA = 6, XFRMA_POLICY = 7, XFRMA_SEC_CTX = 8, XFRMA_LTIME_VAL = 9, XFRMA_REPLAY_VAL = 10, XFRMA_REPLAY_THRESH = 11, XFRMA_ETIMER_THRESH = 12, XFRMA_SRCADDR = 13, XFRMA_COADDR = 14, XFRMA_LASTUSED = 15, XFRMA_POLICY_TYPE = 16, XFRMA_MIGRATE = 17, XFRMA_ALG_AEAD = 18, XFRMA_KMADDRESS = 19, XFRMA_ALG_AUTH_TRUNC = 20, XFRMA_MARK = 21, XFRMA_TFCPAD = 22, XFRMA_REPLAY_ESN_VAL = 23, XFRMA_SA_EXTRA_FLAGS = 24, XFRMA_PROTO = 25, XFRMA_ADDRESS_FILTER = 26, XFRMA_PAD = 27, XFRMA_OFFLOAD_DEV = 28, XFRMA_SET_MARK = 29, XFRMA_SET_MARK_MASK = 30, XFRMA_IF_ID = 31, __XFRMA_MAX = 32, }; struct dst_metrics { u32 metrics[17]; refcount_t refcnt; }; struct so_timestamping { int flags; int bind_phc; }; enum txtime_flags { SOF_TXTIME_DEADLINE_MODE = 1, SOF_TXTIME_REPORT_ERRORS = 2, SOF_TXTIME_FLAGS_LAST = 2, SOF_TXTIME_FLAGS_MASK = 3, }; struct sock_txtime { __kernel_clockid_t clockid; __u32 flags; }; enum sk_pacing { SK_PACING_NONE = 0, SK_PACING_NEEDED = 1, SK_PACING_FQ = 2, }; struct sockcm_cookie { u64 transmit_time; u32 mark; u16 tsflags; }; struct fastopen_queue { struct request_sock *rskq_rst_head; struct request_sock *rskq_rst_tail; spinlock_t lock; int qlen; int max_qlen; struct tcp_fastopen_context *ctx; }; struct request_sock_queue { spinlock_t rskq_lock; u8 rskq_defer_accept; u32 synflood_warned; atomic_t qlen; atomic_t young; struct request_sock *rskq_accept_head; struct request_sock *rskq_accept_tail; struct fastopen_queue fastopenq; }; struct inet_connection_sock_af_ops { int (*queue_xmit)(struct sock *, struct sk_buff *, struct flowi *); void (*send_check)(struct sock *, struct sk_buff *); int (*rebuild_header)(struct sock *); void (*sk_rx_dst_set)(struct sock *, const struct sk_buff *); int (*conn_request)(struct sock *, struct sk_buff *); struct sock * (*syn_recv_sock)(const struct sock *, struct sk_buff *, struct request_sock *, struct dst_entry *, struct request_sock *, bool *); u16 net_header_len; u16 net_frag_header_len; u16 sockaddr_len; int (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int); int (*getsockopt)(struct sock *, int, int, char *, int *); void (*addr2sockaddr)(struct sock *, struct sockaddr *); void (*mtu_reduced)(struct sock *); }; struct inet_bind_bucket; struct tcp_ulp_ops; struct inet_connection_sock { struct inet_sock icsk_inet; struct request_sock_queue icsk_accept_queue; struct inet_bind_bucket *icsk_bind_hash; long unsigned int icsk_timeout; struct timer_list icsk_retransmit_timer; struct timer_list icsk_delack_timer; __u32 icsk_rto; __u32 icsk_rto_min; __u32 icsk_delack_max; __u32 icsk_pmtu_cookie; const struct tcp_congestion_ops *icsk_ca_ops; const struct inet_connection_sock_af_ops *icsk_af_ops; const struct tcp_ulp_ops *icsk_ulp_ops; void *icsk_ulp_data; void (*icsk_clean_acked)(struct sock *, u32); struct hlist_node icsk_listen_portaddr_node; unsigned int (*icsk_sync_mss)(struct sock *, u32); __u8 icsk_ca_state: 5; __u8 icsk_ca_initialized: 1; __u8 icsk_ca_setsockopt: 1; __u8 icsk_ca_dst_locked: 1; __u8 icsk_retransmits; __u8 icsk_pending; __u8 icsk_backoff; __u8 icsk_syn_retries; __u8 icsk_probes_out; __u16 icsk_ext_hdr_len; struct { __u8 pending; __u8 quick; __u8 pingpong; __u8 retry; __u32 ato; long unsigned int timeout; __u32 lrcvtime; __u16 last_seg_size; __u16 rcv_mss; } icsk_ack; struct { int search_high; int search_low; u32 probe_size: 31; u32 enabled: 1; u32 probe_timestamp; } icsk_mtup; u32 icsk_probes_tstamp; u32 icsk_user_timeout; u64 icsk_ca_priv[13]; }; struct inet_bind_bucket { possible_net_t ib_net; int l3mdev; short unsigned int port; signed char fastreuse; signed char fastreuseport; kuid_t fastuid; struct in6_addr fast_v6_rcv_saddr; __be32 fast_rcv_saddr; short unsigned int fast_sk_family; bool fast_ipv6_only; struct hlist_node node; struct hlist_head owners; }; struct tcp_ulp_ops { struct list_head list; int (*init)(struct sock *); void (*update)(struct sock *, struct proto *, void (*)(struct sock *)); void (*release)(struct sock *); int (*get_info)(const struct sock *, struct sk_buff *); size_t (*get_info_size)(const struct sock *); void (*clone)(const struct request_sock *, struct sock *, const gfp_t); char name[16]; struct module *owner; }; struct tcp_fastopen_cookie { __le64 val[2]; s8 len; bool exp; }; struct tcp_sack_block { u32 start_seq; u32 end_seq; }; struct tcp_options_received { int ts_recent_stamp; u32 ts_recent; u32 rcv_tsval; u32 rcv_tsecr; u16 saw_tstamp: 1; u16 tstamp_ok: 1; u16 dsack: 1; u16 wscale_ok: 1; u16 sack_ok: 3; u16 smc_ok: 1; u16 snd_wscale: 4; u16 rcv_wscale: 4; u8 saw_unknown: 1; u8 unused: 7; u8 num_sacks; u16 user_mss; u16 mss_clamp; }; struct tcp_rack { u64 mstamp; u32 rtt_us; u32 end_seq; u32 last_delivered; u8 reo_wnd_steps; u8 reo_wnd_persist: 5; u8 dsack_seen: 1; u8 advanced: 1; }; struct tcp_fastopen_request; struct tcp_sock { struct inet_connection_sock inet_conn; u16 tcp_header_len; u16 gso_segs; __be32 pred_flags; u64 bytes_received; u32 segs_in; u32 data_segs_in; u32 rcv_nxt; u32 copied_seq; u32 rcv_wup; u32 snd_nxt; u32 segs_out; u32 data_segs_out; u64 bytes_sent; u64 bytes_acked; u32 dsack_dups; u32 snd_una; u32 snd_sml; u32 rcv_tstamp; u32 lsndtime; u32 last_oow_ack_time; u32 compressed_ack_rcv_nxt; u32 tsoffset; struct list_head tsq_node; struct list_head tsorted_sent_queue; u32 snd_wl1; u32 snd_wnd; u32 max_window; u32 mss_cache; u32 window_clamp; u32 rcv_ssthresh; struct tcp_rack rack; u16 advmss; u8 compressed_ack; u8 dup_ack_counter: 2; u8 tlp_retrans: 1; u8 unused: 5; u32 chrono_start; u32 chrono_stat[3]; u8 chrono_type: 2; u8 rate_app_limited: 1; u8 fastopen_connect: 1; u8 fastopen_no_cookie: 1; u8 is_sack_reneg: 1; u8 fastopen_client_fail: 2; u8 nonagle: 4; u8 thin_lto: 1; u8 recvmsg_inq: 1; u8 repair: 1; u8 frto: 1; u8 repair_queue; u8 save_syn: 2; u8 syn_data: 1; u8 syn_fastopen: 1; u8 syn_fastopen_exp: 1; u8 syn_fastopen_ch: 1; u8 syn_data_acked: 1; u8 is_cwnd_limited: 1; u32 tlp_high_seq; u32 tcp_tx_delay; u64 tcp_wstamp_ns; u64 tcp_clock_cache; u64 tcp_mstamp; u32 srtt_us; u32 mdev_us; u32 mdev_max_us; u32 rttvar_us; u32 rtt_seq; struct minmax rtt_min; u32 packets_out; u32 retrans_out; u32 max_packets_out; u32 max_packets_seq; u16 urg_data; u8 ecn_flags; u8 keepalive_probes; u32 reordering; u32 reord_seen; u32 snd_up; struct tcp_options_received rx_opt; u32 snd_ssthresh; u32 snd_cwnd; u32 snd_cwnd_cnt; u32 snd_cwnd_clamp; u32 snd_cwnd_used; u32 snd_cwnd_stamp; u32 prior_cwnd; u32 prr_delivered; u32 prr_out; u32 delivered; u32 delivered_ce; u32 lost; u32 app_limited; u64 first_tx_mstamp; u64 delivered_mstamp; u32 rate_delivered; u32 rate_interval_us; u32 rcv_wnd; u32 write_seq; u32 notsent_lowat; u32 pushed_seq; u32 lost_out; u32 sacked_out; struct hrtimer pacing_timer; struct hrtimer compressed_ack_timer; struct sk_buff *lost_skb_hint; struct sk_buff *retransmit_skb_hint; struct rb_root out_of_order_queue; struct sk_buff *ooo_last_skb; struct tcp_sack_block duplicate_sack[1]; struct tcp_sack_block selective_acks[4]; struct tcp_sack_block recv_sack_cache[4]; struct sk_buff *highest_sack; int lost_cnt_hint; u32 prior_ssthresh; u32 high_seq; u32 retrans_stamp; u32 undo_marker; int undo_retrans; u64 bytes_retrans; u32 total_retrans; u32 urg_seq; unsigned int keepalive_time; unsigned int keepalive_intvl; int linger2; u8 bpf_sock_ops_cb_flags; u16 timeout_rehash; u32 rcv_ooopack; u32 rcv_rtt_last_tsecr; struct { u32 rtt_us; u32 seq; u64 time; } rcv_rtt_est; struct { u32 space; u32 seq; u64 time; } rcvq_space; struct { u32 probe_seq_start; u32 probe_seq_end; } mtu_probe; u32 mtu_info; struct tcp_fastopen_request *fastopen_req; struct request_sock *fastopen_rsk; struct saved_syn *saved_syn; }; struct tcp_fastopen_request { struct tcp_fastopen_cookie cookie; struct msghdr *data; size_t size; int copied; struct ubuf_info *uarg; }; struct fib_nh_exception { struct fib_nh_exception *fnhe_next; int fnhe_genid; __be32 fnhe_daddr; u32 fnhe_pmtu; bool fnhe_mtu_locked; __be32 fnhe_gw; long unsigned int fnhe_expires; struct rtable *fnhe_rth_input; struct rtable *fnhe_rth_output; long unsigned int fnhe_stamp; struct callback_head rcu; }; struct rtable { struct dst_entry dst; int rt_genid; unsigned int rt_flags; __u16 rt_type; __u8 rt_is_input; __u8 rt_uses_gateway; int rt_iif; u8 rt_gw_family; union { __be32 rt_gw4; struct in6_addr rt_gw6; }; u32 rt_mtu_locked: 1; u32 rt_pmtu: 31; struct list_head rt_uncached; struct uncached_list *rt_uncached_list; }; struct fnhe_hash_bucket { struct fib_nh_exception *chain; }; struct net_protocol { int (*early_demux)(struct sk_buff *); int (*early_demux_handler)(struct sk_buff *); int (*handler)(struct sk_buff *); int (*err_handler)(struct sk_buff *, u32); unsigned int no_policy: 1; unsigned int icmp_strict_tag_validation: 1; }; struct rt6_exception_bucket { struct hlist_head chain; int depth; }; enum { SK_MEMINFO_RMEM_ALLOC = 0, SK_MEMINFO_RCVBUF = 1, SK_MEMINFO_WMEM_ALLOC = 2, SK_MEMINFO_SNDBUF = 3, SK_MEMINFO_FWD_ALLOC = 4, SK_MEMINFO_WMEM_QUEUED = 5, SK_MEMINFO_OPTMEM = 6, SK_MEMINFO_BACKLOG = 7, SK_MEMINFO_DROPS = 8, SK_MEMINFO_VARS = 9, }; enum sknetlink_groups { SKNLGRP_NONE = 0, SKNLGRP_INET_TCP_DESTROY = 1, SKNLGRP_INET_UDP_DESTROY = 2, SKNLGRP_INET6_TCP_DESTROY = 3, SKNLGRP_INET6_UDP_DESTROY = 4, __SKNLGRP_MAX = 5, }; struct inet_request_sock { struct request_sock req; u16 snd_wscale: 4; u16 rcv_wscale: 4; u16 tstamp_ok: 1; u16 sack_ok: 1; u16 wscale_ok: 1; u16 ecn_ok: 1; u16 acked: 1; u16 no_srccheck: 1; u16 smc_ok: 1; u32 ir_mark; union { struct ip_options_rcu *ireq_opt; struct { struct ipv6_txoptions *ipv6_opt; struct sk_buff *pktopts; }; }; }; struct tcp_request_sock_ops; struct tcp_request_sock { struct inet_request_sock req; const struct tcp_request_sock_ops *af_specific; u64 snt_synack; bool tfo_listener; bool is_mptcp; u32 txhash; u32 rcv_isn; u32 snt_isn; u32 ts_off; u32 last_oow_ack_time; u32 rcv_nxt; u8 syn_tos; }; enum tcp_synack_type { TCP_SYNACK_NORMAL = 0, TCP_SYNACK_FASTOPEN = 1, TCP_SYNACK_COOKIE = 2, }; struct tcp_request_sock_ops { u16 mss_clamp; struct dst_entry * (*route_req)(const struct sock *, struct sk_buff *, struct flowi *, struct request_sock *); u32 (*init_seq)(const struct sk_buff *); u32 (*init_ts_off)(const struct net *, const struct sk_buff *); int (*send_synack)(const struct sock *, struct dst_entry *, struct flowi *, struct request_sock *, struct tcp_fastopen_cookie *, enum tcp_synack_type, struct sk_buff *); }; struct ts_state { unsigned int offset; char cb[48]; }; struct ts_config; struct ts_ops { const char *name; struct ts_config * (*init)(const void *, unsigned int, gfp_t, int); unsigned int (*find)(struct ts_config *, struct ts_state *); void (*destroy)(struct ts_config *); void * (*get_pattern)(struct ts_config *); unsigned int (*get_pattern_len)(struct ts_config *); struct module *owner; struct list_head list; }; struct ts_config { struct ts_ops *ops; int flags; unsigned int (*get_next_block)(unsigned int, const u8 **, struct ts_config *, struct ts_state *); void (*finish)(struct ts_config *, struct ts_state *); }; enum { SKB_FCLONE_UNAVAILABLE = 0, SKB_FCLONE_ORIG = 1, SKB_FCLONE_CLONE = 2, }; struct sk_buff_fclones { struct sk_buff skb1; struct sk_buff skb2; refcount_t fclone_ref; }; struct skb_seq_state { __u32 lower_offset; __u32 upper_offset; __u32 frag_idx; __u32 stepped_offset; struct sk_buff *root_skb; struct sk_buff *cur_skb; __u8 *frag_data; __u32 frag_off; }; struct skb_checksum_ops { __wsum (*update)(const void *, int, __wsum); __wsum (*combine)(__wsum, __wsum, int, int); }; struct skb_gso_cb { union { int mac_offset; int data_offset; }; int encap_level; __wsum csum; __u16 csum_start; }; struct vlan_hdr { __be16 h_vlan_TCI; __be16 h_vlan_encapsulated_proto; }; struct vlan_ethhdr { unsigned char h_dest[6]; unsigned char h_source[6]; __be16 h_vlan_proto; __be16 h_vlan_TCI; __be16 h_vlan_encapsulated_proto; }; struct tcphdr { __be16 source; __be16 dest; __be32 seq; __be32 ack_seq; __u16 res1: 4; __u16 doff: 4; __u16 fin: 1; __u16 syn: 1; __u16 rst: 1; __u16 psh: 1; __u16 ack: 1; __u16 urg: 1; __u16 ece: 1; __u16 cwr: 1; __be16 window; __sum16 check; __be16 urg_ptr; }; struct udphdr { __be16 source; __be16 dest; __be16 len; __sum16 check; }; enum sctp_msg_flags { MSG_NOTIFICATION = 32768, }; struct iphdr { __u8 ihl: 4; __u8 version: 4; __u8 tos; __be16 tot_len; __be16 id; __be16 frag_off; __u8 ttl; __u8 protocol; __sum16 check; __be32 saddr; __be32 daddr; }; struct ip_auth_hdr { __u8 nexthdr; __u8 hdrlen; __be16 reserved; __be32 spi; __be32 seq_no; __u8 auth_data[0]; }; struct ipv6hdr { __u8 priority: 4; __u8 version: 4; __u8 flow_lbl[3]; __be16 payload_len; __u8 nexthdr; __u8 hop_limit; struct in6_addr saddr; struct in6_addr daddr; }; struct frag_hdr { __u8 nexthdr; __u8 reserved; __be16 frag_off; __be32 identification; }; enum { SCM_TSTAMP_SND = 0, SCM_TSTAMP_SCHED = 1, SCM_TSTAMP_ACK = 2, }; struct mpls_shim_hdr { __be32 label_stack_entry; }; struct napi_alloc_cache { struct page_frag_cache page; unsigned int skb_count; void *skb_cache[64]; }; typedef int (*sendmsg_func)(struct sock *, struct msghdr *, struct kvec *, size_t, size_t); typedef int (*sendpage_func)(struct sock *, struct page *, int, size_t, int); struct ahash_request___2; struct scm_fp_list { short int count; short int max; struct user_struct *user; struct file *fp[253]; }; struct scm_cookie { struct pid *pid; struct scm_fp_list *fp; struct scm_creds creds; }; struct scm_timestamping { struct __kernel_old_timespec ts[3]; }; struct scm_timestamping64 { struct __kernel_timespec ts[3]; }; enum { TCA_STATS_UNSPEC = 0, TCA_STATS_BASIC = 1, TCA_STATS_RATE_EST = 2, TCA_STATS_QUEUE = 3, TCA_STATS_APP = 4, TCA_STATS_RATE_EST64 = 5, TCA_STATS_PAD = 6, TCA_STATS_BASIC_HW = 7, TCA_STATS_PKT64 = 8, __TCA_STATS_MAX = 9, }; struct gnet_stats_basic { __u64 bytes; __u32 packets; }; struct gnet_stats_rate_est { __u32 bps; __u32 pps; }; struct gnet_stats_rate_est64 { __u64 bps; __u64 pps; }; struct gnet_estimator { signed char interval; unsigned char ewma_log; }; struct net_rate_estimator { struct gnet_stats_basic_sync *bstats; spinlock_t *stats_lock; bool running; struct gnet_stats_basic_sync *cpu_bstats; u8 ewma_log; u8 intvl_log; seqcount_t seq; u64 last_packets; u64 last_bytes; u64 avpps; u64 avbps; long unsigned int next_jiffies; struct timer_list timer; struct callback_head rcu; }; struct net_generic { union { struct { unsigned int len; struct callback_head rcu; } s; void *ptr[0]; }; }; enum { RTM_BASE = 16, RTM_NEWLINK = 16, RTM_DELLINK = 17, RTM_GETLINK = 18, RTM_SETLINK = 19, RTM_NEWADDR = 20, RTM_DELADDR = 21, RTM_GETADDR = 22, RTM_NEWROUTE = 24, RTM_DELROUTE = 25, RTM_GETROUTE = 26, RTM_NEWNEIGH = 28, RTM_DELNEIGH = 29, RTM_GETNEIGH = 30, RTM_NEWRULE = 32, RTM_DELRULE = 33, RTM_GETRULE = 34, RTM_NEWQDISC = 36, RTM_DELQDISC = 37, RTM_GETQDISC = 38, RTM_NEWTCLASS = 40, RTM_DELTCLASS = 41, RTM_GETTCLASS = 42, RTM_NEWTFILTER = 44, RTM_DELTFILTER = 45, RTM_GETTFILTER = 46, RTM_NEWACTION = 48, RTM_DELACTION = 49, RTM_GETACTION = 50, RTM_NEWPREFIX = 52, RTM_GETMULTICAST = 58, RTM_GETANYCAST = 62, RTM_NEWNEIGHTBL = 64, RTM_GETNEIGHTBL = 66, RTM_SETNEIGHTBL = 67, RTM_NEWNDUSEROPT = 68, RTM_NEWADDRLABEL = 72, RTM_DELADDRLABEL = 73, RTM_GETADDRLABEL = 74, RTM_GETDCB = 78, RTM_SETDCB = 79, RTM_NEWNETCONF = 80, RTM_DELNETCONF = 81, RTM_GETNETCONF = 82, RTM_NEWMDB = 84, RTM_DELMDB = 85, RTM_GETMDB = 86, RTM_NEWNSID = 88, RTM_DELNSID = 89, RTM_GETNSID = 90, RTM_NEWSTATS = 92, RTM_GETSTATS = 94, RTM_NEWCACHEREPORT = 96, RTM_NEWCHAIN = 100, RTM_DELCHAIN = 101, RTM_GETCHAIN = 102, RTM_NEWNEXTHOP = 104, RTM_DELNEXTHOP = 105, RTM_GETNEXTHOP = 106, RTM_NEWLINKPROP = 108, RTM_DELLINKPROP = 109, RTM_GETLINKPROP = 110, RTM_NEWVLAN = 112, RTM_DELVLAN = 113, RTM_GETVLAN = 114, RTM_NEWNEXTHOPBUCKET = 116, RTM_DELNEXTHOPBUCKET = 117, RTM_GETNEXTHOPBUCKET = 118, __RTM_MAX = 119, }; struct rtgenmsg { unsigned char rtgen_family; }; enum rtnetlink_groups { RTNLGRP_NONE = 0, RTNLGRP_LINK = 1, RTNLGRP_NOTIFY = 2, RTNLGRP_NEIGH = 3, RTNLGRP_TC = 4, RTNLGRP_IPV4_IFADDR = 5, RTNLGRP_IPV4_MROUTE = 6, RTNLGRP_IPV4_ROUTE = 7, RTNLGRP_IPV4_RULE = 8, RTNLGRP_IPV6_IFADDR = 9, RTNLGRP_IPV6_MROUTE = 10, RTNLGRP_IPV6_ROUTE = 11, RTNLGRP_IPV6_IFINFO = 12, RTNLGRP_DECnet_IFADDR = 13, RTNLGRP_NOP2 = 14, RTNLGRP_DECnet_ROUTE = 15, RTNLGRP_DECnet_RULE = 16, RTNLGRP_NOP4 = 17, RTNLGRP_IPV6_PREFIX = 18, RTNLGRP_IPV6_RULE = 19, RTNLGRP_ND_USEROPT = 20, RTNLGRP_PHONET_IFADDR = 21, RTNLGRP_PHONET_ROUTE = 22, RTNLGRP_DCB = 23, RTNLGRP_IPV4_NETCONF = 24, RTNLGRP_IPV6_NETCONF = 25, RTNLGRP_MDB = 26, RTNLGRP_MPLS_ROUTE = 27, RTNLGRP_NSID = 28, RTNLGRP_MPLS_NETCONF = 29, RTNLGRP_IPV4_MROUTE_R = 30, RTNLGRP_IPV6_MROUTE_R = 31, RTNLGRP_NEXTHOP = 32, RTNLGRP_BRVLAN = 33, __RTNLGRP_MAX = 34, }; enum { NETNSA_NONE = 0, NETNSA_NSID = 1, NETNSA_PID = 2, NETNSA_FD = 3, NETNSA_TARGET_NSID = 4, NETNSA_CURRENT_NSID = 5, __NETNSA_MAX = 6, }; struct pcpu_gen_cookie { local_t nesting; u64 last; }; struct gen_cookie { struct pcpu_gen_cookie *local; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; atomic64_t forward_last; atomic64_t reverse_last; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; typedef int (*rtnl_doit_func)(struct sk_buff *, struct nlmsghdr *, struct netlink_ext_ack *); typedef int (*rtnl_dumpit_func)(struct sk_buff *, struct netlink_callback *); enum rtnl_link_flags { RTNL_FLAG_DOIT_UNLOCKED = 1, }; struct net_fill_args { u32 portid; u32 seq; int flags; int cmd; int nsid; bool add_ref; int ref_nsid; }; struct rtnl_net_dump_cb { struct net *tgt_net; struct net *ref_net; struct sk_buff *skb; struct net_fill_args fillargs; int idx; int s_idx; }; enum flow_dissect_ret { FLOW_DISSECT_RET_OUT_GOOD = 0, FLOW_DISSECT_RET_OUT_BAD = 1, FLOW_DISSECT_RET_PROTO_AGAIN = 2, FLOW_DISSECT_RET_IPPROTO_AGAIN = 3, FLOW_DISSECT_RET_CONTINUE = 4, }; struct flow_dissector_key_tags { u32 flow_label; }; struct flow_dissector_key_vlan { union { struct { u16 vlan_id: 12; u16 vlan_dei: 1; u16 vlan_priority: 3; }; __be16 vlan_tci; }; __be16 vlan_tpid; }; struct flow_dissector_mpls_lse { u32 mpls_ttl: 8; u32 mpls_bos: 1; u32 mpls_tc: 3; u32 mpls_label: 20; }; struct flow_dissector_key_mpls { struct flow_dissector_mpls_lse ls[7]; u8 used_lses; }; struct flow_dissector_key_enc_opts { u8 data[255]; u8 len; __be16 dst_opt_type; }; struct flow_dissector_key_keyid { __be32 keyid; }; struct flow_dissector_key_ipv4_addrs { __be32 src; __be32 dst; }; struct flow_dissector_key_ipv6_addrs { struct in6_addr src; struct in6_addr dst; }; struct flow_dissector_key_tipc { __be32 key; }; struct flow_dissector_key_addrs { union { struct flow_dissector_key_ipv4_addrs v4addrs; struct flow_dissector_key_ipv6_addrs v6addrs; struct flow_dissector_key_tipc tipckey; }; }; struct flow_dissector_key_arp { __u32 sip; __u32 tip; __u8 op; unsigned char sha[6]; unsigned char tha[6]; }; struct flow_dissector_key_ports { union { __be32 ports; struct { __be16 src; __be16 dst; }; }; }; struct flow_dissector_key_icmp { struct { u8 type; u8 code; }; u16 id; }; struct flow_dissector_key_eth_addrs { unsigned char dst[6]; unsigned char src[6]; }; struct flow_dissector_key_tcp { __be16 flags; }; struct flow_dissector_key_ip { __u8 tos; __u8 ttl; }; struct flow_dissector_key_meta { int ingress_ifindex; u16 ingress_iftype; }; struct flow_dissector_key_hash { u32 hash; }; struct flow_dissector_key { enum flow_dissector_key_id key_id; size_t offset; }; struct flow_keys { struct flow_dissector_key_control control; struct flow_dissector_key_basic basic; struct flow_dissector_key_tags tags; struct flow_dissector_key_vlan vlan; struct flow_dissector_key_vlan cvlan; struct flow_dissector_key_keyid keyid; struct flow_dissector_key_ports ports; struct flow_dissector_key_icmp icmp; struct flow_dissector_key_addrs addrs; int: 32; }; struct flow_keys_digest { u8 data[16]; }; enum bpf_ret_code { BPF_OK = 0, BPF_DROP = 2, BPF_REDIRECT = 7, BPF_LWT_REROUTE = 128, }; enum { BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG = 1, BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL = 2, BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP = 4, }; struct devlink; enum devlink_port_type { DEVLINK_PORT_TYPE_NOTSET = 0, DEVLINK_PORT_TYPE_AUTO = 1, DEVLINK_PORT_TYPE_ETH = 2, DEVLINK_PORT_TYPE_IB = 3, }; enum devlink_port_flavour { DEVLINK_PORT_FLAVOUR_PHYSICAL = 0, DEVLINK_PORT_FLAVOUR_CPU = 1, DEVLINK_PORT_FLAVOUR_DSA = 2, DEVLINK_PORT_FLAVOUR_PCI_PF = 3, DEVLINK_PORT_FLAVOUR_PCI_VF = 4, DEVLINK_PORT_FLAVOUR_VIRTUAL = 5, DEVLINK_PORT_FLAVOUR_UNUSED = 6, DEVLINK_PORT_FLAVOUR_PCI_SF = 7, }; struct devlink_port_phys_attrs { u32 port_number; u32 split_subport_number; }; struct devlink_port_pci_pf_attrs { u32 controller; u16 pf; u8 external: 1; }; struct devlink_port_pci_vf_attrs { u32 controller; u16 pf; u16 vf; u8 external: 1; }; struct devlink_port_pci_sf_attrs { u32 controller; u32 sf; u16 pf; u8 external: 1; }; struct devlink_port_attrs { u8 split: 1; u8 splittable: 1; u32 lanes; enum devlink_port_flavour flavour; struct netdev_phys_item_id switch_id; union { struct devlink_port_phys_attrs phys; struct devlink_port_pci_pf_attrs pci_pf; struct devlink_port_pci_vf_attrs pci_vf; struct devlink_port_pci_sf_attrs pci_sf; }; }; struct devlink_rate; struct devlink_port { struct list_head list; struct list_head param_list; struct list_head region_list; struct devlink *devlink; unsigned int index; spinlock_t type_lock; enum devlink_port_type type; enum devlink_port_type desired_type; void *type_dev; struct devlink_port_attrs attrs; u8 attrs_set: 1; u8 switch_port: 1; struct delayed_work type_warn_dw; struct list_head reporter_list; struct mutex reporters_lock; struct devlink_rate *devlink_rate; }; struct ip_tunnel_parm { char name[16]; int link; __be16 i_flags; __be16 o_flags; __be32 i_key; __be32 o_key; struct iphdr iph; }; struct reset_control; struct mii_bus; struct mdio_device { struct device dev; struct mii_bus *bus; char modalias[32]; int (*bus_match)(struct device *, struct device_driver *); void (*device_free)(struct mdio_device *); void (*device_remove)(struct mdio_device *); int addr; int flags; struct gpio_desc *reset_gpio; struct reset_control *reset_ctrl; unsigned int reset_assert_delay; unsigned int reset_deassert_delay; }; struct phy_c45_device_ids { u32 devices_in_package; u32 mmds_present; u32 device_ids[32]; }; enum phy_state { PHY_DOWN = 0, PHY_READY = 1, PHY_HALTED = 2, PHY_UP = 3, PHY_RUNNING = 4, PHY_NOLINK = 5, PHY_CABLETEST = 6, }; struct phylink; struct phy_driver; struct phy_package_shared; struct mii_timestamper; struct phy_device { struct mdio_device mdio; struct phy_driver *drv; u32 phy_id; struct phy_c45_device_ids c45_ids; unsigned int is_c45: 1; unsigned int is_internal: 1; unsigned int is_pseudo_fixed_link: 1; unsigned int is_gigabit_capable: 1; unsigned int has_fixups: 1; unsigned int suspended: 1; unsigned int suspended_by_mdio_bus: 1; unsigned int sysfs_links: 1; unsigned int loopback_enabled: 1; unsigned int downshifted_rate: 1; unsigned int is_on_sfp_module: 1; unsigned int mac_managed_pm: 1; unsigned int autoneg: 1; unsigned int link: 1; unsigned int autoneg_complete: 1; unsigned int interrupts: 1; enum phy_state state; u32 dev_flags; phy_interface_t interface; int speed; int duplex; int port; int pause; int asym_pause; u8 master_slave_get; u8 master_slave_set; u8 master_slave_state; long unsigned int supported[2]; long unsigned int advertising[2]; long unsigned int lp_advertising[2]; long unsigned int adv_old[2]; u32 eee_broken_modes; int irq; void *priv; struct phy_package_shared *shared; struct sk_buff *skb; void *ehdr; struct nlattr *nest; struct delayed_work state_queue; struct mutex lock; bool sfp_bus_attached; struct sfp_bus *sfp_bus; struct phylink *phylink; struct net_device *attached_dev; struct mii_timestamper *mii_ts; u8 mdix; u8 mdix_ctrl; void (*phy_link_change)(struct phy_device *, bool); void (*adjust_link)(struct net_device *); }; struct ip_tunnel_key { __be64 tun_id; union { struct { __be32 src; __be32 dst; } ipv4; struct { struct in6_addr src; struct in6_addr dst; } ipv6; } u; __be16 tun_flags; u8 tos; u8 ttl; __be32 label; __be16 tp_src; __be16 tp_dst; }; struct dst_cache_pcpu; struct dst_cache { struct dst_cache_pcpu *cache; long unsigned int reset_ts; }; struct ip_tunnel_info { struct ip_tunnel_key key; struct dst_cache dst_cache; u8 options_len; u8 mode; }; union tcp_word_hdr { struct tcphdr hdr; __be32 words[5]; }; struct phy_tdr_config { u32 first; u32 last; u32 step; s8 pair; }; struct mdio_bus_stats { u64_stats_t transfers; u64_stats_t errors; u64_stats_t writes; u64_stats_t reads; struct u64_stats_sync syncp; }; struct mii_bus { struct module *owner; const char *name; char id[61]; void *priv; int (*read)(struct mii_bus *, int, int); int (*write)(struct mii_bus *, int, int, u16); int (*reset)(struct mii_bus *); struct mdio_bus_stats stats[32]; struct mutex mdio_lock; struct device *parent; enum { MDIOBUS_ALLOCATED = 1, MDIOBUS_REGISTERED = 2, MDIOBUS_UNREGISTERED = 3, MDIOBUS_RELEASED = 4, } state; struct device dev; struct mdio_device *mdio_map[32]; u32 phy_mask; u32 phy_ignore_ta_mask; int irq[32]; int reset_delay_us; int reset_post_delay_us; struct gpio_desc *reset_gpiod; enum { MDIOBUS_NO_CAP = 0, MDIOBUS_C22 = 1, MDIOBUS_C45 = 2, MDIOBUS_C22_C45 = 3, } probe_capabilities; struct mutex shared_lock; struct phy_package_shared *shared[32]; }; struct mdio_driver_common { struct device_driver driver; int flags; }; struct mii_timestamper { bool (*rxtstamp)(struct mii_timestamper *, struct sk_buff *, int); void (*txtstamp)(struct mii_timestamper *, struct sk_buff *, int); int (*hwtstamp)(struct mii_timestamper *, struct ifreq *); void (*link_state)(struct mii_timestamper *, struct phy_device *); int (*ts_info)(struct mii_timestamper *, struct ethtool_ts_info *); struct device *device; }; struct phy_package_shared { int addr; refcount_t refcnt; long unsigned int flags; size_t priv_size; void *priv; }; struct phy_driver { struct mdio_driver_common mdiodrv; u32 phy_id; char *name; u32 phy_id_mask; const long unsigned int * const features; u32 flags; const void *driver_data; int (*soft_reset)(struct phy_device *); int (*config_init)(struct phy_device *); int (*probe)(struct phy_device *); int (*get_features)(struct phy_device *); int (*suspend)(struct phy_device *); int (*resume)(struct phy_device *); int (*config_aneg)(struct phy_device *); int (*aneg_done)(struct phy_device *); int (*read_status)(struct phy_device *); int (*config_intr)(struct phy_device *); irqreturn_t (*handle_interrupt)(struct phy_device *); void (*remove)(struct phy_device *); int (*match_phy_device)(struct phy_device *); int (*set_wol)(struct phy_device *, struct ethtool_wolinfo *); void (*get_wol)(struct phy_device *, struct ethtool_wolinfo *); void (*link_change_notify)(struct phy_device *); int (*read_mmd)(struct phy_device *, int, u16); int (*write_mmd)(struct phy_device *, int, u16, u16); int (*read_page)(struct phy_device *); int (*write_page)(struct phy_device *, int); int (*module_info)(struct phy_device *, struct ethtool_modinfo *); int (*module_eeprom)(struct phy_device *, struct ethtool_eeprom *, u8 *); int (*cable_test_start)(struct phy_device *); int (*cable_test_tdr_start)(struct phy_device *, const struct phy_tdr_config *); int (*cable_test_get_status)(struct phy_device *, bool *); int (*get_sset_count)(struct phy_device *); void (*get_strings)(struct phy_device *, u8 *); void (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *); int (*get_tunable)(struct phy_device *, struct ethtool_tunable *, void *); int (*set_tunable)(struct phy_device *, struct ethtool_tunable *, const void *); int (*set_loopback)(struct phy_device *, bool); int (*get_sqi)(struct phy_device *); int (*get_sqi_max)(struct phy_device *); }; enum devlink_rate_type { DEVLINK_RATE_TYPE_LEAF = 0, DEVLINK_RATE_TYPE_NODE = 1, }; struct devlink_rate { struct list_head list; enum devlink_rate_type type; struct devlink *devlink; void *priv; u64 tx_share; u64 tx_max; struct devlink_rate *parent; union { struct devlink_port *devlink_port; struct { char *name; refcount_t refcnt; }; }; }; struct arphdr { __be16 ar_hrd; __be16 ar_pro; unsigned char ar_hln; unsigned char ar_pln; __be16 ar_op; }; struct fib_info; struct fib_nh { struct fib_nh_common nh_common; struct hlist_node nh_hash; struct fib_info *nh_parent; __be32 nh_saddr; int nh_saddr_genid; }; struct fib_info { struct hlist_node fib_hash; struct hlist_node fib_lhash; struct list_head nh_list; struct net *fib_net; refcount_t fib_treeref; refcount_t fib_clntref; unsigned int fib_flags; unsigned char fib_dead; unsigned char fib_protocol; unsigned char fib_scope; unsigned char fib_type; __be32 fib_prefsrc; u32 fib_tb_id; u32 fib_priority; struct dst_metrics *fib_metrics; int fib_nhs; bool fib_nh_is_v6; bool nh_updated; struct nexthop *nh; struct callback_head rcu; struct fib_nh fib_nh[0]; }; struct nh_info; struct nh_group; struct nexthop { struct rb_node rb_node; struct list_head fi_list; struct list_head f6i_list; struct list_head fdb_list; struct list_head grp_list; struct net *net; u32 id; u8 protocol; u8 nh_flags; bool is_group; refcount_t refcnt; struct callback_head rcu; union { struct nh_info *nh_info; struct nh_group *nh_grp; }; }; enum lwtunnel_encap_types { LWTUNNEL_ENCAP_NONE = 0, LWTUNNEL_ENCAP_MPLS = 1, LWTUNNEL_ENCAP_IP = 2, LWTUNNEL_ENCAP_ILA = 3, LWTUNNEL_ENCAP_IP6 = 4, LWTUNNEL_ENCAP_SEG6 = 5, LWTUNNEL_ENCAP_BPF = 6, LWTUNNEL_ENCAP_SEG6_LOCAL = 7, LWTUNNEL_ENCAP_RPL = 8, LWTUNNEL_ENCAP_IOAM6 = 9, __LWTUNNEL_ENCAP_MAX = 10, }; struct nh_info { struct hlist_node dev_hash; struct nexthop *nh_parent; u8 family; bool reject_nh; bool fdb_nh; union { struct fib_nh_common fib_nhc; struct fib_nh fib_nh; struct fib6_nh fib6_nh; }; }; struct nh_grp_entry; struct nh_res_bucket { struct nh_grp_entry *nh_entry; atomic_long_t used_time; long unsigned int migrated_time; bool occupied; u8 nh_flags; }; struct nh_grp_entry { struct nexthop *nh; u8 weight; union { struct { atomic_t upper_bound; } hthr; struct { struct list_head uw_nh_entry; u16 count_buckets; u16 wants_buckets; } res; }; struct list_head nh_list; struct nexthop *nh_parent; }; struct nh_res_table { struct net *net; u32 nhg_id; struct delayed_work upkeep_dw; struct list_head uw_nh_entries; long unsigned int unbalanced_since; u32 idle_timer; u32 unbalanced_timer; u16 num_nh_buckets; struct nh_res_bucket nh_buckets[0]; }; struct nh_group { struct nh_group *spare; u16 num_nh; bool is_multipath; bool hash_threshold; bool resilient; bool fdb_nh; bool has_v4; struct nh_res_table *res_table; struct nh_grp_entry nh_entries[0]; }; enum metadata_type { METADATA_IP_TUNNEL = 0, METADATA_HW_PORT_MUX = 1, }; struct hw_port_info { struct net_device *lower_dev; u32 port_id; }; struct metadata_dst { struct dst_entry dst; enum metadata_type type; union { struct ip_tunnel_info tun_info; struct hw_port_info port_info; } u; }; struct gre_base_hdr { __be16 flags; __be16 protocol; }; struct gre_full_hdr { struct gre_base_hdr fixed_header; __be16 csum; __be16 reserved1; __be32 key; __be32 seq; }; struct pptp_gre_header { struct gre_base_hdr gre_hd; __be16 payload_len; __be16 call_id; __be32 seq; __be32 ack; }; struct tipc_basic_hdr { __be32 w[4]; }; struct icmphdr { __u8 type; __u8 code; __sum16 checksum; union { struct { __be16 id; __be16 sequence; } echo; __be32 gateway; struct { __be16 __unused; __be16 mtu; } frag; __u8 reserved[4]; } un; }; enum dccp_state { DCCP_OPEN = 1, DCCP_REQUESTING = 2, DCCP_LISTEN = 10, DCCP_RESPOND = 3, DCCP_ACTIVE_CLOSEREQ = 4, DCCP_PASSIVE_CLOSE = 8, DCCP_CLOSING = 11, DCCP_TIME_WAIT = 6, DCCP_CLOSED = 7, DCCP_NEW_SYN_RECV = 12, DCCP_PARTOPEN = 13, DCCP_PASSIVE_CLOSEREQ = 14, DCCP_MAX_STATES = 15, }; enum l2tp_debug_flags { L2TP_MSG_DEBUG = 1, L2TP_MSG_CONTROL = 2, L2TP_MSG_SEQ = 4, L2TP_MSG_DATA = 8, }; struct pppoe_tag { __be16 tag_type; __be16 tag_len; char tag_data[0]; }; struct pppoe_hdr { __u8 type: 4; __u8 ver: 4; __u8 code; __be16 sid; __be16 length; struct pppoe_tag tag[0]; }; struct mpls_label { __be32 entry; }; struct clock_identity { u8 id[8]; }; struct port_identity { struct clock_identity clock_identity; __be16 port_number; }; struct ptp_header { u8 tsmt; u8 ver; __be16 message_length; u8 domain_number; u8 reserved1; u8 flag_field[2]; __be64 correction; __be32 reserved2; struct port_identity source_port_identity; __be16 sequence_id; u8 control; u8 log_message_interval; } __attribute__((packed)); enum batadv_packettype { BATADV_IV_OGM = 0, BATADV_BCAST = 1, BATADV_CODED = 2, BATADV_ELP = 3, BATADV_OGM2 = 4, BATADV_UNICAST = 64, BATADV_UNICAST_FRAG = 65, BATADV_UNICAST_4ADDR = 66, BATADV_ICMP = 67, BATADV_UNICAST_TVLV = 68, }; struct batadv_unicast_packet { __u8 packet_type; __u8 version; __u8 ttl; __u8 ttvn; __u8 dest[6]; }; struct _flow_keys_digest_data { __be16 n_proto; u8 ip_proto; u8 padding; __be32 ports; __be32 src; __be32 dst; }; struct rps_sock_flow_table { u32 mask; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; u32 ents[0]; }; struct qdisc_walker { int stop; int skip; int count; int (*fn)(struct Qdisc *, long unsigned int, struct qdisc_walker *); }; struct ipv4_devconf { void *sysctl; int data[33]; long unsigned int state[1]; }; enum { IF_OPER_UNKNOWN = 0, IF_OPER_NOTPRESENT = 1, IF_OPER_DOWN = 2, IF_OPER_LOWERLAYERDOWN = 3, IF_OPER_TESTING = 4, IF_OPER_DORMANT = 5, IF_OPER_UP = 6, }; struct ifbond { __s32 bond_mode; __s32 num_slaves; __s32 miimon; }; typedef struct ifbond ifbond; struct ifslave { __s32 slave_id; char slave_name[16]; __s8 link; __s8 state; __u32 link_failure_count; }; typedef struct ifslave ifslave; enum { NAPIF_STATE_SCHED = 1, NAPIF_STATE_MISSED = 2, NAPIF_STATE_DISABLE = 4, NAPIF_STATE_NPSVC = 8, NAPIF_STATE_LISTED = 16, NAPIF_STATE_NO_BUSY_POLL = 32, NAPIF_STATE_IN_BUSY_POLL = 64, NAPIF_STATE_PREFER_BUSY_POLL = 128, NAPIF_STATE_THREADED = 256, NAPIF_STATE_SCHED_THREADED = 512, }; struct net_device_path_stack { int num_paths; struct net_device_path path[5]; }; struct bpf_xdp_link { struct bpf_link link; struct net_device *dev; int flags; }; struct netdev_net_notifier { struct list_head list; struct notifier_block *nb; }; struct in_ifaddr; struct ip_mc_list; struct in_device { struct net_device *dev; netdevice_tracker dev_tracker; refcount_t refcnt; int dead; struct in_ifaddr *ifa_list; struct ip_mc_list *mc_list; struct ip_mc_list **mc_hash; int mc_count; spinlock_t mc_tomb_lock; struct ip_mc_list *mc_tomb; long unsigned int mr_v1_seen; long unsigned int mr_v2_seen; long unsigned int mr_maxdelay; long unsigned int mr_qi; long unsigned int mr_qri; unsigned char mr_qrv; unsigned char mr_gq_running; u32 mr_ifc_count; struct timer_list mr_gq_timer; struct timer_list mr_ifc_timer; struct neigh_parms *arp_parms; struct ipv4_devconf cnf; struct callback_head callback_head; }; struct packet_type { __be16 type; bool ignore_outgoing; struct net_device *dev; int (*func)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *); void (*list_func)(struct list_head *, struct packet_type *, struct net_device *); bool (*id_match)(struct packet_type *, struct sock *); void *af_packet_priv; struct list_head list; }; struct netdev_notifier_info_ext { struct netdev_notifier_info info; union { u32 mtu; } ext; }; struct netdev_notifier_change_info { struct netdev_notifier_info info; unsigned int flags_changed; }; struct netdev_notifier_changeupper_info { struct netdev_notifier_info info; struct net_device *upper_dev; bool master; bool linking; void *upper_info; }; struct netdev_notifier_changelowerstate_info { struct netdev_notifier_info info; void *lower_state_info; }; struct netdev_notifier_pre_changeaddr_info { struct netdev_notifier_info info; const unsigned char *dev_addr; }; typedef int (*bpf_op_t)(struct net_device *, struct netdev_bpf *); enum { NESTED_SYNC_IMM_BIT = 0, NESTED_SYNC_TODO_BIT = 1, }; struct netdev_nested_priv { unsigned char flags; void *data; }; struct netdev_bonding_info { ifslave slave; ifbond master; }; struct netdev_notifier_bonding_info { struct netdev_notifier_info info; struct netdev_bonding_info bonding_info; }; enum qdisc_state_t { __QDISC_STATE_SCHED = 0, __QDISC_STATE_DEACTIVATED = 1, __QDISC_STATE_MISSED = 2, __QDISC_STATE_DRAINING = 3, }; enum qdisc_state2_t { __QDISC_STATE2_RUNNING = 0, }; struct tcf_walker { int stop; int skip; int count; bool nonempty; long unsigned int cookie; int (*fn)(struct tcf_proto *, void *, struct tcf_walker *); }; struct udp_hslot; struct udp_table { struct udp_hslot *hash; struct udp_hslot *hash2; unsigned int mask; unsigned int log; }; enum { IPV4_DEVCONF_FORWARDING = 1, IPV4_DEVCONF_MC_FORWARDING = 2, IPV4_DEVCONF_PROXY_ARP = 3, IPV4_DEVCONF_ACCEPT_REDIRECTS = 4, IPV4_DEVCONF_SECURE_REDIRECTS = 5, IPV4_DEVCONF_SEND_REDIRECTS = 6, IPV4_DEVCONF_SHARED_MEDIA = 7, IPV4_DEVCONF_RP_FILTER = 8, IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE = 9, IPV4_DEVCONF_BOOTP_RELAY = 10, IPV4_DEVCONF_LOG_MARTIANS = 11, IPV4_DEVCONF_TAG = 12, IPV4_DEVCONF_ARPFILTER = 13, IPV4_DEVCONF_MEDIUM_ID = 14, IPV4_DEVCONF_NOXFRM = 15, IPV4_DEVCONF_NOPOLICY = 16, IPV4_DEVCONF_FORCE_IGMP_VERSION = 17, IPV4_DEVCONF_ARP_ANNOUNCE = 18, IPV4_DEVCONF_ARP_IGNORE = 19, IPV4_DEVCONF_PROMOTE_SECONDARIES = 20, IPV4_DEVCONF_ARP_ACCEPT = 21, IPV4_DEVCONF_ARP_NOTIFY = 22, IPV4_DEVCONF_ACCEPT_LOCAL = 23, IPV4_DEVCONF_SRC_VMARK = 24, IPV4_DEVCONF_PROXY_ARP_PVLAN = 25, IPV4_DEVCONF_ROUTE_LOCALNET = 26, IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL = 27, IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL = 28, IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 29, IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 30, IPV4_DEVCONF_DROP_GRATUITOUS_ARP = 31, IPV4_DEVCONF_BC_FORWARDING = 32, IPV4_DEVCONF_ARP_EVICT_NOCARRIER = 33, __IPV4_DEVCONF_MAX = 34, }; struct udp_hslot { struct hlist_head head; int count; spinlock_t lock; }; enum dma_transaction_type { DMA_MEMCPY = 0, DMA_XOR = 1, DMA_PQ = 2, DMA_XOR_VAL = 3, DMA_PQ_VAL = 4, DMA_MEMSET = 5, DMA_MEMSET_SG = 6, DMA_INTERRUPT = 7, DMA_PRIVATE = 8, DMA_ASYNC_TX = 9, DMA_SLAVE = 10, DMA_CYCLIC = 11, DMA_INTERLEAVE = 12, DMA_COMPLETION_NO_ORDER = 13, DMA_REPEAT = 14, DMA_LOAD_EOT = 15, DMA_TX_TYPE_END = 16, }; enum sum_check_bits { SUM_CHECK_P = 0, SUM_CHECK_Q = 1, }; struct in_ifaddr { struct hlist_node hash; struct in_ifaddr *ifa_next; struct in_device *ifa_dev; struct callback_head callback_head; __be32 ifa_local; __be32 ifa_address; __be32 ifa_mask; __u32 ifa_rt_priority; __be32 ifa_broadcast; unsigned char ifa_scope; unsigned char ifa_prefixlen; __u32 ifa_flags; char ifa_label[16]; __u32 ifa_valid_lft; __u32 ifa_preferred_lft; long unsigned int ifa_cstamp; long unsigned int ifa_tstamp; }; struct udp_tunnel_info { short unsigned int type; sa_family_t sa_family; __be16 port; u8 hw_priv; }; struct udp_tunnel_nic_shared { struct udp_tunnel_nic *udp_tunnel_nic_info; struct list_head devices; }; struct dev_kfree_skb_cb { enum skb_free_reason reason; }; struct netdev_adjacent { struct net_device *dev; netdevice_tracker dev_tracker; bool master; bool ignore; u16 ref_nr; void *private; struct list_head list; struct callback_head rcu; }; enum { NDA_UNSPEC = 0, NDA_DST = 1, NDA_LLADDR = 2, NDA_CACHEINFO = 3, NDA_PROBES = 4, NDA_VLAN = 5, NDA_PORT = 6, NDA_VNI = 7, NDA_IFINDEX = 8, NDA_MASTER = 9, NDA_LINK_NETNSID = 10, NDA_SRC_VNI = 11, NDA_PROTOCOL = 12, NDA_NH_ID = 13, NDA_FDB_EXT_ATTRS = 14, NDA_FLAGS_EXT = 15, __NDA_MAX = 16, }; struct nda_cacheinfo { __u32 ndm_confirmed; __u32 ndm_used; __u32 ndm_updated; __u32 ndm_refcnt; }; struct ndt_stats { __u64 ndts_allocs; __u64 ndts_destroys; __u64 ndts_hash_grows; __u64 ndts_res_failed; __u64 ndts_lookups; __u64 ndts_hits; __u64 ndts_rcv_probes_mcast; __u64 ndts_rcv_probes_ucast; __u64 ndts_periodic_gc_runs; __u64 ndts_forced_gc_runs; __u64 ndts_table_fulls; }; enum { NDTPA_UNSPEC = 0, NDTPA_IFINDEX = 1, NDTPA_REFCNT = 2, NDTPA_REACHABLE_TIME = 3, NDTPA_BASE_REACHABLE_TIME = 4, NDTPA_RETRANS_TIME = 5, NDTPA_GC_STALETIME = 6, NDTPA_DELAY_PROBE_TIME = 7, NDTPA_QUEUE_LEN = 8, NDTPA_APP_PROBES = 9, NDTPA_UCAST_PROBES = 10, NDTPA_MCAST_PROBES = 11, NDTPA_ANYCAST_DELAY = 12, NDTPA_PROXY_DELAY = 13, NDTPA_PROXY_QLEN = 14, NDTPA_LOCKTIME = 15, NDTPA_QUEUE_LENBYTES = 16, NDTPA_MCAST_REPROBES = 17, NDTPA_PAD = 18, __NDTPA_MAX = 19, }; struct ndtmsg { __u8 ndtm_family; __u8 ndtm_pad1; __u16 ndtm_pad2; }; struct ndt_config { __u16 ndtc_key_len; __u16 ndtc_entry_size; __u32 ndtc_entries; __u32 ndtc_last_flush; __u32 ndtc_last_rand; __u32 ndtc_hash_rnd; __u32 ndtc_hash_mask; __u32 ndtc_hash_chain_gc; __u32 ndtc_proxy_qlen; }; enum { NDTA_UNSPEC = 0, NDTA_NAME = 1, NDTA_THRESH1 = 2, NDTA_THRESH2 = 3, NDTA_THRESH3 = 4, NDTA_CONFIG = 5, NDTA_PARMS = 6, NDTA_STATS = 7, NDTA_GC_INTERVAL = 8, NDTA_PAD = 9, __NDTA_MAX = 10, }; enum { RTN_UNSPEC = 0, RTN_UNICAST = 1, RTN_LOCAL = 2, RTN_BROADCAST = 3, RTN_ANYCAST = 4, RTN_MULTICAST = 5, RTN_BLACKHOLE = 6, RTN_UNREACHABLE = 7, RTN_PROHIBIT = 8, RTN_THROW = 9, RTN_NAT = 10, RTN_XRESOLVE = 11, __RTN_MAX = 12, }; enum { NEIGH_ARP_TABLE = 0, NEIGH_ND_TABLE = 1, NEIGH_DN_TABLE = 2, NEIGH_NR_TABLES = 3, NEIGH_LINK_TABLE = 3, }; struct neigh_seq_state { struct seq_net_private p; struct neigh_table *tbl; struct neigh_hash_table *nht; void * (*neigh_sub_iter)(struct neigh_seq_state *, struct neighbour *, loff_t *); unsigned int bucket; unsigned int flags; }; struct neighbour_cb { long unsigned int sched_next; unsigned int flags; }; enum netevent_notif_type { NETEVENT_NEIGH_UPDATE = 1, NETEVENT_REDIRECT = 2, NETEVENT_DELAY_PROBE_TIME_UPDATE = 3, NETEVENT_IPV4_MPATH_HASH_UPDATE = 4, NETEVENT_IPV6_MPATH_HASH_UPDATE = 5, NETEVENT_IPV4_FWD_UPDATE_PRIORITY_UPDATE = 6, }; struct neigh_dump_filter { int master_idx; int dev_idx; }; struct neigh_sysctl_table { struct ctl_table_header *sysctl_header; struct ctl_table neigh_vars[21]; }; struct netlink_dump_control { int (*start)(struct netlink_callback *); int (*dump)(struct sk_buff *, struct netlink_callback *); int (*done)(struct netlink_callback *); void *data; struct module *module; u32 min_dump_alloc; }; struct rtnl_link_stats { __u32 rx_packets; __u32 tx_packets; __u32 rx_bytes; __u32 tx_bytes; __u32 rx_errors; __u32 tx_errors; __u32 rx_dropped; __u32 tx_dropped; __u32 multicast; __u32 collisions; __u32 rx_length_errors; __u32 rx_over_errors; __u32 rx_crc_errors; __u32 rx_frame_errors; __u32 rx_fifo_errors; __u32 rx_missed_errors; __u32 tx_aborted_errors; __u32 tx_carrier_errors; __u32 tx_fifo_errors; __u32 tx_heartbeat_errors; __u32 tx_window_errors; __u32 rx_compressed; __u32 tx_compressed; __u32 rx_nohandler; }; struct rtnl_link_ifmap { __u64 mem_start; __u64 mem_end; __u64 base_addr; __u16 irq; __u8 dma; __u8 port; }; enum { IFLA_UNSPEC = 0, IFLA_ADDRESS = 1, IFLA_BROADCAST = 2, IFLA_IFNAME = 3, IFLA_MTU = 4, IFLA_LINK = 5, IFLA_QDISC = 6, IFLA_STATS = 7, IFLA_COST = 8, IFLA_PRIORITY = 9, IFLA_MASTER = 10, IFLA_WIRELESS = 11, IFLA_PROTINFO = 12, IFLA_TXQLEN = 13, IFLA_MAP = 14, IFLA_WEIGHT = 15, IFLA_OPERSTATE = 16, IFLA_LINKMODE = 17, IFLA_LINKINFO = 18, IFLA_NET_NS_PID = 19, IFLA_IFALIAS = 20, IFLA_NUM_VF = 21, IFLA_VFINFO_LIST = 22, IFLA_STATS64 = 23, IFLA_VF_PORTS = 24, IFLA_PORT_SELF = 25, IFLA_AF_SPEC = 26, IFLA_GROUP = 27, IFLA_NET_NS_FD = 28, IFLA_EXT_MASK = 29, IFLA_PROMISCUITY = 30, IFLA_NUM_TX_QUEUES = 31, IFLA_NUM_RX_QUEUES = 32, IFLA_CARRIER = 33, IFLA_PHYS_PORT_ID = 34, IFLA_CARRIER_CHANGES = 35, IFLA_PHYS_SWITCH_ID = 36, IFLA_LINK_NETNSID = 37, IFLA_PHYS_PORT_NAME = 38, IFLA_PROTO_DOWN = 39, IFLA_GSO_MAX_SEGS = 40, IFLA_GSO_MAX_SIZE = 41, IFLA_PAD = 42, IFLA_XDP = 43, IFLA_EVENT = 44, IFLA_NEW_NETNSID = 45, IFLA_IF_NETNSID = 46, IFLA_TARGET_NETNSID = 46, IFLA_CARRIER_UP_COUNT = 47, IFLA_CARRIER_DOWN_COUNT = 48, IFLA_NEW_IFINDEX = 49, IFLA_MIN_MTU = 50, IFLA_MAX_MTU = 51, IFLA_PROP_LIST = 52, IFLA_ALT_IFNAME = 53, IFLA_PERM_ADDRESS = 54, IFLA_PROTO_DOWN_REASON = 55, IFLA_PARENT_DEV_NAME = 56, IFLA_PARENT_DEV_BUS_NAME = 57, __IFLA_MAX = 58, }; enum { IFLA_PROTO_DOWN_REASON_UNSPEC = 0, IFLA_PROTO_DOWN_REASON_MASK = 1, IFLA_PROTO_DOWN_REASON_VALUE = 2, __IFLA_PROTO_DOWN_REASON_CNT = 3, IFLA_PROTO_DOWN_REASON_MAX = 2, }; enum { IFLA_BRPORT_UNSPEC = 0, IFLA_BRPORT_STATE = 1, IFLA_BRPORT_PRIORITY = 2, IFLA_BRPORT_COST = 3, IFLA_BRPORT_MODE = 4, IFLA_BRPORT_GUARD = 5, IFLA_BRPORT_PROTECT = 6, IFLA_BRPORT_FAST_LEAVE = 7, IFLA_BRPORT_LEARNING = 8, IFLA_BRPORT_UNICAST_FLOOD = 9, IFLA_BRPORT_PROXYARP = 10, IFLA_BRPORT_LEARNING_SYNC = 11, IFLA_BRPORT_PROXYARP_WIFI = 12, IFLA_BRPORT_ROOT_ID = 13, IFLA_BRPORT_BRIDGE_ID = 14, IFLA_BRPORT_DESIGNATED_PORT = 15, IFLA_BRPORT_DESIGNATED_COST = 16, IFLA_BRPORT_ID = 17, IFLA_BRPORT_NO = 18, IFLA_BRPORT_TOPOLOGY_CHANGE_ACK = 19, IFLA_BRPORT_CONFIG_PENDING = 20, IFLA_BRPORT_MESSAGE_AGE_TIMER = 21, IFLA_BRPORT_FORWARD_DELAY_TIMER = 22, IFLA_BRPORT_HOLD_TIMER = 23, IFLA_BRPORT_FLUSH = 24, IFLA_BRPORT_MULTICAST_ROUTER = 25, IFLA_BRPORT_PAD = 26, IFLA_BRPORT_MCAST_FLOOD = 27, IFLA_BRPORT_MCAST_TO_UCAST = 28, IFLA_BRPORT_VLAN_TUNNEL = 29, IFLA_BRPORT_BCAST_FLOOD = 30, IFLA_BRPORT_GROUP_FWD_MASK = 31, IFLA_BRPORT_NEIGH_SUPPRESS = 32, IFLA_BRPORT_ISOLATED = 33, IFLA_BRPORT_BACKUP_PORT = 34, IFLA_BRPORT_MRP_RING_OPEN = 35, IFLA_BRPORT_MRP_IN_OPEN = 36, IFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT = 37, IFLA_BRPORT_MCAST_EHT_HOSTS_CNT = 38, __IFLA_BRPORT_MAX = 39, }; enum { IFLA_INFO_UNSPEC = 0, IFLA_INFO_KIND = 1, IFLA_INFO_DATA = 2, IFLA_INFO_XSTATS = 3, IFLA_INFO_SLAVE_KIND = 4, IFLA_INFO_SLAVE_DATA = 5, __IFLA_INFO_MAX = 6, }; enum { IFLA_VF_INFO_UNSPEC = 0, IFLA_VF_INFO = 1, __IFLA_VF_INFO_MAX = 2, }; enum { IFLA_VF_UNSPEC = 0, IFLA_VF_MAC = 1, IFLA_VF_VLAN = 2, IFLA_VF_TX_RATE = 3, IFLA_VF_SPOOFCHK = 4, IFLA_VF_LINK_STATE = 5, IFLA_VF_RATE = 6, IFLA_VF_RSS_QUERY_EN = 7, IFLA_VF_STATS = 8, IFLA_VF_TRUST = 9, IFLA_VF_IB_NODE_GUID = 10, IFLA_VF_IB_PORT_GUID = 11, IFLA_VF_VLAN_LIST = 12, IFLA_VF_BROADCAST = 13, __IFLA_VF_MAX = 14, }; struct ifla_vf_mac { __u32 vf; __u8 mac[32]; }; struct ifla_vf_broadcast { __u8 broadcast[32]; }; struct ifla_vf_vlan { __u32 vf; __u32 vlan; __u32 qos; }; enum { IFLA_VF_VLAN_INFO_UNSPEC = 0, IFLA_VF_VLAN_INFO = 1, __IFLA_VF_VLAN_INFO_MAX = 2, }; struct ifla_vf_vlan_info { __u32 vf; __u32 vlan; __u32 qos; __be16 vlan_proto; }; struct ifla_vf_tx_rate { __u32 vf; __u32 rate; }; struct ifla_vf_rate { __u32 vf; __u32 min_tx_rate; __u32 max_tx_rate; }; struct ifla_vf_spoofchk { __u32 vf; __u32 setting; }; struct ifla_vf_link_state { __u32 vf; __u32 link_state; }; struct ifla_vf_rss_query_en { __u32 vf; __u32 setting; }; enum { IFLA_VF_STATS_RX_PACKETS = 0, IFLA_VF_STATS_TX_PACKETS = 1, IFLA_VF_STATS_RX_BYTES = 2, IFLA_VF_STATS_TX_BYTES = 3, IFLA_VF_STATS_BROADCAST = 4, IFLA_VF_STATS_MULTICAST = 5, IFLA_VF_STATS_PAD = 6, IFLA_VF_STATS_RX_DROPPED = 7, IFLA_VF_STATS_TX_DROPPED = 8, __IFLA_VF_STATS_MAX = 9, }; struct ifla_vf_trust { __u32 vf; __u32 setting; }; enum { IFLA_VF_PORT_UNSPEC = 0, IFLA_VF_PORT = 1, __IFLA_VF_PORT_MAX = 2, }; enum { IFLA_PORT_UNSPEC = 0, IFLA_PORT_VF = 1, IFLA_PORT_PROFILE = 2, IFLA_PORT_VSI_TYPE = 3, IFLA_PORT_INSTANCE_UUID = 4, IFLA_PORT_HOST_UUID = 5, IFLA_PORT_REQUEST = 6, IFLA_PORT_RESPONSE = 7, __IFLA_PORT_MAX = 8, }; struct if_stats_msg { __u8 family; __u8 pad1; __u16 pad2; __u32 ifindex; __u32 filter_mask; }; enum { IFLA_STATS_UNSPEC = 0, IFLA_STATS_LINK_64 = 1, IFLA_STATS_LINK_XSTATS = 2, IFLA_STATS_LINK_XSTATS_SLAVE = 3, IFLA_STATS_LINK_OFFLOAD_XSTATS = 4, IFLA_STATS_AF_SPEC = 5, __IFLA_STATS_MAX = 6, }; enum { IFLA_OFFLOAD_XSTATS_UNSPEC = 0, IFLA_OFFLOAD_XSTATS_CPU_HIT = 1, __IFLA_OFFLOAD_XSTATS_MAX = 2, }; enum { XDP_ATTACHED_NONE = 0, XDP_ATTACHED_DRV = 1, XDP_ATTACHED_SKB = 2, XDP_ATTACHED_HW = 3, XDP_ATTACHED_MULTI = 4, }; enum { IFLA_XDP_UNSPEC = 0, IFLA_XDP_FD = 1, IFLA_XDP_ATTACHED = 2, IFLA_XDP_FLAGS = 3, IFLA_XDP_PROG_ID = 4, IFLA_XDP_DRV_PROG_ID = 5, IFLA_XDP_SKB_PROG_ID = 6, IFLA_XDP_HW_PROG_ID = 7, IFLA_XDP_EXPECTED_FD = 8, __IFLA_XDP_MAX = 9, }; enum { IFLA_EVENT_NONE = 0, IFLA_EVENT_REBOOT = 1, IFLA_EVENT_FEATURES = 2, IFLA_EVENT_BONDING_FAILOVER = 3, IFLA_EVENT_NOTIFY_PEERS = 4, IFLA_EVENT_IGMP_RESEND = 5, IFLA_EVENT_BONDING_OPTIONS = 6, }; enum { IFLA_BRIDGE_FLAGS = 0, IFLA_BRIDGE_MODE = 1, IFLA_BRIDGE_VLAN_INFO = 2, IFLA_BRIDGE_VLAN_TUNNEL_INFO = 3, IFLA_BRIDGE_MRP = 4, IFLA_BRIDGE_CFM = 5, __IFLA_BRIDGE_MAX = 6, }; enum { BR_MCAST_DIR_RX = 0, BR_MCAST_DIR_TX = 1, BR_MCAST_DIR_SIZE = 2, }; enum rtattr_type_t { RTA_UNSPEC = 0, RTA_DST = 1, RTA_SRC = 2, RTA_IIF = 3, RTA_OIF = 4, RTA_GATEWAY = 5, RTA_PRIORITY = 6, RTA_PREFSRC = 7, RTA_METRICS = 8, RTA_MULTIPATH = 9, RTA_PROTOINFO = 10, RTA_FLOW = 11, RTA_CACHEINFO = 12, RTA_SESSION = 13, RTA_MP_ALGO = 14, RTA_TABLE = 15, RTA_MARK = 16, RTA_MFC_STATS = 17, RTA_VIA = 18, RTA_NEWDST = 19, RTA_PREF = 20, RTA_ENCAP_TYPE = 21, RTA_ENCAP = 22, RTA_EXPIRES = 23, RTA_PAD = 24, RTA_UID = 25, RTA_TTL_PROPAGATE = 26, RTA_IP_PROTO = 27, RTA_SPORT = 28, RTA_DPORT = 29, RTA_NH_ID = 30, __RTA_MAX = 31, }; struct rta_cacheinfo { __u32 rta_clntref; __u32 rta_lastuse; __s32 rta_expires; __u32 rta_error; __u32 rta_used; __u32 rta_id; __u32 rta_ts; __u32 rta_tsage; }; struct ifinfomsg { unsigned char ifi_family; unsigned char __ifi_pad; short unsigned int ifi_type; int ifi_index; unsigned int ifi_flags; unsigned int ifi_change; }; struct rtnl_af_ops { struct list_head list; int family; int (*fill_link_af)(struct sk_buff *, const struct net_device *, u32); size_t (*get_link_af_size)(const struct net_device *, u32); int (*validate_link_af)(const struct net_device *, const struct nlattr *, struct netlink_ext_ack *); int (*set_link_af)(struct net_device *, const struct nlattr *, struct netlink_ext_ack *); int (*fill_stats_af)(struct sk_buff *, const struct net_device *); size_t (*get_stats_af_size)(const struct net_device *); }; struct rtnl_link { rtnl_doit_func doit; rtnl_dumpit_func dumpit; struct module *owner; unsigned int flags; struct callback_head rcu; }; enum { IF_LINK_MODE_DEFAULT = 0, IF_LINK_MODE_DORMANT = 1, IF_LINK_MODE_TESTING = 2, }; enum lw_bits { LW_URGENT = 0, }; struct seg6_pernet_data { struct mutex lock; struct in6_addr *tun_src; }; enum { BPF_F_RECOMPUTE_CSUM = 1, BPF_F_INVALIDATE_HASH = 2, }; enum { BPF_F_HDR_FIELD_MASK = 15, }; enum { BPF_F_PSEUDO_HDR = 16, BPF_F_MARK_MANGLED_0 = 32, BPF_F_MARK_ENFORCE = 64, }; enum { BPF_F_INGRESS = 1, }; enum { BPF_F_TUNINFO_IPV6 = 1, }; enum { BPF_F_ZERO_CSUM_TX = 2, BPF_F_DONT_FRAGMENT = 4, BPF_F_SEQ_NUMBER = 8, }; enum { BPF_CSUM_LEVEL_QUERY = 0, BPF_CSUM_LEVEL_INC = 1, BPF_CSUM_LEVEL_DEC = 2, BPF_CSUM_LEVEL_RESET = 3, }; enum { BPF_F_ADJ_ROOM_FIXED_GSO = 1, BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 2, BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 4, BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 8, BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 16, BPF_F_ADJ_ROOM_NO_CSUM_RESET = 32, BPF_F_ADJ_ROOM_ENCAP_L2_ETH = 64, }; enum { BPF_ADJ_ROOM_ENCAP_L2_MASK = 255, BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 56, }; enum { BPF_SK_LOOKUP_F_REPLACE = 1, BPF_SK_LOOKUP_F_NO_REUSEPORT = 2, }; enum bpf_adj_room_mode { BPF_ADJ_ROOM_NET = 0, BPF_ADJ_ROOM_MAC = 1, }; enum bpf_hdr_start_off { BPF_HDR_START_MAC = 0, BPF_HDR_START_NET = 1, }; struct bpf_tunnel_key { __u32 tunnel_id; union { __u32 remote_ipv4; __u32 remote_ipv6[4]; }; __u8 tunnel_tos; __u8 tunnel_ttl; __u16 tunnel_ext; __u32 tunnel_label; }; struct bpf_tcp_sock { __u32 snd_cwnd; __u32 srtt_us; __u32 rtt_min; __u32 snd_ssthresh; __u32 rcv_nxt; __u32 snd_nxt; __u32 snd_una; __u32 mss_cache; __u32 ecn_flags; __u32 rate_delivered; __u32 rate_interval_us; __u32 packets_out; __u32 retrans_out; __u32 total_retrans; __u32 segs_in; __u32 data_segs_in; __u32 segs_out; __u32 data_segs_out; __u32 lost_out; __u32 sacked_out; __u64 bytes_received; __u64 bytes_acked; __u32 dsack_dups; __u32 delivered; __u32 delivered_ce; __u32 icsk_retransmits; }; struct bpf_sock_tuple { union { struct { __be32 saddr; __be32 daddr; __be16 sport; __be16 dport; } ipv4; struct { __be32 saddr[4]; __be32 daddr[4]; __be16 sport; __be16 dport; } ipv6; }; }; struct bpf_xdp_sock { __u32 queue_id; }; enum { BPF_SOCK_OPS_RTO_CB_FLAG = 1, BPF_SOCK_OPS_RETRANS_CB_FLAG = 2, BPF_SOCK_OPS_STATE_CB_FLAG = 4, BPF_SOCK_OPS_RTT_CB_FLAG = 8, BPF_SOCK_OPS_PARSE_ALL_HDR_OPT_CB_FLAG = 16, BPF_SOCK_OPS_PARSE_UNKNOWN_HDR_OPT_CB_FLAG = 32, BPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG = 64, BPF_SOCK_OPS_ALL_CB_FLAGS = 127, }; enum { BPF_SOCK_OPS_VOID = 0, BPF_SOCK_OPS_TIMEOUT_INIT = 1, BPF_SOCK_OPS_RWND_INIT = 2, BPF_SOCK_OPS_TCP_CONNECT_CB = 3, BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB = 4, BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 5, BPF_SOCK_OPS_NEEDS_ECN = 6, BPF_SOCK_OPS_BASE_RTT = 7, BPF_SOCK_OPS_RTO_CB = 8, BPF_SOCK_OPS_RETRANS_CB = 9, BPF_SOCK_OPS_STATE_CB = 10, BPF_SOCK_OPS_TCP_LISTEN_CB = 11, BPF_SOCK_OPS_RTT_CB = 12, BPF_SOCK_OPS_PARSE_HDR_OPT_CB = 13, BPF_SOCK_OPS_HDR_OPT_LEN_CB = 14, BPF_SOCK_OPS_WRITE_HDR_OPT_CB = 15, }; enum { TCP_BPF_IW = 1001, TCP_BPF_SNDCWND_CLAMP = 1002, TCP_BPF_DELACK_MAX = 1003, TCP_BPF_RTO_MIN = 1004, TCP_BPF_SYN = 1005, TCP_BPF_SYN_IP = 1006, TCP_BPF_SYN_MAC = 1007, }; enum { BPF_LOAD_HDR_OPT_TCP_SYN = 1, }; enum { BPF_FIB_LOOKUP_DIRECT = 1, BPF_FIB_LOOKUP_OUTPUT = 2, }; enum { BPF_FIB_LKUP_RET_SUCCESS = 0, BPF_FIB_LKUP_RET_BLACKHOLE = 1, BPF_FIB_LKUP_RET_UNREACHABLE = 2, BPF_FIB_LKUP_RET_PROHIBIT = 3, BPF_FIB_LKUP_RET_NOT_FWDED = 4, BPF_FIB_LKUP_RET_FWD_DISABLED = 5, BPF_FIB_LKUP_RET_UNSUPP_LWT = 6, BPF_FIB_LKUP_RET_NO_NEIGH = 7, BPF_FIB_LKUP_RET_FRAG_NEEDED = 8, }; struct bpf_fib_lookup { __u8 family; __u8 l4_protocol; __be16 sport; __be16 dport; union { __u16 tot_len; __u16 mtu_result; }; __u32 ifindex; union { __u8 tos; __be32 flowinfo; __u32 rt_metric; }; union { __be32 ipv4_src; __u32 ipv6_src[4]; }; union { __be32 ipv4_dst; __u32 ipv6_dst[4]; }; __be16 h_vlan_proto; __be16 h_vlan_TCI; __u8 smac[6]; __u8 dmac[6]; }; struct bpf_redir_neigh { __u32 nh_family; union { __be32 ipv4_nh; __u32 ipv6_nh[4]; }; }; enum bpf_check_mtu_flags { BPF_MTU_CHK_SEGS = 1, }; enum bpf_check_mtu_ret { BPF_MTU_CHK_RET_SUCCESS = 0, BPF_MTU_CHK_RET_FRAG_NEEDED = 1, BPF_MTU_CHK_RET_SEGS_TOOBIG = 2, }; enum rt_scope_t { RT_SCOPE_UNIVERSE = 0, RT_SCOPE_SITE = 200, RT_SCOPE_LINK = 253, RT_SCOPE_HOST = 254, RT_SCOPE_NOWHERE = 255, }; enum rt_class_t { RT_TABLE_UNSPEC = 0, RT_TABLE_COMPAT = 252, RT_TABLE_DEFAULT = 253, RT_TABLE_MAIN = 254, RT_TABLE_LOCAL = 255, RT_TABLE_MAX = 4294967295, }; struct nl_info { struct nlmsghdr *nlh; struct net *nl_net; u32 portid; u8 skip_notify: 1; u8 skip_notify_kernel: 1; }; struct compat_sock_fprog { u16 len; compat_uptr_t filter; }; struct inet_timewait_sock { struct sock_common __tw_common; __u32 tw_mark; volatile unsigned char tw_substate; unsigned char tw_rcv_wscale; __be16 tw_sport; unsigned int tw_kill: 1; unsigned int tw_transparent: 1; unsigned int tw_flowlabel: 20; unsigned int tw_pad: 2; unsigned int tw_tos: 8; u32 tw_txhash; u32 tw_priority; struct timer_list tw_timer; struct inet_bind_bucket *tw_tb; }; struct tcp_timewait_sock { struct inet_timewait_sock tw_sk; u32 tw_rcv_wnd; u32 tw_ts_offset; u32 tw_ts_recent; u32 tw_last_oow_ack_time; int tw_ts_recent_stamp; u32 tw_tx_delay; }; struct udp_sock { struct inet_sock inet; int pending; unsigned int corkflag; __u8 encap_type; unsigned char no_check6_tx: 1; unsigned char no_check6_rx: 1; unsigned char encap_enabled: 1; unsigned char gro_enabled: 1; unsigned char accept_udp_l4: 1; unsigned char accept_udp_fraglist: 1; __u16 len; __u16 gso_size; __u16 pcslen; __u16 pcrlen; __u8 pcflag; __u8 unused[3]; int (*encap_rcv)(struct sock *, struct sk_buff *); int (*encap_err_lookup)(struct sock *, struct sk_buff *); void (*encap_destroy)(struct sock *); struct sk_buff * (*gro_receive)(struct sock *, struct list_head *, struct sk_buff *); int (*gro_complete)(struct sock *, struct sk_buff *, int); long: 64; long: 64; long: 64; long: 64; struct sk_buff_head reader_queue; int forward_deficit; long: 32; long: 64; long: 64; long: 64; long: 64; }; struct udp6_sock { struct udp_sock udp; struct ipv6_pinfo inet6; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct tcp6_sock { struct tcp_sock tcp; struct ipv6_pinfo inet6; }; struct fib6_result; struct fib6_config; struct ipv6_stub { int (*ipv6_sock_mc_join)(struct sock *, int, const struct in6_addr *); int (*ipv6_sock_mc_drop)(struct sock *, int, const struct in6_addr *); struct dst_entry * (*ipv6_dst_lookup_flow)(struct net *, const struct sock *, struct flowi6 *, const struct in6_addr *); int (*ipv6_route_input)(struct sk_buff *); struct fib6_table * (*fib6_get_table)(struct net *, u32); int (*fib6_lookup)(struct net *, int, struct flowi6 *, struct fib6_result *, int); int (*fib6_table_lookup)(struct net *, struct fib6_table *, int, struct flowi6 *, struct fib6_result *, int); void (*fib6_select_path)(const struct net *, struct fib6_result *, struct flowi6 *, int, bool, const struct sk_buff *, int); u32 (*ip6_mtu_from_fib6)(const struct fib6_result *, const struct in6_addr *, const struct in6_addr *); int (*fib6_nh_init)(struct net *, struct fib6_nh *, struct fib6_config *, gfp_t, struct netlink_ext_ack *); void (*fib6_nh_release)(struct fib6_nh *); void (*fib6_nh_release_dsts)(struct fib6_nh *); void (*fib6_update_sernum)(struct net *, struct fib6_info *); int (*ip6_del_rt)(struct net *, struct fib6_info *, bool); void (*fib6_rt_update)(struct net *, struct fib6_info *, struct nl_info *); void (*udpv6_encap_enable)(); void (*ndisc_send_na)(struct net_device *, const struct in6_addr *, const struct in6_addr *, bool, bool, bool, bool); struct neigh_table *nd_tbl; int (*ipv6_fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *)); struct net_device * (*ipv6_dev_find)(struct net *, const struct in6_addr *, struct net_device *); }; struct fib6_result { struct fib6_nh *nh; struct fib6_info *f6i; u32 fib6_flags; u8 fib6_type; struct rt6_info *rt6; }; struct fib6_config { u32 fc_table; u32 fc_metric; int fc_dst_len; int fc_src_len; int fc_ifindex; u32 fc_flags; u32 fc_protocol; u16 fc_type; u16 fc_delete_all_nh: 1; u16 fc_ignore_dev_down: 1; u16 __unused: 14; u32 fc_nh_id; struct in6_addr fc_dst; struct in6_addr fc_src; struct in6_addr fc_prefsrc; struct in6_addr fc_gateway; long unsigned int fc_expires; struct nlattr *fc_mx; int fc_mx_len; int fc_mp_len; struct nlattr *fc_mp; struct nl_info fc_nlinfo; struct nlattr *fc_encap; u16 fc_encap_type; bool fc_is_fdb; }; struct ipv6_bpf_stub { int (*inet6_bind)(struct sock *, struct sockaddr *, int, u32); struct sock * (*udp6_lib_lookup)(struct net *, const struct in6_addr *, __be16, const struct in6_addr *, __be16, int, int, struct udp_table *, struct sk_buff *); }; struct fib_table; struct fib_result { __be32 prefix; unsigned char prefixlen; unsigned char nh_sel; unsigned char type; unsigned char scope; u32 tclassid; struct fib_nh_common *nhc; struct fib_info *fi; struct fib_table *table; struct hlist_head *fa_head; }; struct fib_table { struct hlist_node tb_hlist; u32 tb_id; int tb_num_default; struct callback_head rcu; long unsigned int *tb_data; long unsigned int __data[0]; }; enum { INET_ECN_NOT_ECT = 0, INET_ECN_ECT_1 = 1, INET_ECN_ECT_0 = 2, INET_ECN_CE = 3, INET_ECN_MASK = 3, }; struct tcp_skb_cb { __u32 seq; __u32 end_seq; union { __u32 tcp_tw_isn; struct { u16 tcp_gso_segs; u16 tcp_gso_size; }; }; __u8 tcp_flags; __u8 sacked; __u8 ip_dsfield; __u8 txstamp_ack: 1; __u8 eor: 1; __u8 has_rxtstamp: 1; __u8 unused: 5; __u32 ack_seq; union { struct { __u32 is_app_limited: 1; __u32 delivered_ce: 20; __u32 unused: 11; __u32 delivered; u64 first_tx_mstamp; u64 delivered_mstamp; } tx; union { struct inet_skb_parm h4; struct inet6_skb_parm h6; } header; }; }; struct strp_stats { long long unsigned int msgs; long long unsigned int bytes; unsigned int mem_fail; unsigned int need_more_hdr; unsigned int msg_too_big; unsigned int msg_timeouts; unsigned int bad_hdr_len; }; struct strparser; struct strp_callbacks { int (*parse_msg)(struct strparser *, struct sk_buff *); void (*rcv_msg)(struct strparser *, struct sk_buff *); int (*read_sock_done)(struct strparser *, int); void (*abort_parser)(struct strparser *, int); void (*lock)(struct strparser *); void (*unlock)(struct strparser *); }; struct strparser { struct sock *sk; u32 stopped: 1; u32 paused: 1; u32 aborted: 1; u32 interrupted: 1; u32 unrecov_intr: 1; struct sk_buff **skb_nextp; struct sk_buff *skb_head; unsigned int need_bytes; struct delayed_work msg_timer_work; struct work_struct work; struct strp_stats stats; struct strp_callbacks cb; }; struct strp_msg { int full_len; int offset; }; struct _strp_msg { struct strp_msg strp; int accum_len; }; struct sk_skb_cb { unsigned char data[20]; struct _strp_msg strp; u64 temp_reg; }; struct xdp_umem { void *addrs; u64 size; u32 headroom; u32 chunk_size; u32 chunks; u32 npgs; struct user_struct *user; refcount_t users; u8 flags; bool zc; struct page **pgs; int id; struct list_head xsk_dma_list; struct work_struct work; }; struct xsk_queue; struct xdp_sock { struct sock sk; long: 64; long: 64; long: 64; long: 64; long: 64; struct xsk_queue *rx; struct net_device *dev; struct xdp_umem *umem; struct list_head flush_node; struct xsk_buff_pool *pool; u16 queue_id; bool zc; enum { XSK_READY = 0, XSK_BOUND = 1, XSK_UNBOUND = 2, } state; long: 64; struct xsk_queue *tx; struct list_head tx_list; spinlock_t rx_lock; u64 rx_dropped; u64 rx_queue_full; struct list_head map_list; spinlock_t map_list_lock; struct mutex mutex; struct xsk_queue *fq_tmp; struct xsk_queue *cq_tmp; long: 64; }; struct tls_crypto_info { __u16 version; __u16 cipher_type; }; struct tls12_crypto_info_aes_gcm_128 { struct tls_crypto_info info; unsigned char iv[8]; unsigned char key[16]; unsigned char salt[4]; unsigned char rec_seq[8]; }; struct tls12_crypto_info_aes_gcm_256 { struct tls_crypto_info info; unsigned char iv[8]; unsigned char key[32]; unsigned char salt[4]; unsigned char rec_seq[8]; }; struct tls12_crypto_info_chacha20_poly1305 { struct tls_crypto_info info; unsigned char iv[12]; unsigned char key[32]; unsigned char salt[0]; unsigned char rec_seq[8]; }; struct tls12_crypto_info_sm4_gcm { struct tls_crypto_info info; unsigned char iv[8]; unsigned char key[16]; unsigned char salt[4]; unsigned char rec_seq[8]; }; struct tls12_crypto_info_sm4_ccm { struct tls_crypto_info info; unsigned char iv[8]; unsigned char key[16]; unsigned char salt[4]; unsigned char rec_seq[8]; }; struct tls_sw_context_rx { struct crypto_aead *aead_recv; struct crypto_wait async_wait; struct strparser strp; struct sk_buff_head rx_list; void (*saved_data_ready)(struct sock *); struct sk_buff *recv_pkt; u8 control; u8 async_capable: 1; u8 decrypted: 1; atomic_t decrypt_pending; spinlock_t decrypt_compl_lock; bool async_notify; }; struct cipher_context { char *iv; char *rec_seq; }; union tls_crypto_context { struct tls_crypto_info info; union { struct tls12_crypto_info_aes_gcm_128 aes_gcm_128; struct tls12_crypto_info_aes_gcm_256 aes_gcm_256; struct tls12_crypto_info_chacha20_poly1305 chacha20_poly1305; struct tls12_crypto_info_sm4_gcm sm4_gcm; struct tls12_crypto_info_sm4_ccm sm4_ccm; }; }; struct tls_prot_info { u16 version; u16 cipher_type; u16 prepend_size; u16 tag_size; u16 overhead_size; u16 iv_size; u16 salt_size; u16 rec_seq_size; u16 aad_size; u16 tail_size; }; struct tls_context { struct tls_prot_info prot_info; u8 tx_conf: 3; u8 rx_conf: 3; int (*push_pending_record)(struct sock *, int); void (*sk_write_space)(struct sock *); void *priv_ctx_tx; void *priv_ctx_rx; struct net_device *netdev; struct cipher_context tx; struct cipher_context rx; struct scatterlist *partially_sent_record; u16 partially_sent_offset; bool in_tcp_sendpages; bool pending_open_record_frags; struct mutex tx_lock; long unsigned int flags; struct proto *sk_proto; struct sock *sk; void (*sk_destruct)(struct sock *); union tls_crypto_context crypto_send; union tls_crypto_context crypto_recv; struct list_head list; refcount_t refcount; struct callback_head rcu; }; typedef u64 (*btf_bpf_skb_get_pay_offset)(struct sk_buff *); typedef u64 (*btf_bpf_skb_get_nlattr)(struct sk_buff *, u32, u32); typedef u64 (*btf_bpf_skb_get_nlattr_nest)(struct sk_buff *, u32, u32); typedef u64 (*btf_bpf_skb_load_helper_8)(const struct sk_buff *, const void *, int, int); typedef u64 (*btf_bpf_skb_load_helper_8_no_cache)(const struct sk_buff *, int); typedef u64 (*btf_bpf_skb_load_helper_16)(const struct sk_buff *, const void *, int, int); typedef u64 (*btf_bpf_skb_load_helper_16_no_cache)(const struct sk_buff *, int); typedef u64 (*btf_bpf_skb_load_helper_32)(const struct sk_buff *, const void *, int, int); typedef u64 (*btf_bpf_skb_load_helper_32_no_cache)(const struct sk_buff *, int); struct bpf_scratchpad { union { __be32 diff[128]; u8 buff[512]; }; }; typedef u64 (*btf_bpf_skb_store_bytes)(struct sk_buff *, u32, const void *, u32, u64); typedef u64 (*btf_bpf_skb_load_bytes)(const struct sk_buff *, u32, void *, u32); typedef u64 (*btf_bpf_flow_dissector_load_bytes)(const struct bpf_flow_dissector *, u32, void *, u32); typedef u64 (*btf_bpf_skb_load_bytes_relative)(const struct sk_buff *, u32, void *, u32, u32); typedef u64 (*btf_bpf_skb_pull_data)(struct sk_buff *, u32); typedef u64 (*btf_bpf_sk_fullsock)(struct sock *); typedef u64 (*btf_sk_skb_pull_data)(struct sk_buff *, u32); typedef u64 (*btf_bpf_l3_csum_replace)(struct sk_buff *, u32, u64, u64, u64); typedef u64 (*btf_bpf_l4_csum_replace)(struct sk_buff *, u32, u64, u64, u64); typedef u64 (*btf_bpf_csum_diff)(__be32 *, u32, __be32 *, u32, __wsum); typedef u64 (*btf_bpf_csum_update)(struct sk_buff *, __wsum); typedef u64 (*btf_bpf_csum_level)(struct sk_buff *, u64); enum { BPF_F_NEIGH = 2, BPF_F_PEER = 4, BPF_F_NEXTHOP = 8, }; typedef u64 (*btf_bpf_clone_redirect)(struct sk_buff *, u32, u64); typedef u64 (*btf_bpf_redirect)(u32, u64); typedef u64 (*btf_bpf_redirect_peer)(u32, u64); typedef u64 (*btf_bpf_redirect_neigh)(u32, struct bpf_redir_neigh *, int, u64); typedef u64 (*btf_bpf_msg_apply_bytes)(struct sk_msg *, u32); typedef u64 (*btf_bpf_msg_cork_bytes)(struct sk_msg *, u32); typedef u64 (*btf_bpf_msg_pull_data)(struct sk_msg *, u32, u32, u64); typedef u64 (*btf_bpf_msg_push_data)(struct sk_msg *, u32, u32, u64); typedef u64 (*btf_bpf_msg_pop_data)(struct sk_msg *, u32, u32, u64); typedef u64 (*btf_bpf_get_cgroup_classid)(const struct sk_buff *); typedef u64 (*btf_bpf_get_route_realm)(const struct sk_buff *); typedef u64 (*btf_bpf_get_hash_recalc)(struct sk_buff *); typedef u64 (*btf_bpf_set_hash_invalid)(struct sk_buff *); typedef u64 (*btf_bpf_set_hash)(struct sk_buff *, u32); typedef u64 (*btf_bpf_skb_vlan_push)(struct sk_buff *, __be16, u16); typedef u64 (*btf_bpf_skb_vlan_pop)(struct sk_buff *); typedef u64 (*btf_bpf_skb_change_proto)(struct sk_buff *, __be16, u64); typedef u64 (*btf_bpf_skb_change_type)(struct sk_buff *, u32); typedef u64 (*btf_sk_skb_adjust_room)(struct sk_buff *, s32, u32, u64); typedef u64 (*btf_bpf_skb_adjust_room)(struct sk_buff *, s32, u32, u64); typedef u64 (*btf_bpf_skb_change_tail)(struct sk_buff *, u32, u64); typedef u64 (*btf_sk_skb_change_tail)(struct sk_buff *, u32, u64); typedef u64 (*btf_bpf_skb_change_head)(struct sk_buff *, u32, u64); typedef u64 (*btf_sk_skb_change_head)(struct sk_buff *, u32, u64); typedef u64 (*btf_bpf_xdp_adjust_head)(struct xdp_buff *, int); typedef u64 (*btf_bpf_xdp_adjust_tail)(struct xdp_buff *, int); typedef u64 (*btf_bpf_xdp_adjust_meta)(struct xdp_buff *, int); typedef u64 (*btf_bpf_xdp_redirect)(u32, u64); typedef u64 (*btf_bpf_xdp_redirect_map)(struct bpf_map *, u32, u64); typedef u64 (*btf_bpf_skb_event_output)(struct sk_buff *, struct bpf_map *, u64, void *, u64); typedef u64 (*btf_bpf_skb_get_tunnel_key)(struct sk_buff *, struct bpf_tunnel_key *, u32, u64); typedef u64 (*btf_bpf_skb_get_tunnel_opt)(struct sk_buff *, u8 *, u32); typedef u64 (*btf_bpf_skb_set_tunnel_key)(struct sk_buff *, const struct bpf_tunnel_key *, u32, u64); typedef u64 (*btf_bpf_skb_set_tunnel_opt)(struct sk_buff *, const u8 *, u32); typedef u64 (*btf_bpf_skb_under_cgroup)(struct sk_buff *, struct bpf_map *, u32); typedef u64 (*btf_bpf_skb_cgroup_id)(const struct sk_buff *); typedef u64 (*btf_bpf_skb_ancestor_cgroup_id)(const struct sk_buff *, int); typedef u64 (*btf_bpf_sk_cgroup_id)(struct sock *); typedef u64 (*btf_bpf_sk_ancestor_cgroup_id)(struct sock *, int); typedef u64 (*btf_bpf_xdp_event_output)(struct xdp_buff *, struct bpf_map *, u64, void *, u64); typedef u64 (*btf_bpf_get_socket_cookie)(struct sk_buff *); typedef u64 (*btf_bpf_get_socket_cookie_sock_addr)(struct bpf_sock_addr_kern *); typedef u64 (*btf_bpf_get_socket_cookie_sock)(struct sock *); typedef u64 (*btf_bpf_get_socket_ptr_cookie)(struct sock *); typedef u64 (*btf_bpf_get_socket_cookie_sock_ops)(struct bpf_sock_ops_kern *); typedef u64 (*btf_bpf_get_netns_cookie_sock)(struct sock *); typedef u64 (*btf_bpf_get_netns_cookie_sock_addr)(struct bpf_sock_addr_kern *); typedef u64 (*btf_bpf_get_netns_cookie_sock_ops)(struct bpf_sock_ops_kern *); typedef u64 (*btf_bpf_get_netns_cookie_sk_msg)(struct sk_msg *); typedef u64 (*btf_bpf_get_socket_uid)(struct sk_buff *); typedef u64 (*btf_bpf_sk_setsockopt)(struct sock *, int, int, char *, int); typedef u64 (*btf_bpf_sk_getsockopt)(struct sock *, int, int, char *, int); typedef u64 (*btf_bpf_sock_addr_setsockopt)(struct bpf_sock_addr_kern *, int, int, char *, int); typedef u64 (*btf_bpf_sock_addr_getsockopt)(struct bpf_sock_addr_kern *, int, int, char *, int); typedef u64 (*btf_bpf_sock_ops_setsockopt)(struct bpf_sock_ops_kern *, int, int, char *, int); typedef u64 (*btf_bpf_sock_ops_getsockopt)(struct bpf_sock_ops_kern *, int, int, char *, int); typedef u64 (*btf_bpf_sock_ops_cb_flags_set)(struct bpf_sock_ops_kern *, int); typedef u64 (*btf_bpf_bind)(struct bpf_sock_addr_kern *, struct sockaddr *, int); typedef u64 (*btf_bpf_xdp_fib_lookup)(struct xdp_buff *, struct bpf_fib_lookup *, int, u32); typedef u64 (*btf_bpf_skb_fib_lookup)(struct sk_buff *, struct bpf_fib_lookup *, int, u32); typedef u64 (*btf_bpf_skb_check_mtu)(struct sk_buff *, u32, u32 *, s32, u64); typedef u64 (*btf_bpf_xdp_check_mtu)(struct xdp_buff *, u32, u32 *, s32, u64); typedef u64 (*btf_bpf_lwt_in_push_encap)(struct sk_buff *, u32, void *, u32); typedef u64 (*btf_bpf_lwt_xmit_push_encap)(struct sk_buff *, u32, void *, u32); typedef u64 (*btf_bpf_skc_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64); typedef u64 (*btf_bpf_sk_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64); typedef u64 (*btf_bpf_sk_lookup_udp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64); typedef u64 (*btf_bpf_sk_release)(struct sock *); typedef u64 (*btf_bpf_xdp_sk_lookup_udp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64); typedef u64 (*btf_bpf_xdp_skc_lookup_tcp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64); typedef u64 (*btf_bpf_xdp_sk_lookup_tcp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64); typedef u64 (*btf_bpf_sock_addr_skc_lookup_tcp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64); typedef u64 (*btf_bpf_sock_addr_sk_lookup_tcp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64); typedef u64 (*btf_bpf_sock_addr_sk_lookup_udp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64); typedef u64 (*btf_bpf_tcp_sock)(struct sock *); typedef u64 (*btf_bpf_get_listener_sock)(struct sock *); typedef u64 (*btf_bpf_skb_ecn_set_ce)(struct sk_buff *); typedef u64 (*btf_bpf_tcp_check_syncookie)(struct sock *, void *, u32, struct tcphdr *, u32); typedef u64 (*btf_bpf_tcp_gen_syncookie)(struct sock *, void *, u32, struct tcphdr *, u32); typedef u64 (*btf_bpf_sk_assign)(struct sk_buff *, struct sock *, u64); typedef u64 (*btf_bpf_sock_ops_load_hdr_opt)(struct bpf_sock_ops_kern *, void *, u32, u64); typedef u64 (*btf_bpf_sock_ops_store_hdr_opt)(struct bpf_sock_ops_kern *, const void *, u32, u64); typedef u64 (*btf_bpf_sock_ops_reserve_hdr_opt)(struct bpf_sock_ops_kern *, u32, u64); typedef u64 (*btf_sk_select_reuseport)(struct sk_reuseport_kern *, struct bpf_map *, void *, u32); typedef u64 (*btf_sk_reuseport_load_bytes)(const struct sk_reuseport_kern *, u32, void *, u32); typedef u64 (*btf_sk_reuseport_load_bytes_relative)(const struct sk_reuseport_kern *, u32, void *, u32, u32); typedef u64 (*btf_bpf_sk_lookup_assign)(struct bpf_sk_lookup_kern *, struct sock *, u64); typedef u64 (*btf_bpf_skc_to_tcp6_sock)(struct sock *); typedef u64 (*btf_bpf_skc_to_tcp_sock)(struct sock *); typedef u64 (*btf_bpf_skc_to_tcp_timewait_sock)(struct sock *); typedef u64 (*btf_bpf_skc_to_tcp_request_sock)(struct sock *); typedef u64 (*btf_bpf_skc_to_udp6_sock)(struct sock *); typedef u64 (*btf_bpf_skc_to_unix_sock)(struct sock *); typedef u64 (*btf_bpf_sock_from_file)(struct file *); struct bpf_cpu_map_entry___2; struct bpf_dtab_netdev___2; struct unix_sock; enum { INET_DIAG_REQ_NONE = 0, INET_DIAG_REQ_BYTECODE = 1, INET_DIAG_REQ_SK_BPF_STORAGES = 2, INET_DIAG_REQ_PROTOCOL = 3, __INET_DIAG_REQ_MAX = 4, }; struct sock_diag_req { __u8 sdiag_family; __u8 sdiag_protocol; }; struct sock_diag_handler { __u8 family; int (*dump)(struct sk_buff *, struct nlmsghdr *); int (*get_info)(struct sk_buff *, struct sock *); int (*destroy)(struct sk_buff *, struct nlmsghdr *); }; struct broadcast_sk { struct sock *sk; struct work_struct work; }; struct hwtstamp_config { int flags; int tx_type; int rx_filter; }; enum hwtstamp_tx_types { HWTSTAMP_TX_OFF = 0, HWTSTAMP_TX_ON = 1, HWTSTAMP_TX_ONESTEP_SYNC = 2, HWTSTAMP_TX_ONESTEP_P2P = 3, __HWTSTAMP_TX_CNT = 4, }; enum hwtstamp_rx_filters { HWTSTAMP_FILTER_NONE = 0, HWTSTAMP_FILTER_ALL = 1, HWTSTAMP_FILTER_SOME = 2, HWTSTAMP_FILTER_PTP_V1_L4_EVENT = 3, HWTSTAMP_FILTER_PTP_V1_L4_SYNC = 4, HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ = 5, HWTSTAMP_FILTER_PTP_V2_L4_EVENT = 6, HWTSTAMP_FILTER_PTP_V2_L4_SYNC = 7, HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ = 8, HWTSTAMP_FILTER_PTP_V2_L2_EVENT = 9, HWTSTAMP_FILTER_PTP_V2_L2_SYNC = 10, HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ = 11, HWTSTAMP_FILTER_PTP_V2_EVENT = 12, HWTSTAMP_FILTER_PTP_V2_SYNC = 13, HWTSTAMP_FILTER_PTP_V2_DELAY_REQ = 14, HWTSTAMP_FILTER_NTP_ALL = 15, __HWTSTAMP_FILTER_CNT = 16, }; struct compat_ifconf { compat_int_t ifc_len; compat_caddr_t ifcbuf; }; struct tso_t { int next_frag_idx; int size; void *data; u16 ip_id; u8 tlen; bool ipv6; u32 tcp_seq; }; struct fib_notifier_info { int family; struct netlink_ext_ack *extack; }; enum fib_event_type { FIB_EVENT_ENTRY_REPLACE = 0, FIB_EVENT_ENTRY_APPEND = 1, FIB_EVENT_ENTRY_ADD = 2, FIB_EVENT_ENTRY_DEL = 3, FIB_EVENT_RULE_ADD = 4, FIB_EVENT_RULE_DEL = 5, FIB_EVENT_NH_ADD = 6, FIB_EVENT_NH_DEL = 7, FIB_EVENT_VIF_ADD = 8, FIB_EVENT_VIF_DEL = 9, }; struct fib_notifier_net { struct list_head fib_notifier_ops; struct atomic_notifier_head fib_chain; }; struct xdp_frame_bulk { int count; void *xa; void *q[16]; }; struct xdp_attachment_info { struct bpf_prog *prog; u32 flags; }; struct xdp_buff_xsk; struct xsk_buff_pool { struct device *dev; struct net_device *netdev; struct list_head xsk_tx_list; spinlock_t xsk_tx_list_lock; refcount_t users; struct xdp_umem *umem; struct work_struct work; struct list_head free_list; u32 heads_cnt; u16 queue_id; long: 16; long: 64; long: 64; long: 64; struct xsk_queue *fq; struct xsk_queue *cq; dma_addr_t *dma_pages; struct xdp_buff_xsk *heads; u64 chunk_mask; u64 addrs_cnt; u32 free_list_cnt; u32 dma_pages_cnt; u32 free_heads_cnt; u32 headroom; u32 chunk_size; u32 chunk_shift; u32 frame_len; u8 cached_need_wakeup; bool uses_need_wakeup; bool dma_need_sync; bool unaligned; void *addrs; spinlock_t cq_lock; struct xdp_buff_xsk *free_heads[0]; long: 64; long: 64; long: 64; long: 64; }; struct xdp_buff_xsk { struct xdp_buff xdp; dma_addr_t dma; dma_addr_t frame_dma; struct xsk_buff_pool *pool; u64 orig_addr; struct list_head free_list_node; }; struct flow_dissector_key_ct { u16 ct_state; u16 ct_zone; u32 ct_mark; u32 ct_labels[4]; }; struct flow_match { struct flow_dissector *dissector; void *mask; void *key; }; struct flow_match_meta { struct flow_dissector_key_meta *key; struct flow_dissector_key_meta *mask; }; struct flow_match_basic { struct flow_dissector_key_basic *key; struct flow_dissector_key_basic *mask; }; struct flow_match_control { struct flow_dissector_key_control *key; struct flow_dissector_key_control *mask; }; struct flow_match_eth_addrs { struct flow_dissector_key_eth_addrs *key; struct flow_dissector_key_eth_addrs *mask; }; struct flow_match_vlan { struct flow_dissector_key_vlan *key; struct flow_dissector_key_vlan *mask; }; struct flow_match_ipv4_addrs { struct flow_dissector_key_ipv4_addrs *key; struct flow_dissector_key_ipv4_addrs *mask; }; struct flow_match_ipv6_addrs { struct flow_dissector_key_ipv6_addrs *key; struct flow_dissector_key_ipv6_addrs *mask; }; struct flow_match_ip { struct flow_dissector_key_ip *key; struct flow_dissector_key_ip *mask; }; struct flow_match_ports { struct flow_dissector_key_ports *key; struct flow_dissector_key_ports *mask; }; struct flow_match_icmp { struct flow_dissector_key_icmp *key; struct flow_dissector_key_icmp *mask; }; struct flow_match_tcp { struct flow_dissector_key_tcp *key; struct flow_dissector_key_tcp *mask; }; struct flow_match_mpls { struct flow_dissector_key_mpls *key; struct flow_dissector_key_mpls *mask; }; struct flow_match_enc_keyid { struct flow_dissector_key_keyid *key; struct flow_dissector_key_keyid *mask; }; struct flow_match_enc_opts { struct flow_dissector_key_enc_opts *key; struct flow_dissector_key_enc_opts *mask; }; struct flow_match_ct { struct flow_dissector_key_ct *key; struct flow_dissector_key_ct *mask; }; enum flow_action_id { FLOW_ACTION_ACCEPT = 0, FLOW_ACTION_DROP = 1, FLOW_ACTION_TRAP = 2, FLOW_ACTION_GOTO = 3, FLOW_ACTION_REDIRECT = 4, FLOW_ACTION_MIRRED = 5, FLOW_ACTION_REDIRECT_INGRESS = 6, FLOW_ACTION_MIRRED_INGRESS = 7, FLOW_ACTION_VLAN_PUSH = 8, FLOW_ACTION_VLAN_POP = 9, FLOW_ACTION_VLAN_MANGLE = 10, FLOW_ACTION_TUNNEL_ENCAP = 11, FLOW_ACTION_TUNNEL_DECAP = 12, FLOW_ACTION_MANGLE = 13, FLOW_ACTION_ADD = 14, FLOW_ACTION_CSUM = 15, FLOW_ACTION_MARK = 16, FLOW_ACTION_PTYPE = 17, FLOW_ACTION_PRIORITY = 18, FLOW_ACTION_WAKE = 19, FLOW_ACTION_QUEUE = 20, FLOW_ACTION_SAMPLE = 21, FLOW_ACTION_POLICE = 22, FLOW_ACTION_CT = 23, FLOW_ACTION_CT_METADATA = 24, FLOW_ACTION_MPLS_PUSH = 25, FLOW_ACTION_MPLS_POP = 26, FLOW_ACTION_MPLS_MANGLE = 27, FLOW_ACTION_GATE = 28, FLOW_ACTION_PPPOE_PUSH = 29, NUM_FLOW_ACTIONS = 30, }; enum flow_action_mangle_base { FLOW_ACT_MANGLE_UNSPEC = 0, FLOW_ACT_MANGLE_HDR_TYPE_ETH = 1, FLOW_ACT_MANGLE_HDR_TYPE_IP4 = 2, FLOW_ACT_MANGLE_HDR_TYPE_IP6 = 3, FLOW_ACT_MANGLE_HDR_TYPE_TCP = 4, FLOW_ACT_MANGLE_HDR_TYPE_UDP = 5, }; enum flow_action_hw_stats { FLOW_ACTION_HW_STATS_IMMEDIATE = 1, FLOW_ACTION_HW_STATS_DELAYED = 2, FLOW_ACTION_HW_STATS_ANY = 3, FLOW_ACTION_HW_STATS_DISABLED = 4, FLOW_ACTION_HW_STATS_DONT_CARE = 7, }; typedef void (*action_destr)(void *); struct flow_action_cookie { u32 cookie_len; u8 cookie[0]; }; struct psample_group; struct nf_flowtable; struct action_gate_entry; struct ip_tunnel_info___2; struct flow_action_entry { enum flow_action_id id; enum flow_action_hw_stats hw_stats; action_destr destructor; void *destructor_priv; union { u32 chain_index; struct net_device *dev; struct { u16 vid; __be16 proto; u8 prio; } vlan; struct { enum flow_action_mangle_base htype; u32 offset; u32 mask; u32 val; } mangle; struct ip_tunnel_info___2 *tunnel; u32 csum_flags; u32 mark; u16 ptype; u32 priority; struct { u32 ctx; u32 index; u8 vf; } queue; struct { struct psample_group *psample_group; u32 rate; u32 trunc_size; bool truncate; } sample; struct { u32 index; u32 burst; u64 rate_bytes_ps; u64 burst_pkt; u64 rate_pkt_ps; u32 mtu; } police; struct { int action; u16 zone; struct nf_flowtable *flow_table; } ct; struct { long unsigned int cookie; u32 mark; u32 labels[4]; bool orig_dir; } ct_metadata; struct { u32 label; __be16 proto; u8 tc; u8 bos; u8 ttl; } mpls_push; struct { __be16 proto; } mpls_pop; struct { u32 label; u8 tc; u8 bos; u8 ttl; } mpls_mangle; struct { u32 index; s32 prio; u64 basetime; u64 cycletime; u64 cycletimeext; u32 num_entries; struct action_gate_entry *entries; } gate; struct { u16 sid; } pppoe; }; struct flow_action_cookie *cookie; }; struct flow_action { unsigned int num_entries; struct flow_action_entry entries[0]; }; struct flow_rule { struct flow_match match; struct flow_action action; }; enum flow_block_command { FLOW_BLOCK_BIND = 0, FLOW_BLOCK_UNBIND = 1, }; enum flow_block_binder_type { FLOW_BLOCK_BINDER_TYPE_UNSPEC = 0, FLOW_BLOCK_BINDER_TYPE_CLSACT_INGRESS = 1, FLOW_BLOCK_BINDER_TYPE_CLSACT_EGRESS = 2, FLOW_BLOCK_BINDER_TYPE_RED_EARLY_DROP = 3, FLOW_BLOCK_BINDER_TYPE_RED_MARK = 4, }; struct flow_block_offload { enum flow_block_command command; enum flow_block_binder_type binder_type; bool block_shared; bool unlocked_driver_cb; struct net *net; struct flow_block *block; struct list_head cb_list; struct list_head *driver_block_list; struct netlink_ext_ack *extack; struct Qdisc *sch; struct list_head *cb_list_head; }; struct flow_block_cb; struct flow_block_indr { struct list_head list; struct net_device *dev; struct Qdisc *sch; enum flow_block_binder_type binder_type; void *data; void *cb_priv; void (*cleanup)(struct flow_block_cb *); }; struct flow_block_cb { struct list_head driver_list; struct list_head list; flow_setup_cb_t *cb; void *cb_ident; void *cb_priv; void (*release)(void *); struct flow_block_indr indr; unsigned int refcnt; }; typedef int flow_indr_block_bind_cb_t(struct net_device *, struct Qdisc *, void *, enum tc_setup_type, void *, void *, void (*)(struct flow_block_cb *)); struct flow_indr_dev { struct list_head list; flow_indr_block_bind_cb_t *cb; void *cb_priv; refcount_t refcnt; }; struct flow_indir_dev_info { void *data; struct net_device *dev; struct Qdisc *sch; enum tc_setup_type type; void (*cleanup)(struct flow_block_cb *); struct list_head list; enum flow_block_command command; enum flow_block_binder_type binder_type; struct list_head *cb_list; }; struct offload_callbacks { struct sk_buff * (*gso_segment)(struct sk_buff *, netdev_features_t); struct sk_buff * (*gro_receive)(struct list_head *, struct sk_buff *); int (*gro_complete)(struct sk_buff *, int); }; struct packet_offload { __be16 type; u16 priority; struct offload_callbacks callbacks; struct list_head list; }; struct napi_gro_cb { void *frag0; unsigned int frag0_len; int data_offset; u16 flush; u16 flush_id; u16 count; u16 gro_remcsum_start; long unsigned int age; u16 proto; u8 same_flow: 1; u8 encap_mark: 1; u8 csum_valid: 1; u8 csum_cnt: 3; u8 free: 2; u8 is_ipv6: 1; u8 is_fou: 1; u8 is_atomic: 1; u8 recursion_counter: 4; u8 is_flist: 1; __wsum csum; struct sk_buff *last; }; struct netdev_queue_attribute { struct attribute attr; ssize_t (*show)(struct netdev_queue *, char *); ssize_t (*store)(struct netdev_queue *, const char *, size_t); }; struct trace_event_raw_kfree_skb { struct trace_entry ent; void *skbaddr; void *location; short unsigned int protocol; char __data[0]; }; struct trace_event_raw_consume_skb { struct trace_entry ent; void *skbaddr; char __data[0]; }; struct trace_event_raw_skb_copy_datagram_iovec { struct trace_entry ent; const void *skbaddr; int len; char __data[0]; }; struct trace_event_data_offsets_kfree_skb {}; struct trace_event_data_offsets_consume_skb {}; struct trace_event_data_offsets_skb_copy_datagram_iovec {}; typedef void (*btf_trace_kfree_skb)(void *, struct sk_buff *, void *); typedef void (*btf_trace_consume_skb)(void *, struct sk_buff *); typedef void (*btf_trace_skb_copy_datagram_iovec)(void *, const struct sk_buff *, int); struct trace_event_raw_net_dev_start_xmit { struct trace_entry ent; u32 __data_loc_name; u16 queue_mapping; const void *skbaddr; bool vlan_tagged; u16 vlan_proto; u16 vlan_tci; u16 protocol; u8 ip_summed; unsigned int len; unsigned int data_len; int network_offset; bool transport_offset_valid; int transport_offset; u8 tx_flags; u16 gso_size; u16 gso_segs; u16 gso_type; char __data[0]; }; struct trace_event_raw_net_dev_xmit { struct trace_entry ent; void *skbaddr; unsigned int len; int rc; u32 __data_loc_name; char __data[0]; }; struct trace_event_raw_net_dev_xmit_timeout { struct trace_entry ent; u32 __data_loc_name; u32 __data_loc_driver; int queue_index; char __data[0]; }; struct trace_event_raw_net_dev_template { struct trace_entry ent; void *skbaddr; unsigned int len; u32 __data_loc_name; char __data[0]; }; struct trace_event_raw_net_dev_rx_verbose_template { struct trace_entry ent; u32 __data_loc_name; unsigned int napi_id; u16 queue_mapping; const void *skbaddr; bool vlan_tagged; u16 vlan_proto; u16 vlan_tci; u16 protocol; u8 ip_summed; u32 hash; bool l4_hash; unsigned int len; unsigned int data_len; unsigned int truesize; bool mac_header_valid; int mac_header; unsigned char nr_frags; u16 gso_size; u16 gso_type; char __data[0]; }; struct trace_event_raw_net_dev_rx_exit_template { struct trace_entry ent; int ret; char __data[0]; }; struct trace_event_data_offsets_net_dev_start_xmit { u32 name; }; struct trace_event_data_offsets_net_dev_xmit { u32 name; }; struct trace_event_data_offsets_net_dev_xmit_timeout { u32 name; u32 driver; }; struct trace_event_data_offsets_net_dev_template { u32 name; }; struct trace_event_data_offsets_net_dev_rx_verbose_template { u32 name; }; struct trace_event_data_offsets_net_dev_rx_exit_template {}; typedef void (*btf_trace_net_dev_start_xmit)(void *, const struct sk_buff *, const struct net_device *); typedef void (*btf_trace_net_dev_xmit)(void *, struct sk_buff *, int, struct net_device *, unsigned int); typedef void (*btf_trace_net_dev_xmit_timeout)(void *, struct net_device *, int); typedef void (*btf_trace_net_dev_queue)(void *, struct sk_buff *); typedef void (*btf_trace_netif_receive_skb)(void *, struct sk_buff *); typedef void (*btf_trace_netif_rx)(void *, struct sk_buff *); typedef void (*btf_trace_napi_gro_frags_entry)(void *, const struct sk_buff *); typedef void (*btf_trace_napi_gro_receive_entry)(void *, const struct sk_buff *); typedef void (*btf_trace_netif_receive_skb_entry)(void *, const struct sk_buff *); typedef void (*btf_trace_netif_receive_skb_list_entry)(void *, const struct sk_buff *); typedef void (*btf_trace_netif_rx_entry)(void *, const struct sk_buff *); typedef void (*btf_trace_netif_rx_ni_entry)(void *, const struct sk_buff *); typedef void (*btf_trace_napi_gro_frags_exit)(void *, int); typedef void (*btf_trace_napi_gro_receive_exit)(void *, int); typedef void (*btf_trace_netif_receive_skb_exit)(void *, int); typedef void (*btf_trace_netif_rx_exit)(void *, int); typedef void (*btf_trace_netif_rx_ni_exit)(void *, int); typedef void (*btf_trace_netif_receive_skb_list_exit)(void *, int); struct trace_event_raw_napi_poll { struct trace_entry ent; struct napi_struct *napi; u32 __data_loc_dev_name; int work; int budget; char __data[0]; }; struct trace_event_data_offsets_napi_poll { u32 dev_name; }; typedef void (*btf_trace_napi_poll)(void *, struct napi_struct *, int, int); enum tcp_ca_state { TCP_CA_Open = 0, TCP_CA_Disorder = 1, TCP_CA_CWR = 2, TCP_CA_Recovery = 3, TCP_CA_Loss = 4, }; struct trace_event_raw_sock_rcvqueue_full { struct trace_entry ent; int rmem_alloc; unsigned int truesize; int sk_rcvbuf; char __data[0]; }; struct trace_event_raw_sock_exceed_buf_limit { struct trace_entry ent; char name[32]; long int *sysctl_mem; long int allocated; int sysctl_rmem; int rmem_alloc; int sysctl_wmem; int wmem_alloc; int wmem_queued; int kind; char __data[0]; }; struct trace_event_raw_inet_sock_set_state { struct trace_entry ent; const void *skaddr; int oldstate; int newstate; __u16 sport; __u16 dport; __u16 family; __u16 protocol; __u8 saddr[4]; __u8 daddr[4]; __u8 saddr_v6[16]; __u8 daddr_v6[16]; char __data[0]; }; struct trace_event_raw_inet_sk_error_report { struct trace_entry ent; int error; __u16 sport; __u16 dport; __u16 family; __u16 protocol; __u8 saddr[4]; __u8 daddr[4]; __u8 saddr_v6[16]; __u8 daddr_v6[16]; char __data[0]; }; struct trace_event_data_offsets_sock_rcvqueue_full {}; struct trace_event_data_offsets_sock_exceed_buf_limit {}; struct trace_event_data_offsets_inet_sock_set_state {}; struct trace_event_data_offsets_inet_sk_error_report {}; typedef void (*btf_trace_sock_rcvqueue_full)(void *, struct sock *, struct sk_buff *); typedef void (*btf_trace_sock_exceed_buf_limit)(void *, struct sock *, struct proto *, long int, int); typedef void (*btf_trace_inet_sock_set_state)(void *, const struct sock *, const int, const int); typedef void (*btf_trace_inet_sk_error_report)(void *, const struct sock *); struct trace_event_raw_udp_fail_queue_rcv_skb { struct trace_entry ent; int rc; __u16 lport; char __data[0]; }; struct trace_event_data_offsets_udp_fail_queue_rcv_skb {}; typedef void (*btf_trace_udp_fail_queue_rcv_skb)(void *, int, struct sock *); struct trace_event_raw_tcp_event_sk_skb { struct trace_entry ent; const void *skbaddr; const void *skaddr; int state; __u16 sport; __u16 dport; __u16 family; __u8 saddr[4]; __u8 daddr[4]; __u8 saddr_v6[16]; __u8 daddr_v6[16]; char __data[0]; }; struct trace_event_raw_tcp_event_sk { struct trace_entry ent; const void *skaddr; __u16 sport; __u16 dport; __u16 family; __u8 saddr[4]; __u8 daddr[4]; __u8 saddr_v6[16]; __u8 daddr_v6[16]; __u64 sock_cookie; char __data[0]; }; struct trace_event_raw_tcp_retransmit_synack { struct trace_entry ent; const void *skaddr; const void *req; __u16 sport; __u16 dport; __u16 family; __u8 saddr[4]; __u8 daddr[4]; __u8 saddr_v6[16]; __u8 daddr_v6[16]; char __data[0]; }; struct trace_event_raw_tcp_probe { struct trace_entry ent; __u8 saddr[28]; __u8 daddr[28]; __u16 sport; __u16 dport; __u16 family; __u32 mark; __u16 data_len; __u32 snd_nxt; __u32 snd_una; __u32 snd_cwnd; __u32 ssthresh; __u32 snd_wnd; __u32 srtt; __u32 rcv_wnd; __u64 sock_cookie; char __data[0]; }; struct trace_event_raw_tcp_event_skb { struct trace_entry ent; const void *skbaddr; __u8 saddr[28]; __u8 daddr[28]; char __data[0]; }; struct trace_event_data_offsets_tcp_event_sk_skb {}; struct trace_event_data_offsets_tcp_event_sk {}; struct trace_event_data_offsets_tcp_retransmit_synack {}; struct trace_event_data_offsets_tcp_probe {}; struct trace_event_data_offsets_tcp_event_skb {}; typedef void (*btf_trace_tcp_retransmit_skb)(void *, const struct sock *, const struct sk_buff *); typedef void (*btf_trace_tcp_send_reset)(void *, const struct sock *, const struct sk_buff *); typedef void (*btf_trace_tcp_receive_reset)(void *, struct sock *); typedef void (*btf_trace_tcp_destroy_sock)(void *, struct sock *); typedef void (*btf_trace_tcp_rcv_space_adjust)(void *, struct sock *); typedef void (*btf_trace_tcp_retransmit_synack)(void *, const struct sock *, const struct request_sock *); typedef void (*btf_trace_tcp_probe)(void *, struct sock *, struct sk_buff *); typedef void (*btf_trace_tcp_bad_csum)(void *, const struct sk_buff *); struct trace_event_raw_fib_table_lookup { struct trace_entry ent; u32 tb_id; int err; int oif; int iif; u8 proto; __u8 tos; __u8 scope; __u8 flags; __u8 src[4]; __u8 dst[4]; __u8 gw4[4]; __u8 gw6[16]; u16 sport; u16 dport; u32 __data_loc_name; char __data[0]; }; struct trace_event_data_offsets_fib_table_lookup { u32 name; }; typedef void (*btf_trace_fib_table_lookup)(void *, u32, const struct flowi4 *, const struct fib_nh_common *, int); struct trace_event_raw_qdisc_dequeue { struct trace_entry ent; struct Qdisc *qdisc; const struct netdev_queue *txq; int packets; void *skbaddr; int ifindex; u32 handle; u32 parent; long unsigned int txq_state; char __data[0]; }; struct trace_event_raw_qdisc_enqueue { struct trace_entry ent; struct Qdisc *qdisc; const struct netdev_queue *txq; void *skbaddr; int ifindex; u32 handle; u32 parent; char __data[0]; }; struct trace_event_raw_qdisc_reset { struct trace_entry ent; u32 __data_loc_dev; u32 __data_loc_kind; u32 parent; u32 handle; char __data[0]; }; struct trace_event_raw_qdisc_destroy { struct trace_entry ent; u32 __data_loc_dev; u32 __data_loc_kind; u32 parent; u32 handle; char __data[0]; }; struct trace_event_raw_qdisc_create { struct trace_entry ent; u32 __data_loc_dev; u32 __data_loc_kind; u32 parent; char __data[0]; }; struct trace_event_data_offsets_qdisc_dequeue {}; struct trace_event_data_offsets_qdisc_enqueue {}; struct trace_event_data_offsets_qdisc_reset { u32 dev; u32 kind; }; struct trace_event_data_offsets_qdisc_destroy { u32 dev; u32 kind; }; struct trace_event_data_offsets_qdisc_create { u32 dev; u32 kind; }; typedef void (*btf_trace_qdisc_dequeue)(void *, struct Qdisc *, const struct netdev_queue *, int, struct sk_buff *); typedef void (*btf_trace_qdisc_enqueue)(void *, struct Qdisc *, const struct netdev_queue *, struct sk_buff *); typedef void (*btf_trace_qdisc_reset)(void *, struct Qdisc *); typedef void (*btf_trace_qdisc_destroy)(void *, struct Qdisc *); typedef void (*btf_trace_qdisc_create)(void *, const struct Qdisc_ops *, struct net_device *, u32); struct trace_event_raw_neigh_create { struct trace_entry ent; u32 family; u32 __data_loc_dev; int entries; u8 created; u8 gc_exempt; u8 primary_key4[4]; u8 primary_key6[16]; char __data[0]; }; struct trace_event_raw_neigh_update { struct trace_entry ent; u32 family; u32 __data_loc_dev; u8 lladdr[32]; u8 lladdr_len; u8 flags; u8 nud_state; u8 type; u8 dead; int refcnt; __u8 primary_key4[4]; __u8 primary_key6[16]; long unsigned int confirmed; long unsigned int updated; long unsigned int used; u8 new_lladdr[32]; u8 new_state; u32 update_flags; u32 pid; char __data[0]; }; struct trace_event_raw_neigh__update { struct trace_entry ent; u32 family; u32 __data_loc_dev; u8 lladdr[32]; u8 lladdr_len; u8 flags; u8 nud_state; u8 type; u8 dead; int refcnt; __u8 primary_key4[4]; __u8 primary_key6[16]; long unsigned int confirmed; long unsigned int updated; long unsigned int used; u32 err; char __data[0]; }; struct trace_event_data_offsets_neigh_create { u32 dev; }; struct trace_event_data_offsets_neigh_update { u32 dev; }; struct trace_event_data_offsets_neigh__update { u32 dev; }; typedef void (*btf_trace_neigh_create)(void *, struct neigh_table *, struct net_device *, const void *, const struct neighbour *, bool); typedef void (*btf_trace_neigh_update)(void *, struct neighbour *, const u8 *, u8, u32, u32); typedef void (*btf_trace_neigh_update_done)(void *, struct neighbour *, int); typedef void (*btf_trace_neigh_timer_handler)(void *, struct neighbour *, int); typedef void (*btf_trace_neigh_event_send_done)(void *, struct neighbour *, int); typedef void (*btf_trace_neigh_event_send_dead)(void *, struct neighbour *, int); typedef void (*btf_trace_neigh_cleanup_and_release)(void *, struct neighbour *, int); struct dst_cache_pcpu { long unsigned int refresh_ts; struct dst_entry *dst; u32 cookie; union { struct in_addr in_saddr; struct in6_addr in6_saddr; }; }; struct gro_cell; struct gro_cells { struct gro_cell *cells; }; struct gro_cell { struct sk_buff_head napi_skbs; struct napi_struct napi; }; enum netdev_lag_tx_type { NETDEV_LAG_TX_TYPE_UNKNOWN = 0, NETDEV_LAG_TX_TYPE_RANDOM = 1, NETDEV_LAG_TX_TYPE_BROADCAST = 2, NETDEV_LAG_TX_TYPE_ROUNDROBIN = 3, NETDEV_LAG_TX_TYPE_ACTIVEBACKUP = 4, NETDEV_LAG_TX_TYPE_HASH = 5, }; enum netdev_lag_hash { NETDEV_LAG_HASH_NONE = 0, NETDEV_LAG_HASH_L2 = 1, NETDEV_LAG_HASH_L34 = 2, NETDEV_LAG_HASH_L23 = 3, NETDEV_LAG_HASH_E23 = 4, NETDEV_LAG_HASH_E34 = 5, NETDEV_LAG_HASH_VLAN_SRCMAC = 6, NETDEV_LAG_HASH_UNKNOWN = 7, }; struct netdev_lag_upper_info { enum netdev_lag_tx_type tx_type; enum netdev_lag_hash hash_type; }; enum __sk_action { __SK_DROP = 0, __SK_PASS = 1, __SK_REDIRECT = 2, __SK_NONE = 3, }; enum sk_psock_state_bits { SK_PSOCK_TX_ENABLED = 0, }; struct sk_psock_link { struct list_head list; struct bpf_map *map; void *link_raw; }; struct bpf_stab { struct bpf_map map; struct sock **sks; struct sk_psock_progs progs; raw_spinlock_t lock; long: 32; long: 64; long: 64; }; typedef u64 (*btf_bpf_sock_map_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64); typedef u64 (*btf_bpf_sk_redirect_map)(struct sk_buff *, struct bpf_map *, u32, u64); typedef u64 (*btf_bpf_msg_redirect_map)(struct sk_msg *, struct bpf_map *, u32, u64); struct sock_map_seq_info { struct bpf_map *map; struct sock *sk; u32 index; }; struct bpf_iter__sockmap { union { struct bpf_iter_meta *meta; }; union { struct bpf_map *map; }; union { void *key; }; union { struct sock *sk; }; }; struct bpf_shtab_elem { struct callback_head rcu; u32 hash; struct sock *sk; struct hlist_node node; u8 key[0]; }; struct bpf_shtab_bucket { struct hlist_head head; raw_spinlock_t lock; }; struct bpf_shtab { struct bpf_map map; struct bpf_shtab_bucket *buckets; u32 buckets_num; u32 elem_size; struct sk_psock_progs progs; atomic_t count; long: 32; long: 64; }; typedef u64 (*btf_bpf_sock_hash_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64); typedef u64 (*btf_bpf_sk_redirect_hash)(struct sk_buff *, struct bpf_map *, void *, u64); typedef u64 (*btf_bpf_msg_redirect_hash)(struct sk_msg *, struct bpf_map *, void *, u64); struct sock_hash_seq_info { struct bpf_map *map; struct bpf_shtab *htab; u32 bucket_id; }; enum { SK_DIAG_BPF_STORAGE_REQ_NONE = 0, SK_DIAG_BPF_STORAGE_REQ_MAP_FD = 1, __SK_DIAG_BPF_STORAGE_REQ_MAX = 2, }; enum { SK_DIAG_BPF_STORAGE_REP_NONE = 0, SK_DIAG_BPF_STORAGE = 1, __SK_DIAG_BPF_STORAGE_REP_MAX = 2, }; enum { SK_DIAG_BPF_STORAGE_NONE = 0, SK_DIAG_BPF_STORAGE_PAD = 1, SK_DIAG_BPF_STORAGE_MAP_ID = 2, SK_DIAG_BPF_STORAGE_MAP_VALUE = 3, __SK_DIAG_BPF_STORAGE_MAX = 4, }; typedef u64 (*btf_bpf_sk_storage_get)(struct bpf_map *, struct sock *, void *, u64); typedef u64 (*btf_bpf_sk_storage_delete)(struct bpf_map *, struct sock *); typedef u64 (*btf_bpf_sk_storage_get_tracing)(struct bpf_map *, struct sock *, void *, u64); typedef u64 (*btf_bpf_sk_storage_delete_tracing)(struct bpf_map *, struct sock *); struct bpf_sk_storage_diag { u32 nr_maps; struct bpf_map *maps[0]; }; struct bpf_iter_seq_sk_storage_map_info { struct bpf_map *map; unsigned int bucket_id; unsigned int skip_elems; }; struct bpf_iter__bpf_sk_storage_map { union { struct bpf_iter_meta *meta; }; union { struct bpf_map *map; }; union { struct sock *sk; }; union { void *value; }; }; struct nvmem_cell; struct tc_ratespec { unsigned char cell_log; __u8 linklayer; short unsigned int overhead; short int cell_align; short unsigned int mpu; __u32 rate; }; struct tc_prio_qopt { int bands; __u8 priomap[16]; }; enum { TCA_UNSPEC = 0, TCA_KIND = 1, TCA_OPTIONS = 2, TCA_STATS = 3, TCA_XSTATS = 4, TCA_RATE = 5, TCA_FCNT = 6, TCA_STATS2 = 7, TCA_STAB = 8, TCA_PAD = 9, TCA_DUMP_INVISIBLE = 10, TCA_CHAIN = 11, TCA_HW_OFFLOAD = 12, TCA_INGRESS_BLOCK = 13, TCA_EGRESS_BLOCK = 14, TCA_DUMP_FLAGS = 15, __TCA_MAX = 16, }; struct skb_array { struct ptr_ring ring; }; struct psched_ratecfg { u64 rate_bytes_ps; u32 mult; u16 overhead; u8 linklayer; u8 shift; }; struct psched_pktrate { u64 rate_pkts_ps; u32 mult; u8 shift; }; struct mini_Qdisc { struct tcf_proto *filter_list; struct tcf_block *block; struct gnet_stats_basic_sync *cpu_bstats; struct gnet_stats_queue *cpu_qstats; long unsigned int rcu_state; }; struct mini_Qdisc_pair { struct mini_Qdisc miniq1; struct mini_Qdisc miniq2; struct mini_Qdisc **p_miniq; }; struct xfrm_offload { struct { __u32 low; __u32 hi; } seq; __u32 flags; __u32 status; __u8 proto; __u8 inner_ipproto; }; struct pfifo_fast_priv { struct skb_array q[3]; }; struct tc_qopt_offload_stats { struct gnet_stats_basic_sync *bstats; struct gnet_stats_queue *qstats; }; enum tc_mq_command { TC_MQ_CREATE = 0, TC_MQ_DESTROY = 1, TC_MQ_STATS = 2, TC_MQ_GRAFT = 3, }; struct tc_mq_opt_offload_graft_params { long unsigned int queue; u32 child_handle; }; struct tc_mq_qopt_offload { enum tc_mq_command command; u32 handle; union { struct tc_qopt_offload_stats stats; struct tc_mq_opt_offload_graft_params graft_params; }; }; struct mq_sched { struct Qdisc **qdiscs; }; struct sch_frag_data { long unsigned int dst; struct qdisc_skb_cb cb; __be16 inner_protocol; u16 vlan_tci; __be16 vlan_proto; unsigned int l2_len; u8 l2_data[18]; int (*xmit)(struct sk_buff *); }; struct sockaddr_nl { __kernel_sa_family_t nl_family; short unsigned int nl_pad; __u32 nl_pid; __u32 nl_groups; }; struct nlmsgerr { int error; struct nlmsghdr msg; }; enum nlmsgerr_attrs { NLMSGERR_ATTR_UNUSED = 0, NLMSGERR_ATTR_MSG = 1, NLMSGERR_ATTR_OFFS = 2, NLMSGERR_ATTR_COOKIE = 3, NLMSGERR_ATTR_POLICY = 4, __NLMSGERR_ATTR_MAX = 5, NLMSGERR_ATTR_MAX = 4, }; struct nl_pktinfo { __u32 group; }; enum { NETLINK_UNCONNECTED = 0, NETLINK_CONNECTED = 1, }; enum netlink_skb_flags { NETLINK_SKB_DST = 8, }; struct netlink_notify { struct net *net; u32 portid; int protocol; }; struct netlink_tap { struct net_device *dev; struct module *module; struct list_head list; }; struct trace_event_raw_netlink_extack { struct trace_entry ent; u32 __data_loc_msg; char __data[0]; }; struct trace_event_data_offsets_netlink_extack { u32 msg; }; typedef void (*btf_trace_netlink_extack)(void *, const char *); struct netlink_sock { struct sock sk; u32 portid; u32 dst_portid; u32 dst_group; u32 flags; u32 subscriptions; u32 ngroups; long unsigned int *groups; long unsigned int state; size_t max_recvmsg_len; wait_queue_head_t wait; bool bound; bool cb_running; int dump_done_errno; struct netlink_callback cb; struct mutex *cb_mutex; struct mutex cb_def_mutex; void (*netlink_rcv)(struct sk_buff *); int (*netlink_bind)(struct net *, int); void (*netlink_unbind)(struct net *, int); struct module *module; struct rhash_head node; struct callback_head rcu; struct work_struct work; }; struct listeners; struct netlink_table { struct rhashtable hash; struct hlist_head mc_list; struct listeners *listeners; unsigned int flags; unsigned int groups; struct mutex *cb_mutex; struct module *module; int (*bind)(struct net *, int); void (*unbind)(struct net *, int); bool (*compare)(struct net *, struct sock *); int registered; }; struct listeners { struct callback_head rcu; long unsigned int masks[0]; }; struct netlink_tap_net { struct list_head netlink_tap_all; struct mutex netlink_tap_lock; }; struct netlink_compare_arg { possible_net_t pnet; u32 portid; }; struct netlink_broadcast_data { struct sock *exclude_sk; struct net *net; u32 portid; u32 group; int failure; int delivery_failure; int congested; int delivered; gfp_t allocation; struct sk_buff *skb; struct sk_buff *skb2; }; struct netlink_set_err_data { struct sock *exclude_sk; u32 portid; u32 group; int code; }; struct nl_seq_iter { struct seq_net_private p; struct rhashtable_iter hti; int link; }; struct bpf_iter__netlink { union { struct bpf_iter_meta *meta; }; union { struct netlink_sock *sk; }; }; enum { CTRL_CMD_UNSPEC = 0, CTRL_CMD_NEWFAMILY = 1, CTRL_CMD_DELFAMILY = 2, CTRL_CMD_GETFAMILY = 3, CTRL_CMD_NEWOPS = 4, CTRL_CMD_DELOPS = 5, CTRL_CMD_GETOPS = 6, CTRL_CMD_NEWMCAST_GRP = 7, CTRL_CMD_DELMCAST_GRP = 8, CTRL_CMD_GETMCAST_GRP = 9, CTRL_CMD_GETPOLICY = 10, __CTRL_CMD_MAX = 11, }; enum { CTRL_ATTR_UNSPEC = 0, CTRL_ATTR_FAMILY_ID = 1, CTRL_ATTR_FAMILY_NAME = 2, CTRL_ATTR_VERSION = 3, CTRL_ATTR_HDRSIZE = 4, CTRL_ATTR_MAXATTR = 5, CTRL_ATTR_OPS = 6, CTRL_ATTR_MCAST_GROUPS = 7, CTRL_ATTR_POLICY = 8, CTRL_ATTR_OP_POLICY = 9, CTRL_ATTR_OP = 10, __CTRL_ATTR_MAX = 11, }; enum { CTRL_ATTR_OP_UNSPEC = 0, CTRL_ATTR_OP_ID = 1, CTRL_ATTR_OP_FLAGS = 2, __CTRL_ATTR_OP_MAX = 3, }; enum { CTRL_ATTR_MCAST_GRP_UNSPEC = 0, CTRL_ATTR_MCAST_GRP_NAME = 1, CTRL_ATTR_MCAST_GRP_ID = 2, __CTRL_ATTR_MCAST_GRP_MAX = 3, }; enum { CTRL_ATTR_POLICY_UNSPEC = 0, CTRL_ATTR_POLICY_DO = 1, CTRL_ATTR_POLICY_DUMP = 2, __CTRL_ATTR_POLICY_DUMP_MAX = 3, CTRL_ATTR_POLICY_DUMP_MAX = 2, }; enum genl_validate_flags { GENL_DONT_VALIDATE_STRICT = 1, GENL_DONT_VALIDATE_DUMP = 2, GENL_DONT_VALIDATE_DUMP_STRICT = 4, }; struct genl_dumpit_info { const struct genl_family *family; struct genl_ops op; struct nlattr **attrs; }; struct genl_start_context { const struct genl_family *family; struct nlmsghdr *nlh; struct netlink_ext_ack *extack; const struct genl_ops *ops; int hdrlen; }; struct netlink_policy_dump_state; struct ctrl_dump_policy_ctx { struct netlink_policy_dump_state *state; const struct genl_family *rt; unsigned int opidx; u32 op; u16 fam_id; u8 policies: 1; u8 single_op: 1; }; enum netlink_attribute_type { NL_ATTR_TYPE_INVALID = 0, NL_ATTR_TYPE_FLAG = 1, NL_ATTR_TYPE_U8 = 2, NL_ATTR_TYPE_U16 = 3, NL_ATTR_TYPE_U32 = 4, NL_ATTR_TYPE_U64 = 5, NL_ATTR_TYPE_S8 = 6, NL_ATTR_TYPE_S16 = 7, NL_ATTR_TYPE_S32 = 8, NL_ATTR_TYPE_S64 = 9, NL_ATTR_TYPE_BINARY = 10, NL_ATTR_TYPE_STRING = 11, NL_ATTR_TYPE_NUL_STRING = 12, NL_ATTR_TYPE_NESTED = 13, NL_ATTR_TYPE_NESTED_ARRAY = 14, NL_ATTR_TYPE_BITFIELD32 = 15, }; enum netlink_policy_type_attr { NL_POLICY_TYPE_ATTR_UNSPEC = 0, NL_POLICY_TYPE_ATTR_TYPE = 1, NL_POLICY_TYPE_ATTR_MIN_VALUE_S = 2, NL_POLICY_TYPE_ATTR_MAX_VALUE_S = 3, NL_POLICY_TYPE_ATTR_MIN_VALUE_U = 4, NL_POLICY_TYPE_ATTR_MAX_VALUE_U = 5, NL_POLICY_TYPE_ATTR_MIN_LENGTH = 6, NL_POLICY_TYPE_ATTR_MAX_LENGTH = 7, NL_POLICY_TYPE_ATTR_POLICY_IDX = 8, NL_POLICY_TYPE_ATTR_POLICY_MAXTYPE = 9, NL_POLICY_TYPE_ATTR_BITFIELD32_MASK = 10, NL_POLICY_TYPE_ATTR_PAD = 11, NL_POLICY_TYPE_ATTR_MASK = 12, __NL_POLICY_TYPE_ATTR_MAX = 13, NL_POLICY_TYPE_ATTR_MAX = 12, }; struct netlink_policy_dump_state___2 { unsigned int policy_idx; unsigned int attr_idx; unsigned int n_alloc; struct { const struct nla_policy *policy; unsigned int maxtype; } policies[0]; }; struct trace_event_raw_bpf_test_finish { struct trace_entry ent; int err; char __data[0]; }; struct trace_event_data_offsets_bpf_test_finish {}; typedef void (*btf_trace_bpf_test_finish)(void *, int *); struct bpf_test_timer { enum { NO_PREEMPT = 0, NO_MIGRATE = 1, } mode; u32 i; u64 time_start; u64 time_spent; }; struct bpf_fentry_test_t { struct bpf_fentry_test_t *a; }; struct bpf_raw_tp_test_run_info { struct bpf_prog *prog; void *ctx; u32 retval; }; typedef int (*dummy_ops_test_ret_fn)(struct bpf_dummy_ops_state *, ...); struct bpf_dummy_ops_test_args { u64 args[12]; struct bpf_dummy_ops_state state; }; struct ethtool_cmd { __u32 cmd; __u32 supported; __u32 advertising; __u16 speed; __u8 duplex; __u8 port; __u8 phy_address; __u8 transceiver; __u8 autoneg; __u8 mdio_support; __u32 maxtxpkt; __u32 maxrxpkt; __u16 speed_hi; __u8 eth_tp_mdix; __u8 eth_tp_mdix_ctrl; __u32 lp_advertising; __u32 reserved[2]; }; struct ethtool_value { __u32 cmd; __u32 data; }; enum tunable_id { ETHTOOL_ID_UNSPEC = 0, ETHTOOL_RX_COPYBREAK = 1, ETHTOOL_TX_COPYBREAK = 2, ETHTOOL_PFC_PREVENTION_TOUT = 3, ETHTOOL_TX_COPYBREAK_BUF_SIZE = 4, __ETHTOOL_TUNABLE_COUNT = 5, }; enum tunable_type_id { ETHTOOL_TUNABLE_UNSPEC = 0, ETHTOOL_TUNABLE_U8 = 1, ETHTOOL_TUNABLE_U16 = 2, ETHTOOL_TUNABLE_U32 = 3, ETHTOOL_TUNABLE_U64 = 4, ETHTOOL_TUNABLE_STRING = 5, ETHTOOL_TUNABLE_S8 = 6, ETHTOOL_TUNABLE_S16 = 7, ETHTOOL_TUNABLE_S32 = 8, ETHTOOL_TUNABLE_S64 = 9, }; enum phy_tunable_id { ETHTOOL_PHY_ID_UNSPEC = 0, ETHTOOL_PHY_DOWNSHIFT = 1, ETHTOOL_PHY_FAST_LINK_DOWN = 2, ETHTOOL_PHY_EDPD = 3, __ETHTOOL_PHY_TUNABLE_COUNT = 4, }; struct ethtool_gstrings { __u32 cmd; __u32 string_set; __u32 len; __u8 data[0]; }; struct ethtool_sset_info { __u32 cmd; __u32 reserved; __u64 sset_mask; __u32 data[0]; }; struct ethtool_perm_addr { __u32 cmd; __u32 size; __u8 data[0]; }; enum ethtool_flags { ETH_FLAG_TXVLAN = 128, ETH_FLAG_RXVLAN = 256, ETH_FLAG_LRO = 32768, ETH_FLAG_NTUPLE = 134217728, ETH_FLAG_RXHASH = 268435456, }; struct ethtool_rxfh { __u32 cmd; __u32 rss_context; __u32 indir_size; __u32 key_size; __u8 hfunc; __u8 rsvd8[3]; __u32 rsvd32; __u32 rss_config[0]; }; struct ethtool_get_features_block { __u32 available; __u32 requested; __u32 active; __u32 never_changed; }; struct ethtool_gfeatures { __u32 cmd; __u32 size; struct ethtool_get_features_block features[0]; }; struct ethtool_set_features_block { __u32 valid; __u32 requested; }; struct ethtool_sfeatures { __u32 cmd; __u32 size; struct ethtool_set_features_block features[0]; }; enum ethtool_sfeatures_retval_bits { ETHTOOL_F_UNSUPPORTED__BIT = 0, ETHTOOL_F_WISH__BIT = 1, ETHTOOL_F_COMPAT__BIT = 2, }; struct ethtool_per_queue_op { __u32 cmd; __u32 sub_command; __u32 queue_mask[128]; char data[0]; }; enum ethtool_fec_config_bits { ETHTOOL_FEC_NONE_BIT = 0, ETHTOOL_FEC_AUTO_BIT = 1, ETHTOOL_FEC_OFF_BIT = 2, ETHTOOL_FEC_RS_BIT = 3, ETHTOOL_FEC_BASER_BIT = 4, ETHTOOL_FEC_LLRS_BIT = 5, }; enum { ETH_RSS_HASH_TOP_BIT = 0, ETH_RSS_HASH_XOR_BIT = 1, ETH_RSS_HASH_CRC32_BIT = 2, ETH_RSS_HASH_FUNCS_COUNT = 3, }; struct ethtool_rx_flow_rule { struct flow_rule *rule; long unsigned int priv[0]; }; struct ethtool_rx_flow_spec_input { const struct ethtool_rx_flow_spec *fs; u32 rss_ctx; }; struct ethtool_phy_ops { int (*get_sset_count)(struct phy_device *); int (*get_strings)(struct phy_device *, u8 *); int (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *); int (*start_cable_test)(struct phy_device *, struct netlink_ext_ack *); int (*start_cable_test_tdr)(struct phy_device *, struct netlink_ext_ack *, const struct phy_tdr_config *); }; enum { ETHTOOL_MSG_KERNEL_NONE = 0, ETHTOOL_MSG_STRSET_GET_REPLY = 1, ETHTOOL_MSG_LINKINFO_GET_REPLY = 2, ETHTOOL_MSG_LINKINFO_NTF = 3, ETHTOOL_MSG_LINKMODES_GET_REPLY = 4, ETHTOOL_MSG_LINKMODES_NTF = 5, ETHTOOL_MSG_LINKSTATE_GET_REPLY = 6, ETHTOOL_MSG_DEBUG_GET_REPLY = 7, ETHTOOL_MSG_DEBUG_NTF = 8, ETHTOOL_MSG_WOL_GET_REPLY = 9, ETHTOOL_MSG_WOL_NTF = 10, ETHTOOL_MSG_FEATURES_GET_REPLY = 11, ETHTOOL_MSG_FEATURES_SET_REPLY = 12, ETHTOOL_MSG_FEATURES_NTF = 13, ETHTOOL_MSG_PRIVFLAGS_GET_REPLY = 14, ETHTOOL_MSG_PRIVFLAGS_NTF = 15, ETHTOOL_MSG_RINGS_GET_REPLY = 16, ETHTOOL_MSG_RINGS_NTF = 17, ETHTOOL_MSG_CHANNELS_GET_REPLY = 18, ETHTOOL_MSG_CHANNELS_NTF = 19, ETHTOOL_MSG_COALESCE_GET_REPLY = 20, ETHTOOL_MSG_COALESCE_NTF = 21, ETHTOOL_MSG_PAUSE_GET_REPLY = 22, ETHTOOL_MSG_PAUSE_NTF = 23, ETHTOOL_MSG_EEE_GET_REPLY = 24, ETHTOOL_MSG_EEE_NTF = 25, ETHTOOL_MSG_TSINFO_GET_REPLY = 26, ETHTOOL_MSG_CABLE_TEST_NTF = 27, ETHTOOL_MSG_CABLE_TEST_TDR_NTF = 28, ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY = 29, ETHTOOL_MSG_FEC_GET_REPLY = 30, ETHTOOL_MSG_FEC_NTF = 31, ETHTOOL_MSG_MODULE_EEPROM_GET_REPLY = 32, ETHTOOL_MSG_STATS_GET_REPLY = 33, ETHTOOL_MSG_PHC_VCLOCKS_GET_REPLY = 34, ETHTOOL_MSG_MODULE_GET_REPLY = 35, ETHTOOL_MSG_MODULE_NTF = 36, __ETHTOOL_MSG_KERNEL_CNT = 37, ETHTOOL_MSG_KERNEL_MAX = 36, }; enum { ETHTOOL_A_STATS_UNSPEC = 0, ETHTOOL_A_STATS_PAD = 1, ETHTOOL_A_STATS_HEADER = 2, ETHTOOL_A_STATS_GROUPS = 3, ETHTOOL_A_STATS_GRP = 4, __ETHTOOL_A_STATS_CNT = 5, ETHTOOL_A_STATS_MAX = 4, }; struct ethtool_devlink_compat { struct devlink *devlink; union { struct ethtool_flash efl; struct ethtool_drvinfo info; }; }; struct ethtool_link_usettings { struct ethtool_link_settings base; struct { __u32 supported[3]; __u32 advertising[3]; __u32 lp_advertising[3]; } link_modes; }; struct ethtool_rx_flow_key { struct flow_dissector_key_basic basic; union { struct flow_dissector_key_ipv4_addrs ipv4; struct flow_dissector_key_ipv6_addrs ipv6; }; struct flow_dissector_key_ports tp; struct flow_dissector_key_ip ip; struct flow_dissector_key_vlan vlan; struct flow_dissector_key_eth_addrs eth_addrs; long: 48; }; struct ethtool_rx_flow_match { struct flow_dissector dissector; int: 32; struct ethtool_rx_flow_key key; struct ethtool_rx_flow_key mask; }; enum { ETHTOOL_UDP_TUNNEL_TYPE_VXLAN = 0, ETHTOOL_UDP_TUNNEL_TYPE_GENEVE = 1, ETHTOOL_UDP_TUNNEL_TYPE_VXLAN_GPE = 2, __ETHTOOL_UDP_TUNNEL_TYPE_CNT = 3, }; struct link_mode_info { int speed; u8 lanes; u8 duplex; }; enum { ETHTOOL_MSG_USER_NONE = 0, ETHTOOL_MSG_STRSET_GET = 1, ETHTOOL_MSG_LINKINFO_GET = 2, ETHTOOL_MSG_LINKINFO_SET = 3, ETHTOOL_MSG_LINKMODES_GET = 4, ETHTOOL_MSG_LINKMODES_SET = 5, ETHTOOL_MSG_LINKSTATE_GET = 6, ETHTOOL_MSG_DEBUG_GET = 7, ETHTOOL_MSG_DEBUG_SET = 8, ETHTOOL_MSG_WOL_GET = 9, ETHTOOL_MSG_WOL_SET = 10, ETHTOOL_MSG_FEATURES_GET = 11, ETHTOOL_MSG_FEATURES_SET = 12, ETHTOOL_MSG_PRIVFLAGS_GET = 13, ETHTOOL_MSG_PRIVFLAGS_SET = 14, ETHTOOL_MSG_RINGS_GET = 15, ETHTOOL_MSG_RINGS_SET = 16, ETHTOOL_MSG_CHANNELS_GET = 17, ETHTOOL_MSG_CHANNELS_SET = 18, ETHTOOL_MSG_COALESCE_GET = 19, ETHTOOL_MSG_COALESCE_SET = 20, ETHTOOL_MSG_PAUSE_GET = 21, ETHTOOL_MSG_PAUSE_SET = 22, ETHTOOL_MSG_EEE_GET = 23, ETHTOOL_MSG_EEE_SET = 24, ETHTOOL_MSG_TSINFO_GET = 25, ETHTOOL_MSG_CABLE_TEST_ACT = 26, ETHTOOL_MSG_CABLE_TEST_TDR_ACT = 27, ETHTOOL_MSG_TUNNEL_INFO_GET = 28, ETHTOOL_MSG_FEC_GET = 29, ETHTOOL_MSG_FEC_SET = 30, ETHTOOL_MSG_MODULE_EEPROM_GET = 31, ETHTOOL_MSG_STATS_GET = 32, ETHTOOL_MSG_PHC_VCLOCKS_GET = 33, ETHTOOL_MSG_MODULE_GET = 34, ETHTOOL_MSG_MODULE_SET = 35, __ETHTOOL_MSG_USER_CNT = 36, ETHTOOL_MSG_USER_MAX = 35, }; enum { ETHTOOL_A_HEADER_UNSPEC = 0, ETHTOOL_A_HEADER_DEV_INDEX = 1, ETHTOOL_A_HEADER_DEV_NAME = 2, ETHTOOL_A_HEADER_FLAGS = 3, __ETHTOOL_A_HEADER_CNT = 4, ETHTOOL_A_HEADER_MAX = 3, }; enum { ETHTOOL_A_STRSET_UNSPEC = 0, ETHTOOL_A_STRSET_HEADER = 1, ETHTOOL_A_STRSET_STRINGSETS = 2, ETHTOOL_A_STRSET_COUNTS_ONLY = 3, __ETHTOOL_A_STRSET_CNT = 4, ETHTOOL_A_STRSET_MAX = 3, }; enum { ETHTOOL_A_LINKINFO_UNSPEC = 0, ETHTOOL_A_LINKINFO_HEADER = 1, ETHTOOL_A_LINKINFO_PORT = 2, ETHTOOL_A_LINKINFO_PHYADDR = 3, ETHTOOL_A_LINKINFO_TP_MDIX = 4, ETHTOOL_A_LINKINFO_TP_MDIX_CTRL = 5, ETHTOOL_A_LINKINFO_TRANSCEIVER = 6, __ETHTOOL_A_LINKINFO_CNT = 7, ETHTOOL_A_LINKINFO_MAX = 6, }; enum { ETHTOOL_A_LINKMODES_UNSPEC = 0, ETHTOOL_A_LINKMODES_HEADER = 1, ETHTOOL_A_LINKMODES_AUTONEG = 2, ETHTOOL_A_LINKMODES_OURS = 3, ETHTOOL_A_LINKMODES_PEER = 4, ETHTOOL_A_LINKMODES_SPEED = 5, ETHTOOL_A_LINKMODES_DUPLEX = 6, ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG = 7, ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE = 8, ETHTOOL_A_LINKMODES_LANES = 9, __ETHTOOL_A_LINKMODES_CNT = 10, ETHTOOL_A_LINKMODES_MAX = 9, }; enum { ETHTOOL_A_LINKSTATE_UNSPEC = 0, ETHTOOL_A_LINKSTATE_HEADER = 1, ETHTOOL_A_LINKSTATE_LINK = 2, ETHTOOL_A_LINKSTATE_SQI = 3, ETHTOOL_A_LINKSTATE_SQI_MAX = 4, ETHTOOL_A_LINKSTATE_EXT_STATE = 5, ETHTOOL_A_LINKSTATE_EXT_SUBSTATE = 6, __ETHTOOL_A_LINKSTATE_CNT = 7, ETHTOOL_A_LINKSTATE_MAX = 6, }; enum { ETHTOOL_A_DEBUG_UNSPEC = 0, ETHTOOL_A_DEBUG_HEADER = 1, ETHTOOL_A_DEBUG_MSGMASK = 2, __ETHTOOL_A_DEBUG_CNT = 3, ETHTOOL_A_DEBUG_MAX = 2, }; enum { ETHTOOL_A_WOL_UNSPEC = 0, ETHTOOL_A_WOL_HEADER = 1, ETHTOOL_A_WOL_MODES = 2, ETHTOOL_A_WOL_SOPASS = 3, __ETHTOOL_A_WOL_CNT = 4, ETHTOOL_A_WOL_MAX = 3, }; enum { ETHTOOL_A_FEATURES_UNSPEC = 0, ETHTOOL_A_FEATURES_HEADER = 1, ETHTOOL_A_FEATURES_HW = 2, ETHTOOL_A_FEATURES_WANTED = 3, ETHTOOL_A_FEATURES_ACTIVE = 4, ETHTOOL_A_FEATURES_NOCHANGE = 5, __ETHTOOL_A_FEATURES_CNT = 6, ETHTOOL_A_FEATURES_MAX = 5, }; enum { ETHTOOL_A_PRIVFLAGS_UNSPEC = 0, ETHTOOL_A_PRIVFLAGS_HEADER = 1, ETHTOOL_A_PRIVFLAGS_FLAGS = 2, __ETHTOOL_A_PRIVFLAGS_CNT = 3, ETHTOOL_A_PRIVFLAGS_MAX = 2, }; enum { ETHTOOL_A_RINGS_UNSPEC = 0, ETHTOOL_A_RINGS_HEADER = 1, ETHTOOL_A_RINGS_RX_MAX = 2, ETHTOOL_A_RINGS_RX_MINI_MAX = 3, ETHTOOL_A_RINGS_RX_JUMBO_MAX = 4, ETHTOOL_A_RINGS_TX_MAX = 5, ETHTOOL_A_RINGS_RX = 6, ETHTOOL_A_RINGS_RX_MINI = 7, ETHTOOL_A_RINGS_RX_JUMBO = 8, ETHTOOL_A_RINGS_TX = 9, ETHTOOL_A_RINGS_RX_BUF_LEN = 10, __ETHTOOL_A_RINGS_CNT = 11, ETHTOOL_A_RINGS_MAX = 10, }; enum { ETHTOOL_A_CHANNELS_UNSPEC = 0, ETHTOOL_A_CHANNELS_HEADER = 1, ETHTOOL_A_CHANNELS_RX_MAX = 2, ETHTOOL_A_CHANNELS_TX_MAX = 3, ETHTOOL_A_CHANNELS_OTHER_MAX = 4, ETHTOOL_A_CHANNELS_COMBINED_MAX = 5, ETHTOOL_A_CHANNELS_RX_COUNT = 6, ETHTOOL_A_CHANNELS_TX_COUNT = 7, ETHTOOL_A_CHANNELS_OTHER_COUNT = 8, ETHTOOL_A_CHANNELS_COMBINED_COUNT = 9, __ETHTOOL_A_CHANNELS_CNT = 10, ETHTOOL_A_CHANNELS_MAX = 9, }; enum { ETHTOOL_A_COALESCE_UNSPEC = 0, ETHTOOL_A_COALESCE_HEADER = 1, ETHTOOL_A_COALESCE_RX_USECS = 2, ETHTOOL_A_COALESCE_RX_MAX_FRAMES = 3, ETHTOOL_A_COALESCE_RX_USECS_IRQ = 4, ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ = 5, ETHTOOL_A_COALESCE_TX_USECS = 6, ETHTOOL_A_COALESCE_TX_MAX_FRAMES = 7, ETHTOOL_A_COALESCE_TX_USECS_IRQ = 8, ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ = 9, ETHTOOL_A_COALESCE_STATS_BLOCK_USECS = 10, ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX = 11, ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX = 12, ETHTOOL_A_COALESCE_PKT_RATE_LOW = 13, ETHTOOL_A_COALESCE_RX_USECS_LOW = 14, ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW = 15, ETHTOOL_A_COALESCE_TX_USECS_LOW = 16, ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW = 17, ETHTOOL_A_COALESCE_PKT_RATE_HIGH = 18, ETHTOOL_A_COALESCE_RX_USECS_HIGH = 19, ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH = 20, ETHTOOL_A_COALESCE_TX_USECS_HIGH = 21, ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH = 22, ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 23, ETHTOOL_A_COALESCE_USE_CQE_MODE_TX = 24, ETHTOOL_A_COALESCE_USE_CQE_MODE_RX = 25, __ETHTOOL_A_COALESCE_CNT = 26, ETHTOOL_A_COALESCE_MAX = 25, }; enum { ETHTOOL_A_PAUSE_UNSPEC = 0, ETHTOOL_A_PAUSE_HEADER = 1, ETHTOOL_A_PAUSE_AUTONEG = 2, ETHTOOL_A_PAUSE_RX = 3, ETHTOOL_A_PAUSE_TX = 4, ETHTOOL_A_PAUSE_STATS = 5, __ETHTOOL_A_PAUSE_CNT = 6, ETHTOOL_A_PAUSE_MAX = 5, }; enum { ETHTOOL_A_EEE_UNSPEC = 0, ETHTOOL_A_EEE_HEADER = 1, ETHTOOL_A_EEE_MODES_OURS = 2, ETHTOOL_A_EEE_MODES_PEER = 3, ETHTOOL_A_EEE_ACTIVE = 4, ETHTOOL_A_EEE_ENABLED = 5, ETHTOOL_A_EEE_TX_LPI_ENABLED = 6, ETHTOOL_A_EEE_TX_LPI_TIMER = 7, __ETHTOOL_A_EEE_CNT = 8, ETHTOOL_A_EEE_MAX = 7, }; enum { ETHTOOL_A_TSINFO_UNSPEC = 0, ETHTOOL_A_TSINFO_HEADER = 1, ETHTOOL_A_TSINFO_TIMESTAMPING = 2, ETHTOOL_A_TSINFO_TX_TYPES = 3, ETHTOOL_A_TSINFO_RX_FILTERS = 4, ETHTOOL_A_TSINFO_PHC_INDEX = 5, __ETHTOOL_A_TSINFO_CNT = 6, ETHTOOL_A_TSINFO_MAX = 5, }; enum { ETHTOOL_A_PHC_VCLOCKS_UNSPEC = 0, ETHTOOL_A_PHC_VCLOCKS_HEADER = 1, ETHTOOL_A_PHC_VCLOCKS_NUM = 2, ETHTOOL_A_PHC_VCLOCKS_INDEX = 3, __ETHTOOL_A_PHC_VCLOCKS_CNT = 4, ETHTOOL_A_PHC_VCLOCKS_MAX = 3, }; enum { ETHTOOL_A_CABLE_TEST_UNSPEC = 0, ETHTOOL_A_CABLE_TEST_HEADER = 1, __ETHTOOL_A_CABLE_TEST_CNT = 2, ETHTOOL_A_CABLE_TEST_MAX = 1, }; enum { ETHTOOL_A_CABLE_TEST_TDR_UNSPEC = 0, ETHTOOL_A_CABLE_TEST_TDR_HEADER = 1, ETHTOOL_A_CABLE_TEST_TDR_CFG = 2, __ETHTOOL_A_CABLE_TEST_TDR_CNT = 3, ETHTOOL_A_CABLE_TEST_TDR_MAX = 2, }; enum { ETHTOOL_A_TUNNEL_INFO_UNSPEC = 0, ETHTOOL_A_TUNNEL_INFO_HEADER = 1, ETHTOOL_A_TUNNEL_INFO_UDP_PORTS = 2, __ETHTOOL_A_TUNNEL_INFO_CNT = 3, ETHTOOL_A_TUNNEL_INFO_MAX = 2, }; enum { ETHTOOL_A_FEC_UNSPEC = 0, ETHTOOL_A_FEC_HEADER = 1, ETHTOOL_A_FEC_MODES = 2, ETHTOOL_A_FEC_AUTO = 3, ETHTOOL_A_FEC_ACTIVE = 4, ETHTOOL_A_FEC_STATS = 5, __ETHTOOL_A_FEC_CNT = 6, ETHTOOL_A_FEC_MAX = 5, }; enum { ETHTOOL_A_MODULE_EEPROM_UNSPEC = 0, ETHTOOL_A_MODULE_EEPROM_HEADER = 1, ETHTOOL_A_MODULE_EEPROM_OFFSET = 2, ETHTOOL_A_MODULE_EEPROM_LENGTH = 3, ETHTOOL_A_MODULE_EEPROM_PAGE = 4, ETHTOOL_A_MODULE_EEPROM_BANK = 5, ETHTOOL_A_MODULE_EEPROM_I2C_ADDRESS = 6, ETHTOOL_A_MODULE_EEPROM_DATA = 7, __ETHTOOL_A_MODULE_EEPROM_CNT = 8, ETHTOOL_A_MODULE_EEPROM_MAX = 7, }; enum { ETHTOOL_STATS_ETH_PHY = 0, ETHTOOL_STATS_ETH_MAC = 1, ETHTOOL_STATS_ETH_CTRL = 2, ETHTOOL_STATS_RMON = 3, __ETHTOOL_STATS_CNT = 4, }; enum { ETHTOOL_A_STATS_ETH_PHY_5_SYM_ERR = 0, __ETHTOOL_A_STATS_ETH_PHY_CNT = 1, ETHTOOL_A_STATS_ETH_PHY_MAX = 0, }; enum { ETHTOOL_A_STATS_ETH_MAC_2_TX_PKT = 0, ETHTOOL_A_STATS_ETH_MAC_3_SINGLE_COL = 1, ETHTOOL_A_STATS_ETH_MAC_4_MULTI_COL = 2, ETHTOOL_A_STATS_ETH_MAC_5_RX_PKT = 3, ETHTOOL_A_STATS_ETH_MAC_6_FCS_ERR = 4, ETHTOOL_A_STATS_ETH_MAC_7_ALIGN_ERR = 5, ETHTOOL_A_STATS_ETH_MAC_8_TX_BYTES = 6, ETHTOOL_A_STATS_ETH_MAC_9_TX_DEFER = 7, ETHTOOL_A_STATS_ETH_MAC_10_LATE_COL = 8, ETHTOOL_A_STATS_ETH_MAC_11_XS_COL = 9, ETHTOOL_A_STATS_ETH_MAC_12_TX_INT_ERR = 10, ETHTOOL_A_STATS_ETH_MAC_13_CS_ERR = 11, ETHTOOL_A_STATS_ETH_MAC_14_RX_BYTES = 12, ETHTOOL_A_STATS_ETH_MAC_15_RX_INT_ERR = 13, ETHTOOL_A_STATS_ETH_MAC_18_TX_MCAST = 14, ETHTOOL_A_STATS_ETH_MAC_19_TX_BCAST = 15, ETHTOOL_A_STATS_ETH_MAC_20_XS_DEFER = 16, ETHTOOL_A_STATS_ETH_MAC_21_RX_MCAST = 17, ETHTOOL_A_STATS_ETH_MAC_22_RX_BCAST = 18, ETHTOOL_A_STATS_ETH_MAC_23_IR_LEN_ERR = 19, ETHTOOL_A_STATS_ETH_MAC_24_OOR_LEN = 20, ETHTOOL_A_STATS_ETH_MAC_25_TOO_LONG_ERR = 21, __ETHTOOL_A_STATS_ETH_MAC_CNT = 22, ETHTOOL_A_STATS_ETH_MAC_MAX = 21, }; enum { ETHTOOL_A_STATS_ETH_CTRL_3_TX = 0, ETHTOOL_A_STATS_ETH_CTRL_4_RX = 1, ETHTOOL_A_STATS_ETH_CTRL_5_RX_UNSUP = 2, __ETHTOOL_A_STATS_ETH_CTRL_CNT = 3, ETHTOOL_A_STATS_ETH_CTRL_MAX = 2, }; enum { ETHTOOL_A_STATS_RMON_UNDERSIZE = 0, ETHTOOL_A_STATS_RMON_OVERSIZE = 1, ETHTOOL_A_STATS_RMON_FRAG = 2, ETHTOOL_A_STATS_RMON_JABBER = 3, __ETHTOOL_A_STATS_RMON_CNT = 4, ETHTOOL_A_STATS_RMON_MAX = 3, }; enum { ETHTOOL_A_MODULE_UNSPEC = 0, ETHTOOL_A_MODULE_HEADER = 1, ETHTOOL_A_MODULE_POWER_MODE_POLICY = 2, ETHTOOL_A_MODULE_POWER_MODE = 3, __ETHTOOL_A_MODULE_CNT = 4, ETHTOOL_A_MODULE_MAX = 3, }; enum ethtool_multicast_groups { ETHNL_MCGRP_MONITOR = 0, }; struct ethnl_req_info { struct net_device *dev; netdevice_tracker dev_tracker; u32 flags; }; struct ethnl_reply_data { struct net_device *dev; }; struct ethnl_request_ops { u8 request_cmd; u8 reply_cmd; u16 hdr_attr; unsigned int req_info_size; unsigned int reply_data_size; bool allow_nodev_do; int (*parse_request)(struct ethnl_req_info *, struct nlattr **, struct netlink_ext_ack *); int (*prepare_data)(const struct ethnl_req_info *, struct ethnl_reply_data *, struct genl_info *); int (*reply_size)(const struct ethnl_req_info *, const struct ethnl_reply_data *); int (*fill_reply)(struct sk_buff *, const struct ethnl_req_info *, const struct ethnl_reply_data *); void (*cleanup_data)(struct ethnl_reply_data *); }; struct ethnl_dump_ctx { const struct ethnl_request_ops *ops; struct ethnl_req_info *req_info; struct ethnl_reply_data *reply_data; int pos_hash; int pos_idx; }; typedef void (*ethnl_notify_handler_t)(struct net_device *, unsigned int, const void *); enum { ETHTOOL_A_BITSET_BIT_UNSPEC = 0, ETHTOOL_A_BITSET_BIT_INDEX = 1, ETHTOOL_A_BITSET_BIT_NAME = 2, ETHTOOL_A_BITSET_BIT_VALUE = 3, __ETHTOOL_A_BITSET_BIT_CNT = 4, ETHTOOL_A_BITSET_BIT_MAX = 3, }; enum { ETHTOOL_A_BITSET_BITS_UNSPEC = 0, ETHTOOL_A_BITSET_BITS_BIT = 1, __ETHTOOL_A_BITSET_BITS_CNT = 2, ETHTOOL_A_BITSET_BITS_MAX = 1, }; enum { ETHTOOL_A_BITSET_UNSPEC = 0, ETHTOOL_A_BITSET_NOMASK = 1, ETHTOOL_A_BITSET_SIZE = 2, ETHTOOL_A_BITSET_BITS = 3, ETHTOOL_A_BITSET_VALUE = 4, ETHTOOL_A_BITSET_MASK = 5, __ETHTOOL_A_BITSET_CNT = 6, ETHTOOL_A_BITSET_MAX = 5, }; typedef const char (* const ethnl_string_array_t)[32]; enum { ETHTOOL_A_STRING_UNSPEC = 0, ETHTOOL_A_STRING_INDEX = 1, ETHTOOL_A_STRING_VALUE = 2, __ETHTOOL_A_STRING_CNT = 3, ETHTOOL_A_STRING_MAX = 2, }; enum { ETHTOOL_A_STRINGS_UNSPEC = 0, ETHTOOL_A_STRINGS_STRING = 1, __ETHTOOL_A_STRINGS_CNT = 2, ETHTOOL_A_STRINGS_MAX = 1, }; enum { ETHTOOL_A_STRINGSET_UNSPEC = 0, ETHTOOL_A_STRINGSET_ID = 1, ETHTOOL_A_STRINGSET_COUNT = 2, ETHTOOL_A_STRINGSET_STRINGS = 3, __ETHTOOL_A_STRINGSET_CNT = 4, ETHTOOL_A_STRINGSET_MAX = 3, }; enum { ETHTOOL_A_STRINGSETS_UNSPEC = 0, ETHTOOL_A_STRINGSETS_STRINGSET = 1, __ETHTOOL_A_STRINGSETS_CNT = 2, ETHTOOL_A_STRINGSETS_MAX = 1, }; struct strset_info { bool per_dev; bool free_strings; unsigned int count; const char (*strings)[32]; }; struct strset_req_info { struct ethnl_req_info base; u32 req_ids; bool counts_only; }; struct strset_reply_data { struct ethnl_reply_data base; struct strset_info sets[21]; }; struct linkinfo_reply_data { struct ethnl_reply_data base; struct ethtool_link_ksettings ksettings; struct ethtool_link_settings *lsettings; }; struct linkmodes_reply_data { struct ethnl_reply_data base; struct ethtool_link_ksettings ksettings; struct ethtool_link_settings *lsettings; bool peer_empty; }; struct linkstate_reply_data { struct ethnl_reply_data base; int link; int sqi; int sqi_max; bool link_ext_state_provided; struct ethtool_link_ext_state_info ethtool_link_ext_state_info; }; struct debug_reply_data { struct ethnl_reply_data base; u32 msg_mask; }; struct wol_reply_data { struct ethnl_reply_data base; struct ethtool_wolinfo wol; bool show_sopass; }; struct features_reply_data { struct ethnl_reply_data base; u32 hw[2]; u32 wanted[2]; u32 active[2]; u32 nochange[2]; u32 all[2]; }; struct privflags_reply_data { struct ethnl_reply_data base; const char (*priv_flag_names)[32]; unsigned int n_priv_flags; u32 priv_flags; }; enum ethtool_supported_ring_param { ETHTOOL_RING_USE_RX_BUF_LEN = 1, }; struct rings_reply_data { struct ethnl_reply_data base; struct ethtool_ringparam ringparam; struct kernel_ethtool_ringparam kernel_ringparam; }; struct channels_reply_data { struct ethnl_reply_data base; struct ethtool_channels channels; }; struct coalesce_reply_data { struct ethnl_reply_data base; struct ethtool_coalesce coalesce; struct kernel_ethtool_coalesce kernel_coalesce; u32 supported_params; }; enum { ETHTOOL_A_PAUSE_STAT_UNSPEC = 0, ETHTOOL_A_PAUSE_STAT_PAD = 1, ETHTOOL_A_PAUSE_STAT_TX_FRAMES = 2, ETHTOOL_A_PAUSE_STAT_RX_FRAMES = 3, __ETHTOOL_A_PAUSE_STAT_CNT = 4, ETHTOOL_A_PAUSE_STAT_MAX = 3, }; struct pause_reply_data { struct ethnl_reply_data base; struct ethtool_pauseparam pauseparam; struct ethtool_pause_stats pausestat; }; struct eee_reply_data { struct ethnl_reply_data base; struct ethtool_eee eee; }; struct tsinfo_reply_data { struct ethnl_reply_data base; struct ethtool_ts_info ts_info; }; enum { ETHTOOL_A_CABLE_PAIR_A = 0, ETHTOOL_A_CABLE_PAIR_B = 1, ETHTOOL_A_CABLE_PAIR_C = 2, ETHTOOL_A_CABLE_PAIR_D = 3, }; enum { ETHTOOL_A_CABLE_RESULT_UNSPEC = 0, ETHTOOL_A_CABLE_RESULT_PAIR = 1, ETHTOOL_A_CABLE_RESULT_CODE = 2, __ETHTOOL_A_CABLE_RESULT_CNT = 3, ETHTOOL_A_CABLE_RESULT_MAX = 2, }; enum { ETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC = 0, ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR = 1, ETHTOOL_A_CABLE_FAULT_LENGTH_CM = 2, __ETHTOOL_A_CABLE_FAULT_LENGTH_CNT = 3, ETHTOOL_A_CABLE_FAULT_LENGTH_MAX = 2, }; enum { ETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC = 0, ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED = 1, ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED = 2, }; enum { ETHTOOL_A_CABLE_NEST_UNSPEC = 0, ETHTOOL_A_CABLE_NEST_RESULT = 1, ETHTOOL_A_CABLE_NEST_FAULT_LENGTH = 2, __ETHTOOL_A_CABLE_NEST_CNT = 3, ETHTOOL_A_CABLE_NEST_MAX = 2, }; enum { ETHTOOL_A_CABLE_TEST_NTF_UNSPEC = 0, ETHTOOL_A_CABLE_TEST_NTF_HEADER = 1, ETHTOOL_A_CABLE_TEST_NTF_STATUS = 2, ETHTOOL_A_CABLE_TEST_NTF_NEST = 3, __ETHTOOL_A_CABLE_TEST_NTF_CNT = 4, ETHTOOL_A_CABLE_TEST_NTF_MAX = 3, }; enum { ETHTOOL_A_CABLE_TEST_TDR_CFG_UNSPEC = 0, ETHTOOL_A_CABLE_TEST_TDR_CFG_FIRST = 1, ETHTOOL_A_CABLE_TEST_TDR_CFG_LAST = 2, ETHTOOL_A_CABLE_TEST_TDR_CFG_STEP = 3, ETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR = 4, __ETHTOOL_A_CABLE_TEST_TDR_CFG_CNT = 5, ETHTOOL_A_CABLE_TEST_TDR_CFG_MAX = 4, }; enum { ETHTOOL_A_CABLE_AMPLITUDE_UNSPEC = 0, ETHTOOL_A_CABLE_AMPLITUDE_PAIR = 1, ETHTOOL_A_CABLE_AMPLITUDE_mV = 2, __ETHTOOL_A_CABLE_AMPLITUDE_CNT = 3, ETHTOOL_A_CABLE_AMPLITUDE_MAX = 2, }; enum { ETHTOOL_A_CABLE_PULSE_UNSPEC = 0, ETHTOOL_A_CABLE_PULSE_mV = 1, __ETHTOOL_A_CABLE_PULSE_CNT = 2, ETHTOOL_A_CABLE_PULSE_MAX = 1, }; enum { ETHTOOL_A_CABLE_STEP_UNSPEC = 0, ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE = 1, ETHTOOL_A_CABLE_STEP_LAST_DISTANCE = 2, ETHTOOL_A_CABLE_STEP_STEP_DISTANCE = 3, __ETHTOOL_A_CABLE_STEP_CNT = 4, ETHTOOL_A_CABLE_STEP_MAX = 3, }; enum { ETHTOOL_A_CABLE_TDR_NEST_UNSPEC = 0, ETHTOOL_A_CABLE_TDR_NEST_STEP = 1, ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE = 2, ETHTOOL_A_CABLE_TDR_NEST_PULSE = 3, __ETHTOOL_A_CABLE_TDR_NEST_CNT = 4, ETHTOOL_A_CABLE_TDR_NEST_MAX = 3, }; enum { ETHTOOL_A_TUNNEL_UDP_ENTRY_UNSPEC = 0, ETHTOOL_A_TUNNEL_UDP_ENTRY_PORT = 1, ETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE = 2, __ETHTOOL_A_TUNNEL_UDP_ENTRY_CNT = 3, ETHTOOL_A_TUNNEL_UDP_ENTRY_MAX = 2, }; enum { ETHTOOL_A_TUNNEL_UDP_TABLE_UNSPEC = 0, ETHTOOL_A_TUNNEL_UDP_TABLE_SIZE = 1, ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES = 2, ETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY = 3, __ETHTOOL_A_TUNNEL_UDP_TABLE_CNT = 4, ETHTOOL_A_TUNNEL_UDP_TABLE_MAX = 3, }; enum { ETHTOOL_A_TUNNEL_UDP_UNSPEC = 0, ETHTOOL_A_TUNNEL_UDP_TABLE = 1, __ETHTOOL_A_TUNNEL_UDP_CNT = 2, ETHTOOL_A_TUNNEL_UDP_MAX = 1, }; enum udp_parsable_tunnel_type { UDP_TUNNEL_TYPE_VXLAN = 1, UDP_TUNNEL_TYPE_GENEVE = 2, UDP_TUNNEL_TYPE_VXLAN_GPE = 4, }; enum udp_tunnel_nic_info_flags { UDP_TUNNEL_NIC_INFO_MAY_SLEEP = 1, UDP_TUNNEL_NIC_INFO_OPEN_ONLY = 2, UDP_TUNNEL_NIC_INFO_IPV4_ONLY = 4, UDP_TUNNEL_NIC_INFO_STATIC_IANA_VXLAN = 8, }; struct udp_tunnel_nic_ops { void (*get_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *); void (*set_port_priv)(struct net_device *, unsigned int, unsigned int, u8); void (*add_port)(struct net_device *, struct udp_tunnel_info *); void (*del_port)(struct net_device *, struct udp_tunnel_info *); void (*reset_ntf)(struct net_device *); size_t (*dump_size)(struct net_device *, unsigned int); int (*dump_write)(struct net_device *, unsigned int, struct sk_buff *); }; struct ethnl_tunnel_info_dump_ctx { struct ethnl_req_info req_info; int pos_hash; int pos_idx; }; enum { ETHTOOL_A_FEC_STAT_UNSPEC = 0, ETHTOOL_A_FEC_STAT_PAD = 1, ETHTOOL_A_FEC_STAT_CORRECTED = 2, ETHTOOL_A_FEC_STAT_UNCORR = 3, ETHTOOL_A_FEC_STAT_CORR_BITS = 4, __ETHTOOL_A_FEC_STAT_CNT = 5, ETHTOOL_A_FEC_STAT_MAX = 4, }; struct fec_stat_grp { u64 stats[9]; u8 cnt; }; struct fec_reply_data { struct ethnl_reply_data base; long unsigned int fec_link_modes[2]; u32 active_fec; u8 fec_auto; struct fec_stat_grp corr; struct fec_stat_grp uncorr; struct fec_stat_grp corr_bits; }; struct eeprom_req_info { struct ethnl_req_info base; u32 offset; u32 length; u8 page; u8 bank; u8 i2c_address; }; struct eeprom_reply_data { struct ethnl_reply_data base; u32 length; u8 *data; }; enum { ETHTOOL_A_STATS_GRP_UNSPEC = 0, ETHTOOL_A_STATS_GRP_PAD = 1, ETHTOOL_A_STATS_GRP_ID = 2, ETHTOOL_A_STATS_GRP_SS_ID = 3, ETHTOOL_A_STATS_GRP_STAT = 4, ETHTOOL_A_STATS_GRP_HIST_RX = 5, ETHTOOL_A_STATS_GRP_HIST_TX = 6, ETHTOOL_A_STATS_GRP_HIST_BKT_LOW = 7, ETHTOOL_A_STATS_GRP_HIST_BKT_HI = 8, ETHTOOL_A_STATS_GRP_HIST_VAL = 9, __ETHTOOL_A_STATS_GRP_CNT = 10, ETHTOOL_A_STATS_GRP_MAX = 4, }; struct stats_req_info { struct ethnl_req_info base; long unsigned int stat_mask[1]; }; struct stats_reply_data { struct ethnl_reply_data base; union { struct { struct ethtool_eth_phy_stats phy_stats; struct ethtool_eth_mac_stats mac_stats; struct ethtool_eth_ctrl_stats ctrl_stats; struct ethtool_rmon_stats rmon_stats; }; struct { struct ethtool_eth_phy_stats phy_stats; struct ethtool_eth_mac_stats mac_stats; struct ethtool_eth_ctrl_stats ctrl_stats; struct ethtool_rmon_stats rmon_stats; } stats; }; const struct ethtool_rmon_hist_range *rmon_ranges; }; struct phc_vclocks_reply_data { struct ethnl_reply_data base; int num; int *index; }; struct module_reply_data { struct ethnl_reply_data base; struct ethtool_module_power_mode_params power; }; struct ip_mreqn { struct in_addr imr_multiaddr; struct in_addr imr_address; int imr_ifindex; }; struct rtmsg { unsigned char rtm_family; unsigned char rtm_dst_len; unsigned char rtm_src_len; unsigned char rtm_tos; unsigned char rtm_table; unsigned char rtm_protocol; unsigned char rtm_scope; unsigned char rtm_type; unsigned int rtm_flags; }; struct rtvia { __kernel_sa_family_t rtvia_family; __u8 rtvia_addr[0]; }; struct ip_sf_list; struct ip_mc_list { struct in_device *interface; __be32 multiaddr; unsigned int sfmode; struct ip_sf_list *sources; struct ip_sf_list *tomb; long unsigned int sfcount[2]; union { struct ip_mc_list *next; struct ip_mc_list *next_rcu; }; struct ip_mc_list *next_hash; struct timer_list timer; int users; refcount_t refcnt; spinlock_t lock; char tm_running; char reporter; char unsolicit_count; char loaded; unsigned char gsquery; unsigned char crcount; struct callback_head rcu; }; struct ip_sf_socklist { unsigned int sl_max; unsigned int sl_count; struct callback_head rcu; __be32 sl_addr[0]; }; struct ip_mc_socklist { struct ip_mc_socklist *next_rcu; struct ip_mreqn multi; unsigned int sfmode; struct ip_sf_socklist *sflist; struct callback_head rcu; }; struct ip_sf_list { struct ip_sf_list *sf_next; long unsigned int sf_count[2]; __be32 sf_inaddr; unsigned char sf_gsresp; unsigned char sf_oldin; unsigned char sf_crcount; }; struct ipv4_addr_key { __be32 addr; int vif; }; struct inetpeer_addr { union { struct ipv4_addr_key a4; struct in6_addr a6; u32 key[4]; }; __u16 family; }; struct inet_peer { struct rb_node rb_node; struct inetpeer_addr daddr; u32 metrics[17]; u32 rate_tokens; u32 n_redirects; long unsigned int rate_last; union { struct { atomic_t rid; }; struct callback_head rcu; }; __u32 dtime; refcount_t refcnt; }; struct fib_rt_info { struct fib_info *fi; u32 tb_id; __be32 dst; int dst_len; u8 tos; u8 type; u8 offload: 1; u8 trap: 1; u8 offload_failed: 1; u8 unused: 5; }; struct uncached_list { spinlock_t lock; struct list_head head; }; struct rt_cache_stat { unsigned int in_slow_tot; unsigned int in_slow_mc; unsigned int in_no_route; unsigned int in_brd; unsigned int in_martian_dst; unsigned int in_martian_src; unsigned int out_slow_tot; unsigned int out_slow_mc; }; struct fib_alias { struct hlist_node fa_list; struct fib_info *fa_info; u8 fa_tos; u8 fa_type; u8 fa_state; u8 fa_slen; u32 tb_id; s16 fa_default; u8 offload: 1; u8 trap: 1; u8 offload_failed: 1; u8 unused: 5; struct callback_head rcu; }; struct fib_prop { int error; u8 scope; }; struct net_offload { struct offload_callbacks callbacks; unsigned int flags; }; struct raw_hashinfo { rwlock_t lock; struct hlist_head ht[256]; }; enum ip_defrag_users { IP_DEFRAG_LOCAL_DELIVER = 0, IP_DEFRAG_CALL_RA_CHAIN = 1, IP_DEFRAG_CONNTRACK_IN = 2, __IP_DEFRAG_CONNTRACK_IN_END = 65537, IP_DEFRAG_CONNTRACK_OUT = 65538, __IP_DEFRAG_CONNTRACK_OUT_END = 131073, IP_DEFRAG_CONNTRACK_BRIDGE_IN = 131074, __IP_DEFRAG_CONNTRACK_BRIDGE_IN = 196609, IP_DEFRAG_VS_IN = 196610, IP_DEFRAG_VS_OUT = 196611, IP_DEFRAG_VS_FWD = 196612, IP_DEFRAG_AF_PACKET = 196613, IP_DEFRAG_MACVLAN = 196614, }; enum { INET_FRAG_FIRST_IN = 1, INET_FRAG_LAST_IN = 2, INET_FRAG_COMPLETE = 4, INET_FRAG_HASH_DEAD = 8, }; struct ipq { struct inet_frag_queue q; u8 ecn; u16 max_df_size; int iif; unsigned int rid; struct inet_peer *peer; }; typedef union { __be32 a4; __be32 a6[4]; struct in6_addr in6; } xfrm_address_t; struct xfrm_id { xfrm_address_t daddr; __be32 spi; __u8 proto; }; struct xfrm_sec_ctx { __u8 ctx_doi; __u8 ctx_alg; __u16 ctx_len; __u32 ctx_sid; char ctx_str[0]; }; struct xfrm_selector { xfrm_address_t daddr; xfrm_address_t saddr; __be16 dport; __be16 dport_mask; __be16 sport; __be16 sport_mask; __u16 family; __u8 prefixlen_d; __u8 prefixlen_s; __u8 proto; int ifindex; __kernel_uid32_t user; }; struct xfrm_lifetime_cfg { __u64 soft_byte_limit; __u64 hard_byte_limit; __u64 soft_packet_limit; __u64 hard_packet_limit; __u64 soft_add_expires_seconds; __u64 hard_add_expires_seconds; __u64 soft_use_expires_seconds; __u64 hard_use_expires_seconds; }; struct xfrm_lifetime_cur { __u64 bytes; __u64 packets; __u64 add_time; __u64 use_time; }; struct xfrm_replay_state { __u32 oseq; __u32 seq; __u32 bitmap; }; struct xfrm_replay_state_esn { unsigned int bmp_len; __u32 oseq; __u32 seq; __u32 oseq_hi; __u32 seq_hi; __u32 replay_window; __u32 bmp[0]; }; struct xfrm_algo { char alg_name[64]; unsigned int alg_key_len; char alg_key[0]; }; struct xfrm_algo_auth { char alg_name[64]; unsigned int alg_key_len; unsigned int alg_trunc_len; char alg_key[0]; }; struct xfrm_algo_aead { char alg_name[64]; unsigned int alg_key_len; unsigned int alg_icv_len; char alg_key[0]; }; struct xfrm_stats { __u32 replay_window; __u32 replay; __u32 integrity_failed; }; struct xfrm_encap_tmpl { __u16 encap_type; __be16 encap_sport; __be16 encap_dport; xfrm_address_t encap_oa; }; struct xfrm_mark { __u32 v; __u32 m; }; struct xfrm_address_filter { xfrm_address_t saddr; xfrm_address_t daddr; __u16 family; __u8 splen; __u8 dplen; }; struct xfrm_state_walk { struct list_head all; u8 state; u8 dying; u8 proto; u32 seq; struct xfrm_address_filter *filter; }; struct xfrm_state_offload { struct net_device *dev; netdevice_tracker dev_tracker; struct net_device *real_dev; long unsigned int offload_handle; unsigned int num_exthdrs; u8 flags; }; struct xfrm_mode { u8 encap; u8 family; u8 flags; }; enum xfrm_replay_mode { XFRM_REPLAY_MODE_LEGACY = 0, XFRM_REPLAY_MODE_BMP = 1, XFRM_REPLAY_MODE_ESN = 2, }; struct xfrm_type; struct xfrm_type_offload; struct xfrm_state { possible_net_t xs_net; union { struct hlist_node gclist; struct hlist_node bydst; }; struct hlist_node bysrc; struct hlist_node byspi; struct hlist_node byseq; refcount_t refcnt; spinlock_t lock; struct xfrm_id id; struct xfrm_selector sel; struct xfrm_mark mark; u32 if_id; u32 tfcpad; u32 genid; struct xfrm_state_walk km; struct { u32 reqid; u8 mode; u8 replay_window; u8 aalgo; u8 ealgo; u8 calgo; u8 flags; u16 family; xfrm_address_t saddr; int header_len; int trailer_len; u32 extra_flags; struct xfrm_mark smark; } props; struct xfrm_lifetime_cfg lft; struct xfrm_algo_auth *aalg; struct xfrm_algo *ealg; struct xfrm_algo *calg; struct xfrm_algo_aead *aead; const char *geniv; struct xfrm_encap_tmpl *encap; struct sock *encap_sk; xfrm_address_t *coaddr; struct xfrm_state *tunnel; atomic_t tunnel_users; struct xfrm_replay_state replay; struct xfrm_replay_state_esn *replay_esn; struct xfrm_replay_state preplay; struct xfrm_replay_state_esn *preplay_esn; enum xfrm_replay_mode repl_mode; u32 xflags; u32 replay_maxage; u32 replay_maxdiff; struct timer_list rtimer; struct xfrm_stats stats; struct xfrm_lifetime_cur curlft; struct hrtimer mtimer; struct xfrm_state_offload xso; long int saved_tmo; time64_t lastused; struct page_frag xfrag; const struct xfrm_type *type; struct xfrm_mode inner_mode; struct xfrm_mode inner_mode_iaf; struct xfrm_mode outer_mode; const struct xfrm_type_offload *type_offload; struct xfrm_sec_ctx *security; void *data; }; struct xfrm_type { struct module *owner; u8 proto; u8 flags; int (*init_state)(struct xfrm_state *); void (*destructor)(struct xfrm_state *); int (*input)(struct xfrm_state *, struct sk_buff *); int (*output)(struct xfrm_state *, struct sk_buff *); int (*reject)(struct xfrm_state *, struct sk_buff *, const struct flowi *); }; struct xfrm_type_offload { struct module *owner; u8 proto; void (*encap)(struct xfrm_state *, struct sk_buff *); int (*input_tail)(struct xfrm_state *, struct sk_buff *); int (*xmit)(struct xfrm_state *, struct sk_buff *, netdev_features_t); }; struct sec_path { int len; int olen; struct xfrm_state *xvec[6]; struct xfrm_offload ovec[1]; }; typedef u8 u_int8_t; struct ip_options_data { struct ip_options_rcu opt; char data[40]; }; enum { LWTUNNEL_XMIT_DONE = 0, LWTUNNEL_XMIT_CONTINUE = 1, }; struct ipcm_cookie { struct sockcm_cookie sockc; __be32 addr; int oif; struct ip_options_rcu *opt; __u8 ttl; __s16 tos; char priority; __u16 gso_size; }; struct ip_fraglist_iter { struct sk_buff *frag; struct iphdr *iph; int offset; unsigned int hlen; }; struct ip_frag_state { bool DF; unsigned int hlen; unsigned int ll_rs; unsigned int mtu; unsigned int left; int offset; int ptr; __be16 not_last_frag; }; struct ip_reply_arg { struct kvec iov[1]; int flags; __wsum csum; int csumoffset; int bound_dev_if; u8 tos; kuid_t uid; }; struct ip_mreq_source { __be32 imr_multiaddr; __be32 imr_interface; __be32 imr_sourceaddr; }; struct ip_msfilter { union { struct { __be32 imsf_multiaddr_aux; __be32 imsf_interface_aux; __u32 imsf_fmode_aux; __u32 imsf_numsrc_aux; __be32 imsf_slist[1]; }; struct { __be32 imsf_multiaddr; __be32 imsf_interface; __u32 imsf_fmode; __u32 imsf_numsrc; __be32 imsf_slist_flex[0]; }; }; }; struct group_req { __u32 gr_interface; struct __kernel_sockaddr_storage gr_group; }; struct group_source_req { __u32 gsr_interface; struct __kernel_sockaddr_storage gsr_group; struct __kernel_sockaddr_storage gsr_source; }; struct group_filter { union { struct { __u32 gf_interface_aux; struct __kernel_sockaddr_storage gf_group_aux; __u32 gf_fmode_aux; __u32 gf_numsrc_aux; struct __kernel_sockaddr_storage gf_slist[1]; }; struct { __u32 gf_interface; struct __kernel_sockaddr_storage gf_group; __u32 gf_fmode; __u32 gf_numsrc; struct __kernel_sockaddr_storage gf_slist_flex[0]; }; }; }; struct in_pktinfo { int ipi_ifindex; struct in_addr ipi_spec_dst; struct in_addr ipi_addr; }; struct compat_group_req { __u32 gr_interface; struct __kernel_sockaddr_storage gr_group; } __attribute__((packed)); struct compat_group_source_req { __u32 gsr_interface; struct __kernel_sockaddr_storage gsr_group; struct __kernel_sockaddr_storage gsr_source; } __attribute__((packed)); struct compat_group_filter { union { struct { __u32 gf_interface_aux; struct __kernel_sockaddr_storage gf_group_aux; __u32 gf_fmode_aux; __u32 gf_numsrc_aux; struct __kernel_sockaddr_storage gf_slist[1]; } __attribute__((packed)); struct { __u32 gf_interface; struct __kernel_sockaddr_storage gf_group; __u32 gf_fmode; __u32 gf_numsrc; struct __kernel_sockaddr_storage gf_slist_flex[0]; } __attribute__((packed)); }; } __attribute__((packed)); struct tcpvegas_info { __u32 tcpv_enabled; __u32 tcpv_rttcnt; __u32 tcpv_rtt; __u32 tcpv_minrtt; }; struct tcp_dctcp_info { __u16 dctcp_enabled; __u16 dctcp_ce_state; __u32 dctcp_alpha; __u32 dctcp_ab_ecn; __u32 dctcp_ab_tot; }; struct tcp_bbr_info { __u32 bbr_bw_lo; __u32 bbr_bw_hi; __u32 bbr_min_rtt; __u32 bbr_pacing_gain; __u32 bbr_cwnd_gain; }; union tcp_cc_info { struct tcpvegas_info vegas; struct tcp_dctcp_info dctcp; struct tcp_bbr_info bbr; }; enum { BPF_TCP_ESTABLISHED = 1, BPF_TCP_SYN_SENT = 2, BPF_TCP_SYN_RECV = 3, BPF_TCP_FIN_WAIT1 = 4, BPF_TCP_FIN_WAIT2 = 5, BPF_TCP_TIME_WAIT = 6, BPF_TCP_CLOSE = 7, BPF_TCP_CLOSE_WAIT = 8, BPF_TCP_LAST_ACK = 9, BPF_TCP_LISTEN = 10, BPF_TCP_CLOSING = 11, BPF_TCP_NEW_SYN_RECV = 12, BPF_TCP_MAX_STATES = 13, }; enum inet_csk_ack_state_t { ICSK_ACK_SCHED = 1, ICSK_ACK_TIMER = 2, ICSK_ACK_PUSHED = 4, ICSK_ACK_PUSHED2 = 8, ICSK_ACK_NOW = 16, }; enum { TCP_FLAG_CWR = 32768, TCP_FLAG_ECE = 16384, TCP_FLAG_URG = 8192, TCP_FLAG_ACK = 4096, TCP_FLAG_PSH = 2048, TCP_FLAG_RST = 1024, TCP_FLAG_SYN = 512, TCP_FLAG_FIN = 256, TCP_RESERVED_BITS = 15, TCP_DATA_OFFSET = 240, }; struct tcp_repair_opt { __u32 opt_code; __u32 opt_val; }; struct tcp_repair_window { __u32 snd_wl1; __u32 snd_wnd; __u32 max_window; __u32 rcv_wnd; __u32 rcv_wup; }; enum { TCP_NO_QUEUE = 0, TCP_RECV_QUEUE = 1, TCP_SEND_QUEUE = 2, TCP_QUEUES_NR = 3, }; struct tcp_info { __u8 tcpi_state; __u8 tcpi_ca_state; __u8 tcpi_retransmits; __u8 tcpi_probes; __u8 tcpi_backoff; __u8 tcpi_options; __u8 tcpi_snd_wscale: 4; __u8 tcpi_rcv_wscale: 4; __u8 tcpi_delivery_rate_app_limited: 1; __u8 tcpi_fastopen_client_fail: 2; __u32 tcpi_rto; __u32 tcpi_ato; __u32 tcpi_snd_mss; __u32 tcpi_rcv_mss; __u32 tcpi_unacked; __u32 tcpi_sacked; __u32 tcpi_lost; __u32 tcpi_retrans; __u32 tcpi_fackets; __u32 tcpi_last_data_sent; __u32 tcpi_last_ack_sent; __u32 tcpi_last_data_recv; __u32 tcpi_last_ack_recv; __u32 tcpi_pmtu; __u32 tcpi_rcv_ssthresh; __u32 tcpi_rtt; __u32 tcpi_rttvar; __u32 tcpi_snd_ssthresh; __u32 tcpi_snd_cwnd; __u32 tcpi_advmss; __u32 tcpi_reordering; __u32 tcpi_rcv_rtt; __u32 tcpi_rcv_space; __u32 tcpi_total_retrans; __u64 tcpi_pacing_rate; __u64 tcpi_max_pacing_rate; __u64 tcpi_bytes_acked; __u64 tcpi_bytes_received; __u32 tcpi_segs_out; __u32 tcpi_segs_in; __u32 tcpi_notsent_bytes; __u32 tcpi_min_rtt; __u32 tcpi_data_segs_in; __u32 tcpi_data_segs_out; __u64 tcpi_delivery_rate; __u64 tcpi_busy_time; __u64 tcpi_rwnd_limited; __u64 tcpi_sndbuf_limited; __u32 tcpi_delivered; __u32 tcpi_delivered_ce; __u64 tcpi_bytes_sent; __u64 tcpi_bytes_retrans; __u32 tcpi_dsack_dups; __u32 tcpi_reord_seen; __u32 tcpi_rcv_ooopack; __u32 tcpi_snd_wnd; }; enum { TCP_NLA_PAD = 0, TCP_NLA_BUSY = 1, TCP_NLA_RWND_LIMITED = 2, TCP_NLA_SNDBUF_LIMITED = 3, TCP_NLA_DATA_SEGS_OUT = 4, TCP_NLA_TOTAL_RETRANS = 5, TCP_NLA_PACING_RATE = 6, TCP_NLA_DELIVERY_RATE = 7, TCP_NLA_SND_CWND = 8, TCP_NLA_REORDERING = 9, TCP_NLA_MIN_RTT = 10, TCP_NLA_RECUR_RETRANS = 11, TCP_NLA_DELIVERY_RATE_APP_LMT = 12, TCP_NLA_SNDQ_SIZE = 13, TCP_NLA_CA_STATE = 14, TCP_NLA_SND_SSTHRESH = 15, TCP_NLA_DELIVERED = 16, TCP_NLA_DELIVERED_CE = 17, TCP_NLA_BYTES_SENT = 18, TCP_NLA_BYTES_RETRANS = 19, TCP_NLA_DSACK_DUPS = 20, TCP_NLA_REORD_SEEN = 21, TCP_NLA_SRTT = 22, TCP_NLA_TIMEOUT_REHASH = 23, TCP_NLA_BYTES_NOTSENT = 24, TCP_NLA_EDT = 25, TCP_NLA_TTL = 26, }; struct tcp_zerocopy_receive { __u64 address; __u32 length; __u32 recv_skip_hint; __u32 inq; __s32 err; __u64 copybuf_address; __s32 copybuf_len; __u32 flags; __u64 msg_control; __u64 msg_controllen; __u32 msg_flags; __u32 reserved; }; enum tcp_chrono { TCP_CHRONO_UNSPEC = 0, TCP_CHRONO_BUSY = 1, TCP_CHRONO_RWND_LIMITED = 2, TCP_CHRONO_SNDBUF_LIMITED = 3, __TCP_CHRONO_MAX = 4, }; enum { TCP_CMSG_INQ = 1, TCP_CMSG_TS = 2, }; struct tcp_splice_state { struct pipe_inode_info *pipe; size_t len; unsigned int flags; }; enum tcp_fastopen_client_fail { TFO_STATUS_UNSPEC = 0, TFO_COOKIE_UNAVAILABLE = 1, TFO_DATA_NOT_ACKED = 2, TFO_SYN_RETRANSMITTED = 3, }; struct tcp_sack_block_wire { __be32 start_seq; __be32 end_seq; }; enum tcp_queue { TCP_FRAG_IN_WRITE_QUEUE = 0, TCP_FRAG_IN_RTX_QUEUE = 1, }; enum tcp_ca_ack_event_flags { CA_ACK_SLOWPATH = 1, CA_ACK_WIN_UPDATE = 2, CA_ACK_ECE = 4, }; struct tcp_sacktag_state { u64 first_sackt; u64 last_sackt; u32 reord; u32 sack_delivered; int flag; unsigned int mss_now; struct rate_sample *rate; }; enum pkt_hash_types { PKT_HASH_TYPE_NONE = 0, PKT_HASH_TYPE_L2 = 1, PKT_HASH_TYPE_L3 = 2, PKT_HASH_TYPE_L4 = 3, }; enum { BPF_WRITE_HDR_TCP_CURRENT_MSS = 1, BPF_WRITE_HDR_TCP_SYNACK_COOKIE = 2, }; enum tsq_flags { TSQF_THROTTLED = 1, TSQF_QUEUED = 2, TCPF_TSQ_DEFERRED = 4, TCPF_WRITE_TIMER_DEFERRED = 8, TCPF_DELACK_TIMER_DEFERRED = 16, TCPF_MTU_REDUCED_DEFERRED = 32, }; struct mptcp_out_options {}; union tcp_md5_addr { struct in_addr a4; struct in6_addr a6; }; struct tcp_md5sig_key { struct hlist_node node; u8 keylen; u8 family; u8 prefixlen; u8 flags; union tcp_md5_addr addr; int l3index; u8 key[80]; struct callback_head rcu; }; struct tcp_out_options { u16 options; u16 mss; u8 ws; u8 num_sack_blocks; u8 hash_size; u8 bpf_opt_len; __u8 *hash_location; __u32 tsval; __u32 tsecr; struct tcp_fastopen_cookie *fastopen_cookie; struct mptcp_out_options mptcp; }; struct tsq_tasklet { struct tasklet_struct tasklet; struct list_head head; }; struct icmp_err { int errno; unsigned int fatal: 1; }; enum tcp_tw_status { TCP_TW_SUCCESS = 0, TCP_TW_RST = 1, TCP_TW_ACK = 2, TCP_TW_SYN = 3, }; enum tcp_seq_states { TCP_SEQ_STATE_LISTENING = 0, TCP_SEQ_STATE_ESTABLISHED = 1, }; struct tcp_seq_afinfo { sa_family_t family; }; struct tcp_iter_state { struct seq_net_private p; enum tcp_seq_states state; struct sock *syn_wait_sk; int bucket; int offset; int sbucket; int num; loff_t last_pos; }; struct bpf_tcp_iter_state { struct tcp_iter_state state; unsigned int cur_sk; unsigned int end_sk; unsigned int max_sk; struct sock **batch; bool st_bucket_done; }; struct bpf_iter__tcp { union { struct bpf_iter_meta *meta; }; union { struct sock_common *sk_common; }; uid_t uid; }; enum tcp_metric_index { TCP_METRIC_RTT = 0, TCP_METRIC_RTTVAR = 1, TCP_METRIC_SSTHRESH = 2, TCP_METRIC_CWND = 3, TCP_METRIC_REORDERING = 4, TCP_METRIC_RTT_US = 5, TCP_METRIC_RTTVAR_US = 6, __TCP_METRIC_MAX = 7, }; enum { TCP_METRICS_ATTR_UNSPEC = 0, TCP_METRICS_ATTR_ADDR_IPV4 = 1, TCP_METRICS_ATTR_ADDR_IPV6 = 2, TCP_METRICS_ATTR_AGE = 3, TCP_METRICS_ATTR_TW_TSVAL = 4, TCP_METRICS_ATTR_TW_TS_STAMP = 5, TCP_METRICS_ATTR_VALS = 6, TCP_METRICS_ATTR_FOPEN_MSS = 7, TCP_METRICS_ATTR_FOPEN_SYN_DROPS = 8, TCP_METRICS_ATTR_FOPEN_SYN_DROP_TS = 9, TCP_METRICS_ATTR_FOPEN_COOKIE = 10, TCP_METRICS_ATTR_SADDR_IPV4 = 11, TCP_METRICS_ATTR_SADDR_IPV6 = 12, TCP_METRICS_ATTR_PAD = 13, __TCP_METRICS_ATTR_MAX = 14, }; enum { TCP_METRICS_CMD_UNSPEC = 0, TCP_METRICS_CMD_GET = 1, TCP_METRICS_CMD_DEL = 2, __TCP_METRICS_CMD_MAX = 3, }; struct tcp_fastopen_metrics { u16 mss; u16 syn_loss: 10; u16 try_exp: 2; long unsigned int last_syn_loss; struct tcp_fastopen_cookie cookie; }; struct tcp_metrics_block { struct tcp_metrics_block *tcpm_next; possible_net_t tcpm_net; struct inetpeer_addr tcpm_saddr; struct inetpeer_addr tcpm_daddr; long unsigned int tcpm_stamp; u32 tcpm_lock; u32 tcpm_vals[5]; struct tcp_fastopen_metrics tcpm_fastopen; struct callback_head callback_head; }; struct tcpm_hash_bucket { struct tcp_metrics_block *chain; }; struct icmp_filter { __u32 data; }; struct raw_iter_state { struct seq_net_private p; int bucket; }; struct raw_sock { struct inet_sock inet; struct icmp_filter filter; u32 ipmr_table; }; struct raw_frag_vec { struct msghdr *msg; union { struct icmphdr icmph; char c[1]; } hdr; int hlen; }; struct ip_tunnel_encap { u16 type; u16 flags; __be16 sport; __be16 dport; }; struct ip_tunnel_encap_ops { size_t (*encap_hlen)(struct ip_tunnel_encap *); int (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi4 *); int (*err_handler)(struct sk_buff *, u32); }; struct udp_skb_cb { union { struct inet_skb_parm h4; struct inet6_skb_parm h6; } header; __u16 cscov; __u8 partial_cov; }; struct udp_dev_scratch { u32 _tsize_state; u16 len; bool is_linear; bool csum_unnecessary; }; struct udp_seq_afinfo { sa_family_t family; struct udp_table *udp_table; }; struct udp_iter_state { struct seq_net_private p; int bucket; struct udp_seq_afinfo *bpf_seq_afinfo; }; struct bpf_iter__udp { union { struct bpf_iter_meta *meta; }; union { struct udp_sock *udp_sk; }; uid_t uid; int: 32; int bucket; }; struct inet_protosw { struct list_head list; short unsigned int type; short unsigned int protocol; struct proto *prot; const struct proto_ops *ops; unsigned char flags; }; typedef struct sock * (*udp_lookup_t)(const struct sk_buff *, __be16, __be16); typedef struct sk_buff * (*gro_receive_t)(struct list_head *, struct sk_buff *); typedef struct sk_buff * (*gro_receive_sk_t)(struct sock *, struct list_head *, struct sk_buff *); struct xfrm_state___2; struct arpreq { struct sockaddr arp_pa; struct sockaddr arp_ha; int arp_flags; struct sockaddr arp_netmask; char arp_dev[16]; }; enum { AX25_VALUES_IPDEFMODE = 0, AX25_VALUES_AXDEFMODE = 1, AX25_VALUES_BACKOFF = 2, AX25_VALUES_CONMODE = 3, AX25_VALUES_WINDOW = 4, AX25_VALUES_EWINDOW = 5, AX25_VALUES_T1 = 6, AX25_VALUES_T2 = 7, AX25_VALUES_T3 = 8, AX25_VALUES_IDLE = 9, AX25_VALUES_N2 = 10, AX25_VALUES_PACLEN = 11, AX25_VALUES_PROTOCOL = 12, AX25_VALUES_DS_TIMEOUT = 13, AX25_MAX_VALUES = 14, }; enum { XFRM_LOOKUP_ICMP = 1, XFRM_LOOKUP_QUEUE = 2, XFRM_LOOKUP_KEEP_DST_REF = 4, }; struct icmp_ext_hdr { __u8 reserved1: 4; __u8 version: 4; __u8 reserved2; __sum16 checksum; }; struct icmp_extobj_hdr { __be16 length; __u8 class_num; __u8 class_type; }; struct icmp_ext_echo_ctype3_hdr { __be16 afi; __u8 addrlen; __u8 reserved; }; struct icmp_ext_echo_iio { struct icmp_extobj_hdr extobj_hdr; union { char name[16]; __be32 ifindex; struct { struct icmp_ext_echo_ctype3_hdr ctype3_hdr; union { __be32 ipv4_addr; struct in6_addr ipv6_addr; } ip_addr; } addr; } ident; }; struct icmp_bxm { struct sk_buff *skb; int offset; int data_len; struct { struct icmphdr icmph; __be32 times[3]; } data; int head_len; struct ip_options_data replyopts; }; struct icmp_control { bool (*handler)(struct sk_buff *); short int error; }; struct ifaddrmsg { __u8 ifa_family; __u8 ifa_prefixlen; __u8 ifa_flags; __u8 ifa_scope; __u32 ifa_index; }; enum { IFA_UNSPEC = 0, IFA_ADDRESS = 1, IFA_LOCAL = 2, IFA_LABEL = 3, IFA_BROADCAST = 4, IFA_ANYCAST = 5, IFA_CACHEINFO = 6, IFA_MULTICAST = 7, IFA_FLAGS = 8, IFA_RT_PRIORITY = 9, IFA_TARGET_NETNSID = 10, __IFA_MAX = 11, }; struct ifa_cacheinfo { __u32 ifa_prefered; __u32 ifa_valid; __u32 cstamp; __u32 tstamp; }; enum { IFLA_INET_UNSPEC = 0, IFLA_INET_CONF = 1, __IFLA_INET_MAX = 2, }; struct in_validator_info { __be32 ivi_addr; struct in_device *ivi_dev; struct netlink_ext_ack *extack; }; struct netconfmsg { __u8 ncm_family; }; enum { NETCONFA_UNSPEC = 0, NETCONFA_IFINDEX = 1, NETCONFA_FORWARDING = 2, NETCONFA_RP_FILTER = 3, NETCONFA_MC_FORWARDING = 4, NETCONFA_PROXY_NEIGH = 5, NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN = 6, NETCONFA_INPUT = 7, NETCONFA_BC_FORWARDING = 8, __NETCONFA_MAX = 9, }; struct inet_fill_args { u32 portid; u32 seq; int event; unsigned int flags; int netnsid; int ifindex; }; struct devinet_sysctl_table { struct ctl_table_header *sysctl_header; struct ctl_table devinet_vars[34]; }; struct rtentry { long unsigned int rt_pad1; struct sockaddr rt_dst; struct sockaddr rt_gateway; struct sockaddr rt_genmask; short unsigned int rt_flags; short int rt_pad2; long unsigned int rt_pad3; void *rt_pad4; short int rt_metric; char *rt_dev; long unsigned int rt_mtu; long unsigned int rt_window; short unsigned int rt_irtt; }; struct pingv6_ops { int (*ipv6_recv_error)(struct sock *, struct msghdr *, int, int *); void (*ip6_datagram_recv_common_ctl)(struct sock *, struct msghdr *, struct sk_buff *); void (*ip6_datagram_recv_specific_ctl)(struct sock *, struct msghdr *, struct sk_buff *); int (*icmpv6_err_convert)(u8, u8, int *); void (*ipv6_icmp_error)(struct sock *, struct sk_buff *, int, __be16, u32, u8 *); int (*ipv6_chk_addr)(struct net *, const struct in6_addr *, const struct net_device *, int); }; struct igmphdr { __u8 type; __u8 code; __sum16 csum; __be32 group; }; struct igmp_mc_iter_state { struct seq_net_private p; struct net_device *dev; struct in_device *in_dev; }; struct igmp_mcf_iter_state { struct seq_net_private p; struct net_device *dev; struct in_device *idev; struct ip_mc_list *im; }; struct rtnexthop { short unsigned int rtnh_len; unsigned char rtnh_flags; unsigned char rtnh_hops; int rtnh_ifindex; }; struct fib_config { u8 fc_dst_len; u8 fc_tos; u8 fc_protocol; u8 fc_scope; u8 fc_type; u8 fc_gw_family; u32 fc_table; __be32 fc_dst; union { __be32 fc_gw4; struct in6_addr fc_gw6; }; int fc_oif; u32 fc_flags; u32 fc_priority; __be32 fc_prefsrc; u32 fc_nh_id; struct nlattr *fc_mx; struct rtnexthop *fc_mp; int fc_mx_len; int fc_mp_len; u32 fc_flow; u32 fc_nlflags; struct nl_info fc_nlinfo; struct nlattr *fc_encap; u16 fc_encap_type; }; struct fib_result_nl { __be32 fl_addr; u32 fl_mark; unsigned char fl_tos; unsigned char fl_scope; unsigned char tb_id_in; unsigned char tb_id; unsigned char prefixlen; unsigned char nh_sel; unsigned char type; unsigned char scope; int err; }; struct fib_dump_filter { u32 table_id; bool filter_set; bool dump_routes; bool dump_exceptions; unsigned char protocol; unsigned char rt_type; unsigned int flags; struct net_device *dev; }; struct fib_nh_notifier_info { struct fib_notifier_info info; struct fib_nh *fib_nh; }; struct fib_entry_notifier_info { struct fib_notifier_info info; u32 dst; int dst_len; struct fib_info *fi; u8 tos; u8 type; u32 tb_id; }; typedef unsigned int t_key; struct key_vector { t_key key; unsigned char pos; unsigned char bits; unsigned char slen; union { struct hlist_head leaf; struct key_vector *tnode[0]; }; }; struct tnode { struct callback_head rcu; t_key empty_children; t_key full_children; struct key_vector *parent; struct key_vector kv[1]; }; struct trie_stat { unsigned int totdepth; unsigned int maxdepth; unsigned int tnodes; unsigned int leaves; unsigned int nullpointers; unsigned int prefixes; unsigned int nodesizes[32]; }; struct trie { struct key_vector kv[1]; }; struct fib_trie_iter { struct seq_net_private p; struct fib_table *tb; struct key_vector *tnode; unsigned int index; unsigned int depth; }; struct fib_route_iter { struct seq_net_private p; struct fib_table *main_tb; struct key_vector *tnode; loff_t pos; t_key key; }; struct ipfrag_skb_cb { union { struct inet_skb_parm h4; struct inet6_skb_parm h6; }; struct sk_buff *next_frag; int frag_run_len; }; struct icmpv6_echo { __be16 identifier; __be16 sequence; }; struct icmpv6_nd_advt { __u32 reserved: 5; __u32 override: 1; __u32 solicited: 1; __u32 router: 1; __u32 reserved2: 24; }; struct icmpv6_nd_ra { __u8 hop_limit; __u8 reserved: 3; __u8 router_pref: 2; __u8 home_agent: 1; __u8 other: 1; __u8 managed: 1; __be16 rt_lifetime; }; struct icmp6hdr { __u8 icmp6_type; __u8 icmp6_code; __sum16 icmp6_cksum; union { __be32 un_data32[1]; __be16 un_data16[2]; __u8 un_data8[4]; struct icmpv6_echo u_echo; struct icmpv6_nd_advt u_nd_advt; struct icmpv6_nd_ra u_nd_ra; } icmp6_dataun; }; struct ping_iter_state { struct seq_net_private p; int bucket; sa_family_t family; }; struct pingfakehdr { struct icmphdr icmph; struct msghdr *msg; sa_family_t family; __wsum wcheck; }; struct ping_table { struct hlist_nulls_head hash[64]; rwlock_t lock; }; enum lwtunnel_ip_t { LWTUNNEL_IP_UNSPEC = 0, LWTUNNEL_IP_ID = 1, LWTUNNEL_IP_DST = 2, LWTUNNEL_IP_SRC = 3, LWTUNNEL_IP_TTL = 4, LWTUNNEL_IP_TOS = 5, LWTUNNEL_IP_FLAGS = 6, LWTUNNEL_IP_PAD = 7, LWTUNNEL_IP_OPTS = 8, __LWTUNNEL_IP_MAX = 9, }; enum lwtunnel_ip6_t { LWTUNNEL_IP6_UNSPEC = 0, LWTUNNEL_IP6_ID = 1, LWTUNNEL_IP6_DST = 2, LWTUNNEL_IP6_SRC = 3, LWTUNNEL_IP6_HOPLIMIT = 4, LWTUNNEL_IP6_TC = 5, LWTUNNEL_IP6_FLAGS = 6, LWTUNNEL_IP6_PAD = 7, LWTUNNEL_IP6_OPTS = 8, __LWTUNNEL_IP6_MAX = 9, }; enum { LWTUNNEL_IP_OPTS_UNSPEC = 0, LWTUNNEL_IP_OPTS_GENEVE = 1, LWTUNNEL_IP_OPTS_VXLAN = 2, LWTUNNEL_IP_OPTS_ERSPAN = 3, __LWTUNNEL_IP_OPTS_MAX = 4, }; enum { LWTUNNEL_IP_OPT_GENEVE_UNSPEC = 0, LWTUNNEL_IP_OPT_GENEVE_CLASS = 1, LWTUNNEL_IP_OPT_GENEVE_TYPE = 2, LWTUNNEL_IP_OPT_GENEVE_DATA = 3, __LWTUNNEL_IP_OPT_GENEVE_MAX = 4, }; enum { LWTUNNEL_IP_OPT_VXLAN_UNSPEC = 0, LWTUNNEL_IP_OPT_VXLAN_GBP = 1, __LWTUNNEL_IP_OPT_VXLAN_MAX = 2, }; enum { LWTUNNEL_IP_OPT_ERSPAN_UNSPEC = 0, LWTUNNEL_IP_OPT_ERSPAN_VER = 1, LWTUNNEL_IP_OPT_ERSPAN_INDEX = 2, LWTUNNEL_IP_OPT_ERSPAN_DIR = 3, LWTUNNEL_IP_OPT_ERSPAN_HWID = 4, __LWTUNNEL_IP_OPT_ERSPAN_MAX = 5, }; struct lwtunnel_encap_ops { int (*build_state)(struct net *, struct nlattr *, unsigned int, const void *, struct lwtunnel_state **, struct netlink_ext_ack *); void (*destroy_state)(struct lwtunnel_state *); int (*output)(struct net *, struct sock *, struct sk_buff *); int (*input)(struct sk_buff *); int (*fill_encap)(struct sk_buff *, struct lwtunnel_state *); int (*get_encap_size)(struct lwtunnel_state *); int (*cmp_encap)(struct lwtunnel_state *, struct lwtunnel_state *); int (*xmit)(struct sk_buff *); struct module *owner; }; struct ip6_tnl_encap_ops { size_t (*encap_hlen)(struct ip_tunnel_encap *); int (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi6 *); int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32); }; struct geneve_opt { __be16 opt_class; u8 type; u8 length: 5; u8 r3: 1; u8 r2: 1; u8 r1: 1; u8 opt_data[0]; }; struct vxlan_metadata { u32 gbp; }; struct erspan_md2 { __be32 timestamp; __be16 sgt; __u8 hwid_upper: 2; __u8 ft: 5; __u8 p: 1; __u8 o: 1; __u8 gra: 2; __u8 dir: 1; __u8 hwid: 4; }; struct erspan_metadata { int version; union { __be32 index; struct erspan_md2 md2; } u; }; struct nhmsg { unsigned char nh_family; unsigned char nh_scope; unsigned char nh_protocol; unsigned char resvd; unsigned int nh_flags; }; struct nexthop_grp { __u32 id; __u8 weight; __u8 resvd1; __u16 resvd2; }; enum { NEXTHOP_GRP_TYPE_MPATH = 0, NEXTHOP_GRP_TYPE_RES = 1, __NEXTHOP_GRP_TYPE_MAX = 2, }; enum { NHA_UNSPEC = 0, NHA_ID = 1, NHA_GROUP = 2, NHA_GROUP_TYPE = 3, NHA_BLACKHOLE = 4, NHA_OIF = 5, NHA_GATEWAY = 6, NHA_ENCAP_TYPE = 7, NHA_ENCAP = 8, NHA_GROUPS = 9, NHA_MASTER = 10, NHA_FDB = 11, NHA_RES_GROUP = 12, NHA_RES_BUCKET = 13, __NHA_MAX = 14, }; enum { NHA_RES_GROUP_UNSPEC = 0, NHA_RES_GROUP_PAD = 0, NHA_RES_GROUP_BUCKETS = 1, NHA_RES_GROUP_IDLE_TIMER = 2, NHA_RES_GROUP_UNBALANCED_TIMER = 3, NHA_RES_GROUP_UNBALANCED_TIME = 4, __NHA_RES_GROUP_MAX = 5, }; enum { NHA_RES_BUCKET_UNSPEC = 0, NHA_RES_BUCKET_PAD = 0, NHA_RES_BUCKET_INDEX = 1, NHA_RES_BUCKET_IDLE_TIME = 2, NHA_RES_BUCKET_NH_ID = 3, __NHA_RES_BUCKET_MAX = 4, }; struct nh_config { u32 nh_id; u8 nh_family; u8 nh_protocol; u8 nh_blackhole; u8 nh_fdb; u32 nh_flags; int nh_ifindex; struct net_device *dev; union { __be32 ipv4; struct in6_addr ipv6; } gw; struct nlattr *nh_grp; u16 nh_grp_type; u16 nh_grp_res_num_buckets; long unsigned int nh_grp_res_idle_timer; long unsigned int nh_grp_res_unbalanced_timer; bool nh_grp_res_has_num_buckets; bool nh_grp_res_has_idle_timer; bool nh_grp_res_has_unbalanced_timer; struct nlattr *nh_encap; u16 nh_encap_type; u32 nlflags; struct nl_info nlinfo; }; enum nexthop_event_type { NEXTHOP_EVENT_DEL = 0, NEXTHOP_EVENT_REPLACE = 1, NEXTHOP_EVENT_RES_TABLE_PRE_REPLACE = 2, NEXTHOP_EVENT_BUCKET_REPLACE = 3, }; enum nh_notifier_info_type { NH_NOTIFIER_INFO_TYPE_SINGLE = 0, NH_NOTIFIER_INFO_TYPE_GRP = 1, NH_NOTIFIER_INFO_TYPE_RES_TABLE = 2, NH_NOTIFIER_INFO_TYPE_RES_BUCKET = 3, }; struct nh_notifier_single_info { struct net_device *dev; u8 gw_family; union { __be32 ipv4; struct in6_addr ipv6; }; u8 is_reject: 1; u8 is_fdb: 1; u8 has_encap: 1; }; struct nh_notifier_grp_entry_info { u8 weight; u32 id; struct nh_notifier_single_info nh; }; struct nh_notifier_grp_info { u16 num_nh; bool is_fdb; struct nh_notifier_grp_entry_info nh_entries[0]; }; struct nh_notifier_res_bucket_info { u16 bucket_index; unsigned int idle_timer_ms; bool force; struct nh_notifier_single_info old_nh; struct nh_notifier_single_info new_nh; }; struct nh_notifier_res_table_info { u16 num_nh_buckets; struct nh_notifier_single_info nhs[0]; }; struct nh_notifier_info { struct net *net; struct netlink_ext_ack *extack; u32 id; enum nh_notifier_info_type type; union { struct nh_notifier_single_info *nh; struct nh_notifier_grp_info *nh_grp; struct nh_notifier_res_table_info *nh_res_table; struct nh_notifier_res_bucket_info *nh_res_bucket; }; }; struct nh_dump_filter { u32 nh_id; int dev_idx; int master_idx; bool group_filter; bool fdb_filter; u32 res_bucket_nh_id; }; struct rtm_dump_nh_ctx { u32 idx; }; struct rtm_dump_res_bucket_ctx { struct rtm_dump_nh_ctx nh; u16 bucket_index; u32 done_nh_idx; }; struct rtm_dump_nexthop_bucket_data { struct rtm_dump_res_bucket_ctx *ctx; struct nh_dump_filter filter; }; struct inet6_protocol { void (*early_demux)(struct sk_buff *); void (*early_demux_handler)(struct sk_buff *); int (*handler)(struct sk_buff *); int (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32); unsigned int flags; }; struct snmp_mib { const char *name; int entry; }; struct bictcp { u32 cnt; u32 last_max_cwnd; u32 last_cwnd; u32 last_time; u32 bic_origin_point; u32 bic_K; u32 delay_min; u32 epoch_start; u32 ack_cnt; u32 tcp_cwnd; u16 unused; u8 sample_cnt; u8 found; u32 round_start; u32 end_seq; u32 last_ack; u32 curr_rtt; }; struct tls_rec { struct list_head list; int tx_ready; int tx_flags; struct sk_msg msg_plaintext; struct sk_msg msg_encrypted; struct scatterlist sg_aead_in[2]; struct scatterlist sg_aead_out[2]; char content_type; struct scatterlist sg_content_type; char aad_space[13]; u8 iv_data[16]; struct aead_request aead_req; u8 aead_req_ctx[0]; }; struct tx_work { struct delayed_work work; struct sock *sk; }; struct tls_sw_context_tx { struct crypto_aead *aead_send; struct crypto_wait async_wait; struct tx_work tx_work; struct tls_rec *open_rec; struct list_head tx_list; atomic_t encrypt_pending; spinlock_t encrypt_compl_lock; int async_notify; u8 async_capable: 1; long unsigned int tx_bitmask; }; enum { TCP_BPF_IPV4 = 0, TCP_BPF_IPV6 = 1, TCP_BPF_NUM_PROTS = 2, }; enum { TCP_BPF_BASE = 0, TCP_BPF_TX = 1, TCP_BPF_RX = 2, TCP_BPF_TXRX = 3, TCP_BPF_NUM_CFGS = 4, }; enum { UDP_BPF_IPV4 = 0, UDP_BPF_IPV6 = 1, UDP_BPF_NUM_PROTS = 2, }; typedef u64 (*btf_bpf_tcp_send_ack)(struct tcp_sock *, u32); struct sockaddr_un { __kernel_sa_family_t sun_family; char sun_path[108]; }; struct unix_address { refcount_t refcnt; int len; struct sockaddr_un name[0]; }; struct unix_skb_parms { struct pid *pid; kuid_t uid; kgid_t gid; struct scm_fp_list *fp; u32 consumed; }; struct scm_stat { atomic_t nr_fds; }; struct unix_sock___2 { struct sock sk; struct unix_address *addr; struct path path; struct mutex iolock; struct mutex bindlock; struct sock *peer; struct list_head link; atomic_long_t inflight; spinlock_t lock; long unsigned int gc_flags; long: 64; long: 64; long: 64; long: 64; struct socket_wq peer_wq; wait_queue_entry_t peer_wake; struct scm_stat scm_stat; struct sk_buff *oob_skb; long: 64; }; struct unix_stream_read_state { int (*recv_actor)(struct sk_buff *, int, int, struct unix_stream_read_state *); struct socket *socket; struct msghdr *msg; struct pipe_inode_info *pipe; size_t size; int flags; unsigned int splice_flags; }; struct bpf_iter__unix { union { struct bpf_iter_meta *meta; }; union { struct unix_sock___2 *unix_sk; }; uid_t uid; }; enum { IP6_FH_F_FRAG = 1, IP6_FH_F_AUTH = 2, IP6_FH_F_SKIP_RH = 4, }; typedef void ip6_icmp_send_t(struct sk_buff *, u8, u8, __u32, const struct in6_addr *, const struct inet6_skb_parm *); struct mld_msg { struct icmp6hdr mld_hdr; struct in6_addr mld_mca; }; struct sockaddr_pkt { short unsigned int spkt_family; unsigned char spkt_device[14]; __be16 spkt_protocol; }; struct sockaddr_ll { short unsigned int sll_family; __be16 sll_protocol; int sll_ifindex; short unsigned int sll_hatype; unsigned char sll_pkttype; unsigned char sll_halen; unsigned char sll_addr[8]; }; struct tpacket_stats { unsigned int tp_packets; unsigned int tp_drops; }; struct tpacket_stats_v3 { unsigned int tp_packets; unsigned int tp_drops; unsigned int tp_freeze_q_cnt; }; struct tpacket_rollover_stats { __u64 tp_all; __u64 tp_huge; __u64 tp_failed; }; union tpacket_stats_u { struct tpacket_stats stats1; struct tpacket_stats_v3 stats3; }; struct tpacket_auxdata { __u32 tp_status; __u32 tp_len; __u32 tp_snaplen; __u16 tp_mac; __u16 tp_net; __u16 tp_vlan_tci; __u16 tp_vlan_tpid; }; struct tpacket_hdr { long unsigned int tp_status; unsigned int tp_len; unsigned int tp_snaplen; short unsigned int tp_mac; short unsigned int tp_net; unsigned int tp_sec; unsigned int tp_usec; }; struct tpacket2_hdr { __u32 tp_status; __u32 tp_len; __u32 tp_snaplen; __u16 tp_mac; __u16 tp_net; __u32 tp_sec; __u32 tp_nsec; __u16 tp_vlan_tci; __u16 tp_vlan_tpid; __u8 tp_padding[4]; }; struct tpacket_hdr_variant1 { __u32 tp_rxhash; __u32 tp_vlan_tci; __u16 tp_vlan_tpid; __u16 tp_padding; }; struct tpacket3_hdr { __u32 tp_next_offset; __u32 tp_sec; __u32 tp_nsec; __u32 tp_snaplen; __u32 tp_len; __u32 tp_status; __u16 tp_mac; __u16 tp_net; union { struct tpacket_hdr_variant1 hv1; }; __u8 tp_padding[8]; }; struct tpacket_bd_ts { unsigned int ts_sec; union { unsigned int ts_usec; unsigned int ts_nsec; }; }; struct tpacket_hdr_v1 { __u32 block_status; __u32 num_pkts; __u32 offset_to_first_pkt; __u32 blk_len; __u64 seq_num; struct tpacket_bd_ts ts_first_pkt; struct tpacket_bd_ts ts_last_pkt; }; union tpacket_bd_header_u { struct tpacket_hdr_v1 bh1; }; struct tpacket_block_desc { __u32 version; __u32 offset_to_priv; union tpacket_bd_header_u hdr; }; enum tpacket_versions { TPACKET_V1 = 0, TPACKET_V2 = 1, TPACKET_V3 = 2, }; struct tpacket_req { unsigned int tp_block_size; unsigned int tp_block_nr; unsigned int tp_frame_size; unsigned int tp_frame_nr; }; struct tpacket_req3 { unsigned int tp_block_size; unsigned int tp_block_nr; unsigned int tp_frame_size; unsigned int tp_frame_nr; unsigned int tp_retire_blk_tov; unsigned int tp_sizeof_priv; unsigned int tp_feature_req_word; }; union tpacket_req_u { struct tpacket_req req; struct tpacket_req3 req3; }; struct fanout_args { __u16 id; __u16 type_flags; __u32 max_num_members; }; struct packet_mclist { struct packet_mclist *next; int ifindex; int count; short unsigned int type; short unsigned int alen; unsigned char addr[32]; }; struct pgv; struct tpacket_kbdq_core { struct pgv *pkbdq; unsigned int feature_req_word; unsigned int hdrlen; unsigned char reset_pending_on_curr_blk; unsigned char delete_blk_timer; short unsigned int kactive_blk_num; short unsigned int blk_sizeof_priv; short unsigned int last_kactive_blk_num; char *pkblk_start; char *pkblk_end; int kblk_size; unsigned int max_frame_len; unsigned int knum_blocks; uint64_t knxt_seq_num; char *prev; char *nxt_offset; struct sk_buff *skb; rwlock_t blk_fill_in_prog_lock; short unsigned int retire_blk_tov; short unsigned int version; long unsigned int tov_in_jiffies; struct timer_list retire_blk_timer; }; struct pgv { char *buffer; }; struct packet_ring_buffer { struct pgv *pg_vec; unsigned int head; unsigned int frames_per_block; unsigned int frame_size; unsigned int frame_max; unsigned int pg_vec_order; unsigned int pg_vec_pages; unsigned int pg_vec_len; unsigned int *pending_refcnt; union { long unsigned int *rx_owner_map; struct tpacket_kbdq_core prb_bdqc; }; }; struct packet_fanout { possible_net_t net; unsigned int num_members; u32 max_num_members; u16 id; u8 type; u8 flags; union { atomic_t rr_cur; struct bpf_prog *bpf_prog; }; struct list_head list; spinlock_t lock; refcount_t sk_ref; long: 64; struct packet_type prot_hook; struct sock *arr[0]; }; struct packet_rollover { int sock; atomic_long_t num; atomic_long_t num_huge; atomic_long_t num_failed; long: 64; long: 64; long: 64; long: 64; u32 history[16]; }; struct packet_sock { struct sock sk; struct packet_fanout *fanout; union tpacket_stats_u stats; struct packet_ring_buffer rx_ring; struct packet_ring_buffer tx_ring; int copy_thresh; spinlock_t bind_lock; struct mutex pg_vec_lock; unsigned int running; unsigned int auxdata: 1; unsigned int origdev: 1; unsigned int has_vnet_hdr: 1; unsigned int tp_loss: 1; unsigned int tp_tx_has_off: 1; int pressure; int ifindex; __be16 num; struct packet_rollover *rollover; struct packet_mclist *mclist; atomic_t mapped; enum tpacket_versions tp_version; unsigned int tp_hdrlen; unsigned int tp_reserve; unsigned int tp_tstamp; struct completion skb_completion; struct net_device *cached_dev; int (*xmit)(struct sk_buff *); long: 64; long: 64; long: 64; long: 64; long: 64; struct packet_type prot_hook; atomic_t tp_drops; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct packet_mreq_max { int mr_ifindex; short unsigned int mr_type; short unsigned int mr_alen; unsigned char mr_address[32]; }; union tpacket_uhdr { struct tpacket_hdr *h1; struct tpacket2_hdr *h2; struct tpacket3_hdr *h3; void *raw; }; struct packet_skb_cb { union { struct sockaddr_pkt pkt; union { unsigned int origlen; struct sockaddr_ll ll; }; } sa; }; typedef s8 int8_t; typedef s16 int16_t; enum p9_msg_t { P9_TLERROR = 6, P9_RLERROR = 7, P9_TSTATFS = 8, P9_RSTATFS = 9, P9_TLOPEN = 12, P9_RLOPEN = 13, P9_TLCREATE = 14, P9_RLCREATE = 15, P9_TSYMLINK = 16, P9_RSYMLINK = 17, P9_TMKNOD = 18, P9_RMKNOD = 19, P9_TRENAME = 20, P9_RRENAME = 21, P9_TREADLINK = 22, P9_RREADLINK = 23, P9_TGETATTR = 24, P9_RGETATTR = 25, P9_TSETATTR = 26, P9_RSETATTR = 27, P9_TXATTRWALK = 30, P9_RXATTRWALK = 31, P9_TXATTRCREATE = 32, P9_RXATTRCREATE = 33, P9_TREADDIR = 40, P9_RREADDIR = 41, P9_TFSYNC = 50, P9_RFSYNC = 51, P9_TLOCK = 52, P9_RLOCK = 53, P9_TGETLOCK = 54, P9_RGETLOCK = 55, P9_TLINK = 70, P9_RLINK = 71, P9_TMKDIR = 72, P9_RMKDIR = 73, P9_TRENAMEAT = 74, P9_RRENAMEAT = 75, P9_TUNLINKAT = 76, P9_RUNLINKAT = 77, P9_TVERSION = 100, P9_RVERSION = 101, P9_TAUTH = 102, P9_RAUTH = 103, P9_TATTACH = 104, P9_RATTACH = 105, P9_TERROR = 106, P9_RERROR = 107, P9_TFLUSH = 108, P9_RFLUSH = 109, P9_TWALK = 110, P9_RWALK = 111, P9_TOPEN = 112, P9_ROPEN = 113, P9_TCREATE = 114, P9_RCREATE = 115, P9_TREAD = 116, P9_RREAD = 117, P9_TWRITE = 118, P9_RWRITE = 119, P9_TCLUNK = 120, P9_RCLUNK = 121, P9_TREMOVE = 122, P9_RREMOVE = 123, P9_TSTAT = 124, P9_RSTAT = 125, P9_TWSTAT = 126, P9_RWSTAT = 127, }; enum p9_proto_versions { p9_proto_legacy = 0, p9_proto_2000u = 1, p9_proto_2000L = 2, }; enum p9_req_status_t { REQ_STATUS_ALLOC = 0, REQ_STATUS_UNSENT = 1, REQ_STATUS_SENT = 2, REQ_STATUS_RCVD = 3, REQ_STATUS_FLSHD = 4, REQ_STATUS_ERROR = 5, }; struct trace_event_raw_9p_client_req { struct trace_entry ent; void *clnt; __u8 type; __u32 tag; char __data[0]; }; struct trace_event_raw_9p_client_res { struct trace_entry ent; void *clnt; __u8 type; __u32 tag; __u32 err; char __data[0]; }; struct trace_event_raw_9p_protocol_dump { struct trace_entry ent; void *clnt; __u8 type; __u16 tag; unsigned char line[32]; char __data[0]; }; struct trace_event_data_offsets_9p_client_req {}; struct trace_event_data_offsets_9p_client_res {}; struct trace_event_data_offsets_9p_protocol_dump {}; typedef void (*btf_trace_9p_client_req)(void *, struct p9_client *, int8_t, int); typedef void (*btf_trace_9p_client_res)(void *, struct p9_client *, int8_t, int, int); typedef void (*btf_trace_9p_protocol_dump)(void *, struct p9_client *, struct p9_fcall *); enum { Opt_msize = 0, Opt_trans = 1, Opt_legacy = 2, Opt_version = 3, Opt_err___6 = 4, }; struct errormap { char *name; int val; int namelen; struct hlist_node list; }; struct p9_fd_opts { int rfd; int wfd; u16 port; bool privport; }; enum { Opt_port = 0, Opt_rfdno = 1, Opt_wfdno = 2, Opt_err___7 = 3, Opt_privport = 4, }; enum { Rworksched = 1, Rpending = 2, Wworksched = 4, Wpending = 8, }; struct p9_conn; struct p9_poll_wait { struct p9_conn *conn; wait_queue_entry_t wait; wait_queue_head_t *wait_addr; }; struct p9_conn { struct list_head mux_list; struct p9_client *client; int err; struct list_head req_list; struct list_head unsent_req_list; struct p9_req_t *rreq; struct p9_req_t *wreq; char tmp_buf[7]; struct p9_fcall rc; int wpos; int wsize; char *wbuf; struct list_head poll_pending_link; struct p9_poll_wait poll_wait[2]; poll_table pt; struct work_struct rq; struct work_struct wq; long unsigned int wsched; }; struct p9_trans_fd { struct file *rd; struct file *wr; struct p9_conn conn; }; struct virtio_9p_config { __virtio16 tag_len; __u8 tag[0]; }; struct virtio_chan { bool inuse; spinlock_t lock; struct p9_client *client; struct virtio_device *vdev; struct virtqueue *vq; int ring_bufs_avail; wait_queue_head_t *vc_wq; long unsigned int p9_max_pages; struct scatterlist sg[128]; char *tag; struct list_head chan_list; }; struct sockaddr_xdp { __u16 sxdp_family; __u16 sxdp_flags; __u32 sxdp_ifindex; __u32 sxdp_queue_id; __u32 sxdp_shared_umem_fd; }; struct xdp_ring_offset { __u64 producer; __u64 consumer; __u64 desc; __u64 flags; }; struct xdp_mmap_offsets { struct xdp_ring_offset rx; struct xdp_ring_offset tx; struct xdp_ring_offset fr; struct xdp_ring_offset cr; }; struct xdp_umem_reg { __u64 addr; __u64 len; __u32 chunk_size; __u32 headroom; __u32 flags; }; struct xdp_statistics { __u64 rx_dropped; __u64 rx_invalid_descs; __u64 tx_invalid_descs; __u64 rx_ring_full; __u64 rx_fill_ring_empty_descs; __u64 tx_ring_empty_descs; }; struct xdp_options { __u32 flags; }; struct xdp_desc { __u64 addr; __u32 len; __u32 options; }; struct xsk_map { struct bpf_map map; spinlock_t lock; struct xdp_sock *xsk_map[0]; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct xdp_ring; struct xsk_queue { u32 ring_mask; u32 nentries; u32 cached_prod; u32 cached_cons; struct xdp_ring *ring; u64 invalid_descs; u64 queue_empty_descs; }; struct xdp_ring_offset_v1 { __u64 producer; __u64 consumer; __u64 desc; }; struct xdp_mmap_offsets_v1 { struct xdp_ring_offset_v1 rx; struct xdp_ring_offset_v1 tx; struct xdp_ring_offset_v1 fr; struct xdp_ring_offset_v1 cr; }; struct xsk_map_node { struct list_head node; struct xsk_map *map; struct xdp_sock **map_entry; }; struct xdp_ring { u32 producer; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; u32 pad1; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; u32 consumer; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; u32 pad2; u32 flags; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; u32 pad3; long: 32; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; long: 64; }; struct xdp_rxtx_ring { struct xdp_ring ptrs; struct xdp_desc desc[0]; }; struct xdp_umem_ring { struct xdp_ring ptrs; u64 desc[0]; }; struct xsk_dma_map { dma_addr_t *dma_pages; struct device *dev; struct net_device *netdev; refcount_t users; struct list_head list; u32 dma_pages_cnt; bool dma_need_sync; }; struct xdp_diag_req { __u8 sdiag_family; __u8 sdiag_protocol; __u16 pad; __u32 xdiag_ino; __u32 xdiag_show; __u32 xdiag_cookie[2]; }; struct xdp_diag_msg { __u8 xdiag_family; __u8 xdiag_type; __u16 pad; __u32 xdiag_ino; __u32 xdiag_cookie[2]; }; enum { XDP_DIAG_NONE = 0, XDP_DIAG_INFO = 1, XDP_DIAG_UID = 2, XDP_DIAG_RX_RING = 3, XDP_DIAG_TX_RING = 4, XDP_DIAG_UMEM = 5, XDP_DIAG_UMEM_FILL_RING = 6, XDP_DIAG_UMEM_COMPLETION_RING = 7, XDP_DIAG_MEMINFO = 8, XDP_DIAG_STATS = 9, __XDP_DIAG_MAX = 10, }; struct xdp_diag_info { __u32 ifindex; __u32 queue_id; }; struct xdp_diag_ring { __u32 entries; }; struct xdp_diag_umem { __u64 size; __u32 id; __u32 num_pages; __u32 chunk_size; __u32 headroom; __u32 ifindex; __u32 queue_id; __u32 flags; __u32 refs; }; struct xdp_diag_stats { __u64 n_rx_dropped; __u64 n_rx_invalid; __u64 n_rx_full; __u64 n_fill_ring_empty; __u64 n_tx_invalid; __u64 n_tx_ring_empty; }; struct pcibios_fwaddrmap { struct list_head list; struct pci_dev *dev; resource_size_t fw_addr[11]; }; struct pci_check_idx_range { int start; int end; }; struct pci_raw_ops { int (*read)(unsigned int, unsigned int, unsigned int, int, int, u32 *); int (*write)(unsigned int, unsigned int, unsigned int, int, int, u32); }; struct pci_mmcfg_region { struct list_head list; struct resource res; u64 address; char *virt; u16 segment; u8 start_bus; u8 end_bus; char name[30]; }; struct acpi_table_mcfg { struct acpi_table_header header; u8 reserved[8]; }; struct acpi_mcfg_allocation { u64 address; u16 pci_segment; u8 start_bus_number; u8 end_bus_number; u32 reserved; }; struct pci_mmcfg_hostbridge_probe { u32 bus; u32 devfn; u32 vendor; u32 device; const char * (*probe)(); }; typedef bool (*check_reserved_t)(u64, u64, enum e820_type); struct pci_root_info { struct acpi_pci_root_info common; struct pci_sysdata sd; bool mcfg_added; u8 start_bus; u8 end_bus; }; struct irq_info { u8 bus; u8 devfn; struct { u8 link; u16 bitmap; } __attribute__((packed)) irq[4]; u8 slot; u8 rfu; }; struct irq_routing_table { u32 signature; u16 version; u16 size; u8 rtr_bus; u8 rtr_devfn; u16 exclusive_irqs; u16 rtr_vendor; u16 rtr_device; u32 miniport_data; u8 rfu[11]; u8 checksum; struct irq_info slots[0]; }; struct irq_router { char *name; u16 vendor; u16 device; int (*get)(struct pci_dev *, struct pci_dev *, int); int (*set)(struct pci_dev *, struct pci_dev *, int, int); int (*lvl)(struct pci_dev *, struct pci_dev *, int, int); }; struct irq_router_handler { u16 vendor; int (*probe)(struct irq_router *, struct pci_dev *, u16); }; struct pci_setup_rom { struct setup_data data; uint16_t vendor; uint16_t devid; uint64_t pcilen; long unsigned int segment; long unsigned int bus; long unsigned int device; long unsigned int function; uint8_t romdata[0]; }; enum pci_bf_sort_state { pci_bf_sort_default = 0, pci_force_nobf = 1, pci_force_bf = 2, pci_dmi_bf = 3, }; struct pci_root_res { struct list_head list; struct resource res; }; struct pci_root_info___2 { struct list_head list; char name[12]; struct list_head resources; struct resource busn; int node; int link; }; #ifndef BPF_NO_PRESERVE_ACCESS_INDEX #pragma clang attribute pop #endif # 62787 "./vmlinux.h" #endif /* __VMLINUX_H__ */ # 62789 "./vmlinux.h" # 2 "core.bpf.c" 2 #if 0 /* expanded by -frewrite-includes */ #include #endif /* expanded by -frewrite-includes */ # 3 "core.bpf.c" # 1 "/usr/include/bpf/bpf_helpers.h" 1 3 4 /* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */ #ifndef __BPF_HELPERS__ #define __BPF_HELPERS__ /* * Note that bpf programs need to include either * vmlinux.h (auto-generated from BTF) or linux/types.h * in advance since bpf_helper_defs.h uses such types * as __u64. */ #if 0 /* expanded by -frewrite-includes */ #include "bpf_helper_defs.h" #endif /* expanded by -frewrite-includes */ # 11 "/usr/include/bpf/bpf_helpers.h" 3 4 # 1 "/usr/include/bpf/bpf_helper_defs.h" 1 3 4 /* This is auto-generated file. See bpf_doc.py for details. */ /* Forward declarations of BPF structs */ struct bpf_fib_lookup; struct bpf_sk_lookup; struct bpf_perf_event_data; struct bpf_perf_event_value; struct bpf_pidns_info; struct bpf_redir_neigh; struct bpf_sock; struct bpf_sock_addr; struct bpf_sock_ops; struct bpf_sock_tuple; struct bpf_spin_lock; struct bpf_sysctl; struct bpf_tcp_sock; struct bpf_tunnel_key; struct bpf_xfrm_state; struct linux_binprm; struct pt_regs; struct sk_reuseport_md; struct sockaddr; struct tcphdr; struct seq_file; struct tcp6_sock; struct tcp_sock; struct tcp_timewait_sock; struct tcp_request_sock; struct udp6_sock; struct task_struct; struct __sk_buff; struct sk_msg_md; struct xdp_md; struct path; struct btf_ptr; struct inode; struct socket; struct file; struct bpf_timer; /* * bpf_map_lookup_elem * * Perform a lookup in *map* for an entry associated to *key*. * * Returns * Map value associated to *key*, or **NULL** if no entry was * found. */ static void *(*bpf_map_lookup_elem)(void *map, const void *key) = (void *) 1; /* * bpf_map_update_elem * * Add or update the value of the entry associated to *key* in * *map* with *value*. *flags* is one of: * * **BPF_NOEXIST** * The entry for *key* must not exist in the map. * **BPF_EXIST** * The entry for *key* must already exist in the map. * **BPF_ANY** * No condition on the existence of the entry for *key*. * * Flag value **BPF_NOEXIST** cannot be used for maps of types * **BPF_MAP_TYPE_ARRAY** or **BPF_MAP_TYPE_PERCPU_ARRAY** (all * elements always exist), the helper would return an error. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_map_update_elem)(void *map, const void *key, const void *value, __u64 flags) = (void *) 2; /* * bpf_map_delete_elem * * Delete entry with *key* from *map*. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_map_delete_elem)(void *map, const void *key) = (void *) 3; /* * bpf_probe_read * * For tracing programs, safely attempt to read *size* bytes from * kernel space address *unsafe_ptr* and store the data in *dst*. * * Generally, use **bpf_probe_read_user**\ () or * **bpf_probe_read_kernel**\ () instead. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_probe_read)(void *dst, __u32 size, const void *unsafe_ptr) = (void *) 4; /* * bpf_ktime_get_ns * * Return the time elapsed since system boot, in nanoseconds. * Does not include time the system was suspended. * See: **clock_gettime**\ (**CLOCK_MONOTONIC**) * * Returns * Current *ktime*. */ static __u64 (*bpf_ktime_get_ns)(void) = (void *) 5; /* * bpf_trace_printk * * This helper is a "printk()-like" facility for debugging. It * prints a message defined by format *fmt* (of size *fmt_size*) * to file *\/sys/kernel/debug/tracing/trace* from DebugFS, if * available. It can take up to three additional **u64** * arguments (as an eBPF helpers, the total number of arguments is * limited to five). * * Each time the helper is called, it appends a line to the trace. * Lines are discarded while *\/sys/kernel/debug/tracing/trace* is * open, use *\/sys/kernel/debug/tracing/trace_pipe* to avoid this. * The format of the trace is customizable, and the exact output * one will get depends on the options set in * *\/sys/kernel/debug/tracing/trace_options* (see also the * *README* file under the same directory). However, it usually * defaults to something like: * * :: * * telnet-470 [001] .N.. 419421.045894: 0x00000001: * * In the above: * * * ``telnet`` is the name of the current task. * * ``470`` is the PID of the current task. * * ``001`` is the CPU number on which the task is * running. * * In ``.N..``, each character refers to a set of * options (whether irqs are enabled, scheduling * options, whether hard/softirqs are running, level of * preempt_disabled respectively). **N** means that * **TIF_NEED_RESCHED** and **PREEMPT_NEED_RESCHED** * are set. * * ``419421.045894`` is a timestamp. * * ``0x00000001`` is a fake value used by BPF for the * instruction pointer register. * * ```` is the message formatted with * *fmt*. * * The conversion specifiers supported by *fmt* are similar, but * more limited than for printk(). They are **%d**, **%i**, * **%u**, **%x**, **%ld**, **%li**, **%lu**, **%lx**, **%lld**, * **%lli**, **%llu**, **%llx**, **%p**, **%s**. No modifier (size * of field, padding with zeroes, etc.) is available, and the * helper will return **-EINVAL** (but print nothing) if it * encounters an unknown specifier. * * Also, note that **bpf_trace_printk**\ () is slow, and should * only be used for debugging purposes. For this reason, a notice * block (spanning several lines) is printed to kernel logs and * states that the helper should not be used "for production use" * the first time this helper is used (or more precisely, when * **trace_printk**\ () buffers are allocated). For passing values * to user space, perf events should be preferred. * * Returns * The number of bytes written to the buffer, or a negative error * in case of failure. */ static long (*bpf_trace_printk)(const char *fmt, __u32 fmt_size, ...) = (void *) 6; /* * bpf_get_prandom_u32 * * Get a pseudo-random number. * * From a security point of view, this helper uses its own * pseudo-random internal state, and cannot be used to infer the * seed of other random functions in the kernel. However, it is * essential to note that the generator used by the helper is not * cryptographically secure. * * Returns * A random 32-bit unsigned value. */ static __u32 (*bpf_get_prandom_u32)(void) = (void *) 7; /* * bpf_get_smp_processor_id * * Get the SMP (symmetric multiprocessing) processor id. Note that * all programs run with preemption disabled, which means that the * SMP processor id is stable during all the execution of the * program. * * Returns * The SMP id of the processor running the program. */ static __u32 (*bpf_get_smp_processor_id)(void) = (void *) 8; /* * bpf_skb_store_bytes * * Store *len* bytes from address *from* into the packet * associated to *skb*, at *offset*. *flags* are a combination of * **BPF_F_RECOMPUTE_CSUM** (automatically recompute the * checksum for the packet after storing the bytes) and * **BPF_F_INVALIDATE_HASH** (set *skb*\ **->hash**, *skb*\ * **->swhash** and *skb*\ **->l4hash** to 0). * * A call to this helper is susceptible to change the underlying * packet buffer. Therefore, at load time, all checks on pointers * previously done by the verifier are invalidated and must be * performed again, if the helper is used in combination with * direct packet access. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_skb_store_bytes)(struct __sk_buff *skb, __u32 offset, const void *from, __u32 len, __u64 flags) = (void *) 9; /* * bpf_l3_csum_replace * * Recompute the layer 3 (e.g. IP) checksum for the packet * associated to *skb*. Computation is incremental, so the helper * must know the former value of the header field that was * modified (*from*), the new value of this field (*to*), and the * number of bytes (2 or 4) for this field, stored in *size*. * Alternatively, it is possible to store the difference between * the previous and the new values of the header field in *to*, by * setting *from* and *size* to 0. For both methods, *offset* * indicates the location of the IP checksum within the packet. * * This helper works in combination with **bpf_csum_diff**\ (), * which does not update the checksum in-place, but offers more * flexibility and can handle sizes larger than 2 or 4 for the * checksum to update. * * A call to this helper is susceptible to change the underlying * packet buffer. Therefore, at load time, all checks on pointers * previously done by the verifier are invalidated and must be * performed again, if the helper is used in combination with * direct packet access. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_l3_csum_replace)(struct __sk_buff *skb, __u32 offset, __u64 from, __u64 to, __u64 size) = (void *) 10; /* * bpf_l4_csum_replace * * Recompute the layer 4 (e.g. TCP, UDP or ICMP) checksum for the * packet associated to *skb*. Computation is incremental, so the * helper must know the former value of the header field that was * modified (*from*), the new value of this field (*to*), and the * number of bytes (2 or 4) for this field, stored on the lowest * four bits of *flags*. Alternatively, it is possible to store * the difference between the previous and the new values of the * header field in *to*, by setting *from* and the four lowest * bits of *flags* to 0. For both methods, *offset* indicates the * location of the IP checksum within the packet. In addition to * the size of the field, *flags* can be added (bitwise OR) actual * flags. With **BPF_F_MARK_MANGLED_0**, a null checksum is left * untouched (unless **BPF_F_MARK_ENFORCE** is added as well), and * for updates resulting in a null checksum the value is set to * **CSUM_MANGLED_0** instead. Flag **BPF_F_PSEUDO_HDR** indicates * the checksum is to be computed against a pseudo-header. * * This helper works in combination with **bpf_csum_diff**\ (), * which does not update the checksum in-place, but offers more * flexibility and can handle sizes larger than 2 or 4 for the * checksum to update. * * A call to this helper is susceptible to change the underlying * packet buffer. Therefore, at load time, all checks on pointers * previously done by the verifier are invalidated and must be * performed again, if the helper is used in combination with * direct packet access. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_l4_csum_replace)(struct __sk_buff *skb, __u32 offset, __u64 from, __u64 to, __u64 flags) = (void *) 11; /* * bpf_tail_call * * This special helper is used to trigger a "tail call", or in * other words, to jump into another eBPF program. The same stack * frame is used (but values on stack and in registers for the * caller are not accessible to the callee). This mechanism allows * for program chaining, either for raising the maximum number of * available eBPF instructions, or to execute given programs in * conditional blocks. For security reasons, there is an upper * limit to the number of successive tail calls that can be * performed. * * Upon call of this helper, the program attempts to jump into a * program referenced at index *index* in *prog_array_map*, a * special map of type **BPF_MAP_TYPE_PROG_ARRAY**, and passes * *ctx*, a pointer to the context. * * If the call succeeds, the kernel immediately runs the first * instruction of the new program. This is not a function call, * and it never returns to the previous program. If the call * fails, then the helper has no effect, and the caller continues * to run its subsequent instructions. A call can fail if the * destination program for the jump does not exist (i.e. *index* * is superior to the number of entries in *prog_array_map*), or * if the maximum number of tail calls has been reached for this * chain of programs. This limit is defined in the kernel by the * macro **MAX_TAIL_CALL_CNT** (not accessible to user space), * which is currently set to 32. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_tail_call)(void *ctx, void *prog_array_map, __u32 index) = (void *) 12; /* * bpf_clone_redirect * * Clone and redirect the packet associated to *skb* to another * net device of index *ifindex*. Both ingress and egress * interfaces can be used for redirection. The **BPF_F_INGRESS** * value in *flags* is used to make the distinction (ingress path * is selected if the flag is present, egress path otherwise). * This is the only flag supported for now. * * In comparison with **bpf_redirect**\ () helper, * **bpf_clone_redirect**\ () has the associated cost of * duplicating the packet buffer, but this can be executed out of * the eBPF program. Conversely, **bpf_redirect**\ () is more * efficient, but it is handled through an action code where the * redirection happens only after the eBPF program has returned. * * A call to this helper is susceptible to change the underlying * packet buffer. Therefore, at load time, all checks on pointers * previously done by the verifier are invalidated and must be * performed again, if the helper is used in combination with * direct packet access. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_clone_redirect)(struct __sk_buff *skb, __u32 ifindex, __u64 flags) = (void *) 13; /* * bpf_get_current_pid_tgid * * * Returns * A 64-bit integer containing the current tgid and pid, and * created as such: * *current_task*\ **->tgid << 32 \|** * *current_task*\ **->pid**. */ static __u64 (*bpf_get_current_pid_tgid)(void) = (void *) 14; /* * bpf_get_current_uid_gid * * * Returns * A 64-bit integer containing the current GID and UID, and * created as such: *current_gid* **<< 32 \|** *current_uid*. */ static __u64 (*bpf_get_current_uid_gid)(void) = (void *) 15; /* * bpf_get_current_comm * * Copy the **comm** attribute of the current task into *buf* of * *size_of_buf*. The **comm** attribute contains the name of * the executable (excluding the path) for the current task. The * *size_of_buf* must be strictly positive. On success, the * helper makes sure that the *buf* is NUL-terminated. On failure, * it is filled with zeroes. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_get_current_comm)(void *buf, __u32 size_of_buf) = (void *) 16; /* * bpf_get_cgroup_classid * * Retrieve the classid for the current task, i.e. for the net_cls * cgroup to which *skb* belongs. * * This helper can be used on TC egress path, but not on ingress. * * The net_cls cgroup provides an interface to tag network packets * based on a user-provided identifier for all traffic coming from * the tasks belonging to the related cgroup. See also the related * kernel documentation, available from the Linux sources in file * *Documentation/admin-guide/cgroup-v1/net_cls.rst*. * * The Linux kernel has two versions for cgroups: there are * cgroups v1 and cgroups v2. Both are available to users, who can * use a mixture of them, but note that the net_cls cgroup is for * cgroup v1 only. This makes it incompatible with BPF programs * run on cgroups, which is a cgroup-v2-only feature (a socket can * only hold data for one version of cgroups at a time). * * This helper is only available is the kernel was compiled with * the **CONFIG_CGROUP_NET_CLASSID** configuration option set to * "**y**" or to "**m**". * * Returns * The classid, or 0 for the default unconfigured classid. */ static __u32 (*bpf_get_cgroup_classid)(struct __sk_buff *skb) = (void *) 17; /* * bpf_skb_vlan_push * * Push a *vlan_tci* (VLAN tag control information) of protocol * *vlan_proto* to the packet associated to *skb*, then update * the checksum. Note that if *vlan_proto* is different from * **ETH_P_8021Q** and **ETH_P_8021AD**, it is considered to * be **ETH_P_8021Q**. * * A call to this helper is susceptible to change the underlying * packet buffer. Therefore, at load time, all checks on pointers * previously done by the verifier are invalidated and must be * performed again, if the helper is used in combination with * direct packet access. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_skb_vlan_push)(struct __sk_buff *skb, __be16 vlan_proto, __u16 vlan_tci) = (void *) 18; /* * bpf_skb_vlan_pop * * Pop a VLAN header from the packet associated to *skb*. * * A call to this helper is susceptible to change the underlying * packet buffer. Therefore, at load time, all checks on pointers * previously done by the verifier are invalidated and must be * performed again, if the helper is used in combination with * direct packet access. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_skb_vlan_pop)(struct __sk_buff *skb) = (void *) 19; /* * bpf_skb_get_tunnel_key * * Get tunnel metadata. This helper takes a pointer *key* to an * empty **struct bpf_tunnel_key** of **size**, that will be * filled with tunnel metadata for the packet associated to *skb*. * The *flags* can be set to **BPF_F_TUNINFO_IPV6**, which * indicates that the tunnel is based on IPv6 protocol instead of * IPv4. * * The **struct bpf_tunnel_key** is an object that generalizes the * principal parameters used by various tunneling protocols into a * single struct. This way, it can be used to easily make a * decision based on the contents of the encapsulation header, * "summarized" in this struct. In particular, it holds the IP * address of the remote end (IPv4 or IPv6, depending on the case) * in *key*\ **->remote_ipv4** or *key*\ **->remote_ipv6**. Also, * this struct exposes the *key*\ **->tunnel_id**, which is * generally mapped to a VNI (Virtual Network Identifier), making * it programmable together with the **bpf_skb_set_tunnel_key**\ * () helper. * * Let's imagine that the following code is part of a program * attached to the TC ingress interface, on one end of a GRE * tunnel, and is supposed to filter out all messages coming from * remote ends with IPv4 address other than 10.0.0.1: * * :: * * int ret; * struct bpf_tunnel_key key = {}; * * ret = bpf_skb_get_tunnel_key(skb, &key, sizeof(key), 0); * if (ret < 0) * return TC_ACT_SHOT; // drop packet * * if (key.remote_ipv4 != 0x0a000001) * return TC_ACT_SHOT; // drop packet * * return TC_ACT_OK; // accept packet * * This interface can also be used with all encapsulation devices * that can operate in "collect metadata" mode: instead of having * one network device per specific configuration, the "collect * metadata" mode only requires a single device where the * configuration can be extracted from this helper. * * This can be used together with various tunnels such as VXLan, * Geneve, GRE or IP in IP (IPIP). * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_skb_get_tunnel_key)(struct __sk_buff *skb, struct bpf_tunnel_key *key, __u32 size, __u64 flags) = (void *) 20; /* * bpf_skb_set_tunnel_key * * Populate tunnel metadata for packet associated to *skb.* The * tunnel metadata is set to the contents of *key*, of *size*. The * *flags* can be set to a combination of the following values: * * **BPF_F_TUNINFO_IPV6** * Indicate that the tunnel is based on IPv6 protocol * instead of IPv4. * **BPF_F_ZERO_CSUM_TX** * For IPv4 packets, add a flag to tunnel metadata * indicating that checksum computation should be skipped * and checksum set to zeroes. * **BPF_F_DONT_FRAGMENT** * Add a flag to tunnel metadata indicating that the * packet should not be fragmented. * **BPF_F_SEQ_NUMBER** * Add a flag to tunnel metadata indicating that a * sequence number should be added to tunnel header before * sending the packet. This flag was added for GRE * encapsulation, but might be used with other protocols * as well in the future. * * Here is a typical usage on the transmit path: * * :: * * struct bpf_tunnel_key key; * populate key ... * bpf_skb_set_tunnel_key(skb, &key, sizeof(key), 0); * bpf_clone_redirect(skb, vxlan_dev_ifindex, 0); * * See also the description of the **bpf_skb_get_tunnel_key**\ () * helper for additional information. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_skb_set_tunnel_key)(struct __sk_buff *skb, struct bpf_tunnel_key *key, __u32 size, __u64 flags) = (void *) 21; /* * bpf_perf_event_read * * Read the value of a perf event counter. This helper relies on a * *map* of type **BPF_MAP_TYPE_PERF_EVENT_ARRAY**. The nature of * the perf event counter is selected when *map* is updated with * perf event file descriptors. The *map* is an array whose size * is the number of available CPUs, and each cell contains a value * relative to one CPU. The value to retrieve is indicated by * *flags*, that contains the index of the CPU to look up, masked * with **BPF_F_INDEX_MASK**. Alternatively, *flags* can be set to * **BPF_F_CURRENT_CPU** to indicate that the value for the * current CPU should be retrieved. * * Note that before Linux 4.13, only hardware perf event can be * retrieved. * * Also, be aware that the newer helper * **bpf_perf_event_read_value**\ () is recommended over * **bpf_perf_event_read**\ () in general. The latter has some ABI * quirks where error and counter value are used as a return code * (which is wrong to do since ranges may overlap). This issue is * fixed with **bpf_perf_event_read_value**\ (), which at the same * time provides more features over the **bpf_perf_event_read**\ * () interface. Please refer to the description of * **bpf_perf_event_read_value**\ () for details. * * Returns * The value of the perf event counter read from the map, or a * negative error code in case of failure. */ static __u64 (*bpf_perf_event_read)(void *map, __u64 flags) = (void *) 22; /* * bpf_redirect * * Redirect the packet to another net device of index *ifindex*. * This helper is somewhat similar to **bpf_clone_redirect**\ * (), except that the packet is not cloned, which provides * increased performance. * * Except for XDP, both ingress and egress interfaces can be used * for redirection. The **BPF_F_INGRESS** value in *flags* is used * to make the distinction (ingress path is selected if the flag * is present, egress path otherwise). Currently, XDP only * supports redirection to the egress interface, and accepts no * flag at all. * * The same effect can also be attained with the more generic * **bpf_redirect_map**\ (), which uses a BPF map to store the * redirect target instead of providing it directly to the helper. * * Returns * For XDP, the helper returns **XDP_REDIRECT** on success or * **XDP_ABORTED** on error. For other program types, the values * are **TC_ACT_REDIRECT** on success or **TC_ACT_SHOT** on * error. */ static long (*bpf_redirect)(__u32 ifindex, __u64 flags) = (void *) 23; /* * bpf_get_route_realm * * Retrieve the realm or the route, that is to say the * **tclassid** field of the destination for the *skb*. The * identifier retrieved is a user-provided tag, similar to the * one used with the net_cls cgroup (see description for * **bpf_get_cgroup_classid**\ () helper), but here this tag is * held by a route (a destination entry), not by a task. * * Retrieving this identifier works with the clsact TC egress hook * (see also **tc-bpf(8)**), or alternatively on conventional * classful egress qdiscs, but not on TC ingress path. In case of * clsact TC egress hook, this has the advantage that, internally, * the destination entry has not been dropped yet in the transmit * path. Therefore, the destination entry does not need to be * artificially held via **netif_keep_dst**\ () for a classful * qdisc until the *skb* is freed. * * This helper is available only if the kernel was compiled with * **CONFIG_IP_ROUTE_CLASSID** configuration option. * * Returns * The realm of the route for the packet associated to *skb*, or 0 * if none was found. */ static __u32 (*bpf_get_route_realm)(struct __sk_buff *skb) = (void *) 24; /* * bpf_perf_event_output * * Write raw *data* blob into a special BPF perf event held by * *map* of type **BPF_MAP_TYPE_PERF_EVENT_ARRAY**. This perf * event must have the following attributes: **PERF_SAMPLE_RAW** * as **sample_type**, **PERF_TYPE_SOFTWARE** as **type**, and * **PERF_COUNT_SW_BPF_OUTPUT** as **config**. * * The *flags* are used to indicate the index in *map* for which * the value must be put, masked with **BPF_F_INDEX_MASK**. * Alternatively, *flags* can be set to **BPF_F_CURRENT_CPU** * to indicate that the index of the current CPU core should be * used. * * The value to write, of *size*, is passed through eBPF stack and * pointed by *data*. * * The context of the program *ctx* needs also be passed to the * helper. * * On user space, a program willing to read the values needs to * call **perf_event_open**\ () on the perf event (either for * one or for all CPUs) and to store the file descriptor into the * *map*. This must be done before the eBPF program can send data * into it. An example is available in file * *samples/bpf/trace_output_user.c* in the Linux kernel source * tree (the eBPF program counterpart is in * *samples/bpf/trace_output_kern.c*). * * **bpf_perf_event_output**\ () achieves better performance * than **bpf_trace_printk**\ () for sharing data with user * space, and is much better suitable for streaming data from eBPF * programs. * * Note that this helper is not restricted to tracing use cases * and can be used with programs attached to TC or XDP as well, * where it allows for passing data to user space listeners. Data * can be: * * * Only custom structs, * * Only the packet payload, or * * A combination of both. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_perf_event_output)(void *ctx, void *map, __u64 flags, void *data, __u64 size) = (void *) 25; /* * bpf_skb_load_bytes * * This helper was provided as an easy way to load data from a * packet. It can be used to load *len* bytes from *offset* from * the packet associated to *skb*, into the buffer pointed by * *to*. * * Since Linux 4.7, usage of this helper has mostly been replaced * by "direct packet access", enabling packet data to be * manipulated with *skb*\ **->data** and *skb*\ **->data_end** * pointing respectively to the first byte of packet data and to * the byte after the last byte of packet data. However, it * remains useful if one wishes to read large quantities of data * at once from a packet into the eBPF stack. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_skb_load_bytes)(const void *skb, __u32 offset, void *to, __u32 len) = (void *) 26; /* * bpf_get_stackid * * Walk a user or a kernel stack and return its id. To achieve * this, the helper needs *ctx*, which is a pointer to the context * on which the tracing program is executed, and a pointer to a * *map* of type **BPF_MAP_TYPE_STACK_TRACE**. * * The last argument, *flags*, holds the number of stack frames to * skip (from 0 to 255), masked with * **BPF_F_SKIP_FIELD_MASK**. The next bits can be used to set * a combination of the following flags: * * **BPF_F_USER_STACK** * Collect a user space stack instead of a kernel stack. * **BPF_F_FAST_STACK_CMP** * Compare stacks by hash only. * **BPF_F_REUSE_STACKID** * If two different stacks hash into the same *stackid*, * discard the old one. * * The stack id retrieved is a 32 bit long integer handle which * can be further combined with other data (including other stack * ids) and used as a key into maps. This can be useful for * generating a variety of graphs (such as flame graphs or off-cpu * graphs). * * For walking a stack, this helper is an improvement over * **bpf_probe_read**\ (), which can be used with unrolled loops * but is not efficient and consumes a lot of eBPF instructions. * Instead, **bpf_get_stackid**\ () can collect up to * **PERF_MAX_STACK_DEPTH** both kernel and user frames. Note that * this limit can be controlled with the **sysctl** program, and * that it should be manually increased in order to profile long * user stacks (such as stacks for Java programs). To do so, use: * * :: * * # sysctl kernel.perf_event_max_stack= * * Returns * The positive or null stack id on success, or a negative error * in case of failure. */ static long (*bpf_get_stackid)(void *ctx, void *map, __u64 flags) = (void *) 27; /* * bpf_csum_diff * * Compute a checksum difference, from the raw buffer pointed by * *from*, of length *from_size* (that must be a multiple of 4), * towards the raw buffer pointed by *to*, of size *to_size* * (same remark). An optional *seed* can be added to the value * (this can be cascaded, the seed may come from a previous call * to the helper). * * This is flexible enough to be used in several ways: * * * With *from_size* == 0, *to_size* > 0 and *seed* set to * checksum, it can be used when pushing new data. * * With *from_size* > 0, *to_size* == 0 and *seed* set to * checksum, it can be used when removing data from a packet. * * With *from_size* > 0, *to_size* > 0 and *seed* set to 0, it * can be used to compute a diff. Note that *from_size* and * *to_size* do not need to be equal. * * This helper can be used in combination with * **bpf_l3_csum_replace**\ () and **bpf_l4_csum_replace**\ (), to * which one can feed in the difference computed with * **bpf_csum_diff**\ (). * * Returns * The checksum result, or a negative error code in case of * failure. */ static __s64 (*bpf_csum_diff)(__be32 *from, __u32 from_size, __be32 *to, __u32 to_size, __wsum seed) = (void *) 28; /* * bpf_skb_get_tunnel_opt * * Retrieve tunnel options metadata for the packet associated to * *skb*, and store the raw tunnel option data to the buffer *opt* * of *size*. * * This helper can be used with encapsulation devices that can * operate in "collect metadata" mode (please refer to the related * note in the description of **bpf_skb_get_tunnel_key**\ () for * more details). A particular example where this can be used is * in combination with the Geneve encapsulation protocol, where it * allows for pushing (with **bpf_skb_get_tunnel_opt**\ () helper) * and retrieving arbitrary TLVs (Type-Length-Value headers) from * the eBPF program. This allows for full customization of these * headers. * * Returns * The size of the option data retrieved. */ static long (*bpf_skb_get_tunnel_opt)(struct __sk_buff *skb, void *opt, __u32 size) = (void *) 29; /* * bpf_skb_set_tunnel_opt * * Set tunnel options metadata for the packet associated to *skb* * to the option data contained in the raw buffer *opt* of *size*. * * See also the description of the **bpf_skb_get_tunnel_opt**\ () * helper for additional information. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_skb_set_tunnel_opt)(struct __sk_buff *skb, void *opt, __u32 size) = (void *) 30; /* * bpf_skb_change_proto * * Change the protocol of the *skb* to *proto*. Currently * supported are transition from IPv4 to IPv6, and from IPv6 to * IPv4. The helper takes care of the groundwork for the * transition, including resizing the socket buffer. The eBPF * program is expected to fill the new headers, if any, via * **skb_store_bytes**\ () and to recompute the checksums with * **bpf_l3_csum_replace**\ () and **bpf_l4_csum_replace**\ * (). The main case for this helper is to perform NAT64 * operations out of an eBPF program. * * Internally, the GSO type is marked as dodgy so that headers are * checked and segments are recalculated by the GSO/GRO engine. * The size for GSO target is adapted as well. * * All values for *flags* are reserved for future usage, and must * be left at zero. * * A call to this helper is susceptible to change the underlying * packet buffer. Therefore, at load time, all checks on pointers * previously done by the verifier are invalidated and must be * performed again, if the helper is used in combination with * direct packet access. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_skb_change_proto)(struct __sk_buff *skb, __be16 proto, __u64 flags) = (void *) 31; /* * bpf_skb_change_type * * Change the packet type for the packet associated to *skb*. This * comes down to setting *skb*\ **->pkt_type** to *type*, except * the eBPF program does not have a write access to *skb*\ * **->pkt_type** beside this helper. Using a helper here allows * for graceful handling of errors. * * The major use case is to change incoming *skb*s to * **PACKET_HOST** in a programmatic way instead of having to * recirculate via **redirect**\ (..., **BPF_F_INGRESS**), for * example. * * Note that *type* only allows certain values. At this time, they * are: * * **PACKET_HOST** * Packet is for us. * **PACKET_BROADCAST** * Send packet to all. * **PACKET_MULTICAST** * Send packet to group. * **PACKET_OTHERHOST** * Send packet to someone else. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_skb_change_type)(struct __sk_buff *skb, __u32 type) = (void *) 32; /* * bpf_skb_under_cgroup * * Check whether *skb* is a descendant of the cgroup2 held by * *map* of type **BPF_MAP_TYPE_CGROUP_ARRAY**, at *index*. * * Returns * The return value depends on the result of the test, and can be: * * * 0, if the *skb* failed the cgroup2 descendant test. * * 1, if the *skb* succeeded the cgroup2 descendant test. * * A negative error code, if an error occurred. */ static long (*bpf_skb_under_cgroup)(struct __sk_buff *skb, void *map, __u32 index) = (void *) 33; /* * bpf_get_hash_recalc * * Retrieve the hash of the packet, *skb*\ **->hash**. If it is * not set, in particular if the hash was cleared due to mangling, * recompute this hash. Later accesses to the hash can be done * directly with *skb*\ **->hash**. * * Calling **bpf_set_hash_invalid**\ (), changing a packet * prototype with **bpf_skb_change_proto**\ (), or calling * **bpf_skb_store_bytes**\ () with the * **BPF_F_INVALIDATE_HASH** are actions susceptible to clear * the hash and to trigger a new computation for the next call to * **bpf_get_hash_recalc**\ (). * * Returns * The 32-bit hash. */ static __u32 (*bpf_get_hash_recalc)(struct __sk_buff *skb) = (void *) 34; /* * bpf_get_current_task * * * Returns * A pointer to the current task struct. */ static __u64 (*bpf_get_current_task)(void) = (void *) 35; /* * bpf_probe_write_user * * Attempt in a safe way to write *len* bytes from the buffer * *src* to *dst* in memory. It only works for threads that are in * user context, and *dst* must be a valid user space address. * * This helper should not be used to implement any kind of * security mechanism because of TOC-TOU attacks, but rather to * debug, divert, and manipulate execution of semi-cooperative * processes. * * Keep in mind that this feature is meant for experiments, and it * has a risk of crashing the system and running programs. * Therefore, when an eBPF program using this helper is attached, * a warning including PID and process name is printed to kernel * logs. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_probe_write_user)(void *dst, const void *src, __u32 len) = (void *) 36; /* * bpf_current_task_under_cgroup * * Check whether the probe is being run is the context of a given * subset of the cgroup2 hierarchy. The cgroup2 to test is held by * *map* of type **BPF_MAP_TYPE_CGROUP_ARRAY**, at *index*. * * Returns * The return value depends on the result of the test, and can be: * * * 0, if current task belongs to the cgroup2. * * 1, if current task does not belong to the cgroup2. * * A negative error code, if an error occurred. */ static long (*bpf_current_task_under_cgroup)(void *map, __u32 index) = (void *) 37; /* * bpf_skb_change_tail * * Resize (trim or grow) the packet associated to *skb* to the * new *len*. The *flags* are reserved for future usage, and must * be left at zero. * * The basic idea is that the helper performs the needed work to * change the size of the packet, then the eBPF program rewrites * the rest via helpers like **bpf_skb_store_bytes**\ (), * **bpf_l3_csum_replace**\ (), **bpf_l3_csum_replace**\ () * and others. This helper is a slow path utility intended for * replies with control messages. And because it is targeted for * slow path, the helper itself can afford to be slow: it * implicitly linearizes, unclones and drops offloads from the * *skb*. * * A call to this helper is susceptible to change the underlying * packet buffer. Therefore, at load time, all checks on pointers * previously done by the verifier are invalidated and must be * performed again, if the helper is used in combination with * direct packet access. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_skb_change_tail)(struct __sk_buff *skb, __u32 len, __u64 flags) = (void *) 38; /* * bpf_skb_pull_data * * Pull in non-linear data in case the *skb* is non-linear and not * all of *len* are part of the linear section. Make *len* bytes * from *skb* readable and writable. If a zero value is passed for * *len*, then the whole length of the *skb* is pulled. * * This helper is only needed for reading and writing with direct * packet access. * * For direct packet access, testing that offsets to access * are within packet boundaries (test on *skb*\ **->data_end**) is * susceptible to fail if offsets are invalid, or if the requested * data is in non-linear parts of the *skb*. On failure the * program can just bail out, or in the case of a non-linear * buffer, use a helper to make the data available. The * **bpf_skb_load_bytes**\ () helper is a first solution to access * the data. Another one consists in using **bpf_skb_pull_data** * to pull in once the non-linear parts, then retesting and * eventually access the data. * * At the same time, this also makes sure the *skb* is uncloned, * which is a necessary condition for direct write. As this needs * to be an invariant for the write part only, the verifier * detects writes and adds a prologue that is calling * **bpf_skb_pull_data()** to effectively unclone the *skb* from * the very beginning in case it is indeed cloned. * * A call to this helper is susceptible to change the underlying * packet buffer. Therefore, at load time, all checks on pointers * previously done by the verifier are invalidated and must be * performed again, if the helper is used in combination with * direct packet access. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_skb_pull_data)(struct __sk_buff *skb, __u32 len) = (void *) 39; /* * bpf_csum_update * * Add the checksum *csum* into *skb*\ **->csum** in case the * driver has supplied a checksum for the entire packet into that * field. Return an error otherwise. This helper is intended to be * used in combination with **bpf_csum_diff**\ (), in particular * when the checksum needs to be updated after data has been * written into the packet through direct packet access. * * Returns * The checksum on success, or a negative error code in case of * failure. */ static __s64 (*bpf_csum_update)(struct __sk_buff *skb, __wsum csum) = (void *) 40; /* * bpf_set_hash_invalid * * Invalidate the current *skb*\ **->hash**. It can be used after * mangling on headers through direct packet access, in order to * indicate that the hash is outdated and to trigger a * recalculation the next time the kernel tries to access this * hash or when the **bpf_get_hash_recalc**\ () helper is called. * */ static void (*bpf_set_hash_invalid)(struct __sk_buff *skb) = (void *) 41; /* * bpf_get_numa_node_id * * Return the id of the current NUMA node. The primary use case * for this helper is the selection of sockets for the local NUMA * node, when the program is attached to sockets using the * **SO_ATTACH_REUSEPORT_EBPF** option (see also **socket(7)**), * but the helper is also available to other eBPF program types, * similarly to **bpf_get_smp_processor_id**\ (). * * Returns * The id of current NUMA node. */ static long (*bpf_get_numa_node_id)(void) = (void *) 42; /* * bpf_skb_change_head * * Grows headroom of packet associated to *skb* and adjusts the * offset of the MAC header accordingly, adding *len* bytes of * space. It automatically extends and reallocates memory as * required. * * This helper can be used on a layer 3 *skb* to push a MAC header * for redirection into a layer 2 device. * * All values for *flags* are reserved for future usage, and must * be left at zero. * * A call to this helper is susceptible to change the underlying * packet buffer. Therefore, at load time, all checks on pointers * previously done by the verifier are invalidated and must be * performed again, if the helper is used in combination with * direct packet access. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_skb_change_head)(struct __sk_buff *skb, __u32 len, __u64 flags) = (void *) 43; /* * bpf_xdp_adjust_head * * Adjust (move) *xdp_md*\ **->data** by *delta* bytes. Note that * it is possible to use a negative value for *delta*. This helper * can be used to prepare the packet for pushing or popping * headers. * * A call to this helper is susceptible to change the underlying * packet buffer. Therefore, at load time, all checks on pointers * previously done by the verifier are invalidated and must be * performed again, if the helper is used in combination with * direct packet access. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_xdp_adjust_head)(struct xdp_md *xdp_md, int delta) = (void *) 44; /* * bpf_probe_read_str * * Copy a NUL terminated string from an unsafe kernel address * *unsafe_ptr* to *dst*. See **bpf_probe_read_kernel_str**\ () for * more details. * * Generally, use **bpf_probe_read_user_str**\ () or * **bpf_probe_read_kernel_str**\ () instead. * * Returns * On success, the strictly positive length of the string, * including the trailing NUL character. On error, a negative * value. */ static long (*bpf_probe_read_str)(void *dst, __u32 size, const void *unsafe_ptr) = (void *) 45; /* * bpf_get_socket_cookie * * If the **struct sk_buff** pointed by *skb* has a known socket, * retrieve the cookie (generated by the kernel) of this socket. * If no cookie has been set yet, generate a new cookie. Once * generated, the socket cookie remains stable for the life of the * socket. This helper can be useful for monitoring per socket * networking traffic statistics as it provides a global socket * identifier that can be assumed unique. * * Returns * A 8-byte long unique number on success, or 0 if the socket * field is missing inside *skb*. */ static __u64 (*bpf_get_socket_cookie)(void *ctx) = (void *) 46; /* * bpf_get_socket_uid * * * Returns * The owner UID of the socket associated to *skb*. If the socket * is **NULL**, or if it is not a full socket (i.e. if it is a * time-wait or a request socket instead), **overflowuid** value * is returned (note that **overflowuid** might also be the actual * UID value for the socket). */ static __u32 (*bpf_get_socket_uid)(struct __sk_buff *skb) = (void *) 47; /* * bpf_set_hash * * Set the full hash for *skb* (set the field *skb*\ **->hash**) * to value *hash*. * * Returns * 0 */ static long (*bpf_set_hash)(struct __sk_buff *skb, __u32 hash) = (void *) 48; /* * bpf_setsockopt * * Emulate a call to **setsockopt()** on the socket associated to * *bpf_socket*, which must be a full socket. The *level* at * which the option resides and the name *optname* of the option * must be specified, see **setsockopt(2)** for more information. * The option value of length *optlen* is pointed by *optval*. * * *bpf_socket* should be one of the following: * * * **struct bpf_sock_ops** for **BPF_PROG_TYPE_SOCK_OPS**. * * **struct bpf_sock_addr** for **BPF_CGROUP_INET4_CONNECT** * and **BPF_CGROUP_INET6_CONNECT**. * * This helper actually implements a subset of **setsockopt()**. * It supports the following *level*\ s: * * * **SOL_SOCKET**, which supports the following *optname*\ s: * **SO_RCVBUF**, **SO_SNDBUF**, **SO_MAX_PACING_RATE**, * **SO_PRIORITY**, **SO_RCVLOWAT**, **SO_MARK**, * **SO_BINDTODEVICE**, **SO_KEEPALIVE**. * * **IPPROTO_TCP**, which supports the following *optname*\ s: * **TCP_CONGESTION**, **TCP_BPF_IW**, * **TCP_BPF_SNDCWND_CLAMP**, **TCP_SAVE_SYN**, * **TCP_KEEPIDLE**, **TCP_KEEPINTVL**, **TCP_KEEPCNT**, * **TCP_SYNCNT**, **TCP_USER_TIMEOUT**, **TCP_NOTSENT_LOWAT**. * * **IPPROTO_IP**, which supports *optname* **IP_TOS**. * * **IPPROTO_IPV6**, which supports *optname* **IPV6_TCLASS**. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_setsockopt)(void *bpf_socket, int level, int optname, void *optval, int optlen) = (void *) 49; /* * bpf_skb_adjust_room * * Grow or shrink the room for data in the packet associated to * *skb* by *len_diff*, and according to the selected *mode*. * * By default, the helper will reset any offloaded checksum * indicator of the skb to CHECKSUM_NONE. This can be avoided * by the following flag: * * * **BPF_F_ADJ_ROOM_NO_CSUM_RESET**: Do not reset offloaded * checksum data of the skb to CHECKSUM_NONE. * * There are two supported modes at this time: * * * **BPF_ADJ_ROOM_MAC**: Adjust room at the mac layer * (room space is added or removed below the layer 2 header). * * * **BPF_ADJ_ROOM_NET**: Adjust room at the network layer * (room space is added or removed below the layer 3 header). * * The following flags are supported at this time: * * * **BPF_F_ADJ_ROOM_FIXED_GSO**: Do not adjust gso_size. * Adjusting mss in this way is not allowed for datagrams. * * * **BPF_F_ADJ_ROOM_ENCAP_L3_IPV4**, * **BPF_F_ADJ_ROOM_ENCAP_L3_IPV6**: * Any new space is reserved to hold a tunnel header. * Configure skb offsets and other fields accordingly. * * * **BPF_F_ADJ_ROOM_ENCAP_L4_GRE**, * **BPF_F_ADJ_ROOM_ENCAP_L4_UDP**: * Use with ENCAP_L3 flags to further specify the tunnel type. * * * **BPF_F_ADJ_ROOM_ENCAP_L2**\ (*len*): * Use with ENCAP_L3/L4 flags to further specify the tunnel * type; *len* is the length of the inner MAC header. * * * **BPF_F_ADJ_ROOM_ENCAP_L2_ETH**: * Use with BPF_F_ADJ_ROOM_ENCAP_L2 flag to further specify the * L2 type as Ethernet. * * A call to this helper is susceptible to change the underlying * packet buffer. Therefore, at load time, all checks on pointers * previously done by the verifier are invalidated and must be * performed again, if the helper is used in combination with * direct packet access. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_skb_adjust_room)(struct __sk_buff *skb, __s32 len_diff, __u32 mode, __u64 flags) = (void *) 50; /* * bpf_redirect_map * * Redirect the packet to the endpoint referenced by *map* at * index *key*. Depending on its type, this *map* can contain * references to net devices (for forwarding packets through other * ports), or to CPUs (for redirecting XDP frames to another CPU; * but this is only implemented for native XDP (with driver * support) as of this writing). * * The lower two bits of *flags* are used as the return code if * the map lookup fails. This is so that the return value can be * one of the XDP program return codes up to **XDP_TX**, as chosen * by the caller. The higher bits of *flags* can be set to * BPF_F_BROADCAST or BPF_F_EXCLUDE_INGRESS as defined below. * * With BPF_F_BROADCAST the packet will be broadcasted to all the * interfaces in the map, with BPF_F_EXCLUDE_INGRESS the ingress * interface will be excluded when do broadcasting. * * See also **bpf_redirect**\ (), which only supports redirecting * to an ifindex, but doesn't require a map to do so. * * Returns * **XDP_REDIRECT** on success, or the value of the two lower bits * of the *flags* argument on error. */ static long (*bpf_redirect_map)(void *map, __u32 key, __u64 flags) = (void *) 51; /* * bpf_sk_redirect_map * * Redirect the packet to the socket referenced by *map* (of type * **BPF_MAP_TYPE_SOCKMAP**) at index *key*. Both ingress and * egress interfaces can be used for redirection. The * **BPF_F_INGRESS** value in *flags* is used to make the * distinction (ingress path is selected if the flag is present, * egress path otherwise). This is the only flag supported for now. * * Returns * **SK_PASS** on success, or **SK_DROP** on error. */ static long (*bpf_sk_redirect_map)(struct __sk_buff *skb, void *map, __u32 key, __u64 flags) = (void *) 52; /* * bpf_sock_map_update * * Add an entry to, or update a *map* referencing sockets. The * *skops* is used as a new value for the entry associated to * *key*. *flags* is one of: * * **BPF_NOEXIST** * The entry for *key* must not exist in the map. * **BPF_EXIST** * The entry for *key* must already exist in the map. * **BPF_ANY** * No condition on the existence of the entry for *key*. * * If the *map* has eBPF programs (parser and verdict), those will * be inherited by the socket being added. If the socket is * already attached to eBPF programs, this results in an error. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_sock_map_update)(struct bpf_sock_ops *skops, void *map, void *key, __u64 flags) = (void *) 53; /* * bpf_xdp_adjust_meta * * Adjust the address pointed by *xdp_md*\ **->data_meta** by * *delta* (which can be positive or negative). Note that this * operation modifies the address stored in *xdp_md*\ **->data**, * so the latter must be loaded only after the helper has been * called. * * The use of *xdp_md*\ **->data_meta** is optional and programs * are not required to use it. The rationale is that when the * packet is processed with XDP (e.g. as DoS filter), it is * possible to push further meta data along with it before passing * to the stack, and to give the guarantee that an ingress eBPF * program attached as a TC classifier on the same device can pick * this up for further post-processing. Since TC works with socket * buffers, it remains possible to set from XDP the **mark** or * **priority** pointers, or other pointers for the socket buffer. * Having this scratch space generic and programmable allows for * more flexibility as the user is free to store whatever meta * data they need. * * A call to this helper is susceptible to change the underlying * packet buffer. Therefore, at load time, all checks on pointers * previously done by the verifier are invalidated and must be * performed again, if the helper is used in combination with * direct packet access. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_xdp_adjust_meta)(struct xdp_md *xdp_md, int delta) = (void *) 54; /* * bpf_perf_event_read_value * * Read the value of a perf event counter, and store it into *buf* * of size *buf_size*. This helper relies on a *map* of type * **BPF_MAP_TYPE_PERF_EVENT_ARRAY**. The nature of the perf event * counter is selected when *map* is updated with perf event file * descriptors. The *map* is an array whose size is the number of * available CPUs, and each cell contains a value relative to one * CPU. The value to retrieve is indicated by *flags*, that * contains the index of the CPU to look up, masked with * **BPF_F_INDEX_MASK**. Alternatively, *flags* can be set to * **BPF_F_CURRENT_CPU** to indicate that the value for the * current CPU should be retrieved. * * This helper behaves in a way close to * **bpf_perf_event_read**\ () helper, save that instead of * just returning the value observed, it fills the *buf* * structure. This allows for additional data to be retrieved: in * particular, the enabled and running times (in *buf*\ * **->enabled** and *buf*\ **->running**, respectively) are * copied. In general, **bpf_perf_event_read_value**\ () is * recommended over **bpf_perf_event_read**\ (), which has some * ABI issues and provides fewer functionalities. * * These values are interesting, because hardware PMU (Performance * Monitoring Unit) counters are limited resources. When there are * more PMU based perf events opened than available counters, * kernel will multiplex these events so each event gets certain * percentage (but not all) of the PMU time. In case that * multiplexing happens, the number of samples or counter value * will not reflect the case compared to when no multiplexing * occurs. This makes comparison between different runs difficult. * Typically, the counter value should be normalized before * comparing to other experiments. The usual normalization is done * as follows. * * :: * * normalized_counter = counter * t_enabled / t_running * * Where t_enabled is the time enabled for event and t_running is * the time running for event since last normalization. The * enabled and running times are accumulated since the perf event * open. To achieve scaling factor between two invocations of an * eBPF program, users can use CPU id as the key (which is * typical for perf array usage model) to remember the previous * value and do the calculation inside the eBPF program. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_perf_event_read_value)(void *map, __u64 flags, struct bpf_perf_event_value *buf, __u32 buf_size) = (void *) 55; /* * bpf_perf_prog_read_value * * For en eBPF program attached to a perf event, retrieve the * value of the event counter associated to *ctx* and store it in * the structure pointed by *buf* and of size *buf_size*. Enabled * and running times are also stored in the structure (see * description of helper **bpf_perf_event_read_value**\ () for * more details). * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_perf_prog_read_value)(struct bpf_perf_event_data *ctx, struct bpf_perf_event_value *buf, __u32 buf_size) = (void *) 56; /* * bpf_getsockopt * * Emulate a call to **getsockopt()** on the socket associated to * *bpf_socket*, which must be a full socket. The *level* at * which the option resides and the name *optname* of the option * must be specified, see **getsockopt(2)** for more information. * The retrieved value is stored in the structure pointed by * *opval* and of length *optlen*. * * *bpf_socket* should be one of the following: * * * **struct bpf_sock_ops** for **BPF_PROG_TYPE_SOCK_OPS**. * * **struct bpf_sock_addr** for **BPF_CGROUP_INET4_CONNECT** * and **BPF_CGROUP_INET6_CONNECT**. * * This helper actually implements a subset of **getsockopt()**. * It supports the following *level*\ s: * * * **IPPROTO_TCP**, which supports *optname* * **TCP_CONGESTION**. * * **IPPROTO_IP**, which supports *optname* **IP_TOS**. * * **IPPROTO_IPV6**, which supports *optname* **IPV6_TCLASS**. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_getsockopt)(void *bpf_socket, int level, int optname, void *optval, int optlen) = (void *) 57; /* * bpf_override_return * * Used for error injection, this helper uses kprobes to override * the return value of the probed function, and to set it to *rc*. * The first argument is the context *regs* on which the kprobe * works. * * This helper works by setting the PC (program counter) * to an override function which is run in place of the original * probed function. This means the probed function is not run at * all. The replacement function just returns with the required * value. * * This helper has security implications, and thus is subject to * restrictions. It is only available if the kernel was compiled * with the **CONFIG_BPF_KPROBE_OVERRIDE** configuration * option, and in this case it only works on functions tagged with * **ALLOW_ERROR_INJECTION** in the kernel code. * * Also, the helper is only available for the architectures having * the CONFIG_FUNCTION_ERROR_INJECTION option. As of this writing, * x86 architecture is the only one to support this feature. * * Returns * 0 */ static long (*bpf_override_return)(struct pt_regs *regs, __u64 rc) = (void *) 58; /* * bpf_sock_ops_cb_flags_set * * Attempt to set the value of the **bpf_sock_ops_cb_flags** field * for the full TCP socket associated to *bpf_sock_ops* to * *argval*. * * The primary use of this field is to determine if there should * be calls to eBPF programs of type * **BPF_PROG_TYPE_SOCK_OPS** at various points in the TCP * code. A program of the same type can change its value, per * connection and as necessary, when the connection is * established. This field is directly accessible for reading, but * this helper must be used for updates in order to return an * error if an eBPF program tries to set a callback that is not * supported in the current kernel. * * *argval* is a flag array which can combine these flags: * * * **BPF_SOCK_OPS_RTO_CB_FLAG** (retransmission time out) * * **BPF_SOCK_OPS_RETRANS_CB_FLAG** (retransmission) * * **BPF_SOCK_OPS_STATE_CB_FLAG** (TCP state change) * * **BPF_SOCK_OPS_RTT_CB_FLAG** (every RTT) * * Therefore, this function can be used to clear a callback flag by * setting the appropriate bit to zero. e.g. to disable the RTO * callback: * * **bpf_sock_ops_cb_flags_set(bpf_sock,** * **bpf_sock->bpf_sock_ops_cb_flags & ~BPF_SOCK_OPS_RTO_CB_FLAG)** * * Here are some examples of where one could call such eBPF * program: * * * When RTO fires. * * When a packet is retransmitted. * * When the connection terminates. * * When a packet is sent. * * When a packet is received. * * Returns * Code **-EINVAL** if the socket is not a full TCP socket; * otherwise, a positive number containing the bits that could not * be set is returned (which comes down to 0 if all bits were set * as required). */ static long (*bpf_sock_ops_cb_flags_set)(struct bpf_sock_ops *bpf_sock, int argval) = (void *) 59; /* * bpf_msg_redirect_map * * This helper is used in programs implementing policies at the * socket level. If the message *msg* is allowed to pass (i.e. if * the verdict eBPF program returns **SK_PASS**), redirect it to * the socket referenced by *map* (of type * **BPF_MAP_TYPE_SOCKMAP**) at index *key*. Both ingress and * egress interfaces can be used for redirection. The * **BPF_F_INGRESS** value in *flags* is used to make the * distinction (ingress path is selected if the flag is present, * egress path otherwise). This is the only flag supported for now. * * Returns * **SK_PASS** on success, or **SK_DROP** on error. */ static long (*bpf_msg_redirect_map)(struct sk_msg_md *msg, void *map, __u32 key, __u64 flags) = (void *) 60; /* * bpf_msg_apply_bytes * * For socket policies, apply the verdict of the eBPF program to * the next *bytes* (number of bytes) of message *msg*. * * For example, this helper can be used in the following cases: * * * A single **sendmsg**\ () or **sendfile**\ () system call * contains multiple logical messages that the eBPF program is * supposed to read and for which it should apply a verdict. * * An eBPF program only cares to read the first *bytes* of a * *msg*. If the message has a large payload, then setting up * and calling the eBPF program repeatedly for all bytes, even * though the verdict is already known, would create unnecessary * overhead. * * When called from within an eBPF program, the helper sets a * counter internal to the BPF infrastructure, that is used to * apply the last verdict to the next *bytes*. If *bytes* is * smaller than the current data being processed from a * **sendmsg**\ () or **sendfile**\ () system call, the first * *bytes* will be sent and the eBPF program will be re-run with * the pointer for start of data pointing to byte number *bytes* * **+ 1**. If *bytes* is larger than the current data being * processed, then the eBPF verdict will be applied to multiple * **sendmsg**\ () or **sendfile**\ () calls until *bytes* are * consumed. * * Note that if a socket closes with the internal counter holding * a non-zero value, this is not a problem because data is not * being buffered for *bytes* and is sent as it is received. * * Returns * 0 */ static long (*bpf_msg_apply_bytes)(struct sk_msg_md *msg, __u32 bytes) = (void *) 61; /* * bpf_msg_cork_bytes * * For socket policies, prevent the execution of the verdict eBPF * program for message *msg* until *bytes* (byte number) have been * accumulated. * * This can be used when one needs a specific number of bytes * before a verdict can be assigned, even if the data spans * multiple **sendmsg**\ () or **sendfile**\ () calls. The extreme * case would be a user calling **sendmsg**\ () repeatedly with * 1-byte long message segments. Obviously, this is bad for * performance, but it is still valid. If the eBPF program needs * *bytes* bytes to validate a header, this helper can be used to * prevent the eBPF program to be called again until *bytes* have * been accumulated. * * Returns * 0 */ static long (*bpf_msg_cork_bytes)(struct sk_msg_md *msg, __u32 bytes) = (void *) 62; /* * bpf_msg_pull_data * * For socket policies, pull in non-linear data from user space * for *msg* and set pointers *msg*\ **->data** and *msg*\ * **->data_end** to *start* and *end* bytes offsets into *msg*, * respectively. * * If a program of type **BPF_PROG_TYPE_SK_MSG** is run on a * *msg* it can only parse data that the (**data**, **data_end**) * pointers have already consumed. For **sendmsg**\ () hooks this * is likely the first scatterlist element. But for calls relying * on the **sendpage** handler (e.g. **sendfile**\ ()) this will * be the range (**0**, **0**) because the data is shared with * user space and by default the objective is to avoid allowing * user space to modify data while (or after) eBPF verdict is * being decided. This helper can be used to pull in data and to * set the start and end pointer to given values. Data will be * copied if necessary (i.e. if data was not linear and if start * and end pointers do not point to the same chunk). * * A call to this helper is susceptible to change the underlying * packet buffer. Therefore, at load time, all checks on pointers * previously done by the verifier are invalidated and must be * performed again, if the helper is used in combination with * direct packet access. * * All values for *flags* are reserved for future usage, and must * be left at zero. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_msg_pull_data)(struct sk_msg_md *msg, __u32 start, __u32 end, __u64 flags) = (void *) 63; /* * bpf_bind * * Bind the socket associated to *ctx* to the address pointed by * *addr*, of length *addr_len*. This allows for making outgoing * connection from the desired IP address, which can be useful for * example when all processes inside a cgroup should use one * single IP address on a host that has multiple IP configured. * * This helper works for IPv4 and IPv6, TCP and UDP sockets. The * domain (*addr*\ **->sa_family**) must be **AF_INET** (or * **AF_INET6**). It's advised to pass zero port (**sin_port** * or **sin6_port**) which triggers IP_BIND_ADDRESS_NO_PORT-like * behavior and lets the kernel efficiently pick up an unused * port as long as 4-tuple is unique. Passing non-zero port might * lead to degraded performance. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_bind)(struct bpf_sock_addr *ctx, struct sockaddr *addr, int addr_len) = (void *) 64; /* * bpf_xdp_adjust_tail * * Adjust (move) *xdp_md*\ **->data_end** by *delta* bytes. It is * possible to both shrink and grow the packet tail. * Shrink done via *delta* being a negative integer. * * A call to this helper is susceptible to change the underlying * packet buffer. Therefore, at load time, all checks on pointers * previously done by the verifier are invalidated and must be * performed again, if the helper is used in combination with * direct packet access. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_xdp_adjust_tail)(struct xdp_md *xdp_md, int delta) = (void *) 65; /* * bpf_skb_get_xfrm_state * * Retrieve the XFRM state (IP transform framework, see also * **ip-xfrm(8)**) at *index* in XFRM "security path" for *skb*. * * The retrieved value is stored in the **struct bpf_xfrm_state** * pointed by *xfrm_state* and of length *size*. * * All values for *flags* are reserved for future usage, and must * be left at zero. * * This helper is available only if the kernel was compiled with * **CONFIG_XFRM** configuration option. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_skb_get_xfrm_state)(struct __sk_buff *skb, __u32 index, struct bpf_xfrm_state *xfrm_state, __u32 size, __u64 flags) = (void *) 66; /* * bpf_get_stack * * Return a user or a kernel stack in bpf program provided buffer. * To achieve this, the helper needs *ctx*, which is a pointer * to the context on which the tracing program is executed. * To store the stacktrace, the bpf program provides *buf* with * a nonnegative *size*. * * The last argument, *flags*, holds the number of stack frames to * skip (from 0 to 255), masked with * **BPF_F_SKIP_FIELD_MASK**. The next bits can be used to set * the following flags: * * **BPF_F_USER_STACK** * Collect a user space stack instead of a kernel stack. * **BPF_F_USER_BUILD_ID** * Collect buildid+offset instead of ips for user stack, * only valid if **BPF_F_USER_STACK** is also specified. * * **bpf_get_stack**\ () can collect up to * **PERF_MAX_STACK_DEPTH** both kernel and user frames, subject * to sufficient large buffer size. Note that * this limit can be controlled with the **sysctl** program, and * that it should be manually increased in order to profile long * user stacks (such as stacks for Java programs). To do so, use: * * :: * * # sysctl kernel.perf_event_max_stack= * * Returns * A non-negative value equal to or less than *size* on success, * or a negative error in case of failure. */ static long (*bpf_get_stack)(void *ctx, void *buf, __u32 size, __u64 flags) = (void *) 67; /* * bpf_skb_load_bytes_relative * * This helper is similar to **bpf_skb_load_bytes**\ () in that * it provides an easy way to load *len* bytes from *offset* * from the packet associated to *skb*, into the buffer pointed * by *to*. The difference to **bpf_skb_load_bytes**\ () is that * a fifth argument *start_header* exists in order to select a * base offset to start from. *start_header* can be one of: * * **BPF_HDR_START_MAC** * Base offset to load data from is *skb*'s mac header. * **BPF_HDR_START_NET** * Base offset to load data from is *skb*'s network header. * * In general, "direct packet access" is the preferred method to * access packet data, however, this helper is in particular useful * in socket filters where *skb*\ **->data** does not always point * to the start of the mac header and where "direct packet access" * is not available. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_skb_load_bytes_relative)(const void *skb, __u32 offset, void *to, __u32 len, __u32 start_header) = (void *) 68; /* * bpf_fib_lookup * * Do FIB lookup in kernel tables using parameters in *params*. * If lookup is successful and result shows packet is to be * forwarded, the neighbor tables are searched for the nexthop. * If successful (ie., FIB lookup shows forwarding and nexthop * is resolved), the nexthop address is returned in ipv4_dst * or ipv6_dst based on family, smac is set to mac address of * egress device, dmac is set to nexthop mac address, rt_metric * is set to metric from route (IPv4/IPv6 only), and ifindex * is set to the device index of the nexthop from the FIB lookup. * * *plen* argument is the size of the passed in struct. * *flags* argument can be a combination of one or more of the * following values: * * **BPF_FIB_LOOKUP_DIRECT** * Do a direct table lookup vs full lookup using FIB * rules. * **BPF_FIB_LOOKUP_OUTPUT** * Perform lookup from an egress perspective (default is * ingress). * * *ctx* is either **struct xdp_md** for XDP programs or * **struct sk_buff** tc cls_act programs. * * Returns * * < 0 if any input argument is invalid * * 0 on success (packet is forwarded, nexthop neighbor exists) * * > 0 one of **BPF_FIB_LKUP_RET_** codes explaining why the * packet is not forwarded or needs assist from full stack * * If lookup fails with BPF_FIB_LKUP_RET_FRAG_NEEDED, then the MTU * was exceeded and output params->mtu_result contains the MTU. */ static long (*bpf_fib_lookup)(void *ctx, struct bpf_fib_lookup *params, int plen, __u32 flags) = (void *) 69; /* * bpf_sock_hash_update * * Add an entry to, or update a sockhash *map* referencing sockets. * The *skops* is used as a new value for the entry associated to * *key*. *flags* is one of: * * **BPF_NOEXIST** * The entry for *key* must not exist in the map. * **BPF_EXIST** * The entry for *key* must already exist in the map. * **BPF_ANY** * No condition on the existence of the entry for *key*. * * If the *map* has eBPF programs (parser and verdict), those will * be inherited by the socket being added. If the socket is * already attached to eBPF programs, this results in an error. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_sock_hash_update)(struct bpf_sock_ops *skops, void *map, void *key, __u64 flags) = (void *) 70; /* * bpf_msg_redirect_hash * * This helper is used in programs implementing policies at the * socket level. If the message *msg* is allowed to pass (i.e. if * the verdict eBPF program returns **SK_PASS**), redirect it to * the socket referenced by *map* (of type * **BPF_MAP_TYPE_SOCKHASH**) using hash *key*. Both ingress and * egress interfaces can be used for redirection. The * **BPF_F_INGRESS** value in *flags* is used to make the * distinction (ingress path is selected if the flag is present, * egress path otherwise). This is the only flag supported for now. * * Returns * **SK_PASS** on success, or **SK_DROP** on error. */ static long (*bpf_msg_redirect_hash)(struct sk_msg_md *msg, void *map, void *key, __u64 flags) = (void *) 71; /* * bpf_sk_redirect_hash * * This helper is used in programs implementing policies at the * skb socket level. If the sk_buff *skb* is allowed to pass (i.e. * if the verdict eBPF program returns **SK_PASS**), redirect it * to the socket referenced by *map* (of type * **BPF_MAP_TYPE_SOCKHASH**) using hash *key*. Both ingress and * egress interfaces can be used for redirection. The * **BPF_F_INGRESS** value in *flags* is used to make the * distinction (ingress path is selected if the flag is present, * egress otherwise). This is the only flag supported for now. * * Returns * **SK_PASS** on success, or **SK_DROP** on error. */ static long (*bpf_sk_redirect_hash)(struct __sk_buff *skb, void *map, void *key, __u64 flags) = (void *) 72; /* * bpf_lwt_push_encap * * Encapsulate the packet associated to *skb* within a Layer 3 * protocol header. This header is provided in the buffer at * address *hdr*, with *len* its size in bytes. *type* indicates * the protocol of the header and can be one of: * * **BPF_LWT_ENCAP_SEG6** * IPv6 encapsulation with Segment Routing Header * (**struct ipv6_sr_hdr**). *hdr* only contains the SRH, * the IPv6 header is computed by the kernel. * **BPF_LWT_ENCAP_SEG6_INLINE** * Only works if *skb* contains an IPv6 packet. Insert a * Segment Routing Header (**struct ipv6_sr_hdr**) inside * the IPv6 header. * **BPF_LWT_ENCAP_IP** * IP encapsulation (GRE/GUE/IPIP/etc). The outer header * must be IPv4 or IPv6, followed by zero or more * additional headers, up to **LWT_BPF_MAX_HEADROOM** * total bytes in all prepended headers. Please note that * if **skb_is_gso**\ (*skb*) is true, no more than two * headers can be prepended, and the inner header, if * present, should be either GRE or UDP/GUE. * * **BPF_LWT_ENCAP_SEG6**\ \* types can be called by BPF programs * of type **BPF_PROG_TYPE_LWT_IN**; **BPF_LWT_ENCAP_IP** type can * be called by bpf programs of types **BPF_PROG_TYPE_LWT_IN** and * **BPF_PROG_TYPE_LWT_XMIT**. * * A call to this helper is susceptible to change the underlying * packet buffer. Therefore, at load time, all checks on pointers * previously done by the verifier are invalidated and must be * performed again, if the helper is used in combination with * direct packet access. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_lwt_push_encap)(struct __sk_buff *skb, __u32 type, void *hdr, __u32 len) = (void *) 73; /* * bpf_lwt_seg6_store_bytes * * Store *len* bytes from address *from* into the packet * associated to *skb*, at *offset*. Only the flags, tag and TLVs * inside the outermost IPv6 Segment Routing Header can be * modified through this helper. * * A call to this helper is susceptible to change the underlying * packet buffer. Therefore, at load time, all checks on pointers * previously done by the verifier are invalidated and must be * performed again, if the helper is used in combination with * direct packet access. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_lwt_seg6_store_bytes)(struct __sk_buff *skb, __u32 offset, const void *from, __u32 len) = (void *) 74; /* * bpf_lwt_seg6_adjust_srh * * Adjust the size allocated to TLVs in the outermost IPv6 * Segment Routing Header contained in the packet associated to * *skb*, at position *offset* by *delta* bytes. Only offsets * after the segments are accepted. *delta* can be as well * positive (growing) as negative (shrinking). * * A call to this helper is susceptible to change the underlying * packet buffer. Therefore, at load time, all checks on pointers * previously done by the verifier are invalidated and must be * performed again, if the helper is used in combination with * direct packet access. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_lwt_seg6_adjust_srh)(struct __sk_buff *skb, __u32 offset, __s32 delta) = (void *) 75; /* * bpf_lwt_seg6_action * * Apply an IPv6 Segment Routing action of type *action* to the * packet associated to *skb*. Each action takes a parameter * contained at address *param*, and of length *param_len* bytes. * *action* can be one of: * * **SEG6_LOCAL_ACTION_END_X** * End.X action: Endpoint with Layer-3 cross-connect. * Type of *param*: **struct in6_addr**. * **SEG6_LOCAL_ACTION_END_T** * End.T action: Endpoint with specific IPv6 table lookup. * Type of *param*: **int**. * **SEG6_LOCAL_ACTION_END_B6** * End.B6 action: Endpoint bound to an SRv6 policy. * Type of *param*: **struct ipv6_sr_hdr**. * **SEG6_LOCAL_ACTION_END_B6_ENCAP** * End.B6.Encap action: Endpoint bound to an SRv6 * encapsulation policy. * Type of *param*: **struct ipv6_sr_hdr**. * * A call to this helper is susceptible to change the underlying * packet buffer. Therefore, at load time, all checks on pointers * previously done by the verifier are invalidated and must be * performed again, if the helper is used in combination with * direct packet access. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_lwt_seg6_action)(struct __sk_buff *skb, __u32 action, void *param, __u32 param_len) = (void *) 76; /* * bpf_rc_repeat * * This helper is used in programs implementing IR decoding, to * report a successfully decoded repeat key message. This delays * the generation of a key up event for previously generated * key down event. * * Some IR protocols like NEC have a special IR message for * repeating last button, for when a button is held down. * * The *ctx* should point to the lirc sample as passed into * the program. * * This helper is only available is the kernel was compiled with * the **CONFIG_BPF_LIRC_MODE2** configuration option set to * "**y**". * * Returns * 0 */ static long (*bpf_rc_repeat)(void *ctx) = (void *) 77; /* * bpf_rc_keydown * * This helper is used in programs implementing IR decoding, to * report a successfully decoded key press with *scancode*, * *toggle* value in the given *protocol*. The scancode will be * translated to a keycode using the rc keymap, and reported as * an input key down event. After a period a key up event is * generated. This period can be extended by calling either * **bpf_rc_keydown**\ () again with the same values, or calling * **bpf_rc_repeat**\ (). * * Some protocols include a toggle bit, in case the button was * released and pressed again between consecutive scancodes. * * The *ctx* should point to the lirc sample as passed into * the program. * * The *protocol* is the decoded protocol number (see * **enum rc_proto** for some predefined values). * * This helper is only available is the kernel was compiled with * the **CONFIG_BPF_LIRC_MODE2** configuration option set to * "**y**". * * Returns * 0 */ static long (*bpf_rc_keydown)(void *ctx, __u32 protocol, __u64 scancode, __u32 toggle) = (void *) 78; /* * bpf_skb_cgroup_id * * Return the cgroup v2 id of the socket associated with the *skb*. * This is roughly similar to the **bpf_get_cgroup_classid**\ () * helper for cgroup v1 by providing a tag resp. identifier that * can be matched on or used for map lookups e.g. to implement * policy. The cgroup v2 id of a given path in the hierarchy is * exposed in user space through the f_handle API in order to get * to the same 64-bit id. * * This helper can be used on TC egress path, but not on ingress, * and is available only if the kernel was compiled with the * **CONFIG_SOCK_CGROUP_DATA** configuration option. * * Returns * The id is returned or 0 in case the id could not be retrieved. */ static __u64 (*bpf_skb_cgroup_id)(struct __sk_buff *skb) = (void *) 79; /* * bpf_get_current_cgroup_id * * * Returns * A 64-bit integer containing the current cgroup id based * on the cgroup within which the current task is running. */ static __u64 (*bpf_get_current_cgroup_id)(void) = (void *) 80; /* * bpf_get_local_storage * * Get the pointer to the local storage area. * The type and the size of the local storage is defined * by the *map* argument. * The *flags* meaning is specific for each map type, * and has to be 0 for cgroup local storage. * * Depending on the BPF program type, a local storage area * can be shared between multiple instances of the BPF program, * running simultaneously. * * A user should care about the synchronization by himself. * For example, by using the **BPF_ATOMIC** instructions to alter * the shared data. * * Returns * A pointer to the local storage area. */ static void *(*bpf_get_local_storage)(void *map, __u64 flags) = (void *) 81; /* * bpf_sk_select_reuseport * * Select a **SO_REUSEPORT** socket from a * **BPF_MAP_TYPE_REUSEPORT_SOCKARRAY** *map*. * It checks the selected socket is matching the incoming * request in the socket buffer. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_sk_select_reuseport)(struct sk_reuseport_md *reuse, void *map, void *key, __u64 flags) = (void *) 82; /* * bpf_skb_ancestor_cgroup_id * * Return id of cgroup v2 that is ancestor of cgroup associated * with the *skb* at the *ancestor_level*. The root cgroup is at * *ancestor_level* zero and each step down the hierarchy * increments the level. If *ancestor_level* == level of cgroup * associated with *skb*, then return value will be same as that * of **bpf_skb_cgroup_id**\ (). * * The helper is useful to implement policies based on cgroups * that are upper in hierarchy than immediate cgroup associated * with *skb*. * * The format of returned id and helper limitations are same as in * **bpf_skb_cgroup_id**\ (). * * Returns * The id is returned or 0 in case the id could not be retrieved. */ static __u64 (*bpf_skb_ancestor_cgroup_id)(struct __sk_buff *skb, int ancestor_level) = (void *) 83; /* * bpf_sk_lookup_tcp * * Look for TCP socket matching *tuple*, optionally in a child * network namespace *netns*. The return value must be checked, * and if non-**NULL**, released via **bpf_sk_release**\ (). * * The *ctx* should point to the context of the program, such as * the skb or socket (depending on the hook in use). This is used * to determine the base network namespace for the lookup. * * *tuple_size* must be one of: * * **sizeof**\ (*tuple*\ **->ipv4**) * Look for an IPv4 socket. * **sizeof**\ (*tuple*\ **->ipv6**) * Look for an IPv6 socket. * * If the *netns* is a negative signed 32-bit integer, then the * socket lookup table in the netns associated with the *ctx* * will be used. For the TC hooks, this is the netns of the device * in the skb. For socket hooks, this is the netns of the socket. * If *netns* is any other signed 32-bit value greater than or * equal to zero then it specifies the ID of the netns relative to * the netns associated with the *ctx*. *netns* values beyond the * range of 32-bit integers are reserved for future use. * * All values for *flags* are reserved for future usage, and must * be left at zero. * * This helper is available only if the kernel was compiled with * **CONFIG_NET** configuration option. * * Returns * Pointer to **struct bpf_sock**, or **NULL** in case of failure. * For sockets with reuseport option, the **struct bpf_sock** * result is from *reuse*\ **->socks**\ [] using the hash of the * tuple. */ static struct bpf_sock *(*bpf_sk_lookup_tcp)(void *ctx, struct bpf_sock_tuple *tuple, __u32 tuple_size, __u64 netns, __u64 flags) = (void *) 84; /* * bpf_sk_lookup_udp * * Look for UDP socket matching *tuple*, optionally in a child * network namespace *netns*. The return value must be checked, * and if non-**NULL**, released via **bpf_sk_release**\ (). * * The *ctx* should point to the context of the program, such as * the skb or socket (depending on the hook in use). This is used * to determine the base network namespace for the lookup. * * *tuple_size* must be one of: * * **sizeof**\ (*tuple*\ **->ipv4**) * Look for an IPv4 socket. * **sizeof**\ (*tuple*\ **->ipv6**) * Look for an IPv6 socket. * * If the *netns* is a negative signed 32-bit integer, then the * socket lookup table in the netns associated with the *ctx* * will be used. For the TC hooks, this is the netns of the device * in the skb. For socket hooks, this is the netns of the socket. * If *netns* is any other signed 32-bit value greater than or * equal to zero then it specifies the ID of the netns relative to * the netns associated with the *ctx*. *netns* values beyond the * range of 32-bit integers are reserved for future use. * * All values for *flags* are reserved for future usage, and must * be left at zero. * * This helper is available only if the kernel was compiled with * **CONFIG_NET** configuration option. * * Returns * Pointer to **struct bpf_sock**, or **NULL** in case of failure. * For sockets with reuseport option, the **struct bpf_sock** * result is from *reuse*\ **->socks**\ [] using the hash of the * tuple. */ static struct bpf_sock *(*bpf_sk_lookup_udp)(void *ctx, struct bpf_sock_tuple *tuple, __u32 tuple_size, __u64 netns, __u64 flags) = (void *) 85; /* * bpf_sk_release * * Release the reference held by *sock*. *sock* must be a * non-**NULL** pointer that was returned from * **bpf_sk_lookup_xxx**\ (). * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_sk_release)(void *sock) = (void *) 86; /* * bpf_map_push_elem * * Push an element *value* in *map*. *flags* is one of: * * **BPF_EXIST** * If the queue/stack is full, the oldest element is * removed to make room for this. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_map_push_elem)(void *map, const void *value, __u64 flags) = (void *) 87; /* * bpf_map_pop_elem * * Pop an element from *map*. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_map_pop_elem)(void *map, void *value) = (void *) 88; /* * bpf_map_peek_elem * * Get an element from *map* without removing it. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_map_peek_elem)(void *map, void *value) = (void *) 89; /* * bpf_msg_push_data * * For socket policies, insert *len* bytes into *msg* at offset * *start*. * * If a program of type **BPF_PROG_TYPE_SK_MSG** is run on a * *msg* it may want to insert metadata or options into the *msg*. * This can later be read and used by any of the lower layer BPF * hooks. * * This helper may fail if under memory pressure (a malloc * fails) in these cases BPF programs will get an appropriate * error and BPF programs will need to handle them. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_msg_push_data)(struct sk_msg_md *msg, __u32 start, __u32 len, __u64 flags) = (void *) 90; /* * bpf_msg_pop_data * * Will remove *len* bytes from a *msg* starting at byte *start*. * This may result in **ENOMEM** errors under certain situations if * an allocation and copy are required due to a full ring buffer. * However, the helper will try to avoid doing the allocation * if possible. Other errors can occur if input parameters are * invalid either due to *start* byte not being valid part of *msg* * payload and/or *pop* value being to large. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_msg_pop_data)(struct sk_msg_md *msg, __u32 start, __u32 len, __u64 flags) = (void *) 91; /* * bpf_rc_pointer_rel * * This helper is used in programs implementing IR decoding, to * report a successfully decoded pointer movement. * * The *ctx* should point to the lirc sample as passed into * the program. * * This helper is only available is the kernel was compiled with * the **CONFIG_BPF_LIRC_MODE2** configuration option set to * "**y**". * * Returns * 0 */ static long (*bpf_rc_pointer_rel)(void *ctx, __s32 rel_x, __s32 rel_y) = (void *) 92; /* * bpf_spin_lock * * Acquire a spinlock represented by the pointer *lock*, which is * stored as part of a value of a map. Taking the lock allows to * safely update the rest of the fields in that value. The * spinlock can (and must) later be released with a call to * **bpf_spin_unlock**\ (\ *lock*\ ). * * Spinlocks in BPF programs come with a number of restrictions * and constraints: * * * **bpf_spin_lock** objects are only allowed inside maps of * types **BPF_MAP_TYPE_HASH** and **BPF_MAP_TYPE_ARRAY** (this * list could be extended in the future). * * BTF description of the map is mandatory. * * The BPF program can take ONE lock at a time, since taking two * or more could cause dead locks. * * Only one **struct bpf_spin_lock** is allowed per map element. * * When the lock is taken, calls (either BPF to BPF or helpers) * are not allowed. * * The **BPF_LD_ABS** and **BPF_LD_IND** instructions are not * allowed inside a spinlock-ed region. * * The BPF program MUST call **bpf_spin_unlock**\ () to release * the lock, on all execution paths, before it returns. * * The BPF program can access **struct bpf_spin_lock** only via * the **bpf_spin_lock**\ () and **bpf_spin_unlock**\ () * helpers. Loading or storing data into the **struct * bpf_spin_lock** *lock*\ **;** field of a map is not allowed. * * To use the **bpf_spin_lock**\ () helper, the BTF description * of the map value must be a struct and have **struct * bpf_spin_lock** *anyname*\ **;** field at the top level. * Nested lock inside another struct is not allowed. * * The **struct bpf_spin_lock** *lock* field in a map value must * be aligned on a multiple of 4 bytes in that value. * * Syscall with command **BPF_MAP_LOOKUP_ELEM** does not copy * the **bpf_spin_lock** field to user space. * * Syscall with command **BPF_MAP_UPDATE_ELEM**, or update from * a BPF program, do not update the **bpf_spin_lock** field. * * **bpf_spin_lock** cannot be on the stack or inside a * networking packet (it can only be inside of a map values). * * **bpf_spin_lock** is available to root only. * * Tracing programs and socket filter programs cannot use * **bpf_spin_lock**\ () due to insufficient preemption checks * (but this may change in the future). * * **bpf_spin_lock** is not allowed in inner maps of map-in-map. * * Returns * 0 */ static long (*bpf_spin_lock)(struct bpf_spin_lock *lock) = (void *) 93; /* * bpf_spin_unlock * * Release the *lock* previously locked by a call to * **bpf_spin_lock**\ (\ *lock*\ ). * * Returns * 0 */ static long (*bpf_spin_unlock)(struct bpf_spin_lock *lock) = (void *) 94; /* * bpf_sk_fullsock * * This helper gets a **struct bpf_sock** pointer such * that all the fields in this **bpf_sock** can be accessed. * * Returns * A **struct bpf_sock** pointer on success, or **NULL** in * case of failure. */ static struct bpf_sock *(*bpf_sk_fullsock)(struct bpf_sock *sk) = (void *) 95; /* * bpf_tcp_sock * * This helper gets a **struct bpf_tcp_sock** pointer from a * **struct bpf_sock** pointer. * * Returns * A **struct bpf_tcp_sock** pointer on success, or **NULL** in * case of failure. */ static struct bpf_tcp_sock *(*bpf_tcp_sock)(struct bpf_sock *sk) = (void *) 96; /* * bpf_skb_ecn_set_ce * * Set ECN (Explicit Congestion Notification) field of IP header * to **CE** (Congestion Encountered) if current value is **ECT** * (ECN Capable Transport). Otherwise, do nothing. Works with IPv6 * and IPv4. * * Returns * 1 if the **CE** flag is set (either by the current helper call * or because it was already present), 0 if it is not set. */ static long (*bpf_skb_ecn_set_ce)(struct __sk_buff *skb) = (void *) 97; /* * bpf_get_listener_sock * * Return a **struct bpf_sock** pointer in **TCP_LISTEN** state. * **bpf_sk_release**\ () is unnecessary and not allowed. * * Returns * A **struct bpf_sock** pointer on success, or **NULL** in * case of failure. */ static struct bpf_sock *(*bpf_get_listener_sock)(struct bpf_sock *sk) = (void *) 98; /* * bpf_skc_lookup_tcp * * Look for TCP socket matching *tuple*, optionally in a child * network namespace *netns*. The return value must be checked, * and if non-**NULL**, released via **bpf_sk_release**\ (). * * This function is identical to **bpf_sk_lookup_tcp**\ (), except * that it also returns timewait or request sockets. Use * **bpf_sk_fullsock**\ () or **bpf_tcp_sock**\ () to access the * full structure. * * This helper is available only if the kernel was compiled with * **CONFIG_NET** configuration option. * * Returns * Pointer to **struct bpf_sock**, or **NULL** in case of failure. * For sockets with reuseport option, the **struct bpf_sock** * result is from *reuse*\ **->socks**\ [] using the hash of the * tuple. */ static struct bpf_sock *(*bpf_skc_lookup_tcp)(void *ctx, struct bpf_sock_tuple *tuple, __u32 tuple_size, __u64 netns, __u64 flags) = (void *) 99; /* * bpf_tcp_check_syncookie * * Check whether *iph* and *th* contain a valid SYN cookie ACK for * the listening socket in *sk*. * * *iph* points to the start of the IPv4 or IPv6 header, while * *iph_len* contains **sizeof**\ (**struct iphdr**) or * **sizeof**\ (**struct ip6hdr**). * * *th* points to the start of the TCP header, while *th_len* * contains **sizeof**\ (**struct tcphdr**). * * Returns * 0 if *iph* and *th* are a valid SYN cookie ACK, or a negative * error otherwise. */ static long (*bpf_tcp_check_syncookie)(void *sk, void *iph, __u32 iph_len, struct tcphdr *th, __u32 th_len) = (void *) 100; /* * bpf_sysctl_get_name * * Get name of sysctl in /proc/sys/ and copy it into provided by * program buffer *buf* of size *buf_len*. * * The buffer is always NUL terminated, unless it's zero-sized. * * If *flags* is zero, full name (e.g. "net/ipv4/tcp_mem") is * copied. Use **BPF_F_SYSCTL_BASE_NAME** flag to copy base name * only (e.g. "tcp_mem"). * * Returns * Number of character copied (not including the trailing NUL). * * **-E2BIG** if the buffer wasn't big enough (*buf* will contain * truncated name in this case). */ static long (*bpf_sysctl_get_name)(struct bpf_sysctl *ctx, char *buf, unsigned long buf_len, __u64 flags) = (void *) 101; /* * bpf_sysctl_get_current_value * * Get current value of sysctl as it is presented in /proc/sys * (incl. newline, etc), and copy it as a string into provided * by program buffer *buf* of size *buf_len*. * * The whole value is copied, no matter what file position user * space issued e.g. sys_read at. * * The buffer is always NUL terminated, unless it's zero-sized. * * Returns * Number of character copied (not including the trailing NUL). * * **-E2BIG** if the buffer wasn't big enough (*buf* will contain * truncated name in this case). * * **-EINVAL** if current value was unavailable, e.g. because * sysctl is uninitialized and read returns -EIO for it. */ static long (*bpf_sysctl_get_current_value)(struct bpf_sysctl *ctx, char *buf, unsigned long buf_len) = (void *) 102; /* * bpf_sysctl_get_new_value * * Get new value being written by user space to sysctl (before * the actual write happens) and copy it as a string into * provided by program buffer *buf* of size *buf_len*. * * User space may write new value at file position > 0. * * The buffer is always NUL terminated, unless it's zero-sized. * * Returns * Number of character copied (not including the trailing NUL). * * **-E2BIG** if the buffer wasn't big enough (*buf* will contain * truncated name in this case). * * **-EINVAL** if sysctl is being read. */ static long (*bpf_sysctl_get_new_value)(struct bpf_sysctl *ctx, char *buf, unsigned long buf_len) = (void *) 103; /* * bpf_sysctl_set_new_value * * Override new value being written by user space to sysctl with * value provided by program in buffer *buf* of size *buf_len*. * * *buf* should contain a string in same form as provided by user * space on sysctl write. * * User space may write new value at file position > 0. To override * the whole sysctl value file position should be set to zero. * * Returns * 0 on success. * * **-E2BIG** if the *buf_len* is too big. * * **-EINVAL** if sysctl is being read. */ static long (*bpf_sysctl_set_new_value)(struct bpf_sysctl *ctx, const char *buf, unsigned long buf_len) = (void *) 104; /* * bpf_strtol * * Convert the initial part of the string from buffer *buf* of * size *buf_len* to a long integer according to the given base * and save the result in *res*. * * The string may begin with an arbitrary amount of white space * (as determined by **isspace**\ (3)) followed by a single * optional '**-**' sign. * * Five least significant bits of *flags* encode base, other bits * are currently unused. * * Base must be either 8, 10, 16 or 0 to detect it automatically * similar to user space **strtol**\ (3). * * Returns * Number of characters consumed on success. Must be positive but * no more than *buf_len*. * * **-EINVAL** if no valid digits were found or unsupported base * was provided. * * **-ERANGE** if resulting value was out of range. */ static long (*bpf_strtol)(const char *buf, unsigned long buf_len, __u64 flags, long *res) = (void *) 105; /* * bpf_strtoul * * Convert the initial part of the string from buffer *buf* of * size *buf_len* to an unsigned long integer according to the * given base and save the result in *res*. * * The string may begin with an arbitrary amount of white space * (as determined by **isspace**\ (3)). * * Five least significant bits of *flags* encode base, other bits * are currently unused. * * Base must be either 8, 10, 16 or 0 to detect it automatically * similar to user space **strtoul**\ (3). * * Returns * Number of characters consumed on success. Must be positive but * no more than *buf_len*. * * **-EINVAL** if no valid digits were found or unsupported base * was provided. * * **-ERANGE** if resulting value was out of range. */ static long (*bpf_strtoul)(const char *buf, unsigned long buf_len, __u64 flags, unsigned long *res) = (void *) 106; /* * bpf_sk_storage_get * * Get a bpf-local-storage from a *sk*. * * Logically, it could be thought of getting the value from * a *map* with *sk* as the **key**. From this * perspective, the usage is not much different from * **bpf_map_lookup_elem**\ (*map*, **&**\ *sk*) except this * helper enforces the key must be a full socket and the map must * be a **BPF_MAP_TYPE_SK_STORAGE** also. * * Underneath, the value is stored locally at *sk* instead of * the *map*. The *map* is used as the bpf-local-storage * "type". The bpf-local-storage "type" (i.e. the *map*) is * searched against all bpf-local-storages residing at *sk*. * * *sk* is a kernel **struct sock** pointer for LSM program. * *sk* is a **struct bpf_sock** pointer for other program types. * * An optional *flags* (**BPF_SK_STORAGE_GET_F_CREATE**) can be * used such that a new bpf-local-storage will be * created if one does not exist. *value* can be used * together with **BPF_SK_STORAGE_GET_F_CREATE** to specify * the initial value of a bpf-local-storage. If *value* is * **NULL**, the new bpf-local-storage will be zero initialized. * * Returns * A bpf-local-storage pointer is returned on success. * * **NULL** if not found or there was an error in adding * a new bpf-local-storage. */ static void *(*bpf_sk_storage_get)(void *map, void *sk, void *value, __u64 flags) = (void *) 107; /* * bpf_sk_storage_delete * * Delete a bpf-local-storage from a *sk*. * * Returns * 0 on success. * * **-ENOENT** if the bpf-local-storage cannot be found. * **-EINVAL** if sk is not a fullsock (e.g. a request_sock). */ static long (*bpf_sk_storage_delete)(void *map, void *sk) = (void *) 108; /* * bpf_send_signal * * Send signal *sig* to the process of the current task. * The signal may be delivered to any of this process's threads. * * Returns * 0 on success or successfully queued. * * **-EBUSY** if work queue under nmi is full. * * **-EINVAL** if *sig* is invalid. * * **-EPERM** if no permission to send the *sig*. * * **-EAGAIN** if bpf program can try again. */ static long (*bpf_send_signal)(__u32 sig) = (void *) 109; /* * bpf_tcp_gen_syncookie * * Try to issue a SYN cookie for the packet with corresponding * IP/TCP headers, *iph* and *th*, on the listening socket in *sk*. * * *iph* points to the start of the IPv4 or IPv6 header, while * *iph_len* contains **sizeof**\ (**struct iphdr**) or * **sizeof**\ (**struct ip6hdr**). * * *th* points to the start of the TCP header, while *th_len* * contains the length of the TCP header. * * Returns * On success, lower 32 bits hold the generated SYN cookie in * followed by 16 bits which hold the MSS value for that cookie, * and the top 16 bits are unused. * * On failure, the returned value is one of the following: * * **-EINVAL** SYN cookie cannot be issued due to error * * **-ENOENT** SYN cookie should not be issued (no SYN flood) * * **-EOPNOTSUPP** kernel configuration does not enable SYN cookies * * **-EPROTONOSUPPORT** IP packet version is not 4 or 6 */ static __s64 (*bpf_tcp_gen_syncookie)(void *sk, void *iph, __u32 iph_len, struct tcphdr *th, __u32 th_len) = (void *) 110; /* * bpf_skb_output * * Write raw *data* blob into a special BPF perf event held by * *map* of type **BPF_MAP_TYPE_PERF_EVENT_ARRAY**. This perf * event must have the following attributes: **PERF_SAMPLE_RAW** * as **sample_type**, **PERF_TYPE_SOFTWARE** as **type**, and * **PERF_COUNT_SW_BPF_OUTPUT** as **config**. * * The *flags* are used to indicate the index in *map* for which * the value must be put, masked with **BPF_F_INDEX_MASK**. * Alternatively, *flags* can be set to **BPF_F_CURRENT_CPU** * to indicate that the index of the current CPU core should be * used. * * The value to write, of *size*, is passed through eBPF stack and * pointed by *data*. * * *ctx* is a pointer to in-kernel struct sk_buff. * * This helper is similar to **bpf_perf_event_output**\ () but * restricted to raw_tracepoint bpf programs. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_skb_output)(void *ctx, void *map, __u64 flags, void *data, __u64 size) = (void *) 111; /* * bpf_probe_read_user * * Safely attempt to read *size* bytes from user space address * *unsafe_ptr* and store the data in *dst*. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_probe_read_user)(void *dst, __u32 size, const void *unsafe_ptr) = (void *) 112; /* * bpf_probe_read_kernel * * Safely attempt to read *size* bytes from kernel space address * *unsafe_ptr* and store the data in *dst*. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_probe_read_kernel)(void *dst, __u32 size, const void *unsafe_ptr) = (void *) 113; /* * bpf_probe_read_user_str * * Copy a NUL terminated string from an unsafe user address * *unsafe_ptr* to *dst*. The *size* should include the * terminating NUL byte. In case the string length is smaller than * *size*, the target is not padded with further NUL bytes. If the * string length is larger than *size*, just *size*-1 bytes are * copied and the last byte is set to NUL. * * On success, returns the number of bytes that were written, * including the terminal NUL. This makes this helper useful in * tracing programs for reading strings, and more importantly to * get its length at runtime. See the following snippet: * * :: * * SEC("kprobe/sys_open") * void bpf_sys_open(struct pt_regs *ctx) * { * char buf[PATHLEN]; // PATHLEN is defined to 256 * int res = bpf_probe_read_user_str(buf, sizeof(buf), * ctx->di); * * // Consume buf, for example push it to * // userspace via bpf_perf_event_output(); we * // can use res (the string length) as event * // size, after checking its boundaries. * } * * In comparison, using **bpf_probe_read_user**\ () helper here * instead to read the string would require to estimate the length * at compile time, and would often result in copying more memory * than necessary. * * Another useful use case is when parsing individual process * arguments or individual environment variables navigating * *current*\ **->mm->arg_start** and *current*\ * **->mm->env_start**: using this helper and the return value, * one can quickly iterate at the right offset of the memory area. * * Returns * On success, the strictly positive length of the output string, * including the trailing NUL character. On error, a negative * value. */ static long (*bpf_probe_read_user_str)(void *dst, __u32 size, const void *unsafe_ptr) = (void *) 114; /* * bpf_probe_read_kernel_str * * Copy a NUL terminated string from an unsafe kernel address *unsafe_ptr* * to *dst*. Same semantics as with **bpf_probe_read_user_str**\ () apply. * * Returns * On success, the strictly positive length of the string, including * the trailing NUL character. On error, a negative value. */ static long (*bpf_probe_read_kernel_str)(void *dst, __u32 size, const void *unsafe_ptr) = (void *) 115; /* * bpf_tcp_send_ack * * Send out a tcp-ack. *tp* is the in-kernel struct **tcp_sock**. * *rcv_nxt* is the ack_seq to be sent out. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_tcp_send_ack)(void *tp, __u32 rcv_nxt) = (void *) 116; /* * bpf_send_signal_thread * * Send signal *sig* to the thread corresponding to the current task. * * Returns * 0 on success or successfully queued. * * **-EBUSY** if work queue under nmi is full. * * **-EINVAL** if *sig* is invalid. * * **-EPERM** if no permission to send the *sig*. * * **-EAGAIN** if bpf program can try again. */ static long (*bpf_send_signal_thread)(__u32 sig) = (void *) 117; /* * bpf_jiffies64 * * Obtain the 64bit jiffies * * Returns * The 64 bit jiffies */ static __u64 (*bpf_jiffies64)(void) = (void *) 118; /* * bpf_read_branch_records * * For an eBPF program attached to a perf event, retrieve the * branch records (**struct perf_branch_entry**) associated to *ctx* * and store it in the buffer pointed by *buf* up to size * *size* bytes. * * Returns * On success, number of bytes written to *buf*. On error, a * negative value. * * The *flags* can be set to **BPF_F_GET_BRANCH_RECORDS_SIZE** to * instead return the number of bytes required to store all the * branch entries. If this flag is set, *buf* may be NULL. * * **-EINVAL** if arguments invalid or **size** not a multiple * of **sizeof**\ (**struct perf_branch_entry**\ ). * * **-ENOENT** if architecture does not support branch records. */ static long (*bpf_read_branch_records)(struct bpf_perf_event_data *ctx, void *buf, __u32 size, __u64 flags) = (void *) 119; /* * bpf_get_ns_current_pid_tgid * * Returns 0 on success, values for *pid* and *tgid* as seen from the current * *namespace* will be returned in *nsdata*. * * Returns * 0 on success, or one of the following in case of failure: * * **-EINVAL** if dev and inum supplied don't match dev_t and inode number * with nsfs of current task, or if dev conversion to dev_t lost high bits. * * **-ENOENT** if pidns does not exists for the current task. */ static long (*bpf_get_ns_current_pid_tgid)(__u64 dev, __u64 ino, struct bpf_pidns_info *nsdata, __u32 size) = (void *) 120; /* * bpf_xdp_output * * Write raw *data* blob into a special BPF perf event held by * *map* of type **BPF_MAP_TYPE_PERF_EVENT_ARRAY**. This perf * event must have the following attributes: **PERF_SAMPLE_RAW** * as **sample_type**, **PERF_TYPE_SOFTWARE** as **type**, and * **PERF_COUNT_SW_BPF_OUTPUT** as **config**. * * The *flags* are used to indicate the index in *map* for which * the value must be put, masked with **BPF_F_INDEX_MASK**. * Alternatively, *flags* can be set to **BPF_F_CURRENT_CPU** * to indicate that the index of the current CPU core should be * used. * * The value to write, of *size*, is passed through eBPF stack and * pointed by *data*. * * *ctx* is a pointer to in-kernel struct xdp_buff. * * This helper is similar to **bpf_perf_eventoutput**\ () but * restricted to raw_tracepoint bpf programs. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_xdp_output)(void *ctx, void *map, __u64 flags, void *data, __u64 size) = (void *) 121; /* * bpf_get_netns_cookie * * Retrieve the cookie (generated by the kernel) of the network * namespace the input *ctx* is associated with. The network * namespace cookie remains stable for its lifetime and provides * a global identifier that can be assumed unique. If *ctx* is * NULL, then the helper returns the cookie for the initial * network namespace. The cookie itself is very similar to that * of **bpf_get_socket_cookie**\ () helper, but for network * namespaces instead of sockets. * * Returns * A 8-byte long opaque number. */ static __u64 (*bpf_get_netns_cookie)(void *ctx) = (void *) 122; /* * bpf_get_current_ancestor_cgroup_id * * Return id of cgroup v2 that is ancestor of the cgroup associated * with the current task at the *ancestor_level*. The root cgroup * is at *ancestor_level* zero and each step down the hierarchy * increments the level. If *ancestor_level* == level of cgroup * associated with the current task, then return value will be the * same as that of **bpf_get_current_cgroup_id**\ (). * * The helper is useful to implement policies based on cgroups * that are upper in hierarchy than immediate cgroup associated * with the current task. * * The format of returned id and helper limitations are same as in * **bpf_get_current_cgroup_id**\ (). * * Returns * The id is returned or 0 in case the id could not be retrieved. */ static __u64 (*bpf_get_current_ancestor_cgroup_id)(int ancestor_level) = (void *) 123; /* * bpf_sk_assign * * Helper is overloaded depending on BPF program type. This * description applies to **BPF_PROG_TYPE_SCHED_CLS** and * **BPF_PROG_TYPE_SCHED_ACT** programs. * * Assign the *sk* to the *skb*. When combined with appropriate * routing configuration to receive the packet towards the socket, * will cause *skb* to be delivered to the specified socket. * Subsequent redirection of *skb* via **bpf_redirect**\ (), * **bpf_clone_redirect**\ () or other methods outside of BPF may * interfere with successful delivery to the socket. * * This operation is only valid from TC ingress path. * * The *flags* argument must be zero. * * Returns * 0 on success, or a negative error in case of failure: * * **-EINVAL** if specified *flags* are not supported. * * **-ENOENT** if the socket is unavailable for assignment. * * **-ENETUNREACH** if the socket is unreachable (wrong netns). * * **-EOPNOTSUPP** if the operation is not supported, for example * a call from outside of TC ingress. * * **-ESOCKTNOSUPPORT** if the socket type is not supported * (reuseport). */ static long (*bpf_sk_assign)(void *ctx, void *sk, __u64 flags) = (void *) 124; /* * bpf_ktime_get_boot_ns * * Return the time elapsed since system boot, in nanoseconds. * Does include the time the system was suspended. * See: **clock_gettime**\ (**CLOCK_BOOTTIME**) * * Returns * Current *ktime*. */ static __u64 (*bpf_ktime_get_boot_ns)(void) = (void *) 125; /* * bpf_seq_printf * * **bpf_seq_printf**\ () uses seq_file **seq_printf**\ () to print * out the format string. * The *m* represents the seq_file. The *fmt* and *fmt_size* are for * the format string itself. The *data* and *data_len* are format string * arguments. The *data* are a **u64** array and corresponding format string * values are stored in the array. For strings and pointers where pointees * are accessed, only the pointer values are stored in the *data* array. * The *data_len* is the size of *data* in bytes. * * Formats **%s**, **%p{i,I}{4,6}** requires to read kernel memory. * Reading kernel memory may fail due to either invalid address or * valid address but requiring a major memory fault. If reading kernel memory * fails, the string for **%s** will be an empty string, and the ip * address for **%p{i,I}{4,6}** will be 0. Not returning error to * bpf program is consistent with what **bpf_trace_printk**\ () does for now. * * Returns * 0 on success, or a negative error in case of failure: * * **-EBUSY** if per-CPU memory copy buffer is busy, can try again * by returning 1 from bpf program. * * **-EINVAL** if arguments are invalid, or if *fmt* is invalid/unsupported. * * **-E2BIG** if *fmt* contains too many format specifiers. * * **-EOVERFLOW** if an overflow happened: The same object will be tried again. */ static long (*bpf_seq_printf)(struct seq_file *m, const char *fmt, __u32 fmt_size, const void *data, __u32 data_len) = (void *) 126; /* * bpf_seq_write * * **bpf_seq_write**\ () uses seq_file **seq_write**\ () to write the data. * The *m* represents the seq_file. The *data* and *len* represent the * data to write in bytes. * * Returns * 0 on success, or a negative error in case of failure: * * **-EOVERFLOW** if an overflow happened: The same object will be tried again. */ static long (*bpf_seq_write)(struct seq_file *m, const void *data, __u32 len) = (void *) 127; /* * bpf_sk_cgroup_id * * Return the cgroup v2 id of the socket *sk*. * * *sk* must be a non-**NULL** pointer to a socket, e.g. one * returned from **bpf_sk_lookup_xxx**\ (), * **bpf_sk_fullsock**\ (), etc. The format of returned id is * same as in **bpf_skb_cgroup_id**\ (). * * This helper is available only if the kernel was compiled with * the **CONFIG_SOCK_CGROUP_DATA** configuration option. * * Returns * The id is returned or 0 in case the id could not be retrieved. */ static __u64 (*bpf_sk_cgroup_id)(void *sk) = (void *) 128; /* * bpf_sk_ancestor_cgroup_id * * Return id of cgroup v2 that is ancestor of cgroup associated * with the *sk* at the *ancestor_level*. The root cgroup is at * *ancestor_level* zero and each step down the hierarchy * increments the level. If *ancestor_level* == level of cgroup * associated with *sk*, then return value will be same as that * of **bpf_sk_cgroup_id**\ (). * * The helper is useful to implement policies based on cgroups * that are upper in hierarchy than immediate cgroup associated * with *sk*. * * The format of returned id and helper limitations are same as in * **bpf_sk_cgroup_id**\ (). * * Returns * The id is returned or 0 in case the id could not be retrieved. */ static __u64 (*bpf_sk_ancestor_cgroup_id)(void *sk, int ancestor_level) = (void *) 129; /* * bpf_ringbuf_output * * Copy *size* bytes from *data* into a ring buffer *ringbuf*. * If **BPF_RB_NO_WAKEUP** is specified in *flags*, no notification * of new data availability is sent. * If **BPF_RB_FORCE_WAKEUP** is specified in *flags*, notification * of new data availability is sent unconditionally. * If **0** is specified in *flags*, an adaptive notification * of new data availability is sent. * * An adaptive notification is a notification sent whenever the user-space * process has caught up and consumed all available payloads. In case the user-space * process is still processing a previous payload, then no notification is needed * as it will process the newly added payload automatically. * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_ringbuf_output)(void *ringbuf, void *data, __u64 size, __u64 flags) = (void *) 130; /* * bpf_ringbuf_reserve * * Reserve *size* bytes of payload in a ring buffer *ringbuf*. * *flags* must be 0. * * Returns * Valid pointer with *size* bytes of memory available; NULL, * otherwise. */ static void *(*bpf_ringbuf_reserve)(void *ringbuf, __u64 size, __u64 flags) = (void *) 131; /* * bpf_ringbuf_submit * * Submit reserved ring buffer sample, pointed to by *data*. * If **BPF_RB_NO_WAKEUP** is specified in *flags*, no notification * of new data availability is sent. * If **BPF_RB_FORCE_WAKEUP** is specified in *flags*, notification * of new data availability is sent unconditionally. * If **0** is specified in *flags*, an adaptive notification * of new data availability is sent. * * See 'bpf_ringbuf_output()' for the definition of adaptive notification. * * Returns * Nothing. Always succeeds. */ static void (*bpf_ringbuf_submit)(void *data, __u64 flags) = (void *) 132; /* * bpf_ringbuf_discard * * Discard reserved ring buffer sample, pointed to by *data*. * If **BPF_RB_NO_WAKEUP** is specified in *flags*, no notification * of new data availability is sent. * If **BPF_RB_FORCE_WAKEUP** is specified in *flags*, notification * of new data availability is sent unconditionally. * If **0** is specified in *flags*, an adaptive notification * of new data availability is sent. * * See 'bpf_ringbuf_output()' for the definition of adaptive notification. * * Returns * Nothing. Always succeeds. */ static void (*bpf_ringbuf_discard)(void *data, __u64 flags) = (void *) 133; /* * bpf_ringbuf_query * * Query various characteristics of provided ring buffer. What * exactly is queries is determined by *flags*: * * * **BPF_RB_AVAIL_DATA**: Amount of data not yet consumed. * * **BPF_RB_RING_SIZE**: The size of ring buffer. * * **BPF_RB_CONS_POS**: Consumer position (can wrap around). * * **BPF_RB_PROD_POS**: Producer(s) position (can wrap around). * * Data returned is just a momentary snapshot of actual values * and could be inaccurate, so this facility should be used to * power heuristics and for reporting, not to make 100% correct * calculation. * * Returns * Requested value, or 0, if *flags* are not recognized. */ static __u64 (*bpf_ringbuf_query)(void *ringbuf, __u64 flags) = (void *) 134; /* * bpf_csum_level * * Change the skbs checksum level by one layer up or down, or * reset it entirely to none in order to have the stack perform * checksum validation. The level is applicable to the following * protocols: TCP, UDP, GRE, SCTP, FCOE. For example, a decap of * | ETH | IP | UDP | GUE | IP | TCP | into | ETH | IP | TCP | * through **bpf_skb_adjust_room**\ () helper with passing in * **BPF_F_ADJ_ROOM_NO_CSUM_RESET** flag would require one call * to **bpf_csum_level**\ () with **BPF_CSUM_LEVEL_DEC** since * the UDP header is removed. Similarly, an encap of the latter * into the former could be accompanied by a helper call to * **bpf_csum_level**\ () with **BPF_CSUM_LEVEL_INC** if the * skb is still intended to be processed in higher layers of the * stack instead of just egressing at tc. * * There are three supported level settings at this time: * * * **BPF_CSUM_LEVEL_INC**: Increases skb->csum_level for skbs * with CHECKSUM_UNNECESSARY. * * **BPF_CSUM_LEVEL_DEC**: Decreases skb->csum_level for skbs * with CHECKSUM_UNNECESSARY. * * **BPF_CSUM_LEVEL_RESET**: Resets skb->csum_level to 0 and * sets CHECKSUM_NONE to force checksum validation by the stack. * * **BPF_CSUM_LEVEL_QUERY**: No-op, returns the current * skb->csum_level. * * Returns * 0 on success, or a negative error in case of failure. In the * case of **BPF_CSUM_LEVEL_QUERY**, the current skb->csum_level * is returned or the error code -EACCES in case the skb is not * subject to CHECKSUM_UNNECESSARY. */ static long (*bpf_csum_level)(struct __sk_buff *skb, __u64 level) = (void *) 135; /* * bpf_skc_to_tcp6_sock * * Dynamically cast a *sk* pointer to a *tcp6_sock* pointer. * * Returns * *sk* if casting is valid, or **NULL** otherwise. */ static struct tcp6_sock *(*bpf_skc_to_tcp6_sock)(void *sk) = (void *) 136; /* * bpf_skc_to_tcp_sock * * Dynamically cast a *sk* pointer to a *tcp_sock* pointer. * * Returns * *sk* if casting is valid, or **NULL** otherwise. */ static struct tcp_sock *(*bpf_skc_to_tcp_sock)(void *sk) = (void *) 137; /* * bpf_skc_to_tcp_timewait_sock * * Dynamically cast a *sk* pointer to a *tcp_timewait_sock* pointer. * * Returns * *sk* if casting is valid, or **NULL** otherwise. */ static struct tcp_timewait_sock *(*bpf_skc_to_tcp_timewait_sock)(void *sk) = (void *) 138; /* * bpf_skc_to_tcp_request_sock * * Dynamically cast a *sk* pointer to a *tcp_request_sock* pointer. * * Returns * *sk* if casting is valid, or **NULL** otherwise. */ static struct tcp_request_sock *(*bpf_skc_to_tcp_request_sock)(void *sk) = (void *) 139; /* * bpf_skc_to_udp6_sock * * Dynamically cast a *sk* pointer to a *udp6_sock* pointer. * * Returns * *sk* if casting is valid, or **NULL** otherwise. */ static struct udp6_sock *(*bpf_skc_to_udp6_sock)(void *sk) = (void *) 140; /* * bpf_get_task_stack * * Return a user or a kernel stack in bpf program provided buffer. * To achieve this, the helper needs *task*, which is a valid * pointer to **struct task_struct**. To store the stacktrace, the * bpf program provides *buf* with a nonnegative *size*. * * The last argument, *flags*, holds the number of stack frames to * skip (from 0 to 255), masked with * **BPF_F_SKIP_FIELD_MASK**. The next bits can be used to set * the following flags: * * **BPF_F_USER_STACK** * Collect a user space stack instead of a kernel stack. * **BPF_F_USER_BUILD_ID** * Collect buildid+offset instead of ips for user stack, * only valid if **BPF_F_USER_STACK** is also specified. * * **bpf_get_task_stack**\ () can collect up to * **PERF_MAX_STACK_DEPTH** both kernel and user frames, subject * to sufficient large buffer size. Note that * this limit can be controlled with the **sysctl** program, and * that it should be manually increased in order to profile long * user stacks (such as stacks for Java programs). To do so, use: * * :: * * # sysctl kernel.perf_event_max_stack= * * Returns * A non-negative value equal to or less than *size* on success, * or a negative error in case of failure. */ static long (*bpf_get_task_stack)(struct task_struct *task, void *buf, __u32 size, __u64 flags) = (void *) 141; /* * bpf_load_hdr_opt * * Load header option. Support reading a particular TCP header * option for bpf program (**BPF_PROG_TYPE_SOCK_OPS**). * * If *flags* is 0, it will search the option from the * *skops*\ **->skb_data**. The comment in **struct bpf_sock_ops** * has details on what skb_data contains under different * *skops*\ **->op**. * * The first byte of the *searchby_res* specifies the * kind that it wants to search. * * If the searching kind is an experimental kind * (i.e. 253 or 254 according to RFC6994). It also * needs to specify the "magic" which is either * 2 bytes or 4 bytes. It then also needs to * specify the size of the magic by using * the 2nd byte which is "kind-length" of a TCP * header option and the "kind-length" also * includes the first 2 bytes "kind" and "kind-length" * itself as a normal TCP header option also does. * * For example, to search experimental kind 254 with * 2 byte magic 0xeB9F, the searchby_res should be * [ 254, 4, 0xeB, 0x9F, 0, 0, .... 0 ]. * * To search for the standard window scale option (3), * the *searchby_res* should be [ 3, 0, 0, .... 0 ]. * Note, kind-length must be 0 for regular option. * * Searching for No-Op (0) and End-of-Option-List (1) are * not supported. * * *len* must be at least 2 bytes which is the minimal size * of a header option. * * Supported flags: * * * **BPF_LOAD_HDR_OPT_TCP_SYN** to search from the * saved_syn packet or the just-received syn packet. * * * Returns * > 0 when found, the header option is copied to *searchby_res*. * The return value is the total length copied. On failure, a * negative error code is returned: * * **-EINVAL** if a parameter is invalid. * * **-ENOMSG** if the option is not found. * * **-ENOENT** if no syn packet is available when * **BPF_LOAD_HDR_OPT_TCP_SYN** is used. * * **-ENOSPC** if there is not enough space. Only *len* number of * bytes are copied. * * **-EFAULT** on failure to parse the header options in the * packet. * * **-EPERM** if the helper cannot be used under the current * *skops*\ **->op**. */ static long (*bpf_load_hdr_opt)(struct bpf_sock_ops *skops, void *searchby_res, __u32 len, __u64 flags) = (void *) 142; /* * bpf_store_hdr_opt * * Store header option. The data will be copied * from buffer *from* with length *len* to the TCP header. * * The buffer *from* should have the whole option that * includes the kind, kind-length, and the actual * option data. The *len* must be at least kind-length * long. The kind-length does not have to be 4 byte * aligned. The kernel will take care of the padding * and setting the 4 bytes aligned value to th->doff. * * This helper will check for duplicated option * by searching the same option in the outgoing skb. * * This helper can only be called during * **BPF_SOCK_OPS_WRITE_HDR_OPT_CB**. * * * Returns * 0 on success, or negative error in case of failure: * * **-EINVAL** If param is invalid. * * **-ENOSPC** if there is not enough space in the header. * Nothing has been written * * **-EEXIST** if the option already exists. * * **-EFAULT** on failrue to parse the existing header options. * * **-EPERM** if the helper cannot be used under the current * *skops*\ **->op**. */ static long (*bpf_store_hdr_opt)(struct bpf_sock_ops *skops, const void *from, __u32 len, __u64 flags) = (void *) 143; /* * bpf_reserve_hdr_opt * * Reserve *len* bytes for the bpf header option. The * space will be used by **bpf_store_hdr_opt**\ () later in * **BPF_SOCK_OPS_WRITE_HDR_OPT_CB**. * * If **bpf_reserve_hdr_opt**\ () is called multiple times, * the total number of bytes will be reserved. * * This helper can only be called during * **BPF_SOCK_OPS_HDR_OPT_LEN_CB**. * * * Returns * 0 on success, or negative error in case of failure: * * **-EINVAL** if a parameter is invalid. * * **-ENOSPC** if there is not enough space in the header. * * **-EPERM** if the helper cannot be used under the current * *skops*\ **->op**. */ static long (*bpf_reserve_hdr_opt)(struct bpf_sock_ops *skops, __u32 len, __u64 flags) = (void *) 144; /* * bpf_inode_storage_get * * Get a bpf_local_storage from an *inode*. * * Logically, it could be thought of as getting the value from * a *map* with *inode* as the **key**. From this * perspective, the usage is not much different from * **bpf_map_lookup_elem**\ (*map*, **&**\ *inode*) except this * helper enforces the key must be an inode and the map must also * be a **BPF_MAP_TYPE_INODE_STORAGE**. * * Underneath, the value is stored locally at *inode* instead of * the *map*. The *map* is used as the bpf-local-storage * "type". The bpf-local-storage "type" (i.e. the *map*) is * searched against all bpf_local_storage residing at *inode*. * * An optional *flags* (**BPF_LOCAL_STORAGE_GET_F_CREATE**) can be * used such that a new bpf_local_storage will be * created if one does not exist. *value* can be used * together with **BPF_LOCAL_STORAGE_GET_F_CREATE** to specify * the initial value of a bpf_local_storage. If *value* is * **NULL**, the new bpf_local_storage will be zero initialized. * * Returns * A bpf_local_storage pointer is returned on success. * * **NULL** if not found or there was an error in adding * a new bpf_local_storage. */ static void *(*bpf_inode_storage_get)(void *map, void *inode, void *value, __u64 flags) = (void *) 145; /* * bpf_inode_storage_delete * * Delete a bpf_local_storage from an *inode*. * * Returns * 0 on success. * * **-ENOENT** if the bpf_local_storage cannot be found. */ static int (*bpf_inode_storage_delete)(void *map, void *inode) = (void *) 146; /* * bpf_d_path * * Return full path for given **struct path** object, which * needs to be the kernel BTF *path* object. The path is * returned in the provided buffer *buf* of size *sz* and * is zero terminated. * * * Returns * On success, the strictly positive length of the string, * including the trailing NUL character. On error, a negative * value. */ static long (*bpf_d_path)(struct path *path, char *buf, __u32 sz) = (void *) 147; /* * bpf_copy_from_user * * Read *size* bytes from user space address *user_ptr* and store * the data in *dst*. This is a wrapper of **copy_from_user**\ (). * * Returns * 0 on success, or a negative error in case of failure. */ static long (*bpf_copy_from_user)(void *dst, __u32 size, const void *user_ptr) = (void *) 148; /* * bpf_snprintf_btf * * Use BTF to store a string representation of *ptr*->ptr in *str*, * using *ptr*->type_id. This value should specify the type * that *ptr*->ptr points to. LLVM __builtin_btf_type_id(type, 1) * can be used to look up vmlinux BTF type ids. Traversing the * data structure using BTF, the type information and values are * stored in the first *str_size* - 1 bytes of *str*. Safe copy of * the pointer data is carried out to avoid kernel crashes during * operation. Smaller types can use string space on the stack; * larger programs can use map data to store the string * representation. * * The string can be subsequently shared with userspace via * bpf_perf_event_output() or ring buffer interfaces. * bpf_trace_printk() is to be avoided as it places too small * a limit on string size to be useful. * * *flags* is a combination of * * **BTF_F_COMPACT** * no formatting around type information * **BTF_F_NONAME** * no struct/union member names/types * **BTF_F_PTR_RAW** * show raw (unobfuscated) pointer values; * equivalent to printk specifier %px. * **BTF_F_ZERO** * show zero-valued struct/union members; they * are not displayed by default * * * Returns * The number of bytes that were written (or would have been * written if output had to be truncated due to string size), * or a negative error in cases of failure. */ static long (*bpf_snprintf_btf)(char *str, __u32 str_size, struct btf_ptr *ptr, __u32 btf_ptr_size, __u64 flags) = (void *) 149; /* * bpf_seq_printf_btf * * Use BTF to write to seq_write a string representation of * *ptr*->ptr, using *ptr*->type_id as per bpf_snprintf_btf(). * *flags* are identical to those used for bpf_snprintf_btf. * * Returns * 0 on success or a negative error in case of failure. */ static long (*bpf_seq_printf_btf)(struct seq_file *m, struct btf_ptr *ptr, __u32 ptr_size, __u64 flags) = (void *) 150; /* * bpf_skb_cgroup_classid * * See **bpf_get_cgroup_classid**\ () for the main description. * This helper differs from **bpf_get_cgroup_classid**\ () in that * the cgroup v1 net_cls class is retrieved only from the *skb*'s * associated socket instead of the current process. * * Returns * The id is returned or 0 in case the id could not be retrieved. */ static __u64 (*bpf_skb_cgroup_classid)(struct __sk_buff *skb) = (void *) 151; /* * bpf_redirect_neigh * * Redirect the packet to another net device of index *ifindex* * and fill in L2 addresses from neighboring subsystem. This helper * is somewhat similar to **bpf_redirect**\ (), except that it * populates L2 addresses as well, meaning, internally, the helper * relies on the neighbor lookup for the L2 address of the nexthop. * * The helper will perform a FIB lookup based on the skb's * networking header to get the address of the next hop, unless * this is supplied by the caller in the *params* argument. The * *plen* argument indicates the len of *params* and should be set * to 0 if *params* is NULL. * * The *flags* argument is reserved and must be 0. The helper is * currently only supported for tc BPF program types, and enabled * for IPv4 and IPv6 protocols. * * Returns * The helper returns **TC_ACT_REDIRECT** on success or * **TC_ACT_SHOT** on error. */ static long (*bpf_redirect_neigh)(__u32 ifindex, struct bpf_redir_neigh *params, int plen, __u64 flags) = (void *) 152; /* * bpf_per_cpu_ptr * * Take a pointer to a percpu ksym, *percpu_ptr*, and return a * pointer to the percpu kernel variable on *cpu*. A ksym is an * extern variable decorated with '__ksym'. For ksym, there is a * global var (either static or global) defined of the same name * in the kernel. The ksym is percpu if the global var is percpu. * The returned pointer points to the global percpu var on *cpu*. * * bpf_per_cpu_ptr() has the same semantic as per_cpu_ptr() in the * kernel, except that bpf_per_cpu_ptr() may return NULL. This * happens if *cpu* is larger than nr_cpu_ids. The caller of * bpf_per_cpu_ptr() must check the returned value. * * Returns * A pointer pointing to the kernel percpu variable on *cpu*, or * NULL, if *cpu* is invalid. */ static void *(*bpf_per_cpu_ptr)(const void *percpu_ptr, __u32 cpu) = (void *) 153; /* * bpf_this_cpu_ptr * * Take a pointer to a percpu ksym, *percpu_ptr*, and return a * pointer to the percpu kernel variable on this cpu. See the * description of 'ksym' in **bpf_per_cpu_ptr**\ (). * * bpf_this_cpu_ptr() has the same semantic as this_cpu_ptr() in * the kernel. Different from **bpf_per_cpu_ptr**\ (), it would * never return NULL. * * Returns * A pointer pointing to the kernel percpu variable on this cpu. */ static void *(*bpf_this_cpu_ptr)(const void *percpu_ptr) = (void *) 154; /* * bpf_redirect_peer * * Redirect the packet to another net device of index *ifindex*. * This helper is somewhat similar to **bpf_redirect**\ (), except * that the redirection happens to the *ifindex*' peer device and * the netns switch takes place from ingress to ingress without * going through the CPU's backlog queue. * * The *flags* argument is reserved and must be 0. The helper is * currently only supported for tc BPF program types at the ingress * hook and for veth device types. The peer device must reside in a * different network namespace. * * Returns * The helper returns **TC_ACT_REDIRECT** on success or * **TC_ACT_SHOT** on error. */ static long (*bpf_redirect_peer)(__u32 ifindex, __u64 flags) = (void *) 155; /* * bpf_task_storage_get * * Get a bpf_local_storage from the *task*. * * Logically, it could be thought of as getting the value from * a *map* with *task* as the **key**. From this * perspective, the usage is not much different from * **bpf_map_lookup_elem**\ (*map*, **&**\ *task*) except this * helper enforces the key must be an task_struct and the map must also * be a **BPF_MAP_TYPE_TASK_STORAGE**. * * Underneath, the value is stored locally at *task* instead of * the *map*. The *map* is used as the bpf-local-storage * "type". The bpf-local-storage "type" (i.e. the *map*) is * searched against all bpf_local_storage residing at *task*. * * An optional *flags* (**BPF_LOCAL_STORAGE_GET_F_CREATE**) can be * used such that a new bpf_local_storage will be * created if one does not exist. *value* can be used * together with **BPF_LOCAL_STORAGE_GET_F_CREATE** to specify * the initial value of a bpf_local_storage. If *value* is * **NULL**, the new bpf_local_storage will be zero initialized. * * Returns * A bpf_local_storage pointer is returned on success. * * **NULL** if not found or there was an error in adding * a new bpf_local_storage. */ static void *(*bpf_task_storage_get)(void *map, struct task_struct *task, void *value, __u64 flags) = (void *) 156; /* * bpf_task_storage_delete * * Delete a bpf_local_storage from a *task*. * * Returns * 0 on success. * * **-ENOENT** if the bpf_local_storage cannot be found. */ static long (*bpf_task_storage_delete)(void *map, struct task_struct *task) = (void *) 157; /* * bpf_get_current_task_btf * * Return a BTF pointer to the "current" task. * This pointer can also be used in helpers that accept an * *ARG_PTR_TO_BTF_ID* of type *task_struct*. * * Returns * Pointer to the current task. */ static struct task_struct *(*bpf_get_current_task_btf)(void) = (void *) 158; /* * bpf_bprm_opts_set * * Set or clear certain options on *bprm*: * * **BPF_F_BPRM_SECUREEXEC** Set the secureexec bit * which sets the **AT_SECURE** auxv for glibc. The bit * is cleared if the flag is not specified. * * Returns * **-EINVAL** if invalid *flags* are passed, zero otherwise. */ static long (*bpf_bprm_opts_set)(struct linux_binprm *bprm, __u64 flags) = (void *) 159; /* * bpf_ktime_get_coarse_ns * * Return a coarse-grained version of the time elapsed since * system boot, in nanoseconds. Does not include time the system * was suspended. * * See: **clock_gettime**\ (**CLOCK_MONOTONIC_COARSE**) * * Returns * Current *ktime*. */ static __u64 (*bpf_ktime_get_coarse_ns)(void) = (void *) 160; /* * bpf_ima_inode_hash * * Returns the stored IMA hash of the *inode* (if it's avaialable). * If the hash is larger than *size*, then only *size* * bytes will be copied to *dst* * * Returns * The **hash_algo** is returned on success, * **-EOPNOTSUP** if IMA is disabled or **-EINVAL** if * invalid arguments are passed. */ static long (*bpf_ima_inode_hash)(struct inode *inode, void *dst, __u32 size) = (void *) 161; /* * bpf_sock_from_file * * If the given file represents a socket, returns the associated * socket. * * Returns * A pointer to a struct socket on success or NULL if the file is * not a socket. */ static struct socket *(*bpf_sock_from_file)(struct file *file) = (void *) 162; /* * bpf_check_mtu * * Check packet size against exceeding MTU of net device (based * on *ifindex*). This helper will likely be used in combination * with helpers that adjust/change the packet size. * * The argument *len_diff* can be used for querying with a planned * size change. This allows to check MTU prior to changing packet * ctx. Providing an *len_diff* adjustment that is larger than the * actual packet size (resulting in negative packet size) will in * principle not exceed the MTU, why it is not considered a * failure. Other BPF-helpers are needed for performing the * planned size change, why the responsability for catch a negative * packet size belong in those helpers. * * Specifying *ifindex* zero means the MTU check is performed * against the current net device. This is practical if this isn't * used prior to redirect. * * On input *mtu_len* must be a valid pointer, else verifier will * reject BPF program. If the value *mtu_len* is initialized to * zero then the ctx packet size is use. When value *mtu_len* is * provided as input this specify the L3 length that the MTU check * is done against. Remember XDP and TC length operate at L2, but * this value is L3 as this correlate to MTU and IP-header tot_len * values which are L3 (similar behavior as bpf_fib_lookup). * * The Linux kernel route table can configure MTUs on a more * specific per route level, which is not provided by this helper. * For route level MTU checks use the **bpf_fib_lookup**\ () * helper. * * *ctx* is either **struct xdp_md** for XDP programs or * **struct sk_buff** for tc cls_act programs. * * The *flags* argument can be a combination of one or more of the * following values: * * **BPF_MTU_CHK_SEGS** * This flag will only works for *ctx* **struct sk_buff**. * If packet context contains extra packet segment buffers * (often knows as GSO skb), then MTU check is harder to * check at this point, because in transmit path it is * possible for the skb packet to get re-segmented * (depending on net device features). This could still be * a MTU violation, so this flag enables performing MTU * check against segments, with a different violation * return code to tell it apart. Check cannot use len_diff. * * On return *mtu_len* pointer contains the MTU value of the net * device. Remember the net device configured MTU is the L3 size, * which is returned here and XDP and TC length operate at L2. * Helper take this into account for you, but remember when using * MTU value in your BPF-code. * * * Returns * * 0 on success, and populate MTU value in *mtu_len* pointer. * * * < 0 if any input argument is invalid (*mtu_len* not updated) * * MTU violations return positive values, but also populate MTU * value in *mtu_len* pointer, as this can be needed for * implementing PMTU handing: * * * **BPF_MTU_CHK_RET_FRAG_NEEDED** * * **BPF_MTU_CHK_RET_SEGS_TOOBIG** */ static long (*bpf_check_mtu)(void *ctx, __u32 ifindex, __u32 *mtu_len, __s32 len_diff, __u64 flags) = (void *) 163; /* * bpf_for_each_map_elem * * For each element in **map**, call **callback_fn** function with * **map**, **callback_ctx** and other map-specific parameters. * The **callback_fn** should be a static function and * the **callback_ctx** should be a pointer to the stack. * The **flags** is used to control certain aspects of the helper. * Currently, the **flags** must be 0. * * The following are a list of supported map types and their * respective expected callback signatures: * * BPF_MAP_TYPE_HASH, BPF_MAP_TYPE_PERCPU_HASH, * BPF_MAP_TYPE_LRU_HASH, BPF_MAP_TYPE_LRU_PERCPU_HASH, * BPF_MAP_TYPE_ARRAY, BPF_MAP_TYPE_PERCPU_ARRAY * * long (\*callback_fn)(struct bpf_map \*map, const void \*key, void \*value, void \*ctx); * * For per_cpu maps, the map_value is the value on the cpu where the * bpf_prog is running. * * If **callback_fn** return 0, the helper will continue to the next * element. If return value is 1, the helper will skip the rest of * elements and return. Other return values are not used now. * * * Returns * The number of traversed map elements for success, **-EINVAL** for * invalid **flags**. */ static long (*bpf_for_each_map_elem)(void *map, void *callback_fn, void *callback_ctx, __u64 flags) = (void *) 164; /* * bpf_snprintf * * Outputs a string into the **str** buffer of size **str_size** * based on a format string stored in a read-only map pointed by * **fmt**. * * Each format specifier in **fmt** corresponds to one u64 element * in the **data** array. For strings and pointers where pointees * are accessed, only the pointer values are stored in the *data* * array. The *data_len* is the size of *data* in bytes. * * Formats **%s** and **%p{i,I}{4,6}** require to read kernel * memory. Reading kernel memory may fail due to either invalid * address or valid address but requiring a major memory fault. If * reading kernel memory fails, the string for **%s** will be an * empty string, and the ip address for **%p{i,I}{4,6}** will be 0. * Not returning error to bpf program is consistent with what * **bpf_trace_printk**\ () does for now. * * * Returns * The strictly positive length of the formatted string, including * the trailing zero character. If the return value is greater than * **str_size**, **str** contains a truncated string, guaranteed to * be zero-terminated except when **str_size** is 0. * * Or **-EBUSY** if the per-CPU memory copy buffer is busy. */ static long (*bpf_snprintf)(char *str, __u32 str_size, const char *fmt, __u64 *data, __u32 data_len) = (void *) 165; /* * bpf_sys_bpf * * Execute bpf syscall with given arguments. * * Returns * A syscall result. */ static long (*bpf_sys_bpf)(__u32 cmd, void *attr, __u32 attr_size) = (void *) 166; /* * bpf_btf_find_by_name_kind * * Find BTF type with given name and kind in vmlinux BTF or in module's BTFs. * * Returns * Returns btf_id and btf_obj_fd in lower and upper 32 bits. */ static long (*bpf_btf_find_by_name_kind)(char *name, int name_sz, __u32 kind, int flags) = (void *) 167; /* * bpf_sys_close * * Execute close syscall for given FD. * * Returns * A syscall result. */ static long (*bpf_sys_close)(__u32 fd) = (void *) 168; /* * bpf_timer_init * * Initialize the timer. * First 4 bits of *flags* specify clockid. * Only CLOCK_MONOTONIC, CLOCK_REALTIME, CLOCK_BOOTTIME are allowed. * All other bits of *flags* are reserved. * The verifier will reject the program if *timer* is not from * the same *map*. * * Returns * 0 on success. * **-EBUSY** if *timer* is already initialized. * **-EINVAL** if invalid *flags* are passed. * **-EPERM** if *timer* is in a map that doesn't have any user references. * The user space should either hold a file descriptor to a map with timers * or pin such map in bpffs. When map is unpinned or file descriptor is * closed all timers in the map will be cancelled and freed. */ static long (*bpf_timer_init)(struct bpf_timer *timer, void *map, __u64 flags) = (void *) 169; /* * bpf_timer_set_callback * * Configure the timer to call *callback_fn* static function. * * Returns * 0 on success. * **-EINVAL** if *timer* was not initialized with bpf_timer_init() earlier. * **-EPERM** if *timer* is in a map that doesn't have any user references. * The user space should either hold a file descriptor to a map with timers * or pin such map in bpffs. When map is unpinned or file descriptor is * closed all timers in the map will be cancelled and freed. */ static long (*bpf_timer_set_callback)(struct bpf_timer *timer, void *callback_fn) = (void *) 170; /* * bpf_timer_start * * Set timer expiration N nanoseconds from the current time. The * configured callback will be invoked in soft irq context on some cpu * and will not repeat unless another bpf_timer_start() is made. * In such case the next invocation can migrate to a different cpu. * Since struct bpf_timer is a field inside map element the map * owns the timer. The bpf_timer_set_callback() will increment refcnt * of BPF program to make sure that callback_fn code stays valid. * When user space reference to a map reaches zero all timers * in a map are cancelled and corresponding program's refcnts are * decremented. This is done to make sure that Ctrl-C of a user * process doesn't leave any timers running. If map is pinned in * bpffs the callback_fn can re-arm itself indefinitely. * bpf_map_update/delete_elem() helpers and user space sys_bpf commands * cancel and free the timer in the given map element. * The map can contain timers that invoke callback_fn-s from different * programs. The same callback_fn can serve different timers from * different maps if key/value layout matches across maps. * Every bpf_timer_set_callback() can have different callback_fn. * * * Returns * 0 on success. * **-EINVAL** if *timer* was not initialized with bpf_timer_init() earlier * or invalid *flags* are passed. */ static long (*bpf_timer_start)(struct bpf_timer *timer, __u64 nsecs, __u64 flags) = (void *) 171; /* * bpf_timer_cancel * * Cancel the timer and wait for callback_fn to finish if it was running. * * Returns * 0 if the timer was not active. * 1 if the timer was active. * **-EINVAL** if *timer* was not initialized with bpf_timer_init() earlier. * **-EDEADLK** if callback_fn tried to call bpf_timer_cancel() on its * own timer which would have led to a deadlock otherwise. */ static long (*bpf_timer_cancel)(struct bpf_timer *timer) = (void *) 172; /* * bpf_get_func_ip * * Get address of the traced function (for tracing and kprobe programs). * * Returns * Address of the traced function. */ static __u64 (*bpf_get_func_ip)(void *ctx) = (void *) 173; /* * bpf_get_attach_cookie * * Get bpf_cookie value provided (optionally) during the program * attachment. It might be different for each individual * attachment, even if BPF program itself is the same. * Expects BPF program context *ctx* as a first argument. * * Supported for the following program types: * - kprobe/uprobe; * - tracepoint; * - perf_event. * * Returns * Value specified by user at BPF link creation/attachment time * or 0, if it was not specified. */ static __u64 (*bpf_get_attach_cookie)(void *ctx) = (void *) 174; /* * bpf_task_pt_regs * * Get the struct pt_regs associated with **task**. * * Returns * A pointer to struct pt_regs. */ static long (*bpf_task_pt_regs)(struct task_struct *task) = (void *) 175; # 12 "/usr/include/bpf/bpf_helpers.h" 2 3 4 #define __uint(name, val) int (*name)[val] #define __type(name, val) typeof(val) *name #define __array(name, val) typeof(val) *name[] /* Helper macro to print out debug messages */ #define bpf_printk(fmt, ...) \ ({ \ char ____fmt[] = fmt; \ bpf_trace_printk(____fmt, sizeof(____fmt), \ ##__VA_ARGS__); \ }) /* * Helper macro to place programs, maps, license in * different sections in elf_bpf file. Section names * are interpreted by libbpf depending on the context (BPF programs, BPF maps, * extern variables, etc). * To allow use of SEC() with externs (e.g., for extern .maps declarations), * make sure __attribute__((unused)) doesn't trigger compilation warning. */ #define SEC(name) \ _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wignored-attributes\"") \ __attribute__((section(name), used)) \ _Pragma("GCC diagnostic pop") \ /* Avoid 'linux/stddef.h' definition of '__always_inline'. */ #undef __always_inline #define __always_inline inline __attribute__((always_inline)) #ifndef __noinline #define __noinline __attribute__((noinline)) #endif # 46 "/usr/include/bpf/bpf_helpers.h" 3 4 #ifndef __weak #define __weak __attribute__((weak)) #endif # 49 "/usr/include/bpf/bpf_helpers.h" 3 4 /* * Use __hidden attribute to mark a non-static BPF subprogram effectively * static for BPF verifier's verification algorithm purposes, allowing more * extensive and permissive BPF verification process, taking into account * subprogram's caller context. */ #define __hidden __attribute__((visibility("hidden"))) /* When utilizing vmlinux.h with BPF CO-RE, user BPF programs can't include * any system-level headers (such as stddef.h, linux/version.h, etc), and * commonly-used macros like NULL and KERNEL_VERSION aren't available through * vmlinux.h. This just adds unnecessary hurdles and forces users to re-define * them on their own. So as a convenience, provide such definitions here. */ #ifndef NULL #define NULL ((void *)0) #endif # 67 "/usr/include/bpf/bpf_helpers.h" 3 4 #ifndef KERNEL_VERSION #define KERNEL_VERSION(a, b, c) (((a) << 16) + ((b) << 8) + ((c) > 255 ? 255 : (c))) #endif # 71 "/usr/include/bpf/bpf_helpers.h" 3 4 /* * Helper macros to manipulate data structures */ #ifndef offsetof #define offsetof(TYPE, MEMBER) ((unsigned long)&((TYPE *)0)->MEMBER) #endif # 78 "/usr/include/bpf/bpf_helpers.h" 3 4 #ifndef container_of #define container_of(ptr, type, member) \ ({ \ void *__mptr = (void *)(ptr); \ ((type *)(__mptr - offsetof(type, member))); \ }) #endif # 85 "/usr/include/bpf/bpf_helpers.h" 3 4 /* * Helper macro to throw a compilation error if __bpf_unreachable() gets * built into the resulting code. This works given BPF back end does not * implement __builtin_trap(). This is useful to assert that certain paths * of the program code are never used and hence eliminated by the compiler. * * For example, consider a switch statement that covers known cases used by * the program. __bpf_unreachable() can then reside in the default case. If * the program gets extended such that a case is not covered in the switch * statement, then it will throw a build error due to the default case not * being compiled out. */ #ifndef __bpf_unreachable # define __bpf_unreachable() __builtin_trap() #endif # 101 "/usr/include/bpf/bpf_helpers.h" 3 4 /* * Helper function to perform a tail call with a constant/immediate map slot. */ #if 0 /* disabled by -frewrite-includes */ #if __clang_major__ >= 8 && defined(__bpf__) #endif #endif /* disabled by -frewrite-includes */ #if 1 /* evaluated by -frewrite-includes */ # 106 "/usr/include/bpf/bpf_helpers.h" 3 4 static __always_inline void bpf_tail_call_static(void *ctx, const void *map, const __u32 slot) { if (!__builtin_constant_p(slot)) __bpf_unreachable(); /* * Provide a hard guarantee that LLVM won't optimize setting r2 (map * pointer) and r3 (constant map index) from _different paths_ ending * up at the _same_ call insn as otherwise we won't be able to use the * jmpq/nopl retpoline-free patching by the x86-64 JIT in the kernel * given they mismatch. See also d2e4c1e6c294 ("bpf: Constant map key * tracking for prog array pokes") for details on verifier tracking. * * Note on clobber list: we need to stay in-line with BPF calling * convention, so even if we don't end up using r0, r4, r5, we need * to mark them as clobber so that LLVM doesn't end up using them * before / after the call. */ asm volatile("r1 = %[ctx]\n\t" "r2 = %[map]\n\t" "r3 = %[slot]\n\t" "call 12" :: [ctx]"r"(ctx), [map]"r"(map), [slot]"i"(slot) : "r0", "r1", "r2", "r3", "r4", "r5"); } #endif # 133 "/usr/include/bpf/bpf_helpers.h" 3 4 /* * Helper structure used by eBPF C program * to describe BPF map attributes to libbpf loader */ struct bpf_map_def { unsigned int type; unsigned int key_size; unsigned int value_size; unsigned int max_entries; unsigned int map_flags; }; enum libbpf_pin_type { LIBBPF_PIN_NONE, /* PIN_BY_NAME: pin maps by name (in /sys/fs/bpf by default) */ LIBBPF_PIN_BY_NAME, }; enum libbpf_tristate { TRI_NO = 0, TRI_YES = 1, TRI_MODULE = 2, }; #define __kconfig __attribute__((section(".kconfig"))) #define __ksym __attribute__((section(".ksyms"))) #ifndef ___bpf_concat #define ___bpf_concat(a, b) a ## b #endif # 164 "/usr/include/bpf/bpf_helpers.h" 3 4 #ifndef ___bpf_apply #define ___bpf_apply(fn, n) ___bpf_concat(fn, n) #endif # 167 "/usr/include/bpf/bpf_helpers.h" 3 4 #ifndef ___bpf_nth #define ___bpf_nth(_, _1, _2, _3, _4, _5, _6, _7, _8, _9, _a, _b, _c, N, ...) N #endif # 170 "/usr/include/bpf/bpf_helpers.h" 3 4 #ifndef ___bpf_narg #define ___bpf_narg(...) \ ___bpf_nth(_, ##__VA_ARGS__, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) #endif # 174 "/usr/include/bpf/bpf_helpers.h" 3 4 #define ___bpf_fill0(arr, p, x) do {} while (0) #define ___bpf_fill1(arr, p, x) arr[p] = x #define ___bpf_fill2(arr, p, x, args...) arr[p] = x; ___bpf_fill1(arr, p + 1, args) #define ___bpf_fill3(arr, p, x, args...) arr[p] = x; ___bpf_fill2(arr, p + 1, args) #define ___bpf_fill4(arr, p, x, args...) arr[p] = x; ___bpf_fill3(arr, p + 1, args) #define ___bpf_fill5(arr, p, x, args...) arr[p] = x; ___bpf_fill4(arr, p + 1, args) #define ___bpf_fill6(arr, p, x, args...) arr[p] = x; ___bpf_fill5(arr, p + 1, args) #define ___bpf_fill7(arr, p, x, args...) arr[p] = x; ___bpf_fill6(arr, p + 1, args) #define ___bpf_fill8(arr, p, x, args...) arr[p] = x; ___bpf_fill7(arr, p + 1, args) #define ___bpf_fill9(arr, p, x, args...) arr[p] = x; ___bpf_fill8(arr, p + 1, args) #define ___bpf_fill10(arr, p, x, args...) arr[p] = x; ___bpf_fill9(arr, p + 1, args) #define ___bpf_fill11(arr, p, x, args...) arr[p] = x; ___bpf_fill10(arr, p + 1, args) #define ___bpf_fill12(arr, p, x, args...) arr[p] = x; ___bpf_fill11(arr, p + 1, args) #define ___bpf_fill(arr, args...) \ ___bpf_apply(___bpf_fill, ___bpf_narg(args))(arr, 0, args) /* * BPF_SEQ_PRINTF to wrap bpf_seq_printf to-be-printed values * in a structure. */ #define BPF_SEQ_PRINTF(seq, fmt, args...) \ ({ \ static const char ___fmt[] = fmt; \ unsigned long long ___param[___bpf_narg(args)]; \ \ _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wint-conversion\"") \ ___bpf_fill(___param, args); \ _Pragma("GCC diagnostic pop") \ \ bpf_seq_printf(seq, ___fmt, sizeof(___fmt), \ ___param, sizeof(___param)); \ }) /* * BPF_SNPRINTF wraps the bpf_snprintf helper with variadic arguments instead of * an array of u64. */ #define BPF_SNPRINTF(out, out_size, fmt, args...) \ ({ \ static const char ___fmt[] = fmt; \ unsigned long long ___param[___bpf_narg(args)]; \ \ _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wint-conversion\"") \ ___bpf_fill(___param, args); \ _Pragma("GCC diagnostic pop") \ \ bpf_snprintf(out, out_size, ___fmt, \ ___param, sizeof(___param)); \ }) #endif # 228 "/usr/include/bpf/bpf_helpers.h" 3 4 # 4 "core.bpf.c" 2 #if 0 /* expanded by -frewrite-includes */ #include #endif /* expanded by -frewrite-includes */ # 4 "core.bpf.c" # 1 "/usr/include/bpf/bpf_tracing.h" 1 3 4 /* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */ #ifndef __BPF_TRACING_H__ #define __BPF_TRACING_H__ /* Scan the ARCH passed in from ARCH env variable (see Makefile) */ #if 0 /* disabled by -frewrite-includes */ #if defined(__TARGET_ARCH_x86) #endif #endif /* disabled by -frewrite-includes */ #if 0 /* evaluated by -frewrite-includes */ # 7 "/usr/include/bpf/bpf_tracing.h" 3 4 #define bpf_target_x86 #define bpf_target_defined #if 0 /* disabled by -frewrite-includes */ #if 0 #elif defined(__TARGET_ARCH_s390) #endif #endif /* disabled by -frewrite-includes */ #elif 0 /* evaluated by -frewrite-includes */ # 10 "/usr/include/bpf/bpf_tracing.h" 3 4 #define bpf_target_s390 #define bpf_target_defined #if 0 /* disabled by -frewrite-includes */ #if 0 #elif defined(__TARGET_ARCH_arm) #endif #endif /* disabled by -frewrite-includes */ #elif 0 /* evaluated by -frewrite-includes */ # 13 "/usr/include/bpf/bpf_tracing.h" 3 4 #define bpf_target_arm #define bpf_target_defined #if 0 /* disabled by -frewrite-includes */ #if 0 #elif defined(__TARGET_ARCH_arm64) #endif #endif /* disabled by -frewrite-includes */ #elif 0 /* evaluated by -frewrite-includes */ # 16 "/usr/include/bpf/bpf_tracing.h" 3 4 #define bpf_target_arm64 #define bpf_target_defined #if 0 /* disabled by -frewrite-includes */ #if 0 #elif defined(__TARGET_ARCH_mips) #endif #endif /* disabled by -frewrite-includes */ #elif 0 /* evaluated by -frewrite-includes */ # 19 "/usr/include/bpf/bpf_tracing.h" 3 4 #define bpf_target_mips #define bpf_target_defined #if 0 /* disabled by -frewrite-includes */ #if 0 #elif defined(__TARGET_ARCH_powerpc) #endif #endif /* disabled by -frewrite-includes */ #elif 0 /* evaluated by -frewrite-includes */ # 22 "/usr/include/bpf/bpf_tracing.h" 3 4 #define bpf_target_powerpc #define bpf_target_defined #if 0 /* disabled by -frewrite-includes */ #if 0 #elif defined(__TARGET_ARCH_sparc) #endif #endif /* disabled by -frewrite-includes */ #elif 0 /* evaluated by -frewrite-includes */ # 25 "/usr/include/bpf/bpf_tracing.h" 3 4 #define bpf_target_sparc #define bpf_target_defined #else # 28 "/usr/include/bpf/bpf_tracing.h" 3 4 /* Fall back to what the compiler says */ #if 0 /* disabled by -frewrite-includes */ #if defined(__x86_64__) #endif #endif /* disabled by -frewrite-includes */ #if 0 /* evaluated by -frewrite-includes */ # 31 "/usr/include/bpf/bpf_tracing.h" 3 4 #define bpf_target_x86 #define bpf_target_defined #if 0 /* disabled by -frewrite-includes */ #if 0 #elif defined(__s390__) #endif #endif /* disabled by -frewrite-includes */ #elif 0 /* evaluated by -frewrite-includes */ # 34 "/usr/include/bpf/bpf_tracing.h" 3 4 #define bpf_target_s390 #define bpf_target_defined #if 0 /* disabled by -frewrite-includes */ #if 0 #elif defined(__arm__) #endif #endif /* disabled by -frewrite-includes */ #elif 0 /* evaluated by -frewrite-includes */ # 37 "/usr/include/bpf/bpf_tracing.h" 3 4 #define bpf_target_arm #define bpf_target_defined #if 0 /* disabled by -frewrite-includes */ #if 0 #elif defined(__aarch64__) #endif #endif /* disabled by -frewrite-includes */ #elif 0 /* evaluated by -frewrite-includes */ # 40 "/usr/include/bpf/bpf_tracing.h" 3 4 #define bpf_target_arm64 #define bpf_target_defined #if 0 /* disabled by -frewrite-includes */ #if 0 #elif defined(__mips__) #endif #endif /* disabled by -frewrite-includes */ #elif 0 /* evaluated by -frewrite-includes */ # 43 "/usr/include/bpf/bpf_tracing.h" 3 4 #define bpf_target_mips #define bpf_target_defined #if 0 /* disabled by -frewrite-includes */ #if 0 #elif defined(__powerpc__) #endif #endif /* disabled by -frewrite-includes */ #elif 0 /* evaluated by -frewrite-includes */ # 46 "/usr/include/bpf/bpf_tracing.h" 3 4 #define bpf_target_powerpc #define bpf_target_defined #if 0 /* disabled by -frewrite-includes */ #if 0 #elif defined(__sparc__) #endif #endif /* disabled by -frewrite-includes */ #elif 0 /* evaluated by -frewrite-includes */ # 49 "/usr/include/bpf/bpf_tracing.h" 3 4 #define bpf_target_sparc #define bpf_target_defined #endif /* no compiler target */ # 52 "/usr/include/bpf/bpf_tracing.h" 3 4 #endif # 54 "/usr/include/bpf/bpf_tracing.h" 3 4 #ifndef __BPF_TARGET_MISSING #define __BPF_TARGET_MISSING "GCC error \"Must specify a BPF target arch via __TARGET_ARCH_xxx\"" #endif # 58 "/usr/include/bpf/bpf_tracing.h" 3 4 #if 0 /* disabled by -frewrite-includes */ #if defined(bpf_target_x86) #endif #endif /* disabled by -frewrite-includes */ #if 0 /* evaluated by -frewrite-includes */ # 60 "/usr/include/bpf/bpf_tracing.h" 3 4 #if 0 /* disabled by -frewrite-includes */ #if defined(__KERNEL__) || defined(__VMLINUX_H__) #endif #endif /* disabled by -frewrite-includes */ #if 0 /* evaluated by -frewrite-includes */ # 62 "/usr/include/bpf/bpf_tracing.h" 3 4 #define PT_REGS_PARM1(x) ((x)->di) #define PT_REGS_PARM2(x) ((x)->si) #define PT_REGS_PARM3(x) ((x)->dx) #define PT_REGS_PARM4(x) ((x)->cx) #define PT_REGS_PARM5(x) ((x)->r8) #define PT_REGS_RET(x) ((x)->sp) #define PT_REGS_FP(x) ((x)->bp) #define PT_REGS_RC(x) ((x)->ax) #define PT_REGS_SP(x) ((x)->sp) #define PT_REGS_IP(x) ((x)->ip) #define PT_REGS_PARM1_CORE(x) BPF_CORE_READ((x), di) #define PT_REGS_PARM2_CORE(x) BPF_CORE_READ((x), si) #define PT_REGS_PARM3_CORE(x) BPF_CORE_READ((x), dx) #define PT_REGS_PARM4_CORE(x) BPF_CORE_READ((x), cx) #define PT_REGS_PARM5_CORE(x) BPF_CORE_READ((x), r8) #define PT_REGS_RET_CORE(x) BPF_CORE_READ((x), sp) #define PT_REGS_FP_CORE(x) BPF_CORE_READ((x), bp) #define PT_REGS_RC_CORE(x) BPF_CORE_READ((x), ax) #define PT_REGS_SP_CORE(x) BPF_CORE_READ((x), sp) #define PT_REGS_IP_CORE(x) BPF_CORE_READ((x), ip) #else # 86 "/usr/include/bpf/bpf_tracing.h" 3 4 #ifdef __i386__ /* i386 kernel is built with -mregparm=3 */ #define PT_REGS_PARM1(x) ((x)->eax) #define PT_REGS_PARM2(x) ((x)->edx) #define PT_REGS_PARM3(x) ((x)->ecx) #define PT_REGS_PARM4(x) 0 #define PT_REGS_PARM5(x) 0 #define PT_REGS_RET(x) ((x)->esp) #define PT_REGS_FP(x) ((x)->ebp) #define PT_REGS_RC(x) ((x)->eax) #define PT_REGS_SP(x) ((x)->esp) #define PT_REGS_IP(x) ((x)->eip) #define PT_REGS_PARM1_CORE(x) BPF_CORE_READ((x), eax) #define PT_REGS_PARM2_CORE(x) BPF_CORE_READ((x), edx) #define PT_REGS_PARM3_CORE(x) BPF_CORE_READ((x), ecx) #define PT_REGS_PARM4_CORE(x) 0 #define PT_REGS_PARM5_CORE(x) 0 #define PT_REGS_RET_CORE(x) BPF_CORE_READ((x), esp) #define PT_REGS_FP_CORE(x) BPF_CORE_READ((x), ebp) #define PT_REGS_RC_CORE(x) BPF_CORE_READ((x), eax) #define PT_REGS_SP_CORE(x) BPF_CORE_READ((x), esp) #define PT_REGS_IP_CORE(x) BPF_CORE_READ((x), eip) #else # 112 "/usr/include/bpf/bpf_tracing.h" 3 4 #define PT_REGS_PARM1(x) ((x)->rdi) #define PT_REGS_PARM2(x) ((x)->rsi) #define PT_REGS_PARM3(x) ((x)->rdx) #define PT_REGS_PARM4(x) ((x)->rcx) #define PT_REGS_PARM5(x) ((x)->r8) #define PT_REGS_RET(x) ((x)->rsp) #define PT_REGS_FP(x) ((x)->rbp) #define PT_REGS_RC(x) ((x)->rax) #define PT_REGS_SP(x) ((x)->rsp) #define PT_REGS_IP(x) ((x)->rip) #define PT_REGS_PARM1_CORE(x) BPF_CORE_READ((x), rdi) #define PT_REGS_PARM2_CORE(x) BPF_CORE_READ((x), rsi) #define PT_REGS_PARM3_CORE(x) BPF_CORE_READ((x), rdx) #define PT_REGS_PARM4_CORE(x) BPF_CORE_READ((x), rcx) #define PT_REGS_PARM5_CORE(x) BPF_CORE_READ((x), r8) #define PT_REGS_RET_CORE(x) BPF_CORE_READ((x), rsp) #define PT_REGS_FP_CORE(x) BPF_CORE_READ((x), rbp) #define PT_REGS_RC_CORE(x) BPF_CORE_READ((x), rax) #define PT_REGS_SP_CORE(x) BPF_CORE_READ((x), rsp) #define PT_REGS_IP_CORE(x) BPF_CORE_READ((x), rip) #endif # 136 "/usr/include/bpf/bpf_tracing.h" 3 4 #endif # 137 "/usr/include/bpf/bpf_tracing.h" 3 4 #if 0 /* disabled by -frewrite-includes */ #if 0 #elif defined(bpf_target_s390) #endif #endif /* disabled by -frewrite-includes */ #elif 0 /* evaluated by -frewrite-includes */ # 139 "/usr/include/bpf/bpf_tracing.h" 3 4 /* s390 provides user_pt_regs instead of struct pt_regs to userspace */ struct pt_regs; #define PT_REGS_S390 const volatile user_pt_regs #define PT_REGS_PARM1(x) (((PT_REGS_S390 *)(x))->gprs[2]) #define PT_REGS_PARM2(x) (((PT_REGS_S390 *)(x))->gprs[3]) #define PT_REGS_PARM3(x) (((PT_REGS_S390 *)(x))->gprs[4]) #define PT_REGS_PARM4(x) (((PT_REGS_S390 *)(x))->gprs[5]) #define PT_REGS_PARM5(x) (((PT_REGS_S390 *)(x))->gprs[6]) #define PT_REGS_RET(x) (((PT_REGS_S390 *)(x))->gprs[14]) /* Works only with CONFIG_FRAME_POINTER */ #define PT_REGS_FP(x) (((PT_REGS_S390 *)(x))->gprs[11]) #define PT_REGS_RC(x) (((PT_REGS_S390 *)(x))->gprs[2]) #define PT_REGS_SP(x) (((PT_REGS_S390 *)(x))->gprs[15]) #define PT_REGS_IP(x) (((PT_REGS_S390 *)(x))->psw.addr) #define PT_REGS_PARM1_CORE(x) BPF_CORE_READ((PT_REGS_S390 *)(x), gprs[2]) #define PT_REGS_PARM2_CORE(x) BPF_CORE_READ((PT_REGS_S390 *)(x), gprs[3]) #define PT_REGS_PARM3_CORE(x) BPF_CORE_READ((PT_REGS_S390 *)(x), gprs[4]) #define PT_REGS_PARM4_CORE(x) BPF_CORE_READ((PT_REGS_S390 *)(x), gprs[5]) #define PT_REGS_PARM5_CORE(x) BPF_CORE_READ((PT_REGS_S390 *)(x), gprs[6]) #define PT_REGS_RET_CORE(x) BPF_CORE_READ((PT_REGS_S390 *)(x), gprs[14]) #define PT_REGS_FP_CORE(x) BPF_CORE_READ((PT_REGS_S390 *)(x), gprs[11]) #define PT_REGS_RC_CORE(x) BPF_CORE_READ((PT_REGS_S390 *)(x), gprs[2]) #define PT_REGS_SP_CORE(x) BPF_CORE_READ((PT_REGS_S390 *)(x), gprs[15]) #define PT_REGS_IP_CORE(x) BPF_CORE_READ((PT_REGS_S390 *)(x), psw.addr) #if 0 /* disabled by -frewrite-includes */ #if 0 #elif defined(bpf_target_arm) #endif #endif /* disabled by -frewrite-includes */ #elif 0 /* evaluated by -frewrite-includes */ # 167 "/usr/include/bpf/bpf_tracing.h" 3 4 #define PT_REGS_PARM1(x) ((x)->uregs[0]) #define PT_REGS_PARM2(x) ((x)->uregs[1]) #define PT_REGS_PARM3(x) ((x)->uregs[2]) #define PT_REGS_PARM4(x) ((x)->uregs[3]) #define PT_REGS_PARM5(x) ((x)->uregs[4]) #define PT_REGS_RET(x) ((x)->uregs[14]) #define PT_REGS_FP(x) ((x)->uregs[11]) /* Works only with CONFIG_FRAME_POINTER */ #define PT_REGS_RC(x) ((x)->uregs[0]) #define PT_REGS_SP(x) ((x)->uregs[13]) #define PT_REGS_IP(x) ((x)->uregs[12]) #define PT_REGS_PARM1_CORE(x) BPF_CORE_READ((x), uregs[0]) #define PT_REGS_PARM2_CORE(x) BPF_CORE_READ((x), uregs[1]) #define PT_REGS_PARM3_CORE(x) BPF_CORE_READ((x), uregs[2]) #define PT_REGS_PARM4_CORE(x) BPF_CORE_READ((x), uregs[3]) #define PT_REGS_PARM5_CORE(x) BPF_CORE_READ((x), uregs[4]) #define PT_REGS_RET_CORE(x) BPF_CORE_READ((x), uregs[14]) #define PT_REGS_FP_CORE(x) BPF_CORE_READ((x), uregs[11]) #define PT_REGS_RC_CORE(x) BPF_CORE_READ((x), uregs[0]) #define PT_REGS_SP_CORE(x) BPF_CORE_READ((x), uregs[13]) #define PT_REGS_IP_CORE(x) BPF_CORE_READ((x), uregs[12]) #if 0 /* disabled by -frewrite-includes */ #if 0 #elif defined(bpf_target_arm64) #endif #endif /* disabled by -frewrite-includes */ #elif 0 /* evaluated by -frewrite-includes */ # 191 "/usr/include/bpf/bpf_tracing.h" 3 4 /* arm64 provides struct user_pt_regs instead of struct pt_regs to userspace */ struct pt_regs; #define PT_REGS_ARM64 const volatile struct user_pt_regs #define PT_REGS_PARM1(x) (((PT_REGS_ARM64 *)(x))->regs[0]) #define PT_REGS_PARM2(x) (((PT_REGS_ARM64 *)(x))->regs[1]) #define PT_REGS_PARM3(x) (((PT_REGS_ARM64 *)(x))->regs[2]) #define PT_REGS_PARM4(x) (((PT_REGS_ARM64 *)(x))->regs[3]) #define PT_REGS_PARM5(x) (((PT_REGS_ARM64 *)(x))->regs[4]) #define PT_REGS_RET(x) (((PT_REGS_ARM64 *)(x))->regs[30]) /* Works only with CONFIG_FRAME_POINTER */ #define PT_REGS_FP(x) (((PT_REGS_ARM64 *)(x))->regs[29]) #define PT_REGS_RC(x) (((PT_REGS_ARM64 *)(x))->regs[0]) #define PT_REGS_SP(x) (((PT_REGS_ARM64 *)(x))->sp) #define PT_REGS_IP(x) (((PT_REGS_ARM64 *)(x))->pc) #define PT_REGS_PARM1_CORE(x) BPF_CORE_READ((PT_REGS_ARM64 *)(x), regs[0]) #define PT_REGS_PARM2_CORE(x) BPF_CORE_READ((PT_REGS_ARM64 *)(x), regs[1]) #define PT_REGS_PARM3_CORE(x) BPF_CORE_READ((PT_REGS_ARM64 *)(x), regs[2]) #define PT_REGS_PARM4_CORE(x) BPF_CORE_READ((PT_REGS_ARM64 *)(x), regs[3]) #define PT_REGS_PARM5_CORE(x) BPF_CORE_READ((PT_REGS_ARM64 *)(x), regs[4]) #define PT_REGS_RET_CORE(x) BPF_CORE_READ((PT_REGS_ARM64 *)(x), regs[30]) #define PT_REGS_FP_CORE(x) BPF_CORE_READ((PT_REGS_ARM64 *)(x), regs[29]) #define PT_REGS_RC_CORE(x) BPF_CORE_READ((PT_REGS_ARM64 *)(x), regs[0]) #define PT_REGS_SP_CORE(x) BPF_CORE_READ((PT_REGS_ARM64 *)(x), sp) #define PT_REGS_IP_CORE(x) BPF_CORE_READ((PT_REGS_ARM64 *)(x), pc) #if 0 /* disabled by -frewrite-includes */ #if 0 #elif defined(bpf_target_mips) #endif #endif /* disabled by -frewrite-includes */ #elif 0 /* evaluated by -frewrite-includes */ # 219 "/usr/include/bpf/bpf_tracing.h" 3 4 #define PT_REGS_PARM1(x) ((x)->regs[4]) #define PT_REGS_PARM2(x) ((x)->regs[5]) #define PT_REGS_PARM3(x) ((x)->regs[6]) #define PT_REGS_PARM4(x) ((x)->regs[7]) #define PT_REGS_PARM5(x) ((x)->regs[8]) #define PT_REGS_RET(x) ((x)->regs[31]) #define PT_REGS_FP(x) ((x)->regs[30]) /* Works only with CONFIG_FRAME_POINTER */ #define PT_REGS_RC(x) ((x)->regs[2]) #define PT_REGS_SP(x) ((x)->regs[29]) #define PT_REGS_IP(x) ((x)->cp0_epc) #define PT_REGS_PARM1_CORE(x) BPF_CORE_READ((x), regs[4]) #define PT_REGS_PARM2_CORE(x) BPF_CORE_READ((x), regs[5]) #define PT_REGS_PARM3_CORE(x) BPF_CORE_READ((x), regs[6]) #define PT_REGS_PARM4_CORE(x) BPF_CORE_READ((x), regs[7]) #define PT_REGS_PARM5_CORE(x) BPF_CORE_READ((x), regs[8]) #define PT_REGS_RET_CORE(x) BPF_CORE_READ((x), regs[31]) #define PT_REGS_FP_CORE(x) BPF_CORE_READ((x), regs[30]) #define PT_REGS_RC_CORE(x) BPF_CORE_READ((x), regs[2]) #define PT_REGS_SP_CORE(x) BPF_CORE_READ((x), regs[29]) #define PT_REGS_IP_CORE(x) BPF_CORE_READ((x), cp0_epc) #if 0 /* disabled by -frewrite-includes */ #if 0 #elif defined(bpf_target_powerpc) #endif #endif /* disabled by -frewrite-includes */ #elif 0 /* evaluated by -frewrite-includes */ # 243 "/usr/include/bpf/bpf_tracing.h" 3 4 #define PT_REGS_PARM1(x) ((x)->gpr[3]) #define PT_REGS_PARM2(x) ((x)->gpr[4]) #define PT_REGS_PARM3(x) ((x)->gpr[5]) #define PT_REGS_PARM4(x) ((x)->gpr[6]) #define PT_REGS_PARM5(x) ((x)->gpr[7]) #define PT_REGS_RC(x) ((x)->gpr[3]) #define PT_REGS_SP(x) ((x)->sp) #define PT_REGS_IP(x) ((x)->nip) #define PT_REGS_PARM1_CORE(x) BPF_CORE_READ((x), gpr[3]) #define PT_REGS_PARM2_CORE(x) BPF_CORE_READ((x), gpr[4]) #define PT_REGS_PARM3_CORE(x) BPF_CORE_READ((x), gpr[5]) #define PT_REGS_PARM4_CORE(x) BPF_CORE_READ((x), gpr[6]) #define PT_REGS_PARM5_CORE(x) BPF_CORE_READ((x), gpr[7]) #define PT_REGS_RC_CORE(x) BPF_CORE_READ((x), gpr[3]) #define PT_REGS_SP_CORE(x) BPF_CORE_READ((x), sp) #define PT_REGS_IP_CORE(x) BPF_CORE_READ((x), nip) #if 0 /* disabled by -frewrite-includes */ #if 0 #elif defined(bpf_target_sparc) #endif #endif /* disabled by -frewrite-includes */ #elif 0 /* evaluated by -frewrite-includes */ # 263 "/usr/include/bpf/bpf_tracing.h" 3 4 #define PT_REGS_PARM1(x) ((x)->u_regs[UREG_I0]) #define PT_REGS_PARM2(x) ((x)->u_regs[UREG_I1]) #define PT_REGS_PARM3(x) ((x)->u_regs[UREG_I2]) #define PT_REGS_PARM4(x) ((x)->u_regs[UREG_I3]) #define PT_REGS_PARM5(x) ((x)->u_regs[UREG_I4]) #define PT_REGS_RET(x) ((x)->u_regs[UREG_I7]) #define PT_REGS_RC(x) ((x)->u_regs[UREG_I0]) #define PT_REGS_SP(x) ((x)->u_regs[UREG_FP]) #define PT_REGS_PARM1_CORE(x) BPF_CORE_READ((x), u_regs[UREG_I0]) #define PT_REGS_PARM2_CORE(x) BPF_CORE_READ((x), u_regs[UREG_I1]) #define PT_REGS_PARM3_CORE(x) BPF_CORE_READ((x), u_regs[UREG_I2]) #define PT_REGS_PARM4_CORE(x) BPF_CORE_READ((x), u_regs[UREG_I3]) #define PT_REGS_PARM5_CORE(x) BPF_CORE_READ((x), u_regs[UREG_I4]) #define PT_REGS_RET_CORE(x) BPF_CORE_READ((x), u_regs[UREG_I7]) #define PT_REGS_RC_CORE(x) BPF_CORE_READ((x), u_regs[UREG_I0]) #define PT_REGS_SP_CORE(x) BPF_CORE_READ((x), u_regs[UREG_FP]) /* Should this also be a bpf_target check for the sparc case? */ #if 0 /* disabled by -frewrite-includes */ #if defined(__arch64__) #endif #endif /* disabled by -frewrite-includes */ #if 0 /* evaluated by -frewrite-includes */ # 284 "/usr/include/bpf/bpf_tracing.h" 3 4 #define PT_REGS_IP(x) ((x)->tpc) #define PT_REGS_IP_CORE(x) BPF_CORE_READ((x), tpc) #else # 287 "/usr/include/bpf/bpf_tracing.h" 3 4 #define PT_REGS_IP(x) ((x)->pc) #define PT_REGS_IP_CORE(x) BPF_CORE_READ((x), pc) #endif # 290 "/usr/include/bpf/bpf_tracing.h" 3 4 #endif # 292 "/usr/include/bpf/bpf_tracing.h" 3 4 #if 0 /* disabled by -frewrite-includes */ #if defined(bpf_target_powerpc) #endif #endif /* disabled by -frewrite-includes */ #if 0 /* evaluated by -frewrite-includes */ # 294 "/usr/include/bpf/bpf_tracing.h" 3 4 #define BPF_KPROBE_READ_RET_IP(ip, ctx) ({ (ip) = (ctx)->link; }) #define BPF_KRETPROBE_READ_RET_IP BPF_KPROBE_READ_RET_IP #if 0 /* disabled by -frewrite-includes */ #if 0 #elif defined(bpf_target_sparc) #endif #endif /* disabled by -frewrite-includes */ #elif 0 /* evaluated by -frewrite-includes */ # 297 "/usr/include/bpf/bpf_tracing.h" 3 4 #define BPF_KPROBE_READ_RET_IP(ip, ctx) ({ (ip) = PT_REGS_RET(ctx); }) #define BPF_KRETPROBE_READ_RET_IP BPF_KPROBE_READ_RET_IP #if 0 /* disabled by -frewrite-includes */ #if 0 #elif defined(bpf_target_defined) #endif #endif /* disabled by -frewrite-includes */ #elif 0 /* evaluated by -frewrite-includes */ # 300 "/usr/include/bpf/bpf_tracing.h" 3 4 #define BPF_KPROBE_READ_RET_IP(ip, ctx) \ ({ bpf_probe_read_kernel(&(ip), sizeof(ip), (void *)PT_REGS_RET(ctx)); }) #define BPF_KRETPROBE_READ_RET_IP(ip, ctx) \ ({ bpf_probe_read_kernel(&(ip), sizeof(ip), \ (void *)(PT_REGS_FP(ctx) + sizeof(ip))); }) #endif # 306 "/usr/include/bpf/bpf_tracing.h" 3 4 #if 0 /* disabled by -frewrite-includes */ #if !defined(bpf_target_defined) #endif #endif /* disabled by -frewrite-includes */ #if 1 /* evaluated by -frewrite-includes */ # 308 "/usr/include/bpf/bpf_tracing.h" 3 4 #define PT_REGS_PARM1(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) #define PT_REGS_PARM2(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) #define PT_REGS_PARM3(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) #define PT_REGS_PARM4(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) #define PT_REGS_PARM5(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) #define PT_REGS_RET(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) #define PT_REGS_FP(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) #define PT_REGS_RC(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) #define PT_REGS_SP(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) #define PT_REGS_IP(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) #define PT_REGS_PARM1_CORE(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) #define PT_REGS_PARM2_CORE(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) #define PT_REGS_PARM3_CORE(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) #define PT_REGS_PARM4_CORE(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) #define PT_REGS_PARM5_CORE(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) #define PT_REGS_RET_CORE(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) #define PT_REGS_FP_CORE(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) #define PT_REGS_RC_CORE(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) #define PT_REGS_SP_CORE(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) #define PT_REGS_IP_CORE(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) #define BPF_KPROBE_READ_RET_IP(ip, ctx) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) #define BPF_KRETPROBE_READ_RET_IP(ip, ctx) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) #endif /* !defined(bpf_target_defined) */ # 335 "/usr/include/bpf/bpf_tracing.h" 3 4 #ifndef ___bpf_concat #define ___bpf_concat(a, b) a ## b #endif # 339 "/usr/include/bpf/bpf_tracing.h" 3 4 #ifndef ___bpf_apply #define ___bpf_apply(fn, n) ___bpf_concat(fn, n) #endif # 342 "/usr/include/bpf/bpf_tracing.h" 3 4 #ifndef ___bpf_nth #define ___bpf_nth(_, _1, _2, _3, _4, _5, _6, _7, _8, _9, _a, _b, _c, N, ...) N #endif # 345 "/usr/include/bpf/bpf_tracing.h" 3 4 #ifndef ___bpf_narg #define ___bpf_narg(...) \ ___bpf_nth(_, ##__VA_ARGS__, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) #endif # 349 "/usr/include/bpf/bpf_tracing.h" 3 4 #define ___bpf_ctx_cast0() ctx #define ___bpf_ctx_cast1(x) ___bpf_ctx_cast0(), (void *)ctx[0] #define ___bpf_ctx_cast2(x, args...) ___bpf_ctx_cast1(args), (void *)ctx[1] #define ___bpf_ctx_cast3(x, args...) ___bpf_ctx_cast2(args), (void *)ctx[2] #define ___bpf_ctx_cast4(x, args...) ___bpf_ctx_cast3(args), (void *)ctx[3] #define ___bpf_ctx_cast5(x, args...) ___bpf_ctx_cast4(args), (void *)ctx[4] #define ___bpf_ctx_cast6(x, args...) ___bpf_ctx_cast5(args), (void *)ctx[5] #define ___bpf_ctx_cast7(x, args...) ___bpf_ctx_cast6(args), (void *)ctx[6] #define ___bpf_ctx_cast8(x, args...) ___bpf_ctx_cast7(args), (void *)ctx[7] #define ___bpf_ctx_cast9(x, args...) ___bpf_ctx_cast8(args), (void *)ctx[8] #define ___bpf_ctx_cast10(x, args...) ___bpf_ctx_cast9(args), (void *)ctx[9] #define ___bpf_ctx_cast11(x, args...) ___bpf_ctx_cast10(args), (void *)ctx[10] #define ___bpf_ctx_cast12(x, args...) ___bpf_ctx_cast11(args), (void *)ctx[11] #define ___bpf_ctx_cast(args...) \ ___bpf_apply(___bpf_ctx_cast, ___bpf_narg(args))(args) /* * BPF_PROG is a convenience wrapper for generic tp_btf/fentry/fexit and * similar kinds of BPF programs, that accept input arguments as a single * pointer to untyped u64 array, where each u64 can actually be a typed * pointer or integer of different size. Instead of requring user to write * manual casts and work with array elements by index, BPF_PROG macro * allows user to declare a list of named and typed input arguments in the * same syntax as for normal C function. All the casting is hidden and * performed transparently, while user code can just assume working with * function arguments of specified type and name. * * Original raw context argument is preserved as well as 'ctx' argument. * This is useful when using BPF helpers that expect original context * as one of the parameters (e.g., for bpf_perf_event_output()). */ #define BPF_PROG(name, args...) \ name(unsigned long long *ctx); \ static __attribute__((always_inline)) typeof(name(0)) \ ____##name(unsigned long long *ctx, ##args); \ typeof(name(0)) name(unsigned long long *ctx) \ { \ _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wint-conversion\"") \ return ____##name(___bpf_ctx_cast(args)); \ _Pragma("GCC diagnostic pop") \ } \ static __attribute__((always_inline)) typeof(name(0)) \ ____##name(unsigned long long *ctx, ##args) struct pt_regs; #define ___bpf_kprobe_args0() ctx #define ___bpf_kprobe_args1(x) \ ___bpf_kprobe_args0(), (void *)PT_REGS_PARM1(ctx) #define ___bpf_kprobe_args2(x, args...) \ ___bpf_kprobe_args1(args), (void *)PT_REGS_PARM2(ctx) #define ___bpf_kprobe_args3(x, args...) \ ___bpf_kprobe_args2(args), (void *)PT_REGS_PARM3(ctx) #define ___bpf_kprobe_args4(x, args...) \ ___bpf_kprobe_args3(args), (void *)PT_REGS_PARM4(ctx) #define ___bpf_kprobe_args5(x, args...) \ ___bpf_kprobe_args4(args), (void *)PT_REGS_PARM5(ctx) #define ___bpf_kprobe_args(args...) \ ___bpf_apply(___bpf_kprobe_args, ___bpf_narg(args))(args) /* * BPF_KPROBE serves the same purpose for kprobes as BPF_PROG for * tp_btf/fentry/fexit BPF programs. It hides the underlying platform-specific * low-level way of getting kprobe input arguments from struct pt_regs, and * provides a familiar typed and named function arguments syntax and * semantics of accessing kprobe input paremeters. * * Original struct pt_regs* context is preserved as 'ctx' argument. This might * be necessary when using BPF helpers like bpf_perf_event_output(). */ #define BPF_KPROBE(name, args...) \ name(struct pt_regs *ctx); \ static __attribute__((always_inline)) typeof(name(0)) \ ____##name(struct pt_regs *ctx, ##args); \ typeof(name(0)) name(struct pt_regs *ctx) \ { \ _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wint-conversion\"") \ return ____##name(___bpf_kprobe_args(args)); \ _Pragma("GCC diagnostic pop") \ } \ static __attribute__((always_inline)) typeof(name(0)) \ ____##name(struct pt_regs *ctx, ##args) #define ___bpf_kretprobe_args0() ctx #define ___bpf_kretprobe_args1(x) \ ___bpf_kretprobe_args0(), (void *)PT_REGS_RC(ctx) #define ___bpf_kretprobe_args(args...) \ ___bpf_apply(___bpf_kretprobe_args, ___bpf_narg(args))(args) /* * BPF_KRETPROBE is similar to BPF_KPROBE, except, it only provides optional * return value (in addition to `struct pt_regs *ctx`), but no input * arguments, because they will be clobbered by the time probed function * returns. */ #define BPF_KRETPROBE(name, args...) \ name(struct pt_regs *ctx); \ static __attribute__((always_inline)) typeof(name(0)) \ ____##name(struct pt_regs *ctx, ##args); \ typeof(name(0)) name(struct pt_regs *ctx) \ { \ _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wint-conversion\"") \ return ____##name(___bpf_kretprobe_args(args)); \ _Pragma("GCC diagnostic pop") \ } \ static __always_inline typeof(name(0)) ____##name(struct pt_regs *ctx, ##args) #endif # 461 "/usr/include/bpf/bpf_tracing.h" 3 4 # 5 "core.bpf.c" 2 #if 0 /* expanded by -frewrite-includes */ #include #endif /* expanded by -frewrite-includes */ # 5 "core.bpf.c" # 1 "/usr/include/bpf/bpf_core_read.h" 1 3 4 /* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */ #ifndef __BPF_CORE_READ_H__ #define __BPF_CORE_READ_H__ /* * enum bpf_field_info_kind is passed as a second argument into * __builtin_preserve_field_info() built-in to get a specific aspect of * a field, captured as a first argument. __builtin_preserve_field_info(field, * info_kind) returns __u32 integer and produces BTF field relocation, which * is understood and processed by libbpf during BPF object loading. See * selftests/bpf for examples. */ enum bpf_field_info_kind { BPF_FIELD_BYTE_OFFSET = 0, /* field byte offset */ BPF_FIELD_BYTE_SIZE = 1, BPF_FIELD_EXISTS = 2, /* field existence in target kernel */ BPF_FIELD_SIGNED = 3, BPF_FIELD_LSHIFT_U64 = 4, BPF_FIELD_RSHIFT_U64 = 5, }; /* second argument to __builtin_btf_type_id() built-in */ enum bpf_type_id_kind { BPF_TYPE_ID_LOCAL = 0, /* BTF type ID in local program */ BPF_TYPE_ID_TARGET = 1, /* BTF type ID in target kernel */ }; /* second argument to __builtin_preserve_type_info() built-in */ enum bpf_type_info_kind { BPF_TYPE_EXISTS = 0, /* type existence in target kernel */ BPF_TYPE_SIZE = 1, /* type size in target kernel */ }; /* second argument to __builtin_preserve_enum_value() built-in */ enum bpf_enum_value_kind { BPF_ENUMVAL_EXISTS = 0, /* enum value existence in kernel */ BPF_ENUMVAL_VALUE = 1, /* enum value value relocation */ }; #define __CORE_RELO(src, field, info) \ __builtin_preserve_field_info((src)->field, BPF_FIELD_##info) #if 0 /* disabled by -frewrite-includes */ #if __BYTE_ORDER == __LITTLE_ENDIAN #endif #endif /* disabled by -frewrite-includes */ #if 1 /* evaluated by -frewrite-includes */ # 44 "/usr/include/bpf/bpf_core_read.h" 3 4 #define __CORE_BITFIELD_PROBE_READ(dst, src, fld) \ bpf_probe_read_kernel( \ (void *)dst, \ __CORE_RELO(src, fld, BYTE_SIZE), \ (const void *)src + __CORE_RELO(src, fld, BYTE_OFFSET)) #else # 50 "/usr/include/bpf/bpf_core_read.h" 3 4 /* semantics of LSHIFT_64 assumes loading values into low-ordered bytes, so * for big-endian we need to adjust destination pointer accordingly, based on * field byte size */ #define __CORE_BITFIELD_PROBE_READ(dst, src, fld) \ bpf_probe_read_kernel( \ (void *)dst + (8 - __CORE_RELO(src, fld, BYTE_SIZE)), \ __CORE_RELO(src, fld, BYTE_SIZE), \ (const void *)src + __CORE_RELO(src, fld, BYTE_OFFSET)) #endif # 60 "/usr/include/bpf/bpf_core_read.h" 3 4 /* * Extract bitfield, identified by s->field, and return its value as u64. * All this is done in relocatable manner, so bitfield changes such as * signedness, bit size, offset changes, this will be handled automatically. * This version of macro is using bpf_probe_read_kernel() to read underlying * integer storage. Macro functions as an expression and its return type is * bpf_probe_read_kernel()'s return value: 0, on success, <0 on error. */ #define BPF_CORE_READ_BITFIELD_PROBED(s, field) ({ \ unsigned long long val = 0; \ \ __CORE_BITFIELD_PROBE_READ(&val, s, field); \ val <<= __CORE_RELO(s, field, LSHIFT_U64); \ if (__CORE_RELO(s, field, SIGNED)) \ val = ((long long)val) >> __CORE_RELO(s, field, RSHIFT_U64); \ else \ val = val >> __CORE_RELO(s, field, RSHIFT_U64); \ val; \ }) /* * Extract bitfield, identified by s->field, and return its value as u64. * This version of macro is using direct memory reads and should be used from * BPF program types that support such functionality (e.g., typed raw * tracepoints). */ #define BPF_CORE_READ_BITFIELD(s, field) ({ \ const void *p = (const void *)s + __CORE_RELO(s, field, BYTE_OFFSET); \ unsigned long long val; \ \ /* This is a so-called barrier_var() operation that makes specified \ * variable "a black box" for optimizing compiler. \ * It forces compiler to perform BYTE_OFFSET relocation on p and use \ * its calculated value in the switch below, instead of applying \ * the same relocation 4 times for each individual memory load. \ */ \ asm volatile("" : "=r"(p) : "0"(p)); \ \ switch (__CORE_RELO(s, field, BYTE_SIZE)) { \ case 1: val = *(const unsigned char *)p; break; \ case 2: val = *(const unsigned short *)p; break; \ case 4: val = *(const unsigned int *)p; break; \ case 8: val = *(const unsigned long long *)p; break; \ } \ val <<= __CORE_RELO(s, field, LSHIFT_U64); \ if (__CORE_RELO(s, field, SIGNED)) \ val = ((long long)val) >> __CORE_RELO(s, field, RSHIFT_U64); \ else \ val = val >> __CORE_RELO(s, field, RSHIFT_U64); \ val; \ }) /* * Convenience macro to check that field actually exists in target kernel's. * Returns: * 1, if matching field is present in target kernel; * 0, if no matching field found. */ #define bpf_core_field_exists(field) \ __builtin_preserve_field_info(field, BPF_FIELD_EXISTS) /* * Convenience macro to get the byte size of a field. Works for integers, * struct/unions, pointers, arrays, and enums. */ #define bpf_core_field_size(field) \ __builtin_preserve_field_info(field, BPF_FIELD_BYTE_SIZE) /* * Convenience macro to get BTF type ID of a specified type, using a local BTF * information. Return 32-bit unsigned integer with type ID from program's own * BTF. Always succeeds. */ #define bpf_core_type_id_local(type) \ __builtin_btf_type_id(*(typeof(type) *)0, BPF_TYPE_ID_LOCAL) /* * Convenience macro to get BTF type ID of a target kernel's type that matches * specified local type. * Returns: * - valid 32-bit unsigned type ID in kernel BTF; * - 0, if no matching type was found in a target kernel BTF. */ #define bpf_core_type_id_kernel(type) \ __builtin_btf_type_id(*(typeof(type) *)0, BPF_TYPE_ID_TARGET) /* * Convenience macro to check that provided named type * (struct/union/enum/typedef) exists in a target kernel. * Returns: * 1, if such type is present in target kernel's BTF; * 0, if no matching type is found. */ #define bpf_core_type_exists(type) \ __builtin_preserve_type_info(*(typeof(type) *)0, BPF_TYPE_EXISTS) /* * Convenience macro to get the byte size of a provided named type * (struct/union/enum/typedef) in a target kernel. * Returns: * >= 0 size (in bytes), if type is present in target kernel's BTF; * 0, if no matching type is found. */ #define bpf_core_type_size(type) \ __builtin_preserve_type_info(*(typeof(type) *)0, BPF_TYPE_SIZE) /* * Convenience macro to check that provided enumerator value is defined in * a target kernel. * Returns: * 1, if specified enum type and its enumerator value are present in target * kernel's BTF; * 0, if no matching enum and/or enum value within that enum is found. */ #define bpf_core_enum_value_exists(enum_type, enum_value) \ __builtin_preserve_enum_value(*(typeof(enum_type) *)enum_value, BPF_ENUMVAL_EXISTS) /* * Convenience macro to get the integer value of an enumerator value in * a target kernel. * Returns: * 64-bit value, if specified enum type and its enumerator value are * present in target kernel's BTF; * 0, if no matching enum and/or enum value within that enum is found. */ #define bpf_core_enum_value(enum_type, enum_value) \ __builtin_preserve_enum_value(*(typeof(enum_type) *)enum_value, BPF_ENUMVAL_VALUE) /* * bpf_core_read() abstracts away bpf_probe_read_kernel() call and captures * offset relocation for source address using __builtin_preserve_access_index() * built-in, provided by Clang. * * __builtin_preserve_access_index() takes as an argument an expression of * taking an address of a field within struct/union. It makes compiler emit * a relocation, which records BTF type ID describing root struct/union and an * accessor string which describes exact embedded field that was used to take * an address. See detailed description of this relocation format and * semantics in comments to struct bpf_field_reloc in libbpf_internal.h. * * This relocation allows libbpf to adjust BPF instruction to use correct * actual field offset, based on target kernel BTF type that matches original * (local) BTF, used to record relocation. */ #define bpf_core_read(dst, sz, src) \ bpf_probe_read_kernel(dst, sz, (const void *)__builtin_preserve_access_index(src)) /* NOTE: see comments for BPF_CORE_READ_USER() about the proper types use. */ #define bpf_core_read_user(dst, sz, src) \ bpf_probe_read_user(dst, sz, (const void *)__builtin_preserve_access_index(src)) /* * bpf_core_read_str() is a thin wrapper around bpf_probe_read_str() * additionally emitting BPF CO-RE field relocation for specified source * argument. */ #define bpf_core_read_str(dst, sz, src) \ bpf_probe_read_kernel_str(dst, sz, (const void *)__builtin_preserve_access_index(src)) /* NOTE: see comments for BPF_CORE_READ_USER() about the proper types use. */ #define bpf_core_read_user_str(dst, sz, src) \ bpf_probe_read_user_str(dst, sz, (const void *)__builtin_preserve_access_index(src)) #define ___concat(a, b) a ## b #define ___apply(fn, n) ___concat(fn, n) #define ___nth(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, __11, N, ...) N /* * return number of provided arguments; used for switch-based variadic macro * definitions (see ___last, ___arrow, etc below) */ #define ___narg(...) ___nth(_, ##__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) /* * return 0 if no arguments are passed, N - otherwise; used for * recursively-defined macros to specify termination (0) case, and generic * (N) case (e.g., ___read_ptrs, ___core_read) */ #define ___empty(...) ___nth(_, ##__VA_ARGS__, N, N, N, N, N, N, N, N, N, N, 0) #define ___last1(x) x #define ___last2(a, x) x #define ___last3(a, b, x) x #define ___last4(a, b, c, x) x #define ___last5(a, b, c, d, x) x #define ___last6(a, b, c, d, e, x) x #define ___last7(a, b, c, d, e, f, x) x #define ___last8(a, b, c, d, e, f, g, x) x #define ___last9(a, b, c, d, e, f, g, h, x) x #define ___last10(a, b, c, d, e, f, g, h, i, x) x #define ___last(...) ___apply(___last, ___narg(__VA_ARGS__))(__VA_ARGS__) #define ___nolast2(a, _) a #define ___nolast3(a, b, _) a, b #define ___nolast4(a, b, c, _) a, b, c #define ___nolast5(a, b, c, d, _) a, b, c, d #define ___nolast6(a, b, c, d, e, _) a, b, c, d, e #define ___nolast7(a, b, c, d, e, f, _) a, b, c, d, e, f #define ___nolast8(a, b, c, d, e, f, g, _) a, b, c, d, e, f, g #define ___nolast9(a, b, c, d, e, f, g, h, _) a, b, c, d, e, f, g, h #define ___nolast10(a, b, c, d, e, f, g, h, i, _) a, b, c, d, e, f, g, h, i #define ___nolast(...) ___apply(___nolast, ___narg(__VA_ARGS__))(__VA_ARGS__) #define ___arrow1(a) a #define ___arrow2(a, b) a->b #define ___arrow3(a, b, c) a->b->c #define ___arrow4(a, b, c, d) a->b->c->d #define ___arrow5(a, b, c, d, e) a->b->c->d->e #define ___arrow6(a, b, c, d, e, f) a->b->c->d->e->f #define ___arrow7(a, b, c, d, e, f, g) a->b->c->d->e->f->g #define ___arrow8(a, b, c, d, e, f, g, h) a->b->c->d->e->f->g->h #define ___arrow9(a, b, c, d, e, f, g, h, i) a->b->c->d->e->f->g->h->i #define ___arrow10(a, b, c, d, e, f, g, h, i, j) a->b->c->d->e->f->g->h->i->j #define ___arrow(...) ___apply(___arrow, ___narg(__VA_ARGS__))(__VA_ARGS__) #define ___type(...) typeof(___arrow(__VA_ARGS__)) #define ___read(read_fn, dst, src_type, src, accessor) \ read_fn((void *)(dst), sizeof(*(dst)), &((src_type)(src))->accessor) /* "recursively" read a sequence of inner pointers using local __t var */ #define ___rd_first(fn, src, a) ___read(fn, &__t, ___type(src), src, a); #define ___rd_last(fn, ...) \ ___read(fn, &__t, ___type(___nolast(__VA_ARGS__)), __t, ___last(__VA_ARGS__)); #define ___rd_p1(fn, ...) const void *__t; ___rd_first(fn, __VA_ARGS__) #define ___rd_p2(fn, ...) ___rd_p1(fn, ___nolast(__VA_ARGS__)) ___rd_last(fn, __VA_ARGS__) #define ___rd_p3(fn, ...) ___rd_p2(fn, ___nolast(__VA_ARGS__)) ___rd_last(fn, __VA_ARGS__) #define ___rd_p4(fn, ...) ___rd_p3(fn, ___nolast(__VA_ARGS__)) ___rd_last(fn, __VA_ARGS__) #define ___rd_p5(fn, ...) ___rd_p4(fn, ___nolast(__VA_ARGS__)) ___rd_last(fn, __VA_ARGS__) #define ___rd_p6(fn, ...) ___rd_p5(fn, ___nolast(__VA_ARGS__)) ___rd_last(fn, __VA_ARGS__) #define ___rd_p7(fn, ...) ___rd_p6(fn, ___nolast(__VA_ARGS__)) ___rd_last(fn, __VA_ARGS__) #define ___rd_p8(fn, ...) ___rd_p7(fn, ___nolast(__VA_ARGS__)) ___rd_last(fn, __VA_ARGS__) #define ___rd_p9(fn, ...) ___rd_p8(fn, ___nolast(__VA_ARGS__)) ___rd_last(fn, __VA_ARGS__) #define ___read_ptrs(fn, src, ...) \ ___apply(___rd_p, ___narg(__VA_ARGS__))(fn, src, __VA_ARGS__) #define ___core_read0(fn, fn_ptr, dst, src, a) \ ___read(fn, dst, ___type(src), src, a); #define ___core_readN(fn, fn_ptr, dst, src, ...) \ ___read_ptrs(fn_ptr, src, ___nolast(__VA_ARGS__)) \ ___read(fn, dst, ___type(src, ___nolast(__VA_ARGS__)), __t, \ ___last(__VA_ARGS__)); #define ___core_read(fn, fn_ptr, dst, src, a, ...) \ ___apply(___core_read, ___empty(__VA_ARGS__))(fn, fn_ptr, dst, \ src, a, ##__VA_ARGS__) /* * BPF_CORE_READ_INTO() is a more performance-conscious variant of * BPF_CORE_READ(), in which final field is read into user-provided storage. * See BPF_CORE_READ() below for more details on general usage. */ #define BPF_CORE_READ_INTO(dst, src, a, ...) ({ \ ___core_read(bpf_core_read, bpf_core_read, \ dst, (src), a, ##__VA_ARGS__) \ }) /* * Variant of BPF_CORE_READ_INTO() for reading from user-space memory. * * NOTE: see comments for BPF_CORE_READ_USER() about the proper types use. */ #define BPF_CORE_READ_USER_INTO(dst, src, a, ...) ({ \ ___core_read(bpf_core_read_user, bpf_core_read_user, \ dst, (src), a, ##__VA_ARGS__) \ }) /* Non-CO-RE variant of BPF_CORE_READ_INTO() */ #define BPF_PROBE_READ_INTO(dst, src, a, ...) ({ \ ___core_read(bpf_probe_read, bpf_probe_read, \ dst, (src), a, ##__VA_ARGS__) \ }) /* Non-CO-RE variant of BPF_CORE_READ_USER_INTO(). * * As no CO-RE relocations are emitted, source types can be arbitrary and are * not restricted to kernel types only. */ #define BPF_PROBE_READ_USER_INTO(dst, src, a, ...) ({ \ ___core_read(bpf_probe_read_user, bpf_probe_read_user, \ dst, (src), a, ##__VA_ARGS__) \ }) /* * BPF_CORE_READ_STR_INTO() does same "pointer chasing" as * BPF_CORE_READ() for intermediate pointers, but then executes (and returns * corresponding error code) bpf_core_read_str() for final string read. */ #define BPF_CORE_READ_STR_INTO(dst, src, a, ...) ({ \ ___core_read(bpf_core_read_str, bpf_core_read, \ dst, (src), a, ##__VA_ARGS__) \ }) /* * Variant of BPF_CORE_READ_STR_INTO() for reading from user-space memory. * * NOTE: see comments for BPF_CORE_READ_USER() about the proper types use. */ #define BPF_CORE_READ_USER_STR_INTO(dst, src, a, ...) ({ \ ___core_read(bpf_core_read_user_str, bpf_core_read_user, \ dst, (src), a, ##__VA_ARGS__) \ }) /* Non-CO-RE variant of BPF_CORE_READ_STR_INTO() */ #define BPF_PROBE_READ_STR_INTO(dst, src, a, ...) ({ \ ___core_read(bpf_probe_read_str, bpf_probe_read, \ dst, (src), a, ##__VA_ARGS__) \ }) /* * Non-CO-RE variant of BPF_CORE_READ_USER_STR_INTO(). * * As no CO-RE relocations are emitted, source types can be arbitrary and are * not restricted to kernel types only. */ #define BPF_PROBE_READ_USER_STR_INTO(dst, src, a, ...) ({ \ ___core_read(bpf_probe_read_user_str, bpf_probe_read_user, \ dst, (src), a, ##__VA_ARGS__) \ }) /* * BPF_CORE_READ() is used to simplify BPF CO-RE relocatable read, especially * when there are few pointer chasing steps. * E.g., what in non-BPF world (or in BPF w/ BCC) would be something like: * int x = s->a.b.c->d.e->f->g; * can be succinctly achieved using BPF_CORE_READ as: * int x = BPF_CORE_READ(s, a.b.c, d.e, f, g); * * BPF_CORE_READ will decompose above statement into 4 bpf_core_read (BPF * CO-RE relocatable bpf_probe_read_kernel() wrapper) calls, logically * equivalent to: * 1. const void *__t = s->a.b.c; * 2. __t = __t->d.e; * 3. __t = __t->f; * 4. return __t->g; * * Equivalence is logical, because there is a heavy type casting/preservation * involved, as well as all the reads are happening through * bpf_probe_read_kernel() calls using __builtin_preserve_access_index() to * emit CO-RE relocations. * * N.B. Only up to 9 "field accessors" are supported, which should be more * than enough for any practical purpose. */ #define BPF_CORE_READ(src, a, ...) ({ \ ___type((src), a, ##__VA_ARGS__) __r; \ BPF_CORE_READ_INTO(&__r, (src), a, ##__VA_ARGS__); \ __r; \ }) /* * Variant of BPF_CORE_READ() for reading from user-space memory. * * NOTE: all the source types involved are still *kernel types* and need to * exist in kernel (or kernel module) BTF, otherwise CO-RE relocation will * fail. Custom user types are not relocatable with CO-RE. * The typical situation in which BPF_CORE_READ_USER() might be used is to * read kernel UAPI types from the user-space memory passed in as a syscall * input argument. */ #define BPF_CORE_READ_USER(src, a, ...) ({ \ ___type((src), a, ##__VA_ARGS__) __r; \ BPF_CORE_READ_USER_INTO(&__r, (src), a, ##__VA_ARGS__); \ __r; \ }) /* Non-CO-RE variant of BPF_CORE_READ() */ #define BPF_PROBE_READ(src, a, ...) ({ \ ___type((src), a, ##__VA_ARGS__) __r; \ BPF_PROBE_READ_INTO(&__r, (src), a, ##__VA_ARGS__); \ __r; \ }) /* * Non-CO-RE variant of BPF_CORE_READ_USER(). * * As no CO-RE relocations are emitted, source types can be arbitrary and are * not restricted to kernel types only. */ #define BPF_PROBE_READ_USER(src, a, ...) ({ \ ___type((src), a, ##__VA_ARGS__) __r; \ BPF_PROBE_READ_USER_INTO(&__r, (src), a, ##__VA_ARGS__); \ __r; \ }) #endif # 444 "/usr/include/bpf/bpf_core_read.h" 3 4 # 6 "core.bpf.c" 2 typedef int (*func_proto_typedef)(struct sk_buff *); extern int do_smth(int); SEC("raw_tracepoint/sys_enter") int fexit_eth_type_trans(void *ctx) { int *ptr = (int *)ctx; // *ptr = bpf_core_type_id_local(struct sk_buff); // *ptr = bpf_core_type_id_kernel(struct sk_buff); // *ptr = bpf_core_type_exists(struct sk_buff); // *ptr = bpf_core_type_size(struct sk_buff); *ptr = bpf_core_type_id_local(func_proto_typedef); *ptr = bpf_core_type_id_kernel(func_proto_typedef); *ptr = bpf_core_type_exists(func_proto_typedef); *ptr = bpf_core_type_size(func_proto_typedef); *ptr = bpf_core_type_id_local(do_smth); *ptr = bpf_core_type_id_kernel(do_smth); // *ptr = bpf_core_type_exists(do_smth); // *ptr = bpf_core_type_size(do_smth); return 0; } char LICENSE[] SEC("license") = "GPL";