0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

内核hotplug回调线程唤醒

麦辣鸡腿堡 来源:TrustZone 作者:Hcoco 2023-12-05 15:55 次阅读

hotplug回调线程唤醒

内核使用以下流程唤醒特定cpu的hotplug线程,用于执行实际的cpu启动流程:
图片
由于cpu启动时需要与一系列模块交互以执行相应的准备工作,为此内核为其定义了一组hotplug状态,用于表示cpu在启动或关闭时分别需要执行的流程。以下为个阶段状态定义示例(由于该数组较长,故只截了一小段):

static struct cpuhp_step cpuhp_hp_states[] = {
	[CPUHP_OFFLINE] = {
		.name			= "offline",
		.startup.single		= NULL,
		.teardown.single	= NULL,
	},
	…
	[CPUHP_BRINGUP_CPU] = {
		.name			= "cpu:bringup",
		.startup.single		= bringup_cpu,
		.teardown.single	= finish_cpu,
		.cant_stop		= true,
		}
…
	[CPUHP_ONLINE] = {
		.name			= "online",
		.startup.single		= NULL,
		.teardown.single	= NULL,
	},
}

以上每个阶段都可包含startup.single和teardown.single两个回调函数,分别表示cpu启动和关闭时需要执行的流程。其中在cpu启动时,将会从CPUHP_OFFLINE状态开始,依次执行各个阶段的startup.single回调函数。其中CPUHP_BRINGUP_CPU及之前的阶段都在secondary cpu启动之前执行。

而CPUHP_BRINGUP_CPU阶段的回调函数bringup_cpu,会实际触发secondary cpu的启动流程。它将通过cpu_ops接口调用spin-table函数,启动secondary cpu,并等待其启动完成。

当secondary cpu启动完成后,将唤醒hotplug线程,其将继续执行CPUHP_BRINGUP_CPU之后阶段相关的回调函数。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内核
    +关注

    关注

    3

    文章

    1372

    浏览量

    40288
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10860

    浏览量

    211723
  • SMP
    SMP
    +关注

    关注

    0

    文章

    74

    浏览量

    19660
  • 线程
    +关注

    关注

    0

    文章

    504

    浏览量

    19682
收藏 人收藏

    评论

    相关推荐

    鸿蒙内核源码Task/线程技术分析

    前言 在鸿蒙内核中,广义上可理解为一个Task就是一个线程 一、怎么理解Task 1. 官方文档是怎么描述线程 基本概念 从系统的角度看,线程是竞争系统资源的最小运行单元。
    的头像 发表于 10-18 10:42 2213次阅读
    鸿蒙<b class='flag-5'>内核</b>源码Task/<b class='flag-5'>线程</b>技术分析

    MYSQL在UNIX上建立线程函数

    有新的连接到来,然后调用线程函数建立新的线程来处理这个新的accpet的socket通道(还会判断是否有空闲的线程队列而不需要新建立新的
    发表于 08-05 07:55

    rt-thread的信号函数对内核有何影响呢

    信号的到达,事实上,线程也不知道信号到底什么时候到达。线程之间可以互相通过调用 rt_thread_kill 发送信号。以上画线部分是我特意要大家注意的,我们要看待中断函数那样,看
    发表于 03-16 10:14

    详解java 机制

    代码示例 接下来看一下的代码示例,代码模拟的是这样一种场景:老师问学生问题,学生思考完毕回答老师。 首先定义一个接口,只有一个方法tellAnswer(int answer),
    发表于 09-28 13:14 0次下载

    LabWindows/CVI 程序 函数设计

    函数是系统框架设计中非常重要的一种手段,所谓函数(callback )是指一个通过函数指针调用的函数。
    发表于 05-03 16:54 1.1w次阅读
    LabWindows/CVI 程序 <b class='flag-5'>回</b><b class='flag-5'>调</b>函数设计

    函数的详细资料说明

    异步事件的处理,首先将异步事件发生时需要执行的代码编写成一个函数,并将该函数注册成为函数,这样当该异步事件发生时,系统会自动调用事先注册好的函数。
    发表于 02-28 08:00 6次下载
    <b class='flag-5'>回</b><b class='flag-5'>调</b>函数的详细资料说明

    C语言函数的函数

    来源:嵌入式客栈 1 什么是函数?首先什么是呢? 我的理解是:把一段可执行的代码像参数传递那样传给其他代码,而这段代码会在某个时刻被调用执行,这就叫做回
    的头像 发表于 09-11 09:57 4133次阅读

    深入浅析Linux内核内核线程(上)

    本文力求与完整介绍完内核线程的整个生命周期,如内核线程的创建、调度等等,当然本文还是主要从内存管理和进程调度两个维度来解析,且不会涉及到具体的内核
    的头像 发表于 04-28 16:26 2046次阅读
    深入浅析Linux<b class='flag-5'>内核</b>之<b class='flag-5'>内核</b><b class='flag-5'>线程</b>(上)

    Alluxio线程池结构与吞吐量

    本文介绍了 Alluxio Master 的线程池结构与每个线程的功能。在优过程中,利用分析结果调整审计日志的 blocking queue,调整 UFS-SYNC-PREFETCH 线程
    发表于 11-11 11:36 600次阅读

    根据机制注册事件并处理VI

    通过事件注册函数(Register Event Callback)注册一个VI,在事件发生时会运行该回VI,通常用于注册和处理.N
    的头像 发表于 11-24 09:15 2281次阅读

    函数指针和函数的使用方法

    了解开发语言的朋友应该都会对函数有所了解,在很多的程序开发语言中都能看到的身影。很多场景下,当某个条件成立以后我们希望代码执行某些指定的部分,这个时候可以考虑使用回
    的头像 发表于 04-10 15:08 1104次阅读

    线程事务的滚是怎么结合进去的?

    某一线程在开始运行前等待n个线程执行完毕。 将CountDownLatch的计数器初始化为new CountDownLatch(n),每当一个任务线程执行完毕,就将计数器减1 countdownLatch.countDown()
    发表于 05-08 11:01 462次阅读
    多<b class='flag-5'>线程</b>事务的<b class='flag-5'>回</b>滚是怎么结合进去的?

    C语言|函数的不同用法

    函数是个高级操作技巧,也是日常项目中常常使用到的技能。之所以说函数是个高级操作技巧,是因为它让异步操作更加方便,众所周知程序执行分为同步操作和异步操作,同步操作故名思意就是按代
    发表于 07-10 10:34 1308次阅读

    labview中事件的使用

    介绍LabVIEW中事件的使用方法,可以用于处理执行时间较长的异步事件
    的头像 发表于 08-24 16:38 4399次阅读
    labview中事件<b class='flag-5'>回</b><b class='flag-5'>调</b>的使用

    函数(callback)是什么?函数的实现方法

    函数是一种特殊的函数,它作为参数传递给另一个函数,并在被调用函数执行完毕后被调用。函数通常用于事件处理、异步编程和处理各种操作系统和框架的API。
    发表于 03-12 11:46 2939次阅读