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 で探せるのでしょうか。随分昔にこれ式のレジスタダンプを良く見ていたんですが、未だに微妙。