CPU热插入流程分析

arm下的CPU热插入流程主要分为以下几步:

一、 qemu虚拟机对象注册cpu热插入回调函数

二、 响应cpu热插入事件,通知GED设备处理热插拔事件

三、 GED响应热插拔事件,通知虚拟机guest CPU处理

具体流程:

virt_machine:虚拟机在创建的时候就注册了virt_cpu_plug用于cpu热插入的回调处理函数。同时会创建一个acpi_dev设备。这是ACPI协议定义的GED(通用事件设备),用于处理所有的事件,包括热插拔等。

virt_cpu_plug:会调用acpi_dev中注册的cpu热插回调函数,通知acpi处理CPU热插事件。

acpi_ged_info:acpi_ged设备的定义。在类初始化的时候会注册CPU热插回调函数acpi_ged_device_plug_cb。该函数会调用acpi_cpu_plug_cb,最后会调用acpi_send_event发送事件。acpi_send_event实际执行的是类初始化的时候注册的函数acpi_ged_send_event。

acpi_ged_send_event:该函数会发送一个中断到guest中,ACPI定义的总线设备_SB.CPUS.CSCN会调用相应的函数响应该事件请求。对于_SB.CPUS.CSCN的定义复用的x86设备之前的定义。

CPU热插入流程分析-LMLPHP

05-18 09:01