All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <20160103050502.911804817@telegraphics.com.au>

diff --git a/a/1.txt b/N1/1.txt
index d0d621e..26c3044 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,195 +1,3 @@
-This patch splits the NCR5380_init() function into two parts, similar
-to the scheme used with atari_NCR5380.c. This avoids two problems.
-
-Firstly, NCR5380_init() may perform a bus reset, which would cause the
-chip to assert IRQ. The chip is unable to mask its bus reset interrupt.
-Drivers can't call request_irq() before calling NCR5380_init(), because
-initialization must happen before the interrupt handler executes. If
-driver initialization causes an interrupt it may be problematic on some
-platforms. To avoid that, first move the bus reset code into
-NCR5380_maybe_reset_bus().
-
-Secondly, NCR5380_init() contains some board-specific interrupt setup code
-for the NCR53C400 that does not belong in the core driver. In moving this
-code, better not re-order interrupt initialization and bus reset. Again,
-the solution is to move the bus reset code into NCR5380_maybe_reset_bus().
-
-Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
-Reviewed-by: Hannes Reinecke <hare@suse.com>
-Tested-by: Ondrej Zary <linux@rainbow-software.org>
-
----
- drivers/scsi/NCR5380.c      |   34 ++++++++++++++++++++--------------
- drivers/scsi/NCR5380.h      |    1 +
- drivers/scsi/arm/cumana_1.c |    2 ++
- drivers/scsi/arm/oak.c      |    2 ++
- drivers/scsi/dmx3191d.c     |    2 ++
- drivers/scsi/dtc.c          |    2 ++
- drivers/scsi/g_NCR5380.c    |    2 ++
- drivers/scsi/pas16.c        |    2 ++
- drivers/scsi/t128.c         |    2 ++
- 9 files changed, 35 insertions(+), 14 deletions(-)
-
-Index: linux/drivers/scsi/NCR5380.c
-===================================================================
---- linux.orig/drivers/scsi/NCR5380.c	2016-01-03 16:03:02.000000000 +1100
-+++ linux/drivers/scsi/NCR5380.c	2016-01-03 16:03:03.000000000 +1100
-@@ -777,8 +777,7 @@ static void lprint_opcode(int opcode, st
- 
- static int NCR5380_init(struct Scsi_Host *instance, int flags)
- {
--	int i, pass;
--	unsigned long timeout;
-+	int i;
- 	struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
- 
- 	if(in_interrupt())
-@@ -831,18 +830,26 @@ static int NCR5380_init(struct Scsi_Host
- 		NCR5380_write(C400_CONTROL_STATUS_REG, CSR_BASE);
- 	}
- #endif
-+	return 0;
-+}
- 
--	/* 
--	 * Detect and correct bus wedge problems.
--	 *
--	 * If the system crashed, it may have crashed in a state 
--	 * where a SCSI command was still executing, and the 
--	 * SCSI bus is not in a BUS FREE STATE.
--	 *
--	 * If this is the case, we'll try to abort the currently
--	 * established nexus which we know nothing about, and that
--	 * failing, do a hard reset of the SCSI bus 
--	 */
-+/**
-+ * NCR5380_maybe_reset_bus - Detect and correct bus wedge problems.
-+ * @instance: adapter to check
-+ *
-+ * If the system crashed, it may have crashed with a connected target and
-+ * the SCSI bus busy. Check for BUS FREE phase. If not, try to abort the
-+ * currently established nexus, which we know nothing about. Failing that
-+ * do a bus reset.
-+ *
-+ * Note that a bus reset will cause the chip to assert IRQ.
-+ *
-+ * Returns 0 if successful, otherwise -ENXIO.
-+ */
-+
-+static int NCR5380_maybe_reset_bus(struct Scsi_Host *instance)
-+{
-+	int pass;
- 
- 	for (pass = 1; (NCR5380_read(STATUS_REG) & SR_BSY) && pass <= 6; ++pass) {
- 		switch (pass) {
-@@ -850,7 +857,6 @@ static int NCR5380_init(struct Scsi_Host
- 		case 3:
- 		case 5:
- 			printk(KERN_INFO "scsi%d: SCSI bus busy, waiting up to five seconds\n", instance->host_no);
--			timeout = jiffies + 5 * HZ;
- 			NCR5380_poll_politely(instance, STATUS_REG, SR_BSY, 0, 5*HZ);
- 			break;
- 		case 2:
-Index: linux/drivers/scsi/NCR5380.h
-===================================================================
---- linux.orig/drivers/scsi/NCR5380.h	2016-01-03 16:02:54.000000000 +1100
-+++ linux/drivers/scsi/NCR5380.h	2016-01-03 16:03:03.000000000 +1100
-@@ -318,6 +318,7 @@ static void NCR5380_print(struct Scsi_Ho
- static int NCR5380_probe_irq(struct Scsi_Host *instance, int possible);
- #endif
- static int NCR5380_init(struct Scsi_Host *instance, int flags);
-+static int NCR5380_maybe_reset_bus(struct Scsi_Host *);
- static void NCR5380_exit(struct Scsi_Host *instance);
- static void NCR5380_information_transfer(struct Scsi_Host *instance);
- #ifndef DONT_USE_INTR
-Index: linux/drivers/scsi/arm/cumana_1.c
-===================================================================
---- linux.orig/drivers/scsi/arm/cumana_1.c	2016-01-03 16:02:56.000000000 +1100
-+++ linux/drivers/scsi/arm/cumana_1.c	2016-01-03 16:03:03.000000000 +1100
-@@ -240,6 +240,8 @@ static int cumanascsi1_probe(struct expa
- 
- 	NCR5380_init(host, 0);
- 
-+	NCR5380_maybe_reset_bus(host);
-+
-         priv(host)->ctrl = 0;
-         writeb(0, priv(host)->base + CTRL);
- 
-Index: linux/drivers/scsi/arm/oak.c
-===================================================================
---- linux.orig/drivers/scsi/arm/oak.c	2016-01-03 16:02:56.000000000 +1100
-+++ linux/drivers/scsi/arm/oak.c	2016-01-03 16:03:03.000000000 +1100
-@@ -145,6 +145,8 @@ static int oakscsi_probe(struct expansio
- 
- 	NCR5380_init(host, 0);
- 
-+	NCR5380_maybe_reset_bus(host);
-+
- 	ret = scsi_add_host(host, &ec->dev);
- 	if (ret)
- 		goto out_unmap;
-Index: linux/drivers/scsi/dmx3191d.c
-===================================================================
---- linux.orig/drivers/scsi/dmx3191d.c	2016-01-03 16:02:56.000000000 +1100
-+++ linux/drivers/scsi/dmx3191d.c	2016-01-03 16:03:03.000000000 +1100
-@@ -97,6 +97,8 @@ static int dmx3191d_probe_one(struct pci
- 
- 	NCR5380_init(shost, FLAG_NO_PSEUDO_DMA | FLAG_DTC3181E);
- 
-+	NCR5380_maybe_reset_bus(shost);
-+
- 	pci_set_drvdata(pdev, shost);
- 
- 	error = scsi_add_host(shost, &pdev->dev);
-Index: linux/drivers/scsi/dtc.c
-===================================================================
---- linux.orig/drivers/scsi/dtc.c	2016-01-03 16:02:56.000000000 +1100
-+++ linux/drivers/scsi/dtc.c	2016-01-03 16:03:03.000000000 +1100
-@@ -237,6 +237,8 @@ found:
- 
- 		NCR5380_init(instance, 0);
- 
-+		NCR5380_maybe_reset_bus(instance);
-+
- 		NCR5380_write(DTC_CONTROL_REG, CSR_5380_INTR);	/* Enable int's */
- 		if (overrides[current_override].irq != IRQ_AUTO)
- 			instance->irq = overrides[current_override].irq;
-Index: linux/drivers/scsi/g_NCR5380.c
-===================================================================
---- linux.orig/drivers/scsi/g_NCR5380.c	2016-01-03 16:03:02.000000000 +1100
-+++ linux/drivers/scsi/g_NCR5380.c	2016-01-03 16:03:03.000000000 +1100
-@@ -422,6 +422,8 @@ static int __init generic_NCR5380_detect
- 
- 		NCR5380_init(instance, flags);
- 
-+		NCR5380_maybe_reset_bus(instance);
-+
- 		if (overrides[current_override].irq != IRQ_AUTO)
- 			instance->irq = overrides[current_override].irq;
- 		else
-Index: linux/drivers/scsi/pas16.c
-===================================================================
---- linux.orig/drivers/scsi/pas16.c	2016-01-03 16:02:56.000000000 +1100
-+++ linux/drivers/scsi/pas16.c	2016-01-03 16:03:03.000000000 +1100
-@@ -384,6 +384,8 @@ static int __init pas16_detect(struct sc
- 
- 	NCR5380_init(instance, 0);
- 
-+	NCR5380_maybe_reset_bus(instance);
-+
- 	if (overrides[current_override].irq != IRQ_AUTO)
- 	    instance->irq = overrides[current_override].irq;
- 	else 
-Index: linux/drivers/scsi/t128.c
-===================================================================
---- linux.orig/drivers/scsi/t128.c	2016-01-03 16:02:56.000000000 +1100
-+++ linux/drivers/scsi/t128.c	2016-01-03 16:03:03.000000000 +1100
-@@ -215,6 +215,8 @@ found:
- 
- 	NCR5380_init(instance, 0);
- 
-+	NCR5380_maybe_reset_bus(instance);
-+
- 	if (overrides[current_override].irq != IRQ_AUTO)
- 	    instance->irq = overrides[current_override].irq;
- 	else
+An embedded and charset-unspecified text was scrubbed...
+Name: ncr5380-bus-wedge
+URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160103/70798f06/attachment.ksh>
diff --git a/a/content_digest b/N1/content_digest
index 6a8e837..330dff6 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -1,212 +1,12 @@
  "ref\020160103050501.042035135@telegraphics.com.au\0"
- "From\0Finn Thain <fthain@telegraphics.com.au>\0"
+ "From\0fthain@telegraphics.com.au (Finn Thain)\0"
  "Subject\0[PATCH v4 07/78] ncr5380: Split NCR5380_init() into two functions\0"
  "Date\0Sun, 03 Jan 2016 16:05:08 +1100\0"
- "To\0James E.J. Bottomley <JBottomley@odin.com>"
-  Martin K. Petersen <martin.petersen@oracle.com>
-  Michael Schmitz <schmitzmic@gmail.com>
-  linux-m68k@vger.kernel.org
-  linux-scsi@vger.kernel.org
-  linux-kernel@vger.kernel.org
-  Russell King <linux@arm.linux.org.uk>
- " linux-arm-kernel@lists.infradead.org\0"
+ "To\0linux-arm-kernel@lists.infradead.org\0"
  "\00:1\0"
- "fn\0ncr5380-bus-wedge\0"
  "b\0"
- "This patch splits the NCR5380_init() function into two parts, similar\n"
- "to the scheme used with atari_NCR5380.c. This avoids two problems.\n"
- "\n"
- "Firstly, NCR5380_init() may perform a bus reset, which would cause the\n"
- "chip to assert IRQ. The chip is unable to mask its bus reset interrupt.\n"
- "Drivers can't call request_irq() before calling NCR5380_init(), because\n"
- "initialization must happen before the interrupt handler executes. If\n"
- "driver initialization causes an interrupt it may be problematic on some\n"
- "platforms. To avoid that, first move the bus reset code into\n"
- "NCR5380_maybe_reset_bus().\n"
- "\n"
- "Secondly, NCR5380_init() contains some board-specific interrupt setup code\n"
- "for the NCR53C400 that does not belong in the core driver. In moving this\n"
- "code, better not re-order interrupt initialization and bus reset. Again,\n"
- "the solution is to move the bus reset code into NCR5380_maybe_reset_bus().\n"
- "\n"
- "Signed-off-by: Finn Thain <fthain@telegraphics.com.au>\n"
- "Reviewed-by: Hannes Reinecke <hare@suse.com>\n"
- "Tested-by: Ondrej Zary <linux@rainbow-software.org>\n"
- "\n"
- "---\n"
- " drivers/scsi/NCR5380.c      |   34 ++++++++++++++++++++--------------\n"
- " drivers/scsi/NCR5380.h      |    1 +\n"
- " drivers/scsi/arm/cumana_1.c |    2 ++\n"
- " drivers/scsi/arm/oak.c      |    2 ++\n"
- " drivers/scsi/dmx3191d.c     |    2 ++\n"
- " drivers/scsi/dtc.c          |    2 ++\n"
- " drivers/scsi/g_NCR5380.c    |    2 ++\n"
- " drivers/scsi/pas16.c        |    2 ++\n"
- " drivers/scsi/t128.c         |    2 ++\n"
- " 9 files changed, 35 insertions(+), 14 deletions(-)\n"
- "\n"
- "Index: linux/drivers/scsi/NCR5380.c\n"
- "===================================================================\n"
- "--- linux.orig/drivers/scsi/NCR5380.c\t2016-01-03 16:03:02.000000000 +1100\n"
- "+++ linux/drivers/scsi/NCR5380.c\t2016-01-03 16:03:03.000000000 +1100\n"
- "@@ -777,8 +777,7 @@ static void lprint_opcode(int opcode, st\n"
- " \n"
- " static int NCR5380_init(struct Scsi_Host *instance, int flags)\n"
- " {\n"
- "-\tint i, pass;\n"
- "-\tunsigned long timeout;\n"
- "+\tint i;\n"
- " \tstruct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;\n"
- " \n"
- " \tif(in_interrupt())\n"
- "@@ -831,18 +830,26 @@ static int NCR5380_init(struct Scsi_Host\n"
- " \t\tNCR5380_write(C400_CONTROL_STATUS_REG, CSR_BASE);\n"
- " \t}\n"
- " #endif\n"
- "+\treturn 0;\n"
- "+}\n"
- " \n"
- "-\t/* \n"
- "-\t * Detect and correct bus wedge problems.\n"
- "-\t *\n"
- "-\t * If the system crashed, it may have crashed in a state \n"
- "-\t * where a SCSI command was still executing, and the \n"
- "-\t * SCSI bus is not in a BUS FREE STATE.\n"
- "-\t *\n"
- "-\t * If this is the case, we'll try to abort the currently\n"
- "-\t * established nexus which we know nothing about, and that\n"
- "-\t * failing, do a hard reset of the SCSI bus \n"
- "-\t */\n"
- "+/**\n"
- "+ * NCR5380_maybe_reset_bus - Detect and correct bus wedge problems.\n"
- "+ * @instance: adapter to check\n"
- "+ *\n"
- "+ * If the system crashed, it may have crashed with a connected target and\n"
- "+ * the SCSI bus busy. Check for BUS FREE phase. If not, try to abort the\n"
- "+ * currently established nexus, which we know nothing about. Failing that\n"
- "+ * do a bus reset.\n"
- "+ *\n"
- "+ * Note that a bus reset will cause the chip to assert IRQ.\n"
- "+ *\n"
- "+ * Returns 0 if successful, otherwise -ENXIO.\n"
- "+ */\n"
- "+\n"
- "+static int NCR5380_maybe_reset_bus(struct Scsi_Host *instance)\n"
- "+{\n"
- "+\tint pass;\n"
- " \n"
- " \tfor (pass = 1; (NCR5380_read(STATUS_REG) & SR_BSY) && pass <= 6; ++pass) {\n"
- " \t\tswitch (pass) {\n"
- "@@ -850,7 +857,6 @@ static int NCR5380_init(struct Scsi_Host\n"
- " \t\tcase 3:\n"
- " \t\tcase 5:\n"
- " \t\t\tprintk(KERN_INFO \"scsi%d: SCSI bus busy, waiting up to five seconds\\n\", instance->host_no);\n"
- "-\t\t\ttimeout = jiffies + 5 * HZ;\n"
- " \t\t\tNCR5380_poll_politely(instance, STATUS_REG, SR_BSY, 0, 5*HZ);\n"
- " \t\t\tbreak;\n"
- " \t\tcase 2:\n"
- "Index: linux/drivers/scsi/NCR5380.h\n"
- "===================================================================\n"
- "--- linux.orig/drivers/scsi/NCR5380.h\t2016-01-03 16:02:54.000000000 +1100\n"
- "+++ linux/drivers/scsi/NCR5380.h\t2016-01-03 16:03:03.000000000 +1100\n"
- "@@ -318,6 +318,7 @@ static void NCR5380_print(struct Scsi_Ho\n"
- " static int NCR5380_probe_irq(struct Scsi_Host *instance, int possible);\n"
- " #endif\n"
- " static int NCR5380_init(struct Scsi_Host *instance, int flags);\n"
- "+static int NCR5380_maybe_reset_bus(struct Scsi_Host *);\n"
- " static void NCR5380_exit(struct Scsi_Host *instance);\n"
- " static void NCR5380_information_transfer(struct Scsi_Host *instance);\n"
- " #ifndef DONT_USE_INTR\n"
- "Index: linux/drivers/scsi/arm/cumana_1.c\n"
- "===================================================================\n"
- "--- linux.orig/drivers/scsi/arm/cumana_1.c\t2016-01-03 16:02:56.000000000 +1100\n"
- "+++ linux/drivers/scsi/arm/cumana_1.c\t2016-01-03 16:03:03.000000000 +1100\n"
- "@@ -240,6 +240,8 @@ static int cumanascsi1_probe(struct expa\n"
- " \n"
- " \tNCR5380_init(host, 0);\n"
- " \n"
- "+\tNCR5380_maybe_reset_bus(host);\n"
- "+\n"
- "         priv(host)->ctrl = 0;\n"
- "         writeb(0, priv(host)->base + CTRL);\n"
- " \n"
- "Index: linux/drivers/scsi/arm/oak.c\n"
- "===================================================================\n"
- "--- linux.orig/drivers/scsi/arm/oak.c\t2016-01-03 16:02:56.000000000 +1100\n"
- "+++ linux/drivers/scsi/arm/oak.c\t2016-01-03 16:03:03.000000000 +1100\n"
- "@@ -145,6 +145,8 @@ static int oakscsi_probe(struct expansio\n"
- " \n"
- " \tNCR5380_init(host, 0);\n"
- " \n"
- "+\tNCR5380_maybe_reset_bus(host);\n"
- "+\n"
- " \tret = scsi_add_host(host, &ec->dev);\n"
- " \tif (ret)\n"
- " \t\tgoto out_unmap;\n"
- "Index: linux/drivers/scsi/dmx3191d.c\n"
- "===================================================================\n"
- "--- linux.orig/drivers/scsi/dmx3191d.c\t2016-01-03 16:02:56.000000000 +1100\n"
- "+++ linux/drivers/scsi/dmx3191d.c\t2016-01-03 16:03:03.000000000 +1100\n"
- "@@ -97,6 +97,8 @@ static int dmx3191d_probe_one(struct pci\n"
- " \n"
- " \tNCR5380_init(shost, FLAG_NO_PSEUDO_DMA | FLAG_DTC3181E);\n"
- " \n"
- "+\tNCR5380_maybe_reset_bus(shost);\n"
- "+\n"
- " \tpci_set_drvdata(pdev, shost);\n"
- " \n"
- " \terror = scsi_add_host(shost, &pdev->dev);\n"
- "Index: linux/drivers/scsi/dtc.c\n"
- "===================================================================\n"
- "--- linux.orig/drivers/scsi/dtc.c\t2016-01-03 16:02:56.000000000 +1100\n"
- "+++ linux/drivers/scsi/dtc.c\t2016-01-03 16:03:03.000000000 +1100\n"
- "@@ -237,6 +237,8 @@ found:\n"
- " \n"
- " \t\tNCR5380_init(instance, 0);\n"
- " \n"
- "+\t\tNCR5380_maybe_reset_bus(instance);\n"
- "+\n"
- " \t\tNCR5380_write(DTC_CONTROL_REG, CSR_5380_INTR);\t/* Enable int's */\n"
- " \t\tif (overrides[current_override].irq != IRQ_AUTO)\n"
- " \t\t\tinstance->irq = overrides[current_override].irq;\n"
- "Index: linux/drivers/scsi/g_NCR5380.c\n"
- "===================================================================\n"
- "--- linux.orig/drivers/scsi/g_NCR5380.c\t2016-01-03 16:03:02.000000000 +1100\n"
- "+++ linux/drivers/scsi/g_NCR5380.c\t2016-01-03 16:03:03.000000000 +1100\n"
- "@@ -422,6 +422,8 @@ static int __init generic_NCR5380_detect\n"
- " \n"
- " \t\tNCR5380_init(instance, flags);\n"
- " \n"
- "+\t\tNCR5380_maybe_reset_bus(instance);\n"
- "+\n"
- " \t\tif (overrides[current_override].irq != IRQ_AUTO)\n"
- " \t\t\tinstance->irq = overrides[current_override].irq;\n"
- " \t\telse\n"
- "Index: linux/drivers/scsi/pas16.c\n"
- "===================================================================\n"
- "--- linux.orig/drivers/scsi/pas16.c\t2016-01-03 16:02:56.000000000 +1100\n"
- "+++ linux/drivers/scsi/pas16.c\t2016-01-03 16:03:03.000000000 +1100\n"
- "@@ -384,6 +384,8 @@ static int __init pas16_detect(struct sc\n"
- " \n"
- " \tNCR5380_init(instance, 0);\n"
- " \n"
- "+\tNCR5380_maybe_reset_bus(instance);\n"
- "+\n"
- " \tif (overrides[current_override].irq != IRQ_AUTO)\n"
- " \t    instance->irq = overrides[current_override].irq;\n"
- " \telse \n"
- "Index: linux/drivers/scsi/t128.c\n"
- "===================================================================\n"
- "--- linux.orig/drivers/scsi/t128.c\t2016-01-03 16:02:56.000000000 +1100\n"
- "+++ linux/drivers/scsi/t128.c\t2016-01-03 16:03:03.000000000 +1100\n"
- "@@ -215,6 +215,8 @@ found:\n"
- " \n"
- " \tNCR5380_init(instance, 0);\n"
- " \n"
- "+\tNCR5380_maybe_reset_bus(instance);\n"
- "+\n"
- " \tif (overrides[current_override].irq != IRQ_AUTO)\n"
- " \t    instance->irq = overrides[current_override].irq;\n"
- " \telse"
+ "An embedded and charset-unspecified text was scrubbed...\n"
+ "Name: ncr5380-bus-wedge\n"
+ URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160103/70798f06/attachment.ksh>
 
-03c1070df79a8b86de1ff1f6fc1ce4e21777fade9d3a15a32ec9f6ec424e7005
+67f19ca2413049a68b2dfe718fcde7e83bc2ee677ba02244746d8584912d1110

diff --git a/a/content_digest b/N2/content_digest
index 6a8e837..1a84fab 100644
--- a/a/content_digest
+++ b/N2/content_digest
@@ -5,9 +5,9 @@
  "To\0James E.J. Bottomley <JBottomley@odin.com>"
   Martin K. Petersen <martin.petersen@oracle.com>
   Michael Schmitz <schmitzmic@gmail.com>
-  linux-m68k@vger.kernel.org
-  linux-scsi@vger.kernel.org
-  linux-kernel@vger.kernel.org
+  <linux-m68k@vger.kernel.org>
+  <linux-scsi@vger.kernel.org>
+  <linux-kernel@vger.kernel.org>
   Russell King <linux@arm.linux.org.uk>
  " linux-arm-kernel@lists.infradead.org\0"
  "\00:1\0"
@@ -209,4 +209,4 @@
  " \t    instance->irq = overrides[current_override].irq;\n"
  " \telse"
 
-03c1070df79a8b86de1ff1f6fc1ce4e21777fade9d3a15a32ec9f6ec424e7005
+ecd4800c42872de390d621d19778aa867d3abc6f949dfd2ad7de685a033294b4

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.