kfifo 試す (5)
LLinux カーネル関数リファレンスな copy_{from, to}_user の記述に
ユーザコンテキスト中で使用すること
との記述あり。コンテキスト云々については Linux カーネル解析入門の 3 章 (同期と排他) に色々と記述あり。
それはええとしてソースを睨んでいくつか気づきを以下に控え
- EOF の定義不要
- fifo なバッファはあふれたらスルー
- write 側が close したら kfifo_reset してますが微妙
- 残りがステ、は駄目でしょ
- む。違うな。read 側 close 時に write が close してたらバッファ残りのソレを、ってどうするんでしょ
- read/write は余計なナニが多い
- タブが 4 だけど標準は 8 なのかな
今って read 側が待ちになってて write が出力してその後 close したりしたら出力ってどうなるんだろ、と言いつつ動作確認。
と
書き込み側のみ開いて云々してたら OS 毎オチた。今から起動して syslog 確認予定。
Aug 30 12:35:00 debian kernel: write start Aug 30 12:35:00 debian kernel: Modules linked in: yamanetoshi ipv6 battery dm_snapshot dm_mirror dm_mod loop parport_pc parport container f loppy ac button psmouse intel_agp serio_raw agpgart rtc shpchp pci_hotplug pcspkr i2c_piix4 i2c_core evdev ext3 jbd mbcache ide_disk ide_cd cdrom pcnet32 mii BusLogic scsi_mod piix generic ide_core thermal processor fan Aug 30 12:35:00 debian kernel: Aug 30 12:35:00 debian kernel: Pid: 2703, comm: cat Not tainted (2.6.24 #1) Aug 30 12:35:00 debian kernel: EIP: 0060:[<c011c291>] EFLAGS: 00010096 CPU: 0 Aug 30 12:35:00 debian kernel: EIP is at task_rq_lock+0x17/0x4b Aug 30 12:35:00 debian kernel: EAX: 00000000 EBX: c03956a0 ECX: 00000000 EDX: ceae1f4c Aug 30 12:35:00 debian kernel: ESI: c03956a0 EDI: ceae1f4c EBP: cea3d550 ESP: ceae1f10 Aug 30 12:35:00 debian kernel: DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068 Aug 30 12:35:00 debian kernel: ---[ end trace 289ca6a634001b62 ]--- Aug 30 21:49:09 debian syslogd 1.4.1#18: restart.
うーん。再現なソレをこつこつヤるリキ無いです。でもこれって kernel が出してるログなはずなんで grep で探せるのでしょうか。随分昔にこれ式のレジスタダンプを良く見ていたんですが、未だに微妙。