【31】poisoned TLP導致的MCE問題

在這裏插入圖片描述
(1)發送端支持TLP poisoning功能是可選的
(2)數據中毒功能僅僅適應於寫請求(posted或non-posted),message with data,原子操作請求,讀完成包,原子操作完成包的數據。
a。中毒TLP中毒是通過TLP中的EP比特來顯示。
在這裏插入圖片描述
b。只有TLP是with data時,才允許發送端設置EP bit爲1。如果TLP沒有數據,但是EP比特爲1,接收端的行爲是不明確的
(3)如果發送端支持數據中毒功能,從發送端發送的帶bad data的TLP需要使用上面的中毒機制。(這句話相當於屁話,沒啥信息含量)
(4)如果DP口支持Poisoned TLP Egress Blocking功能,需要使能Poisoned TLP Egress Blocking enable比特,當中毒TLP從egress port發出時,該port要把這個TLP當做Poisoned TLP Egress Blocking error,除非有更高優先級的錯誤。
並且DP口要進行下面的操作:
a. DP口不能發送這個TLP
b. 如果Poisoned TLP Egress Blocked error被mask,並且DPC是enable的,DPC必須觸發 。
c. 如果DPC沒有被觸發,且TLP是non-posted請求,DP口必須返回一個completion包,這個completion包和DPC觸發時一樣(CA或者UR狀態的completion)
在這裏插入圖片描述

下面是intel的CPU手冊的關於poisoned TLP的描述,forward poisoned TLP到destination可能導致MCE(之前使用intel和AMD的CPU確實遇到poisoned TLP導致的MCE)。由於poisoned TLP是從switch下面穿過來的,當時使用了switch的drop poisoned TLP功能來規避了這個問題。其實Intel的CPU也有drop poisoned TLP的功能,AMD的CPU也有類似功能
AMD CPU drop poisoned TLP的reg
PCIEPORT0F0x000001C0 (PCIE_RX_CNTL)
6 RX_IGNORE_EP_ERR. Read-write. 0=Report error normally. 1=Ignore error. Controls ignoring Poisoned TLP
Errors. When set, ignores EP bit on received TLP, treating it as if the TLP did not have it set. Poisoned TLP
Received error is not logged and TLP is passed to Slave Client with EP=0. AER header log (if a different error is
present) may report EP=0.
intel CPU drop poisoned TLP的reg
在這裏插入圖片描述
在這裏插入圖片描述
PLX switch drop poisoned TLP的reg
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章