CVSROOT: /cvs Module name: src Changes by: d...@cvs.openbsd.org 2016/10/25 00:20:41
Modified files: sys/dev/ic : nvme.c nvmevar.h sys/dev/pci : nvme_pci.c Log message: 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