From: Michael Schmitz <schmitzmic@gmail.com>
To: Geert Uytterhoeven <geert@linux-m68k.org>, arnd@arndb.de
Cc: Michael Schmitz <schmitz@biophys.uni-duesseldorf.de>,
Linux//m68k <linux-m68k@vger.kernel.org>
Subject: Re: [PATCH, RFC 02/30] scsi: atari_scsi: fix sleep_on race
Date: Sun, 12 Jan 2014 14:40:41 +1300 [thread overview]
Message-ID: <52D1F299.7080909@gmail.com> (raw)
In-Reply-To: <70d98fc4293247b4d5a11235a1d676b6@biophys.uni-duesseldorf.de>
Arnd,
your patch breaks the Atari NCR5380 SCSI driver (easily verified using
ARAnyM). Last console output:
> scsi0: options CAN_QUEUE=8 CMD_PER_LUN=1 SCAT-GAT=0 TAGGED-QUEUING=no
> HOSTID=7 generic options AUTOSENSE REAL DMA SCSI-2 TAGGED QUEUING
> generic release=7
> scsi0 : Atari native SCSI
> blk_queue_max_segments: set to minimum 1
> scsi0: aborting command
> scsi 0:0:0:0: CDB:
> Inquiry: 12 00 00 00 24 00
>
> NCR5380 core release=7.
> NCR5380: coroutine isn't running.
> scsi0: no currently connected command
> scsi0: issue_queue
> scsi0: disconnected_queue
> random: nonblocking pool is initialized
>
> scsi0: !!BINGO!! Falcon has no lock in NCR5380_abort
> scsi0: warning : SCSI command probably completed successfully before
> abortion
No targets are connected, so the driver is expected to time out and
abort each INQUIRY command. This works fine with the unmodified version
of the driver (even though its locking scheme is well beyond crazy - I
grant you that much). Note that the unmodified version also works fine
on my actual Falcon hardware under moderate load (meaning to say, no
hardware instabilities are triggered that would cause the SCSI chip to
lock up and require a bus reset).
I'll debug this a bit to see where it gets stuck. Thanks for looking
into this ugly mess of code!
Cheers,
Michael
Michael Schmitz wrote:
> Geert,
>
> thanks for passing that on - I had in fact disabled that feature of
> the driver for a good part of the 3.x series of kernels while
> attempting to figure out what else is wrong with the locking scheme.
>
> I'll take a fresh stab at this.
>
> Cheers,
>
> Michael
>
>
> Am 03.01.2014 um 01:26 schrieb Geert Uytterhoeven:
>
>> ---------- Forwarded message ----------
>> From: Arnd Bergmann <arnd@arndb.de>
>> Date: Thu, Jan 2, 2014 at 1:07 PM
>> Subject: [PATCH, RFC 02/30] scsi: atari_scsi: fix sleep_on race
>> To: linux-kernel@vger.kernel.org
>> Cc: Arnd Bergmann <arnd@arndb.de>, Geert Uytterhoeven
>> <geert@linux-m68k.org>, "James E.J. Bottomley"
>> <JBottomley@parallels.com>, linux-scsi@vger.kernel.org
>>
>>
>> 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
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-m68k" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
next prev parent reply other threads:[~2014-01-12 1:40 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1388664474-1710039-1-git-send-email-arnd@arndb.de>
[not found] ` <1388664474-1710039-2-git-send-email-arnd@arndb.de>
2014-01-02 12:27 ` Fwd: [PATCH, RFC 01/30] ataflop: fix sleep_on races Geert Uytterhoeven
2014-01-05 1:39 ` Michael Schmitz
[not found] ` <1388664474-1710039-15-git-send-email-arnd@arndb.de>
2014-01-02 12:27 ` Fwd: [PATCH, RFC 14/30] tty/amiserial: avoid interruptible_sleep_on Geert Uytterhoeven
[not found] ` <1388664474-1710039-3-git-send-email-arnd@arndb.de>
2014-01-02 12:26 ` Fwd: [PATCH, RFC 02/30] scsi: atari_scsi: fix sleep_on race Geert Uytterhoeven
2014-01-05 1:35 ` Michael Schmitz
2014-01-12 1:40 ` Michael Schmitz [this message]
2014-01-12 20:00 ` Arnd Bergmann
2014-01-13 7:35 ` Michael Schmitz
2014-01-27 8:28 ` Michael Schmitz
2014-01-29 14:53 ` Arnd Bergmann
2014-01-30 7:54 ` schmitz
2014-01-30 7:57 ` Geert Uytterhoeven
2014-01-30 8:08 ` schmitz
2014-01-30 8:27 ` Geert Uytterhoeven
2014-01-30 8:06 ` schmitz
2014-01-13 8:20 ` schmitz
2014-01-14 8:29 ` Michael Schmitz
2014-01-19 22:04 ` Michael Schmitz
2014-01-28 7:52 ` [PATCH 0/3] m68k/atari - Atari NCR5380 SCSI driver fixes Michael Schmitz
2014-01-28 8:02 ` Geert Uytterhoeven
2014-01-28 7:52 ` [PATCH 1/3] m68k/atari - atari_scsi: fix wait_event completion conditions Michael Schmitz
2014-01-28 7:52 ` [PATCH 2/3] m68k/atari - atari_scsi: change abort/reset return codes Michael Schmitz
2014-01-28 7:52 ` [PATCH 3/3] m68k/atari - atari_scsi lock fixes: punt if deadlocked Michael Schmitz
2014-01-28 23:55 ` [PATCH 0/3] m68k/atari - Atari NCR5380 SCSI driver fixes (resent) Michael Schmitz
2014-01-28 23:55 ` [PATCH 1/3] m68k/atari - atari_scsi: fix wait_event completion conditions Michael Schmitz
2014-01-28 23:55 ` [PATCH 2/3] m68k/atari - atari_scsi: change abort/reset return codes Michael Schmitz
2014-01-28 23:55 ` [PATCH 3/3] m68k/atari - atari_scsi lock fixes: punt if deadlocked Michael Schmitz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52D1F299.7080909@gmail.com \
--to=schmitzmic@gmail.com \
--cc=arnd@arndb.de \
--cc=geert@linux-m68k.org \
--cc=linux-m68k@vger.kernel.org \
--cc=schmitz@biophys.uni-duesseldorf.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox