All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anna-Maria Gleixner <anna-maria@linutronix.de>
To: 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>,
	Anna-Maria Gleixner <anna-maria@linutronix.de>
Subject: [PATCH v3 13/36] hrtimer: Reduce conditional code (hres_active)
Date: Wed, 29 Nov 2017 16:30:38 +0100	[thread overview]
Message-ID: <20171129153101.27297-14-anna-maria@linutronix.de> (raw)
In-Reply-To: <20171129153101.27297-1-anna-maria@linutronix.de>

The hrtimer_cpu_base struct has the CONFIG_HIGH_RES_TIMERS conditional
struct member hres_active. All related functions to this member are
conditional as well.

There is no functional change, when the hres_active member is
unconditional with all related functions and is set to zero during
initialization.

The conditional code sections can be avoided by adding IS_ENABLED(HIGHRES)
conditionals into common functions, which ensures dead code elimination.

Suggested-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Anna-Maria Gleixner <anna-maria@linutronix.de>
---
 include/linux/hrtimer.h | 20 ++++++++------------
 kernel/time/hrtimer.c   | 31 +++++++++++++++----------------
 2 files changed, 23 insertions(+), 28 deletions(-)

diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h
index 56e56bcb6f0f..22627b3a33fe 100644
--- a/include/linux/hrtimer.h
+++ b/include/linux/hrtimer.h
@@ -161,8 +161,8 @@ enum  hrtimer_base_type {
  * @cpu:		cpu number
  * @active_bases:	Bitfield to mark bases with active timers
  * @clock_was_set_seq:	Sequence counter of clock was set events
- * @in_hrtirq:		hrtimer_interrupt() is currently executing
  * @hres_active:	State of high resolution mode
+ * @in_hrtirq:		hrtimer_interrupt() is currently executing
  * @hang_detected:	The last hrtimer interrupt detected a hang
  * @expires_next:	absolute time of the next event, is required for remote
  *			hrtimer enqueue
@@ -182,9 +182,9 @@ struct hrtimer_cpu_base {
 	unsigned int			cpu;
 	unsigned int			active_bases;
 	unsigned int			clock_was_set_seq;
+	unsigned int			hres_active	: 1;
 #ifdef CONFIG_HIGH_RES_TIMERS
 	unsigned int			in_hrtirq	: 1,
-					hres_active	: 1,
 					hang_detected	: 1;
 	ktime_t				expires_next;
 	struct hrtimer			*next_timer;
@@ -266,16 +266,17 @@ static inline ktime_t hrtimer_cb_get_time(struct hrtimer *timer)
 	return timer->base->get_time();
 }
 
+static inline int hrtimer_is_hres_active(struct hrtimer *timer)
+{
+	return IS_ENABLED(CONFIG_HIGH_RES_TIMERS) ?
+		timer->base->cpu_base->hres_active : 0;
+}
+
 #ifdef CONFIG_HIGH_RES_TIMERS
 struct clock_event_device;
 
 extern void hrtimer_interrupt(struct clock_event_device *dev);
 
-static inline int hrtimer_is_hres_active(struct hrtimer *timer)
-{
-	return timer->base->cpu_base->hres_active;
-}
-
 /*
  * The resolution of the clocks. The resolution value is returned in
  * the clock_getres() system call to give application programmers an
@@ -298,11 +299,6 @@ extern unsigned int hrtimer_resolution;
 
 #define hrtimer_resolution	(unsigned int)LOW_RES_NSEC
 
-static inline int hrtimer_is_hres_active(struct hrtimer *timer)
-{
-	return 0;
-}
-
 static inline void clock_was_set_delayed(void) { }
 
 #endif
diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
index 046b509beed6..8453dca6e0c5 100644
--- a/kernel/time/hrtimer.c
+++ b/kernel/time/hrtimer.c
@@ -512,6 +512,20 @@ static inline ktime_t hrtimer_update_base(struct hrtimer_cpu_base *base)
 					    offs_real, offs_boot, offs_tai);
 }
 
+/*
+ * Is the high resolution mode active ?
+ */
+static inline int __hrtimer_hres_active(struct hrtimer_cpu_base *cpu_base)
+{
+	return IS_ENABLED(CONFIG_HIGH_RES_TIMERS) ?
+		cpu_base->hres_active : 0;
+}
+
+static inline int hrtimer_hres_active(void)
+{
+	return __hrtimer_hres_active(this_cpu_ptr(&hrtimer_bases));
+}
+
 /* High resolution timer related functions */
 #ifdef CONFIG_HIGH_RES_TIMERS
 
@@ -541,19 +555,6 @@ static inline int hrtimer_is_hres_enabled(void)
 }
 
 /*
- * Is the high resolution mode active ?
- */
-static inline int __hrtimer_hres_active(struct hrtimer_cpu_base *cpu_base)
-{
-	return cpu_base->hres_active;
-}
-
-static inline int hrtimer_hres_active(void)
-{
-	return __hrtimer_hres_active(this_cpu_ptr(&hrtimer_bases));
-}
-
-/*
  * Reprogram the event source with checking both queues for the
  * next event
  * Called with interrupts disabled and base->lock held
@@ -661,7 +662,6 @@ static void hrtimer_reprogram(struct hrtimer *timer,
 static inline void hrtimer_init_hres(struct hrtimer_cpu_base *base)
 {
 	base->expires_next = KTIME_MAX;
-	base->hres_active = 0;
 }
 
 /*
@@ -720,8 +720,6 @@ void clock_was_set_delayed(void)
 
 #else
 
-static inline int __hrtimer_hres_active(struct hrtimer_cpu_base *b) { return 0; }
-static inline int hrtimer_hres_active(void) { return 0; }
 static inline int hrtimer_is_hres_enabled(void) { return 0; }
 static inline void hrtimer_switch_to_hres(void) { }
 static inline void
@@ -1600,6 +1598,7 @@ int hrtimers_prepare_cpu(unsigned int cpu)
 	}
 
 	cpu_base->cpu = cpu;
+	cpu_base->hres_active = 0;
 	hrtimer_init_hres(cpu_base);
 	return 0;
 }
-- 
2.11.0

  parent reply	other threads:[~2017-11-29 15:42 UTC|newest]

Thread overview: 45+ 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
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 ` Anna-Maria Gleixner [this message]
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-11-29 15:30   ` Anna-Maria Gleixner
2017-12-06 16:27   ` Takashi Iwai
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=20171129153101.27297-14-anna-maria@linutronix.de \
    --to=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 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.