Lines Matching refs:m
21 static void seq_set_overflow(struct seq_file *m) in seq_set_overflow() argument
23 m->count = m->size; in seq_set_overflow()
100 static int traverse(struct seq_file *m, loff_t offset) in traverse() argument
106 m->version = 0; in traverse()
108 m->count = m->from = 0; in traverse()
110 m->index = index; in traverse()
113 if (!m->buf) { in traverse()
114 m->buf = seq_buf_alloc(m->size = PAGE_SIZE); in traverse()
115 if (!m->buf) in traverse()
118 p = m->op->start(m, &index); in traverse()
123 error = m->op->show(m, p); in traverse()
128 m->count = 0; in traverse()
130 if (seq_has_overflowed(m)) in traverse()
132 if (pos + m->count > offset) { in traverse()
133 m->from = offset - pos; in traverse()
134 m->count -= m->from; in traverse()
135 m->index = index; in traverse()
138 pos += m->count; in traverse()
139 m->count = 0; in traverse()
142 m->index = index; in traverse()
145 p = m->op->next(m, p, &index); in traverse()
147 m->op->stop(m, p); in traverse()
148 m->index = index; in traverse()
152 m->op->stop(m, p); in traverse()
153 kvfree(m->buf); in traverse()
154 m->count = 0; in traverse()
155 m->buf = seq_buf_alloc(m->size <<= 1); in traverse()
156 return !m->buf ? -ENOMEM : -EAGAIN; in traverse()
170 struct seq_file *m = file->private_data; in seq_read() local
177 mutex_lock(&m->lock); in seq_read()
190 m->version = file->f_version; in seq_read()
193 if (unlikely(*ppos != m->read_pos)) { in seq_read()
194 while ((err = traverse(m, *ppos)) == -EAGAIN) in seq_read()
198 m->read_pos = 0; in seq_read()
199 m->version = 0; in seq_read()
200 m->index = 0; in seq_read()
201 m->count = 0; in seq_read()
204 m->read_pos = *ppos; in seq_read()
209 if (!m->buf) { in seq_read()
210 m->buf = seq_buf_alloc(m->size = PAGE_SIZE); in seq_read()
211 if (!m->buf) in seq_read()
215 if (m->count) { in seq_read()
216 n = min(m->count, size); in seq_read()
217 err = copy_to_user(buf, m->buf + m->from, n); in seq_read()
220 m->count -= n; in seq_read()
221 m->from += n; in seq_read()
225 if (!m->count) in seq_read()
226 m->index++; in seq_read()
231 pos = m->index; in seq_read()
232 p = m->op->start(m, &pos); in seq_read()
237 err = m->op->show(m, p); in seq_read()
241 m->count = 0; in seq_read()
242 if (unlikely(!m->count)) { in seq_read()
243 p = m->op->next(m, p, &pos); in seq_read()
244 m->index = pos; in seq_read()
247 if (m->count < m->size) in seq_read()
249 m->op->stop(m, p); in seq_read()
250 kvfree(m->buf); in seq_read()
251 m->count = 0; in seq_read()
252 m->buf = seq_buf_alloc(m->size <<= 1); in seq_read()
253 if (!m->buf) in seq_read()
255 m->version = 0; in seq_read()
256 pos = m->index; in seq_read()
257 p = m->op->start(m, &pos); in seq_read()
259 m->op->stop(m, p); in seq_read()
260 m->count = 0; in seq_read()
264 while (m->count < size) { in seq_read()
265 size_t offs = m->count; in seq_read()
267 p = m->op->next(m, p, &next); in seq_read()
272 err = m->op->show(m, p); in seq_read()
273 if (seq_has_overflowed(m) || err) { in seq_read()
274 m->count = offs; in seq_read()
280 m->op->stop(m, p); in seq_read()
281 n = min(m->count, size); in seq_read()
282 err = copy_to_user(buf, m->buf, n); in seq_read()
286 m->count -= n; in seq_read()
287 if (m->count) in seq_read()
288 m->from = n; in seq_read()
291 m->index = pos; in seq_read()
297 m->read_pos += copied; in seq_read()
299 file->f_version = m->version; in seq_read()
300 mutex_unlock(&m->lock); in seq_read()
321 struct seq_file *m = file->private_data; in seq_lseek() local
324 mutex_lock(&m->lock); in seq_lseek()
325 m->version = file->f_version; in seq_lseek()
333 if (offset != m->read_pos) { in seq_lseek()
334 while ((retval = traverse(m, offset)) == -EAGAIN) in seq_lseek()
339 m->read_pos = 0; in seq_lseek()
340 m->version = 0; in seq_lseek()
341 m->index = 0; in seq_lseek()
342 m->count = 0; in seq_lseek()
344 m->read_pos = offset; in seq_lseek()
351 file->f_version = m->version; in seq_lseek()
352 mutex_unlock(&m->lock); in seq_lseek()
367 struct seq_file *m = file->private_data; in seq_release() local
368 kvfree(m->buf); in seq_release()
369 kfree(m); in seq_release()
384 void seq_escape(struct seq_file *m, const char *s, const char *esc) in seq_escape() argument
387 size_t size = seq_get_buf(m, &buf); in seq_escape()
391 seq_commit(m, ret < size ? ret : -1); in seq_escape()
395 void seq_vprintf(struct seq_file *m, const char *f, va_list args) in seq_vprintf() argument
399 if (m->count < m->size) { in seq_vprintf()
400 len = vsnprintf(m->buf + m->count, m->size - m->count, f, args); in seq_vprintf()
401 if (m->count + len < m->size) { in seq_vprintf()
402 m->count += len; in seq_vprintf()
406 seq_set_overflow(m); in seq_vprintf()
410 void seq_printf(struct seq_file *m, const char *f, ...) in seq_printf() argument
415 seq_vprintf(m, f, args); in seq_printf()
461 int seq_path(struct seq_file *m, const struct path *path, const char *esc) in seq_path() argument
464 size_t size = seq_get_buf(m, &buf); in seq_path()
475 seq_commit(m, res); in seq_path()
489 int seq_file_path(struct seq_file *m, struct file *file, const char *esc) in seq_file_path() argument
491 return seq_path(m, &file->f_path, esc); in seq_file_path()
498 int seq_path_root(struct seq_file *m, const struct path *path, in seq_path_root() argument
502 size_t size = seq_get_buf(m, &buf); in seq_path_root()
520 seq_commit(m, res); in seq_path_root()
528 int seq_dentry(struct seq_file *m, struct dentry *dentry, const char *esc) in seq_dentry() argument
531 size_t size = seq_get_buf(m, &buf); in seq_dentry()
542 seq_commit(m, res); in seq_dentry()
654 void seq_putc(struct seq_file *m, char c) in seq_putc() argument
656 if (m->count >= m->size) in seq_putc()
659 m->buf[m->count++] = c; in seq_putc()
663 void seq_puts(struct seq_file *m, const char *s) in seq_puts() argument
667 if (m->count + len >= m->size) { in seq_puts()
668 seq_set_overflow(m); in seq_puts()
671 memcpy(m->buf + m->count, s, len); in seq_puts()
672 m->count += len; in seq_puts()
683 void seq_put_decimal_ull(struct seq_file *m, char delimiter, in seq_put_decimal_ull() argument
688 if (m->count + 2 >= m->size) /* we'll write 2 bytes at least */ in seq_put_decimal_ull()
692 m->buf[m->count++] = delimiter; in seq_put_decimal_ull()
695 m->buf[m->count++] = num + '0'; in seq_put_decimal_ull()
699 len = num_to_str(m->buf + m->count, m->size - m->count, num); in seq_put_decimal_ull()
702 m->count += len; in seq_put_decimal_ull()
706 seq_set_overflow(m); in seq_put_decimal_ull()
710 void seq_put_decimal_ll(struct seq_file *m, char delimiter, long long num) in seq_put_decimal_ll() argument
713 if (m->count + 3 >= m->size) { in seq_put_decimal_ll()
714 seq_set_overflow(m); in seq_put_decimal_ll()
718 m->buf[m->count++] = delimiter; in seq_put_decimal_ll()
722 seq_put_decimal_ull(m, delimiter, num); in seq_put_decimal_ll()
751 void seq_pad(struct seq_file *m, char c) in seq_pad() argument
753 int size = m->pad_until - m->count; in seq_pad()
755 seq_printf(m, "%*s", size, ""); in seq_pad()
757 seq_putc(m, c); in seq_pad()
762 void seq_hex_dump(struct seq_file *m, const char *prefix_str, int prefix_type, in seq_hex_dump() argument
775 for (i = 0; i < len && !seq_has_overflowed(m); i += rowsize) { in seq_hex_dump()
781 seq_printf(m, "%s%p: ", prefix_str, ptr + i); in seq_hex_dump()
784 seq_printf(m, "%s%.8x: ", prefix_str, i); in seq_hex_dump()
787 seq_printf(m, "%s", prefix_str); in seq_hex_dump()
791 size = seq_get_buf(m, &buffer); in seq_hex_dump()
794 seq_commit(m, ret < size ? ret : -1); in seq_hex_dump()
796 seq_putc(m, '\n'); in seq_hex_dump()