eeh_enable_dma 内核服务
用途
此服务在发生 EEH 事件后对适配器启用 DMA 操作。
语法
#include <sys/eeh.h>
long eeh_enable_dma(handle)
eeh_handle_t handle;
参数
| 项 | 描述 |
|---|---|
| 句柄 (handle) | 从eeh_init 或 eeh_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(处理) 以调用此服务。
执行环境
此内核服务只能从进程或中断环境进行调用。
返回值
此内核服务没有返回值。