No description
  • C 98.2%
  • Assembly 1%
  • Makefile 0.3%
  • Shell 0.2%
  • Python 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
James Hogan 3a29ddb1c5 clockevents: Retry programming min delta up to 10 times
When CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=n, the call path
hrtimer_reprogram -> clockevents_program_event ->
clockevents_program_min_delta will not retry if the clock event driver
returns -ETIME.

If the driver could not satisfy the program_min_delta for any reason, the
lack of a retry means the CPU may not receive a tick interrupt, potentially
until the counter does a full period. This leads to rcu_sched timeout
messages as the stalled CPU is detected by other CPUs, and other issues if
the CPU is holding locks or other resources at the point at which it
stalls.

There have been a couple of observed mechanisms through which a clock event
driver could not satisfy the requested min_delta and return -ETIME.

With the MIPS GIC driver, the shared execution resource within MT cores
means inconventient latency due to execution of instructions from other
hardware threads in the core, within gic_next_event, can result in an event
being set in the past.

Additionally under virtualisation it is possible to get unexpected latency
during a clockevent device's set_next_event() callback which can make it
return -ETIME even for a delta based on min_delta_ns.

It isn't appropriate to use MIN_ADJUST in the virtualisation case as
occasional hypervisor induced high latency will cause min_delta_ns to
quickly increase to the maximum.

Instead, borrow the retry pattern from the MIN_ADJUST case, but without
making adjustments. Retry up to 10 times, each time increasing the
attempted delta by min_delta, before giving up.

[ Matt: Reworked the loop and made retry increase the delta. ]

Signed-off-by: James Hogan <jhogan@kernel.org>
Signed-off-by: Matt Redfearn <matt.redfearn@mips.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-mips@linux-mips.org
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: "Martin Schwidefsky" <schwidefsky@de.ibm.com>
Cc: James Hogan <james.hogan@mips.com>
Link: https://lkml.kernel.org/r/1508422643-6075-1-git-send-email-matt.redfearn@mips.com
2017-10-19 16:29:15 +02:00
arch timer: Remove expires and data arguments from DEFINE_TIMER 2017-10-05 15:01:20 +02:00
block block: fix a crash caused by wrong API 2017-09-25 08:56:05 -06:00
certs
crypto crypto: af_alg - update correct dst SGL entry 2017-09-20 17:42:42 +08:00
Documentation Merge branch 'for-4.14-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq 2017-10-03 10:44:03 -07:00
drivers libata: Convert timers to use timer_setup() 2017-10-17 17:37:37 +02:00
firmware
fs timer: Remove expires and data arguments from DEFINE_TIMER 2017-10-05 15:01:20 +02:00
include workqueue: Convert callback to use from_timer() 2017-10-05 15:01:22 +02:00
init
ipc fix a typo in put_compat_shm_info() 2017-09-25 20:41:46 -04:00
kernel clockevents: Retry programming min delta up to 10 times 2017-10-19 16:29:15 +02:00
lib timer: Remove expires and data arguments from DEFINE_TIMER 2017-10-05 15:01:20 +02:00
mm percpu: fix iteration to prevent skipping over block 2017-09-28 07:39:27 -07:00
net timer: Remove expires and data arguments from DEFINE_TIMER 2017-10-05 15:01:20 +02:00
samples
scripts objtool: Skip unreachable warnings for GCC 4.4 and older 2017-09-28 07:23:02 +02:00
security timer: Remove expires and data arguments from DEFINE_TIMER 2017-10-05 15:01:20 +02:00
sound timer: Remove expires and data arguments from DEFINE_TIMER 2017-10-05 15:01:20 +02:00
tools Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2017-10-01 12:06:31 -07:00
usr
virt
.cocciconfig
.get_maintainer.ignore
.gitattributes
.gitignore
.mailmap
COPYING
CREDITS
Kbuild
Kconfig
MAINTAINERS LED fixes for 4.14-rc3 2017-09-29 19:33:32 -07:00
Makefile Linux 4.14-rc3 2017-10-01 14:54:54 -07:00
README

Linux kernel
============

This file was moved to Documentation/admin-guide/README.rst

Please notice that there are several guides for kernel developers and users.
These guides can be rendered in a number of formats, like HTML and PDF.

In order to build the documentation, use ``make htmldocs`` or
``make pdfdocs``.

There are various text files in the Documentation/ subdirectory,
several of them using the Restructured Text markup notation.
See Documentation/00-INDEX for a list of what is contained in each file.

Please read the Documentation/process/changes.rst file, as it contains the
requirements for building and running the kernel, and information about
the problems which may result by upgrading your kernel.