(57)【特許請求の範囲】
【請求項１】
複数のＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）カードと、
前記ＰＣＩｅカードを制御するファームウェアと、
前記複数のＰＣＩｅカードのレジスタを読み書きすることが可能な命令を持つプロセッサと、
前記複数のＰＣＩｅカードのレジスタを前記プロセッサの命令を実行して読み書きし、前記複数のＰＣＩｅカードのそれぞれについて、異常の発生を検知するＰＣＩｅコントローラと、
前記それぞれのＰＣＩｅカードについて、前記異常の情報を個別に読み書き可能に格納するデータ領域と
を具備し、
前記プロセッサは、前記データ領域が読み書き可能に格納する前記情報に基づいて、前記異常が発生したＰＣＩｅカードに対するレジスタの読み書きを行うプロセッサ上の命令をスキップして前記ファームウェアの実行を継続する
情報処理装置。
【請求項２】
請求項１に記載の情報処理装置において、
前記ファームウェアを格納するメモリ
をさらに具備し、
前記メモリは、
前記ＰＣＩｅコントローラによる前記検知の結果を前記データ領域の前記情報に反映する例外ハンドラと、
前記データ領域を参照し、前記それぞれのＰＣＩｅカードに対する命令が正常終了したかどうかを判断し、前記判断の結果を前記ファームウェアに返すドライバと
をさらに格納する
情報処理装置。
【請求項３】
請求項２に記載の情報処理装置において、
前記ファームウェアは、ＭＭＩＯ（Ｍｅｍｏｒｙ  Ｍａｐｐｅｄ  Ｉｎ／Ｏｕｔ）空間に割り当てられた、前記それぞれのＰＣＩｅカードのレジスタの読み出しを、前記ドライバを介して指示し、前記読み出しが成功すれば前記制御を継続し、前記読み出しが失敗すれば所定の障害処理を行う
情報処理装置。
【請求項４】
請求項２または３に記載の情報処理装置において、
前記例外ハンドラは、前記異常の種別を判断し、前記異常が前記複数のＰＣＩｅカードのいずれかに関連するものである場合に前記データ領域に対する前記反映を行い、かつ、前記異常が前記いずれかのＭＭＩＯ空間に割り当てられた、前記ＰＣＩｅカードのレジスタの読み出しに関連するプロセッサの命令である場合に前記命令のメモリ上の格納アドレスに所定の値を加算して前記プロセッサのプログラムカウンタに設定することで前記プロセッサの前記スキップを設定する
情報処理装置。
【請求項５】
請求項１〜４のいずれか一項に記載の情報処理装置において、
前記ＰＣＩｅコントローラは、前記それぞれのＰＣＩｅカードについて、故障による無応答が発生した場合に、前記異常の検知を行う
情報処理装置。
【請求項６】
請求項１〜５のいずれか一項に記載の情報処理装置において、
前記ＰＣＩｅコントローラは、前記それぞれのＰＣＩｅカードについて、コンプリータアボートが発生した場合に、前記異常の検知を行う
情報処理装置。
【請求項７】
請求項１〜６のいずれか一項に記載の情報処理装置において、
前記ＰＣＩｅコントローラは、前記それぞれのＰＣＩｅカードについて、不正なトランザクション層パケットが受信された場合に、前記異常の検知を行う
情報処理装置。
【請求項８】
請求項１〜７のいずれか一項に記載の情報処理装置が実行する情報処理方法であって、
プロセッサがファームウェアを実行することで複数のＰＣＩｅカードを制御するステップと、
前記複数のＰＣＩｅカードのそれぞれについて、異常の発生をＰＣＩｅコントローラで検知するステップと、
前記それぞれのＰＣＩｅカードについて、前記異常の情報をデータ領域で個別に読み書き可能に格納するステップと
を具備し、
前記制御するステップは、
前記複数のＰＣＩｅカードのレジスタを読み書きすることが可能なプロセッサの命令を実行するステップと、
前記データ領域に読み書き可能に格納された前記情報に基づいて、前記異常が発生したＰＣＩｅカードに対するレジスタの読み書きを行うプロセッサ上の命令をスキップして、前記ファームウェアの実行を継続するステップ
を具備する
情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置と、この情報処理装置を用いる情報処理方法とに係り、特に、ＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）カードを用いる情報処理装置と、この情報処理装置を用いる情報処理方法とに係る。
【背景技術】
【０００２】
今日の社会には、その基板の一部として、情報処理装置が広く普及している。一般的な情報処理装置は、入出力回路部を介して演算回路部に接続することで、様々な機器の制御を可能にしている。このような接続を行うための規格として、ＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）が知られている。
【０００３】
ＰＣＩｅの規格を用いる情報処理装置の構成および動作の例について、概略的に説明する。このような情報処理装置では、所定のプログラムを実行するコアが、ＰＣＩｅコントローラやＰＣＩｅスイッチを介して、複数のＰＣＩｅカードを制御するのが一般的である。
【０００４】
ここで、複数のＰＣＩｅカードの一部に障害が発生すると、他のＰＣＩｅカードが正常に動作していたとしても、情報処理装置全体のシステムをリセットする羽目に陥る場合がある。
【０００５】
上記に関連して、特許文献１には、例外処理システムに係る記載が開示されている。この例外処理システムは、ＣＰＵと、コプロセッサとが接続され、ＣＰＵ内では一連の命令が同期的に処理され、コプロセッサ側ではＣＰＵから依頼された処理を非同期的に行うシステムで用いられる。コプロセッサ内には、コプロセッサ命令キューと、コプロセッサ演算器とが具備されている。この例外処理システムは、コプロセッサ演算器内で例外が発生した場合に、その例外をコプロセッサ命令キュー内に設けた例外フラグ用レジスタに書き込むことによって例外処理を行うように構成したことを特徴としている。
【０００６】
また、特許文献２には、入出力ファブリック内のキューをクリアする方法に係る記載が開示されている。この方法は、キューがデッドロックされていることを検出するステップと、キューへのアクセスを使用禁止にするステップと、キュー内のエントリーをクリアするステップと、キューへのアクセスを再び使用可能にするステップとを含む。
【０００７】
また、特許文献３には、ハイパバイザを有する計算機システムに係る記載が開示されている。この計算機システムは、少なくとも１つの仮想計算機を管理するハイパバイザと、Ｉ／Ｏコントローラユニットとを備える。複合Ｉ／Ｏコントローラは、複数のＩ／Ｏコントローラと、各Ｉ／Ｏコントローラが共有可能な複数のＩ／Ｏポートとを有する。複数のＩ／Ｏコントローラのうちの少なくとも１つのＩ／Ｏコントローラが、いずれかの仮想計算機に割り当てられている。各Ｉ／Ｏポートに、いずれかのＩ／Ｏデバイスと、いずれかのＩ／Ｏコントローラが接続されている。ハイパバイザは、以下の（ａ）乃至（ｃ）の処理を行う。（ａ）仮想計算機から発行されたＩ／Ｏ命令を捕捉する。（ｂ）Ｉ／Ｏ命令に従うＩ／Ｏのターゲットが、Ｉ／Ｏ命令の発行元の仮想計算機に割り当てられていないＩ／Ｏコントローラに接続されたＩ／Ｏポートに係るデバイスである非割当ポート関連デバイスであるか否かを判断する。（ｃ）（ｂ）の判断の結果が肯定的であれば、非割当ポート関連デバイスに対するＩ／Ｏを行わず、仮想的な実行結果をＩ／Ｏ命令の発行元の仮想計算機に返す。
【０００８】
また、特許文献４には、計算機に係る記載が開示されている。この計算機は、メモリと、ＣＰＵと、ルートポートとを有する。ここで、このメモリは、ＢＩＯＳを記憶する。このＣＰＵは、ＢＩＯＳを実行する。このルートポートは、プライマリバスを介してＣＰＵに接続され、セカンダリバスを介してＰＣＩエクスプレス・ルートに接続され、ＰＣＩエクスプレス・ブリッジとして機能する。この計算機は、以下のことを特徴とする。すなわち、ルートポートは、ＰＣＩエクスプレス・ルート上の障害を検出してＣＰＵにＳＭＩ（システム・メンテナンス・インタラプト）を発行する。また、ＣＰＵは、ＳＭＩを受け付け、ＢＩＯＳを実行することによって、ルートポートを介して障害の発生したＰＣＩエクスプレス・ルートにＰＣＩエクスプレス・リセットを発行する。
【０００９】
また、特許文献５には、ＣＰＵ再リセットを伴うＣＰＵ再初期化時におけるタイムアウトを防止するためのタイムアウト防止装置に係る記載が開示されている。このタイムアウト防止装置は、コンテキスト保存手段と、ＩＯトランザクション停止手段と、ＣＰＵリセット手段と、コンテキスト復帰手段と、ＩＯトランザクション開始手段とを備える。ここで、このコンテキスト保存手段は、ＣＰＵの再リセットが必要となった際に、ＣＰＵのレジスタ状態を保存する。このＩＯトランザクション停止手段は、ＩＯトランザクションの停止を行う。このＣＰＵリセット手段は、ＣＰＵのリセット処理を行う。このコンテキスト復帰手段は、コンテキスト保存手段が保存したＣＰＵのレジスタ状態に基づいてコンテキストリストアを行う。このＩＯトランザクション開始手段は、ＩＯトランザクション停止手段が停止させたＩＯトランザクションを再開させる。このタイムアウト防止装置は、レジスタ状態の保存をした後に第１のＩＯトランザクションの停止を行い、ＣＰＵリセット処理を行った後に第１のＩＯトランザクションの開始を行い、第１のＩＯトランザクションの開始をした後に第２のＩＯトランザクションの停止を行い、コンテキストリストアを行った後に第２のＩＯトランザクションの開始を行うことを特徴としている。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開平４−１０６６５２号公報
【特許文献２】特開２００８−００９９８０号公報
【特許文献３】特開２０１０−２１８４７８号公報
【特許文献４】特開２０１０−２３１３４０号公報
【特許文献５】特開２０１１−０８１５４４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
本発明の目的は、一部のＰＣＩｅカードに障害が発生しても、その他のＰＣＩｅカードが正常な動作を継続できる情報処理装置と、この情報処理装置を用いた情報処理方法とを提供することである。
【課題を解決するための手段】
【００１２】
本発明による情報処理装置は、複数のＰＣＩｅカードと、プロセッサと、ＰＣＩｅコントローラと、データ領域とを具備する。ここで、プロセッサは、複数のＰＣＩｅカードを制御するためのファームウェアを実行する。ＰＣＩｅコントローラは、複数のＰＣＩｅカードのそれぞれについて、異常の発生を検知する。データ領域は、それぞれのＰＣＩｅカードについて、異常の情報を個別に管理する。プロセッサは、データ領域が管理する情報に基づいて、異常が発生したＰＣＩｅカードに対する命令をスキップすることで、ファームウェアの実行を継続する。
【００１３】
本発明による情報処理方法は、プロセッサがファームウェアを実行することで複数のＰＣＩｅカードを制御するステップと、複数のＰＣＩｅカードのそれぞれについて、異常の発生をＰＣＩｅコントローラで検知するステップと、それぞれのＰＣＩｅカードについて、異常の情報をデータ領域で個別に管理するステップとを具備する。制御するステップは、データ領域で管理された情報に基づいて、異常が発生したＰＣＩｅカードに対する命令をスキップして、ファームウェアの実行を継続するステップを具備する。
【発明の効果】
【００１４】
本発明の情報処理装置および情報処理方法によれば、複数のＰＣＩｅカードのそれぞれについて、その状態を個別に管理するデータ領域を設けることで、異常が発生したＰＣＩｅカードに係る命令をスキップすることが可能になり、情報処理装置全体のシステムリセットを回避できる。
【図面の簡単な説明】
【００１５】
【図１】図１は、一般的な情報処理装置の構成の一例を概略的に示すブロック図である。
【図２】図２は、図１のプロセッサの構成の一例を概略的に示すブロック図である。
【図３】図３は、図１のＰＣＩｅスイッチの構成の一例を概略的に示すブロック図である。
【図４】図４は、ＰＣＩｅの仕様に準拠するコンフィグレーション空間の構成を示すメモリマップである。
【図５】図５は、ＰＣＩｅの仕様に準拠するＡＥＲ（Ａｄｖａｎｃｅｄ  Ｅｒｒｏｒ  Ｒｅｐｏｒｔｉｎｇ：拡張エラー報告）機能構造体の構成を示すメモリマップである。
【図６】図６は、コアの一般的な内部構成を概略的に示すブロック図である。
【図７】図７は、メモリに格納されて、コアによって実行される命令の一例である。
【図８】図８は、図１〜図７に示した情報処理装置の各構成要素において、コア上で動作するファームウェアがＰＣＩｅカードのＭＭＩＯ（Ｍｅｍｏｒｙ  Ｍａｐｐｅｄ  Ｉｎ／Ｏｕｔ）空間からデータを読み出すまでの一連の動作を示す図である。
【図９】図９は、図１〜図７に示した情報処理装置の各構成要素において、コア上で動作するファームウェアがＰＣＩｅカードのＭＭＩＯ空間からデータを読み出せない場合の一連の動作を示す図である。
【図１０】図１０は、本発明の第１の実施形態による情報処理装置がさらに具備するデータ領域の構成を示すメモリマップである。
【図１１】図１１は、本発明の第１の実施形態による情報処理装置の各構成要素において、コア上で動作するファームウェアがＰＣＩｅカードのＭＭＩＯ空間からデータを読み出せない場合の一連の動作を示す図である。
【図１２】図１２は、本発明の第１の実施形態による情報処理方法においてドライバが実行するサブルーチンの動作を示すフローチャートである。
【図１３Ａ】図１３Ａは、本発明の第１の実施形態による情報処理方法において実行される例外ハンドラの動作を示すフローチャートの前半部分である。
【図１３Ｂ】図１３Ｂは、本発明の第１の実施形態による情報処理方法において実行される例外ハンドラの動作を示すフローチャートの後半部分である。
【図１４】図１４は、本発明の第２の実施形態による情報処理装置の各構成要素において、コア上で動作するファームウェアがＰＣＩｅカード１８０〜１８３のＭＭＩＯ空間からデータを読み出せない別の場合の一連の動作を示す図である。
【図１５Ａ】図１５Ａは、本発明の第２の実施形態による例外ハンドラの動作を示すフローチャートの前半部分である。
【図１５Ｂ】図１５Ｂは、本発明の第２の実施形態による例外ハンドラの動作を示すフローチャートの後半部分である。
【図１６】図１６は、本発明の第３の実施形態による情報処理装置の各構成要素において、コア上で動作するファームウェアがＰＣＩｅカードのＭＭＩＯ空間からデータを読み出せないさらに別の場合の一連の動作を示す図である。
【図１７Ａ】図１７Ａは、本発明の第３の実施形態による例外ハンドラの動作を示すフローチャートの前半部分である。
【図１７Ｂ】図１７Ｂは、本発明の第３の実施形態による例外ハンドラの動作を示すフローチャートの後半部分である。
【発明を実施するための形態】
【００１６】
添付図面を参照して、本発明による情報処理装置および情報処理方法を実施するための形態を以下に説明する。
【００１７】
（第１の実施形態）
図１は、本発明の第１の実施形態による情報処理装置１００の構成の一例を概略的に示すブロック図である。図１に示した情報処理装置１００の構成要素について説明する。図１の情報処理装置は、ＩＯ（Ｉｎ／Ｏｕｔ）コントローラ１１０と、プロセッサ１２０と、メモリ１３０と、ＰＣＩｅスイッチ１４０と、複数のＰＣＩｅカード１８０〜１８３とを具備している。
【００１８】
図１に示した情報処理装置１００の構成要素の接続関係について説明する。ＩＯコントローラ１１０は、ＰＣＩｅ配線１５３を介して外部装置１に接続されている。ＩＯコントローラ１１０は、ＰＣＩｅ配線１５０を介してプロセッサ１３０に接続されている。ＩＯコントローラ１１０は、ＰＣＩｅ配線１５２を介してＰＣＩｅスイッチ１４０に接続されている。プロセッサ１３０は、バス１７０を介してメモリ１３０に接続されている。プロセッサ１３０は、ＰＣＩｅ配線１５１を介してＰＣＩｅスイッチ１４０に接続されている。ＰＣＩｅスイッチ１４０は、複数のＰＣＩｅ配線１６０〜１６３を介して複数のＰＣＩｅカード１８０〜１８３にそれぞれ接続されている。複数のＰＣＩｅカード１８０〜１８３は、複数の配線２００１、２００２、３００１および３００２を介して複数の周辺装置２０００、３０００に接続されている。
【００１９】
図２は、図１のプロセッサ１２０の構成の一例を概略的に示すブロック図である。プロセッサ１２０は、コア１２１と、第１、第２のＰＣＩｅコントローラ１２２、１２３と、メモリコントローラ１２４と、内部バス１２５とを具備している。プロセッサ１２０は、コア１２１と、第１、第２のＰＣＩｅコントローラ１２２、１２３と、メモリコントローラ１２４とは、内部バス１２５に接続されている。第１、第２のＰＣＩｅコントローラ１２２、１２３は、ＰＣＩｅ配線１５０、１５１にそれぞれ接続されている。メモリコントローラ１２４は、バス１７０に接続されている。
【００２０】
図３は、図１のＰＣＩｅスイッチ１４０の構成の一例を概略的に示すブロック図である。ＰＣＩｅスイッチ１４０は、アップストリームポート１４１と、第１〜第５のダウンストリームポート１４２〜１４６と、内部バス１４７とを具備している。アップストリームポート１４１と、第１〜第５のダウンストリームポート１４２〜１４６とは、内部バス１４７に接続されている。アップストリームポート１４１は、ＰＣＩｅ配線１５１に接続されている。第１〜第５のダウンストリームボート１４２〜１４６は、ＰＣＩｅ配線１５２、１６０〜１６３にそれぞれ接続されている。
【００２１】
図４は、ＰＣＩｅの仕様に準拠するコンフィグレーション空間２００の構成を示すメモリマップである。プロセッサ１２０のＰＣＩｅコントローラ１２２、１２３と、ＰＣＩｅスイッチ１４０の各ポート１４０〜１４６と、ＰＣＩｅカード１８０〜１８３とは、全て、ＰＣＩｅの仕様に準拠している。すなわち、これらの構成要素は、それぞれ、図４に示したコンフィグレーション空間２００を有している。
【００２２】
図４のコンフィグレーション空間２００は、アドレス００ｈからアドレスＦＦＦｈまでの領域を具備している。アドレス００ｈからアドレス３Ｆｈまでの領域には、ＰＣＩ３．０互換コンフィグレーション空間ヘッダ２０１が含まれている。アドレス３ＦｈからＦＦｈの範囲に含まれる領域には、ＰＣＩｅ機能構造体２０２が含まれている。アドレス１００ｈからアドレスＦＦＦｈの範囲に含まれる領域には、ＡＥＲ（Ａｄｖａｎｃｅｄ  Ｅｒｒｏｒ  Ｒｅｐｏｒｔｉｎｇ：拡張エラー報告）機能構造体２１０が含まれている。ここで、アドレス００ｈからアドレスＦＦｈまでの範囲は、ＰＣＩコンフィグレーション空間２０３と呼ばれる。また、アドレス１００ｈからアドレスＦＦＦｈまでの範囲は、ＰＣＩｅ拡張コンフィグレーション空間２０４と呼ばれる。
【００２３】
図５は、ＰＣＩｅの仕様に準拠するＡＥＲ機能構造体２１０の構成を示すメモリマップである。図５のＡＥＲ機能構造体２１０は、オフセットアドレス００ｈからオフセットアドレス３８ｈ以降までの領域を具備している。オフセットアドレス００ｈからオフセットアドレス０４ｈまでの領域には、ＰＣＩｅ拡張機能ヘッダ２１１が含まれている。オフセットアドレス０４ｈからオフセットアドレス０８ｈまでの領域には、訂正不能障害状態レジスタ２１２が含まれている。オフセットアドレス０８ｈからオフセットアドレス０Ｃｈまでの領域には、訂正不能障害マスクレジスタ２１３が含まれている。オフセットアドレス０Ｃｈからオフセットアドレス１０はまでの領域には、訂正不能障害深刻度レジスタ２１４が含まれている。オフセットアドレス１０ｈからオフセットアドレス１４ｈまでの領域には、訂正可能障害状態レジスタ２１５が含まれている。オフセットアドレス１４ｈからオフセットアドレス１８ｈまでの領域には、訂正可能障害マスクレジスタ２１６が含まれている。オフセットアドレス１８ｈからオフセットアドレス１Ｃｈまでの領域には、ＡＥＲ機能および制御レジスタ２１７が含まれている。オフセットアドレス１Ｃｈからオフセットアドレス２Ｃｈまで領域には、ヘッダログレジスタ２１８が含まれている。オフセットアドレス２Ｃｈからオフセットアドレス３０ｈまでの領域には、ルート障害コマンド２１９が含まれている。オフセットアドレス３０ｈからオフセットアドレス３４ｈまでの領域には、ルート障害状態２２０が含まれている。オフセットアドレス３４ｈからオフセットアドレス３８ｈまでの領域には、２２１と、訂正可能障害ソースＩＤレジスタ２２２とが含まれている。オフセットアドレス３８ｈ以降の領域には、トランザクション層パケットプレフィックスログレジスタ２２３が含まれている。
【００２４】
また、ＰＣＩｅコントローラ１２２、１２３は、ＰＣＩｅのＡＥＲ機能により、ＰＣＩｅの障害をコア１２１に例外通知または割込通知する機能を持っている。これらは、ＰＣＩｅの仕様で定められた一般的な機能であるので、さらなる詳細な説明を省略する。
【００２５】
図６は、コア１２１の一般的な内部構成を概略的に示すブロック図である。図６を参照して、一般的なコア１２１の構成要素について説明する。コア１２１は、汎用レジスタ１２１−０〜１２１−３１と、プログラムカウンタ１２１−４０と、コントロールレジスタ１２１−４１と、割込アドレスレジスタ１２１−５０と、割込状態レジスタ１２１−５１と、例外アドレスレジスタ１２１−６０と、例外状態レジスタ１２１−６１とを具備している。
【００２６】
図６に示した一般的なコア１２１の構成要素の機能について説明する。プログラムカウンタ１２１−４０は、実行中の命令のアドレスを示す。コントロールレジスタ１２１−４１は、演算命令の結果や分岐命令の制御に使用される。割込アドレスレジスタ１２１−５０は、割込が発生したときに割込処理から戻ったときに実行される命令のアドレスを示す。割込状態レジスタ１２１−５１は、割込元を示す。例外アドレスレジスタ１２１−６０は、例外が発生したときに実行中の命令アドレスを示す、または例外の元になった命令アドレスを示す。例外状態レジスタ１２１−６１は、例外要因を示す。
【００２７】
図７は、メモリ１３０に格納されて、コア１２１によって実行される命令の一例である。例えば、アドレス０ｘ１００Ｃの命令４０は、ｇｒ２番の汎用レジスタ１２１−３２に格納されたアドレスが示すメモリ上のデータを４バイト分読み出し、ｇｒ１番の汎用レジスタ１２１−３１に格納することを意味している。同様に、アドレス０ｘ１０１０の命令４１は、ｇｒ１番の汎用レジスタ１２１−３１のデータを４バイト分読み出し、ｇｒ５番の汎用レジスタ１２１−３５に格納されたアドレスが示すメモリ上に格納することを意味している。
【００２８】
図８は、図１〜図７に示した情報処理装置１００の各構成要素において、コア１２１上で動作するファームウェア４００がＰＣＩｅカード１８０〜１８３のＭＭＩＯ（Ｍｅｍｏｒｙ  Ｍａｐｐｅｄ  Ｉｎ／Ｏｕｔ）空間からデータを読み出すまでの一連の動作を示す図である。図８には、ファームウェア４００と、ドライバ５００と、一般的な例外ハンドラ６００と、コア１２１と、ＰＣＩｅコントローラ１２３と、ＰＣＩｅスイッチ１４０と、ＰＣＩｅカード１８０〜１８３との動作が、合計１０個のステップ１０−１〜１０−１０として示されている。
【００２９】
ここで、図８を参照して、情報処理装置１００の全ての構成要素が正常に動作する理想的な場合の情報処理方法について説明する。まず、通常、ファームウェア４００は、ＰＣＩｅデバイスのＭＭＩＯ空間へのアクセスを、ドライバ５００を介して行うように設計されている。そこで、第１のステップ１０−１において、ファームウェア４００が、ドライバ５００に対して、読み出し先アドレスを指定した上でＭＭＩＯ空間の読み出しを指示する。一般的には、この第１のステップ１０−１の実行は、ファームウェア４００がドライバ５００のサブルーチンを実行することに、実質的に等しい。
【００３０】
次に、第２のステップ１０−２において、ドライバ５００は、指定された読み出し先アドレスに基づいて、読み出し対象となるＰＣＩｅカード１８０〜１８３を特定する。この特定動作は、ＭＭＩＯ空間がＰＣＩｅデバイス毎に決まっているので可能となっている。ドライバ５００は、ＰＣＩｅカード１８０〜１８３毎の管理情報を確認し、問題なければ、指定されたアドレスを用いてロード（読み出し、ｌｄ）命令をコア１２１上で実行する。このロード命令をニーモニックで表すと、例えば、図７に示した命令４０のように表される。
【００３１】
次に、第３のステップ１０−３において、コア１２１がロード命令を実行する。ここで、コア１２１は、読み出し先アドレスを確認する。コア１２１は、確認されたアドレスがＰＣＩｅデバイスのＭＭＩＯ空間を示していると判断した場合は、対象となるＰＣＩｅコントローラ１２３に対して、内部バス１２５のトランザクションにより、ＭＭＩＯ空間の読み出しを指示する。なお、コア１２１と、ＰＣＩｅコントローラ１２２、１２３との間のトランザクションについては、プロセッサ１２０のアーキテクチャに依存するので、さらなる詳細な説明を省略する。
【００３２】
次に、第４のステップ１０−４において、ＰＣＩｅコントローラ１２３は、コア１２１からＭＭＩＯ空間の読み出しを指示されると、ＰＣＩｅスイッチ１４０に対して、ＰＣＩｅのトランザクションでメモリ読み出し要求を行う。ここで、ＰＣＩｅスイッチ１４０は、対象となるＰＣＩｅカード１８０〜１８３の前段に接続されている。ＰＣＩｅコントローラ１２３は、この要求を行った後、そのコンプリーションを待つ状態に移行する。
【００３３】
次に、第５のステップ１０−５において、ＰＣＩｅスイッチ１４０は、ＰＣＩｅコントローラから受け取ったトランザクションを、対象となるＰＣＩｅカード１８０〜１８３に向けて転送する。なお、これら第４、第５のステップ１０−４、１０−５におけるトランザクションは、ＰＣＩｅの仕様に準拠するので、さらなる詳細な説明を省略する。
【００３４】
次に、第６のステップ１０−６において、メモリ読み出しのトランザクションを受信したＰＣＩｅカード１８０〜１８３は、そのトランザクションで指定されたアドレスのデータを読み出す。ＰＣＩｅカード１８０〜１８３は、読み出したデータおよびコンプリーションのトランザクションを、メモリ読み出しを仲介したＰＣＩｅスイッチ１４０に向けて送信する。
【００３５】
次に、第７のステップ１０−７において、ＰＣＩｅスイッチ１４０は、読み出したデータおよびコンプリーションのトランザクションを受信し、メモリ読み出しの要求元であるＰＣＩｅコントローラ１２３に向けて転送する。
【００３６】
次に、第８のステップ１０−８において、ＰＣＩｅコントローラ１２３は、ＰＣＩｅスイッチ１４０から受信したデータを、内部バス１２５のトランザクションにより、コア１２１に対してリプライする。
【００３７】
次に、第９のステップ１０−９において、リプライを受信したコア１２１は、図７に示した命令４０に従って、受信したデータをレジスタに格納し、ロード命令を完了させ、次の命令を実行する。コア１２１が、次の命令により実行を再開することによって、ドライバ５００の処理は完了する。
【００３８】
次に、第１０のステップ１０−１０において、ファームウェア４００は読み出されたデータをドライバ５００から受け取り、処理を継続することが出来るようになる。
【００３９】
以上に説明した第１〜第１０のステップ１０−１〜１０−１０の動作は、ＰＣＩｅを用いた図１の様な情報処理装置においては一般的なものであり、従来技術の場合も同様である。
【００４０】
図９は、図１〜図７に示した情報処理装置１００の各構成要素において、コア１２１上で動作するファームウェア４００がＰＣＩｅカード１８０〜１８３のＭＭＩＯ空間からデータを読み出せない場合の一連の動作を示す図である。図９には、ファームウェア４００と、ドライバ５００と、一般的な例外ハンドラ６００と、コア１２１と、ＰＣＩｅコントローラ１２３と、ＰＣＩｅスイッチ１４０と、ＰＣＩｅカード１８０〜１８３との動作が、合計１０個のステップ１１−１〜１１−１０として示されている。
【００４１】
ここで、図９を参照して、情報処理装置１００の中で、ＰＣＩｅカード１８０〜１８３の一部が故障しており、ファームウェア４００からのＭＭＩＯ空間読み出しが無応答になる場合の情報処理方法について説明する。ただし、これは一般的な例外ハンドラ６００を用いた場合の、すなわち従来技術で起こり得る問題である。本発明の第１の実施形態でこの問題を回避する方法については後述する。
【００４２】
まず、ファームウェア４００がＭＭＩＯ空間読み出しを指示してから、メモリ読み出しを要求するトランザクションがＰＣＩｅカード１８０〜１８３に届くまでの動作は、図８で説明した正常な動作と同じである。すなわち、図９に示した第１〜第５のステップ１１−１〜１１−５は、図８に示した第１〜第５のステップ１０−１〜１０−５と同様であるので、さらなる詳細な説明を省略する。
【００４３】
次に、第６のステップ１１−６において、ＰＣＩｅカード１８０〜１８３の一部が故障して、メモリ読み出しのトランザクションに対して無応答になる場合を考える。この場合、故障したＰＣＩｅカード１８０〜１８３は、コンプリーションをＰＣＩｅコントローラ１２３に返せない。
【００４４】
次に、第７のステップ１１−７において、故障したＰＣＩｅカード１８０〜１８３からのコンプリーションが届かないまま所定の時間が経過すると、ＰＣＩｅコントローラ１２３がコンプリーションタイムアウトを検出する。
【００４５】
次に、第８のステップ１１−８において、ＰＣＩｅコントローラ１２３は、コア１２１に向けて、割り込み処理によって障害の報告を行う。
【００４６】
次に、第９のステップ１１−９において、割り込み処理で障害の発生を通知されたコア１２１は、例外処理を実行する判断を行う。このとき、例外アドレスレジスタ１２１−６０は、実行中の命令アドレスを格納する。この例では、図７の命令４０のアドレス「０ｘ１００Ｃ」が格納される。また、例外状態レジスタ１２１−６１には、例外処理の要因が格納される。この例では、ＰＣＩｅコントローラ１２３からの障害割り込みである要因が格納される。
【００４７】
このとき、ＭＭＩＯ空間の読み出しを行ったロード命令（４０）は完了していない。また、読み出されるはずのデータはレジスタに格納されていない。したがって、ドライバ５００はファームウェア４００に読み出したデータを受け渡すことが出来ない。また、ファームフェア４００は処理を継続することが出来なくなる。そこで、一般的には、コア１２１が例外ハンドラ６００の実行を指示する。
【００４８】
次に、第１０のステップ１１−１０において、例外ハンドラ６００がシステムリセットを行うことで、情報処理装置１００全体の復旧を試みる。
【００４９】
以上に説明したように、従来の情報処理装置１００には、複数のＰＣＩｅカード１８０〜１８３のうち、一枚でも故障すると、情報処理装置１００全体を故障として扱わなければならない、という問題がある。以降、本発明の第１の実施形態でこの問題を回避できることを説明する。
【００５０】
図１０は、本発明の第１の実施形態による情報処理装置１００がさらに具備するデータ領域５１０の構成を示すメモリマップである。
データ領域５１０の構成要素について説明する。データ領域５１０は、第１〜第４の例外フラグ５２０〜５２３を具備している。なお、データ領域５１０は、プロセッサ１２０に含まれていても良いし、メモリ１３０に含まれていても良い。
【００５１】
データ領域５１０の各構成要素の動作について説明する。第１〜第４の例外フラグ５２０〜５２３は、第１〜第４のＰＣＩｅカード１８０〜１８３の障害状態をそれぞれ格納する。第１〜第４の例外フラグ５２０〜５２３の内容は、本発明の第１の実施形態による情報処理装置１００の各構成要素から読み出しおよび書き込みが可能であるものとする。
【００５２】
図１１は、本発明の第１の実施形態による情報処理装置１００の各構成要素において、コア１２１上で動作するファームウェア４００がＰＣＩｅカード１８０〜１８３のＭＭＩＯ空間からデータを読み出せない場合の一連の動作を示す図である。図１１には、ファームウェア４００と、ドライバ５００と、例外ハンドラ６１０と、コア１２１と、ＰＣＩｅコントローラ１２３と、ＰＣＩｅスイッチ１４０と、ＰＣＩｅカード１８０〜１８３との動作が、合計１５個のステップ１２−１〜１２−１５として示されている。
【００５３】
ここで、図１１を参照して、情報処理装置１００の中で、ＰＣＩｅカード１８０〜１８３の一部が故障しており、ファームウェア４００からのＭＭＩＯ空間読み出しが無応答になる場合の情報処理方法について説明する。まず、第１のステップ１２−１において、ファームウェア４００がＰＣＩｅカード１８０〜１８３のＭＭＩＯ空間を読み出すために、ドライバ５００にサブルーチン５３０の実行を指示する。このとき、ファームウェア４００は、サブルーチン５３０に対して、読み出し先アドレスと、読み出したデータを格納するアドレスとを受け渡す。
【００５４】
第２のステップ１２−２において、ドライバ５００のサブルーチン５３０は、指定された読み出し先アドレスから、対象となるＰＣＩｅカード１８０〜１８３を特定する。また、ドライバ５００のサブルーチン５３０は、指定された読み出し先アドレスから、対応する例外フラグ５２０〜５２３をクリアする。このクリアする動作は、後述する図１２のフローチャートにおける第１のステップ５３０−１に対応する。
【００５５】
そして、サブルーチン５３０は、ファームウェア４００から指定されたアドレスより、データを読み出す。この読み出す動作は、後述する図１２のフローチャートにおける第２のステップ５３０−２に対応する。
【００５６】
第３のステップ１２−３において、コア１２１はロード命令を実行し、ＰＣＩｅコントローラ１２３に向けてメモリ読み出しのトランザクションを発行する。
【００５７】
第４のステップ１２−４において、ＰＣＩｅコントローラ１２３は、コア１２１から受け取ったトランザクションをＰＣＩｅスイッチ１４０に向けて転送する。
【００５８】
第５のステップ１２−５において、ＰＣＩｅスイッチ１４０は、ＰＣＩｅコントローラ１２３から受け取ったトランザクションを、対象となるＰＣＩｅカード１８０〜１８３に向けて転送する。
【００５９】
なお、この時点において、コア１２１は、ＰＣＩｅコントローラ１２３よりリプライがあるまでロード命令を実行中のままになる。また、プログラムカウンタ１２１−４０は、ロード命令のアドレスを示したままになる。
【００６０】
次に、第６のステップ１２−６において、ＰＣＩｅカード１８０〜１８３の一部が故障して、メモリ読み出しのトランザクションに対して無応答になる場合を考える。この場合、故障したＰＣＩｅカード１８０〜１８３は、コンプリーションをＰＣＩｅコントローラ１２３に返せない。
【００６１】
次に、第７のステップ１２−７において、故障したＰＣＩｅカード１８０〜１８３からのコンプリーションが届かないまま所定の時間が経過すると、ＰＣＩｅコントローラ１２３がコンプリーションタイムアウトを検出する。
【００６２】
次に、第８のステップ１２−８において、ＰＣＩｅコントローラ１２３は、コア１２１に向けて、割り込み処理によって障害の報告を行う。
【００６３】
次に、第９のステップ１２−９において、割り込み処理で障害の発生を通知されたコア１２１は、例外ハンドラ６１０の実行を指示する。このとき、コア１２１の動作により、例外アドレスレジスタ１２１−６０にはドライバ５００のサブルーチン５３０で実行したロード命令のアドレスが格納される。また、同じくコア１２１の動作により、例外状態レジスタ１２１−６１にはＰＣＩｅコントローラ１２３からの障害割り込みであることが設定される。
【００６４】
例外ハンドラ６１０では、例外状態レジスタ１２１−６１の内容が確認される。この動作は、後述する図１３Ａにおける第１、第２のステップ６１０−１、６１０−２に対応する。
【００６５】
確認の結果、ＰＣＩｅコントローラ１２３からの障害割り込みであれば、ＰＣＩｅコントローラ１２３のコンフィグレーション空間２００よりＡＥＲ機能構造体２１０が読み出される。また、障害要因の有無が確認される。この動作は、後述する図１３Ａにおける第３、第４のステップ６１０−３、６１０−４に対応する。
【００６６】
ここで、障害要因があった場合は、障害要因を詳しく解析し、コンプリーションタイムアウトが検出されているかどうかを確認する。この動作は、後述する図１３Ａにおける第５のステップ６１０−５および図１３Ｂにおける、第６のステップ６１０−６に対応する。
【００６７】
もし、コンプリーションタイムが検出されているなら、例外アドレスレジスタ１２１−６０が示すアドレスから実行中の命令を読み出す。この動作は、後述する図１３Ｂにおける第７のステップ６１０−７に対応する。
【００６８】
読み出した命令を解析して、ＰＣＩｅカード１８０〜１８３のＭＭＩＯ空間に対するロード命令であるかどうかを確認する。この動作は、後述する図１３Ｂにおける第８、第９のステップ６１０−８、６１０−９に対応する。
【００６９】
このとき、例外アドレスレジスタ１２１−６０には、ドライバ５００のサブルーチン５３０で実行した、ＰＣＩｅカード１８０〜１８３のＭＭＩＯ空間に対するロード命令を示すアドレスが格納されている。例外ハンドラ６１０は、読み出した命令がロード命令であることを確認し、ロード命令のオペランドより読み出し先アドレスを特定する。例えば、図７に示したロード命令４０では、読み出し元アドレスがｇｒ２番の汎用レジスタ１２１−３２に格納されている。この場合、ｇｒ２番の汎用レジスタ１２１−３２の内容を読み出すことで、ＰＣＩｅカード１８０〜１８３のＭＭＩＯ空間に対するロード命令であるかどうかを確認することが出来る。なお、プロセッサのアーキテクチャによって命令形式は様々であるので、ここでは命令の具体的な解析方法までは説明しない。また、一般的に例外ハンドラ６１０に移行する前に、汎用レジスタの内容はスタックに退避される。このため、そのスタックを読み出すことによって、ロード命令で使用したレジスタの内容を破壊されずに読み出すことが出来る。
【００７０】
次に、第１０のステップ１２−１０において、例外ハンドラ６１０は、ＰＣＩｅカード１８０〜１８３に対するロード命令だと判断すると、読み出し先アドレスより対象ＰＣＩｅカード１８０〜１８３を特定する。また、例外ハンドラ６１０は、対応する例外フラグ５２０〜５２３に０以外の値を格納してセットする。この動作は、後述する図１３Ｂにおける第１０のステップ６１０−１０に対応する。
【００７１】
次に、第１１のステップ１２−１１において、例外アドレスレジスタ（ＥＡＲ）１２１−６０がロード命令の次の命令を示すように、例外アドレスレジスタ１２１−６０に加算が行われる。この動作は、後述する図１３Ｂにおける第１１のステップ６１０−１１に対応する。
【００７２】
次に、第１２のステップ１２−１２において、コア１２１の動作が例外ハンドラ６１０から戻る。この動作は、後述する図１３Ｂにおける第１１、第１２のステップ６１０−１１、６１０−１２に対応する。
【００７３】
例外ハンドラ６１０から通常の処理に戻る場合、コア１２１で専用の命令が実行される。その結果、例外アドレスレジスタ１２１−６０の内容がプログラムカウンタ１２１−４０に格納される。また、プログラムカウンタ１２１−４０が示すアドレスの命令から処理が再開される。この動作は、図７におけるｓｔ命令４１から処理を再開することに対応する。すなわち、図７におけるロード命令４０は実行が完了しないままにスキップされることになる。そのため、ｇｒ１番の汎用レジスタ１２１−１の内容は更新されないままとなる。なお、この例では、ｇｒ１番の汎用レジスタ１２１−１の内容が、ファームウェア４００に渡すべき、読み出されたデータとなる。
【００７４】
なお、ＰＣＩｅコントローラ１２３からの障害割り込みが無かった場合や、ＰＣＩｅコントローラ１２３のＡＥＲ機能構造体２１０に障害要因が無かった場合や、コンプリーションタイムアウトが検出されなかった場合には、他の障害要因を確認し、対応する処理を行うものとする。この動作は、後述する図１３Ｂにおける第１３、第１４のステップ６１０−１３、６１０−１４に対応する。
【００７５】
また、ＰＣＩｅカード１８０〜１８３のＭＭＩＯ空間に対するロード命令ではない場合には、情報処理装置１００の障害と判断して、情報処理装置１００をリセットすることで回復を試みるものとする。この動作は、後述する図１３Ｂにおける第１５、第１６のステップ６１０−１５、６１０−１６に対応する。
【００７６】
次に、第１３のステップ１２−１３において、コア１２１は、ドライバ５００に次の命令を実行するように指示する。すなわち、例外ハンドラ６１０から通常の処理に戻ったことにより、ドライバ５００のサブルーチン５３０の処理が再開される。このとき、例外ハンドラ６１０によってロード命令はスキップされているので、サブルーチン５３０内における次の処理が実行される。サブルーチン５３０は、読み出し先ＰＣＩｅカード１８０〜１８３に対応する例外フラグ５２０〜５２３の内容を確認する。この動作は、後述する図１２における第３、第４のステップ５３０−３、５３０−４に対応する。
【００７７】
次に、第１４のステップ１２−１４において、確認された例外フラグ５２０〜５２３の内容が０以外であった場合には、ドライバ５００のサブルーチン５３０がファームウェア４００に異常終了を報告する。この動作は、後述する図１２における第８、第９のステップ５３０−８、５３０−９に対応する。
【００７８】
次に、第１５のステップ１２−１５において、ファームウェア４００は、故障したＰＣＩｅカード１８０〜１８３の障害処理を試みる。
【００７９】
図１２は、本発明の第１の実施形態による情報処理方法においてドライバ５００が実行するサブルーチン５３０の動作を示すフローチャートである。サブルーチン５３０は、合計９個のステップ５３０−１〜５３０−９を具備している。
【００８０】
サブルーチン５３０が開始すると、まず、第１のステップ５３０−１が実行される。第１のステップ５３０−１では、ファームウェア４００より指定されたｎ番ＰＣＩｅカード１８０〜１８３に対応するｎ番例外フラグ５２０〜５２３をクリアする。この第１のステップ５３０−１は、図１１における第２のステップ１２−２に対応する。第１のステップ５３０−１の次に、第２のステップ５３０−２が実行される。
【００８１】
第２のステップ５３０−２では、ファームウェア４００より指定されたアドレスよりデータを読み出す。この第２のステップ５３０−２は、図１１における第２のステップ１２−２に対応する。第２のステップ５３０−２の次に、第３のステップ５３０−３が実行される。
【００８２】
第３のステップ５３０−３では、ｎ番例外フラグ５２０〜５２３を確認する。第３のステップ５３０−３の次に、第４のステップ５３０−４が実行される。
【００８３】
第４のステップ５３０−４では、ｎ番例外フラグ５２０〜５２３が０に等しいかどうかを判定する。等しい場合（Ｙｅｓ）は、次に、第５のステップ５３０−５が実行される。等しくない（Ｎｏ）場合は、次に、第８のステップ５３０−８が実行される。
【００８４】
第５のステップ５３０−５では、読み出したデータを、ファームウェア４００が指定するアドレスに格納する。第５のステップ５３０−５の次に、第６のステップ５３０−６が実行される。
【００８５】
第６のステップ５３０−６では、ファームウェア４００に正常終了を報告する。第６のステップ５３０−６の次に、第７のステップ５３０−７が実行される。
【００８６】
第７のステップ５３０−７では、サブルーチン５３０が終了する。
【００８７】
第８のステップ５３０−８では、ファームウェア４００に異常終了を報告する。第８のステップ５３０−８の次に、第９のステップ５３０−９が実行される。
【００８８】
第９のステップ５３０−９では、サブルーチン５３０が終了する。
【００８９】
図１３Ａは、本発明の第１の実施形態による情報処理方法において実行される例外ハンドラ６１０の動作を示すフローチャートの前半部分である。図１３Ｂは、本発明の第１の実施形態による情報処理方法において実行される例外ハンドラ６１０の動作を示すフローチャートの後半部分である。図１３Ａおよび図１３Ｂのフローチャートは、接続点ＡおよびＢを介して接続されている。
図１３Ａおよび図１３Ｂのフローチャートは、合計１６個のステップ６１０−１〜６１０−１６を具備している。
【００９０】
例外ハンドラ６１０が開始すると、まず、第１のステップ６１０−１が実行される。
第１のステップ６１０−１では、例外状態レジスタ（ＥＳＲ）１２１−６１よりＰＣＩｅコントローラ１２３からの障害割り込みかを確認する。
第１のステップ６１０−１の次に、第２のステップ６１０−２が実行される。
【００９１】
第２のステップ６１０−２では、ＰＣＩｅ障害割り込みが発生したかどうかを判定する。ＰＣＩｅ障害割り込みが発生している場合（Ｙｅｓ）は、次に、第３のステップ６１０−３が実行される。ＰＣＩｅ障害割り込みが発生していない場合（Ｎｏ）は、次に、第１３のステップ６１０−１３が実行される。
【００９２】
第３のステップ６１０−３では、ＰＣＩｅコントローラ１２３のコンフィグレーション空間２００よりＡＥＲ機能構造体２１０を読み出して障害要因を確認する。
第３のステップ６１０−３の次に、第４のステップ６１０−４が実行される。
【００９３】
第４のステップ６１０−４では、障害要因があるかどうかを判定する。
障害要因がある場合（Ｙｅｓ）は、次に、第５のステップ６１０−５が実行される。
障害要因が無い場合（Ｎｏ）は、次に、第１３のステップ６１０−１３が実行される。
【００９４】
第５のステップ６１０−５では、コンプリーションタイムアウトを検出しているかを確認する。
第５のステップ６１０−５の次に、第６のステップ６１０−６が実行される。
【００９５】
第６のステップ６１０−６では、コンプリーションタイムアウトが検出されているかどうかを判定する。
コンプリーションタイムアウトが検出されている場合（Ｙｅｓ）は、次に、第７のステップ６１０−７が実行される。
コンプリーションタイムアウトが検出されていない場合（Ｎｏ）は、次に、第１３のステップ６１０−１３が実行される。
【００９６】
第７のステップ６１０−７では、例外アドレスレジスタ１２１−６０が示すアドレスより実行中の命令を読み出す。
第７のステップ６１０−７の次に、第８のステップ６１０−８が実行される。
【００９７】
第８のステップ６１０−８では、第７のステップ６１０−７で読み出した命令を解析し、ＰＣＩｅカード１８０〜１８３のＭＭＩＯ空間に対するロード命令であるかどうかを確認する。
第８のステップ６１０−８の次に、第９のステップ６１０−９が実行される。
【００９８】
第９のステップ６１０−９では、ＰＣＩｅカード１８０〜１８３へのロード命令であるかどうかを判定する。
ＰＣＩｅカード１８０〜１８３へのロード命令である場合（Ｙｅｓ）は、次に、第１０のステップ６１０−１０が実行される。
ＰＣＩｅカード１８０〜１８３へのロード命令ではない場合（Ｎｏ）は、次に、第１５のステップ６１０−１５が実行される。
【００９９】
第１０のステップ６１０−１０では、読み出し先アドレスより対象ＰＣＩｅカード１８０〜１８３を特定し、対応する例外フラグをセットする。
第１０のステップ６１０−１０の次に、第１１のステップ６１０−１１が実行される。
【０１００】
第１１のステップ６１０−１１では、次命令を示すように例外アドレスレジスタ１２１−６０を加算し、例外ハンドラ６１０より戻る。
第１１のステップ６１０−１１の次に、第１２のステップ６１０−１２が実行される。
【０１０１】
第１２のステップ６１０−１２では、例外ハンドラ６１０が終了する。
【０１０２】
第１３のステップ６１０−１３では、他の障害要因を確認し、対応する処理を行う。
第１３のステップ６１０−１３の次に、第１４のステップ６１０−１４が実行される。
【０１０３】
第１４のステップ６１０−１４では、例外ハンドラ６１０が終了する。
【０１０４】
第１５のステップ６１０−１５では、情報処理装置１００の障害と判断し、情報処理装置１００をリセットする。
第１５のステップ６１０−１５の次に、第１６のステップ６１０−１６が実行される。
【０１０５】
第１６のステップ６１０−１６では、例外ハンドラ６１０が終了する。
【０１０６】
本発明の第１の実施形態による情報処理装置および情報処理方法がもたらす効果について説明する。本発明の第１の実施形態によれば、ファームウェア４００からのＰＣＩｅカード１８０〜１８３のＭＭＩＯ空間の読み出し要求が、ＰＣＩｅカード１８０〜１８３の故障により無応答になったとしても、通常の処理に戻ることが出来る。これは、例外ハンドラ６１０によりＰＣＩｅカード１８０〜１８３の例外フラグ５２０〜５２３が設定されて、かつ、該当するＰＣＩｅカード１８０〜１８３のＭＭＩＯ空間を読み出すロード命令がスキップされるからである。
【０１０７】
また、ファームウェア４００は、ＰＣＩｅカード１８０〜１８３のＭＭＩＯ空間の読み出しが失敗したことを、ドライバ５００のサブルーチン５３０によって知ることが出来る。その結果、ファームウェア４００は、障害処理などの対応する処理を行うことが出来るようになる。
【０１０８】
また、不定なデータがファームウェア４００に渡されることが防止される。そのため、ファームウェア４００が不定な値を使用して動作することを防止される。結果として、ＰＣＩｅカード１８０〜１８３の故障で情報処理装置１００の全体をリセットする必要が無くなる。
【０１０９】
なお、ＰＣＩｅカード１８０〜１８３が無応答にならなかった場合には、例外ハンドラ６１０は実行されない。また、この場合、例外フラグ５２０〜５２３の内容は全て「０」のままである。そのため、サブルーチン５３０は、読み出したデータ、すなわちｇｒ１番の汎用レジスタ１２１−１の内容をファームウェア４００によって指定されたアドレスに格納することになる。この動作は、図１２における第５のステップ５３０−５に対応する。また、サブルーチン５３０は、ファームウェア４００に正常終了を報告することが出来る。この動作は、図１２における第６、第７のステップ５３０−６、５３０−７に対応する。
【０１１０】
（第２の実施形態）
本発明の第１の実施形態では、ＰＣＩｅカード１８０〜１８３が故障により無応答になった場合に、情報処理装置１００の全体をリセットすることなく復旧することについて説明した。しかし、ＰＣＩｅの規格には、他にもさまざまな障害を検出する機能があり、本発明ではそれらにも対応することが出来る。そのような情報処理装置および情報処理方法を、本発明の第２の実施形態として、以下に説明する。
【０１１１】
本発明の第２の実施形態による情報処理装置および情報処理方法は、ＰＣＩｅカード１８０〜１８３がコンプリータアボートを返す不具合を処理するように構成されたものである。したがって、本発明の第２の実施形態による情報処理装置および情報処理方法の構成は、本発明の第１の実施形態として説明した構成に、以下の変更を加えたものに等しい。すなわち、本発明の第１の実施形態による例外ハンドラ６１０を、後述する例外ハンドラ６２０に置き換える。
【０１１２】
図１４は、本発明の第２の実施形態による情報処理装置１００の各構成要素において、コア１２１上で動作するファームウェア４００がＰＣＩｅカード１８０〜１８３のＭＭＩＯ空間からデータを読み出せない別の場合の一連の動作を示す図である。図１４には、ファームウェア４００と、ドライバ５００と、例外ハンドラ６２０と、コア１２１と、ＰＣＩｅコントローラ１２３と、ＰＣＩｅスイッチ１４０と、ＰＣＩｅカード１８０〜１８３との動作が、合計１０個のステップ１３−１〜１３−１０として示されている。
【０１１３】
図１４における第１〜第５のステップ１３−１〜１３−５は、ファームウェア４００がＰＣＩｅカード１８０〜１８３のＭＭＩＯ空間を読み出すために指示を出してから、ＰＣＩｅカード１８０〜１８３にメモリ読み出しが通知されるまでを表している。すなわち、図１４における第１〜第５のステップ１３−１〜１３−５は、本発明の第１の実施形態の説明で参照した図１１における第１〜第５のステップ１２−１〜１２−５と同様であるので、さらなる詳細な説明を省略する。
【０１１４】
ここで、対象となるＰＣＩｅカード１８０〜１８３が障害を検出し、メモリ読み出し命令に対してコンプリートアボートを返す場合について考える。
【０１１５】
第６のステップ１３−６において、対象となるＰＣＩｅカード１８０〜１８３は、ＰＣＩｅスイッチ１４０に対してコンプリータアボートを返す。
【０１１６】
次に、第７のステップ１３−７において、ＰＣＩｅスイッチ１４０は、コンプリータアボートをＰＣＩｅコントローラ１２３に転送する。
【０１１７】
次に、第８のステップ１３−８において、ＰＣＩｅコントローラ１２３は、コア１２１に向けて障害割り込みを報告する。
【０１１８】
次に、第９のステップ１３−９において、コア１２１は、例外ハンドラ６２０を実行する。なお、例外ハンドラ６２０を実行しない場合は、第１０のステップ１３−１０においてシステムのリセットが行われる。
【０１１９】
図１５Ａは、本発明の第２の実施形態による例外ハンドラ６２０の動作を示すフローチャートの前半部分である。図１５Ｂは、本発明の第２の実施形態による例外ハンドラ６２０の動作を示すフローチャートの後半部分である。ここで、図１５Ａおよび図１５Ｂのフローチャートは、接続点Ｃ、Ｄを介して接続されている。図１５Ａおよび図１５Ｂのフローチャートは、第１〜第１６のステップ６２０−１〜６２０−１６を具備している。例外ハンドラ６２０が開始すると、まず、第１のステップ６２０−１が実行される。
【０１２０】
第１のステップ６２０−１において、例外状態レジスタ１２１−６１を参照してＰＣＩｅコントローラ１２３からの障害割り込みが発生しているかどうかを確認する。第１のステップ６２０−１の次に、第２のステップ６２０−２が実行される。
【０１２１】
第２のステップ６２０−２において、障害割り込みが発生しているかどうかが判定される。障害割り込みが発生している場合（Ｙｅｓ）は、次に第３のステップ６２０−３が実行される。障害割り込みが発生していない場合（Ｎｏ）は、次に第１５のステップ６２０−１５が実行される。
【０１２２】
第３のステップ６２０−３において、各ＰＣＩｅカード１８０〜１８３のコンフィグレーション空間２００よりＡＥＲ機能構造体２１０を読み出し、障害要因を確認する。第３のステップ６２０−３の次に、第４のステップ６２０−４が実行される。
【０１２３】
第４のステップ６２０−４において、障害要因があるかどうかを判定する。障害要因がある場合（Ｙｅｓ）は、次に第５のステップ６２０−５が実行される。障害要因がない場合（Ｎｏ）は、次に第１５のステップ６２０−１５が実行される。
【０１２４】
第５のステップ６２０−５において、コンプリータアボートを検出しているかを確認する。第５のステップ６２０−５の次に、第６のステップ６２０−６が実行される。
【０１２５】
第６のステップ６２０−６において、コンプリータアボートが検出されているかどうかを判定する。コンプリータアボートが検出されている場合（Ｙｅｓ）は、次に第７のステップ６２０−７が実行される。コンプリータアボートが検出されていない場合（Ｎｏ）は、次に第１５のステップ６２０−１５が実行される。
【０１２６】
第７のステップ６２０−７において、障害が検出されたＰＣＩｅカード１８０〜１８３のＰＣＩｅカード番号ｎを、変数Ａに格納し、対応する例外フラグ５２０〜５２３をセットする。第７のステップ６２０−７の次に、第８のステップ６２０−８が実行される。
【０１２７】
第８のステップ６２０−８において、例外アドレスレジスタ１２１−６０の示すアドレスより実行中の命令を読み出す。第８のステップ６２０−８の次に、第９のステップ６２０−９が実行される。
【０１２８】
第９のステップ６２０−９において、読み出した命令を解析し、ＰＣＩｅカード１８０〜１８３のＭＭＩＯ空間に対するロード命令であるかを確認する。第９のステップ６２０−９の次に、第１０のステップ６２０−１０が実行される。
【０１２９】
第１０のステップ６２０−１０において、ロード命令であるかどうかを判定する。ロード命令である場合（Ｙｅｓ）は、次に第１１のステップ６２０−１１が実行される。ロード命令でない場合（Ｎｏ）は、次に第１５のステップ６２０−１５が実行される。
【０１３０】
第１１のステップ６２０−１１において、読み出し先アドレスに対応するＰＣＩｅカード１８０〜１８３の番号ｍを特定し、変数Ａと一致するかどうかを確認する。第１１のステップ６２０−１１の次に、第１２のステップ６２０−１２が実行される。
【０１３１】
第１２のステップ６２０−１２において、番号ｍが変数Ａに一致するかどうかを判定する。番号ｍが変数Ａに一致する場合（Ｙｅｓ）は、次に第１３のステップ６２０−１３が実行される。番号ｍが変数Ａに一致しない場合（Ｎｏ）は、次に第１５のステップ６２０−１５が実行される。
【０１３２】
第１３のステップ６２０−１３において、次命令を示すように例外アドレスレジスタ１２１−６０を加算し、例外ハンドラ６２０より通常の処理に戻る。第１３のステップ６２０−１３の次に、第１４のステップ６２０−１４が実行される。
【０１３３】
第１４のステップ６２０−１４において、例外ハンドラ６２０が終了する。
【０１３４】
第１５のステップ６２０−１５において、他の障害要因を確認し、対応する処理を行う。第１５のステップ６２０−１５の次に、第１６のステップ６２０−１６が実行される。
【０１３５】
第１６のステップ６２０−１６において、例外ハンドラ６２０が終了する。
【０１３６】
以上に説明したように、本発明の第２の実施形態による例外ハンドラ６２０は、まず、第１〜第７のステップ６２０−１〜６２０−７において、ＰＣＩｅカード１８０〜１８３のコンプリータアボートを検出して対象となる例外フラグ５２０〜５２３をセットする。次に、第８〜第１３のステップ６２０−８〜６２０−１３において、実行中の命令がコンプリータアボートを検出したＰＣＩｅカード１８０〜１８３のＭＭＩＯ空間に対するロード命令ならば、例外アドレスレジスタ１２１−６０を次の命令を示すように加算し、通常の処理に戻る。
【０１３７】
（第３の実施形態）
ＰＣＩｅカード１８０〜１８３の障害を、ＰＣＩｅスイッチ１４０のダウンストリームポート１４３〜１４６が検出する場合の情報処理装置および情報処理方法について、本発明の第３の実施形態として説明する。
【０１３８】
図１６は、本発明の第３の実施形態による情報処理装置１００の各構成要素において、コア１２１上で動作するファームウェア４００がＰＣＩｅカード１８０〜１８３のＭＭＩＯ空間からデータを読み出せないさらに別の場合の一連の動作を示す図である。図１６には、ファームウェア４００と、ドライバ５００と、例外ハンドラ６３０と、コア１２１と、ＰＣＩｅコントローラ１２３と、ＰＣＩｅスイッチ１４０と、ＰＣＩｅカード１８０〜１８３との動作が、合計１１個のステップ１４−１〜１４−１１として示されている。
【０１３９】
図１６における第１〜第５のステップ１４−１〜１４−５は、ファームウェア４００がＰＣＩｅカード１８０〜１８３のＭＭＩＯ空間を読み出すために指示を出してから、ＰＣＩｅカード１８０〜１８３にメモリ読み出しが通知されるまでを表している。すなわち、図１６における第１〜第５のステップ１４−１〜１４−５は、本発明の第１の実施形態の説明で参照した図１１における第１〜第５のステップ１２−１〜１２−５と同様であるので、さらなる詳細な説明を省略する。
【０１４０】
ここで、ＰＣＩｅカード１８０〜１８３がＰＣＩｅスイッチ１４０に向けてコンプレーションおよびデータを返却する際に、ＰＣＩｅのパケットが壊れた場合について考える。
【０１４１】
第６のステップ１４−６において、対象となるＰＣＩｅカード１８０〜１８３は、ＰＣＩｅスイッチ１４０に対してコンプリーションおよびデータを返す。
【０１４２】
次に、第７のステップ１４−７において、ＰＣＩｅスイッチ１４０は、ＰＣＩｅカード１８０〜１８３から返されたコンプリーションおよびデータが不正なＴＬＰ（Ｔｒａｎｓａｃｔｉｏｎ  Ｌａｙｅｒ  Ｐａｃｋｅｔ：トランザクション層パケット）であることを検出する。
【０１４３】
次に、第８のステップ１４−８において、ＰＣＩｅスイッチ１４０が、ＰＣＩｅコントローラ１２３に向けて、障害の報告を行う。
【０１４４】
次に、第９のステップ１４−９において、ＰＣＩｅコントローラ１２３が、コア１２１に向けて、障害割り込みの報告を行う。
【０１４５】
次に、第１０のステップ１４−１０において、コア１２１は、例外ハンドラ６３０を実行する。なお、例外ハンドラ６３０を実行しない場合は、第１１のステップ１４−１１においてシステムのリセットが行われる。
【０１４６】
図１７Ａは、本発明の第３の実施形態による例外ハンドラ６３０の動作を示すフローチャートの前半部分である。図１７Ｂは、本発明の第３の実施形態による例外ハンドラ６３０の動作を示すフローチャートの後半部分である。ここで、図１７Ａおよび図１７Ｂのフローチャートは、接続点Ｅ、Ｆを介して接続されている。図１７Ａおよび図１７Ｂのフローチャートは、第１〜第１６のステップ６３０−１〜６３０−１６を具備している。例外ハンドラ６３０が開始すると、まず、第１のステップ６３０−１が実行される。
【０１４７】
第１のステップ６３０−１において、例外状態レジスタ１２１−６１を参照してＰＣＩｅコントローラ１２３からの障害割り込みが発生しているかどうかを確認する。第１のステップ６３０−１の次に、第２のステップ６３０−２が実行される。
【０１４８】
第２のステップ６３０−２において、障害割り込みが発生しているかどうかが判定される。障害割り込みが発生している場合（Ｙｅｓ）は、次に第３のステップ６３０−３が実行される。障害割り込みが発生していない場合（Ｎｏ）は、次に第１５のステップ６３０−１５が実行される。
【０１４９】
第３のステップ６３０−３において、ＰＣＩｅスイッチ１４０のダウンストリームポート１４３〜１４６のコンフィグレーション空間２００よりＡＥＲ機能構造体２１０を読み出し、障害要因を確認する。第３のステップ６３０−３の次に、第４のステップ６３０−４が実行される。
【０１５０】
第４のステップ６３０−４において、障害要因があるかどうかを判定する。障害要因がある場合（Ｙｅｓ）は、次に第５のステップ６３０−５が実行される。障害要因がない場合（Ｎｏ）は、次に第１５のステップ６３０−１５が実行される。
【０１５１】
第５のステップ６３０−５において、不正なトランザクション層パケットの受信を検出しているかどうかを確認する。第５のステップ６３０−５の次に、第６のステップ６３０−６が実行される。
【０１５２】
第６のステップ６３０−６において、不正なトランザクション層パケットの受信が検出されているかどうかを判定する。不正なトランザクション層パケットの受信が検出されている場合（Ｙｅｓ）は、次に第７のステップ６３０−７が実行される。不正なトランザクション層パケットの受信が検出されていない場合（Ｎｏ）は、次に第１５のステップ６３０−１５が実行される。
【０１５３】
第７のステップ６３０−７において、障害を検出したダウンストリームポート１４３〜１４６に対応するＰＣＩｅカード番号ｎを変数Ａに格納し、対応する例外フラグ５２０〜５２３をセットする。第７のステップ６３０−７の次に、第８のステップ６３０−８が実行される。
【０１５４】
第８のステップ６３０−８において、例外アドレスレジスタ１２１−６０の示すアドレスより実行中の命令を読み出す。第８のステップ６３０−８の次に、第９のステップ６３０−９が実行される。
【０１５５】
第９のステップ６３０−９において、読み出した命令を解析し、ＰＣＩｅカード１８０〜１８３のＭＭＩＯ空間に対するロード命令であるかを確認する。第９のステップ６３０−９の次に、第１０のステップ６３０−１０が実行される。
【０１５６】
第１０のステップ６３０−１０において、ロード命令であるかどうかを判定する。ロード命令である場合（Ｙｅｓ）は、次に第１１のステップ６３０−１１が実行される。ロード命令でない場合（Ｎｏ）は、次に第１５のステップ６３０−１５が実行される。
【０１５７】
第１１のステップ６３０−１１において、読み出し先アドレスに対応するＰＣＩｅカード１８０〜１８３の番号ｍを特定し、変数Ａと一致するかどうかを確認する。第１１のステップ６３０−１１の次に、第１２のステップ６３０−１２が実行される。
【０１５８】
第１２のステップ６３０−１２において、番号ｍが変数Ａに一致するかどうかを判定する。番号ｍが変数Ａに一致する場合（Ｙｅｓ）は、次に第１３のステップ６３０−１３が実行される。番号ｍが変数Ａに一致しない場合（Ｎｏ）は、次に第１５のステップ６３０−１５が実行される。
【０１５９】
第１３のステップ６３０−１３において、次命令を示すように例外アドレスレジスタ１２１−６０を加算し、例外ハンドラ６３０より通常の処理に戻る。第１３のステップ６３０−１３の次に、第１４のステップ６３０−１４が実行される。
【０１６０】
第１４のステップ６３０−１４において、例外ハンドラ６３０が終了する。
【０１６１】
第１５のステップ６３０−１５において、他の障害要因を確認し、対応する処理を行う。第１５のステップ６３０−１５の次に、第１６のステップ６３０−１６が実行される。
【０１６２】
第１６のステップ６３０−１６において、例外ハンドラ６３０が終了する。
【０１６３】
以上に説明したように、本発明の第３の実施形態による例外ハンドラ６３０は、まず、第１〜第７のステップ６３０−１〜６３０−７において、ＰＣＩｅスイッチ１４０のダウンストリームポート１４３〜１４６で不正なトランザクション層パケットを受信しているならば、そのダウンストリームポート１４３〜１４６に対応するＰＣＩｅカード１８０〜１８３の例外フラグ５２０〜５２３を設定する。次に、第８〜第１３のステップ６３０−８〜６３０−１３において、実行中の命令が不正なトランザクション層パケットを検出したダウンストリームポート１４３〜１４６に対応するＰＣＩｅカード１８０〜１８３のＭＭＩＯ空間に対するロード命令ならば、例外アドレスレジスタ１２１−６０を、次の命令を示すように加算し、例外ハンドラより戻る。これにより、ドライバ５００のサブルーチン５３０は実施例の動作の説明のとおりの効果が期待できる。
【０１６４】
本発明による情報処理装置および情報処理方法において、上記に説明した各実施形態は、技術的に矛盾しない範囲で自由に組み合わせることが可能である。特に、第１の実施形態による例外ハンドラ６１０と、第２の実施形態による例外ハンドラ６２０と、第３の実施形態による例外ハンドラ６３０とは、それぞれ異なる障害要因を処理するべく構成されている。しかし、これら３つの例外ハンドラを適宜に組み合わせることで、これらの障害要因の全てを処理可能な例外ハンドラを構成しても良いことは当然である。
【符号の説明】
【０１６５】
１  外部装置
１００  情報処理装置
１１０  ＩＯコントローラ
１２０  プロセッサ
１２１  コア
１２１−０〜１２１−３１  汎用レジスタ
１２１−４０  プログラムカウンタ
１２１−４１  コントロールレジスタ
１２１−５０  割込アドレスレジスタ
１２１−５１  割込状態レジスタ
１２１−６０  例外アドレスレジスタ
１２１−６１  例外状態レジスタ
１２２、１２３  ＰＣＩｅコントローラ
１２４  メモリコントローラ
１２５  内部バス
１３０  メモリ
１４０  ＰＣＩｅスイッチ
１４１  アップストリームポート
１４２〜１４６  ダウンストリームポート
１４７  内部バス
１５０〜１５３  ＰＣＩｅ配線
１６０〜１６３  ＰＣＩｅ配線
１７０  バス
１８０〜１８３  ＰＣＩｅカード
２００  コンフィグレーション空間
２０１  ＰＣＩ３．０互換コンフィグレーション空間ヘッダ
２０２  ＰＣＩｅ機能構造体
２０３  ＰＣＩコンフィグレーション空間
２０４  ＰＣＩｅ拡張コンフィグレーション空間
２１０  ＡＥＲ機能構造体
２１１  ＰＣＩｅ拡張機能ヘッダ
２１２  訂正不能障害状態レジスタ
２１３  訂正不能障害マスクレジスタ
２１４  訂正不能障害深刻度レジスタ
２１５  訂正可能障害状態レジスタ
２１６  訂正可能障害マスクレジスタ
２１７  ＡＥＲ機能および制御レジスタ
２１８  ヘッダログレジスタ
２１９  ルート障害コマンド
２２０  ルート障害状態
２２１  障害ソースＩＤレジスタ
２２２  訂正可能障害ソースＩＤレジスタ
２２３  トランザクション層パケットプレフィックスログレジスタ
４００  ファームウェア
５００  ドライバ
５１０  データ領域
５２０〜５２３  ＰＣＩｅカード３の例外フラグ
５３０  ＭＭＩＯ空間読み出し
６００、６１０、６２０、６３０  例外ハンドラ
２０００  周辺装置
３０００  周辺装置
【図１】
0005682829.tif 000002
【図２】
0005682829.tif 000003
【図３】
0005682829.tif 000004
【図４】
0005682829.tif 000005
【図５】
0005682829.tif 000006
【図６】
0005682829.tif 000007
【図７】
0005682829.tif 000008
【図８】
0005682829.tif 000009
【図９】
0005682829.tif 000010
【図１０】
0005682829.tif 000011
【図１１】
0005682829.tif 000012
【図１２】
0005682829.tif 000013
【図１３Ａ】
0005682829.tif 000014
【図１３Ｂ】
0005682829.tif 000015
【図１４】
0005682829.tif 000016
【図１５Ａ】
0005682829.tif 000017
【図１５Ｂ】
0005682829.tif 000018
【図１６】
0005682829.tif 000019
【図１７Ａ】
0005682829.tif 000020
【図１７Ｂ】
0005682829.tif 000021