From: "David S. Miller" <davem@redhat.com>

I fix three problems below:

1) Build never ever traverses down into drivers/scsi/qla2xxx/
   because necessary CONFIG option to cause that is never set.

   I don't know it is possible for anyone to get this even
   build tested as a result, let alone used :-)

2) flush_cache_all() is no longer a public interface.  The code
   in the qla2xxx driver using it is using consistent style DMA
   memory so there is no cache flush needed anyways, just kill it
   and the comment.

3) Systems can not go from using qlogicfc to qla2xxx because the
   SCSI target numbering is different.  qlogicfc always assigns
   target 0 to the host adapter port address, the qla2xxx driver
   does not.

   I've fixed this by assigning device target IDs starting at '1'
   instead of '0'.

#3 could be a big problem, frankly in the vanilla sources I think it's more
important to have device numbering compatability with qlogicfc although I
realize this is probably going to break some class of systems out there
which have been using the qla2xxx stuff for some time.

Please give Andrew/me an nod to push this to Linus.  My sparc64 machine
that I do all my work on got busted by this move to the new driver so I'd
like it fixed fast :)



---

 drivers/scsi/qla2xxx/Kconfig    |   14 +++++++-------
 drivers/scsi/qla2xxx/qla_init.c |   12 +++---------
 2 files changed, 10 insertions(+), 16 deletions(-)

diff -puN drivers/scsi/qla2xxx/Kconfig~qla2xxx-fixes drivers/scsi/qla2xxx/Kconfig
--- 25/drivers/scsi/qla2xxx/Kconfig~qla2xxx-fixes	2004-02-04 23:48:31.000000000 -0800
+++ 25-akpm/drivers/scsi/qla2xxx/Kconfig	2004-02-04 23:48:31.000000000 -0800
@@ -1,41 +1,41 @@
-config SCSI_QLA2XXX_CONFIG
+config SCSI_QLA2XXX
 	tristate
 	default (SCSI && PCI)
 	depends on SCSI && PCI
 
 config SCSI_QLA21XX
 	tristate "QLogic ISP2100 host adapter family support"
-	depends on SCSI_QLA2XXX_CONFIG
+	depends on SCSI_QLA2XXX
 	---help---
 	This driver supports the QLogic 21xx (ISP2100) host adapter family.
 
 config SCSI_QLA22XX
 	tristate "QLogic ISP2200 host adapter family support"
-	depends on SCSI_QLA2XXX_CONFIG
+	depends on SCSI_QLA2XXX
 	---help---
 	This driver supports the QLogic 22xx (ISP2200) host adapter family.
 
 config SCSI_QLA2300
 	tristate "QLogic ISP2300 host adapter family support"
-	depends on SCSI_QLA2XXX_CONFIG
+	depends on SCSI_QLA2XXX
 	---help---
 	This driver supports the QLogic 2300 (ISP2300, and ISP2312) host
 	adapter family.
 
 config SCSI_QLA2322
 	tristate "QLogic ISP2322 host adapter family support"
-	depends on SCSI_QLA2XXX_CONFIG
+	depends on SCSI_QLA2XXX
 	---help---
 	This driver supports the QLogic 2322 (ISP2322) host adapter family.
 
 config SCSI_QLA6312
 	tristate "QLogic ISP6312 host adapter family support"
-	depends on SCSI_QLA2XXX_CONFIG
+	depends on SCSI_QLA2XXX
 	---help---
 	This driver supports the QLogic 6312 (ISP6312) host adapter family.
 
 config SCSI_QLA6322
 	tristate "QLogic ISP6322 host adapter family support"
-	depends on SCSI_QLA2XXX_CONFIG
+	depends on SCSI_QLA2XXX
 	---help---
 	This driver supports the QLogic 6322 (ISP6322) host adapter family.
diff -puN drivers/scsi/qla2xxx/qla_init.c~qla2xxx-fixes drivers/scsi/qla2xxx/qla_init.c
--- 25/drivers/scsi/qla2xxx/qla_init.c~qla2xxx-fixes	2004-02-04 23:48:31.000000000 -0800
+++ 25-akpm/drivers/scsi/qla2xxx/qla_init.c	2004-02-04 23:48:31.000000000 -0800
@@ -690,12 +690,6 @@ qla2x00_setup_chip(scsi_qla_host_t *ha)
 			for (i = 0; i < cnt; i++)
 				req_ring[i] = cpu_to_le16(risc_code[i]);
 
-			/*
-			 * Flush written firmware to the ha->request_ring buffer
-			 * before DMA.
-			 */
-			flush_cache_all();
-
 			if (fw_iter->addressing == FW_INFO_ADDR_NORMAL) {
 				rval = qla2x00_load_ram(ha,
 				    ha->request_dma, risc_address, cnt);
@@ -3293,12 +3287,12 @@ qla2x00_fcport_bind(scsi_qla_host_t *ha,
 
 	/* TODO: honor the ConfigRequired flag */
 	if (tgt == MAX_TARGETS) {
-		/* Check if targetID 0 available. */
-		tgt = 0;
+		/* Check if targetID 1 available. */
+		tgt = 1;
 
 		if (TGT_Q(ha, tgt) != NULL) {
 			/* Locate first free target for device. */
-			for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
+			for (tgt = 1; tgt < MAX_TARGETS; tgt++) {
 				if (TGT_Q(ha, tgt) == NULL) {
 					break;
 				}

_