diff options
author | David Gwynne <dlg@cvs.openbsd.org> | 2016-10-25 06:20:42 +0000 |
---|---|---|
committer | David Gwynne <dlg@cvs.openbsd.org> | 2016-10-25 06:20:42 +0000 |
commit | 0711c8b9635c47ced6e3e598c8a4046314e1d681 (patch) | |
tree | 2a27d098eb6093f49da8862e25c16481e1054ceb /sys/dev/isa | |
parent | 1bedfc00428734c6a101151fb94b4bf64e25b4d2 (diff) |
mask and unmask the interrupt source in an intx specific intr handler.
it seems devices using levelled intx interrupts need to explicitely ack
interrupts by masking and unmasking the source around the completion
ring handling. without this completions can be lost, which in turn
causes long (permanent?) stalls in the block layer under heavy write
load.
ive experienced this problem with an intel nvme part that only has
intx and msix support. because we dont support msix yet we only
use intx on it. it appeared to lock up before this fix.
this has been tested on both that intel board and a samsung with msi.
this fix was based on work found in code by nonaka
Diffstat (limited to 'sys/dev/isa')
0 files changed, 0 insertions, 0 deletions