(57)【特許請求の範囲】
【請求項１】
コンピューティングデバイスの割込ハンドラに、
前記コンピューティングデバイス上で実行されるオペレーティングシステムまたは仮想マシーンモニタに対して、入出力デバイスによって生じた入出力エラー封じ込めイベントを通知する手順と、
前記オペレーティングシステムまたは前記仮想マシーンモニタからの、前記オペレーティングシステムまたは前記仮想マシーンモニタが前記入出力デバイスに関連付けられたソフトウエアスタックをクリアしたとの通知を含む、指示に応答し、前記入出力デバイスに対するリンクのリカバリを促進する手順とを、実行させる、プログラム。
【請求項２】
コンピューティングデバイスの割込ハンドラに、
前記コンピューティングデバイス上で実行されるオペレーティングシステムまたは仮想マシーンモニタに対して入出力エラー封じ込めイベントを通知する手順と、
前記オペレーティングシステムまたは前記仮想マシーンモニタが入出力デバイスに対するリンクをリカバリすることができるという指示を、前記オペレーティングシステムまたは前記仮想マシーンモニタから受信する手順と、
前記オペレーティングシステムまたは前記仮想マシーンモニタからの前記指示に応答し、前記入出力エラー封じ込めイベントを生じた入出力デバイスに対するリンクのリカバリを促進する手順とを、実行させる、プログラム。
【請求項３】
前記割込ハンドラに、プラットホーム通信チャンネルを用いて前記オペレーティングシステムまたは前記仮想マシーンモニタに対して前記入出力エラー封じ込めイベントを通知する手順を、さらに実行させる、請求項１または２に記載のプログラム。
【請求項４】
前記割込ハンドラに、前記入出力エラー封じ込めイベントを生じた前記入出力デバイスに関連したポートを識別し、前記オペレーティングシステムまたは前記仮想マシーンモニタに対して識別した前記ポートを通知する手順を、さらに実行させる、請求項１から３のいずれか一項に記載のプログラム。
【請求項５】
前記割込ハンドラに、前記入出力エラー封じ込めイベントに関連したエラー封じ込め記録を生成する手順を、さらに実行させる、請求項１から４のいずれか一項に記載のプログラム。
【請求項６】
前記割込ハンドラに、前記入出力エラー封じ込めイベントを生じた前記入出力デバイスに関連したエラーログをクリアする手順を、さらに実行させる、請求項１から５のいずれか一項に記載のプログラム。
【請求項７】
前記割込ハンドラに、複数の入出力ポートに対応する複数の入出力エラー封じ込めイベントハンドラを登録するべく前記オペレーティングシステムまたは前記仮想マシーンモニタによって利用可能である複数の入出力ポートに関連する情報を前記オペレーティングシステムまたは前記仮想マシーンモニタにアクセス可能なメモリ内に格納する手順を、さらに実行させる、請求項１から６のいずれか一項に記載のプログラム。
【請求項８】
コンピューティングデバイスのオペレーティングシステムまたは仮想マシーンモニタに、
前記コンピューティングデバイスの割込ハンドラからエラー封じ込めイベントの通知を受信する手順と、
前記エラー封じ込めイベントを生じた入出力デバイスに関連付けられたドライバに対して前記エラー封じ込めイベントを通知する手順と、
前記ドライバが前記入出力デバイスをリカバリすることができるという通知を前記入出力デバイスに関連付けられた前記ドライバから受信する手順と、
前記通知に応答して、前記エラー封じ込めイベントを生じた入出力デバイスに対するリンクのリカバリを促進する手順と、を実行させる、プログラム。
【請求項９】
前記オペレーティングシステムまたは前記仮想マシーンモニタに、
前記割込ハンドラによって生成される複数の入出力ポートに関連する情報に基づいて、前記複数の入出力ポートに関連した複数のエラー封じ込めイベントハンドラを登録する手順を、さらに実行させる、請求項８に記載のプログラム。
【請求項１０】
前記オペレーティングシステムまたは前記仮想マシーンモニタに、
プラットホーム通信チャンネルドアベルプロトコルを介して前記割込ハンドラから前記エラー封じ込めイベントの前記通知を受信する手順を、さらに実行させる、請求項８または９に記載のプログラム。
【請求項１１】
前記オペレーティングシステムまたは前記仮想マシーンモニタに、
入出力エラーを生じた前記入出力デバイスに対する前記リンクをリカバリするための指示を、前記割込ハンドラに伝える手順を、さらに実行させる、請求項８から１０のいずれか一項に記載のプログラム。
【請求項１２】
入出力エラー封じ込めイベントをシグナリングした入出力ポートを、コンピューティングシステムの割込ハンドラによって識別する段階と、
前記入出力ポートの識別を含み、かつ前記入出力エラー封じ込めイベントに関連したエラー封じ込め記録を、前記割込ハンドラによって生成する段階と、
コンピューティングデバイス上で実行するオペレーティングシステムまたは仮想マシーンモニタに対して、前記エラー封じ込め記録を、前記割込ハンドラによって提供する段階と、
前記オペレーティングシステムまたは前記仮想マシーンモニタによって、前記入出力エラー封じ込めイベントを生じた入出力デバイスに関連付けられたドライバに対して前記入出力エラー封じ込めイベントを通知する段階と、
前記オペレーティングシステムまたは前記仮想マシーンモニタによって、前記ドライバが前記入出力デバイスをリカバリすることができるという通知を、前記入出力デバイスに関連付けられた前記ドライバから受信する段階と、を備える、方法。
【請求項１３】
前記オペレーティングシステムまたは前記仮想マシーンモニタからの指示に応答して、前記割込ハンドラによって、前記入出力エラー封じ込めイベントを生じた入出力デバイスへの前記入出力ポートからのリンクのリカバリを促進する段階を、さらに備える、請求項１２に記載の方法。
【請求項１４】
プラットホーム通信チャンネルを用いて、前記割込ハンドラによって、前記入出力エラー封じ込めイベントを前記オペレーティングシステムまたは前記仮想マシーンモニタに通知する段階を、さらに備える、請求項１２または１３に記載の方法。
【請求項１５】
前記割込ハンドラによって、前記入出力エラー封じ込めイベントを生じた入出力デバイスに関連したエラーログをクリアする段階を、さらに備える、請求項１２から１４のいずれか一項に記載の方法。
【請求項１６】
前記割込ハンドラによって、複数の入出力ポートに対応する複数の入出力エラー封じ込めイベントハンドラを登録するべく、前記オペレーティングシステムまたは前記仮想マシーンモニタによって利用可能である前記複数の入出力ポートに関連する情報を、前記オペレーティングシステムまたは前記仮想マシーンモニタにアクセス可能なメモリ内に格納する段階を、さらに備える、請求項１２から１５のいずれか一項に記載の方法。
【請求項１７】
前記オペレーティングシステムまたは前記仮想マシーンモニタによって、入出力エラー封じ込めイベントを処理するための複数の入出力エラー封じ込めイベントハンドラを登録する段階を、さらに備える、請求項１２から１６のいずれか一項に記載の方法。
【請求項１８】
請求項１２から１７のいずれか一項の方法を前記コンピューティングデバイスに実行させる、プログラム。
【請求項１９】
請求項１から１１、および１８のいずれか一項に記載のプログラムを格納するコンピュータ可読記録媒体。
【請求項２０】
請求項１２から１７のいずれか一項の方法を実行する、装置。
【請求項２１】
コンピューティングデバイス上で実行するオペレーティングシステムまたは仮想マシーンモニタによって、前記コンピューティングデバイスのプラットホームエンティティから、入出力デバイスによって生じたエラー封じ込めイベントの通知を受信する段階と、
前記エラー封じ込めイベントの前記通知を受信したことに応じて、前記オペレーティングシステムまたは前記仮想マシーンモニタによって、前記入出力デバイスに関連付けられたソフトウエアスタックをクリアする段階と、
前記ソフトウエアスタックのクリアが完了したことに応じて、前記オペレーティングシステムまたは前記仮想マシーンモニタによって、入出力デバイスに対するリンクをリカバリするように、前記プラットホームエンティティに指示する段階と、を備える、方法。
【請求項２２】
コンピューティングデバイス上で実行するオペレーティングシステムまたは仮想マシーンモニタによって、前記コンピューティングデバイスのプラットホームエンティティから、エラー封じ込めイベントの通知を受信する段階と、
前記オペレーティングシステムまたは前記仮想マシーンモニタによって、前記エラー封じ込めイベントを生じた入出力デバイスに関連付けられたドライバに対して前記エラー封じ込めイベントを通知する段階と、
前記オペレーティングシステムまたは前記仮想マシーンモニタによって、前記ドライバが前記入出力デバイスをリカバリすることができるという通知を、前記入出力デバイスに関連付けられた前記ドライバから受信する段階と、
前記通知に応答して、前記オペレーティングシステムまたは前記仮想マシーンモニタによって、前記エラー封じ込めイベントを生じた入出力デバイスに対するリンクをリカバリするように、前記プラットホームエンティティに指示する段階と、を備える、方法。
【請求項２３】
前記オペレーティングシステムまたは前記仮想マシーンモニタによって、前記プラットホームエンティティによって生成される複数の入出力ポートに関連する情報に基づいて、前記複数の入出力ポートに関連した複数のエラー封じ込めイベントハンドラを登録する段階を、さらに備える、請求項２１または２２に記載の方法。
【請求項２４】
前記オペレーティングシステムまたは前記仮想マシーンモニタによって、プラットホーム通信チャンネルを介して、前記プラットホームエンティティから前記エラー封じ込めイベントの前記通知を受信する段階を、さらに備える、請求項２１から２３いずれか一項に記載の方法。
【請求項２５】
前記オペレーティングシステムまたは前記仮想マシーンモニタによって、入出力エラーを生じた前記入出力デバイスに対する前記リンクをリカバリするための指示を、前記プラットホームエンティティに伝える段階を、さらに備える、請求項２１から２４のいずれか一項に記載の方法。
【請求項２６】
１または複数のプロセッサと、
割込ハンドラと、
オペレーティングシステムまたは仮想マシーンモニタを備え、
前記割込ハンドラは、
入出力エラー封じ込めイベントに応じて、前記入出力エラー封じ込めイベントをシグナリングしたルートポートを識別し、
前記ルートポートの識別を含み、かつ前記入出力エラー封じ込めイベントに関連付けられたエラー封じ込め記録を生成し、
前記オペレーティングシステムまたは前記仮想マシーンモニタに対して、前記エラー封じ込め記録を提供し、
前記オペレーティングシステムまたは前記仮想マシーンモニタは、前記割込ハンドラから、前記エラー封じ込め記録を受信し、前記ルートポートに関連付けられたソフトウエアスタックをクリアし、前記ルートポートに関連付けられた入出力デバイスに対するリンクのリカバリを促進する、システム。
【請求項２７】
１または複数のプロセッサと、
割込ハンドラと、
オペレーティングシステムまたは仮想マシーンモニタを備え、
前記割込ハンドラは、
入出力エラー封じ込めイベントに応じて、前記入出力エラー封じ込めイベントをシグナリングしたルートポートを識別し、
前記ルートポートの識別を含み、かつ前記入出力エラー封じ込めイベントに関連付けられたエラー封じ込め記録を生成し、
前記オペレーティングシステムまたは前記仮想マシーンモニタに対して、前記エラー封じ込め記録を提供し、
前記オペレーティングシステムまたは前記仮想マシーンモニタが前記入出力エラー封じ込めイベントを生じた入出力デバイスに対するリンクをリカバリすることができるという指示を、前記オペレーティングシステムまたは前記仮想マシーンモニタから受信し、
前記オペレーティングシステムまたは前記仮想マシーンモニタは、前記割込ハンドラから、前記エラー封じ込め記録を受信し、前記入出力エラー封じ込めイベントを生じた前記入出力デバイスに対するリンクのリカバリを促進する、システム。
【請求項２８】
前記割込ハンドラは、複数の入出力ポートに対応する複数の入出力エラー封じ込めイベントハンドラを登録するべく、前記オペレーティングシステムまたは前記仮想マシーンモニタによって利用可能である前記複数の入出力ポートに関連する情報を、前記オペレーティングシステムまたは前記仮想マシーンモニタにアクセス可能なメモリ内に、さらに格納する、請求項２６または２７に記載のシステム。
【請求項２９】
前記オペレーティングシステムまたは前記仮想マシーンモニタは、さらに、複数の入出力エラー封じ込めイベントを処理するべく複数の入出力エラー封じ込めイベントハンドラを登録する、請求項２６から２８のいずれか一項に記載のシステム。
【請求項３０】
前記割込ハンドラと前記オペレーティングシステムまたは前記仮想マシーンモニタとが通信するプラットホーム通信チャンネルを、さらに備える、請求項２６から２９のいずれか一項に記載のシステム。
【請求項３１】
前記入出力エラー封じ込めイベントをトリガするライブエラーリカバリ論理を、さらに備える、請求項２６から３０のいずれか一項に記載のシステム。
【請求項３２】
タッチスクリーンディスプレイをさらに備える、請求項２６から３１のいずれか一項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、概ね、データ処理の技術分野、より詳しくは、入出力エラー封じ込めイベント後のリカバリに関する。
【背景技術】
【０００２】
本明細書中に提供される背景技術の説明は、概ね、開示の背景を提示することを目的とする。本発明者らの仕事は、この背景技術の欄に記述される範囲内で、さもなければ出願時の従来技術として見なされ得ない説明の態様とともに、本開示に対する従来技術として、明示または黙示を問わず認められるものではない。本明細書において別段の指定がない限り、この欄で説明されるアプローチは、本開示の特許請求の範囲に対する従来技術ではなく、この欄に含めることにより従来技術として認められるものではない。
【０００３】
カリフォルニア州サンタクララのインテル（登録商標）株式会社によって開発されたライブエラーリカバリ（「ＬＥＲ」）技術を用いて構成されるハードウェアまたはファームウェア等のエラー封じ込め論理は、周辺構成要素相互接続（「ＰＣＩｅ」）等の様々な技術を用いて、操作可能に接続された入出力（「Ｉ／Ｏ」）デバイスで生ずるエラーを封じ込めるべく、用いられてもよい。ＬＥＲは、ポート上のエラーが封じ込まれた後に、Ｉ／Ｏデバイス／ポートのリカバリを可能にする。しかし、依然としてシステム障害が、例えばオペレーティングシステム（「ＯＳ」）または仮想マシーンモニタ（ＶＭＭ）に存在する場合がある。なぜなら、エラー封じ込め論理とＯＳ／ＶＭＭとの間の調整が不十分かまったく無いことがあるからである。
【図面の簡単な説明】
【０００４】
実施形態は、添付した図面と併せて以下の詳細な説明によって、容易に理解されよう。この説明を容易にするべく、同様の参照符号は同様の構成要素を示す。実施形態は、例として示され、添付した図面の図における限定として示されるものではない。
【図１】様々な実施形態に従って、本開示の教示の適用部分を用いて構成されるコンピューティングデバイスの一例を模式的に示す。
【図２】様々な実施形態に従って、様々な構成要素間における処理の流れの一例を模式的に示す。
【図３】様々な実施形態に従って、割込ハンドラ等のプラットホームエンティティによって実装され得る方法の一例を模式的に示す。
【図４】様々な実施形態に従って、オペレーティングシステムまたは仮想マシーンモニタによって実装され得る方法の一例を模式的に示す。
【図５】様々な実施形態に従って、開示された方法およびコンピュータ可読媒体が実装され得るコンピューティングデバイスの一例を模式的に示す。
【発明を実施するための形態】
【０００５】
以下の詳細な説明では、その一部を構成する添付図面を参照する。ここで、同様の符号は全体にわたって同様の要素を示しており、実施され得る実施形態を例証するために示される。理解されるべきことは、本開示の範囲から逸脱することなく、他の実施形態を利用することが可能であり、かつ構造的または論理的な変更が可能なことである。したがって、以下の詳細な説明は、限定的な意味で解釈されるべきではなく、本発明の範囲は、添付された特許請求の範囲およびその均等物によって定義される。
【０００６】
様々なオペレーションは、クレームされた主題を理解する上で最も役立つように、多数の別々の動作またはオペレーションとして、順に説明されてもよい。しかし、説明の順序は、これらのオペレーションが必ず順序に依存することを意味するように解釈されるべきではない。具体的には、これらのオペレーションは、提示の順序で実行されなくてもよい。説明されるオペレーションは、説明される実施形態とは異なる順序で実行されてもよい。様々な追加のオペレーションを実行してもよく、および／または説明されるオペレーションを追加の実施形態で省略してもよい。
【０００７】
本開示の目的のために、表現「Ａおよび／またはＢ」は、（Ａ）、（Ｂ）、または（ＡおよびＢ）を意味する。本開示の目的のために、表現「Ａ，Ｂ，および／またはＣ」は、（Ａ）、（Ｂ）、（Ｃ）、（ＡおよびＢ）、（ＡおよびＣ）、または（Ａ、Ｂ、およびＣ）を意味する。
【０００８】
本説明は、表現「一実施形態において」または「実施形態において」を使用する場合があり、これらは１または複数の同一または異なる実施形態に言及する。用語「備える」、「含む」、「有する」等は、本開示の実施形態に関して使用されるように、同意語である。
【０００９】
本明細書で使用されるように、用語「モジュール」は、１または複数のソフトウェアもしくはファームウェアプログラム、組み合わせ論理回路、および／または説明される機能を提供する他の適当な構成要素を実行する、特定用途向け集積回路（「ＡＳＩＣ」）、電子回路、プロセッサ（共有、専用、もしくはグループ）、および／または（メモリ）（共有、専用、もしくはグループ）の一部であること、あるいは、含むこと、に言及してもよい。
【００１０】
図１は、本発明の開示の教示の適用部分により構成されるコンピューティングデバイス１００に実装され得る様々な構成要素を模式的に示す。図１の１−Ｎと称される複数の入出力（「Ｉ／Ｏ」）デバイス１０２は、複数のＩ／Ｏポート１０３に接続可能である。複数のＩ／Ｏデバイス１０２として、様々なタイプのＩ／Ｏデバイスが挙げられる。それらには、限定されるものではないが、キーボード、マウス、タッチセンサー式スクリーン、ディスプレイ、スピーカ、プリンタ、ファックス、記憶デバイス（例えば、ハードディスクドライブ、ソリッドステートドライブ）、スキャナ、アンテナ等の有線および無線通信インタフェース等が含まれる。様々な実施形態において、Ｉ／Ｏポート１０３は、周辺構成要素相互接続（「ＰＣＩｅ」）ルートポート等、様々な種類のポートであってもよい。
【００１１】
各々のＩ／Ｏポート１０３は、エラー封じ込め論理１０４（図１において「Ｅ−Ｃ論理」と示す）を有してもよい。エラー封じ込め論理１０４は、ハードウェア、ソフトウェア（例えば、ファームウェアの命令）、または任意の２つの組み合わせであってもよく、それはエラーの波及を防ぐべく、Ｉ／Ｏポート１０３および／またはＩ／Ｏデバイス１０２上のエラーを検出し、かつ含むように構成される。様々な実施形態において、エラー封じ込め論理１０４は、カリフォルニア州サンタクララのインテル（登録商標）株式会社によって開発された技術であるライブエラーリカバリ（「ＬＥＲ」）を含んでもよい。様々な実施形態において、エラーが検出された場合、エラーを体験しているＩ／Ｏポート１０３のエラー封じ込めステータスビット（例えば、ＬＥＲイベントステータスビット）は、エラー封じ込めモードがトリガされていることを示すように設定されてもよい。様々な実施形態において、エラー封じ込めイベントと同時に、Ｉ／Ｏポート１０３は、Ｉ／Ｏデバイス１０２へのリンクを、アウトバウンド要求が取り消され得るリンクダウン状態にさせる。様々な実施形態において、インバウンドパケットは、リンクダウン状態に、正常に排出されることが許される。様々な実施形態において、エラー封じ込めイベントのクリアと同時に、Ｉ／Ｏポート１０３のエラー封じ込めステータスビットをクリアしてもよい。リンクは、リンクアップ状態に入ることが許されてもよく、この状態でトランザクションが正常に伝播されることが許される。
【００１２】
コンピューティングデバイス１００は、様々な下位の機能を制御する様々な「プラットホームエンティティ」を有してもよい。プラットホームエンティティは、ハードウェア、ソフトウェア（例えば、マイクロコントローラファームウェア）、またはそれら２つの任意の組み合わせを実装してもよい。いくつかの実施形態について、限定されるものではないが、それらがベースボード管理コントローラ（「ＢＭＣ」）１０６および／または割込ハンドラ１０８を有してもよい。様々な実施形態において、ＢＭＣ１０６およびその等価物は、センサーおよび他の類似の技術を用いてコンピューティングデバイス１００の物理的状態を監視する特化したサービスプロセッサであってもよい。
【００１３】
割込ハンドラ１０８は、ハードウェアおよび／またはソフトウェアの割込みに応答して、実行するように構成されてもよい。割込ハンドラ１０８は、その実行をトリガする割込みの性質に応じて、様々なルーチンを行うことが可能である。例えば、ユーザ（不図示）がキーボード（不図示）上のキーを押すかタッチセンサー式スクリーン（不図示）と対話する場合、対応するキーボードまたはタッチセンサー式スクリーンコントローラからハードウェア割込みが割込ハンドラ１０８へ送信されてもよく、そして次に、この割込ハンドラが、１または複数の構成要素（例えば、ワードプロセッシングアプリケーション）に対して入力のエントリの指示を与えることが可能である。
【００１４】
コンピューティングデバイス１００は、メモリ１１０も有してもよい。メモリ１１０は、様々なタイプのメモリ、例えばダイナミックランダムアクセスメモリ（「ＤＲＡＭ」）であってもよい。様々な実施形態において、メモリ１１０は、オペレーティングシステム（「ＯＳ」）および／または様々な仮想マシーンモニタ（「ＶＭＭ」）１１２を実行するための命令を含んでもよい。メモリ１１０は、複数のＩ／Ｏデバイス１０２に対してソフトウェアインタフェースを提供し得る複数のドライバ１１４（図１に１−Ｎと称される）を実行するための命令を、さらに含んでもよい。図１において不図示ではあるが、メモリ１１０はまた、任意の数の他のコンピュータプログラム（例えば、ワードプロセッサ、メディアプレイヤ、ウェブサービス等のアプリケーション）を実行するための命令を含んでもよい。
【００１５】
従来技術で言及したように、エラー封じ込め論理１０４と、コンピューティングデバイス１００の上位構成要素（例えば、ＯＳ／ＶＭＭ１１２）とは、Ｉ／Ｏエラーにより、エラー封じ込めロジック２２１０４がエラー封じ込めイベントをシグナリングする場合、連係しないことがある。このことは、Ｉ／Ｏエラーが封じ込めされているにもかかわらず、コンピューティングデバイス１００の障害を結果的にもたらす場合がある。したがって、本明細書中に述べられる様々な技術を実装して、Ｉ／Ｏエラー封じ込めイベントの発生後のＯＳ／ＶＭＭレベルでのコンピューティングデバイス１００の障害を防ぐことが可能である。このことによって、ミッションクリティカルな環境での信頼性、有用性、およびサービス性（「ＲＡＳ」）を高めることが可能である。
【００１６】
様々な実施形態において、エラー封じ込め論理１０４は、割込ハンドラ１０８等のプラットホームエンティティにＩ／Ｏエラー封じ込めイベントを通知してもよい。そして次に、プラットホームエンティティは、ＯＳ／ＶＭＭ１１２にＩ／Ｏエラー封じ込めイベントを通知してもよい。例えば、様々な実施形態において、割込ハンドラ１０８は、プラットホームエンティティとＯＳ／ＶＭＭ１１２との間の通信チャンネル、例えばプラットホーム通信チャンネル（「ＰＣＣ」）１１６を用いて、Ｉ／Ｏエラー封じ込めイベントをＯＳ／ＶＭＭ１１２に通知してもよい。ＰＣＣ１１６は、コンピューティングデバイス１００の高位エンティティ、例えばＯＳ／ＶＭＭ１１２と通信するべく、ＢＭＣ１０６、エラー封じ込め論理１０４、および／または割込ハンドラ１０８等のプラットホームエンティティによって利用可能なメカニズムであってもよい。様々な実施形態において、ＰＣＣ１１６は、１または複数の独立した通信チャンネルとして実装され得るアドレス空間または部分空間を画定してもよい。様々な実施形態において、ＰＣＣ１１６は、２０１１年１２月６日に発表されたAdvanced Configuration and Power Interface Specification（改訂５．０版）（「ＡＣＰＩ仕様」）に適合可能である。様々な実施形態において、割込ハンドラ１０８等のプラットホームエンティティは、割込ハンドラ１０８を経由することなく、例えばＰＣＣ１１６越しに、エラー封じ込めイベントを直接、ＯＳ／ＶＭＭ１１２に通知してもよい。
【００１７】
様々な実施形態において、様々な構成要素は、Ｉ／Ｏエラー封じ込めイベントを生じたＩ／Ｏデバイス１０２に対するリンクのリカバリを促進してもよい。例えば、ＯＳ／ＶＭＭ１１２は、Ｉ／Ｏポート１０３および／またはＩ／Ｏデバイス１０２に関連付けられたソフトウェアスタックをクリアして、このスタックがクリアされているという指示を（例えば、ＰＣＣを用いて）、割込ハンドラ１０８等のプラットホームエンティティに伝えてもよい。その結果として、割込ハンドラ１０８は、リンクをリカバリするべく、様々なハードウェアレジスタのコンテンツに変更を加えてもよい。例えば、割込ハンドラ１０８は、エラーレジスタをクリア（あるいはエラー封じ込め論理１０４またはＩ／Ｏポート１０３に関連付けられた他の論理を生じさせてクリア）してもよく、また、Ｉ／Ｏエラー封じ込めイベントに応答して設定されたＩ／Ｏポート１０３のエラー封じ込めイベントステータスビットをクリアしてもよい。様々な実施形態において、ひとたびこれらのレジスタがクリアされると、Ｉ／Ｏポートは、Ｉ／Ｏデバイス１０２に対するリンクをリンクアップ状態に遷移させてもよい。
【００１８】
コンピューティングデバイス１００の様々な構成要素間の処理の流れの一例を図２に示す。左側がＰＣＩｅルートポートであり、これは図１のエラー封じ込め論理１０４および／またはＩ／Ｏポート１０３に対応してもよい。中央がプラットホームエンティティであり、これは、様々な実施形態において、１または複数の割込ハンドラ１０８およびＢＭＣ１０６であってもよい。右側がＯＳまたはＶＭＭであり、例えば図１のＯＳ／ＶＭＭ１１２である。
【００１９】
様々な時点において、例えばコンピューティングデバイス１００が起動している時、様々な構成要素は、ルーチンの初期化（破線で示す）を実行することで、ＯＳ／ＶＭＭレベルの障害を避けながらＩ／Ｏデバイス１０２および／またはＩ／Ｏポート１０３に対するリンクをリカバリするように、コンピューティングデバイス１００を整える。例として、ブロック２０２では、複数のＩ／Ｏポート１０３に関連する情報は、例えば割込ハンドラ１０８等のプラットホームエンティティによって、ＯＳ／ＶＭＭ１１２にアクセス可能なメモリに格納されてもよい。いくつかの実施形態では、この情報は、ＡＣＰＩ仕様に適合するフォーマットで格納されてもよい。様々な実施形態において、この情報は、Ｉ／Ｏポート情報（例えば、それに接続しているデバイスの種類等）、対処し得るエラーの種類、およびその他を含んでもよい。ブロック２０４では、この情報は、複数のエラー封じ込めイベントハンドラを登録するべく、ＯＳ／ＶＭＭ１１２によって使用されてもよい。様々な実施形態において、複数のエラー封じ込めイベントハンドラは、複数のＩ／Ｏポート１０３に対応してもよい。
【００２０】
Ｉ／Ｏエラーが発生すると同時に、ブロック２０６では、例えば、特定のＩ／Ｏポート１０３でエラー封じ込め論理１０４によって、Ｉ／Ｏエラーを検出することが可能である。ブロック２０８では、例えば、エラー封じ込め論理１０４によって、検出されたエラーが封じ込められているかどうかについて、決定が行われてもよい。例えば、様々な実施形態において、ＬＥＲハードウェア／ソフトウェアは、Ｉ／Ｏエラーが封じ込まれていることをシグナリングしてもよい。エラーが封じ込められている場合、エラー封じ込め論理１０４はＩ／Ｏエラー封じ込めイベントをシグナリングしてもよく、プロセスはブロック２１０に進んでもよい。
【００２１】
ブロック２１０で、割込ハンドラ１０８等のプラットホームエンティティは、Ｉ／Ｏエラーを体験したＩ／Ｏポート１０３を識別してもよい。例えば、エラー封じ込め論理１０４は、エラー封じ込めイベントとそれが生ずるＩ／Ｏポート１０３を割込ハンドラ１０８に通知してもよい。ブロック２１２では、エラー封じ込め記録は、例えば、割込ハンドラ１０８等のプラットホームエンティティによって、生成されてもよい。エラー封じ込め記録は、様々な情報を含んでもよく、それには、限定されるものではないが、エラーを体験した識別Ｉ／Ｏポート１０３、エラーに関する情報、およびその他が含まれる。次に、エラー封じ込め記録は、ＯＳ／ＶＭＭ１１２に伝えられてもよい。様々な実施形態において、割込ハンドラ１０８は、Ｉ／ＯまたはメモリマップドＩ／Ｏを介してアクセス可能であるハードウェアレジスタを用い得るＰＣＣドアベルプロトコルを利用して、ＯＳ／ＶＭＭ１１２へエラー封じ込め記録を伝えてもよい。ブロック２１４では、適当なエラー封じ込めイベントハンドラ（ブロック２０４で生成されてもよい）はドライバレベルリカバリを実装してもよい。例として、エラー封じ込めイベントハンドラは、ドライバ１１４（エラー封じ込めイベントを生じたＩ／Ｏポート１０３および／またはデバイス１０２に対応）にエラー封じ込めイベントを通知する。それによって、ドライバ１１４は、エラーを体験したＩ／Ｏデバイス１０２をリカバリさせることができるかどうかを示すことが可能である。
【００２２】
Ｉ／Ｏデバイス１０２をリカバリできることをドライバが示すような場合には、ブロック２１６で、ＯＳ／ＶＭＭ１１２は、例えば、ＰＣＣ１１６を介して割込ハンドラ１０８等のプラットホームエンティティに対して、エラー封じ込めイベントを生じたＩ／Ｏデバイス１０２に対するリンクをリカバリする用意および／または指示を伝えてもよい。様々な実施形態において、ＯＳ／ＶＭＭ１１２は、この用意／指示をプラットホームエンティティに伝えるべく、ＰＣＣドアベルプロトコルを利用してもよい。ブロック２１８では、適当なコマンド（例えば、エラーレジスタをクリア）は、Ｉ／Ｏポート１０３に上記リンクを再開させるべく、例えば、割込ハンドラ１０８等のプラットホームエンティティによって、発せられてもよい。
【００２３】
割込ハンドラ１０８等のプラットホームエンティティによって実装され得る方法３００の一例を図３に示す。ブロック３０２では、複数のＩ／Ｏポート１０３に対応する複数のエラー封じ込めイベントハンドラを登録するべくＯＳ／ＶＭＭ１１２によって使用可能であり得る、複数のＩ／Ｏポート１０３および／またはＩ／Ｏデバイス１０２に関連する情報は、ＯＳ／ＶＭＭ１１２にアクセス可能なメモリに、例えば割込ハンドラ１０８によって、格納（または「発行」）されてもよい。
【００２４】
Ｉ／Ｏエラーが発生すると同時に、ブロック３０４では、対応するＩ／Ｏエラー封じ込めイベントをシグナリングしたエラー封じ込め論理１０４を有するＩ／Ｏポート１０３が、例えば割込ハンドラ１０８等のプラットホームエンティティによって、識別されてもよい。図３では不図示であるが、様々な実施形態において、プラットホームエンティティは、エラーを体験しているＩ／Ｏポート１０３上のすべてのアクティブ（まは「インフライト」）トランザクションがさらに進行する前に完了（または「ドレイン」）されるまで、待ってもよい。
【００２５】
すべてのインフライトトランザクションが完了した後、ブロック３０６では、割込ハンドラ１０８等のプラットホームエンティティは、エラー封じ込めイベントに関連したエラー封じ込め記録を生成してもよい。様々な実施形態において、エラー封じ込め記録は、例えば、エラー封じ込めイベントがトリガされたＩ／Ｏポート１０３の識別等、様々な情報を含んでもよい。ブロック３０８では、エラー封じ込め記録は、割込ハンドラ１０８等のプラットホームエンティティによって、ＯＳ／ＶＭＭ１１２に伝えられてもよい。上述のように、この伝達は、例えばＰＣＣドアベルプロトコルを用いて、ＰＣＣ１１６上で行われてもよい。
【００２６】
ブロック３１０では、割込ハンドラ１０８等のプラットホームエンティティは、例えばＰＣＣ１１６上でＯＳ／ＶＭＭ１１２から、ＯＳＳ／ＶＭＭ１１２が故障Ｉ／Ｏデバイス１０２に対するリンクをリカバリさせる用意ができているという指示を、受信することが可能である。様々な実施形態において、次に、ブロック３１２では、割込ハンドラ１０８等のプラットホームエンティティは、Ｉ／Ｏエラー封じ込めイベントを体験したＩ／Ｏポート１０３に関連したエラーログをクリアすることが可能である。様々な実施形態において、ブロック３１４では、割込ハンドラ１０８等のプラットホームエンティティは、Ｉ／Ｏエラー封じ込めイベントを体験したＩ／Ｏポート１０３のリカバリを促進することが可能である。例として、割込ハンドラ１０８は、Ｉ／Ｏポート１０３にリンクを再開させる適当なコマンドを発してもよい。
【００２７】
図４は、様々な実施形態に従って、ＯＳ／ＶＭＭ１１２等の様々な構成要素によって実装され得る方法４００の一例を示す。ブロック４０２では、複数のＩ／Ｏポート１０３に関連したエラー封じ込めイベントハンドラは、図３の３０２で、例えば割込ハンドラ１０８によって格納されるＩ／Ｏポート１０３に関連する情報に基づいて、例えばＯＳ／ＶＭＭ１１２によって、登録されてもよい。エラー封じ込めイベントハンドラは、起動時等、様々な時点で生成されてもよい。
【００２８】
ブロック４０４では、エラー封じ込めイベントの通知は、割込ハンドラ１０８等のプラットホームエンティティから、例えばＯＳ／ＶＭＭ１１２によって、受信されてもよい。様々な実施形態において、この通知は、例えばＰＣＣドアベルプロトコルを用いて、ＰＣＣ１１６上で受信されてもよい。ブロック４０６では、エラー封じ込めイベントを生じたＩ／Ｏデバイス１０２に関連付けられたドライバ１１４は、例えばＯＳ／ＶＭＭ１１２によって識別されてエラー封じ込めイベントを通知されてもよい。ブロック４０８では、ＯＳ／ＶＭＭ１１２は、例えば、Ｉ／Ｏデバイス１０２に関連したドライバ１１４から、このドライバがＩ／Ｏデバイス１０２をリカバリさせることが可能であるという通知を、受信してもよい、
【００２９】
ドライバ１１４がＩ／Ｏデバイス１０２をリカバリさせることが可能であるということを、ひとたびＯＳ／ＶＭＭ１１２が通知されると、ブロック４１０で、ＯＳ／ＶＭＭ１１２は、例えばＰＣＣ１１６上で、割込ハンドラ１０８等のプラットホームエンティティに、エラーを体験したＩ／Ｏデバイス１０２に対するリンクをリカバリするよう、指示してもよい。エラー封じ込めイベントを体験した故障Ｉ／Ｏデバイス１０２に対するリンクがリカバリする場合、ブロック４１２で、ＯＳ／ＶＭＭ１１２は、それがエラーの前に行ったように、Ｉ／Ｏデバイス１０２を再構成して処理してもよい。
【００３０】
図５は、様々な実施形態に従って、コンピューティングデバイス５００の一例を示す。コンピューティングデバイス５００は、いくつかの構成要素、プロセッサ５０４、および少なくとも１つの通信チップ５０６を有してもよい。様々な実施形態において、プロセッサ５０４はプロセッサコアであってもよい。様々な実施形態において、少なくとも１つの通信チップ５０６もまた、プロセッサ５０４に対して、物理的かつ電気的に結合されてもよい。さらなる実装において、通信チップ５０６は、プロセッサ５０４の一部であってもよい。様々な実施形態において、コンピューティングデバイス５００は、印刷回路基板（「ＰＣＢ」）５０２を有してもよい。これらの実施形態について、プロセッサ５０４および通信チップ５０６は、その上に配置されてもよい。他の実施形態では、ＰＣＢ５０２を使用することなく、様々な構成要素を連結してもよい。
【００３１】
その用途に応じて、コンピューティングデバイス５００は、ＰＣＢ５０２に物理的かつ電気的に結合してよくまたは結合しなくてもよい他の構成要素、例えば本明細書で議論した１または複数のプラットホームエンティティを、有してもよい。これらの他の構成要素として、限定されるものではないが、ＢＭＣ５０７（本開示の教示の適用部分により構成）、揮発性メモリ（例えば、ダイナミックランダムアクセスメモリ５０８、「ＤＲＡＭ」ともいう）、不揮発性メモリ（例えば、読み出し専用メモリ５１０、「ＲＯＭ」ともいう）、フラッシュメモリ５１２、１または複数のエラー封じ込め論理５１３（本開示の教示の適用部分により構成）、グラフィックスプロセッサ５１４、割込ハンドラ５１５（本開示の教示の適用部分により構成）、デジタルシグナルプロセッサ（不図示）、暗号プロセッサ（不図示）、入出力（「Ｉ／Ｏ」）コントローラ５１６、アンテナ５１８、ディスプレイ（不図示）、タッチスクリーンディスプレイ５２０、タッチスクリーンコントローラ５２２、バッテリ５２４、音声コーディック（不図示）、映像コーディック（不図示）、全地球測位システム（「ＧＰＳ」）デバイス５２８、コンパス５３０、加速度計（不図示）、ジャイロスコープ（不図示）、スピーカ５３２、カメラ５３４、および大容量ストレージデバイス（例えば、ハードディスクドライブ、ソリッドステートドライブ、コンパクトディスク（「ＣＤ」）、デジタル多用途ディスク（「ＤＶＤ」）（不図示）、およびその他が挙げられる。様々な実施形態において、プロセッサ５０４は、他の構成要素、例えばＢＭＣ５０７および／または割込ハンドラ５１５とともに、同一のダイ上で一体化されて、システムオンチップ（「ＳｏＣ」）を構成してもよい。
【００３２】
様々な実施形態において、揮発性メモリ（例えば、ＤＲＡＭ５０８）、不揮発性メモリ（例えば、ＲＯＭ５１０）、フラッシュメモリ５１２、および大容量ストレージデバイスは、プロセッサ５０４による実行に応答して、方法３００および／または４００のすべてまたは選択された態様をコンピューティングデバイス５００に実行させるように構成されたプログラミング命令を有してもよい。例えば、揮発性メモリ（例えば、ＤＲＡＭ５０８）、不揮発性メモリ（例えば、ＲＯＭ５１０）、フラッシュメモリ５１２、および大容量ストレージデバイス等の１または複数のメモリ構成要素は、開示された技術、例えば方法３００および／または方法４００のすべてまたは選択された態様を、コンピューティングデバイス５００に実行させるように構成された命令の一時的および／または持続的コピーを有してもよい。
【００３３】
通信チップ５０６は、コンピューティングデバイス５００におけるデータの送受信のための有線および／または無線通信を可能にし得る。用語「無線」およびその派生物は、非固体媒体を介した変調電磁波の使用により、データ通信可能である、回路、デバイス、システム、方法、技術、通信チャンネル等を説明するために用いられ得る。用語は、いくつかの実施形態ではそうではないかもしれないが、関連付けられたデバイスに有線がいっさい含まれていないことを意味するものではない。通信チップ５０６は、いくつかの無線通信規格またはプロトコルのいずれかを実装することが可能である。それらのものとして、限定されるものではないが、Ｗｉ−Ｆｉ（ＩＥＥＥ  ８０２．１１ファミリー）、ＷｉＭＡＸ（ＩＥＥＥ  ８０２．１６ファミリー）、ＩＥＥＥ  ８０２．２０、ロングタームエボリューション（「ＬＴＥ」）、Ｅｖ−ＤＯ、ＨＳＰＡ＋、ＨＳＤＰＡ＋、ＨＳＵＰＡ＋、ＥＤＧＥ、ＧＳＭ（登録商標）、ＧＰＲＳ、ＣＤＭＡ、ＴＤＭＡ、ＤＥＣＴ、ブルートゥース、それらの派生物、ならびに３Ｇ（４Ｇ）、５Ｇ、およびそのさらに先が挙げられる。コンピューティングデバイス５００は、複数の通信チップ５０６を有してもよい。例として、第１の通信チップ５０６は、Ｗｉ−Ｆｉおよびブルートゥース等の短距離無線通信専用であってもよく、さらに、第２の通信チップ５０６は、例えば、ＧＰＳ、ＥＤＧＥ、ＧＰＲＳ、ＣＤＭＡ、ＷｉＭＡＸ、ＬＴＥ、Ｅｖ−ＤＯ、およびその他の長距離無線通信専用であってもよい。
【００３４】
様々な実装において、コンピューティングデバイス５００は、ラップトップ、ネットブック、ノートブック、ウルトラブック、スマートフォン、コンピューティングタブレット、パーソナルデジタルアシスタント（「ＰＤＡ」）、ウルトラモバイルＰＣ、携帯電話、デスクトップコンピュータ、サーバ、プリンタ、スキャナ、モニタ、セットトップボックス、エンタテイメントコントロールユニット（例えば、ゲーム機）、デジタルカメラ、携帯音楽プレイヤ、またはデジタルビデオレコーダであってもよい。さらなる実装において、コンピューティングデバイス５００は、データを処理する任意の他の電子デバイスであってもよい。
【００３５】
様々な実施形態において、プロセッサ５０４（またはそのプロセッサコアの１つ）は、１または複数のプラットホームエンティティとともにパッケージ化されてもよい。一実施形態について、プロセッサ５０４（またはそのプロセッサコアの１つ）は、１または複数のプラットホームエンティティとともにパッケージ化されて、システムインパッケージ（ＳｉＰ）を構成してもよい。一実施形態について、プロセッサ５０４（またはそのプロセッサコアの１つ）は、１または複数のプラットホームエンティティとともにパッケージ化されてもよく、そして、同一のダイ上で一体化されてもよい。一実施形態について、プロセッサ５０４（またはそのプロセッサコアの１つ）は、１または複数のプラットホームエンティティとともにパッケージ化されて、ＳｏＣを構成してもよい。
【００３６】
コンピューティングデバイス等のプラットホームエンティティ（例えば割込ハンドラ）が、コンピューティングデバイス上で実行されるオペレーティングシステムまたは仮想マシーンモニタに入出力エラー封じ込めイベントを通知し、オペレーティングシステムまたは仮想マシーンモニタからの指示に応答し、入出力エラー封じ込めイベントを生じた入出力デバイスに対するリンクのリカバリを促進することが可能になることについて、装置、コンピュータ実装方法、システム、デバイス、およびコンピュータ可読媒体の実施形態を本明細書中で説明する。様々な実施形態において、割込ハンドラは、さらに、プラットホーム通信チャンネルを用いて、例えばドアベルプロトコルを用いて、オペレーティングシステムまたは仮想マシーンモニタに対して入出力エラー封じ込めイベントを通知することが可能である。
【００３７】
様々な実施形態において、割込ハンドラは、入出力エラー封じ込めイベントを生じた入出力デバイスに関連付けられたポートを識別し、オペレーティングシステムまたは仮想マシーンモニタに対して識別したポートを通知することが可能である。様々な実施形態において、割込ハンドラは、エラー封じ込めイベントに関連したエラー封じ込め記録を生成することが可能である。様々な実施形態において、割込ハンドラは、入出力エラー封じ込めイベントを生じた入出力デバイスに関連したエラーログをクリアすることが可能である。
【００３８】
様々な実施形態において、割込ハンドラは、複数の入出力ポートに対応する複数のエラー封じ込めイベントハンドラを登録するべくオペレーティングシステムまたは仮想マシーンモニタによって利用可能である複数の入出力ポートに関連する情報を、オペレーティングシステムまたは仮想マシーンモニタにアクセス可能なメモリ内に格納することが可能である。
【００３９】
同様に、装置、コンピュータ実装方法、システム、デバイス、およびコンピュータ可読媒体の実施形態は、コンピューティングデバイスのオペレーティングシステムまたは仮想マシーンモニタが、コンピューティングデバイスの割込ハンドラからエラー封じ込めイベントの通知を受信し、この通知に応答して、エラー封じ込めイベントを生じた入出力デバイスに対するリンクのリカバリを促進することが可能になることについても、本明細書中で説明される。様々な実施形態において、オペレーティングシステムまたは仮想マシーンモニタは、エラー封じ込めイベントを生じた入出力デバイスに関連したドライバに対してエラー封じ込めイベントを通知することが可能である。
【００４０】
様々な実施形態において、オペレーティングシステムまたは仮想マシーンモニタは、入出力デバイスに関連付けられたドライバから、ドライバが入出力デバイスをリカバリすることができるという通知を、受信することが可能である。様々な実施形態において、オペレーティングシステムまたは仮想マシーンモニタは、割込ハンドラによって生成された複数の入出力ポートに関連する情報に基づいて、複数の入出力ポートに関連した複数のエラー封じ込めイベントハンドラを登録することが可能である。様々な実施形態において、オペレーティングシステムまたは仮想マシーンモニタは、プラットホーム通信チャンネルを介して、例えばドアベルプロトコルを用いて、割込ハンドラからエラー封じ込めイベントの通知を受信することが可能である。様々な実施形態において、オペレーティングシステムまたは仮想マシーンモニタは、割込ハンドラに対して、例えばプラットホーム通信チャンネルを介して、入出力エラーを生じた入出力デバイスに対するリンクをリカバリする指示を伝えることが可能である。
【００４１】
説明を目的として本明細書中に特定の実施形態が例示されたが、この出願は本明細書中で議論した実施形態のいかなる適応または変形も包含することを意図している。したがって、明白に意図されていることは、本明細書中に説明される実施形態が特許請求の範囲によってのみ限定されることである。
【００４２】
本開示が「１つの」または「第１の」要素またはその等価物を詳述する場合には、そのような開示は１または複数のそのような要素が含まれるが、２またはそれ以上のそのような要素を必要とすることや排除することのどちらでもない。さらに、識別された要素のための序数の指標（例えば、第１、第２、または第３）は、要素間を区別するために用いられるものであって、そのような要素の必要または限定数を示したり、または意味したりするものではなく、また別段の定めがない限り、それらは、そのような要素の特定の位置または順序を示すものではない。
【図１】
0006032510.tif 000002
【図２】
0006032510.tif 000003
【図３】
0006032510.tif 000004
【図４】
0006032510.tif 000005
【図５】
0006032510.tif 000006