uexadd Kernel Service 的用户方式异常处理程序

用途

处理在用户方式下执行内核线程时发生的异常。

语法

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/except.h>
int func (exp, type, tid, mst)
struct excepth * exp;
int  type;
tid_t  tid;
struct kmstsave * mst;

参数

描述
EXP 指向用于注册此异常处理程序的 excepth 结构。
MST 指向进程的当前 kmstsave 区域。 此指针可用于访问 kmstsave 区域以获取有关异常的其他信息。
描述
tid 指定在发生异常时正在执行的内核线程的线程标识。
TYPE 表示已发生的异常的类型。 此类型值特定于平台。 特定值在 /usr/include/sys/except.h 文件中定义。

描述

对于在内核线程以 用户方式执行时检测到的同步异常,将调用用户方式异常处理程序 (exp->func)。 内核异常处理程序将异常信息保存在结构的 kmstsave 区域中。 对于 用户方式异常,它将调用在用户异常处理程序列表中找到的第一个异常处理程序。 异常处理程序在优先级为 INTPAGERINTIODONE的中断环境中执行。

如果已注册的异常处理程序返回指示已处理异常的返回码,那么内核将从异常处理程序退出,而不会从列表中调用其他异常处理程序。 如果异常处理程序返回返回码,指示未处理异常,那么内核将调用列表中的下一个异常处理程序。 列表中的最后一个异常处理程序是缺省处理程序。 这通常是向线程发送信号。

内核异常处理程序不能发生缺页故障。 如果任何异常处理活动都可能导致异常,那么它还应该使用 setjmpx 内核服务来注册异常处理程序。 如果异常处理程序正在处理 I/O ,那么这尤其重要。 如果异常处理程序未处理异常,那么应该将返回码设置为用户方式异常处理的 EXCEPT_NOT_HANDLE 值。

执行环境

INTPAGERINTIODONE 优先级的 中断 环境中调用 uexadd 内核服务的用户方式异常处理程序。

返回值

描述
异常已处理 指示已成功处理该异常。
未处理异常 指示未处理此异常。