linuxのメモ

Linux kernelの実装を解説していきます (対象ver 4.5)

2016-03-22から1日間の記事一覧

CPU操作 - to_cpumask()

cpu

概要 unsigned longのビットマスクをstruct cpumask構造体へのポインタに変換する 詳細 三項演算子で取得したビットマップか、__check_is_bitmap()の値のいずれかをstruct cpumask構造体のポインタにキャストした値を返す __check_is_bitmap()は常にint型の…

プロセス情報 - tsk_cpus_allowed()

概要 指定したプロセスの実行可能なCPUを示すデータを取得する 詳細 task_struct構造体のcpus_allowedメンバへのポインタを返す cpus_allowdは実行可能なCPUをbitで示すデータを保持する

割込み処理 - raw_local_irq_save()

irq

概要 フラグレジスタの値を引数の変数に保存する 詳細 typecheck()により引数の値の型がunsigned longであることを確認し、 arch_local_irq_save()を実行することでフラグレジスタの値を取得し、割込みを無効化する 取得した値を引数の変数に代入することで…

割込み処理 - arch_local_irq_save()

irq

概要 フラグレジスタの値を取得し、割込みを無効化する 詳細 arch_local_save_flags()によりフラグレジスタの値を取得し、arch_local_irq_disable()により割込みを無効化する

最適化 - likely_notrace()

概要 引数の値が期待値と一致するか確認する 詳細 __builtin_expect()*1_の第一引数に受け取った引数に!を二回つけることで0の場合は0、それ以外の場合は1を渡し、第二引数に1を渡すことで受け取った引数の値が0で無いことを確認する 尚、このコードは値が0…