summaryrefslogtreecommitdiffstats
path: root/sys/dev
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2007-02-23 16:25:08 +0000
committerjhb <jhb@FreeBSD.org>2007-02-23 16:25:08 +0000
commite21fb2b555d36a49b232ee191ef77f745b6c5280 (patch)
treee93bd90cb35a83882bef6ca2e41bbf03c4c5a077 /sys/dev
parent401f7aaf8a4b36c5409b47caeb111224c19cfa64 (diff)
downloadFreeBSD-src-e21fb2b555d36a49b232ee191ef77f745b6c5280.zip
FreeBSD-src-e21fb2b555d36a49b232ee191ef77f745b6c5280.tar.gz
Use 'pause' in several places rather than trying to tsleep() on NULL (which
triggers a KASSERT) or local variables. In the case of kern_ndis, the tsleep() actually used a common sleep address (curproc) making it susceptible to a premature wakeup.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/acpica/Osd/OsdSchedule.c3
-rw-r--r--sys/dev/ata/ata-all.c6
-rw-r--r--sys/dev/ata/atapi-cd.c6
-rw-r--r--sys/dev/ata/atapi-tape.c4
-rw-r--r--sys/dev/ppc/ppc.c3
5 files changed, 10 insertions, 12 deletions
diff --git a/sys/dev/acpica/Osd/OsdSchedule.c b/sys/dev/acpica/Osd/OsdSchedule.c
index fca04af..ea48266 100644
--- a/sys/dev/acpica/Osd/OsdSchedule.c
+++ b/sys/dev/acpica/Osd/OsdSchedule.c
@@ -132,7 +132,6 @@ void
AcpiOsSleep(ACPI_INTEGER Milliseconds)
{
int timo;
- static int dummy;
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
@@ -143,7 +142,7 @@ AcpiOsSleep(ACPI_INTEGER Milliseconds)
* DELAY instead for better granularity.
*/
if (timo > 0)
- tsleep(&dummy, 0, "acpislp", timo);
+ pause("acpislp", timo);
else
DELAY(Milliseconds * 1000);
diff --git a/sys/dev/ata/ata-all.c b/sys/dev/ata/ata-all.c
index 39c1dd6..0818f9b 100644
--- a/sys/dev/ata/ata-all.c
+++ b/sys/dev/ata/ata-all.c
@@ -122,7 +122,7 @@ ata_attach(device_t dev)
/* reset the controller HW, the channel and device(s) */
while (ATA_LOCKING(dev, ATA_LF_LOCK) != ch->unit)
- tsleep(&error, PRIBIO, "ataatch", 1);
+ pause("ataatch", 1);
ATA_RESET(dev);
ATA_LOCKING(dev, ATA_LF_UNLOCK);
@@ -196,7 +196,7 @@ ata_reinit(device_t dev)
/* poll for locking the channel */
while (ATA_LOCKING(dev, ATA_LF_LOCK) != ch->unit)
- tsleep(&dev, PRIBIO, "atarini", 1);
+ pause("atarini", 1);
/* catch eventual request in ch->running */
mtx_lock(&ch->state_mtx);
@@ -824,7 +824,7 @@ ata_udelay(int interval)
if (1 || interval < (1000000/hz) || ata_delayed_attach)
DELAY(interval);
else
- tsleep(&interval, PRIBIO, "ataslp", interval/(1000000/hz));
+ pause("ataslp", interval/(1000000/hz));
}
char *
diff --git a/sys/dev/ata/atapi-cd.c b/sys/dev/ata/atapi-cd.c
index 0dd7cd8..beb7667 100644
--- a/sys/dev/ata/atapi-cd.c
+++ b/sys/dev/ata/atapi-cd.c
@@ -710,7 +710,7 @@ acd_geom_access(struct g_provider *pp, int dr, int dw, int de)
request->u.atapi.sense.key == 7) &&
request->u.atapi.sense.asc == 4 &&
request->u.atapi.sense.ascq == 1)
- tsleep(&timeout, PRIBIO, "acdld", hz / 2);
+ pause("acdld", hz / 2);
else
break;
}
@@ -1095,7 +1095,7 @@ acd_fixate(device_t dev, int multisession)
/* some drives just return ready, wait for the expected fixate time */
if ((error = acd_test_ready(dev)) != EBUSY) {
timeout = timeout / (cdp->cap.cur_write_speed / 177);
- tsleep(&error, PRIBIO, "acdfix", timeout * hz / 2);
+ pause("acdfix", timeout * hz / 2);
return acd_test_ready(dev);
}
@@ -1104,7 +1104,7 @@ acd_fixate(device_t dev, int multisession)
return error;
if ((error = acd_test_ready(dev)) != EBUSY)
return error;
- tsleep(&error, PRIBIO, "acdcld", hz / 2);
+ pause("acdcld", hz / 2);
}
return EIO;
}
diff --git a/sys/dev/ata/atapi-tape.c b/sys/dev/ata/atapi-tape.c
index 12a9ce1..360e006 100644
--- a/sys/dev/ata/atapi-tape.c
+++ b/sys/dev/ata/atapi-tape.c
@@ -612,7 +612,7 @@ ast_load_unload(device_t dev, u_int8_t function)
error = ata_atapicmd(dev, ccb, NULL, 0, 0, 10);
if (error)
return error;
- tsleep((caddr_t)&error, PRIBIO, "astlu", 1 * hz);
+ pause("astlu", 1 * hz);
if (function == ATAPI_SS_EJECT)
return 0;
return ast_wait_dsc(dev, 60*60);
@@ -665,7 +665,7 @@ ast_wait_dsc(device_t dev, int timeout)
error = ata_atapicmd(dev, ccb, NULL, 0, 0, 0);
if (error != EBUSY)
break;
- tsleep(&error, PRIBIO, "atpwt", hz / 2);
+ pause("atpwt", hz / 2);
timeout -= (hz / 2);
}
return error;
diff --git a/sys/dev/ppc/ppc.c b/sys/dev/ppc/ppc.c
index 4cb1b2a..72a7c86 100644
--- a/sys/dev/ppc/ppc.c
+++ b/sys/dev/ppc/ppc.c
@@ -1393,8 +1393,7 @@ ppc_exec_microseq(device_t dev, struct ppb_microseq **p_msq)
case MS_OP_ADELAY:
if (mi->arg[0].i)
- tsleep(NULL, PPBPRI, "ppbdelay",
- mi->arg[0].i * (hz/1000));
+ pause("ppbdelay", mi->arg[0].i * (hz/1000));
INCR_PC;
break;
OpenPOWER on IntegriCloud