From: Nicholas Bellinger <nab@xxxxxxxxxxxxxxx> 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 <nab@xxxxxxxxxxxxxxx> --- include/scsi/scsi_host.h | 14 ++++++++++++++ 1 files changed, 14 insertions(+), 0 deletions(-) diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h index e7e3858..321b114 100644 --- a/include/scsi/scsi_host.h +++ b/include/scsi/scsi_host.h @@ -521,6 +521,20 @@ 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_Host *shost, struct scsi_cmnd *cmd) \ + { \ + unsigned long irq_flags; \ + int rc; \ + local_irq_save(irq_flags); \ + rc = func_name##_irq_disable(cmd, cmd->scsi_done); \ + local_irq_restore(irq_flags); \ + return rc; \ + } /* * shost state: If you alter this, you also need to alter scsi_sysfs.c -- 1.7.3.4 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html