アドレッシング - __pfn_to_page()
概要
ページフレーム番号から該当するページのアドレスを取得する
詳細
このマクロではページフレーム番号を示すpfnを引数として受け取り、カーネルコンフィグオプションによって以下のように処理が異なる(優先度順)
- CONFIG_FLATMEMが有効
- mem_mapで示されるページデータの開始アドレスにページフレーム番号からARCH_PFN_OFFSETを引いた値を加算したアドレスを返す
- CONFIG_DISCONTIGMEMが有効
- arch_pfn_to_nid()でpfnからノード番号を取得し、NODE_DATA()でノード番号に対応するノードデータを取得する
- arch_local_page_offset()でpfnに対応するノード内のアドレスのオフセットを取得し、ノードデータのnode_mem_mapにオフセット値を加算したアドレスを返す
- CONFIG_SPARSEMEM_VMEMMAPが有効
- vmemmapで示されるページデータの開始アドレスにpfnを加算したアドレスを返す
- CONFIG_SPARSEMEMが有効 *__pfn_to_section()でpfnからセクションデータを取得し、セクションデータから__section_mem_map_addr()でページの開始アドレスを取得し、ページデータにpfn_を加算したアドレスを返す
アドレッシング - __section_mem_map_addr()
概要
セクションのデータからページのデータへのアドレスを取得する
詳細
引数で受け取ったstruct mem_section型のセクションのデータからsection_mem_mapメンバの値を取得する
取得した値とSECTION_MAP_MASKの論理積で算出されるアドレスをページのデータが保持されるアドレスとみなしstruct page型のポインタとして値を返す
アドレッシング - __pfn_to_section()
概要
ページフレーム番号からセクションのデータを取得する
詳細
pfn_to_section_nr()でページフレームからセクション番号を取得し、__nr_to_section()でセクション番号からセクションのデータを取得する
アドレッシング - __nr_to_section()
概要
セクション番号に一致するセクションのデータを取得する
詳細
SECTION_NR_TO_ROOT()にセクション番号を渡して取得したインデックスがmem_section配列で無効な値の場合はNULLを返す
それ以外の場合は二次元配列であるmem_sectionから取得したインデックスの要素から、更にセクション番号とSECTION_ROOT_MASKの論理積で算出される値番目のセクションのデータを取得する
アドレッシング - SECTION_NR_TO_ROOT()
概要
セクションのルート番号を取得する
詳細
セクション番号をSECTIONS_PER_ROOTで割ることでセクションが含まれるルート番号を取得する