December 2008

kernel watchは落ちました。
1月6日掲載予定
このエントリーをはてなブックマークに追加

子ネタ

「[BUG] next-20081216 - WARNING: at kernel/smp.c:333 smp_call_function_mask」というスレッドでKamalesh Babulal が sparse irq のせいでパニックしたぞ。ゴルァーと報告

で、色々と試行錯誤のすえgccが悪い。という結論に。
Kamalesh Babulal はRHELを使っているらしいのだが、RHEL5.1のgccは腐っていて、weak global functionが空関数だと、global functionなのにインライン展開してしまう。
・・・こら。

Linuxにおいては、アーキスペシフィックな関数を呼ぶのに、共通部にweakな空関数を入れておいて、アーキ依存部でそれを上書きするという事をよくやる。
そうすると、特に処理が必要ないアーキは、なにもしなければ共通部の空関数を呼んでくれて便利だから。
これだけ対応アーキが増えてくると全アーキを一気に直すとかありえんし。

で、要するにせっかくx86専用初期化関数をつくったのに、呼ばれていなかったという。
さらに悪い事に、 __attribute__((noinline)) も無視してインライン化する最強伝説モードらしい。

しかたがないので、weak関数に片っ端からbarrier()マクロを挿入する祭り発生中。
ちなみに、barrier()は以下のようなコンパイラバリアだ

#define barrier() __asm__ __volatile__("": : :"memory")


以下脱線。
sparse irqってのは、x86だと、割り込みが昔16個しかなくて死ぬほど苦しんだ反省からか、 Intelがトチ狂って IO_APIC毎に割り込みをつけちゃったので、IRQ数が死ぬほどでかい。ちなみに現時点でのマクロは

# if NR_CPUS < MAX_IO_APICS
# define NR_IRQS (NR_VECTORS + (32 * NR_CPUS))
# else
# define NR_IRQS (NR_VECTORS + (32 * MAX_IO_APICS))
# endif

NR_CPUSはコンパイル時に決める最大値なので、4096とかなので、結局


NR_IRQS = (NR_VECTORS + (32 * MAX_IO_APICS))
= 256 + (32 * 128)
= 4352


となる。
で、従来のコードでは struct irq_desc irq_desc[NR_IRQS] とかふつーにグローバル変数の配列にしちゃってたので、数メガの連続領域をとられちゃってた。
もちろん、全IO_APICの全割り込みを使うなんてあるわけないから、壮大な無駄だ。そういうわけで
struct irq_desc *irq_desc_ptr[NR_IRQS] みたいなポインタの配列にして、実際のirq_descriptorは初めて使った時に動的に確保するようにしてメモリを節約するぜ。って機能

ぶっちゃけオレの敵。コードが汚くて見るに耐えないし、そもそも割り込みの延長でメモリ確保呼んで失敗したら割り込み捨てるとかって頭おかしい。

ちなみに、たぶん 2.6.29でマージされるので、みんなで悲鳴をあげやがれ。

追記: barrier()入れてもやっぱりダメな事がわかって、Andrew Mortonからそんなコンパイラ捨ててしまおうぜ。とか提案されてる。
うーむ、LKML的には非常に魅力的なので反対者が出る気がしないのだが、企業の中の人はRHEL5.1切り捨てはちょっと厳しいような気もする
このエントリーをはてなブックマークに追加

なんだか、まわりがザワザワしているので、理由を聞いたら今日は仕事の最終日らしい。
ええ!?聞いてないよ。

今年一番のサプライズやわ。会社にだまされた。
このエントリーをはてなブックマークに追加

という質問をはてなに投げた。

http://q.hatena.ne.jp/1230269636

CONFIG_UNEVICTABLE_LRUのdepend on MMU をそろそろはずさないといかんよなーと思って、m68k クロスコンパイラを http://wiki.osdev.org/GCC_Cross-Compiler とかみながら構築したのだが、ちゃんとリンクまで辿り着けなかったよ。くすん
このエントリーをはてなブックマークに追加

でました。
ところで、commit logに

Happy holidays..

って書いてあるんだけど、アメリカではそうなん?
このエントリーをはてなブックマークに追加

LinkedInに招待されたので、色々いじっている。
むーん、使い方がまったく分からん。

意味不明のままアドレス帳にたまたま載っていた Rik van Riel にconnect要請をしたら30秒でAckされて、Redhatのsenior software engineerとは全員2ホップになったらしく、Larry Troan とか画面に出てきて笑った。
このエントリーをはてなブックマークに追加

Paul Mundt が shアーキの .29向け変更のPull依頼を出している。
・・・あれ、どこかで見た名前が :-p

Nobuhiro Iwamatsu (2):
sh: sh7760fb: Fix color pallette setting
sh: sh7760fb: Add support SH7720/SH7721 of Renesas


このエントリーをはてなブックマークに追加

なんか、1年間のまとめっぽい記事を。とかリクエストされたので、TOMOYOとか書いてみた。なんか社内でTOMOYOってそんなに有名だっけ?!
とか聞かれたりした。

いえいえ、有名ですよ! 2ch 界隈に限って言えば。


あと、結局テトリスを捻じ込むのは無理だった。うーん、タイミングが悪すぎた。
このエントリーをはてなブックマークに追加

オライリーの「ハイパフォーマンスWebサイト」という本を読んでそれに反している事をいくつかやっていることに気づいたので修正

なかなかいい本であった


このエントリーをはてなブックマークに追加

いつのまにか、新バージョンが出てた。
アップしたら教えてっていったのにー(泣


追記: と思ったら超本命の某ソフトが同梱されていない。原稿ネタになるかと思ってがんばって調査したのに
このエントリーをはてなブックマークに追加

↑このページのトップヘ