[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