From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Nicholas A. Bellinger" Subject: [PATCH 03/11] scsi: Add IRQ_DISABLE_SCSI_QCMD wrapper Date: Thu, 11 Nov 2010 16:13:46 -0800 Message-ID: <1289520826-16478-1-git-send-email-nab@linux-iscsi.org> Return-path: Received: from nm27-vm0.bullet.mail.ne1.yahoo.com ([98.138.91.63]:25570 "HELO nm27-vm0.bullet.mail.ne1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1751505Ab0KLAUb (ORCPT ); Thu, 11 Nov 2010 19:20:31 -0500 Sender: linux-scsi-owner@vger.kernel.org List-Id: linux-scsi@vger.kernel.org To: linux-scsi , Jeff Garzik , James Bottomley , Christoph Hellwig Cc: Mike Christie , Ravi Anand , Andrew Vasquez , Joe Eykholt , James Smart , Vasu Dev , Tim Chen , Andi Kleen , Tejun Heo , Mike Anderson , MPTFusionLinux , Nicholas Bellinger From: Nicholas Bellinger This patch adds a IRQ_DISABLE_SCSI_QCMD() wrapper macro used by LLDs that can now run in host_lock less mode, but still need interrupts disabled using local_irq_save() before calling their lld_queuecommand() dispatcher. jgarzik says this method is in fact slower than doing a spin_lock_irqsave() on internal lib_lld_queuecommand() callers (as is done in libiscsi and libata) but is still needed by the majority of lock_less LLDs. Signed-off-by: Nicholas A. Bellinger --- include/scsi/scsi_host.h | 15 +++++++++++++++ 1 files changed, 15 insertions(+), 0 deletions(-) diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h index 6909038..ddb0622 100644 --- a/include/scsi/scsi_host.h +++ b/include/scsi/scsi_host.h @@ -523,6 +523,21 @@ struct scsi_host_template { return rc; \ } +/* + * Used for LLDs running in lock-less mode, but that still require having + * interrupts disable during their lld_queuecommand() dispatch. + */ +#define IRQ_DISABLE_SCSI_QCMD(func_name) \ + int func_name(struct scsi_cmnd *cmd, \ + void (*done)(struct scsi_cmnd *)) \ + { \ + unsigned long irq_flags; \ + int rc; \ + local_irq_save(irq_flags); \ + rc = func_name##_irq_disable (cmd, done); \ + local_irq_restore(irq_flags); \ + return rc; \ + } /* * shost state: If you alter this, you also need to alter scsi_sysfs.c -- 1.7.2.3