All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild@lists.01.org
Subject: Re: [RFC][PATCH] ring-buffer: Have nested events still record running time stamp
Date: Fri, 26 Jun 2020 11:44:47 +0300	[thread overview]
Message-ID: <20200626084447.GH2549@kadam> (raw)
In-Reply-To: <20200625094454.732790f7@oasis.local.home>

[-- Attachment #1: Type: text/plain, Size: 14932 bytes --]

Hi Steven,

[FYI, it's a private test report for your RFC patch.]
[auto build test WARNING on tip/perf/core]
[also build test WARNING on linux/master linus/master v5.8-rc2 next-20200625]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use  as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Steven-Rostedt/ring-buffer-Have-nested-events-still-record-running-time-stamp/20200625-214744
base:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git bb42b3d39781d7fcd3be7f9f9bf11b6661b5fdf1
config: x86_64-randconfig-m001-20200624 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-13) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
kernel/trace/ring_buffer.c:3046 __rb_reserve_next() error: uninitialized symbol 'delta'.

# https://github.com/0day-ci/linux/commit/9a8ccc67a4f2747143e5fadf7404172d9608cdb8
git remote add linux-review https://github.com/0day-ci/linux
git remote update linux-review
git checkout 9a8ccc67a4f2747143e5fadf7404172d9608cdb8
vim +/delta +3046 kernel/trace/ring_buffer.c

6634ff26cce2da0 Steven Rostedt           2009-05-06  2903  static struct ring_buffer_event *
6634ff26cce2da0 Steven Rostedt           2009-05-06  2904  __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer,
fcc742eaad7cbcb Steven Rostedt (Red Hat  2015-05-28  2905) 		  struct rb_event_info *info)
6634ff26cce2da0 Steven Rostedt           2009-05-06  2906  {
6634ff26cce2da0 Steven Rostedt           2009-05-06  2907  	struct ring_buffer_event *event;
fcc742eaad7cbcb Steven Rostedt (Red Hat  2015-05-28  2908) 	struct buffer_page *tail_page;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2909) 	unsigned long tail, write, w, next;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2910) 	u64 delta, before, after;
                                                                    ^^^^^

b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  2911) 
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2912) 	/* Don't let the compiler play games with cpu_buffer->tail_page */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2913) 	tail_page = info->tail_page = READ_ONCE(cpu_buffer->tail_page);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2914) 
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2915)  /*A*/	w = local_read(&tail_page->write) & RB_WRITE_MASK;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2916) 	barrier();
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2917) 	before = READ_ONCE(cpu_buffer->before_stamp);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2918) 	after = local64_read(&cpu_buffer->write_stamp);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2919) 	/*
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2920) 	 * If preempting an event time update, we may need absolute timestamp.
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2921) 	 * Don't bother if this is the start of a new page (w == 0).
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2922) 	 */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2923) 	if (unlikely(before != after && w))
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2924) 		info->add_timestamp = RB_ADD_STAMP_FORCE;
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  2925) 	/*
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  2926) 	 * If the time delta since the last event is too big to
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  2927) 	 * hold in the time field of the event, then we append a
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  2928) 	 * TIME EXTEND event ahead of the data event.
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  2929) 	 */
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  2930) 	if (unlikely(info->add_timestamp))
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  2931) 		info->length += RB_LEN_TIME_EXTEND;
69d1b839f7eee34 Steven Rostedt           2010-10-07  2932  
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2933) 	next = READ_ONCE(cpu_buffer->next_write);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2934) 	WRITE_ONCE(cpu_buffer->next_write, w + info->length);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2935) 
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2936) 	info->ts = rb_time_stamp(cpu_buffer->buffer);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2937)  /*B*/	WRITE_ONCE(cpu_buffer->before_stamp, info->ts);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2938) 
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2939)  /*C*/	write = local_add_return(info->length, &tail_page->write);
77ae365eca89506 Steven Rostedt           2009-03-27  2940  
77ae365eca89506 Steven Rostedt           2009-03-27  2941  	/* set write to only the index of the write */
77ae365eca89506 Steven Rostedt           2009-03-27  2942  	write &= RB_WRITE_MASK;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2943) 
fcc742eaad7cbcb Steven Rostedt (Red Hat  2015-05-28  2944) 	tail = write - info->length;
6634ff26cce2da0 Steven Rostedt           2009-05-06  2945  
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2946) 	/* See if we shot pass the end of this buffer page */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2947) 	if (unlikely(write > BUF_PAGE_SIZE)) {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2948) 		if (tail != w) {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2949) 			/* before and after may now different, fix it up*/
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2950) 			before = READ_ONCE(cpu_buffer->before_stamp);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2951) 			after = local64_read(&cpu_buffer->write_stamp);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2952) 			if (before != after)
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2953) 				(void)cmpxchg(&cpu_buffer->before_stamp, before, after);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2954) 		}
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2955) 		return rb_move_tail(cpu_buffer, tail, info);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2956) 	}
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2957) 
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2958) 	if (likely(tail == w)) {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2959) 		u64 save_before;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2960) 
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2961) 		/* Nothing preempted us between A and C */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2962)  /*D*/		local64_set(&cpu_buffer->write_stamp, info->ts);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2963) 		barrier();
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2964)  /*E*/		save_before = READ_ONCE(cpu_buffer->before_stamp);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2965) 		if (likely(info->add_timestamp != RB_ADD_STAMP_FORCE)) {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2966) 			/* This did not preempt any time update */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2967) 			info->delta = info->ts - after;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2968) 		} else {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2969) 			/* SLOW PATH */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2970) 			if (w == next) {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2971) 				/* before is the time stamp of the last event */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2972) 				info->delta = info->ts - before;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2973) 				info->add_timestamp = RB_ADD_STAMP_NORMAL;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2974) 			} else {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2975) 				/* Last event time stamp is lost, inject absolute. */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2976) 				info->delta = info->ts;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2977) 			}
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2978) 		}
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2979) 		barrier();
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2980) 		if (unlikely(info->ts != save_before)) {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2981) 			/* SLOW PATH - Preempted between C and E */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2982) 
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2983) 			after = local64_read(&cpu_buffer->write_stamp);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2984) 			/* Write stamp must only go forward */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2985) 			if (save_before > after) {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2986) 				/*
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2987) 				 * We do not care about the result, only that
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2988) 				 * it gets updated atomically.
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2989) 				 */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2990) 				(void)local64_cmpxchg(&cpu_buffer->write_stamp, after, save_before);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2991) 			}
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2992) 		}
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2993) 	} else {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2994) 		u64 ts;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2995) 		/* SLOW PATH - Preempted between A and C */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2996) 		after = local64_read(&cpu_buffer->write_stamp);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2997) 		ts = rb_time_stamp(cpu_buffer->buffer);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2998) 		barrier();
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2999)  /*E*/		if (write == (local_read(&tail_page->write) & RB_WRITE_MASK) &&
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3000) 		    after < ts) {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3001) 			/* Nothing came after this event between C and E */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3002) 			info->delta = ts - after;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3003) 			(void)local64_cmpxchg(&cpu_buffer->write_stamp, after, info->ts);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3004) 			info->ts = ts;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3005) 		} else {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3006) 			/*
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3007) 			 * Preempted beween C and E:
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3008) 			 * Lost the previous events time stamp. Just set the
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3009) 			 * delta to zero, and this will be the same time as
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3010) 			 * the veent this event preempted. And the events that
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3011) 			 * came after this will still be correct (as they would
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3012) 			 * have built their delta on the previous event.
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3013) 			 */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3014) 			info->delta = 0;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3015) 		}
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3016) 		if (info->add_timestamp == RB_ADD_STAMP_FORCE)
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3017) 			info->add_timestamp = RB_ADD_STAMP_NORMAL;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3018) 	}
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3019) 
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3020) 	/*
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3021) 	 * If this is the first commit on the page, then it has the same
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3022) 	 * timestamp as the page itself.
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3023) 	 */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3024) 	if (unlikely(!tail && info->add_timestamp != RB_ADD_STAMP_FORCE &&
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3025) 		     !ring_buffer_time_stamp_abs(cpu_buffer->buffer)))
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3026) 		info->delta = 0;
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3027) 
6634ff26cce2da0 Steven Rostedt           2009-05-06  3028  	/* We reserved something on the buffer */
6634ff26cce2da0 Steven Rostedt           2009-05-06  3029  
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3030) 	event = __rb_page_index(tail_page, tail);
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3031) 	rb_update_event(cpu_buffer, event, info);
a4543a2fa9ef31d Steven Rostedt (Red Hat  2015-05-29  3032) 
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3033) 	local_inc(&tail_page->entries);
6634ff26cce2da0 Steven Rostedt           2009-05-06  3034  
6634ff26cce2da0 Steven Rostedt           2009-05-06  3035  	/*
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3036) 	 * If this is the first commit on the page, then update
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3037) 	 * its timestamp.
6634ff26cce2da0 Steven Rostedt           2009-05-06  3038  	 */
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3039) 	if (!tail)
fcc742eaad7cbcb Steven Rostedt (Red Hat  2015-05-28  3040) 		tail_page->page->time_stamp = info->ts;
6634ff26cce2da0 Steven Rostedt           2009-05-06  3041  
c64e148a3be3cb7 Vaibhav Nagarnaik        2011-08-16  3042  	/* account for these added bytes */
fcc742eaad7cbcb Steven Rostedt (Red Hat  2015-05-28  3043) 	local_add(info->length, &cpu_buffer->entries_bytes);
c64e148a3be3cb7 Vaibhav Nagarnaik        2011-08-16  3044  
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3045) 	/* This will be used to update write stamp */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25 @3046) 	info->delta = delta;
                                                                              ^^^^^
"delta" is never initialized.

9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3047) 
6634ff26cce2da0 Steven Rostedt           2009-05-06  3048  	return event;
6634ff26cce2da0 Steven Rostedt           2009-05-06  3049  }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 33424 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild-all@lists.01.org
Subject: Re: [RFC][PATCH] ring-buffer: Have nested events still record running time stamp
Date: Fri, 26 Jun 2020 11:44:47 +0300	[thread overview]
Message-ID: <20200626084447.GH2549@kadam> (raw)
In-Reply-To: <20200625094454.732790f7@oasis.local.home>

[-- Attachment #1: Type: text/plain, Size: 14932 bytes --]

Hi Steven,

[FYI, it's a private test report for your RFC patch.]
[auto build test WARNING on tip/perf/core]
[also build test WARNING on linux/master linus/master v5.8-rc2 next-20200625]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use  as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Steven-Rostedt/ring-buffer-Have-nested-events-still-record-running-time-stamp/20200625-214744
base:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git bb42b3d39781d7fcd3be7f9f9bf11b6661b5fdf1
config: x86_64-randconfig-m001-20200624 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-13) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
kernel/trace/ring_buffer.c:3046 __rb_reserve_next() error: uninitialized symbol 'delta'.

# https://github.com/0day-ci/linux/commit/9a8ccc67a4f2747143e5fadf7404172d9608cdb8
git remote add linux-review https://github.com/0day-ci/linux
git remote update linux-review
git checkout 9a8ccc67a4f2747143e5fadf7404172d9608cdb8
vim +/delta +3046 kernel/trace/ring_buffer.c

6634ff26cce2da0 Steven Rostedt           2009-05-06  2903  static struct ring_buffer_event *
6634ff26cce2da0 Steven Rostedt           2009-05-06  2904  __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer,
fcc742eaad7cbcb Steven Rostedt (Red Hat  2015-05-28  2905) 		  struct rb_event_info *info)
6634ff26cce2da0 Steven Rostedt           2009-05-06  2906  {
6634ff26cce2da0 Steven Rostedt           2009-05-06  2907  	struct ring_buffer_event *event;
fcc742eaad7cbcb Steven Rostedt (Red Hat  2015-05-28  2908) 	struct buffer_page *tail_page;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2909) 	unsigned long tail, write, w, next;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2910) 	u64 delta, before, after;
                                                                    ^^^^^

b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  2911) 
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2912) 	/* Don't let the compiler play games with cpu_buffer->tail_page */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2913) 	tail_page = info->tail_page = READ_ONCE(cpu_buffer->tail_page);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2914) 
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2915)  /*A*/	w = local_read(&tail_page->write) & RB_WRITE_MASK;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2916) 	barrier();
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2917) 	before = READ_ONCE(cpu_buffer->before_stamp);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2918) 	after = local64_read(&cpu_buffer->write_stamp);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2919) 	/*
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2920) 	 * If preempting an event time update, we may need absolute timestamp.
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2921) 	 * Don't bother if this is the start of a new page (w == 0).
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2922) 	 */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2923) 	if (unlikely(before != after && w))
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2924) 		info->add_timestamp = RB_ADD_STAMP_FORCE;
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  2925) 	/*
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  2926) 	 * If the time delta since the last event is too big to
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  2927) 	 * hold in the time field of the event, then we append a
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  2928) 	 * TIME EXTEND event ahead of the data event.
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  2929) 	 */
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  2930) 	if (unlikely(info->add_timestamp))
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  2931) 		info->length += RB_LEN_TIME_EXTEND;
69d1b839f7eee34 Steven Rostedt           2010-10-07  2932  
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2933) 	next = READ_ONCE(cpu_buffer->next_write);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2934) 	WRITE_ONCE(cpu_buffer->next_write, w + info->length);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2935) 
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2936) 	info->ts = rb_time_stamp(cpu_buffer->buffer);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2937)  /*B*/	WRITE_ONCE(cpu_buffer->before_stamp, info->ts);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2938) 
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2939)  /*C*/	write = local_add_return(info->length, &tail_page->write);
77ae365eca89506 Steven Rostedt           2009-03-27  2940  
77ae365eca89506 Steven Rostedt           2009-03-27  2941  	/* set write to only the index of the write */
77ae365eca89506 Steven Rostedt           2009-03-27  2942  	write &= RB_WRITE_MASK;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2943) 
fcc742eaad7cbcb Steven Rostedt (Red Hat  2015-05-28  2944) 	tail = write - info->length;
6634ff26cce2da0 Steven Rostedt           2009-05-06  2945  
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2946) 	/* See if we shot pass the end of this buffer page */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2947) 	if (unlikely(write > BUF_PAGE_SIZE)) {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2948) 		if (tail != w) {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2949) 			/* before and after may now different, fix it up*/
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2950) 			before = READ_ONCE(cpu_buffer->before_stamp);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2951) 			after = local64_read(&cpu_buffer->write_stamp);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2952) 			if (before != after)
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2953) 				(void)cmpxchg(&cpu_buffer->before_stamp, before, after);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2954) 		}
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2955) 		return rb_move_tail(cpu_buffer, tail, info);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2956) 	}
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2957) 
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2958) 	if (likely(tail == w)) {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2959) 		u64 save_before;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2960) 
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2961) 		/* Nothing preempted us between A and C */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2962)  /*D*/		local64_set(&cpu_buffer->write_stamp, info->ts);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2963) 		barrier();
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2964)  /*E*/		save_before = READ_ONCE(cpu_buffer->before_stamp);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2965) 		if (likely(info->add_timestamp != RB_ADD_STAMP_FORCE)) {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2966) 			/* This did not preempt any time update */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2967) 			info->delta = info->ts - after;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2968) 		} else {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2969) 			/* SLOW PATH */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2970) 			if (w == next) {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2971) 				/* before is the time stamp of the last event */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2972) 				info->delta = info->ts - before;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2973) 				info->add_timestamp = RB_ADD_STAMP_NORMAL;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2974) 			} else {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2975) 				/* Last event time stamp is lost, inject absolute. */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2976) 				info->delta = info->ts;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2977) 			}
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2978) 		}
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2979) 		barrier();
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2980) 		if (unlikely(info->ts != save_before)) {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2981) 			/* SLOW PATH - Preempted between C and E */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2982) 
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2983) 			after = local64_read(&cpu_buffer->write_stamp);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2984) 			/* Write stamp must only go forward */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2985) 			if (save_before > after) {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2986) 				/*
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2987) 				 * We do not care about the result, only that
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2988) 				 * it gets updated atomically.
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2989) 				 */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2990) 				(void)local64_cmpxchg(&cpu_buffer->write_stamp, after, save_before);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2991) 			}
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2992) 		}
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2993) 	} else {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2994) 		u64 ts;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2995) 		/* SLOW PATH - Preempted between A and C */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2996) 		after = local64_read(&cpu_buffer->write_stamp);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2997) 		ts = rb_time_stamp(cpu_buffer->buffer);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2998) 		barrier();
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  2999)  /*E*/		if (write == (local_read(&tail_page->write) & RB_WRITE_MASK) &&
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3000) 		    after < ts) {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3001) 			/* Nothing came after this event between C and E */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3002) 			info->delta = ts - after;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3003) 			(void)local64_cmpxchg(&cpu_buffer->write_stamp, after, info->ts);
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3004) 			info->ts = ts;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3005) 		} else {
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3006) 			/*
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3007) 			 * Preempted beween C and E:
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3008) 			 * Lost the previous events time stamp. Just set the
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3009) 			 * delta to zero, and this will be the same time as
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3010) 			 * the veent this event preempted. And the events that
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3011) 			 * came after this will still be correct (as they would
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3012) 			 * have built their delta on the previous event.
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3013) 			 */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3014) 			info->delta = 0;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3015) 		}
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3016) 		if (info->add_timestamp == RB_ADD_STAMP_FORCE)
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3017) 			info->add_timestamp = RB_ADD_STAMP_NORMAL;
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3018) 	}
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3019) 
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3020) 	/*
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3021) 	 * If this is the first commit on the page, then it has the same
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3022) 	 * timestamp as the page itself.
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3023) 	 */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3024) 	if (unlikely(!tail && info->add_timestamp != RB_ADD_STAMP_FORCE &&
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3025) 		     !ring_buffer_time_stamp_abs(cpu_buffer->buffer)))
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3026) 		info->delta = 0;
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3027) 
6634ff26cce2da0 Steven Rostedt           2009-05-06  3028  	/* We reserved something on the buffer */
6634ff26cce2da0 Steven Rostedt           2009-05-06  3029  
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3030) 	event = __rb_page_index(tail_page, tail);
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3031) 	rb_update_event(cpu_buffer, event, info);
a4543a2fa9ef31d Steven Rostedt (Red Hat  2015-05-29  3032) 
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3033) 	local_inc(&tail_page->entries);
6634ff26cce2da0 Steven Rostedt           2009-05-06  3034  
6634ff26cce2da0 Steven Rostedt           2009-05-06  3035  	/*
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3036) 	 * If this is the first commit on the page, then update
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3037) 	 * its timestamp.
6634ff26cce2da0 Steven Rostedt           2009-05-06  3038  	 */
b7dc42fd79390c0 Steven Rostedt (Red Hat  2015-09-03  3039) 	if (!tail)
fcc742eaad7cbcb Steven Rostedt (Red Hat  2015-05-28  3040) 		tail_page->page->time_stamp = info->ts;
6634ff26cce2da0 Steven Rostedt           2009-05-06  3041  
c64e148a3be3cb7 Vaibhav Nagarnaik        2011-08-16  3042  	/* account for these added bytes */
fcc742eaad7cbcb Steven Rostedt (Red Hat  2015-05-28  3043) 	local_add(info->length, &cpu_buffer->entries_bytes);
c64e148a3be3cb7 Vaibhav Nagarnaik        2011-08-16  3044  
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3045) 	/* This will be used to update write stamp */
9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25 @3046) 	info->delta = delta;
                                                                              ^^^^^
"delta" is never initialized.

9a8ccc67a4f2747 Steven Rostedt (VMware   2020-06-25  3047) 
6634ff26cce2da0 Steven Rostedt           2009-05-06  3048  	return event;
6634ff26cce2da0 Steven Rostedt           2009-05-06  3049  }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 33424 bytes --]

  parent reply	other threads:[~2020-06-26  8:44 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-25 13:44 [RFC][PATCH] ring-buffer: Have nested events still record running time stamp Steven Rostedt
2020-06-25 13:53 ` Mathieu Desnoyers
2020-06-25 14:37   ` Steven Rostedt
2020-06-25 16:42     ` Korben Rusek
2020-06-25 18:12       ` Steven Rostedt
2020-06-25 17:55 ` Mathieu Desnoyers
2020-06-25 18:35   ` Steven Rostedt
2020-06-25 19:35     ` Mathieu Desnoyers
2020-06-25 19:58       ` Steven Rostedt
2020-06-26  2:36       ` Steven Rostedt
2020-06-26  3:35         ` Steven Rostedt
2020-06-26 13:58           ` Steven Rostedt
2020-06-26 18:13             ` Mathieu Desnoyers
2020-06-26 18:58               ` Steven Rostedt
2020-06-26 19:39                 ` Steven Rostedt
2020-06-30  0:21       ` Steven Rostedt
2020-06-30  3:13         ` Mathieu Desnoyers
2020-06-30  3:26           ` Steven Rostedt
2020-06-25 19:04   ` Steven Rostedt
2020-06-25 19:58     ` Mathieu Desnoyers
2020-06-25 20:42       ` Steven Rostedt
2020-06-25 19:09   ` Steven Rostedt
2020-06-25 20:03     ` Mathieu Desnoyers
2020-06-25 18:02 ` kernel test robot
2020-06-25 18:09 ` Steven Rostedt
2020-06-25 18:56 ` kernel test robot
2020-06-26  8:44 ` Dan Carpenter [this message]
2020-06-26  8:44   ` Dan Carpenter
2020-06-28  8:59 ` kernel test robot
  -- strict thread matches above, loose matches on Subject: below --
2020-06-25 17:10 kernel test robot
2020-06-25 20:43 kernel test robot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200626084447.GH2549@kadam \
    --to=dan.carpenter@oracle.com \
    --cc=kbuild@lists.01.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.