adjust pvops to accomodate its x86_64 variant
Subsystems (3)
cover adjust pvops to accomodate its x86_64 variant
Hi folks,
With this series, the bulk of the work of pvops64 is done. Here, I integrate most of the paravirt.c and paravirt.h files, making them applicable to both architectures.
CONFIG_PARAVIRT is _not_ present yet. Basically, this code is missing page table integration (patches currently being worked on by Jeremy).
Enjoy
PATCH 1/15 change paravirt_32.c name
This patch changes paravirt_32.c to paravirt.c. The goal is to have paravirt support in x86_64, so we do it in a common file
--- arch/x86/kernel/Makefile_32 | 2 +- arch/x86/kernel/paravirt.c | 475 +++++++++++++++++++++++++++++++++++++++++ arch/x86/kernel/paravirt_32.c | 472 ---------------------------------------- 3 files changed, 476 insertions(+), 473 deletions(-) create mode 100644 arch/x86/kernel/paravirt.c delete mode 100644 arch/x86/kernel/paravirt_32.c
arch/x86/kernel/Makefile_32 +1 -1
@@ -48,7 +48,7 @@ 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-$(CONFIG_PARAVIRT) += paravirt.o obj-y += pcspeaker.o obj-$(CONFIG_SCx200) += scx200_32.o
arch/x86/kernel/paravirt.c new file +475 -0
475 lines not on this page · raw message
arch/x86/kernel/paravirt_32.c deleted +0 -472
472 lines not on this page · raw message
PATCH 1/15 change paravirt_32.c name
In reply to Glauber de Oliveira CostaThis patch changes paravirt_32.c to paravirt.c. The goal is to have paravirt support in x86_64, so we do it in a common file
--- arch/x86/kernel/Makefile_32 | 2 +- arch/x86/kernel/paravirt.c | 475 +++++++++++++++++++++++++++++++++++++++++ arch/x86/kernel/paravirt_32.c | 472 ---------------------------------------- 3 files changed, 476 insertions(+), 473 deletions(-) create mode 100644 arch/x86/kernel/paravirt.c delete mode 100644 arch/x86/kernel/paravirt_32.c
arch/x86/kernel/Makefile_32 +1 -1
@@ -48,7 +48,7 @@ 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-$(CONFIG_PARAVIRT) += paravirt.o obj-y += pcspeaker.o obj-$(CONFIG_SCx200) += scx200_32.o
arch/x86/kernel/paravirt.c new file +475 -0
475 lines not on this page · raw message
arch/x86/kernel/paravirt_32.c deleted +0 -472
472 lines not on this page · raw message
PATCH 2/15 adjust PVOP_CALL/VCALL macros for x86_64
This patch adjust the PVOP_VCALL and PVOP_CALL macros to work with x86_64. It has a different calling convention, and we use auxiliary macros to account for both calling conventions as cleanly as possible
Comments are adjusted accordingly.
--- include/asm-x86/paravirt.h | 87 +++++++++++++++++++++++++++++++++----------- 1 files changed, 65 insertions(+), 22 deletions(-)
include/asm-x86/paravirt.h +65 -22
@@ -320,7 +320,7 @@* runtime. * * Normally, a call to a pv_op function is a simple indirect call: -* (paravirt_ops.operations)(args...). +* (pv_op_struct.operations)(args...). * * Unfortunately, this is a relatively slow operation for modern CPUs, * because it cannot necessarily determine what the destination
@@ -330,11 +330,17 @@* calls are essentially free, because the call and return addresses * are completely predictable.) * -* These macros rely on the standard gcc "regparm(3)" calling +* For i386, these macros rely on the standard gcc "regparm(3)" calling * convention, in which the first three arguments are placed in %eax, * %edx, %ecx (in that order), and the remaining arguments are placed * on the stack. All caller-save registers (eax,edx,ecx) are expected * to be modified (either clobbered or used for return values). +* X86_64, on the other hand, already specifies a register-based calling +* conventions, returning at %rax, with parameteres going on %rdi, %rsi, +* %rdx, and %rcx. Note that for this reason, x86_64 does not need any +* special handling for dealing with 4 arguments, unlike i386. +* However, x86_64 also have to clobber all caller saved registers, which +* unfortunately, are quite a bit (r8 - r11) * * The call instruction itself is marked by placing its start address * and size into the .parainstructions section, so that
@@ -357,10 +363,12 @@* the return type. The macro then uses sizeof() on that type to * determine whether its a 32 or 64 bit value, and places the return * in the right register(s) (just %eax for 32-bit, and %edx:%eax for -* 64-bit). +* 64-bit). For x86_64 machines, it just returns at %rax regardless of +* the return value size. * * 64-bit arguments are passed as a pair of adjacent 32-bit arguments -* in low,high order. +* i386 also passes 64-bit arguments as a pair of adjacent 32-bit arguments +* in low,high order * * Small structures are passed and returned in registers. The macro * calling convention can't directly deal with this, so the wrapper
@@ -370,46 +378,67 @@* means that all uses must be wrapped in inline functions. This also * makes sure the incoming and outgoing types are always correct. */ +#ifdef CONFIG_X86_32 +#define PVOP_VCALL_ARGS unsigned long __eax, __edx, __ecx +#define PVOP_CALL_ARGS PVOP_VCALL_ARGS +#define PVOP_VCALL_CLOBBERS "=a" (__eax), "=d" (__edx), \ + "=c" (__ecx) +#define PVOP_CALL_CLOBBERS PVOP_VCALL_CLOBBERS +#define EXTRA_CLOBBERS +#define VEXTRA_CLOBBERS +#else +#define PVOP_VCALL_ARGS unsigned long __edi, __esi, __edx, __ecx +#define PVOP_CALL_ARGS PVOP_VCALL_ARGS, __eax +#define PVOP_VCALL_CLOBBERS "=D" (__edi), \ + "=S" (__esi), "=d" (__edx), \ + "=c" (__ecx) + +#define PVOP_CALL_CLOBBERS PVOP_VCALL_CLOBBERS, "=a" (__eax) + +#define EXTRA_CLOBBERS , "r8", "r9", "r10", "r11" +#define VEXTRA_CLOBBERS , "rax", "r8", "r9", "r10", "r11" +#endif + #define __PVOP_CALL(rettype, op, pre, post, ...) \ ({ \ rettype __ret; \ - unsigned long __eax, __edx, __ecx; \ + PVOP_CALL_ARGS; \ + /* This is 32-bit specific, but is okay in 64-bit */ \ +/* since this condition will never hold */ \ if (sizeof(rettype) > sizeof(unsigned long)) { \ asm volatile(pre \ paravirt_alt(PARAVIRT_CALL) \ post \ - : "=a" (__eax), "=d" (__edx), \ - "=c" (__ecx) \ + : PVOP_CALL_CLOBBERS \ : paravirt_type(op), \ paravirt_clobber(CLBR_ANY), \ ##__VA_ARGS__ \ - : "memory", "cc"); \ + : "memory", "cc" EXTRA_CLOBBERS); \ __ret = (rettype)((((u64)__edx) << 32) | __eax); \ } else { \ asm volatile(pre \ paravirt_alt(PARAVIRT_CALL) \ post \ - : "=a" (__eax), "=d" (__edx), \ - "=c" (__ecx) \ + : PVOP_CALL_CLOBBERS \ : paravirt_type(op), \ paravirt_clobber(CLBR_ANY), \ ##__VA_ARGS__ \ - : "memory", "cc"); \ + : "memory", "cc" EXTRA_CLOBBERS); \ __ret = (rettype)__eax; \ } \ __ret; \ })#define __PVOP_VCALL (op, pre, post, ...) \ ({ \ - unsigned long __eax, __edx, __ecx; \ + PVOP_VCALL_ARGS; \ asm volatile(pre \ paravirt_alt(PARAVIRT_CALL) \ post \ - : "=a" (__eax), "=d" (__edx), "=c" (__ecx) \ + : PVOP_VCALL_CLOBBERS \ : paravirt_type(op), \ paravirt_clobber(CLBR_ANY), \ ##__VA_ARGS__ \ - : "memory", "cc"); \ + : "memory", "cc" VEXTRA_CLOBBERS); \ })#define PVOP_CALL0 (rettype, op) \
@@ -418,22 +447,26 @@ __PVOP_VCALL(op, "", "")#define PVOP_CALL1 (rettype, op, arg1) \ - __PVOP_CALL(rettype, op, "", "", "0" ((u32)(arg1))) + __PVOP_CALL(rettype, op, "", "", "0" ((unsigned long)(arg1)))#define PVOP_VCALL1 (op, arg1) \ - __PVOP_VCALL(op, "", "", "0" ((u32)(arg1))) + __PVOP_VCALL(op, "", "", "0" ((unsigned long)(arg1)))#define PVOP_CALL2 (rettype, op, arg1, arg2) \ - __PVOP_CALL(rettype, op, "", "", "0" ((u32)(arg1)), "1" ((u32)(arg2))) + __PVOP_CALL(rettype, op, "", "", "0" ((unsigned long)(arg1)), \ + "1" ((unsigned long)(arg2)))#define PVOP_VCALL2 (op, arg1, arg2) \ - __PVOP_VCALL(op, "", "", "0" ((u32)(arg1)), "1" ((u32)(arg2))) + __PVOP_VCALL(op, "", "", "0" ((unsigned long)(arg1)), \ + "1" ((unsigned long)(arg2)))#define PVOP_CALL3 (rettype, op, arg1, arg2, arg3) \ - __PVOP_CALL(rettype, op, "", "", "0" ((u32)(arg1)), \ - "1"((u32)(arg2)), "2"((u32)(arg3))) + __PVOP_CALL(rettype, op, "", "", "0" ((unsigned long)(arg1)), \ + "1"((unsigned long)(arg2)), "2"((unsigned long)(arg3)))#define PVOP_VCALL3 (op, arg1, arg2, arg3) \ - __PVOP_VCALL(op, "", "", "0" ((u32)(arg1)), "1"((u32)(arg2)), \ - "2"((u32)(arg3))) + __PVOP_VCALL(op, "", "", "0" ((unsigned long)(arg1)), \ + "1"((unsigned long)(arg2)), "2"((unsigned long)(arg3))) +/* This is the only difference in x86_64. We can make it much simpler */ +#ifdef CONFIG_X86_32 #define PVOP_CALL4 (rettype, op, arg1, arg2, arg3, arg4) \ __PVOP_CALL(rettype, op, \ "push %[_arg4];", "lea 4(%%esp),%%esp;", \
@@ -444,6 +477,16 @@ "push %[_arg4];", "lea 4(%%esp),%%esp;", \ "0" ((u32)(arg1)), "1" ((u32)(arg2)), \ "2" ((u32)(arg3)), [_arg4] "mr" ((u32)(arg4))) +#else +#define PVOP_CALL4 (rettype, op, arg1, arg2, arg3, arg4) \ + __PVOP_CALL(rettype, op, "", "", "0" ((unsigned long)(arg1)), \ + "1"((unsigned long)(arg2)), "2"((unsigned long)(arg3)), \ + "3"((unsigned long)(arg4))) +#define PVOP_VCALL4 (op, arg1, arg2, arg3, arg4) \ + __PVOP_VCALL(op, "", "", "0" ((unsigned long)(arg1)), \ + "1"((unsigned long)(arg2)), "2"((unsigned long)(arg3)), \ + "3"((unsigned long)(arg4))) +#endif static inline int paravirt_enabled (void ) {
PATCH 2/15 adjust PVOP_CALL/VCALL macros for x86_64
In reply to Glauber de Oliveira CostaThis patch adjust the PVOP_VCALL and PVOP_CALL macros to work with x86_64. It has a different calling convention, and we use auxiliary macros to account for both calling conventions as cleanly as possible
Comments are adjusted accordingly.
--- include/asm-x86/paravirt.h | 87 +++++++++++++++++++++++++++++++++----------- 1 files changed, 65 insertions(+), 22 deletions(-)
include/asm-x86/paravirt.h +65 -22
@@ -320,7 +320,7 @@* runtime. * * Normally, a call to a pv_op function is a simple indirect call: -* (paravirt_ops.operations)(args...). +* (pv_op_struct.operations)(args...). * * Unfortunately, this is a relatively slow operation for modern CPUs, * because it cannot necessarily determine what the destination
@@ -330,11 +330,17 @@* calls are essentially free, because the call and return addresses * are completely predictable.) * -* These macros rely on the standard gcc "regparm(3)" calling +* For i386, these macros rely on the standard gcc "regparm(3)" calling * convention, in which the first three arguments are placed in %eax, * %edx, %ecx (in that order), and the remaining arguments are placed * on the stack. All caller-save registers (eax,edx,ecx) are expected * to be modified (either clobbered or used for return values). +* X86_64, on the other hand, already specifies a register-based calling +* conventions, returning at %rax, with parameteres going on %rdi, %rsi, +* %rdx, and %rcx. Note that for this reason, x86_64 does not need any +* special handling for dealing with 4 arguments, unlike i386. +* However, x86_64 also have to clobber all caller saved registers, which +* unfortunately, are quite a bit (r8 - r11) * * The call instruction itself is marked by placing its start address * and size into the .parainstructions section, so that
@@ -357,10 +363,12 @@* the return type. The macro then uses sizeof() on that type to * determine whether its a 32 or 64 bit value, and places the return * in the right register(s) (just %eax for 32-bit, and %edx:%eax for -* 64-bit). +* 64-bit). For x86_64 machines, it just returns at %rax regardless of +* the return value size. * * 64-bit arguments are passed as a pair of adjacent 32-bit arguments -* in low,high order. +* i386 also passes 64-bit arguments as a pair of adjacent 32-bit arguments +* in low,high order * * Small structures are passed and returned in registers. The macro * calling convention can't directly deal with this, so the wrapper
@@ -370,46 +378,67 @@* means that all uses must be wrapped in inline functions. This also * makes sure the incoming and outgoing types are always correct. */ +#ifdef CONFIG_X86_32 +#define PVOP_VCALL_ARGS unsigned long __eax, __edx, __ecx +#define PVOP_CALL_ARGS PVOP_VCALL_ARGS +#define PVOP_VCALL_CLOBBERS "=a" (__eax), "=d" (__edx), \ + "=c" (__ecx) +#define PVOP_CALL_CLOBBERS PVOP_VCALL_CLOBBERS +#define EXTRA_CLOBBERS +#define VEXTRA_CLOBBERS +#else +#define PVOP_VCALL_ARGS unsigned long __edi, __esi, __edx, __ecx +#define PVOP_CALL_ARGS PVOP_VCALL_ARGS, __eax +#define PVOP_VCALL_CLOBBERS "=D" (__edi), \ + "=S" (__esi), "=d" (__edx), \ + "=c" (__ecx) + +#define PVOP_CALL_CLOBBERS PVOP_VCALL_CLOBBERS, "=a" (__eax) + +#define EXTRA_CLOBBERS , "r8", "r9", "r10", "r11" +#define VEXTRA_CLOBBERS , "rax", "r8", "r9", "r10", "r11" +#endif + #define __PVOP_CALL(rettype, op, pre, post, ...) \ ({ \ rettype __ret; \ - unsigned long __eax, __edx, __ecx; \ + PVOP_CALL_ARGS; \ + /* This is 32-bit specific, but is okay in 64-bit */ \ +/* since this condition will never hold */ \ if (sizeof(rettype) > sizeof(unsigned long)) { \ asm volatile(pre \ paravirt_alt(PARAVIRT_CALL) \ post \ - : "=a" (__eax), "=d" (__edx), \ - "=c" (__ecx) \ + : PVOP_CALL_CLOBBERS \ : paravirt_type(op), \ paravirt_clobber(CLBR_ANY), \ ##__VA_ARGS__ \ - : "memory", "cc"); \ + : "memory", "cc" EXTRA_CLOBBERS); \ __ret = (rettype)((((u64)__edx) << 32) | __eax); \ } else { \ asm volatile(pre \ paravirt_alt(PARAVIRT_CALL) \ post \ - : "=a" (__eax), "=d" (__edx), \ - "=c" (__ecx) \ + : PVOP_CALL_CLOBBERS \ : paravirt_type(op), \ paravirt_clobber(CLBR_ANY), \ ##__VA_ARGS__ \ - : "memory", "cc"); \ + : "memory", "cc" EXTRA_CLOBBERS); \ __ret = (rettype)__eax; \ } \ __ret; \ })#define __PVOP_VCALL (op, pre, post, ...) \ ({ \ - unsigned long __eax, __edx, __ecx; \ + PVOP_VCALL_ARGS; \ asm volatile(pre \ paravirt_alt(PARAVIRT_CALL) \ post \ - : "=a" (__eax), "=d" (__edx), "=c" (__ecx) \ + : PVOP_VCALL_CLOBBERS \ : paravirt_type(op), \ paravirt_clobber(CLBR_ANY), \ ##__VA_ARGS__ \ - : "memory", "cc"); \ + : "memory", "cc" VEXTRA_CLOBBERS); \ })#define PVOP_CALL0 (rettype, op) \
@@ -418,22 +447,26 @@ __PVOP_VCALL(op, "", "")#define PVOP_CALL1 (rettype, op, arg1) \ - __PVOP_CALL(rettype, op, "", "", "0" ((u32)(arg1))) + __PVOP_CALL(rettype, op, "", "", "0" ((unsigned long)(arg1)))#define PVOP_VCALL1 (op, arg1) \ - __PVOP_VCALL(op, "", "", "0" ((u32)(arg1))) + __PVOP_VCALL(op, "", "", "0" ((unsigned long)(arg1)))#define PVOP_CALL2 (rettype, op, arg1, arg2) \ - __PVOP_CALL(rettype, op, "", "", "0" ((u32)(arg1)), "1" ((u32)(arg2))) + __PVOP_CALL(rettype, op, "", "", "0" ((unsigned long)(arg1)), \ + "1" ((unsigned long)(arg2)))#define PVOP_VCALL2 (op, arg1, arg2) \ - __PVOP_VCALL(op, "", "", "0" ((u32)(arg1)), "1" ((u32)(arg2))) + __PVOP_VCALL(op, "", "", "0" ((unsigned long)(arg1)), \ + "1" ((unsigned long)(arg2)))#define PVOP_CALL3 (rettype, op, arg1, arg2, arg3) \ - __PVOP_CALL(rettype, op, "", "", "0" ((u32)(arg1)), \ - "1"((u32)(arg2)), "2"((u32)(arg3))) + __PVOP_CALL(rettype, op, "", "", "0" ((unsigned long)(arg1)), \ + "1"((unsigned long)(arg2)), "2"((unsigned long)(arg3)))#define PVOP_VCALL3 (op, arg1, arg2, arg3) \ - __PVOP_VCALL(op, "", "", "0" ((u32)(arg1)), "1"((u32)(arg2)), \ - "2"((u32)(arg3))) + __PVOP_VCALL(op, "", "", "0" ((unsigned long)(arg1)), \ + "1"((unsigned long)(arg2)), "2"((unsigned long)(arg3))) +/* This is the only difference in x86_64. We can make it much simpler */ +#ifdef CONFIG_X86_32 #define PVOP_CALL4 (rettype, op, arg1, arg2, arg3, arg4) \ __PVOP_CALL(rettype, op, \ "push %[_arg4];", "lea 4(%%esp),%%esp;", \
@@ -444,6 +477,16 @@ "push %[_arg4];", "lea 4(%%esp),%%esp;", \ "0" ((u32)(arg1)), "1" ((u32)(arg2)), \ "2" ((u32)(arg3)), [_arg4] "mr" ((u32)(arg4))) +#else +#define PVOP_CALL4 (rettype, op, arg1, arg2, arg3, arg4) \ + __PVOP_CALL(rettype, op, "", "", "0" ((unsigned long)(arg1)), \ + "1"((unsigned long)(arg2)), "2"((unsigned long)(arg3)), \ + "3"((unsigned long)(arg4))) +#define PVOP_VCALL4 (op, arg1, arg2, arg3, arg4) \ + __PVOP_VCALL(op, "", "", "0" ((unsigned long)(arg1)), \ + "1"((unsigned long)(arg2)), "2"((unsigned long)(arg3)), \ + "3"((unsigned long)(arg4))) +#endif static inline int paravirt_enabled (void ) {
PATCH 3/15 cleanup write_tsc
write_tsc() does not need to be enclosed in any paravirt closure, as it uses wrmsr(). So we rip off the duplicate in msr.h and the definition from paravirt.h
--- include/asm-x86/msr.h | 2 -- include/asm-x86/paravirt.h | 2 -- 2 files changed, 0 insertions(+), 4 deletions(-)
include/asm-x86/msr.h +0 -2
@@ -153,8 +153,6 @@#define rdtscll (val) \ ((val) = native_read_tsc()) -#define write_tsc (val1,val2) wrmsr(0x10, val1, val2) -#define rdpmc (counter,low,high) \ do { \ u64 _l = native_read_pmc(counter); \
include/asm-x86/paravirt.h +0 -2
@@ -657,8 +657,6 @@ }#define calculate_cpu_khz () (pv_time_ops.get_cpu_khz()) -#define write_tsc (val1,val2) wrmsr(0x10, val1, val2) -static inline unsigned long long paravirt_read_pmc (int counter) {return PVOP_CALL1 (u64, pv_cpu_ops.read_pmc, counter);
PATCH 4/15 provide paravirtualized hook for rdtscp
This patch adds a field in pv_cpu_ops for a paravirtualized hook for rdtscp, needed for x86_64.
--- arch/x86/kernel/paravirt.c | 1 + include/asm-x86/paravirt.h | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 0 deletions(-)
arch/x86/kernel/paravirt.c +1 -0
@@ -374,6 +374,7 @@ .write_msr = native_write_msr_safe, .read_tsc = native_read_tsc, .read_pmc = native_read_pmc, + .read_tscp = native_read_tscp, .load_tr_desc = native_load_tr_desc, .set_ldt = native_set_ldt, .load_gdt = native_load_gdt,
include/asm-x86/paravirt.h +22 -0
@@ -120,6 +120,7 @@u64 (*read_tsc)(void);u64 (*read_pmc)(int counter); +unsigned long long (*read_tscp)(unsigned int *aux);/* These two are jmp to, not actually called. */ void (*irq_enable_syscall_ret)(void );
@@ -668,6 +669,27 @@ high = _l >>32 ; \ }while (0 ) +static inline unsigned long long paravirt_rdtscp(unsigned int *aux) +{ +return PVOP_CALL1 (u64, pv_cpu_ops.read_tscp, aux); +} + +#define rdtscp (low, high, aux) \ +do { \ + int __aux; \ + unsigned long __val = paravirt_rdtscp(&__aux); \ + (low) = (u32)__val; \ + (high) = (u32)(__val >> 32); \ + (aux) = __aux; \ +} while (0) + +#define rdtscpll (val, aux) \ +do { \ + unsigned long __aux; \ + val = paravirt_rdtscp(&__aux); \ + (aux) = __aux; \ +} while (0) +static inline void load_TR_desc (void ) {PVOP_VCALL0 (pv_cpu_ops.load_tr_desc);
PATCH 5/15 change assembly definition of paravirt_patch_site
To account for differences in x86_64, we change the macros that create raw instances of the paravirt_patch_site struct.
We need to align 64-pointers to 64-bit boundaries, so we add an alignment directive. Also, we need to make room for a word-sized pointer, instead of a fixed 32-bit one
--- include/asm-x86/paravirt.h | 16 +++++++++++++--- 1 files changed, 13 insertions(+), 3 deletions(-)
include/asm-x86/paravirt.h +13 -3
@@ -5,6 +5,7 @@#ifdef CONFIG_PARAVIRT #include <asm/page.h> +#include <asm/asm.h> /* Bitmask of what can be clobbered: usually at least eax. */ #define CLBR_NONE 0x0
@@ -281,7 +282,8 @@#define _paravirt_alt (insn_string, type, clobber) \ "771:\n\t" insn_string "\n" "772:\n" \ ".pushsection .parainstructions,\"a\"\n" \ - " .long 771b\n" \ + _ASM_ALIGN "\n" \ + _ASM_PTR " 771b\n" \ " .byte " type "\n" \ " .byte 772b-771b\n" \ " .short " clobber "\n" \
@@ -1159,17 +1161,25 @@#define PARA_PATCH (struct, off) ((PARAVIRT_PATCH_##struct + (off)) / 4) -#define PARA_SITE (ptype, clobbers, ops) \ +#define _PVSITE (ptype, clobbers, ops, word, algn) \ 771:; \ ops; \ 772:; \ .pushsection .parainstructions,"a"; \ - .long 771b; \ + .align algn; \ + word 771b; \ .byte ptype; \ .byte 772b-771b; \ .short clobbers; \ .popsection + +#ifdef CONFIG_X86_64 +#define PARA_SITE (ptype, clobbers, ops) _PVSITE(ptype, clobbers, ops, .quad, 8) +#else +#define PARA_SITE (ptype, clobbers, ops) _PVSITE(ptype, clobbers, ops, .long, 4) +#endif +#define INTERRUPT_RETURN \ PARA_SITE(PARA_PATCH(pv_cpu_ops, PV_CPU_iret), CLBR_NONE, \ jmp *%cs:pv_cpu_ops+PV_CPU_iret)
PATCH 6/15 adjust assembly macros to x86_64 as well.
This patch adjust the paravirt macros used in assembly code to accomodate for x86_64 as well.
--- include/asm-x86/paravirt.h | 18 ++++++++++++------ 1 files changed, 12 insertions(+), 6 deletions(-)
include/asm-x86/paravirt.h +12 -6
@@ -1159,8 +1159,6 @@#else /* __ASSEMBLY__ */ -#define PARA_PATCH (struct, off) ((PARAVIRT_PATCH_##struct + (off)) / 4) -#define _PVSITE (ptype, clobbers, ops, word, algn) \ 771:; \ ops; \
@@ -1175,8 +1173,14 @@#ifdef CONFIG_X86_64 +#define PV_SAVE_REGS pushq %rax; pushq %rdi; pushq %rcx; pushq %rdx +#define PV_RESTORE_REGS popq %rdx; popq %rcx; popq %rdi; popq %rax +#define PARA_PATCH (struct, off) ((PARAVIRT_PATCH_##struct + (off)) / 8)#define PARA_SITE (ptype, clobbers, ops) _PVSITE(ptype, clobbers, ops, .quad, 8)#else +#define PV_SAVE_REGS pushl %eax; pushl %edi; pushl %ecx; pushl %edx +#define PV_RESTORE_REGS popl %edx; popl %ecx; popl %edi; popl %eax +#define PARA_PATCH (struct, off) ((PARAVIRT_PATCH_##struct + (off)) / 4)#define PARA_SITE (ptype, clobbers, ops) _PVSITE(ptype, clobbers, ops, .long, 4)#endif
@@ -1186,25 +1190,27 @@#define DISABLE_INTERRUPTS (clobbers) \ PARA_SITE(PARA_PATCH(pv_irq_ops, PV_IRQ_irq_disable), clobbers, \ - pushl %eax; pushl %ecx; pushl %edx; \ + PV_SAVE_REGS; \ call *%cs:pv_irq_ops+PV_IRQ_irq_disable; \ - popl %edx; popl %ecx; popl %eax) \ + PV_RESTORE_REGS;) \#define ENABLE_INTERRUPTS (clobbers) \ PARA_SITE(PARA_PATCH(pv_irq_ops, PV_IRQ_irq_enable), clobbers, \ - pushl %eax; pushl %ecx; pushl %edx; \ + PV_SAVE_REGS; \ call *%cs:pv_irq_ops+PV_IRQ_irq_enable; \ - popl %edx; popl %ecx; popl %eax) + PV_RESTORE_REGS;)#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) +#ifdef CONFIG_X86_32 #define GET_CR0_INTO_EAX \ push %ecx; push %edx; \ call *pv_cpu_ops+PV_CPU_read_cr0; \ pop %edx; pop %ecx +#endif #endif /* __ASSEMBLY__ */ #endif /* CONFIG_PARAVIRT */
PATCH 6/15 adjust assembly macros to x86_64 as well.
In reply to Glauber de Oliveira CostaThis patch adjust the paravirt macros used in assembly code to accomodate for x86_64 as well.
--- include/asm-x86/paravirt.h | 18 ++++++++++++------ 1 files changed, 12 insertions(+), 6 deletions(-)
include/asm-x86/paravirt.h +12 -6
@@ -1159,8 +1159,6 @@#else /* __ASSEMBLY__ */ -#define PARA_PATCH (struct, off) ((PARAVIRT_PATCH_##struct + (off)) / 4) -#define _PVSITE (ptype, clobbers, ops, word, algn) \ 771:; \ ops; \
@@ -1175,8 +1173,14 @@#ifdef CONFIG_X86_64 +#define PV_SAVE_REGS pushq %rax; pushq %rdi; pushq %rcx; pushq %rdx +#define PV_RESTORE_REGS popq %rdx; popq %rcx; popq %rdi; popq %rax +#define PARA_PATCH (struct, off) ((PARAVIRT_PATCH_##struct + (off)) / 8)#define PARA_SITE (ptype, clobbers, ops) _PVSITE(ptype, clobbers, ops, .quad, 8)#else +#define PV_SAVE_REGS pushl %eax; pushl %edi; pushl %ecx; pushl %edx +#define PV_RESTORE_REGS popl %edx; popl %ecx; popl %edi; popl %eax +#define PARA_PATCH (struct, off) ((PARAVIRT_PATCH_##struct + (off)) / 4)#define PARA_SITE (ptype, clobbers, ops) _PVSITE(ptype, clobbers, ops, .long, 4)#endif
@@ -1186,25 +1190,27 @@#define DISABLE_INTERRUPTS (clobbers) \ PARA_SITE(PARA_PATCH(pv_irq_ops, PV_IRQ_irq_disable), clobbers, \ - pushl %eax; pushl %ecx; pushl %edx; \ + PV_SAVE_REGS; \ call *%cs:pv_irq_ops+PV_IRQ_irq_disable; \ - popl %edx; popl %ecx; popl %eax) \ + PV_RESTORE_REGS;) \#define ENABLE_INTERRUPTS (clobbers) \ PARA_SITE(PARA_PATCH(pv_irq_ops, PV_IRQ_irq_enable), clobbers, \ - pushl %eax; pushl %ecx; pushl %edx; \ + PV_SAVE_REGS; \ call *%cs:pv_irq_ops+PV_IRQ_irq_enable; \ - popl %edx; popl %ecx; popl %eax) + PV_RESTORE_REGS;)#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) +#ifdef CONFIG_X86_32 #define GET_CR0_INTO_EAX \ push %ecx; push %edx; \ call *pv_cpu_ops+PV_CPU_read_cr0; \ pop %edx; pop %ecx +#endif #endif /* __ASSEMBLY__ */ #endif /* CONFIG_PARAVIRT */
PATCH 7/15 change irq functions to accomodate x86_64
This patch changes the irq handling function definitions in paravirt.h (like raw_local_irq_disable) to accomodate for x86_64. The differences are in the calling convention.
--- include/asm-x86/paravirt.h | 43 ++++++++++++++++++++++++++++++------------- 1 files changed, 30 insertions(+), 13 deletions(-)
include/asm-x86/paravirt.h +30 -13
@@ -1085,52 +1085,68 @@extern struct paravirt_patch_site __parainstructions[], __parainstructions_end[]; +#ifdef CONFIG_X86_32 +#define PV_SAVE_REGS "pushl %%ecx; pushl %%edx;" +#define PV_RESTORE_REGS "popl %%edx; popl %%ecx" +#define PV_FLAGS_ARG "0" +#define PV_EXTRA_CLOBBERS +#define PV_VEXTRA_CLOBBERS +#else +/* We save some registers, but all of them, that's too much. We clobber all +* caller saved registers but the argument parameter */ +#define PV_SAVE_REGS "pushq %%rdi;" +#define PV_RESTORE_REGS "popq %%rdi;" +#define PV_EXTRA_CLOBBERS EXTRA_CLOBBERS, "rcx" , "rdx" +#define PV_VEXTRA_CLOBBERS EXTRA_CLOBBERS, "rdi", "rcx" , "rdx" +#define PV_FLAGS_ARG "D" +#endif +static inline unsigned long __raw_local_save_flags (void ) {unsigned long f; - asm volatile(paravirt_alt("pushl %%ecx; pushl %%edx;" + asm volatile(paravirt_alt(PV_SAVE_REGS PARAVIRT_CALL - "popl %%edx; popl %%ecx") + PV_RESTORE_REGS) : "=a"(f) : paravirt_type(pv_irq_ops.save_fl), paravirt_clobber(CLBR_EAX) - : "memory", "cc"); + : "memory", "cc" PV_VEXTRA_CLOBBERS);return f; }static inline void raw_local_irq_restore (unsigned long f) { - asm volatile(paravirt_alt("pushl %%ecx; pushl %%edx;" + asm volatile(paravirt_alt(PV_SAVE_REGS PARAVIRT_CALL - "popl %%edx; popl %%ecx") + PV_RESTORE_REGS) : "=a"(f) - : "0"(f), + : PV_FLAGS_ARG(f), paravirt_type(pv_irq_ops.restore_fl), paravirt_clobber(CLBR_EAX) - : "memory", "cc"); + : "memory", "cc" PV_EXTRA_CLOBBERS); }static inline void raw_local_irq_disable (void ) { - asm volatile(paravirt_alt("pushl %%ecx; pushl %%edx;" + asm volatile(paravirt_alt(PV_SAVE_REGS PARAVIRT_CALL - "popl %%edx; popl %%ecx") + PV_RESTORE_REGS) : : paravirt_type(pv_irq_ops.irq_disable), paravirt_clobber(CLBR_EAX) - : "memory", "eax", "cc"); + : "memory", "eax", "cc" PV_EXTRA_CLOBBERS); }static inline void raw_local_irq_enable (void ) { - asm volatile(paravirt_alt("pushl %%ecx; pushl %%edx;" + asm volatile(paravirt_alt(PV_SAVE_REGS PARAVIRT_CALL - "popl %%edx; popl %%ecx") + PV_RESTORE_REGS) : : paravirt_type(pv_irq_ops.irq_enable), paravirt_clobber(CLBR_EAX) - : "memory", "eax", "cc"); + : "memory", "eax", "cc" PV_EXTRA_CLOBBERS); }static inline unsigned long __raw_local_irq_save (void )
@@ -1205,6 +1221,7 @@ CLBR_NONE, \ jmp *%cs:pv_cpu_ops+PV_CPU_irq_enable_syscall_ret) +#ifdef CONFIG_X86_32 #define GET_CR0_INTO_EAX \ push %ecx; push %edx; \
PATCH 7/15 change irq functions to accomodate x86_64
In reply to Glauber de Oliveira CostaThis patch changes the irq handling function definitions in paravirt.h (like raw_local_irq_disable) to accomodate for x86_64. The differences are in the calling convention.
--- include/asm-x86/paravirt.h | 43 ++++++++++++++++++++++++++++++------------- 1 files changed, 30 insertions(+), 13 deletions(-)
include/asm-x86/paravirt.h +30 -13
@@ -1085,52 +1085,68 @@extern struct paravirt_patch_site __parainstructions[], __parainstructions_end[]; +#ifdef CONFIG_X86_32 +#define PV_SAVE_REGS "pushl %%ecx; pushl %%edx;" +#define PV_RESTORE_REGS "popl %%edx; popl %%ecx" +#define PV_FLAGS_ARG "0" +#define PV_EXTRA_CLOBBERS +#define PV_VEXTRA_CLOBBERS +#else +/* We save some registers, but all of them, that's too much. We clobber all +* caller saved registers but the argument parameter */ +#define PV_SAVE_REGS "pushq %%rdi;" +#define PV_RESTORE_REGS "popq %%rdi;" +#define PV_EXTRA_CLOBBERS EXTRA_CLOBBERS, "rcx" , "rdx" +#define PV_VEXTRA_CLOBBERS EXTRA_CLOBBERS, "rdi", "rcx" , "rdx" +#define PV_FLAGS_ARG "D" +#endif +static inline unsigned long __raw_local_save_flags (void ) {unsigned long f; - asm volatile(paravirt_alt("pushl %%ecx; pushl %%edx;" + asm volatile(paravirt_alt(PV_SAVE_REGS PARAVIRT_CALL - "popl %%edx; popl %%ecx") + PV_RESTORE_REGS) : "=a"(f) : paravirt_type(pv_irq_ops.save_fl), paravirt_clobber(CLBR_EAX) - : "memory", "cc"); + : "memory", "cc" PV_VEXTRA_CLOBBERS);return f; }static inline void raw_local_irq_restore (unsigned long f) { - asm volatile(paravirt_alt("pushl %%ecx; pushl %%edx;" + asm volatile(paravirt_alt(PV_SAVE_REGS PARAVIRT_CALL - "popl %%edx; popl %%ecx") + PV_RESTORE_REGS) : "=a"(f) - : "0"(f), + : PV_FLAGS_ARG(f), paravirt_type(pv_irq_ops.restore_fl), paravirt_clobber(CLBR_EAX) - : "memory", "cc"); + : "memory", "cc" PV_EXTRA_CLOBBERS); }static inline void raw_local_irq_disable (void ) { - asm volatile(paravirt_alt("pushl %%ecx; pushl %%edx;" + asm volatile(paravirt_alt(PV_SAVE_REGS PARAVIRT_CALL - "popl %%edx; popl %%ecx") + PV_RESTORE_REGS) : : paravirt_type(pv_irq_ops.irq_disable), paravirt_clobber(CLBR_EAX) - : "memory", "eax", "cc"); + : "memory", "eax", "cc" PV_EXTRA_CLOBBERS); }static inline void raw_local_irq_enable (void ) { - asm volatile(paravirt_alt("pushl %%ecx; pushl %%edx;" + asm volatile(paravirt_alt(PV_SAVE_REGS PARAVIRT_CALL - "popl %%edx; popl %%ecx") + PV_RESTORE_REGS) : : paravirt_type(pv_irq_ops.irq_enable), paravirt_clobber(CLBR_EAX) - : "memory", "eax", "cc"); + : "memory", "eax", "cc" PV_EXTRA_CLOBBERS); }static inline unsigned long __raw_local_irq_save (void )
@@ -1205,6 +1221,7 @@ CLBR_NONE, \ jmp *%cs:pv_cpu_ops+PV_CPU_irq_enable_syscall_ret) +#ifdef CONFIG_X86_32 #define GET_CR0_INTO_EAX \ push %ecx; push %edx; \
PATCH 8/15 add macro for privileged x86_64 operation
i386 has a macro GET_CR0_INTO_EAX, used in early trap handling code. x86_64 has similar needs, only it needs to put cr2 into rcx. We provide a macro for such task, in the same way
--- include/asm-x86/paravirt.h | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-)
include/asm-x86/paravirt.h +6 -0
@@ -1227,6 +1227,12 @@ push %ecx; push %edx; \ call *pv_cpu_ops+PV_CPU_read_cr0; \ pop %edx; pop %ecx +#else +#define GET_CR2_INTO_RCX \ + call *pv_mmu_ops+PV_MMU_read_cr2; \ + movq %rax, %rcx; \ + xorq %rax, %rax; +#endif #endif /* __ASSEMBLY__ */
PATCH 8/15 add macro for privileged x86_64 operation
In reply to Glauber de Oliveira Costai386 has a macro GET_CR0_INTO_EAX, used in early trap handling code. x86_64 has similar needs, only it needs to put cr2 into rcx. We provide a macro for such task, in the same way
--- include/asm-x86/paravirt.h | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-)
include/asm-x86/paravirt.h +6 -0
@@ -1227,6 +1227,12 @@ push %ecx; push %edx; \ call *pv_cpu_ops+PV_CPU_read_cr0; \ pop %edx; pop %ecx +#else +#define GET_CR2_INTO_RCX \ + call *pv_mmu_ops+PV_MMU_read_cr2; \ + movq %rax, %rcx; \ + xorq %rax, %rax; +#endif #endif /* __ASSEMBLY__ */
PATCH 9/15 adds paravirt hook for swapgs
This patch adds paravirt hook for swapgs operation, which is a privileged operation in x86_64.
--- arch/x86/kernel/paravirt.c | 1 + include/asm-x86/paravirt.h | 9 +++++++++ include/asm-x86/processor.h | 8 ++++++++ 3 files changed, 18 insertions(+), 0 deletions(-)
arch/x86/kernel/paravirt.c +1 -0
@@ -390,6 +390,7 @@ .irq_enable_syscall_ret = native_irq_enable_syscall_ret, .iret = native_iret, + .swapgs = native_swapgs, .set_iopl_mask = native_set_iopl_mask, .io_delay = native_io_delay,
include/asm-x86/paravirt.h +9 -0
@@ -127,6 +127,8 @@void (*irq_enable_syscall_ret)(void );void (*iret)(void ); +void (*swapgs)(void ); +struct pv_lazy_ops lazy_mode; };
@@ -1228,6 +1230,13 @@ call *pv_cpu_ops+PV_CPU_read_cr0; \ pop %edx; pop %ecx#else +#define SWAPGS \ + PARA_SITE(PARA_PATCH(pv_cpu_ops, PV_CPU_swapgs), CLBR_NONE, \ + PV_SAVE_REGS \ + call *pv_cpu_ops+PV_CPU_swapgs; \ + PV_RESTORE_REGS \ + ) +#define GET_CR2_INTO_RCX \ call *pv_mmu_ops+PV_MMU_read_cr2; \ movq %rax, %rcx; \
include/asm-x86/processor.h +8 -0
@@ -435,6 +435,13 @@#endif } +static inline void native_swapgs (void ) +{ +#ifdef CONFIG_X86_64 + asmvolatile ("swapgs" :::"memory" ); +#endif +} +#ifdef CONFIG_PARAVIRT #include <asm/paravirt.h> #else
@@ -456,6 +463,7 @@ }#define set_iopl_mask native_set_iopl_mask +#define SWAPGS swapgs#endif /* CONFIG_PARAVIRT */ /*
PATCH 9/15 adds paravirt hook for swapgs
In reply to Glauber de Oliveira CostaThis patch adds paravirt hook for swapgs operation, which is a privileged operation in x86_64.
--- arch/x86/kernel/paravirt.c | 1 + include/asm-x86/paravirt.h | 9 +++++++++ include/asm-x86/processor.h | 8 ++++++++ 3 files changed, 18 insertions(+), 0 deletions(-)
arch/x86/kernel/paravirt.c +1 -0
@@ -390,6 +390,7 @@ .irq_enable_syscall_ret = native_irq_enable_syscall_ret, .iret = native_iret, + .swapgs = native_swapgs, .set_iopl_mask = native_set_iopl_mask, .io_delay = native_io_delay,
include/asm-x86/paravirt.h +9 -0
@@ -127,6 +127,8 @@void (*irq_enable_syscall_ret)(void );void (*iret)(void ); +void (*swapgs)(void ); +struct pv_lazy_ops lazy_mode; };
@@ -1228,6 +1230,13 @@ call *pv_cpu_ops+PV_CPU_read_cr0; \ pop %edx; pop %ecx#else +#define SWAPGS \ + PARA_SITE(PARA_PATCH(pv_cpu_ops, PV_CPU_swapgs), CLBR_NONE, \ + PV_SAVE_REGS \ + call *pv_cpu_ops+PV_CPU_swapgs; \ + PV_RESTORE_REGS \ + ) +#define GET_CR2_INTO_RCX \ call *pv_mmu_ops+PV_MMU_read_cr2; \ movq %rax, %rcx; \
include/asm-x86/processor.h +8 -0
@@ -435,6 +435,13 @@#endif } +static inline void native_swapgs (void ) +{ +#ifdef CONFIG_X86_64 + asmvolatile ("swapgs" :::"memory" ); +#endif +} +#ifdef CONFIG_PARAVIRT #include <asm/paravirt.h> #else
@@ -456,6 +463,7 @@ }#define set_iopl_mask native_set_iopl_mask +#define SWAPGS swapgs#endif /* CONFIG_PARAVIRT */ /*
PATCH 10/15 replace privileged instructions with paravirt macros
The assembly code in entry_64.S issues a bunch of privileged instructions, like cli, sti, swapgs, and others. Paravirt guests are forbidden to do so, and we then replace them with macros that will do the right thing.
--- arch/x86/kernel/entry_64.S | 101 +++++++++++++++++++++++++------------------ 1 files changed, 59 insertions(+), 42 deletions(-)
arch/x86/kernel/entry_64.S +59 -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,13 @@ #define retint_kernel retint_restore_args #endif +#ifdef CONFIG_PARAVIRT +ENTRY(native_irq_enable_syscall_ret) + movq %gs:pda_oldrsp,%rsp + swapgs + sysretq +#endif /* CONFIG_PARAVIRT */ + .macro TRACE_IRQS_IRETQ offset=ARGOFFSET #ifdef CONFIG_TRACE_IRQFLAGS
@@ -216,14 +224,21 @@ 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 +261,7 @@ 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 +275,7 @@ 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 +284,7 @@ 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 +295,7 @@ /* 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 +308,7 @@ 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 +340,7 @@ */ .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 +362,20 @@ 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 +398,7 @@ 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 +519,7 @@ 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 +540,7 @@ 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 +569,13 @@ /* * 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 +583,14 @@ 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 +598,24 @@ 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 +623,14 @@ 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 +748,7 @@ rdmsr testl %edx,%edx js 1f - swapgs + SWAPGS xorl %ebx,%ebx 1: .if \ist
@@ -747,7 +764,7 @@ .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 +793,10 @@ .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 +811,11 @@ .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 +824,9 @@ .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 +879,7 @@ testl $3,CS(%rsp) je error_kernelspace error_swapgs: - swapgs + SWAPGS error_sti: movq %rdi,RDI(%rsp) CFI_REL_OFFSET rdi,RDI
@@ -874,7 +891,7 @@ error_exit: movl %ebx,%eax RESTORE_REST - cli + DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF GET_THREAD_INFO(%rcx) testl %eax,%eax
@@ -911,12 +928,12 @@ 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 +947,7 @@ .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
PATCH 10/15 replace privileged instructions with paravirt macros
In reply to Glauber de Oliveira CostaThe assembly code in entry_64.S issues a bunch of privileged instructions, like cli, sti, swapgs, and others. Paravirt guests are forbidden to do so, and we then replace them with macros that will do the right thing.
--- arch/x86/kernel/entry_64.S | 101 +++++++++++++++++++++++++------------------ 1 files changed, 59 insertions(+), 42 deletions(-)
arch/x86/kernel/entry_64.S +59 -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,13 @@ #define retint_kernel retint_restore_args #endif +#ifdef CONFIG_PARAVIRT +ENTRY(native_irq_enable_syscall_ret) + movq %gs:pda_oldrsp,%rsp + swapgs + sysretq +#endif /* CONFIG_PARAVIRT */ + .macro TRACE_IRQS_IRETQ offset=ARGOFFSET #ifdef CONFIG_TRACE_IRQFLAGS
@@ -216,14 +224,21 @@ 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 +261,7 @@ 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 +275,7 @@ 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 +284,7 @@ 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 +295,7 @@ /* 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 +308,7 @@ 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 +340,7 @@ */ .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 +362,20 @@ 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 +398,7 @@ 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 +519,7 @@ 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 +540,7 @@ 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 +569,13 @@ /* * 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 +583,14 @@ 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 +598,24 @@ 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 +623,14 @@ 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 +748,7 @@ rdmsr testl %edx,%edx js 1f - swapgs + SWAPGS xorl %ebx,%ebx 1: .if \ist
@@ -747,7 +764,7 @@ .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 +793,10 @@ .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 +811,11 @@ .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 +824,9 @@ .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 +879,7 @@ testl $3,CS(%rsp) je error_kernelspace error_swapgs: - swapgs + SWAPGS error_sti: movq %rdi,RDI(%rsp) CFI_REL_OFFSET rdi,RDI
@@ -874,7 +891,7 @@ error_exit: movl %ebx,%eax RESTORE_REST - cli + DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF GET_THREAD_INFO(%rcx) testl %eax,%eax
@@ -911,12 +928,12 @@ 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 +947,7 @@ .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
PATCH 11/15 cleanup CLI_STRING, STI_STRING and friends
Since the advent of ticket locking, CLI_STRING, STI_STRING, and friends are not used anymore. They can now be safely deleted.
--- include/asm-x86/spinlock.h | 9 --------- 1 files changed, 0 insertions(+), 9 deletions(-)
include/asm-x86/spinlock.h +0 -9
@@ -19,15 +19,6 @@* (the type definitions are in asm/spinlock_types.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 typedef char _slock_t ;# define LOCK_INS_DEC "decb"
PATCH 11/15 cleanup CLI_STRING, STI_STRING and friends
In reply to Glauber de Oliveira CostaSince the advent of ticket locking, CLI_STRING, STI_STRING, and friends are not used anymore. They can now be safely deleted.
--- include/asm-x86/spinlock.h | 9 --------- 1 files changed, 0 insertions(+), 9 deletions(-)
include/asm-x86/spinlock.h +0 -9
@@ -19,15 +19,6 @@* (the type definitions are in asm/spinlock_types.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 typedef char _slock_t ;# define LOCK_INS_DEC "decb"
PATCH 12/15 add CLBR_ defines for x86_64.
x86_64 needs a potentially larger clobber list than i386, due to its calling convention. So we add more CLBR_ defines for it.
Note that CLBR_ANY is different for each of the architectures, since it comprises the notion of "All call clobbers in this architecture"
--- include/asm-x86/paravirt.h | 23 ++++++++++++++++++----- 1 files changed, 18 insertions(+), 5 deletions(-)
include/asm-x86/paravirt.h +18 -5
@@ -8,11 +8,24 @@#include <asm/asm.h> /* Bitmask of what can be clobbered: usually at least eax. */ -#define CLBR_NONE 0x0 -#define CLBR_EAX 0x1 -#define CLBR_ECX 0x2 -#define CLBR_EDX 0x4 -#define CLBR_ANY 0x7 +#define CLBR_NONE 0 +#define CLBR_EAX (1 << 0) +#define CLBR_ECX (1 << 1) +#define CLBR_EDX (1 << 2) + +#ifdef CONFIG_X86_64 +#define CLBR_RSI (1 << 3) +#define CLBR_RDI (1 << 4) +#define CLBR_R8 (1 << 5) +#define CLBR_R9 (1 << 6) +#define CLBR_R10 (1 << 7) +#define CLBR_R11 (1 << 8) +#define CLBR_ANY ((1 << 9) - 1) +#include <asm/desc_defs.h> +#else +/* CLBR_ANY should match all regs platform has. For i386, that's just it */ +#define CLBR_ANY ((1 << 3) - 1) +#endif /* X86_64 */ #ifndef __ASSEMBLY__#include <linux/types.h>
PATCH 12/15 add CLBR_ defines for x86_64.
In reply to Glauber de Oliveira Costax86_64 needs a potentially larger clobber list than i386, due to its calling convention. So we add more CLBR_ defines for it.
Note that CLBR_ANY is different for each of the architectures, since it comprises the notion of "All call clobbers in this architecture"
--- include/asm-x86/paravirt.h | 23 ++++++++++++++++++----- 1 files changed, 18 insertions(+), 5 deletions(-)
include/asm-x86/paravirt.h +18 -5
@@ -8,11 +8,24 @@#include <asm/asm.h> /* Bitmask of what can be clobbered: usually at least eax. */ -#define CLBR_NONE 0x0 -#define CLBR_EAX 0x1 -#define CLBR_ECX 0x2 -#define CLBR_EDX 0x4 -#define CLBR_ANY 0x7 +#define CLBR_NONE 0 +#define CLBR_EAX (1 << 0) +#define CLBR_ECX (1 << 1) +#define CLBR_EDX (1 << 2) + +#ifdef CONFIG_X86_64 +#define CLBR_RSI (1 << 3) +#define CLBR_RDI (1 << 4) +#define CLBR_R8 (1 << 5) +#define CLBR_R9 (1 << 6) +#define CLBR_R10 (1 << 7) +#define CLBR_R11 (1 << 8) +#define CLBR_ANY ((1 << 9) - 1) +#include <asm/desc_defs.h> +#else +/* CLBR_ANY should match all regs platform has. For i386, that's just it */ +#define CLBR_ANY ((1 << 3) - 1) +#endif /* X86_64 */ #ifndef __ASSEMBLY__#include <linux/types.h>
PATCH 13/15 move patching code to arch-specific file.
The core patching code for paravirt is sufficiently different among i386 and x86_64, and we move them to specific files.
--- arch/x86/kernel/Makefile_32 | 2 +- arch/x86/kernel/paravirt.c | 50 ------------------------------------------- include/asm-x86/paravirt.h | 8 +++++++ 3 files changed, 9 insertions(+), 51 deletions(-)
arch/x86/kernel/Makefile_32 +1 -1
@@ -48,7 +48,7 @@ obj-$(CONFIG_MGEODE_LX) += geode_32.o mfgpt_32.o obj-$(CONFIG_VMI) += vmi_32.o vmiclock_32.o -obj-$(CONFIG_PARAVIRT) += paravirt.o +obj-$(CONFIG_PARAVIRT) += paravirt.o paravirt_patch_32.o obj-y += pcspeaker.o obj-$(CONFIG_SCx200) += scx200_32.o
arch/x86/kernel/paravirt.c +0 -50
59 lines not on this page · raw message
include/asm-x86/paravirt.h +8 -0
@@ -308,6 +308,11 @@#define paravirt_alt (insn_string) \ _paravirt_alt(insn_string, "%c[paravirt_typenum]", "%c[paravirt_clobber]") +/* Simple instruction patching code. */ +#define DEF_NATIVE (ops, name, code) \ + extern const char start_##ops##_##name[], end_##ops##_##name[]; \ + asm("start_" #ops "_" #name ": " code "; end_" #ops "_" #name ":") +unsigned paravirt_patch_nop (void );unsigned paravirt_patch_ignore (unsigned len); unsigned paravirt_patch_call(void *insnbuf,
@@ -322,6 +327,9 @@unsigned paravirt_patch_insns (void *insnbuf,unsigned len,const char *start,const char *end); +unsigned native_patch (u8 type,u16 clobbers,void *ibuf, +unsigned long addr,unsigned len); +int paravirt_disable_iospace (void );/*
PATCH 13/15 move patching code to arch-specific file.
In reply to Glauber de Oliveira CostaThe core patching code for paravirt is sufficiently different among i386 and x86_64, and we move them to specific files.
--- arch/x86/kernel/Makefile_32 | 2 +- arch/x86/kernel/paravirt.c | 50 ------------------------------------------- include/asm-x86/paravirt.h | 8 +++++++ 3 files changed, 9 insertions(+), 51 deletions(-)
arch/x86/kernel/Makefile_32 +1 -1
@@ -48,7 +48,7 @@ obj-$(CONFIG_MGEODE_LX) += geode_32.o mfgpt_32.o obj-$(CONFIG_VMI) += vmi_32.o vmiclock_32.o -obj-$(CONFIG_PARAVIRT) += paravirt.o +obj-$(CONFIG_PARAVIRT) += paravirt.o paravirt_patch_32.o obj-y += pcspeaker.o obj-$(CONFIG_SCx200) += scx200_32.o
arch/x86/kernel/paravirt.c +0 -50
59 lines not on this page · raw message
include/asm-x86/paravirt.h +8 -0
@@ -308,6 +308,11 @@#define paravirt_alt (insn_string) \ _paravirt_alt(insn_string, "%c[paravirt_typenum]", "%c[paravirt_clobber]") +/* Simple instruction patching code. */ +#define DEF_NATIVE (ops, name, code) \ + extern const char start_##ops##_##name[], end_##ops##_##name[]; \ + asm("start_" #ops "_" #name ": " code "; end_" #ops "_" #name ":") +unsigned paravirt_patch_nop (void );unsigned paravirt_patch_ignore (unsigned len); unsigned paravirt_patch_call(void *insnbuf,
@@ -322,6 +327,9 @@unsigned paravirt_patch_insns (void *insnbuf,unsigned len,const char *start,const char *end); +unsigned native_patch (u8 type,u16 clobbers,void *ibuf, +unsigned long addr,unsigned len); +int paravirt_disable_iospace (void );/*
PATCH 14/15 x86_64 patching functions
Like i386, x86_64 also need to include its own patching function. (Well, if you're not in a hurry, and don't care about speed, you don't really _need_ ;-))
So here they are. Not much different in essence from i386
--- arch/x86/kernel/Makefile_64 | 1 + arch/x86/kernel/paravirt_patch_64.c | 56 +++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 0 deletions(-) create mode 100644 arch/x86/kernel/paravirt_patch_64.c
arch/x86/kernel/Makefile_64 +1 -0
@@ -41,6 +41,7 @@ obj-$(CONFIG_K8_NB) += k8.o obj-$(CONFIG_AUDIT) += audit_64.o obj-$(CONFIG_EFI) += efi.o efi_64.o efi_stub_64.o +obj-$(CONFIG_PARAVIRT) += paravirt.o paravirt_patch_64.o obj-$(CONFIG_MODULES) += module_64.o obj-$(CONFIG_PCI) += early-quirks.o
arch/x86/kernel/paravirt_patch_64.c new file +56 -0
56 lines not on this page · raw message
PATCH 14/15 x86_64 patching functions
In reply to Glauber de Oliveira CostaLike i386, x86_64 also need to include its own patching function. (Well, if you're not in a hurry, and don't care about speed, you don't really _need_ ;-))
So here they are. Not much different in essence from i386
--- arch/x86/kernel/Makefile_64 | 1 + arch/x86/kernel/paravirt_patch_64.c | 56 +++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 0 deletions(-) create mode 100644 arch/x86/kernel/paravirt_patch_64.c
arch/x86/kernel/Makefile_64 +1 -0
@@ -41,6 +41,7 @@ obj-$(CONFIG_K8_NB) += k8.o obj-$(CONFIG_AUDIT) += audit_64.o obj-$(CONFIG_EFI) += efi.o efi_64.o efi_stub_64.o +obj-$(CONFIG_PARAVIRT) += paravirt.o paravirt_patch_64.o obj-$(CONFIG_MODULES) += module_64.o obj-$(CONFIG_PCI) += early-quirks.o
arch/x86/kernel/paravirt_patch_64.c new file +56 -0
56 lines not on this page · raw message
PATCH 15/15 replace x86_read/write_per_cpu with a common function.
x86_read_per_cpu() and its writeish sister are not present in x86_64. So in this patch, we replace them with __get_cpu_var(), which is present in both
--- arch/x86/kernel/paravirt.c | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-)
arch/x86/kernel/paravirt.c +5 -5
@@ -238,18 +238,18 @@static inline void enter_lazy (enum paravirt_lazy_mode mode) { -BUG_ON (x86_read_percpu (paravirt_lazy_mode) !=PARAVIRT_LAZY_NONE ); +BUG_ON (__get_cpu_var (paravirt_lazy_mode) !=PARAVIRT_LAZY_NONE );BUG_ON (preemptible ()); -x86_write_percpu (paravirt_lazy_mode, mode); +__get_cpu_var (paravirt_lazy_mode) = mode; }void paravirt_leave_lazy (enum paravirt_lazy_mode mode) { -BUG_ON (x86_read_percpu (paravirt_lazy_mode) != mode); +BUG_ON (__get_cpu_var (paravirt_lazy_mode) != mode);BUG_ON (preemptible ()); -x86_write_percpu (paravirt_lazy_mode,PARAVIRT_LAZY_NONE ); +__get_cpu_var (paravirt_lazy_mode) =PARAVIRT_LAZY_NONE ; }void paravirt_enter_lazy_mmu (void )
@@ -274,7 +274,7 @@enum paravirt_lazy_mode paravirt_get_lazy_mode (void ) { -return x86_read_percpu (paravirt_lazy_mode); +return __get_cpu_var (paravirt_lazy_mode); }struct pv_info pv_info = {
PATCH 15/15 replace x86_read/write_per_cpu with a common function.
In reply to Glauber de Oliveira Costax86_read_per_cpu() and its writeish sister are not present in x86_64. So in this patch, we replace them with __get_cpu_var(), which is present in both
--- arch/x86/kernel/paravirt.c | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-)
arch/x86/kernel/paravirt.c +5 -5
@@ -238,18 +238,18 @@static inline void enter_lazy (enum paravirt_lazy_mode mode) { -BUG_ON (x86_read_percpu (paravirt_lazy_mode) !=PARAVIRT_LAZY_NONE ); +BUG_ON (__get_cpu_var (paravirt_lazy_mode) !=PARAVIRT_LAZY_NONE );BUG_ON (preemptible ()); -x86_write_percpu (paravirt_lazy_mode, mode); +__get_cpu_var (paravirt_lazy_mode) = mode; }void paravirt_leave_lazy (enum paravirt_lazy_mode mode) { -BUG_ON (x86_read_percpu (paravirt_lazy_mode) != mode); +BUG_ON (__get_cpu_var (paravirt_lazy_mode) != mode);BUG_ON (preemptible ()); -x86_write_percpu (paravirt_lazy_mode,PARAVIRT_LAZY_NONE ); +__get_cpu_var (paravirt_lazy_mode) =PARAVIRT_LAZY_NONE ; }void paravirt_enter_lazy_mmu (void )
@@ -274,7 +274,7 @@enum paravirt_lazy_mode paravirt_get_lazy_mode (void ) { -return x86_read_percpu (paravirt_lazy_mode); +return __get_cpu_var (paravirt_lazy_mode); }struct pv_info pv_info = {
H. Peter Anvin
reviewerRe: [PATCH 15/15] replace x86_read/write_per_cpu with a common function.
Quoted 2 lines · Glauber de Oliveira Costa
x86_read_per_cpu()and its writeish sister are not present inx86_64. So in this patch, we replace them with__get_cpu_var(), which is present in both
Eventually we'd like to use something closer to the i386 code for x86_64, obviously...
-hpa
H. Peter Anvin
reviewerRe: [PATCH 15/15] replace x86_read/write_per_cpu with a common function.
In reply to Glauber de Oliveira CostaQuoted 2 lines · Glauber de Oliveira Costa
x86_read_per_cpu()and its writeish sister are not present inx86_64. So in this patch, we replace them with__get_cpu_var(), which is present in both
Eventually we'd like to use something closer to the i386 code for x86_64, obviously...
-hpa
Re: [PATCH 13/15] move patching code to arch-specific file.
In reply to Glauber de Oliveira CostaQuoted 2 lines · Glauber de Oliveira Costa
The core patching code for paravirt is sufficiently different among i386 and
x86_64, and we move them to specific files.
this patch adds the paravirt_patch_32.o:
arch/x86/kernel/Makefile_32 line 51
Quoted 2 lines
arch/x86/kernel/Makefile_32 +1
-1-obj-$(CONFIG_PARAVIRT) += paravirt.o +obj-$(CONFIG_PARAVIRT) += paravirt.o paravirt_patch_32.o
but does not add that file nor any other rule to build that target, so it fails to build with the attached config:
make[1]: *** No rule to make target
`arch/x86/kernel/paravirt_patch_32.o', needed by
`arch/x86/kernel/built-in.o'. Stop.
Ingo
#
# Automatically generated make config: don't edit # Linux kernel version: 2.6.24-rc5
# Thu Dec 20 21:13:16 2007
#
# CONFIG_64BIT is not setCONFIG_X86_32=y
# CONFIG_X86_64 is not setCONFIG_X86=y
# CONFIG_GENERIC_LOCKBREAK is not set CONFIG_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_MMU=yCONFIG_ZONE_DMA=yCONFIG_QUICKLIST=yCONFIG_GENERIC_ISA_DMA=yCONFIG_GENERIC_IOMAP=y
# CONFIG_GENERIC_GPIO is not set CONFIG_GENERIC_HWEIGHT=y CONFIG_ARCH_MAY_HAVE_PC_FDC=yCONFIG_DMI=y
# CONFIG_RWSEM_GENERIC_SPINLOCK is not set CONFIG_RWSEM_XCHGADD_ALGORITHM=y
# CONFIG_ARCH_HAS_ILOG2_U32 is not set
# CONFIG_ARCH_HAS_ILOG2_U64 is not set CONFIG_GENERIC_CALIBRATE_DELAY=y
# CONFIG_GENERIC_TIME_VSYSCALL is not set CONFIG_ARCH_SUPPORTS_OPROFILE=y
# CONFIG_ZONE_DMA32 is not set CONFIG_ARCH_POPULATES_NODE_MAP=y
# CONFIG_AUDIT_ARCH is not set CONFIG_GENERIC_HARDIRQS=y CONFIG_GENERIC_IRQ_PROBE=y CONFIG_X86_BIOS_REBOOT=yCONFIG_KTIME_SCALAR=y CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
# General setup
#CONFIG_EXPERIMENTAL=yCONFIG_BROKEN_ON_SMP=yCONFIG_LOCK_KERNEL=yCONFIG_INIT_ENV_ARG_LIMIT=32CONFIG_LOCALVERSION=""
# CONFIG_LOCALVERSION_AUTO is not setCONFIG_SWAP=y
# CONFIG_SYSVIPC is not set
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not setCONFIG_TASKSTATS=yCONFIG_TASK_DELAY_ACCT=yCONFIG_TASK_XACCT=y
# CONFIG_TASK_IO_ACCOUNTING is not set
# CONFIG_USER_NS is not set
# CONFIG_PID_NS is not set
# CONFIG_AUDIT is not setCONFIG_IKCONFIG=yCONFIG_IKCONFIG_PROC=yCONFIG_LOG_BUF_SHIFT=20
# CONFIG_CGROUPS is not set
# CONFIG_FAIR_GROUP_SCHED is not setCONFIG_SYSFS_DEPRECATED=yCONFIG_RELAY=y
# CONFIG_BLK_DEV_INITRD is not set
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not setCONFIG_EMBEDDED=y
# CONFIG_UID16 is not set
# CONFIG_SYSCTL_SYSCALL is not set
# CONFIG_KALLSYMS is not setCONFIG_HOTPLUG=yCONFIG_PRINTK=y
# CONFIG_BUG is not setCONFIG_ELF_CORE=y
# CONFIG_BASE_FULL is not setCONFIG_FUTEX=yCONFIG_ANON_INODES=y
# CONFIG_EPOLL is not set
# CONFIG_SIGNALFD is not set
# CONFIG_EVENTFD is not set
# CONFIG_SHMEM is not set
# CONFIG_VM_EVENT_COUNTERS is not setCONFIG_SLAB=y
# CONFIG_SLUB is not set
# CONFIG_SLOB is not setCONFIG_RT_MUTEXES=yCONFIG_TINY_SHMEM=yCONFIG_BASE_SMALL=1CONFIG_MODULES=y
# CONFIG_MODULE_UNLOAD is not setCONFIG_MODVERSIONS=yCONFIG_MODULE_SRCVERSION_ALL=y
# CONFIG_KMOD is not setCONFIG_BLOCK=yCONFIG_LBD=yCONFIG_BLK_DEV_IO_TRACE=yCONFIG_LSF=y
# CONFIG_BLK_DEV_BSG is not set
#
# IO Schedulers
#CONFIG_IOSCHED_NOOP=yCONFIG_IOSCHED_AS=m
# CONFIG_IOSCHED_DEADLINE is not set
# CONFIG_IOSCHED_CFQ is not set
# CONFIG_DEFAULT_AS is not set
# CONFIG_DEFAULT_DEADLINE is not set
# CONFIG_DEFAULT_CFQ is not setCONFIG_DEFAULT_NOOP=yCONFIG_DEFAULT_IOSCHED="noop"CONFIG_PREEMPT_NOTIFIERS=y
#
# Processor type and features
#CONFIG_TICK_ONESHOT=y
# CONFIG_NO_HZ is not set CONFIG_HIGH_RES_TIMERS=y CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
# CONFIG_SMP is not setCONFIG_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 set
# CONFIG_X86_RDC321X is not set
# CONFIG_X86_VSMP is not set
# CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER is not set CONFIG_PARAVIRT=yCONFIG_PARAVIRT_GUEST=y
# CONFIG_XEN is not set
# CONFIG_VMI is not set CONFIG_LGUEST_GUEST=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 set
# CONFIG_MPENTIUMM 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=y
# CONFIG_MPSC is not set
# CONFIG_MCORE2 is not set
# CONFIG_GENERIC_CPU is not set
# CONFIG_X86_GENERIC is not set CONFIG_X86_CMPXCHG=y CONFIG_X86_L1_CACHE_SHIFT=6 CONFIG_X86_XADD=yCONFIG_X86_WP_WORKS_OK=y CONFIG_X86_INVLPG=yCONFIG_X86_BSWAP=yCONFIG_X86_POPAD_OK=y CONFIG_X86_GOOD_APIC=yCONFIG_X86_TSC=yCONFIG_X86_CMOV=y CONFIG_X86_MINIMUM_CPU_FAMILY=4 CONFIG_X86_DEBUGCTLMSR=y
# CONFIG_HPET_TIMER is not set
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not set CONFIG_PREEMPT=yCONFIG_PREEMPT_BKL=yCONFIG_X86_UP_APIC=y CONFIG_X86_UP_IOAPIC=y CONFIG_X86_LOCAL_APIC=y CONFIG_X86_IO_APIC=y
# CONFIG_X86_MCE is not set
# CONFIG_VM86 is not setCONFIG_TOSHIBA=m
# CONFIG_I8K is not set
# CONFIG_X86_REBOOTFIXUPS is not set
# CONFIG_MICROCODE is not set CONFIG_X86_MSR=mCONFIG_X86_CPUID=m
# CONFIG_NOHIGHMEM is not set CONFIG_HIGHMEM4G=y
# CONFIG_HIGHMEM64G is not set CONFIG_VMSPLIT_3G=y
# CONFIG_VMSPLIT_3G_OPT is not set
# CONFIG_VMSPLIT_2G is not set
# CONFIG_VMSPLIT_2G_OPT is not set
# CONFIG_VMSPLIT_1G is not set CONFIG_PAGE_OFFSET=0xC0000000 CONFIG_HIGHMEM=y CONFIG_NEED_NODE_MEMMAP_SIZE=y CONFIG_ARCH_FLATMEM_ENABLE=y CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_ARCH_SELECT_MEMORY_MODEL=y
# CONFIG_ARCH_MEMORY_PROBE is not set CONFIG_SELECT_MEMORY_MODEL=y
# CONFIG_FLATMEM_MANUAL is not set
# CONFIG_DISCONTIGMEM_MANUAL is not set CONFIG_SPARSEMEM_MANUAL=y CONFIG_SPARSEMEM=y CONFIG_HAVE_MEMORY_PRESENT=y CONFIG_SPARSEMEM_STATIC=y
# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set CONFIG_MEMORY_HOTPLUG=y CONFIG_MEMORY_HOTPLUG_SPARSE=y CONFIG_SPLIT_PTLOCK_CPUS=4
# CONFIG_RESOURCES_64BIT is not set CONFIG_ZONE_DMA_FLAG=1CONFIG_BOUNCE=yCONFIG_NR_QUICK=1CONFIG_VIRT_TO_BUS=y
# CONFIG_HIGHPTE is not set CONFIG_MATH_EMULATION=y
# CONFIG_MTRR is not set
# CONFIG_SECCOMP is not set CONFIG_HZ_100=y
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not setCONFIG_HZ=100CONFIG_KEXEC=yCONFIG_CRASH_DUMP=y CONFIG_PHYSICAL_START=0x100000 CONFIG_RELOCATABLE=y CONFIG_PHYSICAL_ALIGN=0x100000 CONFIG_COMPAT_VDSO=y CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
#
# Power management options
#
# CONFIG_PM is not setCONFIG_SUSPEND_UP_POSSIBLE=yCONFIG_HIBERNATION_UP_POSSIBLE=y
#
# CPU Frequency scaling
#
# CONFIG_CPU_FREQ is not set
# CONFIG_CPU_IDLE is not set
#
# Bus options (PCI etc.)
#CONFIG_PCI=y
# CONFIG_PCI_GOBIOS is not set
# CONFIG_PCI_GOMMCONFIG is not setCONFIG_PCI_GODIRECT=y
# CONFIG_PCI_GOANY is not setCONFIG_PCI_DIRECT=yCONFIG_PCI_DOMAINS=y
# CONFIG_PCIEPORTBUS is not setCONFIG_ARCH_SUPPORTS_MSI=y
# CONFIG_PCI_MSI is not setCONFIG_PCI_LEGACY=yCONFIG_HT_IRQ=yCONFIG_ISA_DMA_API=yCONFIG_ISA=y
# CONFIG_EISA is not set
# CONFIG_MCA is not set
CONFIG_SCx200=m
# CONFIG_SCx200HR_TIMER is not setCONFIG_K8_NB=yCONFIG_PCCARD=y
# CONFIG_PCMCIA_DEBUG is not set
# CONFIG_PCMCIA is not set
# CONFIG_CARDBUS is not set
#
# PC-card bridges
#
# CONFIG_YENTA is not setCONFIG_PCMCIA_PROBE=y
# CONFIG_HOTPLUG_PCI is not set
#
# Executable file formats / Emulations
#CONFIG_BINFMT_ELF=yCONFIG_BINFMT_AOUT=m
# CONFIG_BINFMT_MISC is not set
#
# Networking
#CONFIG_NET=y
#
# Networking options
#CONFIG_PACKET=yCONFIG_PACKET_MMAP=yCONFIG_UNIX=yCONFIG_XFRM=yCONFIG_XFRM_USER=m
# CONFIG_XFRM_SUB_POLICY is not setCONFIG_XFRM_MIGRATE=yCONFIG_NET_KEY=mCONFIG_NET_KEY_MIGRATE=yCONFIG_INET=yCONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not setCONFIG_IP_FIB_HASH=y
# CONFIG_IP_PNP is not setCONFIG_NET_IPIP=yCONFIG_NET_IPGRE=y
# CONFIG_NET_IPGRE_BROADCAST is not setCONFIG_IP_MROUTE=y
# CONFIG_IP_PIMSM_V1 is not set
# CONFIG_IP_PIMSM_V2 is not setCONFIG_ARPD=yCONFIG_SYN_COOKIES=y
# CONFIG_INET_AH is not setCONFIG_INET_ESP=mCONFIG_INET_IPCOMP=yCONFIG_INET_XFRM_TUNNEL=yCONFIG_INET_TUNNEL=yCONFIG_INET_XFRM_MODE_TRANSPORT=mCONFIG_INET_XFRM_MODE_TUNNEL=mCONFIG_INET_XFRM_MODE_BEET=yCONFIG_INET_LRO=m
# CONFIG_INET_DIAG is not setCONFIG_TCP_CONG_ADVANCED=yCONFIG_TCP_CONG_BIC=yCONFIG_TCP_CONG_CUBIC=y
# CONFIG_TCP_CONG_WESTWOOD is not set
# CONFIG_TCP_CONG_HTCP is not setCONFIG_TCP_CONG_HSTCP=mCONFIG_TCP_CONG_HYBLA=yCONFIG_TCP_CONG_VEGAS=mCONFIG_TCP_CONG_SCALABLE=m
# CONFIG_TCP_CONG_LP is not setCONFIG_TCP_CONG_VENO=mCONFIG_TCP_CONG_YEAH=m
# CONFIG_TCP_CONG_ILLINOIS is not set
# CONFIG_DEFAULT_BIC is not setCONFIG_DEFAULT_CUBIC=y
# CONFIG_DEFAULT_HTCP is not set
# CONFIG_DEFAULT_VEGAS is not set
# CONFIG_DEFAULT_WESTWOOD is not set
# CONFIG_DEFAULT_RENO is not setCONFIG_DEFAULT_TCP_CONG="cubic"CONFIG_TCP_MD5SIG=yCONFIG_IP_VS=y
# 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=y
# CONFIG_IP_VS_WRR is not setCONFIG_IP_VS_LC=yCONFIG_IP_VS_WLC=yCONFIG_IP_VS_LBLC=yCONFIG_IP_VS_LBLCR=y
# CONFIG_IP_VS_DH is not setCONFIG_IP_VS_SH=mCONFIG_IP_VS_SED=mCONFIG_IP_VS_NQ=y
#
# IPVS application helper
#
# CONFIG_IP_VS_FTP is not set
# CONFIG_IPV6 is not set
# CONFIG_INET6_XFRM_TUNNEL is not set
# CONFIG_INET6_TUNNEL is not set
# CONFIG_NETLABEL is not setCONFIG_NETWORK_SECMARK=yCONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
#
# Core Netfilter Configuration
#
# CONFIG_NETFILTER_NETLINK is not set CONFIG_NF_CONNTRACK_ENABLED=m CONFIG_NF_CONNTRACK=mCONFIG_NF_CT_ACCT=y
# CONFIG_NF_CONNTRACK_MARK is not set CONFIG_NF_CONNTRACK_SECMARK=y CONFIG_NF_CONNTRACK_EVENTS=y CONFIG_NF_CT_PROTO_SCTP=m CONFIG_NF_CT_PROTO_UDPLITE=m
# CONFIG_NF_CONNTRACK_AMANDA is not set
# CONFIG_NF_CONNTRACK_FTP is not set
# CONFIG_NF_CONNTRACK_H323 is not set CONFIG_NF_CONNTRACK_IRC=m
# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set # CONFIG_NF_CONNTRACK_PPTP is not set CONFIG_NF_CONNTRACK_SANE=m
# CONFIG_NF_CONNTRACK_SIP is not set CONFIG_NF_CONNTRACK_TFTP=m CONFIG_NETFILTER_XTABLES=y
# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set CONFIG_NETFILTER_XT_TARGET_MARK=m CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set CONFIG_NETFILTER_XT_TARGET_SECMARK=m
# CONFIG_NETFILTER_XT_TARGET_CONNSECMARK is not set CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set # CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m CONFIG_NETFILTER_XT_MATCH_DCCP=m CONFIG_NETFILTER_XT_MATCH_DSCP=y CONFIG_NETFILTER_XT_MATCH_ESP=y
# CONFIG_NETFILTER_XT_MATCH_HELPER is not set CONFIG_NETFILTER_XT_MATCH_LENGTH=y CONFIG_NETFILTER_XT_MATCH_LIMIT=y CONFIG_NETFILTER_XT_MATCH_MAC=y
# CONFIG_NETFILTER_XT_MATCH_MARK is not set CONFIG_NETFILTER_XT_MATCH_POLICY=y CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set CONFIG_NETFILTER_XT_MATCH_QUOTA=y
# CONFIG_NETFILTER_XT_MATCH_REALM is not set # CONFIG_NETFILTER_XT_MATCH_SCTP is not set CONFIG_NETFILTER_XT_MATCH_STATE=m CONFIG_NETFILTER_XT_MATCH_STATISTIC=m CONFIG_NETFILTER_XT_MATCH_STRING=m CONFIG_NETFILTER_XT_MATCH_TCPMSS=y CONFIG_NETFILTER_XT_MATCH_TIME=m
# 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=yCONFIG_IP_NF_QUEUE=y
# CONFIG_IP_NF_IPTABLES is not setCONFIG_IP_NF_ARPTABLES=y
# CONFIG_IP_NF_ARPFILTER is not setCONFIG_IP_NF_ARP_MANGLE=y
#
# DECnet: Netfilter Configuration
#CONFIG_DECNET_NF_GRABULATOR=mCONFIG_IP_DCCP=yCONFIG_IP_DCCP_ACKVEC=y
#
# DCCP CCIDs Configuration (EXPERIMENTAL)
#CONFIG_IP_DCCP_CCID2=y
# CONFIG_IP_DCCP_CCID2_DEBUG is not set
# CONFIG_IP_DCCP_CCID3 is not setCONFIG_IP_SCTP=yCONFIG_SCTP_DBG_MSG=yCONFIG_SCTP_DBG_OBJCNT=y
# CONFIG_SCTP_HMAC_NONE is not set
# CONFIG_SCTP_HMAC_SHA1 is not setCONFIG_SCTP_HMAC_MD5=y
# CONFIG_TIPC is not setCONFIG_ATM=m
# CONFIG_ATM_CLIP is not set
# CONFIG_ATM_LANE is not set
# CONFIG_ATM_BR2684 is not set
# CONFIG_BRIDGE is not setCONFIG_VLAN_8021Q=mCONFIG_DECNET=mCONFIG_DECNET_ROUTER=yCONFIG_LLC=y
# CONFIG_LLC2 is not setCONFIG_IPX=yCONFIG_IPX_INTERN=y
# CONFIG_ATALK is not set
# CONFIG_X25 is not setCONFIG_LAPB=m
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not setCONFIG_NET_SCHED=y
#
# Queueing/Scheduling
#CONFIG_NET_SCH_CBQ=m
# CONFIG_NET_SCH_HTB is not setCONFIG_NET_SCH_HFSC=yCONFIG_NET_SCH_ATM=mCONFIG_NET_SCH_PRIO=mCONFIG_NET_SCH_RR=m
# CONFIG_NET_SCH_RED is not set
# CONFIG_NET_SCH_SFQ is not set
# CONFIG_NET_SCH_TEQL is not setCONFIG_NET_SCH_TBF=mCONFIG_NET_SCH_GRED=m
# CONFIG_NET_SCH_DSMARK is not setCONFIG_NET_SCH_NETEM=yCONFIG_NET_SCH_INGRESS=y
#
# Classification
#CONFIG_NET_CLS=yCONFIG_NET_CLS_BASIC=yCONFIG_NET_CLS_TCINDEX=yCONFIG_NET_CLS_ROUTE4=mCONFIG_NET_CLS_ROUTE=yCONFIG_NET_CLS_FW=yCONFIG_NET_CLS_U32=y
# CONFIG_CLS_U32_PERF is not set
# CONFIG_CLS_U32_MARK is not setCONFIG_NET_CLS_RSVP=yCONFIG_NET_CLS_RSVP6=mCONFIG_NET_EMATCH=yCONFIG_NET_EMATCH_STACK=32
# CONFIG_NET_EMATCH_CMP is not setCONFIG_NET_EMATCH_NBYTE=yCONFIG_NET_EMATCH_U32=mCONFIG_NET_EMATCH_META=mCONFIG_NET_EMATCH_TEXT=mCONFIG_NET_CLS_ACT=yCONFIG_NET_ACT_POLICE=y
# CONFIG_NET_ACT_GACT is not set
# CONFIG_NET_ACT_MIRRED is not setCONFIG_NET_ACT_NAT=mCONFIG_NET_ACT_PEDIT=m
# CONFIG_NET_ACT_SIMP is not setCONFIG_NET_CLS_POLICE=y
# CONFIG_NET_CLS_IND is not setCONFIG_NET_SCH_FIFO=y
#
# Network testing
#CONFIG_NET_PKTGEN=yCONFIG_HAMRADIO=y
#
# Packet Radio protocols
#CONFIG_AX25=m
# CONFIG_AX25_DAMA_SLAVE is not setCONFIG_NETROM=m
# CONFIG_ROSE is not set
#
# AX.25 network device drivers
#
# CONFIG_MKISS is not setCONFIG_6PACK=m
# CONFIG_BPQETHER is not setCONFIG_DMASCC=mCONFIG_SCC=m
# CONFIG_SCC_DELAY is not setCONFIG_SCC_TRXECHO=y
# CONFIG_BAYCOM_SER_FDX is not set
# CONFIG_BAYCOM_SER_HDX is not setCONFIG_YAM=mCONFIG_IRDA=m
#
# IrDA protocols
#CONFIG_IRLAN=mCONFIG_IRNET=m
# CONFIG_IRCOMM is not setCONFIG_IRDA_ULTRA=y
#
# IrDA options
#CONFIG_IRDA_CACHE_LAST_LSAP=yCONFIG_IRDA_FAST_RR=y
# CONFIG_IRDA_DEBUG is not set
#
# Infrared-port device drivers
#
#
# SIR device drivers
#CONFIG_IRTTY_SIR=m
#
# Dongle support
#CONFIG_DONGLE=y
# CONFIG_ESI_DONGLE is not setCONFIG_ACTISYS_DONGLE=m
# CONFIG_TEKRAM_DONGLE is not set
# CONFIG_TOIM3232_DONGLE is not set
# CONFIG_LITELINK_DONGLE is not setCONFIG_MA600_DONGLE=m
# CONFIG_GIRBIL_DONGLE is not set
# CONFIG_MCP2120_DONGLE is not set
# CONFIG_OLD_BELKIN_DONGLE is not setCONFIG_ACT200L_DONGLE=mCONFIG_KINGSUN_DONGLE=m
# CONFIG_KSDAZZLE_DONGLE is not set
# CONFIG_KS959_DONGLE is not set
#
# Old SIR device drivers
#CONFIG_IRPORT_SIR=m
#
# Old Serial dongle support
#
# CONFIG_DONGLE_OLD is not set
#
# FIR device drivers
#CONFIG_USB_IRDA=m
# CONFIG_SIGMATEL_FIR is not set
# CONFIG_NSC_FIR is not setCONFIG_WINBOND_FIR=mCONFIG_TOSHIBA_FIR=m
# CONFIG_SMC_IRCC_FIR is not setCONFIG_ALI_FIR=m
# CONFIG_VLSI_FIR is not set
# CONFIG_VIA_FIR is not setCONFIG_MCS_FIR=m
# CONFIG_BT is not setCONFIG_AF_RXRPC=y
# CONFIG_AF_RXRPC_DEBUG is not setCONFIG_RXKAD=yCONFIG_FIB_RULES=y
#
# Wireless
#CONFIG_CFG80211=y
# CONFIG_NL80211 is not setCONFIG_WIRELESS_EXT=yCONFIG_MAC80211=y
# CONFIG_MAC80211_RCSIMPLE is not setCONFIG_MAC80211_LEDS=yCONFIG_MAC80211_DEBUGFS=yCONFIG_MAC80211_DEBUG=yCONFIG_MAC80211_VERBOSE_DEBUG=yCONFIG_MAC80211_LOWTX_FRAME_DUMP=y
# CONFIG_TKIP_DEBUG is not setCONFIG_MAC80211_DEBUG_COUNTERS=yCONFIG_MAC80211_IBSS_DEBUG=y
# CONFIG_MAC80211_VERBOSE_PS_DEBUG is not setCONFIG_IEEE80211=yCONFIG_IEEE80211_DEBUG=y
# CONFIG_IEEE80211_CRYPT_WEP is not setCONFIG_IEEE80211_CRYPT_CCMP=m
# CONFIG_IEEE80211_CRYPT_TKIP is not set
# CONFIG_IEEE80211_SOFTMAC is not setCONFIG_RFKILL=m
# CONFIG_RFKILL_INPUT is not setCONFIG_RFKILL_LEDS=yCONFIG_NET_9P=mCONFIG_NET_9P_FD=m
# CONFIG_NET_9P_VIRTIO is not setCONFIG_NET_9P_DEBUG=y
#
# Device Drivers
#
#
# Generic Driver Options
#CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"CONFIG_STANDALONE=yCONFIG_PREVENT_FIRMWARE_BUILD=yCONFIG_FW_LOADER=y
# CONFIG_SYS_HYPERVISOR is not setCONFIG_CONNECTOR=m
# CONFIG_MTD is not set
# CONFIG_PARPORT is not setCONFIG_PNP=yCONFIG_PNP_DEBUG=y
#
# Protocols
#
# CONFIG_ISAPNP is not setCONFIG_PNPBIOS=yCONFIG_PNPBIOS_PROC_FS=y
# CONFIG_PNPACPI is not set
# CONFIG_BLK_DEV is not setCONFIG_MISC_DEVICES=yCONFIG_IBM_ASM=m
# CONFIG_PHANTOM is not setCONFIG_EEPROM_93CX6=yCONFIG_SGI_IOC4=mCONFIG_TIFM_CORE=y
# CONFIG_TIFM_7XX1 is not set
# CONFIG_IDE is not set
#
# SCSI device support
#
# CONFIG_RAID_ATTRS is not setCONFIG_SCSI=yCONFIG_SCSI_DMA=yCONFIG_SCSI_TGT=y
# CONFIG_SCSI_NETLINK is not set
# CONFIG_SCSI_PROC_FS is not set
#
# SCSI support type (disk, tape, CD-ROM)
#CONFIG_BLK_DEV_SD=y
# CONFIG_CHR_DEV_ST is not setCONFIG_CHR_DEV_OSST=yCONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_SR_VENDOR is not setCONFIG_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 is not set
# CONFIG_SCSI_FC_ATTRS is not setCONFIG_SCSI_ISCSI_ATTRS=mCONFIG_SCSI_SAS_ATTRS=mCONFIG_SCSI_SAS_LIBSAS=mCONFIG_SCSI_SAS_ATA=yCONFIG_SCSI_SAS_LIBSAS_DEBUG=y
# CONFIG_SCSI_SRP_ATTRS is not set
# CONFIG_SCSI_LOWLEVEL is not setCONFIG_ATA=y
# CONFIG_ATA_NONSTANDARD is not setCONFIG_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 setCONFIG_SATA_PROMISE=mCONFIG_SATA_SX4=m
# CONFIG_SATA_SIL is not setCONFIG_SATA_SIL24=mCONFIG_SATA_SIS=y
# CONFIG_SATA_ULI is not setCONFIG_SATA_VIA=m
# CONFIG_SATA_VITESSE is not setCONFIG_SATA_INIC162X=m
# CONFIG_PATA_ALI is not setCONFIG_PATA_AMD=y
# CONFIG_PATA_ARTOP is not set
# CONFIG_PATA_ATIIXP is not setCONFIG_PATA_CMD640_PCI=m
# CONFIG_PATA_CMD64X is not set
# CONFIG_PATA_CS5520 is not setCONFIG_PATA_CS5530=mCONFIG_PATA_CS5535=mCONFIG_PATA_CS5536=yCONFIG_PATA_CYPRESS=yCONFIG_PATA_EFAR=y
# CONFIG_ATA_GENERIC is not setCONFIG_PATA_HPT366=mCONFIG_PATA_HPT37X=yCONFIG_PATA_HPT3X2N=mCONFIG_PATA_HPT3X3=m
# CONFIG_PATA_HPT3X3_DMA is not setCONFIG_PATA_IT821X=mCONFIG_PATA_IT8213=yCONFIG_PATA_JMICRON=yCONFIG_PATA_LEGACY=y
# CONFIG_PATA_TRIFLEX is not set
# CONFIG_PATA_MARVELL is not set
# CONFIG_PATA_MPIIX is not setCONFIG_PATA_OLDPIIX=yCONFIG_PATA_NETCELL=yCONFIG_PATA_NS87410=y
# CONFIG_PATA_NS87415 is not set
# CONFIG_PATA_OPTI is not set
# CONFIG_PATA_OPTIDMA is not setCONFIG_PATA_PDC_OLD=mCONFIG_PATA_QDI=yCONFIG_PATA_RADISYS=y
# 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 setCONFIG_PATA_SIS=yCONFIG_PATA_VIA=mCONFIG_PATA_WINBOND=mCONFIG_PATA_WINBOND_VLB=yCONFIG_PATA_PLATFORM=yCONFIG_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=mCONFIG_DM_MIRROR=m
# CONFIG_DM_ZERO is not setCONFIG_DM_MULTIPATH=mCONFIG_DM_MULTIPATH_EMC=m
# CONFIG_DM_MULTIPATH_RDAC is not setCONFIG_DM_MULTIPATH_HP=m
# CONFIG_DM_DELAY is not set
# CONFIG_DM_UEVENT is not set
# CONFIG_FUSION is not set
#
# IEEE 1394 (FireWire) support
#CONFIG_FIREWIRE=yCONFIG_FIREWIRE_OHCI=yCONFIG_FIREWIRE_SBP2=yCONFIG_IEEE1394=m
#
# Subsystem Options
#
# CONFIG_IEEE1394_VERBOSEDEBUG is not set
#
# Controllers
#CONFIG_IEEE1394_PCILYNX=m
# CONFIG_IEEE1394_OHCI1394 is not set
#
# Protocols
#
# CONFIG_IEEE1394_SBP2 is not setCONFIG_IEEE1394_ETH1394_ROM_ENTRY=yCONFIG_IEEE1394_ETH1394=m
# CONFIG_IEEE1394_RAWIO is not setCONFIG_I2O=yCONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
# CONFIG_I2O_EXT_ADAPTEC is not set
# CONFIG_I2O_CONFIG is not set
# CONFIG_I2O_BUS is not setCONFIG_I2O_BLOCK=y
# CONFIG_I2O_SCSI is not set
# CONFIG_I2O_PROC is not setCONFIG_MACINTOSH_DRIVERS=yCONFIG_MAC_EMUMOUSEBTN=yCONFIG_NETDEVICES=yCONFIG_NETDEVICES_MULTIQUEUE=y
# CONFIG_IFB is not setCONFIG_DUMMY=mCONFIG_BONDING=mCONFIG_MACVLAN=yCONFIG_EQUALIZER=yCONFIG_TUN=y
# CONFIG_VETH is not setCONFIG_NET_SB1000=yCONFIG_IP1000=yCONFIG_ARCNET=mCONFIG_ARCNET_1201=mCONFIG_ARCNET_1051=mCONFIG_ARCNET_RAW=m
# CONFIG_ARCNET_CAP is not set
CONFIG_ARCNET_COM90xx=m
# CONFIG_ARCNET_COM90xxIO is not setCONFIG_ARCNET_RIM_I=mCONFIG_ARCNET_COM20020=mCONFIG_ARCNET_COM20020_ISA=mCONFIG_ARCNET_COM20020_PCI=m
# CONFIG_PHYLIB is not setCONFIG_NET_ETHERNET=yCONFIG_MII=y
# CONFIG_HAPPYMEAL is not set
# CONFIG_SUNGEM is not set
# CONFIG_CASSINI is not setCONFIG_NET_VENDOR_3COM=yCONFIG_EL1=yCONFIG_EL2=mCONFIG_ELPLUS=yCONFIG_EL16=yCONFIG_EL3=yCONFIG_3C515=m
# CONFIG_VORTEX is not set
# CONFIG_TYPHOON is not setCONFIG_LANCE=mCONFIG_NET_VENDOR_SMC=y
CONFIG_WD80x3=mCONFIG_ULTRA=mCONFIG_SMC9194=mCONFIG_NET_VENDOR_RACAL=yCONFIG_NI5010=m
# CONFIG_NI52 is not set
# CONFIG_NI65 is not setCONFIG_NET_TULIP=yCONFIG_DE2104X=mCONFIG_TULIP=yCONFIG_TULIP_MWI=y
# CONFIG_TULIP_MMIO is not setCONFIG_TULIP_NAPI=yCONFIG_TULIP_NAPI_HW_MITIGATION=yCONFIG_DE4X5=mCONFIG_WINBOND_840=mCONFIG_DM9102=yCONFIG_ULI526X=mCONFIG_AT1700=yCONFIG_DEPCA=mCONFIG_HP100=y
# CONFIG_NET_ISA 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 setCONFIG_ADAPTEC_STARFIRE=mCONFIG_ADAPTEC_STARFIRE_NAPI=yCONFIG_AC3200=mCONFIG_APRICOT=y
# CONFIG_B44 is not setCONFIG_FORCEDETH=yCONFIG_FORCEDETH_NAPI=y
CONFIG_CS89x0=yCONFIG_EEPRO100=mCONFIG_E100=y
# CONFIG_FEALNX is not setCONFIG_NATSEMI=y
# CONFIG_NE2K_PCI is not setCONFIG_8139CP=yCONFIG_8139TOO=yCONFIG_8139TOO_PIO=yCONFIG_8139TOO_TUNE_TWISTER=y
# CONFIG_8139TOO_8129 is not setCONFIG_8139_OLD_RX_RESET=y
# CONFIG_SIS900 is not setCONFIG_EPIC100=y
# CONFIG_SUNDANCE is not setCONFIG_TLAN=yCONFIG_VIA_RHINE=mCONFIG_VIA_RHINE_MMIO=y
# CONFIG_VIA_RHINE_NAPI is not setCONFIG_SC92031=m
# CONFIG_NETDEV_1000 is not setCONFIG_NETDEV_10000=yCONFIG_CHELSIO_T1=y
# CONFIG_CHELSIO_T1_1G is not setCONFIG_CHELSIO_T1_NAPI=yCONFIG_CHELSIO_T3=yCONFIG_IXGBE=m
# CONFIG_IXGB is not setCONFIG_S2IO=yCONFIG_S2IO_NAPI=y
# CONFIG_MYRI10GE is not setCONFIG_NETXEN_NIC=y
# CONFIG_NIU is not setCONFIG_MLX4_CORE=mCONFIG_MLX4_DEBUG=yCONFIG_TEHUTI=mCONFIG_TR=yCONFIG_IBMTR=yCONFIG_IBMOL=mCONFIG_IBMLS=yCONFIG_3C359=yCONFIG_TMS380TR=m
# CONFIG_TMSPCI is not set
# CONFIG_SKISA is not setCONFIG_PROTEON=m
# CONFIG_ABYSS is not setCONFIG_SMCTR=y
#
# Wireless LAN
#
# CONFIG_WLAN_PRE80211 is not setCONFIG_WLAN_80211=y
# CONFIG_IPW2100 is not setCONFIG_IPW2200=yCONFIG_IPW2200_MONITOR=yCONFIG_IPW2200_RADIOTAP=yCONFIG_IPW2200_PROMISCUOUS=yCONFIG_IPW2200_QOS=yCONFIG_IPW2200_DEBUG=yCONFIG_LIBERTAS=m
# CONFIG_LIBERTAS_USB is not set
# CONFIG_LIBERTAS_SDIO is not setCONFIG_LIBERTAS_DEBUG=y
# CONFIG_AIRO is not set
# CONFIG_HERMES is not set
# CONFIG_ATMEL is not set
# CONFIG_PRISM54 is not set
# CONFIG_USB_ZD1201 is not setCONFIG_RTL8187=yCONFIG_ADM8211=y
# CONFIG_P54_COMMON is not setCONFIG_IWLWIFI=y
# CONFIG_IWLWIFI_DEBUG is not setCONFIG_IWLWIFI_SENSITIVITY=y
# CONFIG_IWLWIFI_SPECTRUM_MEASUREMENT is not set
# CONFIG_IWLWIFI_QOS is not setCONFIG_IWL4965=mCONFIG_IWL3945=m
# CONFIG_HOSTAP is not set
# CONFIG_B43 is not setCONFIG_B43LEGACY=mCONFIG_B43LEGACY_PCI_AUTOSELECT=yCONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
# CONFIG_B43LEGACY_DEBUG is not setCONFIG_B43LEGACY_PIO=y
# CONFIG_B43LEGACY_DMA_AND_PIO_MODE is not set
# CONFIG_B43LEGACY_DMA_MODE is not setCONFIG_B43LEGACY_PIO_MODE=yCONFIG_RT2X00=mCONFIG_RT2X00_LIB=mCONFIG_RT2X00_LIB_PCI=mCONFIG_RT2X00_LIB_USB=mCONFIG_RT2X00_LIB_FIRMWARE=yCONFIG_RT2X00_LIB_RFKILL=yCONFIG_RT2400PCI=m
# CONFIG_RT2400PCI_RFKILL is not set
# CONFIG_RT2500PCI is not setCONFIG_RT61PCI=mCONFIG_RT61PCI_RFKILL=yCONFIG_RT2500USB=m
# CONFIG_RT73USB is not setCONFIG_RT2X00_LIB_DEBUGFS=y
# CONFIG_RT2X00_DEBUG is not set
#
# USB Network Adapters
#
# CONFIG_USB_CATC is not setCONFIG_USB_KAWETH=mCONFIG_USB_PEGASUS=y
# CONFIG_USB_RTL8150 is not setCONFIG_USB_USBNET=yCONFIG_USB_NET_AX8817X=mCONFIG_USB_NET_CDCETHER=m
# CONFIG_USB_NET_DM9601 is not setCONFIG_USB_NET_GL620A=mCONFIG_USB_NET_NET1080=m
# CONFIG_USB_NET_PLUSB is not set
# CONFIG_USB_NET_MCS7830 is not setCONFIG_USB_NET_RNDIS_HOST=mCONFIG_USB_NET_CDC_SUBSET=m
# CONFIG_USB_ALI_M5632 is not set
# CONFIG_USB_AN2720 is not setCONFIG_USB_BELKIN=yCONFIG_USB_ARMLINUX=yCONFIG_USB_EPSON2888=yCONFIG_USB_KC2190=yCONFIG_USB_NET_ZAURUS=mCONFIG_WAN=y
# CONFIG_HOSTESS_SV11 is not set
# CONFIG_COSA is not set
# CONFIG_LANMEDIA is not set
# CONFIG_SEALEVEL_4021 is not setCONFIG_HDLC=yCONFIG_HDLC_RAW=yCONFIG_HDLC_RAW_ETH=y
# CONFIG_HDLC_CISCO is not set
# CONFIG_HDLC_FR is not setCONFIG_HDLC_PPP=m
#
# X.25/LAPB support is disabled
#CONFIG_PCI200SYN=y
# CONFIG_WANXL is not setCONFIG_PC300=m
#
# Cyclades-PC300 MLPPP support is disabled.
#
#
# Refer to the file README.mlppp, provided by PC300 package. #CONFIG_PC300TOO=mCONFIG_N2=m
# CONFIG_C101 is not setCONFIG_FARSYNC=yCONFIG_DSCC4=m
# CONFIG_DSCC4_PCISYNC is not set
# CONFIG_DSCC4_PCI_RST is not setCONFIG_DLCI=mCONFIG_DLCI_MAX=8CONFIG_SDLA=mCONFIG_SBNI=y
# CONFIG_SBNI_MULTILINE is not set CONFIG_ATM_DRIVERS=yCONFIG_ATM_DUMMY=mCONFIG_ATM_TCP=m
# CONFIG_ATM_LANAI is not set
# CONFIG_ATM_ENI is not set CONFIG_ATM_FIRESTREAM=mCONFIG_ATM_ZATM=mCONFIG_ATM_ZATM_DEBUG=yCONFIG_ATM_NICSTAR=m
# CONFIG_ATM_NICSTAR_USE_SUNI is not set CONFIG_ATM_NICSTAR_USE_IDT77105=y
# CONFIG_ATM_IDT77252 is not set CONFIG_ATM_AMBASSADOR=m
# CONFIG_ATM_AMBASSADOR_DEBUG is not set
# CONFIG_ATM_HORIZON is not set
# CONFIG_ATM_IA is not set CONFIG_ATM_FORE200E_MAYBE=m CONFIG_ATM_FORE200E_PCA=y CONFIG_ATM_FORE200E_PCA_DEFAULT_FW=y
# CONFIG_ATM_FORE200E_USE_TASKLET is not set CONFIG_ATM_FORE200E_TX_RETRY=16 CONFIG_ATM_FORE200E_DEBUG=0CONFIG_ATM_FORE200E=mCONFIG_ATM_HE=m
# CONFIG_ATM_HE_USE_SUNI is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not setCONFIG_PPP=yCONFIG_PPP_MULTILINK=y
# CONFIG_PPP_FILTER is not set
# CONFIG_PPP_ASYNC is not set
# CONFIG_PPP_SYNC_TTY is not set CONFIG_PPP_DEFLATE=yCONFIG_PPP_BSDCOMP=mCONFIG_PPP_MPPE=mCONFIG_PPPOE=mCONFIG_PPPOATM=mCONFIG_PPPOL2TP=m
# CONFIG_SLIP is not setCONFIG_SLHC=y
# CONFIG_NET_FC is not setCONFIG_SHAPER=mCONFIG_NETCONSOLE=y
# CONFIG_NETCONSOLE_DYNAMIC is not set CONFIG_NETPOLL=y
# CONFIG_NETPOLL_TRAP is not set CONFIG_NET_POLL_CONTROLLER=yCONFIG_VIRTIO_NET=y
# CONFIG_ISDN is not set
# CONFIG_PHONE is not set
#
# Input device support
#CONFIG_INPUT=y
# CONFIG_INPUT_FF_MEMLESS is not setCONFIG_INPUT_POLLDEV=y
#
# Userland interfaces
#CONFIG_INPUT_MOUSEDEV=yCONFIG_INPUT_MOUSEDEV_PSAUX=yCONFIG_INPUT_MOUSEDEV_SCREEN_X=1024CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
# CONFIG_INPUT_JOYDEV is not setCONFIG_INPUT_EVDEV=mCONFIG_INPUT_EVBUG=y
#
# Input Device Drivers
#CONFIG_INPUT_KEYBOARD=yCONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_LKKBD is not setCONFIG_KEYBOARD_XTKBD=yCONFIG_KEYBOARD_NEWTON=y
# CONFIG_KEYBOARD_STOWAWAY is not setCONFIG_INPUT_MOUSE=y
# CONFIG_MOUSE_PS2 is not set
# CONFIG_MOUSE_SERIAL is not setCONFIG_MOUSE_APPLETOUCH=yCONFIG_MOUSE_INPORT=yCONFIG_MOUSE_ATIXL=yCONFIG_MOUSE_LOGIBM=m
# CONFIG_MOUSE_PC110PAD is not setCONFIG_MOUSE_VSXXXAA=mCONFIG_INPUT_JOYSTICK=yCONFIG_JOYSTICK_ANALOG=mCONFIG_JOYSTICK_A3D=yCONFIG_JOYSTICK_ADI=yCONFIG_JOYSTICK_COBRA=yCONFIG_JOYSTICK_GF2K=y
# CONFIG_JOYSTICK_GRIP is not setCONFIG_JOYSTICK_GRIP_MP=mCONFIG_JOYSTICK_GUILLEMOT=y
# CONFIG_JOYSTICK_INTERACT is not setCONFIG_JOYSTICK_SIDEWINDER=y
# 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 setCONFIG_JOYSTICK_SPACEBALL=y
# CONFIG_JOYSTICK_STINGER is not set
# CONFIG_JOYSTICK_TWIDJOY is not setCONFIG_JOYSTICK_JOYDUMP=y
# CONFIG_JOYSTICK_XPAD is not set
# CONFIG_INPUT_TABLET is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MISC is not set
#
# Hardware I/O ports
#CONFIG_SERIO=yCONFIG_SERIO_I8042=y
# CONFIG_SERIO_SERPORT is not set
# CONFIG_SERIO_CT82C710 is not setCONFIG_SERIO_PCIPS2=mCONFIG_SERIO_LIBPS2=yCONFIG_SERIO_RAW=yCONFIG_GAMEPORT=yCONFIG_GAMEPORT_NS558=mCONFIG_GAMEPORT_L4=m
# CONFIG_GAMEPORT_EMU10K1 is not setCONFIG_GAMEPORT_FM801=y
#
# Character devices
#CONFIG_VT=yCONFIG_VT_CONSOLE=yCONFIG_HW_CONSOLE=y
# CONFIG_VT_HW_CONSOLE_BINDING is not setCONFIG_SERIAL_NONSTANDARD=yCONFIG_COMPUTONE=yCONFIG_ROCKETPORT=yCONFIG_CYCLADES=mCONFIG_CYZ_INTR=yCONFIG_DIGIEPCA=yCONFIG_ESPSERIAL=yCONFIG_MOXA_INTELLIO=mCONFIG_MOXA_SMARTIO=y
# CONFIG_MOXA_SMARTIO_NEW is not setCONFIG_ISI=mCONFIG_SYNCLINK=mCONFIG_SYNCLINKMP=mCONFIG_SYNCLINK_GT=mCONFIG_N_HDLC=mCONFIG_RISCOM8=yCONFIG_SPECIALIX=m
# CONFIG_SPECIALIX_RTSCTS is not setCONFIG_SX=y
# 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=m
# CONFIG_SERIAL_8250_PNP is not setCONFIG_SERIAL_8250_NR_UARTS=4CONFIG_SERIAL_8250_RUNTIME_UARTS=4CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_MANY_PORTS is not setCONFIG_SERIAL_8250_SHARE_IRQ=yCONFIG_SERIAL_8250_DETECT_IRQ=y
# CONFIG_SERIAL_8250_RSA is not set
#
# Non-8250 serial port support
#CONFIG_SERIAL_CORE=yCONFIG_SERIAL_CORE_CONSOLE=yCONFIG_SERIAL_JSM=mCONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not setCONFIG_HVC_DRIVER=yCONFIG_VIRTIO_CONSOLE=yCONFIG_IPMI_HANDLER=y
# CONFIG_IPMI_PANIC_EVENT is not set
# CONFIG_IPMI_DEVICE_INTERFACE is not setCONFIG_IPMI_SI=y
# CONFIG_IPMI_WATCHDOG is not set
# CONFIG_IPMI_POWEROFF is not setCONFIG_HW_RANDOM=mCONFIG_HW_RANDOM_INTEL=m
# CONFIG_HW_RANDOM_AMD is not set
# CONFIG_HW_RANDOM_GEODE is not setCONFIG_HW_RANDOM_VIA=mCONFIG_NVRAM=m
# CONFIG_RTC is not setCONFIG_GEN_RTC=m
# CONFIG_GEN_RTC_X is not setCONFIG_DTLK=m
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
# CONFIG_SONYPI is not setCONFIG_MWAVE=m
# CONFIG_SCx200_GPIO is not set
CONFIG_PC8736x_GPIO=mCONFIG_NSC_GPIO=mCONFIG_CS5535_GPIO=mCONFIG_RAW_DRIVER=yCONFIG_MAX_RAW_DEVS=256CONFIG_HANGCHECK_TIMER=yCONFIG_TCG_TPM=yCONFIG_TCG_ATMEL=yCONFIG_TELCLOCK=yCONFIG_DEVPORT=yCONFIG_I2C=yCONFIG_I2C_BOARDINFO=y
# CONFIG_I2C_CHARDEV is not set
#
# I2C Algorithms
#CONFIG_I2C_ALGOBIT=y
# CONFIG_I2C_ALGOPCF is not setCONFIG_I2C_ALGOPCA=y
#
# I2C Hardware Bus support
#
# CONFIG_I2C_ALI1535 is not setCONFIG_I2C_ALI1563=y
# CONFIG_I2C_ALI15X3 is not set
# CONFIG_I2C_AMD756 is not setCONFIG_I2C_AMD8111=y
# CONFIG_I2C_ELEKTOR is not setCONFIG_I2C_I801=m
# CONFIG_I2C_I810 is not set
# CONFIG_I2C_PIIX4 is not setCONFIG_I2C_NFORCE2=yCONFIG_I2C_OCORES=mCONFIG_I2C_PARPORT_LIGHT=y
# CONFIG_I2C_PROSAVAGE is not set
# CONFIG_I2C_SAVAGE4 is not setCONFIG_I2C_SIMTEC=m
# CONFIG_SCx200_ACB is not set
# CONFIG_I2C_SIS5595 is not set
# CONFIG_I2C_SIS630 is not setCONFIG_I2C_SIS96X=y
# CONFIG_I2C_TAOS_EVM is not set
# CONFIG_I2C_STUB is not setCONFIG_I2C_TINY_USB=y
# CONFIG_I2C_VIA is not setCONFIG_I2C_VIAPRO=m
# CONFIG_I2C_VOODOO3 is not setCONFIG_I2C_PCA_ISA=y
#
# Miscellaneous I2C Chip support
#CONFIG_SENSORS_DS1337=yCONFIG_SENSORS_DS1374=mCONFIG_DS1682=m
# CONFIG_SENSORS_EEPROM is not setCONFIG_SENSORS_PCF8574=mCONFIG_SENSORS_PCA9539=mCONFIG_SENSORS_PCF8591=m
# CONFIG_SENSORS_MAX6875 is not setCONFIG_SENSORS_TSL2550=yCONFIG_I2C_DEBUG_CORE=y
# CONFIG_I2C_DEBUG_ALGO is not setCONFIG_I2C_DEBUG_BUS=y
# CONFIG_I2C_DEBUG_CHIP is not set
#
# SPI support
#
# CONFIG_SPI is not set
# CONFIG_SPI_MASTER is not setCONFIG_W1=m
# CONFIG_W1_CON is not set
#
# 1-wire Bus Masters
#
# CONFIG_W1_MASTER_MATROX is not setCONFIG_W1_MASTER_DS2490=m
# CONFIG_W1_MASTER_DS2482 is not set
#
# 1-wire Slaves
#
# CONFIG_W1_SLAVE_THERM is not set
# CONFIG_W1_SLAVE_SMEM is not set
# CONFIG_W1_SLAVE_DS2433 is not setCONFIG_W1_SLAVE_DS2760=mCONFIG_POWER_SUPPLY=mCONFIG_POWER_SUPPLY_DEBUG=yCONFIG_PDA_POWER=mCONFIG_BATTERY_DS2760=mCONFIG_HWMON=yCONFIG_HWMON_VID=y
# CONFIG_SENSORS_ABITUGURU is not setCONFIG_SENSORS_ABITUGURU3=yCONFIG_SENSORS_AD7418=mCONFIG_SENSORS_ADM1021=yCONFIG_SENSORS_ADM1025=yCONFIG_SENSORS_ADM1026=yCONFIG_SENSORS_ADM1029=m
# CONFIG_SENSORS_ADM1031 is not set
# CONFIG_SENSORS_ADM9240 is not setCONFIG_SENSORS_ADT7470=yCONFIG_SENSORS_K8TEMP=yCONFIG_SENSORS_ASB100=y
# CONFIG_SENSORS_ATXP1 is not setCONFIG_SENSORS_DS1621=mCONFIG_SENSORS_I5K_AMB=yCONFIG_SENSORS_F71805F=yCONFIG_SENSORS_F71882FG=m
# CONFIG_SENSORS_F75375S is not setCONFIG_SENSORS_FSCHER=mCONFIG_SENSORS_FSCPOS=y
# CONFIG_SENSORS_FSCHMD is not set
# CONFIG_SENSORS_GL518SM is not setCONFIG_SENSORS_GL520SM=yCONFIG_SENSORS_CORETEMP=mCONFIG_SENSORS_IBMPEX=y
# CONFIG_SENSORS_IT87 is not setCONFIG_SENSORS_LM63=yCONFIG_SENSORS_LM75=yCONFIG_SENSORS_LM77=mCONFIG_SENSORS_LM78=yCONFIG_SENSORS_LM80=mCONFIG_SENSORS_LM83=m
# CONFIG_SENSORS_LM85 is not set
# CONFIG_SENSORS_LM87 is not setCONFIG_SENSORS_LM90=yCONFIG_SENSORS_LM92=yCONFIG_SENSORS_LM93=mCONFIG_SENSORS_MAX1619=yCONFIG_SENSORS_MAX6650=yCONFIG_SENSORS_PC87360=yCONFIG_SENSORS_PC87427=mCONFIG_SENSORS_SIS5595=mCONFIG_SENSORS_DME1737=y
# CONFIG_SENSORS_SMSC47M1 is not set
# CONFIG_SENSORS_SMSC47M192 is not setCONFIG_SENSORS_SMSC47B397=yCONFIG_SENSORS_THMC50=yCONFIG_SENSORS_VIA686A=yCONFIG_SENSORS_VT1211=yCONFIG_SENSORS_VT8231=mCONFIG_SENSORS_W83781D=y
# CONFIG_SENSORS_W83791D is not setCONFIG_SENSORS_W83792D=m
# CONFIG_SENSORS_W83793 is not setCONFIG_SENSORS_W83L785TS=yCONFIG_SENSORS_W83627HF=yCONFIG_SENSORS_W83627EHF=mCONFIG_SENSORS_HDAPS=mCONFIG_SENSORS_APPLESMC=mCONFIG_HWMON_DEBUG_CHIP=yCONFIG_WATCHDOG=yCONFIG_WATCHDOG_NOWAYOUT=y
#
# Watchdog Device Drivers
#CONFIG_SOFT_WATCHDOG=mCONFIG_ACQUIRE_WDT=yCONFIG_ADVANTECH_WDT=yCONFIG_ALIM1535_WDT=y
# CONFIG_ALIM7101_WDT is not setCONFIG_SC520_WDT=y
# CONFIG_EUROTECH_WDT is not setCONFIG_IB700_WDT=m
# CONFIG_IBMASR is not setCONFIG_WAFER_WDT=m
# CONFIG_I6300ESB_WDT is not setCONFIG_ITCO_WDT=y
# CONFIG_ITCO_VENDOR_SUPPORT is not setCONFIG_IT8712F_WDT=yCONFIG_SC1200_WDT=y
CONFIG_SCx200_WDT=mCONFIG_PC87413_WDT=yCONFIG_60XX_WDT=mCONFIG_SBC8360_WDT=y
# CONFIG_SBC7240_WDT is not setCONFIG_CPU5_WDT=y
# CONFIG_SMSC37B787_WDT is not set
# CONFIG_W83627HF_WDT is not set
# CONFIG_W83697HF_WDT is not setCONFIG_W83877F_WDT=yCONFIG_W83977F_WDT=yCONFIG_MACHZ_WDT=yCONFIG_SBC_EPX_C3_WATCHDOG=m
#
# ISA-based Watchdog Cards
#CONFIG_PCWATCHDOG=mCONFIG_MIXCOMWD=y
# CONFIG_WDT is not set
#
# PCI-based Watchdog Cards
#CONFIG_PCIPCWATCHDOG=mCONFIG_WDTPCI=m
# CONFIG_WDT_501_PCI is not set
#
# USB-based Watchdog Cards
#
# CONFIG_USBPCWATCHDOG is not set
#
# Sonics Silicon Backplane
#CONFIG_SSB_POSSIBLE=yCONFIG_SSB=mCONFIG_SSB_PCIHOST_POSSIBLE=yCONFIG_SSB_PCIHOST=y
# CONFIG_SSB_SILENT is not setCONFIG_SSB_DEBUG=yCONFIG_SSB_DRIVER_PCICORE_POSSIBLE=yCONFIG_SSB_DRIVER_PCICORE=y
#
# Multifunction device drivers
#CONFIG_MFD_SM501=y
#
# Multimedia devices
#
# CONFIG_VIDEO_DEV is not set
# CONFIG_DVB_CORE is not setCONFIG_DAB=yCONFIG_USB_DABUSB=y
#
# Graphics support
#CONFIG_AGP=mCONFIG_AGP_ALI=m
# CONFIG_AGP_ATI is not setCONFIG_AGP_AMD=mCONFIG_AGP_AMD64=mCONFIG_AGP_INTEL=mCONFIG_AGP_NVIDIA=mCONFIG_AGP_SIS=m
# CONFIG_AGP_SWORKS is not setCONFIG_AGP_VIA=m
# CONFIG_AGP_EFFICEON is not setCONFIG_DRM=m
# CONFIG_DRM_TDFX is not setCONFIG_DRM_R128=m
# CONFIG_DRM_RADEON is not set
# CONFIG_DRM_I810 is not set
# CONFIG_DRM_I830 is not set
# CONFIG_DRM_I915 is not setCONFIG_DRM_MGA=m
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_VIA is not setCONFIG_DRM_SAVAGE=mCONFIG_VGASTATE=yCONFIG_VIDEO_OUTPUT_CONTROL=yCONFIG_FB=y
# CONFIG_FIRMWARE_EDID is not setCONFIG_FB_DDC=yCONFIG_FB_CFB_FILLRECT=yCONFIG_FB_CFB_COPYAREA=yCONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not setCONFIG_FB_SYS_FILLRECT=mCONFIG_FB_SYS_COPYAREA=mCONFIG_FB_SYS_IMAGEBLIT=mCONFIG_FB_SYS_FOPS=mCONFIG_FB_DEFERRED_IO=yCONFIG_FB_SVGALIB=y
# CONFIG_FB_MACMODES is not setCONFIG_FB_BACKLIGHT=yCONFIG_FB_MODE_HELPERS=yCONFIG_FB_TILEBLITTING=y
#
# Frame buffer hardware drivers
#
# CONFIG_FB_CIRRUS is not setCONFIG_FB_PM2=mCONFIG_FB_PM2_FIFO_DISCONNECT=yCONFIG_FB_CYBER2000=yCONFIG_FB_ARC=m
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_VGA16 is not set
# CONFIG_FB_UVESA is not set
# CONFIG_FB_VESA is not set
# CONFIG_FB_EFI is not setCONFIG_FB_HECUBA=m
# CONFIG_FB_HGA is not set
# CONFIG_FB_S1D13XXX is not setCONFIG_FB_NVIDIA=m
# CONFIG_FB_NVIDIA_I2C is not set
# CONFIG_FB_NVIDIA_DEBUG is not setCONFIG_FB_NVIDIA_BACKLIGHT=yCONFIG_FB_RIVA=m
# CONFIG_FB_RIVA_I2C is not setCONFIG_FB_RIVA_DEBUG=yCONFIG_FB_RIVA_BACKLIGHT=y
# CONFIG_FB_I810 is not set
# CONFIG_FB_LE80578 is not setCONFIG_FB_INTEL=mCONFIG_FB_INTEL_DEBUG=yCONFIG_FB_INTEL_I2C=yCONFIG_FB_MATROX=yCONFIG_FB_MATROX_MILLENIUM=y
# CONFIG_FB_MATROX_MYSTIQUE is not setCONFIG_FB_MATROX_G=yCONFIG_FB_MATROX_I2C=yCONFIG_FB_MATROX_MAVEN=yCONFIG_FB_MATROX_MULTIHEAD=y
# CONFIG_FB_RADEON is not setCONFIG_FB_ATY128=y
# CONFIG_FB_ATY128_BACKLIGHT is not set
# CONFIG_FB_ATY is not setCONFIG_FB_S3=yCONFIG_FB_SAVAGE=mCONFIG_FB_SAVAGE_I2C=yCONFIG_FB_SAVAGE_ACCEL=yCONFIG_FB_SIS=m
# CONFIG_FB_SIS_300 is not set
# CONFIG_FB_SIS_315 is not setCONFIG_FB_NEOMAGIC=mCONFIG_FB_KYRO=yCONFIG_FB_3DFX=m
# CONFIG_FB_3DFX_ACCEL is not setCONFIG_FB_VOODOO1=yCONFIG_FB_VT8623=y
# CONFIG_FB_CYBLA is not setCONFIG_FB_TRIDENT=m
# CONFIG_FB_TRIDENT_ACCEL is not setCONFIG_FB_ARK=mCONFIG_FB_PM3=yCONFIG_FB_GEODE=yCONFIG_FB_GEODE_LX=m
# CONFIG_FB_GEODE_GX is not setCONFIG_FB_GEODE_GX1=yCONFIG_FB_SM501=y
# CONFIG_FB_VIRTUAL is not setCONFIG_BACKLIGHT_LCD_SUPPORT=yCONFIG_LCD_CLASS_DEVICE=yCONFIG_BACKLIGHT_CLASS_DEVICE=yCONFIG_BACKLIGHT_CORGI=y
# CONFIG_BACKLIGHT_PROGEAR is not set
#
# Display device support
#CONFIG_DISPLAY_SUPPORT=y
#
# Display hardware drivers
#
#
# Console display driver support
#CONFIG_VGA_CONSOLE=y
# CONFIG_VGACON_SOFT_SCROLLBACK is not set
# CONFIG_VIDEO_SELECT is not set
# CONFIG_MDA_CONSOLE is not setCONFIG_DUMMY_CONSOLE=y
# CONFIG_FRAMEBUFFER_CONSOLE is not set
CONFIG_FONT_8x16=yCONFIG_LOGO=y
# CONFIG_LOGO_LINUX_MONO is not setCONFIG_LOGO_LINUX_VGA16=yCONFIG_LOGO_LINUX_CLUT224=y
#
# Sound
#CONFIG_SOUND=y
#
# Advanced Linux Sound Architecture
#
# CONFIG_SND is not set
#
# Open Sound System
#CONFIG_SOUND_PRIME=mCONFIG_SOUND_TRIDENT=m CONFIG_SOUND_MSNDCLAS=m CONFIG_MSNDCLAS_INIT_FILE="/etc/sound/msndinit.bin" CONFIG_MSNDCLAS_PERM_FILE="/etc/sound/msndperm.bin" # CONFIG_SOUND_MSNDPIN is not set
# CONFIG_SOUND_OSS is not set
# CONFIG_HID_SUPPORT is not set CONFIG_USB_SUPPORT=y CONFIG_USB_ARCH_HAS_HCD=y CONFIG_USB_ARCH_HAS_OHCI=y CONFIG_USB_ARCH_HAS_EHCI=yCONFIG_USB=y
# CONFIG_USB_DEBUG is not set
#
# Miscellaneous USB options
#
# CONFIG_USB_DEVICEFS is not setCONFIG_USB_DEVICE_CLASS=yCONFIG_USB_DYNAMIC_MINORS=y
# CONFIG_USB_OTG is not set
#
# USB Host Controller Drivers
#CONFIG_USB_EHCI_HCD=y
# CONFIG_USB_EHCI_SPLIT_ISO is not setCONFIG_USB_EHCI_ROOT_HUB_TT=yCONFIG_USB_EHCI_TT_NEWSCHED=yCONFIG_USB_ISP116X_HCD=yCONFIG_USB_OHCI_HCD=y
# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not setCONFIG_USB_OHCI_LITTLE_ENDIAN=yCONFIG_USB_UHCI_HCD=yCONFIG_USB_U132_HCD=m
# CONFIG_USB_SL811_HCD is not setCONFIG_USB_R8A66597_HCD=m
#
# 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=y # CONFIG_USB_STORAGE_DEBUG is not set CONFIG_USB_STORAGE_DATAFAB=y # CONFIG_USB_STORAGE_FREECOM is not set # CONFIG_USB_STORAGE_ISD200 is not set # CONFIG_USB_STORAGE_DPCM is not set CONFIG_USB_STORAGE_USBAT=y CONFIG_USB_STORAGE_SDDR09=y # CONFIG_USB_STORAGE_SDDR55 is not set # CONFIG_USB_STORAGE_JUMPSHOT is not set CONFIG_USB_STORAGE_ALAUDA=y # CONFIG_USB_STORAGE_ONETOUCH is not set CONFIG_USB_STORAGE_KARMA=y CONFIG_USB_LIBUSUAL=y
#
# USB Imaging devices
#
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_MICROTEK is not setCONFIG_USB_MON=y
#
# USB port drivers
#
#
# USB Serial Converter support
#CONFIG_USB_SERIAL=mCONFIG_USB_SERIAL_GENERIC=y
# CONFIG_USB_SERIAL_AIRCABLE is not setCONFIG_USB_SERIAL_AIRPRIME=m
# CONFIG_USB_SERIAL_ARK3116 is not set
# CONFIG_USB_SERIAL_BELKIN is not set
# CONFIG_USB_SERIAL_CH341 is not set
# CONFIG_USB_SERIAL_WHITEHEAT is not setCONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
# CONFIG_USB_SERIAL_CP2101 is not setCONFIG_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=m
# CONFIG_USB_SERIAL_IR is not setCONFIG_USB_SERIAL_EDGEPORT=m
# CONFIG_USB_SERIAL_EDGEPORT_TI is not setCONFIG_USB_SERIAL_GARMIN=mCONFIG_USB_SERIAL_IPW=m
# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
# CONFIG_USB_SERIAL_KEYSPAN is not setCONFIG_USB_SERIAL_KLSI=mCONFIG_USB_SERIAL_KOBIL_SCT=mCONFIG_USB_SERIAL_MCT_U232=mCONFIG_USB_SERIAL_MOS7720=m
# CONFIG_USB_SERIAL_MOS7840 is not set
# CONFIG_USB_SERIAL_NAVMAN is not set
# CONFIG_USB_SERIAL_PL2303 is not set
# CONFIG_USB_SERIAL_OTI6858 is not set
# CONFIG_USB_SERIAL_HP4X is not setCONFIG_USB_SERIAL_SAFE=m
# CONFIG_USB_SERIAL_SAFE_PADDED is not set
# CONFIG_USB_SERIAL_SIERRAWIRELESS is not setCONFIG_USB_SERIAL_TI=mCONFIG_USB_SERIAL_CYBERJACK=m
# CONFIG_USB_SERIAL_XIRCOM is not setCONFIG_USB_SERIAL_OPTION=m
# CONFIG_USB_SERIAL_OMNINET is not set
# CONFIG_USB_SERIAL_DEBUG is not set
#
# USB Miscellaneous drivers
#CONFIG_USB_EMI62=mCONFIG_USB_EMI26=y
# CONFIG_USB_ADUTUX is not setCONFIG_USB_AUERSWALD=mCONFIG_USB_RIO500=y
# CONFIG_USB_LEGOTOWER is not setCONFIG_USB_LCD=m
# CONFIG_USB_BERRY_CHARGE is not set
# CONFIG_USB_LED is not setCONFIG_USB_CYPRESS_CY7C63=yCONFIG_USB_CYTHERM=yCONFIG_USB_PHIDGET=yCONFIG_USB_PHIDGETKIT=m
# CONFIG_USB_PHIDGETMOTORCONTROL is not setCONFIG_USB_PHIDGETSERVO=y
# CONFIG_USB_IDMOUSE is not setCONFIG_USB_FTDI_ELAN=yCONFIG_USB_APPLEDISPLAY=yCONFIG_USB_SISUSBVGA=mCONFIG_USB_SISUSBVGA_CON=yCONFIG_USB_LD=yCONFIG_USB_TRANCEVIBRATOR=m
# CONFIG_USB_IOWARRIOR is not set
#
# USB DSL modem support
#
# CONFIG_USB_ATM is not set
#
# USB Gadget Support
#
# CONFIG_USB_GADGET is not setCONFIG_MMC=mCONFIG_MMC_DEBUG=y
# 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 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=y
# CONFIG_LEDS_TRIGGER_TIMER is not setCONFIG_LEDS_TRIGGER_HEARTBEAT=mCONFIG_INFINIBAND=m
# CONFIG_INFINIBAND_USER_MAD is not setCONFIG_INFINIBAND_USER_ACCESS=mCONFIG_INFINIBAND_USER_MEM=yCONFIG_INFINIBAND_ADDR_TRANS=y
# CONFIG_INFINIBAND_MTHCA is not setCONFIG_INFINIBAND_AMSO1100=mCONFIG_INFINIBAND_AMSO1100_DEBUG=yCONFIG_INFINIBAND_CXGB3=m
# CONFIG_INFINIBAND_CXGB3_DEBUG is not setCONFIG_MLX4_INFINIBAND=mCONFIG_INFINIBAND_IPOIB=mCONFIG_INFINIBAND_IPOIB_CM=y
# CONFIG_INFINIBAND_IPOIB_DEBUG is not set
# CONFIG_INFINIBAND_SRP is not setCONFIG_INFINIBAND_ISER=mCONFIG_EDAC=y
#
# Reporting subsystems
#CONFIG_EDAC_DEBUG=yCONFIG_EDAC_MM_EDAC=yCONFIG_EDAC_AMD76X=mCONFIG_EDAC_E7XXX=m
# CONFIG_EDAC_E752X is not setCONFIG_EDAC_I82875P=yCONFIG_EDAC_I82975X=mCONFIG_EDAC_I3000=mCONFIG_EDAC_I82860=y
# CONFIG_EDAC_R82600 is not setCONFIG_EDAC_I5000=mCONFIG_RTC_LIB=mCONFIG_RTC_CLASS=m
#
# RTC interfaces
#CONFIG_RTC_INTF_SYSFS=y
# CONFIG_RTC_INTF_PROC is not setCONFIG_RTC_INTF_DEV=y
# CONFIG_RTC_INTF_DEV_UIE_EMUL is not setCONFIG_RTC_DRV_TEST=m
#
# I2C RTC drivers
#CONFIG_RTC_DRV_DS1307=mCONFIG_RTC_DRV_DS1374=mCONFIG_RTC_DRV_DS1672=mCONFIG_RTC_DRV_MAX6900=mCONFIG_RTC_DRV_RS5C372=mCONFIG_RTC_DRV_ISL1208=mCONFIG_RTC_DRV_X1205=m
# CONFIG_RTC_DRV_PCF8563 is not setCONFIG_RTC_DRV_PCF8583=m
# CONFIG_RTC_DRV_M41T80 is not set
#
# SPI RTC drivers
#
#
# Platform RTC drivers
#
# CONFIG_RTC_DRV_CMOS is not setCONFIG_RTC_DRV_DS1553=mCONFIG_RTC_DRV_STK17TA8=mCONFIG_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 setCONFIG_VIRTUALIZATION=yCONFIG_KVM=y
# CONFIG_KVM_INTEL is not setCONFIG_KVM_AMD=mCONFIG_LGUEST=m
#
# Userspace I/O
#CONFIG_UIO=yCONFIG_UIO_CIF=mCONFIG_VIRTIO=yCONFIG_VIRTIO_RING=y
#
# Firmware Drivers
#CONFIG_EDD=yCONFIG_DELL_RBU=m
# CONFIG_DCDBAS is not set
# CONFIG_DMIID 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=yCONFIG_EXT4DEV_FS=m
# CONFIG_EXT4DEV_FS_XATTR is not setCONFIG_JBD=yCONFIG_JBD_DEBUG=yCONFIG_JBD2=m
# CONFIG_JBD2_DEBUG is not setCONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not setCONFIG_JFS_FS=m
# CONFIG_JFS_POSIX_ACL is not set
# CONFIG_JFS_SECURITY is not setCONFIG_JFS_DEBUG=yCONFIG_JFS_STATISTICS=yCONFIG_FS_POSIX_ACL=yCONFIG_XFS_FS=y
# CONFIG_XFS_QUOTA is not setCONFIG_XFS_SECURITY=yCONFIG_XFS_POSIX_ACL=y
# CONFIG_XFS_RT is not setCONFIG_GFS2_FS=yCONFIG_GFS2_FS_LOCKING_NOLOCK=yCONFIG_GFS2_FS_LOCKING_DLM=m
# CONFIG_OCFS2_FS is not setCONFIG_MINIX_FS=mCONFIG_ROMFS_FS=mCONFIG_INOTIFY=y
# CONFIG_INOTIFY_USER is not setCONFIG_QUOTA=y
# CONFIG_QUOTA_NETLINK_INTERFACE is not set
# CONFIG_PRINT_QUOTA_WARNING is not set
# CONFIG_QFMT_V1 is not setCONFIG_QFMT_V2=yCONFIG_QUOTACTL=yCONFIG_DNOTIFY=yCONFIG_AUTOFS_FS=yCONFIG_AUTOFS4_FS=yCONFIG_FUSE_FS=m
#
# CD-ROM/DVD Filesystems
#CONFIG_ISO9660_FS=mCONFIG_JOLIET=y
# CONFIG_ZISOFS is not setCONFIG_UDF_FS=mCONFIG_UDF_NLS=y
#
# DOS/FAT/NT Filesystems
#CONFIG_FAT_FS=yCONFIG_MSDOS_FS=yCONFIG_VFAT_FS=yCONFIG_FAT_DEFAULT_CODEPAGE=437CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"CONFIG_NTFS_FS=mCONFIG_NTFS_DEBUG=yCONFIG_NTFS_RW=y
#
# Pseudo filesystems
#CONFIG_PROC_FS=y
# CONFIG_PROC_KCORE is not setCONFIG_PROC_VMCORE=y
# CONFIG_PROC_SYSCTL is not setCONFIG_SYSFS=y
# CONFIG_TMPFS is not set
# CONFIG_HUGETLBFS is not set
# CONFIG_HUGETLB_PAGE is not setCONFIG_CONFIGFS_FS=y
#
# Miscellaneous filesystems
#CONFIG_ADFS_FS=yCONFIG_ADFS_FS_RW=yCONFIG_AFFS_FS=mCONFIG_ECRYPT_FS=m
# CONFIG_HFS_FS is not setCONFIG_HFSPLUS_FS=yCONFIG_BEFS_FS=mCONFIG_BEFS_DEBUG=yCONFIG_BFS_FS=mCONFIG_EFS_FS=y
# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not setCONFIG_HPFS_FS=mCONFIG_QNX4FS_FS=y
# CONFIG_SYSV_FS is not setCONFIG_UFS_FS=y
# CONFIG_UFS_FS_WRITE is not set
# CONFIG_UFS_DEBUG is not setCONFIG_NETWORK_FILESYSTEMS=y
# CONFIG_NFS_FS is not setCONFIG_NFSD=mCONFIG_NFSD_V3=y
# CONFIG_NFSD_V3_ACL is not setCONFIG_NFSD_V4=yCONFIG_NFSD_TCP=yCONFIG_LOCKD=mCONFIG_LOCKD_V4=yCONFIG_EXPORTFS=mCONFIG_NFS_COMMON=yCONFIG_SUNRPC=mCONFIG_SUNRPC_GSS=m
# CONFIG_SUNRPC_XPRT_RDMA is not set
# CONFIG_SUNRPC_BIND34 is not setCONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPCSEC_GSS_SPKM3 is not setCONFIG_SMB_FS=y
# CONFIG_SMB_NLS_DEFAULT is not set
# CONFIG_CIFS is not setCONFIG_NCP_FS=mCONFIG_NCPFS_PACKET_SIGNING=y
# CONFIG_NCPFS_IOCTL_LOCKING is not set
# CONFIG_NCPFS_STRONG is not setCONFIG_NCPFS_NFS_NS=yCONFIG_NCPFS_OS2_NS=y
# CONFIG_NCPFS_SMALLDOS is not set
# CONFIG_NCPFS_NLS is not set
# CONFIG_NCPFS_EXTRAS is not setCONFIG_CODA_FS=y
# CONFIG_CODA_FS_OLD_API is not setCONFIG_AFS_FS=y
# CONFIG_AFS_DEBUG is not set
# CONFIG_9P_FS is not set
#
# Partition Types
#CONFIG_PARTITION_ADVANCED=y
# CONFIG_ACORN_PARTITION is not set
# CONFIG_OSF_PARTITION is not setCONFIG_AMIGA_PARTITION=y
# CONFIG_ATARI_PARTITION is not set
# CONFIG_MAC_PARTITION is not setCONFIG_MSDOS_PARTITION=yCONFIG_BSD_DISKLABEL=yCONFIG_MINIX_SUBPARTITION=yCONFIG_SOLARIS_X86_PARTITION=yCONFIG_UNIXWARE_DISKLABEL=yCONFIG_LDM_PARTITION=yCONFIG_LDM_DEBUG=yCONFIG_SGI_PARTITION=yCONFIG_ULTRIX_PARTITION=yCONFIG_SUN_PARTITION=yCONFIG_KARMA_PARTITION=yCONFIG_EFI_PARTITION=y
# CONFIG_SYSV68_PARTITION is not setCONFIG_NLS=yCONFIG_NLS_DEFAULT="iso8859-1"
# CONFIG_NLS_CODEPAGE_437 is not setCONFIG_NLS_CODEPAGE_737=y
# CONFIG_NLS_CODEPAGE_775 is not setCONFIG_NLS_CODEPAGE_850=yCONFIG_NLS_CODEPAGE_852=y
# CONFIG_NLS_CODEPAGE_855 is not set
# CONFIG_NLS_CODEPAGE_857 is not set
# CONFIG_NLS_CODEPAGE_860 is not setCONFIG_NLS_CODEPAGE_861=m
# CONFIG_NLS_CODEPAGE_862 is not setCONFIG_NLS_CODEPAGE_863=y
# CONFIG_NLS_CODEPAGE_864 is not setCONFIG_NLS_CODEPAGE_865=mCONFIG_NLS_CODEPAGE_866=mCONFIG_NLS_CODEPAGE_869=yCONFIG_NLS_CODEPAGE_936=yCONFIG_NLS_CODEPAGE_950=mCONFIG_NLS_CODEPAGE_932=mCONFIG_NLS_CODEPAGE_949=m
# CONFIG_NLS_CODEPAGE_874 is not set
# CONFIG_NLS_ISO8859_8 is not setCONFIG_NLS_CODEPAGE_1250=mCONFIG_NLS_CODEPAGE_1251=y
# CONFIG_NLS_ASCII is not setCONFIG_NLS_ISO8859_1=yCONFIG_NLS_ISO8859_2=m
# CONFIG_NLS_ISO8859_3 is not setCONFIG_NLS_ISO8859_4=y
# CONFIG_NLS_ISO8859_5 is not setCONFIG_NLS_ISO8859_6=m
# CONFIG_NLS_ISO8859_7 is not set
# CONFIG_NLS_ISO8859_9 is not setCONFIG_NLS_ISO8859_13=mCONFIG_NLS_ISO8859_14=m
# CONFIG_NLS_ISO8859_15 is not set
# CONFIG_NLS_KOI8_R is not setCONFIG_NLS_KOI8_U=yCONFIG_NLS_UTF8=yCONFIG_DLM=m
# CONFIG_DLM_DEBUG is not setCONFIG_INSTRUMENTATION=y
# CONFIG_PROFILING is not set
# CONFIG_MARKERS is not set
#
# Kernel hacking
#CONFIG_TRACE_IRQFLAGS_SUPPORT=y
# CONFIG_PRINTK_TIME is not setCONFIG_ENABLE_WARN_DEPRECATED=y
# CONFIG_ENABLE_MUST_CHECK is not setCONFIG_MAGIC_SYSRQ=y
# CONFIG_UNUSED_SYMBOLS is not setCONFIG_DEBUG_FS=y
# CONFIG_HEADERS_CHECK is not set
# CONFIG_DEBUG_KERNEL is not setCONFIG_PROVIDE_OHCI1394_DMA_INIT=y
# CONFIG_SAMPLES is not setCONFIG_EARLY_PRINTK=yCONFIG_X86_FIND_SMP_CONFIG=yCONFIG_X86_MPPARSE=yCONFIG_DOUBLEFAULT=yCONFIG_IO_DELAY_TYPE_0X80=0CONFIG_IO_DELAY_TYPE_0XED=1CONFIG_IO_DELAY_TYPE_UDELAY=2CONFIG_IO_DELAY_TYPE_NONE=3CONFIG_IO_DELAY_0X80=y
# CONFIG_IO_DELAY_0XED is not set
# CONFIG_IO_DELAY_UDELAY is not set
# CONFIG_IO_DELAY_NONE is not setCONFIG_DEFAULT_IO_DELAY_TYPE=0
#
# Security options
#CONFIG_KEYS=yCONFIG_KEYS_DEBUG_PROC_KEYS=yCONFIG_SECURITY=y
# CONFIG_SECURITY_NETWORK is not setCONFIG_SECURITY_CAPABILITIES=yCONFIG_SECURITY_FILE_CAPABILITIES=y
# CONFIG_SECURITY_ROOTPLUG is not setCONFIG_CRYPTO=yCONFIG_CRYPTO_ALGAPI=yCONFIG_CRYPTO_AEAD=yCONFIG_CRYPTO_BLKCIPHER=yCONFIG_CRYPTO_HASH=yCONFIG_CRYPTO_MANAGER=yCONFIG_CRYPTO_HMAC=yCONFIG_CRYPTO_XCBC=mCONFIG_CRYPTO_NULL=y
# CONFIG_CRYPTO_MD4 is not setCONFIG_CRYPTO_MD5=yCONFIG_CRYPTO_SHA1=yCONFIG_CRYPTO_SHA256=y
# CONFIG_CRYPTO_SHA512 is not set
# CONFIG_CRYPTO_WP512 is not set
# CONFIG_CRYPTO_TGR192 is not setCONFIG_CRYPTO_GF128MUL=mCONFIG_CRYPTO_ECB=yCONFIG_CRYPTO_CBC=yCONFIG_CRYPTO_PCBC=y
# CONFIG_CRYPTO_LRW is not setCONFIG_CRYPTO_XTS=m
# CONFIG_CRYPTO_CRYPTD is not setCONFIG_CRYPTO_DES=yCONFIG_CRYPTO_FCRYPT=y
# CONFIG_CRYPTO_BLOWFISH is not setCONFIG_CRYPTO_TWOFISH=yCONFIG_CRYPTO_TWOFISH_COMMON=y
# CONFIG_CRYPTO_TWOFISH_586 is not setCONFIG_CRYPTO_SERPENT=mCONFIG_CRYPTO_AES=y
# CONFIG_CRYPTO_AES_586 is not set
# CONFIG_CRYPTO_CAST5 is not setCONFIG_CRYPTO_CAST6=yCONFIG_CRYPTO_TEA=mCONFIG_CRYPTO_ARC4=yCONFIG_CRYPTO_KHAZAD=mCONFIG_CRYPTO_ANUBIS=yCONFIG_CRYPTO_SEED=mCONFIG_CRYPTO_DEFLATE=y
# CONFIG_CRYPTO_MICHAEL_MIC is not set
# CONFIG_CRYPTO_CRC32C is not set
# CONFIG_CRYPTO_CAMELLIA is not set
# CONFIG_CRYPTO_TEST is not setCONFIG_CRYPTO_AUTHENC=y
# CONFIG_CRYPTO_HW is not set
#
# Library routines
#CONFIG_BITREVERSE=yCONFIG_CRC_CCITT=mCONFIG_CRC16=yCONFIG_CRC_ITU_T=yCONFIG_CRC32=y
# CONFIG_CRC7 is not setCONFIG_LIBCRC32C=mCONFIG_ZLIB_INFLATE=yCONFIG_ZLIB_DEFLATE=yCONFIG_GENERIC_ALLOCATOR=yCONFIG_TEXTSEARCH=yCONFIG_TEXTSEARCH_KMP=mCONFIG_TEXTSEARCH_BM=mCONFIG_TEXTSEARCH_FSM=mCONFIG_PLIST=yCONFIG_HAS_IOMEM=yCONFIG_HAS_IOPORT=yCONFIG_HAS_DMA=y
_______________________________________________
Virtualization mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/virtualization
Re: [PATCH 13/15] move patching code to arch-specific file.
Quoted 11 lines · Ingo Molnar
this patch adds the paravirt_patch_32.o:
arch/x86/kernel/Makefile_32 line 51
Quoted 2 lines
arch/x86/kernel/Makefile_32 +1
-1-obj-$(CONFIG_PARAVIRT) += paravirt.o +obj-$(CONFIG_PARAVIRT) += paravirt.o paravirt_patch_32.obut does not add that file nor any other rule to build that target, so it fails to build with the attached config:
make[1]: *** No rule to make target
`arch/x86/kernel/paravirt_patch_32.o', needed by
`arch/x86/kernel/built-in.o'. Stop.
if it's just that single missing file then please send me a patch that adds that file and i'll add it to this patch. (instead of resending the whole series)
Ingo
Re: [PATCH 13/15] move patching code to arch-specific file.
In reply to Ingo MolnarQuoted 11 lines · Ingo Molnar
this patch adds the paravirt_patch_32.o:
arch/x86/kernel/Makefile_32 line 51
Quoted 2 lines
arch/x86/kernel/Makefile_32 +1
-1-obj-$(CONFIG_PARAVIRT) += paravirt.o +obj-$(CONFIG_PARAVIRT) += paravirt.o paravirt_patch_32.obut does not add that file nor any other rule to build that target, so it fails to build with the attached config:
make[1]: *** No rule to make target
`arch/x86/kernel/paravirt_patch_32.o', needed by
`arch/x86/kernel/built-in.o'. Stop.
if it's just that single missing file then please send me a patch that adds that file and i'll add it to this patch. (instead of resending the whole series)
Ingo
Re: [PATCH 13/15] move patching code to arch-specific file.
Quoted 11 lines · Ingo Molnar
Quoted 8 lines · Ingo Molnar
this patch adds the paravirt_patch_32.o:
Review
Quoted 2 lines
(quoted diff) +1
-1-obj-$(CONFIG_PARAVIRT) += paravirt.o +obj-$(CONFIG_PARAVIRT) += paravirt.o paravirt_patch_32.obut does not add that file nor any other rule to build that target, so it fails to build with the attached config:
Quoted 7 lines
Quoted 3 lines
make[1]: *** No rule to make target
`arch/x86/kernel/paravirt_patch_32.o', needed by
`arch/x86/kernel/built-in.o'. Stop.if it's just that single missing file then please send me a patch that adds that file and i'll add it to this patch. (instead of resending the whole series)
Yeah, I must have forgotten to git-add it.
It was building here fine, because I clearly have the file locally ;-)
I'm attaching a new patch that replaces just this one.
Signature · 5 lines
Glauber de Oliveira Costa. "Free as in Freedom" http://glommer.net "The less confident you are, the more serious you have to act."
From 9a9307e976391776c0d63e3640d90738e20e9ee9 Mon Sep 17 00:00:00 2001
From: Glauber de Oliveira Costa <[email protected]>
Date: Tue, 18 Dec 2007 16:47:35 -0200
Subject: [PATCH] [PATCH] move patching code to arch-specific file.
The core patching code for paravirt is sufficiently different among i386 and x86_64, and we move them to specific files.
--- arch/x86/kernel/Makefile_32 | 2 +- arch/x86/kernel/paravirt.c | 50 ----------------------------------- arch/x86/kernel/paravirt_patch_32.c | 49 ++++++++++++++++++++++++++++++++++ include/asm-x86/paravirt.h | 8 +++++ 4 files changed, 58 insertions(+), 51 deletions(-) create mode 100644 arch/x86/kernel/paravirt_patch_32.c
arch/x86/kernel/Makefile_32 +1 -1
@@ -48,7 +48,7 @@ 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.o +obj-$(CONFIG_PARAVIRT) += paravirt.o paravirt_patch_32.o obj-y += pcspeaker.o obj-$(CONFIG_SCx200) += scx200_32.o
arch/x86/kernel/paravirt.c +0 -50
59 lines not on this page · raw message
arch/x86/kernel/paravirt_patch_32.c new file +49 -0
49 lines not on this page · raw message
include/asm-x86/paravirt.h +8 -0
@@ -308,6 +308,11 @@ extern struct pv_mmu_ops pv_mmu_ops;#define paravirt_alt (insn_string) \ _paravirt_alt(insn_string, "%c[paravirt_typenum]", "%c[paravirt_clobber]") +/* Simple instruction patching code. */ +#define DEF_NATIVE (ops, name, code) \ + extern const char start_##ops##_##name[], end_##ops##_##name[]; \ + asm("start_" #ops "_" #name ": " code "; end_" #ops "_" #name ":") +unsigned paravirt_patch_nop (void );unsigned paravirt_patch_ignore (unsigned len); unsigned paravirt_patch_call(void *insnbuf,
@@ -322,6 +327,9 @@ unsigned paravirt_patch_default(u8 type, u16 clobbers, void *insnbuf,unsigned paravirt_patch_insns (void *insnbuf,unsigned len,const char *start,const char *end); +unsigned native_patch (u8 type,u16 clobbers,void *ibuf, +unsigned long addr,unsigned len); +int paravirt_disable_iospace (void );/*
Signature · 1 line
1.5.0.6
_______________________________________________
Virtualization mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/virtualization
Re: [PATCH 13/15] move patching code to arch-specific file.
In reply to Ingo MolnarQuoted 11 lines · Ingo Molnar
Quoted 8 lines · Ingo Molnar
this patch adds the paravirt_patch_32.o:
Review
Quoted 2 lines
(quoted diff) +1
-1-obj-$(CONFIG_PARAVIRT) += paravirt.o +obj-$(CONFIG_PARAVIRT) += paravirt.o paravirt_patch_32.obut does not add that file nor any other rule to build that target, so it fails to build with the attached config:
Quoted 7 lines
Quoted 3 lines
make[1]: *** No rule to make target
`arch/x86/kernel/paravirt_patch_32.o', needed by
`arch/x86/kernel/built-in.o'. Stop.if it's just that single missing file then please send me a patch that adds that file and i'll add it to this patch. (instead of resending the whole series)
Yeah, I must have forgotten to git-add it.
It was building here fine, because I clearly have the file locally ;-)
I'm attaching a new patch that replaces just this one.
Signature · 5 lines
Glauber de Oliveira Costa. "Free as in Freedom" http://glommer.net "The less confident you are, the more serious you have to act."
From 9a9307e976391776c0d63e3640d90738e20e9ee9 Mon Sep 17 00:00:00 2001
From: Glauber de Oliveira Costa <[email protected]>
Date: Tue, 18 Dec 2007 16:47:35 -0200
Subject: [PATCH] [PATCH] move patching code to arch-specific file.
The core patching code for paravirt is sufficiently different among i386 and x86_64, and we move them to specific files.
--- arch/x86/kernel/Makefile_32 | 2 +- arch/x86/kernel/paravirt.c | 50 ----------------------------------- arch/x86/kernel/paravirt_patch_32.c | 49 ++++++++++++++++++++++++++++++++++ include/asm-x86/paravirt.h | 8 +++++ 4 files changed, 58 insertions(+), 51 deletions(-) create mode 100644 arch/x86/kernel/paravirt_patch_32.c
arch/x86/kernel/Makefile_32 +1 -1
@@ -48,7 +48,7 @@ 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.o +obj-$(CONFIG_PARAVIRT) += paravirt.o paravirt_patch_32.o obj-y += pcspeaker.o obj-$(CONFIG_SCx200) += scx200_32.o
arch/x86/kernel/paravirt.c +0 -50
59 lines not on this page · raw message
arch/x86/kernel/paravirt_patch_32.c new file +49 -0
49 lines not on this page · raw message
include/asm-x86/paravirt.h +8 -0
@@ -308,6 +308,11 @@ extern struct pv_mmu_ops pv_mmu_ops;#define paravirt_alt (insn_string) \ _paravirt_alt(insn_string, "%c[paravirt_typenum]", "%c[paravirt_clobber]") +/* Simple instruction patching code. */ +#define DEF_NATIVE (ops, name, code) \ + extern const char start_##ops##_##name[], end_##ops##_##name[]; \ + asm("start_" #ops "_" #name ": " code "; end_" #ops "_" #name ":") +unsigned paravirt_patch_nop (void );unsigned paravirt_patch_ignore (unsigned len); unsigned paravirt_patch_call(void *insnbuf,
@@ -322,6 +327,9 @@ unsigned paravirt_patch_default(u8 type, u16 clobbers, void *insnbuf,unsigned paravirt_patch_insns (void *insnbuf,unsigned len,const char *start,const char *end); +unsigned native_patch (u8 type,u16 clobbers,void *ibuf, +unsigned long addr,unsigned len); +int paravirt_disable_iospace (void );/*
Signature · 1 line
1.5.0.6
Re: [PATCH 13/15] move patching code to arch-specific file.
Quoted 4 lines · Glauber de Oliveira Costa
Quoted 4 lines
Quoted 3 lines
make[1]: *** No rule to make target
`arch/x86/kernel/paravirt_patch_32.o', needed by
`arch/x86/kernel/built-in.o'. Stop.
Quoted 8 lines
Quoted 3 lines
if it's just that single missing file then please send me a patch that adds that file and i'll add it to this patch. (instead of resending the whole series)
Yeah, I must have forgotten to git-add it. It was building here fine, because I clearly have the file locally ;-)
I'm attaching a new patch that replaces just this one.
thanks, this did the trick, it builds fine now.
Ingo
Re: [PATCH 13/15] move patching code to arch-specific file.
In reply to Glauber de Oliveira CostaQuoted 4 lines · Glauber de Oliveira Costa
Quoted 4 lines
Quoted 3 lines
make[1]: *** No rule to make target
`arch/x86/kernel/paravirt_patch_32.o', needed by
`arch/x86/kernel/built-in.o'. Stop.
Quoted 8 lines
Quoted 3 lines
if it's just that single missing file then please send me a patch that adds that file and i'll add it to this patch. (instead of resending the whole series)
Yeah, I must have forgotten to git-add it. It was building here fine, because I clearly have the file locally ;-)
I'm attaching a new patch that replaces just this one.
thanks, this did the trick, it builds fine now.
Ingo