Catch up with 5.2-CURRENT-20040423-JPSNAP

Submitted by:   Akira Ikeuchi <a_ikeuchi@mic.mitsumi.co.jp>

Approved by:    kuriyama (mentor)
This commit is contained in:
SUZUKI Koichi 2004-06-20 07:39:13 +00:00
parent 00528bc8c6
commit ce71f53e42
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=21198
16 changed files with 246 additions and 121 deletions

View file

@ -30,10 +30,10 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)acct.2 8.1 (Berkeley) 6/4/93
.\" %FreeBSD: src/lib/libc/sys/acct.2,v 1.15 2003/09/10 19:24:33 ru Exp %
.\" %FreeBSD: src/lib/libc/sys/acct.2,v 1.19 2004/04/16 22:53:51 brueffer Exp %
.\"
.\" $FreeBSD$
.Dd June 4, 1993
.Dd April 17, 2004
.Dt ACCT 2
.Os
.Sh 名称
@ -75,6 +75,17 @@
アカウンティングファイルが存在しているファイルシステムの空き容量が
少なくなると、アカウンティングは自動的に無効になります。
空き容量が増えて再び利用できるようになると有効になります。
この振舞いを制御する値は、以下の
.Xr sysctl 8
変数を使用して変更することが可能です:
.Bl -tag -width ".Va kern.acct_chkfreq"
.It Va kern.acct_chkfreq
空きディスク領域がチェックされるべき頻度を (秒単位で) 指定します。
.It Va kern.acct_resume
プロセスアカウンティングを再開する、空きディスク領域のパーセンテージです。
.It Va kern.acct_suspend
プロセスアカウンティングを中断する、空きディスク領域のパーセンテージです。
.El
.Sh 戻り値
エラーの場合は -1 が返されます。
ファイルは存在している必要があり、呼び出しはスーパユーザだけができます。
@ -106,6 +117,7 @@
.El
.Sh 関連項目
.Xr acct 5 ,
.Xr accton 8 ,
.Xr sa 8
.Sh 歴史
.Fn acct

View file

@ -30,14 +30,15 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)getfh.2 8.1 (Berkeley) 6/9/93
.\" %FreeBSD: src/lib/libc/sys/getfh.2,v 1.13 2002/12/19 09:40:24 ru Exp %
.\" %FreeBSD: src/lib/libc/sys/getfh.2,v 1.15 2004/04/06 09:06:45 dfr Exp %
.\"
.\" $FreeBSD$
.Dd June 9, 1993
.Dd April 6, 2004
.Dt GETFH 2
.Os
.Sh 名称
.Nm getfh
.Nm getfh ,
.Nm lgetfh
.Nd ファイルハンドルを得る
.Sh ライブラリ
.Lb libc
@ -46,16 +47,29 @@
.In sys/mount.h
.Ft int
.Fn getfh "const char *path" "fhandle_t *fhp"
.Ft int
.Fn lgetfh "const char *path" "fhandle_t *fhp"
.Sh 解説
.Fn getfh
システムコールは指定のファイルまたはディレクトリのファイルハンドルを
.Fa fhp
が指すファイルハンドルの格納領域に返します。
このシステムコールはスーパユーザに限定されます。
.Fn lgetfh
システムコールは、指定されたファイルがシンボリックリンクであった場合を除いて
.Fn getfh
と同様です。
この場合には
.Fn lgetfh
はそのリンクについての情報を返し、一方
.Fn getfh
はそのリンクが参照するファイルについての情報を返します。
これらのシステムコールはスーパユーザに限定されます。
.Sh 戻り値
.Rv -std getfh
.Rv -std
.Sh エラー
.Fn getfh
および
.Fn lgetfh
システムコールは以下の 1 つでも真の場合、処理に失敗します:
.Bl -tag -width Er
.It Bq Er ENOTDIR

View file

@ -22,7 +22,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" %FreeBSD: src/lib/libc/sys/kqueue.2,v 1.36 2003/11/11 16:41:27 brueffer Exp %
.\" %FreeBSD: src/lib/libc/sys/kqueue.2,v 1.37 2004/04/20 21:07:43 cperciva Exp %
.\"
.\" $FreeBSD$
.Dd April 14, 2000
@ -527,3 +527,7 @@ EV_ONESHOT
.Xr miibus 4
ドライバを使用しているデバイスに対してのみです。
そのため、非イーサネットデバイスに対しては動作しません。
.Pp
.Fa timeout
の値は 24 時間に制限されています。
より長いタイムアウトは暗黙のうちに 24 時間として再解釈されます。

View file

@ -30,7 +30,7 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)mmap.2 8.4 (Berkeley) 5/11/95
.\" %FreeBSD: src/lib/libc/sys/mmap.2,v 1.48 2002/12/24 16:52:30 ru Exp %
.\" %FreeBSD: src/lib/libc/sys/mmap.2,v 1.49 2004/04/18 23:36:45 cperciva Exp %
.\"
.\" $FreeBSD$
.Dd May 11, 1995
@ -344,3 +344,12 @@ sysctl
.Pp
2GB 制限のもうひとつの理由は、ファイルシステムメタデータが負のオフセットに
存在できるということです。
.Pp
0 バイトを
.Fn mmap
しようとしても何の効果もなく、単に成功します。
一方、0 バイトを
.Fn munmap
しようとすると
.Bq Er EINVAL
が返されることに注意してください。

View file

@ -30,14 +30,15 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)mount.2 8.3 (Berkeley) 5/24/95
.\" %FreeBSD: src/lib/libc/sys/mount.2,v 1.37 2003/09/08 16:23:21 iedowse Exp %
.\" %FreeBSD: src/lib/libc/sys/mount.2,v 1.38 2004/03/16 09:45:38 tjr Exp %
.\"
.\" $FreeBSD$
.Dd September 8, 2003
.Dd March 16, 2004
.Dt MOUNT 2
.Os
.Sh 名称
.Nm mount ,
.Nm nmount ,
.Nm unmount
.Nd ファイルシステムをマウントまたはマウント解除する
.Sh ライブラリ
@ -49,6 +50,9 @@
.Fn mount "const char *type" "const char *dir" "int flags" "void *data"
.Ft int
.Fn unmount "const char *dir" "int flags"
.In sys/uio.h
.Ft int
.Fn nmount "struct iovec *iov" "u_int niov" "int flags"
.Sh 解説
.Fn mount
システムコールは、ファイルシステムオブジェクトをシステムファイルツリーの
@ -73,6 +77,30 @@
にあるすべてのファイルが覆い隠された状態になり、
ファイルシステムがマウント解除されるまで利用できなくなります。
.Pp
.Fn nmount
システムコールは、マウントオプション (ファイルシステムタイプ名称、
マウントされるデバイス、マウントポイントなど) が、
.Fa niov
個の要素を持つ
.Fa iov
配列によって名前と値の組の配列として渡されることを除いては、
.Fn mount
と同様に動作します。
以下のオプションは全てのファイルシステムで要求されます:
.Bl -item -offset indent -compact
.It
.Li fstype Ta ファイルシステムタイプ名称 (例えば Dq Li procfs )
.It
.Li fspath Ta マウントポイントのパス名 (例えば Dq Li /proc )
.El
.Pp
ファイルシステムタイプに依存して、その他のオプションが認識あるいは要求
されます。
例えば、殆どのディスクベースのファイルシステムは、上記のオプションに加えて
スペシャルデバイスのパス名を格納する
.Dq Li from
オプションを要求します。
.Pp
デフォルトではスーパユーザのみが
.Fn mount
システムコールを呼び出すことができます。
@ -201,6 +229,8 @@ vfs
.Rv -std
.Sh エラー
.Fn mount
および
.Fn nmount
システムコールは、次のうちの 1 つでも起きたときには処理を失敗します:
.Bl -tag -width Er
.It Bq Er EPERM

View file

@ -30,7 +30,7 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)select.2 8.2 (Berkeley) 3/25/94
.\" %FreeBSD: src/lib/libc/sys/select.2,v 1.27 2004/03/03 14:51:11 dds Exp %
.\" %FreeBSD: src/lib/libc/sys/select.2,v 1.28 2004/03/19 16:04:11 dds Exp %
.\"
.\" $FreeBSD$
.Dd November 17, 2002
@ -140,9 +140,7 @@ NULL
.It Bq Er EBADF
記述子集合のどれかが無効な記述子を指定していました。
.It Bq Er EFAULT
.Fa readfds ,
.Fa writefds ,
.Fa exceptfds
.Fa readfds , writefds , exceptfds
または
.Fa timeout
の引数の 1 つが無効なアドレスを指しています。

View file

@ -26,7 +26,7 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" %FreeBSD: src/share/man/man9/DEVICE_ATTACH.9,v 1.7 2001/10/01 16:09:23 ru Exp %
.\" %FreeBSD: src/share/man/man9/DEVICE_ATTACH.9,v 1.8 2004/04/11 06:37:50 imp Exp %
.\"
.\" $FreeBSD$
.Dd June 16, 1998
@ -47,6 +47,12 @@
このルーチンはハードウェアの初期化と
その他の (devfs エントリのような) システムリソース
の割り当てを行なうべきです。
.Pp
バスを実装するデバイスは、そのバスにアタッチされたデバイスの存在のプローブ、
およびそれらを子として追加するためにこのメソッドを使用するべきです。
.Xr bus_generic_attach 9
と共に使用された場合、その子デバイスは自動的にプローブされて
アタッチされます。
.Sh 戻り値
成功時には 0 が返され、それ以外の場合は適切なエラーが返されます。
.Sh 関連項目

View file

@ -26,7 +26,7 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" %FreeBSD: src/share/man/man9/DEVICE_PROBE.9,v 1.16 2003/10/23 01:31:25 hmp Exp %
.\" %FreeBSD: src/share/man/man9/DEVICE_PROBE.9,v 1.17 2004/04/11 06:37:21 imp Exp %
.\"
.\" $FreeBSD$
.Dd June 16, 1998
@ -48,7 +48,7 @@
を返すべきです。
プローブの間にその他のエラー (メモリ割当の失敗など) が起こった場合は、
適切なエラーコードが返されるべきです。
1 つのデバイスに 1 つ以上のドライバが当てはまるような場合のために、
1 つのデバイスに 2 つ以上のドライバが当てはまるような場合のために、
優先順位を返すことができます。
この場合、成功の値は 0 以下の値で、
最も大きな値が最も適切であることを意味します。
@ -64,17 +64,14 @@
また、アタッチメソッドが呼ばれた場合、
プローブの間に割り当てられたあらゆるリソースは解放して
再割り当てしなければなりません。
成功値 0 を返す場合には、
ドライバはそのドライバがアタッチされると想定することができます。
加えて、そのプローブルーチンはどんなことがあっても副作用がないことが、
絶対必要条件です。
プローブルーチンは、アタッチルーチンが呼び出される前に 2 回以上
呼び出されることがあります。
.Pp
バスを実装するデバイスは、
バスに接続されたデバイスの存在をプローブし
それらを子デバイスとして追加するために、
このメソッドを使用するべきです。
このメソッドが
.Xr bus_generic_attach 9
の使用と結合していれば、
子デバイスは自動的にプローブされ、アタッチされるでしょう。
成功値 0 を返す場合には、
ドライバはそのデバイスがアタッチされるであろうと想定することはできますが、
プローブルーチンが戻った時にいかなるリソースをも保持してはなりません。
.Sh 戻り値
0 以下の値は成功を表し、0 より大きな値はエラー (errno) を表します。
0 以下の値の時、0 は最高の優先順位を表し、それ以上のプローブは行ないません。

View file

@ -26,14 +26,15 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" %FreeBSD: src/share/man/man9/bus_alloc_resource.9,v 1.17 2004/01/27 16:16:31 imp Exp %
.\" %FreeBSD: src/share/man/man9/bus_alloc_resource.9,v 1.18 2004/03/17 17:40:34 njl Exp %
.\"
.\" $FreeBSD$
.Dd May 18, 2000
.Dt BUS_ALLOC_RESOURCE 9
.Os
.Sh 名称
.Nm bus_alloc_resource
.Nm bus_alloc_resource ,
.Nm bus_alloc_resource_any
.Nd 親のバスからの資源の割り当て
.Sh 書式
.In sys/param.h
@ -44,12 +45,27 @@
.In machine/resource.h
.Ft struct resource *
.Fn bus_alloc_resource "device_t dev" "int type" "int *rid" "u_long start" "u_long end" "u_long count" "u_int flags"
.Ft struct resource *
.Fn bus_alloc_resource_any "device_t dev" "int type" "int *rid" "u_int flags"
.Sh 解説
これは資源管理関数群への簡単なインタフェースです。
親のメソッドテーブルを通る間接的な方法を隠蔽します。
この関数は、一般的にアタッチ時に呼び出されるべきですが、
(幾つかの稀な場合を除いて) 決してその前に呼び出してはなりません。
.Pp
.Fn bus_alloc_resource_any
関数は
.Fn bus_alloc_resource
のための簡単なラッパです。
これは
.Fa start ,
.Fa end
および
.Fa count
の値としてデフォルトのリソース (下記の
.Fa start
の解説を参照してください) を設定します。
.Pp
引数は以下の通りです。
.Bl -item
.It
@ -149,8 +165,8 @@ PCI
irqid = 0;
portres = bus_alloc_resource(dev, SYS_RES_IOPORT, &portid,
0ul, ~0ul, 32, RF_ACTIVE);
irqres = bus_alloc_resource(dev, SYS_RES_IRQ, &irqid,
0ul, ~0ul, 1, RF_ACTIVE | RF_SHAREABLE);
irqres = bus_alloc_resource_any(dev, SYS_RES_IRQ, &irqid,
RF_ACTIVE | RF_SHAREABLE);
.Ed
.Sh 関連項目
.Xr bus_activate_resource 9 ,

View file

@ -24,7 +24,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
.\" DAMAGE.
.\"
.\" %FreeBSD: src/share/man/man9/condvar.9,v 1.8 2002/03/28 12:51:06 dd Exp %
.\" %FreeBSD: src/share/man/man9/condvar.9,v 1.9 2004/03/10 15:57:25 jhb Exp %
.\"
.\" $FreeBSD$
.Dd December 11, 2000
@ -40,8 +40,7 @@
.Nm cv_timedwait_sig ,
.Nm cv_signal ,
.Nm cv_broadcast ,
.Nm cv_waitq_remove ,
.Nm cv_waitq_empty ,
.Nm cv_broadcastpri ,
.Nm cv_wmesg
.Nd カーネル状態変数
.Sh 書式
@ -65,9 +64,7 @@
.Ft void
.Fn cv_broadcast "struct cv *cvp"
.Ft void
.Fn cv_waitq_remove "struct thread *td"
.Ft int
.Fn cv_waitq_empty "struct cv *cvp"
.Fn cv_broadcastpri "struct cv *cvp" "int pri"
.Ft const char *
.Fn cv_wmesg "struct cv *cvp"
.Sh 解説
@ -97,13 +94,15 @@
.Fn cv_signal
の、または全てのウェイトのブロックを解除するには
.Fn cv_broadcast
または
.Fn cv_broadcastpri
の呼び出しによってウェイトのブロック解除を行います。
.Fn cv_waitq_remove
は状態変数のウェイトキューからウェイトしているスレッドを取り除きます。
.Fn cv_waitq_empty
.Fa cvp
上にウェイトしているものが存在しているかどうかを報告します。
ウェイタを起こすのに加えて、
.Fn cv_broadcastpri
は、高い優先度を持っていない全てのスレッドの優先度を上げることによって、
全てのウェイタが最低でも
.Fa pri
の優先度を持つことを保証します。
.Fn cv_wmesg
.Fn cv_init
@ -130,9 +129,10 @@
.Fa mp
を渡さなければなりません。
スレッドは
.Fn cv_signal
または
.Fn cv_signal ,
.Fn cv_broadcast
または
.Fn cv_broadcastpri
を呼び出している間は、たとえ引数として渡していないとしても、
.Fa mp
を保持しなければなりません。
@ -176,10 +176,6 @@
は 0 を返します。
そうでない場合には、0 ではないエラーコードが返されます。
.Pp
.Fn cv_waitq_empty
は、ウェイトキュー上にスレッドが存在しない場合には
0 ではない値を、そうでない場合には 0 を、返します。
.Pp
.Fn cv_wmesg
.Fn cv_init

View file

@ -32,7 +32,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" %FreeBSD: src/share/man/man9/copy.9,v 1.12 2003/10/23 02:22:07 hmp Exp %
.\" %FreeBSD: src/share/man/man9/copy.9,v 1.14 2004/03/29 19:42:21 hmp Exp %
.\"
.\" $FreeBSD$
.Dd January 7, 1996
@ -73,52 +73,64 @@
.Bl -tag -width "copyoutstr()"
.It Fn copyin
ユーザ空間のアドレス
.Pa uaddr
.Fa uaddr
からカーネル空間のアドレス
.Pa kaddr
.Fa kaddr
.Pa len
.Fa len
バイトのデータをコピーします。
.It Fn copyout
カーネル空間のアドレス
.Pa kaddr
.Fa kaddr
からユーザ空間のアドレス
.Pa uaddr
.Fa uaddr
.Pa len
.Fa len
バイトのデータをコピーします。
.It Fn copystr
カーネル空間のアドレス
.Pa kfaddr
.Fa kfaddr
からカーネル空間のアドレス
.Pa kdaddr
.Fa kdaddr
へヌル文字で終端された最大
.Pa len
.Fa len
文字の文字列をコピーします。
末尾のヌル文字を含む実際にコピーされた文字数が
.Pa *done
に手されます。
.Fa *done
に返されます
.Po
.Fa done
.Dv NULL
ではない場合
.Pc Ns
.It Fn copyinstr
ユーザ空間のアドレス
.Pa uaddr
.Fa uaddr
からカーネル空間のアドレス
.Pa kaddr
.Fa kaddr
へヌル文字で終端された最大
.Pa len
.Fa len
文字の文字列をコピーします。
末尾のヌル文字を含む実際にコピーされた文字数が
.Pa *done
に手されます。
.Fa *done
に返されます
.Po
.Fa done
.Dv NULL
ではない場合
.Pc Ns
.\" .It Fn copyoutstr
.\" カーネル空間のアドレス
.\" .Pa kaddr
.\" .Fa kaddr
.\" からユーザ空間のアドレス
.\" .Pa uaddr
.\" .Fa uaddr
.\" へヌル文字で終端された最大
.\" .Pa len
.\" .Fa len
.\" 文字の文字列をコピーします。
.\" 末尾のヌル文字を含む実際にコピーされた文字数が
.\" .Pa *done
.\" .Fa *done
.\" に返されます。
.El
.Sh 戻り値
@ -134,7 +146,7 @@
.\"、
.\" .Fn copyoutstr
関数は文字列が
.Pa len
.Fa len
バイトよりも長い時に
.Er ENAMETOOLONG
を返します。

View file

@ -31,16 +31,16 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" %FreeBSD: src/share/man/man9/suser.9,v 1.21 2003/10/23 02:33:03 hmp Exp %
.\" %FreeBSD: src/share/man/man9/suser.9,v 1.22 2004/04/06 19:49:21 ru Exp %
.\" $FreeBSD$
.\"
.Dd October 15, 1996
.Dd April 2, 2002
.Dt SUSER 9
.Os
.Sh 名称
.Nm suser ,
.Nm suser_cred
.Nd プロセスがスーパユーザの権限を持っているかどうかのチェック
.Nd 証明がスーパユーザの権限を持っているかどうかのチェック
.Sh 書式
.In sys/param.h
.In sys/systm.h
@ -49,16 +49,16 @@
.Ft int
.Fn suser_cred "struct ucred *cred" "int flags"
.Sh 解説
.Nm
.Fn suser
および
.Nm suser_cred
.Fn suser_cred
関数は、スーパユーザの権限を含む証明が与えられているかどうかをチェックします。
.Pp
.Nm
.Fn suser
関数は最も普通で、特別な事情がその他の方法を要求するのでなければ、
これが使用されるべきです。
.Pp
.Nm suser_cred
.Fn suser_cred
関数は、チェックされるべき証明がそのスレッド自身のものでない時、
スレッドが存在しない時、またはスーパユーザの権限が
閉じ込められた root に拡大されるべき時に、使用されるべきです。
@ -68,8 +68,10 @@
システムコールによって閉じ込められている場合には、
プロセスはスーパユーザの権限を持ちません。
しかしながら、これが適切な場合があり、
.Nm suser_cred
関数への flags 引数の
.Fn suser_cred
関数へ渡す
.Fa flags
引数に
.Dv PRISON_ROOT
ビットを設定することによって実現されます。
これが牢屋を弱くしないことを、注意深く再調査することが重要です。
@ -80,9 +82,9 @@
によって行動が保護されている場所のみにおいて、
このような権限を承諾されるべきです。
.Pp
.Nm
.Fn suser
および
.Nm suser_cred
.Fn suser_cred
関数は、スーパユーザの権限が使用された事を、
指定されたプロセスのプロセス構造体中に記録します。
これらの関数の機能の一部は、スーパユーザの権限が使用されたかどうかを
@ -90,9 +92,9 @@
他のパーミッションの可能性が使い尽くされた後でのみ、
これら関数を呼び出すべきです。
.Sh 戻り値
.Nm
.Fn suser
および
.Nm suser_cred
.Fn suser_cred
関数は、そのユーザがスーパユーザの権限を持っている場合には 0 を返し、
そうでない場合には
.Er EPERM
@ -100,6 +102,9 @@
これは、TRUE の応答がスーパユーザ権限を持つことを示すような他の実装とは
.Em 逆の論理
になっています。
TRUE の応答の
.Fn suser
はスーパユーザの権限を示します。
.Sh 関連項目
.Xr chroot 2 ,
.Xr jail 2

View file

@ -25,7 +25,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" %FreeBSD: src/share/man/man9/sysctl_ctx_init.9,v 1.10 2002/01/09 11:43:48 mpp Exp %
.\" %FreeBSD: src/share/man/man9/sysctl_ctx_init.9,v 1.11 2004/04/06 20:16:10 markm Exp %
.\" $FreeBSD$
.\"
.Dd July 15, 2000
@ -179,14 +179,14 @@ char *string = "dynamic sysctl";
sysctl_ctx_init(&clist);
oidp = SYSCTL_ADD_NODE( &clist, SYSCTL_STATIC_CHILDREN(/* ツリートップ */),
OID_AUTO, newtree, CTFLAG_RW, 0, "new top level tree");
OID_AUTO, "newtree", CTFLAG_RW, 0, "new top level tree");
oidp = SYSCTL_ADD_INT( &clist, SYSCTL_CHILDREN(oidp),
OID_AUTO, newint, CTLFLAG_RW, &a_int, 0, "new int leaf");
OID_AUTO, "newint", CTLFLAG_RW, &a_int, 0, "new int leaf");
...
oidp = SYSCTL_ADD_NODE( &clist, SYSCTL_STATIC_CHILDREN(_debug),
OID_AUTO, newtree, CTFLAG_RW, 0, "new tree under debug");
OID_AUTO, "newtree", CTFLAG_RW, 0, "new tree under debug");
oidp = SYSCTL_ADD_STRING( &clist, SYSCTL_CHILDREN(oidp),
OID_AUTO, newstring, CTLFLAG_R, string, 0, "new string leaf");
OID_AUTO, "newstring", CTLFLAG_R, string, 0, "new string leaf");
...
/* ここで oid を解放できます */
if(sysctl_ctx_free(&clist)) {

View file

@ -34,7 +34,7 @@
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
.\" %FreeBSD: src/share/man/man9/timeout.9,v 1.20 2003/10/01 21:32:42 imp Exp %
.\" %FreeBSD: src/share/man/man9/timeout.9,v 1.21 2004/04/06 23:08:49 cperciva Exp %
.\" $FreeBSD$
.\"
.Dd September 10, 1996
@ -46,6 +46,7 @@
.Nm callout_handle_init ,
.Nm callout_init ,
.Nm callout_stop ,
.Nm callout_drain ,
.Nm callout_reset
.Nd 明示された時間長の後の関数の実行
.Sh 書式
@ -69,6 +70,8 @@ struct callout_handle handle = CALLOUT_HANDLE_INITIALIZER(&handle)
.Fn callout_init "struct callout *c" "int mpsafe"
.Ft int
.Fn callout_stop "struct callout *c"
.Ft int
.Fn callout_drain "struct callout *c"
.Ft void
.Fn callout_reset "struct callout *c" "int ticks" "timeout_t *func" "void *arg"
.Sh 解説
@ -163,7 +166,8 @@ timeout (
.Pp
関数
.Fn callout_init ,
.Fn callout_stop
.Fn callout_stop ,
.Fn callout_drain
および
.Fn callout_reset
は固有のコールアウト構造を割当てることを希望するクライアントのための、
@ -172,7 +176,8 @@ timeout (
関数
.Fn callout_init
はコールアウトを初期化し、そのためそのコールアウトは何の副作用もなしに
.Fn callout_stop
.Fn callout_stop ,
.Fn callout_drain
または
.Fn callout_reset
に渡されることができます。
@ -192,6 +197,15 @@ timeout (
コールアウトが既に実行されたか現在実行中の場合には、0 が返されます。
.Pp
関数
.Fn callout_drain
は、コールアウトが既に進行中の場合にはその完了をウェイトすることを除いて、
.Fn callout_stop
と同一です。
これは、そのコールアウトがブロックするかもしれないあらゆるロックを
保持している間は、決して呼び出されてはなりません。
さもないと結果としてデッドロックします。
.Pp
関数
.Fn callout_reset
は最初にそのコールアウトを廃止するために
.Fn callout_stop
@ -206,17 +220,10 @@ timeout (
.Ft struct callout_handle
を返します。
.Fn callout_stop
および
.Fn callout_drain
関数は呼び出された時にコールアウトが未だ保留の場合には 0 以外を、
そうでない場合には 0 を返します。
.Sh バグ
コールアウトを取り消すか、もし取り消しが遅過ぎた場合には
コールアウトが本当に完了されていることを保証することは、
この API にはできません。
.Fn callout_stop
は 0 を返した時に、コールアウトが開始されていている場合のみを保証します。
コールアウトが完了していることは保証しません。
ドライバのデタッチルーチンから戻る前に実行されるスレッドがないことを
保証したい時に、レース状態を発生させることがあります。
.Sh 歴史
現在の timeout および untimeout ルーチンは
.An Adam M. Costello

View file

@ -23,7 +23,7 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" %FreeBSD: src/share/man/man9/uio.9,v 1.14 2003/03/03 10:49:37 des Exp %
.\" %FreeBSD: src/share/man/man9/uio.9,v 1.15 2004/04/15 07:24:10 markm Exp %
.\"
.\"
.\" $FreeBSD$
@ -131,23 +131,22 @@ fooread(dev_t dev, struct uio *uio, int flag)
{
int rv, amnt;
rv = 0;
while (uio->uio_resid > 0) {
if (data_available > 0) {
amnt = MIN(uio->uio_resid, data_available);
if ((rv = uiomove(buffer, amnt, uio))
!= 0)
goto error;
rv = uiomove(buffer, amnt, uio);
if (rv != 0)
break;
data_available -= amnt;
} else {
} else
tsleep(...); /* より良い時期まで待つ */
}
}
return 0;
error:
/* エラーのクリーンアップをここで行なう */
return rv;
if (rv != 0) {
/* エラーのクリーンアップをここで行なう */
}
return (rv);
}
.Ed
.Sh 戻り値
.Fn uiomove

View file

@ -34,7 +34,7 @@
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
.\" %FreeBSD: src/share/man/man9/vslock.9,v 1.10 2003/01/21 11:34:57 alfred Exp %
.\" %FreeBSD: src/share/man/man9/vslock.9,v 1.11 2004/03/15 10:05:27 truckman Exp %
.\"
.\" $FreeBSD$
.Dd June 15, 1996
@ -49,10 +49,10 @@
.In sys/proc.h
.In vm/vm.h
.In vm/vm_extern.h
.Ft int
.Fn vslock "void *addr" "size_t len"
.Ft void
.Fn vslock "void *addr" "u_int len"
.Ft void
.Fn vsunlock "void *addr" "u_int len"
.Fn vsunlock "void *addr" "size_t len"
.Sh 解説
.Fn vslock
および
@ -69,7 +69,27 @@
この操作に使用されるプロセスのコンテキストはグローバル変数
.Va curproc
を参照します。
.Sh 関連項目
.Xr physio 9
.Sh バグ
引数としてプロセスのポインタを渡すべきです。
.Sh 戻り値
.Fn vslock
関数は成功すると 0 を返し、そうでないと以下に示すエラーの中の 1 つを
返します。
.Sh エラー
.Fn vslock
関数は以下の場合に失敗します。
.Bl -tag -width Er
.It Bq Er EINVAL
.Fa addr
および
.Fa len
パラメータがマシンのアドレス空間の最後をラップアラウンドする
メモリ領域を指定しています。
.It Bq Er ENOMEM
指定されたアドレス範囲の大きさがロックされたメモリのシステム制限を
超過しています。
.It Bq Er ENOMEM
要求されたアドレス範囲をロックすることが、そのプロセスのプロセス毎の
ロックされたメモリの制限を超過させます。
.It Bq Er EFAULT
示されたアドレス範囲の中の幾つかの部分が割り当てられていません。
ページのマッピングにエラー/失敗があります。
.El