All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff Garzik <jeff@garzik.org>
To: "Nicholas A. Bellinger" <nab@linux-iscsi.org>
Cc: Boaz Harrosh <bharrosh@panasas.com>,
	linux-scsi <linux-scsi@vger.kernel.org>,
	James Bottomley <James.Bottomley@suse.de>,
	Christoph Hellwig <hch@lst.de>,
	Mike Christie <michaelc@cs.wisc.edu>,
	Vasu Dev <vasu.dev@linux.intel.com>, Tejun Heo <tj@kernel.org>,
	MPTFusionLinux <DL-MPTFusionLinux@lsi.com>,
	"Kashyap, Desai" <kashyap.desai@lsi.com>
Subject: Re: [PATCH 06/11] mpt2sas: Convert to host_lock less w/ interrupts disabled externally
Date: Thu, 18 Nov 2010 18:13:10 -0500	[thread overview]
Message-ID: <4CE5B306.1060203@garzik.org> (raw)
In-Reply-To: <1290121071.31890.135.camel@haakon2.linux-iscsi.org>

On 11/18/2010 05:57 PM, Nicholas A. Bellinger wrote:
> <Trimming CC list>
>
> On Thu, 2010-11-18 at 12:15 +0200, Boaz Harrosh wrote:
>> On 11/18/2010 12:19 AM, Nicholas A. Bellinger wrote:
>>> From: Nicholas Bellinger<nab@linux-iscsi.org>
>>>
>>> This patch converts the mpt2sas driver to run in host_lock less mode
>>> with the new IRQ_DISABLE_SCSI_QCMD() that disables interrupts while
>>> calling ->queuecommand() dispatch
>>>
>>> Signed-off-by: Nicholas A. Bellinger<nab@linux-iscsi.org>
>>> ---
>>>   drivers/scsi/mpt2sas/mpt2sas_scsih.c |    6 +++---
>>>   1 files changed, 3 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
>>> index 1a96a00..e564fe7 100644
>>> --- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
>>> +++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
>>> @@ -3304,7 +3304,7 @@ _scsih_eedp_error_handling(struct scsi_cmnd *scmd, u16 ioc_status)
>>>   }
>>>
>>>   /**
>>> - * _scsih_qcmd - main scsi request entry point
>>> + * _scsih_qcmd_irq_disable - main scsi request entry point
>>>    * @scmd: pointer to scsi command object
>>>    * @done: function pointer to be invoked on completion
>>>    *
>>> @@ -3315,7 +3315,7 @@ _scsih_eedp_error_handling(struct scsi_cmnd *scmd, u16 ioc_status)
>>>    * SCSI_MLQUEUE_HOST_BUSY if the entire host queue is full
>>>    */
>>>   static int
>>> -_scsih_qcmd_lck(struct scsi_cmnd *scmd, void (*done)(struct scsi_cmnd *))
>>> +_scsih_qcmd_irq_disable(struct scsi_cmnd *scmd, void (*done)(struct scsi_cmnd *))
>>>   {
>>>   	struct MPT2SAS_ADAPTER *ioc = shost_priv(scmd->device->host);
>>>   	struct MPT2SAS_DEVICE *sas_device_priv_data;
>>> @@ -3441,7 +3441,7 @@ _scsih_qcmd_lck(struct scsi_cmnd *scmd, void (*done)(struct scsi_cmnd *))
>>>   	return SCSI_MLQUEUE_HOST_BUSY;
>>>   }
>>>
>>> -static DEF_SCSI_QCMD(_scsih_qcmd)
>>> +static IRQ_DISABLE_SCSI_QCMD(_scsih_qcmd)
>>>
>>
>> How can this (and other in the patchset) can be correct? I mean I expect
>> that if you remove the lock,xx_qcmd_lck,unlock then inside the xx_qcmd_lck
>> there was an unlock,do123,lock and that driver was effectively running lockless
>> before. (like in iscsi). But here this is new behaviour. If it is correct
>> I would like to see a statement from you that:
>> 	"I have audited this driver, and all shared resources are protected by
>>           XYZ so ..."
>>
>> Otherwise how can I know this is correct? I have never audited this driver myself
>>
>
> So for this specific mpt2sas case, Vasu Dev had been testing the
> lock_less case w/o disabling interrupts for his original
> SHT->unlocked_qcmd=1 patch, and from his comments this mode was stable
> during his JBOD lock_less small block IOP performance test.

Test results are not the same as reviewing and understanding the locking 
in the driver, and adjusting the code accordingly...

_scsih_qcmd_lck() seems to rely on per-device and per-host data not 
changing, which might seem to imply that the driver is secretly using 
the SCSI host_lock to guarantee access to members such as 
ioc->ioc_link_reset_in_progress or sas_target_priv_data->tm_busy.

These accesses appear racy in both lock-free and local_irq_save() 
configurations from my naive reading, though I do see additional locking 
inside mpt2sas_base_get_smid_scsiio()

	Jeff



  reply	other threads:[~2010-11-18 23:13 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-17 22:19 [PATCH 06/11] mpt2sas: Convert to host_lock less w/ interrupts disabled externally Nicholas A. Bellinger
2010-11-18 10:15 ` Boaz Harrosh
2010-11-18 22:57   ` Nicholas A. Bellinger
2010-11-18 23:13     ` Jeff Garzik [this message]
2010-11-18 23:51       ` Nicholas A. Bellinger
2010-11-19 11:02     ` Desai, Kashyap
2010-11-19 16:38       ` Jeff Garzik
2010-11-20  4:44         ` Desai, Kashyap
2010-12-20 15:04       ` Desai, Kashyap
2010-12-23 21:01         ` Nicholas A. Bellinger
  -- strict thread matches above, loose matches on Subject: below --
2010-11-12  0:14 Nicholas A. Bellinger

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=4CE5B306.1060203@garzik.org \
    --to=jeff@garzik.org \
    --cc=DL-MPTFusionLinux@lsi.com \
    --cc=James.Bottomley@suse.de \
    --cc=bharrosh@panasas.com \
    --cc=hch@lst.de \
    --cc=kashyap.desai@lsi.com \
    --cc=linux-scsi@vger.kernel.org \
    --cc=michaelc@cs.wisc.edu \
    --cc=nab@linux-iscsi.org \
    --cc=tj@kernel.org \
    --cc=vasu.dev@linux.intel.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.