Skip to content
  • Andriy Gapon's avatar
    change interrupt event's list of handlers from TAILQ to CK_SLIST · 111b043c
    Andriy Gapon authored
    The primary reason for this commit is to separate mechanical and nearly
    mechanical code changes from an upcoming fix for unsafe teardown of
    shared interrupt handlers that have only filters (see D15905).
    
    The technical rationale is that SLIST is sufficient.  The only operation
    that gets worse performance -- O(n) instead of O(1) is a removal of a
    handler,  but it is not a critical operation and the list is expected to
    be rather short.
    
    Additionally, it is easier to reason about SLIST when considering the
    concurrent lock-free access to the list from the interrupt context and
    the interrupt thread.
    
    CK_SLIST is used because the upcoming change depends on the memory order
    provided by CK_SLIST insert and the fact that CL_SLIST remove does not
    trash the linkage in a removed element.
    
    While here, I also fixed a couple of whitespace issues, made code under
    ifdef notyet compilable, added a lock assertion to ithread_update() and
    made intr_event_execute_handlers() static as it had no external callers.
    
    Reviewed by:	cem (earlier version)
    MFC after:	4 weeks
    Differential Revision: https://reviews.freebsd.org/D16016
    111b043c