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

    文章

    1309

    浏览量

    39867
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10456

    浏览量

    206647
  • SMP
    SMP
    +关注

    关注

    0

    文章

    68

    浏览量

    19454
  • 线程
    +关注

    关注

    0

    文章

    490

    浏览量

    19503
收藏 人收藏

    评论

    相关推荐

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

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

    用户级线程内核线程

    线程的实现可以分为两类:用户级线程内核线程,后者又称为内核支持的线程或轻量级进程。在多
    发表于 01-10 15:01

    函数小结

    调用对应的函数)的这个过程就是函数回调过程,被的函数称为函数 通过函数指针临时形式参数进行函数回的 一般我称之为 直接回
    发表于 07-05 01:51

    Java的线程唤醒与阻塞规则

    如果线程是因为调用了wait()、sleep()或者join()方法而导致的阻塞,可以中断线程,并且通过抛出InterruptedException来唤醒它;如果线程遇到了IO阻塞,无
    发表于 07-06 15:11

    MYSQL在UNIX上建立线程函数

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

    浅析函数

    调用于层间协作,上层将本层函数安装在下层,这个函数就是,而下层在一定条件下触发回,例如作为一个驱动,是一个底层,他在收到一个数据时,除了完成本层的处理工作外,还将进行
    发表于 08-06 06:10

    C语言函数是什么

    什么是函数?为什么要使用回函数?怎么使用回函数?怎么使用带参数的函数?
    发表于 12-28 07:11

    函数的配置方法

    目录一、MX配置二、软件生成的关键代码三、用户代码附:函数的配置方法一、MX配置1.设置LSE2.配置RTC- 激活时钟源-激活日历-配置2020年2月3日09:40:0 (HAL库的年份从
    发表于 08-16 07:16

    函数的作用是什么?怎么使用回函数?

    什么是js函数?函数的作用是什么?怎么使用回函数?
    发表于 11-01 06:10

    Msp函数是什么意思?

    Msp函数是什么意思?
    发表于 11-30 06:57

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

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

    事件与事件结构

    问题:在高并发的用户事件(创建用户事件+注册事件)处理上,由于用“事件注册”调用回函数的方式响应事件更快捷,但是其对系统资源的占用与事件结构的差异如何,请大神帮忙解惑~
    发表于 01-03 13:34

    Linux内核线程优先级设置的方法介绍

    内核线程和进程是一样的,前者与POSIX线程(pthread)有很大的区别。因此,内核的进程调度策略和系统调用也适用于内核
    发表于 04-23 14:58 5383次阅读
    Linux<b class='flag-5'>内核</b><b class='flag-5'>线程</b>优先级设置的方法介绍

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

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

    linux内核线程就这样诞生了么?

    线程是操作系统的重要组成部件之一,linux内核中,内核线程是如何创建的,在内核启动过程中,诞生了哪些支撑整个系统运转的
    的头像 发表于 07-10 10:45 470次阅读
    linux<b class='flag-5'>内核</b><b class='flag-5'>线程</b>就这样诞生了么?