blocking_notifier_call_chain
时间: 2023-04-30 08:04:42 浏览: 472
blocking_notifier_call_chain是一个Linux内核中用于多个通知链(notifier chain)之间协作的函数。它可以在一个通知链中的某个位置停止通知传递,然后再在另一个通知链中继续通知传递。这个函数会阻塞,并且会在所有通知链都被处理完之后才返回。
相关问题
static void kernel_shutdown_prepare(enum system_states state) { blocking_notifier_call_chain(&reboot_notifier_list, (state == SYSTEM_HALT) ? SYS_HALT : SYS_POWER_OFF, NULL); system_state = state; usermodehelper_disable(); device_shutdown(); static void kernel_shutdown_prepare(enum system_states state) { blocking_notifier_call_chain(&reboot_notifier_list, (state == SYSTEM_HALT) ? SYS_HALT : SYS_POWER_OFF, NULL); system_state = state; usermodehelper_disable(); device_shutdown(); }
这段代码展示了 Linux 内核中的 `kernel_shutdown_prepare()` 函数的实现。它的作用是准备系统关机操作,并执行一些必要的准备工作。
具体来说,这段代码中的 `kernel_shutdown_prepare()` 函数实现了以下操作:
1. `blocking_notifier_call_chain(&reboot_notifier_list, ...)`:调用 `reboot_notifier_list` 中注册的通知链,通知注册的监听器系统即将进入关机状态。这里使用了 `blocking_notifier_call_chain()` 函数来触发通知。
2. `(state == SYSTEM_HALT) ? SYS_HALT : SYS_POWER_OFF`:根据传入的系统状态参数 `state`,确定要发送给通知监听器的通知类型。如果系统状态为 `SYSTEM_HALT`,则发送 `SYS_HALT` 类型的通知,否则发送 `SYS_POWER_OFF` 类型的通知。
3. `system_state = state`:将系统状态变量 `system_state` 更新为传入的系统状态参数 `state`。
4. `usermodehelper_disable()`:禁用用户模式助手(usermodehelper),它是一个用于执行系统关机期间的用户模式任务的机制。通过禁用它,可以确保在关机过程中不会启动新的用户模式任务。
5. `device_shutdown()`:执行设备关机操作,关闭和停止相关设备。
这段代码是 Linux 内核中负责准备系统关机操作的一部分。它通过调用通知链、更新系统状态、禁用用户模式助手和执行设备关机操作来确保系统在关机过程中执行必要的准备工作。
blocking_notifier_chain_register(&sensor_ready_notifier_head, nb);
blocking_notifier_chain *chain, struct notifier_block * nb);
A:该函数用于注册一个事件通知块到一个阻塞式事件通知链中。函数参数包括一个blocking_notifier_chain类型的指针和一个notifier_block类型的指针。blocking_notifier_chain类型的指针指向要注册的事件通知链,notifier_block类型的指针指向要注册的事件通知块。当事件发生时,可以使用blocking_notifier_call_chain()函数来触发事件通知链中的每个事件通知块执行相应的操作。
阅读全文