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.