[Bug 237078] generic_timer not handling interrupts properly
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Sun Apr 7 19:08:30 UTC 2019
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=237078
Bug ID: 237078
Summary: generic_timer not handling interrupts properly
Product: Base System
Version: CURRENT
Hardware: arm
OS: Any
Status: New
Severity: Affects Some People
Priority: ---
Component: arm
Assignee: freebsd-arm at FreeBSD.org
Reporter: andrew at tao11.riddles.org.uk
generic_timer.c installs interrupt handlers for up to four timer interrupts,
causing those interrupts to be enabled on the local PIC. But the handler that
it installs assumes that all interrupts come from a specific timer (either the
physical one on 32bit or the virtual one on 64bit).
If an interrupt occurs on the other timer, then the interrupt is never masked
or cleared, so a CPU is put into a permanent interrupt handling loop; this is
commonly observed on RPI2 platforms at least.
The unexpected interrupt can occur because while the driver attach routine
tries to mask off both the physical and virtual (on 32bit) interrupts, it does
this on only one CPU, when in fact each CPU has its own timer.
I have tested a crude workaround (not installing handlers for the unused
interrupts) which fixes the observed problems as far as I can determine.
This bug could potentially apply on 64bit as well, but I am not in a position
to test that.
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-arm
mailing list