All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: linux-kernel@vger.kernel.org, mingo@kernel.org, rjw@rjwysocki.net
Cc: tglx@linutronix.de, peterz@infradead.org,
	Preeti U Murthy <preeti@linux.vnet.ibm.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Subject: [PATCH 33/35] tick: Make hrtimer broadcasting opt-in
Date: Mon, 16 Feb 2015 13:15:08 +0100	[thread overview]
Message-ID: <20150216122413.937924719@infradead.org> (raw)
In-Reply-To: 20150216121435.203983131@infradead.org

[-- Attachment #1: tick-make-hrtimer-broadcastin-opt-in.patch --]
[-- Type: text/plain, Size: 9491 bytes --]

From: Thomas Gleixner <tglx@linutronix.de>

We keep adding unconditional stuff to the core code which just bloats
the text and data size for no value. hrtimer based broadcasting is
currently only used on arm64 and powerpc. Make it conditional.

While at it move these tick related interfaces out of the clockchips
header file.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Preeti U Murthy <preeti@linux.vnet.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
---
 arch/arm/kernel/smp.c        |    2 +-
 arch/arm64/Kconfig           |    1 +
 arch/arm64/kernel/smp.c      |    1 +
 arch/arm64/kernel/time.c     |    2 +-
 arch/mips/kernel/smp.c       |    1 +
 arch/powerpc/Kconfig         |    1 +
 arch/powerpc/kernel/smp.c    |    1 +
 arch/powerpc/kernel/time.c   |    2 +-
 include/linux/clockchips.h   |   26 +-------------------------
 include/linux/tick.h         |   25 +++++++++++++++++++++++--
 kernel/time/Kconfig          |    4 ++++
 kernel/time/Makefile         |    6 ++----
 kernel/time/tick-broadcast.c |    4 +++-
 13 files changed, 41 insertions(+), 35 deletions(-)

Index: linux/arch/arm/kernel/smp.c
===================================================================
--- linux.orig/arch/arm/kernel/smp.c
+++ linux/arch/arm/kernel/smp.c
@@ -22,7 +22,7 @@
 #include <linux/seq_file.h>
 #include <linux/irq.h>
 #include <linux/percpu.h>
-#include <linux/clockchips.h>
+#include <linux/tick.h>
 #include <linux/completion.h>
 #include <linux/cpufreq.h>
 #include <linux/irq_work.h>
Index: linux/arch/arm64/Kconfig
===================================================================
--- linux.orig/arch/arm64/Kconfig
+++ linux/arch/arm64/Kconfig
@@ -25,6 +25,7 @@ config ARM64
 	select GENERIC_ALLOCATOR
 	select GENERIC_CLOCKEVENTS
 	select GENERIC_CLOCKEVENTS_BROADCAST if SMP
+	select GENERIC_CLOCKEVENTS_HRTIMER_BROADCAST if SMP
 	select GENERIC_CPU_AUTOPROBE
 	select GENERIC_EARLY_IOREMAP
 	select GENERIC_IRQ_PROBE
Index: linux/arch/arm64/kernel/smp.c
===================================================================
--- linux.orig/arch/arm64/kernel/smp.c
+++ linux/arch/arm64/kernel/smp.c
@@ -36,6 +36,7 @@
 #include <linux/completion.h>
 #include <linux/of.h>
 #include <linux/irq_work.h>
+#include <linux/tick.h>
 
 #include <asm/alternative.h>
 #include <asm/atomic.h>
Index: linux/arch/arm64/kernel/time.c
===================================================================
--- linux.orig/arch/arm64/kernel/time.c
+++ linux/arch/arm64/kernel/time.c
@@ -18,11 +18,11 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <linux/clockchips.h>
 #include <linux/export.h>
 #include <linux/kernel.h>
 #include <linux/interrupt.h>
 #include <linux/time.h>
+#include <linux/tick.h>
 #include <linux/init.h>
 #include <linux/sched.h>
 #include <linux/smp.h>
Index: linux/arch/mips/kernel/smp.c
===================================================================
--- linux.orig/arch/mips/kernel/smp.c
+++ linux/arch/mips/kernel/smp.c
@@ -33,6 +33,7 @@
 #include <linux/cpu.h>
 #include <linux/err.h>
 #include <linux/ftrace.h>
+#include <linux/tick.h>
 
 #include <linux/atomic.h>
 #include <asm/cpu.h>
Index: linux/arch/powerpc/Kconfig
===================================================================
--- linux.orig/arch/powerpc/Kconfig
+++ linux/arch/powerpc/Kconfig
@@ -135,6 +135,7 @@ config PPC
 	select GENERIC_TIME_VSYSCALL_OLD
 	select GENERIC_CLOCKEVENTS
 	select GENERIC_CLOCKEVENTS_BROADCAST if SMP
+	select GENERIC_CLOCKEVENTS_HRTIMER_BROADCAST if SMP
 	select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
 	select GENERIC_STRNCPY_FROM_USER
 	select GENERIC_STRNLEN_USER
Index: linux/arch/powerpc/kernel/smp.c
===================================================================
--- linux.orig/arch/powerpc/kernel/smp.c
+++ linux/arch/powerpc/kernel/smp.c
@@ -31,6 +31,7 @@
 #include <linux/cpu.h>
 #include <linux/notifier.h>
 #include <linux/topology.h>
+#include <linux/tick.h>
 
 #include <asm/ptrace.h>
 #include <linux/atomic.h>
Index: linux/arch/powerpc/kernel/time.c
===================================================================
--- linux.orig/arch/powerpc/kernel/time.c
+++ linux/arch/powerpc/kernel/time.c
@@ -42,7 +42,7 @@
 #include <linux/timex.h>
 #include <linux/kernel_stat.h>
 #include <linux/time.h>
-#include <linux/clockchips.h>
+#include <linux/tick.h>
 #include <linux/init.h>
 #include <linux/profile.h>
 #include <linux/cpu.h>
Index: linux/include/linux/clockchips.h
===================================================================
--- linux.orig/include/linux/clockchips.h
+++ linux/include/linux/clockchips.h
@@ -155,29 +155,5 @@ extern void clockevents_set_mode(struct
 				 enum clock_event_mode mode);
 extern int clockevents_program_event(struct clock_event_device *dev,
 				     ktime_t expires, bool force);
-
-#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
-#ifdef CONFIG_ARCH_HAS_TICK_BROADCAST
-extern void tick_broadcast(const struct cpumask *mask);
-#else
-#define tick_broadcast	NULL
-#endif
-extern int tick_receive_broadcast(void);
-#endif
-
-#if defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) && defined(CONFIG_TICK_ONESHOT)
-extern void tick_setup_hrtimer_broadcast(void);
-extern int tick_check_broadcast_expired(void);
-#else
-static inline int tick_check_broadcast_expired(void) { return 0; }
-static inline void tick_setup_hrtimer_broadcast(void) {};
-#endif
-
-#else /* CONFIG_GENERIC_CLOCKEVENTS */
-
-static inline int tick_check_broadcast_expired(void) { return 0; }
-static inline void tick_setup_hrtimer_broadcast(void) {};
-
-#endif
-
+#endif /* CONFIG_GENERIC_CLOCKEVENTS */
 #endif
Index: linux/include/linux/tick.h
===================================================================
--- linux.orig/include/linux/tick.h
+++ linux/include/linux/tick.h
@@ -65,10 +65,8 @@ static inline void tick_broadcast_contro
 
 #if defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) && defined(CONFIG_TICK_ONESHOT)
 extern int tick_broadcast_oneshot_control(enum tick_broadcast_state state);
-extern void tick_takeover(int deadcpu);
 #else
 static inline int tick_broadcast_oneshot_control(enum tick_broadcast_state state) { return 0; }
-static inline void tick_takeover(int deadcpu) { }
 #endif
 
 static inline void tick_broadcast_enable(void)
@@ -181,4 +179,27 @@ static inline void tick_nohz_task_switch
 		__tick_nohz_task_switch(tsk);
 }
 
+#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
+#ifdef CONFIG_ARCH_HAS_TICK_BROADCAST
+extern void tick_broadcast(const struct cpumask *mask);
+#else
+#define tick_broadcast	NULL
+#endif
+extern int tick_receive_broadcast(void);
+#endif
+
+#if defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) && defined(CONFIG_TICK_ONESHOT)
+extern int tick_check_broadcast_expired(void);
+#else
+static inline int tick_check_broadcast_expired(void) { return 0; }
+#endif
+
+#ifdef CONFIG_GENERIC_CLOCKEVENTS_HRTIMER_BROADCAST
+extern void tick_setup_hrtimer_broadcast(void);
+extern void tick_takeover(int deadcpu);
+#else
+static inline void tick_setup_hrtimer_broadcast(void) { };
+static inline void tick_takeover(int deadcpu) { }
+#endif
+
 #endif
Index: linux/kernel/time/Kconfig
===================================================================
--- linux.orig/kernel/time/Kconfig
+++ linux/kernel/time/Kconfig
@@ -42,6 +42,10 @@ config GENERIC_CLOCKEVENTS_BROADCAST
 	bool
 	depends on GENERIC_CLOCKEVENTS
 
+config GENERIC_CLOCKEVENTS_HRTIMER_BROADCAST
+	bool
+	depends on GENERIC_CLOCKEVENTS && TICK_ONESHOT
+
 # Automatically adjust the min. reprogramming time for
 # clock event device
 config GENERIC_CLOCKEVENTS_MIN_ADJUST
Index: linux/kernel/time/Makefile
===================================================================
--- linux.orig/kernel/time/Makefile
+++ linux/kernel/time/Makefile
@@ -3,10 +3,8 @@ obj-y += timekeeping.o ntp.o clocksource
 obj-y += timeconv.o posix-clock.o alarmtimer.o
 
 obj-$(CONFIG_GENERIC_CLOCKEVENTS)		+= clockevents.o tick-common.o
-ifeq ($(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST),y)
- obj-y						+= tick-broadcast.o
- obj-$(CONFIG_TICK_ONESHOT)			+= tick-broadcast-hrtimer.o
-endif
+obj-$(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST)	+= tick-broadcast.o
+obj-$(CONFIG_GENERIC_CLOCKEVENTS_HRTIMER_BROADCAST)	+= tick-broadcast-hrtimer.o
 obj-$(CONFIG_GENERIC_SCHED_CLOCK)		+= sched_clock.o
 obj-$(CONFIG_TICK_ONESHOT)			+= tick-oneshot.o tick-sched.o
 obj-$(CONFIG_TIMER_STATS)			+= timer_stats.o
Index: linux/kernel/time/tick-broadcast.c
===================================================================
--- linux.orig/kernel/time/tick-broadcast.c
+++ linux/kernel/time/tick-broadcast.c
@@ -908,6 +908,7 @@ void tick_broadcast_switch_to_oneshot(vo
 }
 
 #ifdef CONFIG_HOTPLUG_CPU
+#ifdef CONFIG_GENERIC_CLOCKEVENTS_HRTIMER_BROADCAST
 /*
  * Called from the cpu hotplug code after a cpu is dead. This ensures
  * that a hrtimer based broad cast device is taken over.
@@ -916,7 +917,7 @@ void tick_broadcast_switch_to_oneshot(vo
  * which pushes the hrtimer over to a different cpu from
  * tick_shutdown_broadcast_oneshot()
  */
-void tick_broadcast_takeover_bc(int deadcpu)
+void tick_takeover(int deadcpu)
 {
 	struct clock_event_device *bc;
 	unsigned long flags;
@@ -929,6 +930,7 @@ void tick_broadcast_takeover_bc(int dead
 	}
 	raw_spin_unlock_irqrestore(&tick_broadcast_lock, flags);
 }
+#endif
 
 /*
  * Remove a dead CPU from broadcasting, called with broadcast lock



  parent reply	other threads:[~2015-02-16 13:10 UTC|newest]

Thread overview: 106+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-16 12:14 [PATCH 00/35] Some kernel/time cleanups Peter Zijlstra
2015-02-16 12:14 ` [PATCH 01/35] ACPI/acpi_pad: Remove the local apic nonsense Peter Zijlstra
2015-02-16 18:54   ` Rafael J. Wysocki
2015-02-18  6:16     ` Rafael J. Wysocki
2015-02-16 12:14 ` [PATCH 02/35] clockevents: Remove CONFIG_GENERIC_CLOCKEVENTS_BUILD Peter Zijlstra
2015-02-16 12:14 ` [PATCH 03/35] tick: Cleanup internal header files Peter Zijlstra
2015-02-16 12:14 ` [PATCH 04/35] tick: Cleanup internal header file Peter Zijlstra
2015-02-16 12:14 ` [PATCH 05/35] tick: Move core only declarations and functions to core Peter Zijlstra
2015-02-16 12:14 ` [PATCH 06/35] clockevents: Remove extra local_irq_save in clockevents_exchange_device() Peter Zijlstra
2015-02-16 12:14 ` [PATCH 07/35] clockevents: Make suspend/resume calls explicit Peter Zijlstra
2015-02-16 19:07   ` Rafael J. Wysocki
2015-02-16 12:14 ` [PATCH 08/35] tick: Make tick_resume_broadcast_oneshot static Peter Zijlstra
2015-02-16 12:14 ` [PATCH 09/35] tick/xen: Provide and use tick_resume_local() Peter Zijlstra
2015-02-16 16:37   ` David Vrabel
2015-02-16 12:14 ` [PATCH 10/35] clockevents: Make tick handover explicit Peter Zijlstra
2015-02-16 12:14 ` [PATCH 11/35] clockevents: Cleanup dead cpu explicitely Peter Zijlstra
2015-02-16 12:14 ` [PATCH 12/35] clockevents: Provide explicit broadcast control function Peter Zijlstra
2015-02-23 18:08   ` Daniel Lezcano
2015-02-24  0:38   ` Tony Lindgren
2015-02-16 12:14 ` [PATCH 13/35] x86, amd_idle: Use explicit broadcast control functions Peter Zijlstra
2015-02-16 12:14 ` [PATCH 14/35] ACPI / PAD: Use explicit broadcast control function Peter Zijlstra
2015-02-16 12:14 ` [PATCH 15/35] ACPI/ processor_idle: Use explicit broadcast controll function Peter Zijlstra
2015-02-16 12:14 ` [PATCH 16/35] cpuidle: Use explicit broadcast control function Peter Zijlstra
2015-02-23 18:11   ` Daniel Lezcano
2015-02-16 12:14 ` [PATCH 17/35] intel_idle: " Peter Zijlstra
2015-02-16 12:14 ` [PATCH 18/35] ARM: OMAP: " Peter Zijlstra
2015-02-24  0:40   ` Tony Lindgren
2015-02-16 12:14 ` [PATCH 19/35] clockevents: Remove the broadcast control leftovers Peter Zijlstra
2015-02-16 12:14 ` [PATCH 20/35] clockevents: Provide explicit broadcast oneshot control function Peter Zijlstra
2015-02-24  0:41   ` Tony Lindgren
2015-02-16 12:14 ` [PATCH 21/35] x86, amd_idle: Use explicit broadcast oneshot control functions Peter Zijlstra
2015-02-16 12:14 ` [PATCH 22/35] ACPI / PAD: Use explicit broadcast oneshot control function Peter Zijlstra
2015-02-16 12:14 ` [PATCH 23/35] ACPI/ processor_idle: Use explicit broadcast oneshot controll function Peter Zijlstra
2015-02-16 12:14 ` [PATCH 24/35] intel_idle: Use explicit broadcast oneshot control function Peter Zijlstra
2015-02-16 12:15 ` [PATCH 25/35] ARM: OMAP: " Peter Zijlstra
2015-02-24  0:41   ` Tony Lindgren
2015-02-16 12:15 ` [PATCH 26/35] ARM: tegra: " Peter Zijlstra
2015-02-16 12:15 ` [PATCH 27/35] sched/idle: " Peter Zijlstra
2015-02-21  0:56   ` Nicolas Pitre
2015-02-21 11:19     ` Peter Zijlstra
2015-02-16 12:15 ` [PATCH 28/35] clockevents: Remove the broadcast oneshot control leftovers Peter Zijlstra
2015-02-16 12:15 ` [PATCH 29/35] tick/timekeeping: Make PM_SLEEP related code conditional Peter Zijlstra
2015-02-16 12:15 ` [PATCH 30/35] timekeeping: Get rid of stale comment Peter Zijlstra
2015-02-16 12:15 ` [PATCH 31/35] clockevents: Consolidate tick_shutdown() Peter Zijlstra
2015-02-16 12:15 ` [PATCH 32/35] clockevents: Fix cpu down race for hrtimer based broadcasting Peter Zijlstra
2015-02-17  4:03   ` Preeti U Murthy
2015-02-17 10:39     ` Peter Zijlstra
2015-02-18  3:10       ` Preeti U Murthy
2015-02-18 13:06         ` Peter Zijlstra
2015-02-19  7:01           ` Preeti U Murthy
2015-02-19  9:53             ` Peter Zijlstra
2015-02-19 17:51   ` Nicolas Pitre
2015-02-21 12:46     ` Peter Zijlstra
2015-02-21 17:45       ` Nicolas Pitre
2015-02-23 16:14         ` Peter Zijlstra
2015-02-23 16:32           ` Nicolas Pitre
2015-02-23 17:33             ` Nicolas Pitre
2015-02-26  5:31               ` Preeti U Murthy
2015-02-27  8:49                 ` Preeti U Murthy
2015-03-02 14:56                   ` Peter Zijlstra
2015-03-05  4:20                     ` Preeti U Murthy
2015-03-29  6:45                       ` Ingo Molnar
2015-03-16  4:52                     ` Preeti U Murthy
2015-03-25  5:32                       ` Preeti U Murthy
2015-02-16 12:15 ` Peter Zijlstra [this message]
2015-02-17  3:06   ` [PATCH 33/35] tick: Make hrtimer broadcasting opt-in Preeti U Murthy
2015-02-17 10:04   ` Lorenzo Pieralisi
2015-02-16 12:15 ` [PATCH 34/35] tick: Provide tick_suspend_local() Peter Zijlstra
2015-02-17 14:31   ` Lorenzo Pieralisi
2015-02-17 17:55     ` Nicolas Pitre
2015-02-17 21:29       ` Nicolas Pitre
2015-02-18 13:35     ` Peter Zijlstra
2015-02-18 16:22       ` Rafael J. Wysocki
2015-02-18 16:38       ` Lorenzo Pieralisi
2015-02-16 12:15 ` [PATCH 35/35] arm: bl_switcher: Kill tick suspend hackery Peter Zijlstra
2015-02-16 19:14 ` [PATCH 00/35] Some kernel/time cleanups Rafael J. Wysocki
2015-03-25 12:04 ` [PATCH 00/09] Some kernel/time cleanups (related to timer_suspend/resume) Rafael J. Wysocki
2015-03-25 12:05   ` [PATCH 01/09] clockevents: Remove CONFIG_GENERIC_CLOCKEVENTS_BUILD Rafael J. Wysocki
2015-04-02 12:28     ` [tip:timers/core] " tip-bot for Thomas Gleixner
2015-03-25 12:06   ` [PATCH 02/09] tick: Move clocksource related stuff to timekeeping.h Rafael J. Wysocki
2015-04-02 12:28     ` [tip:timers/core] " tip-bot for Thomas Gleixner
2015-03-25 12:06   ` [PATCH 03/09] tick: Simplify tick-internal.h Rafael J. Wysocki
2015-04-02 12:29     ` [tip:timers/core] " tip-bot for Thomas Gleixner
2015-03-25 12:07   ` [PATCH 04/09] tick: Move core only declarations and functions to core Rafael J. Wysocki
2015-04-02 12:29     ` [tip:timers/core] " tip-bot for Thomas Gleixner
2015-03-25 12:08   ` [PATCH 05/09] clockevents: Remove extra local_irq_save in clockevents_exchange_device() Rafael J. Wysocki
2015-04-02 12:29     ` [tip:timers/core] clockevents: Remove extra local_irq_save() " tip-bot for Thomas Gleixner
2015-03-25 12:09   ` [PATCH 06/09] clockevents: Make suspend/resume calls explicit Rafael J. Wysocki
2015-04-02 12:30     ` [tip:timers/core] " tip-bot for Thomas Gleixner
2015-03-25 12:09   ` [PATCH 07/09] tick: Make tick_resume_broadcast_oneshot static Rafael J. Wysocki
2015-04-02 12:30     ` [tip:timers/core] tick: Make tick_resume_broadcast_oneshot() static tip-bot for Thomas Gleixner
2015-03-25 12:11   ` [PATCH 08/09] tick/xen: Provide and use tick_suspend_local() and tick_resume_local() Rafael J. Wysocki
2015-03-25 20:13     ` Konrad Rzeszutek Wilk
2015-03-25 20:57       ` Rafael J. Wysocki
2015-03-25 20:44         ` Konrad Rzeszutek Wilk
2015-03-25 21:36           ` Rafael J. Wysocki
2015-04-02 12:30     ` [tip:timers/core] " tip-bot for Thomas Gleixner
2015-04-03 13:21       ` [PATCH][fix for tip/timers/core] timers / PM: Fix up tick_unfreeze() Rafael J. Wysocki
2015-04-03 13:18         ` [tip:timers/core] timers/PM: " tip-bot for Rafael J. Wysocki
2015-04-03 13:31         ` [PATCH][cleanup for tip/timers/core] timers / PM: Drop unnecessary braces from tick_freeze() Rafael J. Wysocki
2015-04-03 13:18           ` [tip:timers/core] timers/PM: " tip-bot for Rafael J. Wysocki
2015-03-25 12:11   ` [PATCH 09/09] arm: bl_switcher: Kill tick suspend hackery Rafael J. Wysocki
2015-03-25 12:34     ` Nicolas Pitre
2015-04-02 12:30     ` [tip:timers/core] arm/bL_switcher: " tip-bot for Thomas Gleixner
2015-03-25 12:13   ` [PATCH 00/09] Some kernel/time cleanups (related to timer_suspend/resume) Rafael J. Wysocki
2015-03-31 22:45   ` [GIT PULL] kernel/time cleanups (related to tick_suspend/resume) Rafael J. Wysocki

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=20150216122413.937924719@infradead.org \
    --to=peterz@infradead.org \
    --cc=benh@kernel.crashing.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lorenzo.pieralisi@arm.com \
    --cc=mingo@kernel.org \
    --cc=mpe@ellerman.id.au \
    --cc=preeti@linux.vnet.ibm.com \
    --cc=rjw@rjwysocki.net \
    --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.