[PATCH 00/12] LLD host_lock-less conversion status for .38

Nicholas A. Bellinger
2010-12-19T21:27:47Z

From: Nicholas Bellinger <nab@linux-iscsi.org>

Greetings James and Co,

Attached are the current set of LLD host_lock-less conversions in the queue
for .38, that have now been pushed into lio-core-2.6.git/lock_less-LLDs-for-38-v3

New in this v3 series are the megaraid_sas LLD changes necessary to run in
host_lock-less mode, which have been tested thus far in legacy x86 interrupt
pin mode using 8708EM2 QEMU HBA emulation into KVM guest using TCM_Loop
virtual SCSI LUNs.

This series also drops the drivers/scsi patches that have been resolved with
the following (Thanks!)

commit 459dbf72e4d2b4aa13620e6b70d54f098547bf13
Author: James Bottomley <James.Bottomley@suse.de>
Date: Wed Nov 17 10:10:57 2010 -0600

[SCSI] Eliminate error handler overload of the SCSI serial number

At this point the remaining code TODO items for the LLD conversion patches
include

*) libiscsi: NULL sc->scsi_done() callback in exception path in iscsi_queuecommand().
The last status on this from Mike Christie was:

"This will NULL pointer. See a couple lines above where we NULL it.
iscsi_free_task checks if the scsi_done pointer is set and if it is it
will call scsi_done.

It is a hack to prevent the normal completion path from calling
scsi_done. For the case where we return SCSI_MLQUEUE_TARGET_BUSY (the
prepd_reject case) we need something to prevent scsi_done from getting
called.

For the return 0/prepd_fault case we can just call sc->scsi_done, but we
have to move some code around."

mnc, have you been able to take another look at this..?

*) mpt2sas: Locking considerations for firmware specific data structures

A patch to mptsas was included originally to convert to host_lock less w/ interrupts
disabled externally here:

http://git.kernel.org/?p=linux/kernel/git/nab/lio-core-2.6.git;a=commitdiff;h=87ba9071b46f37f1adab1732d41b87bf195d191f

but due to concerns from jgarzik this had been dropped from the lock_less-LLDs-for-38-v2
during the last round. The feedback from Kashyap @ LSI is that mpt2sas technically should be
able to run in host_lock-less, but there needs to be some explict clarification in the code
for the conversion to happen. More details are here:

http://marc.info/?l=linux-scsi&m=129022827729386&w=2

Kashyap, can you take another look at this and make sure this is acceptable..?

*) megaraid_sas: Running in host_lock-less mode with MSI-X interrupts

This has not been tested yet, but I would like to get some review from the LSI
megaraid_sas folks now that their patches to enable MSI-X interrupts has been sent
to linux-scsi.

AdamR, any thoughts or comments to add here..?

----------------------------------------------------------------------------------

So at this point the next steps will be to shaking out breakage in corner cases for
struct scsi_device hotplug removal, more testing+validation, and more LLD code review.

For the CC'ed LLD maintainers, please have another look at the changes to enable
host_lock-less operation within your code and send the necessary ACKs to linux-scsi
at your earliest convience. Many thanks to everyone who has contributed!

If anyone has any other patches, comments or concerns please let me know and they
will be queued up for the next v4 for-38 round.

Best Regards,

Signed-off-by: Nicholas A. Bellinger <nab@linux-iscsi.org>

Nicholas Bellinger (12):
libiscsi: Convert to host_lock less w/ interrupts disabled internally
scsi: Add IRQ_DISABLE_SCSI_QCMD wrapper
libsas: Convert to host_lock less w/ interrupts disabled externally
message: Convert to host_lock less w/ interrupts disabled externally
fnic: Convert to host_lock less w/ interrupts disabled externally
lpfc: Convert to host_lock less w/ interrupts disabled externally
qla2xxx: Convert to host_lock less w/ interrupts disabled externally
qla4xxx: Convert to host_lock less w/ interrupts disabled externally
scsi_debug: Convert to host_lock less
megaraid_sas: Add smp_mb__after_atomic_*() for
instance->fw_outstanding
megaraid_sas: Convert instance->issuepend_done to atomic_t
megaraid_sas: Convert SHT->queuecommand() to run host_lock-less

drivers/message/fusion/mptfc.c | 2 +-
drivers/message/fusion/mptsas.c | 6 +-
drivers/message/fusion/mptscsih.c | 8 ++-
drivers/message/fusion/mptscsih.h | 2 +-
drivers/message/fusion/mptspi.c | 6 +-
drivers/scsi/fnic/fnic_scsi.c | 14 +----
drivers/scsi/libiscsi.c | 10 +---
drivers/scsi/libsas/sas_scsi_host.c | 12 +----
drivers/scsi/lpfc/lpfc_scsi.c | 9 ++--
drivers/scsi/megaraid/megaraid_sas.c | 85 ++++++++++++++++++++++------------
drivers/scsi/megaraid/megaraid_sas.h | 2 +-
drivers/scsi/qla2xxx/qla_os.c | 11 +---
drivers/scsi/qla4xxx/ql4_os.c | 10 +---
drivers/scsi/scsi_debug.c | 16 +++----
include/scsi/scsi_host.h | 14 ++++++
15 files changed, 107 insertions(+), 100 deletions(-)

--
1.7.3.4