説明

情報処理装置

【課題】複数のPCIeカードのうち、一部のPCIeカードに障害が発生しても、その他のPCIeカードが正常な動作を継続できる情報処理装置と、この情報処理装置を用いた情報処理方法とを提供する。
【解決手段】本発明の情報処理装置および情報処理方法によれば、複数のPCIeカードのそれぞれについて、その状態を個別に管理するデータ領域を設けることで、異常が発生したPCIeカードに係る命令をスキップすることが可能になり、情報処理装置全体のシステムリセットを回避できる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置と、この情報処理装置を用いる情報処理方法とに係り、特に、PCIe(Peripheral Component Interconnect Express)カードを用いる情報処理装置と、この情報処理装置を用いる情報処理方法とに係る。
【背景技術】
【0002】
今日の社会には、その基板の一部として、情報処理装置が広く普及している。一般的な情報処理装置は、入出力回路部を介して演算回路部に接続することで、様々な機器の制御を可能にしている。このような接続を行うための規格として、PCIe(Peripheral Component Interconnect Express)が知られている。
【0003】
PCIeの規格を用いる情報処理装置の構成および動作の例について、概略的に説明する。このような情報処理装置では、所定のプログラムを実行するコアが、PCIeコントローラやPCIeスイッチを介して、複数のPCIeカードを制御するのが一般的である。
【0004】
ここで、複数のPCIeカードの一部に障害が発生すると、他のPCIeカードが正常に動作していたとしても、情報処理装置全体のシステムをリセットする羽目に陥る場合がある。
【0005】
上記に関連して、特許文献1には、例外処理システムに係る記載が開示されている。この例外処理システムは、CPUと、コプロセッサとが接続され、CPU内では一連の命令が動機的に処理され、コプロセッサ側ではCPUから依頼された処理を非同期的に行うシステムで用いられる。コプロセッサ内には、コプロセッサ命令キューと、コプロセッサ演算器とが具備されている。この例外処理システムは、コプロセッサ演算器内で例外が発生した場合に、その例外をコプロセッサ命令キュー内に設けた例外フラグ用レジスタに書き込むことによって例外処理を行うように構成したことを特徴としている。
【0006】
また、特許文献2には、入出力ファブリック内のキューをクリアする方法に係る記載が開示されている。この方法は、キューがデッドロックされていることを検出するステップと、キューへのアクセスを使用禁止にするステップと、キュー内のエントリーをクリアするステップと、キューへのアクセスを再び使用可能にするステップとを含む。
【0007】
また、特許文献3には、ハイパバイザを有する計算機システムに係る記載が開示されている。この計算機システムは、少なくとも1つの仮想計算機を管理するハイパバイザと、I/Oコントローラユニットとを備える。複合I/Oコントローラは、複数のI/Oコントローラと、各I/Oコントローラが共有可能な複数のI/Oポートとを有する。複数のI/Oコントローラのうちの少なくとも1つのI/Oコントローラが、いずれかの仮想計算機に割り当てられている。各I/Oポートに、いずれかのI/Oデバイスと、いずれかのI/Oコントローラが接続されている。ハイパバイザは、以下の(a)乃至(c)の処理を行う。(a)仮想計算機から発行されたI/O命令を捕捉する。(b)I/O命令に従うI/Oのターゲットが、I/O命令の発行元の仮想計算機に割り当てられていないI/Oコントローラに接続されたI/Oポートに係るデバイスである非割当ポート関連デバイスであるか否かを判断する。(c)(b)の判断の結果が肯定的であれば、非割当ポート関連デバイスに対するI/Oを行わず、仮想的な実行結果をI/O命令の発行元の仮想計算機に返す。
【0008】
また、特許文献4には、計算機に係る記載が開示されている。この計算機は、メモリと、CPUと、ルートポートとを有する。ここで、このメモリは、BIOSを記憶する。このCPUは、BIOSを実行する。このルートポートは、プライマリバスを介してCPUに接続され、セカンダリバスを介してPCIエクスプレス・ルートに接続され、PCIエクスプレス・ブリッジとして機能する。この計算機は、以下のことを特徴とする。すなわち、ルートポートは、PCIエクスプレス・ルート上の障害を検出してCPUにSMI(システム・メンテナンス・インタラプト)を発行する。また、CPUは、SMIを受け付け、BIOSを実行することによって、ルートポートを介して障害の発生したPCIエクスプレス・ルートにPCIエクスプレス・リセットを発行する。
【0009】
また、特許文献5には、CPU再リセットを伴うCPU再初期化時におけるタイムアウトを防止するためのタイムアウト防止装置に係る記載が開示されている。このタイムアウト防止装置は、コンテキスト保存手段と、IOトランザクション停止手段と、CPUリセット手段と、コンテキスト復帰手段と、IOトランザクション開始手段とを備える。ここで、このコンテキスト保存手段は、CPUの再リセットが必要となった際に、CPUのレジスタ状態を保存する。このIOトランザクション停止手段は、IOトランザクションの停止を行う。このCPUリセット手段は、CPUのリセット処理を行う。このコンテキスト復帰手段は、コンテキスト保存手段が保存したCPUのレジスタ状態に基づいてコンテキストリストアを行う。このIOトランザクション開始手段は、IOトランザクション停止手段が停止させたIOトランザクションを再開させる。このタイムアウト防止装置は、レジスタ状態の保存をした後に第1のIOトランザクションの停止を行い、CPUリセット処理を行った後に第1のIOトランザクションの開始を行い、第1のIOトランザクションの開始をした後に第2のIOトランザクションの停止を行い、コンテキストリストアを行った後に第2のIOトランザクションの開始を行うことを特徴としている。
【先行技術文献】
【特許文献】
【0010】
【特許文献1】特開平4−106652号公報
【特許文献2】特開2008−009980号公報
【特許文献3】特開2010−218478号公報
【特許文献4】特開2010−231340号公報
【特許文献5】特開2011−081544号公報
【発明の概要】
【発明が解決しようとする課題】
【0011】
本発明の目的は、一部のPCIeカードに障害が発生しても、その他のPCIeカードが正常な動作を継続できる情報処理装置と、この情報処理装置を用いた情報処理方法とを提供することである。
【課題を解決するための手段】
【0012】
本発明による情報処理装置は、複数のPCIeカードと、プロセッサと、PCIeコントローラと、データ領域とを具備する。ここで、プロセッサは、複数のPCIeカードを制御するためのファームウェアを実行する。PCIeコントローラは、複数のPCIeカードのそれぞれについて、異常の発生を検知する。データ領域は、それぞれのPCIeカードについて、異常の情報を個別に管理する。プロセッサは、データ領域が管理する情報に基づいて、異常が発生したPCIeカードに対する命令をスキップすることで、ファームウェアの実行を継続する。
【0013】
本発明による情報処理方法は、プロセッサがファームウェアを実行することで複数のPCIeカードを制御するステップと、複数のPCIeカードのそれぞれについて、異常の発生をPCIeコントローラで検知するステップと、それぞれのPCIeカードについて、異常の情報をデータ領域で個別に管理するステップとを具備する。制御するステップは、データ領域で管理された情報に基づいて、異常が発生したPCIeカードに対する命令をスキップして、ファームウェアの実行を継続するステップを具備する。
【発明の効果】
【0014】
本発明の情報処理装置および情報処理方法によれば、複数のPCIeカードのそれぞれについて、その状態を個別に管理するデータ領域を設けることで、異常が発生したPCIeカードに係る命令をスキップすることが可能になり、情報処理装置全体のシステムリセットを回避できる。
【図面の簡単な説明】
【0015】
【図1】図1は、一般的な情報処理装置の構成の一例を概略的に示すブロック図である。
【図2】図2は、図1のプロセッサの構成の一例を概略的に示すブロック図である。
【図3】図3は、図1のPCIeスイッチの構成の一例を概略的に示すブロック図である。
【図4】図4は、PCIeの仕様に準拠するコンフィグレーション空間の構成を示すメモリマップである。
【図5】図5は、PCIeの仕様に準拠するAER(Advanced Error Reporting:拡張エラー報告)機能構造体の構成を示すメモリマップである。
【図6】図6は、コアの一般的な内部構成を概略的に示すブロック図である。
【図7】図7は、メモリに格納されて、コアによって実行される命令の一例である。
【図8】図8は、図1〜図7に示した情報処理装置の各構成要素において、コア上で動作するファームウェアがPCIeカードのMMIO(Memory Mapped In/Out)空間からデータを読み出すまでの一連の動作を示す図である。
【図9】図9は、図1〜図7に示した情報処理装置の各構成要素において、コア上で動作するファームウェアがPCIeカードのMMIO空間からデータを読み出せない場合の一連の動作を示す図である。
【図10】図10は、本発明の第1の実施形態による情報処理装置がさらに具備するデータ領域の構成を示すメモリマップである。
【図11】図11は、本発明の第1の実施形態による情報処理装置の各構成要素において、コア上で動作するファームウェアがPCIeカードのMMIO空間からデータを読み出せない場合の一連の動作を示す図である。
【図12】図12は、本発明の第1の実施形態による情報処理方法においてドライバが実行するサブルーチンの動作を示すフローチャートである。
【図13A】図13Aは、本発明の第1の実施形態による情報処理方法において実行される例外ハンドラの動作を示すフローチャートの前半部分である。
【図13B】図13Bは、本発明の第1の実施形態による情報処理方法において実行される例外ハンドラの動作を示すフローチャートの後半部分である。
【図14】図14は、本発明の第2の実施形態による情報処理装置の各構成要素において、コア上で動作するファームウェアがPCIeカード180〜183のMMIO空間からデータを読み出せない別の場合の一連の動作を示す図である。
【図15A】図15Aは、本発明の第2の実施形態による例外ハンドラの動作を示すフローチャートの前半部分である。
【図15B】図15Bは、本発明の第2の実施形態による例外ハンドラの動作を示すフローチャートの後半部分である。
【図16】図16は、本発明の第3の実施形態による情報処理装置の各構成要素において、コア上で動作するファームウェアがPCIeカードのMMIO空間からデータを読み出せないさらに別の場合の一連の動作を示す図である。
【図17A】図17Aは、本発明の第3の実施形態による例外ハンドラの動作を示すフローチャートの前半部分である。
【図17B】図17Bは、本発明の第3の実施形態による例外ハンドラの動作を示すフローチャートの後半部分である。
【発明を実施するための形態】
【0016】
添付図面を参照して、本発明による情報処理装置および情報処理方法を実施するための形態を以下に説明する。
【0017】
(第1の実施形態)
図1は、本発明の第1の実施形態による情報処理装置100の構成の一例を概略的に示すブロック図である。図1に示した情報処理装置100の構成要素について説明する。図1の情報処理装置は、IO(In/Out)コントローラ110と、プロセッサ120と、メモリ130と、PCIeスイッチ140と、複数のPCIeカード180〜183とを具備している。
【0018】
図1に示した情報処理装置100の構成要素の接続関係について説明する。IOコントローラ110は、PCIe配線153を介して外部装置1に接続されている。IOコントローラ110は、PCIe配線150を介してプロセッサ130に接続されている。IOコントローラ110は、PCIe配線152を介してPCIeスイッチ140に接続されている。プロセッサ130は、バス170を介してメモリ130に接続されている。プロセッサ130は、PCIe配線151を介してPCIeスイッチ140に接続されている。PCIeスイッチ140は、複数のPCIe配線160〜163を介して複数のPCIeカード180〜183にそれぞれ接続されている。複数のPCIeカード180〜183は、複数の配線2001、2002、3001および3002を介して複数の周辺装置2000、3000に接続されている。
【0019】
図2は、図1のプロセッサ120の構成の一例を概略的に示すブロック図である。プロセッサ120は、コア121と、第1、第2のPCIeコントローラ122、123と、メモリコントローラ124と、内部バス125とを具備している。プロセッサ120は、コア121と、第1、第2のPCIeコントローラ122、123と、メモリコントローラ124とは、内部バス125に接続されている。第1、第2のPCIeコントローラ122、123は、PCIe配線150、151にそれぞれ接続されている。メモリコントローラ124は、バス170に接続されている。
【0020】
図3は、図1のPCIeスイッチ140の構成の一例を概略的に示すブロック図である。PCIeスイッチ140は、アップストリームポート141と、第1〜第5のダウンストリームポート142〜146と、内部バス147とを具備している。アップストリームポート141と、第1〜第5のダウンストリームポート142〜146とは、内部バス147に接続されている。アップストリームポート141は、PCIe配線151に接続されている。第1〜第5のダウンストリームボート142〜146は、PCIe配線152、160〜163にそれぞれ接続されている。
【0021】
図4は、PCIeの仕様に準拠するコンフィグレーション空間200の構成を示すメモリマップである。プロセッサ120のPCIeコントローラ122、123と、PCIeスイッチ140の各ポート140〜146と、PCIeカード180〜183とは、全て、PCIeの仕様に準拠している。すなわち、これらの構成要素は、それぞれ、図4に示したコンフィグレーション空間200を有している。
【0022】
図4のコンフィグレーション空間200は、アドレス00hからアドレスFFFhまでの領域を具備している。アドレス00hからアドレス3Fhまでの領域には、PCI3.0互換コンフィグレーション空間ヘッダ201が含まれている。アドレス3FhからFFhの範囲に含まれる領域には、PCIe機能構造体202が含まれている。アドレス100hからアドレスFFFhの範囲に含まれる領域には、AER(Advanced Error Reporting:拡張エラー報告)機能構造体210が含まれている。ここで、アドレス00hからアドレスFFhまでの範囲は、PCIコンフィグレーション空間203と呼ばれる。また、アドレス100hからアドレスFFFhまでの範囲は、PCIe拡張コンフィグレーション空間204と呼ばれる。
【0023】
図5は、PCIeの仕様に準拠するAER機能構造体210の構成を示すメモリマップである。図5のAER機能構造体210は、オフセットアドレス00hからオフセットアドレス38h以降までの領域を具備している。オフセットアドレス00hからオフセットアドレス04hまでの領域には、PCIe拡張機能ヘッダ211が含まれている。オフセットアドレス04hからオフセットアドレス08hまでの領域には、訂正不能障害状態レジスタ212が含まれている。オフセットアドレス08hからオフセットアドレス0Chまでの領域には、訂正不能障害マスクレジスタ213が含まれている。オフセットアドレス0Chからオフセットアドレス10はまでの領域には、訂正不能障害深刻度レジスタ214が含まれている。オフセットアドレス10hからオフセットアドレス14hまでの領域には、訂正可能障害状態レジスタ215が含まれている。オフセットアドレス14hからオフセットアドレス18hまでの領域には、訂正可能障害マスクレジスタ216が含まれている。オフセットアドレス18hからオフセットアドレス1Chまでの領域には、AER機能および制御レジスタ217が含まれている。オフセットアドレス1Chからオフセットアドレス2Chまで領域には、ヘッダログレジスタ218が含まれている。オフセットアドレス2Chからオフセットアドレス30hまでの領域には、ルート障害コマンド219が含まれている。オフセットアドレス30hからオフセットアドレス34hまでの領域には、ルート障害状態220が含まれている。オフセットアドレス34hからオフセットアドレス38hまでの領域には、221と、訂正可能障害ソースIDレジスタ222とが含まれている。オフセットアドレス38h以降の領域には、トランザクション層パケットプレフィックスログレジスタ223が含まれている。
【0024】
また、PCIeコントローラ122、123は、PCIeのAER機能により、PCIeの障害をコア121に例外通知または割込通知する機能を持っている。これらは、PCIeの仕様で定められた一般的な機能であるので、さらなる詳細な説明を省略する。
【0025】
図6は、コア121の一般的な内部構成を概略的に示すブロック図である。図6を参照して、一般的なコア121の構成要素について説明する。コア121は、汎用レジスタ121−0〜121−31と、プログラムカウンタ121−40と、コントロールレジスタ121−41と、割込アドレスレジスタ121−50と、割込状態レジスタ121−51と、例外アドレスレジスタ121−60と、例外状態レジスタ121−61とを具備している。
【0026】
図6に示した一般的なコア121の構成要素の機能について説明する。プログラムカウンタ121−40は、実行中の命令のアドレスを示す。コントロールレジスタ121−41は、演算命令の結果や分岐命令の制御に使用される。割込アドレスレジスタ121−50は、割込が発生したときに割込処理から戻ったときに実行される命令のアドレスを示す。割込状態レジスタ121−51は、割込元を示す。例外アドレスレジスタ121−60は、例外が発生したときに実行中の命令アドレスを示す、または例外の元になった命令アドレスを示す。例外状態レジスタ121−61は、例外要因を示す。
【0027】
図7は、メモリ130に格納されて、コア121によって実行される命令の一例である。例えば、アドレス0x100Cの命令40は、gr2番の汎用レジスタ121−32に格納されたアドレスが示すメモリ上のデータを4バイト分読み出し、gr1番の汎用レジスタ121−31に格納することを意味している。同様に、アドレス0x1010の命令41は、gr1番の汎用レジスタ121−31のデータを4バイト分読み出し、gr5番の汎用レジスタ121−35に格納されたアドレスが示すメモリ上に格納することを意味している。
【0028】
図8は、図1〜図7に示した情報処理装置100の各構成要素において、コア121上で動作するファームウェア400がPCIeカード180〜183のMMIO(Memory Mapped In/Out)空間からデータを読み出すまでの一連の動作を示す図である。図8には、ファームウェア400と、ドライバ500と、一般的な例外ハンドラ600と、コア121と、PCIeコントローラ123と、PCIeスイッチ140と、PCIeカード180〜183との動作が、合計10個のステップ10−1〜10−10として示されている。
【0029】
ここで、図8を参照して、情報処理装置100の全ての構成要素が正常に動作する理想的な場合の情報処理方法について説明する。まず、通常、ファームウェア400は、PCIeデバイスのMMIO空間へのアクセスを、ドライバ500を介して行うように設計されている。そこで、第1のステップ10−1において、ファームウェア400が、ドライバ500に対して、読み出し先アドレスを指定した上でMMIO空間の読み出しを指示する。一般的には、この第1のステップ10−1の実行は、ファームウェア400がドライバ500のサブルーチンを実行することに、実質的に等しい。
【0030】
次に、第2のステップ10−2において、ドライバ500は、指定された読み出し先アドレスに基づいて、読み出し対象となるPCIeカード180〜183を特定する。この特定動作は、MMIO空間がPCIeデバイス毎に決まっているので可能となっている。ドライバ500は、PCIeカード180〜183毎の管理情報を確認し、問題なければ、指定されたアドレスを用いてロード(読み出し、ld)命令をコア121上で実行する。このロード命令をニーモニックで表すと、例えば、図7に示した命令40のように表される。
【0031】
次に、第3のステップ10−3において、コア121がロード命令を実行する。ここで、コア121は、読み出し先アドレスを確認する。コア121は、確認されたアドレスがPCIeデバイスのMMIO空間を示していると判断した場合は、対象となるPCIeコントローラ123に対して、内部バス125のトランザクションにより、MMIO空間の読み出しを指示する。なお、コア121と、PCIeコントローラ122、123との間のトランザクションについては、プロセッサ120のアーキテクチャに依存するので、さらなる詳細な説明を省略する。
【0032】
次に、第4のステップ10−4において、PCIeコントローラ123は、コア121からMMIO空間の読み出しを指示されると、PCIeスイッチ140に対して、PCIeのトランザクションでメモリ読み出し要求を行う。ここで、PCIeスイッチ140は、対象となるPCIeカード180〜183の前段に接続されている。PCIeコントローラ123は、この要求を行った後、そのコンプリーションを待つ状態に移行する。
【0033】
次に、第5のステップ10−5において、PCIeスイッチ140は、PCIeコントローラから受け取ったトランザクションを、対象となるPCIeカード180〜183に向けて転送する。なお、これら第4、第5のステップ10−4、10−5におけるトランザクションは、PCIeの仕様に準拠するので、さらなる詳細な説明を省略する。
【0034】
次に、第6のステップ10−6において、メモリ読み出しのトランザクションを受信したPCIeカード180〜183は、そのトランザクションで指定されたアドレスのデータを読み出す。PCIeカード180〜183は、読み出したデータおよびコンプリーションのトランザクションを、メモリ読み出しを仲介したPCIeスイッチ140に向けて送信する。
【0035】
次に、第7のステップ10−7において、PCIeスイッチ140は、読み出したデータおよびコンプリーションのトランザクションを受信し、メモリ読み出しの要求元であるPCIeコントローラ123に向けて転送する。
【0036】
次に、第8のステップ10−8において、PCIeコントローラ123は、PCIeスイッチ140から受信したデータを、内部バス125のトランザクションにより、コア121に対してリプライする。
【0037】
次に、第9のステップ10−9において、リプライを受信したコア121は、図7に示した命令40に従って、受信したデータをレジスタに格納し、ロード命令を完了させ、次の命令を実行する。コア121が、次の命令により実行を再開することによって、ドライバ500の処理は完了する。
【0038】
次に、第10のステップ10−10において、ファームウェア400は読み出されたデータをドライバ500から受け取り、処理を継続することが出来るようになる。
【0039】
以上に説明した第1〜第10のステップ10−1〜10−10の動作は、PCIeを用いた図1の様な情報処理装置においては一般的なものであり、従来技術の場合も同様である。
【0040】
図9は、図1〜図7に示した情報処理装置100の各構成要素において、コア121上で動作するファームウェア400がPCIeカード180〜183のMMIO空間からデータを読み出せない場合の一連の動作を示す図である。図9には、ファームウェア400と、ドライバ500と、一般的な例外ハンドラ600と、コア121と、PCIeコントローラ123と、PCIeスイッチ140と、PCIeカード180〜183との動作が、合計10個のステップ11−1〜11−10として示されている。
【0041】
ここで、図9を参照して、情報処理装置100の中で、PCIeカード180〜183の一部が故障しており、ファームウェア400からのMMIO空間読み出しが無応答になる場合の情報処理方法について説明する。ただし、これは一般的な例外ハンドラ600を用いた場合の、すなわち従来技術で起こり得る問題である。本発明の第1の実施形態でこの問題を回避する方法については後述する。
【0042】
まず、ファームウェア400がMMIO空間読み出しを指示してから、メモリ読み出しを要求するトランザクションがPCIeカード180〜183に届くまでの動作は、図8で説明した正常な動作と同じである。すなわち、図9に示した第1〜第5のステップ11−1〜11−5は、図8に示した第1〜第5のステップ10−1〜10−5と同様であるので、さらなる詳細な説明を省略する。
【0043】
次に、第6のステップ11−6において、PCIeカード180〜183の一部が故障して、メモリ読み出しのトランザクションに対して無応答になる場合を考える。この場合、故障したPCIeカード180〜183は、コンプリーションをPCIeコントローラ123に返せない。
【0044】
次に、第7のステップ11−7において、故障したPCIeカード180〜183からのコンプリーションが届かないまま所定の時間が経過すると、PCIeコントローラ123がコンプリーションタイムアウトを検出する。
【0045】
次に、第8のステップ11−8において、PCIeコントローラ123は、コア121に向けて、割り込み処理によって障害の報告を行う。
【0046】
次に、第9のステップ11−9において、割り込み処理で障害の発生を通知されたコア121は、例外処理を実行する判断を行う。このとき、例外アドレスレジスタ121−60は、実行中の命令アドレスを格納する。この例では、図7の命令40のアドレス「0x100C」が格納される。また、例外状態レジスタ121−61には、例外処理の要因が格納される。この例では、PCIeコントローラ123からの障害割り込みである要因が格納される。
【0047】
このとき、MMIO空間の読み出しを行ったロード命令(40)は完了していない。また、読み出されるはずのデータはレジスタに格納されていない。したがって、ドライバ500はファームウェア400に読み出したデータを受け渡すことが出来ない。また、ファームフェア400は処理を継続することが出来なくなる。そこで、一般的には、コア121が例外ハンドラ600の実行を指示する。
【0048】
次に、第10のステップ11−10において、例外ハンドラ600がシステムリセットを行うことで、情報処理装置100全体の復旧を試みる。
【0049】
以上に説明したように、従来の情報処理装置100には、複数のPCIeカード180〜183のうち、一枚でも故障すると、情報処理装置100全体を故障として扱わなければならない、という問題がある。以降、本発明の第1の実施形態でこの問題を回避できることを説明する。
【0050】
図10は、本発明の第1の実施形態による情報処理装置100がさらに具備するデータ領域510の構成を示すメモリマップである。
データ領域510の構成要素について説明する。データ領域510は、第1〜第4の例外フラグ520〜523を具備している。なお、データ領域510は、プロセッサ120に含まれていても良いし、メモリ130に含まれていても良い。
【0051】
データ領域510の各構成要素の動作について説明する。第1〜第4の例外フラグ520〜523は、第1〜第4のPCIeカード180〜183の障害状態をそれぞれ格納する。第1〜第4の例外フラグ520〜523の内容は、本発明の第1の実施形態による情報処理装置100の各構成要素から読み出しおよび書き込みが可能であるものとする。
【0052】
図11は、本発明の第1の実施形態による情報処理装置100の各構成要素において、コア121上で動作するファームウェア400がPCIeカード180〜183のMMIO空間からデータを読み出せない場合の一連の動作を示す図である。図11には、ファームウェア400と、ドライバ500と、例外ハンドラ610と、コア121と、PCIeコントローラ123と、PCIeスイッチ140と、PCIeカード180〜183との動作が、合計15個のステップ12−1〜12−15として示されている。
【0053】
ここで、図11を参照して、情報処理装置100の中で、PCIeカード180〜183の一部が故障しており、ファームウェア400からのMMIO空間読み出しが無応答になる場合の情報処理方法について説明する。まず、第1のステップ12−1において、ファームウェア400がPCIeカード180〜183のMMIO空間を読み出すために、ドライバ500にサブルーチン530の実行を指示する。このとき、ファームウェア400は、サブルーチン530に対して、読み出し先アドレスと、読み出したデータを格納するアドレスとを受け渡す。
【0054】
第2のステップ12−2において、ドライバ500のサブルーチン530は、指定された読み出し先アドレスから、対象となるPCIeカード180〜183を特定する。また、ドライバ500のサブルーチン530は、指定された読み出し先アドレスから、対応する例外フラグ520〜523をクリアする。このクリアする動作は、後述する図12のフローチャートにおける第1のステップ530−1に対応する。
【0055】
そして、サブルーチン530は、ファームウェア400から指定されたアドレスより、データを読み出す。この読み出す動作は、後述する図12のフローチャートにおける第2のステップ530−2に対応する。
【0056】
第3のステップ12−3において、コア121はロード命令を実行し、PCIeコントローラ123に向けてメモリ読み出しのトランザクションを発行する。
【0057】
第4のステップ12−4において、PCIeコントローラ123は、コア121から受け取ったトランザクションをPCIeスイッチ140に向けて転送する。
【0058】
第5のステップ12−5において、PCIeスイッチ140は、PCIeコントローラ123から受け取ったトランザクションを、対象となるPCIeカード180〜183に向けて転送する。
【0059】
なお、この時点において、コア121は、PCIeコントローラ123よりリプライがあるまでロード命令を実行中のままになる。また、プログラムカウンタ121−40は、ロード命令のアドレスを示したままになる。
【0060】
次に、第6のステップ12−6において、PCIeカード180〜183の一部が故障して、メモリ読み出しのトランザクションに対して無応答になる場合を考える。この場合、故障したPCIeカード180〜183は、コンプリーションをPCIeコントローラ123に返せない。
【0061】
次に、第7のステップ12−7において、故障したPCIeカード180〜183からのコンプリーションが届かないまま所定の時間が経過すると、PCIeコントローラ123がコンプリーションタイムアウトを検出する。
【0062】
次に、第8のステップ12−8において、PCIeコントローラ123は、コア121に向けて、割り込み処理によって障害の報告を行う。
【0063】
次に、第9のステップ12−9において、割り込み処理で障害の発生を通知されたコア121は、例外ハンドラ610の実行を指示する。このとき、コア121の動作により、例外アドレスレジスタ121−60にはドライバ500のサブルーチン530で実行したロード命令のアドレスが格納される。また、同じくコア121の動作により、例外状態レジスタ121−61にはPCIeコントローラ123からの障害割り込みであることが設定される。
【0064】
例外ハンドラ610では、例外状態レジスタ121−61の内容が確認される。この動作は、後述する図13Aにおける第1、第2のステップ610−1、610−2に対応する。
【0065】
確認の結果、PCIeコントローラ123からの障害割り込みであれば、PCIeコントローラ123のコンフィグレーション空間200よりAER機能構造体210が読み出される。また、障害要因の有無が確認される。この動作は、後述する図13Aにおける第3、第4のステップ610−3、610−4に対応する。
【0066】
ここで、障害要因があった場合は、障害要因を詳しく解析し、コンプリーションタイムアウトが検出されているかどうかを確認する。この動作は、後述する図13Aにおける第5のステップ610−5および図13Bにおける、第6のステップ610−6に対応する。
【0067】
もし、コンプリーションタイムが検出されているなら、例外アドレスレジスタ121−60が示すアドレスから実行中の命令を読み出す。この動作は、後述する図13Bにおける第7のステップ610−7に対応する。
【0068】
読み出した命令を解析して、PCIeカード180〜183のMMIO空間に対するロード命令であるかどうかを確認する。この動作は、後述する図13Bにおける第8、第9のステップ610−8、610−9に対応する。
【0069】
このとき、例外アドレスレジスタ121−60には、ドライバ500のサブルーチン530で実行した、PCIeカード180〜183のMMIO空間に対するロード命令を示すアドレスが格納されている。例外ハンドラ610は、読み出した命令がロード命令であることを確認し、ロード命令のオペランドより読み出し先アドレスを特定する。例えば、図7に示したロード命令40では、読み出し元アドレスがgr2番の汎用レジスタ121−32に格納されている。この場合、gr2番の汎用レジスタ121−32の内容を読み出すことで、PCIeカード180〜183のMMIO空間に対するロード命令であるかどうかを確認することが出来る。なお、プロセッサのアーキテクチャによって命令形式は様々であるので、ここでは命令の具体的な解析方法までは説明しない。また、一般的に例外ハンドラ610に移行する前に、汎用レジスタの内容はスタックに退避される。このため、そのスタックを読み出すことによって、ロード命令で使用したレジスタの内容を破壊されずに読み出すことが出来る。
【0070】
次に、第10のステップ12−10において、例外ハンドラ610は、PCIeカード180〜183に対するロード命令だと判断すると、読み出し先アドレスより対象PCIeカード180〜183を特定する。また、例外ハンドラ610は、対応する例外フラグ520〜523に0以外の値を格納してセットする。この動作は、後述する図13Bにおける第10のステップ610−10に対応する。
【0071】
次に、第11のステップ12−11において、例外アドレスレジスタ(EAR)121−60がロード命令の次の命令を示すように、例外アドレスレジスタ121−60に加算が行われる。この動作は、後述する図13Bにおける第11のステップ610−11に対応する。
【0072】
次に、第12のステップ12−12において、コア121の動作が例外ハンドラ610から戻る。この動作は、後述する図13Bにおける第11、第12のステップ610−11、610−12に対応する。
【0073】
例外ハンドラ610から通常の処理に戻る場合、コア121で専用の命令が実行される。その結果、例外アドレスレジスタ121−60の内容がプログラムカウンタ121−40に格納される。また、プログラムカウンタ121−40が示すアドレスの命令から処理が再開される。この動作は、図7におけるst命令41から処理を再開することに対応する。すなわち、図7におけるロード命令40は実行が完了しないままにスキップされることになる。そのため、gr1番の汎用レジスタ121−1の内容は更新されないままとなる。なお、この例では、gr1番の汎用レジスタ121−1の内容が、ファームウェア400に渡すべき、読み出されたデータとなる。
【0074】
なお、PCIeコントローラ123からの障害割り込みが無かった場合や、PCIeコントローラ123のAER機能構造体210に障害要因が無かった場合や、コンプリーションタイムアウトが検出されなかった場合には、他の障害要因を確認し、対応する処理を行うものとする。この動作は、後述する図13Bにおける第13、第14のステップ610−13、610−14に対応する。
【0075】
また、PCIeカード180〜183のMMIO空間に対するロード命令ではない場合には、情報処理装置100の障害と判断して、情報処理装置100をリセットすることで回復を試みるものとする。この動作は、後述する図13Bにおける第15、第16のステップ610−15、610−16に対応する。
【0076】
次に、第13のステップ12−13において、コア121は、ドライバ500に次の命令を実行するように指示する。すなわち、例外ハンドラ610から通常の処理に戻ったことにより、ドライバ500のサブルーチン530の処理が再開される。このとき、例外ハンドラ610によってロード命令はスキップされているので、サブルーチン530内における次の処理が実行される。サブルーチン530は、読み出し先PCIeカード180〜183に対応する例外フラグ520〜523の内容を確認する。この動作は、後述する図12における第3、第4のステップ530−3、530−4に対応する。
【0077】
次に、第14のステップ12−14において、確認された例外フラグ520〜523の内容が0以外であった場合には、ドライバ500のサブルーチン530がファームウェア400に異常終了を報告する。この動作は、後述する図12における第8、第9のステップ530−8、530−9に対応する。
【0078】
次に、第15のステップ12−15において、ファームウェア400は、故障したPCIeカード180〜183の障害処理を試みる。
【0079】
図12は、本発明の第1の実施形態による情報処理方法においてドライバ500が実行するサブルーチン530の動作を示すフローチャートである。サブルーチン530は、合計9個のステップ530−1〜530−9を具備している。
【0080】
サブルーチン530が開始すると、まず、第1のステップ530−1が実行される。第1のステップ530−1では、ファームウェア400より指定されたn番PCIeカード180〜183に対応するn番例外フラグ520〜523をクリアする。この第1のステップ530−1は、図11における第2のステップ12−2に対応する。第1のステップ530−1の次に、第2のステップ530−2が実行される。
【0081】
第2のステップ530−2では、ファームウェア400より指定されたアドレスよりデータを読み出す。この第2のステップ530−2は、図11における第2のステップ12−2に対応する。第2のステップ530−2の次に、第3のステップ530−3が実行される。
【0082】
第3のステップ530−3では、n番例外フラグ520〜523を確認する。第3のステップ530−3の次に、第4のステップ530−4が実行される。
【0083】
第4のステップ530−4では、n番例外フラグ520〜523が0に等しいかどうかを判定する。等しい場合(Yes)は、次に、第5のステップ530−5が実行される。等しくない(No)場合は、次に、第8のステップ530−8が実行される。
【0084】
第5のステップ530−5では、読み出したデータを、ファームウェア400が指定するアドレスに格納する。第5のステップ530−5の次に、第6のステップ530−6が実行される。
【0085】
第6のステップ530−6では、ファームウェア400に正常終了を報告する。第6のステップ530−6の次に、第7のステップ530−7が実行される。
【0086】
第7のステップ530−7では、サブルーチン530が終了する。
【0087】
第8のステップ530−8では、ファームウェア400に異常終了を報告する。第8のステップ530−8の次に、第9のステップ530−9が実行される。
【0088】
第9のステップ530−9では、サブルーチン530が終了する。
【0089】
図13Aは、本発明の第1の実施形態による情報処理方法において実行される例外ハンドラ610の動作を示すフローチャートの前半部分である。図13Bは、本発明の第1の実施形態による情報処理方法において実行される例外ハンドラ610の動作を示すフローチャートの後半部分である。図13Aおよび図13Bのフローチャートは、接続点AおよびBを介して接続されている。
図13Aおよび図13Bのフローチャートは、合計16個のステップ610−1〜610−16を具備している。
【0090】
例外ハンドラ610が開始すると、まず、第1のステップ610−1が実行される。
第1のステップ610−1では、例外状態レジスタ(ESR)121−61よりPCIeコントローラ123からの障害割り込みかを確認する。
第1のステップ610−1の次に、第2のステップ610−2が実行される。
【0091】
第2のステップ610−2では、PCIe障害割り込みが発生したかどうかを判定する。PCIe障害割り込みが発生している場合(Yes)は、次に、第3のステップ610−3が実行される。PCIe障害割り込みが発生していない場合(No)は、次に、第13のステップ610−13が実行される。
【0092】
第3のステップ610−3では、PCIeコントローラ123のコンフィグレーション空間200よりAER機能構造体210を読み出して障害要因を確認する。
第3のステップ610−3の次に、第4のステップ610−4が実行される。
【0093】
第4のステップ610−4では、障害要因があるかどうかを判定する。
障害要因がある場合(Yes)は、次に、第5のステップ610−5が実行される。
障害要因が無い場合(No)は、次に、第13のステップ610−13が実行される。
【0094】
第5のステップ610−5では、コンプリーションタイムアウトを検出しているかを確認する。
第5のステップ610−5の次に、第6のステップ610−6が実行される。
【0095】
第6のステップ610−6では、コンプリーションタイムアウトが検出されているかどうかを判定する。
コンプリーションタイムアウトが検出されている場合(Yes)は、次に、第7のステップ610−7が実行される。
コンプリーションタイムアウトが検出されていない場合(No)は、次に、第13のステップ610−13が実行される。
【0096】
第7のステップ610−7では、例外アドレスレジスタ121−60が示すアドレスより実行中の命令を読み出す。
第7のステップ610−7の次に、第8のステップ610−8が実行される。
【0097】
第8のステップ610−8では、第7のステップ610−7で読み出した命令を解析し、PCIeカード180〜183のMMIO空間に対するロード命令であるかどうかを確認する。
第8のステップ610−8の次に、第9のステップ610−9が実行される。
【0098】
第9のステップ610−9では、PCIeカード180〜183へのロード命令であるかどうかを判定する。
PCIeカード180〜183へのロード命令である場合(Yes)は、次に、第10のステップ610−10が実行される。
PCIeカード180〜183へのロード命令ではない場合(No)は、次に、第15のステップ610−15が実行される。
【0099】
第10のステップ610−10では、読み出し先アドレスより対象PCIeカード180〜183を特定し、対応する例外フラグをセットする。
第10のステップ610−10の次に、第11のステップ610−11が実行される。
【0100】
第11のステップ610−11では、次命令を示すように例外アドレスレジスタ121−60を加算し、例外ハンドラ610より戻る。
第11のステップ610−11の次に、第12のステップ610−12が実行される。
【0101】
第12のステップ610−12では、例外ハンドラ610が終了する。
【0102】
第13のステップ610−13では、他の障害要因を確認し、対応する処理を行う。
第13のステップ610−13の次に、第14のステップ610−14が実行される。
【0103】
第14のステップ610−14では、例外ハンドラ610が終了する。
【0104】
第15のステップ610−15では、情報処理装置100の障害と判断し、情報処理装置100をリセットする。
第15のステップ610−15の次に、第16のステップ610−16が実行される。
【0105】
第16のステップ610−16では、例外ハンドラ610が終了する。
【0106】
本発明の第1の実施形態による情報処理装置および情報処理方法がもたらす効果について説明する。本発明の第1の実施形態によれば、ファームウェア400からのPCIeカード180〜183のMMIO空間の読み出し要求が、PCIeカード180〜183の故障により無応答になったとしても、通常の処理に戻ることが出来る。これは、例外ハンドラ610によりPCIeカード180〜183の例外フラグ520〜523が設定されて、かつ、該当するPCIeカード180〜183のMMIO空間を読み出すロード命令がスキップされるからである。
【0107】
また、ファームウェア400は、PCIeカード180〜183のMMIO空間の読み出しが失敗したことを、ドライバ500のサブルーチン530によって知ることが出来る。その結果、ファームウェア400は、障害処理などの対応する処理を行うことが出来るようになる。
【0108】
また、不定なデータがファームウェア400に渡されることが防止される。そのため、ファームウェア400が不定な値を使用して動作することを防止される。結果として、PCIeカード180〜183の故障で情報処理装置100の全体をリセットする必要が無くなる。
【0109】
なお、PCIeカード180〜183が無応答にならなかった場合には、例外ハンドラ610は実行されない。また、この場合、例外フラグ520〜523の内容は全て「0」のままである。そのため、サブルーチン530は、読み出したデータ、すなわちgr1番の汎用レジスタ121−1の内容をファームウェア400によって指定されたアドレスに格納することになる。この動作は、図12における第5のステップ530−5に対応する。また、サブルーチン530は、ファームウェア400に正常終了を報告することが出来る。この動作は、図12における第6、第7のステップ530−6、530−7に対応する。
【0110】
(第2の実施形態)
本発明の第1の実施形態では、PCIeカード180〜183が故障により無応答になった場合に、情報処理装置100の全体をリセットすることなく復旧することについて説明した。しかし、PCIeの規格には、他にもさまざまな障害を検出する機能があり、本発明ではそれらにも対応することが出来る。そのような情報処理装置および情報処理方法を、本発明の第2の実施形態として、以下に説明する。
【0111】
本発明の第2の実施形態による情報処理装置および情報処理方法は、PCIeカード180〜183がコンプリータアボートを返す不具合を処理するように構成されたものである。したがって、本発明の第2の実施形態による情報処理装置および情報処理方法の構成は、本発明の第1の実施形態として説明した構成に、以下の変更を加えたものに等しい。すなわち、本発明の第1の実施形態による例外ハンドラ610を、後述する例外ハンドラ620に置き換える。
【0112】
図14は、本発明の第2の実施形態による情報処理装置100の各構成要素において、コア121上で動作するファームウェア400がPCIeカード180〜183のMMIO空間からデータを読み出せない別の場合の一連の動作を示す図である。図14には、ファームウェア400と、ドライバ500と、例外ハンドラ620と、コア121と、PCIeコントローラ123と、PCIeスイッチ140と、PCIeカード180〜183との動作が、合計10個のステップ13−1〜13−10として示されている。
【0113】
図14における第1〜第5のステップ13−1〜13−5は、ファームウェア400がPCIeカード180〜183のMMIO空間を読み出すために指示を出してから、PCIeカード180〜183にメモリ読み出しが通知されるまでを表している。すなわち、図14における第1〜第5のステップ13−1〜13−5は、本発明の第1の実施形態の説明で参照した図11における第1〜第5のステップ12−1〜12−5と同様であるので、さらなる詳細な説明を省略する。
【0114】
ここで、対象となるPCIeカード180〜183が障害を検出し、メモリ読み出し命令に対してコンプリートアボートを返す場合について考える。
【0115】
第6のステップ13−6において、対象となるPCIeカード180〜183は、PCIeスイッチ140に対してコンプリータアボートを返す。
【0116】
次に、第7のステップ13−7において、PCIeスイッチ140は、コンプリータアボートをPCIeコントローラ123に転送する。
【0117】
次に、第8のステップ13−8において、PCIeコントローラ123は、コア121に向けて障害割り込みを報告する。
【0118】
次に、第9のステップ13−9において、コア121は、例外ハンドラ620を実行する。なお、例外ハンドラ620を実行しない場合は、第10のステップ13−10においてシステムのリセットが行われる。
【0119】
図15Aは、本発明の第2の実施形態による例外ハンドラ620の動作を示すフローチャートの前半部分である。図15Bは、本発明の第2の実施形態による例外ハンドラ620の動作を示すフローチャートの後半部分である。ここで、図15Aおよび図15Bのフローチャートは、接続点C、Dを介して接続されている。図15Aおよび図15Bのフローチャートは、第1〜第16のステップ620−1〜620−16を具備している。例外ハンドラ620が開始すると、まず、第1のステップ620−1が実行される。
【0120】
第1のステップ620−1において、例外状態レジスタ121−61を参照してPCIeコントローラ123からの障害割り込みが発生しているかどうかを確認する。第1のステップ620−1の次に、第2のステップ620−2が実行される。
【0121】
第2のステップ620−2において、障害割り込みが発生しているかどうかが判定される。障害割り込みが発生している場合(Yes)は、次に第3のステップ620−3が実行される。障害割り込みが発生していない場合(No)は、次に第15のステップ620−15が実行される。
【0122】
第3のステップ620−3において、各PCIeカード180〜183のコンフィグレーション空間200よりAER機能構造体210を読み出し、障害要因を確認する。第3のステップ620−3の次に、第4のステップ620−4が実行される。
【0123】
第4のステップ620−4において、障害要因があるかどうかを判定する。障害要因がある場合(Yes)は、次に第5のステップ620−5が実行される。障害要因がない場合(No)は、次に第15のステップ620−15が実行される。
【0124】
第5のステップ620−5において、コンプリータアボートを検出しているかを確認する。第5のステップ620−5の次に、第6のステップ620−6が実行される。
【0125】
第6のステップ620−6において、コンプリータアボートが検出されているかどうかを判定する。コンプリータアボートが検出されている場合(Yes)は、次に第7のステップ620−7が実行される。コンプリータアボートが検出されていない場合(No)は、次に第15のステップ620−15が実行される。
【0126】
第7のステップ620−7において、障害が検出されたPCIeカード180〜183のPCIeカード番号nを、変数Aに格納し、対応する例外フラグ520〜523をセットする。第7のステップ620−7の次に、第8のステップ620−8が実行される。
【0127】
第8のステップ620−8において、例外アドレスレジスタ121−60の示すアドレスより実行中の命令を読み出す。第8のステップ620−8の次に、第9のステップ620−9が実行される。
【0128】
第9のステップ620−9において、読み出した命令を解析し、PCIeカード180〜183のMMIO空間に対するロード命令であるかを確認する。第9のステップ620−9の次に、第10のステップ620−10が実行される。
【0129】
第10のステップ620−10において、ロード命令であるかどうかを判定する。ロード命令である場合(Yes)は、次に第11のステップ620−11が実行される。ロード命令でない場合(No)は、次に第15のステップ620−15が実行される。
【0130】
第11のステップ620−11において、読み出し先アドレスに対応するPCIeカード180〜183の番号mを特定し、変数Aと一致するかどうかを確認する。第11のステップ620−11の次に、第12のステップ620−12が実行される。
【0131】
第12のステップ620−12において、番号mが変数Aに一致するかどうかを判定する。番号mが変数Aに一致する場合(Yes)は、次に第13のステップ620−13が実行される。番号mが変数Aに一致しない場合(No)は、次に第15のステップ620−15が実行される。
【0132】
第13のステップ620−13において、次命令を示すように例外アドレスレジスタ121−60を加算し、例外ハンドラ620より通常の処理に戻る。第13のステップ620−13の次に、第14のステップ620−14が実行される。
【0133】
第14のステップ620−14において、例外ハンドラ620が終了する。
【0134】
第15のステップ620−15において、他の障害要因を確認し、対応する処理を行う。第15のステップ620−15の次に、第16のステップ620−16が実行される。
【0135】
第16のステップ620−16において、例外ハンドラ620が終了する。
【0136】
以上に説明したように、本発明の第2の実施形態による例外ハンドラ620は、まず、第1〜第7のステップ620−1〜620−7において、PCIeカード180〜183のコンプリータアボートを検出して対象となる例外フラグ520〜523をセットする。次に、第8〜第13のステップ620−8〜620−13において、実行中の命令がコンプリータアボートを検出したPCIeカード180〜183のMMIO空間に対するロード命令ならば、例外アドレスレジスタ121−60を次の命令を示すように加算し、通常の処理に戻る。
【0137】
(第3の実施形態)
PCIeカード180〜183の障害を、PCIeスイッチ140のダウンストリームポート143〜146が検出する場合の情報処理装置および情報処理方法について、本発明の第3の実施形態として説明する。
【0138】
図16は、本発明の第3の実施形態による情報処理装置100の各構成要素において、コア121上で動作するファームウェア400がPCIeカード180〜183のMMIO空間からデータを読み出せないさらに別の場合の一連の動作を示す図である。図16には、ファームウェア400と、ドライバ500と、例外ハンドラ630と、コア121と、PCIeコントローラ123と、PCIeスイッチ140と、PCIeカード180〜183との動作が、合計11個のステップ14−1〜14−11として示されている。
【0139】
図16における第1〜第5のステップ14−1〜14−5は、ファームウェア400がPCIeカード180〜183のMMIO空間を読み出すために指示を出してから、PCIeカード180〜183にメモリ読み出しが通知されるまでを表している。すなわち、図16における第1〜第5のステップ14−1〜14−5は、本発明の第1の実施形態の説明で参照した図11における第1〜第5のステップ12−1〜12−5と同様であるので、さらなる詳細な説明を省略する。
【0140】
ここで、PCIeカード180〜183がPCIeスイッチ140に向けてコンプレーションおよびデータを返却する際に、PCIeのパケットが壊れた場合について考える。
【0141】
第6のステップ14−6において、対象となるPCIeカード180〜183は、PCIeスイッチ140に対してコンプリーションおよびデータを返す。
【0142】
次に、第7のステップ14−7において、PCIeスイッチ140は、PCIeカード180〜183から返されたコンプリーションおよびデータが不正なTLP(Transaction Layer Packet:トランザクション層パケット)であることを検出する。
【0143】
次に、第8のステップ14−8において、PCIeスイッチ140が、PCIeコントローラ123に向けて、障害の報告を行う。
【0144】
次に、第9のステップ14−9において、PCIeコントローラ123が、コア121に向けて、障害割り込みの報告を行う。
【0145】
次に、第10のステップ14−10において、コア121は、例外ハンドラ630を実行する。なお、例外ハンドラ630を実行しない場合は、第11のステップ14−11においてシステムのリセットが行われる。
【0146】
図17Aは、本発明の第3の実施形態による例外ハンドラ630の動作を示すフローチャートの前半部分である。図17Bは、本発明の第3の実施形態による例外ハンドラ630の動作を示すフローチャートの後半部分である。ここで、図17Aおよび図17Bのフローチャートは、接続点E、Fを介して接続されている。図17Aおよび図17Bのフローチャートは、第1〜第16のステップ630−1〜630−16を具備している。例外ハンドラ630が開始すると、まず、第1のステップ630−1が実行される。
【0147】
第1のステップ630−1において、例外状態レジスタ121−61を参照してPCIeコントローラ123からの障害割り込みが発生しているかどうかを確認する。第1のステップ630−1の次に、第2のステップ630−2が実行される。
【0148】
第2のステップ630−2において、障害割り込みが発生しているかどうかが判定される。障害割り込みが発生している場合(Yes)は、次に第3のステップ630−3が実行される。障害割り込みが発生していない場合(No)は、次に第15のステップ630−15が実行される。
【0149】
第3のステップ630−3において、PCIeスイッチ140のダウンストリームポート143〜146のコンフィグレーション空間200よりAER機能構造体210を読み出し、障害要因を確認する。第3のステップ630−3の次に、第4のステップ630−4が実行される。
【0150】
第4のステップ630−4において、障害要因があるかどうかを判定する。障害要因がある場合(Yes)は、次に第5のステップ630−5が実行される。障害要因がない場合(No)は、次に第15のステップ630−15が実行される。
【0151】
第5のステップ630−5において、不正なトランザクション層パケットの受信を検出しているかどうかを確認する。第5のステップ630−5の次に、第6のステップ630−6が実行される。
【0152】
第6のステップ630−6において、不正なトランザクション層パケットの受信が検出されているかどうかを判定する。不正なトランザクション層パケットの受信が検出されている場合(Yes)は、次に第7のステップ630−7が実行される。不正なトランザクション層パケットの受信が検出されていない場合(No)は、次に第15のステップ630−15が実行される。
【0153】
第7のステップ630−7において、障害を検出したダウンストリームポート143〜146に対応するPCIeカード番号nを変数Aに格納し、対応する例外フラグ520〜523をセットする。第7のステップ630−7の次に、第8のステップ630−8が実行される。
【0154】
第8のステップ630−8において、例外アドレスレジスタ121−60の示すアドレスより実行中の命令を読み出す。第8のステップ630−8の次に、第9のステップ630−9が実行される。
【0155】
第9のステップ630−9において、読み出した命令を解析し、PCIeカード180〜183のMMIO空間に対するロード命令であるかを確認する。第9のステップ630−9の次に、第10のステップ630−10が実行される。
【0156】
第10のステップ630−10において、ロード命令であるかどうかを判定する。ロード命令である場合(Yes)は、次に第11のステップ630−11が実行される。ロード命令でない場合(No)は、次に第15のステップ630−15が実行される。
【0157】
第11のステップ630−11において、読み出し先アドレスに対応するPCIeカード180〜183の番号mを特定し、変数Aと一致するかどうかを確認する。第11のステップ630−11の次に、第12のステップ630−12が実行される。
【0158】
第12のステップ630−12において、番号mが変数Aに一致するかどうかを判定する。番号mが変数Aに一致する場合(Yes)は、次に第13のステップ630−13が実行される。番号mが変数Aに一致しない場合(No)は、次に第15のステップ630−15が実行される。
【0159】
第13のステップ630−13において、次命令を示すように例外アドレスレジスタ121−60を加算し、例外ハンドラ630より通常の処理に戻る。第13のステップ630−13の次に、第14のステップ630−14が実行される。
【0160】
第14のステップ630−14において、例外ハンドラ630が終了する。
【0161】
第15のステップ630−15において、他の障害要因を確認し、対応する処理を行う。第15のステップ630−15の次に、第16のステップ630−16が実行される。
【0162】
第16のステップ630−16において、例外ハンドラ630が終了する。
【0163】
以上に説明したように、本発明の第3の実施形態による例外ハンドラ630は、まず、第1〜第7のステップ630−1〜630−7において、PCIeスイッチ140のダウンストリームポート143〜146で不正なトランザクション層パケットを受信しているならば、そのダウンストリームポート143〜146に対応するPCIeカード180〜183の例外フラグ520〜523を設定する。次に、第8〜第13のステップ630−8〜630−13において、実行中の命令が不正なトランザクション層パケットを検出したダウンストリームポート143〜146に対応するPCIeカード180〜183のMMIO空間に対するロード命令ならば、例外アドレスレジスタ121−60を、次の命令を示すように加算し、例外ハンドラより戻る。これにより、ドライバ500のサブルーチン530は実施例の動作の説明のとおりの効果が期待できる。
【0164】
本発明による情報処理装置および情報処理方法において、上記に説明した各実施形態は、技術的に矛盾しない範囲で自由に組み合わせることが可能である。特に、第1の実施形態による例外ハンドラ610と、第2の実施形態による例外ハンドラ620と、第3の実施形態による例外ハンドラ630とは、それぞれ異なる障害要因を処理するべく構成されている。しかし、これら3つの例外ハンドラを適宜に組み合わせることで、これらの障害要因の全てを処理可能な例外ハンドラを構成しても良いことは当然である。
【符号の説明】
【0165】
1 外部装置
100 情報処理装置
110 IOコントローラ
120 プロセッサ
121 コア
121−0〜121−31 汎用レジスタ
121−40 プログラムカウンタ
121−41 コントロールレジスタ
121−50 割込アドレスレジスタ
121−51 割込状態レジスタ
121−60 例外アドレスレジスタ
121−61 例外状態レジスタ
122、123 PCIeコントローラ
124 メモリコントローラ
125 内部バス
130 メモリ
140 PCIeスイッチ
141 アップストリームポート
142〜146 ダウンストリームポート
147 内部バス
150〜153 PCIe配線
160〜163 PCIe配線
170 バス
180〜183 PCIeカード
200 コンフィグレーション空間
201 PCI3.0互換コンフィグレーション空間ヘッダ
202 PCIe機能構造体
203 PCIコンフィグレーション空間
204 PCIe拡張コンフィグレーション空間
210 AER機能構造体
211 PCIe拡張機能ヘッダ
212 訂正不能障害状態レジスタ
213 訂正不能障害マスクレジスタ
214 訂正不能障害深刻度レジスタ
215 訂正可能障害状態レジスタ
216 訂正可能障害マスクレジスタ
217 AER機能および制御レジスタ
218 ヘッダログレジスタ
219 ルート障害コマンド
220 ルート障害状態
221 障害ソースIDレジスタ
222 訂正可能障害ソースIDレジスタ
223 トランザクション層パケットプレフィックスログレジスタ
400 ファームウェア
500 ドライバ
510 データ領域
520〜523 PCIeカード3の例外フラグ
530 MMIO空間読み出し
600、610、620、630 例外ハンドラ
2000 周辺装置
3000 周辺装置

【特許請求の範囲】
【請求項1】
複数のPCIe(Peripheral Component Interconnect Express)カードと、
前記複数のPCIeカードを制御するためのファームウェアを実行するプロセッサと、
前記複数のPCIeカードのそれぞれについて、異常の発生を検知するPCIeコントローラと、
前記それぞれのPCIeカードについて、前記異常の情報を個別に管理するデータ領域と
を具備し、
前記プロセッサは、前記データ領域が管理する前記情報に基づいて、前記異常が発生したPCIeカードに対する命令をスキップすることで、前記ファームウェアの実行を継続する
情報処理装置。
【請求項2】
請求項1に記載の情報処理装置において、
前記ファームウェアを格納するメモリ
をさらに具備し、
前記メモリは、
前記PCIeコントローラによる前記検知の結果を前記データ領域の前記情報に反映する例外ハンドラと、
前記データ領域を参照し、前記それぞれのPCIeカードに対する命令が正常終了したかどうかを判断し、前記判断の結果を前記ファームウェアに返すドライバと
をさらに格納する
情報処理装置。
【請求項3】
請求項2に記載の情報処理装置において、
前記ファームウェアは、前記それぞれのPCIeカードについて、MMIO(Memory Mapped In/Out)空間の読み出しを、前記ドライバを介して指示し、前記読み出しが成功すれば前記制御を継続し、前記読み出しが失敗すれば所定の障害処理を行う
情報処理装置。
【請求項4】
請求項2または3に記載の情報処理装置において、
前記例外ハンドラは、前記異常の種別を判断し、前記異常が前記複数のPCIeカードのいずれかに関連するものである場合に前記データ領域に対する前記反映を行い、かつ、前記異常が前記いずれかのPCIeカードに対するMMIO空間の読み出し命令に関連するものである場合に前記命令のアドレスに所定の値を加算することで前記プロセッサの前記スキップを設定する
情報処理装置。
【請求項5】
請求項1〜4のいずれかに記載の情報処理装置において、
前記PCIeコントローラは、前記それぞれのPCIeカードについて、故障による無応答が発生した場合に、前記異常の検知を行う
情報処理装置。
【請求項6】
請求項1〜5のいずれかに記載の情報処理装置において、
前記PCIeコントローラは、前記それぞれのPCIeカードについて、コンプリータアボートが発生した場合に、前記異常の検知を行う
情報処理装置。
【請求項7】
請求項1〜6のいずれかに記載の情報処理装置において、
前記PCIeコントローラは、前記それぞれのPCIeカードについて、不正なトランザクション層パケットが受信された場合に、前記異常の検知を行う
情報処理装置。
【請求項8】
プロセッサがファームウェアを実行することで複数のPCIeカードを制御するステップと、
前記複数のPCIeカードのそれぞれについて、異常の発生をPCIeコントローラで検知するステップと、
前記それぞれのPCIeカードについて、前記異常の情報をデータ領域で個別に管理するステップと
を具備し、
前記制御するステップは、
前記データ領域で管理された前記情報に基づいて、前記異常が発生したPCIeカードに対する命令をスキップして、前記ファームウェアの実行を継続するステップ
を具備する
情報処理方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13A】
image rotate

【図13B】
image rotate

【図14】
image rotate

【図15A】
image rotate

【図15B】
image rotate

【図16】
image rotate

【図17A】
image rotate

【図17B】
image rotate


【公開番号】特開2013−54414(P2013−54414A)
【公開日】平成25年3月21日(2013.3.21)
【国際特許分類】
【出願番号】特願2011−190254(P2011−190254)
【出願日】平成23年9月1日(2011.9.1)
【出願人】(000004237)日本電気株式会社 (19,353)
【Fターム(参考)】