public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] m68k Atari SCSI fixes
@ 2014-03-01  7:51 Michael Schmitz
  2014-03-01  7:51 ` [PATCH 1/3] m68k/atari - convert atari_scsi falcon_get_lock() to use wait_event() Michael Schmitz
                   ` (2 more replies)
  0 siblings, 3 replies; 15+ messages in thread
From: Michael Schmitz @ 2014-03-01  7:51 UTC (permalink / raw)
  To: linux-m68k; +Cc: geert, JBottomley, linux-scsi, arnd

All, 

please review the following patches to the m68k Atari NCR5380 SCSI code. 

The first patch is my corrected version of Arnd Bergmann's sleep_on removal RFC
series (2/16), tested on my Atari Falcon. Geert, please take this one through the   
linux-m68k tree so Arnd's sleep_on remove can go ahead. 

The second and third one are updates to the Atari NCR5380 drivers' error handling
(return codes updated) and queue_command() function (return SCSI_MLQEUE_HOST_BUSY  
if the lock for the SCSI/DMA hardware cannot be safely taken). Again, tested on my 
Falcon. These will need Ack from the SCSI maintainers but could be taken through
Geert's tree as well. 

This patch series supersedes a previous one of mine, due to a botch-up mingling parts
of patch 1 and 3. Apologies for spamming everyone again.

Please CC: me in on any replies, I am not subscribed to linux-scsi.

Thanks,

        Michael Schmitz 

[PATCH 1/3] m68k/atari - convert atari_scsi falcon_get_lock() to use wait_event()
[PATCH 2/3] m68k/atari - atari_scsi: change abort/reset return codes
[PATCH 3/3] m68k/atari - atari_scsi: punt if deadlocked

^ permalink raw reply	[flat|nested] 15+ messages in thread
* [PATCH, RFC 02/30] scsi: atari_scsi: fix sleep_on race
@ 2014-01-02 12:07 Arnd Bergmann
  2014-01-28 23:55 ` [PATCH 2/3] m68k/atari - atari_scsi: change abort/reset return codes Michael Schmitz
  0 siblings, 1 reply; 15+ messages in thread
From: Arnd Bergmann @ 2014-01-02 12:07 UTC (permalink / raw)
  To: linux-kernel
  Cc: Arnd Bergmann, Geert Uytterhoeven, James E.J. Bottomley,
	linux-scsi

sleep_on is known broken and going away. The atari_scsi driver is one of
two remaining users in the falcon_get_lock() function, which is a rather
crazy piece of code. This does not attempt to fix the driver's locking
scheme in general, but at least prevents falcon_get_lock from going to
sleep when no other thread holds the same lock or tries to get it,
and we no longer schedule with irqs disabled.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: James E.J. Bottomley <JBottomley@parallels.com>
Cc: linux-scsi@vger.kernel.org
---
 drivers/scsi/atari_scsi.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/atari_scsi.c b/drivers/scsi/atari_scsi.c
index a3e6c8a..b55a58a 100644
--- a/drivers/scsi/atari_scsi.c
+++ b/drivers/scsi/atari_scsi.c
@@ -90,6 +90,7 @@
 #include <linux/init.h>
 #include <linux/nvram.h>
 #include <linux/bitops.h>
+#include <linux/wait.h>
 
 #include <asm/setup.h>
 #include <asm/atarihw.h>
@@ -549,8 +550,10 @@ static void falcon_get_lock(void)
 
 	local_irq_save(flags);
 
-	while (!in_irq() && falcon_got_lock && stdma_others_waiting())
-		sleep_on(&falcon_fairness_wait);
+	wait_event_cmd(falcon_fairness_wait,
+		       !in_irq() && falcon_got_lock && stdma_others_waiting(),
+		       local_irq_restore(flags),
+		       local_irq_save(flags));
 
 	while (!falcon_got_lock) {
 		if (in_irq())
@@ -562,7 +565,10 @@ static void falcon_get_lock(void)
 			falcon_trying_lock = 0;
 			wake_up(&falcon_try_wait);
 		} else {
-			sleep_on(&falcon_try_wait);
+			wait_event_cmd(falcon_try_wait,
+				       !falcon_got_lock && !falcon_trying_lock,
+				       local_irq_restore(flags),
+				       local_irq_save(flags));
 		}
 	}
 
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2014-05-02  8:43 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-03-01  7:51 [PATCH 0/3] m68k Atari SCSI fixes Michael Schmitz
2014-03-01  7:51 ` [PATCH 1/3] m68k/atari - convert atari_scsi falcon_get_lock() to use wait_event() Michael Schmitz
2014-03-01 11:53   ` Arnd Bergmann
2014-03-01 23:05     ` schmitz
2014-03-06 13:48   ` Geert Uytterhoeven
2014-03-01  7:51 ` [PATCH 2/3] m68k/atari - atari_scsi: change abort/reset return codes Michael Schmitz
2014-03-11  8:21   ` Finn Thain
2014-03-11  8:28     ` Geert Uytterhoeven
2014-03-12  7:05       ` Michael Schmitz
2014-03-12 14:30         ` Finn Thain
2014-04-11 14:30           ` Sam Creasey
2014-03-12  7:03     ` Michael Schmitz
2014-05-02  8:43   ` [PATCH v2] " Michael Schmitz
2014-03-01  7:51 ` [PATCH 3/3] m68k/atari - atari_scsi: punt if deadlocked Michael Schmitz
  -- strict thread matches above, loose matches on Subject: below --
2014-01-02 12:07 [PATCH, RFC 02/30] scsi: atari_scsi: fix sleep_on race Arnd Bergmann
2014-01-28 23:55 ` [PATCH 2/3] m68k/atari - atari_scsi: change abort/reset return codes Michael Schmitz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox