[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