Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG REPORT] 无法在软中断模块初始化之前注册软中断方法 #1052

Closed
val213 opened this issue Nov 17, 2024 · 3 comments
Closed
Assignees
Labels
A-irq Area: 中断子系统 A-sched Area: 调度子系统 bug-report 这是一个bug报告(如果确认是一个bug,请管理人员添加`bug` label)

Comments

@val213
Copy link
Collaborator

val213 commented Nov 17, 2024

背景

调度子模块 的 负载均衡 特性,需要在 调度子模块 初始化时向 软中断向量表 注册一个软中断方法

但是由于 调度子模块 是在 软中断模块 之前初始化的,而现有的逻辑是 软中断向量表 在 软中断模块初始化 的时候才会被初始化,所以如果提前注册软中断方法的话,在获取向量表的时候会触发 unwrap 一个空值的 panic

期望行为
即使 软中断模块还没有初始化(softirq_init() 还没有被执行),也能提前注册软中断方法

建议修改
softirq_init() 和 softirq_vectors() 中,都添加对 __SORTIRQ_VECTORS 是否为空值的判断,如果当时为空,则直接进行初始化。

@val213 val213 added the bug-report 这是一个bug报告(如果确认是一个bug,请管理人员添加`bug` label) label Nov 17, 2024
@val213 val213 self-assigned this Nov 17, 2024
@dragonosbot dragonosbot added the needs-triage 这个问题可能需要分类处理。如果已经完成分类,请移除它。 label Nov 17, 2024
@val213 val213 added A-sched Area: 调度子系统 A-irq Area: 中断子系统 and removed needs-triage 这个问题可能需要分类处理。如果已经完成分类,请移除它。 labels Nov 17, 2024
@fslongjin
Copy link
Member

依我看,这个可以通过在软中断初始化结束之后再用unified init去注册

@val213
Copy link
Collaborator Author

val213 commented Nov 17, 2024

在软中断初始化结束之后再用unified init去注册

用 INITIALIZER_LIST 吗?

@fslongjin
Copy link
Member

在软中断初始化结束之后再用unified init去注册

用 INITIALIZER_LIST 吗?

在pid=1的地方会挨个执行初始化器链表里面的函数。

https://code.dragonos.org.cn/xref/DragonOS/kernel/src/init/initcall.rs?r=c566df451ce6dbf2af684333e68b39fdfff86498#14

@val213 val213 closed this as completed Nov 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-irq Area: 中断子系统 A-sched Area: 调度子系统 bug-report 这是一个bug报告(如果确认是一个bug,请管理人员添加`bug` label)
Projects
None yet
Development

No branches or pull requests

3 participants