函数逻辑报告 |
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 插件可实现:逻辑报告 代码生成和批量转换代码 |