From: Christoph Hellwig <hch@lst.de>

John W Fort helped me debugging the brown paperbag bugs, the patch below
makes it work.



 drivers/scsi/inia100.c |   36 ++++++++++++++++++++----------------
 1 files changed, 20 insertions(+), 16 deletions(-)

diff -puN drivers/scsi/inia100.c~inia100-fix drivers/scsi/inia100.c
--- 25/drivers/scsi/inia100.c~inia100-fix	2004-01-02 01:03:41.000000000 -0800
+++ 25-akpm/drivers/scsi/inia100.c	2004-01-02 01:03:41.000000000 -0800
@@ -420,7 +420,7 @@ static int __devinit inia100_probe_one(s
 	struct Scsi_Host *shost;
 	ORC_HCS *pHCB;
 	unsigned long port, bios;
-	int ok = -ENODEV;
+	int error = -ENODEV;
 	u32 sz;
 	unsigned long dBiosAdr;
 	char *pbBiosAdr;
@@ -433,17 +433,17 @@ static int __devinit inia100_probe_one(s
 		goto out_disable_device;
 	}
 
+	pci_set_master(pdev);
+
 	port = pci_resource_start(pdev, 0);
-	if (!request_region(pHCB->HCS_Base, 256, "inia100")) {
-		printk(KERN_WARNING "inia100: io port 0x%x, is busy.\n", 
-		       pHCB->HCS_Base);
-		goto out_disable_device; /* XXX: undo init_orchid() ?? */
+	if (!request_region(port, 256, "inia100")) {
+		printk(KERN_WARNING "inia100: io port 0x%lx, is busy.\n", port);
+		goto out_disable_device;
 	}
 
 	/* <02> read from base address + 0x50 offset to get the bios balue. */
 	bios = ORC_RDWORD(port, 0x50);
 
-	pci_set_master(pdev);
 
 	shost = scsi_host_alloc(&inia100_template, sizeof(ORC_HCS));
 	if (!shost)
@@ -460,7 +460,8 @@ static int __devinit inia100_probe_one(s
 
 	/* Get total memory needed for SCB */
 	sz = ORC_MAXQUEUE * sizeof(ORC_SCB);
-	pHCB->HCS_virScbArray = pci_alloc_consistent(pdev, sz, &pHCB->HCS_physScbArray);
+	pHCB->HCS_virScbArray = pci_alloc_consistent(pdev, sz,
+			&pHCB->HCS_physScbArray);
 	if (!pHCB->HCS_virScbArray) {
 		printk("inia100: SCB memory allocation error\n");
 		goto out_host_put;
@@ -469,7 +470,8 @@ static int __devinit inia100_probe_one(s
 
 	/* Get total memory needed for ESCB */
 	sz = ORC_MAXQUEUE * sizeof(ESCB);
-	pHCB->HCS_virEscbArray = pci_alloc_consistent(pdev, sz, &pHCB->HCS_physEscbArray);
+	pHCB->HCS_virEscbArray = pci_alloc_consistent(pdev, sz,
+			&pHCB->HCS_physEscbArray);
 	if (!pHCB->HCS_virEscbArray) {
 		printk("inia100: ESCB memory allocation error\n");
 		goto out_free_scb_array;
@@ -490,21 +492,23 @@ static int __devinit inia100_probe_one(s
 	shost->unique_id = shost->io_port;
 	shost->max_id = pHCB->HCS_MaxTar;
 	shost->max_lun = 16;
-	shost->irq = pHCB->HCS_Intr;
+	shost->irq = pHCB->HCS_Intr = pdev->irq;
 	shost->this_id = pHCB->HCS_SCSI_ID;	/* Assign HCS index */
 	shost->sg_tablesize = TOTAL_SG_ENTRY;
 
 	/* Initial orc chip           */
-	ok = request_irq(pHCB->HCS_Intr, inia100_intr, SA_SHIRQ, "inia100", shost);
-	if (ok < 0) {
-		printk(KERN_WARNING "inia100: unable to get irq %d\n", pHCB->HCS_Intr);
+	error = request_irq(pdev->irq, inia100_intr, SA_SHIRQ,
+			"inia100", shost);
+	if (error < 0) {
+		printk(KERN_WARNING "inia100: unable to get irq %d\n",
+				pdev->irq);
 		goto out_free_escb_array;
 	}
 
 	pci_set_drvdata(pdev, shost);
 
-	ok = scsi_add_host(shost, &pdev->dev);
-	if (!ok)
+	error = scsi_add_host(shost, &pdev->dev);
+	if (error)
 		goto out_free_irq;
 
 	scsi_scan_host(shost);
@@ -521,11 +525,11 @@ static int __devinit inia100_probe_one(s
  out_host_put:
 	scsi_host_put(shost);
  out_release_region:
-        release_region(pHCB->HCS_Base, 256);
+        release_region(port, 256);
  out_disable_device:
 	pci_disable_device(pdev);
  out:
-	return ok;
+	return error;
 }
 
 static void __devexit inia100_remove_one(struct pci_dev *pdev)

_