This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
zhangyang-variable-monitor/source/buffer/trace_buffer.h

107 lines
4.6 KiB
C
Raw Normal View History

2023-11-16 14:07:37 +08:00
/*
* diagnose-tools
* procfs/trace的问题而编写
*
* Copyright (C) 20 Alibaba Ltd.
*
* Baoyou Xie <baoyou.xie@linux.alibaba.com>
*
* License terms: GNU General Public License (GPL) version 3
*
*/
#include <linux/spinlock.h>
#include <linux/mutex.h>
#include <linux/stddef.h>
/**
*
* buffer:
* data:
* pos:
* circle:
* tail:
* product: buffer中数据临时保存到此
* data:
* len:
* buf_size: buffer/product的大小
*/
#define DIAG_TRACE_BUF_SIZE 1024
struct diag_trace_buffer {
struct {
char *data;
unsigned int pos;
int circle;
unsigned int tail;
spinlock_t lock;
struct mutex mutex;
} buffer;
struct {
char *data;
unsigned int len;
} product;
char fmt_buffer[DIAG_TRACE_BUF_SIZE];
unsigned int buf_size;
};
int init_diag_trace_buffer(struct diag_trace_buffer *buffer,
unsigned int buf_size);
void destroy_diag_trace_buffer(struct diag_trace_buffer *buffer);
void discard_diag_trace_buffer(struct diag_trace_buffer *buffer);
void backup_diag_trace_buffer(struct diag_trace_buffer *buffer);
asmlinkage int
diag_trace_buffer_printk_nolock(struct diag_trace_buffer *buffer,
const char *fmt, ...);
asmlinkage int
diag_trace_buffer_printk(struct diag_trace_buffer *buffer,
const char *fmt, ...);
asmlinkage int
diag_trace_buffer_write_nolock(struct diag_trace_buffer *buffer,
const void *data, size_t len);
asmlinkage int
diag_trace_buffer_write(struct diag_trace_buffer *buffer,
const void *data, size_t len);
#define diag_trace_buffer_spin_lock(__buffer, flags) \
spin_lock_irqsave(&((__buffer)->buffer.lock), flags)
#define diag_trace_buffer_spin_unlock(__buffer, flags) \
spin_unlock_irqrestore(&((__buffer)->buffer.lock), flags)
void diag_trace_buffer_mutex_lock(struct diag_trace_buffer *buffer);
void diag_trace_buffer_mutex_unlock(struct diag_trace_buffer *buffer);
void diagnose_trace_buffer_stack_trace(int pre, struct diag_trace_buffer *buffer,
struct task_struct *p, unsigned long *backtrace);
void diagnose_trace_buffer_nolock_stack_trace(int pre, struct diag_trace_buffer *buffer,
struct task_struct *p, unsigned long *backtrace);
void diagnose_trace_buffer_nolock_stack_trace_user(int pre, struct diag_trace_buffer *buffer,
unsigned long *backtrace);
void diagnose_trace_buffer_stack_trace_user(int pre, struct diag_trace_buffer *buffer,
unsigned long *backtrace);
void diagnose_trace_buffer_nolock_stack_trace_user_tsk(int pre, struct diag_trace_buffer *buffer,
struct task_struct *tsk, unsigned long *backtrace);
void diagnose_trace_buffer_stack_trace_user_tsk(int pre, struct diag_trace_buffer *buffer,
struct task_struct *tsk, unsigned long *backtrace);
void diag_trace_buffer_process_chain(int pre, struct diag_trace_buffer *buffer, struct task_struct *tsk);
void diag_trace_buffer_nolock_process_chain(int pre, struct diag_trace_buffer *buffer, struct task_struct *tsk);
void diag_trace_buffer_process_chain_cmdline(int pre, struct diag_trace_buffer *buffer, struct task_struct *tsk);
void diag_trace_buffer_nolock_process_chain_cmdline(int pre, struct diag_trace_buffer *buffer, struct task_struct *tsk);
void trace_buffer_cgroups_tsk(int pre, struct diag_trace_buffer *buffer, struct task_struct *tsk);
void trace_buffer_nolock_cgroups_tsk(int pre, struct diag_trace_buffer *buffer, struct task_struct *tsk);
void trace_buffer_cgroups(int pre, struct diag_trace_buffer *buffer);
void trace_buffer_nolock_cgroups(int pre, struct diag_trace_buffer *buffer);
void diag_trace_buffer_all_task_stack(int pre, struct diag_trace_buffer *buffer);
void diag_trace_buffer_nolock_all_task_stack(int pre,
struct diag_trace_buffer *buffer);
void diagnose_trace_buffer_nolock_stack_trace_unfold(int pre, struct diag_trace_buffer *buffer,
struct task_struct *p, unsigned long *backtrace);
void diagnose_trace_buffer_nolock_stack_trace_unfold_user(int pre, struct diag_trace_buffer *buffer,
unsigned long *backtrace);
void diagnose_print_stack_trace_unfold_user_tsk(int pre, int might_sleep, struct task_struct *tsk, unsigned long *backtrace);
void diagnose_trace_buffer_nolock_stack_trace_unfold_user_tsk(int pre, int might_sleep, struct diag_trace_buffer *buffer,
struct task_struct *tsk, unsigned long *backtrace);
void diagnose_trace_buffer_stack_trace_unfold_user_tsk(int pre, int might_sleep, struct diag_trace_buffer *buffer,
struct task_struct *tsk, unsigned long *backtrace);