Module Name: src Committed By: jdolecek Date: Tue Aug 1 22:02:32 UTC 2017
Modified Files: src/sys/dev/ic [jdolecek-ncq]: ahcisata_core.c ahcisatavar.h mvsatavar.h siisata.c siisatavar.h Log Message: fix logic bug in processing of finished commands - mask of active commands can change during the loop as c_intr() callback can queue new commands, so the interrupt routine should only mark as finished those which were actually active before the loop started; otherwise the code marked as finished commands which were just started, and being executed by HBA, leading to all sorts of data corruption while here mark the active mask volatile, as it is modified from interrupt context this fixes for good the random crashes, short reads, and fatal command errors which I've been tracing down for past couple weeks thanks to Jonathan (jakllsch@) for testing, and a script to easily triggered the condition, and led to this bug being finally found and squashed To generate a diff of this commit: cvs rdiff -u -r1.57.6.24 -r1.57.6.25 src/sys/dev/ic/ahcisata_core.c cvs rdiff -u -r1.17.6.2 -r1.17.6.3 src/sys/dev/ic/ahcisatavar.h cvs rdiff -u -r1.2.48.2 -r1.2.48.3 src/sys/dev/ic/mvsatavar.h cvs rdiff -u -r1.30.4.30 -r1.30.4.31 src/sys/dev/ic/siisata.c cvs rdiff -u -r1.6.48.2 -r1.6.48.3 src/sys/dev/ic/siisatavar.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.