函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

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
注解内核,赢得工具下载SCCTEnglish

函数名称: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
114  内存设置( & CPU标志组, 0, CPU标志组的长度)
115  level等于3
117  如果has_eflag(X86_EFLAGS_AC)则level等于4
120  get_cpuflags()
121  err等于检查CPU标志
123  如果test_bit(Long Mode (x86-64, 64-bit support) , CPU标志组)则level等于64
126  如果err恒等于0x01且非err_flags[0]按位与1左移"sse" 位按位或1左移"sse2" 位的值的反的值且is_amd()则
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()
141  err等于检查CPU标志
142  否则如果err恒等于0x01且非err_flags[0]按位与1左移CMPXCHG8 instruction 位的值的反的值且is_centaur()且CPU模式大于等于6则
148  ecx等于VIA Cyrix defined MSRs
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  设置内存位
156  err等于检查CPU标志
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))
171  err等于检查CPU标志
172  否则如果err恒等于0x01且非err_flags[0]按位与1左移Physical Address Extensions 位的值的反的值且is_intel()且CPU性能值恒等于6且CPU模式恒等于9或CPU模式恒等于13的值则
177  如果命令行查找选项
180  err等于检查CPU标志
182  否则
186  如果非errerr等于check_knl_erratum()
189  如果err_flags_ptr则 * err_flags_ptr = err ? err_flags : NULL
191  如果cpu_level_ptrcpu_level_ptr等于CPU性能值
193  如果req_level_ptrreq_level_ptr等于req_level
196  返回:如果CPU性能值小于req_levelerr则负1否则0
调用者
名称描述
validate_cpuCPU检验