diff options
-rw-r--r-- | arch/alpha/Kconfig | 4 | ||||
-rw-r--r-- | arch/arm/Kconfig | 20 | ||||
-rw-r--r-- | arch/avr32/Kconfig | 6 | ||||
-rw-r--r-- | arch/blackfin/Kconfig | 10 | ||||
-rw-r--r-- | arch/c6x/Kconfig | 8 | ||||
-rw-r--r-- | arch/cris/Kconfig | 7 | ||||
-rw-r--r-- | arch/h8300/Kconfig.cpu | 2 | ||||
-rw-r--r-- | arch/hexagon/Kconfig | 16 | ||||
-rw-r--r-- | arch/ia64/Kconfig | 9 | ||||
-rw-r--r-- | arch/m32r/Kconfig | 4 | ||||
-rw-r--r-- | arch/m68k/Kconfig | 11 | ||||
-rw-r--r-- | arch/microblaze/Kconfig | 9 | ||||
-rw-r--r-- | arch/mips/Kconfig | 15 | ||||
-rw-r--r-- | arch/mn10300/Kconfig | 8 | ||||
-rw-r--r-- | arch/openrisc/Kconfig | 5 | ||||
-rw-r--r-- | arch/powerpc/Kconfig | 13 | ||||
-rw-r--r-- | arch/s390/Kconfig | 14 | ||||
-rw-r--r-- | arch/score/Kconfig | 5 | ||||
-rw-r--r-- | arch/sh/Kconfig | 14 | ||||
-rw-r--r-- | arch/sparc/Kconfig | 12 | ||||
-rw-r--r-- | arch/tile/Kconfig | 6 | ||||
-rw-r--r-- | arch/um/Kconfig.common | 5 | ||||
-rw-r--r-- | arch/um/Kconfig.um | 1 | ||||
-rw-r--r-- | arch/unicore32/Kconfig | 5 | ||||
-rw-r--r-- | arch/x86/Kconfig | 33 | ||||
-rw-r--r-- | arch/x86/kernel/hpet.c | 66 | ||||
-rw-r--r-- | include/linux/time.h | 1 | ||||
-rw-r--r-- | init/Kconfig | 1 | ||||
-rw-r--r-- | kernel/time/Kconfig | 58 | ||||
-rw-r--r-- | kernel/time/ntp.c | 8 | ||||
-rw-r--r-- | kernel/time/timekeeping.c | 4 |
31 files changed, 155 insertions, 225 deletions
diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig index 0893f02..3de74c9 100644 --- a/arch/alpha/Kconfig +++ b/arch/alpha/Kconfig @@ -16,6 +16,7 @@ config ALPHA select ARCH_WANT_OPTIONAL_GPIOLIB select ARCH_HAVE_NMI_SAFE_CMPXCHG select GENERIC_SMP_IDLE_THREAD + select GENERIC_CMOS_UPDATE help The Alpha is a 64-bit general-purpose processor designed and marketed by the Digital Equipment Corporation of blessed memory, @@ -48,9 +49,6 @@ config GENERIC_CALIBRATE_DELAY bool default y -config GENERIC_CMOS_UPDATE - def_bool y - config GENERIC_GPIO bool diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 4f4c811..3124509 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -40,6 +40,8 @@ config ARM select GENERIC_PCI_IOMAP select HAVE_BPF_JIT select GENERIC_SMP_IDLE_THREAD + select KTIME_SCALAR + select GENERIC_CLOCKEVENTS_BROADCAST if SMP help The ARM series is a line of low-power-consumption RISC chip designs licensed by ARM Ltd and targeted at embedded applications and @@ -63,22 +65,6 @@ config SYS_SUPPORTS_APM_EMULATION config GENERIC_GPIO bool -config ARCH_USES_GETTIMEOFFSET - bool - default n - -config GENERIC_CLOCKEVENTS - bool - -config GENERIC_CLOCKEVENTS_BROADCAST - bool - depends on GENERIC_CLOCKEVENTS - default y if SMP - -config KTIME_SCALAR - bool - default y - config HAVE_TCM bool select GENERIC_ALLOCATOR @@ -1438,8 +1424,6 @@ endmenu menu "Kernel Features" -source "kernel/time/Kconfig" - config HAVE_SMP bool help diff --git a/arch/avr32/Kconfig b/arch/avr32/Kconfig index 3dea7231..f8bc2d2 100644 --- a/arch/avr32/Kconfig +++ b/arch/avr32/Kconfig @@ -12,6 +12,7 @@ config AVR32 select HARDIRQS_SW_RESEND select GENERIC_IRQ_SHOW select ARCH_HAVE_NMI_SAFE_CMPXCHG + select GENERIC_CLOCKEVENTS help AVR32 is a high-performance 32-bit RISC microprocessor core, designed for cost-sensitive embedded applications, with particular @@ -35,9 +36,6 @@ config TRACE_IRQFLAGS_SUPPORT config RWSEM_GENERIC_SPINLOCK def_bool y -config GENERIC_CLOCKEVENTS - def_bool y - config RWSEM_XCHGADD_ALGORITHM def_bool n @@ -63,8 +61,6 @@ source "kernel/Kconfig.freezer" menu "System Type and features" -source "kernel/time/Kconfig" - config SUBARCH_AVR32B bool config MMU diff --git a/arch/blackfin/Kconfig b/arch/blackfin/Kconfig index 79cfe26..04ec0d8 100644 --- a/arch/blackfin/Kconfig +++ b/arch/blackfin/Kconfig @@ -38,6 +38,7 @@ config BLACKFIN select IRQ_PER_CPU if SMP select HAVE_NMI_WATCHDOG if NMI_WATCHDOG select GENERIC_SMP_IDLE_THREAD + select ARCH_USES_GETTIMEOFFSET if !GENERIC_CLOCKEVENTS config GENERIC_CSUM def_bool y @@ -642,9 +643,10 @@ comment "Kernel Timer/Scheduler" source kernel/Kconfig.hz -config GENERIC_CLOCKEVENTS +config SET_GENERIC_CLOCKEVENTS bool "Generic clock events" default y + select GENERIC_CLOCKEVENTS menu "Clock event device" depends on GENERIC_CLOCKEVENTS @@ -678,12 +680,6 @@ config GPTMR0_CLOCKSOURCE depends on !TICKSOURCE_GPTMR0 endmenu -config ARCH_USES_GETTIMEOFFSET - depends on !GENERIC_CLOCKEVENTS - def_bool y - -source kernel/time/Kconfig - comment "Misc" choice diff --git a/arch/c6x/Kconfig b/arch/c6x/Kconfig index 1f15b88..052f81a 100644 --- a/arch/c6x/Kconfig +++ b/arch/c6x/Kconfig @@ -15,6 +15,7 @@ config C6X select IRQ_DOMAIN select OF select OF_EARLY_FLATTREE + select GENERIC_CLOCKEVENTS config MMU def_bool n @@ -31,12 +32,6 @@ config GENERIC_CALIBRATE_DELAY config GENERIC_HWEIGHT def_bool y -config GENERIC_CLOCKEVENTS - def_bool y - -config GENERIC_CLOCKEVENTS_BROADCAST - bool - config GENERIC_BUG def_bool y @@ -125,7 +120,6 @@ source "mm/Kconfig" source "kernel/Kconfig.preempt" source "kernel/Kconfig.hz" -source "kernel/time/Kconfig" endmenu diff --git a/arch/cris/Kconfig b/arch/cris/Kconfig index 2995035..22d34d6 100644 --- a/arch/cris/Kconfig +++ b/arch/cris/Kconfig @@ -13,12 +13,6 @@ config RWSEM_GENERIC_SPINLOCK config RWSEM_XCHGADD_ALGORITHM bool -config GENERIC_CMOS_UPDATE - def_bool y - -config ARCH_USES_GETTIMEOFFSET - def_bool n - config ARCH_HAS_ILOG2_U32 bool default n @@ -50,6 +44,7 @@ config CRIS select GENERIC_IRQ_SHOW select GENERIC_IOMAP select GENERIC_SMP_IDLE_THREAD if ETRAX_ARCH_V32 + select GENERIC_CMOS_UPDATE config HZ int diff --git a/arch/h8300/Kconfig.cpu b/arch/h8300/Kconfig.cpu index 15c2228..321f392 100644 --- a/arch/h8300/Kconfig.cpu +++ b/arch/h8300/Kconfig.cpu @@ -1,7 +1,5 @@ menu "Processor type and features" -source "kernel/time/Kconfig" - choice prompt "H8/300 platform" default H8300H_GENERIC diff --git a/arch/hexagon/Kconfig b/arch/hexagon/Kconfig index bc979f7..b2fdfb70 100644 --- a/arch/hexagon/Kconfig +++ b/arch/hexagon/Kconfig @@ -27,6 +27,9 @@ config HEXAGON select GENERIC_IOMAP select GENERIC_SMP_IDLE_THREAD select STACKTRACE_SUPPORT + select KTIME_SCALAR + select GENERIC_CLOCKEVENTS + select GENERIC_CLOCKEVENTS_BROADCAST ---help--- Qualcomm Hexagon is a processor architecture designed for high performance and low power across a wide variety of applications. @@ -55,9 +58,6 @@ config PCI config EARLY_PRINTK def_bool y -config KTIME_SCALAR - def_bool y - config MMU def_bool y @@ -88,15 +88,6 @@ config GENERIC_FIND_NEXT_BIT config GENERIC_HWEIGHT def_bool y -config GENERIC_TIME - def_bool y - -config GENERIC_CLOCKEVENTS - def_bool y - -config GENERIC_CLOCKEVENTS_BROADCAST - def_bool y - config STACKTRACE_SUPPORT def_bool y select STACKTRACE @@ -179,7 +170,6 @@ endchoice source "mm/Kconfig" source "kernel/Kconfig.hz" -source "kernel/time/Kconfig" config GENERIC_GPIO def_bool n diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index ba667b6..8186ec5 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig @@ -37,6 +37,8 @@ config IA64 select ARCH_INIT_TASK select ARCH_TASK_STRUCT_ALLOCATOR select ARCH_THREAD_INFO_ALLOCATOR + select ARCH_CLOCKSOURCE_DATA + select GENERIC_TIME_VSYSCALL default y help The Itanium Processor Family is Intel's 64-bit successor to @@ -92,10 +94,6 @@ config GENERIC_CALIBRATE_DELAY bool default y -config GENERIC_TIME_VSYSCALL - bool - default y - config HAVE_SETUP_PER_CPU_AREA def_bool y @@ -110,9 +108,6 @@ config EFI bool default y -config ARCH_CLOCKSOURCE_DATA - def_bool y - config SCHED_OMIT_FRAME_POINTER bool default y diff --git a/arch/m32r/Kconfig b/arch/m32r/Kconfig index ef80a65..b638d5b 100644 --- a/arch/m32r/Kconfig +++ b/arch/m32r/Kconfig @@ -11,6 +11,7 @@ config M32R select GENERIC_IRQ_PROBE select GENERIC_IRQ_SHOW select GENERIC_ATOMIC64 + select ARCH_USES_GETTIMEOFFSET config SBUS bool @@ -33,9 +34,6 @@ config HZ int default 100 -config ARCH_USES_GETTIMEOFFSET - def_bool y - source "init/Kconfig" source "kernel/Kconfig.freezer" diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig index d318c60..cac5b6b 100644 --- a/arch/m68k/Kconfig +++ b/arch/m68k/Kconfig @@ -8,6 +8,7 @@ config M68K select ARCH_HAVE_NMI_SAFE_CMPXCHG if RMW_INSNS select GENERIC_CPU_DEVICES select FPU if MMU + select ARCH_USES_GETTIMEOFFSET if MMU && !COLDFIRE config RWSEM_GENERIC_SPINLOCK bool @@ -22,9 +23,6 @@ config ARCH_HAS_ILOG2_U32 config ARCH_HAS_ILOG2_U64 bool -config GENERIC_CLOCKEVENTS - bool - config GENERIC_GPIO bool @@ -43,9 +41,6 @@ config TIME_LOW_RES bool default y -config ARCH_USES_GETTIMEOFFSET - def_bool MMU && !COLDFIRE - config NO_IOPORT def_bool y @@ -111,10 +106,6 @@ if COLDFIRE source "kernel/Kconfig.preempt" endif -if !MMU || COLDFIRE -source "kernel/time/Kconfig" -endif - source "mm/Kconfig" endmenu diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig index ac22dc7..8346046 100644 --- a/arch/microblaze/Kconfig +++ b/arch/microblaze/Kconfig @@ -22,6 +22,7 @@ config MICROBLAZE select GENERIC_PCI_IOMAP select GENERIC_CPU_DEVICES select GENERIC_ATOMIC64 + select GENERIC_CLOCKEVENTS config SWAP def_bool n @@ -50,12 +51,6 @@ config GENERIC_HWEIGHT config GENERIC_CALIBRATE_DELAY def_bool y -config GENERIC_TIME_VSYSCALL - def_bool n - -config GENERIC_CLOCKEVENTS - def_bool y - config GENERIC_GPIO def_bool y @@ -79,8 +74,6 @@ source "arch/microblaze/platform/Kconfig.platform" menu "Processor type and features" -source "kernel/time/Kconfig" - source "kernel/Kconfig.preempt" source "kernel/Kconfig.hz" diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 85aad03..3aa826b 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -31,6 +31,8 @@ config MIPS select ARCH_DISCARD_MEMBLOCK select GENERIC_SMP_IDLE_THREAD select BUILDTIME_EXTABLE_SORT + select GENERIC_CLOCKEVENTS + select GENERIC_CMOS_UPDATE menu "Machine selection" @@ -858,14 +860,6 @@ config GENERIC_CALIBRATE_DELAY bool default y -config GENERIC_CLOCKEVENTS - bool - default y - -config GENERIC_CMOS_UPDATE - bool - default y - config SCHED_OMIT_FRAME_POINTER bool default y @@ -2052,9 +2046,6 @@ config CPU_HAS_SYNC depends on !CPU_R3000 default y -config GENERIC_CLOCKEVENTS_BROADCAST - bool - # # CPU non-features # @@ -2216,8 +2207,6 @@ config NR_CPUS performance should round up your number of processors to the next power of two. -source "kernel/time/Kconfig" - # # Timer Interrupt Frequency Configuration # diff --git a/arch/mn10300/Kconfig b/arch/mn10300/Kconfig index 3aa3de0..687f9b4 100644 --- a/arch/mn10300/Kconfig +++ b/arch/mn10300/Kconfig @@ -6,6 +6,7 @@ config MN10300 select HAVE_ARCH_TRACEHOOK select HAVE_ARCH_KGDB select HAVE_NMI_WATCHDOG if MN10300_WD_TIMER + select GENERIC_CLOCKEVENTS config AM33_2 def_bool n @@ -42,15 +43,9 @@ config RWSEM_XCHGADD_ALGORITHM config GENERIC_CALIBRATE_DELAY def_bool y -config GENERIC_CMOS_UPDATE - def_bool n - config GENERIC_HWEIGHT def_bool y -config GENERIC_CLOCKEVENTS - def_bool y - config GENERIC_BUG def_bool y @@ -231,7 +226,6 @@ config MN10300_USING_JTAG single-stepping, which are taken over completely by the JTAG unit. source "kernel/Kconfig.hz" -source "kernel/time/Kconfig" config MN10300_RTC bool "Using MN10300 RTC" diff --git a/arch/openrisc/Kconfig b/arch/openrisc/Kconfig index 297bd38..4932247 100644 --- a/arch/openrisc/Kconfig +++ b/arch/openrisc/Kconfig @@ -18,6 +18,7 @@ config OPENRISC select GENERIC_IOMAP select GENERIC_CPU_DEVICES select GENERIC_ATOMIC64 + select GENERIC_CLOCKEVENTS config MMU def_bool y @@ -47,9 +48,6 @@ config NO_IOPORT config GENERIC_GPIO def_bool y -config GENERIC_CLOCKEVENTS - def_bool y - config TRACE_IRQFLAGS_SUPPORT def_bool y @@ -109,7 +107,6 @@ config OPENRISC_HAVE_INST_DIV endmenu -source "kernel/time/Kconfig" source kernel/Kconfig.hz source kernel/Kconfig.preempt source "mm/Kconfig" diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 0a947bd..00b9874 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -27,15 +27,6 @@ config MMU bool default y -config GENERIC_CMOS_UPDATE - def_bool y - -config GENERIC_TIME_VSYSCALL - def_bool y - -config GENERIC_CLOCKEVENTS - def_bool y - config HAVE_SETUP_PER_CPU_AREA def_bool PPC64 @@ -141,6 +132,9 @@ config PPC select HAVE_ARCH_JUMP_LABEL select ARCH_HAVE_NMI_SAFE_CMPXCHG select GENERIC_SMP_IDLE_THREAD + select GENERIC_CMOS_UPDATE + select GENERIC_TIME_VSYSCALL + select GENERIC_CLOCKEVENTS config EARLY_PRINTK bool @@ -281,7 +275,6 @@ config HIGHMEM bool "High memory support" depends on PPC32 -source kernel/time/Kconfig source kernel/Kconfig.hz source kernel/Kconfig.preempt source "fs/Kconfig.binfmt" diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index e16390c..b403c53 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig @@ -28,12 +28,6 @@ config ARCH_HAS_ILOG2_U64 config GENERIC_HWEIGHT def_bool y -config GENERIC_TIME_VSYSCALL - def_bool y - -config GENERIC_CLOCKEVENTS - def_bool y - config GENERIC_BUG def_bool y if BUG @@ -123,6 +117,9 @@ config S390 select ARCH_INLINE_WRITE_UNLOCK_IRQ select ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE select GENERIC_SMP_IDLE_THREAD + select GENERIC_TIME_VSYSCALL + select GENERIC_CLOCKEVENTS + select KTIME_SCALAR if 32BIT config SCHED_OMIT_FRAME_POINTER def_bool y @@ -135,8 +132,6 @@ menu "Base setup" comment "Processor type and features" -source "kernel/time/Kconfig" - config 64BIT def_bool y prompt "64 bit kernel" @@ -147,9 +142,6 @@ config 64BIT config 32BIT def_bool y if !64BIT -config KTIME_SCALAR - def_bool 32BIT - config SMP def_bool y prompt "Symmetric multi-processing support" diff --git a/arch/score/Kconfig b/arch/score/Kconfig index 4b28577..ba0f412 100644 --- a/arch/score/Kconfig +++ b/arch/score/Kconfig @@ -9,6 +9,7 @@ config SCORE select HAVE_MEMBLOCK_NODE_MAP select ARCH_DISCARD_MEMBLOCK select GENERIC_CPU_DEVICES + select GENERIC_CLOCKEVENTS choice prompt "System type" @@ -51,9 +52,6 @@ config GENERIC_HWEIGHT config GENERIC_CALIBRATE_DELAY def_bool y -config GENERIC_CLOCKEVENTS - def_bool y - menu "Kernel type" config 32BIT @@ -68,7 +66,6 @@ config MEMORY_START hex default 0xa0000000 -source "kernel/time/Kconfig" source "kernel/Kconfig.hz" source "kernel/Kconfig.preempt" diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index 3e723aa..5e05c0b 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig @@ -29,6 +29,8 @@ config SUPERH select GENERIC_ATOMIC64 select GENERIC_IRQ_SHOW select GENERIC_SMP_IDLE_THREAD + select GENERIC_CLOCKEVENTS + select GENERIC_CMOS_UPDATE if SH_SH03 || SH_DREAMCAST help The SuperH is a RISC processor targeted for use in embedded systems and consumer electronics; it was also used in the Sega Dreamcast @@ -87,16 +89,6 @@ config GENERIC_GPIO config GENERIC_CALIBRATE_DELAY bool -config GENERIC_CLOCKEVENTS - def_bool y - -config GENERIC_CLOCKEVENTS_BROADCAST - bool - -config GENERIC_CMOS_UPDATE - def_bool y - depends on SH_SH03 || SH_DREAMCAST - config GENERIC_LOCKBREAK def_bool y depends on SMP && PREEMPT @@ -611,8 +603,6 @@ config SH_CLK_CPG_LEGACY !CPU_SUBTYPE_SH7734 && !CPU_SUBTYPE_SH7264 && \ !CPU_SUBTYPE_SH7269 -source "kernel/time/Kconfig" - endmenu menu "CPU Frequency scaling" diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index 1ea3fd9..2d493a3 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig @@ -32,12 +32,15 @@ config SPARC select HAVE_NMI_WATCHDOG if SPARC64 select HAVE_BPF_JIT select GENERIC_SMP_IDLE_THREAD + select GENERIC_CMOS_UPDATE + select GENERIC_CLOCKEVENTS config SPARC32 def_bool !64BIT select GENERIC_ATOMIC64 select CLZ_TAB select ARCH_THREAD_INFO_ALLOCATOR + select ARCH_USES_GETTIMEOFFSET config SPARC64 def_bool 64BIT @@ -77,13 +80,6 @@ config BITS default 32 if SPARC32 default 64 if SPARC64 -config GENERIC_CMOS_UPDATE - bool - default y - -config GENERIC_CLOCKEVENTS - def_bool y - config IOMMU_HELPER bool default y if SPARC64 @@ -274,8 +270,6 @@ config HOTPLUG_CPU can be controlled through /sys/devices/system/cpu/cpu#. Say N if you want to disable CPU hotplug. -source "kernel/time/Kconfig" - if SPARC64 source "drivers/cpufreq/Kconfig" diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig index 74239dd..6ad6219 100644 --- a/arch/tile/Kconfig +++ b/arch/tile/Kconfig @@ -14,6 +14,7 @@ config TILE select HAVE_SYSCALL_WRAPPERS if TILEGX select SYS_HYPERVISOR select ARCH_HAVE_NMI_SAFE_CMPXCHG + select GENERIC_CLOCKEVENTS # FIXME: investigate whether we need/want these options. # select HAVE_IOREMAP_PROT @@ -47,9 +48,6 @@ config NEED_PER_CPU_PAGE_FIRST_CHUNK config SYS_SUPPORTS_HUGETLBFS def_bool y -config GENERIC_CLOCKEVENTS - def_bool y - # FIXME: tilegx can implement a more efficient rwsem. config RWSEM_GENERIC_SPINLOCK def_bool y @@ -139,8 +137,6 @@ config NR_CPUS smaller kernel memory footprint results from using a smaller value on chips with fewer tiles. -source "kernel/time/Kconfig" - source "kernel/Kconfig.hz" config KEXEC diff --git a/arch/um/Kconfig.common b/arch/um/Kconfig.common index 43ef890..cb837c2 100644 --- a/arch/um/Kconfig.common +++ b/arch/um/Kconfig.common @@ -10,6 +10,7 @@ config UML select GENERIC_IRQ_SHOW select GENERIC_CPU_DEVICES select GENERIC_IO + select GENERIC_CLOCKEVENTS config MMU bool @@ -52,10 +53,6 @@ config GENERIC_BUG default y depends on BUG -config GENERIC_CLOCKEVENTS - bool - default y - config HZ int default 100 diff --git a/arch/um/Kconfig.um b/arch/um/Kconfig.um index 70fd690..bf87f25 100644 --- a/arch/um/Kconfig.um +++ b/arch/um/Kconfig.um @@ -10,7 +10,6 @@ config STATIC_LINK 2.75G) for UML. source "mm/Kconfig" -source "kernel/time/Kconfig" config LD_SCRIPT_STATIC bool diff --git a/arch/unicore32/Kconfig b/arch/unicore32/Kconfig index eeb8054..47ad521 100644 --- a/arch/unicore32/Kconfig +++ b/arch/unicore32/Kconfig @@ -25,9 +25,6 @@ config HAVE_PWM config GENERIC_GPIO def_bool y -config GENERIC_CLOCKEVENTS - bool - config GENERIC_CSUM def_bool y @@ -146,8 +143,6 @@ endmenu menu "Kernel Features" -source "kernel/time/Kconfig" - source "kernel/Kconfig.preempt" source "kernel/Kconfig.hz" diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 0b2d5f2..66cc380 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -85,6 +85,13 @@ config X86 select GENERIC_SMP_IDLE_THREAD select HAVE_ARCH_SECCOMP_FILTER select BUILDTIME_EXTABLE_SORT + select GENERIC_CMOS_UPDATE + select CLOCKSOURCE_WATCHDOG + select GENERIC_CLOCKEVENTS + select ARCH_CLOCKSOURCE_DATA if X86_64 + select GENERIC_CLOCKEVENTS_BROADCAST if X86_64 || (X86_32 && X86_LOCAL_APIC) + select GENERIC_TIME_VSYSCALL if X86_64 + select KTIME_SCALAR if X86_32 config INSTRUCTION_DECODER def_bool (KPROBES || PERF_EVENTS || UPROBES) @@ -99,23 +106,6 @@ config ARCH_DEFCONFIG default "arch/x86/configs/i386_defconfig" if X86_32 default "arch/x86/configs/x86_64_defconfig" if X86_64 -config GENERIC_CMOS_UPDATE - def_bool y - -config CLOCKSOURCE_WATCHDOG - def_bool y - -config GENERIC_CLOCKEVENTS - def_bool y - -config ARCH_CLOCKSOURCE_DATA - def_bool y - depends on X86_64 - -config GENERIC_CLOCKEVENTS_BROADCAST - def_bool y - depends on X86_64 || (X86_32 && X86_LOCAL_APIC) - config LOCKDEP_SUPPORT def_bool y @@ -166,10 +156,6 @@ config RWSEM_XCHGADD_ALGORITHM config GENERIC_CALIBRATE_DELAY def_bool y -config GENERIC_TIME_VSYSCALL - bool - default X86_64 - config ARCH_HAS_CPU_RELAX def_bool y @@ -236,9 +222,6 @@ config ARCH_HWEIGHT_CFLAGS default "-fcall-saved-ecx -fcall-saved-edx" if X86_32 default "-fcall-saved-rdi -fcall-saved-rsi -fcall-saved-rdx -fcall-saved-rcx -fcall-saved-r8 -fcall-saved-r9 -fcall-saved-r10 -fcall-saved-r11" if X86_64 -config KTIME_SCALAR - def_bool X86_32 - config ARCH_CPU_PROBE_RELEASE def_bool y depends on HOTPLUG_CPU @@ -261,8 +244,6 @@ config ZONE_DMA If unsure, say Y. -source "kernel/time/Kconfig" - config SMP bool "Symmetric multi-processing support" ---help--- diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c index ad0de0c..9cc7b43 100644 --- a/arch/x86/kernel/hpet.c +++ b/arch/x86/kernel/hpet.c @@ -94,13 +94,18 @@ static int hpet_verbose; static int __init hpet_setup(char *str) { - if (str) { + while (str) { + char *next = strchr(str, ','); + + if (next) + *next++ = 0; if (!strncmp("disable", str, 7)) boot_hpet_disable = 1; if (!strncmp("force", str, 5)) hpet_force_user = 1; if (!strncmp("verbose", str, 7)) hpet_verbose = 1; + str = next; } return 1; } @@ -319,8 +324,6 @@ static void hpet_set_mode(enum clock_event_mode mode, now = hpet_readl(HPET_COUNTER); cmp = now + (unsigned int) delta; cfg = hpet_readl(HPET_Tn_CFG(timer)); - /* Make sure we use edge triggered interrupts */ - cfg &= ~HPET_TN_LEVEL; cfg |= HPET_TN_ENABLE | HPET_TN_PERIODIC | HPET_TN_SETVAL | HPET_TN_32BIT; hpet_writel(cfg, HPET_Tn_CFG(timer)); @@ -787,15 +790,16 @@ static int hpet_clocksource_register(void) return 0; } +static u32 *hpet_boot_cfg; + /** * hpet_enable - Try to setup the HPET timer. Returns 1 on success. */ int __init hpet_enable(void) { - unsigned long hpet_period; - unsigned int id; + u32 hpet_period, cfg, id; u64 freq; - int i; + unsigned int i, last; if (!is_hpet_capable()) return 0; @@ -847,15 +851,45 @@ int __init hpet_enable(void) id = hpet_readl(HPET_ID); hpet_print_config(); + last = (id & HPET_ID_NUMBER) >> HPET_ID_NUMBER_SHIFT; + #ifdef CONFIG_HPET_EMULATE_RTC /* * The legacy routing mode needs at least two channels, tick timer * and the rtc emulation channel. */ - if (!(id & HPET_ID_NUMBER)) + if (!last) goto out_nohpet; #endif + cfg = hpet_readl(HPET_CFG); + hpet_boot_cfg = kmalloc((last + 2) * sizeof(*hpet_boot_cfg), + GFP_KERNEL); + if (hpet_boot_cfg) + *hpet_boot_cfg = cfg; + else + pr_warn("HPET initial state will not be saved\n"); + cfg &= ~(HPET_CFG_ENABLE | HPET_CFG_LEGACY); + hpet_writel(cfg, HPET_Tn_CFG(i)); + if (cfg) + pr_warn("HPET: Unrecognized bits %#x set in global cfg\n", + cfg); + + for (i = 0; i <= last; ++i) { + cfg = hpet_readl(HPET_Tn_CFG(i)); + if (hpet_boot_cfg) + hpet_boot_cfg[i + 1] = cfg; + cfg &= ~(HPET_TN_ENABLE | HPET_TN_LEVEL | HPET_TN_FSB); + hpet_writel(cfg, HPET_Tn_CFG(i)); + cfg &= ~(HPET_TN_PERIODIC | HPET_TN_PERIODIC_CAP + | HPET_TN_64BIT_CAP | HPET_TN_32BIT | HPET_TN_ROUTE + | HPET_TN_FSB | HPET_TN_FSB_CAP); + if (cfg) + pr_warn("HPET: Unrecognized bits %#x set in cfg#%u\n", + cfg, i); + } + hpet_print_config(); + if (hpet_clocksource_register()) goto out_nohpet; @@ -923,14 +957,28 @@ fs_initcall(hpet_late_init); void hpet_disable(void) { if (is_hpet_capable() && hpet_virt_address) { - unsigned int cfg = hpet_readl(HPET_CFG); + unsigned int cfg = hpet_readl(HPET_CFG), id, last; - if (hpet_legacy_int_enabled) { + if (hpet_boot_cfg) + cfg = *hpet_boot_cfg; + else if (hpet_legacy_int_enabled) { cfg &= ~HPET_CFG_LEGACY; hpet_legacy_int_enabled = 0; } cfg &= ~HPET_CFG_ENABLE; hpet_writel(cfg, HPET_CFG); + + if (!hpet_boot_cfg) + return; + + id = hpet_readl(HPET_ID); + last = ((id & HPET_ID_NUMBER) >> HPET_ID_NUMBER_SHIFT); + + for (id = 0; id <= last; ++id) + hpet_writel(hpet_boot_cfg[id + 1], HPET_Tn_CFG(id)); + + if (*hpet_boot_cfg & HPET_CFG_ENABLE) + hpet_writel(*hpet_boot_cfg, HPET_CFG); } } diff --git a/include/linux/time.h b/include/linux/time.h index 33a92ea..179f4d6 100644 --- a/include/linux/time.h +++ b/include/linux/time.h @@ -167,7 +167,6 @@ extern void get_monotonic_boottime(struct timespec *ts); extern struct timespec timespec_trunc(struct timespec t, unsigned gran); extern int timekeeping_valid_for_hres(void); extern u64 timekeeping_max_deferment(void); -extern void timekeeping_leap_insert(int leapsecond); extern int timekeeping_inject_offset(struct timespec *ts); struct tms; diff --git a/init/Kconfig b/init/Kconfig index ccb5248..81816b8 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -390,6 +390,7 @@ config AUDIT_LOGINUID_IMMUTABLE but may not be backwards compatible with older init systems. source "kernel/irq/Kconfig" +source "kernel/time/Kconfig" menu "RCU Subsystem" diff --git a/kernel/time/Kconfig b/kernel/time/Kconfig index a20dc8a..fd42bd4 100644 --- a/kernel/time/Kconfig +++ b/kernel/time/Kconfig @@ -2,6 +2,55 @@ # Timer subsystem related configuration options # +# Options selectable by arch Kconfig + +# Watchdog function for clocksources to detect instabilities +config CLOCKSOURCE_WATCHDOG + bool + +# Architecture has extra clocksource data +config ARCH_CLOCKSOURCE_DATA + bool + +# Timekeeping vsyscall support +config GENERIC_TIME_VSYSCALL + bool + +# ktime_t scalar 64bit nsec representation +config KTIME_SCALAR + bool + +# Old style timekeeping +config ARCH_USES_GETTIMEOFFSET + bool + +# The generic clock events infrastructure +config GENERIC_CLOCKEVENTS + bool + +# Migration helper. Builds, but does not invoke +config GENERIC_CLOCKEVENTS_BUILD + bool + default y + depends on GENERIC_CLOCKEVENTS + +# Clockevents broadcasting infrastructure +config GENERIC_CLOCKEVENTS_BROADCAST + bool + depends on GENERIC_CLOCKEVENTS + +# Automatically adjust the min. reprogramming time for +# clock event device +config GENERIC_CLOCKEVENTS_MIN_ADJUST + bool + +# Generic update of CMOS clock +config GENERIC_CMOS_UPDATE + bool + +if GENERIC_CLOCKEVENTS +menu "Timers subsystem" + # Core internal switch. Selected by NO_HZ / HIGH_RES_TIMERS. This is # only related to the tick functionality. Oneshot clockevent devices # are supported independ of this. @@ -26,10 +75,5 @@ config HIGH_RES_TIMERS hardware is not capable then this option only increases the size of the kernel image. -config GENERIC_CLOCKEVENTS_BUILD - bool - default y - depends on GENERIC_CLOCKEVENTS - -config GENERIC_CLOCKEVENTS_MIN_ADJUST - bool +endmenu +endif diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c index f03fd83..70b33ab 100644 --- a/kernel/time/ntp.c +++ b/kernel/time/ntp.c @@ -412,6 +412,7 @@ int second_overflow(unsigned long secs) if (secs % 86400 == 0) { leap = -1; time_state = TIME_OOP; + time_tai++; printk(KERN_NOTICE "Clock: inserting leap second 23:59:60 UTC\n"); } @@ -426,7 +427,6 @@ int second_overflow(unsigned long secs) } break; case TIME_OOP: - time_tai++; time_state = TIME_WAIT; break; @@ -473,8 +473,6 @@ int second_overflow(unsigned long secs) << NTP_SCALE_SHIFT; time_adjust = 0; - - out: spin_unlock_irqrestore(&ntp_lock, flags); @@ -559,10 +557,10 @@ static inline void process_adj_status(struct timex *txc, struct timespec *ts) /* only set allowed bits */ time_status &= STA_RONLY; time_status |= txc->status & ~STA_RONLY; - } + /* - * Called with the xtime lock held, so we can access and modify + * Called with ntp_lock held, so we can access and modify * all the global NTP state: */ static inline void process_adjtimex_modes(struct timex *txc, struct timespec *ts) diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index d66b213..6e46cac 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -240,7 +240,6 @@ void getnstimeofday(struct timespec *ts) timespec_add_ns(ts, nsecs); } - EXPORT_SYMBOL(getnstimeofday); ktime_t ktime_get(void) @@ -357,8 +356,8 @@ void do_gettimeofday(struct timeval *tv) tv->tv_sec = now.tv_sec; tv->tv_usec = now.tv_nsec/1000; } - EXPORT_SYMBOL(do_gettimeofday); + /** * do_settimeofday - Sets the time of day * @tv: pointer to the timespec variable containing the new time @@ -392,7 +391,6 @@ int do_settimeofday(const struct timespec *tv) return 0; } - EXPORT_SYMBOL(do_settimeofday); |