// tsc时钟源初始化
// 调用路径:time_init->tsc_init
// 函数任务:
// 1.矫正tsc,获取tsc频率,设置cpu频率等于tsc频率
// 2.初始化基于tsc的延迟函数
// 3.检查tsc的特性
// 3.1 tsc之间是否同步
// 3.1.1 如果tsc之间不同步,标记tsc不稳定,设置rating=0
// 3.2 tsc是否稳定
// 4.注册tsc时钟源设备
1.1 void __init tsc_init(void)
{
u64 lpj;
int cpu;
//矫正tsc,获取tsc频率
tsc_khz = x86_platform.calibrate_tsc();
//cpu频率等于tsc频率
cpu_khz = tsc_khz;
//计算辅助cycle到ns转换的辅助参数scale
for_each_possible_cpu(cpu)
set_cyc2ns_scale(cpu_khz, cpu);
//初始化基于tsc的延迟函数,ndely,udelay,mdelay
use_tsc_delay();
//检查cpu之间tsc是否同步
if (unsynchronized_tsc())
mark_tsc_unstable("TSCs unsynchronized");
//检查tsc是否可靠
check_system_tsc_reliable();
//注册tsc时钟源设备
init_tsc_clocksource();
}
// 延迟函数ndelay,udelay,mdelay
// 通过tsc实现短延迟
2.1 void use_tsc_delay(void)
{
//通过tsc进行短延迟
delay_fn = delay_tsc;
}
// tsc延迟函数
// 通过rep_nop实现轮询时的短延迟,查询tsc时禁止内核抢占,
时间子系统11_tsc时钟初始化
最新推荐文章于 2024-04-22 19:33:11 发布