mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [patch] qla1280 locking update
@ 2003-10-02  1:43 Jes Sorensen
  0 siblings, 0 replies; only message in thread
From: Jes Sorensen @ 2003-10-02  1:43 UTC (permalink / raw)
  To: linux-kernel

[resent to the mailing list - tried to send it to vger.rutgers.edu again]

Hi Linus,

This patch fixes the qla1280 driver to not try and release an unlocked
spin lock at boot time in 2.6 as well as a couple of other minor mods.
I also changed the MMIO option to be dependant on X86_VISWS as it's
really a chipset problem and not something each and every driver should
be asking for. Getting a global CONFIG_MMIO_IS_BROKEN option would
probable be a win here.

Patch against 2.6-test6.

Cheers,
Jes

--- ../new/linux-2.6.0-test6/drivers/scsi/qla1280.c	Sat Sep 27 17:51:17 2003
+++ linux/drivers/scsi/qla1280.c	Wed Oct  1 18:28:25 2003
@@ -16,10 +16,15 @@
 * General Public License for more details.
 *
 ******************************************************************************/
-#define QLA1280_VERSION      "3.23.36"
+#define QLA1280_VERSION      "3.23.37"
 /*****************************************************************************
     Revision History:
-    Rev  3.23.36 September 19, 2003, Christoph Hellwig
+    Rev  3.23.37 October 1, 2003, Jes Sorensen
+	- Make MMIO depend on CONFIG_X86_VISWS instead of yet another
+	  random CONFIG option
+	- Clean up locking in probe path
+    Rev  3.23.36 October 1, 2003, Christoph Hellwig
+	- queuecommand only ever receives new commands - clear flags
 	- Reintegrate lost fixes from Linux 2.5
     Rev  3.23.35 August 14, 2003, Jes Sorensen
 	- Build against 2.6
@@ -315,14 +320,14 @@
 
 #if LINUX_VERSION_CODE >= 0x020545
 #include <scsi/scsi_host.h>
+#include "scsi.h"
 #else
 #include <linux/blk.h>
+#include "scsi.h"
 #include "hosts.h"
 #include "sd.h"
 #endif
 
-#include "scsi.h"
-
 #if LINUX_VERSION_CODE < 0x020407
 #error "Kernels older than 2.4.7 are no longer supported"
 #endif
@@ -339,7 +344,10 @@
 #define  DEBUG_PRINT_NVRAM	0
 #define  DEBUG_QLA1280		0
 
-#ifdef	CONFIG_SCSI_QLOGIC_1280_PIO
+/*
+ * The SGI VISWS is broken and doesn't support MMIO ;-(
+ */
+#ifdef CONFIG_X86_VISWS
 #define	MEMORY_MAPPED_IO	0
 #else
 #define	MEMORY_MAPPED_IO	1
@@ -414,6 +422,11 @@
 #else
 #define HOST_LOCK			ha->host->host_lock
 #endif
+#if LINUX_VERSION_CODE < 0x020600
+#define DEV_SIMPLE_TAGS(device)		device->tagged_queue
+#else
+#define DEV_SIMPLE_TAGS(device)		device->simple_tags
+#endif
 #if defined(__ia64__) && !defined(ia64_platform_is)
 #define ia64_platform_is(foo)		(!strcmp(x, platform_name))
 #endif
@@ -647,11 +660,11 @@
 #define	PROC_BUF	&qla1280_buffer[len]
 
 #if LINUX_VERSION_CODE < 0x020600
-static int qla1280_proc_info(char *buffer, char **start, off_t offset, int length,
-		      int hostno, int inout)
+static int qla1280_proc_info(char *buffer, char **start, off_t offset,
+			     int length, int hostno, int inout)
 #else
-static int qla1280_proc_info(struct Scsi_Host *host, char *buffer, char **start,
-		      off_t offset, int length, int inout)
+static int qla1280_proc_info(struct Scsi_Host *host, char *buffer,
+			     char **start, off_t offset, int length, int inout)
 #endif
 {
 	struct scsi_qla_host *ha;
@@ -955,8 +968,8 @@
 		       host->io_port, host->io_port + 0xff);
 		goto error_free_irq;
 	}
-
 #endif
+
 	/* load the F/W, read paramaters, and init the H/W */
 	if (qla1280_initialize_adapter(ha)) {
 		printk(KERN_INFO "qla1x160: Failed to initialize adapter\n");
@@ -1598,6 +1611,7 @@
 	return IRQ_RETVAL(handled);
 }
 
+
 static int
 qla12160_set_target_parameters(struct scsi_qla_host *ha, int bus, int target)
 {
@@ -1666,9 +1680,7 @@
 	int target = device->id;
 	int status = 0;
 	struct nvram *nv;
-#if LINUX_VERSION_CODE < 0x020500
 	unsigned long flags;
-#endif
 
 	ha = (struct scsi_qla_host *)device->host->hostdata;
 	nv = &ha->nvram;
@@ -1706,17 +1718,13 @@
 			nv->bus[bus].target[target].ppr_1x160.flags.enable_ppr = 0;
 	}
 
-#if LINUX_VERSION_CODE < 0x020500
 	spin_lock_irqsave(HOST_LOCK, flags);
-#endif
 	if (nv->bus[bus].target[target].parameter.f.enable_sync) {
 		status = qla12160_set_target_parameters(ha, bus, target);
 	}
 
 	qla12160_get_target_parameters(ha, device);
-#if LINUX_VERSION_CODE < 0x020500
 	spin_unlock_irqrestore(HOST_LOCK, flags);
-#endif
 	return status;
 }
 
@@ -1995,7 +2003,7 @@
 	if (ha->request_ring)
 		pci_free_consistent(ha->pdev,
                                     ((REQUEST_ENTRY_CNT + 1) *
-                                     (sizeof(request_t))),
+				     (sizeof(request_t))),
                                     ha->request_ring, ha->request_dma);
  finish:
 	LEAVE("qla1280_mem_alloc");
@@ -2088,6 +2096,9 @@
 	struct device_reg *reg;
 	int status;
 	int bus;
+#if LINUX_VERSION_CODE > 0x020500
+	unsigned long flags;
+#endif
 
 	ENTER("qla1280_initialize_adapter");
 
@@ -2131,6 +2142,15 @@
 			"NVRAM\n");
 	}
 
+#if LINUX_VERSION_CODE >= 0x020500
+	/*
+	 * It's necessary to grab the spin here as qla1280_mailbox_command
+	 * needs to be able to drop the lock unconditionally to wait
+	 * for completion.
+	 * In 2.4 ->detect is called with the io_request_lock held.
+	 */
+	spin_lock_irqsave(HOST_LOCK, flags);
+#endif
 	/* If firmware needs to be loaded */
 	if (qla1280_isp_firmware(ha)) {
 		if (!(status = qla1280_chip_diag (ha))) {
@@ -2183,6 +2203,9 @@
 		status = 1;
 
  out:
+#if LINUX_VERSION_CODE >= 0x020500
+	spin_unlock_irqrestore(HOST_LOCK, flags);
+#endif
 	if (status)
 		dprintk(2, "qla1280_initialize_adapter: **** FAILED ****\n");
 
@@ -3208,18 +3231,14 @@
 	timer.function = qla1280_mailbox_timeout;
 	add_timer(&timer);
 
-#if LINUX_VERSION_CODE < 0x020500
 	spin_unlock_irq(HOST_LOCK);
-#endif
 	WRT_REG_WORD(&reg->host_cmd, HC_SET_HOST_INT);
 	data = qla1280_debounce_register(&reg->istatus);
 
 	wait_for_completion(&wait);
 	del_timer_sync(&timer);
 
-#if LINUX_VERSION_CODE < 0x020500
 	spin_lock_irq(HOST_LOCK);
-#endif
 
 	ha->mailbox_wait = NULL;
 
@@ -3636,7 +3655,7 @@
 		(SCSI_TCN_32(cmd) | BIT_7) : SCSI_TCN_32(cmd);
 
 	/* Enable simple tag queuing if device supports it. */
-	if (cmd->device->simple_tags)
+	if (DEV_SIMPLE_TAGS(cmd->device))
 		pkt->control_flags |= cpu_to_le16(BIT_3);
 
 	/* Load SCSI command packet. */
@@ -3936,7 +3955,7 @@
 		(SCSI_TCN_32(cmd) | BIT_7) : SCSI_TCN_32(cmd);
 
 	/* Enable simple tag queuing if device supports it. */
-	if (cmd->device->simple_tags)
+	if (DEV_SIMPLE_TAGS(cmd->device))
 		pkt->control_flags |= cpu_to_le16(BIT_3);
 
 	/* Load SCSI command packet. */
@@ -4823,6 +4842,7 @@
 	return ret;
 }
 
+
 /************************************************************************
  * qla1280_check_for_dead_scsi_bus                                      *
  *                                                                      *
@@ -4891,7 +4911,7 @@
 	} else
 		printk(" Async");
 
-	if (device->simple_tags)
+	if (DEV_SIMPLE_TAGS(device))
 		printk(", Tagged queuing: depth %d", device->queue_depth);
 	printk("\n");
 }
@@ -5105,6 +5125,7 @@
 	return ret;
 }
 
+
 static Scsi_Host_Template driver_template = {
 	.proc_info		= qla1280_proc_info,
 	.name			= "Qlogic ISP 1280/12160",
@@ -5132,6 +5153,7 @@
 
 #include "scsi_module.c"
 
+
 /*
  * Overrides for Emacs so that we almost follow Linus's tabbing style.
  * Emacs will notice this stuff at the end of the file and automatically
--- ../new/linux-2.6.0-test6/drivers/scsi/Kconfig	Sat Sep 27 17:50:58 2003
+++ linux/drivers/scsi/Kconfig	Wed Oct  1 18:31:53 2003
@@ -1148,16 +1235,6 @@
 	  To compile this driver as a module, choose M here: the
 	  module will be called qla1280.
 
-config SCSI_QLOGIC_1280_PIO
-	bool "Use PIO instead of MMIO" if !X86_VISWS
-	depends on SCSI_QLOGIC_1280
-	default y if X86_VISWS
-	help
-	  This instructs the driver to use programmed I/O ports (PIO) instead
-	  of PCI shared memory (MMIO).  This can possibly solve some problems
-	  in case your mainboard has memory consistency issues.  If unsure,
-	  say N.
-
 config SCSI_QLOGICPTI
 	tristate "PTI Qlogic, ISP Driver"
 	depends on SBUS && SCSI

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2003-10-02  1:44 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-10-02  1:43 [patch] qla1280 locking update Jes Sorensen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®