Patches contributed by Eötvös Lorand University


commit f3b6eaf0149186ad0637512ec363582c91e06ee6
Author: Ingo Molnar <mingo@elte.hu>
Date:   Thu Mar 12 12:20:17 2009 +0100

    x86: memcpy, clean up
    
    Impact: cleanup
    
    Make this file more readable by bringing it more in line
    with the usual kernel style.
    
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

diff --git a/arch/x86/lib/memcpy_64.S b/arch/x86/lib/memcpy_64.S
index 10c067694af4..ad5441ed1b57 100644
--- a/arch/x86/lib/memcpy_64.S
+++ b/arch/x86/lib/memcpy_64.S
@@ -1,30 +1,38 @@
 /* Copyright 2002 Andi Kleen */
 
 #include <linux/linkage.h>
-#include <asm/dwarf2.h>
+
 #include <asm/cpufeature.h>
+#include <asm/dwarf2.h>
 
 /*
  * memcpy - Copy a memory block.
  *
- * Input:	
- * rdi destination
- * rsi source
- * rdx count
- * 
+ * Input:
+ *  rdi destination
+ *  rsi source
+ *  rdx count
+ *
  * Output:
  * rax original destination
- */	
+ */
 
+/*
+ * memcpy_c() - fast string ops (REP MOVSQ) based variant.
+ *
+ * Calls to this get patched into the kernel image via the
+ * alternative instructions framework:
+ */
 	ALIGN
 memcpy_c:
 	CFI_STARTPROC
-	movq %rdi,%rax
-	movl %edx,%ecx
-	shrl $3,%ecx
-	andl $7,%edx
+	movq %rdi, %rax
+
+	movl %edx, %ecx
+	shrl $3, %ecx
+	andl $7, %edx
 	rep movsq
-	movl %edx,%ecx
+	movl %edx, %ecx
 	rep movsb
 	ret
 	CFI_ENDPROC
@@ -33,92 +41,110 @@ ENDPROC(memcpy_c)
 ENTRY(__memcpy)
 ENTRY(memcpy)
 	CFI_STARTPROC
-	movq %rdi,%rax
 
-	movl %edx,%ecx
-	shrl $6,%ecx
+	/*
+	 * Put the number of full 64-byte blocks into %ecx.
+	 * Tail portion is handled at the end:
+	 */
+	movq %rdi, %rax
+	movl %edx, %ecx
+	shrl   $6, %ecx
 	jz .Lhandle_tail
 
 	.p2align 4
 .Lloop_64:
+	/*
+	 * We decrement the loop index here - and the zero-flag is
+	 * checked at the end of the loop (instructions inbetween do
+	 * not change the zero flag):
+	 */
 	decl %ecx
 
-	movq (%rsi),%r11
-	movq 8(%rsi),%r8
+	/*
+	 * Move in blocks of 4x16 bytes:
+	 */
+	movq 0*8(%rsi),		%r11
+	movq 1*8(%rsi),		%r8
+	movq %r11,		0*8(%rdi)
+	movq %r8,		1*8(%rdi)
 
-	movq %r11,(%rdi)
-	movq %r8,1*8(%rdi)
+	movq 2*8(%rsi),		%r9
+	movq 3*8(%rsi),		%r10
+	movq %r9,		2*8(%rdi)
+	movq %r10,		3*8(%rdi)
 
-	movq 2*8(%rsi),%r9
-	movq 3*8(%rsi),%r10
+	movq 4*8(%rsi),		%r11
+	movq 5*8(%rsi),		%r8
+	movq %r11,		4*8(%rdi)
+	movq %r8,		5*8(%rdi)
 
-	movq %r9,2*8(%rdi)
-	movq %r10,3*8(%rdi)
+	movq 6*8(%rsi),		%r9
+	movq 7*8(%rsi),		%r10
+	movq %r9,		6*8(%rdi)
+	movq %r10,		7*8(%rdi)
 
-	movq 4*8(%rsi),%r11
-	movq 5*8(%rsi),%r8
+	leaq 64(%rsi), %rsi
+	leaq 64(%rdi), %rdi
 
-	movq %r11,4*8(%rdi)
-	movq %r8,5*8(%rdi)
-
-	movq 6*8(%rsi),%r9
-	movq 7*8(%rsi),%r10
-
-	movq %r9,6*8(%rdi)
-	movq %r10,7*8(%rdi)
-
-	leaq 64(%rsi),%rsi
-	leaq 64(%rdi),%rdi
 	jnz  .Lloop_64
 
 .Lhandle_tail:
-	movl %edx,%ecx
-	andl $63,%ecx
-	shrl $3,%ecx
+	movl %edx, %ecx
+	andl  $63, %ecx
+	shrl   $3, %ecx
 	jz   .Lhandle_7
+
 	.p2align 4
 .Lloop_8:
 	decl %ecx
-	movq (%rsi),%r8
-	movq %r8,(%rdi)
-	leaq 8(%rdi),%rdi
-	leaq 8(%rsi),%rsi
+	movq (%rsi),		%r8
+	movq %r8,		(%rdi)
+	leaq 8(%rdi),		%rdi
+	leaq 8(%rsi),		%rsi
 	jnz  .Lloop_8
 
 .Lhandle_7:
-	movl %edx,%ecx
-	andl $7,%ecx
-	jz .Lende
+	movl %edx, %ecx
+	andl $7, %ecx
+	jz .Lend
+
 	.p2align 4
 .Lloop_1:
-	movb (%rsi),%r8b
-	movb %r8b,(%rdi)
+	movb (%rsi), %r8b
+	movb %r8b, (%rdi)
 	incq %rdi
 	incq %rsi
 	decl %ecx
 	jnz .Lloop_1
 
-.Lende:
+.Lend:
 	ret
 	CFI_ENDPROC
 ENDPROC(memcpy)
 ENDPROC(__memcpy)
 
-	/* Some CPUs run faster using the string copy instructions.
-	   It is also a lot simpler. Use this when possible */
+	/*
+	 * Some CPUs run faster using the string copy instructions.
+	 * It is also a lot simpler. Use this when possible:
+	 */
 
-	.section .altinstr_replacement,"ax"
+	.section .altinstr_replacement, "ax"
 1:	.byte 0xeb				/* jmp <disp8> */
 	.byte (memcpy_c - memcpy) - (2f - 1b)	/* offset */
 2:
 	.previous
-	.section .altinstructions,"a"
+
+	.section .altinstructions, "a"
 	.align 8
 	.quad memcpy
 	.quad 1b
 	.byte X86_FEATURE_REP_GOOD
-	/* Replace only beginning, memcpy is used to apply alternatives, so it
-	 * is silly to overwrite itself with nops - reboot is only outcome... */
+
+	/*
+	 * Replace only beginning, memcpy is used to apply alternatives,
+	 * so it is silly to overwrite itself with nops - reboot is the
+	 * only outcome...
+	 */
 	.byte 2b - 1b
 	.byte 2b - 1b
 	.previous

commit a98fe7f3425c6b4e90de16f8da63b0429a8fed08
Merge: bb7f5f6c26d0 8229d754383e 12074fa10730 5e47c478b0b6 afcfe024aebd
Author: Ingo Molnar <mingo@elte.hu>
Date:   Thu Mar 12 11:50:15 2009 +0100

    Merge branches 'x86/asm', 'x86/debug', 'x86/mm', 'x86/setup', 'x86/urgent' and 'linus' into x86/core

diff --cc arch/x86/Kconfig
index 87717f3687d2,03f0a3aa43b1,87717f3687d2,87717f3687d2,bc2fbadff9f9..7fcf85182681
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@@@@@ -1431,8 -1437,8 -1431,8 -1431,8 -1400,8 +1437,8 @@@@@@ config CRASH_DUM
     config KEXEC_JUMP
     	bool "kexec jump (EXPERIMENTAL)"
     	depends on EXPERIMENTAL
 -  -	depends on KEXEC && HIBERNATION && X86_32
    -	help
 +  +	depends on KEXEC && HIBERNATION
    +	---help---
     	  Jump between original kernel and kexeced kernel and invoke
     	  code in physical address mode via KEXEC
     

commit aecfcde920da8d32949f6cbbc1fc051b4ef9e7be
Merge: e2b8b2808538 80370cb758e7
Author: Ingo Molnar <mingo@elte.hu>
Date:   Wed Mar 11 20:47:23 2009 +0100

    Merge branch 'tip/tracing/ftrace' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace into tracing/ftrace

commit 211b3d03c7400f48a781977a50104c9d12f4e229
Author: Ingo Molnar <mingo@elte.hu>
Date:   Tue Mar 10 22:31:03 2009 +0100

    x86: work around Fedora-11 x86-32 kernel failures on Intel Atom CPUs
    
    Impact: work around boot crash
    
    Work around Intel Atom erratum AAH41 (probabilistically) - it's triggering
    in the field.
    
    Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
    Tested-by: Kyle McMartin <kyle@redhat.com>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c
index 7be47d1a97e4..7233bd7e357b 100644
--- a/arch/x86/mm/pageattr.c
+++ b/arch/x86/mm/pageattr.c
@@ -515,6 +515,17 @@ static int split_large_page(pte_t *kpte, unsigned long address)
 	 * primary protection behavior:
 	 */
 	__set_pmd_pte(kpte, address, mk_pte(base, __pgprot(_KERNPG_TABLE)));
+
+	/*
+	 * Intel Atom errata AAH41 workaround.
+	 *
+	 * The real fix should be in hw or in a microcode update, but
+	 * we also probabilistically try to reduce the window of having
+	 * a large TLB mixed with 4K TLBs while instruction fetches are
+	 * going on.
+	 */
+	__flush_tlb_all();
+
 	base = NULL;
 
 out_unlock:

commit d95c3578120e5bc4784069439f00ccb1b5f87717
Merge: ba1d755a36f6 78b020d03507
Author: Ingo Molnar <mingo@elte.hu>
Date:   Wed Mar 11 10:49:34 2009 +0100

    Merge branch 'x86/core' into cpus4096

commit 78b020d035074fc3aa4d017353bb2c32e2aff56f
Merge: bf5172d07ac3 fee7b0d84cc8 5490fa96735c 16b71fdf9759
Author: Ingo Molnar <mingo@elte.hu>
Date:   Wed Mar 11 10:49:15 2009 +0100

    Merge branches 'x86/cleanups', 'x86/kexec', 'x86/mce2' and 'linus' into x86/core

commit 65a37b29a8d7492f081d4f8da2227467af1c0c1d
Merge: 1d8ce7bc4d05 60db56422043
Author: Ingo Molnar <mingo@elte.hu>
Date:   Wed Mar 11 10:30:23 2009 +0100

    Merge branch 'tj-percpu' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/misc into core/percpu

commit 1d8ce7bc4d05b4a5c04dc17f92fef26989fb5935
Merge: 3a450de1365d 16b71fdf9759
Author: Ingo Molnar <mingo@elte.hu>
Date:   Wed Mar 11 10:29:28 2009 +0100

    Merge branch 'linus' into core/percpu
    
    Conflicts:
            arch/x86/include/asm/fixmap_64.h

commit e2b8b2808538a91444e78c7db5a30519cadd09b2
Merge: 4dd163a0512e ef18012b248b
Author: Ingo Molnar <mingo@elte.hu>
Date:   Tue Mar 10 22:55:31 2009 +0100

    Merge branch 'tip/tracing/ftrace' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace into tracing/ftrace

commit 4dd163a0512eb91bbcf4e66d2f65b8e4042561b3
Merge: 6cc3c6e12bb0 7cf494270424 99adcd9d67aa
Author: Ingo Molnar <mingo@elte.hu>
Date:   Tue Mar 10 22:54:23 2009 +0100

    Merge branches 'tracing/ftrace', 'tracing/textedit' and 'linus' into tracing/core