kernel中的completion

kernel中的completion,第1张

kernel中的completion

一个实例
ko insmod 的时候,创建 completion , 然后进行 driver probe/add,init进程使用 wait_for_completion_timeout 等待固定时间,看 driver 是否probe ok,driver probe 成功之后,使用 complete() 通知给等待它的进程

#include 
#include 
#include 
#include 
#include 

static struct completion finish_event;

static int demo_add(struct xxx_device *device)
{
	// 这里干一些事
	// ... ...

	complete(&finish_event);
	return 0;
}


static struct xxx_driver xxx_driver = {
	.name = "xxxx",
	.ops = {
		.add = demo_add,
		.remove = demo_remove,
	},
};

static int __init xxx_init(void)
{
	int ret, t;
	init_completion(&finish_event);

	ret = xxx_bus_register_driver(&xxx_driver);
	if (ret)
		return ret;

	t = wait_for_completion_timeout(&finish_event, 5*HZ);
	if (t == 0) {
		ret = -ETIMEDOUT;
		goto cleanup;
	}
}

具体原理,后面补上

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5504786.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存