Linux Kernel
3.7.1
|
#include <linux/bootmem.h>
#include <linux/linkage.h>
#include <linux/bitops.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/percpu.h>
#include <linux/string.h>
#include <linux/delay.h>
#include <linux/sched.h>
#include <linux/init.h>
#include <linux/kgdb.h>
#include <linux/smp.h>
#include <linux/io.h>
#include <asm/stackprotector.h>
#include <asm/perf_event.h>
#include <asm/mmu_context.h>
#include <asm/archrandom.h>
#include <asm/hypervisor.h>
#include <asm/processor.h>
#include <asm/debugreg.h>
#include <asm/sections.h>
#include <linux/topology.h>
#include <linux/cpumask.h>
#include <asm/pgtable.h>
#include <linux/atomic.h>
#include <asm/proto.h>
#include <asm/setup.h>
#include <asm/apic.h>
#include <asm/desc.h>
#include <asm/i387.h>
#include <asm/fpu-internal.h>
#include <asm/mtrr.h>
#include <linux/numa.h>
#include <asm/asm.h>
#include <asm/cpu.h>
#include <asm/mce.h>
#include <asm/msr.h>
#include <asm/pat.h>
#include "cpu.h"
Go to the source code of this file.
Data Structures | |
struct | cpuid_dependent_feature |
struct | msr_range |
Macros | |
#define | dbg_restore_debug_regs() |
__setup | ( | "noxsave" | , |
x86_xsave_setup | |||
) |
__setup | ( | "noxsaveopt" | , |
x86_xsaveopt_setup | |||
) |
__setup | ( | "nosmep" | , |
setup_disable_smep | |||
) |
__setup | ( | "nosmap" | , |
setup_disable_smap | |||
) |
__setup | ( | ) |
__setup | ( | "noclflush" | , |
setup_noclflush | |||
) |
void __cpuinit cpu_detect_cache_sizes | ( | struct cpuinfo_x86 * | c | ) |
cpu_init
This is our initial entry point for each CPU, and is invoked on the boot CPU prior to calling start_kernel(). For SMP, a combination of this and start_secondary() will bring up each processor to a ready state prior to hand forking the idle loop.
We do all of the basic processor init here, including setting up the caches, FPU, DSP, etc. By the time start_kernel() is hit (and subsequently platform_setup()) things like determining the CPU subtype and initial configuration will all be done.
Each processor family is still responsible for doing its own probing and cache configuration in cpu_probe().
DEFINE_PER_CPU | ( | struct task_struct * | , |
current_task | |||
) |
DEFINE_PER_CPU | ( | struct task_struct * | , |
fpu_owner_task | |||
) |
EXPORT_PER_CPU_SYMBOL | ( | current_task | ) |
EXPORT_PER_CPU_SYMBOL_GPL | ( | gdt_page | ) |
void __cpuinit identify_secondary_cpu | ( | struct cpuinfo_x86 * | c | ) |
cpumask_var_t cpu_callin_mask |
cpumask_var_t cpu_callout_mask |
cpumask_var_t cpu_initialized_mask |
cpumask_var_t cpu_sibling_setup_mask |
s8 __read_mostly tlb_flushall_shift = -1 |
u16 __read_mostly tlb_lld_2m[NR_INFO] |
u16 __read_mostly tlb_lld_4k[NR_INFO] |
u16 __read_mostly tlb_lld_4m[NR_INFO] |
u16 __read_mostly tlb_lli_2m[NR_INFO] |
u16 __read_mostly tlb_lli_4k[NR_INFO] |
u16 __read_mostly tlb_lli_4m[NR_INFO] |