rpms/kernel/F-7 linux-2.6-netdev-e1000e-01.patch, NONE, 1.1 linux-2.6-netdev-e1000e-02.patch, NONE, 1.1 linux-2.6-netdev-e1000e-03.patch, NONE, 1.1 linux-2.6-netdev-e1000e-04.patch, NONE, 1.1 linux-2.6-netdev-e1000e-05.patch, NONE, 1.1 linux-2.6-netdev-e1000e-06.patch, NONE, 1.1 linux-2.6-netdev-e1000e-07.patch, NONE, 1.1 linux-2.6-netdev-e1000e-08.patch, NONE, 1.1 linux-2.6-netdev-e1000e-09.patch, NONE, 1.1 linux-2.6-netdev-e1000e-10.patch, NONE, 1.1 linux-2.6-scsi-async-double-add.patch, NONE, 1.1 linux-2.6-usb-suspend-classes.patch, NONE, 1.1 linux-2.6.23.tar.bz2.sign, NONE, 1.1 .cvsignore, 1.635, 1.636 kernel-2.6.spec, 1.3351, 1.3352 linux-2.6-ath5k.patch, 1.3, 1.4 linux-2.6-build-nonintconfig.patch, 1.8, 1.9 linux-2.6-crash-driver.patch, 1.6, 1.7 linux-2.6-debug-taint-vm.patch, 1.13, 1.14 linux-2.6-devmem.patch, 1.14, 1.15 linux-2.6-execshield.patch, 1.55, 1.56 linux-2.6-ibmvscsi-schizo.patch, 1.4, 1.5 linux-2.6-libata-pata-dma-disable-option.patch, 1.2, 1.3 linux-2.6-modsign-ksign.patch, 1.5, 1.6 linux-2.6-modsign-mpilib.patch, 1.3, 1.4 linux-2.6-olpc-touchpad.diff, 1.1, 1.2 linux-2.6-ps3-gelic-wireless.patch, 1.4, 1.5 linux-2.6-silence-noise.patch, 1.8, 1.9 linux-2.6-squashfs.patch, 1.20, 1.21 linux-2.6-utrace-core.patch, 1.5, 1.6 linux-2.6-utrace-ptrace-compat-avr32.patch, 1.1, 1.2 linux-2.6-utrace-ptrace-compat-ia64.patch, 1.4, 1.5 linux-2.6-utrace-ptrace-compat-s390.patch, 1.3, 1.4 linux-2.6-utrace-ptrace-compat-sparc64.patch, 1.3, 1.4 linux-2.6-utrace-ptrace-compat.patch, 1.5, 1.6 linux-2.6-utrace-regset-avr32.patch, 1.1, 1.2 linux-2.6-utrace-regset-ia64.patch, 1.4, 1.5 linux-2.6-utrace-regset-s390.patch, 1.3, 1.4 linux-2.6-utrace-regset-sparc64.patch, 1.3, 1.4 linux-2.6-utrace-regset.patch, 1.5, 1.6 linux-2.6-utrace-tracehook-avr32.patch, 1.1, 1.2 linux-2.6-utrace-tracehook-ia64.patch, 1.3, 1.4 linux-2.6-utrace-tracehook-s390.patch, 1.3, 1.4 linux-2.6-utrace-tracehook-sparc64.patch, 1.3, 1.4 linux-2.6-utrace-tracehook-um.patch, 1.3, 1.4 linux-2.6-utrace-tracehook.patch, 1.4, 1.5 linux-2.6-wireless-pending.patch, 1.4, 1.5 linux-2.6-wireless.patch, 1.12, 1.13 sources, 1.598, 1.599 upstream, 1.522, 1.523 linux-2.6-aacraid-ioctl-security.patch, 1.1, NONE linux-2.6-acpi-disable-cstates-in-suspend.patch, 1.1, NONE linux-2.6-acpi-kill-dmesg-spam.patch, 1.1, NONE linux-2.6-amd-fix-broken-lapic-timer-detect.patch, 1.1, NONE linux-2.6-ata-update-noncq.patch, 1.1, NONE linux-2.6-debug-extra-warnings.patch, 1.6, NONE linux-2.6-debug-must_check.patch, 1.2, NONE linux-2.6-debug-slub-debug.patch, 1.1, NONE linux-2.6-debug-sysfs-crash-debugging.patch, 1.8, NONE linux-2.6-dev-get-driver-properly.patch, 1.1, NONE linux-2.6-dmi-based-module-autoloading.patch, 1.1, NONE linux-2.6-e1000-ich9.patch, 1.1, NONE linux-2.6-genirq-fixes.patch, 1.1, NONE linux-2.6-gfs2-update.patch, 1.4, NONE linux-2.6-idr-multiple-bugfixes.patch, 1.1, NONE linux-2.6-irda-smc-remove-quirk.patch, 1.1, NONE linux-2.6-kvm-reinit-real-mode-tss.patch, 1.3, NONE linux-2.6-kvm-suspend.patch, 1.1, NONE linux-2.6-libata-2.6.23-rc8-noncq.patch, 1.1, NONE linux-2.6-libata-ata_piix_fix_pio-mwdma-programming.patch, 1.1, NONE linux-2.6-libata-pata_ali-fix-hp-detect.patch, 1.1, NONE linux-2.6-libata-pata_hpt37x-fix-2.6.22-clock-pll.patch, 1.1, NONE linux-2.6-libata-pata_it821x-dma.patch, 1.1, NONE linux-2.6-libata-pata_sis-dma-add-missing-entry.patch, 1.1, NONE linux-2.6-libata-pata_sis-fix-dma-timing.patch, 1.1, NONE linux-2.6-libata-pata_via-cable-detect.patch, 1.1, NONE linux-2.6-libata-sata_sil24-fix-irq-clearing-race.patch, 1.1, NONE linux-2.6-libata-simplify-init.patch, 1.1, NONE linux-2.6-libertas.diff, 1.1, NONE linux-2.6-lvm-snapshot-deadlock-fix.patch, 1.1, NONE linux-2.6-net-atl1-fix-typo-in-dma-setup.patch, 1.1, NONE linux-2.6-net-atl1-fix-typo-in-dma_req_block.patch, 1.1, NONE linux-2.6-net-r8169-correct-phy-parameters-for-the-8110SC.patch, 1.1, NONE linux-2.6-net-r8169-workaround-against-ignored-TxPoll-writes-8168.patch, 1.2, NONE linux-2.6-net-sfq-fix-oops-with-2.patch, 1.1, NONE linux-2.6-netdev-atl1-disable-broken-64-bit-dma.patch, 1.1, NONE linux-2.6-nfs-nosharecache.patch, 1.1, NONE linux-2.6-pcspkr-use-the-global-pit-lock.patch, 1.1, NONE linux-2.6-powerpc-generic-suspend-1-remove-dead-code.patch, 1.1, NONE linux-2.6-powerpc-generic-suspend-2-remove-adb-sleep-notifier.patch, 1.1, NONE linux-2.6-powerpc-generic-suspend-3-remove-dmasound.patch, 1.1, NONE linux-2.6-powerpc-generic-suspend-4-kill-pmu-sleep-notifier.patch, 1.1, NONE linux-2.6-powerpc-generic-suspend-5-pmu-pm_ops.patch, 1.1, NONE linux-2.6-ppc-pegasos-keyboard-8042-check.patch, 1.1, NONE linux-2.6-ps3-alsa.patch, 1.1, NONE linux-2.6-ps3-ethernet-autoload.patch, 1.3, NONE linux-2.6-ps3-ethernet-modular.patch, 1.5, NONE linux-2.6-ps3-gelic-net-updates-1.patch, 1.1, NONE linux-2.6-ps3-gelic-net-updates-2.patch, 1.1, NONE linux-2.6-ps3-gelic-net.patch, 1.1, NONE linux-2.6-ps3-merge-1.patch, 1.1, NONE linux-2.6-ps3-merge-2.patch, 1.1, NONE linux-2.6-ps3-usb-system-bus.patch, 1.1, NONE linux-2.6-rtl8187.patch, 1.1, NONE linux-2.6-sched-cfs-updates.patch, 1.1, NONE linux-2.6-sched-cfs-v2.6.22.5-v20.5.patch, 1.3, NONE linux-2.6-scsi-async-scanning.patch, 1.1, NONE linux-2.6-sdhci-clear-error-interrupt.patch, 1.1, NONE linux-2.6-sdhci-ene-controller-quirk.patch, 1.1, NONE linux-2.6-sdhci-fix-interrupt-mask.patch, 1.1, NONE linux-2.6-snd-ad1988-fix-spdif-output.patch, 1.1, NONE linux-2.6-snd-hda-stac92xx-fixes.patch, 1.1, NONE linux-2.6-softlockup-disable.patch, 1.4, NONE linux-2.6-softmac-fix-essid-problem_R.patch, 1.1, NONE linux-2.6-timekeeping-fixes.patch, 1.1, NONE linux-2.6-uevent-zero-fill-env.patch, 1.1, NONE linux-2.6-usb-allow-1-byte-replies.patch, 1.1, NONE linux-2.6-usb-autosuspend-default-disable.patch, 1.5, NONE linux-2.6-usb-fixup-interval-lengths.patch, 1.1, NONE linux-2.6-vbe-always-save-ddc.patch, 1.1, NONE linux-2.6-x86-vga-vidfail.patch, 1.1, NONE linux-2.6-x86_64-e820_hole_size.patch, 1.1, NONE linux-2.6.22.tar.bz2.sign, 1.1, NONE patch-2.6.22.9.bz2.sign, 1.1, NONE

Chuck Ebbert (cebbert) fedora-extras-commits at redhat.com
Wed Oct 10 21:23:45 UTC 2007


Author: cebbert

Update of /cvs/pkgs/rpms/kernel/F-7
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv12226

Modified Files:
	.cvsignore kernel-2.6.spec linux-2.6-ath5k.patch 
	linux-2.6-build-nonintconfig.patch 
	linux-2.6-crash-driver.patch linux-2.6-debug-taint-vm.patch 
	linux-2.6-devmem.patch linux-2.6-execshield.patch 
	linux-2.6-ibmvscsi-schizo.patch 
	linux-2.6-libata-pata-dma-disable-option.patch 
	linux-2.6-modsign-ksign.patch linux-2.6-modsign-mpilib.patch 
	linux-2.6-olpc-touchpad.diff 
	linux-2.6-ps3-gelic-wireless.patch 
	linux-2.6-silence-noise.patch linux-2.6-squashfs.patch 
	linux-2.6-utrace-core.patch 
	linux-2.6-utrace-ptrace-compat-avr32.patch 
	linux-2.6-utrace-ptrace-compat-ia64.patch 
	linux-2.6-utrace-ptrace-compat-s390.patch 
	linux-2.6-utrace-ptrace-compat-sparc64.patch 
	linux-2.6-utrace-ptrace-compat.patch 
	linux-2.6-utrace-regset-avr32.patch 
	linux-2.6-utrace-regset-ia64.patch 
	linux-2.6-utrace-regset-s390.patch 
	linux-2.6-utrace-regset-sparc64.patch 
	linux-2.6-utrace-regset.patch 
	linux-2.6-utrace-tracehook-avr32.patch 
	linux-2.6-utrace-tracehook-ia64.patch 
	linux-2.6-utrace-tracehook-s390.patch 
	linux-2.6-utrace-tracehook-sparc64.patch 
	linux-2.6-utrace-tracehook-um.patch 
	linux-2.6-utrace-tracehook.patch 
	linux-2.6-wireless-pending.patch linux-2.6-wireless.patch 
	sources upstream 
Added Files:
	linux-2.6-netdev-e1000e-01.patch 
	linux-2.6-netdev-e1000e-02.patch 
	linux-2.6-netdev-e1000e-03.patch 
	linux-2.6-netdev-e1000e-04.patch 
	linux-2.6-netdev-e1000e-05.patch 
	linux-2.6-netdev-e1000e-06.patch 
	linux-2.6-netdev-e1000e-07.patch 
	linux-2.6-netdev-e1000e-08.patch 
	linux-2.6-netdev-e1000e-09.patch 
	linux-2.6-netdev-e1000e-10.patch 
	linux-2.6-scsi-async-double-add.patch 
	linux-2.6-usb-suspend-classes.patch linux-2.6.23.tar.bz2.sign 
Removed Files:
	linux-2.6-aacraid-ioctl-security.patch 
	linux-2.6-acpi-disable-cstates-in-suspend.patch 
	linux-2.6-acpi-kill-dmesg-spam.patch 
	linux-2.6-amd-fix-broken-lapic-timer-detect.patch 
	linux-2.6-ata-update-noncq.patch 
	linux-2.6-debug-extra-warnings.patch 
	linux-2.6-debug-must_check.patch 
	linux-2.6-debug-slub-debug.patch 
	linux-2.6-debug-sysfs-crash-debugging.patch 
	linux-2.6-dev-get-driver-properly.patch 
	linux-2.6-dmi-based-module-autoloading.patch 
	linux-2.6-e1000-ich9.patch linux-2.6-genirq-fixes.patch 
	linux-2.6-gfs2-update.patch 
	linux-2.6-idr-multiple-bugfixes.patch 
	linux-2.6-irda-smc-remove-quirk.patch 
	linux-2.6-kvm-reinit-real-mode-tss.patch 
	linux-2.6-kvm-suspend.patch 
	linux-2.6-libata-2.6.23-rc8-noncq.patch 
	linux-2.6-libata-ata_piix_fix_pio-mwdma-programming.patch 
	linux-2.6-libata-pata_ali-fix-hp-detect.patch 
	linux-2.6-libata-pata_hpt37x-fix-2.6.22-clock-pll.patch 
	linux-2.6-libata-pata_it821x-dma.patch 
	linux-2.6-libata-pata_sis-dma-add-missing-entry.patch 
	linux-2.6-libata-pata_sis-fix-dma-timing.patch 
	linux-2.6-libata-pata_via-cable-detect.patch 
	linux-2.6-libata-sata_sil24-fix-irq-clearing-race.patch 
	linux-2.6-libata-simplify-init.patch linux-2.6-libertas.diff 
	linux-2.6-lvm-snapshot-deadlock-fix.patch 
	linux-2.6-net-atl1-fix-typo-in-dma-setup.patch 
	linux-2.6-net-atl1-fix-typo-in-dma_req_block.patch 
	linux-2.6-net-r8169-correct-phy-parameters-for-the-8110SC.patch 
	linux-2.6-net-r8169-workaround-against-ignored-TxPoll-writes-8168.patch 
	linux-2.6-net-sfq-fix-oops-with-2.patch 
	linux-2.6-netdev-atl1-disable-broken-64-bit-dma.patch 
	linux-2.6-nfs-nosharecache.patch 
	linux-2.6-pcspkr-use-the-global-pit-lock.patch 
	linux-2.6-powerpc-generic-suspend-1-remove-dead-code.patch 
	linux-2.6-powerpc-generic-suspend-2-remove-adb-sleep-notifier.patch 
	linux-2.6-powerpc-generic-suspend-3-remove-dmasound.patch 
	linux-2.6-powerpc-generic-suspend-4-kill-pmu-sleep-notifier.patch 
	linux-2.6-powerpc-generic-suspend-5-pmu-pm_ops.patch 
	linux-2.6-ppc-pegasos-keyboard-8042-check.patch 
	linux-2.6-ps3-alsa.patch linux-2.6-ps3-ethernet-autoload.patch 
	linux-2.6-ps3-ethernet-modular.patch 
	linux-2.6-ps3-gelic-net-updates-1.patch 
	linux-2.6-ps3-gelic-net-updates-2.patch 
	linux-2.6-ps3-gelic-net.patch linux-2.6-ps3-merge-1.patch 
	linux-2.6-ps3-merge-2.patch linux-2.6-ps3-usb-system-bus.patch 
	linux-2.6-rtl8187.patch linux-2.6-sched-cfs-updates.patch 
	linux-2.6-sched-cfs-v2.6.22.5-v20.5.patch 
	linux-2.6-scsi-async-scanning.patch 
	linux-2.6-sdhci-clear-error-interrupt.patch 
	linux-2.6-sdhci-ene-controller-quirk.patch 
	linux-2.6-sdhci-fix-interrupt-mask.patch 
	linux-2.6-snd-ad1988-fix-spdif-output.patch 
	linux-2.6-snd-hda-stac92xx-fixes.patch 
	linux-2.6-softlockup-disable.patch 
	linux-2.6-softmac-fix-essid-problem_R.patch 
	linux-2.6-timekeeping-fixes.patch 
	linux-2.6-uevent-zero-fill-env.patch 
	linux-2.6-usb-allow-1-byte-replies.patch 
	linux-2.6-usb-autosuspend-default-disable.patch 
	linux-2.6-usb-fixup-interval-lengths.patch 
	linux-2.6-vbe-always-save-ddc.patch 
	linux-2.6-x86-vga-vidfail.patch 
	linux-2.6-x86_64-e820_hole_size.patch 
	linux-2.6.22.tar.bz2.sign patch-2.6.22.9.bz2.sign 
Log Message:
* Wed Oct 10 2007 Chuck Ebbert <cebbert at redhat.com>
- Linux 2.6.23


linux-2.6-netdev-e1000e-01.patch:

--- NEW FILE linux-2.6-netdev-e1000e-01.patch ---
From: Auke Kok <auke-jan.h.kok at intel.com>
Date: Mon, 6 Aug 2007 21:14:44 +0000 (-0700)
Subject: e1000e: New pci-express e1000 driver (currently for ICH9 devices only)
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fjgarzik%2Fnetdev-2.6.git;a=commitdiff_plain;h=5b663b9d5d5d56209c2ea0cf636c8aea172065b8

e1000e: New pci-express e1000 driver (currently for ICH9 devices only)

This driver implements support for the ICH9 on-board LAN ethernet
device. The device is similar to ICH8.

The driver encompasses code to support 82571/2/3, es2lan and ICH8
devices as well, but those device IDs are disabled and will be
"lifted" from the e1000 driver over one at a time once this driver
receives some more live time.

Changes to the last snapshot posted are exclusively in the internal
hardware API organization. Many thanks to Jeff Garzik for jumping in
and getting this organized with a keen eye on the future layout.

Signed-off-by: Auke Kok <auke-jan.h.kok at intel.com>
Signed-off-by: Jeff Garzik <jeff at garzik.org>
---

diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index 81ef81c..e5f2f02 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -2059,6 +2059,29 @@ config E1000_DISABLE_PACKET_SPLIT
 
 	  If in doubt, say N.
 
+config E1000E
+	tristate "Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support"
+	depends on PCI
+	---help---
+	  This driver supports the PCI-Express Intel(R) PRO/1000 gigabit
+	  ethernet family of adapters. For PCI or PCI-X e1000 adapters,
+	  use the regular e1000 driver For more information on how to
+	  identify your adapter, go to the Adapter & Driver ID Guide at:
+
+	  <http://support.intel.com/support/network/adapter/pro100/21397.htm>
+
+	  For general information and support, go to the Intel support
+	  website at:
+
+	  <http://support.intel.com>
+
+	  More specific information on configuring the driver is in
+	  <file:Documentation/networking/e1000e.txt>.
+
+	  To compile this driver as a module, choose M here and read
+	  <file:Documentation/networking/net-modules.txt>.  The module
+	  will be called e1000e.
+
 source "drivers/net/ixp2000/Kconfig"
 
 config MYRI_SBUS
diff --git a/drivers/net/Makefile b/drivers/net/Makefile
index e684212..4140a0c 100644
--- a/drivers/net/Makefile
+++ b/drivers/net/Makefile
@@ -3,6 +3,7 @@
 #
 
 obj-$(CONFIG_E1000) += e1000/
+obj-$(CONFIG_E1000E) += e1000e/
 obj-$(CONFIG_IBM_EMAC) += ibm_emac/
 obj-$(CONFIG_IXGB) += ixgb/
 obj-$(CONFIG_CHELSIO_T1) += chelsio/
diff --git a/drivers/net/e1000e/82571.c b/drivers/net/e1000e/82571.c
new file mode 100644
index 0000000..a1b9d16
--- /dev/null
+++ b/drivers/net/e1000e/82571.c
@@ -0,0 +1,1382 @@
+/*******************************************************************************
+
+  Intel PRO/1000 Linux driver
+  Copyright(c) 1999 - 2007 Intel Corporation.
+
+  This program is free software; you can redistribute it and/or modify it
+  under the terms and conditions of the GNU General Public License,
+  version 2, as published by the Free Software Foundation.
+
+  This program is distributed in the hope it will be useful, but WITHOUT
+  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+  more details.
+
+  You should have received a copy of the GNU General Public License along with
+  this program; if not, write to the Free Software Foundation, Inc.,
+  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+
+  The full GNU General Public License is included in this distribution in
+  the file called "COPYING".
+
+  Contact Information:
+  Linux NICS <linux.nics at intel.com>
+  e1000-devel Mailing List <e1000-devel at lists.sourceforge.net>
+  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
+
+*******************************************************************************/
+
+/*
+ * 82571EB Gigabit Ethernet Controller
+ * 82571EB Gigabit Ethernet Controller (Fiber)
+ * 82572EI Gigabit Ethernet Controller (Copper)
+ * 82572EI Gigabit Ethernet Controller (Fiber)
+ * 82572EI Gigabit Ethernet Controller
+ * 82573V Gigabit Ethernet Controller (Copper)
+ * 82573E Gigabit Ethernet Controller (Copper)
+ * 82573L Gigabit Ethernet Controller
+ */
+
+#include "e1000.h"
+
+#define ID_LED_RESERVED_F746 0xF746
+#define ID_LED_DEFAULT_82573 ((ID_LED_DEF1_DEF2 << 12) | \
+			      (ID_LED_OFF1_ON2  <<  8) | \
+			      (ID_LED_DEF1_DEF2 <<  4) | \
+			      (ID_LED_DEF1_DEF2))
+
+#define E1000_GCR_L1_ACT_WITHOUT_L0S_RX 0x08000000
+
+static s32 e1000_get_phy_id_82571(struct e1000_hw *hw);
+static s32 e1000_setup_copper_link_82571(struct e1000_hw *hw);
+static s32 e1000_setup_fiber_serdes_link_82571(struct e1000_hw *hw);
+static s32 e1000_get_phy_id_82571(struct e1000_hw *hw);
+static s32 e1000_write_nvm_eewr_82571(struct e1000_hw *hw, u16 offset,
+				      u16 words, u16 *data);
+static s32 e1000_fix_nvm_checksum_82571(struct e1000_hw *hw);
+static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw);
+static s32 e1000_setup_link_82571(struct e1000_hw *hw);
+static void e1000_clear_hw_cntrs_82571(struct e1000_hw *hw);
+
+/**
+ *  e1000_init_phy_params_82571 - Init PHY func ptrs.
+ *  @hw: pointer to the HW structure
+ *
+ *  This is a function pointer entry point called by the api module.
+ **/
+static s32 e1000_init_phy_params_82571(struct e1000_hw *hw)
+{
+	struct e1000_phy_info *phy = &hw->phy;
+	s32 ret_val = E1000_SUCCESS;
+
+	if (hw->media_type != e1000_media_type_copper) {
+		phy->type = e1000_phy_none;
+		goto out;
+	}
+
+	phy->addr			 = 1;
+	phy->autoneg_mask		 = AUTONEG_ADVERTISE_SPEED_DEFAULT;
+	phy->reset_delay_us		 = 100;
+
+	switch (hw->mac.type) {
+	case e1000_82571:
+	case e1000_82572:
+		phy->type		 = e1000_phy_igp_2;
+		break;
+	case e1000_82573:
+		phy->type		 = e1000_phy_m88;
+		break;
+	default:
+		ret_val = -E1000_ERR_PHY;
+		goto out;
+		break;
+	}
+
+	/* This can only be done after all function pointers are setup. */
+	ret_val = e1000_get_phy_id_82571(hw);
+
+	/* Verify phy id */
+	switch (hw->mac.type) {
+	case e1000_82571:
+	case e1000_82572:
+		if (phy->id != IGP01E1000_I_PHY_ID) {
+			ret_val = -E1000_ERR_PHY;
+			goto out;
+		}
+		break;
+	case e1000_82573:
+		if (phy->id != M88E1111_I_PHY_ID) {
+			ret_val = -E1000_ERR_PHY;
+			goto out;
+		}
+		break;
+	default:
+		ret_val = -E1000_ERR_PHY;
+		goto out;
+		break;
+	}
+
+out:
+	return ret_val;
+}
+
+/**
+ *  e1000_init_nvm_params_82571 - Init NVM func ptrs.
[...17738 lines suppressed...]
+		phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
+		phy->local_rx = e1000_1000t_rx_status_undefined;
+		phy->remote_rx = e1000_1000t_rx_status_undefined;
+	}
+
+out:
+	return ret_val;
+}
+
+/**
+ *  e1000_phy_sw_reset - PHY software reset
+ *  @hw: pointer to the HW structure
+ *
+ *  Does a software reset of the PHY by reading the PHY control register and
+ *  setting/write the control register reset bit to the PHY.
+ **/
+s32 e1000_phy_sw_reset(struct e1000_hw *hw)
+{
+	s32 ret_val;
+	u16 phy_ctrl;
+
+	ret_val = e1e_rphy(hw, PHY_CONTROL, &phy_ctrl);
+	if (ret_val)
+		goto out;
+
+	phy_ctrl |= MII_CR_RESET;
+	ret_val = e1e_wphy(hw, PHY_CONTROL, phy_ctrl);
+	if (ret_val)
+		goto out;
+
+	udelay(1);
+
+out:
+	return ret_val;
+}
+
+/**
+ *  e1000_phy_hw_reset_generic - PHY hardware reset
+ *  @hw: pointer to the HW structure
+ *
+ *  Verify the reset block is not blocking us from resetting.  Acquire
+ *  semaphore (if necessary) and read/set/write the device control reset
+ *  bit in the PHY.  Wait the appropriate delay time for the device to
+ *  reset and relase the semaphore (if necessary).
+ **/
+s32 e1000_phy_hw_reset_generic(struct e1000_hw *hw)
+{
+	struct e1000_phy_info *phy = &hw->phy;
+	s32  ret_val;
+	u32 ctrl;
+
+	ret_val = e1000_check_reset_block(hw);
+	if (ret_val) {
+		ret_val = E1000_SUCCESS;
+		goto out;
+	}
+
+	ret_val = phy->ops.acquire_phy(hw);
+	if (ret_val)
+		goto out;
+
+	ctrl = er32(CTRL);
+	ew32(CTRL, ctrl | E1000_CTRL_PHY_RST);
+	e1e_flush();
+
+	udelay(phy->reset_delay_us);
+
+	ew32(CTRL, ctrl);
+	e1e_flush();
+
+	udelay(150);
+
+	phy->ops.release_phy(hw);
+
+	ret_val = e1000_get_phy_cfg_done(hw);
+
+out:
+	return ret_val;
+}
+
+/**
+ *  e1000_get_cfg_done - Generic configuration done
+ *  @hw: pointer to the HW structure
+ *
+ *  Generic function to wait 10 milli-seconds for configuration to complete
+ *  and return success.
+ **/
+s32 e1000_get_cfg_done(struct e1000_hw *hw)
+{
+	mdelay(10);
+
+	return E1000_SUCCESS;
+}
+
+/* Internal function pointers */
+
+/**
+ *  e1000_get_phy_cfg_done - Generic PHY configuration done
+ *  @hw: pointer to the HW structure
+ *
+ *  Return success if silicon family did not implement a family specific
+ *  get_cfg_done function.
+ **/
+static s32 e1000_get_phy_cfg_done(struct e1000_hw *hw)
+{
+	if (hw->phy.ops.get_cfg_done)
+		return hw->phy.ops.get_cfg_done(hw);
+	else
+		return E1000_SUCCESS;
+}
+
+/**
+ *  e1000_phy_force_speed_duplex - Generic force PHY speed/duplex
+ *  @hw: pointer to the HW structure
+ *
+ *  When the silicon family has not implemented a forced speed/duplex
+ *  function for the PHY, simply return E1000_SUCCESS.
+ **/
+static s32 e1000_phy_force_speed_duplex(struct e1000_hw *hw)
+{
+	if (hw->phy.ops.force_speed_duplex)
+		return hw->phy.ops.force_speed_duplex(hw);
+	else
+		return E1000_SUCCESS;
+}
+
+/**
+ *  e1000_get_phy_type_from_id - Get PHY type from id
+ *  @phy_id: phy_id read from the phy
+ *
+ *  Returns the phy type from the id.
+ **/
+enum e1000_phy_type e1000_get_phy_type_from_id(u32 phy_id)
+{
+	enum e1000_phy_type phy_type = e1000_phy_unknown;
+
+	switch (phy_id) {
+	case M88E1000_I_PHY_ID:
+	case M88E1000_E_PHY_ID:
+	case M88E1111_I_PHY_ID:
+	case M88E1011_I_PHY_ID:
+		phy_type = e1000_phy_m88;
+		break;
+	case IGP01E1000_I_PHY_ID: /* IGP 1 & 2 share this */
+		phy_type = e1000_phy_igp_2;
+		break;
+	case GG82563_E_PHY_ID:
+		phy_type = e1000_phy_gg82563;
+		break;
+	case IGP03E1000_E_PHY_ID:
+		phy_type = e1000_phy_igp_3;
+		break;
+	case IFE_E_PHY_ID:
+	case IFE_PLUS_E_PHY_ID:
+	case IFE_C_E_PHY_ID:
+		phy_type = e1000_phy_ife;
+		break;
+	default:
+		phy_type = e1000_phy_unknown;
+		break;
+	}
+	return phy_type;
+}
+
+/**
+ *  e1000_commit_phy - Soft PHY reset
+ *  @hw: pointer to the HW structure
+ *
+ *  Performs a soft PHY reset on those that apply. This is a function pointer
+ *  entry point called by drivers.
+ **/
+s32 e1000_commit_phy(struct e1000_hw *hw)
+{
+	if (hw->phy.ops.commit_phy)
+		return hw->phy.ops.commit_phy(hw);
+	else
+		return E1000_SUCCESS;
+}
+
+/**
+ *  e1000_set_d0_lplu_state - Sets low power link up state for D0
+ *  @hw: pointer to the HW structure
+ *  @active: boolean used to enable/disable lplu
+ *
+ *  Success returns 0, Failure returns 1
+ *
+ *  The low power link up (lplu) state is set to the power management level D0
+ *  and SmartSpeed is disabled when active is true, else clear lplu for D0
+ *  and enable Smartspeed.  LPLU and Smartspeed are mutually exclusive.  LPLU
+ *  is used during Dx states where the power conservation is most important.
+ *  During driver activity, SmartSpeed should be enabled so performance is
+ *  maintained.  This is a function pointer entry point called by drivers.
+ **/
+s32 e1000_set_d0_lplu_state(struct e1000_hw *hw, bool active)
+{
+	if (hw->phy.ops.set_d0_lplu_state)
+		return hw->phy.ops.set_d0_lplu_state(hw, active);
+	else
+		return E1000_SUCCESS;
+}

linux-2.6-netdev-e1000e-02.patch:

--- NEW FILE linux-2.6-netdev-e1000e-02.patch ---
From: Auke Kok <auke-jan.h.kok at intel.com>
Date: Wed, 8 Aug 2007 17:21:52 +0000 (-0700)
Subject: e1000e: Remove unused or empty labels
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fjgarzik%2Fnetdev-2.6.git;a=commitdiff_plain;h=3ee7c3bfcc0cc2048cc5d53dd792375e52fe930c

e1000e: Remove unused or empty labels

Remove labels with only return, remove E1000_SUCCESS code and
replace with 0. Remove most goto's.

Signed-off-by: Auke Kok <auke-jan.h.kok at intel.com>
Signed-off-by: Jeff Garzik <jeff at garzik.org>
---

diff --git a/drivers/net/e1000e/82571.c b/drivers/net/e1000e/82571.c
index a1b9d16..ddf2303 100644
--- a/drivers/net/e1000e/82571.c
+++ b/drivers/net/e1000e/82571.c
@@ -67,11 +67,11 @@ static void e1000_clear_hw_cntrs_82571(struct e1000_hw *hw);
 static s32 e1000_init_phy_params_82571(struct e1000_hw *hw)
 {
 	struct e1000_phy_info *phy = &hw->phy;
-	s32 ret_val = E1000_SUCCESS;
+	s32 ret_val;
 
 	if (hw->media_type != e1000_media_type_copper) {
 		phy->type = e1000_phy_none;
-		goto out;
+		return 0;
 	}
 
 	phy->addr			 = 1;
@@ -87,8 +87,7 @@ static s32 e1000_init_phy_params_82571(struct e1000_hw *hw)
 		phy->type		 = e1000_phy_m88;
 		break;
 	default:
-		ret_val = -E1000_ERR_PHY;
-		goto out;
+		return -E1000_ERR_PHY;
 		break;
 	}
 
@@ -99,25 +98,19 @@ static s32 e1000_init_phy_params_82571(struct e1000_hw *hw)
 	switch (hw->mac.type) {
 	case e1000_82571:
 	case e1000_82572:
-		if (phy->id != IGP01E1000_I_PHY_ID) {
-			ret_val = -E1000_ERR_PHY;
-			goto out;
-		}
+		if (phy->id != IGP01E1000_I_PHY_ID)
+			return -E1000_ERR_PHY;
 		break;
 	case e1000_82573:
-		if (phy->id != M88E1111_I_PHY_ID) {
-			ret_val = -E1000_ERR_PHY;
-			goto out;
-		}
+		if (phy->id != M88E1111_I_PHY_ID)
+			return -E1000_ERR_PHY;
 		break;
 	default:
-		ret_val = -E1000_ERR_PHY;
-		goto out;
+		return -E1000_ERR_PHY;
 		break;
 	}
 
-out:
-	return ret_val;
+	return 0;
 }
 
 /**
@@ -174,7 +167,7 @@ static s32 e1000_init_nvm_params_82571(struct e1000_hw *hw)
 		break;
 	}
 
-	return E1000_SUCCESS;
+	return 0;
 }
 
 /**
@@ -188,7 +181,6 @@ static s32 e1000_init_mac_params_82571(struct e1000_adapter *adapter)
 	struct e1000_hw *hw = &adapter->hw;
 	struct e1000_mac_info *mac = &hw->mac;
 	struct e1000_mac_operations *func = &mac->ops;
-	s32 ret_val = E1000_SUCCESS;
 
 	/* Set media type */
 	switch (adapter->pdev->device) {
@@ -232,13 +224,11 @@ static s32 e1000_init_mac_params_82571(struct e1000_adapter *adapter)
 		func->get_link_up_info = e1000_get_speed_and_duplex_fiber_serdes;
 		break;
 	default:
-		ret_val = -E1000_ERR_CONFIG;
-		goto out;
+		return -E1000_ERR_CONFIG;
 		break;
 	}
 
-out:
-	return ret_val;
+	return 0;
 }
 
 static s32 e1000_get_invariants_82571(struct e1000_adapter *adapter)
@@ -306,7 +296,7 @@ static s32 e1000_get_invariants_82571(struct e1000_adapter *adapter)
 		break;
 	}
 
-	return E1000_SUCCESS;
+	return 0;
 }
 
 /**
@@ -319,7 +309,6 @@ static s32 e1000_get_invariants_82571(struct e1000_adapter *adapter)
 static s32 e1000_get_phy_id_82571(struct e1000_hw *hw)
 {
 	struct e1000_phy_info *phy = &hw->phy;
-	s32 ret_val = E1000_SUCCESS;
 
 	switch (hw->mac.type) {
 	case e1000_82571:
@@ -331,14 +320,14 @@ static s32 e1000_get_phy_id_82571(struct e1000_hw *hw)
 		phy->id = IGP01E1000_I_PHY_ID;
 		break;
 	case e1000_82573:
-		ret_val = e1000_get_phy_id(hw);
+		return e1000_get_phy_id(hw);
 		break;
 	default:
-		ret_val = -E1000_ERR_PHY;
+		return -E1000_ERR_PHY;
 		break;
 	}
 
-	return ret_val;
+	return 0;
 }
 
 /**
@@ -350,7 +339,6 @@ static s32 e1000_get_phy_id_82571(struct e1000_hw *hw)
 static s32 e1000_get_hw_semaphore_82571(struct e1000_hw *hw)
 {
 	u32 swsm;
-	s32 ret_val = E1000_SUCCESS;
 	s32 timeout = hw->nvm.word_size + 1;
 	s32 i = 0;
 
@@ -370,12 +358,10 @@ static s32 e1000_get_hw_semaphore_82571(struct e1000_hw *hw)
 		/* Release semaphores */
 		e1000_put_hw_semaphore(hw);
 		hw_dbg(hw, "Driver can't access the NVM\n");
-		ret_val = -E1000_ERR_NVM;
-		goto out;
+		return -E1000_ERR_NVM;
 	}
 
-out:
-	return ret_val;
+	return 0;
 }
 
 /**
@@ -410,7 +396,7 @@ static s32 e1000_acquire_nvm_82571(struct e1000_hw *hw)
 
 	ret_val = e1000_get_hw_semaphore_82571(hw);
 	if (ret_val)
-		goto out;
+		return ret_val;
 
 	if (hw->mac.type != e1000_82573)
 		ret_val = e1000_acquire_nvm(hw);
@@ -418,7 +404,6 @@ static s32 e1000_acquire_nvm_82571(struct e1000_hw *hw)
 	if (ret_val)
 		e1000_put_hw_semaphore_82571(hw);
 
-out:
 	return ret_val;
 }
 
@@ -449,7 +434,7 @@ static void e1000_release_nvm_82571(struct e1000_hw *hw)
 static s32 e1000_write_nvm_82571(struct e1000_hw *hw, u16 offset, u16 words,
 				 u16 *data)
 {
-	s32 ret_val = E1000_SUCCESS;
+	s32 ret_val;
 
 	switch (hw->mac.type) {
 	case e1000_82573:
@@ -483,12 +468,12 @@ static s32 e1000_update_nvm_checksum_82571(struct e1000_hw *hw)
 
 	ret_val = e1000_update_nvm_checksum_generic(hw);
 	if (ret_val)
-		goto out;
+		return ret_val;
 
 	/* If our nvm is an EEPROM, then we're done
[...3959 lines suppressed...]
 
 	phy->polarity_correction = (phy_data &
 				    M88E1000_PSCR_POLARITY_REVERSAL);
 
 	ret_val = e1000_check_polarity_m88(hw);
 	if (ret_val)
-		goto out;
+		return ret_val;
 
 	ret_val = e1e_rphy(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
 	if (ret_val)
-		goto out;
+		return ret_val;
 
 	phy->is_mdix = (phy_data & M88E1000_PSSR_MDIX);
 
 	if ((phy_data & M88E1000_PSSR_SPEED) == M88E1000_PSSR_1000MBS) {
 		ret_val = e1000_get_cable_length(hw);
 		if (ret_val)
-			goto out;
+			return ret_val;
 
 		ret_val = e1e_rphy(hw, PHY_1000T_STATUS, &phy_data);
 		if (ret_val)
-			goto out;
+			return ret_val;
 
 		phy->local_rx = (phy_data & SR_1000T_LOCAL_RX_STATUS)
 				? e1000_1000t_rx_status_ok
@@ -1559,7 +1517,6 @@ s32 e1000_get_phy_info_m88(struct e1000_hw *hw)
 		phy->remote_rx = e1000_1000t_rx_status_undefined;
 	}
 
-out:
 	return ret_val;
 }
 
@@ -1581,23 +1538,22 @@ s32 e1000_get_phy_info_igp(struct e1000_hw *hw)
 
 	ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link);
 	if (ret_val)
-		goto out;
+		return ret_val;
 
 	if (!link) {
 		hw_dbg(hw, "Phy info is only valid if link is up\n");
-		ret_val = -E1000_ERR_CONFIG;
-		goto out;
+		return -E1000_ERR_CONFIG;
 	}
 
 	phy->polarity_correction = 1;
 
 	ret_val = e1000_check_polarity_igp(hw);
 	if (ret_val)
-		goto out;
+		return ret_val;
 
 	ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_STATUS, &data);
 	if (ret_val)
-		goto out;
+		return ret_val;
 
 	phy->is_mdix = (data & IGP01E1000_PSSR_MDIX);
 
@@ -1605,11 +1561,11 @@ s32 e1000_get_phy_info_igp(struct e1000_hw *hw)
 	    IGP01E1000_PSSR_SPEED_1000MBPS) {
 		ret_val = e1000_get_cable_length(hw);
 		if (ret_val)
-			goto out;
+			return ret_val;
 
 		ret_val = e1e_rphy(hw, PHY_1000T_STATUS, &data);
 		if (ret_val)
-			goto out;
+			return ret_val;
 
 		phy->local_rx = (data & SR_1000T_LOCAL_RX_STATUS)
 				? e1000_1000t_rx_status_ok
@@ -1624,7 +1580,6 @@ s32 e1000_get_phy_info_igp(struct e1000_hw *hw)
 		phy->remote_rx = e1000_1000t_rx_status_undefined;
 	}
 
-out:
 	return ret_val;
 }
 
@@ -1642,16 +1597,15 @@ s32 e1000_phy_sw_reset(struct e1000_hw *hw)
 
 	ret_val = e1e_rphy(hw, PHY_CONTROL, &phy_ctrl);
 	if (ret_val)
-		goto out;
+		return ret_val;
 
 	phy_ctrl |= MII_CR_RESET;
 	ret_val = e1e_wphy(hw, PHY_CONTROL, phy_ctrl);
 	if (ret_val)
-		goto out;
+		return ret_val;
 
 	udelay(1);
 
-out:
 	return ret_val;
 }
 
@@ -1667,18 +1621,16 @@ out:
 s32 e1000_phy_hw_reset_generic(struct e1000_hw *hw)
 {
 	struct e1000_phy_info *phy = &hw->phy;
-	s32  ret_val;
+	s32 ret_val;
 	u32 ctrl;
 
 	ret_val = e1000_check_reset_block(hw);
-	if (ret_val) {
-		ret_val = E1000_SUCCESS;
-		goto out;
-	}
+	if (ret_val)
+		return 0;
 
 	ret_val = phy->ops.acquire_phy(hw);
 	if (ret_val)
-		goto out;
+		return ret_val;
 
 	ctrl = er32(CTRL);
 	ew32(CTRL, ctrl | E1000_CTRL_PHY_RST);
@@ -1693,10 +1645,7 @@ s32 e1000_phy_hw_reset_generic(struct e1000_hw *hw)
 
 	phy->ops.release_phy(hw);
 
-	ret_val = e1000_get_phy_cfg_done(hw);
-
-out:
-	return ret_val;
+	return e1000_get_phy_cfg_done(hw);
 }
 
 /**
@@ -1709,8 +1658,7 @@ out:
 s32 e1000_get_cfg_done(struct e1000_hw *hw)
 {
 	mdelay(10);
-
-	return E1000_SUCCESS;
+	return 0;
 }
 
 /* Internal function pointers */
@@ -1726,8 +1674,8 @@ static s32 e1000_get_phy_cfg_done(struct e1000_hw *hw)
 {
 	if (hw->phy.ops.get_cfg_done)
 		return hw->phy.ops.get_cfg_done(hw);
-	else
-		return E1000_SUCCESS;
+
+	return 0;
 }
 
 /**
@@ -1735,14 +1683,14 @@ static s32 e1000_get_phy_cfg_done(struct e1000_hw *hw)
  *  @hw: pointer to the HW structure
  *
  *  When the silicon family has not implemented a forced speed/duplex
- *  function for the PHY, simply return E1000_SUCCESS.
+ *  function for the PHY, simply return 0.
  **/
 static s32 e1000_phy_force_speed_duplex(struct e1000_hw *hw)
 {
 	if (hw->phy.ops.force_speed_duplex)
 		return hw->phy.ops.force_speed_duplex(hw);
-	else
-		return E1000_SUCCESS;
+
+	return 0;
 }
 
 /**
@@ -1794,8 +1742,8 @@ s32 e1000_commit_phy(struct e1000_hw *hw)
 {
 	if (hw->phy.ops.commit_phy)
 		return hw->phy.ops.commit_phy(hw);
-	else
-		return E1000_SUCCESS;
+
+	return 0;
 }
 
 /**
@@ -1816,6 +1764,6 @@ s32 e1000_set_d0_lplu_state(struct e1000_hw *hw, bool active)
 {
 	if (hw->phy.ops.set_d0_lplu_state)
 		return hw->phy.ops.set_d0_lplu_state(hw, active);
-	else
-		return E1000_SUCCESS;
+
+	return 0;
 }

linux-2.6-netdev-e1000e-03.patch:

--- NEW FILE linux-2.6-netdev-e1000e-03.patch ---
From: Auke Kok <auke-jan.h.kok at intel.com>
Date: Wed, 8 Aug 2007 17:22:11 +0000 (-0700)
Subject: e1000e: Make a few functions static
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fjgarzik%2Fnetdev-2.6.git;a=commitdiff_plain;h=604694f8c19065ee960887d97716d57107ca9a34

e1000e: Make a few functions static

After moving code around we can reduce namespace usage
by making a few functions static.

Signed-off-by: Auke Kok <auke-jan.h.kok at intel.com>
Signed-off-by: Jeff Garzik <jeff at garzik.org>
---

diff --git a/drivers/net/e1000e/e1000.h b/drivers/net/e1000e/e1000.h
index 65c31d3..a1394d6 100644
--- a/drivers/net/e1000e/e1000.h
+++ b/drivers/net/e1000e/e1000.h
@@ -365,7 +365,6 @@ extern struct e1000_info e1000_ich9_info;
 extern struct e1000_info e1000_es2_info;
 
 extern s32  e1000_commit_phy(struct e1000_hw *hw);
-extern s32  e1000_set_d0_lplu_state(struct e1000_hw *hw, bool active);
 
 extern bool e1000_enable_mng_pass_thru(struct e1000_hw *hw);
 
@@ -438,7 +437,6 @@ extern s32 e1000_phy_has_link_generic(struct e1000_hw *hw, u32 iterations,
 			       u32 usec_interval, bool *success);
 extern s32 e1000_phy_reset_dsp(struct e1000_hw *hw);
 extern s32 e1000_check_downshift(struct e1000_hw *hw);
-extern s32 e1000_wait_autoneg(struct e1000_hw *hw);
 
 static inline s32 e1000_phy_hw_reset(struct e1000_hw *hw)
 {
diff --git a/drivers/net/e1000e/lib.c b/drivers/net/e1000e/lib.c
index d11b518..3bbe63e 100644
--- a/drivers/net/e1000e/lib.c
+++ b/drivers/net/e1000e/lib.c
@@ -2289,7 +2289,7 @@ bool e1000_enable_tx_pkt_filtering(struct e1000_hw *hw)
  *
  *  Writes the command header after does the checksum calculation.
  **/
-s32 e1000_mng_write_cmd_header(struct e1000_hw *hw,
+static s32 e1000_mng_write_cmd_header(struct e1000_hw *hw,
 				  struct e1000_host_mng_command_header *hdr)
 {
 	u16 i, length = sizeof(struct e1000_host_mng_command_header);
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index c8d50cc..dd4eca6 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -48,7 +48,7 @@
 char e1000_driver_name[] = "e1000e";
 const char e1000_driver_version[] = DRV_VERSION;
 
-const struct e1000_info * e1000_info_tbl[] = {
+static const struct e1000_info *e1000_info_tbl[] = {
 	[board_82571]		= &e1000_82571_info,
 	[board_82572]		= &e1000_82572_info,
 	[board_82573]		= &e1000_82573_info,
diff --git a/drivers/net/e1000e/phy.c b/drivers/net/e1000e/phy.c
index d7947b0..1ccbad7 100644
--- a/drivers/net/e1000e/phy.c
+++ b/drivers/net/e1000e/phy.c
@@ -28,8 +28,10 @@
 
 #include "e1000.h"
 
-static s32  e1000_get_phy_cfg_done(struct e1000_hw *hw);
-static s32  e1000_phy_force_speed_duplex(struct e1000_hw *hw);
+static s32 e1000_get_phy_cfg_done(struct e1000_hw *hw);
+static s32 e1000_phy_force_speed_duplex(struct e1000_hw *hw);
+static s32 e1000_set_d0_lplu_state(struct e1000_hw *hw, bool active);
+static s32 e1000_wait_autoneg(struct e1000_hw *hw);
 
 /* Cable length tables */
 static const u16 e1000_m88_cable_length_table[] =
@@ -1281,7 +1283,7 @@ static s32 e1000_check_polarity_igp(struct e1000_hw *hw)
  *  Waits for auto-negotiation to complete or for the auto-negotiation time
  *  limit to expire, which ever happens first.
  **/
-s32 e1000_wait_autoneg(struct e1000_hw *hw)
+static s32 e1000_wait_autoneg(struct e1000_hw *hw)
 {
 	s32 ret_val = 0;
 	u16 i, phy_status;
@@ -1760,7 +1762,7 @@ s32 e1000_commit_phy(struct e1000_hw *hw)
  *  During driver activity, SmartSpeed should be enabled so performance is
  *  maintained.  This is a function pointer entry point called by drivers.
  **/
-s32 e1000_set_d0_lplu_state(struct e1000_hw *hw, bool active)
+static s32 e1000_set_d0_lplu_state(struct e1000_hw *hw, bool active)
 {
 	if (hw->phy.ops.set_d0_lplu_state)
 		return hw->phy.ops.set_d0_lplu_state(hw, active);

linux-2.6-netdev-e1000e-04.patch:

--- NEW FILE linux-2.6-netdev-e1000e-04.patch ---
From: Auke Kok <auke-jan.h.kok at intel.com>
Date: Wed, 8 Aug 2007 17:22:21 +0000 (-0700)
Subject: e1000e: remove duplicate shadowing reference to adapter->hw
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fjgarzik%2Fnetdev-2.6.git;a=commitdiff_plain;h=5b8fe1c4280c9424a5fc03d8e8e13c1b4cde22f0

e1000e: remove duplicate shadowing reference to adapter->hw

Signed-off-by: Auke Kok <auke-jan.h.kok at intel.com>
Signed-off-by: Jeff Garzik <jeff at garzik.org>
---

diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index dd4eca6..741965d 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -2981,7 +2981,6 @@ static void e1000_watchdog_task(struct work_struct *work)
 		} else {
 			/* make sure the receive unit is started */
 			if (adapter->flags & FLAG_RX_NEEDS_RESTART) {
-				struct e1000_hw *hw = &adapter->hw;
 				u32 rctl = er32(RCTL);
 				ew32(RCTL, rctl |
 						E1000_RCTL_EN);

linux-2.6-netdev-e1000e-05.patch:

--- NEW FILE linux-2.6-netdev-e1000e-05.patch ---
From: Auke Kok <auke-jan.h.kok at intel.com>
Date: Fri, 10 Aug 2007 20:00:38 +0000 (-0700)
Subject: e1000e: Fix header includes [v2]
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fjgarzik%2Fnetdev-2.6.git;a=commitdiff_plain;h=867dbd1bea13a265f10a0685488e486836fb3910

e1000e: Fix header includes [v2]

Signed-off-by: Auke Kok <auke-jan.h.kok at intel.com>
Signed-off-by: Jeff Garzik <jeff at garzik.org>
---

diff --git a/drivers/net/e1000e/82571.c b/drivers/net/e1000e/82571.c
index ddf2303..0f8f0ac 100644
--- a/drivers/net/e1000e/82571.c
+++ b/drivers/net/e1000e/82571.c
@@ -37,6 +37,10 @@
  * 82573L Gigabit Ethernet Controller
  */
 
+#include <linux/netdevice.h>
+#include <linux/delay.h>
+#include <linux/pci.h>
+
 #include "e1000.h"
 
 #define ID_LED_RESERVED_F746 0xF746
diff --git a/drivers/net/e1000e/e1000.h b/drivers/net/e1000e/e1000.h
index a1394d6..de17537 100644
--- a/drivers/net/e1000e/e1000.h
+++ b/drivers/net/e1000e/e1000.h
@@ -31,10 +31,11 @@
 #ifndef _E1000_H_
 #define _E1000_H_
 
+#include <linux/types.h>
+#include <linux/timer.h>
+#include <linux/workqueue.h>
+#include <linux/io.h>
 #include <linux/netdevice.h>
-#include <linux/ethtool.h>
-#include <linux/pci.h>
-#include <asm/io.h>
 
 #include "hw.h"
 
diff --git a/drivers/net/e1000e/es2lan.c b/drivers/net/e1000e/es2lan.c
index 5604c50..8100d03 100644
--- a/drivers/net/e1000e/es2lan.c
+++ b/drivers/net/e1000e/es2lan.c
@@ -31,6 +31,11 @@
  * 80003ES2LAN Gigabit Ethernet Controller (Serdes)
  */
 
+#include <linux/netdevice.h>
+#include <linux/ethtool.h>
+#include <linux/delay.h>
+#include <linux/pci.h>
+
 #include "e1000.h"
 
 #define E1000_KMRNCTRLSTA_OFFSET_FIFO_CTRL	 0x00
diff --git a/drivers/net/e1000e/ethtool.c b/drivers/net/e1000e/ethtool.c
index 6c417ea..a8fa1db 100644
--- a/drivers/net/e1000e/ethtool.c
+++ b/drivers/net/e1000e/ethtool.c
@@ -29,8 +29,9 @@
 /* ethtool support for e1000 */
 
 #include <linux/netdevice.h>
-
 #include <linux/ethtool.h>
+#include <linux/pci.h>
+#include <linux/delay.h>
 
 #include "e1000.h"
 
diff --git a/drivers/net/e1000e/hw.h b/drivers/net/e1000e/hw.h
index 4d562c4..848217a 100644
--- a/drivers/net/e1000e/hw.h
+++ b/drivers/net/e1000e/hw.h
@@ -29,6 +29,8 @@
 #ifndef _E1000_HW_H_
 #define _E1000_HW_H_
 
+#include <linux/types.h>
+
 struct e1000_hw;
 struct e1000_adapter;
 
diff --git a/drivers/net/e1000e/ich8lan.c b/drivers/net/e1000e/ich8lan.c
index 042abd4..85095af 100644
--- a/drivers/net/e1000e/ich8lan.c
+++ b/drivers/net/e1000e/ich8lan.c
@@ -40,6 +40,11 @@
  * 82566MM Gigabit Network Connection
  */
 
+#include <linux/netdevice.h>
+#include <linux/ethtool.h>
+#include <linux/delay.h>
+#include <linux/pci.h>
+
 #include "e1000.h"
 
 #define ICH_FLASH_GFPREG		0x0000
diff --git a/drivers/net/e1000e/lib.c b/drivers/net/e1000e/lib.c
index 3bbe63e..c92ea77 100644
--- a/drivers/net/e1000e/lib.c
+++ b/drivers/net/e1000e/lib.c
@@ -27,6 +27,8 @@
 *******************************************************************************/
 
 #include <linux/netdevice.h>
+#include <linux/ethtool.h>
+#include <linux/delay.h>
 #include <linux/pci.h>
 
 #include "e1000.h"
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index 741965d..01a9a4f 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -29,8 +29,10 @@
 #include <linux/module.h>
 #include <linux/types.h>
 #include <linux/init.h>
+#include <linux/pci.h>
 #include <linux/vmalloc.h>
 #include <linux/pagemap.h>
+#include <linux/delay.h>
 #include <linux/netdevice.h>
 #include <linux/tcp.h>
 #include <linux/ipv6.h>
diff --git a/drivers/net/e1000e/phy.c b/drivers/net/e1000e/phy.c
index 1ccbad7..c9304d8 100644
--- a/drivers/net/e1000e/phy.c
+++ b/drivers/net/e1000e/phy.c
@@ -26,6 +26,8 @@
 
 *******************************************************************************/
 
+#include <linux/delay.h>
+
 #include "e1000.h"
 
 static s32 e1000_get_phy_cfg_done(struct e1000_hw *hw);

linux-2.6-netdev-e1000e-06.patch:

--- NEW FILE linux-2.6-netdev-e1000e-06.patch ---
From: Auke Kok <auke-jan.h.kok at intel.com>
Date: Fri, 10 Aug 2007 20:00:47 +0000 (-0700)
Subject: e1000e: remove namespace collisions with e1000
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fjgarzik%2Fnetdev-2.6.git;a=commitdiff_plain;h=9c1a53eb0d1c4d8039a74e6408b39c9c0690d3af

e1000e: remove namespace collisions with e1000

To prevent future collisions we rename all extern's from e1000_
to e1000e_*. The list of changed symbols was taken from e1000.h
Compile tested with CONFIG_E1000=y and CONFIG_E1000E=y.

Signed-off-by: Auke Kok <auke-jan.h.kok at intel.com>
Signed-off-by: Jeff Garzik <jeff at garzik.org>
---

diff --git a/drivers/net/e1000e/82571.c b/drivers/net/e1000e/82571.c
index 0f8f0ac..cf70522 100644
--- a/drivers/net/e1000e/82571.c
+++ b/drivers/net/e1000e/82571.c
@@ -54,7 +54,6 @@
 static s32 e1000_get_phy_id_82571(struct e1000_hw *hw);
 static s32 e1000_setup_copper_link_82571(struct e1000_hw *hw);
 static s32 e1000_setup_fiber_serdes_link_82571(struct e1000_hw *hw);
-static s32 e1000_get_phy_id_82571(struct e1000_hw *hw);
 static s32 e1000_write_nvm_eewr_82571(struct e1000_hw *hw, u16 offset,
 				      u16 words, u16 *data);
 static s32 e1000_fix_nvm_checksum_82571(struct e1000_hw *hw);
@@ -214,18 +213,18 @@ static s32 e1000_init_mac_params_82571(struct e1000_adapter *adapter)
 	switch (hw->media_type) {
 	case e1000_media_type_copper:
 		func->setup_physical_interface = e1000_setup_copper_link_82571;
-		func->check_for_link = e1000_check_for_copper_link;
-		func->get_link_up_info = e1000_get_speed_and_duplex_copper;
+		func->check_for_link = e1000e_check_for_copper_link;
+		func->get_link_up_info = e1000e_get_speed_and_duplex_copper;
 		break;
 	case e1000_media_type_fiber:
 		func->setup_physical_interface = e1000_setup_fiber_serdes_link_82571;
-		func->check_for_link = e1000_check_for_fiber_link;
-		func->get_link_up_info = e1000_get_speed_and_duplex_fiber_serdes;
+		func->check_for_link = e1000e_check_for_fiber_link;
+		func->get_link_up_info = e1000e_get_speed_and_duplex_fiber_serdes;
 		break;
 	case e1000_media_type_internal_serdes:
 		func->setup_physical_interface = e1000_setup_fiber_serdes_link_82571;
-		func->check_for_link = e1000_check_for_serdes_link;
-		func->get_link_up_info = e1000_get_speed_and_duplex_fiber_serdes;
+		func->check_for_link = e1000e_check_for_serdes_link;
+		func->get_link_up_info = e1000e_get_speed_and_duplex_fiber_serdes;
 		break;
 	default:
 		return -E1000_ERR_CONFIG;
@@ -324,7 +323,7 @@ static s32 e1000_get_phy_id_82571(struct e1000_hw *hw)
 		phy->id = IGP01E1000_I_PHY_ID;
 		break;
 	case e1000_82573:
-		return e1000_get_phy_id(hw);
+		return e1000e_get_phy_id(hw);
 		break;
 	default:
 		return -E1000_ERR_PHY;
@@ -360,7 +359,7 @@ static s32 e1000_get_hw_semaphore_82571(struct e1000_hw *hw)
 
 	if (i == timeout) {
 		/* Release semaphores */
-		e1000_put_hw_semaphore(hw);
+		e1000e_put_hw_semaphore(hw);
 		hw_dbg(hw, "Driver can't access the NVM\n");
 		return -E1000_ERR_NVM;
 	}
@@ -403,7 +402,7 @@ static s32 e1000_acquire_nvm_82571(struct e1000_hw *hw)
 		return ret_val;
 
 	if (hw->mac.type != e1000_82573)
-		ret_val = e1000_acquire_nvm(hw);
+		ret_val = e1000e_acquire_nvm(hw);
 
 	if (ret_val)
 		e1000_put_hw_semaphore_82571(hw);
@@ -419,7 +418,7 @@ static s32 e1000_acquire_nvm_82571(struct e1000_hw *hw)
  **/
 static void e1000_release_nvm_82571(struct e1000_hw *hw)
 {
-	e1000_release_nvm(hw);
+	e1000e_release_nvm(hw);
 	e1000_put_hw_semaphore_82571(hw);
 }
 
@@ -432,7 +431,7 @@ static void e1000_release_nvm_82571(struct e1000_hw *hw)
  *
  *  For non-82573 silicon, write data to EEPROM at offset using SPI interface.
  *
- *  If e1000_update_nvm_checksum is not called after this function, the
+ *  If e1000e_update_nvm_checksum is not called after this function, the
  *  EEPROM will most likley contain an invalid checksum.
  **/
 static s32 e1000_write_nvm_82571(struct e1000_hw *hw, u16 offset, u16 words,
@@ -446,7 +445,7 @@ static s32 e1000_write_nvm_82571(struct e1000_hw *hw, u16 offset, u16 words,
 		break;
 	case e1000_82571:
 	case e1000_82572:
-		ret_val = e1000_write_nvm_spi(hw, offset, words, data);
+		ret_val = e1000e_write_nvm_spi(hw, offset, words, data);
 		break;
 	default:
 		ret_val = -E1000_ERR_NVM;
@@ -470,7 +469,7 @@ static s32 e1000_update_nvm_checksum_82571(struct e1000_hw *hw)
 	s32 ret_val;
 	u16 i;
 
-	ret_val = e1000_update_nvm_checksum_generic(hw);
+	ret_val = e1000e_update_nvm_checksum_generic(hw);
 	if (ret_val)
 		return ret_val;
 
@@ -527,7 +526,7 @@ static s32 e1000_validate_nvm_checksum_82571(struct e1000_hw *hw)
 	if (hw->nvm.type == e1000_nvm_flash_hw)
 		e1000_fix_nvm_checksum_82571(hw);
 
-	return e1000_validate_nvm_checksum_generic(hw);
+	return e1000e_validate_nvm_checksum_generic(hw);
 }
 
 /**
@@ -541,7 +540,7 @@ static s32 e1000_validate_nvm_checksum_82571(struct e1000_hw *hw)
  *  command has completed before trying to write the next word.  After write
  *  poll for completion.
  *
- *  If e1000_update_nvm_checksum is not called after this function, the
+ *  If e1000e_update_nvm_checksum is not called after this function, the
  *  EEPROM will most likley contain an invalid checksum.
  **/
 static s32 e1000_write_nvm_eewr_82571(struct e1000_hw *hw, u16 offset,
@@ -565,13 +564,13 @@ static s32 e1000_write_nvm_eewr_82571(struct e1000_hw *hw, u16 offset,
 		       ((offset+i) << E1000_NVM_RW_ADDR_SHIFT) |
 		       E1000_NVM_RW_REG_START;
 
-		ret_val = e1000_poll_eerd_eewr_done(hw, E1000_NVM_POLL_WRITE);
+		ret_val = e1000e_poll_eerd_eewr_done(hw, E1000_NVM_POLL_WRITE);
 		if (ret_val)
 			break;
 
 		ew32(EEWR, eewr);
 
-		ret_val = e1000_poll_eerd_eewr_done(hw, E1000_NVM_POLL_WRITE);
+		ret_val = e1000e_poll_eerd_eewr_done(hw, E1000_NVM_POLL_WRITE);
 		if (ret_val)
 			break;
 	}
@@ -691,7 +690,7 @@ static s32 e1000_reset_hw_82571(struct e1000_hw *hw)
 	/* Prevent the PCI-E bus from sticking if there is no TLP connection
 	 * on the last TLP read/write transaction when MAC is reset.
 	 */
-	ret_val = e1000_disable_pcie_master(hw);
+	ret_val = e1000e_disable_pcie_master(hw);
 	if (ret_val)
 		hw_dbg(hw, "PCI-E Master disable polling has failed.\n");
 
@@ -737,7 +736,7 @@ static s32 e1000_reset_hw_82571(struct e1000_hw *hw)
 		e1e_flush();
 	}
 
-	ret_val = e1000_get_auto_rd_done(hw);
+	ret_val = e1000e_get_auto_rd_done(hw);
 	if (ret_val)
 		/* We don't want to continue accessing MAC registers. */
 		return ret_val;
@@ -773,7 +772,7 @@ static s32 e1000_init_hw_82571(struct e1000_hw *hw)
 	e1000_initialize_hw_bits_82571(hw);
 
 	/* Initialize identification LED */
-	ret_val = e1000_id_led_init(hw);
+	ret_val = e1000e_id_led_init(hw);
 	if (ret_val) {
 		hw_dbg(hw, "Error initializing identification LED\n");
 		return ret_val;
@@ -781,16 +780,16 @@ static s32 e1000_init_hw_82571(struct e1000_hw *hw)
 
 	/* Disabling VLAN filtering */
 	hw_dbg(hw, "Initializing the IEEE VLAN\n");
-	e1000_clear_vfta(hw);
+	e1000e_clear_vfta(hw);
 
 	/* Setup the receive address. */
 	/* If, however, a locally administered address was assigned to the
 	 * 82571, we must reserve a RAR for it to work around an issue where
 	 * resetting one port will reload the MAC on the other port.
 	 */
-	if (e1000_get_laa_state_82571(hw))
+	if (e1000e_get_laa_state_82571(hw))
 		rar_count--;
-	e1000_init_rx_addrs(hw, rar_count);
+	e1000e_init_rx_addrs(hw, rar_count);
 
 	/* Zero out the Multicast HASH table */
 	hw_dbg(hw, "Zeroing the MTA\n");
@@ -815,7 +814,7 @@ static s32 e1000_init_hw_82571(struct e1000_hw *hw)
 			   E1000_TXDCTL_COUNT_DESC;
 		ew32(TXDCTL1, reg_data);
[...3378 lines suppressed...]
+ *  e1000e_check_downshift - Checks whether a downshift in speed occured
  *  @hw: pointer to the HW structure
  *
  *  Success returns 0, Failure returns 1
  *
  *  A downshift is detected by querying the PHY link health.
  **/
-s32 e1000_check_downshift(struct e1000_hw *hw)
+s32 e1000e_check_downshift(struct e1000_hw *hw)
 {
 	struct e1000_phy_info *phy = &hw->phy;
 	s32 ret_val;
@@ -1310,7 +1310,7 @@ static s32 e1000_wait_autoneg(struct e1000_hw *hw)
 }
 
 /**
- *  e1000_phy_has_link_generic - Polls PHY for link
+ *  e1000e_phy_has_link_generic - Polls PHY for link
  *  @hw: pointer to the HW structure
  *  @iterations: number of times to poll for link
  *  @usec_interval: delay between polling attempts
@@ -1318,7 +1318,7 @@ static s32 e1000_wait_autoneg(struct e1000_hw *hw)
  *
  *  Polls the PHY status register for link, 'iterations' number of times.
  **/
-s32 e1000_phy_has_link_generic(struct e1000_hw *hw, u32 iterations,
+s32 e1000e_phy_has_link_generic(struct e1000_hw *hw, u32 iterations,
 			       u32 usec_interval, bool *success)
 {
 	s32 ret_val;
@@ -1349,7 +1349,7 @@ s32 e1000_phy_has_link_generic(struct e1000_hw *hw, u32 iterations,
 }
 
 /**
- *  e1000_get_cable_length_m88 - Determine cable length for m88 PHY
+ *  e1000e_get_cable_length_m88 - Determine cable length for m88 PHY
  *  @hw: pointer to the HW structure
  *
  *  Reads the PHY specific status register to retrieve the cable length
@@ -1363,7 +1363,7 @@ s32 e1000_phy_has_link_generic(struct e1000_hw *hw, u32 iterations,
  *	3			110 - 140 meters
  *	4			> 140 meters
  **/
-s32 e1000_get_cable_length_m88(struct e1000_hw *hw)
+s32 e1000e_get_cable_length_m88(struct e1000_hw *hw)
 {
 	struct e1000_phy_info *phy = &hw->phy;
 	s32 ret_val;
@@ -1384,7 +1384,7 @@ s32 e1000_get_cable_length_m88(struct e1000_hw *hw)
 }
 
 /**
- *  e1000_get_cable_length_igp_2 - Determine cable length for igp2 PHY
+ *  e1000e_get_cable_length_igp_2 - Determine cable length for igp2 PHY
  *  @hw: pointer to the HW structure
  *
  *  The automatic gain control (agc) normalizes the amplitude of the
@@ -1394,7 +1394,7 @@ s32 e1000_get_cable_length_m88(struct e1000_hw *hw)
  *  into a lookup table to obtain the approximate cable length
  *  for each channel.
  **/
-s32 e1000_get_cable_length_igp_2(struct e1000_hw *hw)
+s32 e1000e_get_cable_length_igp_2(struct e1000_hw *hw)
 {
 	struct e1000_phy_info *phy = &hw->phy;
 	s32 ret_val;
@@ -1451,7 +1451,7 @@ s32 e1000_get_cable_length_igp_2(struct e1000_hw *hw)
 }
 
 /**
- *  e1000_get_phy_info_m88 - Retrieve PHY information
+ *  e1000e_get_phy_info_m88 - Retrieve PHY information
  *  @hw: pointer to the HW structure
  *
  *  Valid for only copper links.  Read the PHY status register (sticky read)
@@ -1460,7 +1460,7 @@ s32 e1000_get_cable_length_igp_2(struct e1000_hw *hw)
  *  special status register to determine MDI/MDIx and current speed.  If
  *  speed is 1000, then determine cable length, local and remote receiver.
  **/
-s32 e1000_get_phy_info_m88(struct e1000_hw *hw)
+s32 e1000e_get_phy_info_m88(struct e1000_hw *hw)
 {
 	struct e1000_phy_info *phy = &hw->phy;
 	s32  ret_val;
@@ -1472,7 +1472,7 @@ s32 e1000_get_phy_info_m88(struct e1000_hw *hw)
 		return -E1000_ERR_CONFIG;
 	}
 
-	ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link);
+	ret_val = e1000e_phy_has_link_generic(hw, 1, 0, &link);
 	if (ret_val)
 		return ret_val;
 
@@ -1525,7 +1525,7 @@ s32 e1000_get_phy_info_m88(struct e1000_hw *hw)
 }
 
 /**
- *  e1000_get_phy_info_igp - Retrieve igp PHY information
+ *  e1000e_get_phy_info_igp - Retrieve igp PHY information
  *  @hw: pointer to the HW structure
  *
  *  Read PHY status to determine if link is up.  If link is up, then
@@ -1533,14 +1533,14 @@ s32 e1000_get_phy_info_m88(struct e1000_hw *hw)
  *  PHY port status to determine MDI/MDIx and speed.  Based on the speed,
  *  determine on the cable length, local and remote receiver.
  **/
-s32 e1000_get_phy_info_igp(struct e1000_hw *hw)
+s32 e1000e_get_phy_info_igp(struct e1000_hw *hw)
 {
 	struct e1000_phy_info *phy = &hw->phy;
 	s32 ret_val;
 	u16 data;
 	bool link;
 
-	ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link);
+	ret_val = e1000e_phy_has_link_generic(hw, 1, 0, &link);
 	if (ret_val)
 		return ret_val;
 
@@ -1588,13 +1588,13 @@ s32 e1000_get_phy_info_igp(struct e1000_hw *hw)
 }
 
 /**
- *  e1000_phy_sw_reset - PHY software reset
+ *  e1000e_phy_sw_reset - PHY software reset
  *  @hw: pointer to the HW structure
  *
  *  Does a software reset of the PHY by reading the PHY control register and
  *  setting/write the control register reset bit to the PHY.
  **/
-s32 e1000_phy_sw_reset(struct e1000_hw *hw)
+s32 e1000e_phy_sw_reset(struct e1000_hw *hw)
 {
 	s32 ret_val;
 	u16 phy_ctrl;
@@ -1614,7 +1614,7 @@ s32 e1000_phy_sw_reset(struct e1000_hw *hw)
 }
 
 /**
- *  e1000_phy_hw_reset_generic - PHY hardware reset
+ *  e1000e_phy_hw_reset_generic - PHY hardware reset
  *  @hw: pointer to the HW structure
  *
  *  Verify the reset block is not blocking us from resetting.  Acquire
@@ -1622,7 +1622,7 @@ s32 e1000_phy_sw_reset(struct e1000_hw *hw)
  *  bit in the PHY.  Wait the appropriate delay time for the device to
  *  reset and relase the semaphore (if necessary).
  **/
-s32 e1000_phy_hw_reset_generic(struct e1000_hw *hw)
+s32 e1000e_phy_hw_reset_generic(struct e1000_hw *hw)
 {
 	struct e1000_phy_info *phy = &hw->phy;
 	s32 ret_val;
@@ -1653,13 +1653,13 @@ s32 e1000_phy_hw_reset_generic(struct e1000_hw *hw)
 }
 
 /**
- *  e1000_get_cfg_done - Generic configuration done
+ *  e1000e_get_cfg_done - Generic configuration done
  *  @hw: pointer to the HW structure
  *
  *  Generic function to wait 10 milli-seconds for configuration to complete
  *  and return success.
  **/
-s32 e1000_get_cfg_done(struct e1000_hw *hw)
+s32 e1000e_get_cfg_done(struct e1000_hw *hw)
 {
 	mdelay(10);
 	return 0;
@@ -1698,12 +1698,12 @@ static s32 e1000_phy_force_speed_duplex(struct e1000_hw *hw)
 }
 
 /**
- *  e1000_get_phy_type_from_id - Get PHY type from id
+ *  e1000e_get_phy_type_from_id - Get PHY type from id
  *  @phy_id: phy_id read from the phy
  *
  *  Returns the phy type from the id.
  **/
-enum e1000_phy_type e1000_get_phy_type_from_id(u32 phy_id)
+enum e1000_phy_type e1000e_get_phy_type_from_id(u32 phy_id)
 {
 	enum e1000_phy_type phy_type = e1000_phy_unknown;
 
@@ -1736,13 +1736,13 @@ enum e1000_phy_type e1000_get_phy_type_from_id(u32 phy_id)
 }
 
 /**
- *  e1000_commit_phy - Soft PHY reset
+ *  e1000e_commit_phy - Soft PHY reset
  *  @hw: pointer to the HW structure
  *
  *  Performs a soft PHY reset on those that apply. This is a function pointer
  *  entry point called by drivers.
  **/
-s32 e1000_commit_phy(struct e1000_hw *hw)
+s32 e1000e_commit_phy(struct e1000_hw *hw)
 {
 	if (hw->phy.ops.commit_phy)
 		return hw->phy.ops.commit_phy(hw);

linux-2.6-netdev-e1000e-07.patch:

--- NEW FILE linux-2.6-netdev-e1000e-07.patch ---
From: Auke Kok <auke-jan.h.kok at intel.com>
Date: Fri, 10 Aug 2007 20:00:52 +0000 (-0700)
Subject: e1000e: Use dma_alloc_coherent where possible
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fjgarzik%2Fnetdev-2.6.git;a=commitdiff_plain;h=5c0904d729b2161ab7559c5683832cb075c8e81d

e1000e: Use dma_alloc_coherent where possible

Instead of using pci_alloc_consistent at GFP_ATOMIC we can be
more reliable at startup and use dma_alloc_coherent instead with
GFP_KERNEL.

Signed-off-by: Auke Kok <auke-jan.h.kok at intel.com>
Signed-off-by: Jeff Garzik <jeff at garzik.org>
---

diff --git a/drivers/net/e1000e/ethtool.c b/drivers/net/e1000e/ethtool.c
index c9d74a8..d184116 100644
--- a/drivers/net/e1000e/ethtool.c
+++ b/drivers/net/e1000e/ethtool.c
@@ -962,13 +962,13 @@ static void e1000_free_desc_rings(struct e1000_adapter *adapter)
 	}
 
 	if (tx_ring->desc) {
-		pci_free_consistent(pdev, tx_ring->size, tx_ring->desc,
-				    tx_ring->dma);
+		dma_free_coherent(&pdev->dev, tx_ring->size, tx_ring->desc,
+				  tx_ring->dma);
 		tx_ring->desc = NULL;
 	}
 	if (rx_ring->desc) {
-		pci_free_consistent(pdev, rx_ring->size, rx_ring->desc,
-				    rx_ring->dma);
+		dma_free_coherent(&pdev->dev, rx_ring->size, rx_ring->desc,
+				  rx_ring->dma);
 		rx_ring->desc = NULL;
 	}
 
@@ -1004,8 +1004,8 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
 
 	tx_ring->size = tx_ring->count * sizeof(struct e1000_tx_desc);
 	tx_ring->size = ALIGN(tx_ring->size, 4096);
-	tx_ring->desc = pci_alloc_consistent(pdev, tx_ring->size,
-			&tx_ring->dma);
+	tx_ring->desc = dma_alloc_coherent(&pdev->dev, tx_ring->size,
+					   &tx_ring->dma, GFP_KERNEL);
 	if (!tx_ring->desc) {
 		ret_val = 2;
 		goto err_nomem;
@@ -1065,8 +1065,8 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
 	memset(rx_ring->buffer_info, 0, size);
 
 	rx_ring->size = rx_ring->count * sizeof(struct e1000_rx_desc);
-	rx_ring->desc = pci_alloc_consistent(pdev, rx_ring->size,
-					     &rx_ring->dma);
+	rx_ring->desc = dma_alloc_coherent(&pdev->dev, rx_ring->size,
+					   &rx_ring->dma, GFP_KERNEL);
 	if (!rx_ring->desc) {
 		ret_val = 5;
 		goto err_nomem;
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index d711e14..51c9024 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -1344,7 +1344,8 @@ static int e1000_alloc_ring_dma(struct e1000_adapter *adapter,
 {
 	struct pci_dev *pdev = adapter->pdev;
 
-	ring->desc = pci_alloc_consistent(pdev, ring->size, &ring->dma);
+	ring->desc = dma_alloc_coherent(&pdev->dev, ring->size, &ring->dma,
+					GFP_KERNEL);
 	if (!ring->desc)
 		return -ENOMEM;
 
@@ -1479,7 +1480,8 @@ void e1000e_free_tx_resources(struct e1000_adapter *adapter)
 	vfree(tx_ring->buffer_info);
 	tx_ring->buffer_info = NULL;
 
-	pci_free_consistent(pdev, tx_ring->size, tx_ring->desc, tx_ring->dma);
+	dma_free_coherent(&pdev->dev, tx_ring->size, tx_ring->desc,
+			  tx_ring->dma);
 	tx_ring->desc = NULL;
 }
 
@@ -1503,7 +1505,8 @@ void e1000e_free_rx_resources(struct e1000_adapter *adapter)
 	kfree(rx_ring->ps_pages);
 	rx_ring->ps_pages = NULL;
 
-	pci_free_consistent(pdev, rx_ring->size, rx_ring->desc, rx_ring->dma);
+	dma_free_coherent(&pdev->dev, rx_ring->size, rx_ring->desc,
+			  rx_ring->dma);
 	rx_ring->desc = NULL;
 }
 

linux-2.6-netdev-e1000e-08.patch:

--- NEW FILE linux-2.6-netdev-e1000e-08.patch ---
From: Auke Kok <auke-jan.h.kok at intel.com>
Date: Fri, 10 Aug 2007 20:00:57 +0000 (-0700)
Subject: e1000e: Use time_after to account for jiffies wrapping
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fjgarzik%2Fnetdev-2.6.git;a=commitdiff_plain;h=363baa32cd1993c241cf16c862ec958fcaebe77e

e1000e: Use time_after to account for jiffies wrapping

Signed-off-by: Auke Kok <auke-jan.h.kok at intel.com>
Signed-off-by: Jeff Garzik <jeff at garzik.org>
---

diff --git a/drivers/net/e1000e/ethtool.c b/drivers/net/e1000e/ethtool.c
index d184116..d14cc4b 100644
--- a/drivers/net/e1000e/ethtool.c
+++ b/drivers/net/e1000e/ethtool.c
@@ -1411,7 +1411,7 @@ static int e1000_run_loopback_test(struct e1000_adapter *adapter)
 			 * enough time to complete the receives, if it's
 			 * exceeded, break and error off
 			 */
-		} while (good_cnt < 64 && jiffies < (time + 20));
+		} while ((good_cnt < 64) && !time_after(jiffies, time + 20));
 		if (good_cnt != 64) {
 			ret_val = 13; /* ret_val is the same as mis-compare */
 			break;

linux-2.6-netdev-e1000e-09.patch:

--- NEW FILE linux-2.6-netdev-e1000e-09.patch ---
From: Auke Kok <auke-jan.h.kok at intel.com>
Date: Fri, 10 Aug 2007 20:01:02 +0000 (-0700)
Subject: e1000e: error handling for pci_map_single calls.
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fjgarzik%2Fnetdev-2.6.git;a=commitdiff_plain;h=8136b0db9be68942380cac6925cf6dd6a2be9a8f

e1000e: error handling for pci_map_single calls.

Add proper error handling for various callers of pci_map_single.

Signed-off-by: Auke Kok <auke-jan.h.kok at intel.com>
Signed-off-by: Jeff Garzik <jeff at garzik.org>
---

diff --git a/drivers/net/e1000e/e1000.h b/drivers/net/e1000e/e1000.h
index 3475e48..e3cd877 100644
--- a/drivers/net/e1000e/e1000.h
+++ b/drivers/net/e1000e/e1000.h
@@ -220,6 +220,7 @@ struct e1000_adapter {
 	u32 tx_fifo_head;
 	u32 tx_head_addr;
 	u32 tx_fifo_size;
+	u32 tx_dma_failed;
 
 	/*
 	 * RX
@@ -241,6 +242,7 @@ struct e1000_adapter {
 	u64 gorcl_old;
 	u32 gorcl;
 	u32 alloc_rx_buff_failed;
+	u32 rx_dma_failed;
 
 	unsigned int rx_ps_pages;
 	u16 rx_ps_bsize0;
diff --git a/drivers/net/e1000e/ethtool.c b/drivers/net/e1000e/ethtool.c
index d14cc4b..0e80406 100644
--- a/drivers/net/e1000e/ethtool.c
+++ b/drivers/net/e1000e/ethtool.c
@@ -91,6 +91,8 @@ static const struct e1000_stats e1000_gstrings_stats[] = {
 	{ "tx_smbus", E1000_STAT(stats.mgptc) },
 	{ "rx_smbus", E1000_STAT(stats.mgprc) },
 	{ "dropped_smbus", E1000_STAT(stats.mgpdc) },
+	{ "rx_dma_failed", E1000_STAT(rx_dma_failed) },
+	{ "tx_dma_failed", E1000_STAT(tx_dma_failed) },
 };
 
 #define E1000_GLOBAL_STATS_LEN	\
@@ -1042,6 +1044,10 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
 		tx_ring->buffer_info[i].dma =
 			pci_map_single(pdev, skb->data, skb->len,
 				       PCI_DMA_TODEVICE);
+		if (pci_dma_mapping_error(tx_ring->buffer_info[i].dma)) {
+			ret_val = 4;
+			goto err_nomem;
+		}
 		tx_desc->buffer_addr = cpu_to_le64(
 					 tx_ring->buffer_info[i].dma);
 		tx_desc->lower.data = cpu_to_le32(skb->len);
@@ -1059,7 +1065,7 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
 	size = rx_ring->count * sizeof(struct e1000_buffer);
 	rx_ring->buffer_info = kmalloc(size, GFP_KERNEL);
 	if (!rx_ring->buffer_info) {
-		ret_val = 4;
+		ret_val = 5;
 		goto err_nomem;
 	}
 	memset(rx_ring->buffer_info, 0, size);
@@ -1068,7 +1074,7 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
 	rx_ring->desc = dma_alloc_coherent(&pdev->dev, rx_ring->size,
 					   &rx_ring->dma, GFP_KERNEL);
 	if (!rx_ring->desc) {
-		ret_val = 5;
+		ret_val = 6;
 		goto err_nomem;
 	}
 	memset(rx_ring->desc, 0, rx_ring->size);
@@ -1093,7 +1099,7 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
 
 		skb = alloc_skb(2048 + NET_IP_ALIGN, GFP_KERNEL);
 		if (!skb) {
-			ret_val = 6;
+			ret_val = 7;
 			goto err_nomem;
 		}
 		skb_reserve(skb, NET_IP_ALIGN);
@@ -1101,6 +1107,10 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
 		rx_ring->buffer_info[i].dma =
 			pci_map_single(pdev, skb->data, 2048,
 				       PCI_DMA_FROMDEVICE);
+		if (pci_dma_mapping_error(rx_ring->buffer_info[i].dma)) {
+			ret_val = 8;
+			goto err_nomem;
+		}
 		rx_desc->buffer_addr =
 			cpu_to_le64(rx_ring->buffer_info[i].dma);
 		memset(skb->data, 0x00, skb->len);
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index 51c9024..8ebe238 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -195,6 +195,11 @@ map_skb:
 		buffer_info->dma = pci_map_single(pdev, skb->data,
 						  adapter->rx_buffer_len,
 						  PCI_DMA_FROMDEVICE);
+		if (pci_dma_mapping_error(buffer_info->dma)) {
+			dev_err(&pdev->dev, "RX DMA map failed\n");
+			adapter->rx_dma_failed++;
+			break;
+		}
 
 		rx_desc = E1000_RX_DESC(*rx_ring, i);
 		rx_desc->buffer_addr = cpu_to_le64(buffer_info->dma);
@@ -255,6 +260,13 @@ static void e1000_alloc_rx_buffers_ps(struct e1000_adapter *adapter,
 							   ps_page->page,
 							   0, PAGE_SIZE,
 							   PCI_DMA_FROMDEVICE);
+					if (pci_dma_mapping_error(
+							ps_page->dma)) {
+						dev_err(&adapter->pdev->dev,
+						  "RX DMA page map failed\n");
+						adapter->rx_dma_failed++;
+						goto no_buffers;
+					}
 				}
 				/*
 				 * Refresh the desc even if buffer_addrs
@@ -286,6 +298,14 @@ static void e1000_alloc_rx_buffers_ps(struct e1000_adapter *adapter,
 		buffer_info->dma = pci_map_single(pdev, skb->data,
 						  adapter->rx_ps_bsize0,
 						  PCI_DMA_FROMDEVICE);
+		if (pci_dma_mapping_error(buffer_info->dma)) {
+			dev_err(&pdev->dev, "RX DMA map failed\n");
+			adapter->rx_dma_failed++;
+			/* cleanup skb */
+			dev_kfree_skb_any(skb);
+			buffer_info->skb = NULL;
+			break;
+		}
 
 		rx_desc->read.buffer_addr[0] = cpu_to_le64(buffer_info->dma);
 
@@ -374,6 +394,11 @@ check_page:
 							buffer_info->page, 0,
 							PAGE_SIZE,
 							PCI_DMA_FROMDEVICE);
+		if (pci_dma_mapping_error(buffer_info->dma)) {
+			dev_err(&adapter->pdev->dev, "RX DMA page map failed\n");
+			adapter->rx_dma_failed++;
+			break;
+		}
 
 		rx_desc = E1000_RX_DESC(*rx_ring, i);
 		rx_desc->buffer_addr = cpu_to_le64(buffer_info->dma);
@@ -3214,6 +3239,11 @@ static int e1000_tx_map(struct e1000_adapter *adapter,
 				skb->data + offset,
 				size,
 				PCI_DMA_TODEVICE);
+		if (pci_dma_mapping_error(buffer_info->dma)) {
+			dev_err(&adapter->pdev->dev, "TX DMA map failed\n");
+			adapter->tx_dma_failed++;
+			return -1;
+		}
 		buffer_info->next_to_watch = i;
 
 		len -= size;
@@ -3247,6 +3277,13 @@ static int e1000_tx_map(struct e1000_adapter *adapter,
 					offset,
 					size,
 					PCI_DMA_TODEVICE);
+			if (pci_dma_mapping_error(buffer_info->dma)) {
+				dev_err(&adapter->pdev->dev,
+					"TX DMA page map failed\n");
+				adapter->tx_dma_failed++;
+				return -1;
+			}
+
 			buffer_info->next_to_watch = i;
 
 			len -= size;
@@ -3512,9 +3549,15 @@ static int e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
 	if (skb->protocol == htons(ETH_P_IP))
 		tx_flags |= E1000_TX_FLAGS_IPV4;
 
-	e1000_tx_queue(adapter, tx_flags,
-		       e1000_tx_map(adapter, skb, first,
-				    max_per_txd, nr_frags, mss));
+	count = e1000_tx_map(adapter, skb, first, max_per_txd, nr_frags, mss);
+	if (count < 0) {
+		/* handle pci_map_single() error in e1000_tx_map */
+		dev_kfree_skb_any(skb);
+		spin_unlock_irqrestore(&adapter->tx_queue_lock, irq_flags);
+		return NETDEV_TX_BUSY;
+	}
+
+	e1000_tx_queue(adapter, tx_flags, count);
 
 	netdev->trans_start = jiffies;
 

linux-2.6-netdev-e1000e-10.patch:

--- NEW FILE linux-2.6-netdev-e1000e-10.patch ---
From: Auke Kok <auke-jan.h.kok at intel.com>
Date: Fri, 10 Aug 2007 20:01:07 +0000 (-0700)
Subject: e1000e: Remove two compile warnings
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fjgarzik%2Fnetdev-2.6.git;a=commitdiff_plain;h=3e4346712d03162af6b570aa17efb1201c4bf023

e1000e: Remove two compile warnings

CC [M]  drivers/net/e1000e/lib.o
drivers/net/e1000e/lib.c: In function 'e1000e_read_nvm_eerd':
drivers/net/e1000e/lib.c:1941: warning: 'ret_val' may be used uninitialized
in this function
  CC [M]  drivers/net/e1000e/phy.o
drivers/net/e1000e/phy.c: In function 'e1000e_phy_has_link_generic':
drivers/net/e1000e/phy.c:1324: warning: 'ret_val' may be used
uninitialized in this function

Signed-off-by: Auke Kok <auke-jan.h.kok at intel.com>
Signed-off-by: Jeff Garzik <jeff at garzik.org>
---

diff --git a/drivers/net/e1000e/lib.c b/drivers/net/e1000e/lib.c
index a04c1e4..6645c21 100644
--- a/drivers/net/e1000e/lib.c
+++ b/drivers/net/e1000e/lib.c
@@ -1938,7 +1938,7 @@ s32 e1000e_read_nvm_eerd(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
 {
 	struct e1000_nvm_info *nvm = &hw->nvm;
 	u32 i, eerd = 0;
-	s32 ret_val;
+	s32 ret_val = 0;
 
 	/* A check for invalid values:  offset too large, too many words,
 	 * and not enough words. */
diff --git a/drivers/net/e1000e/phy.c b/drivers/net/e1000e/phy.c
index 1efb47a..7932318 100644
--- a/drivers/net/e1000e/phy.c
+++ b/drivers/net/e1000e/phy.c
@@ -1321,7 +1321,7 @@ static s32 e1000_wait_autoneg(struct e1000_hw *hw)
 s32 e1000e_phy_has_link_generic(struct e1000_hw *hw, u32 iterations,
 			       u32 usec_interval, bool *success)
 {
-	s32 ret_val;
+	s32 ret_val = 0;
 	u16 i, phy_status;
 
 	for (i = 0; i < iterations; i++) {

linux-2.6-scsi-async-double-add.patch:

--- NEW FILE linux-2.6-scsi-async-double-add.patch ---
From: Matthew Wilcox <matthew at wil.cx>
Date: Tue, 26 Jun 2007 21:18:51 +0000 (-0600)
Subject: [SCSI] Fix async scanning double-add problems
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fjejb%2Fscsi-misc-2.6.git;a=commitdiff_plain;h=a93a091df8232fad60867d41fbc3be855a0b78f2

[SCSI] Fix async scanning double-add problems

Stress-testing and some thought has revealed some places where
asynchronous scanning needs some more attention to locking.

 - Since async_scan is a bit, we need to hold the host_lock while
   modifying it to prevent races against other CPUs modifying the word
   that bit is in.  This is probably a theoretical race for the moment,
   but other patches may change that.
 - The async_scan bit means not only that this host is being scanned
   asynchronously, but that all the devices attached to this host are not
   yet added to sysfs.  So we must ensure that this bit is always in sync.
   I've chosen to do this with the scan_mutex since it's already acquired
   in most of the right places.
 - If the host changes state to deleted while we're in the middle of
   a scan, we'll end up with some devices on the host's list which must
   be deleted.  Add a check to scsi_sysfs_add_devices() to ensure the
   host is still running.
 - To avoid the async_scan bit being protected by three locks, the
   async_scan_lock now only protects the scanning_list.

Signed-off-by: Matthew Wilcox <matthew at wil.cx>
Signed-off-by: James Bottomley <James.Bottomley at SteelEye.com>
---

diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
index a86e62f..309b224 100644
--- a/drivers/scsi/scsi_scan.c
+++ b/drivers/scsi/scsi_scan.c
@@ -121,6 +121,7 @@ MODULE_PARM_DESC(inq_timeout,
 		 "Timeout (in seconds) waiting for devices to answer INQUIRY."
 		 " Default is 5. Some non-compliant devices need more.");
 
+/* This lock protects only this list */
 static DEFINE_SPINLOCK(async_scan_lock);
 static LIST_HEAD(scanning_hosts);
 
@@ -1466,14 +1467,14 @@ struct scsi_device *__scsi_add_device(struct Scsi_Host *shost, uint channel,
 	if (strncmp(scsi_scan_type, "none", 4) == 0)
 		return ERR_PTR(-ENODEV);
 
-	if (!shost->async_scan)
-		scsi_complete_async_scans();
-
 	starget = scsi_alloc_target(parent, channel, id);
 	if (!starget)
 		return ERR_PTR(-ENOMEM);
 
 	mutex_lock(&shost->scan_mutex);
+	if (!shost->async_scan)
+		scsi_complete_async_scans();
+
 	if (scsi_host_scan_allowed(shost))
 		scsi_probe_and_add_lun(starget, lun, NULL, &sdev, 1, hostdata);
 	mutex_unlock(&shost->scan_mutex);
@@ -1586,10 +1587,10 @@ void scsi_scan_target(struct device *parent, unsigned int channel,
 	if (strncmp(scsi_scan_type, "none", 4) == 0)
 		return;
 
+	mutex_lock(&shost->scan_mutex);
 	if (!shost->async_scan)
 		scsi_complete_async_scans();
 
-	mutex_lock(&shost->scan_mutex);
 	if (scsi_host_scan_allowed(shost))
 		__scsi_scan_target(parent, channel, id, lun, rescan);
 	mutex_unlock(&shost->scan_mutex);
@@ -1634,15 +1635,15 @@ int scsi_scan_host_selected(struct Scsi_Host *shost, unsigned int channel,
 		"%s: <%u:%u:%u>\n",
 		__FUNCTION__, channel, id, lun));
 
-	if (!shost->async_scan)
-		scsi_complete_async_scans();
-
 	if (((channel != SCAN_WILD_CARD) && (channel > shost->max_channel)) ||
 	    ((id != SCAN_WILD_CARD) && (id >= shost->max_id)) ||
 	    ((lun != SCAN_WILD_CARD) && (lun > shost->max_lun)))
 		return -EINVAL;
 
 	mutex_lock(&shost->scan_mutex);
+	if (!shost->async_scan)
+		scsi_complete_async_scans();
+
 	if (scsi_host_scan_allowed(shost)) {
 		if (channel == SCAN_WILD_CARD)
 			for (channel = 0; channel <= shost->max_channel;
@@ -1661,7 +1662,8 @@ static void scsi_sysfs_add_devices(struct Scsi_Host *shost)
 {
 	struct scsi_device *sdev;
 	shost_for_each_device(sdev, shost) {
-		if (scsi_sysfs_add_sdev(sdev) != 0)
+		if (!scsi_host_scan_allowed(shost) ||
+		    scsi_sysfs_add_sdev(sdev) != 0)
 			scsi_destroy_sdev(sdev);
 	}
 }
@@ -1679,6 +1681,7 @@ static void scsi_sysfs_add_devices(struct Scsi_Host *shost)
 static struct async_scan_data *scsi_prep_async_scan(struct Scsi_Host *shost)
 {
 	struct async_scan_data *data;
+	unsigned long flags;
 
 	if (strncmp(scsi_scan_type, "sync", 4) == 0)
 		return NULL;
@@ -1698,8 +1701,13 @@ static struct async_scan_data *scsi_prep_async_scan(struct Scsi_Host *shost)
 		goto err;
 	init_completion(&data->prev_finished);
 
-	spin_lock(&async_scan_lock);
+	mutex_lock(&shost->scan_mutex);
+	spin_lock_irqsave(shost->host_lock, flags);
 	shost->async_scan = 1;
+	spin_unlock_irqrestore(shost->host_lock, flags);
+	mutex_unlock(&shost->scan_mutex);
+
+	spin_lock(&async_scan_lock);
 	if (list_empty(&scanning_hosts))
 		complete(&data->prev_finished);
 	list_add_tail(&data->list, &scanning_hosts);
@@ -1723,11 +1731,15 @@ static struct async_scan_data *scsi_prep_async_scan(struct Scsi_Host *shost)
 static void scsi_finish_async_scan(struct async_scan_data *data)
 {
 	struct Scsi_Host *shost;
+	unsigned long flags;
 
 	if (!data)
 		return;
 
 	shost = data->shost;
+
+	mutex_lock(&shost->scan_mutex);
+
 	if (!shost->async_scan) {
 		printk("%s called twice for host %d", __FUNCTION__,
 				shost->host_no);
@@ -1739,8 +1751,13 @@ static void scsi_finish_async_scan(struct async_scan_data *data)
 
 	scsi_sysfs_add_devices(shost);
 
-	spin_lock(&async_scan_lock);
+	spin_lock_irqsave(shost->host_lock, flags);
 	shost->async_scan = 0;
+	spin_unlock_irqrestore(shost->host_lock, flags);
+
+	mutex_unlock(&shost->scan_mutex);
+
+	spin_lock(&async_scan_lock);
 	list_del(&data->list);
 	if (!list_empty(&scanning_hosts)) {
 		struct async_scan_data *next = list_entry(scanning_hosts.next,

linux-2.6-usb-suspend-classes.patch:

--- NEW FILE linux-2.6-usb-suspend-classes.patch ---
>From davej  Thu Aug  2 20:00:05 2007
Return-Path: <linux-usb-devel-bounces at lists.sourceforge.net>
X-Spam-Checker-Version: SpamAssassin 3.2.2 (2007-07-23) on
	gelk.kernelslacker.org
X-Spam-Level: 
X-Spam-Status: No, score=-6.4 required=5.0 tests=AWL,BAYES_00,
	RCVD_IN_DNSWL_MED,UNPARSEABLE_RELAY autolearn=ham version=3.2.2
Received: from pobox.devel.redhat.com [10.11.255.8]
	by gelk.kernelslacker.org with IMAP (fetchmail-6.3.7)
	for <davej at localhost> (single-drop); Thu, 02 Aug 2007 20:00:05 -0400 (EDT)
Received: from pobox.devel.redhat.com ([unix socket])
	 by pobox.devel.redhat.com (Cyrus v2.2.12-Invoca-RPM-2.2.12-8.1.RHEL4) with LMTPA;
	 Thu, 02 Aug 2007 19:56:41 -0400
X-Sieve: CMU Sieve 2.2
Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26])
	by pobox.devel.redhat.com (8.13.1/8.13.1) with ESMTP id l72NueHI010629;
	Thu, 2 Aug 2007 19:56:40 -0400
Received: from mx2.redhat.com (mx2.redhat.com [10.255.15.25])
	by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id l72NudHe028741;
	Thu, 2 Aug 2007 19:56:40 -0400
Received: from lists-outbound.sourceforge.net (lists-outbound.sourceforge.net [66.35.250.225])
	by mx2.redhat.com (8.13.1/8.13.1) with ESMTP id l72NuXOK013200;
	Thu, 2 Aug 2007 19:56:33 -0400
Received: from sc8-sf-list1-new.sourceforge.net (sc8-sf-list1-new-b.sourceforge.net [10.3.1.93])
	by sc8-sf-spam2.sourceforge.net (Postfix) with ESMTP
	id 8FE6C12AED; Thu,  2 Aug 2007 16:56:27 -0700 (PDT)
Received: from sc8-sf-mx1-b.sourceforge.net ([10.3.1.91]
	helo=mail.sourceforge.net)
	by sc8-sf-list1-new.sourceforge.net with esmtp (Exim 4.43)
	id 1IGkWn-0004vJ-BF for linux-usb-devel at lists.sourceforge.net;
	Thu, 02 Aug 2007 16:56:25 -0700
Received: from [78.32.9.130] (helo=vavatch.codon.org.uk)
	by mail.sourceforge.net with esmtps (TLSv1:AES256-SHA:256)
	(Exim 4.44) id 1IGkWn-0003tG-03
	for linux-usb-devel at lists.sourceforge.net;
	Thu, 02 Aug 2007 16:56:25 -0700
Received: from mjg59 by vavatch.codon.org.uk with local (Exim 4.62)
	(envelope-from <mjg59 at codon.org.uk>)
	id 1IGkWb-0002V5-Bi; Fri, 03 Aug 2007 00:56:16 +0100
Date: Fri, 3 Aug 2007 00:56:13 +0100
From: Matthew Garrett <mjg59 at srcf.ucam.org>
To: linux-usb-devel at lists.sourceforge.net
Message-ID: <20070802235613.GA9487 at srcf.ucam.org>
MIME-Version: 1.0
Content-Disposition: inline
User-Agent: Mutt/1.5.12-2006-07-14
X-SA-Exim-Connect-IP: <locally generated>
X-SA-Exim-Mail-From: mjg59 at codon.org.uk
X-SA-Exim-Version: 4.2.1 (built Tue, 20 Jun 2006 01:35:45 +0000)
X-SA-Exim-Scanned: Yes (on vavatch.codon.org.uk)
Cc: amitk at ubuntu.com, gregkh at suse.de, linux-kernel at vger.kernel.org
Subject: [linux-usb-devel] [PATCH] USB: Only enable autosuspend by default
	on certain device classes
X-BeenThere: linux-usb-devel at lists.sourceforge.net
X-Mailman-Version: 2.1.8
Precedence: list
List-Id: <linux-usb-devel.lists.sourceforge.net>
List-Unsubscribe: <https://lists.sourceforge.net/lists/listinfo/linux-usb-devel>, 
	<mailto:linux-usb-devel-request at lists.sourceforge.net?subject=unsubscribe>
List-Archive: <http://sourceforge.net/mailarchive/forum.php?forum_name=linux-usb-devel>
List-Post: <mailto:linux-usb-devel at lists.sourceforge.net>
List-Help: <mailto:linux-usb-devel-request at lists.sourceforge.net?subject=help>
List-Subscribe: <https://lists.sourceforge.net/lists/listinfo/linux-usb-devel>, 
	<mailto:linux-usb-devel-request at lists.sourceforge.net?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: linux-usb-devel-bounces at lists.sourceforge.net
Errors-To: linux-usb-devel-bounces at lists.sourceforge.net
X-RedHat-Spam-Score: 0.276 
Status: RO
Content-Length: 1912
Lines: 54

We're seeing a large number of problems with devices not appreciating 
USB autosuspend, especially printers and scanners. According to 
http://www.microsoft.com/whdc/system/bus/USB/USBFAQ_intro.mspx only a 
subset of drivers support it in Windows XP, meaning that most devices 
are probably untested in this situation. This patch alters the behaviour 
to match that of Windows. Userspace can still whitelist devices as 
appropriate, and the set of classes supporting autosuspend probably 
covers pretty much every driver likely to be found on any portable 
device.

Signed-off-by: Matthew Garrett <mjg59 at srcf.ucam.org>

---

diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index caaa46f..12ba789 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -1278,6 +1278,22 @@ int usb_new_device(struct usb_device *udev)
 {
 	int err;
 
+#ifdef CONFIG_USB_SUSPEND
+	/* Disable autosuspend for most devices - Windows only enables it
+	   for a small subset of classes, so most hardware hasn't been tested
+	   with it. Userspace can always reenable at a later point */
+
+	switch (udev->descriptor.bDeviceClass) {
+	case USB_CLASS_HID:
+	case USB_CLASS_COMM:
+	case USB_CLASS_WIRELESS_CONTROLLER:
+	case USB_CLASS_HUB:
+		break;
+	default:
+		udev->autosuspend_disabled = 1;
+	}
+#endif
+
 	/* Determine quirks */
 	usb_detect_quirks(udev);


-- 
Matthew Garrett | mjg59 at srcf.ucam.org

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
linux-usb-devel at lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel



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

iD8DBQBHC+s6yGugalF9Dw4RArHzAJ0XfUWR/26hYd+XwBQTMacxZ7FhPwCcDkIP
FBDXpT2RzOrlJcDcwF8QwO0=
=4zXk
-----END PGP SIGNATURE-----


Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/.cvsignore,v
retrieving revision 1.635
retrieving revision 1.636
diff -u -r1.635 -r1.636
--- .cvsignore	26 Sep 2007 18:58:34 -0000	1.635
+++ .cvsignore	10 Oct 2007 21:22:57 -0000	1.636
@@ -1,6 +1,5 @@
 clog
 kernel-2.6.*.config
 temp-*
-kernel-2.6.22
-linux-2.6.22.tar.bz2
-patch-2.6.22.9.bz2
+kernel-2.6.23
+linux-2.6.23.tar.bz2


Index: kernel-2.6.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/kernel-2.6.spec,v
retrieving revision 1.3351
retrieving revision 1.3352
diff -u -r1.3351 -r1.3352
--- kernel-2.6.spec	28 Sep 2007 00:14:44 -0000	1.3351
+++ kernel-2.6.spec	10 Oct 2007 21:22:57 -0000	1.3352
@@ -19,18 +19,18 @@
 # setup, we set fedora_cvs_origin to the current cvs revision s/1.// of the
 # kernel spec when the kernel is rebased, so fedora_build automatically
 # works out to the offset from the rebase, so it doesn't get too ginormous.
-%define fedora_cvs_origin 3260
+%define fedora_cvs_origin 3351
 %define fedora_build %(R="$Revision$"; R="${R%% \$}"; R="${R##: 1.}"; expr $R - %{fedora_cvs_origin})
 
 # 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 22
+%define base_sublevel 23
 
 ## If this is a released kernel ##
 %if 0%{?released_kernel}
 # Do we have a 2.6.x.y update to apply?
-%define stable_update 9
+%define stable_update 0
 # Set rpm version accordingly
 %if 0%{?stable_update}
 %define stablerev .%{stable_update}
@@ -496,13 +496,12 @@
 
 %endif
 
-%if !%{nopatches}
-
 # -stable RC
 # Patch02: patch-2.6.22.6-rc1.patch
 
-# Revert -stable pieces we get from elsewhere
-Patch05: linux-2.6-softmac-fix-essid-problem_R.patch
+%if !%{nopatches}
+
+# Revert -stable pieces we get from elsewhere here
 
 Patch10: linux-2.6-utrace-tracehook.patch
 Patch11: linux-2.6-utrace-tracehook-ia64.patch
@@ -523,23 +522,12 @@
 Patch26: linux-2.6-utrace-ptrace-compat-avr32.patch
 #Patch20: nouveau-drm.patch
 Patch30: linux-2.6-sysrq-c.patch
-Patch35: linux-2.6-genirq-fixes.patch
 Patch40: linux-2.6-x86-tune-generic.patch
-Patch50: linux-2.6-x86-vga-vidfail.patch
-Patch52: linux-2.6-amd-fix-broken-lapic-timer-detect.patch
-Patch90: linux-2.6-kvm-suspend.patch
-Patch93: linux-2.6-kvm-reinit-real-mode-tss.patch
 
 Patch100: linux-2.6-g5-therm-shutdown.patch
 Patch120: linux-2.6-ppc32-ucmpdi2.patch
 Patch130: linux-2.6-ibmvscsi-schizo.patch
-Patch131: linux-2.6-powerpc-generic-suspend-1-remove-dead-code.patch
-Patch132: linux-2.6-powerpc-generic-suspend-2-remove-adb-sleep-notifier.patch
-Patch133: linux-2.6-powerpc-generic-suspend-3-remove-dmasound.patch
-Patch134: linux-2.6-powerpc-generic-suspend-4-kill-pmu-sleep-notifier.patch
-Patch135: linux-2.6-powerpc-generic-suspend-5-pmu-pm_ops.patch
 Patch140: linux-2.6-pmac-zilog.patch
-Patch141: linux-2.6-ppc-pegasos-keyboard-8042-check.patch
 
 Patch150: linux-2.6-build-nonintconfig.patch
 Patch160: linux-2.6-execshield.patch
@@ -550,68 +538,42 @@
 Patch210: linux-2.6-modsign-ksign.patch
 Patch220: linux-2.6-modsign-core.patch
 Patch230: linux-2.6-modsign-script.patch
-Patch240: linux-2.6-idr-multiple-bugfixes.patch
-Patch241: linux-2.6-vbe-always-save-ddc.patch
 Patch250: linux-2.6-debug-sizeof-structs.patch
 Patch260: linux-2.6-debug-nmi-timeout.patch
 Patch270: linux-2.6-debug-taint-vm.patch
 Patch280: linux-2.6-debug-spinlock-taint.patch
-Patch290: linux-2.6-debug-extra-warnings.patch
-Patch300: linux-2.6-debug-slub-debug.patch
-Patch320: linux-2.6-debug-must_check.patch
 Patch330: linux-2.6-debug-no-quiet.patch
 Patch340: linux-2.6-debug-boot-delay.patch
-Patch340: linux-2.6-debug-sysfs-crash-debugging.patch
 Patch350: linux-2.6-devmem.patch
 Patch370: linux-2.6-crash-driver.patch
-Patch390: linux-2.6-dev-get-driver-properly.patch
 
 Patch400: linux-2.6-scsi-cpqarray-set-master.patch
-Patch401: linux-2.6-aacraid-ioctl-security.patch
-Patch402: linux-2.6-scsi-async-scanning.patch
+Patch401: linux-2.6-scsi-async-double-add.patch
 Patch404: linux-2.6-scsi-mpt-vmware-fix.patch
 
 Patch420: linux-2.6-squashfs.patch
-Patch422: linux-2.6-gfs2-update.patch
 Patch423: linux-2.6-gfs-locking-exports.patch
 
 Patch430: linux-2.6-net-silence-noisy-printks.patch
-Patch431: linux-2.6-net-sfq-fix-oops-with-2.patch
 
 Patch440: linux-2.6-sha_alignment.patch
 Patch450: linux-2.6-input-kill-stupid-messages.patch
 Patch460: linux-2.6-serial-460800.patch
 Patch480: linux-2.6-proc-self-maps-fix.patch
-Patch490: linux-2.6-softlockup-disable.patch
 Patch510: linux-2.6-silence-noise.patch
 Patch570: linux-2.6-selinux-mprotect-checks.patch
 Patch590: linux-2.6-unexport-symbols.patch
 Patch600: linux-2.6-vm-silence-atomic-alloc-failures.patch
 Patch601: linux-2.6-input-ff-create-limit-memory.patch
-Patch602: linux-2.6-x86_64-e820_hole_size.patch
 Patch610: linux-2.6-defaults-fat-utf8.patch
 Patch620: linux-2.6-defaults-unicode-vt.patch
 Patch630: linux-2.6-defaults-nonmi.patch
 
-Patch650: linux-2.6-lvm-snapshot-deadlock-fix.patch
-
 Patch660: linux-2.6-libata-ali-atapi-dma.patch
-Patch662: linux-2.6-ata-update-noncq.patch
 Patch663: linux-2.6-ata-quirk.patch
-Patch667: linux-2.6-libata-ata_piix_fix_pio-mwdma-programming.patch
-Patch668: linux-2.6-libata-2.6.23-rc8-noncq.patch
-Patch670: linux-2.6-libata-pata_hpt37x-fix-2.6.22-clock-pll.patch
-Patch671: linux-2.6-libata-pata_ali-fix-hp-detect.patch
 Patch672: linux-2.6-libata-pata-dma-disable-option.patch
-Patch673: linux-2.6-libata-pata_it821x-dma.patch
-Patch674: linux-2.6-libata-pata_via-cable-detect.patch
-Patch675: linux-2.6-libata-simplify-init.patch
 Patch676: linux-2.6-ppc-pegasos-via-ata-legacy-irq.patch
-Patch677: linux-2.6-libata-pata_sis-fix-dma-timing.patch
-Patch678: linux-2.6-libata-pata_sis-dma-add-missing-entry.patch
-Patch679: linux-2.6-libata-sata_sil24-fix-irq-clearing-race.patch
 
-Patch680: linux-2.6-rtl8187.patch
 Patch681: linux-2.6-wireless.patch
 Patch682: linux-2.6-wireless-pending.patch
 Patch683: linux-2.6-bcm43xx-pci-neuter.patch
@@ -624,44 +586,26 @@
 Patch700: linux-2.6-b43-module-alias.patch
 Patch701: linux-2.6-b43-use-old-fw.patch
 
-Patch710: linux-2.6-e1000-ich9.patch
-Patch713: linux-2.6-net-atl1-fix-typo-in-dma-setup.patch
-Patch714: linux-2.6-net-atl1-fix-typo-in-dma_req_block.patch
-Patch715: linux-2.6-netdev-atl1-disable-broken-64-bit-dma.patch
-Patch716: linux-2.6-net-r8169-correct-phy-parameters-for-the-8110SC.patch 
-Patch717: linux-2.6-net-r8169-workaround-against-ignored-TxPoll-writes-8168.patch
-
-Patch730: linux-2.6-snd-ad1988-fix-spdif-output.patch
-Patch731: linux-2.6-snd-hda-stac92xx-fixes.patch
-Patch740: linux-2.6-sdhci-ene-controller-quirk.patch
-Patch741: linux-2.6-sdhci-fix-interrupt-mask.patch
-Patch742: linux-2.6-sdhci-clear-error-interrupt.patch
-Patch760: linux-2.6-uevent-zero-fill-env.patch
-Patch770: linux-2.6-irda-smc-remove-quirk.patch
+Patch710: linux-2.6-netdev-e1000e-01.patch
+Patch711: linux-2.6-netdev-e1000e-02.patch
+Patch712: linux-2.6-netdev-e1000e-03.patch
+Patch713: linux-2.6-netdev-e1000e-04.patch
+Patch714: linux-2.6-netdev-e1000e-05.patch
+Patch715: linux-2.6-netdev-e1000e-06.patch
+Patch716: linux-2.6-netdev-e1000e-07.patch
+Patch717: linux-2.6-netdev-e1000e-08.patch
+Patch718: linux-2.6-netdev-e1000e-09.patch
+Patch719: linux-2.6-netdev-e1000e-10.patch
 
 Patch780: linux-2.6-usb-storage-initialize-huawei-e220-properly.patch
-Patch781: linux-2.6-usb-allow-1-byte-replies.patch
-Patch782: linux-2.6-usb-fixup-interval-lengths.patch
-
-Patch790: linux-2.6-acpi-disable-cstates-in-suspend.patch
-Patch791: linux-2.6-acpi-kill-dmesg-spam.patch
+Patch781: linux-2.6-usb-suspend-classes.patch
 
 Patch800: linux-2.6-wakeups-hdaps.patch
 Patch801: linux-2.6-wakeups.patch
-Patch900: linux-2.6-sched-cfs-v2.6.22.5-v20.5.patch
-Patch901: linux-2.6-sched-cfs-updates.patch
-Patch902: linux-2.6-timekeeping-fixes.patch
-Patch1000: linux-2.6-dmi-based-module-autoloading.patch
-Patch1020: linux-2.6-usb-autosuspend-default-disable.patch
-Patch1030: linux-2.6-nfs-nosharecache.patch
+
+Patch1021: linux-2.6-usb-suspend-classes.patch
+
 # PS3 updates from 2.6.23
-Patch1200: linux-2.6-ps3-merge-1.patch
-Patch1210: linux-2.6-ps3-gelic-net.patch
-Patch1220: linux-2.6-ps3-usb-system-bus.patch
-Patch1230: linux-2.6-ps3-alsa.patch
-Patch1240: linux-2.6-ps3-merge-2.patch
-Patch1250: linux-2.6-ps3-gelic-net-updates-1.patch
-Patch1260: linux-2.6-ps3-gelic-net-updates-2.patch
 
 # PS3 Wireless support hasn't yet been merged
 Patch1300: linux-2.6-ps3-gelic-wireless.patch
@@ -670,7 +614,6 @@
 # Give the initrd a fighting chance of handling the change to 'ps3disk'
 Patch1320: linux-2.6-ps3-storage-alias.patch
 
-Patch1400: linux-2.6-pcspkr-use-the-global-pit-lock.patch
 Patch1500: linux-2.6-pmtrace-time-fix.patch
 
 %endif
@@ -1115,15 +1058,7 @@
 
 %if !%{nopatches}
 
-# Revert -stable pieces we get from elsewhere
-ApplyPatch linux-2.6-softmac-fix-essid-problem_R.patch -R
-
-# Ingo's new scheduler.
-ApplyPatch linux-2.6-sched-cfs-v2.6.22.5-v20.5.patch
-# updates from 2.6.23
-ApplyPatch linux-2.6-sched-cfs-updates.patch
-# apply timekeeping updates that were in the Fedora CFS patch
-ApplyPatch linux-2.6-timekeeping-fixes.patch
+# Revert -stable pieces we get from elsewhere here
 
 # Roland's utrace ptrace replacement.
 ApplyPatch linux-2.6-utrace-tracehook.patch -F2
@@ -1148,7 +1083,7 @@
 ApplyPatch linux-2.6-proc-self-maps-fix.patch
 
 # Some USB devices don't work after auto-suspend, disable by default.
-ApplyPatch linux-2.6-usb-autosuspend-default-disable.patch
+ApplyPatch linux-2.6-usb-suspend-classes.patch
 
 # Nouveau DRM
 #ApplyPatch nouveau-drm.patch
@@ -1156,9 +1091,6 @@
 # enable sysrq-c on all kernels, not only kexec
 ApplyPatch linux-2.6-sysrq-c.patch
 
-# new genirq fixes from upstrea
-ApplyPatch linux-2.6-genirq-fixes.patch
-
 # Architecture patches
 # x86(-64)
 # Compile 686 kernels tuned for Pentium4.
@@ -1168,14 +1100,6 @@
 # make the boot stop if there's no supported framebuffer device; this is bad
 # for the installer cd that wants to automatically fall back to textmode
 # in that case
-ApplyPatch linux-2.6-x86-vga-vidfail.patch
-# check all AMD CPU cores for broken lapic timer
-ApplyPatch linux-2.6-amd-fix-broken-lapic-timer-detect.patch
-
-# patch to fix suspend with kvm loaded and guests running
-ApplyPatch linux-2.6-kvm-suspend.patch
-# reinit real mode tss or oops occurs on shutdown
-ApplyPatch linux-2.6-kvm-reinit-real-mode-tss.patch
 
 #
 # PowerPC
@@ -1188,15 +1112,6 @@
 ApplyPatch linux-2.6-ibmvscsi-schizo.patch
 # Move pmac_zilog to its newly-registered device number
 ApplyPatch linux-2.6-pmac-zilog.patch
-# fix detection of i8042 on ppc pegasos platform
-ApplyPatch linux-2.6-ppc-pegasos-keyboard-8042-check.patch
-# Sleep through /sys/power/state
-# Patches from http://johannes.sipsolutions.net/patches/kernel/all/2007-07-25-09:02/
-ApplyPatch linux-2.6-powerpc-generic-suspend-1-remove-dead-code.patch
-ApplyPatch linux-2.6-powerpc-generic-suspend-2-remove-adb-sleep-notifier.patch
-ApplyPatch linux-2.6-powerpc-generic-suspend-3-remove-dmasound.patch
-ApplyPatch linux-2.6-powerpc-generic-suspend-4-kill-pmu-sleep-notifier.patch
-ApplyPatch linux-2.6-powerpc-generic-suspend-5-pmu-pm_ops.patch
 
 # Exec shield
 ApplyPatch linux-2.6-execshield.patch
@@ -1215,10 +1130,6 @@
 #
 # bugfixes to drivers and filesystems
 #
-# idr allocator: bug fixes
-ApplyPatch linux-2.6-idr-multiple-bugfixes.patch
-# VESA VBE/DDC always save the VBE/DDC data
-ApplyPatch linux-2.6-vbe-always-save-ddc.patch
 
 # Various low-impact patches to aid debugging.
 ApplyPatch linux-2.6-debug-sizeof-structs.patch
@@ -1226,17 +1137,8 @@
 ApplyPatch linux-2.6-debug-taint-vm.patch
 ApplyPatch linux-2.6-debug-spinlock-taint.patch
 
-%if !%{debugbuildsenabled}
-# Only spew extra warnings on rawhide builds.
-ApplyPatch linux-2.6-debug-extra-warnings.patch
-# Turn slub debug on by default in rawhide
-ApplyPatch linux-2.6-debug-slub-debug.patch
-%endif
-
-ApplyPatch linux-2.6-debug-must_check.patch
 ApplyPatch linux-2.6-debug-no-quiet.patch
 ApplyPatch linux-2.6-debug-boot-delay.patch
-ApplyPatch linux-2.6-debug-sysfs-crash-debugging.patch
 
 #
 # Make /dev/mem a need-to-know function
@@ -1255,33 +1157,27 @@
 #
 # driver core
 #
-ApplyPatch linux-2.6-dev-get-driver-properly.patch
 
 #
 # SCSI Bits.
 #
 # fix cpqarray pci enable
 ApplyPatch linux-2.6-scsi-cpqarray-set-master.patch
-# aacraid: ioctl handler needs permission check
-ApplyPatch linux-2.6-aacraid-ioctl-security.patch
 # fix locking problems w/ async scsi scan
-ApplyPatch linux-2.6-scsi-async-scanning.patch
+ApplyPatch linux-2.6-scsi-async-double-add.patch
 # fix vmware's broken emulation of SCSI controller
 ApplyPatch linux-2.6-scsi-mpt-vmware-fix.patch
 
 # Filesystem patches.
 # Squashfs
 ApplyPatch linux-2.6-squashfs.patch
-# gfs2 update to latest
-ApplyPatch linux-2.6-gfs2-update.patch
+# gfs2 update
 # export symbols for gfs2 locking modules
 ApplyPatch linux-2.6-gfs-locking-exports.patch
 
 # Networking
 # Disable easy to trigger printk's.
 ApplyPatch linux-2.6-net-silence-noisy-printks.patch
-# fix oops in sfq
-ApplyPatch linux-2.6-net-sfq-fix-oops-with-2.patch
 
 # Misc fixes
 # Fix SHA1 alignment problem on ia64
@@ -1290,8 +1186,6 @@
 ApplyPatch linux-2.6-input-kill-stupid-messages.patch
 # Allow to use 480600 baud on 16C950 UARTs
 ApplyPatch linux-2.6-serial-460800.patch
-# Add a safety net to softlockup so that it doesn't prevent installs.
-ApplyPatch linux-2.6-softlockup-disable.patch
 # Silence some useless messages that still get printed with 'quiet'
 ApplyPatch linux-2.6-silence-noise.patch
 
@@ -1308,8 +1202,6 @@
 ApplyPatch linux-2.6-vm-silence-atomic-alloc-failures.patch
 # don't let input FF drivers allocate too much memory
 ApplyPatch linux-2.6-input-ff-create-limit-memory.patch
-# fix sizing of memory holes on x86_64
-ApplyPatch linux-2.6-x86_64-e820_hole_size.patch
 
 # Changes to upstream defaults.
 # Use UTF-8 by default on VFAT.
@@ -1319,42 +1211,18 @@
 # Disable NMI watchdog by default.
 ApplyPatch linux-2.6-defaults-nonmi.patch
 
-# fix LVM deadlock
-ApplyPatch linux-2.6-lvm-snapshot-deadlock-fix.patch
-
 # Disable ATAPI DMA on ALI chipsets.
 ApplyPatch linux-2.6-libata-ali-atapi-dma.patch
 # libata: don't initialize sg in ata_exec_internal() if DMA_NONE
-# libata: update the noncq list
-ApplyPatch linux-2.6-ata-update-noncq.patch
-ApplyPatch linux-2.6-libata-2.6.23-rc8-noncq.patch
 # ia64 ata quirk
 ApplyPatch linux-2.6-ata-quirk.patch
-# NSIA
-ApplyPatch linux-2.6-libata-ata_piix_fix_pio-mwdma-programming.patch
-# fix hpt37x PLL regression
-ApplyPatch linux-2.6-libata-pata_hpt37x-fix-2.6.22-clock-pll.patch
-# fix wrong DMI detect logic for HP notebook
-ApplyPatch linux-2.6-libata-pata_ali-fix-hp-detect.patch
 # add libata.pata_dma kernel option
 ApplyPatch linux-2.6-libata-pata-dma-disable-option.patch
-# fix DMA on ATAPI devices with it821x
-ApplyPatch linux-2.6-libata-pata_it821x-dma.patch
-# fix cable detection on pata_via
-ApplyPatch linux-2.6-libata-pata_via-cable-detect.patch
 # fix Pegasos libata glitches
-ApplyPatch linux-2.6-libata-simplify-init.patch
 ApplyPatch linux-2.6-ppc-pegasos-via-ata-legacy-irq.patch
-# pata_sis DMA fixes
-ApplyPatch linux-2.6-libata-pata_sis-fix-dma-timing.patch
-ApplyPatch linux-2.6-libata-pata_sis-dma-add-missing-entry.patch
-# sata_sil24 irq race fix
-ApplyPatch linux-2.6-libata-sata_sil24-fix-irq-clearing-race.patch
 
-# Add the rtl8187 driver from upstream
-ApplyPatch linux-2.6-rtl8187.patch
 # post-2.6.22 wireless patches from upstream
-ApplyPatch linux-2.6-wireless.patch
+#ApplyPatch linux-2.6-wireless.patch
 # pre-2.6.24 wireless patches from upstream
 ApplyPatch linux-2.6-wireless-pending.patch
 # late-breaking iwlwifi fixes (will be rolled into wireless-pending patch)
@@ -1374,81 +1242,43 @@
 # use old-style firmware for b43
 ApplyPatch linux-2.6-b43-use-old-fw.patch
 
-# add patch from markmc so that e1000 supports ICH9
-ApplyPatch linux-2.6-e1000-ich9.patch
-
-# atl1 DMA bugs
-ApplyPatch linux-2.6-net-atl1-fix-typo-in-dma-setup.patch
-ApplyPatch linux-2.6-net-atl1-fix-typo-in-dma_req_block.patch
-ApplyPatch linux-2.6-netdev-atl1-disable-broken-64-bit-dma.patch
-
-# r8169
-ApplyPatch linux-2.6-net-r8169-correct-phy-parameters-for-the-8110SC.patch
-ApplyPatch linux-2.6-net-r8169-workaround-against-ignored-TxPoll-writes-8168.patch
+# e1000e goes here
+# latest Intel driver for ich9
+ApplyPatch linux-2.6-netdev-e1000e-01.patch
+ApplyPatch linux-2.6-netdev-e1000e-02.patch
+ApplyPatch linux-2.6-netdev-e1000e-03.patch
+ApplyPatch linux-2.6-netdev-e1000e-04.patch
+ApplyPatch linux-2.6-netdev-e1000e-05.patch
+ApplyPatch linux-2.6-netdev-e1000e-06.patch
+ApplyPatch linux-2.6-netdev-e1000e-07.patch
+ApplyPatch linux-2.6-netdev-e1000e-08.patch
+ApplyPatch linux-2.6-netdev-e1000e-09.patch
+ApplyPatch linux-2.6-netdev-e1000e-10.patch
 
 # ALSA
 #
-# fix spdif output on ad1988
-ApplyPatch linux-2.6-snd-ad1988-fix-spdif-output.patch
-# multiple stac92xx codec fixes
-ApplyPatch linux-2.6-snd-hda-stac92xx-fixes.patch
-
 
 # misc
 #
-# fix weird ENE controller
-ApplyPatch linux-2.6-sdhci-ene-controller-quirk.patch
-# fix interrupt masking
-ApplyPatch linux-2.6-sdhci-fix-interrupt-mask.patch
-# fix the interrupt mask fix
-ApplyPatch linux-2.6-sdhci-clear-error-interrupt.patch
-# uevent: zero fill the environment
-ApplyPatch linux-2.6-uevent-zero-fill-env.patch
-# irda: remove smc quirk that breaks hp 6000 notebooks
-ApplyPatch linux-2.6-irda-smc-remove-quirk.patch
 
 # USB
 #
 # fix init of huawei device
 ApplyPatch linux-2.6-usb-storage-initialize-huawei-e220-properly.patch
-# trivial USB fixes
-ApplyPatch linux-2.6-usb-allow-1-byte-replies.patch
-ApplyPatch linux-2.6-usb-fixup-interval-lengths.patch
 
 # ACPI patches
-# fix some suspend bugssuspend
-ApplyPatch linux-2.6-acpi-disable-cstates-in-suspend.patch
-# silence noisy message
-ApplyPatch linux-2.6-acpi-kill-dmesg-spam.patch
 
 # Fix excessive wakeups
 # Make hdaps timer only tick when in use.
 ApplyPatch linux-2.6-wakeups-hdaps.patch
 ApplyPatch linux-2.6-wakeups.patch
 
-# DMI based module autoloading.
-ApplyPatch linux-2.6-dmi-based-module-autoloading.patch
-
-# NFS: Add the mount option "nosharecache"
-ApplyPatch linux-2.6-nfs-nosharecache.patch
-
-# PS3 patches from 2.6.23
-ApplyPatch linux-2.6-ps3-merge-1.patch
-ApplyPatch linux-2.6-ps3-gelic-net.patch
-ApplyPatch linux-2.6-ps3-usb-system-bus.patch
-ApplyPatch linux-2.6-ps3-alsa.patch
-ApplyPatch linux-2.6-ps3-merge-2.patch
-ApplyPatch linux-2.6-ps3-gelic-net-updates-1.patch
-ApplyPatch linux-2.6-ps3-gelic-net-updates-2.patch
-
 # Pending PS3 patches
 ApplyPatch linux-2.6-ps3-gelic-wireless.patch
 # Temporary hacks
 ApplyPatch linux-2.6-ps3-legacy-bootloader-hack.patch
 ApplyPatch linux-2.6-ps3-storage-alias.patch
 
-ApplyPatch linux-2.6-pcspkr-use-the-global-pit-lock.patch
-
 # Fix time distortion in pm_trace (bz 250238)
 ApplyPatch linux-2.6-pmtrace-time-fix.patch
 
@@ -2373,323 +2203,5 @@
 %endif
 
 %changelog
-* Thu Sep 27 2007 John W. Linville <linville at redhat.com>
-- A few iwlwifi and ath5k fixes
-
-* Thu Sep 27 2007 Chuck Ebbert <cebbert at redhat.com>
-- Revert to old RTC driver.
-- Zero fill environment for uevent handlers.
-- libata: update the NCQ disk blacklist.
-- wireless: store channel info in bss list (bz 250913).
-
-* Thu Sep 27 2007 John W. Linville <linville at redhat.com>
-- Update and restructure wireless patches
-
-* Wed Sep 26 2007 Chuck Ebbert <cebbert at redhat.com>
-- libata pata_sis: DMA fixes (#202291)
-- libata sata_sil24: IRQ clearing race fixes
-- net driver r8169: fix hanging (#252955, #292161)
-- qdisc sfq: fix oops with 2 packet queue (#219895)
-- ACPI: disable processor C-states suring suspend
-- ACPI: silence noisy message
-
-* Wed Sep 26 2007 Chuck Ebbert <cebbert at redhat.com>
-- Linux 2.6.22.9
-
-* Wed Sep 26 2007 Chuck Ebbert <cebbert at redhat.com>
-- Linux 2.6.22.8
-
-* Fri Sep 21 2007 Chuck Ebbert <cebbert at redhat.com>
-- Linux 2.6.22.7
-
-* Fri Sep 21 2007 Chuck Ebbert <cebbert at redhat.com>
-- Build dcdbas and dell_rbu modules on i586 (#216304)
-
-* Thu Sep 20 2007 Dave Jones <davej at redhat.com>
-- Enable tcrypt module for crypto testing.
-
-* Tue Sep 18 2007 John W. Linville <linville at redhat.com>
-- Update bits from wireless-2.6 and wireless-dev
-
-* Wed Sep 12 2007 Chuck Ebbert <cebbert at redhat.com>
-- Linux 2.6.22.6 (official)
-- libata: add option to disable DMA on PATA devices
-- libata: fix DMA on ATAPI devices with it821x (#242229)
-- libata: fix cable detection on pata_via
-- fix vmware's broken SCSI device emulation (#241935)
-- fix init of huawei 220 modem (#253096)
-- LVM: fix hang and lockups during snapshot (#269541)
-- net: fix oops with zero-length packet (#253290)
-- USB: three trivial fixes
-- futex: fix compat list traversal
-
-* Wed Sep 12 2007 Chuck Ebbert <cebbert at redhat.com>
-- update CFS scheduler
-
-* Tue Sep 11 2007 Roland McGrath <roland at redhat.com>
-- utrace update (#248532, #267161, #284311)
-
-* Thu Aug 30 2007 John W. Linville <linville at redhat.com>
-- Update bits from wireless-2.6 and wireless-dev
-
-* Thu Aug 30 2007 Chuck Ebbert <cebbert at redhat.com>
-- Linux 2.6.22.6-rc1
-
-* Wed Aug 29 2007 Chuck Ebbert <cebbert at redhat.com>
-- enable the i82365 ISA PCMCIA driver
-- CFS scheduler bugfix
-
-* Wed Aug 29 2007 Dave Jones <davej at redhat.com>
-- Fix time distortion in pm_trace (bz 250238)
-
-* Wed Aug 29 2007 Chuck Ebbert <cebbert at redhat.com>
-- remove IRDA quirk for SMC controllers (#260481)
-
-* Wed Aug 29 2007 Chuck Ebbert <cebbert at redhat.com>
-- CFS scheduler v20.5
-- disable 64-bit DMA for atl1 network adapter
-
-* Fri Aug 24 2007 John W. Linville <linville at redhat.com>
-- Update wireless-dev bits (mac80211, rt2x00, b43, ssb)
-- Add patch to keep old firmware format for b43
-- Add at76_usb driver
-
-* Fri Aug 24 2007 Chuck Ebbert <cebbert at redhat.com>
-- CFS scheduler v20.3
-
-* Fri Aug 24 2007 Chuck Ebbert <cebbert at redhat.com>
-- V4L/DVB: fix airstar hd5000 tuner
-
-* Fri Aug 24 2007 Chuck Ebbert <cebbert at redhat.com>
-- fix 3ware 9000 controller DMA fallback (#251729)
-
-* Thu Aug 23 2007 Chuck Ebbert <cebbert at redhat.com>
-- Linux 2.6.22.5
-- CFS scheduler v20.2
-- fix Pegasos PS/2 port detection
-
-* Wed Aug 22 2007 Chuck Ebbert <cebbert at redhat.com>
-- 2.6.22.5-rc1
-- un-revert genirq changes
-- add new genirq fixes from upstream
-- ALSA: fix ad1988 spdif output
-- ALSA: mutiple stac92xx codec fixes
-- libata: fix pata_via driver on ppc pegasos platform
-
-* Tue Aug 21 2007 Chuck Ebbert <cebbert at redhat.com>
-- sky2: don't clear PHY power bits
-
-* Tue Aug 21 2007 Chuck Ebbert <cebbert at redhat.com>
-- Hibernation: do not try to mark invalid PFNs as nosave
-
-* Tue Aug 21 2007 Dave Jones <davej at redhat.com>
-- 2.6.22.4
-
-* Thu Aug 16 2007 Dave Jones <davej at redhat.com>
-- Fix symvers warning on install of debug kernel.
-
-* Thu Aug 16 2007 Chuck Ebbert <cebbert at redhat.com>
-- sensors:   fix wrong values with some chips
-- r8169:     fix polling
-- forcedeth: fix wrong OUI for PHY
-- SCSI:      fix async scanning
-- sky2:      4 patches from maintainer
-
-* Thu Aug 16 2007 Chuck Ebbert <cebbert at redhat.com>
-- enable ACPI_DEBUG in -debug builds
-- fix e820 memory hole sizing on x86_64
-- export GFS2 symbols for lock modules
-
-* Wed Aug 15 2007 Chuck Ebbert <cebbert at redhat.com>
-- Linux 2.6.22.3
-
-* Wed Aug 15 2007 Chuck Ebbert <cebbert at redhat.com>
-- ACPI: fix broken conversion of older FADTs
-- ACPI: fix possible corruption of GPE list
-
-* Tue Aug 14 2007 Chuck Ebbert <cebbert at redhat.com>
-- revert "don't BUG on too-large memory allocation"
-- limit memory allocated by input force feedback drivers
-
-* Tue Aug 14 2007 John W. Linville <linville at redhat.com>
-- Update wireless-dev bits (mac80211 & ssb updates, bcm43xx -> b43 rename)
-
-* Tue Aug 14 2007 Chuck Ebbert <cebbert at redhat.com>
-- update CFS scheduler with upstream patches
-
-* Tue Aug 14 2007 Chuck Ebbert <cebbert at redhat.com>
-- set CONFIG_NET_RADIO (#251094)
-
-* Fri Aug 10 2007 Chuck Ebbert <cebbert at redhat.com>
-- 2.6.22.2
-- serial: revert changes to port detection
-
-* Fri Aug 10 2007 Chuck Ebbert <cebbert at redhat.com>
-- don't use incremental patches for -stable updates
-- update CFS scheduler patch
-- update utrace patches
-
-* Wed Aug 08 2007 John W. Linville <linville at redhat.com>
-- Update wireless bits (upstream fixes, iwlwifi and bcm43xx updates)
-
-* Wed Aug 08 2007 Chuck Ebbert <cebbert at redhat.com>
-- add xt_statistic.h to header list for iptables
-- detect broken lapic timer on some dual-core AMD systems
-- don't BUG on too-large memory allocation
-
-* Tue Aug 07 2007 John W. Linville <linville at redhat.com>
-- mac80211: probe for hidden SSIDs during when scanning for association
-
-* Mon Aug 06 2007 John W. Linville <linville at redhat.com>
-- Update git-wireless-dev.patch (bcm43xx & zd1211rw updates)
-- mac80211: Filter locally-originated multicast frames echoed by AP (2nd try)
-
-* Fri Aug 03 2007 John W. Linville <linville at redhat.com>
-- Disable busted mac80211 local multicast filter patch
-
-* Thu Aug 02 2007 John W. Linville <linville at redhat.com>
-- Update git-wireless-dev.patch (iwlwifi, rt2x00, & zd1211rw updates)
-- mac80211: Filter locally-originated multicast frames echoed by AP
-
-* Wed Aug 01 2007 Chuck Ebbert <cebbert at redhat.com>
-- fix crash in xfrm4
-
-* Tue Jul 31 2007 David Woodhouse <dwmw2 at infradead.org>
-- fix softmac deadlock.
-
-* Fri Jul 27 2007 John W. Linville <linville at redhat.com>
-- Update git-wireless-dev.patch (iwlwifi & bcm43xx updates)
-- Remove hunk of linux-2.6-wireless that was reverted upstream
-
-* Fri Jul 27 2007 Chuck Ebbert <cebbert at redhat.com>
-- revert upstream "genirq: do not mask interrupts by default"
-
-* Fri Jul 27 2007 Chuck Ebbert <cebbert at redhat.com>
-- fix DMI strings in HP notebook quirk for ALI controller
-
-* Fri Jul 27 2007 Chuck Ebbert <cebbert at redhat.com>
-- sync the CFS scheduler timekeeping changes with upstream
-
-* Fri Jul 27 2007 David Woodhouse <dwmw2 at infradead.org>
-- Update PlayStation 3 support (#249217)
-
-* Wed Jul 25 2007 John W. Linville <linville at redhat.com>
-- update wireless bits
-
-* Wed Jul 25 2007 Chuck Ebbert <cebbert at redhat.com>
-- kernel requires newer version of cpuspeed
-- pata_hpt37x: Fix 2.6.22 clock PLL regression (#249254)
-- atl1: possibly fix DMA bugs (#249511)
-
-* Wed Jul 25 2007 David Woodhouse <dwmw2 at infradead.org>
-- Restore bcm43xx functionality
-- Restore PowerMac suspend-to-ram via /sys/power/state
-  (since userspace forgot how to use the PMU ioctls)
-- Restore ofpath functionality (IDE_PROC_FS=y)
-
-* Mon Jul 23 2007 Chuck Ebbert <cebbert at redhat.com>
-- set CONFIG_DEBUG_SHIRQ only in -debug kernels
-
-* Mon Jul 23 2007 Chuck Ebbert <cebbert at redhat.com>
-- set CONFIG_USB_DEVICE_CLASS (should fix #249211)
-
-* Mon Jul 23 2007 Jarod Wilson <jwilson at redhat.com>
-- Re-enable aes-i586 and twofish-i586 for i686 kernels (#249158)
-
-* Fri Jul 20 2007 Chuck Ebbert <cebbert at redhat.com>
-- SDHCI: clear the error interrupt bit
-- ftdi_sio: fix oops
-
-* Tue Jul 20 2007 John W. Linville <linville at redhat.com>
-- update wireless bits
-
-* Fri Jul 20 2007 Chuck Ebbert <cebbert at redhat.com>
-- utrace update
-- CFS scheduler update
-
-* Tue Jul 17 2007 John W. Linville <linville at redhat.com>
-- update wireless bits
-
-* Tue Jul 17 2007 Chuck Ebbert <cebbert at redhat.com>
-- gfs2: update to the latest
-- sched: fix show_task()/show_tasks() output
-- sched: fix newly idle load balance in case of SMT
-- sched: fix the all pinned logic in load_balance_newidle()
-- fix leaks of struct seq_operations
-- fix leaks of ref to user struct
-- pata_atiixp: add SB700 PCI ID
-- ata_piix: fix pio/mwdma programming
-- sdhci: add ene controller id
-- sdhci: Fix "Unexpected interrupt" handling
-
-* Mon Jul 16 2007 Chuck Ebbert <cebbert at redhat.com>
-- bluetooth: hangup tty before releasing rfcomm
-- driver core: get driver properly during release
-- net scheduler: fix deadlock
-- input: rfkill driver screws up the CPU flags
-- acpi-cpufreq: make register write work properly again
-
-* Mon Jul 16 2007 Chuck Ebbert <cebbert at redhat.com>
-- add proper caching of last_ctl to the 'unbreak SMART' fix
-
-* Mon Jul 16 2007 Dave Jones <davej at redhat.com>
-- Unbreak SMART on libata.
-
-* Mon Jul 16 2007 Dave Jones <davej at redhat.com>
-- Disable warnings that trigger due to disabled USB suspend.
-
-* Fri Jul 13 2007 Chuck Ebbert <cebbert at redhat.com>
-- add more ATI SB700 ids to the ahci driver
-
-* Thu Jul 12 2007 Dave Jones <davej at redhat.com>
-- Some systems have a HPET which is not incrementing, which leads
-  to a complete hang.  Detect it during HPET setup.
-
-* Thu Jul 12 2007 Dave Jones <davej at redhat.com>
-- Replace the pcspkr private PIT lock by the global PIT lock to
-  serialize the PIT access all over the place.
-
-* Thu Jul 12 2007 Dave Jones <davej at redhat.com>
-- Add back the rediffed PS3 patches.
-
-* Thu Jul 12 2007 Chuck Ebbert <cebbert at redhat.com>
-- ata: update noncq list
-- idr: multiple bugfixes
-- tcp: sack fix leak msgs
-- vbe: always save ddc data
-
-* Thu Jul 12 2007 Jarod Wilson <jwilson at redhat.com>
-- Fix up some uname -r issues in certain kernel version
-  cases (due to new versioning scheme)
-
-* Wed Jul 11 2007 Chuck Ebbert <cebbert at redhat.com>
-- jbd: fix transaction dropping (kernel oops)
-- kvm: reinit real mode TSS on shutdown
-- kvm: detect SVM disabled by BIOS
-
-* Wed Jul 11 2007 Chuck Ebbert <cebbert at redhat.com>
-- sky2: re-enable lost interrupt workarounds
-- aacraid: ioctl handler needs permission check
-
-* Wed Jul 11 2007 Dave Jones <davej at redhat.com>
-- NFS: Add the mount option "nosharecache"
-
-* Wed Jul 11 2007 Dave Jones <davej at redhat.com>
-- Revert mkinitrd requires: bump to what's in FC7.
-
-* Wed Jul 11 2007 Dave Jones <davej at redhat.com>
-- Remove the x86-64 tickless patches, they aren't ready.
-
-* Wed Jul 11 2007 Chuck Ebbert <cebbert at redhat.com>
-- 2.6.22.1
-
-* Wed Jul 11 2007 John W. Linville <linville at redhat.com>
-- Update git-wireless-dev.patch
-- Add upstream version of rtl8187 patch
-- Add updated iwlwifi driver from intellinuxwireless.org
-
-* Tue Jul 10 2007 Dave Jones <davej at redhat.com>
-- Fix issue with PIE randomization (#246623).
-
-* Tue Jul 10 2007 Dave Jones <davej at redhat.com>
-- Rebase to 2.6.22
+* Wed Oct 10 2007 Chuck Ebbert <cebbert at redhat.com>
+- Linux 2.6.23

linux-2.6-ath5k.patch:

Index: linux-2.6-ath5k.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-ath5k.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-ath5k.patch	28 Sep 2007 02:10:07 -0000	1.3
+++ linux-2.6-ath5k.patch	10 Oct 2007 21:22:57 -0000	1.4
@@ -1,7 +1,7 @@
 diff -up linux-2.6.22.noarch/MAINTAINERS.orig linux-2.6.22.noarch/MAINTAINERS
---- linux-2.6.22.noarch/MAINTAINERS.orig	2007-09-27 19:58:06.000000000 -0400
-+++ linux-2.6.22.noarch/MAINTAINERS	2007-09-27 19:59:22.000000000 -0400
-@@ -652,6 +652,14 @@ M:	ecashin at coraid.com
+--- linux-2.6.22.noarch/MAINTAINERS.orig	2007-09-27 19:25:02.000000000 -0400
++++ linux-2.6.22.noarch/MAINTAINERS	2007-09-27 19:26:44.000000000 -0400
+@@ -642,6 +642,14 @@ M:	ecashin at coraid.com
  W:	http://www.coraid.com/support/linux
  S:	Supported
  
@@ -17,8 +17,8 @@
  P:	Jay Cliburn
  M:	jcliburn at gmail.com
 diff -up linux-2.6.22.noarch/drivers/net/wireless/Makefile.orig linux-2.6.22.noarch/drivers/net/wireless/Makefile
---- linux-2.6.22.noarch/drivers/net/wireless/Makefile.orig	2007-09-27 19:58:05.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/Makefile	2007-09-27 19:59:22.000000000 -0400
+--- linux-2.6.22.noarch/drivers/net/wireless/Makefile.orig	2007-09-27 19:25:02.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/Makefile	2007-09-27 19:27:03.000000000 -0400
 @@ -61,3 +61,5 @@ obj-$(CONFIG_RT2X00)		+= rt2x00/
  obj-$(CONFIG_P54_COMMON)	+= p54common.o
  obj-$(CONFIG_P54_USB)		+= p54usb.o
@@ -26,8 +26,8 @@
 +
 +obj-$(CONFIG_ATH5K)	+= ath5k/
 diff -up linux-2.6.22.noarch/drivers/net/wireless/Kconfig.orig linux-2.6.22.noarch/drivers/net/wireless/Kconfig
---- linux-2.6.22.noarch/drivers/net/wireless/Kconfig.orig	2007-09-27 19:58:05.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/Kconfig	2007-09-27 19:59:22.000000000 -0400
+--- linux-2.6.22.noarch/drivers/net/wireless/Kconfig.orig	2007-09-27 19:25:02.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/Kconfig	2007-09-27 19:26:44.000000000 -0400
 @@ -598,6 +598,19 @@ config P54_PCI
  	tristate "Prism54 PCI support"
  	depends on P54_COMMON && PCI
@@ -50,7 +50,7 @@
  source "drivers/net/wireless/b43/Kconfig"
 diff -up /dev/null linux-2.6.22.noarch/drivers/net/wireless/ath5k/phy.c
 --- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/ath5k/phy.c	2007-09-27 19:59:22.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/ath5k/phy.c	2007-09-27 19:26:44.000000000 -0400
 @@ -0,0 +1,1704 @@
 +/*
 + * PHY functions
@@ -1758,7 +1758,7 @@
 +}
 diff -up /dev/null linux-2.6.22.noarch/drivers/net/wireless/ath5k/ath5k.h
 --- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/ath5k/ath5k.h	2007-09-27 19:59:22.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/ath5k/ath5k.h	2007-09-27 19:26:44.000000000 -0400
 @@ -0,0 +1,1086 @@
 +/*
 + * Copyright (c) 2004-2007 Reyk Floeter <reyk at openbsd.org>
@@ -2848,13 +2848,13 @@
 +#endif
 diff -up /dev/null linux-2.6.22.noarch/drivers/net/wireless/ath5k/Makefile
 --- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/ath5k/Makefile	2007-09-27 19:59:22.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/ath5k/Makefile	2007-09-27 19:26:44.000000000 -0400
 @@ -0,0 +1,2 @@
 +ath5k-objs		= base.o hw.o regdom.o initvals.o phy.o
 +obj-$(CONFIG_ATH5K)	+= ath5k.o
 diff -up /dev/null linux-2.6.22.noarch/drivers/net/wireless/ath5k/reg.h
 --- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/ath5k/reg.h	2007-09-27 19:59:22.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/ath5k/reg.h	2007-09-27 19:26:44.000000000 -0400
 @@ -0,0 +1,1977 @@
 +/*
 + * Copyright (c) 2007 Nick Kossifidis <mickflemm at gmail.com>
@@ -4835,7 +4835,7 @@
 +#define	AR5K_PHY_GAIN_2GHZ_INI_5111	0x6480416c
 diff -up /dev/null linux-2.6.22.noarch/drivers/net/wireless/ath5k/regdom.h
 --- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/ath5k/regdom.h	2007-09-27 19:59:22.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/ath5k/regdom.h	2007-09-27 19:26:44.000000000 -0400
 @@ -0,0 +1,500 @@
 +/*
 + * Copyright (c) 2004, 2005 Reyk Floeter <reyk at openbsd.org>
@@ -5339,7 +5339,7 @@
 +#endif
 diff -up /dev/null linux-2.6.22.noarch/drivers/net/wireless/ath5k/hw.c
 --- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/ath5k/hw.c	2007-09-27 19:59:22.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/ath5k/hw.c	2007-09-27 19:26:44.000000000 -0400
 @@ -0,0 +1,4319 @@
 + /*
 + * Copyright (c) 2004-2007 Reyk Floeter <reyk at openbsd.org>
@@ -9662,7 +9662,7 @@
 +}
 diff -up /dev/null linux-2.6.22.noarch/drivers/net/wireless/ath5k/hw.h
 --- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/ath5k/hw.h	2007-09-27 19:59:22.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/ath5k/hw.h	2007-09-27 19:26:44.000000000 -0400
 @@ -0,0 +1,586 @@
 +/*
 + * Copyright (c) 2004-2007 Reyk Floeter <reyk at openbsd.org>
@@ -10252,7 +10252,7 @@
 +}
 diff -up /dev/null linux-2.6.22.noarch/drivers/net/wireless/ath5k/initvals.c
 --- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/ath5k/initvals.c	2007-09-27 19:59:22.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/ath5k/initvals.c	2007-09-27 19:26:44.000000000 -0400
 @@ -0,0 +1,1121 @@
 +/*
 + * Initial register settings functions
@@ -11377,7 +11377,7 @@
 +}
 diff -up /dev/null linux-2.6.22.noarch/drivers/net/wireless/ath5k/base.c
 --- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/ath5k/base.c	2007-09-27 19:59:22.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/ath5k/base.c	2007-09-27 19:26:44.000000000 -0400
 @@ -0,0 +1,2543 @@
 +/*-
 + * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
@@ -13924,7 +13924,7 @@
 +MODULE_VERSION(ATH_PCI_VERSION " (EXPERIMENTAL)");
 diff -up /dev/null linux-2.6.22.noarch/drivers/net/wireless/ath5k/base.h
 --- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/ath5k/base.h	2007-09-27 19:59:22.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/ath5k/base.h	2007-09-27 19:26:44.000000000 -0400
 @@ -0,0 +1,204 @@
 +/*-
 + * Copyright (c) 2002-2007 Sam Leffler, Errno Consulting
@@ -14132,7 +14132,7 @@
 +#endif
 diff -up /dev/null linux-2.6.22.noarch/drivers/net/wireless/ath5k/regdom.c
 --- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/ath5k/regdom.c	2007-09-27 19:59:22.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/ath5k/regdom.c	2007-09-27 19:26:44.000000000 -0400
 @@ -0,0 +1,121 @@
 +/*
 + * Copyright (c) 2004, 2005 Reyk Floeter <reyk at vantronix.net>
@@ -14255,24 +14255,3 @@
 +	return ieee;
 +}
 +
-diff -up linux-2.6.22.noarch/include/linux/pci_ids.h.orig linux-2.6.22.noarch/include/linux/pci_ids.h
---- linux-2.6.22.noarch/include/linux/pci_ids.h.orig	2007-09-27 22:06:11.000000000 -0400
-+++ linux-2.6.22.noarch/include/linux/pci_ids.h	2007-09-27 22:08:08.000000000 -0400
-@@ -2056,6 +2056,8 @@
- #define PCI_DEVICE_ID_BCM1250_PCI	0x0001
- #define PCI_DEVICE_ID_BCM1250_HT	0x0002
- 
-+#define PCI_VENDOR_ID_ATHEROS		0x168c
-+
- #define PCI_VENDOR_ID_NETCELL		0x169c
- #define PCI_DEVICE_ID_REVOLUTION	0x0044
- 
-@@ -2407,6 +2409,8 @@
- #define PCI_DEVICE_ID_NETMOS_9845	0x9845
- #define PCI_DEVICE_ID_NETMOS_9855	0x9855
- 
-+#define PCI_VENDOR_ID_3COM_2		0xa727
-+
- #define PCI_SUBVENDOR_ID_EXSYS		0xd84d
- #define PCI_SUBDEVICE_ID_EXSYS_4014	0x4014
- #define PCI_SUBDEVICE_ID_EXSYS_4055	0x4055

linux-2.6-build-nonintconfig.patch:

Index: linux-2.6-build-nonintconfig.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-build-nonintconfig.patch,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- linux-2.6-build-nonintconfig.patch	26 Sep 2007 18:58:34 -0000	1.8
+++ linux-2.6-build-nonintconfig.patch	10 Oct 2007 21:22:57 -0000	1.9
@@ -1,6 +1,6 @@
---- linux-2.6.17/scripts/kconfig/Makefile.nonintconfig
-+++ linux-2.6.17/scripts/kconfig/Makefile
-@@ -23,6 +23,11 @@ oldconfig: $(obj)/conf
+--- linux-2.6.22.noarch/scripts/kconfig/Makefile~	2007-07-20 13:44:34.000000000 -0400
++++ linux-2.6.22.noarch/scripts/kconfig/Makefile	2007-07-20 13:44:58.000000000 -0400
+@@ -22,6 +22,12 @@ oldconfig: $(obj)/conf
  silentoldconfig: $(obj)/conf
  	$< -s arch/$(ARCH)/Kconfig
  
@@ -9,9 +9,10 @@
 +loose_nonint_oldconfig: $(obj)/conf
 +	$< -B arch/$(ARCH)/Kconfig
 +
- update-po-config: $(obj)/kxgettext
- 	xgettext --default-domain=linux \
-           --add-comments --keyword=_ --keyword=N_ \
++
+ # Create new linux.po file
+ # Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
+ # The symlink is used to repair a deficiency in arch/um
 --- linux-2.6.17/scripts/kconfig/conf.c.nonintconfig
 +++ linux-2.6.17/scripts/kconfig/conf.c
 @@ -21,6 +21,8 @@ enum {
@@ -29,9 +30,9 @@
  
 +static int return_value = 0;
 +
- static void strip(char *str)
+ static const char *get_help(struct menu *menu)
  {
- 	char *p = str;
+ 	if (menu_has_help(menu))
 @@ -103,6 +107,16 @@ static void conf_askvalue(struct symbol 
  		fflush(stdout);
  		fgets(line, 128, stdin);

linux-2.6-crash-driver.patch:

Index: linux-2.6-crash-driver.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-crash-driver.patch,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- linux-2.6-crash-driver.patch	10 Jul 2007 16:14:59 -0000	1.6
+++ linux-2.6-crash-driver.patch	10 Oct 2007 21:22:57 -0000	1.7
@@ -187,14 +187,15 @@
  	int "Maximum number of legacy PTY in use"
 --- linux-2.6.16.noarch/drivers/char/Makefile~	2006-03-25 18:50:42.000000000 -0500
 +++ linux-2.6.16.noarch/drivers/char/Makefile	2006-03-25 18:50:59.000000000 -0500
-@@ -95,6 +95,7 @@ obj-$(CONFIG_IPMI_HANDLER)	+= ipmi/
+@@ -95,6 +95,8 @@ obj-$(CONFIG_IPMI_HANDLER)	+= ipmi/
+ obj-$(CONFIG_JS_RTC)		+= js-rtc.o
+ js-rtc-y = rtc.o
  
- obj-$(CONFIG_HANGCHECK_TIMER)	+= hangcheck-timer.o
- obj-$(CONFIG_TCG_TPM)		+= tpm/
 +obj-$(CONFIG_CRASH)		+= crash.o
- 
++
  # Files generated that shall be removed upon make clean
- clean-files := consolemap_deftbl.c defkeymap.c qtronixmap.c
+ clean-files := consolemap_deftbl.c defkeymap.c
+ 
 diff -urNp --exclude-from=/home/davej/.exclude linux-1050/include/asm-i386/crash.h linux-1060/include/asm-i386/crash.h
 --- linux-1050/include/asm-i386/crash.h
 +++ linux-1060/include/asm-i386/crash.h

linux-2.6-debug-taint-vm.patch:

Index: linux-2.6-debug-taint-vm.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-debug-taint-vm.patch,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- linux-2.6-debug-taint-vm.patch	10 Jul 2007 16:14:59 -0000	1.13
+++ linux-2.6-debug-taint-vm.patch	10 Oct 2007 21:22:57 -0000	1.14
@@ -22,7 +22,7 @@
  #endif
 @@ -39,8 +39,8 @@ struct bug_entry {
  #define WARN_ON(condition) ({						\
- 	typeof(condition) __ret_warn_on = (condition);			\
+ 	int __ret_warn_on = !!(condition);				\
  	if (unlikely(__ret_warn_on)) {					\
 -		printk("WARNING: at %s:%d %s()\n", __FILE__,		\
 -			__LINE__, __FUNCTION__);			\
@@ -72,8 +72,6 @@
  				print_objinfo(cachep, objp, 0);
  			}
  			/* Hexdump the affected line */
---- linux-2.6.21.noarch/mm/slab.c~	2007-05-14 11:51:33.000000000 -0400
-+++ linux-2.6.21.noarch/mm/slab.c	2007-05-14 11:53:00.000000000 -0400
 @@ -2924,8 +2924,8 @@ static void check_slabp(struct kmem_cach
  	if (entries != cachep->num - slabp->inuse) {
  bad:
@@ -85,36 +83,14 @@
  		for (i = 0;
  		     i < sizeof(*slabp) + cachep->num * sizeof(kmem_bufctl_t);
  		     i++) {
---- linux-2.6.21.noarch/mm/slub.c~	2007-05-27 22:51:45.000000000 -0400
-+++ linux-2.6.21.noarch/mm/slub.c	2007-05-27 22:56:48.000000000 -0400
-@@ -446,8 +446,8 @@ static void object_err(struct kmem_cache
- {
- 	u8 *addr = page_address(page);
- 
--	printk(KERN_ERR "*** SLUB %s: %s at 0x%p slab 0x%p\n",
--			s->name, reason, object, page);
-+	printk(KERN_ERR "*** SLUB %s: %s at 0x%p slab 0x%p [%s]\n",
-+			s->name, reason, object, page, print_tainted());
- 	printk(KERN_ERR "    offset=%tu flags=0x%04lx inuse=%u freelist=0x%p\n",
- 		object - addr, page->flags, page->inuse, page->freelist);
- 	if (object > addr + 16)
-@@ -465,8 +465,8 @@ static void slab_err(struct kmem_cache *
- 	va_start(args, reason);
- 	vsnprintf(buf, sizeof(buf), reason, args);
+--- linux-2.6.22.noarch/mm/slub.c~	2007-07-20 14:15:05.000000000 -0400
++++ linux-2.6.22.noarch/mm/slub.c	2007-07-20 14:17:37.000000000 -0400
+@@ -450,7 +450,7 @@ static void slab_bug(struct kmem_cache *
  	va_end(args);
--	printk(KERN_ERR "*** SLUB %s: %s in slab @0x%p\n", s->name, buf,
--		page);
-+	printk(KERN_ERR "*** SLUB %s: %s in slab @0x%p [%s]\n", s->name, buf,
-+		page, print_tainted());
- 	dump_stack();
- }
- 
-@@ -737,7 +737,7 @@ static int on_freelist(struct kmem_cache
- 							s->objects - nr);
- 		page->inuse = s->objects - nr;
- 		printk(KERN_ERR "@@@ SLUB %s: Object count adjusted. "
--			"Slab @0x%p\n", s->name, page);
-+			"Slab @0x%p [%s]\n", s->name, page, print_tainted());
- 	}
- 	return search == NULL;
+ 	printk(KERN_ERR "========================================"
+ 			"=====================================\n");
+-	printk(KERN_ERR "BUG %s: %s\n", s->name, buf);
++	printk(KERN_ERR "BUG %s (%s): %s\n", s->name, print_tainted(), buf);
+ 	printk(KERN_ERR "----------------------------------------"
+ 			"-------------------------------------\n\n");
  }

linux-2.6-devmem.patch:

Index: linux-2.6-devmem.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-devmem.patch,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- linux-2.6-devmem.patch	10 Jul 2007 16:14:59 -0000	1.14
+++ linux-2.6-devmem.patch	10 Oct 2007 21:22:57 -0000	1.15
@@ -387,19 +387,6 @@
  #endif /* __KERNEL__ */
  
  #endif
-Index: linux-2.6/include/asm-arm26/page.h
-===================================================================
---- linux-2.6.orig/include/asm-arm26/page.h
-+++ linux-2.6/include/asm-arm26/page.h
-@@ -95,6 +95,8 @@ typedef unsigned long pgprot_t;
- #define VM_DATA_DEFAULT_FLAGS	(VM_READ | VM_WRITE | VM_EXEC | \
- 				 VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
- 
-+#define devmem_is_allowed(x) 1
-+
- #endif /* __KERNEL__ */
- 
- #include <asm-generic/page.h>
 Index: linux-2.6/include/asm-cris/page.h
 ===================================================================
 --- linux-2.6.orig/include/asm-cris/page.h
@@ -539,13 +526,11 @@
  #endif /* __KERNEL__ */
  
  #endif /* _S390_PAGE_H */
-Index: linux-2.6/include/asm-sh/page.h
-===================================================================
---- linux-2.6.orig/include/asm-sh/page.h
-+++ linux-2.6/include/asm-sh/page.h
-@@ -124,5 +124,7 @@ typedef struct { unsigned long pgprot; }
- #define __HAVE_ARCH_GATE_AREA
- #endif
+--- linux-2.6.22.noarch/include/asm-sh/page.h~	2007-07-20 14:22:49.000000000 -0400
++++ linux-2.6.22.noarch/include/asm-sh/page.h	2007-07-20 14:22:54.000000000 -0400
+@@ -158,5 +158,7 @@ typedef struct { unsigned long pgd; } pg
+ #define ARCH_KMALLOC_MINALIGN	4
+ #define ARCH_SLAB_MINALIGN	4
  
 +#define devmem_is_allowed(x) 1
 +

linux-2.6-execshield.patch:

Index: linux-2.6-execshield.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-execshield.patch,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -r1.55 -r1.56
--- linux-2.6-execshield.patch	11 Jul 2007 03:55:59 -0000	1.55
+++ linux-2.6-execshield.patch	10 Oct 2007 21:22:57 -0000	1.56
@@ -7,7 +7,7 @@
  		clear_bit(X86_FEATURE_PSE, c->x86_capability);
  
 +	if (exec_shield != 0) {
-+#ifdef CONFIG_HIGHMEM64G   /* NX implies PAE */
++#ifdef CONFIG_X86_PAE
 +		if (!test_bit(X86_FEATURE_NX, c->x86_capability))
 +#endif
 +		clear_bit(X86_FEATURE_SEP, c->x86_capability);
@@ -89,16 +89,16 @@
 +		current->mm->brk = new_brk;
 +}
 +
---- linux-2.6.20.noarch/arch/i386/kernel/smp.c~	2007-02-17 21:43:47.000000000 -0500
-+++ linux-2.6.20.noarch/arch/i386/kernel/smp.c	2007-02-17 21:43:53.000000000 -0500
-@@ -23,6 +23,7 @@
+--- linux-2.6.22.noarch/arch/i386/kernel/smp.c~	2007-07-20 13:48:03.000000000 -0400
++++ linux-2.6.22.noarch/arch/i386/kernel/smp.c	2007-07-20 13:48:08.000000000 -0400
+@@ -22,6 +22,7 @@
  
  #include <asm/mtrr.h>
  #include <asm/tlbflush.h>
 +#include <asm/desc.h>
+ #include <asm/mmu_context.h>
  #include <mach_apic.h>
  
- /*
 @@ -325,6 +326,8 @@ fastcall void smp_invalidate_interrupt(s
  	unsigned long cpu;
  
@@ -108,18 +108,16 @@
  
  	if (!cpu_isset(cpu, flush_cpumask))
  		goto out;
-Index: linux-2.6/arch/i386/kernel/sysenter.c
-===================================================================
---- linux-2.6.orig/arch/i386/kernel/sysenter.c
-+++ linux-2.6/arch/i386/kernel/sysenter.c
+--- linux-2.6.22.noarch/arch/i386/kernel/sysenter.c~	2007-07-31 14:20:04.000000000 -0400
++++ linux-2.6.22.noarch/arch/i386/kernel/sysenter.c	2007-07-31 14:20:11.000000000 -0400
 @@ -16,6 +16,7 @@
  #include <linux/string.h>
  #include <linux/elf.h>
  #include <linux/mm.h>
 +#include <linux/mman.h>
+ #include <linux/err.h>
  #include <linux/module.h>
  
- #include <asm/cpufeature.h>
 @@ -284,7 +284,7 @@ int arch_setup_additional_pages(struct l
  	if (compat)
  		addr = VDSO_HIGH_BASE;
@@ -129,11 +127,11 @@
  		if (IS_ERR_VALUE(addr)) {
  			ret = addr;
  			goto up_fail;
---- linux-2.6.21.noarch/kernel/sysctl.c~	2007-05-27 22:30:01.000000000 -0400
-+++ linux-2.6.21.noarch/kernel/sysctl.c	2007-05-27 22:30:30.000000000 -0400
-@@ -79,6 +79,26 @@ extern int compat_log;
- extern int maps_protect;
+--- linux-2.6.22.noarch/kernel/sysctl.c~	2007-07-20 13:48:52.000000000 -0400
++++ linux-2.6.22.noarch/kernel/sysctl.c	2007-07-20 13:49:22.000000000 -0400
+@@ -80,6 +80,26 @@ extern int maps_protect;
  extern int sysctl_stat_interval;
+ extern int audit_argv_kb;
  
 +int exec_shield = (1<<0);
 +/* exec_shield is a bitmask:
@@ -148,7 +146,7 @@
 +
 +static int __init setup_exec_shield(char *str)
 +{
-+	get_option (&str, &exec_shield);
++	get_option(&str, &exec_shield);
 +
 +	return 1;
 +}
@@ -158,11 +156,11 @@
  /* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */
  static int maxolduid = 65535;
  static int minolduid;
-@@ -331,6 +351,22 @@
+@@ -331,6 +351,14 @@
  		.proc_handler	= &proc_dointvec,
  	},
  	{
-+		.ctl_name	= KERN_EXEC_SHIELD,
++		.ctl_name	= CTL_UNNUMBERED,
 +		.procname	= "exec-shield",
 +		.data		= &exec_shield,
 +		.maxlen		= sizeof(int),
@@ -170,14 +168,6 @@
 +		.proc_handler	= &proc_dointvec,
 +	},
 +	{
-+		.ctl_name	= KERN_PRINT_FATAL,
-+		.procname	= "print-fatal-signals",
-+		.data		= &print_fatal_signals,
-+		.maxlen		= sizeof(int),
-+		.mode		= 0644,
-+		.proc_handler	= &proc_dointvec,
-+	},
-+	{
  		.ctl_name	= KERN_CORE_USES_PID,
  		.procname	= "core_uses_pid",
  		.data		= &core_uses_pid,
@@ -251,10 +241,10 @@
  	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);
-@@ -1393,7 +1405,73 @@ get_unmapped_area(struct file *file, uns
+@@ -1393,7 +1405,72 @@ get_unmapped_area(struct file *file, uns
  	return addr;
  }
- 
+-
 -EXPORT_SYMBOL(get_unmapped_area);
 +EXPORT_SYMBOL(get_unmapped_area_prot);
 +
@@ -303,8 +293,8 @@
 +			 */
 +			if (addr >= 0x01000000) {
 +				tmp = randomize_range(0x01000000,
-+					PAGE_ALIGN(max(mm->start_brk, (unsigned long)0x08000000)),
-+					len);
++					PAGE_ALIGN(max(mm->start_brk,
++					(unsigned long)0x08000000)), len);
 +				vma = find_vma(mm, tmp);
 +				if (TASK_SIZE - len >= tmp &&
 +				    (!vma || tmp + len <= vma->vm_start))
@@ -375,16 +365,13 @@
  
  	/*
  	 * Walk the list again, actually closing and freeing it,
-Index: linux-2.6/arch/i386/kernel/traps.c
-===================================================================
---- linux-2.6.orig/arch/i386/kernel/traps.c
-+++ linux-2.6/arch/i386/kernel/traps.c
-@@ -638,7 +638,84 @@ DO_ERROR(10, SIGSEGV, "invalid TSS", inv
+--- linux-2.6.22.noarch/arch/i386/kernel/traps.c~	2007-07-20 13:50:07.000000000 -0400
++++ linux-2.6.22.noarch/arch/i386/kernel/traps.c	2007-07-20 13:52:09.000000000 -0400
+@@ -573,7 +573,88 @@ DO_ERROR(10, SIGSEGV, "invalid TSS", inv
  DO_ERROR(11, SIGBUS,  "segment not present", segment_not_present)
  DO_ERROR(12, SIGBUS,  "stack segment", stack_segment)
- DO_ERROR_INFO(17, SIGBUS, "alignment check", alignment_check, BUS_ADRALN, 0)
--DO_ERROR_INFO(32, SIGSEGV, "iret exception", iret_error, ILL_BADSTK, 0)
-+
+ DO_ERROR_INFO(17, SIGBUS, "alignment check", alignment_check, BUS_ADRALN, 0, 0)
+-DO_ERROR_INFO(32, SIGSEGV, "iret exception", iret_error, ILL_BADSTK, 0, 1)
 +
 +/*
 + * lazy-check for CS validity on exec-shield binaries:
@@ -395,9 +382,9 @@
 +static int
 +check_lazy_exec_limit(int cpu, struct pt_regs *regs, long error_code)
 +{
-+	struct desc_struct *desc1, *desc2;
-+	struct vm_area_struct *vma;
-+	unsigned long limit;
++struct desc_struct *desc1, *desc2;
++struct vm_area_struct *vma;
++unsigned long limit;
 +
 +	if (current->mm == NULL)
 +		return 0;
@@ -442,17 +429,21 @@
 + * The fixup code for errors in iret jumps to here (iret_exc).  It loses
 + * the original trap number and error code.  The bogus trap 32 and error
 + * code 0 are what the vanilla kernel delivers via:
-+ * DO_ERROR_INFO(32, SIGSEGV, "iret exception", iret_error, ILL_BADSTK, 0)
++ * DO_ERROR_INFO(32, SIGSEGV, "iret exception", iret_error, ILL_BADSTK, 0, 1)
++ *
++ * NOTE: Because of the final "1" in the macro we need to enable interrupts.
 + *
 + * In case of a general protection fault in the iret instruction, we
 + * need to check for a lazy CS update for exec-shield.
 + */
 +fastcall void do_iret_error(struct pt_regs *regs, long error_code)
 +{
-+	int ok = check_lazy_exec_limit(get_cpu(), regs, error_code);
++	int ok;
++	local_irq_enable();
++	ok = check_lazy_exec_limit(get_cpu(), regs, error_code);
 +	put_cpu();
 +	if (!ok && notify_die(DIE_TRAP, "iret exception", regs,
-+			      error_code, 32, SIGSEGV) != NOTIFY_STOP) {
++	    error_code, 32, SIGSEGV) != NOTIFY_STOP) {
 +		siginfo_t info;
 +		info.si_signo = SIGSEGV;
 +		info.si_errno = 0;
@@ -462,6 +453,7 @@
 +			&info);
 +	}
 +}
++
  
  fastcall void __kprobes do_general_protection(struct pt_regs * regs,
  					      long error_code)
@@ -602,19 +594,6 @@
  	kpte = lookup_address(address);
  	if (!kpte)
  		return -EINVAL;
-Index: linux-2.6/arch/ia64/ia32/binfmt_elf32.c
-===================================================================
---- linux-2.6.orig/arch/ia64/ia32/binfmt_elf32.c
-+++ linux-2.6/arch/ia64/ia32/binfmt_elf32.c
-@@ -266,7 +266,7 @@ elf32_set_personality (void)
- }
- 
- static unsigned long
--elf32_map (struct file *filep, unsigned long addr, struct elf_phdr *eppnt, int prot, int type)
-+elf32_map (struct file *filep, unsigned long addr, struct elf_phdr *eppnt, int prot, int type, unsigned long unused)
- {
- 	unsigned long pgoff = (eppnt->p_vaddr) & ~IA32_PAGE_MASK;
- 
 Index: linux-2.6/arch/x86_64/ia32/ia32_binfmt.c
 ===================================================================
 --- linux-2.6.orig/arch/x86_64/ia32/ia32_binfmt.c
@@ -855,149 +834,7 @@
  /*
 --- linux-2.6.21.noarch/fs/binfmt_elf.c~	2007-05-27 22:36:34.000000000 -0400
 +++ linux-2.6.21.noarch/fs/binfmt_elf.c	2007-05-27 22:36:45.000000000 -0400
-@@ -45,7 +45,7 @@
- 
- static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs);
- static int load_elf_library(struct file *);
--static unsigned long elf_map (struct file *, unsigned long, struct elf_phdr *, int, int);
-+static unsigned long elf_map (struct file *, unsigned long, struct elf_phdr *, int, int, unsigned long);
- 
- /*
-  * If we don't support core dumping, then supply a NULL so we
-@@ -285,33 +285,71 @@ create_elf_tables(struct linux_binprm *b
- #ifndef elf_map
- 
- static unsigned long elf_map(struct file *filep, unsigned long addr,
--		struct elf_phdr *eppnt, int prot, int type)
-+		struct elf_phdr *eppnt, int prot, int type,
-+		unsigned long total_size)
- {
- 	unsigned long map_addr;
--	unsigned long pageoffset = ELF_PAGEOFFSET(eppnt->p_vaddr);
-+	unsigned long size = eppnt->p_filesz + ELF_PAGEOFFSET(eppnt->p_vaddr);
-+	unsigned long off = eppnt->p_offset - ELF_PAGEOFFSET(eppnt->p_vaddr);
-+
-+	addr = ELF_PAGESTART(addr);
-+	size = ELF_PAGEALIGN(size);
- 
--	down_write(&current->mm->mmap_sem);
- 	/* mmap() will return -EINVAL if given a zero size, but a
- 	 * segment with zero filesize is perfectly valid */
--	if (eppnt->p_filesz + pageoffset)
--		map_addr = do_mmap(filep, ELF_PAGESTART(addr),
--				   eppnt->p_filesz + pageoffset, prot, type,
--				   eppnt->p_offset - pageoffset);
--	else
--		map_addr = ELF_PAGESTART(addr);
-+	if (!size)
-+		return addr;
-+
-+	down_write(&current->mm->mmap_sem);
-+	/*
-+	* total_size is the size of the ELF (interpreter) image.
-+	* The _first_ mmap needs to know the full size, otherwise
-+	* randomization might put this image into an overlapping
-+	* position with the ELF binary image. (since size < total_size)
-+	* So we first map the 'big' image - and unmap the remainder at
-+	* the end. (which unmap is needed for ELF images with holes.)
-+	*/
-+	if (total_size) {
-+		total_size = ELF_PAGEALIGN(total_size);
-+		map_addr = do_mmap(filep, addr, total_size, prot, type, off);
-+		if (!BAD_ADDR(map_addr))
-+			do_munmap(current->mm, map_addr+size, total_size-size);
-+	} else
-+		map_addr = do_mmap(filep, addr, size, prot, type, off);
-+
- 	up_write(&current->mm->mmap_sem);
- 	return(map_addr);
- }
- 
- #endif /* !elf_map */
- 
-+static inline unsigned long total_mapping_size(struct elf_phdr *cmds, int nr)
-+{
-+	int i, first_idx = -1, last_idx = -1;
-+
-+	for (i = 0; i < nr; i++)
-+		if (cmds[i].p_type == PT_LOAD) {
-+			last_idx = i;
-+			if (first_idx == -1)
-+				first_idx = i;
-+		}
-+
-+	if (first_idx == -1)
-+		return 0;
-+
-+	return cmds[last_idx].p_vaddr + cmds[last_idx].p_memsz -
-+				ELF_PAGESTART(cmds[first_idx].p_vaddr);
-+}
-+
-+
- /* This is much more generalized than the library routine read function,
-    so we keep this separate.  Technically the library read function
-    is only provided so that we can read a.out libraries that have
-    an ELF header */
- 
- static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
--		struct file *interpreter, unsigned long *interp_load_addr)
-+		struct file *interpreter, unsigned long *interp_map_addr,
-+		unsigned long no_base)
- {
- 	struct elf_phdr *elf_phdata;
- 	struct elf_phdr *eppnt;
-@@ -319,6 +357,7 @@ static unsigned long load_elf_interp(str
- 	int load_addr_set = 0;
- 	unsigned long last_bss = 0, elf_bss = 0;
- 	unsigned long error = ~0UL;
-+	unsigned long total_size;
- 	int retval, i, size;
- 
- 	/* First of all, some simple consistency checks */
-@@ -357,6 +396,10 @@ static unsigned long load_elf_interp(str
- 		goto out_close;
- 	}
- 
-+	total_size = total_mapping_size(elf_phdata, interp_elf_ex->e_phnum);
-+	if (!total_size)
-+		goto out_close;
-+
- 	eppnt = elf_phdata;
- 	for (i = 0; i < interp_elf_ex->e_phnum; i++, eppnt++) {
- 		if (eppnt->p_type == PT_LOAD) {
-@@ -374,9 +417,14 @@ static unsigned long load_elf_interp(str
- 			vaddr = eppnt->p_vaddr;
- 			if (interp_elf_ex->e_type == ET_EXEC || load_addr_set)
- 				elf_type |= MAP_FIXED;
-+			else if (no_base && interp_elf_ex->e_type == ET_DYN)
-+				load_addr = -vaddr;
- 
- 			map_addr = elf_map(interpreter, load_addr + vaddr,
--					   eppnt, elf_prot, elf_type);
-+					   eppnt, elf_prot, elf_type, total_size);
-+			total_size = 0;
-+			if (!*interp_map_addr)
-+				*interp_map_addr = map_addr;
- 			error = map_addr;
- 			if (BAD_ADDR(map_addr))
- 				goto out_close;
-@@ -442,8 +490,7 @@ static unsigned long load_elf_interp(str
- 			goto out_close;
- 	}
- 
--	*interp_load_addr = load_addr;
--	error = ((unsigned long)interp_elf_ex->e_entry) + load_addr;
-+	error = load_addr;
- 
- out_close:
- 	kfree(elf_phdata);
-@@ -586,12 +586,12 @@ static int load_elf_binary(struct linux_
- 	int elf_exec_fileno;
- 	int retval, i;
- 	unsigned int size;
--	unsigned long elf_entry, interp_load_addr = 0;
-+	unsigned long elf_entry, interp_load_addr = 0, interp_map_addr = 0;
- 	unsigned long start_code, end_code, start_data, end_data;
+@@ -608,7 +608,7 @@ static int load_elf_binary(struct linux_
  	unsigned long reloc_func_desc = 0;
  	char passed_fileno[6];
  	struct files_struct *files;
@@ -1006,15 +843,15 @@
  	unsigned long def_flags = 0;
  	struct {
  		struct elfhdr elf_ex;
-@@ -700,6 +747,8 @@ static int load_elf_binary(struct linux_
- 	}
+@@ -675,6 +675,8 @@ static int load_elf_binary(struct linux_
+ 	fd_install(elf_exec_fileno = retval, bprm->file);
  
  	elf_ppnt = elf_phdata;
 +	executable_stack = EXSTACK_DEFAULT;
 +
- 	for (i = 0; i < loc->elf_ex.e_phnum; i++, elf_ppnt++)
- 		if (elf_ppnt->p_type == PT_GNU_STACK) {
- 			if (elf_ppnt->p_flags & PF_X)
+ 	elf_bss = 0;
+ 	elf_brk = 0;
+ 
 @@ -767,6 +767,11 @@ static int load_elf_binary(struct linux_
  			break;
  		}
@@ -1053,47 +890,6 @@
  		current->personality |= READ_IMPLIES_EXEC;
  
  	if (!(current->personality & ADDR_NO_RANDOMIZE) && randomize_va_space)
-@@ -872,9 +872,8 @@ static int load_elf_binary(struct linux_
- 	current->mm->start_stack = bprm->p;
- 
- 	/* Now we do a little grungy work by mmaping the ELF image into
--	   the correct location in memory.  At this point, we assume that
--	   the image should be loaded at fixed address, not at a variable
--	   address. */
-+	 * the correct location in memory.
-+	 */
- 	for(i = 0, elf_ppnt = elf_phdata;
- 	    i < loc->elf_ex.e_phnum; i++, elf_ppnt++) {
- 		int elf_prot = 0, elf_flags;
-@@ -927,7 +927,7 @@ static int load_elf_binary(struct linux_
- 		}
- 
- 		error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt,
--				elf_prot, elf_flags);
-+				elf_prot, elf_flags, 0);
- 		if (BAD_ADDR(error)) {
- 			send_sig(SIGKILL, current, 0);
- 			goto out_free_dentry;
-@@ -936,10 +998,17 @@ static int load_elf_binary(struct linux_
- 		if (interpreter_type == INTERPRETER_AOUT)
- 			elf_entry = load_aout_interp(&loc->interp_ex,
- 						     interpreter);
--		else
-+		else {
- 			elf_entry = load_elf_interp(&loc->interp_elf_ex,
- 						    interpreter,
--						    &interp_load_addr);
-+						    &interp_map_addr,
-+						    load_bias);
-+			if (!IS_ERR((void *)elf_entry)) {
-+				/* load_elf_interp() returns relocation adjustment */
-+				interp_load_addr = elf_entry;
-+				elf_entry += loc->interp_elf_ex.e_entry;
-+			}
-+		}
- 		if (BAD_ADDR(elf_entry)) {
- 			force_sig(SIGSEGV, current);
- 			retval = IS_ERR((void *)elf_entry) ?
 @@ -960,21 +1029,22 @@ static int load_elf_binary(struct linux_
  		}
  	}
@@ -1132,13 +928,13 @@
  	if (current->personality & MMAP_PAGE_ZERO) {
  		/* Why this, you ask???  Well SVr4 maps page 0 as read-only,
  		   and some applications "depend" upon this behavior.
---- linux-2.6.21.noarch/fs/proc/array.c~	2007-05-27 22:43:03.000000000 -0400
-+++ linux-2.6.21.noarch/fs/proc/array.c	2007-05-27 22:44:00.000000000 -0400
-@@ -395,8 +395,12 @@ static int do_task_stat(struct task_stru
+--- linux-2.6.22.noarch/fs/proc/array.c~	2007-07-20 18:09:09.000000000 -0400
++++ linux-2.6.22.noarch/fs/proc/array.c	2007-07-20 18:09:27.000000000 -0400
+@@ -439,8 +439,12 @@ static int do_task_stat(struct task_stru
  	}
  	rcu_read_unlock();
  
--	if (!whole || num_threads<2)
+-	if (!whole || num_threads < 2)
 -		wchan = get_wchan(task);
 +	if (!whole || num_threads < 2) {
 +		wchan = 0;
@@ -1253,19 +1049,17 @@
  
  	/*
  	 * Print the dentry name for named mappings, and a
-Index: linux-2.6/include/asm-i386/a.out.h
-===================================================================
---- linux-2.6.orig/include/asm-i386/a.out.h
-+++ linux-2.6/include/asm-i386/a.out.h
+--- linux-2.6.22.noarch/include/asm-i386/a.out.h~	2007-07-20 14:10:41.000000000 -0400
++++ linux-2.6.22.noarch/include/asm-i386/a.out.h	2007-07-20 14:10:52.000000000 -0400
 @@ -19,7 +19,7 @@ struct exec
  
  #ifdef __KERNEL__
  
 -#define STACK_TOP	TASK_SIZE
 +#define STACK_TOP	(TASK_SIZE - PAGE_SIZE)  /* 1 page for vdso */
+ #define STACK_TOP_MAX	STACK_TOP
  
  #endif
- 
 --- linux-2.6.19.noarch/include/asm-i386/desc.h~	2006-12-08 06:52:55.000000000 -0500
 +++ linux-2.6.19.noarch/include/asm-i386/desc.h	2006-12-08 06:53:14.000000000 -0500
 @@ -185,6 +185,20 @@ static inline unsigned long get_desc_bas
@@ -1513,82 +1307,21 @@
  	void (*unmap_area) (struct mm_struct *mm, unsigned long addr);
  	unsigned long mmap_base;		/* base of mmap area */
  	unsigned long task_size;		/* size of task vm space */
-Index: linux-2.6/include/linux/sysctl.h
-===================================================================
---- linux-2.6.orig/include/linux/sysctl.h
-+++ linux-2.6/include/linux/sysctl.h
-@@ -100,6 +100,8 @@ enum
- 
- 	KERN_CAP_BSET=14,	/* int: capability bounding set */
- 	KERN_PANIC=15,		/* int: panic timeout */
-+	KERN_EXEC_SHIELD=1000,	/* int: exec-shield enabled (0/1/2) */
-+	KERN_PRINT_FATAL=1001,	/* int: print fatal signals (0/1/2) */
- 	KERN_REALROOTDEV=16,	/* real root device to mount after initrd */
- 
- 	KERN_SPARC_REBOOT=21,	/* reboot command on Sparc */
-Index: linux-2.6/kernel/signal.c
-===================================================================
---- linux-2.6.orig/kernel/signal.c
-+++ linux-2.6/kernel/signal.c
-@@ -764,6 +764,37 @@ out_set:
- #define LEGACY_QUEUE(sigptr, sig) \
- 	(((sig) < SIGRTMIN) && sigismember(&(sigptr)->signal, (sig)))
- 
-+int print_fatal_signals = 0;
-+
-+static void print_fatal_signal(struct pt_regs *regs, int signr)
-+{
-+	printk(KERN_INFO "%s/%d: potentially unexpected fatal signal %d.\n",
-+		current->comm, current->pid, signr);
-+
-+#ifdef __i386__
-+	printk(KERN_INFO "code at %08lx: ", regs->eip);
-+	{
-+		int i;
-+		for (i = 0; i < 16; i++) {
-+			unsigned char insn;
-+
-+			__get_user(insn, (unsigned char *)(regs->eip + i));
-+			printk("%02x ", insn);
-+		}
-+	}
-+#endif
-+	printk("\n");
-+	show_regs(regs);
-+}
-+
-+static int __init setup_print_fatal_signals(char *str)
-+{
-+	get_option (&str, &print_fatal_signals);
-+
-+	return 1;
-+}
-+
-+__setup("print-fatal-signals=", setup_print_fatal_signals);
- 
- static int
- specific_send_sig_info(int sig, struct siginfo *info, struct task_struct *t)
-@@ -1795,6 +1826,8 @@ relock:
- 		 * Anything else is fatal, maybe with a core dump.
- 		 */
- 		current->flags |= PF_SIGNALED;
-+		if (print_fatal_signals)
-+			print_fatal_signal(regs, signr);
- 		if (sig_kernel_coredump(signr)) {
- 			/*
- 			 * If it was able to dump core, this kills all
-Index: linux-2.6/mm/mprotect.c
-===================================================================
---- linux-2.6.orig/mm/mprotect.c
-+++ linux-2.6/mm/mprotect.c
-@@ -23,6 +23,7 @@
+--- linux-2.6.22.noarch/mm/mprotect.c~	2007-07-31 16:12:27.000000000 -0400
++++ linux-2.6.22.noarch/mm/mprotect.c	2007-07-31 16:14:24.000000000 -0400
+@@ -26,8 +26,12 @@
  #include <linux/swapops.h>
  #include <asm/uaccess.h>
  #include <asm/pgtable.h>
 +#include <asm/pgalloc.h>
  #include <asm/cacheflush.h>
  #include <asm/tlbflush.h>
++#ifdef CONFIG_X86
++#include <asm/desc.h>
++#endif
  
+ static void change_pte_range(struct mm_struct *mm, pmd_t *pmd,
+ 		unsigned long addr, unsigned long end, pgprot_t newprot,
 @@ -135,7 +136,7 @@ mprotect_fixup(struct vm_area_struct *vm
  	struct mm_struct *mm = vma->vm_mm;
  	unsigned long oldflags = vma->vm_flags;
@@ -1608,11 +1341,9 @@
  	if (is_vm_hugetlb_page(vma))
  		hugetlb_change_protection(vma, start, end, vma->vm_page_prot);
  	else
-Index: linux-2.6/mm/mremap.c
-===================================================================
---- linux-2.6.orig/mm/mremap.c
-+++ linux-2.6/mm/mremap.c
-@@ -389,8 +389,8 @@ unsigned long do_mremap(unsigned long ad
+--- linux-2.6.22.noarch/mm/mremap.c~	2007-07-13 15:40:07.000000000 -0400
++++ linux-2.6.22.noarch/mm/mremap.c	2007-07-13 15:41:04.000000000 -0400
+@@ -392,8 +392,8 @@ unsigned long do_mremap(unsigned long ad
  			if (vma->vm_flags & VM_MAYSHARE)
  				map_flags |= MAP_SHARED;
  
@@ -1620,8 +1351,8 @@
 -						vma->vm_pgoff, map_flags);
 +			new_addr = get_unmapped_area_prot(vma->vm_file, 0, new_len,
 +				vma->vm_pgoff, map_flags, vma->vm_flags & VM_EXEC);
- 			ret = new_addr;
- 			if (new_addr & ~PAGE_MASK)
+ 			if (new_addr & ~PAGE_MASK) {
+ 				ret = new_addr;
  				goto out;
 --- linux-2.6.21.noarch/mm/mmap.c~	2007-06-06 17:50:39.000000000 -0400
 +++ linux-2.6.21.noarch/mm/mmap.c	2007-06-06 17:52:12.000000000 -0400
@@ -1641,3 +1372,236 @@
  		addr = PAGE_ALIGN(addr);
  		vma = find_vma(mm, addr);
  		if (TASK_SIZE - len >= addr &&
+
+
+
+diff --git a/arch/ia64/ia32/binfmt_elf32.c b/arch/ia64/ia32/binfmt_elf32.c
+index 1cfab32..e1189ba 100644
+--- a/arch/ia64/ia32/binfmt_elf32.c
++++ b/arch/ia64/ia32/binfmt_elf32.c
+@@ -226,7 +226,7 @@ elf32_set_personality (void)
+ }
+ 
+ static unsigned long
+-elf32_map (struct file *filep, unsigned long addr, struct elf_phdr *eppnt, int prot, int type)
++elf32_map(struct file *filep, unsigned long addr, struct elf_phdr *eppnt, int prot, int type, unsigned long unused)
+ {
+ 	unsigned long pgoff = (eppnt->p_vaddr) & ~IA32_PAGE_MASK;
+ 
+diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
+index 4482a06..ba24cb2 100644
+--- a/fs/binfmt_elf.c
++++ b/fs/binfmt_elf.c
+@@ -45,7 +45,7 @@
+ 
+ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs);
+ static int load_elf_library(struct file *);
+-static unsigned long elf_map (struct file *, unsigned long, struct elf_phdr *, int, int);
++static unsigned long elf_map(struct file *, unsigned long, struct elf_phdr *, int, int, unsigned long);
+ 
+ /*
+  * If we don't support core dumping, then supply a NULL so we
+@@ -80,7 +80,7 @@ static struct linux_binfmt elf_format = {
+ 		.hasvdso	= 1
+ };
+ 
+-#define BAD_ADDR(x) ((unsigned long)(x) >= TASK_SIZE)
++#define BAD_ADDR(x) IS_ERR_VALUE(x)
+ 
+ static int set_brk(unsigned long start, unsigned long end)
+ {
+@@ -295,33 +295,70 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec,
+ #ifndef elf_map
+ 
+ static unsigned long elf_map(struct file *filep, unsigned long addr,
+-		struct elf_phdr *eppnt, int prot, int type)
++		struct elf_phdr *eppnt, int prot, int type,
++		unsigned long total_size)
+ {
+ 	unsigned long map_addr;
+-	unsigned long pageoffset = ELF_PAGEOFFSET(eppnt->p_vaddr);
++	unsigned long size = eppnt->p_filesz + ELF_PAGEOFFSET(eppnt->p_vaddr);
++	unsigned long off = eppnt->p_offset - ELF_PAGEOFFSET(eppnt->p_vaddr);
++	addr = ELF_PAGESTART(addr);
++	size = ELF_PAGEALIGN(size);
+ 
+-	down_write(&current->mm->mmap_sem);
+ 	/* mmap() will return -EINVAL if given a zero size, but a
+ 	 * segment with zero filesize is perfectly valid */
+-	if (eppnt->p_filesz + pageoffset)
+-		map_addr = do_mmap(filep, ELF_PAGESTART(addr),
+-				   eppnt->p_filesz + pageoffset, prot, type,
+-				   eppnt->p_offset - pageoffset);
+-	else
+-		map_addr = ELF_PAGESTART(addr);
++	if (!size)
++		return addr;
++
++	down_write(&current->mm->mmap_sem);
++	/*
++	* total_size is the size of the ELF (interpreter) image.
++	* The _first_ mmap needs to know the full size, otherwise
++	* randomization might put this image into an overlapping
++	* position with the ELF binary image. (since size < total_size)
++	* So we first map the 'big' image - and unmap the remainder at
++	* the end. (which unmap is needed for ELF images with holes.)
++	*/
++	if (total_size) {
++		total_size = ELF_PAGEALIGN(total_size);
++		map_addr = do_mmap(filep, addr, total_size, prot, type, off);
++		if (!BAD_ADDR(map_addr))
++			do_munmap(current->mm, map_addr+size, total_size-size);
++	} else
++		map_addr = do_mmap(filep, addr, size, prot, type, off);
++
+ 	up_write(&current->mm->mmap_sem);
+ 	return(map_addr);
+ }
+ 
+ #endif /* !elf_map */
+ 
++static unsigned long total_mapping_size(struct elf_phdr *cmds, int nr)
++{
++	int i, first_idx = -1, last_idx = -1;
++
++	for (i = 0; i < nr; i++) {
++		if (cmds[i].p_type == PT_LOAD) {
++			last_idx = i;
++			if (first_idx == -1)
++				first_idx = i;
++		}
++	}
++	if (first_idx == -1)
++		return 0;
++
++	return cmds[last_idx].p_vaddr + cmds[last_idx].p_memsz -
++				ELF_PAGESTART(cmds[first_idx].p_vaddr);
++}
++
++
+ /* This is much more generalized than the library routine read function,
+    so we keep this separate.  Technically the library read function
+    is only provided so that we can read a.out libraries that have
+    an ELF header */
+ 
+ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
+-		struct file *interpreter, unsigned long *interp_load_addr)
++		struct file *interpreter, unsigned long *interp_map_addr,
++		unsigned long no_base)
+ {
+ 	struct elf_phdr *elf_phdata;
+ 	struct elf_phdr *eppnt;
+@@ -329,6 +366,7 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
+ 	int load_addr_set = 0;
+ 	unsigned long last_bss = 0, elf_bss = 0;
+ 	unsigned long error = ~0UL;
++	unsigned long total_size;
+ 	int retval, i, size;
+ 
+ 	/* First of all, some simple consistency checks */
+@@ -367,6 +405,12 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
+ 		goto out_close;
+ 	}
+ 
++	total_size = total_mapping_size(elf_phdata, interp_elf_ex->e_phnum);
++	if (!total_size) {
++		error = -EINVAL;
++		goto out_close;
++	}
++
+ 	eppnt = elf_phdata;
+ 	for (i = 0; i < interp_elf_ex->e_phnum; i++, eppnt++) {
+ 		if (eppnt->p_type == PT_LOAD) {
+@@ -384,9 +428,14 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
+ 			vaddr = eppnt->p_vaddr;
+ 			if (interp_elf_ex->e_type == ET_EXEC || load_addr_set)
+ 				elf_type |= MAP_FIXED;
++			else if (no_base && interp_elf_ex->e_type == ET_DYN)
++				load_addr = -vaddr;
+ 
+ 			map_addr = elf_map(interpreter, load_addr + vaddr,
+-					   eppnt, elf_prot, elf_type);
++					   eppnt, elf_prot, elf_type, total_size);
++			total_size = 0;
++			if (!*interp_map_addr)
++				*interp_map_addr = map_addr;
+ 			error = map_addr;
+ 			if (BAD_ADDR(map_addr))
+ 				goto out_close;
+@@ -452,8 +501,7 @@ static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
+ 			goto out_close;
+ 	}
+ 
+-	*interp_load_addr = load_addr;
+-	error = ((unsigned long)interp_elf_ex->e_entry) + load_addr;
++	error = load_addr;
+ 
+ out_close:
+ 	kfree(elf_phdata);
+@@ -550,7 +598,8 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
+ 	int elf_exec_fileno;
+ 	int retval, i;
+ 	unsigned int size;
+-	unsigned long elf_entry, interp_load_addr = 0;
++	unsigned long elf_entry;
++	unsigned long interp_load_addr = 0;
+ 	unsigned long start_code, end_code, start_data, end_data;
+ 	unsigned long reloc_func_desc = 0;
+ 	char passed_fileno[6];
+@@ -814,9 +863,7 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
+ 	current->mm->start_stack = bprm->p;
+ 
+ 	/* Now we do a little grungy work by mmaping the ELF image into
+-	   the correct location in memory.  At this point, we assume that
+-	   the image should be loaded at fixed address, not at a variable
+-	   address. */
++	   the correct location in memory. */
+ 	for(i = 0, elf_ppnt = elf_phdata;
+ 	    i < loc->elf_ex.e_phnum; i++, elf_ppnt++) {
+ 		int elf_prot = 0, elf_flags;
+@@ -870,11 +917,15 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
+ 			 * default mmap base, as well as whatever program they
+ 			 * might try to exec.  This is because the brk will
+ 			 * follow the loader, and is not movable.  */
++#ifdef CONFIG_X86
++			load_bias = 0;
++#else
+ 			load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - vaddr);
++#endif
+ 		}
+ 
+ 		error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt,
+-				elf_prot, elf_flags);
++				elf_prot, elf_flags, 0);
+ 		if (BAD_ADDR(error)) {
+ 			send_sig(SIGKILL, current, 0);
+ 			retval = IS_ERR((void *)error) ?
+@@ -950,13 +1001,25 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
+ 	}
+ 
+ 	if (elf_interpreter) {
+-		if (interpreter_type == INTERPRETER_AOUT)
++		if (interpreter_type == INTERPRETER_AOUT) {
+ 			elf_entry = load_aout_interp(&loc->interp_ex,
+ 						     interpreter);
+-		else
++		} else {
++			unsigned long uninitialized_var(interp_map_addr);
++
+ 			elf_entry = load_elf_interp(&loc->interp_elf_ex,
+ 						    interpreter,
+-						    &interp_load_addr);
++						    &interp_map_addr,
++						    load_bias);
++			if (!BAD_ADDR(elf_entry)) {
++				/*
++				 * load_elf_interp() returns relocation
++				 * adjustment
++				 */
++				interp_load_addr = elf_entry;
++				elf_entry += loc->interp_elf_ex.e_entry;
++			}
++		}
+ 		if (BAD_ADDR(elf_entry)) {
+ 			force_sig(SIGSEGV, current);
+ 			retval = IS_ERR((void *)elf_entry) ?

linux-2.6-ibmvscsi-schizo.patch:

Index: linux-2.6-ibmvscsi-schizo.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-ibmvscsi-schizo.patch,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- linux-2.6-ibmvscsi-schizo.patch	26 Jul 2007 13:23:31 -0000	1.4
+++ linux-2.6-ibmvscsi-schizo.patch	10 Oct 2007 21:22:57 -0000	1.5
@@ -1,6 +1,8 @@
---- linux-2.6.19.ppc64/drivers/scsi/ibmvscsi/rpa_vscsi.c~	2006-11-29 21:57:37.000000000 +0000
-+++ linux-2.6.19.ppc64/drivers/scsi/ibmvscsi/rpa_vscsi.c	2006-12-19 15:42:57.000000000 +0000
-@@ -42,14 +42,14 @@ static unsigned int partition_number = -
+diff --git a/drivers/scsi/ibmvscsi/rpa_vscsi.c b/drivers/scsi/ibmvscsi/rpa_vscsi.c
+index 9c14e78..1821461 100644
+--- a/drivers/scsi/ibmvscsi/rpa_vscsi.c
++++ b/drivers/scsi/ibmvscsi/rpa_vscsi.c
+@@ -42,14 +42,14 @@ static unsigned int partition_number = -1;
   * Routines for managing the command/response queue
   */
  /**
@@ -17,7 +19,7 @@
  {
  	struct ibmvscsi_host_data *hostdata =
  	    (struct ibmvscsi_host_data *)dev_instance;
-@@ -66,9 +66,9 @@ static irqreturn_t ibmvscsi_handle_event
+@@ -66,9 +66,9 @@ static irqreturn_t ibmvscsi_handle_event(int irq, void *dev_instance)
   * Frees irq, deallocates a page for messages, unmaps dma, and unregisters
   * the crq with the hypervisor.
   */
@@ -30,7 +32,7 @@
  {
  	long rc;
  	struct vio_dev *vdev = to_vio_dev(hostdata->dev);
-@@ -108,12 +108,13 @@ static struct viosrp_crq *crq_queue_next
+@@ -108,12 +108,13 @@ static struct viosrp_crq *crq_queue_next_crq(struct crq_queue *queue)
  }
  
  /**
@@ -46,7 +48,7 @@
  {
  	struct vio_dev *vdev = to_vio_dev(hostdata->dev);
  
-@@ -121,10 +122,10 @@ int ibmvscsi_send_crq(struct ibmvscsi_ho
+@@ -121,10 +122,10 @@ int ibmvscsi_send_crq(struct ibmvscsi_host_data *hostdata, u64 word1, u64 word2)
  }
  
  /**
@@ -59,7 +61,7 @@
  {
  	struct ibmvscsi_host_data *hostdata = (struct ibmvscsi_host_data *)data;
  	struct vio_dev *vdev = to_vio_dev(hostdata->dev);
-@@ -189,6 +190,42 @@ static void set_adapter_info(struct ibmv
+@@ -190,6 +191,42 @@ static void set_adapter_info(struct ibmvscsi_host_data *hostdata)
  }
  
  /**
@@ -91,18 +93,18 @@
 +				queue->msg_token, PAGE_SIZE);
 +	if (rc == 2) {
 +		/* Adapter is good, but other end is not ready */
-+		printk(KERN_WARNING "ibmvscsi: Partner adapter not ready\n");
++		dev_warn(hostdata->dev, "Partner adapter not ready\n");
 +	} else if (rc != 0) {
-+		printk(KERN_WARNING
-+		       "ibmvscsi: couldn't register crq--rc 0x%x\n", rc);
++		dev_warn(hostdata->dev, "couldn't register crq--rc 0x%x\n", rc);
 +	}
 +	return rc;
 +}
++
 +/**
   * initialize_crq_queue: - Initializes and registers CRQ with hypervisor
   * @queue:	crq_queue to initialize and register
   * @hostdata:	ibmvscsi_host_data of host
-@@ -197,9 +234,9 @@ static void set_adapter_info(struct ibmv
+@@ -198,9 +235,9 @@ static void set_adapter_info(struct ibmvscsi_host_data *hostdata)
   * the crq with the hypervisor.
   * Returns zero on success.
   */
@@ -115,7 +117,7 @@
  {
  	int rc;
  	int retrc;
-@@ -226,7 +263,7 @@ int ibmvscsi_init_crq_queue(struct crq_q
+@@ -227,7 +264,7 @@ int ibmvscsi_init_crq_queue(struct crq_queue *queue,
  				queue->msg_token, PAGE_SIZE);
  	if (rc == H_RESOURCE)
  		/* maybe kexecing and resource is busy. try a reset */
@@ -124,16 +126,16 @@
  					      hostdata);
  
  	if (rc == 2) {
-@@ -239,7 +276,7 @@ int ibmvscsi_init_crq_queue(struct crq_q
+@@ -240,7 +277,7 @@ int ibmvscsi_init_crq_queue(struct crq_queue *queue,
  	}
  
  	if (request_irq(vdev->irq,
 -			ibmvscsi_handle_event,
 +			rpavscsi_handle_event,
  			0, "ibmvscsi", (void *)hostdata) != 0) {
- 		printk(KERN_ERR "ibmvscsi: couldn't register irq 0x%x\n",
- 		       vdev->irq);
-@@ -256,7 +293,7 @@ int ibmvscsi_init_crq_queue(struct crq_q
+ 		dev_err(hostdata->dev, "couldn't register irq 0x%x\n",
+ 			vdev->irq);
+@@ -256,7 +293,7 @@ int ibmvscsi_init_crq_queue(struct crq_queue *queue,
  	queue->cur = 0;
  	spin_lock_init(&queue->lock);
  
@@ -142,7 +144,7 @@
  		     (unsigned long)hostdata);
  
  	return retrc;
-@@ -281,8 +318,8 @@ int ibmvscsi_init_crq_queue(struct crq_q
+@@ -281,8 +318,8 @@ int ibmvscsi_init_crq_queue(struct crq_queue *queue,
   * @hostdata:	ibmvscsi_host_data of host
   *
   */
@@ -153,7 +155,7 @@
  {
  	int rc;
  	struct vio_dev *vdev = to_vio_dev(hostdata->dev);
-@@ -297,39 +334,10 @@ int ibmvscsi_reenable_crq_queue(struct c
+@@ -297,38 +334,10 @@ int ibmvscsi_reenable_crq_queue(struct crq_queue *queue,
  	return rc;
  }
  
@@ -186,10 +188,9 @@
 -				queue->msg_token, PAGE_SIZE);
 -	if (rc == 2) {
 -		/* Adapter is good, but other end is not ready */
--		printk(KERN_WARNING "ibmvscsi: Partner adapter not ready\n");
+-		dev_warn(hostdata->dev, "Partner adapter not ready\n");
 -	} else if (rc != 0) {
--		printk(KERN_WARNING
--		       "ibmvscsi: couldn't register crq--rc 0x%x\n", rc);
+-		dev_warn(hostdata->dev, "couldn't register crq--rc 0x%x\n", rc);
 -	}
 -	return rc;
 -}
@@ -200,8 +201,10 @@
 +	.reenable_crq_queue = rpavscsi_reenable_crq_queue,
 +	.send_crq = rpavscsi_send_crq,
 +};
---- linux-2.6.19.ppc64/drivers/scsi/ibmvscsi/ibmvscsi.c~	2006-11-29 21:57:37.000000000 +0000
-+++ linux-2.6.19.ppc64/drivers/scsi/ibmvscsi/ibmvscsi.c	2006-12-19 15:53:59.000000000 +0000
+diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c
+index 5870866..ed9b675 100644
+--- a/drivers/scsi/ibmvscsi/ibmvscsi.c
++++ b/drivers/scsi/ibmvscsi/ibmvscsi.c
 @@ -70,6 +70,7 @@
  #include <linux/moduleparam.h>
  #include <linux/dma-mapping.h>
@@ -210,7 +213,7 @@
  #include <asm/vio.h>
  #include <scsi/scsi.h>
  #include <scsi/scsi_cmnd.h>
-@@ -89,6 +89,8 @@ static int max_requests = 50;
+@@ -89,6 +90,8 @@ static int max_requests = IBMVSCSI_MAX_REQUESTS_DEFAULT;
  
  #define IBMVSCSI_VERSION "1.5.8"
  
@@ -219,29 +222,40 @@
  MODULE_DESCRIPTION("IBM Virtual SCSI");
  MODULE_AUTHOR("Dave Boutcher");
  MODULE_LICENSE("GPL");
-@@ -567,7 +569,7 @@ static int ibmvscsi_send_srp_event(struc
- 	list_add_tail(&evt_struct->list, &hostdata->sent);
+@@ -512,8 +515,8 @@ static void ibmvscsi_reset_host(struct ibmvscsi_host_data *hostdata)
+ 	atomic_set(&hostdata->request_limit, 0);
+ 
+ 	purge_requests(hostdata, DID_ERROR);
+-	if ((ibmvscsi_reset_crq_queue(&hostdata->queue, hostdata)) ||
+-	    (ibmvscsi_send_crq(hostdata, 0xC001000000000000LL, 0)) ||
++	if ((ibmvscsi_ops->reset_crq_queue(&hostdata->queue, hostdata)) ||
++	    (ibmvscsi_ops->send_crq(hostdata, 0xC001000000000000LL, 0)) ||
+ 	    (vio_enable_interrupts(to_vio_dev(hostdata->dev)))) {
+ 		atomic_set(&hostdata->request_limit, -1);
+ 		dev_err(hostdata->dev, "error after reset\n");
+@@ -618,7 +621,7 @@ static int ibmvscsi_send_srp_event(struct srp_event_struct *evt_struct,
+ 	}
  
  	if ((rc =
 -	     ibmvscsi_send_crq(hostdata, crq_as_u64[0], crq_as_u64[1])) != 0) {
 +	     ibmvscsi_ops->send_crq(hostdata, crq_as_u64[0], crq_as_u64[1])) != 0) {
  		list_del(&evt_struct->list);
+ 		del_timer(&evt_struct->timer);
  
- 		printk(KERN_ERR "ibmvscsi: send error %d\n",
-@@ -1183,8 +1185,8 @@ void ibmvscsi_handle_crq(struct viosrp_c
+@@ -1222,8 +1225,8 @@ void ibmvscsi_handle_crq(struct viosrp_crq *crq,
  		case 0x01:	/* Initialization message */
- 			printk(KERN_INFO "ibmvscsi: partner initialized\n");
+ 			dev_info(hostdata->dev, "partner initialized\n");
  			/* Send back a response */
--			if (ibmvscsi_send_crq(hostdata,
--					      0xC002000000000000LL, 0) == 0) {
-+			if (ibmvscsi_ops->send_crq(hostdata,
-+						   0xC002000000000000LL, 0) == 0) {
+-			if ((rc = ibmvscsi_send_crq(hostdata,
+-						    0xC002000000000000LL, 0)) == 0) {
++			if ((rc = ibmvscsi_ops->send_crq(hostdata,
++							 0xC002000000000000LL, 0)) == 0) {
  				/* Now login */
  				send_srp_login(hostdata);
  			} else {
-@@ -1212,10 +1214,10 @@ void ibmvscsi_handle_crq(struct viosrp_c
- 			printk(KERN_INFO
- 			       "ibmvscsi: Re-enabling adapter!\n");
+@@ -1248,10 +1251,10 @@ void ibmvscsi_handle_crq(struct viosrp_crq *crq,
+ 			/* We need to re-setup the interpartition connection */
+ 			dev_info(hostdata->dev, "Re-enabling adapter!\n");
  			purge_requests(hostdata, DID_REQUEUE);
 -			if ((ibmvscsi_reenable_crq_queue(&hostdata->queue,
 -							hostdata)) ||
@@ -253,9 +267,9 @@
 +						    0xC001000000000000LL, 0))) {
  					atomic_set(&hostdata->request_limit,
  						   -1);
- 					printk(KERN_ERR
-@@ -1228,10 +1230,10 @@ void ibmvscsi_handle_crq(struct viosrp_c
- 			       crq->format);
+ 					dev_err(hostdata->dev, "error after enable\n");
+@@ -1261,10 +1264,10 @@ void ibmvscsi_handle_crq(struct viosrp_crq *crq,
+ 				crq->format);
  
  			purge_requests(hostdata, DID_ERROR);
 -			if ((ibmvscsi_reset_crq_queue(&hostdata->queue,
@@ -268,17 +282,17 @@
 +						    0xC001000000000000LL, 0))) {
  					atomic_set(&hostdata->request_limit,
  						   -1);
- 					printk(KERN_ERR
-@@ -1517,7 +1519,7 @@ static int ibmvscsi_probe(struct vio_dev
+ 					dev_err(hostdata->dev, "error after reset\n");
+@@ -1590,7 +1593,7 @@ static int ibmvscsi_probe(struct vio_dev *vdev, const struct vio_device_id *id)
  	atomic_set(&hostdata->request_limit, -1);
  	hostdata->host->max_sectors = 32 * 8; /* default max I/O 32 pages */
  
 -	rc = ibmvscsi_init_crq_queue(&hostdata->queue, hostdata, max_requests);
 +	rc = ibmvscsi_ops->init_crq_queue(&hostdata->queue, hostdata, max_requests);
  	if (rc != 0 && rc != H_RESOURCE) {
- 		printk(KERN_ERR "ibmvscsi: couldn't initialize crq\n");
+ 		dev_err(&vdev->dev, "couldn't initialize crq. rc=%d\n", rc);
  		goto init_crq_failed;
-@@ -1538,7 +1540,7 @@ static int ibmvscsi_probe(struct vio_dev
+@@ -1611,7 +1614,7 @@ static int ibmvscsi_probe(struct vio_dev *vdev, const struct vio_device_id *id)
  	 * to fail if the other end is not acive.  In that case we don't
  	 * want to scan
  	 */
@@ -287,7 +301,7 @@
  	    || rc == H_RESOURCE) {
  		/*
  		 * Wait around max init_timeout secs for the adapter to finish
-@@ -1564,7 +1566,7 @@ static int ibmvscsi_probe(struct vio_dev
+@@ -1637,7 +1640,7 @@ static int ibmvscsi_probe(struct vio_dev *vdev, const struct vio_device_id *id)
        add_host_failed:
  	release_event_pool(&hostdata->pool, hostdata);
        init_pool_failed:
@@ -296,7 +310,7 @@
        init_crq_failed:
  	scsi_host_put(host);
        scsi_host_alloc_failed:
-@@ -1575,8 +1577,8 @@ static int ibmvscsi_remove(struct vio_de
+@@ -1648,8 +1651,8 @@ static int ibmvscsi_remove(struct vio_dev *vdev)
  {
  	struct ibmvscsi_host_data *hostdata = vdev->dev.driver_data;
  	release_event_pool(&hostdata->pool, hostdata);
@@ -307,7 +321,7 @@
  	
  	scsi_remove_host(hostdata->host);
  	scsi_host_put(hostdata->host);
-@@ -1606,6 +1608,13 @@ static struct vio_driver ibmvscsi_driver
+@@ -1679,6 +1682,13 @@ static struct vio_driver ibmvscsi_driver = {
  
  int __init ibmvscsi_module_init(void)
  {
@@ -321,9 +335,11 @@
  	return vio_register_driver(&ibmvscsi_driver);
  }
  
---- linux-2.6.19.ppc64/drivers/scsi/ibmvscsi/ibmvscsi.h~	2006-11-29 21:57:37.000000000 +0000
-+++ linux-2.6.19.ppc64/drivers/scsi/ibmvscsi/ibmvscsi.h	2006-12-19 15:54:18.000000000 +0000
-@@ -94,21 +94,25 @@ struct ibmvscsi_host_data {
+diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.h b/drivers/scsi/ibmvscsi/ibmvscsi.h
+index b19c2e2..46e850e 100644
+--- a/drivers/scsi/ibmvscsi/ibmvscsi.h
++++ b/drivers/scsi/ibmvscsi/ibmvscsi.h
+@@ -98,21 +98,25 @@ struct ibmvscsi_host_data {
  };
  
  /* routines for managing a command/response queue */
@@ -363,8 +379,10 @@
 +extern struct ibmvscsi_ops rpavscsi_ops;
  
  #endif				/* IBMVSCSI_H */
---- linux-2.6.19.ppc64/drivers/scsi/ibmvscsi/iseries_vscsi.c~	2006-11-29 21:57:37.000000000 +0000
-+++ linux-2.6.19.ppc64/drivers/scsi/ibmvscsi/iseries_vscsi.c	2006-12-19 15:47:03.000000000 +0000
+diff --git a/drivers/scsi/ibmvscsi/iseries_vscsi.c b/drivers/scsi/ibmvscsi/iseries_vscsi.c
+index 6aeb5f0..0775fde 100644
+--- a/drivers/scsi/ibmvscsi/iseries_vscsi.c
++++ b/drivers/scsi/ibmvscsi/iseries_vscsi.c
 @@ -53,7 +53,7 @@ struct srp_lp_event {
  /** 
   * standard interface for handling logical partition events.
@@ -374,7 +392,7 @@
  {
  	struct srp_lp_event *evt = (struct srp_lp_event *)lpevt;
  
-@@ -74,9 +74,9 @@ static void ibmvscsi_handle_event(struct
+@@ -74,9 +74,9 @@ static void ibmvscsi_handle_event(struct HvLpEvent *lpevt)
  /* ------------------------------------------------------------
   * Routines for driver initialization
   */
@@ -387,7 +405,7 @@
  {
  	int rc;
  
-@@ -88,7 +88,7 @@ int ibmvscsi_init_crq_queue(struct crq_q
+@@ -88,7 +88,7 @@ int ibmvscsi_init_crq_queue(struct crq_queue *queue,
  		goto viopath_open_failed;
  	}
  
@@ -396,7 +414,7 @@
  	if (rc < 0) {
  		printk("vio_setHandler failed with rc %d in open_event_path\n",
  		       rc);
-@@ -102,9 +102,9 @@ int ibmvscsi_init_crq_queue(struct crq_q
+@@ -102,9 +102,9 @@ int ibmvscsi_init_crq_queue(struct crq_queue *queue,
  	return -1;
  }
  
@@ -409,7 +427,7 @@
  {
  	vio_clearHandler(viomajorsubtype_scsi);
  	viopath_close(viopath_hostLp, viomajorsubtype_scsi, max_requests);
-@@ -117,8 +117,8 @@ void ibmvscsi_release_crq_queue(struct c
+@@ -117,8 +117,8 @@ void ibmvscsi_release_crq_queue(struct crq_queue *queue,
   *
   * no-op for iSeries
   */
@@ -420,7 +438,7 @@
  {
  	return 0;
  }
-@@ -130,19 +130,20 @@ int ibmvscsi_reset_crq_queue(struct crq_
+@@ -130,19 +130,20 @@ int ibmvscsi_reset_crq_queue(struct crq_queue *queue,
   *
   * no-op for iSeries
   */
@@ -445,7 +463,7 @@
  {
  	single_host_data = hostdata;
  	return HvCallEvent_signalLpEventFast(viopath_hostLp,
-@@ -156,3 +157,11 @@ int ibmvscsi_send_crq(struct ibmvscsi_ho
+@@ -156,3 +157,11 @@ int ibmvscsi_send_crq(struct ibmvscsi_host_data *hostdata, u64 word1, u64 word2)
  					     VIOVERSION << 16, word1, word2, 0,
  					     0);
  }
@@ -457,8 +475,10 @@
 +	.reenable_crq_queue = iseriesvscsi_reenable_crq_queue,
 +	.send_crq = iseriesvscsi_send_crq,
 +};
---- linux-2.6.19.ppc64/drivers/scsi/ibmvscsi/Makefile.orig	2007-01-01 20:06:26.000000000 +0000
-+++ linux-2.6.19.ppc64/drivers/scsi/ibmvscsi/Makefile	2007-01-01 20:06:35.000000000 +0000
+diff --git a/drivers/scsi/ibmvscsi/Makefile b/drivers/scsi/ibmvscsi/Makefile
+index f67d9ef..6ac0633 100644
+--- a/drivers/scsi/ibmvscsi/Makefile
++++ b/drivers/scsi/ibmvscsi/Makefile
 @@ -1,9 +1,7 @@
  obj-$(CONFIG_SCSI_IBMVSCSI)	+= ibmvscsic.o
  

linux-2.6-libata-pata-dma-disable-option.patch:

Index: linux-2.6-libata-pata-dma-disable-option.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-libata-pata-dma-disable-option.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6-libata-pata-dma-disable-option.patch	13 Sep 2007 22:55:57 -0000	1.2
+++ linux-2.6-libata-pata-dma-disable-option.patch	10 Oct 2007 21:22:57 -0000	1.3
@@ -20,15 +20,15 @@
 
 Signed-off-by: Alan Cox <alan at redhat.com>
 
-
---- linux-2.6.22.noarch.orig/include/linux/libata.h
-+++ linux-2.6.22.noarch/include/linux/libata.h
-@@ -298,6 +298,12 @@ enum {
- 	ATA_HORKAGE_NODMA	= (1 << 1),	/* DMA problems */
+diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.23rc3-mm1/include/linux/libata.h linux-2.6.23rc3-mm1/include/linux/libata.h
+--- linux.vanilla-2.6.23rc3-mm1/include/linux/libata.h	2007-08-22 17:23:14.000000000 +0100
++++ linux-2.6.23rc3-mm1/include/linux/libata.h	2007-08-22 17:50:32.000000000 +0100
+@@ -315,6 +315,12 @@
  	ATA_HORKAGE_NONCQ	= (1 << 2),	/* Don't use NCQ */
  	ATA_HORKAGE_MAX_SEC_128	= (1 << 3),	/* Limit max sects to 128 */
-+
-+	/* DMA mask for user DMA control: User visible values do not
+ 	ATA_HORKAGE_BROKEN_HPA	= (1 << 4),	/* Broken HPA */
++ 
++	/* DMA mask for user DMA control: User visible values do not 
 +	   renumber */
 +	ATA_DMA_MASK_ATA	= (1 << 0),	/* DMA on ATA Disk */
 +	ATA_DMA_MASK_ATAPI	= (1 << 1),	/* DMA on ATAPI */
@@ -36,9 +36,10 @@
  };
  
  enum hsm_task_states {
---- linux-2.6.22.noarch.orig/drivers/ata/libata-core.c
-+++ linux-2.6.22.noarch/drivers/ata/libata-core.c
-@@ -93,6 +93,10 @@ static int ata_ignore_hpa = 0;
+diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.23rc3-mm1/drivers/ata/libata-core.c linux-2.6.23rc3-mm1/drivers/ata/libata-core.c
+--- linux.vanilla-2.6.23rc3-mm1/drivers/ata/libata-core.c	2007-08-22 17:23:00.000000000 +0100
++++ linux-2.6.23rc3-mm1/drivers/ata/libata-core.c	2007-08-22 18:17:31.321738376 +0100
+@@ -99,6 +99,10 @@
  module_param_named(ignore_hpa, ata_ignore_hpa, int, 0644);
  MODULE_PARM_DESC(ignore_hpa, "Ignore HPA limit (0=keep BIOS limits, 1=ignore limits, using full disk)");
  
@@ -49,9 +50,9 @@
  static int ata_probe_timeout = ATA_TMOUT_INTERNAL / HZ;
  module_param(ata_probe_timeout, int, 0444);
  MODULE_PARM_DESC(ata_probe_timeout, "Set ATA probing timeout (seconds)");
-@@ -2821,16 +2825,29 @@ int ata_do_set_mode(struct ata_port *ap,
+@@ -2839,16 +2854,29 @@
  	/* step 1: calculate xfer_mask */
- 	for (i = 0; i < ATA_MAX_DEVICES; i++) {
+	for (i = 0; i < ATA_MAX_DEVICES; i++) {
  		unsigned int pio_mask, dma_mask;
 +		unsigned int mode_mask;
  
@@ -81,9 +82,9 @@
  
 --- linux-2.6.22.noarch.orig/Documentation/kernel-parameters.txt
 +++ linux-2.6.22.noarch/Documentation/kernel-parameters.txt
-@@ -853,6 +853,12 @@ and is between 256 and 4096 characters. 
- 	llsc*=		[IA64] See function print_params() in
- 			arch/ia64/sn/kernel/llsc4.c.
+@@ -870,6 +870,12 @@ and is between 256 and 4096 characters. 
+ 	lasi=		[HW,SCSI] PARISC LASI driver for the 53c700 chip
+ 			Format: addr:<io>,irq:<irq>
  
 +	libata.pata_dma= [LIBATA]
 +		libata.pata_dma=0	Disable all PATA DMA like old IDE

linux-2.6-modsign-ksign.patch:

Index: linux-2.6-modsign-ksign.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-modsign-ksign.patch,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- linux-2.6-modsign-ksign.patch	13 Feb 2007 19:36:12 -0000	1.5
+++ linux-2.6-modsign-ksign.patch	10 Oct 2007 21:22:57 -0000	1.6
@@ -45,15 +45,16 @@
  source "drivers/crypto/Kconfig"
  
  endif	# if CRYPTO
-diff --git a/crypto/Makefile b/crypto/Makefile
-index 36a6211..309a806 100644
---- a/crypto/Makefile
-+++ b/crypto/Makefile
-@@ -47,3 +47,4 @@ obj-$(CONFIG_CRYPTO_CRC32C) += crc32c.o
+--- linux-2.6.22.noarch/crypto/Makefile~	2007-07-13 15:43:18.000000000 -0400
++++ linux-2.6.22.noarch/crypto/Makefile	2007-07-13 15:43:22.000000000 -0400
+@@ -52,6 +52,7 @@ obj-$(CONFIG_CRYPTO_CRC32C) += crc32c.o
  obj-$(CONFIG_CRYPTO_TEST) += tcrypt.o
  
  obj-$(CONFIG_CRYPTO_MPILIB) += mpi/
 +obj-$(CONFIG_CRYPTO_SIGNATURE) += signature/
+ 
+ #
+ # generic algorithms and the async_tx api
 diff --git a/crypto/signature/Makefile b/crypto/signature/Makefile
 new file mode 100644
 index 0000000..4d1042e

linux-2.6-modsign-mpilib.patch:

Index: linux-2.6-modsign-mpilib.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-modsign-mpilib.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-modsign-mpilib.patch	13 Feb 2007 19:36:12 -0000	1.3
+++ linux-2.6-modsign-mpilib.patch	10 Oct 2007 21:22:57 -0000	1.4
@@ -63,16 +63,17 @@
  source "drivers/crypto/Kconfig"
  
  endif	# if CRYPTO
-diff --git a/crypto/Makefile b/crypto/Makefile
-index 60e3d24..36a6211 100644
---- a/crypto/Makefile
-+++ b/crypto/Makefile
-@@ -45,3 +45,5 @@ obj-$(CONFIG_CRYPTO_MICHAEL_MIC) += mich
- obj-$(CONFIG_CRYPTO_CRC32C) += crc32c.o
+--- linux-2.6.22.noarch/crypto/Makefile~	2007-07-13 15:42:17.000000000 -0400
++++ linux-2.6.22.noarch/crypto/Makefile	2007-07-13 15:42:27.000000000 -0400
+@@ -51,6 +51,8 @@ obj-$(CONFIG_CRYPTO_CRC32C) += crc32c.o
  
  obj-$(CONFIG_CRYPTO_TEST) += tcrypt.o
-+
+ 
 +obj-$(CONFIG_CRYPTO_MPILIB) += mpi/
++
+ #
+ # generic algorithms and the async_tx api
+ #
 diff --git a/crypto/mpi/Makefile b/crypto/mpi/Makefile
 new file mode 100644
 index 0000000..e96597d

linux-2.6-olpc-touchpad.diff:

Index: linux-2.6-olpc-touchpad.diff
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-olpc-touchpad.diff,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-olpc-touchpad.diff	12 Sep 2006 22:18:32 -0000	1.1
+++ linux-2.6-olpc-touchpad.diff	10 Oct 2007 21:22:57 -0000	1.2
@@ -1,66 +1,4 @@
-From marcelo  Mon Sep 11 16:06:36 2006
-Return-Path: <warp at aehallh.com>
-X-Spam-Checker-Version: SpamAssassin 3.1.1 (2006-03-10) on dmt.cnet
-X-Spam-Level: 
-X-Spam-Status: No, score=0.0 required=5.0 tests=AWL,UNPARSEABLE_RELAY 
-	autolearn=ham version=3.1.1
-Received: from pobox.corp.redhat.com [10.11.255.20]
-	by dmt.cnet with IMAP (fetchmail-6.3.2)
-	for <marcelo at localhost> (single-drop); Mon, 11 Sep 2006 16:06:36 -0300 (BRT)
-Received: from pobox.corp.redhat.com ([unix socket])
-	 by pobox.corp.redhat.com (Cyrus v2.2.12-Invoca-RPM-2.2.12-3.RHEL4.1) with LMTPA;
-	 Mon, 11 Sep 2006 15:02:30 -0400
-X-Sieve: CMU Sieve 2.2
-Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254])
-	by pobox.corp.redhat.com (8.13.1/8.12.8) with ESMTP id k8BJ2UkL018317
-	for <mtosatti at pobox.corp.redhat.com>; Mon, 11 Sep 2006 15:02:30 -0400
-Received: from mx1.redhat.com (mx1.redhat.com [172.16.48.31])
-	by int-mx1.corp.redhat.com (8.12.11.20060308/8.12.11) with ESMTP id k8BJ2UrG032085
-	for <mtosatti at redhat.com>; Mon, 11 Sep 2006 15:02:30 -0400
-Received: from spock.bluecherry.net (spock.bluecherry.net [66.138.159.248])
-	by mx1.redhat.com (8.12.11.20060308/8.12.11) with ESMTP id k8BJ2TmA029427
-	for <mtosatti at redhat.com>; Mon, 11 Sep 2006 15:02:29 -0400
-Received: from spock.bluecherry.net (localhost [127.0.0.1])
-	by spock.bluecherry.net (Postfix) with ESMTP id 95930393AED;
-	Mon, 11 Sep 2006 14:02:27 -0500 (CDT)
-Received: from aehallh.com (c-71-56-76-189.hsd1.ga.comcast.net [71.56.76.189])
-	(using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
-	(Client did not present a certificate)
-	by spock.bluecherry.net (Postfix) with ESMTP;
-	Mon, 11 Sep 2006 14:02:27 -0500 (CDT)
-Received: from agamemnon.b5 (agamemnon.b5 [192.168.3.81])
-	by aehallh.com (Postfix) with SMTP id 97788948001;
-	Mon, 11 Sep 2006 15:02:25 -0400 (EDT)
-Received: by agamemnon.b5 (sSMTP sendmail emulation); Mon, 11 Sep 2006 15:02:25 -0400
-Date: Mon, 11 Sep 2006 15:02:25 -0400
 From: "Zephaniah E. Hull" <warp at aehallh.com>
-To: linux-input at atrey.karlin.mff.cuni.cz, linux-kernel at vger.kernel.org,
-        Marcelo Tosatti <mtosatti at redhat.com>,
-        Dmitry Torokhov <dmitry.torokhov at gmail.com>,
-        Dmitry Torokhov <dtor at insightbb.com>
-Subject: [RFC] OLPC tablet input driver, take three.
-Message-ID: <20060911190225.GS4181 at aehallh.com>
-Mail-Followup-To: linux-input at atrey.karlin.mff.cuni.cz,
-	linux-kernel at vger.kernel.org, Marcelo Tosatti <mtosatti at redhat.com>,
-	Dmitry Torokhov <dmitry.torokhov at gmail.com>,
-	Dmitry Torokhov <dtor at insightbb.com>
-References: <20060829073339.GA4181 at aehallh.com> <20060910201036.GD4187 at aehallh.com>
-MIME-Version: 1.0
-Content-Type: multipart/signed; micalg=pgp-sha1;
-	protocol="application/pgp-signature"; boundary="da9oBGf5DLtF9ehv"
-Content-Disposition: inline
-In-Reply-To: <20060910201036.GD4187 at aehallh.com>
-X-Notice-1: Unsolicited Commercial Email (Aka SPAM) to ANY systems under
-X-Notice-2: our control constitutes a $US500 Administrative Fee, payable
-X-Notice-3: immediately.  By sending us mail, you hereby acknowledge that
-X-Notice-4: policy and agree to the fee.
-User-Agent: Mutt/1.5.13 (2006-08-11)
-X-RedHat-Spam-Score: 1.797 *
-
-
---da9oBGf5DLtF9ehv
-Content-Type: text/plain; charset=us-ascii
-Content-Disposition: inline
 
 Take three, with most of the items people commented about addressed.
 
@@ -570,28 +508,3 @@
  	PSMOUSE_AUTO		/* This one should always be last */
  };
  
-
--- 
-	  1024D/E65A7801 Zephaniah E. Hull <warp at aehallh.com>
-	   92ED 94E4 B1E6 3624 226D  5727 4453 008B E65A 7801
-	    CCs of replies from mailing lists are requested.
-
-<nonlinear> .net is microsofts perverted version of a java networked
-             environment uglified for windows-specific crap
-	-- nonlinear in #opengl
-
---da9oBGf5DLtF9ehv
-Content-Type: application/pgp-signature; name="signature.asc"
-Content-Description: Digital signature
-Content-Disposition: inline
-
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.5 (GNU/Linux)
-
-iD8DBQFFBbLBRFMAi+ZaeAERArsjAJ9FZSOC6cVzUdtzFd9xoNSlAVSsfQCeMOwR
-+D5Kqtwfoyut77dDZYStml0=
-=r2qP
------END PGP SIGNATURE-----
-
---da9oBGf5DLtF9ehv--
-

linux-2.6-ps3-gelic-wireless.patch:

Index: linux-2.6-ps3-gelic-wireless.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-ps3-gelic-wireless.patch,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- linux-2.6-ps3-gelic-wireless.patch	27 Jul 2007 14:39:39 -0000	1.4
+++ linux-2.6-ps3-gelic-wireless.patch	10 Oct 2007 21:22:57 -0000	1.5
@@ -42,16 +42,17 @@
  obj-$(CONFIG_SKY2) += sky2.o
 --- a/drivers/net/ps3_gelic_net.c
 +++ b/drivers/net/ps3_gelic_net.c
-@@ -556,6 +556,9 @@ static int gelic_net_stop(struct net_dev
+@@ -556,6 +556,10 @@ static int gelic_net_stop(struct net_dev
  {
  	struct gelic_net_card *card = netdev_priv(netdev);
  
 +#ifdef CONFIG_GELIC_WIRELESS
 +	gelicw_down(netdev);
 +#endif
- 	netif_poll_disable(netdev);
++
  	netif_stop_queue(netdev);
  
+ 	/* turn off DMA, force end */
 @@ -1067,6 +1070,9 @@ static irqreturn_t gelic_net_interrupt(i
  		gelic_net_kick_txdma(card, card->tx_chain.tail);
  		spin_unlock_irqrestore(&card->tx_dma_lock, flags);

linux-2.6-silence-noise.patch:

Index: linux-2.6-silence-noise.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-silence-noise.patch,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- linux-2.6-silence-noise.patch	16 Apr 2007 22:16:22 -0000	1.8
+++ linux-2.6-silence-noise.patch	10 Oct 2007 21:22:57 -0000	1.9
@@ -52,28 +52,7 @@
  						"resource region %d "
  						"of device %s\n",
  						idx, pci_name(dev));
---- linux-2.6.20.noarch/drivers/base/power/main.c~	2007-04-12 15:29:10.000000000 -0400
-+++ linux-2.6.20.noarch/drivers/base/power/main.c	2007-04-12 15:29:34.000000000 -0400
-@@ -53,9 +53,6 @@ int device_pm_add(struct device * dev)
- {
- 	int error;
- 
--	pr_debug("PM: Adding info for %s:%s\n",
--		 dev->bus ? dev->bus->name : "No Bus",
--		 kobject_name(&dev->kobj));
- 	down(&dpm_list_sem);
- 	list_add_tail(&dev->power.entry, &dpm_active);
- 	device_pm_set_parent(dev, dev->parent);
-@@ -67,9 +64,6 @@ int device_pm_add(struct device * dev)
- 
- void device_pm_remove(struct device * dev)
- {
--	pr_debug("PM: Removing info for %s:%s\n",
--		 dev->bus ? dev->bus->name : "No Bus",
--		 kobject_name(&dev->kobj));
- 	down(&dpm_list_sem);
- 	dpm_sysfs_remove(dev);
- 	put_device(dev->power.pm_parent);
+
 Remove noisy PM printk.
 This has served its purpose.
 
@@ -97,3 +76,27 @@
  	}
  	pci_restore_pcix_state(dev);
  	pci_restore_msi_state(dev);
+
+
+--- linux-2.6.22.noarch/drivers/base/power/main.c~	2007-07-13 15:44:37.000000000 -0400
++++ linux-2.6.22.noarch/drivers/base/power/main.c	2007-07-13 15:44:44.000000000 -0400
+@@ -37,9 +37,6 @@ int device_pm_add(struct device *dev)
+ {
+ 	int error;
+ 
+-	pr_debug("PM: Adding info for %s:%s\n",
+-		 dev->bus ? dev->bus->name : "No Bus",
+-		 kobject_name(&dev->kobj));
+ 	mutex_lock(&dpm_list_mtx);
+ 	list_add_tail(&dev->power.entry, &dpm_active);
+ 	error = dpm_sysfs_add(dev);
+@@ -51,9 +48,6 @@ int device_pm_add(struct device *dev)
+ 
+ void device_pm_remove(struct device *dev)
+ {
+-	pr_debug("PM: Removing info for %s:%s\n",
+-		 dev->bus ? dev->bus->name : "No Bus",
+-		 kobject_name(&dev->kobj));
+ 	mutex_lock(&dpm_list_mtx);
+ 	dpm_sysfs_remove(dev);
+ 	list_del_init(&dev->power.entry);

linux-2.6-squashfs.patch:

Index: linux-2.6-squashfs.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-squashfs.patch,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- linux-2.6-squashfs.patch	10 Jul 2007 16:14:59 -0000	1.20
+++ linux-2.6-squashfs.patch	10 Oct 2007 21:22:57 -0000	1.21
@@ -87,7 +87,7 @@
 diff -x .gitignore -Nurp linux-2.6.20/fs/squashfs/inode.c linux-2.6.20-squashfs3.2-r2/fs/squashfs/inode.c
 --- linux-2.6.20/fs/squashfs/inode.c	1970-01-01 01:00:00.000000000 +0100
 +++ linux-2.6.20-squashfs3.2-r2/fs/squashfs/inode.c	2007-01-16 02:28:36.000000000 +0000
-@@ -0,0 +1,2329 @@
+@@ -0,0 +1,2330 @@
 +/*
 + * Squashfs - a compressed read only filesystem for Linux
 + *
@@ -121,6 +121,7 @@
 +#include <linux/vfs.h>
 +#include <linux/vmalloc.h>
 +#include <linux/smp_lock.h>
++#include <linux/exportfs.h>
 +
 +#include "squashfs.h"
 +
@@ -2399,7 +2400,7 @@
 +	squashfs_inode_cachep = kmem_cache_create("squashfs_inode_cache",
 +	     sizeof(struct squashfs_inode_info),
 +	     0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
-+	     init_once, NULL);
++	     init_once);
 +	if (squashfs_inode_cachep == NULL)
 +		return -ENOMEM;
 +	return 0;

linux-2.6-utrace-core.patch:

Index: linux-2.6-utrace-core.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-utrace-core.patch,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- linux-2.6-utrace-core.patch	12 Sep 2007 00:17:42 -0000	1.5
+++ linux-2.6-utrace-core.patch	10 Oct 2007 21:22:57 -0000	1.6
@@ -19,37 +19,33 @@
 
 ---
 
+ kernel/Makefile                   |    1 
+ kernel/utrace.c                   | 2359 +++++++++++++++++++++++++++++++++++++
+ Documentation/utrace.txt          |  579 +++++++++
  Documentation/DocBook/Makefile    |    2 
  Documentation/DocBook/utrace.tmpl |   23 
- Documentation/utrace.txt          |  579 +++++++++
- include/linux/sched.h             |    5 
  include/linux/tracehook.h         |   85 +
- include/linux/utrace.h            |  544 ++++++++
- init/Kconfig                      |   18 
- kernel/Makefile                   |    1 
- kernel/utrace.c                   | 2359 ++++++++++++++++++++++++++++++++++++++
- 9 files changed, 3598 insertions(+), 18 deletions(-)
+ include/linux/utrace.h            |  544 +++++++++
+ include/linux/sched.h             |    5 
+ init/Kconfig                      |   20 
+ 9 files changed, 3600 insertions(+), 18 deletions(-)
  create kernel/utrace.c
  create Documentation/utrace.txt
  create Documentation/DocBook/utrace.tmpl
  create include/linux/utrace.h
 
-Index: b/kernel/Makefile
-===================================================================
---- a/kernel/Makefile
-+++ b/kernel/Makefile
-@@ -51,6 +51,7 @@ obj-$(CONFIG_SYSCTL) += utsname_sysctl.o
- obj-$(CONFIG_UTS_NS) += utsname.o
+--- linux-2.6/kernel/Makefile
++++ linux-2.6/kernel/Makefile
+@@ -51,6 +51,7 @@ obj-$(CONFIG_RELAY) += relay.o
+ obj-$(CONFIG_SYSCTL) += utsname_sysctl.o
  obj-$(CONFIG_TASK_DELAY_ACCT) += delayacct.o
  obj-$(CONFIG_TASKSTATS) += taskstats.o tsacct.o
 +obj-$(CONFIG_UTRACE) += utrace.o
  
  ifneq ($(CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER),y)
  # According to Alan Modra <alan at linuxcare.com.au>, the -fno-omit-frame-pointer is
-Index: b/kernel/utrace.c
-===================================================================
---- /dev/null
-+++ b/kernel/utrace.c
+--- linux-2.6/kernel/utrace.c
++++ linux-2.6/kernel/utrace.c
 @@ -0,0 +1,2359 @@
 +/*
 + * utrace infrastructure interface for debugging user processes
@@ -125,11 +121,11 @@
 +	utrace_cachep =
 +		kmem_cache_create("utrace_cache",
 +				  sizeof(struct utrace), 0,
-+				  SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL);
++				  SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);
 +	utrace_engine_cachep =
 +		kmem_cache_create("utrace_engine_cache",
 +				  sizeof(struct utrace_attached_engine), 0,
-+				  SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL);
++				  SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);
 +	return 0;
 +}
 +subsys_initcall(utrace_init);
@@ -2410,10 +2406,8 @@
 +
 +	return unsafe;
 +}
-Index: b/Documentation/utrace.txt
-===================================================================
---- /dev/null
-+++ b/Documentation/utrace.txt
+--- linux-2.6/Documentation/utrace.txt
++++ linux-2.6/Documentation/utrace.txt
 @@ -0,0 +1,579 @@
 +DRAFT DRAFT DRAFT	WORK IN PROGRESS	DRAFT DRAFT DRAFT
 +
@@ -2994,10 +2988,8 @@
 +sure which event callbacks it will or won't see after utrace_set_flags
 +has returned.  By checking for errors, it can know whether to clean up
 +its data structures immediately or to let its callbacks do the work.
-Index: b/Documentation/DocBook/Makefile
-===================================================================
---- a/Documentation/DocBook/Makefile
-+++ b/Documentation/DocBook/Makefile
+--- linux-2.6/Documentation/DocBook/Makefile
++++ linux-2.6/Documentation/DocBook/Makefile
 @@ -9,7 +9,7 @@
  DOCBOOKS := wanbook.xml z8530book.xml mcabook.xml videobook.xml \
  	    kernel-hacking.xml kernel-locking.xml deviceiobook.xml \
@@ -3007,10 +2999,8 @@
  	    gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml \
  	    genericirq.xml
  
-Index: b/Documentation/DocBook/utrace.tmpl
-===================================================================
---- /dev/null
-+++ b/Documentation/DocBook/utrace.tmpl
+--- linux-2.6/Documentation/DocBook/utrace.tmpl
++++ linux-2.6/Documentation/DocBook/utrace.tmpl
 @@ -0,0 +1,23 @@
 +<?xml version="1.0" encoding="UTF-8"?>
 +<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
@@ -3035,10 +3025,8 @@
 +    </chapter>
 +
 +</book>
-Index: b/include/linux/tracehook.h
-===================================================================
---- a/include/linux/tracehook.h
-+++ b/include/linux/tracehook.h
+--- linux-2.6/include/linux/tracehook.h
++++ linux-2.6/include/linux/tracehook.h
 @@ -28,6 +28,7 @@
  
  #include <linux/sched.h>
@@ -3314,10 +3302,8 @@
  }
  
  
-Index: b/include/linux/utrace.h
-===================================================================
---- /dev/null
-+++ b/include/linux/utrace.h
+--- linux-2.6/include/linux/utrace.h
++++ linux-2.6/include/linux/utrace.h
 @@ -0,0 +1,544 @@
 +/*
 + * utrace infrastructure interface for debugging user processes
@@ -3863,11 +3849,9 @@
 +#endif  /* CONFIG_UTRACE */
 +
 +#endif	/* linux/utrace.h */
-Index: b/include/linux/sched.h
-===================================================================
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -962,6 +962,11 @@ struct task_struct {
+--- linux-2.6/include/linux/sched.h
++++ linux-2.6/include/linux/sched.h
+@@ -1081,6 +1081,11 @@ struct task_struct {
  	struct audit_context *audit_context;
  	seccomp_t seccomp;
  
@@ -3879,14 +3863,15 @@
  /* Thread group tracking */
     	u32 parent_exec_id;
     	u32 self_exec_id;
-Index: b/init/Kconfig
-===================================================================
---- a/init/Kconfig
-+++ b/init/Kconfig
-@@ -689,3 +689,21 @@ endmenu
- menu "Block layer"
+--- linux-2.6/init/Kconfig
++++ linux-2.6/init/Kconfig
+@@ -667,4 +667,24 @@ config STOP_MACHINE
+ 	help
+ 	  Need stop_machine() primitive.
+ 
++menu "Block layer"
  source "block/Kconfig"
- endmenu
++endmenu
 +
 +menu "Process debugging support"
 +

linux-2.6-utrace-ptrace-compat-avr32.patch:

Index: linux-2.6-utrace-ptrace-compat-avr32.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-utrace-ptrace-compat-avr32.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-utrace-ptrace-compat-avr32.patch	20 Jul 2007 18:48:03 -0000	1.1
+++ linux-2.6-utrace-ptrace-compat-avr32.patch	10 Oct 2007 21:22:57 -0000	1.2
@@ -12,12 +12,12 @@
 
 ---
 
- arch/avr32/kernel/ptrace.c |  107 +++++++-------------------------------------
- 1 files changed, 18 insertions(+), 89 deletions(-)
+ arch/avr32/kernel/ptrace.c |   98 ++++++++------------------------------------
+ 1 files changed, 18 insertions(+), 80 deletions(-)
 
 --- linux-2.6/arch/avr32/kernel/ptrace.c
 +++ linux-2.6/arch/avr32/kernel/ptrace.c
-@@ -78,115 +78,44 @@ const struct utrace_regset_view *utrace_
+@@ -79,106 +79,44 @@ const struct utrace_regset_view *utrace_
  }
  #endif /* CONFIG_UTRACE */
  
@@ -34,7 +34,6 @@
 +		struct utrace_attached_engine *engine,
 +		unsigned long addr, unsigned long data, long *val)
  {
--	unsigned long tmp;
 -	int ret;
 -
  	pr_debug("arch_ptrace(%ld, %d, %#lx, %#lx)\n",
@@ -48,11 +47,7 @@
 -	/* Read the word at location addr in the child process */
 -	case PTRACE_PEEKTEXT:
 -	case PTRACE_PEEKDATA:
--		ret = access_process_vm(child, addr, &tmp, sizeof(tmp), 0);
--		if (ret == sizeof(tmp))
--			ret = put_user(tmp, (unsigned long __user *)data);
--		else
--			ret = -EIO;
+-		ret = generic_ptrace_peekdata(child, addr, data);
 -		break;
 -
 +	switch (*request) {
@@ -64,11 +59,7 @@
 -	/* Write the word in data at location addr */
 -	case PTRACE_POKETEXT:
 -	case PTRACE_POKEDATA:
--		ret = access_process_vm(child, addr, &data, sizeof(data), 1);
--		if (ret == sizeof(data))
--			ret = 0;
--		else
--			ret = -EIO;
+-		ret = generic_ptrace_pokedata(child, addr, data);
 -		break;
 +		return ptrace_peekusr(child, engine, avr32_uarea, addr, data);
  

linux-2.6-utrace-ptrace-compat-ia64.patch:

Index: linux-2.6-utrace-ptrace-compat-ia64.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-utrace-ptrace-compat-ia64.patch,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- linux-2.6-utrace-ptrace-compat-ia64.patch	10 Aug 2007 17:27:08 -0000	1.4
+++ linux-2.6-utrace-ptrace-compat-ia64.patch	10 Oct 2007 21:22:57 -0000	1.5
@@ -8,15 +8,13 @@
 
 ---
 
- arch/ia64/ia32/sys_ia32.c |   40 +
- arch/ia64/kernel/ptrace.c | 1016 +++++-----------------------------------------
- 2 files changed, 159 insertions(+), 897 deletions(-)
+ arch/ia64/ia32/sys_ia32.c |   40 ++
+ arch/ia64/kernel/ptrace.c | 1019 +++++----------------------------------------
+ 2 files changed, 159 insertions(+), 900 deletions(-)
 
-Index: b/arch/ia64/ia32/sys_ia32.c
-===================================================================
---- a/arch/ia64/ia32/sys_ia32.c
-+++ b/arch/ia64/ia32/sys_ia32.c
-@@ -2340,6 +2340,46 @@ const struct utrace_regset_view utrace_i
+--- linux-2.6/arch/ia64/ia32/sys_ia32.c
++++ linux-2.6/arch/ia64/ia32/sys_ia32.c
+@@ -2344,6 +2344,46 @@ const struct utrace_regset_view utrace_i
  };
  #endif
  
@@ -63,11 +61,9 @@
  typedef struct {
  	unsigned int	ss_sp;
  	unsigned int	ss_flags;
-Index: b/arch/ia64/kernel/ptrace.c
-===================================================================
---- a/arch/ia64/kernel/ptrace.c
-+++ b/arch/ia64/kernel/ptrace.c
-@@ -573,81 +573,6 @@ ia64_sync_user_rbs (struct task_struct *
+--- linux-2.6/arch/ia64/kernel/ptrace.c
++++ linux-2.6/arch/ia64/kernel/ptrace.c
+@@ -554,81 +554,6 @@ ia64_sync_user_rbs (struct task_struct *
  	return 0;
  }
  
@@ -149,7 +145,7 @@
  /*
   * Write f32-f127 back to task->thread.fph if it has been modified.
   */
-@@ -811,828 +736,6 @@ access_nat_bits (struct task_struct *chi
+@@ -792,831 +717,6 @@ access_nat_bits (struct task_struct *chi
  	return 0;
  }
  
@@ -324,10 +320,14 @@
 -			return 0;
 -
 -		      case PT_CR_IPSR:
--			if (write_access)
--				pt->cr_ipsr = ((*data & IPSR_MASK)
+-			if (write_access) {
+-				unsigned long tmp = *data;
+-				/* psr.ri==3 is a reserved value: SDM 2:25 */
+-				if ((tmp & IA64_PSR_RI) == IA64_PSR_RI)
+-					tmp &= ~IA64_PSR_RI;
+-				pt->cr_ipsr = ((tmp & IPSR_MASK)
 -					       | (pt->cr_ipsr & ~IPSR_MASK));
--			else
+-			} else
 -				*data = (pt->cr_ipsr & IPSR_MASK);
 -			return 0;
 -
@@ -950,7 +950,6 @@
 -
 -	      case PTRACE_DETACH:
 -		/* detach a process that was attached. */
--		clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
 -		ret = ptrace_detach(child, data);
 -		goto out_tsk;
 -
@@ -978,7 +977,7 @@
  
  /* "asmlinkage" so the input arguments are preserved... */
  
-@@ -1694,6 +797,9 @@ syscall_trace_leave (long arg0, long arg
+@@ -1670,6 +770,9 @@ syscall_trace_leave (long arg0, long arg
  	}
  }
  
@@ -988,7 +987,7 @@
  /* Utrace implementation starts here */
  
  typedef struct utrace_get {
-@@ -2506,3 +1612,119 @@ const struct utrace_regset_view *utrace_
+@@ -2463,3 +1566,119 @@ const struct utrace_regset_view *utrace_
  #endif
  	return &utrace_ia64_native;
  }

linux-2.6-utrace-ptrace-compat-s390.patch:

Index: linux-2.6-utrace-ptrace-compat-s390.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-utrace-ptrace-compat-s390.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-utrace-ptrace-compat-s390.patch	20 Jul 2007 18:48:03 -0000	1.3
+++ linux-2.6-utrace-ptrace-compat-s390.patch	10 Oct 2007 21:22:57 -0000	1.4
@@ -13,7 +13,7 @@
 
 --- linux-2.6/arch/s390/kernel/ptrace.c
 +++ linux-2.6/arch/s390/kernel/ptrace.c
-@@ -575,6 +575,157 @@ const struct utrace_regset_view *utrace_
+@@ -580,6 +580,157 @@ const struct utrace_regset_view *utrace_
  }
  
  

linux-2.6-utrace-ptrace-compat-sparc64.patch:

Index: linux-2.6-utrace-ptrace-compat-sparc64.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-utrace-ptrace-compat-sparc64.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-utrace-ptrace-compat-sparc64.patch	20 Jul 2007 18:48:03 -0000	1.3
+++ linux-2.6-utrace-ptrace-compat-sparc64.patch	10 Oct 2007 21:22:57 -0000	1.4
@@ -12,7 +12,7 @@
 
 --- linux-2.6/arch/sparc64/kernel/ptrace.c
 +++ linux-2.6/arch/sparc64/kernel/ptrace.c
-@@ -667,484 +667,118 @@ void flush_ptrace_access(struct vm_area_
+@@ -671,484 +671,118 @@ void flush_ptrace_access(struct vm_area_
  	}
  }
  

linux-2.6-utrace-ptrace-compat.patch:

Index: linux-2.6-utrace-ptrace-compat.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-utrace-ptrace-compat.patch,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- linux-2.6-utrace-ptrace-compat.patch	12 Sep 2007 00:17:42 -0000	1.5
+++ linux-2.6-utrace-ptrace-compat.patch	10 Oct 2007 21:22:57 -0000	1.6
@@ -12,30 +12,31 @@
 
 ---
 
- arch/i386/kernel/ptrace.c       |   40 
- arch/powerpc/kernel/ptrace.c    |  250 ++++
+ fs/proc/base.c                  |   40 +
+ arch/i386/kernel/ptrace.c       |   40 +
+ arch/x86_64/ia32/ptrace32.c     |   56 +
+ arch/x86_64/ia32/ia32entry.S    |    2 
+ arch/x86_64/kernel/ptrace.c     |   46 +
+ arch/powerpc/kernel/ptrace.c    |  452 +++++----
  arch/powerpc/kernel/signal_32.c |   52 +
+ arch/powerpc/kernel/Makefile    |    2 
+ arch/powerpc/kernel/ptrace32.c  |  408 --------
  arch/powerpc/lib/sstep.c        |    3 
- arch/x86_64/ia32/ia32entry.S    |    2 
- arch/x86_64/ia32/ptrace32.c     |   56 -
- arch/x86_64/kernel/ptrace.c     |   46 
- fs/proc/base.c                  |   40 
- include/asm-x86_64/ptrace-abi.h |    3 
- include/asm-x86_64/tracehook.h  |    1 
- include/linux/ptrace.h          |  221 +++-
- include/linux/sched.h           |    4 
- init/Kconfig                    |   15 
- kernel/Makefile                 |    3 
- kernel/exit.c                   |   13 
  kernel/fork.c                   |    2 
- kernel/ptrace.c                 | 2053 +++++++++++++++++++++++++++++++++++++---
+ kernel/exit.c                   |   13 
+ kernel/ptrace.c                 | 2056 +++++++++++++++++++++++++++++++++++++--
  kernel/sys_ni.c                 |    4 
- 18 files changed, 2634 insertions(+), 174 deletions(-)
+ kernel/Makefile                 |    3 
+ include/linux/sched.h           |    4 
+ include/linux/ptrace.h          |  221 +++-
+ include/asm-x86_64/tracehook.h  |    1 
+ include/asm-x86_64/ptrace-abi.h |    3 
+ init/Kconfig                    |   15 
+ 20 files changed, 2643 insertions(+), 780 deletions(-)
+ delete arch/powerpc/kernel/ptrace32.c
 
-Index: b/fs/proc/base.c
-===================================================================
---- a/fs/proc/base.c
-+++ b/fs/proc/base.c
+--- linux-2.6/fs/proc/base.c
++++ linux-2.6/fs/proc/base.c
 @@ -151,6 +151,46 @@ static int get_nr_threads(struct task_st
  	return count;
  }
@@ -63,7 +64,7 @@
 +		return -EPERM;
 +	smp_rmb();
 +	if (task->mm)
-+		dumpable = task->mm->dumpable;
++		dumpable = get_dumpable(task->mm);
 +	if (!dumpable && !capable(CAP_SYS_PTRACE))
 +		return -EPERM;
 +
@@ -83,11 +84,9 @@
  static int proc_cwd_link(struct inode *inode, struct dentry **dentry, struct vfsmount **mnt)
  {
  	struct task_struct *task = get_proc_task(inode);
-Index: b/arch/i386/kernel/ptrace.c
-===================================================================
---- a/arch/i386/kernel/ptrace.c
-+++ b/arch/i386/kernel/ptrace.c
-@@ -739,6 +739,46 @@ const struct utrace_regset_view *utrace_
+--- linux-2.6/arch/i386/kernel/ptrace.c
++++ linux-2.6/arch/i386/kernel/ptrace.c
+@@ -747,6 +747,46 @@ const struct utrace_regset_view *utrace_
  	return &utrace_i386_native;
  }
  
@@ -134,10 +133,8 @@
  
  void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, int error_code)
  {
-Index: b/arch/x86_64/ia32/ptrace32.c
-===================================================================
---- a/arch/x86_64/ia32/ptrace32.c
-+++ b/arch/x86_64/ia32/ptrace32.c
+--- linux-2.6/arch/x86_64/ia32/ptrace32.c
++++ linux-2.6/arch/x86_64/ia32/ptrace32.c
 @@ -167,11 +167,6 @@ static int getreg32(struct task_struct *
  
  #undef R32
@@ -205,11 +202,9 @@
 +	return -ENOSYS;
 +}
 +#endif	/* CONFIG_PTRACE */
-Index: b/arch/x86_64/ia32/ia32entry.S
-===================================================================
---- a/arch/x86_64/ia32/ia32entry.S
-+++ b/arch/x86_64/ia32/ia32entry.S
-@@ -421,7 +421,7 @@ ia32_sys_call_table:
+--- linux-2.6/arch/x86_64/ia32/ia32entry.S
++++ linux-2.6/arch/x86_64/ia32/ia32entry.S
+@@ -434,7 +434,7 @@ ia32_sys_call_table:
  	.quad sys_setuid16
  	.quad sys_getuid16
  	.quad compat_sys_stime	/* stime */		/* 25 */
@@ -218,11 +213,9 @@
  	.quad sys_alarm
  	.quad sys_fstat	/* (old)fstat */
  	.quad sys_pause
-Index: b/arch/x86_64/kernel/ptrace.c
-===================================================================
---- a/arch/x86_64/kernel/ptrace.c
-+++ b/arch/x86_64/kernel/ptrace.c
-@@ -717,6 +717,52 @@ const struct utrace_regset_view *utrace_
+--- linux-2.6/arch/x86_64/kernel/ptrace.c
++++ linux-2.6/arch/x86_64/kernel/ptrace.c
+@@ -722,6 +722,52 @@ const struct utrace_regset_view *utrace_
  }
  
  
@@ -275,44 +268,69 @@
  asmlinkage void syscall_trace_enter(struct pt_regs *regs)
  {
  	/* do the secure computing check first */
-Index: b/arch/powerpc/kernel/ptrace.c
-===================================================================
---- a/arch/powerpc/kernel/ptrace.c
-+++ b/arch/powerpc/kernel/ptrace.c
-@@ -456,13 +456,6 @@ static const struct utrace_regset_view u
- 	.name = "ppc", .e_machine = EM_PPC,
- 	.regsets = ppc32_regsets, .n = ARRAY_SIZE(ppc32_regsets)
- };
--
--
--long compat_sys_ptrace(int request, int pid, unsigned long addr,
--		       unsigned long data)
--{
--	return -ENOSYS;
--}
- #endif
- 
- const struct utrace_regset_view *utrace_native_view(struct task_struct *tsk)
-@@ -475,6 +468,249 @@ const struct utrace_regset_view *utrace_
+--- linux-2.6/arch/powerpc/kernel/ptrace.c
++++ linux-2.6/arch/powerpc/kernel/ptrace.c
+@@ -564,249 +564,315 @@ const struct utrace_regset_view *utrace_
  }
  
  
 +#ifdef CONFIG_PTRACE
-+static const struct ptrace_layout_segment ppc_uarea[] = {
-+	{0, PT_FPR0 * sizeof(long), 0, 0},
-+	{PT_FPR0 * sizeof(long), (PT_FPSCR + 1) * sizeof(long), 1, 0},
-+	{0, 0, -1, 0}
-+};
-+
-+int arch_ptrace(long *request, struct task_struct *child,
-+		struct utrace_attached_engine *engine,
-+		unsigned long addr, unsigned long data, long *val)
-+{
+ /*
+  * Here are the old "legacy" powerpc specific getregs/setregs ptrace calls,
+  * we mark them as obsolete now, they will be removed in a future version
+  */
+-static long arch_ptrace_old(struct task_struct *child, long request, long addr,
+-			    long data)
++static int arch_ptrace_old(long *request, struct task_struct *child,
++			   struct utrace_attached_engine *engine,
++			   unsigned long addr, unsigned long data, long *val)
+ {
+-	int ret = -EPERM;
+-
+-	switch(request) {
+-	case PPC_PTRACE_GETREGS: { /* Get GPRs 0 - 31. */
+-		int i;
+-		unsigned long *reg = &((unsigned long *)child->thread.regs)[0];
+-		unsigned long __user *tmp = (unsigned long __user *)addr;
+-
+-		for (i = 0; i < 32; i++) {
+-			ret = put_user(*reg, tmp);
+-			if (ret)
+-				break;
+-			reg++;
+-			tmp++;
+-		}
+-		break;
+-	}
+-
+-	case PPC_PTRACE_SETREGS: { /* Set GPRs 0 - 31. */
+-		int i;
+-		unsigned long *reg = &((unsigned long *)child->thread.regs)[0];
+-		unsigned long __user *tmp = (unsigned long __user *)addr;
+-
+-		for (i = 0; i < 32; i++) {
+-			ret = get_user(*reg, tmp);
+-			if (ret)
+-				break;
+-			reg++;
+-			tmp++;
+-		}
+-		break;
+-	}
+-
+-	case PPC_PTRACE_GETFPREGS: { /* Get FPRs 0 - 31. */
+-		flush_fp_to_thread(child);
+-/*		ret = get_fpregs((void __user *)addr, child, 0);*/
+-		break;
+-	}
+-
+-	case PPC_PTRACE_SETFPREGS: { /* Get FPRs 0 - 31. */
+-		flush_fp_to_thread(child);
+-/*		ret = set_fpregs((void __user *)addr, child, 0);*/
+-		break;
+-	}
+-
 +	switch (*request) {
-+	case PTRACE_PEEKUSR:
-+		return ptrace_peekusr(child, engine, ppc_uarea, addr, data);
-+	case PTRACE_POKEUSR:
-+		return ptrace_pokeusr(child, engine, ppc_uarea, addr, data);
 +	case PPC_PTRACE_GETREGS: /* Get GPRs 0 - 31. */
 +	case PPC_PTRACE_SETREGS: /* Set GPRs 0 - 31. */
 +		return ptrace_regset_access(child, engine,
@@ -327,14 +345,73 @@
 +					    0, 32 * sizeof(double),
 +					    (void __user *)addr,
 +					    *request == PPC_PTRACE_SETFPREGS);
-+#ifdef CONFIG_PPC64
+ 	}
+-	return ret;
++	return -ENOSYS;
+ }
+ 
+-long arch_ptrace(struct task_struct *child, long request, long addr, long data)
++static const struct ptrace_layout_segment ppc_uarea[] = {
++	{0, PT_FPR0 * sizeof(long), 0, 0},
++	{PT_FPR0 * sizeof(long), (PT_FPSCR + 1) * sizeof(long), 1, 0},
++	{0, 0, -1, 0}
++};
++
++int arch_ptrace(long *request, struct task_struct *child,
++		struct utrace_attached_engine *engine,
++		unsigned long addr, unsigned long data, long *val)
+ {
+-	int ret = -EPERM;
++	switch (*request) {
++	case PTRACE_PEEKUSR:
++		return ptrace_peekusr(child, engine, ppc_uarea, addr, data);
++	case PTRACE_POKEUSR:
++		return ptrace_pokeusr(child, engine, ppc_uarea, addr, data);
+ 
+-	switch (request) {
+-	/* when I and D space are separate, these will need to be fixed. */
+-	case PTRACE_PEEKTEXT: /* read word at location addr. */
+-	case PTRACE_PEEKDATA:
+-		ret = generic_ptrace_peekdata(child, addr, data);
+-		break;
 +	case PTRACE_GET_DEBUGREG:
 +	case PTRACE_SET_DEBUGREG:
 +		return ptrace_onereg_access(child, engine,
 +					    utrace_native_view(current), 3,
 +					    addr, (unsigned long __user *)data,
 +					    *request == PTRACE_SET_DEBUGREG);
-+#endif /* CONFIG_PPC64 */
+ 
+-	/* read the word at location addr in the USER area. */
+-	case PTRACE_PEEKUSR: {
+-		unsigned long index, tmp;
++#ifdef CONFIG_PPC64
++	case PTRACE_GETREGS64:
++	case PTRACE_SETREGS64:
++#endif
++	case PTRACE_GETREGS:
++	case PTRACE_SETREGS:
++		/*
++		 * This is called from 32-bit processors via arch_compat_ptrace.
++		 * So we can't use utrace_native_view here.
++		 */
++		return ptrace_regset_access(child, engine,
++					    &utrace_ppc_native_view, 0,
++					    0, sizeof(struct pt_regs),
++					    (void __user *)addr,
++					    *request == PTRACE_SETREGS ||
++					    *request == PTRACE_SETREGS64);
++
++	case PTRACE_GETFPREGS:
++		return ptrace_whole_regset(child, engine, data, 1, 0);
++	case PTRACE_SETFPREGS:
++		return ptrace_whole_regset(child, engine, data, 1, 1);
+ 
+-		ret = -EIO;
+-		/* convert to index and check */
+-#ifdef CONFIG_PPC32
+-		index = (unsigned long) addr >> 2;
+-		if ((addr & 3) || (index > PT_FPSCR)
+-		    || (child->thread.regs == NULL))
 +#ifdef CONFIG_ALTIVEC
 +	case PTRACE_GETVRREGS:
 +		return ptrace_whole_regset(child, engine, data, 2, 0);
@@ -344,22 +421,70 @@
 +#ifdef CONFIG_SPE
 +#ifdef CONFIG_ALTIVEC
 +#define REGSET_EVR 3
-+#else
+ #else
+-		index = (unsigned long) addr >> 3;
+-		if ((addr & 7) || (index > PT_FPSCR))
 +#define REGSET_EVR 2
 +#endif
 +	case PTRACE_GETEVRREGS:
 +		return ptrace_whole_regset(child, engine, data, REGSET_EVR, 0);
 +	case PTRACE_SETEVRREGS:
 +		return ptrace_whole_regset(child, engine, data, REGSET_EVR, 1);
-+#endif
+ #endif
+-			break;
+ 
+-		CHECK_FULL_REGS(child->thread.regs);
+-		if (index < PT_FPR0) {
+-			tmp = 0;/*ptrace_get_reg(child, (int) index);*/
+-		} else {
+-			flush_fp_to_thread(child);
+-			tmp = ((unsigned long *)child->thread.fpr)[index - PT_FPR0];
+-		}
+-		ret = put_user(tmp,(unsigned long __user *) data);
+-		break;
++	/* Old reverse args ptrace callss */
++	case PPC_PTRACE_GETREGS: /* Get GPRs 0 - 31. */
++	case PPC_PTRACE_SETREGS: /* Set GPRs 0 - 31. */
++	case PPC_PTRACE_GETFPREGS: /* Get FPRs 0 - 31. */
++	case PPC_PTRACE_SETFPREGS: /* Get FPRs 0 - 31. */
++		return arch_ptrace_old(request, child, engine, addr, data, val);
+ 	}
+ 
+-	/* If I and D space are separate, this will have to be fixed. */
+-	case PTRACE_POKETEXT: /* write the word at location addr. */
+-	case PTRACE_POKEDATA:
+-		ret = generic_ptrace_pokedata(child, addr, data);
+-		break;
++	return -ENOSYS;
++}
+ 
+-	/* write the word at location addr in the USER area */
+-	case PTRACE_POKEUSR: {
+-		unsigned long index;
++#ifdef CONFIG_PPC64
++/*
++ * Here are the old "legacy" powerpc specific getregs/setregs ptrace calls,
++ * we mark them as obsolete now, they will be removed in a future version
++ */
++static int compat_ptrace_old(compat_long_t *request,
++			     struct task_struct *child,
++			     struct utrace_attached_engine *engine,
++			     compat_ulong_t addr, compat_ulong_t data,
++			     compat_long_t *val)
++{
++	void __user *uaddr = (void __user *) (unsigned long) addr;
++	switch (*request) {
++	case PPC_PTRACE_GETREGS: /* Get GPRs 0 - 31. */
++	case PPC_PTRACE_SETREGS: /* Set GPRs 0 - 31. */
++		return ptrace_regset_access(child, engine,
++					    utrace_native_view(current), 0,
++					    0, 32 * sizeof(compat_long_t),
++					    uaddr,
++					    *request == PPC_PTRACE_SETREGS);
 +	}
 +	return -ENOSYS;
 +}
 +
-+#ifdef CONFIG_COMPAT
-+#include <linux/mm.h>
-+#include <asm/uaccess.h>
-+
 +static const struct ptrace_layout_segment ppc32_uarea[] = {
 +	{0, PT_FPR0 * sizeof(u32), 0, 0},
 +	{PT_FPR0 * sizeof(u32), (PT_FPSCR32 + 1) * sizeof(u32), 1, 0},
@@ -372,6 +497,7 @@
 +		       compat_ulong_t addr, compat_ulong_t data,
 +		       compat_long_t *val)
 +{
++	long lrequest = *request;
 +	void __user *uaddr = (void __user *) (unsigned long) addr;
 +	int ret = -ENOSYS;
 +
@@ -383,35 +509,6 @@
 +		return ptrace_compat_pokeusr(child, engine, ppc32_uarea,
 +					     addr, data);
 +
-+	case PPC_PTRACE_GETREGS: /* Get GPRs 0 - 31. */
-+	case PPC_PTRACE_SETREGS: /* Set GPRs 0 - 31. */
-+		return ptrace_regset_access(child, engine,
-+					    utrace_native_view(current), 0,
-+					    0, 32 * sizeof(compat_long_t),
-+					    uaddr,
-+					    *request == PPC_PTRACE_SETREGS);
-+	case PPC_PTRACE_GETFPREGS: /* Get FPRs 0 - 31. */
-+	case PPC_PTRACE_SETFPREGS: /* Get FPRs 0 - 31. */
-+		return ptrace_regset_access(child, engine,
-+					    utrace_native_view(current), 1,
-+					    0, 32 * sizeof(double),
-+					    uaddr,
-+					    *request == PPC_PTRACE_SETFPREGS);
-+#ifdef CONFIG_ALTIVEC
-+	case PTRACE_GETVRREGS:
-+		return ptrace_whole_regset(child, engine, data, 2, 0);
-+	case PTRACE_SETVRREGS:
-+		return ptrace_whole_regset(child, engine, data, 2, 1);
-+#endif
-+	case PTRACE_GET_DEBUGREG:
-+	case PTRACE_SET_DEBUGREG:
-+		return ptrace_onereg_access(child, engine,
-+					    utrace_native_view(current), 3,
-+					    addr,
-+					    (unsigned long __user *)
-+					    (unsigned long) data,
-+					    *request == PTRACE_SET_DEBUGREG);
-+
 +	/*
 +	 * Read 4 bytes of the other process' storage
 +	 *  data is a pointer specifying where the user wants the
@@ -426,22 +523,51 @@
 +		u32 tmp;
 +		int copied;
 +		u32 __user * addrOthers;
-+
-+		ret = -EIO;
-+
+ 
+ 		ret = -EIO;
+-		/* convert to index and check */
+-#ifdef CONFIG_PPC32
+-		index = (unsigned long) addr >> 2;
+-		if ((addr & 3) || (index > PT_FPSCR)
+-		    || (child->thread.regs == NULL))
+-#else
+-		index = (unsigned long) addr >> 3;
+-		if ((addr & 7) || (index > PT_FPSCR))
+-#endif
+-			break;
+ 
+-		CHECK_FULL_REGS(child->thread.regs);
+-		if (index < PT_FPR0) {
+-/*			ret = ptrace_put_reg(child, index, data);*/
+-		} else {
+-			flush_fp_to_thread(child);
+-			((unsigned long *)child->thread.fpr)[index - PT_FPR0] = data;
+-			ret = 0;
+-		}
+-		break;
+-	}
 +		/* Get the addr in the other process that we want to read */
 +		if (get_user(addrOthers, ((u32 __user * __user *)
 +					  (unsigned long) addr)) != 0)
 +			break;
-+
+ 
+-	case PTRACE_GET_DEBUGREG: {
+-		ret = -EINVAL;
+-		/* We only support one DABR and no IABRS at the moment */
+-		if (addr > 0)
 +		copied = access_process_vm(child, (u64)addrOthers, &tmp,
 +				sizeof(tmp), 0);
 +		if (copied != sizeof(tmp))
-+			break;
+ 			break;
+-		ret = put_user(child->thread.dabr,
+-			       (unsigned long __user *)data);
 +		ret = put_user(tmp, (u32 __user *)(unsigned long)data);
-+		break;
-+	}
-+
+ 		break;
+ 	}
+ 
+-	case PTRACE_SET_DEBUGREG:
+-/*		ret = ptrace_set_debugreg(child, addr, data);*/
+-		break;
 +	/*
 +	 * Write 4 bytes into the other process' storage
 +	 *  data is the 4 bytes that the user wants written
@@ -455,20 +581,47 @@
 +	case PPC_PTRACE_POKEDATA_3264: {
 +		u32 tmp = data;
 +		u32 __user * addrOthers;
-+
+ 
+-	case PTRACE_DETACH:
+-		ret = ptrace_detach(child, data);
+-		break;
+-
+-#ifdef CONFIG_PPC64
+-	case PTRACE_GETREGS64:
+-#endif
+-	case PTRACE_GETREGS: { /* Get all pt_regs from the child. */
+-		int ui;
+-	  	if (!access_ok(VERIFY_WRITE, (void __user *)data,
+-			       sizeof(struct pt_regs))) {
+-			ret = -EIO;
 +		/* Get the addr in the other process that we want to write into */
 +		ret = -EIO;
 +		if (get_user(addrOthers, ((u32 __user * __user *)
 +					  (unsigned long) addr)) != 0)
-+			break;
-+		ret = 0;
+ 			break;
+-		}
+ 		ret = 0;
+-		for (ui = 0; ui < PT_REGS_COUNT; ui ++) {
+-/*			ret |= __put_user(ptrace_get_reg(child, ui),
+-					  (unsigned long __user *) data);*/
+-			data += sizeof(long);
+-		}
 +		if (access_process_vm(child, (u64)addrOthers, &tmp,
 +					sizeof(tmp), 1) == sizeof(tmp))
 +			break;
 +		ret = -EIO;
-+		break;
-+	}
-+
+ 		break;
+ 	}
+ 
+-#ifdef CONFIG_PPC64
+-	case PTRACE_SETREGS64:
+-#endif
+-	case PTRACE_SETREGS: { /* Set all gp regs in the child. */
+-		unsigned long tmp;
+-		int ui;
+-	  	if (!access_ok(VERIFY_READ, (void __user *)data,
+-			       sizeof(struct pt_regs))) {
+-			ret = -EIO;
 +	/*
 +	 * This is like PTRACE_PEEKUSR on a 64-bit process,
 +	 * but here we access only 4 bytes at a time.
@@ -484,13 +637,21 @@
 +
 +		ret = -EIO;
 +		if ((addr & 3) || addr > PT_FPSCR*8)
-+			break;
+ 			break;
 +
 +		setno = 0;
 +		if (addr >= PT_FPR0*8) {
 +			setno = 1;
 +			addr -= PT_FPR0*8;
-+		}
+ 		}
+-		ret = 0;
+-		for (ui = 0; ui < PT_REGS_COUNT; ui ++) {
+-			ret = __get_user(tmp, (unsigned long __user *) data);
+-			if (ret)
+-				break;
+-/*			ptrace_put_reg(child, ui, tmp);*/
+-			data += sizeof(long);
+-		}
 +		regset = utrace_regset(child, NULL,
 +				       &utrace_ppc_native_view, setno);
 +		ret = (*regset->get)(child, regset, addr &~ 7,
@@ -498,9 +659,14 @@
 +		if (ret == 0)
 +			ret = put_user(reg.half[(addr >> 2) & 1],
 +				       (u32 __user *)(unsigned long)data);
-+		break;
-+	}
-+
+ 		break;
+ 	}
+ 
+-	case PTRACE_GETFPREGS: { /* Get the child FPU state (FPR0...31 + FPSCR) */
+-		flush_fp_to_thread(child);
+-/*		ret = get_fpregs((void __user *)data, child, 1);*/
+-		break;
+-	}
 +	/*
 +	 * This is like PTRACE_POKEUSR on a 64-bit process,
 +	 * but here we access only 4 bytes at a time.
@@ -513,7 +679,10 @@
 +		} reg;
 +		int setno;
 +		const struct utrace_regset *regset;
-+
+ 
+-	case PTRACE_SETFPREGS: { /* Set the child FPU state (FPR0...31 + FPSCR) */
+-		flush_fp_to_thread(child);
+-/*		ret = set_fpregs((void __user *)data, child, 1);*/
 +		ret = -EIO;
 +		if ((addr & 3) || addr > PT_FPSCR*8)
 +			break;
@@ -531,23 +700,88 @@
 +		reg.half[(addr >> 2) & 1] = data;
 +		ret = (*regset->set)(child, regset, addr &~ 7,
 +				     sizeof(reg.whole), &reg.whole, NULL);
-+		break;
-+	}
-+	}
-+	return ret;
-+}
-+#endif	/* CONFIG_COMPAT */
-+#endif	/* CONFIG_PTRACE */
+ 		break;
+ 	}
+ 
+-#ifdef CONFIG_ALTIVEC
+-	case PTRACE_GETVRREGS:
+-		/* Get the child altivec register state. */
+-		flush_altivec_to_thread(child);
+-/*		ret = get_vrregs((unsigned long __user *)data, child);*/
+-		break;
++	case PTRACE_GET_DEBUGREG:
++	case PTRACE_SET_DEBUGREG:
++		return ptrace_onereg_access(child, engine,
++					    utrace_native_view(current), 3,
++					    addr,
++					    (u32 __user *) (unsigned long) data,
++					    *request == PTRACE_SET_DEBUGREG);
 +
++	case PTRACE_GETREGS:
++	case PTRACE_SETREGS:
++		return ptrace_regset_access(child, engine,
++					    utrace_native_view(current), 0,
++					    0, PT_REGS_COUNT * sizeof(int),
++					    uaddr,
++					    *request == PTRACE_SETREGS);
+ 
++	case PTRACE_GETFPREGS:
++	case PTRACE_SETFPREGS:
++	case PTRACE_GETVRREGS:
+ 	case PTRACE_SETVRREGS:
+-		/* Set the child altivec register state. */
+-		flush_altivec_to_thread(child);
+-/*		ret = set_vrregs(child, (unsigned long __user *)data);*/
+-		break;
+-#endif
+-#ifdef CONFIG_SPE
+-	case PTRACE_GETEVRREGS:
+-		/* Get the child spe register state. */
+-		if (child->thread.regs->msr & MSR_SPE)
+-			giveup_spe(child);
+-/*		ret = get_evrregs((unsigned long __user *)data, child);*/
+-		break;
+-
+-	case PTRACE_SETEVRREGS:
+-		/* Set the child spe register state. */
+-		/* this is to clear the MSR_SPE bit to force a reload
+-		 * of register state from memory */
+-		if (child->thread.regs->msr & MSR_SPE)
+-			giveup_spe(child);
+-/*		ret = set_evrregs(child, (unsigned long __user *)data);*/
+-		break;
+-#endif
++	case PTRACE_GETREGS64:
++	case PTRACE_SETREGS64:
++	case PPC_PTRACE_GETFPREGS:
++	case PPC_PTRACE_SETFPREGS:
++		return arch_ptrace(&lrequest, child, engine, addr, data, NULL);
+ 
+ 	/* Old reverse args ptrace callss */
+ 	case PPC_PTRACE_GETREGS: /* Get GPRs 0 - 31. */
+ 	case PPC_PTRACE_SETREGS: /* Set GPRs 0 - 31. */
+-	case PPC_PTRACE_GETFPREGS: /* Get FPRs 0 - 31. */
+-	case PPC_PTRACE_SETFPREGS: /* Get FPRs 0 - 31. */
+-		ret = arch_ptrace_old(child, request, addr, data);
+-		break;
+-
+-	default:
+-		ret = ptrace_request(child, request, addr, data);
+-		break;
++		return compat_ptrace_old(request, child, engine,
++					 addr, data, val);
+ 	}
 +
+ 	return ret;
+ }
++#endif	/* CONFIG_PPC64 */
++#endif	/* CONFIG_PTRACE */
+ 
  void do_syscall_trace_enter(struct pt_regs *regs)
  {
- 	secure_computing(regs->gpr[0]);
-Index: b/arch/powerpc/kernel/signal_32.c
-===================================================================
---- a/arch/powerpc/kernel/signal_32.c
-+++ b/arch/powerpc/kernel/signal_32.c
-@@ -631,6 +631,58 @@ int copy_siginfo_to_user32(struct compat
+--- linux-2.6/arch/powerpc/kernel/signal_32.c
++++ linux-2.6/arch/powerpc/kernel/signal_32.c
+@@ -622,6 +622,58 @@ int copy_siginfo_to_user32(struct compat
  
  #define copy_siginfo_to_user	copy_siginfo_to_user32
  
@@ -606,10 +840,430 @@
  /*
   * Note: it is necessary to treat pid and sig as unsigned ints, with the
   * corresponding cast to a signed int to insure that the proper conversion
-Index: b/arch/powerpc/lib/sstep.c
-===================================================================
---- a/arch/powerpc/lib/sstep.c
-+++ b/arch/powerpc/lib/sstep.c
+--- linux-2.6/arch/powerpc/kernel/Makefile
++++ linux-2.6/arch/powerpc/kernel/Makefile
+@@ -18,7 +18,7 @@ obj-y				:= semaphore.o cputable.o ptrac
+ 				   signal.o
+ obj-y				+= vdso32/
+ obj-$(CONFIG_PPC64)		+= setup_64.o binfmt_elf32.o sys_ppc32.o \
+-				   signal_64.o ptrace32.o \
++				   signal_64.o \
+ 				   paca.o cpu_setup_ppc970.o \
+ 				   cpu_setup_pa6t.o \
+ 				   firmware.o sysfs.o nvram_64.o
+--- linux-2.6/arch/powerpc/kernel/ptrace32.c
++++ linux-2.6/arch/powerpc/kernel/ptrace32.c
+@@ -1,408 +0,0 @@
+-/*
+- * ptrace for 32-bit processes running on a 64-bit kernel.
+- *
+- *  PowerPC version
+- *    Copyright (C) 1995-1996 Gary Thomas (gdt at linuxppc.org)
+- *
+- *  Derived from "arch/m68k/kernel/ptrace.c"
+- *  Copyright (C) 1994 by Hamish Macdonald
+- *  Taken from linux/kernel/ptrace.c and modified for M680x0.
+- *  linux/kernel/ptrace.c is by Ross Biro 1/23/92, edited by Linus Torvalds
+- *
+- * Modified by Cort Dougan (cort at hq.fsmlabs.com)
+- * and Paul Mackerras (paulus at samba.org).
+- *
+- * This file is subject to the terms and conditions of the GNU General
+- * Public License.  See the file COPYING in the main directory of
+- * this archive for more details.
+- */
+-
+-#include <linux/kernel.h>
+-#include <linux/sched.h>
+-#include <linux/mm.h>
+-#include <linux/smp.h>
+-#include <linux/smp_lock.h>
+-#include <linux/errno.h>
+-#include <linux/ptrace.h>
+-#include <linux/tracehook.h>
+-#include <linux/user.h>
+-#include <linux/security.h>
+-#include <linux/signal.h>
+-
+-#include <asm/uaccess.h>
+-#include <asm/page.h>
+-#include <asm/pgtable.h>
+-#include <asm/system.h>
+-#include <asm/tracehook.h>
+-
+-
+-/*
+- * Here are the old "legacy" powerpc specific getregs/setregs ptrace calls,
+- * we mark them as obsolete now, they will be removed in a future version
+- */
+-static long compat_ptrace_old(struct task_struct *child, long request,
+-			      long addr, long data)
+-{
+-	int ret = -EPERM;
+-
+-	switch(request) {
+-	case PPC_PTRACE_GETREGS: { /* Get GPRs 0 - 31. */
+-		int i;
+-		unsigned long *reg = &((unsigned long *)child->thread.regs)[0];
+-		unsigned int __user *tmp = (unsigned int __user *)addr;
+-
+-		for (i = 0; i < 32; i++) {
+-			ret = put_user(*reg, tmp);
+-			if (ret)
+-				break;
+-			reg++;
+-			tmp++;
+-		}
+-		break;
+-	}
+-
+-	case PPC_PTRACE_SETREGS: { /* Set GPRs 0 - 31. */
+-		int i;
+-		unsigned long *reg = &((unsigned long *)child->thread.regs)[0];
+-		unsigned int __user *tmp = (unsigned int __user *)addr;
+-
+-		for (i = 0; i < 32; i++) {
+-			ret = get_user(*reg, tmp);
+-			if (ret)
+-				break;
+-			reg++;
+-			tmp++;
+-		}
+-		break;
+-	}
+-
+-	}
+-	return ret;
+-}
+-
+-long compat_sys_ptrace(int request, int pid, unsigned long addr,
+-		       unsigned long data)
+-{
+-	struct task_struct *child;
+-	int ret;
+-
+-	if (request == PTRACE_TRACEME)
+-		return -ENOSYS;
+-
+-	lock_kernel();
+-	if (request == PTRACE_TRACEME) {
+-		ret = ptrace_traceme();
+-		goto out;
+-	}
+-
+-	child = ptrace_get_task_struct(pid);
+-	if (IS_ERR(child)) {
+-		ret = PTR_ERR(child);
+-		goto out;
+-	}
+-
+-	if (request == PTRACE_ATTACH) {
+-		ret = ptrace_attach(child);
+-		goto out_tsk;
+-	}
+-
+-	ret = ptrace_check_attach(child, request == PTRACE_KILL);
+-	if (ret < 0)
+-		goto out_tsk;
+-
+-	switch (request) {
+-	/* when I and D space are separate, these will need to be fixed. */
+-	case PTRACE_PEEKTEXT: /* read word at location addr. */ 
+-	case PTRACE_PEEKDATA: {
+-		unsigned int tmp;
+-		int copied;
+-
+-		copied = access_process_vm(child, addr, &tmp, sizeof(tmp), 0);
+-		ret = -EIO;
+-		if (copied != sizeof(tmp))
+-			break;
+-		ret = put_user(tmp, (u32 __user *)data);
+-		break;
+-	}
+-
+-	/*
+-	 * Read 4 bytes of the other process' storage
+-	 *  data is a pointer specifying where the user wants the
+-	 *	4 bytes copied into
+-	 *  addr is a pointer in the user's storage that contains an 8 byte
+-	 *	address in the other process of the 4 bytes that is to be read
+-	 * (this is run in a 32-bit process looking at a 64-bit process)
+-	 * when I and D space are separate, these will need to be fixed.
+-	 */
+-	case PPC_PTRACE_PEEKTEXT_3264:
+-	case PPC_PTRACE_PEEKDATA_3264: {
+-		u32 tmp;
+-		int copied;
+-		u32 __user * addrOthers;
+-
+-		ret = -EIO;
+-
+-		/* Get the addr in the other process that we want to read */
+-		if (get_user(addrOthers, (u32 __user * __user *)addr) != 0)
+-			break;
+-
+-		copied = access_process_vm(child, (u64)addrOthers, &tmp,
+-				sizeof(tmp), 0);
+-		if (copied != sizeof(tmp))
+-			break;
+-		ret = put_user(tmp, (u32 __user *)data);
+-		break;
+-	}
+-
+-	/* Read a register (specified by ADDR) out of the "user area" */
+-	case PTRACE_PEEKUSR: {
+-		int index;
+-		unsigned long tmp;
+-
+-		ret = -EIO;
+-		/* convert to index and check */
+-		index = (unsigned long) addr >> 2;
+-		if ((addr & 3) || (index > PT_FPSCR32))
+-			break;
+-
+-		if (index < PT_FPR0) {
+-			tmp = 0;/*ptrace_get_reg(child, index);*/
+-		} else {
+-			flush_fp_to_thread(child);
+-			/*
+-			 * the user space code considers the floating point
+-			 * to be an array of unsigned int (32 bits) - the
+-			 * index passed in is based on this assumption.
+-			 */
+-			tmp = ((unsigned int *)child->thread.fpr)[index - PT_FPR0];
+-		}
+-		ret = put_user((unsigned int)tmp, (u32 __user *)data);
+-		break;
+-	}
+-  
+-	/*
+-	 * Read 4 bytes out of the other process' pt_regs area
+-	 *  data is a pointer specifying where the user wants the
+-	 *	4 bytes copied into
+-	 *  addr is the offset into the other process' pt_regs structure
+-	 *	that is to be read
+-	 * (this is run in a 32-bit process looking at a 64-bit process)
+-	 */
+-	case PPC_PTRACE_PEEKUSR_3264: {
+-		u32 index;
+-		u32 reg32bits;
+-		u64 tmp;
+-		u32 numReg;
+-		u32 part;
+-
+-		ret = -EIO;
+-		/* Determine which register the user wants */
+-		index = (u64)addr >> 2;
+-		numReg = index / 2;
+-		/* Determine which part of the register the user wants */
+-		if (index % 2)
+-			part = 1;  /* want the 2nd half of the register (right-most). */
+-		else
+-			part = 0;  /* want the 1st half of the register (left-most). */
+-
+-		/* Validate the input - check to see if address is on the wrong boundary
+-		 * or beyond the end of the user area
+-		 */
+-		if ((addr & 3) || numReg > PT_FPSCR)
+-			break;
+-
+-		if (numReg >= PT_FPR0) {
+-			flush_fp_to_thread(child);
+-			tmp = ((unsigned long int *)child->thread.fpr)[numReg - PT_FPR0];
+-		} else { /* register within PT_REGS struct */
+-/*			tmp = ptrace_get_reg(child, numReg);*/
+-		} 
+-		reg32bits = ((u32*)&tmp)[part];
+-		ret = put_user(reg32bits, (u32 __user *)data);
+-		break;
+-	}
+-
+-	/* If I and D space are separate, this will have to be fixed. */
+-	case PTRACE_POKETEXT: /* write the word at location addr. */
+-	case PTRACE_POKEDATA: {
+-		unsigned int tmp;
+-		tmp = data;
+-		ret = 0;
+-		if (access_process_vm(child, addr, &tmp, sizeof(tmp), 1)
+-				== sizeof(tmp))
+-			break;
+-		ret = -EIO;
+-		break;
+-	}
+-
+-	/*
+-	 * Write 4 bytes into the other process' storage
+-	 *  data is the 4 bytes that the user wants written
+-	 *  addr is a pointer in the user's storage that contains an
+-	 *	8 byte address in the other process where the 4 bytes
+-	 *	that is to be written
+-	 * (this is run in a 32-bit process looking at a 64-bit process)
+-	 * when I and D space are separate, these will need to be fixed.
+-	 */
+-	case PPC_PTRACE_POKETEXT_3264:
+-	case PPC_PTRACE_POKEDATA_3264: {
+-		u32 tmp = data;
+-		u32 __user * addrOthers;
+-
+-		/* Get the addr in the other process that we want to write into */
+-		ret = -EIO;
+-		if (get_user(addrOthers, (u32 __user * __user *)addr) != 0)
+-			break;
+-		ret = 0;
+-		if (access_process_vm(child, (u64)addrOthers, &tmp,
+-					sizeof(tmp), 1) == sizeof(tmp))
+-			break;
+-		ret = -EIO;
+-		break;
+-	}
+-
+-	/* write the word at location addr in the USER area */
+-	case PTRACE_POKEUSR: {
+-		unsigned long index;
+-
+-		ret = -EIO;
+-		/* convert to index and check */
+-		index = (unsigned long) addr >> 2;
+-		if ((addr & 3) || (index > PT_FPSCR32))
+-			break;
+-
+-		if (index < PT_FPR0) {
+-/*			ret = ptrace_put_reg(child, index, data);*/
+-		} else {
+-			flush_fp_to_thread(child);
+-			/*
+-			 * the user space code considers the floating point
+-			 * to be an array of unsigned int (32 bits) - the
+-			 * index passed in is based on this assumption.
+-			 */
+-			((unsigned int *)child->thread.fpr)[index - PT_FPR0] = data;
+-			ret = 0;
+-		}
+-		break;
+-	}
+-
+-	/*
+-	 * Write 4 bytes into the other process' pt_regs area
+-	 *  data is the 4 bytes that the user wants written
+-	 *  addr is the offset into the other process' pt_regs structure
+-	 *	that is to be written into
+-	 * (this is run in a 32-bit process looking at a 64-bit process)
+-	 */
+-	case PPC_PTRACE_POKEUSR_3264: {
+-		u32 index;
+-		u32 numReg;
+-
+-		ret = -EIO;
+-		/* Determine which register the user wants */
+-		index = (u64)addr >> 2;
+-		numReg = index / 2;
+-
+-		/*
+-		 * Validate the input - check to see if address is on the
+-		 * wrong boundary or beyond the end of the user area
+-		 */
+-		if ((addr & 3) || (numReg > PT_FPSCR))
+-			break;
+-		if (numReg < PT_FPR0) {
+-			unsigned long freg = 0;/*ptrace_get_reg(child, numReg);*/
+-			if (index % 2)
+-				freg = (freg & ~0xfffffffful) | (data & 0xfffffffful);
+-			else
+-				freg = (freg & 0xfffffffful) | (data << 32);
+-/*			ret = ptrace_put_reg(child, numReg, freg);*/
+-		} else {
+-			flush_fp_to_thread(child);
+-			((unsigned int *)child->thread.regs)[index] = data;
+-			ret = 0;
+-		}
+-		break;
+-	}
+-
+-	case PTRACE_GET_DEBUGREG: {
+-		ret = -EINVAL;
+-		/* We only support one DABR and no IABRS at the moment */
+-		if (addr > 0)
+-			break;
+-		ret = put_user(child->thread.dabr, (u32 __user *)data);
+-		break;
+-	}
+-
+-#if 0				/* XXX */
+-	case PTRACE_GETEVENTMSG:
+-		ret = put_user(child->ptrace_message, (unsigned int __user *) data);
+-		break;
+-#endif
+-
+-	case PTRACE_GETREGS: { /* Get all pt_regs from the child. */
+-		int ui;
+-	  	if (!access_ok(VERIFY_WRITE, (void __user *)data,
+-			       PT_REGS_COUNT * sizeof(int))) {
+-			ret = -EIO;
+-			break;
+-		}
+-		ret = 0;
+-		for (ui = 0; ui < PT_REGS_COUNT; ui ++) {
+-/*			ret |= __put_user(ptrace_get_reg(child, ui),
+-					  (unsigned int __user *) data);*/
+-			data += sizeof(int);
+-		}
+-		break;
+-	}
+-
+-	case PTRACE_SETREGS: { /* Set all gp regs in the child. */
+-		unsigned long tmp;
+-		int ui;
+-	  	if (!access_ok(VERIFY_READ, (void __user *)data,
+-			       PT_REGS_COUNT * sizeof(int))) {
+-			ret = -EIO;
+-			break;
+-		}
+-		ret = 0;
+-		for (ui = 0; ui < PT_REGS_COUNT; ui ++) {
+-			ret = __get_user(tmp, (unsigned int __user *) data);
+-			if (ret)
+-				break;
+-/*			ptrace_put_reg(child, ui, tmp);*/
+-			data += sizeof(int);
+-		}
+-		break;
+-	}
+-
+-	case PTRACE_GETFPREGS:
+-	case PTRACE_SETFPREGS:
+-	case PTRACE_GETVRREGS:
+-	case PTRACE_SETVRREGS:
+-	case PTRACE_GETREGS64:
+-	case PTRACE_SETREGS64:
+-	case PPC_PTRACE_GETFPREGS:
+-	case PPC_PTRACE_SETFPREGS:
+-	case PTRACE_KILL:
+-	case PTRACE_SINGLESTEP:
+-	case PTRACE_DETACH:
+-	case PTRACE_SET_DEBUGREG:
+-	case PTRACE_SYSCALL:
+-	case PTRACE_CONT:
+-		ret = arch_ptrace(child, request, addr, data);
+-		break;
+-
+-	/* Old reverse args ptrace callss */
+-	case PPC_PTRACE_GETREGS: /* Get GPRs 0 - 31. */
+-	case PPC_PTRACE_SETREGS: /* Set GPRs 0 - 31. */
+-		ret = compat_ptrace_old(child, request, addr, data);
+-		break;
+-
+-	default:
+-		ret = ptrace_request(child, request, addr, data);
+-		break;
+-	}
+-out_tsk:
+-	put_task_struct(child);
+-out:
+-	unlock_kernel();
+-	return ret;
+-}
+--- linux-2.6/arch/powerpc/lib/sstep.c
++++ linux-2.6/arch/powerpc/lib/sstep.c
 @@ -13,6 +13,9 @@
  #include <linux/ptrace.h>
  #include <asm/sstep.h>
@@ -620,19 +1274,17 @@
  
  extern char system_call_common[];
  
-Index: b/kernel/fork.c
-===================================================================
---- a/kernel/fork.c
-+++ b/kernel/fork.c
+--- linux-2.6/kernel/fork.c
++++ linux-2.6/kernel/fork.c
 @@ -49,6 +49,7 @@
  #include <linux/delayacct.h>
  #include <linux/taskstats_kern.h>
  #include <linux/random.h>
 +#include <linux/ptrace.h>
+ #include <linux/tty.h>
  
  #include <asm/pgtable.h>
- #include <asm/pgalloc.h>
-@@ -1033,6 +1034,7 @@ static struct task_struct *copy_process(
+@@ -1038,6 +1039,7 @@ static struct task_struct *copy_process(
  	INIT_LIST_HEAD(&p->sibling);
  	p->vfork_done = NULL;
  	spin_lock_init(&p->alloc_lock);
@@ -640,19 +1292,17 @@
  
  	clear_tsk_thread_flag(p, TIF_SIGPENDING);
  	init_sigpending(&p->pending);
-Index: b/kernel/exit.c
-===================================================================
---- a/kernel/exit.c
-+++ b/kernel/exit.c
+--- linux-2.6/kernel/exit.c
++++ linux-2.6/kernel/exit.c
 @@ -23,6 +23,7 @@
  #include <linux/nsproxy.h>
  #include <linux/tracehook.h>
  #include <linux/pid_namespace.h>
 +#include <linux/ptrace.h>
  #include <linux/profile.h>
- #include <linux/signalfd.h>
  #include <linux/mount.h>
-@@ -858,6 +859,8 @@ fastcall NORET_TYPE void do_exit(long co
+ #include <linux/proc_fs.h>
+@@ -883,6 +884,8 @@ fastcall NORET_TYPE void do_exit(long co
  	tsk->flags |= PF_EXITING;
  	spin_unlock_irq(&tsk->pi_lock);
  
@@ -661,7 +1311,7 @@
  	if (unlikely(in_atomic()))
  		printk(KERN_INFO "note: %s[%d] exited with preempt_count %d\n",
  				current->comm, current->pid,
-@@ -1482,9 +1485,15 @@ check_continued:
+@@ -1510,9 +1513,15 @@ check_continued:
  				break;
  			}
  		}
@@ -679,11 +1329,9 @@
  		if (options & __WNOTHREAD)
  			break;
  		tsk = next_thread(tsk);
-Index: b/kernel/ptrace.c
-===================================================================
---- a/kernel/ptrace.c
-+++ b/kernel/ptrace.c
-@@ -19,194 +19,2009 @@
+--- linux-2.6/kernel/ptrace.c
++++ linux-2.6/kernel/ptrace.c
+@@ -19,213 +19,2009 @@
  #include <linux/security.h>
  #include <linux/signal.h>
  #include <linux/syscalls.h>
@@ -792,7 +1440,7 @@
 -		return -EPERM;
 -	smp_rmb();
 -	if (task->mm)
--		dumpable = task->mm->dumpable;
+-		dumpable = get_dumpable(task->mm);
 -	if (!dumpable && !capable(CAP_SYS_PTRACE))
 -		return -EPERM;
 -
@@ -1045,9 +1693,8 @@
 -	retval = may_attach(task);
 -	if (retval)
 +	if (!task->mm)		/* kernel threads */
- 		goto bad;
- 
--	retval = -ENOSYS;
++		goto bad;
++
 +	pr_debug("%d ptrace_attach %d state %lu exit_code %x\n",
 +		 current->pid, task->pid, task->state, task->exit_code);
 +
@@ -1059,9 +1706,10 @@
 +		retval = PTR_ERR(engine);
 +		if (retval == -EEXIST)
 +			retval = -EPERM;
-+		goto bad;
+ 		goto bad;
 +	}
-+
+ 
+-	retval = -ENOSYS;
 +	pr_debug("%d ptrace_attach %d after utrace_attach: %lu exit_code %x\n",
 +		 current->pid, task->pid, task->state, task->exit_code);
 +
@@ -1129,8 +1777,7 @@
 +static int ptrace_detach(struct task_struct *task,
 +			 struct utrace_attached_engine *engine,
 +			 struct ptrace_state *state)
- {
--	if (!valid_signal(data))
++{
 +
 +	int error;
 +
@@ -1281,9 +1928,8 @@
 +		return 0;
 +
 +	if (!valid_signal(signr))
- 		return -EIO;
- 
--	return -ENOSYS;
++		return -EIO;
++
 +	if (state->syscall) {
 +		/*
 +		 * This is the traditional ptrace behavior when given
@@ -1311,9 +1957,8 @@
 +	}
 +
 +	return 0;
- }
- 
--int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len)
++}
++
 +int
 +ptrace_regset_access(struct task_struct *target,
 +		     struct utrace_attached_engine *engine,
@@ -1321,22 +1966,15 @@
 +		     int setno, unsigned long offset, unsigned int size,
 +		     void __user *data, int write)
  {
--	int copied = 0;
+-	if (!valid_signal(data))
 +	const struct utrace_regset *regset = utrace_regset(target, engine,
 +							   view, setno);
 +	int ret;
- 
--	while (len > 0) {
--		char buf[128];
--		int this_len, retval;
++
 +	if (unlikely(regset == NULL))
-+		return -EIO;
+ 		return -EIO;
  
--		this_len = (len > sizeof(buf)) ? sizeof(buf) : len;
--		retval = access_process_vm(tsk, src, buf, this_len, 0);
--		if (!retval) {
--			if (copied)
--				break;
+-	return -ENOSYS;
 +	if (size == (unsigned int) -1)
 +		size = regset->size * regset->n;
 +
@@ -1356,23 +1994,33 @@
 +	}
 +
 +	return ret;
-+}
-+
+ }
+ 
+-int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len)
 +int
 +ptrace_onereg_access(struct task_struct *target,
 +		     struct utrace_attached_engine *engine,
 +		     const struct utrace_regset_view *view,
 +		     int setno, unsigned long regno,
 +		     void __user *data, int write)
-+{
+ {
+-	int copied = 0;
 +	const struct utrace_regset *regset = utrace_regset(target, engine,
 +							   view, setno);
 +	unsigned int pos;
 +	int ret;
-+
+ 
+-	while (len > 0) {
+-		char buf[128];
+-		int this_len, retval;
 +	if (unlikely(regset == NULL))
 +		return -EIO;
-+
+ 
+-		this_len = (len > sizeof(buf)) ? sizeof(buf) : len;
+-		retval = access_process_vm(tsk, src, buf, this_len, 0);
+-		if (!retval) {
+-			if (copied)
+-				break;
 +	if (regno < regset->bias || regno >= regset->bias + regset->n)
 +		return -EINVAL;
 +
@@ -1536,13 +2184,7 @@
 +			if (child->state == TASK_STOPPED)
 +				ret = 0;
 +			unlock_task_sighand(child, &flags);
- 		}
--		if (copy_to_user(dst, buf, retval))
--			return -EFAULT;
--		copied += retval;
--		src += retval;
--		dst += retval;
--		len -= retval;			
++		}
 +		if (ret == 0) {
 +			ret = ptrace_update(child, state,
 +					    UTRACE_ACTION_QUIESCE, 0);
@@ -1550,7 +2192,13 @@
 +				ret = -ESRCH;
 +			if (unlikely(ret))
 +				BUG_ON(ret != -ESRCH);
-+		}
+ 		}
+-		if (copy_to_user(dst, buf, retval))
+-			return -EFAULT;
+-		copied += retval;
+-		src += retval;
+-		dst += retval;
+-		len -= retval;			
 +
 +		if (ret) {
 +			pr_debug("%d not stopped (%lu)\n",
@@ -1909,13 +2557,13 @@
 +	return ret;
  }
 +#endif
-+
  
 -/**
 - * ptrace_traceme  --  helper for PTRACE_TRACEME
 - *
 - * Performs checks and sets PT_PTRACED.
 - * Should be used by all ptrace implementations for PTRACE_TRACEME.
++
 +/*
 + * Detach the zombie being reported for wait.
   */
@@ -2358,18 +3006,25 @@
 +
 +	return UTRACE_ACTION_RESUME;
  }
-+
+ 
+-int generic_ptrace_peekdata(struct task_struct *tsk, long addr, long data)
 +static inline u32
 +ptrace_event(struct utrace_attached_engine *engine,
 +	     struct task_struct *tsk,
 +	     struct ptrace_state *state,
 +	     int event)
 +	__releases(RCU)
-+{
+ {
+-	unsigned long tmp;
+-	int copied;
 +	state->syscall = 0;
 +	return ptrace_report(engine, tsk, state, (event << 8) | SIGTRAP);
 +}
-+
+ 
+-	copied = access_process_vm(tsk, addr, &tmp, sizeof(tmp), 0);
+-	if (copied != sizeof(tmp))
+-		return -EIO;
+-	return put_user(tmp, (unsigned long __user *)data);
 +/*
 + * Unlike other report callbacks, this can't be called while ptrace_exit
 + * is doing ptrace_done in parallel, so we don't need get_ptrace_state.
@@ -2525,13 +3180,15 @@
 +	NO_LOCKS;
 +	printk(KERN_ERR "ptrace out of memory, lost child %d of %d",
 +	       child->pid, parent->pid);
-+}
-+
+ }
+ 
+-int generic_ptrace_pokedata(struct task_struct *tsk, long addr, long data)
 +static u32
 +ptrace_report_clone(struct utrace_attached_engine *engine,
 +		    struct task_struct *parent,
 +		    unsigned long clone_flags, struct task_struct *child)
-+{
+ {
+-	int copied;
 +	int event, option;
 +	struct ptrace_state *state;
 +
@@ -2562,7 +3219,9 @@
 +	}
 +	else
 +		event = 0;
-+
+ 
+-	copied = access_process_vm(tsk, addr, &data, sizeof(data), 1);
+-	return (copied == sizeof(data)) ? 0 : -EIO;
 +	if (!(clone_flags & CLONE_UNTRACED)
 +	    && (event || (clone_flags & CLONE_PTRACE))) {
 +		/*
@@ -2622,7 +3281,7 @@
 +	state->have_eventmsg = 0;
 +	state->u.siginfo = info;
 +	return ptrace_report(engine, tsk, state, signo) | UTRACE_SIGNAL_IGN;
-+}
+ }
 +
 +static u32
 +ptrace_report_jctl(struct utrace_attached_engine *engine,
@@ -2812,11 +3471,9 @@
 +	.tracer_task = ptrace_tracer_task,
 +	.allow_access_process_vm = ptrace_allow_access_process_vm,
 +};
-Index: b/kernel/sys_ni.c
-===================================================================
---- a/kernel/sys_ni.c
-+++ b/kernel/sys_ni.c
-@@ -113,6 +113,10 @@ cond_syscall(sys_vm86);
+--- linux-2.6/kernel/sys_ni.c
++++ linux-2.6/kernel/sys_ni.c
+@@ -114,6 +114,10 @@ cond_syscall(sys_vm86);
  cond_syscall(compat_sys_ipc);
  cond_syscall(compat_sys_sysctl);
  
@@ -2827,20 +3484,18 @@
  /* arch-specific weak syscall entries */
  cond_syscall(sys_pciconfig_read);
  cond_syscall(sys_pciconfig_write);
-Index: b/kernel/Makefile
-===================================================================
---- a/kernel/Makefile
-+++ b/kernel/Makefile
+--- linux-2.6/kernel/Makefile
++++ linux-2.6/kernel/Makefile
 @@ -4,7 +4,7 @@
  
  obj-y     = sched.o fork.o exec_domain.o panic.o printk.o profile.o \
  	    exit.o itimer.o time.o softirq.o resource.o \
--	    sysctl.o capability.o ptrace.o timer.o user.o \
-+	    sysctl.o capability.o timer.o user.o \
+-	    sysctl.o capability.o ptrace.o timer.o user.o user_namespace.o \
++	    sysctl.o capability.o timer.o user.o user_namespace.o \
  	    signal.o sys.o kmod.o workqueue.o pid.o \
  	    rcupdate.o extable.o params.o posix-timers.o \
  	    kthread.o wait.o kfifo.o sys_ni.o posix-cpu-timers.o mutex.o \
-@@ -52,6 +52,7 @@ obj-$(CONFIG_UTS_NS) += utsname.o
+@@ -52,6 +52,7 @@ obj-$(CONFIG_SYSCTL) += utsname_sysctl.o
  obj-$(CONFIG_TASK_DELAY_ACCT) += delayacct.o
  obj-$(CONFIG_TASKSTATS) += taskstats.o tsacct.o
  obj-$(CONFIG_UTRACE) += utrace.o
@@ -2848,11 +3503,9 @@
  
  ifneq ($(CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER),y)
  # According to Alan Modra <alan at linuxcare.com.au>, the -fno-omit-frame-pointer is
-Index: b/include/linux/sched.h
-===================================================================
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -1060,6 +1060,10 @@ struct task_struct {
+--- linux-2.6/include/linux/sched.h
++++ linux-2.6/include/linux/sched.h
+@@ -1179,6 +1179,10 @@ struct task_struct {
  	atomic_t fs_excl;	/* holding fs exclusive resources */
  	struct rcu_head rcu;
  
@@ -2863,11 +3516,9 @@
  	/*
  	 * cache last used pipe for splice
  	 */
-Index: b/include/linux/ptrace.h
-===================================================================
---- a/include/linux/ptrace.h
-+++ b/include/linux/ptrace.h
-@@ -49,50 +49,197 @@
+--- linux-2.6/include/linux/ptrace.h
++++ linux-2.6/include/linux/ptrace.h
+@@ -49,49 +49,196 @@
  #include <asm/ptrace.h>
  
  #ifdef __KERNEL__
@@ -2918,7 +3569,7 @@
 -extern int ptrace_request(struct task_struct *child, long request, long addr, long data);
  extern int ptrace_may_attach(struct task_struct *task);
  
- 
++
 +#ifdef CONFIG_PTRACE
 +#include <asm/tracehook.h>
 +#include <linux/tracehook.h>
@@ -3098,14 +3749,11 @@
 +}
 +#endif	/* CONFIG_PTRACE */
 +
-+
- #ifndef force_successful_syscall_return
- /*
-  * System call handlers that, upon successful completion, need to return a
-Index: b/include/asm-x86_64/tracehook.h
-===================================================================
---- a/include/asm-x86_64/tracehook.h
-+++ b/include/asm-x86_64/tracehook.h
+ int generic_ptrace_peekdata(struct task_struct *tsk, long addr, long data);
+ int generic_ptrace_pokedata(struct task_struct *tsk, long addr, long data);
+ 
+--- linux-2.6/include/asm-x86_64/tracehook.h
++++ linux-2.6/include/asm-x86_64/tracehook.h
 @@ -15,6 +15,7 @@
  
  #include <linux/sched.h>
@@ -3114,10 +3762,8 @@
  
  /*
   * See linux/tracehook.h for the descriptions of what these need to do.
-Index: b/include/asm-x86_64/ptrace-abi.h
-===================================================================
---- a/include/asm-x86_64/ptrace-abi.h
-+++ b/include/asm-x86_64/ptrace-abi.h
+--- linux-2.6/include/asm-x86_64/ptrace-abi.h
++++ linux-2.6/include/asm-x86_64/ptrace-abi.h
 @@ -48,4 +48,7 @@
  
  #define PTRACE_ARCH_PRCTL	  30	/* arch_prctl for child */
@@ -3126,11 +3772,9 @@
 +#define PTRACE_SYSEMU_SINGLESTEP  32
 +
  #endif
-Index: b/init/Kconfig
-===================================================================
---- a/init/Kconfig
-+++ b/init/Kconfig
-@@ -692,10 +692,21 @@ endmenu
+--- linux-2.6/init/Kconfig
++++ linux-2.6/init/Kconfig
+@@ -673,10 +673,21 @@ endmenu
  
  menu "Process debugging support"
  

linux-2.6-utrace-regset-avr32.patch:

Index: linux-2.6-utrace-regset-avr32.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-utrace-regset-avr32.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-utrace-regset-avr32.patch	20 Jul 2007 18:48:03 -0000	1.1
+++ linux-2.6-utrace-regset-avr32.patch	10 Oct 2007 21:22:57 -0000	1.2
@@ -10,12 +10,12 @@
 
 ---
 
- arch/avr32/kernel/ptrace.c |  108 ++++++++++++++++++--------------------------
- 1 files changed, 43 insertions(+), 65 deletions(-)
+ arch/avr32/kernel/ptrace.c |  109 ++++++++++++++++++--------------------------
+ 1 files changed, 44 insertions(+), 65 deletions(-)
 
 --- linux-2.6/arch/avr32/kernel/ptrace.c
 +++ linux-2.6/arch/avr32/kernel/ptrace.c
-@@ -14,94 +14,72 @@
+@@ -14,94 +14,73 @@
  #include <linux/ptrace.h>
  #include <linux/errno.h>
  #include <linux/user.h>
@@ -104,6 +104,7 @@
 -	struct pt_regs *regs = get_user_regs(tsk);
 +static const struct utrace_regset native_regsets[] = {
 +	{
++		.core_note_type = NT_PRSTATUS,
 +		.n	= ELF_NGREG,
 +		.size	= sizeof(long),
 +		.align	= sizeof(long),
@@ -152,4 +153,4 @@
 +#if 0
  long arch_ptrace(struct task_struct *child, long request, long addr, long data)
  {
- 	unsigned long tmp;
+ 	int ret;

linux-2.6-utrace-regset-ia64.patch:

Index: linux-2.6-utrace-regset-ia64.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-utrace-regset-ia64.patch,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- linux-2.6-utrace-regset-ia64.patch	10 Aug 2007 17:27:08 -0000	1.4
+++ linux-2.6-utrace-regset-ia64.patch	10 Oct 2007 21:22:57 -0000	1.5
@@ -9,17 +9,15 @@
 
 ---
 
- arch/ia64/ia32/sys_ia32.c    |  472 +++++++++++++++++++++++
- arch/ia64/kernel/ptrace.c    |  856 +++++++++++++++++++++++++++++++++++++++++++
- include/asm-ia64/elf.h       |   24 +
+ arch/ia64/ia32/sys_ia32.c    |  476 +++++++++++++++++++++++++
+ arch/ia64/kernel/ptrace.c    |  810 ++++++++++++++++++++++++++++++++++++++++++
  include/asm-ia64/tracehook.h |    7 
- 4 files changed, 1357 insertions(+), 2 deletions(-)
+ include/asm-ia64/elf.h       |   24 +
+ 4 files changed, 1315 insertions(+), 2 deletions(-)
 
-Index: b/arch/ia64/ia32/sys_ia32.c
-===================================================================
---- a/arch/ia64/ia32/sys_ia32.c
-+++ b/arch/ia64/ia32/sys_ia32.c
-@@ -44,6 +44,7 @@
+--- linux-2.6/arch/ia64/ia32/sys_ia32.c
++++ linux-2.6/arch/ia64/ia32/sys_ia32.c
+@@ -43,6 +43,7 @@
  #include <linux/eventpoll.h>
  #include <linux/personality.h>
  #include <linux/ptrace.h>
@@ -27,7 +25,15 @@
  #include <linux/stat.h>
  #include <linux/ipc.h>
  #include <linux/capability.h>
-@@ -1868,6 +1869,477 @@ sys32_ptrace (int request, pid_t pid, un
+@@ -50,6 +51,7 @@
+ #include <linux/vfs.h>
+ #include <linux/mman.h>
+ #include <linux/mutex.h>
++#include <linux/elf.h>
+ 
+ #include <asm/intrinsics.h>
+ #include <asm/types.h>
+@@ -1868,6 +1870,480 @@ sys32_ptrace (int request, pid_t pid, un
  }
  #endif
  
@@ -480,16 +486,19 @@
 + */
 +static const struct utrace_regset ia32_regsets[] = {
 +	{
++		.core_note_type = NT_PRSTATUS,
 +		.n = sizeof(struct user_regs_struct32)/4,
 +		.size = 4, .align = 4,
 +		.get = ia32_genregs_get, .set = ia32_genregs_set
 +	},
 +	{
++		.core_note_type = NT_PRFPREG,
 +		.n = sizeof(struct ia32_user_i387_struct) / 4,
 +		.size = 4, .align = 4,
 +		.get = ia32_fpregs_get, .set = ia32_fpregs_set
 +	},
 +	{
++		.core_note_type = NT_PRXFPREG,
 +		.n = sizeof(struct ia32_user_fxsr_struct) / 4,
 +		.size = 4, .align = 4,
 +		.get = ia32_fpxregs_get, .set = ia32_fpxregs_set
@@ -505,10 +514,8 @@
  typedef struct {
  	unsigned int	ss_sp;
  	unsigned int	ss_flags;
-Index: b/arch/ia64/kernel/ptrace.c
-===================================================================
---- a/arch/ia64/kernel/ptrace.c
-+++ b/arch/ia64/kernel/ptrace.c
+--- linux-2.6/arch/ia64/kernel/ptrace.c
++++ linux-2.6/arch/ia64/kernel/ptrace.c
 @@ -3,6 +3,9 @@
   *
   * Copyright (C) 1999-2005 Hewlett-Packard Co
@@ -519,50 +526,18 @@
   *
   * Derived from the x86 and Alpha versions.
   */
-@@ -18,13 +21,16 @@
+@@ -18,7 +21,10 @@
  #include <linux/security.h>
  #include <linux/audit.h>
  #include <linux/signal.h>
 +#include <linux/module.h>
++#include <linux/elf.h>
  
 +#include <asm/tracehook.h>
  #include <asm/pgtable.h>
  #include <asm/processor.h>
  #include <asm/ptrace_offsets.h>
- #include <asm/rse.h>
- #include <asm/system.h>
- #include <asm/uaccess.h>
-+#include <asm/elf.h>
- #include <asm/unwind.h>
- #ifdef CONFIG_PERFMON
- #include <asm/perfmon.h>
-@@ -522,6 +528,25 @@ ia64_get_user_rbs_end (struct task_struc
- 	return (unsigned long) ia64_rse_skip_regs(bspstore, ndirty);
- }
- 
-+long
-+ia64_sync_kernel_rbs (struct task_struct *child, struct switch_stack *sw,
-+                    unsigned long user_rbs_start, unsigned long user_rbs_end)
-+{
-+        unsigned long addr, val;
-+        long ret;
-+
-+        /* now copy word for word from user rbs to kernel rbs: */
-+        for (addr = user_rbs_start; addr < user_rbs_end; addr += 8) {
-+                if (access_process_vm(child, addr, &val, sizeof(val), 0)
-+                    != sizeof(val))
-+                        return -EIO;
-+                ret = ia64_poke(child, sw, user_rbs_end, addr, val);
-+                if (ret < 0)
-+                        return ret;
-+        }
-+        return 0;
-+}
-+
- /*
-  * Synchronize (i.e, write) the RSE backing store living in kernel
-  * space to the VM of the CHILD task.  SW and PT are the pointers to
-@@ -548,6 +573,7 @@ ia64_sync_user_rbs (struct task_struct *
+@@ -548,6 +554,7 @@ ia64_sync_user_rbs (struct task_struct *
  	return 0;
  }
  
@@ -570,7 +545,7 @@
  static inline int
  thread_matches (struct task_struct *thread, unsigned long addr)
  {
-@@ -620,6 +646,7 @@ find_thread_for_addr (struct task_struct
+@@ -620,6 +627,7 @@ find_thread_for_addr (struct task_struct
  	mmput(mm);
  	return child;
  }
@@ -578,7 +553,7 @@
  
  /*
   * Write f32-f127 back to task->thread.fph if it has been modified.
-@@ -664,6 +691,7 @@ ia64_sync_fph (struct task_struct *task)
+@@ -664,6 +672,7 @@ ia64_sync_fph (struct task_struct *task)
  	psr->dfh = 1;
  }
  
@@ -586,7 +561,7 @@
  static int
  access_fr (struct unw_frame_info *info, int regnum, int hi,
  	   unsigned long *data, int write_access)
-@@ -682,6 +710,7 @@ access_fr (struct unw_frame_info *info, 
+@@ -682,6 +691,7 @@ access_fr (struct unw_frame_info *info, 
  		*data = fpval.u.bits[hi];
  	return ret;
  }
@@ -594,7 +569,7 @@
  
  /*
   * Change the machine-state of CHILD such that it will return via the normal
-@@ -782,6 +811,7 @@ access_nat_bits (struct task_struct *chi
+@@ -782,6 +792,7 @@ access_nat_bits (struct task_struct *chi
  	return 0;
  }
  
@@ -602,7 +577,7 @@
  static int
  access_uarea (struct task_struct *child, unsigned long addr,
  	      unsigned long *data, int write_access)
-@@ -1248,7 +1278,9 @@ ptrace_getregs (struct task_struct *chil
+@@ -1252,7 +1263,9 @@ ptrace_getregs (struct task_struct *chil
  	ret = retval ? -EIO : 0;
  	return ret;
  }
@@ -612,7 +587,7 @@
  static long
  ptrace_setregs (struct task_struct *child, struct pt_all_user_regs __user *ppr)
  {
-@@ -1394,6 +1426,7 @@ ptrace_setregs (struct task_struct *chil
+@@ -1398,6 +1411,7 @@ ptrace_setregs (struct task_struct *chil
  	ret = retval ? -EIO : 0;
  	return ret;
  }
@@ -620,7 +595,7 @@
  
  /*
   * Called by kernel/ptrace.c when detaching..
-@@ -1411,6 +1444,7 @@ ptrace_disable (struct task_struct *chil
+@@ -1415,6 +1429,7 @@ ptrace_disable (struct task_struct *chil
  	child_psr->tb = 0;
  }
  
@@ -628,7 +603,7 @@
  asmlinkage long
  sys_ptrace (long request, pid_t pid, unsigned long addr, unsigned long data)
  {
-@@ -1598,6 +1632,7 @@ sys_ptrace (long request, pid_t pid, uns
+@@ -1601,6 +1616,7 @@ sys_ptrace (long request, pid_t pid, uns
  	unlock_kernel();
  	return ret;
  }
@@ -636,27 +611,7 @@
  
  /* "asmlinkage" so the input arguments are preserved... */
  
-@@ -1609,6 +1644,10 @@ syscall_trace_enter (long arg0, long arg
- 	if (test_thread_flag(TIF_SYSCALL_TRACE))
- 		tracehook_report_syscall(&regs, 0);
- 
-+	/* copy user rbs to kernel rbs */
-+        if (test_thread_flag(TIF_RESTORE_RSE))
-+                ia64_sync_krbs(current);
-+
- 	if (unlikely(current->audit_context)) {
- 		long syscall;
- 		int arch;
-@@ -1645,8 +1684,825 @@ syscall_trace_leave (long arg0, long arg
- 	if (test_thread_flag(TIF_SYSCALL_TRACE))
- 		tracehook_report_syscall(&regs, 1);
- 
-+	/* copy user rbs to kernel rbs */
-+        if (test_thread_flag(TIF_RESTORE_RSE))
-+                ia64_sync_krbs(current);
-+
- 	if (test_thread_flag(TIF_SINGLESTEP)) {
- 		force_sig(SIGTRAP, current); /* XXX */
+@@ -1653,3 +1669,797 @@ syscall_trace_leave (long arg0, long arg
  		tracehook_report_syscall_step(&regs);
  	}
  }
@@ -696,35 +651,35 @@
 +
 +	pt = task_pt_regs(target);
 +	switch (addr) {
-+		case ELF_GR_OFFSET(1):
-+			ptr = &pt->r1;
-+			break;
-+		case ELF_GR_OFFSET(2):
-+		case ELF_GR_OFFSET(3):
-+			ptr = (void *)&pt->r2 + (addr - ELF_GR_OFFSET(2));
-+			break;
-+		case ELF_GR_OFFSET(4) ... ELF_GR_OFFSET(7):
-+			if (write_access) {
-+				/* read NaT bit first: */
-+				unsigned long dummy;
-+
-+				ret = unw_get_gr(info, addr/8, &dummy, &nat);
-+				if (ret < 0)
-+					return ret;
-+			}
-+			return unw_access_gr(info, addr/8, data, &nat, write_access);
-+		case ELF_GR_OFFSET(8) ... ELF_GR_OFFSET(11):
-+			ptr = (void *)&pt->r8 + addr - ELF_GR_OFFSET(8);
-+			break;
-+		case ELF_GR_OFFSET(12):
-+		case ELF_GR_OFFSET(13):
-+			ptr = (void *)&pt->r12 + addr - ELF_GR_OFFSET(12);
-+			break;
-+		case ELF_GR_OFFSET(14):
-+			ptr = &pt->r14;
-+			break;
-+		case ELF_GR_OFFSET(15):
-+			ptr = &pt->r15;
++	case ELF_GR_OFFSET(1):
++		ptr = &pt->r1;
++		break;
++	case ELF_GR_OFFSET(2):
++	case ELF_GR_OFFSET(3):
++		ptr = (void *)&pt->r2 + (addr - ELF_GR_OFFSET(2));
++		break;
++	case ELF_GR_OFFSET(4) ... ELF_GR_OFFSET(7):
++		if (write_access) {
++			/* read NaT bit first: */
++			unsigned long dummy;
++
++			ret = unw_get_gr(info, addr/8, &dummy, &nat);
++			if (ret < 0)
++				return ret;
++		}
++		return unw_access_gr(info, addr/8, data, &nat, write_access);
++	case ELF_GR_OFFSET(8) ... ELF_GR_OFFSET(11):
++		ptr = (void *)&pt->r8 + addr - ELF_GR_OFFSET(8);
++		break;
++	case ELF_GR_OFFSET(12):
++	case ELF_GR_OFFSET(13):
++		ptr = (void *)&pt->r12 + addr - ELF_GR_OFFSET(12);
++		break;
++	case ELF_GR_OFFSET(14):
++		ptr = &pt->r14;
++		break;
++	case ELF_GR_OFFSET(15):
++		ptr = &pt->r15;
 +	}
 +	if (write_access)
 +		*ptr = *data;
@@ -742,17 +697,17 @@
 +
 +	pt = task_pt_regs(target);
 +	switch (addr) {
-+		case ELF_BR_OFFSET(0):
-+			ptr = &pt->b0;
-+			break;
-+		case ELF_BR_OFFSET(1) ... ELF_BR_OFFSET(5):
-+			return unw_access_br(info, (addr - ELF_BR_OFFSET(0))/8,
-+					data, write_access);
-+		case ELF_BR_OFFSET(6):
-+			ptr = &pt->b6;
-+			break;
-+		case ELF_BR_OFFSET(7):
-+			ptr = &pt->b7;
++	case ELF_BR_OFFSET(0):
++		ptr = &pt->b0;
++		break;
++	case ELF_BR_OFFSET(1) ... ELF_BR_OFFSET(5):
++		return unw_access_br(info, (addr - ELF_BR_OFFSET(0))/8,
++				     data, write_access);
++	case ELF_BR_OFFSET(6):
++		ptr = &pt->b6;
++		break;
++	case ELF_BR_OFFSET(7):
++		ptr = &pt->b7;
 +	}
 +	if (write_access)
 +		*ptr = *data;
@@ -772,137 +727,141 @@
 +	pt = task_pt_regs(target);
 +	if (addr >= ELF_AR_RSC_OFFSET && addr <= ELF_AR_SSD_OFFSET) {
 +		switch (addr) {
-+			case ELF_AR_RSC_OFFSET:
-+				/* force PL3 */
-+				if (write_access)
-+					pt->ar_rsc = *data | (3 << 2);
-+				else
-+					*data = pt->ar_rsc;
-+				return 0;
-+			case ELF_AR_BSP_OFFSET:
-+				/*
-+				 * By convention, we use PT_AR_BSP to refer to
-+				 * the end of the user-level backing store.
-+				 * Use ia64_rse_skip_regs(PT_AR_BSP, -CFM.sof)
-+				 * to get the real value of ar.bsp at the time
-+				 * the kernel was entered.
-+				 *
-+				 * Furthermore, when changing the contents of
-+				 * PT_AR_BSP (or PT_CFM) we MUST copy any
-+				 * users-level stacked registers that are
-+				 * stored on the kernel stack back to
-+				 * user-space because otherwise, we might end
-+				 * up clobbering kernel stacked registers.
-+				 * Also, if this happens while the task is
-+				 * blocked in a system call, which convert the
-+				 * state such that the non-system-call exit
-+				 * path is used.  This ensures that the proper
-+				 * state will be picked up when resuming
-+				 * execution.  However, it *also* means that
-+				 * once we write PT_AR_BSP/PT_CFM, it won't be
-+				 * possible to modify the syscall arguments of
-+				 * the pending system call any longer.  This
-+				 * shouldn't be an issue because modifying
-+				 * PT_AR_BSP/PT_CFM generally implies that
-+				 * we're either abandoning the pending system
-+				 * call or that we defer it's re-execution
-+				 * (e.g., due to GDB doing an inferior
-+				 * function call).
-+				 */
-+				urbs_end = ia64_get_user_rbs_end(target, pt, &cfm);
-+				if (write_access) {
-+					if (*data != urbs_end) {
-+						if (ia64_sync_user_rbs(target, info->sw,
-+									pt->ar_bspstore,
-+									urbs_end) < 0)
-+							return -1;
-+						if (in_syscall(pt))
-+							convert_to_non_syscall(target,
-+									pt,
-+									cfm);
-+						/*
-+						 * Simulate user-level write
-+						 * of ar.bsp:
-+						 */
-+						pt->loadrs = 0;
-+						pt->ar_bspstore = *data;
-+					}
-+				} else
-+					*data = urbs_end;
-+				return 0;
-+			case ELF_AR_BSPSTORE_OFFSET: // ar_bsp_store
-+				ptr = &pt->ar_bspstore;
-+				break;
-+			case ELF_AR_RNAT_OFFSET:  // ar_rnat
-+				urbs_end = ia64_get_user_rbs_end(target, pt, NULL);
-+				rnat_addr = (long) ia64_rse_rnat_addr((long *)
-+						urbs_end);
-+				if (write_access)
-+					return ia64_poke(target, info->sw, urbs_end,
-+							rnat_addr, *data);
-+				else
-+					return ia64_peek(target, info->sw, urbs_end,
-+							rnat_addr, data);
-+			case ELF_AR_CCV_OFFSET:   // ar_ccv
-+				ptr = &pt->ar_ccv;
-+				break;
-+			case ELF_AR_UNAT_OFFSET:	// ar_unat
-+				ptr = &pt->ar_unat;
-+				break;
-+			case ELF_AR_FPSR_OFFSET:  // ar_fpsr
-+				ptr = &pt->ar_fpsr;
-+				break;
-+			case ELF_AR_PFS_OFFSET:  // ar_pfs
-+				ptr = &pt->ar_pfs;
-+				break;
-+			case ELF_AR_LC_OFFSET:   // ar_lc
-+				return unw_access_ar(info, UNW_AR_LC, data,
-+						write_access);
-+			case ELF_AR_EC_OFFSET:    // ar_ec
-+				return unw_access_ar(info, UNW_AR_EC, data,
-+						write_access);
-+			case ELF_AR_CSD_OFFSET:   // ar_csd
-+				ptr = &pt->ar_csd;
-+				break;
-+			case ELF_AR_SSD_OFFSET:   // ar_ssd
-+				ptr = &pt->ar_ssd;
++		case ELF_AR_RSC_OFFSET:
++			/* force PL3 */
++			if (write_access)
++				pt->ar_rsc = *data | (3 << 2);
++			else
++				*data = pt->ar_rsc;
++			return 0;
++		case ELF_AR_BSP_OFFSET:
++			/*
++			 * By convention, we use PT_AR_BSP to refer to
++			 * the end of the user-level backing store.
++			 * Use ia64_rse_skip_regs(PT_AR_BSP, -CFM.sof)
++			 * to get the real value of ar.bsp at the time
++			 * the kernel was entered.
++			 *
++			 * Furthermore, when changing the contents of
++			 * PT_AR_BSP (or PT_CFM) we MUST copy any
++			 * users-level stacked registers that are
++			 * stored on the kernel stack back to
++			 * user-space because otherwise, we might end
++			 * up clobbering kernel stacked registers.
++			 * Also, if this happens while the task is
++			 * blocked in a system call, which convert the
++			 * state such that the non-system-call exit
++			 * path is used.  This ensures that the proper
++			 * state will be picked up when resuming
++			 * execution.  However, it *also* means that
++			 * once we write PT_AR_BSP/PT_CFM, it won't be
++			 * possible to modify the syscall arguments of
++			 * the pending system call any longer.  This
++			 * shouldn't be an issue because modifying
++			 * PT_AR_BSP/PT_CFM generally implies that
++			 * we're either abandoning the pending system
++			 * call or that we defer it's re-execution
++			 * (e.g., due to GDB doing an inferior
++			 * function call).
++			 */
++			urbs_end = ia64_get_user_rbs_end(target, pt, &cfm);
++			if (write_access) {
++				if (*data != urbs_end) {
++					if (ia64_sync_user_rbs(target, info->sw,
++							       pt->ar_bspstore,
++							       urbs_end) < 0)
++						return -1;
++					if (in_syscall(pt))
++						convert_to_non_syscall(target,
++								       pt,
++								       cfm);
++					/*
++					 * Simulate user-level write
++					 * of ar.bsp:
++					 */
++					pt->loadrs = 0;
++					pt->ar_bspstore = *data;
++				}
++			} else
++				*data = urbs_end;
++			return 0;
++		case ELF_AR_BSPSTORE_OFFSET: // ar_bsp_store
++			ptr = &pt->ar_bspstore;
++			break;
++		case ELF_AR_RNAT_OFFSET:  // ar_rnat
++			urbs_end = ia64_get_user_rbs_end(target, pt, NULL);
++			rnat_addr = (long) ia64_rse_rnat_addr((long *)
++							      urbs_end);
++			if (write_access)
++				return ia64_poke(target, info->sw, urbs_end,
++						 rnat_addr, *data);
++			else
++				return ia64_peek(target, info->sw, urbs_end,
++						 rnat_addr, data);
++		case ELF_AR_CCV_OFFSET:   // ar_ccv
++			ptr = &pt->ar_ccv;
++			break;
++		case ELF_AR_UNAT_OFFSET:	// ar_unat
++			ptr = &pt->ar_unat;
++			break;
++		case ELF_AR_FPSR_OFFSET:  // ar_fpsr
++			ptr = &pt->ar_fpsr;
++			break;
++		case ELF_AR_PFS_OFFSET:  // ar_pfs
++			ptr = &pt->ar_pfs;
++			break;
++		case ELF_AR_LC_OFFSET:   // ar_lc
++			return unw_access_ar(info, UNW_AR_LC, data,
++					     write_access);
++		case ELF_AR_EC_OFFSET:    // ar_ec
++			return unw_access_ar(info, UNW_AR_EC, data,
++					     write_access);
++		case ELF_AR_CSD_OFFSET:   // ar_csd
++			ptr = &pt->ar_csd;
++			break;
++		case ELF_AR_SSD_OFFSET:   // ar_ssd
++			ptr = &pt->ar_ssd;
 +		}
 +	} else if (addr >= ELF_CR_IIP_OFFSET && addr <= ELF_CR_IPSR_OFFSET) {
 +		switch (addr) {
-+			case ELF_CR_IIP_OFFSET:
-+				ptr = &pt->cr_iip;
-+				break;
-+			case ELF_CFM_OFFSET:
-+				urbs_end = ia64_get_user_rbs_end(target, pt, &cfm);
-+				if (write_access) {
-+					if (((cfm ^ *data) & PFM_MASK) != 0) {
-+						if (ia64_sync_user_rbs(target, info->sw,
-+									pt->ar_bspstore,
-+									urbs_end) < 0)
-+							return -1;
-+						if (in_syscall(pt))
-+							convert_to_non_syscall(target,
-+									pt,
-+									cfm);
-+						pt->cr_ifs = ((pt->cr_ifs & ~PFM_MASK)
-+								| (*data & PFM_MASK));
-+					}
-+				} else
-+					*data = cfm;
-+				return 0;
-+			case ELF_CR_IPSR_OFFSET:
-+				if (write_access)
-+					pt->cr_ipsr = ((*data & IPSR_MASK)
-+							| (pt->cr_ipsr & ~IPSR_MASK));
-+				else
-+					*data = (pt->cr_ipsr & IPSR_MASK);
-+				return 0;
++		case ELF_CR_IIP_OFFSET:
++			ptr = &pt->cr_iip;
++			break;
++		case ELF_CFM_OFFSET:
++			urbs_end = ia64_get_user_rbs_end(target, pt, &cfm);
++			if (write_access) {
++				if (((cfm ^ *data) & PFM_MASK) != 0) {
++					if (ia64_sync_user_rbs(target, info->sw,
++							       pt->ar_bspstore,
++							       urbs_end) < 0)
++						return -1;
++					if (in_syscall(pt))
++						convert_to_non_syscall(target,
++								       pt,
++								       cfm);
++					pt->cr_ifs = ((pt->cr_ifs & ~PFM_MASK)
++						      | (*data & PFM_MASK));
++				}
++			} else
++				*data = cfm;
++			return 0;
++		case ELF_CR_IPSR_OFFSET:
++			if (write_access) {
++				unsigned long tmp = *data;
++				/* psr.ri==3 is a reserved value: SDM 2:25 */
++				if ((tmp & IA64_PSR_RI) == IA64_PSR_RI)
++					tmp &= ~IA64_PSR_RI;
++				pt->cr_ipsr = ((tmp & IPSR_MASK)
++					       | (pt->cr_ipsr & ~IPSR_MASK));
++			} else
++				*data = (pt->cr_ipsr & IPSR_MASK);
++			return 0;
 +		}
 +	} else if (addr == ELF_NAT_OFFSET)
-+			return access_nat_bits(target, pt, info,
-+					data, write_access);
++		return access_nat_bits(target, pt, info,
++				       data, write_access);
 +	else if (addr == ELF_PR_OFFSET)
-+			ptr = &pt->pr;
++		ptr = &pt->pr;
 +	else
 +		return -1;
 +
@@ -1304,34 +1263,9 @@
 +		 const struct utrace_regset *regset,
 +		 int now)
 +{
-+	if (test_and_set_tsk_thread_flag(target, TIF_RESTORE_RSE))
-+		return 0;
-+	tsk_set_notify_resume(target);
 +	return do_regset_call(do_gpregs_writeback, target, regset, 0, 0, NULL, NULL);
 +}
 +
-+static void do_gpregs_readback(struct unw_frame_info *info, void *arg)
-+{
-+	struct pt_regs *pt;
-+	utrace_getset_t *dst = arg;
-+	unsigned long urbs_end;
-+
-+	if (unw_unwind_to_user(info) < 0)
-+		return;
-+	pt = task_pt_regs(dst->target);
-+	urbs_end = ia64_get_user_rbs_end(dst->target, pt, NULL);
-+	dst->ret = ia64_sync_kernel_rbs(dst->target, info->sw, pt->ar_bspstore, urbs_end);
-+}
-+/*
-+ * This is called to read back the register backing store.
-+ */
-+long ia64_sync_krbs(struct task_struct *target)
-+{
-+	clear_tsk_thread_flag(target, TIF_RESTORE_RSE);
-+	tsk_clear_notify_resume(target);
-+	return do_regset_call(do_gpregs_readback, target, NULL, 0, 0, NULL, NULL);
-+}
-+
 +static int
 +fpregs_active(struct task_struct *target, const struct utrace_regset *regset)
 +{
@@ -1441,12 +1375,14 @@
 +
 +static const struct utrace_regset native_regsets[] = {
 +	{
++		.core_note_type = NT_PRSTATUS,
 +		.n = ELF_NGREG,
 +		.size = sizeof(elf_greg_t), .align = sizeof(elf_greg_t),
 +		.get = gpregs_get, .set = gpregs_set,
 +		.writeback = gpregs_writeback
 +	},
 +	{
++		.core_note_type = NT_PRFPREG,
 +		.n = ELF_NFPREG,
 +		.size = sizeof(elf_fpreg_t), .align = sizeof(elf_fpreg_t),
 +		.get = fpregs_get, .set = fpregs_set, .active = fpregs_active
@@ -1473,10 +1409,8 @@
 +#endif
 +	return &utrace_ia64_native;
 +}
-Index: b/include/asm-ia64/tracehook.h
-===================================================================
---- a/include/asm-ia64/tracehook.h
-+++ b/include/asm-ia64/tracehook.h
+--- linux-2.6/include/asm-ia64/tracehook.h
++++ linux-2.6/include/asm-ia64/tracehook.h
 @@ -67,7 +67,10 @@ static inline int tracehook_single_step_
  
  static inline void tracehook_abort_syscall(struct pt_regs *regs)
@@ -1490,10 +1424,8 @@
  
 -#endif
 +#endif	/* asm/tracehook.h */
-Index: b/include/asm-ia64/elf.h
-===================================================================
---- a/include/asm-ia64/elf.h
-+++ b/include/asm-ia64/elf.h
+--- linux-2.6/include/asm-ia64/elf.h
++++ linux-2.6/include/asm-ia64/elf.h
 @@ -154,6 +154,30 @@ extern void ia64_init_addr_space (void);
  #define ELF_NGREG	128	/* we really need just 72 but let's leave some headroom... */
  #define ELF_NFPREG	128	/* f0 and f1 could be omitted, but so what... */

linux-2.6-utrace-regset-s390.patch:

Index: linux-2.6-utrace-regset-s390.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-utrace-regset-s390.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-utrace-regset-s390.patch	20 Jul 2007 18:48:03 -0000	1.3
+++ linux-2.6-utrace-regset-s390.patch	10 Oct 2007 21:22:57 -0000	1.4
@@ -9,8 +9,8 @@
 ---
 
  arch/s390/kernel/Makefile |    2 
- arch/s390/kernel/ptrace.c |  952 ++++++++++++++++++---------------------------
- 2 files changed, 390 insertions(+), 564 deletions(-)
+ arch/s390/kernel/ptrace.c |  948 +++++++++++++++++++--------------------------
+ 2 files changed, 394 insertions(+), 556 deletions(-)
 
 --- linux-2.6/arch/s390/kernel/Makefile
 +++ linux-2.6/arch/s390/kernel/Makefile
@@ -22,7 +22,7 @@
 +CFLAGS_ptrace.o		+= -DUTS_MACHINE='"$(UTS_MACHINE)"'
 --- linux-2.6/arch/s390/kernel/ptrace.c
 +++ linux-2.6/arch/s390/kernel/ptrace.c
-@@ -30,6 +30,7 @@
+@@ -30,10 +30,12 @@
  #include <linux/errno.h>
  #include <linux/ptrace.h>
  #include <linux/tracehook.h>
@@ -30,15 +30,12 @@
  #include <linux/user.h>
  #include <linux/security.h>
  #include <linux/audit.h>
-@@ -42,6 +43,7 @@
- #include <asm/system.h>
- #include <asm/uaccess.h>
- #include <asm/unistd.h>
-+#include <asm/elf.h>
+ #include <linux/signal.h>
++#include <linux/elf.h>
  
- #ifdef CONFIG_COMPAT
- #include "compat_ptrace.h"
-@@ -116,640 +118,462 @@ tracehook_single_step_enabled(struct tas
+ #include <asm/segment.h>
+ #include <asm/page.h>
+@@ -116,633 +118,467 @@ tracehook_single_step_enabled(struct tas
  	return task->thread.per_info.single_step;
  }
  
@@ -374,20 +371,18 @@
 +	     unsigned int pos, unsigned int count,
 +	     const void *kbuf, const void __user *ubuf)
  {
--	unsigned long tmp;
 -	ptrace_area parea; 
 -	int copied, ret;
--
++	int ret = utrace_regset_copyin(&pos, &count, &kbuf, &ubuf,
++				       &target->thread.per_info, 0, -1);
+ 
 -	switch (request) {
 -	case PTRACE_PEEKTEXT:
 -	case PTRACE_PEEKDATA:
 -		/* Remove high order bit from address (only for 31 bit). */
 -		addr &= PSW_ADDR_INSN;
 -		/* read word at location addr. */
--		copied = access_process_vm(child, addr, &tmp, sizeof(tmp), 0);
--		if (copied != sizeof(tmp))
--			return -EIO;
--		return put_user(tmp, (unsigned long __force __user *) data);
+-		return generic_ptrace_peekdata(child, addr, data);
 -
 -	case PTRACE_PEEKUSR:
 -		/* read the word at location addr in the USER area. */
@@ -398,10 +393,7 @@
 -		/* Remove high order bit from address (only for 31 bit). */
 -		addr &= PSW_ADDR_INSN;
 -		/* write the word at location addr. */
--		copied = access_process_vm(child, addr, &data, sizeof(data),1);
--		if (copied != sizeof(data))
--			return -EIO;
--		return 0;
+-		return generic_ptrace_pokedata(child, addr, data);
 -
 -	case PTRACE_POKEUSR:
 -		/* write the word at location addr in the USER area */
@@ -434,9 +426,6 @@
 -		return 0;
 -	}
 -	return ptrace_request(child, request, addr, data);
-+	int ret = utrace_regset_copyin(&pos, &count, &kbuf, &ubuf,
-+				       &target->thread.per_info, 0, -1);
-+
 +	FixPerRegisters(target);
 +
 +	return ret;
@@ -474,11 +463,13 @@
 -		return -EIO;
 +static const struct utrace_regset native_regsets[] = {
 +	{
++		.core_note_type = NT_PRSTATUS,
 +		.size = sizeof(long), .align = sizeof(long),
 +		.n = sizeof(s390_regs) / sizeof(long),
 +		.get = genregs_get, .set = genregs_set
 +	},
 +	{
++		.core_note_type = NT_PRFPREG,
 +		.size = sizeof(long), .align = sizeof(long),
 +		.n = sizeof(s390_fp_regs) / sizeof(long),
 +		.get = fpregs_get, .set = fpregs_set
@@ -585,9 +576,7 @@
 +		pos += sizeof(u32);
 +		count -= sizeof(u32);
 +	}
- 
--	} else
--		tmp = 0;
++
 +	/* The ACRs are kept in the thread_struct.  */
 +	if (ret == 0 && count > 0 && pos < PT_ACR0 / 2 + NUM_ACRS * ACR_SIZE) {
 +		if (target == current)
@@ -599,7 +588,8 @@
 +					    PT_ACR0 / 2 + NUM_ACRS * ACR_SIZE);
 +	}
  
--	return put_user(tmp, (__u32 __user *) data);
+-	} else
+-		tmp = 0;
 +	/* Finally, the ORIG_GPR2 value.  */
 +	if (count > 0) {
 +		if (kbuf)
@@ -608,7 +598,8 @@
 +				  (u32 __user *) ubuf))
 +			return -EFAULT;
 +	}
-+
+ 
+-	return put_user(tmp, (__u32 __user *) data);
 +	return 0;
  }
  
@@ -999,14 +990,17 @@
  
 +static const struct utrace_regset s390_compat_regsets[] = {
 +	{
++		.core_note_type = NT_PRSTATUS,
 +		.size = sizeof(u32), .align = sizeof(u32),
 +		.n = sizeof(s390_regs) / sizeof(long),
 +		.get = s390_genregs_get, .set = s390_genregs_set
 +	},
 +	{
++		.core_note_type = NT_PRFPREG,
 +		.size = sizeof(u32), .align = sizeof(u32),
 +		.n = sizeof(s390_fp_regs) / sizeof(u32),
 +		.get = fpregs_get, .set = fpregs_set
++
 +	},
 +	{
 +		.size = sizeof(u32), .align = sizeof(u32),

linux-2.6-utrace-regset-sparc64.patch:

Index: linux-2.6-utrace-regset-sparc64.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-utrace-regset-sparc64.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-utrace-regset-sparc64.patch	20 Jul 2007 18:48:03 -0000	1.3
+++ linux-2.6-utrace-regset-sparc64.patch	10 Oct 2007 21:22:57 -0000	1.4
@@ -9,9 +9,9 @@
 ---
 
  arch/sparc64/kernel/Makefile  |    2 
- arch/sparc64/kernel/ptrace.c  |  631 +++++++++++++++++++++++++++++++++++++----
+ arch/sparc64/kernel/ptrace.c  |  635 +++++++++++++++++++++++++++++++++++++----
  arch/sparc64/kernel/systbls.S |    4 
- 3 files changed, 568 insertions(+), 69 deletions(-)
+ 3 files changed, 572 insertions(+), 69 deletions(-)
 
 --- linux-2.6/arch/sparc64/kernel/Makefile
 +++ linux-2.6/arch/sparc64/kernel/Makefile
@@ -35,7 +35,7 @@
   * Copyright (C) 1997 Jakub Jelinek (jj at sunsite.mff.cuni.cz)
   *
   * Based upon code written by Ross Biro, Linus Torvalds, Bob Manson,
-@@ -11,106 +11,603 @@
+@@ -11,106 +11,607 @@
   */
  
  #include <linux/kernel.h>
@@ -297,11 +297,13 @@
 -pt_succ_return_linux(struct pt_regs *regs, unsigned long value, void __user *addr)
 +static const struct utrace_regset native_regsets[] = {
 +	{
++		.core_note_type = NT_PRSTATUS,
 +		.n = SPARC64_NGREGS,
 +		.size = sizeof(long), .align = sizeof(long),
 +		.get = genregs_get, .set = genregs_set
 +	},
 +	{
++		.core_note_type = NT_PRFPREG,
 +		.n = SPARC64_NFPREGS,
 +		.size = sizeof(long), .align = sizeof(long),
 +		.get = fpregs_get, .set = fpregs_set
@@ -665,11 +667,13 @@
 +
 +static const struct utrace_regset sparc32_regsets[] = {
 +	{
++		.core_note_type = NT_PRSTATUS,
 +		.n = SPARC32_NGREGS,
 +		.size = sizeof(u32), .align = sizeof(u32),
 +		.get = genregs32_get, .set = genregs32_set
 +	},
 +	{
++		.core_note_type = NT_PRFPREG,
 +		.n = SPARC32_NFPREGS,
 +		.size = sizeof(u32), .align = sizeof(u32),
 +		.get = fpregs32_get, .set = fpregs32_set
@@ -706,7 +710,7 @@
   * accessed page.  Then our caller (copy_{to,from}_user_page()) did
 --- linux-2.6/arch/sparc64/kernel/systbls.S
 +++ linux-2.6/arch/sparc64/kernel/systbls.S
-@@ -24,7 +24,7 @@ sys_call_table32:
+@@ -23,7 +23,7 @@ sys_call_table32:
  /*10*/  .word sys_unlink, sunos_execv, sys_chdir, sys32_chown16, sys32_mknod
  /*15*/	.word sys_chmod, sys32_lchown16, sparc_brk, sys32_perfctr, sys32_lseek
  /*20*/	.word sys_getpid, sys_capget, sys_capset, sys32_setuid16, sys32_getuid16
@@ -715,7 +719,7 @@
  /*30*/	.word compat_sys_utime, sys_lchown, sys_fchown, sys32_access, sys32_nice
  	.word sys_chown, sys_sync, sys32_kill, compat_sys_newstat, sys32_sendfile
  /*40*/	.word compat_sys_newlstat, sys_dup, sys_pipe, compat_sys_times, sys_getuid
-@@ -170,7 +170,7 @@ sunos_sys_table:
+@@ -169,7 +169,7 @@ sunos_sys_table:
  	.word sys_chmod, sys32_lchown16, sunos_brk
  	.word sunos_nosys, sys32_lseek, sunos_getpid
  	.word sunos_nosys, sunos_nosys, sunos_nosys

linux-2.6-utrace-regset.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.5 -r 1.6 linux-2.6-utrace-regset.patch
Index: linux-2.6-utrace-regset.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-utrace-regset.patch,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- linux-2.6-utrace-regset.patch	21 Sep 2007 23:16:31 -0000	1.5
+++ linux-2.6-utrace-regset.patch	10 Oct 2007 21:22:57 -0000	1.6
@@ -11,28 +11,23 @@
 
 ---
 
- arch/i386/kernel/i387.c             |  143 +++---
- arch/i386/kernel/ptrace.c           |  826 ++++++++++++++++++++----------------
- arch/powerpc/kernel/Makefile        |    4 
- arch/powerpc/kernel/ptrace-common.h |  145 ------
- arch/powerpc/kernel/ptrace.c        |  718 +++++++++++++++----------------
- arch/powerpc/kernel/ptrace32.c      |  443 -------------------
- arch/x86_64/ia32/fpu32.c            |   92 +++-
- arch/x86_64/ia32/ptrace32.c         |  725 ++++++++++++++++++++-----------
- arch/x86_64/kernel/ptrace.c         |  733 +++++++++++++++++++------------
- include/asm-i386/i387.h             |   13 
- include/asm-x86_64/fpu32.h          |    3 
- include/asm-x86_64/tracehook.h      |    8 
- include/linux/tracehook.h           |  255 ++++++++++-
- kernel/ptrace.c                     |    8 
- 14 files changed, 2147 insertions(+), 1969 deletions(-)
- delete arch/powerpc/kernel/ptrace32.c
- delete arch/powerpc/kernel/ptrace-common.h
+ arch/i386/kernel/i387.c        |  143 ++++---
+ arch/i386/kernel/ptrace.c      |  811 +++++++++++++++++++++++-----------------
+ arch/x86_64/ia32/ptrace32.c    |  722 +++++++++++++++++++++++-------------
+ arch/x86_64/ia32/fpu32.c       |   92 ++++-
+ arch/x86_64/kernel/ptrace.c    |  726 ++++++++++++++++++++++--------------
+ arch/powerpc/kernel/Makefile   |    2 
+ arch/powerpc/kernel/ptrace32.c |   20 -
+ arch/powerpc/kernel/ptrace.c   |  617 ++++++++++++++++++++----------
+ kernel/ptrace.c                |    9 
+ include/linux/tracehook.h      |  255 ++++++++++++-
+ include/asm-i386/i387.h        |   13 -
+ include/asm-x86_64/fpu32.h     |    3 
+ include/asm-x86_64/tracehook.h |    8 
+ 13 files changed, 2203 insertions(+), 1218 deletions(-)
 
-Index: b/arch/i386/kernel/i387.c
-===================================================================
---- a/arch/i386/kernel/i387.c
-+++ b/arch/i386/kernel/i387.c
+--- linux-2.6/arch/i386/kernel/i387.c
++++ linux-2.6/arch/i386/kernel/i387.c
 @@ -222,14 +222,10 @@ void set_fpu_twd( struct task_struct *ts
   * FXSR floating point environment conversions.
   */
@@ -242,10 +237,8 @@
  }
  
  /*
-Index: b/arch/i386/kernel/ptrace.c
-===================================================================
---- a/arch/i386/kernel/ptrace.c
-+++ b/arch/i386/kernel/ptrace.c
+--- linux-2.6/arch/i386/kernel/ptrace.c
++++ linux-2.6/arch/i386/kernel/ptrace.c
 @@ -17,7 +17,10 @@
  #include <linux/audit.h>
  #include <linux/seccomp.h>
@@ -379,7 +372,7 @@
  	}
  	return retval;
  }
-@@ -230,11 +241,11 @@ void tracehook_enable_single_step(struct
+@@ -238,11 +249,11 @@ void tracehook_enable_single_step(struct
  	/*
  	 * If TF was already set, don't do anything else
  	 */
@@ -393,7 +386,7 @@
  
  	/*
  	 * ..but if TF is changed by the instruction we will trace,
-@@ -255,20 +266,300 @@ void tracehook_disable_single_step(struc
+@@ -263,29 +274,311 @@ void tracehook_disable_single_step(struc
  	/* But touch TF only if it was set by us.. */
  	if (test_and_clear_tsk_thread_flag(child, TIF_FORCED_TF)) {
  		struct pt_regs *regs = get_child_regs(child);
@@ -469,7 +462,8 @@
 +
 +static int
 +fpregs_active(struct task_struct *target, const struct utrace_regset *regset)
-+{
+ { 
+-	tracehook_disable_single_step(child);
 +	return tsk_used_math(target) ? regset->n : 0;
 +}
 +
@@ -597,8 +591,7 @@
 +	   const struct utrace_regset *regset,
 +	   unsigned int pos, unsigned int count,
 +	   void *kbuf, void __user *ubuf)
- { 
--	tracehook_disable_single_step(child);
++{
 +	/*
 +	 * The hardware updates the status register on a debug trap,
 +	 * but do_debug (traps.c) save it for us when that happens.
@@ -702,9 +695,6 @@
  /*
   * Perform get_thread_area on behalf of the traced child.
   */
-@@ -273,11 +564,13 @@ void ptrace_disable(struct task_struct *
-  * Perform get_thread_area on behalf of the traced child.
-  */
  static int
 -ptrace_get_thread_area(struct task_struct *child,
 -		       int idx, struct user_desc __user *user_desc)
@@ -720,27 +710,12 @@
  
  /*
   * Get the current Thread-Local Storage area:
-@@ -299,23 +592,29 @@ ptrace_get_thread_area(struct task_struc
+@@ -307,23 +600,29 @@ ptrace_get_thread_area(struct task_struc
  #define GET_PRESENT(desc)	(((desc)->b >> 15) & 1)
  #define GET_USEABLE(desc)	(((desc)->b >> 20) & 1)
  
 -	if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX)
 -		return -EINVAL;
--
--	desc = child->thread.tls_array + idx - GDT_ENTRY_TLS_MIN;
--
--	info.entry_number = idx;
--	info.base_addr = GET_BASE(desc);
--	info.limit = GET_LIMIT(desc);
--	info.seg_32bit = GET_32BIT(desc);
--	info.contents = GET_CONTENTS(desc);
--	info.read_exec_only = !GET_WRITABLE(desc);
--	info.limit_in_pages = GET_LIMIT_PAGES(desc);
--	info.seg_not_present = !GET_PRESENT(desc);
--	info.useable = GET_USEABLE(desc);
--
--	if (copy_to_user(user_desc, &info, sizeof(info)))
--		return -EFAULT;
 +	desc = &target->thread.tls_array[pos / sizeof(struct user_desc)];
 +	ip = kbuf ?: &info;
 +	memset(ip, 0, sizeof *ip);
@@ -755,7 +730,21 @@
 +		ip->limit_in_pages = GET_LIMIT_PAGES(desc);
 +		ip->seg_not_present = !GET_PRESENT(desc);
 +		ip->useable = GET_USEABLE(desc);
-+
+ 
+-	desc = child->thread.tls_array + idx - GDT_ENTRY_TLS_MIN;
+-
+-	info.entry_number = idx;
+-	info.base_addr = GET_BASE(desc);
+-	info.limit = GET_LIMIT(desc);
+-	info.seg_32bit = GET_32BIT(desc);
+-	info.contents = GET_CONTENTS(desc);
+-	info.read_exec_only = !GET_WRITABLE(desc);
+-	info.limit_in_pages = GET_LIMIT_PAGES(desc);
+-	info.seg_not_present = !GET_PRESENT(desc);
+-	info.useable = GET_USEABLE(desc);
+-
+-	if (copy_to_user(user_desc, &info, sizeof(info)))
+-		return -EFAULT;
 +		if (kbuf)
 +			++ip;
 +		else {
@@ -767,7 +756,7 @@
  
  	return 0;
  }
-@@ -324,304 +623,123 @@ ptrace_get_thread_area(struct task_struc
+@@ -332,293 +631,123 @@ ptrace_get_thread_area(struct task_struc
   * Perform set_thread_area on behalf of the traced child.
   */
  static int
@@ -808,17 +797,9 @@
 -	switch (request) {
 -	/* when I and D space are separate, these will need to be fixed. */
 -	case PTRACE_PEEKTEXT: /* read word at location addr. */ 
--	case PTRACE_PEEKDATA: {
--		unsigned long tmp;
--		int copied;
--
--		copied = access_process_vm(child, addr, &tmp, sizeof(tmp), 0);
--		ret = -EIO;
--		if (copied != sizeof(tmp))
--			break;
--		ret = put_user(tmp, datap);
+-	case PTRACE_PEEKDATA:
+-		ret = generic_ptrace_peekdata(child, addr, data);
 -		break;
--	}
 -
 -	/* read the word at location addr in the USER area. */
 -	case PTRACE_PEEKUSR: {
@@ -837,64 +818,23 @@
 -			addr -= (long) &dummy->u_debugreg[0];
 -			addr = addr >> 2;
 -			tmp = child->thread.debugreg[addr];
-+	struct desc_struct newtls[GDT_ENTRY_TLS_ENTRIES];
[...2767 lines suppressed...]
--
--	return 0;
--}
--#endif
--
--static inline int ptrace_set_debugreg(struct task_struct *task,
--				      unsigned long addr, unsigned long data)
--{
--	/* We only support one DABR and no IABRS at the moment */
--	if (addr > 0)
--		return -EINVAL;
--
--	/* The bottom 3 bits are flags */
--	if ((data & ~0x7UL) >= TASK_SIZE)
--		return -EIO;
--
--	/* Ensure translation is on */
--	if (data && !(data & DABR_TRANSLATION))
--		return -EIO;
--
--	task->thread.dabr = data;
--	return 0;
--}
+-	case PTRACE_SINGLESTEP: {  /* set the trap flag. */
+-		ret = -EIO;
+-		if (!valid_signal(data))
+-			break;
+-		clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
+-		tracehook_enable_single_step(child);
+-		child->exit_code = data;
+-		/* give it a chance to run. */
+-		wake_up_process(child);
+-		ret = 0;
+-		break;
+-	}
 -
--#endif /* _PPC64_PTRACE_COMMON_H */
-Index: b/kernel/ptrace.c
-===================================================================
---- a/kernel/ptrace.c
-+++ b/kernel/ptrace.c
-@@ -99,12 +99,6 @@ int ptrace_detach(struct task_struct *ch
+ 	case PTRACE_GET_DEBUGREG: {
+ 		ret = -EINVAL;
+ 		/* We only support one DABR and no IABRS at the moment */
+@@ -501,7 +702,7 @@ long arch_ptrace(struct task_struct *chi
+ 	}
+ 
+ 	case PTRACE_SET_DEBUGREG:
+-		ret = ptrace_set_debugreg(child, addr, data);
++/*		ret = ptrace_set_debugreg(child, addr, data);*/
+ 		break;
+ 
+ 	case PTRACE_DETACH:
+@@ -520,8 +721,8 @@ long arch_ptrace(struct task_struct *chi
+ 		}
+ 		ret = 0;
+ 		for (ui = 0; ui < PT_REGS_COUNT; ui ++) {
+-			ret |= __put_user(ptrace_get_reg(child, ui),
+-					  (unsigned long __user *) data);
++/*			ret |= __put_user(ptrace_get_reg(child, ui),
++					  (unsigned long __user *) data);*/
+ 			data += sizeof(long);
+ 		}
+ 		break;
+@@ -543,7 +744,7 @@ long arch_ptrace(struct task_struct *chi
+ 			ret = __get_user(tmp, (unsigned long __user *) data);
+ 			if (ret)
+ 				break;
+-			ptrace_put_reg(child, ui, tmp);
++/*			ptrace_put_reg(child, ui, tmp);*/
+ 			data += sizeof(long);
+ 		}
+ 		break;
+@@ -551,13 +752,13 @@ long arch_ptrace(struct task_struct *chi
+ 
+ 	case PTRACE_GETFPREGS: { /* Get the child FPU state (FPR0...31 + FPSCR) */
+ 		flush_fp_to_thread(child);
+-		ret = get_fpregs((void __user *)data, child, 1);
++/*		ret = get_fpregs((void __user *)data, child, 1);*/
+ 		break;
+ 	}
+ 
+ 	case PTRACE_SETFPREGS: { /* Set the child FPU state (FPR0...31 + FPSCR) */
+ 		flush_fp_to_thread(child);
+-		ret = set_fpregs((void __user *)data, child, 1);
++/*		ret = set_fpregs((void __user *)data, child, 1);*/
+ 		break;
+ 	}
+ 
+@@ -565,13 +766,13 @@ long arch_ptrace(struct task_struct *chi
+ 	case PTRACE_GETVRREGS:
+ 		/* Get the child altivec register state. */
+ 		flush_altivec_to_thread(child);
+-		ret = get_vrregs((unsigned long __user *)data, child);
++/*		ret = get_vrregs((unsigned long __user *)data, child);*/
+ 		break;
+ 
+ 	case PTRACE_SETVRREGS:
+ 		/* Set the child altivec register state. */
+ 		flush_altivec_to_thread(child);
+-		ret = set_vrregs(child, (unsigned long __user *)data);
++/*		ret = set_vrregs(child, (unsigned long __user *)data);*/
+ 		break;
+ #endif
+ #ifdef CONFIG_SPE
+@@ -579,7 +780,7 @@ long arch_ptrace(struct task_struct *chi
+ 		/* Get the child spe register state. */
+ 		if (child->thread.regs->msr & MSR_SPE)
+ 			giveup_spe(child);
+-		ret = get_evrregs((unsigned long __user *)data, child);
++/*		ret = get_evrregs((unsigned long __user *)data, child);*/
+ 		break;
+ 
+ 	case PTRACE_SETEVRREGS:
+@@ -588,7 +789,7 @@ long arch_ptrace(struct task_struct *chi
+ 		 * of register state from memory */
+ 		if (child->thread.regs->msr & MSR_SPE)
+ 			giveup_spe(child);
+-		ret = set_evrregs(child, (unsigned long __user *)data);
++/*		ret = set_evrregs(child, (unsigned long __user *)data);*/
+ 		break;
+ #endif
+ 
+--- linux-2.6/kernel/ptrace.c
++++ linux-2.6/kernel/ptrace.c
+@@ -99,13 +99,6 @@ int ptrace_detach(struct task_struct *ch
  	if (!valid_signal(data))
  		return -EIO;
  
 -	/* Architecture-specific hardware disable .. */
 -	ptrace_disable(child);
+-	clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
 -
 -	/* .. re-parent .. */
 -	child->exit_code = data;
@@ -4432,7 +3841,7 @@
  	return -ENOSYS;
  }
  
-@@ -212,9 +206,7 @@ struct task_struct *ptrace_get_task_stru
+@@ -213,12 +206,10 @@ struct task_struct *ptrace_get_task_stru
  	return child;
  }
  
@@ -4442,10 +3851,11 @@
  	return -ENOSYS;
  }
 -#endif /* __ARCH_SYS_PTRACE */
-Index: b/include/linux/tracehook.h
-===================================================================
---- a/include/linux/tracehook.h
-+++ b/include/linux/tracehook.h
+ 
+ int generic_ptrace_peekdata(struct task_struct *tsk, long addr, long data)
+ {
+--- linux-2.6/include/linux/tracehook.h
++++ linux-2.6/include/linux/tracehook.h
 @@ -52,10 +52,10 @@ struct pt_regs;
   * should be one that can be evaluated in modules, i.e. uses exported symbols.
   *
@@ -4715,10 +4125,8 @@
  /*
   * Following are entry points from core code, where the user debugging
   * support can affect the normal behavior.  The locking situation is
-Index: b/include/asm-i386/i387.h
-===================================================================
---- a/include/asm-i386/i387.h
-+++ b/include/asm-i386/i387.h
+--- linux-2.6/include/asm-i386/i387.h
++++ linux-2.6/include/asm-i386/i387.h
 @@ -130,17 +130,12 @@ extern int save_i387( struct _fpstate __
  extern int restore_i387( struct _fpstate __user *buf );
  
@@ -4741,10 +4149,8 @@
  
  /*
   * FPU state for core dumps...
-Index: b/include/asm-x86_64/fpu32.h
-===================================================================
---- a/include/asm-x86_64/fpu32.h
-+++ b/include/asm-x86_64/fpu32.h
+--- linux-2.6/include/asm-x86_64/fpu32.h
++++ linux-2.6/include/asm-x86_64/fpu32.h
 @@ -7,4 +7,7 @@ int restore_i387_ia32(struct task_struct
  int save_i387_ia32(struct task_struct *tsk, struct _fpstate_ia32 __user *buf, 
  		   struct pt_regs *regs, int fsave);
@@ -4753,10 +4159,8 @@
 +int set_fpregs32(struct task_struct *, const struct user_i387_ia32_struct *);
 +
  #endif
-Index: b/include/asm-x86_64/tracehook.h
-===================================================================
---- a/include/asm-x86_64/tracehook.h
-+++ b/include/asm-x86_64/tracehook.h
+--- linux-2.6/include/asm-x86_64/tracehook.h
++++ linux-2.6/include/asm-x86_64/tracehook.h
 @@ -48,4 +48,12 @@ static inline void tracehook_abort_sysca
  	regs->orig_rax = -1L;
  }

linux-2.6-utrace-tracehook-avr32.patch:

Index: linux-2.6-utrace-tracehook-avr32.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-utrace-tracehook-avr32.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-utrace-tracehook-avr32.patch	20 Jul 2007 18:48:03 -0000	1.1
+++ linux-2.6-utrace-tracehook-avr32.patch	10 Oct 2007 21:22:57 -0000	1.2
@@ -97,7 +97,7 @@
  /*
   * Read the word at offset "offset" into the task's "struct user". We
   * actually access the pt_regs struct stored on the kernel stack.
-@@ -257,32 +208,31 @@ long arch_ptrace(struct task_struct *chi
+@@ -248,32 +199,31 @@ long arch_ptrace(struct task_struct *chi
  	pr_debug("sys_ptrace returning %d (DC = 0x%08lx)\n", ret, __mfdr(DBGREG_DC));
  	return ret;
  }
@@ -149,7 +149,7 @@
  }
  
  asmlinkage void do_debug_priv(struct pt_regs *regs)
-@@ -361,10 +311,10 @@ asmlinkage void do_debug(struct pt_regs 
+@@ -352,10 +302,10 @@ asmlinkage void do_debug(struct pt_regs 
  			__mtdr(DBGREG_DC, dc);
  
  			clear_thread_flag(TIF_SINGLE_STEP);

linux-2.6-utrace-tracehook-ia64.patch:

Index: linux-2.6-utrace-tracehook-ia64.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-utrace-tracehook-ia64.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-utrace-tracehook-ia64.patch	20 Jul 2007 18:48:03 -0000	1.3
+++ linux-2.6-utrace-tracehook-ia64.patch	10 Oct 2007 21:22:57 -0000	1.4
@@ -93,7 +93,7 @@
  #include <linux/smp_lock.h>
  #include <linux/user.h>
  #include <linux/security.h>
-@@ -1598,28 +1599,6 @@ sys_ptrace (long request, pid_t pid, uns
+@@ -1601,28 +1602,6 @@ sys_ptrace (long request, pid_t pid, uns
  	return ret;
  }
  
@@ -122,7 +122,7 @@
  /* "asmlinkage" so the input arguments are preserved... */
  
  asmlinkage void
-@@ -1627,9 +1606,8 @@ syscall_trace_enter (long arg0, long arg
+@@ -1630,9 +1609,8 @@ syscall_trace_enter (long arg0, long arg
  		     long arg4, long arg5, long arg6, long arg7,
  		     struct pt_regs regs)
  {
@@ -134,7 +134,7 @@
  
  	if (unlikely(current->audit_context)) {
  		long syscall;
-@@ -1664,8 +1642,11 @@ syscall_trace_leave (long arg0, long arg
+@@ -1667,8 +1645,11 @@ syscall_trace_leave (long arg0, long arg
  		audit_syscall_exit(success, result);
  	}
  

linux-2.6-utrace-tracehook-s390.patch:

Index: linux-2.6-utrace-tracehook-s390.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-utrace-tracehook-s390.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-utrace-tracehook-s390.patch	20 Jul 2007 18:48:03 -0000	1.3
+++ linux-2.6-utrace-tracehook-s390.patch	10 Oct 2007 21:22:57 -0000	1.4
@@ -26,7 +26,7 @@
  #include <linux/timer.h>
  #include <linux/mm.h>
  #include <linux/smp.h>
-@@ -338,7 +338,7 @@ void __kprobes do_single_step(struct pt_
+@@ -339,7 +339,7 @@ void __kprobes do_single_step(struct pt_
  					SIGTRAP) == NOTIFY_STOP){
  		return;
  	}
@@ -35,7 +35,7 @@
  		force_sig(SIGTRAP, current);
  }
  
-@@ -439,7 +439,7 @@ static void illegal_op(struct pt_regs * 
+@@ -440,7 +440,7 @@ static void illegal_op(struct pt_regs * 
  		if (get_user(*((__u16 *) opcode), (__u16 __user *) location))
  			return;
  		if (*((__u16 *) opcode) == S390_BREAKPOINT_U16) {
@@ -122,7 +122,7 @@
  }
  
  #ifndef CONFIG_64BIT
-@@ -593,6 +611,7 @@ do_ptrace_emu31(struct task_struct *chil
+@@ -586,6 +604,7 @@ do_ptrace_emu31(struct task_struct *chil
  			copied += sizeof(unsigned int);
  		}
  		return 0;
@@ -130,7 +130,7 @@
  	case PTRACE_GETEVENTMSG:
  		return put_user((__u32) child->ptrace_message,
  				(unsigned int __force __user *) data);
-@@ -658,7 +677,7 @@ do_ptrace(struct task_struct *child, lon
+@@ -651,7 +670,7 @@ do_ptrace(struct task_struct *child, lon
  			clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
  		child->exit_code = data;
  		/* make sure the single step bit is not set. */
@@ -139,7 +139,7 @@
  		wake_up_process(child);
  		return 0;
  
-@@ -672,7 +691,7 @@ do_ptrace(struct task_struct *child, lon
+@@ -665,7 +684,7 @@ do_ptrace(struct task_struct *child, lon
  			return 0;
  		child->exit_code = SIGKILL;
  		/* make sure the single step bit is not set. */
@@ -148,7 +148,7 @@
  		wake_up_process(child);
  		return 0;
  
-@@ -685,7 +704,7 @@ do_ptrace(struct task_struct *child, lon
+@@ -678,7 +697,7 @@ do_ptrace(struct task_struct *child, lon
  		if (data)
  			set_tsk_thread_flag(child, TIF_SINGLE_STEP);
  		else
@@ -157,7 +157,7 @@
  		/* give it a chance to run. */
  		wake_up_process(child);
  		return 0;
-@@ -738,30 +757,17 @@ syscall_trace(struct pt_regs *regs, int 
+@@ -731,30 +750,17 @@ syscall_trace(struct pt_regs *regs, int 
  	if (unlikely(current->audit_context) && entryexit)
  		audit_syscall_exit(AUDITSC_RESULT(regs->gprs[2]), regs->gprs[2]);
  

linux-2.6-utrace-tracehook-sparc64.patch:

Index: linux-2.6-utrace-tracehook-sparc64.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-utrace-tracehook-sparc64.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-utrace-tracehook-sparc64.patch	20 Jul 2007 18:48:03 -0000	1.3
+++ linux-2.6-utrace-tracehook-sparc64.patch	10 Oct 2007 21:22:57 -0000	1.4
@@ -103,7 +103,7 @@
  
  #include <asm/uaccess.h>
  #include <asm/ptrace.h>
-@@ -490,6 +491,7 @@ static inline void handle_signal(unsigne
+@@ -481,6 +482,7 @@ static inline void handle_signal(unsigne
  		sigaddset(&current->blocked,signr);
  	recalc_sigpending();
  	spin_unlock_irq(&current->sighand->siglock);

linux-2.6-utrace-tracehook-um.patch:

Index: linux-2.6-utrace-tracehook-um.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-utrace-tracehook-um.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-utrace-tracehook-um.patch	20 Jul 2007 18:48:03 -0000	1.3
+++ linux-2.6-utrace-tracehook-um.patch	10 Oct 2007 21:22:57 -0000	1.4
@@ -19,7 +19,7 @@
 
 ---
 
- arch/um/kernel/ptrace.c         |  327 ++++-----------------------------------
+ arch/um/kernel/ptrace.c         |  315 ++++-----------------------------------
  arch/um/kernel/skas/syscall.c   |    4 
  arch/um/kernel/signal.c         |    5 -
  arch/um/kernel/exec.c           |    1 
@@ -30,12 +30,12 @@
  include/asm-um/ptrace-i386.h    |    2 
  include/asm-um/tracehook.h      |   57 +++++++
  include/asm-um/thread_info.h    |    3 
- 11 files changed, 106 insertions(+), 308 deletions(-)
+ 11 files changed, 106 insertions(+), 296 deletions(-)
  create include/asm-um/tracehook.h
 
 --- linux-2.6/arch/um/kernel/ptrace.c
 +++ linux-2.6/arch/um/kernel/ptrace.c
-@@ -3,261 +3,21 @@
+@@ -3,249 +3,21 @@
   * Licensed under the GPL
   */
  
@@ -93,17 +93,9 @@
 -	switch (request) {
 -		/* when I and D space are separate, these will need to be fixed. */
 -	case PTRACE_PEEKTEXT: /* read word at location addr. */ 
--	case PTRACE_PEEKDATA: {
--		unsigned long tmp;
--		int copied;
--
--		ret = -EIO;
--		copied = access_process_vm(child, addr, &tmp, sizeof(tmp), 0);
--		if (copied != sizeof(tmp))
--			break;
--		ret = put_user(tmp, p);
+-	case PTRACE_PEEKDATA:
+-		ret = generic_ptrace_peekdata(child, addr, data);
 -		break;
--	}
 -
 -	/* read the word at location addr in the USER area. */
 -        case PTRACE_PEEKUSR:
@@ -113,11 +105,7 @@
 -	/* when I and D space are separate, this will have to be fixed. */
 -	case PTRACE_POKETEXT: /* write the word at location addr. */
 -	case PTRACE_POKEDATA:
--		ret = -EIO;
--		if (access_process_vm(child, addr, &data, sizeof(data), 
--				      1) != sizeof(data))
--			break;
--		ret = 0;
+-		ret = generic_ptrace_pokedata(child, addr, data);
 -		break;
 -
 -	case PTRACE_POKEUSR: /* write the word at location addr in the USER area */
@@ -304,7 +292,7 @@
  {
  	struct siginfo info;
  
-@@ -266,56 +26,39 @@ void send_sigtrap(struct task_struct *ts
+@@ -254,56 +26,39 @@ void send_sigtrap(struct task_struct *ts
  	info.si_code = TRAP_BRKPT;
  
  	/* User-mode eip? */
@@ -437,7 +425,7 @@
  
 --- linux-2.6/arch/um/kernel/exec.c
 +++ linux-2.6/arch/um/kernel/exec.c
-@@ -51,7 +51,6 @@ static long execve1(char *file, char __u
+@@ -52,7 +52,6 @@ static long execve1(char *file, char __u
          error = do_execve(file, argv, env, &current->thread.regs);
          if (error == 0){
  		task_lock(current);
@@ -447,7 +435,7 @@
  #endif
 --- linux-2.6/arch/um/kernel/process.c
 +++ linux-2.6/arch/um/kernel/process.c
-@@ -403,11 +403,11 @@ int singlestepping(void * t)
+@@ -387,11 +387,11 @@ int singlestepping(void * t)
  {
  	struct task_struct *task = t ? t : current;
  
@@ -578,7 +566,7 @@
 +#endif
 --- linux-2.6/include/asm-um/thread_info.h
 +++ linux-2.6/include/asm-um/thread_info.h
-@@ -71,6 +71,8 @@ static inline struct thread_info *curren
+@@ -82,6 +82,8 @@ static inline struct thread_info *curren
  #define TIF_MEMDIE	 	5
  #define TIF_SYSCALL_AUDIT	6
  #define TIF_RESTORE_SIGMASK	7
@@ -587,7 +575,7 @@
  
  #define _TIF_SYSCALL_TRACE	(1 << TIF_SYSCALL_TRACE)
  #define _TIF_SIGPENDING		(1 << TIF_SIGPENDING)
-@@ -79,5 +81,6 @@ static inline struct thread_info *curren
+@@ -90,5 +92,6 @@ static inline struct thread_info *curren
  #define _TIF_MEMDIE		(1 << TIF_MEMDIE)
  #define _TIF_SYSCALL_AUDIT	(1 << TIF_SYSCALL_AUDIT)
  #define _TIF_RESTORE_SIGMASK	(1 << TIF_RESTORE_SIGMASK)

linux-2.6-utrace-tracehook.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.4 -r 1.5 linux-2.6-utrace-tracehook.patch
Index: linux-2.6-utrace-tracehook.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-utrace-tracehook.patch,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- linux-2.6-utrace-tracehook.patch	26 Sep 2007 18:58:34 -0000	1.4
+++ linux-2.6-utrace-tracehook.patch	10 Oct 2007 21:22:57 -0000	1.5
@@ -33,87 +33,82 @@
 
 ---
 
- arch/alpha/kernel/asm-offsets.c     |    2 
- arch/alpha/kernel/entry.S           |    4 
- arch/arm/kernel/ptrace.c            |   17 -
- arch/arm26/kernel/ptrace.c          |   32 --
+ fs/binfmt_flat.c                    |    3 
+ fs/binfmt_som.c                     |    2 
+ fs/proc/base.c                      |   17 +
+ fs/proc/array.c                     |   12 +
+ fs/binfmt_elf_fdpic.c               |    7 -
+ fs/exec.c                           |   11 -
+ fs/binfmt_elf.c                     |    6 -
+ fs/binfmt_aout.c                    |    6 -
+ security/selinux/hooks.c            |   54 +++--
+ security/selinux/include/objsec.h   |    1 
+ arch/s390/kernel/compat_linux.c     |    3 
+ arch/s390/kernel/process.c          |    3 
  arch/frv/kernel/ptrace.c            |   15 -
- arch/i386/kernel/entry.S            |    7 
- arch/i386/kernel/process.c          |    3 
- arch/i386/kernel/ptrace.c           |  104 +--------
+ arch/i386/math-emu/fpu_entry.c      |    6 -
+ arch/i386/kernel/ptrace.c           |  103 ++-------
  arch/i386/kernel/signal.c           |   37 +--
- arch/i386/kernel/vm86.c             |    7 
- arch/i386/math-emu/fpu_entry.c      |    6 
- arch/ia64/kernel/asm-offsets.c      |    2 
- arch/ia64/kernel/fsys.S             |   16 -
- arch/ia64/kernel/mca.c              |    2 
- arch/mips/kernel/ptrace.c           |   21 -
+ arch/i386/kernel/process.c          |    3 
+ arch/i386/kernel/vm86.c             |    7 -
+ arch/i386/kernel/entry.S            |    7 -
+ arch/x86_64/ia32/sys_ia32.c         |    5 
+ arch/x86_64/ia32/ptrace32.c         |    2 
+ arch/x86_64/ia32/ia32_aout.c        |    6 -
+ arch/x86_64/ia32/ia32_signal.c      |    7 -
+ arch/x86_64/ia32/ia32entry.S        |    4 
+ arch/x86_64/kernel/traps.c          |    8 -
+ arch/x86_64/kernel/ptrace.c         |   57 ++---
+ arch/x86_64/kernel/signal.c         |   28 +-
+ arch/x86_64/kernel/process.c        |    5 
+ arch/x86_64/kernel/entry.S          |    8 -
+ arch/x86_64/mm/fault.c              |    2 
+ arch/arm/kernel/ptrace.c            |   17 -
  arch/mips/kernel/sysirix.c          |    2 
+ arch/mips/kernel/ptrace.c           |   23 --
+ arch/powerpc/kernel/sys_ppc32.c     |    5 
+ arch/powerpc/kernel/ptrace32.c      |    7 +
+ arch/powerpc/kernel/ptrace.c        |   49 +---
+ arch/powerpc/kernel/signal.c        |    3 
  arch/powerpc/kernel/asm-offsets.c   |    2 
  arch/powerpc/kernel/process.c       |    5 
- arch/powerpc/kernel/ptrace-common.h |   16 -
- arch/powerpc/kernel/ptrace.c        |   76 +-----
- arch/powerpc/kernel/ptrace32.c      |   13 -
- arch/powerpc/kernel/signal_32.c     |    3 
- arch/powerpc/kernel/signal_64.c     |    3 
- arch/powerpc/kernel/sys_ppc32.c     |    5 
- arch/ppc/kernel/asm-offsets.c       |    2 
- arch/s390/kernel/compat_linux.c     |    3 
- arch/s390/kernel/process.c          |    3 
+ arch/alpha/kernel/asm-offsets.c     |    2 
+ arch/alpha/kernel/entry.S           |    4 
  arch/sparc64/kernel/binfmt_aout32.c |    2 
  arch/sparc64/kernel/process.c       |    3 
  arch/sparc64/kernel/sys_sparc32.c   |    3 
- arch/x86_64/ia32/ia32_aout.c        |    6 
- arch/x86_64/ia32/ia32_signal.c      |    7 
- arch/x86_64/ia32/ia32entry.S        |    4 
- arch/x86_64/ia32/ptrace32.c         |    2 
- arch/x86_64/ia32/sys_ia32.c         |    5 
- arch/x86_64/kernel/entry.S          |    8 
- arch/x86_64/kernel/process.c        |    5 
- arch/x86_64/kernel/ptrace.c         |   57 +---
- arch/x86_64/kernel/signal.c         |   28 +-
- arch/x86_64/kernel/traps.c          |    8 
- arch/x86_64/mm/fault.c              |    4 
- drivers/connector/cn_proc.c         |    4 
- fs/binfmt_aout.c                    |    6 
- fs/binfmt_elf.c                     |    6 
- fs/binfmt_elf_fdpic.c               |    7 
- fs/binfmt_flat.c                    |    3 
- fs/binfmt_som.c                     |    2 
- fs/exec.c                           |   11 
- fs/proc/array.c                     |   12 -
- fs/proc/base.c                      |   17 -
- include/asm-i386/signal.h           |    4 
- include/asm-i386/thread_info.h      |    7 
+ arch/ppc/kernel/asm-offsets.c       |    2 
+ arch/ia64/kernel/mca.c              |    2 
+ arch/ia64/kernel/asm-offsets.c      |    2 
+ arch/ia64/kernel/fsys.S             |   16 +
+ kernel/exit.c                       |  250 ++++++---------------
+ kernel/ptrace.c                     |  298 +------------------------
+ kernel/timer.c                      |    6 -
+ kernel/signal.c                     |  210 ++++--------------
+ kernel/tsacct.c                     |    2 
+ kernel/sys.c                        |    2 
+ kernel/fork.c                       |   66 ++----
+ include/linux/ptrace.h              |   18 --
+ include/linux/sched.h               |   16 -
+ include/linux/init_task.h           |    3 
+ include/linux/tracehook.h           |  414 +++++++++++++++++++++++++++++++++++
  include/asm-i386/tracehook.h        |   52 ++++
- include/asm-powerpc/tracehook.h     |   74 ++++++
- include/asm-x86_64/thread_info.h    |    3 
+ include/asm-i386/thread_info.h      |    7 -
+ include/asm-i386/signal.h           |    4 
+ include/asm-powerpc/tracehook.h     |   49 ++++
  include/asm-x86_64/tracehook.h      |   51 ++++
- include/linux/init_task.h           |    3 
- include/linux/ptrace.h              |   18 -
- include/linux/sched.h               |   16 -
- include/linux/tracehook.h           |  414 ++++++++++++++++++++++++++++++++++++
- kernel/exit.c                       |  252 ++++++---------------
- kernel/fork.c                       |   66 +----
- kernel/ptrace.c                     |  299 +-------------------------
- kernel/signal.c                     |  212 +++---------------
- kernel/sys.c                        |    2 
- kernel/timer.c                      |    6 
- kernel/tsacct.c                     |    2 
+ include/asm-x86_64/thread_info.h    |    3 
+ drivers/connector/cn_proc.c         |    4 
  mm/nommu.c                          |    4 
- security/selinux/hooks.c            |   54 ++--
- security/selinux/include/objsec.h   |    1 
- 70 files changed, 942 insertions(+), 1216 deletions(-)
+ 67 files changed, 904 insertions(+), 1139 deletions(-)
  create include/linux/tracehook.h
  create include/asm-i386/tracehook.h
  create include/asm-powerpc/tracehook.h
  create include/asm-x86_64/tracehook.h
 
-Index: b/fs/binfmt_flat.c
-===================================================================
---- a/fs/binfmt_flat.c
-+++ b/fs/binfmt_flat.c
-@@ -914,9 +914,6 @@ static int load_flat_binary(struct linux
+--- linux-2.6/fs/binfmt_flat.c
++++ linux-2.6/fs/binfmt_flat.c
+@@ -918,9 +918,6 @@ static int load_flat_binary(struct linux
  	
  	start_thread(regs, start_addr, current->mm->start_stack);
  
@@ -123,10 +118,8 @@
  	return 0;
  }
  
-Index: b/fs/binfmt_som.c
-===================================================================
---- a/fs/binfmt_som.c
-+++ b/fs/binfmt_som.c
+--- linux-2.6/fs/binfmt_som.c
++++ linux-2.6/fs/binfmt_som.c
 @@ -285,8 +285,6 @@ load_som_binary(struct linux_binprm * bp
  	map_hpux_gateway_page(current,current->mm);
  
@@ -136,18 +129,16 @@
  	return 0;
  
  	/* error cleanup */
-Index: b/fs/proc/base.c
-===================================================================
---- a/fs/proc/base.c
-+++ b/fs/proc/base.c
+--- linux-2.6/fs/proc/base.c
++++ linux-2.6/fs/proc/base.c
 @@ -67,6 +67,7 @@
  #include <linux/mount.h>
  #include <linux/security.h>
  #include <linux/ptrace.h>
 +#include <linux/tracehook.h>
- #include <linux/seccomp.h>
  #include <linux/cpuset.h>
  #include <linux/audit.h>
+ #include <linux/poll.h>
 @@ -192,13 +193,6 @@ static int proc_root_link(struct inode *
  	return result;
  }
@@ -162,7 +153,7 @@
  static int proc_pid_environ(struct task_struct *task, char * buffer)
  {
  	int res = 0;
-@@ -523,7 +517,8 @@ static ssize_t mem_read(struct file * fi
+@@ -528,7 +522,8 @@ static ssize_t mem_read(struct file * fi
  	if (!task)
  		goto out_no_task;
  
[...2057 lines suppressed...]
 @@ -0,0 +1,52 @@
 +/*
 + * Tracing hooks, i386 CPU support
@@ -3903,27 +3639,24 @@
 +
 +
 +#endif
-Index: b/include/asm-i386/thread_info.h
-===================================================================
---- a/include/asm-i386/thread_info.h
-+++ b/include/asm-i386/thread_info.h
-@@ -129,7 +129,6 @@ static inline struct thread_info *curren
- #define TIF_NEED_RESCHED	3	/* rescheduling necessary */
- #define TIF_SINGLESTEP		4	/* restore singlestep on return to user mode */
- #define TIF_IRET		5	/* return with iret */
--#define TIF_SYSCALL_EMU		6	/* syscall emulation active */
- #define TIF_SYSCALL_AUDIT	7	/* syscall auditing active */
- #define TIF_SECCOMP		8	/* secure computing */
- #define TIF_RESTORE_SIGMASK	9	/* restore signal mask in do_signal() */
-@@ -137,6 +136,7 @@ static inline struct thread_info *curren
- #define TIF_DEBUG		17	/* uses debug registers */
+--- linux-2.6/include/asm-i386/thread_info.h
++++ linux-2.6/include/asm-i386/thread_info.h
+@@ -128,7 +128,6 @@ static inline struct thread_info *curren
+ #define TIF_NEED_RESCHED	2	/* rescheduling necessary */
+ #define TIF_SINGLESTEP		3	/* restore singlestep on return to user mode */
+ #define TIF_IRET		4	/* return with iret */
+-#define TIF_SYSCALL_EMU		5	/* syscall emulation active */
+ #define TIF_SYSCALL_AUDIT	6	/* syscall auditing active */
+ #define TIF_SECCOMP		7	/* secure computing */
+ #define TIF_RESTORE_SIGMASK	8	/* restore signal mask in do_signal() */
+@@ -137,13 +136,13 @@ static inline struct thread_info *curren
  #define TIF_IO_BITMAP		18	/* uses I/O bitmap */
  #define TIF_FREEZE		19	/* is freezing for suspend */
-+#define TIF_FORCED_TF		20	/* true if TF in eflags artificially */
+ #define TIF_NOTSC		20	/* TSC is not accessible in userland */
++#define TIF_FORCED_TF		21	/* true if TF in eflags artificially */
  
  #define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
- #define _TIF_NOTIFY_RESUME	(1<<TIF_NOTIFY_RESUME)
-@@ -144,18 +144,17 @@ static inline struct thread_info *curren
+ #define _TIF_SIGPENDING		(1<<TIF_SIGPENDING)
  #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
  #define _TIF_SINGLESTEP		(1<<TIF_SINGLESTEP)
  #define _TIF_IRET		(1<<TIF_IRET)
@@ -3931,9 +3664,10 @@
  #define _TIF_SYSCALL_AUDIT	(1<<TIF_SYSCALL_AUDIT)
  #define _TIF_SECCOMP		(1<<TIF_SECCOMP)
  #define _TIF_RESTORE_SIGMASK	(1<<TIF_RESTORE_SIGMASK)
- #define _TIF_DEBUG		(1<<TIF_DEBUG)
+@@ -151,11 +150,11 @@ static inline struct thread_info *curren
  #define _TIF_IO_BITMAP		(1<<TIF_IO_BITMAP)
  #define _TIF_FREEZE		(1<<TIF_FREEZE)
+ #define _TIF_NOTSC		(1<<TIF_NOTSC)
 +#define _TIF_FORCED_TF		(1<<TIF_FORCED_TF)
  
  /* work to do on interrupt/exception return */
@@ -3944,10 +3678,8 @@
  /* work to do on any return to u-space */
  #define _TIF_ALLWORK_MASK	(0x0000FFFF & ~_TIF_SECCOMP)
  
-Index: b/include/asm-i386/signal.h
-===================================================================
---- a/include/asm-i386/signal.h
-+++ b/include/asm-i386/signal.h
+--- linux-2.6/include/asm-i386/signal.h
++++ linux-2.6/include/asm-i386/signal.h
 @@ -221,10 +221,8 @@ struct pt_regs;
  
  #define ptrace_signal_deliver(regs, cookie)		\
@@ -3960,11 +3692,9 @@
  	} while (0)
  
  #endif /* __KERNEL__ */
-Index: b/include/asm-powerpc/tracehook.h
-===================================================================
---- /dev/null
-+++ b/include/asm-powerpc/tracehook.h
-@@ -0,0 +1,74 @@
+--- linux-2.6/include/asm-powerpc/tracehook.h
++++ linux-2.6/include/asm-powerpc/tracehook.h
+@@ -0,0 +1,49 @@
 +/*
 + * Tracing hooks, PowerPC CPU support
 + *
@@ -3989,33 +3719,8 @@
 +
 +#define ARCH_HAS_SINGLE_STEP	(1)
 +
-+static inline void tracehook_enable_single_step(struct task_struct *task)
-+{
-+	struct pt_regs *regs = task->thread.regs;
-+	if (regs != NULL) {
-+#if defined(CONFIG_PPC32) && (defined(CONFIG_40x) || defined(CONFIG_BOOKE))
-+		task->thread.dbcr0 = DBCR0_IDM | DBCR0_IC;
-+		regs->msr |= MSR_DE;
-+#else
-+		regs->msr |= MSR_SE;
-+#endif
-+	}
-+	set_tsk_thread_flag(task, TIF_SINGLESTEP);
-+}
-+
-+static inline void tracehook_disable_single_step(struct task_struct *task)
-+{
-+	struct pt_regs *regs = task->thread.regs;
-+	if (regs != NULL) {
-+#if defined(CONFIG_PPC32) && (defined(CONFIG_40x) || defined(CONFIG_BOOKE))
-+		task->thread.dbcr0 = 0;
-+		regs->msr &= ~MSR_DE;
-+#else
-+		regs->msr &= ~MSR_SE;
-+#endif
-+	}
-+	clear_tsk_thread_flag(task, TIF_SINGLESTEP);
-+}
++void tracehook_enable_single_step(struct task_struct *task);
++void tracehook_disable_single_step(struct task_struct *task);
 +
 +static inline int tracehook_single_step_enabled(struct task_struct *tsk)
 +{
@@ -4034,15 +3739,13 @@
 +
 +static inline void tracehook_abort_syscall(struct pt_regs *regs)
 +{
-+	regs->orig_gpr3 = -1L;
++	regs->gpr[0] = -1L;
 +}
 +
 +
 +#endif
-Index: b/include/asm-x86_64/tracehook.h
-===================================================================
---- /dev/null
-+++ b/include/asm-x86_64/tracehook.h
+--- linux-2.6/include/asm-x86_64/tracehook.h
++++ linux-2.6/include/asm-x86_64/tracehook.h
 @@ -0,0 +1,51 @@
 +/*
 + * Tracing hooks, x86-64 CPU support
@@ -4095,31 +3798,27 @@
 +}
 +
 +#endif
-Index: b/include/asm-x86_64/thread_info.h
-===================================================================
---- a/include/asm-x86_64/thread_info.h
-+++ b/include/asm-x86_64/thread_info.h
+--- linux-2.6/include/asm-x86_64/thread_info.h
++++ linux-2.6/include/asm-x86_64/thread_info.h
 @@ -115,7 +115,7 @@ static inline struct thread_info *stack_
- #define TIF_SYSCALL_AUDIT	7	/* syscall auditing active */
  #define TIF_SECCOMP		8	/* secure computing */
  #define TIF_RESTORE_SIGMASK	9	/* restore signal mask in do_signal */
+ #define TIF_MCE_NOTIFY		10	/* notify userspace of an MCE */
 -/* 16 free */
 +#define TIF_FORCED_TF		16	/* true if TF in eflags artificially */
  #define TIF_IA32		17	/* 32bit process */ 
  #define TIF_FORK		18	/* ret_from_fork */
  #define TIF_ABI_PENDING		19
 @@ -133,6 +133,7 @@ static inline struct thread_info *stack_
- #define _TIF_SYSCALL_AUDIT	(1<<TIF_SYSCALL_AUDIT)
  #define _TIF_SECCOMP		(1<<TIF_SECCOMP)
  #define _TIF_RESTORE_SIGMASK	(1<<TIF_RESTORE_SIGMASK)
+ #define _TIF_MCE_NOTIFY		(1<<TIF_MCE_NOTIFY)
 +#define _TIF_FORCED_TF		(1<<TIF_FORCED_TF)
  #define _TIF_IA32		(1<<TIF_IA32)
  #define _TIF_FORK		(1<<TIF_FORK)
  #define _TIF_ABI_PENDING	(1<<TIF_ABI_PENDING)
-Index: b/drivers/connector/cn_proc.c
-===================================================================
---- a/drivers/connector/cn_proc.c
-+++ b/drivers/connector/cn_proc.c
+--- linux-2.6/drivers/connector/cn_proc.c
++++ linux-2.6/drivers/connector/cn_proc.c
 @@ -63,8 +63,8 @@ void proc_fork_connector(struct task_str
  	ktime_get_ts(&ts); /* get high res monotonic timestamp */
  	put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
@@ -4131,10 +3830,8 @@
  	ev->event_data.fork.child_pid = task->pid;
  	ev->event_data.fork.child_tgid = task->tgid;
  
-Index: b/mm/nommu.c
-===================================================================
---- a/mm/nommu.c
-+++ b/mm/nommu.c
+--- linux-2.6/mm/nommu.c
++++ linux-2.6/mm/nommu.c
 @@ -20,7 +20,7 @@
  #include <linux/pagemap.h>
  #include <linux/slab.h>
@@ -4144,7 +3841,7 @@
  #include <linux/blkdev.h>
  #include <linux/backing-dev.h>
  #include <linux/mount.h>
-@@ -682,7 +682,7 @@ static unsigned long determine_vm_flags(
+@@ -705,7 +705,7 @@ static unsigned long determine_vm_flags(
  	 * it's being traced - otherwise breakpoints set in it may interfere
  	 * with another untraced process
  	 */

linux-2.6-wireless-pending.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.4 -r 1.5 linux-2.6-wireless-pending.patch
Index: linux-2.6-wireless-pending.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-wireless-pending.patch,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- linux-2.6-wireless-pending.patch	27 Sep 2007 15:33:19 -0000	1.4
+++ linux-2.6-wireless-pending.patch	10 Oct 2007 21:22:57 -0000	1.5
@@ -1,6 +1,6 @@
 diff -up linux-2.6.22.noarch/CREDITS.orig linux-2.6.22.noarch/CREDITS
---- linux-2.6.22.noarch/CREDITS.orig	2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/CREDITS	2007-09-27 11:00:31.000000000 -0400
+--- linux-2.6.22.noarch/CREDITS.orig	2007-09-26 19:41:26.000000000 -0400
++++ linux-2.6.22.noarch/CREDITS	2007-09-26 19:49:37.000000000 -0400
 @@ -665,6 +665,11 @@ D: Minor updates to SCSI types, added /p
  S: (ask for current address)
  S: USA
@@ -38,7 +38,7 @@
  N: John G Dorsey
  E: john+ at cs.cmu.edu
  D: ARM Linux ports to Assabet/Neponset, Spot
-@@ -3516,6 +3532,12 @@ S: Maastrichterweg 63
+@@ -3517,6 +3533,12 @@ S: Maastrichterweg 63
  S: 5554 GG Valkenswaard
  S: The Netherlands
  
@@ -51,7 +51,7 @@
  N: Peter Shaobo Wang
  E: pwang at mmdcorp.com
  W: http://www.mmdcorp.com/pw/linux
-@@ -3650,6 +3672,15 @@ S: Alte Regensburger Str. 11a
+@@ -3651,6 +3673,15 @@ S: Alte Regensburger Str. 11a
  S: 93149 Nittenau
  S: Germany
  
@@ -69,8 +69,8 @@
  D: Linux System Administrator's Guide, author, former maintainer
 diff -up linux-2.6.22.noarch/include/linux/nl80211.h.orig linux-2.6.22.noarch/include/linux/nl80211.h
 --- linux-2.6.22.noarch/include/linux/nl80211.h.orig	2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/include/linux/nl80211.h	2007-09-27 11:10:41.000000000 -0400
-@@ -7,7 +7,113 @@
++++ linux-2.6.22.noarch/include/linux/nl80211.h	2007-09-26 19:49:38.000000000 -0400
+@@ -7,7 +7,97 @@
   */
  
  /**
@@ -128,22 +128,6 @@
 +	NL80211_CMD_MAX = __NL80211_CMD_AFTER_LAST - 1
 +};
 +
-+/**
-+ * enum nl80211_multicast_groups - multicast groups for nl80211
-+ * @NL80211_GROUP_CONFIG: members of this group are notified of
-+ *	configuration changes
-+ */
-+enum nl80211_multicast_groups {
-+	/* be notified of configuration changes like wiphy renames */
-+	NL80211_GROUP_CONFIG,
-+
-+	/* add groups here */
-+
-+	/* keep last */
-+	__NL80211_GROUP_AFTER_LAST
-+};
-+#define NL80211_GROUP_MAX (__NL80211_GROUP_AFTER_LAST - 1)
-+
 +
 +/**
 + * enum nl80211_attrs - nl80211 netlink attributes
@@ -184,7 +168,7 @@
   * @NL80211_IFTYPE_UNSPECIFIED: unspecified type, driver decides
   * @NL80211_IFTYPE_ADHOC: independent BSS member
   * @NL80211_IFTYPE_STATION: managed BSS member
-@@ -15,9 +121,10 @@
+@@ -15,9 +105,10 @@
   * @NL80211_IFTYPE_AP_VLAN: VLAN interface for access points
   * @NL80211_IFTYPE_WDS: wireless distribution interface
   * @NL80211_IFTYPE_MONITOR: monitor interface receiving all frames
@@ -196,7 +180,7 @@
   * to set the type of an interface.
   *
   */
-@@ -31,8 +138,8 @@ enum nl80211_iftype {
+@@ -31,8 +122,8 @@ enum nl80211_iftype {
  	NL80211_IFTYPE_MONITOR,
  
  	/* keep last */
@@ -208,9 +192,9 @@
  
  #endif /* __LINUX_NL80211_H */
 diff -up linux-2.6.22.noarch/include/linux/mod_devicetable.h.orig linux-2.6.22.noarch/include/linux/mod_devicetable.h
---- linux-2.6.22.noarch/include/linux/mod_devicetable.h.orig	2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/include/linux/mod_devicetable.h	2007-09-27 11:00:31.000000000 -0400
-@@ -333,4 +333,19 @@ struct parisc_device_id {
+--- linux-2.6.22.noarch/include/linux/mod_devicetable.h.orig	2007-09-26 19:41:35.000000000 -0400
++++ linux-2.6.22.noarch/include/linux/mod_devicetable.h	2007-09-26 19:49:38.000000000 -0400
+@@ -340,4 +340,19 @@ struct parisc_device_id {
  #define PA_HVERSION_ANY_ID	0xffff
  #define PA_SVERSION_ANY_ID	0xffffffff
  
@@ -231,8 +215,8 @@
 +
  #endif /* LINUX_MOD_DEVICETABLE_H */
 diff -up /dev/null linux-2.6.22.noarch/include/linux/ssb/ssb_driver_chipcommon.h
---- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/include/linux/ssb/ssb_driver_chipcommon.h	2007-09-27 11:00:31.000000000 -0400
+--- /dev/null	2007-09-25 08:26:55.562976333 -0400
++++ linux-2.6.22.noarch/include/linux/ssb/ssb_driver_chipcommon.h	2007-09-26 19:49:38.000000000 -0400
 @@ -0,0 +1,396 @@
 +#ifndef LINUX_SSB_CHIPCO_H_
 +#define LINUX_SSB_CHIPCO_H_
@@ -631,8 +615,8 @@
 +
 +#endif /* LINUX_SSB_CHIPCO_H_ */
 diff -up /dev/null linux-2.6.22.noarch/include/linux/ssb/ssb_driver_extif.h
---- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/include/linux/ssb/ssb_driver_extif.h	2007-09-27 11:00:31.000000000 -0400
+--- /dev/null	2007-09-25 08:26:55.562976333 -0400
++++ linux-2.6.22.noarch/include/linux/ssb/ssb_driver_extif.h	2007-09-26 19:49:38.000000000 -0400
 @@ -0,0 +1,204 @@
 +/*
 + * Hardware-specific External Interface I/O core definitions
@@ -839,8 +823,8 @@
 +#endif /* CONFIG_SSB_DRIVER_EXTIF */
 +#endif /* LINUX_SSB_EXTIFCORE_H_ */
 diff -up /dev/null linux-2.6.22.noarch/include/linux/ssb/ssb_driver_mips.h
---- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/include/linux/ssb/ssb_driver_mips.h	2007-09-27 11:00:31.000000000 -0400
+--- /dev/null	2007-09-25 08:26:55.562976333 -0400
++++ linux-2.6.22.noarch/include/linux/ssb/ssb_driver_mips.h	2007-09-26 19:49:38.000000000 -0400
 @@ -0,0 +1,46 @@
 +#ifndef LINUX_SSB_MIPSCORE_H_
 +#define LINUX_SSB_MIPSCORE_H_
@@ -889,8 +873,8 @@
 +
 +#endif /* LINUX_SSB_MIPSCORE_H_ */
 diff -up /dev/null linux-2.6.22.noarch/include/linux/ssb/ssb_regs.h
---- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/include/linux/ssb/ssb_regs.h	2007-09-27 11:00:31.000000000 -0400
+--- /dev/null	2007-09-25 08:26:55.562976333 -0400
++++ linux-2.6.22.noarch/include/linux/ssb/ssb_regs.h	2007-09-26 19:49:38.000000000 -0400
 @@ -0,0 +1,292 @@
 +#ifndef LINUX_SSB_REGS_H_
 +#define LINUX_SSB_REGS_H_
@@ -1185,8 +1169,8 @@
 +
 +#endif /* LINUX_SSB_REGS_H_ */
 diff -up /dev/null linux-2.6.22.noarch/include/linux/ssb/ssb_driver_pci.h
---- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/include/linux/ssb/ssb_driver_pci.h	2007-09-27 11:00:31.000000000 -0400
+--- /dev/null	2007-09-25 08:26:55.562976333 -0400
++++ linux-2.6.22.noarch/include/linux/ssb/ssb_driver_pci.h	2007-09-26 19:49:38.000000000 -0400
 @@ -0,0 +1,106 @@
 +#ifndef LINUX_SSB_PCICORE_H_
 +#define LINUX_SSB_PCICORE_H_
@@ -1295,8 +1279,8 @@
 +#endif /* CONFIG_SSB_DRIVER_PCICORE */
 +#endif /* LINUX_SSB_PCICORE_H_ */
 diff -up /dev/null linux-2.6.22.noarch/include/linux/ssb/ssb.h
---- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/include/linux/ssb/ssb.h	2007-09-27 11:00:31.000000000 -0400
+--- /dev/null	2007-09-25 08:26:55.562976333 -0400
++++ linux-2.6.22.noarch/include/linux/ssb/ssb.h	2007-09-26 19:49:38.000000000 -0400
 @@ -0,0 +1,424 @@
 +#ifndef LINUX_SSB_H_
 +#define LINUX_SSB_H_
@@ -1723,8 +1707,8 @@
 +
 +#endif /* LINUX_SSB_H_ */
 diff -up linux-2.6.22.noarch/include/net/cfg80211.h.orig linux-2.6.22.noarch/include/net/cfg80211.h
---- linux-2.6.22.noarch/include/net/cfg80211.h.orig	2007-09-27 10:55:30.000000000 -0400
-+++ linux-2.6.22.noarch/include/net/cfg80211.h	2007-09-27 11:00:31.000000000 -0400
+--- linux-2.6.22.noarch/include/net/cfg80211.h.orig	2007-09-26 19:41:35.000000000 -0400
++++ linux-2.6.22.noarch/include/net/cfg80211.h	2007-09-26 19:49:38.000000000 -0400
 @@ -3,15 +3,15 @@
  
  #include <linux/netlink.h>
@@ -1762,8 +1746,8 @@
  
  #endif /* __NET_CFG80211_H */
 diff -up linux-2.6.22.noarch/include/net/mac80211.h.orig linux-2.6.22.noarch/include/net/mac80211.h
---- linux-2.6.22.noarch/include/net/mac80211.h.orig	2007-09-27 10:55:30.000000000 -0400
-+++ linux-2.6.22.noarch/include/net/mac80211.h	2007-09-27 11:00:31.000000000 -0400
+--- linux-2.6.22.noarch/include/net/mac80211.h.orig	2007-09-26 19:41:35.000000000 -0400
++++ linux-2.6.22.noarch/include/net/mac80211.h	2007-09-26 19:49:59.000000000 -0400
 @@ -1,7 +1,9 @@
  /*
 - * Low-level hardware driver -- IEEE 802.11 driver (80211.o) interface
@@ -2532,7 +2516,7 @@
  {
 diff -up linux-2.6.22.noarch/include/net/ieee80211softmac.h.orig linux-2.6.22.noarch/include/net/ieee80211softmac.h
 --- linux-2.6.22.noarch/include/net/ieee80211softmac.h.orig	2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/include/net/ieee80211softmac.h	2007-09-27 11:00:31.000000000 -0400
++++ linux-2.6.22.noarch/include/net/ieee80211softmac.h	2007-09-26 19:49:59.000000000 -0400
 @@ -229,6 +229,8 @@ struct ieee80211softmac_device {
  	/* this lock protects this structure */
  	spinlock_t lock;
@@ -2544,7 +2528,7 @@
  
 diff -up linux-2.6.22.noarch/include/net/iw_handler.h.orig linux-2.6.22.noarch/include/net/iw_handler.h
[...3920 lines suppressed...]
-+++ linux-2.6.22.noarch/drivers/net/wireless/adm8211.c	2007-09-27 11:00:32.000000000 -0400
+--- /dev/null	2007-09-25 08:26:55.562976333 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/adm8211.c	2007-09-26 19:49:37.000000000 -0400
 @@ -0,0 +1,2063 @@
 +
 +/*
@@ -124251,8 +125736,8 @@
 +module_init(adm8211_init);
 +module_exit(adm8211_exit);
 diff -up /dev/null linux-2.6.22.noarch/drivers/net/wireless/p54usb.h
---- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/p54usb.h	2007-09-27 11:00:32.000000000 -0400
+--- /dev/null	2007-09-25 08:26:55.562976333 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/p54usb.h	2007-09-26 19:49:38.000000000 -0400
 @@ -0,0 +1,133 @@
 +#ifndef PRISM54USB_H
 +#define PRISM54USB_H
@@ -124389,7 +125874,7 @@
 +#endif /* PRISM54USB_H */
 diff -up linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_wlan.h.orig linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_wlan.h
 --- linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_wlan.h.orig	2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_wlan.h	2007-09-27 11:00:32.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_wlan.h	2007-09-26 19:49:38.000000000 -0400
 @@ -3,6 +3,7 @@
  
  #include <linux/wireless.h>
@@ -124408,8 +125893,8 @@
  	/* txfid, intransmitfid, next_txtid, and next_alloc are protected by
  	 * txfidlock */
 diff -up linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_cs.c.orig linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_cs.c
---- linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_cs.c.orig	2007-09-27 10:55:30.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_cs.c	2007-09-27 11:00:32.000000000 -0400
+--- linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_cs.c.orig	2007-09-26 19:41:32.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_cs.c	2007-09-26 19:49:37.000000000 -0400
 @@ -272,7 +272,7 @@ static int sandisk_enable_wireless(struc
  {
  	int res, ret = 0;
@@ -124421,7 +125906,7 @@
  	cisparse_t *parse = NULL;
 diff -up linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_hw.c.orig linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_hw.c
 --- linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_hw.c.orig	2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_hw.c	2007-09-27 11:00:32.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_hw.c	2007-09-26 19:49:37.000000000 -0400
 @@ -825,7 +825,7 @@ static int hfa384x_get_rid(struct net_de
  	    local->hw_downloading)
  		return -ENODEV;
@@ -124492,8 +125977,8 @@
  
  	/* Send disconnect event, e.g., to trigger reassociation after resume
 diff -up linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_ioctl.c.orig linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_ioctl.c
---- linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_ioctl.c.orig	2007-09-27 10:55:30.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_ioctl.c	2007-09-27 11:00:32.000000000 -0400
+--- linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_ioctl.c.orig	2007-09-26 19:41:32.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_ioctl.c	2007-09-26 19:49:38.000000000 -0400
 @@ -3088,7 +3088,7 @@ static int prism2_ioctl_priv_download(lo
  static int prism2_set_genericelement(struct net_device *dev, u8 *elem,
  				     size_t len)
@@ -124558,8 +126043,8 @@
  	struct iw_mlme *mlme = (struct iw_mlme *) extra;
  	u16 reason;
 diff -up /dev/null linux-2.6.22.noarch/drivers/ssb/b43_pci_bridge.c
---- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/ssb/b43_pci_bridge.c	2007-09-27 11:00:32.000000000 -0400
+--- /dev/null	2007-09-25 08:26:55.562976333 -0400
++++ linux-2.6.22.noarch/drivers/ssb/b43_pci_bridge.c	2007-09-26 19:49:59.000000000 -0400
 @@ -0,0 +1,48 @@
 +/*
 + * Broadcom 43xx PCI-SSB bridge module
@@ -124610,8 +126095,8 @@
 +	ssb_pcihost_unregister(&b43_pci_bridge_driver);
 +}
 diff -up /dev/null linux-2.6.22.noarch/drivers/ssb/Makefile
---- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/ssb/Makefile	2007-09-27 11:00:32.000000000 -0400
+--- /dev/null	2007-09-25 08:26:55.562976333 -0400
++++ linux-2.6.22.noarch/drivers/ssb/Makefile	2007-09-26 19:49:38.000000000 -0400
 @@ -0,0 +1,18 @@
 +# core
 +ssb-y					+= main.o scan.o
@@ -124632,8 +126117,8 @@
 +
 +obj-$(CONFIG_SSB)			+= ssb.o
 diff -up /dev/null linux-2.6.22.noarch/drivers/ssb/pcmcia.c
---- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/ssb/pcmcia.c	2007-09-27 11:00:32.000000000 -0400
+--- /dev/null	2007-09-25 08:26:55.562976333 -0400
++++ linux-2.6.22.noarch/drivers/ssb/pcmcia.c	2007-09-26 19:49:38.000000000 -0400
 @@ -0,0 +1,271 @@
 +/*
 + * Sonics Silicon Backplane
@@ -124907,8 +126392,8 @@
 +	return -ENODEV;
 +}
 diff -up /dev/null linux-2.6.22.noarch/drivers/ssb/main.c
---- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/ssb/main.c	2007-09-27 11:00:32.000000000 -0400
+--- /dev/null	2007-09-25 08:26:55.562976333 -0400
++++ linux-2.6.22.noarch/drivers/ssb/main.c	2007-09-26 19:49:38.000000000 -0400
 @@ -0,0 +1,1162 @@
 +/*
 + * Sonics Silicon Backplane
@@ -126073,8 +127558,8 @@
 +}
 +module_exit(ssb_modexit)
 diff -up /dev/null linux-2.6.22.noarch/drivers/ssb/pcihost_wrapper.c
---- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/ssb/pcihost_wrapper.c	2007-09-27 11:00:32.000000000 -0400
+--- /dev/null	2007-09-25 08:26:55.562976333 -0400
++++ linux-2.6.22.noarch/drivers/ssb/pcihost_wrapper.c	2007-09-26 19:49:38.000000000 -0400
 @@ -0,0 +1,104 @@
 +/*
 + * Sonics Silicon Backplane
@@ -126181,8 +127666,8 @@
 +}
 +EXPORT_SYMBOL(ssb_pcihost_register);
 diff -up /dev/null linux-2.6.22.noarch/drivers/ssb/driver_mipscore.c
---- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/ssb/driver_mipscore.c	2007-09-27 11:00:32.000000000 -0400
+--- /dev/null	2007-09-25 08:26:55.562976333 -0400
++++ linux-2.6.22.noarch/drivers/ssb/driver_mipscore.c	2007-09-26 19:49:38.000000000 -0400
 @@ -0,0 +1,223 @@
 +/*
 + * Sonics Silicon Backplane
@@ -126408,8 +127893,8 @@
 +	ssb_mips_flash_detect(mcore);
 +}
 diff -up /dev/null linux-2.6.22.noarch/drivers/ssb/ssb_private.h
---- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/ssb/ssb_private.h	2007-09-27 11:00:32.000000000 -0400
+--- /dev/null	2007-09-25 08:26:55.562976333 -0400
++++ linux-2.6.22.noarch/drivers/ssb/ssb_private.h	2007-09-26 19:49:38.000000000 -0400
 @@ -0,0 +1,136 @@
 +#ifndef LINUX_SSB_PRIVATE_H_
 +#define LINUX_SSB_PRIVATE_H_
@@ -126548,8 +128033,8 @@
 +
 +#endif /* LINUX_SSB_PRIVATE_H_ */
 diff -up /dev/null linux-2.6.22.noarch/drivers/ssb/pci.c
---- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/ssb/pci.c	2007-09-27 11:00:32.000000000 -0400
+--- /dev/null	2007-09-25 08:26:55.562976333 -0400
++++ linux-2.6.22.noarch/drivers/ssb/pci.c	2007-09-26 19:49:59.000000000 -0400
 @@ -0,0 +1,740 @@
 +/*
 + * Sonics Silicon Backplane PCI-Hostbus related functions.
@@ -127292,8 +128777,8 @@
 +	return err;
 +}
 diff -up /dev/null linux-2.6.22.noarch/drivers/ssb/driver_chipcommon.c
---- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/ssb/driver_chipcommon.c	2007-09-27 11:00:32.000000000 -0400
+--- /dev/null	2007-09-25 08:26:55.562976333 -0400
++++ linux-2.6.22.noarch/drivers/ssb/driver_chipcommon.c	2007-09-26 19:49:59.000000000 -0400
 @@ -0,0 +1,445 @@
 +/*
 + * Sonics Silicon Backplane
@@ -127741,8 +129226,8 @@
 +}
 +#endif /* CONFIG_SSB_SERIAL */
 diff -up /dev/null linux-2.6.22.noarch/drivers/ssb/Kconfig
---- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/ssb/Kconfig	2007-09-27 11:00:32.000000000 -0400
+--- /dev/null	2007-09-25 08:26:55.562976333 -0400
++++ linux-2.6.22.noarch/drivers/ssb/Kconfig	2007-09-26 19:49:38.000000000 -0400
 @@ -0,0 +1,117 @@
 +menu "Sonics Silicon Backplane"
 +
@@ -127862,8 +129347,8 @@
 +
 +endmenu
 diff -up /dev/null linux-2.6.22.noarch/drivers/ssb/scan.c
---- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/ssb/scan.c	2007-09-27 11:00:32.000000000 -0400
+--- /dev/null	2007-09-25 08:26:55.562976333 -0400
++++ linux-2.6.22.noarch/drivers/ssb/scan.c	2007-09-26 19:49:38.000000000 -0400
 @@ -0,0 +1,413 @@
 +/*
 + * Sonics Silicon Backplane
@@ -128279,8 +129764,8 @@
 +	goto out;
 +}
 diff -up /dev/null linux-2.6.22.noarch/drivers/ssb/driver_extif.c
---- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/ssb/driver_extif.c	2007-09-27 11:00:32.000000000 -0400
+--- /dev/null	2007-09-25 08:26:55.562976333 -0400
++++ linux-2.6.22.noarch/drivers/ssb/driver_extif.c	2007-09-26 19:49:38.000000000 -0400
 @@ -0,0 +1,129 @@
 +/*
 + * Sonics Silicon Backplane
@@ -128412,8 +129897,8 @@
 +}
 +
 diff -up /dev/null linux-2.6.22.noarch/drivers/ssb/driver_pcicore.c
---- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/drivers/ssb/driver_pcicore.c	2007-09-27 11:00:32.000000000 -0400
+--- /dev/null	2007-09-25 08:26:55.562976333 -0400
++++ linux-2.6.22.noarch/drivers/ssb/driver_pcicore.c	2007-09-26 19:49:38.000000000 -0400
 @@ -0,0 +1,576 @@
 +/*
 + * Sonics Silicon Backplane

linux-2.6-wireless.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.12 -r 1.13 linux-2.6-wireless.patch
Index: linux-2.6-wireless.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-wireless.patch,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- linux-2.6-wireless.patch	27 Sep 2007 15:33:19 -0000	1.12
+++ linux-2.6-wireless.patch	10 Oct 2007 21:22:58 -0000	1.13
@@ -1,5366 +1,24 @@
-diff -up linux-2.6.22.noarch/include/linux/ieee80211.h.orig linux-2.6.22.noarch/include/linux/ieee80211.h
---- linux-2.6.22.noarch/include/linux/ieee80211.h.orig	2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/include/linux/ieee80211.h	2007-09-27 10:50:46.000000000 -0400
-@@ -227,6 +227,17 @@ struct ieee80211_cts {
- #define WLAN_CAPABILITY_SHORT_SLOT_TIME	(1<<10)
- #define WLAN_CAPABILITY_DSSS_OFDM	(1<<13)
- 
-+/* 802.11g ERP information element */
-+#define WLAN_ERP_NON_ERP_PRESENT (1<<0)
-+#define WLAN_ERP_USE_PROTECTION (1<<1)
-+#define WLAN_ERP_BARKER_PREAMBLE (1<<2)
-+
-+/* WLAN_ERP_BARKER_PREAMBLE values */
-+enum {
-+	WLAN_ERP_PREAMBLE_SHORT = 0,
-+	WLAN_ERP_PREAMBLE_LONG = 1,
-+};
-+
- /* Status codes */
- enum ieee80211_statuscode {
- 	WLAN_STATUS_SUCCESS = 0,
-diff -up linux-2.6.22.noarch/include/net/cfg80211.h.orig linux-2.6.22.noarch/include/net/cfg80211.h
---- linux-2.6.22.noarch/include/net/cfg80211.h.orig	2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/include/net/cfg80211.h	2007-09-27 10:50:46.000000000 -0400
-@@ -11,6 +11,44 @@
-  * Copyright 2006 Johannes Berg <johannes at sipsolutions.net>
-  */
- 
-+
-+/* Radiotap header iteration
-+ *   implemented in net/wireless/radiotap.c
-+ *   docs in Documentation/networking/radiotap-headers.txt
-+ */
-+/**
-+ * struct ieee80211_radiotap_iterator - tracks walk thru present radiotap args
-+ * @rtheader: pointer to the radiotap header we are walking through
-+ * @max_length: length of radiotap header in cpu byte ordering
-+ * @this_arg_index: IEEE80211_RADIOTAP_... index of current arg
-+ * @this_arg: pointer to current radiotap arg
-+ * @arg_index: internal next argument index
-+ * @arg: internal next argument pointer
-+ * @next_bitmap: internal pointer to next present u32
-+ * @bitmap_shifter: internal shifter for curr u32 bitmap, b0 set == arg present
-+ */
-+
-+struct ieee80211_radiotap_iterator {
-+	struct ieee80211_radiotap_header *rtheader;
-+	int max_length;
-+	int this_arg_index;
-+	u8 *this_arg;
-+
-+	int arg_index;
-+	u8 *arg;
-+	__le32 *next_bitmap;
-+	u32 bitmap_shifter;
-+};
-+
-+extern int ieee80211_radiotap_iterator_init(
-+   struct ieee80211_radiotap_iterator *iterator,
-+   struct ieee80211_radiotap_header *radiotap_header,
-+   int max_length);
-+
-+extern int ieee80211_radiotap_iterator_next(
-+   struct ieee80211_radiotap_iterator *iterator);
-+
-+
- /* from net/wireless.h */
- struct wiphy;
- 
-diff -up linux-2.6.22.noarch/include/net/mac80211.h.orig linux-2.6.22.noarch/include/net/mac80211.h
---- linux-2.6.22.noarch/include/net/mac80211.h.orig	2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/include/net/mac80211.h	2007-09-27 10:50:46.000000000 -0400
-@@ -347,9 +347,16 @@ enum ieee80211_if_types {
-  * @mac_addr: pointer to MAC address of the interface. This pointer is valid
-  *	until the interface is removed (i.e. it cannot be used after
-  *	remove_interface() callback was called for this interface).
-+ *	This pointer will be %NULL for monitor interfaces, be careful.
-  *
-  * This structure is used in add_interface() and remove_interface()
-  * callbacks of &struct ieee80211_hw.
-+ *
-+ * When you allow multiple interfaces to be added to your PHY, take care
-+ * that the hardware can actually handle multiple MAC addresses. However,
-+ * also take care that when there's no interface left with mac_addr != %NULL
-+ * you remove the MAC address from the device to avoid acknowledging packets
-+ * in pure monitor mode.
-  */
- struct ieee80211_if_init_conf {
- 	int if_id;
-@@ -574,10 +581,11 @@ struct ieee80211_ops {
- 	 * to returning zero. By returning non-zero addition of the interface
- 	 * is inhibited. Unless monitor_during_oper is set, it is guaranteed
- 	 * that monitor interfaces and normal interfaces are mutually
--	 * exclusive. The open() handler is called after add_interface()
--	 * if this is the first device added. At least one of the open()
--	 * open() and add_interface() callbacks has to be assigned. If
--	 * add_interface() is NULL, one STA interface is permitted only. */
-+	 * exclusive. If assigned, the open() handler is called after
-+	 * add_interface() if this is the first device added. The
-+	 * add_interface() callback has to be assigned because it is the only
-+	 * way to obtain the requested MAC address for any interface.
-+	 */
- 	int (*add_interface)(struct ieee80211_hw *hw,
- 			     struct ieee80211_if_init_conf *conf);
- 
-@@ -921,12 +929,6 @@ struct sk_buff *
- ieee80211_get_buffered_bc(struct ieee80211_hw *hw, int if_id,
- 			  struct ieee80211_tx_control *control);
- 
--/* Low level drivers that have their own MLME and MAC indicate
-- * the aid for an associating station with this call */
--int ieee80211_set_aid_for_sta(struct ieee80211_hw *hw,
--			      u8 *peer_address, u16 aid);
--
--
- /* Given an sk_buff with a raw 802.11 header at the data pointer this function
-  * returns the 802.11 header length in bytes (not including encryption
-  * headers). If the data in the sk_buff is too short to contain a valid 802.11
-diff -up linux-2.6.22.noarch/net/ieee80211/ieee80211_wx.c.orig linux-2.6.22.noarch/net/ieee80211/ieee80211_wx.c
---- linux-2.6.22.noarch/net/ieee80211/ieee80211_wx.c.orig	2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/net/ieee80211/ieee80211_wx.c	2007-09-27 10:50:46.000000000 -0400
-@@ -90,14 +90,11 @@ static char *ieee80211_translate_scan(st
- 	}
- 
- 	/* Add channel and frequency */
-+	/* Note : userspace automatically computes channel using iwrange */
- 	iwe.cmd = SIOCGIWFREQ;
--	iwe.u.freq.m = network->channel;
--	iwe.u.freq.e = 0;
--	iwe.u.freq.i = 0;
--	start = iwe_stream_add_event(start, stop, &iwe, IW_EV_FREQ_LEN);
--
- 	iwe.u.freq.m = ieee80211_channel_to_freq(ieee, network->channel);
- 	iwe.u.freq.e = 6;
-+	iwe.u.freq.i = 0;
- 	start = iwe_stream_add_event(start, stop, &iwe, IW_EV_FREQ_LEN);
- 
- 	/* Add encryption capability */
-diff -up linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_assoc.c.orig linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_assoc.c
---- linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_assoc.c.orig	2007-09-27 10:46:59.000000000 -0400
-+++ linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_assoc.c	2007-09-27 10:53:45.000000000 -0400
-@@ -271,8 +271,9 @@ ieee80211softmac_assoc_work(struct work_
- 			 */
- 			dprintk(KERN_INFO PFX "Associate: Scanning for networks first.\n");
- 			ieee80211softmac_notify(mac->dev, IEEE80211SOFTMAC_EVENT_SCAN_FINISHED, ieee80211softmac_assoc_notify_scan, NULL);
--			if (ieee80211softmac_start_scan(mac))
-+			if (ieee80211softmac_start_scan(mac)) {
- 				dprintk(KERN_INFO PFX "Associate: failed to initiate scan. Is device up?\n");
-+			}
- 			goto out;
- 		} else {
- 			mac->associnfo.associating = 0;
 diff -up linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_wx.c.orig linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_wx.c
---- linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_wx.c.orig	2007-09-27 10:46:57.000000000 -0400
-+++ linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_wx.c	2007-09-27 10:53:45.000000000 -0400
-@@ -70,44 +70,30 @@ ieee80211softmac_wx_set_essid(struct net
- 			      char *extra)
- {
- 	struct ieee80211softmac_device *sm = ieee80211_priv(net_dev);
--	struct ieee80211softmac_network *n;
- 	struct ieee80211softmac_auth_queue_item *authptr;
- 	int length = 0;
- 
- check_assoc_again:
- 	mutex_lock(&sm->associnfo.mutex);
--	/* Check if we're already associating to this or another network
--	 * If it's another network, cancel and start over with our new network
--	 * If it's our network, ignore the change, we're already doing it!
--	 */
- 	if((sm->associnfo.associating || sm->associnfo.associated) &&
- 	   (data->essid.flags && data->essid.length)) {
--		/* Get the associating network */
--		n = ieee80211softmac_get_network_by_bssid(sm, sm->associnfo.bssid);
--		if(n && n->essid.len == data->essid.length &&
--		   !memcmp(n->essid.data, extra, n->essid.len)) {
--			dprintk(KERN_INFO PFX "Already associating or associated to "MAC_FMT"\n",
--				MAC_ARG(sm->associnfo.bssid));
--			goto out;
--		} else {
--			dprintk(KERN_INFO PFX "Canceling existing associate request!\n");
--			/* Cancel assoc work */
--			cancel_delayed_work(&sm->associnfo.work);
--			/* We don't have to do this, but it's a little cleaner */
--			list_for_each_entry(authptr, &sm->auth_queue, list)
--				cancel_delayed_work(&authptr->work);
--			sm->associnfo.bssvalid = 0;
--			sm->associnfo.bssfixed = 0;
--			sm->associnfo.associating = 0;
--			sm->associnfo.associated = 0;
--			/* We must unlock to avoid deadlocks with the assoc workqueue
--			 * on the associnfo.mutex */
[...4993 lines suppressed...]
-+to appear on received packets.  Currently three kinds of argument are used by
-+the injection code, although it knows to skip any other arguments that are
-+present (facilitating replay of captured radiotap headers directly):
-+
-+ - IEEE80211_RADIOTAP_RATE - u8 arg in 500kbps units (0x02 --> 1Mbps)
-+
-+ - IEEE80211_RADIOTAP_ANTENNA - u8 arg, 0x00 = ant1, 0x01 = ant2
-+
-+ - IEEE80211_RADIOTAP_DBM_TX_POWER - u8 arg, dBm
-+
-+Here is an example valid radiotap header defining these three parameters
-+
-+	0x00, 0x00, // <-- radiotap version
-+	0x0b, 0x00, // <- radiotap header length
-+	0x04, 0x0c, 0x00, 0x00, // <-- bitmap
-+	0x6c, // <-- rate
-+	0x0c, //<-- tx power
-+	0x01 //<-- antenna
-+
-+The ieee80211 header follows immediately afterwards, looking for example like
-+this:
-+
-+	0x08, 0x01, 0x00, 0x00,
-+	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-+	0x13, 0x22, 0x33, 0x44, 0x55, 0x66,
-+	0x13, 0x22, 0x33, 0x44, 0x55, 0x66,
-+	0x10, 0x86
-+
-+Then lastly there is the payload.
-+
-+After composing the packet contents, it is sent by send()-ing it to a logical
-+mac80211 interface that is in Monitor mode.  Libpcap can also be used,
-+(which is easier than doing the work to bind the socket to the right
-+interface), along the following lines:
-+
-+	ppcap = pcap_open_live(szInterfaceName, 800, 1, 20, szErrbuf);
-+...
-+	r = pcap_inject(ppcap, u8aSendBuffer, nLength);
-+
-+You can also find sources for a complete inject test applet here:
-+
-+http://penumbra.warmcat.com/_twk/tiki-index.php?page=packetspammer
-+
-+Andy Green <andy at warmcat.com>
-diff -up /dev/null linux-2.6.22.noarch/Documentation/networking/radiotap-headers.txt
---- /dev/null	2007-09-27 08:31:24.563724082 -0400
-+++ linux-2.6.22.noarch/Documentation/networking/radiotap-headers.txt	2007-09-27 10:50:46.000000000 -0400
-@@ -0,0 +1,152 @@
-+How to use radiotap headers
-+===========================
-+
-+Pointer to the radiotap include file
-+------------------------------------
-+
-+Radiotap headers are variable-length and extensible, you can get most of the
-+information you need to know on them from:
-+
-+./include/net/ieee80211_radiotap.h
-+
-+This document gives an overview and warns on some corner cases.
-+
-+
-+Structure of the header
-+-----------------------
-+
-+There is a fixed portion at the start which contains a u32 bitmap that defines
-+if the possible argument associated with that bit is present or not.  So if b0
-+of the it_present member of ieee80211_radiotap_header is set, it means that
-+the header for argument index 0 (IEEE80211_RADIOTAP_TSFT) is present in the
-+argument area.
-+
-+   < 8-byte ieee80211_radiotap_header >
-+   [ <possible argument bitmap extensions ... > ]
-+   [ <argument> ... ]
-+
-+At the moment there are only 13 possible argument indexes defined, but in case
-+we run out of space in the u32 it_present member, it is defined that b31 set
-+indicates that there is another u32 bitmap following (shown as "possible
-+argument bitmap extensions..." above), and the start of the arguments is moved
-+forward 4 bytes each time.
-+
-+Note also that the it_len member __le16 is set to the total number of bytes
-+covered by the ieee80211_radiotap_header and any arguments following.
-+
-+
-+Requirements for arguments
-+--------------------------
-+
-+After the fixed part of the header, the arguments follow for each argument
-+index whose matching bit is set in the it_present member of
-+ieee80211_radiotap_header.
-+
-+ - the arguments are all stored little-endian!
-+
-+ - the argument payload for a given argument index has a fixed size.  So
-+   IEEE80211_RADIOTAP_TSFT being present always indicates an 8-byte argument is
-+   present.  See the comments in ./include/net/ieee80211_radiotap.h for a nice
-+   breakdown of all the argument sizes
-+
-+ - the arguments must be aligned to a boundary of the argument size using
-+   padding.  So a u16 argument must start on the next u16 boundary if it isn't
-+   already on one, a u32 must start on the next u32 boundary and so on.
-+
-+ - "alignment" is relative to the start of the ieee80211_radiotap_header, ie,
-+   the first byte of the radiotap header.  The absolute alignment of that first
-+   byte isn't defined.  So even if the whole radiotap header is starting at, eg,
-+   address 0x00000003, still the first byte of the radiotap header is treated as
-+   0 for alignment purposes.
-+
-+ - the above point that there may be no absolute alignment for multibyte
-+   entities in the fixed radiotap header or the argument region means that you
-+   have to take special evasive action when trying to access these multibyte
-+   entities.  Some arches like Blackfin cannot deal with an attempt to
-+   dereference, eg, a u16 pointer that is pointing to an odd address.  Instead
-+   you have to use a kernel API get_unaligned() to dereference the pointer,
-+   which will do it bytewise on the arches that require that.
-+
-+ - The arguments for a given argument index can be a compound of multiple types
-+   together.  For example IEEE80211_RADIOTAP_CHANNEL has an argument payload
-+   consisting of two u16s of total length 4.  When this happens, the padding
-+   rule is applied dealing with a u16, NOT dealing with a 4-byte single entity.
-+
-+
-+Example valid radiotap header
-+-----------------------------
-+
-+	0x00, 0x00, // <-- radiotap version + pad byte
-+	0x0b, 0x00, // <- radiotap header length
-+	0x04, 0x0c, 0x00, 0x00, // <-- bitmap
-+	0x6c, // <-- rate (in 500kHz units)
-+	0x0c, //<-- tx power
-+	0x01 //<-- antenna
-+
-+
-+Using the Radiotap Parser
-+-------------------------
-+
-+If you are having to parse a radiotap struct, you can radically simplify the
-+job by using the radiotap parser that lives in net/wireless/radiotap.c and has
-+its prototypes available in include/net/cfg80211.h.  You use it like this:
-+
-+#include <net/cfg80211.h>
-+
-+/* buf points to the start of the radiotap header part */
-+
-+int MyFunction(u8 * buf, int buflen)
-+{
-+	int pkt_rate_100kHz = 0, antenna = 0, pwr = 0;
-+	struct ieee80211_radiotap_iterator iterator;
-+	int ret = ieee80211_radiotap_iterator_init(&iterator, buf, buflen);
-+
-+	while (!ret) {
-+
-+		ret = ieee80211_radiotap_iterator_next(&iterator);
-+
-+		if (ret)
-+			continue;
-+
-+		/* see if this argument is something we can use */
-+
-+		switch (iterator.this_arg_index) {
-+		/*
-+		 * You must take care when dereferencing iterator.this_arg
-+		 * for multibyte types... the pointer is not aligned.  Use
-+		 * get_unaligned((type *)iterator.this_arg) to dereference
-+		 * iterator.this_arg for type "type" safely on all arches.
-+		 */
-+		case IEEE80211_RADIOTAP_RATE:
-+			/* radiotap "rate" u8 is in
-+			 * 500kbps units, eg, 0x02=1Mbps
-+			 */
-+			pkt_rate_100kHz = (*iterator.this_arg) * 5;
-+			break;
-+
-+		case IEEE80211_RADIOTAP_ANTENNA:
-+			/* radiotap uses 0 for 1st ant */
-+			antenna = *iterator.this_arg);
-+			break;
-+
-+		case IEEE80211_RADIOTAP_DBM_TX_POWER:
-+			pwr = *iterator.this_arg;
-+			break;
-+
-+		default:
-+			break;
-+		}
-+	}  /* while more rt headers */
-+
-+	if (ret != -ENOENT)
-+		return TXRX_DROP;
-+
-+	/* discard the radiotap header part */
-+	buf += iterator.max_length;
-+	buflen -= iterator.max_length;
-+
-+	...
-+
-+}
-+
-+Andy Green <andy at warmcat.com>


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/sources,v
retrieving revision 1.598
retrieving revision 1.599
diff -u -r1.598 -r1.599
--- sources	26 Sep 2007 18:58:34 -0000	1.598
+++ sources	10 Oct 2007 21:22:58 -0000	1.599
@@ -1,2 +1 @@
-2e230d005c002fb3d38a3ca07c0200d0  linux-2.6.22.tar.bz2
-6e2e5112d69af5c8d78cff0479c700cd  patch-2.6.22.9.bz2
+2cc2fd4d521dc5d7cfce0d8a9d1b3472  linux-2.6.23.tar.bz2


Index: upstream
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/upstream,v
retrieving revision 1.522
retrieving revision 1.523
diff -u -r1.522 -r1.523
--- upstream	26 Sep 2007 18:58:34 -0000	1.522
+++ upstream	10 Oct 2007 21:22:58 -0000	1.523
@@ -1,2 +1 @@
-linux-2.6.22.tar.bz2
-patch-2.6.22.9.bz2
+linux-2.6.23.tar.bz2


--- linux-2.6-aacraid-ioctl-security.patch DELETED ---


--- linux-2.6-acpi-disable-cstates-in-suspend.patch DELETED ---


--- linux-2.6-acpi-kill-dmesg-spam.patch DELETED ---


--- linux-2.6-amd-fix-broken-lapic-timer-detect.patch DELETED ---


--- linux-2.6-ata-update-noncq.patch DELETED ---


--- linux-2.6-debug-extra-warnings.patch DELETED ---


--- linux-2.6-debug-must_check.patch DELETED ---


--- linux-2.6-debug-slub-debug.patch DELETED ---


--- linux-2.6-debug-sysfs-crash-debugging.patch DELETED ---


--- linux-2.6-dev-get-driver-properly.patch DELETED ---


--- linux-2.6-dmi-based-module-autoloading.patch DELETED ---


--- linux-2.6-e1000-ich9.patch DELETED ---


--- linux-2.6-genirq-fixes.patch DELETED ---


--- linux-2.6-gfs2-update.patch DELETED ---


--- linux-2.6-idr-multiple-bugfixes.patch DELETED ---


--- linux-2.6-irda-smc-remove-quirk.patch DELETED ---


--- linux-2.6-kvm-reinit-real-mode-tss.patch DELETED ---


--- linux-2.6-kvm-suspend.patch DELETED ---


--- linux-2.6-libata-2.6.23-rc8-noncq.patch DELETED ---


--- linux-2.6-libata-ata_piix_fix_pio-mwdma-programming.patch DELETED ---


--- linux-2.6-libata-pata_ali-fix-hp-detect.patch DELETED ---


--- linux-2.6-libata-pata_hpt37x-fix-2.6.22-clock-pll.patch DELETED ---


--- linux-2.6-libata-pata_it821x-dma.patch DELETED ---


--- linux-2.6-libata-pata_sis-dma-add-missing-entry.patch DELETED ---


--- linux-2.6-libata-pata_sis-fix-dma-timing.patch DELETED ---


--- linux-2.6-libata-pata_via-cable-detect.patch DELETED ---


--- linux-2.6-libata-sata_sil24-fix-irq-clearing-race.patch DELETED ---


--- linux-2.6-libata-simplify-init.patch DELETED ---


--- linux-2.6-libertas.diff DELETED ---


--- linux-2.6-lvm-snapshot-deadlock-fix.patch DELETED ---


--- linux-2.6-net-atl1-fix-typo-in-dma-setup.patch DELETED ---


--- linux-2.6-net-atl1-fix-typo-in-dma_req_block.patch DELETED ---


--- linux-2.6-net-r8169-correct-phy-parameters-for-the-8110SC.patch DELETED ---


--- linux-2.6-net-r8169-workaround-against-ignored-TxPoll-writes-8168.patch DELETED ---


--- linux-2.6-net-sfq-fix-oops-with-2.patch DELETED ---


--- linux-2.6-netdev-atl1-disable-broken-64-bit-dma.patch DELETED ---


--- linux-2.6-nfs-nosharecache.patch DELETED ---


--- linux-2.6-pcspkr-use-the-global-pit-lock.patch DELETED ---


--- linux-2.6-powerpc-generic-suspend-1-remove-dead-code.patch DELETED ---


--- linux-2.6-powerpc-generic-suspend-2-remove-adb-sleep-notifier.patch DELETED ---


--- linux-2.6-powerpc-generic-suspend-3-remove-dmasound.patch DELETED ---


--- linux-2.6-powerpc-generic-suspend-4-kill-pmu-sleep-notifier.patch DELETED ---


--- linux-2.6-powerpc-generic-suspend-5-pmu-pm_ops.patch DELETED ---


--- linux-2.6-ppc-pegasos-keyboard-8042-check.patch DELETED ---


--- linux-2.6-ps3-alsa.patch DELETED ---


--- linux-2.6-ps3-ethernet-autoload.patch DELETED ---


--- linux-2.6-ps3-ethernet-modular.patch DELETED ---


--- linux-2.6-ps3-gelic-net-updates-1.patch DELETED ---


--- linux-2.6-ps3-gelic-net-updates-2.patch DELETED ---


--- linux-2.6-ps3-gelic-net.patch DELETED ---


--- linux-2.6-ps3-merge-1.patch DELETED ---


--- linux-2.6-ps3-merge-2.patch DELETED ---


--- linux-2.6-ps3-usb-system-bus.patch DELETED ---


--- linux-2.6-rtl8187.patch DELETED ---


--- linux-2.6-sched-cfs-updates.patch DELETED ---


--- linux-2.6-sched-cfs-v2.6.22.5-v20.5.patch DELETED ---


--- linux-2.6-scsi-async-scanning.patch DELETED ---


--- linux-2.6-sdhci-clear-error-interrupt.patch DELETED ---


--- linux-2.6-sdhci-ene-controller-quirk.patch DELETED ---


--- linux-2.6-sdhci-fix-interrupt-mask.patch DELETED ---


--- linux-2.6-snd-ad1988-fix-spdif-output.patch DELETED ---


--- linux-2.6-snd-hda-stac92xx-fixes.patch DELETED ---


--- linux-2.6-softlockup-disable.patch DELETED ---


--- linux-2.6-softmac-fix-essid-problem_R.patch DELETED ---


--- linux-2.6-timekeeping-fixes.patch DELETED ---


--- linux-2.6-uevent-zero-fill-env.patch DELETED ---


--- linux-2.6-usb-allow-1-byte-replies.patch DELETED ---


--- linux-2.6-usb-autosuspend-default-disable.patch DELETED ---


--- linux-2.6-usb-fixup-interval-lengths.patch DELETED ---


--- linux-2.6-vbe-always-save-ddc.patch DELETED ---


--- linux-2.6-x86-vga-vidfail.patch DELETED ---


--- linux-2.6-x86_64-e820_hole_size.patch DELETED ---


--- linux-2.6.22.tar.bz2.sign DELETED ---


--- patch-2.6.22.9.bz2.sign DELETED ---




More information about the scm-commits mailing list