register_HA_handler 内核服务

用途

向内核注册高可用性事件处理程序。

语法

#include <sys/high_avail.h>
int register_HA_handler (ha_handler)
ha_handler_ext_t *
ha_handler;

参数

描述
ha_handler 指定指向 ha_handler_ext_t 类型的结构的指针,如usr/include/sys/high_avail.h中所定义。

描述

register_HA_handler 内核向那些需要知道高可用性事件 (例如,处理器释放) 的内核扩展注册 高可用性事件处理程序 (HAEH) 函数。 当由于某些硬件故障而启动高可用性事件时,内核将在基本级别调用此函数。

ha_handler_ext_t 结构具有 3 个字段:
字段 描述
有趣 包含指向高可用性事件处理程序函数的指针。
数据 (_S) 包含用户定义的值,该值将在调用函数时由内核作为自变量传递。
_名称 组件名称

When a high availability event is initiated, the kernel calls _fun () at base level (that is, process environment) with 2 parameters:

  • 第一个是用户在注册时在 数据 (_S) 字段中传递的数据。
  • 第二个是指向 /usr/include/sys/high_avail.h中定义的 haeh_event_t 结构的指针。
此结构中的相关字段为:
字段 描述
_magic 标识事件类型。 唯一可能的值为 HA_CPU_FAIL
Dealloc_cpu 正在取消分配的 CPU 的逻辑号。

除了特定于用户的功能外,高可用性事件处理程序还必须取消绑定其绑定到 Dealloc_cpu 的线程,并停止那些绑定的线程所启动的计时器请求块 (TRB) (如果适用)。

高可用性事件处理程序必须返回下列其中一个值:
描述
HA_ACCEPTED 该事件的用户处理已成功。
已使用的 HA_REFUSED 该事件的用户处理不成功。
任何不同于 HA_ACCEPTED 的返回值都将导致内核异常中止事件处理。 在处理器发生故障的情况下,处理器取消分配将异常中止。 在这种情况下,CPU_DEALLOC_ABORTED将创建错误日志条目,并且在 _名称 字段中传递的值将显示在错误日志条目的详细数据区域中。

一个扩展可以注册相同的 HAEH N 次 (N > 1)。 虽然它被视为不正确的行为,但不会报告任何错误。 对于每个 HA 事件,将调用给定的 HAEH N 次。 必须注销此处理程序的次数与已注册的次数相同。

由于内核会依次调用 HAEH ,因此对于同一事件,可能会多次调用 HAEH。 内核扩展应该已准备好处理这种可能性。 例如,两个内核扩展 K1K2 已注册 HA 处理程序。 已启动 CPU 取消分配。 将调用 K1 的 HAEH ,执行其作业并返回HA_ACCEPTED下一个调用. K2 ,出于某种原因返回HA_REFUSED。取消分配异常中止,并且错误日志条目将报告 K2 作为失败原因。 稍后,系统将管理卸载 K2 ,并通过手动运行 明星报来重新启动释放。 结果是,将使用相同的参数再次调用 K1 的 HAEH。

执行环境

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

返回值

描述
重大安全事件数量 指示操作成功。

非零值表示一个错误。