Lines Matching refs:chan
36 buf->chan->cb->buf_unmapped(buf, vma->vm_file); in relay_file_mmap_close()
104 if (length != (unsigned long)buf->chan->alloc_size) in relay_mmap_buf()
110 buf->chan->cb->buf_mapped(buf, filp); in relay_mmap_buf()
162 static struct rchan_buf *relay_create_buf(struct rchan *chan) in relay_create_buf() argument
166 if (chan->n_subbufs > KMALLOC_MAX_SIZE / sizeof(size_t)) in relay_create_buf()
172 buf->padding = kmalloc_array(chan->n_subbufs, sizeof(size_t), in relay_create_buf()
177 buf->start = relay_alloc_buf(buf, &chan->alloc_size); in relay_create_buf()
181 buf->chan = chan; in relay_create_buf()
182 kref_get(&buf->chan->kref); in relay_create_buf()
199 struct rchan *chan = container_of(kref, struct rchan, kref); in relay_destroy_channel() local
200 free_percpu(chan->buf); in relay_destroy_channel()
201 kfree(chan); in relay_destroy_channel()
210 struct rchan *chan = buf->chan; in relay_destroy_buf() local
219 *per_cpu_ptr(chan->buf, buf->cpu) = NULL; in relay_destroy_buf()
222 kref_put(&chan->kref, relay_destroy_channel); in relay_destroy_buf()
259 return (ready >= buf->chan->n_subbufs) ? 1 : 0; in relay_buf_full()
371 for (i = 0; i < buf->chan->n_subbufs; i++) in __relay_reset()
374 buf->chan->cb->subbuf_start(buf, buf->data, NULL, 0); in __relay_reset()
388 void relay_reset(struct rchan *chan) in relay_reset() argument
393 if (!chan) in relay_reset()
396 if (chan->is_global && (buf = *per_cpu_ptr(chan->buf, 0))) { in relay_reset()
403 if ((buf = *per_cpu_ptr(chan->buf, i))) in relay_reset()
416 static struct dentry *relay_create_buf_file(struct rchan *chan, in relay_create_buf_file() argument
426 snprintf(tmpname, NAME_MAX, "%s%d", chan->base_filename, cpu); in relay_create_buf_file()
429 dentry = chan->cb->create_buf_file(tmpname, chan->parent, in relay_create_buf_file()
431 &chan->is_global); in relay_create_buf_file()
445 static struct rchan_buf *relay_open_buf(struct rchan *chan, unsigned int cpu) in relay_open_buf() argument
450 if (chan->is_global) in relay_open_buf()
451 return *per_cpu_ptr(chan->buf, 0); in relay_open_buf()
453 buf = relay_create_buf(chan); in relay_open_buf()
457 if (chan->has_base_filename) { in relay_open_buf()
458 dentry = relay_create_buf_file(chan, buf, cpu); in relay_open_buf()
464 dentry = chan->cb->create_buf_file(NULL, NULL, in relay_open_buf()
466 &chan->is_global); in relay_open_buf()
474 if(chan->is_global) { in relay_open_buf()
475 *per_cpu_ptr(chan->buf, 0) = buf; in relay_open_buf()
498 buf->chan->cb->remove_buf_file(buf->dentry); in relay_close_buf()
502 static void setup_callbacks(struct rchan *chan, in setup_callbacks() argument
506 chan->cb = &default_channel_callbacks; in setup_callbacks()
520 chan->cb = cb; in setup_callbacks()
525 struct rchan *chan; in relay_prepare_cpu() local
529 list_for_each_entry(chan, &relay_channels, list) { in relay_prepare_cpu()
530 if ((buf = *per_cpu_ptr(chan->buf, cpu))) in relay_prepare_cpu()
532 buf = relay_open_buf(chan, cpu); in relay_prepare_cpu()
538 *per_cpu_ptr(chan->buf, cpu) = buf; in relay_prepare_cpu()
572 struct rchan *chan; in relay_open() local
580 chan = kzalloc(sizeof(struct rchan), GFP_KERNEL); in relay_open()
581 if (!chan) in relay_open()
584 chan->buf = alloc_percpu(struct rchan_buf *); in relay_open()
585 if (!chan->buf) { in relay_open()
586 kfree(chan); in relay_open()
590 chan->version = RELAYFS_CHANNEL_VERSION; in relay_open()
591 chan->n_subbufs = n_subbufs; in relay_open()
592 chan->subbuf_size = subbuf_size; in relay_open()
593 chan->alloc_size = PAGE_ALIGN(subbuf_size * n_subbufs); in relay_open()
594 chan->parent = parent; in relay_open()
595 chan->private_data = private_data; in relay_open()
597 chan->has_base_filename = 1; in relay_open()
598 strlcpy(chan->base_filename, base_filename, NAME_MAX); in relay_open()
600 setup_callbacks(chan, cb); in relay_open()
601 kref_init(&chan->kref); in relay_open()
605 buf = relay_open_buf(chan, i); in relay_open()
608 *per_cpu_ptr(chan->buf, i) = buf; in relay_open()
610 list_add(&chan->list, &relay_channels); in relay_open()
613 return chan; in relay_open()
617 if ((buf = *per_cpu_ptr(chan->buf, i))) in relay_open()
621 kref_put(&chan->kref, relay_destroy_channel); in relay_open()
655 int relay_late_setup_files(struct rchan *chan, in relay_late_setup_files() argument
666 if (!chan || !base_filename) in relay_late_setup_files()
669 strlcpy(chan->base_filename, base_filename, NAME_MAX); in relay_late_setup_files()
673 if (unlikely(chan->has_base_filename)) { in relay_late_setup_files()
677 chan->has_base_filename = 1; in relay_late_setup_files()
678 chan->parent = parent; in relay_late_setup_files()
680 if (chan->is_global) { in relay_late_setup_files()
682 buf = *per_cpu_ptr(chan->buf, 0); in relay_late_setup_files()
684 dentry = relay_create_buf_file(chan, buf, 0); in relay_late_setup_files()
685 if (dentry && !WARN_ON_ONCE(!chan->is_global)) { in relay_late_setup_files()
701 buf = *per_cpu_ptr(chan->buf, i); in relay_late_setup_files()
708 dentry = relay_create_buf_file(chan, buf, i); in relay_late_setup_files()
752 if (unlikely(length > buf->chan->subbuf_size)) in relay_switch_subbuf()
755 if (buf->offset != buf->chan->subbuf_size + 1) { in relay_switch_subbuf()
756 buf->prev_padding = buf->chan->subbuf_size - buf->offset; in relay_switch_subbuf()
757 old_subbuf = buf->subbufs_produced % buf->chan->n_subbufs; in relay_switch_subbuf()
762 buf->chan->subbuf_size - in relay_switch_subbuf()
765 buf->early_bytes += buf->chan->subbuf_size - in relay_switch_subbuf()
780 new_subbuf = buf->subbufs_produced % buf->chan->n_subbufs; in relay_switch_subbuf()
781 new = buf->start + new_subbuf * buf->chan->subbuf_size; in relay_switch_subbuf()
783 if (!buf->chan->cb->subbuf_start(buf, new, old, buf->prev_padding)) { in relay_switch_subbuf()
784 buf->offset = buf->chan->subbuf_size + 1; in relay_switch_subbuf()
790 if (unlikely(length + buf->offset > buf->chan->subbuf_size)) in relay_switch_subbuf()
796 buf->chan->last_toobig = length; in relay_switch_subbuf()
814 void relay_subbufs_consumed(struct rchan *chan, in relay_subbufs_consumed() argument
820 if (!chan || cpu >= NR_CPUS) in relay_subbufs_consumed()
823 buf = *per_cpu_ptr(chan->buf, cpu); in relay_subbufs_consumed()
824 if (!buf || subbufs_consumed > chan->n_subbufs) in relay_subbufs_consumed()
840 void relay_close(struct rchan *chan) in relay_close() argument
845 if (!chan) in relay_close()
849 if (chan->is_global && (buf = *per_cpu_ptr(chan->buf, 0))) in relay_close()
853 if ((buf = *per_cpu_ptr(chan->buf, i))) in relay_close()
856 if (chan->last_toobig) in relay_close()
859 chan->last_toobig, chan->subbuf_size); in relay_close()
861 list_del(&chan->list); in relay_close()
862 kref_put(&chan->kref, relay_destroy_channel); in relay_close()
873 void relay_flush(struct rchan *chan) in relay_flush() argument
878 if (!chan) in relay_flush()
881 if (chan->is_global && (buf = *per_cpu_ptr(chan->buf, 0))) { in relay_flush()
888 if ((buf = *per_cpu_ptr(chan->buf, i))) in relay_flush()
970 size_t subbuf_size = buf->chan->subbuf_size; in relay_file_read_consume()
971 size_t n_subbufs = buf->chan->n_subbufs; in relay_file_read_consume()
979 relay_subbufs_consumed(buf->chan, buf->cpu, 1); in relay_file_read_consume()
987 read_subbuf = read_pos / buf->chan->subbuf_size; in relay_file_read_consume()
992 relay_subbufs_consumed(buf->chan, buf->cpu, 1); in relay_file_read_consume()
1002 size_t subbuf_size = buf->chan->subbuf_size; in relay_file_read_avail()
1003 size_t n_subbufs = buf->chan->n_subbufs; in relay_file_read_avail()
1049 size_t subbuf_size = buf->chan->subbuf_size; in relay_file_read_subbuf_avail()
1077 size_t subbuf_size = buf->chan->subbuf_size; in relay_file_read_start_pos()
1078 size_t n_subbufs = buf->chan->n_subbufs; in relay_file_read_start_pos()
1106 size_t subbuf_size = buf->chan->subbuf_size; in relay_file_read_end_pos()
1107 size_t n_subbufs = buf->chan->n_subbufs; in relay_file_read_end_pos()
1168 if (rbuf->bytes_consumed >= rbuf->chan->subbuf_size) { in relay_consume_bytes()
1169 relay_subbufs_consumed(rbuf->chan, rbuf->cpu, 1); in relay_consume_bytes()
1170 rbuf->bytes_consumed %= rbuf->chan->subbuf_size; in relay_consume_bytes()
1205 unsigned int subbuf_size = rbuf->chan->subbuf_size; in subbuf_splice_actor()
1207 uint32_t alloc_size = (uint32_t) rbuf->chan->alloc_size; in subbuf_splice_actor()
1235 subbuf_pages = rbuf->chan->alloc_size >> PAGE_SHIFT; in subbuf_splice_actor()