linux/arch
Anna-Maria Behnsen b7f0eb8c9b powerpc/rtas: Use fsleep() to minimize additional sleep duration
When commit 38f7b7067d ("powerpc/rtas: rtas_busy_delay() improvements")
was introduced, documentation about proper usage of sleep related functions
was outdated.

The commit message references the usage of a HZ=100 system. When using a
20ms sleep duration on such a system and therefore using msleep(), the
possible additional slack will be +10ms.

When the system is configured with HZ=100 the granularity of a jiffy and of
a bucket of the lowest timer wheel level is 10ms. To make sure a timer will
not expire early (when queueing of the timer races with an concurrent
update of jiffies), timers are always queued into the next bucket. This is
the reason for the maximal possible slack of 10ms.

fsleep() limits the maximal possible slack to 25% by making threshold
between usleep_range() and msleep() HZ dependent. As soon as the accuracy
of msleep() is sufficient, the less expensive timer list timer based
sleeping function is used instead of the more expensive hrtimer based
usleep_range() function. The udelay() will not be used in this specific
usecase as the lowest sleep length is larger than 1 millisecond.

Use fsleep() directly instead of using an own heuristic for the best
sleeping mechanism to use.

Signed-off-by: Anna-Maria Behnsen <anna-maria@linutronix.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Acked-by: Michael Ellerman <mpe@ellerman.id.au> (powerpc)
Link: https://lore.kernel.org/all/20241014-devel-anna-maria-b4-timers-flseep-v3-13-dc8b907cb62f@linutronix.de
2024-10-16 00:36:48 +02:00
..
alpha asm-generic updates for 6.12 2024-09-26 11:54:40 -07:00
arc Kbuild updates for v6.12 2024-09-24 13:02:06 -07:00
arm soc: convert ep93xx to devicetree 2024-09-26 12:00:25 -07:00
arm64 x86: 2024-09-28 09:20:14 -07:00
csky mm: make arch_get_unmapped_area() take vm_flags by default 2024-09-09 16:39:13 -07:00
hexagon hexagon: vdso: Fix build failure 2024-09-23 08:17:50 -07:00
loongarch x86: 2024-09-28 09:20:14 -07:00
m68k m68knommu: updates and fixes for v6.12 2024-09-24 10:48:44 -07:00
microblaze microblaze: don't treat zero reserved memory regions as error 2024-08-25 15:26:30 -07:00
mips x86: 2024-09-28 09:20:14 -07:00
nios2 mm: remove legacy install_special_mapping() code 2024-09-01 20:26:13 -07:00
openrisc openrisc: convert to generic syscall table 2024-07-10 14:23:38 +02:00
parisc [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
powerpc powerpc/rtas: Use fsleep() to minimize additional sleep duration 2024-10-16 00:36:48 +02:00
riscv x86: 2024-09-28 09:20:14 -07:00
s390 x86: 2024-09-28 09:20:14 -07:00
sh sh updates for v6.12 2024-09-27 10:10:21 -07:00
sparc This includes the following changes related to sparc for v6.12: 2024-09-25 11:21:06 -07:00
um This pull request contains the following changes for UML: 2024-09-27 12:48:48 -07:00
x86 ntp: Remove unused tick_nsec 2024-10-02 16:53:38 +02:00
xtensa ALong with the usual shower of singleton patches, notable patch series in 2024-09-21 07:29:05 -07:00
.gitignore
Kconfig Rust changes for v6.12 2024-09-25 10:25:40 -07:00