eeh_enable_dma 内核服务

用途

此服务在发生 EEH 事件后对适配器启用 DMA 操作。

语法

#include <sys/eeh.h>

long eeh_enable_dma(handle)
eeh_handle_t handle;

参数

描述
句柄 (handle) eeh_initeeh_init_multifunc 内核服务获取的 EEH 句柄

描述

在插槽上发生 EEH 事件时,将禁止该插槽上的所有直接存储器存取 (DMA) 操作。 应该调用此服务以在发生 EEH 事件后重新启用 DMA。 只能从转储上下文中调用此服务 (即,在转储进行时)。

单功能驱动程序: 此服务在插槽上启用 DMA 操作。 如果此调用因 EEH_FAIL 而失败,那么内核将记录错误。

多功能驱动程序: 在多功能适配器上,插槽状态必须为 SUSPEND 或 DEBUG ,并且调用者必须是 EEH_MASTER。 仅从转储上下文调用此服务。 当系统转储正在进行时,所有回调和广播将被暂挂,并且多功能适配器将被视为单功能适配器,因为系统不再支持 EEH 多功能内核服务。 如果服务失败,那么将返回 EEH_FAIL。 如果故障是由于硬件或固件导致的,那么将记录错误。

在某些情况下,由于平台状态限制,此内核服务无法成功。 在这种情况下,如果驱动程序对其进行调用,那么服务将返回 EEH_FAIL。 这会导致插槽被标记为永久不可用,这是不正确的,因为可以恢复插槽。 为避免从此服务接收 EEH_FAIL ,驱动程序应在 eeh_init_multifunc () 时提供 EEH_ENABLE_NO_SUPPORT_RC 标志。 如果提供了 EEH_ENABLE_NO_SUPPORT_RC 标志,那么 eeh_enable_dma () 会返回 EEH_NO_SUPPORT ,指示驱动程序无法收集调试数据,但必须继续执行下一步以进行恢复。

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

执行环境

此内核服务只能从进程或中断环境进行调用。

返回值

此内核服务没有返回值。