"save_and_cli(flag)"到底是如何运作的?

How "save_and_cli(flag)" really works?

本文关键字:何运作 and save cli flag      更新时间:2023-10-16

我在为一个在嵌入式Linux中工作的程序跟踪一段代码时遇到了这个问题。我无法谷歌出有用的信息来告诉我它是如何工作的。

这段代码写成:

unsigned char foo(*someaddress){
unsigned long flags = 0; //why use a long?
flags = save_and_cli(); //what is this?
spin_lock_irqsave(&someaddress, flags);//ok, this is a spin lock
...do something...
restore_flags(flags); //release something?
spin_unlock_irqrestore(&someaddress, flags);//release lock
}

似乎这个长标志的值永远不会改变,什么是save_and_cli()函数?

IIRC save_and_clilocal_irq_save的"古代"版本

保存本地中断发送的当前状态,然后禁用它。

命令功能local_irq_restore用于恢复local_irq_save保存的irq状态

此处参考