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的一个”别名”。



参考资料: