rpms/kernel/devel disable-p4-cpufreq-ui.patch, NONE, 1.3.2.2 drm-intel-gem-x86-64-faster.patch, NONE, 1.1.2.2 linux-2.6-defaults-pciehp.patch, NONE, 1.1.2.2 linux-2.6-dmi-autoload.patch, NONE, 1.1.2.2 linux-2.6-libata-avoid-overflow-with-large-disks.patch, NONE, 1.1.2.2 linux-2.6-pciehp-update.patch, NONE, 1.2.2.2 linux-2.6-selinux-empty-tty-files.patch, NONE, 1.1.2.2 linux-2.6-toshiba-acpi-update.patch, NONE, 1.1.2.2 linux-2.6-x86-mtrr-kill-bogus-warning.patch, NONE, 1.1.2.2 TODO, 1.36, 1.36.2.1 config-generic, 1.189, 1.189.4.1 config-x86-generic, 1.51, 1.51.2.1 config-x86_64-generic, 1.49, 1.49.2.1 drm-modesetting-radeon.patch, 1.47, 1.47.2.1 kernel.spec, 1.1104.2.1, 1.1104.2.2 linux-2.6-acpi-clear-wake-status.patch, 1.1, 1.1.8.1 linux-2.6-acpi-ignore-reset_reg_sup.patch, 1.1, 1.1.2.1 linux-2.6-input-dell-keyboard-keyup.patch, 1.1, 1.1.8.1 linux-2.6-libata-pata_it821x-fix-lba48-on-raid-volumes.patch, 1.2, 1.2.2.1 linux-2.6-x86-xen-add-dependencies.patch, 1.1, NONE

Juan Quintela quintela at fedoraproject.org
Tue Nov 4 13:09:23 UTC 2008


Author: quintela

Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv10896

Modified Files:
      Tag: private-quintela-rawhide-kvm-branch
	TODO config-generic config-x86-generic config-x86_64-generic 
	drm-modesetting-radeon.patch kernel.spec 
	linux-2.6-acpi-clear-wake-status.patch 
	linux-2.6-acpi-ignore-reset_reg_sup.patch 
	linux-2.6-input-dell-keyboard-keyup.patch 
	linux-2.6-libata-pata_it821x-fix-lba48-on-raid-volumes.patch 
Added Files:
      Tag: private-quintela-rawhide-kvm-branch
	disable-p4-cpufreq-ui.patch drm-intel-gem-x86-64-faster.patch 
	linux-2.6-defaults-pciehp.patch linux-2.6-dmi-autoload.patch 
	linux-2.6-libata-avoid-overflow-with-large-disks.patch 
	linux-2.6-pciehp-update.patch 
	linux-2.6-selinux-empty-tty-files.patch 
	linux-2.6-toshiba-acpi-update.patch 
	linux-2.6-x86-mtrr-kill-bogus-warning.patch 
Removed Files:
      Tag: private-quintela-rawhide-kvm-branch
	linux-2.6-x86-xen-add-dependencies.patch 
Log Message:
Update to rawhide kernel-2.6.27.4-78.fc10

disable-p4-cpufreq-ui.patch:

--- NEW FILE disable-p4-cpufreq-ui.patch ---
diff -ur linux-2.6.27.noarch/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c linux-2.6.27.noarch.p4/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c
--- linux-2.6.27.noarch/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c	2008-11-03 17:14:03.000000000 +0000
+++ linux-2.6.27.noarch.p4/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c	2008-11-03 17:18:38.000000000 +0000
@@ -274,6 +274,7 @@
 	.name		= "p4-clockmod",
 	.owner		= THIS_MODULE,
 	.attr		= p4clockmod_attr,
+	.hide_interface	= 1,
 };
 
 
diff -ur linux-2.6.27.noarch/drivers/cpufreq/cpufreq.c linux-2.6.27.noarch.p4/drivers/cpufreq/cpufreq.c
--- linux-2.6.27.noarch/drivers/cpufreq/cpufreq.c	2008-11-03 17:14:03.000000000 +0000
+++ linux-2.6.27.noarch.p4/drivers/cpufreq/cpufreq.c	2008-11-03 17:18:38.000000000 +0000
@@ -754,6 +754,11 @@
 	.release	= cpufreq_sysfs_release,
 };
 
+static struct kobj_type ktype_empty_cpufreq = {
+	.sysfs_ops	= &sysfs_ops,
+	.release	= cpufreq_sysfs_release,
+};
+
 
 /**
  * cpufreq_add_dev - add a CPU device
@@ -876,26 +881,36 @@
 	memcpy(&new_policy, policy, sizeof(struct cpufreq_policy));
 
 	/* prepare interface data */
-	ret = kobject_init_and_add(&policy->kobj, &ktype_cpufreq, &sys_dev->kobj,
-				   "cpufreq");
-	if (ret)
-		goto err_out_driver_exit;
-
-	/* set up files for this cpu device */
-	drv_attr = cpufreq_driver->attr;
-	while ((drv_attr) && (*drv_attr)) {
-		ret = sysfs_create_file(&policy->kobj, &((*drv_attr)->attr));
+	if (!cpufreq_driver->hide_interface) {
+		ret = kobject_init_and_add(&policy->kobj, &ktype_cpufreq,
+					   &sys_dev->kobj, "cpufreq");
 		if (ret)
 			goto err_out_driver_exit;
-		drv_attr++;
-	}
-	if (cpufreq_driver->get) {
-		ret = sysfs_create_file(&policy->kobj, &cpuinfo_cur_freq.attr);
-		if (ret)
-			goto err_out_driver_exit;
-	}
-	if (cpufreq_driver->target) {
-		ret = sysfs_create_file(&policy->kobj, &scaling_cur_freq.attr);
+
+		/* set up files for this cpu device */
+		drv_attr = cpufreq_driver->attr;
+		while ((drv_attr) && (*drv_attr)) {
+			ret = sysfs_create_file(&policy->kobj,
+						&((*drv_attr)->attr));
+			if (ret)
+				goto err_out_driver_exit;
+			drv_attr++;
+		}
+		if (cpufreq_driver->get) {
+			ret = sysfs_create_file(&policy->kobj,
+						&cpuinfo_cur_freq.attr);
+			if (ret)
+				goto err_out_driver_exit;
+		}
+		if (cpufreq_driver->target) {
+			ret = sysfs_create_file(&policy->kobj,
+						&scaling_cur_freq.attr);
+			if (ret)
+				goto err_out_driver_exit;
+		}
+	} else {
+		ret = kobject_init_and_add(&policy->kobj, &ktype_empty_cpufreq,
+					   &sys_dev->kobj, "cpufreq");
 		if (ret)
 			goto err_out_driver_exit;
 	}
diff -ur linux-2.6.27.noarch/include/linux/cpufreq.h linux-2.6.27.noarch.p4/include/linux/cpufreq.h
--- linux-2.6.27.noarch/include/linux/cpufreq.h	2008-11-03 17:14:03.000000000 +0000
+++ linux-2.6.27.noarch.p4/include/linux/cpufreq.h	2008-11-03 17:18:38.000000000 +0000
@@ -234,6 +234,7 @@
 	int	(*suspend)	(struct cpufreq_policy *policy, pm_message_t pmsg);
 	int	(*resume)	(struct cpufreq_policy *policy);
 	struct freq_attr	**attr;
+	bool			hide_interface;
 };
 
 /* flags */

drm-intel-gem-x86-64-faster.patch:

--- NEW FILE drm-intel-gem-x86-64-faster.patch ---
>From 2cd2744e35bd6f0d2dc9f5e3455363617896a85d Mon Sep 17 00:00:00 2001
From: Dave Airlie <airlied at redhat.com>
Date: Mon, 3 Nov 2008 11:07:28 +1000
Subject: [PATCH] intel: make GEM on 64-bit go lots faster rollup

this patch rolls up a number of upstream patches to make GEM on x86-64
useable again.

Signed-off-by: Dave Airlie <airlied at redhat.com>
---
 Documentation/io-mapping.txt    |   76 +++++++++++++++++
 arch/x86/mm/Makefile            |    2 +-
 arch/x86/mm/init_32.c           |    3 +-
 arch/x86/mm/iomap_32.c          |   59 +++++++++++++
 drivers/gpu/drm/i915/i915_drv.h |    3 +
 drivers/gpu/drm/i915/i915_gem.c |  172 +++++++++++++++++++-------------------
 include/asm-x86/fixmap.h        |    4 +
 include/asm-x86/fixmap_32.h     |    4 -
 include/asm-x86/highmem.h       |    5 +-
 include/asm-x86/iomap.h         |   30 +++++++
 include/linux/io-mapping.h      |  118 +++++++++++++++++++++++++++
 11 files changed, 379 insertions(+), 97 deletions(-)
 create mode 100644 Documentation/io-mapping.txt
 create mode 100644 arch/x86/mm/iomap_32.c
 create mode 100644 include/asm-x86/iomap.h
 create mode 100644 include/linux/io-mapping.h

diff --git a/Documentation/io-mapping.txt b/Documentation/io-mapping.txt
new file mode 100644
index 0000000..cd2f726
--- /dev/null
+++ b/Documentation/io-mapping.txt
@@ -0,0 +1,76 @@
+The io_mapping functions in linux/io-mapping.h provide an abstraction for
+efficiently mapping small regions of an I/O device to the CPU. The initial
+usage is to support the large graphics aperture on 32-bit processors where
+ioremap_wc cannot be used to statically map the entire aperture to the CPU
+as it would consume too much of the kernel address space.
+
+A mapping object is created during driver initialization using
+
+	struct io_mapping *io_mapping_create_wc(unsigned long base,
+						unsigned long size)
+
+		'base' is the bus address of the region to be made
+		mappable, while 'size' indicates how large a mapping region to
+		enable. Both are in bytes.
+
+		This _wc variant provides a mapping which may only be used
+		with the io_mapping_map_atomic_wc or io_mapping_map_wc.
+
+With this mapping object, individual pages can be mapped either atomically
+or not, depending on the necessary scheduling environment. Of course, atomic
+maps are more efficient:
+
+	void *io_mapping_map_atomic_wc(struct io_mapping *mapping,
+				       unsigned long offset)
+
+		'offset' is the offset within the defined mapping region.
+		Accessing addresses beyond the region specified in the
+		creation function yields undefined results. Using an offset
+		which is not page aligned yields an undefined result. The
+		return value points to a single page in CPU address space.
+
+		This _wc variant returns a write-combining map to the
+		page and may only be used with mappings created by
+		io_mapping_create_wc
+
+		Note that the task may not sleep while holding this page
+		mapped.
+
+	void io_mapping_unmap_atomic(void *vaddr)
+
+		'vaddr' must be the the value returned by the last
+		io_mapping_map_atomic_wc call. This unmaps the specified
+		page and allows the task to sleep once again.
+
+If you need to sleep while holding the lock, you can use the non-atomic
+variant, although they may be significantly slower.
+
+	void *io_mapping_map_wc(struct io_mapping *mapping,
+				unsigned long offset)
+
+		This works like io_mapping_map_atomic_wc except it allows
+		the task to sleep while holding the page mapped.
+
+	void io_mapping_unmap(void *vaddr)
+
+		This works like io_mapping_unmap_atomic, except it is used
+		for pages mapped with io_mapping_map_wc.
+
+At driver close time, the io_mapping object must be freed:
+
+	void io_mapping_free(struct io_mapping *mapping)
+
+Current Implementation:
+
+The initial implementation of these functions uses existing mapping
+mechanisms and so provides only an abstraction layer and no new
+functionality.
+
+On 64-bit processors, io_mapping_create_wc calls ioremap_wc for the whole
+range, creating a permanent kernel-visible mapping to the resource. The
+map_atomic and map functions add the requested offset to the base of the
+virtual address returned by ioremap_wc.
+
+On 32-bit processors, io_mapping_map_atomic_wc uses io_map_atomic_prot_pfn,
+which uses the fixmaps to get us a mapping to a page using an atomic fashion.
+For io_mapping_map_wc, ioremap_wc() is used to get a mapping of the region.
diff --git a/arch/x86/mm/Makefile b/arch/x86/mm/Makefile
index dfb932d..4c66da6 100644
--- a/arch/x86/mm/Makefile
+++ b/arch/x86/mm/Makefile
@@ -1,7 +1,7 @@
 obj-y	:=  init_$(BITS).o fault.o ioremap.o extable.o pageattr.o mmap.o \
 	    pat.o pgtable.o gup.o
 
-obj-$(CONFIG_X86_32)		+= pgtable_32.o
+obj-$(CONFIG_X86_32)		+= pgtable_32.o iomap_32.o
 
 obj-$(CONFIG_HUGETLB_PAGE)	+= hugetlbpage.o
 obj-$(CONFIG_X86_PTDUMP)	+= dump_pagetables.o
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
index 60ec1d0..f0ef7f6 100644
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -277,7 +277,6 @@ int devmem_is_allowed(unsigned long pagenr)
 	return 0;
 }
 
-#ifdef CONFIG_HIGHMEM
 pte_t *kmap_pte;
 pgprot_t kmap_prot;
 
@@ -300,6 +299,7 @@ static void __init kmap_init(void)
 	kmap_prot = PAGE_KERNEL;
 }
 
+#ifdef CONFIG_HIGHMEM
 static void __init permanent_kmaps_init(pgd_t *pgd_base)
 {
 	unsigned long vaddr;
@@ -379,7 +379,6 @@ static void __init set_highmem_pages_init(void)
 #endif /* !CONFIG_NUMA */
 
 #else
-# define kmap_init()				do { } while (0)
 # define permanent_kmaps_init(pgd_base)		do { } while (0)
 # define set_highmem_pages_init()	do { } while (0)
 #endif /* CONFIG_HIGHMEM */
diff --git a/arch/x86/mm/iomap_32.c b/arch/x86/mm/iomap_32.c
new file mode 100644
index 0000000..91c8cd2
--- /dev/null
+++ b/arch/x86/mm/iomap_32.c
@@ -0,0 +1,59 @@
+/*
+ * Copyright © 2008 Ingo Molnar
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+#include <asm/iomap.h>
+#include <linux/module.h>
+
+/* Map 'pfn' using fixed map 'type' and protections 'prot'
+ */
+void *
+iomap_atomic_prot_pfn(unsigned long pfn, enum km_type type, pgprot_t prot)
+{
+	enum fixed_addresses idx;
+	unsigned long vaddr;
+
+	pagefault_disable();
+
+	idx = type + KM_TYPE_NR*smp_processor_id();
+	vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
+	set_pte(kmap_pte-idx, pfn_pte(pfn, prot));
+	arch_flush_lazy_mmu_mode();
+
+	return (void*) vaddr;
+}
+EXPORT_SYMBOL_GPL(iomap_atomic_prot_pfn);
+
+void
+iounmap_atomic(void *kvaddr, enum km_type type)
+{
+	unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK;
+	enum fixed_addresses idx = type + KM_TYPE_NR*smp_processor_id();
+
+	/*
+	 * Force other mappings to Oops if they'll try to access this pte
+	 * without first remap it.  Keeping stale mappings around is a bad idea
+	 * also, in case the page changes cacheability attributes or becomes
+	 * a protected page in a hypervisor.
+	 */
+	if (vaddr == __fix_to_virt(FIX_KMAP_BEGIN+idx))
+		kpte_clear_flush(kmap_pte-idx, vaddr);
+
+	arch_flush_lazy_mmu_mode();
+	pagefault_enable();
+}
+EXPORT_SYMBOL_GPL(iounmap_atomic);
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index a5adcf6..24bafee 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -31,6 +31,7 @@
 #define _I915_DRV_H_
 
 #include "i915_reg.h"
+#include <linux/io-mapping.h>
 
 /* General customization:
  */
@@ -246,6 +247,8 @@ typedef struct drm_i915_private {
 	struct {
 		struct drm_mm gtt_space;
 
+		struct io_mapping *gtt_mapping;
+
 		/**
 		 * List of objects currently involved in rendering from the
 		 * ringbuffer.
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 8ba67ee..7e8ddc6 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -171,21 +171,64 @@ i915_gem_pread_ioctl(struct drm_device *dev, void *data,
 	return 0;
 }
 
+/* This is the fast write path which cannot handle
+ * page faults in the source data
+ */
+
+static inline int
+fast_user_write(struct io_mapping *mapping,
+		loff_t page_base, int page_offset,
+		char __user *user_data,
+		int length)
+{
+	char *vaddr_atomic;
+	unsigned long unwritten;
+
+	vaddr_atomic = io_mapping_map_atomic_wc(mapping, page_base);
+	unwritten = __copy_from_user_inatomic_nocache(vaddr_atomic + page_offset,
+						      user_data, length);
+	io_mapping_unmap_atomic(vaddr_atomic);
+	if (unwritten)
+		return -EFAULT;
+	return 0;
+}
+
+/* Here's the write path which can sleep for
+ * page faults
+ */
+
+static inline int
+slow_user_write(struct io_mapping *mapping,
+		loff_t page_base, int page_offset,
+		char __user *user_data,
+		int length)
+{
+	char __iomem *vaddr;
+	unsigned long unwritten;
+
+	vaddr = io_mapping_map_wc(mapping, page_base);
+	if (vaddr == NULL)
+		return -EFAULT;
+	unwritten = __copy_from_user(vaddr + page_offset,
+				     user_data, length);
+	io_mapping_unmap(vaddr);
+	if (unwritten)
+		return -EFAULT;
+	return 0;
+}
+
 static int
 i915_gem_gtt_pwrite(struct drm_device *dev, struct drm_gem_object *obj,
 		    struct drm_i915_gem_pwrite *args,
 		    struct drm_file *file_priv)
 {
 	struct drm_i915_gem_object *obj_priv = obj->driver_private;
+	drm_i915_private_t *dev_priv = dev->dev_private;
 	ssize_t remain;
-	loff_t offset;
+	loff_t offset, page_base;
 	char __user *user_data;
-	char __iomem *vaddr;
-	char *vaddr_atomic;
-	int i, o, l;
-	int ret = 0;
-	unsigned long pfn;
-	unsigned long unwritten;
+	int page_offset, page_length;
+	int ret;
 
 	user_data = (char __user *) (uintptr_t) args->data_ptr;
 	remain = args->size;
@@ -211,67 +254,35 @@ i915_gem_gtt_pwrite(struct drm_device *dev, struct drm_gem_object *obj,
 	while (remain > 0) {
 		/* Operation in this page
 		 *
-		 * i = page number
-		 * o = offset within page
-		 * l = bytes to copy
+		 * page_base = page offset within aperture
+		 * page_offset = offset within page
+		 * page_length = bytes to copy for this page
 		 */
-		i = offset >> PAGE_SHIFT;
-		o = offset & (PAGE_SIZE-1);
-		l = remain;
-		if ((o + l) > PAGE_SIZE)
-			l = PAGE_SIZE - o;
-
-		pfn = (dev->agp->base >> PAGE_SHIFT) + i;
-
-#ifdef CONFIG_HIGHMEM
-		/* This is a workaround for the low performance of iounmap
-		 * (approximate 10% cpu cost on normal 3D workloads).
-		 * kmap_atomic on HIGHMEM kernels happens to let us map card
-		 * memory without taking IPIs.  When the vmap rework lands
-		 * we should be able to dump this hack.
+		page_base = (offset & ~(PAGE_SIZE-1));
+		page_offset = offset & (PAGE_SIZE-1);
+		page_length = remain;
+		if ((page_offset + remain) > PAGE_SIZE)
+			page_length = PAGE_SIZE - page_offset;
+
+		ret = fast_user_write (dev_priv->mm.gtt_mapping, page_base,
+				       page_offset, user_data, page_length);
+
+		/* If we get a fault while copying data, then (presumably) our
+		 * source page isn't available. In this case, use the
+		 * non-atomic function
 		 */
-		vaddr_atomic = kmap_atomic_pfn(pfn, KM_USER0);
-#if WATCH_PWRITE
-		DRM_INFO("pwrite i %d o %d l %d pfn %ld vaddr %p\n",
-			 i, o, l, pfn, vaddr_atomic);
-#endif
-		unwritten = __copy_from_user_inatomic_nocache(vaddr_atomic + o,
-							      user_data, l);
-		kunmap_atomic(vaddr_atomic, KM_USER0);
-
-		if (unwritten)
-#endif /* CONFIG_HIGHMEM */
-		{
-			vaddr = ioremap_wc(pfn << PAGE_SHIFT, PAGE_SIZE);
-#if WATCH_PWRITE
-			DRM_INFO("pwrite slow i %d o %d l %d "
-				 "pfn %ld vaddr %p\n",
-				 i, o, l, pfn, vaddr);
-#endif
-			if (vaddr == NULL) {
-				ret = -EFAULT;
-				goto fail;
-			}
-			unwritten = __copy_from_user(vaddr + o, user_data, l);
-#if WATCH_PWRITE
-			DRM_INFO("unwritten %ld\n", unwritten);
-#endif
-			iounmap(vaddr);
-			if (unwritten) {
-				ret = -EFAULT;
+		if (ret) {
+			ret = slow_user_write (dev_priv->mm.gtt_mapping,
+					       page_base, page_offset,
+					       user_data, page_length);
+			if (ret)
 				goto fail;
-			}
 		}
 
-		remain -= l;
-		user_data += l;
-		offset += l;
+		remain -= page_length;
+		user_data += page_length;
+		offset += page_length;
 	}
-#if WATCH_PWRITE && 1
-	i915_gem_clflush_object(obj);
-	i915_gem_dump_object(obj, args->offset + args->size, __func__, ~0);
-	i915_gem_clflush_object(obj);
-#endif
 
 fail:
 	i915_gem_object_unpin(obj);
@@ -1489,12 +1500,12 @@ i915_gem_object_pin_and_relocate(struct drm_gem_object *obj,
 				 struct drm_i915_gem_exec_object *entry)
 {
 	struct drm_device *dev = obj->dev;
+	drm_i915_private_t *dev_priv = dev->dev_private;
 	struct drm_i915_gem_relocation_entry reloc;
 	struct drm_i915_gem_relocation_entry __user *relocs;
 	struct drm_i915_gem_object *obj_priv = obj->driver_private;
 	int i, ret;
-	uint32_t last_reloc_offset = -1;
-	void __iomem *reloc_page = NULL;
+	void __iomem *reloc_page;
 
 	/* Choose the GTT offset for our buffer and put it there. */
 	ret = i915_gem_object_pin(obj, (uint32_t) entry->alignment);
@@ -1617,26 +1628,11 @@ i915_gem_object_pin_and_relocate(struct drm_gem_object *obj,
 		 * perform.
 		 */
 		reloc_offset = obj_priv->gtt_offset + reloc.offset;
-		if (reloc_page == NULL ||
-		    (last_reloc_offset & ~(PAGE_SIZE - 1)) !=
-		    (reloc_offset & ~(PAGE_SIZE - 1))) {
-			if (reloc_page != NULL)
-				iounmap(reloc_page);
-
-			reloc_page = ioremap_wc(dev->agp->base +
-						(reloc_offset &
-						 ~(PAGE_SIZE - 1)),
-						PAGE_SIZE);
-			last_reloc_offset = reloc_offset;
-			if (reloc_page == NULL) {
-				drm_gem_object_unreference(target_obj);
-				i915_gem_object_unpin(obj);
-				return -ENOMEM;
-			}
-		}
-
+		reloc_page = io_mapping_map_atomic_wc(dev_priv->mm.gtt_mapping,
+						      (reloc_offset &
+						       ~(PAGE_SIZE - 1)));
 		reloc_entry = (uint32_t __iomem *)(reloc_page +
-					   (reloc_offset & (PAGE_SIZE - 1)));
+						   (reloc_offset & (PAGE_SIZE - 1)));
 		reloc_val = target_obj_priv->gtt_offset + reloc.delta;
 
 #if WATCH_BUF
@@ -1645,6 +1641,7 @@ i915_gem_object_pin_and_relocate(struct drm_gem_object *obj,
 			  readl(reloc_entry), reloc_val);
 #endif
 		writel(reloc_val, reloc_entry);
+		io_mapping_unmap_atomic(reloc_page);
 
 		/* Write the updated presumed offset for this entry back out
 		 * to the user.
@@ -1660,9 +1657,6 @@ i915_gem_object_pin_and_relocate(struct drm_gem_object *obj,
 		drm_gem_object_unreference(target_obj);
 	}
 
-	if (reloc_page != NULL)
-		iounmap(reloc_page);
-
 #if WATCH_BUF
 	if (0)
 		i915_gem_dump_object(obj, 128, __func__, ~0);
@@ -2527,6 +2521,10 @@ i915_gem_entervt_ioctl(struct drm_device *dev, void *data,
 	if (ret != 0)
 		return ret;
 
+	dev_priv->mm.gtt_mapping = io_mapping_create_wc(dev->agp->base,
+							dev->agp->agp_info.aper_size
+							* 1024 * 1024);
+
 	mutex_lock(&dev->struct_mutex);
 	BUG_ON(!list_empty(&dev_priv->mm.active_list));
 	BUG_ON(!list_empty(&dev_priv->mm.flushing_list));
@@ -2544,11 +2542,13 @@ int
 i915_gem_leavevt_ioctl(struct drm_device *dev, void *data,
 		       struct drm_file *file_priv)
 {
+	drm_i915_private_t *dev_priv = dev->dev_private;
 	int ret;
 
 	ret = i915_gem_idle(dev);
 	drm_irq_uninstall(dev);
 
+	io_mapping_free(dev_priv->mm.gtt_mapping);
 	return ret;
 }
 
diff --git a/include/asm-x86/fixmap.h b/include/asm-x86/fixmap.h
index 44d4f82..fe871a0 100644
--- a/include/asm-x86/fixmap.h
+++ b/include/asm-x86/fixmap.h
@@ -9,6 +9,10 @@
 
 extern int fixmaps_set;
 
+extern pte_t *kmap_pte;
+extern pgprot_t kmap_prot;
+extern pte_t *pkmap_page_table;
+
 void __native_set_fixmap(enum fixed_addresses idx, pte_t pte);
 void native_set_fixmap(enum fixed_addresses idx,
 		       unsigned long phys, pgprot_t flags);
diff --git a/include/asm-x86/fixmap_32.h b/include/asm-x86/fixmap_32.h
index f1ac2b2..fc46b75 100644
--- a/include/asm-x86/fixmap_32.h
+++ b/include/asm-x86/fixmap_32.h
@@ -28,10 +28,8 @@ extern unsigned long __FIXADDR_TOP;
 #include <asm/acpi.h>
 #include <asm/apicdef.h>
 #include <asm/page.h>
-#ifdef CONFIG_HIGHMEM
 #include <linux/threads.h>
 #include <asm/kmap_types.h>
-#endif
 
 /*
  * Here we define all the compile-time 'special' virtual
@@ -75,10 +73,8 @@ enum fixed_addresses {
 #ifdef CONFIG_X86_CYCLONE_TIMER
 	FIX_CYCLONE_TIMER, /*cyclone timer register*/
 #endif
-#ifdef CONFIG_HIGHMEM
 	FIX_KMAP_BEGIN,	/* reserved pte's for temporary kernel mappings */
 	FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1,
-#endif
 #ifdef CONFIG_PCI_MMCONFIG
 	FIX_PCIE_MCFG,
 #endif
diff --git a/include/asm-x86/highmem.h b/include/asm-x86/highmem.h
index 4514b16..ebe3027 100644
--- a/include/asm-x86/highmem.h
+++ b/include/asm-x86/highmem.h
@@ -25,14 +25,11 @@
 #include <asm/kmap_types.h>
 #include <asm/tlbflush.h>
 #include <asm/paravirt.h>
+#include <asm/fixmap.h>
 
 /* declarations for highmem.c */
 extern unsigned long highstart_pfn, highend_pfn;
 
-extern pte_t *kmap_pte;
-extern pgprot_t kmap_prot;
-extern pte_t *pkmap_page_table;
-
 /*
  * Right now we initialize only a single pte table. It can be extended
  * easily, subsequent pte tables have to be allocated in one physical
diff --git a/include/asm-x86/iomap.h b/include/asm-x86/iomap.h
new file mode 100644
index 0000000..0af9068
--- /dev/null
+++ b/include/asm-x86/iomap.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright © 2008 Ingo Molnar
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+#include <linux/fs.h>
+#include <linux/mm.h>
+#include <linux/uaccess.h>
+#include <asm/cacheflush.h>
+#include <asm/pgtable.h>
+#include <asm/tlbflush.h>
+
+void *
+iomap_atomic_prot_pfn(unsigned long pfn, enum km_type type, pgprot_t prot);
+
+void
+iounmap_atomic(void *kvaddr, enum km_type type);
diff --git a/include/linux/io-mapping.h b/include/linux/io-mapping.h
new file mode 100644
index 0000000..fff44fd
--- /dev/null
+++ b/include/linux/io-mapping.h
@@ -0,0 +1,118 @@
+/*
+ * Copyright © 2008 Keith Packard <keithp at keithp.com>
+ *
+ * This file is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _LINUX_IO_MAPPING_H
+#define _LINUX_IO_MAPPING_H
+
+#include <linux/types.h>
+#include <asm/io.h>
+#include <asm/page.h>
+#include <asm/iomap.h>
+
+/*
+ * The io_mapping mechanism provides an abstraction for mapping
+ * individual pages from an io device to the CPU in an efficient fashion.
+ *
+ * See Documentation/io_mapping.txt
+ */
+
+/* this struct isn't actually defined anywhere */
+struct io_mapping;
+
+#ifdef CONFIG_X86_64
+
+/* Create the io_mapping object*/
+static inline struct io_mapping *
+io_mapping_create_wc(unsigned long base, unsigned long size)
+{
+	return (struct io_mapping *) ioremap_wc(base, size);
+}
+
+static inline void
+io_mapping_free(struct io_mapping *mapping)
+{
+	iounmap(mapping);
+}
+
+/* Atomic map/unmap */
+static inline void *
+io_mapping_map_atomic_wc(struct io_mapping *mapping, unsigned long offset)
+{
+	return ((char *) mapping) + offset;
+}
+
+static inline void
+io_mapping_unmap_atomic(void *vaddr)
+{
+}
+
+/* Non-atomic map/unmap */
+static inline void *
+io_mapping_map_wc(struct io_mapping *mapping, unsigned long offset)
+{
+	return ((char *) mapping) + offset;
+}
+
+static inline void
+io_mapping_unmap(void *vaddr)
+{
+}
+
+#endif /* CONFIG_X86_64 */
+
+#ifdef CONFIG_X86_32
+static inline struct io_mapping *
+io_mapping_create_wc(unsigned long base, unsigned long size)
+{
+	return (struct io_mapping *) base;
+}
+
+static inline void
+io_mapping_free(struct io_mapping *mapping)
+{
+}
+
+/* Atomic map/unmap */
+static inline void *
+io_mapping_map_atomic_wc(struct io_mapping *mapping, unsigned long offset)
+{
+	offset += (unsigned long) mapping;
+	return iomap_atomic_prot_pfn(offset >> PAGE_SHIFT, KM_USER0,
+				     __pgprot(__PAGE_KERNEL_WC));
+}
+
+static inline void
+io_mapping_unmap_atomic(void *vaddr)
+{
+	iounmap_atomic(vaddr, KM_USER0);
+}
+
+static inline void *
+io_mapping_map_wc(struct io_mapping *mapping, unsigned long offset)
+{
+	offset += (unsigned long) mapping;
+	return ioremap_wc(offset, PAGE_SIZE);
+}
+
+static inline void
+io_mapping_unmap(void *vaddr)
+{
+	iounmap(vaddr);
+}
+#endif /* CONFIG_X86_32 */
+
+#endif /* _LINUX_IO_MAPPING_H */
-- 
1.5.5.1


linux-2.6-defaults-pciehp.patch:

--- NEW FILE linux-2.6-defaults-pciehp.patch ---
diff --git a/drivers/pci/hotplug/pciehp_core.c b/drivers/pci/hotplug/pciehp_core.c
index e7f3c9e..4f2b037 100644
--- a/drivers/pci/hotplug/pciehp_core.c
+++ b/drivers/pci/hotplug/pciehp_core.c
@@ -41,7 +41,7 @@ int pciehp_debug;
 int pciehp_poll_mode;
 int pciehp_poll_time;
 int pciehp_force;
-int pciehp_passive;
+int pciehp_passive=1;
 struct workqueue_struct *pciehp_wq;
 
 #define DRIVER_VERSION	"0.4"

linux-2.6-dmi-autoload.patch:

--- NEW FILE linux-2.6-dmi-autoload.patch ---
diff --git a/include/linux/dmi.h b/include/linux/dmi.h
index 2a063b6..e5084eb 100644
--- a/include/linux/dmi.h
+++ b/include/linux/dmi.h
@@ -2,29 +2,9 @@
 #define __DMI_H__
 
 #include <linux/list.h>
+#include <linux/mod_devicetable.h>
 
-enum dmi_field {
-	DMI_NONE,
-	DMI_BIOS_VENDOR,
-	DMI_BIOS_VERSION,
-	DMI_BIOS_DATE,
-	DMI_SYS_VENDOR,
-	DMI_PRODUCT_NAME,
-	DMI_PRODUCT_VERSION,
-	DMI_PRODUCT_SERIAL,
-	DMI_PRODUCT_UUID,
-	DMI_BOARD_VENDOR,
-	DMI_BOARD_NAME,
-	DMI_BOARD_VERSION,
-	DMI_BOARD_SERIAL,
-	DMI_BOARD_ASSET_TAG,
-	DMI_CHASSIS_VENDOR,
-	DMI_CHASSIS_TYPE,
-	DMI_CHASSIS_VERSION,
-	DMI_CHASSIS_SERIAL,
-	DMI_CHASSIS_ASSET_TAG,
-	DMI_STRING_MAX,
-};
+/* enum dmi_field is in mod_devicetable.h */
 
 enum dmi_device_type {
 	DMI_DEV_TYPE_ANY = 0,
@@ -48,23 +28,6 @@ struct dmi_header {
 	u16 handle;
 };
 
-/*
- *	DMI callbacks for problem boards
- */
-struct dmi_strmatch {
-	u8 slot;
-	char *substr;
-};
-
-struct dmi_system_id {
-	int (*callback)(const struct dmi_system_id *);
-	const char *ident;
-	struct dmi_strmatch matches[4];
-	void *driver_data;
-};
-
-#define DMI_MATCH(a, b)	{ a, b }
-
 struct dmi_device {
 	struct list_head list;
 	int type;
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
index c4db582..3481a7d 100644
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@ -388,5 +388,52 @@ struct i2c_device_id {
 			__attribute__((aligned(sizeof(kernel_ulong_t))));
 };
 
+/* dmi */
+enum dmi_field {
+	DMI_NONE,
+	DMI_BIOS_VENDOR,
+	DMI_BIOS_VERSION,
+	DMI_BIOS_DATE,
+	DMI_SYS_VENDOR,
+	DMI_PRODUCT_NAME,
+	DMI_PRODUCT_VERSION,
+	DMI_PRODUCT_SERIAL,
+	DMI_PRODUCT_UUID,
+	DMI_BOARD_VENDOR,
+	DMI_BOARD_NAME,
+	DMI_BOARD_VERSION,
+	DMI_BOARD_SERIAL,
+	DMI_BOARD_ASSET_TAG,
+	DMI_CHASSIS_VENDOR,
+	DMI_CHASSIS_TYPE,
+	DMI_CHASSIS_VERSION,
+	DMI_CHASSIS_SERIAL,
+	DMI_CHASSIS_ASSET_TAG,
+	DMI_STRING_MAX,
+};
+
+struct dmi_strmatch {
+	unsigned char slot;
+	char substr[79];
+};
+
+#ifndef __KERNEL__
+struct dmi_system_id {
+	kernel_ulong_t callback;
+	kernel_ulong_t ident;
+	struct dmi_strmatch matches[4];
+	kernel_ulong_t driver_data
+			__attribute__((aligned(sizeof(kernel_ulong_t))));
+};
+#else
+struct dmi_system_id {
+	int (*callback)(const struct dmi_system_id *);
+	const char *ident;
+	struct dmi_strmatch matches[4];
+	void *driver_data;
+};
+#endif
+
+#define DMI_MATCH(a, b)	{ a, b }
 
 #endif /* LINUX_MOD_DEVICETABLE_H */
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
index 4c9890e..473f94e 100644
--- a/scripts/mod/file2alias.c
+++ b/scripts/mod/file2alias.c
@@ -629,6 +629,59 @@ static int do_i2c_entry(const char *filename, struct i2c_device_id *id,
 	return 1;
 }
 
+static const struct dmifield {
+	const char *prefix;
+	int field;
+} dmi_fields[] = {
+	{ "bvn", DMI_BIOS_VENDOR },
+	{ "bvr", DMI_BIOS_VERSION },
+	{ "bd",  DMI_BIOS_DATE },
+	{ "svn", DMI_SYS_VENDOR },
+	{ "pn",  DMI_PRODUCT_NAME },
+	{ "pvr", DMI_PRODUCT_VERSION },
+	{ "rvn", DMI_BOARD_VENDOR },
+	{ "rn",  DMI_BOARD_NAME },
+	{ "rvr", DMI_BOARD_VERSION },
+	{ "cvn", DMI_CHASSIS_VENDOR },
+	{ "ct",  DMI_CHASSIS_TYPE },
+	{ "cvr", DMI_CHASSIS_VERSION },
+	{ NULL,  DMI_NONE }
+};
+
+static void dmi_ascii_filter(char *d, const char *s)
+{
+	/* Filter out characters we don't want to see in the modalias string */
+	for (; *s; s++)
+		if (*s > ' ' && *s < 127 && *s != ':')
+			*(d++) = *s;
+
+	*d = 0;
+}
+
+
+static int do_dmi_entry(const char *filename, struct dmi_system_id *id,
+			char *alias)
+{
+	int i, j;
+
+	sprintf(alias, "dmi*");
+
+	for (i = 0; i < ARRAY_SIZE(dmi_fields); i++) {
+		for (j = 0; j < 4; j++) {
+			if (id->matches[j].slot &&
+			    id->matches[j].slot == dmi_fields[i].field) {
+				sprintf(alias + strlen(alias), ":%s*",
+					dmi_fields[i].prefix);
+				dmi_ascii_filter(alias + strlen(alias),
+						 id->matches[j].substr);
+				strcat(alias, "*");
+			}
+		}
+	}
+
+	strcat(alias, ":");
+	return 1;
+}
 /* Ignore any prefix, eg. some architectures prepend _ */
 static inline int sym_is(const char *symbol, const char *name)
 {
@@ -760,6 +813,10 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,
 		do_table(symval, sym->st_size,
 			 sizeof(struct i2c_device_id), "i2c",
 			 do_i2c_entry, mod);
+	else if (sym_is(symname, "__mod_dmi_device_table"))
+		do_table(symval, sym->st_size,
+			 sizeof(struct dmi_system_id), "dmi",
+			 do_dmi_entry, mod);
 	free(zeros);
 }
 
diff --git a/drivers/video/backlight/mbp_nvidia_bl.c b/drivers/video/backlight/mbp_nvidia_bl.c
index 385cba4..06964af 100644
--- a/drivers/video/backlight/mbp_nvidia_bl.c
+++ b/drivers/video/backlight/mbp_nvidia_bl.c
@@ -111,6 +111,4 @@ module_exit(mbp_exit);
 MODULE_AUTHOR("Matthew Garrett <mjg at redhat.com>");
 MODULE_DESCRIPTION("Nvidia-based Macbook Pro Backlight Driver");
 MODULE_LICENSE("GPL");
-MODULE_ALIAS("svnAppleInc.:pnMacBookPro3,1");
-MODULE_ALIAS("svnAppleInc.:pnMacBookPro3,2");
-MODULE_ALIAS("svnAppleInc.:pnMacBookPro4,1");
+MODULE_DEVICE_TABLE(dmi, mbp_device_table);

linux-2.6-libata-avoid-overflow-with-large-disks.patch:

--- NEW FILE linux-2.6-libata-avoid-overflow-with-large-disks.patch ---
From: Roland Dreier <rdreier at cisco.com>
Date: Tue, 28 Oct 2008 23:52:20 +0000 (-0700)
Subject: libata: Avoid overflow in ata_tf_to_lba48() when tf->hba_lbal > 127
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fjgarzik%2Flibata-dev.git;a=commitdiff_plain;h=ba14a9c291aa867896a90b3571fcc1c3759942ff

libata: Avoid overflow in ata_tf_to_lba48() when tf->hba_lbal > 127

In ata_tf_to_lba48(), when evaluating

	(tf->hob_lbal & 0xff) << 24

the expression is promoted to signed int (since int can hold all values
of u8).  However, if hob_lbal is 128 or more, then it is treated as a
negative signed value and sign-extended when promoted to u64 to | into
sectors, which leads to the MSB 32 bits of section getting set
incorrectly.

For example, Phillip O'Donnell <phillip.odonnell at gmail.com> reported
that a 1.5GB drive caused:

    ata3.00: HPA detected: current 2930277168, native 18446744072344861488

where 2930277168 == 0xAEA87B30 and 18446744072344861488 == 0xffffffffaea87b30
which shows the problem when hob_lbal is 0xae.

Fix this by adding a cast to u64, just as is used by for hob_lbah and
hob_lbam in the function.

Reported-by: Phillip O'Donnell <phillip.odonnell at gmail.com>
Signed-off-by: Roland Dreier <rolandd at cisco.com>
Signed-off-by: Jeff Garzik <jgarzik at redhat.com>
---

diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index e398df1..8824c8d 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -1268,7 +1268,7 @@ u64 ata_tf_to_lba48(const struct ata_taskfile *tf)
 
 	sectors |= ((u64)(tf->hob_lbah & 0xff)) << 40;
 	sectors |= ((u64)(tf->hob_lbam & 0xff)) << 32;
-	sectors |= (tf->hob_lbal & 0xff) << 24;
+	sectors |= ((u64)(tf->hob_lbal & 0xff)) << 24;
 	sectors |= (tf->lbah & 0xff) << 16;
 	sectors |= (tf->lbam & 0xff) << 8;
 	sectors |= (tf->lbal & 0xff);

linux-2.6-pciehp-update.patch:

--- NEW FILE linux-2.6-pciehp-update.patch ---
diff -ur vanilla-2.6.27/drivers/pci/hotplug/pciehp_core.c linux-2.6.27.noarch.p4/drivers/pci/hotplug/pciehp_core.c
--- vanilla-2.6.27/drivers/pci/hotplug/pciehp_core.c	2008-10-09 23:13:53.000000000 +0100
+++ linux-2.6.27.noarch.p4/drivers/pci/hotplug/pciehp_core.c	2008-11-03 18:51:51.000000000 +0000
@@ -41,6 +41,7 @@
 int pciehp_poll_mode;
 int pciehp_poll_time;
 int pciehp_force;
+int pciehp_passive;
 struct workqueue_struct *pciehp_wq;
 
 #define DRIVER_VERSION	"0.4"
@@ -50,15 +51,18 @@
 MODULE_AUTHOR(DRIVER_AUTHOR);
 MODULE_DESCRIPTION(DRIVER_DESC);
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("acpi*:PNP0A08:*");
 
 module_param(pciehp_debug, bool, 0644);
 module_param(pciehp_poll_mode, bool, 0644);
 module_param(pciehp_poll_time, int, 0644);
 module_param(pciehp_force, bool, 0644);
+module_param(pciehp_passive, bool, 0644);
 MODULE_PARM_DESC(pciehp_debug, "Debugging mode enabled or not");
 MODULE_PARM_DESC(pciehp_poll_mode, "Using polling mechanism for hot-plug events or not");
 MODULE_PARM_DESC(pciehp_poll_time, "Polling mechanism frequency, in seconds");
 MODULE_PARM_DESC(pciehp_force, "Force pciehp, even if _OSC and OSHP are missing");
+MODULE_PARM_DESC(pciehp_force, "Listen for pciehp events, even if _OSC and OSHP are missing");
 
 #define PCIE_MODULE_NAME "pciehp"
 
@@ -85,6 +89,13 @@
   	.get_cur_bus_speed =	get_cur_bus_speed,
 };
 
+static struct hotplug_slot_ops pciehp_passive_hotplug_slot_ops = {
+	.owner =                THIS_MODULE,
+	.get_adapter_status =   get_adapter_status,
+	.get_max_bus_speed =    get_max_bus_speed,
+	.get_cur_bus_speed =    get_cur_bus_speed,
+};
+
 /*
  * Check the status of the Electro Mechanical Interlock (EMI)
  */
@@ -208,7 +219,11 @@
 		hotplug_slot->name = slot->name;
 		hotplug_slot->private = slot;
 		hotplug_slot->release = &release_slot;
-		hotplug_slot->ops = &pciehp_hotplug_slot_ops;
+		if (pciehp_passive &&
+		    pciehp_get_hp_hw_control_from_firmware(ctrl->pci_dev))
+			hotplug_slot->ops = &pciehp_passive_hotplug_slot_ops;
+		else
+			hotplug_slot->ops = &pciehp_hotplug_slot_ops;
 		get_power_status(hotplug_slot, &info->power_status);
 		get_attention_status(hotplug_slot, &info->attention_status);
 		get_latch_status(hotplug_slot, &info->latch_status);
@@ -401,10 +416,7 @@
 	u8 value;
 	struct pci_dev *pdev = dev->port;
 
-	if (pciehp_force)
-		dbg("Bypassing BIOS check for pciehp use on %s\n",
-		    pci_name(pdev));
-	else if (pciehp_get_hp_hw_control_from_firmware(pdev))
+	if (!pciehp_passive && pciehp_get_hp_hw_control_from_firmware(pdev))
 		goto err_out_none;
 
 	ctrl = pcie_init(dev);
@@ -468,7 +480,7 @@
 static int pciehp_resume (struct pcie_device *dev)
 {
 	printk("%s ENTRY\n", __func__);
-	if (pciehp_force) {
+	if (pciehp_force || pciehp_passive) {
 		struct controller *ctrl = get_service_data(dev);
 		struct slot *t_slot;
 		u8 status;
diff -ur vanilla-2.6.27/drivers/pci/hotplug/pciehp.h linux-2.6.27.noarch.p4/drivers/pci/hotplug/pciehp.h
--- vanilla-2.6.27/drivers/pci/hotplug/pciehp.h	2008-10-09 23:13:53.000000000 +0100
+++ linux-2.6.27.noarch.p4/drivers/pci/hotplug/pciehp.h	2008-11-03 16:53:57.000000000 +0000
@@ -206,6 +206,10 @@
 {
 	u32 flags = (OSC_PCI_EXPRESS_NATIVE_HP_CONTROL |
 		     OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL);
+	if (pciehp_force) {
+		dev_info(&dev->dev, "Bypassing BIOS check for pciehp\n");
+		return 0;
+	}
 	return acpi_get_hp_hw_control_from_firmware(dev, flags);
 }
 

linux-2.6-selinux-empty-tty-files.patch:

--- NEW FILE linux-2.6-selinux-empty-tty-files.patch ---
From: Eric Paris <eparis at redhat.com>
Date: Fri, 31 Oct 2008 21:40:00 +0000 (-0400)
Subject: SELinux: properly handle empty tty_files list
X-Git-Tag: v2.6.28-rc3~17^2
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=37dd0bd04a3240d2922786d501e2f12cec858fbf

SELinux: properly handle empty tty_files list

SELinux has wrongly (since 2004) had an incorrect test for an empty
tty->tty_files list.  With an empty list selinux would be pointing to part
of the tty struct itself and would then proceed to dereference that value
and again dereference that result.  An F10 change to plymouth on a ppc64
system is actually currently triggering this bug.  This patch uses
list_empty() to handle empty lists rather than looking at a meaningless
location.

[note, this fixes the oops reported in
https://bugzilla.redhat.com/show_bug.cgi?id=469079]

Signed-off-by: Eric Paris <eparis at redhat.com>
Signed-off-by: James Morris <jmorris at namei.org>
---

diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index 3e3fde7..f85597a 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -2126,14 +2126,16 @@ static inline void flush_unauthorized_files(struct files_struct *files)
 	tty = get_current_tty();
 	if (tty) {
 		file_list_lock();
-		file = list_entry(tty->tty_files.next, typeof(*file), f_u.fu_list);
-		if (file) {
+		if (!list_empty(&tty->tty_files)) {
+			struct inode *inode;
+
 			/* Revalidate access to controlling tty.
 			   Use inode_has_perm on the tty inode directly rather
 			   than using file_has_perm, as this particular open
 			   file may belong to another process and we are only
 			   interested in the inode-based check here. */
-			struct inode *inode = file->f_path.dentry->d_inode;
+			file = list_first_entry(&tty->tty_files, struct file, f_u.fu_list);
+			inode = file->f_path.dentry->d_inode;
 			if (inode_has_perm(current, inode,
 					   FILE__READ | FILE__WRITE, NULL)) {
 				drop_tty = 1;

linux-2.6-toshiba-acpi-update.patch:

--- NEW FILE linux-2.6-toshiba-acpi-update.patch ---
diff --git a/drivers/acpi/toshiba_acpi.c b/drivers/acpi/toshiba_acpi.c
index 0a43c8e..66aac06 100644
--- a/drivers/acpi/toshiba_acpi.c
+++ b/drivers/acpi/toshiba_acpi.c
@@ -3,6 +3,7 @@
  *
  *
  *  Copyright (C) 2002-2004 John Belmonte
+ *  Copyright (C) 2008 Philip Langdale
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -33,7 +34,7 @@
  *
  */
 
-#define TOSHIBA_ACPI_VERSION	"0.18"
+#define TOSHIBA_ACPI_VERSION	"0.19"
 #define PROC_INTERFACE_VERSION	1
 
 #include <linux/kernel.h>
@@ -42,6 +43,9 @@
 #include <linux/types.h>
 #include <linux/proc_fs.h>
 #include <linux/backlight.h>
+#include <linux/platform_device.h>
+#include <linux/rfkill.h>
+#include <linux/input-polldev.h>
 
 #include <asm/uaccess.h>
 
@@ -90,6 +94,7 @@ MODULE_LICENSE("GPL");
 #define HCI_VIDEO_OUT			0x001c
 #define HCI_HOTKEY_EVENT		0x001e
 #define HCI_LCD_BRIGHTNESS		0x002a
+#define HCI_WIRELESS			0x0056
 
 /* field definitions */
 #define HCI_LCD_BRIGHTNESS_BITS		3
@@ -98,9 +103,14 @@ MODULE_LICENSE("GPL");
 #define HCI_VIDEO_OUT_LCD		0x1
 #define HCI_VIDEO_OUT_CRT		0x2
 #define HCI_VIDEO_OUT_TV		0x4
+#define HCI_WIRELESS_KILL_SWITCH	0x01
+#define HCI_WIRELESS_BT_PRESENT		0x0f
+#define HCI_WIRELESS_BT_ATTACH		0x40
+#define HCI_WIRELESS_BT_POWER		0x80
 
 static const struct acpi_device_id toshiba_device_ids[] = {
 	{"TOS6200", 0},
+	{"TOS6208", 0},
 	{"TOS1900", 0},
 	{"", 0},
 };
@@ -193,7 +203,7 @@ static acpi_status hci_raw(const u32 in[HCI_WORDS], u32 out[HCI_WORDS])
 	return status;
 }
 
-/* common hci tasks (get or set one value)
+/* common hci tasks (get or set one or two value)
  *
  * In addition to the ACPI status, the HCI system returns a result which
  * may be useful (such as "not supported").
@@ -218,6 +228,153 @@ static acpi_status hci_read1(u32 reg, u32 * out1, u32 * result)
 	return status;
 }
 
+static acpi_status hci_write2(u32 reg, u32 in1, u32 in2, u32 *result)
+{
+	u32 in[HCI_WORDS] = { HCI_SET, reg, in1, in2, 0, 0 };
+	u32 out[HCI_WORDS];
+	acpi_status status = hci_raw(in, out);
+	*result = (status == AE_OK) ? out[0] : HCI_FAILURE;
+	return status;
+}
+
+static acpi_status hci_read2(u32 reg, u32 *out1, u32 *out2, u32 *result)
+{
+	u32 in[HCI_WORDS] = { HCI_GET, reg, *out1, *out2, 0, 0 };
+	u32 out[HCI_WORDS];
+	acpi_status status = hci_raw(in, out);
+	*out1 = out[2];
+	*out2 = out[3];
+	*result = (status == AE_OK) ? out[0] : HCI_FAILURE;
+	return status;
+}
+
+struct toshiba_acpi_dev {
+	struct platform_device *p_dev;
+	struct rfkill *rfk_dev;
+	struct input_polled_dev *poll_dev;
+
+	const char *bt_name;
+	const char *rfk_name;
+
+	bool last_rfk_state;
+
+	struct mutex mutex;
+};
+
+static struct toshiba_acpi_dev toshiba_acpi = {
+	.bt_name = "Toshiba Bluetooth",
+	.rfk_name = "Toshiba RFKill Switch",
+	.last_rfk_state = false,
+};
+
+/* Bluetooth rfkill handlers */
+
+static u32 hci_get_bt_present(bool *present)
+{
+	u32 hci_result;
+	u32 value, value2;
+
+	value = 0;
+	value2 = 0;
+	hci_read2(HCI_WIRELESS, &value, &value2, &hci_result);
+	if (hci_result == HCI_SUCCESS)
+		*present = (value & HCI_WIRELESS_BT_PRESENT) ? true : false;
+
+	return hci_result;
+}
+
+static u32 hci_get_bt_on(bool *on)
+{
+	u32 hci_result;
+	u32 value, value2;
+
+	value = 0;
+	value2 = 0x0001;
+	hci_read2(HCI_WIRELESS, &value, &value2, &hci_result);
+	if (hci_result == HCI_SUCCESS)
+		*on = (value & HCI_WIRELESS_BT_POWER) &&
+		      (value & HCI_WIRELESS_BT_ATTACH);
+
+	return hci_result;
+}
+
+static u32 hci_get_radio_state(bool *radio_state)
+{
+	u32 hci_result;
+	u32 value, value2;
+
+	value = 0;
+	value2 = 0x0001;
+	hci_read2(HCI_WIRELESS, &value, &value2, &hci_result);
+
+	*radio_state = value & HCI_WIRELESS_KILL_SWITCH;
+	return hci_result;
+}
+
+static int bt_rfkill_toggle_radio(void *data, enum rfkill_state state)
+{
+	u32 result1, result2;
+	u32 value;
+	bool radio_state;
+	struct toshiba_acpi_dev *dev = data;
+
+	value = (state == RFKILL_STATE_UNBLOCKED);
+
+	if (hci_get_radio_state(&radio_state) != HCI_SUCCESS)
+		return -EFAULT;
+
+	switch (state) {
+	case RFKILL_STATE_UNBLOCKED:
+		if (!radio_state)
+			return -EPERM;
+		break;
+	case RFKILL_STATE_SOFT_BLOCKED:
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	mutex_lock(&dev->mutex);
+	hci_write2(HCI_WIRELESS, value, HCI_WIRELESS_BT_POWER, &result1);
+	hci_write2(HCI_WIRELESS, value, HCI_WIRELESS_BT_ATTACH, &result2);
+	mutex_unlock(&dev->mutex);
+
+	if (result1 != HCI_SUCCESS || result2 != HCI_SUCCESS)
+		return -EFAULT;
+
+	return 0;
+}
+
+static void bt_poll_rfkill(struct input_polled_dev *poll_dev)
+{
+	bool state_changed;
+	bool new_rfk_state;
+	bool value;
+	u32 hci_result;
+	struct toshiba_acpi_dev *dev = poll_dev->private;
+
+	hci_result = hci_get_radio_state(&value);
+	if (hci_result != HCI_SUCCESS)
+		return; /* Can't do anything useful */
+
+	new_rfk_state = value;
+
+	mutex_lock(&dev->mutex);
+	state_changed = new_rfk_state != dev->last_rfk_state;
+	dev->last_rfk_state = new_rfk_state;
+	mutex_unlock(&dev->mutex);
+
+	if (unlikely(state_changed)) {
+		rfkill_force_state(dev->rfk_dev,
+				   new_rfk_state ?
+				   RFKILL_STATE_SOFT_BLOCKED :
+				   RFKILL_STATE_HARD_BLOCKED);
+		input_report_switch(poll_dev->input, SW_RFKILL_ALL,
+				    new_rfk_state);
+		input_sync(poll_dev->input);
+	}
+}
+
 static struct proc_dir_entry *toshiba_proc_dir /*= 0*/ ;
 static struct backlight_device *toshiba_backlight_device;
 static int force_fan;
@@ -392,7 +549,7 @@ static unsigned long write_video(const char *buffer, unsigned long count)
 
 	hci_read1(HCI_VIDEO_OUT, &video_out, &hci_result);
 	if (hci_result == HCI_SUCCESS) {
-		int new_video_out = video_out;
+		unsigned int new_video_out = video_out;
 		if (lcd_out != -1)
 			_set_bit(&new_video_out, HCI_VIDEO_OUT_LCD, lcd_out);
 		if (crt_out != -1)
@@ -547,6 +704,14 @@ static struct backlight_ops toshiba_backlight_data = {
 
 static void toshiba_acpi_exit(void)
 {
+	if (toshiba_acpi.poll_dev) {
+		input_unregister_polled_device(toshiba_acpi.poll_dev);
+		input_free_polled_device(toshiba_acpi.poll_dev);
+	}
+
+	if (toshiba_acpi.rfk_dev)
+		rfkill_unregister(toshiba_acpi.rfk_dev);
+
 	if (toshiba_backlight_device)
 		backlight_device_unregister(toshiba_backlight_device);
 
@@ -555,6 +720,8 @@ static void toshiba_acpi_exit(void)
 	if (toshiba_proc_dir)
 		remove_proc_entry(PROC_TOSHIBA, acpi_root_dir);
 
+	platform_device_unregister(toshiba_acpi.p_dev);
+
 	return;
 }
 
@@ -562,6 +729,10 @@ static int __init toshiba_acpi_init(void)
 {
 	acpi_status status = AE_OK;
 	u32 hci_result;
+	bool bt_present;
+	bool bt_on;
+	bool radio_on;
+	int ret = 0;
 
 	if (acpi_disabled)
 		return -ENODEV;
@@ -578,6 +749,18 @@ static int __init toshiba_acpi_init(void)
 	       TOSHIBA_ACPI_VERSION);
 	printk(MY_INFO "    HCI method: %s\n", method_hci);
 
+	mutex_init(&toshiba_acpi.mutex);
+
+	toshiba_acpi.p_dev = platform_device_register_simple("toshiba_acpi",
+							      -1, NULL, 0);
+	if (IS_ERR(toshiba_acpi.p_dev)) {
+		ret = PTR_ERR(toshiba_acpi.p_dev);
+		printk(MY_ERR "unable to register platform device\n");
+		toshiba_acpi.p_dev = NULL;
+		toshiba_acpi_exit();
+		return ret;
+	}
+
 	force_fan = 0;
 	key_event_valid = 0;
 
@@ -586,19 +769,23 @@ static int __init toshiba_acpi_init(void)
 
 	toshiba_proc_dir = proc_mkdir(PROC_TOSHIBA, acpi_root_dir);
 	if (!toshiba_proc_dir) {
-		status = AE_ERROR;
+		toshiba_acpi_exit();
+		return -ENODEV;
 	} else {
 		toshiba_proc_dir->owner = THIS_MODULE;
 		status = add_device();
-		if (ACPI_FAILURE(status))
-			remove_proc_entry(PROC_TOSHIBA, acpi_root_dir);
+		if (ACPI_FAILURE(status)) {
+			toshiba_acpi_exit();
+			return -ENODEV;
+		}
 	}
 
-	toshiba_backlight_device = backlight_device_register("toshiba",NULL,
+	toshiba_backlight_device = backlight_device_register("toshiba",
+						&toshiba_acpi.p_dev->dev,
 						NULL,
 						&toshiba_backlight_data);
         if (IS_ERR(toshiba_backlight_device)) {
-		int ret = PTR_ERR(toshiba_backlight_device);
+		ret = PTR_ERR(toshiba_backlight_device);
 
 		printk(KERN_ERR "Could not register toshiba backlight device\n");
 		toshiba_backlight_device = NULL;
@@ -607,7 +794,67 @@ static int __init toshiba_acpi_init(void)
 	}
         toshiba_backlight_device->props.max_brightness = HCI_LCD_BRIGHTNESS_LEVELS - 1;
 
-	return (ACPI_SUCCESS(status)) ? 0 : -ENODEV;
+	/* Register rfkill switch for Bluetooth */
+	if (hci_get_bt_present(&bt_present) == HCI_SUCCESS && bt_present) {
+		toshiba_acpi.rfk_dev = rfkill_allocate(&toshiba_acpi.p_dev->dev,
+							RFKILL_TYPE_BLUETOOTH);
+		if (!toshiba_acpi.rfk_dev) {
+			printk(MY_ERR "unable to allocate rfkill device\n");
+			toshiba_acpi_exit();
+			return -ENOMEM;
+		}
+
+		toshiba_acpi.rfk_dev->name = toshiba_acpi.bt_name;
+		toshiba_acpi.rfk_dev->toggle_radio = bt_rfkill_toggle_radio;
+		toshiba_acpi.rfk_dev->user_claim_unsupported = 1;
+		toshiba_acpi.rfk_dev->data = &toshiba_acpi;
+
+		if (hci_get_bt_on(&bt_on) == HCI_SUCCESS && bt_on) {
+			toshiba_acpi.rfk_dev->state = RFKILL_STATE_UNBLOCKED;
+		} else if (hci_get_radio_state(&radio_on) == HCI_SUCCESS &&
+			   radio_on) {
+			toshiba_acpi.rfk_dev->state = RFKILL_STATE_SOFT_BLOCKED;
+		} else {
+			toshiba_acpi.rfk_dev->state = RFKILL_STATE_HARD_BLOCKED;
+		}
+
+		ret = rfkill_register(toshiba_acpi.rfk_dev);
+		if (ret) {
+			printk(MY_ERR "unable to register rfkill device\n");
+			toshiba_acpi_exit();
+			return -ENOMEM;
+		}
+	}
+
+	/* Register input device for kill switch */
+	toshiba_acpi.poll_dev = input_allocate_polled_device();
+	if (!toshiba_acpi.poll_dev) {
+		printk(MY_ERR "unable to allocate kill-switch input device\n");
+		toshiba_acpi_exit();
+		return -ENOMEM;
+	}
+	toshiba_acpi.poll_dev->private = &toshiba_acpi;
+	toshiba_acpi.poll_dev->poll = bt_poll_rfkill;
+	toshiba_acpi.poll_dev->poll_interval = 1000; /* msecs */
+
+	toshiba_acpi.poll_dev->input->name = toshiba_acpi.rfk_name;
+	toshiba_acpi.poll_dev->input->id.bustype = BUS_HOST;
+	toshiba_acpi.poll_dev->input->id.vendor = 0x0930; /* Toshiba USB ID */
+	set_bit(EV_SW, toshiba_acpi.poll_dev->input->evbit);
+	set_bit(SW_RFKILL_ALL, toshiba_acpi.poll_dev->input->swbit);
+	input_report_switch(toshiba_acpi.poll_dev->input, SW_RFKILL_ALL, TRUE);
+	input_sync(toshiba_acpi.poll_dev->input);
+
+	ret = input_register_polled_device(toshiba_acpi.poll_dev);
+	if (ret) {
+		printk(MY_ERR "unable to register kill-switch input device\n");
+		rfkill_free(toshiba_acpi.rfk_dev);
+		toshiba_acpi.rfk_dev = NULL;
+		toshiba_acpi_exit();
+		return ret;
+	}
+
+	return 0;
 }
 
 module_init(toshiba_acpi_init);

linux-2.6-x86-mtrr-kill-bogus-warning.patch:

--- NEW FILE linux-2.6-x86-mtrr-kill-bogus-warning.patch ---
Kill bogus MTRR warning when running under vmware:

https://bugzilla.redhat.com/show_bug.cgi?id=468845

Index: linux-2.6.27.noarch/arch/x86/kernel/cpu/mtrr/main.c
===================================================================
--- linux-2.6.27.noarch.orig/arch/x86/kernel/cpu/mtrr/main.c
+++ linux-2.6.27.noarch/arch/x86/kernel/cpu/mtrr/main.c
@@ -1495,11 +1495,8 @@ int __init mtrr_trim_uncached_memory(uns
 	}
 
 	/* kvm/qemu doesn't have mtrr set right, don't trim them all */
-	if (!highest_pfn) {
-		WARN(!kvm_para_available(), KERN_WARNING
-				"WARNING: strange, CPU MTRRs all blank?\n");
+	if (!highest_pfn)
 		return 0;
-	}
 
 	/* check entries number */
 	memset(num, 0, sizeof(num));


Index: TODO
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/TODO,v
retrieving revision 1.36
retrieving revision 1.36.2.1
diff -u -r1.36 -r1.36.2.1
--- TODO	28 Oct 2008 02:12:22 -0000	1.36
+++ TODO	4 Nov 2008 13:09:22 -0000	1.36.2.1
@@ -14,21 +14,24 @@
 
 linux-2.6-acpi-clear-wake-status.patch
 linux-2.6-input-dell-keyboard-keyup.patch
+	Upstream in 2.6.28-rc, sent to -stable
+
 linux-2.6-eeepc-laptop-update.patch
-	mjg59 ACPI/laptop bits.
-	Upstreamable for 2.6.28 ?
+	Upstream but slightly different (commit a195dcdc)
 
 linux-2.6-acpi-ignore-reset_reg_sup.patch
 	Fixes reboot after suspend/resume (https://bugzilla.redhat.com/show_bug.cgi?id=461228)
-	Upstream in .28rc1
+	Upstream in .28rc1, sent to stable
 
 linux-2.6-at76.patch
-linux-2.6-iwlwifi-use-dma_alloc_coherent.patch
-linux-2.6-wireless.patch
-linux-2.6-wireless-pending.patch
+linux-2.6-iwl3945-ibss-tsf-fix.patch
+linux-2.6-iwlagn-downgrade-BUG_ON-in-interrupt.patch
 	Linville.  Wireless bits.
 	Most should be upstream for 2.6.28
 
+linux-2.6-hostap-skb-cb-hack.patch
+	"A HORRIBLE HACK THAT SHOULD NOT LIVE TO SEE THE DAY"
+
 linux-2.6-ata-quirk.patch
 	IA64 oddness. Query sent to f-k-l
 
@@ -78,9 +81,6 @@
 	Fedora policy decisions
 	Turn into CONFIG_ options and upstream ?
 
-linux-2.6-defaults-fat-utf8.patch
-	Drop?
-
 linux-2.6-defaults-pci_no_msi.patch
 linux-2.6-input-kill-stupid-messages.patch
 	Fedora local choices uninteresting to upstream
@@ -183,8 +183,7 @@
 	The drm patch should be fixed up to not conflict with the upstream patch.
 
 linux-2.6-libata-pata_it821x-fix-lba48-on-raid-volumes.patch
-	from linux-kernel, acked by Alan, seems to have gone missing
-	submitted to linux-ide 2008-10-26
+	upstream, sent for -stable
 
 linux-2.6-usb-storage-unusual-devs-jmicron-ata-bridge.patch
 	sent for stable
@@ -204,3 +203,6 @@
 linux-2.6-olpc-speaker-out.patch
 	Enables speaker output by default on OLPC, going to get review from
 	OLPC folks and then to upstream for .28
+
+linux-2.6-x86-mtrr-kill-bogus-warning.patch
+	Silence bogus warning under vmware ; sent upstream.


Index: config-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-generic,v
retrieving revision 1.189
retrieving revision 1.189.4.1
diff -u -r1.189 -r1.189.4.1
--- config-generic	24 Oct 2008 01:59:54 -0000	1.189
+++ config-generic	4 Nov 2008 13:09:22 -0000	1.189.4.1
@@ -297,7 +297,7 @@
 # CONFIG_PNPBIOS is not set
 
 CONFIG_ACPI_PCI_SLOT=y
-CONFIG_HOTPLUG_PCI_ACPI=m
+CONFIG_HOTPLUG_PCI_ACPI=y
 CONFIG_HOTPLUG_PCI_ACPI_IBM=m
 
 #


Index: config-x86-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-x86-generic,v
retrieving revision 1.51
retrieving revision 1.51.2.1
diff -u -r1.51 -r1.51.2.1
--- config-x86-generic	27 Oct 2008 17:12:32 -0000	1.51
+++ config-x86-generic	4 Nov 2008 13:09:22 -0000	1.51.2.1
@@ -187,7 +187,7 @@
 CONFIG_X86_SPEEDSTEP_SMI=y
 CONFIG_X86_SPEEDSTEP_LIB=y
 # CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK is not set
-# CONFIG_X86_P4_CLOCKMOD is not set
+CONFIG_X86_P4_CLOCKMOD=m
 CONFIG_X86_LONGRUN=y
 # CONFIG_X86_LONGHAUL is not set
 # CONFIG_X86_CPUFREQ_NFORCE2 is not set


Index: config-x86_64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-x86_64-generic,v
retrieving revision 1.49
retrieving revision 1.49.2.1
diff -u -r1.49 -r1.49.2.1
--- config-x86_64-generic	30 Oct 2008 02:23:18 -0000	1.49
+++ config-x86_64-generic	4 Nov 2008 13:09:22 -0000	1.49.2.1
@@ -14,7 +14,7 @@
 CONFIG_NR_CPUS=64
 CONFIG_X86_POWERNOW_K8=m
 CONFIG_X86_POWERNOW_K8_ACPI=y
-# CONFIG_X86_P4_CLOCKMOD is not set
+CONFIG_X86_P4_CLOCKMOD=m 
 CONFIG_IA32_EMULATION=y
 # CONFIG_IA32_AOUT is not set
 # CONFIG_IOMMU_DEBUG is not set

drm-modesetting-radeon.patch:

Index: drm-modesetting-radeon.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/drm-modesetting-radeon.patch,v
retrieving revision 1.47
retrieving revision 1.47.2.1
diff -u -r1.47 -r1.47.2.1
--- drm-modesetting-radeon.patch	30 Oct 2008 04:05:00 -0000	1.47
+++ drm-modesetting-radeon.patch	4 Nov 2008 13:09:22 -0000	1.47.2.1
@@ -1,3 +1,15 @@
+commit 96b17b8573d9d8d9507602c9dfb0a1b87e6ff1f5
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Mon Nov 3 09:56:02 2008 +1100
+
+    radeon: if modesetting state is unknown make it known so pm-utils can use it
+
+commit 73487c9e856db6613b465827372ac618dca4447e
+Author: Dave Airlie <airlied at redhat.com>
+Date:   Fri Oct 31 14:40:12 2008 +1000
+
+    radeon: fix ROP values for the paint ROP
+
 commit 6c478ab791fd0242bf7abf871570d1af0c2285a9
 Author: Dave Airlie <airlied at redhat.com>
 Date:   Thu Oct 30 14:00:39 2008 +1000
@@ -21047,10 +21059,10 @@
 +}
 diff --git a/drivers/gpu/drm/radeon/radeon_buffer.c b/drivers/gpu/drm/radeon/radeon_buffer.c
 new file mode 100644
-index 0000000..571a0b9
+index 0000000..f047b1a
 --- /dev/null
 +++ b/drivers/gpu/drm/radeon/radeon_buffer.c
-@@ -0,0 +1,452 @@
+@@ -0,0 +1,453 @@
 +/**************************************************************************
 + * 
 + * Copyright 2007 Dave Airlie
@@ -21307,7 +21319,8 @@
 +			 RADEON_GMC_DST_CLIPPING |
 +			 RADEON_GMC_BRUSH_SOLID_COLOR |
 +			 (format << 8) |
-+			 RADEON_ROP3_S |
++			 RADEON_ROP3_P |
++			 RADEON_CLR_CMP_SRC_SOURCE |
 +			 RADEON_GMC_CLR_CMP_CNTL_DIS | RADEON_GMC_WR_MSK_DIS);
 +		OUT_RING((pitch << 22) | (dst_offset >> 10)); // PITCH
 +		OUT_RING(0);   // SC_TOP_LEFT // DST CLIPPING
@@ -23293,7 +23306,7 @@
 +	return NULL;
 +}
 diff --git a/drivers/gpu/drm/radeon/radeon_cp.c b/drivers/gpu/drm/radeon/radeon_cp.c
-index 59a2132..2dc0c7e 100644
+index 59a2132..f3810bc 100644
 --- a/drivers/gpu/drm/radeon/radeon_cp.c
 +++ b/drivers/gpu/drm/radeon/radeon_cp.c
 @@ -31,6 +31,7 @@
@@ -24865,22 +24878,26 @@
  	switch (flags & RADEON_FAMILY_MASK) {
  	case CHIP_R100:
  	case CHIP_RV200:
-@@ -1743,6 +2670,14 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
+@@ -1743,6 +2670,18 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
  		break;
  	}
  
 +	/* FEDORA HACKS - don't enable modesetting on pre-r300
 + 	 * until we have a mesa driver in place
 + 	 */
-+	if ((radeon_modeset == -1) && (dev_priv->chip_family <= CHIP_RV280)) {
-+		dev->driver->driver_features &= ~DRIVER_MODESET;
-+		drm_put_minor(&dev->control);
++	if (radeon_modeset == -1) {
++		if (dev_priv->chip_family <= CHIP_RV280) {
++			dev->driver->driver_features &= ~DRIVER_MODESET;
++			drm_put_minor(&dev->control);
++			radeon_modeset = 0;
++		} else
++			radeon_modeset = 1;
 +	}
 +
  	if (drm_device_is_agp(dev))
  		dev_priv->flags |= RADEON_IS_AGP;
  	else if (drm_device_is_pcie(dev))
-@@ -1752,7 +2687,119 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
+@@ -1752,7 +2691,119 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
  
  	DRM_DEBUG("%s card detected\n",
  		  ((dev_priv->flags & RADEON_IS_AGP) ? "AGP" : (((dev_priv->flags & RADEON_IS_PCIE) ? "PCIE" : "PCI"))));
@@ -25000,7 +25017,7 @@
  }
  
  /* Create mappings for registers and framebuffer so userland doesn't necessarily
-@@ -1760,25 +2807,10 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
+@@ -1760,25 +2811,10 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
   */
  int radeon_driver_firstopen(struct drm_device *dev)
  {
@@ -25026,7 +25043,7 @@
  	return 0;
  }
  
-@@ -1786,9 +2818,44 @@ int radeon_driver_unload(struct drm_device *dev)
+@@ -1786,9 +2822,44 @@ int radeon_driver_unload(struct drm_device *dev)
  {
  	drm_radeon_private_t *dev_priv = dev->dev_private;
  


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.1104.2.1
retrieving revision 1.1104.2.2
diff -u -r1.1104.2.1 -r1.1104.2.2
--- kernel.spec	30 Oct 2008 11:23:38 -0000	1.1104.2.1
+++ kernel.spec	4 Nov 2008 13:09:22 -0000	1.1104.2.2
@@ -586,7 +586,7 @@
 Patch22: linux-2.6-x86-tracehook.patch
 Patch23: linux-2.6.27-x86-tracehook-syscall-arg-order.patch
 
-Patch30: linux-2.6-x86-xen-add-dependencies.patch
+Patch30: linux-2.6-x86-mtrr-kill-bogus-warning.patch
 
 Patch41: linux-2.6-sysrq-c.patch
 Patch44: linux-2.6-x86-avoid-dereferencing-beyond-stack-THREAD_SIZE.patch
@@ -613,6 +613,8 @@
 Patch360: linux-2.6-debug-always-inline-kzalloc.patch
 Patch370: linux-2.6-crash-driver.patch
 Patch380: linux-2.6-defaults-pci_no_msi.patch
+Patch381: linux-2.6-pciehp-update.patch
+Patch382: linux-2.6-defaults-pciehp.patch
 Patch390: linux-2.6-defaults-acpi-video.patch
 Patch391: linux-2.6-acpi-video-dos.patch
 Patch392: linux-2.6-acpi-clear-wake-status.patch
@@ -632,6 +634,7 @@
 
 Patch670: linux-2.6-ata-quirk.patch
 Patch671: linux-2.6-libata-pata_it821x-fix-lba48-on-raid-volumes.patch
+Patch672: linux-2.6-libata-avoid-overflow-with-large-disks.patch
 
 #Patch680: linux-2.6-iwlwifi-use-dma_alloc_coherent.patch
 Patch681: linux-2.6-iwlagn-downgrade-BUG_ON-in-interrupt.patch
@@ -653,9 +656,10 @@
 Patch1800: nvidia-agp.patch
 Patch1801: linux-2.6-agp-intel-cantiga-fix.patch
 Patch1810: drm-next.patch
-Patch1811: drm-modesetting-radeon.patch
-Patch1812: drm-modesetting-i915.patch
-Patch1813: drm-nouveau.patch
+Patch1811: drm-intel-gem-x86-64-faster.patch
+Patch1812: drm-modesetting-radeon.patch
+Patch1813: drm-modesetting-i915.patch
+Patch1814: drm-nouveau.patch
 
 # kludge to make ich9 e1000 work
 Patch2000: linux-2.6-e1000-ich9.patch
@@ -672,6 +676,9 @@
 # Make Eee laptop driver suck less
 Patch2011: linux-2.6-eeepc-laptop-update.patch
 
+# Backport Toshiba updates so Bluetooth can be enabled (#437091)
+Patch2012: linux-2.6-toshiba-acpi-update.patch
+
 # atl2 network driver
 Patch2020: linux-2.6-netdev-atl2.patch
 
@@ -725,6 +732,16 @@
 # Sony Vaio suspend fix
 Patch3100: linux-2.6.27-sony-laptop-suspend-fix.patch
 
+# Add better support for DMI-based autoloading
+Patch3110: linux-2.6-dmi-autoload.patch
+
+# SELinux: Fix handling of empty tty_files. 37dd0bd04a3240d2922786d501e2f12cec858fbf BZ469079
+Patch3120: linux-2.6-selinux-empty-tty-files.patch
+
+# Provide P4 clock modulation in-kernel for thermal reasons, but don't expose
+# ui
+Patch3130: disable-p4-cpufreq-ui.patch
+
 # kvm patch
 Patch4000: linux-2.6-kvm-77.patch
 %endif
@@ -1085,7 +1102,7 @@
 ApplyPatch linux-2.6-x86-tracehook.patch
 ApplyPatch linux-2.6.27-x86-tracehook-syscall-arg-order.patch
 
-ApplyPatch linux-2.6-x86-xen-add-dependencies.patch
+ApplyPatch linux-2.6-x86-mtrr-kill-bogus-warning.patch
 
 # enable sysrq-c on all kernels, not only kexec
 ApplyPatch linux-2.6-sysrq-c.patch
@@ -1181,6 +1198,12 @@
 # disable message signaled interrupts
 ApplyPatch linux-2.6-defaults-pci_no_msi.patch
 
+# update the pciehp driver
+ApplyPatch linux-2.6-pciehp-update.patch
+
+# default to enabling passively listening for hotplug events
+ApplyPatch linux-2.6-defaults-pciehp.patch
+
 #
 # SCSI Bits.
 #
@@ -1226,6 +1249,8 @@
 ApplyPatch linux-2.6-ata-quirk.patch
 # fix it821x raid volumes
 ApplyPatch linux-2.6-libata-pata_it821x-fix-lba48-on-raid-volumes.patch
+# fix overlow with large disk
+ApplyPatch linux-2.6-libata-avoid-overflow-with-large-disks.patch
 
 # fix spot's iwlwifi, hopefully...
 #ApplyPatch linux-2.6-iwlwifi-use-dma_alloc_coherent.patch
@@ -1271,6 +1296,7 @@
 ApplyPatch linux-2.6-r8169-wake-up-the-phy-of-the-8168.patch
 
 ApplyPatch linux-2.6-eeepc-laptop-update.patch
+ApplyPatch linux-2.6-toshiba-acpi-update.patch
 
 # atl2 network driver
 ApplyPatch linux-2.6-netdev-atl2.patch
@@ -1283,6 +1309,7 @@
 ApplyPatch nvidia-agp.patch
 ApplyPatch linux-2.6-agp-intel-cantiga-fix.patch
 ApplyPatch drm-next.patch
+ApplyPatch drm-intel-gem-x86-64-faster.patch
 ApplyPatch drm-modesetting-radeon.patch
 #ApplyPatch drm-modesetting-i915.patch
 ApplyPatch drm-nouveau.patch
@@ -1300,6 +1327,8 @@
 # Sony Vaio suspend fix
 ApplyPatch linux-2.6.27-sony-laptop-suspend-fix.patch
 
+ApplyPatch linux-2.6-dmi-autoload.patch
+
 # silence piix3 in quiet boot (ie, qemu)
 ApplyPatch linux-2.6-piix3-silence-quirk.patch
 # Hush IOMMU warnings, you typically can't fix them anyway
@@ -1313,6 +1342,12 @@
 # EC storms aren't anything you can fix, shut up already
 ApplyPatch linux-2.6.27-acpi-ec-drizzle.patch
 
+# SELinux on ppc64 without plymouth can't boot
+ApplyPatch linux-2.6-selinux-empty-tty-files.patch
+
+ApplyPatch disable-p4-cpufreq-ui.patch
+
+
 ApplyPatch linux-2.6-kvm-77.patch
 
 # END OF PATCH APPLICATIONS
@@ -1888,13 +1923,42 @@
 %kernel_variant_files -k vmlinux %{with_kdump} kdump
 
 %changelog
-* Thu Oct 30 2008 Juan Quintela <quintela at redhat.com>
-- kvm-77.
+* Tue Nov  4 2008 Juan Quintela <quintela at redhat.com> - 2.6.%{base_sublevel}%{?stablerev}-field
+- update to kvm-77.
+
+* Mon Nov 03 2008 Matthew Garrett <mjg at redhat.com> 2.6.27.4-74
+- linux-2.6-toshiba-acpi-update.patch: backport from 2.6.28
+  * Adds support for rfkill control of Bluetooth (#437091)
+- linux-2.6-dmi-autoload.patch: backport DMI autoloading from 2.6.28
+  * Fixes autoloading of Macbook Pro Nvidia backlight driver (#462409)
+- linux-2.6-pciehp-update.patch
+  * Update pciehp driver to support autoloading and listening for events
+- linux-2.6-defaults-pciehp.patch
+  * Enable passive mode by default
+- Build acpiphp in statically
+- disable-p4-cpufreq-ui.patch
+  * Remove the UI from the p4-clockmod code, but allow it to be used in-kernel
+
+* Mon Nov 03 2008 Dave Airlie <airlied at redhat.com> 2.6.27.4-73
+- drm-modesetting-radeon.patch: fix modeset reporting for pm-utils
+
+* Mon Nov 03 2008 Dave Airlie <airlied at redhat.com> 2.6.27.4-72
+- backport upstream fixes to make 64-bit Intel GEM useable (#469584)
+
+* Fri Oct 31 2008 Chuck Ebbert <cebbert at redhat.com> 2.6.27.4-71
+- Fix overflow in libata when using large disks.
+
+* Fri Oct 31 2008 Chuck Ebbert <cebbert at redhat.com> 2.6.27.4-70
+- Silence bogus MTRR warning when running in vmware (#468845)
+- Remove xen dependencies patch, now upstream and not needed in Fedora.
+
+* Fri Oct 31 2008 Dave Airlie <airlied at redhat.com> 2.6.27.4-69
+- radeon: fix out of bounds VRAM access - hopefully fixes the corruption
 
-* Thu Oct 30 2008 Dave Airlie <airlied at redhat.com> 2.6.27.4-67
+* Thu Oct 30 2008 Dave Airlie <airlied at redhat.com> 2.6.27.4-68
 - radeon: try and workaround AGP badness with kms + enable VRAM mtrr
 
-* Wed Oct 29 2008 Dave Jones <davej at redhat.com>
+* Wed Oct 29 2008 Dave Jones <davej at redhat.com> 2.6.27.4-67
 - Reduce maximum supported CPUs on x86-64 to 64.
 
 * Wed Oct 29 2008 Jarod Wilson <jarod at redhat.com> 2.6.27.4-66

linux-2.6-acpi-clear-wake-status.patch:

Index: linux-2.6-acpi-clear-wake-status.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-acpi-clear-wake-status.patch,v
retrieving revision 1.1
retrieving revision 1.1.8.1
diff -u -r1.1 -r1.1.8.1
--- linux-2.6-acpi-clear-wake-status.patch	6 Aug 2008 18:21:53 -0000	1.1
+++ linux-2.6-acpi-clear-wake-status.patch	4 Nov 2008 13:09:22 -0000	1.1.8.1
@@ -1,3 +1,27 @@
+From: Matthew Garrett <mjg59 at srcf.ucam.org>
+Date: Wed, 6 Aug 2008 18:12:04 +0000 (+0100)
+Subject: ACPI: Clear WAK_STS on resume
+X-Git-Tag: v2.6.28-rc1~26^2~12^2~4
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=a68823ee5285e65b51ceb96f8b13a5b4f99a6888
+
+ACPI: Clear WAK_STS on resume
+
+The leading other brand OS appears to clear the WAK_STS flag on resume.
+When rebooted, certain BIOSes assume that the system is actually
+resuming if it's still set and so fail to reboot correctly. Make sure
+that it's cleared at resume time.
+
+Comment clarified as suggested by Bob Moore
+
+http://bugzilla.kernel.org/show_bug.cgi?id=11634
+
+Signed-off-by: Matthew Garrett <mjg at redhat.com>
+Signed-off-by: Andi Kleen <ak at linux.intel.com>
+Tested-by: Christian Borntraeger <borntraeger at de.ibm.com>
+Tested-by: Romano Giannetti <romano.giannetti at gmail.com>
+Signed-off-by: Len Brown <len.brown at intel.com>
+---
+
 diff --git a/drivers/acpi/hardware/hwsleep.c b/drivers/acpi/hardware/hwsleep.c
 index dba3cfb..130a44b 100644
 --- a/drivers/acpi/hardware/hwsleep.c

linux-2.6-acpi-ignore-reset_reg_sup.patch:

Index: linux-2.6-acpi-ignore-reset_reg_sup.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-acpi-ignore-reset_reg_sup.patch,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- linux-2.6-acpi-ignore-reset_reg_sup.patch	27 Oct 2008 16:36:10 -0000	1.1
+++ linux-2.6-acpi-ignore-reset_reg_sup.patch	4 Nov 2008 13:09:22 -0000	1.1.2.1
@@ -1,15 +1,26 @@
-Subject: ACPI: Ingore the RESET_REG_SUP bit when using ACPI reset mechanism
 From: Zhao Yakui <yakui.zhao at intel.com>
+Date: Fri, 17 Oct 2008 18:22:27 +0000 (-0400)
+Subject: ACPI: Ingore the RESET_REG_SUP bit when using ACPI reset mechanism
+X-Git-Tag: v2.6.28-rc1~26^2~22^2
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=8fd145917fb62368a9b80db59562c20576238f5a
+
+ACPI: Ingore the RESET_REG_SUP bit when using ACPI reset mechanism
+
+According to ACPI 3.0, FADT.flags.RESET_REG_SUP indicates
+whether the ACPI reboot mechanism is supported.
+
+However, some boxes have this bit clear, have a valid
+ACPI_RESET_REG & RESET_VALUE, and ACPI reboot is the only
+mechanism that works for them after S3.
+
+This suggests that other operating systems may not be checking
+the RESET_REG_SUP bit, and are using other means to decide
+whether to use the ACPI reboot mechanism or not.
 
-       According to ACPI 3.0 spec the RESET_REG_SUP bit of FADT flag indicates
-whether the acpi reboot is supported. On some boxes this flag bit is zero. But
-there exists the definition of ACPI_RESET_REG & RESET_VALUE. And on such boxes
-the system can be rebooted only by using ACPI reboot after the cycle of
-suspend/resume.
-       So in such case it is unnecessary to check the flag bit any more. When 
-acpi reboot is expected, only the reset_register is checked. If the following
-conditions are meeted, it indicates that the reset register is supported.
-Otherwise it means that reset register is unsupported.
+Here we stop checking RESET_REG_SUP.
+Instead, When acpi reboot is requested,
+only the reset_register is checked. If the following
+conditions are met, it indicates that the reset register is supported.
 	a. reset_register is not zero
 	b. the access width is eight
 	c. the bit_offset is zero
@@ -18,15 +29,14 @@
 http://bugzilla.kernel.org/show_bug.cgi?id=1148
 
 Signed-off-by: Zhao Yakui <yakui.zhao at intel.com>
+Signed-off-by: Len Brown <len.brown at intel.com>
 ---
- drivers/acpi/reboot.c |   21 ++++++++++++++++++---
- 1 file changed, 18 insertions(+), 3 deletions(-)
 
-Index: linux-2.6/drivers/acpi/reboot.c
-===================================================================
---- linux-2.6.orig/drivers/acpi/reboot.c
-+++ linux-2.6/drivers/acpi/reboot.c
-@@ -15,9 +15,24 @@ void acpi_reboot(void)
+diff --git a/drivers/acpi/reboot.c b/drivers/acpi/reboot.c
+index a6b662c..755baf2 100644
+--- a/drivers/acpi/reboot.c
++++ b/drivers/acpi/reboot.c
+@@ -15,9 +15,28 @@ void acpi_reboot(void)
  
  	rr = &acpi_gbl_FADT.reset_register;
  
@@ -34,21 +44,25 @@
 -	if (!(acpi_gbl_FADT.flags & ACPI_FADT_RESET_REGISTER) ||
 -	    rr->bit_width != 8 || rr->bit_offset != 0)
 +	/*
-+	 * Is the reset register supported?
-+	 * According to ACPI 3.0 spec the RESET_REG_SUP bit of FADT flag
-+	 * indicates whether the acpi reboot is supported. On some
-+	 * boxes this bit is zero. But there exists the definition of
-+	 * ACPI_RESET_REG & RESET_VALUE.
-+	 * And on such boxes the system can be rebooted only by using ACPI
-+	 * reboot after the cycle of suspend/resume.
-+	 * So in such case it is unnecessary to check the flag bit any more.
-+	 * When acpi reboot is expected, only the reset_register is checked.
-+	 * If the following conditions are meeted, it indicates that the reset
-+	 * register is supported. Otherwise it means that reset register is
-+	 * unsupported.
-+	 * a. reset_register is not zero
-+	 * b. the access width is eight
-+	 * c. the bit_offset is zero
++	 * Is the ACPI reset register supported?
++	 *
++	 * According to ACPI 3.0, FADT.flags.RESET_REG_SUP indicates
++	 * whether the ACPI reset mechanism is supported.
++	 *
++	 * However, some boxes have this bit clear, yet a valid
++	 * ACPI_RESET_REG & RESET_VALUE, and ACPI reboot is the only
++	 * mechanism that works for them after S3.
++	 *
++	 * This suggests that other operating systems may not be checking
++	 * the RESET_REG_SUP bit, and are using other means to decide
++	 * whether to use the ACPI reboot mechanism or not.
++	 *
++	 * So when acpi reboot is requested,
++	 * only the reset_register is checked. If the following
++	 * conditions are met, it indicates that the reset register is supported.
++	 * 	a. reset_register is not zero
++	 * 	b. the access width is eight
++	 * 	c. the bit_offset is zero
 +	 */
 +	if (!(rr->address) || rr->bit_width != 8 || rr->bit_offset != 0)
  		return;

linux-2.6-input-dell-keyboard-keyup.patch:

Index: linux-2.6-input-dell-keyboard-keyup.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-input-dell-keyboard-keyup.patch,v
retrieving revision 1.1
retrieving revision 1.1.8.1
diff -u -r1.1 -r1.1.8.1
--- linux-2.6-input-dell-keyboard-keyup.patch	14 Aug 2008 14:07:14 -0000	1.1
+++ linux-2.6-input-dell-keyboard-keyup.patch	4 Nov 2008 13:09:22 -0000	1.1.8.1
@@ -1,5 +1,22 @@
+From: Matthew Garrett <mjg59 at srcf.ucam.org>
+Date: Fri, 15 Aug 2008 17:54:51 +0000 (-0400)
+Subject: Input: atkbd - expand Latitude's force release quirk to other Dells
+X-Git-Tag: v2.6.28-rc1~289^2^2~15
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=61579ba83934d397a4fa2bb7372de9ae112587d5
+
+Input: atkbd - expand Latitude's force release quirk to other Dells
+
+Dell laptops fail to send key up events for several of their special
+keys. There's an existing quirk in the kernel to handle this, but it's
+limited to the Latitude range. This patch extends it to cover all
+portable Dells.
+
+Signed-off-by: Matthew Garrett <mjg at redhat.com>
+Signed-off-by: Dmitry Torokhov <dtor at mail.ru>
+---
+
 diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
-index b1ce10f..e32c24d 100644
+index 4474572..22016ca 100644
 --- a/drivers/input/keyboard/atkbd.c
 +++ b/drivers/input/keyboard/atkbd.c
 @@ -834,10 +834,10 @@ static void atkbd_disconnect(struct serio *serio)
@@ -15,7 +32,7 @@
  {
  	const unsigned int forced_release_keys[] = {
  		0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8f, 0x93,
-@@ -1461,13 +1461,13 @@ static int __init atkbd_setup_fixup(const struct dmi_system_id *id)
+@@ -1451,13 +1451,13 @@ static int __init atkbd_setup_fixup(const struct dmi_system_id *id)
  
  static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = {
  	{

linux-2.6-libata-pata_it821x-fix-lba48-on-raid-volumes.patch:

Index: linux-2.6-libata-pata_it821x-fix-lba48-on-raid-volumes.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-libata-pata_it821x-fix-lba48-on-raid-volumes.patch,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- linux-2.6-libata-pata_it821x-fix-lba48-on-raid-volumes.patch	26 Oct 2008 22:30:20 -0000	1.2
+++ linux-2.6-libata-pata_it821x-fix-lba48-on-raid-volumes.patch	4 Nov 2008 13:09:22 -0000	1.2.2.1
@@ -1,4 +1,7 @@
 From: Ondrej Zary <linux at rainbow-software.org>
+Date: Sun, 26 Oct 2008 22:10:19 +0000 (-0400)
+Subject: libata: Fix LBA48 on pata_it821x RAID volumes.
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=054e5f616b5becdc096b793407dc33fe379749ac
 
 libata: Fix LBA48 on pata_it821x RAID volumes.
 
@@ -6,10 +9,14 @@
 
 Signed-off-by: Ondrej Zary <linux at rainbow-software.org>
 Acked-by: Alan Cox <alan at redhat.com>
+Signed-off-by: Jeff Garzik <jgarzik at redhat.com>
+---
 
---- linux-2.6.27-orig/drivers/ata/pata_it821x.c	2008-10-18 17:09:07.000000000 +0200
-+++ linux-2.6.27-pentium/drivers/ata/pata_it821x.c	2008-10-18 17:10:24.000000000 +0200
-@@ -557,9 +557,8 @@
+diff --git a/drivers/ata/pata_it821x.c b/drivers/ata/pata_it821x.c
+index 4e13aad..860ede5 100644
+--- a/drivers/ata/pata_it821x.c
++++ b/drivers/ata/pata_it821x.c
+@@ -557,9 +557,8 @@ static unsigned int it821x_read_id(struct ata_device *adev,
  	if (strstr(model_num, "Integrated Technology Express")) {
  		/* Set feature bits the firmware neglects */
  		id[49] |= 0x0300;	/* LBA, DMA */
@@ -20,4 +27,3 @@
  		id[86] |= 0x0400;	/* LBA48 on */
  		id[ATA_ID_MAJOR_VER] |= 0x1F;
  	}
-


--- linux-2.6-x86-xen-add-dependencies.patch DELETED ---




More information about the scm-commits mailing list