x86: cleanup kernel/setup_64.c
Clean it up before applying more patches to it. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
5cabbd97b1
commit
04e1ba8521
arch/x86/kernel
|
@ -169,7 +169,7 @@ contig_initmem_init(unsigned long start_pfn, unsigned long end_pfn)
|
||||||
bootmap_size = bootmem_bootmap_pages(end_pfn)<<PAGE_SHIFT;
|
bootmap_size = bootmem_bootmap_pages(end_pfn)<<PAGE_SHIFT;
|
||||||
bootmap = find_e820_area(0, end_pfn<<PAGE_SHIFT, bootmap_size);
|
bootmap = find_e820_area(0, end_pfn<<PAGE_SHIFT, bootmap_size);
|
||||||
if (bootmap == -1L)
|
if (bootmap == -1L)
|
||||||
panic("Cannot find bootmem map of size %ld\n",bootmap_size);
|
panic("Cannot find bootmem map of size %ld\n", bootmap_size);
|
||||||
bootmap_size = init_bootmem(bootmap >> PAGE_SHIFT, end_pfn);
|
bootmap_size = init_bootmem(bootmap >> PAGE_SHIFT, end_pfn);
|
||||||
e820_register_active_regions(0, start_pfn, end_pfn);
|
e820_register_active_regions(0, start_pfn, end_pfn);
|
||||||
free_bootmem_with_active_regions(0, end_pfn);
|
free_bootmem_with_active_regions(0, end_pfn);
|
||||||
|
@ -208,7 +208,8 @@ static void __init reserve_crashkernel(void)
|
||||||
unsigned long long crash_size, crash_base;
|
unsigned long long crash_size, crash_base;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
free_mem = ((unsigned long long)max_low_pfn - min_low_pfn) << PAGE_SHIFT;
|
free_mem =
|
||||||
|
((unsigned long long)max_low_pfn - min_low_pfn) << PAGE_SHIFT;
|
||||||
|
|
||||||
ret = parse_crashkernel(boot_command_line, free_mem,
|
ret = parse_crashkernel(boot_command_line, free_mem,
|
||||||
&crash_size, &crash_base);
|
&crash_size, &crash_base);
|
||||||
|
@ -259,6 +260,8 @@ static void discover_ebda(void)
|
||||||
|
|
||||||
void __init setup_arch(char **cmdline_p)
|
void __init setup_arch(char **cmdline_p)
|
||||||
{
|
{
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
printk(KERN_INFO "Command line: %s\n", boot_command_line);
|
printk(KERN_INFO "Command line: %s\n", boot_command_line);
|
||||||
|
|
||||||
ROOT_DEV = old_decode_dev(boot_params.hdr.root_dev);
|
ROOT_DEV = old_decode_dev(boot_params.hdr.root_dev);
|
||||||
|
@ -379,14 +382,14 @@ void __init setup_arch(char **cmdline_p)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_ACPI_SLEEP
|
#ifdef CONFIG_ACPI_SLEEP
|
||||||
/*
|
/*
|
||||||
* Reserve low memory region for sleep support.
|
* Reserve low memory region for sleep support.
|
||||||
*/
|
*/
|
||||||
acpi_reserve_bootmem();
|
acpi_reserve_bootmem();
|
||||||
#endif
|
#endif
|
||||||
/*
|
/*
|
||||||
* Find and reserve possible boot-time SMP configuration:
|
* Find and reserve possible boot-time SMP configuration:
|
||||||
*/
|
*/
|
||||||
find_smp_config();
|
find_smp_config();
|
||||||
#ifdef CONFIG_BLK_DEV_INITRD
|
#ifdef CONFIG_BLK_DEV_INITRD
|
||||||
if (boot_params.hdr.type_of_loader && boot_params.hdr.ramdisk_image) {
|
if (boot_params.hdr.type_of_loader && boot_params.hdr.ramdisk_image) {
|
||||||
|
@ -437,16 +440,13 @@ void __init setup_arch(char **cmdline_p)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We trust e820 completely. No explicit ROM probing in memory.
|
* We trust e820 completely. No explicit ROM probing in memory.
|
||||||
*/
|
*/
|
||||||
e820_reserve_resources(&code_resource, &data_resource, &bss_resource);
|
e820_reserve_resources(&code_resource, &data_resource, &bss_resource);
|
||||||
e820_mark_nosave_regions();
|
e820_mark_nosave_regions();
|
||||||
|
|
||||||
{
|
|
||||||
unsigned i;
|
|
||||||
/* request I/O space for devices used on all i[345]86 PCs */
|
/* request I/O space for devices used on all i[345]86 PCs */
|
||||||
for (i = 0; i < ARRAY_SIZE(standard_io_resources); i++)
|
for (i = 0; i < ARRAY_SIZE(standard_io_resources); i++)
|
||||||
request_resource(&ioport_resource, &standard_io_resources[i]);
|
request_resource(&ioport_resource, &standard_io_resources[i]);
|
||||||
}
|
|
||||||
|
|
||||||
e820_setup_gap();
|
e820_setup_gap();
|
||||||
|
|
||||||
|
@ -483,9 +483,10 @@ static void __cpuinit display_cacheinfo(struct cpuinfo_x86 *c)
|
||||||
|
|
||||||
if (n >= 0x80000005) {
|
if (n >= 0x80000005) {
|
||||||
cpuid(0x80000005, &dummy, &ebx, &ecx, &edx);
|
cpuid(0x80000005, &dummy, &ebx, &ecx, &edx);
|
||||||
printk(KERN_INFO "CPU: L1 I Cache: %dK (%d bytes/line), D cache %dK (%d bytes/line)\n",
|
printk(KERN_INFO "CPU: L1 I Cache: %dK (%d bytes/line), "
|
||||||
edx>>24, edx&0xFF, ecx>>24, ecx&0xFF);
|
"D cache %dK (%d bytes/line)\n",
|
||||||
c->x86_cache_size=(ecx>>24)+(edx>>24);
|
edx>>24, edx&0xFF, ecx>>24, ecx&0xFF);
|
||||||
|
c->x86_cache_size = (ecx>>24) + (edx>>24);
|
||||||
/* On K8 L1 TLB is inclusive, so don't count it */
|
/* On K8 L1 TLB is inclusive, so don't count it */
|
||||||
c->x86_tlbsize = 0;
|
c->x86_tlbsize = 0;
|
||||||
}
|
}
|
||||||
|
@ -512,14 +513,15 @@ static void __cpuinit display_cacheinfo(struct cpuinfo_x86 *c)
|
||||||
#ifdef CONFIG_NUMA
|
#ifdef CONFIG_NUMA
|
||||||
static int nearby_node(int apicid)
|
static int nearby_node(int apicid)
|
||||||
{
|
{
|
||||||
int i;
|
int i, node;
|
||||||
|
|
||||||
for (i = apicid - 1; i >= 0; i--) {
|
for (i = apicid - 1; i >= 0; i--) {
|
||||||
int node = apicid_to_node[i];
|
node = apicid_to_node[i];
|
||||||
if (node != NUMA_NO_NODE && node_online(node))
|
if (node != NUMA_NO_NODE && node_online(node))
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
for (i = apicid + 1; i < MAX_LOCAL_APIC; i++) {
|
for (i = apicid + 1; i < MAX_LOCAL_APIC; i++) {
|
||||||
int node = apicid_to_node[i];
|
node = apicid_to_node[i];
|
||||||
if (node != NUMA_NO_NODE && node_online(node))
|
if (node != NUMA_NO_NODE && node_online(node))
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
@ -559,27 +561,29 @@ static void __init amd_detect_cmp(struct cpuinfo_x86 *c)
|
||||||
c->phys_proc_id = phys_pkg_id(bits);
|
c->phys_proc_id = phys_pkg_id(bits);
|
||||||
|
|
||||||
#ifdef CONFIG_NUMA
|
#ifdef CONFIG_NUMA
|
||||||
node = c->phys_proc_id;
|
node = c->phys_proc_id;
|
||||||
if (apicid_to_node[apicid] != NUMA_NO_NODE)
|
if (apicid_to_node[apicid] != NUMA_NO_NODE)
|
||||||
node = apicid_to_node[apicid];
|
node = apicid_to_node[apicid];
|
||||||
if (!node_online(node)) {
|
if (!node_online(node)) {
|
||||||
/* Two possibilities here:
|
/* Two possibilities here:
|
||||||
- The CPU is missing memory and no node was created.
|
- The CPU is missing memory and no node was created.
|
||||||
In that case try picking one from a nearby CPU
|
In that case try picking one from a nearby CPU
|
||||||
- The APIC IDs differ from the HyperTransport node IDs
|
- The APIC IDs differ from the HyperTransport node IDs
|
||||||
which the K8 northbridge parsing fills in.
|
which the K8 northbridge parsing fills in.
|
||||||
Assume they are all increased by a constant offset,
|
Assume they are all increased by a constant offset,
|
||||||
but in the same order as the HT nodeids.
|
but in the same order as the HT nodeids.
|
||||||
If that doesn't result in a usable node fall back to the
|
If that doesn't result in a usable node fall back to the
|
||||||
path for the previous case. */
|
path for the previous case. */
|
||||||
|
|
||||||
int ht_nodeid = apicid - (cpu_data(0).phys_proc_id << bits);
|
int ht_nodeid = apicid - (cpu_data(0).phys_proc_id << bits);
|
||||||
if (ht_nodeid >= 0 &&
|
|
||||||
apicid_to_node[ht_nodeid] != NUMA_NO_NODE)
|
if (ht_nodeid >= 0 &&
|
||||||
node = apicid_to_node[ht_nodeid];
|
apicid_to_node[ht_nodeid] != NUMA_NO_NODE)
|
||||||
/* Pick a nearby node */
|
node = apicid_to_node[ht_nodeid];
|
||||||
if (!node_online(node))
|
/* Pick a nearby node */
|
||||||
node = nearby_node(apicid);
|
if (!node_online(node))
|
||||||
}
|
node = nearby_node(apicid);
|
||||||
|
}
|
||||||
numa_set_node(cpu, node);
|
numa_set_node(cpu, node);
|
||||||
|
|
||||||
printk(KERN_INFO "CPU %d/%x -> Node %d\n", cpu, apicid, node);
|
printk(KERN_INFO "CPU %d/%x -> Node %d\n", cpu, apicid, node);
|
||||||
|
@ -599,8 +603,8 @@ static void __init amd_detect_cmp(struct cpuinfo_x86 *c)
|
||||||
/* AMD systems with C1E don't have a working lAPIC timer. Check for that. */
|
/* AMD systems with C1E don't have a working lAPIC timer. Check for that. */
|
||||||
static __cpuinit int amd_apic_timer_broken(void)
|
static __cpuinit int amd_apic_timer_broken(void)
|
||||||
{
|
{
|
||||||
u32 lo, hi;
|
u32 lo, hi, eax = cpuid_eax(CPUID_PROCESSOR_SIGNATURE);
|
||||||
u32 eax = cpuid_eax(CPUID_PROCESSOR_SIGNATURE);
|
|
||||||
switch (eax & CPUID_XFAM) {
|
switch (eax & CPUID_XFAM) {
|
||||||
case CPUID_XFAM_K8:
|
case CPUID_XFAM_K8:
|
||||||
if ((eax & CPUID_XMOD) < CPUID_XMOD_REV_F)
|
if ((eax & CPUID_XMOD) < CPUID_XMOD_REV_F)
|
||||||
|
@ -628,7 +632,7 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
|
||||||
/*
|
/*
|
||||||
* Disable TLB flush filter by setting HWCR.FFDIS on K8
|
* Disable TLB flush filter by setting HWCR.FFDIS on K8
|
||||||
* bit 6 of msr C001_0015
|
* bit 6 of msr C001_0015
|
||||||
*
|
*
|
||||||
* Errata 63 for SH-B3 steppings
|
* Errata 63 for SH-B3 steppings
|
||||||
* Errata 122 for all steppings (F+ have it disabled by default)
|
* Errata 122 for all steppings (F+ have it disabled by default)
|
||||||
*/
|
*/
|
||||||
|
@ -645,7 +649,8 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
|
||||||
|
|
||||||
/* On C+ stepping K8 rep microcode works well for copy/memset */
|
/* On C+ stepping K8 rep microcode works well for copy/memset */
|
||||||
level = cpuid_eax(1);
|
level = cpuid_eax(1);
|
||||||
if (c->x86 == 15 && ((level >= 0x0f48 && level < 0x0f50) || level >= 0x0f58))
|
if (c->x86 == 15 && ((level >= 0x0f48 && level < 0x0f50) ||
|
||||||
|
level >= 0x0f58))
|
||||||
set_bit(X86_FEATURE_REP_GOOD, &c->x86_capability);
|
set_bit(X86_FEATURE_REP_GOOD, &c->x86_capability);
|
||||||
if (c->x86 == 0x10 || c->x86 == 0x11)
|
if (c->x86 == 0x10 || c->x86 == 0x11)
|
||||||
set_bit(X86_FEATURE_REP_GOOD, &c->x86_capability);
|
set_bit(X86_FEATURE_REP_GOOD, &c->x86_capability);
|
||||||
|
@ -697,25 +702,26 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
|
||||||
static void __cpuinit detect_ht(struct cpuinfo_x86 *c)
|
static void __cpuinit detect_ht(struct cpuinfo_x86 *c)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
u32 eax, ebx, ecx, edx;
|
u32 eax, ebx, ecx, edx;
|
||||||
int index_msb, core_bits;
|
int index_msb, core_bits;
|
||||||
|
|
||||||
cpuid(1, &eax, &ebx, &ecx, &edx);
|
cpuid(1, &eax, &ebx, &ecx, &edx);
|
||||||
|
|
||||||
|
|
||||||
if (!cpu_has(c, X86_FEATURE_HT))
|
if (!cpu_has(c, X86_FEATURE_HT))
|
||||||
return;
|
return;
|
||||||
if (cpu_has(c, X86_FEATURE_CMP_LEGACY))
|
if (cpu_has(c, X86_FEATURE_CMP_LEGACY))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
smp_num_siblings = (ebx & 0xff0000) >> 16;
|
smp_num_siblings = (ebx & 0xff0000) >> 16;
|
||||||
|
|
||||||
if (smp_num_siblings == 1) {
|
if (smp_num_siblings == 1) {
|
||||||
printk(KERN_INFO "CPU: Hyper-Threading is disabled\n");
|
printk(KERN_INFO "CPU: Hyper-Threading is disabled\n");
|
||||||
} else if (smp_num_siblings > 1 ) {
|
} else if (smp_num_siblings > 1) {
|
||||||
|
|
||||||
if (smp_num_siblings > NR_CPUS) {
|
if (smp_num_siblings > NR_CPUS) {
|
||||||
printk(KERN_WARNING "CPU: Unsupported number of the siblings %d", smp_num_siblings);
|
printk(KERN_WARNING "CPU: Unsupported number of "
|
||||||
|
"siblings %d", smp_num_siblings);
|
||||||
smp_num_siblings = 1;
|
smp_num_siblings = 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -725,7 +731,7 @@ static void __cpuinit detect_ht(struct cpuinfo_x86 *c)
|
||||||
|
|
||||||
smp_num_siblings = smp_num_siblings / c->x86_max_cores;
|
smp_num_siblings = smp_num_siblings / c->x86_max_cores;
|
||||||
|
|
||||||
index_msb = get_count_order(smp_num_siblings) ;
|
index_msb = get_count_order(smp_num_siblings);
|
||||||
|
|
||||||
core_bits = get_count_order(c->x86_max_cores);
|
core_bits = get_count_order(c->x86_max_cores);
|
||||||
|
|
||||||
|
@ -734,8 +740,10 @@ static void __cpuinit detect_ht(struct cpuinfo_x86 *c)
|
||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
if ((c->x86_max_cores * smp_num_siblings) > 1) {
|
if ((c->x86_max_cores * smp_num_siblings) > 1) {
|
||||||
printk(KERN_INFO "CPU: Physical Processor ID: %d\n", c->phys_proc_id);
|
printk(KERN_INFO "CPU: Physical Processor ID: %d\n",
|
||||||
printk(KERN_INFO "CPU: Processor Core ID: %d\n", c->cpu_core_id);
|
c->phys_proc_id);
|
||||||
|
printk(KERN_INFO "CPU: Processor Core ID: %d\n",
|
||||||
|
c->cpu_core_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -783,7 +791,7 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c)
|
||||||
unsigned n;
|
unsigned n;
|
||||||
|
|
||||||
init_intel_cacheinfo(c);
|
init_intel_cacheinfo(c);
|
||||||
if (c->cpuid_level > 9 ) {
|
if (c->cpuid_level > 9) {
|
||||||
unsigned eax = cpuid_eax(10);
|
unsigned eax = cpuid_eax(10);
|
||||||
/* Check for version and the number of counters */
|
/* Check for version and the number of counters */
|
||||||
if ((eax & 0xff) && (((eax>>8) & 0xff) > 1))
|
if ((eax & 0xff) && (((eax>>8) & 0xff) > 1))
|
||||||
|
@ -822,7 +830,7 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c)
|
||||||
set_bit(X86_FEATURE_SYNC_RDTSC, &c->x86_capability);
|
set_bit(X86_FEATURE_SYNC_RDTSC, &c->x86_capability);
|
||||||
else
|
else
|
||||||
clear_bit(X86_FEATURE_SYNC_RDTSC, &c->x86_capability);
|
clear_bit(X86_FEATURE_SYNC_RDTSC, &c->x86_capability);
|
||||||
c->x86_max_cores = intel_num_cpu_cores(c);
|
c->x86_max_cores = intel_num_cpu_cores(c);
|
||||||
|
|
||||||
srat_detect_node();
|
srat_detect_node();
|
||||||
}
|
}
|
||||||
|
@ -969,7 +977,7 @@ void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
|
||||||
*/
|
*/
|
||||||
if (c != &boot_cpu_data) {
|
if (c != &boot_cpu_data) {
|
||||||
/* AND the already accumulated flags with these */
|
/* AND the already accumulated flags with these */
|
||||||
for (i = 0 ; i < NCAPINTS ; i++)
|
for (i = 0; i < NCAPINTS; i++)
|
||||||
boot_cpu_data.x86_capability[i] &= c->x86_capability[i];
|
boot_cpu_data.x86_capability[i] &= c->x86_capability[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -983,16 +991,15 @@ void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void __cpuinit print_cpu_info(struct cpuinfo_x86 *c)
|
void __cpuinit print_cpu_info(struct cpuinfo_x86 *c)
|
||||||
{
|
{
|
||||||
if (c->x86_model_id[0])
|
if (c->x86_model_id[0])
|
||||||
printk("%s", c->x86_model_id);
|
printk(KERN_INFO "%s", c->x86_model_id);
|
||||||
|
|
||||||
if (c->x86_mask || c->cpuid_level >= 0)
|
if (c->x86_mask || c->cpuid_level >= 0)
|
||||||
printk(" stepping %02x\n", c->x86_mask);
|
printk(KERN_CONT " stepping %02x\n", c->x86_mask);
|
||||||
else
|
else
|
||||||
printk("\n");
|
printk(KERN_CONT "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1002,7 +1009,7 @@ void __cpuinit print_cpu_info(struct cpuinfo_x86 *c)
|
||||||
static int show_cpuinfo(struct seq_file *m, void *v)
|
static int show_cpuinfo(struct seq_file *m, void *v)
|
||||||
{
|
{
|
||||||
struct cpuinfo_x86 *c = v;
|
struct cpuinfo_x86 *c = v;
|
||||||
int cpu = 0;
|
int cpu = 0, i;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* These flag bits must match the definitions in <asm/cpufeature.h>.
|
* These flag bits must match the definitions in <asm/cpufeature.h>.
|
||||||
|
@ -1014,10 +1021,10 @@ static int show_cpuinfo(struct seq_file *m, void *v)
|
||||||
*/
|
*/
|
||||||
static const char *const x86_cap_flags[] = {
|
static const char *const x86_cap_flags[] = {
|
||||||
/* Intel-defined */
|
/* Intel-defined */
|
||||||
"fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce",
|
"fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce",
|
||||||
"cx8", "apic", NULL, "sep", "mtrr", "pge", "mca", "cmov",
|
"cx8", "apic", NULL, "sep", "mtrr", "pge", "mca", "cmov",
|
||||||
"pat", "pse36", "pn", "clflush", NULL, "dts", "acpi", "mmx",
|
"pat", "pse36", "pn", "clflush", NULL, "dts", "acpi", "mmx",
|
||||||
"fxsr", "sse", "sse2", "ss", "ht", "tm", "ia64", "pbe",
|
"fxsr", "sse", "sse2", "ss", "ht", "tm", "ia64", "pbe",
|
||||||
|
|
||||||
/* AMD-defined */
|
/* AMD-defined */
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
@ -1084,28 +1091,29 @@ static int show_cpuinfo(struct seq_file *m, void *v)
|
||||||
cpu = c->cpu_index;
|
cpu = c->cpu_index;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
seq_printf(m,"processor\t: %u\n"
|
seq_printf(m, "processor\t: %u\n"
|
||||||
"vendor_id\t: %s\n"
|
"vendor_id\t: %s\n"
|
||||||
"cpu family\t: %d\n"
|
"cpu family\t: %d\n"
|
||||||
"model\t\t: %d\n"
|
"model\t\t: %d\n"
|
||||||
"model name\t: %s\n",
|
"model name\t: %s\n",
|
||||||
(unsigned)cpu,
|
(unsigned)cpu,
|
||||||
c->x86_vendor_id[0] ? c->x86_vendor_id : "unknown",
|
c->x86_vendor_id[0] ? c->x86_vendor_id : "unknown",
|
||||||
c->x86,
|
c->x86,
|
||||||
(int)c->x86_model,
|
(int)c->x86_model,
|
||||||
c->x86_model_id[0] ? c->x86_model_id : "unknown");
|
c->x86_model_id[0] ? c->x86_model_id : "unknown");
|
||||||
|
|
||||||
if (c->x86_mask || c->cpuid_level >= 0)
|
if (c->x86_mask || c->cpuid_level >= 0)
|
||||||
seq_printf(m, "stepping\t: %d\n", c->x86_mask);
|
seq_printf(m, "stepping\t: %d\n", c->x86_mask);
|
||||||
else
|
else
|
||||||
seq_printf(m, "stepping\t: unknown\n");
|
seq_printf(m, "stepping\t: unknown\n");
|
||||||
|
|
||||||
if (cpu_has(c,X86_FEATURE_TSC)) {
|
if (cpu_has(c, X86_FEATURE_TSC)) {
|
||||||
unsigned int freq = cpufreq_quick_get((unsigned)cpu);
|
unsigned int freq = cpufreq_quick_get((unsigned)cpu);
|
||||||
|
|
||||||
if (!freq)
|
if (!freq)
|
||||||
freq = cpu_khz;
|
freq = cpu_khz;
|
||||||
seq_printf(m, "cpu MHz\t\t: %u.%03u\n",
|
seq_printf(m, "cpu MHz\t\t: %u.%03u\n",
|
||||||
freq / 1000, (freq % 1000));
|
freq / 1000, (freq % 1000));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Cache size */
|
/* Cache size */
|
||||||
|
@ -1123,19 +1131,16 @@ static int show_cpuinfo(struct seq_file *m, void *v)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
seq_printf(m,
|
seq_printf(m,
|
||||||
"fpu\t\t: yes\n"
|
"fpu\t\t: yes\n"
|
||||||
"fpu_exception\t: yes\n"
|
"fpu_exception\t: yes\n"
|
||||||
"cpuid level\t: %d\n"
|
"cpuid level\t: %d\n"
|
||||||
"wp\t\t: yes\n"
|
"wp\t\t: yes\n"
|
||||||
"flags\t\t:",
|
"flags\t\t:",
|
||||||
c->cpuid_level);
|
c->cpuid_level);
|
||||||
|
|
||||||
{
|
for (i = 0; i < 32*NCAPINTS; i++)
|
||||||
int i;
|
if (cpu_has(c, i) && x86_cap_flags[i] != NULL)
|
||||||
for ( i = 0 ; i < 32*NCAPINTS ; i++ )
|
seq_printf(m, " %s", x86_cap_flags[i]);
|
||||||
if (cpu_has(c, i) && x86_cap_flags[i] != NULL)
|
|
||||||
seq_printf(m, " %s", x86_cap_flags[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
seq_printf(m, "\nbogomips\t: %lu.%02lu\n",
|
seq_printf(m, "\nbogomips\t: %lu.%02lu\n",
|
||||||
c->loops_per_jiffy/(500000/HZ),
|
c->loops_per_jiffy/(500000/HZ),
|
||||||
|
@ -1150,18 +1155,16 @@ static int show_cpuinfo(struct seq_file *m, void *v)
|
||||||
c->x86_phys_bits, c->x86_virt_bits);
|
c->x86_phys_bits, c->x86_virt_bits);
|
||||||
|
|
||||||
seq_printf(m, "power management:");
|
seq_printf(m, "power management:");
|
||||||
{
|
for (i = 0; i < 32; i++) {
|
||||||
unsigned i;
|
if (c->x86_power & (1 << i)) {
|
||||||
for (i = 0; i < 32; i++)
|
if (i < ARRAY_SIZE(x86_power_flags) &&
|
||||||
if (c->x86_power & (1 << i)) {
|
x86_power_flags[i])
|
||||||
if (i < ARRAY_SIZE(x86_power_flags) &&
|
seq_printf(m, "%s%s",
|
||||||
x86_power_flags[i])
|
x86_power_flags[i][0]?" ":"",
|
||||||
seq_printf(m, "%s%s",
|
x86_power_flags[i]);
|
||||||
x86_power_flags[i][0]?" ":"",
|
else
|
||||||
x86_power_flags[i]);
|
seq_printf(m, " [%d]", i);
|
||||||
else
|
}
|
||||||
seq_printf(m, " [%d]", i);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
seq_printf(m, "\n\n");
|
seq_printf(m, "\n\n");
|
||||||
|
@ -1189,7 +1192,7 @@ static void c_stop(struct seq_file *m, void *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
struct seq_operations cpuinfo_op = {
|
struct seq_operations cpuinfo_op = {
|
||||||
.start =c_start,
|
.start = c_start,
|
||||||
.next = c_next,
|
.next = c_next,
|
||||||
.stop = c_stop,
|
.stop = c_stop,
|
||||||
.show = show_cpuinfo,
|
.show = show_cpuinfo,
|
||||||
|
|
Loading…
Reference in New Issue