linuxのメモ

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

irq

割込み処理 - irqs_disabled_flags()

irq

概要 引数で受け取った値の割込みフラグが立っているか確認する 詳細 raw_irqs_disabled_flags()のwrapperマクロ

割込み処理 - softirq_count()

irq

概要 ソフトウェア割込みで実行待ちになっているプロセス数を取得する 詳細 preempt_count()で実行待ちプロセス数を取得するが、SOFTIRQ_MASKでマスクをかけるためソフトウェア割込みだけのプロセス数を取得する

割込み処理 - raw_local_irq_restore()

irq

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

割込み処理 - native_restore_fl()

irq

概要 任意の値をフラグレジスタに保存する 詳細 アセンブラ命令のpushで引数で取得した値をスタックに保存し、保存した値をpopf命令でフラグレジスタに読み込む

割り込み処理 - in_nmi()

irq

概要 マスク不可割込みの状態を取得する 詳細 preempt_count()で実行待ちプロセス数を取得し、NMI_MASKでマスクをかけた値が0でなければ1を、0であれば0を返す

割り込み処理 - in_irq()

irq

概要 ハードウェア割込みの状態を取得する 詳細 hardirq_count()で現在ハードウェア割り込みによって割込みされているプロセス数を取得し、取得した値が0でなければ1を、0であれば0を返す

割り込み処理 - hardirq_count()

irq

概要 ハードウェア割込みで実行待ちになっているプロセス数を取得する 詳細 preempt_count()で実行待ちプロセス数を取得するが、HARDIRQ_MASKでマスクをかけるためハードウェア割込みだけのプロセス数を取得する

割り込み処理 - in_interrupt()

irq

概要 割込みの状態を取得する 詳細 irq_count()で現在割込みされているプロセス数を取得し、取得した値が0でなければ1を、0であれば0を返す

割込み処理 - irq_count()

irq

概要 全ての種類の割込みで実行待ちになっているプロセス数を取得する 詳細 preempt_count()で実行待ちプロセス数を取得するが、HARDIRQ_MASK・SOFTIRQ_MASK・NMI_MASKでそれぞれハードウェア割込み・ソフトウェア割込み・マスク不可割込みの3種類全てのプロ…

割込み処理 - 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()により割込みを無効化する

割込み処理 - 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()

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を返す

割込み処理 - raw_local_irq_disable()

irq

概要 CPUの割込みを無効化する 詳細 arch_local_irq_disable()のwrapperマクロ

割込み処理 - arch_local_irq_disable()

irq

概要 アーキテクチャの実装応じた、割込み無効化の処理を実行する 詳細 CONFIG_PARAVIRTの値によって以下のように処理が異なる 有効 PVOP_VCALLEE0()にpv_irq_ops.irq_disable*1を渡して実行する 無効 native_irq_disable()を実行する *1:この値は、カーネル…

割込み処理 - native_irq_disable()

irq

概要 CPUの割込みを無効化する 詳細 アセンブラ命令のcli命令を実行し、CPUの割込み処理を無効化する