eeh_slot_error 内核服务

用途

此服务会记录临时或永久错误,并 (可选) 将插槽标记为永久不可用。

语法

#include <sys/eeh.h>

long eeh_slot_error(handle, flag, dd_buf, dd_buf_length)
eeh_handle_t    handle;
int             flag;
char           *dd_buf;
long            dd_buf_length;

参数

描述
句柄 (handle) eeh_initeeh_init_multifunc 获取的 EEH 句柄
标记 EEH_RESET_TEMP 或 EEH_RESET_PERM
dd_buf 设备驱动程序的错误日志缓冲区的地址
dd_buf_length 设备驱动程序错误日志缓冲区的长度 (以字节为单位)

描述

此服务执行以下一些任务:

  • 它收集硬件数据,以帮助了解 EEH 事件的性质和来源
  • 它将设备驱动程序提供的调试数据日志与硬件数据日志相结合,并在错误日志中创建一个条目
  • 它可以选择将槽标记为永久不可用,以便后续 eeh_read_slot_state () 调用返回 EH_UNAVAILABLE , retry_delay 值为 0

此内核服务的行为由以下两个 值控制:

描述
EEH_RESET_TEMP 此标志仅执行上述两个任务中的前两个任务。
EEH_RESET_PERM 此标志执行所有三个任务。

根据插槽的硬件状态不同,此服务可能无法收集硬件数据。 因此,该服务将成功,但不会记录任何数据。 如果提供了 EEH_RESET_PERM ,那么它仍会将插槽标记为永久不可用。

dd_bufdd_buf_length 参数用于将设备驱动程序错误日志与硬件日志组合在一起。 dd_buf 自变量是错误日志缓冲区的地址,该缓冲区包含设备驱动程序的数据。 dd_buf_length 参数是该缓冲区的长度。 如果长度超过 MAX_DD_LOG_SIZE 个字节,那么会截断驱动程序的日志数据。 如果 dd_buf 为 NULL ,那么错误日志仅包含硬件数据 (如果有)。

单功能驱动程序: 内核服务的工作方式与上述描述相同。 如果由于硬件或固件原因而发生故障,那么将返回 EEH_FAIL 并记录错误。

多功能驱动程序: 对于多功能驱动程序,此服务与前面的描述一样工作,但如果提供了 EEH_RESET_PERM ,那么会广播 EEH_DD_DEAD 消息。

为设备驱动程序提供了宏 EEH_SLOT_ERROR(处理dd_bufdd_buf_length) 以调用此服务。

执行环境

可以从进程或中断环境中调用此内核服务。

返回值

描述
EEH_SUCC 已成功记录错误
EHEH_FAIL 未能记录错误并 (可选) 将插槽标记为永久不可用