Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 20dcfe1b authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull timer updates from Thomas Gleixner:
 "Nothing exciting, just the usual pile of fixes, updates and cleanups:

   - A bunch of clocksource driver updates

   - Removal of CONFIG_TIMER_STATS and the related /proc file

   - More posix timer slim down work

   - A scalability enhancement in the tick broadcast code

   - Math cleanups"

* 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (23 commits)
  hrtimer: Catch invalid clockids again
  math64, tile: Fix build failure
  clocksource/drivers/arm_arch_timer:: Mark cyclecounter __ro_after_init
  timerfd: Protect the might cancel mechanism proper
  timer_list: Remove useless cast when printing
  time: Remove CONFIG_TIMER_STATS
  clocksource/drivers/arm_arch_timer: Work around Hisilicon erratum 161010101
  clocksource/drivers/arm_arch_timer: Introduce generic errata handling infrastructure
  clocksource/drivers/arm_arch_timer: Remove fsl-a008585 parameter
  clocksource/drivers/arm_arch_timer: Add dt binding for hisilicon-161010101 erratum
  clocksource/drivers/ostm: Add renesas-ostm timer driver
  clocksource/drivers/ostm: Document renesas-ostm timer DT bindings
  clocksource/drivers/tcb_clksrc: Use 32 bit tcb as sched_clock
  clocksource/drivers/gemini: Add driver for the Cortina Gemini
  clocksource: add DT bindings for Cortina Gemini
  clockevents: Add a clkevt-of mechanism like clksrc-of
  tick/broadcast: Reduce lock cacheline contention
  timers: Omit POSIX timer stuff from task_struct when disabled
  x86/timer: Make delay() work during early bootup
  delay: Add explanation of udelay() inaccuracy
  ...
parents c9b9f207 336a9cde
Loading
Loading
Loading
Loading
+0 −9
Original line number Diff line number Diff line
@@ -549,15 +549,6 @@
			loops can be debugged more effectively on production
			systems.

	clocksource.arm_arch_timer.fsl-a008585=
			[ARM64]
			Format: <bool>
			Enable/disable the workaround of Freescale/NXP
			erratum A-008585.  This can be useful for KVM
			guests, if the guest device tree doesn't show the
			erratum.  If unspecified, the workaround is
			enabled based on the device tree.

	clearcpuid=BITNUM [X86]
			Disable CPUID feature X for the kernel. See
			arch/x86/include/asm/cpufeatures.h for the valid bit
+6 −0
Original line number Diff line number Diff line
@@ -31,6 +31,12 @@ to deliver its interrupts via SPIs.
  This also affects writes to the tval register, due to the implicit
  counter read.

- hisilicon,erratum-161010101 : A boolean property. Indicates the
  presence of Hisilicon erratum 161010101, which says that reading the
  counters is unreliable in some cases, and reads may return a value 32
  beyond the correct value. This also affects writes to the tval
  registers, due to the implicit counter read.

** Optional properties:

- arm,cpu-registers-not-fw-configured : Firmware does not initialize
+22 −0
Original line number Diff line number Diff line
Cortina Systems Gemini timer

This timer is embedded in the Cortina Systems Gemini SoCs.

Required properties:

- compatible : Must be "cortina,gemini-timer"
- reg : Should contain registers location and length
- interrupts : Should contain the three timer interrupts with
  flags for rising edge
- syscon : a phandle to the global Gemini system controller

Example:

timer@43000000 {
	compatible = "cortina,gemini-timer";
	reg = <0x43000000 0x1000>;
	interrupts = <14 IRQ_TYPE_EDGE_RISING>, /* Timer 1 */
		   <15 IRQ_TYPE_EDGE_RISING>, /* Timer 2 */
		   <16 IRQ_TYPE_EDGE_RISING>; /* Timer 3 */
	syscon = <&syscon>;
};
+30 −0
Original line number Diff line number Diff line
* Renesas OS Timer (OSTM)

The OSTM is a multi-channel 32-bit timer/counter with fixed clock
source that can operate in either interval count down timer or free-running
compare match mode.

Channels are independent from each other.

Required Properties:

  - compatible: must be one or more of the following:
    - "renesas,r7s72100-ostm" for the r7s72100 OSTM
    - "renesas,ostm" for any OSTM
		This is a fallback for the above renesas,*-ostm entries

  - reg: base address and length of the register block for a timer channel.

  - interrupts: interrupt specifier for the timer channel.

  - clocks: clock specifier for the timer channel.

Example: R7S72100 (RZ/A1H) OSTM node

	ostm0: timer@fcfec000 {
		compatible = "renesas,r7s72100-ostm", "renesas,ostm";
		reg = <0xfcfec000 0x30>;
		interrupts = <GIC_SPI 102 IRQ_TYPE_EDGE_RISING>;
		clocks = <&mstp5_clks R7S72100_CLK_OSTM0>;
		power-domains = <&cpg_clocks>;
	};
+0 −73
Original line number Diff line number Diff line
timer_stats - timer usage statistics
------------------------------------

timer_stats is a debugging facility to make the timer (ab)usage in a Linux
system visible to kernel and userspace developers. If enabled in the config
but not used it has almost zero runtime overhead, and a relatively small
data structure overhead. Even if collection is enabled runtime all the
locking is per-CPU and lookup is hashed.

timer_stats should be used by kernel and userspace developers to verify that
their code does not make unduly use of timers. This helps to avoid unnecessary
wakeups, which should be avoided to optimize power consumption.

It can be enabled by CONFIG_TIMER_STATS in the "Kernel hacking" configuration
section.

timer_stats collects information about the timer events which are fired in a
Linux system over a sample period:

- the pid of the task(process) which initialized the timer
- the name of the process which initialized the timer
- the function where the timer was initialized
- the callback function which is associated to the timer
- the number of events (callbacks)

timer_stats adds an entry to /proc: /proc/timer_stats

This entry is used to control the statistics functionality and to read out the
sampled information.

The timer_stats functionality is inactive on bootup.

To activate a sample period issue:
# echo 1 >/proc/timer_stats

To stop a sample period issue:
# echo 0 >/proc/timer_stats

The statistics can be retrieved by:
# cat /proc/timer_stats

While sampling is enabled, each readout from /proc/timer_stats will see
newly updated statistics. Once sampling is disabled, the sampled information
is kept until a new sample period is started. This allows multiple readouts.

Sample output of /proc/timer_stats:

Timerstats sample period: 3.888770 s
  12,     0 swapper          hrtimer_stop_sched_tick (hrtimer_sched_tick)
  15,     1 swapper          hcd_submit_urb (rh_timer_func)
   4,   959 kedac            schedule_timeout (process_timeout)
   1,     0 swapper          page_writeback_init (wb_timer_fn)
  28,     0 swapper          hrtimer_stop_sched_tick (hrtimer_sched_tick)
  22,  2948 IRQ 4            tty_flip_buffer_push (delayed_work_timer_fn)
   3,  3100 bash             schedule_timeout (process_timeout)
   1,     1 swapper          queue_delayed_work_on (delayed_work_timer_fn)
   1,     1 swapper          queue_delayed_work_on (delayed_work_timer_fn)
   1,     1 swapper          neigh_table_init_no_netlink (neigh_periodic_timer)
   1,  2292 ip               __netdev_watchdog_up (dev_watchdog)
   1,    23 events/1         do_cache_clean (delayed_work_timer_fn)
90 total events, 30.0 events/sec

The first column is the number of events, the second column the pid, the third
column is the name of the process. The forth column shows the function which
initialized the timer and in parenthesis the callback function which was
executed on expiry.

    Thomas, Ingo

Added flag to indicate 'deferrable timer' in /proc/timer_stats. A deferrable
timer will appear as follows
  10D,     1 swapper          queue_delayed_work_on (delayed_work_timer_fn)
Loading