Patches contributed by Eötvös Lorand University


commit 3cf430b0636045dc524759a0852293ba037732a7
Merge: 93dcf55f828b 83097aca8567
Author: Ingo Molnar <mingo@elte.hu>
Date:   Tue Aug 26 10:25:59 2008 +0200

    Merge branch 'linus' into sched/devel

commit f58899bb0224741eb0409ada67ecafe90ba137ef
Merge: a2bd7274b471 83097aca8567
Author: Ingo Molnar <mingo@elte.hu>
Date:   Mon Aug 25 14:39:12 2008 +0200

    Merge branch 'linus' into x86/urgent

commit ea1c9de45ecb162841c9b4e0fa303a245d59b1c8
Merge: 4e1d112cac08 a2bd7274b471
Author: Ingo Molnar <mingo@elte.hu>
Date:   Mon Aug 25 11:10:42 2008 +0200

    Merge branch 'x86/urgent' into x86/cleanups

commit e4f807c2b4d81636fc63993368646c5bfd42b22f
Merge: 25258ef762bc 83097aca8567
Author: Ingo Molnar <mingo@elte.hu>
Date:   Mon Aug 25 10:54:07 2008 +0200

    Merge branch 'linus' into x86/xen
    
    Conflicts:
            arch/x86/kernel/paravirt.c
    
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

commit 38c052f8cff1bd323ccfa968136a9556652ee420
Author: Ingo Molnar <mingo@elte.hu>
Date:   Sat Aug 23 17:59:07 2008 +0200

    rtc: fix deadlock
    
    if get_rtc_time() is _ever_ called with IRQs off, we deadlock badly
    in it, waiting for jiffies to increment.
    
    So make the code more robust by doing an explicit mdelay(20).
    
    This solves a very hard to reproduce/debug hard lockup reported
    by Mikael Pettersson.
    
    Reported-by: Mikael Pettersson <mikpe@it.uu.se>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

diff --git a/include/asm-generic/rtc.h b/include/asm-generic/rtc.h
index be4af0029ac0..71ef3f0b9685 100644
--- a/include/asm-generic/rtc.h
+++ b/include/asm-generic/rtc.h
@@ -15,6 +15,7 @@
 #include <linux/mc146818rtc.h>
 #include <linux/rtc.h>
 #include <linux/bcd.h>
+#include <linux/delay.h>
 
 #define RTC_PIE 0x40		/* periodic interrupt enable */
 #define RTC_AIE 0x20		/* alarm interrupt enable */
@@ -43,7 +44,6 @@ static inline unsigned char rtc_is_updating(void)
 
 static inline unsigned int get_rtc_time(struct rtc_time *time)
 {
-	unsigned long uip_watchdog = jiffies;
 	unsigned char ctrl;
 	unsigned long flags;
 
@@ -53,19 +53,15 @@ static inline unsigned int get_rtc_time(struct rtc_time *time)
 
 	/*
 	 * read RTC once any update in progress is done. The update
-	 * can take just over 2ms. We wait 10 to 20ms. There is no need to
+	 * can take just over 2ms. We wait 20ms. There is no need to
 	 * to poll-wait (up to 1s - eeccch) for the falling edge of RTC_UIP.
 	 * If you need to know *exactly* when a second has started, enable
 	 * periodic update complete interrupts, (via ioctl) and then 
 	 * immediately read /dev/rtc which will block until you get the IRQ.
 	 * Once the read clears, read the RTC time (again via ioctl). Easy.
 	 */
-
-	if (rtc_is_updating() != 0)
-		while (jiffies - uip_watchdog < 2*HZ/100) {
-			barrier();
-			cpu_relax();
-		}
+	if (rtc_is_updating())
+		mdelay(20);
 
 	/*
 	 * Only the values that we read from the RTC are set. We leave

commit 87ce786ae5f24e336195805a9fc7428a6f922478
Merge: 8067794bec1c f1c5d30e1d79
Author: Ingo Molnar <mingo@elte.hu>
Date:   Sat Aug 23 17:46:59 2008 +0200

    Merge branch 'x86/cpu' into x86/x2apic

diff --cc arch/x86/kernel/io_apic_64.c
index b9950dae59b7,61a83b70c18f..e63282e78864
--- a/arch/x86/kernel/io_apic_64.c
+++ b/arch/x86/kernel/io_apic_64.c
@@@ -898,18 -838,7 +911,10 @@@ void __setup_vector_irq(int cpu
  	}
  }
  
- void setup_vector_irq(int cpu)
- {
- 	spin_lock(&vector_lock);
- 	__setup_vector_irq(smp_processor_id());
- 	spin_unlock(&vector_lock);
- }
- 
- 
  static struct irq_chip ioapic_chip;
 +#ifdef CONFIG_INTR_REMAP
 +static struct irq_chip ir_ioapic_chip;
 +#endif
  
  static void ioapic_register_intr(int irq, unsigned long trigger)
  {

commit 9754a5b840a209bc1f192d59f63e81b698a55ac8
Author: Ingo Molnar <mingo@elte.hu>
Date:   Fri Aug 22 08:22:23 2008 +0200

    x86: work around MTRR mask setting, v2
    
    improve the debug printout:
    
    - make it actually display something
    - print it only once
    
    would be nice to have a WARN_ONCE() facility, to feed such things to
    kerneloops.org.
    
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

diff --git a/arch/x86/kernel/cpu/mtrr/generic.c b/arch/x86/kernel/cpu/mtrr/generic.c
index 43102e03e2d1..cb7d3b6a80eb 100644
--- a/arch/x86/kernel/cpu/mtrr/generic.c
+++ b/arch/x86/kernel/cpu/mtrr/generic.c
@@ -401,7 +401,12 @@ static void generic_get_mtrr(unsigned int reg, unsigned long *base,
 		tmp |= ~((1<<(hi - 1)) - 1);
 
 		if (tmp != mask_lo) {
-			WARN_ON("mtrr: your BIOS has set up an incorrect mask, fixing it up.\n");
+			static int once = 1;
+
+			if (once) {
+				printk(KERN_INFO "mtrr: your BIOS has set up an incorrect mask, fixing it up.\n");
+				once = 0;
+			}
 			mask_lo = tmp;
 		}
 	}

commit 0d8136ea509132c66155ca8a1e7cf60699f95c37
Merge: 766af9fa812f 7b22ff5344fd
Author: Ingo Molnar <mingo@elte.hu>
Date:   Fri Aug 22 09:03:43 2008 +0200

    Merge branch 'x86/gart' into x86/iommu

commit a38409fbb5181324fb73b359189a72e02b6c7030
Author: Ingo Molnar <mingo@elte.hu>
Date:   Wed Aug 20 12:16:09 2008 +0200

    dma-coherent: export dma_[alloc|release]_from_coherent methods
    
    fixes modular builds:
    
      ERROR: "dma_alloc_from_coherent" [sound/core/snd-page-alloc.ko] undefined!
      ERROR: "dma_release_from_coherent" [sound/core/snd-page-alloc.ko] undefined!
    
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

diff --git a/kernel/dma-coherent.c b/kernel/dma-coherent.c
index c1d4d5b4c61c..f013a0c2e111 100644
--- a/kernel/dma-coherent.c
+++ b/kernel/dma-coherent.c
@@ -124,6 +124,7 @@ int dma_alloc_from_coherent(struct device *dev, ssize_t size,
 	}
 	return (mem != NULL);
 }
+EXPORT_SYMBOL(dma_alloc_from_coherent);
 
 /**
  * dma_release_from_coherent() - try to free the memory allocated from per-device coherent memory pool
@@ -151,3 +152,4 @@ int dma_release_from_coherent(struct device *dev, int order, void *vaddr)
 	}
 	return 0;
 }
+EXPORT_SYMBOL(dma_release_from_coherent);

commit 8b53b57576292b92b27769f9e213df19b6e57786
Merge: ab7e79243746 38cc1c3df77c
Author: Ingo Molnar <mingo@elte.hu>
Date:   Fri Aug 22 06:06:51 2008 +0200

    Merge branch 'x86/urgent' into x86/pat
    
    Conflicts:
            arch/x86/mm/pageattr.c
    
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

diff --cc arch/x86/mm/pageattr.c
index 041e81ef673a,43e2f8483e4f..1785591808bd
--- a/arch/x86/mm/pageattr.c
+++ b/arch/x86/mm/pageattr.c
@@@ -636,10 -598,9 +642,9 @@@ repeat
  	if (!pte_val(old_pte)) {
  		if (!primary)
  			return 0;
- 		printk(KERN_WARNING "CPA: called for zero pte. "
+ 		WARN(1, KERN_WARNING "CPA: called for zero pte. "
  		       "vaddr = %lx cpa->vaddr = %lx\n", address,
- 		WARN_ON(1);
 -		       cpa->vaddr);
 +		       *cpa->vaddr);
  		return -EINVAL;
  	}