|
|
1.1 root 1: /* ssclock.c - stopclk, strtclk */
2:
3: #include <conf.h>
4: #include <kernel.h>
5: #include <proc.h>
6: #include <q.h>
7: #include <sleep.h>
8:
9: /*------------------------------------------------------------------------
10: * stopclk -- put the clock in defer mode
11: *------------------------------------------------------------------------
12: */
13: stopclk()
14: {
15: defclk++;
16: }
17:
18: /*------------------------------------------------------------------------
19: * strtclk -- take the clock out of defer mode
20: *------------------------------------------------------------------------
21: */
22: strtclk()
23: {
24: PStype ps;
25: int makeup;
26: int next;
27:
28: disable(ps);
29: if ( defclk<=0 || --defclk>0 ) {
30: restore(ps);
31: return;
32: }
33: makeup = clkdiff;
34: preempt -= makeup;
35: clkdiff = 0;
36: if ( slnempty ) {
37: for (next=firstid(clockq) ;
38: next < NPROC && q[next].qkey < makeup ;
39: next=q[next].qnext) {
40: makeup -= q[next].qkey;
41: q[next].qkey = 0;
42: }
43: if (next < NPROC)
44: q[next].qkey -= makeup;
45: wakeup();
46: }
47: if ( preempt <= 0 )
48: resched();
49: restore(ps);
50: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.