Messages in this thread Patch in this message | | | Date | Tue, 14 Feb 2006 13:20:31 +0100 | From | Ingo Molnar <> | Subject | [patch] hrtimer: round up relative start time on low-res arches |
| |
find below a patch with less impact than blanket upwards rounding of relatime timeouts. This i think is better for v2.6.16 - it accurately documents the problem architectures that have low-res do_gettimeofday(), and doesnt impact other architectures. This will go away with John's GTOD patchset. I've reviewed every architecture for the (worst-case) resolution of their do_gettimeofday() implementations, and this is the result of that review.
Ingo
-----
CONFIG_TIME_LOW_RES is a temporary way for architectures to signal that they simply return xtime in do_gettimeoffset(). In this corner-case we want to round up by resolution when starting a relative timer, to avoid short timeouts. This will go away with the GTOD framework.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
----
arch/frv/Kconfig | 4 ++++ arch/h8300/Kconfig | 4 ++++ arch/m68k/Kconfig | 4 ++++ arch/m68knommu/Kconfig | 4 ++++ arch/parisc/Kconfig | 5 +++++ arch/v850/Kconfig | 4 ++++ kernel/hrtimer.c | 13 ++++++++++++- 7 files changed, 37 insertions(+), 1 deletion(-)
Index: linux/arch/frv/Kconfig =================================================================== --- linux.orig/arch/frv/Kconfig +++ linux/arch/frv/Kconfig @@ -25,6 +25,10 @@ config GENERIC_HARDIRQS bool default n +config TIME_LOW_RES + bool + default y + mainmenu "Fujitsu FR-V Kernel Configuration" source "init/Kconfig" Index: linux/arch/h8300/Kconfig =================================================================== --- linux.orig/arch/h8300/Kconfig +++ linux/arch/h8300/Kconfig @@ -33,6 +33,10 @@ config GENERIC_CALIBRATE_DELAY bool default y +config TIME_LOW_RES + bool + default y + config ISA bool default y Index: linux/arch/m68k/Kconfig =================================================================== --- linux.orig/arch/m68k/Kconfig +++ linux/arch/m68k/Kconfig @@ -21,6 +21,10 @@ config GENERIC_CALIBRATE_DELAY bool default y +config TIME_LOW_RES + bool + default y + config ARCH_MAY_HAVE_PC_FDC bool depends on Q40 || (BROKEN && SUN3X) Index: linux/arch/m68knommu/Kconfig =================================================================== --- linux.orig/arch/m68knommu/Kconfig +++ linux/arch/m68knommu/Kconfig @@ -29,6 +29,10 @@ config GENERIC_CALIBRATE_DELAY bool default y +config TIME_LOW_RES + bool + default y + source "init/Kconfig" menu "Processor type and features" Index: linux/arch/parisc/Kconfig =================================================================== --- linux.orig/arch/parisc/Kconfig +++ linux/arch/parisc/Kconfig @@ -29,6 +29,11 @@ config GENERIC_CALIBRATE_DELAY bool default y +config TIME_LOW_RES + bool + depends on SMP + default y + config GENERIC_ISA_DMA bool Index: linux/arch/v850/Kconfig =================================================================== --- linux.orig/arch/v850/Kconfig +++ linux/arch/v850/Kconfig @@ -28,6 +28,10 @@ config GENERIC_IRQ_PROBE bool default y +config TIME_LOW_RES + bool + default y + # Turn off some random 386 crap that can affect device config config ISA bool Index: linux/kernel/hrtimer.c =================================================================== --- linux.orig/kernel/hrtimer.c +++ linux/kernel/hrtimer.c @@ -418,8 +418,19 @@ hrtimer_start(struct hrtimer *timer, kti /* Switch the timer base, if necessary: */ new_base = switch_hrtimer_base(timer, base); - if (mode == HRTIMER_REL) + if (mode == HRTIMER_REL) { tim = ktime_add(tim, new_base->get_time()); + /* + * CONFIG_TIME_LOW_RES is a temporary way for architectures + * to signal that they simply return xtime in + * do_gettimeoffset(). In this case we want to round up by + * resolution when starting a relative timer, to avoid short + * timeouts. This will go away with the GTOD framework. + */ +#ifdef CONFIG_TIME_LOW_RES + tim = ktime_add(tim, base->resolution); +#endif + } timer->expires = tim; enqueue_hrtimer(timer, new_base); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |