[kernel] r16460 - in dists/sid/linux-2.6/debian: . patches/bugfix/all patches/series

Ben Hutchings benh at alioth.debian.org
Tue Oct 19 02:33:46 UTC 2010


Author: benh
Date: Tue Oct 19 02:33:22 2010
New Revision: 16460

Log:
sata_via: Delay on vt6420 when starting ATAPI DMA write (Closes: #488566)

Added:
   dists/sid/linux-2.6/debian/patches/bugfix/all/sata_via-Delay-on-vt6420-when-starting-ATAPI-DMA-write.patch
Modified:
   dists/sid/linux-2.6/debian/changelog
   dists/sid/linux-2.6/debian/patches/series/26

Modified: dists/sid/linux-2.6/debian/changelog
==============================================================================
--- dists/sid/linux-2.6/debian/changelog	Tue Oct 19 02:25:01 2010	(r16459)
+++ dists/sid/linux-2.6/debian/changelog	Tue Oct 19 02:33:22 2010	(r16460)
@@ -21,6 +21,7 @@
   * [openvz] printk: Handle global log buffer reallocation (Closes: #600299)
   * debian/bin/test-patches: Restrict patches to featureset when building
     with a featureset (thanks to Tim Small)
+  * sata_via: Delay on vt6420 when starting ATAPI DMA write (Closes: #488566)
 
   [ dann frazier ]
   * Force enable DMA on MBP w/ MCP 7,1

Added: dists/sid/linux-2.6/debian/patches/bugfix/all/sata_via-Delay-on-vt6420-when-starting-ATAPI-DMA-write.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/bugfix/all/sata_via-Delay-on-vt6420-when-starting-ATAPI-DMA-write.patch	Tue Oct 19 02:33:22 2010	(r16460)
@@ -0,0 +1,77 @@
+From e9879d6c97f6a7605a0a4c03cdb8afd80ed771f3 Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Sun, 27 Jun 2010 19:04:56 +0100
+Subject: [PATCH] sata_via: Delay on vt6420 when starting ATAPI DMA write
+
+commit a55ab496ea9c820b7192c15ef1fbf3291edfe638 upstream.
+
+When writing a disc on certain lite-on dvd-writers (also rebadged
+as optiarc/LG/...) connected to a vt6420, the ATAPI CDB ends
+up in the datastream and on the disc, causing silent corruption.
+Delaying between sending the CDB and starting DMA seems to
+prevent this.
+
+I do not know if there are burners that do not suffer from
+this, but the patch should be safe for those as well.
+
+There are many reports of this issue, but AFAICT no solution was
+found before. For example:
+http://lkml.indiana.edu/hypermail/linux/kernel/0802.3/0561.html
+
+Signed-off-by: Bart Hartgers <bart.hartgers at gmail.com>
+Signed-off-by: Jeff Garzik <jgarzik at redhat.com>
+[bwh: Remove version bump for 2.6.32]
+---
+ drivers/ata/sata_via.c |   15 +++++++++++++++
+ 1 files changed, 15 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/ata/sata_via.c b/drivers/ata/sata_via.c
+index 02efd9a..d2d1899 100644
+--- a/drivers/ata/sata_via.c
++++ b/drivers/ata/sata_via.c
+@@ -40,6 +40,8 @@
+ #include <linux/blkdev.h>
+ #include <linux/delay.h>
+ #include <linux/device.h>
++#include <scsi/scsi.h>
++#include <scsi/scsi_cmnd.h>
+ #include <scsi/scsi_host.h>
+ #include <linux/libata.h>
+ 
+@@ -80,6 +82,7 @@ static int vt8251_scr_write(struct ata_link *link, unsigned int scr, u32 val);
+ static void svia_tf_load(struct ata_port *ap, const struct ata_taskfile *tf);
+ static void svia_noop_freeze(struct ata_port *ap);
+ static int vt6420_prereset(struct ata_link *link, unsigned long deadline);
++static void vt6420_bmdma_start(struct ata_queued_cmd *qc);
+ static int vt6421_pata_cable_detect(struct ata_port *ap);
+ static void vt6421_set_pio_mode(struct ata_port *ap, struct ata_device *adev);
+ static void vt6421_set_dma_mode(struct ata_port *ap, struct ata_device *adev);
+@@ -121,6 +124,7 @@ static struct ata_port_operations vt6420_sata_ops = {
+ 	.inherits		= &svia_base_ops,
+ 	.freeze			= svia_noop_freeze,
+ 	.prereset		= vt6420_prereset,
++	.bmdma_start		= vt6420_bmdma_start,
+ };
+ 
+ static struct ata_port_operations vt6421_pata_ops = {
+@@ -377,6 +381,17 @@ static int vt6420_prereset(struct ata_link *link, unsigned long deadline)
+ 	return 0;
+ }
+ 
++static void vt6420_bmdma_start(struct ata_queued_cmd *qc)
++{
++	struct ata_port *ap = qc->ap;
++	if ((qc->tf.command == ATA_CMD_PACKET) &&
++	    (qc->scsicmd->sc_data_direction == DMA_TO_DEVICE)) {
++		/* Prevents corruption on some ATAPI burners */
++		ata_sff_pause(ap);
++	}
++	ata_bmdma_start(qc);
++}
++
+ static int vt6421_pata_cable_detect(struct ata_port *ap)
+ {
+ 	struct pci_dev *pdev = to_pci_dev(ap->host->dev);
+-- 
+1.7.1
+

Modified: dists/sid/linux-2.6/debian/patches/series/26
==============================================================================
--- dists/sid/linux-2.6/debian/patches/series/26	Tue Oct 19 02:25:01 2010	(r16459)
+++ dists/sid/linux-2.6/debian/patches/series/26	Tue Oct 19 02:33:22 2010	(r16460)
@@ -6,3 +6,4 @@
 + bugfix/x86/ahci-ata_generic-let-ata_generic-handle-new-MBP-w-MCP89.patch
 + bugfix/all/ata_generic-implement-ATA_GEN_-flags-and-force-enable-DMA-on-MBP-7,1.patch
 + bugfix/all/ata_generic-drop-hard-coded-DMA-force-logic-for-CENATEK.patch
++ bugfix/all/sata_via-Delay-on-vt6420-when-starting-ATAPI-DMA-write.patch



More information about the Kernel-svn-changes mailing list