aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2008-11-03 05:27:07 -0500
committerJeff Garzik <jgarzik@redhat.com>2008-11-04 01:08:33 -0500
commit299246f9a2a4c5c531863d72bad7ebd0de213de9 (patch)
treec153c51f2857e053cc40bada5a520d94fea4a354 /drivers/ata
parent6a87e42e955ff27e07a77f65f8f077dc7c4171e1 (diff)
libata: mask off DET when restoring SControl for detach
libata restores SControl on detach; however, trying to restore non-zero DET can cause undeterministic behavior including PMP device going offline till power cycling. Mask off DET when restoring SControl. Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/ata')
-rw-r--r--drivers/ata/libata-core.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 91b478f20557..622350d9b2e3 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -5936,7 +5936,7 @@ static void ata_port_detach(struct ata_port *ap)
5936 * to us. Restore SControl and disable all existing devices. 5936 * to us. Restore SControl and disable all existing devices.
5937 */ 5937 */
5938 __ata_port_for_each_link(link, ap) { 5938 __ata_port_for_each_link(link, ap) {
5939 sata_scr_write(link, SCR_CONTROL, link->saved_scontrol); 5939 sata_scr_write(link, SCR_CONTROL, link->saved_scontrol & 0xff0);
5940 ata_link_for_each_dev(dev, link) 5940 ata_link_for_each_dev(dev, link)
5941 ata_dev_disable(dev); 5941 ata_dev_disable(dev);
5942 } 5942 }