public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Joe Perches <joe@perches.com>
To: Anna-Maria Gleixner <anna-maria@linutronix.de>,
	LKML <linux-kernel@vger.kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	keescook@chromium.org, Christoph Hellwig <hch@lst.de>,
	John Stultz <john.stultz@linaro.org>
Subject: Re: [PATCH v3 10/36] hrtimer: Switch for loop to _ffs() evaluation
Date: Wed, 29 Nov 2017 08:06:03 -0800	[thread overview]
Message-ID: <1511971563.19952.63.camel@perches.com> (raw)
In-Reply-To: <20171129153101.27297-11-anna-maria@linutronix.de>

On Wed, 2017-11-29 at 16:30 +0100, Anna-Maria Gleixner wrote:
> Looping over all clock bases to find active bits is suboptimal if not all
> bases are active.
> 
> Avoid this by converting it to a __ffs() evaluation. The functionallity is
> outsourced into an own function and is called via a macro as suggested by
> Peter Zijlstra.

style trivia: ignore at your pleasure...

> diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
[]
> @@ -448,6 +448,23 @@ static inline void debug_deactivate(struct hrtimer *timer)
>  	trace_hrtimer_cancel(timer);
>  }
>  
> +static struct hrtimer_clock_base *
> +__next_base(struct hrtimer_cpu_base *cpu_base, unsigned int *active)
> +{
> +	struct hrtimer_clock_base *base = NULL;
> +
> +	if (*active) {
> +		unsigned int idx = __ffs(*active);
> +		*active &= ~(1U << idx);
> +		base = &cpu_base->clock_base[idx];
> +	}
> +
> +	return base;
> +}

This might be nicer using an initial test and return like:

{
	unsigned int idx;

	if (!*active)
		return NULL;

	idx = __ffs(*active);
	*active &= ~(1U << idx);

	return &cpu_base->clock_base[idx];
}

  reply	other threads:[~2017-11-29 16:06 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-29 15:30 [PATCH 00/36] hrtimer: Provide softirq context hrtimers Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 01/36] timers: Use static keys for migrate_enable/nohz_active Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 02/36] hrtimer: Correct blantanly wrong comment Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 03/36] hrtimer: Fix kerneldoc for struct hrtimer_cpu_base Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 04/36] hrtimer: Cleanup clock argument in schedule_hrtimeout_range_clock() Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 05/36] hrtimer: Fix hrtimer function description Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 06/36] hrtimer: Ensure POSIX compliance (relative CLOCK_REALTIME hrtimers) Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 07/36] hrtimer: Cleanup hrtimer_mode enum Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 08/36] tracing/hrtimer: Take all clock bases and modes into account Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 09/36] tracing/hrtimer: Print hrtimer mode in hrtimer_start tracepoint Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 10/36] hrtimer: Switch for loop to _ffs() evaluation Anna-Maria Gleixner
2017-11-29 16:06   ` Joe Perches [this message]
2017-11-29 15:30 ` [PATCH v3 11/36] hrtimer: Store running timer in hrtimer_clock_base Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 12/36] hrtimer: Make room in struct hrtimer_cpu_base Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 13/36] hrtimer: Reduce conditional code (hres_active) Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 14/36] hrtimer: Use accesor functions instead of direct access Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 15/36] hrtimer: Make the remote enqueue check unconditional Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 16/36] hrtimer: Make hrtimer_cpu_base.next_timer handling unconditional Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 17/36] hrtimer: Make hrtimer_reprogramm() unconditional Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 18/36] hrtimer: Make hrtimer_force_reprogramm() unconditionally available Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 19/36] hrtimer: Unify handling of hrtimer remove Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 20/36] hrtimer: Unify handling of remote enqueue Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 21/36] hrtimer: Make remote enqueue decision less restrictive Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 22/36] hrtimer: Remove base argument from hrtimer_reprogram() Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 23/36] hrtimer: Split hrtimer_start_range_ns() Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 24/36] hrtimer: Split __hrtimer_get_next_event() Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 25/36] hrtimer: Use irqsave/irqrestore around __run_hrtimer() Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 26/36] hrtimer: Add clock bases and hrtimer mode for soft irq context Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 27/36] hrtimer: Prepare handling of hard and softirq based hrtimers Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 28/36] hrtimer: Implement support for " Anna-Maria Gleixner
2017-12-14 10:47   ` Sebastian Andrzej Siewior
2017-11-29 15:30 ` [PATCH v3 29/36] hrtimer: Implement SOFT/HARD clock base selection Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 30/36] can/bcm: Replace hrtimer_tasklet with softirq based hrtimer Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 31/36] mac80211_hwsim: Replace hrtimer tasklet with softirq hrtimer Anna-Maria Gleixner
2017-12-11 11:27   ` Johannes Berg
2017-11-29 15:30 ` [PATCH v3 32/36] xfrm: " Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 33/36] softirq: Remove tasklet_hrtimer Anna-Maria Gleixner
2017-11-29 15:30 ` [PATCH v3 34/36] ALSA/dummy: Replace tasklet with softirq hrtimer Anna-Maria Gleixner
2017-12-06 16:27   ` Takashi Iwai
2017-11-29 15:31 ` [PATCH v3 35/36] usb/gadget/NCM: " Anna-Maria Gleixner
2017-12-04 13:14   ` Felipe Balbi
2017-12-07  7:35     ` Anna-Maria Gleixner
2017-11-29 15:31 ` [PATCH v3 36/36] net/mvpp2: " Anna-Maria Gleixner

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=1511971563.19952.63.camel@perches.com \
    --to=joe@perches.com \
    --cc=anna-maria@linutronix.de \
    --cc=hch@lst.de \
    --cc=john.stultz@linaro.org \
    --cc=keescook@chromium.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox