(57)【要約】【課題】仮想プロセッサ・スレッド・グループを使用するデータ処理システムの処理ユニット内の割込みを処理するための技法を提供する。【解決手段】データ処理システム内の割込みを処理するための技法は、割込み提示コントローラ（ＩＰＣ）でイベント通知メッセージ（ＥＮＭ）を受信することを含む。ＥＮＭは、イベント・ターゲット番号、および無視するビット数を指定する。ＩＰＣは、ＥＮＭ内で指定されるイベント・ターゲット番号および無視ビット数に基づいて、潜在的に割込みを受ける可能性がある仮想プロセッサ・スレッドのグループを決定する。潜在的に割込みを受ける可能性がある仮想プロセッサ・スレッドのグループを決定する際に、イベント・ターゲット番号は、特定の仮想プロセッサ・スレッドを特定し、無視ビット数は、特定の仮想プロセッサ・スレッドに関して下位の無視ビット数を特定する。【選択図】図１９
2017091544.tif 000002
【特許請求の範囲】
【請求項１】
イベント・ターゲット番号、および無視ビット数を指定するイベント通知メッセージ（ＥＮＭ）を、割込み提示コントローラ（ＩＰＣ）で受信することと、
前記ＥＮＭ内で指定される前記イベント・ターゲット番号および前記無視ビット数に基づいて、潜在的に割込みを受ける可能性がある仮想プロセッサ・スレッドのグループを前記ＩＰＣによって決定することであって、かつ潜在的に割込みを受ける可能性がある仮想プロセッサ・スレッドのグループを決定する際に、前記イベント・ターゲット番号が、特定の仮想プロセッサ・スレッドを特定し、前記無視ビット数が、前記特定の仮想プロセッサ・スレッドに関して下位の無視ビット数を特定することと
を含む、データ処理システム内の割込みを処理する方法。
【請求項２】
前記ＥＮＭは、レベルをさらに指定し、前記仮想プロセッサ・スレッドの前記グループは、前記ＥＮＭ内で指定される前記レベルがユーザ・レベルに対応する際に、プロセス識別子（ＩＤ）をさらに使用することによって決定される、請求項１に記載の方法。
【請求項３】
前記ＥＮＭは、イベント・ソース番号およびイベント優先順位をさらに指定する、請求項１に記載の方法。
【請求項４】
前記レベルがオペレーティング・システム（ＯＳ）レベルに対応する際に、前記プロセスＩＤが使用されない、請求項２に記載の方法。
【請求項５】
前記レベルがハイパーバイザ・レベルに対応する際に、前記プロセスＩＤが使用されない、請求項４に記載の方法。
【請求項６】
前記無視ビット数は、０ビットであり、前記特定の仮想プロセッサ・スレッドのみが、潜在的に割込みを受ける可能性がある、請求項３に記載の方法。
【請求項７】
前記無視ビット数は、１ビットであり、前記特定の仮想プロセッサ・スレッドおよび１つの他の仮想プロセッサ・スレッドが、潜在的に割込みを受ける可能性がある、請求項３に記載の方法。
【請求項８】
前記無視ビット数は、「ｎ」ビットであり、前記特定の仮想プロセッサ・スレッドおよび（２ｎ−１）個の他の仮想プロセッサ・スレッドが、潜在的に割込みを受ける可能性がある、請求項１ないし５のいずれか一項に記載の方法。
【請求項９】
前記無視ビット数は、０に等しくなく、前記方法は、
仮想プロセッサ・スレッドの前記グループ内の１つまたは複数の仮想プロセッサ・スレッドがディスパッチされ、関連する物理プロセッサ上で動作中であるかどうかを判定することと、
仮想プロセッサ・スレッドの前記グループ内の仮想プロセッサ・スレッドがディスパッチされず、関連する物理プロセッサ上で動作中ではないことに応答して、前記ＥＮＭ内で指定されるイベント・ソース番号によって指定される通知ソースに拒否メッセージを発行することと
をさらに含む、請求項１ないし５のいずれか一項に記載の方法。
【請求項１０】
前記無視ビット数は、０に等しくなく、前記方法は、
仮想プロセッサ・スレッドの前記グループ内の複数の仮想プロセッサ・スレッドがディスパッチされ、関連する物理プロセッサ上で動作中であるかどうかを判定することと、
仮想プロセッサ・スレッドの前記グループ内の前記複数の仮想プロセッサ・スレッドがディスパッチされ、関連する物理プロセッサ上で動作中であることに応答して、保留中の割込みをまだ有しない前記複数の仮想プロセッサ・スレッドのうちの１つを割込みのために選択することと
をさらに含む、請求項１ないし５のいずれか一項に記載の方法。
【請求項１１】
前記複数の仮想プロセッサ・スレッドのうちの複数が保留中の割込みをまだ有しないことに応答して、２次選択基準に基づいて、保留中の割込みをまだ有しない前記複数の仮想プロセッサ・スレッドのうちの１つを割込みのために選択すること
をさらに含む、請求項１０に記載の方法。
【請求項１２】
前記２次選択基準は、前記複数の仮想プロセッサ・スレッドのそれぞれについての動作優先順位に対する、前記ＥＮＭ内で指定されるイベント優先順位、前記複数の仮想プロセッサ・スレッドのうちの最長時間未使用（ＬＲＵ）の１つ、および前記複数の仮想プロセッサ・スレッドのうちのランダムな１つのうちの１つまたは複数を含む、請求項１１に記載の方法。
【請求項１３】
前記無視ビット数は、０に等しくなく、前記方法は、
仮想プロセッサ・スレッドの前記グループ内の複数の仮想プロセッサ・スレッドがディスパッチされ、関連する物理プロセッサ上で動作中であるかどうかを判定することと、
仮想プロセッサ・スレッドの前記グループ内の前記複数の仮想プロセッサ・スレッドがディスパッチされ、関連する物理プロセッサ上で動作中であることに応答して、前記複数の仮想プロセッサ・スレッドのすべてが保留中の割込みを有するかどうかを判定することと、
前記複数の仮想プロセッサ・スレッドのすべてが保留中の割込みを有すると判定したことに応答して、前記ＥＮＭ内で指定されるイベント優先順位が、前記複数の仮想プロセッサ・スレッドのいずれかの動作優先順位よりも高いかどうかを判定することと、
前記イベント優先順位が前記複数の仮想プロセッサ・スレッドのいずれの前記動作優先順位よりも高くないと判定したことに応答して、前記ＥＮＭ内で指定されるイベント・ソース番号によって指定される通知ソースに拒否メッセージを発行することと
をさらに含む、請求項１ないし５のいずれか一項に記載の方法。
【請求項１４】
前記イベント優先順位が前記複数の仮想プロセッサ・スレッドのいずれかの前記動作優先順位よりも高いと判定したことに応答して、前記イベント優先順位未満の動作優先順位を有する前記複数の仮想プロセッサ・スレッドのうちの１つを割込みのために選択すること
をさらに含む、請求項１３に記載の方法。
【請求項１５】
前記イベント優先順位が前記複数の仮想プロセッサ・スレッドのうちの複数の前記動作優先順位よりも高いと判定したことに応答して、２次選択基準に基づいて、前記イベント優先順位未満の動作優先順位を有する前記複数の仮想プロセッサ・スレッドのうちの１つを割込みのために選択すること
をさらに含む、請求項１３に記載の方法。
【請求項１６】
前記２次選択基準は、前記複数の仮想プロセッサ・スレッドについての動作優先順位に対する前記イベント優先順位、前記複数の仮想プロセッサ・スレッドのうちの最長時間未使用（ＬＲＵ）の１つ、および前記複数の仮想プロセッサ・スレッドのうちのランダムな１つのうちの１つまたは複数を含む、請求項１５に記載の方法。
【請求項１７】
割込みソース・コントローラ（ＩＳＣ）と、
前記ＩＳＣに結合された割込み提示コントローラ（ＩＰＣ）と
を備え、前記ＩＰＣは、
前記ＩＳＣからイベント通知メッセージ（ＥＮＭ）を受信することであって、前記ＥＮＭが、イベント・ターゲット番号、および無視ビット数を指定する、前記受信すること、および
前記ＥＮＭ内で指定される前記イベント・ターゲット番号および前記無視ビット数に基づいて、潜在的に割込みを受ける可能性がある仮想プロセッサ・スレッドのグループを決定することであって、かつ潜在的に割込みを受ける可能性がある仮想プロセッサ・スレッドのグループを決定する際に、前記イベント・ターゲット番号が、特定の仮想プロセッサ・スレッドを特定し、前記無視ビット数が、前記特定の仮想プロセッサ・スレッドに関して下位の無視ビット数を特定すること
を行うように構成される、マルチスレッド・データ処理システムのための処理ユニット。
【請求項１８】
前記ＥＮＭは、レベルをさらに指定し、前記仮想プロセッサ・スレッドの前記グループは、前記ＥＮＭ内で指定される前記レベルがユーザ・レベルに対応する際に、プロセス識別子（ＩＤ）をさらに使用することによって決定される、請求項１７に記載の処理ユニット。
【請求項１９】
前記ＥＮＭは、イベント・ソース番号およびイベント優先順位をさらに指定する、請求項１７に記載の処理ユニット。
【請求項２０】
前記無視ビット数は、０に等しくなく、前記ＩＰＣは、
仮想プロセッサ・スレッドの前記グループ内の１つまたは複数の仮想プロセッサ・スレッドがディスパッチされ、関連する物理プロセッサ上で動作中であるかどうかを判定し、
仮想プロセッサ・スレッドの前記グループ内の仮想プロセッサ・スレッドがディスパッチされず、関連する物理プロセッサ上で動作中ではないことに応答して、前記ＥＮＭ内で指定されるイベント・ソース番号によって指定される通知ソースに拒否メッセージを発行する
ようにさらに構成される、請求項１７ないし１９のいずれか一項に記載の処理ユニット。
【請求項２１】
前記無視ビット数は、０に等しくなく、前記ＩＰＣは、
仮想プロセッサ・スレッドの前記グループ内の複数の仮想プロセッサ・スレッドがディスパッチされ、関連する物理プロセッサ上で動作中であるかどうかを判定し、
仮想プロセッサ・スレッドの前記グループ内の前記複数の仮想プロセッサ・スレッドがディスパッチされ、関連する物理プロセッサ上で動作中であることに応答して、保留中の割込みをまだ有しない前記複数の仮想プロセッサ・スレッドのうちの１つを割込みのために選択する
ようにさらに構成される、請求項１７ないし１９のいずれか一項に記載の処理ユニット。
【請求項２２】
前記ＩＰＣは、
前記複数の仮想プロセッサ・スレッドのうちの複数が保留中の割込みをまだ有しないことに応答して、２次選択基準に基づいて、保留中の割込みをまだ有しない複数の仮想プロセッサ・スレッドのうちの１つを割込みのために選択する
ようにさらに構成される、請求項２１に記載の処理ユニット。
【請求項２３】
前記２次選択基準は、前記複数の仮想プロセッサ・スレッドのそれぞれについての動作優先順位に対する、前記ＥＮＭ内で指定されるイベント優先順位、前記複数の仮想プロセッサ・スレッドのうちの最長時間未使用（ＬＲＵ）の１つ、および前記複数の仮想プロセッサ・スレッドのうちのランダムな１つのうちの１つまたは複数を含む、請求項２２に記載の処理ユニット。
【請求項２４】
前記無視ビット数は、０に等しくなく、前記ＩＰＣは、
仮想プロセッサ・スレッドの前記グループ内の複数の仮想プロセッサ・スレッドがディスパッチされ、関連する物理プロセッサ上で動作中であるかどうかを判定し、
仮想プロセッサ・スレッドの前記グループ内の前記複数の仮想プロセッサ・スレッドがディスパッチされ、関連する物理プロセッサ上で動作中であることに応答して、前記複数の仮想プロセッサ・スレッドのすべてが保留中の割込みを有するかどうかを判定し、
前記複数の仮想プロセッサ・スレッドのすべてが保留中の割込みを有すると判定したことに応答して、前記ＥＮＭ内で指定されるイベント優先順位が、前記複数の仮想プロセッサ・スレッドのいずれかの動作優先順位よりも高いかどうかを判定し、
前記イベント優先順位が前記複数の仮想プロセッサ・スレッドのいずれの前記動作優先順位よりも高くないと判定したことに応答して、前記ＥＮＭ内で指定されるイベント・ソース番号によって指定される通知ソースに拒否メッセージを発行する
ようにさらに構成される、請求項１７ないし１９のいずれか一項に記載の処理ユニット。
【請求項２５】
前記ＩＰＣは、
前記イベント優先順位が前記複数の仮想プロセッサ・スレッドのいずれかの前記動作優先順位よりも高いと判定したことに応答して、前記イベント優先順位未満の動作優先順位を有する前記複数の仮想プロセッサ・スレッドのうちの１つを割込みのために選択する
ようにさらに構成される、請求項２４に記載の処理ユニット。
【請求項２６】
集積回路を設計、製造、または試験するためのコンピュータ可読記憶デバイスで有形に具現化された設計構造であって、
割込みソース・コントローラ（ＩＳＣ）と、
前記ＩＳＣに結合された割込み提示コントローラ（ＩＰＣ）と
を備え、前記ＩＰＣは、
前記ＩＳＣからイベント通知メッセージ（ＥＮＭ）を受信することであって、前記ＥＮＭが、イベント・ターゲット番号、および無視ビット数を指定する、前記受信すること、および
前記ＥＮＭ内で指定される前記イベント・ターゲット番号および前記無視ビット数に基づいて、潜在的に割込みを受ける可能性がある仮想プロセッサ・スレッドのグループを決定することであって、かつ潜在的に割込みを受ける可能性がある仮想プロセッサ・スレッドのグループを決定する際に、前記イベント・ターゲット番号が、特定の仮想プロセッサ・スレッドを特定し、前記無視ビット数が、前記特定の仮想プロセッサ・スレッドに関して下位の無視ビット数を特定すること
を行うように構成される、設計構造。
【請求項２７】
前記ＥＮＭがレベルをさらに指定し、前記ＥＮＭ内で指定される前記レベルがユーザ・レベルに対応する際に、前記仮想プロセッサ・スレッドの前記グループが、プロセス識別子（ＩＤ）をさらに使用することによって決定される、請求項２６に記載の設計構造。
【請求項２８】
前記ＥＮＭが、イベント・ソース番号およびイベント優先順位をさらに指定する、請求項２６に記載の設計構造。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、２０１５年１１月１６日に出願した米国仮特許出願第６２／２５５，７６６号、ならびに２０１６年１０月２６日に出願した米国特許出願第１５／３３４，８５７号および第１５／３３４，９５１号の出願日の利益を主張するものである。
【０００２】
本開示は、一般にはデータ処理システムを対象とし、より詳細には、仮想プロセッサ・スレッド・グループを使用するデータ処理システムの処理ユニット内の割込みを処理するための技法を対象とする。
【背景技術】
【０００３】
データ処理システムでは、イベントが注意を必要とすることをプロセッサに示すために割込み信号（割込み）が生成される。割込みの優先順位に応じて、プロセッサは、現在の活動を中断し、状態を保存し、イベントをサービスするための機能（すなわち、割込みハンドラ）を実行することによって応答することができる。例えば、ハードウェア割込みは、入力／出力（Ｉ／Ｏ）デバイス、例えばディスク・ドライブ・コントローラ、キーボード、マウス、または他の周辺デバイスによって生成することができる。一方、ソフトウェア割込みは、プロセッサ内の例外条件、または実行されたときに割込みを生成させる命令セット・アーキテクチャ（ＩＳＡ）内の特殊命令のどちらかによって引き起こすことができる。割込みサービス処理に続いて、プロセッサは中断した活動を再開する。
【０００４】
割込みサービス・ルーチン（ＩＳＲ）としても知られる割込みハンドラは、その実行が割込みによってトリガされる（例えば、ファームウェア、オペレーティング・システム（ＯＳ）、またはデバイス・ドライバで実装される）コールバック機能である。割込みハンドラは、様々な割込み依存機能を実施する。例えば、コンピュータ・キーボード上のキーを押すこと、またはコンピュータ・マウスを移動することは割込みをトリガし、割込みは、それぞれの割込みハンドラを呼び出して、キーまたはマウス位置を読み取り、関連する情報をコンピュータのメモリ内にコピーする。データ処理システムでは、割込みコントローラは、異なる割込みに対する優先レベルの割当てを容易にしつつ、１つまたは複数のプロセッサ例外ライン上に複数の割込みソースを組み合わせるよう実装されることがある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国仮特許出願第６２／２５５，７６６号
【特許文献２】米国特許出願第１５／３３４，８５７号
【特許文献３】米国特許出願第１５／３３４，９５１号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
仮想プロセッサ・スレッド・グループを使用するデータ処理システムの処理ユニット内の割込みを処理するための方法、関連する処理ユニットおよび設計構造が求められている。
【課題を解決するための手段】
【０００７】
データ処理システム内の割込みを処理するための技法は、割込み提示コントローラ（ｉｎｔｅｒｒｕｐｔ  ｐｒｅｓｅｎｔａｔｉｏｎ  ｃｏｎｔｒｏｌｌｅｒ：ＩＰＣ）でイベント通知メッセージ（ＥＮＭ）を受信することを含む。ＥＮＭは、イベント・ターゲット番号、および無視ビット数を指定する。ＩＰＣは、ＥＮＭ内で指定されるイベント・ターゲット番号および無視ビット数に基づいて、潜在的に割込みを受ける可能性がある仮想プロセッサ・スレッドのグループを決定する。潜在的に割込みを受ける可能性がある仮想プロセッサ・スレッドのグループを決定する際に、イベント・ターゲット番号は、特定の仮想プロセッサ・スレッドを特定し、無視ビット数は、特定の仮想プロセッサ・スレッドについて下位のビット数を特定する。
【図面の簡単な説明】
【０００８】
【図１】本開示の一実施形態による例示的なデータ処理システムの高レベルブロック図である。
【図２】本開示の一実施形態による例示的な処理ユニットのより詳細なブロック図である。
【図３Ａ】従来型イベント通知メッセージ（ＥＮＭ）の例示的なフィールドの図である。
【図３Ｂ】従来型通知拒否メッセージ（ＮＲＭ）の例示的なフィールドの図である。
【図３Ｃ】従来型割込み終了（ＥＯＩ）メッセージの例示的なフィールドの図である。
【図４】例示的な従来型割込みソース・コントローラ（ＩＳＣ）の関連する構成要素のブロック図である。
【図５】例示的な従来型割込み提示コントローラ（ＩＰＣ）の関連する構成要素のブロック図である。
【図６】割込みを処理するために従来型ＩＳＣによって実装される例示的なプロセスの流れ図である。
【図７】割込みを処理するために従来型ＩＰＣによって実装される例示的なプロセスの流れ図である。
【図８】割込みを処理するために従来型ＩＰＣによって実装される別の例示的なプロセスの流れ図である。
【図９】割込みを処理するために従来型プロセッサ・コアによって実装される例示的なプロセスの流れ図である。
【図１０】割込みを処理するために従来型ＩＰＣによって実装されるさらに別の例示的なプロセスの流れ図である。
【図１１】割込みを処理するために従来型ＩＰＣによって実装されるさらに別の例示的なプロセスの流れ図である。
【図１２】本開示の一実施形態に従って構成されるＥＮＭの例示的なフィールドの図である。
【図１３】本開示の一実施形態による、下位の無視ビット数と、関連の割込みをサービスすることができる仮想プロセッサ（ＶＰ）スレッドとの間の関係を示すグラフである。
【図１４】本開示に従って構成された例示的なＩＳＣの関連の構成要素のブロック図である。
【図１５】本開示に従って構成された例示的なＩＰＣの関連の構成要素のブロック図である。
【図１６】３つの割込みコンテキスト・テーブル（ＩＣＴ）、すなわちハイパーバイザ・スタック・レベルＩＣＴ、オペレーティング・システム（ＯＳ）スタック・レベルＩＣＴ、およびユーザ・スタック・レベルＩＣＴを実装するために図１７のＩＰＣが本開示の一実施形態に従って構成されることを示すブロック図である。
【図１７】図１５のＩＰＣの例示的なセレクタの関連する構成要素のブロック図である。
【図１８】割込みを処理するために、本開示に従って構成されたＩＰＣによって実装される例示的なプロセスの流れ図である。
【図１９】割込みを処理するために、本開示に従って構成されたＩＰＣによって実装される別の例示的なプロセスの流れ図である。
【発明を実施するための形態】
【０００９】
ここで図を参照すると、同様の参照番号は全体にわたって同様の対応する部分を指しており、特に図１を参照すると、本開示の１つまたは複数の実施形態に従って構成された１つまたは複数の割込み提示コントローラ（ＩＰＣ）および複数の割込みソース・コントローラ（ＩＳＣ）を実装する例示的なデータ処理システム１００を示す高レベル・ブロック図が示されている。図示される実施形態では、データ処理システム１００は、データおよび命令を処理するための複数の処理ノード１０２を含むキャッシュ・コヒーレント対称型マルチプロセッサ（ＳＭＰ）データ処理システムである。処理ノード１０２は、アドレス、データ、および制御情報を搬送するシステム相互接続１１０に結合される。システム相互接続１１０は、例えば、バス状相互接続、スイッチド相互接続（ｓｗｉｔｃｈｅｄ  ｉｎｔｅｒｃｏｎｎｅｃｔ）、またはハイブリッド相互接続として実装されてもよい。
【００１０】
図示される実施形態では、各処理ノード１０２は、４つの処理ユニット１０４ａ〜１０４ｄを含むマルチチップモジュール（ＭＣＭ）として実現され、各処理ユニットは、それぞれの集積回路として実現することができる。各処理ノード１０２内の処理ユニット１０４は、ローカル相互接続１１４によって、互いに対する通信、およびシステム相互接続１１０に対する通信のために結合され、ローカル相互接続１１４は、システム相互接続１１０と同様に、例えば、１つもしくは複数のバスまたはスイッチまたはその両方と共に実装することができる。システム相互接続１１０およびローカル相互接続１１４は、共にシステム・ファブリックを形成する。
【００１１】
処理ユニット１０４は、それぞれのシステム・メモリ１０８に対するインターフェースを提供するためにローカル相互接続１１４に結合されたメモリ・コントローラ（図示せず）をそれぞれ含む。システム・メモリ１０８内にあるデータおよび命令は一般に、データ処理システム１００内の任意の処理ノード１０２の任意の処理ユニット１０４内のプロセッサ・コアによってアクセスし、キャッシュし、変更することができる。したがって、システム・メモリ１０８は、データ処理システム１００の分散共有メモリ・システム内の最低レベルのメモリ・ストレージを形成する。代替の実施形態では、１つまたは複数のメモリ・コントローラ（およびシステム・メモリ１０８）は、ローカル相互接続１１４ではなく、システム相互接続１１０に結合することができる。
【００１２】
図１のＳＭＰデータ処理システム１００が、相互接続ブリッジ、不揮発性ストレージ、ネットワークまたは取り付けられたデバイスへの接続のためのポートなどの、多くの追加の図示されていない構成要素を含むことができることを当業者は理解されよう。そのような追加の構成要素は、記載の実施形態の理解のために必要ではないので、図１には図示されておらず、本明細書ではこれ以上論じられない。しかし、本明細書に記載の拡張は、多様なアーキテクチャのデータ処理システムに適用可能であり、図１に示される一般化されたデータ処理システム・アーキテクチャに決して限定されないことも理解されたい。
【００１３】
次に図２を参照すると、本開示の一実施形態による、例示的な処理ユニット１０４のより詳細なブロック図が示されている。図示される実施形態では、各処理ユニット１０４は、命令およびデータを処理するための複数のプロセッサ・コア２００を含む集積回路である。好適な実施形態では、各プロセッサ・コア２００は、同時マルチスレッド化（ＳＭＴ）をサポートし、それゆえ同時に複数のハードウェア実行スレッド（ｈａｒｄｗａｒｅ  ｔｈｒｅａｄｓ  ｏｆ  ｅｘｅｃｕｔｉｏｎ）を独立して実行することができる。
【００１４】
各プロセッサ・コア２００は、メモリＩ／Ｏバス２１０を介して割込み提示コントローラ（ＩＰＣ）２４０に結合される。１つまたは複数の実施形態では、ＩＰＣ２４０は、物理プロセッサ（ＰＰ）スレッドについての様々な情報を維持する単一の割込みコンテキスト・テーブル（ＩＣＴ）２４２を含む。１つまたは複数の別の実施形態では、異なるＩＣＴ２４２が、ＰＰスレッド上でディスパッチされる各ソフトウェア・スタック・レベルについて実装される（例えば、図１６を参照）。図１６に示されるように、ＩＣＴ２４２ａがハイパーバイザ（Ｈｙｐ）スタック・レベルについて実装され、ＩＣＴ２４２ｂがオペレーティング・システム（ＯＳ）スタック・レベルについて実装され、ＩＣＴ２４２ｃがユーザ・スタック・レベルについて実装される。本開示に従って構成されたＩＰＣが、３つを超える異なるソフトウェア・スタック・レベルを実装することができることが理解されたい。１つまたは複数の実施形態では、ＩＰＣ２４０は、それぞれの例外ライン２１２を介して各プロセッサ・コア２００に結合され、例外ライン２１２は、割り当てられた仮想プロセッサ・スレッドについての関連する割込みを各プロセッサ・コア２００に通知するために利用される。各ソフトウェア・スタック・レベルについて異なるＩＣＴ２４２が実装される実施形態では、各ソフトウェア・スタック・レベルについて異なる例外ライン２１２が実装される。ＩＰＣ２４０はまた、メモリＩ／Ｏバス２１０を介してＩ／Ｏコントローラ２２０に結合される。ＩＰＣ２４０は、メモリＩ／Ｏバス２１０を介して、Ｉ／Ｏコントローラ２２０もしくはプロセッサ・コア２００またはその両方に対して情報を送受信するように構成される。
【００１５】
各Ｉ／Ｏコントローラ２２０は、パケット・デコーダ２２２と、イベント割当てテーブル（ＥＡＴ）２２６を含む割込みソース・コントローラ（ＩＳＣ）２２４とを含み、イベント割当てテーブル（ＥＡＴ）２２６の値は、ソフトウェアを介して（例えば、ハイパーバイザによって）設定することができる。各Ｉ／Ｏコントローラ２２０は、Ｉ／Ｏバス２１４を介してＩ／Ｏアダプタ２３０に結合される。１つまたは複数のデバイス（図示せず）、例えばディスク・ドライブ、キーボード、マウスは、Ｉ／Ｏバス２１４を介してＩ／Ｏコントローラ２２０のパケット・デコーダ２２２にパケットを送るようにＩ／Ｏアダプタ２３０にシグナリングすることによってＩ／Ｏコントローラ２２０による割込み生成を開始してもよい。イベント割当てテーブル（ＥＡＴ）２２６は、メモリＩ／Ｏバス２１０を介してＩＰＣ２４０に送られるイベント通知メッセージ（ＥＮＭ）を生成するためにＩ／Ｏコントローラ２２０が使用する情報を含む。単一の割込み提示コントローラのみが図２に示されているが、本開示に従って構成された処理ユニットは、複数の割込み提示コントローラを含むことができることを理解されたい。
【００１６】
次に図３Ａを参照すると、例示的な従来型イベント通知メッセージ（ＥＮＭ）３０２の構造が示されている。ＥＮＭ３０２は、「イベント・ターゲット番号」フィールド、「イベント・ソース番号」フィールド、および「イベント優先順位」フィールド、ならびにメッセージをイベント通知メッセージとして特定するフィールド（図示せず）を含む。「イベント・ターゲット番号」フィールド内の値は、割込みを受ける物理プロセッサ・スレッドを特定して、関連のプロセッサ・コアが関連の割込みをサービスすることを容易にする。「イベント・ソース番号」フィールド内の値は、割込みを生成した通知ソースを特定する。「イベント優先順位」フィールド内の値は、割込みの優先レベルを特定する。ＥＮＭ３０２は、従来型ＩＳＣ４２４（図４参照）によって生成および発行されて、通知ソース（「イベント・ソース番号」フィールドによって特定される）が割込みを生成していること、および従来型ＩＰＣ５４０（図５参照）によって受信および処理されることを示す。
【００１７】
次に図３Ｂを参照すると、例示的な従来型通知拒否メッセージ（ＮＲＭ）３０４の構造が示されている。ＮＲＭ３０４は、「イベント・ソース番号」フィールド、ならびにメッセージを通知拒否メッセージとして特定するフィールド（図示せず）を含む。ＮＲＭ３０４は、ＩＰＣ５４０（図５参照）によって生成および発行され、かつＩＳＣ４２４（図４参照）によって受信および処理されて、要求された割込みが拒否されたこと、および再発行する必要があることをＩＳＣ４２４に示す。
【００１８】
次に図３Ｃを参照すると、例示的な従来型割込み終了（ＥＯＩ）メッセージ３０６の構造が示されている。ＥＯＩメッセージ３０６は、「イベント・ソース番号」フィールド、ならびにメッセージをＥＯＩメッセージとして特定するフィールド（図示せず）を含む。ＥＯＩメッセージ３０４は、ＩＰＣ５４０（図５参照）によって生成および発行され、ＩＳＣ４２４（図４参照）に送られ、イベント・ソース番号に関連するデバイスによって要求された割込みがサービスされたことを、ＩＳＣ４２４に示す。
【００１９】
図４を参照すると、従来型ＩＳＣ４２４の関連する構成要素が示されている。ＩＳＣ４２４が、本開示に従って構成された処理ユニット内のＩＳＣ２２４によって置き換えられることを理解されたい。ＩＳＣ４２４は、割込みコントローラ内に含まれ、この割込みコントローラはまた、Ｉ／Ｏバス４１４（図２のＩ／Ｏバス２１４と同様の）に結合されるパケット・デコーダ４２２と、メッセージ・デコーダ４０４（メモリＩ／Ｏバス４１０（図２のメモリＩ／Ｏバス２１０と同様の）を介して受信されたＥＯＩメッセージ３０６もしくはＮＲＭ３０４またはその両方を復号するために使用される）と、イベント割当てテーブル（ＥＡＴ）４２６と、ＥＡＴ４２６内の適切な情報を利用して割込みソースについてのＥＮＭ３０２を生成する、割込みメッセージ・エンコーダ４０６とを含む。パケット・デコーダ４２２は、Ｉ／Ｏバス４１４を介して受信されたパケットを復号し、有限状態機械（ＦＳＭ）を選択してパケットのソースのイベント・ソース番号に基づき受信したパケットを処理するように構成される。図示されるように、ＩＳＣ４２４は、ＥＡＴ４２６内の各行についてＦＳＭ（すなわち、Ｓ−ＦＳＭ  ０からＳ−ＦＳＭ  Ｎ）を含み、ＥＡＴ４２６は、ＥＡＴ４２６内に情報を書き込んでＮＭ３０２の構築を容易にするように構成される。ＥＡＴ４２６内に示されるイベント・ソース番号は、フィールドではないが、行番号を示すためにのみ使用されることを理解されたい。例えば、ソース番号「０」がＥＡＴ４２６の行番号「０」に割り当てられ、ソース番号「１」がＥＡＴ４２６の行番号「１」に割り当てられるなどである。ＥＡＴ４２６では、各行は、関連する「イベント優先順位」フィールドおよび「イベント・ターゲット番号」フィールドを有し、その値は、ＥＮＭ３０２内の対応するフィールドをポピュレート（ｐｏｐｕｌａｔｅ）するために利用され、ＥＮＭ３０２は、関連するＩ／Ｏデバイスによって割込みが要求される際に、割込みメッセージ・エンコーダ４０６によって生成される。
【００２０】
図５を参照すると、従来型ＩＰＣ５４０の関連する構成要素が示されている。ＩＰＣ５４０は、本開示に従って構成された処理装置内のＩＰＣ２４０によって置き換えられることを理解されたい。ＩＰＣ５４０は、メモリＩ／Ｏバス４１０に結合されたメッセージ・デコーダ５０２、メモリ・マップドＩ／Ｏ（ＭＭＩＯ）ユニット５０４、およびメモリＩ／Ｏバス４１０に結合されたメッセージ・エンコーダ５０６を含む。プロセッサ・コアは、ＭＭＩＯロードおよびＭＭＩＯストアを使用して、ＭＭＩＯユニット５０４を介してＩＰＣ５４０と通信する。ＩＰＣ５４０は、メッセージ・デコーダ５０２を介してＩＳＣ４２４からメッセージを受信する。ＩＰＣ５４０は、メッセージ・エンコーダ５０６を介してＩＳＣ４２４宛てのメッセージを生成する。ＭＭＩＯユニット５０４は、メッセージ・エンコーダ５０６にトリガＥＯＩメッセージ５０７を発行して、メッセージ・エンコーダ５０６にメモリＩ／Ｏバス４１０上でＥＯＩメッセージ３０６を生成させ、ＩＳＣ４２４に送らせる。メッセージ・デコーダ５０２はセレクタ５０８に結合され、セレクタ５２２は、受信されたＥＮＭ３０２に関連するイベント・ターゲット番号に基づいてＦＳＭ（すなわち、Ｐ−ＦＳＭ  １からＰ−ＦＳＭ  Ｍのうちの１つ）を選択するように構成される。ＩＰＣ５４０のＦＳＭは、割込みコンテキスト・テーブル（ＩＣＴ）５４２にアクセスし、プロセッサ・コア上で実行中の物理プロセッサ・スレッドに対する例外の生成を開始し、メッセージ・エンコーダ５０６に対するトリガ拒否メッセージ５０５の生成を開始し、メッセージ・エンコーダ５０６は、トリガ拒否メッセージ５０５に応答してＮＲＭ３０４を生成する。
【００２１】
割込みコンテキスト・テーブル（ＩＣＴ）５４２内に示される物理スレッド番号はフィールドではないが、行を示すためにのみ使用されることを理解されたい。例えば、物理スレッド番号「０」がＩＣＴ５４２の行番号「０」に割り当てられ、物理スレッド番号「１」がＩＣＴ５４２の行番号「１」に割り当てられるなどである。ＩＣＴ５４２では、各行は、関連する「有効」フィールド、「動作優先順位」フィールド、「割当て済み」フィールド、「イベント・ソース番号」フィールド、および「イベント優先順位」フィールドを有し、その値をＦＳＭによって設定し、その値にアクセスしてＭＭＩＯロードに応答し、プロセッサ・コアに値を返してもよい。
【００２２】
ＩＳＣによって実行される（従来通りと本開示の実施形態毎との両方）ものとして本明細書で説明されるプロセスの様々なブロックが、関連するＥＡＴの行ごとに同時に実行する場合があること、およびＩＰＣによって実行される（従来通りと本開示の実施形態毎との両方）ものとして本明細書で説明されるプロセスの様々なブロックが、関連するＩＣＴの行ごとに同時に実行する場合があることを理解されたい。例として、様々なプロセスのうちの少なくとも一部は、ＥＡＴもしくはＩＣＴまたはその両方の所与の行に関連するＦＳＭ論理によって実施されてもよいし、エンジンは、ＥＡＴもしくはＩＣＴまたはその両方のすべての行を順番に配列しながら、様々なプロセスを実施するように実装されてもよい。
【００２３】
図６を参照すると、割込みを処理するためにＩＳＣ４２４によって実装される、例示的なプロセス６００が示されている。プロセス６００は、例えば、ＩＳＣ４２４がＩ／Ｏバス４１４を介して入力を受信する際に、ブロック６０２で開始されてもよい。次に、判定ブロック６０４では、ＩＳＣ４２４は、受信された入力が割込みトリガ（または割込みトリガ・パルス）に相当するかどうかを判定する。受信した入力が割込みトリガではないことに応答して、制御はブロック６０４上でループする。ブロック６０４で受信した入力が割込みトリガであることに応答して、制御はブロック６０６に移る。ブロック６０６では、ＩＳＣ４２４が、ＥＡＴ４２６内の関連する情報に基づいてＥＮＭ３０２を構築する。次に、ブロック６０８では、ＩＳＣ４２４は、メモリＩ／Ｏバス４１０を介してＩＰＣ５４０にＥＮＭ３０２を送る。
【００２４】
次いで、判定ブロック６１０では、ＩＳＣ４２４は、拒否メッセージ（すなわち、ＮＲＭ３０４）がＩＰＣ５４０から受信されているかどうかを判定する。例えば、割込みのイベント優先順位よりも動作優先順位の高い割込みをサービスするために割込みを受けるように指定される、物理プロセッサ・スレッドに応答して、ＩＰＣ５４０は、ＮＲＭ３０４を生成することができる。ブロック６１０でＩＳＣ４２４がＥＮＭ３０２についてＮＲＭ３０４を受信したことに応答して、制御はブロック６１４に移り、プロセス６００は、ブロック６０６に制御を返す前に構成可能時間枠を待機し、ブロック６０６では、別のＥＮＭ３０２が割込みのために構築される。ブロック６１０でＩＳＣ４２４がＥＮＭ３０２についてのＮＲＭ３０４を受信しないことに応答して、制御は判定ブロック６１２に移る。ブロック６１２では、ＩＳＣ４２４は、ＥＯＩメッセージ３０６がＩＰＣ５４０から受信されているかどうかを判定する。ブロック６１２でＩＳＣ４２４がＥＮＭ３０２についてＥＯＩメッセージ３０６を受信したことに応答して、制御はブロック６０４に戻る。ブロック６１２でＩＳＣ４２４がＥＮＭ３０２についてのＥＯＩメッセージ３０６を受信しないことに応答して、制御はブロック６１０に戻る。
【００２５】
図７を参照すると、割込みを処理するためにＩＰＣ５４０によって実装される例示的なプロセス７００が示されている。プロセス７００は、ＩＰＣ５４０がメモリＩ／Ｏバス４１０を介して入力を受信した際に、ブロック７０２で開始されてもよい。次に、判定ブロック７０４では、ＩＰＣ５４０は、ＥＮＭ３０２が受信されたかどうかを判定する。受信した入力がＥＮＭ３０２ではないことに応答して、制御はブロック７０４上でループする。ブロック７０４で受信した入力がＥＮＭ３０２であることに応答して、制御は判定ブロック７０６に移る。ブロック７０６では、ＩＰＣ５４０は、ＥＮＭ３０２内で指定されるイベント・ターゲット番号（すなわち、物理プロセッサ・スレッド）に割り当てられるＩＣＴ５４２内の行についての有効ビットがアサートされるかどうか（すなわち、ＩＣＴ５４２内の物理プロセッサ・スレッドの有効フィールドによって指定された通りに、指定される物理プロセッサ・スレッドがポピュレートされかつ動作可能であるかどうか）を判定する。
【００２６】
有効ビットがブロック７０６でアサートされないことに応答して、制御はブロック７１２に移り、ここでエラー処理が開始され、次いでブロック７０４に戻る。有効ビットがブロック７０６でアサートされることに応答して、制御は判定ブロック７０８に移る。ブロック７０８では、ＩＰＣ５４０は、保留中の割込みがイベント・ソース番号に関連する物理プロセッサ・スレッドに既に割り当てられているかどうかを判定する（ＩＣＴ５４２内の指定される物理プロセッサ・スレッドの「割当て済み」フィールドの値を検査することによって）。ブロック７０８で、保留中の割込みが、指定される物理プロセッサ・スレッドにまだ割り当てられていないことに応答して、制御がブロック７１４に移る。ブロック７１４では、ＩＰＣ５４０は、「割当て済み」フィールドをアサートし、「イベント・ソース番号」フィールド、およびＥＮＭ３０２内に含まれる値に基づく指定される物理プロセッサ・スレッドのための「イベント優先順位」フィールドを設定する。ブロック７１４の後、制御はブロック７０４に戻る。
【００２７】
ブロック７０８で保留中の割込みが既に物理プロセッサ・スレッドに割り当てられていることに応答して、制御は判定ブロック７１０に移る。ブロック７１０では、ＥＮＭ３０２の「イベント優先順位」フィールド内で指定されるような新しい割込みのイベント優先順位が、ＩＣＴ５４２内の物理プロセッサ・スレッドの「イベント優先順位」フィールド内で指定されるような既に保留中の割込みのイベント優先順位よりも高いかどうかを、ＩＰＣ５４０が判定する。新しい割込みのイベント優先順位が保留中の割込みのイベント優先順位よりも高くないことに応答して、制御はブロック７１０からブロック７１６に移る。ブロック７１６では、ＩＰＣ５４０は、ＥＮＭ３０２内で指定されるイベント・ソース番号（すなわち、新しい割込みに関連するソース）にＮＲＭ３０４を発行する。
【００２８】
新しい割込みのイベント優先順位が保留中の割込みのイベント優先順位よりも高いことに応答して、制御はブロック７１０からブロック７１８に移る。ブロック７１８では、ＩＰＣ５４０は、ＩＣＴ５４２内で指定されるイベント・ソース番号（すなわち、保留中の割込みに関連するソース）にＮＲＭ３０４を発行する。次に、ブロック７２０では、ＩＰＣ５４０は、ＩＣＴ５４２内の物理プロセッサ・スレッドについて、ＥＮＭ３０２内で指定されるようなイベント・ソース番号およびイベント優先順位を修正する。ブロック７２０の後、制御はブロック７０４に戻る。
【００２９】
図８を参照すると、例外ラインをアサート／デアサートするためにＩＰＣ５４０によって実装される、例示的なプロセス８００が示されている。このアサート／デアサートは、関連する「割当て済み」フィールドがアサートされること（このことは保留中の割込みを示す）、および保留中の割込みのイベント優先順位が、物理プロセッサ・スレッドの動作優先順位よりも大きい（またはそれ以下である）ことに基づいて行われ、後者の物理プロセッサ・スレッドは、関連するプロセッサ・コアによって割込みをサービスすることを容易にするために、割込みを受けるものである。プロセス８００は、ブロック８０２でＩＰＣ５４０によって定期的に開始されて、それぞれのプロセッサ・コアに対する例外ラインがアサートまたはデアサートを必要とするかどうかを判定してもよい。次に、判定ブロック８０４では、ＩＰＣ５４０は、ＩＣＴ５４２内の各行についての割当て済みフィールドがアサートされる（すなわち真である）かどうかを判定し、この問いは、関連する物理プロセッサ・スレッドについて割込みが保留中であることを示す。
【００３０】
「割当て済み」フィールドがＩＣＴ５４２の行内でアサートされないことに応答して、制御はブロック８０４からブロック８１０に移る。ブロック８１０では、ＩＰＣ５４０は、最近割当て解除されていた（ｕｎａｓｓｉｇｎ）行に関連する例外ラインをデアサートするか、または、割当て解除されているが、最近は割当て解除されていなかった行について、例外ラインをデアサートされた状態に維持する。ブロック８１０の後、制御はブロック８０４に戻る。割当て済みフィールドがＩＣＴ５４２の行内でアサートされることに応答して、制御はブロック８０４から判定ブロック８０６に移る。ブロック８０６では、ＩＰＣ５４０は、保留中の割込みのイベント優先順位が、関連する物理プロセッサ・スレッドの動作優先順位よりも高いかどうかを判定する。
【００３１】
ブロック８０６で、保留中の割込みのイベント優先順位が、関連する物理プロセッサ・スレッドの動作優先順位よりも高くないことに応答して、制御はブロック８１０に移り、関連する例外ラインがデアサートされたままとなる。ブロック８０６で、保留中の割込みのイベント優先順位が、関連する物理プロセッサ・スレッドの動作優先順位よりも高いことに応答して、制御はブロック８０８に移り、関連する例外ラインがアサートされる。ブロック８０８の後、制御はブロック８０４に戻る。
【００３２】
図９を参照すると、割込みを処理するためにプロセッサ・コアによって実装される例示的なプロセス９００が示されている。各プロセッサ・コアがそれぞれの関連する例外ラインについて例外イネーブル・ビット（例えば、内部レジスタ内の）を維持することを理解されたい。プロセス９００は、割込みをサービスするための割込みハンドラをプロセッサ・コアによって実行することを容易にするよう、物理プロセッサ・スレッドが割込みを受けるべきかどうかを判定するために、プロセッサ・コアによって定期的に実行されてもよい。プロセス９００はブロック９０２で開始され、その時点で制御は判定ブロック９０４に移る。ブロック９０４では、プロセッサ・コアは、例外ラインと例外イネーブル・ビットの両方がアサートされるかどうかを判定する。プロセッサ・コアは、例外イネーブル・ビットをデアサートすることによって割込みをマスクする。
【００３３】
例外ラインもしくは関連する例外イネーブル・ビットまたはその両方がアサートされないことに応答して、制御はブロック９０４上でループする。例外ラインと関連する例外イネーブル・ビットの両方がアサートされることに応答して、制御はブロック９０４からブロック９０６に移る。ブロック９０６では、プロセッサ・コアは、例外イネーブル・ビットをリセットする（後続の割込みが現割込みに割り込むことを防止するため）。次に、ブロック９０８では、プロセッサ・コアは、適切な割込みハンドラに制御フローを変更する。次に、プロセッサ・コアは、ＩＰＣ５４０にＭＭＩＯロードを発行することによって保留中の割込みを認識する。次いで、ブロック９１０では、プロセッサ・コアは、ソース（「イベント・ソース番号」フィールド内の値によって指定される）からの割込みを処理するために登録されるプログラムを実行する。
【００３４】
次に、ブロック９１４では、プログラムの完了の後、プロセッサ・コアが、ＩＰＣ５４０にＭＭＩＯストアを発行し、ＥＯＩをシグナリングする。次いで、ブロック９１６では、プロセッサ・コアは、物理プロセッサ・スレッドに関連するＩＣＴ５４２内の行内の動作優先順位を事前割込み値にリセットする。次に、ブロック９１８では、プロセッサ・コアは、例外イネーブル・ビットをアトミックにアサートし、割込みをサービスするために割込みを受けたプログラムに、制御フローを戻す。ブロック９１８の後、制御はブロック９１８に戻る。
【００３５】
図１０を参照すると、割込みを処理するためにＩＰＣ５４０によって実装される例示的なプロセス１０００が示されている。プロセス１０００は、ＩＰＣ５４０が保留中の割込みに関してプロセッサ・コアから通信（例えば、ＭＭＩＯロードまたはＭＭＩＯストア）を受信したかどうかを判定するために、ＩＰＣ５４０によって定期的に実行されてもよい。プロセス１０００はブロック１００２で開始され、その時点で制御は判定ブロック１００４に移る。ブロック１００４では、ＩＰＣ５４０は、ＭＭＩＯロードが割込み認識アドレスで受信されたかどうかを判定する。
【００３６】
ＭＭＩＯロードが割込み認識アドレスで受信されないことに応答して、制御はブロック１００４上でループする。ＭＭＩＯロードが割込み認識アドレスで受信されたことに応答して、制御はブロック１００６に移る。ブロック１００６では、ＩＰＣ５４０は、保留中の割込み優先順位に動作優先順位をアトミックに設定し、ＩＣＴ５４２内の割込みについて割当て済みフィールドをリセットし、保留中の割込みソース番号を応答データとしてＭＭＩＯロードに返す。ブロック１００６から、制御はブロック１００４に戻る。
【００３７】
図１３を参照すると、物理スレッドについての動作優先順位の変化を処理するためにＩＰＣ５４０によって実装される例示的なプロセス１１００が示されている。プロセス１１００は、ＩＰＣ５４０が保留中の割込みに関してプロセッサ・コアから通信（例えば、ＭＭＩＯロードまたはＭＭＩＯストア）を受信したかどうかを判定するために、ＩＰＣ５４０によって定期的に実行することができる。プロセス１１００はブロック１１０２で開始され、その時点で制御は判定ブロック１１０４に移る。ブロック１１０４では、ＩＰＣ５４０は、ＭＭＩＯストアが動作優先順位アドレスで受信されたかどうかを判定する。
【００３８】
ＭＭＩＯストアが動作優先順位アドレスで受信されないことに応答して、制御はブロック１１０４上でループする。ＭＭＩＯストアが動作優先順位アドレスで受信されたことに応答して、制御はブロック１１０４からブロック１１０６に移る。ブロック１１０６では、ＩＰＣ５４０は、ＭＭＩＯストアに関連するデータごとにＩＣＴ５４２内の各行について動作優先順位を設定する。次に、判定ブロック１１０８では、ＩＰＣ５４０は、動作優先順位がＩＣＴ５４２内の各行についての保留中の優先順位未満であるかどうかを判定する。動作優先順位が保留中のイベント優先順位未満であることに応答して、制御はブロック１１０８からブロック１１０４に移る。動作優先順位が保留中のイベント優先順位未満ではないことに応答して、制御はブロック１１０８からブロック１１０９に移り、１１０９では、行割当て済みビットが、保留中の優先順位と共にリセットされる。次に、ブロック１１１０では、ＩＰＣ５４０は、保留中の割込みに関連する通知ソースに拒否メッセージを発行する。ブロック１１１０から、制御はブロック１１０４に戻る。
【００３９】
本開示の一実施形態によれば、所与の割込みによって割込みを受けるために利用可能なスレッド数を増加させてもよく、それゆえ所与の割込みがより適時にサービスされる機会を向上させることのできる技法が実装される。様々な実施形態では、この技法は、割込みのためのソフトウェア・スタック・レベル（例えば、ユーザ・レベル、ＯＳレベル、またはハイパーバイザ・レベル）を指定することもでき、ユーザ・レベルが割込みを受けることになる際に、プロセス識別子（ＩＤ）を指定することもできる。
【００４０】
図１２を参照すると、本開示に従って構成される例示的なイベント通知メッセージ（ＥＮＭ）１２０２の構造が示されている。ＥＮＭ１２０２は、「プロセスＩＤ」フィールド、「レベル」フィールド、「イベント・ターゲット番号」フィールド、「無視ビット数」フィールド、「イベント・ソース番号」フィールド、および「イベント優先順位」フィールド、ならびにメッセージをイベント通知メッセージとして特定するフィールド（図示せず）を含む。「プロセスＩＤ」フィールド内の値（ユーザ・レベル割込みが指定される際の）は、割込みのためのユーザ・プロセスを特定する（例えば、３２個の異なるユーザ・プロセスを指定することがある）。「レベル」フィールド内の値は、割込みがユーザ・レベル割込みであるか、ＯＳレベル割込みであるか、それともハイパーバイザ・レベル割込みであるかを指定する。「イベント・ターゲット番号」フィールド内の値は、仮想プロセッサ（ＶＰ）スレッドを特定し、このＶＰスレッドは、関連のプロセッサ・コアが関連の割込みをサービスすることを容易にするために、割込みを受けるように指定される。「無視ビット数」フィールド内の値は、割込みをサービスするためにどのＶＰスレッドが割込みを受ける可能性があるかを判定する際に、「イベント・ターゲット番号」内で無視する下位ビット数を指定する。「イベント・ソース番号」フィールド内の値は、割込みを生成した通知ソースを特定する。「イベント優先順位」フィールド内の値は、割込みの優先レベルを特定する。図示される実施形態では、ＥＮＭ１２０２は、「プロセスＩＤ」フィールドおよび「レベル」フィールドを含む。しかし、代替の実施形態では、「プロセスＩＤ」フィールドおよび「レベル」フィールドがＥＮＭ１２０２から省略されてもよい。
【００４１】
ＥＮＭ１２０２は、本開示（図１４参照）に従って構成される割込みソース・コントローラ（ＩＳＣ）２２４によって生成され、本開示（図１５参照）に従って構成される割込み提示コントローラ（ＩＰＣ）２４０に発行されて、「イベント・ソース番号」フィールドによって特定される通知ソースが割込みを生成したことを示す。ＥＮＭ１２０２はＥＮＭ３０２と同様であり、いくつかの例外として、ＥＮＭ１２０２が、ユーザ・レベル割込みのための「プロセスＩＤ」を指定する追加のフィールドと、割込みの「レベル」（すなわち、ユーザ・レベル、ＯＳレベル、またはハイパーバイザ・レベル）を指定する追加のフィールドと、割込むための仮想プロセッサ（ＶＰ）スレッドを選択する際に使用される「無視ビット数」を指定する追加のフィールドとを含むこと、および「イベント・ターゲット番号」フィールドが、物理プロセッサ・スレッドとは対照的に仮想プロセッサ・スレッドを特定することを理解されたい。
【００４２】
例えば、１６個のＶＰスレッド（すなわち、ＶＰスレッド００００から１１１１）が実装されると仮定すると、「無視ビット数」フィールド内で指定される値に応じて、割込みのために考慮することのできるＶＰスレッド数を、単一のＶＰスレッドまたはすべての１６個のＶＰスレッドとして指定されてもよい。一例として、ＶＰスレッド８、すなわち「１０００」が「イベント・ターゲット番号」フィールド内で指定されること、および「無視ビット数」フィールド内で３が指定されると仮定すると、関連する割込みをサービスするために８個のＶＰスレッド（すなわち、「１０００」から「１１１１」）を割込みのために考慮してもよい。別の例として、ＶＰスレッド８、すなわち「１０００」が「イベント・ターゲット番号」フィールド内で指定されること、および「無視ビット数」フィールド内で０が指定されることを仮定すると、関連する割込みをサービスするためにＶＰスレッド８（すなわち、「１０００」）のみを割込みのために考慮してもよい。
【００４３】
図１３を参照すると、本開示の一実施形態による、（下位の）無視ビット数と仮想プロセッサ（ＶＰ）スレッドとの間の関係を示すグラフ１３００が示されており、このＶＰは、最大１６個のＶＰスレッドを配置するデータ処理システムについて、関連する割込みを潜在的にサービスする可能性がある仮想プロセッサ（ＶＰ）スレッドとの間の関係を示すグラフ１３００が示されている。開示される技法は、１６個より多いかまたは少ないＶＰスレッドを配置するデータ処理システムに適用可能であることを理解されたい。グラフ１３００に示されるように、「無視ビット数」が４であるとき、１６個すべてのＶＰスレッドが、関連する割込みをサービスするために潜在的に利用可能である。「無視ビット数」が３であるとき、８個のＶＰスレッドが、関連する割込みをサービスするために潜在的に利用可能である。「無視ビット数」が２であるとき、４つのＶＰスレッドが、関連する割込みをサービスするために潜在的に利用可能である。「無視ビット数」が１であるとき、２つのＶＰスレッドが、関連する割込みをサービスするために潜在的に利用可能である。「無視ビット数」が０であるとき、１つのＶＰスレッドが、関連する割込みをサービスするために潜在的に利用可能である。一般には、「無視ビット数」が「ｎ」ビットであるとき、指定される仮想プロセッサ・スレッドおよび２ｎ−１個の他の仮想プロセッサ・スレッドが、潜在的に割込みを受ける可能性がある。
【００４４】
図１４を参照すると、本開示に従って構成される、図２のＩＳＣ２２４の関連する構成要素がさらに示されている。前述のように、割込みコントローラ２２０は、Ｉ／Ｏバス２１４に結合されるパケット・デコーダ２２２と、ＩＳＣ２２４とを含む。ＩＳＣ２２４は、メッセージ・デコーダ１４０４（メモリＩ／Ｏバス２１０を介して受信された従来型ＥＯＩメッセージ３０６もしくはＮＲＭ３０４またはその両方を復号するために使用される）と、イベント割当てテーブル（ＥＡＴ）２２６と、ＥＡＴ２２６内の適切な情報を利用して、ソースについてのＥＮＭ１２０２を生成する割込みメッセージ・エンコーダ１４０６とを含む。パケット・デコーダ２２２は、Ｉ／Ｏバス２１４を介して受信されたパケットを復号し、有限状態機械（ＦＳＭ）を選択し、パケットのソースについてのイベント・ソース番号に基づいて、受信したパケットを処理するように構成される。
【００４５】
図示されるように、ＩＳＣ２２４は、ＥＡＴ２２６の各行についてＦＳＭ（すなわち、Ｓ−ＦＳＭ  ０からＳ−ＦＳＭ  Ｎ）を含み、ＥＡＴ２２６は、ＥＡＴ２２６内の情報を維持して、ＮＭ１２０２の構築を容易にする。ＥＡＴ２２６内に示されるイベント・ソース番号は、フィールドではないが、行番号を示すためにのみ使用されることを理解されたい。例えば、ソース番号「０」が、ＥＡＴ２２６の行番号「０」に割り当てられ、ソース番号「１」が、ＥＡＴ２２６の行番号「１」に割り当てられるなどである。ＥＡＴ２２６では、各行は、関連する「イベント優先順位」フィールド、「イベント・ターゲット番号」フィールド、「無視ビット数」フィールド、「レベル」フィールド、および「プロセスＩＤ」フィールドを有し、それらの値は、対応するフィールドをＥＮＭ１２０２内にポピュレートするために利用され、ＥＮＭ１２０２は、関連するＩ／Ｏデバイスによって割込みが要求される際に、割込みメッセージ・エンコーダ１４０６によって生成される。図示される実施形態では、ＥＡＴ２２６内の各行は、「レベル」フィールドおよび「プロセスＩＤ」フィールドを有する。しかし、代替の実施形態では、「レベル」フィールドおよび「プロセスＩＤ」フィールドをＥＡＴ２２６から省略することがある。
【００４６】
図１５を参照すると、ＩＰＣ２４０の関連する構成要素がさらに示されている。ＩＰＣ２４０は、メモリＩ／Ｏバス２１０に結合されたメッセージ・デコーダ１５０２、メモリ・マップドＩ／Ｏ（ＭＭＩＯ）ユニット１５０４、およびメッセージ・エンコーダ１５０６を含む。プロセッサ・コア２００は、ＭＭＩＯロードおよびＭＭＩＯストアを使用して、ＭＭＩＯユニット１５０４を介してＩＰＣ２４０と通信する。ＩＰＣ２４０は、メッセージ・デコーダ１５０２を介してＩＳＣ２２４からメッセージを受信する。ＩＰＣ２４０は、メッセージ・エンコーダ１５０６を介してＩＳＣ２２４についてのメッセージを生成する。ＭＭＩＯユニット１５０４は、メッセージ・エンコーダ１５０６にトリガＥＯＩメッセージ１５０７を発行し、メッセージ・エンコーダ１５０６に、メモリＩ／Ｏバス２１０上でＥＯＩメッセージ３０６を生成させ、ＩＳＣ２２４に送らせる。メッセージ・デコーダ１５０２はセレクタ１５０８に結合され、セレクタ１５０８は、受信したＥＮＭ１２０２に関連するイベント・ターゲット番号に基づいてパケット処理のためにＦＳＭ（すなわち、Ｐ−ＦＳＭ  １からＰ−ＦＳＭ  Ｍのうちの１つ）を選択するように構成される。ＩＰＣ２４０のＦＳＭは、割込みコンテキスト・テーブル（ＩＣＴ）２４２にアクセスし、プロセッサ・コア２００上で実行中の物理スレッドに対する例外の生成を開始し、メッセージ・エンコーダ１５０６に対するトリガ拒否メッセージ１５０５を生成し、メッセージ・エンコーダ１５０６は、トリガ拒否メッセージ１５０５に応答してＮＲＭ３０４を生成する。
【００４７】
ＩＣＴ２４２内で示される物理プロセッサ・スレッド番号は、フィールドではないが、行を示すためにのみ使用されることを理解されたい。例えば、物理（プロセッサ）スレッド番号「０」がＩＣＴ２４２の行番号「０」に割り当てられ、物理スレッド番号「１」がＩＣＴ２４２の行番号「１」に割り当てられるなどである。ＩＣＴ２４２では、各行は、関連する「有効」フィールド、仮想プロセッサ番号（「ＶＰ  ＃」）フィールド、「プロセスＩＤ」フィールド（ユーザ・レベル割込みのために使用される）、「動作優先順位」フィールド、「割当て済み」フィールド、「ソース番号」フィールド、および「イベント優先順位」フィールドを有し、それらの値は、例外ラインがＩＰＣ２４０によってアサートされたことに応答して、ＭＭＩＯロードを使用してプロセッサ・コアによって読み出すことができる。「有効」フィールドは、プロセッサがインストールされ、電源オンされるかどうか、およびＶＰがディスパッチされ、関連する物理プロセッサ・スレッド上で動作中であるかどうかを示す。「ＶＰ  ＃」フィールドは、関連する物理プロセッサ・スレッド上でディスパッチされるＶＰの番号を指定する。「プロセスＩＤ」フィールドは、ユーザ・レベル割込みについてのプロセスＩＤを指定する。「動作優先順位」フィールドは、関連する物理プロセッサ・スレッド上で現在動作中のプログラムの優先レベルを指定する。図示される実施形態では、ＩＣＴ２４２内の各行は、「プロセスＩＤ」フィールドを有する。しかし、代替の実施形態では、「プロセスＩＤ」フィールドをＩＣＴ２４２から省略することができる。
【００４８】
図１６を参照すると、ＩＣＴ２４２が、３つの異なるＩＣＴ（すなわち、ハイパーバイザ・スタック・レベルＩＣＴ２４２ａ、ＯＳスタック・レベルＩＣＴ２４２ｂ、およびユーザ・スタック・レベルＩＣＴ２４２ｃ）を含むものとしてさらに示されており、それぞれは、プロセッサ・コア２００に配線される、異なる関連の例外ライン２１２ａ、２１２ｂ、および２１２ｃを有する。少なくとも１つの実施形態では、ＩＣＴ２４２ｃのみが「プロセスＩＤ」フィールドを有する。
【００４９】
図１７を参照すると、本開示の一実施形態による、図１５のＩＰＣ２４０のセレクタ１５０８の関連する構成要素がさらに示されている。図示されるように、セレクタ１５０８は、コンパレータ（ＣＭＰ  ０からＣＭＰ  Ｍ）、すなわちＩＣＴ２４２内の各行について１つのコンパレータを含み、コンパレータは、「イベント・ターゲット番号」、ユーザ・レベル割込みについての「プロセスＩＤ」、「レベル」、およびＥＮＭ１２０２内で与えられる「無視ビット数」、ならびにＩＣＴ２４２ａ、２４２ｂ、または２４２ｃのうちの１つのそれぞれの行内に格納された「有効」、「プロセスＩＤ」、および「ＶＰ  ＃」値を比較する。コンパレータの出力は、「ノーヒット」ユニット（’ｎｏ  ｈｉｔｓ’  ｕｎｉｔ）１６０２に与えられ、「ノーヒット」ユニット１６０２は、何らかのＶＰスレッドが割込みを受けるために利用可能かどうかを判定する（割込みがユーザ・レベル割込みである際に、プロセスＩＤも比較される）。ゼロのＶＰスレッドが、割込みを受けるために利用可能である場合、「ノーヒット」ユニット１６０２は、メッセージ・エンコーダ１５０６（図１５参照）にトリガ拒否メッセージ１５０５を発行する。１つを超えるＶＰスレッドが、割込みを受けるために利用可能である場合、「２次選択」ユニット（’ｓｅｃｏｎｄａｒｙ  ｓｅｌｅｃｔｉｏｎ’  ｕｎｉｔ）１６０４が、どのＶＰスレッドが割込みを受けるべきかを判定し、適切な割込みトリガを発行して関連の物理プロセッサ・スレッド上で割込みをトリガする。「プロセスＩＤ」フィールドおよび「レベル」フィールドがＥＮＭ１２０２から省略される代替の実施形態では、「レベル」フィールドおよび「プロセスＩＤ」フィールドがＥＡＴ２２６から省略され、「プロセスＩＤ」フィールドがＩＣＴ２４２から省略され、コンパレータ（ＣＭＰ  ０からＣＭＰ  Ｍ）が、ＥＮＭ１２０２内で与えられる「イベント・ターゲット番号」および「無視ビット数」、ならびにＩＣＴ２４２のそれぞれの行内に格納された「有効」および「ＶＰ  ＃」値を比較することできる。
【００５０】
「２次選択」ユニット１６０４は、どの利用可能なＶＰスレッドを割込みのために選択するかを判定する際に、様々な２次選択基準を実装してもよい。例えば、「２次選択」ユニット１６０４は、「動作優先順位」に対する「イベント優先順位」、最長時間未使用（ＬＲＵ）、もしくはランダム、またはそれらの組合せなどに基づいて、割込みのためのＶＰスレッドを選択することができる。所与の選択プロセス後に複数のＶＰスレッドがまだ利用可能である際に、単一のＶＰスレッドを選択するために様々な選択基準を順番に実装できることを理解されたい。
【００５１】
図１８を参照すると、割込みを処理するためにＩＰＣ２４０によって実装される例示的なプロセス１７００が示されている。ＩＰＣ５４０がイベント通知メッセージをどのように処理するか（図７参照）とは異なる方式で、ＩＰＣ２４０がイベント通知メッセージを処理することを理解されたい。ＩＰＣ２４０がメモリＩ／Ｏバス２１０を介して入力を受信する際に、プロセス１７００はブロック１７０１で開始される。次に、判定ブロック１７０２では、ＩＰＣ５４０は、イベント通知メッセージ（ＥＮＭ）１２０２が受信されたかどうかを判定する。ＩＳＣ２２４はＩＳＣ４２４（図６参照）と同様に動作すること、ＥＮＭ１２０２は、ＥＮＭ３０２を構築するためにＩＳＣ４２４について説明した方式と同様の方式でＩＳＣ２２４によって構築され、例外として、追加のフィールド（すなわち、図示される実施形態では、「プロセスＩＤ」フィールド、「レベル」フィールド、および「無視ビット数」フィールド、または、代替の実施形態では、「無視ビット数」フィールドのみ）を含むようにＥＮＭ１２０２が構築され、かつ物理プロセッサ・スレッドとは対照的に「イベント・ターゲット番号」フィールドが仮想プロセッサ・スレッド番号を与えることを理解されたい。受信した入力がＥＮＭ１２０２に対応しないことに応答して、制御はブロック１７０２上でループする。ブロック１７０２で受信した入力がＥＮＭ１２０２に対応することに応答して、制御はブロック１７０３に移る。
【００５２】
ブロック１７０３では、ＩＰＣ２４０は、ＥＮＭ１２０２によって（「無視ビット数」フィールド内で）指定される下位ビット数を無視して、ＥＮＭ１２０２からの「イベント・ターゲット番号」をすべての有効なＶＰ番号と比較する。次に、判定ブロック１７０４では、ＩＰＣ２４０は、割込みがユーザ・レベル割込みであることを「レベル」フィールドが示すかどうかを判定する。割込みがユーザ・レベル割込みであることに応答して、制御はブロック１７０４からブロック１７０６に移る。ブロック１７０６では、ＩＰＣ２４０は、ＥＮＭ１２０２の「プロセスＩＤ」を、合致する有効なＶＰ番号を有するＩＣＴ２４２ｃ内の行の「プロセスＩＤ」と比較する。ブロック１７０６から、制御は判定ブロック１７０８に移る。ブロック１７０４で割込みがユーザ・レベル割込みではないことに応答して、制御はブロック１７０８に直接移る。代替の実施形態では、判定ブロック１７０４およびブロック１７０６がプロセス１７００から省略され、制御はブロック１７０３から判定ブロック１７０８に直接移る。
【００５３】
ブロック１７０８では、ＩＰＣ２４０は、少なくとも１つのＶＰスレッドについてヒットが生じたかどうかを判定する。ノーヒット（すなわち、説明している実施形態における指定のプロセスＩＤを有するか、または代替の実施形態における指定のプロセスＩＤを有さない際に、ＶＰ選択基準（すなわち、「イベント・ターゲット番号」フィールドおよび「無視ビット数」フィールド内で指定される）に合致するＶＰスレッドが有効ではないことにより、割込みを受けるために利用可能なＶＰスレッドがない）がブロック１７０８で生じたことに応答して、制御はブロック１７１０に移り、ブロック１７１０では、ＩＰＣ２４０は、ＥＮＭ１２０２内の「イベント・ソース番号」フィールドによって指定される通知ソースに拒否メッセージ（すなわち、ＮＲＭ３０４）を発行する。拒否される関連する割込みが最終的にサービスされること保証するために、様々な技法を利用することがあることを理解されたい。ブロック１７１０の後、制御はブロック１７０２に戻る。少なくとも１つのヒットがブロック１７０８で生じたことに応答して、制御は判定ブロック１７１２に移り、判定ブロック１７１２では、ＩＰＣ２４０は、保留中の割込みがまだ割り当てられていない何らかのヒットがあるかどうかを判定する。
【００５４】
保留中の割込みがブロック１７１２でまだ割り当てられていない少なくとも１つのヒットがあることをＩＰＣ２４０が判定したことに応答して、制御はブロック１７１６に移る。ブロック１７１６では、ＩＰＣ２４０は、ＩＣＴ２４２内の行を選択し、割込みをトリガする。次に、ブロック１７１８では、ＩＰＣ２４０は、ＥＮＭ１２０２ごとに選択された行の「割当て済み」フィールド、「ソース番号」フィールド、および「イベント優先順位」フィールドを設定する。ブロック１７１８の後、制御はブロック１７０２に戻る。ブロック１７１２で保留中の割込みがまだ割り当てられていないヒットがないことをＩＰＣ２４０が判定したことに応答して、制御は判定ブロック１７１４に移る。ブロック１７１４では、ＩＰＣ２４０は、ＥＮＭ１２０２の割込み優先順位（すなわち、イベント優先順位）が、保留中の割込みを有するヒットを伴うどの行の動作優先順位よりも高いかどうかを判定する。
【００５５】
割込み優先順位が、保留中の割込みを有するヒットを伴うどの行の動作優先順位よりも高くないことに応答して、制御はブロック１７１４からブロック１７１０に移る。割込み優先順位が、保留中の割込みを有するヒットを伴う少なくとも１つの行の動作優先順位よりも高いことに応答して、制御はブロック１７１４からブロック１７２０に移る。ブロック１７２０では、ＩＰＣ２４０は、ＩＣＴ２４２内の行を選択して、割込みをトリガする。次に、ブロック１７２２では、ＩＰＣ２４０は、ＩＣＴ２４２の選択された行の割り当てられた通知ソースに拒否メッセージを発行する。次いで、ブロック１７１８では、ＩＰＣ２４０は、ＥＮＭ１２０２ごとにＩＣＴ２２４内の選択された行の「割当て済み」フィールド、「ソース番号」フィールド、および「イベント優先順位」フィールドを設定する。ブロック１７１８の後、制御はブロック１７０２に戻る。
【００５６】
図１９を参照すると、プロセッサ・コアから受信したいくつかのＭＭＩＯストアを処理するためにＩＰＣ２４０によって実装される例示的なプロセス１８００が示されている。例えば、プロセッサ・コア２００は、ＩＰＣ２４２にＭＭＩＯストアを発行し、すべての関連するＶＰを無効にすることがある。例えば、ＩＰＣ２４０が所与のプロセッサ・コア２００からＭＭＩＯストアを受信した際に、プロセス１８００はブロック１８０２で開始される。次に、判定ブロック１８０４では、ＩＰＣ２４０は、ＩＣＴ２４２内の１つまたは複数の行内の有効ビットをデアサートするようにＭＭＩＯストアが指示されるかどうかを判定する。ＩＣＴ２４２内の１つまたは複数の行内の有効ビットをデアサートするように、受信したＭＭＩＯストアが指示されないことに応答して、制御はブロック１８０４上でループする。ＩＣＴ２４２内の１つまたは複数の行内の有効ビットをデアサートするように、受信したＭＭＩＯストアが指示されることに応答して、制御はブロック１８０４から判定ブロック１８０６に移る。
【００５７】
判定ブロック１８０６では、ＩＰＣ２４０は、割当て済みビットが行内でアサートされるかどうか、すなわちその有効ビットがデアサートされることになる行について割込みが保留中であるかどうかを判定する。割当て済みビットが行についてアサートされることに応答して、制御はブロック１８０６からブロック１８０８に移る。ブロック１８０８では、ＩＰＣ２４０は、有効ビットがデアサートされることになる行き先の行に関連する（ＩＣＴ２４２内の行の「イベント・ソース番号」フィールド内の値によって指定される）通知ソースに拒否メッセージを発行する。次に、ブロック１８１０では、ＩＰＣ２４０は、行に関連する「割当て済み」フィールドおよび「有効」フィールド内の値をアトミックにデアサートする（１つまたは複数の行について割込みがもはや保留中ではないこと、および１つまたは複数の行が有効なＶＰを有しないことを示すために）。ブロック１８１０の後、制御はブロック１８０４に戻る。ブロック１８０６で１つまたは複数の行について割当て済みビットがアサートされないことに応答して、制御はブロック１８１２に移る。ブロック１８１２では、ＩＰＣ２４０は、１つまたは複数の行についての有効ビットをデアサートする。ブロック１８１２の後、制御はブロック１８０４に戻る。
【００５８】
したがって、割込みのサービシングを全般的に改善し、好ましくはＩ／Ｏデバイスが割込みのレベル（例えば、ユーザ・レベル、ＯＳレベル、ハイパーバイザ・レベル）を指定することを可能にする技法が、本明細書で開示されている。集積回路を設計、製造、または試験するためにコンピュータ可読記憶デバイス内に有形に具現化される設計構造で、本開示の態様を実装できることを理解されたい。
【００５９】
上記の流れ図では、図に示された方法は、コンピュータ可読媒体内で１つまたは複数の設計ファイルとして具現化することができる。いくつかの実装では、本発明の趣旨および範囲から逸脱することなく、方法のうちのいくつかのステップを組み合わせ、同時にまたは異なる順序で実施し、あるいは恐らくは省略することができる。そのため、方法ステップが具体的なシーケンスで説明および図示されるが、特定のステップのシーケンスの使用は、本発明に関するどのような制限も示唆することを意味しない。本発明の趣旨または範囲から逸脱することなく、ステップのシーケンスに関して変更を行ってもよい。具体的なシーケンスの使用は、それゆえ限定的な意味に理解されるものではなく、本発明の範囲は、添付の特許請求の範囲のみによって定義される。
【００６０】
当業者は理解するであろうが、本発明の態様は、システム、方法、またはコンピュータ・プログラム製品として具現化することができる。したがって、本発明の態様は、総体的にハードウェアの実施形態、またはソフトウェア態様とハードウェア態様とを組み合わせる実施形態の形態を取ることができ、それらはすべて、本明細書では概して「回路」、「モジュール」、または「システム」と呼ばれることがある。
【００６１】
１つまたは複数のコンピュータ可読媒体の任意の組合せを利用してもよい。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体としてもよい。コンピュータ可読記憶媒体は、例えば、限定はしないが、電子、磁気、光、電磁、赤外線、もしくは半導体のシステム、装置、またはデバイス、または上記の任意の適切な組合せでよいが、コンピュータ可読信号媒体を含まない。コンピュータ可読記憶媒体のより特定の例（非網羅的なリスト）には、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、ポータブル・コンパクト・ディスク読取り専用メモリ（ＣＤ−ＲＯＭ）、光記憶デバイス、磁気記憶デバイス、または上記の任意の適切な組合せが含まれる。本文書の文脈では、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによって、またはそれに関連して使用するためにプログラムを収容し、または格納することのできる任意の有形記憶媒体でよい。
【００６２】
例示的な実施形態を参照しながら本発明を説明してきたが、本発明の範囲から逸脱することなく、様々な変更を行うことができ、その要素に均等物を代用できることを、当業者は理解されよう。さらに、その本質的な範囲から逸脱することなく、その具体的なシステム、デバイス、または構成要素を本発明の教示に適合させるように、多くの変更を行うことができる。したがって、本発明は、本発明を実施するために開示された具体的な実施形態に限定されず、本発明は、添付の特許請求の範囲内に包含されるすべての実施形態を含むものとする。さらに、第１、第２などの用語の使用は、何らかの順序または重要度を示すわけではなく、むしろ第１、第２などの用語は、ある要素を別の要素と区別するために用いられる。
【００６３】
本明細書で使用される用語は、具体的な実施形態を説明するためのものに過ぎず、本発明の限定ではないものとする。本明細書で使用される際に、単数形「ａ」、「ａｎ」、および「ｔｈｅ」は、文脈が特段に明確に示すのでない限り、複数形も含むものとする。「含む（ｃｃｍｐｒｉｓｅｓ）」もしくは「含んでいる（ｃｏｍｐｒｉｓｉｎｇ）」という用語またはその両方は、本明細書で使用される際に、記載の特徴、整数、ステップ、動作、要素、もしくは構成要素、またはそれらの組合せの存在を指定するが、１つもしくは複数の他の特徴、整数、ステップ、動作、要素、構成要素、またはそれらのグループ、またはそれらの組合せの存在または追加を除外しないことをさらに理解されよう。
【００６４】
以下の特許請求の範囲内にあるすべてのミーンズまたはステップ・プラス・ファンクションの構成要素の対応する構造、材料、行為、および均等物は、それが存在する場合、特許請求の範囲に具体的に記載されるように、特許請求の範囲に記載の他の構成要素と組み合わせてそのファンクションを実施するための、任意の構造、材料、または行為を含むことを意図する。本発明の説明は、例示および説明のために提示されてきたが、網羅的であること、または開示された形態の本発明に限定することを意図するものではない。本発明の範囲および趣旨から逸脱することなく、多くの変更形態および変形形態が当業者には明らかとなるであろう。本発明の原理および実際の応用例を最良に説明するために、および企図される具体的な使用に適するような様々な変更を伴う様々な実施形態について、他の当業者が本発明を理解することを可能にするために、実施形態を選び、説明した。
【符号の説明】
【００６５】
１００  データ処理システム
１０２  処理ノード
１０４  処理装置
１０８  システム・メモリ
１１０  システム相互接続
１１４  ローカル相互接続
２００  プロセッサ・コア
２１０  メモリＩ／Ｏバス
２１２  例外ライン
２１４  Ｉ／Ｏバス
２２０  Ｉ／Ｏコントローラ
２２２  パケット・デコーダ
２２４  割込みソース・コントローラ（ＩＳＣ）
２２６  イベント割当てテーブル（ＥＡＴ）
２３０  Ｉ／Ｏアダプタ
２４０  割込み提示コントローラ（ＩＰＣ）
２４２  割込みコンテキスト・テーブル（ＩＣＴ）
３０２  イベント通知メッセージ（ＥＮＭ）
３０４  通知拒否メッセージ（ＮＲＭ）
３０６  割込み終了（ＥＯＩ）メッセージ
４０４  メッセージ・デコーダ
４０５  ＥＯＩおよび拒否ライン
４０６  割込みメッセージ・エンコーダ
４１０  メモリＩ／Ｏバス
４１４  Ｉ／Ｏバス
４２２  パケット・デコーダ
４２４  割込みソース・コントローラ
４２６  イベント割当てテーブル（ＥＡＴ）
５０２  メッセージ・デコーダ
５０４  メモリ・マップドＩ／Ｏ（ＭＭＩＯ）ユニット
５０６  メッセージ・エンコーダ
５０７  トリガＥＯＩメッセージ
５４０  割込み提示コントローラ（ＩＰＣ）
５４２  割込みコンテキスト・テーブル（ＩＣＴ）
１２０２  イベント通知メッセージ（ＥＮＭ）
１４０４  メッセージ・デコーダ
１４０６  割込みメッセージ・エンコーダ
１５０２  メッセージ・デコーダ
１５０４  ＭＭＩＯユニット
１５０５  トリガ拒否メッセージ
１５０６  メッセージ・エンコーダ
１５０７  トリガＥＯＩメッセージ
１５０８  セレクタ
１６０２  「ノーヒット」ユニット
１６０４  「２次選択」ユニット
【図１】
2017091544.tif 000003
【図２】
2017091544.tif 000004
【図３Ａ】
2017091544.tif 000005
【図３Ｂ】
2017091544.tif 000006
【図３Ｃ】
2017091544.tif 000007
【図４】
2017091544.tif 000008
【図５】
2017091544.tif 000009
【図６】
2017091544.tif 000010
【図７】
2017091544.tif 000011
【図８】
2017091544.tif 000012
【図９】
2017091544.tif 000013
【図１０】
2017091544.tif 000014
【図１１】
2017091544.tif 000015
【図１２】
2017091544.tif 000016
【図１３】
2017091544.tif 000017
【図１４】
2017091544.tif 000018
【図１５】
2017091544.tif 000019
【図１６】
2017091544.tif 000020
【図１７】
2017091544.tif 000021
【図１８】
2017091544.tif 000022
【図１９】
2017091544.tif 000023
【外国語明細書】
【Title Of Invention】 METHOD, PROCESSING UNIT AND DESIGN STRUCTURE FOR HANDLING INTERRUPTS IN A PROCESSING UNIT USING VIRTUAL PROCESSOR THREAD GROUPS
【Technical Field】
【０００１】
This application claims the benefit of the filing date of U.S. Provisional Patent Application Serial No. 62/255,766, filed November 16, 2015, and U.S. Patent Application Serial No. 15/334,857 and 15/334951, filed October 26, 2016,
【０００２】
The present disclosure is generally directed to data processing systems and, more specifically, to techniques for handling interrupts in a processing unit of a data processing system using virtual processor thread groups.
【Background Art】
【０００３】
In data processing systems, an interrupt signal (interrupt) is generated to indicate to a processor that an event requires attention.  Depending on a priority of an interrupt, a processor may respond by suspending current activities, saving state, and executing a function (i.e., an interrupt handler) to service the event.  For example, hardware interrupts may be generated by an input/output (I/O) device, e.g., disk drive controller, a keyboard, a mouse, or other peripheral device.  In contrast, software interrupts may be caused either by an exception condition in a processor or a special instruction in an instruction set architecture (ISA) that, when executed, causes an interrupt to be generated.  Following interrupt servicing, a processor resumes suspended activities.
【０００４】
An interrupt handler, also known as an interrupt service routine (ISR), is a callback function (e.g., implemented in firmware, an operating system (OS), or a device driver) whose execution is triggered by an interrupt.  Interrupt handlers perform various interrupt dependent functions.  For example, pressing a key on a computer keyboard or moving a computer mouse triggers interrupts that call respective interrupt handlers to read a key or a mouse position and copy associated information into memory of a computer.  In data processing systems, an interrupt controller may be implemented to combine multiple interrupt sources onto one or more processor exception lines, while facilitating the assignment of priority levels to different interrupts.
【Disclosure Of Invention】
【Object To Be Solved By Invention】
【０００５】
What is needed are methods, associated processing units and design structures for handling interrupts in a processing unit of a data processing system using virtual processor thread groups.
【Means For Addressing Object】
【０００６】
A technique for handling interrupts in a data processing system includes receiving, at an interrupt presentation controller (IPC), an event notification message (ENM).  The ENM specifies an event target number, and a number of bits to ignore.  The IPC determines a group of virtual processor threads that may be potentially interrupted based on the event target number and the number of bits to ignore specified in the ENM.  The event target number identifies a specific virtual processor thread and the number of bits to ignore identifies the number of lower-order bits to ignore with respect to the specific virtual processor thread when determining a group of virtual processor threads that may be potentially interrupted.
【Brief Description Of Drawings】
【０００７】
【Figure 1】 Figure 1 is a high-level block diagram of an exemplary data processing system in accordance with one embodiment of the present disclosure;
【Figure 2】 Figure 2 is a more detailed block diagram of an exemplary processing unit in accordance with one embodiment of the present disclosure;
【Figure 3】 Figure 3A is a diagram of exemplary fields of a conventional event notification message (ENM), Figure 3B is a diagram of exemplary fields of a conventional notification rejection message (NRM), and Figure 3C is a diagram of exemplary fields of a conventional end-of-interrupt (EOI) message;
【Figure 4】 Figure 4 is a block diagram of relevant components of an exemplary conventional interrupt source controller (ISC);
【Figure 5】 Figure 5 is a block diagram of relevant components of an exemplary conventional interrupt presentation controller (IPC);
【Figure 6】 Figure 6 is a flowchart of an exemplary process implemented by a conventional ISC to handle interrupts; 
【Figure 7】 Figure 7 is a flowchart of an exemplary process implemented by a conventional IPC to handle interrupts; 
【Figure 8】 Figure 8 is a flowchart of another exemplary process implemented by a conventional IPC to handle interrupts; 
【Figure 9】 Figure 9 is a flowchart of an exemplary process implemented by a conventional processor core to handle interrupts; 
【Figure 10】 Figure 10 is a flowchart of yet another exemplary process implemented by a conventional IPC to handle interrupts; 
【Figure 11】 Figure 11 is a flowchart of still another exemplary process implemented by a conventional IPC to handle interrupts;
【Figure 12】 Figure 12 is a diagram of exemplary fields of an ENM that is configured according to one embodiment of the present disclosure;
【Figure 13】 Figure 13 is a graph that depicts a relationship between the number of lower-order bits to ignore and virtual processor (VP) threads that may service an associated interrupt according to an embodiment of the present disclosure;
【Figure 14】 Figure 14 is a block diagram of relevant components of an exemplary ISC configured according to the present disclosure;
【Figure 15】 Figure 15 is a block diagram of relevant components of an exemplary IPC configured according to the present disclosure;
【Figure 16】 Figure 16 is a block diagram that illustrates that the IPC of Figure 15 is configured according to one embodiment of the present disclosure to implement three interrupt context tables (ICTs), i.e., a hypervisor stack level ICT, an operating systems (OS) stack level ICT, and a user stack level ICT;
【Figure 17】 Figure 17 is a block diagram of relevant components of an exemplary selector of the IPC of Figure 15;
【Figure 18】 Figure 18 is a flowchart of an exemplary process implemented by an IPC, configured according to the present disclosure, to handle interrupts; and
【Figure 19】 Figure 19 is a flowchart of another exemplary process implemented by an IPC, configured according to the present disclosure, to handle interrupts.
【Description Of Embodiments】
【０００８】
With reference now to the figures, wherein like reference numerals refer to like and corresponding parts throughout, and in particular with reference to Figure 1, there is illustrated a high level block diagram depicting an exemplary data processing system 100 that implements one or more interrupt presentation controllers (IPCs) and multiple interrupt source controllers (ISCs) configured in accordance with one or more embodiments of the present disclosure.  In the depicted embodiment, data processing system 100 is a cache coherent symmetric multiprocessor (SMP) data processing system including multiple processing nodes 102 for processing data and instructions.  Processing nodes 102 are coupled to a system interconnect 110 for conveying address, data and control information.  System interconnect 110 may be implemented, for example, as a bused interconnect, a switched interconnect or a hybrid interconnect.
【０００９】
In the depicted embodiment, each processing node 102 is realized as a multi-chip module (MCM) containing four processing units 104a-104d, each which may be realized as a respective integrated circuit.  The processing units 104 within each processing node 102 are coupled for communication to each other and system interconnect 110 by a local interconnect 114, which, like system interconnect 110, may be implemented, for example, with one or more buses and/or switches.  System interconnect 110 and local interconnects 114 together form a system fabric.
【００１０】
Processing units 104 each include a memory controller (not shown) coupled to local interconnect 114 to provide an interface to a respective system memory 108.  Data and instructions residing in system memories 108 can generally be accessed, cached, and modified by a processor core in any processing unit 104 of any processing node 102 within data processing system 100.  System memories 108 thus form the lowest level of memory storage in the distributed shared memory system of data processing system 100.  In alternative embodiments, one or more memory controllers (and system memories 108) can be coupled to system interconnect 110 rather than a local interconnect 114.
【００１１】
Those skilled in the art will appreciate that SMP data processing system 100 of Figure 1 can include many additional non-illustrated components, such as interconnect bridges, non-volatile storage, ports for connection to networks or attached devices, etc.  Because such additional components are not necessary for an understanding of the described embodiments, they are not illustrated in Figure 1 or discussed further herein.  It should also be understood, however, that the enhancements described herein are applicable to data processing systems of diverse architectures and are in no way limited to the generalized data processing system architecture illustrated in Figure 1.
【００１２】
Referring now to Figure 2, a more detailed block diagram of an exemplary processing unit 104, in accordance with one embodiment of the present disclosure, is depicted.  In the depicted embodiment, each processing unit 104 is an integrated circuit including multiple processor cores 200 for processing instructions and data.  In a preferred embodiment, each processor core 200 supports simultaneous multithreading (SMT) and thus is capable of independently executing multiple hardware threads of execution simultaneously.
【００１３】
Each processor core 200 is coupled to an interrupt presentation controller (IPC) 240 via memory I/O bus 210.  In one or more embodiments, IPC 240 includes a single interrupt context table (ICT) 242 that maintains various information for physical processor (PP) threads.  In one or more other embodiments, a different ICT 242 is implemented for each software stack level that is dispatched on a PP thread (see, for example, Figure 16).  As is illustrated in Figure 16, ICT 242a is implemented for a hypervisor (Hyp) stack level, ICT 242b is implemented for an operating system (OS) stack level, and ICT 242c is implemented for a user stack level.  It should be appreciated that an IPC configured according to the present disclosure may implement more than three different software stack levels.  In one or more embodiments, IPC 240 is coupled to each processor core 200 via respective exception lines 212, which are utilized to notify each processor core 200 of an associated interrupt for an assigned virtual processor thread.  In embodiments in which a different ICT 242 is implemented for each software stack level, different exceptions lines 212 are implemented for each software stack level.  IPC 240 is also coupled to I/O controllers 220 via memory I/O bus 210.  IPC 240 is configured to receive/send information via memory I/O bus 210 from/to I/O controllers 220 and/or processor cores 200.
【００１４】
Each I/O controller 220 includes a packet decoder 222 and an interrupt source controller (ISC) 224 that includes an event assignment table (EAT) 226, whose values may be set via software (e.g., by a hypervisor).  Each I/O controller 220 is coupled to an I/O adapter 230 via an I/O bus 214.  A device or devices (not shown), e.g., disk drive, keyboard, mouse, may initiate interrupt generation by I/O controller 220 by signaling I/O adapter 230 to send a packet to packet decoder 222 of I/O controller 220 via I/O bus 214.  Event assignment table (EAT) 226 includes information that I/O controller 220 uses to create event notification messages (ENMs) that are sent to IPC 240 via memory I/O bus 210.  While only a single interrupt presentation controller is illustrated in Figure 2, it should be appreciated that a processing unit configured according to the present disclosure may include more than one interrupt presentation controller.
【００１５】
With reference now to Figure 3A, a structure of an exemplary conventional event notification message (ENM) 302 is illustrated.  ENM 302 includes an ‘event target number’ field, an ‘event source number’ field, and an ‘event priority’ field, as well as a field (not shown) that identifies the message as an event notification message.  A value in the ‘event target number’ field identifies a physical processor thread that is to be interrupted to facilitate servicing of an associated interrupt by an associated processor core.  A value in the ‘event source number’ field identifies a notification source that generated the interrupt.  A value in the ‘event priority’ field identifies a priority level of the interrupt.  ENM 302 is generated and issued by a conventional ISC 424 (see Figure 4) to indicate that a notification source (identified by the ‘event source number’ field has generated the interrupt) and is received and processed by a conventional IPC 540 (see Figure 5).
【００１６】
With reference now to Figure 3B, a structure of an exemplary conventional notification rejection message (NRM) 304 is illustrated.  NRM 304 includes an ‘event source number’ field, as well as a field (not shown) that identifies the message as a notification rejection message.  NRM 304 is generated and issued by IPC 540 (see Figure 5) and is received and processed by ISC 424 (see Figure 4) to indicate, to ISC 424, that the requested interrupt was rejected and needs to be reissued.
【００１７】
With reference now to Figure 3C, a structure of an exemplary conventional end-of-interrupt (EOI) message 306 is illustrated.  EOI message 306 includes an ‘event source number’ field, as well as a field (not shown) that identifies the message as an EOI message.  EOI message 304 is generated and issued by IPC 540 (see Figure 5) and sent to ISC 424 (see Figure 4) to indicate, to ISC 424, that an interrupt requested by a device associated with the event source number has been serviced.
【００１８】
With reference to Figure 4, relevant components of conventional ISC 424 are illustrated.  It should be appreciated that ISC 424 is replaced by ISC 224 in a processing unit configured according to the present disclosure.  ISC 424 is included within an interrupt controller that also includes a packet decoder 422 that is coupled to an I/O bus 414 (similar to I/O bus 214 of Figure 2), a message decoder 404 (that is used to decode EOI messages 306 and/or NRMs 304 received via memory I/O bus 410 (similar to memory I/O bus 210 of Figure 2)), an event assignment table (EAT) 426, and an interrupt message encoder 406 that utilizes appropriate information in EAT 426 to generate ENMs 302 for an interrupt source.  Packet decoder 422 is configured to decode packets received via I/O bus 414 and select a finite state machine (FSM) to process a received packet based on an event source number of a source of the packet.  As is illustrated, ISC 424 includes an FSM for each row (i.e., S-FSM 0 through S-FSM N) in EAT 426 that is configured to write information into EAT 426 to facilitate building ENMs 302.  It should be appreciated that the event source number illustrated in EAT 426 is not a field, but is only used to indicate a row number.  For example, source number ‘0’ is assigned to row number ‘0’ of EAT 426, source number ‘1’ is assigned to row number ‘1’ of EAT 426, etc.  In EAT 426, each row has an associated ‘event priority’ field and an ‘event target number’ field, whose values are utilized to populate corresponding fields in an ENM 302, which is generated by interrupt message encoder 406 when an interrupt is requested by an associated I/O device.
【００１９】
With reference to Figure 5, relevant components of conventional IPC 540 are illustrated.  It should be appreciated that IPC 540 is replaced by IPC 240 in a processing unit configured according to the present disclosure.  IPC 540 includes a message decoder 502, a memory mapped I/O (MMIO) unit 504, and a message encoder 506 coupled to memory I/O bus 410.  Processor cores communicate with IPC 540 via MMIO unit 504, using MMIO loads and MMIO stores.  IPC 540 receives messages from ISC 424 via message decoder 502.  IPC 540 generates messages for ISC 424 via message encoder 506.  MMIO unit 504 issues a trigger EOI message 507 to message encoder 506 to cause message encoder 506 to generate and send an EOI message 306 on memory I/O bus 410 to ISC 424.  Message decoder 502 is coupled to selector 522, which is configured to select an FSM (i.e., one of P-FSM 1 through P-FSM M) based on an event target number associated with a received ENM 302.  FSMs of IPC 540 access interrupt context table (ICT) 542 to initiate generation of an exception to a physical processor thread executing on a processor core and to initiate generation of a trigger reject message 505 to message encoder 506, which generates an NRM 304 in response to trigger reject message 505.
【００２０】
It should be appreciated that the physical thread number illustrated in interrupt context table (ICT) 542 is not a field, but is only used to indicate a row.  For example, physical thread number ‘0’ is assigned to row number ‘0’ of ICT 542, physical thread number ‘1’ is assigned to row number ‘1’ of ICT 542, etc.  In ICT 542, each row has an associated ‘valid’ field, an ‘operating priority’ field, an ‘assigned’ field, an ‘event source number’ field, and an ‘event priority’ field, whose values are set by FSMs and may be accessed to return values to a processor core in response to an MMIO load.
【００２１】
It should be appreciated that various blocks of the processes described herein as being executed by an ISC (both conventionally and per embodiments of the present disclosure) may run simultaneously per row of an associated EAT and that various blocks of the processes described herein as being executed by an IPC (both conventionally and per embodiments of the present disclosure) may run simultaneously per row of an associated ICT.  As examples, at least portions of the various processes may be performed by FSM logic associated with a given row of an EAT and/or ICT or an engine may be implemented to perform the various processes while sequencing through all rows of an EAT and/or ICT.
【００２２】
With reference to Figure 6 an exemplary process 600 is illustrated that is implemented by ISC 424 to handle interrupts.  Process 600 may, for example, be initiated in block 602 when ISC 424 receives input via I/O bus 414.  Next, in decision block 604, ISC 424 determines whether the received input corresponds to an interrupt trigger (or interrupt trigger pulse).  In response to the received input not being an interrupt trigger control loops on block 604.  In response to the received input being an interrupt trigger in block 604 control transfers to block 606.  In block 606, ISC 424 builds an ENM 302 based on associated information in EAT 426.  Next, in block 608, ISC 424 sends ENM 302 to IPC 540 via memory I/O bus 410.
【００２３】
Then, in decision block 610, ISC 424 determines whether a reject message (i.e., an NRM 304) has been received from IPC 540.  For example, IPC 540 may generate an NRM 304 in response to a physical processor thread that is designated to be interrupted to service the interrupt having a higher operating priority than an event priority of the interrupt.  In response to ISC 424 receiving an NRM 304 for ENM 302 in block 610 control transfers to block 614, where process 600 waits a configurable time period before returning control to block 606 where another ENM 302 is built for the interrupt.  In response to ISC 424 not receiving an NRM 304 for ENM 302 in block 610 control transfers to decision block 612.  In block 612, ISC 424 determines whether an EOI message 306 has been received from IPC 540.  In response to ISC 424 receiving an EOI message 306 for ENM 302 in block 612 control returns to block 604.  In response to ISC 424 not receiving an EOI message 306 for ENM 302 in block 612 control returns to block 610.
【００２４】
With reference to Figure 7 an exemplary process 700 is illustrated that is implemented by IPC 540 to handle interrupts.  Process 700 maybe initiated in block 702 when IPC 540 receives input via memory I/O bus 410.  Next, in decision block 704, IPC 540 determines whether an ENM 302 was received.  In response to the received input not being an ENM 302 control loops on block 704.  In response to the received input being an ENM 302 in block 704 control transfers to decision block 706.  In block 706, IPC 540 determines whether a valid bit for a row in ICT 542 that is assigned to an event target number (i.e., physical processor thread) specified in ENM 302 is asserted (i.e., whether the specified physical processor thread is populated and operational, as specified by a valid field of the physical processor thread in ICT 542).
【００２５】
In response to the valid bit not being asserted in block 706 control transfers to block 712, where error processing is initiated, and then returns to block 704.  In response to the valid bit being asserted in block 706 control transfers to decision block 708.  In block 708, IPC 540 determines whether a pending interrupt is already assigned to a physical processor thread associated with the event source number (by examining a value of an ‘assigned’ field of the specified physical processor thread in ICT 542).  In response to a pending interrupt not already being assigned to the specified physical processor thread in block 708 control transfers to block 714.  In block 714 IPC 540 asserts the ‘assigned’ field, and sets the ‘event source number’ field, and the ‘event priority’ field for the specified physical processor thread based on values included in ENM 302.  Following block 714 control returns to block 704.
【００２６】
In response to a pending interrupt already being assigned to the physical processor thread in block 708 control transfers to decision block 710.  In block 710 IPC 540 determines whether an event priority of a new interrupt, as specified in the ‘event priority’ field of ENM 302, is greater than an event priority of an already pending interrupt, as specified in the ‘event priority’ field of the physical processor thread in ICT 542.  In response to the event priority of the new interrupt not being greater than the event priority of the pending interrupt control transfers from block 710 to block 716.  In block 716 IPC 540 issues an NRM 304 to the event source number specified in ENM 302 (i.e., the source associated with the new interrupt).
【００２７】
In response to the event priority of the new interrupt being greater than the event priority of the pending interrupt control transfers from block 710 to block 718.  In block 718 IPC 540 issues an NRM 304 to the event source number specified in ICT 542 (i.e., the source associated with the pending interrupt).  Next, in block 720, IPC 540 modifies the event source number and the event priority, as specified in ENM 302, for the physical processor thread in ICT 542.  Following block 720 control returns to block 704.
【００２８】
With reference to Figure 8 an exemplary process 800 is illustrated that is implemented by IPC 540 to assert/deassert exception lines based on associated ‘assigned’ fields being asserted (indicating a pending interrupt) and an event priority for the pending interrupt being greater than (or less than or equal to) an operating priority of a physical processor thread that is to be interrupted to facilitate servicing the interrupt by an associated processor core.  Process 800 may be periodically initiated in block 802 by IPC 540 to determine whether exceptions lines to respective processor cores require assertion or de-assertion.  Next, in decision block 804, IPC 540 determines whether an assigned field for each row in ICT 542 is asserted (i.e., true), which indicates that an interrupt is pending for an associated physical processor thread.
【００２９】
In response to an ‘assigned’ field not being asserted in a row of ICT 542 control transfers from block 804 to block 810.  In block 810 IPC 540 deasserts an exception line associated with a row that was recently unassigned or maintains the exception line in a deasserted state for a row that is unassigned, but not recently unassigned.  Following block 810 control returns to block 804.  In response to an assigned field being asserted in a row of ICT 542 control transfers from block 804 to decision block 806.  In block 806, IPC 540 determines whether an event priority of a pending interrupt is greater than an operating priority of an associated physical processor thread.
【００３０】
In response to the event priority of a pending interrupt not being greater than an operating priority of an associated physical processor thread in block 806 control transfers to block 810, where associated exception lines remain deasserted.  In response to the event priority of a pending interrupt being greater than an operating priority of an associated physical processor thread in block 806 control transfers to block 808, where associated exception lines are asserted.  Following block 808 control returns to block 804.
【００３１】
With reference to Figure 9, an exemplary process 900 that is implemented by a processor core to handle interrupts is illustrated.  It should be appreciated that each processor core maintains an exception enable bit (e.g., in an internal register) for each associated exception line.  Process 900 may be periodically executed by a processor core to determine whether a physical processor thread should be interrupted to facilitate executing, by the processor core, an interrupt handler to service an interrupt.  Process 900 is initiated in block 902 at which point control transfers to decision block 904.  In block 904 the processor core determines whether both an exception line and an exception enable bit are asserted.  A processor core masks interrupts by deasserting the exception enable bit.
【００３２】
In response to the exception line and/or the associated exception enable bit not being asserted control loops on block 904.  In response to both the exception line and the associated exception enable bit being asserted control transfers from block 904 to block 906.  In block 906 the processor core resets the exception enable bit (to prevent subsequent interrupts from interrupting the current interrupt).  Next, in block 908, the processor core changes control flow to an appropriate interrupt handler.  Next, the processor core acknowledges the pending interrupt by issuing a MMIO load to IPC 540.  Then, in block 910, the processor core executes a program that is registered to handle interrupts from the source (specified by a value in the ‘event source number’ field).
【００３３】
Next, in block 914, following completion of the program, the processor core issues a MMIO store to IPC 540 to signal an EOI.  Then, in block 916, the processor core, resets the operating priority in the row in ICT 542 that is associated with the physical processor thread to a pre-interrupt value.  Next, in block 918, the processor core atomically asserts the exception enable bit and returns control flow to a program that was interrupted to service the interrupt.  Following block 918 control returns to block 904.
【００３４】
With reference to Figure 10, an exemplary process 1000 that is implemented by IPC 540 to handle interrupts is illustrated.  Process 1000 may be periodically executed by IPC 540 to determine whether IPC 540 has received a communication (e.g., MMIO load or a MMIO store) from a processor core with respect to a pending interrupt.  Process 1000 is initiated in block 1002 at which point control transfers to decision block 1004.  In block 1004 IPC 540 determines whether a MMIO load has been received at an interrupt acknowledge address.
【００３５】
In response to a MMIO load not being received at the interrupt acknowledge address control loops on block 1004.  In response to a MMIO load being received at the interrupt acknowledge address control transfers to block 1006. In block 1006 IPC 540 atomically sets an operating priority to the pending interrupt priority and resets the assigned field for the interrupt in ICT 542, and returns the pending interrupt source number as response data to the MMIO load.  From block 1006 control returns to block 1004.
【００３６】
With reference to Figure 11, an exemplary process 1100 that is implemented by IPC 540, to handle changes in operating priority for a physical thread, is illustrated.  Process 1100 may be periodically executed by IPC 540 to determine whether IPC 540 has received a communication (e.g., a MMIO load or a MMIO store) from a processor core with respect to a pending interrupt.  Process 1100 is initiated in block 1102 at which point control transfers to decision block 1104.  In block 1104 IPC 540 determines whether a MMIO store has been received at an operating priority address.
【００３７】
In response to a MMIO store not being received at the operating priority address control loops on block 1104.  In response to a MMIO store being received at the operating priority address control transfers from block 1104 to block 1106. In block 1106, IPC 540 sets an operating priority for each row in ICT 542 per data associated with the MMIO store.  Next, in decision block 1108, IPC 540 determines whether the operating priority is less than the pending priority for each row in ICT 542.  In response to the operating priority being less that a pending event priority control transfers from block 1108 to block 1104.  In response to the operating priority not being less than a pending event priority control transfers from block 1108 to block 1109 where the row assigned bit is reset along with the pending priority.  Next, in block 1110, IPC 540 issues a reject message to a notification source associated with the pending interrupt.  From block 1110 control returns to block 1104.
【００３８】
According to an embodiment of the present disclosure, techniques are implemented that may increase the number of threads that are available to be interrupted by a given interrupt and, thus, increase the likelihood of a given interrupt being serviced in a more timely manner.  In various embodiments, the techniques also specify a software stack level (e.g., a user level, an OS level, or a hypervisor level) to interrupt and, when a user level is to be interrupted, a process identifier (ID).
【００３９】
With reference to Figure 12, a structure of an exemplary event notification message (ENM) 1202, that is configured according to the present disclosure, is illustrated.  ENM 1202 includes a ‘process ID’ field, a ‘level’ field, an ‘event target number’ field, a ‘number of bits to ignore’ field, an ‘event source number’ field, and an ‘event priority’ field, as well as a field (not shown) that identifies the message as an event notification message.  A value in the ‘process ID’ field (when user level interrupt is specified) identifies a user process to interrupt (e.g., thirty-two different user processes may be specified).  A value in the ‘level’ field specifies whether the interrupt is a user level interrupt, an OS level interrupt, or a hypervisor level interrupt.  A value in the ‘event target number’ field identifies a virtual processor (VP) thread that is designated to be interrupted to facilitate servicing of an associated interrupt by an associated processor core.  A value in the ‘number of bits to ignore’ field specifies the number of lower-order bits to ignore in the ’event target number’ when determining which VP threads may potentially be interrupted to service the interrupt.  A value in the ‘event source number’ field identifies a notification source that generated the interrupt.  A value in the ‘event priority’ field identifies a priority level of the interrupt. In the depicted embodiment, ENM 1202 includes the ‘process ID’ field and the ‘level’ field. However, in an alternative embodiment, the ‘process ID’ field and the ‘level’ field may be omitted from ENM 1202.
【００４０】
ENM 1202 is generated by an interrupt source controller (ISC) 224 that is configured according to the present disclosure (see Figure 14) and issued to an interrupt presentation controller (IPC) 240 that is configured according to the present disclosure (see Figure 15) to indicate that a notification source, identified by the ‘event source number’ field, has generated the interrupt.  It should be appreciated that ENM 1202 is similar to ENM 302, with some exceptions being that ENM 1202 includes an additional field that specifies a ‘process ID’ for a user level interrupt, an additional field that specifies a ‘level’ (i.e., a user level, an OS level, or a hypervisor level) of an interrupt, an additional field that specifies a ‘number of bits to ignore’ that is used when selecting a virtual processor (VP) thread to interrupt and that the ‘event target number’ field identifies a virtual processor thread, as contrasted with a physical processor thread.
【００４１】
For example, assuming that sixteen VP threads are implemented (i.e., VP threads 0000 through 1111) the number of VP threads that may be considered for interruption may be specified as a single VP thread or all sixteen VP threads depending on a value specified in the ‘number of bits to ignore’ field.  As one example, assuming that VP thread eight, i.e., ‘1000’, is specified in the ‘event target number’ field and that three is specified in the ‘number of bits to ignore’ field, then eight VP threads (i.e., ‘1000’ through ‘1111’) may be considered for interruption to service an associated interrupt.  As another example, assuming that VP thread eight, i.e., ‘1000’, is specified in the ‘event target number’ field and that zero is specified in the ‘number of bits to ignore’ field, then only VP thread eight (i.e., ‘1000’) may be considered for interruption to service an associated interrupt.
【００４２】
With reference to Figure 13, a graph 1300 is illustrated that depicts a relationship between the number of (lower-order) bits to ignore and virtual processor (VP) threads that may potentially service an associated interrupt for a data processing system that deploys up to sixteen VP threads, according to an embodiment of the present disclosure.  It should be appreciated that the disclosed techniques are applicable to data processing systems that deploy more or less than sixteen VP threads.  As is illustrated in graph 1300, when the ‘number of bits to ignore’ is four all sixteen VP threads are potentially available to service an associated interrupt.  When the ‘number of bits to ignore’ is three, eight VP threads are potentially available to service an associated interrupt.  When the ‘number of bits to ignore’ is two, four VP threads are potentially available to service an associated interrupt.  When the ‘number of bits to ignore’ is one, two VP threads are potentially available to service an associated interrupt.  When the ‘number of bits to ignore’ is zero, one VP thread is potentially available to service an associated interrupt.  In general, where the ‘number of bits to ignore’ is ‘n’ bits, a specified virtual processor thread and 2n-1 other virtual processor threads may be potentially interrupted.
【００４３】
With reference to Figure 14, relevant components of ISC 224 of Figure 2, which is configured according to the present disclosure, are further illustrated.  As previously mentioned, interrupt controller 220 includes packet decoder 222, which is coupled to I/O bus 214, and ISC 224.  ISC 224 includes a message decoder 1404 (that is used to decode conventional EOI messages 306 and/or NRMs 304 received via memory I/O bus 210), event assignment table (EAT) 226, and an interrupt message encoder 1406 that utilizes appropriate information in EAT 226 to generate ENMs 1202 for a source.  Packet decoder 222 is configured to decode packets received via I/O bus 214 and select a finite state machine (FSM) to process the received packet based on an event source number for a source of the packet.
【００４４】
As is illustrated, ISC 224 includes an FSM for each row (i.e., S-FSM 0 through S-FSM N) in EAT 226 that is configured to maintain information in EAT 226 to facilitate building ENMs 1202.  It should be appreciated that the event source number illustrated in EAT 226 is not a field, but is only used to indicate a row number.  For example, source number ‘0’ is assigned to row number ‘0’ of EAT 226, source number ‘1’ is assigned to row number ‘1’ of EAT 226, etc.  In EAT 226, each row has an associated ‘event priority’ field, an ‘event target number’ field, a ‘number of bits to ignore’ field, a ‘level’ field, and a ‘process ID’ field, whose values are utilized to populate corresponding fields in an ENM 1202, which is generated by interrupt message encoder 1406 when an interrupt is requested by an associated I/O device. In the depicted embodiment, each row in EAT 226 has the ‘level’ field and the ‘process ID’ field. However, in the alternative embodiment, the ‘level’ field and the ‘process ID’ field may be omitted from EAT 226.
【００４５】
With reference to Figure 15, relevant components of IPC 240 are further illustrated.  IPC 240 includes a message decoder 1502, a memory mapped I/O (MMIO) unit 1504, and a message encoder 1506 coupled to memory I/O bus 210.  Processor cores 200 communicate with IPC 240 via MMIO unit 1504, using MMIO loads and MMIO stores.  IPC 240 receives messages from ISC 224 via message decoder 1502.  IPC 240 generates messages for ISC 224 via message encoder 1506.  MMIO unit 1504 issues a trigger EOI message 1507 to message encoder 1506 to cause message encoder 1506 to generate and send an EOI message 306 on memory I/O bus 210 to ISC 224.  Message decoder 1502 is coupled to selector 1508, which is configured to select an FSM (i.e., one of P-FSM 1 through P-FSM M) for packet processing based on an event target number associated with a received ENM 1202.  FSMs of IPC 240 access interrupt context table (ICT) 242 to initiate generation of an exception to a physical thread executing on a processor core 200 and to generate a trigger reject message 1505 to message encoder 1506, which generates an NRM 304 in response to trigger reject message 1505.
【００４６】
It should be appreciated that the physical processor thread number illustrated in ICT 242 is not a field, but is only used to indicate a row.  For example, physical (processor) thread number ‘0’ is assigned to row number ‘0’ of ICT 242, physical thread number ‘1’ is assigned to row number ‘1’ of ICT 242, etc.  In ICT 242, each row has an associated ‘valid’ field, virtual processor number (‘VP #’) field, ‘process ID’ field (used for user level interrupts), an ‘operating priority’ field, an ‘assigned’ field, a ‘source number’ field, and an ‘event priority’ field, whose values may be retrieved by a processor core using a MMIO load in response to an exception line being asserted by IPC 240.  The ‘valid’ field indicates whether a processor is installed and powered on and whether a VP is dispatched and operating on an associated physical processor thread.  The ‘VP #’ field specifies a number of the VP that is dispatched on the associated physical processor thread.  The ‘process ID’ field specifies a process ID for a user level interrupt.  The ‘operating priority’ field specifies a priority level of a program currently running on the associated physical processor thread. In the depicted embodiment, each row in ICT 242 has the ‘process ID’ field. However, in the alternative embodiment, the ‘process ID’ field may be omitted from ICT 242.
【００４７】
With reference to Figure 16, ICT 242 is further illustrated as including three different ICTs (i.e., a hypervisor stack level ICT 242a, an OS stack level ICT 242b, and a user stack level ICT 242c), each of which has different associated exception lines 212a, 212b, and 212c routed to processor cores 200.  In at least one embodiment, only ICT 242c has a ‘process ID’ field.
【００４８】
With reference to Figure 17, relevant components of selector 1508 of IPC 240 of Figure 15 are further illustrated, according to one embodiment of the present disclosure.  As is depicted, selector 1508 include comparators (CMP 0 through CMP M), i.e., one for each row in ICT 242, that compare an ‘event target number’, a ‘process ID’ for user level interrupts, a ‘level’, and ‘number of bits to ignore’ provided in ENM 1202 and ‘valid’, ‘process ID’ and ‘VP #’ values stored in respective rows of one of ICTs 242a, 242b, or 242c.  Outputs of the comparators are provided to a ‘no hits’ unit 1602 which determines whether any VP threads are available to be interrupted (when the interrupt is a user level interrupt the process IDs are also compared).  In the event zero VP threads are available to be interrupted, ‘no hits’ unit 1602 issues trigger reject message 1505 to message encoder 1506 (see Figure 15).  In the event more than one VP thread is available to be interrupted, ‘secondary selection’ unit 1604 determines which VP thread should be interrupted and issues an appropriate interrupt trigger to trigger an interrupt on an associated physical processor thread. In the alternative embodiment in which the ‘process ID’ field and the ‘level’ field are omitted from ENM 1202, the ‘level’ field and the ‘process ID’ field are omitted from EAT 226 and the ‘process ID’ field is omitted from ICT 242, the comparators (CMP 0 through CMP M) may compare an ‘event target number’ and ‘number of bits to ignore’ provided in ENM 1202 and ‘valid’ and ‘VP #’ values stored in respective rows of ICT 242.
【００４９】
‘Secondary selection’ unit 1604 may implement various secondary selection criteria in determining which available VP thread to select for interruption.  For example, ‘secondary selection’ unit 1604 may select a VP thread to interrupt based on ‘event priority’ relative to ‘operating priority’, least recently used (LRU), and/or random, etc.  It should be appreciated that the various selection criteria may be implemented in series to select a single VP thread when multiple VP threads are still available after a given selection process.
【００５０】
With reference to Figure 18 an exemplary process 1700 is illustrated that is implemented by IPC 240 to handle interrupts.  It should be appreciated that IPC 240 handles event notification messages differently from how IPC 540 handles event notification messages (see Figure 7).  Process 1700 is initiated in block 1701 when IPC 240 receives input via memory I/O bus 210.  Next, in decision block 1702, IPC 540 determines whether an event notification message (ENM) 1202 was received.  It should be appreciated ISC 224 operates similarly to ISC 424 (see Figure 6) and that ENM 1202 is built by ISC 224 in a manner that is similar to the manner described for ISC 424 to build ENM 302, with the exception that ENM 1202 is built to include additional fields (i.e., a ‘process ID’ field, ‘level’ field and ‘number of bits to ignore’ field in the depicted embodiment or merely ‘number of bits to ignore’ field in the alternative embodiment) and the ‘event target number’ field provides a virtual processor thread number, as contrasted with a physical processor thread number.  In response to the received input not corresponding to an ENM 1202 control loops on block 1702.  In response to the received input corresponding to an ENM 1202 in block 1702 control transfers to block 1703.
【００５１】
In block 1703, IPC 240 compares the ‘event target number’ from ENM 1202 with all valid VP numbers, ignoring the number of lower-order bits specified (in the ‘number of bits to ignore’ field) by ENM 1202.  Next, in decision block 1704, IPC 240 determines whether the ‘level’ field indicates that the interrupt is a user level interrupt.  In response to the interrupt being a user level interrupt control transfers from block 1704 to block 1706.  In block 1706 IPC 240 compares the ‘process ID’ of ENM 1202 with ‘process IDs’ of rows in ICT 242c with matching valid VP numbers.  From block 1706 control transfers to decision block 1708.  In response to the interrupt not being a user level interrupt in block 1704 control transfers directly to block 1708. In the alternative embodiment, the decision block 1704 and the block 1706 are omitted from the process 1700 and control transfers to the decision block 1708 directly from the block 1703.
【００５２】
In block 1708 IPC 240 determines whether a hit occurred for at least one VP thread.  In response to no hits (i.e., no VP threads being available to be interrupted due to no VP thread being valid that meets the VP selection criteria (i.e., specified in the ‘event target number’ field and the ‘number of bits to ignore’ field) with the specified process ID in the describing embodiment or without the specified process ID in the alternative embodiment) occurring in block 1708 control transfers to block 1710, where IPC 240 issues a reject message (i.e., NRM 304) to a notification source specified by the ‘event source number’ field in ENM 1202.  It should be appreciated that various techniques may be employed to ensure that an associated interrupt that is rejected is eventually serviced.  Following block 1710 control returns to block 1702.  In response to at least one hit occurring in block 1708 control transfers to decision block 1712, where IPC 240 determines whether there are any hits that do not have a pending interrupt already assigned.
【００５３】
In response to IPC 240 determining that there is at least one hit that does not already have a pending interrupt assigned in block 1712 control transfers to block 1716.  In block 1716, IPC 240 selects a row in ICT 242 to trigger an interrupt.  Next, in block 1718, IPC 240 sets an ‘assigned’ field, a ‘source number’ field, and an ‘event priority’ field of the selected row per ENM 1202.  Following block 1718 control returns to block 1702.  In response to IPC 240 determining that there are no hits that do not already have a pending interrupt assigned in block 1712 control transfers to decision block 1714.  In block 1714, IPC 240 determines whether an interrupt priority (i.e., the event priority) of ENM 1202 is greater than an operating priority of any row with a hit that has a pending interrupt.
【００５４】
In response to the interrupt priority not being greater than an operating priority of any row with a hit that has a pending interrupt control transfers from block 1714 to block 1710.  In response to the interrupt priority being greater than an operating priority of at least one row with a hit that has a pending interrupt control transfers from block 1714 to block 1720.  In block 1720, IPC 240 selects a row in ICT 242 to trigger an interrupt.  Next, in block 1722, IPC 240 issues a reject message to an assigned notification source of the selected row in ICT 242.  Then, in block 1718, IPC 240 sets an ‘assigned’ field, a ‘source number’ field, and an ‘event priority’ field of the selected row in ICT 224 per ENM 1202.  Following block 1718 control returns to block 1702.
【００５５】
With reference to Figure 19 an exemplary process 1800 is illustrated that is implemented by IPC 240 to handle certain MMIO stores received from a processor core.  For example, a processor core 200 may issue a MMIO store to IPC 242 to invalidate all associated VPs.  Process 1800 is initiated in block 1802 when, for example, IPC 240 receives a MMIO store from a given processor core 200.  Next, in decision block 1804, IPC 240 determines whether the MMIO store is directed to deasserting a valid bit in one or more rows in ICT 242.  In response to the received MMIO store not being directed to deasserting a valid bit in one or more rows in ICT 242 control loops on block 1804.  In response to the received MMIO store being directed to deasserting a valid bit in one or more rows in ICT 242 control transfers from block 1804 to decision block 1806.
【００５６】
In decision block 1806, IPC 240 determines whether the assigned bit is asserted in a row, i.e., whether an interrupt is pending for a row whose valid bit is to be deasserted.  In response to the assigned bit being asserted for a row control transfers from block 1806 to block 1808.  In block 1808 IPC 240 issues a reject message to a notification source (specified by a value in an ‘event source number’ field of a row in ICT 242) associated with the row to which the valid bit is to be deasserted.  Next, in block 1810 IPC 240 atomically deasserts values in the ‘assigned’ field and the ‘valid’ field associated with the row (to indicate that an interrupt is no longer pending for the row or rows and that the row or rows do not have a valid VP).  Following block 1810 control returns to block 1804.  In response to the assigned bit not being asserted for a row or rows in block 1806 control transfers to block 1812.  In block 1812 IPC 240 deasserts the valid bit for the row or rows.  Following block 1812 control returns to block 1804.
【００５７】
Accordingly, techniques have been disclosed herein that generally improve the servicing of interrupts and preferably allow an I/O device to specify a level (e.g., a user level, an OS level, a hypervisor level) of an interrupt.  It should be appreciated that aspects of the present disclosure may be implemented in a design structure that is tangibly embodied in a computer-readable storage device for designing, manufacturing, or testing an integrated circuit.
【００５８】
In the flow charts above, the methods depicted in the figures may be embodied in a computer-readable medium as one or more design files.  In some implementations, certain steps of the methods may be combined, performed simultaneously or in a different order, or perhaps omitted, without deviating from the spirit and scope of the invention.  Thus, while the method steps are described and illustrated in a particular sequence, use of a specific sequence of steps is not meant to imply any limitations on the invention. Changes may be made with regards to the sequence of steps without departing from the spirit or scope of the present invention.  Use of a particular sequence is therefore, not to be taken in a limiting sense, and the scope of the present invention is defined only by the appended claims.
【００５９】
As will be appreciated by one skilled in the art, aspects of the present invention may be embodied as a system, method or computer program product.  Accordingly, aspects of the present invention may take the form of an entirely hardware embodiment or an embodiment combining software and hardware aspects that may all generally be referred to herein as a "circuit," "module" or "system."
【００６０】
Any combination of one or more computer-readable medium(s) may be utilized.  The computer-readable medium may be a computer-readable signal medium or a computer-readable storage medium.  A computer-readable storage medium may be, for example, but not limited to, an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system, apparatus, or device, or any suitable combination of the foregoing, but does not include a computer-readable signal medium.  More specific examples (a non-exhaustive list) of the computer-readable storage medium would include the following: a portable computer diskette, a hard disk, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), a portable compact disc read-only memory (CD-ROM), an optical storage device, a magnetic storage device, or any suitable combination of the foregoing.  In the context of this document, a computer-readable storage medium may be any tangible storage medium that can contain, or store a program for use by or in connection with an instruction execution system, apparatus, or device.
【００６１】
While the invention has been described with reference to exemplary embodiments, it will be understood by those skilled in the art that various changes may be made and equivalents may be substituted for elements thereof without departing from the scope of the invention.  In addition, many modifications may be made to adapt a particular system, device or component thereof to the teachings of the invention without departing from the essential scope thereof.  Therefore, it is intended that the invention not be limited to the particular embodiments disclosed for carrying out this invention, but that the invention will include all embodiments falling within the scope of the appended claims.  Moreover, the use of the terms first, second, etc. do not denote any order or importance, but rather the terms first, second, etc. are used to distinguish one element from another.
【００６２】
The terminology used herein is for the purpose of describing particular embodiments only and is not intended to be limiting of the invention.  As used herein, the singular forms "a", "an" and "the" are intended to include the plural forms as well, unless the context clearly indicates otherwise.  It will be further understood that the terms "comprises" and/or "comprising," when used in this specification, specify the presence of stated features, integers, steps, operations, elements, and/or components, but do not preclude the presence or addition of one or more other features, integers, steps, operations, elements, components, and/or groups thereof.
【００６３】
The corresponding structures, materials, acts, and equivalents of all means or step plus function elements in the claims below, if any, are intended to include any structure, material, or act for performing the function in combination with other claimed elements as specifically claimed.  The description of the present invention has been presented for purposes of illustration and description, but is not intended to be exhaustive or limited to the invention in the form disclosed.  Many modifications and variations will be apparent to those of ordinary skill in the art without departing from the scope and spirit of the invention.  The embodiments were chosen and described in order to best explain the principles of the invention and the practical application, and to enable others of ordinary skill in the art to understand the invention for various embodiments with various modifications as are suited to the particular use ontemplated.
【Claim 1】
A method of handling interrupts in a data processing system, the method comprising:
receiving, at an interrupt presentation controller (IPC), an event notification message (ENM), wherein the ENM specifies an event target number, and a number of bits to ignore; and
determining, by the IPC, a group of virtual processor threads that may be potentially interrupted based on the event target number and the number of bits to ignore specified in the ENM, wherein the event target number identifies a specific virtual processor thread and the number of bits to ignore identifies the number of lower-order bits to ignore with respect to the specific virtual processor thread when determining a group of virtual processor threads that may be potentially interrupted.
【Claim 2】
The method of claim 1, wherein the ENM further specifies a level, the group of the virtual processor threads being determined by using further a process identifier (ID) when the level specified in the ENM corresponds to a user level.
【Claim 3】
The method of claim 1, wherein the ENM further specifies an event source number and an event priority.
【Claim 4】
The method of claim 2, wherein the process ID is not used when the level corresponds to an operating system (OS) level.
【Claim 5】
The method of claim 4, wherein the process ID is not used when the level corresponds to a hypervisor level.
【Claim 6】
The method of claim 3, wherein the number of bits to ignore is zero bits and only the specific virtual processor thread may be potentially interrupted.
【Claim 7】
The method of claim 3, wherein the number of bits to ignore is one bit and the specific virtual processor thread and one other virtual processor thread may be potentially interrupted.
【Claim 8】
The method according to any one of claims 1 to 5, wherein the number of bits to ignore is ‘n’ bits and the specific virtual processor thread and (2n-1) other virtual processor threads may be potentially interrupted.
【Claim 9】
The method according to any one of claims 1 to 5, wherein the number of bits to ignore is not equal to zero and the method further comprises:
determining whether one or more virtual processor threads within the group of virtual processor threads are dispatched and operating on an associated physical processor; and
in response to no virtual processor thread within the group of virtual processor threads being dispatched and operating on an associated physical processor, issuing a reject message to a notification source designated by an event source number specified in the ENM.
【Claim 10】
The method according to any one of claims 1 to 5, wherein the number of bits to ignore is not equal to zero and the method further comprises:
determining whether multiple virtual processor threads within the group of virtual processor threads are dispatched and operating on an associated physical processor; and
in response to the multiple virtual processor threads within the group of virtual processor threads being dispatched and operating on an associated physical processor, selecting one of the multiple virtual processor threads to interrupt that does not already have a pending interrupt.
【Claim 11】
The method of claim 10, further comprising:
in response to more than one of the multiple virtual processor threads not already having a pending interrupt, selecting one of the multiple virtual processor threads to interrupt that does not already have a pending interrupt based on secondary selection criteria.
【Claim 12】
The method of claim 11, wherein the secondary selection criteria includes one or more of an event priority, specified in the ENM, relative to an operating priority for each of the multiple virtual processor threads, a least recently used (LRU) one of the multiple virtual processor threads, and a random one of the multiple virtual processor threads.
【Claim 13】
The method according to any one of claims 1 to 5, wherein the number of bits to ignore is not equal to zero and the method further comprises:
determining whether multiple virtual processor threads within the group of virtual processor threads are dispatched and operating on an associated physical processor;
in response to the multiple virtual processor threads within the group of virtual processor threads being dispatched and operating on an associated physical processor, determining whether all of the multiple virtual processor threads have pending interrupts;
in response to determining that all of the multiple virtual processor threads have pending interrupts, determining whether an event priority specified in the ENM is greater than an operating priority of any of the multiple virtual processor threads; and
in response to determining that the event priority is not greater than the operating priority of any of the multiple virtual processor threads, issuing a reject message to a notification source designated by an event source number specified in the ENM.
【Claim 14】
The method of claim 13, further comprising:
in response to determining that the event priority is greater than the operating priority of any of the multiple virtual processor threads, selecting one of the multiple virtual processor threads to interrupt that has an operating priority less than the event priority.
【Claim 15】
The method of claim 13, further comprising:
in response to determining that the event priority is greater than the operating priority of more than one of the multiple virtual processor threads, selecting one of the multiple virtual processor threads to interrupt that has an operating priority less than the event priority based on secondary selection criteria.
【Claim 16】
The method of claim 15, wherein the secondary selection criteria includes one or more of the event priority relative to an operating priority for the multiple virtual processor threads, a least recently used (LRU) one of the multiple virtual processor threads, and a random one of the multiple virtual processor threads.
【Claim 17】
A processing unit for a multithreaded data processing system, the processing unit comprising:
an interrupt source controller (ISC); and
an interrupt presentation controller (IPC) coupled to the ISC, wherein the IPC is configured to:
receive an event notification message (ENM) from the ISC, wherein the ENM specifies an event target number, and a number of bits to ignore; and
determine a group of virtual processor threads that may be potentially interrupted based on the event target number and the number of bits to ignore specified in the ENM, wherein the event target number identifies a specific virtual processor thread and the number of bits to ignore identifies the number of lower-order bits to ignore with respect to the specific virtual processor thread when determining a group of virtual processor threads that may be potentially interrupted.
【Claim 18】
The processing unit of claim 17, wherein the ENM further specifies a level, the group of the virtual processor threads being determined by using further a process identifier (ID) when the level specified in the ENM corresponds to a user level.
【Claim 19】
The processing unit of claim 17, wherein the ENM further specifies an event source number and an event priority.
【Claim 20】
The processing unit according to any one of claims 17 to 19, wherein the number of bits to ignore is not equal to zero and the IPC is further configured to:
determine whether one or more virtual processor threads within the group of virtual processor threads are dispatched and operating on an associated physical processor; and
in response to no virtual processor thread within the group of virtual processor threads being dispatched and operating on an associated physical processor, issue a reject message to a notification source designated by an event source number specified in the ENM.
【Claim 21】
The processing unit according to any one of claims 17 to 19, wherein the number of bits to ignore is not equal to zero and the IPC is further configured to:
determine whether multiple virtual processor threads within the group of virtual processor threads are dispatched and operating on an associated physical processor; and
in response to the multiple virtual processor threads within the group of virtual processor threads being dispatched and operating on an associated physical processor, select one of the multiple virtual processor threads to interrupt that does not already have a pending interrupt.
【Claim 22】
The processing unit of claim 21, wherein the IPC is further configured to:
in response to more than one of the multiple virtual processor threads not already having a pending interrupt, select one of the multiple virtual processor threads to interrupt that does not already have a pending interrupt based on secondary selection criteria.
【Claim 23】
The processing unit of claim 22, wherein the secondary selection criteria includes one or more of an event priority, specified in the ENM, relative to an operating priority for each of the multiple virtual processor threads, a least recently used (LRU) one of the multiple virtual processor threads, and a random one of the multiple virtual processor threads.
【Claim 24】
The processing unit according to any one of claims 17 to 19, wherein the number of bits to ignore is not equal to zero and the IPC is further configured to:
determine whether multiple virtual processor threads within the group of virtual processor threads are dispatched and operating on an associated physical processor;
in response to the multiple virtual processor threads within the group of virtual processor threads being dispatched and operating on an associated physical processor, determine whether all of the multiple virtual processor threads have pending interrupts;
in response to determining that all of the multiple virtual processor threads have pending interrupts, determining whether an event priority specified in the ENM is greater than an operating priority of any of the multiple virtual processor threads; and
in response to determining that the event priority is not greater than the operating priority of any of the multiple virtual processor threads, issue a reject message to a notification source designated by an event source number specified in the ENM.
【Claim 25】
The processing unit of claim 24, wherein the IPC is further configured to:
in response to determining that the event priority is greater than the operating priority of any of the multiple virtual processor threads, selecting one of the multiple virtual processor threads to interrupt that has an operating priority less than the event priority.
【Claim 26】
A design structure tangibly embodied in a computer-readable storage device for designing, manufacturing, or testing an integrated circuit, the design structure comprising:
an interrupt source controller (ISC); and
an interrupt presentation controller (IPC) coupled to the ISC, wherein the IPC is configured to:
receive an event notification message (ENM) from the ISC, wherein the ENM specifies an event target number, and a number of bits to ignore; and
determine a group of virtual processor threads that may be potentially interrupted based on the event target number and the number of bits to ignore specified in the ENM, wherein the event target number identifies a specific virtual processor thread and the number of bits to ignore identifies the number of lower-order bits to ignore with respect to the specific virtual processor thread when determining a group of virtual processor threads that may be potentially interrupted.
【Claim 27】
The design structure of claim 26, wherein the ENM further specifies a level, the group of the virtual processor threads being determined by using further a process identifier (ID) when the level specified in the ENM corresponds to a user level.
【Claim 28】
The design structure of claim 26, wherein the ENM further specifies an event source number and an event priority.
【Abstract】
【Object】
To provide techniques for handling interrupts in a processing unit of a data processing system using virtual processor thread groups.
【Means For Addressing Object】
A technique for handling interrupts in a data processing system includes receiving, at an interrupt presentation controller (IPC), an event notification message (ENM).  The ENM specifies an event target number, and a number of bits to ignore.  The IPC determines a group of virtual processor threads that may be potentially interrupted based on the event target number and the number of bits to ignore specified in the ENM.  The event target number identifies a specific virtual processor thread and the number of bits to ignore identifies the number of lower-order bits to ignore with respect to the specific virtual processor thread when determining a group of virtual processor threads that may be potentially interrupted.
【Selected Drawing】     Figure 17
【Figure 1】
2017091544.tif 000024
【Figure 2】
2017091544.tif 000025
【Figure 3】
2017091544.tif 000026
【Figure 4】
2017091544.tif 000027
【Figure 5】
2017091544.tif 000028
【Figure 6】
2017091544.tif 000029
【Figure 7】
2017091544.tif 000030
【Figure 8】
2017091544.tif 000031
【Figure 9】
2017091544.tif 000032
【Figure 10】
2017091544.tif 000033
【Figure 11】
2017091544.tif 000034
【Figure 12】
2017091544.tif 000035
【Figure 13】
2017091544.tif 000036
【Figure 14】
2017091544.tif 000037
【Figure 15】
2017091544.tif 000038
【Figure 16】
2017091544.tif 000039
【Figure 17】
2017091544.tif 000040
【Figure 18】
2017091544.tif 000041
【Figure 19】
2017091544.tif 000042