mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
[PATCH] i386: cpu_detect extraction
Both lhype and Xen want to call the core of the x86 cpu detect code before calling start_kernel. (extracted from larger patch) AK: folded in start_kernel header patch Signed-off-by: Jeremy Fitzhardinge <jeremy@xensource.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Signed-off-by: Andi Kleen <ak@suse.de> Cc: Jeremy Fitzhardinge <jeremy@goop.org> Cc: Andi Kleen <ak@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org>
This commit is contained in:
parent
139ec7c416
commit
d7cd56111f
4 changed files with 37 additions and 16 deletions
|
@ -236,29 +236,14 @@ static int __cpuinit have_cpuid_p(void)
|
||||||
return flag_is_changeable_p(X86_EFLAGS_ID);
|
return flag_is_changeable_p(X86_EFLAGS_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Do minimum CPU detection early.
|
void __init cpu_detect(struct cpuinfo_x86 *c)
|
||||||
Fields really needed: vendor, cpuid_level, family, model, mask, cache alignment.
|
|
||||||
The others are not touched to avoid unwanted side effects.
|
|
||||||
|
|
||||||
WARNING: this function is only called on the BP. Don't add code here
|
|
||||||
that is supposed to run on all CPUs. */
|
|
||||||
static void __init early_cpu_detect(void)
|
|
||||||
{
|
{
|
||||||
struct cpuinfo_x86 *c = &boot_cpu_data;
|
|
||||||
|
|
||||||
c->x86_cache_alignment = 32;
|
|
||||||
|
|
||||||
if (!have_cpuid_p())
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* Get vendor name */
|
/* Get vendor name */
|
||||||
cpuid(0x00000000, &c->cpuid_level,
|
cpuid(0x00000000, &c->cpuid_level,
|
||||||
(int *)&c->x86_vendor_id[0],
|
(int *)&c->x86_vendor_id[0],
|
||||||
(int *)&c->x86_vendor_id[8],
|
(int *)&c->x86_vendor_id[8],
|
||||||
(int *)&c->x86_vendor_id[4]);
|
(int *)&c->x86_vendor_id[4]);
|
||||||
|
|
||||||
get_cpu_vendor(c, 1);
|
|
||||||
|
|
||||||
c->x86 = 4;
|
c->x86 = 4;
|
||||||
if (c->cpuid_level >= 0x00000001) {
|
if (c->cpuid_level >= 0x00000001) {
|
||||||
u32 junk, tfms, cap0, misc;
|
u32 junk, tfms, cap0, misc;
|
||||||
|
@ -275,6 +260,26 @@ static void __init early_cpu_detect(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Do minimum CPU detection early.
|
||||||
|
Fields really needed: vendor, cpuid_level, family, model, mask, cache alignment.
|
||||||
|
The others are not touched to avoid unwanted side effects.
|
||||||
|
|
||||||
|
WARNING: this function is only called on the BP. Don't add code here
|
||||||
|
that is supposed to run on all CPUs. */
|
||||||
|
static void __init early_cpu_detect(void)
|
||||||
|
{
|
||||||
|
struct cpuinfo_x86 *c = &boot_cpu_data;
|
||||||
|
|
||||||
|
c->x86_cache_alignment = 32;
|
||||||
|
|
||||||
|
if (!have_cpuid_p())
|
||||||
|
return;
|
||||||
|
|
||||||
|
cpu_detect(c);
|
||||||
|
|
||||||
|
get_cpu_vendor(c, 1);
|
||||||
|
}
|
||||||
|
|
||||||
static void __cpuinit generic_identify(struct cpuinfo_x86 * c)
|
static void __cpuinit generic_identify(struct cpuinfo_x86 * c)
|
||||||
{
|
{
|
||||||
u32 tfms, xlvl;
|
u32 tfms, xlvl;
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <linux/threads.h>
|
#include <linux/threads.h>
|
||||||
#include <asm/percpu.h>
|
#include <asm/percpu.h>
|
||||||
#include <linux/cpumask.h>
|
#include <linux/cpumask.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
|
||||||
/* flag for disabling the tsc */
|
/* flag for disabling the tsc */
|
||||||
extern int tsc_disable;
|
extern int tsc_disable;
|
||||||
|
@ -112,6 +113,8 @@ extern struct cpuinfo_x86 cpu_data[];
|
||||||
extern int cpu_llc_id[NR_CPUS];
|
extern int cpu_llc_id[NR_CPUS];
|
||||||
extern char ignore_fpu_irq;
|
extern char ignore_fpu_irq;
|
||||||
|
|
||||||
|
void __init cpu_detect(struct cpuinfo_x86 *c);
|
||||||
|
|
||||||
extern void identify_cpu(struct cpuinfo_x86 *);
|
extern void identify_cpu(struct cpuinfo_x86 *);
|
||||||
extern void print_cpu_info(struct cpuinfo_x86 *);
|
extern void print_cpu_info(struct cpuinfo_x86 *);
|
||||||
extern unsigned int init_intel_cacheinfo(struct cpuinfo_x86 *c);
|
extern unsigned int init_intel_cacheinfo(struct cpuinfo_x86 *c);
|
||||||
|
|
12
include/linux/start_kernel.h
Normal file
12
include/linux/start_kernel.h
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
#ifndef _LINUX_START_KERNEL_H
|
||||||
|
#define _LINUX_START_KERNEL_H
|
||||||
|
|
||||||
|
#include <linux/linkage.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
|
||||||
|
/* Define the prototype for start_kernel here, rather than cluttering
|
||||||
|
up something else. */
|
||||||
|
|
||||||
|
extern asmlinkage void __init start_kernel(void);
|
||||||
|
|
||||||
|
#endif /* _LINUX_START_KERNEL_H */
|
|
@ -29,6 +29,7 @@
|
||||||
#include <linux/percpu.h>
|
#include <linux/percpu.h>
|
||||||
#include <linux/kmod.h>
|
#include <linux/kmod.h>
|
||||||
#include <linux/kernel_stat.h>
|
#include <linux/kernel_stat.h>
|
||||||
|
#include <linux/start_kernel.h>
|
||||||
#include <linux/security.h>
|
#include <linux/security.h>
|
||||||
#include <linux/workqueue.h>
|
#include <linux/workqueue.h>
|
||||||
#include <linux/profile.h>
|
#include <linux/profile.h>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue