• Home
  • Raw
  • Download

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()
70 static bool bpf_iter_support_resched(struct seq_file *seq) in bpf_iter_support_resched() argument
74 iter_priv = container_of(seq->private, struct bpf_iter_priv_data, in bpf_iter_support_resched()
92 struct seq_file *seq = file->private_data; in bpf_seq_read() local
98 mutex_lock(&seq->lock); in bpf_seq_read()
100 if (!seq->buf) { in bpf_seq_read()
101 seq->size = PAGE_SIZE << 3; in bpf_seq_read()
102 seq->buf = kvmalloc(seq->size, GFP_KERNEL); in bpf_seq_read()
103 if (!seq->buf) { in bpf_seq_read()
109 if (seq->count) { in bpf_seq_read()
110 n = min(seq->count, size); in bpf_seq_read()
111 err = copy_to_user(buf, seq->buf + seq->from, n); in bpf_seq_read()
116 seq->count -= n; in bpf_seq_read()
117 seq->from += n; in bpf_seq_read()
122 seq->from = 0; in bpf_seq_read()
123 p = seq->op->start(seq, &seq->index); in bpf_seq_read()
128 seq->op->stop(seq, p); in bpf_seq_read()
129 seq->count = 0; in bpf_seq_read()
133 err = seq->op->show(seq, p); in bpf_seq_read()
138 bpf_iter_dec_seq_num(seq); in bpf_seq_read()
139 seq->count = 0; in bpf_seq_read()
140 } else if (err < 0 || seq_has_overflowed(seq)) { in bpf_seq_read()
143 seq->op->stop(seq, p); in bpf_seq_read()
144 seq->count = 0; in bpf_seq_read()
148 can_resched = bpf_iter_support_resched(seq); in bpf_seq_read()
150 loff_t pos = seq->index; in bpf_seq_read()
153 offs = seq->count; in bpf_seq_read()
154 p = seq->op->next(seq, p, &seq->index); in bpf_seq_read()
155 if (pos == seq->index) { in bpf_seq_read()
158 seq->op->next); in bpf_seq_read()
159 seq->index++; in bpf_seq_read()
166 bpf_iter_inc_seq_num(seq); in bpf_seq_read()
168 if (seq->count >= size) in bpf_seq_read()
174 seq->op->stop(seq, p); in bpf_seq_read()
180 err = seq->op->show(seq, p); in bpf_seq_read()
182 bpf_iter_dec_seq_num(seq); in bpf_seq_read()
183 seq->count = offs; in bpf_seq_read()
184 } else if (err < 0 || seq_has_overflowed(seq)) { in bpf_seq_read()
185 seq->count = offs; in bpf_seq_read()
189 seq->op->stop(seq, p); in bpf_seq_read()
199 offs = seq->count; in bpf_seq_read()
201 seq->op->stop(seq, p); in bpf_seq_read()
203 if (!seq_has_overflowed(seq)) { in bpf_seq_read()
204 bpf_iter_done_stop(seq); in bpf_seq_read()
206 seq->count = offs; in bpf_seq_read()
214 n = min(seq->count, size); in bpf_seq_read()
215 err = copy_to_user(buf, seq->buf, n); in bpf_seq_read()
221 seq->count -= n; in bpf_seq_read()
222 seq->from = n; in bpf_seq_read()
228 mutex_unlock(&seq->lock); in bpf_seq_read()
256 struct seq_file *seq; in iter_release() local
258 seq = file->private_data; in iter_release()
259 if (!seq) in iter_release()
262 iter_priv = container_of(seq->private, struct bpf_iter_priv_data, in iter_release()
266 iter_priv->seq_info->fini_seq_private(seq->private); in iter_release()
269 seq->private = iter_priv; in iter_release()
430 struct seq_file *seq) in bpf_iter_link_show_fdinfo() argument
436 seq_printf(seq, in bpf_iter_link_show_fdinfo()
442 show_fdinfo(&iter_link->aux, seq); in bpf_iter_link_show_fdinfo()
586 struct seq_file *seq; in prepare_seq_file() local
611 seq = file->private_data; in prepare_seq_file()
612 seq->private = priv_data->target_private; in prepare_seq_file()
663 struct seq_file *seq; in bpf_iter_get_info() local
666 seq = meta->seq; in bpf_iter_get_info()
667 if (seq->file->f_op != &bpf_iter_fops) in bpf_iter_get_info()
670 seq_priv = seq->private; in bpf_iter_get_info()