アドレッシング - __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_を加算したアドレスを返す