Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature_posix/sys/src/libthread/sched.acid – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
sizeof_1_ = 8;
2
aggr _1_
3
{
4
	'U' 0 lo;
5
	'U' 4 hi;
6
};
7
 
8
defn
9
_1_(addr) {
10
	complex _1_ addr;
11
	print("	lo	", addr.lo, "\n");
12
	print("	hi	", addr.hi, "\n");
13
};
14
 
15
sizeofFPdbleword = 8;
16
aggr FPdbleword
17
{
18
	'F' 0 x;
19
	{
20
	'U' 0 lo;
21
	'U' 4 hi;
22
	};
23
};
24
 
25
defn
26
FPdbleword(addr) {
27
	complex FPdbleword addr;
28
	print("	x	", addr.x, "\n");
29
	print("_1_ {\n");
30
		_1_(addr+0);
31
	print("}\n");
32
};
33
 
34
UTFmax = 4;
35
Runesync = 128;
36
Runeself = 128;
37
Runeerror = 65533;
38
Runemax = 1114111;
39
Runemask = 2097151;
40
sizeofFmt = 48;
41
aggr Fmt
42
{
43
	'b' 0 runes;
44
	'X' 4 start;
45
	'X' 8 to;
46
	'X' 12 stop;
47
	'X' 16 flush;
48
	'X' 20 farg;
49
	'D' 24 nfmt;
50
	'X' 28 args;
51
	'D' 32 r;
52
	'D' 36 width;
53
	'D' 40 prec;
54
	'U' 44 flags;
55
};
56
 
57
defn
58
Fmt(addr) {
59
	complex Fmt addr;
60
	print("	runes	", addr.runes, "\n");
61
	print("	start	", addr.start\X, "\n");
62
	print("	to	", addr.to\X, "\n");
63
	print("	stop	", addr.stop\X, "\n");
64
	print("	flush	", addr.flush\X, "\n");
65
	print("	farg	", addr.farg\X, "\n");
66
	print("	nfmt	", addr.nfmt, "\n");
67
	print("	args	", addr.args\X, "\n");
68
	print("	r	", addr.r, "\n");
69
	print("	width	", addr.width, "\n");
70
	print("	prec	", addr.prec, "\n");
71
	print("	flags	", addr.flags, "\n");
72
};
73
 
74
FmtWidth = 1;
75
FmtLeft = 2;
76
FmtPrec = 4;
77
FmtSharp = 8;
78
FmtSpace = 16;
79
FmtSign = 32;
80
FmtZero = 64;
81
FmtUnsigned = 128;
82
FmtShort = 256;
83
FmtLong = 512;
84
FmtVLong = 1024;
85
FmtComma = 2048;
86
FmtByte = 4096;
87
FmtFlag = 8192;
88
sizeofTm = 40;
89
aggr Tm
90
{
91
	'D' 0 sec;
92
	'D' 4 min;
93
	'D' 8 hour;
94
	'D' 12 mday;
95
	'D' 16 mon;
96
	'D' 20 year;
97
	'D' 24 wday;
98
	'D' 28 yday;
99
	'a' 32 zone;
100
	'D' 36 tzoff;
101
};
102
 
103
defn
104
Tm(addr) {
105
	complex Tm addr;
106
	print("	sec	", addr.sec, "\n");
107
	print("	min	", addr.min, "\n");
108
	print("	hour	", addr.hour, "\n");
109
	print("	mday	", addr.mday, "\n");
110
	print("	mon	", addr.mon, "\n");
111
	print("	year	", addr.year, "\n");
112
	print("	wday	", addr.wday, "\n");
113
	print("	yday	", addr.yday, "\n");
114
	print("	zone	", addr.zone, "\n");
115
	print("	tzoff	", addr.tzoff, "\n");
116
};
117
 
118
PNPROC = 1;
119
PNGROUP = 2;
120
Profoff = 0;
121
Profuser = 1;
122
Profkernel = 2;
123
Proftime = 3;
124
Profsample = 4;
125
sizeofLock = 8;
126
aggr Lock
127
{
128
	'D' 0 key;
129
	'D' 4 sem;
130
};
131
 
132
defn
133
Lock(addr) {
134
	complex Lock addr;
135
	print("	key	", addr.key, "\n");
136
	print("	sem	", addr.sem, "\n");
137
};
138
 
139
sizeofQLp = 12;
140
aggr QLp
141
{
142
	'D' 0 inuse;
143
	'A' QLp 4 next;
144
	'C' 8 state;
145
};
146
 
147
defn
148
QLp(addr) {
149
	complex QLp addr;
150
	print("	inuse	", addr.inuse, "\n");
151
	print("	next	", addr.next\X, "\n");
152
	print("	state	", addr.state, "\n");
153
};
154
 
155
sizeofQLock = 20;
156
aggr QLock
157
{
158
	Lock 0 lock;
159
	'D' 8 locked;
160
	'A' QLp 12 $head;
161
	'A' QLp 16 $tail;
162
};
163
 
164
defn
165
QLock(addr) {
166
	complex QLock addr;
167
	print("Lock lock {\n");
168
	Lock(addr.lock);
169
	print("}\n");
170
	print("	locked	", addr.locked, "\n");
171
	print("	$head	", addr.$head\X, "\n");
172
	print("	$tail	", addr.$tail\X, "\n");
173
};
174
 
175
sizeofRWLock = 24;
176
aggr RWLock
177
{
178
	Lock 0 lock;
179
	'D' 8 readers;
180
	'D' 12 writer;
181
	'A' QLp 16 $head;
182
	'A' QLp 20 $tail;
183
};
184
 
185
defn
186
RWLock(addr) {
187
	complex RWLock addr;
188
	print("Lock lock {\n");
189
	Lock(addr.lock);
190
	print("}\n");
191
	print("	readers	", addr.readers, "\n");
192
	print("	writer	", addr.writer, "\n");
193
	print("	$head	", addr.$head\X, "\n");
194
	print("	$tail	", addr.$tail\X, "\n");
195
};
196
 
197
sizeofRendez = 12;
198
aggr Rendez
199
{
200
	'A' QLock 0 l;
201
	'A' QLp 4 $head;
202
	'A' QLp 8 $tail;
203
};
204
 
205
defn
206
Rendez(addr) {
207
	complex Rendez addr;
208
	print("	l	", addr.l\X, "\n");
209
	print("	$head	", addr.$head\X, "\n");
210
	print("	$tail	", addr.$tail\X, "\n");
211
};
212
 
213
sizeofNetConnInfo = 36;
214
aggr NetConnInfo
215
{
216
	'X' 0 dir;
217
	'X' 4 root;
218
	'X' 8 spec;
219
	'X' 12 lsys;
220
	'X' 16 lserv;
221
	'X' 20 rsys;
222
	'X' 24 rserv;
223
	'X' 28 laddr;
224
	'X' 32 raddr;
225
};
226
 
227
defn
228
NetConnInfo(addr) {
229
	complex NetConnInfo addr;
230
	print("	dir	", addr.dir\X, "\n");
231
	print("	root	", addr.root\X, "\n");
232
	print("	spec	", addr.spec\X, "\n");
233
	print("	lsys	", addr.lsys\X, "\n");
234
	print("	lserv	", addr.lserv\X, "\n");
235
	print("	rsys	", addr.rsys\X, "\n");
236
	print("	rserv	", addr.rserv\X, "\n");
237
	print("	laddr	", addr.laddr\X, "\n");
238
	print("	raddr	", addr.raddr\X, "\n");
239
};
240
 
241
RFNAMEG = 1;
242
RFENVG = 2;
243
RFFDG = 4;
244
RFNOTEG = 8;
245
RFPROC = 16;
246
RFMEM = 32;
247
RFNOWAIT = 64;
248
RFCNAMEG = 1024;
249
RFCENVG = 2048;
250
RFCFDG = 4096;
251
RFREND = 8192;
252
RFNOMNT = 16384;
253
sizeofQid = 16;
254
aggr Qid
255
{
256
	'W' 0 path;
257
	'U' 8 vers;
258
	'b' 12 type;
259
};
260
 
261
defn
262
Qid(addr) {
263
	complex Qid addr;
264
	print("	path	", addr.path, "\n");
265
	print("	vers	", addr.vers, "\n");
266
	print("	type	", addr.type, "\n");
267
};
268
 
269
sizeofDir = 60;
270
aggr Dir
271
{
272
	'u' 0 type;
273
	'U' 4 dev;
274
	Qid 8 qid;
275
	'U' 24 mode;
276
	'U' 28 atime;
277
	'U' 32 mtime;
278
	'V' 36 length;
279
	'X' 44 name;
280
	'X' 48 uid;
281
	'X' 52 gid;
282
	'X' 56 muid;
283
};
284
 
285
defn
286
Dir(addr) {
287
	complex Dir addr;
288
	print("	type	", addr.type, "\n");
289
	print("	dev	", addr.dev, "\n");
290
	print("Qid qid {\n");
291
	Qid(addr.qid);
292
	print("}\n");
293
	print("	mode	", addr.mode, "\n");
294
	print("	atime	", addr.atime, "\n");
295
	print("	mtime	", addr.mtime, "\n");
296
	print("	length	", addr.length, "\n");
297
	print("	name	", addr.name\X, "\n");
298
	print("	uid	", addr.uid\X, "\n");
299
	print("	gid	", addr.gid\X, "\n");
300
	print("	muid	", addr.muid\X, "\n");
301
};
302
 
303
sizeofWaitmsg = 20;
304
aggr Waitmsg
305
{
306
	'D' 0 pid;
307
	'a' 4 time;
308
	'X' 16 msg;
309
};
310
 
311
defn
312
Waitmsg(addr) {
313
	complex Waitmsg addr;
314
	print("	pid	", addr.pid, "\n");
315
	print("	time	", addr.time, "\n");
316
	print("	msg	", addr.msg\X, "\n");
317
};
318
 
319
sizeofIOchunk = 8;
320
aggr IOchunk
321
{
322
	'X' 0 addr;
323
	'U' 4 len;
324
};
325
 
326
defn
327
IOchunk(addr) {
328
	complex IOchunk addr;
329
	print("	addr	", addr.addr\X, "\n");
330
	print("	len	", addr.len, "\n");
331
};
332
 
333
Nqwds = 2;
334
Nqshift = 5;
335
Nqmask = -1;
336
Nqbits = 64;
337
sizeofChannel = 36;
338
aggr Channel
339
{
340
	'D' 0 s;
341
	'U' 4 f;
342
	'U' 8 n;
343
	'D' 12 e;
344
	'D' 16 freed;
345
	'X' 20 qentry;
346
	'D' 24 nentry;
347
	'D' 28 closed;
348
	'a' 32 v;
349
};
350
 
351
defn
352
Channel(addr) {
353
	complex Channel addr;
354
	print("	s	", addr.s, "\n");
355
	print("	f	", addr.f, "\n");
356
	print("	n	", addr.n, "\n");
357
	print("	e	", addr.e, "\n");
358
	print("	freed	", addr.freed, "\n");
359
	print("	qentry	", addr.qentry\X, "\n");
360
	print("	nentry	", addr.nentry, "\n");
361
	print("	closed	", addr.closed, "\n");
362
	print("	v	", addr.v, "\n");
363
};
364
 
365
CHANEND = 0;
366
CHANSND = 1;
367
CHANRCV = 2;
368
CHANNOP = 3;
369
CHANNOBLK = 4;
370
sizeofAlt = 24;
371
aggr Alt
372
{
373
	'A' Channel 0 c;
374
	'X' 4 v;
375
	'D' 8 op;
376
	'X' 12 err;
377
	'A' Channel 16 tag;
378
	'D' 20 entryno;
379
};
380
 
381
defn
382
Alt(addr) {
383
	complex Alt addr;
384
	print("	c	", addr.c\X, "\n");
385
	print("	v	", addr.v\X, "\n");
386
	print("	op	", addr.op, "\n");
387
	print("	err	", addr.err\X, "\n");
388
	print("	tag	", addr.tag\X, "\n");
389
	print("	entryno	", addr.entryno, "\n");
390
};
391
 
392
sizeofRef = 4;
393
aggr Ref
394
{
395
	'D' 0 ref;
396
};
397
 
398
defn
399
Ref(addr) {
400
	complex Ref addr;
401
	print("	ref	", addr.ref, "\n");
402
};
403
 
404
Dead = 0;
405
Running = 1;
406
Ready = 2;
407
Rendezvous = 3;
408
Channone = 0;
409
Chanalt = 1;
410
Chansend = 2;
411
Chanrecv = 3;
412
RENDHASH = 13;
413
Printsize = 2048;
414
NPRIV = 8;
415
sizeofRgrp = 60;
416
aggr Rgrp
417
{
418
	Lock 0 lock;
419
	'a' 8 hash;
420
};
421
 
422
defn
423
Rgrp(addr) {
424
	complex Rgrp addr;
425
	print("Lock lock {\n");
426
	Lock(addr.lock);
427
	print("}\n");
428
	print("	hash	", addr.hash, "\n");
429
};
430
 
431
sizeofTqueue = 12;
432
aggr Tqueue
433
{
434
	'D' 0 asleep;
435
	'X' 4 $head;
436
	'X' 8 $tail;
437
};
438
 
439
defn
440
Tqueue(addr) {
441
	complex Tqueue addr;
442
	print("	asleep	", addr.asleep, "\n");
443
	print("	$head	", addr.$head\X, "\n");
444
	print("	$tail	", addr.$tail\X, "\n");
445
};
446
 
447
sizeofThread = 124;
448
aggr Thread
449
{
450
	Lock 0 lock;
451
	'a' 8 sched;
452
	'D' 16 id;
453
	'D' 20 grp;
454
	'D' 24 moribund;
455
	'D' 28 state;
456
	'D' 32 nextstate;
457
	'X' 36 stk;
458
	'U' 40 stksize;
459
	'A' Thread 44 next;
460
	'X' 48 proc;
461
	'A' Thread 52 nextt;
462
	'D' 56 ret;
463
	'X' 60 cmdname;
464
	'D' 64 inrendez;
465
	'A' Thread 68 rendhash;
466
	'X' 72 rendtag;
467
	'X' 76 rendval;
468
	'D' 80 rendbreak;
469
	'D' 84 chan;
470
	'A' Alt 88 alt;
471
	'a' 92 udata;
472
};
473
 
474
defn
475
Thread(addr) {
476
	complex Thread addr;
477
	print("Lock lock {\n");
478
	Lock(addr.lock);
479
	print("}\n");
480
	print("	sched	", addr.sched, "\n");
481
	print("	id	", addr.id, "\n");
482
	print("	grp	", addr.grp, "\n");
483
	print("	moribund	", addr.moribund, "\n");
484
	print("	state	", addr.state, "\n");
485
	print("	nextstate	", addr.nextstate, "\n");
486
	print("	stk	", addr.stk\X, "\n");
487
	print("	stksize	", addr.stksize, "\n");
488
	print("	next	", addr.next\X, "\n");
489
	print("	proc	", addr.proc\X, "\n");
490
	print("	nextt	", addr.nextt\X, "\n");
491
	print("	ret	", addr.ret, "\n");
492
	print("	cmdname	", addr.cmdname\X, "\n");
493
	print("	inrendez	", addr.inrendez, "\n");
494
	print("	rendhash	", addr.rendhash\X, "\n");
495
	print("	rendtag	", addr.rendtag\X, "\n");
496
	print("	rendval	", addr.rendval\X, "\n");
497
	print("	rendbreak	", addr.rendbreak, "\n");
498
	print("	chan	", addr.chan, "\n");
499
	print("	alt	", addr.alt\X, "\n");
500
	print("	udata	", addr.udata, "\n");
501
};
502
 
503
sizeofExecargs = 16;
504
aggr Execargs
505
{
506
	'X' 0 prog;
507
	'X' 4 args;
508
	'a' 8 fd;
509
};
510
 
511
defn
512
Execargs(addr) {
513
	complex Execargs addr;
514
	print("	prog	", addr.prog\X, "\n");
515
	print("	args	", addr.args\X, "\n");
516
	print("	fd	", addr.fd, "\n");
517
};
518
 
519
sizeofProc = 2432;
520
aggr Proc
521
{
522
	Lock 0 lock;
523
	'a' 8 sched;
524
	'D' 16 pid;
525
	'D' 20 splhi;
526
	'A' Thread 24 thread;
527
	'D' 28 needexec;
528
	Execargs 32 exec;
529
	'A' Proc 48 newproc;
530
	'a' 52 exitstr;
531
	'D' 180 rforkflag;
532
	'D' 184 nthreads;
533
	Tqueue 188 threads;
534
	Tqueue 200 ready;
535
	Lock 212 readylock;
536
	'a' 220 printbuf;
537
	'D' 2268 blocked;
538
	'D' 2272 pending;
539
	'D' 2276 nonotes;
540
	'U' 2280 nextID;
541
	'A' Proc 2284 next;
542
	'X' 2288 arg;
543
	'a' 2292 str;
544
	'X' 2420 wdata;
545
	'X' 2424 udata;
546
	'C' 2428 threadint;
547
};
548
 
549
defn
550
Proc(addr) {
551
	complex Proc addr;
552
	print("Lock lock {\n");
553
	Lock(addr.lock);
554
	print("}\n");
555
	print("	sched	", addr.sched, "\n");
556
	print("	pid	", addr.pid, "\n");
557
	print("	splhi	", addr.splhi, "\n");
558
	print("	thread	", addr.thread\X, "\n");
559
	print("	needexec	", addr.needexec, "\n");
560
	print("Execargs exec {\n");
561
	Execargs(addr.exec);
562
	print("}\n");
563
	print("	newproc	", addr.newproc\X, "\n");
564
	print("	exitstr	", addr.exitstr, "\n");
565
	print("	rforkflag	", addr.rforkflag, "\n");
566
	print("	nthreads	", addr.nthreads, "\n");
567
	print("Tqueue threads {\n");
568
	Tqueue(addr.threads);
569
	print("}\n");
570
	print("Tqueue ready {\n");
571
	Tqueue(addr.ready);
572
	print("}\n");
573
	print("Lock readylock {\n");
574
	Lock(addr.readylock);
575
	print("}\n");
576
	print("	printbuf	", addr.printbuf, "\n");
577
	print("	blocked	", addr.blocked, "\n");
578
	print("	pending	", addr.pending, "\n");
579
	print("	nonotes	", addr.nonotes, "\n");
580
	print("	nextID	", addr.nextID, "\n");
581
	print("	next	", addr.next\X, "\n");
582
	print("	arg	", addr.arg\X, "\n");
583
	print("	str	", addr.str, "\n");
584
	print("	wdata	", addr.wdata\X, "\n");
585
	print("	udata	", addr.udata\X, "\n");
586
	print("	threadint	", addr.threadint, "\n");
587
};
588
 
589
sizeofPqueue = 16;
590
aggr Pqueue
591
{
592
	Lock 0 lock;
593
	'A' Proc 8 $head;
594
	'A' Proc 12 $tail;
595
};
596
 
597
defn
598
Pqueue(addr) {
599
	complex Pqueue addr;
600
	print("Lock lock {\n");
601
	Lock(addr.lock);
602
	print("}\n");
603
	print("	$head	", addr.$head\X, "\n");
604
	print("	$tail	", addr.$tail\X, "\n");
605
};
606
 
607
sizeofIoproc = 160;
608
aggr Ioproc
609
{
610
	'D' 0 tid;
611
	'A' Channel 4 c;
612
	'A' Channel 8 creply;
613
	'D' 12 inuse;
614
	'X' 16 op;
615
	'X' 20 arg;
616
	'D' 24 ret;
617
	'a' 28 err;
618
	'A' Ioproc 156 next;
619
};
620
 
621
defn
622
Ioproc(addr) {
623
	complex Ioproc addr;
624
	print("	tid	", addr.tid, "\n");
625
	print("	c	", addr.c\X, "\n");
626
	print("	creply	", addr.creply\X, "\n");
627
	print("	inuse	", addr.inuse, "\n");
628
	print("	op	", addr.op\X, "\n");
629
	print("	arg	", addr.arg\X, "\n");
630
	print("	ret	", addr.ret, "\n");
631
	print("	err	", addr.err, "\n");
632
	print("	next	", addr.next\X, "\n");
633
};
634
 
635
complex Pqueue _threadpq;
636
complex Channel _threadwaitchan;
637
complex Rgrp _threadrgrp;
638
sizeof_2_ = 24;
639
aggr _2_
640
{
641
	'X' 0 pp;
642
	'X' 4 next;
643
	'X' 8 last;
644
	'X' 12 first;
645
	'U' 16 pid;
646
	'U' 20 what;
647
};
648
 
649
defn
650
_2_(addr) {
651
	complex _2_ addr;
652
	print("	pp	", addr.pp\X, "\n");
653
	print("	next	", addr.next\X, "\n");
654
	print("	last	", addr.last\X, "\n");
655
	print("	first	", addr.first\X, "\n");
656
	print("	pid	", addr.pid, "\n");
657
	print("	what	", addr.what, "\n");
658
};
659
 
660
sizeofTos = 72;
661
aggr Tos
662
{
663
	_2_ 0 prof;
664
	'W' 24 cyclefreq;
665
	'V' 32 kcycles;
666
	'V' 40 pcycles;
667
	'U' 48 pid;
668
	'U' 52 clock;
669
	'a' 56 kscr;
670
};
671
 
672
defn
673
Tos(addr) {
674
	complex Tos addr;
675
	print("_2_ prof {\n");
676
	_2_(addr.prof);
677
	print("}\n");
678
	print("	cyclefreq	", addr.cyclefreq, "\n");
679
	print("	kcycles	", addr.kcycles, "\n");
680
	print("	pcycles	", addr.pcycles, "\n");
681
	print("	pid	", addr.pid, "\n");
682
	print("	clock	", addr.clock, "\n");
683
	print("	kscr	", addr.kscr, "\n");
684
};
685
 
686
complex Tos _tos;
687
complex Proc _schedinit:p;
688
complex Thread _schedinit:t;
689
complex Thread _schedinit:l;
690
complex Proc needstack:p;
691
complex Thread needstack:t;
692
complex Proc _sched:p;
693
complex Thread _sched:t;
694
complex Proc runthread:p;
695
complex Thread runthread:t;
696
complex Tqueue runthread:q;
697
complex Thread _threadready:t;
698
complex Tqueue _threadready:q;