Re: [PATCH] Update trace extension for per-cpu buffer size

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




----- Original Message -----
> On 06/18/2012 11:15 PM, Dave Anderson wrote:
> > 
> > ----- Original Message -----
> >> Since Linux v3.4 (specifically, commit 438ced1720b584000 "ring-buffer:
> >> Add per_cpu ring buffer control files"), the trace buffer size is now
> >> per-cpu.  The patch below updates the trace extension to handle this.
> >>
> >> Rabin
> 
> 
> It looks very good to me, but for future possible convenience, it would
> be better if the buffers[i].nr_pages is also set when !per_cpu_buffer_sizes.
> 
> ACK-ed.
> 
> Thanks,
> Lai

OK thanks -- I have updated Rabin's patch with your additional suggestion.
The updated patch for crash-6.0.8 is attached.

Thanks,
  Dave
 
> 
> >> @@ -362,6 +374,10 @@ static int ftrace_init_buffers(struct
> >> ring_buffer_per_cpu *buffers,
> >>  		buffer_read_value(reader_page);
> >>  		buffer_read_value(overrun);
> >>  		buffer_read_value(entries);
> >> +		if (per_cpu_buffer_sizes) {
> >> +			buffer_read_value(nr_pages);
> >> +			pages = buffers[i].nr_pages;
> >> +		}
> 
> 		else {
> 			buffers[i].nr_pages = pages;
> 		}
> 
> 
> 
> >>  #undef buffer_read_value
> >>  
> >>  		if (ftrace_init_pages(buffers + i, pages) < 0)
> 
> 
> 
> >> --
> >> 1.7.9.5
> >>
--- trace.c	11 May 2012 15:10:19 -0000	1.5
+++ trace.c	19 Jun 2012 13:01:42 -0000
@@ -24,6 +24,7 @@
  * lockless ring_buffer and old non-lockless ring_buffer are both supported.
  */
 static int lockless_ring_buffer;
+static int per_cpu_buffer_sizes;
 
 #define koffset(struct, member) struct##_##member##_offset
 
@@ -37,6 +38,7 @@
 
 static int koffset(ring_buffer_per_cpu, cpu);
 static int koffset(ring_buffer_per_cpu, pages);
+static int koffset(ring_buffer_per_cpu, nr_pages);
 static int koffset(ring_buffer_per_cpu, head_page);
 static int koffset(ring_buffer_per_cpu, tail_page);
 static int koffset(ring_buffer_per_cpu, commit_page);
@@ -71,6 +73,7 @@
 	ulong real_head_page;
 
 	int head_page_index;
+	unsigned int nr_pages;
 	ulong *pages;
 
 	ulong *linear_pages;
@@ -144,7 +147,14 @@
 	init_offset(trace_array, buffer);
 	init_offset(tracer, name);
 
-	init_offset(ring_buffer, pages);
+	if (MEMBER_EXISTS("ring_buffer_per_cpu", "nr_pages")) {
+		per_cpu_buffer_sizes = 1;
+		if (verbose)
+			fprintf(fp, "per cpu buffer sizes\n");
+	}
+
+	if (!per_cpu_buffer_sizes)
+		init_offset(ring_buffer, pages);
 	init_offset(ring_buffer, flags);
 	init_offset(ring_buffer, cpus);
 	init_offset(ring_buffer, buffers);
@@ -155,6 +165,8 @@
 			fprintf(fp, "lockless\n");
 	}
 
+	if (per_cpu_buffer_sizes)
+		init_offset(ring_buffer_per_cpu, nr_pages);
 	init_offset(ring_buffer_per_cpu, cpu);
 	init_offset(ring_buffer_per_cpu, pages);
 	init_offset(ring_buffer_per_cpu, head_page);
@@ -362,6 +374,12 @@
 		buffer_read_value(reader_page);
 		buffer_read_value(overrun);
 		buffer_read_value(entries);
+		if (per_cpu_buffer_sizes) {
+			buffer_read_value(nr_pages);
+			pages = buffers[i].nr_pages;
+		} else
+			buffers[i].nr_pages = pages;
+
 #undef buffer_read_value
 
 		if (ftrace_init_pages(buffers + i, pages) < 0)
--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/crash-utility

[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux