Patches contributed by Eötvös Lorand University


commit 446d27338d3b422dd3dfe496d0f362230994d059
Merge: accf0fa697ee 0a488a53d7ca
Author: Ingo Molnar <mingo@elte.hu>
Date:   Fri Sep 5 09:19:50 2008 +0200

    Merge branch 'x86/cpu' into x86/core

commit accf0fa697eeb5ff4c2360edc4da5b10abac0b7b
Merge: ebd60cd64f8a fe47784ba5cb
Author: Ingo Molnar <mingo@elte.hu>
Date:   Fri Sep 5 09:18:39 2008 +0200

    Merge branch 'x86/xsave' into x86/core

commit 4156e9a8ef5b521185f451213d33fa661f38512e
Author: Ingo Molnar <mingo@elte.hu>
Date:   Thu Sep 4 22:47:47 2008 +0200

    x86: quick TSC calibration, improve
    
    - make sure the final TSC timestamp is reliable too
    
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c
index 839070ba8465..6dab90f68515 100644
--- a/arch/x86/kernel/tsc.c
+++ b/arch/x86/kernel/tsc.c
@@ -316,6 +316,12 @@ static unsigned long quick_pit_calibrate(void)
 		}
 		t2 = get_cycles();
 
+		/*
+		 * Make sure we can rely on the second TSC timestamp:
+		 */
+		if (!pit_expect_msb(--expect))
+			goto failed;
+
 		/*
 		 * Ok, if we get here, then we've seen the
 		 * MSB of the PIT decrement QUICK_PIT_ITERATIONS

commit 1cf44baad76b6f20f95ece397c6f643320aa44c9
Author: Ingo Molnar <mingo@elte.hu>
Date:   Thu Sep 4 21:26:06 2008 +0200

    IO resources: fix/remove printk
    
    Andrew Morton noticed that the printk in kernel/resource.c was buggy:
    
    | start and end have type resource_size_t.  Such types CANNOT be printed
    | unless cast to a known type.
    |
    | Because there is a %s following an incorrect %lld, the above code will
    | crash the machine.
    
    ... and it's probably quite unneeded as well, so remove it.
    
    Reported-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

diff --git a/kernel/resource.c b/kernel/resource.c
index 414d6fc9131e..fc59dcc4795b 100644
--- a/kernel/resource.c
+++ b/kernel/resource.c
@@ -549,13 +549,9 @@ static void __init __reserve_region_with_split(struct resource *root,
 	}
 
 	if (!res) {
-		printk(KERN_DEBUG "    __reserve_region_with_split: (%s) [%llx, %llx], res: (%s) [%llx, %llx]\n",
-			 conflict->name, conflict->start, conflict->end,
-			 name, start, end);
-
 		/* failed, split and try again */
 
-		/* conflict coverred whole area */
+		/* conflict covered whole area */
 		if (conflict->start <= start && conflict->end >= end)
 			return;
 

commit 62b3f981886b9b899eb0fc5fb59375f4512a1bd1
Merge: af2e1f276ff0 b05f78f5c713
Author: Ingo Molnar <mingo@elte.hu>
Date:   Thu Sep 4 21:08:09 2008 +0200

    Merge branch 'x86/debug' into x86/cpu

commit 8040d77688014987ca5738bf1731db72ab273441
Merge: fb481dd56adf 268364a0f48a
Author: Ingo Molnar <mingo@elte.hu>
Date:   Thu Sep 4 21:04:04 2008 +0200

    Merge branch 'core/resources' into x86/core

commit a5444d15b611cf2ffe2bc52aaf11f2ac51882f89
Author: Ingo Molnar <mingo@elte.hu>
Date:   Fri Aug 29 08:09:23 2008 +0200

    x86: split e820 reserved entries record to late v4
    
    this one replaces:
    
    | commit a2bd7274b47124d2fc4dfdb8c0591f545ba749dd
    | Author: Yinghai Lu <yhlu.kernel@gmail.com>
    | Date:   Mon Aug 25 00:56:08 2008 -0700
    |
    |    x86: fix HPET regression in 2.6.26 versus 2.6.25, check hpet against BAR, v3
    
    v2: insert e820 reserve resources before pnp_system_init
    v3: fix merging problem in tip/x86/core
    v4: address Linus's review about comments and condition in _late()
    
    Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c
index 523d6c5605d1..a7a71339bfb0 100644
--- a/arch/x86/kernel/e820.c
+++ b/arch/x86/kernel/e820.c
@@ -1271,12 +1271,12 @@ static inline const char *e820_type_to_string(int e820_type)
 /*
  * Mark e820 reserved areas as busy for the resource manager.
  */
-struct resource __initdata *e820_res;
+static struct resource __initdata *e820_res;
 void __init e820_reserve_resources(void)
 {
 	int i;
-	u64 end;
 	struct resource *res;
+	u64 end;
 
 	res = alloc_bootmem_low(sizeof(struct resource) * e820.nr_map);
 	e820_res = res;
@@ -1293,6 +1293,12 @@ void __init e820_reserve_resources(void)
 		res->end = end;
 
 		res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
+
+		/*
+		 * don't register the region that could be conflicted with
+		 * pci device BAR resource and insert them later in
+		 * pcibios_resource_survey()
+		 */
 		if (e820.map[i].type != E820_RESERVED || res->start < (1ULL<<20))
 			insert_resource(&iomem_resource, res);
 		res++;
@@ -1313,7 +1319,7 @@ void __init e820_reserve_resources_late(void)
 
 	res = e820_res;
 	for (i = 0; i < e820.nr_map; i++) {
-		if (e820.map[i].type == E820_RESERVED && res->start >= (1ULL<<20))
+		if (!res->parent && res->end)
 			insert_resource(&iomem_resource, res);
 		res++;
 	}
diff --git a/arch/x86/pci/i386.c b/arch/x86/pci/i386.c
index 40811efaa25a..844df0cbbd3e 100644
--- a/arch/x86/pci/i386.c
+++ b/arch/x86/pci/i386.c
@@ -31,11 +31,8 @@
 #include <linux/ioport.h>
 #include <linux/errno.h>
 #include <linux/bootmem.h>
-#include <linux/acpi.h>
 
 #include <asm/pat.h>
-#include <asm/hpet.h>
-#include <asm/io_apic.h>
 #include <asm/e820.h>
 
 #include "pci.h"
@@ -81,77 +78,6 @@ pcibios_align_resource(void *data, struct resource *res,
 }
 EXPORT_SYMBOL(pcibios_align_resource);
 
-static int check_res_with_valid(struct pci_dev *dev, struct resource *res)
-{
-	unsigned long base;
-	unsigned long size;
-	int i;
-
-	base = res->start;
-	size = (res->start == 0 && res->end == res->start) ? 0 :
-		 (res->end - res->start + 1);
-
-	if (!base || !size)
-		return 0;
-
-#ifdef CONFIG_HPET_TIMER
-	/* for hpet */
-	if (base == hpet_address && (res->flags & IORESOURCE_MEM)) {
-		dev_info(&dev->dev, "BAR has HPET at %08lx-%08lx\n",
-				 base, base + size - 1);
-		return 1;
-	}
-#endif
-
-#ifdef CONFIG_X86_IO_APIC
-	for (i = 0; i < nr_ioapics; i++) {
-		unsigned long ioapic_phys = mp_ioapics[i].mp_apicaddr;
-
-		if (base == ioapic_phys && (res->flags & IORESOURCE_MEM)) {
-			dev_info(&dev->dev, "BAR has ioapic at %08lx-%08lx\n",
-					 base, base + size - 1);
-			return 1;
-		}
-	}
-#endif
-
-#ifdef CONFIG_PCI_MMCONFIG
-	for (i = 0; i < pci_mmcfg_config_num; i++) {
-		unsigned long addr;
-
-		addr = pci_mmcfg_config[i].address;
-		if (base == addr && (res->flags & IORESOURCE_MEM)) {
-			dev_info(&dev->dev, "BAR has MMCONFIG at %08lx-%08lx\n",
-					 base, base + size - 1);
-			return 1;
-		}
-	}
-#endif
-
-	return 0;
-}
-
-static int check_platform(struct pci_dev *dev, struct resource *res)
-{
-	struct resource *root = NULL;
-
-	/*
-	 * forcibly insert it into the
-	 * resource tree
-	 */
-	if (res->flags & IORESOURCE_MEM)
-		root = &iomem_resource;
-	else if (res->flags & IORESOURCE_IO)
-		root = &ioport_resource;
-
-	if (root && check_res_with_valid(dev, res)) {
-		insert_resource(root, res);
-
-		return 1;
-	}
-
-	return 0;
-}
 /*
  *  Handle resources of PCI devices.  If the world were perfect, we could
  *  just allocate all the resource regions and do nothing more.  It isn't.
@@ -203,8 +129,6 @@ static void __init pcibios_allocate_bus_resources(struct list_head *bus_list)
 				pr = pci_find_parent_resource(dev, r);
 				if (!r->start || !pr ||
 				    request_resource(pr, r) < 0) {
-					if (check_platform(dev, r))
-						continue;
 					dev_err(&dev->dev, "BAR %d: can't allocate resource\n", idx);
 					/*
 					 * Something is wrong with the region.
@@ -246,8 +170,6 @@ static void __init pcibios_allocate_resources(int pass)
 					r->flags, disabled, pass);
 				pr = pci_find_parent_resource(dev, r);
 				if (!pr || request_resource(pr, r) < 0) {
-					if (check_platform(dev, r))
-						continue;
 					dev_err(&dev->dev, "BAR %d: can't allocate resource\n", idx);
 					/* We'll assign a new address later */
 					r->end -= r->start;
@@ -306,6 +228,8 @@ void __init pcibios_resource_survey(void)
 	pcibios_allocate_bus_resources(&pci_root_buses);
 	pcibios_allocate_resources(0);
 	pcibios_allocate_resources(1);
+
+	e820_reserve_resources_late();
 }
 
 /**

commit 42390cdec5f6e6e2ee54f308474a6ef7dd16aa5c
Merge: 11c231a962c7 d210baf53b69
Author: Ingo Molnar <mingo@elte.hu>
Date:   Thu Sep 4 13:02:35 2008 +0200

    Merge branch 'linus' into x86/x2apic
    
    Conflicts:
            arch/x86/kernel/cpu/cyrix.c
            include/asm-x86/cpufeature.h
    
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

diff --cc arch/x86/kernel/cpu/cyrix.c
index db5868cd2443,e710a21bb6e8..ada50505a5c8
--- a/arch/x86/kernel/cpu/cyrix.c
+++ b/arch/x86/kernel/cpu/cyrix.c
@@@ -131,26 -131,9 +131,9 @@@ static void __cpuinit set_cx86_memwb(vo
  	/* set 'Not Write-through' */
  	write_cr0(read_cr0() | X86_CR0_NW);
  	/* CCR2 bit 2: lock NW bit and set WT1 */
 -	setCx86(CX86_CCR2, getCx86(CX86_CCR2) | 0x14);
 +	setCx86_old(CX86_CCR2, getCx86_old(CX86_CCR2) | 0x14);
  }
  
- static void __cpuinit set_cx86_inc(void)
- {
- 	unsigned char ccr3;
- 
- 	printk(KERN_INFO "Enable Incrementor on Cyrix/NSC processor.\n");
- 
- 	ccr3 = getCx86(CX86_CCR3);
- 	setCx86(CX86_CCR3, (ccr3 & 0x0f) | 0x10); /* enable MAPEN */
- 	/* PCR1 -- Performance Control */
- 	/* Incrementor on, whatever that is */
- 	setCx86_old(CX86_PCR1, getCx86_old(CX86_PCR1) | 0x02);
- 	/* PCR0 -- Performance Control */
- 	/* Incrementor Margin 10 */
- 	setCx86_old(CX86_PCR0, getCx86_old(CX86_PCR0) | 0x04);
- 	setCx86(CX86_CCR3, ccr3);	/* disable MAPEN */
- }
- 
  /*
   *	Configure later MediaGX and/or Geode processor.
   */
diff --cc include/asm-x86/cpufeature.h
index 8d842af4cf7a,762f6a6bc707..c6845b94be84
--- a/include/asm-x86/cpufeature.h
+++ b/include/asm-x86/cpufeature.h
@@@ -93,7 -91,7 +93,8 @@@
  #define X86_FEATURE_CX16	(4*32+13) /* CMPXCHG16B */
  #define X86_FEATURE_XTPR	(4*32+14) /* Send Task Priority Messages */
  #define X86_FEATURE_DCA		(4*32+18) /* Direct Cache Access */
+ #define X86_FEATURE_XMM4_2	(4*32+20) /* Streaming SIMD Extensions-4.2 */
 +#define X86_FEATURE_X2APIC	(4*32+21) /* x2APIC */
  
  /* VIA/Cyrix/Centaur-defined CPU features, CPUID level 0xC0000001, word 5 */
  #define X86_FEATURE_XSTORE	(5*32+ 2) /* on-CPU RNG present (xstore insn) */
@@@ -192,7 -190,7 +193,8 @@@ extern const char * const x86_power_fla
  #define cpu_has_gbpages		boot_cpu_has(X86_FEATURE_GBPAGES)
  #define cpu_has_arch_perfmon	boot_cpu_has(X86_FEATURE_ARCH_PERFMON)
  #define cpu_has_pat		boot_cpu_has(X86_FEATURE_PAT)
+ #define cpu_has_xmm4_2		boot_cpu_has(X86_FEATURE_XMM4_2)
 +#define cpu_has_x2apic		boot_cpu_has(X86_FEATURE_X2APIC)
  
  #if defined(CONFIG_X86_INVLPG) || defined(CONFIG_X86_64)
  # define cpu_has_invlpg		1

commit 7940ca3605b77f20cc6e9852e4ca6f2d725b5653
Author: Ingo Molnar <mingo@elte.hu>
Date:   Tue Aug 19 13:40:47 2008 +0200

    sched: extract walk_tg_tree(), fix
    
    fix:
    
     kernel/sched.c: In function '__rt_schedulable':
     kernel/sched.c:8771: error: implicit declaration of function 'walk_tg_tree'
     kernel/sched.c:8771: error: 'tg_nop' undeclared (first use in this function)
     kernel/sched.c:8771: error: (Each undeclared identifier is reported only once
     kernel/sched.c:8771: error: for each function it appears in.)
    
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

diff --git a/kernel/sched.c b/kernel/sched.c
index e41bdae2778d..703f56d5db5f 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -1387,7 +1387,7 @@ static inline void dec_cpu_load(struct rq *rq, unsigned long load)
 	update_load_sub(&rq->load, load);
 }
 
-#if (defined(CONFIG_SMP) && defined(CONFIG_FAIR_GROUP_SCHED)) || defined(SCHED_RT_GROUP_SCHED)
+#if (defined(CONFIG_SMP) && defined(CONFIG_FAIR_GROUP_SCHED)) || defined(CONFIG_RT_GROUP_SCHED)
 typedef int (*tg_visitor)(struct task_group *, void *);
 
 /*

commit aef745fca016aea45adae5c98e8698904dd8ad51
Author: Ingo Molnar <mingo@elte.hu>
Date:   Thu Aug 28 11:34:43 2008 +0200

    sched: clean up __might_sleep()
    
    add KERN_ to the printout and clean up the flow a bit.
    
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

diff --git a/kernel/sched.c b/kernel/sched.c
index 6e283dc7679a..b112caaa400a 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -8226,20 +8226,25 @@ void __might_sleep(char *file, int line)
 #ifdef in_atomic
 	static unsigned long prev_jiffy;	/* ratelimiting */
 
-	if ((in_atomic() || irqs_disabled()) &&
-	    system_state == SYSTEM_RUNNING && !oops_in_progress) {
-		if (time_before(jiffies, prev_jiffy + HZ) && prev_jiffy)
-			return;
-		prev_jiffy = jiffies;
-		printk(KERN_ERR "BUG: sleeping function called from invalid"
-				" context at %s:%d\n", file, line);
-		printk("in_atomic():%d, irqs_disabled():%d, pid: %d, name: %s\n",
-			in_atomic(), irqs_disabled(), current->pid, current->comm);
-		debug_show_held_locks(current);
-		if (irqs_disabled())
-			print_irqtrace_events(current);
-		dump_stack();
-	}
+	if ((!in_atomic() && !irqs_disabled()) ||
+		    system_state != SYSTEM_RUNNING || oops_in_progress)
+		return;
+	if (time_before(jiffies, prev_jiffy + HZ) && prev_jiffy)
+		return;
+	prev_jiffy = jiffies;
+
+	printk(KERN_ERR
+		"BUG: sleeping function called from invalid context at %s:%d\n",
+			file, line);
+	printk(KERN_ERR
+		"in_atomic(): %d, irqs_disabled(): %d, pid: %d, name: %s\n",
+			in_atomic(), irqs_disabled(),
+			current->pid, current->comm);
+
+	debug_show_held_locks(current);
+	if (irqs_disabled())
+		print_irqtrace_events(current);
+	dump_stack();
 #endif
 }
 EXPORT_SYMBOL(__might_sleep);