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;
}