rpms/kernel/F-7 linux-2.6-debug-slub-debug.patch, NONE, 1.1 linux-2.6-dmi-based-module-autoloading.patch, NONE, 1.1 linux-2.6-e1000-ich9.patch, NONE, 1.1 linux-2.6-highres-timers.patch, NONE, 1.1 linux-2.6-kvm-suspend.patch, NONE, 1.1 linux-2.6-sched-cfs.patch, NONE, 1.1 linux-2.6-utrace.patch, 1.59, 1.60 linux-2.6-wakeups.patch, NONE, 1.1 linux-2.6.22.tar.bz2.sign, NONE, 1.1 .cvsignore, 1.625, 1.626 Makefile.config, 1.53, 1.54 git-wireless-dev.patch, 1.12, 1.13 kernel-2.6.spec, 1.3256, 1.3257 linux-2.6-ata-quirk.patch, 1.1, 1.2 linux-2.6-bcm43xx-pci-neuter.patch, 1.1, 1.2 linux-2.6-build-nonintconfig.patch, 1.6, 1.7 linux-2.6-crash-driver.patch, 1.5, 1.6 linux-2.6-debug-boot-delay.patch, 1.4, 1.5 linux-2.6-debug-extra-warnings.patch, 1.5, 1.6 linux-2.6-debug-must_check.patch, 1.1, 1.2 linux-2.6-debug-nmi-timeout.patch, 1.1, 1.2 linux-2.6-debug-spinlock-taint.patch, 1.6, 1.7 linux-2.6-debug-sysfs-crash-debugging.patch, 1.7, 1.8 linux-2.6-debug-taint-vm.patch, 1.12, 1.13 linux-2.6-defaults-fat-utf8.patch, 1.1, 1.2 linux-2.6-defaults-unicode-vt.patch, 1.2, 1.3 linux-2.6-devmem.patch, 1.13, 1.14 linux-2.6-execshield.patch, 1.53, 1.54 linux-2.6-input-kill-stupid-messages.patch, 1.3, 1.4 linux-2.6-modsign-include.patch, 1.4, 1.5 linux-2.6-modsign-verify.patch, 1.1, 1.2 linux-2.6-net-silence-noisy-printks.patch, 1.1, 1.2 linux-2.6-ondemand-timer.patch, 1.6, 1.7 linux-2.6-serial-460800.patch, 1.1, 1.2 linux-2.6-softlockup-disable.patch, 1.3, 1.4 linux-2.6-squashfs.patch, 1.19, 1.20 linux-2.6-unexport-symbols.patch, 1.2, 1.3 linux-2.6-vm-silence-atomic-alloc-failures.patch, 1.2, 1.3 linux-2.6-wakeups-hdaps.patch, 1.1, 1.2 linux-2.6-x86-tune-generic.patch, 1.1, 1.2 sources, 1.588, 1.589 upstream, 1.511, 1.512 config-olpc-generic, 1.12, NONE git-cpufreq.patch, 1.1, NONE linux-2.6-2110_scsi-sd-printing.patch, 1.1, NONE linux-2.6-2111_sd-start-stop.patch, 1.1, NONE linux-2.6-2112_libata-suspend.patch, 1.1, NONE linux-2.6-2113_libata-spindown-compat.patch, 1.1, NONE linux-2.6-2114_libata-shutdown-warning.patch, 1.1, NONE linux-2.6-2115_libata-spindown-status.patch, 1.1, NONE linux-2.6-2116_libata-remove-spindown-compat.patch, 1.1, NONE linux-2.6-2117_sata-via-suspend.patch, 1.1, NONE linux-2.6-2118_scsi-constants.patch, 1.1, NONE linux-2.6-PT_LOAD-align.patch, 1.2, NONE linux-2.6-acpi-boot-regression.patch, 1.1, NONE linux-2.6-acpi-keep-tsc-stable-when-lapic-timer-c2-ok-is-set.patch, 1.1, NONE linux-2.6-acpi-preserve-ebx-in-acpi_copy_wakeup_routine.patch, 1.1, NONE linux-2.6-acpi-unblacklist-dell-gx240.patch, 1.1, NONE linux-2.6-amd-disabled-svm-detect-msr-1.patch, 1.1, NONE linux-2.6-amd-disabled-svm-detect.patch, 1.1, NONE linux-2.6-ata-call-check-dma-with-qc-prepared.patch, 1.1, NONE linux-2.6-ata-use-pio-for-non-16-byte-xfers.patch, 1.1, NONE linux-2.6-cell-spu-device-tree.patch, 1.8, NONE linux-2.6-cell-spufs-fixes.patch, 1.1, NONE linux-2.6-clockevents-fix-resume-logic.patch, 1.2, NONE linux-2.6-common-uevent.patch, 1.2, NONE linux-2.6-compile-fixes.patch, 1.150, NONE linux-2.6-crap-sysfs-workaround.patch, 1.1, NONE linux-2.6-debug-slab-backtrace.patch, 1.1, NONE linux-2.6-defaults-pci_no_msi_mmconf.patch, 1.1, NONE linux-2.6-dvb-spinlock.patch, 1.1, NONE linux-2.6-firewire-be32-fix.patch, 1.1, NONE linux-2.6-firewire.patch, 1.10, NONE linux-2.6-fix-pmops-1.patch, 1.2, NONE linux-2.6-fix-pmops-2.patch, 1.1, NONE linux-2.6-fix-pmops-3.patch, 1.1, NONE linux-2.6-fix-pmops-4.patch, 1.1, NONE linux-2.6-gfs2-update.patch, 1.2, NONE linux-2.6-i82875-edac-pci-setup.patch, 1.1, NONE linux-2.6-i965gm-support.patch, 1.2, NONE linux-2.6-kvm-19.patch, 1.2, NONE linux-2.6-kvm-reinit-real-mode-tss.patch, 1.1, NONE linux-2.6-libata-atiixp-ids.patch, 1.1, NONE linux-2.6-libata-hpa.patch, 1.1, NONE linux-2.6-libata-ncq-blacklist-2.6.22-rc7.patch, 1.1, NONE linux-2.6-libata-pata-hpt3x2n-correct-revision-boundary.patch, 1.1, NONE linux-2.6-libata-pata-pcmcia-new-ident.patch, 1.1, NONE linux-2.6-libata-pata-sis-fix-timing.patch, 1.1, NONE linux-2.6-libata-pata_dma-param.patch, 1.1, NONE linux-2.6-libata-pata_it821x-partly-fix-dma.patch, 1.1, NONE linux-2.6-libata-sata_nv-adma.patch, 1.2, NONE linux-2.6-libata-sata_nv-wildcard-removal.patch, 1.1, NONE linux-2.6-libata-setxfer.patch, 1.3, NONE linux-2.6-libata_ali_max_dma_speed.patch, 1.1, NONE linux-2.6-mm-udf-fixes.patch, 1.2, NONE linux-2.6-module-override-modparam-cmdline.patch, 1.1, NONE linux-2.6-module_version.patch, 1.3, NONE linux-2.6-mpc52xx-fec.patch, 1.1, NONE linux-2.6-mpc52xx-sdma.patch, 1.1, NONE linux-2.6-net-e1000-no-msi-warning.patch, 1.1, NONE linux-2.6-nfs-missing-braces.patch, 1.1, NONE linux-2.6-nfs-noreaddirplus.patch, 1.1, NONE linux-2.6-optimise-spinlock-debug.patch, 1.5, NONE linux-2.6-powermac-generic-suspend-1.patch, 1.2, NONE linux-2.6-powermac-generic-suspend-2.patch, 1.3, NONE linux-2.6-powermac-generic-suspend-3.patch, 1.2, NONE linux-2.6-powermac-generic-suspend-4.patch, 1.2, NONE linux-2.6-powerpc-reserve-initrd-1.patch, 1.1, NONE linux-2.6-powerpc-reserve-initrd-2.patch, 1.1, NONE linux-2.6-powerpc-slabalign.patch, 1.1, NONE linux-2.6-ppc-data-exception.patch, 1.1, NONE linux-2.6-ps3-clear-spu-irq.patch, 1.1, NONE linux-2.6-ps3-device-init.patch, 1.2, NONE linux-2.6-ps3-ehci-iso.patch, 1.1, NONE linux-2.6-ps3-ethernet-autoload.patch, 1.1, NONE linux-2.6-ps3-ethernet-modular.patch, 1.3, NONE linux-2.6-ps3-gelic-wireless.patch, 1.1, NONE linux-2.6-ps3-gelic.patch, 1.1, NONE linux-2.6-ps3-kexec.patch, 1.1, NONE linux-2.6-ps3-legacy-ioport.patch, 1.1, NONE linux-2.6-ps3-memory-probe.patch, 1.1, NONE linux-2.6-ps3-smp-boot.patch, 1.2, NONE linux-2.6-ps3-sound-autoload.patch, 1.1, NONE linux-2.6-ps3-sound.patch, 1.2, NONE linux-2.6-ps3-stable-patches.patch, 1.2, NONE linux-2.6-ps3-storage.patch, 1.2, NONE linux-2.6-ps3-system-bus-rework-2.patch, 1.1, NONE linux-2.6-ps3-system-bus-rework.patch, 1.1, NONE linux-2.6-ps3-usb-autoload.patch, 1.1, NONE linux-2.6-ps3-wrap-spu-runctl.patch, 1.3, NONE linux-2.6-ps3av-export-header.patch, 1.1, NONE linux-2.6-ps3fb-panic.patch, 1.1, NONE linux-2.6-raid-autorun.patch, 1.1, NONE linux-2.6-sata-promise-pata-ports.patch, 1.3, NONE linux-2.6-scsi-bounce-isa.patch, 1.2, NONE linux-2.6-softirq-printout-irq-trace-events.patch, 1.1, NONE linux-2.6-suspend-ordering.patch, 1.1, NONE linux-2.6-sysfs-inode-allocator-oops.patch, 1.2, NONE linux-2.6-tux.patch, 1.32, NONE linux-2.6-udf-2.6.22-rc2-1-udf_data_corruption.patch, 1.1, NONE linux-2.6-udf-2.6.22-rc4-1-udf_block_leak.patch, 1.1, NONE linux-2.6-uevent-ebus.patch, 1.3, NONE linux-2.6-uevent-macio.patch, 1.1, NONE linux-2.6-uevent-of_platform.patch, 1.1, NONE linux-2.6-usb-autosuspend-default-disable.patch, 1.1, NONE linux-2.6-utrace-core.patch, 1.1, NONE linux-2.6-utrace-ptrace-compat-ia64.patch, 1.1, NONE linux-2.6-utrace-ptrace-compat-s390.patch, 1.1, NONE linux-2.6-utrace-ptrace-compat-sparc64.patch, 1.1, NONE linux-2.6-utrace-ptrace-compat.patch, 1.1, NONE linux-2.6-utrace-recalc_sigpending_and_wake.patch, 1.1, NONE linux-2.6-utrace-regset-ia64.patch, 1.1, NONE linux-2.6-utrace-regset-s390.patch, 1.1, NONE linux-2.6-utrace-regset-sparc64.patch, 1.1, NONE linux-2.6-utrace-regset.patch, 1.1, NONE linux-2.6-utrace-sig_kernel-macros.patch, 1.1, NONE linux-2.6-utrace-tracehook-ia64.patch, 1.1, NONE linux-2.6-utrace-tracehook-s390.patch, 1.1, NONE linux-2.6-utrace-tracehook-sparc64.patch, 1.1, NONE linux-2.6-utrace-tracehook-um.patch, 1.1, NONE linux-2.6-utrace-tracehook.patch, 1.1, NONE linux-2.6-vm-invalidate_mapping_pages-cond-resched.patch, 1.1, NONE linux-2.6-wireless.patch, 1.3, NONE linux-2.6-x86-64-edac-support.patch, 1.2, NONE linux-2.6-x86-64_pmtrace.patch, 1.3, NONE linux-2.6-x86-dell-hpet.patch, 1.1, NONE linux-2.6-x86-dont-delete-cpu_devs-data.patch, 1.1, NONE linux-2.6-x86-fsc-interrupt-controller-quirk.patch, 1.1, NONE linux-2.6-x86_64-silence-up-apic-errors.patch, 1.2, NONE linux-2.6.21.tar.bz2.sign, 1.1, NONE nouveau-drm.patch, 1.4, NONE patch-2.6.21.5.bz2.sign, 1.1, NONE stable-reverts.patch, 1.4, NONE

Dave Jones (davej) fedora-extras-commits at redhat.com
Tue Jul 10 16:15:41 UTC 2007


Author: davej

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

Modified Files:
	.cvsignore Makefile.config git-wireless-dev.patch 
	kernel-2.6.spec linux-2.6-ata-quirk.patch 
	linux-2.6-bcm43xx-pci-neuter.patch 
	linux-2.6-build-nonintconfig.patch 
	linux-2.6-crash-driver.patch linux-2.6-debug-boot-delay.patch 
	linux-2.6-debug-extra-warnings.patch 
	linux-2.6-debug-must_check.patch 
	linux-2.6-debug-nmi-timeout.patch 
	linux-2.6-debug-spinlock-taint.patch 
	linux-2.6-debug-sysfs-crash-debugging.patch 
	linux-2.6-debug-taint-vm.patch 
	linux-2.6-defaults-fat-utf8.patch 
	linux-2.6-defaults-unicode-vt.patch linux-2.6-devmem.patch 
	linux-2.6-execshield.patch 
	linux-2.6-input-kill-stupid-messages.patch 
	linux-2.6-modsign-include.patch linux-2.6-modsign-verify.patch 
	linux-2.6-net-silence-noisy-printks.patch 
	linux-2.6-ondemand-timer.patch linux-2.6-serial-460800.patch 
	linux-2.6-softlockup-disable.patch linux-2.6-squashfs.patch 
	linux-2.6-unexport-symbols.patch 
	linux-2.6-vm-silence-atomic-alloc-failures.patch 
	linux-2.6-wakeups-hdaps.patch linux-2.6-x86-tune-generic.patch 
	sources upstream 
Added Files:
	linux-2.6-debug-slub-debug.patch 
	linux-2.6-dmi-based-module-autoloading.patch 
	linux-2.6-e1000-ich9.patch linux-2.6-highres-timers.patch 
	linux-2.6-kvm-suspend.patch linux-2.6-sched-cfs.patch 
	linux-2.6-utrace.patch linux-2.6-wakeups.patch 
	linux-2.6.22.tar.bz2.sign 
Removed Files:
	config-olpc-generic git-cpufreq.patch 
	linux-2.6-2110_scsi-sd-printing.patch 
	linux-2.6-2111_sd-start-stop.patch 
	linux-2.6-2112_libata-suspend.patch 
	linux-2.6-2113_libata-spindown-compat.patch 
	linux-2.6-2114_libata-shutdown-warning.patch 
	linux-2.6-2115_libata-spindown-status.patch 
	linux-2.6-2116_libata-remove-spindown-compat.patch 
	linux-2.6-2117_sata-via-suspend.patch 
	linux-2.6-2118_scsi-constants.patch 
	linux-2.6-PT_LOAD-align.patch 
	linux-2.6-acpi-boot-regression.patch 
	linux-2.6-acpi-keep-tsc-stable-when-lapic-timer-c2-ok-is-set.patch 
	linux-2.6-acpi-preserve-ebx-in-acpi_copy_wakeup_routine.patch 
	linux-2.6-acpi-unblacklist-dell-gx240.patch 
	linux-2.6-amd-disabled-svm-detect-msr-1.patch 
	linux-2.6-amd-disabled-svm-detect.patch 
	linux-2.6-ata-call-check-dma-with-qc-prepared.patch 
	linux-2.6-ata-use-pio-for-non-16-byte-xfers.patch 
	linux-2.6-cell-spu-device-tree.patch 
	linux-2.6-cell-spufs-fixes.patch 
	linux-2.6-clockevents-fix-resume-logic.patch 
	linux-2.6-common-uevent.patch linux-2.6-compile-fixes.patch 
	linux-2.6-crap-sysfs-workaround.patch 
	linux-2.6-debug-slab-backtrace.patch 
	linux-2.6-defaults-pci_no_msi_mmconf.patch 
	linux-2.6-dvb-spinlock.patch linux-2.6-firewire-be32-fix.patch 
	linux-2.6-firewire.patch linux-2.6-fix-pmops-1.patch 
	linux-2.6-fix-pmops-2.patch linux-2.6-fix-pmops-3.patch 
	linux-2.6-fix-pmops-4.patch linux-2.6-gfs2-update.patch 
	linux-2.6-i82875-edac-pci-setup.patch 
	linux-2.6-i965gm-support.patch linux-2.6-kvm-19.patch 
	linux-2.6-kvm-reinit-real-mode-tss.patch 
	linux-2.6-libata-atiixp-ids.patch linux-2.6-libata-hpa.patch 
	linux-2.6-libata-ncq-blacklist-2.6.22-rc7.patch 
	linux-2.6-libata-pata-hpt3x2n-correct-revision-boundary.patch 
	linux-2.6-libata-pata-pcmcia-new-ident.patch 
	linux-2.6-libata-pata-sis-fix-timing.patch 
	linux-2.6-libata-pata_dma-param.patch 
	linux-2.6-libata-pata_it821x-partly-fix-dma.patch 
	linux-2.6-libata-sata_nv-adma.patch 
	linux-2.6-libata-sata_nv-wildcard-removal.patch 
	linux-2.6-libata-setxfer.patch 
	linux-2.6-libata_ali_max_dma_speed.patch 
	linux-2.6-mm-udf-fixes.patch 
	linux-2.6-module-override-modparam-cmdline.patch 
	linux-2.6-module_version.patch linux-2.6-mpc52xx-fec.patch 
	linux-2.6-mpc52xx-sdma.patch 
	linux-2.6-net-e1000-no-msi-warning.patch 
	linux-2.6-nfs-missing-braces.patch 
	linux-2.6-nfs-noreaddirplus.patch 
	linux-2.6-optimise-spinlock-debug.patch 
	linux-2.6-powermac-generic-suspend-1.patch 
	linux-2.6-powermac-generic-suspend-2.patch 
	linux-2.6-powermac-generic-suspend-3.patch 
	linux-2.6-powermac-generic-suspend-4.patch 
	linux-2.6-powerpc-reserve-initrd-1.patch 
	linux-2.6-powerpc-reserve-initrd-2.patch 
	linux-2.6-powerpc-slabalign.patch 
	linux-2.6-ppc-data-exception.patch 
	linux-2.6-ps3-clear-spu-irq.patch 
	linux-2.6-ps3-device-init.patch linux-2.6-ps3-ehci-iso.patch 
	linux-2.6-ps3-ethernet-autoload.patch 
	linux-2.6-ps3-ethernet-modular.patch 
	linux-2.6-ps3-gelic-wireless.patch linux-2.6-ps3-gelic.patch 
	linux-2.6-ps3-kexec.patch linux-2.6-ps3-legacy-ioport.patch 
	linux-2.6-ps3-memory-probe.patch linux-2.6-ps3-smp-boot.patch 
	linux-2.6-ps3-sound-autoload.patch linux-2.6-ps3-sound.patch 
	linux-2.6-ps3-stable-patches.patch linux-2.6-ps3-storage.patch 
	linux-2.6-ps3-system-bus-rework-2.patch 
	linux-2.6-ps3-system-bus-rework.patch 
	linux-2.6-ps3-usb-autoload.patch 
	linux-2.6-ps3-wrap-spu-runctl.patch 
	linux-2.6-ps3av-export-header.patch 
	linux-2.6-ps3fb-panic.patch linux-2.6-raid-autorun.patch 
	linux-2.6-sata-promise-pata-ports.patch 
	linux-2.6-scsi-bounce-isa.patch 
	linux-2.6-softirq-printout-irq-trace-events.patch 
	linux-2.6-suspend-ordering.patch 
	linux-2.6-sysfs-inode-allocator-oops.patch linux-2.6-tux.patch 
	linux-2.6-udf-2.6.22-rc2-1-udf_data_corruption.patch 
	linux-2.6-udf-2.6.22-rc4-1-udf_block_leak.patch 
	linux-2.6-uevent-ebus.patch linux-2.6-uevent-macio.patch 
	linux-2.6-uevent-of_platform.patch 
	linux-2.6-usb-autosuspend-default-disable.patch 
	linux-2.6-utrace-core.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-recalc_sigpending_and_wake.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-sig_kernel-macros.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-vm-invalidate_mapping_pages-cond-resched.patch 
	linux-2.6-wireless.patch linux-2.6-x86-64-edac-support.patch 
	linux-2.6-x86-64_pmtrace.patch linux-2.6-x86-dell-hpet.patch 
	linux-2.6-x86-dont-delete-cpu_devs-data.patch 
	linux-2.6-x86-fsc-interrupt-controller-quirk.patch 
	linux-2.6-x86_64-silence-up-apic-errors.patch 
	linux-2.6.21.tar.bz2.sign nouveau-drm.patch 
	patch-2.6.21.5.bz2.sign stable-reverts.patch 
Log Message:
* Tue Jul 10 2007 Dave Jones <davej at redhat.com>
- Rebase to 2.6.22


linux-2.6-debug-slub-debug.patch:

--- NEW FILE linux-2.6-debug-slub-debug.patch ---
--- linux-2.6.21.noarch/mm/slub.c~	2007-05-27 21:48:42.000000000 -0400
+++ linux-2.6.21.noarch/mm/slub.c	2007-05-27 21:51:22.000000000 -0400
@@ -323,7 +323,7 @@ static inline int slab_index(void *p, st
 /*
  * Debug settings:
  */
-static int slub_debug;
+static int slub_debug = DEBUG_DEFAULT_FLAGS;
 
 static char *slub_debug_slabs;
 

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

--- NEW FILE linux-2.6-dmi-based-module-autoloading.patch ---
>From mzxreary at 0pointer.de  Sat May 19 20:03:21 2007
Date: Tue, 8 May 2007 22:07:02 +0200
From: Lennart Poettering <mzxreary at 0pointer.de>
To: <B.Steinbrink at gmx.de>, <kay.sievers at vrfy.org>, Greg KH <gregkh at suse.de>
Subject: DMI-based module autoloading
Message-ID: <20070508200702.GA6537 at tango.0pointer.de>
Content-Disposition: inline

From: Lennart Poettering <mzxreary at 0pointer.de>

The patch below adds DMI/SMBIOS based module autoloading to the Linux
kernel. The idea is to load laptop drivers automatically (and other
drivers which cannot be autoloaded otherwise), based on the DMI system
identification information of the BIOS.

Right now most distros manually try to load all available laptop
drivers on bootup in the hope that at least one of them loads
successfully. This patch does away with all that, and uses udev to
automatically load matching drivers on the right machines.

Basically the patch just exports the DMI information that has been
parsed by the kernel anyway to userspace via a sysfs device
/sys/class/dmi/id and makes sure that proper modalias attributes are
available. Besides adding the "modalias" attribute it also adds
attributes for a few other DMI fields which might be useful for
writing udev rules.

This patch is not an attempt to export the entire DMI/SMBIOS data to
userspace. We already have "dmidecode" which parses the complete DMI
info from userspace. The purpose of this patch is machine model
identification and good udev integration.

To take advantage of DMI based module autoloading, a driver should
export one or more MODULE_ALIAS fields similar to these:

MODULE_ALIAS("dmi:*:svnMICRO-STARINT'LCO.,LTD:pnMS-1013:pvr0131*:cvnMICRO-STARINT'LCO.,LTD:ct10:*");
MODULE_ALIAS("dmi:*:svnMicro-StarInternational:pnMS-1058:pvr0581:rvnMSI:rnMS-1058:*:ct10:*");
MODULE_ALIAS("dmi:*:svnMicro-StarInternational:pnMS-1412:*:rvnMSI:rnMS-1412:*:cvnMICRO-STARINT'LCO.,LTD:ct10:*");
MODULE_ALIAS("dmi:*:svnNOTEBOOK:pnSAM2000:pvr0131*:cvnMICRO-STARINT'LCO.,LTD:ct10:*");

These lines are specific to my msi-laptop.c driver. They are basically
just a concatenation of a few carefully selected DMI fields with all
potentially bad characters stripped.

Besides laptop drivers, modules like "hdaps", the i2c modules
and the hwmon modules are good candidates for "dmi:" MODULE_ALIAS
lines.

Besides merely exporting the DMI data via sysfs the patch adds
support for a few more DMI fields. Especially the CHASSIS fields are
very useful to identify different laptop modules. The patch also adds
working MODULE_ALIAS lines to my msi-laptop.c driver.

I'd like to thank Kay Sievers for helping me to clean up this patch
for posting it on lkml.

Patch is against Linus' current GIT HEAD. Should probably apply to
older kernels as well without modification.


Signed-off-by: Lennart Poettering <mzxreary at 0pointer.de>
Signed-off-by: Kay Sievers <kay.sievers at vrfy.org>
Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>



---
 drivers/firmware/Kconfig    |    9 +
 drivers/firmware/Makefile   |    1 
 drivers/firmware/dmi-id.c   |  222 ++++++++++++++++++++++++++++++++++++++++++++
 drivers/firmware/dmi_scan.c |   73 +++++++++++++-
 drivers/misc/msi-laptop.c   |   44 ++++++++
 include/linux/dmi.h         |    8 +
 6 files changed, 348 insertions(+), 9 deletions(-)

--- a/drivers/firmware/Kconfig
+++ b/drivers/firmware/Kconfig
@@ -84,4 +84,13 @@ config DCDBAS
 	  Say Y or M here to enable the driver for use by Dell systems
 	  management software such as Dell OpenManage.
 
+config DMIID
+    bool "Export DMI identification via sysfs to userspace"
+    depends on DMI
+    default y
+	help
+	  Say Y here if you want to query SMBIOS/DMI system identification
+	  information from userspace through /sys/class/dmi/id/ or if you want
+	  DMI-based module auto-loading.
+
 endmenu
--- a/drivers/firmware/Makefile
+++ b/drivers/firmware/Makefile
@@ -7,3 +7,4 @@ obj-$(CONFIG_EFI_VARS)		+= efivars.o
 obj-$(CONFIG_EFI_PCDP)		+= pcdp.o
 obj-$(CONFIG_DELL_RBU)          += dell_rbu.o
 obj-$(CONFIG_DCDBAS)		+= dcdbas.o
+obj-$(CONFIG_DMIID)		+= dmi-id.o
--- /dev/null
+++ b/drivers/firmware/dmi-id.c
@@ -0,0 +1,222 @@
+/*
+ * Export SMBIOS/DMI info via sysfs to userspace
+ *
+ * Copyright 2007, Lennart Poettering
+ *
+ * Licensed under GPLv2
+ */
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/dmi.h>
+#include <linux/device.h>
+#include <linux/autoconf.h>
+
+#define DEFINE_DMI_ATTR(_name, _mode, _show)		\
+static struct device_attribute sys_dmi_##_name##_attr =	\
+	__ATTR(_name, _mode, _show, NULL);
+
+#define DEFINE_DMI_ATTR_WITH_SHOW(_name, _mode, _field)			\
+static ssize_t sys_dmi_##_name##_show(struct device *dev,		\
+				      struct device_attribute *attr,	\
+				      char *page)			\
+{									\
+	ssize_t len;							\
+	len = scnprintf(page, PAGE_SIZE, "%s\n", dmi_get_system_info(_field)); \
+	page[len-1] = '\n';						\
+	return len;							\
+}									\
+DEFINE_DMI_ATTR(_name, _mode, sys_dmi_##_name##_show);
+
+DEFINE_DMI_ATTR_WITH_SHOW(bios_vendor,		0444, DMI_BIOS_VENDOR);
+DEFINE_DMI_ATTR_WITH_SHOW(bios_version,		0444, DMI_BIOS_VERSION);
+DEFINE_DMI_ATTR_WITH_SHOW(bios_date,		0444, DMI_BIOS_DATE);
+DEFINE_DMI_ATTR_WITH_SHOW(sys_vendor,		0444, DMI_SYS_VENDOR);
+DEFINE_DMI_ATTR_WITH_SHOW(product_name,		0444, DMI_PRODUCT_NAME);
+DEFINE_DMI_ATTR_WITH_SHOW(product_version,	0444, DMI_PRODUCT_VERSION);
+DEFINE_DMI_ATTR_WITH_SHOW(product_serial,	0400, DMI_PRODUCT_SERIAL);
+DEFINE_DMI_ATTR_WITH_SHOW(product_uuid,		0400, DMI_PRODUCT_UUID);
+DEFINE_DMI_ATTR_WITH_SHOW(board_vendor,		0444, DMI_BOARD_VENDOR);
+DEFINE_DMI_ATTR_WITH_SHOW(board_name,		0444, DMI_BOARD_NAME);
+DEFINE_DMI_ATTR_WITH_SHOW(board_version,	0444, DMI_BOARD_VERSION);
+DEFINE_DMI_ATTR_WITH_SHOW(board_serial,		0400, DMI_BOARD_SERIAL);
+DEFINE_DMI_ATTR_WITH_SHOW(board_asset_tag,	0444, DMI_BOARD_ASSET_TAG);
+DEFINE_DMI_ATTR_WITH_SHOW(chassis_vendor,	0444, DMI_CHASSIS_VENDOR);
+DEFINE_DMI_ATTR_WITH_SHOW(chassis_type,		0444, DMI_CHASSIS_TYPE);
+DEFINE_DMI_ATTR_WITH_SHOW(chassis_version,	0444, DMI_CHASSIS_VERSION);
+DEFINE_DMI_ATTR_WITH_SHOW(chassis_serial,	0400, DMI_CHASSIS_SERIAL);
+DEFINE_DMI_ATTR_WITH_SHOW(chassis_asset_tag,	0444, DMI_CHASSIS_ASSET_TAG);
+
+static void ascii_filter(char *d, const char *s)
+{
+	/* Filter out characters we don't want to see in the modalias string */
+	for (; *s; s++)
+		if (*s > ' ' && *s < 127 && *s != ':')
+			*(d++) = *s;
+
+	*d = 0;
+}
+
+static ssize_t get_modalias(char *buffer, size_t buffer_size)
+{
+	static const struct mafield {
+		const char *prefix;
+		int field;
+	} fields[] = {
+		{ "bvn", DMI_BIOS_VENDOR },
+		{ "bvr", DMI_BIOS_VERSION },
+		{ "bd",  DMI_BIOS_DATE },
+		{ "svn", DMI_SYS_VENDOR },
+		{ "pn",  DMI_PRODUCT_NAME },
+		{ "pvr", DMI_PRODUCT_VERSION },
+		{ "rvn", DMI_BOARD_VENDOR },
+		{ "rn",  DMI_BOARD_NAME },
+		{ "rvr", DMI_BOARD_VERSION },
+		{ "cvn", DMI_CHASSIS_VENDOR },
+		{ "ct",  DMI_CHASSIS_TYPE },
+		{ "cvr", DMI_CHASSIS_VERSION },
+		{ NULL,  DMI_NONE }
+	};
+
+	ssize_t l, left;
+	char *p;
+	const struct mafield *f;
+
+	strcpy(buffer, "dmi");
+	p = buffer + 3; left = buffer_size - 4;
+
+	for (f = fields; f->prefix && left > 0; f++) {
+		const char *c;
+		char *t;
+
+		c = dmi_get_system_info(f->field);
+		if (!c)
+			continue;
+
+		t = kmalloc(strlen(c) + 1, GFP_KERNEL);
+		if (!t)
+			break;
+		ascii_filter(t, c);
+		l = scnprintf(p, left, ":%s%s", f->prefix, t);
+		kfree(t);
+
+		p += l;
+		left -= l;
+	}
+
+	p[0] = ':';
+	p[1] = 0;
+
+	return p - buffer + 1;
+}
+
+static ssize_t sys_dmi_modalias_show(struct device *dev,
+				     struct device_attribute *attr, char *page)
+{
+	ssize_t r;
+	r = get_modalias(page, PAGE_SIZE-1);
+	page[r] = '\n';
+	page[r+1] = 0;
+	return r+1;
+}
+
+DEFINE_DMI_ATTR(modalias, 0444, sys_dmi_modalias_show);
+
+static struct attribute *sys_dmi_attributes[DMI_STRING_MAX+2];
+
+static struct attribute_group sys_dmi_attribute_group = {
+	.attrs = sys_dmi_attributes,
+};
+
+static struct attribute_group* sys_dmi_attribute_groups[] = {
+	&sys_dmi_attribute_group,
+	NULL
+};
+
+static int dmi_dev_uevent(struct device *dev, char **envp,
+			    int num_envp, char *buffer, int buffer_size)
+{
+	strcpy(buffer, "MODALIAS=");
+	get_modalias(buffer+9, buffer_size-9);
+	envp[0] = buffer;
+	envp[1] = NULL;
+
+	return 0;
+}
+
+static struct class dmi_class = {
+	.name = "dmi",
+	.dev_release = (void(*)(struct device *)) kfree,
+	.dev_uevent = dmi_dev_uevent,
+};
+
+static struct device *dmi_dev;
+
+/* Initialization */
+
+#define ADD_DMI_ATTR(_name, _field) \
+	if (dmi_get_system_info(_field)) \
+		sys_dmi_attributes[i++] = & sys_dmi_##_name##_attr.attr;
+
+extern int dmi_available;
+
+int __init dmi_id_init(void)
+{
+	int ret, i;
+
+	if (!dmi_available)
+		return -ENODEV;
+
+	/* Not necessarily all DMI fields are available on all
+	 * systems, hence let's built an attribute table of just
+	 * what's available */
+	i = 0;
+	ADD_DMI_ATTR(bios_vendor,       DMI_BIOS_VENDOR);
+	ADD_DMI_ATTR(bios_version,      DMI_BIOS_VERSION);
+	ADD_DMI_ATTR(bios_date,         DMI_BIOS_DATE);
+	ADD_DMI_ATTR(sys_vendor,        DMI_SYS_VENDOR);
+	ADD_DMI_ATTR(product_name,      DMI_PRODUCT_NAME);
+	ADD_DMI_ATTR(product_version,   DMI_PRODUCT_VERSION);
+	ADD_DMI_ATTR(product_serial,    DMI_PRODUCT_SERIAL);
+	ADD_DMI_ATTR(product_uuid,      DMI_PRODUCT_UUID);
+	ADD_DMI_ATTR(board_vendor,      DMI_BOARD_VENDOR);
+	ADD_DMI_ATTR(board_name,        DMI_BOARD_NAME);
+	ADD_DMI_ATTR(board_version,     DMI_BOARD_VERSION);
+	ADD_DMI_ATTR(board_serial,      DMI_BOARD_SERIAL);
+	ADD_DMI_ATTR(board_asset_tag,   DMI_BOARD_ASSET_TAG);
+	ADD_DMI_ATTR(chassis_vendor,    DMI_CHASSIS_VENDOR);
+	ADD_DMI_ATTR(chassis_type,      DMI_CHASSIS_TYPE);
+	ADD_DMI_ATTR(chassis_version,   DMI_CHASSIS_VERSION);
+	ADD_DMI_ATTR(chassis_serial,    DMI_CHASSIS_SERIAL);
+	ADD_DMI_ATTR(chassis_asset_tag, DMI_CHASSIS_ASSET_TAG);
+	sys_dmi_attributes[i++] = &sys_dmi_modalias_attr.attr;
+
+	ret = class_register(&dmi_class);
+	if (ret)
+		return ret;
+
+	dmi_dev = kzalloc(sizeof(*dmi_dev), GFP_KERNEL);
+	if (!dmi_dev) {
+		ret = -ENOMEM;
+		goto fail_class_unregister;
+	}
+
+	dmi_dev->class = &dmi_class;
+	strcpy(dmi_dev->bus_id, "id");
+	dmi_dev->groups = sys_dmi_attribute_groups;
+
+	ret = device_register(dmi_dev);
+	if (ret)
+		goto fail_class_unregister;
+
+	return 0;
+
+fail_class_unregister:
+
+	class_unregister(&dmi_class);
+
+	return ret;
+}
+
+arch_initcall(dmi_id_init);
--- a/drivers/firmware/dmi_scan.c
+++ b/drivers/firmware/dmi_scan.c
@@ -84,6 +84,7 @@ static int __init dmi_checksum(u8 *buf)
 
 static char *dmi_ident[DMI_STRING_MAX];
 static LIST_HEAD(dmi_devices);
+int dmi_available;
 
 /*
  *	Save a DMI string
@@ -102,6 +103,51 @@ static void __init dmi_save_ident(struct
 	dmi_ident[slot] = p;
 }
 
+static void __init dmi_save_uuid(struct dmi_header *dm, int slot, int index)
+{
+	u8 *d = (u8*) dm + index;
+	char *s;
+	int is_ff = 1, is_00 = 1, i;
+
+	if (dmi_ident[slot])
+		return;
+
+	for (i = 0; i < 16 && (is_ff || is_00); i++) {
+		if(d[i] != 0x00) is_ff = 0;
+		if(d[i] != 0xFF) is_00 = 0;
+	}
+
+	if (is_ff || is_00)
+		return;
+
+	s = dmi_alloc(16*2+4+1);
+	if (!s)
+		return;
+
+	sprintf(s,
+		"%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X",
+		d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],
+		d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15]);
+
+        dmi_ident[slot] = s;
+}
+
+static void __init dmi_save_type(struct dmi_header *dm, int slot, int index)
+{
+	u8 *d = (u8*) dm + index;
+	char *s;
+
+	if (dmi_ident[slot])
+		return;
+
+	s = dmi_alloc(4);
+	if (!s)
+		return;
+
+	sprintf(s, "%u", *d & 0x7F);
+	dmi_ident[slot] = s;
+}
+
 static void __init dmi_save_devices(struct dmi_header *dm)
 {
 	int i, count = (dm->length - sizeof(struct dmi_header)) / 2;
@@ -192,11 +238,21 @@ static void __init dmi_decode(struct dmi
 		dmi_save_ident(dm, DMI_PRODUCT_NAME, 5);
 		dmi_save_ident(dm, DMI_PRODUCT_VERSION, 6);
 		dmi_save_ident(dm, DMI_PRODUCT_SERIAL, 7);
+		dmi_save_uuid(dm, DMI_PRODUCT_UUID, 8);
 		break;
 	case 2:		/* Base Board Information */
 		dmi_save_ident(dm, DMI_BOARD_VENDOR, 4);
 		dmi_save_ident(dm, DMI_BOARD_NAME, 5);
 		dmi_save_ident(dm, DMI_BOARD_VERSION, 6);
+		dmi_save_ident(dm, DMI_BOARD_SERIAL, 7);
+		dmi_save_ident(dm, DMI_BOARD_ASSET_TAG, 8);
+		break;
+	case 3:		/* Chassis Information */
+		dmi_save_ident(dm, DMI_CHASSIS_VENDOR, 4);
+		dmi_save_type(dm, DMI_CHASSIS_TYPE, 5);
+		dmi_save_ident(dm, DMI_CHASSIS_VERSION, 6);
+		dmi_save_ident(dm, DMI_CHASSIS_SERIAL, 7);
+		dmi_save_ident(dm, DMI_CHASSIS_ASSET_TAG, 8);
 		break;
 	case 10:	/* Onboard Devices Information */
 		dmi_save_devices(dm);
@@ -243,18 +299,20 @@ void __init dmi_scan_machine(void)
 		if (efi.smbios == EFI_INVALID_TABLE_ADDR)
 			goto out;
 
-               /* This is called as a core_initcall() because it isn't
-                * needed during early boot.  This also means we can
-                * iounmap the space when we're done with it.
-		*/
+		/* This is called as a core_initcall() because it isn't
+		 * needed during early boot.  This also means we can
+		 * iounmap the space when we're done with it.
+		 */
 		p = dmi_ioremap(efi.smbios, 32);
 		if (p == NULL)
 			goto out;
 
 		rc = dmi_present(p + 0x10); /* offset of _DMI_ string */
 		dmi_iounmap(p, 32);
-		if (!rc)
+		if (!rc) {
+			dmi_available = 1;
 			return;
+		}
 	}
 	else {
 		/*
@@ -268,8 +326,10 @@ void __init dmi_scan_machine(void)
 
 		for (q = p; q < p + 0x10000; q += 16) {
 			rc = dmi_present(q);
-			if (!rc)
+			if (!rc) {
+				dmi_available = 1;
 				return;
+			}
 		}
 	}
  out:	printk(KERN_INFO "DMI not present or invalid.\n");
@@ -404,3 +464,4 @@ int dmi_get_year(int field)
 
 	return year;
 }
+
--- a/drivers/misc/msi-laptop.c
+++ b/drivers/misc/msi-laptop.c
@@ -23,6 +23,8 @@
  * msi-laptop.c - MSI S270 laptop support. This laptop is sold under
  * various brands, including "Cytron/TCM/Medion/Tchibo MD96100".
  *
+ * Driver also supports S271, S420 models.
+ *
  * This driver exports a few files in /sys/devices/platform/msi-laptop-pf/:
  *
  *   lcd_level - Screen brightness: contains a single integer in the
@@ -281,25 +283,56 @@ static struct platform_device *msipf_dev
 
 /* Initialization */
 
+static int dmi_check_cb(struct dmi_system_id *id)
+{
+        printk("msi-laptop: Identified laptop model '%s'.\n", id->ident);
+        return 0;
+}
+
 static struct dmi_system_id __initdata msi_dmi_table[] = {
 	{
 		.ident = "MSI S270",
 		.matches = {
 			DMI_MATCH(DMI_SYS_VENDOR, "MICRO-STAR INT'L CO.,LTD"),
 			DMI_MATCH(DMI_PRODUCT_NAME, "MS-1013"),
-		}
+			DMI_MATCH(DMI_PRODUCT_VERSION, "0131"),
+			DMI_MATCH(DMI_CHASSIS_VENDOR, "MICRO-STAR INT'L CO.,LTD")
+		},
+		.callback = dmi_check_cb
+	},
+	{
+		.ident = "MSI S271",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "MS-1058"),
+			DMI_MATCH(DMI_PRODUCT_VERSION, "0581"),
+			DMI_MATCH(DMI_BOARD_NAME, "MS-1058")
+		},
+		.callback = dmi_check_cb
+	},
+	{
+		.ident = "MSI S420",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "MS-1412"),
+			DMI_MATCH(DMI_BOARD_VENDOR, "MSI"),
+			DMI_MATCH(DMI_BOARD_NAME, "MS-1412")
+		},
+		.callback = dmi_check_cb
 	},
 	{
 		.ident = "Medion MD96100",
 		.matches = {
 			DMI_MATCH(DMI_SYS_VENDOR, "NOTEBOOK"),
 			DMI_MATCH(DMI_PRODUCT_NAME, "SAM2000"),
-		}
+			DMI_MATCH(DMI_PRODUCT_VERSION, "0131"),
+			DMI_MATCH(DMI_CHASSIS_VENDOR, "MICRO-STAR INT'L CO.,LTD")
+		},
+		.callback = dmi_check_cb
 	},
 	{ }
 };
 
-
 static int __init msi_init(void)
 {
 	int ret;
@@ -394,3 +427,8 @@ MODULE_AUTHOR("Lennart Poettering");
 MODULE_DESCRIPTION("MSI Laptop Support");
 MODULE_VERSION(MSI_DRIVER_VERSION);
 MODULE_LICENSE("GPL");
+
+MODULE_ALIAS("dmi:*:svnMICRO-STARINT'LCO.,LTD:pnMS-1013:pvr0131*:cvnMICRO-STARINT'LCO.,LTD:ct10:*");
+MODULE_ALIAS("dmi:*:svnMicro-StarInternational:pnMS-1058:pvr0581:rvnMSI:rnMS-1058:*:ct10:*");
+MODULE_ALIAS("dmi:*:svnMicro-StarInternational:pnMS-1412:*:rvnMSI:rnMS-1412:*:cvnMICRO-STARINT'LCO.,LTD:ct10:*");
+MODULE_ALIAS("dmi:*:svnNOTEBOOK:pnSAM2000:pvr0131*:cvnMICRO-STARINT'LCO.,LTD:ct10:*");
--- a/include/linux/dmi.h
+++ b/include/linux/dmi.h
@@ -12,9 +12,17 @@ enum dmi_field {
 	DMI_PRODUCT_NAME,
 	DMI_PRODUCT_VERSION,
 	DMI_PRODUCT_SERIAL,
+	DMI_PRODUCT_UUID,
 	DMI_BOARD_VENDOR,
 	DMI_BOARD_NAME,
 	DMI_BOARD_VERSION,
+	DMI_BOARD_SERIAL,
+	DMI_BOARD_ASSET_TAG,
+	DMI_CHASSIS_VENDOR,
+	DMI_CHASSIS_TYPE,
+	DMI_CHASSIS_VERSION,
+	DMI_CHASSIS_SERIAL,
+	DMI_CHASSIS_ASSET_TAG,
 	DMI_STRING_MAX,
 };
 
From: Adrian Bunk <bunk at stusta.de>

Make the needlessly global dmi_id_init() static.

Signed-off-by: Adrian Bunk <bunk at stusta.de>
Cc: Lennart Poettering <mzxreary at 0pointer.de>
Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
---

 drivers/firmware/dmi-id.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff -puN drivers/firmware/dmi-id.c~fix-2-gregkh-driver-dmi-based-module-autoloading drivers/firmware/dmi-id.c
--- a/drivers/firmware/dmi-id.c~fix-2-gregkh-driver-dmi-based-module-autoloading
+++ a/drivers/firmware/dmi-id.c
@@ -161,7 +161,7 @@ static struct device *dmi_dev;
 
 extern int dmi_available;
 
-int __init dmi_id_init(void)
+static int __init dmi_id_init(void)
 {
 	int ret, i;
 
_

linux-2.6-e1000-ich9.patch:

--- NEW FILE linux-2.6-e1000-ich9.patch ---
--- ./drivers/net/e1000/e1000_main.c.ich9	2007-06-29 17:45:55.000000000 +0100
+++ ./drivers/net/e1000/e1000_main.c	2007-06-29 18:08:26.000000000 +0100
@@ -105,8 +105,13 @@ static struct pci_device_id e1000_pci_tb
 	INTEL_E1000_ETHERNET_DEVICE(0x10BA),
 	INTEL_E1000_ETHERNET_DEVICE(0x10BB),
 	INTEL_E1000_ETHERNET_DEVICE(0x10BC),
+	INTEL_E1000_ETHERNET_DEVICE(0x10BD),
+	INTEL_E1000_ETHERNET_DEVICE(0x10C0),
+	INTEL_E1000_ETHERNET_DEVICE(0x10C2),
+	INTEL_E1000_ETHERNET_DEVICE(0x10C3),
 	INTEL_E1000_ETHERNET_DEVICE(0x10C4),
 	INTEL_E1000_ETHERNET_DEVICE(0x10C5),
+	INTEL_E1000_ETHERNET_DEVICE(0x294C),
 	/* required last entry */
 	{0,}
 };
@@ -412,6 +417,7 @@ e1000_release_hw_control(struct e1000_ad
 	case e1000_82572:
 	case e1000_80003es2lan:
 	case e1000_ich8lan:
+	case e1000_ich9lan:
 		ctrl_ext = E1000_READ_REG(&adapter->hw, CTRL_EXT);
 		E1000_WRITE_REG(&adapter->hw, CTRL_EXT,
 				ctrl_ext & ~E1000_CTRL_EXT_DRV_LOAD);
@@ -449,6 +455,7 @@ e1000_get_hw_control(struct e1000_adapte
 	case e1000_82572:
 	case e1000_80003es2lan:
 	case e1000_ich8lan:
+	case e1000_ich9lan:
 		ctrl_ext = E1000_READ_REG(&adapter->hw, CTRL_EXT);
 		E1000_WRITE_REG(&adapter->hw, CTRL_EXT,
 				ctrl_ext | E1000_CTRL_EXT_DRV_LOAD);
@@ -604,6 +611,7 @@ static void e1000_power_down_phy(struct 
 		case e1000_82573:
 		case e1000_80003es2lan:
 		case e1000_ich8lan:
+		case e1000_ich9lan:
 			if (e1000_check_mng_mode(&adapter->hw) ||
 			    e1000_check_phy_reset_block(&adapter->hw))
 				goto out;
@@ -703,6 +711,11 @@ e1000_reset(struct e1000_adapter *adapte
 		break;
 	case e1000_ich8lan:
 		pba = E1000_PBA_8K;
+		break;
+	case e1000_ich9lan:
+#define E1000_PBA_10K 0x000A
+		pba = E1000_PBA_10K;
+		break;
 	case e1000_undefined:
 	case e1000_num_macs:
 		break;
@@ -765,6 +778,7 @@ e1000_reset(struct e1000_adapter *adapte
 			if (pba < min_rx_space) {
 				switch (adapter->hw.mac_type) {
 				case e1000_82573:
+				case e1000_ich9lan:
 					/* ERT enabled in e1000_configure_rx */
 					break;
 				default:
@@ -957,7 +971,8 @@ e1000_probe(struct pci_dev *pdev,
 	err = -EIO;
 	/* Flash BAR mapping must happen after e1000_sw_init
 	 * because it depends on mac_type */
-	if ((adapter->hw.mac_type == e1000_ich8lan) &&
+	if (((adapter->hw.mac_type == e1000_ich8lan) ||
+	     (adapter->hw.mac_type == e1000_ich9lan)) &&
 	   (pci_resource_flags(pdev, 1) & IORESOURCE_MEM)) {
 		flash_start = pci_resource_start(pdev, 1);
 		flash_len = pci_resource_len(pdev, 1);
@@ -975,7 +990,8 @@ e1000_probe(struct pci_dev *pdev,
 				   NETIF_F_HW_VLAN_TX |
 				   NETIF_F_HW_VLAN_RX |
 				   NETIF_F_HW_VLAN_FILTER;
-		if (adapter->hw.mac_type == e1000_ich8lan)
+		if ((adapter->hw.mac_type == e1000_ich8lan) ||
+		    (adapter->hw.mac_type == e1000_ich9lan))
 			netdev->features &= ~NETIF_F_HW_VLAN_FILTER;
 	}
 
@@ -1057,6 +1073,7 @@ e1000_probe(struct pci_dev *pdev,
 		eeprom_apme_mask = E1000_EEPROM_82544_APM;
 		break;
 	case e1000_ich8lan:
+	case e1000_ich9lan:
 		e1000_read_eeprom(&adapter->hw,
 			EEPROM_INIT_CONTROL1_REG, 1, &eeprom_data);
 		eeprom_apme_mask = E1000_EEPROM_ICH8_APME;
@@ -1138,7 +1155,9 @@ e1000_probe(struct pci_dev *pdev,
 	 * DRV_LOAD until the interface is up.  For all other cases,
 	 * let the f/w know that the h/w is now under the control
 	 * of the driver. */
-	if (adapter->hw.mac_type != e1000_82573 ||
+	if (((adapter->hw.mac_type != e1000_82573) &&
+	     (adapter->hw.mac_type != e1000_ich8lan) &&
+	     (adapter->hw.mac_type != e1000_ich9lan)) ||
 	    !e1000_check_mng_mode(&adapter->hw))
 		e1000_get_hw_control(adapter);
 
@@ -1420,7 +1439,9 @@ e1000_open(struct net_device *netdev)
 
 	/* If AMT is enabled, let the firmware know that the network
 	 * interface is now open */
-	if (adapter->hw.mac_type == e1000_82573 &&
+	if (((adapter->hw.mac_type == e1000_82573) ||
+	     (adapter->hw.mac_type == e1000_ich8lan) ||
+	     (adapter->hw.mac_type == e1000_ich9lan)) &&
 	    e1000_check_mng_mode(&adapter->hw))
 		e1000_get_hw_control(adapter);
 
@@ -1496,7 +1517,9 @@ e1000_close(struct net_device *netdev)
 
 	/* If AMT is enabled, let the firmware know that the network
 	 * interface is now closed */
-	if (adapter->hw.mac_type == e1000_82573 &&
+	if (((adapter->hw.mac_type == e1000_82573) ||
+	     (adapter->hw.mac_type == e1000_ich8lan) ||
+	     (adapter->hw.mac_type == e1000_ich9lan)) &&
 	    e1000_check_mng_mode(&adapter->hw))
 		e1000_release_hw_control(adapter);
 
@@ -2085,7 +2108,7 @@ e1000_configure_rx(struct e1000_adapter 
 	/* enable early receives on 82573, only takes effect if using > 2048
 	 * byte total frame size.  for example only for jumbo frames */
 #define E1000_ERT_2048 0x100
-	if (hw->mac_type == e1000_82573)
+	if (hw->mac_type == e1000_82573 || hw->mac_type == e1000_ich9lan)
 		E1000_WRITE_REG(hw, ERT, E1000_ERT_2048);
 
 	/* Enable Receives */
@@ -2430,12 +2453,14 @@ e1000_set_multi(struct net_device *netde
 	uint32_t rctl;
 	uint32_t hash_value;
 	int i, rar_entries = E1000_RAR_ENTRIES;
-	int mta_reg_count = (hw->mac_type == e1000_ich8lan) ?
+	int mta_reg_count = ((hw->mac_type == e1000_ich8lan) || (hw->mac_type == e1000_ich9lan)) ?
 				E1000_NUM_MTA_REGISTERS_ICH8LAN :
 				E1000_NUM_MTA_REGISTERS;
 
 	if (adapter->hw.mac_type == e1000_ich8lan)
 		rar_entries = E1000_RAR_ENTRIES_ICH8LAN;
+	else if (adapter->hw.mac_type == e1000_ich9lan)
+		rar_entries = E1000_RAR_ENTRIES_ICH9LAN;
 
 	/* reserve RAR[14] for LAA over-write work-around */
 	if (adapter->hw.mac_type == e1000_82571)
@@ -3319,6 +3344,7 @@ e1000_xmit_frame(struct sk_buff *skb, st
 			case e1000_82572:
 			case e1000_82573:
 			case e1000_ich8lan:
+			case e1000_ich9lan:
 				pull_size = min((unsigned int)4, skb->data_len);
 				if (!__pskb_pull_tail(skb, pull_size)) {
 					DPRINTK(DRV, ERR,
@@ -3516,6 +3542,14 @@ e1000_change_mtu(struct net_device *netd
 		/* ERT will be enabled later to enable wire speed receives */
 
 		/* fall through to get support */
+	case e1000_ich9lan:
+		if ((adapter->hw.phy_type == e1000_phy_ife) &&
+		    (max_frame > ETH_FRAME_LEN + ETHERNET_FCS_SIZE)) {
+			DPRINTK(PROBE, ERR, "Jumbo Frames not supported.\n");
+			return -EINVAL;
+		}
+
+		/* fall through to get support */
 	case e1000_82571:
 	case e1000_82572:
 	case e1000_80003es2lan:
@@ -3604,7 +3638,8 @@ e1000_update_stats(struct e1000_adapter 
 	adapter->stats.mprc += E1000_READ_REG(hw, MPRC);
 	adapter->stats.roc += E1000_READ_REG(hw, ROC);
 
-	if (adapter->hw.mac_type != e1000_ich8lan) {
+	if ((adapter->hw.mac_type != e1000_ich8lan) &&
+	    (adapter->hw.mac_type != e1000_ich9lan)) {
 		adapter->stats.prc64 += E1000_READ_REG(hw, PRC64);
 		adapter->stats.prc127 += E1000_READ_REG(hw, PRC127);
 		adapter->stats.prc255 += E1000_READ_REG(hw, PRC255);
@@ -3640,7 +3675,8 @@ e1000_update_stats(struct e1000_adapter 
 	adapter->stats.toth += E1000_READ_REG(hw, TOTH);
 	adapter->stats.tpr += E1000_READ_REG(hw, TPR);
 
-	if (adapter->hw.mac_type != e1000_ich8lan) {
+	if ((adapter->hw.mac_type != e1000_ich8lan) &&
+	    (adapter->hw.mac_type != e1000_ich9lan)) {
 		adapter->stats.ptc64 += E1000_READ_REG(hw, PTC64);
 		adapter->stats.ptc127 += E1000_READ_REG(hw, PTC127);
 		adapter->stats.ptc255 += E1000_READ_REG(hw, PTC255);
@@ -3671,7 +3707,8 @@ e1000_update_stats(struct e1000_adapter 
 		adapter->stats.iac += E1000_READ_REG(hw, IAC);
 		adapter->stats.icrxoc += E1000_READ_REG(hw, ICRXOC);
 
-		if (adapter->hw.mac_type != e1000_ich8lan) {
+		if ((adapter->hw.mac_type != e1000_ich8lan) &&
+		    (adapter->hw.mac_type != e1000_ich9lan)) {
 			adapter->stats.icrxptc += E1000_READ_REG(hw, ICRXPTC);
 			adapter->stats.icrxatc += E1000_READ_REG(hw, ICRXATC);
 			adapter->stats.ictxptc += E1000_READ_REG(hw, ICTXPTC);
@@ -4943,7 +4980,8 @@ e1000_vlan_rx_register(struct net_device
 		ctrl |= E1000_CTRL_VME;
 		E1000_WRITE_REG(&adapter->hw, CTRL, ctrl);
 
-		if (adapter->hw.mac_type != e1000_ich8lan) {
+		if ((adapter->hw.mac_type != e1000_ich8lan) &&
+		    (adapter->hw.mac_type != e1000_ich9lan)) {
 			/* enable VLAN receive filtering */
 			rctl = E1000_READ_REG(&adapter->hw, RCTL);
 			rctl |= E1000_RCTL_VFE;
@@ -4957,7 +4995,8 @@ e1000_vlan_rx_register(struct net_device
 		ctrl &= ~E1000_CTRL_VME;
 		E1000_WRITE_REG(&adapter->hw, CTRL, ctrl);
 
-		if (adapter->hw.mac_type != e1000_ich8lan) {
+		if ((adapter->hw.mac_type != e1000_ich8lan) &&
+		    (adapter->hw.mac_type != e1000_ich9lan)) {
 			/* disable VLAN filtering */
 			rctl = E1000_READ_REG(&adapter->hw, RCTL);
 			rctl &= ~E1000_RCTL_VFE;
@@ -5202,7 +5241,9 @@ e1000_resume(struct pci_dev *pdev)
 	 * DRV_LOAD until the interface is up.  For all other cases,
 	 * let the f/w know that the h/w is now under the control
 	 * of the driver. */
-	if (adapter->hw.mac_type != e1000_82573 ||
+	if (((adapter->hw.mac_type != e1000_82573) &&
+	     (adapter->hw.mac_type != e1000_ich8lan) &&
+	     (adapter->hw.mac_type != e1000_ich9lan)) ||
 	    !e1000_check_mng_mode(&adapter->hw))
 		e1000_get_hw_control(adapter);
 
@@ -5314,7 +5355,9 @@ static void e1000_io_resume(struct pci_d
 	 * DRV_LOAD until the interface is up.  For all other cases,
 	 * let the f/w know that the h/w is now under the control
 	 * of the driver. */
-	if (adapter->hw.mac_type != e1000_82573 ||
+	if (((adapter->hw.mac_type != e1000_82573) &&
+             (adapter->hw.mac_type != e1000_ich8lan) &&
+             (adapter->hw.mac_type != e1000_ich9lan)) ||
 	    !e1000_check_mng_mode(&adapter->hw))
 		e1000_get_hw_control(adapter);
 
--- ./drivers/net/e1000/e1000_hw.c.ich9	2007-06-29 17:45:55.000000000 +0100
+++ ./drivers/net/e1000/e1000_hw.c	2007-06-29 18:14:36.000000000 +0100
@@ -414,6 +414,13 @@ e1000_set_mac_type(struct e1000_hw *hw)
 	case E1000_DEV_ID_ICH8_IGP_M:
 		hw->mac_type = e1000_ich8lan;
 		break;
+	case E1000_DEV_ID_ICH9_IFE:
+	case E1000_DEV_ID_ICH9_IFE_GT:
+	case E1000_DEV_ID_ICH9_IFE_G:
+	case E1000_DEV_ID_ICH9_IGP_AMT:
+	case E1000_DEV_ID_ICH9_IGP_C:
+		hw->mac_type = e1000_ich9lan;
+		break;
 	default:
 		/* Should never have loaded on this device */
 		return -E1000_ERR_MAC_TYPE;
@@ -421,6 +428,7 @@ e1000_set_mac_type(struct e1000_hw *hw)
 
 	switch (hw->mac_type) {
 	case e1000_ich8lan:
+	case e1000_ich9lan:
 		hw->swfwhw_semaphore_present = TRUE;
 		hw->asf_firmware_present = TRUE;
 		break;
@@ -496,6 +504,7 @@ e1000_set_media_type(struct e1000_hw *hw
             hw->media_type = e1000_media_type_fiber;
             break;
         case e1000_ich8lan:
+        case e1000_ich9lan:
         case e1000_82573:
             /* The STATUS_TBIMODE bit is reserved or reused for the this
              * device.
@@ -632,6 +641,7 @@ e1000_reset_hw(struct e1000_hw *hw)
             E1000_WRITE_REG(hw, CTRL_DUP, (ctrl | E1000_CTRL_RST));
             break;
         case e1000_ich8lan:
+        case e1000_ich9lan:
             if (!hw->phy_reset_disable &&
                 e1000_check_phy_reset_block(hw) == E1000_SUCCESS) {
                 /* e1000_ich8lan PHY HW reset requires MAC CORE reset
@@ -722,7 +732,7 @@ e1000_reset_hw(struct e1000_hw *hw)
             e1000_pci_set_mwi(hw);
     }
 
-    if (hw->mac_type == e1000_ich8lan) {
+    if (hw->mac_type == e1000_ich8lan || hw->mac_type == e1000_ich9lan) {
         uint32_t kab = E1000_READ_REG(hw, KABGTXD);
         kab |= E1000_KABGTXD_BGSQLBIAS;
         E1000_WRITE_REG(hw, KABGTXD, kab);
@@ -820,6 +830,9 @@ e1000_initialize_hardware_bits(struct e1
                      (hw->device_id != E1000_DEV_ID_ICH8_IGP_M)))
                     reg_tarc0 |= ((1 << 29)|(1 << 28));
 
+                /* fall through */
+
+            case e1000_ich9lan:
                 reg_ctrl_ext = E1000_READ_REG(hw, CTRL_EXT);
                 reg_ctrl_ext |= (1 << 22);
                 E1000_WRITE_REG(hw, CTRL_EXT, reg_ctrl_ext);
@@ -901,7 +914,8 @@ e1000_init_hw(struct e1000_hw *hw)
     /* Disabling VLAN filtering. */
     DEBUGOUT("Initializing the IEEE VLAN\n");
     /* VET hardcoded to standard value and VFTA removed in ICH8 LAN */
-    if (hw->mac_type != e1000_ich8lan) {
+    if ((hw->mac_type != e1000_ich8lan) &&
+        (hw->mac_type != e1000_ich9lan)) {
         if (hw->mac_type < e1000_82545_rev_3)
             E1000_WRITE_REG(hw, VET, 0);
         e1000_clear_vfta(hw);
@@ -933,7 +947,8 @@ e1000_init_hw(struct e1000_hw *hw)
     /* Zero out the Multicast HASH table */
     DEBUGOUT("Zeroing the MTA\n");
     mta_size = E1000_MC_TBL_SIZE;
-    if (hw->mac_type == e1000_ich8lan)
+    if ((hw->mac_type == e1000_ich8lan) ||
+        (hw->mac_type == e1000_ich9lan))
         mta_size = E1000_MC_TBL_SIZE_ICH8LAN;
     for (i = 0; i < mta_size; i++) {
         E1000_WRITE_REG_ARRAY(hw, MTA, i, 0);
@@ -979,7 +994,8 @@ e1000_init_hw(struct e1000_hw *hw)
     }
 
     /* More time needed for PHY to initialize */
-    if (hw->mac_type == e1000_ich8lan)
+    if ((hw->mac_type == e1000_ich8lan) ||
+        (hw->mac_type == e1000_ich9lan))
         msleep(15);
 
     /* Call a subroutine to configure the link and setup flow control. */
@@ -1024,6 +1040,7 @@ e1000_init_hw(struct e1000_hw *hw)
     case e1000_82571:
     case e1000_82572:
     case e1000_ich8lan:
+    case e1000_ich9lan:
         ctrl = E1000_READ_REG(hw, TXDCTL1);
         ctrl = (ctrl & ~E1000_TXDCTL_WTHRESH) | E1000_TXDCTL_FULL_TX_DESC_WB;
         E1000_WRITE_REG(hw, TXDCTL1, ctrl);
@@ -1137,6 +1154,7 @@ e1000_setup_link(struct e1000_hw *hw)
     if (hw->fc == E1000_FC_DEFAULT) {
         switch (hw->mac_type) {
         case e1000_ich8lan:
+        case e1000_ich9lan:
         case e1000_82573:
             hw->fc = E1000_FC_FULL;
             break;
@@ -1204,7 +1222,8 @@ e1000_setup_link(struct e1000_hw *hw)
     DEBUGOUT("Initializing the Flow Control address, type and timer regs\n");
 
     /* FCAL/H and FCT are hardcoded to standard values in e1000_ich8lan. */
-    if (hw->mac_type != e1000_ich8lan) {
+    if ((hw->mac_type != e1000_ich8lan) &&
+        (hw->mac_type != e1000_ich9lan)) {
         E1000_WRITE_REG(hw, FCT, FLOW_CONTROL_TYPE);
         E1000_WRITE_REG(hw, FCAH, FLOW_CONTROL_ADDRESS_HIGH);
         E1000_WRITE_REG(hw, FCAL, FLOW_CONTROL_ADDRESS_LOW);
@@ -1472,7 +1491,8 @@ e1000_copper_link_igp_setup(struct e1000
 
     /* Wait 15ms for MAC to configure PHY from eeprom settings */
     msleep(15);
-    if (hw->mac_type != e1000_ich8lan) {
+    if ((hw->mac_type != e1000_ich8lan) &&
+        (hw->mac_type != e1000_ich9lan)) {
     /* Configure activity LED after PHY reset */
     led_ctrl = E1000_READ_REG(hw, LEDCTL);
     led_ctrl &= IGP_ACTIVITY_LED_MASK;
@@ -1973,6 +1993,7 @@ e1000_setup_copper_link(struct e1000_hw 
     switch (hw->mac_type) {
     case e1000_80003es2lan:
     case e1000_ich8lan:
+    case e1000_ich9lan:
         /* Set the mac to wait the maximum time between each
          * iteration and increase the max iterations when
          * polling the phy; this fixes erroneous timeouts at 10Mbps. */
@@ -3212,7 +3233,9 @@ e1000_get_speed_and_duplex(struct e1000_
             return ret_val;
     }
 
-    if ((hw->phy_type == e1000_phy_igp_3) && (*speed == SPEED_1000)) {
+    if ((hw->mac_type == e1000_ich8lan) &&
+        (hw->phy_type == e1000_phy_igp_3) &&
+        (*speed == SPEED_1000)) {
         ret_val = e1000_kumeran_lock_loss_workaround(hw);
         if (ret_val)
             return ret_val;
@@ -4124,6 +4147,7 @@ e1000_detect_gig_phy(struct e1000_hw *hw
         if (hw->phy_id == GG82563_E_PHY_ID) match = TRUE;
         break;
     case e1000_ich8lan:
+    case e1000_ich9lan:
         if (hw->phy_id == IGP03E1000_E_PHY_ID) match = TRUE;
         if (hw->phy_id == IFE_E_PHY_ID) match = TRUE;
         if (hw->phy_id == IFE_PLUS_E_PHY_ID) match = TRUE;
@@ -4572,6 +4596,7 @@ e1000_init_eeprom_params(struct e1000_hw
         eeprom->use_eewr = FALSE;
         break;
     case e1000_ich8lan:
+    case e1000_ich9lan:
         {
         int32_t  i = 0;
         uint32_t flash_size = E1000_READ_ICH_FLASH_REG(hw, ICH_FLASH_GFPREG);
@@ -5191,7 +5216,8 @@ e1000_is_onboard_nvm_eeprom(struct e1000
 
     DEBUGFUNC("e1000_is_onboard_nvm_eeprom");
 
-    if (hw->mac_type == e1000_ich8lan)
+    if ((hw->mac_type == e1000_ich8lan) ||
+        (hw->mac_type == e1000_ich9lan))
         return FALSE;
 
     if (hw->mac_type == e1000_82573) {
@@ -5244,7 +5270,8 @@ e1000_validate_eeprom_checksum(struct e1
         }
     }
 
-    if (hw->mac_type == e1000_ich8lan) {
+    if ((hw->mac_type == e1000_ich8lan) ||
+        (hw->mac_type == e1000_ich9lan) ) {
         /* Drivers must allocate the shadow ram structure for the
          * EEPROM checksum to be updated.  Otherwise, this bit as well
          * as the checksum must both be set correctly for this
@@ -5587,7 +5614,8 @@ e1000_commit_shadow_ram(struct e1000_hw 
         }
     }
 
-    if (hw->mac_type == e1000_ich8lan && hw->eeprom_shadow_ram != NULL) {
+    if (((hw->mac_type == e1000_ich8lan) ||
+         (hw->mac_type == e1000_ich9lan)) && hw->eeprom_shadow_ram != NULL) {
         /* We're writing to the opposite bank so if we're on bank 1,
          * write to bank 0 etc.  We also need to erase the segment that
          * is going to be written */
@@ -5767,6 +5795,8 @@ e1000_init_rx_addrs(struct e1000_hw *hw)
         rar_num -= 1;
     if (hw->mac_type == e1000_ich8lan)
         rar_num = E1000_RAR_ENTRIES_ICH8LAN;
+    else if (hw->mac_type == e1000_ich9lan)
+        rar_num = E1000_RAR_ENTRIES_ICH9LAN;
 
     /* Zero out the other 15 receive addresses. */
     DEBUGOUT("Clearing RAR[1-15]\n");
@@ -5799,7 +5829,7 @@ e1000_hash_mc_addr(struct e1000_hw *hw,
      * LSB                 MSB
      */
     case 0:
-        if (hw->mac_type == e1000_ich8lan) {
+        if (hw->mac_type == e1000_ich8lan || hw->mac_type == e1000_ich9lan) {
             /* [47:38] i.e. 0x158 for above example address */
             hash_value = ((mc_addr[4] >> 6) | (((uint16_t) mc_addr[5]) << 2));
         } else {
@@ -5808,7 +5838,7 @@ e1000_hash_mc_addr(struct e1000_hw *hw,
         }
         break;
     case 1:
-        if (hw->mac_type == e1000_ich8lan) {
+        if (hw->mac_type == e1000_ich8lan || hw->mac_type == e1000_ich9lan) {
             /* [46:37] i.e. 0x2B1 for above example address */
             hash_value = ((mc_addr[4] >> 5) | (((uint16_t) mc_addr[5]) << 3));
         } else {
@@ -5817,7 +5847,7 @@ e1000_hash_mc_addr(struct e1000_hw *hw,
         }
         break;
     case 2:
-        if (hw->mac_type == e1000_ich8lan) {
+        if (hw->mac_type == e1000_ich8lan || hw->mac_type == e1000_ich9lan) {
             /*[45:36] i.e. 0x163 for above example address */
             hash_value = ((mc_addr[4] >> 4) | (((uint16_t) mc_addr[5]) << 4));
         } else {
@@ -5826,7 +5856,7 @@ e1000_hash_mc_addr(struct e1000_hw *hw,
         }
         break;
     case 3:
-        if (hw->mac_type == e1000_ich8lan) {
+        if (hw->mac_type == e1000_ich8lan || hw->mac_type == e1000_ich9lan) {
             /* [43:34] i.e. 0x18D for above example address */
             hash_value = ((mc_addr[4] >> 2) | (((uint16_t) mc_addr[5]) << 6));
         } else {
@@ -5837,7 +5867,7 @@ e1000_hash_mc_addr(struct e1000_hw *hw,
     }
 
     hash_value &= 0xFFF;
-    if (hw->mac_type == e1000_ich8lan)
+    if (hw->mac_type == e1000_ich8lan || hw->mac_type == e1000_ich9lan)
         hash_value &= 0x3FF;
 
     return hash_value;
@@ -5866,7 +5896,8 @@ e1000_mta_set(struct e1000_hw *hw,
      * register are determined by the lower 5 bits of the value.
      */
     hash_reg = (hash_value >> 5) & 0x7F;
-    if (hw->mac_type == e1000_ich8lan)
+    if ((hw->mac_type == e1000_ich8lan) ||
+        (hw->mac_type == e1000_ich9lan))
         hash_reg &= 0x1F;
 
     hash_bit = hash_value & 0x1F;
@@ -5963,7 +5994,8 @@ e1000_write_vfta(struct e1000_hw *hw,
 {
     uint32_t temp;
 
-    if (hw->mac_type == e1000_ich8lan)
+    if ((hw->mac_type == e1000_ich8lan) ||
+        (hw->mac_type == e1000_ich9lan))
         return;
 
     if ((hw->mac_type == e1000_82544) && ((offset & 0x1) == 1)) {
@@ -5991,7 +6023,8 @@ e1000_clear_vfta(struct e1000_hw *hw)
     uint32_t vfta_offset = 0;
     uint32_t vfta_bit_in_reg = 0;
 
-    if (hw->mac_type == e1000_ich8lan)
+    if ((hw->mac_type == e1000_ich8lan) ||
+        (hw->mac_type == e1000_ich9lan))
         return;
 
     if (hw->mac_type == e1000_82573) {
@@ -6049,7 +6082,8 @@ e1000_id_led_init(struct e1000_hw * hw)
         eeprom_data = ID_LED_DEFAULT_82573;
     else if ((eeprom_data == ID_LED_RESERVED_0000) ||
             (eeprom_data == ID_LED_RESERVED_FFFF)) {
-        if (hw->mac_type == e1000_ich8lan)
+        if ((hw->mac_type == e1000_ich8lan) ||
+            (hw->mac_type == e1000_ich9lan))
             eeprom_data = ID_LED_DEFAULT_ICH8LAN;
         else
             eeprom_data = ID_LED_DEFAULT;
@@ -6360,7 +6394,8 @@ e1000_clear_hw_cntrs(struct e1000_hw *hw
     temp = E1000_READ_REG(hw, XOFFTXC);
     temp = E1000_READ_REG(hw, FCRUC);
 
-    if (hw->mac_type != e1000_ich8lan) {
+    if ((hw->mac_type != e1000_ich8lan) &&
+        (hw->mac_type != e1000_ich9lan)) {
     temp = E1000_READ_REG(hw, PRC64);
     temp = E1000_READ_REG(hw, PRC127);
     temp = E1000_READ_REG(hw, PRC255);
@@ -6389,7 +6424,8 @@ e1000_clear_hw_cntrs(struct e1000_hw *hw
     temp = E1000_READ_REG(hw, TPR);
     temp = E1000_READ_REG(hw, TPT);
 
-    if (hw->mac_type != e1000_ich8lan) {
+    if ((hw->mac_type != e1000_ich8lan) &&
+        (hw->mac_type != e1000_ich9lan)) {
     temp = E1000_READ_REG(hw, PTC64);
     temp = E1000_READ_REG(hw, PTC127);
     temp = E1000_READ_REG(hw, PTC255);
@@ -6421,7 +6457,7 @@ e1000_clear_hw_cntrs(struct e1000_hw *hw
     temp = E1000_READ_REG(hw, IAC);
     temp = E1000_READ_REG(hw, ICRXOC);
 
-    if (hw->mac_type == e1000_ich8lan) return;
+    if ((hw->mac_type == e1000_ich8lan) || (hw->mac_type == e1000_ich9lan)) return;
 
     temp = E1000_READ_REG(hw, ICRXPTC);
     temp = E1000_READ_REG(hw, ICRXATC);
@@ -6614,9 +6650,16 @@ e1000_get_bus_info(struct e1000_hw *hw)
                           PCI_EX_LINK_WIDTH_SHIFT;
         break;
     case e1000_ich8lan:
+    case e1000_ich9lan:
         hw->bus_type = e1000_bus_type_pci_express;
         hw->bus_speed = e1000_bus_speed_2500;
-        hw->bus_width = e1000_bus_width_pciex_1;
+        /* ICH devices are "PCI Express"-ish.  They have
+         * a configuration space, but do not contain
+         * PCI Express Capability registers, so bus width
+         * must be hardcoded.
+         */
+        if (hw->bus_width == e1000_bus_width_unknown)
+            hw->bus_width = e1000_bus_width_pciex_1;
         break;
     default:
         status = E1000_READ_REG(hw, STATUS);
@@ -7252,7 +7295,8 @@ e1000_set_d3_lplu_state(struct e1000_hw 
         ret_val = e1000_read_phy_reg(hw, IGP01E1000_GMII_FIFO, &phy_data);
         if (ret_val)
             return ret_val;
-    } else if (hw->mac_type == e1000_ich8lan) {
+    } else if ((hw->mac_type == e1000_ich8lan) ||
+               (hw->mac_type == e1000_ich9lan)) {
         /* MAC writes into PHY register based on the state transition
          * and start auto-negotiation. SW driver can overwrite the settings
          * in CSR PHY power control E1000_PHY_CTRL register. */
@@ -7271,7 +7315,8 @@ e1000_set_d3_lplu_state(struct e1000_hw 
             if (ret_val)
                 return ret_val;
         } else {
-            if (hw->mac_type == e1000_ich8lan) {
+            if ((hw->mac_type == e1000_ich8lan) ||
+                (hw->mac_type == e1000_ich9lan)) {
                 phy_ctrl &= ~E1000_PHY_CTRL_NOND0A_LPLU;
                 E1000_WRITE_REG(hw, PHY_CTRL, phy_ctrl);
             } else {
@@ -7322,7 +7367,8 @@ e1000_set_d3_lplu_state(struct e1000_hw 
             if (ret_val)
                 return ret_val;
         } else {
-            if (hw->mac_type == e1000_ich8lan) {
+            if ((hw->mac_type == e1000_ich8lan) ||
+                (hw->mac_type == e1000_ich9lan)) {
                 phy_ctrl |= E1000_PHY_CTRL_NOND0A_LPLU;
                 E1000_WRITE_REG(hw, PHY_CTRL, phy_ctrl);
             } else {
@@ -7374,7 +7420,8 @@ e1000_set_d0_lplu_state(struct e1000_hw 
     if (hw->mac_type <= e1000_82547_rev_2)
         return E1000_SUCCESS;
 
-    if (hw->mac_type == e1000_ich8lan) {
+    if ((hw->mac_type == e1000_ich8lan) ||
+        (hw->mac_type == e1000_ich9lan)) {
         phy_ctrl = E1000_READ_REG(hw, PHY_CTRL);
     } else {
         ret_val = e1000_read_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT, &phy_data);
@@ -7383,7 +7430,8 @@ e1000_set_d0_lplu_state(struct e1000_hw 
     }
 
     if (!active) {
-        if (hw->mac_type == e1000_ich8lan) {
+        if ((hw->mac_type == e1000_ich8lan) ||
+            (hw->mac_type == e1000_ich9lan)) {
             phy_ctrl &= ~E1000_PHY_CTRL_D0A_LPLU;
             E1000_WRITE_REG(hw, PHY_CTRL, phy_ctrl);
         } else {
@@ -7424,7 +7472,8 @@ e1000_set_d0_lplu_state(struct e1000_hw 
 
     } else {
 
-        if (hw->mac_type == e1000_ich8lan) {
+        if ((hw->mac_type == e1000_ich8lan) ||
+            (hw->mac_type == e1000_ich9lan)) {
             phy_ctrl |= E1000_PHY_CTRL_D0A_LPLU;
             E1000_WRITE_REG(hw, PHY_CTRL, phy_ctrl);
         } else {
@@ -7711,7 +7760,8 @@ e1000_check_mng_mode(struct e1000_hw *hw
 
     fwsm = E1000_READ_REG(hw, FWSM);
 
-    if (hw->mac_type == e1000_ich8lan) {
+    if ((hw->mac_type == e1000_ich8lan) ||
+        (hw->mac_type == e1000_ich9lan)) {
         if ((fwsm & E1000_FWSM_MODE_MASK) ==
             (E1000_MNG_ICH_IAMT_MODE << E1000_FWSM_MODE_SHIFT))
             return TRUE;
@@ -8020,6 +8070,7 @@ e1000_get_auto_rd_done(struct e1000_hw *
     case e1000_82573:
     case e1000_80003es2lan:
     case e1000_ich8lan:
+    case e1000_ich9lan:
         while (timeout) {
             if (E1000_READ_REG(hw, EECD) & E1000_EECD_AUTO_RD)
                 break;
@@ -8248,7 +8299,8 @@ e1000_check_phy_reset_block(struct e1000
     uint32_t manc = 0;
     uint32_t fwsm = 0;
 
-    if (hw->mac_type == e1000_ich8lan) {
+    if ((hw->mac_type == e1000_ich8lan) ||
+        (hw->mac_type == e1000_ich9lan)) {
         fwsm = E1000_READ_REG(hw, FWSM);
         return (fwsm & E1000_FWSM_RSPCIPHY) ? E1000_SUCCESS
                                             : E1000_BLK_PHY_RESET;
@@ -8280,6 +8332,7 @@ e1000_arc_subsystem_valid(struct e1000_h
             return TRUE;
         break;
     case e1000_ich8lan:
+    case e1000_ich9lan:
         return TRUE;
     default:
         break;
@@ -8346,7 +8399,7 @@ e1000_get_software_flag(struct e1000_hw 
 
     DEBUGFUNC("e1000_get_software_flag");
 
-    if (hw->mac_type == e1000_ich8lan) {
+    if (hw->mac_type == e1000_ich8lan || hw->mac_type == e1000_ich9lan) {
         while (timeout) {
             extcnf_ctrl = E1000_READ_REG(hw, EXTCNF_CTRL);
             extcnf_ctrl |= E1000_EXTCNF_CTRL_SWFLAG;
@@ -8384,7 +8437,7 @@ e1000_release_software_flag(struct e1000
 
     DEBUGFUNC("e1000_release_software_flag");
 
-    if (hw->mac_type == e1000_ich8lan) {
+    if (hw->mac_type == e1000_ich8lan || hw->mac_type == e1000_ich9lan) {
         extcnf_ctrl= E1000_READ_REG(hw, EXTCNF_CTRL);
         extcnf_ctrl &= ~E1000_EXTCNF_CTRL_SWFLAG;
         E1000_WRITE_REG(hw, EXTCNF_CTRL, extcnf_ctrl);
@@ -8887,6 +8940,11 @@ e1000_erase_ich8_4k_segment(struct e1000
     } else if (hsfsts.hsf_status.berasesz == 0x1) {
         bank_size = ICH_FLASH_SEG_SIZE_4K;
         iteration = 1;
+    } else if (hsfsts.hsf_status.berasesz == 0x2) {
+        if (hw->mac_type != e1000_ich9lan)
+            return error;
+        bank_size = ICH_FLASH_SEG_SIZE_8K;
+        iteration = 1;
     } else if (hsfsts.hsf_status.berasesz == 0x3) {
         bank_size = ICH_FLASH_SEG_SIZE_64K;
         iteration = 1;
--- ./drivers/net/e1000/e1000_ethtool.c.ich9	2007-06-29 17:45:55.000000000 +0100
+++ ./drivers/net/e1000/e1000_ethtool.c	2007-06-29 17:59:18.000000000 +0100
@@ -608,6 +608,7 @@ e1000_get_drvinfo(struct net_device *net
 	case e1000_82573:
 	case e1000_80003es2lan:
 	case e1000_ich8lan:
+	case e1000_ich9lan:
 		sprintf(firmware_version, "%d.%d-%d",
 			(eeprom_data & 0xF000) >> 12,
 			(eeprom_data & 0x0FF0) >> 4,
@@ -785,6 +786,7 @@ e1000_reg_test(struct e1000_adapter *ada
 		break;
 	case e1000_82573:
 	case e1000_ich8lan:
+	case e1000_ich9lan:
 		toggle = 0x7FFFF033;
 		break;
 	default:
@@ -805,7 +807,8 @@ e1000_reg_test(struct e1000_adapter *ada
 	/* restore previous status */
 	E1000_WRITE_REG(&adapter->hw, STATUS, before);
 
-	if (adapter->hw.mac_type != e1000_ich8lan) {
+	if ((adapter->hw.mac_type != e1000_ich8lan) &&
+	    (adapter->hw.mac_type != e1000_ich9lan)) {
 		REG_PATTERN_TEST(FCAL, 0xFFFFFFFF, 0xFFFFFFFF);
 		REG_PATTERN_TEST(FCAH, 0x0000FFFF, 0xFFFFFFFF);
 		REG_PATTERN_TEST(FCT, 0x0000FFFF, 0xFFFFFFFF);
@@ -825,8 +828,9 @@ e1000_reg_test(struct e1000_adapter *ada
 
 	REG_SET_AND_CHECK(RCTL, 0xFFFFFFFF, 0x00000000);
 
-	before = (adapter->hw.mac_type == e1000_ich8lan ?
-	          0x06C3B33E : 0x06DFB3FE);
+	before = ((adapter->hw.mac_type == e1000_ich8lan) ||
+		  (adapter->hw.mac_type == e1000_ich9lan)) ?
+	          0x06C3B33E : 0x06DFB3FE;
 	REG_SET_AND_CHECK(RCTL, before, 0x003FFFFB);
 	REG_SET_AND_CHECK(TCTL, 0xFFFFFFFF, 0x00000000);
 
@@ -834,12 +838,24 @@ e1000_reg_test(struct e1000_adapter *ada
 
 		REG_SET_AND_CHECK(RCTL, before, 0xFFFFFFFF);
 		REG_PATTERN_TEST(RDBAL, 0xFFFFFFF0, 0xFFFFFFFF);
-		if (adapter->hw.mac_type != e1000_ich8lan)
+		if ((adapter->hw.mac_type != e1000_ich8lan) &&
+		    (adapter->hw.mac_type != e1000_ich9lan))
 			REG_PATTERN_TEST(TXCW, 0xC000FFFF, 0x0000FFFF);
 		REG_PATTERN_TEST(TDBAL, 0xFFFFFFF0, 0xFFFFFFFF);
 		REG_PATTERN_TEST(TIDV, 0x0000FFFF, 0x0000FFFF);
-		value = (adapter->hw.mac_type == e1000_ich8lan ?
-		         E1000_RAR_ENTRIES_ICH8LAN : E1000_RAR_ENTRIES);
+
+		switch (adapter->hw.mac_type) {
+		case e1000_ich8lan:
+			value = E1000_RAR_ENTRIES_ICH8LAN;
+			break;
+		case e1000_ich9lan:
+			value = E1000_RAR_ENTRIES_ICH9LAN;
+			break;
+		default:
+			value = E1000_RAR_ENTRIES;
+			break;
+		}
+
 		for (i = 0; i < value; i++) {
 			REG_PATTERN_TEST(RA + (((i << 1) + 1) << 2), 0x8003FFFF,
 			                 0xFFFFFFFF);
@@ -854,8 +870,9 @@ e1000_reg_test(struct e1000_adapter *ada
 
 	}
 
-	value = (adapter->hw.mac_type == e1000_ich8lan ?
-			E1000_MC_TBL_SIZE_ICH8LAN : E1000_MC_TBL_SIZE);
+	value = ((adapter->hw.mac_type == e1000_ich8lan) ||
+		 (adapter->hw.mac_type == e1000_ich9lan)) ?
+			E1000_MC_TBL_SIZE_ICH8LAN : E1000_MC_TBL_SIZE;
 	for (i = 0; i < value; i++)
 		REG_PATTERN_TEST(MTA + (i << 2), 0xFFFFFFFF, 0xFFFFFFFF);
 
@@ -927,7 +944,8 @@ e1000_intr_test(struct e1000_adapter *ad
 	/* Test each interrupt */
 	for (; i < 10; i++) {
 
-		if (adapter->hw.mac_type == e1000_ich8lan && i == 8)
+		if (((adapter->hw.mac_type == e1000_ich8lan) ||
+		     (adapter->hw.mac_type == e1000_ich9lan)) && i == 8)
 			continue;
 
 		/* Interrupt to test */
@@ -1374,6 +1392,7 @@ e1000_set_phy_loopback(struct e1000_adap
 	case e1000_82573:
 	case e1000_80003es2lan:
 	case e1000_ich8lan:
+	case e1000_ich9lan:
 		return e1000_integrated_phy_loopback(adapter);
 		break;
 
--- ./drivers/net/e1000/e1000_hw.h.ich9	2007-06-29 17:45:55.000000000 +0100
+++ ./drivers/net/e1000/e1000_hw.h	2007-06-29 17:59:18.000000000 +0100
@@ -62,6 +62,7 @@ typedef enum {
     e1000_82573,
     e1000_80003es2lan,
     e1000_ich8lan,
+    e1000_ich9lan,
     e1000_num_macs
 } e1000_mac_type;
 
@@ -497,6 +498,11 @@ int32_t e1000_check_phy_reset_block(stru
 #define E1000_DEV_ID_ICH8_IFE_G          0x10C5
 #define E1000_DEV_ID_ICH8_IGP_M          0x104D
 
+#define E1000_DEV_ID_ICH9_IGP_AMT        0x10BD
+#define E1000_DEV_ID_ICH9_IGP_C          0x294C
+#define E1000_DEV_ID_ICH9_IFE            0x10C0
+#define E1000_DEV_ID_ICH9_IFE_GT         0x10C3
+#define E1000_DEV_ID_ICH9_IFE_G          0x10C2
 
 #define NODE_ADDRESS_SIZE 6
 #define ETH_LENGTH_OF_ADDRESS 6
@@ -583,6 +589,7 @@ int32_t e1000_check_phy_reset_block(stru
 #define E1000_RAR_ENTRIES 15
 
 #define E1000_RAR_ENTRIES_ICH8LAN  6
+#define E1000_RAR_ENTRIES_ICH9LAN  7
 
 #define MIN_NUMBER_OF_DESCRIPTORS  8
 #define MAX_NUMBER_OF_DESCRIPTORS  0xFFF8
@@ -3274,6 +3281,7 @@ struct e1000_host_command_info {
 #define ICH_FLASH_CYCLE_REPEAT_COUNT         10      /* 10 cycles */
 #define ICH_FLASH_SEG_SIZE_256               256
 #define ICH_FLASH_SEG_SIZE_4K                4096
+#define ICH_FLASH_SEG_SIZE_8K                8192
 #define ICH_FLASH_SEG_SIZE_64K               65536
 
 #define ICH_CYCLE_READ                       0x0

linux-2.6-highres-timers.patch:

--- NEW FILE linux-2.6-highres-timers.patch ---
Index: linux-2.6.22-rc7/kernel/time/ntp.c
===================================================================
--- linux-2.6.22-rc7.orig/kernel/time/ntp.c	2007-07-03 20:27:54.000000000 +0200
+++ linux-2.6.22-rc7/kernel/time/ntp.c	2007-07-03 20:27:59.000000000 +0200
@@ -8,11 +8,12 @@
  * changelogs.
  */
 
+#include <linux/hrtimer.h>
+#include <linux/jiffies.h>
 #include <linux/mm.h>
 #include <linux/time.h>
+#include <linux/timer.h>
 #include <linux/timex.h>
-#include <linux/jiffies.h>
-#include <linux/hrtimer.h>
 
 #include <asm/div64.h>
 #include <asm/timex.h>
@@ -187,12 +186,64 @@ u64 current_tick_length(void)
 	return tick_length;
 }
 
+#ifdef CONFIG_GENERIC_CMOS_UPDATE
+
+/* Disable the cmos update - used by virtualization and embedded */
+int no_sync_cmos_clock  __read_mostly;
 
-void __attribute__ ((weak)) notify_arch_cmos_timer(void)
+static void sync_cmos_clock(unsigned long dummy);
+
+static DEFINE_TIMER(sync_cmos_timer, sync_cmos_clock, 0, 0);
+
+static void sync_cmos_clock(unsigned long dummy)
 {
-	return;
+	struct timespec now, next;
+	int fail = 1;
+
+	/*
+	 * If we have an externally synchronized Linux clock, then update
+	 * CMOS clock accordingly every ~11 minutes. Set_rtc_mmss() has to be
+	 * called as close as possible to 500 ms before the new second starts.
+	 * This code is run on a timer.  If the clock is set, that timer
+	 * may not expire at the correct time.  Thus, we adjust...
+	 */
+	if (!ntp_synced())
+		/*
+		 * Not synced, exit, do not restart a timer (if one is
+		 * running, let it run out).
+		 */
+		return;
+
+	getnstimeofday(&now);
+	if (abs(xtime.tv_nsec - (NSEC_PER_SEC / 2)) <= tick_nsec / 2)
+		fail = update_persistent_clock(now);
+
+	next.tv_nsec = (NSEC_PER_SEC / 2) - now.tv_nsec;
+	if (next.tv_nsec <= 0)
+		next.tv_nsec += NSEC_PER_SEC;
+
+	if (!fail)
+		next.tv_sec = 659;
+	else
+		next.tv_sec = 0;
+
+	if (next.tv_nsec >= NSEC_PER_SEC) {
+		next.tv_sec++;
+		next.tv_nsec -= NSEC_PER_SEC;
+	}
+	mod_timer(&sync_cmos_timer, jiffies + timespec_to_jiffies(&next));
 }
 
+static void notify_cmos_timer(void)
+{
+	if (no_sync_cmos_clock)
+		mod_timer(&sync_cmos_timer, jiffies + 1);
+}
+
+#else
+static inline void notify_cmos_timer(void) { }
+#endif
+
 /* adjtimex mainly allows reading (and writing, if superuser) of
  * kernel time-keeping variables. used by xntpd.
  */
@@ -357,6 +408,6 @@ leave:	if ((time_status & (STA_UNSYNC|ST
 	txc->stbcnt	   = 0;
 	write_sequnlock_irq(&xtime_lock);
 	do_gettimeofday(&txc->time);
-	notify_arch_cmos_timer();
+	notify_cmos_timer();
 	return(result);
 }
Index: linux-2.6.22-rc7/arch/i386/Kconfig
===================================================================
--- linux-2.6.22-rc7.orig/arch/i386/Kconfig	2007-07-03 20:27:53.000000000 +0200
+++ linux-2.6.22-rc7/arch/i386/Kconfig	2007-07-03 20:27:59.000000000 +0200
@@ -18,6 +18,10 @@ config GENERIC_TIME
 	bool
 	default y
 
+config GENERIC_CMOS_UPDATE
+	bool
+	default y
+
 config CLOCKSOURCE_WATCHDOG
 	bool
 	default y
@@ -1053,6 +1057,8 @@ endif # APM
 
 source "arch/i386/kernel/cpu/cpufreq/Kconfig"
 
+source "drivers/cpuidle/Kconfig"
+
 endmenu
 
 menu "Bus options (PCI, PCMCIA, EISA, MCA, ISA)"
Index: linux-2.6.22-rc7/arch/x86_64/Kconfig
===================================================================
--- linux-2.6.22-rc7.orig/arch/x86_64/Kconfig	2007-07-03 20:27:53.000000000 +0200
+++ linux-2.6.22-rc7/arch/x86_64/Kconfig	2007-07-03 20:28:01.000000000 +0200
@@ -28,10 +28,22 @@ config GENERIC_TIME
 	bool
 	default y
 
+config GENERIC_CLOCKEVENTS_BROADCAST
+	bool
+	default y
+
+config GENERIC_CLOCKEVENTS
+	bool
+	default y
+
 config GENERIC_TIME_VSYSCALL
 	bool
 	default y
 
+config GENERIC_CMOS_UPDATE
+	bool
+	default y
+
 config ZONE_DMA32
 	bool
 	default y
@@ -126,6 +138,8 @@ source "init/Kconfig"
 
 menu "Processor type and features"
 
+source "kernel/time/Kconfig"
+
 choice
 	prompt "Subarchitecture Type"
 	default X86_PC
@@ -698,6 +712,8 @@ source "drivers/acpi/Kconfig"
 
 source "arch/x86_64/kernel/cpufreq/Kconfig"
 
+source "drivers/cpuidle/Kconfig"
+
 endmenu
 
 menu "Bus options (PCI etc.)"
Index: linux-2.6.22-rc7/drivers/Makefile
===================================================================
--- linux-2.6.22-rc7.orig/drivers/Makefile	2007-07-03 20:27:53.000000000 +0200
+++ linux-2.6.22-rc7/drivers/Makefile	2007-07-03 20:27:54.000000000 +0200
@@ -70,6 +70,7 @@ obj-$(CONFIG_EDAC)		+= edac/
 obj-$(CONFIG_MCA)		+= mca/
 obj-$(CONFIG_EISA)		+= eisa/
 obj-$(CONFIG_CPU_FREQ)		+= cpufreq/
+obj-$(CONFIG_CPU_IDLE)		+= cpuidle/
 obj-$(CONFIG_MMC)		+= mmc/
 obj-$(CONFIG_NEW_LEDS)		+= leds/
 obj-$(CONFIG_INFINIBAND)	+= infiniband/
Index: linux-2.6.22-rc7/drivers/cpuidle/Kconfig
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.22-rc7/drivers/cpuidle/Kconfig	2007-07-03 20:27:56.000000000 +0200
@@ -0,0 +1,39 @@
+menu "CPU idle PM support"
+
+config CPU_IDLE
+	bool "CPU idle PM support"
+	help
+	  CPU idle is a generic framework for supporting software-controlled
+	  idle processor power management.  It includes modular cross-platform
+	  governors that can be swapped during runtime.
+
+	  If you're using a mobile platform that supports CPU idle PM (e.g.
+	  an ACPI-capable notebook), you should say Y here.
+
+if CPU_IDLE
+
+comment "Governors"
+
+config CPU_IDLE_GOV_LADDER
+	tristate "'ladder' governor"
+	depends on CPU_IDLE
[...7126 lines suppressed...]
+
+	if (err) {
+		force_hpet_address = 0;
+		iounmap(rcba_base);
+		printk(KERN_DEBUG "Failed to force enable HPET\n");
+	} else {
+		force_hpet_resume_type = ICH_FORCE_HPET_RESUME;
+		printk(KERN_DEBUG "Force enabled HPET at base address 0x%lx\n",
+			       force_hpet_address);
+	}
+}
+
+//DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB2_0,
+//                         ich_force_enable_hpet);
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1,
+                         ich_force_enable_hpet);
+//DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_1,
+//                         ich_force_enable_hpet);
+//DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_31,
+//                         ich_force_enable_hpet);
+//DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_1,
+//                         ich_force_enable_hpet);
+
+
+static struct pci_dev *cached_dev;
+
+static void old_ich_force_hpet_resume(void)
+{
+	u32 val, gen_cntl;
+
+	if (!force_hpet_address || !cached_dev)
+		return;
+
+	pci_read_config_dword(cached_dev, 0xD0, &gen_cntl);
+	gen_cntl &= (~(0x7 << 15));
+	gen_cntl |= (0x4 << 15);
+
+	pci_write_config_dword(cached_dev, 0xD0, gen_cntl);
+	pci_read_config_dword(cached_dev, 0xD0, &gen_cntl);
+	val = gen_cntl >> 15;
+	val &= 0x7;
+	if (val == 0x4)
+		printk(KERN_DEBUG "Force enabled HPET at resume\n");
+	else
+		BUG();
+}
+
+static void old_ich_force_enable_hpet(struct pci_dev *dev)
+{
+	u32 val, gen_cntl;
+
+	if (hpet_address || force_hpet_address)
+		return;
+
+	pci_read_config_dword(dev, 0xD0, &gen_cntl);
+	/*
+	 * Bit 17 is HPET enable bit.
+	 * Bit 16:15 control the HPET base address.
+	 */
+	val = gen_cntl >> 15;
+	val &= 0x7;
+	if (val & 0x4) {
+		val &= 0x3;
+		force_hpet_address = 0xFED00000 | (val << 12);
+		printk(KERN_DEBUG "HPET at base address 0x%lx\n",
+			       force_hpet_address);
+		return;
+	}
+
+	/*
+	 * HPET is disabled. Trying enabling at FED00000 and check
+	 * whether it sticks
+	 */
+	gen_cntl &= (~(0x7 << 15));
+	gen_cntl |= (0x4 << 15);
+	pci_write_config_dword(dev, 0xD0, gen_cntl);
+
+	pci_read_config_dword(dev, 0xD0, &gen_cntl);
+
+	val = gen_cntl >> 15;
+	val &= 0x7;
+	if (val & 0x4) {
+		/* HPET is enabled in HPTC. Just not reported by BIOS */
+		val &= 0x3;
+		force_hpet_address = 0xFED00000 | (val << 12);
+		printk(KERN_DEBUG "Force enabled HPET at base address 0x%lx\n",
+			       force_hpet_address);
+		cached_dev = dev;
+		force_hpet_resume_type = OLD_ICH_FORCE_HPET_RESUME;
+		return;
+	}
+
+	printk(KERN_DEBUG "Failed to force enable HPET\n");
+}
+
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_0,
+                         old_ich_force_enable_hpet);
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12,
+                         old_ich_force_enable_hpet);
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_0,
+                         old_ich_force_enable_hpet);
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12,
+                         old_ich_force_enable_hpet);
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0,
+                         old_ich_force_enable_hpet);
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_12,
+                         old_ich_force_enable_hpet);
+
+
+static void vt8237_force_hpet_resume(void)
+{
+	u32 val;
+
+	if (!force_hpet_address || !cached_dev)
+		return;
+
+	val = 0xfed00000 | 0x80;
+	pci_write_config_dword(cached_dev, 0x68, val);
+
+	pci_read_config_dword(cached_dev, 0x68, &val);
+	if (val & 0x80)
+		printk(KERN_DEBUG "Force enabled HPET at resume\n");
+	else
+		BUG();
+}
+
+static void vt8237_force_enable_hpet(struct pci_dev *dev)
+{
+	u32 val;
+
+	if (hpet_address || force_hpet_address)
+		return;
+
+	pci_read_config_dword(dev, 0x68, &val);
+	/*
+	 * Bit 7 is HPET enable bit.
+	 * Bit 31:10 is HPET base address (contrary to what datasheet claims)
+	 */
+	if (val & 0x80) {
+		force_hpet_address = (val & ~0x3ff);
+		printk(KERN_DEBUG "HPET at base address 0x%lx\n",
+			       force_hpet_address);
+		return;
+	}
+
+	/*
+	 * HPET is disabled. Trying enabling at FED00000 and check
+	 * whether it sticks
+	 */
+	val = 0xfed00000 | 0x80;
+	pci_write_config_dword(dev, 0x68, val);
+
+	pci_read_config_dword(dev, 0x68, &val);
+	if (val & 0x80) {
+		force_hpet_address = (val & ~0x3ff);
+		printk(KERN_DEBUG "Force enabled HPET at base address 0x%lx\n",
+			       force_hpet_address);
+		cached_dev = dev;
+		force_hpet_resume_type = VT8237_FORCE_HPET_RESUME;
+		return;
+	}
+
+	printk(KERN_DEBUG "Failed to force enable HPET\n");
+}
+
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8235,
+			 vt8237_force_enable_hpet);
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237,
+			 vt8237_force_enable_hpet);
+
+void force_hpet_resume(void)
+{
+	switch (force_hpet_resume_type) {
+	    case ICH_FORCE_HPET_RESUME:
+		return ich_force_hpet_resume();
+
+	    case OLD_ICH_FORCE_HPET_RESUME:
+		return old_ich_force_hpet_resume();
+
+	    case VT8237_FORCE_HPET_RESUME:
+		return vt8237_force_hpet_resume();
+
+	    default:
+		break;
+	}
+}
+
+#endif
Index: linux-2.6.22-rc7/include/linux/pci_ids.h
===================================================================
--- linux-2.6.22-rc7.orig/include/linux/pci_ids.h	2007-07-03 20:27:46.000000000 +0200
+++ linux-2.6.22-rc7/include/linux/pci_ids.h	2007-07-03 20:28:01.000000000 +0200
@@ -2220,6 +2220,7 @@
 #define PCI_DEVICE_ID_INTEL_82801EB_5	0x24d5
 #define PCI_DEVICE_ID_INTEL_82801EB_6	0x24d6
 #define PCI_DEVICE_ID_INTEL_82801EB_11	0x24db
+#define PCI_DEVICE_ID_INTEL_82801EB_12	0x24dc
 #define PCI_DEVICE_ID_INTEL_82801EB_13	0x24dd
 #define PCI_DEVICE_ID_INTEL_ESB_1	0x25a1
 #define PCI_DEVICE_ID_INTEL_ESB_2	0x25a2

linux-2.6-kvm-suspend.patch:

--- NEW FILE linux-2.6-kvm-suspend.patch ---
diff --git a/arch/i386/kernel/cpu/mcheck/therm_throt.c b/arch/i386/kernel/cpu/mcheck/therm_throt.c
index 7ba7c3a..1203dc5 100644
--- a/arch/i386/kernel/cpu/mcheck/therm_throt.c
+++ b/arch/i386/kernel/cpu/mcheck/therm_throt.c
@@ -134,19 +134,21 @@ static __cpuinit int thermal_throttle_cpu_callback(struct notifier_block *nfb,
 	int err;
 
 	sys_dev = get_cpu_sysdev(cpu);
-	mutex_lock(&therm_cpu_lock);
 	switch (action) {
 	case CPU_ONLINE:
 	case CPU_ONLINE_FROZEN:
+		mutex_lock(&therm_cpu_lock);
 		err = thermal_throttle_add_dev(sys_dev);
+		mutex_unlock(&therm_cpu_lock);
 		WARN_ON(err);
 		break;
 	case CPU_DEAD:
 	case CPU_DEAD_FROZEN:
+		mutex_lock(&therm_cpu_lock);
 		thermal_throttle_remove_dev(sys_dev);
+		mutex_unlock(&therm_cpu_lock);
 		break;
 	}
-	mutex_unlock(&therm_cpu_lock);
 	return NOTIFY_OK;
 }
 
diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c
index da985b3..1ad5ea1 100644
--- a/drivers/kvm/kvm_main.c
+++ b/drivers/kvm/kvm_main.c
@@ -41,6 +41,7 @@
 #include <linux/fs.h>
 #include <linux/mount.h>
 #include <linux/sched.h>
+#include <linux/cpumask.h>
 
 #include "x86_emulate.h"
 #include "segment_descriptor.h"
@@ -51,8 +52,12 @@ MODULE_LICENSE("GPL");
 static DEFINE_SPINLOCK(kvm_lock);
 static LIST_HEAD(vm_list);
 
+static cpumask_t cpus_hardware_enabled;
+
 struct kvm_arch_ops *kvm_arch_ops;
 
+static void hardware_disable(void *ignored);
+
 #define STAT_OFFSET(x) offsetof(struct kvm_vcpu, stat.x)
 
 static struct kvm_stats_debugfs_item {
@@ -2840,7 +2845,7 @@ static int kvm_reboot(struct notifier_block *notifier, unsigned long val,
 		 * in vmx root mode.
 		 */
 		printk(KERN_INFO "kvm: exiting hardware virtualization\n");
-		on_each_cpu(kvm_arch_ops->hardware_disable, NULL, 0, 1);
+		on_each_cpu(hardware_disable, NULL, 0, 1);
 	}
 	return NOTIFY_OK;
 }
@@ -2883,28 +2888,46 @@ static void decache_vcpus_on_cpu(int cpu)
 	spin_unlock(&kvm_lock);
 }
 
+static void hardware_enable(void *junk)
+{
+	int cpu = raw_smp_processor_id();
+
+	if (cpu_isset(cpu, cpus_hardware_enabled))
+		return;
+	cpu_set(cpu, cpus_hardware_enabled);
+	kvm_arch_ops->hardware_enable(NULL);
+}
+
+static void hardware_disable(void *junk)
+{
+	int cpu = raw_smp_processor_id();
+
+	if (!cpu_isset(cpu, cpus_hardware_enabled))
+		return;
+	cpu_clear(cpu, cpus_hardware_enabled);
+	decache_vcpus_on_cpu(cpu);
+	kvm_arch_ops->hardware_disable(NULL);
+}
+
 static int kvm_cpu_hotplug(struct notifier_block *notifier, unsigned long val,
 			   void *v)
 {
 	int cpu = (long)v;
 
 	switch (val) {
-	case CPU_DOWN_PREPARE:
-	case CPU_DOWN_PREPARE_FROZEN:
+	case CPU_DYING:
+	case CPU_DYING_FROZEN:
 	case CPU_UP_CANCELED:
 	case CPU_UP_CANCELED_FROZEN:
 		printk(KERN_INFO "kvm: disabling virtualization on CPU%d\n",
 		       cpu);
-		decache_vcpus_on_cpu(cpu);
-		smp_call_function_single(cpu, kvm_arch_ops->hardware_disable,
-					 NULL, 0, 1);
+		on_cpu(cpu, hardware_disable, NULL, 0, 1);
 		break;
 	case CPU_ONLINE:
 	case CPU_ONLINE_FROZEN:
 		printk(KERN_INFO "kvm: enabling virtualization on CPU%d\n",
 		       cpu);
-		smp_call_function_single(cpu, kvm_arch_ops->hardware_enable,
-					 NULL, 0, 1);
+		on_cpu(cpu, hardware_enable, NULL, 0, 1);
 		break;
 	}
 	return NOTIFY_OK;
@@ -2961,14 +2984,13 @@ static void kvm_exit_debug(void)
 
 static int kvm_suspend(struct sys_device *dev, pm_message_t state)
 {
-	decache_vcpus_on_cpu(raw_smp_processor_id());
-	on_each_cpu(kvm_arch_ops->hardware_disable, NULL, 0, 1);
+	hardware_disable(NULL);
 	return 0;
 }
 
 static int kvm_resume(struct sys_device *dev)
 {
-	on_each_cpu(kvm_arch_ops->hardware_enable, NULL, 0, 1);
+	hardware_enable(NULL);
 	return 0;
 }
 
@@ -3021,7 +3043,7 @@ int kvm_init_arch(struct kvm_arch_ops *ops, struct module *module)
 	if (r < 0)
 		goto out;
 
-	on_each_cpu(kvm_arch_ops->hardware_enable, NULL, 0, 1);
+	on_each_cpu(hardware_enable, NULL, 0, 1);
 	r = register_cpu_notifier(&kvm_cpu_notifier);
 	if (r)
 		goto out_free_1;
@@ -3053,7 +3075,7 @@ out_free_2:
 	unregister_reboot_notifier(&kvm_reboot_notifier);
 	unregister_cpu_notifier(&kvm_cpu_notifier);
 out_free_1:
-	on_each_cpu(kvm_arch_ops->hardware_disable, NULL, 0, 1);
+	on_each_cpu(hardware_disable, NULL, 0, 1);
 	kvm_arch_ops->hardware_unsetup();
 out:
 	kvm_arch_ops = NULL;
@@ -3067,7 +3089,7 @@ void kvm_exit_arch(void)
 	sysdev_class_unregister(&kvm_sysdev_class);
 	unregister_reboot_notifier(&kvm_reboot_notifier);
 	unregister_cpu_notifier(&kvm_cpu_notifier);
-	on_each_cpu(kvm_arch_ops->hardware_disable, NULL, 0, 1);
+	on_each_cpu(hardware_disable, NULL, 0, 1);
 	kvm_arch_ops->hardware_unsetup();
 	kvm_arch_ops = NULL;
 }
diff --git a/include/linux/notifier.h b/include/linux/notifier.h
index 9431101..576f2bb 100644
--- a/include/linux/notifier.h
+++ b/include/linux/notifier.h
@@ -196,6 +196,8 @@ extern int __srcu_notifier_call_chain(struct srcu_notifier_head *nh,
 #define CPU_DEAD		0x0007 /* CPU (unsigned)v dead */
 #define CPU_LOCK_ACQUIRE	0x0008 /* Acquire all hotcpu locks */
 #define CPU_LOCK_RELEASE	0x0009 /* Release all hotcpu locks */
+#define CPU_DYING		0x000A /* CPU (unsigned)v not running any task,
+				        * not handling interrupts, soon dead */
 
 /* Used for CPU hotplug events occuring while tasks are frozen due to a suspend
  * operation in progress
@@ -208,6 +210,7 @@ extern int __srcu_notifier_call_chain(struct srcu_notifier_head *nh,
 #define CPU_DOWN_PREPARE_FROZEN	(CPU_DOWN_PREPARE | CPU_TASKS_FROZEN)
 #define CPU_DOWN_FAILED_FROZEN	(CPU_DOWN_FAILED | CPU_TASKS_FROZEN)
 #define CPU_DEAD_FROZEN		(CPU_DEAD | CPU_TASKS_FROZEN)
+#define CPU_DYING_FROZEN	(CPU_DYING | CPU_TASKS_FROZEN)
 
 #endif /* __KERNEL__ */
 #endif /* _LINUX_NOTIFIER_H */
diff --git a/include/linux/smp.h b/include/linux/smp.h
index 96ac21f..613edd2 100644
--- a/include/linux/smp.h
+++ b/include/linux/smp.h
@@ -7,6 +7,7 @@
  */
 
 #include <linux/errno.h>
+#include <asm/system.h>
 
 extern void cpu_idle(void);
 
@@ -61,6 +62,11 @@ int smp_call_function_single(int cpuid, void (*func) (void *info), void *info,
  * Call a function on all processors
  */
 int on_each_cpu(void (*func) (void *info), void *info, int retry, int wait);
+/*
+ * Call a function on one processor
+ */
+int on_cpu(int cpu, void (*func)(void *info), void *info,
+	       int retry, int wait);
 
 #define MSG_ALL_BUT_SELF	0x8000	/* Assume <32768 CPU's */
 #define MSG_ALL			0x8001
@@ -96,6 +102,16 @@ static inline int up_smp_call_function(void)
 		local_irq_enable();		\
 		0;				\
 	})
+
+static inline int on_cpu(int cpu, void (*func)(void *info), void *info,
+			     int retry, int wait)
+{
+	local_irq_disable();
+	func(info);
+	local_irq_enable();
+	return 0;
+}
+
 static inline void smp_send_reschedule(int cpu) { }
 #define num_booting_cpus()			1
 #define smp_prepare_boot_cpu()			do {} while (0)
diff --git a/kernel/cpu.c b/kernel/cpu.c
index 208cf34..181ae70 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -103,11 +103,19 @@ static inline void check_for_tasks(int cpu)
 	write_unlock_irq(&tasklist_lock);
 }
 
+struct take_cpu_down_param {
+	unsigned long mod;
+	void *hcpu;
+};
+
 /* Take this CPU down. */
-static int take_cpu_down(void *unused)
+static int take_cpu_down(void *_param)
 {
+	struct take_cpu_down_param *param = _param;
 	int err;
 
+	raw_notifier_call_chain(&cpu_chain, CPU_DYING | param->mod,
+				param->hcpu);
 	/* Ensure this CPU doesn't handle any more interrupts. */
 	err = __cpu_disable();
 	if (err < 0)
@@ -127,6 +135,10 @@ static int _cpu_down(unsigned int cpu, int tasks_frozen)
 	cpumask_t old_allowed, tmp;
 	void *hcpu = (void *)(long)cpu;
 	unsigned long mod = tasks_frozen ? CPU_TASKS_FROZEN : 0;
+	struct take_cpu_down_param tcd_param = {
+		.mod = mod,
+		.hcpu = hcpu,
+	};
 
 	if (num_online_cpus() == 1)
 		return -EBUSY;
@@ -153,7 +165,7 @@ static int _cpu_down(unsigned int cpu, int tasks_frozen)
 	set_cpus_allowed(current, tmp);
 
 	mutex_lock(&cpu_bitmask_lock);
-	p = __stop_machine_run(take_cpu_down, NULL, cpu);
+	p = __stop_machine_run(take_cpu_down, &tcd_param, cpu);
 	mutex_unlock(&cpu_bitmask_lock);
 
 	if (IS_ERR(p) || cpu_online(cpu)) {
diff --git a/kernel/cpuset.c b/kernel/cpuset.c
index f57854b..584953a 100644
--- a/kernel/cpuset.c
+++ b/kernel/cpuset.c
@@ -2138,6 +2138,9 @@ static void common_cpu_mem_hotplug_unplug(void)
 static int cpuset_handle_cpuhp(struct notifier_block *nb,
 				unsigned long phase, void *cpu)
 {
+	if (phase == CPU_DYING || phase == CPU_DYING_FROZEN)
+		return NOTIFY_DONE;
+
 	common_cpu_mem_hotplug_unplug();
 	return 0;
 }
diff --git a/kernel/softirq.c b/kernel/softirq.c
index 0b9886a..11666f7 100644
--- a/kernel/softirq.c
+++ b/kernel/softirq.c
@@ -658,4 +658,28 @@ int on_each_cpu(void (*func) (void *info), void *info, int retry, int wait)
 	return ret;
 }
 EXPORT_SYMBOL(on_each_cpu);
+
+/*
+ * Call a function on one processor, which might be the currently executing
+ * processor.
+ */
+int on_cpu(int cpu, void (*func) (void *info), void *info,
+	       int retry, int wait)
+{
+	int ret;
+	int this_cpu;
+
+	this_cpu = get_cpu();
+	if (this_cpu == cpu) {
+		local_irq_disable();
+		func(info);
+		local_irq_enable();
+		ret = 0;
+	} else
+		ret = smp_call_function_single(cpu, func, info, retry, wait);
+	put_cpu();
+	return ret;
+}
+EXPORT_SYMBOL(on_cpu);
+
 #endif

linux-2.6-sched-cfs.patch:

--- NEW FILE linux-2.6-sched-cfs.patch ---
Index: linux/Documentation/kernel-parameters.txt
===================================================================
--- linux.orig/Documentation/kernel-parameters.txt
+++ linux/Documentation/kernel-parameters.txt
@@ -1014,49 +1014,6 @@ and is between 256 and 4096 characters. 
 
 	mga=		[HW,DRM]
 
-	migration_cost=
-			[KNL,SMP] debug: override scheduler migration costs
-			Format: <level-1-usecs>,<level-2-usecs>,...
-			This debugging option can be used to override the
-			default scheduler migration cost matrix. The numbers
-			are indexed by 'CPU domain distance'.
-			E.g. migration_cost=1000,2000,3000 on an SMT NUMA
-			box will set up an intra-core migration cost of
-			1 msec, an inter-core migration cost of 2 msecs,
-			and an inter-node migration cost of 3 msecs.
-
-			WARNING: using the wrong values here can break
-			scheduler performance, so it's only for scheduler
-			development purposes, not production environments.
-
-	migration_debug=
-			[KNL,SMP] migration cost auto-detect verbosity
-			Format=<0|1|2>
-			If a system's migration matrix reported at bootup
-			seems erroneous then this option can be used to
-			increase verbosity of the detection process.
-			We default to 0 (no extra messages), 1 will print
-			some more information, and 2 will be really
-			verbose (probably only useful if you also have a
-			serial console attached to the system).
-
-	migration_factor=
-			[KNL,SMP] multiply/divide migration costs by a factor
-			Format=<percent>
-			This debug option can be used to proportionally
-			increase or decrease the auto-detected migration
-			costs for all entries of the migration matrix.
-			E.g. migration_factor=150 will increase migration
-			costs by 50%. (and thus the scheduler will be less
-			eager migrating cache-hot tasks)
-			migration_factor=80 will decrease migration costs
-			by 20%. (thus the scheduler will be more eager to
-			migrate tasks)
-
-			WARNING: using the wrong values here can break
-			scheduler performance, so it's only for scheduler
-			development purposes, not production environments.
-
 	mousedev.tap_time=
 			[MOUSE] Maximum time between finger touching and
 			leaving touchpad surface for touch to be considered
Index: linux/Documentation/sched-design-CFS.txt
===================================================================
--- /dev/null
+++ linux/Documentation/sched-design-CFS.txt
@@ -0,0 +1,119 @@
+
+This is the CFS scheduler.
+
+80% of CFS's design can be summed up in a single sentence: CFS basically
+models an "ideal, precise multi-tasking CPU" on real hardware.
+
+"Ideal multi-tasking CPU" is a (non-existent  :-))  CPU that has 100%
+physical power and which can run each task at precise equal speed, in
+parallel, each at 1/nr_running speed. For example: if there are 2 tasks
+running then it runs each at 50% physical power - totally in parallel.
+
+On real hardware, we can run only a single task at once, so while that
+one task runs, the other tasks that are waiting for the CPU are at a
+disadvantage - the current task gets an unfair amount of CPU time. In
+CFS this fairness imbalance is expressed and tracked via the per-task
+p->wait_runtime (nanosec-unit) value. "wait_runtime" is the amount of
+time the task should now run on the CPU for it to become completely fair
+and balanced.
+
+( small detail: on 'ideal' hardware, the p->wait_runtime value would
+  always be zero - no task would ever get 'out of balance' from the
+  'ideal' share of CPU time. )
+
+CFS's task picking logic is based on this p->wait_runtime value and it
+is thus very simple: it always tries to run the task with the largest
+p->wait_runtime value. In other words, CFS tries to run the task with
+the 'gravest need' for more CPU time. So CFS always tries to split up
+CPU time between runnable tasks as close to 'ideal multitasking
+hardware' as possible.
+
+Most of the rest of CFS's design just falls out of this really simple
+concept, with a few add-on embellishments like nice levels,
+multiprocessing and various algorithm variants to recognize sleepers.
+
+In practice it works like this: the system runs a task a bit, and when
+the task schedules (or a scheduler tick happens) the task's CPU usage is
+'accounted for': the (small) time it just spent using the physical CPU
+is deducted from p->wait_runtime. [minus the 'fair share' it would have
+gotten anyway]. Once p->wait_runtime gets low enough so that another
+task becomes the 'leftmost task' of the time-ordered rbtree it maintains
+(plus a small amount of 'granularity' distance relative to the leftmost
+task so that we do not over-schedule tasks and trash the cache) then the
+new leftmost task is picked and the current task is preempted.
+
+The rq->fair_clock value tracks the 'CPU time a runnable task would have
+fairly gotten, had it been runnable during that time'. So by using
+rq->fair_clock values we can accurately timestamp and measure the
+'expected CPU time' a task should have gotten. All runnable tasks are
+sorted in the rbtree by the "rq->fair_clock - p->wait_runtime" key, and
+CFS picks the 'leftmost' task and sticks to it. As the system progresses
+forwards, newly woken tasks are put into the tree more and more to the
+right - slowly but surely giving a chance for every task to become the
+'leftmost task' and thus get on the CPU within a deterministic amount of
+time.
+
+Some implementation details:
+
+ - the introduction of Scheduling Classes: an extensible hierarchy of
+   scheduler modules. These modules encapsulate scheduling policy
+   details and are handled by the scheduler core without the core
+   code assuming about them too much.
+
+ - sched_fair.c implements the 'CFS desktop scheduler': it is a
+   replacement for the vanilla scheduler's SCHED_OTHER interactivity
+   code.
+
+   I'd like to give credit to Con Kolivas for the general approach here:
+   he has proven via RSDL/SD that 'fair scheduling' is possible and that
+   it results in better desktop scheduling. Kudos Con!
+
+   The CFS patch uses a completely different approach and implementation
+   from RSDL/SD. My goal was to make CFS's interactivity quality exceed
+   that of RSDL/SD, which is a high standard to meet :-) Testing
+   feedback is welcome to decide this one way or another. [ and, in any
+   case, all of SD's logic could be added via a kernel/sched_sd.c module
+   as well, if Con is interested in such an approach. ]
+
+   CFS's design is quite radical: it does not use runqueues, it uses a
+   time-ordered rbtree to build a 'timeline' of future task execution,
+   and thus has no 'array switch' artifacts (by which both the vanilla
+   scheduler and RSDL/SD are affected).
+
+   CFS uses nanosecond granularity accounting and does not rely on any
+   jiffies or other HZ detail. Thus the CFS scheduler has no notion of
+   'timeslices' and has no heuristics whatsoever. There is only one
+   central tunable:
+
+         /proc/sys/kernel/sched_granularity_ns
+
+   which can be used to tune the scheduler from 'desktop' (low
+   latencies) to 'server' (good batching) workloads. It defaults to a
+   setting suitable for desktop workloads. SCHED_BATCH is handled by the
+   CFS scheduler module too.
+
+   Due to its design, the CFS scheduler is not prone to any of the
+   'attacks' that exist today against the heuristics of the stock
+   scheduler: fiftyp.c, thud.c, chew.c, ring-test.c, massive_intr.c all
+   work fine and do not impact interactivity and produce the expected
+   behavior.
+
+   the CFS scheduler has a much stronger handling of nice levels and
+   SCHED_BATCH: both types of workloads should be isolated much more
+   agressively than under the vanilla scheduler.
+
+   ( another detail: due to nanosec accounting and timeline sorting,
+     sched_yield() support is very simple under CFS, and in fact under
+     CFS sched_yield() behaves much better than under any other
+     scheduler i have tested so far. )
+
+ - sched_rt.c implements SCHED_FIFO and SCHED_RR semantics, in a simpler
+   way than the vanilla scheduler does. It uses 100 runqueues (for all
+   100 RT priority levels, instead of 140 in the vanilla scheduler)
+   and it needs no expired array.
+
+ - reworked/sanitized SMP load-balancing: the runqueue-walking
+   assumptions are gone from the load-balancing code now, and
+   iterators of the scheduling modules are used. The balancing code got
+   quite a bit simpler as a result.
+
Index: linux/arch/i386/kernel/smpboot.c
===================================================================
--- linux.orig/arch/i386/kernel/smpboot.c
+++ linux/arch/i386/kernel/smpboot.c
@@ -941,17 +941,6 @@ exit:
 }
 #endif
 
-static void smp_tune_scheduling(void)
-{
-	if (cpu_khz) {
-		/* cache size in kB */
-		long cachesize = boot_cpu_data.x86_cache_size;
-
-		if (cachesize > 0)
-			max_cache_size = cachesize * 1024;
-	}
-}
-
 /*
  * Cycle through the processors sending APIC IPIs to boot each.
[...7311 lines suppressed...]
+ * Called when tasks are switched involuntarily due, typically, to expiring
+ * their time slice.  (This may also be called when switching to or from
+ * the idle task.)  We are only called when prev != next.
+ */
+static inline void
+__sched_info_switch(struct task_struct *prev, struct task_struct *next)
+{
+	struct rq *rq = task_rq(prev);
+
+	/*
+	 * prev now departs the cpu.  It's not interesting to record
+	 * stats about how efficient we were at scheduling the idle
+	 * process, however.
+	 */
+	if (prev != rq->idle)
+		sched_info_depart(prev);
+
+	if (next != rq->idle)
+		sched_info_arrive(next);
+}
+static inline void
+sched_info_switch(struct task_struct *prev, struct task_struct *next)
+{
+	if (unlikely(sched_info_on()))
+		__sched_info_switch(prev, next);
+}
+#else
+#define sched_info_queued(t)		do { } while (0)
+#define sched_info_switch(t, next)	do { } while (0)
+#endif /* CONFIG_SCHEDSTATS || CONFIG_TASK_DELAY_ACCT */
+
Index: linux/kernel/softirq.c
===================================================================
--- linux.orig/kernel/softirq.c
+++ linux/kernel/softirq.c
@@ -488,7 +488,6 @@ void __init softirq_init(void)
 
 static int ksoftirqd(void * __bind_cpu)
 {
-	set_user_nice(current, 19);
 	current->flags |= PF_NOFREEZE;
 
 	set_current_state(TASK_INTERRUPTIBLE);
Index: linux/kernel/sysctl.c
===================================================================
--- linux.orig/kernel/sysctl.c
+++ linux/kernel/sysctl.c
@@ -206,8 +206,84 @@ static ctl_table root_table[] = {
 	{ .ctl_name = 0 }
 };
 
+static unsigned long min_sched_granularity_ns = 100000;		/* 100 usecs */
+static unsigned long max_sched_granularity_ns = 1000000000;	/* 1 second */
+static unsigned long min_wakeup_granularity_ns;			/* 0 usecs */
+static unsigned long max_wakeup_granularity_ns = 1000000000;	/* 1 second */
+
 static ctl_table kern_table[] = {
 	{
+		.ctl_name	= CTL_UNNUMBERED,
+		.procname	= "sched_granularity_ns",
+		.data		= &sysctl_sched_granularity,
+		.maxlen		= sizeof(unsigned int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec_minmax,
+		.strategy	= &sysctl_intvec,
+		.extra1		= &min_sched_granularity_ns,
+		.extra2		= &max_sched_granularity_ns,
+	},
+	{
+		.ctl_name	= CTL_UNNUMBERED,
+		.procname	= "sched_wakeup_granularity_ns",
+		.data		= &sysctl_sched_wakeup_granularity,
+		.maxlen		= sizeof(unsigned int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec_minmax,
+		.strategy	= &sysctl_intvec,
+		.extra1		= &min_wakeup_granularity_ns,
+		.extra2		= &max_wakeup_granularity_ns,
+	},
+	{
+		.ctl_name	= CTL_UNNUMBERED,
+		.procname	= "sched_batch_wakeup_granularity_ns",
+		.data		= &sysctl_sched_batch_wakeup_granularity,
+		.maxlen		= sizeof(unsigned int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec_minmax,
+		.strategy	= &sysctl_intvec,
+		.extra1		= &min_wakeup_granularity_ns,
+		.extra2		= &max_wakeup_granularity_ns,
+	},
+	{
+		.ctl_name	= CTL_UNNUMBERED,
+		.procname	= "sched_stat_granularity_ns",
+		.data		= &sysctl_sched_stat_granularity,
+		.maxlen		= sizeof(unsigned int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec_minmax,
+		.strategy	= &sysctl_intvec,
+		.extra1		= &min_wakeup_granularity_ns,
+		.extra2		= &max_wakeup_granularity_ns,
+	},
+	{
+		.ctl_name	= CTL_UNNUMBERED,
+		.procname	= "sched_runtime_limit_ns",
+		.data		= &sysctl_sched_runtime_limit,
+		.maxlen		= sizeof(unsigned int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec_minmax,
+		.strategy	= &sysctl_intvec,
+		.extra1		= &min_sched_granularity_ns,
+		.extra2		= &max_sched_granularity_ns,
+	},
+	{
+		.ctl_name	= CTL_UNNUMBERED,
+		.procname	= "sched_child_runs_first",
+		.data		= &sysctl_sched_child_runs_first,
+		.maxlen		= sizeof(unsigned int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= CTL_UNNUMBERED,
+		.procname	= "sched_features",
+		.data		= &sysctl_sched_features,
+		.maxlen		= sizeof(unsigned int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
 		.ctl_name	= KERN_PANIC,
 		.procname	= "panic",
 		.data		= &panic_timeout,
Index: linux/kernel/time.c
===================================================================
--- linux.orig/kernel/time.c
+++ linux/kernel/time.c
@@ -57,14 +57,17 @@ EXPORT_SYMBOL(sys_tz);
  */
 asmlinkage long sys_time(time_t __user * tloc)
 {
-	time_t i;
-	struct timeval tv;
+	/*
+	 * We read xtime.tv_sec atomically - it's updated
+	 * atomically by update_wall_time(), so no need to
+	 * even read-lock the xtime seqlock:
+	 */
+	time_t i = xtime.tv_sec;
 
-	do_gettimeofday(&tv);
-	i = tv.tv_sec;
+	smp_rmb(); /* sys_time() results are coherent */
 
 	if (tloc) {
-		if (put_user(i,tloc))
+		if (put_user(i, tloc))
 			i = -EFAULT;
 	}
 	return i;
@@ -373,6 +376,20 @@ void do_gettimeofday (struct timeval *tv
 
 	tv->tv_sec = sec;
 	tv->tv_usec = usec;
+
+	/*
+	 * Make sure xtime.tv_sec [returned by sys_time()] always
+	 * follows the gettimeofday() result precisely. This
+	 * condition is extremely unlikely, it can hit at most
+	 * once per second:
+	 */
+	if (unlikely(xtime.tv_sec != tv->tv_sec)) {
+		unsigned long flags;
+
+		write_seqlock_irqsave(&xtime_lock);
+		update_wall_time();
+		write_seqlock_irqrestore(&xtime_lock);
+	}
 }
 
 EXPORT_SYMBOL(do_gettimeofday);
Index: linux/lib/Kconfig.debug
===================================================================
--- linux.orig/lib/Kconfig.debug
+++ linux/lib/Kconfig.debug
@@ -105,6 +105,15 @@ config DETECT_SOFTLOCKUP
 	   can be detected via the NMI-watchdog, on platforms that
 	   support it.)
 
+config SCHED_DEBUG
+	bool "Collect scheduler debugging info"
+	depends on DEBUG_KERNEL && PROC_FS
+	default y
+	help
+	  If you say Y here, the /proc/sched_debug file will be provided
+	  that can help debug the scheduler. The runtime overhead of this
+	  option is minimal.
+
 config SCHEDSTATS
 	bool "Collect scheduler statistics"
 	depends on DEBUG_KERNEL && PROC_FS

linux-2.6-utrace.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.59 -r 1.60 linux-2.6-utrace.patch
Index: linux-2.6-utrace.patch
===================================================================
RCS file: linux-2.6-utrace.patch
diff -N linux-2.6-utrace.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ linux-2.6-utrace.patch	10 Jul 2007 16:14:59 -0000	1.60
@@ -0,0 +1,20974 @@
+--- linux-2.6/fs/binfmt_elf_fdpic.c
++++ linux-2.6/fs/binfmt_elf_fdpic.c
+@@ -427,13 +427,6 @@ static int load_elf_fdpic_binary(struct 
+ 	entryaddr = interp_params.entry_addr ?: exec_params.entry_addr;
+ 	start_thread(regs, entryaddr, current->mm->start_stack);
+ 
+-	if (unlikely(current->ptrace & PT_PTRACED)) {
+-		if (current->ptrace & PT_TRACE_EXEC)
+-			ptrace_notify((PTRACE_EVENT_EXEC << 8) | SIGTRAP);
+-		else
+-			send_sig(SIGTRAP, current, 0);
+-	}
+-
+ 	retval = 0;
+ 
+ error:
+--- linux-2.6/fs/binfmt_elf.c
++++ linux-2.6/fs/binfmt_elf.c
+@@ -1026,12 +1026,6 @@ static int load_elf_binary(struct linux_
+ #endif
+ 
+ 	start_thread(regs, elf_entry, bprm->p);
+-	if (unlikely(current->ptrace & PT_PTRACED)) {
+-		if (current->ptrace & PT_TRACE_EXEC)
+-			ptrace_notify ((PTRACE_EVENT_EXEC << 8) | SIGTRAP);
+-		else
+-			send_sig(SIGTRAP, current, 0);
+-	}
+ 	retval = 0;
+ out:
+ 	kfree(loc);
+--- linux-2.6/fs/binfmt_aout.c
++++ linux-2.6/fs/binfmt_aout.c
+@@ -452,12 +452,6 @@ beyond_if:
+ 	regs->gp = ex.a_gpvalue;
+ #endif
+ 	start_thread(regs, ex.a_entry, current->mm->start_stack);
+-	if (unlikely(current->ptrace & PT_PTRACED)) {
+-		if (current->ptrace & PT_TRACE_EXEC)
+-			ptrace_notify ((PTRACE_EVENT_EXEC << 8) | SIGTRAP);
+-		else
+-			send_sig(SIGTRAP, current, 0);
+-	}
+ 	return 0;
+ }
+ 
+--- linux-2.6/fs/exec.c
++++ linux-2.6/fs/exec.c
+@@ -42,7 +42,7 @@
+ #include <linux/module.h>
+ #include <linux/namei.h>
+ #include <linux/proc_fs.h>
+-#include <linux/ptrace.h>
++#include <linux/tracehook.h>
+ #include <linux/mount.h>
+ #include <linux/security.h>
+ #include <linux/syscalls.h>
+@@ -964,13 +964,7 @@ EXPORT_SYMBOL(prepare_binprm);
+ 
+ static int unsafe_exec(struct task_struct *p)
+ {
+-	int unsafe = 0;
+-	if (p->ptrace & PT_PTRACED) {
+-		if (p->ptrace & PT_PTRACE_CAP)
+-			unsafe |= LSM_UNSAFE_PTRACE_CAP;
+-		else
+-			unsafe |= LSM_UNSAFE_PTRACE;
+-	}
++	int unsafe = tracehook_unsafe_exec(p);
+ 	if (atomic_read(&p->fs->count) > 1 ||
+ 	    atomic_read(&p->files->count) > 1 ||
+ 	    atomic_read(&p->sighand->count) > 1)
+@@ -1113,6 +1107,7 @@ int search_binary_handler(struct linux_b
+ 				bprm->file = NULL;
+ 				current->did_exec = 1;
+ 				proc_exec_connector(current);
++				tracehook_report_exec(bprm, regs);
+ 				return retval;
+ 			}
+ 			read_lock(&binfmt_lock);
+--- 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>
+@@ -150,6 +151,46 @@ static int get_nr_threads(struct task_st
+ 	return count;
+ }
+ 
++static int __ptrace_may_attach(struct task_struct *task)
++{
++	/* May we inspect the given task?
++	 * This check is used both for attaching with ptrace
++	 * and for allowing access to sensitive information in /proc.
++	 *
++	 * ptrace_attach denies several cases that /proc allows
++	 * because setting up the necessary parent/child relationship
++	 * or halting the specified task is impossible.
++	 */
++	int dumpable = 0;
++	/* Don't let security modules deny introspection */
++	if (task == current)
++		return 0;
++	if (((current->uid != task->euid) ||
++	     (current->uid != task->suid) ||
++	     (current->uid != task->uid) ||
++	     (current->gid != task->egid) ||
++	     (current->gid != task->sgid) ||
++	     (current->gid != task->gid)) && !capable(CAP_SYS_PTRACE))
++		return -EPERM;
++	smp_rmb();
++	if (task->mm)
++		dumpable = task->mm->dumpable;
++	if (!dumpable && !capable(CAP_SYS_PTRACE))
++		return -EPERM;
++
++	return security_ptrace(current, task);
++}
++
++int ptrace_may_attach(struct task_struct *task)
++{
++	int err;
++	task_lock(task);
++	err = __ptrace_may_attach(task);
++	task_unlock(task);
++	return !err;
++}
++
++
+ static int proc_cwd_link(struct inode *inode, struct dentry **dentry, struct vfsmount **mnt)
+ {
+ 	struct task_struct *task = get_proc_task(inode);
+@@ -192,13 +233,6 @@ static int proc_root_link(struct inode *
+ 	return result;
+ }
+ 
+-#define MAY_PTRACE(task) \
+-	(task == current || \
+-	(task->parent == current && \
+-	(task->ptrace & PT_PTRACED) && \
+-	 (task->state == TASK_STOPPED || task->state == TASK_TRACED) && \
+-	 security_ptrace(current,task) == 0))
+-
+ static int proc_pid_environ(struct task_struct *task, char * buffer)
+ {
+ 	int res = 0;
+@@ -523,7 +557,8 @@ static ssize_t mem_read(struct file * fi
+ 	if (!task)
+ 		goto out_no_task;
+ 
+-	if (!MAY_PTRACE(task) || !ptrace_may_attach(task))
++	if (!tracehook_allow_access_process_vm(task)
++	    || !ptrace_may_attach(task))
+ 		goto out;
+ 
+ 	ret = -ENOMEM;
+@@ -549,7 +584,8 @@ static ssize_t mem_read(struct file * fi
+ 
+ 		this_len = (count > PAGE_SIZE) ? PAGE_SIZE : count;
+ 		retval = access_process_vm(task, src, page, this_len, 0);
+-		if (!retval || !MAY_PTRACE(task) || !ptrace_may_attach(task)) {
++		if (!retval || !tracehook_allow_access_process_vm(task)
++		    || !ptrace_may_attach(task)) {
+ 			if (!ret)
+ 				ret = -EIO;
+ 			break;
+@@ -593,7 +629,8 @@ static ssize_t mem_write(struct file * f
+ 	if (!task)
+ 		goto out_no_task;
+ 
+-	if (!MAY_PTRACE(task) || !ptrace_may_attach(task))
++	if (!tracehook_allow_access_process_vm(task)
++	    || !ptrace_may_attach(task))
+ 		goto out;
+ 
+ 	copied = -ENOMEM;
+--- linux-2.6/fs/proc/array.c
++++ linux-2.6/fs/proc/array.c
+@@ -73,6 +73,7 @@
+ #include <linux/file.h>
+ #include <linux/times.h>
+ #include <linux/cpuset.h>
++#include <linux/tracehook.h>
+ #include <linux/rcupdate.h>
+ #include <linux/delayacct.h>
+ 
+@@ -158,11 +159,16 @@ static inline const char * get_task_stat
+ 
[...20581 lines suppressed...]
++}
++
++static inline int tracehook_single_step_enabled(struct task_struct *tsk)
++{
++	return test_tsk_thread_flag(tsk, TIF_SINGLESTEP);
++}
++
++static inline void tracehook_enable_syscall_trace(struct task_struct *tsk)
++{
++	set_tsk_thread_flag(tsk, TIF_SYSCALL_TRACE);
++}
++
++static inline void tracehook_disable_syscall_trace(struct task_struct *tsk)
++{
++	clear_tsk_thread_flag(tsk, TIF_SYSCALL_TRACE);
++}
++
++static inline void tracehook_abort_syscall(struct pt_regs *regs)
++{
++	PT_REGS_SYSCALL_NR(regs) = -1;
++}
++
++
++#endif
+--- linux-2.6/include/asm-um/ptrace-x86_64.h
++++ linux-2.6/include/asm-um/ptrace-x86_64.h
+@@ -14,6 +14,8 @@
+ #define __FRAME_OFFSETS /* Needed to get the R* macros */
+ #include "asm/ptrace-generic.h"
+ 
++#define ARCH_HAS_SINGLE_STEP	(1)
++
+ #define HOST_AUDIT_ARCH AUDIT_ARCH_X86_64
+ 
+ /* Also defined in sysdep/ptrace.h, so may already be defined. */
+--- linux-2.6/include/asm-um/ptrace-i386.h
++++ linux-2.6/include/asm-um/ptrace-i386.h
+@@ -6,6 +6,8 @@
+ #ifndef __UM_PTRACE_I386_H
+ #define __UM_PTRACE_I386_H
+ 
++#define ARCH_HAS_SINGLE_STEP	(1)
++
+ #define HOST_AUDIT_ARCH AUDIT_ARCH_I386
+ 
+ #include "linux/compiler.h"
+--- 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
+ #define TIF_MEMDIE	 	5
+ #define TIF_SYSCALL_AUDIT	6
+ #define TIF_RESTORE_SIGMASK	7
++#define TIF_SINGLESTEP          8       /* restore singlestep on return to user
++                                         * mode */
+ 
+ #define _TIF_SYSCALL_TRACE	(1 << TIF_SYSCALL_TRACE)
+ #define _TIF_SIGPENDING		(1 << TIF_SIGPENDING)
+@@ -79,5 +81,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)
++#define _TIF_SINGLESTEP         (1 << TIF_SINGLESTEP)
+ 
+ #endif
+--- linux-2.6/include/asm-avr32/tracehook.h
++++ linux-2.6/include/asm-avr32/tracehook.h
+@@ -0,0 +1,61 @@
++/*
++ * Tracing hooks for AVR32
++ *
++ * Copyright (C) 2007 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef _ASM_AVR32_TRACEHOOK_H
++#define _ASM_AVR32_TRACEHOOK_H
++
++#include <linux/sched.h>
++
++#define ARCH_HAS_SINGLE_STEP	1
++
++static inline void tracehook_enable_single_step(struct task_struct *tsk)
++{
++	/*
++	 * If the process is stopped in debug mode, simply set
++	 * TIF_SINGLE_STEP to tell the monitor code to set the single
++	 * step bit in DC before returning.
++	 *
++	 * Otherwise, we need to set a breakpoint at the return
++	 * address before returning to userspace. TIF_BREAKPOINT will
++	 * tell the syscall/exception exit code to do this.
++	 */
++	if (!(tsk->thread.cpu_context.sr & SR_D))
++		set_tsk_thread_flag(tsk, TIF_BREAKPOINT);
++
++	set_tsk_thread_flag(tsk, TIF_SINGLE_STEP);
++}
++
++static inline void tracehook_disable_single_step(struct task_struct *tsk)
++{
++	clear_tsk_thread_flag(tsk, TIF_BREAKPOINT);
++	clear_tsk_thread_flag(tsk, TIF_SINGLE_STEP);
++}
++
++static inline int tracehook_single_step_enabled(struct task_struct *tsk)
++{
++	return test_tsk_thread_flag(tsk, TIF_SINGLE_STEP);
++}
++
++static inline void tracehook_enable_syscall_trace(struct task_struct *tsk)
++{
++	set_tsk_thread_flag(tsk, TIF_SYSCALL_TRACE);
++}
++
++static inline void tracehook_disable_syscall_trace(struct task_struct *tsk)
++{
++	clear_tsk_thread_flag(tsk, TIF_SYSCALL_TRACE);
++}
++
++static inline void tracehook_abort_syscall(struct pt_regs *regs)
++{
++	/* Invalid system call number => return -ENOSYS */
++	regs->r8 = -1;
++}
++
++#endif /* _ASM_AVR32_TRACEHOOK_H */
+--- 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);
+ 	ev->what = PROC_EVENT_FORK;
+-	ev->event_data.fork.parent_pid = task->real_parent->pid;
+-	ev->event_data.fork.parent_tgid = task->real_parent->tgid;
++	ev->event_data.fork.parent_pid = task->parent->pid;
++	ev->event_data.fork.parent_tgid = task->parent->tgid;
+ 	ev->event_data.fork.child_pid = task->pid;
+ 	ev->event_data.fork.child_tgid = task->tgid;
+ 
+--- linux-2.6/mm/nommu.c
++++ linux-2.6/mm/nommu.c
+@@ -20,7 +20,7 @@
+ #include <linux/pagemap.h>
+ #include <linux/slab.h>
+ #include <linux/vmalloc.h>
+-#include <linux/ptrace.h>
++#include <linux/tracehook.h>
+ #include <linux/blkdev.h>
+ #include <linux/backing-dev.h>
+ #include <linux/mount.h>
+@@ -682,7 +682,7 @@ static unsigned long determine_vm_flags(
+ 	 * it's being traced - otherwise breakpoints set in it may interfere
+ 	 * with another untraced process
+ 	 */
+-	if ((flags & MAP_PRIVATE) && (current->ptrace & PT_PTRACED))
++	if ((flags & MAP_PRIVATE) && tracehook_expect_breakpoints(current))
+ 		vm_flags &= ~VM_MAYSHARE;
+ 
+ 	return vm_flags;
+--- linux-2.6/init/Kconfig
++++ linux-2.6/init/Kconfig
+@@ -686,6 +686,36 @@ config STOP_MACHINE
+ 	  Need stop_machine() primitive.
+ endmenu
+ 
++menu "Process debugging support"
++
++config PTRACE
++	bool "Legacy ptrace system call interface"
++	default y
++	select UTRACE
++	depends on PROC_FS
++	help
++	  Enable the ptrace system call.
++	  This is traditionally used by debuggers like GDB,
++	  and is used by UML and some other applications.
++	  Unless you are very sure you won't run anything that needs it,
++	  say Y.
++
++config UTRACE
++	bool "Infrastructure for tracing and debugging user processes"
++	default y if MODULES || PTRACE
++	help
++	  Enable the utrace process tracing interface.
++	  This is an internal kernel interface to track events in user
++	  threads, extract and change user thread state.  This interface
++	  is exported to kernel modules, and is also used to implement ptrace.
++	  If you disable this, no facilities for debugging user processes
++	  will be available, nor the facilities used by UML and other
++	  applications.  Unless you are making a specially stripped-down
++	  kernel and are very sure you don't need these facilitiies,
++	  say Y.
++
++endmenu
++
+ menu "Block layer"
+ source "block/Kconfig"
+ endmenu

linux-2.6-wakeups.patch:

--- NEW FILE linux-2.6-wakeups.patch ---
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
index 73813c6..7d9bae5 100644
--- a/drivers/video/console/fbcon.c
+++ b/drivers/video/console/fbcon.c
@@ -433,7 +433,7 @@ static void cursor_timer_handler(unsigned long dev_addr)
 	struct fbcon_ops *ops = info->fbcon_par;
 
 	schedule_work(&info->queue);
-	mod_timer(&ops->cursor_timer, jiffies + HZ/5);
+	mod_timer(&ops->cursor_timer, jiffies + HZ);
 }
 
 static void fbcon_add_cursor_timer(struct fb_info *info)


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

iD8DBQBGkXk8yGugalF9Dw4RAndhAJ9SMK7NQfalYcvKLRT70ic62NTpdQCfb1fy
XgaKI/zJV91vpqcDG2WKJm8=
=4xvq
-----END PGP SIGNATURE-----


Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/.cvsignore,v
retrieving revision 1.625
retrieving revision 1.626
diff -u -r1.625 -r1.626
--- .cvsignore	12 Jun 2007 18:25:22 -0000	1.625
+++ .cvsignore	10 Jul 2007 16:14:59 -0000	1.626
@@ -1,6 +1,5 @@
 clog
 kernel-2.6.*.config
 temp-*
-kernel-2.6.21
-linux-2.6.21.tar.bz2
-patch-2.6.21.5.bz2
+kernel-2.6.22
+linux-2.6.22.tar.bz2


Index: Makefile.config
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/Makefile.config,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -r1.53 -r1.54
--- Makefile.config	7 Mar 2007 07:25:46 -0000	1.53
+++ Makefile.config	10 Jul 2007 16:14:59 -0000	1.54
@@ -8,21 +8,20 @@
 	$(CFG)-i586.config \
 	$(CFG)-i686.config $(CFG)-i686-PAE.config \
 	$(CFG)-i686-debug.config $(CFG)-i686-PAE-debug.config \
-	$(CFG)-x86_64.config $(CFG)-x86_64-kdump.config \
-	$(CFG)-x86_64-debug.config \
-	$(CFG)-s390.config $(CFG)-s390x.config \
+	$(CFG)-x86_64.config $(CFG)-x86_64-debug.config \
+	$(CFG)-s390x.config \
 	$(CFG)-ppc.config $(CFG)-ppc-smp.config \
 	$(CFG)-ppc64.config $(CFG)-ppc64-kdump.config $(CFG)-ia64.config \
 	$(CFG)-i686-xen.config $(CFG)-x86_64-xen.config \
 	$(CFG)-ia64-xen.config
 
-PLATFORMS	= x86 x86_64 powerpc powerpc32 powerpc64 s390 ia64 # sparc sparc64
+PLATFORMS	= x86 x86_64 powerpc powerpc32 powerpc64 s390x ia64 # sparc sparc64
 TEMPFILES	= $(addprefix temp-, $(addsuffix -generic, $(PLATFORMS)))
 
 configs: $(CONFIGFILES)
 	@rm -f kernel-*-config
 	@rm -f $(TEMPFILES)
-	@rm -f temp-generic temp-*-generic temp-*-generic-tmp temp-olpc-config
+	@rm -f temp-generic temp-*-generic temp-*-generic-tmp
 
 # Augment the clean target to clean up our own cruft
 clean ::
@@ -55,13 +54,10 @@
 temp-powerpc-generic: configs/config-powerpc-generic temp-generic
 	perl merge.pl $^  > $@
 
-temp-powerpc64-generic: configs/config-powerpc64-generic temp-powerpc-generic
-	perl merge.pl $^  > $@
-
 temp-powerpc32-generic: configs/config-powerpc32-generic temp-powerpc-generic
 	perl merge.pl $^  > $@
 
-temp-s390-generic: configs/config-s390-generic temp-generic
+temp-s390-generic: configs/config-s390x temp-generic
 	perl merge.pl $^ > $@
 
 temp-ia64-generic: configs/config-ia64-generic temp-generic
@@ -94,19 +90,13 @@
 kernel-$(VERSION)-i686-PAE-debug.config: configs/config-i686-PAE temp-x86-debug-generic
 	perl merge.pl $^ i386 > $@
 
-kernel-$(VERSION)-olpc.config: configs/config-olpc temp-x86-generic
-	perl merge.pl $^ i386 > $@
-
 kernel-$(VERSION)-i586.config: configs/config-i586 temp-x86-generic
 	perl merge.pl $^ i386 > $@
 
-kernel-$(VERSION)-x86_64.config: configs/config-x86_64 temp-x86_64-generic
+kernel-$(VERSION)-x86_64.config: /dev/null temp-x86_64-generic
 	perl merge.pl $^ x86_64 > $@
 
-kernel-$(VERSION)-x86_64-debug.config: configs/config-x86_64 temp-x86_64-debug-generic
-	perl merge.pl $^ x86_64 > $@
-
-kernel-$(VERSION)-x86_64-kdump.config: configs/config-x86_64-kdump temp-x86_64-generic
+kernel-$(VERSION)-x86_64-debug.config: /dev/null temp-x86_64-debug-generic
 	perl merge.pl $^ x86_64 > $@
 
 kernel-$(VERSION)-sparc-smp.config: configs/config-sparc-smp temp-sparc-generic
@@ -121,15 +111,12 @@
 kernel-$(VERSION)-sparc64.config: configs/config-sparc64 temp-sparc-generic
 	perl merge.pl $^ sparc64 > $@
 
-kernel-$(VERSION)-ppc64.config: configs/config-powerpc64 temp-powerpc64-generic
+kernel-$(VERSION)-ppc64.config: configs/config-powerpc64 temp-powerpc-generic
 	perl merge.pl $^ powerpc > $@
 
 kernel-$(VERSION)-ppc64-kdump.config: configs/config-powerpc64-kdump kernel-$(VERSION)-ppc64.config
 	perl merge.pl $^ powerpc > $@
 
-kernel-$(VERSION)-s390.config: configs/config-s390 temp-s390-generic
-	perl merge.pl $^ s390 > $@
-
 kernel-$(VERSION)-s390x.config: configs/config-s390x temp-s390-generic
 	perl merge.pl $^ s390 > $@
 
@@ -145,7 +132,7 @@
 kernel-$(VERSION)-i686-xen.config: configs/config-i686-PAE temp-x86-xen-generic
 	perl merge.pl $^ i386 > $@
 
-kernel-$(VERSION)-x86_64-xen.config: configs/config-x86_64 temp-x86_64-xen-generic
+kernel-$(VERSION)-x86_64-xen.config: /dev/null temp-x86_64-xen-generic
 	perl merge.pl $^ x86_64 > $@
 
 kernel-$(VERSION)-ia64-xen.config: configs/config-xen-ia64 temp-ia64-xen-generic

git-wireless-dev.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.12 -r 1.13 git-wireless-dev.patch
Index: git-wireless-dev.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/git-wireless-dev.patch,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- git-wireless-dev.patch	14 Jun 2007 19:44:32 -0000	1.12
+++ git-wireless-dev.patch	10 Jul 2007 16:14:59 -0000	1.13
@@ -1,6 +1,6 @@
---- linux-2.6.21.noarch/CREDITS.orig	2007-06-14 14:07:08.000000000 -0400
-+++ linux-2.6.21.noarch/CREDITS	2007-06-14 14:07:58.000000000 -0400
-@@ -665,6 +665,11 @@ D: Minor updates to SCSI code for the Co
+--- linux-2.6.21.noarch/CREDITS.orig	2007-06-25 09:16:57.000000000 -0400
++++ linux-2.6.21.noarch/CREDITS	2007-06-25 09:55:35.000000000 -0400
+@@ -665,6 +665,11 @@ D: Minor updates to SCSI types, added /p
  S: (ask for current address)
  S: USA
  
@@ -66,8 +66,8 @@
  N: Lars Wirzenius
  E: liw at iki.fi
  D: Linux System Administrator's Guide, author, former maintainer
---- linux-2.6.21.noarch/include/linux/nl80211.h.orig	2007-06-14 14:07:08.000000000 -0400
-+++ linux-2.6.21.noarch/include/linux/nl80211.h	2007-06-14 14:07:58.000000000 -0400
+--- linux-2.6.21.noarch/include/linux/nl80211.h.orig	2007-06-25 09:16:53.000000000 -0400
++++ linux-2.6.21.noarch/include/linux/nl80211.h	2007-06-25 09:55:35.000000000 -0400
 @@ -7,6 +7,217 @@
   */
  
@@ -343,8 +343,8 @@
 +#define NL80211_KEYTYPE_MAX (__NL80211_KEYTYPE_AFTER_LAST - 1)
 +
  #endif /* __LINUX_NL80211_H */
---- linux-2.6.21.noarch/include/linux/ieee80211.h.orig	2007-06-14 14:07:08.000000000 -0400
-+++ linux-2.6.21.noarch/include/linux/ieee80211.h	2007-06-14 14:07:58.000000000 -0400
+--- linux-2.6.21.noarch/include/linux/ieee80211.h.orig	2007-06-25 09:16:53.000000000 -0400
++++ linux-2.6.21.noarch/include/linux/ieee80211.h	2007-06-25 09:55:35.000000000 -0400
 @@ -106,6 +106,75 @@ struct ieee80211_hdr {
  } __attribute__ ((packed));
  
@@ -643,8 +643,8 @@
 +};
 +
  #endif /* IEEE80211_H */
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/include/linux/eeprom_93cx6.h	2007-06-14 14:07:58.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/include/linux/eeprom_93cx6.h	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,77 @@
 +/*
 +	Copyright (C) 2004 - 2006 rt2x00 SourceForge Project
@@ -723,8 +723,8 @@
 +	const u8 word, u16 data);
 +extern void eeprom_93cx6_multiwrite(struct eeprom_93cx6 *eeprom,
 +	const u8 word, __le16 *data, const u16 words);
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/include/linux/ssb/ssb_driver_chipcommon.h	2007-06-14 14:07:58.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/include/linux/ssb/ssb_driver_chipcommon.h	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,387 @@
 +#ifndef LINUX_SSB_CHIPCO_H_
 +#define LINUX_SSB_CHIPCO_H_
@@ -1113,8 +1113,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* LINUX_SSB_CHIPCO_H_ */
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/include/linux/ssb/ssb_driver_extif.h	2007-06-14 14:07:58.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/include/linux/ssb/ssb_driver_extif.h	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,163 @@
 +/*
 + * Hardware-specific External Interface I/O core definitions
@@ -1279,8 +1279,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* LINUX_SSB_EXTIFCORE_H_ */
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/include/linux/ssb/ssb_driver_mips.h	2007-06-14 14:07:58.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/include/linux/ssb/ssb_driver_mips.h	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,47 @@
 +#ifndef LINUX_SSB_MIPSCORE_H_
 +#define LINUX_SSB_MIPSCORE_H_
@@ -1329,8 +1329,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* LINUX_SSB_MIPSCORE_H_ */
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/include/linux/ssb/ssb_regs.h	2007-06-14 14:07:58.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/include/linux/ssb/ssb_regs.h	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,294 @@
 +#ifndef LINUX_SSB_REGS_H_
 +#define LINUX_SSB_REGS_H_
@@ -1626,8 +1626,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* LINUX_SSB_REGS_H_ */
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/include/linux/ssb/ssb_driver_pci.h	2007-06-14 14:07:58.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/include/linux/ssb/ssb_driver_pci.h	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,108 @@
 +#ifndef LINUX_SSB_PCICORE_H_
 +#define LINUX_SSB_PCICORE_H_
@@ -1737,8 +1737,8 @@
 +#endif /* CONFIG_SSB_DRIVER_PCICORE */
 +#endif /* __KERNEL__ */
 +#endif /* LINUX_SSB_PCICORE_H_ */
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/include/linux/ssb/ssb.h	2007-06-14 14:07:58.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/include/linux/ssb/ssb.h	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,403 @@
 +#ifndef LINUX_SSB_H_
 +#define LINUX_SSB_H_
@@ -2143,8 +2143,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* LINUX_SSB_H_ */
---- linux-2.6.21.noarch/include/net/cfg80211.h.orig	2007-06-14 14:07:08.000000000 -0400
-+++ linux-2.6.21.noarch/include/net/cfg80211.h	2007-06-14 14:07:58.000000000 -0400
+--- linux-2.6.21.noarch/include/net/cfg80211.h.orig	2007-06-25 09:16:53.000000000 -0400
++++ linux-2.6.21.noarch/include/net/cfg80211.h	2007-06-25 09:55:35.000000000 -0400
 @@ -3,6 +3,7 @@
  
  #include <linux/netlink.h>
@@ -2287,8 +2287,8 @@
 +			    u32 seq, int flags, u8 cmd);
 +
  #endif /* __NET_CFG80211_H */
---- linux-2.6.21.noarch/include/net/mac80211.h.orig	2007-06-14 14:07:08.000000000 -0400
-+++ linux-2.6.21.noarch/include/net/mac80211.h	2007-06-14 14:07:58.000000000 -0400
+--- linux-2.6.21.noarch/include/net/mac80211.h.orig	2007-06-25 09:16:53.000000000 -0400
++++ linux-2.6.21.noarch/include/net/mac80211.h	2007-06-25 09:55:35.000000000 -0400
 @@ -300,7 +300,6 @@ struct ieee80211_conf {
  	/* Following five fields are used for IEEE 802.11H */
  	unsigned int radar_detect;
@@ -2355,8 +2355,8 @@
  	/* Setup beacon data for IBSS beacons. Unlike access point (Master),
  	 * IBSS uses a fixed beacon frame which is configured using this
  	 * function. This handler is required only for IBSS mode. */
---- linux-2.6.21.noarch/include/net/iw_handler.h.orig	2007-06-14 14:07:08.000000000 -0400
-+++ linux-2.6.21.noarch/include/net/iw_handler.h	2007-06-14 14:07:58.000000000 -0400
+--- linux-2.6.21.noarch/include/net/iw_handler.h.orig	2007-06-25 09:16:53.000000000 -0400
++++ linux-2.6.21.noarch/include/net/iw_handler.h	2007-06-25 09:55:35.000000000 -0400
 @@ -431,7 +431,13 @@ struct iw_public_data {
   * Those may be called only within the kernel.
   */
@@ -2372,9 +2372,9 @@
  
  /* Send a single event to user space */
  extern void wireless_send_event(struct net_device *	dev,
---- linux-2.6.21.noarch/MAINTAINERS.orig	2007-06-14 14:07:08.000000000 -0400
-+++ linux-2.6.21.noarch/MAINTAINERS	2007-06-14 14:07:58.000000000 -0400
-@@ -296,6 +296,14 @@ M:	corentin.labbe at geomatys.fr
+--- linux-2.6.21.noarch/MAINTAINERS.orig	2007-06-25 09:16:57.000000000 -0400
++++ linux-2.6.21.noarch/MAINTAINERS	2007-06-25 09:55:35.000000000 -0400
+@@ -299,6 +299,14 @@ M:	corentin.labbe at geomatys.fr
  L:	lm-sensors at lm-sensors.org
  S:	Maintained
  
@@ -2389,7 +2389,7 @@
  ADT746X FAN DRIVER
  P:	Colin Leroy
  M:	colin at colino.net
-@@ -707,6 +715,15 @@ L:	linux-hams at vger.kernel.org
+@@ -777,6 +785,15 @@ L:	linux-hams at vger.kernel.org
  W:	http://www.baycom.org/~tom/ham/ham.html
  S:	Maintained
  
@@ -2405,7 +2405,7 @@
  BCM43XX WIRELESS DRIVER (SOFTMAC BASED VERSION)
  P:	Larry Finger
  M:	Larry.Finger at lwfinger.net
-@@ -852,6 +869,12 @@ M:	zambrano at broadcom.com
+@@ -924,6 +941,12 @@ M:	zambrano at broadcom.com
  L:	netdev at vger.kernel.org
  S:	Supported
  
@@ -2418,7 +2418,7 @@
  BROADCOM BNX2 GIGABIT ETHERNET DRIVER
  P:	Michael Chan
  M:	mchan at broadcom.com
-@@ -1862,6 +1885,16 @@ L:	http://lists.sourceforge.net/mailman/
+@@ -1977,6 +2000,16 @@ L:	http://lists.sourceforge.net/mailman/
  W:	http://ipw2200.sourceforge.net
  S:	Supported
  
@@ -2435,7 +2435,7 @@
  IOC3 DRIVER
  P:	Ralf Baechle
  M:	ralf at linux-mips.org
-@@ -2736,6 +2769,15 @@ L:	kpreempt-tech at lists.sourceforge.net
+@@ -2911,6 +2944,15 @@ L:	kpreempt-tech at lists.sourceforge.net
  W:	ftp://ftp.kernel.org/pub/linux/kernel/people/rml/preempt-kernel
  S:	Supported
  
@@ -2449,9 +2449,9 @@
[...3480 lines suppressed...]
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/drivers/net/wireless/mac80211/rt2x00/rt2500pci.c	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,2029 @@
 +/*
 +	Copyright (C) 2004 - 2007 rt2x00 SourceForge Project
@@ -82200,8 +83652,8 @@
 +
 +module_init(rt2500pci_init);
 +module_exit(rt2500pci_exit);
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/drivers/net/wireless/mac80211/rt2x00/rt61pci.c	2007-06-14 14:07:59.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/drivers/net/wireless/mac80211/rt2x00/rt61pci.c	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,2443 @@
 +/*
 +	Copyright (C) 2004 - 2007 rt2x00 SourceForge Project
@@ -84646,8 +86098,8 @@
 +
 +module_init(rt61pci_init);
 +module_exit(rt61pci_exit);
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/drivers/net/wireless/mac80211/rt2x00/rt2x00pci.c	2007-06-14 14:07:59.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/drivers/net/wireless/mac80211/rt2x00/rt2x00pci.c	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,598 @@
 +/*
 +	Copyright (C) 2004 - 2007 rt2x00 SourceForge Project
@@ -85247,8 +86699,8 @@
 +module_param_named(debug, rt2x00_debug_level, bool, S_IWUSR | S_IRUGO);
 +MODULE_PARM_DESC(debug, "Set this parameter to 1 to enable debug output.");
 +#endif /* CONFIG_RT2X00_DEBUG */
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/drivers/net/wireless/mac80211/rt2x00/rt2x00pci.h	2007-06-14 14:07:59.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/drivers/net/wireless/mac80211/rt2x00/rt2x00pci.h	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,83 @@
 +/*
 +	Copyright (C) 2004 - 2007 rt2x00 SourceForge Project
@@ -85333,8 +86785,8 @@
 +#endif /* CONFIG_PM */
 +
 +#endif /* RT2X00PCI_H */
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/drivers/net/wireless/mac80211/rt2x00/rt73usb.c	2007-06-14 14:07:59.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/drivers/net/wireless/mac80211/rt2x00/rt73usb.c	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,2049 @@
 +/*
 +	Copyright (C) 2004 - 2007 rt2x00 SourceForge Project
@@ -87385,22 +88837,22 @@
 +
 +module_init(rt73usb_init);
 +module_exit(rt73usb_exit);
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/drivers/net/wireless/mac80211/README	2007-06-14 14:07:59.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/drivers/net/wireless/mac80211/README	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,2 @@
 +This directory contains IEEE 802.11 wireless LAN drivers that are using
 +Devicescape IEEE 802.11 stack (net/mac80211).
---- linux-2.6.21.noarch/drivers/net/wireless/Kconfig.orig	2007-06-14 14:07:08.000000000 -0400
-+++ linux-2.6.21.noarch/drivers/net/wireless/Kconfig	2007-06-14 14:07:59.000000000 -0400
-@@ -529,4 +529,6 @@ source "drivers/net/wireless/hostap/Kcon
+--- linux-2.6.21.noarch/drivers/net/wireless/Kconfig.orig	2007-06-25 09:16:46.000000000 -0400
++++ linux-2.6.21.noarch/drivers/net/wireless/Kconfig	2007-06-25 09:55:35.000000000 -0400
+@@ -550,4 +550,6 @@ source "drivers/net/wireless/hostap/Kcon
  source "drivers/net/wireless/bcm43xx/Kconfig"
  source "drivers/net/wireless/zd1211rw/Kconfig"
  
 +source "drivers/net/wireless/mac80211/Kconfig"
 +
  endmenu
---- linux-2.6.21.noarch/drivers/net/wireless/bcm43xx/Kconfig.orig	2007-06-14 14:07:08.000000000 -0400
-+++ linux-2.6.21.noarch/drivers/net/wireless/bcm43xx/Kconfig	2007-06-14 14:07:59.000000000 -0400
+--- linux-2.6.21.noarch/drivers/net/wireless/bcm43xx/Kconfig.orig	2007-06-25 09:16:46.000000000 -0400
++++ linux-2.6.21.noarch/drivers/net/wireless/bcm43xx/Kconfig	2007-06-25 09:55:35.000000000 -0400
 @@ -1,6 +1,7 @@
  config BCM43XX
  	tristate "Broadcom BCM43xx wireless support"
@@ -87409,8 +88861,8 @@
  	select WIRELESS_EXT
  	select FW_LOADER
  	select HW_RANDOM
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/drivers/ssb/Makefile	2007-06-14 14:07:59.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/drivers/ssb/Makefile	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,11 @@
 +ssb-builtin-drivers-y					+= driver_chipcommon.o
 +ssb-builtin-drivers-$(CONFIG_SSB_DRIVER_MIPS)		+= driver_mipscore.o
@@ -87423,8 +88875,8 @@
 +
 +ssb-objs	:= main.o scan.o \
 +		   $(ssb-hostsupport-y) $(ssb-builtin-drivers-y)
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/drivers/ssb/pcmcia.c	2007-06-14 14:07:59.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/drivers/ssb/pcmcia.c	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,256 @@
 +/*
 + * Sonics Silicon Backplane
@@ -87682,8 +89134,8 @@
 +error:
 +	return -ENODEV;
 +}
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/drivers/ssb/main.c	2007-06-14 14:07:59.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/drivers/ssb/main.c	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,1054 @@
 +/*
 + * Sonics Silicon Backplane
@@ -88739,8 +90191,8 @@
 +	bus_unregister(&ssb_bustype);
 +}
 +module_exit(ssb_modexit)
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/drivers/ssb/pcihost_wrapper.c	2007-06-14 14:07:59.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/drivers/ssb/pcihost_wrapper.c	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,104 @@
 +/*
 + * Sonics Silicon Backplane
@@ -88846,8 +90298,8 @@
 +	return pci_register_driver(driver);
 +}
 +EXPORT_SYMBOL(ssb_pcihost_register);
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/drivers/ssb/driver_mipscore.c	2007-06-14 14:07:59.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/drivers/ssb/driver_mipscore.c	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,258 @@
 +/*
 + * Sonics Silicon Backplane
@@ -89107,8 +90559,8 @@
 +	ssb_mips_serial_init(mcore);
 +	ssb_mips_flash_detect(mcore);
 +}
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/drivers/ssb/ssb_private.h	2007-06-14 14:07:59.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/drivers/ssb/ssb_private.h	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,151 @@
 +#ifndef LINUX_SSB_PRIVATE_H_
 +#define LINUX_SSB_PRIVATE_H_
@@ -89261,8 +90713,8 @@
 +
 +
 +#endif /* LINUX_SSB_PRIVATE_H_ */
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/drivers/ssb/pci.c	2007-06-14 14:07:59.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/drivers/ssb/pci.c	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,672 @@
 +/*
 + * Sonics Silicon Backplane PCI-Hostbus related functions.
@@ -89936,8 +91388,8 @@
 +	device_remove_file(&pdev->dev, &dev_attr_ssb_sprom);
 +	return err;
 +}
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/drivers/ssb/driver_chipcommon.c	2007-06-14 14:07:59.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/drivers/ssb/driver_chipcommon.c	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,402 @@
 +/*
 + * Sonics Silicon Backplane
@@ -90341,8 +91793,8 @@
 +	return nr_ports;
 +}
 +#endif /* CONFIG_SSB_SERIAL */
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/drivers/ssb/Kconfig	2007-06-14 14:07:59.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/drivers/ssb/Kconfig	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,93 @@
 +menu "Sonics Silicon Backplane"
 +
@@ -90437,8 +91889,8 @@
 +	  If unsure, say N
 +
 +endmenu
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/drivers/ssb/scan.c	2007-06-14 14:07:59.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/drivers/ssb/scan.c	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,407 @@
 +/*
 + * Sonics Silicon Backplane
@@ -90847,8 +92299,8 @@
 +	ssb_iounmap(bus);
 +	goto out;
 +}
---- /dev/null	2007-06-13 08:37:39.438809838 -0400
-+++ linux-2.6.21.noarch/drivers/ssb/driver_pcicore.c	2007-06-14 14:07:59.000000000 -0400
+--- /dev/null	2007-06-25 08:13:03.438982207 -0400
++++ linux-2.6.21.noarch/drivers/ssb/driver_pcicore.c	2007-06-25 09:55:35.000000000 -0400
 @@ -0,0 +1,556 @@
 +/*
 + * Sonics Silicon Backplane


View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.3256 -r 1.3257 kernel-2.6.spec
Index: kernel-2.6.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/kernel-2.6.spec,v
retrieving revision 1.3256
retrieving revision 1.3257
diff -u -r1.3256 -r1.3257
--- kernel-2.6.spec	9 Jul 2007 16:08:16 -0000	1.3256
+++ kernel-2.6.spec	10 Jul 2007 16:14:59 -0000	1.3257
@@ -1,5 +1,54 @@
 Summary: The Linux kernel (the core of the Linux operating system)
 
+# For a stable, released kernel, released_kernel should be 1. For rawhide
+# and/or a kernel built from an rc or git snapshot, released_kernel should
+# be 0.
+%define released_kernel 1
+
+# Versions of various parts
+
+# Polite request for people who spin their own kernel rpms:
+# please modify the "buildid" define in a way that identifies
+# that the kernel isn't the stock distribution kernel, for example,
+# by setting the define to ".local" or ".bz123456"
+#
+#% define buildid .local
+
+# fedora_build defines which build revision of this kernel version we're
+# building. Rather than incrementing forever, as with the prior versioning
+# 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 3286
+%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
+
+## If this is a released kernel ##
+%if %{released_kernel}
+# Do we have a 2.6.21.y update to apply?
+%define stable_update 0
+# Set rpm version accordingly
+%if 0%{stable_update}
+%define stablerev .%{stable_update}
+%endif
+%define rpmversion 2.6.%{base_sublevel}%{?stablerev}
+
+## The not-released-kernel case ##
+%else
+# The next upstream release sublevel (base_sublevel+1)
+%define upstream_sublevel %(expr %{base_sublevel} + 1)
+# The rc snapshot level
+#%define rcrev 0
+# The git snapshot level
+#%define gitrev 0
+# Set rpm version accordingly
+%define rpmversion 2.6.%{upstream_sublevel}
+%endif
+# Nb: The above rcrev and gitrev values automagically define Patch00 and Patch01 below.
 
 # What parts do we want to build?  We must build at least one kernel.
 # These are the kernels that are built IF the architecture allows it.
@@ -11,36 +60,41 @@
 # to 0 in here to disable them.
 #
 # standard kernel
-%define with_up      %{?_without_up:      0} %{?!_without_up:      1}
+%define with_up        %{?_without_up:        0} %{?!_without_up:        1}
 # kernel-smp (only valid for ppc 32-bit, sparc64)
-%define with_smp     %{?_without_smp:     0} %{?!_without_smp:     1}
+%define with_smp       %{?_without_smp:       0} %{?!_without_smp:       1}
 # kernel-PAE (only valid for i686)
-%define with_pae     %{?_without_pae:     0} %{?!_without_pae:     1}
+%define with_pae       %{?_without_pae:       0} %{?!_without_pae:       1}
 # kernel-xen
-%define with_xen     %{?_without_xen:     0} %{?!_without_xen:     1}
+%define with_xen       %{?_without_xen:       0} %{?!_without_xen:       1}
 # kernel-kdump
-%define with_kdump   %{?_without_kdump:   0} %{?!_without_kdump:   1}
+%define with_kdump     %{?_without_kdump:     0} %{?!_without_kdump:     1}
 # kernel-debug
-%define with_debug   %{?_without_debug:   0} %{!?_without_debug:   1}
+%define with_debug     %{?_without_debug:     0} %{!?_without_debug:     1}
 # kernel-doc
-%define with_doc     %{?_without_doc:     0} %{?!_without_doc:     1}
+%define with_doc       %{?_without_doc:       0} %{?!_without_doc:       1}
 # kernel-headers
-%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1}
+%define with_headers   %{?_without_headers:   0} %{?!_without_headers:   1}
+# kernel-debuginfo
+%define with_debuginfo %{?_without_debuginfo: 0} %{!?_without_debuginfo: 1}
 
 # Additional options for user-friendly one-off kernel building:
 #
 # Only build the base kernel (--with baseonly):
-%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0}
+%define with_baseonly  %{?_with_baseonly:     1} %{?!_with_baseonly:     0}
 # Only build the smp kernel (--with smponly):
-%define with_smponly  %{?_with_smponly:  1} %{?!_with_smponly:  0}
+%define with_smponly   %{?_with_smponly:      1} %{?!_with_smponly:      0}
 # Only build the xen kernel (--with xenonly):
-%define with_xenonly  %{?_with_xenonly:  1} %{?!_with_xenonly:  0}
+%define with_xenonly   %{?_with_xenonly:      1} %{?!_with_xenonly:      0}
 
 # Whether or not to gpg sign modules
 %define with_modsign 1
 
 # Whether or not to do C=1 builds with sparse
 %define usesparse 0
+%if "%fedora" >= "7"
+%define usesparse 1
+%endif
 
 # Whether or not to apply the Xen patches -- leave this enabled
 %define includexen 0
@@ -52,18 +106,28 @@
 # See also 'make debug' and 'make release'.
 %define debugbuildsenabled 1
 
-# Versions of various parts
+# Want to build a vanilla kernel build without any non-upstream patches?
+# (well, almost none, we need nonintconfig for build purposes). Default to 0 (off).
+%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0}
+
+# pkg_release is what we'll fill in for the rpm Release: field
+%if %{released_kernel}
+%define pkg_release %{fedora_build}%{?buildid}%{?dist}
+%else
+%if 0%{?rcrev}
+%define rctag .rc%rcrev
+%endif
+%if 0%{?gitrev}
+%define gittag .git%gitrev
+%if !0%{?rcrev}
+%define rctag .rc0
+%endif
+%endif
+%define pkg_release 0.%{fedora_build}%{?buildid}%{?rctag}%{?gittag}%{?dist}
+%endif
 
-# Polite request for people who spin their own kernel rpms:
-# please modify the "buildid" define in a way that identifies
-# that the kernel isn't the stock distribution kernel, for example,
-# by setting the define to ".local" or ".bz123456"
-#
-#% define buildid .local
-%define sublevel 21
-%define kversion 2.6.%{sublevel}
-%define rpmversion 2.6.%{sublevel}
-%define release %(R="$Revision$"; RR="${R##: }"; echo ${RR%%?})%{?dist}%{?buildid}
+# The kernel tarball/base version
+%define kversion 2.6.%{base_sublevel}
 
 %define make_target bzImage
 %define kernel_image x86
@@ -76,6 +140,37 @@
 %define KVERREL %{PACKAGE_VERSION}-%{PACKAGE_RELEASE}
 %define hdrarch %_target_cpu
 
+%if 0%{!?nopatches:1}
+%define nopatches 0
+%endif
+
+%if %{with_vanilla}
+%define nopatches 1
+%endif
+
+%if %{nopatches}
+%define includexen 0
+%define with_xen 0
+%define variant -vanilla
+%else
+%define variant_fedora -fedora
+%endif
+
+%define using_upstream_branch 0
+%if 0%{?upstream_branch:1}
+%define using_upstream_branch 1
+%define variant -%{upstream_branch}%{?variant_fedora}
+%define pkg_release %{upstream_branch_release}.%{pkg_release}
+%endif
+
+%if !%{debugbuildsenabled}
+%define with_debug 0
+%endif
+
+%if !%{with_debuginfo}
+%define _enable_debug_packages 0
+%endif
+
 # if requested, only build base kernel
 %if %{with_baseonly}
 %define with_smp 0
@@ -103,24 +198,7 @@
 %define with_debug 0
 %endif
 
-# don't build xen or kdump kernels for OLPC
-%if 0%{?olpc}
[...2329 lines suppressed...]
-- Add new wireless infrastructure from wireless-dev git tree
-
-* Wed Feb 21 2007 Kristian Høgsberg <krh at redhat.com>
-- Rediff firewire patch, include fixes for #228017.
-
-* Wed Feb 21 2007 Dave Jones <davej at redhat.com>
-- 2.6.21-rc1
-
-* Tue Feb 20 2007 Dave Jones <davej at redhat.com>
-- 2.6.20-git16
-
-* Sat Feb 17 2007 Dave Jones <davej at redhat.com>
-- 2.6.20-git14  (Now tickless on 32bit x86).
-- Fix up VIA SATA.
-
-* Wed Feb 14 2007 Adam Jackson <ajax at redhat.com>
-- nouveau drm
-
-* Wed Feb 14 2007 Dave Jones <davej at redhat.com>
-- 2.6.20-git10
-
-* Tue Feb 13 2007 Dave Jones <davej at redhat.com>
-- Resurrect the signed modules patches.
-
-* Mon Feb 12 2007 Kristian Høgsberg <krh at redhat.com>
-- Update firewire patch with latest usptream changes.
-
-* Mon Feb  5 2007 Dave Jones <davej at redhat.com>
-- Fix attr2 corruption with btree data extents
-
-* Sun Feb  4 2007 Dave Jones <davej at redhat.com>
-- 2.6.20
-- Move xen sources out of kernel-xen-devel. (Don Zickus)
-
-* Sat Feb  3 2007 Dave Jones <davej at redhat.com>
-- 2.6.20-rc7-git1
-
-* Wed Jan 31 2007 Dave Jones <davej at redhat.com>
-- 2.6.20rc7
-
-* Tue Jan 30 2007 Dave Jones <davej at redhat.com>
-- 2.6.20rc6-git2
-
-* Mon Jan 29 2007 Chuck Ebbert <cebbert at redhat.com>
-- 2.6.20rc6-git1
-
-* Fri Jan 26 2007 Bill Nottingham <notting at redhat.com>
-- turn on CONFIG_SYSFS_DEPRECATED so that things actually work. *sigh*
-
-* Tue Jan 23 2007 Jeremy Katz <katzj at redhat.com>
-- temporarily restore START_ARRAY ioctl for mdraid so that we can have mdraid
-  in test1
-
-* Sun Jan 14 2007 Roland McGrath <roland at redhat.com>
-- utrace update: PTRACE_TRACEME fix
-
-* Thu Jan 11 2007 Kristian Høgsberg <krh at redhat.com>
-- Add and enable alternative firewire stack.
-
-* Thu Jan 11 2007 Jeremy Katz <katzj at redhat.com>
-- disable nmi watchdog by default
-
-* Wed Jan 10 2007 Dave Jones <davej at redhat.com>
-- 2.6.20rc4-git4
-- PIIX3 PATA support.
-
-* Sun Jan  7 2007 Dave Jones <davej at redhat.com>
-- 2.6.20rc4
-
-* Sat Jan  6 2007 Dave Jones <davej at redhat.com>
-- 2.6.20rc3-git4
-
-* Mon Jan  1 2007 Dave Jones <davej at redhat.com>
-- 2.6.20rc3
-
-* Mon Jan  1 2007 David Woodhouse <dwmw2 at redhat.com>
-- Fix fallout from half-baked upstream IBM vSCSI patch
-
-* Mon Jan  1 2007 David Woodhouse <dwmw2 at redhat.com>
-- Fix BUG() in assembler in PowerPC
-- Fix Maple IDE IRQ
-
-* Sun Dec 31 2006 Dave Jones <davej at redhat.com>
-- 2.6.20rc2-git2
-
-* Fri Dec 29 2006 Dave Jones <davej at redhat.com>
-- 2.6.20rc2-git1
-
-* Fri Dec 29 2006 David Woodhouse <dwmw2 at redhat.com>
-- Update USB endianness patches
-
-* Wed Dec 27 2006 Dave Jones <davej at redhat.com>
-- 2.6.20rc2
-
-* Thu Dec 21 2006 David Woodhouse <dwmw2 at redhat.com>
-- Fix IPv6 checksum handling
-- Add MODULE_ALIAS() to pata_mpc52xx driver
-
-* Wed Dec 20 2006 David Woodhouse <dwmw2 at redhat.com>
-- Fix BE OHCI support -- write only BE not BE and _then_ LE. Doh.
-
-* Tue Dec 19 2006 David Woodhouse <dwmw2 at redhat.com>
-- Fix ebus oops
-- Actually make it possible to include iSeries in the generic PPC64 kernel
-
-* Tue Dec 19 2006 David Woodhouse <dwmw2 at redhat.com>
-- Include iSeries in the generic PPC64 kernel now that's possible
-- Fix squashfs
-- Fix softmac fallout from work_struct changes
-- Update OF uevent handler patch
-
-* Mon Dec 18 2006 David Woodhouse <dwmw2 at redhat.com>
-- Enable CONFIG_IDE on PowerPC, for PMAC. Need pata_pmac driver...
-- Fix the deleteme handling
-- Fix build on platforms without writel_be()
-- Fix connector build failure
-
-* Sun Dec 17 2006 Dave Jones <davej at redhat.com>
-- 2.6.20rc1-git5
-
-* Sun Dec 17 2006 David Woodhouse <dwmw2 at redhat.com>
-- Enable Efika platform support
-- Temporarily provide __ucmpdi2 on ppc32 to work around GCC PR #25724
-
-* Thu Dec 14 2006 Dave Jones <davej at redhat.com>
-- 2.6.20rc1-git1
-- libata: don't initialize sg in ata_exec_internal() if DMA_NONE
-
-* Wed Dec 13 2006 Dave Jones <davej at redhat.com>
-- Kill off -kdump for 686.
-
-* Wed Dec 13 2006 David Woodhouse <dwmw2 at redhat.com>
-- Fix and re-enable ppc, ppc64, ppciseries builds
-- Fix hdrcheck.sh invocation
-- %%_target_cpu in BuildRoot to allow parallel builds
-
-* Tue Dec 12 2006 Dave Jones <davej at redhat.com>
-- 2.6.19-git19
-
-* Tue Dec 12 2006 Dave Jones <davej at redhat.com>
-- 2.6.19-git18
-
-* Fri Dec  8 2006 Dave Jones <davej at redhat.com>
-- 2.6.19-git12
-
-* Thu Dec  7 2006 Dave Jones <davej at redhat.com>
-- 2.6.19-git9
-
-* Tue Dec  5 2006 David Woodhouse <dwmw2 at redhat.com>
-- Remove cell_defconfig update from Mambo patch
-- Drop 64KiB CI page patch which is fixed differently upstream
-
-* Tue Dec  5 2006 Dave Jones <davej at redhat.com>
-- 2.6.19-git7
-
-* Mon Dec  4 2006 Dave Jones <davej at redhat.com>
-- 2.6.19-git5
-
-* Wed Nov 29 2006 Dave Jones <davej at redhat.com>
-- 2.6.19
-
-* Mon Nov 27 2006 Dave Jones <davej at redhat.com>
-- 2.6.19-rc6-git10
-
-* Thu Nov 23 2006 David Woodhouse <dwmw2 at redhat.com>
-- Update Cell systemsim support (#217078)
-- Fix utrace vs. Cell SPU (#217079)
-- Enable Maple support
-
-* Fri Nov 17 2006 Dave Jones <davej at redhat.com>
-- 2.6.19rc6
-- Merge squashfs changes from FC6.
-- Disable W1
-
-* Fri Nov 10 2006 Dave Jones <davej at redhat.com>
-- Separate -debug kernels.
-
-* Thu Nov  9 2006 Dave Jones <davej at redhat.com>
-- 2.6.19rc5-git2
-- Bump HZ to 1000
-
-* Wed Nov  8 2006 Dave Jones <davej at redhat.com>
-- 2.6.19rc5-git1
-
-* Tue Nov  7 2006 Dave Jones <davej at redhat.com>
-- 2.6.19rc5
-
-* Mon Nov  6 2006 Dave Jones <davej at redhat.com>
-- 2.6.19rc4-git11
-
-* Tue Oct 31 2006 Dave Jones <davej at redhat.com>
-- 2.6.19rc4
-
-* Sun Oct 29 2006 Dave Jones <davej at redhat.com>
-- 2.6.19rc3
-
-* Fri Oct 13 2006 Dave Jones <davej at redhat.com>
-- 2.6.19rc2
+* Tue Jul 10 2007 Dave Jones <davej at redhat.com>
+- Rebase to 2.6.22

linux-2.6-ata-quirk.patch:

Index: linux-2.6-ata-quirk.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-ata-quirk.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-ata-quirk.patch	27 Feb 2007 02:02:54 -0000	1.1
+++ linux-2.6-ata-quirk.patch	10 Jul 2007 16:14:59 -0000	1.2
@@ -46,13 +46,13 @@
 +
 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_11, quirk_intel_ide_controller);
 +
---- linux-2.6.20/arch/ia64/kernel/Makefile	2007-02-08 02:13:41.000000000 -0500
-+++ linux-2.6.20_fix/arch/ia64/kernel/Makefile	2007-02-12 09:49:39.000000000 -0500
+--- linux-2.6.21.noarch/arch/ia64/kernel/Makefile~	2007-05-27 23:23:36.000000000 -0400
++++ linux-2.6.21.noarch/arch/ia64/kernel/Makefile	2007-05-27 23:23:48.000000000 -0400
 @@ -33,6 +33,7 @@ obj-$(CONFIG_CRASH_DUMP)	+= crash_dump.o
  obj-$(CONFIG_IA64_UNCACHED_ALLOCATOR)	+= uncached.o
  obj-$(CONFIG_AUDIT)		+= audit.o
  obj-$(CONFIG_PCI_MSI)		+= msi_ia64.o
 +obj-$(CONFIG_PCI)		+= quirks.o
  mca_recovery-y			+= mca_drv.o mca_drv_asm.o
+ obj-$(CONFIG_IA64_MC_ERR_INJECT)+= err_inject.o
  
- obj-$(CONFIG_IA64_ESI)		+= esi.o

linux-2.6-bcm43xx-pci-neuter.patch:

Index: linux-2.6-bcm43xx-pci-neuter.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-bcm43xx-pci-neuter.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-bcm43xx-pci-neuter.patch	8 May 2007 18:57:27 -0000	1.1
+++ linux-2.6-bcm43xx-pci-neuter.patch	10 Jul 2007 16:14:59 -0000	1.2
@@ -1,6 +1,6 @@
---- linux-2.6.21.noarch/drivers/net/wireless/bcm43xx/bcm43xx_main.c.orig	2007-05-08 14:16:48.000000000 -0400
-+++ linux-2.6.21.noarch/drivers/net/wireless/bcm43xx/bcm43xx_main.c	2007-05-08 14:17:35.000000000 -0400
-@@ -124,6 +124,7 @@
+--- linux-2.6.21.noarch/drivers/net/wireless/bcm43xx/bcm43xx_main.c.orig	2007-06-07 16:02:15.000000000 -0400
++++ linux-2.6.21.noarch/drivers/net/wireless/bcm43xx/bcm43xx_main.c	2007-06-07 16:03:50.000000000 -0400
+@@ -120,6 +120,7 @@ MODULE_PARM_DESC(fwpostfix, "Postfix for
  	static struct pci_device_id bcm43xx_pci_tbl[] = {
  	/* Broadcom 4303 802.11b */
  	{ PCI_VENDOR_ID_BROADCOM, 0x4301, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
@@ -8,10 +8,10 @@
  	/* Broadcom 4307 802.11b */
  	{ PCI_VENDOR_ID_BROADCOM, 0x4307, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
  	/* Broadcom 4311 802.11(a)/b/g */
-@@ -146,6 +147,7 @@
- 	/* SB bus on BCM947xx */
- 	{ PCI_VENDOR_ID_BROADCOM, 0x0800, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- #endif
+@@ -138,6 +139,7 @@ MODULE_PARM_DESC(fwpostfix, "Postfix for
+ 	{ PCI_VENDOR_ID_BROADCOM, 0x4324, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
+ 	/* Broadcom 43XG 802.11b/g */
+ 	{ PCI_VENDOR_ID_BROADCOM, 0x4325, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
 +#endif
  	{ 0 },
  };

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.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- linux-2.6-build-nonintconfig.patch	27 Jun 2006 00:39:13 -0000	1.6
+++ linux-2.6-build-nonintconfig.patch	10 Jul 2007 16:14:59 -0000	1.7
@@ -1,15 +1,29 @@
-diff -urNp --exclude-from=/home/davej/.exclude linux-600/scripts/kconfig/conf.c linux-800/scripts/kconfig/conf.c
---- linux-600/scripts/kconfig/conf.c
-+++ linux-800/scripts/kconfig/conf.c
-@@ -20,6 +20,7 @@ enum {
+--- linux-2.6.17/scripts/kconfig/Makefile.nonintconfig
++++ linux-2.6.17/scripts/kconfig/Makefile
+@@ -23,6 +23,11 @@ oldconfig: $(obj)/conf
+ silentoldconfig: $(obj)/conf
+ 	$< -s arch/$(ARCH)/Kconfig
+ 
++nonint_oldconfig: $(obj)/conf
++	$< -b arch/$(ARCH)/Kconfig
++loose_nonint_oldconfig: $(obj)/conf
++	$< -B arch/$(ARCH)/Kconfig
++
+ update-po-config: $(obj)/kxgettext
+ 	xgettext --default-domain=linux \
+           --add-comments --keyword=_ --keyword=N_ \
+--- linux-2.6.17/scripts/kconfig/conf.c.nonintconfig
++++ linux-2.6.17/scripts/kconfig/conf.c
+@@ -21,6 +21,8 @@ enum {
  	ask_all,
  	ask_new,
  	ask_silent,
 +	dont_ask,
++	dont_ask_dont_tell,
  	set_default,
  	set_yes,
  	set_mod,
-@@ -37,6 +37,8 @@ static struct menu *rootEntry;
+@@ -37,6 +39,8 @@ static struct menu *rootEntry;
  
  static char nohelp_text[] = N_("Sorry, no help available for this option yet.\n");
  
@@ -18,7 +32,7 @@
  static void strip(char *str)
  {
  	char *p = str;
-@@ -93,6 +96,12 @@ static void conf_askvalue(struct symbol 
+@@ -103,6 +107,14 @@ static void conf_askvalue(struct symbol 
  		fflush(stdout);
  		fgets(line, 128, stdin);
  		return;
@@ -27,114 +41,71 @@
 +			fprintf(stderr,"CONFIG_%s\n",sym->name);
 +			return_value++;
 +		}
++		/*FALLTHROUGH*/
++	case dont_ask_dont_tell:
 +		return;
  	case set_default:
  		printf("%s\n", def);
  		return;
-@@ -337,6 +346,10 @@ static int conf_choice(struct menu *menu
+@@ -346,6 +358,11 @@ static int conf_choice(struct menu *menu
  			printf("?");
  		printf("]: ");
  		switch (input_mode) {
 +		case dont_ask:
++		case dont_ask_dont_tell:
 +			cnt = def;
 +			printf("%d\n", cnt);
 +			break;
  		case ask_new:
  		case ask_silent:
  			if (!is_new) {
-@@ -472,7 +485,10 @@ static void check_conf(struct menu *menu
+@@ -482,6 +499,10 @@ static void check_conf(struct menu *menu
  			if (!conf_cnt++)
- 				printf("*\n* Restart config...\n*\n");
+ 				printf(_("*\n* Restart config...\n*\n"));
  			rootEntry = menu_get_parent_menu(menu);
--			conf(rootEntry);
-+			if (input_mode == dont_ask)
++			if (input_mode == dont_ask
++			    || input_mode == dont_ask_dont_tell)
 +				fprintf(stderr,"CONFIG_%s\n",sym->name);
 +			else
-+				conf(rootEntry);
+ 			conf(rootEntry);
  		}
- 		if (sym_is_choice(sym) && sym_get_tristate_value(sym) != mod)
- 			return;
-@@ -493,6 +509,9 @@ int main(int ac, char **av)
+ 	}
+@@ -501,6 +522,12 @@ int main(int ac, char **av)
  		case 'o':
  			input_mode = ask_new;
  			break;
 +		case 'b':
 +			input_mode = dont_ask;
 +			break;
++		case 'B':
++			input_mode = dont_ask_dont_tell;
++			break;
  		case 's':
  			input_mode = ask_silent;
  			valid_stdin = isatty(0) && isatty(1) && isatty(2);
-@@ -557,6 +576,7 @@ int main(int ac, char **av)
+@@ -566,6 +593,8 @@ int main(int ac, char **av)
  		}
  	case ask_all:
  	case ask_new:
 +	case dont_ask:
++	case dont_ask_dont_tell:
  		conf_read(NULL);
  		break;
- 	default:
-@@ -632,7 +632,7 @@ int main(int ac, char **av)
+ 	case set_no:
+@@ -612,7 +641,8 @@ int main(int ac, char **av)
  	do {
  		conf_cnt = 0;
  		check_conf(&rootmenu);
 -	} while (conf_cnt);
-+	} while ((conf_cnt) && (input_mode != dont_ask));
++ 	} while (conf_cnt && (input_mode != dont_ask
++			      && input_mode != dont_ask_dont_tell));
  	if (conf_write(NULL)) {
  		fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n"));
  		return 1;
-@@ -643,5 +643,5 @@ skip_check:
+@@ -623,5 +653,5 @@ skip_check:
  		return 1;
  	}
  
 -	return 0;
 +	return return_value;
  }
---- linux-2.6.16.noarch/scripts/kconfig/Makefile~	2006-03-25 15:55:18.000000000 -0500
-+++ linux-2.6.16.noarch/scripts/kconfig/Makefile	2006-03-25 15:55:47.000000000 -0500
-@@ -23,6 +23,9 @@ oldconfig: $(obj)/conf
- silentoldconfig: $(obj)/conf
- 	$< -s arch/$(ARCH)/Kconfig
- 
-+nonint_oldconfig: scripts/kconfig/conf
-+	./scripts/kconfig/conf -b arch/$(ARCH)/Kconfig
-+
- update-po-config: $(obj)/kxgettext
- 	xgettext --default-domain=linux \
-           --add-comments --keyword=_ --keyword=N_ \
---- linux-2.6.14/scripts/kconfig/confdata.c~	2005-11-10 14:55:46.000000000 -0500
-+++ linux-2.6.14/scripts/kconfig/confdata.c	2005-11-10 14:56:01.000000000 -0500
-@@ -161,7 +161,7 @@ load:
- 			if (def == S_DEF_USER) {
- 				sym = sym_find(line + 9);
- 				if (!sym) {
--					conf_warning("trying to assign nonexistent symbol %s", line + 9);
-+					conf_warning("trying to assign nonexistent symbol %s", line + 9);
- 					break;
- 				}
- 			} else {
-@@ -197,7 +197,7 @@ load:
- 			if (def == S_DEF_USER) {
- 				sym = sym_find(line + 7);
- 				if (!sym) {
--					conf_warning("trying to assign nonexistent symbol %s", line + 7);
-+					conf_warning("trying to assign nonexistent symbol %s", line + 7);
- 					break;
- 				}
- 			} else {
---- linux-2.6.14/scripts/kconfig/confdata.c~	2005-11-15 23:51:37.000000000 -0500
-+++ linux-2.6.14/scripts/kconfig/confdata.c	2005-11-15 23:52:50.000000000 -0500
-@@ -153,7 +153,6 @@ int conf_read_simple(const char *name)
- 				break;
- 			} else if (!(sym->flags & SYMBOL_NEW)) {
- 				conf_warning("trying to reassign symbol %s", sym->name);
--				break;
- 			}
- 			switch (sym->type) {
- 			case S_BOOLEAN:
-@@ -183,7 +182,6 @@ int conf_read_simple(const char *name)
- 				break;
- 			} else if (!(sym->flags & SYMBOL_NEW)) {
- 				conf_warning("trying to reassign symbol %s", sym->name);
--				break;
- 			}
- 			switch (sym->type) {
- 			case S_TRISTATE:

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.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- linux-2.6-crash-driver.patch	4 May 2007 04:06:47 -0000	1.5
+++ linux-2.6-crash-driver.patch	10 Jul 2007 16:14:59 -0000	1.6
@@ -33,15 +33,14 @@
  #include <linux/signal.h>
  #include <linux/sched.h>
  #include <linux/kernel.h>
-@@ -417,6 +418,8 @@ int devmem_is_allowed(unsigned long page
+@@ -452,6 +452,7 @@ static inline int page_is_ram (unsigned 
+ 	}
+ 	return 0;
  }
- 
- 
 +EXPORT_SYMBOL_GPL(page_is_ram);
-+
- static struct kcore_list kcore_mem, kcore_vmalloc, kcore_kernel, kcore_modules,
- 			 kcore_vsyscall;
  
+ /*
+  * Memory hotplug specific functions
 diff -urNp --exclude-from=/home/davej/.exclude linux-1050/drivers/char/crash.c linux-1060/drivers/char/crash.c
 --- linux-1050/drivers/char/crash.c
 +++ linux-1060/drivers/char/crash.c
@@ -448,14 +447,3 @@
 +#endif /* __KERNEL__ */
 +
 +#endif /* _ASM_X86_64_CRASH_H */
---- linux-2.6.21.noarch/arch/x86_64/kernel/e820.c~	2007-05-04 00:04:56.000000000 -0400
-+++ linux-2.6.21.noarch/arch/x86_64/kernel/e820.c	2007-05-04 00:05:02.000000000 -0400
-@@ -25,7 +25,7 @@
- #include <asm/bootsetup.h>
- #include <asm/sections.h>
- 
--struct e820map e820 __initdata;
-+struct e820map e820;
- 
- /* 
-  * PFN of last memory page.

linux-2.6-debug-boot-delay.patch:

Index: linux-2.6-debug-boot-delay.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-debug-boot-delay.patch,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- linux-2.6-debug-boot-delay.patch	12 Dec 2006 15:03:47 -0000	1.4
+++ linux-2.6-debug-boot-delay.patch	10 Jul 2007 16:14:59 -0000	1.5
@@ -27,7 +27,7 @@
 
 --- linux-2.6.19.noarch/init/main.c~	2006-12-12 09:32:35.000000000 -0500
 +++ linux-2.6.19.noarch/init/main.c	2006-12-12 09:33:32.000000000 -0500
-@@ -685,6 +685,30 @@ static void __init do_initcalls(void)
+@@ -685,6 +685,31 @@ static void __init do_initcalls(void)
  	flush_scheduled_work();
  }
  
@@ -47,7 +47,8 @@
 +		boot_delay = 0;
 +
 +	printk_delay_msec = loops_per_msec;
-+	printk("boot_delay: %u, preset_lpj: %ld, lpj: %lu, CONFIG_HZ: %d, printk_delay_msec: %llu\n",
++	printk(KERN_DEBUG "boot_delay: %u, preset_lpj: %ld, lpj: %lu, "
++		"CONFIG_HZ: %d, printk_delay_msec: %llu\n",
 +		boot_delay, preset_lpj, lpj, CONFIG_HZ, printk_delay_msec);
 +	return 1;
 +}
@@ -69,17 +70,17 @@
  static int __init lpj_setup(char *str)
  {
  	preset_lpj = simple_strtoul(str,NULL,0);
---- linux-2615-work.orig/kernel/printk.c
-+++ linux-2615-work/kernel/printk.c
-@@ -23,6 +23,8 @@
- #include <linux/smp_lock.h>
+--- linux-2.6.21.noarch/kernel/printk.c~	2007-05-27 23:01:29.000000000 -0400
++++ linux-2.6.21.noarch/kernel/printk.c	2007-05-27 23:01:37.000000000 -0400
+@@ -22,6 +22,8 @@
+ #include <linux/tty_driver.h>
  #include <linux/console.h>
  #include <linux/init.h>
 +#include <linux/jiffies.h>
 +#include <linux/nmi.h>
  #include <linux/module.h>
+ #include <linux/moduleparam.h>
  #include <linux/interrupt.h>			/* For in_interrupt() */
- #include <linux/config.h>
 @@ -201,6 +202,34 @@ out:
  
  __setup("log_buf_len=", log_buf_len_setup);
@@ -127,11 +128,11 @@
  	return r;
  }
  
---- linux-2615-work.orig/lib/Kconfig.debug
-+++ linux-2615-work/lib/Kconfig.debug
-@@ -186,6 +186,24 @@ config FRAME_POINTER
- 	  some architectures or if you use external debuggers.
- 	  If you don't debug the kernel, you can say N.
+--- linux-2.6.21.noarch/lib/Kconfig.debug~	2007-05-27 23:02:18.000000000 -0400
++++ linux-2.6.21.noarch/lib/Kconfig.debug	2007-05-27 23:03:14.000000000 -0400
+@@ -394,6 +394,24 @@ config FORCED_INLINING
+ 	  become the default in the future, until then this option is there to
+ 	  test gcc for this.
  
 +config BOOT_DELAY
 +	bool "Delay each boot message by N milliseconds"
@@ -154,4 +155,3 @@
  config RCU_TORTURE_TEST
  	tristate "torture tests for RCU"
  	depends on DEBUG_KERNEL
-

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

Index: linux-2.6-debug-extra-warnings.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-debug-extra-warnings.patch,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- linux-2.6-debug-extra-warnings.patch	14 Jun 2007 18:04:58 -0000	1.5
+++ linux-2.6-debug-extra-warnings.patch	10 Jul 2007 16:14:59 -0000	1.6
@@ -2,9 +2,6 @@
  This makes builds fail sooner if something is implicitly defined instead
  of having to wait half an hour for it to fail at the linking stage.
 
--Wpointer-arith
- http://bugzilla.kernel.org/show_bug.cgi?id=7561
-
 Signed-off-by: Dave Jones <davej at redhat.com>
 
 --- linux-2.6.21.noarch/Makefile~	2007-06-04 16:46:24.000000000 -0400
@@ -15,7 +12,7 @@
  CFLAGS          := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
 -                   -fno-strict-aliasing -fno-common
 +		   -fno-strict-aliasing -fno-common \
-+		   -Werror-implicit-function-declaration -Wpointer-arith
++		   -Werror-implicit-function-declaration
  AFLAGS          := -D__ASSEMBLY__
  
  # Read KERNELRELEASE from include/config/kernel.release (if it exists)

linux-2.6-debug-must_check.patch:

Index: linux-2.6-debug-must_check.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-debug-must_check.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-debug-must_check.patch	17 Feb 2006 19:07:26 -0000	1.1
+++ linux-2.6-debug-must_check.patch	10 Jul 2007 16:14:59 -0000	1.2
@@ -45,12 +45,12 @@
  {
  	if (nbits <= BITS_PER_LONG)
  		return ! (~(*src) & BITMAP_LAST_WORD_MASK(nbits));
-@@ -239,7 +239,7 @@ static inline int bitmap_full(const unsi
+@@ -248,7 +248,7 @@ static inline int __must_check bitmap_fu
  		return __bitmap_full(src, nbits);
  }
  
 -static inline int bitmap_weight(const unsigned long *src, int nbits)
 +static inline int __must_check bitmap_weight(const unsigned long *src, int nbits)
  {
- 	return __bitmap_weight(src, nbits);
- }
+ 	if (nbits <= BITS_PER_LONG)
+ 		return hweight_long(*src & BITMAP_LAST_WORD_MASK(nbits));

linux-2.6-debug-nmi-timeout.patch:

Index: linux-2.6-debug-nmi-timeout.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-debug-nmi-timeout.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-debug-nmi-timeout.patch	13 Apr 2007 20:40:51 -0000	1.1
+++ linux-2.6-debug-nmi-timeout.patch	10 Jul 2007 16:14:59 -0000	1.2
@@ -20,11 +20,11 @@
  			die_nmi("NMI Watchdog detected LOCKUP on CPU %d\n", regs,
  				panic_on_timeout);
  	} else {
---- linux-2.6.20.noarch/lib/Kconfig.debug~	2007-04-13 15:53:48.000000000 -0400
-+++ linux-2.6.20.noarch/lib/Kconfig.debug	2007-04-13 15:55:18.000000000 -0400
-@@ -133,6 +133,14 @@ config DETECT_SOFTLOCKUP
- 	   can be detected via the NMI-watchdog, on platforms that
- 	   support it.)
+--- linux-2.6.21.noarch/lib/Kconfig.debug~	2007-07-06 17:05:46.000000000 -0400
++++ linux-2.6.21.noarch/lib/Kconfig.debug	2007-07-06 17:06:07.000000000 -0400
+@@ -126,6 +126,14 @@ config SCHEDSTATS
+ 	  application, you can say N to avoid the very slight overhead
+ 	  this adds.
  
 +config DEBUG_NMI_TIMEOUT
 +	int "Number of seconds before NMI timeout"
@@ -34,6 +34,6 @@
 +	  This value is the number of seconds the NMI watchdog will tick
 +	  before it decides the machine has hung.
 +
- config SCHEDSTATS
- 	bool "Collect scheduler statistics"
+ config TIMER_STATS
+ 	bool "Collect kernel timers statistics"
  	depends on DEBUG_KERNEL && PROC_FS

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

Index: linux-2.6-debug-spinlock-taint.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-debug-spinlock-taint.patch,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- linux-2.6-debug-spinlock-taint.patch	4 Jul 2006 21:03:12 -0000	1.6
+++ linux-2.6-debug-spinlock-taint.patch	10 Jul 2007 16:14:59 -0000	1.7
@@ -12,18 +12,18 @@
  	printk(KERN_EMERG " lock: %p, .magic: %08x, .owner: %s/%d, "
  			".owner_cpu: %d\n",
  		lock, lock->magic,
-@@ -112,9 +112,9 @@ static void __spin_lock_debug(spinlock_t
+@@ -114,9 +114,9 @@ static void __spin_lock_debug(spinlock_t
  		if (print_once) {
  			print_once = 0;
  			printk(KERN_EMERG "BUG: spinlock lockup on CPU#%d, "
 -					"%s/%d, %p\n",
-+					"%s/%d, %p (%s)\n",
++					"%s/%d, %p [%s]\n",
  				raw_smp_processor_id(), current->comm,
 -				current->pid, lock);
 +				current->pid, lock, print_tainted());
  			dump_stack();
- 		}
- 	}
+ #ifdef CONFIG_SMP
+ 			trigger_all_cpu_backtrace();
 @@ -154,9 +154,9 @@ static void rwlock_bug(rwlock_t *lock, c
  	if (!debug_locks_off())
  		return;

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

Index: linux-2.6-debug-sysfs-crash-debugging.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-debug-sysfs-crash-debugging.patch,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- linux-2.6-debug-sysfs-crash-debugging.patch	14 Feb 2007 19:00:31 -0000	1.7
+++ linux-2.6-debug-sysfs-crash-debugging.patch	10 Jul 2007 16:14:59 -0000	1.8
@@ -49,18 +49,17 @@
  		goto Einval;
  
 
-diff -puN arch/i386/kernel/traps.c~sysfs-crash-debugging arch/i386/kernel/traps.c
---- devel/arch/i386/kernel/traps.c~sysfs-crash-debugging	2005-11-22 22:31:16.000000000 -0800
-+++ devel-akpm/arch/i386/kernel/traps.c	2005-11-22 22:31:16.000000000 -0800
-@@ -95,6 +95,8 @@ static int kstack_depth_to_print = 24;
- struct notifier_block *i386die_chain;
- static DEFINE_SPINLOCK(die_notifier_lock);
+--- linux-2.6.21.noarch/arch/i386/kernel/traps.c~	2007-05-27 19:02:21.000000000 -0400
++++ linux-2.6.21.noarch/arch/i386/kernel/traps.c	2007-05-27 19:03:15.000000000 -0400
+@@ -59,6 +59,8 @@
+ 
+ #include "mach_traps.h"
  
 +extern char last_sysfs_file[];
 +
- int register_die_notifier(struct notifier_block *nb)
- {
- 	int err = 0;
+ int panic_on_unrecovered_nmi;
+ 
+ asmlinkage int system_call(void);
 @@ -388,6 +388,9 @@ void die(const char * str, struct pt_reg
  #endif
  		if (nl)
@@ -71,17 +70,17 @@
  		if (notify_die(DIE_OOPS, str, regs, err,
  					current->thread.trap_no, SIGSEGV) !=
  				NOTIFY_STOP)
---- linux-2.6.14/arch/x86_64/kernel/traps.c~	2005-12-02 18:38:28.000000000 -0500
-+++ linux-2.6.14/arch/x86_64/kernel/traps.c	2005-12-02 18:38:57.000000000 -0500
-@@ -75,6 +75,8 @@ asmlinkage void call_debug(void);
- struct notifier_block *die_chain;
- static DEFINE_SPINLOCK(die_notifier_lock);
+--- linux-2.6.21.noarch/arch/x86_64/kernel/traps.c~	2007-05-27 19:03:37.000000000 -0400
++++ linux-2.6.21.noarch/arch/x86_64/kernel/traps.c	2007-05-27 19:03:48.000000000 -0400
+@@ -49,6 +49,8 @@
+ #include <asm/nmi.h>
+ #include <asm/stacktrace.h>
  
 +extern char last_sysfs_file[];
 +
- int register_die_notifier(struct notifier_block *nb)
- {
- 	int err = 0;
+ asmlinkage void divide_error(void);
+ asmlinkage void debug(void);
+ asmlinkage void nmi(void);
 @@ -416,6 +416,9 @@ void __die(const char * str, struct pt_r
  	printk("DEBUG_PAGEALLOC");
  #endif

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.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- linux-2.6-debug-taint-vm.patch	14 May 2007 15:54:53 -0000	1.12
+++ linux-2.6-debug-taint-vm.patch	10 Jul 2007 16:14:59 -0000	1.13
@@ -20,13 +20,14 @@
  	panic("BUG!"); \
  } while (0)
  #endif
-@@ -35,8 +39,7 @@ struct bug_entry {
+@@ -39,8 +39,8 @@ struct bug_entry {
  #define WARN_ON(condition) ({						\
  	typeof(condition) __ret_warn_on = (condition);			\
  	if (unlikely(__ret_warn_on)) {					\
--		printk("BUG: at %s:%d %s()\n", __FILE__,		\
+-		printk("WARNING: at %s:%d %s()\n", __FILE__,		\
 -			__LINE__, __FUNCTION__);			\
-+		printk("BUG: warning at %s:%d/%s() (%s)\n", __FILE__, __LINE__, __FUNCTION__, print_tainted()); \
++		printk("WARNING: at %s:%d %s() (%s)\n", __FILE__,	\
++			__LINE__, __FUNCTION__, print_tainted());	\
  		dump_stack();						\
  	}								\
  	unlikely(__ret_warn_on);					\
@@ -58,9 +59,9 @@
  	dump_stack();
  	page->flags &= ~(1 << PG_lru	|
  			1 << PG_private |
---- linux-2.6.20.noarch/mm/slab.c~	2007-04-04 16:36:51.000000000 -0400
-+++ linux-2.6.20.noarch/mm/slab.c	2007-04-04 16:37:03.000000000 -0400
-@@ -1802,8 +1802,8 @@ static void check_poison_obj(struct kmem
+--- linux-2.6.21.noarch/mm/slab.c~	2007-05-27 22:57:44.000000000 -0400
++++ linux-2.6.21.noarch/mm/slab.c	2007-05-27 22:58:08.000000000 -0400
+@@ -1816,8 +1816,8 @@ static void check_poison_obj(struct kmem
  			/* Print header */
  			if (lines == 0) {
  				printk(KERN_ERR
@@ -69,8 +70,8 @@
 +					"Slab corruption (%s): %s start=%p, len=%d\n",
 +					print_tainted(), cachep->name, realobj, size);
  				print_objinfo(cachep, objp, 0);
- 				dump_stack();
  			}
+ 			/* 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
@@ -84,3 +85,36 @@
  		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);
+ 	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;
+ }

linux-2.6-defaults-fat-utf8.patch:

Index: linux-2.6-defaults-fat-utf8.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-defaults-fat-utf8.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-defaults-fat-utf8.patch	21 Feb 2006 20:53:00 -0000	1.1
+++ linux-2.6-defaults-fat-utf8.patch	10 Jul 2007 16:14:59 -0000	1.2
@@ -1,9 +1,9 @@
 
 https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=181963
 
---- linux-2.6.15.noarch/fs/fat/inode.c~	2006-02-20 23:20:12.000000000 -0500
-+++ linux-2.6.15.noarch/fs/fat/inode.c	2006-02-20 23:21:42.000000000 -0500
-@@ -952,7 +952,8 @@ static int parse_options(char *options, 
+--- linux-2.6.21.noarch/fs/fat/inode.c~	2007-05-27 23:22:31.000000000 -0400
++++ linux-2.6.21.noarch/fs/fat/inode.c	2007-05-27 23:22:50.000000000 -0400
+@@ -950,7 +950,8 @@ static int parse_options(char *options, 
  		opts->shortname = 0;
  	opts->name_check = 'n';
  	opts->quiet = opts->showexec = opts->sys_immutable = opts->dotsOK =  0;
@@ -11,5 +11,5 @@
 +	opts->utf8 = 1;
 +	opts->unicode_xlate = 0;
  	opts->numtail = 1;
- 	opts->nocase = 0;
+ 	opts->usefree = opts->nocase = 0;
  	*debug = 0;

linux-2.6-defaults-unicode-vt.patch:

Index: linux-2.6-defaults-unicode-vt.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-defaults-unicode-vt.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6-defaults-unicode-vt.patch	7 Aug 2006 19:19:53 -0000	1.2
+++ linux-2.6-defaults-unicode-vt.patch	10 Jul 2007 16:14:59 -0000	1.3
@@ -1,17 +1,6 @@
 
 Unicode by default. Join the 20th century.
 
---- linux-2.6.11/drivers/char/vt.c.foo	2005-06-06 22:53:13.000000000 -0400
-+++ linux-2.6.11/drivers/char/vt.c	2005-06-06 22:53:42.000000000 -0400
-@@ -1443,7 +1443,7 @@
- 	vc->vc_charset		= 0;
- 	vc->vc_need_wrap	= 0;
- 	vc->vc_report_mouse	= 0;
--	vc->vc_utf		= 0;
-+	vc->vc_utf		= 1;
- 	vc->vc_utf_count	= 0;
- 
- 	vc->vc_disp_ctrl	= 0;
 --- linux-2.6.17.noarch/drivers/char/keyboard.c~	2006-08-07 15:15:48.000000000 -0400
 +++ linux-2.6.17.noarch/drivers/char/keyboard.c	2006-08-07 15:15:59.000000000 -0400
 @@ -1370,7 +1370,7 @@ int __init kbd_init(void)
@@ -23,3 +12,14 @@
  	}
  
  	input_register_handler(&kbd_handler);
+--- linux-2.6.21.noarch/drivers/char/vt.c~	2007-05-27 19:36:17.000000000 -0400
++++ linux-2.6.21.noarch/drivers/char/vt.c	2007-05-27 19:37:49.000000000 -0400
+@@ -158,7 +158,7 @@ static void blank_screen_t(unsigned long
+ static void set_palette(struct vc_data *vc);
+ 
+ static int printable;		/* Is console ready for printing? */
+-static int default_utf8;
++static int default_utf8 = 1;
+ module_param(default_utf8, int, S_IRUGO | S_IWUSR);
+ 
+ /*

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.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- linux-2.6-devmem.patch	5 Jun 2007 04:44:47 -0000	1.13
+++ linux-2.6-devmem.patch	10 Jul 2007 16:14:59 -0000	1.14
@@ -78,13 +78,11 @@
  	for_each_online_pgdat(pgdat) {
  		for (i = 0; i < pgdat->node_spanned_pages; i++) {
  			if (!pfn_valid(pgdat->node_start_pfn + i))
-Index: linux-2.6/arch/s390/mm/init.c
-===================================================================
---- linux-2.6.orig/arch/s390/mm/init.c
-+++ linux-2.6/arch/s390/mm/init.c
-@@ -241,6 +241,11 @@ void __init paging_init(void)
+--- linux-2.6.21.noarch/arch/s390/mm/init.c~	2007-05-27 23:04:09.000000000 -0400
++++ linux-2.6.21.noarch/arch/s390/mm/init.c	2007-05-27 23:04:20.000000000 -0400
+@@ -156,6 +156,11 @@ void __init paging_init(void)
+ 	free_area_init_nodes(max_zone_pfns);
  }
- #endif /* CONFIG_64BIT */
  
 +int page_is_ram (unsigned long pagenr)
 +{
@@ -102,7 +100,7 @@
  	__flush_tlb_all();
  } 
  
-+static inline int page_is_ram (unsigned long pagenr)
++static int page_is_ram (unsigned long pagenr)
 +{
 +	int i;
 +
@@ -208,11 +206,10 @@
  	read = 0;
  	if (p < (unsigned long) high_memory) {
  		low_count = count;
-@@ -432,126 +454,6 @@ static ssize_t read_kmem(struct file *fi
-  	return read;
+@@ -454,125 +454,6 @@ static ssize_t read_kmem(struct file *fi
  }
  
--
+ 
 -static inline ssize_t
 -do_write_kmem(void *p, unsigned long realp, const char __user * buf,
 -	      size_t count, loff_t *ppos)
@@ -332,7 +329,7 @@
 - 	return virtr + wrote;
 -}
 -
- #if (defined(CONFIG_ISA) || defined(CONFIG_PCI)) && !defined(__mc68000__)
+ #ifdef CONFIG_DEVPORT
  static ssize_t read_port(struct file * file, char __user * buf,
  			 size_t count, loff_t *ppos)
 @@ -818,7 +720,6 @@ static const struct file_operations mem_
@@ -343,13 +340,13 @@
  	.mmap		= mmap_kmem,
  	.open		= open_kmem,
  	.get_unmapped_area = get_unmapped_area_mem,
-@@ -954,7 +855,6 @@ static const struct {
+@@ -859,7 +859,6 @@ static const struct {
  	const struct file_operations	*fops;
  } devlist[] = { /* list of minor devices */
  	{1, "mem",     S_IRUSR | S_IWUSR | S_IRGRP, &mem_fops},
 -	{2, "kmem",    S_IRUSR | S_IWUSR | S_IRGRP, &kmem_fops},
  	{3, "null",    S_IRUGO | S_IWUGO,           &null_fops},
- #if (defined(CONFIG_ISA) || defined(CONFIG_PCI)) && !defined(__mc68000__)
+ #ifdef CONFIG_DEVPORT
  	{4, "port",    S_IRUSR | S_IWUSR | S_IRGRP, &port_fops},
 Index: linux-2.6/fs/proc/kcore.c
 ===================================================================
@@ -592,18 +589,17 @@
  #include <asm-generic/page.h>
  
  #endif /* __KERNEL__ */
-Index: linux-2.6/include/asm-um/page.h
-===================================================================
---- linux-2.6.orig/include/asm-um/page.h
-+++ linux-2.6/include/asm-um/page.h
-@@ -113,6 +113,7 @@ extern unsigned long uml_physmem;
- 
+--- linux-2.6.21.noarch/include/asm-um/page.h~	2007-05-27 23:05:22.000000000 -0400
++++ linux-2.6.21.noarch/include/asm-um/page.h	2007-05-27 23:05:34.000000000 -0400
+@@ -114,6 +114,8 @@ extern unsigned long uml_physmem;
  extern struct page *arch_validate(struct page *page, gfp_t mask, int order);
  #define HAVE_ARCH_VALIDATE
+ 
 +#define devmem_is_allowed(x) 1
++
+ #include <asm-generic/memory_model.h>
+ #include <asm-generic/page.h>
  
- extern void arch_free_page(struct page *page, int order);
- #define HAVE_ARCH_FREE_PAGE
 Index: linux-2.6/include/asm-v850/page.h
 ===================================================================
 --- linux-2.6.orig/include/asm-v850/page.h

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.53
retrieving revision 1.54
diff -u -r1.53 -r1.54
--- linux-2.6-execshield.patch	10 Jun 2007 01:28:50 -0000	1.53
+++ linux-2.6-execshield.patch	10 Jul 2007 16:14:59 -0000	1.54
@@ -16,19 +16,18 @@
  	/* If the model name is still unset, do table lookup. */
  	if ( !c->x86_model_id[0] ) {
  		char *p;
-Index: linux-2.6/arch/i386/kernel/process.c
-===================================================================
---- linux-2.6.orig/arch/i386/kernel/process.c
-+++ linux-2.6/arch/i386/kernel/process.c
-@@ -647,6 +647,8 @@ struct task_struct fastcall * __switch_t
+--- linux-2.6.21.noarch/arch/i386/kernel/process.c~	2007-05-27 22:27:45.000000000 -0400
++++ linux-2.6.21.noarch/arch/i386/kernel/process.c	2007-05-27 22:28:22.000000000 -0400
+@@ -649,7 +649,8 @@ struct task_struct fastcall * __switch_t
  	/* never put a printk in __switch_to... printk() calls wake_up*() indirectly */
  
  	__unlazy_fpu(prev_p);
+-
 +	if (next_p->mm)
 +		load_user_cs_desc(cpu, next_p->mm);
  
- 	/*
- 	 * Reload esp0.
+ 	/* we're going to use this soon, after a few expensive things */
+ 	if (next_p->fpu_counter > 5)
 @@ -907,3 +909,60 @@ unsigned long arch_align_stack(unsigned 
  		sp -= get_random_int() % 8192;
  	return sp & ~0xf;
@@ -121,49 +120,37 @@
  #include <linux/module.h>
  
  #include <asm/cpufeature.h>
-@@ -118,7 +118,8 @@ static struct vm_operations_struct sysca
- extern void SYSENTER_RETURN;
- 
- /* Setup a VMA at program startup for the vsyscall page */
--int arch_setup_additional_pages(struct linux_binprm *bprm, int exstack)
-+int arch_setup_additional_pages(struct linux_binprm *bprm, int exstack,
-+				unsigned long start_code, unsigned long interp_map_address)
- {
- 	struct vm_area_struct *vma;
- 	struct mm_struct *mm = current->mm;
-@@ -126,7 +127,7 @@ int arch_setup_additional_pages(struct l
- 	int ret;
- 
- 	down_write(&mm->mmap_sem);
--	addr = get_unmapped_area(NULL, 0, PAGE_SIZE, 0, 0);
-+	addr = get_unmapped_area_prot(NULL, 0, PAGE_SIZE, 0, 0, 1);
- 	if (IS_ERR_VALUE(addr)) {
- 		ret = addr;
- 		goto up_fail;
-Index: linux-2.6/kernel/sysctl.c
-===================================================================
---- linux-2.6.orig/kernel/sysctl.c
-+++ linux-2.6/kernel/sysctl.c
-@@ -77,6 +77,26 @@
- extern int percpu_pagelist_fraction;
- extern int compat_log;
+@@ -284,7 +284,7 @@ int arch_setup_additional_pages(struct l
+ 	if (compat)
+ 		addr = VDSO_HIGH_BASE;
+ 	else {
+-		addr = get_unmapped_area(NULL, 0, PAGE_SIZE, 0, 0);
++		addr = get_unmapped_area_prot(NULL, 0, PAGE_SIZE, 0, 0, 1);
+ 		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;
+ extern int sysctl_stat_interval;
  
 +int exec_shield = (1<<0);
 +/* exec_shield is a bitmask:
-+          0: off; vdso at STACK_TOP, 1 page below TASK_SIZE
-+   (1<<0) 1: on [also on if !=0]
-+   (1<<1) 2: force noexecstack regardless of PT_GNU_STACK
-+   The old settings
-+   (1<<2) 4: vdso just below .text of main (unless too low)
-+   (1<<3) 8: vdso just below .text of PT_INTERP (unless too low)
-+   are ignored because the vdso is placed completely randomly
-+*/
++ * 0: off; vdso at STACK_TOP, 1 page below TASK_SIZE
++ * (1<<0) 1: on [also on if !=0]
++ * (1<<1) 2: force noexecstack regardless of PT_GNU_STACK
++ * The old settings
++ * (1<<2) 4: vdso just below .text of main (unless too low)
++ * (1<<3) 8: vdso just below .text of PT_INTERP (unless too low)
++ * are ignored because the vdso is placed completely randomly
++ */
 +
 +static int __init setup_exec_shield(char *str)
 +{
-+        get_option (&str, &exec_shield);
++	get_option (&str, &exec_shield);
 +
-+        return 1;
++	return 1;
 +}
 +
 +__setup("exec-shield=", setup_exec_shield);
@@ -233,41 +220,38 @@
  		return prev;
  	}
  
-@@ -933,7 +940,7 @@ unsigned long do_mmap_pgoff(struct file 
+@@ -933,7 +940,8 @@ unsigned long do_mmap_pgoff(struct file 
  	/* Obtain the address to map to. we verify (or select) it and ensure
  	 * that it represents a valid section of the address space.
  	 */
 -	addr = get_unmapped_area(file, addr, len, pgoff, flags);
-+	addr = get_unmapped_area_prot(file, addr, len, pgoff, flags, prot & PROT_EXEC);
++	addr = get_unmapped_area_prot(file, addr, len, pgoff, flags,
++		prot & PROT_EXEC);
  	if (addr & ~PAGE_MASK)
  		return addr;
  
-@@ -1353,16 +1360,21 @@ void arch_unmap_area_topdown(struct mm_s
- 		mm->free_area_cache = mm->mmap_base;
+@@ -1370,13 +1370,17 @@ void arch_unmap_area_topdown(struct mm_s
  }
  
-+
  unsigned long
 -get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,
 -		unsigned long pgoff, unsigned long flags)
 +get_unmapped_area_prot(struct file *file, unsigned long addr, unsigned long len,
 +		unsigned long pgoff, unsigned long flags, int exec)
  {
- 	unsigned long ret;
- 
- 	if (!(flags & MAP_FIXED)) {
- 		unsigned long (*get_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
+ 	unsigned long (*get_area)(struct file *, unsigned long,
+ 				  unsigned long, unsigned long, unsigned long);
  
--		get_area = current->mm->get_unmapped_area;
-+		if (exec && current->mm->get_unmapped_exec_area)
-+			get_area = current->mm->get_unmapped_exec_area;
-+		else
-+			get_area = current->mm->get_unmapped_area;
-+
- 		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,71 @@ get_unmapped_area(struct file *file, uns
+-	get_area = current->mm->get_unmapped_area;
++	if (exec && current->mm->get_unmapped_exec_area)
++		get_area = current->mm->get_unmapped_exec_area;
++	else
++		get_area = current->mm->get_unmapped_area;
++
+ 	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
  	return addr;
  }
  
@@ -318,7 +302,9 @@
 +			 * as much as possible:
 +			 */
 +			if (addr >= 0x01000000) {
-+				tmp = randomize_range(0x01000000, PAGE_ALIGN(max(mm->start_brk, (unsigned long)0x08000000)), len);
++				tmp = randomize_range(0x01000000,
++					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))
@@ -393,7 +379,7 @@
 ===================================================================
 --- linux-2.6.orig/arch/i386/kernel/traps.c
 +++ linux-2.6/arch/i386/kernel/traps.c
-@@ -638,7 +638,82 @@ DO_ERROR(10, SIGSEGV, "invalid TSS", inv
+@@ -638,7 +638,84 @@ 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)
@@ -440,8 +426,10 @@
 +		 * we won't hit this branch next time around.
 +		 */
 +		if (print_fatal_signals >= 2) {
-+			printk("#GPF fixup (%ld[seg:%lx]) at %08lx, CPU#%d.\n", error_code, error_code/8, regs->eip, smp_processor_id());
-+			printk(" exec_limit: %08lx, user_cs: %08lx/%08lx, CPU_cs: %08lx/%08lx.\n", current->mm->context.exec_limit, desc1->a, desc1->b, desc2->a, desc2->b);
++			printk(KERN_ERR "#GPF fixup (%ld[seg:%lx]) at %08lx, CPU#%d.\n",
++				error_code, error_code/8, regs->eip, smp_processor_id());
++			printk(KERN_ERR "exec_limit: %08lx, user_cs: %08lx/%08lx, CPU_cs: %08lx/%08lx.\n",
++				current->mm->context.exec_limit, desc1->a, desc1->b, desc2->a, desc2->b);
 +		}
 +		load_user_cs_desc(cpu, current->mm);
 +		return 1;
@@ -485,15 +473,15 @@
  
  	/*
  	 * Perform the lazy TSS's I/O bitmap copy. If the TSS has an
-@@ -672,7 +748,6 @@ fastcall void __kprobes do_general_prote
+@@ -676,7 +676,6 @@ fastcall void __kprobes do_general_prote
  		put_cpu();
  		return;
  	}
 -	put_cpu();
  
- 	current->thread.error_code = error_code;
- 	current->thread.trap_no = 13;
-@@ -683,17 +758,31 @@ fastcall void __kprobes do_general_prote
+ 	if (regs->eflags & VM_MASK)
+ 		goto gp_in_vm86;
+@@ -683,6 +683,22 @@ fastcall void __kprobes do_general_prote
  	if (!user_mode(regs))
  		goto gp_in_kernel;
  
@@ -505,13 +493,18 @@
 +		return;
 +
 +	if (print_fatal_signals) {
-+		printk("#GPF(%ld[seg:%lx]) at %08lx, CPU#%d.\n", error_code, error_code/8, regs->eip, smp_processor_id());
-+		printk(" exec_limit: %08lx, user_cs: %08lx/%08lx.\n", current->mm->context.exec_limit, current->mm->context.user_cs.a, current->mm->context.user_cs.b);
++		printk(KERN_ERR "#GPF(%ld[seg:%lx]) at %08lx, CPU#%d.\n", error_code,
++			error_code/8, regs->eip, smp_processor_id());
++		printk(KERN_ERR "exec_limit: %08lx, user_cs: %08lx/%08lx.\n",
++			current->mm->context.exec_limit,
++			current->mm->context.user_cs.a,
++			current->mm->context.user_cs.b);
 +	}
 +
  	current->thread.error_code = error_code;
  	current->thread.trap_no = 13;
  	force_sig(SIGSEGV, current);
+@@ -705,11 +705,13 @@ fastcall void __kprobes do_general_prote
  	return;
  
  gp_in_vm86:
@@ -523,8 +516,8 @@
  gp_in_kernel:
 +	put_cpu();
  	if (!fixup_exception(regs)) {
- 		if (notify_die(DIE_GPF, "general protection fault", regs,
- 				error_code, 13, SIGSEGV) == NOTIFY_STOP)
+ 		current->thread.error_code = error_code;
+ 		current->thread.trap_no = 13;
 Index: linux-2.6/arch/i386/mm/init.c
 ===================================================================
 --- linux-2.6.orig/arch/i386/mm/init.c
@@ -546,14 +539,15 @@
  	} else
  		return -EINVAL;
  
-@@ -514,7 +515,10 @@ void __init paging_init(void)
+@@ -514,7 +515,11 @@ void __init paging_init(void)
  	set_nx();
  	if (nx_enabled)
  		printk("NX (Execute Disable) protection: active\n");
 +	else
  #endif
 +	if (exec_shield)
-+		printk("Using x86 segment limits to approximate NX protection\n");
++		printk(KERN_INFO "Using x86 segment limits to approximate "
++			"NX protection\n");
  
  	pagetable_init();
  
@@ -594,11 +588,12 @@
  #include <asm/uaccess.h>
  #include <asm/processor.h>
  #include <asm/tlbflush.h>
-@@ -130,6 +132,12 @@ __change_page_attr(struct page *page, pg
+@@ -130,6 +132,13 @@ __change_page_attr(struct page *page, pg
  	BUG_ON(PageHighMem(page));
  	address = (unsigned long)page_address(page);
  
-+	if (address >= (unsigned long)__start_rodata && address <= (unsigned long)__end_rodata &&
++	if (address >= (unsigned long)__start_rodata &&
++		address <= (unsigned long)__end_rodata &&
 +		(pgprot_val(prot) & _PAGE_RW)) {
 +		pgprot_val(prot) &= ~(_PAGE_RW);
 +		add_taint(TAINT_MACHINE_CHECK);
@@ -620,20 +615,6 @@
  {
  	unsigned long pgoff = (eppnt->p_vaddr) & ~IA32_PAGE_MASK;
  
-Index: linux-2.6/arch/powerpc/kernel/vdso.c
-===================================================================
---- linux-2.6.orig/arch/powerpc/kernel/vdso.c
-+++ linux-2.6/arch/powerpc/kernel/vdso.c
-@@ -218,7 +218,8 @@ static struct vm_operations_struct vdso_
-  * vDSO and insert it into the mm struct tree
-  */
- int arch_setup_additional_pages(struct linux_binprm *bprm,
--				int executable_stack)
-+				int executable_stack, unsigned long start_code,
-+				unsigned long interp_map_address)
- {
- 	struct mm_struct *mm = current->mm;
- 	struct vm_area_struct *vma;
 Index: linux-2.6/arch/x86_64/ia32/ia32_binfmt.c
 ===================================================================
 --- linux-2.6.orig/arch/x86_64/ia32/ia32_binfmt.c
@@ -656,30 +637,6 @@
  } while (0)
  
  /* Override some function names */
-@@ -311,7 +307,7 @@ static void elf32_init(struct pt_regs *)
- 
- #define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1
- #define arch_setup_additional_pages syscall32_setup_pages
--extern int syscall32_setup_pages(struct linux_binprm *, int exstack);
-+extern int syscall32_setup_pages(struct linux_binprm *, int exstack, unsigned long start_code, unsigned long interp_map_address);
- 
- #include "../../../fs/binfmt_elf.c" 
- 
-Index: linux-2.6/arch/x86_64/ia32/syscall32.c
-===================================================================
---- linux-2.6.orig/arch/x86_64/ia32/syscall32.c
-+++ linux-2.6/arch/x86_64/ia32/syscall32.c
-@@ -42,7 +42,9 @@ static struct vm_operations_struct sysca
- struct linux_binprm;
- 
- /* Setup a VMA at program startup for the vsyscall page */
--int syscall32_setup_pages(struct linux_binprm *bprm, int exstack)
-+int syscall32_setup_pages(struct linux_binprm *bprm, int exstack,
-+			  unsigned long start_code,
-+			  unsigned long interp_map_address)
- {
- 	int npages = (VSYSCALL32_END - VSYSCALL32_BASE) >> PAGE_SHIFT;
- 	struct vm_area_struct *vma;
 Index: linux-2.6/arch/x86_64/kernel/process.c
 ===================================================================
 --- linux-2.6.orig/arch/x86_64/kernel/process.c
@@ -765,7 +722,7 @@
 ===================================================================
 --- linux-2.6.orig/arch/x86_64/mm/mmap.c
 +++ linux-2.6/arch/x86_64/mm/mmap.c
-@@ -1,29 +1,87 @@
+@@ -1,29 +1,88 @@
 -/* Copyright 2005 Andi Kleen, SuSE Labs.
 - * Licensed under GPL, v.2
 +/*
@@ -796,7 +753,7 @@
 +
 +#include <linux/personality.h>
  #include <linux/mm.h>
--#include <linux/sched.h>
+ #include <linux/sched.h>
  #include <linux/random.h>
 -#include <asm/ia32.h>
  
@@ -896,10 +853,8 @@
  }
  
  /*
-Index: linux-2.6/fs/binfmt_elf.c
-===================================================================
---- linux-2.6.orig/fs/binfmt_elf.c
-+++ linux-2.6/fs/binfmt_elf.c
+--- 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);
@@ -907,8 +862,8 @@
 -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);
  
- #ifndef elf_addr_t
- #define elf_addr_t unsigned long
+ /*
+  * If we don't support core dumping, then supply a NULL so we
 @@ -83,7 +83,7 @@ static struct linux_binfmt elf_format = 
  		.min_coredump	= ELF_EXEC_PAGESIZE
  };
@@ -1069,9 +1024,9 @@
  	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)
-@@ -710,6 +759,11 @@ static int load_elf_binary(struct linux_
+@@ -767,6 +767,11 @@ static int load_elf_binary(struct linux_
+ 			break;
  		}
- 	have_pt_gnu_stack = (i < loc->elf_ex.e_phnum);
  
 +	if (current->personality == PER_LINUX && (exec_shield & 2)) {
 +		executable_stack = EXSTACK_DISABLE_X;
@@ -1081,7 +1036,7 @@
  	/* Some simple consistency checks for the interpreter */
  	if (elf_interpreter) {
  		interpreter_type = INTERPRETER_ELF | INTERPRETER_AOUT;
-@@ -762,6 +816,15 @@ static int load_elf_binary(struct linux_
+@@ -824,6 +824,15 @@ static int load_elf_binary(struct linux_
  	if (retval)
  		goto out_free_dentry;
  
@@ -1097,7 +1052,7 @@
  	/* Discard our unneeded old files struct */
  	if (files) {
  		put_files_struct(files);
-@@ -779,7 +842,8 @@ static int load_elf_binary(struct linux_
+@@ -850,7 +850,8 @@ static int load_elf_binary(struct linux_
  	/* Do this immediately, since STACK_TOP as used in setup_arg_pages
  	   may depend on the personality.  */
  	SET_PERSONALITY(loc->elf_ex, ibcs2_interpreter);
@@ -1107,14 +1062,14 @@
  		current->personality |= READ_IMPLIES_EXEC;
  
  	if (!(current->personality & ADDR_NO_RANDOMIZE) && randomize_va_space)
-@@ -800,9 +864,8 @@ static int load_elf_binary(struct linux_
+@@ -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.
++	 * the correct location in memory.
 +	 */
  	for(i = 0, elf_ppnt = elf_phdata;
  	    i < loc->elf_ex.e_phnum; i++, elf_ppnt++) {
@@ -1161,8 +1116,8 @@
  
  #ifdef ARCH_HAS_SETUP_ADDITIONAL_PAGES
 -	retval = arch_setup_additional_pages(bprm, executable_stack);
-+	retval = arch_setup_additional_pages(bprm, executable_stack,
-+			start_code, interp_map_addr);
++	retval = arch_setup_additional_pages(bprm, executable_stack);
++
  	if (retval < 0) {
  		send_sig(SIGKILL, current, 0);
 -		goto out;
@@ -1186,21 +1141,19 @@
  	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.
-Index: linux-2.6/fs/proc/array.c
-===================================================================
---- linux-2.6.orig/fs/proc/array.c
-+++ linux-2.6/fs/proc/array.c
-@@ -403,8 +403,12 @@ static int do_task_stat(struct task_stru
+--- 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
+ 	}
  	rcu_read_unlock();
- 	mutex_unlock(&tty_mutex);
  
 -	if (!whole || num_threads<2)
 -		wchan = get_wchan(task);
-+	if (!whole || num_threads<2) {
++	if (!whole || num_threads < 2) {
 +		wchan = 0;
 +		if (current->uid == task->uid || current->euid == task->uid ||
-+				capable(CAP_SYS_NICE))
-+			wchan = get_wchan(task);
++			capable(CAP_SYS_NICE))
++				wchan = get_wchan(task);
 +	}
  	if (!whole) {
  		min_flt = task->min_flt;
@@ -1218,10 +1171,10 @@
  #ifdef CONFIG_NUMA
  	REG("numa_maps",  S_IRUGO, numa_maps),
  #endif
-@@ -1768,7 +1768,7 @@ static struct pid_entry tgid_base_stuff[
- 	REG("mounts",     S_IRUGO, mounts),
+@@ -2018,7 +2018,7 @@ static const struct pid_entry tgid_base_
  	REG("mountstats", S_IRUSR, mountstats),
  #ifdef CONFIG_MMU
+ 	REG("clear_refs", S_IWUSR, clear_refs),
 -	REG("smaps",      S_IRUGO, smaps),
 +	REG("smaps",      S_IRUSR, smaps),
  #endif
@@ -1236,10 +1189,10 @@
  #ifdef CONFIG_NUMA
  	REG("numa_maps", S_IRUGO, numa_maps),
  #endif
-@@ -2042,7 +2042,7 @@ static struct pid_entry tid_base_stuff[]
- 	LNK("exe",       exe),
+@@ -2301,7 +2301,7 @@ static const struct pid_entry tid_base_s
  	REG("mounts",    S_IRUGO, mounts),
  #ifdef CONFIG_MMU
+ 	REG("clear_refs", S_IWUSR, clear_refs),
 -	REG("smaps",     S_IRUGO, smaps),
 +	REG("smaps",     S_IRUSR, smaps),
  #endif
@@ -1345,20 +1298,8 @@
  #else /* __ASSEMBLY__ */
  
  /*
-Index: linux-2.6/include/asm-i386/elf.h
-===================================================================
---- linux-2.6.19.noarch/include/asm-i386/elf.h~	2007-01-29 11:28:35.000000000 -0500
-+++ linux-2.6.19.noarch/include/asm-i386/elf.h	2007-01-29 11:32:29.000000000 -0500
-@@ -157,7 +157,8 @@ extern void __kernel_vsyscall;
- #define ARCH_HAS_SETUP_ADDITIONAL_PAGES
- struct linux_binprm;
- extern int arch_setup_additional_pages(struct linux_binprm *bprm,
--                                       int executable_stack);
-+                                       int executable_stack, unsigned long start_code,
-+                                       unsigned long interp_map_address);
- #endif
- 
- extern unsigned int vdso_enabled;
+--- linux-2.6.21.noarch/include/asm-i386/elf.h~	2007-05-27 18:54:47.000000000 -0400
++++ linux-2.6.21.noarch/include/asm-i386/elf.h	2007-05-27 18:55:11.000000000 -0400
 @@ -215,4 +216,7 @@ do {									      \
  
  #endif
@@ -1387,18 +1328,6 @@
  	void *vdso;
  } mm_context_t;
  
-Index: linux-2.6/include/asm-i386/pgalloc.h
-===================================================================
---- linux-2.6.orig/include/asm-i386/pgalloc.h
-+++ linux-2.6/include/asm-i386/pgalloc.h
-@@ -2,6 +2,7 @@
- #define _I386_PGALLOC_H
- 
- #include <asm/fixmap.h>
-+#include <asm/desc.h>
- #include <linux/threads.h>
- #include <linux/mm.h>		/* for struct page */
- 
 Index: linux-2.6/include/asm-i386/processor.h
 ===================================================================
 --- linux-2.6.orig/include/asm-i386/processor.h
@@ -1440,36 +1369,20 @@
  /*
   * This file contains the functions and defines necessary to allocate
   * page tables.
-Index: linux-2.6/include/asm-powerpc/elf.h
-===================================================================
---- linux-2.6.orig/include/asm-powerpc/elf.h
-+++ linux-2.6/include/asm-powerpc/elf.h
-@@ -272,7 +272,8 @@ extern int ucache_bsize;
- #define ARCH_HAS_SETUP_ADDITIONAL_PAGES
- struct linux_binprm;
- extern int arch_setup_additional_pages(struct linux_binprm *bprm,
--				       int executable_stack);
-+				       int executable_stack, unsigned long start_code,
-+					   unsigned long interp_map_address);
- #define VDSO_AUX_ENT(a,b) NEW_AUX_ENT(a,b);
- 
- /*
-Index: linux-2.6/include/asm-powerpc/pgalloc.h
-===================================================================
---- linux-2.6.orig/include/asm-powerpc/pgalloc.h
-+++ linux-2.6/include/asm-powerpc/pgalloc.h
-@@ -26,6 +26,11 @@ extern kmem_cache_t *pgtable_cache[];
- #define HUGEPTE_CACHE_NUM 2
- #endif
+--- linux-2.6.21.noarch/include/asm-powerpc/pgalloc.h~	2007-05-27 18:56:56.000000000 -0400
++++ linux-2.6.21.noarch/include/asm-powerpc/pgalloc.h	2007-05-27 18:57:04.000000000 -0400
+@@ -2,6 +2,11 @@
+ #define _ASM_POWERPC_PGALLOC_H
+ #ifdef __KERNEL__
  
 +/* Dummy functions since we don't support execshield on ppc */
 +#define arch_add_exec_range(mm, limit) do { ; } while (0)
 +#define arch_flush_exec_range(mm)      do { ; } while (0)
 +#define arch_remove_exec_range(mm, limit) do { ; } while (0)
 +
- /*
-  * This program is free software; you can redistribute it and/or
-  * modify it under the terms of the GNU General Public License
+ #ifdef CONFIG_PPC64
+ #include <asm/pgalloc-64.h>
+ #else
 Index: linux-2.6/include/asm-ppc/pgalloc.h
 ===================================================================
 --- linux-2.6.orig/include/asm-ppc/pgalloc.h
@@ -1513,13 +1426,11 @@
 +#define arch_remove_exec_range(mm, limit)	do { ; } while (0)
 +
  #endif /* _SPARC_PGALLOC_H */
-Index: linux-2.6/include/asm-sparc64/pgalloc.h
-===================================================================
---- linux-2.6.orig/include/asm-sparc64/pgalloc.h
-+++ linux-2.6/include/asm-sparc64/pgalloc.h
-@@ -68,4 +68,8 @@ static inline void pte_free(struct page 
- 
- #define check_pgt_cache()	do { } while (0)
+--- linux-2.6.21.noarch/include/asm-sparc64/pgalloc.h~	2007-05-27 22:44:38.000000000 -0400
++++ linux-2.6.21.noarch/include/asm-sparc64/pgalloc.h	2007-05-27 22:45:10.000000000 -0400
+@@ -70,4 +70,8 @@ static inline void check_pgt_cache(void)
+ 	quicklist_trim(0, NULL, 25, 16);
+ }
  
 +#define arch_add_exec_range(mm, limit)		do { ; } while (0)
 +#define arch_flush_exec_range(mm)		do { ; } while (0)
@@ -1544,19 +1455,16 @@
  #define pmd_populate_kernel(mm, pmd, pte) \
  		set_pmd(pmd, __pmd(_PAGE_TABLE | __pa(pte)))
  #define pud_populate(mm, pud, pmd) \
-Index: linux-2.6/include/linux/mm.h
-===================================================================
---- linux-2.6.orig/include/linux/mm.h
-+++ linux-2.6/include/linux/mm.h
-@@ -994,7 +994,14 @@
- extern void exit_mmap(struct mm_struct *);
- extern int may_expand_vm(struct mm_struct *mm, unsigned long npages);
+--- linux-2.6.21.noarch/include/linux/mm.h~	2007-05-27 22:45:45.000000000 -0400
++++ linux-2.6.21.noarch/include/linux/mm.h	2007-05-27 22:46:21.000000000 -0400
+@@ -1063,7 +1063,13 @@ extern int install_special_mapping(struc
+ 				   unsigned long addr, unsigned long len,
+ 				   unsigned long flags, struct page **pages);
  
 -extern unsigned long get_unmapped_area(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
 +extern unsigned long get_unmapped_area_prot(struct file *, unsigned long, unsigned long, unsigned long, unsigned long, int);
 +
-+
-+static inline unsigned long get_unmapped_area(struct file * file, unsigned long addr,
++static inline unsigned long get_unmapped_area(struct file *file, unsigned long addr,
 +		unsigned long len, unsigned long pgoff, unsigned long flags)
 +{
 +	return get_unmapped_area_prot(file, addr, len, pgoff, flags, 0);
@@ -1564,15 +1472,6 @@
  
  extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
  	unsigned long len, unsigned long prot,
-@@ -1046,7 +1053,7 @@
- 			  struct file *filp,
- 			  pgoff_t offset,
- 			  unsigned long size);
--void handle_ra_miss(struct address_space *mapping, 
-+void handle_ra_miss(struct address_space *mapping,
- 		    struct file_ra_state *ra, pgoff_t offset);
- unsigned long max_sane_readahead(unsigned long nr);
- 
 Index: linux-2.6/include/linux/resource.h
 ===================================================================
 --- linux-2.6.orig/include/linux/resource.h
@@ -1590,19 +1489,18 @@
  
  /*
   * GPG wants 32kB of mlocked memory, to make sure pass phrases
-Index: linux-2.6/include/linux/sched.h
-===================================================================
---- linux-2.6.orig/include/linux/sched.h
-+++ linux-2.6/include/linux/sched.h
-@@ -87,6 +87,8 @@ struct sched_param {
- 
- struct exec_domain;
+--- linux-2.6.21.noarch/include/linux/sched.h~	2007-05-27 18:57:38.000000000 -0400
++++ linux-2.6.21.noarch/include/linux/sched.h	2007-05-27 18:57:57.000000000 -0400
+@@ -90,6 +90,9 @@ struct exec_domain;
  struct futex_pi_state;
+ struct bio;
+ 
 +extern int exec_shield;
 +extern int print_fatal_signals;
- 
++
  /*
   * List of flags we want to share for kernel threads,
+  * if only because they are not used by them anyway.
 @@ -252,6 +254,10 @@ extern int sysctl_max_map_count;
  extern unsigned long
  arch_get_unmapped_area(struct file *, unsigned long, unsigned long,
@@ -1649,11 +1547,11 @@
 +
 +static void print_fatal_signal(struct pt_regs *regs, int signr)
 +{
-+	printk("%s/%d: potentially unexpected fatal signal %d.\n",
++	printk(KERN_INFO "%s/%d: potentially unexpected fatal signal %d.\n",
 +		current->comm, current->pid, signr);
 +
 +#ifdef __i386__
-+	printk("code at %08lx: ", regs->eip);
++	printk(KERN_INFO "code at %08lx: ", regs->eip);
 +	{
 +		int i;
 +		for (i = 0; i < 16; i++) {
@@ -1734,3 +1632,21 @@
  			ret = new_addr;
  			if (new_addr & ~PAGE_MASK)
  				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
+@@ -1422,10 +1422,12 @@ unsigned long arch_get_unmapped_exec_are
+ 	if (len > TASK_SIZE)
+ 		return -ENOMEM;
+ 
+-	if (!addr && !(flags & MAP_FIXED))
+-		addr = randomize_range(SHLIB_BASE, 0x01000000, len);
++	if (flags & MAP_FIXED)
++		return addr;
+ 
+-	if (addr) {
++	if (!addr) {
++		addr = randomize_range(SHLIB_BASE, 0x01000000, len);
++	} else {
+ 		addr = PAGE_ALIGN(addr);
+ 		vma = find_vma(mm, addr);
+ 		if (TASK_SIZE - len >= addr &&

linux-2.6-input-kill-stupid-messages.patch:

Index: linux-2.6-input-kill-stupid-messages.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-input-kill-stupid-messages.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-input-kill-stupid-messages.patch	30 Oct 2006 02:57:55 -0000	1.3
+++ linux-2.6-input-kill-stupid-messages.patch	10 Jul 2007 16:14:59 -0000	1.4
@@ -1,15 +1,16 @@
---- linux-2.6.17.noarch/drivers/input/keyboard/atkbd.c~	2006-06-26 19:11:36.659767000 -0400
-+++ linux-2.6.17.noarch/drivers/input/keyboard/atkbd.c	2006-06-26 19:12:23.643737000 -0400
-@@ -383,9 +383,13 @@ static irqreturn_t atkbd_interrupt(struc
+--- linux-2.6.21.noarch/drivers/input/keyboard/atkbd.c~	2007-07-06 10:51:04.000000000 -0400
++++ linux-2.6.21.noarch/drivers/input/keyboard/atkbd.c	2007-07-06 10:51:33.000000000 -0400
+@@ -409,10 +409,14 @@ static irqreturn_t atkbd_interrupt(struc
  			goto out;
  		case ATKBD_RET_ACK:
  		case ATKBD_RET_NAK:
 +#if 0
 +			/* Quite a few key switchers and other tools trigger this and it confuses
 +			   people who can do nothing about it */
- 			printk(KERN_WARNING "atkbd.c: Spurious %s on %s. "
- 			       "Some program might be trying access hardware directly.\n",
- 			       data == ATKBD_RET_ACK ? "ACK" : "NAK", serio->phys);
+ 			if (printk_ratelimit())
+ 				printk(KERN_WARNING "atkbd.c: Spurious %s on %s. "
+ 				       "Some program might be trying access hardware directly.\n",
+ 				       data == ATKBD_RET_ACK ? "ACK" : "NAK", serio->phys);
 +#endif
  			goto out;
  		case ATKBD_RET_HANGEUL:

linux-2.6-modsign-include.patch:

Index: linux-2.6-modsign-include.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-modsign-include.patch,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- linux-2.6-modsign-include.patch	28 Feb 2007 17:44:23 -0000	1.4
+++ linux-2.6-modsign-include.patch	10 Jul 2007 16:14:59 -0000	1.5
@@ -160,23 +160,20 @@
  
  #endif /* _ASM_M32R_MODULE_H */
  
-diff --git a/include/asm-m68k/module.h b/include/asm-m68k/module.h
-index c6d75af..ee98908 100644
---- a/include/asm-m68k/module.h
-+++ b/include/asm-m68k/module.h
-@@ -1,7 +1,12 @@
- #ifndef _ASM_M68K_MODULE_H
- #define _ASM_M68K_MODULE_H
- struct mod_arch_specific { };
-+#define MODULES_ARE_ELF32
- #define Elf_Shdr Elf32_Shdr
+--- linux-2.6.21.noarch/include/asm-m68k/module.h~	2007-06-04 17:54:52.000000000 -0400
++++ linux-2.6.21.noarch/include/asm-m68k/module.h	2007-06-04 17:55:12.000000000 -0400
+@@ -14,6 +14,11 @@ struct mod_arch_specific {
  #define Elf_Sym Elf32_Sym
  #define Elf_Ehdr Elf32_Ehdr
+ 
++#define MODULES_ARE_ELF32
 +#define Elf_Rel Elf32_Rel
 +#define Elf_Rela Elf32_Rela
-+#define ELF_R_TYPE(X)	ELF32_R_TYPE(X)
-+#define ELF_R_SYM(X)	ELF32_R_SYM(X)
- #endif /* _ASM_M68K_MODULE_H */
++#define ELF_R_TYPE(X) ELF32_R_TYPE(X)
++#define ELF_R_SYM(X)  ELF32_R_SYM(X)
+ 
+ enum m68k_fixup_type {
+ 	m68k_fixup_memoffset,
 diff --git a/include/asm-mips/module.h b/include/asm-mips/module.h
 index 399d03f..694f979 100644
 --- a/include/asm-mips/module.h

linux-2.6-modsign-verify.patch:

Index: linux-2.6-modsign-verify.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-modsign-verify.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-modsign-verify.patch	13 Feb 2007 19:36:12 -0000	1.1
+++ linux-2.6-modsign-verify.patch	10 Jul 2007 16:14:59 -0000	1.2
@@ -472,14 +472,14 @@
 index dbce132..9d5787d 100644
 --- a/kernel/module.c
 +++ b/kernel/module.c
-@@ -44,6 +44,7 @@ #include <asm/uaccess.h>
+@@ -45,6 +45,7 @@
  #include <asm/semaphore.h>
  #include <asm/cacheflush.h>
  #include <linux/license.h>
 +#include "module-verify.h"
  
- #if 0
- #define DEBUGP printk
+ extern int module_sysfs_initialized;
+ 
 @@ -1591,8 +1592,10 @@ static struct module *load_module(void _
  		goto free_hdr;
  	}

linux-2.6-net-silence-noisy-printks.patch:

Index: linux-2.6-net-silence-noisy-printks.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-net-silence-noisy-printks.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-net-silence-noisy-printks.patch	19 Apr 2007 23:10:09 -0000	1.1
+++ linux-2.6-net-silence-noisy-printks.patch	10 Jul 2007 16:14:59 -0000	1.2
@@ -4,109 +4,39 @@
 
 Signed-off-by: Dave Jones <davej at redhat.com>
 
-diff --git a/net/ipv4/netfilter/ip_conntrack_standalone.c b/net/ipv4/netfilter/ip_conntrack_standalone.c
-index 56b2f75..b2b36c7 100644
---- a/net/ipv4/netfilter/ip_conntrack_standalone.c
-+++ b/net/ipv4/netfilter/ip_conntrack_standalone.c
-@@ -458,11 +458,8 @@ static unsigned int ip_conntrack_local(unsigned int hooknum,
- {
+--- linux-2.6.21.noarch/net/ipv6/netfilter/ip6table_filter.c~	2007-05-27 19:09:07.000000000 -0400
++++ linux-2.6.21.noarch/net/ipv6/netfilter/ip6table_filter.c	2007-05-27 19:09:30.000000000 -0400
+@@ -79,8 +79,6 @@ ip6t_local_out_hook(unsigned int hook,
  	/* root is playing with raw sockets. */
  	if ((*pskb)->len < sizeof(struct iphdr)
--	    || (*pskb)->nh.iph->ihl * 4 < sizeof(struct iphdr)) {
+ 	    || ip_hdrlen(*pskb) < sizeof(struct iphdr)) {
 -		if (net_ratelimit())
--			printk("ipt_hook: happy cracking.\n");
-+	    || (*pskb)->nh.iph->ihl * 4 < sizeof(struct iphdr))
- 		return NF_ACCEPT;
--	}
- 	return ip_conntrack_in(hooknum, pskb, in, out, okfn);
- }
- 
-diff --git a/net/ipv4/netfilter/iptable_filter.c b/net/ipv4/netfilter/iptable_filter.c
-index d1d61e9..acd903e 100644
---- a/net/ipv4/netfilter/iptable_filter.c
-+++ b/net/ipv4/netfilter/iptable_filter.c
-@@ -102,11 +102,8 @@ ipt_local_out_hook(unsigned int hook,
- {
- 	/* root is playing with raw sockets. */
- 	if ((*pskb)->len < sizeof(struct iphdr)
--	    || (*pskb)->nh.iph->ihl * 4 < sizeof(struct iphdr)) {
--		if (net_ratelimit())
--			printk("ipt_hook: happy cracking.\n");
-+	    || (*pskb)->nh.iph->ihl * 4 < sizeof(struct iphdr))
- 		return NF_ACCEPT;
--	}
- 
- 	return ipt_do_table(pskb, hook, in, out, &packet_filter);
- }
-diff --git a/net/ipv4/netfilter/iptable_mangle.c b/net/ipv4/netfilter/iptable_mangle.c
-index 98b66ef..8d7bf96 100644
---- a/net/ipv4/netfilter/iptable_mangle.c
-+++ b/net/ipv4/netfilter/iptable_mangle.c
-@@ -136,11 +136,8 @@ ipt_local_hook(unsigned int hook,
- 
- 	/* root is playing with raw sockets. */
- 	if ((*pskb)->len < sizeof(struct iphdr)
--	    || (*pskb)->nh.iph->ihl * 4 < sizeof(struct iphdr)) {
--		if (net_ratelimit())
--			printk("ipt_hook: happy cracking.\n");
-+	    || (*pskb)->nh.iph->ihl * 4 < sizeof(struct iphdr))
- 		return NF_ACCEPT;
--	}
- 
- 	/* Save things which could affect route */
- 	mark = (*pskb)->mark;
-diff --git a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c
-index 8f3e92d..4e3d6f6 100644
---- a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c
-+++ b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c
-@@ -199,11 +199,8 @@ static unsigned int ipv4_conntrack_local(unsigned int hooknum,
- {
- 	/* root is playing with raw sockets. */
- 	if ((*pskb)->len < sizeof(struct iphdr)
--	    || (*pskb)->nh.iph->ihl * 4 < sizeof(struct iphdr)) {
--		if (net_ratelimit())
--			printk("ipt_hook: happy cracking.\n");
-+	    || (*pskb)->nh.iph->ihl * 4 < sizeof(struct iphdr))
+-			printk("ip6t_hook: happy cracking.\n");
  		return NF_ACCEPT;
--	}
- 	return nf_conntrack_in(PF_INET, hooknum, pskb);
- }
- 
-diff --git a/net/ipv6/netfilter/ip6table_filter.c b/net/ipv6/netfilter/ip6table_filter.c
-index 112a21d..847e6a4 100644
---- a/net/ipv6/netfilter/ip6table_filter.c
-+++ b/net/ipv6/netfilter/ip6table_filter.c
-@@ -102,11 +102,8 @@ ip6t_local_out_hook(unsigned int hook,
- #if 0
+ 	}
+ #endif
+--- linux-2.6.21.noarch/net/ipv6/netfilter/ip6table_mangle.c~	2007-05-27 19:09:35.000000000 -0400
++++ linux-2.6.21.noarch/net/ipv6/netfilter/ip6table_mangle.c	2007-05-27 19:09:41.000000000 -0400
+@@ -99,8 +99,6 @@ ip6t_local_hook(unsigned int hook,
  	/* root is playing with raw sockets. */
  	if ((*pskb)->len < sizeof(struct iphdr)
--	    || (*pskb)->nh.iph->ihl * 4 < sizeof(struct iphdr)) {
+ 	    || ip_hdrlen(*pskb) < sizeof(struct iphdr)) {
 -		if (net_ratelimit())
 -			printk("ip6t_hook: happy cracking.\n");
-+	    || (*pskb)->nh.iph->ihl * 4 < sizeof(struct iphdr))
  		return NF_ACCEPT;
--	}
+ 	}
  #endif
- 
- 	return ip6t_do_table(pskb, hook, in, out, &packet_filter);
-diff --git a/net/ipv6/netfilter/ip6table_mangle.c b/net/ipv6/netfilter/ip6table_mangle.c
-index 0c468d3..6c80e35 100644
---- a/net/ipv6/netfilter/ip6table_mangle.c
-+++ b/net/ipv6/netfilter/ip6table_mangle.c
-@@ -138,11 +138,8 @@ ip6t_local_hook(unsigned int hook,
- #if 0
+--- linux-2.6.21.noarch/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c~	2007-05-27 19:09:45.000000000 -0400
++++ linux-2.6.21.noarch/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c	2007-05-27 19:09:49.000000000 -0400
+@@ -189,8 +189,6 @@ static unsigned int ipv4_conntrack_local
  	/* root is playing with raw sockets. */
  	if ((*pskb)->len < sizeof(struct iphdr)
--	    || (*pskb)->nh.iph->ihl * 4 < sizeof(struct iphdr)) {
+ 	    || ip_hdrlen(*pskb) < sizeof(struct iphdr)) {
 -		if (net_ratelimit())
--			printk("ip6t_hook: happy cracking.\n");
-+	    || (*pskb)->nh.iph->ihl * 4 < sizeof(struct iphdr))
+-			printk("ipt_hook: happy cracking.\n");
  		return NF_ACCEPT;
--	}
- #endif
- 
- 	/* save source/dest address, mark, hoplimit, flowlabel, priority,  */
-
+ 	}
+ 	return nf_conntrack_in(PF_INET, hooknum, pskb);
 
 
 Remove noisy, easy to trigger (as user even, with sfuzz) printk.

linux-2.6-ondemand-timer.patch:

Index: linux-2.6-ondemand-timer.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-ondemand-timer.patch,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- linux-2.6-ondemand-timer.patch	5 Jul 2007 20:43:43 -0000	1.6
+++ linux-2.6-ondemand-timer.patch	10 Jul 2007 16:14:59 -0000	1.7
@@ -1,333 +1,3 @@
-From davej  Wed Mar 28 19:01:19 2007
-Return-path: <venkatesh.pallipadi at intel.com>
-X-Spam-Checker-Version: SpamAssassin 3.1.8 (2007-02-13) on
-	gelk.kernelslacker.org
-X-Spam-Level: 
-X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham
-	version=3.1.8
-Envelope-to: davej at codemonkey.org.uk
-Delivery-date: Thu, 29 Mar 2007 00:01:12 +0100
-Received: from testure.choralone.org [194.9.77.134]
-	by gelk.kernelslacker.org with IMAP (fetchmail-6.3.6)
-	for <davej at localhost> (single-drop); Wed, 28 Mar 2007 19:01:19 -0400 (EDT)
-Received: from mga01.intel.com ([192.55.52.88])
-	by testure.choralone.org with esmtp (Exim 4.63)
-	(envelope-from <venkatesh.pallipadi at intel.com>)
-	id 1HWh8h-0006J9-Es
-	for davej at codemonkey.org.uk; Thu, 29 Mar 2007 00:01:11 +0100
-Received: from fmsmga001.fm.intel.com ([10.253.24.23])
-  by mga01.intel.com with ESMTP; 28 Mar 2007 16:01:04 -0700
-Received: from linux-os.sc.intel.com ([172.25.110.8])
-  by fmsmga001.fm.intel.com with ESMTP; 28 Mar 2007 16:01:03 -0700
-X-ExtLoop1: 1
-X-IronPort-AV: i="4.14,342,1170662400"; 
-   d="scan'208"; a="221109611:sNHT21096852"
-Received: by linux-os.sc.intel.com (Postfix, from userid 47009)
-	id AADD228006; Wed, 28 Mar 2007 16:00:21 -0700 (PDT)
-Date: Wed, 28 Mar 2007 16:00:21 -0700
-From: Venki Pallipadi <venkatesh.pallipadi at intel.com>
-To: Oleg Nesterov <oleg at tv-sign.ru>
-Cc: linux-kernel <linux-kernel at vger.kernel.org>,
-	akpm at linux-foundation.org, davej at codemonkey.org.uk,
-	johnstul at us.ibm.com, mingo at elte.hu, tglx at linutronix.de,
-	Andi Kleen <ak at suse.de>
-Subject: Re: [PATCH] Add support for deferrable timers (respun-Mar28)
-Message-ID: <20070328230021.GA29774 at linux-os.sc.intel.com>
-References: <200703212353.l2LNrNOj007453 at shell0.pdx.osdl.net> <20070322140532.GA120 at tv-sign.ru> <20070322151817.GA29840 at linux-os.sc.intel.com> <20070322161355.GA160 at tv-sign.ru> <20070327204344.GA21529 at linux-os.sc.intel.com> <20070327211145.GB216 at tv-sign.ru> <20070327215542.GA27408 at linux-os.sc.intel.com> <20070327222227.GA279 at tv-sign.ru>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=us-ascii
-Content-Disposition: inline
-In-Reply-To: <20070327222227.GA279 at tv-sign.ru>
-User-Agent: Mutt/1.4.1i
-Status: RO
-Content-Length: 6118
-Lines: 195
-
-
-Andrew,
-
-Please drop the patch you included yesterday and two incremental patches and
-use the patch below.
-
-This patch is - yesterday's patch + Your tidy cleanup +
-minor changes based on comments from Oleg and Andi. This is a lot
-cleaner (and smaller) than earlier patches.
-
-Thanks,
-Venki
-
-
-Introduce a new flag for timers - deferrable:
-Timers that work normally when system is busy. But, will not cause CPU to
-come out of idle (just to service this timer), when CPU is idle. Instead,
-this timer will be serviced when CPU eventually wakes up with a subsequent
-non-deferrable timer.
-
-The main advantage of this is to avoid unnecessary timer interrupts when
-CPU is idle. If the routine currently called by a timer can wait until next
-event without any issues, this new timer can be used to setup timer event
-for that routine. This, with dynticks, allows CPUs to be lazy, allowing them
-to stay in idle for extended period of time by reducing unnecesary wakeup and
-thereby reducing the power consumption.
-
-This patch:
-Builds this new timer on top of existing timer infrastructure. It uses
-last bit in 'base' pointer of timer_list structure to store this
-deferrable timer flag. __next_timer_interrupt() function
-skips over these deferrable timers when CPU looks for
-next timer event for which it has to wake up.
-
-This is exported by a new interface init_timer_deferrable() that can
-be called in place of regular init_timer().
-
-Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi at intel.com>
-
-Index: new/kernel/timer.c
-===================================================================
---- new.orig/kernel/timer.c	2007-03-22 16:27:44.000000000 -0800
-+++ new/kernel/timer.c	2007-03-28 10:05:38.000000000 -0800
-@@ -74,7 +74,7 @@
- 	tvec_t tv3;
- 	tvec_t tv4;
- 	tvec_t tv5;
--} ____cacheline_aligned_in_smp;
-+} ____cacheline_aligned;
- 
- typedef struct tvec_t_base_s tvec_base_t;
- 
-@@ -82,6 +82,37 @@
- EXPORT_SYMBOL(boot_tvec_bases);
- static DEFINE_PER_CPU(tvec_base_t *, tvec_bases) = &boot_tvec_bases;
- 
-+/*
-+ * Note that all tvec_bases is 2 byte aligned and lower bit of
-+ * base in timer_list is guaranteed to be zero. Use the LSB for
-+ * the new flag to indicate whether the timer is deferrable
-+ */
-+#define TBASE_DEFERRABLE_FLAG		(0x1)
-+
-+/* Functions below help us manage 'deferrable' flag */
-+static inline unsigned int tbase_get_deferrable(tvec_base_t *base)
-+{
-+	return ((unsigned int)(unsigned long)base & TBASE_DEFERRABLE_FLAG);
-+}
-+
-+static inline tvec_base_t *tbase_get_base(tvec_base_t *base)
-+{
-+	return ((tvec_base_t *)((unsigned long)base & ~TBASE_DEFERRABLE_FLAG));
-+}
-+
-+static inline void timer_set_deferrable(struct timer_list *timer)
-+{
-+	timer->base = ((tvec_base_t *)((unsigned long)(timer->base) |
-+	                               TBASE_DEFERRABLE_FLAG));
-+}
-+
-+static inline void
-+timer_set_base(struct timer_list *timer, tvec_base_t *new_base)
-+{
-+	timer->base = (tvec_base_t *)((unsigned long)(new_base) |
-+	                              tbase_get_deferrable(timer->base));
-+}
-+
- /**
-  * __round_jiffies - function to round jiffies to a full second
-  * @j: the time in (absolute) jiffies that should be rounded
-@@ -295,6 +326,13 @@
- }
- EXPORT_SYMBOL(init_timer);
- 
-+void fastcall init_timer_deferrable(struct timer_list *timer)
-+{
-+	init_timer(timer);
-+	timer_set_deferrable(timer);
-+}
-+EXPORT_SYMBOL(init_timer_deferrable);
-+
- static inline void detach_timer(struct timer_list *timer,
- 				int clear_pending)
- {
-@@ -325,10 +363,11 @@
- 	tvec_base_t *base;
- 
- 	for (;;) {
--		base = timer->base;
-+		tvec_base_t *prelock_base = timer->base;
-+		base = tbase_get_base(prelock_base);
- 		if (likely(base != NULL)) {
- 			spin_lock_irqsave(&base->lock, *flags);
--			if (likely(base == timer->base))
-+			if (likely(prelock_base == timer->base))
- 				return base;
- 			/* The timer has migrated to another CPU */
- 			spin_unlock_irqrestore(&base->lock, *flags);
-@@ -365,11 +404,11 @@
- 		 */
- 		if (likely(base->running_timer != timer)) {
- 			/* See the comment in lock_timer_base() */
--			timer->base = NULL;
-+			timer_set_base(timer, NULL);
- 			spin_unlock(&base->lock);
- 			base = new_base;
- 			spin_lock(&base->lock);
--			timer->base = base;
-+			timer_set_base(timer, base);
- 		}
- 	}
- 
-@@ -397,7 +436,7 @@
- 	timer_stats_timer_set_start_info(timer);
-   	BUG_ON(timer_pending(timer) || !timer->function);
- 	spin_lock_irqsave(&base->lock, flags);
--	timer->base = base;
-+	timer_set_base(timer, base);
- 	internal_add_timer(base, timer);
- 	spin_unlock_irqrestore(&base->lock, flags);
- }
-@@ -548,7 +587,7 @@
- 	 * don't have to detach them individually.
- 	 */
- 	list_for_each_entry_safe(timer, tmp, &tv_list, entry) {
--		BUG_ON(timer->base != base);
-+		BUG_ON(tbase_get_base(timer->base) != base);
- 		internal_add_timer(base, timer);
- 	}
- 
-@@ -634,6 +673,9 @@
- 	index = slot = timer_jiffies & TVR_MASK;
- 	do {
- 		list_for_each_entry(nte, base->tv1.vec + slot, entry) {
-+ 			if (tbase_get_deferrable(nte->base))
-+ 				continue;
-+ 
- 			found = 1;
- 			expires = nte->expires;
- 			/* Look at the cascade bucket(s)? */
-@@ -1602,6 +1644,13 @@
- 						cpu_to_node(cpu));
- 			if (!base)
- 				return -ENOMEM;
-+
-+			/* Make sure that tvec_base is 2 byte aligned */
-+			if (tbase_get_deferrable(base)) {
-+				WARN_ON(1);
-+				kfree(base);
-+				return -ENOMEM;
-+			}
- 			memset(base, 0, sizeof(*base));
- 			per_cpu(tvec_bases, cpu) = base;
- 		} else {
-@@ -1643,7 +1692,7 @@
- 	while (!list_empty(head)) {
- 		timer = list_entry(head->next, struct timer_list, entry);
- 		detach_timer(timer, 0);
--		timer->base = new_base;
-+		timer_set_base(timer, new_base);
- 		internal_add_timer(new_base, timer);
- 	}
- }
-Index: new/include/linux/timer.h
-===================================================================
---- new.orig/include/linux/timer.h	2007-03-22 16:27:44.000000000 -0800
-+++ new/include/linux/timer.h	2007-03-28 10:03:14.000000000 -0800
-@@ -37,6 +37,7 @@
- 		TIMER_INITIALIZER(_function, _expires, _data)
- 
- void fastcall init_timer(struct timer_list * timer);
-+void fastcall init_timer_deferrable(struct timer_list *timer);
- 
- static inline void setup_timer(struct timer_list * timer,
- 				void (*function)(unsigned long),
-
-From davej  Wed Mar 21 16:25:31 2007
-Return-Path: <venkatesh.pallipadi at intel.com>
-X-Spam-Checker-Version: SpamAssassin 3.1.8 (2007-02-13) on
-	gelk.kernelslacker.org
-X-Spam-Level: 
-X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00,
-	UNPARSEABLE_RELAY autolearn=ham version=3.1.8
-Received: from pobox.devel.redhat.com [10.11.255.8]
-	by gelk.kernelslacker.org with IMAP (fetchmail-6.3.6)
-	for <davej at localhost> (single-drop); Wed, 21 Mar 2007 16:25:31 -0400 (EDT)
-Received: from pobox.devel.redhat.com ([unix socket])
-	 by pobox.devel.redhat.com (Cyrus v2.2.12-Invoca-RPM-2.2.12-3.RHEL4.1) with LMTPA;
-	 Wed, 21 Mar 2007 16:24:10 -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.devel.redhat.com (8.13.1/8.13.1) with ESMTP id l2LKOAin016801
-	for <davej at pobox.devel.redhat.com>; Wed, 21 Mar 2007 16:24:10 -0400
-Received: from mx1.redhat.com (mx1.redhat.com [172.16.48.31])
-	by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id l2LKO9BO005871
-	for <davej at redhat.com>; Wed, 21 Mar 2007 16:24:09 -0400
-Received: from mga03.intel.com (mga03.intel.com [143.182.124.21])
-	by mx1.redhat.com (8.13.1/8.13.1) with ESMTP id l2LKNs7a016150
-	for <davej at redhat.com>; Wed, 21 Mar 2007 16:24:04 -0400
-Received: from azsmga001.ch.intel.com ([10.2.17.19])
-  by mga03.intel.com with ESMTP; 21 Mar 2007 13:24:03 -0700
-Received: from linux-os.sc.intel.com ([172.25.110.8])
-  by azsmga001.ch.intel.com with ESMTP; 21 Mar 2007 13:24:03 -0700
-X-ExtLoop1: 1
-X-IronPort-AV: i="4.14,309,1170662400"; 
-   d="scan'208"; a="200303186:sNHT18723936"
-Received: by linux-os.sc.intel.com (Postfix, from userid 47009)
-	id 0E5B328006; Wed, 21 Mar 2007 13:23:40 -0700 (PDT)
-Date: Wed, 21 Mar 2007 13:23:40 -0700
-From: Venkatesh Pallipadi <venkatesh.pallipadi at intel.com>
-To: Andrew Morton <akpm at osdl.org>
-Cc: linux-kernel <linux-kernel at vger.kernel.org>, Dave Jones <davej at redhat.com>,
-        tglx at linutronix.de
-Subject: [PATCH 2/2] Export deferrable timer through workqueue and use it in ondemand governor
-Message-ID: <20070321202339.GB29367 at linux-os.sc.intel.com>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=us-ascii
-Content-Disposition: inline
-User-Agent: Mutt/1.4.1i
-X-RedHat-Spam-Score: -1.137 
-Status: RO
-Content-Length: 1509
-Lines: 40
-
-
-
-Add a new deferrable delayed work init. This can be used to schedule work
-that are 'unimportant' when CPU is idle and can be called later, when CPU
-eventually comes out of idle.
-
-Use this init in cpufreq ondemand governor.
- 
-Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi at intel.com>
-
-Index: new/drivers/cpufreq/cpufreq_ondemand.c
-===================================================================
---- new.orig/drivers/cpufreq/cpufreq_ondemand.c	2007-03-21 09:16:52.000000000 -0800
-+++ new/drivers/cpufreq/cpufreq_ondemand.c	2007-03-21 09:18:08.000000000 -0800
-@@ -470,7 +470,7 @@
- 	dbs_info->enable = 1;
- 	ondemand_powersave_bias_init();
- 	dbs_info->sample_type = DBS_NORMAL_SAMPLE;
--	INIT_DELAYED_WORK(&dbs_info->work, do_dbs_timer);
-+	INIT_DELAYED_WORK_DEF(&dbs_info->work, do_dbs_timer);
- 	queue_delayed_work_on(dbs_info->cpu, kondemand_wq, &dbs_info->work,
- 	                      delay);
- }
-Index: new/include/linux/workqueue.h
-===================================================================
---- new.orig/include/linux/workqueue.h	2007-03-21 09:16:52.000000000 -0800
-+++ new/include/linux/workqueue.h	2007-03-21 09:18:08.000000000 -0800
-@@ -115,6 +115,12 @@
- 		init_timer(&(_work)->timer);			\
- 	} while (0)
- 
-+#define INIT_DELAYED_WORK_DEF(_work, _func)			\
-+	do {							\
-+		INIT_WORK(&(_work)->work, (_func));		\
-+		init_timer_deferrable(&(_work)->timer);		\
-+	} while (0)
-+
- #define INIT_DELAYED_WORK_NAR(_work, _func)			\
- 	do {							\
- 		INIT_WORK_NAR(&(_work)->work, (_func));		\
-
 
 Userspace governor registers a frequency change notifier at init time, even
 when no CPU is set to userspace governor. Make it register only when

linux-2.6-serial-460800.patch:

Index: linux-2.6-serial-460800.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-serial-460800.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-serial-460800.patch	2 Aug 2006 20:55:18 -0000	1.1
+++ linux-2.6-serial-460800.patch	10 Jul 2007 16:14:59 -0000	1.2
@@ -38,13 +38,13 @@
  
  	switch (termios->c_cflag & CSIZE) {
  	case CS5:
-@@ -1697,7 +1708,8 @@
+@@ -2034,7 +2034,8 @@ serial8250_set_termios(struct uart_port 
  	/*
  	 * Ask the core to calculate the divisor for us.
  	 */
--	baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16); 
+-	baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
 +	max_baud = (up->port.type == PORT_16C950 ? port->uartclk/4 : port->uartclk/16);
-+	baud = uart_get_baud_rate(port, termios, old, 0, max_baud); 
++	baud = uart_get_baud_rate(port, termios, old, 0, max_baud);
  	quot = serial8250_get_divisor(port, baud);
  
  	/*
@@ -52,7 +52,7 @@
  	 */
  	spin_lock_irqsave(&up->port.lock, flags);
  
-+	/* 
++	/*
 +	 * 16C950 supports additional prescaler ratios between 1:16 and 1:4
 +	 * thus increasing max baud rate to uartclk/4.
 +	 */
@@ -64,7 +64,7 @@
 +		else
 +			serial_icr_write(up, UART_TCR, 0);
 +	}
-+	
++
  	/*
  	 * Update the per-port timeout.
  	 */

linux-2.6-softlockup-disable.patch:

Index: linux-2.6-softlockup-disable.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-softlockup-disable.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-softlockup-disable.patch	30 Jan 2007 14:50:14 -0000	1.3
+++ linux-2.6-softlockup-disable.patch	10 Jul 2007 16:14:59 -0000	1.4
@@ -1,5 +1,10 @@
---- linux-2.6.15.noarch/init/main.c~	2006-03-05 00:45:51.000000000 -0500
-+++ linux-2.6.15.noarch/init/main.c	2006-03-05 00:49:41.000000000 -0500
+It's useful sometimes to disable the softlockup checker at boottime.
+Especially if it triggers during a distro install.
+
+Signed-off-by: Dave Jones <davej at redhat.com>
+
+--- linux-2.6/init/main.c~	2006-03-05 00:45:51.000000000 -0500
++++ linux-2.6/init/main.c	2006-03-05 00:49:41.000000000 -0500
 @@ -732,6 +732,15 @@ static void __init do_basic_setup(void)
  	do_initcalls();
  }
@@ -26,3 +31,14 @@
  }
  
  static void run_init_process(char *init_filename)
+--- linux-2.6.21.noarch/Documentation/kernel-parameters.txt~	2007-06-11 23:51:00.000000000 -0400
++++ linux-2.6.21.noarch/Documentation/kernel-parameters.txt	2007-06-11 23:52:51.000000000 -0400
+@@ -1229,6 +1229,8 @@ and is between 256 and 4096 characters. 
+ 
+ 	nosmp		[SMP] Tells an SMP kernel to act as a UP kernel.
+ 
++	nosoftlockup	[KNL] Disable the soft-lockup detector.
++
+ 	nosync		[HW,M68K] Disables sync negotiation for all devices.
+ 
+ 	notsc		[BUGS=IA-32] Disable Time Stamp Counter

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.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- linux-2.6-squashfs.patch	9 Mar 2007 00:28:12 -0000	1.19
+++ linux-2.6-squashfs.patch	10 Jul 2007 16:14:59 -0000	1.20
@@ -2388,8 +2388,8 @@
 +{
 +	struct squashfs_inode_info *ei = foo;
 +
-+	if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
-+							SLAB_CTOR_CONSTRUCTOR)
++
++
 +		inode_init_once(&ei->vfs_inode);
 +}
 + 

linux-2.6-unexport-symbols.patch:

Index: linux-2.6-unexport-symbols.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-unexport-symbols.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6-unexport-symbols.patch	27 Jun 2006 00:39:13 -0000	1.2
+++ linux-2.6-unexport-symbols.patch	10 Jul 2007 16:14:59 -0000	1.3
@@ -1,14 +1,13 @@
 No external modules should be touching these symbols.
 If they are, they are broken.
 
-diff -urNp --exclude-from=/home/davej/.exclude linux-3022/fs/open.c linux-10000/fs/open.c
---- linux-3022/fs/open.c
-+++ linux-10000/fs/open.c
-@@ -976,7 +976,6 @@ out_error:
- 	fd = error;
- 	goto out;
+--- linux-2.6.21.noarch/fs/open.c~	2007-05-27 23:20:25.000000000 -0400
++++ linux-2.6.21.noarch/fs/open.c	2007-05-27 23:20:32.000000000 -0400
+@@ -987,7 +987,6 @@ asmlinkage long sys_open(const char __us
+ 	prevent_tail_call(ret);
+ 	return ret;
  }
 -EXPORT_SYMBOL_GPL(sys_open);
  
- #ifndef __alpha__
- 
+ asmlinkage long sys_openat(int dfd, const char __user *filename, int flags,
+ 			   int mode)

linux-2.6-vm-silence-atomic-alloc-failures.patch:

Index: linux-2.6-vm-silence-atomic-alloc-failures.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-vm-silence-atomic-alloc-failures.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6-vm-silence-atomic-alloc-failures.patch	12 Jan 2006 23:52:50 -0000	1.2
+++ linux-2.6-vm-silence-atomic-alloc-failures.patch	10 Jul 2007 16:15:00 -0000	1.3
@@ -1,10 +1,10 @@
 Atomic failures aren't too interesting.
 
---- linux-2.6.15/include/linux/gfp.h~	2006-01-12 18:48:46.000000000 -0500
-+++ linux-2.6.15/include/linux/gfp.h	2006-01-12 18:48:57.000000000 -0500
+--- linux-2.6.21.noarch/include/linux/gfp.h~	2007-05-27 23:21:35.000000000 -0400
++++ linux-2.6.21.noarch/include/linux/gfp.h	2007-05-27 23:21:51.000000000 -0400
 @@ -58,7 +58,7 @@ struct vm_area_struct;
- 			__GFP_NOMEMALLOC|__GFP_HARDWALL)
- 
+ /* This equals 0, but use constants in case they ever change */
+ #define GFP_NOWAIT	(GFP_ATOMIC & ~__GFP_HIGH)
  /* GFP_ATOMIC means both !wait (__GFP_WAIT not set) and use emergency pool */
 -#define GFP_ATOMIC	(__GFP_HIGH)
 +#define GFP_ATOMIC	(__GFP_HIGH | __GFP_NOWARN)

linux-2.6-wakeups-hdaps.patch:

Index: linux-2.6-wakeups-hdaps.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-wakeups-hdaps.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-wakeups-hdaps.patch	15 May 2007 20:48:13 -0000	1.1
+++ linux-2.6-wakeups-hdaps.patch	10 Jul 2007 16:15:00 -0000	1.2
@@ -21,7 +21,7 @@
  static DEVICE_ATTR(position, 0444, hdaps_position_show, NULL);
  static DEVICE_ATTR(variance, 0444, hdaps_variance_show, NULL);
  static DEVICE_ATTR(temp1, 0444, hdaps_temp1_show, NULL);
-@@ -570,10 +582,17 @@ static int __init hdaps_init(void)
+@@ -584,10 +584,17 @@ static int __init hdaps_init(void)
  	/* initial calibrate for the input device */
  	hdaps_calibrate();
  
@@ -32,7 +32,7 @@
 +
  	/* initialize the input class */
  	hdaps_idev->name = "hdaps";
- 	hdaps_idev->cdev.dev = &pdev->dev;
+ 	hdaps_idev->dev.parent = &pdev->dev;
  	hdaps_idev->evbit[0] = BIT(EV_ABS);
 +	hdaps_idev->open = hdaps_mousedev_open;
 +	hdaps_idev->close = hdaps_mousedev_close;

linux-2.6-x86-tune-generic.patch:

Index: linux-2.6-x86-tune-generic.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-x86-tune-generic.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-x86-tune-generic.patch	26 Mar 2006 00:13:38 -0000	1.1
+++ linux-2.6-x86-tune-generic.patch	10 Jul 2007 16:15:00 -0000	1.2
@@ -1,11 +1,16 @@
---- linux-2.6.15/arch/i386/Makefile.cpu~	2006-01-09 11:39:04.000000000 -0500
-+++ linux-2.6.15/arch/i386/Makefile.cpu	2006-01-09 11:39:36.000000000 -0500
+
+* Don't use 686 instructions like cmov
+  This allows us to boot on 586's without needing a separate kernel.
+* Optimise for today's CPUs.
+
+--- linux-2.6/arch/i386/Makefile.cpu~	2006-01-09 11:39:04.000000000 -0500
++++ linux-2.6/arch/i386/Makefile.cpu	2006-01-09 11:39:36.000000000 -0500
 @@ -15,7 +15,7 @@ cflags-$(CONFIG_M486)		+= -march=i486
  cflags-$(CONFIG_M586)		+= -march=i586
  cflags-$(CONFIG_M586TSC)	+= -march=i586
  cflags-$(CONFIG_M586MMX)	+= -march=pentium-mmx
 -cflags-$(CONFIG_M686)		+= -march=i686
-+cflags-$(CONFIG_M686)		+= -march=i686 $(call tune,generic)
++cflags-$(CONFIG_M686)		+= -march=i586 $(call tune,generic)
  cflags-$(CONFIG_MPENTIUMII)	+= -march=i686 $(call tune,pentium2)
  cflags-$(CONFIG_MPENTIUMIII)	+= -march=i686 $(call tune,pentium3)
  cflags-$(CONFIG_MPENTIUMM)	+= -march=i686 $(call tune,pentium3)


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/sources,v
retrieving revision 1.588
retrieving revision 1.589
diff -u -r1.588 -r1.589
--- sources	12 Jun 2007 18:25:22 -0000	1.588
+++ sources	10 Jul 2007 16:15:00 -0000	1.589
@@ -1,2 +1 @@
-1b515f588078dfa7f4bab2634bd17e80  linux-2.6.21.tar.bz2
-0a8b2823c5758f39fcc627d5f1b771b1  patch-2.6.21.5.bz2
+2e230d005c002fb3d38a3ca07c0200d0  linux-2.6.22.tar.bz2


Index: upstream
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/upstream,v
retrieving revision 1.511
retrieving revision 1.512
diff -u -r1.511 -r1.512
--- upstream	12 Jun 2007 18:25:22 -0000	1.511
+++ upstream	10 Jul 2007 16:15:00 -0000	1.512
@@ -1,2 +1 @@
-linux-2.6.21.tar.bz2
-patch-2.6.21.5.bz2
+linux-2.6.22.tar.bz2


--- config-olpc-generic DELETED ---


--- git-cpufreq.patch DELETED ---


--- linux-2.6-2110_scsi-sd-printing.patch DELETED ---


--- linux-2.6-2111_sd-start-stop.patch DELETED ---


--- linux-2.6-2112_libata-suspend.patch DELETED ---


--- linux-2.6-2113_libata-spindown-compat.patch DELETED ---


--- linux-2.6-2114_libata-shutdown-warning.patch DELETED ---


--- linux-2.6-2115_libata-spindown-status.patch DELETED ---


--- linux-2.6-2116_libata-remove-spindown-compat.patch DELETED ---


--- linux-2.6-2117_sata-via-suspend.patch DELETED ---


--- linux-2.6-2118_scsi-constants.patch DELETED ---


--- linux-2.6-PT_LOAD-align.patch DELETED ---


--- linux-2.6-acpi-boot-regression.patch DELETED ---


--- linux-2.6-acpi-keep-tsc-stable-when-lapic-timer-c2-ok-is-set.patch DELETED ---


--- linux-2.6-acpi-preserve-ebx-in-acpi_copy_wakeup_routine.patch DELETED ---


--- linux-2.6-acpi-unblacklist-dell-gx240.patch DELETED ---


--- linux-2.6-amd-disabled-svm-detect-msr-1.patch DELETED ---


--- linux-2.6-amd-disabled-svm-detect.patch DELETED ---


--- linux-2.6-ata-call-check-dma-with-qc-prepared.patch DELETED ---


--- linux-2.6-ata-use-pio-for-non-16-byte-xfers.patch DELETED ---


--- linux-2.6-cell-spu-device-tree.patch DELETED ---


--- linux-2.6-cell-spufs-fixes.patch DELETED ---


--- linux-2.6-clockevents-fix-resume-logic.patch DELETED ---


--- linux-2.6-common-uevent.patch DELETED ---


--- linux-2.6-compile-fixes.patch DELETED ---


--- linux-2.6-crap-sysfs-workaround.patch DELETED ---


--- linux-2.6-debug-slab-backtrace.patch DELETED ---


--- linux-2.6-defaults-pci_no_msi_mmconf.patch DELETED ---


--- linux-2.6-dvb-spinlock.patch DELETED ---


--- linux-2.6-firewire-be32-fix.patch DELETED ---


--- linux-2.6-firewire.patch DELETED ---


--- linux-2.6-fix-pmops-1.patch DELETED ---


--- linux-2.6-fix-pmops-2.patch DELETED ---


--- linux-2.6-fix-pmops-3.patch DELETED ---


--- linux-2.6-fix-pmops-4.patch DELETED ---


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


--- linux-2.6-i82875-edac-pci-setup.patch DELETED ---


--- linux-2.6-i965gm-support.patch DELETED ---


--- linux-2.6-kvm-19.patch DELETED ---


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


--- linux-2.6-libata-atiixp-ids.patch DELETED ---


--- linux-2.6-libata-hpa.patch DELETED ---


--- linux-2.6-libata-ncq-blacklist-2.6.22-rc7.patch DELETED ---


--- linux-2.6-libata-pata-hpt3x2n-correct-revision-boundary.patch DELETED ---


--- linux-2.6-libata-pata-pcmcia-new-ident.patch DELETED ---


--- linux-2.6-libata-pata-sis-fix-timing.patch DELETED ---


--- linux-2.6-libata-pata_dma-param.patch DELETED ---


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


--- linux-2.6-libata-sata_nv-adma.patch DELETED ---


--- linux-2.6-libata-sata_nv-wildcard-removal.patch DELETED ---


--- linux-2.6-libata-setxfer.patch DELETED ---


--- linux-2.6-libata_ali_max_dma_speed.patch DELETED ---


--- linux-2.6-mm-udf-fixes.patch DELETED ---


--- linux-2.6-module-override-modparam-cmdline.patch DELETED ---


--- linux-2.6-module_version.patch DELETED ---


--- linux-2.6-mpc52xx-fec.patch DELETED ---


--- linux-2.6-mpc52xx-sdma.patch DELETED ---


--- linux-2.6-net-e1000-no-msi-warning.patch DELETED ---


--- linux-2.6-nfs-missing-braces.patch DELETED ---


--- linux-2.6-nfs-noreaddirplus.patch DELETED ---


--- linux-2.6-optimise-spinlock-debug.patch DELETED ---


--- linux-2.6-powermac-generic-suspend-1.patch DELETED ---


--- linux-2.6-powermac-generic-suspend-2.patch DELETED ---


--- linux-2.6-powermac-generic-suspend-3.patch DELETED ---


--- linux-2.6-powermac-generic-suspend-4.patch DELETED ---


--- linux-2.6-powerpc-reserve-initrd-1.patch DELETED ---


--- linux-2.6-powerpc-reserve-initrd-2.patch DELETED ---


--- linux-2.6-powerpc-slabalign.patch DELETED ---


--- linux-2.6-ppc-data-exception.patch DELETED ---


--- linux-2.6-ps3-clear-spu-irq.patch DELETED ---


--- linux-2.6-ps3-device-init.patch DELETED ---


--- linux-2.6-ps3-ehci-iso.patch DELETED ---


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


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


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


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


--- linux-2.6-ps3-kexec.patch DELETED ---


--- linux-2.6-ps3-legacy-ioport.patch DELETED ---


--- linux-2.6-ps3-memory-probe.patch DELETED ---


--- linux-2.6-ps3-smp-boot.patch DELETED ---


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


--- linux-2.6-ps3-sound.patch DELETED ---


--- linux-2.6-ps3-stable-patches.patch DELETED ---


--- linux-2.6-ps3-storage.patch DELETED ---


--- linux-2.6-ps3-system-bus-rework-2.patch DELETED ---


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


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


--- linux-2.6-ps3-wrap-spu-runctl.patch DELETED ---


--- linux-2.6-ps3av-export-header.patch DELETED ---


--- linux-2.6-ps3fb-panic.patch DELETED ---


--- linux-2.6-raid-autorun.patch DELETED ---


--- linux-2.6-sata-promise-pata-ports.patch DELETED ---


--- linux-2.6-scsi-bounce-isa.patch DELETED ---


--- linux-2.6-softirq-printout-irq-trace-events.patch DELETED ---


--- linux-2.6-suspend-ordering.patch DELETED ---


--- linux-2.6-sysfs-inode-allocator-oops.patch DELETED ---


--- linux-2.6-tux.patch DELETED ---


--- linux-2.6-udf-2.6.22-rc2-1-udf_data_corruption.patch DELETED ---


--- linux-2.6-udf-2.6.22-rc4-1-udf_block_leak.patch DELETED ---


--- linux-2.6-uevent-ebus.patch DELETED ---


--- linux-2.6-uevent-macio.patch DELETED ---


--- linux-2.6-uevent-of_platform.patch DELETED ---


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


--- linux-2.6-utrace-core.patch DELETED ---


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


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


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


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


--- linux-2.6-utrace-recalc_sigpending_and_wake.patch DELETED ---


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


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


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


--- linux-2.6-utrace-regset.patch DELETED ---


--- linux-2.6-utrace-sig_kernel-macros.patch DELETED ---


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


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


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


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


--- linux-2.6-utrace-tracehook.patch DELETED ---


--- linux-2.6-vm-invalidate_mapping_pages-cond-resched.patch DELETED ---


--- linux-2.6-wireless.patch DELETED ---


--- linux-2.6-x86-64-edac-support.patch DELETED ---


--- linux-2.6-x86-64_pmtrace.patch DELETED ---


--- linux-2.6-x86-dell-hpet.patch DELETED ---


--- linux-2.6-x86-dont-delete-cpu_devs-data.patch DELETED ---


--- linux-2.6-x86-fsc-interrupt-controller-quirk.patch DELETED ---


--- linux-2.6-x86_64-silence-up-apic-errors.patch DELETED ---


--- linux-2.6.21.tar.bz2.sign DELETED ---


--- nouveau-drm.patch DELETED ---


--- patch-2.6.21.5.bz2.sign DELETED ---


--- stable-reverts.patch DELETED ---




More information about the fedora-extras-commits mailing list