LKML Archive on lore.kernel.org help / color / mirror / Atom feed
From: Daniel Walker <dwalker@mvista.com> To: akpm@osdl.org Cc: linux-kernel@vger.kernel.org, johnstul@us.ibm.com Subject: [PATCH 14/23] clocksource: increase initcall priority Date: Tue, 30 Jan 2007 19:37:24 -0800 [thread overview] Message-ID: <20070131033807.427331295@mvista.com> (raw) In-Reply-To: 20070131033710.420168478@mvista.com [-- Attachment #1: clocksource_init_call.patch --] [-- Type: text/plain, Size: 9439 bytes --] Normal systems often have almost everything registered in device_initcall() . Most drivers are registered there, and usually if people add code that needs an initcall they will either use device_initcall() or module_init() which both result in the same initcall.. When John created the clocksource interface he did what most people would do , and he made the clocksource registration happen in device_initcall with most everything else .. The effect of doing this was the addition of the following code, /* clocksource_done_booting - Called near the end of bootup * * Hack to avoid lots of clocksource churn at boot time */ static int __init clocksource_done_booting(void) { finished_booting = 1; return 0; } late_initcall(clocksource_done_booting); This is one of two initcalls in the clocksource interface , the other one is device_initcall(init_clocksource_sysfs); .. If I leave the clocksource initcall alone then anything that uses a clocksource in the future would need at least one late_initcall(). Since the clocksources aren't all fully register until after device_initcall. The reason behind changing that is because it doesn't fit the usually development flow of initialization functions which , as I said earlier, almost always end up into device_initcall . This change certainly isn't mandatory . I feel it would reduce the likely hood of developers that use the clocksource interface from adding multiple initcalls (one late_initcall, and one device_initcall). It also better fits developers tendencies to put almost everything into device_initcall() .. In addition, This patch removes a small amount of code in time keeping which existed to detect the end of the initcall sequence then selected a clock. As a note, arm and mips both register their clocksources during time_init() instead of using initcalls. Signed-Off-By: Daniel Walker <dwalker@mvista.com> --- arch/i386/kernel/hpet.c | 2 +- arch/i386/kernel/i8253.c | 2 +- arch/i386/kernel/tsc.c | 2 +- arch/x86_64/kernel/hpet.c | 2 +- arch/x86_64/kernel/tsc.c | 3 +-- drivers/clocksource/acpi_pm.c | 8 +++++++- drivers/clocksource/cyclone.c | 2 +- drivers/clocksource/scx200_hrt.c | 2 +- include/linux/clocksource.h | 6 ++++++ kernel/time/clocksource.c | 13 ------------- kernel/time/jiffies.c | 2 +- kernel/time/tick-sched.c | 8 ++++++++ kernel/time/timekeeping.c | 15 +++++++-------- 13 files changed, 36 insertions(+), 31 deletions(-) Index: linux-2.6.19/arch/i386/kernel/hpet.c =================================================================== --- linux-2.6.19.orig/arch/i386/kernel/hpet.c +++ linux-2.6.19/arch/i386/kernel/hpet.c @@ -315,7 +315,7 @@ static int __init init_hpet_clocksource( return clocksource_register(&clocksource_hpet); } -module_init(init_hpet_clocksource); +clocksource_initcall(init_hpet_clocksource); #ifdef CONFIG_HPET_EMULATE_RTC Index: linux-2.6.19/arch/i386/kernel/i8253.c =================================================================== --- linux-2.6.19.orig/arch/i386/kernel/i8253.c +++ linux-2.6.19/arch/i386/kernel/i8253.c @@ -195,4 +195,4 @@ static int __init init_pit_clocksource(v clocksource_pit.mult = clocksource_hz2mult(CLOCK_TICK_RATE, 20); return clocksource_register(&clocksource_pit); } -module_init(init_pit_clocksource); +clocksource_initcall(init_pit_clocksource); Index: linux-2.6.19/arch/i386/kernel/tsc.c =================================================================== --- linux-2.6.19.orig/arch/i386/kernel/tsc.c +++ linux-2.6.19/arch/i386/kernel/tsc.c @@ -458,4 +458,4 @@ static int __init init_tsc_clocksource(v return 0; } -module_init(init_tsc_clocksource); +clocksource_initcall(init_tsc_clocksource); Index: linux-2.6.19/arch/x86_64/kernel/hpet.c =================================================================== --- linux-2.6.19.orig/arch/x86_64/kernel/hpet.c +++ linux-2.6.19/arch/x86_64/kernel/hpet.c @@ -508,4 +508,4 @@ static int __init init_hpet_clocksource( return clocksource_register(&clocksource_hpet); } -module_init(init_hpet_clocksource); +clocksource_initcall(init_hpet_clocksource); Index: linux-2.6.19/arch/x86_64/kernel/tsc.c =================================================================== --- linux-2.6.19.orig/arch/x86_64/kernel/tsc.c +++ linux-2.6.19/arch/x86_64/kernel/tsc.c @@ -224,5 +224,4 @@ static int __init init_tsc_clocksource(v } return 0; } - -module_init(init_tsc_clocksource); +clocksource_initcall(init_tsc_clocksource); Index: linux-2.6.19/drivers/clocksource/acpi_pm.c =================================================================== --- linux-2.6.19.orig/drivers/clocksource/acpi_pm.c +++ linux-2.6.19/drivers/clocksource/acpi_pm.c @@ -214,4 +214,10 @@ pm_good: return clocksource_register(&clocksource_acpi_pm); } -module_init(init_acpi_pm_clocksource); +/* + * This clocksource is removed from the clocksource_initcall + * macro since it's mandatory for it to be in fs_initcall as the + * highest initcall level, or else it doesn't work properly with + * it's PCI fix ups. + */ +fs_initcall(init_acpi_pm_clocksource); Index: linux-2.6.19/drivers/clocksource/cyclone.c =================================================================== --- linux-2.6.19.orig/drivers/clocksource/cyclone.c +++ linux-2.6.19/drivers/clocksource/cyclone.c @@ -116,4 +116,4 @@ static int __init init_cyclone_clocksour return clocksource_register(&clocksource_cyclone); } -module_init(init_cyclone_clocksource); +clocksource_initcall(init_cyclone_clocksource); Index: linux-2.6.19/drivers/clocksource/scx200_hrt.c =================================================================== --- linux-2.6.19.orig/drivers/clocksource/scx200_hrt.c +++ linux-2.6.19/drivers/clocksource/scx200_hrt.c @@ -94,7 +94,7 @@ static int __init init_hrt_clocksource(v return clocksource_register(&cs_hrt); } -module_init(init_hrt_clocksource); +clocksource_initcall(init_hrt_clocksource); MODULE_AUTHOR("Jim Cromie <jim.cromie@gmail.com>"); MODULE_DESCRIPTION("clocksource on SCx200 HiRes Timer"); Index: linux-2.6.19/include/linux/clocksource.h =================================================================== --- linux-2.6.19.orig/include/linux/clocksource.h +++ linux-2.6.19/include/linux/clocksource.h @@ -41,6 +41,12 @@ extern struct atomic_notifier_head clock #define CLOCKSOURCE_NOTIFY_RATING 2 #define CLOCKSOURCE_NOTIFY_FREQ 4 +/* + * Defined so the initcall can be changes without touching + * every clocksource in the system. + */ +#define clocksource_initcall(x) fs_initcall(x) + /** * clocksource_notifier_register - Registers a list change notifier * @nb: pointer to a notifier block Index: linux-2.6.19/kernel/time/clocksource.c =================================================================== --- linux-2.6.19.orig/kernel/time/clocksource.c +++ linux-2.6.19/kernel/time/clocksource.c @@ -38,22 +38,9 @@ */ static LIST_HEAD(clocksource_list); static DEFINE_SPINLOCK(clocksource_lock); -static int finished_booting; ATOMIC_NOTIFIER_HEAD(clocksource_list_notifier); -/* clocksource_done_booting - Called near the end of bootup - * - * Hack to avoid lots of clocksource churn at boot time - */ -static int __init clocksource_done_booting(void) -{ - finished_booting = 1; - return 0; -} - -late_initcall(clocksource_done_booting); - /** * __is_registered - Returns a clocksource if it's registered * @name: name of the clocksource to return Index: linux-2.6.19/kernel/time/jiffies.c =================================================================== --- linux-2.6.19.orig/kernel/time/jiffies.c +++ linux-2.6.19/kernel/time/jiffies.c @@ -69,4 +69,4 @@ static int __init init_jiffies_clocksour return clocksource_register(&clocksource_jiffies); } -module_init(init_jiffies_clocksource); +clocksource_initcall(init_jiffies_clocksource); Index: linux-2.6.19/kernel/time/tick-sched.c =================================================================== --- linux-2.6.19.orig/kernel/time/tick-sched.c +++ linux-2.6.19/kernel/time/tick-sched.c @@ -540,6 +540,14 @@ int tick_check_oneshot_change(int allow_ { struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched); + /* + * HRT or Dynamic tick can't be started during init, but it's possible + * for generic time to switch to a good clock during init. So + * explicitly check that we are't still booting here. + */ + if (system_state == SYSTEM_BOOTING) + return 0; + if (!test_and_clear_bit(0, &ts->check_clocks)) return 0; Index: linux-2.6.19/kernel/time/timekeeping.c =================================================================== --- linux-2.6.19.orig/kernel/time/timekeeping.c +++ linux-2.6.19/kernel/time/timekeeping.c @@ -318,14 +318,6 @@ static __init int timekeeping_init_sysfs device_initcall(timekeeping_init_sysfs); #endif /* CONFIG_SYSFS */ -static int __init timekeeping_early_clockswitch(void) -{ - atomic_inc(&clock_check); - return 0; -} - -late_initcall(timekeeping_early_clockswitch); - /** * boot_override_clocksource - boot clock override * @str: override name @@ -471,6 +463,13 @@ static int __init timekeeping_init_devic if (!error) error = sysdev_register(&device_timer); +#ifdef CONFIG_GENERIC_TIME + /* + * Now we signal to switch to a high-res clock. + */ + atomic_inc(&clock_check); +#endif + return error; } --
next prev parent reply other threads:[~2007-01-31 3:49 UTC|newest] Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top 2007-01-31 3:37 [PATCH 00/23] clocksource update v12 Daniel Walker 2007-01-31 3:37 ` [PATCH 01/23] clocksource: drop clocksource-add-verification-watchdog-helper-fix.patch Daniel Walker 2007-01-31 12:47 ` Ingo Molnar 2007-01-31 3:37 ` [PATCH 02/23] clocksource: drop clocksource-add-verification-watchdog-helper.patch Daniel Walker 2007-01-31 3:37 ` [PATCH 03/23] clocksource: drop clocksource-remove-the-update-callback.patch Daniel Walker 2007-01-31 3:37 ` [PATCH 04/23] clocksource: drop time-x86_64-tsc-fixup-clocksource-changes.patch Daniel Walker 2007-01-31 3:37 ` [PATCH 05/23] clocksource: drop simplify-the-registration-of-clocksources.patch Daniel Walker 2007-01-31 3:37 ` [PATCH 06/23] timekeeping: create kernel/time/timekeeping.c Daniel Walker 2007-01-31 8:59 ` Ingo Molnar 2007-01-31 15:05 ` Daniel Walker 2007-01-31 3:37 ` [PATCH 07/23] clocksource: rating sorted list Daniel Walker 2007-01-31 9:34 ` Ingo Molnar 2007-01-31 15:07 ` Daniel Walker 2007-01-31 3:37 ` [PATCH 08/23] clocksource: drop duplicate register checking Daniel Walker 2007-01-31 9:59 ` Ingo Molnar 2007-01-31 15:13 ` Daniel Walker 2007-01-31 17:19 ` Ingo Molnar 2007-01-31 3:37 ` [PATCH 09/23] clocksource: add block notifier Daniel Walker 2007-01-31 10:17 ` Ingo Molnar 2007-01-31 15:25 ` Daniel Walker 2007-01-31 17:22 ` Ingo Molnar 2007-01-31 3:37 ` [PATCH 10/23] clocksource: remove update_callback Daniel Walker 2007-01-31 10:46 ` Ingo Molnar 2007-01-31 15:42 ` Daniel Walker 2007-01-31 17:18 ` Ingo Molnar 2007-01-31 3:37 ` [PATCH 11/23] clocksource: atomic signals Daniel Walker 2007-01-31 11:07 ` Ingo Molnar 2007-01-31 15:59 ` Daniel Walker 2007-01-31 17:15 ` Ingo Molnar 2007-01-31 3:37 ` [PATCH 12/23] clocksource: add clocksource_get_clock() Daniel Walker 2007-01-31 11:46 ` Ingo Molnar 2007-01-31 16:40 ` Daniel Walker 2007-01-31 3:37 ` [PATCH 13/23] timekeeping: move sysfs layer/drop API calls Daniel Walker 2007-01-31 11:49 ` Ingo Molnar 2007-01-31 3:37 ` Daniel Walker [this message] 2007-01-31 11:50 ` [PATCH 14/23] clocksource: increase initcall priority Ingo Molnar 2007-01-31 16:42 ` Daniel Walker 2007-01-31 17:10 ` Ingo Molnar 2007-01-31 17:20 ` Daniel Walker 2007-01-31 17:29 ` Thomas Gleixner 2007-01-31 3:37 ` [PATCH 15/23] clocksource: add new flags Daniel Walker 2007-01-31 3:37 ` [PATCH 16/23] clocksource: arm update for " Daniel Walker 2007-01-31 12:27 ` Ingo Molnar 2007-01-31 3:37 ` [PATCH 17/23] clocksource: avr32 " Daniel Walker 2007-01-31 3:37 ` [PATCH 18/23] clocksource: i386 " Daniel Walker 2007-01-31 3:37 ` [PATCH 19/23] clocksource: mips " Daniel Walker 2007-01-31 3:37 ` [PATCH 20/23] clocksource: x86_64 " Daniel Walker 2007-01-31 3:37 ` [PATCH 21/23] clocksource: drivers/ " Daniel Walker 2007-01-31 3:37 ` [PATCH 22/23] clocksource: new clock lookup method Daniel Walker [not found] ` <20070131122215.GE1847@elte.hu> [not found] ` <1170261439.9781.96.camel@imap.mvista.com> [not found] ` <20070131164918.GA4468@elte.hu> [not found] ` <1170265169.9781.145.camel@imap.mvista.com> 2007-01-31 17:55 ` Thomas Gleixner 2007-01-31 18:07 ` Daniel Walker 2007-01-31 21:09 ` Thomas Gleixner 2007-01-31 3:37 ` [PATCH 23/23] clocksource tsc: add verify routine Daniel Walker 2007-01-31 12:43 ` Ingo Molnar 2007-01-31 17:02 ` Daniel Walker 2007-01-31 17:22 ` Thomas Gleixner 2007-01-31 17:33 ` Ingo Molnar 2007-01-31 19:43 [PATCH 14/23] clocksource: increase initcall priority David Brownell 2007-01-31 22:47 ` Daniel Walker 2007-01-31 23:23 ` Thomas Gleixner 2007-02-01 0:15 ` Daniel Walker 2007-02-01 0:34 ` Thomas Gleixner 2007-02-01 0:24 ` David Brownell
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=20070131033807.427331295@mvista.com \ --to=dwalker@mvista.com \ --cc=akpm@osdl.org \ --cc=johnstul@us.ibm.com \ --cc=linux-kernel@vger.kernel.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: linkBe 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; as well as URLs for NNTP newsgroup(s).