From c4c0e64babacbb7bc3bf5dc279f4854d88425837 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Tue, 26 Mar 1991 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1991-03-26 --- port/sysproc.c | 3 ++- power/devhotrod.c | 24 ++++++++++++++---------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/port/sysproc.c b/port/sysproc.c index 6bd9a861f4063702a5b0ff1ab59fa9e39a2dd01a..c18a7ffb433953d6944baad89a2ce455217307e6 100644 --- a/port/sysproc.c +++ b/port/sysproc.c @@ -474,7 +474,8 @@ sysforkpgrp(ulong *arg) long sysnotify(ulong *arg) { - validaddr(arg[0], sizeof(ulong), 0); + if(arg[0] != 0) + validaddr(arg[0], sizeof(ulong), 0); u->notify = (int(*)(void*, char*))(arg[0]); return 0; } diff --git a/power/devhotrod.c b/power/devhotrod.c index 2f3a6e1b6e99c18aae337286d408f5631ffc2773..2f3c803b8a27083241c1a2f8fe07acd0ec85ddb4 100644 --- a/power/devhotrod.c +++ b/power/devhotrod.c @@ -422,22 +422,26 @@ hotrodintr(int vec) { Hotrod *h; Hotmsg *hm; + ulong l; h = &hotrod[vec - Vmevec]; - if(h < hotrod || h > &hotrod[Nhotrod]){ + if(h&hotrod[Nhotrod]){ print("bad hotrod vec\n"); return; } h->addr->lcsr3 &= ~INT_VME; - hm = (Hotmsg*)VME2MP(h->rq[h->ri]); - h->rq[h->ri] = 0; - h->ri++; - if(h->ri >= NRQ) - h->ri = 0; - hm->intr = 1; - if(hm->abort) - return; - wakeup(&hm->r); + while(l = h->rq[h->ri]){ /* assign = */ + hm = (Hotmsg*)(VME2MP(l)); + h->rq[h->ri] = 0; + h->ri++; + if(h->ri >= NRQ) + h->ri = 0; + hm->intr = 1; + if(hm->abort) + print("abort wakeup\n"); + else + wakeup(&hm->r); + } } #ifdef ENABMEMTEST