summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/src/9/port/alarm.c3
-rw-r--r--sys/src/9/port/devaoe.c4
-rw-r--r--sys/src/9/port/devsdp.c2
-rw-r--r--sys/src/9/port/devsegment.c4
-rw-r--r--sys/src/9/port/random.c7
-rw-r--r--sys/src/9/port/swap.c5
-rw-r--r--sys/src/9/port/usbehci.c2
7 files changed, 20 insertions, 7 deletions
diff --git a/sys/src/9/port/alarm.c b/sys/src/9/port/alarm.c
index d500a68e4..b78088665 100644
--- a/sys/src/9/port/alarm.c
+++ b/sys/src/9/port/alarm.c
@@ -13,6 +13,9 @@ alarmkproc(void*)
Proc *rp;
ulong now;
+ while(waserror())
+ ;
+
for(;;){
now = MACHP(0)->ticks;
qlock(&alarms);
diff --git a/sys/src/9/port/devaoe.c b/sys/src/9/port/devaoe.c
index 0512f7016..a583ed4f3 100644
--- a/sys/src/9/port/devaoe.c
+++ b/sys/src/9/port/devaoe.c
@@ -701,8 +701,10 @@ loop:
}
runlock(&devs);
i = Nms - TK2MS(Ticks - starttick);
- if(i > 0)
+ if(i > 0 && !waserror()){
tsleep(&up->sleep, return0, 0, i);
+ poperror();
+ }
goto loop;
}
diff --git a/sys/src/9/port/devsdp.c b/sys/src/9/port/devsdp.c
index a205be87a..2be928d66 100644
--- a/sys/src/9/port/devsdp.c
+++ b/sys/src/9/port/devsdp.c
@@ -908,6 +908,8 @@ sdpackproc(void *a)
int i;
Conv *c;
+ while(waserror())
+ ;
for(;;) {
tsleep(&up->sleep, return0, 0, 1000);
sec = TK2SEC(m->ticks);
diff --git a/sys/src/9/port/devsegment.c b/sys/src/9/port/devsegment.c
index 2606cb8ac..e9806e933 100644
--- a/sys/src/9/port/devsegment.c
+++ b/sys/src/9/port/devsegment.c
@@ -530,6 +530,8 @@ segmentkproc(void *arg)
incref(g->s);
up->seg[sno] = g->s;
+ while(waserror())
+ ;
for(done = 0; !done;){
sleep(&g->cmdwait, cmdready, g);
if(waserror()){
@@ -554,6 +556,8 @@ segmentkproc(void *arg)
g->cmd = Cnone;
wakeup(&g->replywait);
}
+
+ pexit("done", 1);
}
Dev segmentdevtab = {
diff --git a/sys/src/9/port/random.c b/sys/src/9/port/random.c
index 3a697827a..f578d68cc 100644
--- a/sys/src/9/port/random.c
+++ b/sys/src/9/port/random.c
@@ -42,10 +42,11 @@ genrandom(void*)
up->basepri = PriNormal;
up->priority = up->basepri;
+ while(waserror())
+ ;
for(;;){
- for(;;)
- if(++rb.randomcount > 100000)
- break;
+ if(++rb.randomcount <= 100000)
+ continue;
if(anyhigher())
sched();
if(!rbnotfull(0))
diff --git a/sys/src/9/port/swap.c b/sys/src/9/port/swap.c
index 5c1d449bb..0340d566b 100644
--- a/sys/src/9/port/swap.c
+++ b/sys/src/9/port/swap.c
@@ -147,12 +147,11 @@ pager(void *junk)
Segment *s;
Proc *p, *ep;
- if(waserror())
- panic("pager: os error");
-
p = proctab(0);
ep = &p[conf.nproc];
+ while(waserror())
+ ;
loop:
up->psstate = "Idle";
wakeup(&palloc.r);
diff --git a/sys/src/9/port/usbehci.c b/sys/src/9/port/usbehci.c
index 0cdffb750..66546675c 100644
--- a/sys/src/9/port/usbehci.c
+++ b/sys/src/9/port/usbehci.c
@@ -2225,6 +2225,8 @@ ehcipoll(void* a)
hp = a;
ctlr = hp->aux;
poll = &ctlr->poll;
+ while(waserror())
+ ;
for(;;){
if(ctlr->nreqs == 0){
if(0)ddprint("ehcipoll %#p sleep\n", ctlr->capio);