Intel架构下TLB shutdown使用pause指令
本文将mark下Intel架构下TLB shutdown使用pause指令的相关notes。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16static void smp_call_function_many_cond(const struct cpumask *mask,
smp_call_func_t func, void *info,
unsigned int scf_flags,
smp_cond_func_t cond_func)
{
...
if (run_remote && wait) {
// 按顺序等各个cpu修改csd的flag,不然死等
for_each_cpu(cpu, cfd->cpumask) {
call_single_data_t *csd;
csd = per_cpu_ptr(cfd->csd, cpu);
csd_lock_wait(csd);
}
}
}
csd_lock_wait
会调用到pause命令1
2
3
4csd_lock_wait
└── smp_cond_load_relaxed
└── cpu_relax
└── asm volatile("rep; nop")
rep;nop
的机器码是f3 90,其实就是pause指令的机器码,相当于pause的一个”别名”。
参考资料: