XINU
system
freebuf.c
Go to the documentation of this file.
1
5
#include <
xinu.h
>
6
19
syscall
freebuf
(
char
*bufaddr)
20
{
21
intmask
mask;
/* Saved interrupt mask */
22
struct
bpentry
*bpptr;
/* Pointer to entry in buftab */
23
bpid32
poolid;
/* ID of buffer's pool */
24
25
mask =
disable
();
26
27
/* Extract pool ID from integer prior to buffer address */
28
29
bufaddr -=
sizeof
(
bpid32
);
30
poolid = *(
bpid32
*)bufaddr;
31
if
(poolid < 0 || poolid >=
nbpools
)
32
{
33
restore
(mask);
34
return
SYSERR
;
35
}
36
37
/* Get address of correct pool entry in table */
38
39
bpptr = &
buftab
[poolid];
40
41
/* Insert buffer into list and signal semaphore */
42
43
((
struct
bpentry
*)bufaddr)->
bpnext
= bpptr->
bpnext
;
44
bpptr->
bpnext
= (
struct
bpentry
*)bufaddr;
45
signal
(bpptr->
bpsem
);
46
restore
(mask);
47
return
OK
;
48
}
buftab
struct bpentry buftab[]
バッファプールテーブルのextern宣言
Definition:
bufinit.c:8
restore
void restore(intmask)
xinu.h
全てのシステムヘッダファイルをインクルードする。
SYSERR
#define SYSERR
処理が失敗した場合
Definition:
kernel.h:79
OK
#define OK
処理が成功した場合
Definition:
kernel.h:77
freebuf
syscall freebuf(char *bufaddr)
バッファプールから取得したバッファを解放する。
Definition:
freebuf.c:19
bpid32
int32 bpid32
バッファプールID
Definition:
kernel.h:34
nbpools
bpid32 nbpools
割り当てられたバッファプールの現在の数
Definition:
bufinit.c:10
bpentry::bpsem
sid32 bpsem
バッファプールで現在使用可能なバッファをカウントするセマフォ
Definition:
bufpool.h:32
bpentry::bpnext
struct bpentry * bpnext
次のフリーバッファへのポインタ
Definition:
bufpool.h:30
bpentry
バッファプールテーブルエントリ
Definition:
bufpool.h:27
intmask
uint32 intmask
保存された割り込みマスク
Definition:
kernel.h:38
syscall
int32 syscall
システムコール関数 返り値の型
Definition:
kernel.h:47
signal
syscall signal(sid32)
セマフォにシグナルを送り、待機プロセスがある場合は解除する。
Definition:
signal.c:18
disable
intmask disable(void)
割り込み禁止(intr.Sに定義がある)
Generated by
1.8.13