函数逻辑报告 |
Source Code:arch\x86\boot\cpucheck.c |
Create Date:2022-07-27 08:25:49 |
Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
首页 | 函数Tree |
注解内核,赢得工具 | 下载SCCT | English |
函数名称:CPU检查
函数原型:int check_cpu(int *cpu_level_ptr, int *req_level_ptr, unsigned int **err_flags_ptr)
返回类型:int
参数:
类型 | 参数 | 名称 |
---|---|---|
int * | cpu_level_ptr | |
int * | req_level_ptr | |
unsigned int ** | err_flags_ptr |
115 | level等于3 |
117 | 如果has_eflag(X86_EFLAGS_AC)则level等于4 |
120 | get_cpuflags() |
123 | 如果test_bit(Long Mode (x86-64, 64-bit support) , CPU标志组)则level等于64 |
133 | ecx等于MSR_K7_HWCR |
136 | asm("rdmsr":"=a"(eax), "=d"(edx):"c"(ecx)) |
137 | eax与等于1左移15位的值的反 |
138 | asm("wrmsr"::"a"(eax), "d"(edx), "c"(ecx)) |
140 | get_cpuflags() |
142 | 否则如果err恒等于0x01且非err_flags[0]按位与1左移CMPXCHG8 instruction 位的值的反的值且is_centaur()且CPU模式大于等于6则 |
151 | asm("rdmsr":"=a"(eax), "=d"(edx):"c"(ecx)) |
152 | eax或等于1左移1位按位或1左移7位 |
153 | asm("wrmsr"::"a"(eax), "d"(edx), "c"(ecx)) |
155 | 设置内存位 |
157 | 否则如果err恒等于0x01且is_transmeta()则 |
160 | ecx等于0x80860004 |
162 | level等于1 |
164 | asm("rdmsr":"=a"(eax), "=d"(edx):"c"(ecx)) |
165 | asm("wrmsr"::"a"(~0), "d"(edx), "c"(ecx)) |
166 | asm("cpuid":"+a"(level), "=d"(flags)::"ecx", "ebx") |
169 | asm("wrmsr"::"a"(eax), "d"(edx), "c"(ecx)) |
186 | 如果非err则err等于check_knl_erratum() |
189 | 如果err_flags_ptr则 * err_flags_ptr = err ? err_flags : NULL |
191 | 如果cpu_level_ptr则cpu_level_ptr等于CPU性能值 |
193 | 如果req_level_ptr则req_level_ptr等于req_level |
名称 | 描述 |
---|---|
validate_cpu | CPU检验 |
源代码转换工具 开放的插件接口 | X |
---|---|
支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |