My home server (Intel SS4200) started hanging once I generated an FMA topology for it that included the disk devices. That caused the fmd disk_transport module to start generating SMART and other SCSI transactions that are emulated by the sata framework.
sata_txlt_rw_completion, and similar, invoked as a result of interrupt processing, can cause sd to submit more commands in the same thread. Those commands, if intended to be processed synchronously, will end up in the hba's start routine which tends to cv_wait for interrupt processing to finish. That won't happen since the in-progress interrupt will never be completed. The machine hangs.
ffffff0001ecbc80 fffffffffbc287b0 0 0 104 ffffff00c57548b0
PC: resume_from_intr+0xb4 THREAD: thread_create_intr()
stack pointer for thread ffffff0001ecbc80: ffffff0001ecb3b0
[ ffffff0001ecb3b0 resume_from_intr+0xb4() ]
swtch+0x9f()
cv_timedwait+0xcf()
ahci`ahci_do_sync_start+0x116()
ahci`ahci_tran_start+0x178()
sata`sata_ext_smart_selftest_read_log+0x111()
sata`sata_build_lsense_page_10+0x264()
sata`sata_txlt_log_sense+0x17b()
sata`sata_scsi_start+0x19d()
scsi`scsi_transport+0xe6()
sd`sd_start_cmds+0x2f4()
sd`sd_return_command+0x11d()
sd`sdintr+0x521()
sata`sata_txlt_rw_completion+0x214()
ahci`ahci_intr_set_device_bits+0x2d0()
ahci`ahci_port_intr+0x152()
ahci`ahci_intr+0x71()
av_dispatch_autovect+0x78()
dispatch_hardint+0x2f()
switch_sp_and_call+0x13()