mirror of
https://github.com/torvalds/linux.git
synced 2025-11-06 03:29:11 +02:00
A cleanup patch from my legacy timer series broke ia64 and led
to RCU stall errors and a fast system clock:
[ 909.360108] INFO: task systemd-sysv-ge:200 blocked for more than 127 seconds.
[ 909.360108] Not tainted 5.10.0+ #130
[ 909.360108] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[ 909.360108] task:systemd-sysv-ge state:D stack: 0 pid: 200 ppid: 189 flags:0x00000000
[ 909.364108]
[ 909.364108] Call Trace:
[ 909.364423] [<a00000010109b210>] __schedule+0x890/0x21e0
[ 909.364423] sp=e0000100487d7b70 bsp=e0000100487d1748
[ 909.368423] [<a00000010109cc00>] schedule+0xa0/0x240
[ 909.368423] sp=e0000100487d7b90 bsp=e0000100487d16e0
[ 909.368558] [<a00000010109ce70>] io_schedule+0x70/0xa0
[ 909.368558] sp=e0000100487d7b90 bsp=e0000100487d16c0
[ 909.372290] [<a00000010109e1c0>] bit_wait_io+0x20/0xe0
[ 909.372290] sp=e0000100487d7b90 bsp=e0000100487d1698
[ 909.374168] rcu: INFO: rcu_sched detected stalls on CPUs/tasks:
[ 909.376290] [<a00000010109d860>] __wait_on_bit+0xc0/0x1c0
[ 909.376290] sp=e0000100487d7b90 bsp=e0000100487d1648
[ 909.374168] rcu: 3-....: (2 ticks this GP) idle=19e/1/0x4000000000000002 softirq=1581/1581 fqs=2
[ 909.374168] (detected by 0, t=5661 jiffies, g=1089, q=3)
[ 909.376290] [<a00000010109da80>] out_of_line_wait_on_bit+0x120/0x140
[ 909.376290] sp=e0000100487d7b90 bsp=e0000100487d1610
[ 909.374168] Task dump for CPU 3:
[ 909.374168] task:khungtaskd state:R running task
Revert most of my patch to make this work again, including the extra
update_process_times()/profile_tick() and the local_irq_enable() in the
loop that I expected not to be needed here.
I have not found out exactly what goes wrong, and would suggest that
someone with hardware access tries to convert this code into a singleshot
clockevent driver, which should give better behavior in all cases.
Reported-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Fixes:
|
||
|---|---|---|
| .. | ||
| syscalls | ||
| .gitignore | ||
| acpi-ext.c | ||
| acpi.c | ||
| asm-offsets.c | ||
| audit.c | ||
| brl_emu.c | ||
| crash.c | ||
| crash_dump.c | ||
| cyclone.c | ||
| dma-mapping.c | ||
| efi.c | ||
| efi_stub.S | ||
| elfcore.c | ||
| entry.h | ||
| entry.S | ||
| err_inject.c | ||
| esi.c | ||
| esi_stub.S | ||
| fsys.S | ||
| fsyscall_gtod_data.h | ||
| ftrace.c | ||
| gate-data.S | ||
| gate.lds.S | ||
| gate.S | ||
| head.S | ||
| ia64_ksyms.c | ||
| iosapic.c | ||
| irq.c | ||
| irq.h | ||
| irq_ia64.c | ||
| irq_lsapic.c | ||
| ivt.S | ||
| kprobes.c | ||
| machine_kexec.c | ||
| Makefile | ||
| Makefile.gate | ||
| mca.c | ||
| mca_asm.S | ||
| mca_drv.c | ||
| mca_drv.h | ||
| mca_drv_asm.S | ||
| minstate.h | ||
| module.c | ||
| msi_ia64.c | ||
| nr-irqs.c | ||
| numa.c | ||
| pal.S | ||
| palinfo.c | ||
| patch.c | ||
| pci-dma.c | ||
| perfmon_default_smpl.c | ||
| perfmon_generic.h | ||
| perfmon_itanium.h | ||
| perfmon_mckinley.h | ||
| perfmon_montecito.h | ||
| process.c | ||
| ptrace.c | ||
| relocate_kernel.S | ||
| sal.c | ||
| salinfo.c | ||
| setup.c | ||
| sigframe.h | ||
| signal.c | ||
| smp.c | ||
| smpboot.c | ||
| stacktrace.c | ||
| sys_ia64.c | ||
| time.c | ||
| topology.c | ||
| traps.c | ||
| unaligned.c | ||
| uncached.c | ||
| unwind.c | ||
| unwind_decoder.c | ||
| unwind_i.h | ||
| vmlinux.lds.S | ||