Patches contributed by Eötvös Lorand University


commit d00ab2fdd4dc4361c97777bc1fef7234329d4659
Merge: 88f502fedba8 7c730ccdc118
Author: Ingo Molnar <mingo@elte.hu>
Date:   Sat Mar 28 23:24:12 2009 +0100

    Merge branch 'linus' into core/futexes

commit b0d44c0dbbd52effb731b1c0af9afd56215c48de
Merge: 9537a48ed4b9 7c730ccdc118
Author: Ingo Molnar <mingo@elte.hu>
Date:   Sat Mar 28 23:05:50 2009 +0100

    Merge branch 'linus' into core/iommu
    
    Conflicts:
            arch/x86/Kconfig

diff --cc Documentation/kernel-parameters.txt
index 0fa3c0545994,6b979d1d09ab..0122e5f810fb
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@@ -491,18 -492,9 +492,19 @@@ and is between 256 and 4096 characters
  			Range: 0 - 8192
  			Default: 64
  
 +	dma_debug=off	If the kernel is compiled with DMA_API_DEBUG support
 +			this option disables the debugging code at boot.
 +
 +	dma_debug_entries=<number>
 +			This option allows to tune the number of preallocated
 +			entries for DMA-API debugging code. One entry is
 +			required per DMA-API allocation. Use this if the
 +			DMA-API debugging code disables itself because the
 +			architectural default is too low.
 +
  	hpet=		[X86-32,HPET] option to control HPET usage
- 			Format: { enable (default) | disable | force }
+ 			Format: { enable (default) | disable | force |
+ 				verbose }
  			disable: disable HPET and use PIT instead
  			force: allow force enabled of undocumented chips (ICH4,
  			VIA, nVidia)
diff --cc arch/x86/Kconfig
index f2cb677b263f,06c02c00d7d9..c9012b95da6c
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@@ -40,7 -40,9 +40,10 @@@ config X8
  	select HAVE_GENERIC_DMA_COHERENT if X86_32
  	select HAVE_EFFICIENT_UNALIGNED_ACCESS
  	select USER_STACKTRACE_SUPPORT
 +	select HAVE_DMA_API_DEBUG
+ 	select HAVE_KERNEL_GZIP
+ 	select HAVE_KERNEL_BZIP2
+ 	select HAVE_KERNEL_LZMA
  
  config ARCH_DEFCONFIG
  	string
diff --cc lib/Kconfig.debug
index d9cbada7e2f8,8fee0a13ac58..251fa7ba3014
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@@ -878,41 -882,36 +882,47 @@@ config DYNAMIC_DEBU
  
  	  From a live system:
  
- 		snd_hda_intel enabled=0
- 		fixup enabled=0
- 		driver enabled=0
+ 		nullarbor:~ # cat <debugfs>/dynamic_debug/ddebug
+ 		# filename:lineno [module]function flags format
+ 		fs/aio.c:222 [aio]__put_ioctx - "__put_ioctx:\040freeing\040%p\012"
+ 		fs/aio.c:248 [aio]ioctx_alloc - "ENOMEM:\040nr_events\040too\040high\012"
+ 		fs/aio.c:1770 [aio]sys_io_cancel - "calling\040cancel\012"
  
- 	  Enable a module:
+ 	  Example usage:
  
- 	  	$echo "set enabled=1 <module_name>" > dynamic_printk/modules
+ 		// enable the message at line 1603 of file svcsock.c
+ 		nullarbor:~ # echo -n 'file svcsock.c line 1603 +p' >
+ 						<debugfs>/dynamic_debug/ddebug
  
- 	  Disable a module:
+ 		// enable all the messages in file svcsock.c
+ 		nullarbor:~ # echo -n 'file svcsock.c +p' >
+ 						<debugfs>/dynamic_debug/ddebug
  
- 	  	$echo "set enabled=0 <module_name>" > dynamic_printk/modules
+ 		// enable all the messages in the NFS server module
+ 		nullarbor:~ # echo -n 'module nfsd +p' >
+ 						<debugfs>/dynamic_debug/ddebug
  
- 	  Enable all modules:
+ 		// enable all 12 messages in the function svc_process()
+ 		nullarbor:~ # echo -n 'func svc_process +p' >
+ 						<debugfs>/dynamic_debug/ddebug
  
- 		$echo "set enabled=1 all" > dynamic_printk/modules
+ 		// disable all 12 messages in the function svc_process()
+ 		nullarbor:~ # echo -n 'func svc_process -p' >
+ 						<debugfs>/dynamic_debug/ddebug
  
- 	  Disable all modules:
- 
- 		$echo "set enabled=0 all" > dynamic_printk/modules
- 
- 	  Finally, passing "dynamic_printk" at the command line enables
- 	  debugging for all modules. This mode can be turned off via the above
- 	  disable command.
+ 	  See Documentation/dynamic-debug-howto.txt for additional information.
  
 +config DMA_API_DEBUG
 +	bool "Enable debugging of DMA-API usage"
 +	depends on HAVE_DMA_API_DEBUG
 +	help
 +	  Enable this option to debug the use of the DMA API by device drivers.
 +	  With this option you will be able to detect common bugs in device
 +	  drivers like double-freeing of DMA mappings or freeing mappings that
 +	  were never allocated.
 +	  This option causes a performance degredation.  Use only if you want
 +	  to debug device drivers. If unsure, say N.
 +
  source "samples/Kconfig"
  
  source "lib/Kconfig.kgdb"
diff --cc lib/Makefile
index 50b48cf63e4a,051a33a8e028..d6edd6753f40
--- a/lib/Makefile
+++ b/lib/Makefile
@@@ -82,10 -86,10 +86,12 @@@ obj-$(CONFIG_HAVE_LMB) += lmb.
  
  obj-$(CONFIG_HAVE_ARCH_TRACEHOOK) += syscall.o
  
- obj-$(CONFIG_DYNAMIC_PRINTK_DEBUG) += dynamic_printk.o
+ obj-$(CONFIG_DYNAMIC_DEBUG) += dynamic_debug.o
+ 
+ obj-$(CONFIG_NLATTR) += nlattr.o
  
 +obj-$(CONFIG_DMA_API_DEBUG) += dma-debug.o
 +
  hostprogs-y	:= gen_crc32table
  clean-files	:= crc32table.h
  

commit 3fab191002b184e4390aa07c7149c6cc7b638ec7
Merge: 93394a761d78 7c730ccdc118
Author: Ingo Molnar <mingo@elte.hu>
Date:   Sat Mar 28 22:27:45 2009 +0100

    Merge branch 'linus' into x86/core

diff --cc arch/x86/kernel/cpu/intel.c
index b09d4eb52bb9,1a89a2b68d15..7437fa133c02
--- a/arch/x86/kernel/cpu/intel.c
+++ b/arch/x86/kernel/cpu/intel.c
@@@ -54,14 -54,12 +55,17 @@@ static void __cpuinit early_init_intel(
  		c->x86_cache_alignment = 128;
  #endif
  
 +	/* CPUID workaround for 0F33/0F34 CPU */
 +	if (c->x86 == 0xF && c->x86_model == 0x3
 +	    && (c->x86_mask == 0x3 || c->x86_mask == 0x4))
 +		c->x86_phys_bits = 36;
 +
  	/*
  	 * c->x86_power is 8000_0007 edx. Bit 8 is TSC runs at constant rate
- 	 * with P/T states and does not stop in deep C-states
+ 	 * with P/T states and does not stop in deep C-states.
+ 	 *
+ 	 * It is also reliable across cores and sockets. (but not across
+ 	 * cabinets - we turn it off in that case explicitly.)
  	 */
  	if (c->x86_power & (1 << 8)) {
  		set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC);

commit 93394a761d78503f11d05b1a7b23d5a9ccc8dad2
Merge: 70511134f61b 5c8cd82ed7e4 9f4f25c86ff2
Author: Ingo Molnar <mingo@elte.hu>
Date:   Sat Mar 28 22:27:35 2009 +0100

    Merge branches 'x86/apic', 'x86/cleanups' and 'x86/mm' into x86/core

commit 82268da1b130f763d22d04f7d016bbf6fc8815c2
Merge: 6e15cf048600 5d80f8e5a9dc
Author: Ingo Molnar <mingo@elte.hu>
Date:   Sat Mar 28 04:21:18 2009 +0100

    Merge branch 'linus' into percpu-cpumask-x86-for-linus-2
    
    Conflicts:
            arch/sparc/kernel/time_64.c
            drivers/gpu/drm/drm_proc.c
    
    Manual merge to resolve build warning due to phys_addr_t type change
    on x86:
    
            drivers/gpu/drm/drm_info.c
    
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

diff --cc arch/sparc/kernel/time_64.c
index f95066b6f805,4ee2e48c4b39..db310aa00183
--- a/arch/sparc/kernel/time_64.c
+++ b/arch/sparc/kernel/time_64.c
@@@ -36,10 -36,10 +36,10 @@@
  #include <linux/clocksource.h>
  #include <linux/of_device.h>
  #include <linux/platform_device.h>
--#include <linux/irq.h>
  
  #include <asm/oplib.h>
  #include <asm/timer.h>
++#include <asm/irq.h>
  #include <asm/io.h>
  #include <asm/prom.h>
  #include <asm/starfire.h>
diff --cc drivers/gpu/drm/drm_info.c
index 000000000000,fc98952b9033..1b699768ccfb
mode 000000,100644..100644
--- a/drivers/gpu/drm/drm_info.c
+++ b/drivers/gpu/drm/drm_info.c
@@@ -1,0 -1,328 +1,328 @@@
+ /**
+  * \file drm_info.c
+  * DRM info file implementations
+  *
+  * \author Ben Gamari <bgamari@gmail.com>
+  */
+ 
+ /*
+  * Created: Sun Dec 21 13:09:50 2008 by bgamari@gmail.com
+  *
+  * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
+  * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
+  * Copyright 2008 Ben Gamari <bgamari@gmail.com>
+  * All Rights Reserved.
+  *
+  * Permission is hereby granted, free of charge, to any person obtaining a
+  * copy of this software and associated documentation files (the "Software"),
+  * to deal in the Software without restriction, including without limitation
+  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+  * and/or sell copies of the Software, and to permit persons to whom the
+  * Software is furnished to do so, subject to the following conditions:
+  *
+  * The above copyright notice and this permission notice (including the next
+  * paragraph) shall be included in all copies or substantial portions of the
+  * Software.
+  *
+  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+  * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+  * OTHER DEALINGS IN THE SOFTWARE.
+  */
+ 
+ #include <linux/seq_file.h>
+ #include "drmP.h"
+ 
+ /**
+  * Called when "/proc/dri/.../name" is read.
+  *
+  * Prints the device name together with the bus id if available.
+  */
+ int drm_name_info(struct seq_file *m, void *data)
+ {
+ 	struct drm_info_node *node = (struct drm_info_node *) m->private;
+ 	struct drm_minor *minor = node->minor;
+ 	struct drm_device *dev = minor->dev;
+ 	struct drm_master *master = minor->master;
+ 
+ 	if (!master)
+ 		return 0;
+ 
+ 	if (master->unique) {
+ 		seq_printf(m, "%s %s %s\n",
+ 			   dev->driver->pci_driver.name,
+ 			   pci_name(dev->pdev), master->unique);
+ 	} else {
+ 		seq_printf(m, "%s %s\n", dev->driver->pci_driver.name,
+ 			   pci_name(dev->pdev));
+ 	}
+ 
+ 	return 0;
+ }
+ 
+ /**
+  * Called when "/proc/dri/.../vm" is read.
+  *
+  * Prints information about all mappings in drm_device::maplist.
+  */
+ int drm_vm_info(struct seq_file *m, void *data)
+ {
+ 	struct drm_info_node *node = (struct drm_info_node *) m->private;
+ 	struct drm_device *dev = node->minor->dev;
+ 	struct drm_map *map;
+ 	struct drm_map_list *r_list;
+ 
+ 	/* Hardcoded from _DRM_FRAME_BUFFER,
+ 	   _DRM_REGISTERS, _DRM_SHM, _DRM_AGP, and
+ 	   _DRM_SCATTER_GATHER and _DRM_CONSISTENT */
+ 	const char *types[] = { "FB", "REG", "SHM", "AGP", "SG", "PCI" };
+ 	const char *type;
+ 	int i;
+ 
+ 	mutex_lock(&dev->struct_mutex);
+ 	seq_printf(m, "slot	 offset	      size type flags	 address mtrr\n\n");
+ 	i = 0;
+ 	list_for_each_entry(r_list, &dev->maplist, head) {
+ 		map = r_list->map;
+ 		if (!map)
+ 			continue;
+ 		if (map->type < 0 || map->type > 5)
+ 			type = "??";
+ 		else
+ 			type = types[map->type];
+ 
+ 		seq_printf(m, "%4d 0x%08lx 0x%08lx %4.4s  0x%02x 0x%08lx ",
+ 			   i,
+ 			   map->offset,
+ 			   map->size, type, map->flags,
+ 			   (unsigned long) r_list->user_token);
+ 		if (map->mtrr < 0)
+ 			seq_printf(m, "none\n");
+ 		else
+ 			seq_printf(m, "%4d\n", map->mtrr);
+ 		i++;
+ 	}
+ 	mutex_unlock(&dev->struct_mutex);
+ 	return 0;
+ }
+ 
+ /**
+  * Called when "/proc/dri/.../queues" is read.
+  */
+ int drm_queues_info(struct seq_file *m, void *data)
+ {
+ 	struct drm_info_node *node = (struct drm_info_node *) m->private;
+ 	struct drm_device *dev = node->minor->dev;
+ 	int i;
+ 	struct drm_queue *q;
+ 
+ 	mutex_lock(&dev->struct_mutex);
+ 	seq_printf(m, "  ctx/flags   use   fin"
+ 		   "   blk/rw/rwf  wait    flushed	   queued"
+ 		   "      locks\n\n");
+ 	for (i = 0; i < dev->queue_count; i++) {
+ 		q = dev->queuelist[i];
+ 		atomic_inc(&q->use_count);
+ 		seq_printf(m,   "%5d/0x%03x %5d %5d"
+ 			   " %5d/%c%c/%c%c%c %5Zd\n",
+ 			   i,
+ 			   q->flags,
+ 			   atomic_read(&q->use_count),
+ 			   atomic_read(&q->finalization),
+ 			   atomic_read(&q->block_count),
+ 			   atomic_read(&q->block_read) ? 'r' : '-',
+ 			   atomic_read(&q->block_write) ? 'w' : '-',
+ 			   waitqueue_active(&q->read_queue) ? 'r' : '-',
+ 			   waitqueue_active(&q->write_queue) ? 'w' : '-',
+ 			   waitqueue_active(&q->flush_queue) ? 'f' : '-',
+ 			   DRM_BUFCOUNT(&q->waitlist));
+ 		atomic_dec(&q->use_count);
+ 	}
+ 	mutex_unlock(&dev->struct_mutex);
+ 	return 0;
+ }
+ 
+ /**
+  * Called when "/proc/dri/.../bufs" is read.
+  */
+ int drm_bufs_info(struct seq_file *m, void *data)
+ {
+ 	struct drm_info_node *node = (struct drm_info_node *) m->private;
+ 	struct drm_device *dev = node->minor->dev;
+ 	struct drm_device_dma *dma;
+ 	int i, seg_pages;
+ 
+ 	mutex_lock(&dev->struct_mutex);
+ 	dma = dev->dma;
+ 	if (!dma) {
+ 		mutex_unlock(&dev->struct_mutex);
+ 		return 0;
+ 	}
+ 
+ 	seq_printf(m, " o     size count  free	 segs pages    kB\n\n");
+ 	for (i = 0; i <= DRM_MAX_ORDER; i++) {
+ 		if (dma->bufs[i].buf_count) {
+ 			seg_pages = dma->bufs[i].seg_count * (1 << dma->bufs[i].page_order);
+ 			seq_printf(m, "%2d %8d %5d %5d %5d %5d %5ld\n",
+ 				   i,
+ 				   dma->bufs[i].buf_size,
+ 				   dma->bufs[i].buf_count,
+ 				   atomic_read(&dma->bufs[i].freelist.count),
+ 				   dma->bufs[i].seg_count,
+ 				   seg_pages,
+ 				   seg_pages * PAGE_SIZE / 1024);
+ 		}
+ 	}
+ 	seq_printf(m, "\n");
+ 	for (i = 0; i < dma->buf_count; i++) {
+ 		if (i && !(i % 32))
+ 			seq_printf(m, "\n");
+ 		seq_printf(m, " %d", dma->buflist[i]->list);
+ 	}
+ 	seq_printf(m, "\n");
+ 	mutex_unlock(&dev->struct_mutex);
+ 	return 0;
+ }
+ 
+ /**
+  * Called when "/proc/dri/.../vblank" is read.
+  */
+ int drm_vblank_info(struct seq_file *m, void *data)
+ {
+ 	struct drm_info_node *node = (struct drm_info_node *) m->private;
+ 	struct drm_device *dev = node->minor->dev;
+ 	int crtc;
+ 
+ 	mutex_lock(&dev->struct_mutex);
+ 	for (crtc = 0; crtc < dev->num_crtcs; crtc++) {
+ 		seq_printf(m, "CRTC %d enable:     %d\n",
+ 			   crtc, atomic_read(&dev->vblank_refcount[crtc]));
+ 		seq_printf(m, "CRTC %d counter:    %d\n",
+ 			   crtc, drm_vblank_count(dev, crtc));
+ 		seq_printf(m, "CRTC %d last wait:  %d\n",
+ 			   crtc, dev->last_vblank_wait[crtc]);
+ 		seq_printf(m, "CRTC %d in modeset: %d\n",
+ 			   crtc, dev->vblank_inmodeset[crtc]);
+ 	}
+ 	mutex_unlock(&dev->struct_mutex);
+ 	return 0;
+ }
+ 
+ /**
+  * Called when "/proc/dri/.../clients" is read.
+  *
+  */
+ int drm_clients_info(struct seq_file *m, void *data)
+ {
+ 	struct drm_info_node *node = (struct drm_info_node *) m->private;
+ 	struct drm_device *dev = node->minor->dev;
+ 	struct drm_file *priv;
+ 
+ 	mutex_lock(&dev->struct_mutex);
+ 	seq_printf(m, "a dev	pid    uid	magic	  ioctls\n\n");
+ 	list_for_each_entry(priv, &dev->filelist, lhead) {
+ 		seq_printf(m, "%c %3d %5d %5d %10u %10lu\n",
+ 			   priv->authenticated ? 'y' : 'n',
+ 			   priv->minor->index,
+ 			   priv->pid,
+ 			   priv->uid, priv->magic, priv->ioctl_count);
+ 	}
+ 	mutex_unlock(&dev->struct_mutex);
+ 	return 0;
+ }
+ 
+ 
+ int drm_gem_one_name_info(int id, void *ptr, void *data)
+ {
+ 	struct drm_gem_object *obj = ptr;
+ 	struct seq_file *m = data;
+ 
+ 	seq_printf(m, "name %d size %zd\n", obj->name, obj->size);
+ 
+ 	seq_printf(m, "%6d %8zd %7d %8d\n",
+ 		   obj->name, obj->size,
+ 		   atomic_read(&obj->handlecount.refcount),
+ 		   atomic_read(&obj->refcount.refcount));
+ 	return 0;
+ }
+ 
+ int drm_gem_name_info(struct seq_file *m, void *data)
+ {
+ 	struct drm_info_node *node = (struct drm_info_node *) m->private;
+ 	struct drm_device *dev = node->minor->dev;
+ 
+ 	seq_printf(m, "  name     size handles refcount\n");
+ 	idr_for_each(&dev->object_name_idr, drm_gem_one_name_info, m);
+ 	return 0;
+ }
+ 
+ int drm_gem_object_info(struct seq_file *m, void* data)
+ {
+ 	struct drm_info_node *node = (struct drm_info_node *) m->private;
+ 	struct drm_device *dev = node->minor->dev;
+ 
+ 	seq_printf(m, "%d objects\n", atomic_read(&dev->object_count));
+ 	seq_printf(m, "%d object bytes\n", atomic_read(&dev->object_memory));
+ 	seq_printf(m, "%d pinned\n", atomic_read(&dev->pin_count));
+ 	seq_printf(m, "%d pin bytes\n", atomic_read(&dev->pin_memory));
+ 	seq_printf(m, "%d gtt bytes\n", atomic_read(&dev->gtt_memory));
+ 	seq_printf(m, "%d gtt total\n", dev->gtt_total);
+ 	return 0;
+ }
+ 
+ #if DRM_DEBUG_CODE
+ 
+ int drm_vma_info(struct seq_file *m, void *data)
+ {
+ 	struct drm_info_node *node = (struct drm_info_node *) m->private;
+ 	struct drm_device *dev = node->minor->dev;
+ 	struct drm_vma_entry *pt;
+ 	struct vm_area_struct *vma;
+ #if defined(__i386__)
+ 	unsigned int pgprot;
+ #endif
+ 
+ 	mutex_lock(&dev->struct_mutex);
 -	seq_printf(m, "vma use count: %d, high_memory = %p, 0x%08lx\n",
++	seq_printf(m, "vma use count: %d, high_memory = %p, 0x%08llx\n",
+ 		   atomic_read(&dev->vma_count),
 -		   high_memory, virt_to_phys(high_memory));
++		   high_memory, (u64)virt_to_phys(high_memory));
+ 
+ 	list_for_each_entry(pt, &dev->vmalist, head) {
+ 		vma = pt->vma;
+ 		if (!vma)
+ 			continue;
+ 		seq_printf(m,
+ 			   "\n%5d 0x%08lx-0x%08lx %c%c%c%c%c%c 0x%08lx000",
+ 			   pt->pid, vma->vm_start, vma->vm_end,
+ 			   vma->vm_flags & VM_READ ? 'r' : '-',
+ 			   vma->vm_flags & VM_WRITE ? 'w' : '-',
+ 			   vma->vm_flags & VM_EXEC ? 'x' : '-',
+ 			   vma->vm_flags & VM_MAYSHARE ? 's' : 'p',
+ 			   vma->vm_flags & VM_LOCKED ? 'l' : '-',
+ 			   vma->vm_flags & VM_IO ? 'i' : '-',
+ 			   vma->vm_pgoff);
+ 
+ #if defined(__i386__)
+ 		pgprot = pgprot_val(vma->vm_page_prot);
+ 		seq_printf(m, " %c%c%c%c%c%c%c%c%c",
+ 			   pgprot & _PAGE_PRESENT ? 'p' : '-',
+ 			   pgprot & _PAGE_RW ? 'w' : 'r',
+ 			   pgprot & _PAGE_USER ? 'u' : 's',
+ 			   pgprot & _PAGE_PWT ? 't' : 'b',
+ 			   pgprot & _PAGE_PCD ? 'u' : 'c',
+ 			   pgprot & _PAGE_ACCESSED ? 'a' : '-',
+ 			   pgprot & _PAGE_DIRTY ? 'd' : '-',
+ 			   pgprot & _PAGE_PSE ? 'm' : 'k',
+ 			   pgprot & _PAGE_GLOBAL ? 'g' : 'l');
+ #endif
+ 		seq_printf(m, "\n");
+ 	}
+ 	mutex_unlock(&dev->struct_mutex);
+ 	return 0;
+ }
+ 
+ #endif
+ 

commit 6e15cf04860074ad032e88c306bea656bbdd0f22
Merge: be0ea69674ed 60db56422043
Author: Ingo Molnar <mingo@elte.hu>
Date:   Thu Mar 26 21:39:17 2009 +0100

    Merge branch 'core/percpu' into percpu-cpumask-x86-for-linus-2
    
    Conflicts:
            arch/parisc/kernel/irq.c
            arch/x86/include/asm/fixmap_64.h
            arch/x86/include/asm/setup.h
            kernel/irq/handle.c
    
    Semantic merge:
            arch/x86/include/asm/fixmap.h
    
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

diff --cc arch/ia64/kernel/msi_ia64.c
index 368ee4e5266d,dcb6b7c51ea7..2b15e233f7fe
--- a/arch/ia64/kernel/msi_ia64.c
+++ b/arch/ia64/kernel/msi_ia64.c
@@@ -146,11 -183,11 +146,11 @@@ static void dmar_msi_set_affinity(unsig
  
  	msg.data &= ~MSI_DATA_VECTOR_MASK;
  	msg.data |= MSI_DATA_VECTOR(cfg->vector);
 -	msg.address_lo &= ~MSI_ADDR_DESTID_MASK;
 -	msg.address_lo |= MSI_ADDR_DESTID_CPU(cpu_physical_id(cpu));
 +	msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK;
 +	msg.address_lo |= MSI_ADDR_DEST_ID_CPU(cpu_physical_id(cpu));
  
  	dmar_msi_write(irq, &msg);
- 	irq_desc[irq].affinity = *mask;
+ 	cpumask_copy(irq_desc[irq].affinity, mask);
  }
  #endif /* CONFIG_SMP */
  
diff --cc arch/parisc/kernel/irq.c
index adfd617b4c18,49482806863f..1c740f5cbd63
--- a/arch/parisc/kernel/irq.c
+++ b/arch/parisc/kernel/irq.c
@@@ -132,13 -133,10 +132,13 @@@ int cpu_check_affinity(unsigned int irq
  
  static void cpu_set_affinity_irq(unsigned int irq, const struct cpumask *dest)
  {
 -	if (cpu_check_affinity(irq, dest))
 +	int cpu_dest;
 +
 +	cpu_dest = cpu_check_affinity(irq, dest);
 +	if (cpu_dest < 0)
  		return;
  
- 	cpumask_copy(&irq_desc[irq].affinity, &cpumask_of_cpu(cpu_dest));
 -	cpumask_copy(irq_desc[irq].affinity, dest);
++	cpumask_copy(&irq_desc[irq].affinity, dest);
  }
  #endif
  
diff --cc arch/x86/include/asm/fixmap.h
index 23696d44a0af,dca8f03da5b2..63a79c77d220
--- a/arch/x86/include/asm/fixmap.h
+++ b/arch/x86/include/asm/fixmap.h
@@@ -1,11 -14,142 +14,132 @@@
  #ifndef _ASM_X86_FIXMAP_H
  #define _ASM_X86_FIXMAP_H
  
+ #ifndef __ASSEMBLY__
+ #include <linux/kernel.h>
+ #include <asm/acpi.h>
+ #include <asm/apicdef.h>
+ #include <asm/page.h>
+ #ifdef CONFIG_X86_32
+ #include <linux/threads.h>
+ #include <asm/kmap_types.h>
+ #else
+ #include <asm/vsyscall.h>
 -#ifdef CONFIG_EFI
 -#include <asm/efi.h>
 -#endif
+ #endif
+ 
+ /*
+  * We can't declare FIXADDR_TOP as variable for x86_64 because vsyscall
+  * uses fixmaps that relies on FIXADDR_TOP for proper address calculation.
+  * Because of this, FIXADDR_TOP x86 integration was left as later work.
+  */
+ #ifdef CONFIG_X86_32
+ /* used by vmalloc.c, vsyscall.lds.S.
+  *
+  * Leave one empty page between vmalloc'ed areas and
+  * the start of the fixmap.
+  */
+ extern unsigned long __FIXADDR_TOP;
+ #define FIXADDR_TOP	((unsigned long)__FIXADDR_TOP)
+ 
+ #define FIXADDR_USER_START     __fix_to_virt(FIX_VDSO)
+ #define FIXADDR_USER_END       __fix_to_virt(FIX_VDSO - 1)
+ #else
+ #define FIXADDR_TOP	(VSYSCALL_END-PAGE_SIZE)
+ 
+ /* Only covers 32bit vsyscalls currently. Need another set for 64bit. */
+ #define FIXADDR_USER_START	((unsigned long)VSYSCALL32_VSYSCALL)
+ #define FIXADDR_USER_END	(FIXADDR_USER_START + PAGE_SIZE)
+ #endif
+ 
+ 
+ /*
+  * Here we define all the compile-time 'special' virtual
+  * addresses. The point is to have a constant address at
+  * compile time, but to set the physical address only
+  * in the boot process.
+  * for x86_32: We allocate these special addresses
+  * from the end of virtual memory (0xfffff000) backwards.
+  * Also this lets us do fail-safe vmalloc(), we
+  * can guarantee that these special addresses and
+  * vmalloc()-ed addresses never overlap.
+  *
+  * These 'compile-time allocated' memory buffers are
+  * fixed-size 4k pages (or larger if used with an increment
+  * higher than 1). Use set_fixmap(idx,phys) to associate
+  * physical memory with fixmap indices.
+  *
+  * TLB entries of such buffers will not be flushed across
+  * task switches.
+  */
+ enum fixed_addresses {
  #ifdef CONFIG_X86_32
- # include "fixmap_32.h"
+ 	FIX_HOLE,
+ 	FIX_VDSO,
  #else
- # include "fixmap_64.h"
+ 	VSYSCALL_LAST_PAGE,
+ 	VSYSCALL_FIRST_PAGE = VSYSCALL_LAST_PAGE
+ 			    + ((VSYSCALL_END-VSYSCALL_START) >> PAGE_SHIFT) - 1,
+ 	VSYSCALL_HPET,
  #endif
+ 	FIX_DBGP_BASE,
+ 	FIX_EARLYCON_MEM_BASE,
+ #ifdef CONFIG_X86_LOCAL_APIC
+ 	FIX_APIC_BASE,	/* local (CPU) APIC) -- required for SMP or not */
+ #endif
+ #ifdef CONFIG_X86_IO_APIC
+ 	FIX_IO_APIC_BASE_0,
+ 	FIX_IO_APIC_BASE_END = FIX_IO_APIC_BASE_0 + MAX_IO_APICS - 1,
+ #endif
 -#ifdef CONFIG_X86_64
 -#ifdef CONFIG_EFI
 -	FIX_EFI_IO_MAP_LAST_PAGE,
 -	FIX_EFI_IO_MAP_FIRST_PAGE = FIX_EFI_IO_MAP_LAST_PAGE
 -				  + MAX_EFI_IO_PAGES - 1,
 -#endif
 -#endif
+ #ifdef CONFIG_X86_VISWS_APIC
+ 	FIX_CO_CPU,	/* Cobalt timer */
+ 	FIX_CO_APIC,	/* Cobalt APIC Redirection Table */
+ 	FIX_LI_PCIA,	/* Lithium PCI Bridge A */
+ 	FIX_LI_PCIB,	/* Lithium PCI Bridge B */
+ #endif
+ #ifdef CONFIG_X86_F00F_BUG
+ 	FIX_F00F_IDT,	/* Virtual mapping for IDT */
+ #endif
+ #ifdef CONFIG_X86_CYCLONE_TIMER
+ 	FIX_CYCLONE_TIMER, /*cyclone timer register*/
+ #endif
+ #ifdef CONFIG_X86_32
+ 	FIX_KMAP_BEGIN,	/* reserved pte's for temporary kernel mappings */
+ 	FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1,
+ #ifdef CONFIG_PCI_MMCONFIG
+ 	FIX_PCIE_MCFG,
+ #endif
+ #endif
+ #ifdef CONFIG_PARAVIRT
+ 	FIX_PARAVIRT_BOOTMAP,
+ #endif
+ 	__end_of_permanent_fixed_addresses,
+ #ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT
+ 	FIX_OHCI1394_BASE,
+ #endif
+ 	/*
+ 	 * 256 temporary boot-time mappings, used by early_ioremap(),
+ 	 * before ioremap() is functional.
+ 	 *
+ 	 * We round it up to the next 256 pages boundary so that we
+ 	 * can have a single pgd entry and a single pte table:
+ 	 */
+ #define NR_FIX_BTMAPS		64
+ #define FIX_BTMAPS_SLOTS	4
+ 	FIX_BTMAP_END = __end_of_permanent_fixed_addresses + 256 -
+ 			(__end_of_permanent_fixed_addresses & 255),
+ 	FIX_BTMAP_BEGIN = FIX_BTMAP_END + NR_FIX_BTMAPS*FIX_BTMAPS_SLOTS - 1,
+ #ifdef CONFIG_X86_32
+ 	FIX_WP_TEST,
+ #endif
+ 	__end_of_fixed_addresses
+ };
+ 
+ 
+ extern void reserve_top_address(unsigned long reserve);
+ 
+ #define FIXADDR_SIZE	(__end_of_permanent_fixed_addresses << PAGE_SHIFT)
+ #define FIXADDR_BOOT_SIZE	(__end_of_fixed_addresses << PAGE_SHIFT)
+ #define FIXADDR_START		(FIXADDR_TOP - FIXADDR_SIZE)
+ #define FIXADDR_BOOT_START	(FIXADDR_TOP - FIXADDR_BOOT_SIZE)
  
  extern int fixmaps_set;
  
diff --cc arch/x86/kernel/cpu/intel.c
index 5fff00c70de0,25c559ba8d54..1a89a2b68d15
--- a/arch/x86/kernel/cpu/intel.c
+++ b/arch/x86/kernel/cpu/intel.c
@@@ -65,10 -60,20 +64,22 @@@ static void __cpuinit early_init_intel(
  	if (c->x86_power & (1 << 8)) {
  		set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC);
  		set_cpu_cap(c, X86_FEATURE_NONSTOP_TSC);
 +		set_cpu_cap(c, X86_FEATURE_TSC_RELIABLE);
 +		sched_clock_stable = 1;
  	}
  
+ 	/*
+ 	 * There is a known erratum on Pentium III and Core Solo
+ 	 * and Core Duo CPUs.
+ 	 * " Page with PAT set to WC while associated MTRR is UC
+ 	 *   may consolidate to UC "
+ 	 * Because of this erratum, it is better to stick with
+ 	 * setting WC in MTRR rather than using PAT on these CPUs.
+ 	 *
+ 	 * Enable PAT WC only on P4, Core 2 or later CPUs.
+ 	 */
+ 	if (c->x86 == 6 && c->x86_model < 15)
+ 		clear_cpu_cap(c, X86_FEATURE_PAT);
  }
  
  #ifdef CONFIG_X86_32
diff --cc kernel/irq/handle.c
index f6cdda68e5c6,f51eaee921b6..9ebf77968871
--- a/kernel/irq/handle.c
+++ b/kernel/irq/handle.c
@@@ -243,9 -252,8 +255,9 @@@ int __init early_irq_init(void
  
  	for (i = 0; i < count; i++) {
  		desc[i].irq = i;
+ 		init_alloc_desc_masks(&desc[i], 0, true);
 +		desc[i].kstat_irqs = kstat_irqs_all[i];
  	}
- 
  	return arch_early_irq_init();
  }
  
diff --cc kernel/irq/internals.h
index b60950bf5a16,40416a81a0f5..ee1aa9f8e8b9
--- a/kernel/irq/internals.h
+++ b/kernel/irq/internals.h
@@@ -15,9 -15,15 +15,16 @@@ extern int __irq_set_trigger(struct irq
  
  extern struct lock_class_key irq_desc_lock_class;
  extern void init_kstat_irqs(struct irq_desc *desc, int cpu, int nr);
 +extern void clear_kstat_irqs(struct irq_desc *desc);
  extern spinlock_t sparse_irq_lock;
+ 
+ #ifdef CONFIG_SPARSE_IRQ
+ /* irq_desc_ptrs allocated at boot time */
+ extern struct irq_desc **irq_desc_ptrs;
+ #else
+ /* irq_desc_ptrs is a fixed size array */
  extern struct irq_desc *irq_desc_ptrs[NR_IRQS];
+ #endif
  
  #ifdef CONFIG_PROC_FS
  extern void register_irq_proc(unsigned int irq, struct irq_desc *desc);
diff --cc lib/Makefile
index 8bdc647e6d62,790de7c25d0d..051a33a8e028
--- a/lib/Makefile
+++ b/lib/Makefile
@@@ -12,7 -12,7 +12,7 @@@ lib-y := ctype.o string.o vsprintf.o cm
  	 idr.o int_sqrt.o extable.o prio_tree.o \
  	 sha1.o irq_regs.o reciprocal_div.o argv_split.o \
  	 proportions.o prio_heap.o ratelimit.o show_mem.o \
- 	 is_single_threaded.o plist.o
 -	 is_single_threaded.o decompress.o
++	 is_single_threaded.o plist.o decompress.o
  
  lib-$(CONFIG_MMU) += ioremap.o
  lib-$(CONFIG_SMP) += cpumask.o

commit 18ffa418aead13c56515ac74cd26105102128aca
Merge: ab76f3d77159 8e0ee43bc2c3
Author: Ingo Molnar <mingo@elte.hu>
Date:   Thu Mar 26 18:49:48 2009 +0100

    Merge commit 'v2.6.29' into x86/setup-lzma

commit 5a54bd1307471c1cd0521402fe65e2057edcab2f
Merge: f9f35677d81a 8e0ee43bc2c3
Author: Ingo Molnar <mingo@elte.hu>
Date:   Thu Mar 26 18:29:40 2009 +0100

    Merge commit 'v2.6.29' into core/header-fixes

diff --cc arch/ia64/include/asm/kvm.h
index 116761ca462d,bfa86b6af7cd..2b0a38e84705
--- a/arch/ia64/include/asm/kvm.h
+++ b/arch/ia64/include/asm/kvm.h
@@@ -21,9 -21,14 +21,13 @@@
   *
   */
  
 -#include <asm/types.h>
 -
 +#include <linux/types.h>
  #include <linux/ioctl.h>
  
+ /* Select x86 specific features in <linux/kvm.h> */
+ #define __KVM_HAVE_IOAPIC
+ #define __KVM_HAVE_DEVICE_ASSIGNMENT
+ 
  /* Architectural interrupt line count. */
  #define KVM_NR_INTERRUPTS 256
  
diff --cc include/linux/netfilter/xt_NFLOG.h
index eaac7b5226e9,4b36aeb46a10..87b58311ce6b
--- a/include/linux/netfilter/xt_NFLOG.h
+++ b/include/linux/netfilter/xt_NFLOG.h
@@@ -1,10 -1,8 +1,10 @@@
  #ifndef _XT_NFLOG_TARGET
  #define _XT_NFLOG_TARGET
  
 +#include <linux/types.h>
 +
  #define XT_NFLOG_DEFAULT_GROUP		0x1
- #define XT_NFLOG_DEFAULT_THRESHOLD	1
+ #define XT_NFLOG_DEFAULT_THRESHOLD	0
  
  #define XT_NFLOG_MASK			0x0
  

commit 7c526e1fef8d604a9ec022d9145bba5dbfe40a11
Merge: e8684605adf8 74019224ac34 a2a5ac8650b5 37bebc70d7ad
Author: Ingo Molnar <mingo@elte.hu>
Date:   Thu Mar 26 15:45:52 2009 +0100

    Merge branches 'timers/new-apis', 'timers/ntp' and 'timers/urgent' into timers/core

commit e8684605adf87d8e65f64ce7b0274d60a05085bd
Merge: a5ebc0b1a784 c23e253e67c9
Author: Ingo Molnar <mingo@elte.hu>
Date:   Thu Mar 26 15:45:45 2009 +0100

    Merge branch 'timers/hpet' into timers/core