Loading kernel/trace/ring_buffer.c +17 −2 Original line number Original line Diff line number Diff line Loading @@ -1768,6 +1768,14 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer, * must fill the old tail_page with padding. * must fill the old tail_page with padding. */ */ if (tail >= BUF_PAGE_SIZE) { if (tail >= BUF_PAGE_SIZE) { /* * If the page was filled, then we still need * to update the real_end. Reset it to zero * and the reader will ignore it. */ if (tail == BUF_PAGE_SIZE) tail_page->real_end = 0; local_sub(length, &tail_page->write); local_sub(length, &tail_page->write); return; return; } } Loading Loading @@ -3894,12 +3902,12 @@ int ring_buffer_read_page(struct ring_buffer *buffer, ret = read; ret = read; cpu_buffer->lost_events = 0; cpu_buffer->lost_events = 0; commit = local_read(&bpage->commit); /* /* * Set a flag in the commit field if we lost events * Set a flag in the commit field if we lost events */ */ if (missed_events) { if (missed_events) { commit = local_read(&bpage->commit); /* If there is room at the end of the page to save the /* If there is room at the end of the page to save the * missed events, then record it there. * missed events, then record it there. */ */ Loading @@ -3907,10 +3915,17 @@ int ring_buffer_read_page(struct ring_buffer *buffer, memcpy(&bpage->data[commit], &missed_events, memcpy(&bpage->data[commit], &missed_events, sizeof(missed_events)); sizeof(missed_events)); local_add(RB_MISSED_STORED, &bpage->commit); local_add(RB_MISSED_STORED, &bpage->commit); commit += sizeof(missed_events); } } local_add(RB_MISSED_EVENTS, &bpage->commit); local_add(RB_MISSED_EVENTS, &bpage->commit); } } /* * This page may be off to user land. Zero it out here. */ if (commit < BUF_PAGE_SIZE) memset(&bpage->data[commit], 0, BUF_PAGE_SIZE - commit); out_unlock: out_unlock: spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags); spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags); Loading kernel/trace/trace.c +0 −6 Original line number Original line Diff line number Diff line Loading @@ -3661,7 +3661,6 @@ tracing_buffers_read(struct file *filp, char __user *ubuf, size_t count, loff_t *ppos) size_t count, loff_t *ppos) { { struct ftrace_buffer_info *info = filp->private_data; struct ftrace_buffer_info *info = filp->private_data; unsigned int pos; ssize_t ret; ssize_t ret; size_t size; size_t size; Loading @@ -3688,11 +3687,6 @@ tracing_buffers_read(struct file *filp, char __user *ubuf, if (ret < 0) if (ret < 0) return 0; return 0; pos = ring_buffer_page_len(info->spare); if (pos < PAGE_SIZE) memset(info->spare + pos, 0, PAGE_SIZE - pos); read: read: size = PAGE_SIZE - info->read; size = PAGE_SIZE - info->read; if (size > count) if (size > count) Loading Loading
kernel/trace/ring_buffer.c +17 −2 Original line number Original line Diff line number Diff line Loading @@ -1768,6 +1768,14 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer, * must fill the old tail_page with padding. * must fill the old tail_page with padding. */ */ if (tail >= BUF_PAGE_SIZE) { if (tail >= BUF_PAGE_SIZE) { /* * If the page was filled, then we still need * to update the real_end. Reset it to zero * and the reader will ignore it. */ if (tail == BUF_PAGE_SIZE) tail_page->real_end = 0; local_sub(length, &tail_page->write); local_sub(length, &tail_page->write); return; return; } } Loading Loading @@ -3894,12 +3902,12 @@ int ring_buffer_read_page(struct ring_buffer *buffer, ret = read; ret = read; cpu_buffer->lost_events = 0; cpu_buffer->lost_events = 0; commit = local_read(&bpage->commit); /* /* * Set a flag in the commit field if we lost events * Set a flag in the commit field if we lost events */ */ if (missed_events) { if (missed_events) { commit = local_read(&bpage->commit); /* If there is room at the end of the page to save the /* If there is room at the end of the page to save the * missed events, then record it there. * missed events, then record it there. */ */ Loading @@ -3907,10 +3915,17 @@ int ring_buffer_read_page(struct ring_buffer *buffer, memcpy(&bpage->data[commit], &missed_events, memcpy(&bpage->data[commit], &missed_events, sizeof(missed_events)); sizeof(missed_events)); local_add(RB_MISSED_STORED, &bpage->commit); local_add(RB_MISSED_STORED, &bpage->commit); commit += sizeof(missed_events); } } local_add(RB_MISSED_EVENTS, &bpage->commit); local_add(RB_MISSED_EVENTS, &bpage->commit); } } /* * This page may be off to user land. Zero it out here. */ if (commit < BUF_PAGE_SIZE) memset(&bpage->data[commit], 0, BUF_PAGE_SIZE - commit); out_unlock: out_unlock: spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags); spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags); Loading
kernel/trace/trace.c +0 −6 Original line number Original line Diff line number Diff line Loading @@ -3661,7 +3661,6 @@ tracing_buffers_read(struct file *filp, char __user *ubuf, size_t count, loff_t *ppos) size_t count, loff_t *ppos) { { struct ftrace_buffer_info *info = filp->private_data; struct ftrace_buffer_info *info = filp->private_data; unsigned int pos; ssize_t ret; ssize_t ret; size_t size; size_t size; Loading @@ -3688,11 +3687,6 @@ tracing_buffers_read(struct file *filp, char __user *ubuf, if (ret < 0) if (ret < 0) return 0; return 0; pos = ring_buffer_page_len(info->spare); if (pos < PAGE_SIZE) memset(info->spare + pos, 0, PAGE_SIZE - pos); read: read: size = PAGE_SIZE - info->read; size = PAGE_SIZE - info->read; if (size > count) if (size > count) Loading