• Ben Hutchings's avatar
    sfc: Clean up test interrupt handling · 1646a6f3
    Ben Hutchings authored
    Interrupts are normally generated by the event queues, moderated by
    timers.  However, they may also be triggered by detection of a 'fatal'
    error condition (e.g. memory parity error) or by the host writing to
    certain CSR fields as part of a self-test.
    
    The IRQ level/index used for these on Falcon rev B0 and Siena is set
    by the KER_INT_LEVE_SEL field and cached by the driver in
    efx_nic::fatal_irq_level.  Since this value is also relevant to
    self-tests rename the field to just 'irq_level'.
    
    Avoid unnecessary cache traffic by using a per-channel 'last_irq_cpu'
    field and only writing to the per-controller field when the interrupt
    matches efx_nic::irq_level.  Remove the volatile qualifier and use
    ACCESS_ONCE in the places we read these fields.
    Signed-off-by: default avatarBen Hutchings <bhutchings@solarflare.com>
    1646a6f3
falcon.c 50.7 KB