Lines Matching refs:seq

43 static void bpf_iter_inc_seq_num(struct seq_file *seq)  in bpf_iter_inc_seq_num()  argument
47 iter_priv = container_of(seq->private, struct bpf_iter_priv_data, in bpf_iter_inc_seq_num()
52 static void bpf_iter_dec_seq_num(struct seq_file *seq) in bpf_iter_dec_seq_num() argument
56 iter_priv = container_of(seq->private, struct bpf_iter_priv_data, in bpf_iter_dec_seq_num()
61 static void bpf_iter_done_stop(struct seq_file *seq) in bpf_iter_done_stop() argument
65 iter_priv = container_of(seq->private, struct bpf_iter_priv_data, in bpf_iter_done_stop()
75 static bool bpf_iter_support_resched(struct seq_file *seq) in bpf_iter_support_resched() argument
79 iter_priv = container_of(seq->private, struct bpf_iter_priv_data, in bpf_iter_support_resched()
96 struct seq_file *seq = file->private_data; in bpf_seq_read() local
102 mutex_lock(&seq->lock); in bpf_seq_read()
104 if (!seq->buf) { in bpf_seq_read()
105 seq->size = PAGE_SIZE << 3; in bpf_seq_read()
106 seq->buf = kvmalloc(seq->size, GFP_KERNEL); in bpf_seq_read()
107 if (!seq->buf) { in bpf_seq_read()
113 if (seq->count) { in bpf_seq_read()
114 n = min(seq->count, size); in bpf_seq_read()
115 err = copy_to_user(buf, seq->buf + seq->from, n); in bpf_seq_read()
120 seq->count -= n; in bpf_seq_read()
121 seq->from += n; in bpf_seq_read()
126 seq->from = 0; in bpf_seq_read()
127 p = seq->op->start(seq, &seq->index); in bpf_seq_read()
132 seq->op->stop(seq, p); in bpf_seq_read()
133 seq->count = 0; in bpf_seq_read()
137 err = seq->op->show(seq, p); in bpf_seq_read()
142 bpf_iter_dec_seq_num(seq); in bpf_seq_read()
143 seq->count = 0; in bpf_seq_read()
144 } else if (err < 0 || seq_has_overflowed(seq)) { in bpf_seq_read()
147 seq->op->stop(seq, p); in bpf_seq_read()
148 seq->count = 0; in bpf_seq_read()
152 can_resched = bpf_iter_support_resched(seq); in bpf_seq_read()
154 loff_t pos = seq->index; in bpf_seq_read()
157 offs = seq->count; in bpf_seq_read()
158 p = seq->op->next(seq, p, &seq->index); in bpf_seq_read()
159 if (pos == seq->index) { in bpf_seq_read()
162 seq->op->next); in bpf_seq_read()
163 seq->index++; in bpf_seq_read()
170 bpf_iter_inc_seq_num(seq); in bpf_seq_read()
172 if (seq->count >= size) in bpf_seq_read()
178 seq->op->stop(seq, p); in bpf_seq_read()
184 err = seq->op->show(seq, p); in bpf_seq_read()
186 bpf_iter_dec_seq_num(seq); in bpf_seq_read()
187 seq->count = offs; in bpf_seq_read()
188 } else if (err < 0 || seq_has_overflowed(seq)) { in bpf_seq_read()
189 seq->count = offs; in bpf_seq_read()
193 seq->op->stop(seq, p); in bpf_seq_read()
203 offs = seq->count; in bpf_seq_read()
205 seq->op->stop(seq, NULL); in bpf_seq_read()
210 seq->op->stop(seq, p); in bpf_seq_read()
212 if (!seq_has_overflowed(seq)) { in bpf_seq_read()
213 bpf_iter_done_stop(seq); in bpf_seq_read()
215 seq->count = offs; in bpf_seq_read()
223 n = min(seq->count, size); in bpf_seq_read()
224 err = copy_to_user(buf, seq->buf, n); in bpf_seq_read()
230 seq->count -= n; in bpf_seq_read()
231 seq->from = n; in bpf_seq_read()
237 mutex_unlock(&seq->lock); in bpf_seq_read()
265 struct seq_file *seq; in iter_release() local
267 seq = file->private_data; in iter_release()
268 if (!seq) in iter_release()
271 iter_priv = container_of(seq->private, struct bpf_iter_priv_data, in iter_release()
275 iter_priv->seq_info->fini_seq_private(seq->private); in iter_release()
278 seq->private = iter_priv; in iter_release()
436 struct seq_file *seq) in bpf_iter_link_show_fdinfo() argument
442 seq_printf(seq, in bpf_iter_link_show_fdinfo()
448 show_fdinfo(&iter_link->aux, seq); in bpf_iter_link_show_fdinfo()
596 struct seq_file *seq; in prepare_seq_file() local
621 seq = file->private_data; in prepare_seq_file()
622 seq->private = priv_data->target_private; in prepare_seq_file()
673 struct seq_file *seq; in bpf_iter_get_info() local
676 seq = meta->seq; in bpf_iter_get_info()
677 if (seq->file->f_op != &bpf_iter_fops) in bpf_iter_get_info()
680 seq_priv = seq->private; in bpf_iter_get_info()