All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Bristot de Oliveira <bristot@kernel.org>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>,
	Jonathan Corbet <corbet@lwn.net>,
	Juri Lelli <juri.lelli@redhat.com>,
	Clark Williams <williams@redhat.com>,
	linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH V3 2/3] tracing/osnoise: Add preempt/irq disable options
Date: Wed, 30 Nov 2022 16:47:29 +0100	[thread overview]
Message-ID: <700e7f91-00a9-d625-741d-122b9b1e1e1c@kernel.org> (raw)
In-Reply-To: <20221128153919.33c008d1@gandalf.local.home>

On 11/28/22 21:39, Steven Rostedt wrote:
> On Fri, 25 Nov 2022 22:20:23 +0100
> Daniel Bristot de Oliveira <bristot@kernel.org> wrote:
> 
>> @@ -1308,6 +1315,8 @@ static void notify_new_max_latency(u64 latency)
>>   */
>>  static int run_osnoise(void)
>>  {
>> +	bool preempt_disable = test_bit(OSN_PREEMPT_DISABLE, &osnoise_options);
>> +	bool irq_disable = test_bit(OSN_IRQ_DISABLE, &osnoise_options);
> 
> 	bool irq_disable = test_bit(OSN_IRQ_DISABLE, &osnoise_options);
> 	bool preempt_disable = IS_ENABLED(CONFIG_PREEMPT) &&
> 			!irq_disable && test_bit(OSN_PREEMPT_DISABLE, &osnoise_options);

Ooops again, that is not exactly what I wanted, because...

>>  	struct osnoise_variables *osn_var = this_cpu_osn_var();
>>  	u64 start, sample, last_sample;
>>  	u64 last_int_count, int_count;
>> @@ -1335,6 +1344,14 @@ static int run_osnoise(void)
>>  	 */
>>  	threshold = tracing_thresh ? : 5000;
>>  
>> +	/*
>> +	 * IRQ disable also implies in preempt disable.
>> +	 */
>> +	if (irq_disable)
>> +		local_irq_disable();
> 
> 	if (preempt_disable)
>> +		preempt_disable();
>> +
>>  	/*
>>  	 * Make sure NMIs see sampling first
>>  	 */
>> @@ -1422,16 +1439,21 @@ static int run_osnoise(void)
>>  		 * cond_resched()
>>  		 */
>>  		if (IS_ENABLED(CONFIG_PREEMPT_RCU)) {
>> -			local_irq_disable();
>> +			if (!irq_disable)
>> +				local_irq_disable();
>> +
>>  			rcu_momentary_dyntick_idle();
>> -			local_irq_enable();
>> +
>> +			if (!irq_disable)
>> +				local_irq_enable();
>>  		}
>>  
>>  		/*
>>  		 * For the non-preemptive kernel config: let threads runs, if
>> -		 * they so wish.
>> +		 * they so wish, unless set not do to so.
>>  		 */

Then I end up cond_resched'ing here in the non-preemptive kernel.

>> -		cond_resched();
>> +		if (!irq_disable && !preempt_disable)
>> +			cond_resched();

But I also want to avoid this cond_resched if preempt_disable is set.

So, I will merge both things:

	- change the preempt_disable assignment to check !irq_disabled, like:

		/*
		 * Disabling preemption is only required if IRQs are enabled, and the options is set on.
		 */
		preempt_disable = !irq_disable && test_bit(OSN_PREEMPT_DISABLE, &osnoise_options);

	- change the preempt disabled if to
		if (IS_ENABLED(CONFIG_PREEMPT) && preempt_disabled)
			preempt_disable();

I tested with both preemption models (preemptive and not preemptive) and it works fine.

am I missing something?

-- Daniel

>>  		last_sample = sample;
>>  		last_int_count = int_count;
>> @@ -1450,6 +1472,14 @@ static int run_osnoise(void)
>>  	 */
>>  	barrier();
>>  
>> +	/*
>> +	 * Return to the preemptive state.
>> +	 */
> 
> 	if (preempt_disable)
>> +		preempt_enable();
>> +
> 
>> +	if (irq_disable)
>> +		local_irq_enable();
> 
> -- Steve
> 
>>  	/*
>>  	 * Save noise info.
>>  	 */


  parent reply	other threads:[~2022-11-30 15:47 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-25 21:20 [PATCH V3 0/3] Add osnoise/options options Daniel Bristot de Oliveira
2022-11-25 21:20 ` [PATCH V3 1/3] tracing/osnoise: Add PANIC_ON_STOP option Daniel Bristot de Oliveira
2022-11-25 21:20 ` [PATCH V3 2/3] tracing/osnoise: Add preempt/irq disable options Daniel Bristot de Oliveira
2022-11-28 20:39   ` Steven Rostedt
2022-11-29  8:27     ` Daniel Bristot de Oliveira
2022-11-30 15:47     ` Daniel Bristot de Oliveira [this message]
2022-11-30 16:10       ` Steven Rostedt
2022-11-25 21:20 ` [PATCH V3 3/3] Documentation/osnoise: Add osnoise/options documentation Daniel Bristot de Oliveira
2022-11-26 12:39   ` Bagas Sanjaya

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=700e7f91-00a9-d625-741d-122b9b1e1e1c@kernel.org \
    --to=bristot@kernel.org \
    --cc=corbet@lwn.net \
    --cc=juri.lelli@redhat.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mhiramat@kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=williams@redhat.com \
    /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.