linuxのメモ

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

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

CPU操作 - DECLARE_PER_CPU()

cpu

概要 セクション名を指定せずにCPU個別の変数を宣言する 詳細 DECLARE_PER_CPU_SECTION()にセクション名を空文字で渡してCPU個別の変数を宣言する

CPU操作 - DECLARE_PER_CPU_SECTION()

cpu

概要 CPU個別の変数を宣言する 詳細 __PCPU_ATTRS()を使用してCPU個別のデータ領域にtype型のnameという名前の変数を宣言するが、ARCH_NEEDS_WEAK_PER_CPUが定義されている、もしくはCONFIG_DEBUG_FORCE_WEAK_PER_CPUが有効な場合はchar型の__pcpu_scope_[na…

CPU操作 - __PCPU_ATTRS()

cpu

概要 CPU個別のデータを定義する属性を生成する 詳細 以下のコードでCPU個別のデータを定義する属性を生成する __percpu __attribute__((section(PER_CPU_BASE_SECTION sec))) \ PER_CPU_ATTRIBUTES この時、__percpuとPER_CPU_ATTRIBUTESは空文字に変換され…

割込み処理 - irq_trace()

irq

概要 割込みの許可状態を確認する 詳細 CONFIG_IRQSOFF_TRACERの値によって以下のように処理が異なる 有効 trace_typeの値にTRACER_IRQS_OFFのbitが立っており、かつirqs_disabled()を実行し割込みの状態を確認し、割込みが有効の場合は1を返すがそれ以外の…

割込み処理 - irqs_disabled()

irq

概要 割込みの状態を確認する 詳細 CONFIG_TRACE_IRQFLAGS_SUPPORTの値によって以下のように処理が異なる 有効 raw_local_save_flags()で現在のフラグレジスタの値を取得し、raw_irqs_disabled_flags()で取得した値の割込みの状態を確認する 無効 raw_irqs_d…

フラグ操作 - raw_irqs_disabled_flags()

概要 引数で受け取った値の割込みフラグが立っているか確認する 詳細 typecheck()で引数の値がunsigned long型であることを確認し、arch_irqs_disabled_flags()で割込みの状態を確認し、この値を返り値とする

フラグ操作 - raw_local_save_flags()

概要 フラグレジスタの値を取得する 詳細 typecheck()で引数の値がunsigned long型であることを確認し、arch_local_save_flags()で現在のフラグレジスタの値を取得する 取得した値は引数の値に上書きするため、呼び出し元で取得した値を参照することができる

割込み処理 - raw_irqs_disabled()

irq

概要 割込みの状態を確認する 詳細 arch_irqs_disabled()のwrapperマクロ

割込み処理 - arch_irqs_disabled()

irq

概要 割込みの状態を確認する 詳細 arch_local_save_flags()で現在のフラグの状態を取得し、取得した値をarch_irqs_disabled_flags()に渡して、割込みの状態を確認する

割込み処理 - arch_irqs_disabled_flags()

irq

概要 引数で受け取った値の割込みフラグが立っているか確認する 詳細 受け取った引数とX86_EFLAGS_IFの論理積を算出し、割込みフラグが立っているか確認する 返り値は割込みフラグが立っていたら0、落ちていたら1を返す