lapic.c int lapicid(void)

トップページ
jupiteroak.hatenablog.com


lapic.c
https://github.com/mit-pdos/xv6-public/blob/master/lapic.c#L100

int lapicid(void)
{
  if (!lapic)
    return 0;
  return lapic[ID] >> 24;
}

lapicid関数は、この関数を実行しているプロセッサが持つLocal APIC IDレジスタから、LocalAPIC IDを取得します。

戻り値 int lapic[ID] >> 24 または 0
戻り値はLocal APIC ID(Local APIC IDレジスタのbit27-24の値)です。
Local APICレジスタの先頭アドレスを取得できていない場合は、0が戻り値となります。

処理の内容

Local APICレジスタ群の先頭アドレスを取得しているかを確認する

if (!lapic)
    return 0;

!lapicが真となる場合→lapicが0の場合→Local APICレジスタの先頭アドレスを取得できていない場合は、戻り値を0として処理を終了します。

LocalAPIC IDを戻り値としてリターンする

return lapic[ID] >> 24;

Local APIC IDレジスタlapic[ID](#define ID (0x0020/4))を24bit右シフト演算することで、LocalAPIC IDが格納されているLocal APIC ID フィールドの値(Local APIC IDレジスタのbit27-24)を取り出しています。この値を戻り値としてリターンします。