Patches contributed by Eötvös Lorand University


commit 42e59d7d19dc4b49feab2a860fd9a8ca3248c833
Author: Ingo Molnar <mingo@elte.hu>
Date:   Tue Oct 6 15:14:21 2009 +0200

    perf tools: Default to 1 KHz auto-sampling freq events
    
    Use auto-freq events by default in perf record and
    perf top.
    
    This allows more consistent hardware event sampling,
    regardless of the intensity of the underlying event.
    
    It also keeps us from over-sampling on larger/busier
    systems.
    
    (also make surrounding initializations more consistent)
    
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    LKML-Reference: <new-submission>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index 3eeef339c787..494f8c7d7521 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -29,43 +29,43 @@ static int			fd[MAX_NR_CPUS][MAX_COUNTERS];
 
 static long			default_interval		= 100000;
 
-static int			nr_cpus				= 0;
+static int			nr_cpus				=      0;
 static unsigned int		page_size;
-static unsigned int		mmap_pages			= 128;
-static int			freq				= 0;
+static unsigned int		mmap_pages			=    128;
+static int			freq				=   1000;
 static int			output;
 static const char		*output_name			= "perf.data";
-static int			group				= 0;
-static unsigned int		realtime_prio			= 0;
-static int			raw_samples			= 0;
-static int			system_wide			= 0;
-static int			profile_cpu			= -1;
-static pid_t			target_pid			= -1;
-static pid_t			child_pid			= -1;
-static int			inherit				= 1;
-static int			force				= 0;
-static int			append_file			= 0;
-static int			call_graph			= 0;
-static int			inherit_stat			= 0;
-static int			no_samples			= 0;
-static int			sample_address			= 0;
-static int			multiplex			= 0;
-static int			multiplex_fd			= -1;
-
-static long			samples;
+static int			group				=      0;
+static unsigned int		realtime_prio			=      0;
+static int			raw_samples			=      0;
+static int			system_wide			=      0;
+static int			profile_cpu			=     -1;
+static pid_t			target_pid			=     -1;
+static pid_t			child_pid			=     -1;
+static int			inherit				=      1;
+static int			force				=      0;
+static int			append_file			=      0;
+static int			call_graph			=      0;
+static int			inherit_stat			=      0;
+static int			no_samples			=      0;
+static int			sample_address			=      0;
+static int			multiplex			=      0;
+static int			multiplex_fd			=     -1;
+
+static long			samples				=      0;
 static struct timeval		last_read;
 static struct timeval		this_read;
 
-static u64			bytes_written;
+static u64			bytes_written			=      0;
 
 static struct pollfd		event_array[MAX_NR_CPUS * MAX_COUNTERS];
 
-static int			nr_poll;
-static int			nr_cpu;
+static int			nr_poll				=      0;
+static int			nr_cpu				=      0;
 
-static int			file_new = 1;
+static int			file_new			=      1;
 
-struct perf_header		*header;
+struct perf_header		*header				=   NULL;
 
 struct mmap_data {
 	int			counter;
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
index c574c5b3d0e6..d978dc99236c 100644
--- a/tools/perf/builtin-top.c
+++ b/tools/perf/builtin-top.c
@@ -55,26 +55,26 @@
 
 static int			fd[MAX_NR_CPUS][MAX_COUNTERS];
 
-static int			system_wide			=  0;
+static int			system_wide			=      0;
 
 static int			default_interval		= 100000;
 
-static int			count_filter			=  5;
-static int			print_entries			= 15;
+static int			count_filter			=      5;
+static int			print_entries			=     15;
 
-static int			target_pid			= -1;
-static int			inherit				=  0;
-static int			profile_cpu			= -1;
-static int			nr_cpus				=  0;
-static unsigned int		realtime_prio			=  0;
-static int			group				=  0;
+static int			target_pid			=     -1;
+static int			inherit				=      0;
+static int			profile_cpu			=     -1;
+static int			nr_cpus				=      0;
+static unsigned int		realtime_prio			=      0;
+static int			group				=      0;
 static unsigned int		page_size;
-static unsigned int		mmap_pages			= 16;
-static int			freq				=  0;
+static unsigned int		mmap_pages			=     16;
+static int			freq				=   1000; /* 1 KHz */
 
-static int			delay_secs			=  2;
-static int			zero;
-static int			dump_symtab;
+static int			delay_secs			=      2;
+static int			zero                            =      0;
+static int			dump_symtab                     =      0;
 
 /*
  * Source
@@ -87,11 +87,11 @@ struct source_line {
 	struct source_line	*next;
 };
 
-static char			*sym_filter			=  NULL;
-struct sym_entry		*sym_filter_entry		=  NULL;
-static int			sym_pcnt_filter			=  5;
-static int			sym_counter			=  0;
-static int			display_weighted		= -1;
+static char			*sym_filter			=   NULL;
+struct sym_entry		*sym_filter_entry		=   NULL;
+static int			sym_pcnt_filter			=      5;
+static int			sym_counter			=      0;
+static int			display_weighted		=     -1;
 
 /*
  * Symbols

commit d9b2002c406011164f245de7a81304625989f1c9
Merge: c3b32fcbc7f4 906010b2134e
Author: Ingo Molnar <mingo@elte.hu>
Date:   Tue Oct 6 15:02:30 2009 +0200

    Merge branch 'perf/urgent' into perf/core
    
    Merge reason: Upcoming patch is dependent on a fix in perf/urgent.
    
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

commit f436f8bb73138bc74eb1c6527723e00988ad8a8a
Author: Ingo Molnar <mingo@elte.hu>
Date:   Thu Oct 1 16:14:32 2009 +0200

    x86: EDAC: MCE: Fix MCE decoding callback logic
    
    Make decoding of MCEs happen only on AMD hardware by registering a
    non-default callback only on CPU families which support it.
    
    While looking at the interaction of decode_mce() with the other MCE
    code i also noticed a few other things and made the following
    cleanups/fixes:
    
     - Fixed the mce_decode() weak alias - a weak alias is really not
       good here, it should be a proper callback. A weak alias will be
       overriden if a piece of code is built into the kernel - not
       good, obviously.
    
     - The patch initializes the callback on AMD family 10h and 11h.
    
     - Added the more correct fallback printk of:
    
            No support for human readable MCE decoding on this CPU type.
            Transcribe the message and run it through 'mcelog --ascii' to decode.
    
       On CPUs that dont have a decoder.
    
     - Made the surrounding code more readable.
    
    Note that the callback allows us to have a default fallback -
    without having to check the CPU versions during the printout
    itself. When an EDAC module registers itself, it can install the
    decode-print function.
    
    (there's no unregister needed as this is core code.)
    
    version -v2 by Borislav Petkov:
    
     - add K8 to the set of supported CPUs
    
     - always build in edac_mce_amd since we use an early_initcall now
    
     - fix checkpatch warnings
    
    Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Andi Kleen <andi@firstfloor.org>
    LKML-Reference: <20091001141432.GA11410@aftab>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

diff --git a/arch/x86/include/asm/mce.h b/arch/x86/include/asm/mce.h
index b608a64c5814..f1363b72364f 100644
--- a/arch/x86/include/asm/mce.h
+++ b/arch/x86/include/asm/mce.h
@@ -133,6 +133,8 @@ static inline void winchip_mcheck_init(struct cpuinfo_x86 *c) {}
 static inline void enable_p5_mce(void) {}
 #endif
 
+extern void (*x86_mce_decode_callback)(struct mce *m);
+
 void mce_setup(struct mce *m);
 void mce_log(struct mce *m);
 DECLARE_PER_CPU(struct sys_device, mce_dev);
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
index 183c3457d2f4..b1598a9436d0 100644
--- a/arch/x86/kernel/cpu/mcheck/mce.c
+++ b/arch/x86/kernel/cpu/mcheck/mce.c
@@ -85,6 +85,18 @@ static DECLARE_WAIT_QUEUE_HEAD(mce_wait);
 static DEFINE_PER_CPU(struct mce, mces_seen);
 static int			cpu_missing;
 
+static void default_decode_mce(struct mce *m)
+{
+	pr_emerg("No human readable MCE decoding support on this CPU type.\n");
+	pr_emerg("Run the message through 'mcelog --ascii' to decode.\n");
+}
+
+/*
+ * CPU/chipset specific EDAC code can register a callback here to print
+ * MCE errors in a human-readable form:
+ */
+void (*x86_mce_decode_callback)(struct mce *m) = default_decode_mce;
+EXPORT_SYMBOL(x86_mce_decode_callback);
 
 /* MCA banks polled by the period polling timer for corrected events */
 DEFINE_PER_CPU(mce_banks_t, mce_poll_banks) = {
@@ -165,46 +177,46 @@ void mce_log(struct mce *mce)
 	set_bit(0, &mce_need_notify);
 }
 
-void __weak decode_mce(struct mce *m)
-{
-	return;
-}
-
 static void print_mce(struct mce *m)
 {
-	printk(KERN_EMERG
-	       "CPU %d: Machine Check Exception: %16Lx Bank %d: %016Lx\n",
+	pr_emerg("CPU %d: Machine Check Exception: %16Lx Bank %d: %016Lx\n",
 	       m->extcpu, m->mcgstatus, m->bank, m->status);
+
 	if (m->ip) {
-		printk(KERN_EMERG "RIP%s %02x:<%016Lx> ",
-		       !(m->mcgstatus & MCG_STATUS_EIPV) ? " !INEXACT!" : "",
-		       m->cs, m->ip);
+		pr_emerg("RIP%s %02x:<%016Lx> ",
+			!(m->mcgstatus & MCG_STATUS_EIPV) ? " !INEXACT!" : "",
+				m->cs, m->ip);
+
 		if (m->cs == __KERNEL_CS)
 			print_symbol("{%s}", m->ip);
-		printk(KERN_CONT "\n");
+		pr_cont("\n");
 	}
-	printk(KERN_EMERG "TSC %llx ", m->tsc);
+
+	pr_emerg("TSC %llx ", m->tsc);
 	if (m->addr)
-		printk(KERN_CONT "ADDR %llx ", m->addr);
+		pr_cont("ADDR %llx ", m->addr);
 	if (m->misc)
-		printk(KERN_CONT "MISC %llx ", m->misc);
-	printk(KERN_CONT "\n");
-	printk(KERN_EMERG "PROCESSOR %u:%x TIME %llu SOCKET %u APIC %x\n",
-			m->cpuvendor, m->cpuid, m->time, m->socketid,
-			m->apicid);
+		pr_cont("MISC %llx ", m->misc);
+
+	pr_cont("\n");
+	pr_emerg("PROCESSOR %u:%x TIME %llu SOCKET %u APIC %x\n",
+		m->cpuvendor, m->cpuid, m->time, m->socketid, m->apicid);
 
-	decode_mce(m);
+	/*
+	 * Print out human-readable details about the MCE error,
+	 * (if the CPU has an implementation for that):
+	 */
+	x86_mce_decode_callback(m);
 }
 
 static void print_mce_head(void)
 {
-	printk(KERN_EMERG "\nHARDWARE ERROR\n");
+	pr_emerg("\nHARDWARE ERROR\n");
 }
 
 static void print_mce_tail(void)
 {
-	printk(KERN_EMERG "This is not a software problem!\n"
-	       "Run through mcelog --ascii to decode and contact your hardware vendor\n");
+	pr_emerg("This is not a software problem!\n");
 }
 
 #define PANIC_TIMEOUT 5 /* 5 seconds */
@@ -218,6 +230,7 @@ static atomic_t mce_fake_paniced;
 static void wait_for_panic(void)
 {
 	long timeout = PANIC_TIMEOUT*USEC_PER_SEC;
+
 	preempt_disable();
 	local_irq_enable();
 	while (timeout-- > 0)
@@ -285,6 +298,7 @@ static void mce_panic(char *msg, struct mce *final, char *exp)
 static int msr_to_offset(u32 msr)
 {
 	unsigned bank = __get_cpu_var(injectm.bank);
+
 	if (msr == rip_msr)
 		return offsetof(struct mce, ip);
 	if (msr == MSR_IA32_MCx_STATUS(bank))
diff --git a/drivers/edac/Makefile b/drivers/edac/Makefile
index 7a473bbe8abd..8701cd7ce4e3 100644
--- a/drivers/edac/Makefile
+++ b/drivers/edac/Makefile
@@ -18,7 +18,7 @@ edac_core-objs	+= edac_pci.o edac_pci_sysfs.o
 endif
 
 ifdef CONFIG_CPU_SUP_AMD
-edac_core-objs  += edac_mce_amd.o
+obj-$(CONFIG_X86_MCE)			+= edac_mce_amd.o
 endif
 
 obj-$(CONFIG_EDAC_AMD76X)		+= amd76x_edac.o
diff --git a/drivers/edac/edac_mce_amd.c b/drivers/edac/edac_mce_amd.c
index 0c21c370c9dd..83a01a1187d7 100644
--- a/drivers/edac/edac_mce_amd.c
+++ b/drivers/edac/edac_mce_amd.c
@@ -362,7 +362,7 @@ static inline void amd_decode_err_code(unsigned int ec)
 		pr_warning("Huh? Unknown MCE error 0x%x\n", ec);
 }
 
-void decode_mce(struct mce *m)
+static void amd_decode_mce(struct mce *m)
 {
 	struct err_regs regs;
 	int node, ecc;
@@ -420,3 +420,16 @@ void decode_mce(struct mce *m)
 
 	amd_decode_err_code(m->status & 0xffff);
 }
+
+static int __init mce_amd_init(void)
+{
+	/*
+	 * We can decode MCEs for Opteron and later CPUs:
+	 */
+	if ((boot_cpu_data.x86_vendor == X86_VENDOR_AMD) &&
+	    (boot_cpu_data.x86 >= 0xf))
+		x86_mce_decode_callback = amd_decode_mce;
+
+	return 0;
+}
+early_initcall(mce_amd_init);

commit 0aa73ba1c4e1ad1d51a29e0df95ccd9f746918b6
Merge: 925936ebf35a 33974093c024
Author: Ingo Molnar <mingo@elte.hu>
Date:   Thu Oct 1 11:20:33 2009 +0200

    Merge branch 'tracing/urgent' into tracing/core
    
    Merge reason: Pick up latest fixes and update to latest upstream.
    
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

commit 704daf55c7297e727021063cb5d8ba1c55b84426
Merge: b0c6fbe45818 123f3e1d7695
Author: Ingo Molnar <mingo@elte.hu>
Date:   Fri Sep 25 10:45:32 2009 +0200

    Merge branch 'x86/asm' into x86/urgent
    
    Merge reason: The linker script cleanups are ready for upstream.
    
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

commit d2b5ec3aa0784335f031239e71fb50924cac9e0d
Author: Ingo Molnar <mingo@elte.hu>
Date:   Wed Sep 23 15:56:02 2009 -0700

    input: fix build failures caused by Kconfig Winbond WPCD376I Consumer IR hardware driver Kconfig entry
    
    Fix these warnings:
    
      drivers/built-in.o: In function `apanel_remove':
      apanel.c:(.text+0x56e852): undefined reference to `led_classdev_unregister'
      drivers/built-in.o: In function `apanel_probe':
      apanel.c:(.text+0x56eae3): undefined reference to `led_classdev_register'
      drivers/built-in.o: In function `acpi_fujitsu_hotkey_add':
      fujitsu-laptop.c:(.text+0x5d7647): undefined reference to `led_classdev_register'
      fujitsu-laptop.c:(.text+0x5d76b5): undefined reference to `led_classdev_register'
      drivers/built-in.o: In function `wbcir_probe':
      winbond-cir.c:(.devinit.text+0x5f375): undefined reference to `led_classdev_register'
      winbond-cir.c:(.devinit.text+0x5f663): undefined reference to `led_classdev_unregister'
      drivers/built-in.o: In function `wbcir_remove':
      winbond-cir.c:(.devexit.text+0x7f23): undefined reference to `led_classdev_unregister'
      drivers/built-in.o: In function `fujitsu_cleanup':
      fujitsu-laptop.c:(.exit.text+0xbe37): undefined reference to `led_classdev_unregister'
      fujitsu-laptop.c:(.exit.text+0xbe53): undefined reference to `led_classdev_unregister'
    
    It happens because the new INPUT_WINBOND_CIR driver relies on new-leds
    infrastructure - but does not select it in drivers/input/misc/Kconfig.
    But it selects LEDS_CLASS, which confuses a number of other drivers into
    thinking that all the leds infrastructure is in place.
    
    Fix this by selecting NEW_LEDS as well, like similar drivers do.
    
    Eventually, this whole leds infrastructure complexity should be
    cleaned up, it's been going on for years.
    
    Signed-off-by: Ingo Molnar <mingo@elte.hu>
    Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
    Cc: Dmitry Torokhov <dtor@mail.ru>
    Cc: David Härdeman <david@hardeman.nu>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
index 76d6751f89a7..02f4f8f1db6f 100644
--- a/drivers/input/misc/Kconfig
+++ b/drivers/input/misc/Kconfig
@@ -225,6 +225,7 @@ config INPUT_SGI_BTNS
 config INPUT_WINBOND_CIR
 	tristate "Winbond IR remote control"
 	depends on X86 && PNP
+	select NEW_LEDS
 	select LEDS_CLASS
 	select BITREVERSE
 	help

commit d2ff6de537c61a0f05731c6679f3e1abc2d95e68
Merge: e23a8b6a8f31 a724eada8c2a
Author: Ingo Molnar <mingo@elte.hu>
Date:   Thu Sep 24 12:59:11 2009 +0200

    Merge branch 'linus' into x86/urgent
    
    Merge reason: Queueing up dependent early-printk fix.
    
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

commit 11868a2dc4f5e4f2f652bfd259e1360193fcee62
Author: Ingo Molnar <mingo@elte.hu>
Date:   Wed Sep 23 17:49:55 2009 +0200

    x86: mce: Use safer ways to access MCE registers
    
    Use rdmsrl_safe() when accessing MCE registers. While in
    theory we always 'know' which ones are safe to access from
    the capability bits, there's a lot of hardware variations
    and reality might differ from theory, as it did in this case:
    
       http://bugzilla.kernel.org/show_bug.cgi?id=14204
    
    [    0.010016] mce: CPU supports 5 MCE banks
    [    0.011029] general protection fault: 0000 [#1]
    [    0.011998] last sysfs file:
    [    0.011998] Modules linked in:
    [    0.011998]
    [    0.011998] Pid: 0, comm: swapper Not tainted (2.6.31_router #1) HP Vectra
    [    0.011998] EIP: 0060:[<c100d9b9>] EFLAGS: 00010246 CPU: 0
    [    0.011998] EIP is at mce_rdmsrl+0x19/0x60
    [    0.011998] EAX: 00000000 EBX: 00000001 ECX: 00000407 EDX: 08000000
    [    0.011998] ESI: 00000000 EDI: 8c000000 EBP: 00000405 ESP: c17d5eac
    
    So WARN_ONCE() instead of crashing the box.
    
    ( also fix a number of stylistic inconsistencies in the code. )
    
    Note, we might still crash in wrmsrl() if we get that far, but
    we shouldnt if the registers are truly inaccessible.
    
    Reported-by: GNUtoo <GNUtoo@no-log.org>
    Cc: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
    Cc: Huang Ying <ying.huang@intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    LKML-Reference: <bug-14204-5438@http.bugzilla.kernel.org/>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
index 2f5aab26320e..4b2af86e3e8d 100644
--- a/arch/x86/kernel/cpu/mcheck/mce.c
+++ b/arch/x86/kernel/cpu/mcheck/mce.c
@@ -305,13 +305,25 @@ static int msr_to_offset(u32 msr)
 static u64 mce_rdmsrl(u32 msr)
 {
 	u64 v;
+
 	if (__get_cpu_var(injectm).finished) {
 		int offset = msr_to_offset(msr);
+
 		if (offset < 0)
 			return 0;
 		return *(u64 *)((char *)&__get_cpu_var(injectm) + offset);
 	}
-	rdmsrl(msr, v);
+
+	if (rdmsrl_safe(msr, &v)) {
+		WARN_ONCE(1, "mce: Unable to read msr %d!\n", msr);
+		/*
+		 * Return zero in case the access faulted. This should
+		 * not happen normally but can happen if the CPU does
+		 * something weird, or if the code is buggy.
+		 */
+		v = 0;
+	}
+
 	return v;
 }
 
@@ -319,6 +331,7 @@ static void mce_wrmsrl(u32 msr, u64 v)
 {
 	if (__get_cpu_var(injectm).finished) {
 		int offset = msr_to_offset(msr);
+
 		if (offset >= 0)
 			*(u64 *)((char *)&__get_cpu_var(injectm) + offset) = v;
 		return;
@@ -415,7 +428,7 @@ static inline void mce_get_rip(struct mce *m, struct pt_regs *regs)
 		m->ip = mce_rdmsrl(rip_msr);
 }
 
-#ifdef CONFIG_X86_LOCAL_APIC 
+#ifdef CONFIG_X86_LOCAL_APIC
 /*
  * Called after interrupts have been reenabled again
  * when a MCE happened during an interrupts off region
@@ -1172,6 +1185,7 @@ static int mce_banks_init(void)
 		return -ENOMEM;
 	for (i = 0; i < banks; i++) {
 		struct mce_bank *b = &mce_banks[i];
+
 		b->ctl = -1ULL;
 		b->init = 1;
 	}
@@ -1203,6 +1217,7 @@ static int __cpuinit mce_cap_init(void)
 	banks = b;
 	if (!mce_banks) {
 		int err = mce_banks_init();
+
 		if (err)
 			return err;
 	}
@@ -1237,6 +1252,7 @@ static void mce_init(void)
 
 	for (i = 0; i < banks; i++) {
 		struct mce_bank *b = &mce_banks[i];
+
 		if (!b->init)
 			continue;
 		wrmsrl(MSR_IA32_MCx_CTL(i), b->ctl);
@@ -1626,6 +1642,7 @@ static int mce_disable(void)
 
 	for (i = 0; i < banks; i++) {
 		struct mce_bank *b = &mce_banks[i];
+
 		if (b->init)
 			wrmsrl(MSR_IA32_MCx_CTL(i), 0);
 	}
@@ -1911,6 +1928,7 @@ static void mce_disable_cpu(void *h)
 		cmci_clear();
 	for (i = 0; i < banks; i++) {
 		struct mce_bank *b = &mce_banks[i];
+
 		if (b->init)
 			wrmsrl(MSR_IA32_MCx_CTL(i), 0);
 	}
@@ -1928,6 +1946,7 @@ static void mce_reenable_cpu(void *h)
 		cmci_reenable();
 	for (i = 0; i < banks; i++) {
 		struct mce_bank *b = &mce_banks[i];
+
 		if (b->init)
 			wrmsrl(MSR_IA32_MCx_CTL(i), b->ctl);
 	}

commit 14c93e8eba70c3c85d8f8acc6cfdc728aef92076
Merge: 14c0abf14a5e c44c9ec0f38b
Author: Ingo Molnar <mingo@elte.hu>
Date:   Wed Sep 23 14:35:10 2009 +0200

    Merge branch 'bugfix' of git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen into x86/urgent

commit 115e8a288252ef748f34f8b7c1115c563d702eda
Author: Ingo Molnar <mingo@elte.hu>
Date:   Mon Sep 21 18:22:11 2009 +0200

    modules, tracing: Remove stale struct marker signature from module_layout()
    
    Linus reported this new build warning:
    
      kernel/module.c:2951: warning: ?struct marker? declared inside parameter list
      kernel/module.c:2951: warning: its scope is only this definition or declaration, which is probably not what you want
    
    Caused by:
    
      fc53776: tracing: Remove markers
    
    module_layout() is an artificial symbol with 'significant' symbols
    listed in its argument list so that it gets a proper argument types
    signature that modversions can pick up to decide whether a
    module is version-compatible or not. If these dont match then we
    wont even look at a module.
    
    Remove the stale marker symbol.
    
    Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
    LKML-Reference: <alpine.LFD.2.01.0909210908020.4950@localhost.localdomain>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Rusty Russell <rusty@rustcorp.com.au>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

diff --git a/kernel/module.c b/kernel/module.c
index b6ee424245dd..392eb3defbcd 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -2947,7 +2947,6 @@ void module_layout(struct module *mod,
 		   struct modversion_info *ver,
 		   struct kernel_param *kp,
 		   struct kernel_symbol *ks,
-		   struct marker *marker,
 		   struct tracepoint *tp)
 {
 }