## diffname pc/cycintr.c 2000/0623
## diff -e /dev/null /n/emeliedump/2000/0623/sys/src/9/pc/cycintr.c
0a
#include "u.h"
#include "../port/lib.h"
#include "mem.h"
#include "dat.h"
#include "fns.h"
#include "io.h"
static struct
{
Lock;
vlong when; /* next scheduled interrupt time */
Cycintr *ci;
}cycintrs;
static void
cycsched(void)
{
}
void
checkcycintr(Ureg *u, void*)
{
Cycintr *ci;
ilock(&cycintrs);
while(ci = cycintrs.ci){
if(ci->when > fastticks(nil))
break;
cycintrs.ci = ci->next;
iunlock(&cycintrs);
(*ci->f)(u, ci);
ilock(&cycintrs);
}
cycsched();
iunlock(&cycintrs);
}
void
cycintradd(Cycintr *nci)
{
Cycintr *ci, **last;
ilock(&cycintrs);
last = &cycintrs.ci;
while(ci = *last){
if(ci == nci){
*last = ci->next;
break;
}
last = &ci->next;
}
last = &cycintrs.ci;
while(ci = *last){
if(ci->when > nci->when)
break;
last = &ci->next;
}
nci->next = *last;
*last = nci;
if(nci->when < cycintrs.when)
cycsched();
iunlock(&cycintrs);
}
void
cycintrdel(Cycintr *dci)
{
Cycintr *ci, **last;
ilock(&cycintrs);
last = &cycintrs.ci;
while(ci = *last){
if(ci == dci){
*last = ci->next;
break;
}
last = &ci->next;
}
iunlock(&cycintrs);
}
.
## diffname pc/cycintr.c 2000/0627
## diff -e /n/emeliedump/2000/0623/sys/src/9/pc/cycintr.c /n/emeliedump/2000/0627/sys/src/9/pc/cycintr.c
62,63d
36a
return 0;
.
35d
28,29c
when = ci->when;
if(when > fastticks(nil)){
iunlock(&cycintrs);
return when;
}
.
24a
vlong when;
.
21c
vlong
.
18a
Cycintr *ci;
vlong when;
ilock(&cycintrs);
when = 0;
ci = cycintrs.ci;
if(ci != nil)
when = ci->when;
iunlock(&cycintrs);
return when;
.
16,17c
/*
* called by clockintrsched()
*/
vlong
cycintrnext(void)
.
12d
## diffname pc/cycintr.c 2002/0405
## diff -e /n/emeliedump/2000/0627/sys/src/9/pc/cycintr.c /n/emeliedump/2002/0405/sys/src/9/pc/cycintr.c
95c
iunlock(&timers);
.
86,87c
ilock(&timers);
last = &timers.ci;
.
84c
Timer *ci, **last;
.
82c
timerdel(Timer *dci)
.
78c
iunlock(&timers);
.
70c
last = &timers.ci;
.
60,61c
ilock(&timers);
last = &timers.ci;
.
58c
Timer *ci, **last;
.
56c
timeradd(Timer *nci)
.
51c
iunlock(&timers);
.
49c
ilock(&timers);
.
46,47c
timers.ci = ci->next;
iunlock(&timers);
.
43c
iunlock(&timers);
.
39,40c
ilock(&timers);
while(ci = timers.ci){
.
36c
Timer *ci;
.
34c
checktimer(Ureg *u, void*)
.
29c
iunlock(&timers);
.
26c
ci = timers.ci;
.
24c
ilock(&timers);
.
21c
Timer *ci;
.
19c
timernext(void)
.
12,13c
Timer *ci;
}timers;
.
## diffname pc/cycintr.c 2002/0411 # deleted
## diff -e /n/emeliedump/2002/0405/sys/src/9/pc/cycintr.c /n/emeliedump/2002/0411/sys/src/9/pc/cycintr.c
1,96d
|