PCIe学习笔记(2)错误处理和AER/DPC功能

文章目录

  • PCIe Error
  • AER (Advanced Error Reporting)
  • DPC (Downstream Port Containment)

处理器上错误通常可分为detected和undetected error。Undetected errors可能变得良性(benign),也可能导致系统故障如silent data corruptions (SDC)。Detected errors则又可分为correctable errors (CE) 和uncorrectable errors (UCE)。
PCIe定义了两种错误报告范式:基线功能和高级错误报告功能(AER)。本文介绍PCIe错误定义及AER/DPC功能。

PCIe Error

PCIe错误分类为Uncorrectable errors和Correctable errors。Uncorrectable错误严重性可以进一步分为fatal和nonfatal。
在这里插入图片描述
有3种错误信号机制:

  1. CPL status

  2. in-band error message:
    Routed-to-RC, reqid标识错误设备BDF,CPL通常返回UR/CA指示uncorrectable error,AER发出error message,RP支持AER记录到Root Error Status寄存器。
    在这里插入图片描述

  3. error forwarding (data poisoning)
    EP位指示,non-fatal和fatal error需要启用command.SERR#ENABLE,error message发送由device control bit[3:0]控制。

AER (Advanced Error Reporting)

PCIe AER扩展的功能结构提供更强大的错误报告。可将uncorrectable error编程为fatal或non-fatal。若severity置位,则为faral error,否则为non-fatal error。仅报告最重要错误,遵循优先级列表。

Controller接收TLP detect到错误后的步骤如下:

  1. Discard TLP
  2. Generate a CA/UR Cpl (for NP)
  3. Set status in PCI-compatible status register
  4. Set status in AER registers (when enable AER)
  5. Generate an error MSG (USP only)
  6. For malformed TLPs credit is returned based on the buffer space which has been consumed by the TLP

AER初始化需要启用以下域段:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

AER driver用于在发生错误时收集全面的错误信息,报告错误并执行错误恢复操作。

static irqreturn_t aer_irq(int irq, void *context)
{struct pcie_device *pdev = (struct pcie_device *)context;struct aer_rpc *rpc = get_service_data(pdev);struct pci_dev *rp = rpc->rpd;int aer = rp->aer_cap;struct aer_err_source e_src = {};pci_read_config_dword(rp, aer + PCI_ERR_ROOT_STATUS, &e_src.status);if (!(e_src.status & AER_ERR_STATUS_MASK))return IRQ_NONE;pci_read_config_dword(rp, aer + PCI_ERR_ROOT_ERR_SRC, &e_src.id);pci_write_config_dword(rp, aer + PCI_ERR_ROOT_STATUS, e_src.status);if (!kfifo_put(&rpc->aer_fifo, e_src))return IRQ_HANDLED;return IRQ_WAKE_THREAD;
}

aer_isr()继续根据severity读取status和mask,并把status和id等信息输出。

static irqreturn_t aer_isr(int irq, void *context)
{struct pcie_device *dev = (struct pcie_device *)context;struct aer_rpc *rpc = get_service_data(dev);struct aer_err_source e_src;if (kfifo_is_empty(&rpc->aer_fifo))return IRQ_NONE;while (kfifo_get(&rpc->aer_fifo, &e_src))aer_isr_one_error(rpc, &e_src);return IRQ_HANDLED;
}static void aer_isr_one_error(struct aer_rpc *rpc,struct aer_err_source *e_src)
{struct pci_dev *pdev = rpc->rpd;struct aer_err_info e_info;pci_rootport_aer_stats_incr(pdev, e_src);/** There is a possibility that both correctable error and* uncorrectable error being logged. Report correctable error first.*/if (e_src->status & PCI_ERR_ROOT_COR_RCV) {e_info.id = ERR_COR_ID(e_src->id);e_info.severity = AER_CORRECTABLE;if (e_src->status & PCI_ERR_ROOT_MULTI_COR_RCV)e_info.multi_error_valid = 1;elsee_info.multi_error_valid = 0;aer_print_port_info(pdev, &e_info);if (find_source_device(pdev, &e_info))aer_process_err_devices(&e_info);}if (e_src->status & PCI_ERR_ROOT_UNCOR_RCV) {e_info.id = ERR_UNCOR_ID(e_src->id);if (e_src->status & PCI_ERR_ROOT_FATAL_RCV)e_info.severity = AER_FATAL;elsee_info.severity = AER_NONFATAL;if (e_src->status & PCI_ERR_ROOT_MULTI_UNCOR_RCV)e_info.multi_error_valid = 1;elsee_info.multi_error_valid = 0;aer_print_port_info(pdev, &e_info);if (find_source_device(pdev, &e_info))aer_process_err_devices(&e_info);}
}

DPC (Downstream Port Containment)

在Downstream Port检测到unmasked uncorrectable error后停止流量,避免数据损坏潜在扩散,并支持CER (Containment Error Recovery)。DPC触发不会被视为错误,但可将其视为correctable error。DPC触发时支持发起中断或ERR_COR消息,流程如下:
DPC trig -> DPC interrupt & DPC trig status/reason -> disable LTSSM
SW clear DPC status -> LTSSM to Detect state -> link retrain
在这里插入图片描述
DPC Trigger Enable

  • 00b: 默认关闭
  • 01b: 启用并在ERR_FATAL触发;
  • 10b: 启用并在ERR_NONFATAL/ERR_FATAL触发

DCP Completion Control: 0-CA, 1-UR
DPC Interrupt: DPC触发时发起INTx/MSI/MSI-X
DPC ERR_COR: DPC触发时发起ERR_COR msg,独立于中断
Poisoned TLP Egress Blocking: 不得传输TLP,若未触发DPC返回UR Cpl,否则DPC期间不再接收并丢弃TLP
Software Trigger: 写1触发DPC,读恒为0,可用于disable link,优先于MSI/MSI-X
DL_Active ERR_COR: DL转换为DL_Active时,DSP发起ERR_COR,不会作为错误处理

在这里插入图片描述
DPC RC busy: 指示软件RP需保持在DPC揭制状态
AER Uncorrectable Error Status 会根据 DPC Trigger Enable/Status和更新

Root Port Programmed I/O (RP PIO) Error Controls (eDPC)
用于精细管理RP NP遇到的错误 (CFG/IO/Mem UR/CA/CTO),建议与AER配置同步。若severity置位,作为UCE处理,触发DPC。

static irqreturn_t dpc_irq(int irq, void *context)
{struct pci_dev *pdev = context;u16 cap = pdev->dpc_cap, status;pci_read_config_word(pdev, cap + PCI_EXP_DPC_STATUS, &status);if (!(status & PCI_EXP_DPC_STATUS_INTERRUPT) || PCI_POSSIBLE_ERROR(status))return IRQ_NONE;pci_write_config_word(pdev, cap + PCI_EXP_DPC_STATUS,PCI_EXP_DPC_STATUS_INTERRUPT);if (status & PCI_EXP_DPC_STATUS_TRIGGER)return IRQ_WAKE_THREAD;return IRQ_HANDLED;
}

Linux Reference:
drivers/pci/pcie/aer.c
drivers/pci/pcie/dpc.c

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/691765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter面试之渲染流程

Flutter面试中必问的一个面试题就是渲染相关的话题。作为Google在2018年发布的一款跨平台UI框架,使用Dart作为其开发语言,底层使用Skia图形库进行视图渲染,渲染速度和用户体验堪比原生。 Flutter渲染流程 总的来说,Flutter中一帧的渲染可以分为三个过程:请求渲染、绘制和…

MySQL基础学习

MySQL基础 注意:本文的图片截图自尚硅谷MySQL笔记。 一:基本概述: 什么是数据库: 数据库是一种用来存储和管理数据的系统。它是一个组织化的数据集合,可以通过计算机系统进行访问、管理和更新。数据库可以存储各种…

如何使用CloakQuest3r获取受安全服务保护的网站真实IP地址

关于CloakQuest3r CloakQuest3r是一款功能强大的纯Python工具,该工具可以帮助广大研究人员获取和查看受Cloudflare和其他安全服务商保护的网站真实IP地址。 Cloudflare是一种广泛采用的网络安全和性能增强服务,而CloakQuest3r的核心任务就是准确识别隐…

每天一个数据分析题(一百六十)

以下关于代码片段(使用sklearn)的使用和PCA(主成分分析)的描述中,哪项是正确的? A. preprocessing.scale(data)用于对数据进行归一化处理,确保PCA分析前各特征处于同一量级。 B. PCA(n_compon…

怎么在抖音带自己的货?带货方式和带货要求,如下所示

我是王路飞。 不管你是无货源的新手小白,还是有货源的厂家/供应链,想在抖音卖货的话,无非就两种方式:要么开店、要么开直播带货。 看似都是在抖音卖货,但其实这是两条不同的赛道。 这篇文章就给你们聊下想在抖音卖货…

C语言系列13——网络编程基础

网络编程是计算机编程的一个分支,它允许程序在网络中发送和接收数据。本文将深入探讨网络编程的基础,包括Socket编程入门、客户端与服务器端的通信,以及常见网络协议的应用。 目录 写在开始1 Socket编程的基本概念与原理1.1 什么是Socket&…

【Redis】理论进阶篇------Redis的持久化

一、前言 前面学习了Redis的相关的十大数据类型以及用SpringBoot集成我们的Redis的工具代码的书写。从这篇文章开始,就会从Redis相关的一些理论(也是面试和工作的热点知识)如:Redis的持久化、Redis的订阅发布模型、Redis集群环境搭…

用python绘制黄金价格变化曲线

首先你得从mt4把数据导出为csv:mt4如何导出数据-CSDN博客 1、引入必要的库 import numpy as np import pandas as pd import matplotlib.pyplot as plt 2、然后通过pandas载入csv数据 raw pd.read_csv("XAUUSDm1.csv", headerNone, index_colNone, p…

P1024 [NOIP2001 提高组] 一元三次方程求解题解

题目 有形如:这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d均为实数),并约定该方程存在三个不同实根(根的范围在−100至100之间),且根与根之差的绝对值≥1。要求由小到大依次在同一…

YOLOv5代码解读[01] train.py

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license import argparse import math import os import random import sys import time from copy import deepcopy from datetime import datetime from pathlib import Path import numpy as np import yaml from tqdm import tqdmim…

文件包含+文件上传漏洞(图片马绕过)

目录 一.文件包含二.文件上传三.图片马四.题目 一.文件包含 将已有的代码以文件形式包含到某个指定的代码中,从而使用其中的代码或者数据,一般是为了方便直接调用所需文件,文件包含的存在使得开发变得更加灵活和方便(若对用户输入…

网络安全-pikachu之文件上传漏洞1

文件上传漏洞是危害极大的,一旦成功,可以获取服务器的最高权限。 pikachu介绍: 文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判…

☀️将大华摄像头画面接入Unity 【1】配置硬件和初始化摄像头

一、硬件准备 目前的设想是后期采用网口供电的形式把画面传出来,所以这边我除了大华摄像头还准备了POE供电交换机,为了方便索性都用大华的了,然后全都连接电脑主机即可。 二、软件准备 这边初始化摄像头需要用到大华的Configtool软件&#…

【知识点】CNN中concat与add的区别

cat操作经常用于将特征联合,多个卷积特征提取框架提取的特征融合或者是将输出层的信息进行融合;而add层更像是信息之间的叠加。 add是在一个特征上增加其语义信息,对最终的图像的分类是有益;cat导致的结果改进可能是由于cat操作通…

工业自动化部署选择主板的关键因素

**在构建任何计算机时,选择合适的主板至关重要。**对于游戏台式机,您需要选择能够支持您玩的游戏类型而不会出现任何问题的最新和最佳规格。当涉及工业应用时,影响您决策的变量变得更加重要。作为任何基于计算的应用中最关键的组件之一&#…

搜维尔科技:分析OptiTrack光学动作捕捉应用领域!

虚拟制作 当今虚拟制作阶段低延迟、超精确摄像机跟踪的事实上的标准。 用于运动科学的 OptiTrack OptiTrack 系统提供世界领先的测量精度和简单易用的工作流程,为研究人员和生物力学师的研究提供理想的 3D 跟踪数据。对所有主要数字测力台、EMG 和模拟设备的本机即…

trojan 突然无法上网

[ERROR] 2024/02/19 18:14:45 github.com/p4gefau1t/trojan-go/tunnel/tls.(*Server).acceptLoop.func1:server.go:140 tls handshake failed | remote error: tls: bad certificate 报证书问题,更新证书发现无法解决 最后突然客户端有一个配置 验证证书&#xf…

淘宝、1688以图搜图api使用示例

识图?当我们不知道图片内的信息时,可以通过以图识图的方式,找到对应的图片,以及对该图片的介绍。 识图工具是通过AI技术实现的,但其实识图并不需安装任何软件,在搜索引擎中就可以完成。“以图搜图”也可以…

组态软件行业分析:预计2025年市场空间可达数千亿元

组态软件可以对从控制系统得到的以及自身产生的数据进行记录存储。在系统发生事故和故障的时候,利用记录的运行工况数据和历史数据,可以对系统故障原因等进行分析定位,责任追查等。通过对数据的质量统计分析,还可以提高自动化系统…

[office] Excel中DCOUNT函数在复杂的数据中统计应用图解教程 #职场发展#其他#媒体

Excel中DCOUNT函数在复杂的数据中统计应用图解教程 Excel中DCOUNT函数返回数据库或数据区域的列中满足指定条件并且包含数字的单元格的个数。 在Excel中使用DCOUNT函数可以轻松地从数据库或数据区域中查找符合指定条件并且是数字的单元格的数量。 Excel中DCOUNT函数在复杂的…