From: Finn Thain Date: Wed, 12 Nov 2014 05:12:08 +0000 (+1100) Subject: atari_scsi: Fix atari_scsi deadlocks on Falcon X-Git-Tag: omap-for-v3.19/fixes-for-merge-window~21^2^2~72 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=16b29e75a78ae03250233468b68f7ae467d3dc7a;p=pandora-kernel.git atari_scsi: Fix atari_scsi deadlocks on Falcon Don't disable irqs when waiting for the ST DMA "lock"; its release may require an interrupt. Introduce stdma_try_lock() for use in soft irq context. atari_scsi now tells the SCSI mid-layer to defer queueing a command if the ST DMA lock is not available, as per Michael's patch: http://marc.info/?l=linux-m68k&m=139095335824863&w=2 The falcon_got_lock variable is race prone: we can't disable IRQs while waiting to acquire the lock, so after acquiring it there must be some interval during which falcon_got_lock remains false. Introduce stdma_is_locked_by() to replace falcon_got_lock. The falcon_got_lock tests in the EH handlers are incorrect these days. It can happen that an EH handler is called after a command completes normally. Remove these checks along with falcon_got_lock. Also remove the complicated and racy fairness wait queues. If fairness is an issue (when SCSI competes with IDE for the ST DMA interrupt), the solution is likely to be a lower value for host->can_queue. Signed-off-by: Finn Thain Reviewed-by: Hannes Reinecke Tested-by: Michael Schmitz Acked-by: Geert Uytterhoeven Signed-off-by: Christoph Hellwig --- Reading git-diff-tree failed