paravirt_ops for unified x86 - that's me again!
Subsystems (8)
cover paravirt_ops for unified x86 - that's me again!
Hey folks,
Here's a new spin of the pvops64 patch series. We didn't get that many comments from the last time, so it should be probably almost ready to get in. Heya!
Quoted 1 line
From the last version, the most notable changes are:
* consolidation of system.h, merging jeremy's comments about ordering concerns
* consolidation of smp functions that goes through smp_ops. They're sharing a bunch of code now.
Other than that, just some issues that arose from the rebase.
Please, not that this patch series _does not_ apply over linus git anymore, but rather, over tglx cleanup series.
The first patch in this series is already on linus', but not on tglx', so I'm sending it again, because you'll need it if you want to compile it anyway.
tglx, in the absense of any outstanding NACKs, or any very big call for improvements, could you please pull it in your tree?
Have fun,
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
PATCH 1/24 mm/sparse-vmemmap.c: make sure init_mm is included
mm/sparse-vmemmap.c uses init_mm in some places. However, it is not present in any of the headers currently included in the file.
init_mm is defined as extern in sched.h, so we add it to the headers list
Up to now, this problem was masked by the fact that functions like set_pte_at() and pmd_populate_kernel() are usually macros that expand to simpler variants that does not use the first parameter at all.
--- mm/sparse-vmemmap.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
mm/sparse-vmemmap.c +1 -0
@@ -24,6 +24,7 @@#include <linux/module.h> #include <linux/spinlock.h> #include <linux/vmalloc.h> +#include <linux/sched.h> #include <asm/dma.h> #include <asm/pgalloc.h> #include <asm/pgtable.h>
Signature · 1 line
1.4.4.2
PATCH 2/24 irqflags consolidation
This patch consolidates the irqflags include files containing common paravirt definitions. The native definition for interrupt handling, halt, and such, are the same for 32 and 64 bit, and they are kept in irqflags.h. The differences are split in the arch-specific files.
The syscall function, irq_enable_sysexit, has a very specific i386 naming, and its name is then changed to a more general one.
--- arch/x86/kernel/asm-offsets_32.c | 2 +- arch/x86/kernel/entry_32.S | 8 +- arch/x86/kernel/paravirt_32.c | 10 +- arch/x86/kernel/vmi_32.c | 4 +- arch/x86/xen/enlighten.c | 2 +- include/asm-x86/irqflags.h | 246 +++++++++++++++++++++++++++++++++++++- include/asm-x86/irqflags_32.h | 174 --------------------------- include/asm-x86/irqflags_64.h | 154 ------------------------ include/asm-x86/paravirt.h | 9 +- 9 files changed, 261 insertions(+), 348 deletions(-)
arch/x86/kernel/asm-offsets_32.c +1 -1
@@ -123,7 +123,7 @@ void foo(void)OFFSET (PV_IRQ_irq_disable, pv_irq_ops, irq_disable);OFFSET (PV_IRQ_irq_enable, pv_irq_ops, irq_enable);OFFSET (PV_CPU_iret, pv_cpu_ops, iret); -OFFSET (PV_CPU_irq_enable_sysexit, pv_cpu_ops, irq_enable_sysexit); +OFFSET (PV_CPU_irq_enable_syscall_ret, pv_cpu_ops, irq_enable_syscall_ret);OFFSET (PV_CPU_read_cr0, pv_cpu_ops, read_cr0);#endif
arch/x86/kernel/entry_32.S +4 -4
@@ -58,7 +58,7 @@ * for paravirtualization. The following will never clobber any registers: * INTERRUPT_RETURN (aka. "iret") * GET_CR0_INTO_EAX (aka. "movl %cr0, %eax") - * ENABLE_INTERRUPTS_SYSEXIT (aka "sti; sysexit"). + * ENABLE_INTERRUPTS_SYSCALL_RET (aka "sti; sysexit"). * * For DISABLE_INTERRUPTS/ENABLE_INTERRUPTS (aka "cli"/"sti"), you must * specify what registers can be overwritten (CLBR_NONE, CLBR_EAX/EDX/ECX/ANY).
@@ -351,7 +351,7 @@ sysenter_past_esp: xorl %ebp,%ebp TRACE_IRQS_ON 1: mov PT_FS(%esp), %fs - ENABLE_INTERRUPTS_SYSEXIT + ENABLE_INTERRUPTS_SYSCALL_RET CFI_ENDPROC .pushsection .fixup,"ax" 2: movl $0,PT_FS(%esp)
@@ -882,10 +882,10 @@ ENTRY(native_iret) .previous END(native_iret) -ENTRY(native_irq_enable_sysexit) +ENTRY(native_irq_enable_syscall_ret) sti sysexit -END(native_irq_enable_sysexit) +END(native_irq_enable_syscall_ret) #endif KPROBE_ENTRY(int3)
arch/x86/kernel/paravirt_32.c +5 -5
@@ -60,7 +60,7 @@ DEF_NATIVE(pv_irq_ops, irq_enable, "sti");DEF_NATIVE (pv_irq_ops, restore_fl,"push %eax; popf" );DEF_NATIVE (pv_irq_ops, save_fl,"pushf; pop %eax" );DEF_NATIVE (pv_cpu_ops, iret,"iret" ); -DEF_NATIVE (pv_cpu_ops, irq_enable_sysexit,"sti; sysexit" ); +DEF_NATIVE (pv_cpu_ops, irq_enable_syscall_ret,"sti; sysexit" );DEF_NATIVE (pv_mmu_ops, read_cr2,"mov %cr2, %eax" );DEF_NATIVE (pv_mmu_ops, write_cr3,"mov %eax, %cr3" );DEF_NATIVE (pv_mmu_ops, read_cr3,"mov %cr3, %eax" );
@@ -88,7 +88,7 @@ static unsigned native_patch(u8 type, u16 clobbers, void *ibuf,SITE (pv_irq_ops, restore_fl);SITE (pv_irq_ops, save_fl);SITE (pv_cpu_ops, iret); -SITE (pv_cpu_ops, irq_enable_sysexit); +SITE (pv_cpu_ops, irq_enable_syscall_ret);SITE (pv_mmu_ops, read_cr2);SITE (pv_mmu_ops, read_cr3);SITE (pv_mmu_ops, write_cr3);
@@ -186,7 +186,7 @@ unsigned paravirt_patch_default(u8 type, u16 clobbers, void *insnbuf,/* If the operation is a nop, then nop the callsite */ ret =paravirt_patch_nop (); else if (type == PARAVIRT_PATCH(pv_cpu_ops.iret) || - type == PARAVIRT_PATCH(pv_cpu_ops.irq_enable_sysexit)) + type == PARAVIRT_PATCH(pv_cpu_ops.irq_enable_syscall_ret))/* If operation requires a jmp, then jmp */ ret =paravirt_patch_jmp (insnbuf, opfunc, addr, len); else
@@ -237,7 +237,7 @@ static void native_flush_tlb_single(unsigned long addr)/* These are in entry.S */ extern void native_iret (void ); -extern void native_irq_enable_sysexit (void ); +extern void native_irq_enable_syscall_ret (void );static int __init print_banner (void ) {
@@ -384,7 +384,7 @@ struct pv_cpu_ops pv_cpu_ops = { .write_idt_entry = write_dt_entry, .load_esp0 = native_load_esp0, - .irq_enable_sysexit = native_irq_enable_sysexit, + .irq_enable_syscall_ret = native_irq_enable_syscall_ret, .iret = native_iret, .set_iopl_mask = native_set_iopl_mask,
arch/x86/kernel/vmi_32.c +2 -2
@@ -148,7 +148,7 @@ static unsigned vmi_patch(u8 type, u16 clobbers, void *insns, insns, eip);case PARAVIRT_PATCH (pv_cpu_ops.iret):return patch_internal (VMI_CALL_IRET , len, insns, eip); -case PARAVIRT_PATCH (pv_cpu_ops.irq_enable_sysexit): +case PARAVIRT_PATCH (pv_cpu_ops.irq_enable_syscall_ret):return patch_internal (VMI_CALL_SYSEXIT , len, insns, eip);default :break ;
@@ -870,7 +870,7 @@ static inline int __init activate_vmi(void)* the backend. They are performance critical anyway, so requiring * a patch is not a big problem. */ - pv_cpu_ops.irq_enable_sysexit = (void *)0xfeedbab0 ; + pv_cpu_ops.irq_enable_syscall_ret = (void *)0xfeedbab0 ; pv_cpu_ops.iret = (void *)0xbadbab0 ;#ifdef CONFIG_SMP
arch/x86/xen/enlighten.c +1 -1
@@ -953,7 +953,7 @@ static const struct pv_cpu_ops xen_cpu_ops __initdata = { .read_pmc = native_read_pmc, .iret = (void *)&hypercall_page[__HYPERVISOR_iret], - .irq_enable_sysexit = NULL, /* never called */ + .irq_enable_syscall_ret = NULL, /* never called */ .load_tr_desc = paravirt_nop, .set_ldt = xen_set_ldt,
include/asm-x86/irqflags.h +243 -3
248 lines not on this page · raw message
include/asm-x86/irqflags_32.h deleted +0 -174
174 lines not on this page · raw message
include/asm-x86/irqflags_64.h deleted +0 -154
154 lines not on this page · raw message
include/asm-x86/paravirt.h +5 -4
@@ -121,7 +121,7 @@ struct pv_cpu_ops {u64 (*read_pmc)(void);/* These two are jmp to, not actually called. */ -void (*irq_enable_sysexit)(void ); +void (*irq_enable_syscall_ret)(void );void (*iret)(void );struct pv_lazy_ops lazy_mode;
@@ -1138,9 +1138,10 @@ static inline unsigned long __raw_local_irq_save(void) call *%cs:pv_irq_ops+PV_IRQ_irq_enable; \ popl %edx; popl %ecx; popl %eax) -#define ENABLE_INTERRUPTS_SYSEXIT \ - PARA_SITE(PARA_PATCH(pv_cpu_ops, PV_CPU_irq_enable_sysexit), CLBR_NONE,\ - jmp *%cs:pv_cpu_ops+PV_CPU_irq_enable_sysexit) +#define ENABLE_INTERRUPTS_SYSCALL_RET \ + PARA_SITE(PARA_PATCH(pv_cpu_ops, PV_CPU_irq_enable_syscall_ret),\ + CLBR_NONE, \ + jmp *%cs:pv_cpu_ops+PV_CPU_irq_enable_syscall_ret)#define GET_CR0_INTO_EAX \ push %ecx; push %edx; \
Signature · 8 lines
1.4.4.2 ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
PATCH 3/24 consolidate spinlock.h
The cli and sti instructions need to be replaced by paravirt hooks. For the i386 architecture, this is already done. The code requirements aren't much different from x86_64 POV, so this part is consolidated in the common header
--- include/asm-x86/spinlock.h | 14 ++++++++++++++ include/asm-x86/spinlock_32.h | 9 --------- include/asm-x86/spinlock_64.h | 8 +++++--- 3 files changed, 19 insertions(+), 12 deletions(-)
include/asm-x86/spinlock.h +14 -0
@@ -1,5 +1,19 @@ +#ifndef _X86_SPINLOCK_H_ +#define _X86_SPINLOCK_H_ + +#ifdef CONFIG_PARAVIRT +#include <asm/paravirt.h> +#else +#define CLI_STRING "cli" +#define STI_STRING "sti" +#define CLI_STI_CLOBBERS +#define CLI_STI_INPUT_ARGS +#endif /* CONFIG_PARAVIRT */ +#ifdef CONFIG_X86_32 # include "spinlock_32.h" #else # include "spinlock_64.h" #endif + +#endif
include/asm-x86/spinlock_32.h +0 -9
@@ -7,15 +7,6 @@#include <asm/processor.h> #include <linux/compiler.h> -#ifdef CONFIG_PARAVIRT -#include <asm/paravirt.h> -#else -#define CLI_STRING "cli" -#define STI_STRING "sti" -#define CLI_STI_CLOBBERS -#define CLI_STI_INPUT_ARGS -#endif /* CONFIG_PARAVIRT */ -/* * Your basic SMP spinlocks, allowing only a single CPU anywhere *
include/asm-x86/spinlock_64.h +5 -3
@@ -48,12 +48,12 @@ static inline void __raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long fla"jns 5f\n" "testl $0x200, %1\n\t" /* interrupts were disabled? */ "jz 4f\n\t" -"sti\n" +STI_STRING "\n" "3:\t" "rep;nop\n\t" "cmpl $0, %0\n\t" "jle 3b\n\t" -"cli\n\t" +CLI_STRING "\n\t" "jmp 1b\n" "4:\t" "rep;nop\n\t"
@@ -61,7 +61,9 @@ static inline void __raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long fla"jg 1b\n\t" "jmp 4b\n" "5:\n\t" - : "+m" (lock->slock) : "r" ((unsigned)flags) : "memory"); + : "+m" (lock->slock) + : "r" ((unsigned)flags) CLI_STI_INPUT_ARGS + : "memory" CLI_STI_CLOBBERS); } #endif
Signature · 8 lines
1.4.4.2 ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
PATCH 4/24 tlb functions consolidation
This patch consolidates part of the tlb handling functions for the x86 architecture. In this approach, we start by the parts actually used for paravirt in i386.
--- arch/x86/kernel/smp_64.c | 5 ++- include/asm-x86/tlbflush.h | 77 +++++++++++++++++++++++++++++++++++++++++ include/asm-x86/tlbflush_32.h | 77 ----------------------------------------- include/asm-x86/tlbflush_64.h | 43 +++-------------------- 4 files changed, 85 insertions(+), 117 deletions(-)
arch/x86/kernel/smp_64.c +3 -2
@@ -166,11 +166,12 @@ out:add_pda (irq_tlb_count,1 ); } -static void flush_tlb_others (cpumask_t cpumask,struct mm_struct *mm, -unsigned long va) +void native_flush_tlb_others (const cpumask_t *cpumaskp, +struct mm_struct *mm,unsigned long va) {int sender;union smp_flush_state *f; +cpumask_t cpumask = *cpumaskp;/* Caller has disabled preemption */ sender =smp_processor_id () %NUM_INVALIDATE_TLB_VECTORS ;
include/asm-x86/tlbflush.h +77 -0
82 lines not on this page · raw message
include/asm-x86/tlbflush_32.h +0 -77
93 lines not on this page · raw message
include/asm-x86/tlbflush_64.h +5 -38
58 lines not on this page · raw message
Signature · 8 lines
1.4.4.2 ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
PATCH 5/24 smp x86 consolidation
This patch consolidates part of the pieces of smp for both architectures. (i386 and x86_64). It makes part the calls go through smp_ops, and shares code for those functions in smpcommon.c
There's more room for code sharing here, but it is left as an exercise to the reader ;-)
--- arch/x86/kernel/Makefile_32 | 2 +- arch/x86/kernel/Makefile_64 | 2 +- arch/x86/kernel/smp_32.c | 218 ------------------------------ arch/x86/kernel/smp_64.c | 245 --------------------------------- arch/x86/kernel/smpboot_64.c | 8 +- arch/x86/kernel/smpcommon.c | 291 ++++++++++++++++++++++++++++++++++++++++ arch/x86/kernel/smpcommon_32.c | 81 ----------- include/asm-x86/idle.h | 18 +++- include/asm-x86/smp.h | 66 +++++++++ include/asm-x86/smp_32.h | 58 -------- include/asm-x86/smp_64.h | 4 - 11 files changed, 379 insertions(+), 614 deletions(-)
arch/x86/kernel/Makefile_32 +1 -1
@@ -20,7 +20,7 @@ obj-$(CONFIG_MICROCODE) += microcode.o obj-$(CONFIG_PCI) += early-quirks.o obj-$(CONFIG_APM) += apm_32.o obj-$(CONFIG_X86_SMP) += smp_32.o smpboot_32.o tsc_sync.o -obj-$(CONFIG_SMP) += smpcommon_32.o +obj-$(CONFIG_SMP) += smpcommon.o obj-$(CONFIG_X86_TRAMPOLINE) += trampoline_32.o obj-$(CONFIG_X86_MPPARSE) += mpparse_32.o obj-$(CONFIG_X86_LOCAL_APIC) += apic_32.o nmi_32.o
arch/x86/kernel/Makefile_64 +1 -1
@@ -17,7 +17,7 @@ obj-y += acpi/ obj-$(CONFIG_X86_MSR) += msr.o obj-$(CONFIG_MICROCODE) += microcode.o obj-$(CONFIG_X86_CPUID) += cpuid.o -obj-$(CONFIG_SMP) += smp_64.o smpboot_64.o trampoline_64.o tsc_sync.o +obj-$(CONFIG_SMP) += smp_64.o smpboot_64.o trampoline_64.o tsc_sync.o smpcommon.o obj-y += apic_64.o nmi_64.o obj-y += io_apic_64.o mpparse_64.o genapic_64.o genapic_flat_64.o obj-$(CONFIG_KEXEC) += machine_kexec_64.o relocate_kernel_64.o crash.o
arch/x86/kernel/smp_32.c +0 -218
227 lines not on this page · raw message
arch/x86/kernel/smp_64.c +0 -245
248 lines not on this page · raw message
arch/x86/kernel/smpboot_64.c +4 -4
@@ -864,7 +864,7 @@ void __init smp_set_apicids(void)* Prepare for SMP bootup. The MP table or ACPI has been read * earlier. Just do some sanity checking here and enable APIC mode. */ -void __init smp_prepare_cpus (unsigned int max_cpus) +void __init native_smp_prepare_cpus (unsigned int max_cpus) {nmi_watchdog_default (); current_cpu_data = boot_cpu_data;
@@ -908,7 +908,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)/* * Early setup to make printk work. */ -void __init smp_prepare_boot_cpu (void ) +void __init native_smp_prepare_boot_cpu (void ) {int me =smp_processor_id ();cpu_set (me, cpu_online_map);
@@ -919,7 +919,7 @@ void __init smp_prepare_boot_cpu(void)/* * Entry point to boot a CPU. */ -int __cpuinit __cpu_up (unsigned int cpu) +int __cpuinit native_cpu_up (unsigned int cpu) {int apicid =cpu_present_to_apicid (cpu);unsigned long flags;
@@ -977,7 +977,7 @@ int __cpuinit __cpu_up(unsigned int cpu)/* * Finish the SMP boot. */ -void __init smp_cpus_done (unsigned int max_cpus) +void __init native_smp_cpus_done (unsigned int max_cpus) {smp_cleanup_boot ();setup_ioapic_dest ();
arch/x86/kernel/smpcommon.c new file +291 -0
291 lines not on this page · raw message
arch/x86/kernel/smpcommon_32.c deleted +0 -81
81 lines not on this page · raw message
include/asm-x86/idle.h +16 -2
@@ -1,5 +1,5 @@ -#ifndef _ASM_X86_64_IDLE_H -#define _ASM_X86_64_IDLE_H 1 +#ifndef _ASM_X86_IDLE_H +#define _ASM_X86_IDLE_H 1#define IDLE_START 1#define IDLE_END 2
@@ -7,7 +7,21 @@struct notifier_block ;void idle_notifier_register (struct notifier_block *n); +#ifdef CONFIG_X86_64 void enter_idle (void );void exit_idle (void ); +#else +/* +* i386 does not really uses it, but define them here so we can avoid ifdefs in +* shared locations that uses it +*/ +static inline void enter_idle (void ) +{ +} +static inline void exit_idle (void ) +{ +} +#endif +#endif
include/asm-x86/smp.h +66 -0
71 lines not on this page · raw message
include/asm-x86/smp_32.h +0 -58
64 lines not on this page · raw message
include/asm-x86/smp_64.h +0 -4
@@ -36,9 +36,6 @@ extern volatile unsigned long smp_invalidate_needed;extern void lock_ipi_call_lock (void );extern void unlock_ipi_call_lock (void );extern int smp_num_siblings; -extern void smp_send_reschedule (int cpu); -extern int smp_call_function_mask (cpumask_t mask,void (*func)(void *), -void *info,int wait);/* * cpu_sibling_map and cpu_core_map now live
@@ -127,4 +124,3 @@ extern unsigned int boot_cpu_id;#define cpu_physical_id (cpu) boot_cpu_id#endif /* !CONFIG_SMP */ #endif -
Signature · 8 lines
1.4.4.2 ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
PATCH 6/24 Add debugreg/load_rsp native hooks
This patch adds native hooks for debugreg handling functions, and for the native load_rsp0 function. The later also have its call sites patched. There's some room for consolidation in the processor*.h headers, and it is done, for paravirt related functions
--- arch/x86/kernel/process_64.c | 2 +- arch/x86/kernel/smpboot_64.c | 2 +- include/asm-x86/msr.h | 67 ------------------ include/asm-x86/processor.h | 146 ++++++++++++++++++++++++++++++++++++++++ include/asm-x86/processor_32.h | 138 +------------------------------------- include/asm-x86/processor_64.h | 32 ++++----- 6 files changed, 165 insertions(+), 222 deletions(-)
arch/x86/kernel/process_64.c +1 -1
@@ -589,7 +589,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)/* * Reload esp0, LDT and the page table pointer: */ - tss->rsp0 = next->rsp0; +load_esp0 (tss, next);/* * Switch DS and ES.
arch/x86/kernel/smpboot_64.c +1 -1
@@ -613,7 +613,7 @@ do_rest: start_rip =setup_trampoline (); init_rsp = c_idle.idle->thread.rsp; -per_cpu (init_tss,cpu).rsp0 = init_rsp; +load_esp0 (&per_cpu (init_tss, cpu), &c_idle.idle->thread); initial_code = start_secondary;clear_tsk_thread_flag (c_idle.idle,TIF_FORK );
include/asm-x86/msr.h +0 -67
73 lines not on this page · raw message
include/asm-x86/processor.h +146 -0
151 lines not on this page · raw message
include/asm-x86/processor_32.h +2 -136
157 lines not on this page · raw message
include/asm-x86/processor_64.h +15 -17
@@ -114,21 +114,13 @@ extern unsigned long mmu_cr4_features;static inline void set_in_cr4 (unsigned long mask) { mmu_cr4_features |= mask; - __asm__("movq %%cr4,%%rax\n\t" -"orq %0,%%rax\n\t" -"movq %%rax,%%cr4\n" - : :"irg" (mask) - :"ax" ); +write_cr4 (read_cr4 () | mask); }static inline void clear_in_cr4 (unsigned long mask) { mmu_cr4_features &= ~mask; - __asm__("movq %%cr4,%%rax\n\t" -"andq %0,%%rax\n\t" -"movq %%rax,%%cr4\n" - : :"irg" (~mask) - :"ax" ); +write_cr4 (read_cr4 () & ~mask); }
@@ -249,6 +241,12 @@ struct thread_struct { .rsp0 = (unsigned long)&init_stack + sizeof(init_stack) \ } +static inline void native_load_esp0 (struct tss_struct *tss, +struct thread_struct *thread) +{ + tss->rsp0 = thread->rsp0; +} +#define INIT_MMAP \ { &init_mm, 0, 0, NULL, PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC, 1, NULL, NULL }
@@ -264,13 +262,13 @@ struct thread_struct {set_fs (USER_DS ); \ }while (0 ) -#define get_debugreg (var, register) \ - __asm__("movq %%db" #register ", %0" \ - :"=r" (var)) -#define set_debugreg(value, register) \ - __asm__("movq %0,%%db" #register \ - : /* no output */ \ - :"r" (value)) +extern void native_swapgs(void); + +/* We have it for simmetry with i386 code, but we don't really use it */ +static inline void native_set_iopl_mask (unsigned mask) +{ + +}struct task_struct ;struct mm_struct ;
Signature · 1 line
1.4.4.2
PATCH 7/24 consolidate msr.h
This patch goes one step forward in consolidating the msr.h header. It shares code between i386 and x86_64, instead of duplicating the code for tsc reading, msr reading/writing, etc.
--- arch/x86/ia32/syscall32.c | 2 +- arch/x86/kernel/setup64.c | 6 +- arch/x86/kernel/tsc_64.c | 17 +++- arch/x86/kernel/vsyscall_64.c | 4 +- arch/x86/vdso/vgetcpu.c | 4 +- include/asm-x86/alternative_32.h | 17 +++- include/asm-x86/alternative_64.h | 27 ++++- include/asm-x86/msr.h | 225 ++++++++++---------------------------- include/asm-x86/tsc.h | 33 +++++- 9 files changed, 151 insertions(+), 184 deletions(-)
arch/x86/ia32/syscall32.c +1 -1
@@ -82,5 +82,5 @@ void syscall32_cpu_init(void)checking_wrmsrl (MSR_IA32_SYSENTER_ESP ,0ULL );checking_wrmsrl (MSR_IA32_SYSENTER_EIP , (u64 )ia32_sysenter_target); -wrmsrl (MSR_CSTAR , ia32_cstar_target); +wrmsrl (MSR_CSTAR , (u64 )ia32_cstar_target); }
arch/x86/kernel/setup64.c +3 -3
@@ -122,7 +122,7 @@ void pda_init(int cpu) asmvolatile ("movl %0,%%fs ; movl %0,%%gs" ::"r" (0 ));/* Memory clobbers used to order PDA accessed */ mb (); -wrmsrl (MSR_GS_BASE , pda); +wrmsrl (MSR_GS_BASE , (u64 )pda);mb (); pda->cpunumber = cpu;
@@ -161,8 +161,8 @@ void syscall_init(void)* but only a 32bit target. LSTAR sets the 64bit rip. */ wrmsrl (MSR_STAR , ((u64 )__USER32_CS)<<48 | ((u64 )__KERNEL_CS)<<32 ); -wrmsrl (MSR_LSTAR , system_call); -wrmsrl (MSR_CSTAR , ignore_sysret); +wrmsrl (MSR_LSTAR , (u64 )system_call); +wrmsrl (MSR_CSTAR , (u64 )ignore_sysret);#ifdef CONFIG_IA32_EMULATION syscall32_cpu_init ();
arch/x86/kernel/tsc_64.c +15 -2
@@ -30,7 +30,7 @@ static unsigned long long cycles_2_ns(unsigned long long cyc)return (cyc * cyc2ns_scale) >>NS_SCALE ; } -unsigned long long sched_clock (void ) +unsigned long long native_sched_clock (void ) {unsigned long a =0 ;
@@ -44,6 +44,19 @@ unsigned long long sched_clock(void)return cycles_2_ns (a); } +/* We need to define a real function for sched_clock, to override the +weak default version */ +#ifdef CONFIG_PARAVIRT +unsigned long long sched_clock (void ) +{ +return paravirt_sched_clock (); +} +#else +unsigned long long +sched_clock (void ) __attribute__((alias ("native_sched_clock" ))); +#endif + +static int tsc_unstable;inline int check_tsc_unstable (void )
@@ -256,7 +269,7 @@ static cycle_t read_tsc(void) static cycle_t __vsyscall_fn vread_tsc(void) { -cycle_t ret = (cycle_t )get_cycles_sync (); +cycle_t ret = (cycle_t )vget_cycles_sync ();return ret; }
arch/x86/kernel/vsyscall_64.c +2 -2
@@ -190,7 +190,7 @@ time_t __vsyscall(1) vtime(time_t *t) long __vsyscall(2) vgetcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *tcache) { -unsigned int dummy, p; +unsigned int p;unsigned long j =0 ;/* Fast cache - only recompute value once per jiffies and avoid
@@ -205,7 +205,7 @@ vgetcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *tcache) p = tcache->blob[1 ]; }else if (__vgetcpu_mode ==VGETCPU_RDTSCP ) {/* Load per CPU data from RDTSCP */ -rdtscp (dummy, dummy, p); +native_read_tscp (&p); }else {/* Load per CPU data from GDT */ asm("lsl %1,%0" :"=r" (p) :"r" (__PER_CPU_SEG));
arch/x86/vdso/vgetcpu.c +2 -2
@@ -15,7 +15,7 @@long __vdso_getcpu (unsigned *cpu,unsigned *node,struct getcpu_cache *tcache) { -unsigned int dummy, p; +unsigned int p;unsigned long j =0 ;/* Fast cache - only recompute value once per jiffies and avoid
@@ -30,7 +30,7 @@ long __vdso_getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *tcache) p = tcache->blob[1 ]; }else if (*vdso_vgetcpu_mode ==VGETCPU_RDTSCP ) {/* Load per CPU data from RDTSCP */ -rdtscp (dummy, dummy, p); +native_read_tscp (&p); }else {/* Load per CPU data from GDT */ asm("lsl %1,%0" :"=r" (p) :"r" (__PER_CPU_SEG));
include/asm-x86/alternative_32.h +16 -1
@@ -101,7 +101,22 @@ static inline void alternatives_smp_switch(int smp) {}* use this macro(s) if you need more than one output parameter * in alternative_io */ -#define ASM_OUTPUT2 (a, b) a, b +#define ASM_OUTPUT2(a, b...) a, b + +#define fixup_section(code, fixup, output, input...) \ + asm volatile("2: " code "\n" \ + "1:\n\t" \ + ".section .fixup,\"ax\"\n\t" \ + "3: " fixup "\n\t" \ + "jmp 1b\n\t" \ + ".previous\n\t" \ + ".section __ex_table,\"a\"\n" \ + " .align 4\n\t" \ + " .long 2b,3b\n\t" \ + ".previous" \ + : output \ + : input) +/* * Alternative inline assembly for SMP.
include/asm-x86/alternative_64.h +21 -6
@@ -141,14 +141,29 @@ static inline void alternatives_smp_switch(int smp) {}* use this macro(s) if you need more than one output parameter * in alternative_io */ -#define ASM_OUTPUT2 (a, b) a, b - -struct paravirt_patch ; +#define ASM_OUTPUT2(a, b...) a, b + +#define fixup_section(code, fixup, output, input...) \ + asm volatile("2: " code "\n" \ + "1:\n\t" \ + ".section .fixup,\"ax\"\n\t" \ + "3: " fixup "\n\t" \ + " jmp 1b\n\t" \ + ".previous\n\t" \ + ".section __ex_table,\"a\"\n" \ + " .align 8\n\t" \ + " .quad 2b,3b\n\t" \ + ".previous" \ + : output \ + : input) + +struct paravirt_patch_site ;#ifdef CONFIG_PARAVIRT -void apply_paravirt (struct paravirt_patch *start,struct paravirt_patch *end); +void apply_paravirt (struct paravirt_patch_site *start, +struct paravirt_patch_site *end);#else -static inline void -apply_paravirt (struct paravirt_patch *start,struct paravirt_patch *end) +static inline void apply_paravirt (struct paravirt_patch_site *start, +struct paravirt_patch_site *end) {}#define __parainstructions NULL#define __parainstructions_end NULL
include/asm-x86/msr.h +60 -165
297 lines not on this page · raw message
include/asm-x86/tsc.h +31 -2
@@ -33,7 +33,7 @@ static inline cycles_t get_cycles(void) }/* Like get_cycles, but make sure the CPU is synchronized. */ -static __always_inline cycles_t get_cycles_sync(void) +static __always_inline cycles_t __get_cycles_sync(void) {unsigned long long ret;unsigned eax, edx;
@@ -55,11 +55,40 @@ static __always_inline cycles_t get_cycles_sync(void)*/ alternative_io ("cpuid" ,ASM_NOP2 ,X86_FEATURE_SYNC_RDTSC , "=a" (eax), "0" (1) : "ebx","ecx","edx","memory"); -rdtscll (ret); +return 0 ; +} + +static __always_inline cycles_t get_cycles_sync(void) +{ +unsigned long long ret; + ret =__get_cycles_sync (); +if (!ret) +rdtscll (ret);return ret; } +#ifdef CONFIG_PARAVIRT +/* +* For paravirt guests, some functionalities are executed through function +* pointers in the various pvops structures. +* These function pointers exist inside the kernel and can not +* be accessed by user space. To avoid this, we make a copy of the +* get_cycles_sync (called in kernel) but force the use of native_read_tsc. +* Ideally, the guest should set up it's own clock and vread +*/ +static __always_inline long long vget_cycles_sync (void ) +{ +unsigned long long ret; + ret =__get_cycles_sync (); +if (!ret) + ret =native_read_tsc (); +return ret; +} +#else +# define vget_cycles_sync () get_cycles_sync() +#endif +extern void tsc_init (void );extern void mark_tsc_unstable (char *reason);extern int unsynchronized_tsc (void );
Signature · 8 lines
1.4.4.2 ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
PATCH 8/24 consolidate system.h
This patch consolidates system.h header. For i386, it adds functions read/write_cr8 that ain't really needed, but will also not hurt. If they are used somewhere in i386 code, there's a bug anyway, and should be fixed.
--- include/asm-x86/system.h | 134 +++++++++++++++++++++++++++++++++++++++++++ include/asm-x86/system_32.h | 102 -------------------------------- include/asm-x86/system_64.h | 77 ------------------------- 3 files changed, 134 insertions(+), 179 deletions(-)
include/asm-x86/system.h +134 -0
@@ -1,5 +1,139 @@ +#ifndef _X86_SYSTEM_H_ +#define _X86_SYSTEM_H_ + +#include <linux/kernel.h> + +static inline void native_clts (void ) +{ + asmvolatile ("clts" ); +} + +/* +* Volatile isn't enough to prevent the compiler from reordering the +* read/write functions for the control registers and messing everything up. +* A memory clobber would solve the problem, but would prevent reordering of +* all loads stores around it, which can hurt performance. Solution is to +* use a variable and mimic reads and writes to it to enforce serialization +*/ +static unsigned long __force_order; + +static inline unsigned long native_read_cr0 (void ) +{ +unsigned long val; + asmvolatile ("mov %%cr0,%0\n\t" :"=r" (val),"=m" (__force_order)); +return val; +} + +static inline void native_write_cr0 (unsigned long val) +{ + asmvolatile ("mov %0,%%cr0" : :"r" (val),"m" (__force_order)); +} + +static inline unsigned long native_read_cr2 (void ) +{ +unsigned long val; + asmvolatile ("mov %%cr2,%0\n\t" :"=r" (val),"=m" (__force_order)); +return val; +} + +static inline void native_write_cr2 (unsigned long val) +{ + asmvolatile ("mov %0,%%cr2" : :"r" (val),"m" (__force_order)); +} + +static inline unsigned long native_read_cr3 (void ) +{ +unsigned long val; + asmvolatile ("mov %%cr3,%0\n\t" :"=r" (val),"=m" (__force_order)); +return val; +} + +static inline void native_write_cr3 (unsigned long val) +{ + asmvolatile ("mov %0,%%cr3" : :"r" (val),"m" (__force_order)); +} + +static inline unsigned long native_read_cr4 (void ) +{ +unsigned long val; + asmvolatile ("mov %%cr4,%0\n\t" :"=r" (val),"=m" (__force_order)); +return val; +} + +static inline unsigned long native_read_cr4_safe (void ) +{ +unsigned long val; +/* This could fault if %cr4 does not exist. In x86_64, a cr4 always +* exists, so it will never fail. */ +#ifdef CONFIG_X86_32 + asmvolatile ("1: mov %%cr4, %0 \n" +"2: \n" +".section __ex_table,\"a\" \n" +".long 1b,2b \n" +".previous \n" + :"=r" (val),"=m" (__force_order) :"0" (0 )); +#else + val =native_read_cr4 (); +#endif +return val; +} + +static inline void native_write_cr4 (unsigned long val) +{ + asmvolatile ("mov %0,%%cr4" : :"r" (val),"m" (__force_order)); +} + +static inline unsigned long native_read_cr8 (void ) +{ +unsigned long cr8; + asmvolatile ("mov %%cr8,%0" :"=r" (cr8),"=m" (__force_order)); +return cr8; +} + +static inline void native_write_cr8 (unsigned long val) +{ + asmvolatile ("mov %0,%%cr8" : :"r" (val)); +} + +static inline void native_wbinvd (void ) +{ + asmvolatile ("wbinvd" : : :"memory" ); +} + +static inline void clflush (volatile void *__p) +{ + asmvolatile ("clflush %0" :"+m" (*(char __force *)__p)); +} + +#ifdef CONFIG_PARAVIRT +#include <asm/paravirt.h> +#else +#define read_cr0 () (native_read_cr0()) +#define write_cr0 (x) (native_write_cr0(x)) +#define read_cr2 () (native_read_cr2()) +#define write_cr2 (x) (native_write_cr2(x)) +#define read_cr3 () (native_read_cr3()) +#define write_cr3 (x) (native_write_cr3(x)) +#define read_cr4 () (native_read_cr4()) +#define read_cr4_safe () (native_read_cr4_safe()) +#define write_cr4 (x) (native_write_cr4(x)) +#define read_cr8 () (native_read_cr8()) +#define write_cr8 (x) (native_write_cr8(x)) +#define wbinvd () (native_wbinvd()) + +/* Clear the 'TS' bit */ +#define clts () (native_clts()) + +#endif /* CONFIG_PARAVIRT */ + +#define stts () write_cr0(8 | read_cr0()) + +#define nop () __asm__ __volatile__ ("nop") +#ifdef CONFIG_X86_32 # include "system_32.h" #else # include "system_64.h" #endif + +#endif
include/asm-x86/system_32.h +0 -102
120 lines not on this page · raw message
include/asm-x86/system_64.h +0 -77
92 lines not on this page · raw message
Signature · 1 line
1.4.4.2
PATCH 9/24 Wipe out traditional opt from x86_64 Makefile
Among other things, using -traditional as a gcc option stops us from using macro token pasting, which is a feature we heavily rely on.
There was still a use of -traditional in arch/x86/kernel/Makefile_64, which this patch removes.
I don't see any problems building kernels in my x86_64 box without -traditional.
--- arch/x86/kernel/Makefile_64 | 1 - 1 files changed, 0 insertions(+), 1 deletions(-)
arch/x86/kernel/Makefile_64 +0 -1
@@ -3,7 +3,6 @@ # extra-y := head_64.o head64.o init_task.o vmlinux.lds -EXTRA_AFLAGS := -traditional obj-y := process_64.o signal_64.o entry_64.o traps_64.o irq_64.o \ ptrace_64.o time_64.o ioport_64.o ldt.o setup_64.o i8259_64.o sys_x86_64.o \ x8664_ksyms_64.o i387_64.o syscall_64.o vsyscall_64.o \
Signature · 1 line
1.4.4.2
PATCH 10/24 paravirt hooks at entry functions.
Those are the hooks needed for paravirt at entry_64.S In general, they follow the way of i386.
--- arch/x86/kernel/entry_64.S | 108 +++++++++++++++++++++++++++----------------- 1 files changed, 66 insertions(+), 42 deletions(-)
arch/x86/kernel/entry_64.S +66 -42
@@ -50,6 +50,7 @@ #include <asm/hw_irq.h> #include <asm/page.h> #include <asm/irqflags.h> +#include <asm/paravirt.h> .code64
@@ -57,6 +58,20 @@ #define retint_kernel retint_restore_args #endif +#ifdef CONFIG_PARAVIRT +ENTRY(native_irq_enable_syscall_ret) + movq %gs:pda_oldrsp,%rsp + swapgs + sysretq +/* + * This could well be defined as a C function, but as it is only used here, + * let it be locally defined + */ +ENTRY(native_swapgs) + swapgs + retq +#endif /* CONFIG_PARAVIRT */ + .macro TRACE_IRQS_IRETQ offset=ARGOFFSET #ifdef CONFIG_TRACE_IRQFLAGS
@@ -216,14 +231,21 @@ ENTRY(system_call) CFI_DEF_CFA rsp,PDA_STACKOFFSET CFI_REGISTER rip,rcx /*CFI_REGISTER rflags,r11*/ - swapgs + SWAPGS_UNSAFE_STACK + /* + * A hypervisor implementation might want to use a label + * after the swapgs, so that it can do the swapgs + * for the guest and jump here on syscall. + */ +ENTRY(system_call_after_swapgs) + movq %rsp,%gs:pda_oldrsp movq %gs:pda_kernelstack,%rsp /* * No need to follow this irqs off/on section - it's straight * and short: */ - sti + ENABLE_INTERRUPTS(CLBR_NONE) SAVE_ARGS 8,1 movq %rax,ORIG_RAX-ARGOFFSET(%rsp) movq %rcx,RIP-ARGOFFSET(%rsp)
@@ -246,7 +268,7 @@ ret_from_sys_call: sysret_check: LOCKDEP_SYS_EXIT GET_THREAD_INFO(%rcx) - cli + DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF movl threadinfo_flags(%rcx),%edx andl %edi,%edx
@@ -260,9 +282,7 @@ sysret_check: CFI_REGISTER rip,rcx RESTORE_ARGS 0,-ARG_SKIP,1 /*CFI_REGISTER rflags,r11*/ - movq %gs:pda_oldrsp,%rsp - swapgs - sysretq + ENABLE_INTERRUPTS_SYSCALL_RET CFI_RESTORE_STATE /* Handle reschedules */
@@ -271,7 +291,7 @@ sysret_careful: bt $TIF_NEED_RESCHED,%edx jnc sysret_signal TRACE_IRQS_ON - sti + ENABLE_INTERRUPTS(CLBR_NONE) pushq %rdi CFI_ADJUST_CFA_OFFSET 8 call schedule
@@ -282,7 +302,7 @@ sysret_careful: /* Handle a signal */ sysret_signal: TRACE_IRQS_ON - sti + ENABLE_INTERRUPTS(CLBR_NONE) testl $(_TIF_SIGPENDING|_TIF_SINGLESTEP|_TIF_MCE_NOTIFY),%edx jz 1f
@@ -295,7 +315,7 @@ sysret_signal: 1: movl $_TIF_NEED_RESCHED,%edi /* Use IRET because user could have changed frame. This works because ptregscall_common has called FIXUP_TOP_OF_STACK. */ - cli + DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF jmp int_with_check
@@ -327,7 +347,7 @@ tracesys: */ .globl int_ret_from_sys_call int_ret_from_sys_call: - cli + DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF testl $3,CS-ARGOFFSET(%rsp) je retint_restore_args
@@ -349,20 +369,20 @@ int_careful: bt $TIF_NEED_RESCHED,%edx jnc int_very_careful TRACE_IRQS_ON - sti + ENABLE_INTERRUPTS(CLBR_NONE) pushq %rdi CFI_ADJUST_CFA_OFFSET 8 call schedule popq %rdi CFI_ADJUST_CFA_OFFSET -8 - cli + DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF jmp int_with_check /* handle signals and tracing -- both require a full stack frame */ int_very_careful: TRACE_IRQS_ON - sti + ENABLE_INTERRUPTS(CLBR_NONE) SAVE_REST /* Check for syscall exit trace */ testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP),%edx
@@ -385,7 +405,7 @@ int_signal: 1: movl $_TIF_NEED_RESCHED,%edi int_restore_rest: RESTORE_REST - cli + DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF jmp int_with_check CFI_ENDPROC
@@ -506,7 +526,7 @@ END(stub_rt_sigreturn) CFI_DEF_CFA_REGISTER rbp testl $3,CS(%rdi) je 1f - swapgs + SWAPGS /* irqcount is used to check if a CPU is already on an interrupt stack or not. While this is essentially redundant with preempt_count it is a little cheaper to use a separate counter in the PDA
@@ -527,7 +547,7 @@ ENTRY(common_interrupt) interrupt do_IRQ /* 0(%rsp): oldrsp-ARGOFFSET */ ret_from_intr: - cli + DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF decl %gs:pda_irqcount leaveq
@@ -556,13 +576,13 @@ retint_swapgs: /* return to user-space */ /* * The iretq could re-enable interrupts: */ - cli + DISABLE_INTERRUPTS(CLBR_ANY) TRACE_IRQS_IRETQ - swapgs + SWAPGS jmp restore_args retint_restore_args: /* return to kernel space */ - cli + DISABLE_INTERRUPTS(CLBR_ANY) /* * The iretq could re-enable interrupts: */
@@ -570,10 +590,14 @@ retint_restore_args: /* return to kernel space */ restore_args: RESTORE_ARGS 0,8,0 iret_label: +#ifdef CONFIG_PARAVIRT + INTERRUPT_RETURN +#endif +ENTRY(native_iret) iretq .section __ex_table,"a" - .quad iret_label,bad_iret + .quad native_iret, bad_iret .previous .section .fixup,"ax" /* force a signal here? this matches i386 behaviour */
@@ -581,24 +605,24 @@ iret_label: bad_iret: movq $11,%rdi /* SIGSEGV */ TRACE_IRQS_ON - sti - jmp do_exit - .previous - + ENABLE_INTERRUPTS(CLBR_ANY | ~(CLBR_RDI)) + jmp do_exit + .previous + /* edi: workmask, edx: work */ retint_careful: CFI_RESTORE_STATE bt $TIF_NEED_RESCHED,%edx jnc retint_signal TRACE_IRQS_ON - sti + ENABLE_INTERRUPTS(CLBR_NONE) pushq %rdi CFI_ADJUST_CFA_OFFSET 8 call schedule popq %rdi CFI_ADJUST_CFA_OFFSET -8 GET_THREAD_INFO(%rcx) - cli + DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF jmp retint_check
@@ -606,14 +630,14 @@ retint_signal: testl $(_TIF_SIGPENDING|_TIF_SINGLESTEP|_TIF_MCE_NOTIFY),%edx jz retint_swapgs TRACE_IRQS_ON - sti + ENABLE_INTERRUPTS(CLBR_NONE) SAVE_REST movq $-1,ORIG_RAX(%rsp) xorl %esi,%esi # oldset movq %rsp,%rdi # &pt_regs call do_notify_resume RESTORE_REST - cli + DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF movl $_TIF_NEED_RESCHED,%edi GET_THREAD_INFO(%rcx)
@@ -731,7 +755,7 @@ END(spurious_interrupt) rdmsr testl %edx,%edx js 1f - swapgs + SWAPGS xorl %ebx,%ebx 1: .if \ist
@@ -747,7 +771,7 @@ END(spurious_interrupt) .if \ist addq $EXCEPTION_STKSZ, per_cpu__init_tss + TSS_ist + (\ist - 1) * 8(%rbp) .endif - cli + DISABLE_INTERRUPTS(CLBR_NONE) .if \irqtrace TRACE_IRQS_OFF .endif
@@ -776,10 +800,10 @@ paranoid_swapgs\trace: .if \trace TRACE_IRQS_IRETQ 0 .endif - swapgs + SWAPGS_UNSAFE_STACK paranoid_restore\trace: RESTORE_ALL 8 - iretq + INTERRUPT_RETURN paranoid_userspace\trace: GET_THREAD_INFO(%rcx) movl threadinfo_flags(%rcx),%ebx
@@ -794,11 +818,11 @@ paranoid_userspace\trace: .if \trace TRACE_IRQS_ON .endif - sti + ENABLE_INTERRUPTS(CLBR_NONE) xorl %esi,%esi /* arg2: oldset */ movq %rsp,%rdi /* arg1: &pt_regs */ call do_notify_resume - cli + DISABLE_INTERRUPTS(CLBR_NONE) .if \trace TRACE_IRQS_OFF .endif
@@ -807,9 +831,9 @@ paranoid_schedule\trace: .if \trace TRACE_IRQS_ON .endif - sti + ENABLE_INTERRUPTS(CLBR_ANY) call schedule - cli + DISABLE_INTERRUPTS(CLBR_ANY) .if \trace TRACE_IRQS_OFF .endif
@@ -862,7 +886,7 @@ KPROBE_ENTRY(error_entry) testl $3,CS(%rsp) je error_kernelspace error_swapgs: - swapgs + SWAPGS error_sti: movq %rdi,RDI(%rsp) CFI_REL_OFFSET rdi,RDI
@@ -874,7 +898,7 @@ error_sti: error_exit: movl %ebx,%eax RESTORE_REST - cli + DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF GET_THREAD_INFO(%rcx) testl %eax,%eax
@@ -911,12 +935,12 @@ ENTRY(load_gs_index) CFI_STARTPROC pushf CFI_ADJUST_CFA_OFFSET 8 - cli - swapgs + DISABLE_INTERRUPTS(CLBR_ANY | ~(CLBR_RDI)) + SWAPGS gs_change: movl %edi,%gs 2: mfence /* workaround */ - swapgs + SWAPGS popf CFI_ADJUST_CFA_OFFSET -8 ret
@@ -930,7 +954,7 @@ ENDPROC(load_gs_index) .section .fixup,"ax" /* running with kernelgs */ bad_gs: - swapgs /* switch back to user gs */ + SWAPGS /* switch back to user gs */ xorl %eax,%eax movl %eax,%gs jmp 2b
Signature · 8 lines
1.4.4.2 ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
PATCH 11/24 read/write_crX, clts and wbinvd for 64-bit paravirt
This patch introduces, and patch callers when needed, native versions for read/write_crX functions, clts and wbinvd.
--- arch/x86/mm/pageattr_64.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)
arch/x86/mm/pageattr_64.c +2 -1
@@ -13,6 +13,7 @@#include <asm/tlbflush.h> #include <asm/uaccess.h> #include <asm/io.h> +#include <asm/paravirt.h> pte_t *lookup_address (unsigned long address) {
@@ -84,7 +85,7 @@ static void flush_kernel_map(void *arg)much cheaper than WBINVD. */ /* clflush is still broken. Disable for now. */ if (1 || !cpu_has_clflush) { - asmvolatile ("wbinvd" :::"memory" ); +wbinvd (); }else {list_for_each_entry (pg, l, lru) {void *addr =page_address (pg);
Signature · 8 lines
1.4.4.2 ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
PATCH 12/24 provide native irq initialization function
The interrupt initialization routine becomes native_init_IRQ and will be overriden later in case paravirt is on. The interrupt array is made visible for guests such lguest, that will need to have their own initialization mechanism (though using most of the same irq lines) later on.
--- arch/x86/kernel/i8259_64.c | 7 +++++-- include/asm-x86/irq_64.h | 3 +++ 2 files changed, 8 insertions(+), 2 deletions(-)
arch/x86/kernel/i8259_64.c +5 -2
@@ -77,7 +77,7 @@ BUILD_16_IRQS(0xc) BUILD_16_IRQS(0xd) BUILD_16_IRQS(0xe) BUILD_16_IRQS(0xf)IRQ (x,c),IRQ (x,d),IRQ (x,e),IRQ (x,f) /* for the irq vectors */ -static void (*interrupt[NR_VECTORS -FIRST_EXTERNAL_VECTOR ])(void ) = { +void (*interrupt[NR_VECTORS -FIRST_EXTERNAL_VECTOR ])(void ) = {IRQLIST_16 (0x2 ),IRQLIST_16 (0x3 ),IRQLIST_16 (0x4 ),IRQLIST_16 (0x5 ),IRQLIST_16 (0x6 ),IRQLIST_16 (0x7 ),IRQLIST_16 (0x8 ),IRQLIST_16 (0x9 ),IRQLIST_16 (0xa ),IRQLIST_16 (0xb ),
@@ -456,7 +456,10 @@ void __init init_ISA_irqs (void) } } -void __init init_IRQ (void ) +/* Overridden in paravirt.c */ +void init_IRQ (void ) __attribute__((weak,alias ("native_init_IRQ" ))); + +void __init native_init_IRQ (void ) {int i;
include/asm-x86/irq_64.h +3 -0
@@ -46,6 +46,9 @@ static __inline__ int irq_canonicalize(int irq)extern void fixup_irqs (cpumask_t map);#endif +#include <linux/init.h> +void native_init_IRQ (void ); +#define __ARCH_HAS_DO_SOFTIRQ 1#endif /* _ASM_IRQ_H */
Signature · 8 lines
1.4.4.2 ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
PATCH 13/24 report ring kernel is running without paravirt
When paravirtualization is disabled, the kernel is always running at ring 0. So report it in the appropriate macro
--- include/asm-x86/segment_64.h | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-)
include/asm-x86/segment_64.h +4 -0
@@ -50,4 +50,8 @@#define GDT_SIZE (GDT_ENTRIES * 8)#define TLS_SIZE (GDT_ENTRY_TLS_ENTRIES * 8) +#ifndef CONFIG_PARAVIRT +#define get_kernel_rpl () 0 +#endif +#endif
Signature · 8 lines
1.4.4.2 ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
PATCH 14/24 export math_state_restore
Export math_state_restore symbol, so it can be used for hypervisors. They are commonly loaded as modules (lguest being an example).
--- arch/x86/kernel/traps_64.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
arch/x86/kernel/traps_64.c +1 -0
@@ -1069,6 +1069,7 @@ asmlinkage void math_state_restore(void)task_thread_info (me)->status |=TS_USEDFPU ; me->fpu_counter++; } +EXPORT_SYMBOL_GPL (math_state_restore);void __init trap_init (void ) {
Signature · 1 line
1.4.4.2
PATCH 15/24 native versions for set pagetables
This patch turns the set_p{te,md,ud,gd} functions into their native_ versions. There is no need to patch any caller.
Also, it adds pte_update() and pte_update_defer() calls whenever we modify a page table entry. This last part was coded to match i386 as close as possible.
Pieces of the header are moved to below the #ifdef CONFIG_PARAVIRT site, as they are users of the newly defined set_* macros.
--- include/asm-x86/pgtable_64.h | 192 ++++++++++++++++++++++++++++-------------- 1 files changed, 128 insertions(+), 64 deletions(-)
include/asm-x86/pgtable_64.h +128 -64
@@ -57,56 +57,107 @@ extern unsigned long empty_zero_page[PAGE_SIZE/sizeof(unsigned long)];*/ #define PTRS_PER_PTE 512 -#ifndef __ASSEMBLY__ +#ifdef CONFIG_PARAVIRT +#include <asm/paravirt.h> +#else + +#define set_pte native_set_pte +#define set_pte_at (mm, addr, ptep, pteval) set_pte(ptep, pteval) +#define set_pmd native_set_pmd +#define set_pud native_set_pud +#define set_pgd native_set_pgd +#define pte_clear (mm, addr, xp) \ +do { \ + set_pte_at(mm, addr, xp, __pte(0)); \ +} while (0) -#define pte_ERROR (e) \ - printk("%s:%d: bad pte %p(%016lx).\n", __FILE__, __LINE__, &(e), pte_val(e)) -#define pmd_ERROR (e) \ - printk("%s:%d: bad pmd %p(%016lx).\n", __FILE__, __LINE__, &(e), pmd_val(e)) -#define pud_ERROR (e) \ - printk("%s:%d: bad pud %p(%016lx).\n", __FILE__, __LINE__, &(e), pud_val(e)) -#define pgd_ERROR (e) \ - printk("%s:%d: bad pgd %p(%016lx).\n", __FILE__, __LINE__, &(e), pgd_val(e)) +#define pmd_clear (xp) do { set_pmd(xp, __pmd(0)); } while (0) +#define pud_clear native_pud_clear +#define pgd_clear native_pgd_clear +#define pte_update (mm, addr, ptep) do { } while (0) +#define pte_update_defer (mm, addr, ptep) do { } while (0) -#define pgd_none (x) (!pgd_val(x)) -#define pud_none (x) (!pud_val(x)) +#endif -static inline void set_pte (pte_t *dst,pte_t val) +#ifndef __ASSEMBLY__ + +static inline void native_set_pte (pte_t *dst,pte_t val) { -pte_val (*dst) =pte_val (val); + dst->pte =pte_val (val); } -#define set_pte_at (mm,addr,ptep,pteval) set_pte(ptep,pteval) -static inline void set_pmd (pmd_t *dst,pmd_t val) +static inline void native_set_pmd (pmd_t *dst,pmd_t val) { -pmd_val (*dst) =pmd_val (val); + dst->pmd =pmd_val (val); } -static inline void set_pud (pud_t *dst,pud_t val) +static inline void native_set_pud (pud_t *dst,pud_t val) { -pud_val (*dst) =pud_val (val); + dst->pud =pud_val (val); } -static inline void pud_clear (pud_t *pud) +static inline void native_set_pgd (pgd_t *dst,pgd_t val) { -set_pud (pud,__pud (0 )); + dst->pgd =pgd_val (val); } -static inline void set_pgd (pgd_t *dst,pgd_t val) +static inline void native_pud_clear (pud_t *pud) { -pgd_val (*dst) =pgd_val (val); -} +set_pud (pud,__pud (0 )); +} -static inline void pgd_clear (pgd_t * pgd) +static inline void native_pgd_clear (pgd_t *pgd) {set_pgd (pgd,__pgd (0 )); } -#define ptep_get_and_clear (mm,addr,xp) __pte(xchg(&(xp)->pte, 0)) +static inline void native_set_pte_at (struct mm_struct *mm,unsigned long addr, +pte_t *ptep,pte_t pteval) +{ +native_set_pte (ptep, pteval); +} + +static inline void native_pte_clear (struct mm_struct *mm,unsigned long addr, +pte_t *ptep) +{ +native_set_pte_at (mm, addr, ptep,__pte (0 )); +} + +static inline void native_pmd_clear (pmd_t *pmd) +{ +native_set_pmd (pmd,__pmd (0 )); +} + + +#define pte_ERROR (e) \ + printk("%s:%d: bad pte %p(%016llx).\n", \ + __FILE__, __LINE__, &(e), (u64)pte_val(e)) +#define pmd_ERROR (e) \ + printk("%s:%d: bad pmd %p(%016llx).\n", \ + __FILE__, __LINE__, &(e), (u64)pmd_val(e)) +#define pud_ERROR (e) \ + printk("%s:%d: bad pud %p(%016llx).\n", \ + __FILE__, __LINE__, &(e), (u64)pud_val(e)) +#define pgd_ERROR (e) \ + printk("%s:%d: bad pgd %p(%016llx).\n", \ + __FILE__, __LINE__, &(e), (u64)pgd_val(e)) + +#define pgd_none (x) (!pgd_val(x)) +#define pud_none (x) (!pud_val(x))struct mm_struct ; -static inline pte_t ptep_get_and_clear_full (struct mm_struct *mm,unsigned long addr,pte_t *ptep,int full) +static inline pte_t ptep_get_and_clear (struct mm_struct *mm, +unsigned long addr,pte_t *ptep) +{ +pte_t pte =__pte (xchg (&ptep->pte,0 )); +pte_update (mm, addr, ptep); +return pte; +} + +static inline pte_t ptep_get_and_clear_full (struct mm_struct *mm, +unsigned long addr,pte_t *ptep, +int full) {pte_t pte;if (full) {
@@ -246,7 +297,6 @@ static inline unsigned long pmd_bad(pmd_t pmd)#define pte_none (x) (!pte_val(x))#define pte_present (x) (pte_val(x) & (_PAGE_PRESENT | _PAGE_PROTNONE)) -#define pte_clear (mm,addr,xp) do { set_pte_at(mm, addr, xp, __pte(0)); } while (0)#define pages_to_mb (x) ((x) >> (20-PAGE_SHIFT))/* FIXME: is this right? */
@@ -255,11 +305,11 @@ static inline unsigned long pmd_bad(pmd_t pmd)static inline pte_t pfn_pte (unsigned long page_nr,pgprot_t pgprot) { -pte_t pte; -pte_val (pte) = (page_nr <<PAGE_SHIFT ); -pte_val (pte) |=pgprot_val (pgprot); -pte_val (pte) &= __supported_pte_mask; -return pte; +unsigned long pte; + pte = (page_nr <<PAGE_SHIFT ); + pte |=pgprot_val (pgprot); + pte &= __supported_pte_mask; +return __pte (pte); }/*
@@ -283,30 +333,6 @@ static inline pte_t pte_mkwrite(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) |static inline pte_t pte_mkhuge (pte_t pte) {set_pte (&pte,__pte (pte_val (pte) | _PAGE_PSE));return pte; }static inline pte_t pte_clrhuge (pte_t pte) {set_pte (&pte,__pte (pte_val (pte) & ~_PAGE_PSE));return pte; } -struct vm_area_struct ; - -static inline int ptep_test_and_clear_young (struct vm_area_struct *vma,unsigned long addr,pte_t *ptep) -{ -if (!pte_young (*ptep)) -return 0 ; -return test_and_clear_bit (_PAGE_BIT_ACCESSED, &ptep->pte); -} - -static inline void ptep_set_wrprotect (struct mm_struct *mm,unsigned long addr,pte_t *ptep) -{ -clear_bit (_PAGE_BIT_RW, &ptep->pte); -} - -/* -* Macro to mark a page protection value as "uncacheable". -*/ -#define pgprot_noncached (prot) (__pgprot(pgprot_val(prot) | _PAGE_PCD | _PAGE_PWT)) - -static inline int pmd_large (pmd_t pte) { -return (pmd_val (pte) & __LARGE_PTE) == __LARGE_PTE; -} - -/* * Conversion functions: convert a page and protection to a page entry, * and a page entry and page directory to the page they refer to.
@@ -340,7 +366,6 @@ static inline int pmd_large(pmd_t pte) { pmd_index(address))#define pmd_none (x) (!pmd_val(x))#define pmd_present (x) (pmd_val(x) & _PAGE_PRESENT) -#define pmd_clear (xp) do { set_pmd(xp, __pmd(0)); } while (0)#define pfn_pmd (nr,prot) (__pmd(((nr) << PAGE_SHIFT) | pgprot_val(prot)))#define pmd_pfn (x) ((pmd_val(x) & __PHYSICAL_MASK) >> PAGE_SHIFT)
@@ -352,15 +377,53 @@ static inline int pmd_large(pmd_t pte) {/* page, protection -> pte */ #define mk_pte (page, pgprot) pfn_pte(page_to_pfn(page), (pgprot)) -#define mk_pte_huge (entry) (pte_val(entry) |= _PAGE_PRESENT | _PAGE_PSE) - + +static inline pte_t __mk_pte_huge (pte_t entry) +{ +unsigned long pte; + pte =pte_val (entry); + pte |= _PAGE_PRESENT | _PAGE_PSE; +return __pte (pte); +} +#define mk_pte_huge (entry) ((entry) = __mk_pte_huge(entry)) + +#include <linux/mm_types.h> +static inline int ptep_test_and_clear_young (struct vm_area_struct *vma, +unsigned long addr,pte_t *ptep) +{ +int ret =0 ; +if (!pte_young (*ptep)) +return 0 ; + ret =test_and_clear_bit (_PAGE_BIT_ACCESSED, &ptep->pte); +pte_update (vma->vm_mm, addr, ptep); +return ret; +} + +static inline void ptep_set_wrprotect (struct mm_struct *mm, +unsigned long addr,pte_t *ptep) +{ +clear_bit (_PAGE_BIT_RW, &ptep->pte); +pte_update (mm, addr, ptep); +} + +/* +* Macro to mark a page protection value as "uncacheable". +*/ +#define pgprot_noncached (prot) (__pgprot(pgprot_val(prot) | _PAGE_PCD | _PAGE_PWT)) + +static inline int pmd_large (pmd_t pte) +{ +return (pmd_val (pte) & __LARGE_PTE) == __LARGE_PTE; +} +/* Change flags of a PTE */ -static inline pte_t pte_modify (pte_t pte,pgprot_t newprot) +static inline pte_t pte_modify (pte_t pte_old,pgprot_t newprot) { -pte_val (pte) &= _PAGE_CHG_MASK; -pte_val (pte) |=pgprot_val (newprot); -pte_val (pte) &= __supported_pte_mask; -return pte; +unsigned long pte =pte_val (pte_old); + pte &= _PAGE_CHG_MASK; + pte |=pgprot_val (newprot); + pte &= __supported_pte_mask; +return __pte (pte); }#define pte_index (address) \
@@ -387,6 +450,7 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)int __changed = !pte_same (*(__ptep), __entry); \if (__changed && __dirty) { \set_pte (__ptep, __entry); \ +pte_update_defer ((__vma)->vm_mm, (__address), (__ptep)); \flush_tlb_page (__vma, __address); \ } \ __changed; \
Signature · 1 line
1.4.4.2
PATCH 16/24 add native functions for descriptors handling
This patch turns the basic descriptor handling into native_ functions. It is basically write_idt, load_idt, write_gdt, load_gdt, set_ldt, store_tr, load_tls, and the ones for updating a single entry.
In the process of doing that, we change the definition of load_LDT_nolock, and caller sites have to be patched. We also patch call sites that now needs a typecast.
--- include/asm-x86/desc.h | 59 ++++++++++++ include/asm-x86/desc_32.h | 45 --------- include/asm-x86/desc_64.h | 191 ++++++++++++++++++------------------- include/asm-x86/mmu_context_64.h | 23 ++++- 4 files changed, 169 insertions(+), 149 deletions(-)
include/asm-x86/desc.h +59 -0
@@ -1,5 +1,64 @@ +#ifndef _ASM_DESC_H_ +#define _ASM_DESC_H_ +#ifdef CONFIG_X86_32 # include "desc_32.h" #else # include "desc_64.h" #endif + +#ifndef __ASSEMBLY__ +#define LDT_entry_a (info) \ + ((((info)->base_addr & 0x0000ffff) << 16) | ((info)->limit & 0x0ffff)) + +#define LDT_entry_b (info) \ + (((info)->base_addr & 0xff000000) | \ + (((info)->base_addr & 0x00ff0000) >> 16) | \ + ((info)->limit & 0xf0000) | \ + (((info)->read_exec_only ^ 1) << 9) | \ + ((info)->contents << 10) | \ + (((info)->seg_not_present ^ 1) << 15) | \ + ((info)->seg_32bit << 22) | \ + ((info)->limit_in_pages << 23) | \ + ((info)->useable << 20) | \ + 0x7000) + +#define _LDT_empty (info) (\ + (info)->base_addr == 0 && \ + (info)->limit == 0 && \ + (info)->contents == 0 && \ + (info)->read_exec_only == 1 && \ + (info)->seg_32bit == 0 && \ + (info)->limit_in_pages == 0 && \ + (info)->seg_not_present == 1 && \ + (info)->useable == 0 ) + +#ifdef CONFIG_X86_64 +#define LDT_empty (info) (_LDT_empty(info) && ((info)->lm == 0)) +#else +#define LDT_empty (info) _LDT_empty(info) +#endif + +static inline void clear_LDT (void ) +{ +set_ldt (NULL ,0 ); +} + +/* +* load one particular LDT into the current CPU +*/ +static inline void load_LDT_nolock (mm_context_t *pc) +{ +set_ldt (pc->ldt, pc->size); +} + +static inline void load_LDT (mm_context_t *pc) +{ +preempt_disable (); +load_LDT_nolock (pc); +preempt_enable (); +} + +#endif /* __ASSEMBLY__ */ + +#endif
include/asm-x86/desc_32.h +0 -45
51 lines not on this page · raw message
include/asm-x86/desc_64.h +93 -98
261 lines not on this page · raw message
include/asm-x86/mmu_context_64.h +17 -6
@@ -7,7 +7,16 @@#include <asm/pda.h> #include <asm/pgtable.h> #include <asm/tlbflush.h> + +#ifdef CONFIG_PARAVIRT +#include <asm/paravirt.h> +#else #include <asm-generic/mm_hooks.h> +static inline void paravirt_activate_mm (struct mm_struct *prev, +struct mm_struct *next) +{ +} +#endif /* CONFIG_PARAVIRT */ /* * possibly do the LDT unload here?
@@ -25,7 +34,7 @@ static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)static inline void load_cr3 (pgd_t *pgd) { - asmvolatile ("movq %0,%%cr3" ::"r" (__pa (pgd)) :"memory" ); +write_cr3 (__pa (pgd)); } static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
@@ -43,7 +52,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,load_cr3 (next->pgd);if (unlikely (next->context.ldt != prev->context.ldt)) -load_LDT_nolock (&next->context, cpu); +load_LDT_nolock (&next->context); }#ifdef CONFIG_SMP else {
@@ -56,7 +65,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,* to make sure to use no freed page tables. */ load_cr3 (next->pgd); - load_LDT_nolock(&next->context, cpu); + load_LDT_nolock(&next->context); } }#endif
@@ -67,8 +76,10 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, asmvolatile ("movl %0,%%fs" ::"r" (0 )); \ } while(0) -#define activate_mm (prev, next) \ - switch_mm((prev),(next),NULL) - +#define activate_mm (prev, next) \ +do { \ + paravirt_activate_mm(prev, next); \ + switch_mm((prev), (next), NULL); \ +} while (0)#endif
Signature · 1 line
1.4.4.2
PATCH 17/24 This patch add provisions for time related functions so they
can be later replaced by paravirt versions.
it basically encloses {g,s}et_wallclock inside the already existent functions update_persistent_clock and read_persistent_clock, and defines {s,g}et_wallclock to the core of such functions.
it also allow for a later-on-game time initialization, as done by i386. Paravirt guests can set a function to do their own initialization this way.
--- arch/x86/kernel/time_64.c | 12 +++++++++--- include/asm-x86/time.h | 26 +++++++++++++++++++++----- 2 files changed, 30 insertions(+), 8 deletions(-)
arch/x86/kernel/time_64.c +9 -3
@@ -21,6 +21,8 @@#include <asm/hpet.h> #include <asm/nmi.h> #include <asm/vgtod.h> +#include <asm/time.h> +#include <asm/timer.h> volatile unsigned long __jiffies __section_jiffies =INITIAL_JIFFIES ;
@@ -54,7 +56,7 @@ static irqreturn_t timer_event_interrupt(int irq, void *dev_id)/* calibrate_cpu is used on systems with fixed rate TSCs to determine * processor frequency */ #define TICK_COUNT 100000000 -static unsigned int __init tsc_calibrate_cpu_khz (void ) +unsigned long __init native_calculate_cpu_khz (void ) {int tsc_start, tsc_now;int i, no_ctr_free;
@@ -104,20 +106,23 @@ static struct irqaction irq0 = { .name = "timer" }; -void __init time_init (void ) +void __init hpet_time_init (void ) {if (!hpet_enable ())setup_pit_timer ();setup_irq (0 , &irq0); +} +void __init time_init (void ) +{tsc_calibrate (); cpu_khz = tsc_khz;if (cpu_has (&boot_cpu_data,X86_FEATURE_CONSTANT_TSC ) && boot_cpu_data.x86_vendor ==X86_VENDOR_AMD && boot_cpu_data.x86 ==16 ) - cpu_khz =tsc_calibrate_cpu_khz (); + cpu_khz =calculate_cpu_khz ();if (unsynchronized_tsc ())mark_tsc_unstable ("TSCs unsynchronized" );
@@ -130,4 +135,5 @@ void __init time_init(void)printk (KERN_INFO "time.c: Detected %d.%03d MHz processor.\n" , cpu_khz /1000 , cpu_khz %1000 );init_tsc_clocksource (); + late_time_init =choose_time_init (); }
include/asm-x86/time.h +21 -5
@@ -1,8 +1,12 @@ -#ifndef _ASMi386_TIME_H -#define _ASMi386_TIME_H +#ifndef _ASMX86_TIME_H +#define _ASMX86_TIME_H + +extern void (*late_time_init)(void); +extern void hpet_time_init(void); -#include <linux/efi.h> #include <asm/mc146818rtc.h> +#ifdef CONFIG_X86_32 +#include <linux/efi.h> static inline unsigned long native_get_wallclock(void) {
@@ -28,8 +32,20 @@ static inline int native_set_wallclock(unsigned long nowtime) return retval; } -extern void (*late_time_init)(void ); -extern void hpet_time_init (void ); +#else +extern void native_time_init_hook (void ); + +static inline unsigned long native_get_wallclock (void ) +{ +return mach_get_cmos_time (); +} + +static inline int native_set_wallclock (unsigned long nowtime) +{ +return mach_set_rtc_mmss (nowtime); +} + +#endif #ifdef CONFIG_PARAVIRT #include <asm/paravirt.h>
Signature · 8 lines
1.4.4.2 ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
PATCH 18/24 export cpu_gdt_descr
With paravirualization, hypervisors needs to handle the gdt, that was right to this point only used at very early inialization code. Hypervisors (lguest being the current case) are commonly modules, so make it an export
--- arch/x86/kernel/x8664_ksyms_64.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-)
arch/x86/kernel/x8664_ksyms_64.c +6 -0
@@ -8,6 +8,7 @@#include <asm/processor.h> #include <asm/uaccess.h> #include <asm/pgtable.h> +#include <asm/desc.h> EXPORT_SYMBOL (kernel_thread);
@@ -51,3 +52,8 @@ EXPORT_SYMBOL(__memcpy);EXPORT_SYMBOL (load_gs_index);EXPORT_SYMBOL (_proxy_pda); + +#ifdef CONFIG_PARAVIRT +/* Virtualized guests may want to use it */ +EXPORT_SYMBOL_GPL (cpu_gdt_descr); +#endif
Signature · 8 lines
1.4.4.2 ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
PATCH 19/24 turn priviled operation into a macro in head_64.S
under paravirt, read cr2 cannot be issued directly anymore. So wrap it in a macro, defined to the operation itself in case paravirt is off, but to something else if we have paravirt in the game
--- arch/x86/kernel/head_64.S | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletions(-)
arch/x86/kernel/head_64.S +8 -1
@@ -19,6 +19,13 @@ #include <asm/msr.h> #include <asm/cache.h> +#ifdef CONFIG_PARAVIRT +#include <asm/asm-offsets.h> +#include <asm/paravirt.h> +#else +#define GET_CR2_INTO_RCX movq %cr2, %rcx +#endif + /* we are not able to switch in one step to the final KERNEL ADRESS SPACE * because we need identity-mapped pages. *
@@ -267,7 +274,7 @@ ENTRY(early_idt_handler) xorl %eax,%eax movq 8(%rsp),%rsi # get rip movq (%rsp),%rdx - movq %cr2,%rcx + GET_CR2_INTO_RCX leaq early_idt_msg(%rip),%rdi call early_printk cmpl $2,early_recursion_flag(%rip)
Signature · 8 lines
1.4.4.2 ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
PATCH 20/24 tweak io_64.h for paravirt.
We need something here because we can't call in and out instructions directly. However, we have to be careful, because no indirections are allowed in misc_64.c , and paravirt_ops is a kind of one. So just call it directly there
--- arch/x86/boot/compressed/misc_64.c | 6 +++++ include/asm-x86/io_64.h | 37 +++++++++++++++++++++++++++++------ 2 files changed, 36 insertions(+), 7 deletions(-)
arch/x86/boot/compressed/misc_64.c +6 -0
@@ -9,6 +9,12 @@* High loaded stuff by Hans Lermen & Werner Almesberger, Feb. 1996 */ +/* +* we have to be careful, because no indirections are allowed here, and +* paravirt_ops is a kind of one. As it will only run in baremetal anyway, +* we just keep it from happening +*/ +#undef CONFIG_PARAVIRT#define _LINUX_STRING_H_ 1#define __LINUX_BITMAP_H 1
include/asm-x86/io_64.h +30 -7
@@ -35,12 +35,24 @@* - Arnaldo Carvalho de Melo <acme-KCZ47A4bww4P48s/[email protected]> */ -#define __SLOW_DOWN_IO "\noutb %%al,$0x80" +static inline void native_io_delay (void ) +{ + asmvolatile ("outb %%al,$0x80" : : :"memory" ); +} -#ifdef REALLY_SLOW_IO -#define __FULL_SLOW_DOWN_IO __SLOW_DOWN_IO __SLOW_DOWN_IO __SLOW_DOWN_IO __SLOW_DOWN_IO +#if defined(CONFIG_PARAVIRT ) +#include <asm/paravirt.h> #else -#define __FULL_SLOW_DOWN_IO __SLOW_DOWN_IO + +static inline void slow_down_io (void ) +{ +native_io_delay (); +#ifdef REALLY_SLOW_IO +native_io_delay (); +native_io_delay (); +native_io_delay (); +#endif +}#endif /*
@@ -52,9 +64,15 @@ static inline void out##s(unsigned x value, unsigned short port) {#define __OUT2 (s,s1,s2) \ __asm__ __volatile__ ("out" #s " %" s1 "0,%" s2 "1" +#ifndef REALLY_SLOW_IO +#define REALLY_SLOW_IO +#define UNSET_REALLY_SLOW_IO +#endif +#define __OUT (s,s1,x) \ __OUT1(s,x) __OUT2(s,s1,"w") : : "a" (value), "Nd" (port)); } \ -__OUT1(s##_p,x) __OUT2(s,s1,"w") __FULL_SLOW_DOWN_IO : : "a" (value), "Nd" (port));} \ +__OUT1(s##_p, x) __OUT2(s, s1, "w") : : "a" (value), "Nd" (port)); \ + slow_down_io(); }#define __IN1 (s) \ static inline RETURN_TYPE in##s(unsigned short port) { RETURN_TYPE _v;
@@ -63,8 +81,13 @@ static inline RETURN_TYPE in##s(unsigned short port) { RETURN_TYPE _v; __asm__ __volatile__ ("in" #s " %" s2 "1,%" s1 "0" #define __IN(s,s1,i...) \ -__IN1(s) __IN2(s,s1,"w") : "=a" (_v) : "Nd" (port) ,##i ); return _v; } \ -__IN1(s##_p) __IN2(s,s1,"w") __FULL_SLOW_DOWN_IO : "=a" (_v) : "Nd" (port) ,##i ); return _v; } \ +__IN1(s) __IN2(s, s1, "w") : "=a" (_v) : "Nd" (port), ##i); return _v; } \ +__IN1(s##_p) __IN2(s, s1, "w") : "=a" (_v) : "Nd" (port), ##i); \ + slow_down_io(); return _v; } + +#ifdef UNSET_REALLY_SLOW_IO +#undef REALLY_SLOW_IO +#endif #define __INS (s) \ static inline void ins##s(unsigned short port, void * addr, unsigned long count) \
Signature · 8 lines
1.4.4.2 ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
PATCH 21/24 native versions for page table entries values
This patch turns the page operations (set and make a page table) into native_ versions. The operations itself will be later overriden by paravirt.
It uses unsigned long long for consistency with 32-bit. So we have to fix fault_64.c to get rid of warnings.
--- arch/x86/mm/fault_64.c | 8 +++--- include/asm-x86/page_64.h | 56 +++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 55 insertions(+), 9 deletions(-)
arch/x86/mm/fault_64.c +4 -4
@@ -157,22 +157,22 @@ void dump_pagetable(unsigned long address) pgd =__va ((unsigned long )pgd &PHYSICAL_PAGE_MASK ); pgd +=pgd_index (address);if (bad_address (pgd)) goto bad; -printk ("PGD %lx " ,pgd_val (*pgd)); +printk ("PGD %llx " ,pgd_val (*pgd));if (!pgd_present (*pgd)) goto ret; pud =pud_offset (pgd, address);if (bad_address (pud)) goto bad; -printk ("PUD %lx " ,pud_val (*pud)); +printk ("PUD %llx " ,pud_val (*pud));if (!pud_present (*pud)) goto ret; pmd =pmd_offset (pud, address);if (bad_address (pmd)) goto bad; -printk ("PMD %lx " ,pmd_val (*pmd)); +printk ("PMD %llx " ,pmd_val (*pmd));if (!pmd_present (*pmd) ||pmd_large (*pmd)) goto ret; pte =pte_offset_kernel (pmd, address);if (bad_address (pte)) goto bad; -printk ("PTE %lx" ,pte_val (*pte)); +printk ("PTE %llx" ,pte_val (*pte)); ret:printk ("\n" );return ;
include/asm-x86/page_64.h +51 -5
67 lines not on this page · raw message
Signature · 8 lines
1.4.4.2 ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
PATCH 22/24 prepare x86_64 architecture initialization for paravirt
This patch prepares the x86_64 architecture initialization for paravirt. It requires a memory initialization step, which is done by implementing 64-bit version for machine_specific_memory_setup, and putting an ARCH_SETUP hook, for guest-dependent initialization. This last step is done akin to i386
--- arch/x86/kernel/e820_64.c | 9 +++++++-- arch/x86/kernel/setup_64.c | 28 +++++++++++++++++++++++++++- include/asm-x86/setup.h | 11 ++++++++--- 3 files changed, 42 insertions(+), 6 deletions(-)
arch/x86/kernel/e820_64.c +7 -2
@@ -639,8 +639,10 @@ void early_panic(char *msg)panic (msg); } -void __init setup_memory_region (void ) +/* We're not void only for x86 32-bit compat */ +char *__init machine_specific_memory_setup (void ) { +char *who ="BIOS-e820" ;/* * Try to copy the BIOS-supplied E820-map. *
@@ -651,7 +653,10 @@ void __init setup_memory_region(void)if (copy_e820_map (boot_params.e820_map, boot_params.e820_entries) <0 )early_panic ("Cannot find a valid memory map" );printk (KERN_INFO "BIOS-provided physical RAM map:\n" ); -e820_print_map ("BIOS-e820" ); +e820_print_map (who); + +/* In case someone cares... */ +return who; }static int __init parse_memopt (char *p)
arch/x86/kernel/setup_64.c +27 -1
@@ -39,6 +39,7 @@#include <linux/dmi.h> #include <linux/dma-mapping.h> #include <linux/ctype.h> +#include <linux/uaccess.h> #include <asm/mtrr.h> #include <asm/uaccess.h>
@@ -61,6 +62,12 @@#include <asm/cacheflush.h> #include <asm/mce.h> +#ifdef CONFIG_PARAVIRT +#include <asm/paravirt.h> +#else +#define ARCH_SETUP +#endif +/* * Machine setup.. */
@@ -244,6 +251,16 @@ static void discover_ebda(void)* 4K EBDA area at 0x40E */ ebda_addr = *(unsigned short *)__va (EBDA_ADDR_POINTER ); +/* +* There can be some situations, like paravirtualized guests, +* in which there is no available ebda information. In such +* case, just skip it +*/ +if (!ebda_addr) { + ebda_size =0 ; +return ; + } + ebda_addr <<=4 ; ebda_size = *(unsigned short *)__va (ebda_addr);
@@ -257,6 +274,12 @@ static void discover_ebda(void) ebda_size =64 *1024 ; } +/* Overridden in paravirt.c if CONFIG_PARAVIRT */ +void __attribute__((weak))memory_setup (void ) +{ +machine_specific_memory_setup (); +} +void __init setup_arch (char **cmdline_p) {printk (KERN_INFO "Command line: %s\n" , boot_command_line);
@@ -272,7 +295,10 @@ void __init setup_arch(char **cmdline_p) rd_prompt = ((boot_params.hdr.ram_size &RAMDISK_PROMPT_FLAG ) !=0 ); rd_doload = ((boot_params.hdr.ram_size &RAMDISK_LOAD_FLAG ) !=0 );#endif -setup_memory_region (); + +ARCH_SETUP + +memory_setup ();copy_edd ();if (!boot_params.hdr.root_flags)
include/asm-x86/setup.h +8 -3
@@ -3,6 +3,13 @@#define COMMAND_LINE_SIZE 2048 +#ifndef __ASSEMBLY__ +char *machine_specific_memory_setup (void ); +#ifndef CONFIG_PARAVIRT +#define paravirt_post_allocator_init () do {} while (0) +#endif +#endif /* __ASSEMBLY__ */ +#ifdef __KERNEL__#ifdef __i386__
@@ -51,9 +58,7 @@ void __init add_memory_region(unsigned long long start,extern unsigned long init_pg_tables_end; -#ifndef CONFIG_PARAVIRT -#define paravirt_post_allocator_init () do {} while (0) -#endif +#endif /* __i386__ */ #endif /* _SETUP */
Signature · 8 lines
1.4.4.2 ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
PATCH 23/24 consolidation of paravirt for 32 and 64 bits
This patch unifies the paravirt ops structures for usage in x86_64 and i386 architectures. Some new field had to be created to accomodate the differences between the architectures.
--- arch/x86/Kconfig.x86_64 | 11 + arch/x86/kernel/Makefile | 3 + arch/x86/kernel/Makefile_32 | 1 - arch/x86/kernel/asm-offsets.c | 8 + arch/x86/kernel/asm-offsets_32.c | 8 - arch/x86/kernel/asm-offsets_64.c | 22 +- arch/x86/kernel/paravirt.c | 447 +++++++++++++++++++++++++++++++++ arch/x86/kernel/paravirt_32.c | 472 ----------------------------------- arch/x86/kernel/paravirt_patch_32.c | 52 ++++ arch/x86/kernel/paravirt_patch_64.c | 56 ++++ arch/x86/kernel/vmlinux_64.lds.S | 6 + include/asm-x86/paravirt.h | 472 +++++++++++++++++++++++++++++------ 12 files changed, 987 insertions(+), 571 deletions(-)
arch/x86/Kconfig.x86_64 +11 -0
@@ -372,6 +372,17 @@ config NODES_SHIFT # Dummy CONFIG option to select ACPI_NUMA from drivers/acpi/Kconfig. +config PARAVIRT + bool + depends on EXPERIMENTAL + help + Paravirtualization is a way of running multiple instances of + Linux on the same machine, under a hypervisor. This option + changes the kernel so it can modify itself when it is run + under a hypervisor, improving performance significantly. + However, when run without a hypervisor the kernel is + theoretically slower. If in doubt, say N. + config X86_64_ACPI_NUMA bool "ACPI NUMA detection" depends on NUMA
arch/x86/kernel/Makefile +3 -0
@@ -1,8 +1,11 @@ ifeq ($(CONFIG_X86_32),y) include ${srctree}/arch/x86/kernel/Makefile_32 +obj-$(CONFIG_PARAVIRT) += paravirt_patch_32.o else include ${srctree}/arch/x86/kernel/Makefile_64 +obj-$(CONFIG_PARAVIRT) += paravirt_patch_64.o endif +obj-$(CONFIG_PARAVIRT) += paravirt.o # Workaround to delete .lds files with make clean # The problem is that we do not enter Makefile_32 with make clean.
arch/x86/kernel/Makefile_32 +0 -1
@@ -43,7 +43,6 @@ obj-$(CONFIG_K8_NB) += k8.o obj-$(CONFIG_MGEODE_LX) += geode_32.o mfgpt_32.o obj-$(CONFIG_VMI) += vmi_32.o vmiclock_32.o -obj-$(CONFIG_PARAVIRT) += paravirt_32.o obj-y += pcspeaker.o obj-$(CONFIG_SCx200) += scx200_32.o
arch/x86/kernel/asm-offsets.c +8 -0
@@ -1,3 +1,11 @@ +#define DEFINE (sym, val) \ + asm volatile("\n->" #sym " %0 " #val : : "i" (val)) + +#define BLANK () asm volatile("\n->" : : ) + +#define OFFSET (sym, str, mem) \ + DEFINE(sym, offsetof(struct str, mem)); +#ifdef CONFIG_X86_32 # include "asm-offsets_32.c" #else
arch/x86/kernel/asm-offsets_32.c +0 -8
@@ -25,14 +25,6 @@#include "../../../drivers/lguest/lg.h" #endif -#define DEFINE (sym, val) \ - asm volatile("\n->" #sym " %0 " #val : : "i" (val)) - -#define BLANK () asm volatile("\n->" : : ) - -#define OFFSET (sym, str, mem) \ - DEFINE(sym, offsetof(struct str, mem)); -/* workaround for a warning with -Wmissing-prototypes */ void foo (void );
arch/x86/kernel/asm-offsets_64.c +14 -8
@@ -16,14 +16,7 @@#include <asm/thread_info.h> #include <asm/ia32.h> #include <asm/bootparam.h> - -#define DEFINE (sym, val) \ - asm volatile("\n->" #sym " %0 " #val : : "i" (val)) - -#define BLANK () asm volatile("\n->" : : ) - -#define OFFSET (sym, str, mem) \ - DEFINE(sym, offsetof(struct str, mem)) +#include <asm/paravirt.h> #define __NO_STUBS 1#undef __SYSCALL
@@ -76,6 +69,19 @@ int main(void) offsetof (struct rt_sigframe32, uc.uc_mcontext));BLANK ();#endif +#ifdef CONFIG_PARAVIRT +OFFSET (PARAVIRT_enabled, pv_info, paravirt_enabled); +OFFSET (PARAVIRT_PATCH_pv_cpu_ops, paravirt_patch_template, pv_cpu_ops); +OFFSET (PARAVIRT_PATCH_pv_irq_ops, paravirt_patch_template, pv_irq_ops); +OFFSET (PARAVIRT_PATCH_pv_mmu_ops, paravirt_patch_template, pv_mmu_ops); +OFFSET (PV_IRQ_irq_disable, pv_irq_ops, irq_disable); +OFFSET (PV_IRQ_irq_enable, pv_irq_ops, irq_enable); +OFFSET (PV_CPU_iret, pv_cpu_ops, iret); +OFFSET (PV_CPU_irq_enable_syscall_ret, pv_cpu_ops, irq_enable_syscall_ret); +OFFSET (PV_MMU_read_cr2, pv_mmu_ops, read_cr2); +OFFSET (PV_CPU_swapgs, pv_cpu_ops, swapgs); +BLANK (); +#endif DEFINE (pbe_address, offsetof(struct pbe , address));DEFINE (pbe_orig_address, offsetof(struct pbe , orig_address));DEFINE (pbe_next, offsetof(struct pbe , next));
arch/x86/kernel/paravirt.c new file +447 -0
447 lines not on this page · raw message
arch/x86/kernel/paravirt_32.c deleted +0 -472
472 lines not on this page · raw message
arch/x86/kernel/paravirt_patch_32.c new file +52 -0
52 lines not on this page · raw message
arch/x86/kernel/paravirt_patch_64.c new file +56 -0
56 lines not on this page · raw message
arch/x86/kernel/vmlinux_64.lds.S +6 -0
@@ -185,6 +185,12 @@ SECTIONS .altinstr_replacement : AT(ADDR(.altinstr_replacement) - LOAD_OFFSET) { *(.altinstr_replacement) } + . = ALIGN(8); + .parainstructions : AT(ADDR(.parainstructions) - LOAD_OFFSET) { + __parainstructions = .; + *(.parainstructions) + __parainstructions_end = .; + } /* .exit.text is discard at runtime, not link time, to deal with references from .altinstructions and .eh_frame */ .exit.text : AT(ADDR(.exit.text) - LOAD_OFFSET) { *(.exit.text) }
include/asm-x86/paravirt.h +390 -82
834 lines not on this page · raw message
Signature · 1 line
1.4.4.2
PATCH 24/24 make vsmp a paravirt client
This patch makes vsmp a paravirt client. It now uses the whole infrastructure provided by pvops. When we detect we're running a vsmp box, we change the irq-related paravirt operations (and so, it have to happen quite early), and the patching function
--- arch/x86/Kconfig.x86_64 | 3 +- arch/x86/kernel/Makefile_64 | 3 +- arch/x86/kernel/setup_64.c | 2 + arch/x86/kernel/vsmp_64.c | 82 +++++++++++++++++++++++++++++++++++++----- include/asm-x86/setup.h | 6 ++- 5 files changed, 80 insertions(+), 16 deletions(-)
arch/x86/Kconfig.x86_64 +1 -2
@@ -148,15 +148,14 @@ config X86_PC bool "PC-compatible" help Choose this option if your computer is a standard PC or compatible. - config X86_VSMP bool "Support for ScaleMP vSMP" depends on PCI + select PARAVIRT help Support for ScaleMP vSMP systems. Say 'Y' here if this kernel is supposed to run on these EM64T-based machines. Only choose this option if you have one of these machines. - endchoice choice
arch/x86/kernel/Makefile_64 +1 -2
@@ -8,7 +8,7 @@ obj-y := process_64.o signal_64.o entry_64.o traps_64.o irq_64.o \ x8664_ksyms_64.o i387_64.o syscall_64.o vsyscall_64.o \ setup64.o bootflag.o e820_64.o reboot_64.o quirks.o i8237.o \ pci-dma_64.o pci-nommu_64.o alternative.o hpet.o tsc_64.o bugs_64.o \ - i8253.o rtc.o + i8253.o rtc.o vsmp_64.o obj-$(CONFIG_STACKTRACE) += stacktrace.o obj-y += cpu/
@@ -29,7 +29,6 @@ obj-$(CONFIG_CALGARY_IOMMU) += pci-calgary_64.o tce_64.o obj-$(CONFIG_SWIOTLB) += pci-swiotlb_64.o obj-$(CONFIG_KPROBES) += kprobes_64.o obj-$(CONFIG_X86_PM_TIMER) += pmtimer_64.o -obj-$(CONFIG_X86_VSMP) += vsmp_64.o obj-$(CONFIG_K8_NB) += k8.o obj-$(CONFIG_AUDIT) += audit_64.o
arch/x86/kernel/setup_64.c +2 -0
@@ -338,6 +338,8 @@ void __init setup_arch(char **cmdline_p)init_memory_mapping (0 , (end_pfn_map <<PAGE_SHIFT )); +vsmp_init (); +dmi_scan_machine ();#ifdef CONFIG_SMP
arch/x86/kernel/vsmp_64.c +72 -10
111 lines not on this page · raw message
include/asm-x86/setup.h +4 -2
@@ -4,6 +4,10 @@#define COMMAND_LINE_SIZE 2048#ifndef __ASSEMBLY__ + +/* For EM64T-based VSMP machines */ +void vsmp_init (void ); +char *machine_specific_memory_setup (void );#ifndef CONFIG_PARAVIRT #define paravirt_post_allocator_init () do {} while (0)
@@ -58,8 +62,6 @@ void __init add_memory_region(unsigned long long start,extern unsigned long init_pg_tables_end; - -#endif /* __i386__ */ #endif /* _SETUP */ #endif /* __ASSEMBLY__ */
Signature · 1 line
1.4.4.2
Re: [PATCH 24/24] make vsmp a paravirt client
Quoted 4 lines · Glauber de Oliveira Costa
This patch makes vsmp a paravirt client. It now uses the whole infrastructure provided by pvops. When we detect we're running a vsmp box, we change the irq-related paravirt operations (and so, it have to happen quite early), and the patching function
The PARAVIRT ifdefs look wrong. Surely you don't need them at all because it cannot work at all without paravirt.
Also you got some white space damage.
And the "EM64T based comment" is wrong because there are AMD based vSMPs too.
-Andi
Re: [PATCH 24/24] make vsmp a paravirt client
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Andi Kleen escreveu:
Quoted 8 lines · Glauber de Oliveira Costa
Quoted 4 lines
This patch makes vsmp a paravirt client. It now uses the whole infrastructure provided by pvops. When we detect we're running a vsmp box, we change the irq-related paravirt operations (and so, it have to happen quite early), and the patching function
The PARAVIRT ifdefs look wrong. Surely you don't need them at all because it cannot work at all without paravirt.
The vsmp_64.c file is now compiled unconditionally, according to which me and kiran agreed to. The detection code is always run, but will only trigger when a suitable box is found. Accordingly, the paravirt structs are only touched when PARAVIRT is on. Otherwise, we don't even have the symbols.
Quoted 1 line
Also you got some white space damage.
Thanks, will fix.
Quoted 2 lines
And the "EM64T based comment" is wrong because there are AMD based vSMPs too.
Just got it as-is from the old Kconfig. Do you think it should be fixed as well?
Quoted 1 line
-Andi
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: Using GnuPG with Remi - http://enigmail.mozdev.org
iD8DBQFHOYxKjYI8LaFUWXMRApS3AJwJSYjW4Lw3dnPR4yMNfXABnMoQQQCcDMnf 3wBQoPjGO/8HO1Os4Y21vIU=
=S+KO
-----END PGP SIGNATURE-----
Re: [PATCH 24/24] make vsmp a paravirt client
Quoted 6 lines
The
vsmp_64.cfile is now compiled unconditionally, according to which me and kiran agreed to. The detection code is always run, but will only trigger when a suitable box is found. Accordingly, the paravirt structs are only touched when PARAVIRT is on. Otherwise, we don't even have the symbols.
That seems dumb. What good is it if it doesn't patch the interrupt code?
-Andi
Re: [PATCH 24/24] make vsmp a paravirt client
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Andi Kleen escreveu:
Quoted 7 lines
Quoted 5 lines
The
vsmp_64.cfile is now compiled unconditionally, according to which me and kiran agreed to. The detection code is always run, but will only trigger when a suitable box is found. Accordingly, the paravirt structs are only touched when PARAVIRT is on. Otherwise, we don't even have the symbols.That seems dumb. What good is it if it doesn't patch the interrupt code?
If vsmp is selected, PARAVIRT will be too, and the interrupt code will be patched.
the vsmp option triggers a select statement.
the ifdef only exists because, as I said, the code itself will be always compiled in, to avoid an ifdef in setup_64.c. So it's just a taking it from here, putting it there issue. Kiran seem to prefer this way, but I don't really have a preference.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: Using GnuPG with Remi - http://enigmail.mozdev.org
iD8DBQFHOZ3IjYI8LaFUWXMRAjPkAJ0XosdyMcj1j4h6XW5dVaj95NH7cgCeIW5o CGnBnZOTGz9DIu5D997bsZ4=
=BP57
-----END PGP SIGNATURE-----
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
Re: [PATCH 24/24] make vsmp a paravirt client
Quoted 8 lines
If vsmp is selected, PARAVIRT will be too, and the interrupt code will be patched.
the vsmp option triggers a select statement.the ifdef only exists because, as I said, the code itself will be always compiled in, to avoid an ifdef in
setup_64.c. So it's just a taking it from here, putting it there issue.
Peeking around needlessly in pci config space at each boot just to avoid an ifdef is not an good idea.
-Andi
Re: [PATCH 24/24] make vsmp a paravirt client
Quoted 11 lines · Andi Kleen
Quoted 8 lines
If vsmp is selected, PARAVIRT will be too, and the interrupt code will be patched.
the vsmp option triggers a select statement.the ifdef only exists because, as I said, the code itself will be always compiled in, to avoid an ifdef in
setup_64.c. So it's just a taking it from here, putting it there issue.Peeking around needlessly in pci config space at each boot just to avoid an ifdef is not an good idea.
Agreed. vsmp_init does not make sense unless the irq ops are patched. We can call vsmp_init under #ifdef CONFIG_PARAVIRT.
Thanks,
Kiran
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
Re: [PATCH 24/24] make vsmp a paravirt client
In reply to Andi KleenQuoted 11 lines · Andi Kleen
Quoted 8 lines
If vsmp is selected, PARAVIRT will be too, and the interrupt code will be patched.
the vsmp option triggers a select statement.the ifdef only exists because, as I said, the code itself will be always compiled in, to avoid an ifdef in
setup_64.c. So it's just a taking it from here, putting it there issue.Peeking around needlessly in pci config space at each boot just to avoid an ifdef is not an good idea.
Agreed. vsmp_init does not make sense unless the irq ops are patched. We can call vsmp_init under #ifdef CONFIG_PARAVIRT.
Thanks,
Kiran
Re: [PATCH 24/24] make vsmp a paravirt client
In reply to Glauber de Oliveira CostaQuoted 8 lines
If vsmp is selected, PARAVIRT will be too, and the interrupt code will be patched.
the vsmp option triggers a select statement.the ifdef only exists because, as I said, the code itself will be always compiled in, to avoid an ifdef in
setup_64.c. So it's just a taking it from here, putting it there issue.
Peeking around needlessly in pci config space at each boot just to avoid an ifdef is not an good idea.
-Andi
Re: [PATCH 24/24] make vsmp a paravirt client
In reply to Glauber de Oliveira CostaQuoted 4 lines · Glauber de Oliveira Costa
the ifdef only exists because, as I said, the code itself will be always compiled in, to avoid an ifdef in
setup_64.c. So it's just a taking it from here, putting it there issue. Kiran seem to prefer this way, but I don't really have a preference.
It would be better to have the ifdef in setup_64.c and just make the compilation of vsmp_64.c depend on CONFIG_X86_VSMP. If the ifdef really rankles you could use a weak stub function somewhere, or define an inline stub in vsmp.h.
J
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
Re: [PATCH 24/24] make vsmp a paravirt client
In reply to Glauber de Oliveira CostaQuoted 4 lines · Glauber de Oliveira Costa
the ifdef only exists because, as I said, the code itself will be always compiled in, to avoid an ifdef in
setup_64.c. So it's just a taking it from here, putting it there issue. Kiran seem to prefer this way, but I don't really have a preference.
It would be better to have the ifdef in setup_64.c and just make the compilation of vsmp_64.c depend on CONFIG_X86_VSMP. If the ifdef really rankles you could use a weak stub function somewhere, or define an inline stub in vsmp.h.
J
Re: [PATCH 24/24] make vsmp a paravirt client
In reply to Andi Kleen-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Andi Kleen escreveu:
Quoted 7 lines
Quoted 5 lines
The
vsmp_64.cfile is now compiled unconditionally, according to which me and kiran agreed to. The detection code is always run, but will only trigger when a suitable box is found. Accordingly, the paravirt structs are only touched when PARAVIRT is on. Otherwise, we don't even have the symbols.That seems dumb. What good is it if it doesn't patch the interrupt code?
If vsmp is selected, PARAVIRT will be too, and the interrupt code will be patched.
the vsmp option triggers a select statement.
the ifdef only exists because, as I said, the code itself will be always compiled in, to avoid an ifdef in setup_64.c. So it's just a taking it from here, putting it there issue. Kiran seem to prefer this way, but I don't really have a preference.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: Using GnuPG with Remi - http://enigmail.mozdev.org
iD8DBQFHOZ3IjYI8LaFUWXMRAjPkAJ0XosdyMcj1j4h6XW5dVaj95NH7cgCeIW5o CGnBnZOTGz9DIu5D997bsZ4=
=BP57
-----END PGP SIGNATURE-----
Re: [PATCH 24/24] make vsmp a paravirt client
In reply to Glauber de Oliveira CostaQuoted 6 lines
The
vsmp_64.cfile is now compiled unconditionally, according to which me and kiran agreed to. The detection code is always run, but will only trigger when a suitable box is found. Accordingly, the paravirt structs are only touched when PARAVIRT is on. Otherwise, we don't even have the symbols.
That seems dumb. What good is it if it doesn't patch the interrupt code?
-Andi
Re: [PATCH 24/24] make vsmp a paravirt client
In reply to Glauber de Oliveira CostaQuoted 6 lines · Glauber de Oliveira Costa
-----BEGIN PGP SIGNED MESSAGE-----
Quoted 2 lines
And the "EM64T based comment" is wrong because there are AMD based vSMPs too.
Just got it as-is from the old
Kconfig. Do you think it should be fixed as well?
Yep.
Thanks,
Kiran
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
Re: [PATCH 24/24] make vsmp a paravirt client
In reply to Glauber de Oliveira CostaQuoted 6 lines · Glauber de Oliveira Costa
-----BEGIN PGP SIGNED MESSAGE-----
Quoted 2 lines
And the "EM64T based comment" is wrong because there are AMD based vSMPs too.
Just got it as-is from the old
Kconfig. Do you think it should be fixed as well?
Yep.
Thanks,
Kiran
Re: [PATCH 24/24] make vsmp a paravirt client
In reply to Andi Kleen-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Andi Kleen escreveu:
Quoted 8 lines · Glauber de Oliveira Costa
Quoted 4 lines
This patch makes vsmp a paravirt client. It now uses the whole infrastructure provided by pvops. When we detect we're running a vsmp box, we change the irq-related paravirt operations (and so, it have to happen quite early), and the patching function
The PARAVIRT ifdefs look wrong. Surely you don't need them at all because it cannot work at all without paravirt.
The vsmp_64.c file is now compiled unconditionally, according to which me and kiran agreed to. The detection code is always run, but will only trigger when a suitable box is found. Accordingly, the paravirt structs are only touched when PARAVIRT is on. Otherwise, we don't even have the symbols.
Quoted 1 line
Also you got some white space damage.
Thanks, will fix.
Quoted 2 lines
And the "EM64T based comment" is wrong because there are AMD based vSMPs too.
Just got it as-is from the old Kconfig. Do you think it should be fixed as well?
Quoted 1 line
-Andi
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: Using GnuPG with Remi - http://enigmail.mozdev.org
iD8DBQFHOYxKjYI8LaFUWXMRApS3AJwJSYjW4Lw3dnPR4yMNfXABnMoQQQCcDMnf 3wBQoPjGO/8HO1Os4Y21vIU=
=S+KO
-----END PGP SIGNATURE-----
Re: [PATCH 24/24] make vsmp a paravirt client
In reply to Glauber de Oliveira CostaQuoted 4 lines · Glauber de Oliveira Costa
This patch makes vsmp a paravirt client. It now uses the whole infrastructure provided by pvops. When we detect we're running a vsmp box, we change the irq-related paravirt operations (and so, it have to happen quite early), and the patching function
The PARAVIRT ifdefs look wrong. Surely you don't need them at all because it cannot work at all without paravirt.
Also you got some white space damage.
And the "EM64T based comment" is wrong because there are AMD based vSMPs too.
-Andi
PATCH 24/24 make vsmp a paravirt client
In reply to Glauber de Oliveira CostaThis patch makes vsmp a paravirt client. It now uses the whole infrastructure provided by pvops. When we detect we're running a vsmp box, we change the irq-related paravirt operations (and so, it have to happen quite early), and the patching function
--- arch/x86/Kconfig.x86_64 | 3 +- arch/x86/kernel/Makefile_64 | 3 +- arch/x86/kernel/setup_64.c | 2 + arch/x86/kernel/vsmp_64.c | 82 +++++++++++++++++++++++++++++++++++++----- include/asm-x86/setup.h | 6 ++- 5 files changed, 80 insertions(+), 16 deletions(-)
arch/x86/Kconfig.x86_64 +1 -2
@@ -148,15 +148,14 @@ config X86_PC bool "PC-compatible" help Choose this option if your computer is a standard PC or compatible. - config X86_VSMP bool "Support for ScaleMP vSMP" depends on PCI + select PARAVIRT help Support for ScaleMP vSMP systems. Say 'Y' here if this kernel is supposed to run on these EM64T-based machines. Only choose this option if you have one of these machines. - endchoice choice
arch/x86/kernel/Makefile_64 +1 -2
@@ -8,7 +8,7 @@ obj-y := process_64.o signal_64.o entry_64.o traps_64.o irq_64.o \ x8664_ksyms_64.o i387_64.o syscall_64.o vsyscall_64.o \ setup64.o bootflag.o e820_64.o reboot_64.o quirks.o i8237.o \ pci-dma_64.o pci-nommu_64.o alternative.o hpet.o tsc_64.o bugs_64.o \ - i8253.o rtc.o + i8253.o rtc.o vsmp_64.o obj-$(CONFIG_STACKTRACE) += stacktrace.o obj-y += cpu/
@@ -29,7 +29,6 @@ obj-$(CONFIG_CALGARY_IOMMU) += pci-calgary_64.o tce_64.o obj-$(CONFIG_SWIOTLB) += pci-swiotlb_64.o obj-$(CONFIG_KPROBES) += kprobes_64.o obj-$(CONFIG_X86_PM_TIMER) += pmtimer_64.o -obj-$(CONFIG_X86_VSMP) += vsmp_64.o obj-$(CONFIG_K8_NB) += k8.o obj-$(CONFIG_AUDIT) += audit_64.o
arch/x86/kernel/setup_64.c +2 -0
@@ -338,6 +338,8 @@ void __init setup_arch(char **cmdline_p)init_memory_mapping (0 , (end_pfn_map <<PAGE_SHIFT )); +vsmp_init (); +dmi_scan_machine ();#ifdef CONFIG_SMP
arch/x86/kernel/vsmp_64.c +72 -10
111 lines not on this page · raw message
include/asm-x86/setup.h +4 -2
@@ -4,6 +4,10 @@#define COMMAND_LINE_SIZE 2048#ifndef __ASSEMBLY__ + +/* For EM64T-based VSMP machines */ +void vsmp_init (void ); +char *machine_specific_memory_setup (void );#ifndef CONFIG_PARAVIRT #define paravirt_post_allocator_init () do {} while (0)
@@ -58,8 +62,6 @@ void __init add_memory_region(unsigned long long start,extern unsigned long init_pg_tables_end; - -#endif /* __i386__ */ #endif /* _SETUP */ #endif /* __ASSEMBLY__ */
Signature · 1 line
1.4.4.2
PATCH 23/24 consolidation of paravirt for 32 and 64 bits
In reply to Glauber de Oliveira CostaThis patch unifies the paravirt ops structures for usage in x86_64 and i386 architectures. Some new field had to be created to accomodate the differences between the architectures.
--- arch/x86/Kconfig.x86_64 | 11 + arch/x86/kernel/Makefile | 3 + arch/x86/kernel/Makefile_32 | 1 - arch/x86/kernel/asm-offsets.c | 8 + arch/x86/kernel/asm-offsets_32.c | 8 - arch/x86/kernel/asm-offsets_64.c | 22 +- arch/x86/kernel/paravirt.c | 447 +++++++++++++++++++++++++++++++++ arch/x86/kernel/paravirt_32.c | 472 ----------------------------------- arch/x86/kernel/paravirt_patch_32.c | 52 ++++ arch/x86/kernel/paravirt_patch_64.c | 56 ++++ arch/x86/kernel/vmlinux_64.lds.S | 6 + include/asm-x86/paravirt.h | 472 +++++++++++++++++++++++++++++------ 12 files changed, 987 insertions(+), 571 deletions(-)
arch/x86/Kconfig.x86_64 +11 -0
@@ -372,6 +372,17 @@ config NODES_SHIFT # Dummy CONFIG option to select ACPI_NUMA from drivers/acpi/Kconfig. +config PARAVIRT + bool + depends on EXPERIMENTAL + help + Paravirtualization is a way of running multiple instances of + Linux on the same machine, under a hypervisor. This option + changes the kernel so it can modify itself when it is run + under a hypervisor, improving performance significantly. + However, when run without a hypervisor the kernel is + theoretically slower. If in doubt, say N. + config X86_64_ACPI_NUMA bool "ACPI NUMA detection" depends on NUMA
arch/x86/kernel/Makefile +3 -0
@@ -1,8 +1,11 @@ ifeq ($(CONFIG_X86_32),y) include ${srctree}/arch/x86/kernel/Makefile_32 +obj-$(CONFIG_PARAVIRT) += paravirt_patch_32.o else include ${srctree}/arch/x86/kernel/Makefile_64 +obj-$(CONFIG_PARAVIRT) += paravirt_patch_64.o endif +obj-$(CONFIG_PARAVIRT) += paravirt.o # Workaround to delete .lds files with make clean # The problem is that we do not enter Makefile_32 with make clean.
arch/x86/kernel/Makefile_32 +0 -1
@@ -43,7 +43,6 @@ obj-$(CONFIG_K8_NB) += k8.o obj-$(CONFIG_MGEODE_LX) += geode_32.o mfgpt_32.o obj-$(CONFIG_VMI) += vmi_32.o vmiclock_32.o -obj-$(CONFIG_PARAVIRT) += paravirt_32.o obj-y += pcspeaker.o obj-$(CONFIG_SCx200) += scx200_32.o
arch/x86/kernel/asm-offsets.c +8 -0
@@ -1,3 +1,11 @@ +#define DEFINE (sym, val) \ + asm volatile("\n->" #sym " %0 " #val : : "i" (val)) + +#define BLANK () asm volatile("\n->" : : ) + +#define OFFSET (sym, str, mem) \ + DEFINE(sym, offsetof(struct str, mem)); +#ifdef CONFIG_X86_32 # include "asm-offsets_32.c" #else
arch/x86/kernel/asm-offsets_32.c +0 -8
@@ -25,14 +25,6 @@#include "../../../drivers/lguest/lg.h" #endif -#define DEFINE (sym, val) \ - asm volatile("\n->" #sym " %0 " #val : : "i" (val)) - -#define BLANK () asm volatile("\n->" : : ) - -#define OFFSET (sym, str, mem) \ - DEFINE(sym, offsetof(struct str, mem)); -/* workaround for a warning with -Wmissing-prototypes */ void foo (void );
arch/x86/kernel/asm-offsets_64.c +14 -8
@@ -16,14 +16,7 @@#include <asm/thread_info.h> #include <asm/ia32.h> #include <asm/bootparam.h> - -#define DEFINE (sym, val) \ - asm volatile("\n->" #sym " %0 " #val : : "i" (val)) - -#define BLANK () asm volatile("\n->" : : ) - -#define OFFSET (sym, str, mem) \ - DEFINE(sym, offsetof(struct str, mem)) +#include <asm/paravirt.h> #define __NO_STUBS 1#undef __SYSCALL
@@ -76,6 +69,19 @@ int main(void) offsetof (struct rt_sigframe32, uc.uc_mcontext));BLANK ();#endif +#ifdef CONFIG_PARAVIRT +OFFSET (PARAVIRT_enabled, pv_info, paravirt_enabled); +OFFSET (PARAVIRT_PATCH_pv_cpu_ops, paravirt_patch_template, pv_cpu_ops); +OFFSET (PARAVIRT_PATCH_pv_irq_ops, paravirt_patch_template, pv_irq_ops); +OFFSET (PARAVIRT_PATCH_pv_mmu_ops, paravirt_patch_template, pv_mmu_ops); +OFFSET (PV_IRQ_irq_disable, pv_irq_ops, irq_disable); +OFFSET (PV_IRQ_irq_enable, pv_irq_ops, irq_enable); +OFFSET (PV_CPU_iret, pv_cpu_ops, iret); +OFFSET (PV_CPU_irq_enable_syscall_ret, pv_cpu_ops, irq_enable_syscall_ret); +OFFSET (PV_MMU_read_cr2, pv_mmu_ops, read_cr2); +OFFSET (PV_CPU_swapgs, pv_cpu_ops, swapgs); +BLANK (); +#endif DEFINE (pbe_address, offsetof(struct pbe , address));DEFINE (pbe_orig_address, offsetof(struct pbe , orig_address));DEFINE (pbe_next, offsetof(struct pbe , next));
arch/x86/kernel/paravirt.c new file +447 -0
447 lines not on this page · raw message
arch/x86/kernel/paravirt_32.c deleted +0 -472
472 lines not on this page · raw message
arch/x86/kernel/paravirt_patch_32.c new file +52 -0
52 lines not on this page · raw message
arch/x86/kernel/paravirt_patch_64.c new file +56 -0
56 lines not on this page · raw message
arch/x86/kernel/vmlinux_64.lds.S +6 -0
@@ -185,6 +185,12 @@ SECTIONS .altinstr_replacement : AT(ADDR(.altinstr_replacement) - LOAD_OFFSET) { *(.altinstr_replacement) } + . = ALIGN(8); + .parainstructions : AT(ADDR(.parainstructions) - LOAD_OFFSET) { + __parainstructions = .; + *(.parainstructions) + __parainstructions_end = .; + } /* .exit.text is discard at runtime, not link time, to deal with references from .altinstructions and .eh_frame */ .exit.text : AT(ADDR(.exit.text) - LOAD_OFFSET) { *(.exit.text) }
include/asm-x86/paravirt.h +390 -82
834 lines not on this page · raw message
Signature · 1 line
1.4.4.2
PATCH 22/24 prepare x86_64 architecture initialization for paravirt
In reply to Glauber de Oliveira CostaThis patch prepares the x86_64 architecture initialization for paravirt. It requires a memory initialization step, which is done by implementing 64-bit version for machine_specific_memory_setup, and putting an ARCH_SETUP hook, for guest-dependent initialization. This last step is done akin to i386
--- arch/x86/kernel/e820_64.c | 9 +++++++-- arch/x86/kernel/setup_64.c | 28 +++++++++++++++++++++++++++- include/asm-x86/setup.h | 11 ++++++++--- 3 files changed, 42 insertions(+), 6 deletions(-)
arch/x86/kernel/e820_64.c +7 -2
@@ -639,8 +639,10 @@ void early_panic(char *msg)panic (msg); } -void __init setup_memory_region (void ) +/* We're not void only for x86 32-bit compat */ +char *__init machine_specific_memory_setup (void ) { +char *who ="BIOS-e820" ;/* * Try to copy the BIOS-supplied E820-map. *
@@ -651,7 +653,10 @@ void __init setup_memory_region(void)if (copy_e820_map (boot_params.e820_map, boot_params.e820_entries) <0 )early_panic ("Cannot find a valid memory map" );printk (KERN_INFO "BIOS-provided physical RAM map:\n" ); -e820_print_map ("BIOS-e820" ); +e820_print_map (who); + +/* In case someone cares... */ +return who; }static int __init parse_memopt (char *p)
arch/x86/kernel/setup_64.c +27 -1
@@ -39,6 +39,7 @@#include <linux/dmi.h> #include <linux/dma-mapping.h> #include <linux/ctype.h> +#include <linux/uaccess.h> #include <asm/mtrr.h> #include <asm/uaccess.h>
@@ -61,6 +62,12 @@#include <asm/cacheflush.h> #include <asm/mce.h> +#ifdef CONFIG_PARAVIRT +#include <asm/paravirt.h> +#else +#define ARCH_SETUP +#endif +/* * Machine setup.. */
@@ -244,6 +251,16 @@ static void discover_ebda(void)* 4K EBDA area at 0x40E */ ebda_addr = *(unsigned short *)__va (EBDA_ADDR_POINTER ); +/* +* There can be some situations, like paravirtualized guests, +* in which there is no available ebda information. In such +* case, just skip it +*/ +if (!ebda_addr) { + ebda_size =0 ; +return ; + } + ebda_addr <<=4 ; ebda_size = *(unsigned short *)__va (ebda_addr);
@@ -257,6 +274,12 @@ static void discover_ebda(void) ebda_size =64 *1024 ; } +/* Overridden in paravirt.c if CONFIG_PARAVIRT */ +void __attribute__((weak))memory_setup (void ) +{ +machine_specific_memory_setup (); +} +void __init setup_arch (char **cmdline_p) {printk (KERN_INFO "Command line: %s\n" , boot_command_line);
@@ -272,7 +295,10 @@ void __init setup_arch(char **cmdline_p) rd_prompt = ((boot_params.hdr.ram_size &RAMDISK_PROMPT_FLAG ) !=0 ); rd_doload = ((boot_params.hdr.ram_size &RAMDISK_LOAD_FLAG ) !=0 );#endif -setup_memory_region (); + +ARCH_SETUP + +memory_setup ();copy_edd ();if (!boot_params.hdr.root_flags)
include/asm-x86/setup.h +8 -3
@@ -3,6 +3,13 @@#define COMMAND_LINE_SIZE 2048 +#ifndef __ASSEMBLY__ +char *machine_specific_memory_setup (void ); +#ifndef CONFIG_PARAVIRT +#define paravirt_post_allocator_init () do {} while (0) +#endif +#endif /* __ASSEMBLY__ */ +#ifdef __KERNEL__#ifdef __i386__
@@ -51,9 +58,7 @@ void __init add_memory_region(unsigned long long start,extern unsigned long init_pg_tables_end; -#ifndef CONFIG_PARAVIRT -#define paravirt_post_allocator_init () do {} while (0) -#endif +#endif /* __i386__ */ #endif /* _SETUP */
Signature · 1 line
1.4.4.2
PATCH 21/24 native versions for page table entries values
In reply to Glauber de Oliveira CostaThis patch turns the page operations (set and make a page table) into native_ versions. The operations itself will be later overriden by paravirt.
It uses unsigned long long for consistency with 32-bit. So we have to fix fault_64.c to get rid of warnings.
--- arch/x86/mm/fault_64.c | 8 +++--- include/asm-x86/page_64.h | 56 +++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 55 insertions(+), 9 deletions(-)
arch/x86/mm/fault_64.c +4 -4
@@ -157,22 +157,22 @@ void dump_pagetable(unsigned long address) pgd =__va ((unsigned long )pgd &PHYSICAL_PAGE_MASK ); pgd +=pgd_index (address);if (bad_address (pgd)) goto bad; -printk ("PGD %lx " ,pgd_val (*pgd)); +printk ("PGD %llx " ,pgd_val (*pgd));if (!pgd_present (*pgd)) goto ret; pud =pud_offset (pgd, address);if (bad_address (pud)) goto bad; -printk ("PUD %lx " ,pud_val (*pud)); +printk ("PUD %llx " ,pud_val (*pud));if (!pud_present (*pud)) goto ret; pmd =pmd_offset (pud, address);if (bad_address (pmd)) goto bad; -printk ("PMD %lx " ,pmd_val (*pmd)); +printk ("PMD %llx " ,pmd_val (*pmd));if (!pmd_present (*pmd) ||pmd_large (*pmd)) goto ret; pte =pte_offset_kernel (pmd, address);if (bad_address (pte)) goto bad; -printk ("PTE %lx" ,pte_val (*pte)); +printk ("PTE %llx" ,pte_val (*pte)); ret:printk ("\n" );return ;
include/asm-x86/page_64.h +51 -5
67 lines not on this page · raw message
Signature · 1 line
1.4.4.2
PATCH 20/24 tweak io_64.h for paravirt.
In reply to Glauber de Oliveira CostaWe need something here because we can't call in and out instructions directly. However, we have to be careful, because no indirections are allowed in misc_64.c , and paravirt_ops is a kind of one. So just call it directly there
--- arch/x86/boot/compressed/misc_64.c | 6 +++++ include/asm-x86/io_64.h | 37 +++++++++++++++++++++++++++++------ 2 files changed, 36 insertions(+), 7 deletions(-)
arch/x86/boot/compressed/misc_64.c +6 -0
@@ -9,6 +9,12 @@* High loaded stuff by Hans Lermen & Werner Almesberger, Feb. 1996 */ +/* +* we have to be careful, because no indirections are allowed here, and +* paravirt_ops is a kind of one. As it will only run in baremetal anyway, +* we just keep it from happening +*/ +#undef CONFIG_PARAVIRT#define _LINUX_STRING_H_ 1#define __LINUX_BITMAP_H 1
include/asm-x86/io_64.h +30 -7
@@ -35,12 +35,24 @@* - Arnaldo Carvalho de Melo <[email protected]> */ -#define __SLOW_DOWN_IO "\noutb %%al,$0x80" +static inline void native_io_delay (void ) +{ + asmvolatile ("outb %%al,$0x80" : : :"memory" ); +} -#ifdef REALLY_SLOW_IO -#define __FULL_SLOW_DOWN_IO __SLOW_DOWN_IO __SLOW_DOWN_IO __SLOW_DOWN_IO __SLOW_DOWN_IO +#if defined(CONFIG_PARAVIRT ) +#include <asm/paravirt.h> #else -#define __FULL_SLOW_DOWN_IO __SLOW_DOWN_IO + +static inline void slow_down_io (void ) +{ +native_io_delay (); +#ifdef REALLY_SLOW_IO +native_io_delay (); +native_io_delay (); +native_io_delay (); +#endif +}#endif /*
@@ -52,9 +64,15 @@ static inline void out##s(unsigned x value, unsigned short port) {#define __OUT2 (s,s1,s2) \ __asm__ __volatile__ ("out" #s " %" s1 "0,%" s2 "1" +#ifndef REALLY_SLOW_IO +#define REALLY_SLOW_IO +#define UNSET_REALLY_SLOW_IO +#endif +#define __OUT (s,s1,x) \ __OUT1(s,x) __OUT2(s,s1,"w") : : "a" (value), "Nd" (port)); } \ -__OUT1(s##_p,x) __OUT2(s,s1,"w") __FULL_SLOW_DOWN_IO : : "a" (value), "Nd" (port));} \ +__OUT1(s##_p, x) __OUT2(s, s1, "w") : : "a" (value), "Nd" (port)); \ + slow_down_io(); }#define __IN1 (s) \ static inline RETURN_TYPE in##s(unsigned short port) { RETURN_TYPE _v;
@@ -63,8 +81,13 @@ static inline RETURN_TYPE in##s(unsigned short port) { RETURN_TYPE _v; __asm__ __volatile__ ("in" #s " %" s2 "1,%" s1 "0" #define __IN(s,s1,i...) \ -__IN1(s) __IN2(s,s1,"w") : "=a" (_v) : "Nd" (port) ,##i ); return _v; } \ -__IN1(s##_p) __IN2(s,s1,"w") __FULL_SLOW_DOWN_IO : "=a" (_v) : "Nd" (port) ,##i ); return _v; } \ +__IN1(s) __IN2(s, s1, "w") : "=a" (_v) : "Nd" (port), ##i); return _v; } \ +__IN1(s##_p) __IN2(s, s1, "w") : "=a" (_v) : "Nd" (port), ##i); \ + slow_down_io(); return _v; } + +#ifdef UNSET_REALLY_SLOW_IO +#undef REALLY_SLOW_IO +#endif #define __INS (s) \ static inline void ins##s(unsigned short port, void * addr, unsigned long count) \
Signature · 1 line
1.4.4.2
PATCH 19/24 turn priviled operation into a macro in head_64.S
In reply to Glauber de Oliveira Costaunder paravirt, read cr2 cannot be issued directly anymore. So wrap it in a macro, defined to the operation itself in case paravirt is off, but to something else if we have paravirt in the game
--- arch/x86/kernel/head_64.S | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletions(-)
arch/x86/kernel/head_64.S +8 -1
@@ -19,6 +19,13 @@ #include <asm/msr.h> #include <asm/cache.h> +#ifdef CONFIG_PARAVIRT +#include <asm/asm-offsets.h> +#include <asm/paravirt.h> +#else +#define GET_CR2_INTO_RCX movq %cr2, %rcx +#endif + /* we are not able to switch in one step to the final KERNEL ADRESS SPACE * because we need identity-mapped pages. *
@@ -267,7 +274,7 @@ ENTRY(early_idt_handler) xorl %eax,%eax movq 8(%rsp),%rsi # get rip movq (%rsp),%rdx - movq %cr2,%rcx + GET_CR2_INTO_RCX leaq early_idt_msg(%rip),%rdi call early_printk cmpl $2,early_recursion_flag(%rip)
Signature · 1 line
1.4.4.2
PATCH 18/24 export cpu_gdt_descr
In reply to Glauber de Oliveira CostaWith paravirualization, hypervisors needs to handle the gdt, that was right to this point only used at very early inialization code. Hypervisors (lguest being the current case) are commonly modules, so make it an export
--- arch/x86/kernel/x8664_ksyms_64.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-)
arch/x86/kernel/x8664_ksyms_64.c +6 -0
@@ -8,6 +8,7 @@#include <asm/processor.h> #include <asm/uaccess.h> #include <asm/pgtable.h> +#include <asm/desc.h> EXPORT_SYMBOL (kernel_thread);
@@ -51,3 +52,8 @@ EXPORT_SYMBOL(__memcpy);EXPORT_SYMBOL (load_gs_index);EXPORT_SYMBOL (_proxy_pda); + +#ifdef CONFIG_PARAVIRT +/* Virtualized guests may want to use it */ +EXPORT_SYMBOL_GPL (cpu_gdt_descr); +#endif
Signature · 1 line
1.4.4.2
PATCH 17/24 This patch add provisions for time related functions so they
In reply to Glauber de Oliveira Costacan be later replaced by paravirt versions.
it basically encloses {g,s}et_wallclock inside the already existent functions update_persistent_clock and read_persistent_clock, and defines {s,g}et_wallclock to the core of such functions.
it also allow for a later-on-game time initialization, as done by i386. Paravirt guests can set a function to do their own initialization this way.
--- arch/x86/kernel/time_64.c | 12 +++++++++--- include/asm-x86/time.h | 26 +++++++++++++++++++++----- 2 files changed, 30 insertions(+), 8 deletions(-)
arch/x86/kernel/time_64.c +9 -3
@@ -21,6 +21,8 @@#include <asm/hpet.h> #include <asm/nmi.h> #include <asm/vgtod.h> +#include <asm/time.h> +#include <asm/timer.h> volatile unsigned long __jiffies __section_jiffies =INITIAL_JIFFIES ;
@@ -54,7 +56,7 @@ static irqreturn_t timer_event_interrupt(int irq, void *dev_id)/* calibrate_cpu is used on systems with fixed rate TSCs to determine * processor frequency */ #define TICK_COUNT 100000000 -static unsigned int __init tsc_calibrate_cpu_khz (void ) +unsigned long __init native_calculate_cpu_khz (void ) {int tsc_start, tsc_now;int i, no_ctr_free;
@@ -104,20 +106,23 @@ static struct irqaction irq0 = { .name = "timer" }; -void __init time_init (void ) +void __init hpet_time_init (void ) {if (!hpet_enable ())setup_pit_timer ();setup_irq (0 , &irq0); +} +void __init time_init (void ) +{tsc_calibrate (); cpu_khz = tsc_khz;if (cpu_has (&boot_cpu_data,X86_FEATURE_CONSTANT_TSC ) && boot_cpu_data.x86_vendor ==X86_VENDOR_AMD && boot_cpu_data.x86 ==16 ) - cpu_khz =tsc_calibrate_cpu_khz (); + cpu_khz =calculate_cpu_khz ();if (unsynchronized_tsc ())mark_tsc_unstable ("TSCs unsynchronized" );
@@ -130,4 +135,5 @@ void __init time_init(void)printk (KERN_INFO "time.c: Detected %d.%03d MHz processor.\n" , cpu_khz /1000 , cpu_khz %1000 );init_tsc_clocksource (); + late_time_init =choose_time_init (); }
include/asm-x86/time.h +21 -5
@@ -1,8 +1,12 @@ -#ifndef _ASMi386_TIME_H -#define _ASMi386_TIME_H +#ifndef _ASMX86_TIME_H +#define _ASMX86_TIME_H + +extern void (*late_time_init)(void); +extern void hpet_time_init(void); -#include <linux/efi.h> #include <asm/mc146818rtc.h> +#ifdef CONFIG_X86_32 +#include <linux/efi.h> static inline unsigned long native_get_wallclock(void) {
@@ -28,8 +32,20 @@ static inline int native_set_wallclock(unsigned long nowtime) return retval; } -extern void (*late_time_init)(void ); -extern void hpet_time_init (void ); +#else +extern void native_time_init_hook (void ); + +static inline unsigned long native_get_wallclock (void ) +{ +return mach_get_cmos_time (); +} + +static inline int native_set_wallclock (unsigned long nowtime) +{ +return mach_set_rtc_mmss (nowtime); +} + +#endif #ifdef CONFIG_PARAVIRT #include <asm/paravirt.h>
Signature · 1 line
1.4.4.2
PATCH 16/24 add native functions for descriptors handling
In reply to Glauber de Oliveira CostaThis patch turns the basic descriptor handling into native_ functions. It is basically write_idt, load_idt, write_gdt, load_gdt, set_ldt, store_tr, load_tls, and the ones for updating a single entry.
In the process of doing that, we change the definition of load_LDT_nolock, and caller sites have to be patched. We also patch call sites that now needs a typecast.
--- include/asm-x86/desc.h | 59 ++++++++++++ include/asm-x86/desc_32.h | 45 --------- include/asm-x86/desc_64.h | 191 ++++++++++++++++++------------------- include/asm-x86/mmu_context_64.h | 23 ++++- 4 files changed, 169 insertions(+), 149 deletions(-)
include/asm-x86/desc.h +59 -0
@@ -1,5 +1,64 @@ +#ifndef _ASM_DESC_H_ +#define _ASM_DESC_H_ +#ifdef CONFIG_X86_32 # include "desc_32.h" #else # include "desc_64.h" #endif + +#ifndef __ASSEMBLY__ +#define LDT_entry_a (info) \ + ((((info)->base_addr & 0x0000ffff) << 16) | ((info)->limit & 0x0ffff)) + +#define LDT_entry_b (info) \ + (((info)->base_addr & 0xff000000) | \ + (((info)->base_addr & 0x00ff0000) >> 16) | \ + ((info)->limit & 0xf0000) | \ + (((info)->read_exec_only ^ 1) << 9) | \ + ((info)->contents << 10) | \ + (((info)->seg_not_present ^ 1) << 15) | \ + ((info)->seg_32bit << 22) | \ + ((info)->limit_in_pages << 23) | \ + ((info)->useable << 20) | \ + 0x7000) + +#define _LDT_empty (info) (\ + (info)->base_addr == 0 && \ + (info)->limit == 0 && \ + (info)->contents == 0 && \ + (info)->read_exec_only == 1 && \ + (info)->seg_32bit == 0 && \ + (info)->limit_in_pages == 0 && \ + (info)->seg_not_present == 1 && \ + (info)->useable == 0 ) + +#ifdef CONFIG_X86_64 +#define LDT_empty (info) (_LDT_empty(info) && ((info)->lm == 0)) +#else +#define LDT_empty (info) _LDT_empty(info) +#endif + +static inline void clear_LDT (void ) +{ +set_ldt (NULL ,0 ); +} + +/* +* load one particular LDT into the current CPU +*/ +static inline void load_LDT_nolock (mm_context_t *pc) +{ +set_ldt (pc->ldt, pc->size); +} + +static inline void load_LDT (mm_context_t *pc) +{ +preempt_disable (); +load_LDT_nolock (pc); +preempt_enable (); +} + +#endif /* __ASSEMBLY__ */ + +#endif
include/asm-x86/desc_32.h +0 -45
51 lines not on this page · raw message
include/asm-x86/desc_64.h +93 -98
261 lines not on this page · raw message
include/asm-x86/mmu_context_64.h +17 -6
@@ -7,7 +7,16 @@#include <asm/pda.h> #include <asm/pgtable.h> #include <asm/tlbflush.h> + +#ifdef CONFIG_PARAVIRT +#include <asm/paravirt.h> +#else #include <asm-generic/mm_hooks.h> +static inline void paravirt_activate_mm (struct mm_struct *prev, +struct mm_struct *next) +{ +} +#endif /* CONFIG_PARAVIRT */ /* * possibly do the LDT unload here?
@@ -25,7 +34,7 @@ static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)static inline void load_cr3 (pgd_t *pgd) { - asmvolatile ("movq %0,%%cr3" ::"r" (__pa (pgd)) :"memory" ); +write_cr3 (__pa (pgd)); } static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
@@ -43,7 +52,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,load_cr3 (next->pgd);if (unlikely (next->context.ldt != prev->context.ldt)) -load_LDT_nolock (&next->context, cpu); +load_LDT_nolock (&next->context); }#ifdef CONFIG_SMP else {
@@ -56,7 +65,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,* to make sure to use no freed page tables. */ load_cr3 (next->pgd); - load_LDT_nolock(&next->context, cpu); + load_LDT_nolock(&next->context); } }#endif
@@ -67,8 +76,10 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, asmvolatile ("movl %0,%%fs" ::"r" (0 )); \ } while(0) -#define activate_mm (prev, next) \ - switch_mm((prev),(next),NULL) - +#define activate_mm (prev, next) \ +do { \ + paravirt_activate_mm(prev, next); \ + switch_mm((prev), (next), NULL); \ +} while (0)#endif
Signature · 1 line
1.4.4.2
PATCH 15/24 native versions for set pagetables
In reply to Glauber de Oliveira CostaThis patch turns the set_p{te,md,ud,gd} functions into their native_ versions. There is no need to patch any caller.
Also, it adds pte_update() and pte_update_defer() calls whenever we modify a page table entry. This last part was coded to match i386 as close as possible.
Pieces of the header are moved to below the #ifdef CONFIG_PARAVIRT site, as they are users of the newly defined set_* macros.
--- include/asm-x86/pgtable_64.h | 192 ++++++++++++++++++++++++++++-------------- 1 files changed, 128 insertions(+), 64 deletions(-)
include/asm-x86/pgtable_64.h +128 -64
@@ -57,56 +57,107 @@ extern unsigned long empty_zero_page[PAGE_SIZE/sizeof(unsigned long)];*/ #define PTRS_PER_PTE 512 -#ifndef __ASSEMBLY__ +#ifdef CONFIG_PARAVIRT +#include <asm/paravirt.h> +#else + +#define set_pte native_set_pte +#define set_pte_at (mm, addr, ptep, pteval) set_pte(ptep, pteval) +#define set_pmd native_set_pmd +#define set_pud native_set_pud +#define set_pgd native_set_pgd +#define pte_clear (mm, addr, xp) \ +do { \ + set_pte_at(mm, addr, xp, __pte(0)); \ +} while (0) -#define pte_ERROR (e) \ - printk("%s:%d: bad pte %p(%016lx).\n", __FILE__, __LINE__, &(e), pte_val(e)) -#define pmd_ERROR (e) \ - printk("%s:%d: bad pmd %p(%016lx).\n", __FILE__, __LINE__, &(e), pmd_val(e)) -#define pud_ERROR (e) \ - printk("%s:%d: bad pud %p(%016lx).\n", __FILE__, __LINE__, &(e), pud_val(e)) -#define pgd_ERROR (e) \ - printk("%s:%d: bad pgd %p(%016lx).\n", __FILE__, __LINE__, &(e), pgd_val(e)) +#define pmd_clear (xp) do { set_pmd(xp, __pmd(0)); } while (0) +#define pud_clear native_pud_clear +#define pgd_clear native_pgd_clear +#define pte_update (mm, addr, ptep) do { } while (0) +#define pte_update_defer (mm, addr, ptep) do { } while (0) -#define pgd_none (x) (!pgd_val(x)) -#define pud_none (x) (!pud_val(x)) +#endif -static inline void set_pte (pte_t *dst,pte_t val) +#ifndef __ASSEMBLY__ + +static inline void native_set_pte (pte_t *dst,pte_t val) { -pte_val (*dst) =pte_val (val); + dst->pte =pte_val (val); } -#define set_pte_at (mm,addr,ptep,pteval) set_pte(ptep,pteval) -static inline void set_pmd (pmd_t *dst,pmd_t val) +static inline void native_set_pmd (pmd_t *dst,pmd_t val) { -pmd_val (*dst) =pmd_val (val); + dst->pmd =pmd_val (val); } -static inline void set_pud (pud_t *dst,pud_t val) +static inline void native_set_pud (pud_t *dst,pud_t val) { -pud_val (*dst) =pud_val (val); + dst->pud =pud_val (val); } -static inline void pud_clear (pud_t *pud) +static inline void native_set_pgd (pgd_t *dst,pgd_t val) { -set_pud (pud,__pud (0 )); + dst->pgd =pgd_val (val); } -static inline void set_pgd (pgd_t *dst,pgd_t val) +static inline void native_pud_clear (pud_t *pud) { -pgd_val (*dst) =pgd_val (val); -} +set_pud (pud,__pud (0 )); +} -static inline void pgd_clear (pgd_t * pgd) +static inline void native_pgd_clear (pgd_t *pgd) {set_pgd (pgd,__pgd (0 )); } -#define ptep_get_and_clear (mm,addr,xp) __pte(xchg(&(xp)->pte, 0)) +static inline void native_set_pte_at (struct mm_struct *mm,unsigned long addr, +pte_t *ptep,pte_t pteval) +{ +native_set_pte (ptep, pteval); +} + +static inline void native_pte_clear (struct mm_struct *mm,unsigned long addr, +pte_t *ptep) +{ +native_set_pte_at (mm, addr, ptep,__pte (0 )); +} + +static inline void native_pmd_clear (pmd_t *pmd) +{ +native_set_pmd (pmd,__pmd (0 )); +} + + +#define pte_ERROR (e) \ + printk("%s:%d: bad pte %p(%016llx).\n", \ + __FILE__, __LINE__, &(e), (u64)pte_val(e)) +#define pmd_ERROR (e) \ + printk("%s:%d: bad pmd %p(%016llx).\n", \ + __FILE__, __LINE__, &(e), (u64)pmd_val(e)) +#define pud_ERROR (e) \ + printk("%s:%d: bad pud %p(%016llx).\n", \ + __FILE__, __LINE__, &(e), (u64)pud_val(e)) +#define pgd_ERROR (e) \ + printk("%s:%d: bad pgd %p(%016llx).\n", \ + __FILE__, __LINE__, &(e), (u64)pgd_val(e)) + +#define pgd_none (x) (!pgd_val(x)) +#define pud_none (x) (!pud_val(x))struct mm_struct ; -static inline pte_t ptep_get_and_clear_full (struct mm_struct *mm,unsigned long addr,pte_t *ptep,int full) +static inline pte_t ptep_get_and_clear (struct mm_struct *mm, +unsigned long addr,pte_t *ptep) +{ +pte_t pte =__pte (xchg (&ptep->pte,0 )); +pte_update (mm, addr, ptep); +return pte; +} + +static inline pte_t ptep_get_and_clear_full (struct mm_struct *mm, +unsigned long addr,pte_t *ptep, +int full) {pte_t pte;if (full) {
@@ -246,7 +297,6 @@ static inline unsigned long pmd_bad(pmd_t pmd)#define pte_none (x) (!pte_val(x))#define pte_present (x) (pte_val(x) & (_PAGE_PRESENT | _PAGE_PROTNONE)) -#define pte_clear (mm,addr,xp) do { set_pte_at(mm, addr, xp, __pte(0)); } while (0)#define pages_to_mb (x) ((x) >> (20-PAGE_SHIFT))/* FIXME: is this right? */
@@ -255,11 +305,11 @@ static inline unsigned long pmd_bad(pmd_t pmd)static inline pte_t pfn_pte (unsigned long page_nr,pgprot_t pgprot) { -pte_t pte; -pte_val (pte) = (page_nr <<PAGE_SHIFT ); -pte_val (pte) |=pgprot_val (pgprot); -pte_val (pte) &= __supported_pte_mask; -return pte; +unsigned long pte; + pte = (page_nr <<PAGE_SHIFT ); + pte |=pgprot_val (pgprot); + pte &= __supported_pte_mask; +return __pte (pte); }/*
@@ -283,30 +333,6 @@ static inline pte_t pte_mkwrite(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) |static inline pte_t pte_mkhuge (pte_t pte) {set_pte (&pte,__pte (pte_val (pte) | _PAGE_PSE));return pte; }static inline pte_t pte_clrhuge (pte_t pte) {set_pte (&pte,__pte (pte_val (pte) & ~_PAGE_PSE));return pte; } -struct vm_area_struct ; - -static inline int ptep_test_and_clear_young (struct vm_area_struct *vma,unsigned long addr,pte_t *ptep) -{ -if (!pte_young (*ptep)) -return 0 ; -return test_and_clear_bit (_PAGE_BIT_ACCESSED, &ptep->pte); -} - -static inline void ptep_set_wrprotect (struct mm_struct *mm,unsigned long addr,pte_t *ptep) -{ -clear_bit (_PAGE_BIT_RW, &ptep->pte); -} - -/* -* Macro to mark a page protection value as "uncacheable". -*/ -#define pgprot_noncached (prot) (__pgprot(pgprot_val(prot) | _PAGE_PCD | _PAGE_PWT)) - -static inline int pmd_large (pmd_t pte) { -return (pmd_val (pte) & __LARGE_PTE) == __LARGE_PTE; -} - -/* * Conversion functions: convert a page and protection to a page entry, * and a page entry and page directory to the page they refer to.
@@ -340,7 +366,6 @@ static inline int pmd_large(pmd_t pte) { pmd_index(address))#define pmd_none (x) (!pmd_val(x))#define pmd_present (x) (pmd_val(x) & _PAGE_PRESENT) -#define pmd_clear (xp) do { set_pmd(xp, __pmd(0)); } while (0)#define pfn_pmd (nr,prot) (__pmd(((nr) << PAGE_SHIFT) | pgprot_val(prot)))#define pmd_pfn (x) ((pmd_val(x) & __PHYSICAL_MASK) >> PAGE_SHIFT)
@@ -352,15 +377,53 @@ static inline int pmd_large(pmd_t pte) {/* page, protection -> pte */ #define mk_pte (page, pgprot) pfn_pte(page_to_pfn(page), (pgprot)) -#define mk_pte_huge (entry) (pte_val(entry) |= _PAGE_PRESENT | _PAGE_PSE) - + +static inline pte_t __mk_pte_huge (pte_t entry) +{ +unsigned long pte; + pte =pte_val (entry); + pte |= _PAGE_PRESENT | _PAGE_PSE; +return __pte (pte); +} +#define mk_pte_huge (entry) ((entry) = __mk_pte_huge(entry)) + +#include <linux/mm_types.h> +static inline int ptep_test_and_clear_young (struct vm_area_struct *vma, +unsigned long addr,pte_t *ptep) +{ +int ret =0 ; +if (!pte_young (*ptep)) +return 0 ; + ret =test_and_clear_bit (_PAGE_BIT_ACCESSED, &ptep->pte); +pte_update (vma->vm_mm, addr, ptep); +return ret; +} + +static inline void ptep_set_wrprotect (struct mm_struct *mm, +unsigned long addr,pte_t *ptep) +{ +clear_bit (_PAGE_BIT_RW, &ptep->pte); +pte_update (mm, addr, ptep); +} + +/* +* Macro to mark a page protection value as "uncacheable". +*/ +#define pgprot_noncached (prot) (__pgprot(pgprot_val(prot) | _PAGE_PCD | _PAGE_PWT)) + +static inline int pmd_large (pmd_t pte) +{ +return (pmd_val (pte) & __LARGE_PTE) == __LARGE_PTE; +} +/* Change flags of a PTE */ -static inline pte_t pte_modify (pte_t pte,pgprot_t newprot) +static inline pte_t pte_modify (pte_t pte_old,pgprot_t newprot) { -pte_val (pte) &= _PAGE_CHG_MASK; -pte_val (pte) |=pgprot_val (newprot); -pte_val (pte) &= __supported_pte_mask; -return pte; +unsigned long pte =pte_val (pte_old); + pte &= _PAGE_CHG_MASK; + pte |=pgprot_val (newprot); + pte &= __supported_pte_mask; +return __pte (pte); }#define pte_index (address) \
@@ -387,6 +450,7 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)int __changed = !pte_same (*(__ptep), __entry); \if (__changed && __dirty) { \set_pte (__ptep, __entry); \ +pte_update_defer ((__vma)->vm_mm, (__address), (__ptep)); \flush_tlb_page (__vma, __address); \ } \ __changed; \
Signature · 1 line
1.4.4.2
PATCH 14/24 export math_state_restore
In reply to Glauber de Oliveira CostaExport math_state_restore symbol, so it can be used for hypervisors. They are commonly loaded as modules (lguest being an example).
--- arch/x86/kernel/traps_64.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
arch/x86/kernel/traps_64.c +1 -0
@@ -1069,6 +1069,7 @@ asmlinkage void math_state_restore(void)task_thread_info (me)->status |=TS_USEDFPU ; me->fpu_counter++; } +EXPORT_SYMBOL_GPL (math_state_restore);void __init trap_init (void ) {
Signature · 1 line
1.4.4.2
PATCH 13/24 report ring kernel is running without paravirt
In reply to Glauber de Oliveira CostaWhen paravirtualization is disabled, the kernel is always running at ring 0. So report it in the appropriate macro
--- include/asm-x86/segment_64.h | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-)
include/asm-x86/segment_64.h +4 -0
@@ -50,4 +50,8 @@#define GDT_SIZE (GDT_ENTRIES * 8)#define TLS_SIZE (GDT_ENTRY_TLS_ENTRIES * 8) +#ifndef CONFIG_PARAVIRT +#define get_kernel_rpl () 0 +#endif +#endif
Signature · 1 line
1.4.4.2
PATCH 12/24 provide native irq initialization function
In reply to Glauber de Oliveira CostaThe interrupt initialization routine becomes native_init_IRQ and will be overriden later in case paravirt is on. The interrupt array is made visible for guests such lguest, that will need to have their own initialization mechanism (though using most of the same irq lines) later on.
--- arch/x86/kernel/i8259_64.c | 7 +++++-- include/asm-x86/irq_64.h | 3 +++ 2 files changed, 8 insertions(+), 2 deletions(-)
arch/x86/kernel/i8259_64.c +5 -2
@@ -77,7 +77,7 @@ BUILD_16_IRQS(0xc) BUILD_16_IRQS(0xd) BUILD_16_IRQS(0xe) BUILD_16_IRQS(0xf)IRQ (x,c),IRQ (x,d),IRQ (x,e),IRQ (x,f) /* for the irq vectors */ -static void (*interrupt[NR_VECTORS -FIRST_EXTERNAL_VECTOR ])(void ) = { +void (*interrupt[NR_VECTORS -FIRST_EXTERNAL_VECTOR ])(void ) = {IRQLIST_16 (0x2 ),IRQLIST_16 (0x3 ),IRQLIST_16 (0x4 ),IRQLIST_16 (0x5 ),IRQLIST_16 (0x6 ),IRQLIST_16 (0x7 ),IRQLIST_16 (0x8 ),IRQLIST_16 (0x9 ),IRQLIST_16 (0xa ),IRQLIST_16 (0xb ),
@@ -456,7 +456,10 @@ void __init init_ISA_irqs (void) } } -void __init init_IRQ (void ) +/* Overridden in paravirt.c */ +void init_IRQ (void ) __attribute__((weak,alias ("native_init_IRQ" ))); + +void __init native_init_IRQ (void ) {int i;
include/asm-x86/irq_64.h +3 -0
@@ -46,6 +46,9 @@ static __inline__ int irq_canonicalize(int irq)extern void fixup_irqs (cpumask_t map);#endif +#include <linux/init.h> +void native_init_IRQ (void ); +#define __ARCH_HAS_DO_SOFTIRQ 1#endif /* _ASM_IRQ_H */
Signature · 1 line
1.4.4.2
PATCH 11/24 read/write_crX, clts and wbinvd for 64-bit paravirt
In reply to Glauber de Oliveira CostaThis patch introduces, and patch callers when needed, native versions for read/write_crX functions, clts and wbinvd.
--- arch/x86/mm/pageattr_64.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)
arch/x86/mm/pageattr_64.c +2 -1
@@ -13,6 +13,7 @@#include <asm/tlbflush.h> #include <asm/uaccess.h> #include <asm/io.h> +#include <asm/paravirt.h> pte_t *lookup_address (unsigned long address) {
@@ -84,7 +85,7 @@ static void flush_kernel_map(void *arg)much cheaper than WBINVD. */ /* clflush is still broken. Disable for now. */ if (1 || !cpu_has_clflush) { - asmvolatile ("wbinvd" :::"memory" ); +wbinvd (); }else {list_for_each_entry (pg, l, lru) {void *addr =page_address (pg);
Signature · 1 line
1.4.4.2
PATCH 10/24 paravirt hooks at entry functions.
In reply to Glauber de Oliveira CostaThose are the hooks needed for paravirt at entry_64.S In general, they follow the way of i386.
--- arch/x86/kernel/entry_64.S | 108 +++++++++++++++++++++++++++----------------- 1 files changed, 66 insertions(+), 42 deletions(-)
arch/x86/kernel/entry_64.S +66 -42
@@ -50,6 +50,7 @@ #include <asm/hw_irq.h> #include <asm/page.h> #include <asm/irqflags.h> +#include <asm/paravirt.h> .code64
@@ -57,6 +58,20 @@ #define retint_kernel retint_restore_args #endif +#ifdef CONFIG_PARAVIRT +ENTRY(native_irq_enable_syscall_ret) + movq %gs:pda_oldrsp,%rsp + swapgs + sysretq +/* + * This could well be defined as a C function, but as it is only used here, + * let it be locally defined + */ +ENTRY(native_swapgs) + swapgs + retq +#endif /* CONFIG_PARAVIRT */ + .macro TRACE_IRQS_IRETQ offset=ARGOFFSET #ifdef CONFIG_TRACE_IRQFLAGS
@@ -216,14 +231,21 @@ ENTRY(system_call) CFI_DEF_CFA rsp,PDA_STACKOFFSET CFI_REGISTER rip,rcx /*CFI_REGISTER rflags,r11*/ - swapgs + SWAPGS_UNSAFE_STACK + /* + * A hypervisor implementation might want to use a label + * after the swapgs, so that it can do the swapgs + * for the guest and jump here on syscall. + */ +ENTRY(system_call_after_swapgs) + movq %rsp,%gs:pda_oldrsp movq %gs:pda_kernelstack,%rsp /* * No need to follow this irqs off/on section - it's straight * and short: */ - sti + ENABLE_INTERRUPTS(CLBR_NONE) SAVE_ARGS 8,1 movq %rax,ORIG_RAX-ARGOFFSET(%rsp) movq %rcx,RIP-ARGOFFSET(%rsp)
@@ -246,7 +268,7 @@ ret_from_sys_call: sysret_check: LOCKDEP_SYS_EXIT GET_THREAD_INFO(%rcx) - cli + DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF movl threadinfo_flags(%rcx),%edx andl %edi,%edx
@@ -260,9 +282,7 @@ sysret_check: CFI_REGISTER rip,rcx RESTORE_ARGS 0,-ARG_SKIP,1 /*CFI_REGISTER rflags,r11*/ - movq %gs:pda_oldrsp,%rsp - swapgs - sysretq + ENABLE_INTERRUPTS_SYSCALL_RET CFI_RESTORE_STATE /* Handle reschedules */
@@ -271,7 +291,7 @@ sysret_careful: bt $TIF_NEED_RESCHED,%edx jnc sysret_signal TRACE_IRQS_ON - sti + ENABLE_INTERRUPTS(CLBR_NONE) pushq %rdi CFI_ADJUST_CFA_OFFSET 8 call schedule
@@ -282,7 +302,7 @@ sysret_careful: /* Handle a signal */ sysret_signal: TRACE_IRQS_ON - sti + ENABLE_INTERRUPTS(CLBR_NONE) testl $(_TIF_SIGPENDING|_TIF_SINGLESTEP|_TIF_MCE_NOTIFY),%edx jz 1f
@@ -295,7 +315,7 @@ sysret_signal: 1: movl $_TIF_NEED_RESCHED,%edi /* Use IRET because user could have changed frame. This works because ptregscall_common has called FIXUP_TOP_OF_STACK. */ - cli + DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF jmp int_with_check
@@ -327,7 +347,7 @@ tracesys: */ .globl int_ret_from_sys_call int_ret_from_sys_call: - cli + DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF testl $3,CS-ARGOFFSET(%rsp) je retint_restore_args
@@ -349,20 +369,20 @@ int_careful: bt $TIF_NEED_RESCHED,%edx jnc int_very_careful TRACE_IRQS_ON - sti + ENABLE_INTERRUPTS(CLBR_NONE) pushq %rdi CFI_ADJUST_CFA_OFFSET 8 call schedule popq %rdi CFI_ADJUST_CFA_OFFSET -8 - cli + DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF jmp int_with_check /* handle signals and tracing -- both require a full stack frame */ int_very_careful: TRACE_IRQS_ON - sti + ENABLE_INTERRUPTS(CLBR_NONE) SAVE_REST /* Check for syscall exit trace */ testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP),%edx
@@ -385,7 +405,7 @@ int_signal: 1: movl $_TIF_NEED_RESCHED,%edi int_restore_rest: RESTORE_REST - cli + DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF jmp int_with_check CFI_ENDPROC
@@ -506,7 +526,7 @@ END(stub_rt_sigreturn) CFI_DEF_CFA_REGISTER rbp testl $3,CS(%rdi) je 1f - swapgs + SWAPGS /* irqcount is used to check if a CPU is already on an interrupt stack or not. While this is essentially redundant with preempt_count it is a little cheaper to use a separate counter in the PDA
@@ -527,7 +547,7 @@ ENTRY(common_interrupt) interrupt do_IRQ /* 0(%rsp): oldrsp-ARGOFFSET */ ret_from_intr: - cli + DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF decl %gs:pda_irqcount leaveq
@@ -556,13 +576,13 @@ retint_swapgs: /* return to user-space */ /* * The iretq could re-enable interrupts: */ - cli + DISABLE_INTERRUPTS(CLBR_ANY) TRACE_IRQS_IRETQ - swapgs + SWAPGS jmp restore_args retint_restore_args: /* return to kernel space */ - cli + DISABLE_INTERRUPTS(CLBR_ANY) /* * The iretq could re-enable interrupts: */
@@ -570,10 +590,14 @@ retint_restore_args: /* return to kernel space */ restore_args: RESTORE_ARGS 0,8,0 iret_label: +#ifdef CONFIG_PARAVIRT + INTERRUPT_RETURN +#endif +ENTRY(native_iret) iretq .section __ex_table,"a" - .quad iret_label,bad_iret + .quad native_iret, bad_iret .previous .section .fixup,"ax" /* force a signal here? this matches i386 behaviour */
@@ -581,24 +605,24 @@ iret_label: bad_iret: movq $11,%rdi /* SIGSEGV */ TRACE_IRQS_ON - sti - jmp do_exit - .previous - + ENABLE_INTERRUPTS(CLBR_ANY | ~(CLBR_RDI)) + jmp do_exit + .previous + /* edi: workmask, edx: work */ retint_careful: CFI_RESTORE_STATE bt $TIF_NEED_RESCHED,%edx jnc retint_signal TRACE_IRQS_ON - sti + ENABLE_INTERRUPTS(CLBR_NONE) pushq %rdi CFI_ADJUST_CFA_OFFSET 8 call schedule popq %rdi CFI_ADJUST_CFA_OFFSET -8 GET_THREAD_INFO(%rcx) - cli + DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF jmp retint_check
@@ -606,14 +630,14 @@ retint_signal: testl $(_TIF_SIGPENDING|_TIF_SINGLESTEP|_TIF_MCE_NOTIFY),%edx jz retint_swapgs TRACE_IRQS_ON - sti + ENABLE_INTERRUPTS(CLBR_NONE) SAVE_REST movq $-1,ORIG_RAX(%rsp) xorl %esi,%esi # oldset movq %rsp,%rdi # &pt_regs call do_notify_resume RESTORE_REST - cli + DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF movl $_TIF_NEED_RESCHED,%edi GET_THREAD_INFO(%rcx)
@@ -731,7 +755,7 @@ END(spurious_interrupt) rdmsr testl %edx,%edx js 1f - swapgs + SWAPGS xorl %ebx,%ebx 1: .if \ist
@@ -747,7 +771,7 @@ END(spurious_interrupt) .if \ist addq $EXCEPTION_STKSZ, per_cpu__init_tss + TSS_ist + (\ist - 1) * 8(%rbp) .endif - cli + DISABLE_INTERRUPTS(CLBR_NONE) .if \irqtrace TRACE_IRQS_OFF .endif
@@ -776,10 +800,10 @@ paranoid_swapgs\trace: .if \trace TRACE_IRQS_IRETQ 0 .endif - swapgs + SWAPGS_UNSAFE_STACK paranoid_restore\trace: RESTORE_ALL 8 - iretq + INTERRUPT_RETURN paranoid_userspace\trace: GET_THREAD_INFO(%rcx) movl threadinfo_flags(%rcx),%ebx
@@ -794,11 +818,11 @@ paranoid_userspace\trace: .if \trace TRACE_IRQS_ON .endif - sti + ENABLE_INTERRUPTS(CLBR_NONE) xorl %esi,%esi /* arg2: oldset */ movq %rsp,%rdi /* arg1: &pt_regs */ call do_notify_resume - cli + DISABLE_INTERRUPTS(CLBR_NONE) .if \trace TRACE_IRQS_OFF .endif
@@ -807,9 +831,9 @@ paranoid_schedule\trace: .if \trace TRACE_IRQS_ON .endif - sti + ENABLE_INTERRUPTS(CLBR_ANY) call schedule - cli + DISABLE_INTERRUPTS(CLBR_ANY) .if \trace TRACE_IRQS_OFF .endif
@@ -862,7 +886,7 @@ KPROBE_ENTRY(error_entry) testl $3,CS(%rsp) je error_kernelspace error_swapgs: - swapgs + SWAPGS error_sti: movq %rdi,RDI(%rsp) CFI_REL_OFFSET rdi,RDI
@@ -874,7 +898,7 @@ error_sti: error_exit: movl %ebx,%eax RESTORE_REST - cli + DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF GET_THREAD_INFO(%rcx) testl %eax,%eax
@@ -911,12 +935,12 @@ ENTRY(load_gs_index) CFI_STARTPROC pushf CFI_ADJUST_CFA_OFFSET 8 - cli - swapgs + DISABLE_INTERRUPTS(CLBR_ANY | ~(CLBR_RDI)) + SWAPGS gs_change: movl %edi,%gs 2: mfence /* workaround */ - swapgs + SWAPGS popf CFI_ADJUST_CFA_OFFSET -8 ret
@@ -930,7 +954,7 @@ ENDPROC(load_gs_index) .section .fixup,"ax" /* running with kernelgs */ bad_gs: - swapgs /* switch back to user gs */ + SWAPGS /* switch back to user gs */ xorl %eax,%eax movl %eax,%gs jmp 2b
Signature · 1 line
1.4.4.2
PATCH 9/24 Wipe out traditional opt from x86_64 Makefile
In reply to Glauber de Oliveira CostaAmong other things, using -traditional as a gcc option stops us from using macro token pasting, which is a feature we heavily rely on.
There was still a use of -traditional in arch/x86/kernel/Makefile_64, which this patch removes.
I don't see any problems building kernels in my x86_64 box without -traditional.
--- arch/x86/kernel/Makefile_64 | 1 - 1 files changed, 0 insertions(+), 1 deletions(-)
arch/x86/kernel/Makefile_64 +0 -1
@@ -3,7 +3,6 @@ # extra-y := head_64.o head64.o init_task.o vmlinux.lds -EXTRA_AFLAGS := -traditional obj-y := process_64.o signal_64.o entry_64.o traps_64.o irq_64.o \ ptrace_64.o time_64.o ioport_64.o ldt.o setup_64.o i8259_64.o sys_x86_64.o \ x8664_ksyms_64.o i387_64.o syscall_64.o vsyscall_64.o \
Signature · 1 line
1.4.4.2
PATCH 8/24 consolidate system.h
In reply to Glauber de Oliveira CostaThis patch consolidates system.h header. For i386, it adds functions read/write_cr8 that ain't really needed, but will also not hurt. If they are used somewhere in i386 code, there's a bug anyway, and should be fixed.
--- include/asm-x86/system.h | 134 +++++++++++++++++++++++++++++++++++++++++++ include/asm-x86/system_32.h | 102 -------------------------------- include/asm-x86/system_64.h | 77 ------------------------- 3 files changed, 134 insertions(+), 179 deletions(-)
include/asm-x86/system.h +134 -0
@@ -1,5 +1,139 @@ +#ifndef _X86_SYSTEM_H_ +#define _X86_SYSTEM_H_ + +#include <linux/kernel.h> + +static inline void native_clts (void ) +{ + asmvolatile ("clts" ); +} + +/* +* Volatile isn't enough to prevent the compiler from reordering the +* read/write functions for the control registers and messing everything up. +* A memory clobber would solve the problem, but would prevent reordering of +* all loads stores around it, which can hurt performance. Solution is to +* use a variable and mimic reads and writes to it to enforce serialization +*/ +static unsigned long __force_order; + +static inline unsigned long native_read_cr0 (void ) +{ +unsigned long val; + asmvolatile ("mov %%cr0,%0\n\t" :"=r" (val),"=m" (__force_order)); +return val; +} + +static inline void native_write_cr0 (unsigned long val) +{ + asmvolatile ("mov %0,%%cr0" : :"r" (val),"m" (__force_order)); +} + +static inline unsigned long native_read_cr2 (void ) +{ +unsigned long val; + asmvolatile ("mov %%cr2,%0\n\t" :"=r" (val),"=m" (__force_order)); +return val; +} + +static inline void native_write_cr2 (unsigned long val) +{ + asmvolatile ("mov %0,%%cr2" : :"r" (val),"m" (__force_order)); +} + +static inline unsigned long native_read_cr3 (void ) +{ +unsigned long val; + asmvolatile ("mov %%cr3,%0\n\t" :"=r" (val),"=m" (__force_order)); +return val; +} + +static inline void native_write_cr3 (unsigned long val) +{ + asmvolatile ("mov %0,%%cr3" : :"r" (val),"m" (__force_order)); +} + +static inline unsigned long native_read_cr4 (void ) +{ +unsigned long val; + asmvolatile ("mov %%cr4,%0\n\t" :"=r" (val),"=m" (__force_order)); +return val; +} + +static inline unsigned long native_read_cr4_safe (void ) +{ +unsigned long val; +/* This could fault if %cr4 does not exist. In x86_64, a cr4 always +* exists, so it will never fail. */ +#ifdef CONFIG_X86_32 + asmvolatile ("1: mov %%cr4, %0 \n" +"2: \n" +".section __ex_table,\"a\" \n" +".long 1b,2b \n" +".previous \n" + :"=r" (val),"=m" (__force_order) :"0" (0 )); +#else + val =native_read_cr4 (); +#endif +return val; +} + +static inline void native_write_cr4 (unsigned long val) +{ + asmvolatile ("mov %0,%%cr4" : :"r" (val),"m" (__force_order)); +} + +static inline unsigned long native_read_cr8 (void ) +{ +unsigned long cr8; + asmvolatile ("mov %%cr8,%0" :"=r" (cr8),"=m" (__force_order)); +return cr8; +} + +static inline void native_write_cr8 (unsigned long val) +{ + asmvolatile ("mov %0,%%cr8" : :"r" (val)); +} + +static inline void native_wbinvd (void ) +{ + asmvolatile ("wbinvd" : : :"memory" ); +} + +static inline void clflush (volatile void *__p) +{ + asmvolatile ("clflush %0" :"+m" (*(char __force *)__p)); +} + +#ifdef CONFIG_PARAVIRT +#include <asm/paravirt.h> +#else +#define read_cr0 () (native_read_cr0()) +#define write_cr0 (x) (native_write_cr0(x)) +#define read_cr2 () (native_read_cr2()) +#define write_cr2 (x) (native_write_cr2(x)) +#define read_cr3 () (native_read_cr3()) +#define write_cr3 (x) (native_write_cr3(x)) +#define read_cr4 () (native_read_cr4()) +#define read_cr4_safe () (native_read_cr4_safe()) +#define write_cr4 (x) (native_write_cr4(x)) +#define read_cr8 () (native_read_cr8()) +#define write_cr8 (x) (native_write_cr8(x)) +#define wbinvd () (native_wbinvd()) + +/* Clear the 'TS' bit */ +#define clts () (native_clts()) + +#endif /* CONFIG_PARAVIRT */ + +#define stts () write_cr0(8 | read_cr0()) + +#define nop () __asm__ __volatile__ ("nop") +#ifdef CONFIG_X86_32 # include "system_32.h" #else # include "system_64.h" #endif + +#endif
include/asm-x86/system_32.h +0 -102
120 lines not on this page · raw message
include/asm-x86/system_64.h +0 -77
92 lines not on this page · raw message
Signature · 1 line
1.4.4.2
Re: [PATCH 7/24] consolidate msr.h
In reply to Glauber de Oliveira Costaarch/x86/ia32/syscall32.c void syscall32_cpu_init(void) · line 85
Quoted 2 lines · Glauber de Oliveira Costa
arch/x86/ia32/syscall32.c +1
-1-wrmsrl (MSR_CSTAR , ia32_cstar_target); +wrmsrl (MSR_CSTAR , (u64 )ia32_cstar_target);
Hmm, why do you add explicit casts? The compiler should convert that correctly on its own.
Quoted 1 line
+static inline void
wrmsrl(unsigned int msr, unsigned long long val)
Hmm, long long is 64 bit on all x86, but why not use explicit u64 to show that?
Bastian
Signature · 6 lines
Captain's Log, star date 21:34.5... ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
Re: [PATCH 7/24] consolidate msr.h
Quoted 11 lines · Bastian Blank
arch/x86/ia32/syscall32.c void syscall32_cpu_init(void) · line 85
Quoted 2 lines · Glauber de Oliveira Costa
arch/x86/ia32/syscall32.c +1
-1-wrmsrl (MSR_CSTAR , ia32_cstar_target); +wrmsrl (MSR_CSTAR , (u64 )ia32_cstar_target);Hmm, why do you add explicit casts? The compiler should convert that correctly on its own.
Quoted 1 line
+static inline void
wrmsrl(unsigned int msr, unsigned long long val)Hmm, long long is 64 bit on all x86, but why not use explicit u64 to show that?
(quick reply)
With PVOPS on it gives compiler warnings without that explict cast. Without looking at the code, IIRC with non-PVOPS it is a macro directly into asm, so it didn't matter what the cast was. But with PVOPS as a function, it gave compiler warnings.
Take it out and try compiling it for both i386 and x86_64. One of them gave warnings. But maybe it's not a problem now.
-- Steve
Re: [PATCH 7/24] consolidate msr.h
Quoted 14 lines · Steven Rostedt
Quoted 11 lines · Glauber de Oliveira Costa
arch/x86/ia32/syscall32.c void syscall32_cpu_init(void) · line 85
Quoted 2 lines
arch/x86/ia32/syscall32.c +1
-1-wrmsrl (MSR_CSTAR , ia32_cstar_target); +wrmsrl (MSR_CSTAR , (u64 )ia32_cstar_target);Hmm, why do you add explicit casts? The compiler should convert that correctly on its own.
Quoted 1 line
+static inline void
wrmsrl(unsigned int msr, unsigned long long val)Hmm, long long is 64 bit on all x86, but why not use explicit u64 to show that?
(quick reply)
Quoted 7 lines
With PVOPS on it gives compiler warnings without that explict cast. Without looking at the code, IIRC with non-PVOPS it is a macro directly into asm, so it didn't matter what the cast was. But with PVOPS as a function, it gave compiler warnings.
Take it out and try compiling it for both i386 and
x86_64. One of them gave warnings. But maybe it's not a problem now.
i dont think there's ever any true need (and good cause) to force integer type casts like that at the callee site.
Ingo
Re: [PATCH 7/24] consolidate msr.h
Quoted 7 lines · Ingo Molnar
Quoted 5 lines · Steven Rostedt
With PVOPS on it gives compiler warnings without that explict cast. Without looking at the code, IIRC with non-PVOPS it is a macro directly into asm, so it didn't matter what the cast was. But with PVOPS as a function, it gave compiler warnings.
Quoted 5 lines
Quoted 2 lines
Take it out and try compiling it for both i386 and
x86_64. One of them gave warnings. But maybe it's not a problem now.i dont think there's ever any true need (and good cause) to force integer type casts like that at the callee site.
I guess the problem is that we converted a macro to a function, where the macro did no type checking. Now we need to pick between integers and pointers. Some places uses intergers in wrmsrl and some use pointers. So changing this to a typechecking protocol is not going to be nice.
Looking at the current code now, we have this:
====
checking_wrmsrl(MSR_IA32_SYSENTER_CS, (u64)__KERNEL_CS); checking_wrmsrl(MSR_IA32_SYSENTER_ESP, 0ULL); checking_wrmsrl(MSR_IA32_SYSENTER_EIP, (u64)ia32_sysenter_target); wrmsrl(MSR_CSTAR, ia32_cstar_target);
====
A typecast is already used in that same area.
-- Steve
Re: [PATCH 7/24] consolidate msr.h
In reply to Ingo MolnarQuoted 7 lines · Ingo Molnar
Quoted 5 lines · Steven Rostedt
With PVOPS on it gives compiler warnings without that explict cast. Without looking at the code, IIRC with non-PVOPS it is a macro directly into asm, so it didn't matter what the cast was. But with PVOPS as a function, it gave compiler warnings.
Quoted 5 lines
Quoted 2 lines
Take it out and try compiling it for both i386 and
x86_64. One of them gave warnings. But maybe it's not a problem now.i dont think there's ever any true need (and good cause) to force integer type casts like that at the callee site.
I guess the problem is that we converted a macro to a function, where the macro did no type checking. Now we need to pick between integers and pointers. Some places uses intergers in wrmsrl and some use pointers. So changing this to a typechecking protocol is not going to be nice.
Looking at the current code now, we have this:
====
checking_wrmsrl(MSR_IA32_SYSENTER_CS, (u64)__KERNEL_CS); checking_wrmsrl(MSR_IA32_SYSENTER_ESP, 0ULL); checking_wrmsrl(MSR_IA32_SYSENTER_EIP, (u64)ia32_sysenter_target); wrmsrl(MSR_CSTAR, ia32_cstar_target);
====
A typecast is already used in that same area.
-- Steve
Re: [PATCH 7/24] consolidate msr.h
In reply to Ingo MolnarQuoted 3 lines · Ingo Molnar
i dont think there's ever any true need (and good cause) to force integer type casts like that at the callee site.
Unless you mean we should do something like this:
static inline void __wrmsrl(unsigned int msr, unsigned long long val); #define wrmsr(msr, val) __wrmsrl(msr, (unsigned long long)var)
-- Steve
Re: [PATCH 7/24] consolidate msr.h
Quoted 8 lines · On Tuesday 20 November 2007 17:16:45 Steven Rostedt wrote:
Quoted 2 lines · Ingo Molnar
i dont think there's ever any true need (and good cause) to force integer type casts like that at the callee site.
Unless you mean we should do something like this:
static inline void
__wrmsrl(unsigned int msr, unsigned long long val); #definewrmsr(msr, val)__wrmsrl(msr, (unsigned long long)var)
Heh:
union ptr_or_val {
void *ptr;
unsigned long long val;
};static inline void __wrmsrl(unsigned int msr, union ptr_or_val pv); #define wrmsr(msr, v) __wrmsrl(msr, (union ptr_or_val)v)
Ok, maybe not...
Rusty.
Re: [PATCH 7/24] consolidate msr.h
In reply to Steven RostedtQuoted 8 lines · On Tuesday 20 November 2007 17:16:45 Steven Rostedt wrote:
Quoted 2 lines · Ingo Molnar
i dont think there's ever any true need (and good cause) to force integer type casts like that at the callee site.
Unless you mean we should do something like this:
static inline void
__wrmsrl(unsigned int msr, unsigned long long val); #definewrmsr(msr, val)__wrmsrl(msr, (unsigned long long)var)
Heh:
union ptr_or_val {
void *ptr;
unsigned long long val;
};static inline void __wrmsrl(unsigned int msr, union ptr_or_val pv); #define wrmsr(msr, v) __wrmsrl(msr, (union ptr_or_val)v)
Ok, maybe not...
Rusty.
Re: [PATCH 7/24] consolidate msr.h
In reply to Ingo MolnarQuoted 3 lines · Ingo Molnar
i dont think there's ever any true need (and good cause) to force integer type casts like that at the callee site.
Unless you mean we should do something like this:
static inline void __wrmsrl(unsigned int msr, unsigned long long val); #define wrmsr(msr, val) __wrmsrl(msr, (unsigned long long)var)
-- Steve
Re: [PATCH 7/24] consolidate msr.h
In reply to Steven RostedtQuoted 14 lines · Steven Rostedt
Quoted 11 lines · Glauber de Oliveira Costa
arch/x86/ia32/syscall32.c void syscall32_cpu_init(void) · line 85
Quoted 2 lines
arch/x86/ia32/syscall32.c +1
-1-wrmsrl (MSR_CSTAR , ia32_cstar_target); +wrmsrl (MSR_CSTAR , (u64 )ia32_cstar_target);Hmm, why do you add explicit casts? The compiler should convert that correctly on its own.
Quoted 1 line
+static inline void
wrmsrl(unsigned int msr, unsigned long long val)Hmm, long long is 64 bit on all x86, but why not use explicit u64 to show that?
(quick reply)
Quoted 7 lines
With PVOPS on it gives compiler warnings without that explict cast. Without looking at the code, IIRC with non-PVOPS it is a macro directly into asm, so it didn't matter what the cast was. But with PVOPS as a function, it gave compiler warnings.
Take it out and try compiling it for both i386 and
x86_64. One of them gave warnings. But maybe it's not a problem now.
i dont think there's ever any true need (and good cause) to force integer type casts like that at the callee site.
Ingo
Re: [PATCH 7/24] consolidate msr.h
In reply to Bastian BlankQuoted 11 lines · Bastian Blank
arch/x86/ia32/syscall32.c void syscall32_cpu_init(void) · line 85
Quoted 2 lines · Glauber de Oliveira Costa
arch/x86/ia32/syscall32.c +1
-1-wrmsrl (MSR_CSTAR , ia32_cstar_target); +wrmsrl (MSR_CSTAR , (u64 )ia32_cstar_target);Hmm, why do you add explicit casts? The compiler should convert that correctly on its own.
Quoted 1 line
+static inline void
wrmsrl(unsigned int msr, unsigned long long val)Hmm, long long is 64 bit on all x86, but why not use explicit u64 to show that?
(quick reply)
With PVOPS on it gives compiler warnings without that explict cast. Without looking at the code, IIRC with non-PVOPS it is a macro directly into asm, so it didn't matter what the cast was. But with PVOPS as a function, it gave compiler warnings.
Take it out and try compiling it for both i386 and x86_64. One of them gave warnings. But maybe it's not a problem now.
-- Steve
Re: [PATCH 7/24] consolidate msr.h
In reply to Glauber de Oliveira Costaarch/x86/ia32/syscall32.c void syscall32_cpu_init(void) · line 85
Quoted 2 lines · Glauber de Oliveira Costa
arch/x86/ia32/syscall32.c +1
-1-wrmsrl (MSR_CSTAR , ia32_cstar_target); +wrmsrl (MSR_CSTAR , (u64 )ia32_cstar_target);
Hmm, why do you add explicit casts? The compiler should convert that correctly on its own.
Quoted 1 line
+static inline void
wrmsrl(unsigned int msr, unsigned long long val)
Hmm, long long is 64 bit on all x86, but why not use explicit u64 to show that?
Bastian
Signature · 1 line
Captain's Log, star date 21:34.5...
PATCH 7/24 consolidate msr.h
In reply to Glauber de Oliveira CostaThis patch goes one step forward in consolidating the msr.h header. It shares code between i386 and x86_64, instead of duplicating the code for tsc reading, msr reading/writing, etc.
--- arch/x86/ia32/syscall32.c | 2 +- arch/x86/kernel/setup64.c | 6 +- arch/x86/kernel/tsc_64.c | 17 +++- arch/x86/kernel/vsyscall_64.c | 4 +- arch/x86/vdso/vgetcpu.c | 4 +- include/asm-x86/alternative_32.h | 17 +++- include/asm-x86/alternative_64.h | 27 ++++- include/asm-x86/msr.h | 225 ++++++++++---------------------------- include/asm-x86/tsc.h | 33 +++++- 9 files changed, 151 insertions(+), 184 deletions(-)
arch/x86/ia32/syscall32.c +1 -1
@@ -82,5 +82,5 @@ void syscall32_cpu_init(void)checking_wrmsrl (MSR_IA32_SYSENTER_ESP ,0ULL );checking_wrmsrl (MSR_IA32_SYSENTER_EIP , (u64 )ia32_sysenter_target); -wrmsrl (MSR_CSTAR , ia32_cstar_target); +wrmsrl (MSR_CSTAR , (u64 )ia32_cstar_target); }
arch/x86/kernel/setup64.c +3 -3
@@ -122,7 +122,7 @@ void pda_init(int cpu) asmvolatile ("movl %0,%%fs ; movl %0,%%gs" ::"r" (0 ));/* Memory clobbers used to order PDA accessed */ mb (); -wrmsrl (MSR_GS_BASE , pda); +wrmsrl (MSR_GS_BASE , (u64 )pda);mb (); pda->cpunumber = cpu;
@@ -161,8 +161,8 @@ void syscall_init(void)* but only a 32bit target. LSTAR sets the 64bit rip. */ wrmsrl (MSR_STAR , ((u64 )__USER32_CS)<<48 | ((u64 )__KERNEL_CS)<<32 ); -wrmsrl (MSR_LSTAR , system_call); -wrmsrl (MSR_CSTAR , ignore_sysret); +wrmsrl (MSR_LSTAR , (u64 )system_call); +wrmsrl (MSR_CSTAR , (u64 )ignore_sysret);#ifdef CONFIG_IA32_EMULATION syscall32_cpu_init ();
arch/x86/kernel/tsc_64.c +15 -2
@@ -30,7 +30,7 @@ static unsigned long long cycles_2_ns(unsigned long long cyc)return (cyc * cyc2ns_scale) >>NS_SCALE ; } -unsigned long long sched_clock (void ) +unsigned long long native_sched_clock (void ) {unsigned long a =0 ;
@@ -44,6 +44,19 @@ unsigned long long sched_clock(void)return cycles_2_ns (a); } +/* We need to define a real function for sched_clock, to override the +weak default version */ +#ifdef CONFIG_PARAVIRT +unsigned long long sched_clock (void ) +{ +return paravirt_sched_clock (); +} +#else +unsigned long long +sched_clock (void ) __attribute__((alias ("native_sched_clock" ))); +#endif + +static int tsc_unstable;inline int check_tsc_unstable (void )
@@ -256,7 +269,7 @@ static cycle_t read_tsc(void) static cycle_t __vsyscall_fn vread_tsc(void) { -cycle_t ret = (cycle_t )get_cycles_sync (); +cycle_t ret = (cycle_t )vget_cycles_sync ();return ret; }
arch/x86/kernel/vsyscall_64.c +2 -2
@@ -190,7 +190,7 @@ time_t __vsyscall(1) vtime(time_t *t) long __vsyscall(2) vgetcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *tcache) { -unsigned int dummy, p; +unsigned int p;unsigned long j =0 ;/* Fast cache - only recompute value once per jiffies and avoid
@@ -205,7 +205,7 @@ vgetcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *tcache) p = tcache->blob[1 ]; }else if (__vgetcpu_mode ==VGETCPU_RDTSCP ) {/* Load per CPU data from RDTSCP */ -rdtscp (dummy, dummy, p); +native_read_tscp (&p); }else {/* Load per CPU data from GDT */ asm("lsl %1,%0" :"=r" (p) :"r" (__PER_CPU_SEG));
arch/x86/vdso/vgetcpu.c +2 -2
@@ -15,7 +15,7 @@long __vdso_getcpu (unsigned *cpu,unsigned *node,struct getcpu_cache *tcache) { -unsigned int dummy, p; +unsigned int p;unsigned long j =0 ;/* Fast cache - only recompute value once per jiffies and avoid
@@ -30,7 +30,7 @@ long __vdso_getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *tcache) p = tcache->blob[1 ]; }else if (*vdso_vgetcpu_mode ==VGETCPU_RDTSCP ) {/* Load per CPU data from RDTSCP */ -rdtscp (dummy, dummy, p); +native_read_tscp (&p); }else {/* Load per CPU data from GDT */ asm("lsl %1,%0" :"=r" (p) :"r" (__PER_CPU_SEG));
include/asm-x86/alternative_32.h +16 -1
@@ -101,7 +101,22 @@ static inline void alternatives_smp_switch(int smp) {}* use this macro(s) if you need more than one output parameter * in alternative_io */ -#define ASM_OUTPUT2 (a, b) a, b +#define ASM_OUTPUT2(a, b...) a, b + +#define fixup_section(code, fixup, output, input...) \ + asm volatile("2: " code "\n" \ + "1:\n\t" \ + ".section .fixup,\"ax\"\n\t" \ + "3: " fixup "\n\t" \ + "jmp 1b\n\t" \ + ".previous\n\t" \ + ".section __ex_table,\"a\"\n" \ + " .align 4\n\t" \ + " .long 2b,3b\n\t" \ + ".previous" \ + : output \ + : input) +/* * Alternative inline assembly for SMP.
include/asm-x86/alternative_64.h +21 -6
@@ -141,14 +141,29 @@ static inline void alternatives_smp_switch(int smp) {}* use this macro(s) if you need more than one output parameter * in alternative_io */ -#define ASM_OUTPUT2 (a, b) a, b - -struct paravirt_patch ; +#define ASM_OUTPUT2(a, b...) a, b + +#define fixup_section(code, fixup, output, input...) \ + asm volatile("2: " code "\n" \ + "1:\n\t" \ + ".section .fixup,\"ax\"\n\t" \ + "3: " fixup "\n\t" \ + " jmp 1b\n\t" \ + ".previous\n\t" \ + ".section __ex_table,\"a\"\n" \ + " .align 8\n\t" \ + " .quad 2b,3b\n\t" \ + ".previous" \ + : output \ + : input) + +struct paravirt_patch_site ;#ifdef CONFIG_PARAVIRT -void apply_paravirt (struct paravirt_patch *start,struct paravirt_patch *end); +void apply_paravirt (struct paravirt_patch_site *start, +struct paravirt_patch_site *end);#else -static inline void -apply_paravirt (struct paravirt_patch *start,struct paravirt_patch *end) +static inline void apply_paravirt (struct paravirt_patch_site *start, +struct paravirt_patch_site *end) {}#define __parainstructions NULL#define __parainstructions_end NULL
include/asm-x86/msr.h +60 -165
297 lines not on this page · raw message
include/asm-x86/tsc.h +31 -2
@@ -33,7 +33,7 @@ static inline cycles_t get_cycles(void) }/* Like get_cycles, but make sure the CPU is synchronized. */ -static __always_inline cycles_t get_cycles_sync(void) +static __always_inline cycles_t __get_cycles_sync(void) {unsigned long long ret;unsigned eax, edx;
@@ -55,11 +55,40 @@ static __always_inline cycles_t get_cycles_sync(void)*/ alternative_io ("cpuid" ,ASM_NOP2 ,X86_FEATURE_SYNC_RDTSC , "=a" (eax), "0" (1) : "ebx","ecx","edx","memory"); -rdtscll (ret); +return 0 ; +} + +static __always_inline cycles_t get_cycles_sync(void) +{ +unsigned long long ret; + ret =__get_cycles_sync (); +if (!ret) +rdtscll (ret);return ret; } +#ifdef CONFIG_PARAVIRT +/* +* For paravirt guests, some functionalities are executed through function +* pointers in the various pvops structures. +* These function pointers exist inside the kernel and can not +* be accessed by user space. To avoid this, we make a copy of the +* get_cycles_sync (called in kernel) but force the use of native_read_tsc. +* Ideally, the guest should set up it's own clock and vread +*/ +static __always_inline long long vget_cycles_sync (void ) +{ +unsigned long long ret; + ret =__get_cycles_sync (); +if (!ret) + ret =native_read_tsc (); +return ret; +} +#else +# define vget_cycles_sync () get_cycles_sync() +#endif +extern void tsc_init (void );extern void mark_tsc_unstable (char *reason);extern int unsynchronized_tsc (void );
Signature · 1 line
1.4.4.2
Re: [PATCH 5/24] smp x86 consolidation
In reply to Glauber de Oliveira CostaQuoted 7 lines · Glauber de Oliveira Costa
This patch consolidates part of the pieces of smp for both architectures. (i386 and
x86_64). It makes part the calls go throughsmp_ops, and shares code for those functions insmpcommon.cThere's more room for code sharing here, but it is left as an exercise to the reader ;-)
I'm getting link errors in 32-bit:
arch/x86/kernel/built-in.o: In function `native_smp_send_reschedule':/home/jeremy/hg/xen/paravirt/linux/arch/x86/kernel/smpcommon.c:262: undefined reference to genapic' arch/x86/kernel/built-in.o: In function native_smp_call_function_mask':/home/jeremy/hg/xen/paravirt/linux/arch/x86/kernel/smpcommon.c:113: undefined reference to `genapic'
J
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
Re: [PATCH 5/24] smp x86 consolidation
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Jeremy Fitzhardinge escreveu:
Quoted 9 lines
Quoted 7 lines · Glauber de Oliveira Costa
This patch consolidates part of the pieces of smp for both architectures. (i386 and
x86_64). It makes part the calls go throughsmp_ops, and shares code for those functions insmpcommon.cThere's more room for code sharing here, but it is left as an exercise to the reader ;-)
Quoted 7 lines
I'm getting link errors in 32-bit:
arch/x86/kernel/built-in.o: In function `native_smp_send_reschedule':/home/jeremy/hg/xen/paravirt/linux/arch/x86/kernel/smpcommon.c:262: undefined reference togenapic' arch/x86/kernel/built-in.o: In functionnative_smp_call_function_mask':/home/jeremy/hg/xen/paravirt/linux/arch/x86/kernel/smpcommon.c:113: undefined reference to `genapic'
Ok, it compiled just fine here. I bet it's due to one of that i386 lots of variants.
Which subarchitecture are you compiling for, jeremy ?
Quoted 1 line
J
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: Using GnuPG with Remi - http://enigmail.mozdev.org
iD8DBQFHNQmKjYI8LaFUWXMRAlrLAKCHOb28oE/veBkbVeJZDCbjE8OADwCg81ye nsBfBe2iLOFHF6dxT4mRauc=
=xjo4
-----END PGP SIGNATURE-----
Re: [PATCH 5/24] smp x86 consolidation
Quoted 10 lines · Glauber de Oliveira Costa
Quoted 2 lines
arch/x86/kernel/built-in.o: In function `native_smp_send_reschedule':/home/jeremy/hg/xen/paravirt/linux/arch/x86/kernel/smpcommon.c:262:undefined reference to `genapic'
Quoted 2 lines
arch/x86/kernel/built-in.o: In function `native_smp_call_function_mask':/home/jeremy/hg/xen/paravirt/linux/arch/x86/kernel/smpcommon.c:113:undefined reference to `genapic'
Ok, it compiled just fine here. I bet it's due to one of that i386 lots of variants.
Which subarchitecture are you compiling for, jeremy ?
Default (CONFIG_X86_PC). Config attached.
J
#
# Automatically generated make config: don't edit # Linux kernel version: 2.6.24-rc2
# Fri Nov 9 15:19:56 2007
#CONFIG_X86_32=yCONFIG_GENERIC_TIME=yCONFIG_GENERIC_CMOS_UPDATE=y CONFIG_CLOCKSOURCE_WATCHDOG=y CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y CONFIG_LOCKDEP_SUPPORT=y CONFIG_STACKTRACE_SUPPORT=y CONFIG_SEMAPHORE_SLEEPERS=yCONFIG_X86=yCONFIG_MMU=yCONFIG_ZONE_DMA=yCONFIG_QUICKLIST=yCONFIG_GENERIC_ISA_DMA=yCONFIG_GENERIC_IOMAP=yCONFIG_GENERIC_BUG=yCONFIG_GENERIC_HWEIGHT=y CONFIG_ARCH_MAY_HAVE_PC_FDC=yCONFIG_DMI=y CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
# General setup
#CONFIG_EXPERIMENTAL=yCONFIG_LOCK_KERNEL=yCONFIG_INIT_ENV_ARG_LIMIT=32CONFIG_LOCALVERSION=""
# CONFIG_LOCALVERSION_AUTO is not setCONFIG_SWAP=yCONFIG_SYSVIPC=yCONFIG_SYSVIPC_SYSCTL=yCONFIG_POSIX_MQUEUE=yCONFIG_BSD_PROCESS_ACCT=y
# CONFIG_BSD_PROCESS_ACCT_V3 is not setCONFIG_TASKSTATS=yCONFIG_TASK_DELAY_ACCT=y
# CONFIG_TASK_XACCT is not set
# CONFIG_USER_NS is not set
# CONFIG_AUDIT is not set
# CONFIG_IKCONFIG is not setCONFIG_LOG_BUF_SHIFT=17
# CONFIG_CGROUPS is not setCONFIG_FAIR_GROUP_SCHED=yCONFIG_FAIR_USER_SCHED=y
# CONFIG_FAIR_CGROUP_SCHED is not setCONFIG_SYSFS_DEPRECATED=yCONFIG_RELAY=yCONFIG_BLK_DEV_INITRD=yCONFIG_INITRAMFS_SOURCE=""CONFIG_CC_OPTIMIZE_FOR_SIZE=yCONFIG_SYSCTL=y
# CONFIG_EMBEDDED is not setCONFIG_UID16=yCONFIG_SYSCTL_SYSCALL=yCONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not setCONFIG_KALLSYMS_EXTRA_PASS=yCONFIG_HOTPLUG=yCONFIG_PRINTK=yCONFIG_BUG=yCONFIG_ELF_CORE=yCONFIG_BASE_FULL=yCONFIG_FUTEX=yCONFIG_ANON_INODES=yCONFIG_EPOLL=yCONFIG_SIGNALFD=yCONFIG_EVENTFD=yCONFIG_SHMEM=yCONFIG_VM_EVENT_COUNTERS=yCONFIG_SLUB_DEBUG=y
# CONFIG_SLAB is not setCONFIG_SLUB=y
# CONFIG_SLOB is not setCONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not setCONFIG_BASE_SMALL=0CONFIG_MODULES=yCONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_FORCE_UNLOAD is not setCONFIG_MODVERSIONS=yCONFIG_MODULE_SRCVERSION_ALL=yCONFIG_KMOD=yCONFIG_STOP_MACHINE=yCONFIG_BLOCK=y
# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
# CONFIG_LSF is not setCONFIG_BLK_DEV_BSG=y
#
# IO Schedulers
#CONFIG_IOSCHED_NOOP=yCONFIG_IOSCHED_AS=yCONFIG_IOSCHED_DEADLINE=yCONFIG_IOSCHED_CFQ=y
# CONFIG_DEFAULT_AS is not set
# CONFIG_DEFAULT_DEADLINE is not setCONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not setCONFIG_DEFAULT_IOSCHED="cfq"CONFIG_PREEMPT_NOTIFIERS=y
#
# Processor type and features
#CONFIG_TICK_ONESHOT=yCONFIG_NO_HZ=yCONFIG_HIGH_RES_TIMERS=yCONFIG_GENERIC_CLOCKEVENTS_BUILD=yCONFIG_SMP=yCONFIG_X86_PC=y
# CONFIG_X86_ELAN is not set
# CONFIG_X86_VOYAGER is not set
# CONFIG_X86_NUMAQ is not set
# CONFIG_X86_SUMMIT is not set
# CONFIG_X86_BIGSMP is not set
# CONFIG_X86_VISWS is not set
# CONFIG_X86_GENERICARCH is not set
# CONFIG_X86_ES7000 is not setCONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=yCONFIG_PARAVIRT=yCONFIG_PARAVIRT_GUEST=yCONFIG_XEN=yCONFIG_VMI=y
# CONFIG_M386 is not set
# CONFIG_M486 is not set
# CONFIG_M586 is not set
# CONFIG_M586TSC is not set
# CONFIG_M586MMX is not set
# CONFIG_M686 is not set
# CONFIG_MPENTIUMII is not set
# CONFIG_MPENTIUMIII is not setCONFIG_MPENTIUMM=y
# CONFIG_MCORE2 is not set
# CONFIG_MPENTIUM4 is not set
# CONFIG_MK6 is not set
# CONFIG_MK7 is not set
# CONFIG_MK8 is not set
# CONFIG_MCRUSOE is not set
# CONFIG_MEFFICEON is not set
# CONFIG_MWINCHIPC6 is not set
# CONFIG_MWINCHIP2 is not set
# CONFIG_MWINCHIP3D is not set
# CONFIG_MGEODEGX1 is not set
# CONFIG_MGEODE_LX is not set
# CONFIG_MCYRIXIII is not set
# CONFIG_MVIAC3_2 is not set
# CONFIG_MVIAC7 is not set
# CONFIG_X86_GENERIC is not setCONFIG_X86_CMPXCHG=yCONFIG_X86_L1_CACHE_SHIFT=6CONFIG_X86_XADD=yCONFIG_RWSEM_XCHGADD_ALGORITHM=y
# CONFIG_ARCH_HAS_ILOG2_U32 is not set
# CONFIG_ARCH_HAS_ILOG2_U64 is not setCONFIG_GENERIC_CALIBRATE_DELAY=yCONFIG_X86_WP_WORKS_OK=yCONFIG_X86_INVLPG=yCONFIG_X86_BSWAP=yCONFIG_X86_POPAD_OK=yCONFIG_X86_GOOD_APIC=yCONFIG_X86_INTEL_USERCOPY=yCONFIG_X86_USE_PPRO_CHECKSUM=yCONFIG_X86_TSC=yCONFIG_X86_CMOV=yCONFIG_X86_MINIMUM_CPU_FAMILY=4CONFIG_HPET_TIMER=yCONFIG_NR_CPUS=4
# CONFIG_SCHED_SMT is not setCONFIG_SCHED_MC=y
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not setCONFIG_PREEMPT=yCONFIG_PREEMPT_BKL=yCONFIG_X86_LOCAL_APIC=yCONFIG_X86_IO_APIC=yCONFIG_X86_MCE=yCONFIG_X86_MCE_NONFATAL=yCONFIG_X86_MCE_P4THERMAL=yCONFIG_VM86=y
# CONFIG_TOSHIBA is not set
# CONFIG_I8K is not set
# CONFIG_X86_REBOOTFIXUPS is not setCONFIG_MICROCODE=mCONFIG_MICROCODE_OLD_INTERFACE=yCONFIG_X86_MSR=mCONFIG_X86_CPUID=m
#
# Firmware Drivers
#CONFIG_EDD=m
# CONFIG_DELL_RBU is not set
# CONFIG_DCDBAS is not setCONFIG_DMIID=y
# CONFIG_NOHIGHMEM is not set
# CONFIG_HIGHMEM4G is not setCONFIG_HIGHMEM64G=yCONFIG_PAGE_OFFSET=0xC0000000CONFIG_HIGHMEM=yCONFIG_X86_PAE=yCONFIG_ARCH_FLATMEM_ENABLE=yCONFIG_ARCH_SPARSEMEM_ENABLE=yCONFIG_ARCH_SELECT_MEMORY_MODEL=yCONFIG_ARCH_POPULATES_NODE_MAP=yCONFIG_SELECT_MEMORY_MODEL=yCONFIG_FLATMEM_MANUAL=y
# CONFIG_DISCONTIGMEM_MANUAL is not set
# CONFIG_SPARSEMEM_MANUAL is not setCONFIG_FLATMEM=yCONFIG_FLAT_NODE_MEM_MAP=yCONFIG_SPARSEMEM_STATIC=y
# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not setCONFIG_SPLIT_PTLOCK_CPUS=4CONFIG_RESOURCES_64BIT=yCONFIG_ZONE_DMA_FLAG=1CONFIG_BOUNCE=yCONFIG_NR_QUICK=1CONFIG_VIRT_TO_BUS=yCONFIG_HIGHPTE=y
# CONFIG_MATH_EMULATION is not setCONFIG_MTRR=y
# CONFIG_EFI is not set
# CONFIG_IRQBALANCE is not set
# CONFIG_SECCOMP is not set
# CONFIG_HZ_100 is not setCONFIG_HZ_250=y
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not setCONFIG_HZ=250
# CONFIG_KEXEC is not set
# CONFIG_CRASH_DUMP is not setCONFIG_PHYSICAL_START=0x100000
# CONFIG_RELOCATABLE is not setCONFIG_PHYSICAL_ALIGN=0x100000CONFIG_HOTPLUG_CPU=y
# CONFIG_COMPAT_VDSO is not setCONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
#
# Power management options (ACPI, APM)
#CONFIG_PM=y
# CONFIG_PM_LEGACY is not setCONFIG_PM_DEBUG=y
# CONFIG_PM_VERBOSE is not set
# CONFIG_PM_TRACE is not setCONFIG_PM_SLEEP_SMP=yCONFIG_PM_SLEEP=yCONFIG_SUSPEND_SMP_POSSIBLE=yCONFIG_SUSPEND=yCONFIG_HIBERNATION_SMP_POSSIBLE=yCONFIG_HIBERNATION=yCONFIG_PM_STD_PARTITION=""CONFIG_ACPI=yCONFIG_ACPI_SLEEP=yCONFIG_ACPI_PROCFS=y
# CONFIG_ACPI_PROC_EVENT is not setCONFIG_ACPI_AC=yCONFIG_ACPI_BATTERY=yCONFIG_ACPI_BUTTON=yCONFIG_ACPI_VIDEO=mCONFIG_ACPI_FAN=yCONFIG_ACPI_DOCK=yCONFIG_ACPI_BAY=yCONFIG_ACPI_PROCESSOR=yCONFIG_ACPI_HOTPLUG_CPU=yCONFIG_ACPI_THERMAL=y
# CONFIG_ACPI_ASUS is not set
# CONFIG_ACPI_TOSHIBA is not setCONFIG_ACPI_BLACKLIST_YEAR=1999
# CONFIG_ACPI_DEBUG is not setCONFIG_ACPI_EC=yCONFIG_ACPI_POWER=yCONFIG_ACPI_SYSTEM=yCONFIG_X86_PM_TIMER=yCONFIG_ACPI_CONTAINER=yCONFIG_ACPI_SBS=m
# CONFIG_APM is not set
#
# CPU Frequency scaling
#CONFIG_CPU_FREQ=yCONFIG_CPU_FREQ_TABLE=y
# CONFIG_CPU_FREQ_DEBUG is not set CONFIG_CPU_FREQ_STAT=y CONFIG_CPU_FREQ_STAT_DETAILS=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE=y CONFIG_CPU_FREQ_GOV_PERFORMANCE=y CONFIG_CPU_FREQ_GOV_POWERSAVE=y CONFIG_CPU_FREQ_GOV_USERSPACE=y CONFIG_CPU_FREQ_GOV_ONDEMAND=y CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
#
# CPUFreq processor drivers
#CONFIG_X86_ACPI_CPUFREQ=y
# CONFIG_X86_POWERNOW_K6 is not set
# CONFIG_X86_POWERNOW_K7 is not set
# CONFIG_X86_POWERNOW_K8 is not set
# CONFIG_X86_GX_SUSPMOD is not set
# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
# CONFIG_X86_SPEEDSTEP_ICH is not set
# CONFIG_X86_SPEEDSTEP_SMI is not set
# CONFIG_X86_P4_CLOCKMOD is not set
# CONFIG_X86_CPUFREQ_NFORCE2 is not set
# CONFIG_X86_LONGRUN is not set
# CONFIG_X86_LONGHAUL is not set
# CONFIG_X86_E_POWERSAVER is not set
#
# shared options # # CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set # CONFIG_X86_SPEEDSTEP_LIB is not set CONFIG_CPU_IDLE=y CONFIG_CPU_IDLE_GOV_LADDER=y CONFIG_CPU_IDLE_GOV_MENU=y
#
# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
#CONFIG_PCI=y
# CONFIG_PCI_GOBIOS is not set
# CONFIG_PCI_GOMMCONFIG is not set
# CONFIG_PCI_GODIRECT is not setCONFIG_PCI_GOANY=yCONFIG_PCI_BIOS=yCONFIG_PCI_DIRECT=yCONFIG_PCI_MMCONFIG=yCONFIG_PCI_DOMAINS=yCONFIG_PCIEPORTBUS=yCONFIG_HOTPLUG_PCI_PCIE=yCONFIG_PCIEAER=yCONFIG_ARCH_SUPPORTS_MSI=yCONFIG_PCI_MSI=y
# CONFIG_PCI_LEGACY is not set
# CONFIG_PCI_DEBUG is not setCONFIG_HT_IRQ=yCONFIG_ISA_DMA_API=y
# CONFIG_ISA is not set
# CONFIG_MCA is not set
# CONFIG_SCx200 is not setCONFIG_PCCARD=y
# CONFIG_PCMCIA_DEBUG is not setCONFIG_PCMCIA=yCONFIG_PCMCIA_LOAD_CIS=y
# CONFIG_PCMCIA_IOCTL is not setCONFIG_CARDBUS=y
#
# PC-card bridges
#CONFIG_YENTA=yCONFIG_YENTA_O2=yCONFIG_YENTA_RICOH=yCONFIG_YENTA_TI=yCONFIG_YENTA_ENE_TUNE=yCONFIG_YENTA_TOSHIBA=y
# CONFIG_PD6729 is not set
# CONFIG_I82092 is not setCONFIG_PCCARD_NONSTATIC=yCONFIG_HOTPLUG_PCI=y
# CONFIG_HOTPLUG_PCI_FAKE is not setCONFIG_HOTPLUG_PCI_ACPI=yCONFIG_HOTPLUG_PCI_ACPI_IBM=y
# CONFIG_HOTPLUG_PCI_CPCI is not set
# CONFIG_HOTPLUG_PCI_SHPC is not set
#
# Executable file formats
#CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_AOUT is not setCONFIG_BINFMT_MISC=y
#
# Networking
#CONFIG_NET=y
#
# Networking options
#CONFIG_PACKET=yCONFIG_PACKET_MMAP=yCONFIG_UNIX=yCONFIG_XFRM=yCONFIG_XFRM_USER=y
# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_XFRM_MIGRATE is not setCONFIG_NET_KEY=m
# CONFIG_NET_KEY_MIGRATE is not setCONFIG_INET=yCONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not setCONFIG_IP_FIB_HASH=y
# CONFIG_IP_PNP is not setCONFIG_NET_IPIP=mCONFIG_NET_IPGRE=mCONFIG_NET_IPGRE_BROADCAST=yCONFIG_IP_MROUTE=yCONFIG_IP_PIMSM_V1=yCONFIG_IP_PIMSM_V2=y
# CONFIG_ARPD is not setCONFIG_SYN_COOKIES=yCONFIG_INET_AH=mCONFIG_INET_ESP=mCONFIG_INET_IPCOMP=mCONFIG_INET_XFRM_TUNNEL=mCONFIG_INET_TUNNEL=mCONFIG_INET_XFRM_MODE_TRANSPORT=mCONFIG_INET_XFRM_MODE_TUNNEL=m
# CONFIG_INET_XFRM_MODE_BEET is not setCONFIG_INET_LRO=yCONFIG_INET_DIAG=mCONFIG_INET_TCP_DIAG=m
# CONFIG_TCP_CONG_ADVANCED is not setCONFIG_TCP_CONG_CUBIC=yCONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_TCP_MD5SIG is not setCONFIG_IP_VS=m
# CONFIG_IP_VS_DEBUG is not setCONFIG_IP_VS_TAB_BITS=12
#
# IPVS transport protocol load balancing support
#CONFIG_IP_VS_PROTO_TCP=yCONFIG_IP_VS_PROTO_UDP=yCONFIG_IP_VS_PROTO_ESP=yCONFIG_IP_VS_PROTO_AH=y
#
# IPVS scheduler
#CONFIG_IP_VS_RR=mCONFIG_IP_VS_WRR=mCONFIG_IP_VS_LC=mCONFIG_IP_VS_WLC=mCONFIG_IP_VS_LBLC=mCONFIG_IP_VS_LBLCR=mCONFIG_IP_VS_DH=mCONFIG_IP_VS_SH=mCONFIG_IP_VS_SED=mCONFIG_IP_VS_NQ=m
#
# IPVS application helper
#CONFIG_IP_VS_FTP=m
# CONFIG_IPV6 is not set
# CONFIG_INET6_XFRM_TUNNEL is not set
# CONFIG_INET6_TUNNEL is not set
# CONFIG_NETLABEL is not set
# CONFIG_NETWORK_SECMARK is not setCONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not setCONFIG_BRIDGE_NETFILTER=y
#
# Core Netfilter Configuration
#
# CONFIG_NETFILTER_NETLINK is not setCONFIG_NF_CONNTRACK_ENABLED=mCONFIG_NF_CONNTRACK=m
# CONFIG_NF_CT_ACCT is not set
# CONFIG_NF_CONNTRACK_MARK is not set
# CONFIG_NF_CONNTRACK_EVENTS is not set
# CONFIG_NF_CT_PROTO_SCTP is not set
# CONFIG_NF_CT_PROTO_UDPLITE is not set
# CONFIG_NF_CONNTRACK_AMANDA is not setCONFIG_NF_CONNTRACK_FTP=m
# CONFIG_NF_CONNTRACK_H323 is not set
# CONFIG_NF_CONNTRACK_IRC is not set
# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
# CONFIG_NF_CONNTRACK_PPTP is not set
# CONFIG_NF_CONNTRACK_SANE is not set
# CONFIG_NF_CONNTRACK_SIP is not set
# CONFIG_NF_CONNTRACK_TFTP is not setCONFIG_NETFILTER_XTABLES=m
# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
# CONFIG_NETFILTER_XT_TARGET_MARK is not set
# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set
# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set
# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
# CONFIG_NETFILTER_XT_MATCH_ESP is not set
# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
# CONFIG_NETFILTER_XT_MATCH_MAC is not set
# CONFIG_NETFILTER_XT_MATCH_MARK is not set
# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set
# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
# CONFIG_NETFILTER_XT_MATCH_REALM is not set
# CONFIG_NETFILTER_XT_MATCH_SCTP is not setCONFIG_NETFILTER_XT_MATCH_STATE=m
# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
# CONFIG_NETFILTER_XT_MATCH_STRING is not set
# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
# CONFIG_NETFILTER_XT_MATCH_TIME is not set
# CONFIG_NETFILTER_XT_MATCH_U32 is not set
# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
#
# IP: Netfilter Configuration
#CONFIG_NF_CONNTRACK_IPV4=mCONFIG_NF_CONNTRACK_PROC_COMPAT=y
# CONFIG_IP_NF_QUEUE is not setCONFIG_IP_NF_IPTABLES=mCONFIG_IP_NF_MATCH_IPRANGE=mCONFIG_IP_NF_MATCH_TOS=mCONFIG_IP_NF_MATCH_RECENT=mCONFIG_IP_NF_MATCH_ECN=mCONFIG_IP_NF_MATCH_AH=mCONFIG_IP_NF_MATCH_TTL=mCONFIG_IP_NF_MATCH_OWNER=mCONFIG_IP_NF_MATCH_ADDRTYPE=mCONFIG_IP_NF_FILTER=mCONFIG_IP_NF_TARGET_REJECT=mCONFIG_IP_NF_TARGET_LOG=mCONFIG_IP_NF_TARGET_ULOG=mCONFIG_NF_NAT=mCONFIG_NF_NAT_NEEDED=yCONFIG_IP_NF_TARGET_MASQUERADE=m
# CONFIG_IP_NF_TARGET_REDIRECT is not set
# CONFIG_IP_NF_TARGET_NETMAP is not set
# CONFIG_IP_NF_TARGET_SAME is not set
# CONFIG_NF_NAT_SNMP_BASIC is not setCONFIG_NF_NAT_FTP=m
# CONFIG_NF_NAT_IRC is not set
# CONFIG_NF_NAT_TFTP is not set
# CONFIG_NF_NAT_AMANDA is not set
# CONFIG_NF_NAT_PPTP is not set
# CONFIG_NF_NAT_H323 is not set
# CONFIG_NF_NAT_SIP is not set
# CONFIG_IP_NF_MANGLE is not set
# CONFIG_IP_NF_RAW is not set
# CONFIG_IP_NF_ARPTABLES is not set
#
# Bridge: Netfilter Configuration
#
# CONFIG_BRIDGE_NF_EBTABLES is not set
# CONFIG_IP_DCCP is not set
# CONFIG_IP_SCTP is not set
# CONFIG_TIPC is not set
# CONFIG_ATM is not setCONFIG_BRIDGE=mCONFIG_VLAN_8021Q=m
# CONFIG_DECNET is not setCONFIG_LLC=m
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_SCHED is not setCONFIG_NET_SCH_FIFO=y
#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not setCONFIG_BT=mCONFIG_BT_L2CAP=mCONFIG_BT_SCO=mCONFIG_BT_RFCOMM=mCONFIG_BT_RFCOMM_TTY=yCONFIG_BT_BNEP=mCONFIG_BT_BNEP_MC_FILTER=yCONFIG_BT_BNEP_PROTO_FILTER=yCONFIG_BT_HIDP=m
#
# Bluetooth device drivers
#CONFIG_BT_HCIUSB=mCONFIG_BT_HCIUSB_SCO=y
# CONFIG_BT_HCIBTSDIO is not setCONFIG_BT_HCIUART=mCONFIG_BT_HCIUART_H4=yCONFIG_BT_HCIUART_BCSP=y
# CONFIG_BT_HCIUART_LL is not setCONFIG_BT_HCIBCM203X=mCONFIG_BT_HCIBPA10X=mCONFIG_BT_HCIBFUSB=mCONFIG_BT_HCIDTL1=mCONFIG_BT_HCIBT3C=mCONFIG_BT_HCIBLUECARD=mCONFIG_BT_HCIBTUART=mCONFIG_BT_HCIVHCI=m
# CONFIG_AF_RXRPC is not set
#
# Wireless
#CONFIG_CFG80211=mCONFIG_NL80211=yCONFIG_WIRELESS_EXT=yCONFIG_MAC80211=m
# CONFIG_MAC80211_DEBUG is not setCONFIG_IEEE80211=m
# CONFIG_IEEE80211_DEBUG is not setCONFIG_IEEE80211_CRYPT_WEP=mCONFIG_IEEE80211_CRYPT_CCMP=mCONFIG_IEEE80211_CRYPT_TKIP=mCONFIG_IEEE80211_SOFTMAC=m
# CONFIG_IEEE80211_SOFTMAC_DEBUG is not setCONFIG_RFKILL=mCONFIG_RFKILL_INPUT=m
# CONFIG_NET_9P is not set
#
# Device Drivers
#
#
# Generic Driver Options
#CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"CONFIG_STANDALONE=yCONFIG_PREVENT_FIRMWARE_BUILD=yCONFIG_FW_LOADER=y
# CONFIG_DEBUG_DRIVER is not set
# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
# CONFIG_CONNECTOR is not set
# CONFIG_MTD is not setCONFIG_PARPORT=mCONFIG_PARPORT_PC=mCONFIG_PARPORT_SERIAL=mCONFIG_PARPORT_PC_FIFO=yCONFIG_PARPORT_PC_SUPERIO=yCONFIG_PARPORT_PC_PCMCIA=m
# CONFIG_PARPORT_GSC is not set
# CONFIG_PARPORT_AX88796 is not setCONFIG_PARPORT_1284=yCONFIG_PARPORT_NOT_PC=yCONFIG_PNP=y
# CONFIG_PNP_DEBUG is not set
#
# Protocols
#CONFIG_PNPACPI=yCONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_FD is not set
# CONFIG_PARIDE is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_UMEM is not set
# CONFIG_BLK_DEV_COW_COMMON is not setCONFIG_BLK_DEV_LOOP=m
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_SX8 is not set
# CONFIG_BLK_DEV_UB is not setCONFIG_BLK_DEV_RAM=yCONFIG_BLK_DEV_RAM_COUNT=16CONFIG_BLK_DEV_RAM_SIZE=16384CONFIG_BLK_DEV_RAM_BLOCKSIZE=4096CONFIG_CDROM_PKTCDVD=mCONFIG_CDROM_PKTCDVD_BUFFERS=8
# CONFIG_CDROM_PKTCDVD_WCACHE is not set
# CONFIG_ATA_OVER_ETH is not setCONFIG_XEN_BLKDEV_FRONTEND=yCONFIG_MISC_DEVICES=y
# CONFIG_IBM_ASM is not set
# CONFIG_PHANTOM is not set
# CONFIG_EEPROM_93CX6 is not set
# CONFIG_SGI_IOC4 is not set
# CONFIG_TIFM_CORE is not set
# CONFIG_ASUS_LAPTOP is not set
# CONFIG_FUJITSU_LAPTOP is not set
# CONFIG_MSI_LAPTOP is not set
# CONFIG_SONY_LAPTOP is not setCONFIG_THINKPAD_ACPI=m
# CONFIG_THINKPAD_ACPI_DEBUG is not setCONFIG_THINKPAD_ACPI_BAY=y
# CONFIG_IDE is not set
#
# SCSI device support
#
# CONFIG_RAID_ATTRS is not setCONFIG_SCSI=yCONFIG_SCSI_DMA=y
# CONFIG_SCSI_TGT is not setCONFIG_SCSI_NETLINK=yCONFIG_SCSI_PROC_FS=y
#
# SCSI support type (disk, tape, CD-ROM)
#CONFIG_BLK_DEV_SD=y
# CONFIG_CHR_DEV_ST is not set
# CONFIG_CHR_DEV_OSST is not setCONFIG_BLK_DEV_SR=mCONFIG_BLK_DEV_SR_VENDOR=yCONFIG_CHR_DEV_SG=m
# CONFIG_CHR_DEV_SCH is not set
#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs #CONFIG_SCSI_MULTI_LUN=yCONFIG_SCSI_CONSTANTS=yCONFIG_SCSI_LOGGING=y
# CONFIG_SCSI_SCAN_ASYNC is not set CONFIG_SCSI_WAIT_SCAN=m
#
# SCSI Transports
#CONFIG_SCSI_SPI_ATTRS=mCONFIG_SCSI_FC_ATTRS=mCONFIG_SCSI_ISCSI_ATTRS=mCONFIG_SCSI_SAS_ATTRS=m
# CONFIG_SCSI_SAS_LIBSAS is not set
# CONFIG_SCSI_SRP_ATTRS is not setCONFIG_SCSI_LOWLEVEL=y
# CONFIG_ISCSI_TCP is not set
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_3W_9XXX is not set
# CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_AACRAID is not set
# CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_AIC7XXX_OLD is not set
# CONFIG_SCSI_AIC79XX is not set
# CONFIG_SCSI_AIC94XX is not set
# CONFIG_SCSI_DPT_I2O is not set
# CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_ARCMSR is not set
# CONFIG_MEGARAID_NEWGEN is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_SAS is not set
# CONFIG_SCSI_HPTIOP is not set
# CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_EATA is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_IPS is not set
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_PPA is not set
# CONFIG_SCSI_IMM is not set
# CONFIG_SCSI_STEX is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_SCSI_IPR is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_QLA_FC is not set
# CONFIG_SCSI_QLA_ISCSI is not set
# CONFIG_SCSI_LPFC is not set
# CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_NSP32 is not set
# CONFIG_SCSI_DEBUG is not set
# CONFIG_SCSI_SRP is not set
# CONFIG_SCSI_LOWLEVEL_PCMCIA is not setCONFIG_ATA=y
# CONFIG_ATA_NONSTANDARD is not setCONFIG_ATA_ACPI=yCONFIG_SATA_AHCI=y
# CONFIG_SATA_SVW is not setCONFIG_ATA_PIIX=y
# CONFIG_SATA_MV is not set
# CONFIG_SATA_NV is not set
# CONFIG_PDC_ADMA is not set
# CONFIG_SATA_QSTOR is not set
# CONFIG_SATA_PROMISE is not set
# CONFIG_SATA_SX4 is not set
# CONFIG_SATA_SIL is not set
# CONFIG_SATA_SIL24 is not set
# CONFIG_SATA_SIS is not set
# CONFIG_SATA_ULI is not set
# CONFIG_SATA_VIA is not set
# CONFIG_SATA_VITESSE is not set
# CONFIG_SATA_INIC162X is not set
# CONFIG_PATA_ACPI is not set
# CONFIG_PATA_ALI is not set
# CONFIG_PATA_AMD is not set
# CONFIG_PATA_ARTOP is not set
# CONFIG_PATA_ATIIXP is not set
# CONFIG_PATA_CMD640_PCI is not set
# CONFIG_PATA_CMD64X is not set
# CONFIG_PATA_CS5520 is not set
# CONFIG_PATA_CS5530 is not set
# CONFIG_PATA_CS5535 is not set
# CONFIG_PATA_CS5536 is not set
# CONFIG_PATA_CYPRESS is not set
# CONFIG_PATA_EFAR is not setCONFIG_ATA_GENERIC=y
# CONFIG_PATA_HPT366 is not set
# CONFIG_PATA_HPT37X is not set
# CONFIG_PATA_HPT3X2N is not set
# CONFIG_PATA_HPT3X3 is not set
# CONFIG_PATA_IT821X is not set
# CONFIG_PATA_IT8213 is not set
# CONFIG_PATA_JMICRON is not set
# CONFIG_PATA_TRIFLEX is not set
# CONFIG_PATA_MARVELL is not set
# CONFIG_PATA_MPIIX is not set
# CONFIG_PATA_OLDPIIX is not set
# CONFIG_PATA_NETCELL is not set
# CONFIG_PATA_NS87410 is not set
# CONFIG_PATA_NS87415 is not set
# CONFIG_PATA_OPTI is not set
# CONFIG_PATA_OPTIDMA is not set
# CONFIG_PATA_PCMCIA is not set
# CONFIG_PATA_PDC_OLD is not set
# CONFIG_PATA_RADISYS is not set
# CONFIG_PATA_RZ1000 is not set
# CONFIG_PATA_SC1200 is not set
# CONFIG_PATA_SERVERWORKS is not set
# CONFIG_PATA_PDC2027X is not set
# CONFIG_PATA_SIL680 is not set
# CONFIG_PATA_SIS is not set
# CONFIG_PATA_VIA is not set
# CONFIG_PATA_WINBOND is not setCONFIG_MD=y
# CONFIG_BLK_DEV_MD is not setCONFIG_BLK_DEV_DM=m
# CONFIG_DM_DEBUG is not set
# CONFIG_DM_CRYPT is not setCONFIG_DM_SNAPSHOT=m
# CONFIG_DM_MIRROR is not set
# CONFIG_DM_ZERO is not set
# CONFIG_DM_MULTIPATH is not set
# CONFIG_DM_DELAY is not set
# CONFIG_DM_UEVENT is not set
# CONFIG_FUSION is not set
#
# IEEE 1394 (FireWire) support
#
# CONFIG_FIREWIRE is not setCONFIG_IEEE1394=m
#
# Subsystem Options
#
# CONFIG_IEEE1394_VERBOSEDEBUG is not set
#
# Controllers
#
#
# Texas Instruments PCILynx requires I2C
#CONFIG_IEEE1394_OHCI1394=m
#
# Protocols
#CONFIG_IEEE1394_VIDEO1394=mCONFIG_IEEE1394_SBP2=m
# CONFIG_IEEE1394_SBP2_PHYS_DMA is not setCONFIG_IEEE1394_ETH1394_ROM_ENTRY=yCONFIG_IEEE1394_ETH1394=mCONFIG_IEEE1394_DV1394=mCONFIG_IEEE1394_RAWIO=m
# CONFIG_I2O is not set
# CONFIG_MACINTOSH_DRIVERS is not setCONFIG_NETDEVICES=y
# CONFIG_NETDEVICES_MULTIQUEUE is not setCONFIG_DUMMY=mCONFIG_BONDING=m
# CONFIG_MACVLAN is not set
# CONFIG_EQUALIZER is not setCONFIG_TUN=m
# CONFIG_VETH is not set
# CONFIG_NET_SB1000 is not set
# CONFIG_IP1000 is not set
# CONFIG_ARCNET is not set
# CONFIG_PHYLIB is not setCONFIG_NET_ETHERNET=yCONFIG_MII=y
# CONFIG_HAPPYMEAL is not set
# CONFIG_SUNGEM is not set
# CONFIG_CASSINI is not set
# CONFIG_NET_VENDOR_3COM is not set
# CONFIG_NET_TULIP is not set
# CONFIG_HP100 is not set
# CONFIG_IBM_NEW_EMAC_ZMII is not set
# CONFIG_IBM_NEW_EMAC_RGMII is not set
# CONFIG_IBM_NEW_EMAC_TAH is not set
# CONFIG_IBM_NEW_EMAC_EMAC4 is not setCONFIG_NET_PCI=yCONFIG_PCNET32=y
# CONFIG_PCNET32_NAPI is not set
# CONFIG_AMD8111_ETH is not set
# CONFIG_ADAPTEC_STARFIRE is not set
# CONFIG_B44 is not set
# CONFIG_FORCEDETH is not set
# CONFIG_EEPRO100 is not set
# CONFIG_E100 is not set
# CONFIG_FEALNX is not set
# CONFIG_NATSEMI is not setCONFIG_NE2K_PCI=y
# CONFIG_8139CP is not setCONFIG_8139TOO=yCONFIG_8139TOO_PIO=y
# CONFIG_8139TOO_TUNE_TWISTER is not set
# CONFIG_8139TOO_8129 is not set
# CONFIG_8139_OLD_RX_RESET is not set
# CONFIG_SIS900 is not set
# CONFIG_EPIC100 is not set
# CONFIG_SUNDANCE is not set
# CONFIG_TLAN is not set
# CONFIG_VIA_RHINE is not set
# CONFIG_SC92031 is not set
# CONFIG_NET_POCKET is not setCONFIG_NETDEV_1000=y
# CONFIG_ACENIC is not set
# CONFIG_DL2K is not setCONFIG_E1000=m
# CONFIG_E1000_NAPI is not set
# CONFIG_E1000_DISABLE_PACKET_SPLIT is not setCONFIG_E1000E=m
# CONFIG_NS83820 is not set
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_R8169 is not set
# CONFIG_SIS190 is not set
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
# CONFIG_SK98LIN is not set
# CONFIG_VIA_VELOCITY is not set
# CONFIG_TIGON3 is not set
# CONFIG_BNX2 is not set
# CONFIG_QLA3XXX is not set
# CONFIG_ATL1 is not set
# CONFIG_NETDEV_10000 is not set
# CONFIG_TR is not set
#
# Wireless LAN
#
# CONFIG_WLAN_PRE80211 is not setCONFIG_WLAN_80211=y
# CONFIG_PCMCIA_RAYCS is not set
# CONFIG_IPW2100 is not set
# CONFIG_IPW2200 is not set
# CONFIG_LIBERTAS is not set
# CONFIG_AIRO is not set
# CONFIG_HERMES is not set
# CONFIG_ATMEL is not set
# CONFIG_AIRO_CS is not set
# CONFIG_PCMCIA_WL3501 is not set
# CONFIG_PRISM54 is not set
# CONFIG_USB_ZD1201 is not set
# CONFIG_RTL8187 is not set
# CONFIG_ADM8211 is not set
# CONFIG_P54_COMMON is not setCONFIG_IWLWIFI=yCONFIG_IWLWIFI_DEBUG=yCONFIG_IWLWIFI_SENSITIVITY=yCONFIG_IWLWIFI_SPECTRUM_MEASUREMENT=yCONFIG_IWLWIFI_QOS=y
# CONFIG_IWL4965 is not setCONFIG_IWL3945=m
# CONFIG_HOSTAP is not set
# CONFIG_BCM43XX is not set
# CONFIG_B43 is not set
# CONFIG_B43LEGACY is not set
# CONFIG_ZD1211RW is not set
# CONFIG_RT2X00 is not set
#
# USB Network Adapters
#CONFIG_USB_CATC=mCONFIG_USB_KAWETH=mCONFIG_USB_PEGASUS=mCONFIG_USB_RTL8150=mCONFIG_USB_USBNET_MII=mCONFIG_USB_USBNET=mCONFIG_USB_NET_AX8817X=mCONFIG_USB_NET_CDCETHER=m
# CONFIG_USB_NET_DM9601 is not setCONFIG_USB_NET_GL620A=mCONFIG_USB_NET_NET1080=mCONFIG_USB_NET_PLUSB=m
# CONFIG_USB_NET_MCS7830 is not setCONFIG_USB_NET_RNDIS_HOST=mCONFIG_USB_NET_CDC_SUBSET=mCONFIG_USB_ALI_M5632=yCONFIG_USB_AN2720=yCONFIG_USB_BELKIN=yCONFIG_USB_ARMLINUX=yCONFIG_USB_EPSON2888=y
# CONFIG_USB_KC2190 is not setCONFIG_USB_NET_ZAURUS=m
# CONFIG_NET_PCMCIA is not set
# CONFIG_WAN is not setCONFIG_XEN_NETDEV_FRONTEND=y
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
# CONFIG_PLIP is not setCONFIG_PPP=mCONFIG_PPP_MULTILINK=yCONFIG_PPP_FILTER=yCONFIG_PPP_ASYNC=mCONFIG_PPP_SYNC_TTY=mCONFIG_PPP_DEFLATE=mCONFIG_PPP_BSDCOMP=m
# CONFIG_PPP_MPPE is not set
# CONFIG_PPPOE is not set
# CONFIG_PPPOL2TP is not set
# CONFIG_SLIP is not setCONFIG_SLHC=m
# CONFIG_NET_FC is not set
# CONFIG_SHAPER is not setCONFIG_NETCONSOLE=m
# CONFIG_NETCONSOLE_DYNAMIC is not setCONFIG_NETPOLL=y
# CONFIG_NETPOLL_TRAP is not setCONFIG_NET_POLL_CONTROLLER=y
# CONFIG_ISDN is not set
# CONFIG_PHONE is not set
#
# Input device support
#CONFIG_INPUT=yCONFIG_INPUT_FF_MEMLESS=yCONFIG_INPUT_POLLDEV=m
#
# Userland interfaces
#CONFIG_INPUT_MOUSEDEV=y
# CONFIG_INPUT_MOUSEDEV_PSAUX is not setCONFIG_INPUT_MOUSEDEV_SCREEN_X=1024CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768CONFIG_INPUT_JOYDEV=mCONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
#
# Input Device Drivers
#CONFIG_INPUT_KEYBOARD=yCONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not setCONFIG_INPUT_MOUSE=yCONFIG_MOUSE_PS2=yCONFIG_MOUSE_PS2_ALPS=yCONFIG_MOUSE_PS2_LOGIPS2PP=yCONFIG_MOUSE_PS2_SYNAPTICS=yCONFIG_MOUSE_PS2_LIFEBOOK=yCONFIG_MOUSE_PS2_TRACKPOINT=y
# CONFIG_MOUSE_PS2_TOUCHKIT is not set
# CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_APPLETOUCH is not set
# CONFIG_MOUSE_VSXXXAA is not setCONFIG_INPUT_JOYSTICK=y
# CONFIG_JOYSTICK_ANALOG is not set
# CONFIG_JOYSTICK_A3D is not set
# CONFIG_JOYSTICK_ADI is not set
# CONFIG_JOYSTICK_COBRA is not set
# CONFIG_JOYSTICK_GF2K is not set
# CONFIG_JOYSTICK_GRIP is not set
# CONFIG_JOYSTICK_GRIP_MP is not set
# CONFIG_JOYSTICK_GUILLEMOT is not set
# CONFIG_JOYSTICK_INTERACT is not set
# CONFIG_JOYSTICK_SIDEWINDER is not set
# CONFIG_JOYSTICK_TMDC is not set
# CONFIG_JOYSTICK_IFORCE is not set
# CONFIG_JOYSTICK_WARRIOR is not set
# CONFIG_JOYSTICK_MAGELLAN is not set
# CONFIG_JOYSTICK_SPACEORB is not set
# CONFIG_JOYSTICK_SPACEBALL is not set
# CONFIG_JOYSTICK_STINGER is not set
# CONFIG_JOYSTICK_TWIDJOY is not set
# CONFIG_JOYSTICK_DB9 is not set
# CONFIG_JOYSTICK_GAMECON is not set
# CONFIG_JOYSTICK_TURBOGRAFX is not set
# CONFIG_JOYSTICK_JOYDUMP is not set
# CONFIG_JOYSTICK_XPAD is not set
# CONFIG_INPUT_TABLET is not set
# CONFIG_INPUT_TOUCHSCREEN is not setCONFIG_INPUT_MISC=yCONFIG_INPUT_PCSPKR=m
# CONFIG_INPUT_WISTRON_BTNS is not set
# CONFIG_INPUT_ATLAS_BTNS is not set
# CONFIG_INPUT_ATI_REMOTE is not set
# CONFIG_INPUT_ATI_REMOTE2 is not set
# CONFIG_INPUT_KEYSPAN_REMOTE is not set
# CONFIG_INPUT_POWERMATE is not set
# CONFIG_INPUT_YEALINK is not setCONFIG_INPUT_UINPUT=m
#
# Hardware I/O ports
#CONFIG_SERIO=yCONFIG_SERIO_I8042=yCONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PARKBD is not set
# CONFIG_SERIO_PCIPS2 is not setCONFIG_SERIO_LIBPS2=yCONFIG_SERIO_RAW=m
# CONFIG_GAMEPORT is not set
#
# Character devices
#CONFIG_VT=yCONFIG_VT_CONSOLE=yCONFIG_HW_CONSOLE=yCONFIG_VT_HW_CONSOLE_BINDING=yCONFIG_SERIAL_NONSTANDARD=y
# CONFIG_COMPUTONE is not set
# CONFIG_ROCKETPORT is not set
# CONFIG_CYCLADES is not set
# CONFIG_DIGIEPCA is not set
# CONFIG_MOXA_INTELLIO is not set
# CONFIG_MOXA_SMARTIO is not set
# CONFIG_MOXA_SMARTIO_NEW is not set
# CONFIG_ISI is not set
# CONFIG_SYNCLINK is not set
# CONFIG_SYNCLINKMP is not set
# CONFIG_SYNCLINK_GT is not set
# CONFIG_N_HDLC is not set
# CONFIG_SPECIALIX is not set
# CONFIG_SX is not set
# CONFIG_RIO is not set
# CONFIG_STALDRV is not set
#
# Serial drivers
#CONFIG_SERIAL_8250=yCONFIG_SERIAL_8250_CONSOLE=yCONFIG_FIX_EARLYCON_MEM=yCONFIG_SERIAL_8250_PCI=yCONFIG_SERIAL_8250_PNP=y
# CONFIG_SERIAL_8250_CS is not setCONFIG_SERIAL_8250_NR_UARTS=4CONFIG_SERIAL_8250_RUNTIME_UARTS=4
# CONFIG_SERIAL_8250_EXTENDED is not set
#
# Non-8250 serial port support
#CONFIG_SERIAL_CORE=yCONFIG_SERIAL_CORE_CONSOLE=y
# CONFIG_SERIAL_JSM is not setCONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not setCONFIG_PRINTER=mCONFIG_LP_CONSOLE=yCONFIG_PPDEV=m
# CONFIG_TIPAR is not setCONFIG_HVC_DRIVER=yCONFIG_HVC_XEN=y
# CONFIG_IPMI_HANDLER is not setCONFIG_HW_RANDOM=yCONFIG_HW_RANDOM_INTEL=m
# CONFIG_HW_RANDOM_AMD is not set
# CONFIG_HW_RANDOM_GEODE is not set
# CONFIG_HW_RANDOM_VIA is not setCONFIG_NVRAM=yCONFIG_RTC=mCONFIG_GEN_RTC=mCONFIG_GEN_RTC_X=y
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
# CONFIG_SONYPI is not set
#
# PCMCIA character devices
#
# CONFIG_SYNCLINK_CS is not set
# CONFIG_CARDMAN_4000 is not set
# CONFIG_CARDMAN_4040 is not set
# CONFIG_MWAVE is not set
# CONFIG_PC8736x_GPIO is not set
# CONFIG_NSC_GPIO is not set
# CONFIG_CS5535_GPIO is not set
# CONFIG_RAW_DRIVER is not setCONFIG_HPET=yCONFIG_HPET_RTC_IRQ=yCONFIG_HPET_MMAP=yCONFIG_HANGCHECK_TIMER=mCONFIG_TCG_TPM=m
# CONFIG_TCG_TIS is not set
# CONFIG_TCG_NSC is not setCONFIG_TCG_ATMEL=m
# CONFIG_TCG_INFINEON is not set
# CONFIG_TELCLOCK is not setCONFIG_DEVPORT=y
# CONFIG_I2C is not set
#
# SPI support
#
# CONFIG_SPI is not set
# CONFIG_SPI_MASTER is not set
# CONFIG_W1 is not setCONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not set
# CONFIG_PDA_POWER is not set
# CONFIG_BATTERY_DS2760 is not setCONFIG_HWMON=m
# CONFIG_HWMON_VID is not set
# CONFIG_SENSORS_ABITUGURU is not set
# CONFIG_SENSORS_ABITUGURU3 is not set
# CONFIG_SENSORS_K8TEMP is not set
# CONFIG_SENSORS_F71805F is not set
# CONFIG_SENSORS_F71882FG is not setCONFIG_SENSORS_CORETEMP=m
# CONFIG_SENSORS_IT87 is not set
# CONFIG_SENSORS_PC87360 is not set
# CONFIG_SENSORS_PC87427 is not set
# CONFIG_SENSORS_SIS5595 is not set
# CONFIG_SENSORS_SMSC47M1 is not set
# CONFIG_SENSORS_SMSC47B397 is not set
# CONFIG_SENSORS_VIA686A is not set
# CONFIG_SENSORS_VT1211 is not set
# CONFIG_SENSORS_VT8231 is not set
# CONFIG_SENSORS_W83627HF is not set
# CONFIG_SENSORS_W83627EHF is not setCONFIG_SENSORS_HDAPS=m
# CONFIG_SENSORS_APPLESMC is not set
# CONFIG_HWMON_DEBUG_CHIP is not set
# CONFIG_WATCHDOG is not set
#
# Sonics Silicon Backplane
#CONFIG_SSB_POSSIBLE=y
# CONFIG_SSB is not set
#
# Multifunction device drivers
#
# CONFIG_MFD_SM501 is not set
#
# Multimedia devices
#CONFIG_VIDEO_DEV=mCONFIG_VIDEO_V4L1=yCONFIG_VIDEO_V4L1_COMPAT=yCONFIG_VIDEO_V4L2=y
# CONFIG_VIDEO_CAPTURE_DRIVERS is not set
# CONFIG_RADIO_ADAPTERS is not set
# CONFIG_DVB_CORE is not set
# CONFIG_DAB is not set
#
# Graphics support
#CONFIG_AGP=y
# CONFIG_AGP_ALI is not set
# CONFIG_AGP_ATI is not set
# CONFIG_AGP_AMD is not set
# CONFIG_AGP_AMD64 is not setCONFIG_AGP_INTEL=y
# CONFIG_AGP_NVIDIA is not set
# CONFIG_AGP_SIS is not set
# CONFIG_AGP_SWORKS is not set
# CONFIG_AGP_VIA is not set
# CONFIG_AGP_EFFICEON is not setCONFIG_DRM=m
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_R128 is not set
# CONFIG_DRM_RADEON is not setCONFIG_DRM_I810=mCONFIG_DRM_I830=mCONFIG_DRM_I915=m
# CONFIG_DRM_MGA is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_VIA is not set
# CONFIG_DRM_SAVAGE is not setCONFIG_VGASTATE=mCONFIG_VIDEO_OUTPUT_CONTROL=mCONFIG_FB=y
# CONFIG_FIRMWARE_EDID is not set
# CONFIG_FB_DDC is not setCONFIG_FB_CFB_FILLRECT=yCONFIG_FB_CFB_COPYAREA=yCONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
# CONFIG_FB_SYS_FILLRECT is not set
# CONFIG_FB_SYS_COPYAREA is not set
# CONFIG_FB_SYS_IMAGEBLIT is not set
# CONFIG_FB_SYS_FOPS is not setCONFIG_FB_DEFERRED_IO=y
# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_BACKLIGHT is not setCONFIG_FB_MODE_HELPERS=yCONFIG_FB_TILEBLITTING=y
#
# Frame buffer hardware drivers
#
# CONFIG_FB_CIRRUS is not set
# CONFIG_FB_PM2 is not set
# CONFIG_FB_CYBER2000 is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_IMSTT is not setCONFIG_FB_VGA16=mCONFIG_FB_VESA=y
# CONFIG_FB_HECUBA is not set
# CONFIG_FB_HGA is not set
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_NVIDIA is not set
# CONFIG_FB_RIVA is not setCONFIG_FB_I810=mCONFIG_FB_I810_GTF=y
# CONFIG_FB_I810_I2C is not set
# CONFIG_FB_LE80578 is not setCONFIG_FB_INTEL=mCONFIG_FB_INTEL_DEBUG=y
# CONFIG_FB_INTEL_I2C is not set
# CONFIG_FB_MATROX is not set
# CONFIG_FB_RADEON is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
# CONFIG_FB_S3 is not set
# CONFIG_FB_SAVAGE is not set
# CONFIG_FB_SIS is not set
# CONFIG_FB_NEOMAGIC is not set
# CONFIG_FB_KYRO is not set
# CONFIG_FB_3DFX is not set
# CONFIG_FB_VOODOO1 is not set
# CONFIG_FB_VT8623 is not set
# CONFIG_FB_CYBLA is not set
# CONFIG_FB_TRIDENT is not set
# CONFIG_FB_ARK is not set
# CONFIG_FB_PM3 is not set
# CONFIG_FB_GEODE is not set
# CONFIG_FB_VIRTUAL is not setCONFIG_BACKLIGHT_LCD_SUPPORT=yCONFIG_LCD_CLASS_DEVICE=mCONFIG_BACKLIGHT_CLASS_DEVICE=y
# CONFIG_BACKLIGHT_CORGI is not set
# CONFIG_BACKLIGHT_PROGEAR is not set
#
# Display device support
#CONFIG_DISPLAY_SUPPORT=m
#
# Display hardware drivers
#
#
# Console display driver support
#CONFIG_VGA_CONSOLE=y CONFIG_VGACON_SOFT_SCROLLBACK=y CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64 CONFIG_VIDEO_SELECT=yCONFIG_DUMMY_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE=y
# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
# CONFIG_FONTS is not set
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=yCONFIG_LOGO=y
# CONFIG_LOGO_LINUX_MONO is not set
# CONFIG_LOGO_LINUX_VGA16 is not set CONFIG_LOGO_LINUX_CLUT224=y
#
# Sound
#CONFIG_SOUND=m
#
# Advanced Linux Sound Architecture
#CONFIG_SND=mCONFIG_SND_TIMER=mCONFIG_SND_PCM=mCONFIG_SND_RAWMIDI=mCONFIG_SND_SEQUENCER=mCONFIG_SND_SEQ_DUMMY=mCONFIG_SND_OSSEMUL=yCONFIG_SND_MIXER_OSS=mCONFIG_SND_PCM_OSS=mCONFIG_SND_PCM_OSS_PLUGINS=yCONFIG_SND_SEQUENCER_OSS=yCONFIG_SND_RTCTIMER=mCONFIG_SND_SEQ_RTCTIMER_DEFAULT=yCONFIG_SND_DYNAMIC_MINORS=y
# CONFIG_SND_SUPPORT_OLD_API is not setCONFIG_SND_VERBOSE_PROCFS=y
# CONFIG_SND_VERBOSE_PRINTK is not set
# CONFIG_SND_DEBUG is not set
#
# Generic devices
#CONFIG_SND_MPU401_UART=mCONFIG_SND_AC97_CODEC=mCONFIG_SND_DUMMY=mCONFIG_SND_VIRMIDI=mCONFIG_SND_MTPAV=m
# CONFIG_SND_MTS64 is not set
# CONFIG_SND_SERIAL_U16550 is not setCONFIG_SND_MPU401=m
# CONFIG_SND_PORTMAN2X4 is not set
#
# PCI devices
#
# CONFIG_SND_AD1889 is not set
# CONFIG_SND_ALS300 is not set
# CONFIG_SND_ALS4000 is not set
# CONFIG_SND_ALI5451 is not set
# CONFIG_SND_ATIIXP is not set
# CONFIG_SND_ATIIXP_MODEM is not set
# CONFIG_SND_AU8810 is not set
# CONFIG_SND_AU8820 is not set
# CONFIG_SND_AU8830 is not set
# CONFIG_SND_AZT3328 is not set
# CONFIG_SND_BT87X is not set
# CONFIG_SND_CA0106 is not set
# CONFIG_SND_CMIPCI is not set
# CONFIG_SND_CS4281 is not set
# CONFIG_SND_CS46XX is not set
# CONFIG_SND_CS5530 is not set
# CONFIG_SND_CS5535AUDIO is not set
# CONFIG_SND_DARLA20 is not set
# CONFIG_SND_GINA20 is not set
# CONFIG_SND_LAYLA20 is not set
# CONFIG_SND_DARLA24 is not set
# CONFIG_SND_GINA24 is not set
# CONFIG_SND_LAYLA24 is not set
# CONFIG_SND_MONA is not set
# CONFIG_SND_MIA is not set
# CONFIG_SND_ECHO3G is not set
# CONFIG_SND_INDIGO is not set
# CONFIG_SND_INDIGOIO is not set
# CONFIG_SND_INDIGODJ is not set
# CONFIG_SND_EMU10K1 is not set
# CONFIG_SND_EMU10K1X is not set
# CONFIG_SND_ENS1370 is not set
# CONFIG_SND_ENS1371 is not set
# CONFIG_SND_ES1938 is not set
# CONFIG_SND_ES1968 is not set
# CONFIG_SND_FM801 is not setCONFIG_SND_HDA_INTEL=m
# CONFIG_SND_HDA_HWDEP is not setCONFIG_SND_HDA_CODEC_REALTEK=yCONFIG_SND_HDA_CODEC_ANALOG=yCONFIG_SND_HDA_CODEC_SIGMATEL=yCONFIG_SND_HDA_CODEC_VIA=yCONFIG_SND_HDA_CODEC_ATIHDMI=yCONFIG_SND_HDA_CODEC_CONEXANT=yCONFIG_SND_HDA_CODEC_CMEDIA=yCONFIG_SND_HDA_CODEC_SI3054=yCONFIG_SND_HDA_GENERIC=y
# CONFIG_SND_HDA_POWER_SAVE is not set
# CONFIG_SND_HDSP is not set
# CONFIG_SND_HDSPM is not set
# CONFIG_SND_ICE1712 is not set
# CONFIG_SND_ICE1724 is not setCONFIG_SND_INTEL8X0=mCONFIG_SND_INTEL8X0M=m
# CONFIG_SND_KORG1212 is not set
# CONFIG_SND_MAESTRO3 is not set
# CONFIG_SND_MIXART is not set
# CONFIG_SND_NM256 is not set
# CONFIG_SND_PCXHR is not set
# CONFIG_SND_RIPTIDE is not set
# CONFIG_SND_RME32 is not set
# CONFIG_SND_RME96 is not set
# CONFIG_SND_RME9652 is not set
# CONFIG_SND_SONICVIBES is not set
# CONFIG_SND_TRIDENT is not set
# CONFIG_SND_VIA82XX is not set
# CONFIG_SND_VIA82XX_MODEM is not set
# CONFIG_SND_VX222 is not set
# CONFIG_SND_YMFPCI is not setCONFIG_SND_AC97_POWER_SAVE=yCONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
#
# USB devices
#
# CONFIG_SND_USB_AUDIO is not set
# CONFIG_SND_USB_USX2Y is not set
# CONFIG_SND_USB_CAIAQ is not set
#
# PCMCIA devices
#
# CONFIG_SND_VXPOCKET is not set
# CONFIG_SND_PDAUDIOCF is not set
#
# System on Chip audio support
#
# CONFIG_SND_SOC is not set
#
# SoC Audio support for SuperH
#
#
# Open Sound System
#
# CONFIG_SOUND_PRIME is not setCONFIG_AC97_BUS=mCONFIG_HID_SUPPORT=yCONFIG_HID=y
# CONFIG_HID_DEBUG is not set
# CONFIG_HIDRAW is not set
#
# USB Input Devices
#CONFIG_USB_HID=y
# CONFIG_USB_HIDINPUT_POWERBOOK is not setCONFIG_HID_FF=yCONFIG_HID_PID=yCONFIG_LOGITECH_FF=y
# CONFIG_PANTHERLORD_FF is not setCONFIG_THRUSTMASTER_FF=y
# CONFIG_ZEROPLUS_FF is not setCONFIG_USB_HIDDEV=yCONFIG_USB_SUPPORT=yCONFIG_USB_ARCH_HAS_HCD=yCONFIG_USB_ARCH_HAS_OHCI=yCONFIG_USB_ARCH_HAS_EHCI=yCONFIG_USB=y
# CONFIG_USB_DEBUG is not set
#
# Miscellaneous USB options
#CONFIG_USB_DEVICEFS=y
# CONFIG_USB_DEVICE_CLASS is not set
# CONFIG_USB_DYNAMIC_MINORS is not setCONFIG_USB_SUSPEND=y
# CONFIG_USB_PERSIST is not set
# CONFIG_USB_OTG is not set
#
# USB Host Controller Drivers
#CONFIG_USB_EHCI_HCD=m
# CONFIG_USB_EHCI_SPLIT_ISO is not setCONFIG_USB_EHCI_ROOT_HUB_TT=y
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_OHCI_HCD is not setCONFIG_USB_UHCI_HCD=m
# CONFIG_USB_SL811_HCD is not set
# CONFIG_USB_R8A66597_HCD is not set
#
# USB Device Class drivers
#CONFIG_USB_ACM=mCONFIG_USB_PRINTER=m
#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' #
#
# may also be needed; see USB_STORAGE Help for more information # CONFIG_USB_STORAGE=m # CONFIG_USB_STORAGE_DEBUG is not set CONFIG_USB_STORAGE_DATAFAB=y CONFIG_USB_STORAGE_FREECOM=y # CONFIG_USB_STORAGE_ISD200 is not set CONFIG_USB_STORAGE_DPCM=y CONFIG_USB_STORAGE_USBAT=y CONFIG_USB_STORAGE_SDDR09=y CONFIG_USB_STORAGE_SDDR55=y CONFIG_USB_STORAGE_JUMPSHOT=y CONFIG_USB_STORAGE_ALAUDA=y # CONFIG_USB_STORAGE_KARMA is not set CONFIG_USB_LIBUSUAL=y
#
# USB Imaging devices
#CONFIG_USB_MDC800=mCONFIG_USB_MICROTEK=mCONFIG_USB_MON=y
#
# USB port drivers
#CONFIG_USB_USS720=m
#
# USB Serial Converter support
#CONFIG_USB_SERIAL=mCONFIG_USB_SERIAL_GENERIC=y
# CONFIG_USB_SERIAL_AIRCABLE is not setCONFIG_USB_SERIAL_AIRPRIME=mCONFIG_USB_SERIAL_ARK3116=mCONFIG_USB_SERIAL_BELKIN=m
# CONFIG_USB_SERIAL_CH341 is not setCONFIG_USB_SERIAL_WHITEHEAT=mCONFIG_USB_SERIAL_DIGI_ACCELEPORT=mCONFIG_USB_SERIAL_CP2101=mCONFIG_USB_SERIAL_CYPRESS_M8=mCONFIG_USB_SERIAL_EMPEG=mCONFIG_USB_SERIAL_FTDI_SIO=mCONFIG_USB_SERIAL_FUNSOFT=mCONFIG_USB_SERIAL_VISOR=mCONFIG_USB_SERIAL_IPAQ=mCONFIG_USB_SERIAL_IR=mCONFIG_USB_SERIAL_EDGEPORT=mCONFIG_USB_SERIAL_EDGEPORT_TI=mCONFIG_USB_SERIAL_GARMIN=mCONFIG_USB_SERIAL_IPW=mCONFIG_USB_SERIAL_KEYSPAN_PDA=mCONFIG_USB_SERIAL_KEYSPAN=mCONFIG_USB_SERIAL_KEYSPAN_MPR=yCONFIG_USB_SERIAL_KEYSPAN_USA28=yCONFIG_USB_SERIAL_KEYSPAN_USA28X=yCONFIG_USB_SERIAL_KEYSPAN_USA28XA=yCONFIG_USB_SERIAL_KEYSPAN_USA28XB=yCONFIG_USB_SERIAL_KEYSPAN_USA19=yCONFIG_USB_SERIAL_KEYSPAN_USA18X=yCONFIG_USB_SERIAL_KEYSPAN_USA19W=yCONFIG_USB_SERIAL_KEYSPAN_USA19QW=yCONFIG_USB_SERIAL_KEYSPAN_USA19QI=yCONFIG_USB_SERIAL_KEYSPAN_USA49W=yCONFIG_USB_SERIAL_KEYSPAN_USA49WLC=yCONFIG_USB_SERIAL_KLSI=mCONFIG_USB_SERIAL_KOBIL_SCT=mCONFIG_USB_SERIAL_MCT_U232=m
# CONFIG_USB_SERIAL_MOS7720 is not set
# CONFIG_USB_SERIAL_MOS7840 is not setCONFIG_USB_SERIAL_NAVMAN=mCONFIG_USB_SERIAL_PL2303=m
# CONFIG_USB_SERIAL_OTI6858 is not setCONFIG_USB_SERIAL_HP4X=mCONFIG_USB_SERIAL_SAFE=mCONFIG_USB_SERIAL_SAFE_PADDED=yCONFIG_USB_SERIAL_SIERRAWIRELESS=mCONFIG_USB_SERIAL_TI=mCONFIG_USB_SERIAL_CYBERJACK=mCONFIG_USB_SERIAL_XIRCOM=mCONFIG_USB_SERIAL_OPTION=mCONFIG_USB_SERIAL_OMNINET=m
# CONFIG_USB_SERIAL_DEBUG is not setCONFIG_USB_EZUSB=y
#
# USB Miscellaneous drivers
#CONFIG_USB_EMI62=mCONFIG_USB_EMI26=m
# CONFIG_USB_ADUTUX is not setCONFIG_USB_AUERSWALD=mCONFIG_USB_RIO500=mCONFIG_USB_LEGOTOWER=mCONFIG_USB_LCD=m
# CONFIG_USB_BERRY_CHARGE is not setCONFIG_USB_LED=m
# CONFIG_USB_CYPRESS_CY7C63 is not set
# CONFIG_USB_CYTHERM is not set
# CONFIG_USB_PHIDGET is not setCONFIG_USB_IDMOUSE=m
# CONFIG_USB_FTDI_ELAN is not setCONFIG_USB_APPLEDISPLAY=mCONFIG_USB_SISUSBVGA=mCONFIG_USB_SISUSBVGA_CON=yCONFIG_USB_LD=m
# CONFIG_USB_TRANCEVIBRATOR is not set
# CONFIG_USB_IOWARRIOR is not setCONFIG_USB_TEST=m
#
# USB DSL modem support
#
#
# USB Gadget Support
#
# CONFIG_USB_GADGET is not setCONFIG_MMC=m
# CONFIG_MMC_DEBUG is not set
# CONFIG_MMC_UNSAFE_RESUME is not set
#
# MMC/SD Card Drivers
#CONFIG_MMC_BLOCK=mCONFIG_MMC_BLOCK_BOUNCE=y
# CONFIG_SDIO_UART is not set
#
# MMC/SD Host Controller Drivers
#CONFIG_MMC_SDHCI=m
# CONFIG_MMC_RICOH_MMC is not set
# CONFIG_MMC_WBSD is not set
# CONFIG_MMC_TIFM_SD is not setCONFIG_NEW_LEDS=yCONFIG_LEDS_CLASS=m
#
# LED drivers
#
#
# LED Triggers
#
# CONFIG_LEDS_TRIGGERS is not set
# CONFIG_INFINIBAND is not set
# CONFIG_EDAC is not setCONFIG_RTC_LIB=mCONFIG_RTC_CLASS=m
#
# RTC interfaces
#CONFIG_RTC_INTF_SYSFS=yCONFIG_RTC_INTF_PROC=yCONFIG_RTC_INTF_DEV=yCONFIG_RTC_INTF_DEV_UIE_EMUL=y
# CONFIG_RTC_DRV_TEST is not set
#
# SPI RTC drivers
#
#
# Platform RTC drivers
#CONFIG_RTC_DRV_CMOS=mCONFIG_RTC_DRV_DS1553=m
# CONFIG_RTC_DRV_STK17TA8 is not setCONFIG_RTC_DRV_DS1742=m
# CONFIG_RTC_DRV_M48T86 is not set
# CONFIG_RTC_DRV_M48T59 is not setCONFIG_RTC_DRV_V3020=m
#
# on-CPU RTC drivers
#
# CONFIG_DMADEVICES is not set
# CONFIG_AUXDISPLAY is not setCONFIG_VIRTUALIZATION=yCONFIG_KVM=mCONFIG_KVM_INTEL=m
# CONFIG_KVM_AMD is not set
#
# Userspace I/O
#
# CONFIG_UIO is not set
#
# File systems
#
# CONFIG_EXT2_FS is not setCONFIG_EXT3_FS=yCONFIG_EXT3_FS_XATTR=yCONFIG_EXT3_FS_POSIX_ACL=yCONFIG_EXT3_FS_SECURITY=y
# CONFIG_EXT4DEV_FS is not setCONFIG_JBD=yCONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not setCONFIG_FS_POSIX_ACL=yCONFIG_XFS_FS=y
# CONFIG_XFS_QUOTA is not set
# CONFIG_XFS_SECURITY is not set
# CONFIG_XFS_POSIX_ACL is not set
# CONFIG_XFS_RT is not set
# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not setCONFIG_INOTIFY=yCONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not setCONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not setCONFIG_AUTOFS4_FS=m
# CONFIG_FUSE_FS is not set
#
# CD-ROM/DVD Filesystems
#CONFIG_ISO9660_FS=yCONFIG_JOLIET=yCONFIG_ZISOFS=yCONFIG_UDF_FS=mCONFIG_UDF_NLS=y
#
# DOS/FAT/NT Filesystems
#CONFIG_FAT_FS=mCONFIG_MSDOS_FS=mCONFIG_VFAT_FS=mCONFIG_FAT_DEFAULT_CODEPAGE=437CONFIG_FAT_DEFAULT_IOCHARSET="ascii"CONFIG_NTFS_FS=m
# CONFIG_NTFS_DEBUG is not set
# CONFIG_NTFS_RW is not set
#
# Pseudo filesystems
#CONFIG_PROC_FS=yCONFIG_PROC_KCORE=yCONFIG_PROC_SYSCTL=yCONFIG_SYSFS=yCONFIG_TMPFS=y
# CONFIG_TMPFS_POSIX_ACL is not setCONFIG_HUGETLBFS=yCONFIG_HUGETLB_PAGE=yCONFIG_CONFIGFS_FS=m
#
# Miscellaneous filesystems
#
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_ECRYPT_FS is not set
# CONFIG_HFS_FS is not setCONFIG_HFSPLUS_FS=m
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not setCONFIG_NETWORK_FILESYSTEMS=yCONFIG_NFS_FS=yCONFIG_NFS_V3=yCONFIG_NFS_V3_ACL=y
# CONFIG_NFS_V4 is not set
# CONFIG_NFS_DIRECTIO is not setCONFIG_NFSD=mCONFIG_NFSD_V2_ACL=yCONFIG_NFSD_V3=yCONFIG_NFSD_V3_ACL=y
# CONFIG_NFSD_V4 is not setCONFIG_NFSD_TCP=yCONFIG_LOCKD=yCONFIG_LOCKD_V4=yCONFIG_EXPORTFS=mCONFIG_NFS_ACL_SUPPORT=yCONFIG_NFS_COMMON=yCONFIG_SUNRPC=yCONFIG_SUNRPC_GSS=yCONFIG_SUNRPC_BIND34=yCONFIG_RPCSEC_GSS_KRB5=y
# CONFIG_RPCSEC_GSS_SPKM3 is not set
# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
#
# Partition Types
#CONFIG_PARTITION_ADVANCED=y
# CONFIG_ACORN_PARTITION is not set
# CONFIG_OSF_PARTITION is not set
# CONFIG_AMIGA_PARTITION is not set
# CONFIG_ATARI_PARTITION is not setCONFIG_MAC_PARTITION=yCONFIG_MSDOS_PARTITION=y
# CONFIG_BSD_DISKLABEL is not set
# CONFIG_MINIX_SUBPARTITION is not set
# CONFIG_SOLARIS_X86_PARTITION is not set
# CONFIG_UNIXWARE_DISKLABEL is not setCONFIG_LDM_PARTITION=y
# CONFIG_LDM_DEBUG is not set
# CONFIG_SGI_PARTITION is not set
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
# CONFIG_KARMA_PARTITION is not set
# CONFIG_EFI_PARTITION is not set
# CONFIG_SYSV68_PARTITION is not setCONFIG_NLS=yCONFIG_NLS_DEFAULT="utf8"CONFIG_NLS_CODEPAGE_437=yCONFIG_NLS_CODEPAGE_737=mCONFIG_NLS_CODEPAGE_775=mCONFIG_NLS_CODEPAGE_850=mCONFIG_NLS_CODEPAGE_852=mCONFIG_NLS_CODEPAGE_855=mCONFIG_NLS_CODEPAGE_857=mCONFIG_NLS_CODEPAGE_860=mCONFIG_NLS_CODEPAGE_861=mCONFIG_NLS_CODEPAGE_862=mCONFIG_NLS_CODEPAGE_863=mCONFIG_NLS_CODEPAGE_864=mCONFIG_NLS_CODEPAGE_865=mCONFIG_NLS_CODEPAGE_866=mCONFIG_NLS_CODEPAGE_869=mCONFIG_NLS_CODEPAGE_936=mCONFIG_NLS_CODEPAGE_950=mCONFIG_NLS_CODEPAGE_932=mCONFIG_NLS_CODEPAGE_949=mCONFIG_NLS_CODEPAGE_874=mCONFIG_NLS_ISO8859_8=mCONFIG_NLS_CODEPAGE_1250=mCONFIG_NLS_CODEPAGE_1251=mCONFIG_NLS_ASCII=yCONFIG_NLS_ISO8859_1=mCONFIG_NLS_ISO8859_2=mCONFIG_NLS_ISO8859_3=mCONFIG_NLS_ISO8859_4=mCONFIG_NLS_ISO8859_5=mCONFIG_NLS_ISO8859_6=mCONFIG_NLS_ISO8859_7=mCONFIG_NLS_ISO8859_9=mCONFIG_NLS_ISO8859_13=mCONFIG_NLS_ISO8859_14=mCONFIG_NLS_ISO8859_15=mCONFIG_NLS_KOI8_R=mCONFIG_NLS_KOI8_U=mCONFIG_NLS_UTF8=m
# CONFIG_DLM is not setCONFIG_INSTRUMENTATION=y
# CONFIG_PROFILING is not set
# CONFIG_KPROBES is not set
# CONFIG_MARKERS is not set
#
# Kernel hacking
#CONFIG_TRACE_IRQFLAGS_SUPPORT=y
# CONFIG_PRINTK_TIME is not setCONFIG_ENABLE_WARN_DEPRECATED=yCONFIG_ENABLE_MUST_CHECK=yCONFIG_MAGIC_SYSRQ=y
# CONFIG_UNUSED_SYMBOLS is not set
# CONFIG_DEBUG_FS is not set
# CONFIG_HEADERS_CHECK is not setCONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_SHIRQ is not setCONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHED_DEBUG is not set
# CONFIG_SCHEDSTATS is not setCONFIG_TIMER_STATS=y
# CONFIG_SLUB_DEBUG_ON is not setCONFIG_DEBUG_PREEMPT=y
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_MUTEXES is not set
# CONFIG_DEBUG_LOCK_ALLOC is not set
# CONFIG_PROVE_LOCKING is not set
# CONFIG_LOCK_STAT is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_DEBUG_KOBJECT is not set
# CONFIG_DEBUG_HIGHMEM is not setCONFIG_DEBUG_BUGVERBOSE=yCONFIG_DEBUG_INFO=y
# CONFIG_DEBUG_VM is not set
# CONFIG_DEBUG_LIST is not set
# CONFIG_DEBUG_SG is not setCONFIG_FRAME_POINTER=yCONFIG_FORCED_INLINING=y
# CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_FAULT_INJECTION is not set
# CONFIG_SAMPLES is not setCONFIG_EARLY_PRINTK=y
# CONFIG_DEBUG_STACKOVERFLOW is not set
# CONFIG_DEBUG_STACK_USAGE is not set
#
# Page alloc debug is incompatible with Software Suspend on i386 #
# CONFIG_DEBUG_RODATA is not set
# CONFIG_4KSTACKS is not set CONFIG_X86_FIND_SMP_CONFIG=yCONFIG_X86_MPPARSE=yCONFIG_DOUBLEFAULT=y
#
# Security options
#CONFIG_KEYS=y
# CONFIG_KEYS_DEBUG_PROC_KEYS is not setCONFIG_SECURITY=yCONFIG_SECURITY_NETWORK=yCONFIG_SECURITY_NETWORK_XFRM=yCONFIG_SECURITY_CAPABILITIES=y
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
# CONFIG_SECURITY_ROOTPLUG is not setCONFIG_CRYPTO=yCONFIG_CRYPTO_ALGAPI=yCONFIG_CRYPTO_BLKCIPHER=yCONFIG_CRYPTO_HASH=yCONFIG_CRYPTO_MANAGER=yCONFIG_CRYPTO_HMAC=y
# CONFIG_CRYPTO_XCBC is not setCONFIG_CRYPTO_NULL=mCONFIG_CRYPTO_MD4=mCONFIG_CRYPTO_MD5=yCONFIG_CRYPTO_SHA1=yCONFIG_CRYPTO_SHA256=mCONFIG_CRYPTO_SHA512=mCONFIG_CRYPTO_WP512=mCONFIG_CRYPTO_TGR192=m
# CONFIG_CRYPTO_GF128MUL is not setCONFIG_CRYPTO_ECB=mCONFIG_CRYPTO_CBC=yCONFIG_CRYPTO_PCBC=m
# CONFIG_CRYPTO_LRW is not set
# CONFIG_CRYPTO_XTS is not set
# CONFIG_CRYPTO_CRYPTD is not setCONFIG_CRYPTO_DES=y
# CONFIG_CRYPTO_FCRYPT is not setCONFIG_CRYPTO_BLOWFISH=mCONFIG_CRYPTO_TWOFISH=mCONFIG_CRYPTO_TWOFISH_COMMON=m
# CONFIG_CRYPTO_TWOFISH_586 is not setCONFIG_CRYPTO_SERPENT=mCONFIG_CRYPTO_AES=mCONFIG_CRYPTO_AES_586=mCONFIG_CRYPTO_CAST5=mCONFIG_CRYPTO_CAST6=mCONFIG_CRYPTO_TEA=mCONFIG_CRYPTO_ARC4=mCONFIG_CRYPTO_KHAZAD=mCONFIG_CRYPTO_ANUBIS=m
# CONFIG_CRYPTO_SEED is not setCONFIG_CRYPTO_DEFLATE=mCONFIG_CRYPTO_MICHAEL_MIC=mCONFIG_CRYPTO_CRC32C=m
# CONFIG_CRYPTO_CAMELLIA is not set
# CONFIG_CRYPTO_TEST is not set
# CONFIG_CRYPTO_AUTHENC is not setCONFIG_CRYPTO_HW=yCONFIG_CRYPTO_DEV_PADLOCK=mCONFIG_CRYPTO_DEV_PADLOCK_AES=mCONFIG_CRYPTO_DEV_PADLOCK_SHA=mCONFIG_CRYPTO_DEV_GEODE=m
#
# Library routines
#CONFIG_BITREVERSE=yCONFIG_CRC_CCITT=mCONFIG_CRC16=m
# CONFIG_CRC_ITU_T is not setCONFIG_CRC32=y
# CONFIG_CRC7 is not setCONFIG_LIBCRC32C=mCONFIG_ZLIB_INFLATE=yCONFIG_ZLIB_DEFLATE=mCONFIG_PLIST=yCONFIG_HAS_IOMEM=yCONFIG_HAS_IOPORT=yCONFIG_HAS_DMA=yCONFIG_GENERIC_HARDIRQS=yCONFIG_GENERIC_IRQ_PROBE=yCONFIG_GENERIC_PENDING_IRQ=yCONFIG_X86_SMP=yCONFIG_X86_HT=yCONFIG_X86_BIOS_REBOOT=yCONFIG_X86_TRAMPOLINE=yCONFIG_KTIME_SCALAR=y
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
kvm-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/kvm-devel
Re: [PATCH 5/24] smp x86 consolidation
In reply to Glauber de Oliveira CostaQuoted 10 lines · Glauber de Oliveira Costa
Quoted 2 lines
arch/x86/kernel/built-in.o: In function `native_smp_send_reschedule':/home/jeremy/hg/xen/paravirt/linux/arch/x86/kernel/smpcommon.c:262:undefined reference to `genapic'
Quoted 2 lines
arch/x86/kernel/built-in.o: In function `native_smp_call_function_mask':/home/jeremy/hg/xen/paravirt/linux/arch/x86/kernel/smpcommon.c:113:undefined reference to `genapic'
Ok, it compiled just fine here. I bet it's due to one of that i386 lots of variants.
Which subarchitecture are you compiling for, jeremy ?
Default (CONFIG_X86_PC). Config attached.
J
#
# Automatically generated make config: don't edit # Linux kernel version: 2.6.24-rc2
# Fri Nov 9 15:19:56 2007
#CONFIG_X86_32=yCONFIG_GENERIC_TIME=yCONFIG_GENERIC_CMOS_UPDATE=y CONFIG_CLOCKSOURCE_WATCHDOG=y CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y CONFIG_LOCKDEP_SUPPORT=y CONFIG_STACKTRACE_SUPPORT=y CONFIG_SEMAPHORE_SLEEPERS=yCONFIG_X86=yCONFIG_MMU=yCONFIG_ZONE_DMA=yCONFIG_QUICKLIST=yCONFIG_GENERIC_ISA_DMA=yCONFIG_GENERIC_IOMAP=yCONFIG_GENERIC_BUG=yCONFIG_GENERIC_HWEIGHT=y CONFIG_ARCH_MAY_HAVE_PC_FDC=yCONFIG_DMI=y CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
# General setup
#CONFIG_EXPERIMENTAL=yCONFIG_LOCK_KERNEL=yCONFIG_INIT_ENV_ARG_LIMIT=32CONFIG_LOCALVERSION=""
# CONFIG_LOCALVERSION_AUTO is not setCONFIG_SWAP=yCONFIG_SYSVIPC=yCONFIG_SYSVIPC_SYSCTL=yCONFIG_POSIX_MQUEUE=yCONFIG_BSD_PROCESS_ACCT=y
# CONFIG_BSD_PROCESS_ACCT_V3 is not setCONFIG_TASKSTATS=yCONFIG_TASK_DELAY_ACCT=y
# CONFIG_TASK_XACCT is not set
# CONFIG_USER_NS is not set
# CONFIG_AUDIT is not set
# CONFIG_IKCONFIG is not setCONFIG_LOG_BUF_SHIFT=17
# CONFIG_CGROUPS is not setCONFIG_FAIR_GROUP_SCHED=yCONFIG_FAIR_USER_SCHED=y
# CONFIG_FAIR_CGROUP_SCHED is not setCONFIG_SYSFS_DEPRECATED=yCONFIG_RELAY=yCONFIG_BLK_DEV_INITRD=yCONFIG_INITRAMFS_SOURCE=""CONFIG_CC_OPTIMIZE_FOR_SIZE=yCONFIG_SYSCTL=y
# CONFIG_EMBEDDED is not setCONFIG_UID16=yCONFIG_SYSCTL_SYSCALL=yCONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not setCONFIG_KALLSYMS_EXTRA_PASS=yCONFIG_HOTPLUG=yCONFIG_PRINTK=yCONFIG_BUG=yCONFIG_ELF_CORE=yCONFIG_BASE_FULL=yCONFIG_FUTEX=yCONFIG_ANON_INODES=yCONFIG_EPOLL=yCONFIG_SIGNALFD=yCONFIG_EVENTFD=yCONFIG_SHMEM=yCONFIG_VM_EVENT_COUNTERS=yCONFIG_SLUB_DEBUG=y
# CONFIG_SLAB is not setCONFIG_SLUB=y
# CONFIG_SLOB is not setCONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not setCONFIG_BASE_SMALL=0CONFIG_MODULES=yCONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_FORCE_UNLOAD is not setCONFIG_MODVERSIONS=yCONFIG_MODULE_SRCVERSION_ALL=yCONFIG_KMOD=yCONFIG_STOP_MACHINE=yCONFIG_BLOCK=y
# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
# CONFIG_LSF is not setCONFIG_BLK_DEV_BSG=y
#
# IO Schedulers
#CONFIG_IOSCHED_NOOP=yCONFIG_IOSCHED_AS=yCONFIG_IOSCHED_DEADLINE=yCONFIG_IOSCHED_CFQ=y
# CONFIG_DEFAULT_AS is not set
# CONFIG_DEFAULT_DEADLINE is not setCONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not setCONFIG_DEFAULT_IOSCHED="cfq"CONFIG_PREEMPT_NOTIFIERS=y
#
# Processor type and features
#CONFIG_TICK_ONESHOT=yCONFIG_NO_HZ=yCONFIG_HIGH_RES_TIMERS=yCONFIG_GENERIC_CLOCKEVENTS_BUILD=yCONFIG_SMP=yCONFIG_X86_PC=y
# CONFIG_X86_ELAN is not set
# CONFIG_X86_VOYAGER is not set
# CONFIG_X86_NUMAQ is not set
# CONFIG_X86_SUMMIT is not set
# CONFIG_X86_BIGSMP is not set
# CONFIG_X86_VISWS is not set
# CONFIG_X86_GENERICARCH is not set
# CONFIG_X86_ES7000 is not setCONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=yCONFIG_PARAVIRT=yCONFIG_PARAVIRT_GUEST=yCONFIG_XEN=yCONFIG_VMI=y
# CONFIG_M386 is not set
# CONFIG_M486 is not set
# CONFIG_M586 is not set
# CONFIG_M586TSC is not set
# CONFIG_M586MMX is not set
# CONFIG_M686 is not set
# CONFIG_MPENTIUMII is not set
# CONFIG_MPENTIUMIII is not setCONFIG_MPENTIUMM=y
# CONFIG_MCORE2 is not set
# CONFIG_MPENTIUM4 is not set
# CONFIG_MK6 is not set
# CONFIG_MK7 is not set
# CONFIG_MK8 is not set
# CONFIG_MCRUSOE is not set
# CONFIG_MEFFICEON is not set
# CONFIG_MWINCHIPC6 is not set
# CONFIG_MWINCHIP2 is not set
# CONFIG_MWINCHIP3D is not set
# CONFIG_MGEODEGX1 is not set
# CONFIG_MGEODE_LX is not set
# CONFIG_MCYRIXIII is not set
# CONFIG_MVIAC3_2 is not set
# CONFIG_MVIAC7 is not set
# CONFIG_X86_GENERIC is not setCONFIG_X86_CMPXCHG=yCONFIG_X86_L1_CACHE_SHIFT=6CONFIG_X86_XADD=yCONFIG_RWSEM_XCHGADD_ALGORITHM=y
# CONFIG_ARCH_HAS_ILOG2_U32 is not set
# CONFIG_ARCH_HAS_ILOG2_U64 is not setCONFIG_GENERIC_CALIBRATE_DELAY=yCONFIG_X86_WP_WORKS_OK=yCONFIG_X86_INVLPG=yCONFIG_X86_BSWAP=yCONFIG_X86_POPAD_OK=yCONFIG_X86_GOOD_APIC=yCONFIG_X86_INTEL_USERCOPY=yCONFIG_X86_USE_PPRO_CHECKSUM=yCONFIG_X86_TSC=yCONFIG_X86_CMOV=yCONFIG_X86_MINIMUM_CPU_FAMILY=4CONFIG_HPET_TIMER=yCONFIG_NR_CPUS=4
# CONFIG_SCHED_SMT is not setCONFIG_SCHED_MC=y
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not setCONFIG_PREEMPT=yCONFIG_PREEMPT_BKL=yCONFIG_X86_LOCAL_APIC=yCONFIG_X86_IO_APIC=yCONFIG_X86_MCE=yCONFIG_X86_MCE_NONFATAL=yCONFIG_X86_MCE_P4THERMAL=yCONFIG_VM86=y
# CONFIG_TOSHIBA is not set
# CONFIG_I8K is not set
# CONFIG_X86_REBOOTFIXUPS is not setCONFIG_MICROCODE=mCONFIG_MICROCODE_OLD_INTERFACE=yCONFIG_X86_MSR=mCONFIG_X86_CPUID=m
#
# Firmware Drivers
#CONFIG_EDD=m
# CONFIG_DELL_RBU is not set
# CONFIG_DCDBAS is not setCONFIG_DMIID=y
# CONFIG_NOHIGHMEM is not set
# CONFIG_HIGHMEM4G is not setCONFIG_HIGHMEM64G=yCONFIG_PAGE_OFFSET=0xC0000000CONFIG_HIGHMEM=yCONFIG_X86_PAE=yCONFIG_ARCH_FLATMEM_ENABLE=yCONFIG_ARCH_SPARSEMEM_ENABLE=yCONFIG_ARCH_SELECT_MEMORY_MODEL=yCONFIG_ARCH_POPULATES_NODE_MAP=yCONFIG_SELECT_MEMORY_MODEL=yCONFIG_FLATMEM_MANUAL=y
# CONFIG_DISCONTIGMEM_MANUAL is not set
# CONFIG_SPARSEMEM_MANUAL is not setCONFIG_FLATMEM=yCONFIG_FLAT_NODE_MEM_MAP=yCONFIG_SPARSEMEM_STATIC=y
# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not setCONFIG_SPLIT_PTLOCK_CPUS=4CONFIG_RESOURCES_64BIT=yCONFIG_ZONE_DMA_FLAG=1CONFIG_BOUNCE=yCONFIG_NR_QUICK=1CONFIG_VIRT_TO_BUS=yCONFIG_HIGHPTE=y
# CONFIG_MATH_EMULATION is not setCONFIG_MTRR=y
# CONFIG_EFI is not set
# CONFIG_IRQBALANCE is not set
# CONFIG_SECCOMP is not set
# CONFIG_HZ_100 is not setCONFIG_HZ_250=y
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not setCONFIG_HZ=250
# CONFIG_KEXEC is not set
# CONFIG_CRASH_DUMP is not setCONFIG_PHYSICAL_START=0x100000
# CONFIG_RELOCATABLE is not setCONFIG_PHYSICAL_ALIGN=0x100000CONFIG_HOTPLUG_CPU=y
# CONFIG_COMPAT_VDSO is not setCONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
#
# Power management options (ACPI, APM)
#CONFIG_PM=y
# CONFIG_PM_LEGACY is not setCONFIG_PM_DEBUG=y
# CONFIG_PM_VERBOSE is not set
# CONFIG_PM_TRACE is not setCONFIG_PM_SLEEP_SMP=yCONFIG_PM_SLEEP=yCONFIG_SUSPEND_SMP_POSSIBLE=yCONFIG_SUSPEND=yCONFIG_HIBERNATION_SMP_POSSIBLE=yCONFIG_HIBERNATION=yCONFIG_PM_STD_PARTITION=""CONFIG_ACPI=yCONFIG_ACPI_SLEEP=yCONFIG_ACPI_PROCFS=y
# CONFIG_ACPI_PROC_EVENT is not setCONFIG_ACPI_AC=yCONFIG_ACPI_BATTERY=yCONFIG_ACPI_BUTTON=yCONFIG_ACPI_VIDEO=mCONFIG_ACPI_FAN=yCONFIG_ACPI_DOCK=yCONFIG_ACPI_BAY=yCONFIG_ACPI_PROCESSOR=yCONFIG_ACPI_HOTPLUG_CPU=yCONFIG_ACPI_THERMAL=y
# CONFIG_ACPI_ASUS is not set
# CONFIG_ACPI_TOSHIBA is not setCONFIG_ACPI_BLACKLIST_YEAR=1999
# CONFIG_ACPI_DEBUG is not setCONFIG_ACPI_EC=yCONFIG_ACPI_POWER=yCONFIG_ACPI_SYSTEM=yCONFIG_X86_PM_TIMER=yCONFIG_ACPI_CONTAINER=yCONFIG_ACPI_SBS=m
# CONFIG_APM is not set
#
# CPU Frequency scaling
#CONFIG_CPU_FREQ=yCONFIG_CPU_FREQ_TABLE=y
# CONFIG_CPU_FREQ_DEBUG is not set CONFIG_CPU_FREQ_STAT=y CONFIG_CPU_FREQ_STAT_DETAILS=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE=y CONFIG_CPU_FREQ_GOV_PERFORMANCE=y CONFIG_CPU_FREQ_GOV_POWERSAVE=y CONFIG_CPU_FREQ_GOV_USERSPACE=y CONFIG_CPU_FREQ_GOV_ONDEMAND=y CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
#
# CPUFreq processor drivers
#CONFIG_X86_ACPI_CPUFREQ=y
# CONFIG_X86_POWERNOW_K6 is not set
# CONFIG_X86_POWERNOW_K7 is not set
# CONFIG_X86_POWERNOW_K8 is not set
# CONFIG_X86_GX_SUSPMOD is not set
# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
# CONFIG_X86_SPEEDSTEP_ICH is not set
# CONFIG_X86_SPEEDSTEP_SMI is not set
# CONFIG_X86_P4_CLOCKMOD is not set
# CONFIG_X86_CPUFREQ_NFORCE2 is not set
# CONFIG_X86_LONGRUN is not set
# CONFIG_X86_LONGHAUL is not set
# CONFIG_X86_E_POWERSAVER is not set
#
# shared options # # CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set # CONFIG_X86_SPEEDSTEP_LIB is not set CONFIG_CPU_IDLE=y CONFIG_CPU_IDLE_GOV_LADDER=y CONFIG_CPU_IDLE_GOV_MENU=y
#
# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
#CONFIG_PCI=y
# CONFIG_PCI_GOBIOS is not set
# CONFIG_PCI_GOMMCONFIG is not set
# CONFIG_PCI_GODIRECT is not setCONFIG_PCI_GOANY=yCONFIG_PCI_BIOS=yCONFIG_PCI_DIRECT=yCONFIG_PCI_MMCONFIG=yCONFIG_PCI_DOMAINS=yCONFIG_PCIEPORTBUS=yCONFIG_HOTPLUG_PCI_PCIE=yCONFIG_PCIEAER=yCONFIG_ARCH_SUPPORTS_MSI=yCONFIG_PCI_MSI=y
# CONFIG_PCI_LEGACY is not set
# CONFIG_PCI_DEBUG is not setCONFIG_HT_IRQ=yCONFIG_ISA_DMA_API=y
# CONFIG_ISA is not set
# CONFIG_MCA is not set
# CONFIG_SCx200 is not setCONFIG_PCCARD=y
# CONFIG_PCMCIA_DEBUG is not setCONFIG_PCMCIA=yCONFIG_PCMCIA_LOAD_CIS=y
# CONFIG_PCMCIA_IOCTL is not setCONFIG_CARDBUS=y
#
# PC-card bridges
#CONFIG_YENTA=yCONFIG_YENTA_O2=yCONFIG_YENTA_RICOH=yCONFIG_YENTA_TI=yCONFIG_YENTA_ENE_TUNE=yCONFIG_YENTA_TOSHIBA=y
# CONFIG_PD6729 is not set
# CONFIG_I82092 is not setCONFIG_PCCARD_NONSTATIC=yCONFIG_HOTPLUG_PCI=y
# CONFIG_HOTPLUG_PCI_FAKE is not setCONFIG_HOTPLUG_PCI_ACPI=yCONFIG_HOTPLUG_PCI_ACPI_IBM=y
# CONFIG_HOTPLUG_PCI_CPCI is not set
# CONFIG_HOTPLUG_PCI_SHPC is not set
#
# Executable file formats
#CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_AOUT is not setCONFIG_BINFMT_MISC=y
#
# Networking
#CONFIG_NET=y
#
# Networking options
#CONFIG_PACKET=yCONFIG_PACKET_MMAP=yCONFIG_UNIX=yCONFIG_XFRM=yCONFIG_XFRM_USER=y
# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_XFRM_MIGRATE is not setCONFIG_NET_KEY=m
# CONFIG_NET_KEY_MIGRATE is not setCONFIG_INET=yCONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not setCONFIG_IP_FIB_HASH=y
# CONFIG_IP_PNP is not setCONFIG_NET_IPIP=mCONFIG_NET_IPGRE=mCONFIG_NET_IPGRE_BROADCAST=yCONFIG_IP_MROUTE=yCONFIG_IP_PIMSM_V1=yCONFIG_IP_PIMSM_V2=y
# CONFIG_ARPD is not setCONFIG_SYN_COOKIES=yCONFIG_INET_AH=mCONFIG_INET_ESP=mCONFIG_INET_IPCOMP=mCONFIG_INET_XFRM_TUNNEL=mCONFIG_INET_TUNNEL=mCONFIG_INET_XFRM_MODE_TRANSPORT=mCONFIG_INET_XFRM_MODE_TUNNEL=m
# CONFIG_INET_XFRM_MODE_BEET is not setCONFIG_INET_LRO=yCONFIG_INET_DIAG=mCONFIG_INET_TCP_DIAG=m
# CONFIG_TCP_CONG_ADVANCED is not setCONFIG_TCP_CONG_CUBIC=yCONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_TCP_MD5SIG is not setCONFIG_IP_VS=m
# CONFIG_IP_VS_DEBUG is not setCONFIG_IP_VS_TAB_BITS=12
#
# IPVS transport protocol load balancing support
#CONFIG_IP_VS_PROTO_TCP=yCONFIG_IP_VS_PROTO_UDP=yCONFIG_IP_VS_PROTO_ESP=yCONFIG_IP_VS_PROTO_AH=y
#
# IPVS scheduler
#CONFIG_IP_VS_RR=mCONFIG_IP_VS_WRR=mCONFIG_IP_VS_LC=mCONFIG_IP_VS_WLC=mCONFIG_IP_VS_LBLC=mCONFIG_IP_VS_LBLCR=mCONFIG_IP_VS_DH=mCONFIG_IP_VS_SH=mCONFIG_IP_VS_SED=mCONFIG_IP_VS_NQ=m
#
# IPVS application helper
#CONFIG_IP_VS_FTP=m
# CONFIG_IPV6 is not set
# CONFIG_INET6_XFRM_TUNNEL is not set
# CONFIG_INET6_TUNNEL is not set
# CONFIG_NETLABEL is not set
# CONFIG_NETWORK_SECMARK is not setCONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not setCONFIG_BRIDGE_NETFILTER=y
#
# Core Netfilter Configuration
#
# CONFIG_NETFILTER_NETLINK is not setCONFIG_NF_CONNTRACK_ENABLED=mCONFIG_NF_CONNTRACK=m
# CONFIG_NF_CT_ACCT is not set
# CONFIG_NF_CONNTRACK_MARK is not set
# CONFIG_NF_CONNTRACK_EVENTS is not set
# CONFIG_NF_CT_PROTO_SCTP is not set
# CONFIG_NF_CT_PROTO_UDPLITE is not set
# CONFIG_NF_CONNTRACK_AMANDA is not setCONFIG_NF_CONNTRACK_FTP=m
# CONFIG_NF_CONNTRACK_H323 is not set
# CONFIG_NF_CONNTRACK_IRC is not set
# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
# CONFIG_NF_CONNTRACK_PPTP is not set
# CONFIG_NF_CONNTRACK_SANE is not set
# CONFIG_NF_CONNTRACK_SIP is not set
# CONFIG_NF_CONNTRACK_TFTP is not setCONFIG_NETFILTER_XTABLES=m
# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
# CONFIG_NETFILTER_XT_TARGET_MARK is not set
# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set
# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set
# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
# CONFIG_NETFILTER_XT_MATCH_ESP is not set
# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
# CONFIG_NETFILTER_XT_MATCH_MAC is not set
# CONFIG_NETFILTER_XT_MATCH_MARK is not set
# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set
# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
# CONFIG_NETFILTER_XT_MATCH_REALM is not set
# CONFIG_NETFILTER_XT_MATCH_SCTP is not setCONFIG_NETFILTER_XT_MATCH_STATE=m
# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
# CONFIG_NETFILTER_XT_MATCH_STRING is not set
# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
# CONFIG_NETFILTER_XT_MATCH_TIME is not set
# CONFIG_NETFILTER_XT_MATCH_U32 is not set
# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
#
# IP: Netfilter Configuration
#CONFIG_NF_CONNTRACK_IPV4=mCONFIG_NF_CONNTRACK_PROC_COMPAT=y
# CONFIG_IP_NF_QUEUE is not setCONFIG_IP_NF_IPTABLES=mCONFIG_IP_NF_MATCH_IPRANGE=mCONFIG_IP_NF_MATCH_TOS=mCONFIG_IP_NF_MATCH_RECENT=mCONFIG_IP_NF_MATCH_ECN=mCONFIG_IP_NF_MATCH_AH=mCONFIG_IP_NF_MATCH_TTL=mCONFIG_IP_NF_MATCH_OWNER=mCONFIG_IP_NF_MATCH_ADDRTYPE=mCONFIG_IP_NF_FILTER=mCONFIG_IP_NF_TARGET_REJECT=mCONFIG_IP_NF_TARGET_LOG=mCONFIG_IP_NF_TARGET_ULOG=mCONFIG_NF_NAT=mCONFIG_NF_NAT_NEEDED=yCONFIG_IP_NF_TARGET_MASQUERADE=m
# CONFIG_IP_NF_TARGET_REDIRECT is not set
# CONFIG_IP_NF_TARGET_NETMAP is not set
# CONFIG_IP_NF_TARGET_SAME is not set
# CONFIG_NF_NAT_SNMP_BASIC is not setCONFIG_NF_NAT_FTP=m
# CONFIG_NF_NAT_IRC is not set
# CONFIG_NF_NAT_TFTP is not set
# CONFIG_NF_NAT_AMANDA is not set
# CONFIG_NF_NAT_PPTP is not set
# CONFIG_NF_NAT_H323 is not set
# CONFIG_NF_NAT_SIP is not set
# CONFIG_IP_NF_MANGLE is not set
# CONFIG_IP_NF_RAW is not set
# CONFIG_IP_NF_ARPTABLES is not set
#
# Bridge: Netfilter Configuration
#
# CONFIG_BRIDGE_NF_EBTABLES is not set
# CONFIG_IP_DCCP is not set
# CONFIG_IP_SCTP is not set
# CONFIG_TIPC is not set
# CONFIG_ATM is not setCONFIG_BRIDGE=mCONFIG_VLAN_8021Q=m
# CONFIG_DECNET is not setCONFIG_LLC=m
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_SCHED is not setCONFIG_NET_SCH_FIFO=y
#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not setCONFIG_BT=mCONFIG_BT_L2CAP=mCONFIG_BT_SCO=mCONFIG_BT_RFCOMM=mCONFIG_BT_RFCOMM_TTY=yCONFIG_BT_BNEP=mCONFIG_BT_BNEP_MC_FILTER=yCONFIG_BT_BNEP_PROTO_FILTER=yCONFIG_BT_HIDP=m
#
# Bluetooth device drivers
#CONFIG_BT_HCIUSB=mCONFIG_BT_HCIUSB_SCO=y
# CONFIG_BT_HCIBTSDIO is not setCONFIG_BT_HCIUART=mCONFIG_BT_HCIUART_H4=yCONFIG_BT_HCIUART_BCSP=y
# CONFIG_BT_HCIUART_LL is not setCONFIG_BT_HCIBCM203X=mCONFIG_BT_HCIBPA10X=mCONFIG_BT_HCIBFUSB=mCONFIG_BT_HCIDTL1=mCONFIG_BT_HCIBT3C=mCONFIG_BT_HCIBLUECARD=mCONFIG_BT_HCIBTUART=mCONFIG_BT_HCIVHCI=m
# CONFIG_AF_RXRPC is not set
#
# Wireless
#CONFIG_CFG80211=mCONFIG_NL80211=yCONFIG_WIRELESS_EXT=yCONFIG_MAC80211=m
# CONFIG_MAC80211_DEBUG is not setCONFIG_IEEE80211=m
# CONFIG_IEEE80211_DEBUG is not setCONFIG_IEEE80211_CRYPT_WEP=mCONFIG_IEEE80211_CRYPT_CCMP=mCONFIG_IEEE80211_CRYPT_TKIP=mCONFIG_IEEE80211_SOFTMAC=m
# CONFIG_IEEE80211_SOFTMAC_DEBUG is not setCONFIG_RFKILL=mCONFIG_RFKILL_INPUT=m
# CONFIG_NET_9P is not set
#
# Device Drivers
#
#
# Generic Driver Options
#CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"CONFIG_STANDALONE=yCONFIG_PREVENT_FIRMWARE_BUILD=yCONFIG_FW_LOADER=y
# CONFIG_DEBUG_DRIVER is not set
# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
# CONFIG_CONNECTOR is not set
# CONFIG_MTD is not setCONFIG_PARPORT=mCONFIG_PARPORT_PC=mCONFIG_PARPORT_SERIAL=mCONFIG_PARPORT_PC_FIFO=yCONFIG_PARPORT_PC_SUPERIO=yCONFIG_PARPORT_PC_PCMCIA=m
# CONFIG_PARPORT_GSC is not set
# CONFIG_PARPORT_AX88796 is not setCONFIG_PARPORT_1284=yCONFIG_PARPORT_NOT_PC=yCONFIG_PNP=y
# CONFIG_PNP_DEBUG is not set
#
# Protocols
#CONFIG_PNPACPI=yCONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_FD is not set
# CONFIG_PARIDE is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_UMEM is not set
# CONFIG_BLK_DEV_COW_COMMON is not setCONFIG_BLK_DEV_LOOP=m
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_SX8 is not set
# CONFIG_BLK_DEV_UB is not setCONFIG_BLK_DEV_RAM=yCONFIG_BLK_DEV_RAM_COUNT=16CONFIG_BLK_DEV_RAM_SIZE=16384CONFIG_BLK_DEV_RAM_BLOCKSIZE=4096CONFIG_CDROM_PKTCDVD=mCONFIG_CDROM_PKTCDVD_BUFFERS=8
# CONFIG_CDROM_PKTCDVD_WCACHE is not set
# CONFIG_ATA_OVER_ETH is not setCONFIG_XEN_BLKDEV_FRONTEND=yCONFIG_MISC_DEVICES=y
# CONFIG_IBM_ASM is not set
# CONFIG_PHANTOM is not set
# CONFIG_EEPROM_93CX6 is not set
# CONFIG_SGI_IOC4 is not set
# CONFIG_TIFM_CORE is not set
# CONFIG_ASUS_LAPTOP is not set
# CONFIG_FUJITSU_LAPTOP is not set
# CONFIG_MSI_LAPTOP is not set
# CONFIG_SONY_LAPTOP is not setCONFIG_THINKPAD_ACPI=m
# CONFIG_THINKPAD_ACPI_DEBUG is not setCONFIG_THINKPAD_ACPI_BAY=y
# CONFIG_IDE is not set
#
# SCSI device support
#
# CONFIG_RAID_ATTRS is not setCONFIG_SCSI=yCONFIG_SCSI_DMA=y
# CONFIG_SCSI_TGT is not setCONFIG_SCSI_NETLINK=yCONFIG_SCSI_PROC_FS=y
#
# SCSI support type (disk, tape, CD-ROM)
#CONFIG_BLK_DEV_SD=y
# CONFIG_CHR_DEV_ST is not set
# CONFIG_CHR_DEV_OSST is not setCONFIG_BLK_DEV_SR=mCONFIG_BLK_DEV_SR_VENDOR=yCONFIG_CHR_DEV_SG=m
# CONFIG_CHR_DEV_SCH is not set
#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs #CONFIG_SCSI_MULTI_LUN=yCONFIG_SCSI_CONSTANTS=yCONFIG_SCSI_LOGGING=y
# CONFIG_SCSI_SCAN_ASYNC is not set CONFIG_SCSI_WAIT_SCAN=m
#
# SCSI Transports
#CONFIG_SCSI_SPI_ATTRS=mCONFIG_SCSI_FC_ATTRS=mCONFIG_SCSI_ISCSI_ATTRS=mCONFIG_SCSI_SAS_ATTRS=m
# CONFIG_SCSI_SAS_LIBSAS is not set
# CONFIG_SCSI_SRP_ATTRS is not setCONFIG_SCSI_LOWLEVEL=y
# CONFIG_ISCSI_TCP is not set
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_3W_9XXX is not set
# CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_AACRAID is not set
# CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_AIC7XXX_OLD is not set
# CONFIG_SCSI_AIC79XX is not set
# CONFIG_SCSI_AIC94XX is not set
# CONFIG_SCSI_DPT_I2O is not set
# CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_ARCMSR is not set
# CONFIG_MEGARAID_NEWGEN is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_SAS is not set
# CONFIG_SCSI_HPTIOP is not set
# CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_EATA is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_IPS is not set
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_PPA is not set
# CONFIG_SCSI_IMM is not set
# CONFIG_SCSI_STEX is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_SCSI_IPR is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_QLA_FC is not set
# CONFIG_SCSI_QLA_ISCSI is not set
# CONFIG_SCSI_LPFC is not set
# CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_NSP32 is not set
# CONFIG_SCSI_DEBUG is not set
# CONFIG_SCSI_SRP is not set
# CONFIG_SCSI_LOWLEVEL_PCMCIA is not setCONFIG_ATA=y
# CONFIG_ATA_NONSTANDARD is not setCONFIG_ATA_ACPI=yCONFIG_SATA_AHCI=y
# CONFIG_SATA_SVW is not setCONFIG_ATA_PIIX=y
# CONFIG_SATA_MV is not set
# CONFIG_SATA_NV is not set
# CONFIG_PDC_ADMA is not set
# CONFIG_SATA_QSTOR is not set
# CONFIG_SATA_PROMISE is not set
# CONFIG_SATA_SX4 is not set
# CONFIG_SATA_SIL is not set
# CONFIG_SATA_SIL24 is not set
# CONFIG_SATA_SIS is not set
# CONFIG_SATA_ULI is not set
# CONFIG_SATA_VIA is not set
# CONFIG_SATA_VITESSE is not set
# CONFIG_SATA_INIC162X is not set
# CONFIG_PATA_ACPI is not set
# CONFIG_PATA_ALI is not set
# CONFIG_PATA_AMD is not set
# CONFIG_PATA_ARTOP is not set
# CONFIG_PATA_ATIIXP is not set
# CONFIG_PATA_CMD640_PCI is not set
# CONFIG_PATA_CMD64X is not set
# CONFIG_PATA_CS5520 is not set
# CONFIG_PATA_CS5530 is not set
# CONFIG_PATA_CS5535 is not set
# CONFIG_PATA_CS5536 is not set
# CONFIG_PATA_CYPRESS is not set
# CONFIG_PATA_EFAR is not setCONFIG_ATA_GENERIC=y
# CONFIG_PATA_HPT366 is not set
# CONFIG_PATA_HPT37X is not set
# CONFIG_PATA_HPT3X2N is not set
# CONFIG_PATA_HPT3X3 is not set
# CONFIG_PATA_IT821X is not set
# CONFIG_PATA_IT8213 is not set
# CONFIG_PATA_JMICRON is not set
# CONFIG_PATA_TRIFLEX is not set
# CONFIG_PATA_MARVELL is not set
# CONFIG_PATA_MPIIX is not set
# CONFIG_PATA_OLDPIIX is not set
# CONFIG_PATA_NETCELL is not set
# CONFIG_PATA_NS87410 is not set
# CONFIG_PATA_NS87415 is not set
# CONFIG_PATA_OPTI is not set
# CONFIG_PATA_OPTIDMA is not set
# CONFIG_PATA_PCMCIA is not set
# CONFIG_PATA_PDC_OLD is not set
# CONFIG_PATA_RADISYS is not set
# CONFIG_PATA_RZ1000 is not set
# CONFIG_PATA_SC1200 is not set
# CONFIG_PATA_SERVERWORKS is not set
# CONFIG_PATA_PDC2027X is not set
# CONFIG_PATA_SIL680 is not set
# CONFIG_PATA_SIS is not set
# CONFIG_PATA_VIA is not set
# CONFIG_PATA_WINBOND is not setCONFIG_MD=y
# CONFIG_BLK_DEV_MD is not setCONFIG_BLK_DEV_DM=m
# CONFIG_DM_DEBUG is not set
# CONFIG_DM_CRYPT is not setCONFIG_DM_SNAPSHOT=m
# CONFIG_DM_MIRROR is not set
# CONFIG_DM_ZERO is not set
# CONFIG_DM_MULTIPATH is not set
# CONFIG_DM_DELAY is not set
# CONFIG_DM_UEVENT is not set
# CONFIG_FUSION is not set
#
# IEEE 1394 (FireWire) support
#
# CONFIG_FIREWIRE is not setCONFIG_IEEE1394=m
#
# Subsystem Options
#
# CONFIG_IEEE1394_VERBOSEDEBUG is not set
#
# Controllers
#
#
# Texas Instruments PCILynx requires I2C
#CONFIG_IEEE1394_OHCI1394=m
#
# Protocols
#CONFIG_IEEE1394_VIDEO1394=mCONFIG_IEEE1394_SBP2=m
# CONFIG_IEEE1394_SBP2_PHYS_DMA is not setCONFIG_IEEE1394_ETH1394_ROM_ENTRY=yCONFIG_IEEE1394_ETH1394=mCONFIG_IEEE1394_DV1394=mCONFIG_IEEE1394_RAWIO=m
# CONFIG_I2O is not set
# CONFIG_MACINTOSH_DRIVERS is not setCONFIG_NETDEVICES=y
# CONFIG_NETDEVICES_MULTIQUEUE is not setCONFIG_DUMMY=mCONFIG_BONDING=m
# CONFIG_MACVLAN is not set
# CONFIG_EQUALIZER is not setCONFIG_TUN=m
# CONFIG_VETH is not set
# CONFIG_NET_SB1000 is not set
# CONFIG_IP1000 is not set
# CONFIG_ARCNET is not set
# CONFIG_PHYLIB is not setCONFIG_NET_ETHERNET=yCONFIG_MII=y
# CONFIG_HAPPYMEAL is not set
# CONFIG_SUNGEM is not set
# CONFIG_CASSINI is not set
# CONFIG_NET_VENDOR_3COM is not set
# CONFIG_NET_TULIP is not set
# CONFIG_HP100 is not set
# CONFIG_IBM_NEW_EMAC_ZMII is not set
# CONFIG_IBM_NEW_EMAC_RGMII is not set
# CONFIG_IBM_NEW_EMAC_TAH is not set
# CONFIG_IBM_NEW_EMAC_EMAC4 is not setCONFIG_NET_PCI=yCONFIG_PCNET32=y
# CONFIG_PCNET32_NAPI is not set
# CONFIG_AMD8111_ETH is not set
# CONFIG_ADAPTEC_STARFIRE is not set
# CONFIG_B44 is not set
# CONFIG_FORCEDETH is not set
# CONFIG_EEPRO100 is not set
# CONFIG_E100 is not set
# CONFIG_FEALNX is not set
# CONFIG_NATSEMI is not setCONFIG_NE2K_PCI=y
# CONFIG_8139CP is not setCONFIG_8139TOO=yCONFIG_8139TOO_PIO=y
# CONFIG_8139TOO_TUNE_TWISTER is not set
# CONFIG_8139TOO_8129 is not set
# CONFIG_8139_OLD_RX_RESET is not set
# CONFIG_SIS900 is not set
# CONFIG_EPIC100 is not set
# CONFIG_SUNDANCE is not set
# CONFIG_TLAN is not set
# CONFIG_VIA_RHINE is not set
# CONFIG_SC92031 is not set
# CONFIG_NET_POCKET is not setCONFIG_NETDEV_1000=y
# CONFIG_ACENIC is not set
# CONFIG_DL2K is not setCONFIG_E1000=m
# CONFIG_E1000_NAPI is not set
# CONFIG_E1000_DISABLE_PACKET_SPLIT is not setCONFIG_E1000E=m
# CONFIG_NS83820 is not set
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_R8169 is not set
# CONFIG_SIS190 is not set
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
# CONFIG_SK98LIN is not set
# CONFIG_VIA_VELOCITY is not set
# CONFIG_TIGON3 is not set
# CONFIG_BNX2 is not set
# CONFIG_QLA3XXX is not set
# CONFIG_ATL1 is not set
# CONFIG_NETDEV_10000 is not set
# CONFIG_TR is not set
#
# Wireless LAN
#
# CONFIG_WLAN_PRE80211 is not setCONFIG_WLAN_80211=y
# CONFIG_PCMCIA_RAYCS is not set
# CONFIG_IPW2100 is not set
# CONFIG_IPW2200 is not set
# CONFIG_LIBERTAS is not set
# CONFIG_AIRO is not set
# CONFIG_HERMES is not set
# CONFIG_ATMEL is not set
# CONFIG_AIRO_CS is not set
# CONFIG_PCMCIA_WL3501 is not set
# CONFIG_PRISM54 is not set
# CONFIG_USB_ZD1201 is not set
# CONFIG_RTL8187 is not set
# CONFIG_ADM8211 is not set
# CONFIG_P54_COMMON is not setCONFIG_IWLWIFI=yCONFIG_IWLWIFI_DEBUG=yCONFIG_IWLWIFI_SENSITIVITY=yCONFIG_IWLWIFI_SPECTRUM_MEASUREMENT=yCONFIG_IWLWIFI_QOS=y
# CONFIG_IWL4965 is not setCONFIG_IWL3945=m
# CONFIG_HOSTAP is not set
# CONFIG_BCM43XX is not set
# CONFIG_B43 is not set
# CONFIG_B43LEGACY is not set
# CONFIG_ZD1211RW is not set
# CONFIG_RT2X00 is not set
#
# USB Network Adapters
#CONFIG_USB_CATC=mCONFIG_USB_KAWETH=mCONFIG_USB_PEGASUS=mCONFIG_USB_RTL8150=mCONFIG_USB_USBNET_MII=mCONFIG_USB_USBNET=mCONFIG_USB_NET_AX8817X=mCONFIG_USB_NET_CDCETHER=m
# CONFIG_USB_NET_DM9601 is not setCONFIG_USB_NET_GL620A=mCONFIG_USB_NET_NET1080=mCONFIG_USB_NET_PLUSB=m
# CONFIG_USB_NET_MCS7830 is not setCONFIG_USB_NET_RNDIS_HOST=mCONFIG_USB_NET_CDC_SUBSET=mCONFIG_USB_ALI_M5632=yCONFIG_USB_AN2720=yCONFIG_USB_BELKIN=yCONFIG_USB_ARMLINUX=yCONFIG_USB_EPSON2888=y
# CONFIG_USB_KC2190 is not setCONFIG_USB_NET_ZAURUS=m
# CONFIG_NET_PCMCIA is not set
# CONFIG_WAN is not setCONFIG_XEN_NETDEV_FRONTEND=y
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
# CONFIG_PLIP is not setCONFIG_PPP=mCONFIG_PPP_MULTILINK=yCONFIG_PPP_FILTER=yCONFIG_PPP_ASYNC=mCONFIG_PPP_SYNC_TTY=mCONFIG_PPP_DEFLATE=mCONFIG_PPP_BSDCOMP=m
# CONFIG_PPP_MPPE is not set
# CONFIG_PPPOE is not set
# CONFIG_PPPOL2TP is not set
# CONFIG_SLIP is not setCONFIG_SLHC=m
# CONFIG_NET_FC is not set
# CONFIG_SHAPER is not setCONFIG_NETCONSOLE=m
# CONFIG_NETCONSOLE_DYNAMIC is not setCONFIG_NETPOLL=y
# CONFIG_NETPOLL_TRAP is not setCONFIG_NET_POLL_CONTROLLER=y
# CONFIG_ISDN is not set
# CONFIG_PHONE is not set
#
# Input device support
#CONFIG_INPUT=yCONFIG_INPUT_FF_MEMLESS=yCONFIG_INPUT_POLLDEV=m
#
# Userland interfaces
#CONFIG_INPUT_MOUSEDEV=y
# CONFIG_INPUT_MOUSEDEV_PSAUX is not setCONFIG_INPUT_MOUSEDEV_SCREEN_X=1024CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768CONFIG_INPUT_JOYDEV=mCONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
#
# Input Device Drivers
#CONFIG_INPUT_KEYBOARD=yCONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not setCONFIG_INPUT_MOUSE=yCONFIG_MOUSE_PS2=yCONFIG_MOUSE_PS2_ALPS=yCONFIG_MOUSE_PS2_LOGIPS2PP=yCONFIG_MOUSE_PS2_SYNAPTICS=yCONFIG_MOUSE_PS2_LIFEBOOK=yCONFIG_MOUSE_PS2_TRACKPOINT=y
# CONFIG_MOUSE_PS2_TOUCHKIT is not set
# CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_APPLETOUCH is not set
# CONFIG_MOUSE_VSXXXAA is not setCONFIG_INPUT_JOYSTICK=y
# CONFIG_JOYSTICK_ANALOG is not set
# CONFIG_JOYSTICK_A3D is not set
# CONFIG_JOYSTICK_ADI is not set
# CONFIG_JOYSTICK_COBRA is not set
# CONFIG_JOYSTICK_GF2K is not set
# CONFIG_JOYSTICK_GRIP is not set
# CONFIG_JOYSTICK_GRIP_MP is not set
# CONFIG_JOYSTICK_GUILLEMOT is not set
# CONFIG_JOYSTICK_INTERACT is not set
# CONFIG_JOYSTICK_SIDEWINDER is not set
# CONFIG_JOYSTICK_TMDC is not set
# CONFIG_JOYSTICK_IFORCE is not set
# CONFIG_JOYSTICK_WARRIOR is not set
# CONFIG_JOYSTICK_MAGELLAN is not set
# CONFIG_JOYSTICK_SPACEORB is not set
# CONFIG_JOYSTICK_SPACEBALL is not set
# CONFIG_JOYSTICK_STINGER is not set
# CONFIG_JOYSTICK_TWIDJOY is not set
# CONFIG_JOYSTICK_DB9 is not set
# CONFIG_JOYSTICK_GAMECON is not set
# CONFIG_JOYSTICK_TURBOGRAFX is not set
# CONFIG_JOYSTICK_JOYDUMP is not set
# CONFIG_JOYSTICK_XPAD is not set
# CONFIG_INPUT_TABLET is not set
# CONFIG_INPUT_TOUCHSCREEN is not setCONFIG_INPUT_MISC=yCONFIG_INPUT_PCSPKR=m
# CONFIG_INPUT_WISTRON_BTNS is not set
# CONFIG_INPUT_ATLAS_BTNS is not set
# CONFIG_INPUT_ATI_REMOTE is not set
# CONFIG_INPUT_ATI_REMOTE2 is not set
# CONFIG_INPUT_KEYSPAN_REMOTE is not set
# CONFIG_INPUT_POWERMATE is not set
# CONFIG_INPUT_YEALINK is not setCONFIG_INPUT_UINPUT=m
#
# Hardware I/O ports
#CONFIG_SERIO=yCONFIG_SERIO_I8042=yCONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PARKBD is not set
# CONFIG_SERIO_PCIPS2 is not setCONFIG_SERIO_LIBPS2=yCONFIG_SERIO_RAW=m
# CONFIG_GAMEPORT is not set
#
# Character devices
#CONFIG_VT=yCONFIG_VT_CONSOLE=yCONFIG_HW_CONSOLE=yCONFIG_VT_HW_CONSOLE_BINDING=yCONFIG_SERIAL_NONSTANDARD=y
# CONFIG_COMPUTONE is not set
# CONFIG_ROCKETPORT is not set
# CONFIG_CYCLADES is not set
# CONFIG_DIGIEPCA is not set
# CONFIG_MOXA_INTELLIO is not set
# CONFIG_MOXA_SMARTIO is not set
# CONFIG_MOXA_SMARTIO_NEW is not set
# CONFIG_ISI is not set
# CONFIG_SYNCLINK is not set
# CONFIG_SYNCLINKMP is not set
# CONFIG_SYNCLINK_GT is not set
# CONFIG_N_HDLC is not set
# CONFIG_SPECIALIX is not set
# CONFIG_SX is not set
# CONFIG_RIO is not set
# CONFIG_STALDRV is not set
#
# Serial drivers
#CONFIG_SERIAL_8250=yCONFIG_SERIAL_8250_CONSOLE=yCONFIG_FIX_EARLYCON_MEM=yCONFIG_SERIAL_8250_PCI=yCONFIG_SERIAL_8250_PNP=y
# CONFIG_SERIAL_8250_CS is not setCONFIG_SERIAL_8250_NR_UARTS=4CONFIG_SERIAL_8250_RUNTIME_UARTS=4
# CONFIG_SERIAL_8250_EXTENDED is not set
#
# Non-8250 serial port support
#CONFIG_SERIAL_CORE=yCONFIG_SERIAL_CORE_CONSOLE=y
# CONFIG_SERIAL_JSM is not setCONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not setCONFIG_PRINTER=mCONFIG_LP_CONSOLE=yCONFIG_PPDEV=m
# CONFIG_TIPAR is not setCONFIG_HVC_DRIVER=yCONFIG_HVC_XEN=y
# CONFIG_IPMI_HANDLER is not setCONFIG_HW_RANDOM=yCONFIG_HW_RANDOM_INTEL=m
# CONFIG_HW_RANDOM_AMD is not set
# CONFIG_HW_RANDOM_GEODE is not set
# CONFIG_HW_RANDOM_VIA is not setCONFIG_NVRAM=yCONFIG_RTC=mCONFIG_GEN_RTC=mCONFIG_GEN_RTC_X=y
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
# CONFIG_SONYPI is not set
#
# PCMCIA character devices
#
# CONFIG_SYNCLINK_CS is not set
# CONFIG_CARDMAN_4000 is not set
# CONFIG_CARDMAN_4040 is not set
# CONFIG_MWAVE is not set
# CONFIG_PC8736x_GPIO is not set
# CONFIG_NSC_GPIO is not set
# CONFIG_CS5535_GPIO is not set
# CONFIG_RAW_DRIVER is not setCONFIG_HPET=yCONFIG_HPET_RTC_IRQ=yCONFIG_HPET_MMAP=yCONFIG_HANGCHECK_TIMER=mCONFIG_TCG_TPM=m
# CONFIG_TCG_TIS is not set
# CONFIG_TCG_NSC is not setCONFIG_TCG_ATMEL=m
# CONFIG_TCG_INFINEON is not set
# CONFIG_TELCLOCK is not setCONFIG_DEVPORT=y
# CONFIG_I2C is not set
#
# SPI support
#
# CONFIG_SPI is not set
# CONFIG_SPI_MASTER is not set
# CONFIG_W1 is not setCONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not set
# CONFIG_PDA_POWER is not set
# CONFIG_BATTERY_DS2760 is not setCONFIG_HWMON=m
# CONFIG_HWMON_VID is not set
# CONFIG_SENSORS_ABITUGURU is not set
# CONFIG_SENSORS_ABITUGURU3 is not set
# CONFIG_SENSORS_K8TEMP is not set
# CONFIG_SENSORS_F71805F is not set
# CONFIG_SENSORS_F71882FG is not setCONFIG_SENSORS_CORETEMP=m
# CONFIG_SENSORS_IT87 is not set
# CONFIG_SENSORS_PC87360 is not set
# CONFIG_SENSORS_PC87427 is not set
# CONFIG_SENSORS_SIS5595 is not set
# CONFIG_SENSORS_SMSC47M1 is not set
# CONFIG_SENSORS_SMSC47B397 is not set
# CONFIG_SENSORS_VIA686A is not set
# CONFIG_SENSORS_VT1211 is not set
# CONFIG_SENSORS_VT8231 is not set
# CONFIG_SENSORS_W83627HF is not set
# CONFIG_SENSORS_W83627EHF is not setCONFIG_SENSORS_HDAPS=m
# CONFIG_SENSORS_APPLESMC is not set
# CONFIG_HWMON_DEBUG_CHIP is not set
# CONFIG_WATCHDOG is not set
#
# Sonics Silicon Backplane
#CONFIG_SSB_POSSIBLE=y
# CONFIG_SSB is not set
#
# Multifunction device drivers
#
# CONFIG_MFD_SM501 is not set
#
# Multimedia devices
#CONFIG_VIDEO_DEV=mCONFIG_VIDEO_V4L1=yCONFIG_VIDEO_V4L1_COMPAT=yCONFIG_VIDEO_V4L2=y
# CONFIG_VIDEO_CAPTURE_DRIVERS is not set
# CONFIG_RADIO_ADAPTERS is not set
# CONFIG_DVB_CORE is not set
# CONFIG_DAB is not set
#
# Graphics support
#CONFIG_AGP=y
# CONFIG_AGP_ALI is not set
# CONFIG_AGP_ATI is not set
# CONFIG_AGP_AMD is not set
# CONFIG_AGP_AMD64 is not setCONFIG_AGP_INTEL=y
# CONFIG_AGP_NVIDIA is not set
# CONFIG_AGP_SIS is not set
# CONFIG_AGP_SWORKS is not set
# CONFIG_AGP_VIA is not set
# CONFIG_AGP_EFFICEON is not setCONFIG_DRM=m
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_R128 is not set
# CONFIG_DRM_RADEON is not setCONFIG_DRM_I810=mCONFIG_DRM_I830=mCONFIG_DRM_I915=m
# CONFIG_DRM_MGA is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_VIA is not set
# CONFIG_DRM_SAVAGE is not setCONFIG_VGASTATE=mCONFIG_VIDEO_OUTPUT_CONTROL=mCONFIG_FB=y
# CONFIG_FIRMWARE_EDID is not set
# CONFIG_FB_DDC is not setCONFIG_FB_CFB_FILLRECT=yCONFIG_FB_CFB_COPYAREA=yCONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
# CONFIG_FB_SYS_FILLRECT is not set
# CONFIG_FB_SYS_COPYAREA is not set
# CONFIG_FB_SYS_IMAGEBLIT is not set
# CONFIG_FB_SYS_FOPS is not setCONFIG_FB_DEFERRED_IO=y
# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_BACKLIGHT is not setCONFIG_FB_MODE_HELPERS=yCONFIG_FB_TILEBLITTING=y
#
# Frame buffer hardware drivers
#
# CONFIG_FB_CIRRUS is not set
# CONFIG_FB_PM2 is not set
# CONFIG_FB_CYBER2000 is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_IMSTT is not setCONFIG_FB_VGA16=mCONFIG_FB_VESA=y
# CONFIG_FB_HECUBA is not set
# CONFIG_FB_HGA is not set
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_NVIDIA is not set
# CONFIG_FB_RIVA is not setCONFIG_FB_I810=mCONFIG_FB_I810_GTF=y
# CONFIG_FB_I810_I2C is not set
# CONFIG_FB_LE80578 is not setCONFIG_FB_INTEL=mCONFIG_FB_INTEL_DEBUG=y
# CONFIG_FB_INTEL_I2C is not set
# CONFIG_FB_MATROX is not set
# CONFIG_FB_RADEON is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
# CONFIG_FB_S3 is not set
# CONFIG_FB_SAVAGE is not set
# CONFIG_FB_SIS is not set
# CONFIG_FB_NEOMAGIC is not set
# CONFIG_FB_KYRO is not set
# CONFIG_FB_3DFX is not set
# CONFIG_FB_VOODOO1 is not set
# CONFIG_FB_VT8623 is not set
# CONFIG_FB_CYBLA is not set
# CONFIG_FB_TRIDENT is not set
# CONFIG_FB_ARK is not set
# CONFIG_FB_PM3 is not set
# CONFIG_FB_GEODE is not set
# CONFIG_FB_VIRTUAL is not setCONFIG_BACKLIGHT_LCD_SUPPORT=yCONFIG_LCD_CLASS_DEVICE=mCONFIG_BACKLIGHT_CLASS_DEVICE=y
# CONFIG_BACKLIGHT_CORGI is not set
# CONFIG_BACKLIGHT_PROGEAR is not set
#
# Display device support
#CONFIG_DISPLAY_SUPPORT=m
#
# Display hardware drivers
#
#
# Console display driver support
#CONFIG_VGA_CONSOLE=y CONFIG_VGACON_SOFT_SCROLLBACK=y CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64 CONFIG_VIDEO_SELECT=yCONFIG_DUMMY_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE=y
# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
# CONFIG_FONTS is not set
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=yCONFIG_LOGO=y
# CONFIG_LOGO_LINUX_MONO is not set
# CONFIG_LOGO_LINUX_VGA16 is not set CONFIG_LOGO_LINUX_CLUT224=y
#
# Sound
#CONFIG_SOUND=m
#
# Advanced Linux Sound Architecture
#CONFIG_SND=mCONFIG_SND_TIMER=mCONFIG_SND_PCM=mCONFIG_SND_RAWMIDI=mCONFIG_SND_SEQUENCER=mCONFIG_SND_SEQ_DUMMY=mCONFIG_SND_OSSEMUL=yCONFIG_SND_MIXER_OSS=mCONFIG_SND_PCM_OSS=mCONFIG_SND_PCM_OSS_PLUGINS=yCONFIG_SND_SEQUENCER_OSS=yCONFIG_SND_RTCTIMER=mCONFIG_SND_SEQ_RTCTIMER_DEFAULT=yCONFIG_SND_DYNAMIC_MINORS=y
# CONFIG_SND_SUPPORT_OLD_API is not setCONFIG_SND_VERBOSE_PROCFS=y
# CONFIG_SND_VERBOSE_PRINTK is not set
# CONFIG_SND_DEBUG is not set
#
# Generic devices
#CONFIG_SND_MPU401_UART=mCONFIG_SND_AC97_CODEC=mCONFIG_SND_DUMMY=mCONFIG_SND_VIRMIDI=mCONFIG_SND_MTPAV=m
# CONFIG_SND_MTS64 is not set
# CONFIG_SND_SERIAL_U16550 is not setCONFIG_SND_MPU401=m
# CONFIG_SND_PORTMAN2X4 is not set
#
# PCI devices
#
# CONFIG_SND_AD1889 is not set
# CONFIG_SND_ALS300 is not set
# CONFIG_SND_ALS4000 is not set
# CONFIG_SND_ALI5451 is not set
# CONFIG_SND_ATIIXP is not set
# CONFIG_SND_ATIIXP_MODEM is not set
# CONFIG_SND_AU8810 is not set
# CONFIG_SND_AU8820 is not set
# CONFIG_SND_AU8830 is not set
# CONFIG_SND_AZT3328 is not set
# CONFIG_SND_BT87X is not set
# CONFIG_SND_CA0106 is not set
# CONFIG_SND_CMIPCI is not set
# CONFIG_SND_CS4281 is not set
# CONFIG_SND_CS46XX is not set
# CONFIG_SND_CS5530 is not set
# CONFIG_SND_CS5535AUDIO is not set
# CONFIG_SND_DARLA20 is not set
# CONFIG_SND_GINA20 is not set
# CONFIG_SND_LAYLA20 is not set
# CONFIG_SND_DARLA24 is not set
# CONFIG_SND_GINA24 is not set
# CONFIG_SND_LAYLA24 is not set
# CONFIG_SND_MONA is not set
# CONFIG_SND_MIA is not set
# CONFIG_SND_ECHO3G is not set
# CONFIG_SND_INDIGO is not set
# CONFIG_SND_INDIGOIO is not set
# CONFIG_SND_INDIGODJ is not set
# CONFIG_SND_EMU10K1 is not set
# CONFIG_SND_EMU10K1X is not set
# CONFIG_SND_ENS1370 is not set
# CONFIG_SND_ENS1371 is not set
# CONFIG_SND_ES1938 is not set
# CONFIG_SND_ES1968 is not set
# CONFIG_SND_FM801 is not setCONFIG_SND_HDA_INTEL=m
# CONFIG_SND_HDA_HWDEP is not setCONFIG_SND_HDA_CODEC_REALTEK=yCONFIG_SND_HDA_CODEC_ANALOG=yCONFIG_SND_HDA_CODEC_SIGMATEL=yCONFIG_SND_HDA_CODEC_VIA=yCONFIG_SND_HDA_CODEC_ATIHDMI=yCONFIG_SND_HDA_CODEC_CONEXANT=yCONFIG_SND_HDA_CODEC_CMEDIA=yCONFIG_SND_HDA_CODEC_SI3054=yCONFIG_SND_HDA_GENERIC=y
# CONFIG_SND_HDA_POWER_SAVE is not set
# CONFIG_SND_HDSP is not set
# CONFIG_SND_HDSPM is not set
# CONFIG_SND_ICE1712 is not set
# CONFIG_SND_ICE1724 is not setCONFIG_SND_INTEL8X0=mCONFIG_SND_INTEL8X0M=m
# CONFIG_SND_KORG1212 is not set
# CONFIG_SND_MAESTRO3 is not set
# CONFIG_SND_MIXART is not set
# CONFIG_SND_NM256 is not set
# CONFIG_SND_PCXHR is not set
# CONFIG_SND_RIPTIDE is not set
# CONFIG_SND_RME32 is not set
# CONFIG_SND_RME96 is not set
# CONFIG_SND_RME9652 is not set
# CONFIG_SND_SONICVIBES is not set
# CONFIG_SND_TRIDENT is not set
# CONFIG_SND_VIA82XX is not set
# CONFIG_SND_VIA82XX_MODEM is not set
# CONFIG_SND_VX222 is not set
# CONFIG_SND_YMFPCI is not setCONFIG_SND_AC97_POWER_SAVE=yCONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
#
# USB devices
#
# CONFIG_SND_USB_AUDIO is not set
# CONFIG_SND_USB_USX2Y is not set
# CONFIG_SND_USB_CAIAQ is not set
#
# PCMCIA devices
#
# CONFIG_SND_VXPOCKET is not set
# CONFIG_SND_PDAUDIOCF is not set
#
# System on Chip audio support
#
# CONFIG_SND_SOC is not set
#
# SoC Audio support for SuperH
#
#
# Open Sound System
#
# CONFIG_SOUND_PRIME is not setCONFIG_AC97_BUS=mCONFIG_HID_SUPPORT=yCONFIG_HID=y
# CONFIG_HID_DEBUG is not set
# CONFIG_HIDRAW is not set
#
# USB Input Devices
#CONFIG_USB_HID=y
# CONFIG_USB_HIDINPUT_POWERBOOK is not setCONFIG_HID_FF=yCONFIG_HID_PID=yCONFIG_LOGITECH_FF=y
# CONFIG_PANTHERLORD_FF is not setCONFIG_THRUSTMASTER_FF=y
# CONFIG_ZEROPLUS_FF is not setCONFIG_USB_HIDDEV=yCONFIG_USB_SUPPORT=yCONFIG_USB_ARCH_HAS_HCD=yCONFIG_USB_ARCH_HAS_OHCI=yCONFIG_USB_ARCH_HAS_EHCI=yCONFIG_USB=y
# CONFIG_USB_DEBUG is not set
#
# Miscellaneous USB options
#CONFIG_USB_DEVICEFS=y
# CONFIG_USB_DEVICE_CLASS is not set
# CONFIG_USB_DYNAMIC_MINORS is not setCONFIG_USB_SUSPEND=y
# CONFIG_USB_PERSIST is not set
# CONFIG_USB_OTG is not set
#
# USB Host Controller Drivers
#CONFIG_USB_EHCI_HCD=m
# CONFIG_USB_EHCI_SPLIT_ISO is not setCONFIG_USB_EHCI_ROOT_HUB_TT=y
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_OHCI_HCD is not setCONFIG_USB_UHCI_HCD=m
# CONFIG_USB_SL811_HCD is not set
# CONFIG_USB_R8A66597_HCD is not set
#
# USB Device Class drivers
#CONFIG_USB_ACM=mCONFIG_USB_PRINTER=m
#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' #
#
# may also be needed; see USB_STORAGE Help for more information # CONFIG_USB_STORAGE=m # CONFIG_USB_STORAGE_DEBUG is not set CONFIG_USB_STORAGE_DATAFAB=y CONFIG_USB_STORAGE_FREECOM=y # CONFIG_USB_STORAGE_ISD200 is not set CONFIG_USB_STORAGE_DPCM=y CONFIG_USB_STORAGE_USBAT=y CONFIG_USB_STORAGE_SDDR09=y CONFIG_USB_STORAGE_SDDR55=y CONFIG_USB_STORAGE_JUMPSHOT=y CONFIG_USB_STORAGE_ALAUDA=y # CONFIG_USB_STORAGE_KARMA is not set CONFIG_USB_LIBUSUAL=y
#
# USB Imaging devices
#CONFIG_USB_MDC800=mCONFIG_USB_MICROTEK=mCONFIG_USB_MON=y
#
# USB port drivers
#CONFIG_USB_USS720=m
#
# USB Serial Converter support
#CONFIG_USB_SERIAL=mCONFIG_USB_SERIAL_GENERIC=y
# CONFIG_USB_SERIAL_AIRCABLE is not setCONFIG_USB_SERIAL_AIRPRIME=mCONFIG_USB_SERIAL_ARK3116=mCONFIG_USB_SERIAL_BELKIN=m
# CONFIG_USB_SERIAL_CH341 is not setCONFIG_USB_SERIAL_WHITEHEAT=mCONFIG_USB_SERIAL_DIGI_ACCELEPORT=mCONFIG_USB_SERIAL_CP2101=mCONFIG_USB_SERIAL_CYPRESS_M8=mCONFIG_USB_SERIAL_EMPEG=mCONFIG_USB_SERIAL_FTDI_SIO=mCONFIG_USB_SERIAL_FUNSOFT=mCONFIG_USB_SERIAL_VISOR=mCONFIG_USB_SERIAL_IPAQ=mCONFIG_USB_SERIAL_IR=mCONFIG_USB_SERIAL_EDGEPORT=mCONFIG_USB_SERIAL_EDGEPORT_TI=mCONFIG_USB_SERIAL_GARMIN=mCONFIG_USB_SERIAL_IPW=mCONFIG_USB_SERIAL_KEYSPAN_PDA=mCONFIG_USB_SERIAL_KEYSPAN=mCONFIG_USB_SERIAL_KEYSPAN_MPR=yCONFIG_USB_SERIAL_KEYSPAN_USA28=yCONFIG_USB_SERIAL_KEYSPAN_USA28X=yCONFIG_USB_SERIAL_KEYSPAN_USA28XA=yCONFIG_USB_SERIAL_KEYSPAN_USA28XB=yCONFIG_USB_SERIAL_KEYSPAN_USA19=yCONFIG_USB_SERIAL_KEYSPAN_USA18X=yCONFIG_USB_SERIAL_KEYSPAN_USA19W=yCONFIG_USB_SERIAL_KEYSPAN_USA19QW=yCONFIG_USB_SERIAL_KEYSPAN_USA19QI=yCONFIG_USB_SERIAL_KEYSPAN_USA49W=yCONFIG_USB_SERIAL_KEYSPAN_USA49WLC=yCONFIG_USB_SERIAL_KLSI=mCONFIG_USB_SERIAL_KOBIL_SCT=mCONFIG_USB_SERIAL_MCT_U232=m
# CONFIG_USB_SERIAL_MOS7720 is not set
# CONFIG_USB_SERIAL_MOS7840 is not setCONFIG_USB_SERIAL_NAVMAN=mCONFIG_USB_SERIAL_PL2303=m
# CONFIG_USB_SERIAL_OTI6858 is not setCONFIG_USB_SERIAL_HP4X=mCONFIG_USB_SERIAL_SAFE=mCONFIG_USB_SERIAL_SAFE_PADDED=yCONFIG_USB_SERIAL_SIERRAWIRELESS=mCONFIG_USB_SERIAL_TI=mCONFIG_USB_SERIAL_CYBERJACK=mCONFIG_USB_SERIAL_XIRCOM=mCONFIG_USB_SERIAL_OPTION=mCONFIG_USB_SERIAL_OMNINET=m
# CONFIG_USB_SERIAL_DEBUG is not setCONFIG_USB_EZUSB=y
#
# USB Miscellaneous drivers
#CONFIG_USB_EMI62=mCONFIG_USB_EMI26=m
# CONFIG_USB_ADUTUX is not setCONFIG_USB_AUERSWALD=mCONFIG_USB_RIO500=mCONFIG_USB_LEGOTOWER=mCONFIG_USB_LCD=m
# CONFIG_USB_BERRY_CHARGE is not setCONFIG_USB_LED=m
# CONFIG_USB_CYPRESS_CY7C63 is not set
# CONFIG_USB_CYTHERM is not set
# CONFIG_USB_PHIDGET is not setCONFIG_USB_IDMOUSE=m
# CONFIG_USB_FTDI_ELAN is not setCONFIG_USB_APPLEDISPLAY=mCONFIG_USB_SISUSBVGA=mCONFIG_USB_SISUSBVGA_CON=yCONFIG_USB_LD=m
# CONFIG_USB_TRANCEVIBRATOR is not set
# CONFIG_USB_IOWARRIOR is not setCONFIG_USB_TEST=m
#
# USB DSL modem support
#
#
# USB Gadget Support
#
# CONFIG_USB_GADGET is not setCONFIG_MMC=m
# CONFIG_MMC_DEBUG is not set
# CONFIG_MMC_UNSAFE_RESUME is not set
#
# MMC/SD Card Drivers
#CONFIG_MMC_BLOCK=mCONFIG_MMC_BLOCK_BOUNCE=y
# CONFIG_SDIO_UART is not set
#
# MMC/SD Host Controller Drivers
#CONFIG_MMC_SDHCI=m
# CONFIG_MMC_RICOH_MMC is not set
# CONFIG_MMC_WBSD is not set
# CONFIG_MMC_TIFM_SD is not setCONFIG_NEW_LEDS=yCONFIG_LEDS_CLASS=m
#
# LED drivers
#
#
# LED Triggers
#
# CONFIG_LEDS_TRIGGERS is not set
# CONFIG_INFINIBAND is not set
# CONFIG_EDAC is not setCONFIG_RTC_LIB=mCONFIG_RTC_CLASS=m
#
# RTC interfaces
#CONFIG_RTC_INTF_SYSFS=yCONFIG_RTC_INTF_PROC=yCONFIG_RTC_INTF_DEV=yCONFIG_RTC_INTF_DEV_UIE_EMUL=y
# CONFIG_RTC_DRV_TEST is not set
#
# SPI RTC drivers
#
#
# Platform RTC drivers
#CONFIG_RTC_DRV_CMOS=mCONFIG_RTC_DRV_DS1553=m
# CONFIG_RTC_DRV_STK17TA8 is not setCONFIG_RTC_DRV_DS1742=m
# CONFIG_RTC_DRV_M48T86 is not set
# CONFIG_RTC_DRV_M48T59 is not setCONFIG_RTC_DRV_V3020=m
#
# on-CPU RTC drivers
#
# CONFIG_DMADEVICES is not set
# CONFIG_AUXDISPLAY is not setCONFIG_VIRTUALIZATION=yCONFIG_KVM=mCONFIG_KVM_INTEL=m
# CONFIG_KVM_AMD is not set
#
# Userspace I/O
#
# CONFIG_UIO is not set
#
# File systems
#
# CONFIG_EXT2_FS is not setCONFIG_EXT3_FS=yCONFIG_EXT3_FS_XATTR=yCONFIG_EXT3_FS_POSIX_ACL=yCONFIG_EXT3_FS_SECURITY=y
# CONFIG_EXT4DEV_FS is not setCONFIG_JBD=yCONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not setCONFIG_FS_POSIX_ACL=yCONFIG_XFS_FS=y
# CONFIG_XFS_QUOTA is not set
# CONFIG_XFS_SECURITY is not set
# CONFIG_XFS_POSIX_ACL is not set
# CONFIG_XFS_RT is not set
# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not setCONFIG_INOTIFY=yCONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not setCONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not setCONFIG_AUTOFS4_FS=m
# CONFIG_FUSE_FS is not set
#
# CD-ROM/DVD Filesystems
#CONFIG_ISO9660_FS=yCONFIG_JOLIET=yCONFIG_ZISOFS=yCONFIG_UDF_FS=mCONFIG_UDF_NLS=y
#
# DOS/FAT/NT Filesystems
#CONFIG_FAT_FS=mCONFIG_MSDOS_FS=mCONFIG_VFAT_FS=mCONFIG_FAT_DEFAULT_CODEPAGE=437CONFIG_FAT_DEFAULT_IOCHARSET="ascii"CONFIG_NTFS_FS=m
# CONFIG_NTFS_DEBUG is not set
# CONFIG_NTFS_RW is not set
#
# Pseudo filesystems
#CONFIG_PROC_FS=yCONFIG_PROC_KCORE=yCONFIG_PROC_SYSCTL=yCONFIG_SYSFS=yCONFIG_TMPFS=y
# CONFIG_TMPFS_POSIX_ACL is not setCONFIG_HUGETLBFS=yCONFIG_HUGETLB_PAGE=yCONFIG_CONFIGFS_FS=m
#
# Miscellaneous filesystems
#
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_ECRYPT_FS is not set
# CONFIG_HFS_FS is not setCONFIG_HFSPLUS_FS=m
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not setCONFIG_NETWORK_FILESYSTEMS=yCONFIG_NFS_FS=yCONFIG_NFS_V3=yCONFIG_NFS_V3_ACL=y
# CONFIG_NFS_V4 is not set
# CONFIG_NFS_DIRECTIO is not setCONFIG_NFSD=mCONFIG_NFSD_V2_ACL=yCONFIG_NFSD_V3=yCONFIG_NFSD_V3_ACL=y
# CONFIG_NFSD_V4 is not setCONFIG_NFSD_TCP=yCONFIG_LOCKD=yCONFIG_LOCKD_V4=yCONFIG_EXPORTFS=mCONFIG_NFS_ACL_SUPPORT=yCONFIG_NFS_COMMON=yCONFIG_SUNRPC=yCONFIG_SUNRPC_GSS=yCONFIG_SUNRPC_BIND34=yCONFIG_RPCSEC_GSS_KRB5=y
# CONFIG_RPCSEC_GSS_SPKM3 is not set
# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
#
# Partition Types
#CONFIG_PARTITION_ADVANCED=y
# CONFIG_ACORN_PARTITION is not set
# CONFIG_OSF_PARTITION is not set
# CONFIG_AMIGA_PARTITION is not set
# CONFIG_ATARI_PARTITION is not setCONFIG_MAC_PARTITION=yCONFIG_MSDOS_PARTITION=y
# CONFIG_BSD_DISKLABEL is not set
# CONFIG_MINIX_SUBPARTITION is not set
# CONFIG_SOLARIS_X86_PARTITION is not set
# CONFIG_UNIXWARE_DISKLABEL is not setCONFIG_LDM_PARTITION=y
# CONFIG_LDM_DEBUG is not set
# CONFIG_SGI_PARTITION is not set
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
# CONFIG_KARMA_PARTITION is not set
# CONFIG_EFI_PARTITION is not set
# CONFIG_SYSV68_PARTITION is not setCONFIG_NLS=yCONFIG_NLS_DEFAULT="utf8"CONFIG_NLS_CODEPAGE_437=yCONFIG_NLS_CODEPAGE_737=mCONFIG_NLS_CODEPAGE_775=mCONFIG_NLS_CODEPAGE_850=mCONFIG_NLS_CODEPAGE_852=mCONFIG_NLS_CODEPAGE_855=mCONFIG_NLS_CODEPAGE_857=mCONFIG_NLS_CODEPAGE_860=mCONFIG_NLS_CODEPAGE_861=mCONFIG_NLS_CODEPAGE_862=mCONFIG_NLS_CODEPAGE_863=mCONFIG_NLS_CODEPAGE_864=mCONFIG_NLS_CODEPAGE_865=mCONFIG_NLS_CODEPAGE_866=mCONFIG_NLS_CODEPAGE_869=mCONFIG_NLS_CODEPAGE_936=mCONFIG_NLS_CODEPAGE_950=mCONFIG_NLS_CODEPAGE_932=mCONFIG_NLS_CODEPAGE_949=mCONFIG_NLS_CODEPAGE_874=mCONFIG_NLS_ISO8859_8=mCONFIG_NLS_CODEPAGE_1250=mCONFIG_NLS_CODEPAGE_1251=mCONFIG_NLS_ASCII=yCONFIG_NLS_ISO8859_1=mCONFIG_NLS_ISO8859_2=mCONFIG_NLS_ISO8859_3=mCONFIG_NLS_ISO8859_4=mCONFIG_NLS_ISO8859_5=mCONFIG_NLS_ISO8859_6=mCONFIG_NLS_ISO8859_7=mCONFIG_NLS_ISO8859_9=mCONFIG_NLS_ISO8859_13=mCONFIG_NLS_ISO8859_14=mCONFIG_NLS_ISO8859_15=mCONFIG_NLS_KOI8_R=mCONFIG_NLS_KOI8_U=mCONFIG_NLS_UTF8=m
# CONFIG_DLM is not setCONFIG_INSTRUMENTATION=y
# CONFIG_PROFILING is not set
# CONFIG_KPROBES is not set
# CONFIG_MARKERS is not set
#
# Kernel hacking
#CONFIG_TRACE_IRQFLAGS_SUPPORT=y
# CONFIG_PRINTK_TIME is not setCONFIG_ENABLE_WARN_DEPRECATED=yCONFIG_ENABLE_MUST_CHECK=yCONFIG_MAGIC_SYSRQ=y
# CONFIG_UNUSED_SYMBOLS is not set
# CONFIG_DEBUG_FS is not set
# CONFIG_HEADERS_CHECK is not setCONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_SHIRQ is not setCONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHED_DEBUG is not set
# CONFIG_SCHEDSTATS is not setCONFIG_TIMER_STATS=y
# CONFIG_SLUB_DEBUG_ON is not setCONFIG_DEBUG_PREEMPT=y
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_MUTEXES is not set
# CONFIG_DEBUG_LOCK_ALLOC is not set
# CONFIG_PROVE_LOCKING is not set
# CONFIG_LOCK_STAT is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_DEBUG_KOBJECT is not set
# CONFIG_DEBUG_HIGHMEM is not setCONFIG_DEBUG_BUGVERBOSE=yCONFIG_DEBUG_INFO=y
# CONFIG_DEBUG_VM is not set
# CONFIG_DEBUG_LIST is not set
# CONFIG_DEBUG_SG is not setCONFIG_FRAME_POINTER=yCONFIG_FORCED_INLINING=y
# CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_FAULT_INJECTION is not set
# CONFIG_SAMPLES is not setCONFIG_EARLY_PRINTK=y
# CONFIG_DEBUG_STACKOVERFLOW is not set
# CONFIG_DEBUG_STACK_USAGE is not set
#
# Page alloc debug is incompatible with Software Suspend on i386 #
# CONFIG_DEBUG_RODATA is not set
# CONFIG_4KSTACKS is not set CONFIG_X86_FIND_SMP_CONFIG=yCONFIG_X86_MPPARSE=yCONFIG_DOUBLEFAULT=y
#
# Security options
#CONFIG_KEYS=y
# CONFIG_KEYS_DEBUG_PROC_KEYS is not setCONFIG_SECURITY=yCONFIG_SECURITY_NETWORK=yCONFIG_SECURITY_NETWORK_XFRM=yCONFIG_SECURITY_CAPABILITIES=y
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
# CONFIG_SECURITY_ROOTPLUG is not setCONFIG_CRYPTO=yCONFIG_CRYPTO_ALGAPI=yCONFIG_CRYPTO_BLKCIPHER=yCONFIG_CRYPTO_HASH=yCONFIG_CRYPTO_MANAGER=yCONFIG_CRYPTO_HMAC=y
# CONFIG_CRYPTO_XCBC is not setCONFIG_CRYPTO_NULL=mCONFIG_CRYPTO_MD4=mCONFIG_CRYPTO_MD5=yCONFIG_CRYPTO_SHA1=yCONFIG_CRYPTO_SHA256=mCONFIG_CRYPTO_SHA512=mCONFIG_CRYPTO_WP512=mCONFIG_CRYPTO_TGR192=m
# CONFIG_CRYPTO_GF128MUL is not setCONFIG_CRYPTO_ECB=mCONFIG_CRYPTO_CBC=yCONFIG_CRYPTO_PCBC=m
# CONFIG_CRYPTO_LRW is not set
# CONFIG_CRYPTO_XTS is not set
# CONFIG_CRYPTO_CRYPTD is not setCONFIG_CRYPTO_DES=y
# CONFIG_CRYPTO_FCRYPT is not setCONFIG_CRYPTO_BLOWFISH=mCONFIG_CRYPTO_TWOFISH=mCONFIG_CRYPTO_TWOFISH_COMMON=m
# CONFIG_CRYPTO_TWOFISH_586 is not setCONFIG_CRYPTO_SERPENT=mCONFIG_CRYPTO_AES=mCONFIG_CRYPTO_AES_586=mCONFIG_CRYPTO_CAST5=mCONFIG_CRYPTO_CAST6=mCONFIG_CRYPTO_TEA=mCONFIG_CRYPTO_ARC4=mCONFIG_CRYPTO_KHAZAD=mCONFIG_CRYPTO_ANUBIS=m
# CONFIG_CRYPTO_SEED is not setCONFIG_CRYPTO_DEFLATE=mCONFIG_CRYPTO_MICHAEL_MIC=mCONFIG_CRYPTO_CRC32C=m
# CONFIG_CRYPTO_CAMELLIA is not set
# CONFIG_CRYPTO_TEST is not set
# CONFIG_CRYPTO_AUTHENC is not setCONFIG_CRYPTO_HW=yCONFIG_CRYPTO_DEV_PADLOCK=mCONFIG_CRYPTO_DEV_PADLOCK_AES=mCONFIG_CRYPTO_DEV_PADLOCK_SHA=mCONFIG_CRYPTO_DEV_GEODE=m
#
# Library routines
#CONFIG_BITREVERSE=yCONFIG_CRC_CCITT=mCONFIG_CRC16=m
# CONFIG_CRC_ITU_T is not setCONFIG_CRC32=y
# CONFIG_CRC7 is not setCONFIG_LIBCRC32C=mCONFIG_ZLIB_INFLATE=yCONFIG_ZLIB_DEFLATE=mCONFIG_PLIST=yCONFIG_HAS_IOMEM=yCONFIG_HAS_IOPORT=yCONFIG_HAS_DMA=yCONFIG_GENERIC_HARDIRQS=yCONFIG_GENERIC_IRQ_PROBE=yCONFIG_GENERIC_PENDING_IRQ=yCONFIG_X86_SMP=yCONFIG_X86_HT=yCONFIG_X86_BIOS_REBOOT=yCONFIG_X86_TRAMPOLINE=yCONFIG_KTIME_SCALAR=y
_______________________________________________
Virtualization mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/virtualization
Re: [PATCH 5/24] smp x86 consolidation
In reply to Glauber de Oliveira CostaQuoted 9 lines · Glauber de Oliveira Costa
Quoted 7 lines
I'm getting link errors in 32-bit:
arch/x86/kernel/built-in.o: In function `native_smp_send_reschedule':/home/jeremy/hg/xen/paravirt/linux/arch/x86/kernel/smpcommon.c:262: undefined reference togenapic' arch/x86/kernel/built-in.o: In functionnative_smp_call_function_mask':/home/jeremy/hg/xen/paravirt/linux/arch/x86/kernel/smpcommon.c:113: undefined reference to `genapic'Ok, it compiled just fine here. I bet it's due to one of that i386 lots of variants.
this patch is causing build failures all around the place. It does not build on CONFIG_X86_SUMMIT, it does not build if CONFIG_X86_GENERICARCH is turned off, etc. It does not even build on UP - fix for that is attached below. I've dropped this patch for now.
Ingo
-------------->
Subject: x86: fix build error
From: Ingo Molnar <[email protected]>
fix build error on !CONFIG_SMP.
--- include/asm-x86/smp.h | 2 ++ 1 file changed, 2 insertions(+)
include/asm-x86/smp.h +2 -0
@@ -2,6 +2,7 @@#define _X86_SMP_H_ #ifndef __ASSEMBLY__ +#ifdef CONFIG_SMP struct smp_ops { void (*smp_prepare_boot_cpu)(void);
@@ -55,6 +56,7 @@ void native_smp_prepare_boot_cpu(void);void native_smp_prepare_cpus (unsigned int max_cpus);int native_cpu_up (unsigned int cpunum);void native_smp_cpus_done (unsigned int max_cpus); +#endif #ifndef CONFIG_PARAVIRT #define startup_ipi_hook (phys_apicid, start_eip, start_esp) \
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
Re: [PATCH 5/24] smp x86 consolidation
In reply to Glauber de Oliveira CostaQuoted 9 lines · Glauber de Oliveira Costa
Quoted 7 lines
I'm getting link errors in 32-bit:
arch/x86/kernel/built-in.o: In function `native_smp_send_reschedule':/home/jeremy/hg/xen/paravirt/linux/arch/x86/kernel/smpcommon.c:262: undefined reference togenapic' arch/x86/kernel/built-in.o: In functionnative_smp_call_function_mask':/home/jeremy/hg/xen/paravirt/linux/arch/x86/kernel/smpcommon.c:113: undefined reference to `genapic'Ok, it compiled just fine here. I bet it's due to one of that i386 lots of variants.
this patch is causing build failures all around the place. It does not build on CONFIG_X86_SUMMIT, it does not build if CONFIG_X86_GENERICARCH is turned off, etc. It does not even build on UP - fix for that is attached below. I've dropped this patch for now.
Ingo
-------------->
Subject: x86: fix build error
From: Ingo Molnar <[email protected]>
fix build error on !CONFIG_SMP.
--- include/asm-x86/smp.h | 2 ++ 1 file changed, 2 insertions(+)
include/asm-x86/smp.h +2 -0
@@ -2,6 +2,7 @@#define _X86_SMP_H_ #ifndef __ASSEMBLY__ +#ifdef CONFIG_SMP struct smp_ops { void (*smp_prepare_boot_cpu)(void);
@@ -55,6 +56,7 @@ void native_smp_prepare_boot_cpu(void);void native_smp_prepare_cpus (unsigned int max_cpus);int native_cpu_up (unsigned int cpunum);void native_smp_cpus_done (unsigned int max_cpus); +#endif #ifndef CONFIG_PARAVIRT #define startup_ipi_hook (phys_apicid, start_eip, start_esp) \
Re: [PATCH 5/24] smp x86 consolidation
In reply to Jeremy Fitzhardinge-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Jeremy Fitzhardinge escreveu:
Quoted 9 lines
Quoted 7 lines · Glauber de Oliveira Costa
This patch consolidates part of the pieces of smp for both architectures. (i386 and
x86_64). It makes part the calls go throughsmp_ops, and shares code for those functions insmpcommon.cThere's more room for code sharing here, but it is left as an exercise to the reader ;-)
Quoted 7 lines
I'm getting link errors in 32-bit:
arch/x86/kernel/built-in.o: In function `native_smp_send_reschedule':/home/jeremy/hg/xen/paravirt/linux/arch/x86/kernel/smpcommon.c:262: undefined reference togenapic' arch/x86/kernel/built-in.o: In functionnative_smp_call_function_mask':/home/jeremy/hg/xen/paravirt/linux/arch/x86/kernel/smpcommon.c:113: undefined reference to `genapic'
Ok, it compiled just fine here. I bet it's due to one of that i386 lots of variants.
Which subarchitecture are you compiling for, jeremy ?
Quoted 1 line
J
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: Using GnuPG with Remi - http://enigmail.mozdev.org
iD8DBQFHNQmKjYI8LaFUWXMRAlrLAKCHOb28oE/veBkbVeJZDCbjE8OADwCg81ye nsBfBe2iLOFHF6dxT4mRauc=
=xjo4
-----END PGP SIGNATURE-----
Re: [PATCH 5/24] smp x86 consolidation
In reply to Glauber de Oliveira CostaQuoted 7 lines · Glauber de Oliveira Costa
This patch consolidates part of the pieces of smp for both architectures. (i386 and
x86_64). It makes part the calls go throughsmp_ops, and shares code for those functions insmpcommon.cThere's more room for code sharing here, but it is left as an exercise to the reader ;-)
I'm getting link errors in 32-bit:
arch/x86/kernel/built-in.o: In function `native_smp_send_reschedule':/home/jeremy/hg/xen/paravirt/linux/arch/x86/kernel/smpcommon.c:262: undefined reference to genapic' arch/x86/kernel/built-in.o: In function native_smp_call_function_mask':/home/jeremy/hg/xen/paravirt/linux/arch/x86/kernel/smpcommon.c:113: undefined reference to `genapic'
J
PATCH 5/24 smp x86 consolidation
In reply to Glauber de Oliveira CostaThis patch consolidates part of the pieces of smp for both architectures. (i386 and x86_64). It makes part the calls go through smp_ops, and shares code for those functions in smpcommon.c
There's more room for code sharing here, but it is left as an exercise to the reader ;-)
--- arch/x86/kernel/Makefile_32 | 2 +- arch/x86/kernel/Makefile_64 | 2 +- arch/x86/kernel/smp_32.c | 218 ------------------------------ arch/x86/kernel/smp_64.c | 245 --------------------------------- arch/x86/kernel/smpboot_64.c | 8 +- arch/x86/kernel/smpcommon.c | 291 ++++++++++++++++++++++++++++++++++++++++ arch/x86/kernel/smpcommon_32.c | 81 ----------- include/asm-x86/idle.h | 18 +++- include/asm-x86/smp.h | 66 +++++++++ include/asm-x86/smp_32.h | 58 -------- include/asm-x86/smp_64.h | 4 - 11 files changed, 379 insertions(+), 614 deletions(-)
arch/x86/kernel/Makefile_32 +1 -1
@@ -20,7 +20,7 @@ obj-$(CONFIG_MICROCODE) += microcode.o obj-$(CONFIG_PCI) += early-quirks.o obj-$(CONFIG_APM) += apm_32.o obj-$(CONFIG_X86_SMP) += smp_32.o smpboot_32.o tsc_sync.o -obj-$(CONFIG_SMP) += smpcommon_32.o +obj-$(CONFIG_SMP) += smpcommon.o obj-$(CONFIG_X86_TRAMPOLINE) += trampoline_32.o obj-$(CONFIG_X86_MPPARSE) += mpparse_32.o obj-$(CONFIG_X86_LOCAL_APIC) += apic_32.o nmi_32.o
arch/x86/kernel/Makefile_64 +1 -1
@@ -17,7 +17,7 @@ obj-y += acpi/ obj-$(CONFIG_X86_MSR) += msr.o obj-$(CONFIG_MICROCODE) += microcode.o obj-$(CONFIG_X86_CPUID) += cpuid.o -obj-$(CONFIG_SMP) += smp_64.o smpboot_64.o trampoline_64.o tsc_sync.o +obj-$(CONFIG_SMP) += smp_64.o smpboot_64.o trampoline_64.o tsc_sync.o smpcommon.o obj-y += apic_64.o nmi_64.o obj-y += io_apic_64.o mpparse_64.o genapic_64.o genapic_flat_64.o obj-$(CONFIG_KEXEC) += machine_kexec_64.o relocate_kernel_64.o crash.o
arch/x86/kernel/smp_32.c +0 -218
227 lines not on this page · raw message
arch/x86/kernel/smp_64.c +0 -245
248 lines not on this page · raw message
arch/x86/kernel/smpboot_64.c +4 -4
@@ -864,7 +864,7 @@ void __init smp_set_apicids(void)* Prepare for SMP bootup. The MP table or ACPI has been read * earlier. Just do some sanity checking here and enable APIC mode. */ -void __init smp_prepare_cpus (unsigned int max_cpus) +void __init native_smp_prepare_cpus (unsigned int max_cpus) {nmi_watchdog_default (); current_cpu_data = boot_cpu_data;
@@ -908,7 +908,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)/* * Early setup to make printk work. */ -void __init smp_prepare_boot_cpu (void ) +void __init native_smp_prepare_boot_cpu (void ) {int me =smp_processor_id ();cpu_set (me, cpu_online_map);
@@ -919,7 +919,7 @@ void __init smp_prepare_boot_cpu(void)/* * Entry point to boot a CPU. */ -int __cpuinit __cpu_up (unsigned int cpu) +int __cpuinit native_cpu_up (unsigned int cpu) {int apicid =cpu_present_to_apicid (cpu);unsigned long flags;
@@ -977,7 +977,7 @@ int __cpuinit __cpu_up(unsigned int cpu)/* * Finish the SMP boot. */ -void __init smp_cpus_done (unsigned int max_cpus) +void __init native_smp_cpus_done (unsigned int max_cpus) {smp_cleanup_boot ();setup_ioapic_dest ();
arch/x86/kernel/smpcommon.c new file +291 -0
291 lines not on this page · raw message
arch/x86/kernel/smpcommon_32.c deleted +0 -81
81 lines not on this page · raw message
include/asm-x86/idle.h +16 -2
@@ -1,5 +1,5 @@ -#ifndef _ASM_X86_64_IDLE_H -#define _ASM_X86_64_IDLE_H 1 +#ifndef _ASM_X86_IDLE_H +#define _ASM_X86_IDLE_H 1#define IDLE_START 1#define IDLE_END 2
@@ -7,7 +7,21 @@struct notifier_block ;void idle_notifier_register (struct notifier_block *n); +#ifdef CONFIG_X86_64 void enter_idle (void );void exit_idle (void ); +#else +/* +* i386 does not really uses it, but define them here so we can avoid ifdefs in +* shared locations that uses it +*/ +static inline void enter_idle (void ) +{ +} +static inline void exit_idle (void ) +{ +} +#endif +#endif
include/asm-x86/smp.h +66 -0
71 lines not on this page · raw message
include/asm-x86/smp_32.h +0 -58
64 lines not on this page · raw message
include/asm-x86/smp_64.h +0 -4
@@ -36,9 +36,6 @@ extern volatile unsigned long smp_invalidate_needed;extern void lock_ipi_call_lock (void );extern void unlock_ipi_call_lock (void );extern int smp_num_siblings; -extern void smp_send_reschedule (int cpu); -extern int smp_call_function_mask (cpumask_t mask,void (*func)(void *), -void *info,int wait);/* * cpu_sibling_map and cpu_core_map now live
@@ -127,4 +124,3 @@ extern unsigned int boot_cpu_id;#define cpu_physical_id (cpu) boot_cpu_id#endif /* !CONFIG_SMP */ #endif -
Signature · 1 line
1.4.4.2
PATCH 4/24 tlb functions consolidation
In reply to Glauber de Oliveira CostaThis patch consolidates part of the tlb handling functions for the x86 architecture. In this approach, we start by the parts actually used for paravirt in i386.
--- arch/x86/kernel/smp_64.c | 5 ++- include/asm-x86/tlbflush.h | 77 +++++++++++++++++++++++++++++++++++++++++ include/asm-x86/tlbflush_32.h | 77 ----------------------------------------- include/asm-x86/tlbflush_64.h | 43 +++-------------------- 4 files changed, 85 insertions(+), 117 deletions(-)
arch/x86/kernel/smp_64.c +3 -2
@@ -166,11 +166,12 @@ out:add_pda (irq_tlb_count,1 ); } -static void flush_tlb_others (cpumask_t cpumask,struct mm_struct *mm, -unsigned long va) +void native_flush_tlb_others (const cpumask_t *cpumaskp, +struct mm_struct *mm,unsigned long va) {int sender;union smp_flush_state *f; +cpumask_t cpumask = *cpumaskp;/* Caller has disabled preemption */ sender =smp_processor_id () %NUM_INVALIDATE_TLB_VECTORS ;
include/asm-x86/tlbflush.h +77 -0
82 lines not on this page · raw message
include/asm-x86/tlbflush_32.h +0 -77
93 lines not on this page · raw message
include/asm-x86/tlbflush_64.h +5 -38
58 lines not on this page · raw message
Signature · 1 line
1.4.4.2
PATCH 3/24 consolidate spinlock.h
In reply to Glauber de Oliveira CostaThe cli and sti instructions need to be replaced by paravirt hooks. For the i386 architecture, this is already done. The code requirements aren't much different from x86_64 POV, so this part is consolidated in the common header
--- include/asm-x86/spinlock.h | 14 ++++++++++++++ include/asm-x86/spinlock_32.h | 9 --------- include/asm-x86/spinlock_64.h | 8 +++++--- 3 files changed, 19 insertions(+), 12 deletions(-)
include/asm-x86/spinlock.h +14 -0
@@ -1,5 +1,19 @@ +#ifndef _X86_SPINLOCK_H_ +#define _X86_SPINLOCK_H_ + +#ifdef CONFIG_PARAVIRT +#include <asm/paravirt.h> +#else +#define CLI_STRING "cli" +#define STI_STRING "sti" +#define CLI_STI_CLOBBERS +#define CLI_STI_INPUT_ARGS +#endif /* CONFIG_PARAVIRT */ +#ifdef CONFIG_X86_32 # include "spinlock_32.h" #else # include "spinlock_64.h" #endif + +#endif
include/asm-x86/spinlock_32.h +0 -9
@@ -7,15 +7,6 @@#include <asm/processor.h> #include <linux/compiler.h> -#ifdef CONFIG_PARAVIRT -#include <asm/paravirt.h> -#else -#define CLI_STRING "cli" -#define STI_STRING "sti" -#define CLI_STI_CLOBBERS -#define CLI_STI_INPUT_ARGS -#endif /* CONFIG_PARAVIRT */ -/* * Your basic SMP spinlocks, allowing only a single CPU anywhere *
include/asm-x86/spinlock_64.h +5 -3
@@ -48,12 +48,12 @@ static inline void __raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long fla"jns 5f\n" "testl $0x200, %1\n\t" /* interrupts were disabled? */ "jz 4f\n\t" -"sti\n" +STI_STRING "\n" "3:\t" "rep;nop\n\t" "cmpl $0, %0\n\t" "jle 3b\n\t" -"cli\n\t" +CLI_STRING "\n\t" "jmp 1b\n" "4:\t" "rep;nop\n\t"
@@ -61,7 +61,9 @@ static inline void __raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long fla"jg 1b\n\t" "jmp 4b\n" "5:\n\t" - : "+m" (lock->slock) : "r" ((unsigned)flags) : "memory"); + : "+m" (lock->slock) + : "r" ((unsigned)flags) CLI_STI_INPUT_ARGS + : "memory" CLI_STI_CLOBBERS); } #endif
Signature · 1 line
1.4.4.2
PATCH 2/24 irqflags consolidation
In reply to Glauber de Oliveira CostaThis patch consolidates the irqflags include files containing common paravirt definitions. The native definition for interrupt handling, halt, and such, are the same for 32 and 64 bit, and they are kept in irqflags.h. The differences are split in the arch-specific files.
The syscall function, irq_enable_sysexit, has a very specific i386 naming, and its name is then changed to a more general one.
--- arch/x86/kernel/asm-offsets_32.c | 2 +- arch/x86/kernel/entry_32.S | 8 +- arch/x86/kernel/paravirt_32.c | 10 +- arch/x86/kernel/vmi_32.c | 4 +- arch/x86/xen/enlighten.c | 2 +- include/asm-x86/irqflags.h | 246 +++++++++++++++++++++++++++++++++++++- include/asm-x86/irqflags_32.h | 174 --------------------------- include/asm-x86/irqflags_64.h | 154 ------------------------ include/asm-x86/paravirt.h | 9 +- 9 files changed, 261 insertions(+), 348 deletions(-)
arch/x86/kernel/asm-offsets_32.c +1 -1
@@ -123,7 +123,7 @@ void foo(void)OFFSET (PV_IRQ_irq_disable, pv_irq_ops, irq_disable);OFFSET (PV_IRQ_irq_enable, pv_irq_ops, irq_enable);OFFSET (PV_CPU_iret, pv_cpu_ops, iret); -OFFSET (PV_CPU_irq_enable_sysexit, pv_cpu_ops, irq_enable_sysexit); +OFFSET (PV_CPU_irq_enable_syscall_ret, pv_cpu_ops, irq_enable_syscall_ret);OFFSET (PV_CPU_read_cr0, pv_cpu_ops, read_cr0);#endif
arch/x86/kernel/entry_32.S +4 -4
@@ -58,7 +58,7 @@ * for paravirtualization. The following will never clobber any registers: * INTERRUPT_RETURN (aka. "iret") * GET_CR0_INTO_EAX (aka. "movl %cr0, %eax") - * ENABLE_INTERRUPTS_SYSEXIT (aka "sti; sysexit"). + * ENABLE_INTERRUPTS_SYSCALL_RET (aka "sti; sysexit"). * * For DISABLE_INTERRUPTS/ENABLE_INTERRUPTS (aka "cli"/"sti"), you must * specify what registers can be overwritten (CLBR_NONE, CLBR_EAX/EDX/ECX/ANY).
@@ -351,7 +351,7 @@ sysenter_past_esp: xorl %ebp,%ebp TRACE_IRQS_ON 1: mov PT_FS(%esp), %fs - ENABLE_INTERRUPTS_SYSEXIT + ENABLE_INTERRUPTS_SYSCALL_RET CFI_ENDPROC .pushsection .fixup,"ax" 2: movl $0,PT_FS(%esp)
@@ -882,10 +882,10 @@ ENTRY(native_iret) .previous END(native_iret) -ENTRY(native_irq_enable_sysexit) +ENTRY(native_irq_enable_syscall_ret) sti sysexit -END(native_irq_enable_sysexit) +END(native_irq_enable_syscall_ret) #endif KPROBE_ENTRY(int3)
arch/x86/kernel/paravirt_32.c +5 -5
@@ -60,7 +60,7 @@ DEF_NATIVE(pv_irq_ops, irq_enable, "sti");DEF_NATIVE (pv_irq_ops, restore_fl,"push %eax; popf" );DEF_NATIVE (pv_irq_ops, save_fl,"pushf; pop %eax" );DEF_NATIVE (pv_cpu_ops, iret,"iret" ); -DEF_NATIVE (pv_cpu_ops, irq_enable_sysexit,"sti; sysexit" ); +DEF_NATIVE (pv_cpu_ops, irq_enable_syscall_ret,"sti; sysexit" );DEF_NATIVE (pv_mmu_ops, read_cr2,"mov %cr2, %eax" );DEF_NATIVE (pv_mmu_ops, write_cr3,"mov %eax, %cr3" );DEF_NATIVE (pv_mmu_ops, read_cr3,"mov %cr3, %eax" );
@@ -88,7 +88,7 @@ static unsigned native_patch(u8 type, u16 clobbers, void *ibuf,SITE (pv_irq_ops, restore_fl);SITE (pv_irq_ops, save_fl);SITE (pv_cpu_ops, iret); -SITE (pv_cpu_ops, irq_enable_sysexit); +SITE (pv_cpu_ops, irq_enable_syscall_ret);SITE (pv_mmu_ops, read_cr2);SITE (pv_mmu_ops, read_cr3);SITE (pv_mmu_ops, write_cr3);
@@ -186,7 +186,7 @@ unsigned paravirt_patch_default(u8 type, u16 clobbers, void *insnbuf,/* If the operation is a nop, then nop the callsite */ ret =paravirt_patch_nop (); else if (type == PARAVIRT_PATCH(pv_cpu_ops.iret) || - type == PARAVIRT_PATCH(pv_cpu_ops.irq_enable_sysexit)) + type == PARAVIRT_PATCH(pv_cpu_ops.irq_enable_syscall_ret))/* If operation requires a jmp, then jmp */ ret =paravirt_patch_jmp (insnbuf, opfunc, addr, len); else
@@ -237,7 +237,7 @@ static void native_flush_tlb_single(unsigned long addr)/* These are in entry.S */ extern void native_iret (void ); -extern void native_irq_enable_sysexit (void ); +extern void native_irq_enable_syscall_ret (void );static int __init print_banner (void ) {
@@ -384,7 +384,7 @@ struct pv_cpu_ops pv_cpu_ops = { .write_idt_entry = write_dt_entry, .load_esp0 = native_load_esp0, - .irq_enable_sysexit = native_irq_enable_sysexit, + .irq_enable_syscall_ret = native_irq_enable_syscall_ret, .iret = native_iret, .set_iopl_mask = native_set_iopl_mask,
arch/x86/kernel/vmi_32.c +2 -2
@@ -148,7 +148,7 @@ static unsigned vmi_patch(u8 type, u16 clobbers, void *insns, insns, eip);case PARAVIRT_PATCH (pv_cpu_ops.iret):return patch_internal (VMI_CALL_IRET , len, insns, eip); -case PARAVIRT_PATCH (pv_cpu_ops.irq_enable_sysexit): +case PARAVIRT_PATCH (pv_cpu_ops.irq_enable_syscall_ret):return patch_internal (VMI_CALL_SYSEXIT , len, insns, eip);default :break ;
@@ -870,7 +870,7 @@ static inline int __init activate_vmi(void)* the backend. They are performance critical anyway, so requiring * a patch is not a big problem. */ - pv_cpu_ops.irq_enable_sysexit = (void *)0xfeedbab0 ; + pv_cpu_ops.irq_enable_syscall_ret = (void *)0xfeedbab0 ; pv_cpu_ops.iret = (void *)0xbadbab0 ;#ifdef CONFIG_SMP
arch/x86/xen/enlighten.c +1 -1
@@ -953,7 +953,7 @@ static const struct pv_cpu_ops xen_cpu_ops __initdata = { .read_pmc = native_read_pmc, .iret = (void *)&hypercall_page[__HYPERVISOR_iret], - .irq_enable_sysexit = NULL, /* never called */ + .irq_enable_syscall_ret = NULL, /* never called */ .load_tr_desc = paravirt_nop, .set_ldt = xen_set_ldt,
include/asm-x86/irqflags.h +243 -3
248 lines not on this page · raw message
include/asm-x86/irqflags_32.h deleted +0 -174
174 lines not on this page · raw message
include/asm-x86/irqflags_64.h deleted +0 -154
154 lines not on this page · raw message
include/asm-x86/paravirt.h +5 -4
@@ -121,7 +121,7 @@ struct pv_cpu_ops {u64 (*read_pmc)(void);/* These two are jmp to, not actually called. */ -void (*irq_enable_sysexit)(void ); +void (*irq_enable_syscall_ret)(void );void (*iret)(void );struct pv_lazy_ops lazy_mode;
@@ -1138,9 +1138,10 @@ static inline unsigned long __raw_local_irq_save(void) call *%cs:pv_irq_ops+PV_IRQ_irq_enable; \ popl %edx; popl %ecx; popl %eax) -#define ENABLE_INTERRUPTS_SYSEXIT \ - PARA_SITE(PARA_PATCH(pv_cpu_ops, PV_CPU_irq_enable_sysexit), CLBR_NONE,\ - jmp *%cs:pv_cpu_ops+PV_CPU_irq_enable_sysexit) +#define ENABLE_INTERRUPTS_SYSCALL_RET \ + PARA_SITE(PARA_PATCH(pv_cpu_ops, PV_CPU_irq_enable_syscall_ret),\ + CLBR_NONE, \ + jmp *%cs:pv_cpu_ops+PV_CPU_irq_enable_syscall_ret)#define GET_CR0_INTO_EAX \ push %ecx; push %edx; \
Signature · 1 line
1.4.4.2
Re: [PATCH 1/24] mm/sparse-vmemmap.c: make sure init_mm is included
In reply to Glauber de Oliveira CostaQuoted 21 lines · Glauber de Oliveira Costa
mm/sparse-vmemmap.cusesinit_mmin some places. However, it is not present in any of the headers currently included in the file.
init_mmis defined as extern insched.h, so we add it to the headers listUp to now, this problem was masked by the fact that functions like
set_pte_at()andpmd_populate_kernel()are usually macros that expand to simpler variants that does not use the first parameter at all.Signed-off-by Glauber de Oliveira Costa <[email protected]>Signed-off-by Andrew Morton <akpm-de/[email protected]>Signed-off-by Linus Torvalds <torvalds-de/[email protected]>--- mm/sparse-vmemmap.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)mm/sparse-vmemmap.c +0
-0
mm/sparse-vmemmap.c line 28
Quoted 5 lines
mm/sparse-vmemmap.c +1
-0@@ -24,6 +24,7 @@#include <linux/module.h> #include <linux/spinlock.h> #include <linux/vmalloc.h> +#include <linux/sched.h>
This is already in git.
J
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
Re: [PATCH 1/24] mm/sparse-vmemmap.c: make sure init_mm is included
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Jeremy Fitzhardinge escreveu:
Quoted 30 lines
Quoted 21 lines · Glauber de Oliveira Costa
mm/sparse-vmemmap.cusesinit_mmin some places. However, it is not present in any of the headers currently included in the file.
init_mmis defined as extern insched.h, so we add it to the headers listUp to now, this problem was masked by the fact that functions like
set_pte_at()andpmd_populate_kernel()are usually macros that expand to simpler variants that does not use the first parameter at all.Signed-off-by Glauber de Oliveira Costa <[email protected]>Signed-off-by Andrew Morton <[email protected]>Signed-off-by Linus Torvalds <[email protected]>--- mm/sparse-vmemmap.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)mm/sparse-vmemmap.c +0
-0mm/sparse-vmemmap.c line 28
Quoted 5 lines
mm/sparse-vmemmap.c +1
-0@@ -24,6 +24,7 @@#include <linux/module.h> #include <linux/spinlock.h> #include <linux/vmalloc.h> +#include <linux/sched.h> This is already in git.
Quoted 1 line
J
As I told in the 0th message, yes, I'm aware.
Just it does not seem to be in tglx's , so if people are willing to try this out, they'll needed. Thus it's included in the series.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: Using GnuPG with Remi - http://enigmail.mozdev.org
iD8DBQFHNQjijYI8LaFUWXMRAn+UAJ48V1EyWoXkWu1+J0Y0ze59H7ZG2QCcDdgW 4qVJgJcQDfJrvZk8TSo901s=
=RwdO
-----END PGP SIGNATURE-----
Re: [PATCH 1/24] mm/sparse-vmemmap.c: make sure init_mm is included
In reply to Jeremy Fitzhardinge-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Jeremy Fitzhardinge escreveu:
Quoted 30 lines
Quoted 21 lines · Glauber de Oliveira Costa
mm/sparse-vmemmap.cusesinit_mmin some places. However, it is not present in any of the headers currently included in the file.
init_mmis defined as extern insched.h, so we add it to the headers listUp to now, this problem was masked by the fact that functions like
set_pte_at()andpmd_populate_kernel()are usually macros that expand to simpler variants that does not use the first parameter at all.Signed-off-by Glauber de Oliveira Costa <[email protected]>Signed-off-by Andrew Morton <[email protected]>Signed-off-by Linus Torvalds <[email protected]>--- mm/sparse-vmemmap.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)mm/sparse-vmemmap.c +0
-0mm/sparse-vmemmap.c line 28
Quoted 5 lines
mm/sparse-vmemmap.c +1
-0@@ -24,6 +24,7 @@#include <linux/module.h> #include <linux/spinlock.h> #include <linux/vmalloc.h> +#include <linux/sched.h> This is already in git.
Quoted 1 line
J
As I told in the 0th message, yes, I'm aware.
Just it does not seem to be in tglx's , so if people are willing to try this out, they'll needed. Thus it's included in the series.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: Using GnuPG with Remi - http://enigmail.mozdev.org
iD8DBQFHNQjijYI8LaFUWXMRAn+UAJ48V1EyWoXkWu1+J0Y0ze59H7ZG2QCcDdgW 4qVJgJcQDfJrvZk8TSo901s=
=RwdO
-----END PGP SIGNATURE-----
Re: [PATCH 1/24] mm/sparse-vmemmap.c: make sure init_mm is included
In reply to Glauber de Oliveira CostaQuoted 21 lines · Glauber de Oliveira Costa
mm/sparse-vmemmap.cusesinit_mmin some places. However, it is not present in any of the headers currently included in the file.
init_mmis defined as extern insched.h, so we add it to the headers listUp to now, this problem was masked by the fact that functions like
set_pte_at()andpmd_populate_kernel()are usually macros that expand to simpler variants that does not use the first parameter at all.Signed-off-by Glauber de Oliveira Costa <[email protected]>Signed-off-by Andrew Morton <[email protected]>Signed-off-by Linus Torvalds <[email protected]>--- mm/sparse-vmemmap.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)mm/sparse-vmemmap.c +0
-0
mm/sparse-vmemmap.c line 28
Quoted 5 lines
mm/sparse-vmemmap.c +1
-0@@ -24,6 +24,7 @@#include <linux/module.h> #include <linux/spinlock.h> #include <linux/vmalloc.h> +#include <linux/sched.h>
This is already in git.
J
PATCH 1/24 mm/sparse-vmemmap.c: make sure init_mm is included
In reply to Glauber de Oliveira Costamm/sparse-vmemmap.c uses init_mm in some places. However, it is not present in any of the headers currently included in the file.
init_mm is defined as extern in sched.h, so we add it to the headers list
Up to now, this problem was masked by the fact that functions like set_pte_at() and pmd_populate_kernel() are usually macros that expand to simpler variants that does not use the first parameter at all.
--- mm/sparse-vmemmap.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
mm/sparse-vmemmap.c +1 -0
@@ -24,6 +24,7 @@#include <linux/module.h> #include <linux/spinlock.h> #include <linux/vmalloc.h> +#include <linux/sched.h> #include <asm/dma.h> #include <asm/pgalloc.h> #include <asm/pgtable.h>
Signature · 1 line
1.4.4.2
Quoted 18 lines · On Saturday 10 November 2007 00:12:41 Glauber de Oliveira Costa wrote:
Hey folks,
Here's a new spin of the pvops64 patch series. We didn't get that many comments from the last time, so it should be probably almost ready to get in. Heya!
Quoted 1 line
From the last version, the most notable changes are:
* consolidation of
system.h, merging jeremy's comments about ordering concerns
* consolidation of smp functions that goes throughsmp_ops. They're sharing a bunch of code now.Other than that, just some issues that arose from the rebase.
Please, not that this patch series
_doesnot_apply over linus git anymore, but rather, over tglx cleanup series.
Quoted 8 lines
The first patch in this series is already on linus', but not on tglx', so I'm sending it again, because you'll need it if you want to compile it anyway.
tglx, in the absense of any outstanding NACKs, or any very big call for improvements, could you please pull it in your tree?
Have fun,
Glauber, are you planning on consolidating the dma_ops structure for 32- and 64-bit? 32-bit doesn't currently have a dma_mapping_ops structure, which makes paravirtualizing DMA access difficult on 32-bit.
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Amit Shah escreveu:
Quoted 23 lines · On Saturday 10 November 2007 00:12:41 Glauber de Oliveira Costa wrote:
Quoted 22 lines
Hey folks,
Here's a new spin of the pvops64 patch series. We didn't get that many comments from the last time, so it should be probably almost ready to get in. Heya!
Quoted 1 line
From the last version, the most notable changes are:
* consolidation of
system.h, merging jeremy's comments about ordering concerns
* consolidation of smp functions that goes throughsmp_ops. They're sharing a bunch of code now.Other than that, just some issues that arose from the rebase.
Please, not that this patch series
_doesnot_apply over linus git anymore, but rather, over tglx cleanup series.The first patch in this series is already on linus', but not on tglx', so I'm sending it again, because you'll need it if you want to compile it anyway.
Quoted 8 lines
Quoted 4 lines
tglx, in the absense of any outstanding NACKs, or any very big call for improvements, could you please pull it in your tree?
Have fun,
Glauber, are you planning on consolidating the
dma_opsstructure for 32- and 64-bit? 32-bit doesn't currently have adma_mapping_opsstructure, which makes paravirtualizing DMA access difficult on 32-bit.
Until its get merged, definitely not. Although important, this is significant work, and can delay us even more. But I was not planning to do it at all (well, you were the first that raised the issue...)
So if the reason for your question is you are planning to work on it, go ahead ;-)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: Using GnuPG with Remi - http://enigmail.mozdev.org
iD8DBQFHOY3mjYI8LaFUWXMRAvnqAJ4ridsG0ZB2aI7U36hbZFBO0PoDgQCgqvjc n6RbVz7Jw8t9qCyKUN+hLGg=
=crYj
-----END PGP SIGNATURE-----
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Amit Shah escreveu:
Quoted 23 lines · On Saturday 10 November 2007 00:12:41 Glauber de Oliveira Costa wrote:
Quoted 22 lines
Hey folks,
Here's a new spin of the pvops64 patch series. We didn't get that many comments from the last time, so it should be probably almost ready to get in. Heya!
Quoted 1 line
From the last version, the most notable changes are:
* consolidation of
system.h, merging jeremy's comments about ordering concerns
* consolidation of smp functions that goes throughsmp_ops. They're sharing a bunch of code now.Other than that, just some issues that arose from the rebase.
Please, not that this patch series
_doesnot_apply over linus git anymore, but rather, over tglx cleanup series.The first patch in this series is already on linus', but not on tglx', so I'm sending it again, because you'll need it if you want to compile it anyway.
Quoted 8 lines
Quoted 4 lines
tglx, in the absense of any outstanding NACKs, or any very big call for improvements, could you please pull it in your tree?
Have fun,
Glauber, are you planning on consolidating the
dma_opsstructure for 32- and 64-bit? 32-bit doesn't currently have adma_mapping_opsstructure, which makes paravirtualizing DMA access difficult on 32-bit.
Until its get merged, definitely not. Although important, this is significant work, and can delay us even more. But I was not planning to do it at all (well, you were the first that raised the issue...)
So if the reason for your question is you are planning to work on it, go ahead ;-)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: Using GnuPG with Remi - http://enigmail.mozdev.org
iD8DBQFHOY3mjYI8LaFUWXMRAvnqAJ4ridsG0ZB2aI7U36hbZFBO0PoDgQCgqvjc n6RbVz7Jw8t9qCyKUN+hLGg=
=crYj
-----END PGP SIGNATURE-----
Quoted 3 lines · Amit Shah
Glauber, are you planning on consolidating the
dma_opsstructure for 32- and 64-bit? 32-bit doesn't currently have adma_mapping_opsstructure, which makes paravirtualizing DMA access difficult on 32-bit.
I think it's a good idea. While I haven't worked out the details yet, it seems like something I'll need for Xen dom0 support.
J
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
Quoted 3 lines · Amit Shah
Glauber, are you planning on consolidating the
dma_opsstructure for 32- and 64-bit? 32-bit doesn't currently have adma_mapping_opsstructure, which makes paravirtualizing DMA access difficult on 32-bit.
I think it's a good idea. While I haven't worked out the details yet, it seems like something I'll need for Xen dom0 support.
J
Quoted 18 lines · On Saturday 10 November 2007 00:12:41 Glauber de Oliveira Costa wrote:
Hey folks,
Here's a new spin of the pvops64 patch series. We didn't get that many comments from the last time, so it should be probably almost ready to get in. Heya!
Quoted 1 line
From the last version, the most notable changes are:
* consolidation of
system.h, merging jeremy's comments about ordering concerns
* consolidation of smp functions that goes throughsmp_ops. They're sharing a bunch of code now.Other than that, just some issues that arose from the rebase.
Please, not that this patch series
_doesnot_apply over linus git anymore, but rather, over tglx cleanup series.
Quoted 8 lines
The first patch in this series is already on linus', but not on tglx', so I'm sending it again, because you'll need it if you want to compile it anyway.
tglx, in the absense of any outstanding NACKs, or any very big call for improvements, could you please pull it in your tree?
Have fun,
Glauber, are you planning on consolidating the dma_ops structure for 32- and 64-bit? 32-bit doesn't currently have a dma_mapping_ops structure, which makes paravirtualizing DMA access difficult on 32-bit.