rpms/kernel/F-13 add-appleir-usb-driver.patch, 1.3, 1.4 ata-generic-handle-new-mbp-with-mcp89.patch, NONE, 1.1 ata-generic-implement-ata-gen-flags.patch, NONE, 1.1 coredump-uid-pipe-check.patch, 1.2, 1.3 crypto-add-async-hash-testing.patch, NONE, 1.1 drm-next.patch, 1.20, 1.21 drm-revert-drm-fbdev-rework-output-polling-to-be-back-in-core.patch, NONE, 1.1 drm_nouveau_ucode.patch, 1.2, 1.3 i915-fix-crt-hotplug-regression.patch, NONE, 1.1 iwlwifi-Recover-TX-flow-failure.patch, NONE, 1.1 iwlwifi-Recover-TX-flow-stall-due-to-stuck-queue.patch, NONE, 1.1 iwlwifi-add-internal-short-scan-support-for-3945.patch, NONE, 1.1 iwlwifi-code-cleanup-for-connectivity-recovery.patch, NONE, 1.1 iwlwifi-iwl_good_ack_health-only-apply-to-AGN-device.patch, NONE, 1.1 iwlwifi-move-plcp-check-to-separated-function.patch, NONE, 1.1 linux-2.6-cantiga-iommu-gfx.patch, 1.3, 1.4 linux-2.6.34.tar.bz2.sign, NONE, 1.1 patch-2.6.34.1.bz2.sign, NONE, 1.1 pci-acpi-disable-aspm-if-no-osc.patch, NONE, 1.1 pci-aspm-dont-enable-too-early.patch, NONE, 1.1 pci-hush-rom-warning.patch, NONE, 1.1 quiet-prove_RCU-in-cgroups.patch, NONE, 1.1 revert-drm-kms-toggle-poll-around-switcheroo.patch, NONE, 1.1 virtqueue-wrappers.patch, NONE, 1.1 .cvsignore, 1.1180, 1.1181 Makefile, 1.123, 1.124 Makefile.config, 1.75, 1.76 TODO, 1.68, 1.69 config-arm, 1.7, 1.8 config-debug, 1.39, 1.40 config-generic, 1.366, 1.367 config-ia64-generic, 1.27, 1.28 config-nodebug, 1.52, 1.53 config-powerpc-generic, 1.54, 1.55 config-powerpc32-generic, 1.37, 1.38 config-powerpc64, 1.37, 1.38 config-rhel-generic, 1.17, 1.18 config-s390x, 1.22, 1.23 config-sparc64-generic, 1.32, 1.33 config-x86-generic, 1.95, 1.96 config-x86_64-generic, 1.106, 1.107 die-floppy-die.patch, 1.1, 1.2 disable-i8042-check-on-apple-mac.patch, 1.2, 1.3 drm-i915-fix-edp-panels.patch, 1.2, 1.3 drm-intel-make-lvds-work.patch, 1.2, 1.3 drm-intel-next.patch, 1.13, 1.14 drm-intel-sdvo-fix.patch, 1.1, 1.2 drm-nouveau-abi16.patch, 1.3, 1.4 drm-nouveau-drm-fixed-header.patch, 1.2, 1.3 git-bluetooth.patch, 1.5, 1.6 hda_intel-prealloc-4mb-dmabuffer.patch, 1.1, 1.2 hdpvr-ir-enable.patch, 1.8, 1.9 iwlwifi-manage-QoS-by-mac-stack.patch, 1.1, 1.2 iwlwifi-recover_from_tx_stall.patch, 1.1, 1.2 kernel.spec, 1.2084, 1.2085 linux-2.6-acpi-video-export-edid.patch, 1.1, 1.2 linux-2.6-crash-driver.patch, 1.16, 1.17 linux-2.6-debug-nmi-timeout.patch, 1.6, 1.7 linux-2.6-defaults-pci_no_msi.patch, 1.6, 1.7 linux-2.6-execshield.patch, 1.117, 1.118 linux-2.6-hotfixes.patch, 1.5, 1.6 linux-2.6-input-kill-stupid-messages.patch, 1.5, 1.6 linux-2.6-intel-iommu-igfx.patch, 1.2, 1.3 linux-2.6-selinux-mprotect-checks.patch, 1.8, 1.9 linux-2.6-tracehook.patch, 1.13, 1.14 linux-2.6-upstream-reverts.patch, 1.12, 1.13 linux-2.6-usb-wwan-update.patch, 1.2, 1.3 linux-2.6-utrace-ptrace.patch, 1.3, 1.4 linux-2.6-utrace.patch, 1.124, 1.125 linux-2.6-v4l-dvb-add-kworld-a340-support.patch, 1.1, 1.2 linux-2.6-v4l-dvb-gspca-fixes.patch, 1.2, 1.3 lirc-2.6.33.patch, 1.6, 1.7 mac80211-do-not-wipe-out-old-supported-rates.patch, 1.1, 1.2 mac80211-explicitly-disable-enable-QoS.patch, 1.1, 1.2 mac80211-fix-supported-rates-IE-if-AP-doesnt-give-us-its-rates.patch, 1.1, 1.2 sources, 1.1139, 1.1140 ssb_check_for_sprom.patch, 1.2, 1.3 thinkpad-acpi-add-x100e.patch, 1.2, 1.3 thinkpad-acpi-fix-backlight.patch, 1.1, 1.2 upstream, 1.1052, 1.1053 virt_console-rollup.patch, 1.2, 1.3 linux-2.6.33.tar.bz2.sign, 1.1, NONE patch-2.6.33.6.bz2.sign, 1.1, NONE

Chuck Ebbert cebbert at fedoraproject.org
Fri Jul 9 09:09:29 UTC 2010


Author: cebbert

Update of /cvs/pkgs/rpms/kernel/F-13
In directory cvs01.phx2.fedoraproject.org:/tmp/cvs-serv16176

Modified Files:
	.cvsignore Makefile Makefile.config TODO config-arm 
	config-debug config-generic config-ia64-generic config-nodebug 
	config-powerpc-generic config-powerpc32-generic 
	config-powerpc64 config-rhel-generic config-s390x 
	config-sparc64-generic config-x86-generic 
	config-x86_64-generic die-floppy-die.patch 
	disable-i8042-check-on-apple-mac.patch 
	drm-i915-fix-edp-panels.patch drm-intel-make-lvds-work.patch 
	drm-intel-next.patch drm-intel-sdvo-fix.patch 
	drm-nouveau-abi16.patch drm-nouveau-drm-fixed-header.patch 
	git-bluetooth.patch hda_intel-prealloc-4mb-dmabuffer.patch 
	hdpvr-ir-enable.patch iwlwifi-manage-QoS-by-mac-stack.patch 
	iwlwifi-recover_from_tx_stall.patch kernel.spec 
	linux-2.6-acpi-video-export-edid.patch 
	linux-2.6-crash-driver.patch linux-2.6-debug-nmi-timeout.patch 
	linux-2.6-defaults-pci_no_msi.patch linux-2.6-execshield.patch 
	linux-2.6-hotfixes.patch 
	linux-2.6-input-kill-stupid-messages.patch 
	linux-2.6-intel-iommu-igfx.patch 
	linux-2.6-selinux-mprotect-checks.patch 
	linux-2.6-tracehook.patch linux-2.6-upstream-reverts.patch 
	linux-2.6-usb-wwan-update.patch linux-2.6-utrace-ptrace.patch 
	linux-2.6-utrace.patch 
	linux-2.6-v4l-dvb-add-kworld-a340-support.patch 
	linux-2.6-v4l-dvb-gspca-fixes.patch lirc-2.6.33.patch 
	mac80211-do-not-wipe-out-old-supported-rates.patch 
	mac80211-explicitly-disable-enable-QoS.patch 
	mac80211-fix-supported-rates-IE-if-AP-doesnt-give-us-its-rates.patch 
	sources ssb_check_for_sprom.patch 
	thinkpad-acpi-add-x100e.patch 
	thinkpad-acpi-fix-backlight.patch upstream 
	virt_console-rollup.patch 
Added Files:
	add-appleir-usb-driver.patch 
	ata-generic-handle-new-mbp-with-mcp89.patch 
	ata-generic-implement-ata-gen-flags.patch 
	coredump-uid-pipe-check.patch 
	crypto-add-async-hash-testing.patch drm-next.patch 
	drm-revert-drm-fbdev-rework-output-polling-to-be-back-in-core.patch 
	drm_nouveau_ucode.patch i915-fix-crt-hotplug-regression.patch 
	iwlwifi-Recover-TX-flow-failure.patch 
	iwlwifi-Recover-TX-flow-stall-due-to-stuck-queue.patch 
	iwlwifi-add-internal-short-scan-support-for-3945.patch 
	iwlwifi-code-cleanup-for-connectivity-recovery.patch 
	iwlwifi-iwl_good_ack_health-only-apply-to-AGN-device.patch 
	iwlwifi-move-plcp-check-to-separated-function.patch 
	linux-2.6-cantiga-iommu-gfx.patch linux-2.6.34.tar.bz2.sign 
	patch-2.6.34.1.bz2.sign pci-acpi-disable-aspm-if-no-osc.patch 
	pci-aspm-dont-enable-too-early.patch 
	pci-hush-rom-warning.patch quiet-prove_RCU-in-cgroups.patch 
	revert-drm-kms-toggle-poll-around-switcheroo.patch 
	virtqueue-wrappers.patch 
Removed Files:
	linux-2.6.33.tar.bz2.sign patch-2.6.33.6.bz2.sign 
Log Message:
Initial commit of 2.6.34 for F-13
Previous history is in the branch private-f14-2_6_34

add-appleir-usb-driver.patch:
 Documentation/input/appleir.txt |   45 +++
 drivers/hid/hid-apple.c         |    4 
 drivers/hid/hid-core.c          |    9 
 drivers/hid/hid-ids.h           |    1 
 drivers/hid/usbhid/hid-core.c   |    1 
 drivers/input/misc/Kconfig      |   13 +
 drivers/input/misc/Makefile     |    1 
 drivers/input/misc/appleir.c    |  453 ++++++++++++++++++++++++++++++++++++++++
 include/linux/hid.h             |    3 
 9 files changed, 522 insertions(+), 8 deletions(-)

Index: add-appleir-usb-driver.patch
===================================================================
RCS file: add-appleir-usb-driver.patch
diff -N add-appleir-usb-driver.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ add-appleir-usb-driver.patch	9 Jul 2010 09:09:10 -0000	1.4
@@ -0,0 +1,666 @@
+From e2e8fc4ed31157e9e9e9cbc70febf08c77233aea Mon Sep 17 00:00:00 2001
+From: Kyle McMartin <kyle at dreadnought.i.jkkm.org>
+Date: Thu, 20 May 2010 10:17:58 -0400
+Subject: add-appleir-driver
+
+---
+ Documentation/input/appleir.txt |   45 ++++
+ drivers/hid/hid-apple.c         |    4 -
+ drivers/hid/hid-core.c          |    9 +-
+ drivers/hid/hid-ids.h           |    1 +
+ drivers/hid/usbhid/hid-core.c   |    1 +
+ drivers/input/misc/Kconfig      |   13 ++
+ drivers/input/misc/Makefile     |    1 +
+ drivers/input/misc/appleir.c    |  453 +++++++++++++++++++++++++++++++++++++++
+ include/linux/hid.h             |    2 +
+ 9 files changed, 522 insertions(+), 7 deletions(-)
+ create mode 100644 Documentation/input/appleir.txt
+ create mode 100644 drivers/input/misc/appleir.c
+
+diff --git a/Documentation/input/appleir.txt b/Documentation/input/appleir.txt
+new file mode 100644
+index 0000000..0267a4b
+--- /dev/null
++++ b/Documentation/input/appleir.txt
+@@ -0,0 +1,45 @@
++Apple IR receiver Driver (appleir)
++----------------------------------
++	Copyright (C) 2009 Bastien Nocera <hadess at hadess.net>
++
++The appleir driver is a kernel input driver to handle Apple's IR
++receivers (and associated remotes) in the kernel.
++
++The driver is an input driver which only handles "official" remotes
++as built and sold by Apple.
++
++Authors
++-------
++
++James McKenzie (original driver)
++Alex Karpenko (05ac:8242 support)
++Greg Kroah-Hartman (cleanups and original submission)
++Bastien Nocera (further cleanups and suspend support)
++
++Supported hardware
++------------------
++
++- All Apple laptops and desktops from 2005 onwards, except:
++  - the unibody Macbook (2009)
++  - Mac Pro (all versions)
++- Apple TV (all revisions)
++
++The remote will only support the 6 buttons of the original remotes
++as sold by Apple. See the next section if you want to use other remotes
++or want to use lirc with the device instead of the kernel driver.
++
++Using lirc (native) instead of the kernel driver
++------------------------------------------------
++
++First, you will need to disable the kernel driver for the receiver.
++
++This can be achieved by passing quirks to the usbhid driver.
++The quirk line would be:
++usbhid.quirks=0x05ac:0x8242:0x40000010
++
++With 0x05ac being the vendor ID (Apple, you shouldn't need to change this)
++With 0x8242 being the product ID (check the output of lsusb for your hardware)
++And 0x10 being "HID_QUIRK_HIDDEV_FORCE" and 0x40000000 being "HID_QUIRK_NO_IGNORE"
++
++This should force the creation of a hiddev device for the receiver, and
++make it usable under lirc.
+diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c
+index bba05d0..0059d5a 100644
+--- a/drivers/hid/hid-apple.c
++++ b/drivers/hid/hid-apple.c
+@@ -361,10 +361,6 @@ static void apple_remove(struct hid_device *hdev)
+ }
+ 
+ static const struct hid_device_id apple_devices[] = {
+-	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ATV_IRCONTROL),
+-		.driver_data = APPLE_HIDDEV | APPLE_IGNORE_HIDINPUT },
+-	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4),
+-		.driver_data = APPLE_HIDDEV | APPLE_IGNORE_HIDINPUT },
+ 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE),
+ 		.driver_data = APPLE_MIGHTYMOUSE | APPLE_INVERT_HWHEEL },
+ 
+diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
+index 143e788..387bb59 100644
+--- a/drivers/hid/hid-core.c
++++ b/drivers/hid/hid-core.c
+@@ -1167,6 +1167,8 @@ int hid_connect(struct hid_device *hdev, unsigned int connect_mask)
+ 	unsigned int i;
+ 	int len;
+ 
++	if (hdev->quirks & HID_QUIRK_HIDDEV_FORCE)
++		connect_mask |= (HID_CONNECT_HIDDEV_FORCE | HID_CONNECT_HIDDEV);
+ 	if (hdev->bus != BUS_USB)
+ 		connect_mask &= ~HID_CONNECT_HIDDEV;
+ 	if (hid_hiddev(hdev))
+@@ -1248,8 +1250,6 @@ static const struct hid_device_id hid_blacklist[] = {
+ 	{ HID_USB_DEVICE(USB_VENDOR_ID_3M, USB_DEVICE_ID_3M1968) },
+ 	{ HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU) },
+ 	{ HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D) },
+-	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ATV_IRCONTROL) },
+-	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) },
+ 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE) },
+ 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICMOUSE) },
+ 	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI) },
+@@ -1553,6 +1553,9 @@ static const struct hid_device_id hid_ignore_list[] = {
+ 	{ HID_USB_DEVICE(USB_VENDOR_ID_ASUS, USB_DEVICE_ID_ASUS_T91MT)},
+ 	{ HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_LCM)},
+ 	{ HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_LCM2)},
++	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL) },
++	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ATV_IRCONTROL) },
++	{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) },
+ 	{ HID_USB_DEVICE(USB_VENDOR_ID_AVERMEDIA, USB_DEVICE_ID_AVER_FM_MR800) },
+ 	{ HID_USB_DEVICE(USB_VENDOR_ID_BERKSHIRE, USB_DEVICE_ID_BERKSHIRE_PCWD) },
+ 	{ HID_USB_DEVICE(USB_VENDOR_ID_CIDC, 0x0103) },
+@@ -1757,7 +1760,7 @@ int hid_add_device(struct hid_device *hdev)
+ 
+ 	/* we need to kill them here, otherwise they will stay allocated to
+ 	 * wait for coming driver */
+-	if (hid_ignore(hdev))
++	if (!(hdev->quirks & HID_QUIRK_NO_IGNORE) && hid_ignore(hdev))
+ 		return -ENODEV;
+ 
+ 	/* XXX hack, any other cleaner solution after the driver core
+diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
+index 09d2764..7275a9d 100644
+--- a/drivers/hid/hid-ids.h
++++ b/drivers/hid/hid-ids.h
+@@ -97,6 +97,7 @@
+ #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS   0x023b
+ #define USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY	0x030a
+ #define USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY	0x030b
++#define USB_DEVICE_ID_APPLE_IRCONTROL	0x8240
+ #define USB_DEVICE_ID_APPLE_ATV_IRCONTROL	0x8241
+ #define USB_DEVICE_ID_APPLE_IRCONTROL4	0x8242
+ 
+diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
+index 7b85b69..66b512c 100644
+--- a/drivers/hid/usbhid/hid-core.c
++++ b/drivers/hid/usbhid/hid-core.c
+@@ -1133,6 +1133,7 @@ static int usbhid_probe(struct usb_interface *intf, const struct usb_device_id *
+ 	hid->vendor = le16_to_cpu(dev->descriptor.idVendor);
+ 	hid->product = le16_to_cpu(dev->descriptor.idProduct);
+ 	hid->name[0] = 0;
++	hid->quirks = usbhid_lookup_quirk(hid->vendor, hid->product);
+ 	if (intf->cur_altsetting->desc.bInterfaceProtocol ==
+ 			USB_INTERFACE_PROTOCOL_MOUSE)
+ 		hid->type = HID_TYPE_USBMOUSE;
+diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
+index 23140a3..46614b2 100644
+--- a/drivers/input/misc/Kconfig
++++ b/drivers/input/misc/Kconfig
+@@ -159,6 +159,19 @@ config INPUT_KEYSPAN_REMOTE
+ 	  To compile this driver as a module, choose M here: the module will
+ 	  be called keyspan_remote.
+ 
++config INPUT_APPLEIR
++	tristate "Apple infrared receiver (built in)"
++	depends on USB_ARCH_HAS_HCD
++	select USB
++	help
++	  Say Y here if you want to use a Apple infrared remote control. All
++	  the Apple computers from 2005 onwards include such a port, except
++	  the unibody Macbook (2009), and Mac Pros. This receiver is also
++	  used in the Apple TV set-top box.
++
++	  To compile this driver as a module, choose M here: the module will
++	  be called appleir.
++
+ config INPUT_POWERMATE
+ 	tristate "Griffin PowerMate and Contour Jog support"
+ 	depends on USB_ARCH_HAS_HCD
+diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile
+index 7e95a5d..3fa4404 100644
+--- a/drivers/input/misc/Makefile
++++ b/drivers/input/misc/Makefile
+@@ -6,6 +6,7 @@
+ 
+ obj-$(CONFIG_INPUT_88PM860X_ONKEY)	+= 88pm860x_onkey.o
+ obj-$(CONFIG_INPUT_APANEL)		+= apanel.o
++obj-$(CONFIG_INPUT_APPLEIR)		+= appleir.o
+ obj-$(CONFIG_INPUT_ATI_REMOTE)		+= ati_remote.o
+ obj-$(CONFIG_INPUT_ATI_REMOTE2)		+= ati_remote2.o
+ obj-$(CONFIG_INPUT_ATLAS_BTNS)		+= atlas_btns.o
+diff --git a/drivers/input/misc/appleir.c b/drivers/input/misc/appleir.c
+new file mode 100644
+index 0000000..cff4df6
+--- /dev/null
++++ b/drivers/input/misc/appleir.c
+@@ -0,0 +1,453 @@
++/*
++ * appleir: USB driver for the apple ir device
++ *
++ * Original driver written by James McKenzie
++ * Ported to recent 2.6 kernel versions by Greg Kroah-Hartman <gregkh at suse.de>
++ *
++ * Copyright (C) 2006 James McKenzie
++ * Copyright (C) 2008 Greg Kroah-Hartman <greg at kroah.com>
++ * Copyright (C) 2008 Novell Inc.
++ *
++ * 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, version 2.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/slab.h>
++#include <linux/input.h>
++#include <linux/usb/input.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/usb.h>
++#include <linux/usb/input.h>
++#include <asm/unaligned.h>
++#include <asm/byteorder.h>
++
++#define DRIVER_VERSION "v1.2"
++#define DRIVER_AUTHOR "James McKenzie"
++#define DRIVER_DESC "Apple infrared receiver driver"
++#define DRIVER_LICENSE "GPL"
++
++MODULE_AUTHOR(DRIVER_AUTHOR);
++MODULE_DESCRIPTION(DRIVER_DESC);
++MODULE_LICENSE(DRIVER_LICENSE);
++
++#define USB_VENDOR_ID_APPLE			0x05ac
++#define USB_DEVICE_ID_APPLE_IRCONTROL		0x8240
++#define USB_DEVICE_ID_APPLE_ATV_IRCONTROL	0x8241
++#define USB_DEVICE_ID_APPLE_IRCONTROL4		0x8242
++
++#define URB_SIZE	32
++
++#define MAX_KEYS	8
++#define MAX_KEYS_MASK	(MAX_KEYS - 1)
++
++#define dbginfo(dev, format, arg...) do { if (debug) dev_info(dev , format , ## arg); } while (0)
++
++static int debug;
++module_param(debug, int, 0644);
++MODULE_PARM_DESC(debug, "Enable extra debug messages and information");
++
++/* I have two devices both of which report the following */
++/* 25 87 ee 83 0a  	+  */
++/* 25 87 ee 83 0c  	-  */
++/* 25 87 ee 83 09	<< */
++/* 25 87 ee 83 06	>> */
++/* 25 87 ee 83 05	>" */
++/* 25 87 ee 83 03	menu */
++/* 26 00 00 00 00	for key repeat*/
++
++/* Thomas Glanzmann reports the following responses */
++/* 25 87 ee ca 0b	+  */
++/* 25 87 ee ca 0d	-  */
++/* 25 87 ee ca 08	<< */
++/* 25 87 ee ca 07	>> */
++/* 25 87 ee ca 04	>" */
++/* 25 87 ee ca 02 	menu */
++/* 26 00 00 00 00       for key repeat*/
++/* He also observes the following event sometimes */
++/* sent after a key is release, which I interpret */
++/* as a flat battery message */
++/* 25 87 e0 ca 06	flat battery */
++
++/* Alexandre Karpenko reports the following responses for Device ID 0x8242 */
++/* 25 87 ee 47 0b	+  */
++/* 25 87 ee 47 0d	-  */
++/* 25 87 ee 47 08	<< */
++/* 25 87 ee 47 07	>> */
++/* 25 87 ee 47 04	>" */
++/* 25 87 ee 47 02 	menu */
++/* 26 87 ee 47 ** 	for key repeat (** is the code of the key being held) */
++
++static const unsigned short appleir_key_table[] = {
++	KEY_RESERVED,
++	KEY_MENU,
++	KEY_PLAYPAUSE,
++	KEY_FORWARD,
++	KEY_BACK,
++	KEY_VOLUMEUP,
++	KEY_VOLUMEDOWN,
++	KEY_RESERVED,
++};
++
++struct appleir {
++	struct input_dev *input_dev;
++	unsigned short keymap[ARRAY_SIZE(appleir_key_table)];
++	u8 *data;
++	dma_addr_t dma_buf;
++	struct usb_device *usbdev;
++	unsigned int flags;
++	struct urb *urb;
++	struct timer_list key_up_timer;
++	int current_key;
++	char phys[32];
++};
++
++static DEFINE_MUTEX(appleir_mutex);
++
++enum {
++	APPLEIR_OPENED = 0x1,
++	APPLEIR_SUSPENDED = 0x2,
++};
++
++static struct usb_device_id appleir_ids[] = {
++	{ USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL) },
++	{ USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ATV_IRCONTROL) },
++	{ USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) },
++	{}
++};
++MODULE_DEVICE_TABLE(usb, appleir_ids);
++
++static void dump_packet(struct appleir *appleir, char *msg, u8 *data, int len)
++{
++	int i;
++
++	printk(KERN_ERR "appleir: %s (%d bytes)", msg, len);
++
++	for (i = 0; i < len; ++i)
++		printk(" %02x", data[i]);
++	printk("\n");
++}
++
++static void key_up(struct appleir *appleir, int key)
++{
++	dbginfo(&appleir->input_dev->dev, "key %d up\n", key);
++	input_report_key(appleir->input_dev, key, 0);
++	input_sync(appleir->input_dev);
++}
++
++static void key_down(struct appleir *appleir, int key)
++{
++	dbginfo(&appleir->input_dev->dev, "key %d down\n", key);
++	input_report_key(appleir->input_dev, key, 1);
++	input_sync(appleir->input_dev);
++}
++
++static void battery_flat(struct appleir *appleir)
++{
++	dev_err(&appleir->input_dev->dev, "possible flat battery?\n");
++}
++
++static void key_up_tick(unsigned long data)
++{
++	struct appleir *appleir = (struct appleir *)data;
++
++	if (appleir->current_key) {
++		key_up(appleir, appleir->current_key);
++		appleir->current_key = 0;
++	}
++}
++
++static void new_data(struct appleir *appleir, u8 *data, int len)
++{
++	static const u8 keydown[] = { 0x25, 0x87, 0xee };
++	static const u8 keyrepeat[] = { 0x26, };
++	static const u8 flatbattery[] = { 0x25, 0x87, 0xe0 };
++
++	if (debug)
++		dump_packet(appleir, "received", data, len);
++
++	if (len != 5)
++		return;
++
++	if (!memcmp(data, keydown, sizeof(keydown))) {
++		/* If we already have a key down, take it up before marking
++		   this one down */
++		if (appleir->current_key)
++			key_up(appleir, appleir->current_key);
++		appleir->current_key = appleir->keymap[(data[4] >> 1) & MAX_KEYS_MASK];
++
++		key_down(appleir, appleir->current_key);
++		/* Remote doesn't do key up, either pull them up, in the test
++		   above, or here set a timer which pulls them up after 1/8 s */
++		mod_timer(&appleir->key_up_timer, jiffies + HZ / 8);
++
++		return;
++	}
++
++	if (!memcmp(data, keyrepeat, sizeof(keyrepeat))) {
++		key_down(appleir, appleir->current_key);
++		/* Remote doesn't do key up, either pull them up, in the test
++		   above, or here set a timer which pulls them up after 1/8 s */
++		mod_timer(&appleir->key_up_timer, jiffies + HZ / 8);
++		return;
++	}
++
++	if (!memcmp(data, flatbattery, sizeof(flatbattery))) {
++		battery_flat(appleir);
++		/* Fall through */
++	}
++
++	dump_packet(appleir, "unknown packet", data, len);
++}
++
++static void appleir_urb(struct urb *urb)
++{
++	struct appleir *appleir = urb->context;
++	int status = urb->status;
++	int retval;
++
++	switch (status) {
++	case 0:
++		new_data(appleir, urb->transfer_buffer, urb->actual_length);
++		break;
++	case -ECONNRESET:
++	case -ENOENT:
++	case -ESHUTDOWN:
++		/* This urb is terminated, clean up */
++		dbginfo(&appleir->input_dev->dev, "%s - urb shutting down with status: %d", __func__,
++			urb->status);
++		return;
++	default:
++		dbginfo(&appleir->input_dev->dev, "%s - nonzero urb status received: %d", __func__,
++			urb->status);
++	}
++
++	retval = usb_submit_urb(urb, GFP_ATOMIC);
++	if (retval)
++		err("%s - usb_submit_urb failed with result %d", __func__,
++		    retval);
++}
++
++static int appleir_open(struct input_dev *dev)
++{
++	struct appleir *appleir = input_get_drvdata(dev);
++	struct usb_interface *intf = usb_ifnum_to_if(appleir->usbdev, 0);
++	int r;
++
++	r = usb_autopm_get_interface(intf);
++	if (r) {
++		dev_err(&intf->dev,
++			"%s(): usb_autopm_get_interface() = %d\n", __func__, r);
++		return r;
++	}
++
++	mutex_lock(&appleir_mutex);
++
++	if (usb_submit_urb(appleir->urb, GFP_ATOMIC)) {
++		r = -EIO;
++		goto fail;
++	}
++
++	appleir->flags |= APPLEIR_OPENED;
++
++	mutex_unlock(&appleir_mutex);
++
++	usb_autopm_put_interface(intf);
++
++	return 0;
++fail:
++	mutex_unlock(&appleir_mutex);
++	usb_autopm_put_interface(intf);
++	return r;
++}
++
++static void appleir_close(struct input_dev *dev)
++{
++	struct appleir *appleir = input_get_drvdata(dev);
++
++	mutex_lock(&appleir_mutex);
++
++	if (!(appleir->flags & APPLEIR_SUSPENDED)) {
++		usb_kill_urb(appleir->urb);
++		del_timer_sync(&appleir->key_up_timer);
++	}
++
++	appleir->flags &= ~APPLEIR_OPENED;
++
++	mutex_unlock(&appleir_mutex);
++}
++
++static int appleir_probe(struct usb_interface *intf,
++			 const struct usb_device_id *id)
++{
++	struct usb_device *dev = interface_to_usbdev(intf);
++	struct usb_endpoint_descriptor *endpoint;
++	struct appleir *appleir = NULL;
++	struct input_dev *input_dev;
++	int retval = -ENOMEM;
++	int i;
++
++	appleir = kzalloc(sizeof(struct appleir), GFP_KERNEL);
++	if (!appleir)
++		goto allocfail;
++
++	appleir->data = usb_buffer_alloc(dev, URB_SIZE, GFP_KERNEL,
++					 &appleir->dma_buf);
++	if (!appleir->data)
++		goto usbfail;
++
++	appleir->urb = usb_alloc_urb(0, GFP_KERNEL);
++	if (!appleir->urb)
++		goto urbfail;
++
++	appleir->usbdev = dev;
++
++	input_dev = input_allocate_device();
++	if (!input_dev)
++		goto inputfail;
++
++	appleir->input_dev = input_dev;
++
++	usb_make_path(dev, appleir->phys, sizeof(appleir->phys));
++	strlcpy(appleir->phys, "/input0", sizeof(appleir->phys));
++
++	input_dev->name = "Apple Infrared Remote Controller";
++	input_dev->phys = appleir->phys;
++	usb_to_input_id(dev, &input_dev->id);
++	input_dev->dev.parent = &intf->dev;
++	input_dev->keycode = appleir->keymap;
++	input_dev->keycodesize = sizeof(unsigned short);
++	input_dev->keycodemax = ARRAY_SIZE(appleir->keymap);
++
++	input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP);
++
++	memcpy(appleir->keymap, appleir_key_table, sizeof(appleir->keymap));
++	for (i = 0; i < ARRAY_SIZE(appleir_key_table); i++)
++		set_bit(appleir->keymap[i], input_dev->keybit);
++	clear_bit(KEY_RESERVED, input_dev->keybit);
++
++	input_set_drvdata(input_dev, appleir);
++	input_dev->open = appleir_open;
++	input_dev->close = appleir_close;
++
++	endpoint = &intf->cur_altsetting->endpoint[0].desc;
++
++	usb_fill_int_urb(appleir->urb, dev,
++			 usb_rcvintpipe(dev, endpoint->bEndpointAddress),
++			 appleir->data, 8,
++			 appleir_urb, appleir, endpoint->bInterval);
++
++	appleir->urb->transfer_dma = appleir->dma_buf;
++	appleir->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
++
++	setup_timer(&appleir->key_up_timer,
++		    key_up_tick, (unsigned long) appleir);
++
++	retval = input_register_device(appleir->input_dev);
++	if (retval)
++		goto inputfail;
++
++	usb_set_intfdata(intf, appleir);
++
++	return 0;
++
++inputfail:
++	input_free_device(appleir->input_dev);
++
++urbfail:
++	usb_free_urb(appleir->urb);
++
++usbfail:
++	usb_buffer_free(dev, URB_SIZE, appleir->data,
++			appleir->dma_buf);
++
++allocfail:
++	kfree(appleir);
++
++	return retval;
++}
++
++static void appleir_disconnect(struct usb_interface *intf)
++{
++	struct appleir *appleir = usb_get_intfdata(intf);
++
++	usb_set_intfdata(intf, NULL);
++	input_unregister_device(appleir->input_dev);
++	usb_free_urb(appleir->urb);
++	usb_buffer_free(interface_to_usbdev(intf), URB_SIZE,
++			appleir->data, appleir->dma_buf);
++	kfree(appleir);
++}
++
++static int appleir_suspend(struct usb_interface *interface,
++			   pm_message_t message)
++{
++	struct appleir *appleir = usb_get_intfdata(interface);
++
++	mutex_lock(&appleir_mutex);
++	if (appleir->flags & APPLEIR_OPENED)
++		usb_kill_urb(appleir->urb);
++
++	appleir->flags |= APPLEIR_SUSPENDED;
++
++	mutex_unlock(&appleir_mutex);
++
++	return 0;
++}
++
++static int appleir_resume(struct usb_interface *interface)
++{
++	struct appleir *appleir;
++	int r = 0;
++
++	appleir = usb_get_intfdata(interface);
++
++	mutex_lock(&appleir_mutex);
++	if (appleir->flags & APPLEIR_OPENED) {
++		struct usb_endpoint_descriptor *endpoint;
++
++		endpoint = &interface->cur_altsetting->endpoint[0].desc;
++		usb_fill_int_urb(appleir->urb, appleir->usbdev,
++				 usb_rcvintpipe(appleir->usbdev, endpoint->bEndpointAddress),
++				 appleir->data, 8,
++				 appleir_urb, appleir, endpoint->bInterval);
++		appleir->urb->transfer_dma = appleir->dma_buf;
++		appleir->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
++
++		/* And reset the USB device */
++		if (usb_submit_urb(appleir->urb, GFP_ATOMIC))
++			r = -EIO;
++	}
++
++	appleir->flags &= ~APPLEIR_SUSPENDED;
++
++	mutex_unlock(&appleir_mutex);
++
++	return r;
++}
++
++static struct usb_driver appleir_driver = {
++	.name                 = "appleir",
++	.probe                = appleir_probe,
++	.disconnect           = appleir_disconnect,
++	.suspend              = appleir_suspend,
++	.resume               = appleir_resume,
++	.reset_resume         = appleir_resume,
++	.id_table             = appleir_ids,
++};
++
++static int __init appleir_init(void)
++{
++	return usb_register(&appleir_driver);
++}
++
++static void __exit appleir_exit(void)
++{
++	usb_deregister(&appleir_driver);
++}
++
++module_init(appleir_init);
++module_exit(appleir_exit);
+diff --git a/include/linux/hid.h b/include/linux/hid.h
+index b1344ec..f1f2b6f 100644
+--- a/include/linux/hid.h
++++ b/include/linux/hid.h
+@@ -308,11 +308,13 @@ struct hid_item {
+ #define HID_QUIRK_NOTOUCH			0x00000002
+ #define HID_QUIRK_IGNORE			0x00000004
+ #define HID_QUIRK_NOGET				0x00000008
++#define HID_QUIRK_HIDDEV_FORCE			0x00000010
+ #define HID_QUIRK_BADPAD			0x00000020
+ #define HID_QUIRK_MULTI_INPUT			0x00000040
+ #define HID_QUIRK_SKIP_OUTPUT_REPORTS		0x00010000
+ #define HID_QUIRK_FULLSPEED_INTERVAL		0x10000000
+ #define HID_QUIRK_NO_INIT_REPORTS		0x20000000
++#define HID_QUIRK_NO_IGNORE			0x40000000
+ 
+ /*
+  * This is the global environment of the parser. This information is
+-- 
+1.7.0.1
+

ata-generic-handle-new-mbp-with-mcp89.patch:
 drivers/ata/ahci.c        |   10 ++++++++++
 drivers/ata/ata_generic.c |    6 ++++++
 include/linux/pci_ids.h   |    1 +
 3 files changed, 17 insertions(+)

--- NEW FILE ata-generic-handle-new-mbp-with-mcp89.patch ---
From: Tejun Heo <tj at kernel.org>
Date: Thu, 17 Jun 2010 09:42:22 +0000 (+0200)
Subject: ahci,ata_generic: let ata_generic handle new MBP w/ MCP89
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=c6353b4520788e34098bbf61c73fb9618ca7fdd6

ahci,ata_generic: let ata_generic handle new MBP w/ MCP89

For yet unknown reason, MCP89 on MBP 7,1 doesn't work w/ ahci under
linux but the controller doesn't require explicit mode setting and
works fine with ata_generic.  Make ahci ignore the controller on MBP
7,1 and let ata_generic take it for now.

Reported in bko#15923.

  https://bugzilla.kernel.org/show_bug.cgi?id=15923

NVIDIA is investigating why ahci mode doesn't work.

Signed-off-by: Tejun Heo <tj at kernel.org>
Cc: Peer Chen <pchen at nvidia.com>
Cc: stable at kernel.org
Reported-by: Anders Østhus <grapz666 at gmail.com>
Reported-by: Andreas Graf <andreas_graf at csgraf.de>
Reported-by: Benoit Gschwind <gschwind at gnu-log.net>
Reported-by: Damien Cassou <damien.cassou at gmail.com>
Reported-by: tixetsal at juno.com
Signed-off-by: Jeff Garzik <jgarzik at redhat.com>
---

diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index 8ca16f5..f252253 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -1053,6 +1053,16 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 	if (pdev->vendor == PCI_VENDOR_ID_MARVELL && !marvell_enable)
 		return -ENODEV;
 
+	/*
+	 * For some reason, MCP89 on MacBook 7,1 doesn't work with
+	 * ahci, use ata_generic instead.
+	 */
+	if (pdev->vendor == PCI_VENDOR_ID_NVIDIA &&
+	    pdev->device == PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA &&
+	    pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE &&
+	    pdev->subsystem_device == 0xcb89)
+		return -ENODEV;
+
 	/* Promise's PDC42819 is a SAS/SATA controller that has an AHCI mode.
 	 * At the moment, we can only use the AHCI mode. Let the users know
 	 * that for SAS drives they're out of luck.
diff --git a/drivers/ata/ata_generic.c b/drivers/ata/ata_generic.c
index 573158a..d4ccf74 100644
--- a/drivers/ata/ata_generic.c
+++ b/drivers/ata/ata_generic.c
@@ -168,6 +168,12 @@ static struct pci_device_id ata_generic[] = {
 	{ PCI_DEVICE(PCI_VENDOR_ID_VIA,    PCI_DEVICE_ID_VIA_82C561), },
 	{ PCI_DEVICE(PCI_VENDOR_ID_OPTI,   PCI_DEVICE_ID_OPTI_82C558), },
 	{ PCI_DEVICE(PCI_VENDOR_ID_CENATEK,PCI_DEVICE_ID_CENATEK_IDE), },
+	/*
+	 * For some reason, MCP89 on MacBook 7,1 doesn't work with
+	 * ahci, use ata_generic instead.
+	 */
+	{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA,
+	  PCI_VENDOR_ID_APPLE, 0xcb89, },
 #if !defined(CONFIG_PATA_TOSHIBA) && !defined(CONFIG_PATA_TOSHIBA_MODULE)
 	{ PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_1), },
 	{ PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_2),  },
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index 4eb4679..3bedcc1 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -1261,6 +1261,7 @@
 #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE       0x0759
 #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_SMBUS     0x07D8
 #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP79_SMBUS     0x0AA2
+#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA	    0x0D85
 
 #define PCI_VENDOR_ID_IMS		0x10e0
 #define PCI_DEVICE_ID_IMS_TT128		0x9128

ata-generic-implement-ata-gen-flags.patch:
 ata_generic.c |   26 +++++++++++++++++++-------
 1 file changed, 19 insertions(+), 7 deletions(-)

--- NEW FILE ata-generic-implement-ata-gen-flags.patch ---
From: Tejun Heo <tj at kernel.org>
Date: Tue, 22 Jun 2010 10:27:26 +0000 (+0200)
Subject: ata_generic: implement ATA_GEN_* flags and force enable DMA on MBP 7,1
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=1529c69adce1e95f7ae72f0441590c226bbac7fc

ata_generic: implement ATA_GEN_* flags and force enable DMA on MBP 7,1

[[ cebbert at redhat.com : backport to 2.6.34 ]]

IDE mode of MCP89 on MBP 7,1 doesn't set DMA enable bits in the BMDMA
status register.  Make the following changes to work around the problem.

* Instead of using hard coded 1 in id->driver_data as class code
  match, use ATA_GEN_CLASS_MATCH and carry the matched id in
  host->private_data.

* Instead of matching PCI_VENDOR_ID_CENATEK, use ATA_GEN_FORCE_DMA
  flag in id instead.

* Add ATA_GEN_FORCE_DMA to the id entry of MBP 7,1.

Signed-off-by: Tejun Heo <tj at kernel.org>
Cc: Peer Chen <pchen at nvidia.com>
Cc: stable at kernel.org
Reported-by: Anders Østhus <grapz666 at gmail.com>
Reported-by: Andreas Graf <andreas_graf at csgraf.de>
Reported-by: Benoit Gschwind <gschwind at gnu-log.net>
Reported-by: Damien Cassou <damien.cassou at gmail.com>
Reported-by: tixetsal at juno.com
Signed-off-by: Jeff Garzik <jgarzik at redhat.com>
---

diff --git a/drivers/ata/ata_generic.c b/drivers/ata/ata_generic.c
index d4ccf74..7107a69 100644
--- a/drivers/ata/ata_generic.c
+++ b/drivers/ata/ata_generic.c
@@ -32,6 +32,11 @@
  *	A generic parallel ATA driver using libata
  */
 
+enum {
+	ATA_GEN_CLASS_MATCH		= (1 << 0),
+	ATA_GEN_FORCE_DMA		= (1 << 1),
+};
+
 /**
  *	generic_set_mode	-	mode setting
  *	@link: link to set up
@@ -46,13 +51,17 @@
 static int generic_set_mode(struct ata_link *link, struct ata_device **unused)
 {
 	struct ata_port *ap = link->ap;
+	const struct pci_device_id *id = ap->host->private_data;
 	int dma_enabled = 0;
 	struct ata_device *dev;
 	struct pci_dev *pdev = to_pci_dev(ap->host->dev);
 
-	/* Bits 5 and 6 indicate if DMA is active on master/slave */
-	if (ap->ioaddr.bmdma_addr)
+	if (id->driver_data & ATA_GEN_FORCE_DMA) {
+		dma_enabled = 0xff;
+	} else if (ap->ioaddr.bmdma_addr) {
+		/* Bits 5 and 6 indicate if DMA is active on master/slave */
 		dma_enabled = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
+	}
 
 	if (pdev->vendor == PCI_VENDOR_ID_CENATEK)
 		dma_enabled = 0xFF;
@@ -126,7 +135,7 @@ static int ata_generic_init_one(struct pci_dev *dev, const struct pci_device_id
 	const struct ata_port_info *ppi[] = { &info, NULL };
 
 	/* Don't use the generic entry unless instructed to do so */
-	if (id->driver_data == 1 && all_generic_ide == 0)
+	if ((id->driver_data & ATA_GEN_CLASS_MATCH) && all_generic_ide == 0)
 		return -ENODEV;
 
 	/* Devices that need care */
@@ -155,7 +164,7 @@ static int ata_generic_init_one(struct pci_dev *dev, const struct pci_device_id
 			return rc;
 		pcim_pin_device(dev);
 	}
-	return ata_pci_sff_init_one(dev, ppi, &generic_sht, NULL, 0);
+	return ata_pci_sff_init_one(dev, ppi, &generic_sht, (void *)id, 0);
 }
 
 static struct pci_device_id ata_generic[] = {
@@ -167,13 +176,15 @@ static struct pci_device_id ata_generic[] = {
 	{ PCI_DEVICE(PCI_VENDOR_ID_HINT,   PCI_DEVICE_ID_HINT_VXPROII_IDE), },
 	{ PCI_DEVICE(PCI_VENDOR_ID_VIA,    PCI_DEVICE_ID_VIA_82C561), },
 	{ PCI_DEVICE(PCI_VENDOR_ID_OPTI,   PCI_DEVICE_ID_OPTI_82C558), },
-	{ PCI_DEVICE(PCI_VENDOR_ID_CENATEK,PCI_DEVICE_ID_CENATEK_IDE), },
+	{ PCI_DEVICE(PCI_VENDOR_ID_CENATEK,PCI_DEVICE_ID_CENATEK_IDE),
+	  .driver_data = ATA_GEN_FORCE_DMA },
 	/*
 	 * For some reason, MCP89 on MacBook 7,1 doesn't work with
 	 * ahci, use ata_generic instead.
 	 */
 	{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA,
-	  PCI_VENDOR_ID_APPLE, 0xcb89, },
+	  PCI_VENDOR_ID_APPLE, 0xcb89,
+	  .driver_data = ATA_GEN_FORCE_DMA },
 #if !defined(CONFIG_PATA_TOSHIBA) && !defined(CONFIG_PATA_TOSHIBA_MODULE)
 	{ PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_1), },
 	{ PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_2),  },
@@ -181,7 +192,8 @@ static struct pci_device_id ata_generic[] = {
 	{ PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_5),  },
 #endif	
 	/* Must come last. If you add entries adjust this table appropriately */
-	{ PCI_ANY_ID,		PCI_ANY_ID,			   PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_IDE << 8, 0xFFFFFF00UL, 1},
+	{ PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_IDE << 8, 0xFFFFFF00UL),
+	  .driver_data = ATA_GEN_CLASS_MATCH },
 	{ 0, },
 };
 

coredump-uid-pipe-check.patch:
 exec.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Index: coredump-uid-pipe-check.patch
===================================================================
RCS file: coredump-uid-pipe-check.patch
diff -N coredump-uid-pipe-check.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ coredump-uid-pipe-check.patch	9 Jul 2010 09:09:12 -0000	1.3
@@ -0,0 +1,14 @@
+diff -up linux-2.6.32.noarch/fs/exec.c.orig linux-2.6.32.noarch/fs/exec.c
+--- linux-2.6.32.noarch/fs/exec.c.orig	2010-02-22 12:40:06.000000000 -0500
++++ linux-2.6.32.noarch/fs/exec.c	2010-02-22 12:48:34.000000000 -0500
+@@ -1973,8 +1973,9 @@ void do_coredump(long signr, int exit_co
+ 	/*
+ 	 * Dont allow local users get cute and trick others to coredump
+ 	 * into their pre-created files:
++	 * Note this isn't relevant to pipes
+ 	 */
+-	if (inode->i_uid != current_fsuid())
++	if (!ispipe && (inode->i_uid != current_fsuid()))
+ 		goto close_fail;
+ 	if (!cprm.file->f_op)
+ 		goto close_fail;

crypto-add-async-hash-testing.patch:
 testmgr.c |   67 ++++++++++++++++++++++++++++++++++++++++++++------------------
 1 file changed, 48 insertions(+), 19 deletions(-)

--- NEW FILE crypto-add-async-hash-testing.patch ---
>From e45009229be6a7fae49bdfa3459905668c0b0fb1 Mon Sep 17 00:00:00 2001
From: David S. Miller <davem at davemloft.net>
Date: Wed, 19 May 2010 14:12:03 +1000
Subject: crypto: testmgr - Add testing for async hashing and update/final

Extend testmgr such that it tests async hash algorithms,
and that for both sync and async hashes it tests both
->digest() and ->update()/->final() sequences.

Signed-off-by: David S. Miller <davem at davemloft.net>
Signed-off-by: Herbert Xu <herbert at gondor.apana.org.au>
---
 crypto/testmgr.c |   66 +++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 48 insertions(+), 18 deletions(-)

diff --git a/crypto/testmgr.c b/crypto/testmgr.c
index c494d76..5c8aaa0 100644
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
@@ -153,8 +153,21 @@ static void testmgr_free_buf(char *buf[XBUFSIZE])
 		free_page((unsigned long)buf[i]);
 }
 
+static int do_one_async_hash_op(struct ahash_request *req,
+				struct tcrypt_result *tr,
+				int ret)
+{
+	if (ret == -EINPROGRESS || ret == -EBUSY) {
+		ret = wait_for_completion_interruptible(&tr->completion);
+		if (!ret)
+			ret = tr->err;
+		INIT_COMPLETION(tr->completion);
+	}
+	return ret;
+}
+
 static int test_hash(struct crypto_ahash *tfm, struct hash_testvec *template,
-		     unsigned int tcount)
+		     unsigned int tcount, bool use_digest)
 {
 	const char *algo = crypto_tfm_alg_driver_name(crypto_ahash_tfm(tfm));
 	unsigned int i, j, k, temp;
@@ -206,23 +219,36 @@ static int test_hash(struct crypto_ahash *tfm, struct hash_testvec *template,
 		}
 
 		ahash_request_set_crypt(req, sg, result, template[i].psize);
-		ret = crypto_ahash_digest(req);
-		switch (ret) {
-		case 0:
-			break;
-		case -EINPROGRESS:
-		case -EBUSY:
-			ret = wait_for_completion_interruptible(
-				&tresult.completion);
-			if (!ret && !(ret = tresult.err)) {
-				INIT_COMPLETION(tresult.completion);
-				break;
+		if (use_digest) {
+			ret = do_one_async_hash_op(req, &tresult,
+						   crypto_ahash_digest(req));
+			if (ret) {
+				pr_err("alg: hash: digest failed on test %d "
+				       "for %s: ret=%d\n", j, algo, -ret);
+				goto out;
+			}
+		} else {
+			ret = do_one_async_hash_op(req, &tresult,
+						   crypto_ahash_init(req));
+			if (ret) {
+				pr_err("alt: hash: init failed on test %d "
+				       "for %s: ret=%d\n", j, algo, -ret);
+				goto out;
+			}
+			ret = do_one_async_hash_op(req, &tresult,
+						   crypto_ahash_update(req));
+			if (ret) {
+				pr_err("alt: hash: update failed on test %d "
+				       "for %s: ret=%d\n", j, algo, -ret);
+				goto out;
+			}
+			ret = do_one_async_hash_op(req, &tresult,
+						   crypto_ahash_final(req));
+			if (ret) {
+				pr_err("alt: hash: final failed on test %d "
+				       "for %s: ret=%d\n", j, algo, -ret);
+				goto out;
 			}
-			/* fall through */
-		default:
-			printk(KERN_ERR "alg: hash: digest failed on test %d "
-			       "for %s: ret=%d\n", j, algo, -ret);
-			goto out;
 		}
 
 		if (memcmp(result, template[i].digest,
@@ -1402,7 +1428,11 @@ static int alg_test_hash(const struct alg_test_desc *desc, const char *driver,
 		return PTR_ERR(tfm);
 	}
 
-	err = test_hash(tfm, desc->suite.hash.vecs, desc->suite.hash.count);
+	err = test_hash(tfm, desc->suite.hash.vecs,
+			desc->suite.hash.count, true);
+	if (!err)
+		err = test_hash(tfm, desc->suite.hash.vecs,
+				desc->suite.hash.count, false);
 
 	crypto_free_ahash(tfm);
 	return err;
-- 
1.7.0.1


drm-next.patch:
 b/Documentation/DocBook/Makefile                  |    2 
 b/Documentation/DocBook/drm.tmpl                  |  839 +++++++++
 b/arch/x86/include/asm/cacheflush.h               |    2 
 b/arch/x86/mm/pageattr.c                          |   53 
 b/drivers/char/agp/agp.h                          |   80 
 b/drivers/char/agp/ali-agp.c                      |    1 
 b/drivers/char/agp/amd-k7-agp.c                   |    9 
 b/drivers/char/agp/amd64-agp.c                    |   56 
 b/drivers/char/agp/ati-agp.c                      |    8 
 b/drivers/char/agp/efficeon-agp.c                 |    1 
 b/drivers/char/agp/intel-agp.c                    | 1883 +---------------------
 b/drivers/char/agp/intel-agp.h                    |  239 ++
 b/drivers/char/agp/intel-gtt.c                    | 1548 ++++++++++++++++++
 b/drivers/char/agp/nvidia-agp.c                   |    1 
 b/drivers/char/agp/sis-agp.c                      |    9 
 b/drivers/char/agp/uninorth-agp.c                 |   16 
 b/drivers/char/agp/via-agp.c                      |    2 
 b/drivers/gpu/drm/Kconfig                         |    4 
 b/drivers/gpu/drm/drm_auth.c                      |    3 
 b/drivers/gpu/drm/drm_crtc.c                      |   13 
 b/drivers/gpu/drm/drm_crtc_helper.c               |  506 +----
 b/drivers/gpu/drm/drm_dma.c                       |    4 
 b/drivers/gpu/drm/drm_edid.c                      |  807 ++++++---
 b/drivers/gpu/drm/drm_fb_helper.c                 |  910 +++++++---
 b/drivers/gpu/drm/drm_fops.c                      |    3 
 b/drivers/gpu/drm/drm_gem.c                       |   49 
 b/drivers/gpu/drm/drm_modes.c                     |  105 -
 b/drivers/gpu/drm/drm_sysfs.c                     |    2 
 b/drivers/gpu/drm/i915/Makefile                   |    3 
 b/drivers/gpu/drm/i915/dvo.h                      |   10 
 b/drivers/gpu/drm/i915/dvo_ch7017.c               |   46 
 b/drivers/gpu/drm/i915/dvo_ch7xxx.c               |   44 
 b/drivers/gpu/drm/i915/dvo_ivch.c                 |   21 
 b/drivers/gpu/drm/i915/dvo_sil164.c               |   38 
 b/drivers/gpu/drm/i915/dvo_tfp410.c               |   32 
 b/drivers/gpu/drm/i915/i915_debugfs.c             |  110 -
 b/drivers/gpu/drm/i915/i915_dma.c                 |  745 +++++++-
 b/drivers/gpu/drm/i915/i915_drv.c                 |   99 -
 b/drivers/gpu/drm/i915/i915_drv.h                 |  246 +-
 b/drivers/gpu/drm/i915/i915_gem.c                 | 1045 +++++-------
 b/drivers/gpu/drm/i915/i915_gem_debug.c           |    2 
 b/drivers/gpu/drm/i915/i915_gem_tiling.c          |    5 
 b/drivers/gpu/drm/i915/i915_irq.c                 |  205 +-
 b/drivers/gpu/drm/i915/i915_reg.h                 |  225 ++
 b/drivers/gpu/drm/i915/i915_suspend.c             |   41 
 b/drivers/gpu/drm/i915/i915_trace.h               |  112 -
 b/drivers/gpu/drm/i915/intel_bios.c               |   11 
 b/drivers/gpu/drm/i915/intel_crt.c                |  116 -
 b/drivers/gpu/drm/i915/intel_display.c            | 1350 +++++++++++----
 b/drivers/gpu/drm/i915/intel_dp.c                 |  263 +--
 b/drivers/gpu/drm/i915/intel_drv.h                |   31 
 b/drivers/gpu/drm/i915/intel_dvo.c                |  103 -
 b/drivers/gpu/drm/i915/intel_fb.c                 |  223 +-
 b/drivers/gpu/drm/i915/intel_hdmi.c               |   76 
 b/drivers/gpu/drm/i915/intel_lvds.c               |  111 -
 b/drivers/gpu/drm/i915/intel_modes.c              |   21 
 b/drivers/gpu/drm/i915/intel_overlay.c            |   60 
 b/drivers/gpu/drm/i915/intel_ringbuffer.c         |  849 +++++++++
 b/drivers/gpu/drm/i915/intel_ringbuffer.h         |  124 +
 b/drivers/gpu/drm/i915/intel_sdvo.c               | 1009 +++++------
 b/drivers/gpu/drm/i915/intel_tv.c                 |  185 --
 b/drivers/gpu/drm/nouveau/Makefile                |    3 
 b/drivers/gpu/drm/nouveau/nouveau_acpi.c          |   71 
 b/drivers/gpu/drm/nouveau/nouveau_bios.c          |  594 ++++--
 b/drivers/gpu/drm/nouveau/nouveau_bios.h          |    1 
 b/drivers/gpu/drm/nouveau/nouveau_bo.c            |  116 -
 b/drivers/gpu/drm/nouveau/nouveau_connector.c     |   49 
 b/drivers/gpu/drm/nouveau/nouveau_crtc.h          |    2 
 b/drivers/gpu/drm/nouveau/nouveau_debugfs.c       |    3 
 b/drivers/gpu/drm/nouveau/nouveau_display.c       |   42 
 b/drivers/gpu/drm/nouveau/nouveau_drv.c           |   48 
 b/drivers/gpu/drm/nouveau/nouveau_drv.h           |   15 
 b/drivers/gpu/drm/nouveau/nouveau_encoder.h       |    2 
 b/drivers/gpu/drm/nouveau/nouveau_fb.h            |    6 
 b/drivers/gpu/drm/nouveau/nouveau_fbcon.c         |  265 +--
 b/drivers/gpu/drm/nouveau/nouveau_fbcon.h         |   19 
 b/drivers/gpu/drm/nouveau/nouveau_gem.c           |    5 
 b/drivers/gpu/drm/nouveau/nouveau_grctx.c         |    6 
 b/drivers/gpu/drm/nouveau/nouveau_i2c.c           |   21 
 b/drivers/gpu/drm/nouveau/nouveau_irq.c           |   10 
 b/drivers/gpu/drm/nouveau/nouveau_mem.c           |    3 
 b/drivers/gpu/drm/nouveau/nouveau_reg.h           |    1 
 b/drivers/gpu/drm/nouveau/nouveau_state.c         |   83 
 b/drivers/gpu/drm/nouveau/nv04_cursor.c           |    1 
 b/drivers/gpu/drm/nouveau/nv04_fbcon.c            |   18 
 b/drivers/gpu/drm/nouveau/nv04_graph.c            |  566 ++++++
 b/drivers/gpu/drm/nouveau/nv40_graph.c            |    8 
 b/drivers/gpu/drm/nouveau/nv40_grctx.c            |    5 
 b/drivers/gpu/drm/nouveau/nv50_calc.c             |   87 +
 b/drivers/gpu/drm/nouveau/nv50_crtc.c             |   46 
 b/drivers/gpu/drm/nouveau/nv50_cursor.c           |    1 
 b/drivers/gpu/drm/nouveau/nv50_display.c          |   36 
 b/drivers/gpu/drm/nouveau/nv50_fb.c               |   10 
 b/drivers/gpu/drm/nouveau/nv50_fbcon.c            |   16 
 b/drivers/gpu/drm/nouveau/nv50_gpio.c             |    2 
 b/drivers/gpu/drm/nouveau/nv50_sor.c              |   18 
 b/drivers/gpu/drm/radeon/Makefile                 |    7 
 b/drivers/gpu/drm/radeon/atombios.h               |   76 
 b/drivers/gpu/drm/radeon/atombios_crtc.c          |   23 
 b/drivers/gpu/drm/radeon/atombios_dp.c            |    2 
 b/drivers/gpu/drm/radeon/evergreen.c              | 1562 +++++++++++++++++-
 b/drivers/gpu/drm/radeon/evergreen_cs.c           | 1356 +++++++++++++++
 b/drivers/gpu/drm/radeon/evergreen_reg.h          |    7 
 b/drivers/gpu/drm/radeon/evergreend.h             | 1020 +++++++++++
 b/drivers/gpu/drm/radeon/r100.c                   |  739 ++++++--
 b/drivers/gpu/drm/radeon/r100d.h                  |  164 +
 b/drivers/gpu/drm/radeon/r300.c                   |  151 -
 b/drivers/gpu/drm/radeon/r300d.h                  |   47 
 b/drivers/gpu/drm/radeon/r420.c                   |   46 
 b/drivers/gpu/drm/radeon/r500_reg.h               |    3 
 b/drivers/gpu/drm/radeon/r520.c                   |    7 
 b/drivers/gpu/drm/radeon/r600.c                   |  693 +++++++-
 b/drivers/gpu/drm/radeon/r600_audio.c             |   58 
 b/drivers/gpu/drm/radeon/r600_blit_kms.c          |    3 
 b/drivers/gpu/drm/radeon/r600_hdmi.c              |   65 
 b/drivers/gpu/drm/radeon/r600_reg.h               |   57 
 b/drivers/gpu/drm/radeon/radeon.h                 |  265 ++-
 b/drivers/gpu/drm/radeon/radeon_agp.c             |    5 
 b/drivers/gpu/drm/radeon/radeon_asic.c            |  144 +
 b/drivers/gpu/drm/radeon/radeon_asic.h            |   45 
 b/drivers/gpu/drm/radeon/radeon_atombios.c        |  321 ++-
 b/drivers/gpu/drm/radeon/radeon_bios.c            |    3 
 b/drivers/gpu/drm/radeon/radeon_combios.c         |   71 
 b/drivers/gpu/drm/radeon/radeon_connectors.c      |   63 
 b/drivers/gpu/drm/radeon/radeon_cs.c              |    4 
 b/drivers/gpu/drm/radeon/radeon_device.c          |   72 
 b/drivers/gpu/drm/radeon/radeon_display.c         |  135 -
 b/drivers/gpu/drm/radeon/radeon_drv.c             |   12 
 b/drivers/gpu/drm/radeon/radeon_encoders.c        |   44 
 b/drivers/gpu/drm/radeon/radeon_fb.c              |  364 ++--
 b/drivers/gpu/drm/radeon/radeon_fence.c           |  107 -
 b/drivers/gpu/drm/radeon/radeon_gart.c            |    2 
 b/drivers/gpu/drm/radeon/radeon_gem.c             |    6 
 b/drivers/gpu/drm/radeon/radeon_irq_kms.c         |    5 
 b/drivers/gpu/drm/radeon/radeon_kms.c             |   25 
 b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c     |   14 
 b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c |   26 
 b/drivers/gpu/drm/radeon/radeon_mode.h            |   49 
 b/drivers/gpu/drm/radeon/radeon_object.c          |   44 
 b/drivers/gpu/drm/radeon/radeon_object.h          |    2 
 b/drivers/gpu/drm/radeon/radeon_pm.c              |  834 ++++++---
 b/drivers/gpu/drm/radeon/radeon_reg.h             |    4 
 b/drivers/gpu/drm/radeon/radeon_ring.c            |   66 
 b/drivers/gpu/drm/radeon/radeon_state.c           |    5 
 b/drivers/gpu/drm/radeon/radeon_ttm.c             |  122 -
 b/drivers/gpu/drm/radeon/reg_srcs/evergreen       |  611 +++++++
 b/drivers/gpu/drm/radeon/rs400.c                  |    9 
 b/drivers/gpu/drm/radeon/rs600.c                  |  232 ++
 b/drivers/gpu/drm/radeon/rs600d.h                 |   80 
 b/drivers/gpu/drm/radeon/rs690.c                  |  289 +--
 b/drivers/gpu/drm/radeon/rv515.c                  |  287 +--
 b/drivers/gpu/drm/radeon/rv515d.h                 |   46 
 b/drivers/gpu/drm/radeon/rv770.c                  |   39 
 b/drivers/gpu/drm/savage/savage_bci.c             |    3 
 b/drivers/gpu/drm/ttm/Makefile                    |    2 
 b/drivers/gpu/drm/ttm/ttm_bo.c                    |   98 -
 b/drivers/gpu/drm/ttm/ttm_bo_util.c               |  122 -
 b/drivers/gpu/drm/ttm/ttm_bo_vm.c                 |   41 
 b/drivers/gpu/drm/ttm/ttm_memory.c                |    7 
 b/drivers/gpu/drm/ttm/ttm_page_alloc.c            |  855 +++++++++
 b/drivers/gpu/drm/ttm/ttm_tt.c                    |   44 
 b/drivers/gpu/drm/vmwgfx/Makefile                 |    2 
 b/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c          |   50 
 b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c             |   24 
 b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h             |   49 
 b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c         |   14 
 b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c              |  101 -
 b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c           |  173 ++
 b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c            |   23 
 b/drivers/gpu/drm/vmwgfx/vmwgfx_irq.c             |   17 
 b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c             |  209 +-
 b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h             |    4 
 b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c             |  189 +-
 b/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c         |    4 
 b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c        |    8 
 b/drivers/gpu/vga/Kconfig                         |    6 
 b/drivers/gpu/vga/vgaarb.c                        |   61 
 b/drivers/staging/Kconfig                         |    2 
 b/drivers/video/efifb.c                           |   11 
 b/drivers/video/fbmem.c                           |   74 
 b/drivers/video/fbsysfs.c                         |    1 
 b/drivers/video/offb.c                            |   28 
 b/drivers/video/vesafb.c                          |   11 
 b/drivers/video/vga16fb.c                         |   26 
 b/include/drm/drmP.h                              |    3 
 b/include/drm/drm_crtc.h                          |   43 
 b/include/drm/drm_crtc_helper.h                   |   12 
 b/include/drm/drm_edid.h                          |    5 
 b/include/drm/drm_fb_helper.h                     |   67 
 b/include/drm/drm_fixed.h                         |   67 
 b/include/drm/i915_drm.h                          |    5 
 b/include/drm/nouveau_drm.h                       |    1 
 b/include/drm/radeon_drm.h                        |    2 
 b/include/drm/ttm/ttm_bo_api.h                    |   46 
 b/include/drm/ttm/ttm_bo_driver.h                 |   57 
 b/include/drm/ttm/ttm_page_alloc.h                |   74 
 b/include/drm/vmwgfx_drm.h                        |   26 
 b/include/linux/fb.h                              |   19 
 b/include/linux/vgaarb.h                          |   21 
 drivers/gpu/drm/radeon/radeon_fixed.h             |   67 
 200 files changed, 21571 insertions(+), 8636 deletions(-)

View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.20 -r 1.21 drm-next.patchIndex: drm-next.patch
===================================================================
RCS file: drm-next.patch
diff -N drm-next.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ drm-next.patch	9 Jul 2010 09:09:13 -0000	1.21
@@ -0,0 +1,44474 @@
+commit a77889d1b091dd6783db3e1b059cc378d37f9982
+Author: Kyle McMartin <kyle at dreadnought.i.jkkm.org>
+Date:   Wed Jun 16 15:06:54 2010 +0100
+
+    provide a knob to {en,dis}able radeon_pm
+
+commit ef24e3e0e644621e2c98d38f27f4b25d23875256
+Author: Kyle McMartin <kyle at dreadnought.i.jkkm.org>
+Date:   Wed Jun 16 14:51:26 2010 +0100
+
+    Merge local branch 'drm-since-1067b6c'
+    
+    % git log --no-merges --oneline 1067b6c..v2.6.35-rc3 -- drivers/gpu/drm
+    8d86dc6 Revert "drm/i915: Don't enable pipe/plane/VCO early (wait for DPMS on)."
+    b62e948 drm/radeon: don't poll tv dac if crtc2 is in use.
+    d294ed6 drm/radeon: reset i2c valid to avoid incorrect tv-out polling.
+    4eb3033 drm/nv50: fix iommu errors caused by device reading from address 0
+    7504794 drm/nouveau: off by one in init_i2c_device_find()
+    55a4c5c nouveau: off by one in nv50_gpio_location()
+    6d69630 drm/nouveau: completely fail init if we fail to map the PRAMIN BAR
+    1eb3810 drm/nouveau: match U/DP script against SOR link
+    f712d0c drm/radeon/kms/pm: resurrect printing power states
+    0fcbe94 drm/radeon/kms: add trivial debugging for voltage
+    a081a9d drm/radeon/kms/r600+: use voltage from requested clock mode (v3)
+    4d60173 drm/radeon/kms/pm: track current voltage (v2)
+    aa1df0f drm/radeon/kms/pm: Disable voltage adjust on RS780/RS880
+    cbd4623 drm/radeon/kms: fix typo in printing the HPD info
+    c9e75b2 drm/radeon/kms/pm: add mid profile
+    f8ed8b4 drm/radeon/kms/pm: Misc fixes
+    8de016e drm/radeon/kms/combios: fix typo in voltage fix
+    148a03b drm/radeon/kms/evergreen: set accel_enabled
+    9b8eb4d drm/vmwgfx: return -EFAULT for copy_to_user errors
+    e902a35 drm/drm_crtc: return -EFAULT on copy_to_user errors
+    fc2362a drm/fb: use printk to print out the switching to text mode error.
+    9bad145 drm/radeon: fix PM on non-vram cards.
+    5a79395 drm: Propagate error from drm_fb_helper_init().
+    a3524f1 drm/i915: fix oops on single crtc devices.
+    e7b526b drm/i915: Move non-phys cursors into the GTT
+
+commit e1442526a8b1b9a0ffd3f8778d2ff40597ef4662
+Author: Kyle McMartin <kyle at dreadnought.i.jkkm.org>
+Date:   Mon May 31 12:38:09 2010 +0100
+
+    nouveau is not in staging on Fedora
+
+commit fcd86a22bc88817a417185602e90451a3c5a25b8
+Author: Linus Torvalds <torvalds at linux-foundation.org>
+Date:   Thu Jun 3 07:19:45 2010 -0700
+
+    Merge branch 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6
+    
+    * 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6: (41 commits)
+    % git log --oneline --no-merges a652883..1067b6c
+    d8dcaa1 drm/radeon/kms: make sure display hw is disabled when suspending
+    d8bd19d drm/vmwgfx: Allow userspace to change default layout. Bump minor.
+    991b7b4 drm/vmwgfx: Fix framebuffer modesetting
+    7c4f778 drm/vmwgfx: Fix vga save / restore with display topology.
+    c0db9cb vgaarb: use MIT license
+    2d6e9b9 vgaarb: convert pr_devel() to pr_debug()
+    ce04cc0 drm: fix typos in Linux DRM Developer's Guide
+    84d88f4 drm/radeon/kms/pm: voltage fixes
+    9264587 drm/radeon/kms/pm: radeon_set_power_state fixes
+    c5e8ce6 drm/radeon/kms/pm: patch default power state with default clocks/voltages on r6xx+
+    9349d5c drm/radeon/kms/pm: enable SetVoltage on r7xx/evergreen
+    7ac9aa5 drm/radeon/kms/pm: add support for SetVoltage cmd table (V2)
+    cb5fcbd drm/radeon/kms/evergreen: add initial CS parser
+    fbf8176 drm/kms: disable/enable poll around switcheroo on/off
+    fc5ea29 drm/nouveau: fixup confusion over which handle the DSM is hanging off.
+    afeb3e1 drm/nouveau: attempt to get bios from ACPI v3
+    8b281db drm/nv50: cast IGP memory location to u64 before shifting
+    4abe438 drm/ttm: Fix ttm_page_alloc.c
+    e8613c0 drm/ttm: Fix cached TTM page allocation.
+    1ca14e7 drm/vmwgfx: Remove some leftover debug messages.
+    316ab13 drm/vmwgfx: Print warnings in kernel log about bo pinning that fails.
+    792778e drm/vmwgfx: Unpause overlay on update.
+    259600d drm/vmwgfx: Some modesetting cleanups and fixes.
+    d451f62 drm/vmwgfx: Don't use SVGA_REG_ENABLE in modesetting code.
+    bbfad33 drm/vmwgfx: Remove duplicate member from struct vmw_legacy_display_unit.
+    22ee861 drm/vmwgfx: Reserve first part of VRAM for framebuffer.
+    d7e1958 drm/vmwgfx: Support older hardware.
+    1ae1ddd drm/vmwgfx: Get connector status from detection function.
+    1925d45 drm/vmwgfx: Add kernel throttling support. Bump minor.
+    04e9e94 drm/vmwgfx: Make sure to unpin old and pin new framebuffer.
+    6a591a9 drm/vmwgfx: Fix single framebuffer detection.
+    7e71f8a drm/vmwgfx: Assume larger framebuffer max size.
+    becd214 drm/nv50: use alternate source of SOR_MODE_CTRL for DP hack
+    26099a7 drm/nouveau: fix dual-link displays when plugged into single-link outputs
+    2c58077 drm/nv50: obey dcb->duallink_possible
+    2348487 drm/nv50: fix duallink_possible calculation for DCB 4.0 cards
+    73db4be drm/nouveau: don't execute INIT_GPIO unless we're really running the table
+    f50c0b9 drm/nv40: allow cold-booting of nv4x chipsets
+    d13102c drm/nouveau: fix POST detection for certain chipsets
+    7fc74f1 drm/nouveau: Add getparam for current PTIMER time.
+    b334f2b drm/nouveau: allow cursor image and position to survive suspend
+
+commit 663568ea6a7503a12898c7f1ba8192c8d42a28ac
+Author: Linus Torvalds <torvalds at linux-foundation.org>
+Date:   Tue Jun 1 14:12:27 2010 -0700
+
+    Merge branch 'drm-intel-next' of git://git.kernel.org/pub/scm/linux/kernel/git/anholt/drm-intel
+    
+    * 'drm-intel-next' of git://git.kernel.org/pub/scm/linux/kernel/git/anholt/drm-intel: (41 commits)
+    % git log --oneline --no-merges 08a6685..709d015
+    e3a815f drm/i915: add HAS_BSD check to i915_getparam
+    9bc3549 drm/i915: Honor sync polarity from VBT panel timing descriptors
+    a1786bd drm/i915: Unmask interrupt for render engine on Sandybridge
+    ca76482 drm/i915: Fix PIPE_CONTROL command on Sandybridge
+    ab34c22 drm/i915: Fix up address spaces in slow_kernel_write()
+    99a03df drm/i915: Use non-atomic kmap for slow copy paths
+    9b8c4a0 drm/i915: Avoid moving from CPU domain during pwrite
+    68f95ba drm/i915: Cleanup after failed initialization of ringbuffers
+    654fc60 drm/i915: Reject bind_to_gtt() early if object > aperture
+    85cd461 drm/i915: Check error code whilst moving buffer to GTT domain.
+    3d1cc47 drm/i915: Remove spurious warning "Failure to install fence"
+    ac0c6b5 drm/i915: Rebind bo if currently bound with incorrect alignment.
+    a7faf32 drm/i915: Include pitch in set_base debug statement.
+    a939406 drm/i915: Only print "nothing to do" debug message as required.
+    808b24d drm/i915: Propagate error from unbinding an unfenceable object.
+    b118c1e drm/i915: Avoid nesting of domain changes when setting display plane
+    468f0b4 drm/i915: Hold the spinlock whilst resetting unpin_work along error path
+    35aed2e drm/i915: Only print an message if there was an error
+    e20f9c6 drm/i915: Clean up leftover bits from hws move to ring structure.
+    9553426 drm/i915: Add CxSR support on Pineview DDR3
+    d8201ab i915: remove unneeded null checks
+    90a78e8 i915/intel_sdvo: remove unneeded null check
+    467b200 drm/i915: Fix HDMI mode select for Cougarpoint PCH
+    778c354 drm/i915: combine all small integers into one single bitfield
+    a7de64e drm/i915/dp: Add DPCD data to debug output
+    9962c92 drm/i915/dp: Only enable enhanced framing if the sink supports it
+    9908ff7 drm/i915: Kill dangerous pending-flip debugging
+    f1befe7 agp/intel: Restrict GTT mapping to valid range on i915 and i945
+    9a7e849 drm/i915: Storage class should be before const qualifier
+    7648fa9 drm/i915: add power monitoring support
+    7a772c4 drm/i915/gen4: Extra CRT hotplug paranoia
+    734b415 drm/i915: Add support for interlaced display.
+    f953c93 i915: fix lock imbalance on error path...
+    f41275e drm/i915: Convert more trace events to DEFINE_EVENT
+    9517a92 drm/i915: add timeout to FBC disable waits
+    d1b851f drm/i915: implement BSD ring buffer V2
+    852835f drm/i915: convert some gem structures to per-ring V2
+    8187a2b drm/i915: introduce intel_ring_buffer structure (V2)
+    d3301d8 drm/i915: Rename dev_priv->ring to dev_priv->render_ring.
+    62fdfea drm/i915: Move ringbuffer-related code to intel_ringbuffer.c.
+    79a78dd drm/i915: Fail to load driver if KMS request without GEM
+
+commit 30f0d753b32570886e6b98812d33df30229dcf87
+Author: Linus Torvalds <torvalds at linux-foundation.org>
+Date:   Fri May 28 16:14:40 2010 -0700
+
+    Merge branch 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6
+    
+    * 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6: (1 commit)
+    % git log --oneline --no-merges e4f2e5e..24010e4
+    cf22f20 drm/radeon: fix the r100/r200 ums block 0 page fix
+
+commit 5bf8778218d6085190bed41b729f6001e712b057
+Author: Linus Torvalds <torvalds at linux-foundation.org>
+Date:   Wed May 26 12:30:09 2010 -0700
+
+    Merge branch 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6
+    
+    * 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6: (6 commits)
+    % git log --oneline --no-merges 91803b4..31f4671
+    2101d6f agp: amd64, fix pci reference leaks
+    4a638b4 drm/edid: Allow non-fatal checksum errors in CEA blocks
+    921d98b drm/radeon/kms: suppress a build warning (unused variable)
+    f49d273 drm: Fixes linux-next & linux-2.6 checkstack warnings:
+    5797660 nouveau: fix acpi_lid_open undefined
+    10b0612 drm/radeon/kms: release AGP bridge at suspend
+
+commit 019d6c44898a414e7d6ef16fce1950577163cccb
+Author: Linus Torvalds <torvalds at linux-foundation.org>
+Date:   Fri May 21 11:14:52 2010 -0700
+
+    Merge branch 'drm-for-2.6.35' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6
+    
+    * 'drm-for-2.6.35' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6: (207 commits)
+    % git log --oneline --no-merges ac3ee84..59534f7
+    b486787 drm/radeon/kms/pm/r600: select the mid clock mode for single head low profile
+    5d9b7e2 drm/radeon: fix power supply kconfig interaction.
+    e865275 drm/radeon/kms: record object that have been list reserved
+    365048f drm/radeon: AGP memory is only I/O if the aperture can be mapped by the CPU.
+    4573744 drm/radeon/kms: don't default display priority to high on rs4xx
+    c43ae47 drm/edid: fix typo in 1600x1200 at 75 mode
+    893887ed drm/nouveau: fix i2c-related init table handlers
+    04f542c drm/nouveau: support init table i2c device identifier 0x81
+    f8b0be1 drm/nouveau: ensure we've parsed i2c table entry for INIT_*I2C* handlers
+    92b9618 drm/nouveau: display error message for any failed init table opcode
+    9170a82 drm/nouveau: fix init table handlers to return proper error codes
+    e9ebb68 drm/nv50: support fractional feedback divider on newer chips
+    7e99a9b drm/nv50: fix monitor detection on certain chipsets
+    07fee3d drm/nv50: store full dcb i2c entry from vbios
+    afa3b4c drm/nv50: fix suspend/resume with DP outputs
[...44081 lines suppressed...]
+diff --git a/include/drm/ttm/ttm_page_alloc.h b/include/drm/ttm/ttm_page_alloc.h
+new file mode 100644
+index 0000000..8bb4de5
+--- /dev/null
++++ b/include/drm/ttm/ttm_page_alloc.h
+@@ -0,0 +1,74 @@
++/*
++ * Copyright (c) Red Hat Inc.
++
++ * 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, sub license,
++ * 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 NON-INFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS OR COPYRIGHT HOLDERS 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.
++ *
++ * Authors: Dave Airlie <airlied at redhat.com>
++ *          Jerome Glisse <jglisse at redhat.com>
++ */
++#ifndef TTM_PAGE_ALLOC
++#define TTM_PAGE_ALLOC
++
++#include "ttm_bo_driver.h"
++#include "ttm_memory.h"
++
++/**
++ * Get count number of pages from pool to pages list.
++ *
++ * @pages: heado of empty linked list where pages are filled.
++ * @flags: ttm flags for page allocation.
++ * @cstate: ttm caching state for the page.
++ * @count: number of pages to allocate.
++ */
++int ttm_get_pages(struct list_head *pages,
++		  int flags,
++		  enum ttm_caching_state cstate,
++		  unsigned count);
++/**
++ * Put linked list of pages to pool.
++ *
++ * @pages: list of pages to free.
++ * @page_count: number of pages in the list. Zero can be passed for unknown
++ * count.
++ * @flags: ttm flags for page allocation.
++ * @cstate: ttm caching state.
++ */
++void ttm_put_pages(struct list_head *pages,
++		   unsigned page_count,
++		   int flags,
++		   enum ttm_caching_state cstate);
++/**
++ * Initialize pool allocator.
++ *
++ * Pool allocator is internaly reference counted so it can be initialized
++ * multiple times but ttm_page_alloc_fini has to be called same number of
++ * times.
++ */
++int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages);
++/**
++ * Free pool allocator.
++ */
++void ttm_page_alloc_fini(void);
++
++/**
++ * Output the state of pools to debugfs file
++ */
++extern int ttm_page_alloc_debugfs(struct seq_file *m, void *data);
++#endif
+diff --git a/include/drm/vmwgfx_drm.h b/include/drm/vmwgfx_drm.h
+index c7645f4..4d08423 100644
+--- a/include/drm/vmwgfx_drm.h
++++ b/include/drm/vmwgfx_drm.h
+@@ -50,6 +50,8 @@
+ #define DRM_VMW_EXECBUF              12
+ #define DRM_VMW_FIFO_DEBUG           13
+ #define DRM_VMW_FENCE_WAIT           14
++/* guarded by minor version >= 2 */
++#define DRM_VMW_UPDATE_LAYOUT        15
+ 
+ 
+ /*************************************************************************/
+@@ -585,4 +587,28 @@ struct drm_vmw_stream_arg {
+  * sure that the stream has been stopped.
+  */
+ 
++/*************************************************************************/
++/**
++ * DRM_VMW_UPDATE_LAYOUT - Update layout
++ *
++ * Updates the prefered modes and connection status for connectors. The
++ * command conisits of one drm_vmw_update_layout_arg pointing out a array
++ * of num_outputs drm_vmw_rect's.
++ */
++
++/**
++ * struct drm_vmw_update_layout_arg
++ *
++ * @num_outputs: number of active
++ * @rects: pointer to array of drm_vmw_rect
++ *
++ * Input argument to the DRM_VMW_UPDATE_LAYOUT Ioctl.
++ */
++
++struct drm_vmw_update_layout_arg {
++	uint32_t num_outputs;
++	uint32_t pad64;
++	uint64_t rects;
++};
++
+ #endif
+diff --git a/include/linux/fb.h b/include/linux/fb.h
+index c10163b..1296af4 100644
+--- a/include/linux/fb.h
++++ b/include/linux/fb.h
+@@ -403,6 +403,7 @@ struct fb_cursor {
+ #include <linux/notifier.h>
+ #include <linux/list.h>
+ #include <linux/backlight.h>
++#include <linux/slab.h>
+ #include <asm/io.h>
+ 
+ struct vm_area_struct;
+@@ -862,10 +863,22 @@ struct fb_info {
+ 	/* we need the PCI or similiar aperture base/size not
+ 	   smem_start/size as smem_start may just be an object
+ 	   allocated inside the aperture so may not actually overlap */
+-	resource_size_t aperture_base;
+-	resource_size_t aperture_size;
++	struct apertures_struct {
++		unsigned int count;
++		struct aperture {
++			resource_size_t base;
++			resource_size_t size;
++		} ranges[0];
++	} *apertures;
+ };
+ 
++static inline struct apertures_struct *alloc_apertures(unsigned int max_num) {
++	struct apertures_struct *a = kzalloc(sizeof(struct apertures_struct)
++			+ max_num * sizeof(struct aperture), GFP_KERNEL);
++	a->count = max_num;
++	return a;
++}
++
+ #ifdef MODULE
+ #define FBINFO_DEFAULT	FBINFO_MODULE
+ #else
+@@ -958,6 +971,8 @@ extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf,
+ /* drivers/video/fbmem.c */
+ extern int register_framebuffer(struct fb_info *fb_info);
+ extern int unregister_framebuffer(struct fb_info *fb_info);
++extern void remove_conflicting_framebuffers(struct apertures_struct *a,
++				const char *name, bool primary);
+ extern int fb_prepare_logo(struct fb_info *fb_info, int rotate);
+ extern int fb_show_logo(struct fb_info *fb_info, int rotate);
+ extern char* fb_get_buffer_offset(struct fb_info *info, struct fb_pixmap *buf, u32 size);
+diff --git a/include/linux/vgaarb.h b/include/linux/vgaarb.h
+index 2dfaa29..c9a9759 100644
+--- a/include/linux/vgaarb.h
++++ b/include/linux/vgaarb.h
+@@ -5,6 +5,27 @@
+  * (C) Copyright 2005 Benjamin Herrenschmidt <benh at kernel.crashing.org>
+  * (C) Copyright 2007 Paulo R. Zanoni <przanoni at gmail.com>
+  * (C) Copyright 2007, 2009 Tiago Vignatti <vignatti at freedesktop.org>
++ *
++ * 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
++ * THE AUTHORS OR COPYRIGHT HOLDERS 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.
++ *
+  */
+ 
+ #ifndef LINUX_VGA_H

drm-revert-drm-fbdev-rework-output-polling-to-be-back-in-core.patch:
 drivers/gpu/drm/Kconfig                     |    2 
 drivers/gpu/drm/drm_crtc_helper.c           |  111 -------------------------
 drivers/gpu/drm/drm_fb_helper.c             |  123 +++++++++++++++++++++++-----
 drivers/gpu/drm/i915/i915_dma.c             |    1 
 drivers/gpu/drm/i915/i915_irq.c             |    3 
 drivers/gpu/drm/i915/intel_crt.c            |    5 -
 drivers/gpu/drm/i915/intel_display.c        |    2 
 drivers/gpu/drm/i915/intel_dp.c             |    2 
 drivers/gpu/drm/i915/intel_drv.h            |    2 
 drivers/gpu/drm/i915/intel_fb.c             |   14 +--
 drivers/gpu/drm/i915/intel_hdmi.c           |    1 
 drivers/gpu/drm/i915/intel_sdvo.c           |    2 
 drivers/gpu/drm/nouveau/nouveau_connector.c |   12 --
 drivers/gpu/drm/nouveau/nouveau_display.c   |    1 
 drivers/gpu/drm/nouveau/nouveau_fbcon.c     |   13 ++
 drivers/gpu/drm/nouveau/nouveau_fbcon.h     |    2 
 drivers/gpu/drm/nouveau/nouveau_state.c     |    5 -
 drivers/gpu/drm/nouveau/nv50_display.c      |    2 
 drivers/gpu/drm/radeon/radeon_connectors.c  |   13 --
 drivers/gpu/drm/radeon/radeon_display.c     |   10 --
 drivers/gpu/drm/radeon/radeon_fb.c          |   15 ++-
 drivers/gpu/drm/radeon/radeon_irq_kms.c     |    5 -
 drivers/gpu/drm/radeon/radeon_mode.h        |    3 
 include/drm/drm_crtc.h                      |   17 ---
 include/drm/drm_crtc_helper.h               |    6 -
 include/drm/drm_fb_helper.h                 |   14 ++-
 26 files changed, 155 insertions(+), 231 deletions(-)

--- NEW FILE drm-revert-drm-fbdev-rework-output-polling-to-be-back-in-core.patch ---
>From 5b904034b0ab5195d971b139d0c0b67ab21b063c Mon Sep 17 00:00:00 2001
From: Kyle McMartin <kyle at dreadnought.i.jkkm.org>
Date: Mon, 21 Jun 2010 20:33:16 +0100
Subject: Revert "drm/fbdev: rework output polling to be back in the core. (v4)"

This reverts commit eb1f8e4f3be898df808e2dfc131099f5831d491d.

Conflicts:

	drivers/gpu/drm/drm_crtc_helper.c
	drivers/gpu/drm/i915/i915_dma.c
	drivers/gpu/drm/i915/intel_fb.c
	drivers/gpu/drm/nouveau/nouveau_fbcon.c
	drivers/gpu/drm/radeon/radeon_fb.c
	include/drm/drm_crtc_helper.h
---
 drivers/gpu/drm/Kconfig                     |    2 +-
 drivers/gpu/drm/drm_crtc_helper.c           |  111 ------------------------
 drivers/gpu/drm/drm_fb_helper.c             |  123 +++++++++++++++++++++++----
 drivers/gpu/drm/i915/i915_dma.c             |    1 -
 drivers/gpu/drm/i915/i915_irq.c             |    3 +-
 drivers/gpu/drm/i915/intel_crt.c            |    5 -
 drivers/gpu/drm/i915/intel_display.c        |    2 -
 drivers/gpu/drm/i915/intel_dp.c             |    2 -
 drivers/gpu/drm/i915/intel_drv.h            |    2 +-
 drivers/gpu/drm/i915/intel_fb.c             |   14 ++--
 drivers/gpu/drm/i915/intel_hdmi.c           |    1 -
 drivers/gpu/drm/i915/intel_sdvo.c           |    2 -
 drivers/gpu/drm/nouveau/nouveau_connector.c |   12 ---
 drivers/gpu/drm/nouveau/nouveau_display.c   |    1 -
 drivers/gpu/drm/nouveau/nouveau_fbcon.c     |   13 ++-
 drivers/gpu/drm/nouveau/nouveau_fbcon.h     |    2 +-
 drivers/gpu/drm/nouveau/nouveau_state.c     |    5 +-
 drivers/gpu/drm/nouveau/nv50_display.c      |    2 +-
 drivers/gpu/drm/radeon/radeon_connectors.c  |   13 ---
 drivers/gpu/drm/radeon/radeon_display.c     |   10 --
 drivers/gpu/drm/radeon/radeon_fb.c          |   15 +++-
 drivers/gpu/drm/radeon/radeon_irq_kms.c     |    5 +-
 drivers/gpu/drm/radeon/radeon_mode.h        |    3 +-
 include/drm/drm_crtc.h                      |   17 ----
 include/drm/drm_crtc_helper.h               |    6 --
 include/drm/drm_fb_helper.h                 |   13 +++-
 26 files changed, 155 insertions(+), 230 deletions(-)

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index c2711c6..a51a1e4 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -9,7 +9,6 @@ menuconfig DRM
 	depends on (AGP || AGP=n) && PCI && !EMULATED_CMPXCHG && MMU
 	select I2C
 	select I2C_ALGOBIT
-	select SLOW_WORK
 	help
 	  Kernel-level support for the Direct Rendering Infrastructure (DRI)
 	  introduced in XFree86 4.0. If you say Y here, you need to select
@@ -24,6 +23,7 @@ config DRM_KMS_HELPER
 	depends on DRM
 	select FB
 	select FRAMEBUFFER_CONSOLE if !EMBEDDED
+	select SLOW_WORK
 	help
 	  FB and CRTC helpers for KMS drivers.
 
diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
index 9b2a541..b142ac2 100644
--- a/drivers/gpu/drm/drm_crtc_helper.c
+++ b/drivers/gpu/drm/drm_crtc_helper.c
@@ -807,114 +807,3 @@ int drm_helper_resume_force_mode(struct drm_device *dev)
 	return 0;
 }
 EXPORT_SYMBOL(drm_helper_resume_force_mode);
-
-static struct slow_work_ops output_poll_ops;
-
-#define DRM_OUTPUT_POLL_PERIOD (10*HZ)
-static void output_poll_execute(struct slow_work *work)
-{
-	struct delayed_slow_work *delayed_work = container_of(work, struct delayed_slow_work, work);
-	struct drm_device *dev = container_of(delayed_work, struct drm_device, mode_config.output_poll_slow_work);
-	struct drm_connector *connector;
-	enum drm_connector_status old_status, status;
-	bool repoll = false, changed = false;
-	int ret;
-
-	mutex_lock(&dev->mode_config.mutex);
-	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
-
-		/* if this is HPD or polled don't check it -
-		   TV out for instance */
-		if (!connector->polled)
-			continue;
-
-		else if (connector->polled & (DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT))
-			repoll = true;
-
-		old_status = connector->status;
-		/* if we are connected and don't want to poll for disconnect
-		   skip it */
-		if (old_status == connector_status_connected &&
-		    !(connector->polled & DRM_CONNECTOR_POLL_DISCONNECT) &&
-		    !(connector->polled & DRM_CONNECTOR_POLL_HPD))
-			continue;
-
-		status = connector->funcs->detect(connector);
-		if (old_status != status)
-			changed = true;
-	}
-
-	mutex_unlock(&dev->mode_config.mutex);
-
-	if (changed) {
-		/* send a uevent + call fbdev */
-		drm_sysfs_hotplug_event(dev);
-		if (dev->mode_config.funcs->output_poll_changed)
-			dev->mode_config.funcs->output_poll_changed(dev);
-	}
-
-	if (repoll) {
-		ret = delayed_slow_work_enqueue(delayed_work, DRM_OUTPUT_POLL_PERIOD);
-		if (ret)
-			DRM_ERROR("delayed enqueue failed %d\n", ret);
-	}
-}
-
-void drm_kms_helper_poll_disable(struct drm_device *dev)
-{
-	if (!dev->mode_config.poll_enabled)
-		return;
-	delayed_slow_work_cancel(&dev->mode_config.output_poll_slow_work);
-}
-EXPORT_SYMBOL(drm_kms_helper_poll_disable);
-
-void drm_kms_helper_poll_enable(struct drm_device *dev)
-{
-	bool poll = false;
-	struct drm_connector *connector;
-	int ret;
-
-	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
-		if (connector->polled)
-			poll = true;
-	}
-
-	if (poll) {
-		ret = delayed_slow_work_enqueue(&dev->mode_config.output_poll_slow_work, DRM_OUTPUT_POLL_PERIOD);
-		if (ret)
-			DRM_ERROR("delayed enqueue failed %d\n", ret);
-	}
-}
-EXPORT_SYMBOL(drm_kms_helper_poll_enable);
-
-void drm_kms_helper_poll_init(struct drm_device *dev)
-{
-	slow_work_register_user(THIS_MODULE);
-	delayed_slow_work_init(&dev->mode_config.output_poll_slow_work,
-			       &output_poll_ops);
-	dev->mode_config.poll_enabled = true;
-
-	drm_kms_helper_poll_enable(dev);
-}
-EXPORT_SYMBOL(drm_kms_helper_poll_init);
-
-void drm_kms_helper_poll_fini(struct drm_device *dev)
-{
-	drm_kms_helper_poll_disable(dev);
-	slow_work_unregister_user(THIS_MODULE);
-}
-EXPORT_SYMBOL(drm_kms_helper_poll_fini);
-
-void drm_helper_hpd_irq_event(struct drm_device *dev)
-{
-	if (!dev->mode_config.poll_enabled)
-		return;
-	delayed_slow_work_cancel(&dev->mode_config.output_poll_slow_work);
-	/* schedule a slow work asap */
-	delayed_slow_work_enqueue(&dev->mode_config.output_poll_slow_work, 0);
-}
-EXPORT_SYMBOL(drm_helper_hpd_irq_event);
-
-static struct slow_work_ops output_poll_ops = {
-	.execute = output_poll_execute,
-};
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 08c4c92..dcc6601 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -42,6 +42,8 @@ MODULE_LICENSE("GPL and additional rights");
 
 static LIST_HEAD(kernel_fb_helper_list);
 
+static struct slow_work_ops output_status_change_ops;
+
 /* simple single crtc case helper function */
 int drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper)
 {
@@ -423,13 +425,19 @@ static void drm_fb_helper_crtc_free(struct drm_fb_helper *helper)
 
 int drm_fb_helper_init(struct drm_device *dev,
 		       struct drm_fb_helper *fb_helper,
-		       int crtc_count, int max_conn_count)
+		       int crtc_count, int max_conn_count,
+		       bool polled)
 {
 	struct drm_crtc *crtc;
 	int ret = 0;
 	int i;
 
 	fb_helper->dev = dev;
+	fb_helper->poll_enabled = polled;
+
+	slow_work_register_user(THIS_MODULE);
+	delayed_slow_work_init(&fb_helper->output_status_change_slow_work,
+			       &output_status_change_ops);
 
 	INIT_LIST_HEAD(&fb_helper->kernel_fb_list);
 
@@ -486,6 +494,8 @@ void drm_fb_helper_fini(struct drm_fb_helper *fb_helper)
 
 	drm_fb_helper_crtc_free(fb_helper);
 
+	delayed_slow_work_cancel(&fb_helper->output_status_change_slow_work);
+	slow_work_unregister_user(THIS_MODULE);
 }
 EXPORT_SYMBOL(drm_fb_helper_fini);
 
@@ -703,7 +713,7 @@ int drm_fb_helper_set_par(struct fb_info *info)
 
 	if (fb_helper->delayed_hotplug) {
 		fb_helper->delayed_hotplug = false;
-		drm_fb_helper_hotplug_event(fb_helper);
+		delayed_slow_work_enqueue(&fb_helper->output_status_change_slow_work, 0);
 	}
 	return 0;
 }
@@ -816,7 +826,7 @@ int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper,
 	if (crtc_count == 0 || sizes.fb_width == -1 || sizes.fb_height == -1) {
 		/* hmm everyone went away - assume VGA cable just fell out
 		   and will come back later. */
-		DRM_INFO("Cannot find any crtc or sizes - going 1024x768\n");
+		DRM_ERROR("Cannot find any crtc or sizes - going 1024x768\n");
 		sizes.fb_width = sizes.surface_width = 1024;
 		sizes.fb_height = sizes.surface_height = 768;
 	}
@@ -1362,7 +1372,12 @@ bool drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper, int bpp_sel)
 	 * we shouldn't end up with no modes here.
 	 */
 	if (count == 0) {
-		printk(KERN_INFO "No connectors reported connected with modes\n");
+		if (fb_helper->poll_enabled) {
+			delayed_slow_work_enqueue(&fb_helper->output_status_change_slow_work,
+						  5*HZ);
+			printk(KERN_INFO "No connectors reported connected with modes - started polling\n");
+		} else
+			printk(KERN_INFO "No connectors reported connected with modes\n");
 	}
 	drm_setup_crtcs(fb_helper);
 
@@ -1370,16 +1385,71 @@ bool drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper, int bpp_sel)
 }
 EXPORT_SYMBOL(drm_fb_helper_initial_config);
 
-bool drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper)
+/* we got a hotplug irq - need to update fbcon */
+void drm_helper_fb_hpd_irq_event(struct drm_fb_helper *fb_helper)
+{
+	/* if we don't have the fbdev registered yet do nothing */
+	if (!fb_helper->fbdev)
+		return;
+
+	/* schedule a slow work asap */
+	delayed_slow_work_enqueue(&fb_helper->output_status_change_slow_work, 0);
+}
+EXPORT_SYMBOL(drm_helper_fb_hpd_irq_event);
+
+bool drm_helper_fb_hotplug_event(struct drm_fb_helper *fb_helper, bool polled)
 {
 	int count = 0;
+	int ret;
 	u32 max_width, max_height, bpp_sel;
-	bool bound = false, crtcs_bound = false;
-	struct drm_crtc *crtc;
 
 	if (!fb_helper->fb)
 		return false;
+	DRM_DEBUG_KMS("\n");
+
+	max_width = fb_helper->fb->width;
+	max_height = fb_helper->fb->height;
+	bpp_sel = fb_helper->fb->bits_per_pixel;
+
+	count = drm_fb_helper_probe_connector_modes(fb_helper, max_width,
+						    max_height);
+	if (fb_helper->poll_enabled && !polled) {
+		if (count) {
+			delayed_slow_work_cancel(&fb_helper->output_status_change_slow_work);
+		} else {
+			ret = delayed_slow_work_enqueue(&fb_helper->output_status_change_slow_work, 5*HZ);
+		}
+	}
+	drm_setup_crtcs(fb_helper);
+
+	return drm_fb_helper_single_fb_probe(fb_helper, bpp_sel);
+}
+EXPORT_SYMBOL(drm_helper_fb_hotplug_event);
+
+/*
+ * delayed work queue execution function
+ * - check if fbdev is actually in use on the gpu
+ *   - if not set delayed flag and repoll if necessary
+ * - check for connector status change
+ * - repoll if 0 modes found
+ *- call driver output status changed notifier
+ */
+static void output_status_change_execute(struct slow_work *work)
+{
+	struct delayed_slow_work *delayed_work = container_of(work, struct delayed_slow_work, work);
+	struct drm_fb_helper *fb_helper = container_of(delayed_work, struct drm_fb_helper, output_status_change_slow_work);
+	struct drm_connector *connector;
+	enum drm_connector_status old_status, status;
+	bool repoll, changed = false;
+	int ret;
+	int i;
+	bool bound = false, crtcs_bound = false;
+	struct drm_crtc *crtc;
 
+	repoll = fb_helper->poll_enabled;
+
+	/* first of all check the fbcon framebuffer is actually bound to any crtc */
+	/* take into account that no crtc at all maybe bound */
 	list_for_each_entry(crtc, &fb_helper->dev->mode_config.crtc_list, head) {
 		if (crtc->fb)
 			crtcs_bound = true;
@@ -1387,21 +1457,38 @@ bool drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper)
 			bound = true;
 	}
 
-	if (!bound && crtcs_bound) {
+	if (bound == false && crtcs_bound) {
 		fb_helper->delayed_hotplug = true;
-		return false;
+		goto requeue;
 	}
-	DRM_DEBUG_KMS("\n");
 
-	max_width = fb_helper->fb->width;
-	max_height = fb_helper->fb->height;
-	bpp_sel = fb_helper->fb->bits_per_pixel;
+	for (i = 0; i < fb_helper->connector_count; i++) {
+		connector = fb_helper->connector_info[i]->connector;
+		old_status = connector->status;
+		status = connector->funcs->detect(connector);
+		if (old_status != status) {
+			changed = true;
+		}
+		if (status == connector_status_connected && repoll) {
+			DRM_DEBUG("%s is connected - stop polling\n", drm_get_connector_name(connector));
+			repoll = false;
+		}
+	}
 
-	count = drm_fb_helper_probe_connector_modes(fb_helper, max_width,
-						    max_height);
-	drm_setup_crtcs(fb_helper);
+	if (changed) {
+		if (fb_helper->funcs->fb_output_status_changed)
+			fb_helper->funcs->fb_output_status_changed(fb_helper);
+	}
 
-	return drm_fb_helper_single_fb_probe(fb_helper, bpp_sel);
+requeue:
+	if (repoll) {
+		ret = delayed_slow_work_enqueue(delayed_work, 5*HZ);
+		if (ret)
+			DRM_ERROR("delayed enqueue failed %d\n", ret);
+	}
 }
-EXPORT_SYMBOL(drm_fb_helper_hotplug_event);
+
+static struct slow_work_ops output_status_change_ops = {
+	.execute = output_status_change_execute,
+};
 
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index 59a2bf8..76ace2d 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1430,7 +1430,6 @@ static int i915_load_modeset_init(struct drm_device *dev,
 	if (ret)
 		goto cleanup_irq;
 
-	drm_kms_helper_poll_init(dev);
 	return 0;
 
 cleanup_irq:
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 2479be0..6350bd3 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -271,7 +271,8 @@ static void i915_hotplug_work_func(struct work_struct *work)
 		}
 	}
 	/* Just fire off a uevent and let userspace tell us what to do */
-	drm_helper_hpd_irq_event(dev);
+	intelfb_hotplug(dev, false);
+	drm_sysfs_hotplug_event(dev);
 }
 
 static void i915_handle_rps_change(struct drm_device *dev)
diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
index 22ff384..125eded 100644
--- a/drivers/gpu/drm/i915/intel_crt.c
+++ b/drivers/gpu/drm/i915/intel_crt.c
@@ -584,10 +584,5 @@ void intel_crt_init(struct drm_device *dev)
 
 	drm_sysfs_connector_add(connector);
 
-	if (I915_HAS_HOTPLUG(dev))
-		connector->polled = DRM_CONNECTOR_POLL_HPD;
-	else
-		connector->polled = DRM_CONNECTOR_POLL_CONNECT;
-
 	dev_priv->hotplug_supported_mask |= CRT_HOTPLUG_INT_STATUS;
 }
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index d753257..70537cf 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -5036,7 +5036,6 @@ intel_user_framebuffer_create(struct drm_device *dev,
 
 static const struct drm_mode_config_funcs intel_mode_funcs = {
 	.fb_create = intel_user_framebuffer_create,
-	.output_poll_changed = intel_fb_output_poll_changed,
 };
 
 static struct drm_gem_object *
@@ -5538,7 +5537,6 @@ void intel_modeset_cleanup(struct drm_device *dev)
 
 	mutex_lock(&dev->struct_mutex);
 
-	drm_kms_helper_poll_fini(dev);
 	intel_fbdev_fini(dev);
 
 	list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 49b54f0..1815df5 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1393,8 +1393,6 @@ intel_dp_init(struct drm_device *dev, int output_reg)
 			   DRM_MODE_CONNECTOR_DisplayPort);
 	drm_connector_helper_add(connector, &intel_dp_connector_helper_funcs);
 
-	connector->polled = DRM_CONNECTOR_POLL_HPD;
-
 	if (output_reg == DP_A)
 		intel_encoder->type = INTEL_OUTPUT_EDP;
 	else
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index df931f7..3230e8d 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -235,5 +235,5 @@ extern int intel_overlay_put_image(struct drm_device *dev, void *data,
 extern int intel_overlay_attrs(struct drm_device *dev, void *data,
 			       struct drm_file *file_priv);
 
-extern void intel_fb_output_poll_changed(struct drm_device *dev);
+void intelfb_hotplug(struct drm_device *dev, bool polled);
 #endif /* __INTEL_DRV_H__ */
diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c
index c3c5052..79098b3 100644
--- a/drivers/gpu/drm/i915/intel_fb.c
+++ b/drivers/gpu/drm/i915/intel_fb.c
@@ -211,6 +211,12 @@ static int intel_fb_find_or_create_single(struct drm_fb_helper *helper,
 	return new_fb;
 }
 
+void intelfb_hotplug(struct drm_device *dev, bool polled)
+{
+	drm_i915_private_t *dev_priv = dev->dev_private;
+	drm_helper_fb_hpd_irq_event(&dev_priv->fbdev->helper);
+}
+
 static struct drm_fb_helper_funcs intel_fb_helper_funcs = {
 	.gamma_set = intel_crtc_fb_gamma_set,
 	.gamma_get = intel_crtc_fb_gamma_get,
@@ -256,7 +262,7 @@ int intel_fbdev_init(struct drm_device *dev)
 
 	ret = drm_fb_helper_init(dev, &ifbdev->helper,
 				 dev_priv->num_pipe,
-				 INTELFB_CONN_LIMIT);
+				 INTELFB_CONN_LIMIT, false);
 	if (ret) {
 		kfree(ifbdev);
 		return ret;
@@ -278,9 +284,3 @@ void intel_fbdev_fini(struct drm_device *dev)
 	dev_priv->fbdev = NULL;
 }
 MODULE_LICENSE("GPL and additional rights");
-
-void intel_fb_output_poll_changed(struct drm_device *dev)
-{
-	drm_i915_private_t *dev_priv = dev->dev_private;
-	drm_fb_helper_hotplug_event(&dev_priv->fbdev->helper);
-}
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 83bd764..acaca07 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -240,7 +240,6 @@ void intel_hdmi_init(struct drm_device *dev, int sdvox_reg)
 
 	intel_encoder->type = INTEL_OUTPUT_HDMI;
 
-	connector->polled = DRM_CONNECTOR_POLL_HPD;
 	connector->interlace_allowed = 0;
 	connector->doublescan_allowed = 0;
 	intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
index 76993ac..1c716b5 100644
--- a/drivers/gpu/drm/i915/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/intel_sdvo.c
@@ -2218,7 +2218,6 @@ intel_sdvo_dvi_init(struct intel_encoder *intel_encoder, int device)
 	}
 
 	connector = &intel_connector->base;
-	connector->polled = DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT;
 	encoder->encoder_type = DRM_MODE_ENCODER_TMDS;
 	connector->connector_type = DRM_MODE_CONNECTOR_DVID;
 
@@ -2285,7 +2284,6 @@ intel_sdvo_analog_init(struct intel_encoder *intel_encoder, int device)
                 return false;
 
         connector = &intel_connector->base;
-	connector->polled = DRM_CONNECTOR_POLL_CONNECT;
         encoder->encoder_type = DRM_MODE_ENCODER_DAC;
         connector->connector_type = DRM_MODE_CONNECTOR_VGA;
         sdvo_connector = intel_connector->dev_priv;
diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
index 149ed22..9a61f3c 100644
--- a/drivers/gpu/drm/nouveau/nouveau_connector.c
+++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
@@ -846,7 +846,6 @@ nouveau_connector_create(struct drm_device *dev,
 
 	switch (dcb->type) {
 	case DCB_CONNECTOR_VGA:
-		connector->polled = DRM_CONNECTOR_POLL_CONNECT;
 		if (dev_priv->card_type >= NV_50) {
 			drm_connector_attach_property(connector,
 					dev->mode_config.scaling_mode_property,
@@ -858,17 +857,6 @@ nouveau_connector_create(struct drm_device *dev,
 	case DCB_CONNECTOR_TV_3:
 		nv_connector->scaling_mode = DRM_MODE_SCALE_NONE;
 		break;
-	case DCB_CONNECTOR_DP:
-	case DCB_CONNECTOR_eDP:
-	case DCB_CONNECTOR_HDMI_0:
-	case DCB_CONNECTOR_HDMI_1:
-	case DCB_CONNECTOR_DVI_I:
-	case DCB_CONNECTOR_DVI_D:
-		if (dev_priv->card_type >= NV_50)
-			connector->polled = DRM_CONNECTOR_POLL_HPD;
-		else
-			connector->polled = DRM_CONNECTOR_POLL_CONNECT;
-		/* fall-through */
 	default:
 		nv_connector->scaling_mode = DRM_MODE_SCALE_FULLSCREEN;
 
diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c
index 74e6b4e..9d7928f 100644
--- a/drivers/gpu/drm/nouveau/nouveau_display.c
+++ b/drivers/gpu/drm/nouveau/nouveau_display.c
@@ -101,6 +101,5 @@ nouveau_user_framebuffer_create(struct drm_device *dev,
 
 const struct drm_mode_config_funcs nouveau_mode_config_funcs = {
 	.fb_create = nouveau_user_framebuffer_create,
-	.output_poll_changed = nouveau_fbcon_output_poll_changed,
 };
 
diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
index c9a4a0d..0a59f96 100644
--- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c
+++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
@@ -326,11 +326,15 @@ nouveau_fbcon_find_or_create_single(struct drm_fb_helper *helper,
 	return new_fb;
 }
 
-void
-nouveau_fbcon_output_poll_changed(struct drm_device *dev)
+void nouveau_fbcon_hotplug(struct drm_device *dev)
 {
 	struct drm_nouveau_private *dev_priv = dev->dev_private;
-	drm_fb_helper_hotplug_event(&dev_priv->nfbdev->helper);
+	drm_helper_fb_hpd_irq_event(&dev_priv->nfbdev->helper);
+}
+
+static void nouveau_fbcon_output_status_changed(struct drm_fb_helper *fb_helper)
+{
+	drm_helper_fb_hotplug_event(fb_helper, true);
 }
 
 int
@@ -370,6 +374,7 @@ static struct drm_fb_helper_funcs nouveau_fbcon_helper_funcs = {
 	.gamma_set = nouveau_fbcon_gamma_set,
 	.gamma_get = nouveau_fbcon_gamma_get,
 	.fb_probe = nouveau_fbcon_find_or_create_single,
+	.fb_output_status_changed = nouveau_fbcon_output_status_changed,
 };
 
 
@@ -387,7 +392,7 @@ int nouveau_fbcon_init(struct drm_device *dev)
 	dev_priv->nfbdev = nfbdev;
 	nfbdev->helper.funcs = &nouveau_fbcon_helper_funcs;
 
-	ret = drm_fb_helper_init(dev, &nfbdev->helper, 2, 4);
+	ret = drm_fb_helper_init(dev, &nfbdev->helper, 2, 4, true);
 	if (ret) {
 		kfree(nfbdev);
 		return ret;
diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.h b/drivers/gpu/drm/nouveau/nouveau_fbcon.h
index e7e1268..bf8e00d 100644
--- a/drivers/gpu/drm/nouveau/nouveau_fbcon.h
+++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.h
@@ -58,6 +58,6 @@ void nouveau_fbcon_zfill_all(struct drm_device *dev);
 void nouveau_fbcon_save_disable_accel(struct drm_device *dev);
 void nouveau_fbcon_restore_accel(struct drm_device *dev);
 
-void nouveau_fbcon_output_poll_changed(struct drm_device *dev);
+void nouveau_fbcon_hotplug(struct drm_device *dev);
 #endif /* __NV50_FBCON_H__ */
 
diff --git a/drivers/gpu/drm/nouveau/nouveau_state.c b/drivers/gpu/drm/nouveau/nouveau_state.c
index b02a231..4dcb976 100644
--- a/drivers/gpu/drm/nouveau/nouveau_state.c
+++ b/drivers/gpu/drm/nouveau/nouveau_state.c
@@ -519,10 +519,8 @@ nouveau_card_init(struct drm_device *dev)
 
 	dev_priv->init_state = NOUVEAU_CARD_INIT_DONE;
 
-	if (drm_core_check_feature(dev, DRIVER_MODESET)) {
+	if (drm_core_check_feature(dev, DRIVER_MODESET))
 		nouveau_fbcon_init(dev);
-		drm_kms_helper_poll_init(dev);
-	}
 
 	return 0;
 
@@ -844,7 +842,6 @@ int nouveau_unload(struct drm_device *dev)
 	struct drm_nouveau_private *dev_priv = dev->dev_private;
 
 	if (drm_core_check_feature(dev, DRIVER_MODESET)) {
-		drm_kms_helper_poll_fini(dev);
 		nouveau_fbcon_fini(dev);
 		if (dev_priv->card_type >= NV_50)
 			nv50_display_destroy(dev);
diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
index 580a5d1..e6a44af 100644
--- a/drivers/gpu/drm/nouveau/nv50_display.c
+++ b/drivers/gpu/drm/nouveau/nv50_display.c
@@ -980,7 +980,7 @@ nv50_display_irq_hotplug_bh(struct work_struct *work)
 	if (dev_priv->chipset >= 0x90)
 		nv_wr32(dev, 0xe074, nv_rd32(dev, 0xe074));
 
-	drm_helper_hpd_irq_event(dev);
+	nouveau_fbcon_hotplug(dev);
 }
 
 void
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
index 0c7ccc6..40a24c9 100644
--- a/drivers/gpu/drm/radeon/radeon_connectors.c
+++ b/drivers/gpu/drm/radeon/radeon_connectors.c
@@ -1085,7 +1085,6 @@ radeon_add_atom_connector(struct drm_device *dev,
 		drm_connector_attach_property(&radeon_connector->base,
 					      rdev->mode_info.load_detect_property,
 					      1);
-		connector->polled = DRM_CONNECTOR_POLL_CONNECT;
 		break;
 	case DRM_MODE_CONNECTOR_DVIA:
 		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
@@ -1212,12 +1211,6 @@ radeon_add_atom_connector(struct drm_device *dev,
 		break;
 	}
 
-	if (hpd->hpd == RADEON_HPD_NONE) {
-		if (i2c_bus->valid)
-			connector->polled = DRM_CONNECTOR_POLL_CONNECT;
-	} else
-		connector->polled = DRM_CONNECTOR_POLL_HPD;
-
 	connector->display_info.subpixel_order = subpixel_order;
 	drm_sysfs_connector_add(connector);
 	return;
@@ -1279,7 +1272,6 @@ radeon_add_legacy_connector(struct drm_device *dev,
 		drm_connector_attach_property(&radeon_connector->base,
 					      rdev->mode_info.load_detect_property,
 					      1);
-		connector->polled = DRM_CONNECTOR_POLL_CONNECT;
 		break;
 	case DRM_MODE_CONNECTOR_DVIA:
 		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
@@ -1348,11 +1340,6 @@ radeon_add_legacy_connector(struct drm_device *dev,
 		break;
 	}
 
-	if (hpd->hpd == RADEON_HPD_NONE) {
-		if (i2c_bus->valid)
-			connector->polled = DRM_CONNECTOR_POLL_CONNECT;
-	} else
-		connector->polled = DRM_CONNECTOR_POLL_HPD;
 	connector->display_info.subpixel_order = subpixel_order;
 	drm_sysfs_connector_add(connector);
 	return;
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
index c73444a..ed756be 100644
--- a/drivers/gpu/drm/radeon/radeon_display.c
+++ b/drivers/gpu/drm/radeon/radeon_display.c
@@ -887,15 +887,8 @@ radeon_user_framebuffer_create(struct drm_device *dev,
 	return &radeon_fb->base;
 }
 
-static void radeon_output_poll_changed(struct drm_device *dev)
-{
-	struct radeon_device *rdev = dev->dev_private;
-	radeon_fb_output_poll_changed(rdev);
-}
-
 static const struct drm_mode_config_funcs radeon_mode_funcs = {
 	.fb_create = radeon_user_framebuffer_create,
-	.output_poll_changed = radeon_output_poll_changed
 };
 
 struct drm_prop_enum_list {
@@ -1044,8 +1037,6 @@ int radeon_modeset_init(struct radeon_device *rdev)
 		radeon_pm_init(rdev);
 
 	radeon_fbdev_init(rdev);
-	drm_kms_helper_poll_init(rdev->ddev);
-
 	return 0;
 }
 
@@ -1058,7 +1049,6 @@ void radeon_modeset_fini(struct radeon_device *rdev)
 		radeon_pm_fini(rdev);
 
 	if (rdev->mode_info.mode_config_initialized) {
-		drm_kms_helper_poll_fini(rdev->ddev);
 		radeon_hpd_fini(rdev);
 		drm_mode_config_cleanup(rdev->ddev);
 		rdev->mode_info.mode_config_initialized = false;
diff --git a/drivers/gpu/drm/radeon/radeon_fb.c b/drivers/gpu/drm/radeon/radeon_fb.c
index dc1634b..7dc38f6 100644
--- a/drivers/gpu/drm/radeon/radeon_fb.c
+++ b/drivers/gpu/drm/radeon/radeon_fb.c
@@ -316,9 +316,16 @@ int radeon_parse_options(char *options)
 	return 0;
 }
 
-void radeon_fb_output_poll_changed(struct radeon_device *rdev)
+void radeonfb_hotplug(struct drm_device *dev, bool polled)
 {
-	drm_fb_helper_hotplug_event(&rdev->mode_info.rfbdev->helper);
+	struct radeon_device *rdev = dev->dev_private;
+
+	drm_helper_fb_hpd_irq_event(&rdev->mode_info.rfbdev->helper);
+}
+
+static void radeon_fb_output_status_changed(struct drm_fb_helper *fb_helper)
+{
+	drm_helper_fb_hotplug_event(fb_helper, true);
 }
 
 static int radeon_fbdev_destroy(struct drm_device *dev, struct radeon_fbdev *rfbdev)
@@ -357,6 +364,7 @@ static struct drm_fb_helper_funcs radeon_fb_helper_funcs = {
 	.gamma_set = radeon_crtc_fb_gamma_set,
 	.gamma_get = radeon_crtc_fb_gamma_get,
 	.fb_probe = radeon_fb_find_or_create_single,
+	.fb_output_status_changed = radeon_fb_output_status_changed,
 };
 
 int radeon_fbdev_init(struct radeon_device *rdev)
@@ -379,7 +387,7 @@ int radeon_fbdev_init(struct radeon_device *rdev)
 
 	ret = drm_fb_helper_init(rdev->ddev, &rfbdev->helper,
 				 rdev->num_crtc,
-				 RADEONFB_CONN_LIMIT);
+				 RADEONFB_CONN_LIMIT, true);
 	if (ret) {
 		kfree(rfbdev);
 		return ret;
@@ -388,6 +396,7 @@ int radeon_fbdev_init(struct radeon_device *rdev)
 	drm_fb_helper_single_add_all_connectors(&rfbdev->helper);
 	drm_fb_helper_initial_config(&rfbdev->helper, bpp_sel);
 	return 0;
+
 }
 
 void radeon_fbdev_fini(struct radeon_device *rdev)
diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c b/drivers/gpu/drm/radeon/radeon_irq_kms.c
index 059bfa4..b0178de 100644
--- a/drivers/gpu/drm/radeon/radeon_irq_kms.c
+++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c
@@ -26,7 +26,6 @@
  *          Jerome Glisse
  */
 #include "drmP.h"
-#include "drm_crtc_helper.h"
 #include "radeon_drm.h"
 #include "radeon_reg.h"
 #include "radeon.h"
@@ -56,7 +55,9 @@ static void radeon_hotplug_work_func(struct work_struct *work)
 			radeon_connector_hotplug(connector);
 	}
 	/* Just fire off a uevent and let userspace tell us what to do */
-	drm_helper_hpd_irq_event(dev);
+	radeonfb_hotplug(dev, false);
+
+	drm_sysfs_hotplug_event(dev);
 }
 
 void radeon_driver_irq_preinstall_kms(struct drm_device *dev)
diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h
index 67358ba..fdd1611 100644
--- a/drivers/gpu/drm/radeon/radeon_mode.h
+++ b/drivers/gpu/drm/radeon/radeon_mode.h
@@ -588,6 +588,5 @@ void radeon_fbdev_fini(struct radeon_device *rdev);
 void radeon_fbdev_set_suspend(struct radeon_device *rdev, int state);
 int radeon_fbdev_total_size(struct radeon_device *rdev);
 bool radeon_fbdev_robj_is_fb(struct radeon_device *rdev, struct radeon_bo *robj);
-
-void radeon_fb_output_poll_changed(struct radeon_device *rdev);
+void radeonfb_hotplug(struct drm_device *dev, bool polled);
 #endif
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index 93a1a31..a7148d2 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -31,7 +31,6 @@
 #include <linux/idr.h>
 
 #include <linux/fb.h>
-#include <linux/slow-work.h>
 
 struct drm_device;
 struct drm_mode_set;
@@ -461,15 +460,6 @@ enum drm_connector_force {
 	DRM_FORCE_ON_DIGITAL, /* for DVI-I use digital connector */
 };
 
-/* should we poll this connector for connects and disconnects */
-/* hot plug detectable */
-#define DRM_CONNECTOR_POLL_HPD (1 << 0)
-/* poll for connections */
-#define DRM_CONNECTOR_POLL_CONNECT (1 << 1)
-/* can cleanly poll for disconnections without flickering the screen */
-/* DACs should rarely do this without a lot of testing */
-#define DRM_CONNECTOR_POLL_DISCONNECT (1 << 2)
-
 /**
  * drm_connector - central DRM connector control structure
  * @crtc: CRTC this connector is currently connected to, NULL if none
@@ -514,8 +504,6 @@ struct drm_connector {
 	u32 property_ids[DRM_CONNECTOR_MAX_PROPERTY];
 	uint64_t property_values[DRM_CONNECTOR_MAX_PROPERTY];
 
-	uint8_t polled; /* DRM_CONNECTOR_POLL_* */
-
 	/* requested DPMS state */
 	int dpms;
 
@@ -555,7 +543,6 @@ struct drm_mode_set {
  */
 struct drm_mode_config_funcs {
 	struct drm_framebuffer *(*fb_create)(struct drm_device *dev, struct drm_file *file_priv, struct drm_mode_fb_cmd *mode_cmd);
-	void (*output_poll_changed)(struct drm_device *dev);
 };
 
 struct drm_mode_group {
@@ -593,10 +580,6 @@ struct drm_mode_config {
 	struct drm_mode_config_funcs *funcs;
 	resource_size_t fb_base;
 
-	/* output poll support */
-	bool poll_enabled;
-	struct delayed_slow_work output_poll_slow_work;
-
 	/* pointers to standard properties */
 	struct list_head property_blob_list;
 	struct drm_property *edid_property;
diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h
index 1121f77..b1fa0f8 100644
--- a/include/drm/drm_crtc_helper.h
+++ b/include/drm/drm_crtc_helper.h
@@ -127,10 +127,4 @@ static inline void drm_connector_helper_add(struct drm_connector *connector,
 }
 
 extern int drm_helper_resume_force_mode(struct drm_device *dev);
-extern void drm_kms_helper_poll_init(struct drm_device *dev);
-extern void drm_kms_helper_poll_fini(struct drm_device *dev);
-extern void drm_helper_hpd_irq_event(struct drm_device *dev);
-
-extern void drm_kms_helper_poll_disable(struct drm_device *dev);
-extern void drm_kms_helper_poll_enable(struct drm_device *dev);
 #endif
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
index f0a6afc..9b55a94 100644
--- a/include/drm/drm_fb_helper.h
+++ b/include/drm/drm_fb_helper.h
@@ -30,6 +30,8 @@
 #ifndef DRM_FB_HELPER_H
 #define DRM_FB_HELPER_H
 
+#include <linux/slow-work.h>
+
 struct drm_fb_helper;
 
 struct drm_fb_helper_crtc {
@@ -69,6 +71,9 @@ struct drm_fb_helper_funcs {
 
 	int (*fb_probe)(struct drm_fb_helper *helper,
 			struct drm_fb_helper_surface_size *sizes);
+
+	void (*fb_output_status_changed)(struct drm_fb_helper *helper);
+
 };
 
 struct drm_fb_helper_connector {
@@ -90,6 +95,8 @@ struct drm_fb_helper {
 	u32 pseudo_palette[17];
 	struct list_head kernel_fb_list;
 
+	struct delayed_slow_work output_status_change_slow_work;
+	bool poll_enabled;
 	/* we got a hotplug but fbdev wasn't running the console
 	   delay until next set_par */
 	bool delayed_hotplug;
@@ -100,7 +107,7 @@ int drm_fb_helper_single_fb_probe(struct drm_fb_helper *helper,
 
 int drm_fb_helper_init(struct drm_device *dev,
 		       struct drm_fb_helper *helper, int crtc_count,
-		       int max_conn);
+		       int max_conn, bool polled);
 void drm_fb_helper_fini(struct drm_fb_helper *helper);
 int drm_fb_helper_blank(int blank, struct fb_info *info);
 int drm_fb_helper_pan_display(struct fb_var_screeninfo *var,
@@ -123,8 +130,10 @@ void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch,
 
 int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info);
 
-bool drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper);
+bool drm_helper_fb_hotplug_event(struct drm_fb_helper *fb_helper,
+				 bool polled);
 bool drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper, int bpp_sel);
 int drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper);
 
+void drm_helper_fb_hpd_irq_event(struct drm_fb_helper *fb_helper);
 #endif
-- 
1.7.0.1


drm_nouveau_ucode.patch:
 Makefile                  |   12 
 nouveau/nv50.ctxprog.ihex |  100 ++
 nouveau/nv50.ctxvals.ihex | 1335 +++++++++++++++++++++++++++++++++
 nouveau/nv84.ctxprog.ihex |   91 ++
 nouveau/nv84.ctxvals.ihex |  557 +++++++++++++
 nouveau/nv86.ctxprog.ihex |   58 +
 nouveau/nv86.ctxvals.ihex |  340 ++++++++
 nouveau/nv92.ctxprog.ihex |  103 ++
 nouveau/nv92.ctxvals.ihex | 1232 ++++++++++++++++++++++++++++++
 nouveau/nv94.ctxprog.ihex |   79 +
 nouveau/nv94.ctxvals.ihex |  761 +++++++++++++++++++
 nouveau/nv96.ctxprog.ihex |   79 +
 nouveau/nv96.ctxvals.ihex |  761 +++++++++++++++++++
 nouveau/nv98.ctxprog.ihex |   57 +
 nouveau/nv98.ctxvals.ihex |  326 ++++++++
 nouveau/nva0.ctxprog.ihex |   89 ++
 nouveau/nva0.ctxvals.ihex | 1836 ++++++++++++++++++++++++++++++++++++++++++++++
 nouveau/nva5.ctxprog.ihex |   77 +
 nouveau/nva5.ctxvals.ihex |  772 +++++++++++++++++++
 nouveau/nva8.ctxprog.ihex |   75 +
 nouveau/nva8.ctxvals.ihex |  475 +++++++++++
 nouveau/nvaa.ctxprog.ihex |   79 +
 nouveau/nvaa.ctxvals.ihex |  356 ++++++++
 nouveau/nvac.ctxprog.ihex |   79 +
 nouveau/nvac.ctxvals.ihex |  363 +++++++++
 25 files changed, 10091 insertions(+), 1 deletion(-)

View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.2 -r 1.3 drm_nouveau_ucode.patchIndex: drm_nouveau_ucode.patch
===================================================================
RCS file: drm_nouveau_ucode.patch
diff -N drm_nouveau_ucode.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ drm_nouveau_ucode.patch	9 Jul 2010 09:09:19 -0000	1.3
@@ -0,0 +1,10306 @@
+From d36d3aa4fab90592c27a83d21e86926fd057101b Mon Sep 17 00:00:00 2001
+From: Kyle McMartin <kyle at treachery.i.jkkm.org>
+Date: Mon, 11 Jan 2010 09:08:41 -0500
+Subject: squash nouveau firmware into a single commit
+
+---
+ firmware/Makefile                  |   12 +
+ firmware/nouveau/nv50.ctxprog.ihex |  100 ++
+ firmware/nouveau/nv50.ctxvals.ihex | 1335 ++++++++++++++++++++++++++
+ firmware/nouveau/nv84.ctxprog.ihex |   91 ++
+ firmware/nouveau/nv84.ctxvals.ihex |  557 +++++++++++
+ firmware/nouveau/nv86.ctxprog.ihex |   58 ++
+ firmware/nouveau/nv86.ctxvals.ihex |  340 +++++++
+ firmware/nouveau/nv92.ctxprog.ihex |  103 ++
+ firmware/nouveau/nv92.ctxvals.ihex | 1232 ++++++++++++++++++++++++
+ firmware/nouveau/nv94.ctxprog.ihex |   79 ++
+ firmware/nouveau/nv94.ctxvals.ihex |  761 +++++++++++++++
+ firmware/nouveau/nv96.ctxprog.ihex |   79 ++
+ firmware/nouveau/nv96.ctxvals.ihex |  761 +++++++++++++++
+ firmware/nouveau/nv98.ctxprog.ihex |   57 ++
+ firmware/nouveau/nv98.ctxvals.ihex |  326 +++++++
+ firmware/nouveau/nva0.ctxprog.ihex |   89 ++
+ firmware/nouveau/nva0.ctxvals.ihex | 1836 ++++++++++++++++++++++++++++++++++++
+ firmware/nouveau/nva5.ctxprog.ihex |   77 ++
+ firmware/nouveau/nva5.ctxvals.ihex |  772 +++++++++++++++
+ firmware/nouveau/nva8.ctxprog.ihex |   75 ++
+ firmware/nouveau/nva8.ctxvals.ihex |  475 ++++++++++
+ firmware/nouveau/nvaa.ctxprog.ihex |   79 ++
+ firmware/nouveau/nvaa.ctxvals.ihex |  356 +++++++
+ firmware/nouveau/nvac.ctxprog.ihex |   79 ++
+ firmware/nouveau/nvac.ctxvals.ihex |  362 +++++++
+ 25 files changed, 10091 insertions(+), 0 deletions(-)
+ create mode 100644 firmware/nouveau/nv50.ctxprog.ihex
+ create mode 100644 firmware/nouveau/nv50.ctxvals.ihex
+ create mode 100644 firmware/nouveau/nv84.ctxprog.ihex
+ create mode 100644 firmware/nouveau/nv84.ctxvals.ihex
+ create mode 100644 firmware/nouveau/nv86.ctxprog.ihex
+ create mode 100644 firmware/nouveau/nv86.ctxvals.ihex
+ create mode 100644 firmware/nouveau/nv92.ctxprog.ihex
+ create mode 100644 firmware/nouveau/nv92.ctxvals.ihex
+ create mode 100644 firmware/nouveau/nv94.ctxprog.ihex
+ create mode 100644 firmware/nouveau/nv94.ctxvals.ihex
+ create mode 100644 firmware/nouveau/nv96.ctxprog.ihex
+ create mode 100644 firmware/nouveau/nv96.ctxvals.ihex
+ create mode 100644 firmware/nouveau/nv98.ctxprog.ihex
+ create mode 100644 firmware/nouveau/nv98.ctxvals.ihex
+ create mode 100644 firmware/nouveau/nva0.ctxprog.ihex
+ create mode 100644 firmware/nouveau/nva0.ctxvals.ihex
+ create mode 100644 firmware/nouveau/nva5.ctxprog.ihex
+ create mode 100644 firmware/nouveau/nva5.ctxvals.ihex
+ create mode 100644 firmware/nouveau/nva8.ctxprog.ihex
+ create mode 100644 firmware/nouveau/nva8.ctxvals.ihex
+ create mode 100644 firmware/nouveau/nvaa.ctxprog.ihex
+ create mode 100644 firmware/nouveau/nvaa.ctxvals.ihex
+ create mode 100644 firmware/nouveau/nvac.ctxprog.ihex
+ create mode 100644 firmware/nouveau/nvac.ctxvals.ihex
+
+diff --git a/firmware/Makefile b/firmware/Makefile
+index 6d5c3ab..f315b2d 100644
+--- a/firmware/Makefile
++++ b/firmware/Makefile
+@@ -62,6 +62,18 @@ fw-shipped-$(CONFIG_DRM_RADEON) += radeon/R100_cp.bin radeon/R200_cp.bin \
+ 				   radeon/RV770_pfp.bin radeon/RV770_me.bin \
+ 				   radeon/RV730_pfp.bin radeon/RV730_me.bin \
+ 				   radeon/RV710_pfp.bin radeon/RV710_me.bin
++fw-shipped-$(CONFIG_DRM_NOUVEAU) += nouveau/nv50.ctxprog nouveau/nv50.ctxvals \
++				    nouveau/nv84.ctxprog nouveau/nv84.ctxvals \
++				    nouveau/nv86.ctxprog nouveau/nv86.ctxvals \
++				    nouveau/nv92.ctxprog nouveau/nv92.ctxvals \
++				    nouveau/nv94.ctxprog nouveau/nv94.ctxvals \
++				    nouveau/nv96.ctxprog nouveau/nv96.ctxvals \
++				    nouveau/nv98.ctxprog nouveau/nv98.ctxvals \
++				    nouveau/nva0.ctxprog nouveau/nva0.ctxvals \
++				    nouveau/nva5.ctxprog nouveau/nva5.ctxvals \
++				    nouveau/nva8.ctxprog nouveau/nva8.ctxvals \
++				    nouveau/nvaa.ctxprog nouveau/nvaa.ctxvals \
++				    nouveau/nvac.ctxprog nouveau/nvac.ctxvals
+ fw-shipped-$(CONFIG_DVB_AV7110) += av7110/bootcode.bin
+ fw-shipped-$(CONFIG_DVB_TTUSB_BUDGET) += ttusb-budget/dspbootcode.bin
+ fw-shipped-$(CONFIG_E100) += e100/d101m_ucode.bin e100/d101s_ucode.bin \
+diff --git a/firmware/nouveau/nv50.ctxprog.ihex b/firmware/nouveau/nv50.ctxprog.ihex
+new file mode 100644
+index 0000000..684781a
+--- /dev/null
++++ b/firmware/nouveau/nv50.ctxprog.ihex
+@@ -0,0 +1,100 @@
++:100000004E564350008A018E0070009C0070002004
++:10001000002000080060004C005000890E400000E5
++:100020000020000700600000003000FF00C000005A
++:10003000002000FF008000090070004D874100444F
++:100040001E4000051E40000D1E40000663410005D5
++:10005000006000C5154000110060000B1C4000FF4F
++:10006000FF9000FFFF910020002000080060004C7E
++:1000700000500009006000456341004D7E41009D35
++:10008000007000CF2240009F0070009F005000C011
++:100090001F400080002000080060004F1F4000C08B
++:1000A0001F4000CC254000810070000000200006A9
++:1000B00000600000007000FC1B1100830070000055
++:1000C0000030000059210007006000010BC0001C37
++:1000D00000200001008000CB005000FF00C0008025
++:1000E0000070008300700047002000060060000AD6
++:1000F000021100C00520000700600000003000FF72
++:1001000000C000FF00C800076E410027262000FF46
++:100110000080008C454000CB0050003F02A0004012
++:10012000002000060060000F007000020217000AA5
++:10013000021100320020000D02100042021B0002DA
++:1001400003120002041400000518000905130050F2
++:100150000515000506110007061E00000711000026
++:1001600009110002091100000A1100020B160028F3
++:100170000B11002B0B1400010C11000014110005D1
++:1001800014110007141100091411000B141100EAD6
++:10019000002000001510000F6D40004B6D40000066
++:1001A0003721000700600040042000FF0088008F16
++:1001B0000070008C6D4000CB00500000000000F883
++:1001C0001811002B002000051A1000001C13000459
++:1001D0001C1100201C1400251C1100401C1300449D
++:1001E0001C1100601C1400651C1100801C1300848D
++:1001F0001C1100A01C1400A51C1100C01C1300C47D
++:100200001C1100E01C1400E51C1100001D1300046B
++:100210001D1100201D1400251D1100401D13004458
++:100220001D1100601D1400651D1100001F1300400A
++:100230001F1900E0A74000170220000600600044DC
++:1002400000200080201000C6201100C9201500D019
++:100250002019000021120003211200002216000FB5
++:100260009F40004B9F400000372100070060004086
++:10027000042000FF0088008F0070008C9F4000CB9E
++:100280000050000000000007221200802211000030
++:1002900023110002231100802312008B23110094EC
++:1002A000231900E1B94000850220000600600044E7
++:1002B00000200080241000C6241100C9241500D09D
++:1002C000241900002512000325120000261600073D
++:1002D000261200802611000027110002271100803D
++:1002E0002712008B27110094271900E2D54000F354
++:1002F000022000060060004400200080281000C694
++:10030000281100C92815000FC940004BC940000042
++:100310003721000700600040042000FF0088008FA4
++:100320000070008CC94000CB00500000000000D0DD
++:100330002819000029120003291200002A160007BC
++:100340002A1200802A1100002B1100022B110080BC
++:100350002B12008B2B1100942B1900E3E740006156
++:100360000320000600600044002000802C1000C61E
++:100370002C1100C92C1500D02C1900002D120003DF
++:100380002D1200002E1600072E1200802E110000E4
++:100390002F1100022F1100802F12008B2F110094BB
++:1003A0002F1900E4034100CF032000060060004441
++:1003B000002000803010000FF540004BF540000099
++:1003C0003721000700600040042000FF0088008FF4
++:1003D0000070008CF54000CB00500000000000C60B
++:1003E000301100C9301500D030190000311200035F
++:1003F0003112000032160007321200803211000064
++:1004000033110002331100803312008B331100943A
++:10041000331900E51541003D04200006006000444A
++:1004200000200080341000C6341100C9341500D0FB
++:10043000341900003512000335120000361600078B
++:10044000361200803611000037110002371100808B
++:100450003712008B37110094371900E6314100AB99
++:100460000420000600600044002000803810000FC7
++:100470002341004B2341000037210007006000406A
++:10048000042000FF0088008F0070008C234100CB07
++:1004900000500000000000C6381100C9381500D017
++:1004A0003819000039120003391200003A1600070B
++:1004B0003A1200803A1100003B1100023B1100800B
++:1004C0003B12008B3B1100943B1900E7434100199C
++:1004D0000520000600600044002000803C1000C69B
++:1004E0003C1100C93C1500D03C1900003D1200032E
++:1004F0003D1200003E1600073E1200803E11000033
++:100500003F1100023F1100803F12008B3F11009409
++:100510003F1900000000000F4A4100CB00500000CE
++:100520003721000700600040042000FF008800CB56
++:10053000005000874D41000A0060000000000000EC
++:100540005C4100A000700080007000C00520000722
++:1005500000600004002000FF00C000FF008000CB0E
++:10056000005000000070000000200006006000FE47
++:100570001B11004D7E4100000070000000200006AD
++:10058000006000FE1B1100800070001D0070004D17
++:1005900011400081007000040060004A0050008893
++:1005A0006841000B006000000020000600600000B1
++:1005B0000070000B7E4100FD1B11004D37400027ED
++:1005C000262000FD008000CB0050000200C000C0CB
++:1005D000052000070060005F01200002008000CBC2
++:1005E0000050000218C000C824200002008000CB88
++:1005F0000050004D4340000B0060004D7C41000165
++:100600000070000300700006824100058341000D68
++:10061000006000050070000D007000060070000B07
++:0F0620000070000E0070001C0070000C006000E5
++:00000001FF
+diff --git a/firmware/nouveau/nv50.ctxvals.ihex b/firmware/nouveau/nv50.ctxvals.ihex
+new file mode 100644
+index 0000000..9c82e73
+--- /dev/null
++++ b/firmware/nouveau/nv50.ctxvals.ihex
+@@ -0,0 +1,1335 @@
++:100000004E56435600690A000043000000300000CD
[...9913 lines suppressed...]
++:100A500000750700003F000000960700000400003A
++:100A600000A607000001000000A7070000880000A2
++:100A700000AD07000001000000AE070000150000F7
++:100A800000AF07000088000000BD07000001000063
++:100A900000C707000004000000CD070000010000AF
++:100AA00000CE07000080444404E507000001100068
++:100AB0000045080000110000007F0800002600002B
++:100AC00000850800000F000000970800000000806B
++:100AD0003FB70800001A000000BF08000010000027
++:100AE00000C508000011000000FD08000001000022
++:100AF0000005090000010000000D090000010000D0
++:100B00000015090000020000001D0900000100009E
++:100B10000025090000020000002D0900000100006E
++:100B2000003D09000067FE1F004D0900008168AC10
++:100B30000FA609000001000000B609000001000036
++:100B400000D60900008824712AE609000000C0854B
++:100B500040EE09000040000000F60900000001001E
++:100B600000FE09000000010100060A0000000080EC
++:100B700002070A000052000000170A0000260000C9
++:100B800000270A0000040000002D0A0000010000F8
++:100B9000002F0A000004000000350A0000020000D7
++:100BA000003D0A0000010000003F0A00001A00009A
++:100BB00000450A0000010000004D0A00000200008C
++:100BC00000550A000001000000570A000000FFFF66
++:100BD000005D0A000001000000850A00001100000D
++:100BE000008D0A000001000000D60A00000F00007E
++:100BF00000360B0000040000003E0B0000FFFF0069
++:100C000000460B0000FFFF00004E0B0000FFFF003E
++:100C100000560B0000FFFF00009E0B0000010000CB
++:100C200000BE0B000001000000EE0B000001000000
++:100C300000060C0000010000005E0C000001000036
++:100C400000660C0000010000006E0C0000020000B5
++:100C500000760C0000010000007E0C000001000086
++:100C600000860C0000020000008E0C000001000055
++:100C7000009E0C000011000000DE0C00008168AC3A
++:100C80000FF60C000004000000160D00001100001B
++:100C9000001E0D0000010000002E0D0000CF00001E
++:100CA00000360D0000CF0000003E0D0000CF000018
++:100CB000008B0D00000F000000960D0000010000E9
++:100CC000009B0D0000010000009E0D0000010000CF
++:100CD00000A60D000002000000AE0D0000010000A3
++:100CE00000B60D000001000000BE0D000002000073
++:100CF00000C60D000001000000D60D00000100003C
++:100D000000DE0D000001000000E60D000001000003
++:100D100000EE0D000001000000F60D0000010000D3
++:100D200000FE0D000001000000060E0000010000A2
++:100D3000000E0E000001000000160E000011000061
++:100D400000560E00008168AC0F5E0E00000F000020
++:100D5000009E0E000067FE1F00B60E00001100008E
++:100D600000BE0E000001000000DE0E0000040000C6
++:100D7000000E0F000001000000360F0000110000FF
++:100D800000760F00008168AC0F960F000011000084
++:100D9000009E0F000001000000AE0F0000010000E7
++:100DA00000BE0F000001000000CE0F0000FF070092
++:100DB00000DE0F000001000000EE0F000001000047
++:100DC00000731000000F0000004611000008000032
++:100DD000004E11000008000000561100000800003D
++:100DE000005E11000008000000661100000800000D
++:100DF000006E1100000800000076110000080000DD
++:100E0000007E1100000800000086110000110000A3
++:100E100000C61100008168AC0FCE11000000040074
++:100E200000D611000000040000DE110000000400E4
++:100E300000E611000000040000EE110000000400B4
++:100E400000F611000000040000FE11000000040084
++:100E50000006120000000400000E12000000030053
++:100E60000016120000000300001E12000000030024
++:100E70000026120000000300002E120000000300F4
++:100E80000036120000000300003E120000000300C4
++:100E90000046120000000300004E12000001000096
++:100EA00000561200000F0000009612000020000003
++:100EB000009E12000011000000A6120000000100B8
++:100EC00000B612000001000000CE12000040000039
++:100ED00000D612000000010000E61200000300002E
++:100EE000000E13000067FE1F002E1300000200001A
++:100EF00000361300008168AC0F861300000100006B
++:100F000000AE13000004000000BE1300000100004A
++:100F100000C613000000040000CE13000000030010
++:100F200000D613000001100000F6130000110000AD
++:100F300000361400008168AC0F3E1400000F000062
++:100F400000FE1400008168AC0F0615000067FE1F4C
++:100F50000026150000110000003E150000040000EE
++:100F6000004E1500000100000056150000010000B1
++:100F70000076150000010000009E1500008168AC9D
++:100F80000FC615000004000000D615000001000087
++:100F900000DE15000001000000F615000001000051
++:100FA000004E16000001000000561600000100006F
++:100FB000005E16000001000000661600000100003F
++:100FC000006E16000001000000761600000100000F
++:100FD000007E1600000100000086160000010000DF
++:100FE000008E16000011000000CE1600008168ACD3
++:100FF0000FD61600000F00000016170000110000A9
++:10100000001E170000010000007E170000DFBFE394
++:101010000486170000DFBFE3048E17000001000004
++:10102000009E17000000FFFF00A61700000100004F
++:1010300000BE17000000FFFF0006180000010000BE
++:101040000016180000010000001E1800000010200B
++:101050003026180000405060702E1800008898A8B4
++:10106000B836180000C8D8E8F8461800001A000082
++:10107000005618000004000000FE180000040000E4
++:101080000006190000040000000E19000000010213
++:101090000336190000040000004E1900000400008F
++:1010A0000056190000040000005E190000800000D6
++:1010B0000066190000001E00006E19000004000008
++:1010C00000961A0000040000009E1A000080000034
++:1010D00000A61A000004000000AE1A000000010281
++:1010E00003B61A000003000000BE1A0000001E0034
++:1010F00000C61A000004000000EE1A000004000000
++:1011000000F61A000003000000161B000004000097
++:1011100000E81E000021000000F01E000001000099
++:1011200000F81E000002000000001F000000010087
++:1011300000081F000000010000101F000001000057
++:1011400000281F000001000000301F000002000006
++:1011500000381F000000010000401F0000000100D7
++:1011600000481F000001000000BE2B00000400002A
++:1011700000C62B000003000000D12C00000400007A
++:1011800000D92C000004000000E92C0000800000C1
++:1011900000F12C000004000000F92C000001000008
++:1011A00000092D000027000000192D000026000076
++:1011B00000135200000F00000054560000FFFF3FD4
++:1011C000006C560000FF1F0000F0690000000000E6
++:1011D00004F869000000000004006A00000000003C
++:1011E00004086A000000000004106A00000000000B
++:1011F00004186A000000000004206A0000000000DB
++:1012000004286A000000000004306A0000000000AA
++:1012100004386A000000000004406A00000000007A
++:1012200004486A000000000004506A00000000004A
++:1012300004586A000000000004606A00000000001A
++:1012400004686A000000000004906B0000DFBFE348
++:1012500004986B0000DFBFE304B06B000021FE01C7
++:1012600000B86B00008168AC0FE06B0000120C103E
++:1012700008086C000000010000206C000001000163
++:1012800000306C000001000100386C00000100001B
++:1012900000406C000001000100486C0000010000EB
++:1012A00000506C000004000000586C0000020000B8
++:1012B00000C86F00000000803F00700000040000C4
++:1012C00000087000001A00000020700000010000FB
++:1012D00000B870000000FFFF00F07000000F000079
++:1012E00000307100008168AC0F38710000110000FF
++:1012F00000B871000004000000D07100000100007F
++:1013000000E871000002000000F071000000000021
++:1013100004F87100000000000418720000050000CD
++:10132000002072000052000000487200000100001E
++:1013300000D07200000000803FD8720000000080E2
++:101340003FE07200000000803FE872000000008073
++:101350003FF07200000000803FF872000000008043
++:101360003F007300000000803F0873000000008011
++:101370003F107300000000803F18730000000080E1
++:101380003F207300000000803F28730000000080B1
++:101390003F307300000000803F3873000000008081
++:1013A0003F407300000000803F4873000000008051
++:1013B0003F507300001000000088740000120C10F1
++:1013C000089074000005000000A8740000010000EF
++:1013D00000B8740000FFFF0000C0740000FFFF00B1
++:1013E00000C8740000FFFF0000D0740000FFFF0081
++:1013F00000D874000003000000F874000000FFFF34
++:1014000000007500001A00000010750000030000C5
++:1014100000F87600000201000008770000040000D8
++:10142000001077000004000000187700000400009E
++:10143000002077000004000000687700000400002E
++:1014400000707700000400000080770000FF0700B4
++:10145000009077000002010000E077000004000027
++:1014600000E877000004000000F0770000040000AE
++:1014700000F8770000040000009AE6000004000075
++:1014800000A2E6000004000000AAE60000120C1012
++:1014900008B2E6000003000000C2E60000120C10D3
++:1014A00008D2E60000140C0800DAE6000001000093
++:1014B00000E2E6000004000000EAE600000400008C
++:1014C00000F2E60000140C08000AE70000120C10FD
++:1014D0000812E70000270000002AE70000010000D2
++:1014E000003A05010001000000F2050100120C1095
++:1014F0000800060100120C10081006010080000010
++:10150000001806010004700080200601000004009D
++:101510000428060100C00000003006010000100091
++:101520000048060100000E000050060100001E00E9
++:1015300000580601000100000070060100010000D3
++:10154000008006010004000000880601000200007F
++:1015500000F006010080000000F8060100047000A1
++:1015600080000701000004000408070100C000001B
++:1015700000100701000010000028070100000E0005
++:101580000030070100001E000038070100010000C4
++:101590000050070100010000006007010004000086
++:1015A000006807010002000000C8070100120C10CB
++:1015B00008D807010021FE010008080100FFFF0014
++:1015C0000010080100FFFF000018080100FFFF00E5
++:1015D0000020080100FFFF000028080100010000B2
++:1015E000003008010001000100380801000100017D
++:1015F0000040080100010000005008010021FE0128
++:101600000080080100120C10088808010004000086
++:10161000009808010002000000A00801001100006D
++:1016200000E80801008168AC0F1009010004000007
++:1016300000600901000200000068090100010000CB
++:10164000007009010001000000780901000200009B
++:10165000008009010001000000880901000100006C
++:10166000009009010001000000A009010004000031
++:1016700000C026010011000000D02601000100007A
++:011680000069
++:00000001FF
+-- 
+1.6.5.2
+

i915-fix-crt-hotplug-regression.patch:
 i915_irq.c  |   12 +++++++++++-
 i915_reg.h  |    1 -
 intel_crt.c |    7 -------
 3 files changed, 11 insertions(+), 9 deletions(-)

--- NEW FILE i915-fix-crt-hotplug-regression.patch ---
>From dec23057518b7035117a1a732aa48be6d34f1be8 Mon Sep 17 00:00:00 2001
From: Andrew Lutomirski <luto at mit.edu>
Date: Sat, 12 Jun 2010 09:21:18 +0000
Subject: i915: Fix CRT hotplug regression in 2.6.35-rc1

Commit 7a772c492fcfffae812ffca78a628e76fa57fe58 has two bugs which
made the hotplug problems on my laptop worse instead of better.

First, it did not, in fact, disable the CRT plug interrupt -- it
disabled all the other hotplug interrupts.  It seems rather doubtful
that that bit of the patch fixed anything, so let's just remove it.
(If you want to add it back, you probably meant ~CRT_HOTPLUG_INT_EN.)

Second, on at least my GM45, setting CRT_HOTPLUG_ACTIVATION_PERIOD_64
and CRT_HOTPLUG_VOLTAGE_COMPARE_50 (when they were previously unset)
causes a hotplug interrupt about three seconds later.  The old code
never restored PORT_HOTPLUG_EN so this could only happen once, but
they new code restores those registers.  So just set those bits when
we set up the interrupt in the first place.

Signed-off-by: Andy Lutomirski <luto at mit.edu>
---
 drivers/gpu/drm/i915/i915_irq.c  |   12 +++++++++++-
 drivers/gpu/drm/i915/i915_reg.h  |    1 -
 drivers/gpu/drm/i915/intel_crt.c |    6 ------
 3 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 2479be0..7acb1a6 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -1400,8 +1400,18 @@ int i915_driver_irq_postinstall(struct drm_device *dev)
 			hotplug_en |= SDVOC_HOTPLUG_INT_EN;
 		if (dev_priv->hotplug_supported_mask & SDVOB_HOTPLUG_INT_STATUS)
 			hotplug_en |= SDVOB_HOTPLUG_INT_EN;
-		if (dev_priv->hotplug_supported_mask & CRT_HOTPLUG_INT_STATUS)
+		if (dev_priv->hotplug_supported_mask & CRT_HOTPLUG_INT_STATUS) {
 			hotplug_en |= CRT_HOTPLUG_INT_EN;
+
+			/* Programming the CRT detection parameters tends
+			   to generate a spurious hotplug event about three
+			   seconds later.  So just do it once.
+			*/
+			if (IS_G4X(dev))
+				hotplug_en |= CRT_HOTPLUG_ACTIVATION_PERIOD_64;
+			hotplug_en |= CRT_HOTPLUG_VOLTAGE_COMPARE_50;
+		}
+
 		/* Ignore TV since it's buggy */
 
 		I915_WRITE(PORT_HOTPLUG_EN, hotplug_en);
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 64b0a3a..d390b17 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -1130,7 +1130,6 @@
 #define CRT_HOTPLUG_DETECT_DELAY_2G		(1 << 4)
 #define CRT_HOTPLUG_DETECT_VOLTAGE_325MV	(0 << 2)
 #define CRT_HOTPLUG_DETECT_VOLTAGE_475MV	(1 << 2)
-#define CRT_HOTPLUG_MASK			(0x3fc) /* Bits 9-2 */
 
 #define PORT_HOTPLUG_STAT	0x61114
 #define   HDMIB_HOTPLUG_INT_STATUS		(1 << 29)
diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
index 22ff384..ee0732b 100644
--- a/drivers/gpu/drm/i915/intel_crt.c
+++ b/drivers/gpu/drm/i915/intel_crt.c
@@ -234,14 +234,8 @@ static bool intel_crt_detect_hotplug(struct drm_connector *connector)
 	else
 		tries = 1;
 	hotplug_en = orig = I915_READ(PORT_HOTPLUG_EN);
-	hotplug_en &= CRT_HOTPLUG_MASK;
 	hotplug_en |= CRT_HOTPLUG_FORCE_DETECT;
 
-	if (IS_G4X(dev))
-		hotplug_en |= CRT_HOTPLUG_ACTIVATION_PERIOD_64;
-
-	hotplug_en |= CRT_HOTPLUG_VOLTAGE_COMPARE_50;
-
 	for (i = 0; i < tries ; i++) {
 		unsigned long timeout;
 		/* turn on the FORCE_DETECT */
-- 
1.7.0.1


iwlwifi-Recover-TX-flow-failure.patch:
 iwl-agn.c |   14 +++++++++++++-
 iwl-dev.h |   20 ++++++++++++++++++++
 iwl-rx.c  |   51 +++++++++++++++++++++++++++++++++++++++++++++++++--
 3 files changed, 82 insertions(+), 3 deletions(-)

--- NEW FILE iwlwifi-Recover-TX-flow-failure.patch ---
>From 5b51e801eef53be8e521316eea9e78e5c4595fd4 Mon Sep 17 00:00:00 2001
From: Wey-Yi Guy <wey-yi.w.guy at intel.com>
Date: Thu, 4 Mar 2010 13:38:59 -0800
Subject: [PATCH] iwlwifi: Recover TX flow failure

Monitors the tx statistics to detect the drop in throughput.
When the throughput drops, the ratio of the actual_ack_count and the
expected_ack_count also drops.  At the same time, the aggregated
ba_timeout (the number of ba timeout retries) also rises.  If the
actual_ack_count/expected_ack_count ratio is 0 and the number of ba
timeout retries rises to BA_TIMEOUT_MAX, no tx packets can be delivered.
Reloading the uCode and bring the system back to normal operational
state.

Signed-off-by: Trieu 'Andrew' Nguyen <trieux.t.nguyen at intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy at intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre at intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-agn.c |   14 ++++++++-
 drivers/net/wireless/iwlwifi/iwl-dev.h |   21 +++++++++++++
 drivers/net/wireless/iwlwifi/iwl-rx.c  |   50 +++++++++++++++++++++++++++++++-
 3 files changed, 83 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index 07a9a02..dc751cb 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -2965,10 +2965,21 @@ static int iwl_mac_ampdu_action(struct ieee80211_hw *hw,
 			return ret;
 	case IEEE80211_AMPDU_TX_START:
 		IWL_DEBUG_HT(priv, "start Tx\n");
-		return iwl_tx_agg_start(priv, sta->addr, tid, ssn);
+		ret = iwl_tx_agg_start(priv, sta->addr, tid, ssn);
+		if (ret == 0) {
+			priv->_agn.agg_tids_count++;
+			IWL_DEBUG_HT(priv, "priv->_agn.agg_tids_count = %u\n",
+				     priv->_agn.agg_tids_count);
+		}
+		return ret;
 	case IEEE80211_AMPDU_TX_STOP:
 		IWL_DEBUG_HT(priv, "stop Tx\n");
 		ret = iwl_tx_agg_stop(priv, sta->addr, tid);
+		if ((ret == 0) && (priv->_agn.agg_tids_count > 0)) {
+			priv->_agn.agg_tids_count--;
+			IWL_DEBUG_HT(priv, "priv->_agn.agg_tids_count = %u\n",
+				     priv->_agn.agg_tids_count);
+		}
 		if (test_bit(STATUS_EXIT_PENDING, &priv->status))
 			return 0;
 		else
@@ -3399,6 +3410,7 @@ static int iwl_init_drv(struct iwl_priv *priv)
 	priv->iw_mode = NL80211_IFTYPE_STATION;
 	priv->current_ht_config.smps = IEEE80211_SMPS_STATIC;
 	priv->missed_beacon_threshold = IWL_MISSED_BEACON_THRESHOLD_DEF;
+	priv->_agn.agg_tids_count = 0;
 
 	/* initialize force reset */
 	priv->force_reset[IWL_RF_RESET].reset_duration =
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h
index 447e14b..e2a6b76 100644
--- a/drivers/net/wireless/iwlwifi/iwl-dev.h
+++ b/drivers/net/wireless/iwlwifi/iwl-dev.h
@@ -1275,6 +1275,26 @@ struct iwl_priv {
 	void *shared_virt;
 	dma_addr_t shared_phys;
 	/*End*/
+	union {
+#if defined(CONFIG_IWLAGN) || defined(CONFIG_IWLAGN_MODULE)
+		struct {
+			/* INT ICT Table */
+			__le32 *ict_tbl;
+			void *ict_tbl_vir;
+			dma_addr_t ict_tbl_dma;
+			dma_addr_t aligned_ict_tbl_dma;
+			int ict_index;
+			u32 inta;
+			bool use_ict;
+			/*
+			 * reporting the number of tids has AGG on. 0 means
+			 * no AGGREGATION
+			 */
+			u8 agg_tids_count;
+		} _agn;
+#endif
+	};
+
 	struct iwl_hw_params hw_params;
 
 	/* INT ICT Table */
diff --git a/drivers/net/wireless/iwlwifi/iwl-rx.c b/drivers/net/wireless/iwlwifi/iwl-rx.c
index fabc52f..f48d685 100644
--- a/drivers/net/wireless/iwlwifi/iwl-rx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-rx.c
@@ -617,9 +617,18 @@ static void iwl_accumulative_statistics(struct iwl_priv *priv,
 
 #define REG_RECALIB_PERIOD (60)
 
+/* the threshold ratio of actual_ack_cnt to expected_ack_cnt in percent */
+#define ACK_CNT_RATIO (50)
+#define BA_TIMEOUT_CNT (5)
+#define BA_TIMEOUT_MAX (16)
+
 #define PLCP_MSG "plcp_err exceeded %u, %u, %u, %u, %u, %d, %u mSecs\n"
 /*
- * This function checks for plcp error.
+ * This function checks for plcp error, ACK count ratios, aggregated BA
+ * timeout retries.
+ * - When the ACK count ratio is 0 and aggregated BA timeout retries is
+ * exceeding the BA_TIMEOUT_MAX, it will recover the failure by resetting
+ * the firmware.
  * - When the plcp error is exceeding the thresholds, it will reset the radio
  * to improve the throughput.
  */
@@ -629,6 +638,45 @@ void iwl_recover_from_statistics(struct iwl_priv *priv,
 	int combined_plcp_delta;
 	unsigned int plcp_msec;
 	unsigned long plcp_received_jiffies;
+	int actual_ack_cnt_delta;
+	int expected_ack_cnt_delta;
+	int ba_timeout_delta;
+
+	actual_ack_cnt_delta =
+		le32_to_cpu(pkt->u.stats.tx.actual_ack_cnt) -
+		le32_to_cpu(priv->statistics.tx.actual_ack_cnt);
+	expected_ack_cnt_delta =
+		le32_to_cpu(pkt->u.stats.tx.expected_ack_cnt) -
+		le32_to_cpu(priv->statistics.tx.expected_ack_cnt);
+	ba_timeout_delta =
+		le32_to_cpu(pkt->u.stats.tx.agg.ba_timeout) -
+		le32_to_cpu(priv->statistics.tx.agg.ba_timeout);
+	if ((priv->_agn.agg_tids_count > 0) &&
+	    (expected_ack_cnt_delta > 0) &&
+	    (((actual_ack_cnt_delta * 100) / expected_ack_cnt_delta)
+		< ACK_CNT_RATIO) &&
+	    (ba_timeout_delta > BA_TIMEOUT_CNT)) {
+		IWL_DEBUG_RADIO(priv, "actual_ack_cnt delta = %d,"
+				" expected_ack_cnt = %d\n",
+				actual_ack_cnt_delta, expected_ack_cnt_delta);
+
+#ifdef CONFIG_IWLWIFI_DEBUG
+		IWL_DEBUG_RADIO(priv, "rx_detected_cnt delta = %d\n",
+				priv->delta_statistics.tx.rx_detected_cnt);
+		IWL_DEBUG_RADIO(priv,
+				"ack_or_ba_timeout_collision delta = %d\n",
+				priv->delta_statistics.tx.
+				ack_or_ba_timeout_collision);
+#endif
+		IWL_DEBUG_RADIO(priv, "agg ba_timeout delta = %d\n",
+				ba_timeout_delta);
+		if ((actual_ack_cnt_delta == 0) &&
+		    (ba_timeout_delta >= BA_TIMEOUT_MAX)) {
+			IWL_DEBUG_RADIO(priv,
+					"call iwl_force_reset(IWL_FW_RESET)\n");
+			iwl_force_reset(priv, IWL_FW_RESET);
+		}
+	}
 
 	/*
 	 * check for plcp_err and trigger radio reset if it exceeds
-- 
1.7.0.1


iwlwifi-Recover-TX-flow-stall-due-to-stuck-queue.patch:
 iwl-1000.c     |    3 +
 iwl-3945.c     |    2 +
 iwl-4965.c     |    1 
 iwl-5000.c     |    9 +++++
 iwl-6000.c     |    8 ++++
 iwl-agn.c      |   16 +++++++++
 iwl-core.c     |   93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 iwl-core.h     |    7 ++++
 iwl-dev.h      |   10 ++++++
 iwl-tx.c       |    2 +
 iwl3945-base.c |   17 +++++++++-
 11 files changed, 167 insertions(+), 1 deletion(-)

--- NEW FILE iwlwifi-Recover-TX-flow-stall-due-to-stuck-queue.patch ---
>From 8483e011e2ad5d5b27ebe4517fedf13e16d0b7cb Mon Sep 17 00:00:00 2001
From: Wey-Yi Guy <wey-yi.w.guy at intel.com>
Date: Mon, 1 Mar 2010 17:23:50 -0800
Subject: [PATCH] iwlwifi: Recover TX flow stall due to stuck queue

Monitors the internal TX queues periodically.  When a queue is stuck
for some unknown conditions causing the throughput to drop and the
transfer is stop, the driver will force firmware reload and bring the
system back to normal operational state.

The iwlwifi devices behave differently in this regard so this feature is
made part of the ops infrastructure so we can have more control on how to
monitor and recover from tx queue stall case per device.

Signed-off-by: Trieu 'Andrew' Nguyen <trieux.t.nguyen at intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy at intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre at intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-1000.c     |    3 +
 drivers/net/wireless/iwlwifi/iwl-3945.c     |    2 +
 drivers/net/wireless/iwlwifi/iwl-4965.c     |    1 +
 drivers/net/wireless/iwlwifi/iwl-5000.c     |    9 +++
 drivers/net/wireless/iwlwifi/iwl-6000.c     |    8 ++
 drivers/net/wireless/iwlwifi/iwl-agn.c      |   16 +++++
 drivers/net/wireless/iwlwifi/iwl-core.c     |   93 +++++++++++++++++++++++++++
 drivers/net/wireless/iwlwifi/iwl-core.h     |    7 ++
 drivers/net/wireless/iwlwifi/iwl-dev.h      |   10 +++
 drivers/net/wireless/iwlwifi/iwl-tx.c       |    2 +
 drivers/net/wireless/iwlwifi/iwl3945-base.c |   16 +++++
 11 files changed, 167 insertions(+), 0 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-1000.c b/drivers/net/wireless/iwlwifi/iwl-1000.c
index 3bf2e6e..89dc401 100644
--- a/drivers/net/wireless/iwlwifi/iwl-1000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-1000.c
@@ -211,6 +211,7 @@ static struct iwl_lib_ops iwl1000_lib = {
 		.set_ct_kill = iwl1000_set_ct_threshold,
 	 },
 	.add_bcast_station = iwl_add_bcast_station,
+	.recover_from_tx_stall = iwl_bg_monitor_recover,
 };
 
 static const struct iwl_ops iwl1000_ops = {
@@ -248,6 +249,7 @@ struct iwl_cfg iwl1000_bgn_cfg = {
 	.support_ct_kill_exit = true,
 	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF,
 	.chain_noise_scale = 1000,
+	.monitor_recover_period = IWL_MONITORING_PERIOD,
 };
 
 struct iwl_cfg iwl1000_bg_cfg = {
@@ -276,6 +278,7 @@ struct iwl_cfg iwl1000_bg_cfg = {
 	.support_ct_kill_exit = true,
 	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF,
 	.chain_noise_scale = 1000,
+	.monitor_recover_period = IWL_MONITORING_PERIOD,
 };
 
 MODULE_FIRMWARE(IWL1000_MODULE_FIRMWARE(IWL1000_UCODE_API_MAX));
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c
index 0728054..caebec4 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945.c
+++ b/drivers/net/wireless/iwlwifi/iwl-3945.c
@@ -2827,6 +2827,7 @@ static struct iwl_cfg iwl3945_bg_cfg = {
 	.led_compensation = 64,
 	.broken_powersave = true,
 	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
+	.monitor_recover_period = IWL_MONITORING_PERIOD,
 };
 
 static struct iwl_cfg iwl3945_abg_cfg = {
@@ -2845,6 +2846,7 @@ static struct iwl_cfg iwl3945_abg_cfg = {
 	.led_compensation = 64,
 	.broken_powersave = true,
 	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
+	.monitor_recover_period = IWL_MONITORING_PERIOD,
 };
 
 DEFINE_PCI_DEVICE_TABLE(iwl3945_hw_card_ids) = {
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c
index 8972166..aa49a6e 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965.c
+++ b/drivers/net/wireless/iwlwifi/iwl-4965.c
@@ -2251,6 +2251,7 @@ struct iwl_cfg iwl4965_agn_cfg = {
 	.led_compensation = 61,
 	.chain_noise_num_beacons = IWL4965_CAL_NUM_BEACONS,
 	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
+	.monitor_recover_period = IWL_MONITORING_PERIOD,
 };
 
 /* Module firmware */
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c
index e476acb..d05fad4 100644
--- a/drivers/net/wireless/iwlwifi/iwl-5000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-5000.c
@@ -1500,6 +1500,7 @@ struct iwl_lib_ops iwl5000_lib = {
 		.set_ct_kill = iwl5000_set_ct_threshold,
 	 },
 	.add_bcast_station = iwl_add_bcast_station,
+	.recover_from_tx_stall = iwl_bg_monitor_recover,
 };
 
 static struct iwl_lib_ops iwl5150_lib = {
@@ -1554,6 +1555,7 @@ static struct iwl_lib_ops iwl5150_lib = {
 		.set_ct_kill = iwl5150_set_ct_threshold,
 	 },
 	.add_bcast_station = iwl_add_bcast_station,
+	.recover_from_tx_stall = iwl_bg_monitor_recover,
 };
 
 static const struct iwl_ops iwl5000_ops = {
@@ -1603,6 +1605,7 @@ struct iwl_cfg iwl5300_agn_cfg = {
 	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
 	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
 	.chain_noise_scale = 1000,
+	.monitor_recover_period = IWL_MONITORING_PERIOD,
 };
 
 struct iwl_cfg iwl5100_bgn_cfg = {
@@ -1629,6 +1632,7 @@ struct iwl_cfg iwl5100_bgn_cfg = {
 	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
 	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
 	.chain_noise_scale = 1000,
+	.monitor_recover_period = IWL_MONITORING_PERIOD,
 };
 
 struct iwl_cfg iwl5100_abg_cfg = {
@@ -1653,6 +1657,7 @@ struct iwl_cfg iwl5100_abg_cfg = {
 	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
 	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
 	.chain_noise_scale = 1000,
+	.monitor_recover_period = IWL_MONITORING_PERIOD,
 };
 
 struct iwl_cfg iwl5100_agn_cfg = {
@@ -1679,6 +1684,7 @@ struct iwl_cfg iwl5100_agn_cfg = {
 	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
 	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
 	.chain_noise_scale = 1000,
+	.monitor_recover_period = IWL_MONITORING_PERIOD,
 };
 
 struct iwl_cfg iwl5350_agn_cfg = {
@@ -1705,6 +1711,7 @@ struct iwl_cfg iwl5350_agn_cfg = {
 	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
 	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
 	.chain_noise_scale = 1000,
+	.monitor_recover_period = IWL_MONITORING_PERIOD,
 };
 
 struct iwl_cfg iwl5150_agn_cfg = {
@@ -1731,6 +1738,7 @@ struct iwl_cfg iwl5150_agn_cfg = {
 	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
 	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
 	.chain_noise_scale = 1000,
+	.monitor_recover_period = IWL_MONITORING_PERIOD,
 };
 
 struct iwl_cfg iwl5150_abg_cfg = {
@@ -1755,6 +1763,7 @@ struct iwl_cfg iwl5150_abg_cfg = {
 	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
 	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
 	.chain_noise_scale = 1000,
+	.monitor_recover_period = IWL_MONITORING_PERIOD,
 };
 
 MODULE_FIRMWARE(IWL5000_MODULE_FIRMWARE(IWL5000_UCODE_API_MAX));
diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c
index 92b3e64..0c965cd 100644
--- a/drivers/net/wireless/iwlwifi/iwl-6000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-6000.c
@@ -277,6 +277,7 @@ static struct iwl_lib_ops iwl6000_lib = {
 		.set_ct_kill = iwl6000_set_ct_threshold,
 	 },
 	.add_bcast_station = iwl_add_bcast_station,
+	.recover_from_tx_stall = iwl_bg_monitor_recover,
 };
 
 static const struct iwl_ops iwl6000_ops = {
@@ -342,6 +343,7 @@ static struct iwl_lib_ops iwl6050_lib = {
 		.set_calib_version = iwl6050_set_calib_version,
 	 },
 	.add_bcast_station = iwl_add_bcast_station,
+	.recover_from_tx_stall = iwl_bg_monitor_recover,
 };
 
 static const struct iwl_ops iwl6050_ops = {
@@ -385,6 +387,7 @@ struct iwl_cfg iwl6000i_2agn_cfg = {
 	.support_ct_kill_exit = true,
 	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
 	.chain_noise_scale = 1000,
+	.monitor_recover_period = IWL_MONITORING_PERIOD,
 };
 
 struct iwl_cfg iwl6000i_2abg_cfg = {
@@ -416,6 +419,7 @@ struct iwl_cfg iwl6000i_2abg_cfg = {
 	.support_ct_kill_exit = true,
 	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
 	.chain_noise_scale = 1000,
+	.monitor_recover_period = IWL_MONITORING_PERIOD,
 };
 
 struct iwl_cfg iwl6000i_2bg_cfg = {
@@ -447,6 +451,7 @@ struct iwl_cfg iwl6000i_2bg_cfg = {
 	.support_ct_kill_exit = true,
 	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
 	.chain_noise_scale = 1000,
+	.monitor_recover_period = IWL_MONITORING_PERIOD,
 };
 
 struct iwl_cfg iwl6050_2agn_cfg = {
@@ -479,6 +484,7 @@ struct iwl_cfg iwl6050_2agn_cfg = {
 	.support_ct_kill_exit = true,
 	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
 	.chain_noise_scale = 1500,
+	.monitor_recover_period = IWL_MONITORING_PERIOD,
 };
 
 struct iwl_cfg iwl6050_2abg_cfg = {
@@ -510,6 +516,7 @@ struct iwl_cfg iwl6050_2abg_cfg = {
 	.support_ct_kill_exit = true,
 	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
 	.chain_noise_scale = 1500,
+	.monitor_recover_period = IWL_MONITORING_PERIOD,
 };
 
 struct iwl_cfg iwl6000_3agn_cfg = {
@@ -542,6 +549,7 @@ struct iwl_cfg iwl6000_3agn_cfg = {
 	.support_ct_kill_exit = true,
 	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
 	.chain_noise_scale = 1000,
+	.monitor_recover_period = IWL_MONITORING_PERIOD,
 };
 
 MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX));
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index bdff565..07a9a02 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -2106,6 +2106,13 @@ static void iwl_alive_start(struct iwl_priv *priv)
 	/* After the ALIVE response, we can send host commands to the uCode */
 	set_bit(STATUS_ALIVE, &priv->status);
 
+	if (priv->cfg->ops->lib->recover_from_tx_stall) {
+		/* Enable timer to monitor the driver queues */
+		mod_timer(&priv->monitor_recover,
+			jiffies +
+			msecs_to_jiffies(priv->cfg->monitor_recover_period));
+	}
+
 	if (iwl_is_rfkill(priv))
 		return;
 
@@ -3316,6 +3323,13 @@ static void iwl_setup_deferred_work(struct iwl_priv *priv)
 	priv->ucode_trace.data = (unsigned long)priv;
 	priv->ucode_trace.function = iwl_bg_ucode_trace;
 
+	if (priv->cfg->ops->lib->recover_from_tx_stall) {
+		init_timer(&priv->monitor_recover);
+		priv->monitor_recover.data = (unsigned long)priv;
+		priv->monitor_recover.function =
+			priv->cfg->ops->lib->recover_from_tx_stall;
+	}
+
 	if (!priv->cfg->use_isr_legacy)
 		tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
 			iwl_irq_tasklet, (unsigned long)priv);
@@ -3336,6 +3350,8 @@ static void iwl_cancel_deferred_work(struct iwl_priv *priv)
 	cancel_work_sync(&priv->beacon_update);
 	del_timer_sync(&priv->statistics_periodic);
 	del_timer_sync(&priv->ucode_trace);
+	if (priv->cfg->ops->lib->recover_from_tx_stall)
+		del_timer_sync(&priv->monitor_recover);
 }
 
 static void iwl_init_hw_rates(struct iwl_priv *priv,
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
index 049b652..a5a2de6 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.c
+++ b/drivers/net/wireless/iwlwifi/iwl-core.c
@@ -3403,6 +3403,99 @@ int iwl_force_reset(struct iwl_priv *priv, int mode)
 	}
 	return 0;
 }
+EXPORT_SYMBOL(iwl_force_reset);
+
+/**
+ * iwl_bg_monitor_recover - Timer callback to check for stuck queue and recover
+ *
+ * During normal condition (no queue is stuck), the timer is continually set to
+ * execute every monitor_recover_period milliseconds after the last timer
+ * expired.  When the queue read_ptr is at the same place, the timer is
+ * shorten to 100mSecs.  This is
+ *      1) to reduce the chance that the read_ptr may wrap around (not stuck)
+ *      2) to detect the stuck queues quicker before the station and AP can
+ *      disassociate each other.
+ *
+ * This function monitors all the tx queues and recover from it if any
+ * of the queues are stuck.
+ * 1. It first check the cmd queue for stuck conditions.  If it is stuck,
+ *      it will recover by resetting the firmware and return.
+ * 2. Then, it checks for station association.  If it associates it will check
+ *      other queues.  If any queue is stuck, it will recover by resetting
+ *      the firmware.
+ * Note: It the number of times the queue read_ptr to be at the same place to
+ *      be MAX_REPEAT+1 in order to consider to be stuck.
+ */
+/*
+ * The maximum number of times the read pointer of the tx queue at the
+ * same place without considering to be stuck.
+ */
+#define MAX_REPEAT      (2)
+static int iwl_check_stuck_queue(struct iwl_priv *priv, int cnt)
+{
+	struct iwl_tx_queue *txq;
+	struct iwl_queue *q;
+
+	txq = &priv->txq[cnt];
+	q = &txq->q;
+	/* queue is empty, skip */
+	if (q->read_ptr != q->write_ptr) {
+		if (q->read_ptr == q->last_read_ptr) {
+			/* a queue has not been read from last time */
+			if (q->repeat_same_read_ptr > MAX_REPEAT) {
+				IWL_ERR(priv,
+					"queue %d stuck %d time. Fw reload.\n",
+					q->id, q->repeat_same_read_ptr);
+				q->repeat_same_read_ptr = 0;
+				iwl_force_reset(priv, IWL_FW_RESET);
+			} else {
+				q->repeat_same_read_ptr++;
+				IWL_DEBUG_RADIO(priv,
+						"queue %d, not read %d time\n",
+						q->id,
+						q->repeat_same_read_ptr);
+				mod_timer(&priv->monitor_recover, jiffies +
+					msecs_to_jiffies(IWL_ONE_HUNDRED_MSECS));
+			}
+			return 1;
+		} else {
+			q->last_read_ptr = q->read_ptr;
+			q->repeat_same_read_ptr = 0;
+		}
+	}
+	return 0;
+}
+
+void iwl_bg_monitor_recover(unsigned long data)
+{
+	struct iwl_priv *priv = (struct iwl_priv *)data;
+	int cnt;
+
+	if (test_bit(STATUS_EXIT_PENDING, &priv->status))
+		return;
+
+	/* monitor and check for stuck cmd queue */
+	if (iwl_check_stuck_queue(priv, IWL_CMD_QUEUE_NUM))
+		return;
+
+	/* monitor and check for other stuck queues */
+	if (iwl_is_associated(priv)) {
+		for (cnt = 0; cnt < priv->hw_params.max_txq_num; cnt++) {
+			/* skip as we already checked the command queue */
+			if (cnt == IWL_CMD_QUEUE_NUM)
+				continue;
+			if (iwl_check_stuck_queue(priv, cnt))
+				return;
+		}
+	}
+	/*
+	 * Reschedule the timer to occur in
+	 * priv->cfg->monitor_recover_period
+	 */
+	mod_timer(&priv->monitor_recover,
+		jiffies + msecs_to_jiffies(priv->cfg->monitor_recover_period));
+}
+EXPORT_SYMBOL(iwl_bg_monitor_recover);
 
 #ifdef CONFIG_PM
 
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h
index 36940a9..9076576 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.h
+++ b/drivers/net/wireless/iwlwifi/iwl-core.h
@@ -191,6 +191,8 @@ struct iwl_lib_ops {
 	struct iwl_temp_ops temp_ops;
 	/* station management */
 	void (*add_bcast_station)(struct iwl_priv *priv);
+	/* recover from tx queue stall */
+	void (*recover_from_tx_stall)(unsigned long data);
 };
 
 struct iwl_led_ops {
@@ -295,6 +297,8 @@ struct iwl_cfg {
 	const bool support_wimax_coexist;
 	u8 plcp_delta_threshold;
 	s32 chain_noise_scale;
+	/* timer period for monitor the driver queues */
+	u32 monitor_recover_period;
 };
 
 /***************************
@@ -577,6 +581,9 @@ static inline u16 iwl_pcie_link_ctl(struct iwl_priv *priv)
 	pci_read_config_word(priv->pci_dev, pos + PCI_EXP_LNKCTL, &pci_lnk_ctl);
 	return pci_lnk_ctl;
 }
+
+void iwl_bg_monitor_recover(unsigned long data);
+
 #ifdef CONFIG_PM
 int iwl_pci_suspend(struct pci_dev *pdev, pm_message_t state);
 int iwl_pci_resume(struct pci_dev *pdev);
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h
index ef1720a..447e14b 100644
--- a/drivers/net/wireless/iwlwifi/iwl-dev.h
+++ b/drivers/net/wireless/iwlwifi/iwl-dev.h
@@ -183,6 +183,10 @@ struct iwl_queue {
 	int n_bd;              /* number of BDs in this queue */
 	int write_ptr;       /* 1-st empty entry (index) host_w*/
 	int read_ptr;         /* last used entry (index) host_r*/
+	/* use for monitoring and recovering the stuck queue */
+	int last_read_ptr;      /* storing the last read_ptr */
+	/* number of time read_ptr and last_read_ptr are the same */
+	u8 repeat_same_read_ptr;
 	dma_addr_t dma_addr;   /* physical addr for BD's */
 	int n_window;	       /* safe queue window */
 	u32 id;
@@ -1039,6 +1043,11 @@ struct iwl_event_log {
 #define IWL_DELAY_NEXT_FORCE_RF_RESET  (HZ*3)
 #define IWL_DELAY_NEXT_FORCE_FW_RELOAD (HZ*5)
 
+/* timer constants use to monitor and recover stuck tx queues in mSecs */
+#define IWL_MONITORING_PERIOD  (1000)
+#define IWL_ONE_HUNDRED_MSECS   (100)
+#define IWL_SIXTY_SECS          (60000)
+
 enum iwl_reset {
 	IWL_RF_RESET = 0,
 	IWL_FW_RESET,
@@ -1339,6 +1348,7 @@ struct iwl_priv {
 	struct work_struct run_time_calib_work;
 	struct timer_list statistics_periodic;
 	struct timer_list ucode_trace;
+	struct timer_list monitor_recover;
 	bool hw_ready;
 	/*For 3945*/
 #define IWL_DEFAULT_TX_POWER 0x0F
diff --git a/drivers/net/wireless/iwlwifi/iwl-tx.c b/drivers/net/wireless/iwlwifi/iwl-tx.c
index 8dd0c03..6af23f2 100644
--- a/drivers/net/wireless/iwlwifi/iwl-tx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-tx.c
@@ -310,6 +310,8 @@ static int iwl_queue_init(struct iwl_priv *priv, struct iwl_queue *q,
 		q->high_mark = 2;
 
 	q->write_ptr = q->read_ptr = 0;
+	q->last_read_ptr = 0;
+	q->repeat_same_read_ptr = 0;
 
 	return 0;
 }
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index 19c77a8..853511e 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -2513,6 +2513,13 @@ static void iwl3945_alive_start(struct iwl_priv *priv)
 	/* After the ALIVE response, we can send commands to 3945 uCode */
 	set_bit(STATUS_ALIVE, &priv->status);
 
+	if (priv->cfg->ops->lib->recover_from_tx_stall) {
+		/* Enable timer to monitor the driver queues */
+		mod_timer(&priv->monitor_recover,
+			jiffies +
+			msecs_to_jiffies(priv->cfg->monitor_recover_period));
+	}
+
 	if (iwl_is_rfkill(priv))
 		return;
 
@@ -3789,6 +3796,13 @@ static void iwl3945_setup_deferred_work(struct iwl_priv *priv)
 
 	iwl3945_hw_setup_deferred_work(priv);
 
+	if (priv->cfg->ops->lib->recover_from_tx_stall) {
+		init_timer(&priv->monitor_recover);
+		priv->monitor_recover.data = (unsigned long)priv;
+		priv->monitor_recover.function =
+			priv->cfg->ops->lib->recover_from_tx_stall;
+	}
+
 	tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
 		     iwl3945_irq_tasklet, (unsigned long)priv);
 }
@@ -3801,6 +3815,8 @@ static void iwl3945_cancel_deferred_work(struct iwl_priv *priv)
 	cancel_delayed_work(&priv->scan_check);
 	cancel_delayed_work(&priv->alive_start);
 	cancel_work_sync(&priv->beacon_update);
+	if (priv->cfg->ops->lib->recover_from_tx_stall)
+		del_timer_sync(&priv->monitor_recover);
 }
 
 static struct attribute *iwl3945_sysfs_entries[] = {
-- 
1.7.0.1


iwlwifi-add-internal-short-scan-support-for-3945.patch:
 iwl3945-base.c |   23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

--- NEW FILE iwlwifi-add-internal-short-scan-support-for-3945.patch ---
>From dcde3533b9f501ad079c297b3bf7659739c4c287 Mon Sep 17 00:00:00 2001
From: Wey-Yi Guy <wey-yi.w.guy at intel.com>
Date: Wed, 24 Feb 2010 08:28:30 -0800
Subject: [PATCH] iwlwifi: add internal short scan support for 3945

Add internal short scan support for 3945 NIC, This allows 3945 NIC
to support radio reset request like the other series of NICs.

Signed-off-by: Wey-Yi Guy <wey-yi.w.guy at intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre at intel.com>
---
 drivers/net/wireless/iwlwifi/iwl3945-base.c |   22 ++++++++++++++--------
 1 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index b74a56c..19c77a8 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -2821,7 +2821,6 @@ static void iwl3945_bg_request_scan(struct work_struct *data)
 		.len = sizeof(struct iwl3945_scan_cmd),
 		.flags = CMD_SIZE_HUGE,
 	};
-	int rc = 0;
 	struct iwl3945_scan_cmd *scan;
 	struct ieee80211_conf *conf = NULL;
 	u8 n_probes = 0;
@@ -2849,7 +2848,6 @@ static void iwl3945_bg_request_scan(struct work_struct *data)
 	if (test_bit(STATUS_SCAN_HW, &priv->status)) {
 		IWL_DEBUG_INFO(priv, "Multiple concurrent scan requests  "
 				"Ignoring second request.\n");
-		rc = -EIO;
 		goto done;
 	}
 
@@ -2884,7 +2882,7 @@ static void iwl3945_bg_request_scan(struct work_struct *data)
 		priv->scan = kmalloc(sizeof(struct iwl3945_scan_cmd) +
 				     IWL_MAX_SCAN_SIZE, GFP_KERNEL);
 		if (!priv->scan) {
-			rc = -ENOMEM;
+			IWL_DEBUG_SCAN(priv, "Fail to allocate scan memory\n");
 			goto done;
 		}
 	}
@@ -2927,7 +2925,9 @@ static void iwl3945_bg_request_scan(struct work_struct *data)
 			       scan_suspend_time, interval);
 	}
 
-	if (priv->scan_request->n_ssids) {
+	if (priv->is_internal_short_scan) {
+		IWL_DEBUG_SCAN(priv, "Start internal passive scan.\n");
+	} else if (priv->scan_request->n_ssids) {
 		int i, p = 0;
 		IWL_DEBUG_SCAN(priv, "Kicking off active scan\n");
 		for (i = 0; i < priv->scan_request->n_ssids; i++) {
@@ -2975,13 +2975,20 @@ static void iwl3945_bg_request_scan(struct work_struct *data)
 		goto done;
 	}
 
-	scan->tx_cmd.len = cpu_to_le16(
+	if (!priv->is_internal_short_scan) {
+		scan->tx_cmd.len = cpu_to_le16(
 			iwl_fill_probe_req(priv,
 				(struct ieee80211_mgmt *)scan->data,
 				priv->scan_request->ie,
 				priv->scan_request->ie_len,
 				IWL_MAX_SCAN_SIZE - sizeof(*scan)));
-
+	} else {
+		scan->tx_cmd.len = cpu_to_le16(
+			iwl_fill_probe_req(priv,
+				(struct ieee80211_mgmt *)scan->data,
+				NULL, 0,
+				IWL_MAX_SCAN_SIZE - sizeof(*scan)));
+	}
 	/* select Rx antennas */
 	scan->flags |= iwl3945_get_antenna_flags(priv);
 
@@ -3003,8 +3010,7 @@ static void iwl3945_bg_request_scan(struct work_struct *data)
 	scan->len = cpu_to_le16(cmd.len);
 
 	set_bit(STATUS_SCAN_HW, &priv->status);
-	rc = iwl_send_cmd_sync(priv, &cmd);
-	if (rc)
+	if (iwl_send_cmd_sync(priv, &cmd))
 		goto done;
 
 	queue_delayed_work(priv->workqueue, &priv->scan_check,
-- 
1.7.0.1


iwlwifi-code-cleanup-for-connectivity-recovery.patch:
 iwl-1000.c |    3 +
 iwl-4965.c |    2 -
 iwl-5000.c |    6 ++-
 iwl-6000.c |    6 ++-
 iwl-core.h |   11 ++++--
 iwl-rx.c   |   98 +++++++++++++++++++++++++++++++++++++++++--------------------
 6 files changed, 85 insertions(+), 41 deletions(-)

--- NEW FILE iwlwifi-code-cleanup-for-connectivity-recovery.patch ---
>From 56cf16e34b896ac40c6707eb053d45d2cab18bbd Mon Sep 17 00:00:00 2001
From: Wey-Yi Guy <wey-yi.w.guy at intel.com>
Date: Fri, 5 Mar 2010 14:22:46 -0800
Subject: [PATCH] iwlwifi: code cleanup for connectivity recovery

Split the connectivity check and recovery routine into separated
functions based on the types
   1. iwl_good_ack_health() - check for ack count
   2. iwl_good_plcp_health() - check for plcp error

Based on the type of errors being detected, different recovery methods
will be used to bring the system back to normal operational state.

Because different NIC has different HW and uCode, the behavior is also
different; these functions thus now form part of the ops infrastructure,
so we can have more control on how to monitor and recover from error condition
case per device.

Signed-off-by: Wey-Yi Guy <wey-yi.w.guy at intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre at intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-1000.c |    3 +-
 drivers/net/wireless/iwlwifi/iwl-4965.c |    2 +-
 drivers/net/wireless/iwlwifi/iwl-5000.c |    6 +-
 drivers/net/wireless/iwlwifi/iwl-6000.c |    6 +-
 drivers/net/wireless/iwlwifi/iwl-core.h |   11 +++-
 drivers/net/wireless/iwlwifi/iwl-rx.c   |   97 +++++++++++++++++++++----------
 6 files changed, 85 insertions(+), 40 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-1000.c b/drivers/net/wireless/iwlwifi/iwl-1000.c
index 2597574..7087631 100644
--- a/drivers/net/wireless/iwlwifi/iwl-1000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-1000.c
@@ -212,7 +212,8 @@ static struct iwl_lib_ops iwl1000_lib = {
 	 },
 	.add_bcast_station = iwl_add_bcast_station,
 	.recover_from_tx_stall = iwl_bg_monitor_recover,
-	.recover_from_statistics = iwl_recover_from_statistics,
+	.check_plcp_health = iwl_good_plcp_health,
+	.check_ack_health = iwl_good_ack_health,
 };
 
 static const struct iwl_ops iwl1000_ops = {
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c
index 6dd4328..dcca310 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965.c
+++ b/drivers/net/wireless/iwlwifi/iwl-4965.c
@@ -2217,7 +2217,7 @@ static struct iwl_lib_ops iwl4965_lib = {
 		.set_ct_kill = iwl4965_set_ct_threshold,
 	},
 	.add_bcast_station = iwl_add_bcast_station,
-	.recover_from_statistics = iwl_recover_from_statistics,
+	.check_plcp_health = iwl_good_plcp_health,
 };
 
 static const struct iwl_ops iwl4965_ops = {
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c
index 0c2469c..8e0dd13 100644
--- a/drivers/net/wireless/iwlwifi/iwl-5000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-5000.c
@@ -1501,7 +1501,8 @@ struct iwl_lib_ops iwl5000_lib = {
 	 },
 	.add_bcast_station = iwl_add_bcast_station,
 	.recover_from_tx_stall = iwl_bg_monitor_recover,
-	.recover_from_statistics = iwl_recover_from_statistics,
+	.check_plcp_health = iwl_good_plcp_health,
+	.check_ack_health = iwl_good_ack_health,
 };
 
 static struct iwl_lib_ops iwl5150_lib = {
@@ -1557,7 +1558,8 @@ static struct iwl_lib_ops iwl5150_lib = {
 	 },
 	.add_bcast_station = iwl_add_bcast_station,
 	.recover_from_tx_stall = iwl_bg_monitor_recover,
-	.recover_from_statistics = iwl_recover_from_statistics,
+	.check_plcp_health = iwl_good_plcp_health,
+	.check_ack_health = iwl_good_ack_health,
 };
 
 static const struct iwl_ops iwl5000_ops = {
diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c
index 189a8ce..1d4fea1 100644
--- a/drivers/net/wireless/iwlwifi/iwl-6000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-6000.c
@@ -278,7 +278,8 @@ static struct iwl_lib_ops iwl6000_lib = {
 	 },
 	.add_bcast_station = iwl_add_bcast_station,
 	.recover_from_tx_stall = iwl_bg_monitor_recover,
-	.recover_from_statistics = iwl_recover_from_statistics,
+	.check_plcp_health = iwl_good_plcp_health,
+	.check_ack_health = iwl_good_ack_health,
 };
 
 static const struct iwl_ops iwl6000_ops = {
@@ -345,7 +346,8 @@ static struct iwl_lib_ops iwl6050_lib = {
 	 },
 	.add_bcast_station = iwl_add_bcast_station,
 	.recover_from_tx_stall = iwl_bg_monitor_recover,
-	.recover_from_statistics = iwl_recover_from_statistics,
+	.check_plcp_health = iwl_good_plcp_health,
+	.check_ack_health = iwl_good_ack_health,
 };
 
 static const struct iwl_ops iwl6050_ops = {
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h
index d67048e..5234a85 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.h
+++ b/drivers/net/wireless/iwlwifi/iwl-core.h
@@ -193,8 +193,11 @@ struct iwl_lib_ops {
 	void (*add_bcast_station)(struct iwl_priv *priv);
 	/* recover from tx queue stall */
 	void (*recover_from_tx_stall)(unsigned long data);
-	/* recover from errors showed in statistics */
-	void (*recover_from_statistics)(struct iwl_priv *priv,
+	/* check for plcp health */
+	bool (*check_plcp_health)(struct iwl_priv *priv,
+					struct iwl_rx_packet *pkt);
+	/* check for ack health */
+	bool (*check_ack_health)(struct iwl_priv *priv,
 					struct iwl_rx_packet *pkt);
 };
 
@@ -438,7 +441,9 @@ void iwl_rx_missed_beacon_notif(struct iwl_priv *priv,
 			       struct iwl_rx_mem_buffer *rxb);
 void iwl_rx_spectrum_measure_notif(struct iwl_priv *priv,
 					  struct iwl_rx_mem_buffer *rxb);
-void iwl_recover_from_statistics(struct iwl_priv *priv,
+bool iwl_good_plcp_health(struct iwl_priv *priv,
+				 struct iwl_rx_packet *pkt);
+bool iwl_good_ack_health(struct iwl_priv *priv,
 				 struct iwl_rx_packet *pkt);
 void iwl_rx_statistics(struct iwl_priv *priv,
 			      struct iwl_rx_mem_buffer *rxb);
diff --git a/drivers/net/wireless/iwlwifi/iwl-rx.c b/drivers/net/wireless/iwlwifi/iwl-rx.c
index f48d685..506ccf7 100644
--- a/drivers/net/wireless/iwlwifi/iwl-rx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-rx.c
@@ -622,24 +622,18 @@ static void iwl_accumulative_statistics(struct iwl_priv *priv,
 #define BA_TIMEOUT_CNT (5)
 #define BA_TIMEOUT_MAX (16)
 
-#define PLCP_MSG "plcp_err exceeded %u, %u, %u, %u, %u, %d, %u mSecs\n"
-/*
- * This function checks for plcp error, ACK count ratios, aggregated BA
- * timeout retries.
- * - When the ACK count ratio is 0 and aggregated BA timeout retries is
- * exceeding the BA_TIMEOUT_MAX, it will recover the failure by resetting
- * the firmware.
- * - When the plcp error is exceeding the thresholds, it will reset the radio
- * to improve the throughput.
+/**
+ * iwl_good_ack_health - checks for ACK count ratios, BA timeout retries.
+ *
+ * When the ACK count ratio is 0 and aggregated BA timeout retries exceeding
+ * the BA_TIMEOUT_MAX, reload firmware and bring system back to normal
+ * operation state.
  */
-void iwl_recover_from_statistics(struct iwl_priv *priv,
-				   struct iwl_rx_packet *pkt)
+bool iwl_good_ack_health(struct iwl_priv *priv,
+				struct iwl_rx_packet *pkt)
 {
-	int combined_plcp_delta;
-	unsigned int plcp_msec;
-	unsigned long plcp_received_jiffies;
-	int actual_ack_cnt_delta;
-	int expected_ack_cnt_delta;
+	bool rc = true;
+	int actual_ack_cnt_delta, expected_ack_cnt_delta;
 	int ba_timeout_delta;
 
 	actual_ack_cnt_delta =
@@ -670,13 +664,27 @@ void iwl_recover_from_statistics(struct iwl_priv *priv,
 #endif
 		IWL_DEBUG_RADIO(priv, "agg ba_timeout delta = %d\n",
 				ba_timeout_delta);
-		if ((actual_ack_cnt_delta == 0) &&
-		    (ba_timeout_delta >= BA_TIMEOUT_MAX)) {
-			IWL_DEBUG_RADIO(priv,
-					"call iwl_force_reset(IWL_FW_RESET)\n");
-			iwl_force_reset(priv, IWL_FW_RESET);
-		}
+		if (!actual_ack_cnt_delta &&
+		    (ba_timeout_delta >= BA_TIMEOUT_MAX))
+			rc = false;
 	}
+	return rc;
+}
+EXPORT_SYMBOL(iwl_good_ack_health);
+
+/**
+ * iwl_good_plcp_health - checks for plcp error.
+ *
+ * When the plcp error is exceeding the thresholds, reset the radio
+ * to improve the throughput.
+ */
+bool iwl_good_plcp_health(struct iwl_priv *priv,
+				struct iwl_rx_packet *pkt)
+{
+	bool rc = true;
+	int combined_plcp_delta;
+	unsigned int plcp_msec;
+	unsigned long plcp_received_jiffies;
 
 	/*
 	 * check for plcp_err and trigger radio reset if it exceeds
@@ -711,7 +719,8 @@ void iwl_recover_from_statistics(struct iwl_priv *priv,
 			 *    combined_plcp_delta,
 			 *    plcp_msec
 			 */
-			IWL_DEBUG_RADIO(priv, PLCP_MSG,
+			IWL_DEBUG_RADIO(priv, "plcp_err exceeded %u, "
+				"%u, %u, %u, %u, %d, %u mSecs\n",
 				priv->cfg->plcp_delta_threshold,
 				le32_to_cpu(pkt->u.stats.rx.ofdm.plcp_err),
 				le32_to_cpu(priv->statistics.rx.ofdm.plcp_err),
@@ -719,15 +728,42 @@ void iwl_recover_from_statistics(struct iwl_priv *priv,
 				le32_to_cpu(
 				  priv->statistics.rx.ofdm_ht.plcp_err),
 				combined_plcp_delta, plcp_msec);
-			/*
-			 * Reset the RF radio due to the high plcp
-			 * error rate
-			 */
-			iwl_force_reset(priv, IWL_RF_RESET);
+			rc = false;
+		}
+	}
+	return rc;
+}
+EXPORT_SYMBOL(iwl_good_plcp_health);
+
+static void iwl_recover_from_statistics(struct iwl_priv *priv,
+				struct iwl_rx_packet *pkt)
+{
+	if (test_bit(STATUS_EXIT_PENDING, &priv->status))
+		return;
+	if (iwl_is_associated(priv)) {
+		if (priv->cfg->ops->lib->check_ack_health) {
+			if (!priv->cfg->ops->lib->check_ack_health(
+			    priv, pkt)) {
+				/*
+				 * low ack count detected
+				 * restart Firmware
+				 */
+				IWL_ERR(priv, "low ack count detected, "
+					"restart firmware\n");
+				iwl_force_reset(priv, IWL_FW_RESET);
+			}
+		} else if (priv->cfg->ops->lib->check_plcp_health) {
+			if (!priv->cfg->ops->lib->check_plcp_health(
+			    priv, pkt)) {
+				/*
+				 * high plcp error detected
+				 * reset Radio
+				 */
+				iwl_force_reset(priv, IWL_RF_RESET);
+			}
 		}
 	}
 }
-EXPORT_SYMBOL(iwl_recover_from_statistics);
 
 void iwl_rx_statistics(struct iwl_priv *priv,
 			      struct iwl_rx_mem_buffer *rxb)
@@ -749,8 +785,7 @@ void iwl_rx_statistics(struct iwl_priv *priv,
 #ifdef CONFIG_IWLWIFI_DEBUG
 	iwl_accumulative_statistics(priv, (__le32 *)&pkt->u.stats);
 #endif
-	if (priv->cfg->ops->lib->recover_from_statistics)
-		priv->cfg->ops->lib->recover_from_statistics(priv, pkt);
+	iwl_recover_from_statistics(priv, pkt);
 
 	memcpy(&priv->statistics, &pkt->u.stats, sizeof(priv->statistics));
 
-- 
1.7.0.1


iwlwifi-iwl_good_ack_health-only-apply-to-AGN-device.patch:
 iwl-agn.c |   54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 iwl-rx.c  |   56 --------------------------------------------------------
 2 files changed, 54 insertions(+), 56 deletions(-)

--- NEW FILE iwlwifi-iwl_good_ack_health-only-apply-to-AGN-device.patch ---
>From 8ac33071b4c991e302be67fd0dae1d9cc4b502e3 Mon Sep 17 00:00:00 2001
From: Wey-Yi Guy <wey-yi.w.guy at intel.com>
Date: Tue, 16 Mar 2010 10:46:31 -0700
Subject: [PATCH] iwlwifi: iwl_good_ack_health() only apply to AGN device

iwl_good_ack_health() check for expected and actual ack count which only
apply to aggregation mode. Move the function to iwlagn module.

Reported-by: Chantry Xavier <chantry.xavier at gmail.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy at intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre at intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-agn.c |   54 +++++++++++++++++++++++++++++++
 drivers/net/wireless/iwlwifi/iwl-rx.c  |   55 --------------------------------
 2 files changed, 54 insertions(+), 55 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index dc751cb..b5d410b 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -1448,6 +1448,60 @@ static void iwl_irq_tasklet(struct iwl_priv *priv)
 		iwl_enable_interrupts(priv);
 }
 
+/* the threshold ratio of actual_ack_cnt to expected_ack_cnt in percent */
+#define ACK_CNT_RATIO (50)
+#define BA_TIMEOUT_CNT (5)
+#define BA_TIMEOUT_MAX (16)
+
+/**
+ * iwl_good_ack_health - checks for ACK count ratios, BA timeout retries.
+ *
+ * When the ACK count ratio is 0 and aggregated BA timeout retries exceeding
+ * the BA_TIMEOUT_MAX, reload firmware and bring system back to normal
+ * operation state.
+ */
+bool iwl_good_ack_health(struct iwl_priv *priv,
+				struct iwl_rx_packet *pkt)
+{
+	bool rc = true;
+	int actual_ack_cnt_delta, expected_ack_cnt_delta;
+	int ba_timeout_delta;
+
+	actual_ack_cnt_delta =
+		le32_to_cpu(pkt->u.stats.tx.actual_ack_cnt) -
+		le32_to_cpu(priv->statistics.tx.actual_ack_cnt);
+	expected_ack_cnt_delta =
+		le32_to_cpu(pkt->u.stats.tx.expected_ack_cnt) -
+		le32_to_cpu(priv->statistics.tx.expected_ack_cnt);
+	ba_timeout_delta =
+		le32_to_cpu(pkt->u.stats.tx.agg.ba_timeout) -
+		le32_to_cpu(priv->statistics.tx.agg.ba_timeout);
+	if ((priv->_agn.agg_tids_count > 0) &&
+	    (expected_ack_cnt_delta > 0) &&
+	    (((actual_ack_cnt_delta * 100) / expected_ack_cnt_delta)
+		< ACK_CNT_RATIO) &&
+	    (ba_timeout_delta > BA_TIMEOUT_CNT)) {
+		IWL_DEBUG_RADIO(priv, "actual_ack_cnt delta = %d,"
+				" expected_ack_cnt = %d\n",
+				actual_ack_cnt_delta, expected_ack_cnt_delta);
+
+#ifdef CONFIG_IWLWIFI_DEBUG
+		IWL_DEBUG_RADIO(priv, "rx_detected_cnt delta = %d\n",
+				priv->delta_statistics.tx.rx_detected_cnt);
+		IWL_DEBUG_RADIO(priv,
+				"ack_or_ba_timeout_collision delta = %d\n",
+				priv->delta_statistics.tx.
+				ack_or_ba_timeout_collision);
+#endif
+		IWL_DEBUG_RADIO(priv, "agg ba_timeout delta = %d\n",
+				ba_timeout_delta);
+		if (!actual_ack_cnt_delta &&
+		    (ba_timeout_delta >= BA_TIMEOUT_MAX))
+			rc = false;
+	}
+	return rc;
+}
+
 
 /******************************************************************************
  *
diff --git a/drivers/net/wireless/iwlwifi/iwl-rx.c b/drivers/net/wireless/iwlwifi/iwl-rx.c
index 506ccf7..def5042 100644
--- a/drivers/net/wireless/iwlwifi/iwl-rx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-rx.c
@@ -617,61 +617,6 @@ static void iwl_accumulative_statistics(struct iwl_priv *priv,
 
 #define REG_RECALIB_PERIOD (60)
 
-/* the threshold ratio of actual_ack_cnt to expected_ack_cnt in percent */
-#define ACK_CNT_RATIO (50)
-#define BA_TIMEOUT_CNT (5)
-#define BA_TIMEOUT_MAX (16)
-
-/**
- * iwl_good_ack_health - checks for ACK count ratios, BA timeout retries.
- *
- * When the ACK count ratio is 0 and aggregated BA timeout retries exceeding
- * the BA_TIMEOUT_MAX, reload firmware and bring system back to normal
- * operation state.
- */
-bool iwl_good_ack_health(struct iwl_priv *priv,
-				struct iwl_rx_packet *pkt)
-{
-	bool rc = true;
-	int actual_ack_cnt_delta, expected_ack_cnt_delta;
-	int ba_timeout_delta;
-
-	actual_ack_cnt_delta =
-		le32_to_cpu(pkt->u.stats.tx.actual_ack_cnt) -
-		le32_to_cpu(priv->statistics.tx.actual_ack_cnt);
-	expected_ack_cnt_delta =
-		le32_to_cpu(pkt->u.stats.tx.expected_ack_cnt) -
-		le32_to_cpu(priv->statistics.tx.expected_ack_cnt);
-	ba_timeout_delta =
-		le32_to_cpu(pkt->u.stats.tx.agg.ba_timeout) -
-		le32_to_cpu(priv->statistics.tx.agg.ba_timeout);
-	if ((priv->_agn.agg_tids_count > 0) &&
-	    (expected_ack_cnt_delta > 0) &&
-	    (((actual_ack_cnt_delta * 100) / expected_ack_cnt_delta)
-		< ACK_CNT_RATIO) &&
-	    (ba_timeout_delta > BA_TIMEOUT_CNT)) {
-		IWL_DEBUG_RADIO(priv, "actual_ack_cnt delta = %d,"
-				" expected_ack_cnt = %d\n",
-				actual_ack_cnt_delta, expected_ack_cnt_delta);
-
-#ifdef CONFIG_IWLWIFI_DEBUG
-		IWL_DEBUG_RADIO(priv, "rx_detected_cnt delta = %d\n",
-				priv->delta_statistics.tx.rx_detected_cnt);
-		IWL_DEBUG_RADIO(priv,
-				"ack_or_ba_timeout_collision delta = %d\n",
-				priv->delta_statistics.tx.
-				ack_or_ba_timeout_collision);
-#endif
-		IWL_DEBUG_RADIO(priv, "agg ba_timeout delta = %d\n",
-				ba_timeout_delta);
-		if (!actual_ack_cnt_delta &&
-		    (ba_timeout_delta >= BA_TIMEOUT_MAX))
-			rc = false;
-	}
-	return rc;
-}
-EXPORT_SYMBOL(iwl_good_ack_health);
-
 /**
  * iwl_good_plcp_health - checks for plcp error.
  *
-- 
1.7.0.1


iwlwifi-move-plcp-check-to-separated-function.patch:
 iwl-1000.c |    1 +
 iwl-4965.c |    1 +
 iwl-5000.c |    2 ++
 iwl-6000.c |    2 ++
 iwl-core.h |    5 +++++
 iwl-rx.c   |   59 ++++++++++++++++++++++++++++++++++++-----------------------
 6 files changed, 47 insertions(+), 23 deletions(-)

--- NEW FILE iwlwifi-move-plcp-check-to-separated-function.patch ---
>From b3786de4e1033b00d522a5c457a3ea9f8376d0d0 Mon Sep 17 00:00:00 2001
From: Wey-Yi Guy <wey-yi.w.guy at intel.com>
Date: Thu, 4 Mar 2010 13:38:58 -0800
Subject: [PATCH] iwlwifi: move plcp check to separated function

Move the plcp error checking into stand alone function and pointed by ops
to accommodate devices not needing this recovery.

Signed-off-by: Trieu 'Andrew' Nguyen <trieux.t.nguyen at intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy at intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre at intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-1000.c |    1 +
 drivers/net/wireless/iwlwifi/iwl-4965.c |    1 +
 drivers/net/wireless/iwlwifi/iwl-5000.c |    2 +
 drivers/net/wireless/iwlwifi/iwl-6000.c |    2 +
 drivers/net/wireless/iwlwifi/iwl-core.h |    5 +++
 drivers/net/wireless/iwlwifi/iwl-rx.c   |   58 +++++++++++++++++++------------
 6 files changed, 47 insertions(+), 22 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-1000.c b/drivers/net/wireless/iwlwifi/iwl-1000.c
index 89dc401..2597574 100644
--- a/drivers/net/wireless/iwlwifi/iwl-1000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-1000.c
@@ -212,6 +212,7 @@ static struct iwl_lib_ops iwl1000_lib = {
 	 },
 	.add_bcast_station = iwl_add_bcast_station,
 	.recover_from_tx_stall = iwl_bg_monitor_recover,
+	.recover_from_statistics = iwl_recover_from_statistics,
 };
 
 static const struct iwl_ops iwl1000_ops = {
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c
index aa49a6e..6dd4328 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965.c
+++ b/drivers/net/wireless/iwlwifi/iwl-4965.c
@@ -2217,6 +2217,7 @@ static struct iwl_lib_ops iwl4965_lib = {
 		.set_ct_kill = iwl4965_set_ct_threshold,
 	},
 	.add_bcast_station = iwl_add_bcast_station,
+	.recover_from_statistics = iwl_recover_from_statistics,
 };
 
 static const struct iwl_ops iwl4965_ops = {
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c
index d05fad4..0c2469c 100644
--- a/drivers/net/wireless/iwlwifi/iwl-5000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-5000.c
@@ -1501,6 +1501,7 @@ struct iwl_lib_ops iwl5000_lib = {
 	 },
 	.add_bcast_station = iwl_add_bcast_station,
 	.recover_from_tx_stall = iwl_bg_monitor_recover,
+	.recover_from_statistics = iwl_recover_from_statistics,
 };
 
 static struct iwl_lib_ops iwl5150_lib = {
@@ -1556,6 +1557,7 @@ static struct iwl_lib_ops iwl5150_lib = {
 	 },
 	.add_bcast_station = iwl_add_bcast_station,
 	.recover_from_tx_stall = iwl_bg_monitor_recover,
+	.recover_from_statistics = iwl_recover_from_statistics,
 };
 
 static const struct iwl_ops iwl5000_ops = {
diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c
index 0c965cd..189a8ce 100644
--- a/drivers/net/wireless/iwlwifi/iwl-6000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-6000.c
@@ -278,6 +278,7 @@ static struct iwl_lib_ops iwl6000_lib = {
 	 },
 	.add_bcast_station = iwl_add_bcast_station,
 	.recover_from_tx_stall = iwl_bg_monitor_recover,
+	.recover_from_statistics = iwl_recover_from_statistics,
 };
 
 static const struct iwl_ops iwl6000_ops = {
@@ -344,6 +345,7 @@ static struct iwl_lib_ops iwl6050_lib = {
 	 },
 	.add_bcast_station = iwl_add_bcast_station,
 	.recover_from_tx_stall = iwl_bg_monitor_recover,
+	.recover_from_statistics = iwl_recover_from_statistics,
 };
 
 static const struct iwl_ops iwl6050_ops = {
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h
index 9076576..d67048e 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.h
+++ b/drivers/net/wireless/iwlwifi/iwl-core.h
@@ -193,6 +193,9 @@ struct iwl_lib_ops {
 	void (*add_bcast_station)(struct iwl_priv *priv);
 	/* recover from tx queue stall */
 	void (*recover_from_tx_stall)(unsigned long data);
+	/* recover from errors showed in statistics */
+	void (*recover_from_statistics)(struct iwl_priv *priv,
+					struct iwl_rx_packet *pkt);
 };
 
 struct iwl_led_ops {
@@ -435,6 +438,8 @@ void iwl_rx_missed_beacon_notif(struct iwl_priv *priv,
 			       struct iwl_rx_mem_buffer *rxb);
 void iwl_rx_spectrum_measure_notif(struct iwl_priv *priv,
 					  struct iwl_rx_mem_buffer *rxb);
+void iwl_recover_from_statistics(struct iwl_priv *priv,
+				 struct iwl_rx_packet *pkt);
 void iwl_rx_statistics(struct iwl_priv *priv,
 			      struct iwl_rx_mem_buffer *rxb);
 void iwl_reply_statistics(struct iwl_priv *priv,
diff --git a/drivers/net/wireless/iwlwifi/iwl-rx.c b/drivers/net/wireless/iwlwifi/iwl-rx.c
index e5eb339..fabc52f 100644
--- a/drivers/net/wireless/iwlwifi/iwl-rx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-rx.c
@@ -618,28 +618,18 @@ static void iwl_accumulative_statistics(struct iwl_priv *priv,
 #define REG_RECALIB_PERIOD (60)
 
 #define PLCP_MSG "plcp_err exceeded %u, %u, %u, %u, %u, %d, %u mSecs\n"
-void iwl_rx_statistics(struct iwl_priv *priv,
-			      struct iwl_rx_mem_buffer *rxb)
+/*
+ * This function checks for plcp error.
+ * - When the plcp error is exceeding the thresholds, it will reset the radio
+ * to improve the throughput.
+ */
+void iwl_recover_from_statistics(struct iwl_priv *priv,
+				   struct iwl_rx_packet *pkt)
 {
-	int change;
-	struct iwl_rx_packet *pkt = rxb_addr(rxb);
 	int combined_plcp_delta;
 	unsigned int plcp_msec;
 	unsigned long plcp_received_jiffies;
 
-	IWL_DEBUG_RX(priv, "Statistics notification received (%d vs %d).\n",
-		     (int)sizeof(priv->statistics),
-		     le32_to_cpu(pkt->len_n_flags) & FH_RSCSR_FRAME_SIZE_MSK);
-
-	change = ((priv->statistics.general.temperature !=
-		   pkt->u.stats.general.temperature) ||
-		  ((priv->statistics.flag &
-		    STATISTICS_REPLY_FLG_HT40_MODE_MSK) !=
-		   (pkt->u.stats.flag & STATISTICS_REPLY_FLG_HT40_MODE_MSK)));
-
-#ifdef CONFIG_IWLWIFI_DEBUG
-	iwl_accumulative_statistics(priv, (__le32 *)&pkt->u.stats);
-#endif
 	/*
 	 * check for plcp_err and trigger radio reset if it exceeds
 	 * the plcp error threshold plcp_delta.
@@ -660,11 +650,11 @@ void iwl_rx_statistics(struct iwl_priv *priv,
 			le32_to_cpu(priv->statistics.rx.ofdm_ht.plcp_err));
 
 		if ((combined_plcp_delta > 0) &&
-			((combined_plcp_delta * 100) / plcp_msec) >
+		    ((combined_plcp_delta * 100) / plcp_msec) >
 			priv->cfg->plcp_delta_threshold) {
 			/*
-			 * if plcp_err exceed the threshold, the following
-			 * data is printed in csv format:
+			 * if plcp_err exceed the threshold,
+			 * the following data is printed in csv format:
 			 *    Text: plcp_err exceeded %d,
 			 *    Received ofdm.plcp_err,
 			 *    Current ofdm.plcp_err,
@@ -679,9 +669,8 @@ void iwl_rx_statistics(struct iwl_priv *priv,
 				le32_to_cpu(priv->statistics.rx.ofdm.plcp_err),
 				le32_to_cpu(pkt->u.stats.rx.ofdm_ht.plcp_err),
 				le32_to_cpu(
-					priv->statistics.rx.ofdm_ht.plcp_err),
+				  priv->statistics.rx.ofdm_ht.plcp_err),
 				combined_plcp_delta, plcp_msec);
-
 			/*
 			 * Reset the RF radio due to the high plcp
 			 * error rate
@@ -689,6 +678,31 @@ void iwl_rx_statistics(struct iwl_priv *priv,
 			iwl_force_reset(priv, IWL_RF_RESET);
 		}
 	}
+}
+EXPORT_SYMBOL(iwl_recover_from_statistics);
+
+void iwl_rx_statistics(struct iwl_priv *priv,
+			      struct iwl_rx_mem_buffer *rxb)
+{
+	int change;
+	struct iwl_rx_packet *pkt = rxb_addr(rxb);
+
+
+	IWL_DEBUG_RX(priv, "Statistics notification received (%d vs %d).\n",
+		     (int)sizeof(priv->statistics),
+		     le32_to_cpu(pkt->len_n_flags) & FH_RSCSR_FRAME_SIZE_MSK);
+
+	change = ((priv->statistics.general.temperature !=
+		   pkt->u.stats.general.temperature) ||
+		  ((priv->statistics.flag &
+		    STATISTICS_REPLY_FLG_HT40_MODE_MSK) !=
+		   (pkt->u.stats.flag & STATISTICS_REPLY_FLG_HT40_MODE_MSK)));
+
+#ifdef CONFIG_IWLWIFI_DEBUG
+	iwl_accumulative_statistics(priv, (__le32 *)&pkt->u.stats);
+#endif
+	if (priv->cfg->ops->lib->recover_from_statistics)
+		priv->cfg->ops->lib->recover_from_statistics(priv, pkt);
 
 	memcpy(&priv->statistics, &pkt->u.stats, sizeof(priv->statistics));
 
-- 
1.7.0.1


linux-2.6-cantiga-iommu-gfx.patch:
 intel-iommu.c |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

Index: linux-2.6-cantiga-iommu-gfx.patch
===================================================================
RCS file: linux-2.6-cantiga-iommu-gfx.patch
diff -N linux-2.6-cantiga-iommu-gfx.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ linux-2.6-cantiga-iommu-gfx.patch	9 Jul 2010 09:09:21 -0000	1.4
@@ -0,0 +1,26 @@
+diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c
+index 4173125..baa32a0 100644
+--- a/drivers/pci/intel-iommu.c
++++ b/drivers/pci/intel-iommu.c
+@@ -340,7 +340,7 @@ int dmar_disabled = 0;
+ int dmar_disabled = 1;
+ #endif /*CONFIG_DMAR_DEFAULT_ON*/
+ 
+-static int __initdata dmar_map_gfx = 1;
++static int dmar_map_gfx = 1;
+ static int dmar_forcedac;
+ static int intel_iommu_strict;
+ 
+@@ -3728,6 +3728,12 @@ static void __devinit quirk_iommu_rwbf(struct pci_dev *dev)
+ 	 */
+ 	printk(KERN_INFO "DMAR: Forcing write-buffer flush capability\n");
+ 	rwbf_quirk = 1;
++
++	/* https://bugzilla.redhat.com/show_bug.cgi?id=538163 */
++	if (dev->revision == 0x07) {
++		printk(KERN_INFO "DMAR: Disabling IOMMU for graphics on this chipset\n");
++		dmar_map_gfx = 0;
++	}
+ }
+ 
+ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2a40, quirk_iommu_rwbf);


--- NEW FILE linux-2.6.34.tar.bz2.sign ---
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: See http://www.kernel.org/signature.html for info

iD4DBQBL8GccyGugalF9Dw4RAt1YAJYpdBiqO1OpraKWSBMEGT85RxinAJ0UuyF0
RnoWraU4NagngeCNAE5Fbg==
=5/kc
-----END PGP SIGNATURE-----


--- NEW FILE patch-2.6.34.1.bz2.sign ---
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: See http://www.kernel.org/signature.html for info

iD8DBQBMMiZgyGugalF9Dw4RAryGAJ9dOJctuXC02zn8cwTQPqzQJDS9PgCfTmu/
FCKry7tDWdA25YG1xVGeyOg=
=eg5d
-----END PGP SIGNATURE-----

pci-acpi-disable-aspm-if-no-osc.patch:
 pci_root.c |    9 +++++++++
 1 file changed, 9 insertions(+)

--- NEW FILE pci-acpi-disable-aspm-if-no-osc.patch ---
From: Matthew Garrett <mjg at redhat.com>
Date: Tue, 22 Jun 2010 15:25:43 +0000 (-0400)
Subject: ACPI: Disable ASPM if the platform won't provide _OSC control for PCIe
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fjbarnes%2Fpci-2.6.git;a=commitdiff_plain;h=cca74426129c3d33cc606a41539a827d194ba4be

ACPI: Disable ASPM if the platform won't provide _OSC control for PCIe

The PCI SIG documentation for the _OSC OS/firmware handshaking interface
states:

"If the _OSC control method is absent from the scope of a host bridge
device, then the operating system must not enable or attempt to use any
features defined in this section for the hierarchy originated by the host
bridge."

The obvious interpretation of this is that the OS should not attempt to use
PCIe hotplug, PME or AER - however, the specification also notes that an
_OSC method is *required* for PCIe hierarchies, and experimental validation
with An Alternative OS indicates that it doesn't use any PCIe functionality
if the _OSC method is missing. That arguably means we shouldn't be using
MSI or extended config space, but right now our problems seem to be limited
to vendors being surprised when ASPM gets enabled on machines when other
OSs refuse to do so. So, for now, let's just disable ASPM if the _OSC
method doesn't exist or refuses to hand over PCIe capability control.

Acked-by: Rafael J. Wysocki <rjw at sisk.pl>
Signed-off-by: Matthew Garrett <mjg at redhat.com>
Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
---

diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c
index 4eac593..1f67057 100644
--- a/drivers/acpi/pci_root.c
+++ b/drivers/acpi/pci_root.c
@@ -33,6 +33,7 @@
 #include <linux/pm_runtime.h>
 #include <linux/pci.h>
 #include <linux/pci-acpi.h>
+#include <linux/pci-aspm.h>
 #include <linux/acpi.h>
 #include <linux/slab.h>
 #include <acpi/acpi_bus.h>
@@ -543,6 +544,14 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
 	if (flags != base_flags)
 		acpi_pci_osc_support(root, flags);
 
+	status = acpi_pci_osc_control_set(root->device->handle,
+					  OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL);
+
+	if (ACPI_FAILURE(status)) {
+		printk(KERN_INFO "Unable to assume PCIe control: Disabling ASPM\n");
+		pcie_no_aspm();
+	}
+
 	pci_acpi_add_bus_pm_notifier(device, root->bus);
 	if (device->wakeup.flags.run_wake)
 		device_set_run_wake(root->bus->bridge, true);

pci-aspm-dont-enable-too-early.patch:
 aspm.c |   16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

--- NEW FILE pci-aspm-dont-enable-too-early.patch ---
From: Matthew Garrett <mjg at redhat.com>
Date: Wed, 9 Jun 2010 20:05:07 +0000 (-0400)
Subject: PCI: Don't enable aspm before drivers have had a chance to veto it
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fjbarnes%2Fpci-2.6.git;a=commitdiff_plain;h=8f0b08c29f1df91315e48adce04462eb23671099

PCI: Don't enable aspm before drivers have had a chance to veto it

The aspm code will currently set the configured aspm policy before drivers
have had an opportunity to indicate that their hardware doesn't support it.
Unfortunately, putting some hardware in L0 or L1 can result in the hardware
no longer responding to any requests, even after aspm is disabled. It makes
more sense to leave aspm policy at the BIOS defaults at initial setup time,
reconfiguring it after pci_enable_device() is called. This allows the
driver to blacklist individual devices beforehand.

Reviewed-by: Kenji Kaneshige <kaneshige.kenji at jp.fujitsu.com>
Signed-off-by: Matthew Garrett <mjg at redhat.com>
Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
---

diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
index be53d98..7122281 100644
--- a/drivers/pci/pcie/aspm.c
+++ b/drivers/pci/pcie/aspm.c
@@ -588,11 +588,23 @@ void pcie_aspm_init_link_state(struct pci_dev *pdev)
 	 * update through pcie_aspm_cap_init().
 	 */
 	pcie_aspm_cap_init(link, blacklist);
-	pcie_config_aspm_path(link);
 
 	/* Setup initial Clock PM state */
 	pcie_clkpm_cap_init(link, blacklist);
-	pcie_set_clkpm(link, policy_to_clkpm_state(link));
+
+	/*
+	 * At this stage drivers haven't had an opportunity to change the
+	 * link policy setting. Enabling ASPM on broken hardware can cripple
+	 * it even before the driver has had a chance to disable ASPM, so
+	 * default to a safe level right now. If we're enabling ASPM beyond
+	 * the BIOS's expectation, we'll do so once pci_enable_device() is
+	 * called.
+	 */
+	if (aspm_policy != POLICY_POWERSAVE) {
+		pcie_config_aspm_path(link);
+		pcie_set_clkpm(link, policy_to_clkpm_state(link));
+	}
+
 unlock:
 	mutex_unlock(&aspm_lock);
 out:

pci-hush-rom-warning.patch:
 setup-res.c |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

--- NEW FILE pci-hush-rom-warning.patch ---
>From 3da769ea10f0711d6d93fd7f248dcb0636f367eb Mon Sep 17 00:00:00 2001
From: Kyle McMartin <kyle at phobos.i.jkkm.org>
Date: Tue, 30 Mar 2010 00:09:47 -0400
Subject: pci-hush-rom-warning.patch

---
 drivers/pci/setup-res.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c
index 17bed18..9e75a81 100644
--- a/drivers/pci/setup-res.c
+++ b/drivers/pci/setup-res.c
@@ -104,7 +104,12 @@ int pci_claim_resource(struct pci_dev *dev, int resource)
 
 	conflict = request_resource_conflict(root, res);
 	if (conflict) {
-		dev_err(&dev->dev,
+		if (resource == 6) /* KERN_INFO for ROM */
+			dev_info(&dev->dev,
+			"address space collision: %pR conflicts with %s %pR\n",
+			res, conflict->name, conflict);
+		else
+			dev_err(&dev->dev,
 			"address space collision: %pR conflicts with %s %pR\n",
 			res, conflict->name, conflict);
 		return -EBUSY;
-- 
1.7.0.1


quiet-prove_RCU-in-cgroups.patch:
 sched_fair.c |    4 ++++
 softlockup.c |    2 ++
 2 files changed, 6 insertions(+)

--- NEW FILE quiet-prove_RCU-in-cgroups.patch ---
diff --git a/kernel/softlockup.c b/kernel/softlockup.c
index 4b493f6..ada1fcd 100644
--- a/kernel/softlockup.c
+++ b/kernel/softlockup.c
@@ -187,7 +187,9 @@ static int watchdog(void *__bind_cpu)
 {
 	struct sched_param param = { .sched_priority = MAX_RT_PRIO-1 };
 
+	rcu_read_lock();
 	sched_setscheduler(current, SCHED_FIFO, &param);
+	rcu_read_unlock();
 
 	/* initialize timestamp */
 	__touch_softlockup_watchdog();
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c
index 5a5ea2c..47ecc56 100644
--- a/kernel/sched_fair.c
+++ b/kernel/sched_fair.c
@@ -1272,6 +1272,9 @@ static int wake_affine(struct sched_domain *sd, struct task_struct *p, int sync)
 	 * effect of the currently running task from the load
 	 * of the current CPU:
 	 */
+
+	rcu_read_lock();
+
 	if (sync) {
 		tg = task_group(current);
 		weight = current->se.load.weight;
@@ -1298,6 +1301,7 @@ static int wake_affine(struct sched_domain *sd, struct task_struct *p, int sync)
 		100*(this_load + effective_load(tg, this_cpu, weight, weight)) <=
 		imbalance*(load + effective_load(tg, prev_cpu, 0, weight));
 
+	rcu_read_unlock();
 	/*
 	 * If the currently running task will sleep within
 	 * a reasonable amount of time then attract this newly

revert-drm-kms-toggle-poll-around-switcheroo.patch:
 i915/i915_dma.c         |    4 +---
 nouveau/nouveau_state.c |    3 ---
 radeon/radeon_device.c  |    2 --
 3 files changed, 1 insertion(+), 8 deletions(-)

--- NEW FILE revert-drm-kms-toggle-poll-around-switcheroo.patch ---
>From 69b711c0c5e3d9cb3a5b9f741fb4cdc96b5739cb Mon Sep 17 00:00:00 2001
From: Kyle McMartin <kyle at dreadnought.i.jkkm.org>
Subject: Revert "drm/kms: disable/enable poll around switcheroo on/off"

This reverts commit fbf81762e385d3d45acad057b654d56972acf58c, mostly.
---
 drivers/gpu/drm/i915/i915_dma.c         |    4 +---
 drivers/gpu/drm/nouveau/nouveau_state.c |    3 ---
 drivers/gpu/drm/radeon/radeon_device.c  |    2 --

diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index 59a2bf8..2df3286 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1320,14 +1320,12 @@ static void i915_switcheroo_set_state(struct pci_dev *pdev, enum vga_switcheroo_
 	struct drm_device *dev = pci_get_drvdata(pdev);
 	pm_message_t pmm = { .event = PM_EVENT_SUSPEND };
 	if (state == VGA_SWITCHEROO_ON) {
-		printk(KERN_INFO "i915: switched on\n");
+		printk(KERN_INFO "i915: switched off\n");
 		/* i915 resume handler doesn't set to D0 */
 		pci_set_power_state(dev->pdev, PCI_D0);
 		i915_resume(dev);
-		drm_kms_helper_poll_enable(dev);
 	} else {
 		printk(KERN_ERR "i915: switched off\n");
-		drm_kms_helper_poll_disable(dev);
 		i915_suspend(dev, pmm);
 	}
 }
diff --git a/drivers/gpu/drm/nouveau/nouveau_state.c b/drivers/gpu/drm/nouveau/nouveau_state.c
index b02a231..0c28266 100644
--- a/drivers/gpu/drm/nouveau/nouveau_state.c
+++ b/drivers/gpu/drm/nouveau/nouveau_state.c
@@ -376,15 +376,12 @@ out_err:
 static void nouveau_switcheroo_set_state(struct pci_dev *pdev,
 					 enum vga_switcheroo_state state)
 {
-	struct drm_device *dev = pci_get_drvdata(pdev);
 	pm_message_t pmm = { .event = PM_EVENT_SUSPEND };
 	if (state == VGA_SWITCHEROO_ON) {
 		printk(KERN_ERR "VGA switcheroo: switched nouveau on\n");
 		nouveau_pci_resume(pdev);
-		drm_kms_helper_poll_enable(dev);
 	} else {
 		printk(KERN_ERR "VGA switcheroo: switched nouveau off\n");
-		drm_kms_helper_poll_disable(dev);
 		nouveau_pci_suspend(pdev, pmm);
 	}
 }
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
index f10faed..225a9f2 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -546,10 +546,8 @@ static void radeon_switcheroo_set_state(struct pci_dev *pdev, enum vga_switchero
 		/* don't suspend or resume card normally */
 		rdev->powered_down = false;
 		radeon_resume_kms(dev);
-		drm_kms_helper_poll_enable(dev);
 	} else {
 		printk(KERN_INFO "radeon: switched off\n");
-		drm_kms_helper_poll_disable(dev);
 		radeon_suspend_kms(dev, pmm);
 		/* don't suspend or resume card normally */
 		rdev->powered_down = true;

virtqueue-wrappers.patch:
 drivers/block/virtio_blk.c          |    6 ++--
 drivers/char/hw_random/virtio-rng.c |    6 ++--
 drivers/char/virtio_console.c       |   32 ++++++++++++-------------
 drivers/net/virtio_net.c            |   46 ++++++++++++++++++------------------
 drivers/virtio/virtio_balloon.c     |   17 ++++++-------
 drivers/virtio/virtio_ring.c        |   36 ++++++++++++----------------
 include/linux/virtio.h              |   43 ++++++++++++++++-----------------
 net/9p/trans_virtio.c               |    6 ++--
 8 files changed, 93 insertions(+), 99 deletions(-)

--- NEW FILE virtqueue-wrappers.patch ---
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
index e32b24b..83fa09a 100644
--- a/drivers/block/virtio_blk.c
+++ b/drivers/block/virtio_blk.c
@@ -50,7 +50,7 @@ static void blk_done(struct virtqueue *vq)
 	unsigned long flags;
 
 	spin_lock_irqsave(&vblk->lock, flags);
-	while ((vbr = vblk->vq->vq_ops->get_buf(vblk->vq, &len)) != NULL) {
+	while ((vbr = virtqueue_get_buf(vblk->vq, &len)) != NULL) {
 		int error;
 
 		switch (vbr->status) {
@@ -158,7 +158,7 @@ static bool do_req(struct request_queue *q, struct virtio_blk *vblk,
 		}
 	}
 
-	if (vblk->vq->vq_ops->add_buf(vblk->vq, vblk->sg, out, in, vbr) < 0) {
+	if (virtqueue_add_buf(vblk->vq, vblk->sg, out, in, vbr) < 0) {
 		mempool_free(vbr, vblk->pool);
 		return false;
 	}
@@ -187,7 +187,7 @@ static void do_virtblk_request(struct request_queue *q)
 	}
 
 	if (issued)
-		vblk->vq->vq_ops->kick(vblk->vq);
+		virtqueue_kick(vblk->vq);
 }
 
 static void virtblk_prepare_flush(struct request_queue *q, struct request *req)
diff --git a/drivers/char/hw_random/virtio-rng.c b/drivers/char/hw_random/virtio-rng.c
index 64fe0a7..75f1cbd 100644
--- a/drivers/char/hw_random/virtio-rng.c
+++ b/drivers/char/hw_random/virtio-rng.c
@@ -32,7 +32,7 @@ static bool busy;
 static void random_recv_done(struct virtqueue *vq)
 {
 	/* We can get spurious callbacks, e.g. shared IRQs + virtio_pci. */
-	if (!vq->vq_ops->get_buf(vq, &data_avail))
+	if (!virtqueue_get_buf(vq, &data_avail))
 		return;
 
 	complete(&have_data);
@@ -46,10 +46,10 @@ static void register_buffer(u8 *buf, size_t size)
 	sg_init_one(&sg, buf, size);
 
 	/* There should always be room for one buffer. */
-	if (vq->vq_ops->add_buf(vq, &sg, 0, 1, buf) < 0)
+	if (virtqueue_add_buf(vq, &sg, 0, 1, buf) < 0)
 		BUG();
 
-	vq->vq_ops->kick(vq);
+	virtqueue_kick(vq);
 }
 
 static int virtio_read(struct hwrng *rng, void *buf, size_t size, bool wait)
diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
index 196428c..48ce834 100644
--- a/drivers/char/virtio_console.c
+++ b/drivers/char/virtio_console.c
@@ -328,7 +328,7 @@ static void *get_inbuf(struct port *port)
 	unsigned int len;
 
 	vq = port->in_vq;
-	buf = vq->vq_ops->get_buf(vq, &len);
+	buf = virtqueue_get_buf(vq, &len);
 	if (buf) {
 		buf->len = len;
 		buf->offset = 0;
@@ -349,8 +349,8 @@ static int add_inbuf(struct virtqueue *vq, struct port_buffer *buf)
 
 	sg_init_one(sg, buf->buf, buf->size);
 
-	ret = vq->vq_ops->add_buf(vq, sg, 0, 1, buf);
-	vq->vq_ops->kick(vq);
+	ret = virtqueue_add_buf(vq, sg, 0, 1, buf);
+	virtqueue_kick(vq);
 	return ret;
 }
 
@@ -366,7 +366,7 @@ static void discard_port_data(struct port *port)
 	if (port->inbuf)
 		buf = port->inbuf;
 	else
-		buf = vq->vq_ops->get_buf(vq, &len);
+		buf = virtqueue_get_buf(vq, &len);
 
 	ret = 0;
 	while (buf) {
@@ -374,7 +374,7 @@ static void discard_port_data(struct port *port)
 			ret++;
 			free_buf(buf);
 		}
-		buf = vq->vq_ops->get_buf(vq, &len);
+		buf = virtqueue_get_buf(vq, &len);
 	}
 	port->inbuf = NULL;
 	if (ret)
@@ -421,9 +421,9 @@ static ssize_t send_control_msg(struct port *port, unsigned int event,
 	vq = port->portdev->c_ovq;
 
 	sg_init_one(sg, &cpkt, sizeof(cpkt));
-	if (vq->vq_ops->add_buf(vq, sg, 1, 0, &cpkt) >= 0) {
-		vq->vq_ops->kick(vq);
-		while (!vq->vq_ops->get_buf(vq, &len))
+	if (virtqueue_add_buf(vq, sg, 1, 0, &cpkt) >= 0) {
+		virtqueue_kick(vq);
+		while (!virtqueue_get_buf(vq, &len))
 			cpu_relax();
 	}
 	return 0;
@@ -439,10 +439,10 @@ static ssize_t send_buf(struct port *port, void *in_buf, size_t in_count)
 	out_vq = port->out_vq;
 
 	sg_init_one(sg, in_buf, in_count);
-	ret = out_vq->vq_ops->add_buf(out_vq, sg, 1, 0, in_buf);
+	ret = virtqueue_add_buf(out_vq, sg, 1, 0, in_buf);
 
 	/* Tell Host to go! */
-	out_vq->vq_ops->kick(out_vq);
+	virtqueue_kick(out_vq);
 
 	if (ret < 0) {
 		in_count = 0;
@@ -450,7 +450,7 @@ static ssize_t send_buf(struct port *port, void *in_buf, size_t in_count)
 	}
 
 	/* Wait till the host acknowledges it pushed out the data we sent. */
-	while (!out_vq->vq_ops->get_buf(out_vq, &len))
+	while (!virtqueue_get_buf(out_vq, &len))
 		cpu_relax();
 fail:
 	/* We're expected to return the amount of data we wrote */
@@ -901,7 +901,7 @@ static int remove_port(struct port *port)
 	discard_port_data(port);
 
 	/* Remove buffers we queued up for the Host to send us data in. */
-	while ((buf = port->in_vq->vq_ops->detach_unused_buf(port->in_vq)))
+	while ((buf = virtqueue_detach_unused_buf(port->in_vq)))
 		free_buf(buf);
 
 	kfree(port->name);
@@ -1030,7 +1030,7 @@ static void control_work_handler(struct work_struct *work)
 	vq = portdev->c_ivq;
 
 	spin_lock(&portdev->cvq_lock);
-	while ((buf = vq->vq_ops->get_buf(vq, &len))) {
+	while ((buf = virtqueue_get_buf(vq, &len))) {
 		spin_unlock(&portdev->cvq_lock);
 
 		buf->len = len;
@@ -1224,7 +1224,7 @@ static int add_port(struct ports_device *portdev, u32 id)
 	return 0;
 
 free_inbufs:
-	while ((buf = port->in_vq->vq_ops->detach_unused_buf(port->in_vq)))
+	while ((buf = virtqueue_detach_unused_buf(port->in_vq)))
 		free_buf(buf);
 free_device:
 	device_destroy(pdrvdata.class, port->dev->devt);
@@ -1536,10 +1536,10 @@ static void virtcons_remove(struct virtio_device *vdev)
 
 	unregister_chrdev(portdev->chr_major, "virtio-portsdev");
 
-	while ((buf = portdev->c_ivq->vq_ops->get_buf(portdev->c_ivq, &len)))
+	while ((buf = virtqueue_get_buf(portdev->c_ivq, &len)))
 		free_buf(buf);
 
-	while ((buf = portdev->c_ivq->vq_ops->detach_unused_buf(portdev->c_ivq)))
+	while ((buf = virtqueue_detach_unused_buf(portdev->c_ivq)))
 		free_buf(buf);
 
 	vdev->config->del_vqs(vdev);
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index b0577dd..91738d8 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -119,7 +119,7 @@ static void skb_xmit_done(struct virtqueue *svq)
 	struct virtnet_info *vi = svq->vdev->priv;
 
 	/* Suppress further interrupts. */
-	svq->vq_ops->disable_cb(svq);
+	virtqueue_disable_cb(svq);
 
 	/* We were probably waiting for more output buffers. */
 	netif_wake_queue(vi->dev);
@@ -207,7 +207,7 @@ static int receive_mergeable(struct virtnet_info *vi, struct sk_buff *skb)
 			return -EINVAL;
 		}
 
-		page = vi->rvq->vq_ops->get_buf(vi->rvq, &len);
+		page = virtqueue_get_buf(vi->rvq, &len);
 		if (!page) {
 			pr_debug("%s: rx error: %d buffers missing\n",
 				 skb->dev->name, hdr->mhdr.num_buffers);
@@ -339,7 +339,7 @@ static int add_recvbuf_small(struct virtnet_info *vi, gfp_t gfp)
 
 	skb_to_sgvec(skb, sg + 1, 0, skb->len);
 
-	err = vi->rvq->vq_ops->add_buf(vi->rvq, sg, 0, 2, skb);
+	err = virtqueue_add_buf(vi->rvq, sg, 0, 2, skb);
 	if (err < 0)
 		dev_kfree_skb(skb);
 
@@ -386,7 +386,7 @@ static int add_recvbuf_big(struct virtnet_info *vi, gfp_t gfp)
 
 	/* chain first in list head */
 	first->private = (unsigned long)list;
-	err = vi->rvq->vq_ops->add_buf(vi->rvq, sg, 0, MAX_SKB_FRAGS + 2,
+	err = virtqueue_add_buf(vi->rvq, sg, 0, MAX_SKB_FRAGS + 2,
 				       first);
 	if (err < 0)
 		give_pages(vi, first);
@@ -406,7 +406,7 @@ static int add_recvbuf_mergeable(struct virtnet_info *vi, gfp_t gfp)
 
 	sg_init_one(&sg, page_address(page), PAGE_SIZE);
 
-	err = vi->rvq->vq_ops->add_buf(vi->rvq, &sg, 0, 1, page);
+	err = virtqueue_add_buf(vi->rvq, &sg, 0, 1, page);
 	if (err < 0)
 		give_pages(vi, page);
 
@@ -435,7 +435,7 @@ static bool try_fill_recv(struct virtnet_info *vi, gfp_t gfp)
 	} while (err > 0);
 	if (unlikely(vi->num > vi->max))
 		vi->max = vi->num;
-	vi->rvq->vq_ops->kick(vi->rvq);
+	virtqueue_kick(vi->rvq);
 	return !oom;
 }
 
@@ -444,7 +444,7 @@ static void skb_recv_done(struct virtqueue *rvq)
 	struct virtnet_info *vi = rvq->vdev->priv;
 	/* Schedule NAPI, Suppress further interrupts if successful. */
 	if (napi_schedule_prep(&vi->napi)) {
-		rvq->vq_ops->disable_cb(rvq);
+		virtqueue_disable_cb(rvq);
 		__napi_schedule(&vi->napi);
 	}
 }
@@ -473,7 +473,7 @@ static int virtnet_poll(struct napi_struct *napi, int budget)
 
 again:
 	while (received < budget &&
-	       (buf = vi->rvq->vq_ops->get_buf(vi->rvq, &len)) != NULL) {
+	       (buf = virtqueue_get_buf(vi->rvq, &len)) != NULL) {
 		receive_buf(vi->dev, buf, len);
 		--vi->num;
 		received++;
@@ -487,9 +487,9 @@ again:
 	/* Out of packets? */
 	if (received < budget) {
 		napi_complete(napi);
-		if (unlikely(!vi->rvq->vq_ops->enable_cb(vi->rvq)) &&
+		if (unlikely(!virtqueue_enable_cb(vi->rvq)) &&
 		    napi_schedule_prep(napi)) {
-			vi->rvq->vq_ops->disable_cb(vi->rvq);
+			virtqueue_disable_cb(vi->rvq);
 			__napi_schedule(napi);
 			goto again;
 		}
@@ -503,7 +503,7 @@ static unsigned int free_old_xmit_skbs(struct virtnet_info *vi)
 	struct sk_buff *skb;
 	unsigned int len, tot_sgs = 0;
 
-	while ((skb = vi->svq->vq_ops->get_buf(vi->svq, &len)) != NULL) {
+	while ((skb = virtqueue_get_buf(vi->svq, &len)) != NULL) {
 		pr_debug("Sent skb %p\n", skb);
 		vi->dev->stats.tx_bytes += skb->len;
 		vi->dev->stats.tx_packets++;
@@ -559,7 +559,7 @@ static int xmit_skb(struct virtnet_info *vi, struct sk_buff *skb)
 		sg_set_buf(sg, &hdr->hdr, sizeof hdr->hdr);
 
 	hdr->num_sg = skb_to_sgvec(skb, sg+1, 0, skb->len) + 1;
-	return vi->svq->vq_ops->add_buf(vi->svq, sg, hdr->num_sg, 0, skb);
+	return virtqueue_add_buf(vi->svq, sg, hdr->num_sg, 0, skb);
 }
 
 static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev)
@@ -578,14 +578,14 @@ again:
 	if (unlikely(capacity < 0)) {
 		netif_stop_queue(dev);
 		dev_warn(&dev->dev, "Unexpected full queue\n");
-		if (unlikely(!vi->svq->vq_ops->enable_cb(vi->svq))) {
-			vi->svq->vq_ops->disable_cb(vi->svq);
+		if (unlikely(!virtqueue_enable_cb(vi->svq))) {
+			virtqueue_disable_cb(vi->svq);
 			netif_start_queue(dev);
 			goto again;
 		}
 		return NETDEV_TX_BUSY;
 	}
-	vi->svq->vq_ops->kick(vi->svq);
+	virtqueue_kick(vi->svq);
 
 	/* Don't wait up for transmitted skbs to be freed. */
 	skb_orphan(skb);
@@ -595,12 +595,12 @@ again:
 	 * before it gets out of hand.  Naturally, this wastes entries. */
 	if (capacity < 2+MAX_SKB_FRAGS) {
 		netif_stop_queue(dev);
-		if (unlikely(!vi->svq->vq_ops->enable_cb(vi->svq))) {
+		if (unlikely(!virtqueue_enable_cb(vi->svq))) {
 			/* More just got used, free them then recheck. */
 			capacity += free_old_xmit_skbs(vi);
 			if (capacity >= 2+MAX_SKB_FRAGS) {
 				netif_start_queue(dev);
-				vi->svq->vq_ops->disable_cb(vi->svq);
+				virtqueue_disable_cb(vi->svq);
 			}
 		}
 	}
@@ -645,7 +645,7 @@ static int virtnet_open(struct net_device *dev)
 	 * now.  virtnet_poll wants re-enable the queue, so we disable here.
 	 * We synchronize against interrupts via NAPI_STATE_SCHED */
 	if (napi_schedule_prep(&vi->napi)) {
-		vi->rvq->vq_ops->disable_cb(vi->rvq);
+		virtqueue_disable_cb(vi->rvq);
 		__napi_schedule(&vi->napi);
 	}
 	return 0;
@@ -682,15 +682,15 @@ static bool virtnet_send_command(struct virtnet_info *vi, u8 class, u8 cmd,
 		sg_set_buf(&sg[i + 1], sg_virt(s), s->length);
 	sg_set_buf(&sg[out + in - 1], &status, sizeof(status));
 
-	BUG_ON(vi->cvq->vq_ops->add_buf(vi->cvq, sg, out, in, vi) < 0);
+	BUG_ON(virtqueue_add_buf(vi->cvq, sg, out, in, vi) < 0);
 
-	vi->cvq->vq_ops->kick(vi->cvq);
+	virtqueue_kick(vi->cvq);
 
 	/*
 	 * Spin for a response, the kick causes an ioport write, trapping
 	 * into the hypervisor, so the request should be handled immediately.
 	 */
-	while (!vi->cvq->vq_ops->get_buf(vi->cvq, &tmp))
+	while (!virtqueue_get_buf(vi->cvq, &tmp))
 		cpu_relax();
 
 	return status == VIRTIO_NET_OK;
@@ -1006,13 +1006,13 @@ static void free_unused_bufs(struct virtnet_info *vi)
 {
 	void *buf;
 	while (1) {
-		buf = vi->svq->vq_ops->detach_unused_buf(vi->svq);
+		buf = virtqueue_detach_unused_buf(vi->svq);
 		if (!buf)
 			break;
 		dev_kfree_skb(buf);
 	}
 	while (1) {
-		buf = vi->rvq->vq_ops->detach_unused_buf(vi->rvq);
+		buf = virtqueue_detach_unused_buf(vi->rvq);
 		if (!buf)
 			break;
 		if (vi->mergeable_rx_bufs || vi->big_packets)
diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
index bfec7c2..0f1da45 100644
--- a/drivers/virtio/virtio_balloon.c
+++ b/drivers/virtio/virtio_balloon.c
@@ -75,7 +75,7 @@ static void balloon_ack(struct virtqueue *vq)
 	struct virtio_balloon *vb;
 	unsigned int len;
 
-	vb = vq->vq_ops->get_buf(vq, &len);
+	vb = virtqueue_get_buf(vq, &len);
 	if (vb)
 		complete(&vb->acked);
 }
@@ -89,9 +89,9 @@ static void tell_host(struct virtio_balloon *vb, struct virtqueue *vq)
 	init_completion(&vb->acked);
 
 	/* We should always be able to add one buffer to an empty queue. */
-	if (vq->vq_ops->add_buf(vq, &sg, 1, 0, vb) < 0)
+	if (virtqueue_add_buf(vq, &sg, 1, 0, vb) < 0)
 		BUG();
-	vq->vq_ops->kick(vq);
+	virtqueue_kick(vq);
 
 	/* When host has read buffer, this completes via balloon_ack */
 	wait_for_completion(&vb->acked);
@@ -204,7 +204,7 @@ static void stats_request(struct virtqueue *vq)
 	struct virtio_balloon *vb;
 	unsigned int len;
 
-	vb = vq->vq_ops->get_buf(vq, &len);
+	vb = virtqueue_get_buf(vq, &len);
 	if (!vb)
 		return;
 	vb->need_stats_update = 1;
@@ -221,9 +221,9 @@ static void stats_handle_request(struct virtio_balloon *vb)
 
 	vq = vb->stats_vq;
 	sg_init_one(&sg, vb->stats, sizeof(vb->stats));
-	if (vq->vq_ops->add_buf(vq, &sg, 1, 0, vb) < 0)
+	if (virtqueue_add_buf(vq, &sg, 1, 0, vb) < 0)
 		BUG();
-	vq->vq_ops->kick(vq);
+	virtqueue_kick(vq);
 }
 
 static void virtballoon_changed(struct virtio_device *vdev)
@@ -314,10 +314,9 @@ static int virtballoon_probe(struct virtio_device *vdev)
 		 * use it to signal us later.
 		 */
 		sg_init_one(&sg, vb->stats, sizeof vb->stats);
-		if (vb->stats_vq->vq_ops->add_buf(vb->stats_vq,
-						  &sg, 1, 0, vb) < 0)
+		if (virtqueue_add_buf(vb->stats_vq, &sg, 1, 0, vb) < 0)
 			BUG();
-		vb->stats_vq->vq_ops->kick(vb->stats_vq);
+		virtqueue_kick(vb->stats_vq);
 	}
 
 	vb->thread = kthread_run(balloon, vb, "vballoon");
diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
index 0f90634..0717b5b 100644
--- a/drivers/virtio/virtio_ring.c
+++ b/drivers/virtio/virtio_ring.c
@@ -155,11 +155,11 @@ static int vring_add_indirect(struct vring_virtqueue *vq,
 	return head;
 }
 
-static int vring_add_buf(struct virtqueue *_vq,
-			 struct scatterlist sg[],
-			 unsigned int out,
-			 unsigned int in,
-			 void *data)
+int virtqueue_add_buf(struct virtqueue *_vq,
+		  struct scatterlist sg[],
+		  unsigned int out,
+		  unsigned int in,
+		  void *data)
 {
 	struct vring_virtqueue *vq = to_vvq(_vq);
 	unsigned int i, avail, head, uninitialized_var(prev);
@@ -232,8 +232,9 @@ add_head:
 		return vq->num_free ? vq->vring.num : 0;
 	return vq->num_free;
 }
+EXPORT_SYMBOL_GPL(virtqueue_add_buf);
 
-static void vring_kick(struct virtqueue *_vq)
+void virtqueue_kick(struct virtqueue *_vq)
 {
 	struct vring_virtqueue *vq = to_vvq(_vq);
 	START_USE(vq);
@@ -253,6 +254,7 @@ static void vring_kick(struct virtqueue *_vq)
 
 	END_USE(vq);
 }
+EXPORT_SYMBOL_GPL(virtqueue_kick);
 
 static void detach_buf(struct vring_virtqueue *vq, unsigned int head)
 {
@@ -284,7 +286,7 @@ static inline bool more_used(const struct vring_virtqueue *vq)
 	return vq->last_used_idx != vq->vring.used->idx;
 }
 
-static void *vring_get_buf(struct virtqueue *_vq, unsigned int *len)
+void *virtqueue_get_buf(struct virtqueue *_vq, unsigned int *len)
 {
 	struct vring_virtqueue *vq = to_vvq(_vq);
 	void *ret;
@@ -325,15 +327,17 @@ static void *vring_get_buf(struct virtqueue *_vq, unsigned int *len)
 	END_USE(vq);
 	return ret;
 }
+EXPORT_SYMBOL_GPL(virtqueue_get_buf);
 
-static void vring_disable_cb(struct virtqueue *_vq)
+void virtqueue_disable_cb(struct virtqueue *_vq)
 {
 	struct vring_virtqueue *vq = to_vvq(_vq);
 
 	vq->vring.avail->flags |= VRING_AVAIL_F_NO_INTERRUPT;
 }
+EXPORT_SYMBOL_GPL(virtqueue_disable_cb);
 
-static bool vring_enable_cb(struct virtqueue *_vq)
+bool virtqueue_enable_cb(struct virtqueue *_vq)
 {
 	struct vring_virtqueue *vq = to_vvq(_vq);
 
@@ -351,8 +355,9 @@ static bool vring_enable_cb(struct virtqueue *_vq)
 	END_USE(vq);
 	return true;
 }
+EXPORT_SYMBOL_GPL(virtqueue_enable_cb);
 
-static void *vring_detach_unused_buf(struct virtqueue *_vq)
+void *virtqueue_detach_unused_buf(struct virtqueue *_vq)
 {
 	struct vring_virtqueue *vq = to_vvq(_vq);
 	unsigned int i;
@@ -375,6 +380,7 @@ static void *vring_detach_unused_buf(struct virtqueue *_vq)
 	END_USE(vq);
 	return NULL;
 }
+EXPORT_SYMBOL_GPL(virtqueue_detach_unused_buf);
 
 irqreturn_t vring_interrupt(int irq, void *_vq)
 {
@@ -396,15 +402,6 @@ irqreturn_t vring_interrupt(int irq, void *_vq)
 }
 EXPORT_SYMBOL_GPL(vring_interrupt);
 
-static struct virtqueue_ops vring_vq_ops = {
-	.add_buf = vring_add_buf,
-	.get_buf = vring_get_buf,
-	.kick = vring_kick,
-	.disable_cb = vring_disable_cb,
-	.enable_cb = vring_enable_cb,
-	.detach_unused_buf = vring_detach_unused_buf,
-};
-
 struct virtqueue *vring_new_virtqueue(unsigned int num,
 				      unsigned int vring_align,
 				      struct virtio_device *vdev,
@@ -429,7 +426,6 @@ struct virtqueue *vring_new_virtqueue(unsigned int num,
 	vring_init(&vq->vring, num, pages, vring_align);
 	vq->vq.callback = callback;
 	vq->vq.vdev = vdev;
-	vq->vq.vq_ops = &vring_vq_ops;
 	vq->vq.name = name;
 	vq->notify = notify;
 	vq->broken = false;
diff --git a/include/linux/virtio.h b/include/linux/virtio.h
index 40d1709..5b0fce0 100644
--- a/include/linux/virtio.h
+++ b/include/linux/virtio.h
@@ -14,7 +14,6 @@
  * @callback: the function to call when buffers are consumed (can be NULL).
  * @name: the name of this virtqueue (mainly for debugging)
  * @vdev: the virtio device this queue was created for.
- * @vq_ops: the operations for this virtqueue (see below).
  * @priv: a pointer for the virtqueue implementation to use.
  */
 struct virtqueue {
@@ -22,60 +21,60 @@ struct virtqueue {
 	void (*callback)(struct virtqueue *vq);
 	const char *name;
 	struct virtio_device *vdev;
-	struct virtqueue_ops *vq_ops;
 	void *priv;
 };
 
 /**
- * virtqueue_ops - operations for virtqueue abstraction layer
- * @add_buf: expose buffer to other end
+ * operations for virtqueue
+ * virtqueue_add_buf: expose buffer to other end
  *	vq: the struct virtqueue we're talking about.
  *	sg: the description of the buffer(s).
  *	out_num: the number of sg readable by other side
  *	in_num: the number of sg which are writable (after readable ones)
  *	data: the token identifying the buffer.
  *      Returns remaining capacity of queue (sg segments) or a negative error.
- * @kick: update after add_buf
+ * virtqueue_kick: update after add_buf
  *	vq: the struct virtqueue
  *	After one or more add_buf calls, invoke this to kick the other side.
- * @get_buf: get the next used buffer
+ * virtqueue_get_buf: get the next used buffer
  *	vq: the struct virtqueue we're talking about.
  *	len: the length written into the buffer
  *	Returns NULL or the "data" token handed to add_buf.
- * @disable_cb: disable callbacks
+ * virtqueue_disable_cb: disable callbacks
  *	vq: the struct virtqueue we're talking about.
  *	Note that this is not necessarily synchronous, hence unreliable and only
  *	useful as an optimization.
- * @enable_cb: restart callbacks after disable_cb.
+ * virtqueue_enable_cb: restart callbacks after disable_cb.
  *	vq: the struct virtqueue we're talking about.
  *	This re-enables callbacks; it returns "false" if there are pending
  *	buffers in the queue, to detect a possible race between the driver
  *	checking for more work, and enabling callbacks.
- * @detach_unused_buf: detach first unused buffer
+ * virtqueue_detach_unused_buf: detach first unused buffer
  * 	vq: the struct virtqueue we're talking about.
  * 	Returns NULL or the "data" token handed to add_buf
  *
  * Locking rules are straightforward: the driver is responsible for
  * locking.  No two operations may be invoked simultaneously, with the exception
- * of @disable_cb.
+ * of virtqueue_disable_cb.
  *
  * All operations can be called in any context.
  */
-struct virtqueue_ops {
-	int (*add_buf)(struct virtqueue *vq,
-		       struct scatterlist sg[],
-		       unsigned int out_num,
-		       unsigned int in_num,
-		       void *data);
 
-	void (*kick)(struct virtqueue *vq);
+int virtqueue_add_buf(struct virtqueue *vq,
+		      struct scatterlist sg[],
+		      unsigned int out_num,
+		      unsigned int in_num,
+		      void *data);
 
-	void *(*get_buf)(struct virtqueue *vq, unsigned int *len);
+void virtqueue_kick(struct virtqueue *vq);
 
-	void (*disable_cb)(struct virtqueue *vq);
-	bool (*enable_cb)(struct virtqueue *vq);
-	void *(*detach_unused_buf)(struct virtqueue *vq);
-};
+void *virtqueue_get_buf(struct virtqueue *vq, unsigned int *len);
+
+void virtqueue_disable_cb(struct virtqueue *vq);
+
+bool virtqueue_enable_cb(struct virtqueue *vq);
+
+void *virtqueue_detach_unused_buf(struct virtqueue *vq);
 
 /**
  * virtio_device - representation of a device using virtio
diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c
index 7eb78ec..dcfbe99 100644
--- a/net/9p/trans_virtio.c
+++ b/net/9p/trans_virtio.c
@@ -137,7 +137,7 @@ static void req_done(struct virtqueue *vq)
 
 	P9_DPRINTK(P9_DEBUG_TRANS, ": request done\n");
 
-	while ((rc = chan->vq->vq_ops->get_buf(chan->vq, &len)) != NULL) {
+	while ((rc = virtqueue_get_buf(chan->vq, &len)) != NULL) {
 		P9_DPRINTK(P9_DEBUG_TRANS, ": rc %p\n", rc);
 		P9_DPRINTK(P9_DEBUG_TRANS, ": lookup tag %d\n", rc->tag);
 		req = p9_tag_lookup(chan->client, rc->tag);
@@ -209,13 +209,13 @@ p9_virtio_request(struct p9_client *client, struct p9_req_t *req)
 
 	req->status = REQ_STATUS_SENT;
 
-	if (chan->vq->vq_ops->add_buf(chan->vq, chan->sg, out, in, req->tc) < 0) {
+	if (virtqueue_add_buf(chan->vq, chan->sg, out, in, req->tc) < 0) {
 		P9_DPRINTK(P9_DEBUG_TRANS,
 			"9p debug: virtio rpc add_buf returned failure");
 		return -EIO;
 	}
 
-	chan->vq->vq_ops->kick(chan->vq);
+	virtqueue_kick(chan->vq);
 
 	P9_DPRINTK(P9_DEBUG_TRANS, "9p debug: virtio request kicked\n");
 	return 0;


Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/.cvsignore,v
retrieving revision 1.1180
retrieving revision 1.1181
diff -u -p -r1.1180 -r1.1181
--- .cvsignore	6 Jul 2010 08:17:19 -0000	1.1180
+++ .cvsignore	9 Jul 2010 09:09:09 -0000	1.1181
@@ -3,6 +3,6 @@ clog
 GNUmakefile
 kernel-2.6.*.config
 temp-*
-kernel-2.6.33
-linux-2.6.33.tar.bz2
-patch-2.6.33.6.bz2
+kernel-2.6.34
+linux-2.6.34.tar.bz2
+patch-2.6.34.1.bz2


Index: Makefile
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/Makefile,v
retrieving revision 1.123
retrieving revision 1.124
diff -u -p -r1.123 -r1.124
--- Makefile	18 Jan 2010 23:53:28 -0000	1.123
+++ Makefile	9 Jul 2010 09:09:09 -0000	1.124
@@ -51,6 +51,7 @@ debug:
 	@perl -pi -e 's/# CONFIG_DEBUG_RWSEMS is not set/CONFIG_DEBUG_RWSEMS=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_DEBUG_LOCK_ALLOC is not set/CONFIG_DEBUG_LOCK_ALLOC=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_PROVE_LOCKING is not set/CONFIG_PROVE_LOCKING=y/' config-nodebug
+	@perl -pi -e 's/# CONFIG_PROVE_RCU is not set/CONFIG_PROVE_RCU=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_DEBUG_SPINLOCK is not set/CONFIG_DEBUG_SPINLOCK=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_DEBUG_VM is not set/CONFIG_DEBUG_VM=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_DEBUG_SLEEP_IN_IRQ is not set/CONFIG_DEBUG_SLEEP_IN_IRQ=y/' config-nodebug
@@ -73,6 +74,7 @@ debug:
 	@perl -pi -e 's/# CONFIG_DEBUG_NOTIFIERS is not set/CONFIG_DEBUG_NOTIFIERS=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_DMA_API_DEBUG is not set/CONFIG_DMA_API_DEBUG=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_PM_TEST_SUSPEND is not set/CONFIG_PM_TEST_SUSPEND=y/' config-generic
+	@perl -pi -e 's/# CONFIG_PM_ADVANCED_DEBUG is not set/CONFIG_PM_ADVANCED_DEBUG=y/' config-generic
 	@perl -pi -e 's/# CONFIG_BOOT_TRACER is not set/CONFIG_BOOT_TRACER=y/' config-generic
 	@perl -pi -e 's/# CONFIG_B43_DEBUG is not set/CONFIG_B43_DEBUG=y/' config-generic
 	@perl -pi -e 's/# CONFIG_B43LEGACY_DEBUG is not set/CONFIG_B43LEGACY_DEBUG=y/' config-generic
@@ -84,15 +86,16 @@ debug:
 	@perl -pi -e 's/# CONFIG_EXT4_DEBUG is not set/CONFIG_EXT4_DEBUG=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_DEBUG_PERF_USE_VMALLOC is not set/CONFIG_DEBUG_PERF_USE_VMALLOC=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_JBD2_DEBUG is not set/CONFIG_JBD2_DEBUG=y/' config-nodebug
-	@perl -pi -e 's/# CONFIG_FUNCTION_TRACER is not set/CONFIG_FUNCTION_TRACER=y/' config-nodebug
-	@perl -pi -e 's/# CONFIG_STACK_TRACER is not set/CONFIG_STACK_TRACER=y/' config-nodebug
-	@perl -pi -e 's/# CONFIG_DYNAMIC_FTRACE is not set/CONFIG_DYNAMIC_FTRACE=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_DEBUG_CFQ_IOSCHED is not set/CONFIG_DEBUG_CFQ_IOSCHED=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_DRBD_FAULT_INJECTION is not set/CONFIG_DRBD_FAULT_INJECTION=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_ATH_DEBUG is not set/CONFIG_ATH_DEBUG=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_IWLWIFI_DEVICE_TRACING is not set/CONFIG_IWLWIFI_DEVICE_TRACING=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_WORK is not set/CONFIG_DEBUG_OBJECTS_WORK=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set/CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y/' config-nodebug
+	@perl -pi -e 's/# CONFIG_DMADEVICES_DEBUG is not set/CONFIG_DMADEVICES_DEBUG=y/' config-nodebug
+	@perl -pi -e 's/# CONFIG_DMADEVICES_VDEBUG is not set/CONFIG_DMADEVICES_VDEBUG=y/' config-nodebug
+	@perl -pi -e 's/# CONFIG_CEPH_FS_PRETTYDEBUG is not set/CONFIG_CEPH_FS_PRETTYDEBUG=y/' config-nodebug
+	@perl -pi -e 's/# CONFIG_QUOTA_DEBUG is not set/CONFIG_QUOTA_DEBUG=y/' config-nodebug
 
 	@# just in case we're going from extremedebug -> debug
 	@perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-nodebug
@@ -112,6 +115,7 @@ release:
 	@perl -pi -e 's/CONFIG_DEBUG_RWSEMS=y/# CONFIG_DEBUG_RWSEMS is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_DEBUG_LOCK_ALLOC=y/# CONFIG_DEBUG_LOCK_ALLOC is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_PROVE_LOCKING=y/# CONFIG_PROVE_LOCKING is not set/' config-nodebug
+	@perl -pi -e 's/CONFIG_PROVE_RCU=y/# CONFIG_PROVE_RCU is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_DEBUG_SPINLOCK=y/# CONFIG_DEBUG_SPINLOCK is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_DEBUG_VM=y/# CONFIG_DEBUG_VM is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_DEBUG_SLEEP_IN_IRQ=y/# CONFIG_DEBUG_SLEEP_IN_IRQ is not set/' config-nodebug
@@ -134,6 +138,7 @@ release:
 	@perl -pi -e 's/CONFIG_DEBUG_NOTIFIERS=y/# CONFIG_DEBUG_NOTIFIERS is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_DMA_API_DEBUG=y/# CONFIG_DMA_API_DEBUG is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_PM_TEST_SUSPEND=y/#\ CONFIG_PM_TEST_SUSPEND\ is\ not\ set/' config-generic
+	@perl -pi -e 's/CONFIG_PM_ADVANCED_DEBUG=y/#\ CONFIG_PM_ADVANCED_DEBUG\ is\ not\ set/' config-generic
 	@perl -pi -e 's/CONFIG_BOOT_TRACER=y/#\ CONFIG_BOOT_TRACER\ is\ not\ set/' config-generic
 	@perl -pi -e 's/CONFIG_B43_DEBUG=y/# CONFIG_B43_DEBUG is not set/' config-generic
 	@perl -pi -e 's/CONFIG_B43LEGACY_DEBUG=y/# CONFIG_B43LEGACY_DEBUG is not set/' config-generic
@@ -145,15 +150,16 @@ release:
 	@perl -pi -e 's/CONFIG_EXT4_DEBUG=y/# CONFIG_EXT4_DEBUG is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_DEBUG_PERF_USE_VMALLOC=y/# CONFIG_DEBUG_PERF_USE_VMALLOC is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_JBD2_DEBUG=y/# CONFIG_JBD2_DEBUG is not set/' config-nodebug
-	@perl -pi -e 's/CONFIG_FUNCTION_TRACER=y/# CONFIG_FUNCTION_TRACER is not set/' config-nodebug
-	@perl -pi -e 's/CONFIG_STACK_TRACER=y/# CONFIG_STACK_TRACER is not set/' config-nodebug
-	@perl -pi -e 's/CONFIG_DYNAMIC_FTRACE=y/# CONFIG_DYNAMIC_FTRACE is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_DEBUG_CFQ_IOSCHED=y/# CONFIG_DEBUG_CFQ_IOSCHED is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_DRBD_FAULT_INJECTION=y/# CONFIG_DRBD_FAULT_INJECTION is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_ATH_DEBUG=y/# CONFIG_ATH_DEBUG is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_IWLWIFI_DEVICE_TRACING=y/# CONFIG_IWLWIFI_DEVICE_TRACING is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_WORK=y/# CONFIG_DEBUG_OBJECTS_WORK is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y/# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set/' config-nodebug
+	@perl -pi -e 's/CONFIG_DMADEVICES_DEBUG=y/# CONFIG_DMADEVICES_DEBUG is not set/' config-nodebug
+	@perl -pi -e 's/CONFIG_DMADEVICES_VDEBUG=y/# CONFIG_DMADEVICES_VDEBUG is not set/' config-nodebug
+	@perl -pi -e 's/CONFIG_CEPH_FS_PRETTYDEBUG=y/# CONFIG_CEPH_FS_PRETTYDEBUG is not set/' config-nodebug
+	@perl -pi -e 's/CONFIG_QUOTA_DEBUG=y/# CONFIG_QUOTA_DEBUG is not set/' config-nodebug
 
 	@perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-debug
 	@perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-nodebug


Index: Makefile.config
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/Makefile.config,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -p -r1.75 -r1.76
--- Makefile.config	2 Jun 2010 15:38:20 -0000	1.75
+++ Makefile.config	9 Jul 2010 09:09:10 -0000	1.76
@@ -8,10 +8,11 @@ CONFIGFILES	= \
 	$(CFG)-i686.config $(CFG)-i686-debug.config \
 	$(CFG)-i686-PAE.config $(CFG)-i686-PAEdebug.config \
 	$(CFG)-x86_64.config $(CFG)-x86_64-debug.config \
+	$(CFG)-s390x.config $(CFG)-arm.config \
 	$(CFG)-ppc.config $(CFG)-ppc-smp.config \
-	$(CFG)-sparc64.config $(CFG)-arm.config \
+	$(CFG)-sparc64.config  \
 	$(CFG)-ppc64.config $(CFG)-ppc64-debug.config \
-	$(CFG)-s390x.config $(CFG)-ia64.config
+	$(CFG)-ia64.config
 
 PLATFORMS	= x86 x86_64 powerpc powerpc32 powerpc64 s390x ia64 sparc64
 TEMPFILES	= $(addprefix temp-, $(addsuffix -generic, $(PLATFORMS)))


Index: TODO
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/TODO,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -p -r1.68 -r1.69
--- TODO	13 Jan 2010 02:56:55 -0000	1.68
+++ TODO	9 Jul 2010 09:09:10 -0000	1.69
@@ -1,20 +1,24 @@
-* git-cpufreq.patch
-	Assorted fixes/improvements, especially to the ondemand governor.
-	Will go upstream in 2.6.28
+# Put stuff likely to go upstream (in decreasing likelyhood) at the top.
+#
 
-* linux-2.6-ata-quirk.patch
-	IA64 oddness. Query sent to f-k-l
+* linux-2.6-firewire-git-update.patch
+	perpetual updates from git trees.
+
+* linux-2.6-compile-fixes.patch
+* linux-2.6-hotfixes.patch
+	Empty
 
 * linux-2.6-build-nonintconfig.patch
 * linux-2.6-debug-nmi-timeout.patch
 * linux-2.6-debug-spinlock-taint.patch
 * linux-2.6-debug-taint-vm.patch
 * linux-2.6-debug-vm-would-have-oomkilled.patch
-	Push for 2.6.29
+	TODO: Push upstream
 
-* linux-2.6-compile-fixes.patch
-* linux-2.6-hotfixes.patch
-	Empty
+* linux-2.6-acpi-video-dos.patch
+* linux-2.6-defaults-acpi-video.patch
+	Fedora policy decisions
+	Turn into CONFIG_ options and upstream ?
 
 * linux-2.6-crash-driver.patch
 	Unlikely to go upstream.
@@ -29,43 +33,25 @@
 * linux-2.6-utrace.patch
 	utrace
 
-* linux-2.6-acpi-video-dos.patch
-* linux-2.6-defaults-acpi-video.patch
-	Fedora policy decisions
-	Turn into CONFIG_ options and upstream ?
-
 * linux-2.6-defaults-pci_no_msi.patch
-* linux-2.6-input-kill-stupid-messages.patch
 	Fedora local choices uninteresting to upstream
 
-* linux-2.6-e1000-ich9.patch
-* linux-2.6-firewire-git-update.patch
-	Should go upstream for .29 ?
-
-* linux-2.6-g5-therm-shutdown.patch
-* linux-2.6-imac-transparent-bridge.patch
-* linux-2.6-ps3-storage-alias.patch
-* linux-2.6-vio-modalias.patch
-	ppc bits. dwmw2.
+* linux-2.6-input-kill-stupid-messages.patch
+* linux-2.6-silence-acpi-blacklist.patch
+* linux-2.6-silence-fbcon-logo.patch
+* linux-2.6-silence-noise.patch
+	Fedora local 'hush' patches.  (Some will go upstream next time)
 
 * linux-2.6-execshield.patch
 	Not interesting to upstream.
 
-* linux-2.6-sysrq-c.patch
-* linux-2.6.31-lirc.patch
-* lirc_streamzap-buffer-rework.patch
+* lirc-2.6.33.patch
 * hdpvr-ir-enable.patch
-* hid-ignore-all-recent-imon-devices.patch
 	jarod working on upstreaming
 
-* linux-2.6-silence-acpi-blacklist.patch
-* linux-2.6-silence-fbcon-logo.patch
-* linux-2.6-silence-noise.patch
-	Fedora local 'hush' patches.  (Some will go upstream next time)
-
 * linux-2.6-selinux-mprotect-checks.patch
 * linux-2.6-sparc-selinux-mprotect-checks.patch
-	Not upstreamable.
+	Newer version might go upstream at some point.
 
 * linux-2.6-serial-460800.patch
 	Probably not upstreamable.
@@ -73,8 +59,3 @@
 	https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=126403
 	http://lkml.org/lkml/2006/8/2/208
 
-* linux-2.6-kmemleak-improvements.patch
-	will go upstream for .31
-
-* linux-2.6-x86-64-fbdev-primary.patch
-	upstream for 2.6.34 - posted to lkml


Index: config-arm
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/config-arm,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -p -r1.7 -r1.8
--- config-arm	25 Jan 2010 21:50:02 -0000	1.7
+++ config-arm	9 Jul 2010 09:09:10 -0000	1.8
@@ -105,3 +105,6 @@ CONFIG_RCU_FANOUT=32
 # CONFIG_OC_ETM is not set
 
 # CONFIG_MTD_PISMO is not set
+
+CONFIG_PERF_EVENTS=y
+CONFIG_PERF_COUNTERS=y


Index: config-debug
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/config-debug,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -p -r1.39 -r1.40
--- config-debug	16 Jan 2010 22:16:12 -0000	1.39
+++ config-debug	9 Jul 2010 09:09:10 -0000	1.40
@@ -8,6 +8,7 @@ CONFIG_DEBUG_LOCK_ALLOC=y
 CONFIG_PROVE_LOCKING=y
 CONFIG_DEBUG_VM=y
 CONFIG_DEBUG_SPINLOCK=y
+CONFIG_PROVE_RCU=y
 
 CONFIG_FAULT_INJECTION=y
 CONFIG_FAILSLAB=y
@@ -63,10 +64,6 @@ CONFIG_DEBUG_PERF_USE_VMALLOC=y
 
 CONFIG_JBD2_DEBUG=y
 
-CONFIG_FUNCTION_TRACER=y
-CONFIG_STACK_TRACER=y
-CONFIG_DYNAMIC_FTRACE=y
-
 CONFIG_DEBUG_CFQ_IOSCHED=y
 
 CONFIG_DRBD_FAULT_INJECTION=y
@@ -76,3 +73,11 @@ CONFIG_IWLWIFI_DEVICE_TRACING=y
 
 CONFIG_DEBUG_OBJECTS_WORK=y
 # CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set
+
+CONFIG_DMADEVICES_DEBUG=y
+CONFIG_DMADEVICES_VDEBUG=y
+
+CONFIG_PM_ADVANCED_DEBUG=y
+
+CONFIG_CEPH_FS_PRETTYDEBUG=y
+CONFIG_QUOTA_DEBUG=y


Index: config-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/config-generic,v
retrieving revision 1.366
retrieving revision 1.367
diff -u -p -r1.366 -r1.367
--- config-generic	9 Jun 2010 19:56:13 -0000	1.366
+++ config-generic	9 Jul 2010 09:09:10 -0000	1.367
@@ -38,7 +38,6 @@ CONFIG_LOG_BUF_SHIFT=17
 CONFIG_KALLSYMS=y
 CONFIG_KALLSYMS_ALL=y
 CONFIG_KALLSYMS_EXTRA_PASS=y
-CONFIG_KALLSYMS_STRIP_GENERATED=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 CONFIG_IOSCHED_NOOP=y
@@ -56,7 +55,6 @@ CONFIG_POSIX_MQUEUE=y
 # CONFIG_PREEMPT_NONE is not set
 CONFIG_PREEMPT_VOLUNTARY=y
 # CONFIG_PREEMPT is not set
-CONFIG_PREEMPT_BKL=y
 
 CONFIG_SLUB=y
 # CONFIG_SLUB_STATS is not set
@@ -76,7 +74,6 @@ CONFIG_MODULE_UNLOAD=y
 # -- MODULE_FORCE_UNLOAD is controlled by config-debug/nodebug
 # CONFIG_MODVERSIONS is not set
 CONFIG_MODULE_SRCVERSION_ALL=y
-CONFIG_KMOD=y
 
 #
 # Bus options (PCI, PCMCIA, EISA, MCA, ISA)
@@ -123,7 +120,6 @@ CONFIG_SDIO_UART=m
 # CONFIG_MMC_DEBUG is not set
 # CONFIG_MMC_UNSAFE_RESUME is not set
 CONFIG_MMC_BLOCK=m
-CONFIG_MMC_RICOH_MMC=m
 CONFIG_MMC_SDHCI=m
 CONFIG_MMC_SDHCI_PCI=m
 CONFIG_MMC_SDRICOH_CS=m
@@ -132,6 +128,7 @@ CONFIG_MMC_WBSD=m
 CONFIG_MMC_VIA_SDMMC=m
 CONFIG_MMC_SDHCI_PLTFM=m
 CONFIG_MMC_CB710=m
+CONFIG_MMC_RICOH_MMC=y
 
 CONFIG_CB710_CORE=m
 # CONFIG_CB710_DEBUG is not set
@@ -230,7 +227,6 @@ CONFIG_MTD_ABSENT=m
 #
 CONFIG_MTD_COMPLEX_MAPPINGS=y
 # CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_PNC2000 is not set
 CONFIG_MTD_SC520CDP=m
 CONFIG_MTD_NETSC520=m
 # CONFIG_MTD_SBC_GXX is not set
@@ -365,12 +361,10 @@ CONFIG_BLK_DEV_OSD=m
 CONFIG_BLK_DEV_RAM=y
 CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=16384
-CONFIG_BLK_DEV_RAM_BLOCKSIZE=4096
 CONFIG_BLK_DEV_INITRD=y
 CONFIG_BLK_DEV_ATIIXP=y
 CONFIG_LBD=y
 CONFIG_BLK_DEV_IO_TRACE=y
-CONFIG_LSF=y
 
 CONFIG_BLK_DEV_DELKIN=m
 # CONFIG_BLK_DEV_IT8213 is not set
@@ -390,13 +384,9 @@ CONFIG_BLK_DEV_IDE=y
 #
 # Please see Documentation/ide.txt for help/info on IDE drives
 #
-# CONFIG_BLK_DEV_HD_IDE is not set
-CONFIG_BLK_DEV_IDEDISK=y
-CONFIG_IDEDISK_MULTI_MODE=y
 CONFIG_BLK_DEV_IDECS=m
 CONFIG_BLK_DEV_IDECD=m
 # CONFIG_BLK_DEV_IDETAPE is not set
-CONFIG_BLK_DEV_IDEFLOPPY=y
 CONFIG_IDE_TASK_IOCTL=y
 # CONFIG_BLK_DEV_IDE_SATA is not set
 
@@ -407,7 +397,6 @@ CONFIG_BLK_DEV_CMD640=y
 CONFIG_BLK_DEV_CMD640_ENHANCED=y
 CONFIG_BLK_DEV_IDEPNP=y
 CONFIG_BLK_DEV_IDEPCI=y
-CONFIG_IDEPCI_SHARE_IRQ=y
 # CONFIG_BLK_DEV_OFFBOARD is not set
 CONFIG_BLK_DEV_GENERIC=y
 # CONFIG_BLK_DEV_OPTI621 is not set
@@ -415,7 +404,6 @@ CONFIG_BLK_DEV_RZ1000=y
 CONFIG_BLK_DEV_IDEDMA_PCI=y
 CONFIG_BLK_DEV_AEC62XX=y
 CONFIG_BLK_DEV_ALI15X3=y
-# CONFIG_WDC_ALI15X3 is not set
 # CONFIG_BLK_DEV_AMD74XX is not set
 CONFIG_BLK_DEV_CMD64X=y
 CONFIG_BLK_DEV_TRIFLEX=y
@@ -423,7 +411,6 @@ CONFIG_BLK_DEV_TRIFLEX=y
 CONFIG_BLK_DEV_CS5520=y
 CONFIG_BLK_DEV_CS5530=y
 CONFIG_BLK_DEV_CS5535=y
-CONFIG_BLK_DEV_HPT34X=y
 CONFIG_BLK_DEV_HPT366=y
 CONFIG_BLK_DEV_IT821X=y
 CONFIG_BLK_DEV_JMICRON=y
@@ -431,7 +418,6 @@ CONFIG_BLK_DEV_JMICRON=y
 CONFIG_BLK_DEV_PIIX=y
 # CONFIG_BLK_DEV_NS87415 is not set
 CONFIG_BLK_DEV_PDC202XX_OLD=y
-# CONFIG_PDC202XX_BURST is not set
 CONFIG_BLK_DEV_PDC202XX_NEW=y
 CONFIG_BLK_DEV_SVWKS=y
 CONFIG_BLK_DEV_SIIMAGE=y
@@ -554,6 +540,7 @@ CONFIG_SCSI_HPSA=m
 CONFIG_SCSI_3W_SAS=m
 CONFIG_SCSI_PM8001=m
 CONFIG_VMWARE_PVSCSI=m
+CONFIG_VMWARE_BALLOON=m
 
 CONFIG_ATA=y
 CONFIG_ATA_VERBOSE_ERROR=y
@@ -651,8 +638,6 @@ CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MOD
 CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
 CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
 CONFIG_SCSI_SYM53C8XX_MMIO=y
-# CONFIG_SCSI_QLOGIC_FC is not set
-# CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set
 CONFIG_SCSI_QLOGIC_1280=m
 CONFIG_SCSI_DC395x=m
 # CONFIG_SCSI_NSP32 is not set
@@ -663,7 +648,6 @@ CONFIG_SCSI_QLA_ISCSI=m
 # CONFIG_SCSI_IPR is not set
 # CONFIG_SCSI_DPT_I2O is not set
 CONFIG_SCSI_LPFC=m
-# CONFIG_SCSI_SEAGATE is not set
 
 #
 # PCMCIA SCSI adapter support
@@ -687,10 +671,9 @@ CONFIG_MD_LINEAR=m
 CONFIG_MD_MULTIPATH=m
 CONFIG_MD_RAID0=m
 CONFIG_MD_RAID1=m
-CONFIG_MD_RAID5_RESHAPE=y
 CONFIG_MD_RAID10=m
 CONFIG_MD_RAID456=m
-# CONFIG_MULTICORE_RAID456 is not set
+CONFIG_MULTICORE_RAID456=y
 CONFIG_ASYNC_RAID6_TEST=m
 CONFIG_BLK_DEV_DM=y
 CONFIG_DM_CRYPT=m
@@ -698,9 +681,6 @@ CONFIG_DM_DEBUG=y
 # CONFIG_DM_DELAY is not set
 CONFIG_DM_MIRROR=y
 CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-CONFIG_DM_MULTIPATH_HP=m
-CONFIG_DM_MULTIPATH_RDAC=m
 CONFIG_DM_SNAPSHOT=y
 CONFIG_DM_UEVENT=y
 CONFIG_DM_ZERO=y
@@ -807,6 +787,7 @@ CONFIG_IP_VS_PROTO_TCP=y
 CONFIG_IP_VS_PROTO_UDP=y
 CONFIG_IP_VS_PROTO_ESP=y
 CONFIG_IP_VS_PROTO_AH=y
+CONFIG_IP_VS_PROTO_SCTP=y
 CONFIG_IP_VS_RR=m
 CONFIG_IP_VS_WRR=m
 CONFIG_IP_VS_LC=m
@@ -842,7 +823,6 @@ CONFIG_RDS_RDMA=m
 CONFIG_RDS_TCP=m
 
 CONFIG_NET_9P=m
-CONFIG_NET_9P_FD=m
 CONFIG_NET_9P_VIRTIO=m
 # CONFIG_NET_9P_DEBUG is not set
 CONFIG_NET_9P_RDMA=m
@@ -851,6 +831,7 @@ CONFIG_DECNET=m
 CONFIG_DECNET_ROUTER=y
 # CONFIG_DECNET_NF_GRABULATOR is not set
 CONFIG_BRIDGE=m
+CONFIG_BRIDGE_IGMP_SNOOPING=y
 CONFIG_NETFILTER=y
 CONFIG_NETFILTER_ADVANCED=y
 CONFIG_NF_CONNTRACK=y
@@ -872,6 +853,7 @@ CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
 CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
 CONFIG_NETFILTER_XT_TARGET_TRACE=m
 CONFIG_NETFILTER_XT_TARGET_LED=m
+CONFIG_NETFILTER_XT_TARGET_CT=m
 CONFIG_NETFILTER_XT_MATCH_COMMENT=m
 CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
 CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
@@ -912,12 +894,12 @@ CONFIG_BRIDGE_NETFILTER=y
 #
 # IP: Netfilter Configuration
 #
-CONFIG_NF_CONNTRACK_ENABLED=y
 
 CONFIG_NF_CT_ACCT=y
 CONFIG_NF_CONNTRACK_MARK=y
 CONFIG_NF_CONNTRACK_SECMARK=y
 CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CONNTRACK_ZONES=y
 # CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
 CONFIG_NF_CONNTRACK_AMANDA=m
 CONFIG_NF_CONNTRACK_FTP=m
@@ -940,17 +922,11 @@ CONFIG_NF_CT_PROTO_UDPLITE=m
 CONFIG_IP_NF_MATCH_ADDRTYPE=m
 CONFIG_IP_NF_MATCH_AH=m
 CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_IPRANGE=m
-CONFIG_IP_NF_MATCH_OWNER=m
-CONFIG_IP_NF_MATCH_RECENT=m
-CONFIG_IP_NF_MATCH_TOS=m
 CONFIG_IP_NF_MATCH_TTL=m
 CONFIG_IP_NF_TARGET_CLUSTERIP=m
 CONFIG_IP_NF_TARGET_MASQUERADE=m
 CONFIG_IP_NF_TARGET_REDIRECT=m
 CONFIG_IP_NF_TARGET_NETMAP=m
-CONFIG_IP_NF_TARGET_SAME=m
-CONFIG_IP_NF_TARGET_TOS=m
 CONFIG_IP_NF_TARGET_ECN=m
 CONFIG_IP_NF_TARGET_LOG=m
 CONFIG_IP_NF_TARGET_ULOG=m
@@ -979,7 +955,6 @@ CONFIG_IP6_NF_MATCH_HL=m
 CONFIG_IP6_NF_MATCH_IPV6HEADER=m
 CONFIG_IP6_NF_MATCH_MH=m
 CONFIG_IP6_NF_MATCH_OPTS=m
-CONFIG_IP6_NF_MATCH_OWNER=m
 CONFIG_IP6_NF_MATCH_RT=m
 CONFIG_IP6_NF_QUEUE=m
 CONFIG_IP6_NF_RAW=m
@@ -1083,7 +1058,6 @@ CONFIG_NET_SCH_INGRESS=m
 CONFIG_NET_SCH_NETEM=m
 CONFIG_NET_SCH_PRIO=m
 CONFIG_NET_SCH_RED=m
-CONFIG_NET_SCH_RR=m
 CONFIG_NET_SCH_SFQ=m
 CONFIG_NET_SCH_TBF=m
 CONFIG_NET_SCH_TEQL=m
@@ -1094,7 +1068,6 @@ CONFIG_NET_CLS_CGROUP=y
 CONFIG_NET_CLS_FLOW=m
 CONFIG_NET_CLS_FW=m
 CONFIG_NET_CLS_IND=y
-CONFIG_NET_CLS_POLICE=y
 CONFIG_NET_CLS_ROUTE4=m
 CONFIG_NET_CLS_ROUTE=y
 CONFIG_NET_CLS_RSVP=m
@@ -1131,7 +1104,6 @@ CONFIG_NET_DROP_MONITOR=y
 CONFIG_NETDEVICES=y
 
 # disable later --kyle
-CONFIG_COMPAT_NET_DEV_OPS=y
 
 #
 # ARCnet devices
@@ -1141,6 +1113,7 @@ CONFIG_IFB=m
 CONFIG_DUMMY=m
 CONFIG_BONDING=m
 CONFIG_MACVLAN=m
+CONFIG_MACVTAP=m
 CONFIG_EQUALIZER=m
 CONFIG_TUN=m
 CONFIG_VETH=m
@@ -1203,10 +1176,6 @@ CONFIG_BROADCOM_PHY=m
 CONFIG_CICADA_PHY=m
 CONFIG_DAVICOM_PHY=m
 CONFIG_FIXED_PHY=y
-CONFIG_FIXED_MII_10_FDX=y
-CONFIG_FIXED_MII_100_FDX=y
-CONFIG_FIXED_MII_1000_FDX=y
-CONFIG_FIXED_MII_AMNT=1
 CONFIG_MDIO_BITBANG=m
 CONFIG_NATIONAL_PHY=m
 CONFIG_ICPLUS_PHY=m
@@ -1218,6 +1187,7 @@ CONFIG_REALTEK_PHY=m
 CONFIG_SMSC_PHY=m
 CONFIG_STE10XP=m
 CONFIG_VITESSE_PHY=m
+CONFIG_MICREL_PHY=m
 
 CONFIG_MII=m
 CONFIG_HAPPYMEAL=m
@@ -1238,7 +1208,6 @@ CONFIG_TULIP=m
 # CONFIG_TULIP_MWI is not set
 CONFIG_TULIP_MMIO=y
 # CONFIG_NI5010 is not set
-# CONFIG_PCMCIA_XIRTULIP is not set
 CONFIG_DE4X5=m
 CONFIG_WINBOND_840=m
 CONFIG_DM9102=m
@@ -1250,11 +1219,9 @@ CONFIG_NE3210=m
 CONFIG_ES3210=m
 CONFIG_NET_PCI=y
 CONFIG_PCNET32=m
-CONFIG_PCNET32_NAPI=y
 CONFIG_AMD8111_ETH=m
-CONFIG_AMD8111E_NAPI=y
 CONFIG_ADAPTEC_STARFIRE=m
-CONFIG_ADAPTEC_STARFIRE_NAPI=y
+CONFIG_KSZ884X_PCI=m
 CONFIG_B44=m
 CONFIG_B44_PCI=y
 CONFIG_BNX2=m
@@ -1264,7 +1231,6 @@ CONFIG_ATL1=m
 CONFIG_ATL1C=m
 CONFIG_ATL2=m
 CONFIG_ATL1E=m
-# CONFIG_EEPRO100 is not set
 CONFIG_E100=m
 CONFIG_FEALNX=m
 CONFIG_FORCEDETH=m
@@ -1287,14 +1253,12 @@ CONFIG_SUNDANCE=m
 CONFIG_TLAN=m
 CONFIG_VIA_RHINE=m
 CONFIG_VIA_RHINE_MMIO=y
-CONFIG_VIA_RHINE_NAPI=y
 CONFIG_VIA_VELOCITY=m
 CONFIG_NET_POCKET=y
 CONFIG_ATP=m
 CONFIG_DE600=m
 CONFIG_DE620=m
 CONFIG_CASSINI=m
-# CONFIG_FEC_8XX is not set
 CONFIG_ETHOC=m
 # CONFIG_KS8842 is not set
 # CONFIG_KS8851_MLL is not set
@@ -1306,20 +1270,15 @@ CONFIG_ACENIC=m
 # CONFIG_ACENIC_OMIT_TIGON_I is not set
 CONFIG_DL2K=m
 CONFIG_E1000=m
-CONFIG_E1000_NAPI=y
-# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
 CONFIG_E1000E=m
 CONFIG_IGB=m
-# CONFIG_IGB_LRO is not set
 CONFIG_IGB_DCA=y
 CONFIG_IGBVF=m
 CONFIG_NS83820=m
 CONFIG_HAMACHI=m
 CONFIG_YELLOWFIN=m
 CONFIG_R8169=m
-CONFIG_R8169_NAPI=y
 CONFIG_R8169_VLAN=y
-# CONFIG_SK98LIN is not set
 CONFIG_SKGE=m
 # CONFIG_SKGE_DEBUG is not set
 CONFIG_TIGON3=m
@@ -1332,11 +1291,11 @@ CONFIG_JME=m
 #
 CONFIG_CHELSIO_T1=m
 CONFIG_CHELSIO_T1_1G=y
-CONFIG_CHELSIO_T1_NAPI=y
 CONFIG_CHELSIO_T3=m
+CONFIG_CHELSIO_T4=m
 CONFIG_IP1000=m
 CONFIG_IXGB=m
-CONFIG_IXGB_NAPI=y
+CONFIG_IXGBEVF=m
 CONFIG_IXGBE=m
 CONFIG_IXGBE_DCA=y
 CONFIG_IXGBE_DCB=y
@@ -1345,13 +1304,13 @@ CONFIG_MYRI10GE_DCA=y
 CONFIG_NETXEN_NIC=m
 CONFIG_NIU=m
 CONFIG_S2IO=m
-CONFIG_S2IO_NAPI=y
 CONFIG_VXGE=m
 # CONFIG_VXGE_DEBUG_TRACE_ALL is not set
 CONFIG_TEHUTI=m
 CONFIG_ENIC=m
 CONFIG_MLX4_EN=m
 # CONFIG_MLX4_DEBUG is not set
+CONFIG_QLCNIC=m
 CONFIG_QLGE=m
 CONFIG_SFC=m
 CONFIG_SFC_MTD=y
@@ -1382,12 +1341,10 @@ CONFIG_SLIP_SMART=y
 #
 #
 CONFIG_WLAN=y
-# CONFIG_WLAN_PRE80211 is not set
 # CONFIG_STRIP is not set
 # CONFIG_ARLAN is not set
 CONFIG_PCMCIA_WAVELAN=m
 CONFIG_PCMCIA_NETWAVE=m
-CONFIG_WLAN_80211=y
 # CONFIG_PCMCIA_RAYCS is not set
 
 CONFIG_WIRELESS=y
@@ -1409,7 +1366,6 @@ CONFIG_LIB80211_CRYPT_TKIP=m
 # CONFIG_LIB80211_DEBUG is not set
 
 CONFIG_MAC80211=m
-CONFIG_MAC80211_QOS=y
 CONFIG_MAC80211_RC_MINSTREL=y
 # CONFIG_MAC80211_RC_DEFAULT_PID is not set
 CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
@@ -1418,7 +1374,6 @@ CONFIG_MAC80211_MESH=y
 CONFIG_MAC80211_LEDS=y
 CONFIG_MAC80211_DEBUGFS=y
 # CONFIG_MAC80211_DEBUG_MENU is not set
-CONFIG_MAC80211_DEFAULT_PS=y
 
 CONFIG_WIMAX=m
 CONFIG_WIMAX_DEBUG_LEVEL=8
@@ -1438,7 +1393,6 @@ CONFIG_AT76C50X_USB=m
 CONFIG_AIRO=m
 CONFIG_AIRO_CS=m
 CONFIG_ATMEL=m
-# CONFIG_BCM43XX is not set
 CONFIG_B43=m
 CONFIG_B43_PCMCIA=y
 CONFIG_B43_SDIO=y
@@ -1472,22 +1426,16 @@ CONFIG_LIBERTAS_SDIO=m
 CONFIG_LIBERTAS_DEBUG=y
 CONFIG_LIBERTAS_THINFIRM=m
 CONFIG_LIBERTAS_THINFIRM_USB=m
+CONFIG_LIBERTAS_MESH=y
 CONFIG_IWLWIFI=m
-CONFIG_IWLWIFI_LEDS=y
-CONFIG_IWLWIFI_RUN_TIME_CALIB=y
 CONFIG_IWLWIFI_DEBUG=y
 CONFIG_IWLWIFI_DEBUGFS=y
-CONFIG_IWLWIFI_RFKILL=y
 CONFIG_IWLWIFI_SPECTRUM_MEASUREMENT=y
 CONFIG_IWLAGN=m
 CONFIG_IWL4965=y
 CONFIG_IWL5000=y
-CONFIG_IWL5000_RUN_TIME_CALIB=y
 CONFIG_IWL3945=m
-CONFIG_IWL3945_RFKILL=y
-CONFIG_IWL3945_DEBUG=y
 CONFIG_IWL3945_SPECTRUM_MEASUREMENT=y
-CONFIG_IWL3945_LEDS=y
 CONFIG_IWM=m
 # CONFIG_IWM_DEBUG is not set
 CONFIG_MAC80211_HWSIM=m
@@ -1508,16 +1456,9 @@ CONFIG_RT2X00=m
 CONFIG_RT2X00_LIB_DEBUGFS=y
 # CONFIG_RT2X00_DEBUG is not set
 CONFIG_RT2400PCI=m
-CONFIG_RT2400PCI_RFKILL=y
-CONFIG_RT2400PCI_LEDS=y
 CONFIG_RT2500PCI=m
-CONFIG_RT2500PCI_RFKILL=y
-CONFIG_RT2500PCI_LEDS=y
 CONFIG_RT61PCI=m
-CONFIG_RT61PCI_RFKILL=y
-CONFIG_RT61PCI_LEDS=y
 CONFIG_RT2500USB=m
-CONFIG_RT2500USB_LEDS=y
 CONFIG_RT2800USB=m
 # CONFIG_RT2800USB_RT30XX is not set
 # CONFIG_RT2800USB_RT35XX is not set
@@ -1526,12 +1467,12 @@ CONFIG_RT2800PCI=m
 # CONFIG_RT2800PCI_RT30XX is not set
 # CONFIG_RT2800PCI_RT35XX is not set
 CONFIG_RT73USB=m
-CONFIG_RT73USB_LEDS=y
 CONFIG_RTL8180=m
 CONFIG_RTL8187=m
 CONFIG_TMD_HERMES=m
 CONFIG_USB_ZD1201=m
 CONFIG_USB_NET_RNDIS_WLAN=m
+CONFIG_USB_NET_SMSC75XX=m
 CONFIG_ZD1211RW=m
 # CONFIG_ZD1211RW_DEBUG is not set
 CONFIG_AR9170_USB=m
@@ -1557,7 +1498,6 @@ CONFIG_WL1271=m
 
 
 CONFIG_NET_FC=y
-# CONFIG_SHAPER is not set
 
 #
 # Wan interfaces
@@ -1595,6 +1535,7 @@ CONFIG_CAN_SJA1000_PLATFORM=m
 CONFIG_CAN_EMS_PCI=m
 CONFIG_CAN_EMS_USB=m
 CONFIG_CAN_KVASER_PCI=m
+CONFIG_CAN_PLX_PCI=m
 CONFIG_NETROM=m
 CONFIG_ROSE=m
 CONFIG_MKISS=m
@@ -1627,7 +1568,6 @@ CONFIG_ACTISYS_DONGLE=m
 CONFIG_ACT200L_DONGLE=m
 CONFIG_ESI_DONGLE=m
 CONFIG_GIRBIL_DONGLE=m
-CONFIG_IRPORT_SIR=m
 CONFIG_KINGSUN_DONGLE=m
 CONFIG_KSDAZZLE_DONGLE=m
 CONFIG_KS959_DONGLE=m
@@ -1637,7 +1577,6 @@ CONFIG_MCP2120_DONGLE=m
 CONFIG_OLD_BELKIN_DONGLE=m
 CONFIG_TEKRAM_DONGLE=m
 CONFIG_TOIM3232_DONGLE=m
-# CONFIG_DONGLE_OLD is not set
 
 CONFIG_ALI_FIR=m
 CONFIG_MCS_FIR=m
@@ -1670,7 +1609,6 @@ CONFIG_BT_HIDP=m
 CONFIG_BT_HCIBTUSB=m
 # Disable the BT_HCIUSB driver.
 # It sucks more power than BT_HCIBTUSB which has the same functionality.
-# CONFIG_BT_HCIUSB is not set
 CONFIG_BT_HCIUART=m
 CONFIG_BT_HCIUART_H4=y
 CONFIG_BT_HCIUART_BCSP=y
@@ -1679,7 +1617,6 @@ CONFIG_BT_HCIBT3C=m
 CONFIG_BT_HCIBLUECARD=m
 CONFIG_BT_HCIBTUART=m
 CONFIG_BT_HCIVHCI=m
-CONFIG_BT_HCIUSB_SCO=y
 CONFIG_BT_HCIBCM203X=m
 CONFIG_BT_HCIBFUSB=m
 CONFIG_BT_HCIBPA10X=m
@@ -1808,7 +1745,6 @@ CONFIG_GIGASET_BASE=m
 CONFIG_GIGASET_M101=m
 CONFIG_GIGASET_M105=m
 # CONFIG_GIGASET_DEBUG is not set
-# CONFIG_GIGASET_UNDOCREQ is not set
 
 #
 # Telephony Support
@@ -2000,10 +1936,8 @@ CONFIG_SERIAL_8250_RSA=y
 CONFIG_CYCLADES=m
 # CONFIG_CYZ_INTR is not set
 # CONFIG_DIGIEPCA is not set
-# CONFIG_ESPSERIAL is not set
 # CONFIG_MOXA_INTELLIO is not set
 # CONFIG_MOXA_SMARTIO is not set
-# CONFIG_MOXA_SMARTIO_NEW is not set
 # CONFIG_ISI is not set
 # CONFIG_RISCOM8 is not set
 # CONFIG_SPECIALIX is not set
@@ -2018,6 +1952,7 @@ CONFIG_SERIAL_JSM=m
 #
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_TIMBERDALE is not set
 CONFIG_UNIX98_PTYS=y
 CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
 # CONFIG_LEGACY_PTYS is not set
@@ -2056,7 +1991,6 @@ CONFIG_I2C_ALGOPCA=m
 # CONFIG_I2C_DEBUG_CHIP is not set
 # CONFIG_I2C_ELEKTOR is not set
 # CONFIG_I2C_I801 is not set
-# CONFIG_I2C_I810 is not set
 # CONFIG_I2C_ISCH is not set
 # CONFIG_I2C_NFORCE2_S4985 is not set
 
@@ -2073,8 +2007,6 @@ CONFIG_I2C_PASEMI=m
 CONFIG_I2C_PCA_ISA=m
 CONFIG_I2C_PCA_PLATFORM=m
 # CONFIG_I2C_PIIX4 is not set
-CONFIG_I2C_PROSAVAGE=m
-CONFIG_I2C_SAVAGE4=m
 # CONFIG_SCx200_ACB is not set
 # CONFIG_I2C_SIS5595 is not set
 # CONFIG_I2C_SIS630 is not set
@@ -2085,8 +2017,8 @@ CONFIG_I2C_TINY_USB=m
 # CONFIG_I2C_TAOS_EVM is not set
 # CONFIG_I2C_VIA is not set
 # CONFIG_I2C_VIAPRO is not set
-CONFIG_I2C_VOODOO3=m
 # CONFIG_I2C_DESIGNWARE is not set
+# CONFIG_I2C_XILINX is not set
 
 #
 # I2C Hardware Sensors Chip support
@@ -2113,11 +2045,7 @@ CONFIG_SENSORS_ATXP1=m
 CONFIG_SENSORS_CORETEMP=m
 CONFIG_SENSORS_DME1737=m
 CONFIG_SENSORS_DS1621=m
-CONFIG_SENSORS_DS1337=m
-CONFIG_SENSORS_DS1374=m
 # CONFIG_DS1682 is not set
-CONFIG_SENSORS_FSCHER=m
-CONFIG_SENSORS_FSCPOS=m
 CONFIG_SENSORS_F71805F=m
 CONFIG_SENSORS_F71882FG=m
 CONFIG_SENSORS_F75375S=m
@@ -2149,11 +2077,8 @@ CONFIG_SENSORS_LM93=m
 CONFIG_SENSORS_LTC4245=m
 CONFIG_SENSORS_MAX1619=m
 CONFIG_SENSORS_MAX6650=m
-CONFIG_SENSORS_MAX6875=m
 CONFIG_SENSORS_PC87360=m
 CONFIG_SENSORS_PC87427=m
-CONFIG_SENSORS_PCA9539=m
-CONFIG_SENSORS_PCF8574=m
 CONFIG_SENSORS_PCF8591=m
 CONFIG_SENSORS_SHT15=m
 CONFIG_SENSORS_SIS5595=m
@@ -2182,6 +2107,8 @@ CONFIG_SENSORS_WM8350=m
 CONFIG_SENSORS_WM831X=m
 CONFIG_SENSORS_LM73=m
 CONFIG_SENSORS_AMC6821=m
+CONFIG_SENSORS_ADT7411=m
+CONFIG_SENSORS_ASC7621=m
 
 CONFIG_W1=m
 CONFIG_W1_CON=y
@@ -2218,9 +2145,7 @@ CONFIG_IPMI_POWEROFF=m
 CONFIG_WATCHDOG=y
 # CONFIG_WATCHDOG_NOWAYOUT is not set
 CONFIG_SOFT_WATCHDOG=m
-# CONFIG_WDT_501 is not set
 CONFIG_WDTPCI=m
-CONFIG_WDT_501_PCI=y
 # CONFIG_ACQUIRE_WDT is not set
 # CONFIG_ADVANTECH_WDT is not set
 # CONFIG_EUROTECH_WDT is not set
@@ -2251,6 +2176,7 @@ CONFIG_USBPCWATCHDOG=m
 # CONFIG_SBC_EPX_C3_WATCHDOG is not set
 CONFIG_WM8350_WATCHDOG=m
 CONFIG_WM831X_WATCHDOG=m
+# CONFIG_MAX63XX_WATCHDOG is not set
 
 CONFIG_HW_RANDOM=y
 CONFIG_HW_RANDOM_TIMERIOMEM=m
@@ -2294,7 +2220,7 @@ CONFIG_RTC_DRV_DS1286=m
 CONFIG_RTC_DRV_M48T35=m
 CONFIG_RTC_DRV_BQ4802=m
 CONFIG_RTC_DRV_WM8350=m
-CONFIG_RTC_DRV_AB3100=m
+# CONFIG_RTC_DRV_AB3100 is not set
 CONFIG_RTC_DRV_WM831X=m
 CONFIG_RTC_DRV_BQ32K=m
 CONFIG_RTC_DRV_MSM6242=m
@@ -2320,6 +2246,7 @@ CONFIG_AGP_SWORKS=y
 CONFIG_AGP_VIA=y
 CONFIG_AGP_EFFICEON=y
 CONFIG_VGA_ARB=y
+CONFIG_VGA_ARB_MAX_GPUS=16
 CONFIG_DRM=m
 CONFIG_DRM_TDFX=m
 CONFIG_DRM_R128=m
@@ -2334,11 +2261,10 @@ CONFIG_DRM_I915=m
 CONFIG_DRM_I915_KMS=y
 CONFIG_DRM_VIA=m
 CONFIG_DRM_NOUVEAU=m
-CONFIG_DRM_NOUVEAU_KMS=y
 CONFIG_DRM_NOUVEAU_BACKLIGHT=y
 CONFIG_DRM_NOUVEAU_DEBUG=y
 CONFIG_DRM_I2C_CH7006=m
-CONFIG_DRM_VMWGFX=n
+CONFIG_DRM_VMWGFX=m
 
 #
 # PCMCIA character devices
@@ -2384,12 +2310,12 @@ CONFIG_VIDEO_CPIA2=m
 CONFIG_VIDEO_CQCAM=m
 CONFIG_VIDEO_CX23885=m
 CONFIG_VIDEO_CX18=m
+CONFIG_VIDEO_CX18_ALSA=m
 CONFIG_VIDEO_CX88=m
 CONFIG_VIDEO_CX88_DVB=m
 CONFIG_VIDEO_CX88_ALSA=m
 CONFIG_VIDEO_CX88_BLACKBIRD=m
 CONFIG_VIDEO_CX88_VP3054=m
-CONFIG_VIDEO_DPC=m
 CONFIG_VIDEO_EM28XX=m
 CONFIG_VIDEO_EM28XX_ALSA=m
 CONFIG_VIDEO_EM28XX_DVB=m
@@ -2423,6 +2349,7 @@ CONFIG_VIDEO_ZORAN_LML33R10=m
 CONFIG_VIDEO_ZORAN_ZR36060=m
 CONFIG_VIDEO_FB_IVTV=m
 CONFIG_VIDEO_SAA7164=m
+CONFIG_VIDEO_TLG2300=m
 
 CONFIG_USB_VIDEO_CLASS=m
 CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
@@ -2543,6 +2470,7 @@ CONFIG_DVB_ISL6405=m
 CONFIG_DVB_LGS8GL5=m
 CONFIG_DVB_DUMMY_FE=m
 CONFIG_DVB_FIREDTV=m
+CONFIG_DVB_NGENE=m
 
 #
 # Supported SAA7146 based PCI Adapters
@@ -2590,6 +2518,7 @@ CONFIG_DVB_USB_TTUSB2=m
 CONFIG_DVB_USB_UMT_010=m
 CONFIG_DVB_USB_VP702X=m
 CONFIG_DVB_USB_VP7045=m
+CONFIG_DVB_USB_AZ6027=m
 
 CONFIG_DVB_PT1=m
 
@@ -2600,11 +2529,8 @@ CONFIG_DVB_HOPPER=m
 CONFIG_VIDEO_SAA7146=m
 CONFIG_VIDEO_SAA7146_VV=m
 CONFIG_VIDEO_TUNER=m
-# CONFIG_VIDEO_TUNER_CUSTOMISE is not set
 CONFIG_VIDEO_BTCX=m
 CONFIG_VIDEO_PVRUSB2=m
-CONFIG_VIDEO_PVRUSB2_24XXX=y
-CONFIG_VIDEO_PVRUSB2_29XXX=y
 CONFIG_VIDEO_PVRUSB2_SYSFS=y
 # CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
 
@@ -2621,7 +2547,6 @@ CONFIG_DISPLAY_SUPPORT=m
 CONFIG_VIDEO_OUTPUT_CONTROL=m
 
 CONFIG_FB=y
-CONFIG_VIDEO_SELECT=y
 # CONFIG_FB_FOREIGN_ENDIAN is not set
 CONFIG_FB_3DFX=m
 CONFIG_FB_3DFX_ACCEL=y
@@ -2637,7 +2562,6 @@ CONFIG_FB_ATY_GENERIC_LCD=y
 # CONFIG_FB_CARMINE is not set
 CONFIG_FB_CIRRUS=m
 # CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_CYBLA is not set
 # CONFIG_FB_GEODE is not set
 # CONFIG_FB_HECUBA is not set
 # CONFIG_FB_HGA is not set
@@ -2645,7 +2569,6 @@ CONFIG_FB_I810=m
 CONFIG_FB_I810_GTF=y
 CONFIG_FB_I810_I2C=y
 # CONFIG_FB_IMSTT is not set
-# CONFIG_FB_IMAC is not set
 # CONFIG_FB_INTEL is not set
 # CONFIG_FB_INTEL_DEBUG is not set
 # CONFIG_FB_INTEL_I2C is not set
@@ -2657,7 +2580,6 @@ CONFIG_FB_MATROX_MYSTIQUE=y
 CONFIG_FB_MATROX_G=y
 CONFIG_FB_MATROX_I2C=m
 CONFIG_FB_MATROX_MAVEN=m
-CONFIG_FB_MATROX_MULTIHEAD=y
 CONFIG_FB_NEOMAGIC=m
 CONFIG_FB_NVIDIA=m
 # CONFIG_FB_NVIDIA_DEBUG is not set
@@ -2682,7 +2604,6 @@ CONFIG_FB_SIS_315=y
 CONFIG_FB_SM501=m
 CONFIG_FB_TILEBLITTING=y
 CONFIG_FB_TRIDENT=m
-CONFIG_FB_TRIDENT_ACCEL=y
 # CONFIG_FB_UVESA is not set
 CONFIG_FB_VESA=y
 CONFIG_FB_VGA16=m
@@ -2834,9 +2755,7 @@ CONFIG_SND_ICE1724=m
 CONFIG_SND_INTEL8X0=y
 CONFIG_SND_INTEL8X0M=m
 CONFIG_SND_KORG1212=m
-CONFIG_SND_KORG1212_FIRMWARE_IN_KERNEL=y
 CONFIG_SND_MAESTRO3=m
-CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL=y
 CONFIG_SND_MIRO=m
 CONFIG_SND_MIXART=m
 CONFIG_SND_NM256=m
@@ -2857,7 +2776,6 @@ CONFIG_SND_VIA82XX_MODEM=m
 CONFIG_SND_VIRTUOSO=m
 CONFIG_SND_VX222=m
 CONFIG_SND_YMFPCI=m
-CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL=y
 
 #
 # ALSA USB devices
@@ -2868,6 +2786,7 @@ CONFIG_SND_USB_CAIAQ=m
 CONFIG_SND_USB_CAIAQ_INPUT=y
 CONFIG_SND_USB_USX2Y=m
 CONFIG_SND_USB_US122L=m
+CONFIG_SND_USB_UA101=m
 
 #
 # PCMCIA devices
@@ -2891,7 +2810,6 @@ CONFIG_USB_SUPPORT=y
 # DEPRECATED: See bug 362221. Fix udev.
 # CONFIG_USB_DEVICE_CLASS is not set
 
-CONFIG_USB_PERSIST=y
 
 #
 # Miscellaneous USB options
@@ -2904,7 +2822,6 @@ CONFIG_USB_SUSPEND=y
 # USB Host Controller Drivers
 #
 CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_SPLIT_ISO=y
 CONFIG_USB_EHCI_ROOT_HUB_TT=y
 CONFIG_USB_EHCI_TT_NEWSCHED=y
 CONFIG_USB_OHCI_HCD=y
@@ -2934,10 +2851,8 @@ CONFIG_USB_STORAGE_CYPRESS_ATACB=y
 CONFIG_USB_STORAGE_DATAFAB=y
 CONFIG_USB_STORAGE_FREECOM=y
 CONFIG_USB_STORAGE_ISD200=y
-CONFIG_USB_STORAGE_DPCM=y
 CONFIG_USB_STORAGE_SDDR09=y
 CONFIG_USB_STORAGE_SDDR55=y
-CONFIG_USB_STORAGE_SIERRA=y
 CONFIG_USB_STORAGE_JUMPSHOT=y
 CONFIG_USB_STORAGE_USBAT=y
 CONFIG_USB_STORAGE_ONETOUCH=y
@@ -2954,11 +2869,8 @@ CONFIG_HID_SUPPORT=y
 
 CONFIG_HID=m
 # debugging default is y upstream now
-CONFIG_HID_DEBUG=y
 CONFIG_HIDRAW=y
-CONFIG_HID_FF=y
 CONFIG_HID_PID=y
-# CONFIG_HID_COMPAT is not set
 CONFIG_LOGITECH_FF=y
 CONFIG_LOGIRUMBLEPAD2_FF=y
 CONFIG_PANTHERLORD_FF=y
@@ -2970,6 +2882,13 @@ CONFIG_USB_IDMOUSE=m
 CONFIG_DRAGONRISE_FF=y
 CONFIG_GREENASIA_FF=y
 CONFIG_SMARTJOYPLUS_FF=y
+CONFIG_HID_3M_PCT=y
+CONFIG_LOGIG940_FF=y
+CONFIG_HID_MAGICMOUSE=y
+CONFIG_HID_MOSART=y
+CONFIG_HID_NTRIG=y
+CONFIG_HID_QUANTA=y
+CONFIG_HID_STANTUM=y
 
 #
 # USB Imaging devices
@@ -3069,6 +2988,8 @@ CONFIG_USB_NET_CDC_EEM=m
 CONFIG_USB_NET_ZAURUS=m
 CONFIG_USB_NET_INT51X1=m
 CONFIG_USB_CDC_PHONET=m
+CONFIG_USB_IPHETH=m
+CONFIG_USB_SIERRA_NET=m
 
 #
 # USB Host-to-Host Cables
@@ -3096,11 +3017,9 @@ CONFIG_USB_USS720=m
 CONFIG_USB_SERIAL=m
 CONFIG_USB_SERIAL_GENERIC=y
 CONFIG_USB_SERIAL_AIRCABLE=m
-CONFIG_USB_SERIAL_AIRPRIME=m
 CONFIG_USB_SERIAL_ARK3116=m
 CONFIG_USB_SERIAL_BELKIN=m
 CONFIG_USB_SERIAL_CH341=m
-CONFIG_USB_SERIAL_CP2101=m
 CONFIG_USB_SERIAL_CYPRESS_M8=m
 CONFIG_USB_SERIAL_CYBERJACK=m
 CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
@@ -3153,6 +3072,8 @@ CONFIG_USB_SERIAL_TI=m
 CONFIG_USB_SERIAL_VISOR=m
 CONFIG_USB_SERIAL_WHITEHEAT=m
 CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_QCAUX=m
+CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m
 CONFIG_USB_SERIAL_DEBUG=m
 
 CONFIG_USB_EZUSB=y
@@ -3170,7 +3091,6 @@ CONFIG_USB_SEVSEG=m
 CONFIG_USB_ALI_M5632=y
 CONFIG_USB_APPLEDISPLAY=m
 CONFIG_USB_ATM=m
-CONFIG_USB_AUERSWALD=m
 CONFIG_USB_BERRY_CHARGE=m
 CONFIG_USB_CXACRU=m
 # CONFIG_USB_C67X00_HCD is not set
@@ -3181,10 +3101,8 @@ CONFIG_USB_FTDI_ELAN=m
 CONFIG_USB_FILE_STORAGE=m
 # CONFIG_USB_FILE_STORAGE_TEST is not set
 # CONFIG_USB_GADGET is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
 # CONFIG_USB_GADGET_GOKU is not set
 # CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
 # CONFIG_USB_ISP116X_HCD is not set
 # CONFIG_USB_ISP1760_HCD is not set
 # CONFIG_USB_OXU210HP_HCD is not set
@@ -3195,10 +3113,6 @@ CONFIG_USB_LCD=m
 CONFIG_USB_LD=m
 CONFIG_USB_LEGOTOWER=m
 CONFIG_USB_MON=y
-CONFIG_USB_PHIDGET=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETMOTORCONTROL=m
 CONFIG_USB_PWC=m
 CONFIG_USB_PWC_INPUT_EVDEV=y
 # CONFIG_USB_PWC_DEBUG is not set
@@ -3218,7 +3132,6 @@ CONFIG_USB_STKWEBCAM=m
 CONFIG_USB_TRANCEVIBRATOR=m
 CONFIG_USB_U132_HCD=m
 CONFIG_USB_UEAGLEATM=m
-CONFIG_USB_UVCVIDEO=m
 CONFIG_USB_XUSBATM=m
 # CONFIG_USB_ZC0301 is not set
 CONFIG_USB_ZERO=m
@@ -3240,21 +3153,26 @@ CONFIG_SSB_DRIVER_PCICORE=y
 # CONFIG_MFD_PCF50633 is not set
 CONFIG_PCF50633_ADC=m
 CONFIG_PCF50633_GPIO=m
-CONFIG_AB3100_CORE=m
+# CONFIG_AB3100_CORE is not set
 CONFIG_INPUT_PCF50633_PMU=m
 CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
 CONFIG_CHARGER_PCF50633=m
-CONFIG_REGULATOR_PCF50633=m
 CONFIG_RTC_DRV_PCF50633=m
 
 CONFIG_MFD_SM501=m
 CONFIG_MFD_SM501_GPIO=y
 # CONFIG_MFD_TC6393XB is not set
 CONFIG_MFD_WM8400=m
-CONFIG_MFD_WM8350_I2C=m
-CONFIG_MFD_WM8350=m
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_WM8350 is not set
 # CONFIG_MFD_WM831X is not set
-CONFIG_AB3100_OTP=m
+# CONFIG_AB3100_OTP is not set
+# CONFIG_MFD_TIMBERDALE is not set
+# CONFIG_MFD_WM8994 is not set
+# CONFIG_MFD_88PM860X is not set
+# CONFIG_LPC_SCH is not set
+# CONFIG_HTC_I2CPLD is not set
+# CONFIG_MFD_MAX8925 is not set
 
 #
 # File systems
@@ -3277,7 +3195,6 @@ CONFIG_EXT4_FS=y
 CONFIG_EXT4_FS_XATTR=y
 CONFIG_EXT4_FS_POSIX_ACL=y
 CONFIG_EXT4_FS_SECURITY=y
-CONFIG_EXT4DEV_COMPAT=y
 CONFIG_JBD2=y
 CONFIG_FS_MBCACHE=y
 CONFIG_REISERFS_FS=m
@@ -3296,7 +3213,6 @@ CONFIG_XFS_FS=m
 # CONFIG_XFS_RT is not set
 CONFIG_XFS_QUOTA=y
 CONFIG_XFS_POSIX_ACL=y
-CONFIG_XFS_SECURITY=y
 CONFIG_MINIX_FS=m
 CONFIG_ROMFS_FS=m
 CONFIG_QUOTA=y
@@ -3312,6 +3228,8 @@ CONFIG_AUTOFS4_FS=m
 CONFIG_EXOFS_FS=m
 # CONFIG_EXOFS_DEBUG is not set
 CONFIG_NILFS2_FS=m
+CONFIG_LOGFS=m
+CONFIG_CEPH_FS=m
 
 CONFIG_FSCACHE=m
 CONFIG_FSCACHE_STATS=y
@@ -3380,7 +3298,6 @@ CONFIG_SQUASHFS=m
 CONFIG_VXFS_FS=m
 # CONFIG_HPFS_FS is not set
 CONFIG_QNX4FS_FS=m
-# CONFIG_QNX4FS_RW is not set
 CONFIG_SYSV_FS=m
 CONFIG_UFS_FS=m
 # CONFIG_UFS_FS_WRITE is not set
@@ -3400,21 +3317,17 @@ CONFIG_NFS_V3=y
 CONFIG_NFS_V3_ACL=y
 CONFIG_NFS_V4=y
 CONFIG_NFS_V4_1=y
-CONFIG_NFS_DIRECTIO=y
 CONFIG_NFSD=m
 CONFIG_NFSD_V3=y
 CONFIG_NFSD_V3_ACL=y
 CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
 CONFIG_NFS_FSCACHE=y
 CONFIG_LOCKD=m
 CONFIG_LOCKD_V4=y
 CONFIG_EXPORTFS=m
 CONFIG_SUNRPC=m
-CONFIG_SUNRPC_BIND34=y
 CONFIG_SUNRPC_GSS=m
 CONFIG_SUNRPC_XPRT_RDMA=m
-# CONFIG_SUNRPC_REGISTER_V4 is not set
 CONFIG_RPCSEC_GSS_KRB5=m
 CONFIG_RPCSEC_GSS_SPKM3=m
 # CONFIG_SMB_FS is not set
@@ -3439,7 +3352,6 @@ CONFIG_NCPFS_SMALLDOS=y
 CONFIG_NCPFS_NLS=y
 CONFIG_NCPFS_EXTRAS=y
 CONFIG_CODA_FS=m
-# CONFIG_CODA_FS_OLD_API is not set
 # CONFIG_AFS_FS is not set
 # CONFIG_AF_RXRPC is not set
 
@@ -3449,8 +3361,6 @@ CONFIG_OCFS2_FS=m
 CONFIG_OCFS2_FS_O2CB=m
 CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
 # CONFIG_OCFS2_FS_STATS is not set
-# CONFIG_OCFS2_COMPAT_JBD is not set
-CONFIG_OCFS2_FS_POSIX_ACL=y
 
 CONFIG_BTRFS_FS=m
 CONFIG_BTRFS_FS_POSIX_ACL=y
@@ -3572,18 +3482,13 @@ CONFIG_SECURITY=y
 CONFIG_SECURITY_NETWORK=y
 CONFIG_SECURITY_NETWORK_XFRM=y
 # CONFIG_SECURITY_PATH is not set
-CONFIG_SECURITY_CAPABILITIES=y
-CONFIG_SECURITY_FILE_CAPABILITIES=y
-# CONFIG_SECURITY_ROOTPLUG is not set
 CONFIG_SECURITY_SELINUX=y
 CONFIG_SECURITY_SELINUX_BOOTPARAM=y
 CONFIG_SECURITY_SELINUX_DISABLE=y
 CONFIG_SECURITY_SELINUX_DEVELOP=y
 CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1
 CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
-CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT=y
 CONFIG_SECURITY_SELINUX_AVC_STATS=y
-CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=65536
 # CONFIG_SECURITY_SMACK is not set
 # CONFIG_SECURITY_TOMOYO is not set
 CONFIG_AUDIT=y
@@ -3652,9 +3557,9 @@ CONFIG_CRYPTO_GHASH=m
 CONFIG_CRYPTO_ANSI_CPRNG=m
 CONFIG_CRYPTO_DEV_HIFN_795X=m
 CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
+CONFIG_CRYPTO_PCRYPT=m
 
 # Random number generation
-CONFIG_CRYPTO_PRNG=m
 
 #
 # Library routines
@@ -3732,7 +3637,6 @@ CONFIG_PROC_EVENTS=y
 
 CONFIG_IBMASR=m
 
-CONFIG_PM_LEGACY=y
 CONFIG_PM_DEBUG=y
 CONFIG_PM_TRACE=y
 # CONFIG_PM_VERBOSE is not set
@@ -3757,7 +3661,6 @@ CONFIG_SCSI_ARCMSR_AER=y
 # CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
 # CONFIG_SCSI_NCR53C406A is not set
 # CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PSI240I is not set
 # CONFIG_SCSI_QLOGIC_FAS is not set
 # CONFIG_SCSI_SYM53C416 is not set
 # CONFIG_SCSI_T128 is not set
@@ -3845,23 +3748,21 @@ CONFIG_RADIO_ADAPTERS=y
 # CONFIG_RADIO_TEA5764 is not set
 # CONFIG_RADIO_TYPHOON is not set
 # CONFIG_RADIO_ZOLTRIX is not set
+# CONFIG_RADIO_SAA7706H is not set
 
 # CONFIG_SND_OPL4_LIB is not set
-# CONFIG_SND_AD1848_LIB is not set
 # CONFIG_SND_AD1816A is not set
 # CONFIG_SND_AD1848 is not set
 # CONFIG_SND_CS4231 is not set
-# CONFIG_SND_CS4232 is not set
-CONFIG_SND_CS4231_LIB=m
 CONFIG_SND_CS4236=m
 # CONFIG_SND_ES968 is not set
 # CONFIG_SND_ES1688 is not set
 # CONFIG_SND_ES18XX is not set
-# CONFIG_SND_GUS_SYNTH is not set
 # CONFIG_SND_GUSCLASSIC is not set
 # CONFIG_SND_GUSEXTREME is not set
 # CONFIG_SND_GUSMAX is not set
 # CONFIG_SND_INTERWAVE is not set
+# CONFIG_SND_JAZZ16 is not set
 # CONFIG_SND_INTERWAVE_STB is not set
 # CONFIG_SND_OPTI92X_AD1848 is not set
 # CONFIG_SND_OPTI92X_CS4231 is not set
@@ -3895,25 +3796,18 @@ CONFIG_SND_INDIGODJX=m
 
 ## END of ISA options.
 
-# CONFIG_FORCED_INLINING is not set
 
 CONFIG_MIGRATION=y
-CONFIG_RESOURCES_64BIT=y
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
 # CONFIG_LEDS_AMS_DELTA is not set
-# CONFIG_LEDS_CORGI is not set
-# CONFIG_LEDS_IXP4XX is not set
 # CONFIG_LEDS_LOCOMO is not set
 # CONFIG_LEDS_NET48XX is not set
 # CONFIG_LEDS_PCA9532 is not set
 # CONFIG_LEDS_PCA955X is not set
-# CONFIG_LEDS_LP5521 is not set
 # CONFIG_LEDS_BD2802 is not set
 # CONFIG_LEDS_S3C24XX is not set
-# CONFIG_LEDS_SPITZ is not set
-# CONFIG_LEDS_TOSA is not set
-CONFIG_LEDS_HP_DISK=m
+CONFIG_LEDS_DELL_NETBOOKS=m
 CONFIG_LEDS_TRIGGERS=y
 CONFIG_LEDS_TRIGGER_TIMER=m
 CONFIG_LEDS_TRIGGER_IDE_DISK=y
@@ -3942,10 +3836,8 @@ CONFIG_UTRACE=y
 CONFIG_FTRACE=y
 # CONFIG_IRQSOFF_TRACER is not set
 CONFIG_SCHED_TRACER=y
-CONFIG_PROCESS_TRACER=y
 CONFIG_CONTEXT_SWITCH_TRACER=y
 CONFIG_WORKQUEUE_TRACER=y
-CONFIG_EVENT_TRACER=y
 CONFIG_FTRACE_SYSCALLS=y
 CONFIG_KMEMTRACE=y
 CONFIG_FTRACE_MCOUNT_RECORD=y
@@ -3953,8 +3845,12 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
 # CONFIG_TRACE_BRANCH_PROFILING is not set
 CONFIG_FUNCTION_PROFILER=y
 CONFIG_RING_BUFFER_BENCHMARK=m
+CONFIG_FUNCTION_TRACER=y
+CONFIG_STACK_TRACER=y
+CONFIG_DYNAMIC_FTRACE=y
 
 CONFIG_KPROBES=y
+CONFIG_OPTPROBES=y
 
 # CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
 
@@ -3992,12 +3888,10 @@ CONFIG_UIO_PDRV_GENIRQ=m
 CONFIG_UIO_AEC=m
 CONFIG_UIO_SERCOS3=m
 CONFIG_UIO_PCI_GENERIC=m
+# CONFIG_UIO_NETX is not set
 
-CONFIG_INSTRUMENTATION=y
-CONFIG_MARKERS=y
 # CONFIG_CRC7 is not set
 
-CONFIG_DEFAULT_RELATIME=y
 
 # LIRC
 CONFIG_INPUT_LIRC=m
@@ -4027,7 +3921,6 @@ CONFIG_R6040=m
 
 CONFIG_BNX2X=m
 CONFIG_NOZOMI=m
-CONFIG_PCF8575=m
 # CONFIG_TPS65010 is not set
 # CONFIG_DEBUG_SECTION_MISMATCH is not set
 # CONFIG_KPROBES_SANITY_TEST is not set
@@ -4036,7 +3929,6 @@ CONFIG_LATENCYTOP=y
 CONFIG_RESOURCE_COUNTERS=y
 # CONFIG_COMPAT_BRK is not set
 
-CONFIG_ACPI_CUSTOM_DSDT_INITRD=y
 
 #FIXME: x86 generic?
 CONFIG_LEDS_CLEVO_MAIL=m
@@ -4050,7 +3942,6 @@ CONFIG_ENCLOSURE_SERVICES=m
 CONFIG_ISL29003=m
 CONFIG_IPWIRELESS=m
 CONFIG_RTC_DRV_DS1511=m
-CONFIG_CGROUP_MEM_CONT=y
 
 # CONFIG_BLK_DEV_XIP is not set
 CONFIG_MEMSTICK=m
@@ -4076,7 +3967,6 @@ CONFIG_OPTIMIZE_INLINING=y
 
 # CONFIG_GPIOLIB is not set
 
-CONFIG_UNEVICTABLE_LRU=y
 
 CONFIG_NETFILTER_TPROXY=m
 CONFIG_NETFILTER_XT_TARGET_TPROXY=m
@@ -4104,22 +3994,8 @@ CONFIG_W1_SLAVE_BQ27000=m
 CONFIG_IT87_WDT=m
 CONFIG_W83697UG_WDT=m
 
-CONFIG_REGULATOR=y
+# CONFIG_REGULATOR is not set
 # CONFIG_REGULATOR_DEBUG is not set
-CONFIG_REGULATOR_FIXED_VOLTAGE=m
-# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
-CONFIG_REGULATOR_BQ24022=m
-CONFIG_REGULATOR_WM8350=m
-CONFIG_REGULATOR_WM8400=m
-CONFIG_REGULATOR_DA903X=m
-CONFIG_REGULATOR_USERSPACE_CONSUMER=m
-CONFIG_REGULATOR_MAX1586=m
-CONFIG_REGULATOR_LP3971=m
-CONFIG_REGULATOR_AB3100=m
-CONFIG_REGULATOR_TPS65023=m
-CONFIG_REGULATOR_TPS6507X=m
-CONFIG_REGULATOR_WM831X=m
-CONFIG_REGULATOR_MAX8660=m
 
 CONFIG_WM8350_POWER=m
 
@@ -4142,41 +4018,29 @@ CONFIG_STAGING=y
 # CONFIG_STAGING_EXCLUDE_BUILD is not set
 # CONFIG_ET131X is not set
 # CONFIG_SLICOSS is not set
-# CONFIG_SXG is not set
-# CONFIG_ME4000 is not set
-# CONFIG_MEILHAUS is not set
 # CONFIG_VIDEO_GO7007 is not set
 # CONFIG_USB_IP_COMMON is not set
+# CONFIG_DT3155 is not set
 # CONFIG_W35UND is not set
 # CONFIG_PRISM2_USB is not set
 # CONFIG_ECHO is not set
 CONFIG_USB_ATMEL=m
 # CONFIG_POCH is not set
-# CONFIG_AGNX is not set
 # CONFIG_OTUS is not set
 # CONFIG_RT2860 is not set
 # CONFIG_RT2870 is not set
-# CONFIG_BENET is not set
 # CONFIG_COMEDI is not set
 # CONFIG_ASUS_OLED is not set
 # CONFIG_PANEL is not set
 # CONFIG_ALTERA_PCIE_CHDMA is not set
-# CONFIG_RTL8187SE is not set
 # CONFIG_INPUT_MIMIO is not set
 # CONFIG_TRANZPORT is not set
-# CONFIG_EPL is not set
 # CONFIG_POHMELFS is not set
-# CONFIG_USB_SERIAL_ATEN2011 is not set
 # CONFIG_B3DFG is not set
-# CONFIG_DST is not set
 # CONFIG_IDE_PHISON is not set
 # CONFIG_PLAN9AUTH is not set
-# CONFIG_HECI is not set
 # CONFIG_LINE6_USB is not set
-# CONFIG_USB_SERIAL_QUATECH_ESU100 is not set
-# CONFIG_RT3070 is not set
 # CONFIG_RTL8192SU is not set
-# CONFIG_COWLOOP is not set
 # CONFIG_IIO is not set
 # CONFIG_VME_BUS is not set
 # CONFIG_RAR_REGISTER is not set
@@ -4185,7 +4049,6 @@ CONFIG_USB_ATMEL=m
 # CONFIG_RTL8192E is not set
 # CONFIG_INPUT_GPIO is not set
 # CONFIG_VIDEO_CX25821 is not set
-# CONFIG_RT3090 is not set
 # CONFIG_HYPERV is not set
 # CONFIG_R8187SE is not set
 # CONFIG_RTL8192U is not set
@@ -4196,19 +4059,12 @@ CONFIG_USB_ATMEL=m
 #
 # Android
 #
-# CONFIG_ANDROID is not set
-# CONFIG_ANDROID_BINDER_IPC is not set
-# CONFIG_ANDROID_LOGGER is not set
-# CONFIG_ANDROID_RAM_CONSOLE is not set
-# CONFIG_ANDROID_LOW_MEMORY_KILLER is not set
-# CONFIG_ANDROID_TIMED_GPIO is not set
 
 # CONFIG_DEBUG_VIRTUAL is not set
 # CONFIG_RCU_CPU_STALL_DETECTOR is not set
 # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
 # CONFIG_FUNCTION_GRAPH_TRACER is not set
 # CONFIG_BOOT_TRACER is not set
-# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
 CONFIG_EARLY_PRINTK_DBGP=y
 
 CONFIG_SECURITYFS=y
@@ -4240,6 +4096,7 @@ CONFIG_SLOW_WORK_DEBUG=y
 CONFIG_STRIP_ASM_SYMS=y
 
 # CONFIG_RCU_FANOUT_EXACT is not set
+CONFIG_RCU_FAST_NO_HZ=y
 
 CONFIG_KSM=y
 CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
@@ -4252,13 +4109,14 @@ CONFIG_IEEE802154_FAKEHARD=m
 
 # CONFIG_GCOV_KERNEL is not set
 
-CONFIG_PPS=m
+### is this generally useful?
+# CONFIG_PPS is not set
+# CONFIG_PPS_CLIENT_KTIMER is not set
+# CONFIG_PPS_CLIENT_LDISC is not set
 # CONFIG_PPS_DEBUG is not set
 
 # CONFIG_USB_SERIAL_QUATECH2 is not set
 # CONFIG_VT6655 is not set
-# CONFIG_USB_CPC is not set
-# CONFIG_RDC_17F3101X is not set
 # CONFIG_FB_UDL is not set
 
 # DEBUG options that don't get enabled/disabled with 'make debug/release'
@@ -4306,6 +4164,8 @@ CONFIG_BLK_DEV_DRBD=m
 # CONFIG_GPIO_PCF857X is not set
 # CONFIG_GPIO_CS5535 is not set
 # CONFIG_GPIO_ADP5588 is not set
+# CONFIG_GPIO_IT8761E is not set
+# CONFIG_GPIO_MAX7300 is not set
 # CONFIG_UCB1400_CORE is not set
 # CONFIG_RADIO_MIROPCM20 is not set
 # CONFIG_USB_GPIO_VBUS is not set


Index: config-ia64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/config-ia64-generic,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -p -r1.27 -r1.28
--- config-ia64-generic	28 Sep 2009 22:57:22 -0000	1.27
+++ config-ia64-generic	9 Jul 2010 09:09:11 -0000	1.28
@@ -8,9 +8,6 @@
 CONFIG_IA64=y
 CONFIG_64BIT=y
 # CONFIG_XEN is not set
-# CONFIG_ARCH_XEN is not set
-# CONFIG_XEN_PRIVILEGED_GUEST is not set
-# CONFIG_XEN_VT is not set
 CONFIG_MMU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
 CONFIG_EFI=y
@@ -56,7 +53,6 @@ CONFIG_EFI_PCDP=y
 #
 # IDE chipset support/bugfixes
 #
-CONFIG_IDE_MAX_HWIFS=4
 CONFIG_BLK_DEV_SGIIOC4=y
 
 #
@@ -104,7 +100,6 @@ CONFIG_AGP_SGI_TIOCA=y
 # SGI
 #
 CONFIG_SGI_SNSC=y
-CONFIG_IA64_SGI_SN_XP=y
 CONFIG_SGI_TIOCX=y
 CONFIG_SGI_MBCS=m
 CONFIG_SGI_IOC3=m
@@ -128,12 +123,10 @@ CONFIG_ACPI_AC=y
 # CONFIG_ACPI_ASUS is not set
 CONFIG_ACPI_PROCFS_POWER=y
 CONFIG_ACPI_SYSFS_POWER=y
-# CONFIG_ACPI_BAY is not set
 # CONFIG_ACPI_BATTERY is not set
 CONFIG_ACPI_BLACKLIST_YEAR=0
 CONFIG_ACPI_BUTTON=y
 # CONFIG_ACPI_DOCK is not set
-CONFIG_ACPI_EC=y
 CONFIG_ACPI_FAN=y
 CONFIG_ACPI_HOTPLUG_MEMORY=y
 CONFIG_ACPI_NUMA=y
@@ -141,7 +134,6 @@ CONFIG_ACPI_POWER=y
 CONFIG_ACPI_PROCESSOR=y
 CONFIG_ACPI_PROCFS=y
 CONFIG_ACPI_SLEEP=y
-CONFIG_ACPI_SYSTEM=y
 CONFIG_ACPI_THERMAL=y
 # CONFIG_ACPI_TOSHIBA is not set
 CONFIG_ACPI_VIDEO=m
@@ -177,7 +169,6 @@ CONFIG_IA64_ACPI_CPUFREQ=m
 
 CONFIG_NODES_SHIFT=10
 
-# CONFIG_BCM43XX is not set
 
 CONFIG_HW_RANDOM_INTEL=m
 


Index: config-nodebug
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/config-nodebug,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -p -r1.52 -r1.53
--- config-nodebug	26 Apr 2010 21:50:38 -0000	1.52
+++ config-nodebug	9 Jul 2010 09:09:11 -0000	1.53
@@ -8,6 +8,7 @@ CONFIG_SND_PCM_XRUN_DEBUG=y
 # CONFIG_PROVE_LOCKING is not set
 # CONFIG_DEBUG_VM is not set
 # CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_PROVE_RCU is not set
 
 # CONFIG_FAULT_INJECTION is not set
 # CONFIG_FAILSLAB is not set
@@ -63,10 +64,6 @@ CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
 
 # CONFIG_JBD2_DEBUG is not set
 
-# CONFIG_FUNCTION_TRACER is not set
-# CONFIG_STACK_TRACER is not set
-# CONFIG_DYNAMIC_FTRACE is not set
-
 # CONFIG_DEBUG_CFQ_IOSCHED is not set
 
 # CONFIG_DRBD_FAULT_INJECTION is not set
@@ -76,3 +73,11 @@ CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
 
 # CONFIG_DEBUG_OBJECTS_WORK is not set
 # CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set
+
+# CONFIG_DMADEVICES_DEBUG is not set
+# CONFIG_DMADEVICES_VDEBUG is not set
+
+CONFIG_PM_ADVANCED_DEBUG=y
+
+# CONFIG_CEPH_FS_PRETTYDEBUG is not set
+# CONFIG_QUOTA_DEBUG is not set


Index: config-powerpc-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/config-powerpc-generic,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -p -r1.54 -r1.55
--- config-powerpc-generic	25 Jan 2010 14:26:48 -0000	1.54
+++ config-powerpc-generic	9 Jul 2010 09:09:11 -0000	1.55
@@ -35,11 +35,9 @@ CONFIG_HIBERNATION=y
 # CONFIG_RTC is not set
 # CONFIG_GEN_RTC is not set
 # CONFIG_GEN_RTC_X is not set
-CONFIG_RTC_DRV_PPC=y
 CONFIG_RTC_DRV_GENERIC=y
 CONFIG_PROC_DEVICETREE=y
 # CONFIG_CMDLINE_BOOL is not set
-CONFIG_ELECTRA_IDE=y
 
 CONFIG_ADB=y
 CONFIG_ADB_PMU=y
@@ -105,7 +103,6 @@ CONFIG_MEMORY_HOTPLUG=y
 # CONFIG_SCSI_DC390T is not set
 # CONFIG_SCSI_BUSLOGIC is not set
 
-CONFIG_USB_HIDINPUT_POWERBOOK=y
 
 # CONFIG_PPC_EARLY_DEBUG is not set
 
@@ -143,13 +140,9 @@ CONFIG_BLK_DEV_IDE=y
 # Please see Documentation/ide.txt for help/info on IDE drives
 #
 # CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-CONFIG_IDEDISK_MULTI_MODE=y
 # CONFIG_BLK_DEV_IDECS is not set
 CONFIG_BLK_DEV_IDECD=m
 # CONFIG_BLK_DEV_IDETAPE is not set
-CONFIG_BLK_DEV_IDEFLOPPY=m
-# CONFIG_BLK_DEV_IDESCSI is not set
 CONFIG_IDE_TASK_IOCTL=y
 #
 # IDE chipset support/bugfixes
@@ -157,7 +150,6 @@ CONFIG_IDE_TASK_IOCTL=y
 # CONFIG_IDE_GENERIC is not set
 # CONFIG_BLK_DEV_IDEPNP is not set
 # CONFIG_BLK_DEV_IDEPCI is not set
-CONFIG_IDEPCI_SHARE_IRQ=y
 # CONFIG_BLK_DEV_AEC62XX is not set
 # CONFIG_BLK_DEV_ALI15X3 is not set
 # CONFIG_BLK_DEV_AMD74XX is not set
@@ -166,7 +158,6 @@ CONFIG_IDEPCI_SHARE_IRQ=y
 # CONFIG_BLK_DEV_CY82C693 is not set
 # CONFIG_BLK_DEV_CS5520 is not set
 # CONFIG_BLK_DEV_CS5530 is not set
-# CONFIG_BLK_DEV_HPT34X is not set
 # CONFIG_BLK_DEV_HPT366 is not set
 # CONFIG_BLK_DEV_JMICRON is not set
 # CONFIG_BLK_DEV_SC1200 is not set
@@ -183,8 +174,6 @@ CONFIG_IDEPCI_SHARE_IRQ=y
 # CONFIG_BLK_DEV_VIA82CXXX is not set
 CONFIG_BLK_DEV_IDE_PMAC=y
 CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y
-CONFIG_BLK_DEV_IDEDMA_PMAC=y
-# CONFIG_IDE_ARM is not set
 CONFIG_BLK_DEV_IDEDMA=y
 # CONFIG_BLK_DEV_HD is not set
 # CONFIG_USB_STORAGE_ISD200 is not set
@@ -242,11 +231,7 @@ CONFIG_EXTRA_TARGETS=""
 # CONFIG_SERIAL_CPM is not set
 # CONFIG_SERIAL_QE is not set
 # CONFIG_I2C_CPM is not set
-# CONFIG_MT9M001_PCA9536_SWITCH is not set
-# CONFIG_MT9V022_PCA9536_SWITCH is not set
-# CONFIG_KGDB_CONSOLE is not set
 
-CONFIG_MDIO_OF_GPIO=m
 
 CONFIG_SERIO_XILINX_XPS_PS2=m
 
@@ -343,3 +328,4 @@ CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m
 # CONFIG_MMC_SDHCI_OF_ESDHC is not set
 # CONFIG_MMC_SDHCI_OF_HLWD is not set
 
+# CONFIG_GPIO_SCH is not set


Index: config-powerpc32-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/config-powerpc32-generic,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -p -r1.37 -r1.38
--- config-powerpc32-generic	11 Jan 2010 19:38:43 -0000	1.37
+++ config-powerpc32-generic	9 Jul 2010 09:09:11 -0000	1.38
@@ -4,9 +4,7 @@ CONFIG_PPC32=y
 # CONFIG_RTAS_PROC is not set
 # CONFIG_PCMCIA_M8XX is not set
 # CONFIG_HOTPLUG_PCI is not set
-CONFIG_CLASSIC32=y
 CONFIG_CPU_FREQ_PMAC=y
-CONFIG_PPC_MULTIPLATFORM=y
 CONFIG_PPC_CHRP=y
 CONFIG_PPC_PMAC=y
 CONFIG_PPC_MPC52xx=y
@@ -19,7 +17,6 @@ CONFIG_SATA_FSL=m
 # busted in .28git1
 # ERROR: "cacheable_memzero" [drivers/net/gianfar_driver.ko] undefined!
 # CONFIG_GIANFAR is not set
-CONFIG_GFAR_NAPI=y
 CONFIG_USB_EHCI_FSL=y
 
 CONFIG_PMAC_APM_EMU=y
@@ -54,7 +51,6 @@ CONFIG_THERM_WINDTUNNEL=m
 CONFIG_THERM_ADT746X=m
 # CONFIG_ANSLCD is not set
 
-CONFIG_SENSORS_M41T00=m
 CONFIG_FB_PLATINUM=y
 CONFIG_FB_VALKYRIE=y
 CONFIG_FB_CT65550=y
@@ -69,7 +65,6 @@ CONFIG_FB_MATROX=y
 # CONFIG_KEXEC is not set
 
 # CONFIG_HVC_RTAS is not set
-# CONFIG_MAMBO is not set
 
 # CONFIG_UDBG_RTAS_CONSOLE is not set
 CONFIG_BRIQ_PANEL=m
@@ -87,7 +82,6 @@ CONFIG_SERIAL_MPC52xx=y
 CONFIG_SERIAL_MPC52xx_CONSOLE=y
 CONFIG_SERIAL_MPC52xx_CONSOLE_BAUD=115200
 # CONFIG_MPC5200_WDT is not set
-CONFIG_83xx_WDT=m
 CONFIG_8xxx_WDT=m
 CONFIG_GEF_WDT=m
 
@@ -121,7 +115,6 @@ CONFIG_PPC_BESTCOMM_GEN_BD=m
 
 CONFIG_FORCE_MAX_ZONEORDER=11
 # CONFIG_PAGE_OFFSET_BOOL is not set
-CONFIG_BLK_DEV_HD_ONLY=y
 # CONFIG_FB_FSL_DIU is not set
 CONFIG_IRQSTACKS=y
 CONFIG_VIRTUALIZATION=y
@@ -178,7 +171,6 @@ CONFIG_MPC8610_HPCD=y
 # drivers/mtd/maps/sbc8240.c: In function 'init_sbc8240_mtd':
 # drivers/mtd/maps/sbc8240.c:172: warning: passing argument 1 of 'simple_map_init' from incompatible pointer type
 # drivers/mtd/maps/sbc8240.c:177: error: 'struct mtd_info' has no member named 'module'
-# CONFIG_MTD_SBC8240 is not set
 
 CONFIG_MTD_NAND_FSL_UPM=m
 


Index: config-powerpc64
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/config-powerpc64,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -p -r1.37 -r1.38
--- config-powerpc64	29 Jun 2010 03:46:15 -0000	1.37
+++ config-powerpc64	9 Jul 2010 09:09:11 -0000	1.38
@@ -3,9 +3,6 @@ CONFIG_WINDFARM_PM91=y
 CONFIG_WINDFARM_PM121=y
 CONFIG_PPC_PMAC64=y
 CONFIG_PPC_MAPLE=y
-CONFIG_PPC_SYSTEMSIM=y
-CONFIG_BLK_DEV_SYSTEMSIM=m
-CONFIG_SYSTEMSIM_NET=m
 CONFIG_PPC_CELL=y
 CONFIG_PPC_IBM_CELL_BLADE=y
 CONFIG_PPC_ISERIES=y
@@ -18,16 +15,12 @@ CONFIG_PPC_CELLEB=y
 CONFIG_PPC_CELL_QPACE=y
 CONFIG_PS3_HTAB_SIZE=20
 # CONFIG_PS3_DYNAMIC_DMA is not set
-# CONFIG_PS3_USE_LPAR_ADDR is not set
 CONFIG_PS3_ADVANCED=y
 CONFIG_PS3_HTAB_SIZE=20
 # CONFIG_PS3_DYNAMIC_DMA is not set
-CONFIG_PS3_USE_LPAR_ADDR=y
 CONFIG_PS3_VUART=y
 CONFIG_PS3_PS3AV=y
 CONFIG_PS3_STORAGE=m
-CONFIG_PS3_STORAGE_EXPECTED_NUM_DRIVES=3
-CONFIG_PS3_STORAGE_MAX_SPINUP_WAIT_TIME=10
 CONFIG_PS3_DISK=m
 CONFIG_PS3_ROM=m
 CONFIG_PS3_FLASH=m
@@ -69,15 +62,11 @@ CONFIG_SCSI_IPR_DUMP=y
 CONFIG_SPIDER_NET=m
 CONFIG_HVC_RTAS=y
 CONFIG_HVC_ISERIES=y
-CONFIG_MAMBO=y
-CONFIG_MAMBO_DISK=m
-CONFIG_MAMBO_NET=m
 CONFIG_CBE_RAS=y
 
 # iSeries device drivers
 #
 CONFIG_ISERIES_VETH=m
-# CONFIG_VIOCONS is not set
 CONFIG_VIODASD=m
 CONFIG_VIOCD=m
 CONFIG_VIOTAPE=m
@@ -152,7 +141,6 @@ CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
 # CONFIG_VIRQ_DEBUG is not set
 CONFIG_ELECTRA_CF=m
 
-CONFIG_SPU_TRACE=m
 CONFIG_MTD_NAND_PASEMI=m
 CONFIG_EDAC_CELL=m
 CONFIG_EDAC_CPC925=m
@@ -160,7 +148,6 @@ CONFIG_FRAME_WARN=2048
 
 CONFIG_PHYP_DUMP=y
 CONFIG_FORCE_MAX_ZONEORDER=13
-CONFIG_BLK_DEV_HD_ONLY=y
 CONFIG_VIRTUALIZATION=y
 
 CONFIG_VSX=y


Index: config-rhel-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/config-rhel-generic,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -p -r1.17 -r1.18
--- config-rhel-generic	9 Dec 2008 22:43:52 -0000	1.17
+++ config-rhel-generic	9 Jul 2010 09:09:11 -0000	1.18
@@ -57,7 +57,6 @@
 # CONFIG_SND_AD1816A is not set
 # CONFIG_SND_AD1848 is not set
 # CONFIG_SND_CS4231 is not set
-# CONFIG_SND_CS4232 is not set
 # CONFIG_SND_CS4236 is not set
 # CONFIG_SND_ES968 is not set
 # CONFIG_SND_ES1688 is not set
@@ -103,7 +102,6 @@
 
 # CONFIG_ROCKETPORT is not set
 # CONFIG_R3964 is not set
-# CONFIG_TIPAR is not set
 
 # CONFIG_JOYSTICK_ANALOG is not set
 # CONFIG_JOYSTICK_A3D is not set
@@ -117,8 +115,6 @@
 # CONFIG_JOYSTICK_SIDEWINDER is not set
 # CONFIG_JOYSTICK_TMDC is not set
 # CONFIG_JOYSTICK_IFORCE is not set
-# CONFIG_JOYSTICK_IFORCE_USB=y
-# CONFIG_JOYSTICK_IFORCE_232=y
 # CONFIG_JOYSTICK_WARRIOR is not set
 # CONFIG_JOYSTICK_MAGELLAN is not set
 # CONFIG_JOYSTICK_SPACEORB is not set
@@ -137,7 +133,6 @@
 # CONFIG_RADIO_MAXIRADIO is not set
 # CONFIG_RADIO_MAESTRO is not set
 # CONFIG_RADIO_MIROPCM20 is not set
-# CONFIG_RADIO_MIROPCM20_RDS is not set
 # CONFIG_RADIO_SF16FMI is not set
 # CONFIG_RADIO_SF16FMR2 is not set
 # CONFIG_RADIO_TERRATEC is not set
@@ -145,7 +140,6 @@
 # CONFIG_RADIO_TYPHOON is not set
 # CONFIG_RADIO_ZOLTRIX is not set
 
-# CONFIG_TUNER_3036 is not set
 
 # CONFIG_VIDEO_PMS is not set
 # CONFIG_VIDEO_BWQCAM is not set
@@ -165,7 +159,6 @@
 # CONFIG_VIDEO_MEYE is not set
 # CONFIG_VIDEO_SAA7134 is not set
 # CONFIG_VIDEO_MXB is not set
-# CONFIG_VIDEO_DPC is not set
 # CONFIG_VIDEO_HEXIUM_ORION is not set
 # CONFIG_VIDEO_HEXIUM_GEMINI is not set
 # CONFIG_VIDEO_CX88 is not set
@@ -190,7 +183,6 @@
 # CONFIG_FB_ASILIANT is not set
 # CONFIG_FB_HGA_ACCEL is not set
 # CONFIG_FB_3DFX_ACCEL is not set
-# CONFIG_FB_TRIDENT_ACCEL is not set
 
 # CONFIG_JFS_FS is not set
 # CONFIG_NCP_FS is not set


Index: config-s390x
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/config-s390x,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -p -r1.22 -r1.23
--- config-s390x	2 Jun 2010 13:21:12 -0000	1.22
+++ config-s390x	9 Jul 2010 09:09:11 -0000	1.23
@@ -17,16 +17,13 @@ CONFIG_RWSEM_XCHGADD_ALGORITHM=y
 
 CONFIG_LOG_BUF_SHIFT=16
 CONFIG_NO_IDLE_HZ=y
-CONFIG_NO_IDLE_HZ_INIT=y
 
 CONFIG_SMP=y
 
 #
 # I/O subsystem configuration
 #
-CONFIG_MACHCHK_WARNING=y
 CONFIG_QDIO=m
-# CONFIG_QDIO_DEBUG is not set
 
 #
 # Misc
@@ -39,7 +36,6 @@ CONFIG_PFAULT=y
 CONFIG_SHARED_KERNEL=y
 CONFIG_CMM=m
 CONFIG_CMM_PROC=y
-CONFIG_VIRT_TIMER=y
 # CONFIG_NETIUCV is not set
 CONFIG_SMSGIUCV=m
 
@@ -104,7 +100,6 @@ CONFIG_S390_TAPE_34XX=m
 # Token Ring devices
 #
 CONFIG_TR=y
-# CONFIG_SHAPER is not set
 CONFIG_NETCONSOLE=m
 
 #
@@ -120,15 +115,12 @@ CONFIG_CTC=m
 CONFIG_IUCV=m
 CONFIG_QETH=m
 CONFIG_QETH_IPV6=y
-CONFIG_QETH_VLAN=y
 CONFIG_CCWGROUP=m
 
 # CONFIG_IRDA is not set
 # CONFIG_BT is not set
 # CONFIG_WIRELESS_EXT is not set
-# CONFIG_WLAN_80211 is not set
 # CONFIG_MAC80211 is not set
-# CONFIG_IEEE80211 is not set
 # CONFIG_B44 is not set
 
 #
@@ -179,7 +171,6 @@ CONFIG_VMCP=m
 # CONFIG_ATA_OVER_ETH is not set
 # CONFIG_MII is not set
 
-# CONFIG_BOOT_DELAY is not set
 
 CONFIG_STACK_GUARD=256
 CONFIG_CMM_IUCV=y
@@ -192,7 +183,6 @@ CONFIG_MONWRITER=m
 CONFIG_ZCRYPT=m
 CONFIG_ZCRYPT_MONOLITHIC=y
 
-CONFIG_S390_SWITCH_AMODE=y
 CONFIG_S390_EXEC_PROTECT=y
 CONFIG_AFIUCV=m
 CONFIG_S390_PRNG=m
@@ -203,7 +193,6 @@ CONFIG_S390_VMUR=m
 
 CONFIG_NO_HZ=y
 CONFIG_HIGH_RES_TIMERS=y
-CONFIG_PAGE_STATES=y
 CONFIG_CTCM=m
 CONFIG_QETH_L2=m
 CONFIG_QETH_L3=m
@@ -234,4 +223,6 @@ CONFIG_PERF_COUNTERS=y
 CONFIG_PERF_EVENTS=y
 CONFIG_EVENT_PROFILE=y
 
+CONFIG_SMSGIUCV_EVENT=m
+
 # CONFIG_PREEMPT_TRACER is not set


Index: config-sparc64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/config-sparc64-generic,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -p -r1.32 -r1.33
--- config-sparc64-generic	5 Apr 2010 20:01:07 -0000	1.32
+++ config-sparc64-generic	9 Jul 2010 09:09:11 -0000	1.33
@@ -35,13 +35,9 @@ CONFIG_NR_CPUS=256
 CONFIG_US3_FREQ=m
 CONFIG_US2E_FREQ=m
 CONFIG_SUN_OPENPROMFS=m
-CONFIG_SPARC32_COMPAT=y
 CONFIG_COMPAT=y
 CONFIG_UID16=y
 CONFIG_BINFMT_ELF32=y
-CONFIG_BINFMT_AOUT32=y
-CONFIG_SUNOS_EMUL=y
-CONFIG_SOLARIS_EMUL=m
 CONFIG_ENVCTRL=m
 CONFIG_DISPLAY7SEG=m
 CONFIG_WATCHDOG_CP1XXX=m
@@ -50,14 +46,10 @@ CONFIG_WATCHDOG_RIO=m
 # CONFIG_PREVENT_FIRMWARE_BUILD is not set
 # CONFIG_PARPORT is not set
 # CONFIG_BLK_DEV_FD is not set
-# CONFIG_LIRC_PVR150 is not set
 # CONFIG_LIRC_PARALLEL is not set
 # CONFIG_I2C_NFORCE2 is not set
 # CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_PROSAVAGE is not set
-# CONFIG_I2C_SAVAGE4 is not set
 # CONFIG_I2C_SIMTEC is not set
-# CONFIG_I2C_VOODOO3 is not set
 CONFIG_I2C_ALI1535=m
 # CONFIG_VGASTATE is not set
 # CONFIG_FB_DDC is not set
@@ -83,7 +75,6 @@ CONFIG_FB_PM2=y
 CONFIG_FB_P9100=y
 # CONFIG_FB_LEO is not set
 CONFIG_FB_XVR500=y
-CONFIG_FB_XVR1000=y
 CONFIG_FB_XVR2500=y
 # CONFIG_VGASTATE is not set
 # CONFIG_FB_DDC is not set
@@ -93,7 +84,6 @@ CONFIG_FB_XVR2500=y
 # CONFIG_AGP is not set
 # CONFIG_DRM_NOUVEAU is not set
 # CONFIG_MDA_CONSOLE is not set
-# CONFIG_PROM_CONSOLE is not set
 CONFIG_FONTS=y
 # CONFIG_FONT_8x8 is not set
 # CONFIG_FONT_8x16 is not set
@@ -115,15 +105,12 @@ CONFIG_SERIAL_SUNSAB=y
 CONFIG_SERIAL_SUNSAB_CONSOLE=y
 CONFIG_SERIAL_SUNHV=y
 CONFIG_SUN_OPENPROMIO=y
-CONFIG_SUN_MOSTEK_RTC=y
 CONFIG_OBP_FLASH=m
-# CONFIG_SUN_VIDEOPIX is not set
 # CONFIG_SERIO_SERPORT is not set
 CONFIG_BLK_DEV_FD=y
 CONFIG_SUNVDC=m
 CONFIG_SUNVNET=m
 # CONFIG_BLK_DEV_AEC62XX is not set
-# CONFIG_BLK_DEV_HPT34X is not set
 # CONFIG_BLK_DEV_HPT366 is not set
 # CONFIG_BLK_DEV_PDC202XX_OLD is not set
 # CONFIG_BLK_DEV_PDC202XX_NEW is not set
@@ -145,9 +132,6 @@ CONFIG_SUNQE=m
 # CONFIG_DM9102 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_R8169 is not set
-CONFIG_ATM_FORE200E_SBA=y
-CONFIG_ATM_FORE200E_SBA_DEFAULT_FW=y
-# CONFIG_ATM_FORE200E_SBA_FW is not set
 CONFIG_ATM_FORE200E_USE_TASKLET=y
 CONFIG_ATM_FORE200E_DEBUG=0
 CONFIG_ATM_FORE200E_TX_RETRY=16
@@ -162,7 +146,6 @@ CONFIG_SND_SUN_CS4231=m
 # CONFIG_SND_SUN_DBRI is not set
 CONFIG_PARPORT_SUNBPP=m
 CONFIG_LOGO_SUN_CLUT224=y
-CONFIG_SUN_BPP=m
 CONFIG_MTD_SUN_UFLASH=m
 CONFIG_MYRI_SBUS=m
 # CONFIG_SGI_IOC4 is not set
@@ -213,3 +196,6 @@ CONFIG_EVENT_PROFILE=y
 
 CONFIG_EARLYFB=y
 CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m
+
+CONFIG_GRETH=m
+CONFIG_FB_XVR1000=y


Index: config-x86-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/config-x86-generic,v
retrieving revision 1.95
retrieving revision 1.96
diff -u -p -r1.95 -r1.96
--- config-x86-generic	30 Jun 2010 12:59:31 -0000	1.95
+++ config-x86-generic	9 Jul 2010 09:09:11 -0000	1.96
@@ -8,13 +8,10 @@ CONFIG_UID16=y
 #
 # Enable summit and co via the generic arch
 #
-# CONFIG_X86_PC is not set
-CONFIG_X86_GENERICARCH=y
 CONFIG_X86_EXTENDED_PLATFORM=y
 CONFIG_X86_32_NON_STANDARD=y
 
 # CONFIG_X86_ELAN is not set
-# CONFIG_X86_VOYAGER is not set
 # CONFIG_X86_NUMAQ is not set
 # CONFIG_X86_SUMMIT is not set
 CONFIG_X86_BIGSMP=y
@@ -36,7 +33,6 @@ CONFIG_M686=y
 # CONFIG_MK8 is not set
 # CONFIG_MCRUSOE is not set
 # CONFIG_MWINCHIPC6 is not set
-# CONFIG_MWINCHIP2 is not set
 # CONFIG_MWINCHIP3D is not set
 # CONFIG_MCYRIXIII is not set
 # CONFIG_MVIAC3_2 is not set
@@ -46,24 +42,20 @@ CONFIG_X86_GENERIC=y
 CONFIG_X86_CMPXCHG=y
 CONFIG_X86_L1_CACHE_SHIFT=7
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-CONFIG_X86_PPRO_FENCE=y
+# CONFIG_X86_PPRO_FENCE is not set
 CONFIG_X86_WP_WORKS_OK=y
 CONFIG_X86_INVLPG=y
 CONFIG_X86_BSWAP=y
 CONFIG_X86_POPAD_OK=y
-CONFIG_X86_GOOD_APIC=y
 CONFIG_X86_INTEL_USERCOPY=y
 CONFIG_X86_USE_PPRO_CHECKSUM=y
 CONFIG_HPET=y
 CONFIG_HPET_TIMER=y
-# CONFIG_HPET_RTC_IRQ is not set
 # CONFIG_HPET_MMAP is not set
 CONFIG_X86_LOCAL_APIC=y
 CONFIG_X86_IO_APIC=y
 CONFIG_X86_TSC=y
 CONFIG_X86_MCE=y
-# CONFIG_X86_MCE_NONFATAL is not set
-CONFIG_X86_MCE_P4THERMAL=y
 CONFIG_TOSHIBA=m
 CONFIG_I8K=m
 CONFIG_SONYPI=m
@@ -71,7 +63,6 @@ CONFIG_SONYPI_COMPAT=y
 CONFIG_MICROCODE=m
 CONFIG_X86_MSR=y
 CONFIG_X86_CPUID=y
-# CONFIG_X86_CPU_DEBUG is not set
 CONFIG_EDD=m
 # CONFIG_EDD_OFF is not set
 # CONFIG_NUMA is not set
@@ -121,16 +112,6 @@ CONFIG_SECCOMP=y
 
 CONFIG_CAPI_EICON=y
 
-CONFIG_I2O=m
-CONFIG_I2O_BLOCK=m
-CONFIG_I2O_SCSI=m
-CONFIG_I2O_PROC=m
-CONFIG_I2O_CONFIG=y
-CONFIG_I2O_EXT_ADAPTEC=y
-CONFIG_I2O_EXT_ADAPTEC_DMA64=y
-CONFIG_I2O_CONFIG_OLD_IOCTL=y
-CONFIG_I2O_BUS=m
-
 #
 # APM (Advanced Power Management) BIOS Support
 #
@@ -140,12 +121,10 @@ CONFIG_APM=y
 CONFIG_APM_CPU_IDLE=y
 # CONFIG_APM_DISPLAY_BLANK is not set
 # CONFIG_APM_ALLOW_INTS is not set
-# CONFIG_APM_REAL_MODE_POWER_OFF is not set
 
 #
 # Kernel debugging
 #
-CONFIG_X86_FIND_SMP_CONFIG=y
 CONFIG_X86_MPPARSE=y
 
 CONFIG_ACPI=y
@@ -154,12 +133,10 @@ CONFIG_ACPI_AC=y
 CONFIG_ACPI_PROCFS_POWER=y
 CONFIG_ACPI_SYSFS_POWER=y
 CONFIG_ACPI_BATTERY=y
-CONFIG_ACPI_BAY=y
 CONFIG_ACPI_BLACKLIST_YEAR=1999
 CONFIG_ACPI_BUTTON=y
 CONFIG_ACPI_CONTAINER=m
 CONFIG_ACPI_DOCK=y
-CONFIG_ACPI_EC=y
 CONFIG_ACPI_FAN=y
 CONFIG_ACPI_NUMA=y
 CONFIG_ACPI_PROCESSOR=y
@@ -167,7 +144,6 @@ CONFIG_ACPI_POWER=y
 CONFIG_ACPI_PROCFS=y
 CONFIG_ACPI_SBS=m
 CONFIG_ACPI_SLEEP=y
-CONFIG_ACPI_SYSTEM=y
 CONFIG_ACPI_THERMAL=y
 CONFIG_TOPSTAR_LAPTOP=m
 CONFIG_ACPI_TOSHIBA=m
@@ -195,11 +171,10 @@ CONFIG_CPU_FREQ_STAT=m
 CONFIG_CPU_FREQ_STAT_DETAILS=y
 
 CONFIG_X86_ACPI_CPUFREQ=m
-# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
+CONFIG_X86_PCC_CPUFREQ=m
 # CONFIG_X86_POWERNOW_K6 is not set
 CONFIG_X86_POWERNOW_K7=y
 CONFIG_X86_POWERNOW_K8=m
-CONFIG_X86_POWERNOW_K8_ACPI=y
 # CONFIG_X86_GX_SUSPMOD is not set
 # CONFIG_X86_SPEEDSTEP_CENTRINO is not set
 CONFIG_X86_SPEEDSTEP_ICH=y
@@ -213,9 +188,7 @@ CONFIG_X86_LONGRUN=y
 # e_powersaver is dangerous
 # CONFIG_X86_E_POWERSAVER is not set
 
-CONFIG_X86_SMP=y
 CONFIG_X86_HT=y
-CONFIG_X86_BIOS_REBOOT=y
 CONFIG_X86_TRAMPOLINE=y
 
 #
@@ -270,20 +243,16 @@ CONFIG_I2C_AMD756=m
 CONFIG_I2C_AMD756_S4882=m
 CONFIG_I2C_AMD8111=m
 CONFIG_I2C_I801=m
-CONFIG_I2C_I810=m
 CONFIG_I2C_ISCH=m
 CONFIG_I2C_NFORCE2=m
 CONFIG_I2C_NFORCE2_S4985=m
 CONFIG_I2C_PIIX4=m
-CONFIG_I2C_PROSAVAGE=m
-CONFIG_I2C_SAVAGE4=m
 CONFIG_I2C_SIS5595=m
 CONFIG_I2C_SIS630=m
 CONFIG_I2C_SIS96X=m
 
 CONFIG_I2C_VIA=m
 CONFIG_I2C_VIAPRO=m
-CONFIG_I2C_VOODOO3=m
 
 CONFIG_SCx200_ACB=m
 
@@ -292,6 +261,7 @@ CONFIG_SCx200_ACB=m
 CONFIG_DELL_RBU=m
 CONFIG_DCDBAS=m
 
+CONFIG_GPIO_SCH=m
 CONFIG_PC8736x_GPIO=m
 # CONFIG_NSC_GPIO is not set
 CONFIG_CS5535_GPIO=m
@@ -325,17 +295,16 @@ CONFIG_HW_RANDOM_AMD=m
 CONFIG_HW_RANDOM_GEODE=m
 CONFIG_HW_RANDOM_VIA=m
 
-CONFIG_USB_HIDINPUT_POWERBOOK=y
 
 # CONFIG_COMPAT_VDSO is not set
 
 # CONFIG_SGI_IOC4 is not set
 
 CONFIG_X86_PLATFORM_DEVICES=y
-CONFIG_ACERHDF=m
 CONFIG_ASUS_LAPTOP=m
 CONFIG_COMPAL_LAPTOP=m
 CONFIG_EEEPC_LAPTOP=m
+CONFIG_EEEPC_WMI=m
 CONFIG_FUJITSU_LAPTOP=m
 # CONFIG_FUJITSU_LAPTOP_DEBUG is not set
 CONFIG_MSI_LAPTOP=m
@@ -343,6 +312,7 @@ CONFIG_SONY_LAPTOP=m
 CONFIG_DELL_LAPTOP=m
 CONFIG_ACPI_WMI=m
 CONFIG_ACER_WMI=m
+CONFIG_ACERHDF=m
 CONFIG_TC1100_WMI=m
 CONFIG_HP_WMI=m
 CONFIG_DELL_WMI=m
@@ -367,7 +337,6 @@ CONFIG_VIRTUALIZATION=y
 CONFIG_KVM=m
 CONFIG_KVM_INTEL=m
 CONFIG_KVM_AMD=m
-CONFIG_KVM_TRACE=y
 CONFIG_LGUEST=m
 
 CONFIG_PARAVIRT_GUEST=y
@@ -408,7 +377,6 @@ CONFIG_THINKPAD_ACPI=m
 # CONFIG_THINKPAD_ACPI_DEBUG is not set
 # CONFIG_THINKPAD_ACPI_DEBUGFACILITIES is not set
 CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
-CONFIG_THINKPAD_ACPI_BAY=y
 CONFIG_THINKPAD_ACPI_VIDEO=y
 CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y
 # CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set
@@ -435,6 +403,8 @@ CONFIG_MOUSE_PS2_OLPC=y
 
 CONFIG_STRICT_DEVMEM=y
 
+# CONFIG_NO_BOOTMEM is not set
+
 # CONFIG_MEMTEST is not set
 # CONFIG_MAXSMP is not set
 CONFIG_MTRR_SANITIZER=y
@@ -480,7 +450,6 @@ CONFIG_PERF_COUNTERS=y
 CONFIG_PERF_EVENTS=y
 CONFIG_EVENT_PROFILE=y
 
-# CONFIG_X86_OLD_MCE is not set
 CONFIG_X86_MCE_INTEL=y
 CONFIG_X86_MCE_AMD=y
 # CONFIG_X86_ANCIENT_MCE is not set
@@ -511,3 +480,6 @@ CONFIG_ACPI_CMPC=m
 CONFIG_MSI_WMI=m
 CONFIG_TOSHIBA_BT_RFKILL=m
 # CONFIG_SAMSUNG_LAPTOP is not set
+
+CONFIG_VGA_SWITCHEROO=y
+CONFIG_LPC_SCH=m


Index: config-x86_64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/config-x86_64-generic,v
retrieving revision 1.106
retrieving revision 1.107
diff -u -p -r1.106 -r1.107
--- config-x86_64-generic	17 Jun 2010 09:54:32 -0000	1.106
+++ config-x86_64-generic	9 Jul 2010 09:09:12 -0000	1.107
@@ -10,7 +10,6 @@ CONFIG_X86_EXTENDED_PLATFORM=y
 # CONFIG_X86_UV is not set
 CONFIG_X86_MSR=y
 CONFIG_X86_CPUID=y
-# CONFIG_X86_CPU_DEBUG is not set
 CONFIG_MTRR=y
 CONFIG_NUMA=y
 CONFIG_K8_NUMA=y
@@ -18,7 +17,6 @@ CONFIG_X86_64_ACPI_NUMA=y
 # CONFIG_NUMA_EMU is not set
 CONFIG_NR_CPUS=256
 CONFIG_X86_POWERNOW_K8=m
-CONFIG_X86_POWERNOW_K8_ACPI=y
 CONFIG_X86_P4_CLOCKMOD=m
 CONFIG_IA32_EMULATION=y
 # CONFIG_IA32_AOUT is not set
@@ -45,16 +43,6 @@ CONFIG_EFI_VARS=y
 CONFIG_EFI_PCDP=y
 CONFIG_FB_EFI=y
 
-CONFIG_I2O=m
-CONFIG_I2O_BLOCK=m
-CONFIG_I2O_SCSI=m
-CONFIG_I2O_PROC=m
-CONFIG_I2O_CONFIG=y
-CONFIG_I2O_EXT_ADAPTEC=y
-CONFIG_I2O_EXT_ADAPTEC_DMA64=y
-CONFIG_I2O_CONFIG_OLD_IOCTL=y
-CONFIG_I2O_BUS=m
-
 CONFIG_SECCOMP=y
 
 CONFIG_CAPI_EICON=y
@@ -76,8 +64,8 @@ CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
 CONFIG_CPU_FREQ_TABLE=y
 CONFIG_CPU_FREQ_DEBUG=y
 # CONFIG_X86_SPEEDSTEP_CENTRINO is not set
+CONFIG_X86_PCC_CPUFREQ=m 
 CONFIG_X86_ACPI_CPUFREQ=m
-# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
 CONFIG_CPU_FREQ_STAT=m
 CONFIG_CPU_FREQ_STAT_DETAILS=y
 
@@ -87,12 +75,10 @@ CONFIG_ACPI_AC=y
 CONFIG_ACPI_PROCFS_POWER=y
 CONFIG_ACPI_SYSFS_POWER=y
 CONFIG_ACPI_BATTERY=y
-CONFIG_ACPI_BAY=m
 CONFIG_ACPI_BLACKLIST_YEAR=0
 CONFIG_ACPI_BUTTON=y
 CONFIG_ACPI_CONTAINER=m
 CONFIG_ACPI_DOCK=y
-CONFIG_ACPI_EC=y
 CONFIG_ACPI_FAN=y
 CONFIG_ACPI_HOTPLUG_MEMORY=m
 CONFIG_ACPI_NUMA=y
@@ -103,7 +89,6 @@ CONFIG_ACPI_SLEEP=y
 CONFIG_ACPI_THERMAL=y
 CONFIG_ACPI_TOSHIBA=m
 CONFIG_ACPI_POWER=y
-CONFIG_ACPI_SYSTEM=y
 CONFIG_ACPI_VIDEO=m
 # Disable in F9.
 CONFIG_ACPI_PROC_EVENT=y
@@ -111,7 +96,6 @@ CONFIG_ACPI_POWER_METER=m
 CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
 
 CONFIG_X86_PLATFORM_DEVICES=y
-CONFIG_ACERHDF=m
 CONFIG_ASUS_LAPTOP=m
 CONFIG_COMPAL_LAPTOP=m
 CONFIG_FUJITSU_LAPTOP=m
@@ -120,9 +104,11 @@ CONFIG_MSI_LAPTOP=m
 CONFIG_SONY_LAPTOP=m
 CONFIG_SONYPI_COMPAT=y
 CONFIG_EEEPC_LAPTOP=m
+CONFIG_EEEPC_WMI=m
 CONFIG_DELL_LAPTOP=m
 CONFIG_ACPI_WMI=m
 CONFIG_ACER_WMI=m
+CONFIG_ACERHDF=m
 CONFIG_HP_WMI=m
 CONFIG_DELL_WMI=m
 
@@ -130,7 +116,6 @@ CONFIG_THINKPAD_ACPI=m
 # CONFIG_THINKPAD_ACPI_DEBUG is not set
 # CONFIG_THINKPAD_ACPI_DEBUGFACILITIES is not set
 CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
-CONFIG_THINKPAD_ACPI_BAY=y
 CONFIG_THINKPAD_ACPI_VIDEO=y
 CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y
 # CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set
@@ -145,7 +130,6 @@ CONFIG_HOTPLUG_PCI_SHPC=m
 
 CONFIG_HPET=y
 # CONFIG_HPET_MMAP is not set
-# CONFIG_HPET_RTC_IRQ is not set
 CONFIG_PM=y
 
 CONFIG_IPW2100=m
@@ -183,7 +167,6 @@ CONFIG_I2C_AMD756_S4882=m
 CONFIG_I2C_AMD8111=m
 CONFIG_I2C_I801=m
 CONFIG_I2C_ISCH=m
-# CONFIG_I2C_I810 is not set
 CONFIG_I2C_NFORCE2_S4985=m
 CONFIG_I2C_PIIX4=m
 # CONFIG_I2C_SIS5595 is not set
@@ -227,11 +210,11 @@ CONFIG_HW_RANDOM_VIA=m
 
 # CONFIG_HW_RANDOM_GEODE is not set
 
-CONFIG_USB_HIDINPUT_POWERBOOK=y
 
 CONFIG_DEBUG_STACKOVERFLOW=y
 CONFIG_DEBUG_NMI_TIMEOUT=5
 
+CONFIG_GPIO_SCH=m
 # CONFIG_PC8736x_GPIO is not set
 
 # CONFIG_DISCONTIGMEM_MANUAL is not set
@@ -251,7 +234,6 @@ CONFIG_MEMORY_HOTREMOVE=y
 # CONFIG_BLK_DEV_CS5535 is not set
 
 CONFIG_CC_STACKPROTECTOR=y
-# CONFIG_CC_STACKPROTECTOR_ALL is not set
 
 CONFIG_SGI_IOC4=m
 CONFIG_SGI_XP=m
@@ -289,7 +271,6 @@ CONFIG_VIRTUALIZATION=y
 CONFIG_KVM=m
 CONFIG_KVM_INTEL=m
 CONFIG_KVM_AMD=m
-CONFIG_KVM_TRACE=y
 
 CONFIG_PARAVIRT_GUEST=y
 CONFIG_PARAVIRT=y
@@ -328,8 +309,6 @@ CONFIG_HP_WATCHDOG=m
 
 CONFIG_FRAME_WARN=2048
 
-CONFIG_MEMTEST_BOOTPARAM=y
-CONFIG_MEMTEST_BOOTPARAM_VALUE=0
 CONFIG_NODES_SHIFT=9
 CONFIG_X86_PAT=y
 # FIXME: These should be 32bit only
@@ -338,6 +317,8 @@ CONFIG_STRICT_DEVMEM=y
 
 CONFIG_DIRECT_GBPAGES=y
 
+# CONFIG_NO_BOOTMEM is not set
+
 # CONFIG_MEMTEST is not set
 CONFIG_AMD_IOMMU=y
 CONFIG_AMD_IOMMU_STATS=y
@@ -377,7 +358,6 @@ CONFIG_HW_BRANCH_TRACER=y
 
 CONFIG_X86_X2APIC=y
 CONFIG_SPARSE_IRQ=y
-CONFIG_NUMA_MIGRATE_IRQ_DESC=y
 
 CONFIG_RCU_FANOUT=64
 
@@ -412,3 +392,6 @@ CONFIG_CS5535_CLOCK_EVENT_SRC=m
 CONFIG_X86_DECODER_SELFTEST=y
 
 CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m
+
+CONFIG_VGA_SWITCHEROO=y
+CONFIG_LPC_SCH=m

die-floppy-die.patch:
 floppy.c |    4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

Index: die-floppy-die.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/die-floppy-die.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- die-floppy-die.patch	6 Aug 2009 04:05:38 -0000	1.1
+++ die-floppy-die.patch	9 Jul 2010 09:09:12 -0000	1.2
@@ -1,18 +1,30 @@
+From 4ff58b642f80dedb20533978123d89b5ac9b1ed5 Mon Sep 17 00:00:00 2001
+From: Kyle McMartin <kyle at phobos.i.jkkm.org>
+Date: Tue, 30 Mar 2010 00:04:29 -0400
+Subject: die-floppy-die
+
 Kill the floppy.ko pnp modalias. We were surviving just fine without
 autoloading floppy drivers, tyvm.
 
 Please feel free to register all complaints in the wastepaper bin.
+---
+ drivers/block/floppy.c |    3 +--
+ 1 files changed, 1 insertions(+), 2 deletions(-)
 
 diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
-index 91b7530..2ea84a6 100644
+index 90c4038..f4a0b90 100644
 --- a/drivers/block/floppy.c
 +++ b/drivers/block/floppy.c
-@@ -4631,7 +4631,7 @@ static const struct pnp_device_id floppy_pnpids[] = {
- 	{ "PNP0700", 0 },
- 	{ }
+@@ -4619,8 +4619,7 @@ static const struct pnp_device_id floppy_pnpids[] = {
+ 	{"PNP0700", 0},
+ 	{}
  };
+-
 -MODULE_DEVICE_TABLE(pnp, floppy_pnpids);
 +/* MODULE_DEVICE_TABLE(pnp, floppy_pnpids); */
  
  #else
  
+-- 
+1.7.0.1
+

disable-i8042-check-on-apple-mac.patch:
 i8042.c |   23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

Index: disable-i8042-check-on-apple-mac.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/disable-i8042-check-on-apple-mac.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- disable-i8042-check-on-apple-mac.patch	5 May 2010 12:59:08 -0000	1.2
+++ disable-i8042-check-on-apple-mac.patch	9 Jul 2010 09:09:12 -0000	1.3
@@ -1,6 +1,6 @@
-From d01268ff135052cd40c375c6b7ebadbee3281b4d Mon Sep 17 00:00:00 2001
+From 2a79554c864ac58fa2ad982f0fcee2cc2aa33eb5 Mon Sep 17 00:00:00 2001
 From: Bastien Nocera <hadess at hadess.net>
-Date: Wed, 20 Jan 2010 18:23:13 +0000
+Date: Thu, 20 May 2010 10:30:31 -0400
 Subject: Disable i8042 checks on Intel Apple Macs
 
 As those computers never had any i8042 controllers, and the
@@ -15,10 +15,10 @@ Signed-off-by: Bastien Nocera <hadess at ha
  1 files changed, 22 insertions(+), 0 deletions(-)
 
 diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
-index b54aee7..5e1e59c 100644
+index 6440a8f..4d7cf98 100644
 --- a/drivers/input/serio/i8042.c
 +++ b/drivers/input/serio/i8042.c
-@@ -1446,12 +1446,34 @@ static struct platform_driver i8042_driver = {
+@@ -1451,6 +1451,22 @@ static struct platform_driver i8042_driver = {
  	.shutdown	= i8042_shutdown,
  };
  
@@ -40,7 +40,8 @@ index b54aee7..5e1e59c 100644
 +
  static int __init i8042_init(void)
  {
- 	int err;
+ 	struct platform_device *pdev;
+@@ -1458,6 +1474,12 @@ static int __init i8042_init(void)
  
  	dbg_init();
  

drm-i915-fix-edp-panels.patch:
 intel_dp.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Index: drm-i915-fix-edp-panels.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/drm-i915-fix-edp-panels.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- drm-i915-fix-edp-panels.patch	27 Jun 2010 23:55:29 -0000	1.2
+++ drm-i915-fix-edp-panels.patch	9 Jul 2010 09:09:12 -0000	1.3
@@ -1,34 +1,12 @@
 diff -up linux-2.6.33.noarch/drivers/gpu/drm/i915/intel_dp.c.dave linux-2.6.33.noarch/drivers/gpu/drm/i915/intel_dp.c
---- linux-2.6.33.noarch/drivers/gpu/drm/i915/intel_dp.c.dave	2010-06-28 09:50:36.000000000 +1000
-+++ linux-2.6.33.noarch/drivers/gpu/drm/i915/intel_dp.c	2010-06-28 09:53:24.000000000 +1000
-@@ -135,6 +135,12 @@ intel_dp_link_required(struct drm_device
- }
- 
- static int
-+intel_dp_max_data_rate(int max_link_clock, int max_lanes)
-+{
-+	return (max_link_clock * max_lanes * 8) / 10;
-+}
-+
-+static int
- intel_dp_mode_valid(struct drm_connector *connector,
- 		    struct drm_display_mode *mode)
- {
-@@ -144,7 +150,7 @@ intel_dp_mode_valid(struct drm_connector
- 	int max_lanes = intel_dp_max_lane_count(intel_encoder);
- 
- 	if (intel_dp_link_required(connector->dev, intel_encoder, mode->clock)
--			> max_link_clock * max_lanes)
-+			> intel_dp_max_data_rate(max_link_clock, max_lanes))
- 		return MODE_CLOCK_HIGH;
+--- linux-2.6.33.noarch/drivers/gpu/drm/i915/intel_dp.c.dave	2010-06-25 16:30:13.000000000 +1000
++++ linux-2.6.33.noarch/drivers/gpu/drm/i915/intel_dp.c	2010-06-25 16:30:23.000000000 +1000
+@@ -129,7 +129,7 @@ intel_dp_link_required(struct drm_device
+ 	struct drm_i915_private *dev_priv = dev->dev_private;
  
- 	if (mode->clock < 10000)
-@@ -505,7 +511,7 @@ intel_dp_mode_fixup(struct drm_encoder *
- 
- 	for (lane_count = 1; lane_count <= max_lane_count; lane_count <<= 1) {
- 		for (clock = 0; clock <= max_clock; clock++) {
--			int link_avail = intel_dp_link_clock(bws[clock]) * lane_count;
-+			int link_avail = intel_dp_max_data_rate(intel_dp_link_clock(bws[clock]), lane_count);
- 
- 			if (intel_dp_link_required(encoder->dev, intel_encoder, mode->clock)
- 					<= link_avail) {
+ 	if (IS_eDP(intel_encoder))
+-		return (pixel_clock * dev_priv->edp_bpp) / 8;
++		return (pixel_clock * ALIGN(dev_priv->edp_bpp, 8)) / 8;
+ 	else
+ 		return pixel_clock * 3;
+ }

drm-intel-make-lvds-work.patch:
 intel_display.c |    2 --
 1 file changed, 2 deletions(-)

Index: drm-intel-make-lvds-work.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/drm-intel-make-lvds-work.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- drm-intel-make-lvds-work.patch	19 Apr 2010 21:31:11 -0000	1.2
+++ drm-intel-make-lvds-work.patch	9 Jul 2010 09:09:12 -0000	1.3
@@ -1,19 +1,19 @@
-diff -up linux-2.6.33.noarch/drivers/gpu/drm/i915/intel_display.c.jx linux-2.6.33.noarch/drivers/gpu/drm/i915/intel_display.c
---- linux-2.6.33.noarch/drivers/gpu/drm/i915/intel_display.c.jx	2010-04-19 17:13:31.000000000 -0400
-+++ linux-2.6.33.noarch/drivers/gpu/drm/i915/intel_display.c	2010-04-19 17:13:59.753994103 -0400
-@@ -4141,7 +4141,6 @@ void intel_release_load_detect_pipe(stru
- 				    struct drm_connector *connector, int dpms_mode)
+diff -up linux-2.6.33.noarch/drivers/gpu/drm/i915/intel_display.c.orig linux-2.6.33.noarch/drivers/gpu/drm/i915/intel_display.c
+--- linux-2.6.33.noarch/drivers/gpu/drm/i915/intel_display.c.orig	2010-03-31 16:59:39.901995671 -0400
++++ linux-2.6.33.noarch/drivers/gpu/drm/i915/intel_display.c	2010-03-31 17:01:05.416996744 -0400
+@@ -3757,7 +3757,6 @@ struct drm_crtc *intel_get_load_detect_p
+ void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder, int dpms_mode)
  {
  	struct drm_encoder *encoder = &intel_encoder->enc;
 -	struct drm_device *dev = encoder->dev;
  	struct drm_crtc *crtc = encoder->crtc;
  	struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
  	struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
-@@ -4151,7 +4150,6 @@ void intel_release_load_detect_pipe(stru
- 		connector->encoder = NULL;
+@@ -3767,7 +3766,6 @@ void intel_release_load_detect_pipe(stru
+ 		intel_encoder->base.encoder = NULL;
  		intel_encoder->load_detect_temp = false;
  		crtc->enabled = drm_helper_crtc_in_use(crtc);
 -		drm_helper_disable_unused_functions(dev);
  	}
  
- 	/* Switch crtc and encoder back off if necessary */
+ 	/* Switch crtc and output back off if necessary */

drm-intel-next.patch:
 0 files changed

View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.13 -r 1.14 drm-intel-next.patchIndex: drm-intel-next.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/drm-intel-next.patch,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -p -r1.13 -r1.14
--- drm-intel-next.patch	6 May 2010 17:25:20 -0000	1.13
+++ drm-intel-next.patch	9 Jul 2010 09:09:12 -0000	1.14
@@ -1,13624 +1 @@
-Start from 2.6.33.y, then pull in 2.6.34, then anholt's for-linus, then
-anholt's drm-intel-next minus a bogus TV detection patch and the AGP/GTT
-splitup.
-
-commit 61b8a24d45b1c2ccab371b98f077425d0d73ab7e
-Author: Chris Wilson <chris at chris-wilson.co.uk>
-Date:   Thu Jan 7 10:39:13 2010 +0000
-
-    drm/i915: Replace open-coded eviction in i915_gem_idle()
-    
-    With the introduction of the hang-check, we can safely expect that
-    i915_wait_request() will always return even when the GPU hangs, and so
-    do not need to open code the wait in order to manually check for the
-    hang. Also we do not need to always evict all buffers, so only flush
-    the GPU (and wait for it to idle) for KMS, but continue to evict for UMS.
-    
-    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
-    Signed-off-by: Eric Anholt <eric at anholt.net>
-
-commit 4b508552539d0a31eb5c62d1bf4847e1fd338eb8
-Author: Zhenyu Wang <zhenyuw at linux.intel.com>
-Date:   Thu Dec 17 14:48:43 2009 +0800
-
-    drm/i915: Keep MCHBAR always enabled
-    
-    As we need more and more controls within MCHBAR for memory config and
-    power management, this trys to keep MCHBAR enabled from driver load and
-    only tear down in driver unload.
-    
-    Signed-off-by: Zhenyu Wang <zhenyuw at linux.intel.com>
-    Signed-off-by: Eric Anholt <eric at anholt.net>
-
-commit 4dd298cb92eccc685aace852cab33d36085cffcc
-Author: Eric Anholt <eric at anholt.net>
-Date:   Tue Jan 26 09:43:10 2010 -0800
-
-    drm/i915: Don't reserve compatibility fence regs in KMS mode.
-    
-    The fence start is for compatibility with UMS X Servers before fence
-    management.  KMS X Servers only started doing tiling after fence
-    management appeared.
-    
-    Signed-off-by: Eric Anholt <eric at anholt.net>
-
-commit dd4031f49bbce4b4ed4ad6f0ecf3e7da8bd240aa
-Author: Li Peng <peng.li at linux.intel.com>
-Date:   Wed Jan 27 19:01:11 2010 +0800
-
-    drm/i915: enable memory self refresh on 9xx
-    
-    Enabling memory self refresh (SR) on 9xx needs to set additional
-    register bits. On 945, we need bit 31 of FW_BLC_SELF to enable the
-    write to self refresh bit and bit 16 to enable the write of self
-    refresh watermark. On 915, bit 12 of INSTPM is used to enable SR.
-    
-    SR will take effect when CPU enters C3+ state and its entry/exit
-    should be automatically controlled by H/W, driver only needs to set
-    SR enable bits in wm update. But this isn't safe in my test on 945
-    because GPU is hung. So this patch explicitly enables SR when GPU
-    is idle, and disables SR when it is busy. In my test on a netbook of
-    945GSE chipset, it saves about 0.8W idle power.
-    
-    Signed-off-by: Li Peng <peng.li at intel.com>
-    [anholt: rebased against 33c5fd121eabbccc9103daf6cda36941eb3c349f
-    by adding disable of INSTPM SR bit on 915GM for two pipe setup]
-    Signed-off-by: Eric Anholt <eric at anholt.net>
-
-commit b71e8e4881b7b8d9d0f622ace6db4d0587198b47
-Author: Jesse Barnes <jbarnes at virtuousgeek.org>
-Date:   Fri Jan 29 11:27:07 2010 -0800
-
-    drm/i915: add dynamic performance control support for Ironlake
-    
-    Ironlake (and 965GM, which this patch doesn't support) supports a
-    hardware performance and power management feature that allows it to
-    adjust to changes in GPU load over time with software help.  The goal
-    if this is to maximize performance/power for a given workload.
-    
-    This patch enables that feature, which is also a requirement for
-    supporting Intelligent Power Sharing, a feature which allows for
-    dynamic budgeting of power between the CPU and GPU in Arrandale
-    platforms.
-    
-    Tested-by: ykzhao <yakui.zhao at intel.com>
-    [anholt: Resolved against the irq handler loop removal]
-    Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
-    Signed-off-by: Eric Anholt <eric at anholt.net>
-
-commit bb617ddfd5cfbbd2b657550528a8b9d9827c0c5d
-Author: Matthew Garrett <mjg59 at srcf.ucam.org>
-Date:   Tue Feb 2 18:30:47 2010 +0000
-
-    drm/i915: Deobfuscate the render p-state obfuscation
-    
-    The ironlake render p-state support includes some rather odd variable
-    names. Clean them up in order to improve the readability of the code.
-    
-    Signed-off-by: Matthew Garrett <mjg at redhat.com>
-    Signed-off-by: Eric Anholt <eric at anholt.net>
-
-commit 5b497c826bdd1e2834fa5cf34a1a513f99bde04a
-Author: Li Peng <peng.li at linux.intel.com>
-Date:   Wed Feb 10 01:54:24 2010 +0800
-
-    drm/i915: Fix OGLC performance regression on 945
-    
-    He Shuang reported an OGLC performance regression introduced in the patch
-    "enable memory self refresh on 9xx", In that patch, SR on 945 is disabled
-    everytime when calling intel_mark_busy(), while too much of such operation
-    will impact performance. Actually disable SR is necessary only when GPU and
-    Crtc changing from idle to busy. This patch make such optimization.
-    
-    It fixes upstream bug
-    http://bugs.freedesktop.org/show_bug.cgi?id=26422
-    
-    Signed-off-by: Li Peng <peng.li at intel.com>
-    Signed-off-by: Eric Anholt <eric at anholt.net>
-
-commit 8b31f2d2d4c38dd98bc8e1b363984a769b4bcc70
-Author: Jesse Barnes <jbarnes at virtuousgeek.org>
-Date:   Thu Feb 4 14:17:47 2010 -0800
-
-    drm/i915: fix drps disable so unload & re-load works
-    
-    At unload time, we need to disable DRPS, but we need to do it correctly
-    or the GPU will hang and we won't be able to load the module again.  So
-    set the SFCAVM bit so we can properly restore the DRPS config at unload.
-    
-    Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
-    Signed-off-by: Eric Anholt <eric at anholt.net>
-
-commit 380119c14abe900e7907ba919cd31935c4bd9b26
-Author: Jesse Barnes <jbarnes at virtuousgeek.org>
-Date:   Fri Feb 5 12:42:41 2010 -0800
-
-    drm/i915: provide FBC status in debugfs
-    
-    Tools like powertop want to check the current FBC status and report it
-    to the user.  So add a debugfs file indicating whether FBC is enabled,
-    and if not, why.
-    
-    Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
-    Signed-off-by: Eric Anholt <eric at anholt.net>
-
-commit 1a96157856ccbdad57e0b2c0fdda90533a035d5b
-Author: Jesse Barnes <jbarnes at virtuousgeek.org>
-Date:   Fri Feb 5 12:47:35 2010 -0800
-
-    drm/i915: provide self-refresh status in debugfs
-    
-    Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
-    Signed-off-by: Eric Anholt <eric at anholt.net>
-
-commit cda4b3ba8d82079de2929f637380a6067f446e08
-Author: Daniel Vetter <daniel.vetter at ffwll.ch>
-Date:   Thu Feb 11 14:14:42 2010 +0100
-
-    drm/i915: overlay: nuke readback to flush wc caches
-    
-    I retested this and whatever this papered over, the problem doesn't seem
-    to exist anymore.
-    
-    Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
-    Reviewed-by: Eric Anholt <eric at anholt.net>
-    [anholt: fixed up compile warning]
-    Signed-off-by: Eric Anholt <eric at anholt.net>
-
-commit 80bd60eafb329be40d6e83a4f0e2f2f2b28b900c
-Author: Daniel Vetter <daniel.vetter at ffwll.ch>
-Date:   Thu Feb 11 14:14:43 2010 +0100
-
-    drm/i915: overlay: drop superflous gpu flushes
-    
-    Cache-coherency is maintained by gem. Drop these leftover MI_FLUSH
-    commands from the userspace code.
-    
-    Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
-    Acked-by: Chris Wilson <chris at chris-wilson.co.uk>
-    Signed-off-by: Eric Anholt <eric at anholt.net>
-
-commit dd4120e04e07feec4275807656a650448b9fd2ae
-Author: Zhenyu Wang <zhenyuw at linux.intel.com>
-Date:   Wed Feb 10 10:39:33 2010 +0800
-
-    agp/intel: official names for Pineview and Ironlake
-    
-    Print official names for Pineview and Ironlake, which is Intel
-    GMA3150 and Intel HD graphics.
-    
-    Signed-off-by: Zhenyu Wang <zhenyuw at linux.intel.com>
-    Signed-off-by: Eric Anholt <eric at anholt.net>
[...13234 lines suppressed...]
- 	struct drm_i915_private *dev_priv = dev->dev_private;
- 	unsigned long irqflags;
-@@ -1441,9 +1305,10 @@ intel_tv_detect_type (struct drm_crtc *crtc, struct intel_output *intel_output)
-  */
- static void intel_tv_find_better_format(struct drm_connector *connector)
- {
--	struct intel_output *intel_output = to_intel_output(connector);
--	struct intel_tv_priv *tv_priv = intel_output->dev_priv;
--	const struct tv_mode *tv_mode = intel_tv_mode_find(intel_output);
-+	struct drm_encoder *encoder = intel_attached_encoder(connector);
-+	struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder);
-+	struct intel_tv_priv *tv_priv = intel_encoder->dev_priv;
-+	const struct tv_mode *tv_mode = intel_tv_mode_find(intel_encoder);
- 	int i;
- 
- 	if ((tv_priv->type == DRM_MODE_CONNECTOR_Component) ==
-@@ -1475,9 +1340,9 @@ intel_tv_detect(struct drm_connector *connector)
- {
- 	struct drm_crtc *crtc;
- 	struct drm_display_mode mode;
--	struct intel_output *intel_output = to_intel_output(connector);
--	struct intel_tv_priv *tv_priv = intel_output->dev_priv;
--	struct drm_encoder *encoder = &intel_output->enc;
-+	struct drm_encoder *encoder = intel_attached_encoder(connector);
-+	struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder);
-+	struct intel_tv_priv *tv_priv = intel_encoder->dev_priv;
- 	int dpms_mode;
- 	int type = tv_priv->type;
- 
-@@ -1485,12 +1350,14 @@ intel_tv_detect(struct drm_connector *connector)
- 	drm_mode_set_crtcinfo(&mode, CRTC_INTERLACE_HALVE_V);
- 
- 	if (encoder->crtc && encoder->crtc->enabled) {
--		type = intel_tv_detect_type(encoder->crtc, intel_output);
-+		type = intel_tv_detect_type(encoder->crtc, intel_encoder);
- 	} else {
--		crtc = intel_get_load_detect_pipe(intel_output, &mode, &dpms_mode);
-+		crtc = intel_get_load_detect_pipe(intel_encoder, connector,
-+						  &mode, &dpms_mode);
- 		if (crtc) {
--			type = intel_tv_detect_type(crtc, intel_output);
--			intel_release_load_detect_pipe(intel_output, dpms_mode);
-+			type = intel_tv_detect_type(crtc, intel_encoder);
-+			intel_release_load_detect_pipe(intel_encoder, connector,
-+						       dpms_mode);
- 		} else
- 			type = -1;
- 	}
-@@ -1525,8 +1392,9 @@ static void
- intel_tv_chose_preferred_modes(struct drm_connector *connector,
- 			       struct drm_display_mode *mode_ptr)
- {
--	struct intel_output *intel_output = to_intel_output(connector);
--	const struct tv_mode *tv_mode = intel_tv_mode_find(intel_output);
-+	struct drm_encoder *encoder = intel_attached_encoder(connector);
-+	struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder);
-+	const struct tv_mode *tv_mode = intel_tv_mode_find(intel_encoder);
- 
- 	if (tv_mode->nbr_end < 480 && mode_ptr->vdisplay == 480)
- 		mode_ptr->type |= DRM_MODE_TYPE_PREFERRED;
-@@ -1550,8 +1418,9 @@ static int
- intel_tv_get_modes(struct drm_connector *connector)
- {
- 	struct drm_display_mode *mode_ptr;
--	struct intel_output *intel_output = to_intel_output(connector);
--	const struct tv_mode *tv_mode = intel_tv_mode_find(intel_output);
-+	struct drm_encoder *encoder = intel_attached_encoder(connector);
-+	struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder);
-+	const struct tv_mode *tv_mode = intel_tv_mode_find(intel_encoder);
- 	int j, count = 0;
- 	u64 tmp;
- 
-@@ -1604,11 +1473,9 @@ intel_tv_get_modes(struct drm_connector *connector)
- static void
- intel_tv_destroy (struct drm_connector *connector)
- {
--	struct intel_output *intel_output = to_intel_output(connector);
--
- 	drm_sysfs_connector_remove(connector);
- 	drm_connector_cleanup(connector);
--	kfree(intel_output);
-+	kfree(connector);
- }
- 
- 
-@@ -1617,9 +1484,9 @@ intel_tv_set_property(struct drm_connector *connector, struct drm_property *prop
- 		      uint64_t val)
- {
- 	struct drm_device *dev = connector->dev;
--	struct intel_output *intel_output = to_intel_output(connector);
--	struct intel_tv_priv *tv_priv = intel_output->dev_priv;
--	struct drm_encoder *encoder = &intel_output->enc;
-+	struct drm_encoder *encoder = intel_attached_encoder(connector);
-+	struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder);
-+	struct intel_tv_priv *tv_priv = intel_encoder->dev_priv;
- 	struct drm_crtc *crtc = encoder->crtc;
- 	int ret = 0;
- 	bool changed = false;
-@@ -1676,8 +1543,6 @@ static const struct drm_encoder_helper_funcs intel_tv_helper_funcs = {
- 
- static const struct drm_connector_funcs intel_tv_connector_funcs = {
- 	.dpms = drm_helper_connector_dpms,
--	.save = intel_tv_save,
--	.restore = intel_tv_restore,
- 	.detect = intel_tv_detect,
- 	.destroy = intel_tv_destroy,
- 	.set_property = intel_tv_set_property,
-@@ -1687,12 +1552,15 @@ static const struct drm_connector_funcs intel_tv_connector_funcs = {
- static const struct drm_connector_helper_funcs intel_tv_connector_helper_funcs = {
- 	.mode_valid = intel_tv_mode_valid,
- 	.get_modes = intel_tv_get_modes,
--	.best_encoder = intel_best_encoder,
-+	.best_encoder = intel_attached_encoder,
- };
- 
- static void intel_tv_enc_destroy(struct drm_encoder *encoder)
- {
-+	struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder);
-+
- 	drm_encoder_cleanup(encoder);
-+	kfree(intel_encoder);
- }
- 
- static const struct drm_encoder_funcs intel_tv_enc_funcs = {
-@@ -1740,7 +1608,8 @@ intel_tv_init(struct drm_device *dev)
- {
- 	struct drm_i915_private *dev_priv = dev->dev_private;
- 	struct drm_connector *connector;
--	struct intel_output *intel_output;
-+	struct intel_encoder *intel_encoder;
-+	struct intel_connector *intel_connector;
- 	struct intel_tv_priv *tv_priv;
- 	u32 tv_dac_on, tv_dac_off, save_tv_dac;
- 	char **tv_format_names;
-@@ -1780,28 +1649,34 @@ intel_tv_init(struct drm_device *dev)
- 	    (tv_dac_off & TVDAC_STATE_CHG_EN) != 0)
- 		return;
- 
--	intel_output = kzalloc(sizeof(struct intel_output) +
-+	intel_encoder = kzalloc(sizeof(struct intel_encoder) +
- 			       sizeof(struct intel_tv_priv), GFP_KERNEL);
--	if (!intel_output) {
-+	if (!intel_encoder) {
-+		return;
-+	}
-+
-+	intel_connector = kzalloc(sizeof(struct intel_connector), GFP_KERNEL);
-+	if (!intel_connector) {
-+		kfree(intel_encoder);
- 		return;
- 	}
- 
--	connector = &intel_output->base;
-+	connector = &intel_connector->base;
- 
- 	drm_connector_init(dev, connector, &intel_tv_connector_funcs,
- 			   DRM_MODE_CONNECTOR_SVIDEO);
- 
--	drm_encoder_init(dev, &intel_output->enc, &intel_tv_enc_funcs,
-+	drm_encoder_init(dev, &intel_encoder->enc, &intel_tv_enc_funcs,
- 			 DRM_MODE_ENCODER_TVDAC);
- 
--	drm_mode_connector_attach_encoder(&intel_output->base, &intel_output->enc);
--	tv_priv = (struct intel_tv_priv *)(intel_output + 1);
--	intel_output->type = INTEL_OUTPUT_TVOUT;
--	intel_output->crtc_mask = (1 << 0) | (1 << 1);
--	intel_output->clone_mask = (1 << INTEL_TV_CLONE_BIT);
--	intel_output->enc.possible_crtcs = ((1 << 0) | (1 << 1));
--	intel_output->enc.possible_clones = (1 << INTEL_OUTPUT_TVOUT);
--	intel_output->dev_priv = tv_priv;
-+	drm_mode_connector_attach_encoder(&intel_connector->base, &intel_encoder->enc);
-+	tv_priv = (struct intel_tv_priv *)(intel_encoder + 1);
-+	intel_encoder->type = INTEL_OUTPUT_TVOUT;
-+	intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
-+	intel_encoder->clone_mask = (1 << INTEL_TV_CLONE_BIT);
-+	intel_encoder->enc.possible_crtcs = ((1 << 0) | (1 << 1));
-+	intel_encoder->enc.possible_clones = (1 << INTEL_OUTPUT_TVOUT);
-+	intel_encoder->dev_priv = tv_priv;
- 	tv_priv->type = DRM_MODE_CONNECTOR_Unknown;
- 
- 	/* BIOS margin values */
-@@ -1812,7 +1687,7 @@ intel_tv_init(struct drm_device *dev)
- 
- 	tv_priv->tv_format = kstrdup(tv_modes[initial_mode].name, GFP_KERNEL);
- 
--	drm_encoder_helper_add(&intel_output->enc, &intel_tv_helper_funcs);
-+	drm_encoder_helper_add(&intel_encoder->enc, &intel_tv_helper_funcs);
- 	drm_connector_helper_add(connector, &intel_tv_connector_helper_funcs);
- 	connector->interlace_allowed = false;
- 	connector->doublescan_allowed = false;
-diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h
---- a/include/drm/drm_pciids.h
-+++ b/include/drm/drm_pciids.h
-@@ -558,4 +558,5 @@
- 	{0x8086, 0x35e8, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \
- 	{0x8086, 0x0042, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \
- 	{0x8086, 0x0046, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \
-+	{0x8086, 0x0102, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \
- 	{0, 0, 0}
+empty

drm-intel-sdvo-fix.patch:
 i915_drv.h   |    1 +
 intel_bios.c |    1 +
 intel_sdvo.c |   42 +++++++++---------------------------------
 3 files changed, 11 insertions(+), 33 deletions(-)

Index: drm-intel-sdvo-fix.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/drm-intel-sdvo-fix.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- drm-intel-sdvo-fix.patch	26 Apr 2010 15:20:39 -0000	1.1
+++ drm-intel-sdvo-fix.patch	9 Jul 2010 09:09:13 -0000	1.2
@@ -1,6 +1,6 @@
-From ef59fcdd9d7fe818d36a0072c80770c0d1a3cc9c Mon Sep 17 00:00:00 2001
+From 5f3edc1c2f3963afd210e0717b3247ea0e3eb1c8 Mon Sep 17 00:00:00 2001
 From: Adam Jackson <ajax at redhat.com>
-Date: Fri, 23 Apr 2010 16:07:40 -0400
+Date: Thu, 20 May 2010 11:08:10 -0400
 Subject: [PATCH] drm/i915: Fix DDC bus selection for multifunction SDVO
 
 Multifunction SDVO cards stopped working after 14571b4, and would report
@@ -24,7 +24,7 @@ Signed-off-by: Adam Jackson <ajax at redhat
  3 files changed, 11 insertions(+), 32 deletions(-)
 
 diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
-index a43a4f5..5d609a8 100644
+index 6e47900..3fce722 100644
 --- a/drivers/gpu/drm/i915/i915_drv.h
 +++ b/drivers/gpu/drm/i915/i915_drv.h
 @@ -135,6 +135,7 @@ struct sdvo_device_mapping {
@@ -48,10 +48,10 @@ index f9ba452..4c748d8 100644
  		} else {
  			DRM_DEBUG_KMS("Maybe one SDVO port is shared by "
 diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
-index df9f997..f55c0d7 100644
+index 87d9536..ddccc74 100644
 --- a/drivers/gpu/drm/i915/intel_sdvo.c
 +++ b/drivers/gpu/drm/i915/intel_sdvo.c
-@@ -2053,40 +2053,17 @@ static const struct drm_encoder_funcs intel_sdvo_enc_funcs = {
+@@ -2159,40 +2159,17 @@ static const struct drm_encoder_funcs intel_sdvo_enc_funcs = {
   * outputs, then LVDS outputs.
   */
  static void
@@ -100,9 +100,9 @@ index df9f997..f55c0d7 100644
  }
  
  static bool
-@@ -2863,7 +2840,7 @@ bool intel_sdvo_init(struct drm_device *dev, int sdvo_reg)
- 		goto err_i2c;
- 	}
+@@ -2867,7 +2844,7 @@ bool intel_sdvo_init(struct drm_device *dev, int sdvo_reg)
+ 
+ 	drm_sysfs_connector_add(connector);
  
 -	intel_sdvo_select_ddc_bus(sdvo_priv);
 +	intel_sdvo_select_ddc_bus(dev_priv, sdvo_priv, sdvo_reg);

drm-nouveau-abi16.patch:
 drivers/gpu/drm/nouveau/nouveau_channel.c |   26 +
 drivers/gpu/drm/nouveau/nouveau_debugfs.c |   11 
 drivers/gpu/drm/nouveau/nouveau_dma.c     |  108 ++++++
 drivers/gpu/drm/nouveau/nouveau_dma.h     |   21 -
 drivers/gpu/drm/nouveau/nouveau_drv.h     |   26 -
 drivers/gpu/drm/nouveau/nouveau_gem.c     |  490 ++++++++++--------------------
 drivers/gpu/drm/nouveau/nouveau_state.c   |    7 
 drivers/gpu/drm/nouveau/nv50_fifo.c       |    8 
 include/drm/nouveau_drm.h                 |   87 +----
 9 files changed, 365 insertions(+), 419 deletions(-)

Index: drm-nouveau-abi16.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/drm-nouveau-abi16.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- drm-nouveau-abi16.patch	16 Apr 2010 14:08:45 -0000	1.3
+++ drm-nouveau-abi16.patch	9 Jul 2010 09:09:17 -0000	1.4
@@ -169,6 +169,7 @@ index 2281f99..adac0f8 100644
  
  int nouveau_max_ioctl = DRM_ARRAY_SIZE(nouveau_ioctls);
 diff --git a/drivers/gpu/drm/nouveau/nouveau_debugfs.c b/drivers/gpu/drm/nouveau/nouveau_debugfs.c
+index d79db36..89e36ee 100644
 --- a/drivers/gpu/drm/nouveau/nouveau_debugfs.c
 +++ b/drivers/gpu/drm/nouveau/nouveau_debugfs.c
 @@ -47,12 +47,23 @@ nouveau_debugfs_channel_info(struct seq_file *m, void *data)
@@ -196,6 +197,7 @@ diff --git a/drivers/gpu/drm/nouveau/nou
  	seq_printf(m, "last fence    : %d\n", chan->fence.sequence);
  	seq_printf(m, "last signalled: %d\n", chan->fence.sequence_ack);
 diff --git a/drivers/gpu/drm/nouveau/nouveau_dma.c b/drivers/gpu/drm/nouveau/nouveau_dma.c
+index 50d9e67..c8482a1 100644
 --- a/drivers/gpu/drm/nouveau/nouveau_dma.c
 +++ b/drivers/gpu/drm/nouveau/nouveau_dma.c
 @@ -32,7 +32,22 @@
@@ -326,6 +328,7 @@ diff --git a/drivers/gpu/drm/nouveau/nou
  		get = READ_GET(chan, &prev_get, &cnt);
  		if (unlikely(get == -EBUSY))
 diff --git a/drivers/gpu/drm/nouveau/nouveau_dma.h b/drivers/gpu/drm/nouveau/nouveau_dma.h
+index dabfd65..8b05c15 100644
 --- a/drivers/gpu/drm/nouveau/nouveau_dma.h
 +++ b/drivers/gpu/drm/nouveau/nouveau_dma.h
 @@ -31,6 +31,9 @@
@@ -372,6 +375,7 @@ diff --git a/drivers/gpu/drm/nouveau/nou
  }
  
 diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h b/drivers/gpu/drm/nouveau/nouveau_drv.h
+index 1c15ef3..5be0cca 100644
 --- a/drivers/gpu/drm/nouveau/nouveau_drv.h
 +++ b/drivers/gpu/drm/nouveau/nouveau_drv.h
 @@ -34,7 +34,7 @@
@@ -443,6 +447,7 @@ diff --git a/drivers/gpu/drm/nouveau/nou
  				      struct drm_file *);
  extern int nouveau_gem_ioctl_cpu_fini(struct drm_device *, void *,
 diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c
+index 70cc308..8265fed 100644
 --- a/drivers/gpu/drm/nouveau/nouveau_gem.c
 +++ b/drivers/gpu/drm/nouveau/nouveau_gem.c
 @@ -243,6 +243,11 @@ validate_fini_list(struct list_head *list, struct nouveau_fence *fence)
@@ -1067,7 +1072,7 @@ diff --git a/drivers/gpu/drm/nouveau/nou
  static inline uint32_t
  domain_to_ttm(struct nouveau_bo *nvbo, uint32_t domain)
  {
-@@ -831,70 +755,6 @@ domain_to_ttm(struct nouveau_bo *nvbo, uint32_t domain)
+@@ -831,74 +755,6 @@ domain_to_ttm(struct nouveau_bo *nvbo, uint32_t domain)
  }
  
  int
@@ -1105,7 +1110,9 @@ diff --git a/drivers/gpu/drm/nouveau/nou
 -		req->domain = NOUVEAU_GEM_DOMAIN_VRAM;
 -
 -out:
--	drm_gem_object_unreference_unlocked(gem);
+-	mutex_lock(&dev->struct_mutex);
+-	drm_gem_object_unreference(gem);
+-	mutex_unlock(&dev->struct_mutex);
 -
 -	return ret;
 -}
@@ -1129,7 +1136,9 @@ diff --git a/drivers/gpu/drm/nouveau/nou
 -
 -	ret = nouveau_bo_unpin(nouveau_gem_object(gem));
 -
--	drm_gem_object_unreference_unlocked(gem);
+-	mutex_lock(&dev->struct_mutex);
+-	drm_gem_object_unreference(gem);
+-	mutex_unlock(&dev->struct_mutex);
 -
 -	return ret;
 -}
@@ -1157,6 +1166,7 @@ index a4851af..a8d77c8 100644
  						struct drm_file *file_priv)
  {
 diff --git a/drivers/gpu/drm/nouveau/nv50_fifo.c b/drivers/gpu/drm/nouveau/nv50_fifo.c
+index 204a79f..df5335a 100644
 --- a/drivers/gpu/drm/nouveau/nv50_fifo.c
 +++ b/drivers/gpu/drm/nouveau/nv50_fifo.c
 @@ -280,17 +280,17 @@ nv50_fifo_create_context(struct nouveau_channel *chan)
@@ -1182,6 +1192,7 @@ diff --git a/drivers/gpu/drm/nouveau/nv5
  	if (!IS_G80) {
  		nv_wo32(dev, chan->ramin->gpuobj, 0, chan->id);
 diff --git a/include/drm/nouveau_drm.h b/include/drm/nouveau_drm.h
+index f745948..a6a9f4a 100644
 --- a/include/drm/nouveau_drm.h
 +++ b/include/drm/nouveau_drm.h
 @@ -25,13 +25,14 @@

drm-nouveau-drm-fixed-header.patch:
 drm_fixed.h |   68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 67 insertions(+), 1 deletion(-)

Index: drm-nouveau-drm-fixed-header.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/drm-nouveau-drm-fixed-header.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- drm-nouveau-drm-fixed-header.patch	2 Jul 2010 05:47:01 -0000	1.2
+++ drm-nouveau-drm-fixed-header.patch	9 Jul 2010 09:09:17 -0000	1.3
@@ -1,7 +1,7 @@
-From 841045c942be3fd2bf928a7de3e730a00665347e Mon Sep 17 00:00:00 2001
+From 98b5715348686cb2d9d695c5010d3831d99b934b Mon Sep 17 00:00:00 2001
 From: Ben Skeggs <bskeggs at redhat.com>
 Date: Wed, 28 Apr 2010 15:19:10 +1000
-Subject: [PATCH 3/3] drm-nouveau-drm-fixed-header
+Subject: [PATCH] drm-nouveau-drm-fixed-header
 
 ---
  drivers/gpu/drm/nouveau/drm_fixed.h |   67 +++++++++++++++++++++++++++++++++++
@@ -82,5 +82,5 @@ index 0000000..4a08a66
 +}
 +#endif
 -- 
-1.7.1
+1.7.0.1
 

git-bluetooth.patch:
 drivers/hid/hid-core.c        |    1 +
 drivers/hid/hid-sony.c        |   21 +++++++++++++++++++--
 drivers/hid/hid-wacom.c       |   28 ++++++++++++++++++++++++++++
 drivers/hid/hidraw.c          |    2 +-
 drivers/hid/usbhid/hid-core.c |    5 +++--
 include/linux/hid.h           |    2 +-
 net/bluetooth/hidp/core.c     |   17 ++++++++++++++---
 7 files changed, 67 insertions(+), 9 deletions(-)

Index: git-bluetooth.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/git-bluetooth.patch,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- git-bluetooth.patch	30 Apr 2010 12:25:51 -0000	1.5
+++ git-bluetooth.patch	9 Jul 2010 09:09:19 -0000	1.6
@@ -1,31 +1,3 @@
-commit 711909b33d6fdee149b5cb58bd888e7c10407acb
-Author: Bastien Nocera <hadess at hadess.net>
-Date:   Wed Apr 21 15:24:56 2010 +0100
-
-    Add support for the Wacom Intuos 4 wireless
-    
-    And to the HID blacklist.
-    
-    Same command set as the Graphire Bluetooth tablet.
-    
-    Signed-off-by: Bastien Nocera <hadess at hadess.net>
-
-commit 1e03f3dc79ae5a9456545702f6dcac1023b06666
-Author: Antonio Ospite <ospite at studenti.unina.it>
-Date:   Thu Apr 29 23:59:34 2010 +0200
-
-    hid/hid-sony: fix sony_set_operational_bt
-    
-    Don't send the report type as part of the data, this prevents the
-    controller from going into the operational state at all.
-    
-    This is completely equivalent to what the code originally meant to accomplish:
-    as per in net/bluetooth/hidp/core.c::hidp_output_raw_report(), by using
-    HID_FEATURE_REPORT here, what will be actually sent is
-    (HIDP_TRANS_SET_REPORT | HIDP_DATA_RTYPE_FEATURE) which is exactly 0x53.
-    
-    Signed-off-by: Antonio Ospite <ospite at studenti.unina.it>
-
 commit ea42416024fb33c970dbc10a6c69c0831126d75e
 Author: Jiri Kosina <jkosina at suse.cz>
 Date:   Wed Feb 3 15:52:31 2010 +0100
@@ -92,7 +64,7 @@ Date:   Fri Jan 29 15:03:36 2010 +0100
     Signed-off-by: Jiri Kosina <jkosina at suse.cz>
 
 diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
-index 8455f3d..112568e 100644
+index eabe5f8..f7f80e1 100644
 --- a/drivers/hid/hid-core.c
 +++ b/drivers/hid/hid-core.c
 @@ -1340,6 +1340,7 @@ static const struct hid_device_id hid_blacklist[] = {
@@ -103,28 +75,8 @@ index 8455f3d..112568e 100644
  	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE) },
  	{ HID_USB_DEVICE(USB_VENDOR_ID_SUNPLUS, USB_DEVICE_ID_SUNPLUS_WDESKTOP) },
  	{ HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb300) },
-@@ -1352,6 +1353,7 @@ static const struct hid_device_id hid_blacklist[] = {
- 	{ HID_USB_DEVICE(USB_VENDOR_ID_TWINHAN, USB_DEVICE_ID_TWINHAN_IR_REMOTE) },
- 	{ HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_SMARTJOY_PLUS) },
- 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE_BLUETOOTH) },
-+	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS4_BLUETOOTH) },
- 	{ HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0005) },
- 	{ HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0030) },
- 
-diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
-index 793691f..4ccd60b 100644
---- a/drivers/hid/hid-ids.h
-+++ b/drivers/hid/hid-ids.h
-@@ -428,6 +428,7 @@
- 
- #define USB_VENDOR_ID_WACOM		0x056a
- #define USB_DEVICE_ID_WACOM_GRAPHIRE_BLUETOOTH	0x81
-+#define USB_DEVICE_ID_WACOM_INTUOS4_BLUETOOTH	0xbd
- 
- #define USB_VENDOR_ID_WISEGROUP		0x0925
- #define USB_DEVICE_ID_SMARTJOY_PLUS	0x0005
 diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
-index 4e84502..e71da89 100644
+index 4e84502..6ced140 100644
 --- a/drivers/hid/hid-sony.c
 +++ b/drivers/hid/hid-sony.c
 @@ -48,7 +48,7 @@ static void sony_report_fixup(struct hid_device *hdev, __u8 *rdesc,
@@ -142,7 +94,7 @@ index 4e84502..e71da89 100644
  
 +static int sony_set_operational_bt(struct hid_device *hdev)
 +{
-+	unsigned char buf[] = { 0xf4,  0x42, 0x03, 0x00, 0x00 };
++	unsigned char buf[] = { 0x53, 0xf4,  0x42, 0x03, 0x00, 0x00 };
 +	return hdev->hid_output_raw_report(hdev, buf, sizeof(buf), HID_FEATURE_REPORT);
 +}
 +
@@ -177,7 +129,7 @@ index 4e84502..e71da89 100644
  		.driver_data = VAIO_RDESC_CONSTANT },
  	{ }
 diff --git a/drivers/hid/hid-wacom.c b/drivers/hid/hid-wacom.c
-index 12dcda5..91dbae3 100644
+index 12dcda5..8d3b46f 100644
 --- a/drivers/hid/hid-wacom.c
 +++ b/drivers/hid/hid-wacom.c
 @@ -156,7 +156,9 @@ static int wacom_probe(struct hid_device *hdev,
@@ -230,15 +182,6 @@ index 12dcda5..91dbae3 100644
  	hidinput = list_entry(hdev->inputs.next, struct hid_input, list);
  	input = hidinput->input;
  
-@@ -228,7 +256,7 @@ static void wacom_remove(struct hid_device *hdev)
- 
- static const struct hid_device_id wacom_devices[] = {
- 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE_BLUETOOTH) },
--
-+	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS4_BLUETOOTH) },
- 	{ }
- };
- MODULE_DEVICE_TABLE(hid, wacom_devices);
 diff --git a/drivers/hid/hidraw.c b/drivers/hid/hidraw.c
 index cdd1369..d044767 100644
 --- a/drivers/hid/hidraw.c
@@ -253,10 +196,10 @@ index cdd1369..d044767 100644
  	kfree(buf);
  	return ret;
 diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
-index 2f84237..83c9f94 100644
+index e2997a8..caa16c0 100644
 --- a/drivers/hid/usbhid/hid-core.c
 +++ b/drivers/hid/usbhid/hid-core.c
-@@ -798,7 +798,8 @@ static int hid_alloc_buffers(struct usb_device *dev, struct hid_device *hid)
+@@ -774,7 +774,8 @@ static int hid_alloc_buffers(struct usb_device *dev, struct hid_device *hid)
  	return 0;
  }
  
@@ -266,7 +209,7 @@ index 2f84237..83c9f94 100644
  {
  	struct usbhid_device *usbhid = hid->driver_data;
  	struct usb_device *dev = hid_to_usb_dev(hid);
-@@ -809,7 +810,7 @@ static int usbhid_output_raw_report(struct hid_device *hid, __u8 *buf, size_t co
+@@ -785,7 +786,7 @@ static int usbhid_output_raw_report(struct hid_device *hid, __u8 *buf, size_t co
  	ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
  		HID_REQ_SET_REPORT,
  		USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
@@ -289,7 +232,7 @@ index 8709365..3661a62 100644
  	/* debugging support via debugfs */
  	unsigned short debug;
 diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
-index fc6ec1e..280529a 100644
+index 6cf526d..280529a 100644
 --- a/net/bluetooth/hidp/core.c
 +++ b/net/bluetooth/hidp/core.c
 @@ -313,10 +313,21 @@ static int hidp_send_report(struct hidp_session *session, struct hid_report *rep

hda_intel-prealloc-4mb-dmabuffer.patch:
 hda_intel.c |   15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

Index: hda_intel-prealloc-4mb-dmabuffer.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/hda_intel-prealloc-4mb-dmabuffer.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- hda_intel-prealloc-4mb-dmabuffer.patch	3 Mar 2009 18:36:19 -0000	1.1
+++ hda_intel-prealloc-4mb-dmabuffer.patch	9 Jul 2010 09:09:19 -0000	1.2
@@ -1,16 +1,25 @@
+From c69fcbd1f60b0842f7c1ad2c95692ffd19c4932b Mon Sep 17 00:00:00 2001
+From: Kyle McMartin <kyle at phobos.i.jkkm.org>
+Date: Mon, 29 Mar 2010 23:56:08 -0400
+Subject: hda_intel-prealloc-4mb-dmabuffer
+
+---
+ sound/pci/hda/hda_intel.c |   14 +++++++++++++-
+ 1 files changed, 13 insertions(+), 1 deletions(-)
+
 diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
-index c8d9178..7d3bb15 100644
+index 4bb9067..37db515 100644
 --- a/sound/pci/hda/hda_intel.c
 +++ b/sound/pci/hda/hda_intel.c
-@@ -1774,6 +1774,7 @@ azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
+@@ -1986,6 +1986,7 @@ azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
  	struct azx_pcm *apcm;
  	int pcm_dev = cpcm->device;
  	int s, err;
 +	size_t prealloc_min = 64*1024;	/* 64KB */
  
- 	if (pcm_dev >= AZX_MAX_PCMS) {
+ 	if (pcm_dev >= HDA_MAX_PCMS) {
  		snd_printk(KERN_ERR SFX "Invalid PCM device number %d\n",
-@@ -1807,10 +1808,21 @@ azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
+@@ -2019,10 +2020,21 @@ azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
  		if (cpcm->stream[s].substreams)
  			snd_pcm_set_ops(pcm, s, &azx_pcm_ops);
  	}
@@ -33,3 +42,6 @@ index c8d9178..7d3bb15 100644
  	return 0;
  }
  
+-- 
+1.7.0.1
+

hdpvr-ir-enable.patch:
 Makefile     |    4 --
 hdpvr-core.c |   12 ++------
 hdpvr-i2c.c  |   83 +++++++++++++++++++++++++++++++++++++++++------------------
 hdpvr.h      |    2 -
 4 files changed, 64 insertions(+), 37 deletions(-)

Index: hdpvr-ir-enable.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/hdpvr-ir-enable.patch,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -p -r1.8 -r1.9
--- hdpvr-ir-enable.patch	6 Jul 2010 22:04:50 -0000	1.8
+++ hdpvr-ir-enable.patch	9 Jul 2010 09:09:19 -0000	1.9
@@ -1,7 +1,26 @@
-diff -Naurp a/drivers/media/video/hdpvr/hdpvr-core.c b/drivers/media/video/hdpvr/hdpvr-core.c
---- a/drivers/media/video/hdpvr/hdpvr-core.c	2010-07-06 17:36:44.000000000 -0400
-+++ b/drivers/media/video/hdpvr/hdpvr-core.c	2010-07-06 17:38:13.000000000 -0400
-@@ -363,9 +363,8 @@ static int hdpvr_probe(struct usb_interf
+ drivers/media/video/hdpvr/Makefile     |    4 +-
+ drivers/media/video/hdpvr/hdpvr-core.c |   12 ++---
+ drivers/media/video/hdpvr/hdpvr-i2c.c  |   83 ++++++++++++++++++++++----------
+ drivers/media/video/hdpvr/hdpvr.h      |    2 +-
+ 4 files changed, 64 insertions(+), 37 deletions(-)
+
+diff --git a/drivers/media/video/hdpvr/Makefile b/drivers/media/video/hdpvr/Makefile
+index e0230fc..a0b9a43 100644
+--- a/drivers/media/video/hdpvr/Makefile
++++ b/drivers/media/video/hdpvr/Makefile
+@@ -1,6 +1,4 @@
+-hdpvr-objs	:= hdpvr-control.o hdpvr-core.o hdpvr-video.o
+-
+-hdpvr-$(CONFIG_I2C) += hdpvr-i2c.o
++hdpvr-objs	:= hdpvr-control.o hdpvr-i2c.o hdpvr-core.o hdpvr-video.o
+ 
+ obj-$(CONFIG_VIDEO_HDPVR) += hdpvr.o
+ 
+diff --git a/drivers/media/video/hdpvr/hdpvr-core.c b/drivers/media/video/hdpvr/hdpvr-core.c
+index 2fc9865..c72793a 100644
+--- a/drivers/media/video/hdpvr/hdpvr-core.c
++++ b/drivers/media/video/hdpvr/hdpvr-core.c
+@@ -364,9 +364,8 @@ static int hdpvr_probe(struct usb_interface *interface,
  		goto error;
  	}
  
@@ -13,12 +32,12 @@ diff -Naurp a/drivers/media/video/hdpvr/
  	if (retval < 0) {
  		v4l2_err(&dev->v4l2_dev, "registering i2c adapter failed\n");
  		goto error;
-@@ -411,12 +410,9 @@ static void hdpvr_disconnect(struct usb_
+@@ -412,12 +411,9 @@ static void hdpvr_disconnect(struct usb_interface *interface)
  	mutex_unlock(&dev->io_mutex);
  
  	/* deregister I2C adapter */
 -#ifdef CONFIG_I2C
-+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
++#if defined(CONFIG_I2C) || (CONFIG_I2C_MODULE)
  	mutex_lock(&dev->i2c_mutex);
 -	if (dev->i2c_adapter)
 -		i2c_del_adapter(dev->i2c_adapter);
@@ -28,21 +47,10 @@ diff -Naurp a/drivers/media/video/hdpvr/
  	mutex_unlock(&dev->i2c_mutex);
  #endif /* CONFIG_I2C */
  
-diff -Naurp a/drivers/media/video/hdpvr/hdpvr.h b/drivers/media/video/hdpvr/hdpvr.h
---- a/drivers/media/video/hdpvr/hdpvr.h	2010-02-24 13:52:17.000000000 -0500
-+++ b/drivers/media/video/hdpvr/hdpvr.h	2010-07-06 17:42:20.000000000 -0400
-@@ -101,7 +101,7 @@ struct hdpvr_device {
- 	struct work_struct	worker;
- 
- 	/* I2C adapter */
--	struct i2c_adapter	*i2c_adapter;
-+	struct i2c_adapter	i2c_adapter;
- 	/* I2C lock */
- 	struct mutex		i2c_mutex;
- 
-diff -Naurp a/drivers/media/video/hdpvr/hdpvr-i2c.c b/drivers/media/video/hdpvr/hdpvr-i2c.c
---- a/drivers/media/video/hdpvr/hdpvr-i2c.c	2010-07-06 17:36:51.000000000 -0400
-+++ b/drivers/media/video/hdpvr/hdpvr-i2c.c	2010-07-06 17:45:50.000000000 -0400
+diff --git a/drivers/media/video/hdpvr/hdpvr-i2c.c b/drivers/media/video/hdpvr/hdpvr-i2c.c
+index 463b81b..a0557e4 100644
+--- a/drivers/media/video/hdpvr/hdpvr-i2c.c
++++ b/drivers/media/video/hdpvr/hdpvr-i2c.c
 @@ -10,6 +10,8 @@
   *
   */
@@ -50,87 +58,83 @@ diff -Naurp a/drivers/media/video/hdpvr/
 +#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
 +
  #include <linux/i2c.h>
+ #include <linux/slab.h>
  
- #include "hdpvr.h"
-@@ -19,10 +21,13 @@
- 
- #define REQTYPE_I2C_READ	0xb1
+@@ -22,8 +24,11 @@
  #define REQTYPE_I2C_WRITE	0xb0
--#define REQTYPE_I2C_WRITE_STATT	0xd0
-+#define REQTYPE_I2C_WRITE_STAT	0xd0
-+
-+#define HDPVR_HW_Z8F0811_IR_TX_I2C_ADDR	0x70
-+#define HDPVR_HW_Z8F0811_IR_RX_I2C_ADDR	0x71
+ #define REQTYPE_I2C_WRITE_STATT	0xd0
  
- static int hdpvr_i2c_read(struct hdpvr_device *dev, unsigned char addr,
+-static int hdpvr_i2c_read(struct hdpvr_device *dev, unsigned char addr,
 -			  char *data, int len)
-+			  char *data, int len, int bus)
++#define HDPVR_HW_Z8F0811_IR_TX_I2C_ADDR	0x70
++#define HDPVR_HW_Z8F0811_IR_RX_I2C_ADDR	0x71
++
++static int hdpvr_i2c_read(struct hdpvr_device *dev, int bus,
++			  unsigned char addr, char *data, int len)
  {
  	int ret;
  	char *buf = kmalloc(len, GFP_KERNEL);
-@@ -32,7 +37,7 @@ static int hdpvr_i2c_read(struct hdpvr_d
+@@ -33,7 +38,7 @@ static int hdpvr_i2c_read(struct hdpvr_device *dev, unsigned char addr,
  	ret = usb_control_msg(dev->udev,
  			      usb_rcvctrlpipe(dev->udev, 0),
  			      REQTYPE_I2C_READ, CTRL_READ_REQUEST,
 -			      0x100|addr, 0, buf, len, 1000);
-+			      bus<<8 | addr, 0, buf, len, 1000);
++			      (bus << 8) | addr, 0, buf, len, 1000);
  
  	if (ret == len) {
  		memcpy(data, buf, len);
-@@ -46,7 +51,7 @@ static int hdpvr_i2c_read(struct hdpvr_d
+@@ -46,8 +51,8 @@ static int hdpvr_i2c_read(struct hdpvr_device *dev, unsigned char addr,
+ 	return ret;
  }
  
- static int hdpvr_i2c_write(struct hdpvr_device *dev, unsigned char addr,
+-static int hdpvr_i2c_write(struct hdpvr_device *dev, unsigned char addr,
 -			   char *data, int len)
-+			   char *data, int len, int bus)
++static int hdpvr_i2c_write(struct hdpvr_device *dev, int bus,
++			   unsigned char addr, char *data, int len)
  {
  	int ret;
  	char *buf = kmalloc(len, GFP_KERNEL);
-@@ -57,17 +62,17 @@ static int hdpvr_i2c_write(struct hdpvr_
+@@ -58,7 +63,7 @@ static int hdpvr_i2c_write(struct hdpvr_device *dev, unsigned char addr,
  	ret = usb_control_msg(dev->udev,
  			      usb_sndctrlpipe(dev->udev, 0),
  			      REQTYPE_I2C_WRITE, CTRL_WRITE_REQUEST,
 -			      0x100|addr, 0, buf, len, 1000);
-+			      bus<<8 | addr, 0, buf, len, 1000);
++			      (bus << 8) | addr, 0, buf, len, 1000);
  
  	if (ret < 0)
  		goto error;
- 
- 	ret = usb_control_msg(dev->udev,
- 			      usb_rcvctrlpipe(dev->udev, 0),
--			      REQTYPE_I2C_WRITE_STATT, CTRL_READ_REQUEST,
-+			      REQTYPE_I2C_WRITE_STAT, CTRL_READ_REQUEST,
+@@ -68,7 +73,7 @@ static int hdpvr_i2c_write(struct hdpvr_device *dev, unsigned char addr,
+ 			      REQTYPE_I2C_WRITE_STATT, CTRL_READ_REQUEST,
  			      0, 0, buf, 2, 1000);
  
 -	if (ret == 2)
-+	if (ret == 2 && buf[1] == (len - 1))
++	if ((ret == 2) && (buf[1] == (len - 1)))
  		ret = 0;
  	else if (ret >= 0)
  		ret = -EIO;
-@@ -93,10 +98,10 @@ static int hdpvr_transfer(struct i2c_ada
+@@ -93,10 +98,10 @@ static int hdpvr_transfer(struct i2c_adapter *i2c_adapter, struct i2c_msg *msgs,
+ 		addr = msgs[i].addr << 1;
  
  		if (msgs[i].flags & I2C_M_RD)
- 			retval = hdpvr_i2c_read(dev, addr, msgs[i].buf,
--						msgs[i].len);
-+						msgs[i].len, 1);
+-			retval = hdpvr_i2c_read(dev, addr, msgs[i].buf,
++			retval = hdpvr_i2c_read(dev, 1, addr, msgs[i].buf,
+ 						msgs[i].len);
  		else
- 			retval = hdpvr_i2c_write(dev, addr, msgs[i].buf,
--						 msgs[i].len);
-+						 msgs[i].len, 1);
+-			retval = hdpvr_i2c_write(dev, addr, msgs[i].buf,
++			retval = hdpvr_i2c_write(dev, 1, addr, msgs[i].buf,
+ 						 msgs[i].len);
  	}
  
- 	mutex_unlock(&dev->i2c_mutex);
-@@ -114,31 +119,61 @@ static struct i2c_algorithm hdpvr_algo =
+@@ -115,31 +120,59 @@ static struct i2c_algorithm hdpvr_algo = {
  	.functionality = hdpvr_functionality,
  };
  
-+static struct i2c_adapter hdpvr_i2c_adap_template = {
-+	.name		= "Hauppauge HD PVR I2C",
-+	.owner		= THIS_MODULE,
-+	.id		= I2C_HW_B_HDPVR,
-+	.algo		= &hdpvr_algo,
-+	.algo_data	= NULL,
-+	.class		= I2C_CLASS_TV_ANALOG,
++static struct i2c_adapter hdpvr_i2c_adapter_template = {
++	.name 	= "Hauppage HD PVR I2C",
++	.owner 	= THIS_MODULE,
++	.id 	= I2C_HW_B_HDPVR,
++	.algo 	= &hdpvr_algo,
++	.class 	= I2C_CLASS_TV_ANALOG,
 +};
 +
 +static struct i2c_board_info hdpvr_i2c_board_info = {
@@ -144,20 +148,20 @@ diff -Naurp a/drivers/media/video/hdpvr/
 +
 +	mutex_lock(&dev->i2c_mutex);
 +
-+	hdpvr_i2c_read(dev, 0x54, buffer, 1, 0);
++	hdpvr_i2c_read(dev, 0, 0x54, buffer, 1);
 +
 +	buffer[0] = 0;
 +	buffer[1] = 0x8;
-+	hdpvr_i2c_write(dev, 0x54, buffer, 2, 1);
++	hdpvr_i2c_write(dev, 1, 0x54, buffer, 2);
 +
 +	buffer[1] = 0x18;
-+	hdpvr_i2c_write(dev, 0x54, buffer, 2, 1);
++	hdpvr_i2c_write(dev, 1, 0x54, buffer, 2);
 +
 +	mutex_unlock(&dev->i2c_mutex);
++
 +	return 0;
 +}
 +
-+
  int hdpvr_register_i2c_adapter(struct hdpvr_device *dev)
  {
 -	struct i2c_adapter *i2c_adap;
@@ -165,18 +169,8 @@ diff -Naurp a/drivers/media/video/hdpvr/
  
 -	i2c_adap = kzalloc(sizeof(struct i2c_adapter), GFP_KERNEL);
 -	if (i2c_adap == NULL)
+-		goto error;
 +	hdpvr_activate_ir(dev);
-+
-+	memcpy(&dev->i2c_adapter, &hdpvr_i2c_adap_template,
-+	       sizeof(struct i2c_adapter));
-+	dev->i2c_adapter.dev.parent = &dev->udev->dev;
-+
-+	i2c_set_adapdata(&dev->i2c_adapter, dev);
-+
-+	retval = i2c_add_adapter(&dev->i2c_adapter);
-+
-+	if (retval)
- 		goto error;
  
 -	strlcpy(i2c_adap->name, "Hauppauge HD PVR I2C",
 -		sizeof(i2c_adap->name));
@@ -184,11 +178,18 @@ diff -Naurp a/drivers/media/video/hdpvr/
 -	i2c_adap->class = I2C_CLASS_TV_ANALOG;
 -	i2c_adap->owner = THIS_MODULE;
 -	i2c_adap->dev.parent = &dev->udev->dev;
--
++	memcpy(&dev->i2c_adapter, &hdpvr_i2c_adapter_template,
++		sizeof(struct i2c_adapter));
++	dev->i2c_adapter.dev.parent = &dev->udev->dev;
+ 
 -	i2c_set_adapdata(i2c_adap, dev);
--
++	i2c_set_adapdata(&dev->i2c_adapter, dev);
+ 
 -	retval = i2c_add_adapter(i2c_adap);
--
++	retval = i2c_add_adapter(&dev->i2c_adapter);
++	if (retval)
++		goto error;
+ 
 -	if (!retval)
 -		dev->i2c_adapter = i2c_adap;
 -	else
@@ -200,14 +201,16 @@ diff -Naurp a/drivers/media/video/hdpvr/
  }
 +
 +#endif /* CONFIG_I2C */
-diff -Naurp a/drivers/media/video/hdpvr/Makefile b/drivers/media/video/hdpvr/Makefile
---- a/drivers/media/video/hdpvr/Makefile	2010-07-06 17:36:38.000000000 -0400
-+++ b/drivers/media/video/hdpvr/Makefile	2010-07-06 17:35:17.000000000 -0400
-@@ -1,6 +1,4 @@
--hdpvr-objs	:= hdpvr-control.o hdpvr-core.o hdpvr-video.o
--
--hdpvr-$(CONFIG_I2C) += hdpvr-i2c.o
-+hdpvr-objs	:= hdpvr-control.o hdpvr-core.o hdpvr-i2c.o hdpvr-video.o
+diff --git a/drivers/media/video/hdpvr/hdpvr.h b/drivers/media/video/hdpvr/hdpvr.h
+index 49ae25d..8a5729a 100644
+--- a/drivers/media/video/hdpvr/hdpvr.h
++++ b/drivers/media/video/hdpvr/hdpvr.h
+@@ -102,7 +102,7 @@ struct hdpvr_device {
+ 	struct work_struct	worker;
  
- obj-$(CONFIG_VIDEO_HDPVR) += hdpvr.o
+ 	/* I2C adapter */
+-	struct i2c_adapter	*i2c_adapter;
++	struct i2c_adapter	i2c_adapter;
+ 	/* I2C lock */
+ 	struct mutex		i2c_mutex;
  

iwlwifi-manage-QoS-by-mac-stack.patch:
 iwl-agn.c      |   15 ------
 iwl-core.c     |  142 ++++++---------------------------------------------------
 iwl-core.h     |    3 -
 iwl-dev.h      |   21 --------
 iwl3945-base.c |    8 ---
 5 files changed, 17 insertions(+), 172 deletions(-)

Index: iwlwifi-manage-QoS-by-mac-stack.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/iwlwifi-manage-QoS-by-mac-stack.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- iwlwifi-manage-QoS-by-mac-stack.patch	13 Jun 2010 12:29:40 -0000	1.1
+++ iwlwifi-manage-QoS-by-mac-stack.patch	9 Jul 2010 09:09:20 -0000	1.2
@@ -1,7 +1,7 @@
 From: Stanislaw Gruszka <sgruszka at redhat.com>
 To: kernel at lists.fedoraproject.org, "John W. Linville" <linville at redhat.com>
-Subject: [PATCH 2/4 2.6.33.y] iwlwifi: manage QoS by mac stack
-Date: Fri, 11 Jun 2010 17:04:18 +0200
+Subject: [PATCH 2/4 2.6.34.y] iwlwifi: manage QoS by mac stack
+Date: Fri, 11 Jun 2010 17:05:12 +0200
 
 commit e61146e36b40fd9d346118c40285913236c329f3 upstream.
 
@@ -26,10 +26,10 @@ Signed-off-by: Stanislaw Gruszka <sgrusz
  5 files changed, 17 insertions(+), 171 deletions(-)
 
 diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
-index 5622a55..9ba4207 100644
+index bdff565..21c3ef0 100644
 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c
 +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
-@@ -2327,7 +2327,6 @@ void iwl_post_associate(struct iwl_priv *priv)
+@@ -2515,7 +2515,6 @@ void iwl_post_associate(struct iwl_priv *priv)
  {
  	struct ieee80211_conf *conf = NULL;
  	int ret = 0;
@@ -37,7 +37,7 @@ index 5622a55..9ba4207 100644
  
  	if (priv->iw_mode == NL80211_IFTYPE_AP) {
  		IWL_ERR(priv, "%s Should not be called in AP mode\n", __func__);
-@@ -2412,10 +2411,6 @@ void iwl_post_associate(struct iwl_priv *priv)
+@@ -2600,10 +2599,6 @@ void iwl_post_associate(struct iwl_priv *priv)
  	if (priv->iw_mode == NL80211_IFTYPE_ADHOC)
  		priv->assoc_station_added = 1;
  
@@ -48,7 +48,7 @@ index 5622a55..9ba4207 100644
  	/* the chain noise calibration will enabled PM upon completion
  	 * If chain noise has already been run, then we need to enable
  	 * power management here */
-@@ -2602,7 +2597,6 @@ static int iwl_mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
+@@ -2780,7 +2775,6 @@ static int iwl_mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
  void iwl_config_ap(struct iwl_priv *priv)
  {
  	int ret = 0;
@@ -56,7 +56,7 @@ index 5622a55..9ba4207 100644
  
  	if (test_bit(STATUS_EXIT_PENDING, &priv->status))
  		return;
-@@ -2654,10 +2648,6 @@ void iwl_config_ap(struct iwl_priv *priv)
+@@ -2832,10 +2826,6 @@ void iwl_config_ap(struct iwl_priv *priv)
  		/* restore RXON assoc */
  		priv->staging_rxon.filter_flags |= RXON_FILTER_ASSOC_MSK;
  		iwlcore_commit_rxon(priv);
@@ -67,7 +67,7 @@ index 5622a55..9ba4207 100644
  		iwl_add_bcast_station(priv);
  	}
  	iwl_send_beacon_cmd(priv);
-@@ -3195,11 +3185,6 @@ static int iwl_init_drv(struct iwl_priv *priv)
+@@ -3396,11 +3386,6 @@ static int iwl_init_drv(struct iwl_priv *priv)
  
  	iwl_init_scan_params(priv);
  
@@ -80,10 +80,10 @@ index 5622a55..9ba4207 100644
  	/* Set the tx_power_user_lmt to the lowest power level
  	 * this value will get overwritten by channel max power avg
 diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
-index 6e9e156..d79b1e9 100644
+index 049b652..2dd8aaa 100644
 --- a/drivers/net/wireless/iwlwifi/iwl-core.c
 +++ b/drivers/net/wireless/iwlwifi/iwl-core.c
-@@ -301,17 +301,13 @@ EXPORT_SYMBOL(iwl_hw_nic_init);
+@@ -325,17 +325,13 @@ EXPORT_SYMBOL(iwl_hw_nic_init);
  /*
   * QoS  support
  */
@@ -102,7 +102,7 @@ index 6e9e156..d79b1e9 100644
  	if (priv->qos_data.qos_active)
  		priv->qos_data.def_qos_parm.qos_flags |=
  			QOS_PARAM_FLG_UPDATE_EDCA_MSK;
-@@ -319,118 +315,14 @@ void iwl_activate_qos(struct iwl_priv *priv, u8 force)
+@@ -343,118 +339,14 @@ void iwl_activate_qos(struct iwl_priv *priv, u8 force)
  	if (priv->current_ht_config.is_ht)
  		priv->qos_data.def_qos_parm.qos_flags |= QOS_PARAM_FLG_TGN_MSK;
  
@@ -227,7 +227,7 @@ index 6e9e156..d79b1e9 100644
  
  #define MAX_BIT_RATE_40_MHZ 150 /* Mbps */
  #define MAX_BIT_RATE_20_MHZ 72 /* Mbps */
-@@ -2273,12 +2165,6 @@ int iwl_mac_conf_tx(struct ieee80211_hw *hw, u16 queue,
+@@ -2306,12 +2198,6 @@ int iwl_mac_conf_tx(struct ieee80211_hw *hw, u16 queue,
  			cpu_to_le16((params->txop * 32));
  
  	priv->qos_data.def_qos_parm.ac[q].reserved1 = 0;
@@ -240,7 +240,7 @@ index 6e9e156..d79b1e9 100644
  
  	spin_unlock_irqrestore(&priv->lock, flags);
  
-@@ -2554,11 +2440,8 @@ int iwl_mac_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb)
+@@ -2587,11 +2473,8 @@ int iwl_mac_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb)
  	IWL_DEBUG_MAC80211(priv, "leave\n");
  	spin_unlock_irqrestore(&priv->lock, flags);
  
@@ -252,9 +252,9 @@ index 6e9e156..d79b1e9 100644
  	return 0;
  }
  EXPORT_SYMBOL(iwl_mac_beacon_update);
-@@ -2790,6 +2673,15 @@ int iwl_mac_config(struct ieee80211_hw *hw, u32 changed)
- 	if (priv->cfg->ops->hcmd->set_rxon_chain)
- 		priv->cfg->ops->hcmd->set_rxon_chain(priv);
+@@ -2833,6 +2716,15 @@ int iwl_mac_config(struct ieee80211_hw *hw, u32 changed)
+ 		iwl_set_tx_power(priv, conf->power_level, false);
+ 	}
  
 +	if (changed & IEEE80211_CONF_CHANGE_QOS) {
 +		bool qos_active = !!(conf->flags & IEEE80211_CONF_QOS);
@@ -268,7 +268,7 @@ index 6e9e156..d79b1e9 100644
  	if (!iwl_is_ready(priv)) {
  		IWL_DEBUG_MAC80211(priv, "leave - not ready\n");
  		goto out;
-@@ -2860,8 +2752,6 @@ void iwl_mac_reset_tsf(struct ieee80211_hw *hw)
+@@ -2867,8 +2759,6 @@ void iwl_mac_reset_tsf(struct ieee80211_hw *hw)
  	memset(&priv->current_ht_config, 0, sizeof(struct iwl_ht_config));
  	spin_unlock_irqrestore(&priv->lock, flags);
  
@@ -278,10 +278,10 @@ index 6e9e156..d79b1e9 100644
  	priv->assoc_id = 0;
  	priv->assoc_capability = 0;
 diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h
-index b69e972..403f512 100644
+index 36940a9..70af968 100644
 --- a/drivers/net/wireless/iwlwifi/iwl-core.h
 +++ b/drivers/net/wireless/iwlwifi/iwl-core.h
-@@ -298,8 +298,7 @@ struct iwl_cfg {
+@@ -304,8 +304,7 @@ struct iwl_cfg {
  struct ieee80211_hw *iwl_alloc_all(struct iwl_cfg *cfg,
  		struct ieee80211_ops *hw_ops);
  void iwl_hw_detect(struct iwl_priv *priv);
@@ -292,10 +292,10 @@ index b69e972..403f512 100644
  		    const struct ieee80211_tx_queue_params *params);
  void iwl_set_rxon_hwcrypto(struct iwl_priv *priv, int hw_decrypt);
 diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h
-index 3822cf5..f2a9356 100644
+index ef1720a..cc12e89 100644
 --- a/drivers/net/wireless/iwlwifi/iwl-dev.h
 +++ b/drivers/net/wireless/iwlwifi/iwl-dev.h
-@@ -518,30 +518,9 @@ struct iwl_ht_config {
+@@ -519,30 +519,9 @@ struct iwl_ht_config {
  	u8 non_GF_STA_present;
  };
  
@@ -327,10 +327,10 @@ index 3822cf5..f2a9356 100644
  };
  
 diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
-index adbb3ea..2280ba7 100644
+index b74a56c..c054527 100644
 --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
 +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
-@@ -3127,8 +3127,6 @@ void iwl3945_post_associate(struct iwl_priv *priv)
+@@ -3152,8 +3152,6 @@ void iwl3945_post_associate(struct iwl_priv *priv)
  		break;
  	}
  
@@ -339,9 +339,9 @@ index adbb3ea..2280ba7 100644
  	/* we have just associated, don't start scan too early */
  	priv->next_scan_jiffies = jiffies + IWL_DELAY_NEXT_SCAN;
  }
-@@ -3841,11 +3839,6 @@ static int iwl3945_init_drv(struct iwl_priv *priv)
- 
+@@ -3861,11 +3859,6 @@ static int iwl3945_init_drv(struct iwl_priv *priv)
  	priv->iw_mode = NL80211_IFTYPE_STATION;
+ 	priv->missed_beacon_threshold = IWL_MISSED_BEACON_THRESHOLD_DEF;
  
 -	iwl_reset_qos(priv);
 -

iwlwifi-recover_from_tx_stall.patch:
 iwl-3945.c |    1 +
 1 file changed, 1 insertion(+)

Index: iwlwifi-recover_from_tx_stall.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/iwlwifi-recover_from_tx_stall.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- iwlwifi-recover_from_tx_stall.patch	24 May 2010 17:12:01 -0000	1.1
+++ iwlwifi-recover_from_tx_stall.patch	9 Jul 2010 09:09:20 -0000	1.2
@@ -1,12 +1,11 @@
-https://bugzilla.redhat.com/show_bug.cgi?id=589777#c5
-
-diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c
---- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c.orig	2010-05-19 16:07:15.000000000 -0400
-+++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c	2010-05-19 16:09:42.000000000 -0400
-@@ -2794,6 +2794,7 @@ static struct iwl_lib_ops iwl3945_lib = 
- 	.post_associate = iwl3945_post_associate,
+diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c
+index 0728054..ae43a43 100644
+--- a/drivers/net/wireless/iwlwifi/iwl-3945.c
++++ b/drivers/net/wireless/iwlwifi/iwl-3945.c
+@@ -2792,6 +2792,7 @@ static struct iwl_lib_ops iwl3945_lib = {
  	.isr = iwl_isr_legacy,
  	.config_ap = iwl3945_config_ap,
+ 	.add_bcast_station = iwl3945_add_bcast_station,
 +	.recover_from_tx_stall = iwl_bg_monitor_recover,
  };
  


View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.2084 -r 1.2085 kernel.specIndex: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/kernel.spec,v
retrieving revision 1.2084
retrieving revision 1.2085
diff -u -p -r1.2084 -r1.2085
--- kernel.spec	6 Jul 2010 22:04:50 -0000	1.2084
+++ kernel.spec	9 Jul 2010 09:09:20 -0000	1.2085
@@ -26,9 +26,9 @@ Summary: The Linux kernel
 # % define buildid .local
 ###################################################################
 
-# buildid can also be specified on the rpmbuild command line
-# by adding --define="buildid .whatever". If both kinds of buildid
-# are specified they will be concatenated together.
+# The buildid can also be specified on the rpmbuild command line
+# by adding --define="buildid .whatever". If both the specfile and
+# the environment define a buildid they will be concatenated together.
 %if 0%{?orig_buildid:1}
 %if 0%{?buildid:1}
 %global srpm_buildid %{buildid}
@@ -48,20 +48,20 @@ Summary: The Linux kernel
 # 1.1205.1.1.  In this case we drop the initial 1, subtract fedora_cvs_origin
 # from the second number, and then append the rest of the RCS string as is.
 # Don't stare at the awk too long, you'll go blind.
-%define fedora_cvs_origin   1937
+%define fedora_cvs_origin   2084
 %define fedora_cvs_revision() %2
 %global fedora_build %(echo %{fedora_cvs_origin}.%{fedora_cvs_revision $Revision$} | awk -F . '{ OFS = "."; ORS = ""; print $3 - $1 ; i = 4 ; OFS = ""; while (i <= NF) { print ".", $i ; i++} }')
 
 # base_sublevel is the kernel version we're starting with and patching
 # on top of -- for example, 2.6.22-rc7-git1 starts with a 2.6.21 base,
 # which yields a base_sublevel of 21.
-%define base_sublevel 33
+%define base_sublevel 34
 
 ## If this is a released kernel ##
 %if 0%{?released_kernel}
 
 # Do we have a -stable update to apply?
-%define stable_update 6
+%define stable_update 1
 # Is it a -stable RC?
 %define stable_rc 0
 # Set rpm version accordingly
@@ -101,8 +101,6 @@ Summary: The Linux kernel
 %define with_up        %{?_without_up:        0} %{?!_without_up:        1}
 # kernel-smp (only valid for ppc 32-bit)
 %define with_smp       %{?_without_smp:       0} %{?!_without_smp:       1}
-# kernel-kdump
-%define with_kdump     %{?_without_kdump:     0} %{?!_without_kdump:     1}
 # kernel-debug
 %define with_debug     %{?_without_debug:     0} %{?!_without_debug:     1}
 # kernel-doc
@@ -121,8 +119,6 @@ Summary: The Linux kernel
 %define with_bootwrapper %{?_without_bootwrapper: 0} %{?!_without_bootwrapper: 1}
 # Want to build a the vsdo directories installed
 %define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1}
-# Use dracut instead of mkinitrd for initrd image generation
-%define with_dracut       %{?_without_dracut:       0} %{?!_without_dracut:       1}
 
 # Build the kernel-doc package, but don't fail the build if it botches.
 # Here "true" means "continue" and "false" means "fail the build".
@@ -234,14 +230,12 @@ Summary: The Linux kernel
 # if requested, only build base kernel
 %if %{with_baseonly}
 %define with_smp 0
-%define with_kdump 0
 %define with_debug 0
 %endif
 
 # if requested, only build smp kernel
 %if %{with_smponly}
 %define with_up 0
-%define with_kdump 0
 %define with_debug 0
 %endif
 
@@ -252,8 +246,6 @@ Summary: The Linux kernel
 %endif
 %define with_smp 0
 %define with_pae 0
-%define with_xen 0
-%define with_kdump 0
 %define with_perftool 0
 %endif
 
@@ -271,8 +263,6 @@ Summary: The Linux kernel
 %define with_smp 0
 %endif
 
-%define with_kdump 0
-
 # don't do debug builds on anything but i686 and x86_64
 %ifnarch i686 x86_64
 %define with_debug 0
@@ -332,16 +322,12 @@ Summary: The Linux kernel
 %ifarch s390x
 %define asmarch s390
 %define hdrarch s390
-%define all_arch_configs kernel-%{version}-s390x*.config
+%define all_arch_configs kernel-%{version}-s390x.config
 %define image_install_path boot
 %define make_target image
 %define kernel_image arch/s390/boot/image
 %endif
 
-%ifarch sparc
-# We only build sparc headers since we dont support sparc32 hardware
-%endif
-
 %ifarch sparc64
 %define asmarch sparc
 %define all_arch_configs kernel-%{version}-sparc64*.config
@@ -402,15 +388,13 @@ Summary: The Linux kernel
 # us use the previous build of that package -- it'll just be completely AWOL.
 # Which is a BadThing(tm).
 
-# We don't build a kernel on i386; we only do kernel-headers there,
-# and we no longer build for 31bit s390. Same for 32bit sparc and arm.
+# We only build kernel-headers on the following...
 %define nobuildarches i386 s390 sparc %{arm}
 
 %ifarch %nobuildarches
 %define with_up 0
 %define with_smp 0
 %define with_pae 0
-%define with_kdump 0
 %define with_debuginfo 0
 %define with_perftool 0
 %define _enable_debug_packages 0
@@ -440,19 +424,6 @@ Summary: The Linux kernel
 #
 %define package_conflicts initscripts < 7.23, udev < 063-6, iptables < 1.3.2-1, ipw2200-firmware < 2.4, iwl4965-firmware < 228.57.2, selinux-policy-targeted < 1.25.3-14, squashfs-tools < 4.0, wireless-tools < 29-3
 
-#
-# The ld.so.conf.d file we install uses syntax older ldconfig's don't grok.
-#
-%define kernel_xen_conflicts glibc < 2.3.5-1, xen < 3.0.1
-
-%define kernel_PAE_obsoletes kernel-smp < 2.6.17, kernel-xen <= 2.6.27-0.2.rc0.git6.fc10
-%define kernel_PAE_provides kernel-xen = %{rpmversion}-%{pkg_release}
-
-%ifarch x86_64
-%define kernel_obsoletes kernel-xen <= 2.6.27-0.2.rc0.git6.fc10
-%define kernel_provides kernel-xen = %{rpmversion}-%{pkg_release}
-%endif
-
 # We moved the drm include files into kernel-headers, make sure there's
 # a recent enough libdrm-devel on the system that doesn't have those.
 %define kernel_headers_conflicts libdrm-devel < 2.4.0-0.15
@@ -462,11 +433,7 @@ Summary: The Linux kernel
 # scripts use them.
 #
 %define kernel_prereq  fileutils, module-init-tools, initscripts >= 8.11.1-1, grubby >= 7.0.10-1
-%if %{with_dracut}
 %define initrd_prereq  dracut >= 001-7
-%else
-%define initrd_prereq  mkinitrd >= 6.0.61-1
-%endif
 
 #
 # This macro does requires, provides, conflicts, obsoletes for a kernel package.
@@ -487,6 +454,9 @@ Requires(pre): %{initrd_prereq}\
 Requires(pre): kernel-firmware >= %{rpmversion}-%{pkg_release}\
 %else\
 Requires(pre): linux-firmware\
+%if %{with_perftool}\
+Requires(pre): elfutils-libs\
+%endif\
 %endif\
 Requires(post): /sbin/new-kernel-pkg\
 Requires(preun): /sbin/new-kernel-pkg\
@@ -531,7 +501,7 @@ BuildRequires: xmlto, asciidoc
 BuildRequires: sparse >= 0.4.1
 %endif
 %if %{with_perftool}
-BuildRequires: elfutils-libelf-devel zlib-devel binutils-devel libdwarf-devel
+BuildRequires: elfutils-devel zlib-devel binutils-devel
 %endif
 BuildConflicts: rhbuildsys(DiskFree) < 500Mb
 
@@ -630,7 +600,6 @@ Patch05: linux-2.6-makefile-after_link.p
 # revert upstream patches we get via other methods
 Patch09: linux-2.6-upstream-reverts.patch
 # Git trees.
-Patch10: git-cpufreq.patch
 Patch11: git-bluetooth.patch
 
 # Standalone patches
@@ -640,229 +609,146 @@ Patch21: linux-2.6-tracehook.patch
 Patch22: linux-2.6-utrace.patch
 Patch23: linux-2.6-utrace-ptrace.patch
 
-Patch143: linux-2.6-g5-therm-shutdown.patch
-Patch144: linux-2.6-vio-modalias.patch
+Patch50: linux-2.6-x86-cfi_sections.patch
 
 Patch150: linux-2.6.29-sparc-IOC_TYPECHECK.patch
 
[...2857 lines suppressed...]
-
-* Sun Apr 12 2009 Kyle McMartin <kyle at redhat.com>
-- 2.6.30-rc1-git5
-- revert-fix-modules_install-via-nfs.patch: reverted upstream
-
-* Thu Apr 09 2009 Kyle McMartin <kyle at redhat.com>
-- actually drop utrace-ftrace from srpm.
-
-* Thu Apr 09 2009 Kyle McMartin <kyle at redhat.com>
-- 2.6.30-rc1-git2
-- CONFIG_IGBVF=m
-- CONFIG_NETFILTER_XT_TARGET_LED=m
-
-* Thu Apr 09 2009 Dave Jones <davej at redhat.com>
-- Bring back the /dev/crash driver. (#492803)
-
-* Wed Apr 08 2009 Dave Jones <davej at redhat.com>
-- disable MMIOTRACE in non-debug builds (#494584)
-
-* Wed Apr 08 2009 Kyle McMartin <kyle at redhat.com> 2.6.30-0.44.rc1
-- 2.6.30-rc1
-- linux-2.6-hwmon-atk0110.patch: drop
-- CONFIG_DETECT_HUNG_TASK=y
-- # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
-
-* Tue Apr  7 2009 Roland McGrath <roland at redhat.com>
-- utrace update, drop unfinished utrace-ftrace
-
-* Tue Apr 07 2009 Kyle McMartin <kyle at redhat.com>
-- Linux 2.6.29-git15
-- EXT3_DEFAULTS_TO_ORDERED on for now.
-- X86_X2APIC enabled.
-- LEDS_LP5521, LEDS_BD2802 off... look not generally relevant.
-- LIBFCOE on.
-
-* Tue Apr 07 2009 Dave Jones <davej at redhat.com>
-- Enable CONFIG_CIFS_STATS (#494545)
-
-* Mon Apr 06 2009 Kyle McMartin <kyle at redhat.com>
-- linux-2.6-execshield.patch: rebase for 2.6.30
-
-* Mon Apr 06 2009 Kyle McMartin <kyle at redhat.com>
-- Linux 2.6.29-git13
-- drop patches merged upstream:
-  - fix-ppc-debug_kmap_atomic.patch
-  - fix-staging-at76.patch
-  - linux-2.6-acpi-video-didl-intel-outputs.patch
-  - linux-2.6-acpi-strict-resources.patch
-  - linux-2.6-sony-laptop-rfkill.patch
-  - linux-2.6-btrfs-fix-umount-hang.patch
-  - linux-2.6-fiemap-header-install.patch
-  - linux-2.6-debug-dma-api.patch
-  - dma-api-debug-fixes.patch
-  - linux-2.6-ext4-flush-on-close.patch
-  - linux-2.6-relatime-by-default.patch
-  - linux-2.6-pci-sysfs-remove-id.patch
-  - linux-2.6-scsi-cpqarray-set-master.patch
-  - alsa-rewrite-hw_ptr-updaters.patch
-  - alsa-pcm-always-reset-invalid-position.patch
-  - alsa-pcm-fix-delta-calc-at-overlap.patch
-  - alsa-pcm-safer-boundary-checks.patch
-  - linux-2.6-input-hid-extra-gamepad.patch
-  - linux-2.6-ipw2x00-age-scan-results-on-resume.patch
-  - linux-2.6-dropwatch-protocol.patch
-  - linux-2.6-net-fix-gro-bug.patch
-  - linux-2.6-net-fix-another-gro-bug.patch
-  - linux-2.6-net-xfrm-fix-spin-unlock.patch
-  - linux-2.6.29-pat-change-is_linear_pfn_mapping-to-not-use-vm_pgoff.patch
-  - linux-2.6.29-pat-pci-change-prot-for-inherit.patch
-
-* Thu Apr 02 2009 Josef Bacik <josef at toxicpanda.com>
-- linux-2.6-btrfs-fix-umount-hang.patch: fix umount hang on btrfs
-
-* Thu Apr 02 2009 Kyle McMartin <kyle at redhat.com>
-- fix-ppc-debug_kmap_atomic.patch: fix build failures on ppc.
-
-* Thu Apr 02 2009 Kyle McMartin <kyle at redhat.com>
-- Linux 2.6.29-git9
-
-* Tue Mar 31 2009 Kyle McMartin <kyle at redhat.com>
-- rds-only-on-64-bit-or-x86.patch: add
-- at76-netdev_ops.patch: add
-
-* Tue Mar 31 2009 Kyle McMartin <kyle at redhat.com>
-- Linux 2.6.29-git8
-- linux-2.6-net-fix-another-gro-bug.patch: upstream.
-
-* Tue Mar 31 2009 Eric Sandeen <sandeen at redhat.com>
-- add fiemap.h to kernel-headers
-- build ext4 (and jbd2 and crc16) into the kernel
-
-* Tue Mar 31 2009 Kyle McMartin <kyle at redhat.com>
-- Linux 2.6.29-git7
-- fix-staging-at76.patch: pull patch from linux-wireless to fix...
-
-* Mon Mar 30 2009 Kyle McMartin <kyle at redhat.com> 2.6.30-0.28.rc0.git6
-- Linux 2.6.29-git6
-- Bunch of stuff disabled, most merged, some needs rebasing.
-
-* Mon Mar 30 2009 Chuck Ebbert <cebbert at redhat.com>
-- Make the .shared-srctree file a list so more than two checkouts
-  can share source files.
-
-* Mon Mar 30 2009 Chuck Ebbert <cebbert at redhat.com>
-- Separate PAT fixes that are headed for -stable from our out-of-tree ones.
-
-* Mon Mar 30 2009 Dave Jones <davej at redhat.com>
-- Make io schedulers selectable at boot time again. (#492817)
-
-* Mon Mar 30 2009 Dave Jones <davej at redhat.com>
-- Add a strict-devmem=0 boot argument (#492803)
-
-* Mon Mar 30 2009 Adam Jackson <ajax at redhat.com>
-- linux-2.6.29-pat-fixes.patch: Fix PAT/GTT interaction
-
-* Mon Mar 30 2009 Mauro Carvalho Chehab <mchehab at redhat.com>
-- some fixes of troubles caused by v4l2 subdev conversion
-
-* Mon Mar 30 2009 Mark McLoughlin <markmc at redhat.com> 2.6.29-21
-- Fix guest->remote network stall with virtio/GSO (#490266)
-
-* Mon Mar 30 2009 Ben Skeggs <bskeggs at redhat.com>
-- drm-nouveau.patch
-  - rewrite nouveau PCI(E) GART functions, should fix rh#492492
-  - kms: kernel option to allow dual-link dvi
-  - modinfo descriptions for module parameters
-
-* Sun Mar 29 2009 Mauro Carvalho Chehab <mchehab at redhat.com>
-- more v4l/dvb updates: v4l subdev conversion and some driver improvements
-
-* Sun Mar 29 2009 Chuck Ebbert <cebbert at redhat.com>
-- More fixes for ALSA hardware pointer updating.
-
-* Sat Mar 28 2009 Mauro Carvalho Chehab <mchehab at redhat.com>
-- linux-2.6-revert-dvb-net-kabi-change.patch: attempt to fix dvb net breakage
-- update v4l fixes patch to reflect what's ready for 2.6.30
-- update v4l devel patch to reflect what will be kept on linux-next for a while
-
-* Fri Mar 27 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.29-16
-- Fix 2.6.29 networking lockups.
-- Fix locking in net/xfrm/xfrm_state.c (#489764)
-
-* Fri Mar 27 2009 Ben Skeggs <bskeggs at redhat.com>
-- drm-nouveau.patch: do nothing for dac_{prepare,commit}, it's useless
-  and breaks some things in strange ways.
-
-* Fri Mar 27 2009 Ben Skeggs <bskeggs at redhat.com>
-- nv50: clear 0x1900/8 on init, possible fix for rh#492240
-- forcibly disable GEM also if KMS requested where not supported
-- inform the user if we disable KMS because of it not being supported
-
-* Thu Mar 26 2009 Matthew Garrett <mjg at redhat.com>
-- linux-2.6-relatime-by-default.patch: Backport relatime code from 2.6.30
-
-* Thu Mar 26 2009 Dave Jones <davej at redhat.com>
-- Check for modesetting enabled before forcing mode on 915. (#490336)
-
-* Thu Mar 26 2009 Dave Jones <davej at redhat.com>
-- Set kernel-PAE as default in grub. (#487578)
-
-* Thu Mar 26 2009 Dave Jones <davej at redhat.com>
-- Enable CONFIG_MOUSE_PS2_ELANTECH (#492163)
-
-* Thu Mar 26 2009 Kyle McMartin <kyle at redhat.com>
-- linux-2.6-v4l-pvrusb2-fixes.patch: fix build for uncle steve.
-
-* Thu Mar 26 2009 Mauro Carvalho Chehab <mchehab at redhat.com>
-- Move all 2.6.30 stuff into linux-2.6-v4l-dvb-fixes.patch, in
-  preparation for upstream pull;
-- Added two new drivers: gspca sq905c and DVB Intel ce6230
-- Updated to the latest v4l-dvb drivers.
-
-* Wed Mar 25 2009 Mauro Carvalho Chehab <mchehab at redhat.com>
-- remove duplicated Cinergy T2 entry at config-generic
-
-* Wed Mar 25 2009 Neil Horman <nhorman at redhat.com>
-- Add dropmonitor/dropwatch protocol from 2.6.30
-
-* Wed Mar 25 2009 Kyle McMartin <kyle at redhat.com>
-- alsa-rewrite-hw_ptr-updaters.patch: snd_pcm_update_hw_ptr() tries to
-  detect the unexpected hwptr jumps more strictly to avoid the position
-  mess-up, which often results in the bad quality I/O with pulseaudio.
-
-* Wed Mar 25 2009 Ben Skeggs <bskeggs at redhat.com>
-- drm-nouveau.patch: idle channels better before destroying them
-
-* Tue Mar 24 2009 Kyle McMartin <kyle at redhat.com>
-- Disable DMAR by default until suspend & resume is fixed.
-
-* Tue Mar 24 2009 Josef Bacik <josef at toxicpanda.com>
-- fsync replay fixes for btrfs
-
-* Mon Mar 23 2009 Dave Jones <davej at redhat.com>
-- 2.6.29
+* Fri Jul 09 2010 Chuck Ebbert <cebbert at redhat.com>  2.6.34.1-1
+- Initial commit of 2.6.34 for F-13
+- Previous history is in the branch private-f14-2_6_34
 
 ###
 # The following Emacs magic makes C-c C-e use UTC dates.

linux-2.6-acpi-video-export-edid.patch:
 drivers/acpi/video.c |  110 +++++++++++++++++++++++++++++++++++++++++++++++----
 include/acpi/video.h |   17 +++++++
 2 files changed, 118 insertions(+), 9 deletions(-)

Index: linux-2.6-acpi-video-export-edid.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/linux-2.6-acpi-video-export-edid.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- linux-2.6-acpi-video-export-edid.patch	12 Apr 2010 18:11:29 -0000	1.1
+++ linux-2.6-acpi-video-export-edid.patch	9 Jul 2010 09:09:21 -0000	1.2
@@ -1,15 +1,26 @@
-diff -up linux-2.6.33.noarch/drivers/acpi/video.c.orig linux-2.6.33.noarch/drivers/acpi/video.c
---- linux-2.6.33.noarch/drivers/acpi/video.c.orig	2010-04-12 13:42:53.637966231 -0400
-+++ linux-2.6.33.noarch/drivers/acpi/video.c	2010-04-12 13:43:07.290978352 -0400
-@@ -43,6 +43,7 @@
- #include <linux/dmi.h>
+From 023f5b2d1fdad6ffe33a204a4e76e38edba9d9e5 Mon Sep 17 00:00:00 2001
+From: Kyle McMartin <kyle at dreadnought.i.jkkm.org>
+Date: Thu, 20 May 2010 08:59:58 -0400
+Subject: linux-2.6-acpi-video-export-edid.patch
+
+---
+ drivers/acpi/video.c |  110 ++++++++++++++++++++++++++++++++++++++++++++++----
+ include/acpi/video.h |   16 +++++++
+ 2 files changed, 118 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
+index a0c93b3..4b8bda1 100644
+--- a/drivers/acpi/video.c
++++ b/drivers/acpi/video.c
+@@ -45,6 +45,7 @@
  #include <acpi/acpi_bus.h>
  #include <acpi/acpi_drivers.h>
+ #include <linux/suspend.h>
 +#include <acpi/video.h>
  
  #define PREFIX "ACPI: "
  
-@@ -63,11 +64,6 @@
+@@ -65,11 +66,6 @@
  
  #define MAX_NAME_LEN	20
  
@@ -21,7 +32,7 @@ diff -up linux-2.6.33.noarch/drivers/acp
  #define _COMPONENT		ACPI_VIDEO_COMPONENT
  ACPI_MODULE_NAME("video");
  
-@@ -1731,11 +1727,27 @@ acpi_video_get_device_attr(struct acpi_v
+@@ -1748,11 +1744,27 @@ acpi_video_get_device_attr(struct acpi_video_bus *video, unsigned long device_id
  }
  
  static int
@@ -50,7 +61,7 @@ diff -up linux-2.6.33.noarch/drivers/acp
  	struct acpi_video_device *data;
  	struct acpi_video_device_attrib* attribute;
  
-@@ -1780,8 +1792,25 @@ acpi_video_bus_get_one_device(struct acp
+@@ -1797,8 +1809,25 @@ acpi_video_bus_get_one_device(struct acpi_device *device,
  			}
  			if(attribute->bios_can_detect)
  				data->flags.bios = 1;
@@ -78,7 +89,7 @@ diff -up linux-2.6.33.noarch/drivers/acp
  
  		acpi_video_device_bind(video, data);
  		acpi_video_device_find_cap(data);
-@@ -2015,6 +2044,71 @@ out:
+@@ -2032,6 +2061,71 @@ out:
  	return result;
  }
  
@@ -150,9 +161,10 @@ diff -up linux-2.6.33.noarch/drivers/acp
  static int
  acpi_video_bus_get_devices(struct acpi_video_bus *video,
  			   struct acpi_device *device)
-diff -up linux-2.6.33.noarch/include/acpi/video.h.orig linux-2.6.33.noarch/include/acpi/video.h
---- linux-2.6.33.noarch/include/acpi/video.h.orig	2010-04-12 13:42:53.638966251 -0400
-+++ linux-2.6.33.noarch/include/acpi/video.h	2010-04-12 13:43:07.292841571 -0400
+diff --git a/include/acpi/video.h b/include/acpi/video.h
+index cf7be3d..551793c 100644
+--- a/include/acpi/video.h
++++ b/include/acpi/video.h
 @@ -1,12 +1,28 @@
  #ifndef __ACPI_VIDEO_H
  #define __ACPI_VIDEO_H
@@ -182,3 +194,6 @@ diff -up linux-2.6.33.noarch/include/acp
  #endif
  
  #endif
+-- 
+1.7.0.1
+

linux-2.6-crash-driver.patch:
 arch/ia64/include/asm/crash.h |   90 +++++++++++++++++++++++++++++
 arch/ia64/kernel/ia64_ksyms.c |    3 
 arch/x86/include/asm/crash.h  |   75 ++++++++++++++++++++++++
 arch/x86/mm/ioremap.c         |    2 
 drivers/char/Kconfig          |    2 
 drivers/char/Makefile         |    2 
 drivers/char/crash.c          |  129 +++++++++++++++++++++++++++++++++++++++++-
 7 files changed, 302 insertions(+), 1 deletion(-)

Index: linux-2.6-crash-driver.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/linux-2.6-crash-driver.patch,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -p -r1.16 -r1.17
--- linux-2.6-crash-driver.patch	28 Sep 2009 23:50:52 -0000	1.16
+++ linux-2.6-crash-driver.patch	9 Jul 2010 09:09:21 -0000	1.17
@@ -1,3 +1,21 @@
+From df42d15cd28f468ecd4c30465b98a53cce90617c Mon Sep 17 00:00:00 2001
+From: Kyle McMartin <kyle at phobos.i.jkkm.org>
+Date: Tue, 30 Mar 2010 00:16:25 -0400
+Subject: dev-crash-driver.patch
+
+---
+ arch/ia64/include/asm/crash.h |   90 +++++++++++++++++++++++++++++
+ arch/ia64/kernel/ia64_ksyms.c |    3 +
+ arch/x86/include/asm/crash.h  |   75 ++++++++++++++++++++++++
+ arch/x86/mm/ioremap.c         |    2 +
+ drivers/char/Kconfig          |    2 +
+ drivers/char/Makefile         |    2 +
+ drivers/char/crash.c          |  128 +++++++++++++++++++++++++++++++++++++++++
+ 7 files changed, 302 insertions(+), 0 deletions(-)
+ create mode 100644 arch/ia64/include/asm/crash.h
+ create mode 100644 arch/x86/include/asm/crash.h
+ create mode 100644 drivers/char/crash.c
+
 diff --git a/arch/ia64/include/asm/crash.h b/arch/ia64/include/asm/crash.h
 new file mode 100644
 index 0000000..541af84
@@ -95,7 +113,7 @@ index 0000000..541af84
 +
 +#endif /* _ASM_IA64_CRASH_H */
 diff --git a/arch/ia64/kernel/ia64_ksyms.c b/arch/ia64/kernel/ia64_ksyms.c
-index 14d39e3..cf3d040 100644
+index 7f4a0ed..552fe24 100644
 --- a/arch/ia64/kernel/ia64_ksyms.c
 +++ b/arch/ia64/kernel/ia64_ksyms.c
 @@ -84,6 +84,9 @@ EXPORT_SYMBOL(ia64_save_scratch_fpregs);
@@ -190,22 +208,23 @@ index 0000000..dfcc006
 +
 +#endif /* _ASM_I386_CRASH_H */
 diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
-index 334e63c..8e1ccbc 100644
+index 5eb1ba7..3e525d2 100644
 --- a/arch/x86/mm/ioremap.c
 +++ b/arch/x86/mm/ioremap.c
-@@ -60,6 +60,7 @@ int page_is_ram(unsigned long pagenr)
- 	}
- 	return 0;
- }
-+EXPORT_SYMBOL_GPL(page_is_ram);
+@@ -24,6 +24,8 @@
+ 
+ #include "physaddr.h"
  
++EXPORT_SYMBOL_GPL(page_is_ram);
++
  /*
   * Fix up the linear direct mapping of the kernel to avoid cache attribute
+  * conflicts.
 diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
-index 08a6f50..8bc5e9a 100644
+index 3141dd3..153658c 100644
 --- a/drivers/char/Kconfig
 +++ b/drivers/char/Kconfig
-@@ -484,6 +484,8 @@ config LEGACY_PTYS
+@@ -471,6 +471,8 @@ config LEGACY_PTYS
  	  security.  This option enables these legacy devices; on most
  	  systems, it is safe to say N.
  
@@ -215,10 +234,10 @@ index 08a6f50..8bc5e9a 100644
  config LEGACY_PTY_COUNT
  	int "Maximum number of legacy PTY in use"
 diff --git a/drivers/char/Makefile b/drivers/char/Makefile
-index 19a79dd..0bee860 100644
+index f957edf..604c418 100644
 --- a/drivers/char/Makefile
 +++ b/drivers/char/Makefile
-@@ -112,6 +112,8 @@ obj-$(CONFIG_PS3_FLASH)		+= ps3flash.o
+@@ -111,6 +111,8 @@ obj-$(CONFIG_PS3_FLASH)		+= ps3flash.o
  obj-$(CONFIG_JS_RTC)		+= js-rtc.o
  js-rtc-y = rtc.o
  
@@ -361,3 +380,6 @@ index 0000000..e5437de
 +module_exit(crash_cleanup_module);
 +
 +MODULE_LICENSE("GPL");
+-- 
+1.7.0.1
+

linux-2.6-debug-nmi-timeout.patch:
 arch/x86/kernel/apic/nmi.c |    2 +-
 lib/Kconfig.debug          |    9 ++++++++-
 2 files changed, 9 insertions(+), 2 deletions(-)

Index: linux-2.6-debug-nmi-timeout.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/linux-2.6-debug-nmi-timeout.patch,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- linux-2.6-debug-nmi-timeout.patch	11 Jan 2010 19:38:45 -0000	1.6
+++ linux-2.6-debug-nmi-timeout.patch	9 Jul 2010 09:09:21 -0000	1.7
@@ -1,7 +1,7 @@
-From c2dcc88ee3aca407471246c38c11a100cca39076 Mon Sep 17 00:00:00 2001
-From: Kyle McMartin <kyle at treachery.i.jkkm.org>
-Date: Mon, 11 Jan 2010 08:20:51 -0500
-Subject: linux-2.6-debug-nmi-timeout.patch
+From 542dee6f43067fa0101b53925aadf1d08c997cd4 Mon Sep 17 00:00:00 2001
+From: Kyle McMartin <kyle at phobos.i.jkkm.org>
+Date: Mon, 29 Mar 2010 23:40:27 -0400
+Subject: linux-2.6-debug-nmi-timeout
 
 ---
  arch/x86/kernel/apic/nmi.c |    2 +-
@@ -9,23 +9,23 @@ Subject: linux-2.6-debug-nmi-timeout.pat
  2 files changed, 9 insertions(+), 1 deletions(-)
 
 diff --git a/arch/x86/kernel/apic/nmi.c b/arch/x86/kernel/apic/nmi.c
-index 0159a69..2bbca2b 100644
+index 8aa65ad..ba7d55e 100644
 --- a/arch/x86/kernel/apic/nmi.c
 +++ b/arch/x86/kernel/apic/nmi.c
 @@ -439,7 +439,7 @@ nmi_watchdog_tick(struct pt_regs *regs, unsigned reason)
  		 * wait a few IRQs (5 seconds) before doing the oops ...
  		 */
- 		__this_cpu_inc(per_cpu_var(alert_counter));
--		if (__this_cpu_read(per_cpu_var(alert_counter)) == 5 * nmi_hz)
-+		if (__this_cpu_read(per_cpu_var(alert_counter)) == CONFIG_DEBUG_NMI_TIMEOUT * nmi_hz)
+ 		__this_cpu_inc(alert_counter);
+-		if (__this_cpu_read(alert_counter) == 5 * nmi_hz)
++		if (__this_cpu_read(alert_counter) == CONFIG_DEBUG_NMI_TIMEOUT * nmi_hz)
  			/*
  			 * die_nmi will return ONLY if NOTIFY_STOP happens..
  			 */
 diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
-index 25c3ed5..6d67975 100644
+index 1fafb4b..963e78b 100644
 --- a/lib/Kconfig.debug
 +++ b/lib/Kconfig.debug
-@@ -253,6 +253,14 @@ config SCHEDSTATS
+@@ -254,6 +254,14 @@ config SCHEDSTATS
  	  application, you can say N to avoid the very slight overhead
  	  this adds.
  
@@ -41,5 +41,5 @@ index 25c3ed5..6d67975 100644
  	bool "Collect kernel timers statistics"
  	depends on DEBUG_KERNEL && PROC_FS
 -- 
-1.6.5.2
+1.7.0.1
 

linux-2.6-defaults-pci_no_msi.patch:
 Documentation/kernel-parameters.txt |    3 +++
 drivers/pci/Kconfig                 |   12 ++++++++++++
 drivers/pci/msi.c                   |    9 +++++++++
 drivers/pci/pci.c                   |    2 ++
 drivers/pci/pci.h                   |    3 ++-
 5 files changed, 28 insertions(+), 1 deletion(-)

Index: linux-2.6-defaults-pci_no_msi.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/linux-2.6-defaults-pci_no_msi.patch,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- linux-2.6-defaults-pci_no_msi.patch	24 Jun 2009 18:37:56 -0000	1.6
+++ linux-2.6-defaults-pci_no_msi.patch	9 Jul 2010 09:09:22 -0000	1.7
@@ -1,6 +1,21 @@
---- linux-2.6.30.noarch/Documentation/kernel-parameters.txt~	2009-06-24 14:25:04.000000000 -0400
-+++ linux-2.6.30.noarch/Documentation/kernel-parameters.txt	2009-06-24 14:25:32.000000000 -0400
-@@ -1811,6 +1811,9 @@ and is between 256 and 4096 characters. 
+From 14bdd0d36f5284108468bb73afd50726b07c7a84 Mon Sep 17 00:00:00 2001
+From: Kyle McMartin <kyle at phobos.i.jkkm.org>
+Date: Mon, 29 Mar 2010 23:43:49 -0400
+Subject: linux-2.6-defaults-pci_no_msi
+
+---
+ Documentation/kernel-parameters.txt |    3 +++
+ drivers/pci/Kconfig                 |   12 ++++++++++++
+ drivers/pci/msi.c                   |    9 +++++++++
+ drivers/pci/pci.c                   |    2 ++
+ drivers/pci/pci.h                   |    2 ++
+ 5 files changed, 28 insertions(+), 0 deletions(-)
+
+diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
+index e4cbca5..8154a0f 100644
+--- a/Documentation/kernel-parameters.txt
++++ b/Documentation/kernel-parameters.txt
+@@ -1911,6 +1911,9 @@ and is between 256 and 4096 characters. It is defined in the file
  		check_enable_amd_mmconf [X86] check for and enable
  				properly configured MMIO access to PCI
  				config space on AMD family 10h CPU
@@ -11,7 +26,7 @@
  				enabled, this kernel boot option can be used to
  				disable the use of MSI interrupts system-wide.
 diff --git a/drivers/pci/Kconfig b/drivers/pci/Kconfig
-index 2a4501d..209758c 100644
+index 7858a11..b12fcad 100644
 --- a/drivers/pci/Kconfig
 +++ b/drivers/pci/Kconfig
 @@ -21,6 +21,18 @@ config PCI_MSI
@@ -30,14 +45,14 @@ index 2a4501d..209758c 100644
 +
 +	  If you don't know what to do here, say N.
 +
- config PCI_LEGACY
- 	bool "Enable deprecated pci_find_* API"
- 	depends on PCI
+ config PCI_DEBUG
+ 	bool "PCI Debugging"
+ 	depends on PCI && DEBUG_KERNEL
 diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
-index 896a15d..53df583 100644
+index f9cf317..6b0539a 100644
 --- a/drivers/pci/msi.c
 +++ b/drivers/pci/msi.c
-@@ -23,7 +23,11 @@
+@@ -22,7 +22,11 @@
  #include "pci.h"
  #include "msi.h"
  
@@ -49,7 +64,7 @@ index 896a15d..53df583 100644
  
  /* Arch hooks */
  
-@@ -786,6 +790,11 @@ int pci_msi_enabled(void)
+@@ -836,6 +840,11 @@ int pci_msi_enabled(void)
  }
  EXPORT_SYMBOL(pci_msi_enabled);
  
@@ -62,10 +77,10 @@ index 896a15d..53df583 100644
  {
  	INIT_LIST_HEAD(&dev->msi_list);
 diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
-index 17bd932..e9bc9fe 100644
+index 1531f3a..3cb332b 100644
 --- a/drivers/pci/pci.c
 +++ b/drivers/pci/pci.c
-@@ -2393,6 +2393,8 @@ static int __init pci_setup(char *str)
+@@ -2983,6 +2983,8 @@ static int __init pci_setup(char *str)
  		if (*str && (str = pcibios_setup(str)) && *str) {
  			if (!strcmp(str, "nomsi")) {
  				pci_no_msi();
@@ -75,10 +90,10 @@ index 17bd932..e9bc9fe 100644
  				pci_no_aer();
  			} else if (!strcmp(str, "nodomains")) {
 diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
-index 26ddf78..85efe81 100644
+index 4eb10f4..caa051e 100644
 --- a/drivers/pci/pci.h
 +++ b/drivers/pci/pci.h
-@@ -111,9 +111,11 @@ extern unsigned int pci_pm_d3_delay;
+@@ -122,9 +122,11 @@ extern unsigned int pci_pm_d3_delay;
  
  #ifdef CONFIG_PCI_MSI
  void pci_no_msi(void);
@@ -90,3 +105,6 @@ index 26ddf78..85efe81 100644
  static inline void pci_msi_init_pci_dev(struct pci_dev *dev) { }
  #endif
  
+-- 
+1.7.0.1
+

linux-2.6-execshield.patch:
 arch/x86/include/asm/desc.h           |   25 ++++++
 arch/x86/include/asm/mmu.h            |    7 +
 arch/x86/include/asm/paravirt.h       |    6 +
 arch/x86/include/asm/paravirt_types.h |    3 
 arch/x86/include/asm/processor.h      |    3 
 arch/x86/kernel/cpu/common.c          |   14 +++
 arch/x86/kernel/paravirt.c            |    3 
 arch/x86/kernel/process_32.c          |   48 ++++++++++++
 arch/x86/kernel/traps.c               |  129 +++++++++++++++++++++++++++++++--
 arch/x86/mm/mmap.c                    |    5 +
 arch/x86/mm/setup_nx.c                |    6 +
 arch/x86/mm/tlb.c                     |    7 +
 arch/x86/vdso/vdso32-setup.c          |    2 
 arch/x86/xen/enlighten.c              |   21 +++++
 fs/binfmt_elf.c                       |   21 ++++-
 include/linux/mm.h                    |    8 +-
 include/linux/mm_types.h              |    3 
 include/linux/resource.h              |    5 +
 include/linux/sched.h                 |    7 +
 kernel/sysctl.c                       |   28 +++++++
 mm/mmap.c                             |  130 +++++++++++++++++++++++++++++++---
 mm/mprotect.c                         |   10 ++
 mm/mremap.c                           |    5 -
 23 files changed, 468 insertions(+), 28 deletions(-)

Index: linux-2.6-execshield.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/linux-2.6-execshield.patch,v
retrieving revision 1.117
retrieving revision 1.118
diff -u -p -r1.117 -r1.118
--- linux-2.6-execshield.patch	18 Jun 2010 10:01:51 -0000	1.117
+++ linux-2.6-execshield.patch	9 Jul 2010 09:09:22 -0000	1.118
@@ -1,3 +1,12 @@
+From 5006dd0fae6126c149868102c100cd90a20ef2e3 Mon Sep 17 00:00:00 2001
+From: Kyle McMartin <kyle at phobos.i.jkkm.org>
+Date: Mon, 29 Mar 2010 23:20:18 -0400
+Subject: execshield
+
+cebbert at redhat.com: added fix for bz#220892
+
+diff --git a/arch/x86/include/asm/desc.h b/arch/x86/include/asm/desc.h
+index 617bd56..526248d 100644
 --- a/arch/x86/include/asm/desc.h
 +++ b/arch/x86/include/asm/desc.h
 @@ -5,6 +5,7 @@
@@ -44,6 +53,8 @@
 +#endif /* CONFIG_X86_32 */
 +
  #endif /* _ASM_X86_DESC_H */
+diff --git a/arch/x86/include/asm/mmu.h b/arch/x86/include/asm/mmu.h
+index 80a1dee..8314c66 100644
 --- a/arch/x86/include/asm/mmu.h
 +++ b/arch/x86/include/asm/mmu.h
 @@ -7,12 +7,19 @@
@@ -66,6 +77,8 @@
  } mm_context_t;
  
  #ifdef CONFIG_SMP
+diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
+index 5653f43..55dadb2 100644
 --- a/arch/x86/include/asm/paravirt.h
 +++ b/arch/x86/include/asm/paravirt.h
 @@ -289,6 +289,12 @@ static inline void set_ldt(const void *addr, unsigned entries)
@@ -81,6 +94,8 @@
  static inline void store_gdt(struct desc_ptr *dtr)
  {
  	PVOP_VCALL1(pv_cpu_ops.store_gdt, dtr);
+diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h
+index db9ef55..19c2793 100644
 --- a/arch/x86/include/asm/paravirt_types.h
 +++ b/arch/x86/include/asm/paravirt_types.h
 @@ -118,6 +118,9 @@ struct pv_cpu_ops {
@@ -93,6 +108,8 @@
  	unsigned long (*store_tr)(void);
  	void (*load_tls)(struct thread_struct *t, unsigned int cpu);
  #ifdef CONFIG_X86_64
+diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
+index b753ea5..4893156 100644
 --- a/arch/x86/include/asm/processor.h
 +++ b/arch/x86/include/asm/processor.h
 @@ -162,6 +162,9 @@ static inline int hlt_works(int cpu)
@@ -105,6 +122,8 @@
  extern void cpu_detect(struct cpuinfo_x86 *c);
  
  extern struct pt_regs *idle_regs(struct pt_regs *);
+diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
+index 4868e4a..6c8d2ca 100644
 --- a/arch/x86/kernel/cpu/common.c
 +++ b/arch/x86/kernel/cpu/common.c
 @@ -802,6 +802,20 @@ static void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
@@ -128,6 +147,8 @@
  	/* If the model name is still unset, do table lookup. */
  	if (!c->x86_model_id[0]) {
  		const char *p;
+diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
+index 1db183e..238b97d 100644
 --- a/arch/x86/kernel/paravirt.c
 +++ b/arch/x86/kernel/paravirt.c
 @@ -345,6 +345,9 @@ struct pv_cpu_ops pv_cpu_ops = {
@@ -140,9 +161,11 @@
  	.load_gdt = native_load_gdt,
  	.load_idt = native_load_idt,
  	.store_gdt = native_store_gdt,
+diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
+index f6c6266..8ac2589 100644
 --- a/arch/x86/kernel/process_32.c
 +++ b/arch/x86/kernel/process_32.c
-@@ -257,7 +257,10 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
+@@ -251,7 +251,10 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
  void
  start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
  {
@@ -153,7 +176,7 @@
  	regs->fs		= 0;
  	set_fs(USER_DS);
  	regs->ds		= __USER_DS;
-@@ -266,6 +269,11 @@ start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
+@@ -260,6 +263,11 @@ start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
  	regs->cs		= __USER_CS;
  	regs->ip		= new_ip;
  	regs->sp		= new_sp;
@@ -165,7 +188,7 @@
  	/*
  	 * Free the old FP and other extended state
  	 */
-@@ -325,6 +333,9 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+@@ -319,6 +327,9 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
  	if (preload_fpu)
  		prefetch(next->xstate);
  
@@ -175,7 +198,7 @@
  	/*
  	 * Reload esp0.
  	 */
-@@ -418,3 +429,40 @@ unsigned long get_wchan(struct task_struct *p)
+@@ -412,3 +423,40 @@ unsigned long get_wchan(struct task_struct *p)
  	return 0;
  }
  
@@ -216,6 +239,8 @@
 +	mm->context.exec_limit = 0;
 +	set_user_cs(&mm->context.user_cs, 0);
 +}
+diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
+index 1168e44..c452918 100644
 --- a/arch/x86/kernel/traps.c
 +++ b/arch/x86/kernel/traps.c
 @@ -115,6 +115,76 @@ die_if_kernel(const char *str, struct pt_regs *regs, long err)
@@ -325,7 +350,7 @@
  	tsk->thread.error_code = error_code;
  	tsk->thread.trap_no = 13;
  
-@@ -860,19 +953,37 @@ do_device_not_available(struct pt_regs *regs, long error_code)
+@@ -863,19 +956,37 @@ do_device_not_available(struct pt_regs *regs, long error_code)
  }
  
  #ifdef CONFIG_X86_32
@@ -372,6 +397,8 @@
  }
  #endif
  
+diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.c
+index 1dab519..360f39d 100644
 --- a/arch/x86/mm/mmap.c
 +++ b/arch/x86/mm/mmap.c
 @@ -124,13 +124,16 @@ static unsigned long mmap_legacy_base(void)
@@ -392,6 +419,8 @@
  		mm->unmap_area = arch_unmap_area_topdown;
  	}
  }
+diff --git a/arch/x86/mm/setup_nx.c b/arch/x86/mm/setup_nx.c
+index a3250aa..e0d9cce 100644
 --- a/arch/x86/mm/setup_nx.c
 +++ b/arch/x86/mm/setup_nx.c
 @@ -1,3 +1,4 @@
@@ -418,6 +447,8 @@
  		printk(KERN_NOTICE "Notice: NX (Execute Disable) protection "
  		       "missing in CPU or disabled in BIOS!\n");
  	} else {
+diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
+index 426f3a1..e0286b1 100644
 --- a/arch/x86/mm/tlb.c
 +++ b/arch/x86/mm/tlb.c
 @@ -6,6 +6,7 @@
@@ -441,6 +472,8 @@
  	/*
  	 * orig_rax contains the negated interrupt vector.
  	 * Use that to determine where the sender put the data.
+diff --git a/arch/x86/vdso/vdso32-setup.c b/arch/x86/vdso/vdso32-setup.c
+index 02b442e..957bb67 100644
 --- a/arch/x86/vdso/vdso32-setup.c
 +++ b/arch/x86/vdso/vdso32-setup.c
 @@ -331,7 +331,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
@@ -452,9 +485,11 @@
  		if (IS_ERR_VALUE(addr)) {
  			ret = addr;
  			goto up_fail;
+diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
+index b607239..e426a3f 100644
 --- a/arch/x86/xen/enlighten.c
 +++ b/arch/x86/xen/enlighten.c
-@@ -333,6 +333,24 @@ static void xen_set_ldt(const void *addr, unsigned entries)
+@@ -334,6 +334,24 @@ static void xen_set_ldt(const void *addr, unsigned entries)
  	xen_mc_issue(PARAVIRT_LAZY_CPU);
  }
  
@@ -479,7 +514,7 @@
  static void xen_load_gdt(const struct desc_ptr *dtr)
  {
  	unsigned long va = dtr->address;
-@@ -959,6 +977,9 @@ static const struct pv_cpu_ops xen_cpu_ops __initdata = {
+@@ -960,6 +978,9 @@ static const struct pv_cpu_ops xen_cpu_ops __initdata = {
  
  	.load_tr_desc = paravirt_nop,
  	.set_ldt = xen_set_ldt,
@@ -489,9 +524,11 @@
  	.load_gdt = xen_load_gdt,
  	.load_idt = xen_load_idt,
  	.load_tls = xen_load_tls,
+diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
+index 535e763..d114af6 100644
 --- a/fs/binfmt_elf.c
 +++ b/fs/binfmt_elf.c
-@@ -73,7 +73,7 @@ static struct linux_binfmt elf_format = {
+@@ -74,7 +74,7 @@ static struct linux_binfmt elf_format = {
  		.hasvdso	= 1
  };
  
@@ -500,7 +537,7 @@
  
  static int set_brk(unsigned long start, unsigned long end)
  {
-@@ -721,6 +721,11 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
+@@ -701,6 +701,11 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
  			break;
  		}
  
@@ -512,7 +549,7 @@
  	/* Some simple consistency checks for the interpreter */
  	if (elf_interpreter) {
  		retval = -ELIBBAD;
-@@ -740,6 +745,15 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
+@@ -717,6 +722,15 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
  	if (retval)
  		goto out_free_dentry;
  
@@ -528,7 +565,7 @@
  	/* OK, This is the point of no return */
  	current->flags &= ~PF_FORKNOEXEC;
  	current->mm->def_flags = def_flags;
-@@ -747,7 +761,8 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
+@@ -724,7 +738,8 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
  	/* Do this immediately, since STACK_TOP as used in setup_arg_pages
  	   may depend on the personality.  */
  	SET_PERSONALITY(loc->elf_ex);
@@ -538,7 +575,7 @@
  		current->personality |= READ_IMPLIES_EXEC;
  
  	if (!(current->personality & ADDR_NO_RANDOMIZE) && randomize_va_space)
-@@ -912,7 +927,7 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
+@@ -890,7 +905,7 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
  					    interpreter,
  					    &interp_map_addr,
  					    load_bias);
@@ -547,9 +584,11 @@
  			/*
  			 * load_elf_interp() returns relocation
  			 * adjustment
+diff --git a/include/linux/mm.h b/include/linux/mm.h
+index e70f21b..44e6d63 100644
 --- a/include/linux/mm.h
 +++ b/include/linux/mm.h
-@@ -1148,7 +1148,13 @@ extern int install_special_mapping(struct mm_struct *mm,
+@@ -1259,7 +1259,13 @@ extern int install_special_mapping(struct mm_struct *mm,
  				   unsigned long addr, unsigned long len,
  				   unsigned long flags, struct page **pages);
  
@@ -564,9 +603,11 @@
  
  extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
  	unsigned long len, unsigned long prot,
+diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
+index b8bb9a6..f478e39 100644
 --- a/include/linux/mm_types.h
 +++ b/include/linux/mm_types.h
-@@ -209,6 +209,9 @@ struct mm_struct {
+@@ -227,6 +227,9 @@ struct mm_struct {
  	unsigned long (*get_unmapped_area) (struct file *filp,
  				unsigned long addr, unsigned long len,
  				unsigned long pgoff, unsigned long flags);
@@ -576,6 +617,8 @@
  	void (*unmap_area) (struct mm_struct *mm, unsigned long addr);
  #endif
  	unsigned long mmap_base;		/* base of mmap area */
+diff --git a/include/linux/resource.h b/include/linux/resource.h
+index f1e914e..d2aef9a 100644
 --- a/include/linux/resource.h
 +++ b/include/linux/resource.h
 @@ -53,8 +53,11 @@ struct rlimit {
@@ -591,6 +634,8 @@
  
  /*
   * GPG2 wants 64kB of mlocked memory, to make sure pass phrases
+diff --git a/include/linux/sched.h b/include/linux/sched.h
+index dad7f66..c5a3948 100644
 --- a/include/linux/sched.h
 +++ b/include/linux/sched.h
 @@ -102,6 +102,9 @@ struct fs_struct;
@@ -603,7 +648,7 @@
  /*
   * List of flags we want to share for kernel threads,
   * if only because they are not used by them anyway.
-@@ -382,6 +385,10 @@ extern void arch_pick_mmap_layout(struct mm_struct *mm);
+@@ -390,6 +393,10 @@ extern void arch_pick_mmap_layout(struct mm_struct *mm);
  extern unsigned long
  arch_get_unmapped_area(struct file *, unsigned long, unsigned long,
  		       unsigned long, unsigned long);
@@ -614,9 +659,11 @@
  extern unsigned long
  arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr,
  			  unsigned long len, unsigned long pgoff,
+diff --git a/kernel/sysctl.c b/kernel/sysctl.c
+index 8686b0f..a4fad81 100644
 --- a/kernel/sysctl.c
 +++ b/kernel/sysctl.c
-@@ -87,6 +87,26 @@ extern int sysctl_nr_open_min, sysctl_nr_open_max;
+@@ -99,6 +99,26 @@ extern int sysctl_nr_open_min, sysctl_nr_open_max;
  #ifndef CONFIG_MMU
  extern int sysctl_nr_trim_pages;
  #endif
@@ -640,10 +687,10 @@
 +}
 +__setup("exec-shield=", setup_exec_shield);
 +
- #ifdef CONFIG_RCU_TORTURE_TEST
- extern int rcutorture_runnable;
- #endif /* #ifdef CONFIG_RCU_TORTURE_TEST */
-@@ -410,6 +430,14 @@ static struct ctl_table kern_table[] = {
+ #ifdef CONFIG_BLOCK
+ extern int blk_iopoll_enabled;
+ #endif
+@@ -400,6 +420,14 @@ static struct ctl_table kern_table[] = {
  		.mode		= 0644,
  		.proc_handler	= proc_dointvec,
  	},
@@ -658,8 +705,10 @@
  #ifdef CONFIG_PROC_SYSCTL
  	{
  		.procname	= "tainted",
---- b/mm/mmap.c
-+++ linux-2.6.33.noarch/mm/mmap.c
+diff --git a/mm/mmap.c b/mm/mmap.c
+index 75557c6..8173284 100644
+--- a/mm/mmap.c
++++ b/mm/mmap.c
 @@ -28,6 +28,7 @@
  #include <linux/rmap.h>
  #include <linux/mmu_notifier.h>
@@ -687,7 +736,7 @@
  static void unmap_region(struct mm_struct *mm,
  		struct vm_area_struct *vma, struct vm_area_struct *prev,
  		unsigned long start, unsigned long end);
-@@ -388,6 +401,8 @@
+@@ -388,6 +401,8 @@ static inline void
  __vma_link_list(struct mm_struct *mm, struct vm_area_struct *vma,
  		struct vm_area_struct *prev, struct rb_node *rb_parent)
  {
@@ -696,7 +745,7 @@
  	if (prev) {
  		vma->vm_next = prev->vm_next;
  		prev->vm_next = vma;
-@@ -490,6 +505,8 @@
+@@ -489,6 +504,8 @@ __vma_unlink(struct mm_struct *mm, struct vm_area_struct *vma,
  	rb_erase(&vma->vm_rb, &mm->mm_rb);
  	if (mm->mmap_cache == vma)
  		mm->mmap_cache = prev;
@@ -705,16 +754,16 @@
  }
  
  /*
-@@ -797,6 +814,8 @@
+@@ -798,6 +815,8 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
  		} else					/* cases 2, 5, 7 */
- 			vma_adjust(prev, prev->vm_start,
+ 			err = vma_adjust(prev, prev->vm_start,
  				end, prev->vm_pgoff, NULL);
 +		if (prev->vm_flags & VM_EXEC)
 +			arch_add_exec_range(mm, prev->vm_end);
+ 		if (err)
+ 			return NULL;
  		return prev;
- 	}
- 
-@@ -947,7 +966,8 @@
+@@ -952,7 +971,8 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
  	/* Obtain the address to map to. we verify (or select) it and ensure
  	 * that it represents a valid section of the address space.
  	 */
@@ -724,7 +773,7 @@
  	if (addr & ~PAGE_MASK)
  		return addr;
  
-@@ -1479,8 +1499,8 @@
+@@ -1504,8 +1524,8 @@ void arch_unmap_area_topdown(struct mm_struct *mm, unsigned long addr)
  }
  
  unsigned long
@@ -735,7 +784,7 @@
  {
  	unsigned long (*get_area)(struct file *, unsigned long,
  				  unsigned long, unsigned long, unsigned long);
-@@ -1493,7 +1513,11 @@
+@@ -1518,7 +1538,11 @@ get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,
  	if (len > TASK_SIZE)
  		return -ENOMEM;
  
@@ -748,7 +797,7 @@
  	if (file && file->f_op && file->f_op->get_unmapped_area)
  		get_area = file->f_op->get_unmapped_area;
  	addr = get_area(file, addr, len, pgoff, flags);
-@@ -1507,8 +1531,83 @@
+@@ -1532,8 +1556,83 @@ get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,
  
  	return arch_rebalance_pgtables(addr, len);
  }
@@ -833,31 +882,33 @@
  
  /* Look up the first VMA which satisfies  addr < vm_end,  NULL if none. */
  struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr)
-@@ -1583,6 +1682,14 @@
+@@ -1608,6 +1707,16 @@ out:
  	return prev ? prev->vm_next : vma;
  }
  
 +static int over_stack_limit(unsigned long sz)
 +{
++	struct rlimit *rlim = current->signal->rlim;
++
 +	if (sz < EXEC_STACK_BIAS)
 +		return 0;
 +	return (sz - EXEC_STACK_BIAS) >
-+			current->signal->rlim[RLIMIT_STACK].rlim_cur;
++			ACCESS_ONCE(rlim[RLIMIT_STACK].rlim_cur);
 +}
 +
  /*
   * Verify that the stack growth is acceptable and
   * update accounting. This is shared with both the
-@@ -1599,7 +1706,7 @@
+@@ -1624,7 +1733,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
  		return -ENOMEM;
  
  	/* Stack limit test */
--	if (size > rlim[RLIMIT_STACK].rlim_cur)
+-	if (size > ACCESS_ONCE(rlim[RLIMIT_STACK].rlim_cur))
 +	if (over_stack_limit(size))
  		return -ENOMEM;
  
  	/* mlock limit tests */
-@@ -1906,10 +2013,14 @@
+@@ -1936,10 +2045,14 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
  	if (new->vm_ops && new->vm_ops->open)
  		new->vm_ops->open(new);
  
@@ -865,16 +916,16 @@
 +	if (new_below) {
 +		unsigned long old_end = vma->vm_end;
 +
- 		vma_adjust(vma, addr, vma->vm_end, vma->vm_pgoff +
+ 		err = vma_adjust(vma, addr, vma->vm_end, vma->vm_pgoff +
  			((addr - new->vm_start) >> PAGE_SHIFT), new);
 -	else
 +		if (vma->vm_flags & VM_EXEC)
 +			arch_remove_exec_range(mm, old_end);
 +	} else
- 		vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new);
+ 		err = vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new);
  
- 	return 0;
-@@ -2176,6 +2287,7 @@
+ 	/* Success. */
+@@ -2223,6 +2336,7 @@ void exit_mmap(struct mm_struct *mm)
  
  	free_pgtables(tlb, vma, FIRST_USER_ADDRESS, 0);
  	tlb_finish_mmu(tlb, 0, end);
@@ -882,6 +933,8 @@
  
  	/*
  	 * Walk the list again, actually closing and freeing it,
+diff --git a/mm/mprotect.c b/mm/mprotect.c
+index 8bc969d..3c9b4fc 100644
 --- a/mm/mprotect.c
 +++ b/mm/mprotect.c
 @@ -26,9 +26,14 @@
@@ -918,9 +971,11 @@
  	mmu_notifier_invalidate_range_start(mm, start, end);
  	if (is_vm_hugetlb_page(vma))
  		hugetlb_change_protection(vma, start, end, vma->vm_page_prot);
+diff --git a/mm/mremap.c b/mm/mremap.c
+index e9c75ef..0a5379f 100644
 --- a/mm/mremap.c
 +++ b/mm/mremap.c
-@@ -485,10 +485,10 @@ unsigned long do_mremap(unsigned long addr,
+@@ -488,10 +488,10 @@ unsigned long do_mremap(unsigned long addr,
  		if (vma->vm_flags & VM_MAYSHARE)
  			map_flags |= MAP_SHARED;
  
@@ -933,3 +988,6 @@
  		if (new_addr & ~PAGE_MASK) {
  			ret = new_addr;
  			goto out;
+-- 
+1.7.0.1
+

linux-2.6-hotfixes.patch:
 qcserial.c |    1 +
 1 file changed, 1 insertion(+)

Index: linux-2.6-hotfixes.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/linux-2.6-hotfixes.patch,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- linux-2.6-hotfixes.patch	3 Mar 2009 02:01:55 -0000	1.5
+++ linux-2.6-hotfixes.patch	9 Jul 2010 09:09:22 -0000	1.6
@@ -0,0 +1,13 @@
+fixes:
+implicit declaration of function kzalloc
+
+--- linux-2.6.34.noarch/drivers/usb/serial/qcserial.c~	2010-06-08 15:19:41.000000000 -0400
++++ linux-2.6.34.noarch/drivers/usb/serial/qcserial.c	2010-06-08 15:19:47.000000000 -0400
+@@ -11,6 +11,7 @@
+  *
+  */
+ 
++#include <linux/slab.h>
+ #include <linux/tty.h>
+ #include <linux/tty_flip.h>
+ #include <linux/usb.h>

linux-2.6-input-kill-stupid-messages.patch:
 atkbd.c |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Index: linux-2.6-input-kill-stupid-messages.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/linux-2.6-input-kill-stupid-messages.patch,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- linux-2.6-input-kill-stupid-messages.patch	12 Feb 2008 06:18:04 -0000	1.5
+++ linux-2.6-input-kill-stupid-messages.patch	9 Jul 2010 09:09:22 -0000	1.6
@@ -1,17 +1,32 @@
---- linux-2.6.21.noarch/drivers/input/keyboard/atkbd.c~	2007-07-06 10:51:04.000000000 -0400
-+++ linux-2.6.21.noarch/drivers/input/keyboard/atkbd.c	2007-07-06 10:51:33.000000000 -0400
-@@ -409,10 +409,14 @@ static irqreturn_t atkbd_interrupt(struc
- 			goto out;
- 		case ATKBD_RET_ACK:
- 		case ATKBD_RET_NAK:
+From b2c6d55b2351152696aafb8c9bf3ec8968acf77c Mon Sep 17 00:00:00 2001
+From: Kyle McMartin <kyle at phobos.i.jkkm.org>
+Date: Mon, 29 Mar 2010 23:59:58 -0400
+Subject: linux-2.6-input-kill-stupid-messages
+
+---
+ drivers/input/keyboard/atkbd.c |    5 +++++
+ 1 files changed, 5 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
+index d358ef8..38db098 100644
+--- a/drivers/input/keyboard/atkbd.c
++++ b/drivers/input/keyboard/atkbd.c
+@@ -425,11 +426,15 @@ static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
+ 		goto out;
+ 	case ATKBD_RET_ACK:
+ 	case ATKBD_RET_NAK:
 +#if 0
-+			/* Quite a few key switchers and other tools trigger this and it confuses
-+			   people who can do nothing about it */
- 			if (printk_ratelimit())
- 				printk(KERN_WARNING "atkbd.c: Spurious %s on %s. "
- 				       "Some program might be trying access hardware directly.\n",
- 				       data == ATKBD_RET_ACK ? "ACK" : "NAK", serio->phys);
++		/* Quite a few key switchers and other tools trigger this
++		 * and it confuses people who can do nothing about it */
+ 		if (printk_ratelimit())
+ 			dev_warn(&serio->dev,
+ 				 "Spurious %s on %s. "
+ 				 "Some program might be trying access hardware directly.\n",
+ 				 data == ATKBD_RET_ACK ? "ACK" : "NAK", serio->phys);
 +#endif
- 			goto out;
- 		case ATKBD_RET_ERR:
- 			atkbd->err_count++;
+ 		goto out;
+ 	case ATKBD_RET_ERR:
+ 		atkbd->err_count++;
+-- 
+1.7.0.1
+

linux-2.6-intel-iommu-igfx.patch:
 Documentation/kernel-parameters.txt |   11 +++++------
 drivers/pci/intel-iommu.c           |   10 +++++-----
 2 files changed, 10 insertions(+), 11 deletions(-)

Index: linux-2.6-intel-iommu-igfx.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/linux-2.6-intel-iommu-igfx.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- linux-2.6-intel-iommu-igfx.patch	26 May 2010 16:03:54 -0000	1.2
+++ linux-2.6-intel-iommu-igfx.patch	9 Jul 2010 09:09:22 -0000	1.3
@@ -49,7 +49,7 @@ index 4173125..8f36786 100644
  int dmar_disabled = 1;
  #endif /*CONFIG_DMAR_DEFAULT_ON*/
 
--static int __initdata dmar_map_gfx = 1;
+-static int dmar_map_gfx = 1;
 +/* disabled by default; causes way too many issues */
 +static int dmar_map_gfx = 0;
  static int dmar_forcedac;

linux-2.6-selinux-mprotect-checks.patch:
 hooks.c |   15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

Index: linux-2.6-selinux-mprotect-checks.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/linux-2.6-selinux-mprotect-checks.patch,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -p -r1.8 -r1.9
--- linux-2.6-selinux-mprotect-checks.patch	29 Dec 2008 02:48:00 -0000	1.8
+++ linux-2.6-selinux-mprotect-checks.patch	9 Jul 2010 09:09:22 -0000	1.9
@@ -5,17 +5,83 @@ ie, Fedora has a new enough toolchain, a
 the ifdefs.  Other distros don't/haven't, and this patch would break them
 if pushed upstream.
 
---- linux-2.6.26.noarch/security/selinux/hooks.c~	2008-09-25 14:11:17.000000000 -0400
-+++ linux-2.6.26.noarch/security/selinux/hooks.c	2008-09-25 14:12:17.000000000 -0400
-@@ -3018,7 +3018,6 @@ static int file_map_prot_check(struct fi
+
+Subject: [Fwd: Re: [PATCH] Disable execmem for sparc]
+From: Stephen Smalley <sds at tycho.nsa.gov>
+To: Dave Jones <davej at redhat.com>
+Date: Wed, 28 Apr 2010 16:04:56 -0400
+Message-Id: <1272485096.6013.326.camel at moss-pluto.epoch.ncsc.mil>
+
+-------- Forwarded Message --------
+From: Stephen Smalley <sds at tycho.nsa.gov>
+To: David Miller <davem at davemloft.net>
+Cc: tcallawa at redhat.com, dennis at ausil.us, sparclinux at vger.kernel.org, dgilmore at redhat.com, jmorris at namei.org, eparis at parisplace.org
+Subject: Re: [PATCH] Disable execmem for sparc
+Date: Wed, 28 Apr 2010 15:57:57 -0400
+
+On Tue, 2010-04-27 at 11:47 -0700, David Miller wrote:
+> From: "Tom \"spot\" Callaway" <tcallawa at redhat.com>
+> Date: Tue, 27 Apr 2010 14:20:21 -0400
+> 
+> > [root at apollo ~]$ cat /proc/2174/maps
+> > 00010000-00014000 r-xp 00000000 fd:00 15466577
+> >  /sbin/mingetty
+> > 00022000-00024000 rwxp 00002000 fd:00 15466577
+> >  /sbin/mingetty
+> > 00024000-00046000 rwxp 00000000 00:00 0
+> >  [heap]
+> 
+> SELINUX probably barfs on the executable heap, the PLT is in the HEAP
+> just like powerpc32 and that's why VM_DATA_DEFAULT_FLAGS has to set
+> both executable and writable.
+> 
+> You also can't remove the CONFIG_PPC32 ifdefs in selinux, since
+> because of the VM_DATA_DEFAULT_FLAGS setting used still in that arch,
+> the heap will always have executable permission, just like sparc does.
+> You have to support those binaries forever, whether you like it or not.
+> 
+> Let's just replace the CONFIG_PPC32 ifdef in SELINUX with CONFIG_PPC32
+> || CONFIG_SPARC as in Tom's original patch and let's be done with
+> this.
+> 
+> In fact I would go through all the arch/ header files and check the
+> VM_DATA_DEFAULT_FLAGS settings and add the necessary new ifdefs to the
+> SELINUX code so that other platforms don't have the pain of having to
+> go through this process too.
+
+To avoid maintaining per-arch ifdefs, it seems that we could just
+directly use (VM_DATA_DEFAULT_FLAGS & VM_EXEC) as the basis for deciding
+whether to enable or disable these checks.   VM_DATA_DEFAULT_FLAGS isn't
+constant on some architectures but instead depends on
+current->personality, but we want this applied uniformly.  So we'll just
+use the initial task state to determine whether or not to enable these
+checks.
+
+Signed-off-by:  Stephen Smalley <sds at tycho.nsa.gov>
+
+diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
+index ebee467..a03fd74 100644
+--- a/security/selinux/hooks.c
++++ b/security/selinux/hooks.c
+@@ -2999,13 +2999,15 @@ static int selinux_file_ioctl(struct file *file, unsigned int cmd,
+ 	return file_has_perm(cred, file, av);
+ }
+ 
++static int default_noexec;
++
+ static int file_map_prot_check(struct file *file, unsigned long prot, int shared)
+ {
  	const struct cred *cred = current_cred();
  	int rc = 0;
  
 -#ifndef CONFIG_PPC32
- 	if ((prot & PROT_EXEC) && (!file || (!shared && (prot & PROT_WRITE)))) {
+-	if ((prot & PROT_EXEC) && (!file || (!shared && (prot & PROT_WRITE)))) {
++	if (default_noexec &&
++	    (prot & PROT_EXEC) && (!file || (!shared && (prot & PROT_WRITE)))) {
  		/*
  		 * We are making executable an anonymous mapping or a
-@@ -3029,7 +3028,6 @@ static int file_map_prot_check(struct fi
+ 		 * private file mapping that will also be writable.
+@@ -3015,7 +3017,6 @@ static int file_map_prot_check(struct file *file, unsigned long prot, int shared
  		if (rc)
  			goto error;
  	}
@@ -23,15 +89,18 @@ if pushed upstream.
  
  	if (file) {
  		/* read access is always possible with a mapping */
-@@ -3024,7 +3022,6 @@ static int selinux_file_mprotect(struct 
+@@ -3076,8 +3077,8 @@ static int selinux_file_mprotect(struct vm_area_struct *vma,
  	if (selinux_checkreqprot)
  		prot = reqprot;
  
 -#ifndef CONFIG_PPC32
- 	if ((prot & PROT_EXEC) && !(vma->vm_flags & VM_EXEC)) {
- 		rc = 0;
+-	if ((prot & PROT_EXEC) && !(vma->vm_flags & VM_EXEC)) {
++	if (default_noexec &&
++	    (prot & PROT_EXEC) && !(vma->vm_flags & VM_EXEC)) {
+ 		int rc = 0;
  		if (vma->vm_start >= vma->vm_mm->start_brk &&
-@@ -3049,7 +3046,6 @@ static int selinux_file_mprotect(struct 
+ 		    vma->vm_end <= vma->vm_mm->brk) {
+@@ -3099,7 +3100,6 @@ static int selinux_file_mprotect(struct vm_area_struct *vma,
  		if (rc)
  			return rc;
  	}
@@ -39,3 +108,17 @@ if pushed upstream.
  
  	return file_map_prot_check(vma->vm_file, prot, vma->vm_flags&VM_SHARED);
  }
+@@ -5662,6 +5662,8 @@ static __init int selinux_init(void)
+ 	/* Set the security state for the initial task. */
+ 	cred_init_security();
+ 
++	default_noexec = !(VM_DATA_DEFAULT_FLAGS & VM_EXEC);
++
+ 	sel_inode_cache = kmem_cache_create("selinux_inode_security",
+ 					    sizeof(struct inode_security_struct),
+ 					    0, SLAB_PANIC, NULL);
+
+-- 
+Stephen Smalley
+National Security Agency
+

linux-2.6-tracehook.patch:
 include/linux/ptrace.h    |    1 +
 include/linux/sched.h     |    1 +
 include/linux/tracehook.h |   10 +++++-----
 kernel/ptrace.c           |    2 +-
 kernel/signal.c           |    4 ++--
 5 files changed, 10 insertions(+), 8 deletions(-)

Index: linux-2.6-tracehook.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/linux-2.6-tracehook.patch,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -p -r1.13 -r1.14
--- linux-2.6-tracehook.patch	21 May 2010 22:41:00 -0000	1.13
+++ linux-2.6-tracehook.patch	9 Jul 2010 09:09:22 -0000	1.14
@@ -20,10 +20,10 @@ Signed-off-by: Roland McGrath <roland at re
  5 files changed, 10 insertions(+), 8 deletions(-)
 
 diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h
-index 56f2d63..4802e2a 100644  
+index e1fb607..0d84f1e 100644  
 --- a/include/linux/ptrace.h
 +++ b/include/linux/ptrace.h
-@@ -85,6 +85,7 @@ extern int ptrace_traceme(void);
+@@ -105,6 +105,7 @@ extern int ptrace_traceme(void);
  extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len);
  extern int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len);
  extern int ptrace_attach(struct task_struct *tsk);
@@ -32,10 +32,10 @@ index 56f2d63..4802e2a 100644  
  extern void ptrace_disable(struct task_struct *);
  extern int ptrace_check_attach(struct task_struct *task, int kill);
 diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 78efe7c..9a2b557 100644  
+index 2b7b81d..82e4494 100644  
 --- a/include/linux/sched.h
 +++ b/include/linux/sched.h
-@@ -2095,6 +2095,7 @@ extern int kill_pgrp(struct pid *pid, in
+@@ -2034,6 +2034,7 @@ extern int kill_pgrp(struct pid *pid, in
  extern int kill_pid(struct pid *pid, int sig, int priv);
  extern int kill_proc_info(int, struct siginfo *, pid_t);
  extern int do_notify_parent(struct task_struct *, int);
@@ -93,10 +93,10 @@ index 10db010..c78b2f4 100644  
  
  /**
 diff --git a/kernel/ptrace.c b/kernel/ptrace.c
-index 23bd09c..b7c1d32 100644  
+index 42ad8ae..067f120 100644  
 --- a/kernel/ptrace.c
 +++ b/kernel/ptrace.c
-@@ -271,7 +271,7 @@ static int ignoring_children(struct sigh
+@@ -272,7 +272,7 @@ static int ignoring_children(struct sigh
   * reap it now, in that case we must also wake up sub-threads sleeping in
   * do_wait().
   */
@@ -106,10 +106,10 @@ index 23bd09c..b7c1d32 100644  
  	__ptrace_unlink(p);
  
 diff --git a/kernel/signal.c b/kernel/signal.c
-index 934ae5e..9551cec 100644  
+index dbd7fe0..5122b80 100644  
 --- a/kernel/signal.c
 +++ b/kernel/signal.c
-@@ -1498,7 +1498,7 @@ int do_notify_parent(struct task_struct 
+@@ -1515,7 +1515,7 @@ int do_notify_parent(struct task_struct 
  	return ret;
  }
  
@@ -118,7 +118,7 @@ index 934ae5e..9551cec 100644  
  {
  	struct siginfo info;
  	unsigned long flags;
-@@ -1768,7 +1768,7 @@ static int do_signal_stop(int signr)
+@@ -1785,7 +1785,7 @@ static int do_signal_stop(int signr)
  static int ptrace_signal(int signr, siginfo_t *info,
  			 struct pt_regs *regs, void *cookie)
  {

linux-2.6-upstream-reverts.patch:
 drivers/gpu/drm/drm_edid.c               |    2 +-
 drivers/gpu/drm/i915/i915_gem.c          |   19 +++++++++++++++++++
 drivers/gpu/drm/i915/intel_display.c     |    6 ------
 drivers/gpu/drm/i915/intel_dp.c          |   10 ----------
 drivers/gpu/drm/radeon/radeon.h          |    1 +
 drivers/gpu/drm/radeon/radeon_agp.c      |    5 +++++
 drivers/gpu/drm/radeon/radeon_atombios.c |    7 +++----
 drivers/gpu/drm/radeon/radeon_device.c   |    2 ++
 drivers/gpu/drm/radeon/radeon_display.c  |    5 ++++-
 drivers/gpu/drm/radeon/radeon_state.c    |    5 +++--
 tools/perf/bench/mem-memcpy.c            |    2 +-
 tools/perf/bench/sched-messaging.c       |    4 ++--
 tools/perf/builtin-annotate.c            |    8 ++++----
 tools/perf/builtin-buildid-cache.c       |    2 +-
 tools/perf/builtin-buildid-list.c        |    4 ++--
 tools/perf/builtin-diff.c                |    4 ++--
 tools/perf/builtin-help.c                |    2 +-
 tools/perf/builtin-lock.c                |    2 +-
 tools/perf/builtin-probe.c               |    2 +-
 tools/perf/builtin-record.c              |   24 ++++++++++++------------
 tools/perf/builtin-report.c              |    6 +++---
 tools/perf/builtin-sched.c               |    6 +++---
 tools/perf/builtin-stat.c                |   10 +++++-----
 tools/perf/builtin-timechart.c           |    2 +-
 tools/perf/builtin-top.c                 |   14 +++++++-------
 tools/perf/builtin-trace.c               |    2 +-
 tools/perf/util/debug.c                  |    2 +-
 tools/perf/util/debug.h                  |    3 ++-
 tools/perf/util/parse-options.c          |    6 ++++++
 tools/perf/util/parse-options.h          |    4 +++-
 tools/perf/util/trace-event-parse.c      |    2 +-
 tools/perf/util/trace-event.h            |    3 ++-
 32 files changed, 100 insertions(+), 76 deletions(-)

View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.12 -r 1.13 linux-2.6-upstream-reverts.patchIndex: linux-2.6-upstream-reverts.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/linux-2.6-upstream-reverts.patch,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -p -r1.12 -r1.13
--- linux-2.6-upstream-reverts.patch	2 Jul 2010 00:57:47 -0000	1.12
+++ linux-2.6-upstream-reverts.patch	9 Jul 2010 09:09:23 -0000	1.13
@@ -1,1665 +1,953 @@
-From 5ce8ba7c9279a63f99e1f131602580472b8af968 Mon Sep 17 00:00:00 2001
-From: Adam Jackson <ajax at redhat.com>
-Date: Thu, 15 Apr 2010 14:03:30 -0400
-Subject: drm/i915: Fix 82854 PCI ID, and treat it like other 85X
-
-From: Adam Jackson <ajax at redhat.com>
-
-commit 5ce8ba7c9279a63f99e1f131602580472b8af968 upstream.
-
-pci.ids and the datasheet both say it's 358e, not 35e8.
-
-Signed-off-by: Adam Jackson <ajax at redhat.com>
-Signed-off-by: Eric Anholt <eric at anholt.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
-
----
- drivers/gpu/drm/i915/i915_drv.c |    5 +++--
- drivers/gpu/drm/i915/i915_drv.h |    3 ++-
- 2 files changed, 5 insertions(+), 3 deletions(-)
-
---- a/drivers/gpu/drm/i915/i915_drv.c
-+++ b/drivers/gpu/drm/i915/i915_drv.c
-@@ -68,7 +68,8 @@ const static struct intel_device_info in
+From c05556421742eb47f80301767653a4bcb19de9de Mon Sep 17 00:00:00 2001
+From: Ian Munsie <imunsie at au.ibm.com>
+Date: Tue, 13 Apr 2010 18:37:33 +1000
+Subject: perf: Fix endianness argument compatibility with OPT_BOOLEAN() and introduce OPT_INCR()
+
+From: Ian Munsie <imunsie at au.ibm.com>
+
+commit c05556421742eb47f80301767653a4bcb19de9de upstream.
+
+Parsing an option from the command line with OPT_BOOLEAN on a
+bool data type would not work on a big-endian machine due to the
+manner in which the boolean was being cast into an int and
+incremented. For example, running 'perf probe --list' on a
+PowerPC machine would fail to properly set the list_events bool
+and would therefore print out the usage information and
+terminate.
+
+This patch makes OPT_BOOLEAN work as expected with a bool
+datatype. For cases where the original OPT_BOOLEAN was
+intentionally being used to increment an int each time it was
+passed in on the command line, this patch introduces OPT_INCR
+with the old behaviour of OPT_BOOLEAN (the verbose variable is
+currently the only such example of this).
+
+I have reviewed every use of OPT_BOOLEAN to verify that a true
+C99 bool was passed. Where integers were used, I verified that
+they were only being used for boolean logic and changed them to
+bools to ensure that they would not be mistakenly used as ints.
+The major exception was the verbose variable which now uses
+OPT_INCR instead of OPT_BOOLEAN.
+
+Signed-off-by: Ian Munsie <imunsie at au.ibm.com>
+Acked-by: David S. Miller <davem at davemloft.net>
+Cc: <stable at kernel.org>
+Cc: Git development list <git at vger.kernel.org>
+Cc: Ian Munsie <imunsie at au1.ibm.com>
+Cc: Peter Zijlstra <a.p.zijlstra at chello.nl>
+Cc: Paul Mackerras <paulus at samba.org>
+Cc: Arnaldo Carvalho de Melo <acme at redhat.com>
+Cc: KOSAKI Motohiro <kosaki.motohiro at jp.fujitsu.com>
+Cc: Hitoshi Mitake <mitake at dcl.info.waseda.ac.jp>
+Cc: Rusty Russell <rusty at rustcorp.com.au>
+Cc: Frederic Weisbecker <fweisbec at gmail.com>
+Cc: Eric B Munson <ebmunson at us.ibm.com>
+Cc: Valdis.Kletnieks at vt.edu
+Cc: WANG Cong <amwang at redhat.com>
+Cc: Thiago Farina <tfransosi at gmail.com>
+Cc: Masami Hiramatsu <mhiramat at redhat.com>
+Cc: Xiao Guangrong <xiaoguangrong at cn.fujitsu.com>
+Cc: Jaswinder Singh Rajput <jaswinderrajput at gmail.com>
+Cc: Arjan van de Ven <arjan at linux.intel.com>
+Cc: OGAWA Hirofumi <hirofumi at mail.parknet.co.jp>
+Cc: Mike Galbraith <efault at gmx.de>
+Cc: Tom Zanussi <tzanussi at gmail.com>
+Cc: Anton Blanchard <anton at samba.org>
+Cc: John Kacur <jkacur at redhat.com>
+Cc: Li Zefan <lizf at cn.fujitsu.com>
+Cc: Steven Rostedt <rostedt at goodmis.org>
+LKML-Reference: <1271147857-11604-1-git-send-email-imunsie at au.ibm.com>
+Signed-off-by: Ingo Molnar <mingo at elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+
+---
+ tools/perf/bench/mem-memcpy.c       |    2 +-
+ tools/perf/bench/sched-messaging.c  |    4 ++--
+ tools/perf/builtin-annotate.c       |    8 ++++----
+ tools/perf/builtin-buildid-cache.c  |    2 +-
+ tools/perf/builtin-buildid-list.c   |    4 ++--
+ tools/perf/builtin-diff.c           |    4 ++--
+ tools/perf/builtin-help.c           |    2 +-
+ tools/perf/builtin-lock.c           |    2 +-
+ tools/perf/builtin-probe.c          |    2 +-
+ tools/perf/builtin-record.c         |   24 ++++++++++++------------
+ tools/perf/builtin-report.c         |    6 +++---
+ tools/perf/builtin-sched.c          |    6 +++---
+ tools/perf/builtin-stat.c           |   10 +++++-----
+ tools/perf/builtin-timechart.c      |    2 +-
+ tools/perf/builtin-top.c            |   14 +++++++-------
+ tools/perf/builtin-trace.c          |    2 +-
+ tools/perf/util/debug.c             |    2 +-
+ tools/perf/util/debug.h             |    3 ++-
+ tools/perf/util/parse-options.c     |    6 ++++++
+ tools/perf/util/parse-options.h     |    4 +++-
+ tools/perf/util/trace-event-parse.c |    2 +-
+ tools/perf/util/trace-event.h       |    3 ++-
+ 22 files changed, 62 insertions(+), 52 deletions(-)
+
+--- a/tools/perf/bench/mem-memcpy.c
++++ b/tools/perf/bench/mem-memcpy.c
+@@ -24,7 +24,7 @@
+ 
+ static const char	*length_str	= "1MB";
+ static const char	*routine	= "default";
+-static int		use_clock	= 0;
++static bool		use_clock	= false;
+ static int		clock_fd;
+ 
+ static const struct option options[] = {
+--- a/tools/perf/bench/sched-messaging.c
++++ b/tools/perf/bench/sched-messaging.c
+@@ -31,9 +31,9 @@
+ 
+ #define DATASIZE 100
+ 
+-static int use_pipes = 0;
++static bool use_pipes = false;
+ static unsigned int loops = 100;
+-static unsigned int thread_mode = 0;
++static bool thread_mode = false;
+ static unsigned int num_groups = 10;
+ 
+ struct sender_context {
+--- a/tools/perf/builtin-annotate.c
++++ b/tools/perf/builtin-annotate.c
+@@ -29,11 +29,11 @@
+ 
+ static char		const *input_name = "perf.data";
+ 
+-static int		force;
++static bool		force;
+ 
+-static int		full_paths;
++static bool		full_paths;
+ 
+-static int		print_line;
++static bool		print_line;
+ 
+ struct sym_hist {
+ 	u64		sum;
+@@ -584,7 +584,7 @@ static const struct option options[] = {
+ 	OPT_STRING('s', "symbol", &sym_hist_filter, "symbol",
+ 		    "symbol to annotate"),
+ 	OPT_BOOLEAN('f', "force", &force, "don't complain, do it"),
+-	OPT_BOOLEAN('v', "verbose", &verbose,
++	OPT_INCR('v', "verbose", &verbose,
+ 		    "be more verbose (show symbol address, etc)"),
+ 	OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace,
+ 		    "dump raw trace in ASCII"),
+--- a/tools/perf/builtin-buildid-cache.c
++++ b/tools/perf/builtin-buildid-cache.c
+@@ -27,7 +27,7 @@ static const struct option buildid_cache
+ 		   "file list", "file(s) to add"),
+ 	OPT_STRING('r', "remove", &remove_name_list_str, "file list",
+ 		    "file(s) to remove"),
+-	OPT_BOOLEAN('v', "verbose", &verbose, "be more verbose"),
++	OPT_INCR('v', "verbose", &verbose, "be more verbose"),
+ 	OPT_END()
  };
  
- const static struct intel_device_info intel_i85x_info = {
--	.is_i8xx = 1, .is_mobile = 1, .cursor_needs_physical = 1,
-+	.is_i8xx = 1, .is_i85x = 1, .is_mobile = 1,
-+	.cursor_needs_physical = 1,
+--- a/tools/perf/builtin-buildid-list.c
++++ b/tools/perf/builtin-buildid-list.c
+@@ -16,7 +16,7 @@
+ #include "util/symbol.h"
+ 
+ static char const *input_name = "perf.data";
+-static int force;
++static bool force;
+ static bool with_hits;
+ 
+ static const char * const buildid_list_usage[] = {
+@@ -29,7 +29,7 @@ static const struct option options[] = {
+ 	OPT_STRING('i', "input", &input_name, "file",
+ 		    "input file name"),
+ 	OPT_BOOLEAN('f', "force", &force, "don't complain, do it"),
[...2121 lines suppressed...]
-@@ -47,6 +47,35 @@ static struct usb_device_id id_table[] =
- 	{USB_DEVICE(0x05c6, 0x9221)},	/* Generic Gobi QDL device */
- 	{USB_DEVICE(0x05c6, 0x9231)},	/* Generic Gobi QDL device */
- 	{USB_DEVICE(0x1f45, 0x0001)},	/* Unknown Gobi QDL device */
-+	{USB_DEVICE(0x413c, 0x8185)},	/* Dell Gobi 2000 QDL device (N0218, VU936) */
-+	{USB_DEVICE(0x413c, 0x8186)},	/* Dell Gobi 2000 Modem device (N0218, VU936) */
-+	{USB_DEVICE(0x05c6, 0x9224)},	/* Sony Gobi 2000 QDL device (N0279, VU730) */
-+	{USB_DEVICE(0x05c6, 0x9225)},	/* Sony Gobi 2000 Modem device (N0279, VU730) */
-+	{USB_DEVICE(0x05c6, 0x9244)},	/* Samsung Gobi 2000 QDL device (VL176) */
-+	{USB_DEVICE(0x05c6, 0x9245)},	/* Samsung Gobi 2000 Modem device (VL176) */
-+	{USB_DEVICE(0x03f0, 0x241d)},	/* HP Gobi 2000 QDL device (VP412) */
-+	{USB_DEVICE(0x03f0, 0x251d)},	/* HP Gobi 2000 Modem device (VP412) */
-+	{USB_DEVICE(0x05c6, 0x9214)},	/* Acer Gobi 2000 QDL device (VP413) */
-+	{USB_DEVICE(0x05c6, 0x9215)},	/* Acer Gobi 2000 Modem device (VP413) */
-+	{USB_DEVICE(0x05c6, 0x9264)},	/* Asus Gobi 2000 QDL device (VR305) */
-+	{USB_DEVICE(0x05c6, 0x9265)},	/* Asus Gobi 2000 Modem device (VR305) */
-+	{USB_DEVICE(0x05c6, 0x9234)},	/* Top Global Gobi 2000 QDL device (VR306) */
-+	{USB_DEVICE(0x05c6, 0x9235)},	/* Top Global Gobi 2000 Modem device (VR306) */
-+	{USB_DEVICE(0x05c6, 0x9274)},	/* iRex Technologies Gobi 2000 QDL device (VR307) */
-+	{USB_DEVICE(0x05c6, 0x9275)},	/* iRex Technologies Gobi 2000 Modem device (VR307) */
-+	{USB_DEVICE(0x1199, 0x9000)},	/* Sierra Wireless Gobi 2000 QDL device (VT773) */
-+	{USB_DEVICE(0x1199, 0x9001)},	/* Sierra Wireless Gobi 2000 Modem device (VT773) */
-+	{USB_DEVICE(0x1199, 0x9002)},	/* Sierra Wireless Gobi 2000 Modem device (VT773) */
-+	{USB_DEVICE(0x1199, 0x9003)},	/* Sierra Wireless Gobi 2000 Modem device (VT773) */
-+	{USB_DEVICE(0x1199, 0x9004)},	/* Sierra Wireless Gobi 2000 Modem device (VT773) */
-+	{USB_DEVICE(0x1199, 0x9005)},	/* Sierra Wireless Gobi 2000 Modem device (VT773) */
-+	{USB_DEVICE(0x1199, 0x9006)},	/* Sierra Wireless Gobi 2000 Modem device (VT773) */
-+	{USB_DEVICE(0x1199, 0x9007)},	/* Sierra Wireless Gobi 2000 Modem device (VT773) */
-+	{USB_DEVICE(0x1199, 0x9008)},	/* Sierra Wireless Gobi 2000 Modem device (VT773) */
-+	{USB_DEVICE(0x1199, 0x9009)},	/* Sierra Wireless Gobi 2000 Modem device (VT773) */
-+	{USB_DEVICE(0x1199, 0x900a)},	/* Sierra Wireless Gobi 2000 Modem device (VT773) */
-+	{USB_DEVICE(0x16d8, 0x8001)},	/* CMDTech Gobi 2000 QDL device (VU922) */
-+	{USB_DEVICE(0x16d8, 0x8002)},	/* CMDTech Gobi 2000 Modem device (VU922) */
- 	{ }				/* Terminating entry */
- };
- MODULE_DEVICE_TABLE(usb, id_table);
-From 70136081fc67ea77d849f86fa323e5773c8e40ea Mon Sep 17 00:00:00 2001
-From: Theodore Kilgore <kilgota at auburn.edu>
-Date: Fri, 25 Dec 2009 05:15:10 -0300
-Subject: V4L/DVB (13991): gspca_mr973010a: Fix cif type 1 cameras not streaming on UHCI controllers
-
-From: Theodore Kilgore <kilgota at auburn.edu>
-
-commit 70136081fc67ea77d849f86fa323e5773c8e40ea upstream.
-
-If you read the mail to Oliver Neukum on the linux-usb list, then you know
-that I found a cure for the mysterious problem that the MR97310a CIF "type
-1" cameras have been freezing up and refusing to stream if hooked up to a
-machine with a UHCI controller.
-
-Namely, the cure is that if the camera is an mr97310a CIF type 1 camera, you
-have to send it 0xa0, 0x00. Somehow, this is a timing reset command, or
-such. It un-blocks whatever was previously stopping the CIF type 1 cameras
-from working on the UHCI-based machines.
-
-Signed-off-by: Theodore Kilgore <kilgota at auburn.edu>
-Signed-off-by: Hans de Goede <hdegoede at redhat.com>
-Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
+Signed-off-by: Eric Anholt <eric at anholt.net>
 Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
 
 ---
- drivers/media/video/gspca/mr97310a.c |    6 ++++++
- 1 file changed, 6 insertions(+)
+ drivers/gpu/drm/i915/i915_gem.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
 
---- a/drivers/media/video/gspca/mr97310a.c
-+++ b/drivers/media/video/gspca/mr97310a.c
-@@ -697,6 +697,12 @@ static int start_cif_cam(struct gspca_de
- 			{0x13, 0x00, {0x01}, 1},
- 			{0, 0, {0}, 0}
- 		};
-+		/* Without this command the cam won't work with USB-UHCI */
-+		gspca_dev->usb_buf[0] = 0x0a;
-+		gspca_dev->usb_buf[1] = 0x00;
-+		err_code = mr_write(gspca_dev, 2);
-+		if (err_code < 0)
-+			return err_code;
- 		err_code = sensor_write_regs(gspca_dev, cif_sensor1_init_data,
- 					 ARRAY_SIZE(cif_sensor1_init_data));
- 	}
-diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
-index 315fea4..3245d33 100644
---- a/drivers/pci/pci.c
-+++ b/drivers/pci/pci.c
-@@ -2421,18 +2421,17 @@ EXPORT_SYMBOL_GPL(pci_reset_function);
-  */
- int pcix_get_max_mmrbc(struct pci_dev *dev)
- {
--	int err, cap;
-+	int cap;
- 	u32 stat;
- 
- 	cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);
- 	if (!cap)
- 		return -EINVAL;
- 
--	err = pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat);
--	if (err)
-+	if (pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat))
- 		return -EINVAL;
- 
--	return (stat & PCI_X_STATUS_MAX_READ) >> 12;
-+	return 512 << ((stat & PCI_X_STATUS_MAX_READ) >> 21);
- }
- EXPORT_SYMBOL(pcix_get_max_mmrbc);
- 
-@@ -2445,18 +2444,17 @@ EXPORT_SYMBOL(pcix_get_max_mmrbc);
-  */
- int pcix_get_mmrbc(struct pci_dev *dev)
- {
--	int ret, cap;
--	u32 cmd;
-+	int cap;
-+	u16 cmd;
- 
- 	cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);
- 	if (!cap)
+--- a/drivers/gpu/drm/i915/i915_gem.c
++++ b/drivers/gpu/drm/i915/i915_gem.c
+@@ -2688,6 +2688,14 @@ i915_gem_object_bind_to_gtt(struct drm_g
  		return -EINVAL;
- 
--	ret = pci_read_config_dword(dev, cap + PCI_X_CMD, &cmd);
--	if (!ret)
--		ret = 512 << ((cmd & PCI_X_CMD_MAX_READ) >> 2);
-+	if (pci_read_config_word(dev, cap + PCI_X_CMD, &cmd))
-+		return -EINVAL;
- 
--	return ret;
-+	return 512 << ((cmd & PCI_X_CMD_MAX_READ) >> 2);
- }
- EXPORT_SYMBOL(pcix_get_mmrbc);
- 
-@@ -2471,28 +2469,27 @@ EXPORT_SYMBOL(pcix_get_mmrbc);
-  */
- int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc)
- {
--	int cap, err = -EINVAL;
--	u32 stat, cmd, v, o;
-+	int cap;
-+	u32 stat, v, o;
-+	u16 cmd;
- 
- 	if (mmrbc < 512 || mmrbc > 4096 || !is_power_of_2(mmrbc))
--		goto out;
-+		return -EINVAL;
- 
- 	v = ffs(mmrbc) - 10;
- 
- 	cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);
- 	if (!cap)
--		goto out;
-+		return -EINVAL;
- 
--	err = pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat);
--	if (err)
--		goto out;
-+	if (pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat))
-+		return -EINVAL;
- 
- 	if (v > (stat & PCI_X_STATUS_MAX_READ) >> 21)
- 		return -E2BIG;
- 
--	err = pci_read_config_dword(dev, cap + PCI_X_CMD, &cmd);
--	if (err)
--		goto out;
-+	if (pci_read_config_word(dev, cap + PCI_X_CMD, &cmd))
-+		return -EINVAL;
- 
- 	o = (cmd & PCI_X_CMD_MAX_READ) >> 2;
- 	if (o != v) {
-@@ -2502,10 +2499,10 @@ int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc)
- 
- 		cmd &= ~PCI_X_CMD_MAX_READ;
- 		cmd |= v << 2;
--		err = pci_write_config_dword(dev, cap + PCI_X_CMD, cmd);
-+		if (pci_write_config_word(dev, cap + PCI_X_CMD, cmd))
-+			return -EIO;
  	}
--out:
--	return err;
-+	return 0;
- }
- EXPORT_SYMBOL(pcix_set_mmrbc);
  
-
++	/* If the object is bigger than the entire aperture, reject it early
++	 * before evicting everything in a vain attempt to find space.
++	 */
++	if (obj->size > dev->gtt_total) {
++		DRM_ERROR("Attempting to bind an object larger than the aperture\n");
++		return -E2BIG;
++	}
++
+  search_free:
+ 	free_space = drm_mm_search_free(&dev_priv->mm.gtt_space,
+ 					obj->size, alignment, 0);

linux-2.6-usb-wwan-update.patch:
 Kconfig    |    5 
 Makefile   |    1 
 option.c   |  661 ++----------------------------------------------------------
 qcserial.c |   63 ++++-
 usb-wwan.h |   67 ++++++
 usb_wwan.c |  665 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 6 files changed, 810 insertions(+), 652 deletions(-)

Index: linux-2.6-usb-wwan-update.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/linux-2.6-usb-wwan-update.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- linux-2.6-usb-wwan-update.patch	2 Jul 2010 00:57:47 -0000	1.2
+++ linux-2.6-usb-wwan-update.patch	9 Jul 2010 09:09:23 -0000	1.3
@@ -1,12 +1,21 @@
-diff -up linux-2.6.33.noarch/drivers/usb/serial/Kconfig.orig linux-2.6.33.noarch/drivers/usb/serial/Kconfig
---- linux-2.6.33.noarch/drivers/usb/serial/Kconfig.orig	2010-02-24 13:52:17.000000000 -0500
-+++ linux-2.6.33.noarch/drivers/usb/serial/Kconfig	2010-04-01 12:40:00.838027293 -0400
-@@ -565,8 +565,12 @@ config USB_SERIAL_XIRCOM
+diff --git a/drivers/usb/serial/Kconfig b/drivers/usb/serial/Kconfig
+index a0ecb42..71238de 100644
+--- a/drivers/usb/serial/Kconfig
++++ b/drivers/usb/serial/Kconfig
+@@ -485,6 +485,7 @@ config USB_SERIAL_QCAUX
+ 
+ config USB_SERIAL_QUALCOMM
+ 	tristate "USB Qualcomm Serial modem"
++	select USB_SERIAL_WWAN
+ 	help
+ 	  Say Y here if you have a Qualcomm USB modem device.  These are
+ 	  usually wireless cellular modems.
+@@ -576,8 +577,12 @@ config USB_SERIAL_XIRCOM
  	  To compile this driver as a module, choose M here: the
  	  module will be called keyspan_pda.
  
 +config USB_SERIAL_WWAN
-+       tristate
++	tristate
 +
  config USB_SERIAL_OPTION
  	tristate "USB driver for GSM and CDMA modems"
@@ -14,10 +23,11 @@ diff -up linux-2.6.33.noarch/drivers/usb
  	help
  	  Say Y here if you have a GSM or CDMA modem that's connected to USB.
  
-diff -up linux-2.6.33.noarch/drivers/usb/serial/Makefile.orig linux-2.6.33.noarch/drivers/usb/serial/Makefile
---- linux-2.6.33.noarch/drivers/usb/serial/Makefile.orig	2010-02-24 13:52:17.000000000 -0500
-+++ linux-2.6.33.noarch/drivers/usb/serial/Makefile	2010-04-01 12:41:11.407997314 -0400
-@@ -51,6 +51,7 @@ obj-$(CONFIG_USB_SERIAL_SIEMENS_MPI)		+=
+diff --git a/drivers/usb/serial/Makefile b/drivers/usb/serial/Makefile
+index 83c9e43..7928cf4 100644
+--- a/drivers/usb/serial/Makefile
++++ b/drivers/usb/serial/Makefile
+@@ -52,6 +52,7 @@ obj-$(CONFIG_USB_SERIAL_SIEMENS_MPI)		+= siemens_mpi.o
  obj-$(CONFIG_USB_SERIAL_SIERRAWIRELESS)		+= sierra.o
  obj-$(CONFIG_USB_SERIAL_SPCP8X5)		+= spcp8x5.o
  obj-$(CONFIG_USB_SERIAL_SYMBOL)			+= symbolserial.o
@@ -25,9 +35,10 @@ diff -up linux-2.6.33.noarch/drivers/usb
  obj-$(CONFIG_USB_SERIAL_TI)			+= ti_usb_3410_5052.o
  obj-$(CONFIG_USB_SERIAL_VISOR)			+= visor.o
  obj-$(CONFIG_USB_SERIAL_WHITEHEAT)		+= whiteheat.o
-diff -up linux-2.6.33.noarch/drivers/usb/serial/option.c.orig linux-2.6.33.noarch/drivers/usb/serial/option.c
---- linux-2.6.33.noarch/drivers/usb/serial/option.c.orig	2010-02-24 13:52:17.000000000 -0500
-+++ linux-2.6.33.noarch/drivers/usb/serial/option.c	2010-04-01 12:42:37.072122049 -0400
+diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
+index 950cb31..10a9276 100644
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
 @@ -41,35 +41,14 @@
  #include <linux/bitops.h>
  #include <linux/usb.h>
@@ -66,7 +77,7 @@ diff -up linux-2.6.33.noarch/drivers/usb
  /* Vendor and product IDs */
  #define OPTION_VENDOR_ID			0x0AF0
  #define OPTION_PRODUCT_COLT			0x5000
-@@ -677,22 +656,22 @@ static struct usb_serial_driver option_1
+@@ -746,22 +725,22 @@ static struct usb_serial_driver option_1port_device = {
  	.id_table          = option_ids,
  	.num_ports         = 1,
  	.probe             = option_probe,
@@ -103,7 +114,7 @@ diff -up linux-2.6.33.noarch/drivers/usb
  #endif
  };
  
-@@ -705,12 +684,6 @@ static int debug;
+@@ -774,13 +753,6 @@ static int debug;
  #define IN_BUFLEN 4096
  #define OUT_BUFLEN 4096
  
@@ -111,39 +122,42 @@ diff -up linux-2.6.33.noarch/drivers/usb
 -	spinlock_t susp_lock;
 -	unsigned int suspended:1;
 -	int in_flight;
+-	struct option_blacklist_info *blacklist_info;
 -};
 -
  struct option_port_private {
  	/* Input endpoints and buffer for this port */
  	struct urb *in_urbs[N_IN_URB];
-@@ -767,216 +740,28 @@ module_exit(option_exit);
+@@ -837,8 +809,7 @@ module_exit(option_exit);
  static int option_probe(struct usb_serial *serial,
  			const struct usb_device_id *id)
  {
 -	struct option_intf_private *data;
+-
 +	struct usb_wwan_intf_private *data;
- 
  	/* D-Link DWM 652 still exposes CD-Rom emulation interface in modem mode */
  	if (serial->dev->descriptor.idVendor == DLINK_VENDOR_ID &&
  		serial->dev->descriptor.idProduct == DLINK_PRODUCT_DWM_652 &&
- 		serial->interface->cur_altsetting->desc.bInterfaceClass == 0x8)
- 		return -ENODEV;
- 
- 	/* Bandrich modem and AT command interface is 0xff */
- 	if ((serial->dev->descriptor.idVendor == BANDRICH_VENDOR_ID ||
- 		serial->dev->descriptor.idVendor == PIRELLI_VENDOR_ID) &&
+@@ -851,11 +822,13 @@ static int option_probe(struct usb_serial *serial,
  		serial->interface->cur_altsetting->desc.bInterfaceClass != 0xff)
  		return -ENODEV;
  
 -	data = serial->private = kzalloc(sizeof(struct option_intf_private), GFP_KERNEL);
 +	data = serial->private = kzalloc(sizeof(struct usb_wwan_intf_private), GFP_KERNEL);
++
  	if (!data)
  		return -ENOMEM;
 +	data->send_setup = option_send_setup;
  	spin_lock_init(&data->susp_lock);
+-	data->blacklist_info = (struct option_blacklist_info*) id->driver_info;
++	data->private = (void *)id->driver_info;
  	return 0;
  }
  
+@@ -876,194 +849,6 @@ static enum option_blacklist_reason is_blacklisted(const u8 ifnum,
+ 	return OPTION_BLACKLIST_NONE;
+ }
+ 
 -static void option_set_termios(struct tty_struct *tty,
 -		struct usb_serial_port *port, struct ktermios *old_termios)
 -{
@@ -284,7 +298,6 @@ diff -up linux-2.6.33.noarch/drivers/usb
 -	} else {
 -		tty = tty_port_tty_get(&port->port);
 -		if (urb->actual_length) {
--			tty_buffer_request_room(tty, urb->actual_length);
 -			tty_insert_flip_string(tty, data, urb->actual_length);
 -			tty_flip_buffer_push(tty);
 -		} else 
@@ -292,9 +305,9 @@ diff -up linux-2.6.33.noarch/drivers/usb
 -		tty_kref_put(tty);
 -
 -		/* Resubmit urb so we continue receiving */
--		if (port->port.count && status != -ESHUTDOWN) {
+-		if (status != -ESHUTDOWN) {
 -			err = usb_submit_urb(urb, GFP_ATOMIC);
--			if (err)
+-			if (err && err != -EPERM)
 -				printk(KERN_ERR "%s: resubmit read urb failed. "
 -					"(%d)", __func__, err);
 -			else
@@ -336,7 +349,7 @@ diff -up linux-2.6.33.noarch/drivers/usb
  static void option_instat_callback(struct urb *urb)
  {
  	int err;
-@@ -1026,183 +811,6 @@ static void option_instat_callback(struc
+@@ -1120,183 +905,6 @@ static void option_instat_callback(struct urb *urb)
  	}
  }
  
@@ -520,7 +533,28 @@ diff -up linux-2.6.33.noarch/drivers/usb
  /** send RTS/DTR state to the port.
   *
   * This is exactly the same as SET_CONTROL_LINE_STATE from the PSTN
-@@ -1228,224 +836,6 @@ static int option_send_setup(struct usb_
+@@ -1305,15 +913,16 @@ static void option_setup_urbs(struct usb_serial *serial)
+ static int option_send_setup(struct usb_serial_port *port)
+ {
+ 	struct usb_serial *serial = port->serial;
+-	struct option_intf_private *intfdata =
+-		(struct option_intf_private *) serial->private;
++	struct usb_wwan_intf_private *intfdata =
++		(struct usb_wwan_intf_private *) serial->private;
+ 	struct option_port_private *portdata;
+ 	int ifNum = serial->interface->cur_altsetting->desc.bInterfaceNumber;
+ 	int val = 0;
+ 	dbg("%s", __func__);
+ 
+-	if (is_blacklisted(ifNum, intfdata->blacklist_info) ==
+-						OPTION_BLACKLIST_SENDSETUP) {
++	if (is_blacklisted(ifNum,
++			   (struct option_blacklist_info *) intfdata->private)
++	    == OPTION_BLACKLIST_SENDSETUP) {
+ 		dbg("No send_setup on blacklisted interface #%d\n", ifNum);
+ 		return -EIO;
+ 	}
+@@ -1330,224 +939,6 @@ static int option_send_setup(struct usb_serial_port *port)
  		0x22, 0x21, val, ifNum, NULL, 0, USB_CTRL_SET_TIMEOUT);
  }
  
@@ -697,7 +731,7 @@ diff -up linux-2.6.33.noarch/drivers/usb
 -	for (i = 0; i < serial->num_ports; i++) {
 -		port = serial->port[i];
 -		if (!port->interrupt_in_urb) {
--			dbg("%s: No interrupt URB for port %d\n", __func__, i);
+-			dbg("%s: No interrupt URB for port %d", __func__, i);
 -			continue;
 -		}
 -		err = usb_submit_urb(port->interrupt_in_urb, GFP_NOIO);
@@ -745,10 +779,11 @@ diff -up linux-2.6.33.noarch/drivers/usb
  MODULE_AUTHOR(DRIVER_AUTHOR);
  MODULE_DESCRIPTION(DRIVER_DESC);
  MODULE_VERSION(DRIVER_VERSION);
-diff -up linux-2.6.33.noarch/drivers/usb/serial/qcserial.c.orig linux-2.6.33.noarch/drivers/usb/serial/qcserial.c
---- linux-2.6.33.noarch/drivers/usb/serial/qcserial.c.orig	2010-04-01 12:38:39.954019769 -0400
-+++ linux-2.6.33.noarch/drivers/usb/serial/qcserial.c	2010-04-01 12:41:29.346996823 -0400
-@@ -15,13 +15,14 @@
+diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
+index 53a2d5a..9e55ef5 100644
+--- a/drivers/usb/serial/qcserial.c
++++ b/drivers/usb/serial/qcserial.c
+@@ -15,6 +15,7 @@
  #include <linux/tty_flip.h>
  #include <linux/usb.h>
  #include <linux/usb/serial.h>
@@ -756,53 +791,16 @@ diff -up linux-2.6.33.noarch/drivers/usb
  
  #define DRIVER_AUTHOR "Qualcomm Inc"
  #define DRIVER_DESC "Qualcomm USB Serial driver"
- 
- static int debug;
- 
--static struct usb_device_id id_table[] = {
-+static const struct usb_device_id id_table[] = {
- 	{USB_DEVICE(0x05c6, 0x9211)},	/* Acer Gobi QDL device */
- 	{USB_DEVICE(0x05c6, 0x9212)},	/* Acer Gobi Modem Device */
- 	{USB_DEVICE(0x03f0, 0x1f1d)},	/* HP un2400 Gobi Modem Device */
-@@ -47,6 +48,37 @@ static struct usb_device_id id_table[] =
- 	{USB_DEVICE(0x05c6, 0x9221)},	/* Generic Gobi QDL device */
- 	{USB_DEVICE(0x05c6, 0x9231)},	/* Generic Gobi QDL device */
- 	{USB_DEVICE(0x1f45, 0x0001)},	/* Unknown Gobi QDL device */
-+	{USB_DEVICE(0x413c, 0x8185)},	/* Dell Gobi 2000 QDL device (N0218, VU936) */
-+	{USB_DEVICE(0x413c, 0x8186)},	/* Dell Gobi 2000 Modem device (N0218, VU936) */
-+	{USB_DEVICE(0x05c6, 0x9224)},	/* Sony Gobi 2000 QDL device (N0279, VU730) */
-+	{USB_DEVICE(0x05c6, 0x9225)},	/* Sony Gobi 2000 Modem device (N0279, VU730) */
-+	{USB_DEVICE(0x05c6, 0x9244)},	/* Samsung Gobi 2000 QDL device (VL176) */
-+	{USB_DEVICE(0x05c6, 0x9245)},	/* Samsung Gobi 2000 Modem device (VL176) */
-+	{USB_DEVICE(0x03f0, 0x241d)},	/* HP Gobi 2000 QDL device (VP412) */
-+	{USB_DEVICE(0x03f0, 0x251d)},	/* HP Gobi 2000 Modem device (VP412) */
-+	{USB_DEVICE(0x05c6, 0x9214)},	/* Acer Gobi 2000 QDL device (VP413) */
-+	{USB_DEVICE(0x05c6, 0x9215)},	/* Acer Gobi 2000 Modem device (VP413) */
-+	{USB_DEVICE(0x05c6, 0x9264)},	/* Asus Gobi 2000 QDL device (VR305) */
-+	{USB_DEVICE(0x05c6, 0x9265)},	/* Asus Gobi 2000 Modem device (VR305) */
-+	{USB_DEVICE(0x05c6, 0x9234)},	/* Top Global Gobi 2000 QDL device (VR306) */
-+	{USB_DEVICE(0x05c6, 0x9235)},	/* Top Global Gobi 2000 Modem device (VR306) */
-+	{USB_DEVICE(0x05c6, 0x9274)},	/* iRex Technologies Gobi 2000 QDL device (VR307) */
-+	{USB_DEVICE(0x05c6, 0x9275)},	/* iRex Technologies Gobi 2000 Modem device (VR307) */
-+	{USB_DEVICE(0x1199, 0x9000)},	/* Sierra Wireless Gobi 2000 QDL device (VT773) */
-+	{USB_DEVICE(0x1199, 0x9001)},	/* Sierra Wireless Gobi 2000 Modem device (VT773) */
-+	{USB_DEVICE(0x1199, 0x9002)},	/* Sierra Wireless Gobi 2000 Modem device (VT773) */
-+	{USB_DEVICE(0x1199, 0x9003)},	/* Sierra Wireless Gobi 2000 Modem device (VT773) */
-+	{USB_DEVICE(0x1199, 0x9004)},	/* Sierra Wireless Gobi 2000 Modem device (VT773) */
-+	{USB_DEVICE(0x1199, 0x9005)},	/* Sierra Wireless Gobi 2000 Modem device (VT773) */
-+	{USB_DEVICE(0x1199, 0x9006)},	/* Sierra Wireless Gobi 2000 Modem device (VT773) */
-+	{USB_DEVICE(0x1199, 0x9007)},	/* Sierra Wireless Gobi 2000 Modem device (VT773) */
-+	{USB_DEVICE(0x1199, 0x9008)},	/* Sierra Wireless Gobi 2000 Modem device (VT773) */
-+	{USB_DEVICE(0x1199, 0x9009)},	/* Sierra Wireless Gobi 2000 Modem device (VT773) */
-+	{USB_DEVICE(0x1199, 0x900a)},	/* Sierra Wireless Gobi 2000 Modem device (VT773) */
-+	{USB_DEVICE(0x16d8, 0x8001)},	/* CMDTech Gobi 2000 QDL device (VU922) */
-+	{USB_DEVICE(0x16d8, 0x8002)},	/* CMDTech Gobi 2000 Modem device (VU922) */
+@@ -76,6 +77,8 @@ static const struct usb_device_id id_table[] = {
+ 	{USB_DEVICE(0x1199, 0x900a)},	/* Sierra Wireless Gobi 2000 Modem device (VT773) */
+ 	{USB_DEVICE(0x16d8, 0x8001)},	/* CMDTech Gobi 2000 QDL device (VU922) */
+ 	{USB_DEVICE(0x16d8, 0x8002)},	/* CMDTech Gobi 2000 Modem device (VU922) */
 +	{USB_DEVICE(0x05c6, 0x9204)},	/* Gobi 2000 QDL device */
 +	{USB_DEVICE(0x05c6, 0x9205)},	/* Gobi 2000 Modem device */
  	{ }				/* Terminating entry */
  };
  MODULE_DEVICE_TABLE(usb, id_table);
-@@ -63,6 +95,8 @@ static struct usb_driver qcdriver = {
+@@ -92,6 +95,8 @@ static struct usb_driver qcdriver = {
  
  static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
  {
@@ -811,7 +809,7 @@ diff -up linux-2.6.33.noarch/drivers/usb
  	int retval = -ENODEV;
  	__u8 nintf;
  	__u8 ifnum;
-@@ -71,33 +105,45 @@ static int qcprobe(struct usb_serial *se
+@@ -100,33 +105,45 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
  
  	nintf = serial->dev->actconfig->desc.bNumInterfaces;
  	dbg("Num Interfaces = %d", nintf);
@@ -874,7 +872,7 @@ diff -up linux-2.6.33.noarch/drivers/usb
  	case 4:
  		/* Composite mode */
  		if (ifnum == 2) {
-@@ -132,6 +178,18 @@ static struct usb_serial_driver qcdevice
+@@ -161,6 +178,18 @@ static struct usb_serial_driver qcdevice = {
  	.usb_driver          = &qcdriver,
  	.num_ports           = 1,
  	.probe               = qcprobe,
@@ -893,9 +891,84 @@ diff -up linux-2.6.33.noarch/drivers/usb
  };
  
  static int __init qcinit(void)
-diff -up linux-2.6.33.noarch/drivers/usb/serial/usb_wwan.c.orig linux-2.6.33.noarch/drivers/usb/serial/usb_wwan.c
---- linux-2.6.33.noarch/drivers/usb/serial/usb_wwan.c.orig	2010-04-01 12:39:41.531121118 -0400
-+++ linux-2.6.33.noarch/drivers/usb/serial/usb_wwan.c	2010-04-01 12:39:41.531121118 -0400
+diff --git a/drivers/usb/serial/usb-wwan.h b/drivers/usb/serial/usb-wwan.h
+new file mode 100644
+index 0000000..2be298a
+--- /dev/null
++++ b/drivers/usb/serial/usb-wwan.h
+@@ -0,0 +1,67 @@
++/*
++ * Definitions for USB serial mobile broadband cards
++ */
++
++#ifndef __LINUX_USB_USB_WWAN
++#define __LINUX_USB_USB_WWAN
++
++extern void usb_wwan_dtr_rts(struct usb_serial_port *port, int on);
++extern int usb_wwan_open(struct tty_struct *tty, struct usb_serial_port *port);
++extern void usb_wwan_close(struct usb_serial_port *port);
++extern int usb_wwan_startup(struct usb_serial *serial);
++extern void usb_wwan_disconnect(struct usb_serial *serial);
++extern void usb_wwan_release(struct usb_serial *serial);
++extern int usb_wwan_write_room(struct tty_struct *tty);
++extern void usb_wwan_set_termios(struct tty_struct *tty,
++				 struct usb_serial_port *port,
++				 struct ktermios *old);
++extern int usb_wwan_tiocmget(struct tty_struct *tty, struct file *file);
++extern int usb_wwan_tiocmset(struct tty_struct *tty, struct file *file,
++			     unsigned int set, unsigned int clear);
++extern int usb_wwan_send_setup(struct usb_serial_port *port);
++extern int usb_wwan_write(struct tty_struct *tty, struct usb_serial_port *port,
++			  const unsigned char *buf, int count);
++extern int usb_wwan_chars_in_buffer(struct tty_struct *tty);
++#ifdef CONFIG_PM
++extern int usb_wwan_suspend(struct usb_serial *serial, pm_message_t message);
++extern int usb_wwan_resume(struct usb_serial *serial);
++#endif
++
++/* per port private data */
++
++#define N_IN_URB 4
++#define N_OUT_URB 4
++#define IN_BUFLEN 4096
++#define OUT_BUFLEN 4096
++
++struct usb_wwan_intf_private {
++	spinlock_t susp_lock;
++	unsigned int suspended:1;
++	int in_flight;
++	int (*send_setup) (struct usb_serial_port *port);
++	void *private;
++};
++
++struct usb_wwan_port_private {
++	/* Input endpoints and buffer for this port */
++	struct urb *in_urbs[N_IN_URB];
++	u8 *in_buffer[N_IN_URB];
++	/* Output endpoints and buffer for this port */
++	struct urb *out_urbs[N_OUT_URB];
++	u8 *out_buffer[N_OUT_URB];
++	unsigned long out_busy;	/* Bit vector of URBs in use */
++	int opened;
++	struct usb_anchor delayed;
++
++	/* Settings for the port */
++	int rts_state;		/* Handshaking pins (outputs) */
++	int dtr_state;
++	int cts_state;		/* Handshaking pins (inputs) */
++	int dsr_state;
++	int dcd_state;
++	int ri_state;
++
++	unsigned long tx_start_time[N_OUT_URB];
++};
++
++#endif /* __LINUX_USB_USB_WWAN */
+diff --git a/drivers/usb/serial/usb_wwan.c b/drivers/usb/serial/usb_wwan.c
+new file mode 100644
+index 0000000..1ccf852
+--- /dev/null
++++ b/drivers/usb/serial/usb_wwan.c
 @@ -0,0 +1,665 @@
 +/*
 +  USB Driver layer for GSM modems
@@ -925,6 +998,7 @@ diff -up linux-2.6.33.noarch/drivers/usb
 +#include <linux/kernel.h>
 +#include <linux/jiffies.h>
 +#include <linux/errno.h>
++#include <linux/slab.h>
 +#include <linux/tty.h>
 +#include <linux/tty_flip.h>
 +#include <linux/module.h>
@@ -1115,7 +1189,6 @@ diff -up linux-2.6.33.noarch/drivers/usb
 +	} else {
 +		tty = tty_port_tty_get(&port->port);
 +		if (urb->actual_length) {
-+			tty_buffer_request_room(tty, urb->actual_length);
 +			tty_insert_flip_string(tty, data, urb->actual_length);
 +			tty_flip_buffer_push(tty);
 +		} else
@@ -1123,9 +1196,9 @@ diff -up linux-2.6.33.noarch/drivers/usb
 +		tty_kref_put(tty);
 +
 +		/* Resubmit urb so we continue receiving */
-+		if (port->port.count && status != -ESHUTDOWN) {
++		if (status != -ESHUTDOWN) {
 +			err = usb_submit_urb(urb, GFP_ATOMIC);
-+			if (err)
++			if (err && err != -EPERM)
 +				printk(KERN_ERR "%s: resubmit read urb failed. "
 +				       "(%d)", __func__, err);
 +			else
@@ -1509,7 +1582,7 @@ diff -up linux-2.6.33.noarch/drivers/usb
 +	for (i = 0; i < serial->num_ports; i++) {
 +		port = serial->port[i];
 +		if (!port->interrupt_in_urb) {
-+			dbg("%s: No interrupt URB for port %d\n", __func__, i);
++			dbg("%s: No interrupt URB for port %d", __func__, i);
 +			continue;
 +		}
 +		err = usb_submit_urb(port->interrupt_in_urb, GFP_NOIO);
@@ -1562,73 +1635,3 @@ diff -up linux-2.6.33.noarch/drivers/usb
 +
 +module_param(debug, bool, S_IRUGO | S_IWUSR);
 +MODULE_PARM_DESC(debug, "Debug messages");
-diff -up linux-2.6.33.noarch/drivers/usb/serial/usb-wwan.h.orig linux-2.6.33.noarch/drivers/usb/serial/usb-wwan.h
---- linux-2.6.33.noarch/drivers/usb/serial/usb-wwan.h.orig	2010-04-01 12:42:23.050997135 -0400
-+++ linux-2.6.33.noarch/drivers/usb/serial/usb-wwan.h	2010-04-01 12:42:19.341996684 -0400
-@@ -0,0 +1,66 @@
-+/*
-+ * Definitions for USB serial mobile broadband cards
-+ */
-+
-+#ifndef __LINUX_USB_USB_WWAN
-+#define __LINUX_USB_USB_WWAN
-+
-+extern void usb_wwan_dtr_rts(struct usb_serial_port *port, int on);
-+extern int usb_wwan_open(struct tty_struct *tty, struct usb_serial_port *port);
-+extern void usb_wwan_close(struct usb_serial_port *port);
-+extern int usb_wwan_startup(struct usb_serial *serial);
-+extern void usb_wwan_disconnect(struct usb_serial *serial);
-+extern void usb_wwan_release(struct usb_serial *serial);
-+extern int usb_wwan_write_room(struct tty_struct *tty);
-+extern void usb_wwan_set_termios(struct tty_struct *tty,
-+				 struct usb_serial_port *port,
-+				 struct ktermios *old);
-+extern int usb_wwan_tiocmget(struct tty_struct *tty, struct file *file);
-+extern int usb_wwan_tiocmset(struct tty_struct *tty, struct file *file,
-+			     unsigned int set, unsigned int clear);
-+extern int usb_wwan_send_setup(struct usb_serial_port *port);
-+extern int usb_wwan_write(struct tty_struct *tty, struct usb_serial_port *port,
-+			  const unsigned char *buf, int count);
-+extern int usb_wwan_chars_in_buffer(struct tty_struct *tty);
-+#ifdef CONFIG_PM
-+extern int usb_wwan_suspend(struct usb_serial *serial, pm_message_t message);
-+extern int usb_wwan_resume(struct usb_serial *serial);
-+#endif
-+
-+/* per port private data */
-+
-+#define N_IN_URB 4
-+#define N_OUT_URB 4
-+#define IN_BUFLEN 4096
-+#define OUT_BUFLEN 4096
-+
-+struct usb_wwan_intf_private {
-+	spinlock_t susp_lock;
-+	unsigned int suspended:1;
-+	int in_flight;
-+	int (*send_setup) (struct usb_serial_port *port);
-+};
-+
-+struct usb_wwan_port_private {
-+	/* Input endpoints and buffer for this port */
-+	struct urb *in_urbs[N_IN_URB];
-+	u8 *in_buffer[N_IN_URB];
-+	/* Output endpoints and buffer for this port */
-+	struct urb *out_urbs[N_OUT_URB];
-+	u8 *out_buffer[N_OUT_URB];
-+	unsigned long out_busy;	/* Bit vector of URBs in use */
-+	int opened;
-+	struct usb_anchor delayed;
-+
-+	/* Settings for the port */
-+	int rts_state;		/* Handshaking pins (outputs) */
-+	int dtr_state;
-+	int cts_state;		/* Handshaking pins (inputs) */
-+	int dsr_state;
-+	int dcd_state;
-+	int ri_state;
-+
-+	unsigned long tx_start_time[N_OUT_URB];
-+};
-+
-+#endif /* __LINUX_USB_USB_WWAN */

linux-2.6-utrace-ptrace.patch:
 include/linux/ptrace.h |    2 
 kernel/Makefile        |    1 
 kernel/ptrace-utrace.c | 1127 +++++++++++++++++++++++++++++++++++++++++++++++++
 kernel/ptrace.c        |  695 ++++++++++++++----------------
 kernel/utrace.c        |   16 
 5 files changed, 1487 insertions(+), 354 deletions(-)

Index: linux-2.6-utrace-ptrace.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/linux-2.6-utrace-ptrace.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- linux-2.6-utrace-ptrace.patch	12 May 2010 00:31:53 -0000	1.3
+++ linux-2.6-utrace-ptrace.patch	9 Jul 2010 09:09:23 -0000	1.4
@@ -14,16 +14,16 @@ Signed-off-by: Oleg Nesterov <oleg at redha
 ---
  include/linux/ptrace.h |    2 +-
  kernel/Makefile        |    1 +
- kernel/ptrace-utrace.c | 1080 ++++++++++++++++++++++++++++++++++++++++++++++++
- kernel/ptrace.c        |  572 +++++++++++++-------------
+ kernel/ptrace-utrace.c | 1127 ++++++++++++++++++++++++++++++++++++++++++++++++
+ kernel/ptrace.c        |  654 ++++++++++++++--------------
  kernel/utrace.c        |   16 +
- 5 files changed, 1378 insertions(+), 293 deletions(-)
+ 5 files changed, 1466 insertions(+), 334 deletions(-)
 
 diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h
-index 4802e2a..03f8fc7 100644  
+index 0d84f1e..102cb0f 100644  
 --- a/include/linux/ptrace.h
 +++ b/include/linux/ptrace.h
-@@ -79,7 +79,7 @@
+@@ -99,7 +99,7 @@
  #include <linux/compiler.h>		/* For unlikely.  */
  #include <linux/sched.h>		/* For struct task_struct.  */
  
@@ -33,10 +33,10 @@ index 4802e2a..03f8fc7 100644  
  extern int ptrace_traceme(void);
  extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len);
 diff --git a/kernel/Makefile b/kernel/Makefile
-index 8a0185e..30a118d 100644  
+index 8bbb631..0cf7a15 100644  
 --- a/kernel/Makefile
 +++ b/kernel/Makefile
-@@ -70,6 +70,7 @@ obj-$(CONFIG_RESOURCE_COUNTERS) += res_c
+@@ -71,6 +71,7 @@ obj-$(CONFIG_RESOURCE_COUNTERS) += res_c
  obj-$(CONFIG_STOP_MACHINE) += stop_machine.o
  obj-$(CONFIG_KPROBES_SANITY_TEST) += test_kprobes.o
  obj-$(CONFIG_UTRACE) += utrace.o
@@ -46,10 +46,10 @@ index 8a0185e..30a118d 100644  
  obj-$(CONFIG_GCOV_KERNEL) += gcov/
 diff --git a/kernel/ptrace-utrace.c b/kernel/ptrace-utrace.c
 new file mode 100644
-index ...ea419ee 100644  
+index ...86234ee 100644  
 --- /dev/null
 +++ b/kernel/ptrace-utrace.c
-@@ -0,0 +1,1080 @@
+@@ -0,0 +1,1127 @@
 +/*
 + * linux/kernel/ptrace.c
 + *
@@ -999,6 +999,9 @@ index ...ea419ee 100644  
 +	return 0;
 +}
 +
++extern int ptrace_regset(struct task_struct *task, int req, unsigned int type,
++			 struct iovec *kiov);
++
 +int ptrace_request(struct task_struct *child, long request,
 +		   long addr, long data)
 +{
@@ -1058,6 +1061,25 @@ index ...ea419ee 100644  
 +		ret = 0;
 +		break;
 +
++	case PTRACE_GETREGSET:
++	case PTRACE_SETREGSET:
++	{
++		struct iovec kiov;
++		struct iovec __user *uiov = (struct iovec __user *) data;
++
++		if (!access_ok(VERIFY_WRITE, uiov, sizeof(*uiov)))
++			return -EFAULT;
++
++		if (__get_user(kiov.iov_base, &uiov->iov_base) ||
++		    __get_user(kiov.iov_len, &uiov->iov_len))
++			return -EFAULT;
++
++		ret = ptrace_regset(child, request, addr, &kiov);
++		if (!ret)
++			ret = __put_user(kiov.iov_len, &uiov->iov_len);
++		break;
++	}
++
 +	default:
 +		ret = ptrace_resume(child, engine, request, data);
 +		break;
@@ -1122,6 +1144,31 @@ index ...ea419ee 100644  
 +						&siginfo, true);
 +		break;
 +
++	case PTRACE_GETREGSET:
++	case PTRACE_SETREGSET:
++	{
++		struct iovec kiov;
++		struct compat_iovec __user *uiov =
++			(struct compat_iovec __user *) datap;
++		compat_uptr_t ptr;
++		compat_size_t len;
++
++		if (!access_ok(VERIFY_WRITE, uiov, sizeof(*uiov)))
++			return -EFAULT;
++
++		if (__get_user(ptr, &uiov->iov_base) ||
++		    __get_user(len, &uiov->iov_len))
++			return -EFAULT;
++
++		kiov.iov_base = compat_ptr(ptr);
++		kiov.iov_len = len;
++
++		ret = ptrace_regset(child, request, addr, &kiov);
++		if (!ret)
++			ret = __put_user(kiov.iov_len, &uiov->iov_len);
++		break;
++	}
++
 +	default:
 +		ret = ptrace_request(child, request, addr, data);
 +	}
@@ -1131,7 +1178,7 @@ index ...ea419ee 100644  
 +}
 +#endif	/* CONFIG_COMPAT */
 diff --git a/kernel/ptrace.c b/kernel/ptrace.c
-index a408bf7..4e87441 100644  
+index 0ad4dc0..448b353 100644  
 --- a/kernel/ptrace.c
 +++ b/kernel/ptrace.c
 @@ -16,7 +16,6 @@
@@ -1142,9 +1189,9 @@ index a408bf7..4e87441 100644  
  #include <linux/security.h>
  #include <linux/signal.h>
  #include <linux/audit.h>
-@@ -24,7 +23,286 @@
- #include <linux/syscalls.h>
+@@ -25,7 +24,327 @@
  #include <linux/uaccess.h>
+ #include <linux/regset.h>
  
 +int __ptrace_may_access(struct task_struct *task, unsigned int mode)
 +{
@@ -1294,6 +1341,47 @@ index a408bf7..4e87441 100644  
 +	return copied;
 +}
 +
++#ifdef CONFIG_HAVE_ARCH_TRACEHOOK
++
++static const struct user_regset *
++find_regset(const struct user_regset_view *view, unsigned int type)
++{
++	const struct user_regset *regset;
++	int n;
++
++	for (n = 0; n < view->n; ++n) {
++		regset = view->regsets + n;
++		if (regset->core_note_type == type)
++			return regset;
++	}
++
++	return NULL;
++}
++
++int ptrace_regset(struct task_struct *task, int req, unsigned int type,
++		  struct iovec *kiov)
++{
++	const struct user_regset_view *view = task_user_regset_view(task);
++	const struct user_regset *regset = find_regset(view, type);
++	int regset_no;
++
++	if (!regset || (kiov->iov_len % regset->size) != 0)
++		return -EINVAL;
++
++	regset_no = regset - view->regsets;
++	kiov->iov_len = min(kiov->iov_len,
++			    (__kernel_size_t) (regset->n * regset->size));
++
++	if (req == PTRACE_GETREGSET)
++		return copy_regset_to_user(task, view, regset_no, 0,
++					   kiov->iov_len, kiov->iov_base);
++	else
++		return copy_regset_from_user(task, view, regset_no, 0,
++					     kiov->iov_len, kiov->iov_base);
++}
++
++#endif
++
 +static struct task_struct *ptrace_get_task_struct(pid_t pid)
 +{
 +	struct task_struct *child;
@@ -1312,7 +1400,7 @@ index a408bf7..4e87441 100644  
 +#ifndef arch_ptrace_attach
 +#define arch_ptrace_attach(child)	do { } while (0)
 +#endif
- 
++
 +SYSCALL_DEFINE4(ptrace, long, request, long, pid, long, addr, long, data)
 +{
 +	struct task_struct *child;
@@ -1358,7 +1446,7 @@ index a408bf7..4e87441 100644  
 +	unlock_kernel();
 +	return ret;
 +}
-+
+ 
 +int generic_ptrace_peekdata(struct task_struct *tsk, long addr, long data)
 +{
 +	unsigned long tmp;
@@ -1429,27 +1517,10 @@ index a408bf7..4e87441 100644  
  /*
   * ptrace a task: make the debugger its new parent and
   * move it to the ptrace list.
-@@ -101,76 +379,21 @@ int ptrace_check_attach(struct task_stru
- 		/*
- 		 * child->sighand can't be NULL, release_task()
- 		 * does ptrace_unlink() before __exit_signal().
--		 */
--		spin_lock_irq(&child->sighand->siglock);
--		if (task_is_stopped(child))
--			child->state = TASK_TRACED;
--		else if (!task_is_traced(child) && !kill)
--			ret = -ESRCH;
--		spin_unlock_irq(&child->sighand->siglock);
--	}
--	read_unlock(&tasklist_lock);
--
--	if (!ret && !kill)
--		ret = wait_task_inactive(child, TASK_TRACED) ? 0 : -ESRCH;
--
--	/* All systems go.. */
--	return ret;
--}
--
+@@ -119,61 +438,6 @@ int ptrace_check_attach(struct task_stru
+ 	return ret;
+ }
+ 
 -int __ptrace_may_access(struct task_struct *task, unsigned int mode)
 -{
 -	const struct cred *cred = current_cred(), *tcred;
@@ -1487,16 +1558,7 @@ index a408bf7..4e87441 100644  
 -
 -	return security_ptrace_access_check(task, mode);
 -}
-+		 */
-+		spin_lock_irq(&child->sighand->siglock);
-+		if (task_is_stopped(child))
-+			child->state = TASK_TRACED;
-+		else if (!task_is_traced(child) && !kill)
-+			ret = -ESRCH;
-+		spin_unlock_irq(&child->sighand->siglock);
-+	}
-+	read_unlock(&tasklist_lock);
- 
+-
 -bool ptrace_may_access(struct task_struct *task, unsigned int mode)
 -{
 -	int err;
@@ -1505,21 +1567,19 @@ index a408bf7..4e87441 100644  
 -	task_unlock(task);
 -	return !err;
 -}
-+	if (!ret && !kill)
-+		ret = wait_task_inactive(child, TASK_TRACED) ? 0 : -ESRCH;
- 
+-
 -/*
 - * For experimental use of utrace, exclude ptrace on the same task.
 - */
 -static inline bool exclude_ptrace(struct task_struct *task)
 -{
 -	return unlikely(!!task_utrace_flags(task));
-+	/* All systems go.. */
-+	return ret;
- }
- 
+-}
+-
  int ptrace_attach(struct task_struct *task)
-@@ -196,8 +419,6 @@ int ptrace_attach(struct task_struct *ta
+ {
+ 	int retval;
+@@ -197,8 +461,6 @@ int ptrace_attach(struct task_struct *ta
  
  	task_lock(task);
  	retval = __ptrace_may_access(task, PTRACE_MODE_ATTACH);
@@ -1528,20 +1588,42 @@ index a408bf7..4e87441 100644  
  	task_unlock(task);
  	if (retval)
  		goto unlock_creds;
-@@ -235,9 +456,6 @@ int ptrace_traceme(void)
- {
- 	int ret = -EPERM;
+@@ -226,87 +488,33 @@ out:
+ 	return retval;
+ }
  
+-/**
+- * ptrace_traceme  --  helper for PTRACE_TRACEME
+- *
+- * Performs checks and sets PT_PTRACED.
+- * Should be used by all ptrace implementations for PTRACE_TRACEME.
+- */
+-int ptrace_traceme(void)
+-{
+-	int ret = -EPERM;
+-
 -	if (exclude_ptrace(current)) /* XXX locking */
 -		return -EBUSY;
 -
- 	write_lock_irq(&tasklist_lock);
- 	/* Are we already being traced? */
- 	if (!current->ptrace) {
-@@ -257,57 +475,6 @@ int ptrace_traceme(void)
- 	return ret;
- }
- 
+-	write_lock_irq(&tasklist_lock);
+-	/* Are we already being traced? */
+-	if (!current->ptrace) {
+-		ret = security_ptrace_traceme(current->parent);
+-		/*
+-		 * Check PF_EXITING to ensure ->real_parent has not passed
+-		 * exit_ptrace(). Otherwise we don't report the error but
+-		 * pretend ->real_parent untraces us right after return.
+-		 */
+-		if (!ret && !(current->real_parent->flags & PF_EXITING)) {
+-			current->ptrace = PT_PTRACED;
+-			__ptrace_link(current, current->real_parent);
+-		}
+-	}
+-	write_unlock_irq(&tasklist_lock);
+-
+-	return ret;
+-}
+-
 -/*
 - * Called with irqs disabled, returns true if childs should reap themselves.
 - */
@@ -1569,11 +1651,18 @@ index a408bf7..4e87441 100644  
 - * children self-reap, then this child was prevented by ptrace and we must
 - * reap it now, in that case we must also wake up sub-threads sleeping in
 - * do_wait().
-- */
++/**
++ * ptrace_traceme  --  helper for PTRACE_TRACEME
++ *
++ * Performs checks and sets PT_PTRACED.
++ * Should be used by all ptrace implementations for PTRACE_TRACEME.
+  */
 -bool __ptrace_detach(struct task_struct *tracer, struct task_struct *p)
--{
++int ptrace_traceme(void)
+ {
 -	__ptrace_unlink(p);
--
++	int ret = -EPERM;
+ 
 -	if (p->exit_state == EXIT_ZOMBIE) {
 -		if (!task_detached(p) && thread_group_empty(p)) {
 -			if (!same_thread_group(p->real_parent, tracer))
@@ -1587,16 +1676,28 @@ index a408bf7..4e87441 100644  
 -			/* Mark it as in the process of being reaped. */
 -			p->exit_state = EXIT_DEAD;
 -			return true;
--		}
--	}
--
++	write_lock_irq(&tasklist_lock);
++	/* Are we already being traced? */
++	if (!current->ptrace) {
++		ret = security_ptrace_traceme(current->parent);
++		/*
++		 * Check PF_EXITING to ensure ->real_parent has not passed
++		 * exit_ptrace(). Otherwise we don't report the error but
++		 * pretend ->real_parent untraces us right after return.
++		 */
++		if (!ret && !(current->real_parent->flags & PF_EXITING)) {
++			current->ptrace = PT_PTRACED;
++			__ptrace_link(current, current->real_parent);
+ 		}
+ 	}
++	write_unlock_irq(&tasklist_lock);
+ 
 -	return false;
--}
--
++	return ret;
+ }
+ 
  int ptrace_detach(struct task_struct *child, unsigned int data)
- {
- 	bool dead = false;
-@@ -361,56 +528,6 @@ void exit_ptrace(struct task_struct *tra
+@@ -362,56 +570,6 @@ void exit_ptrace(struct task_struct *tra
  	}
  }
  
@@ -1653,7 +1754,55 @@ index a408bf7..4e87441 100644  
  static int ptrace_setoptions(struct task_struct *child, long data)
  {
  	child->ptrace &= ~PT_TRACE_MASK;
-@@ -594,93 +710,7 @@ int ptrace_request(struct task_struct *c
+@@ -526,47 +683,6 @@ static int ptrace_resume(struct task_str
+ 	return 0;
+ }
+ 
+-#ifdef CONFIG_HAVE_ARCH_TRACEHOOK
+-
+-static const struct user_regset *
+-find_regset(const struct user_regset_view *view, unsigned int type)
+-{
+-	const struct user_regset *regset;
+-	int n;
+-
+-	for (n = 0; n < view->n; ++n) {
+-		regset = view->regsets + n;
+-		if (regset->core_note_type == type)
+-			return regset;
+-	}
+-
+-	return NULL;
+-}
+-
+-static int ptrace_regset(struct task_struct *task, int req, unsigned int type,
+-			 struct iovec *kiov)
+-{
+-	const struct user_regset_view *view = task_user_regset_view(task);
+-	const struct user_regset *regset = find_regset(view, type);
+-	int regset_no;
+-
+-	if (!regset || (kiov->iov_len % regset->size) != 0)
+-		return -EINVAL;
+-
+-	regset_no = regset - view->regsets;
+-	kiov->iov_len = min(kiov->iov_len,
+-			    (__kernel_size_t) (regset->n * regset->size));
+-
+-	if (req == PTRACE_GETREGSET)
+-		return copy_regset_to_user(task, view, regset_no, 0,
+-					   kiov->iov_len, kiov->iov_base);
+-	else
+-		return copy_regset_from_user(task, view, regset_no, 0,
+-					     kiov->iov_len, kiov->iov_base);
+-}
+-
+-#endif
+-
+ int ptrace_request(struct task_struct *child, long request,
+ 		   long addr, long data)
+ {
+@@ -656,93 +772,7 @@ int ptrace_request(struct task_struct *c
  	return ret;
  }
  
@@ -1747,7 +1896,7 @@ index a408bf7..4e87441 100644  
  int compat_ptrace_request(struct task_struct *child, compat_long_t request,
  			  compat_ulong_t addr, compat_ulong_t data)
  {
-@@ -732,47 +762,5 @@ int compat_ptrace_request(struct task_st
+@@ -820,47 +850,5 @@ int compat_ptrace_request(struct task_st
  
  	return ret;
  }

linux-2.6-utrace.patch:
 Documentation/DocBook/Makefile    |    2 
 Documentation/DocBook/utrace.tmpl |  590 +++++++++
 fs/proc/array.c                   |    3 
 include/linux/sched.h             |    5 
 include/linux/tracehook.h         |   87 +
 include/linux/utrace.h            |  692 ++++++++++
 init/Kconfig                      |    9 
 kernel/Makefile                   |    1 
 kernel/fork.c                     |    3 
 kernel/ptrace.c                   |   14 
 kernel/utrace.c                   | 2436 ++++++++++++++++++++++++++++++++++++++
 11 files changed, 3840 insertions(+), 2 deletions(-)

Index: linux-2.6-utrace.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/linux-2.6-utrace.patch,v
retrieving revision 1.124
retrieving revision 1.125
diff -u -p -r1.124 -r1.125
--- linux-2.6-utrace.patch	27 May 2010 01:37:54 -0000	1.124
+++ linux-2.6-utrace.patch	9 Jul 2010 09:09:23 -0000	1.125
@@ -648,10 +648,10 @@ index ...e149f49 100644  
 +
 +</book>
 diff --git a/fs/proc/array.c b/fs/proc/array.c
-index 13b5d07..cda9489 100644  
+index 885ab55..b4d0b8a 100644  
 --- a/fs/proc/array.c
 +++ b/fs/proc/array.c
-@@ -82,6 +82,7 @@
+@@ -81,6 +81,7 @@
  #include <linux/pid_namespace.h>
  #include <linux/ptrace.h>
  #include <linux/tracehook.h>
@@ -659,7 +659,7 @@ index 13b5d07..cda9489 100644  
  
  #include <asm/pgtable.h>
  #include <asm/processor.h>
-@@ -194,6 +195,8 @@ static inline void task_state(struct seq
+@@ -192,6 +193,8 @@ static inline void task_state(struct seq
  		cred->uid, cred->euid, cred->suid, cred->fsuid,
  		cred->gid, cred->egid, cred->sgid, cred->fsgid);
  
@@ -669,10 +669,10 @@ index 13b5d07..cda9489 100644  
  	if (p->files)
  		fdt = files_fdtable(p->files);
 diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 9a2b557..47379c1 100644  
+index 82e4494..8461a2d 100644  
 --- a/include/linux/sched.h
 +++ b/include/linux/sched.h
-@@ -1412,6 +1412,11 @@ struct task_struct {
+@@ -1352,6 +1352,11 @@ struct task_struct {
  #endif
  	seccomp_t seccomp;
  
@@ -1621,7 +1621,7 @@ index ...f251efe 100644  
 +
 +#endif	/* linux/utrace.h */
 diff --git a/init/Kconfig b/init/Kconfig
-index d95ca7c..6d52a08 100644  
+index eb77e8c..b849517 100644  
 --- a/init/Kconfig
 +++ b/init/Kconfig
 @@ -320,6 +320,15 @@ config AUDIT_TREE
@@ -1641,10 +1641,10 @@ index d95ca7c..6d52a08 100644  
  
  choice
 diff --git a/kernel/Makefile b/kernel/Makefile
-index 864ff75..8a0185e 100644  
+index a987aa1..8bbb631 100644  
 --- a/kernel/Makefile
 +++ b/kernel/Makefile
-@@ -69,6 +69,7 @@ obj-$(CONFIG_IKCONFIG) += configs.o
+@@ -70,6 +70,7 @@ obj-$(CONFIG_IKCONFIG) += configs.o
  obj-$(CONFIG_RESOURCE_COUNTERS) += res_counter.o
  obj-$(CONFIG_STOP_MACHINE) += stop_machine.o
  obj-$(CONFIG_KPROBES_SANITY_TEST) += test_kprobes.o
@@ -1653,10 +1653,10 @@ index 864ff75..8a0185e 100644  
  obj-$(CONFIG_AUDITSYSCALL) += auditsc.o
  obj-$(CONFIG_GCOV_KERNEL) += gcov/
 diff --git a/kernel/fork.c b/kernel/fork.c
-index f88bd98..2b6820c 100644  
+index 4c14942..16030e3 100644  
 --- a/kernel/fork.c
 +++ b/kernel/fork.c
-@@ -153,6 +153,7 @@ void free_task(struct task_struct *tsk)
+@@ -161,6 +161,7 @@ void free_task(struct task_struct *tsk)
  	free_thread_info(tsk->stack);
  	rt_mutex_debug_task_free(tsk);
  	ftrace_graph_exit_task(tsk);
@@ -1664,7 +1664,7 @@ index f88bd98..2b6820c 100644  
  	free_task_struct(tsk);
  }
  EXPORT_SYMBOL(free_task);
-@@ -1023,6 +1024,8 @@ static struct task_struct *copy_process(
+@@ -1000,6 +1001,8 @@ static struct task_struct *copy_process(
  	if (!p)
  		goto fork_out;
  
@@ -1674,7 +1674,7 @@ index f88bd98..2b6820c 100644  
  
  	rt_mutex_init_task(p);
 diff --git a/kernel/ptrace.c b/kernel/ptrace.c
-index b7c1d32..a408bf7 100644  
+index 067f120..0ad4dc0 100644  
 --- a/kernel/ptrace.c
 +++ b/kernel/ptrace.c
 @@ -16,6 +16,7 @@
@@ -1685,7 +1685,7 @@ index b7c1d32..a408bf7 100644  
  #include <linux/security.h>
  #include <linux/signal.h>
  #include <linux/audit.h>
-@@ -164,6 +165,14 @@ bool ptrace_may_access(struct task_struc
+@@ -165,6 +166,14 @@ bool ptrace_may_access(struct task_struc
  	return !err;
  }
  
@@ -1700,7 +1700,7 @@ index b7c1d32..a408bf7 100644  
  int ptrace_attach(struct task_struct *task)
  {
  	int retval;
-@@ -187,6 +196,8 @@ int ptrace_attach(struct task_struct *ta
+@@ -188,6 +197,8 @@ int ptrace_attach(struct task_struct *ta
  
  	task_lock(task);
  	retval = __ptrace_may_access(task, PTRACE_MODE_ATTACH);
@@ -1709,7 +1709,7 @@ index b7c1d32..a408bf7 100644  
  	task_unlock(task);
  	if (retval)
  		goto unlock_creds;
-@@ -224,6 +235,9 @@ int ptrace_traceme(void)
+@@ -225,6 +236,9 @@ int ptrace_traceme(void)
  {
  	int ret = -EPERM;
  

linux-2.6-v4l-dvb-add-kworld-a340-support.patch:
 em28xx-cards.c |   28 ++++++++++++++++++++++++++++
 em28xx-dvb.c   |   33 +++++++++++++++++++++++++++++++++
 em28xx.h       |    2 +-
 3 files changed, 62 insertions(+), 1 deletion(-)

Index: linux-2.6-v4l-dvb-add-kworld-a340-support.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/linux-2.6-v4l-dvb-add-kworld-a340-support.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- linux-2.6-v4l-dvb-add-kworld-a340-support.patch	13 May 2010 04:45:00 -0000	1.1
+++ linux-2.6-v4l-dvb-add-kworld-a340-support.patch	9 Jul 2010 09:09:24 -0000	1.2
@@ -1,4 +1,7 @@
-[PATCH] dvb: add support for kworld 340u and ub435-q to em28xx-dvb
+From c34c78838f02693a70808e38309629e85aa50266 Mon Sep 17 00:00:00 2001
+From: Jarod Wilson <jarod at redhat.com>
+Date: Thu, 20 May 2010 10:03:13 -0400
+Subject: [PATCH] dvb: add support for kworld 340u and ub435-q to em28xx-dvb
 
 This adds support for the KWorld PlusTV 340U and KWorld UB345-Q ATSC
 sticks, which are really the same device. The sticks have an eMPIA
@@ -12,12 +15,17 @@ rather than the current lgdt3304 driver,
 functionality by comparison (see said patch for details).
 
 Signed-off-by: Jarod Wilson <jarod at redhat.com>
-
 ---
-diff -r 14021dfc00f3 drivers/media/video/em28xx/em28xx-cards.c
---- a/drivers/media/video/em28xx/em28xx-cards.c	Thu Feb 11 23:11:30 2010 -0200
-+++ b/drivers/media/video/em28xx/em28xx-cards.c	Thu Feb 18 16:47:17 2010 -0500
-@@ -170,6 +170,22 @@
+ drivers/media/video/em28xx/em28xx-cards.c |   28 ++++++++++++++++++++++++
+ drivers/media/video/em28xx/em28xx-dvb.c   |   33 +++++++++++++++++++++++++++++
+ drivers/media/video/em28xx/em28xx.h       |    1 +
+ 3 files changed, 62 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c
+index b0fb083..6312e76 100644
+--- a/drivers/media/video/em28xx/em28xx-cards.c
++++ b/drivers/media/video/em28xx/em28xx-cards.c
+@@ -158,6 +158,22 @@ static struct em28xx_reg_seq evga_indtube_digital[] = {
  	{ -1,			-1,	-1,		-1},
  };
  
@@ -40,7 +48,7 @@ diff -r 14021dfc00f3 drivers/media/video
  /* Pinnacle Hybrid Pro eb1a:2881 */
  static struct em28xx_reg_seq pinnacle_hybrid_pro_analog[] = {
  	{EM28XX_R08_GPIO,	0xfd,   ~EM_GPIO_4,	10},
-@@ -1703,6 +1719,16 @@
+@@ -1649,6 +1665,16 @@ struct em28xx_board em28xx_boards[] = {
  		.tuner_gpio    = reddo_dvb_c_usb_box,
  		.has_dvb       = 1,
  	},
@@ -57,7 +65,7 @@ diff -r 14021dfc00f3 drivers/media/video
  };
  const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards);
  
-@@ -1826,6 +1852,8 @@
+@@ -1768,6 +1794,8 @@ struct usb_device_id em28xx_id_table[] = {
  			.driver_info = EM2820_BOARD_IODATA_GVMVP_SZ },
  	{ USB_DEVICE(0xeb1a, 0x50a6),
  			.driver_info = EM2860_BOARD_GADMEI_UTV330 },
@@ -66,9 +74,10 @@ diff -r 14021dfc00f3 drivers/media/video
  	{ },
  };
  MODULE_DEVICE_TABLE(usb, em28xx_id_table);
-diff -r 14021dfc00f3 drivers/media/video/em28xx/em28xx-dvb.c
---- a/drivers/media/video/em28xx/em28xx-dvb.c	Thu Feb 11 23:11:30 2010 -0200
-+++ b/drivers/media/video/em28xx/em28xx-dvb.c	Thu Feb 18 16:47:17 2010 -0500
+diff --git a/drivers/media/video/em28xx/em28xx-dvb.c b/drivers/media/video/em28xx/em28xx-dvb.c
+index bcd3c37..ce8a9ee 100644
+--- a/drivers/media/video/em28xx/em28xx-dvb.c
++++ b/drivers/media/video/em28xx/em28xx-dvb.c
 @@ -30,11 +30,13 @@
  #include "tuner-simple.h"
  
@@ -83,7 +92,7 @@ diff -r 14021dfc00f3 drivers/media/video
  
  MODULE_DESCRIPTION("driver for em28xx based DVB cards");
  MODULE_AUTHOR("Mauro Carvalho Chehab <mchehab at infradead.org>");
-@@ -231,6 +233,18 @@
+@@ -231,6 +233,18 @@ static struct lgdt330x_config em2880_lgdt3303_dev = {
  	.demod_chip = LGDT3303,
  };
  
@@ -102,7 +111,7 @@ diff -r 14021dfc00f3 drivers/media/video
  static struct zl10353_config em28xx_zl10353_with_xc3028 = {
  	.demod_address = (0x1e >> 1),
  	.no_tuner = 1,
-@@ -247,6 +261,17 @@
+@@ -247,6 +261,17 @@ static struct s5h1409_config em28xx_s5h1409_with_xc3028 = {
  	.mpeg_timing   = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK
  };
  
@@ -120,7 +129,7 @@ diff -r 14021dfc00f3 drivers/media/video
  static struct zl10353_config em28xx_zl10353_xc3028_no_i2c_gate = {
  	.demod_address = (0x1e >> 1),
  	.no_tuner = 1,
-@@ -569,6 +594,14 @@
+@@ -570,6 +595,14 @@ static int dvb_init(struct em28xx *dev)
  			}
  		}
  		break;
@@ -135,14 +144,18 @@ diff -r 14021dfc00f3 drivers/media/video
  	default:
  		em28xx_errdev("/2: The frontend of your DVB/ATSC card"
  				" isn't supported yet\n");
-diff -r 14021dfc00f3 drivers/media/video/em28xx/em28xx.h
---- a/drivers/media/video/em28xx/em28xx.h	Thu Feb 11 23:11:30 2010 -0200
-+++ b/drivers/media/video/em28xx/em28xx.h	Thu Feb 18 16:47:17 2010 -0500
+diff --git a/drivers/media/video/em28xx/em28xx.h b/drivers/media/video/em28xx/em28xx.h
+index ba6fe5d..9f3fdad 100644
+--- a/drivers/media/video/em28xx/em28xx.h
++++ b/drivers/media/video/em28xx/em28xx.h
 @@ -112,6 +112,7 @@
- #define EM2861_BOARD_GADMEI_UTV330PLUS           72
  #define EM2870_BOARD_REDDO_DVB_C_USB_BOX          73
  #define EM2800_BOARD_VC211A			  74
+ #define EM2882_BOARD_DIKOM_DK300		  75
 +#define EM2870_BOARD_KWORLD_A340		  76
  
  /* Limits minimum and default number of buffers */
  #define EM28XX_MIN_BUF 4
+-- 
+1.7.0.1
+

linux-2.6-v4l-dvb-gspca-fixes.patch:
 Documentation/video4linux/gspca.txt   |    1 
 b/Documentation/video4linux/gspca.txt |    4 
 b/drivers/media/video/gspca/Kconfig   |    6 
 b/drivers/media/video/gspca/ov534.c   |  100 ----
 b/drivers/media/video/gspca/sn9c20x.c |    6 
 b/drivers/media/video/gspca/sonixj.c  |  136 +++---
 b/drivers/media/video/gspca/vc032x.c  |  737 ++++++++++++++++++++++------------
 drivers/media/video/gspca/ov534.c     |  521 ++++++++++++++----------
 drivers/media/video/gspca/sn9c20x.c   |  322 +++++++-------
 drivers/media/video/gspca/sonixj.c    |  297 +++++++++++++
 drivers/media/video/gspca/spca561.c   |   58 +-
 11 files changed, 1358 insertions(+), 830 deletions(-)

Index: linux-2.6-v4l-dvb-gspca-fixes.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/linux-2.6-v4l-dvb-gspca-fixes.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- linux-2.6-v4l-dvb-gspca-fixes.patch	6 Apr 2010 09:06:57 -0000	1.2
+++ linux-2.6-v4l-dvb-gspca-fixes.patch	9 Jul 2010 09:09:24 -0000	1.3
@@ -73,8 +73,8 @@ index dce5ef8..d2a4902 100644
 -#include <linux/usb/input.h>
 +#ifdef CONFIG_INPUT
  #include <linux/input.h>
+ #include <linux/slab.h>
  #endif
- 
 @@ -54,6 +51,9 @@ MODULE_LICENSE("GPL");
  #define SENSOR_HV7131R	10
  #define SENSOR_MT9VPRB	20
@@ -108,7 +108,7 @@ index dce5ef8..d2a4902 100644
 -	struct gspca_dev *gspca_dev = (struct gspca_dev *)data;
 -	struct sd *sd = (struct sd *) gspca_dev;
 -
--	DECLARE_WAIT_QUEUE_HEAD(wait);
+-	DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wait);
 -	set_freezable();
 -	for (;;) {
 -		if (kthread_should_stop())
@@ -2295,139 +2295,6 @@ Signed-off-by: Hans de Goede <hdegoede at r
  };
  static const struct sd_desc *sd_desc[2] = {
  	&sd_desc_12a,
-
-gspca: make usb id 0461:0815 get handled by the right driver
-
-From: John Ellson <john.ellson at comcast.net>
-
-The 0461:0815 camera is spca561 based not spca508
-
-Priority: high
-
-Signed-off-by: John Ellson <john.ellson at comcast.net>
-Signed-off-by: Hans de Goede <hdegoede at redhat.com>
-
-diff -r 6687077521f7 -r 649d692c7bc1 linux/drivers/media/video/gspca/spca508.c
---- a/drivers/media/video/gspca/spca508.c	Thu Mar 11 10:12:39 2010 +0100
-+++ b/drivers/media/video/gspca/spca508.c	Wed Mar 17 14:22:58 2010 +0100
-@@ -1559,7 +1559,6 @@
- static const __devinitdata struct usb_device_id device_table[] = {
- 	{USB_DEVICE(0x0130, 0x0130), .driver_info = HamaUSBSightcam},
- 	{USB_DEVICE(0x041e, 0x4018), .driver_info = CreativeVista},
--	{USB_DEVICE(0x0461, 0x0815), .driver_info = MicroInnovationIC200},
- 	{USB_DEVICE(0x0733, 0x0110), .driver_info = ViewQuestVQ110},
- 	{USB_DEVICE(0x0af9, 0x0010), .driver_info = HamaUSBSightcam},
- 	{USB_DEVICE(0x0af9, 0x0011), .driver_info = HamaUSBSightcam2},
-diff -r 6687077521f7 -r 649d692c7bc1 linux/drivers/media/video/gspca/spca561.c
---- a/drivers/media/video/gspca/spca561.c	Thu Mar 11 10:12:39 2010 +0100
-+++ b/drivers/media/video/gspca/spca561.c	Wed Mar 17 14:22:58 2010 +0100
-@@ -1096,6 +1096,7 @@
- 	{USB_DEVICE(0x041e, 0x401a), .driver_info = Rev072A},
- 	{USB_DEVICE(0x041e, 0x403b), .driver_info = Rev012A},
- 	{USB_DEVICE(0x0458, 0x7004), .driver_info = Rev072A},
-+	{USB_DEVICE(0x0461, 0x0815), .driver_info = Rev072A},
- 	{USB_DEVICE(0x046d, 0x0928), .driver_info = Rev012A},
- 	{USB_DEVICE(0x046d, 0x0929), .driver_info = Rev012A},
- 	{USB_DEVICE(0x046d, 0x092a), .driver_info = Rev012A},
-From: Jean-François Moine <moinejf at free.fr>
-Date: Thu, 18 Feb 2010 07:12:06 +0000 (-0300)
-Subject: V4L/DVB: gspca - sonixj: Add vertical flip control for sensor hv7131r
-X-Git-Url: http://git.linuxtv.org/jfrancois/gspca.git?a=commitdiff_plain;h=f344792e0c1dd7e0029b7dd92612ff002646634e
-
-V4L/DVB: gspca - sonixj: Add vertical flip control for sensor hv7131r
-
-Signed-off-by: Jean-François Moine <moinejf at free.fr>
-Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
----
-
-diff --git a/drivers/media/video/gspca/sonixj.c b/drivers/media/video/gspca/sonixj.c
-index 4ece110..fea8075 100644
---- a/drivers/media/video/gspca/sonixj.c
-+++ b/drivers/media/video/gspca/sonixj.c
-@@ -282,7 +282,7 @@ static const struct ctrl sd_ctrls[] = {
- static __u32 ctrl_dis[] = {
- 	(1 << INFRARED_IDX) | (1 << VFLIP_IDX) | (1 << FREQ_IDX) |
- 			(1 << AUTOGAIN_IDX),	/* SENSOR_ADCM1700 0 */
--	(1 << INFRARED_IDX) | (1 << VFLIP_IDX) | (1 << FREQ_IDX),
-+	(1 << INFRARED_IDX) | (1 << FREQ_IDX),
- 						/* SENSOR_HV7131R 1 */
- 	(1 << INFRARED_IDX) | (1 << VFLIP_IDX) | (1 << FREQ_IDX),
- 						/* SENSOR_MI0360 2 */
-@@ -1780,23 +1780,34 @@ static void setautogain(struct gspca_dev *gspca_dev)
- 		sd->ag_cnt = -1;
- }
- 
--/* ov7630/ov7648 only */
-+/* hv7131r/ov7630/ov7648 only */
- static void setvflip(struct sd *sd)
- {
- 	u8 comn;
- 
- 	if (sd->gspca_dev.ctrl_dis & (1 << VFLIP_IDX))
- 		return;
--	if (sd->sensor == SENSOR_OV7630) {
-+	switch (sd->sensor) {
-+	case SENSOR_HV7131R:
-+		comn = 0x18;			/* clkdiv = 1, ablcen = 1 */
-+		if (sd->vflip)
-+			comn |= 0x01;
-+		i2c_w1(&sd->gspca_dev, 0x01, comn);	/* sctra */
-+		break;
-+	case SENSOR_OV7630:
- 		comn = 0x02;
- 		if (!sd->vflip)
- 			comn |= 0x80;
--	} else {
-+		i2c_w1(&sd->gspca_dev, 0x75, comn);
-+		break;
-+	default:
-+/*	case SENSOR_OV7648: */
- 		comn = 0x06;
- 		if (sd->vflip)
- 			comn |= 0x80;
-+		i2c_w1(&sd->gspca_dev, 0x75, comn);
-+		break;
- 	}
--	i2c_w1(&sd->gspca_dev, 0x75, comn);
- }
- 
- static void setsharpness(struct sd *sd)
-From: Jean-François Moine <moinejf at free.fr>
-Date: Thu, 18 Feb 2010 17:56:33 +0000 (-0300)
-Subject: V4L/DVB: gspca - sonixj: Set the vertical flip at capture start for all sensors
-X-Git-Url: http://git.linuxtv.org/jfrancois/gspca.git?a=commitdiff_plain;h=648399060d0e1dea17e6450e1cfa7629c5aa704b
-
-V4L/DVB: gspca - sonixj: Set the vertical flip at capture start for all sensors
-
-Signed-off-by: Jean-François Moine <moinejf at free.fr>
-Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
----
-
-diff --git a/drivers/media/video/gspca/sonixj.c b/drivers/media/video/gspca/sonixj.c
-index fea8075..2ccddcd 100644
---- a/drivers/media/video/gspca/sonixj.c
-+++ b/drivers/media/video/gspca/sonixj.c
-@@ -2082,7 +2082,6 @@ static int sd_start(struct gspca_dev *gspca_dev)
- 		reg17 = 0x64;		/* 640 MCKSIZE */
- 		break;
- 	case SENSOR_OV7630:
--		setvflip(sd);
- 		reg17 = 0xe2;
- 		reg1 = 0x44;
- 		break;
-@@ -2154,11 +2153,7 @@ static int sd_start(struct gspca_dev *gspca_dev)
- 	reg_w1(gspca_dev, 0x17, reg17);
- 	reg_w1(gspca_dev, 0x01, reg1);
- 
--	switch (sd->sensor) {
--	case SENSOR_OV7630:
--		setvflip(sd);
--		break;
--	}
-+	setvflip(sd);
- 	setbrightness(gspca_dev);
- 	setcontrast(gspca_dev);
- 	setautogain(gspca_dev);
 From: Jean-François Moine <moinejf at free.fr>
 Date: Wed, 17 Mar 2010 18:25:32 +0000 (-0300)
 Subject: V4L/DVB: gspca - sonixj: More static const and better array initialization

lirc-2.6.33.patch:
 drivers/input/Kconfig                 |    2 
 drivers/input/Makefile                |    2 
 drivers/input/lirc/Kconfig            |  116 +
 drivers/input/lirc/Makefile           |   21 
 drivers/input/lirc/lirc_bt829.c       |  383 +++++
 drivers/input/lirc/lirc_dev.c         |  736 ++++++++++
 drivers/input/lirc/lirc_dev.h         |  225 +++
 drivers/input/lirc/lirc_ene0100.c     |  646 +++++++++
 drivers/input/lirc/lirc_ene0100.h     |  169 ++
 drivers/input/lirc/lirc_i2c.c         |  536 +++++++
 drivers/input/lirc/lirc_igorplugusb.c |  556 +++++++
 drivers/input/lirc/lirc_imon.c        | 1054 ++++++++++++++
 drivers/input/lirc/lirc_it87.c        |  991 +++++++++++++
 drivers/input/lirc/lirc_it87.h        |  116 +
 drivers/input/lirc/lirc_ite8709.c     |  540 +++++++
 drivers/input/lirc/lirc_mceusb.c      | 1222 +++++++++++++++++
 drivers/input/lirc/lirc_parallel.c    |  709 +++++++++
 drivers/input/lirc/lirc_parallel.h    |   26 
 drivers/input/lirc/lirc_sasem.c       |  931 +++++++++++++
 drivers/input/lirc/lirc_serial.c      | 1317 ++++++++++++++++++
 drivers/input/lirc/lirc_sir.c         | 1283 +++++++++++++++++
 drivers/input/lirc/lirc_streamzap.c   |  794 +++++++++++
 drivers/input/lirc/lirc_ttusbir.c     |  397 +++++
 drivers/input/lirc/lirc_zilog.c       | 1396 +++++++++++++++++++
 drivers/input/misc/Kconfig            |   12 
 drivers/input/misc/Makefile           |    1 
 drivers/input/misc/imon.c             | 2430 ++++++++++++++++++++++++++++++++++
 include/linux/lirc.h                  |   94 +
 28 files changed, 16705 insertions(+)

View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.6 -r 1.7 lirc-2.6.33.patchIndex: lirc-2.6.33.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/lirc-2.6.33.patch,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- lirc-2.6.33.patch	5 Apr 2010 16:08:23 -0000	1.6
+++ lirc-2.6.33.patch	9 Jul 2010 09:09:24 -0000	1.7
@@ -1,64 +1,133 @@
-lirc drivers, 2010.04.05
-
-Generated against linus/master from the linux-2.6-lirc.git tree at
-http://git.kernel.org/?p=linux/kernel/git/jarod/linux-2.6-lirc.git;a=summary
-
-Also includes a pure input imon driver, which used to be part of lirc_imon...
-
-Signed-off-by: Jarod Wilson <jarod at redhat.com>
-
----
- MAINTAINERS                           |    9 +
+ include/linux/lirc.h                  |   94 ++
  drivers/input/Kconfig                 |    2 +
  drivers/input/Makefile                |    2 +
  drivers/input/lirc/Kconfig            |  116 ++
  drivers/input/lirc/Makefile           |   21 +
- drivers/input/lirc/lirc_bt829.c       |  383 +++++
- drivers/input/lirc/lirc_dev.c         |  850 +++++++++++
- drivers/input/lirc/lirc_dev.h         |  228 +++
+ drivers/input/lirc/lirc_bt829.c       |  383 ++++++
+ drivers/input/lirc/lirc_dev.c         |  736 ++++++++++
+ drivers/input/lirc/lirc_dev.h         |  225 +++
  drivers/input/lirc/lirc_ene0100.c     |  646 +++++++++
  drivers/input/lirc/lirc_ene0100.h     |  169 +++
- drivers/input/lirc/lirc_i2c.c         |  536 +++++++
- drivers/input/lirc/lirc_igorplugusb.c |  555 ++++++++
- drivers/input/lirc/lirc_imon.c        | 1053 ++++++++++++++
- drivers/input/lirc/lirc_it87.c        | 1021 +++++++++++++
+ drivers/input/lirc/lirc_i2c.c         |  536 ++++++++
+ drivers/input/lirc/lirc_igorplugusb.c |  556 ++++++++
+ drivers/input/lirc/lirc_imon.c        | 1054 ++++++++++++++
+ drivers/input/lirc/lirc_it87.c        |  991 ++++++++++++++
  drivers/input/lirc/lirc_it87.h        |  116 ++
- drivers/input/lirc/lirc_ite8709.c     |  540 +++++++
- drivers/input/lirc/lirc_mceusb.c      | 1385 ++++++++++++++++++
- drivers/input/lirc/lirc_parallel.c    |  709 +++++++++
+ drivers/input/lirc/lirc_ite8709.c     |  540 ++++++++
+ drivers/input/lirc/lirc_mceusb.c      | 1222 +++++++++++++++++
+ drivers/input/lirc/lirc_parallel.c    |  709 ++++++++++
  drivers/input/lirc/lirc_parallel.h    |   26 +
- drivers/input/lirc/lirc_sasem.c       |  931 ++++++++++++
- drivers/input/lirc/lirc_serial.c      | 1317 +++++++++++++++++
+ drivers/input/lirc/lirc_sasem.c       |  931 +++++++++++++
+ drivers/input/lirc/lirc_serial.c      | 1317 ++++++++++++++++++
  drivers/input/lirc/lirc_sir.c         | 1283 +++++++++++++++++
- drivers/input/lirc/lirc_streamzap.c   |  821 +++++++++++
+ drivers/input/lirc/lirc_streamzap.c   |  794 +++++++++++
  drivers/input/lirc/lirc_ttusbir.c     |  397 ++++++
- drivers/input/lirc/lirc_zilog.c       | 1388 ++++++++++++++++++
+ drivers/input/lirc/lirc_zilog.c       | 1396 +++++++++++++++++++
  drivers/input/misc/Kconfig            |   12 +
  drivers/input/misc/Makefile           |    1 +
- drivers/input/misc/imon.c             | 2523 +++++++++++++++++++++++++++++++++
- include/linux/lirc.h                  |  159 +++
- 29 files changed, 17199 insertions(+), 0 deletions(-)
+ drivers/input/misc/imon.c             | 2430 +++++++++++++++++++++++++++++++++
+ 28 files changed, 16705 insertions(+), 0 deletions(-)
 
-diff --git a/MAINTAINERS b/MAINTAINERS
-index 47cc449..ae38439 100644
---- a/MAINTAINERS
-+++ b/MAINTAINERS
-@@ -3427,6 +3427,15 @@ F:	arch/powerpc/platforms/pasemi/
- F:	drivers/*/*pasemi*
- F:	drivers/*/*/*pasemi*
- 
-+LINUX INFRARED REMOTE CONTROL DRIVERS (LIRC)
-+P:	Jarod Wilson
-+M:	jarod at redhat.com
-+P:	Christoph Bartelmus
-+M:	lirc at bartelmus.de
-+W:	http://www.lirc.org/
-+L:	lirc-list at lists.sourceforge.net
-+S:	Maintained
-+
- LINUX SECURITY MODULE (LSM) FRAMEWORK
- M:	Chris Wright <chrisw at sous-sol.org>
- L:	linux-security-module at vger.kernel.org
+diff --git a/include/linux/lirc.h b/include/linux/lirc.h
+new file mode 100644
+index 0000000..8ae64fa
+--- /dev/null
++++ b/include/linux/lirc.h
+@@ -0,0 +1,94 @@
++/*
++ * lirc.h - linux infrared remote control header file
++ * last modified 2007/09/27
++ */
++
++#ifndef _LINUX_LIRC_H
++#define _LINUX_LIRC_H
++
++#include <linux/types.h>
++#include <linux/ioctl.h>
++
++#define PULSE_BIT  0x01000000
++#define PULSE_MASK 0x00FFFFFF
++
++/*** lirc compatible hardware features ***/
++
++#define LIRC_MODE2SEND(x) (x)
++#define LIRC_SEND2MODE(x) (x)
++#define LIRC_MODE2REC(x) ((x) << 16)
++#define LIRC_REC2MODE(x) ((x) >> 16)
++
++#define LIRC_MODE_RAW                  0x00000001
++#define LIRC_MODE_PULSE                0x00000002
++#define LIRC_MODE_MODE2                0x00000004
++#define LIRC_MODE_LIRCCODE             0x00000010
++
++
++#define LIRC_CAN_SEND_RAW              LIRC_MODE2SEND(LIRC_MODE_RAW)
++#define LIRC_CAN_SEND_PULSE            LIRC_MODE2SEND(LIRC_MODE_PULSE)
++#define LIRC_CAN_SEND_MODE2            LIRC_MODE2SEND(LIRC_MODE_MODE2)
++#define LIRC_CAN_SEND_LIRCCODE         LIRC_MODE2SEND(LIRC_MODE_LIRCCODE)
++
++#define LIRC_CAN_SEND_MASK             0x0000003f
++
++#define LIRC_CAN_SET_SEND_CARRIER      0x00000100
++#define LIRC_CAN_SET_SEND_DUTY_CYCLE   0x00000200
++#define LIRC_CAN_SET_TRANSMITTER_MASK  0x00000400
++
++#define LIRC_CAN_REC_RAW               LIRC_MODE2REC(LIRC_MODE_RAW)
++#define LIRC_CAN_REC_PULSE             LIRC_MODE2REC(LIRC_MODE_PULSE)
++#define LIRC_CAN_REC_MODE2             LIRC_MODE2REC(LIRC_MODE_MODE2)
++#define LIRC_CAN_REC_LIRCCODE          LIRC_MODE2REC(LIRC_MODE_LIRCCODE)
++
++#define LIRC_CAN_REC_MASK              LIRC_MODE2REC(LIRC_CAN_SEND_MASK)
++
++#define LIRC_CAN_SET_REC_CARRIER       (LIRC_CAN_SET_SEND_CARRIER << 16)
++#define LIRC_CAN_SET_REC_DUTY_CYCLE    (LIRC_CAN_SET_SEND_DUTY_CYCLE << 16)
++
++#define LIRC_CAN_SET_REC_DUTY_CYCLE_RANGE 0x40000000
++#define LIRC_CAN_SET_REC_CARRIER_RANGE    0x80000000
++#define LIRC_CAN_GET_REC_RESOLUTION       0x20000000
++
++#define LIRC_CAN_SEND(x) ((x)&LIRC_CAN_SEND_MASK)
++#define LIRC_CAN_REC(x) ((x)&LIRC_CAN_REC_MASK)
++
++#define LIRC_CAN_NOTIFY_DECODE            0x01000000
++
++/*** IOCTL commands for lirc driver ***/
++
++#define LIRC_GET_FEATURES              _IOR('i', 0x00000000, uint64_t)
++
++#define LIRC_GET_SEND_MODE             _IOR('i', 0x00000001, uint64_t)
++#define LIRC_GET_REC_MODE              _IOR('i', 0x00000002, uint64_t)
++#define LIRC_GET_SEND_CARRIER          _IOR('i', 0x00000003, uint32_t)
++#define LIRC_GET_REC_CARRIER           _IOR('i', 0x00000004, uint32_t)
++#define LIRC_GET_SEND_DUTY_CYCLE       _IOR('i', 0x00000005, uint32_t)
++#define LIRC_GET_REC_DUTY_CYCLE        _IOR('i', 0x00000006, uint32_t)
++#define LIRC_GET_REC_RESOLUTION        _IOR('i', 0x00000007, uint32_t)
++
++/* code length in bits, currently only for LIRC_MODE_LIRCCODE */
++#define LIRC_GET_LENGTH                _IOR('i', 0x0000000f, uint64_t)
++
++#define LIRC_SET_SEND_MODE             _IOW('i', 0x00000011, uint64_t)
++#define LIRC_SET_REC_MODE              _IOW('i', 0x00000012, uint64_t)
++/* Note: these can reset the according pulse_width */
++#define LIRC_SET_SEND_CARRIER          _IOW('i', 0x00000013, uint32_t)
++#define LIRC_SET_REC_CARRIER           _IOW('i', 0x00000014, uint32_t)
++#define LIRC_SET_SEND_DUTY_CYCLE       _IOW('i', 0x00000015, uint32_t)
++#define LIRC_SET_REC_DUTY_CYCLE        _IOW('i', 0x00000016, uint32_t)
++#define LIRC_SET_TRANSMITTER_MASK      _IOW('i', 0x00000017, uint32_t)
++
++/*
++ * to set a range use
++ * LIRC_SET_REC_DUTY_CYCLE_RANGE/LIRC_SET_REC_CARRIER_RANGE with the
++ * lower bound first and later
++ * LIRC_SET_REC_DUTY_CYCLE/LIRC_SET_REC_CARRIER with the upper bound
++ */
++
++#define LIRC_SET_REC_DUTY_CYCLE_RANGE  _IOW('i', 0x0000001e, uint32_t)
++#define LIRC_SET_REC_CARRIER_RANGE     _IOW('i', 0x0000001f, uint32_t)
++
++#define LIRC_NOTIFY_DECODE             _IO('i', 0x00000020)
++
++#endif
 diff --git a/drivers/input/Kconfig b/drivers/input/Kconfig
 index 07c2cd4..ebc8743 100644
 --- a/drivers/input/Kconfig
@@ -622,10 +691,10 @@ index 0000000..0485884
 +MODULE_PARM_DESC(debug, "Debug enabled or not");
 diff --git a/drivers/input/lirc/lirc_dev.c b/drivers/input/lirc/lirc_dev.c
 new file mode 100644
-index 0000000..cd5d75a
+index 0000000..504e122
 --- /dev/null
 +++ b/drivers/input/lirc/lirc_dev.c
-@@ -0,0 +1,850 @@
+@@ -0,0 +1,736 @@
[...1662 lines suppressed...]
@@ -16610,6 +16249,9 @@ index 0000000..58a2130
 +	if (!ictx)
 +		return;
 +
++	buf = urb->transfer_buffer;
++	len = urb->actual_length;
++
 +	switch (urb->status) {
 +	case -ENOENT:		/* usbcore unlink successful! */
 +		return;
@@ -16863,6 +16505,12 @@ index 0000000..58a2130
 +
 +	mutex_lock(&ictx->lock);
 +
++	if (ir_protocol == IMON_IR_PROTOCOL_MCE) {
++		init_timer(&ictx->itimer);
++		ictx->itimer.data = (unsigned long)ictx;
++		ictx->itimer.function = imon_mce_timeout;
++	}
++
 +	ictx->dev = dev;
 +	ictx->usbdev_intf0 = usb_get_dev(interface_to_usbdev(intf));
 +	ictx->dev_present_intf0 = 1;
@@ -17079,6 +16727,7 @@ index 0000000..58a2130
 +	first_if = usb_ifnum_to_if(usbdev, 0);
 +	first_if_ctx = (struct imon_context *)usb_get_intfdata(first_if);
 +
++
 +	if (ifnum == 0) {
 +		ictx = imon_init_intf0(interface);
 +		if (!ictx) {
@@ -17267,168 +16916,3 @@ index 0000000..58a2130
 +
 +module_init(imon_init);
 +module_exit(imon_exit);
-diff --git a/include/linux/lirc.h b/include/linux/lirc.h
-new file mode 100644
-index 0000000..9ca6876
---- /dev/null
-+++ b/include/linux/lirc.h
-@@ -0,0 +1,159 @@
-+/*
-+ * lirc.h - linux infrared remote control header file
-+ * last modified 2007/09/27
-+ */
-+
-+#ifndef _LINUX_LIRC_H
-+#define _LINUX_LIRC_H
-+
-+#include <linux/types.h>
-+#include <linux/ioctl.h>
-+
-+/* <obsolete> */
-+#define PULSE_BIT       0x01000000
-+#define PULSE_MASK      0x00FFFFFF
-+/* </obsolete> */
-+
-+#define LIRC_MODE2_SPACE     0x00000000
-+#define LIRC_MODE2_PULSE     0x01000000
-+#define LIRC_MODE2_FREQUENCY 0x02000000
-+#define LIRC_MODE2_TIMEOUT   0x03000000
-+
-+#define LIRC_VALUE_MASK      0x00FFFFFF
-+#define LIRC_MODE2_MASK      0xFF000000
-+
-+#define LIRC_SPACE(val) (((val)&LIRC_VALUE_MASK) | LIRC_MODE2_SPACE)
-+#define LIRC_PULSE(val) (((val)&LIRC_VALUE_MASK) | LIRC_MODE2_PULSE)
-+#define LIRC_FREQUENCY(val) (((val)&LIRC_VALUE_MASK) | LIRC_MODE2_FREQUENCY)
-+#define LIRC_TIMEOUT(val) (((val)&LIRC_VALUE_MASK) | LIRC_MODE2_TIMEOUT)
-+
-+#define LIRC_VALUE(val) ((val)&LIRC_VALUE_MASK)
-+#define LIRC_MODE2(val) ((val)&LIRC_MODE2_MASK)
-+
-+#define LIRC_IS_SPACE(val) (LIRC_MODE2(val) == LIRC_MODE2_SPACE)
-+#define LIRC_IS_PULSE(val) (LIRC_MODE2(val) == LIRC_MODE2_PULSE)
-+#define LIRC_IS_FREQUENCY(val) (LIRC_MODE2(val) == LIRC_MODE2_FREQUENCY)
-+#define LIRC_IS_TIMEOUT(val) (LIRC_MODE2(val) == LIRC_MODE2_TIMEOUT)
-+
-+/*** lirc compatible hardware features ***/
-+
-+#define LIRC_MODE2SEND(x) (x)
-+#define LIRC_SEND2MODE(x) (x)
-+#define LIRC_MODE2REC(x) ((x) << 16)
-+#define LIRC_REC2MODE(x) ((x) >> 16)
-+
-+#define LIRC_MODE_RAW                  0x00000001
-+#define LIRC_MODE_PULSE                0x00000002
-+#define LIRC_MODE_MODE2                0x00000004
-+#define LIRC_MODE_LIRCCODE             0x00000010
-+
-+
-+#define LIRC_CAN_SEND_RAW              LIRC_MODE2SEND(LIRC_MODE_RAW)
-+#define LIRC_CAN_SEND_PULSE            LIRC_MODE2SEND(LIRC_MODE_PULSE)
-+#define LIRC_CAN_SEND_MODE2            LIRC_MODE2SEND(LIRC_MODE_MODE2)
-+#define LIRC_CAN_SEND_LIRCCODE         LIRC_MODE2SEND(LIRC_MODE_LIRCCODE)
-+
-+#define LIRC_CAN_SEND_MASK             0x0000003f
-+
-+#define LIRC_CAN_SET_SEND_CARRIER      0x00000100
-+#define LIRC_CAN_SET_SEND_DUTY_CYCLE   0x00000200
-+#define LIRC_CAN_SET_TRANSMITTER_MASK  0x00000400
-+
-+#define LIRC_CAN_REC_RAW               LIRC_MODE2REC(LIRC_MODE_RAW)
-+#define LIRC_CAN_REC_PULSE             LIRC_MODE2REC(LIRC_MODE_PULSE)
-+#define LIRC_CAN_REC_MODE2             LIRC_MODE2REC(LIRC_MODE_MODE2)
-+#define LIRC_CAN_REC_LIRCCODE          LIRC_MODE2REC(LIRC_MODE_LIRCCODE)
-+
-+#define LIRC_CAN_REC_MASK              LIRC_MODE2REC(LIRC_CAN_SEND_MASK)
-+
-+#define LIRC_CAN_SET_REC_CARRIER       (LIRC_CAN_SET_SEND_CARRIER << 16)
-+#define LIRC_CAN_SET_REC_DUTY_CYCLE    (LIRC_CAN_SET_SEND_DUTY_CYCLE << 16)
-+
-+#define LIRC_CAN_SET_REC_DUTY_CYCLE_RANGE 0x40000000
-+#define LIRC_CAN_SET_REC_CARRIER_RANGE    0x80000000
-+#define LIRC_CAN_GET_REC_RESOLUTION       0x20000000
-+#define LIRC_CAN_SET_REC_TIMEOUT          0x10000000
-+#define LIRC_CAN_SET_REC_FILTER           0x08000000
-+
-+#define LIRC_CAN_MEASURE_CARRIER          0x02000000
-+
-+#define LIRC_CAN_SEND(x) ((x)&LIRC_CAN_SEND_MASK)
-+#define LIRC_CAN_REC(x) ((x)&LIRC_CAN_REC_MASK)
-+
-+#define LIRC_CAN_NOTIFY_DECODE            0x01000000
-+
-+/*** IOCTL commands for lirc driver ***/
-+
-+#define LIRC_GET_FEATURES              _IOR('i', 0x00000000, unsigned long)
-+
-+#define LIRC_GET_SEND_MODE             _IOR('i', 0x00000001, unsigned long)
-+#define LIRC_GET_REC_MODE              _IOR('i', 0x00000002, unsigned long)
-+#define LIRC_GET_SEND_CARRIER          _IOR('i', 0x00000003, unsigned int)
-+#define LIRC_GET_REC_CARRIER           _IOR('i', 0x00000004, unsigned int)
-+#define LIRC_GET_SEND_DUTY_CYCLE       _IOR('i', 0x00000005, unsigned int)
-+#define LIRC_GET_REC_DUTY_CYCLE        _IOR('i', 0x00000006, unsigned int)
-+#define LIRC_GET_REC_RESOLUTION        _IOR('i', 0x00000007, unsigned int)
-+
-+#define LIRC_GET_MIN_TIMEOUT           _IOR('i', 0x00000008, uint32_t)
-+#define LIRC_GET_MAX_TIMEOUT           _IOR('i', 0x00000009, uint32_t)
-+
-+#define LIRC_GET_MIN_FILTER_PULSE      _IOR('i', 0x0000000a, uint32_t)
-+#define LIRC_GET_MAX_FILTER_PULSE      _IOR('i', 0x0000000b, uint32_t)
-+#define LIRC_GET_MIN_FILTER_SPACE      _IOR('i', 0x0000000c, uint32_t)
-+#define LIRC_GET_MAX_FILTER_SPACE      _IOR('i', 0x0000000d, uint32_t)
-+
-+/* code length in bits, currently only for LIRC_MODE_LIRCCODE */
-+#define LIRC_GET_LENGTH                _IOR('i', 0x0000000f, unsigned long)
-+
-+#define LIRC_SET_SEND_MODE             _IOW('i', 0x00000011, unsigned long)
-+#define LIRC_SET_REC_MODE              _IOW('i', 0x00000012, unsigned long)
-+/* Note: these can reset the according pulse_width */
-+#define LIRC_SET_SEND_CARRIER          _IOW('i', 0x00000013, unsigned int)
-+#define LIRC_SET_REC_CARRIER           _IOW('i', 0x00000014, unsigned int)
-+#define LIRC_SET_SEND_DUTY_CYCLE       _IOW('i', 0x00000015, unsigned int)
-+#define LIRC_SET_REC_DUTY_CYCLE        _IOW('i', 0x00000016, unsigned int)
-+#define LIRC_SET_TRANSMITTER_MASK      _IOW('i', 0x00000017, unsigned int)
-+
-+/*
-+ * when a timeout != 0 is set the driver will send a
-+ * LIRC_MODE2_TIMEOUT data packet, otherwise LIRC_MODE2_TIMEOUT is
-+ * never sent, timeout is disabled by default
-+ */
-+#define LIRC_SET_REC_TIMEOUT           _IOW('i', 0x00000018, uint32_t)
-+
-+/*
-+ * pulses shorter than this are filtered out by hardware (software
-+ * emulation in lirc_dev?)
-+ */
-+#define LIRC_SET_REC_FILTER_PULSE      _IOW('i', 0x00000019, uint32_t)
-+/*
-+ * spaces shorter than this are filtered out by hardware (software
-+ * emulation in lirc_dev?)
-+ */
-+#define LIRC_SET_REC_FILTER_SPACE      _IOW('i', 0x0000001a, uint32_t)
-+/*
-+ * if filter cannot be set independantly for pulse/space, this should
-+ * be used
-+ */
-+#define LIRC_SET_REC_FILTER            _IOW('i', 0x0000001b, uint32_t)
-+
-+/*
-+ * to set a range use
-+ * LIRC_SET_REC_DUTY_CYCLE_RANGE/LIRC_SET_REC_CARRIER_RANGE with the
-+ * lower bound first and later
-+ * LIRC_SET_REC_DUTY_CYCLE/LIRC_SET_REC_CARRIER with the upper bound
-+ */
-+
-+#define LIRC_SET_REC_DUTY_CYCLE_RANGE  _IOW('i', 0x0000001e, unsigned int)
-+#define LIRC_SET_REC_CARRIER_RANGE     _IOW('i', 0x0000001f, unsigned int)
-+
-+#define LIRC_NOTIFY_DECODE             _IO('i', 0x00000020)
-+
-+/*
-+ * from the next key press on the driver will send
-+ * LIRC_MODE2_FREQUENCY packets
-+ */
-+#define LIRC_MEASURE_CARRIER_ENABLE    _IO('i', 0x00000021)
-+#define LIRC_MEASURE_CARRIER_DISABLE   _IO('i', 0x00000022)
-+
-+#endif

mac80211-do-not-wipe-out-old-supported-rates.patch:
 scan.c |   22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

Index: mac80211-do-not-wipe-out-old-supported-rates.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/mac80211-do-not-wipe-out-old-supported-rates.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- mac80211-do-not-wipe-out-old-supported-rates.patch	13 Jun 2010 12:29:40 -0000	1.1
+++ mac80211-do-not-wipe-out-old-supported-rates.patch	9 Jul 2010 09:09:24 -0000	1.2
@@ -1,34 +1,35 @@
 From: Stanislaw Gruszka <sgruszka at redhat.com>
 To: kernel at lists.fedoraproject.org, "John W. Linville" <linville at redhat.com>
-Subject: [PATCH 3/4 2.6.33.y] mac80211: do not wip out old supported rates
-Date: Fri, 11 Jun 2010 17:04:19 +0200
+Subject: [PATCH 3/4 2.6.34.y] mac80211: do not wip out old supported rates
+Date: Fri, 11 Jun 2010 17:05:13 +0200
 
 commit f0b058b61711ebf5be94d6865ca7b2c259b71d37 upstream.
 
-Use old supported rates, if some buggy AP do not provide
-supported rates information element in managment frame.
+Use old supported rates, if AP do not provide supported rates
+information element in a new managment frame.
 
 Signed-off-by: Stanislaw Gruszka <sgruszka at redhat.com>
+Signed-off-by: John W. Linville <linville at tuxdriver.com>
 ---
  net/mac80211/scan.c |   21 +++++++++++----------
  1 files changed, 11 insertions(+), 10 deletions(-)
 
 diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
-index bc17cf7..697dc54 100644
+index 85507bd..151d933 100644
 --- a/net/mac80211/scan.c
 +++ b/net/mac80211/scan.c
-@@ -60,7 +60,7 @@ ieee80211_bss_info_update(struct ieee80211_local *local,
- 			  bool beacon)
+@@ -83,7 +83,7 @@ ieee80211_bss_info_update(struct ieee80211_local *local,
  {
+ 	struct cfg80211_bss *cbss;
  	struct ieee80211_bss *bss;
 -	int clen;
 +	int clen, srlen;
  	s32 signal = 0;
  
  	if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM)
-@@ -92,23 +92,24 @@ ieee80211_bss_info_update(struct ieee80211_local *local,
- 	if (bss->dtim_period == 0)
- 		bss->dtim_period = 1;
+@@ -112,23 +112,24 @@ ieee80211_bss_info_update(struct ieee80211_local *local,
+ 		bss->dtim_period = tim_ie->dtim_period;
+ 	}
  
 -	bss->supp_rates_len = 0;
 +	/* replace old supported rates if we get new values */
@@ -59,7 +60,7 @@ index bc17cf7..697dc54 100644
 +		bss->supp_rates_len = srlen;
  
  	bss->wmm_used = elems->wmm_param || elems->wmm_info;
- 
+ 	bss->uapsd_supported = is_uapsd_supported(elems);
 -- 
 1.6.2.5
 

mac80211-explicitly-disable-enable-QoS.patch:
 include/net/mac80211.h |    5 +++++
 net/mac80211/mlme.c    |    9 ++++++++-
 net/mac80211/util.c    |    6 +++++-
 3 files changed, 18 insertions(+), 2 deletions(-)

Index: mac80211-explicitly-disable-enable-QoS.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/mac80211-explicitly-disable-enable-QoS.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- mac80211-explicitly-disable-enable-QoS.patch	13 Jun 2010 12:29:40 -0000	1.1
+++ mac80211-explicitly-disable-enable-QoS.patch	9 Jul 2010 09:09:24 -0000	1.2
@@ -1,7 +1,7 @@
 From: Stanislaw Gruszka <sgruszka at redhat.com>
 To: kernel at lists.fedoraproject.org, "John W. Linville" <linville at redhat.com>
-Subject: [PATCH 1/4 2.6.33.y] mac80211: explicitly disable/enable QoS
-Date: Fri, 11 Jun 2010 17:04:17 +0200
+Subject: [PATCH 1/4 2.6.34.y] mac80211: explicitly disable/enable QoS
+Date: Fri, 11 Jun 2010 17:05:11 +0200
 
 commit e1b3ec1a2a336c328c336cfa5485a5f0484cc90d upstream.
 
@@ -11,6 +11,7 @@ Disabling is needed for some APs, which 
 we should send QoS frames to them.
 
 Signed-off-by: Stanislaw Gruszka <sgruszka at redhat.com>
+Signed-off-by: John W. Linville <linville at tuxdriver.com>
 ---
  include/net/mac80211.h |    5 +++++
  net/mac80211/mlme.c    |    9 ++++++++-
@@ -18,10 +19,10 @@ Signed-off-by: Stanislaw Gruszka <sgrusz
  3 files changed, 18 insertions(+), 1 deletions(-)
 
 diff --git a/include/net/mac80211.h b/include/net/mac80211.h
-index f39b303..8c1f0ee 100644
+index 45d7d44..ea607d6 100644
 --- a/include/net/mac80211.h
 +++ b/include/net/mac80211.h
-@@ -577,11 +577,15 @@ struct ieee80211_rx_status {
+@@ -580,11 +580,15 @@ struct ieee80211_rx_status {
   *	may turn the device off as much as possible. Typically, this flag will
   *	be set when an interface is set UP but not associated or scanning, but
   *	it can also be unset in that case when monitor interfaces are active.
@@ -37,7 +38,7 @@ index f39b303..8c1f0ee 100644
  };
  
  
-@@ -604,6 +608,7 @@ enum ieee80211_conf_changed {
+@@ -609,6 +613,7 @@ enum ieee80211_conf_changed {
  	IEEE80211_CONF_CHANGE_CHANNEL		= BIT(6),
  	IEEE80211_CONF_CHANGE_RETRY_LIMITS	= BIT(7),
  	IEEE80211_CONF_CHANGE_IDLE		= BIT(8),
@@ -46,22 +47,22 @@ index f39b303..8c1f0ee 100644
  
  /**
 diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
-index 1a209ac..950088d 100644
+index 875c8de..1b80e2b 100644
 --- a/net/mac80211/mlme.c
 +++ b/net/mac80211/mlme.c
-@@ -798,6 +798,9 @@ static void ieee80211_sta_wmm_params(struct ieee80211_local *local,
+@@ -592,6 +592,9 @@ static void ieee80211_sta_wmm_params(struct ieee80211_local *local,
  	int count;
- 	u8 *pos;
+ 	u8 *pos, uapsd_queues = 0;
  
 +	if (!local->ops->conf_tx)
 +		return;
 +
- 	if (!(ifmgd->flags & IEEE80211_STA_WMM_ENABLED))
+ 	if (local->hw.queues < 4)
  		return;
  
-@@ -856,11 +859,15 @@ static void ieee80211_sta_wmm_params(struct ieee80211_local *local,
- 		       wiphy_name(local->hw.wiphy), queue, aci, acm,
- 		       params.aifs, params.cw_min, params.cw_max, params.txop);
+@@ -666,11 +669,15 @@ static void ieee80211_sta_wmm_params(struct ieee80211_local *local,
+ 		       params.aifs, params.cw_min, params.cw_max, params.txop,
+ 		       params.uapsd);
  #endif
 -		if (drv_conf_tx(local, queue, &params) && local->ops->conf_tx)
 +		if (drv_conf_tx(local, queue, &params))
@@ -77,10 +78,10 @@ index 1a209ac..950088d 100644
  
  static u32 ieee80211_handle_bss_capability(struct ieee80211_sub_if_data *sdata,
 diff --git a/net/mac80211/util.c b/net/mac80211/util.c
-index 27212e8..9e35dcb 100644
+index 53af570..582f43a 100644
 --- a/net/mac80211/util.c
 +++ b/net/mac80211/util.c
-@@ -795,6 +795,11 @@ void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata)
+@@ -796,6 +796,11 @@ void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata)
  
  		drv_conf_tx(local, queue, &qparam);
  	}

mac80211-fix-supported-rates-IE-if-AP-doesnt-give-us-its-rates.patch:
 work.c |   29 +++++++++++++++++++----------
 1 file changed, 19 insertions(+), 10 deletions(-)

Index: mac80211-fix-supported-rates-IE-if-AP-doesnt-give-us-its-rates.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/mac80211-fix-supported-rates-IE-if-AP-doesnt-give-us-its-rates.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- mac80211-fix-supported-rates-IE-if-AP-doesnt-give-us-its-rates.patch	13 Jun 2010 12:29:40 -0000	1.1
+++ mac80211-fix-supported-rates-IE-if-AP-doesnt-give-us-its-rates.patch	9 Jul 2010 09:09:24 -0000	1.2
@@ -1,118 +1,61 @@
-Return-path: <kernel-bounces at lists.fedoraproject.org>
-X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on
-	bombadil.infradead.org
-X-Spam-Level: 
-X-Spam-Status: No, score=-0.0 required=5.0 tests=T_RP_MATCHES_RCVD
-	autolearn=ham version=3.3.1
-Envelope-to: kyle at mcmartin.ca
-Delivery-date: Fri, 11 Jun 2010 15:05:50 +0000
-Received: from bastion02.fedoraproject.org ([209.132.181.3] helo=bastion.fedoraproject.org)
-	by bombadil.infradead.org with esmtp (Exim 4.72 #1 (Red Hat Linux))
-	id 1ON5np-0006qq-A4
-	for kyle at mcmartin.ca; Fri, 11 Jun 2010 15:05:50 +0000
-Received: from lists.fedoraproject.org (collab1.vpn.fedoraproject.org [192.168.1.21])
-	by bastion02.phx2.fedoraproject.org (Postfix) with ESMTP id C8AFE110FA4;
-	Fri, 11 Jun 2010 15:05:48 +0000 (UTC)
-Received: from collab1.fedoraproject.org (localhost.localdomain [127.0.0.1])
-	by lists.fedoraproject.org (Postfix) with ESMTP id 7CD7932677B;
-	Fri, 11 Jun 2010 15:05:48 +0000 (UTC)
-X-Original-To: kernel at lists.fedoraproject.org
-Delivered-To: kernel at lists.fedoraproject.org
-Received: from smtp-mm2.fedoraproject.org (smtp-mm2.fedoraproject.org
-	[66.35.62.164])
-	by lists.fedoraproject.org (Postfix) with ESMTP id EBB823267E8
-	for <kernel at lists.fedoraproject.org>;
-	Fri, 11 Jun 2010 15:05:45 +0000 (UTC)
-Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28])
-	by smtp-mm2.fedoraproject.org (Postfix) with ESMTP id 5F31DE71E6
-	for <kernel at lists.fedoraproject.org>;
-	Fri, 11 Jun 2010 15:05:45 +0000 (UTC)
-Received: from int-mx01.intmail.prod.int.phx2.redhat.com
-	(int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11])
-	by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o5BF5ifi002333
-	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK)
-	for <kernel at lists.fedoraproject.org>; Fri, 11 Jun 2010 11:05:45 -0400
-Received: from localhost (vpn-10-251.rdu.redhat.com [10.11.10.251])
-	by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP
-	id o5BF5h8Z029086; Fri, 11 Jun 2010 11:05:44 -0400
 From: Stanislaw Gruszka <sgruszka at redhat.com>
 To: kernel at lists.fedoraproject.org, "John W. Linville" <linville at redhat.com>
-Subject: [PATCH 4/4 2.6.33.y] mac80211: fix supported rates IE if AP doesn't
+Subject: [PATCH 4/4 2.6.34.y] mac80211: fix supported rates IE if AP doesn't
 	give us it's rates
-Date: Fri, 11 Jun 2010 17:04:20 +0200
-Message-Id: <1276268660-18830-4-git-send-email-sgruszka at redhat.com>
-In-Reply-To: <1276268660-18830-3-git-send-email-sgruszka at redhat.com>
-References: <1276268660-18830-1-git-send-email-sgruszka at redhat.com>
-	<1276268660-18830-2-git-send-email-sgruszka at redhat.com>
-	<1276268660-18830-3-git-send-email-sgruszka at redhat.com>
-X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11
-Cc: Stanislaw Gruszka <sgruszka at redhat.com>
-X-BeenThere: kernel at lists.fedoraproject.org
-X-Mailman-Version: 2.1.9
-Precedence: list
-List-Id: "Fedora kernel development." <kernel.lists.fedoraproject.org>
-List-Unsubscribe: <https://admin.fedoraproject.org/mailman/listinfo/kernel>,
-	<mailto:kernel-request at lists.fedoraproject.org?subject=unsubscribe>
-List-Archive: <http://lists.fedoraproject.org/pipermail/kernel>
-List-Post: <mailto:kernel at lists.fedoraproject.org>
-List-Help: <mailto:kernel-request at lists.fedoraproject.org?subject=help>
-List-Subscribe: <https://admin.fedoraproject.org/mailman/listinfo/kernel>,
-	<mailto:kernel-request at lists.fedoraproject.org?subject=subscribe>
-MIME-Version: 1.0
-Content-Type: text/plain; charset="us-ascii"
-Content-Transfer-Encoding: 7bit
-Sender: kernel-bounces at lists.fedoraproject.org
-Errors-To: kernel-bounces at lists.fedoraproject.org
-X-CRM114-Version: 20090807-BlameThorstenAndJenny ( TRE 0.7.6 (BSD) ) MR-646709E3 
-X-CRM114-CacheID: sfid-20100611_110549_564657_0ED6FEC7 
-X-CRM114-Status: GOOD (  17.72  )
-Content-Length: 1846
+Date: Fri, 11 Jun 2010 17:05:14 +0200
 
 commit 76f273640134f3eb8257179cd5b3bc6ba5fe4a96 upstream.
 
 If AP do not provide us supported rates before assiociation, send
 all rates we are supporting instead of empty information element.
 
+v1 -> v2: Add comment.
+
 Signed-off-by: Stanislaw Gruszka <sgruszka at redhat.com>
+Signed-off-by: John W. Linville <linville at tuxdriver.com>
 ---
- net/mac80211/mlme.c |   17 +++++++++++------
- 1 files changed, 11 insertions(+), 6 deletions(-)
+ net/mac80211/work.c |   28 +++++++++++++++++++---------
+ 1 files changed, 19 insertions(+), 9 deletions(-)
 
-diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
-index 950088d..aa90100 100644
---- a/net/mac80211/mlme.c
-+++ b/net/mac80211/mlme.c
-@@ -270,12 +270,6 @@ static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata,
- 	if (wk->bss->wmm_used)
- 		wmm = 1;
+diff --git a/net/mac80211/work.c b/net/mac80211/work.c
+index 15e1ba9..949c2d1 100644
+--- a/net/mac80211/work.c
++++ b/net/mac80211/work.c
+@@ -213,15 +213,25 @@ static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata,
+ 
+ 	sband = local->hw.wiphy->bands[wk->chan->band];
  
--	/* get all rates supported by the device and the AP as
+-	/*
+-	 * Get all rates supported by the device and the AP as
 -	 * some APs don't like getting a superset of their rates
 -	 * in the association request (e.g. D-Link DAP 1353 in
--	 * b-only mode) */
--	rates_len = ieee80211_compatible_rates(wk->bss, sband, &rates);
--
- 	if ((wk->bss->cbss.capability & WLAN_CAPABILITY_SPECTRUM_MGMT) &&
- 	    (local->hw.flags & IEEE80211_HW_SPECTRUM_MGMT))
- 		capab |= WLAN_CAPABILITY_SPECTRUM_MGMT;
-@@ -310,6 +304,17 @@ static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata,
- 	*pos++ = wk->ssid_len;
- 	memcpy(pos, wk->ssid, wk->ssid_len);
- 
-+	if (wk->bss->supp_rates_len) {
-+		/* get all rates supported by the device and the AP as
+-	 * b-only mode)...
+-	 */
+-	rates_len = ieee80211_compatible_rates(wk->assoc.supp_rates,
+-					       wk->assoc.supp_rates_len,
+-					       sband, &rates);
++	if (wk->assoc.supp_rates_len) {
++		/*
++		 * Get all rates supported by the device and the AP as
 +		 * some APs don't like getting a superset of their rates
 +		 * in the association request (e.g. D-Link DAP 1353 in
-+		 * b-only mode) */
-+		rates_len = ieee80211_compatible_rates(wk->bss, sband, &rates);
++		 * b-only mode)...
++		 */
++		rates_len = ieee80211_compatible_rates(wk->assoc.supp_rates,
++						       wk->assoc.supp_rates_len,
++						       sband, &rates);
 +	} else {
++		/*
++		 * In case AP not provide any supported rates information
++		 * before association, we send information element(s) with
++		 * all rates that we support.
++		 */
 +		rates = ~0;
 +		rates_len = sband->n_bitrates;
 +	}
-+
- 	/* add all rates which were marked to be used above */
- 	supp_rates_len = rates_len;
- 	if (supp_rates_len > 8)
+ 
+ 	skb = alloc_skb(local->hw.extra_tx_headroom +
+ 			sizeof(*mgmt) + /* bit too much but doesn't matter */
 -- 
 1.6.2.5
 


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/sources,v
retrieving revision 1.1139
retrieving revision 1.1140
diff -u -p -r1.1139 -r1.1140
--- sources	6 Jul 2010 08:17:20 -0000	1.1139
+++ sources	9 Jul 2010 09:09:25 -0000	1.1140
@@ -1,2 +1,2 @@
-c3883760b18d50e8d78819c54d579b00  linux-2.6.33.tar.bz2
-88390e48c301f9eaeb455d8c00cfda57  patch-2.6.33.6.bz2
+10eebcb0178fb4540e2165bfd7efc7ad  linux-2.6.34.tar.bz2
+6606bcddb89228bd4c7a5b82de384aa5  patch-2.6.34.1.bz2

ssb_check_for_sprom.patch:
 drivers/ssb/driver_chipcommon.c           |    3 +++
 drivers/ssb/pci.c                         |    3 +++
 drivers/ssb/sprom.c                       |   26 ++++++++++++++++++++++++++
 include/linux/ssb/ssb.h                   |    3 +++
 include/linux/ssb/ssb_driver_chipcommon.h |   16 +++++++++++++++-
 5 files changed, 50 insertions(+), 1 deletion(-)

Index: ssb_check_for_sprom.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/ssb_check_for_sprom.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- ssb_check_for_sprom.patch	30 Mar 2010 18:01:49 -0000	1.2
+++ ssb_check_for_sprom.patch	9 Jul 2010 09:09:25 -0000	1.3
@@ -1,4 +1,4 @@
-From 380bed7aa858cbe2d4eeb783e2bed7d01828518d Mon Sep 17 00:00:00 2001
+From 4d9d1ff88f920e9fcdde155c0a1366b7e0462d14 Mon Sep 17 00:00:00 2001
 From: John W. Linville <linville at tuxdriver.com>
 Date: Fri, 19 Mar 2010 14:58:01 -0400
 Subject: [PATCH v4] ssb: do not read SPROM if it does not exist
@@ -20,16 +20,12 @@ Cc: Larry Finger <Larry.Finger at lwfinger.
 Cc: Michael Buesch <mb at bu3sch.de>
 Cc: stable at kernel.org
 ---
-Version 4, move read of ChipCommon status register to ssb_chipcommon_init
-Version 3, add missing semi-colon... :-(
-Version 2, check the correct place for ChipCommon core revision... :-)
-
  drivers/ssb/driver_chipcommon.c           |    3 +++
  drivers/ssb/pci.c                         |    3 +++
- drivers/ssb/sprom.c                       |   22 ++++++++++++++++++++++
+ drivers/ssb/sprom.c                       |   26 ++++++++++++++++++++++++++
  include/linux/ssb/ssb.h                   |    3 +++
  include/linux/ssb/ssb_driver_chipcommon.h |   15 +++++++++++++++
- 5 files changed, 46 insertions(+), 0 deletions(-)
+ 5 files changed, 50 insertions(+), 0 deletions(-)
 
 diff --git a/drivers/ssb/driver_chipcommon.c b/drivers/ssb/driver_chipcommon.c
 index 9681536..6cf288d 100644
@@ -46,10 +42,10 @@ index 9681536..6cf288d 100644
  	chipco_powercontrol_init(cc);
  	ssb_chipco_set_clockmode(cc, SSB_CLKMODE_FAST);
 diff --git a/drivers/ssb/pci.c b/drivers/ssb/pci.c
-index 9e50896..2f7b16d 100644
+index a8dbb06..89d7ab1 100644
 --- a/drivers/ssb/pci.c
 +++ b/drivers/ssb/pci.c
-@@ -620,6 +620,9 @@ static int ssb_pci_sprom_get(struct ssb_bus *bus,
+@@ -621,6 +621,9 @@ static int ssb_pci_sprom_get(struct ssb_bus *bus,
  	int err = -ENOMEM;
  	u16 *buf;
  
@@ -60,16 +56,20 @@ index 9e50896..2f7b16d 100644
  	if (!buf)
  		goto out;
 diff --git a/drivers/ssb/sprom.c b/drivers/ssb/sprom.c
-index d0e6762..55eb9b0 100644
+index f2f920f..c690f58 100644
 --- a/drivers/ssb/sprom.c
 +++ b/drivers/ssb/sprom.c
-@@ -175,3 +175,25 @@ const struct ssb_sprom *ssb_get_fallback_sprom(void)
+@@ -176,3 +176,29 @@ const struct ssb_sprom *ssb_get_fallback_sprom(void)
  {
  	return fallback_sprom;
  }
 +
 +bool ssb_is_sprom_available(struct ssb_bus *bus)
 +{
++	/* some older devices don't have chipcommon, but they have sprom */
++	if (!bus->chipco.dev)
++		return true;
++
 +	/* status register only exists on chipcomon rev >= 11 */
 +	if (bus->chipco.dev->id.revision < 11)
 +		return true;
@@ -151,35 +151,5 @@ index 4e27acf..2cdf249 100644
  	u16 fast_pwrup_delay;
  	struct ssb_chipcommon_pmu pmu;
 -- 
-1.6.2.5
-
-From ec032742062ad1b01dfe75cfccdbc5b850837c23 Mon Sep 17 00:00:00 2001
-From: John W. Linville <linville at tuxdriver.com>
-Date: Tue, 30 Mar 2010 13:47:39 -0400
-Subject: [PATCH] ssb: avoid null ptr deref in ssb_is_sprom_available
-
-Some older devices don't have chipcommon, but they do have SPROM.
-
-Signed-off-by: John W. Linville <linville at tuxdriver.com>
----
- drivers/ssb/sprom.c |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/ssb/sprom.c b/drivers/ssb/sprom.c
-index 55eb9b0..874d8f1 100644
---- a/drivers/ssb/sprom.c
-+++ b/drivers/ssb/sprom.c
-@@ -178,6 +178,10 @@ const struct ssb_sprom *ssb_get_fallback_sprom(void)
- 
- bool ssb_is_sprom_available(struct ssb_bus *bus)
- {
-+	/* some older devices don't have chipcommon, but they have sprom */
-+	if (!bus->chipco.dev)
-+		return true;
-+
- 	/* status register only exists on chipcomon rev >= 11 */
- 	if (bus->chipco.dev->id.revision < 11)
- 		return true;
--- 
-1.6.2.5
+1.7.0.1
 

thinkpad-acpi-add-x100e.patch:
 thinkpad_acpi.c |    1 +
 1 file changed, 1 insertion(+)

Index: thinkpad-acpi-add-x100e.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/thinkpad-acpi-add-x100e.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- thinkpad-acpi-add-x100e.patch	17 May 2010 20:36:41 -0000	1.2
+++ thinkpad-acpi-add-x100e.patch	9 Jul 2010 09:09:25 -0000	1.3
@@ -1,10 +1,11 @@
 diff -up linux-2.6.33.noarch/drivers/platform/x86/thinkpad_acpi.c.mjg linux-2.6.33.noarch/drivers/platform/x86/thinkpad_acpi.c
---- linux-2.6.33.noarch/drivers/platform/x86/thinkpad_acpi.c.mjg	2010-04-21 10:05:14.125030722 -0400
-+++ linux-2.6.33.noarch/drivers/platform/x86/thinkpad_acpi.c	2010-04-21 10:05:17.732030163 -0400
-@@ -506,6 +506,7 @@ TPACPI_HANDLE(ec, root, "\\_SB.PCI0.ISA.
+--- linux-2.6.33.noarch/drivers/platform/x86/thinkpad_acpi.c.mjg	2010-04-21 10:07:07.690036629 -0400
++++ linux-2.6.33.noarch/drivers/platform/x86/thinkpad_acpi.c	2010-04-21 10:07:24.227030266 -0400
+@@ -507,6 +507,7 @@ TPACPI_HANDLE(ec, root, "\\_SB.PCI0.ISA.
  	   "\\_SB.PCI0.ISA.EC",	/* A21e, A2xm/p, T20-22, X20-21 */
  	   "\\_SB.PCI0.AD4S.EC0",	/* i1400, R30 */
  	   "\\_SB.PCI0.ICH3.EC0",	/* R31 */
 +	   "\\_SB.PCI0.LPC0.EC",	/* X100e */
  	   "\\_SB.PCI0.LPC.EC",	/* all others */
  	   );
+ 

thinkpad-acpi-fix-backlight.patch:
 thinkpad_acpi.c |   38 ++++++++++++++++++--------------------
 1 file changed, 18 insertions(+), 20 deletions(-)

Index: thinkpad-acpi-fix-backlight.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/thinkpad-acpi-fix-backlight.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- thinkpad-acpi-fix-backlight.patch	17 May 2010 20:36:41 -0000	1.1
+++ thinkpad-acpi-fix-backlight.patch	9 Jul 2010 09:09:25 -0000	1.2
@@ -1,7 +1,7 @@
-diff -ur linux-2.6.33.noarch.bak/drivers/platform/x86/thinkpad_acpi.c linux-2.6.33.noarch/drivers/platform/x86/thinkpad_acpi.c
---- linux-2.6.33.noarch.bak/drivers/platform/x86/thinkpad_acpi.c	2010-05-17 15:56:10.864200185 -0400
-+++ linux-2.6.33.noarch/drivers/platform/x86/thinkpad_acpi.c	2010-05-17 16:12:20.232074844 -0400
-@@ -3396,7 +3396,7 @@
+diff -up linux-2.6.34.noarch/drivers/platform/x86/thinkpad_acpi.c.orig linux-2.6.34.noarch/drivers/platform/x86/thinkpad_acpi.c
+--- linux-2.6.34.noarch/drivers/platform/x86/thinkpad_acpi.c.orig	2010-05-17 16:28:13.254200070 -0400
++++ linux-2.6.34.noarch/drivers/platform/x86/thinkpad_acpi.c	2010-05-17 16:29:56.471200083 -0400
+@@ -3397,7 +3397,7 @@ static int __init hotkey_init(struct ibm
  		/* update bright_acpimode... */
  		tpacpi_check_std_acpi_brightness_support();
  
@@ -10,7 +10,7 @@ diff -ur linux-2.6.33.noarch.bak/drivers
  		printk(TPACPI_INFO
  		       "This ThinkPad has standard ACPI backlight "
  		       "brightness control, supported by the ACPI "
-@@ -6187,26 +6187,24 @@
+@@ -6189,26 +6189,24 @@ static int __init brightness_init(struct
  	 * going to publish a backlight interface
  	 */
  	b = tpacpi_check_std_acpi_brightness_support();


Index: upstream
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/upstream,v
retrieving revision 1.1052
retrieving revision 1.1053
diff -u -p -r1.1052 -r1.1053
--- upstream	6 Jul 2010 08:17:20 -0000	1.1052
+++ upstream	9 Jul 2010 09:09:26 -0000	1.1053
@@ -1,2 +1,2 @@
-linux-2.6.33.tar.bz2
-patch-2.6.33.6.bz2
+linux-2.6.34.tar.bz2
+patch-2.6.34.1.bz2

virt_console-rollup.patch:
 drivers/char/virtio_console.c  |  670 ++++++++++++++++++++++-------------------
 include/linux/virtio_console.h |   25 +
 2 files changed, 387 insertions(+), 308 deletions(-)

View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.2 -r 1.3 virt_console-rollup.patchIndex: virt_console-rollup.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-13/virt_console-rollup.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- virt_console-rollup.patch	16 Feb 2010 19:06:09 -0000	1.2
+++ virt_console-rollup.patch	9 Jul 2010 09:09:26 -0000	1.3
@@ -1,1390 +1,420 @@
-diff --git a/MAINTAINERS b/MAINTAINERS
-index 03f38c1..3118dfa 100644
---- a/MAINTAINERS
-+++ b/MAINTAINERS
-@@ -2394,6 +2394,12 @@ L:	linuxppc-dev at ozlabs.org
- S:	Odd Fixes
- F:	drivers/char/hvc_*
- 
-+VIRTIO CONSOLE DRIVER
-+M:	Amit Shah <amit.shah at redhat.com>
-+L:	virtualization at lists.linux-foundation.org
-+S:	Maintained
-+F:	drivers/char/virtio_console.c
-+
- GSPCA FINEPIX SUBDRIVER
- M:	Frank Zago <frank at zago.net>
- L:	linux-media at vger.kernel.org
-diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
-index e023682..3141dd3 100644
---- a/drivers/char/Kconfig
-+++ b/drivers/char/Kconfig
-@@ -666,6 +666,14 @@ config VIRTIO_CONSOLE
- 	help
- 	  Virtio console for use with lguest and other hypervisors.
- 
-+	  Also serves as a general-purpose serial device for data
-+	  transfer between the guest and host.  Character devices at
-+	  /dev/vportNpn will be created when corresponding ports are
-+	  found, where N is the device number and n is the port number
-+	  within that device.  If specified by the host, a sysfs
-+	  attribute called 'name' will be populated with a name for
-+	  the port which can be used by udev scripts to create a
-+	  symlink to the device.
- 
- config HVCS
- 	tristate "IBM Hypervisor Virtual Console Server support"
-diff --git a/drivers/char/hvc_beat.c b/drivers/char/hvc_beat.c
-index 0afc8b8..6913fc3 100644
---- a/drivers/char/hvc_beat.c
-+++ b/drivers/char/hvc_beat.c
-@@ -84,7 +84,7 @@ static int hvc_beat_put_chars(uint32_t vtermno, const char *buf, int cnt)
- 	return cnt;
- }
- 
--static struct hv_ops hvc_beat_get_put_ops = {
-+static const struct hv_ops hvc_beat_get_put_ops = {
- 	.get_chars = hvc_beat_get_chars,
- 	.put_chars = hvc_beat_put_chars,
- };
-diff --git a/drivers/char/hvc_console.c b/drivers/char/hvc_console.c
-index 416d342..4c3b59b 100644
---- a/drivers/char/hvc_console.c
-+++ b/drivers/char/hvc_console.c
-@@ -125,7 +125,7 @@ static struct hvc_struct *hvc_get_by_index(int index)
-  * console interfaces but can still be used as a tty device.  This has to be
-  * static because kmalloc will not work during early console init.
-  */
--static struct hv_ops *cons_ops[MAX_NR_HVC_CONSOLES];
-+static const struct hv_ops *cons_ops[MAX_NR_HVC_CONSOLES];
- static uint32_t vtermnos[MAX_NR_HVC_CONSOLES] =
- 	{[0 ... MAX_NR_HVC_CONSOLES - 1] = -1};
- 
-@@ -247,7 +247,7 @@ static void destroy_hvc_struct(struct kref *kref)
-  * vty adapters do NOT get an hvc_instantiate() callback since they
-  * appear after early console init.
-  */
--int hvc_instantiate(uint32_t vtermno, int index, struct hv_ops *ops)
-+int hvc_instantiate(uint32_t vtermno, int index, const struct hv_ops *ops)
- {
- 	struct hvc_struct *hp;
- 
-@@ -748,8 +748,9 @@ static const struct tty_operations hvc_ops = {
- 	.chars_in_buffer = hvc_chars_in_buffer,
- };
- 
--struct hvc_struct __devinit *hvc_alloc(uint32_t vtermno, int data,
--					struct hv_ops *ops, int outbuf_size)
-+struct hvc_struct *hvc_alloc(uint32_t vtermno, int data,
-+			     const struct hv_ops *ops,
-+			     int outbuf_size)
- {
- 	struct hvc_struct *hp;
- 	int i;
-diff --git a/drivers/char/hvc_console.h b/drivers/char/hvc_console.h
-index 10950ca..54381eb 100644
---- a/drivers/char/hvc_console.h
-+++ b/drivers/char/hvc_console.h
-@@ -55,7 +55,7 @@ struct hvc_struct {
- 	int outbuf_size;
- 	int n_outbuf;
- 	uint32_t vtermno;
--	struct hv_ops *ops;
-+	const struct hv_ops *ops;
- 	int irq_requested;
- 	int data;
- 	struct winsize ws;
-@@ -76,11 +76,12 @@ struct hv_ops {
- };
- 
- /* Register a vterm and a slot index for use as a console (console_init) */
--extern int hvc_instantiate(uint32_t vtermno, int index, struct hv_ops *ops);
-+extern int hvc_instantiate(uint32_t vtermno, int index,
-+			   const struct hv_ops *ops);
- 
- /* register a vterm for hvc tty operation (module_init or hotplug add) */
--extern struct hvc_struct * __devinit hvc_alloc(uint32_t vtermno, int data,
--				struct hv_ops *ops, int outbuf_size);
-+extern struct hvc_struct * hvc_alloc(uint32_t vtermno, int data,
-+				     const struct hv_ops *ops, int outbuf_size);
- /* remove a vterm from hvc tty operation (module_exit or hotplug remove) */
- extern int hvc_remove(struct hvc_struct *hp);
- 
-diff --git a/drivers/char/hvc_iseries.c b/drivers/char/hvc_iseries.c
-index 936d05b..fd02426 100644
---- a/drivers/char/hvc_iseries.c
-+++ b/drivers/char/hvc_iseries.c
-@@ -197,7 +197,7 @@ done:
- 	return sent;
- }
- 
--static struct hv_ops hvc_get_put_ops = {
-+static const struct hv_ops hvc_get_put_ops = {
- 	.get_chars = get_chars,
- 	.put_chars = put_chars,
- 	.notifier_add = notifier_add_irq,
-diff --git a/drivers/char/hvc_iucv.c b/drivers/char/hvc_iucv.c
-index fe62bd0..21681a8 100644
---- a/drivers/char/hvc_iucv.c
-+++ b/drivers/char/hvc_iucv.c
-@@ -922,7 +922,7 @@ static int hvc_iucv_pm_restore_thaw(struct device *dev)
- 
- 
- /* HVC operations */
--static struct hv_ops hvc_iucv_ops = {
-+static const struct hv_ops hvc_iucv_ops = {
- 	.get_chars = hvc_iucv_get_chars,
- 	.put_chars = hvc_iucv_put_chars,
- 	.notifier_add = hvc_iucv_notifier_add,
-diff --git a/drivers/char/hvc_rtas.c b/drivers/char/hvc_rtas.c
-index 88590d0..61c4a61 100644
---- a/drivers/char/hvc_rtas.c
-+++ b/drivers/char/hvc_rtas.c
-@@ -71,7 +71,7 @@ static int hvc_rtas_read_console(uint32_t vtermno, char *buf, int count)
- 	return i;
- }
- 
--static struct hv_ops hvc_rtas_get_put_ops = {
-+static const struct hv_ops hvc_rtas_get_put_ops = {
- 	.get_chars = hvc_rtas_read_console,
- 	.put_chars = hvc_rtas_write_console,
- };
-diff --git a/drivers/char/hvc_udbg.c b/drivers/char/hvc_udbg.c
-index bd63ba8..b0957e6 100644
---- a/drivers/char/hvc_udbg.c
-+++ b/drivers/char/hvc_udbg.c
-@@ -58,7 +58,7 @@ static int hvc_udbg_get(uint32_t vtermno, char *buf, int count)
- 	return i;
- }
- 
--static struct hv_ops hvc_udbg_ops = {
-+static const struct hv_ops hvc_udbg_ops = {
- 	.get_chars = hvc_udbg_get,
- 	.put_chars = hvc_udbg_put,
- };
-diff --git a/drivers/char/hvc_vio.c b/drivers/char/hvc_vio.c
-index 10be343..27370e9 100644
---- a/drivers/char/hvc_vio.c
-+++ b/drivers/char/hvc_vio.c
-@@ -77,7 +77,7 @@ static int filtered_get_chars(uint32_t vtermno, char *buf, int count)
- 	return got;
- }
- 
--static struct hv_ops hvc_get_put_ops = {
-+static const struct hv_ops hvc_get_put_ops = {
- 	.get_chars = filtered_get_chars,
- 	.put_chars = hvc_put_chars,
- 	.notifier_add = notifier_add_irq,
-diff --git a/drivers/char/hvc_xen.c b/drivers/char/hvc_xen.c
-index b1a7163..60446f8 100644
---- a/drivers/char/hvc_xen.c
-+++ b/drivers/char/hvc_xen.c
-@@ -122,7 +122,7 @@ static int read_console(uint32_t vtermno, char *buf, int len)
- 	return recv;
- }
- 
--static struct hv_ops hvc_ops = {
-+static const struct hv_ops hvc_ops = {
- 	.get_chars = read_console,
- 	.put_chars = write_console,
- 	.notifier_add = notifier_add_irq,
 diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
[...2356 lines suppressed...]
- 	{ 0 },
-@@ -253,6 +1511,7 @@ static struct virtio_device_id id_table[] = {
+ 	kfree(portdev->in_vqs);
+ 	kfree(portdev->out_vqs);
+@@ -1529,7 +1583,6 @@ static void virtcons_remove(struct virtio_device *vdev)
+ 	portdev = vdev->priv;
+ 
+ 	cancel_work_sync(&portdev->control_work);
+-	cancel_work_sync(&portdev->config_work);
+ 
+ 	list_for_each_entry_safe(port, port2, &portdev->ports, list)
+ 		remove_port(port);
+@@ -1556,6 +1609,7 @@ static struct virtio_device_id id_table[] = {
  
  static unsigned int features[] = {
  	VIRTIO_CONSOLE_F_SIZE,
@@ -1845,147 +985,17 @@ index a035ae3..213373b 100644
  };
  
  static struct virtio_driver virtio_console = {
-@@ -262,14 +1521,41 @@ static struct virtio_driver virtio_console = {
- 	.driver.owner =	THIS_MODULE,
- 	.id_table =	id_table,
- 	.probe =	virtcons_probe,
--	.config_changed = virtcons_apply_config,
-+	.remove =	virtcons_remove,
-+	.config_changed = config_intr,
- };
- 
- static int __init init(void)
- {
-+	int err;
-+
-+	pdrvdata.class = class_create(THIS_MODULE, "virtio-ports");
-+	if (IS_ERR(pdrvdata.class)) {
-+		err = PTR_ERR(pdrvdata.class);
-+		pr_err("Error %d creating virtio-ports class\n", err);
-+		return err;
-+	}
-+
-+	pdrvdata.debugfs_dir = debugfs_create_dir("virtio-ports", NULL);
-+	if (!pdrvdata.debugfs_dir) {
-+		pr_warning("Error %ld creating debugfs dir for virtio-ports\n",
-+			   PTR_ERR(pdrvdata.debugfs_dir));
-+	}
-+	INIT_LIST_HEAD(&pdrvdata.consoles);
-+
- 	return register_virtio_driver(&virtio_console);
- }
-+
-+static void __exit fini(void)
-+{
-+	unregister_virtio_driver(&virtio_console);
-+
-+	class_destroy(pdrvdata.class);
-+	if (pdrvdata.debugfs_dir)
-+		debugfs_remove_recursive(pdrvdata.debugfs_dir);
-+}
- module_init(init);
-+module_exit(fini);
- 
- MODULE_DEVICE_TABLE(virtio, id_table);
- MODULE_DESCRIPTION("Virtio console driver");
-diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
-index fbd2ecd..9bcfe95 100644
---- a/drivers/virtio/virtio_ring.c
-+++ b/drivers/virtio/virtio_ring.c
-@@ -334,6 +334,30 @@ static bool vring_enable_cb(struct virtqueue *_vq)
- 	return true;
- }
- 
-+static void *vring_detach_unused_buf(struct virtqueue *_vq)
-+{
-+	struct vring_virtqueue *vq = to_vvq(_vq);
-+	unsigned int i;
-+	void *buf;
-+
-+	START_USE(vq);
-+
-+	for (i = 0; i < vq->vring.num; i++) {
-+		if (!vq->data[i])
-+			continue;
-+		/* detach_buf clears data, so grab it now. */
-+		buf = vq->data[i];
-+		detach_buf(vq, i);
-+		END_USE(vq);
-+		return buf;
-+	}
-+	/* That should have freed everything. */
-+	BUG_ON(vq->num_free != vq->vring.num);
-+
-+	END_USE(vq);
-+	return NULL;
-+}
-+
- irqreturn_t vring_interrupt(int irq, void *_vq)
- {
- 	struct vring_virtqueue *vq = to_vvq(_vq);
-@@ -360,6 +384,7 @@ static struct virtqueue_ops vring_vq_ops = {
- 	.kick = vring_kick,
- 	.disable_cb = vring_disable_cb,
- 	.enable_cb = vring_enable_cb,
-+	.detach_unused_buf = vring_detach_unused_buf,
- };
- 
- struct virtqueue *vring_new_virtqueue(unsigned int num,
-@@ -406,8 +431,11 @@ struct virtqueue *vring_new_virtqueue(unsigned int num,
- 	/* Put everything in free lists. */
- 	vq->num_free = num;
- 	vq->free_head = 0;
--	for (i = 0; i < num-1; i++)
-+	for (i = 0; i < num-1; i++) {
- 		vq->vring.desc[i].next = i+1;
-+		vq->data[i] = NULL;
-+	}
-+	vq->data[i] = NULL;
- 
- 	return &vq->vq;
- }
-diff --git a/include/linux/virtio.h b/include/linux/virtio.h
-index 057a2e0..f508c65 100644
---- a/include/linux/virtio.h
-+++ b/include/linux/virtio.h
-@@ -51,6 +51,9 @@ struct virtqueue {
-  *	This re-enables callbacks; it returns "false" if there are pending
-  *	buffers in the queue, to detect a possible race between the driver
-  *	checking for more work, and enabling callbacks.
-+ * @detach_unused_buf: detach first unused buffer
-+ * 	vq: the struct virtqueue we're talking about.
-+ * 	Returns NULL or the "data" token handed to add_buf
-  *
-  * Locking rules are straightforward: the driver is responsible for
-  * locking.  No two operations may be invoked simultaneously, with the exception
-@@ -71,6 +74,7 @@ struct virtqueue_ops {
- 
- 	void (*disable_cb)(struct virtqueue *vq);
- 	bool (*enable_cb)(struct virtqueue *vq);
-+	void *(*detach_unused_buf)(struct virtqueue *vq);
- };
- 
- /**
 diff --git a/include/linux/virtio_console.h b/include/linux/virtio_console.h
-index fe88517..ae4f039 100644
+index 92228a8..a85064d 100644
 --- a/include/linux/virtio_console.h
 +++ b/include/linux/virtio_console.h
-@@ -3,19 +3,45 @@
- #include <linux/types.h>
- #include <linux/virtio_ids.h>
- #include <linux/virtio_config.h>
--/* This header, excluding the #ifdef __KERNEL__ part, is BSD licensed so
-- * anyone can use the definitions to implement compatible drivers/servers. */
-+/*
-+ * This header, excluding the #ifdef __KERNEL__ part, is BSD licensed so
-+ * anyone can use the definitions to implement compatible drivers/servers.
-+ *
-+ * Copyright (C) Red Hat, Inc., 2009, 2010
-+ */
+@@ -12,14 +12,39 @@
  
  /* Feature bits */
  #define VIRTIO_CONSOLE_F_SIZE	0	/* Does host provide console size? */
 +#define VIRTIO_CONSOLE_F_MULTIPORT 1	/* Does host provide multiple ports? */
++
++#define VIRTIO_CONSOLE_BAD_ID		(~(u32)0)
  
  struct virtio_console_config {
  	/* colums of the screens */
@@ -1994,8 +1004,6 @@ index fe88517..ae4f039 100644
  	__u16 rows;
 +	/* max. number of ports this device can hold */
 +	__u32 max_nr_ports;
-+	/* number of ports added so far */
-+	__u32 nr_ports;
  } __attribute__((packed));
  
 +/*
@@ -2009,12 +1017,15 @@ index fe88517..ae4f039 100644
 +};
 +
 +/* Some events for control messages */
-+#define VIRTIO_CONSOLE_PORT_READY	0
-+#define VIRTIO_CONSOLE_CONSOLE_PORT	1
-+#define VIRTIO_CONSOLE_RESIZE		2
-+#define VIRTIO_CONSOLE_PORT_OPEN	3
-+#define VIRTIO_CONSOLE_PORT_NAME	4
-+#define VIRTIO_CONSOLE_PORT_REMOVE	5
- 
++#define VIRTIO_CONSOLE_DEVICE_READY	0
++#define VIRTIO_CONSOLE_PORT_ADD		1
++#define VIRTIO_CONSOLE_PORT_REMOVE	2
++#define VIRTIO_CONSOLE_PORT_READY	3
++#define VIRTIO_CONSOLE_CONSOLE_PORT	4
++#define VIRTIO_CONSOLE_RESIZE		5
++#define VIRTIO_CONSOLE_PORT_OPEN	6
++#define VIRTIO_CONSOLE_PORT_NAME	7
++
  #ifdef __KERNEL__
  int __init virtio_cons_early_init(int (*put_chars)(u32, const char *, int));
+ #endif /* __KERNEL__ */


--- linux-2.6.33.tar.bz2.sign DELETED ---


--- patch-2.6.33.6.bz2.sign DELETED ---



More information about the scm-commits mailing list