1/29 (水)
VMware Player が起動時にエラーを出すようになった
VMware Player を起動しようとすると、パワーオン中にエラーが発生しました: Transport(VMDB) error -44: Message. The VMware Authorization Service is not running.
というエラーメッセージが表示されて起動できなくなる。
pc.casey.jp の [VMware] 「VMware Authorization Service が起動していません」の対処方法で直った。 VMware Authorization Service が起動していなかったのが原因だが、なぜ勝手にサービスが停止したのかは分からない。
1/26 (日)
[Linux] seq_file で嵌る
pib のために Linux で debugfs 下に seq_file を作成しようとして嵌ってしまう。
debugfs の下に "foo/file" という seq_file を作る場合、まず debugfs_create_dir
で "foo" を作り、その下に debugfs_create_file
で "file" を作る。
data には inode->i_private
static struct dentry *foo_root; static struct dentry *foo_file; static const struct file_operations inspection_fops = { .owner = THIS_MODULE, .open = foo_open, .read = seq_read, .llseek = seq_lseek, .release = seq_release, }; foo_root = debugfs_create_dir("foo", NULL); foo_file = debugfs_create_file("file", S_IFREG | S_IRWXUGO, foo_root, data, &foo_fops);
"foo/file" を open
した場合、まず foo_open
が呼ばれる。
この関数の中で seq_open
を呼ぶ。
static int foo_open(struct inode *inode, struct file *file) { struct seq_file *seq; int ret; ret = seq_open(file, &foo_seq_ops); if (ret) return ret; seq = file->private_data; seq->private = inode->i_private; /* debugfs_create_file で渡した data */ return 0; }
"foo/file" を read
した場合、start → (show → next) ×繰り返し → stop の順で呼び出される。
最初の start では ppos の指す先の値は 0 になっている。
stop で "foo/file" の read
が EOL になるわけではない。
再度、start が呼び出される。
ppos の指す先の値は next が呼ばれる度に加算されているので、この値から start の赤字の終了処理で NULL を返すと read
が停止する。
static const struct seq_operations foo_seq_ops = { .start = foo_seq_start, .next = foo_seq_next, .stop = foo_seq_stop, .show = foo_seq_show, }; struct iter { loff_t pos; }; static void *foo_seq_start(struct seq_file *file, loff_t *ppos) { struct iter *iter_ptr; void *data = file->private; /* debugfs_create_file で渡した data が取り出せる */ loff_t n = *pos; if (n == 0) seq_puts("1行目の始まる前につけたいヘッダーがあればここに表示する。\n"); if (n を調べた終了条件) return NULL; iter_ptr = kmalloc(sizeof(*iter_ptr)); if (!iter_ptr) return NULL; iter_ptr->pos = n; return iter_ptr; } static void *foo_seq_next(struct seq_file *file, void *iter_ptr, loff_t *ppos) { if (*ppos を調べた終了条件) return NULL; ((struct iter*)iter_ptr)->pos = ++*ppos; return iter_ptr; } static int foo_seq_show(struct seq_file *file, void *iter_ptr) { /* ((struct iter*)iter_ptr)->pos に基づき表示を seq_printf などに行う */ /* エラーがあれば負数を返す */ return 0; } static void foo_seq_stop(struct seq_file *file, void *iter_ptr) { kfree(iter_ptr); }
1/25 (土)
[Movie] Only God Foregives
チネチッタで『オンリー・ゴッド』を観てきた。 原題は "Only God Foregives" でなぜ forgives を省いたのかはよく分からん。
ストーリーはここの記事がまとまっている。 元警察官のチャンは作中で神のような役割を果たしている。 罪の軽重を見ていて、
- 売春婦を殺害したビリーはその父親に引き渡して殺させている。
- 4人娘に売春をさせていた父親は右腕を切断。
- クリスティン(母親)に依頼されてチャンを殺害しようとしたグループの二人の生き残りのうち、息子のために仕事を請けた方は警察に引き渡すだけですませている。
- 無差別発砲したもう片方は、現場で殺害。
- 母親のクリスティンは袈裟懸けにして殺害。
- ジュリアンは過去に父親を素手で殺害したことがあり、自分の両手を眺めるシーンが多いのはその罪の意識を伺わせる。ラストシーンで主人公のジュリアンはチャンの前に両腕を差し出しているが、その後多分切断されている。
チャンがカラオケで歌っているのは懺悔の歌だそうな。 チャンは審判者だが、自分自身が人を殺害したという穢れを歌を歌うことで清めているらしい。
1/20 (月)
キーボードの掃除
久しぶりにキートップを全部外してキーボードの掃除をする。 お菓子を食べた手でキーに触ったりして側面に跡が残っていたのをウェットティッシュで拭くと見違えるように綺麗になった。 写真ではいまいち分かり辛いけど。
1/19 (日)
Pseudo InfiniBand HCA driver(pib) の IPoIB 対応
pib の OpenSM 対応に続き、IPoIB に対応させた。 ib_ipoib.ko をロードした後に pib.ko をロードすると、ib0、ib1、ib2 …のように IPoIB のネットワークインターフェイスが生成される。 ibX はこの時点では DOWN 状態だが、OpenSM を起動して pib の各ポートに LID を割り振った後に、各ポートに待機している ib_ipoib は「ブロードキャスト」を実現するためのマルチキャストグループに自身を登録する。 この登録が成功すると ibX は UP 状態となり、IP アドレス等の設定が正しければ、IPoIB の通信が可能になる。
マルチキャスト情報は Subnet Administration と呼ばれる機構で管理されている。 Subnet Management の管理者は Subnet Manager(SM) と呼ばれていたが、Subnet Administration の管理者は Subnet Administrator ではなくただの Subnet Administration(SA) と呼ぶ。 SA は実質 SM と一体化させる必要があるので、SA の実態は OpenSM になる。 Subnet Management は SM から末端の HCA やスイッチへ Subnet Management の MAD を送って設定をしてもらい、その応答を返してもらうモデルであった。 一方、Subnet Administration は末端の HCA から SM へ Subnet Administration の MAD を送って設定をしてもらい、その応答を返してもらう逆方向のモデルである。
IPoIB 対応に随分時間がかかった。 つまずいたのは以下のような箇所。
- SA は Subnet Manager (OpenSM) 自身がやると気づかずに、pib のカーネルモジュール内に実装しようとしていたためである。 無駄なコードを随分書いてしまった。
- 末端の HCA は IPoIB のドライバ(ib_ipoib.ko) が Subnet Administartion Agent として振舞い SM に SA クエリーを投げるのだが、その途中でエラー停止していた。
原因を調べると
query_ah
とmodify_ah
を実装していないことが原因だった。ibv_query_ah
とibv_modify_ah
は不要として、struct ib_device
のコールバックには登録していなかったのだが、ib_query_ah
経由でも呼び出されるので実装する必要がある。 - SubnGetResp() が返す PortInfo 内の LinkWidth/LinkSpeed の情報は正確でないといけない。 SM はここが不正確でも LID を割り振ってくれるのだが、その後の SubnAdmSet() を実行しなくなる。
- PhysPort ステートが Polling でも論理 Port ステートが Active なら OpenSM は処理を進めてくれる。 しかし ibnetdiscover は Polling のままではトポロジー検索を実行してくれない。 PhysPort ステートは LinkUp に設定する必要がある。
1/12 (日)
新宿へ
普段は渋谷のジュンク堂で本を探すが、たまには新宿まで出てくる。 東横線が副都心線と連結したので、新宿は行きやすくなった。
[Food] メンチーズ@新宿
ビックロ新宿東口店の近くにメンチーズというフローズンヨーグルトの量り売りの店を発見。 ソフトクリームのマシーンみたいなのからフローズンヨーグルトがうにょうにょ出てくるので自分でカップに注いだ後、トッピングして計量してもらう。 100グラム250円なり。
[Food] 川香苑@新宿
東京、“激辛”麻婆豆腐10選を見てから気になっていた、歌舞伎町の川香苑(食べログ、ぐるなび)へ行って見る。 無論、麻婆豆腐が目当てだ。
麻婆豆腐は注文してからすぐ出てきた。 作り置きがあるようだ。 花椒がきいているがそれほど辛くはない。 うまいことはうまいがもう少し辛いほうが好みだ。
今日見かけた面白い広告…と思いきや
なんか変な広告だと思ったら、上から貼り付けてあっただけだった。
1/11 (土)
USB 接続の無線 LAN アダプタを買い足す
ノートパソコンの内蔵無線 LAN の調子がおかしいので、USB に接続する無線 LAN のぽっちりを使っていたのだが、その調子もおかしくなった。 どうもぽっちりは熱で壊れたようなので、川崎のビックカメラで少し大きめのロジテック製のSKY LINK LAN-W300N/U2Sを購入する。
[Movie] 大脱出
チネチッタで『大脱出』(原題:ESCAPE PLAN)を観る。 主演はスタローンと、助演は元州知事のシュワルツネッガー。
シュワちゃんはターミネーター2の印象が強いため、今となっては普通の老人にしか見えない。 時の流れは残酷だ。
1/6 (月)
部屋にあるマンガ本の整理
年末にできなかった大掃除をする。
部屋の中に溜まっていたマンガ本とラノベの一部を古本屋に売りに行った。 いろいろ合わせて190冊持って行って、引き取り価格は1,170円だった。 1冊10円以下でしか売れなかったし、ラノベは買取拒否されたものも多かった (´・ω・`)
1/5 (日)
川崎に帰る
祖母の見舞いに行った後に新幹線で帰京。 指定席はとってないが新大阪始発の新幹線に乗ることで自由席に座ろうと、新大阪駅のプラットフォームで1時間半ほど立ちつくす。 新幹線のデッキで立っていても同じ?
後で調べると広島発の始発も多いので、同じことを広島駅でやった方が効率がよかったかも。