函数源码 |
Source File:kernel\trace\trace_seq.c |
Create Date:2022-07-27 13:12:15 |
首页 | Copyright©Brick |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | // SPDX-License-Identifier: GPL-2.0 /* * trace_seq.c * * Copyright (C) 2008-2014 Red Hat Inc, Steven Rostedt <srostedt@redhat.com> * * The trace_seq is a handy tool that allows you to pass a descriptor around * to a buffer that other functions can write to. It is similar to the * seq_file functionality but has some differences. * * To use it, the trace_seq must be initialized with trace_seq_init(). * This will set up the counters within the descriptor. You can call * trace_seq_init() more than once to reset the trace_seq to start * from scratch. * * The buffer size is currently PAGE_SIZE, although it may become dynamic * in the future. * * A write to the buffer will either succed or fail. That is, unlike * sprintf() there will not be a partial write (well it may write into * the buffer but it wont update the pointers). This allows users to * try to write something into the trace_seq buffer and if it fails * they can flush it and try again. * */ #include <linux/uaccess.h> #include <linux/seq_file.h> #include <linux/trace_seq.h> /* How much buffer is left on the trace_seq? */ #define TRACE_SEQ_BUF_LEFT(s) seq_buf_buffer_left(&(s)->seq) /* How much buffer is written? */ #define TRACE_SEQ_BUF_USED(s) seq_buf_used(&(s)->seq) /* * trace_seq should work with being initialized with 0s. */ static inline void __trace_seq_init( struct trace_seq *s) { if (unlikely(!s->seq.size)) trace_seq_init(s); } |