All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Schmitz <schmitzmic@gmail.com>
To: Finn Thain <fthain@telegraphics.com.au>,
	"James E.J. Bottomley" <jejb@linux.ibm.com>,
	"Martin K. Petersen" <martin.petersen@oracle.com>
Cc: linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] scsi/atari_scsi: Fix race condition between .queuecommand and EH
Date: Fri, 20 Nov 2020 20:33:43 +1300	[thread overview]
Message-ID: <b54c0f54-0422-dfe5-e66b-cd23a4c83089@gmail.com> (raw)
In-Reply-To: <af25163257796b50bb99d4ede4025cea55787b8f.1605847196.git.fthain@telegraphics.com.au>

Hi Finn,

thanks for your patch!

Tested on Atari Falcon (with falconide, and pata_falcon modules).

Reviewed-by: Michael Schmitz <schmitzmic@gmail.com>
Tested-by: Michael Schmitz <schmitzmic@gmail.com>

Am 20.11.2020 um 17:39 schrieb Finn Thain:
> It is possible that bus_reset_cleanup() or .eh_abort_handler could
> be invoked during NCR5380_queuecommand(). If that takes place before
> the new command is enqueued and after the ST-DMA "lock" has been
> acquired, the ST-DMA "lock" will be released again. This will result
> in a lost DMA interrupt and a command timeout. Fix this by excluding
> EH and interrupt handlers while the new command is enqueued.
>
> Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
> ---
> Michael, would you please send your Acked-by or Reviewed-and-tested-by?
> These two patches taken together should be equivalent to the one you tested
> recently. I've split it into two as that seemed to make more sense.
> ---
>  drivers/scsi/NCR5380.c    |  9 ++++++---
>  drivers/scsi/atari_scsi.c | 10 +++-------
>  2 files changed, 9 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/scsi/NCR5380.c b/drivers/scsi/NCR5380.c
> index d654a6cc4162..ea4b5749e7da 100644
> --- a/drivers/scsi/NCR5380.c
> +++ b/drivers/scsi/NCR5380.c
> @@ -580,11 +580,14 @@ static int NCR5380_queue_command(struct Scsi_Host *instance,
>
>  	cmd->result = 0;
>
> -	if (!NCR5380_acquire_dma_irq(instance))
> -		return SCSI_MLQUEUE_HOST_BUSY;
> -
>  	spin_lock_irqsave(&hostdata->lock, flags);
>
> +	if (!NCR5380_acquire_dma_irq(instance)) {
> +		spin_unlock_irqrestore(&hostdata->lock, flags);
> +
> +		return SCSI_MLQUEUE_HOST_BUSY;
> +	}
> +
>  	/*
>  	 * Insert the cmd into the issue queue. Note that REQUEST SENSE
>  	 * commands are added to the head of the queue since any command will
> diff --git a/drivers/scsi/atari_scsi.c b/drivers/scsi/atari_scsi.c
> index a82b63a66635..95d7a3586083 100644
> --- a/drivers/scsi/atari_scsi.c
> +++ b/drivers/scsi/atari_scsi.c
> @@ -376,15 +376,11 @@ static int falcon_get_lock(struct Scsi_Host *instance)
>  	if (IS_A_TT())
>  		return 1;
>
> -	if (stdma_is_locked_by(scsi_falcon_intr) &&
> -	    instance->hostt->can_queue > 1)
> +	if (stdma_is_locked_by(scsi_falcon_intr))
>  		return 1;
>
> -	if (in_interrupt())
> -		return stdma_try_lock(scsi_falcon_intr, instance);
> -
> -	stdma_lock(scsi_falcon_intr, instance);
> -	return 1;
> +	/* stdma_lock() may sleep which means it can't be used here */
> +	return stdma_try_lock(scsi_falcon_intr, instance);
>  }
>
>  #ifndef MODULE
>

  reply	other threads:[~2020-11-20  7:34 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-20  4:39 [PATCH] scsi/atari_scsi: Fix race condition between .queuecommand and EH Finn Thain
2020-11-20  7:33 ` Michael Schmitz [this message]
2020-11-24  3:14 ` Martin K. Petersen
2020-12-01  5:04 ` Martin K. Petersen

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=b54c0f54-0422-dfe5-e66b-cd23a4c83089@gmail.com \
    --to=schmitzmic@gmail.com \
    --cc=fthain@telegraphics.com.au \
    --cc=jejb@linux.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.