--- ata-all.c.orig 2009-03-19 14:00:36.000000000 +0000 +++ ata-all.c 2009-03-19 14:04:55.000000000 +0000 @@ -75,6 +75,7 @@ uma_zone_t ata_request_zone; uma_zone_t ata_composite_zone; int ata_wc = 1; +int ata_to = 5; int ata_setmax = 0; int ata_dma_check_80pin = 1; @@ -97,6 +98,9 @@ TUNABLE_INT("hw.ata.wc", &ata_wc); SYSCTL_INT(_hw_ata, OID_AUTO, wc, CTLFLAG_RDTUN, &ata_wc, 0, "ATA disk write caching"); +TUNABLE_INT("hw.ata.to", &ata_to); +SYSCTL_INT(_hw_ata, OID_AUTO, to, CTLFLAG_RW, &ata_to, 0, + "ATA disk timeout vis-a-vis power-saving"); TUNABLE_INT("hw.ata.setmax", &ata_setmax); SYSCTL_INT(_hw_ata, OID_AUTO, setmax, CTLFLAG_RDTUN, &ata_setmax, 0, "ATA disk set max native address"); --- ata-all.h.orig 2009-03-19 14:00:36.000000000 +0000 +++ ata-all.h 2009-03-19 14:05:31.000000000 +0000 @@ -545,6 +545,7 @@ extern struct intr_config_hook *ata_delayed_attach; extern devclass_t ata_devclass; extern int ata_wc; +extern int ata_to; extern int ata_setmax; extern int ata_dma_check_80pin; --- ata-disk.c.orig 2009-03-19 14:00:36.000000000 +0000 +++ ata-disk.c 2009-03-19 14:06:41.000000000 +0000 @@ -230,7 +230,7 @@ } request->dev = dev; request->flags = ATA_R_CONTROL; - request->timeout = 5; + request->timeout = ata_to; request->retries = 1; request->callback = ad_power_callback; request->u.ata.command = ATA_STANDBY_IMMEDIATE; @@ -265,7 +265,7 @@ request->timeout = 31; } else { - request->timeout = 5; + request->timeout = ata_to; } request->retries = 2; request->data = bp->bio_data; @@ -460,7 +460,7 @@ request->u.ata.count = 0; request->u.ata.feature = 0; request->flags = ATA_R_CONTROL | ATA_R_QUIET; - request->timeout = 5; + request->timeout = ata_to; request->retries = 0; ata_queue_request(request); if (request->status & ATA_S_ERROR) @@ -479,7 +479,7 @@ request->u.ata.count = 1; request->u.ata.feature = 0; request->flags = ATA_R_CONTROL; - request->timeout = 5; + request->timeout = ata_to; request->retries = 0; ata_queue_request(request); if (request->status & ATA_S_ERROR)