rpms/kernel/F-8 linux-2.6-agp-mm.patch, NONE, 1.1 linux-2.6-drm-add-i915-radeon-mdt.patch, NONE, 1.1 linux-2.6-drm-mm.patch, NONE, 1.1 linux-2.6-firewire-git-pending.patch, NONE, 1.1 linux-2.6-libata-pegasos-fix.patch, NONE, 1.1 linux-2.6-netdev-atl2.patch, NONE, 1.1 linux-2.6-netdev-bonding-fix-null-deref.patch, NONE, 1.1 linux-2.6-pasemi-for-2.6.25.patch, NONE, 1.1 linux-2.6-pasemi-reserve-i2c.patch, NONE, 1.1 linux-2.6-powerpc-generic-suspend-001-pmu-no-lock-kernel.patch, NONE, 1.1 linux-2.6-powerpc-generic-suspend-002-pmu-remove-dead-code.patch, NONE, 1.1 linux-2.6-powerpc-generic-suspend-003-remove-adb-sleep-notifier.patch, NONE, 1.1 linux-2.6-powerpc-generic-suspend-004-kill-pmu-sleep-notifier.patch, NONE, 1.1 linux-2.6-powerpc-generic-suspend-005-proper-sleep-management.patch, NONE, 1.1 linux-2.6-rndis_wlan.patch, NONE, 1.1 linux-2.6-usb-ehci-hcd-respect-nousb.patch, NONE, 1.1 linux-2.6-xfs-xfs_mount-refactor.patch, NONE, 1.1 linux-2.6.24.tar.bz2.sign, NONE, 1.1 patch-2.6.24.2.bz2.sign, NONE, 1.1 .cvsignore, 1.715, 1.716 config-debug, 1.4, 1.5 config-generic, 1.47, 1.48 config-ia64-generic, 1.3, 1.4 config-nodebug, 1.5, 1.6 config-powerpc-generic, 1.10, 1.11 config-powerpc32-generic, 1.3, 1.4 config-powerpc64, 1.6, 1.7 config-s390x, 1.2, 1.3 config-sparc-generic, 1.1, 1.2 config-sparc64-generic, 1.8, 1.9 config-x86-generic, 1.18, 1.19 config-x86_64-generic, 1.17, 1.18 config-xen-generic, 1.1, 1.2 kernel.spec, 1.347, 1.348 linux-2.6-acpi-eeepc-hotkey.patch, 1.1, 1.2 linux-2.6-at76.patch, 1.6, 1.7 linux-2.6-build-nonintconfig.patch, 1.11, 1.12 linux-2.6-crash-driver.patch, 1.8, 1.9 linux-2.6-debug-nmi-timeout.patch, 1.2, 1.3 linux-2.6-debug-spinlock-taint.patch, 1.7, 1.8 linux-2.6-default-mmf_dump_elf_headers.patch, 1.1, 1.2 linux-2.6-defaults-nommconf.patch, 1.2, 1.3 linux-2.6-devmem.patch, 1.18, 1.19 linux-2.6-drm-radeon-update.patch, 1.2, 1.3 linux-2.6-execshield.patch, 1.74, 1.75 linux-2.6-firewire-git-update.patch, 1.2, 1.3 linux-2.6-futex-fix-fixups.patch, 1.2, 1.3 linux-2.6-i386-vdso-install-unstripped-copies-on-disk.patch, 1.2, 1.3 linux-2.6-modsign-include.patch, 1.7, 1.8 linux-2.6-modsign-mpilib.patch, 1.4, 1.5 linux-2.6-net-silence-noisy-printks.patch, 1.3, 1.4 linux-2.6-netdev-e1000-disable-alpm.patch, 1.1, 1.2 linux-2.6-silence-noise.patch, 1.11, 1.12 linux-2.6-smarter-relatime.patch, 1.3, 1.4 linux-2.6-squashfs.patch, 1.23, 1.24 linux-2.6-unexport-symbols.patch, 1.3, 1.4 linux-2.6-upstream-reverts.patch, 1.3, 1.4 linux-2.6-utrace-core.patch, 1.9, 1.10 linux-2.6-utrace-ptrace-compat-avr32.patch, 1.3, 1.4 linux-2.6-utrace-ptrace-compat-s390.patch, 1.2, 1.3 linux-2.6-utrace-ptrace-compat.patch, 1.10, 1.11 linux-2.6-utrace-regset-avr32.patch, 1.3, 1.4 linux-2.6-utrace-regset-ia64.patch, 1.4, 1.5 linux-2.6-utrace-regset-s390.patch, 1.3, 1.4 linux-2.6-utrace-regset.patch, 1.9, 1.10 linux-2.6-utrace-tracehook-avr32.patch, 1.2, 1.3 linux-2.6-utrace-tracehook-ia64.patch, 1.4, 1.5 linux-2.6-utrace-tracehook-s390.patch, 1.2, 1.3 linux-2.6-utrace-tracehook-um.patch, 1.3, 1.4 linux-2.6-utrace-tracehook.patch, 1.17, 1.18 linux-2.6-wireless-pending.patch, 1.25, 1.26 linux-2.6-wireless.patch, 1.22, 1.23 linux-2.6-x86-tune-generic.patch, 1.2, 1.3 linux-2.6-xfs-optimize-away-realtime-tests.patch, 1.1, 1.2 nouveau-drm.patch, 1.5, 1.6 sources, 1.676, 1.677 upstream, 1.597, 1.598 drm-mm-git.patch, 1.2, NONE linux-2.6-acpi-button-send-initial-state.patch, 1.2, NONE linux-2.6-acpi-cpuidle-0-upstream.patch, 1.1, NONE linux-2.6-acpi-cpuidle-1-fix-C3-for-no-bm-ctrl.patch, 1.1, NONE linux-2.6-acpi-cpuidle-2-fix-HP-nx6125-regression.patch, 1.1, NONE linux-2.6-acpi-dont-init-ec-early-with-no-ini.patch, 1.1, NONE linux-2.6-acpi-git-ec-init-fixes.patch, 1.1, NONE linux-2.6-acpi-video-brightness-bigger-buffer.patch, 1.1, NONE linux-2.6-acpi_ec_early_init_fix.patch, 1.1, NONE linux-2.6-add-mmf_dump_elf_headers.patch, 1.1, NONE linux-2.6-add-sys-module-name-notes.patch, 1.1, NONE linux-2.6-alsa-1.0.15-merge-1.patch, 1.1, NONE linux-2.6-alsa-1.0.15-merge-2.patch, 1.1, NONE linux-2.6-alsa-1.0.15-merge-3.patch, 1.1, NONE linux-2.6-bestcomm-dma.patch, 1.1, NONE linux-2.6-cifs-fix-bad-handling-of-EAGAIN.patch, 1.1, NONE linux-2.6-cifs-fix-incomplete-rcv.patch, 1.1, NONE linux-2.6-cifs-typo-in-cifs_reconnect-fix.patch, 1.1, NONE linux-2.6-debug-acpi-os-write-port.patch, 1.1, NONE linux-2.6-debug-boot-delay.patch, 1.6, NONE linux-2.6-defaults-nonmi.patch, 1.1, NONE linux-2.6-dio-fix-cache-invalidation-after-sync-writes.patch, 1.1, NONE linux-2.6-fec_mpc52xx.patch, 1.1, NONE linux-2.6-highres-timers.patch, 1.20, NONE linux-2.6-ia64-build-id-linker-script-fix.patch, 1.1, NONE linux-2.6-ibmvscsi-schizo.patch, 1.3, NONE linux-2.6-input-fix-sync-loss-acer-aspire.patch, 1.1, NONE linux-2.6-libata-acpi-enable.patch, 1.1, NONE linux-2.6-libata-add-dma-disable-option.patch, 1.1, NONE linux-2.6-libata-ahci-enable-ahci-mode-before-reset.patch, 1.1, NONE linux-2.6-libata-correct-iordy-handling.patch, 1.1, NONE linux-2.6-libata-dont-fail-revalidation-for-bad-gtf-methods.patch, 1.2, NONE linux-2.6-libata-fix-bogus-lba48-disks.patch, 1.1, NONE linux-2.6-libata-pata_serverworks-fix-drive-combinations.patch, 1.1, NONE linux-2.6-libata-scsi-allow-short-commands.patch, 1.1, NONE linux-2.6-libata-tape-max-sectors.patch, 1.1, NONE linux-2.6-libata-use-stuck-err-for-tapes.patch, 1.1, NONE linux-2.6-libata-work-around-drq-1-err-1-for-tapes.patch, 1.1, NONE linux-2.6-modules-modalias-platform.patch, 1.1, NONE linux-2.6-net-e100-disable-polling.patch, 1.1, NONE linux-2.6-netdev-atl2-2.0.3.patch, 1.1, NONE linux-2.6-netdev-e1000e-01.patch, 1.1, NONE linux-2.6-netdev-e1000e-02.patch, 1.1, NONE linux-2.6-netdev-e1000e-03.patch, 1.1, NONE linux-2.6-netdev-e1000e-04.patch, 1.1, NONE linux-2.6-netdev-e1000e-05.patch, 1.1, NONE linux-2.6-netdev-e1000e-06.patch, 1.1, NONE linux-2.6-netdev-e1000e-07.patch, 1.1, NONE linux-2.6-netdev-e1000e-08.patch, 1.1, NONE linux-2.6-netdev-e1000e-09.patch, 1.1, NONE linux-2.6-netdev-e1000e-10.patch, 1.1, NONE linux-2.6-netdev-spidernet-fix-interrupt-handling.patch, 1.1, NONE linux-2.6-pasemi-5945-workaround.patch, 1.1, NONE linux-2.6-pasemi-broken-regread.patch, 1.1, NONE linux-2.6-pasemi-getcfgaddr.patch, 1.1, NONE linux-2.6-pasemi-mac.patch, 1.3, NONE linux-2.6-pasemi-mdio-gpio.patch, 1.1, NONE linux-2.6-pasemi-no-mpic-reset.patch, 1.1, NONE linux-2.6-pasemi-smp-timebase-fix.patch, 1.1, NONE linux-2.6-pass-g-to-assembler-under-config_debug_info.patch, 1.1, NONE linux-2.6-pci-dont-size-transparent-bridges.patch, 1.1, NONE linux-2.6-pmac-zilog.patch, 1.2, NONE linux-2.6-pmtrace-time-fix.patch, 1.1, NONE linux-2.6-powerpc-generic-suspend-2-remove-adb-sleep-notifier.patch, 1.2, NONE linux-2.6-powerpc-generic-suspend-3-remove-dmasound.patch, 1.1, NONE linux-2.6-powerpc-generic-suspend-4-kill-pmu-sleep-notifier.patch, 1.2, NONE linux-2.6-powerpc-generic-suspend-5-pmu-pm_ops.patch, 1.3, NONE linux-2.6-powerpc-lparmap-g.patch, 1.3, NONE linux-2.6-powerpc-vdso-install-unstripped-copies-on-disk.patch, 1.4, NONE linux-2.6-ppc-fix-dso-unwind.patch, 1.1, NONE linux-2.6-ppc-pegasos-via-ata-legacy-irq.patch, 1.1, NONE linux-2.6-ppc32-ucmpdi2.patch, 1.1, NONE linux-2.6-proc-self-maps-fix.patch, 1.13, NONE linux-2.6-rheap-modular.patch, 1.1, NONE linux-2.6-rndis_wext.patch, 1.1, NONE linux-2.6-scsi-async-double-add.patch, 1.1, NONE linux-2.6-scsi-initio-fix-hang-on-load.patch, 1.1, NONE linux-2.6-selinux-ebitmap-for-avc-miss-cleanup.patch, 1.1, NONE linux-2.6-selinux-ebitmap-for-avc-miss.patch, 1.1, NONE linux-2.6-selinux-ebitmap-loop-bug.patch, 1.1, NONE linux-2.6-selinux-fix-netlabel-leak.patch, 1.1, NONE linux-2.6-selinux-no-revalidate-read-write.patch, 1.1, NONE linux-2.6-selinux-sigchld-wait.patch, 1.1, NONE linux-2.6-selinux-strip-leading-slashes.patch, 1.1, NONE linux-2.6-serial_pnp-add-new-wacom-ids.patch, 1.1, NONE linux-2.6-slub-provide-proc-slabinfo.patch, 1.1, NONE linux-2.6-usb-huawei-fix-init-in-modem-mode.patch, 1.2, NONE linux-2.6-usb-storage-always-set-the-allow_restart-flag.patch, 1.1, NONE linux-2.6-usb-storage-initialize-huawei-e220-properly.patch, 1.3, NONE linux-2.6-usb-suspend-classes.patch, 1.1, NONE linux-2.6-wakeups-hdaps.patch, 1.2, NONE linux-2.6-wakeups.patch, 1.1, NONE linux-2.6-x86-clean-up-oops-bug-reports.patch, 1.1, NONE linux-2.6-x86-tsc-calibration-2.patch, 1.1, NONE linux-2.6-x86_64-ia32-vdso-install-unstripped-copies-on-disk.patch, 1.2, NONE linux-2.6-x86_64-vdso-install-unstripped-copies-on-disk.patch, 1.4, NONE linux-2.6-xfs-optimize-away-dmapi-tests.patch, 1.1, NONE linux-2.6-xfs-refactor-xfs_mountfs.patch, 1.1, NONE linux-2.6.23.tar.bz2.sign, 1.1, NONE patch-2.6.23.15.bz2.sign, 1.1, NONE

Chuck Ebbert (cebbert) fedora-extras-commits at redhat.com
Sat Feb 16 00:00:25 UTC 2008


Author: cebbert

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

Modified Files:
	.cvsignore config-debug config-generic config-ia64-generic 
	config-nodebug config-powerpc-generic config-powerpc32-generic 
	config-powerpc64 config-s390x config-sparc-generic 
	config-sparc64-generic config-x86-generic 
	config-x86_64-generic config-xen-generic kernel.spec 
	linux-2.6-acpi-eeepc-hotkey.patch linux-2.6-at76.patch 
	linux-2.6-build-nonintconfig.patch 
	linux-2.6-crash-driver.patch linux-2.6-debug-nmi-timeout.patch 
	linux-2.6-debug-spinlock-taint.patch 
	linux-2.6-default-mmf_dump_elf_headers.patch 
	linux-2.6-defaults-nommconf.patch linux-2.6-devmem.patch 
	linux-2.6-drm-radeon-update.patch linux-2.6-execshield.patch 
	linux-2.6-firewire-git-update.patch 
	linux-2.6-futex-fix-fixups.patch 
	linux-2.6-i386-vdso-install-unstripped-copies-on-disk.patch 
	linux-2.6-modsign-include.patch linux-2.6-modsign-mpilib.patch 
	linux-2.6-net-silence-noisy-printks.patch 
	linux-2.6-netdev-e1000-disable-alpm.patch 
	linux-2.6-silence-noise.patch linux-2.6-smarter-relatime.patch 
	linux-2.6-squashfs.patch linux-2.6-unexport-symbols.patch 
	linux-2.6-upstream-reverts.patch linux-2.6-utrace-core.patch 
	linux-2.6-utrace-ptrace-compat-avr32.patch 
	linux-2.6-utrace-ptrace-compat-s390.patch 
	linux-2.6-utrace-ptrace-compat.patch 
	linux-2.6-utrace-regset-avr32.patch 
	linux-2.6-utrace-regset-ia64.patch 
	linux-2.6-utrace-regset-s390.patch 
	linux-2.6-utrace-regset.patch 
	linux-2.6-utrace-tracehook-avr32.patch 
	linux-2.6-utrace-tracehook-ia64.patch 
	linux-2.6-utrace-tracehook-s390.patch 
	linux-2.6-utrace-tracehook-um.patch 
	linux-2.6-utrace-tracehook.patch 
	linux-2.6-wireless-pending.patch linux-2.6-wireless.patch 
	linux-2.6-x86-tune-generic.patch 
	linux-2.6-xfs-optimize-away-realtime-tests.patch 
	nouveau-drm.patch sources upstream 
Added Files:
	linux-2.6-agp-mm.patch linux-2.6-drm-add-i915-radeon-mdt.patch 
	linux-2.6-drm-mm.patch linux-2.6-firewire-git-pending.patch 
	linux-2.6-libata-pegasos-fix.patch linux-2.6-netdev-atl2.patch 
	linux-2.6-netdev-bonding-fix-null-deref.patch 
	linux-2.6-pasemi-for-2.6.25.patch 
	linux-2.6-pasemi-reserve-i2c.patch 
	linux-2.6-powerpc-generic-suspend-001-pmu-no-lock-kernel.patch 
	linux-2.6-powerpc-generic-suspend-002-pmu-remove-dead-code.patch 
	linux-2.6-powerpc-generic-suspend-003-remove-adb-sleep-notifier.patch 
	linux-2.6-powerpc-generic-suspend-004-kill-pmu-sleep-notifier.patch 
	linux-2.6-powerpc-generic-suspend-005-proper-sleep-management.patch 
	linux-2.6-rndis_wlan.patch 
	linux-2.6-usb-ehci-hcd-respect-nousb.patch 
	linux-2.6-xfs-xfs_mount-refactor.patch 
	linux-2.6.24.tar.bz2.sign patch-2.6.24.2.bz2.sign 
Removed Files:
	drm-mm-git.patch 
	linux-2.6-acpi-button-send-initial-state.patch 
	linux-2.6-acpi-cpuidle-0-upstream.patch 
	linux-2.6-acpi-cpuidle-1-fix-C3-for-no-bm-ctrl.patch 
	linux-2.6-acpi-cpuidle-2-fix-HP-nx6125-regression.patch 
	linux-2.6-acpi-dont-init-ec-early-with-no-ini.patch 
	linux-2.6-acpi-git-ec-init-fixes.patch 
	linux-2.6-acpi-video-brightness-bigger-buffer.patch 
	linux-2.6-acpi_ec_early_init_fix.patch 
	linux-2.6-add-mmf_dump_elf_headers.patch 
	linux-2.6-add-sys-module-name-notes.patch 
	linux-2.6-alsa-1.0.15-merge-1.patch 
	linux-2.6-alsa-1.0.15-merge-2.patch 
	linux-2.6-alsa-1.0.15-merge-3.patch 
	linux-2.6-bestcomm-dma.patch 
	linux-2.6-cifs-fix-bad-handling-of-EAGAIN.patch 
	linux-2.6-cifs-fix-incomplete-rcv.patch 
	linux-2.6-cifs-typo-in-cifs_reconnect-fix.patch 
	linux-2.6-debug-acpi-os-write-port.patch 
	linux-2.6-debug-boot-delay.patch 
	linux-2.6-defaults-nonmi.patch 
	linux-2.6-dio-fix-cache-invalidation-after-sync-writes.patch 
	linux-2.6-fec_mpc52xx.patch linux-2.6-highres-timers.patch 
	linux-2.6-ia64-build-id-linker-script-fix.patch 
	linux-2.6-ibmvscsi-schizo.patch 
	linux-2.6-input-fix-sync-loss-acer-aspire.patch 
	linux-2.6-libata-acpi-enable.patch 
	linux-2.6-libata-add-dma-disable-option.patch 
	linux-2.6-libata-ahci-enable-ahci-mode-before-reset.patch 
	linux-2.6-libata-correct-iordy-handling.patch 
	linux-2.6-libata-dont-fail-revalidation-for-bad-gtf-methods.patch 
	linux-2.6-libata-fix-bogus-lba48-disks.patch 
	linux-2.6-libata-pata_serverworks-fix-drive-combinations.patch 
	linux-2.6-libata-scsi-allow-short-commands.patch 
	linux-2.6-libata-tape-max-sectors.patch 
	linux-2.6-libata-use-stuck-err-for-tapes.patch 
	linux-2.6-libata-work-around-drq-1-err-1-for-tapes.patch 
	linux-2.6-modules-modalias-platform.patch 
	linux-2.6-net-e100-disable-polling.patch 
	linux-2.6-netdev-atl2-2.0.3.patch 
	linux-2.6-netdev-e1000e-01.patch 
	linux-2.6-netdev-e1000e-02.patch 
	linux-2.6-netdev-e1000e-03.patch 
	linux-2.6-netdev-e1000e-04.patch 
	linux-2.6-netdev-e1000e-05.patch 
	linux-2.6-netdev-e1000e-06.patch 
	linux-2.6-netdev-e1000e-07.patch 
	linux-2.6-netdev-e1000e-08.patch 
	linux-2.6-netdev-e1000e-09.patch 
	linux-2.6-netdev-e1000e-10.patch 
	linux-2.6-netdev-spidernet-fix-interrupt-handling.patch 
	linux-2.6-pasemi-5945-workaround.patch 
	linux-2.6-pasemi-broken-regread.patch 
	linux-2.6-pasemi-getcfgaddr.patch linux-2.6-pasemi-mac.patch 
	linux-2.6-pasemi-mdio-gpio.patch 
	linux-2.6-pasemi-no-mpic-reset.patch 
	linux-2.6-pasemi-smp-timebase-fix.patch 
	linux-2.6-pass-g-to-assembler-under-config_debug_info.patch 
	linux-2.6-pci-dont-size-transparent-bridges.patch 
	linux-2.6-pmac-zilog.patch linux-2.6-pmtrace-time-fix.patch 
	linux-2.6-powerpc-generic-suspend-2-remove-adb-sleep-notifier.patch 
	linux-2.6-powerpc-generic-suspend-3-remove-dmasound.patch 
	linux-2.6-powerpc-generic-suspend-4-kill-pmu-sleep-notifier.patch 
	linux-2.6-powerpc-generic-suspend-5-pmu-pm_ops.patch 
	linux-2.6-powerpc-lparmap-g.patch 
	linux-2.6-powerpc-vdso-install-unstripped-copies-on-disk.patch 
	linux-2.6-ppc-fix-dso-unwind.patch 
	linux-2.6-ppc-pegasos-via-ata-legacy-irq.patch 
	linux-2.6-ppc32-ucmpdi2.patch 
	linux-2.6-proc-self-maps-fix.patch 
	linux-2.6-rheap-modular.patch linux-2.6-rndis_wext.patch 
	linux-2.6-scsi-async-double-add.patch 
	linux-2.6-scsi-initio-fix-hang-on-load.patch 
	linux-2.6-selinux-ebitmap-for-avc-miss-cleanup.patch 
	linux-2.6-selinux-ebitmap-for-avc-miss.patch 
	linux-2.6-selinux-ebitmap-loop-bug.patch 
	linux-2.6-selinux-fix-netlabel-leak.patch 
	linux-2.6-selinux-no-revalidate-read-write.patch 
	linux-2.6-selinux-sigchld-wait.patch 
	linux-2.6-selinux-strip-leading-slashes.patch 
	linux-2.6-serial_pnp-add-new-wacom-ids.patch 
	linux-2.6-slub-provide-proc-slabinfo.patch 
	linux-2.6-usb-huawei-fix-init-in-modem-mode.patch 
	linux-2.6-usb-storage-always-set-the-allow_restart-flag.patch 
	linux-2.6-usb-storage-initialize-huawei-e220-properly.patch 
	linux-2.6-usb-suspend-classes.patch 
	linux-2.6-wakeups-hdaps.patch linux-2.6-wakeups.patch 
	linux-2.6-x86-clean-up-oops-bug-reports.patch 
	linux-2.6-x86-tsc-calibration-2.patch 
	linux-2.6-x86_64-ia32-vdso-install-unstripped-copies-on-disk.patch 
	linux-2.6-x86_64-vdso-install-unstripped-copies-on-disk.patch 
	linux-2.6-xfs-optimize-away-dmapi-tests.patch 
	linux-2.6-xfs-refactor-xfs_mountfs.patch 
	linux-2.6.23.tar.bz2.sign patch-2.6.23.15.bz2.sign 
Log Message:
* Fri Feb 15 2008 Chuck Ebbert <cebbert at redhat.com> 2.6.24.2-2
- Linux 2.6.24.2


linux-2.6-agp-mm.patch:

--- NEW FILE linux-2.6-agp-mm.patch ---
diff --git a/arch/x86/pci/i386.c b/arch/x86/pci/i386.c
index 42ba0e2..103b9df 100644
--- a/arch/x86/pci/i386.c
+++ b/arch/x86/pci/i386.c
@@ -72,7 +72,7 @@ pcibios_align_resource(void *data, struct resource *res,
 		}
 	}
 }
-
+EXPORT_SYMBOL(pcibios_align_resource);
 
 /*
  *  Handle resources of PCI devices.  If the world were perfect, we could
diff --git a/drivers/char/agp/agp.h b/drivers/char/agp/agp.h
index b83824c..9ec9374 100644
--- a/drivers/char/agp/agp.h
+++ b/drivers/char/agp/agp.h
@@ -117,7 +117,8 @@ struct agp_bridge_driver {
 	void (*free_by_type)(struct agp_memory *);
 	void *(*agp_alloc_page)(struct agp_bridge_data *);
 	void (*agp_destroy_page)(void *, int flags);
-        int (*agp_type_to_mask_type) (struct agp_bridge_data *, int);
+	int (*agp_type_to_mask_type) (struct agp_bridge_data *, int);
+	void (*chipset_flush)(struct agp_bridge_data *);
 };
 
 struct agp_bridge_data {
diff --git a/drivers/char/agp/backend.c b/drivers/char/agp/backend.c
index 832ded2..f9c180c 100644
--- a/drivers/char/agp/backend.c
+++ b/drivers/char/agp/backend.c
@@ -43,7 +43,7 @@
  * fix some real stupidity. It's only by chance we can bump
  * past 0.99 at all due to some boolean logic error. */
 #define AGPGART_VERSION_MAJOR 0
-#define AGPGART_VERSION_MINOR 102
+#define AGPGART_VERSION_MINOR 103
 static const struct agp_version agp_current_version =
 {
 	.major = AGPGART_VERSION_MAJOR,
diff --git a/drivers/char/agp/compat_ioctl.c b/drivers/char/agp/compat_ioctl.c
index ecd4248..3927579 100644
--- a/drivers/char/agp/compat_ioctl.c
+++ b/drivers/char/agp/compat_ioctl.c
@@ -273,6 +273,10 @@ long compat_agp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 	case AGPIOC_UNBIND32:
 		ret_val = compat_agpioc_unbind_wrap(curr_priv, (void __user *) arg);
 		break;
+
+	case AGPIOC_CHIPSET_FLUSH32:
+		ret_val = agpioc_chipset_flush_wrap(curr_priv);
+		break;
 	}
 
 ioctl_out:
diff --git a/drivers/char/agp/compat_ioctl.h b/drivers/char/agp/compat_ioctl.h
index 71939d6..0c9678a 100644
--- a/drivers/char/agp/compat_ioctl.h
+++ b/drivers/char/agp/compat_ioctl.h
@@ -39,6 +39,7 @@
 #define AGPIOC_DEALLOCATE32 _IOW (AGPIOC_BASE, 7, compat_int_t)
 #define AGPIOC_BIND32       _IOW (AGPIOC_BASE, 8, compat_uptr_t)
 #define AGPIOC_UNBIND32     _IOW (AGPIOC_BASE, 9, compat_uptr_t)
+#define AGPIOC_CHIPSET_FLUSH32 _IO (AGPIOC_BASE, 10)
 
 struct agp_info32 {
 	struct agp_version version;	/* version of the driver        */
@@ -101,5 +102,6 @@ void agp_free_memory_wrap(struct agp_memory *memory);
 struct agp_memory *agp_allocate_memory_wrap(size_t pg_count, u32 type);
 struct agp_memory *agp_find_mem_by_key(int key);
 struct agp_client *agp_find_client_by_pid(pid_t id);
+int agpioc_chipset_flush_wrap(struct agp_file_private *priv);
 
 #endif /* _AGP_COMPAT_H */
diff --git a/drivers/char/agp/frontend.c b/drivers/char/agp/frontend.c
index 7791e98..9bd5a95 100644
--- a/drivers/char/agp/frontend.c
+++ b/drivers/char/agp/frontend.c
@@ -960,6 +960,13 @@ static int agpioc_unbind_wrap(struct agp_file_private *priv, void __user *arg)
 	return agp_unbind_memory(memory);
 }
 
+int agpioc_chipset_flush_wrap(struct agp_file_private *priv)
+{
+	DBG("");
+	agp_flush_chipset(agp_bridge);
+	return 0;
+}
+
 static int agp_ioctl(struct inode *inode, struct file *file,
 		     unsigned int cmd, unsigned long arg)
 {
@@ -1033,6 +1040,10 @@ static int agp_ioctl(struct inode *inode, struct file *file,
 	case AGPIOC_UNBIND:
 		ret_val = agpioc_unbind_wrap(curr_priv, (void __user *) arg);
 		break;
+	       
+	case AGPIOC_CHIPSET_FLUSH:
+		ret_val = agpioc_chipset_flush_wrap(curr_priv);
+		break;
 	}
 
 ioctl_out:
diff --git a/drivers/char/agp/generic.c b/drivers/char/agp/generic.c
index 64b2f6d..8c67b4f 100644
--- a/drivers/char/agp/generic.c
+++ b/drivers/char/agp/generic.c
@@ -80,6 +80,13 @@ static int agp_get_key(void)
 	return -1;
 }
 
+void agp_flush_chipset(struct agp_bridge_data *bridge)
+{
+	if (bridge->driver->chipset_flush)
+		bridge->driver->chipset_flush(bridge);
+}
+EXPORT_SYMBOL(agp_flush_chipset);
+
 /*
  * Use kmalloc if possible for the page list. Otherwise fall back to
  * vmalloc. This speeds things up and also saves memory for small AGP
diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c
index d879619..f161d15 100644
--- a/drivers/char/agp/intel-agp.c
+++ b/drivers/char/agp/intel-agp.c
@@ -69,9 +69,11 @@ extern int agp_memory_reserved;
 #define I915_GMCH_GMS_STOLEN_64M	(0x7 << 4)
 #define G33_GMCH_GMS_STOLEN_128M       (0x8 << 4)
 #define G33_GMCH_GMS_STOLEN_256M       (0x9 << 4)
+#define I915_IFPADDR    0x60
 
 /* Intel 965G registers */
 #define I965_MSAC 0x62
+#define I965_IFPADDR    0x70
 
 /* Intel 7505 registers */
 #define INTEL_I7505_APSIZE	0x74
@@ -113,6 +115,12 @@ static struct _intel_private {
 	 * popup and for the GTT.
 	 */
 	int gtt_entries;			/* i830+ */
+	union {
+		void __iomem *i9xx_flush_page;
+		void *i8xx_flush_page;
+	};
+	struct page *i8xx_page;
+	struct resource ifp_resource;
 } intel_private;
 
 static int intel_i810_fetch_size(void)
@@ -576,6 +584,44 @@ static void intel_i830_init_gtt_entries(void)
 	intel_private.gtt_entries = gtt_entries;
 }
 
+static void intel_i830_fini_flush(void)
+{
+	kunmap(intel_private.i8xx_page);
+	intel_private.i8xx_flush_page = NULL;
+	unmap_page_from_agp(intel_private.i8xx_page);
+	flush_agp_mappings();
+
+	__free_page(intel_private.i8xx_page);
+}
+
+static void intel_i830_setup_flush(void)
+{
+
+	intel_private.i8xx_page = alloc_page(GFP_KERNEL | __GFP_ZERO | GFP_DMA32);
+	if (!intel_private.i8xx_page) {
+		return;
+	}
+
+	/* make page uncached */
+	map_page_into_agp(intel_private.i8xx_page);
+	flush_agp_mappings();
+
+	intel_private.i8xx_flush_page = kmap(intel_private.i8xx_page);
+	if (!intel_private.i8xx_flush_page)
+		intel_i830_fini_flush();
+}
+
+static void intel_i830_chipset_flush(struct agp_bridge_data *bridge)
+{
+	unsigned int *pg = intel_private.i8xx_flush_page;
+	int i;
+
+	for (i = 0; i < 256; i+=2)
+		*(pg + i) = i;
+	
+	wmb();
+}
+
 /* The intel i830 automatically initializes the agp aperture during POST.
  * Use the memory already set aside for in the GTT.
  */
@@ -676,6 +722,8 @@ static int intel_i830_configure(void)
 	}
 
 	global_cache_flush();
+
+	intel_i830_setup_flush();
 	return 0;
 }
 
@@ -769,6 +817,90 @@ static struct agp_memory *intel_i830_alloc_by_type(size_t pg_count,int type)
 	return NULL;
 }
 
+static int intel_alloc_chipset_flush_resource(void)
+{
+	int ret;
+	ret = pci_bus_alloc_resource(agp_bridge->dev->bus, &intel_private.ifp_resource, PAGE_SIZE,
+				     PAGE_SIZE, PCIBIOS_MIN_MEM, 0,
+				     pcibios_align_resource, agp_bridge->dev);
+
+	return ret;
+}
+
+static void intel_i915_setup_chipset_flush(void)
+{
+	int ret;
+	u32 temp;
+
+	pci_read_config_dword(agp_bridge->dev, I915_IFPADDR, &temp);
+	if (!(temp & 0x1)) {
+		intel_alloc_chipset_flush_resource();
+
+		pci_write_config_dword(agp_bridge->dev, I915_IFPADDR, (intel_private.ifp_resource.start & 0xffffffff) | 0x1);
+	} else {
+		temp &= ~1;
+
+		intel_private.ifp_resource.start = temp;
+		intel_private.ifp_resource.end = temp + PAGE_SIZE;
+		ret = request_resource(&iomem_resource, &intel_private.ifp_resource);
+		if (ret) {
+			intel_private.ifp_resource.start = 0;
+			printk("Failed inserting resource into tree\n");
+		}
+	}
+}
+
+static void intel_i965_g33_setup_chipset_flush(void)
+{
+	u32 temp_hi, temp_lo;
+	int ret;
+
+	pci_read_config_dword(agp_bridge->dev, I965_IFPADDR + 4, &temp_hi);
+	pci_read_config_dword(agp_bridge->dev, I965_IFPADDR, &temp_lo);
+
+	if (!(temp_lo & 0x1)) {
+
+		intel_alloc_chipset_flush_resource();
+
+		pci_write_config_dword(agp_bridge->dev, I965_IFPADDR + 4, (intel_private.ifp_resource.start >> 32));
+		pci_write_config_dword(agp_bridge->dev, I965_IFPADDR, (intel_private.ifp_resource.start & 0xffffffff) | 0x1);
+	} else {
+		u64 l64;
+		
+		temp_lo &= ~0x1;
+		l64 = ((u64)temp_hi << 32) | temp_lo;
+
+		intel_private.ifp_resource.start = l64;
+		intel_private.ifp_resource.end = l64 + PAGE_SIZE;
+		ret = request_resource(&iomem_resource, &intel_private.ifp_resource);
+		if (!ret) {
+			printk("Failed inserting resource into tree - continuing\n");
+		}
+	}
+}
+
+static void intel_i9xx_setup_flush(void)
+{
+	/* setup a resource for this object */
+	memset(&intel_private.ifp_resource, 0, sizeof(intel_private.ifp_resource));
+
+	intel_private.ifp_resource.name = "Intel Flush Page";
+	intel_private.ifp_resource.flags = IORESOURCE_MEM;
+
+	/* Setup chipset flush for 915 */
+	if (IS_I965 || IS_G33) {
+		intel_i965_g33_setup_chipset_flush();
+	} else {
+		intel_i915_setup_chipset_flush();
+	}
+
+	if (intel_private.ifp_resource.start) {
+		intel_private.i9xx_flush_page = ioremap_nocache(intel_private.ifp_resource.start, PAGE_SIZE);
+		if (!intel_private.i9xx_flush_page)
+			printk("unable to ioremap flush  page - no chipset flushing");
+	}
+}
+
 static int intel_i915_configure(void)
 {
 	struct aper_size_info_fixed *current_size;
@@ -797,15 +929,26 @@ static int intel_i915_configure(void)
 	}
 
 	global_cache_flush();
+
+	intel_i9xx_setup_flush();
+	
 	return 0;
 }
 
 static void intel_i915_cleanup(void)
 {
+	if (intel_private.i9xx_flush_page)
+		iounmap(intel_private.i9xx_flush_page);
 	iounmap(intel_private.gtt);
 	iounmap(intel_private.registers);
 }
 
+static void intel_i915_chipset_flush(struct agp_bridge_data *bridge)
+{
+	if (intel_private.i9xx_flush_page)
+		writel(1, intel_private.i9xx_flush_page);
+}
+
 static int intel_i915_insert_entries(struct agp_memory *mem,off_t pg_start,
 				int type)
 {
@@ -1297,6 +1440,8 @@ static int intel_845_configure(void)
 	pci_write_config_byte(agp_bridge->dev, INTEL_I845_AGPM, temp2 | (1 << 1));
 	/* clear any possible error conditions */
 	pci_write_config_word(agp_bridge->dev, INTEL_I845_ERRSTS, 0x001c);
+
+	intel_i830_setup_flush();
 	return 0;
 }
 
@@ -1553,6 +1698,7 @@ static const struct agp_bridge_driver intel_830_driver = {
 	.agp_alloc_page		= agp_generic_alloc_page,
 	.agp_destroy_page	= agp_generic_destroy_page,
 	.agp_type_to_mask_type  = intel_i830_type_to_mask_type,
+	.chipset_flush		= intel_i830_chipset_flush,
 };
 
 static const struct agp_bridge_driver intel_820_driver = {
@@ -1649,6 +1795,7 @@ static const struct agp_bridge_driver intel_845_driver = {
 	.agp_alloc_page		= agp_generic_alloc_page,
 	.agp_destroy_page	= agp_generic_destroy_page,
 	.agp_type_to_mask_type  = agp_generic_type_to_mask_type,
+	.chipset_flush		= intel_i830_chipset_flush,
 };
 
 static const struct agp_bridge_driver intel_850_driver = {
@@ -1722,6 +1869,7 @@ static const struct agp_bridge_driver intel_915_driver = {
 	.agp_alloc_page		= agp_generic_alloc_page,
 	.agp_destroy_page	= agp_generic_destroy_page,
 	.agp_type_to_mask_type  = intel_i830_type_to_mask_type,
+	.chipset_flush		= intel_i915_chipset_flush,
 };
 
 static const struct agp_bridge_driver intel_i965_driver = {
@@ -1747,6 +1895,7 @@ static const struct agp_bridge_driver intel_i965_driver = {
        .agp_alloc_page         = agp_generic_alloc_page,
        .agp_destroy_page       = agp_generic_destroy_page,
        .agp_type_to_mask_type  = intel_i830_type_to_mask_type,
+	.chipset_flush		= intel_i915_chipset_flush,
 };
 
 static const struct agp_bridge_driver intel_7505_driver = {
@@ -1796,6 +1945,7 @@ static const struct agp_bridge_driver intel_g33_driver = {
 	.agp_alloc_page         = agp_generic_alloc_page,
 	.agp_destroy_page       = agp_generic_destroy_page,
 	.agp_type_to_mask_type  = intel_i830_type_to_mask_type,
+	.chipset_flush		= intel_i915_chipset_flush,
 };
 
 static int find_gmch(u16 device)
diff --git a/include/linux/agp_backend.h b/include/linux/agp_backend.h
index abc521c..03e3454 100644
--- a/include/linux/agp_backend.h
+++ b/include/linux/agp_backend.h
@@ -109,6 +109,7 @@ extern int agp_unbind_memory(struct agp_memory *);
 extern void agp_enable(struct agp_bridge_data *, u32);
 extern struct agp_bridge_data *agp_backend_acquire(struct pci_dev *);
 extern void agp_backend_release(struct agp_bridge_data *);
+extern void agp_flush_chipset(struct agp_bridge_data *);
 
 #endif				/* __KERNEL__ */
 #endif				/* _AGP_BACKEND_H */
diff --git a/include/linux/agpgart.h b/include/linux/agpgart.h
index 09fbf7e..62aef58 100644
--- a/include/linux/agpgart.h
+++ b/include/linux/agpgart.h
@@ -38,6 +38,7 @@
 #define AGPIOC_DEALLOCATE _IOW (AGPIOC_BASE, 7, int)
 #define AGPIOC_BIND       _IOW (AGPIOC_BASE, 8, struct agp_bind*)
 #define AGPIOC_UNBIND     _IOW (AGPIOC_BASE, 9, struct agp_unbind*)
+#define AGPIOC_CHIPSET_FLUSH _IO (AGPIOC_BASE, 10)
 
 #define AGP_DEVICE      "/dev/agpgart"
 

linux-2.6-drm-add-i915-radeon-mdt.patch:

--- NEW FILE linux-2.6-drm-add-i915-radeon-mdt.patch ---
diff --git a/drivers/char/drm/i915_drv.c b/drivers/char/drm/i915_drv.c
index 0f9c1f1..1be5795 100644
--- a/drivers/char/drm/i915_drv.c
+++ b/drivers/char/drm/i915_drv.c
@@ -37,6 +37,8 @@
 static struct pci_device_id pciidlist[] = {
 	i915_PCI_IDS
 };
+MODULE_DEVICE_TABLE(pci, pciidlist);
+
 static struct drm_fence_driver i915_fence_driver = {
 	.num_classes = 1,
 	.wrap_diff = (1U << (BREADCRUMB_BITS - 1)),
diff --git a/drivers/char/drm/radeon_drv.c b/drivers/char/drm/radeon_drv.c
index 349ac3d..1be40f5 100644
--- a/drivers/char/drm/radeon_drv.c
+++ b/drivers/char/drm/radeon_drv.c
@@ -56,6 +56,8 @@ static struct pci_device_id pciidlist[] = {
 	radeon_PCI_IDS
 };
 
+MODULE_DEVICE_TABLE(pci, pciidlist);
+
 static struct drm_driver driver = {
 	.driver_features =
 	    DRIVER_USE_AGP | DRIVER_USE_MTRR | DRIVER_PCI_DMA | DRIVER_SG |

linux-2.6-drm-mm.patch:

--- NEW FILE linux-2.6-drm-mm.patch ---
diff --git a/drivers/char/drm/Kconfig b/drivers/char/drm/Kconfig
index ba3058d..610d6fd 100644
--- a/drivers/char/drm/Kconfig
+++ b/drivers/char/drm/Kconfig
@@ -38,7 +38,7 @@ config DRM_RADEON
 	  Choose this option if you have an ATI Radeon graphics card.  There
 	  are both PCI and AGP versions.  You don't need to choose this to
 	  run the Radeon in plain VGA mode.
-	  
+
 	  If M is selected, the module will be called radeon.
 
 config DRM_I810
@@ -71,9 +71,9 @@ config DRM_I915
 	  852GM, 855GM 865G or 915G integrated graphics.  If M is selected, the
 	  module will be called i915.  AGP support is required for this driver
 	  to work. This driver is used by the Intel driver in X.org 6.8 and
-	  XFree86 4.4 and above. If unsure, build this and i830 as modules and 
+	  XFree86 4.4 and above. If unsure, build this and i830 as modules and
 	  the X server will load the correct one.
-	
+
 endchoice
 
 config DRM_MGA
@@ -88,7 +88,7 @@ config DRM_SIS
 	tristate "SiS video cards"
 	depends on DRM && AGP
 	help
-	  Choose this option if you have a SiS 630 or compatible video 
+	  Choose this option if you have a SiS 630 or compatible video
           chipset. If M is selected the module will be called sis. AGP
           support is required for this driver to work.
 
@@ -105,4 +105,3 @@ config DRM_SAVAGE
 	help
 	  Choose this option if you have a Savage3D/4/SuperSavage/Pro/Twister
 	  chipset. If M is selected the module will be called savage.
-
diff --git a/drivers/char/drm/Makefile b/drivers/char/drm/Makefile
index 6915a05..85c4f9e 100644
--- a/drivers/char/drm/Makefile
+++ b/drivers/char/drm/Makefile
@@ -6,14 +6,15 @@ drm-objs    :=	drm_auth.o drm_bufs.o drm_context.o drm_dma.o drm_drawable.o \
 		drm_drv.o drm_fops.o drm_ioctl.o drm_irq.o \
 		drm_lock.o drm_memory.o drm_proc.o drm_stub.o drm_vm.o \
 		drm_agpsupport.o drm_scatter.o ati_pcigart.o drm_pci.o \
-		drm_sysfs.o drm_hashtab.o drm_sman.o drm_mm.o
+		drm_sysfs.o drm_hashtab.o drm_sman.o drm_mm.o drm_object.o \
+		drm_fence.o drm_ttm.o drm_bo.o drm_bo_move.o drm_bo_lock.o
 
 tdfx-objs   := tdfx_drv.o
 r128-objs   := r128_drv.o r128_cce.o r128_state.o r128_irq.o
 mga-objs    := mga_drv.o mga_dma.o mga_state.o mga_warp.o mga_irq.o
 i810-objs   := i810_drv.o i810_dma.o
 i830-objs   := i830_drv.o i830_dma.o i830_irq.o
-i915-objs   := i915_drv.o i915_dma.o i915_irq.o i915_mem.o
+i915-objs   := i915_drv.o i915_dma.o i915_irq.o i915_mem.o i915_fence.o i915_buffer.o
 radeon-objs := radeon_drv.o radeon_cp.o radeon_state.o radeon_mem.o radeon_irq.o r300_cmdbuf.o
 sis-objs    := sis_drv.o sis_mm.o
 savage-objs := savage_drv.o savage_bci.o savage_state.o
@@ -38,5 +39,3 @@ obj-$(CONFIG_DRM_I915)  += i915.o
 obj-$(CONFIG_DRM_SIS)   += sis.o
 obj-$(CONFIG_DRM_SAVAGE)+= savage.o
 obj-$(CONFIG_DRM_VIA)	+=via.o
-
-
diff --git a/drivers/char/drm/README.drm b/drivers/char/drm/README.drm
index af74cd7..b5b3327 100644
--- a/drivers/char/drm/README.drm
+++ b/drivers/char/drm/README.drm
@@ -41,4 +41,3 @@ For specific information about kernel-level support, see:
 
     A Security Analysis of the Direct Rendering Infrastructure
     http://dri.sourceforge.net/doc/security_low_level.html
-
diff --git a/drivers/char/drm/drm.h b/drivers/char/drm/drm.h
index 82fb3d0..c6686f1 100644
--- a/drivers/char/drm/drm.h
+++ b/drivers/char/drm/drm.h
@@ -190,6 +190,7 @@ enum drm_map_type {
 	_DRM_AGP = 3,		  /**< AGP/GART */
 	_DRM_SCATTER_GATHER = 4,  /**< Scatter/gather memory for PCI DMA */
 	_DRM_CONSISTENT = 5,	  /**< Consistent memory for PCI DMA */
+	_DRM_TTM = 6
 };
 
 /**
@@ -202,7 +203,8 @@ enum drm_map_flags {
 	_DRM_KERNEL = 0x08,	     /**< kernel requires access */
 	_DRM_WRITE_COMBINING = 0x10, /**< use write-combining if available */
 	_DRM_CONTAINS_LOCK = 0x20,   /**< SHM page that contains lock */
-	_DRM_REMOVABLE = 0x40	     /**< Removable mapping */
+	_DRM_REMOVABLE = 0x40,	     /**< Removable mapping */
+	_DRM_DRIVER = 0x80	     /**< Managed by driver */
 };
 
 struct drm_ctx_priv_map {
@@ -470,6 +472,7 @@ struct drm_irq_busid {
 enum drm_vblank_seq_type {
 	_DRM_VBLANK_ABSOLUTE = 0x0,	/**< Wait for specific vblank sequence number */
 	_DRM_VBLANK_RELATIVE = 0x1,	/**< Wait for given number of vblanks */
+	_DRM_VBLANK_FLIP = 0x8000000,	/**< Scheduled buffer swap should flip */
 	_DRM_VBLANK_NEXTONMISS = 0x10000000,	/**< If missed, wait for next vblank */
 	_DRM_VBLANK_SECONDARY = 0x20000000,	/**< Secondary display controller */
 	_DRM_VBLANK_SIGNAL = 0x40000000	/**< Send signal instead of blocking */
@@ -572,6 +575,271 @@ struct drm_set_version {
 	int drm_dd_minor;
 };
 
+#define DRM_FENCE_FLAG_EMIT                0x00000001
+#define DRM_FENCE_FLAG_SHAREABLE           0x00000002
+#define DRM_FENCE_FLAG_WAIT_LAZY           0x00000004
+#define DRM_FENCE_FLAG_WAIT_IGNORE_SIGNALS 0x00000008
+#define DRM_FENCE_FLAG_NO_USER             0x00000010
+
+/* Reserved for driver use */
+#define DRM_FENCE_MASK_DRIVER              0xFF000000
+
+#define DRM_FENCE_TYPE_EXE                 0x00000001
+
+struct drm_fence_arg {
+	unsigned int handle;
+	unsigned int fence_class;
+	unsigned int type;
+	unsigned int flags;
+	unsigned int signaled;
+	unsigned int error;
+	unsigned int sequence;
+	unsigned int pad64;
+	uint64_t expand_pad[2]; /*Future expansion */
+};
+
+/* Buffer permissions, referring to how the GPU uses the buffers.
+ * these translate to fence types used for the buffers.
+ * Typically a texture buffer is read, A destination buffer is write and
+ *  a command (batch-) buffer is exe. Can be or-ed together.
+ */
+
+#define DRM_BO_FLAG_READ        (1ULL << 0)
+#define DRM_BO_FLAG_WRITE       (1ULL << 1)
+#define DRM_BO_FLAG_EXE         (1ULL << 2)
+
+/*
+ * Status flags. Can be read to determine the actual state of a buffer.
+ * Can also be set in the buffer mask before validation.
+ */
+
+/*
+ * Mask: Never evict this buffer. Not even with force.
+ * This type of buffer is only available to root and must be manually
+ * removed before buffer manager shutdown or lock.
+ * Flags: Acknowledge
+ */
+#define DRM_BO_FLAG_NO_EVICT    (1ULL << 4)
+
+/*
+ * Mask: Require that the buffer is placed in mappable memory when validated.
+ * If not set the buffer may or may not be in mappable memory when validated.
+ * Flags: If set, the buffer is in mappable memory.
+ */
+#define DRM_BO_FLAG_MAPPABLE    (1ULL << 5)
+
+/* Mask: The buffer should be shareable with other processes.
+ * Flags: The buffer is shareable with other processes.
+ */
+#define DRM_BO_FLAG_SHAREABLE   (1ULL << 6)
+
+/* Mask: If set, place the buffer in cache-coherent memory if available.
+ *       If clear, never place the buffer in cache coherent memory if validated.
+ * Flags: The buffer is currently in cache-coherent memory.
+ */
+#define DRM_BO_FLAG_CACHED      (1ULL << 7)
+
+/* Mask: Make sure that every time this buffer is validated,
+ *       it ends up on the same location provided that the memory mask
+ *       is the same.
+ *       The buffer will also not be evicted when claiming space for
+ *       other buffers. Basically a pinned buffer but it may be thrown out as
+ *       part of buffer manager shutdown or locking.
+ * Flags: Acknowledge.
+ */
+#define DRM_BO_FLAG_NO_MOVE     (1ULL << 8)
+
+/* Mask: Make sure the buffer is in cached memory when mapped
+ * Flags: Acknowledge.
+ * Buffers allocated with this flag should not be used for suballocators
+ * This type may have issues on CPUs with over-aggressive caching
+ * http://marc.info/?l=linux-kernel&m=102376926732464&w=2
+ */
+#define DRM_BO_FLAG_CACHED_MAPPED    (1ULL << 19)
+
+
+/* Mask: Force DRM_BO_FLAG_CACHED flag strictly also if it is set.
+ * Flags: Acknowledge.
+ */
+#define DRM_BO_FLAG_FORCE_CACHING  (1ULL << 13)
+
+/*
[...12635 lines suppressed...]
+	if (sync->engine >= VIA_NUM_BLIT_ENGINES)
 		return -EINVAL;
 
 	err = via_dmablit_sync(dev, sync->sync_handle, sync->engine);
@@ -796,15 +796,15 @@ via_dma_blit_sync( struct drm_device *dev, void *data, struct drm_file *file_pri
 
 	return err;
 }
-	
+
 
 /*
  * Queue a blit and hand back a handle to be used for sync. This IOCTL may be interrupted by a signal
- * while waiting for a free slot in the blit queue. In that case it returns with -EAGAIN and should 
+ * while waiting for a free slot in the blit queue. In that case it returns with -EAGAIN and should
  * be reissued. See the above IOCTL code.
  */
 
-int 
+int
 via_dma_blit( struct drm_device *dev, void *data, struct drm_file *file_priv )
 {
 	drm_via_dmablit_t *xfer = data;
diff --git a/drivers/char/drm/via_dmablit.h b/drivers/char/drm/via_dmablit.h
index 6f6a513..7408a54 100644
--- a/drivers/char/drm/via_dmablit.h
+++ b/drivers/char/drm/via_dmablit.h
@@ -1,5 +1,5 @@
 /* via_dmablit.h -- PCI DMA BitBlt support for the VIA Unichrome/Pro
- * 
+ *
  * Copyright 2005 Thomas Hellstrom.
  * All Rights Reserved.
  *
@@ -17,12 +17,12 @@
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, 
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 
+ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  * USE OR OTHER DEALINGS IN THE SOFTWARE.
  *
- * Authors: 
+ * Authors:
  *    Thomas Hellstrom.
  *    Register info from Digeo Inc.
  */
@@ -67,7 +67,7 @@ typedef struct _drm_via_blitq {
 	unsigned cur;
 	unsigned num_free;
 	unsigned num_outstanding;
-	unsigned long end;  
+	unsigned long end;
         int aborting;
 	int is_active;
 	drm_via_sg_info_t *blits[VIA_NUM_BLIT_SLOTS];
@@ -77,46 +77,46 @@ typedef struct _drm_via_blitq {
 	struct work_struct wq;
 	struct timer_list poll_timer;
 } drm_via_blitq_t;
-	
 
-/* 
+
+/*
  *  PCI DMA Registers
  *  Channels 2 & 3 don't seem to be implemented in hardware.
  */
- 
-#define VIA_PCI_DMA_MAR0            0xE40   /* Memory Address Register of Channel 0 */ 
-#define VIA_PCI_DMA_DAR0            0xE44   /* Device Address Register of Channel 0 */ 
-#define VIA_PCI_DMA_BCR0            0xE48   /* Byte Count Register of Channel 0 */ 
-#define VIA_PCI_DMA_DPR0            0xE4C   /* Descriptor Pointer Register of Channel 0 */ 
-
-#define VIA_PCI_DMA_MAR1            0xE50   /* Memory Address Register of Channel 1 */ 
-#define VIA_PCI_DMA_DAR1            0xE54   /* Device Address Register of Channel 1 */ 
-#define VIA_PCI_DMA_BCR1            0xE58   /* Byte Count Register of Channel 1 */ 
-#define VIA_PCI_DMA_DPR1            0xE5C   /* Descriptor Pointer Register of Channel 1 */ 
-
-#define VIA_PCI_DMA_MAR2            0xE60   /* Memory Address Register of Channel 2 */ 
-#define VIA_PCI_DMA_DAR2            0xE64   /* Device Address Register of Channel 2 */ 
-#define VIA_PCI_DMA_BCR2            0xE68   /* Byte Count Register of Channel 2 */ 
-#define VIA_PCI_DMA_DPR2            0xE6C   /* Descriptor Pointer Register of Channel 2 */ 
-
-#define VIA_PCI_DMA_MAR3            0xE70   /* Memory Address Register of Channel 3 */ 
-#define VIA_PCI_DMA_DAR3            0xE74   /* Device Address Register of Channel 3 */ 
-#define VIA_PCI_DMA_BCR3            0xE78   /* Byte Count Register of Channel 3 */ 
-#define VIA_PCI_DMA_DPR3            0xE7C   /* Descriptor Pointer Register of Channel 3 */ 
-
-#define VIA_PCI_DMA_MR0             0xE80   /* Mode Register of Channel 0 */ 
-#define VIA_PCI_DMA_MR1             0xE84   /* Mode Register of Channel 1 */ 
-#define VIA_PCI_DMA_MR2             0xE88   /* Mode Register of Channel 2 */ 
-#define VIA_PCI_DMA_MR3             0xE8C   /* Mode Register of Channel 3 */ 
-
-#define VIA_PCI_DMA_CSR0            0xE90   /* Command/Status Register of Channel 0 */ 
-#define VIA_PCI_DMA_CSR1            0xE94   /* Command/Status Register of Channel 1 */ 
-#define VIA_PCI_DMA_CSR2            0xE98   /* Command/Status Register of Channel 2 */ 
-#define VIA_PCI_DMA_CSR3            0xE9C   /* Command/Status Register of Channel 3 */ 
-
-#define VIA_PCI_DMA_PTR             0xEA0   /* Priority Type Register */ 
-
-/* Define for DMA engine */ 
+
+#define VIA_PCI_DMA_MAR0            0xE40   /* Memory Address Register of Channel 0 */
+#define VIA_PCI_DMA_DAR0            0xE44   /* Device Address Register of Channel 0 */
+#define VIA_PCI_DMA_BCR0            0xE48   /* Byte Count Register of Channel 0 */
+#define VIA_PCI_DMA_DPR0            0xE4C   /* Descriptor Pointer Register of Channel 0 */
+
+#define VIA_PCI_DMA_MAR1            0xE50   /* Memory Address Register of Channel 1 */
+#define VIA_PCI_DMA_DAR1            0xE54   /* Device Address Register of Channel 1 */
+#define VIA_PCI_DMA_BCR1            0xE58   /* Byte Count Register of Channel 1 */
+#define VIA_PCI_DMA_DPR1            0xE5C   /* Descriptor Pointer Register of Channel 1 */
+
+#define VIA_PCI_DMA_MAR2            0xE60   /* Memory Address Register of Channel 2 */
+#define VIA_PCI_DMA_DAR2            0xE64   /* Device Address Register of Channel 2 */
+#define VIA_PCI_DMA_BCR2            0xE68   /* Byte Count Register of Channel 2 */
+#define VIA_PCI_DMA_DPR2            0xE6C   /* Descriptor Pointer Register of Channel 2 */
+
+#define VIA_PCI_DMA_MAR3            0xE70   /* Memory Address Register of Channel 3 */
+#define VIA_PCI_DMA_DAR3            0xE74   /* Device Address Register of Channel 3 */
+#define VIA_PCI_DMA_BCR3            0xE78   /* Byte Count Register of Channel 3 */
+#define VIA_PCI_DMA_DPR3            0xE7C   /* Descriptor Pointer Register of Channel 3 */
+
+#define VIA_PCI_DMA_MR0             0xE80   /* Mode Register of Channel 0 */
+#define VIA_PCI_DMA_MR1             0xE84   /* Mode Register of Channel 1 */
+#define VIA_PCI_DMA_MR2             0xE88   /* Mode Register of Channel 2 */
+#define VIA_PCI_DMA_MR3             0xE8C   /* Mode Register of Channel 3 */
+
+#define VIA_PCI_DMA_CSR0            0xE90   /* Command/Status Register of Channel 0 */
+#define VIA_PCI_DMA_CSR1            0xE94   /* Command/Status Register of Channel 1 */
+#define VIA_PCI_DMA_CSR2            0xE98   /* Command/Status Register of Channel 2 */
+#define VIA_PCI_DMA_CSR3            0xE9C   /* Command/Status Register of Channel 3 */
+
+#define VIA_PCI_DMA_PTR             0xEA0   /* Priority Type Register */
+
+/* Define for DMA engine */
 /* DPR */
 #define VIA_DMA_DPR_EC		(1<<1)	/* end of chain */
 #define VIA_DMA_DPR_DDIE	(1<<2)	/* descriptor done interrupt enable */
diff --git a/drivers/char/drm/via_drm.h b/drivers/char/drm/via_drm.h
index 8f53c76..a3b5c10 100644
--- a/drivers/char/drm/via_drm.h
+++ b/drivers/char/drm/via_drm.h
@@ -35,7 +35,7 @@
 #include "via_drmclient.h"
 #endif
 
-#define VIA_NR_SAREA_CLIPRECTS 		8
+#define VIA_NR_SAREA_CLIPRECTS		8
 #define VIA_NR_XVMC_PORTS               10
 #define VIA_NR_XVMC_LOCKS               5
 #define VIA_MAX_CACHELINE_SIZE          64
@@ -259,7 +259,7 @@ typedef struct drm_via_blitsync {
 typedef struct drm_via_dmablit {
 	uint32_t num_lines;
 	uint32_t line_length;
-	
+
 	uint32_t fb_addr;
 	uint32_t fb_stride;
 
diff --git a/drivers/char/drm/via_drv.c b/drivers/char/drm/via_drv.c
index 2d4957a..80c01cd 100644
--- a/drivers/char/drm/via_drv.c
+++ b/drivers/char/drm/via_drv.c
@@ -71,7 +71,7 @@ static struct drm_driver driver = {
 		 .name = DRIVER_NAME,
 		 .id_table = pciidlist,
 	},
-	
+
 	.name = DRIVER_NAME,
 	.desc = DRIVER_DESC,
 	.date = DRIVER_DATE,
diff --git a/drivers/char/drm/via_map.c b/drivers/char/drm/via_map.c
index 1009150..f6dcaaf 100644
--- a/drivers/char/drm/via_map.c
+++ b/drivers/char/drm/via_map.c
@@ -121,4 +121,3 @@ int via_driver_unload(struct drm_device *dev)
 
 	return 0;
 }
-
diff --git a/drivers/char/drm/via_mm.c b/drivers/char/drm/via_mm.c
index 3ffbf86..69f6558 100644
--- a/drivers/char/drm/via_mm.c
+++ b/drivers/char/drm/via_mm.c
@@ -113,7 +113,7 @@ void via_lastclose(struct drm_device *dev)
 	dev_priv->vram_initialized = 0;
 	dev_priv->agp_initialized = 0;
 	mutex_unlock(&dev->struct_mutex);
-}	
+}
 
 int via_mem_alloc(struct drm_device *dev, void *data,
 		  struct drm_file *file_priv)

linux-2.6-firewire-git-pending.patch:

--- NEW FILE linux-2.6-firewire-git-pending.patch ---
#
# Patches under review and/or pending inclusion in the linux1394-git
# tree, which we think we're going to want...
#

If a device is being unplugged while fw-sbp2 had a login or reconnect on
schedule, it would take about half a minute to shut the fw_unit down:

Jan 27 18:34:54 stein firewire_sbp2: logged in to fw2.0 LUN 0000 (0 retries)
<unplug>
Jan 27 18:34:59 stein firewire_sbp2: sbp2_scsi_abort
Jan 27 18:34:59 stein scsi 25:0:0:0: Device offlined - not ready after error recovery
Jan 27 18:35:01 stein firewire_sbp2: orb reply timed out, rcode=0x11
Jan 27 18:35:06 stein firewire_sbp2: orb reply timed out, rcode=0x11
Jan 27 18:35:12 stein firewire_sbp2: orb reply timed out, rcode=0x11
Jan 27 18:35:17 stein firewire_sbp2: orb reply timed out, rcode=0x11
Jan 27 18:35:22 stein firewire_sbp2: orb reply timed out, rcode=0x11
Jan 27 18:35:27 stein firewire_sbp2: orb reply timed out, rcode=0x11
Jan 27 18:35:32 stein firewire_sbp2: orb reply timed out, rcode=0x11
Jan 27 18:35:32 stein firewire_sbp2: failed to login to fw2.0 LUN 0000
Jan 27 18:35:32 stein firewire_sbp2: released fw2.0

After this patch, typically only a few seconds spent in __scsi_add_device
remain:

Jan 27 19:05:50 stein firewire_sbp2: logged in to fw2.0 LUN 0000 (0 retries)
<unplug>
Jan 27 19:05:56 stein firewire_sbp2: sbp2_scsi_abort
Jan 27 19:05:56 stein scsi 33:0:0:0: Device offlined - not ready after error recovery
Jan 27 19:05:56 stein firewire_sbp2: released fw2.0

The benefit of this is negligible on simple setups.  But on buses with
several devices, we should avoid any unnecessary blockade of fw-sbp2's
workqueue thread.

Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
Signed-off-by: Jarod Wilson <jwilson at redhat.com>
---
 drivers/firewire/fw-sbp2.c |   16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

Index: linux/drivers/firewire/fw-sbp2.c
===================================================================
--- linux.orig/drivers/firewire/fw-sbp2.c
+++ linux/drivers/firewire/fw-sbp2.c
@@ -499,6 +499,9 @@ sbp2_send_management_orb(struct sbp2_log
 	unsigned int timeout;
 	int retval = -ENOMEM;
 
+	if (function == SBP2_LOGOUT_REQUEST && fw_device_is_shutdown(device))
+		return 0;
+
 	orb = kzalloc(sizeof(*orb), GFP_ATOMIC);
 	if (orb == NULL)
 		return -ENOMEM;
@@ -619,16 +622,13 @@ static void sbp2_release_target(struct k
 	struct sbp2_logical_unit *lu, *next;
 	struct Scsi_Host *shost =
 		container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
-	struct fw_device *device = fw_device(tgt->unit->device.parent);
 
 	list_for_each_entry_safe(lu, next, &tgt->lu_list, link) {
 		if (lu->sdev)
 			scsi_remove_device(lu->sdev);
 
-		if (!fw_device_is_shutdown(device))
-			sbp2_send_management_orb(lu, tgt->node_id,
-					lu->generation, SBP2_LOGOUT_REQUEST,
-					lu->login_id, NULL);
+		sbp2_send_management_orb(lu, tgt->node_id, lu->generation,
+				SBP2_LOGOUT_REQUEST, lu->login_id, NULL);
 
 		fw_core_remove_address_handler(&lu->address_handler);
 		list_del(&lu->link);
@@ -673,6 +673,9 @@ static void sbp2_login(struct work_struc
 	struct sbp2_login_response response;
 	int generation, node_id, local_node_id;
 
+	if (fw_device_is_shutdown(device))
+		goto out;
+
 	generation    = device->generation;
 	smp_rmb();    /* node_id must not be older than generation */
 	node_id       = device->node_id;
@@ -968,6 +971,9 @@ static void sbp2_reconnect(struct work_s
 	struct fw_device *device = fw_device(unit->device.parent);
 	int generation, node_id, local_node_id;
 
+	if (fw_device_is_shutdown(device))
+		goto out;
+
 	generation    = device->generation;
 	smp_rmb();    /* node_id must not be older than generation */
 	node_id       = device->node_id;

-- 
Stefan Richter
-=====-==--- ---= ==-==
http://arcgraph.de/sr/


There is a race between shutdown and creation of devices:  fw-core may
attempt to add a device with the same name of an already existing
device.  http://bugzilla.kernel.org/show_bug.cgi?id=9828

Impact of the bug:  Happens rarely (when shutdown of a device coincides
with creation of another), forces the user to unplug and replug the new
device to get it working.

The fix is obvious:  Free the minor number *after* instead of *before*
device_unregister().  This requires to take an additional reference of
the fw_device as long as the IDR tree points to it.

And while we are at it, we fix an additional race condition:
fw_device_op_open() took its reference of the fw_device a little bit too
late, hence was in danger to access an already invalid fw_device.

Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
---
 drivers/firewire/fw-cdev.c   |    8 +++++---
 drivers/firewire/fw-device.c |   20 ++++++++++++++------
 drivers/firewire/fw-device.h |    2 +-
 3 files changed, 20 insertions(+), 10 deletions(-)

Index: linux/drivers/firewire/fw-device.c
===================================================================
--- linux.orig/drivers/firewire/fw-device.c
+++ linux/drivers/firewire/fw-device.c
@@ -610,12 +610,14 @@ static DECLARE_RWSEM(idr_rwsem);
 static DEFINE_IDR(fw_device_idr);
 int fw_cdev_major;
 
-struct fw_device *fw_device_from_devt(dev_t devt)
+struct fw_device *fw_device_get_by_devt(dev_t devt)
 {
 	struct fw_device *device;
 
 	down_read(&idr_rwsem);
 	device = idr_find(&fw_device_idr, MINOR(devt));
+	if (device)
+		fw_device_get(device);
 	up_read(&idr_rwsem);
 
 	return device;
@@ -627,13 +629,14 @@ static void fw_device_shutdown(struct wo
 		container_of(work, struct fw_device, work.work);
 	int minor = MINOR(device->device.devt);
 
-	down_write(&idr_rwsem);
-	idr_remove(&fw_device_idr, minor);
-	up_write(&idr_rwsem);
-
 	fw_device_cdev_remove(device);
 	device_for_each_child(&device->device, NULL, shutdown_unit);
 	device_unregister(&device->device);
+
+	down_write(&idr_rwsem);
+	idr_remove(&fw_device_idr, minor);
+	up_write(&idr_rwsem);
+	fw_device_put(device);
 }
 
 static struct device_type fw_device_type = {
@@ -682,10 +685,13 @@ static void fw_device_init(struct work_s
 	}
 
 	err = -ENOMEM;
+
+	fw_device_get(device);
 	down_write(&idr_rwsem);
 	if (idr_pre_get(&fw_device_idr, GFP_KERNEL))
 		err = idr_get_new(&fw_device_idr, device, &minor);
 	up_write(&idr_rwsem);
+
 	if (err < 0)
 		goto error;
 
@@ -741,7 +747,9 @@ static void fw_device_init(struct work_s
 	idr_remove(&fw_device_idr, minor);
 	up_write(&idr_rwsem);
  error:
-	put_device(&device->device);
+	fw_device_put(device);		/* fw_device_idr's reference */
+
+	put_device(&device->device);	/* our reference */
 }
 
 static int update_unit(struct device *dev, void *data)
Index: linux/drivers/firewire/fw-cdev.c
===================================================================
--- linux.orig/drivers/firewire/fw-cdev.c
+++ linux/drivers/firewire/fw-cdev.c
@@ -109,15 +109,17 @@ static int fw_device_op_open(struct inod
 	struct client *client;
 	unsigned long flags;
 
-	device = fw_device_from_devt(inode->i_rdev);
+	device = fw_device_get_by_devt(inode->i_rdev);
 	if (device == NULL)
 		return -ENODEV;
 
 	client = kzalloc(sizeof(*client), GFP_KERNEL);
-	if (client == NULL)
+	if (client == NULL) {
+		fw_device_put(device);
 		return -ENOMEM;
+	}
 
-	client->device = fw_device_get(device);
+	client->device = device;
 	INIT_LIST_HEAD(&client->event_list);
 	INIT_LIST_HEAD(&client->resource_list);
 	spin_lock_init(&client->lock);
Index: linux/drivers/firewire/fw-device.h
===================================================================
--- linux.orig/drivers/firewire/fw-device.h
+++ linux/drivers/firewire/fw-device.h
@@ -77,13 +77,13 @@ fw_device_is_shutdown(struct fw_device *
 }
 
 struct fw_device *fw_device_get(struct fw_device *device);
+struct fw_device *fw_device_get_by_devt(dev_t devt);
 void fw_device_put(struct fw_device *device);
 int fw_device_enable_phys_dma(struct fw_device *device);
 
 void fw_device_cdev_update(struct fw_device *device);
 void fw_device_cdev_remove(struct fw_device *device);
 
-struct fw_device *fw_device_from_devt(dev_t devt);
 extern int fw_cdev_major;
 
 struct fw_unit {

-- 
Stefan Richter
-=====-==--- --=- ---=-
http://arcgraph.de/sr/


This should help to interpret user reports.  E.g. one can look up the
vendor OUI (first three bytes of the GUID) and thus tell what is what.

Also simplifies the math in the GUID sysfs attribute.

Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
---
 drivers/firewire/fw-device.c |   28 +++++++++++++++++-----------
 1 file changed, 17 insertions(+), 11 deletions(-)

Index: linux/drivers/firewire/fw-device.c
===================================================================
--- linux.orig/drivers/firewire/fw-device.c
+++ linux/drivers/firewire/fw-device.c
@@ -358,12 +358,9 @@ static ssize_t
 guid_show(struct device *dev, struct device_attribute *attr, char *buf)
 {
 	struct fw_device *device = fw_device(dev);
-	u64 guid;
 
-	guid = ((u64)device->config_rom[3] << 32) | device->config_rom[4];
-
-	return snprintf(buf, PAGE_SIZE, "0x%016llx\n",
-			(unsigned long long)guid);
+	return snprintf(buf, PAGE_SIZE, "0x%08x%08x\n",
+			device->config_rom[3], device->config_rom[4]);
 }
 
 static struct device_attribute fw_device_attributes[] = {
@@ -723,13 +720,22 @@ static void fw_device_init(struct work_s
 	 */
 	if (atomic_cmpxchg(&device->state,
 		    FW_DEVICE_INITIALIZING,
-		    FW_DEVICE_RUNNING) == FW_DEVICE_SHUTDOWN)
+		    FW_DEVICE_RUNNING) == FW_DEVICE_SHUTDOWN) {
 		fw_device_shutdown(&device->work.work);
-	else
-		fw_notify("created new fw device %s "
-			  "(%d config rom retries, S%d00)\n",
-			  device->device.bus_id, device->config_rom_retries,
-			  1 << device->max_speed);
+	} else {
+		if (device->config_rom_retries)
+			fw_notify("created device %s: GUID %08x%08x, S%d00, "
+				  "%d config ROM retries\n",
+				  device->device.bus_id,
+				  device->config_rom[3], device->config_rom[4],
+				  1 << device->max_speed,
+				  device->config_rom_retries);
+		else
+			fw_notify("created device %s: GUID %08x%08x, S%d00\n",
+				  device->device.bus_id,
+				  device->config_rom[3], device->config_rom[4],
+				  1 << device->max_speed);
+	}
 
 	/*
 	 * Reschedule the IRM work if we just finished reading the

-- 
Stefan Richter
-=====-==--- --=- ---==
http://arcgraph.de/sr/


Several different SBP-2 bridges accept a login early while the IDE
device is still powering up.  They are therefore unable to respond to
SCSI INQUIRY immediately, and the SCSI core has to retry the INQUIRY.
One of these retries is typically successful, and all is well.

But in case of Momobay FX-3A, the INQUIRY retries tend to fail entirely.
This can usually be avoided by waiting a little while after login before
letting the SCSI core send the INQUIRY.  The old sbp2 driver handles
this more gracefully for as yet unknown reasons (perhaps because it
waits for fetch agent resets to complete, unlike fw-sbp2 which quickly
proceeds after requesting the agent reset).  Therefore the workaround is
not as much necessary for sbp2.

Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
---
 drivers/firewire/fw-sbp2.c |   15 +++++++++++++++
 1 file changed, 15 insertions(+)

Index: linux/drivers/firewire/fw-sbp2.c
===================================================================
--- linux.orig/drivers/firewire/fw-sbp2.c
+++ linux/drivers/firewire/fw-sbp2.c
@@ -32,6 +32,7 @@
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <linux/mod_devicetable.h>
+#include <linux/delay.h>
 #include <linux/device.h>
 #include <linux/scatterlist.h>
 #include <linux/dma-mapping.h>
@@ -82,6 +83,9 @@ MODULE_PARM_DESC(exclusive_login, "Exclu
  *   Avoids access beyond actual disk limits on devices with an off-by-one bug.
  *   Don't use this with devices which don't have this bug.
  *
+ * - delay inquiry
+ *   Wait extra SBP2_INQUIRY_DELAY seconds after login before SCSI inquiry.
+ *
  * - override internal blacklist
  *   Instead of adding to the built-in blacklist, use only the workarounds
  *   specified in the module load parameter.
@@ -91,6 +95,8 @@ MODULE_PARM_DESC(exclusive_login, "Exclu
 #define SBP2_WORKAROUND_INQUIRY_36	0x2
 #define SBP2_WORKAROUND_MODE_SENSE_8	0x4
 #define SBP2_WORKAROUND_FIX_CAPACITY	0x8
+#define SBP2_WORKAROUND_DELAY_INQUIRY	0x10
+#define SBP2_INQUIRY_DELAY		12
 #define SBP2_WORKAROUND_OVERRIDE	0x100
 
 static int sbp2_param_workarounds;
@@ -100,6 +106,7 @@ MODULE_PARM_DESC(workarounds, "Work arou
 	", 36 byte inquiry = "    __stringify(SBP2_WORKAROUND_INQUIRY_36)
 	", skip mode page 8 = "   __stringify(SBP2_WORKAROUND_MODE_SENSE_8)
 	", fix capacity = "       __stringify(SBP2_WORKAROUND_FIX_CAPACITY)
+	", delay inquiry = "      __stringify(SBP2_WORKAROUND_DELAY_INQUIRY)
 	", override internal blacklist = " __stringify(SBP2_WORKAROUND_OVERRIDE)
 	", or a combination)");
 
@@ -303,6 +310,11 @@ static const struct {
 		.workarounds		= SBP2_WORKAROUND_INQUIRY_36 |
 					  SBP2_WORKAROUND_MODE_SENSE_8,
 	},
+	/* DViCO Momobay FX-3A with TSB42AA9A bridge */ {
+		.firmware_revision	= 0x002800,
+		.model			= 0x000000,
+		.workarounds		= SBP2_WORKAROUND_DELAY_INQUIRY,
+	},
 	/* Initio bridges, actually only needed for some older ones */ {
 		.firmware_revision	= 0x000200,
 		.model			= ~0,
@@ -712,6 +724,9 @@ static void sbp2_login(struct work_struc
 	PREPARE_DELAYED_WORK(&lu->work, sbp2_reconnect);
 	sbp2_agent_reset(lu);
 
+	if (lu->tgt->workarounds & SBP2_WORKAROUND_DELAY_INQUIRY)
+		ssleep(SBP2_INQUIRY_DELAY);
+
 	memset(&eight_bytes_lun, 0, sizeof(eight_bytes_lun));
 	eight_bytes_lun.scsi_lun[0] = (lu->lun >> 8) & 0xff;
 	eight_bytes_lun.scsi_lun[1] = lu->lun & 0xff;

-- 
Stefan Richter
-=====-==--- --=- ---==
http://arcgraph.de/sr/


Add the same workaround as found in fw-sbp2 for feature parity and
compatibility of the workarounds module parameter.

Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
---
 drivers/ieee1394/sbp2.c |   12 ++++++++++++
 drivers/ieee1394/sbp2.h |    2 ++
 2 files changed, 14 insertions(+)

Index: linux/drivers/ieee1394/sbp2.c
===================================================================
--- linux.orig/drivers/ieee1394/sbp2.c
+++ linux/drivers/ieee1394/sbp2.c
@@ -183,6 +183,9 @@ MODULE_PARM_DESC(exclusive_login, "Exclu
  *   Avoids access beyond actual disk limits on devices with an off-by-one bug.
  *   Don't use this with devices which don't have this bug.
  *
+ * - delay inquiry
+ *   Wait extra SBP2_INQUIRY_DELAY seconds after login before SCSI inquiry.
+ *
  * - override internal blacklist
  *   Instead of adding to the built-in blacklist, use only the workarounds
  *   specified in the module load parameter.
@@ -195,6 +198,7 @@ MODULE_PARM_DESC(workarounds, "Work arou
 	", 36 byte inquiry = "    __stringify(SBP2_WORKAROUND_INQUIRY_36)
 	", skip mode page 8 = "   __stringify(SBP2_WORKAROUND_MODE_SENSE_8)
 	", fix capacity = "       __stringify(SBP2_WORKAROUND_FIX_CAPACITY)
+	", delay inquiry = "      __stringify(SBP2_WORKAROUND_DELAY_INQUIRY)
 	", override internal blacklist = " __stringify(SBP2_WORKAROUND_OVERRIDE)
 	", or a combination)");
 
@@ -357,6 +361,11 @@ static const struct {
 		.workarounds		= SBP2_WORKAROUND_INQUIRY_36 |
 					  SBP2_WORKAROUND_MODE_SENSE_8,
 	},
+	/* DViCO Momobay FX-3A with TSB42AA9A bridge */ {
+		.firmware_revision	= 0x002800,
+		.model_id		= 0x000000,
+		.workarounds		= SBP2_WORKAROUND_DELAY_INQUIRY,
+	},
 	/* Initio bridges, actually only needed for some older ones */ {
 		.firmware_revision	= 0x000200,
 		.model_id		= SBP2_ROM_VALUE_WILDCARD,
@@ -914,6 +923,9 @@ static int sbp2_start_device(struct sbp2
 	sbp2_agent_reset(lu, 1);
 	sbp2_max_speed_and_size(lu);
 
+	if (lu->workarounds & SBP2_WORKAROUND_DELAY_INQUIRY)
+		ssleep(SBP2_INQUIRY_DELAY);
+
 	error = scsi_add_device(lu->shost, 0, lu->ud->id, 0);
 	if (error) {
 		SBP2_ERR("scsi_add_device failed");
Index: linux/drivers/ieee1394/sbp2.h
===================================================================
--- linux.orig/drivers/ieee1394/sbp2.h
+++ linux/drivers/ieee1394/sbp2.h
@@ -343,6 +343,8 @@ enum sbp2lu_state_types {
 #define SBP2_WORKAROUND_INQUIRY_36	0x2
 #define SBP2_WORKAROUND_MODE_SENSE_8	0x4
 #define SBP2_WORKAROUND_FIX_CAPACITY	0x8
+#define SBP2_WORKAROUND_DELAY_INQUIRY	0x10
+#define SBP2_INQUIRY_DELAY		12
 #define SBP2_WORKAROUND_OVERRIDE	0x100
 
 #endif /* SBP2_H */

-- 
Stefan Richter
-=====-==--- --=- ---==
http://arcgraph.de/sr/


Like the old sbp2 driver, wait for the write transaction to the
AGENT_RESET to complete before proceeding (after login, after reconnect,
or in SCSI error handling).

There is one occasion where AGENT_RESET is written to from atomic
context when getting DEAD status for a command ORB.  There we still
continue without waiting for the transaction to complete because this
is more difficult to fix...

Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
---
 drivers/firewire/fw-sbp2.c |   39 ++++++++++++++++++++++++++-----------
 1 file changed, 28 insertions(+), 11 deletions(-)

Index: linux/drivers/firewire/fw-sbp2.c
===================================================================
--- linux.orig/drivers/firewire/fw-sbp2.c
+++ linux/drivers/firewire/fw-sbp2.c
@@ -603,29 +603,46 @@ sbp2_send_management_orb(struct sbp2_log
 
 static void
 complete_agent_reset_write(struct fw_card *card, int rcode,
-			   void *payload, size_t length, void *data)
+			   void *payload, size_t length, void *done)
 {
-	struct fw_transaction *t = data;
+	complete(done);
+}
+
+static void sbp2_agent_reset(struct sbp2_logical_unit *lu)
+{
+	struct fw_device *device = fw_device(lu->tgt->unit->device.parent);
+	DECLARE_COMPLETION_ONSTACK(done);
+	struct fw_transaction t;
+	static u32 z;
 
-	kfree(t);
+	fw_send_request(device->card, &t, TCODE_WRITE_QUADLET_REQUEST,
+			lu->tgt->node_id, lu->generation, device->max_speed,
+			lu->command_block_agent_address + SBP2_AGENT_RESET,
+			&z, sizeof(z), complete_agent_reset_write, &done);
+	wait_for_completion(&done);
 }
 
-static int sbp2_agent_reset(struct sbp2_logical_unit *lu)
+static void
+complete_agent_reset_write_no_wait(struct fw_card *card, int rcode,
+				   void *payload, size_t length, void *data)
+{
+	kfree(data);
+}
+
+static void sbp2_agent_reset_no_wait(struct sbp2_logical_unit *lu)
 {
 	struct fw_device *device = fw_device(lu->tgt->unit->device.parent);
 	struct fw_transaction *t;
-	static u32 zero;
+	static u32 z;
 
-	t = kzalloc(sizeof(*t), GFP_ATOMIC);
+	t = kmalloc(sizeof(*t), GFP_ATOMIC);
 	if (t == NULL)
-		return -ENOMEM;
+		return;
 
 	fw_send_request(device->card, t, TCODE_WRITE_QUADLET_REQUEST,
 			lu->tgt->node_id, lu->generation, device->max_speed,
 			lu->command_block_agent_address + SBP2_AGENT_RESET,
-			&zero, sizeof(zero), complete_agent_reset_write, t);
-
-	return 0;
+			&z, sizeof(z), complete_agent_reset_write_no_wait, t);
 }
 
 static void sbp2_release_target(struct kref *kref)
@@ -1110,7 +1127,7 @@ complete_command_orb(struct sbp2_orb *ba
 
 	if (status != NULL) {
 		if (STATUS_GET_DEAD(*status))
-			sbp2_agent_reset(orb->lu);
+			sbp2_agent_reset_no_wait(orb->lu);
 
 		switch (STATUS_GET_RESPONSE(*status)) {
 		case SBP2_STATUS_REQUEST_COMPLETE:

-- 
Stefan Richter
-=====-==--- --=- ---==
http://arcgraph.de/sr/


for easier readable logs if more than one SBP-2 device is present.

Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
---
 drivers/firewire/fw-sbp2.c |   66 ++++++++++++++++++-------------------
 1 file changed, 33 insertions(+), 33 deletions(-)

Index: linux/drivers/firewire/fw-sbp2.c
===================================================================
--- linux.orig/drivers/firewire/fw-sbp2.c
+++ linux/drivers/firewire/fw-sbp2.c
@@ -149,6 +149,7 @@ struct sbp2_target {
 	struct kref kref;
 	struct fw_unit *unit;
 	struct list_head lu_list;
+	const char *bus_id;
 
 	u64 management_agent_address;
 	int directory_id;
@@ -566,20 +567,20 @@ sbp2_send_management_orb(struct sbp2_log
 
 	retval = -EIO;
 	if (sbp2_cancel_orbs(lu) == 0) {
-		fw_error("orb reply timed out, rcode=0x%02x\n",
-			 orb->base.rcode);
+		fw_error("%s: orb reply timed out, rcode=0x%02x\n",
+			 lu->tgt->bus_id, orb->base.rcode);
 		goto out;
 	}
 
 	if (orb->base.rcode != RCODE_COMPLETE) {
-		fw_error("management write failed, rcode 0x%02x\n",
-			 orb->base.rcode);
+		fw_error("%s: management write failed, rcode 0x%02x\n",
+			 lu->tgt->bus_id, orb->base.rcode);
 		goto out;
 	}
 
 	if (STATUS_GET_RESPONSE(orb->status) != 0 ||
 	    STATUS_GET_SBP_STATUS(orb->status) != 0) {
-		fw_error("error status: %d:%d\n",
+		fw_error("%s: error status: %d:%d\n", lu->tgt->bus_id,
 			 STATUS_GET_RESPONSE(orb->status),
 			 STATUS_GET_SBP_STATUS(orb->status));
 		goto out;
@@ -664,7 +665,7 @@ static void sbp2_release_target(struct k
 		kfree(lu);
 	}
 	scsi_remove_host(shost);
-	fw_notify("released %s\n", tgt->unit->device.bus_id);
+	fw_notify("released %s\n", tgt->bus_id);
 
 	put_device(&tgt->unit->device);
 	scsi_host_put(shost);
@@ -693,12 +694,11 @@ static void sbp2_login(struct work_struc
 {
 	struct sbp2_logical_unit *lu =
 		container_of(work, struct sbp2_logical_unit, work.work);
-	struct Scsi_Host *shost =
-		container_of((void *)lu->tgt, struct Scsi_Host, hostdata[0]);
+	struct sbp2_target *tgt = lu->tgt;
+	struct fw_device *device = fw_device(tgt->unit->device.parent);
+	struct Scsi_Host *shost;
 	struct scsi_device *sdev;
 	struct scsi_lun eight_bytes_lun;
-	struct fw_unit *unit = lu->tgt->unit;
-	struct fw_device *device = fw_device(unit->device.parent);
 	struct sbp2_login_response response;
 	int generation, node_id, local_node_id;
 
@@ -715,14 +715,14 @@ static void sbp2_login(struct work_struc
 		if (lu->retries++ < 5)
 			sbp2_queue_work(lu, DIV_ROUND_UP(HZ, 5));
 		else
-			fw_error("failed to login to %s LUN %04x\n",
-				 unit->device.bus_id, lu->lun);
+			fw_error("%s: failed to login to LUN %04x\n",
+				 tgt->bus_id, lu->lun);
 		goto out;
 	}
 
-	lu->generation        = generation;
-	lu->tgt->node_id      = node_id;
-	lu->tgt->address_high = local_node_id << 16;
+	lu->generation    = generation;
+	tgt->node_id	  = node_id;
+	tgt->address_high = local_node_id << 16;
 
 	/* Get command block agent offset and login id. */
 	lu->command_block_agent_address =
@@ -730,8 +730,8 @@ static void sbp2_login(struct work_struc
 		response.command_block_agent.low;
 	lu->login_id = LOGIN_RESPONSE_GET_LOGIN_ID(response);
 
-	fw_notify("logged in to %s LUN %04x (%d retries)\n",
-		  unit->device.bus_id, lu->lun, lu->retries);
+	fw_notify("%s: logged in to LUN %04x (%d retries)\n",
+		  tgt->bus_id, lu->lun, lu->retries);
 
 #if 0
 	/* FIXME: The linux1394 sbp2 does this last step. */
@@ -747,6 +747,7 @@ static void sbp2_login(struct work_struc
 	memset(&eight_bytes_lun, 0, sizeof(eight_bytes_lun));
 	eight_bytes_lun.scsi_lun[0] = (lu->lun >> 8) & 0xff;
 	eight_bytes_lun.scsi_lun[1] = lu->lun & 0xff;
+	shost = container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
 
 	sdev = __scsi_add_device(shost, 0, 0,
 				 scsilun_to_int(&eight_bytes_lun), lu);
@@ -791,7 +792,7 @@ static void sbp2_login(struct work_struc
 	 */
 	PREPARE_DELAYED_WORK(&lu->work, sbp2_login);
  out:
-	sbp2_target_put(lu->tgt);
+	sbp2_target_put(tgt);
 }
 
 static int sbp2_add_logical_unit(struct sbp2_target *tgt, int lun_entry)
@@ -874,7 +875,7 @@ static int sbp2_scan_unit_dir(struct sbp
 			if (timeout > tgt->mgt_orb_timeout)
 				fw_notify("%s: config rom contains %ds "
 					  "management ORB timeout, limiting "
-					  "to %ds\n", tgt->unit->device.bus_id,
+					  "to %ds\n", tgt->bus_id,
 					  timeout / 1000,
 					  tgt->mgt_orb_timeout / 1000);
 			break;
@@ -902,7 +903,7 @@ static void sbp2_init_workarounds(struct
 	if (w)
 		fw_notify("Please notify linux1394-devel at lists.sourceforge.net "
 			  "if you need the workarounds parameter for %s\n",
-			  tgt->unit->device.bus_id);
+			  tgt->bus_id);
 
 	if (w & SBP2_WORKAROUND_OVERRIDE)
 		goto out;
@@ -924,8 +925,7 @@ static void sbp2_init_workarounds(struct
 	if (w)
 		fw_notify("Workarounds for %s: 0x%x "
 			  "(firmware_revision 0x%06x, model_id 0x%06x)\n",
-			  tgt->unit->device.bus_id,
-			  w, firmware_revision, model);
+			  tgt->bus_id, w, firmware_revision, model);
 	tgt->workarounds = w;
 }
 
@@ -949,6 +949,7 @@ static int sbp2_probe(struct device *dev
 	tgt->unit = unit;
 	kref_init(&tgt->kref);
 	INIT_LIST_HEAD(&tgt->lu_list);
+	tgt->bus_id = unit->device.bus_id;
 
 	if (fw_device_enable_phys_dma(device) < 0)
 		goto fail_shost_put;
@@ -999,8 +1000,8 @@ static void sbp2_reconnect(struct work_s
 {
 	struct sbp2_logical_unit *lu =
 		container_of(work, struct sbp2_logical_unit, work.work);
-	struct fw_unit *unit = lu->tgt->unit;
-	struct fw_device *device = fw_device(unit->device.parent);
+	struct sbp2_target *tgt = lu->tgt;
+	struct fw_device *device = fw_device(tgt->unit->device.parent);
 	int generation, node_id, local_node_id;
 
 	if (fw_device_is_shutdown(device))
@@ -1015,8 +1016,7 @@ static void sbp2_reconnect(struct work_s
 				     SBP2_RECONNECT_REQUEST,
 				     lu->login_id, NULL) < 0) {
 		if (lu->retries++ >= 5) {
-			fw_error("failed to reconnect to %s\n",
-				 unit->device.bus_id);
+			fw_error("%s: failed to reconnect\n", tgt->bus_id);
 			/* Fall back and try to log in again. */
 			lu->retries = 0;
 			PREPARE_DELAYED_WORK(&lu->work, sbp2_login);
@@ -1025,17 +1025,17 @@ static void sbp2_reconnect(struct work_s
 		goto out;
 	}
 
-	lu->generation        = generation;
-	lu->tgt->node_id      = node_id;
-	lu->tgt->address_high = local_node_id << 16;
+	lu->generation    = generation;
+	tgt->node_id      = node_id;
+	tgt->address_high = local_node_id << 16;
 
-	fw_notify("reconnected to %s LUN %04x (%d retries)\n",
-		  unit->device.bus_id, lu->lun, lu->retries);
+	fw_notify("%s: reconnected to LUN %04x (%d retries)\n",
+		  tgt->bus_id, lu->lun, lu->retries);
 
 	sbp2_agent_reset(lu);
 	sbp2_cancel_orbs(lu);
  out:
-	sbp2_target_put(lu->tgt);
+	sbp2_target_put(tgt);
 }
 
 static void sbp2_update(struct fw_unit *unit)
@@ -1377,7 +1377,7 @@ static int sbp2_scsi_abort(struct scsi_c
 {
 	struct sbp2_logical_unit *lu = cmd->device->hostdata;
 
-	fw_notify("sbp2_scsi_abort\n");
+	fw_notify("%s: sbp2_scsi_abort\n", lu->tgt->bus_id);
 	sbp2_agent_reset(lu);
 	sbp2_cancel_orbs(lu);
 

-- 
Stefan Richter
-=====-==--- --=- ---==
http://arcgraph.de/sr/


When a reconnect failed but re-login succeeded, __scsi_add_device was
called again.

Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
---
 drivers/firewire/fw-sbp2.c |    6 ++++++
 1 file changed, 6 insertions(+)

Index: linux/drivers/firewire/fw-sbp2.c
===================================================================
--- linux.orig/drivers/firewire/fw-sbp2.c
+++ linux/drivers/firewire/fw-sbp2.c
@@ -741,6 +741,12 @@ static void sbp2_login(struct work_struc
 	PREPARE_DELAYED_WORK(&lu->work, sbp2_reconnect);
 	sbp2_agent_reset(lu);
 
+	/* This was a re-login. */
+	if (lu->sdev) {
+		sbp2_cancel_orbs(lu);
+		goto out;
+	}
+
 	if (lu->tgt->workarounds & SBP2_WORKAROUND_DELAY_INQUIRY)
 		ssleep(SBP2_INQUIRY_DELAY);
 

-- 
Stefan Richter
-=====-==--- --=- ---==
http://arcgraph.de/sr/


If fw-sbp2 was too late with requesting the reconnect, the target would
reject this.  In this case, log out before attempting the reconnect.
Else several firmwares will deny the re-login because they somehow
didn't invalidate the old login.

Also, don't retry reconnects in this situation.  The retries won't
succeed either.

These changes improve chances for successful re-login and shorten the
period during which the logical unit is inaccessible.

Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
---
 drivers/firewire/fw-sbp2.c |   17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

Index: linux/drivers/firewire/fw-sbp2.c
===================================================================
--- linux.orig/drivers/firewire/fw-sbp2.c
+++ linux/drivers/firewire/fw-sbp2.c
@@ -710,6 +710,11 @@ static void sbp2_login(struct work_struc
 	node_id       = device->node_id;
 	local_node_id = device->card->node_id;
 
+	/* If this is a re-login attempt, log out, or we might be rejected. */
+	if (lu->sdev)
+		sbp2_send_management_orb(lu, device->node_id, generation,
+				SBP2_LOGOUT_REQUEST, lu->login_id, NULL);
+
 	if (sbp2_send_management_orb(lu, node_id, generation,
 				SBP2_LOGIN_REQUEST, lu->lun, &response) < 0) {
 		if (lu->retries++ < 5)
@@ -1021,9 +1026,17 @@ static void sbp2_reconnect(struct work_s
 	if (sbp2_send_management_orb(lu, node_id, generation,
 				     SBP2_RECONNECT_REQUEST,
 				     lu->login_id, NULL) < 0) {
-		if (lu->retries++ >= 5) {
+		/*
+		 * If reconnect was impossible even though we are in the
+		 * current generation, fall back and try to log in again.
+		 *
+		 * We could check for "Function rejected" status, but
+		 * looking at the bus generation as simpler and more general.
+		 */
+		smp_rmb(); /* get current card generation */
+		if (generation == device->card->generation ||
+		    lu->retries++ >= 5) {
 			fw_error("%s: failed to reconnect\n", tgt->bus_id);
-			/* Fall back and try to log in again. */
 			lu->retries = 0;
 			PREPARE_DELAYED_WORK(&lu->work, sbp2_login);
 		}

-- 
Stefan Richter
-=====-==--- --=- ---==
http://arcgraph.de/sr/


Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
---
 drivers/firewire/fw-sbp2.c |   14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

Index: linux/drivers/firewire/fw-sbp2.c
===================================================================
--- linux.orig/drivers/firewire/fw-sbp2.c
+++ linux/drivers/firewire/fw-sbp2.c
@@ -28,15 +28,15 @@
  * and many others.
  */
 
+#include <linux/blkdev.h>
+#include <linux/delay.h>
+#include <linux/device.h>
+#include <linux/dma-mapping.h>
 #include <linux/kernel.h>
+#include <linux/mod_devicetable.h>
 #include <linux/module.h>
 #include <linux/moduleparam.h>
-#include <linux/mod_devicetable.h>
-#include <linux/delay.h>
-#include <linux/device.h>
 #include <linux/scatterlist.h>
-#include <linux/dma-mapping.h>
-#include <linux/blkdev.h>
 #include <linux/string.h>
 #include <linux/stringify.h>
 #include <linux/timer.h>
@@ -48,9 +48,9 @@
 #include <scsi/scsi_device.h>
 #include <scsi/scsi_host.h>
 
-#include "fw-transaction.h"
-#include "fw-topology.h"
 #include "fw-device.h"
+#include "fw-topology.h"
+#include "fw-transaction.h"
 
 /*
  * So far only bridges from Oxford Semiconductor are known to support

-- 
Stefan Richter
-=====-==--- --=- ---==
http://arcgraph.de/sr/


While fw-sbp2 takes the necessary time to reconnect to a logical unit
after bus reset, the SCSI core keeps sending new commands.  They are all
immediately completed with host busy status, and application clients or
filesystems will break quickly.  The SCSI device might even be taken
offline:  http://bugzilla.kernel.org/show_bug.cgi?id=9734

The only remedy seems to be to block the SCSI device until reconnect.
Alas the SCSI core has no useful API to block only one logical unit i.e.
the scsi_device, therefore we block the entire Scsi_Host.  This
currently corresponds to an SBP-2 target.  In case of targets with
multiple logical units, we need to satisfy the dependencies between
logical units by carefully tracking the blocking state of the target and
its units.  We block all logical units of a target as soon as one of
them needs to be blocked, and keep them blocked until all of them are
ready to be unblocked.

Furthermore, as the history of the old sbp2 driver has shown, the
scsi_block_requests() API is a minefield with high potential of
deadlocks.  We therefore take extra measures to keep logical units
unblocked during __scsi_add_device() and during shutdown.

Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
---
 drivers/firewire/fw-sbp2.c |   71 +++++++++++++++++++++++++++++++++++--
 1 file changed, 69 insertions(+), 2 deletions(-)

Index: linux/drivers/firewire/fw-sbp2.c
===================================================================
--- linux.orig/drivers/firewire/fw-sbp2.c
+++ linux/drivers/firewire/fw-sbp2.c
@@ -41,6 +41,8 @@
 #include <linux/stringify.h>
 #include <linux/timer.h>
 #include <linux/workqueue.h>
+#include <asm/atomic.h>
+#include <asm/system.h>
 
 #include <scsi/scsi.h>
 #include <scsi/scsi_cmnd.h>
@@ -139,6 +140,7 @@ struct sbp2_logical_unit {
 	int generation;
 	int retries;
 	struct delayed_work work;
+	atomic_t blocked;
 };
 
 /*
@@ -157,6 +159,9 @@ struct sbp2_target {
 	int address_high;
 	unsigned int workarounds;
 	unsigned int mgt_orb_timeout;
+
+	atomic_t dont_block;
+	atomic_t blocked;
 };
 
 /*
@@ -646,6 +651,53 @@ static void sbp2_agent_reset_no_wait(str
 			&z, sizeof(z), complete_agent_reset_write_no_wait, t);
 }
 
+/*
+ * Blocks lu->tgt if all of the following conditions are met:
+ *   - Login, INQUIRY, and high-level SCSI setup of all logical units of the
+ *     target have been successfully finished (indicated by dont_block == 0).
+ *   - The lu->generation is stale.  sbp2_reconnect will unblock lu later.
+ */
+static void sbp2_conditionally_block(struct sbp2_logical_unit *lu)
+{
+	struct fw_card *card = fw_device(lu->tgt->unit->device.parent)->card;
+
+	if (!atomic_read(&lu->tgt->dont_block) &&
+	    lu->generation != card->generation &&
+	    atomic_cmpxchg(&lu->blocked, 0, 1) == 0) {
+
+		/* raise the block count of the target */
+		if (atomic_inc_return(&lu->tgt->blocked) == 1) {
+			scsi_block_requests(lu->sdev->host);
+			fw_notify("blocked %s\n", lu->tgt->bus_id);
+		}
+	}
+}
+
+/* Unblocks lu->tgt as soon as all its logical units can be unblocked. */
+static void sbp2_conditionally_unblock(struct sbp2_logical_unit *lu)
+{
+	if (atomic_cmpxchg(&lu->blocked, 1, 0) == 1) {
+
+		/* lower the block count of the target */
+		if (atomic_dec_and_test(&lu->tgt->blocked)) {
+			scsi_unblock_requests(lu->sdev->host);
+			fw_notify("unblocked %s\n", lu->tgt->bus_id);
+		}
+	}
+}
+
+
+/* Prevents future blocking of tgt and then unblocks it. */
+static void sbp2_unblock(struct sbp2_target *tgt)
+{
+	struct Scsi_Host *shost =
+		container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
+
+	atomic_inc(&tgt->dont_block);
+	smp_wmb();
+	scsi_unblock_requests(shost);
+}
+
 static void sbp2_release_target(struct kref *kref)
 {
 	struct sbp2_target *tgt = container_of(kref, struct sbp2_target, kref);
@@ -653,6 +705,12 @@ static void sbp2_release_target(struct k
 	struct Scsi_Host *shost =
 		container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
 
+	/*
+	 * Make sure that the target is unblocked and won't be blocked anymore
+	 * before scsi_remove_device() is called.  Else it will deadlock.
+	 */
+	sbp2_unblock(tgt);
+
 	list_for_each_entry_safe(lu, next, &tgt->lu_list, link) {
 		if (lu->sdev)
 			scsi_remove_device(lu->sdev);
@@ -717,11 +775,14 @@ static void sbp2_login(struct work_struc
 
 	if (sbp2_send_management_orb(lu, node_id, generation,
 				SBP2_LOGIN_REQUEST, lu->lun, &response) < 0) {
-		if (lu->retries++ < 5)
+		if (lu->retries++ < 5) {
 			sbp2_queue_work(lu, DIV_ROUND_UP(HZ, 5));
-		else
+		} else {
 			fw_error("%s: failed to login to LUN %04x\n",
 				 tgt->bus_id, lu->lun);
+			/* Let any waiting I/O fail from now on. */
+			sbp2_unblock(lu->tgt);
+		}
 		goto out;
 	}
 
@@ -749,6 +810,7 @@ static void sbp2_login(struct work_struc
 	/* This was a re-login. */
 	if (lu->sdev) {
 		sbp2_cancel_orbs(lu);
+		sbp2_conditionally_unblock(lu);
 		goto out;
 	}
 
@@ -786,6 +848,8 @@ static void sbp2_login(struct work_struc
 		 * Can you believe it?  Everything went well.
 		 */
 		lu->sdev = sdev;
+		smp_wmb();  /* We need lu->sdev when we want to block lu. */
+		atomic_dec(&lu->tgt->dont_block);
 		scsi_device_put(sdev);
 		goto out;
 	}
@@ -828,6 +892,7 @@ static int sbp2_add_logical_unit(struct 
 	lu->sdev = NULL;
 	lu->lun  = lun_entry & 0xffff;
 	lu->retries = 0;
+	atomic_inc(&tgt->dont_block);
 	INIT_LIST_HEAD(&lu->orb_list);
 	INIT_DELAYED_WORK(&lu->work, sbp2_login);
 
@@ -1053,6 +1118,7 @@ static void sbp2_reconnect(struct work_s
 
 	sbp2_agent_reset(lu);
 	sbp2_cancel_orbs(lu);
+	sbp2_conditionally_unblock(lu);
  out:
 	sbp2_target_put(tgt);
 }
@@ -1172,6 +1238,7 @@ complete_command_orb(struct sbp2_orb *ba
 		 * or when sending the write (less likely).
 		 */
 		result = DID_BUS_BUSY << 16;
+		sbp2_conditionally_block(orb->lu);
 	}
 
 	dma_unmap_single(device->card->device, orb->base.request_bus,

-- 
Stefan Richter
-=====-==--- --=- ---==
http://arcgraph.de/sr/

Since "fw-sbp2: fix I/O errors during reconnect", a Scsi_Host will be
blocked as soon as a command failed due to bus generation change.  Now
we also block it when fw-core signalled a bus reset via sbp2_update.
This will avoid some command failures and retries (but not all because
commands are injected from tasklet context while sbp2_update runs from
workqueue thread context).

Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
---
 drivers/firewire/fw-sbp2.c |    1 +
 1 file changed, 1 insertion(+)

Index: linux/drivers/firewire/fw-sbp2.c
===================================================================
--- linux.orig/drivers/firewire/fw-sbp2.c
+++ linux/drivers/firewire/fw-sbp2.c
@@ -1135,6 +1135,7 @@ static void sbp2_update(struct fw_unit *
 	 * Iteration over tgt->lu_list is therefore safe here.
 	 */
 	list_for_each_entry(lu, &tgt->lu_list, link) {
+		sbp2_conditionally_block(lu);
 		lu->retries = 0;
 		sbp2_queue_work(lu, 0);
 	}

-- 
Stefan Richter
-=====-==--- --=- --==-
http://arcgraph.de/sr/


fw-sbp2 is unable to reconnect while performing __scsi_add_device
because there is only a single workqueue thread context available for
both at the moment.  This should be fixed eventually.

An actual failure of __scsi_add_device is easy to handle, but an
incomplete execution of __scsi_add_device with an sdev returned would
remain undetected and leave the SBP-2 target unusable.

Therefore we use a workaround:  If there was a bus reset during
__scsi_add_device (i.e. during the SCSI probe), we remove the new sdev
immediately, log out, and attempt login and SCSI probe again.

Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
Signed-off-by: Jarod Wilson <jwilson at redhat.com>
---

The previous patch "firewire: fw-sbp2: retry login if scsi_device was
offlined early" should be folded into this one before upstream
submission.

 drivers/firewire/fw-sbp2.c |   43 ++++++++++++++++---------------------
 1 file changed, 19 insertions(+), 24 deletions(-)

Index: linux/drivers/firewire/fw-sbp2.c
===================================================================
--- linux.orig/drivers/firewire/fw-sbp2.c
+++ linux/drivers/firewire/fw-sbp2.c
@@ -824,36 +824,31 @@ static void sbp2_login(struct work_struc
 
 	sdev = __scsi_add_device(shost, 0, 0,
 				 scsilun_to_int(&eight_bytes_lun), lu);
-	if (IS_ERR(sdev)) {
-		/*
-		 * The most frequent cause for __scsi_add_device() to fail
-		 * is a bus reset while sending the SCSI INQUIRY.  Try again.
-		 */
+	/*
+	 * FIXME:  We are unable to perform reconnects while in sbp2_login().
+	 * Therefore __scsi_add_device() will get into trouble if a bus reset
+	 * happens in parallel.  It will either fail or leave us with an
+	 * unusable sdev.  As a workaround we check for this and retry the
+	 * whole login and SCSI probing.
+	 */
+
+	if (IS_ERR(sdev))
 		goto out_logout_login;
 
-	} else if (sdev->sdev_state == SDEV_OFFLINE) {
-		/*
-		 * FIXME:  We are unable to perform reconnects while in
-		 * sbp2_login().  Therefore __scsi_add_device() will get
-		 * into trouble if a bus reset happens in parallel.
-		 * It will either fail (that's OK, see above) or take sdev
-		 * offline.  Here is a crude workaround for the latter.
-		 */
-		scsi_device_put(sdev);
+	scsi_device_put(sdev);
+
+	smp_rmb(); /* get current card generation */
+	if (generation != device->card->generation) {
 		scsi_remove_device(sdev);
 		goto out_logout_login;
-
-	} else {
-		/*
-		 * Can you believe it?  Everything went well.
-		 */
-		lu->sdev = sdev;
-		smp_wmb();  /* We need lu->sdev when we want to block lu. */
-		atomic_dec(&lu->tgt->dont_block);
-		scsi_device_put(sdev);
-		goto out;
 	}
 
+	/* Everything went well. */
+	lu->sdev = sdev;
+	smp_wmb();  /* We need lu->sdev when we want to block lu. */
+	atomic_dec(&lu->tgt->dont_block);
+	goto out;
+
  out_logout_login:
 	smp_rmb(); /* generation may have changed */
 	generation = device->generation;

-- 
Stefan Richter
-=====-==--- --=- -=---
http://arcgraph.de/sr/



linux-2.6-libata-pegasos-fix.patch:

--- NEW FILE linux-2.6-libata-pegasos-fix.patch ---
>From olaf at aepfle.de Mon Jan 21 20:39:30 2008
From: Olaf Hering <olaf at aepfle.de>
Subject: revert chrp_pci_fixup_vt8231_ata devinit to fix libata on pegasos
Date: Mon, 21 Jan 2008 20:39:30 +1100
X-Patchwork-ID: 16281

commit 6d98bda79bea0e1be26c0767d0e9923ad3b72f2e changed the init order
for chrp_pci_fixup_vt8231_ata()
It can not work anymore because either the irq is not yet set to 14 or
pci_get_device() returns nothing. At least the printk() in
chrp_pci_fixup_vt8231_ata() does not trigger anymore.
pata_via works again on Pegasos with the change below.

Signed-off-by: Olaf Hering <olaf at aepfle.de>


---
--- a/arch/powerpc/platforms/chrp/pci.c
+++ b/arch/powerpc/platforms/chrp/pci.c
@@ -354,7 +354,7 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_WI
  * mode as well. The same fixup must be done to the class-code property in
  * the IDE node /pci at 80000000/ide at C,1
  */
-static void __devinit chrp_pci_fixup_vt8231_ata(struct pci_dev *viaide)
+static void chrp_pci_fixup_vt8231_ata(struct pci_dev *viaide)
 {
 	u8 progif;
 	struct pci_dev *viaisa;
@@ -375,4 +375,4 @@ static void __devinit chrp_pci_fixup_vt8
 
 	pci_dev_put(viaisa);
 }
-DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, chrp_pci_fixup_vt8231_ata);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, chrp_pci_fixup_vt8231_ata);


linux-2.6-netdev-atl2.patch:

--- NEW FILE linux-2.6-netdev-atl2.patch ---
diff -Nurp a/drivers/net/atl2/atl2_ethtool.c b/drivers/net/atl2/atl2_ethtool.c
--- a/drivers/net/atl2/atl2_ethtool.c	1969-12-31 19:00:00.000000000 -0500
+++ b/drivers/net/atl2/atl2_ethtool.c	2007-12-10 12:45:39.000000000 -0500
@@ -0,0 +1,416 @@
+/* atl2_ethtool.c -- atl2 ethtool support
+ *
+ * Copyright(c) 2007 Atheros Corporation. All rights reserved.
+ * Copyright(c) 2006 xiong huang <xiong.huang at atheros.com>
+ * Copyright(c) 2007 Chris Snook <csnook at redhat.com>
+ *
+ * Derived from Intel e1000 driver
+ * Copyright(c) 1999 - 2005 Intel Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59
+ * Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#include <linux/bitops.h>
+#include <linux/ethtool.h>
+#include <linux/mii.h>
+#include <linux/netdevice.h>
+#include <linux/slab.h>
+#include <linux/string.h>
+#include <linux/types.h>
+
+#include "atl2.h"
+#include "atl2_hw.h"
+
+extern char atl2_driver_name[];
+extern char atl2_driver_version[];
+
+extern int atl2_up(struct atl2_adapter *adapter);
+extern void atl2_down(struct atl2_adapter *adapter);
+extern void atl2_reinit_locked(struct atl2_adapter *adapter);
+extern s32 atl2_reset_hw(struct atl2_hw *hw);
+
+static int
+atl2_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
+{
+	struct atl2_adapter *adapter = netdev_priv(netdev);
+	struct atl2_hw *hw = &adapter->hw;
+
+	ecmd->supported = (SUPPORTED_10baseT_Half |
+		SUPPORTED_10baseT_Full |
+		SUPPORTED_100baseT_Half |
+		SUPPORTED_100baseT_Full |
+		SUPPORTED_Autoneg |
+		SUPPORTED_TP);
+	ecmd->advertising = ADVERTISED_TP;
+
+	ecmd->advertising |= ADVERTISED_Autoneg;
+	ecmd->advertising |= hw->autoneg_advertised;
+
+	ecmd->port = PORT_TP;
+	ecmd->phy_address = 0;
+	ecmd->transceiver = XCVR_INTERNAL;
+
+	if (adapter->link_speed != SPEED_0) {
+		ecmd->speed = adapter->link_speed;
+		if (adapter->link_duplex == FULL_DUPLEX)
+			ecmd->duplex = DUPLEX_FULL;
+		else
+			ecmd->duplex = DUPLEX_HALF;
+	} else {
+		ecmd->speed = -1;
+		ecmd->duplex = -1;
+	}
+
+	ecmd->autoneg = AUTONEG_ENABLE;
+	return 0;
+}
+
+static int
+atl2_set_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
+{
+	struct atl2_adapter *adapter = netdev_priv(netdev);
+	struct atl2_hw *hw = &adapter->hw;
+
+	while (test_and_set_bit(__ATL2_RESETTING, &adapter->flags))
+		msleep(1);
+
+	if (ecmd->autoneg == AUTONEG_ENABLE) {
+#define MY_ADV_MASK	(ADVERTISE_10_HALF| \
+					 ADVERTISE_10_FULL| \
+					 ADVERTISE_100_HALF| \
+					 ADVERTISE_100_FULL)
+
+		if ((ecmd->advertising&MY_ADV_MASK) == MY_ADV_MASK) {
+			hw->MediaType = MEDIA_TYPE_AUTO_SENSOR;
+			hw->autoneg_advertised =  MY_ADV_MASK;
+		} else if ((ecmd->advertising&MY_ADV_MASK) == ADVERTISE_100_FULL) {
+			hw->MediaType = MEDIA_TYPE_100M_FULL;
+			hw->autoneg_advertised = ADVERTISE_100_FULL;
+		} else if ((ecmd->advertising&MY_ADV_MASK) == ADVERTISE_100_HALF) {
+			hw->MediaType = MEDIA_TYPE_100M_HALF;
+			hw->autoneg_advertised = ADVERTISE_100_HALF;
+		} else if ((ecmd->advertising&MY_ADV_MASK) == ADVERTISE_10_FULL) {
+			hw->MediaType = MEDIA_TYPE_10M_FULL;
+			hw->autoneg_advertised = ADVERTISE_10_FULL;
+		}  else if ((ecmd->advertising&MY_ADV_MASK) == ADVERTISE_10_HALF) {
+			hw->MediaType = MEDIA_TYPE_10M_HALF;
+			hw->autoneg_advertised = ADVERTISE_10_HALF;
+		} else {
+			clear_bit(__ATL2_RESETTING, &adapter->flags);
+			return -EINVAL;
+		}
+		ecmd->advertising = hw->autoneg_advertised |
+			ADVERTISED_TP | ADVERTISED_Autoneg;
+	} else {
+		clear_bit(__ATL2_RESETTING, &adapter->flags);
+		return -EINVAL;
+	}
+
+	/* reset the link */
+	if (netif_running(adapter->netdev)) {
+		atl2_down(adapter);
+		atl2_up(adapter);
+	} else
+		atl2_reset_hw(&adapter->hw);
+
+	clear_bit(__ATL2_RESETTING, &adapter->flags);
+	return 0;
+}
+
+static u32
+atl2_get_tx_csum(struct net_device *netdev)
+{
+	return (netdev->features & NETIF_F_HW_CSUM) != 0;
+}
+
+static u32
+atl2_get_msglevel(struct net_device *netdev)
+{
+	return 0;
+}
+
+/*
+ * It's sane for this to be empty, but we might want to take advantage of this.
+ */
+static void
+atl2_set_msglevel(struct net_device *netdev, u32 data)
+{
+}
+
+static int
+atl2_get_regs_len(struct net_device *netdev)
+{
+#define ATL2_REGS_LEN 42
+	return ATL2_REGS_LEN * sizeof(u32);
+}
+
+static void
+atl2_get_regs(struct net_device *netdev, struct ethtool_regs *regs, void *p)
+{
+	struct atl2_adapter *adapter = netdev_priv(netdev);
+	struct atl2_hw *hw = &adapter->hw;
+	u32 *regs_buff = p;
+	u16 phy_data;
+
+	memset(p, 0, ATL2_REGS_LEN * sizeof(u32));
+
+	regs->version = (1 << 24) | (hw->revision_id << 16) | hw->device_id;
+
+	regs_buff[0]  = ATL2_READ_REG(hw, REG_VPD_CAP);
+	regs_buff[1]  = ATL2_READ_REG(hw, REG_SPI_FLASH_CTRL);
+	regs_buff[2]  = ATL2_READ_REG(hw, REG_SPI_FLASH_CONFIG);
+	regs_buff[3]  = ATL2_READ_REG(hw, REG_TWSI_CTRL);
+	regs_buff[4]  = ATL2_READ_REG(hw, REG_PCIE_DEV_MISC_CTRL);
+	regs_buff[5]  = ATL2_READ_REG(hw, REG_MASTER_CTRL);
+	regs_buff[6]  = ATL2_READ_REG(hw, REG_MANUAL_TIMER_INIT);
+	regs_buff[7]  = ATL2_READ_REG(hw, REG_IRQ_MODU_TIMER_INIT);
+	regs_buff[8]  = ATL2_READ_REG(hw, REG_PHY_ENABLE);
+	regs_buff[9]  = ATL2_READ_REG(hw, REG_CMBDISDMA_TIMER);
+	regs_buff[10] = ATL2_READ_REG(hw, REG_IDLE_STATUS);
+	regs_buff[11] = ATL2_READ_REG(hw, REG_MDIO_CTRL);
+	regs_buff[12] = ATL2_READ_REG(hw, REG_SERDES_LOCK);
+	regs_buff[13] = ATL2_READ_REG(hw, REG_MAC_CTRL);
+	regs_buff[14] = ATL2_READ_REG(hw, REG_MAC_IPG_IFG);
+	regs_buff[15] = ATL2_READ_REG(hw, REG_MAC_STA_ADDR);
+	regs_buff[16] = ATL2_READ_REG(hw, REG_MAC_STA_ADDR+4);
+	regs_buff[17] = ATL2_READ_REG(hw, REG_RX_HASH_TABLE);
+	regs_buff[18] = ATL2_READ_REG(hw, REG_RX_HASH_TABLE+4);
+	regs_buff[19] = ATL2_READ_REG(hw, REG_MAC_HALF_DUPLX_CTRL);
+	regs_buff[20] = ATL2_READ_REG(hw, REG_MTU);
+	regs_buff[21] = ATL2_READ_REG(hw, REG_WOL_CTRL);
+	regs_buff[22] = ATL2_READ_REG(hw, REG_SRAM_TXRAM_END);
+	regs_buff[23] = ATL2_READ_REG(hw, REG_DESC_BASE_ADDR_HI);
+	regs_buff[24] = ATL2_READ_REG(hw, REG_TXD_BASE_ADDR_LO);
[...3961 lines suppressed...]
+		case enable_option:
+			switch (*value) {
+				case OPTION_ENABLED:
+					printk(KERN_INFO "%s Enabled\n", opt->name);
+					return 0;
+					break;
+				case OPTION_DISABLED:
+					printk(KERN_INFO "%s Disabled\n", opt->name);
+					return 0;
+					break;
+			}
+			break;
+		case range_option:
+			if(*value >= opt->arg.r.min && *value <= opt->arg.r.max) {
+				printk(KERN_INFO "%s set to %i\n", opt->name, *value);
+				return 0;
+			}
+			break;
+		case list_option:
+			for(i = 0; i < opt->arg.l.nr; i++) {
+				ent = &opt->arg.l.p[i];
+				if(*value == ent->i) {
+					if(ent->str[0] != '\0')
+						printk(KERN_INFO "%s\n", ent->str);
+				return 0;
+				}
+			}
+			break;
+		default:
+			BUG();
+	}
+
+	printk(KERN_INFO "Invalid %s specified (%i) %s\n",
+		opt->name, *value, opt->err);
+	*value = opt->def;
+	return -1;
+}
+
+/**
+ * atl2_check_options - Range Checking for Command Line Parameters
+ * @adapter: board private structure
+ *
+ * This routine checks all command line parameters for valid user
+ * input.  If an invalid value is given, or if no user specified
+ * value exists, a default value is used.  The final value is stored
+ * in a variable in the adapter structure.
+ **/
+void __devinit
+atl2_check_options(struct atl2_adapter *adapter)
+{
+	int val;
+	struct atl2_option opt;
+	int bd = adapter->bd_number;
+	if(bd >= ATL2_MAX_NIC) {
+		printk(KERN_NOTICE "Warning: no configuration for board #%i\n", bd);
+		printk(KERN_NOTICE "Using defaults for all values\n");
+#ifndef module_param_array
+		bd = ATL2_MAX_NIC;
+#endif
+	}
+
+	/* Bytes of Transmit Memory */
+	opt.type = range_option;
+	opt.name = "Bytes of Transmit Memory";
+	opt.err = "using default of " __MODULE_STRING(ATL2_DEFAULT_TX_MEMSIZE);
+	opt.def = ATL2_DEFAULT_TX_MEMSIZE;
+	opt.arg.r.min = ATL2_MIN_TX_MEMSIZE;
+	opt.arg.r.max = ATL2_MAX_TX_MEMSIZE;
+#ifdef module_param_array
+	if(num_TxMemSize > bd) {
+#endif
+		val = TxMemSize[bd];
+		atl2_validate_option(&val, &opt);
+		adapter->txd_ring_size = ((u32) val) * 1024;
+#ifdef module_param_array
+        } else {
+		adapter->txd_ring_size = ((u32)opt.def) * 1024;
+	}
+#endif
+	// txs ring size:
+	adapter->txs_ring_size = adapter->txd_ring_size / 128;
+	if (adapter->txs_ring_size > 160)
+		adapter->txs_ring_size = 160;
+
+	/* Receive Memory Block Count */
+	opt.type = range_option;
+	opt.name = "Number of receive memory block";
+	opt.err = "using default of " __MODULE_STRING(ATL2_DEFAULT_RXD_COUNT);
+	opt.def = ATL2_DEFAULT_RXD_COUNT;
+	opt.arg.r.min = ATL2_MIN_RXD_COUNT;
+	opt.arg.r.max = ATL2_MAX_RXD_COUNT;
+#ifdef module_param_array
+	if(num_RxMemBlock > bd) {
+#endif
+		val = RxMemBlock[bd];
+		atl2_validate_option(&val, &opt);
+		adapter->rxd_ring_size = (u32)val; //((u16)val)&~1; // even number
+#ifdef module_param_array
+	} else {
+		adapter->rxd_ring_size = (u32)opt.def;
+	}
+#endif
+	// init RXD Flow control value
+	adapter->hw.fc_rxd_hi = (adapter->rxd_ring_size/8)*7;
+	adapter->hw.fc_rxd_lo = (ATL2_MIN_RXD_COUNT/8) > (adapter->rxd_ring_size/12) ?
+		(ATL2_MIN_RXD_COUNT/8) : (adapter->rxd_ring_size/12);
+
+	/* Interrupt Moderate Timer */
+	opt.type = range_option;
+	opt.name = "Interrupt Moderate Timer";
+	opt.err = "using default of " __MODULE_STRING(INT_MOD_DEFAULT_CNT);
+	opt.def = INT_MOD_DEFAULT_CNT;
+	opt.arg.r.min = INT_MOD_MIN_CNT;
+	opt.arg.r.max = INT_MOD_MAX_CNT;
+#ifdef module_param_array
+	if(num_IntModTimer > bd) {
+#endif
+		val = IntModTimer[bd];
+		atl2_validate_option(&val, &opt);
+		adapter->imt = (u16) val;
+#ifdef module_param_array
+	} else {
+		adapter->imt = (u16)(opt.def);
+	}
+#endif
+	/* Flash Vendor */
+	opt.type = range_option;
+	opt.name = "SPI Flash Vendor";
+	opt.err = "using default of " __MODULE_STRING(FLASH_VENDOR_DEFAULT);
+	opt.def = FLASH_VENDOR_DEFAULT;
+	opt.arg.r.min = FLASH_VENDOR_MIN;
+	opt.arg.r.max = FLASH_VENDOR_MAX;
+#ifdef module_param_array
+	if(num_FlashVendor > bd) {
+#endif
+		val = FlashVendor[bd];
+		atl2_validate_option(&val, &opt);
+		adapter->hw.flash_vendor = (u8) val;
+#ifdef module_param_array
+	} else {
+		adapter->hw.flash_vendor = (u8)(opt.def);
+	}
+#endif
+	/* MediaType */
+	opt.type = range_option;
+	opt.name = "Speed/Duplex Selection";
+	opt.err = "using default of " __MODULE_STRING(MEDIA_TYPE_AUTO_SENSOR);
+	opt.def = MEDIA_TYPE_AUTO_SENSOR;
+	opt.arg.r.min = MEDIA_TYPE_AUTO_SENSOR;
+	opt.arg.r.max = MEDIA_TYPE_10M_HALF;
+#ifdef module_param_array
+	if(num_MediaType > bd) {
+#endif
+		val = MediaType[bd];
+		atl2_validate_option(&val, &opt);
+		adapter->hw.MediaType = (u16) val;
+#ifdef module_param_array
+	} else {
+		adapter->hw.MediaType = (u16)(opt.def);
+	}
+#endif
+}
diff -Nurp a/drivers/net/atl2/Makefile b/drivers/net/atl2/Makefile
--- a/drivers/net/atl2/Makefile	1969-12-31 19:00:00.000000000 -0500
+++ b/drivers/net/atl2/Makefile	2008-01-31 14:37:35.000000000 -0500
@@ -0,0 +1,2 @@
+obj-$(CONFIG_ATL2)	+= atl2.o
+atl2-y			+= atl2_main.o atl2_hw.o atl2_ethtool.o atl2_param.o
diff -Nurp a/drivers/net/Kconfig b/drivers/net/Kconfig
--- a/drivers/net/Kconfig	2008-01-31 14:32:05.000000000 -0500
+++ b/drivers/net/Kconfig	2008-01-31 14:44:01.000000000 -0500
@@ -1999,6 +1999,17 @@ config NE_H8300
 	  Say Y here if you want to use the NE2000 compatible
 	  controller on the Renesas H8/300 processor.
 
+config ATL2
+	tristate "Atheros L2 Fast Ethernet support (EXPERIMENTAL)"
+	depends on PCI && EXPERIMENTAL
+	select CRC32
+	select MII
+	help
+	  This driver supports the Atheros L2 fast ethernet adapter.
+
+	  To compile this driver as a module, choose M here.  The module
+	  will be called atl2.
+
 source "drivers/net/fec_8xx/Kconfig"
 source "drivers/net/fs_enet/Kconfig"
 
diff -Nurp a/drivers/net/Makefile b/drivers/net/Makefile
--- a/drivers/net/Makefile	2008-01-31 14:32:05.000000000 -0500
+++ b/drivers/net/Makefile	2008-01-31 14:38:52.000000000 -0500
@@ -11,6 +11,7 @@ obj-$(CONFIG_CHELSIO_T3) += cxgb3/
 obj-$(CONFIG_EHEA) += ehea/
 obj-$(CONFIG_BONDING) += bonding/
 obj-$(CONFIG_ATL1) += atl1/
+obj-$(CONFIG_ATL2) += atl2/
 obj-$(CONFIG_GIANFAR) += gianfar_driver.o
 obj-$(CONFIG_TEHUTI) += tehuti.o
 

linux-2.6-netdev-bonding-fix-null-deref.patch:

--- NEW FILE linux-2.6-netdev-bonding-fix-null-deref.patch ---
From: Jay Vosburgh <fubar at us.ibm.com>
Date: Wed, 30 Jan 2008 02:07:45 +0000 (-0800)
Subject: bonding: fix NULL pointer deref in startup processing
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fjgarzik%2Fnetdev-2.6.git;a=commitdiff_plain;h=5eb71eec3616b0a62e63197016576a74da240c6b

bonding: fix NULL pointer deref in startup processing

	Fix the "are we creating a duplicate" check to not compare
the name if the name is NULL (meaning that the system should select
a name).  Bug reported by Benny Amorsen <benny+usenet at amorsen.dk>.

Signed-off-by: Jay Vosburgh <fubar at us.ibm.com>
Signed-off-by: Jeff Garzik <jeff at garzik.org>
---

diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 65c7eba..81b4574 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -4896,14 +4896,16 @@ int bond_create(char *name, struct bond_params *params, struct bonding **newbond
 	down_write(&bonding_rwsem);
 
 	/* Check to see if the bond already exists. */
-	list_for_each_entry_safe(bond, nxt, &bond_dev_list, bond_list)
-		if (strnicmp(bond->dev->name, name, IFNAMSIZ) == 0) {
-			printk(KERN_ERR DRV_NAME
+	if (name) {
+		list_for_each_entry_safe(bond, nxt, &bond_dev_list, bond_list)
+			if (strnicmp(bond->dev->name, name, IFNAMSIZ) == 0) {
+				printk(KERN_ERR DRV_NAME
 			       ": cannot add bond %s; it already exists\n",
-			       name);
-			res = -EPERM;
-			goto out_rtnl;
-		}
+				       name);
+				res = -EPERM;
+				goto out_rtnl;
+			}
+	}
 
 	bond_dev = alloc_netdev(sizeof(struct bonding), name ? name : "",
 				ether_setup);

linux-2.6-pasemi-for-2.6.25.patch:

--- NEW FILE linux-2.6-pasemi-for-2.6.25.patch ---
commit a7fe365fc5de83d07fad485f4e298b2ce351e74c
Author: Olof Johansson <olof at lixom.net>
Date:   Sun Dec 2 22:35:25 2007 -0600

    [POWERPC] pasemi: Fix module information for gpio-mdio
    
    Fix up the module information for gpio-mdio, it wouldn't load
    because of lacking license, and wouldn't auto-load because of missing
    MODULE_DEVICE_TABLE.
    
    Signed-off-by: Olof Johansson <olof at lixom.net>

commit d4979a554a2371d45822e9904f94cf94f7852258
Author: Olof Johansson <olof at lixom.net>
Date:   Fri Nov 30 17:42:11 2007 -0600

    [POWERPC] pasemi: Register i2c_board_info
    
    Setup i2c_board_info based on device tree contents. This has to be
    a device_initcall since we need PCI to be probed by the time we
    run it, but before the actual driver is initialized.
    
    Signed-off-by: Olof Johansson <olof at lixom.net>

commit f84d132e591691d859afaebd6a63073588dc8d97
Author: Olof Johansson <olof at lixom.net>
Date:   Thu Nov 29 21:32:38 2007 -0600

    [POWERPC] Consolidate compatible-to-i2c_boardinfo mapping code
    
    Move the mapping from device tree compatible field to i2c_boardinfo
    structures for powerpc, since several platforms now use this.
    
    Signed-off-by: Olof Johansson <olof at lixom.net>

commit 32e2b55eec7116a859b384dbcc4b52a54a156869
Author: Olof Johansson <olof at lixom.net>
Date:   Wed Nov 7 09:31:06 2007 -0600

    [POWERPC] pasemi: Move cpus to hold loop before restart
    
    Use smp_send_stop() to move all cpus besides the one executing reboot
    into a hold loop, to keep them from being in powersavings mode at the
    time of reboot.
    
    Signed-off-by: Olof Johansson <olof at lixom.net>

commit 8b32bc03256c82a6a4fcb3c2520b54469b74ec82
Author: Olof Johansson <olof at lixom.net>
Date:   Wed Nov 7 09:26:06 2007 -0600

    [POWERPC] pasemi: Don't enter powersaving states from elevated astates
    
    When the PWRficient cpus are entered into powersavings states, the
    astate is automatically dropped down to 0. While we still restore it
    when we come out of idle, it can still cause some weird effects with
    respect to performance (especially since it takes a while to ramp up to
    higher astates).
    
    So, to avoid this, don't enter power savings when the cpufreq driver
    (or user) has set higher astates than 0.
    
    The restore is still required, since there's a chance the astate has
    been raised from the other cpu while the idling one was asleep.
    
    Signed-off-by: Olof Johansson <olof at lixom.net>

commit 0d08a84770cb03aea24268e515342d44df8ea588
Author: Olof Johansson <olof at lixom.net>
Date:   Sun Nov 4 20:57:45 2007 -0600

    [POWERPC] pasemi: Broaden specific references to 1682M
    
    There will be more product numbers in the future than just PA6T-1682M,
    but they will share much of the features. Remove some of the explicit
    references and compatibility checks with 1682M, and replace most of them
    with the more generic term "PWRficient".
    
    Signed-off-by: Olof Johansson <olof at lixom.net>
    Acked-by: Michael Buesch <mb at bu3sch.de>
    Acked-by: Doug Thompson <dougthompson at xmission.com>

commit 2dd3c0016090543e12aa0c5aee574ded6a88b886
Author: Olof Johansson <olof at lixom.net>
Date:   Sun Nov 4 15:44:15 2007 -0600

    [POWERPC] pasemi: clean up mdio_gpio a bit
    
    Misc cleanups of mdio_gpio:
    * Better error handling/unrolling in case of init/alloc failures
    * Go through child nodes and get their interrupts instead of using
      hardcoded values
    * Remap the GPIO registers at module load/driver init instead of during probe
    * Coding style and other misc cleanups
    
    Signed-off-by: Olof Johansson <olof at lixom.net>
diff --git a/arch/powerpc/platforms/pasemi/Kconfig b/arch/powerpc/platforms/pasemi/Kconfig
index 735e153..2f4dd6e 100644
--- a/arch/powerpc/platforms/pasemi/Kconfig
+++ b/arch/powerpc/platforms/pasemi/Kconfig
@@ -17,7 +17,7 @@ config PPC_PASEMI_IOMMU
 	bool "PA Semi IOMMU support"
 	depends on PPC_PASEMI
 	help
-	  IOMMU support for PA6T-1682M
+	  IOMMU support for PA Semi PWRficient
 
 config PPC_PASEMI_IOMMU_DMA_FORCE
 	bool "Force DMA engine to use IOMMU"
diff --git a/arch/powerpc/platforms/pasemi/Makefile b/arch/powerpc/platforms/pasemi/Makefile
index f47fcac..6b8af1f 100644
--- a/arch/powerpc/platforms/pasemi/Makefile
+++ b/arch/powerpc/platforms/pasemi/Makefile
@@ -1,4 +1,4 @@
-obj-y	+= setup.o pci.o time.o idle.o powersave.o iommu.o
+obj-y	+= setup.o pci.o time.o idle.o powersave.o iommu.o misc.o
 obj-$(CONFIG_PPC_PASEMI_MDIO)	+= gpio_mdio.o
 obj-$(CONFIG_ELECTRA_IDE) += electra_ide.o
 obj-$(CONFIG_PPC_PASEMI_CPUFREQ) += cpufreq.o
diff --git a/arch/powerpc/platforms/pasemi/cpufreq.c b/arch/powerpc/platforms/pasemi/cpufreq.c
index 1cfb8b0..58556b0 100644
--- a/arch/powerpc/platforms/pasemi/cpufreq.c
+++ b/arch/powerpc/platforms/pasemi/cpufreq.c
@@ -32,6 +32,7 @@
 #include <asm/io.h>
 #include <asm/prom.h>
 #include <asm/time.h>
+#include <asm/smp.h>
 
 #define SDCASR_REG		0x0100
 #define SDCASR_REG_STRIDE	0x1000
@@ -124,6 +125,11 @@ static void set_astate(int cpu, unsigned int astate)
 	local_irq_restore(flags);
 }
 
+int check_astate(void)
+{
+	return get_cur_astate(hard_smp_processor_id());
+}
+
 void restore_astate(int cpu)
 {
 	set_astate(cpu, current_astate);
@@ -147,7 +153,10 @@ static int pas_cpufreq_cpu_init(struct cpufreq_policy *policy)
 	if (!cpu)
 		goto out;
 
-	dn = of_find_compatible_node(NULL, "sdc", "1682m-sdc");
+	dn = of_find_compatible_node(NULL, NULL, "1682m-sdc");
+	if (!dn)
+		dn = of_find_compatible_node(NULL, NULL,
+					     "pasemi,pwrficient-sdc");
 	if (!dn)
 		goto out;
 	err = of_address_to_resource(dn, 0, &res);
@@ -160,7 +169,10 @@ static int pas_cpufreq_cpu_init(struct cpufreq_policy *policy)
 		goto out;
 	}
 
-	dn = of_find_compatible_node(NULL, "gizmo", "1682m-gizmo");
+	dn = of_find_compatible_node(NULL, NULL, "1682m-gizmo");
+	if (!dn)
+		dn = of_find_compatible_node(NULL, NULL,
+					     "pasemi,pwrficient-gizmo");
 	if (!dn) {
 		err = -ENODEV;
 		goto out_unmap_sdcasr;
@@ -292,7 +304,8 @@ static struct cpufreq_driver pas_cpufreq_driver = {
 
 static int __init pas_cpufreq_init(void)
 {
-	if (!machine_is_compatible("PA6T-1682M"))
+	if (!machine_is_compatible("PA6T-1682M") &&
+	    !machine_is_compatible("pasemi,pwrficient"))
 		return -ENODEV;
 
 	return cpufreq_register_driver(&pas_cpufreq_driver);
diff --git a/arch/powerpc/platforms/pasemi/gpio_mdio.c b/arch/powerpc/platforms/pasemi/gpio_mdio.c
index dae9f65..04a8686 100644
--- a/arch/powerpc/platforms/pasemi/gpio_mdio.c
+++ b/arch/powerpc/platforms/pasemi/gpio_mdio.c
@@ -218,45 +218,27 @@ static int __devinit gpio_mdio_probe(struct of_device *ofdev,
 				     const struct of_device_id *match)
 {
 	struct device *dev = &ofdev->dev;
-	struct device_node *np = ofdev->node;
-	struct device_node *gpio_np;
+	struct device_node *phy_dn, *np = ofdev->node;
 	struct mii_bus *new_bus;
-	struct resource res;
 	struct gpio_priv *priv;
 	const unsigned int *prop;
-	int err = 0;
+	int err;
 	int i;
 
-	gpio_np = of_find_compatible_node(NULL, "gpio", "1682m-gpio");
-
-	if (!gpio_np)
-		return -ENODEV;
-
-	err = of_address_to_resource(gpio_np, 0, &res);
-	of_node_put(gpio_np);
-
-	if (err)
-		return -EINVAL;
-
-	if (!gpio_regs)
-		gpio_regs = ioremap(res.start, 0x100);
-
-	if (!gpio_regs)
-		return -EPERM;
-
+	err = -ENOMEM;
 	priv = kzalloc(sizeof(struct gpio_priv), GFP_KERNEL);
-	if (priv == NULL)
-		return -ENOMEM;
+	if (!priv)
+		goto out;
 
 	new_bus = kzalloc(sizeof(struct mii_bus), GFP_KERNEL);
 
-	if (new_bus == NULL)
-		return -ENOMEM;
+	if (!new_bus)
+		goto out_free_priv;
 
-	new_bus->name = "pasemi gpio mdio bus",
-	new_bus->read = &gpio_mdio_read,
-	new_bus->write = &gpio_mdio_write,
-	new_bus->reset = &gpio_mdio_reset,
+	new_bus->name = "pasemi gpio mdio bus";
+	new_bus->read = &gpio_mdio_read;
+	new_bus->write = &gpio_mdio_write;
+	new_bus->reset = &gpio_mdio_reset;
 
 	prop = of_get_property(np, "reg", NULL);
 	new_bus->id = *prop;
@@ -265,9 +247,24 @@ static int __devinit gpio_mdio_probe(struct of_device *ofdev,
 	new_bus->phy_mask = 0;
 
 	new_bus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
-	for(i = 0; i < PHY_MAX_ADDR; ++i)
-		new_bus->irq[i] = irq_create_mapping(NULL, 10);
 
+	if (!new_bus->irq)
+		goto out_free_bus;
+
+	for (i = 0; i < PHY_MAX_ADDR; i++)
+		new_bus->irq[i] = NO_IRQ;
+
+	for (phy_dn = of_get_next_child(np, NULL);
+	     phy_dn != NULL;
+	     phy_dn = of_get_next_child(np, phy_dn)) {
+		const unsigned int *ip, *regp;
+
+		ip = of_get_property(phy_dn, "interrupts", NULL);
+		regp = of_get_property(phy_dn, "reg", NULL);
+		if (!ip || !regp || *regp >= PHY_MAX_ADDR)
+			continue;
+		new_bus->irq[*regp] = irq_create_mapping(NULL, *ip);
+	}
 
 	prop = of_get_property(np, "mdc-pin", NULL);
 	priv->mdc_pin = *prop;
@@ -280,17 +277,21 @@ static int __devinit gpio_mdio_probe(struct of_device *ofdev,
 
 	err = mdiobus_register(new_bus);
 
-	if (0 != err) {
+	if (err != 0) {
 		printk(KERN_ERR "%s: Cannot register as MDIO bus, err %d\n",
 				new_bus->name, err);
-		goto bus_register_fail;
+		goto out_free_irq;
 	}
 
 	return 0;
 
-bus_register_fail:
+out_free_irq:
+	kfree(new_bus->irq);
+out_free_bus:
 	kfree(new_bus);
-
+out_free_priv:
+	kfree(priv);
+out:
 	return err;
 }
 
@@ -317,6 +318,7 @@ static struct of_device_id gpio_mdio_match[] =
 	},
 	{},
 };
+MODULE_DEVICE_TABLE(of, gpio_mdio_match);
 
 static struct of_platform_driver gpio_mdio_driver =
 {
@@ -330,12 +332,32 @@ static struct of_platform_driver gpio_mdio_driver =
 
 int gpio_mdio_init(void)
 {
+	struct device_node *np;
+
+	np = of_find_compatible_node(NULL, NULL, "1682m-gpio");
+	if (!np)
+		np = of_find_compatible_node(NULL, NULL,
+					     "pasemi,pwrficient-gpio");
+	if (!np)
+		return -ENODEV;
+	gpio_regs = of_iomap(np, 0);
+	of_node_put(np);
+
+	if (!gpio_regs)
+		return -ENODEV;
+
 	return of_register_platform_driver(&gpio_mdio_driver);
 }
+module_init(gpio_mdio_init);
 
 void gpio_mdio_exit(void)
 {
 	of_unregister_platform_driver(&gpio_mdio_driver);
+	if (gpio_regs)
+		iounmap(gpio_regs);
 }
-device_initcall(gpio_mdio_init);
+module_exit(gpio_mdio_exit);
 
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Olof Johansson <olof at lixom.net>");
+MODULE_DESCRIPTION("Driver for MDIO over GPIO on PA Semi PWRficient-based boards");
diff --git a/arch/powerpc/platforms/pasemi/misc.c b/arch/powerpc/platforms/pasemi/misc.c
new file mode 100644
index 0000000..e3a9607
--- /dev/null
+++ b/arch/powerpc/platforms/pasemi/misc.c
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2007 PA Semi, Inc
+ *
+ * Parts based on arch/powerpc/sysdev/fsl_soc.c:
+ *
+ * 2006 (c) MontaVista Software, Inc.
+ *
+ * This program is free software; you can redistribute  it and/or modify it
+ * under  the terms of  the GNU General  Public License as published by the
+ * Free Software Foundation;  either version 2 of the  License, or (at your
+ * option) any later version.
+ */
+
+#include <linux/errno.h>
+#include <linux/kernel.h>
+#include <linux/pci.h>
+#include <linux/of.h>
+#include <linux/i2c.h>
+#include <asm/i2c_of.h>
+
+#ifdef CONFIG_I2C_BOARDINFO
+static int __init pasemi_register_i2c_devices(void)
+{
+	struct pci_dev *pdev;
+	struct device_node *adap_node;
+	struct device_node *node;
+
+	pdev = NULL;
+	while ((pdev = pci_get_device(PCI_VENDOR_ID_PASEMI, 0xa003, pdev))) {
+		adap_node = pci_device_to_OF_node(pdev);
+
+		if (!adap_node)
+			continue;
+
+		node = NULL;
+		while ((node = of_get_next_child(adap_node, node))) {
+			struct i2c_board_info info = {};
+			const u32 *addr;
+			int len;
+
+			addr = of_get_property(node, "reg", &len);
+			if (!addr || len < sizeof(int) ||
+			    *addr > (1 << 10) - 1) {
+				printk(KERN_WARNING
+					"pasemi_register_i2c_devices: "
+					"invalid i2c device entry\n");
+				continue;
+			}
+
+			info.irq = irq_of_parse_and_map(node, 0);
+			if (info.irq == NO_IRQ)
+				info.irq = -1;
+
+			if (of_fill_i2c_info(node, &info) < 0)
+				continue;
+
+			info.addr = *addr;
+
+			i2c_register_board_info(PCI_FUNC(pdev->devfn), &info,
+						1);
+		}
+	}
+	return 0;
+}
+device_initcall(pasemi_register_i2c_devices);
+#endif
diff --git a/arch/powerpc/platforms/pasemi/pasemi.h b/arch/powerpc/platforms/pasemi/pasemi.h
index 516acab..c96127b 100644
--- a/arch/powerpc/platforms/pasemi/pasemi.h
+++ b/arch/powerpc/platforms/pasemi/pasemi.h
@@ -16,8 +16,14 @@ extern void idle_doze(void);
 
 /* Restore astate to last set */
 #ifdef CONFIG_PPC_PASEMI_CPUFREQ
+extern int check_astate(void);
 extern void restore_astate(int cpu);
 #else
+static inline int check_astate(void)
+{
+	/* Always return >0 so we never power save */
+	return 1;
+}
 static inline void restore_astate(int cpu)
 {
 }
diff --git a/arch/powerpc/platforms/pasemi/powersave.S b/arch/powerpc/platforms/pasemi/powersave.S
index 6d0fba6..56f45ad 100644
--- a/arch/powerpc/platforms/pasemi/powersave.S
+++ b/arch/powerpc/platforms/pasemi/powersave.S
@@ -62,7 +62,16 @@ sleep_common:
 	mflr	r0
 	std	r0, 16(r1)
 	stdu	r1,-64(r1)
+#ifdef CONFIG_PPC_PASEMI_CPUFREQ
+	std	r3, 48(r1)
 
+	/* Only do power savings when in astate 0 */
+	bl	.check_astate
+	cmpwi	r3,0
+	bne	1f
+
+	ld	r3, 48(r1)
+#endif
 	LOAD_REG_IMMEDIATE(r6,MSR_DR|MSR_IR|MSR_ME|MSR_EE)
 	mfmsr	r4
 	andc	r5,r4,r6
@@ -73,7 +82,7 @@ sleep_common:
 
 	mtmsrd	r4,0
 
-	addi	r1,r1,64
+1:	addi	r1,r1,64
 	ld	r0,16(r1)
 	mtlr	r0
 	blr
diff --git a/arch/powerpc/platforms/pasemi/setup.c b/arch/powerpc/platforms/pasemi/setup.c
index 3d62060..2b63865 100644
--- a/arch/powerpc/platforms/pasemi/setup.c
+++ b/arch/powerpc/platforms/pasemi/setup.c
@@ -43,6 +43,10 @@
 
 #include "pasemi.h"
 
+#if !defined(CONFIG_SMP)
+static void smp_send_stop(void) {}
+#endif
+
 /* SDC reset register, must be pre-mapped at reset time */
 static void __iomem *reset_reg;
 
@@ -60,6 +64,9 @@ static int num_mce_regs;
 
 static void pas_restart(char *cmd)
 {
+	/* Need to put others cpu in hold loop so they're not sleeping */
+	smp_send_stop();
+	udelay(10000);
 	printk("Restarting...\n");
 	while (1)
 		out_le32(reset_reg, 0x6000000);
@@ -362,8 +369,12 @@ static inline void pasemi_pcmcia_init(void)
 
 
 static struct of_device_id pasemi_bus_ids[] = {
+	/* Unfortunately needed for legacy firmwares */
 	{ .type = "localbus", },
 	{ .type = "sdc", },
+	/* These are the proper entries, which newer firmware uses */
+	{ .compatible = "pasemi,localbus", },
+	{ .compatible = "pasemi,sdc", },
 	{},
 };
 
@@ -389,7 +400,8 @@ static int __init pas_probe(void)
 {
 	unsigned long root = of_get_flat_dt_root();
 
-	if (!of_flat_dt_is_compatible(root, "PA6T-1682M"))
+	if (!of_flat_dt_is_compatible(root, "PA6T-1682M") &&
+	    !of_flat_dt_is_compatible(root, "pasemi,pwrficient"))
 		return 0;
 
 	hpte_init_native();
@@ -400,7 +412,7 @@ static int __init pas_probe(void)
 }
 
 define_machine(pasemi) {
-	.name			= "PA Semi PA6T-1682M",
+	.name			= "PA Semi PWRficient",
 	.probe			= pas_probe,
 	.setup_arch		= pas_setup_arch,
 	.init_early		= pas_init_early,
diff --git a/arch/powerpc/sysdev/Makefile b/arch/powerpc/sysdev/Makefile
index 99a77d7..a81da82 100644
--- a/arch/powerpc/sysdev/Makefile
+++ b/arch/powerpc/sysdev/Makefile
@@ -20,6 +20,7 @@ obj-$(CONFIG_MV64X60)		+= $(mv64x60-y) mv64x60_pic.o mv64x60_dev.o \
 				   mv64x60_udbg.o
 obj-$(CONFIG_RTC_DRV_CMOS)	+= rtc_cmos_setup.o
 obj-$(CONFIG_AXON_RAM)		+= axonram.o
+obj-$(CONFIG_I2C_BOARDINFO)	+= i2c_of_mapping.o
 
 ifeq ($(CONFIG_PPC_MERGE),y)
 obj-$(CONFIG_PPC_INDIRECT_PCI)	+= indirect_pci.o
diff --git a/arch/powerpc/sysdev/fsl_soc.c b/arch/powerpc/sysdev/fsl_soc.c
index 3ace747..bbd7d69 100644
--- a/arch/powerpc/sysdev/fsl_soc.c
+++ b/arch/powerpc/sysdev/fsl_soc.c
@@ -320,43 +320,7 @@ arch_initcall(gfar_of_init);
 
 #ifdef CONFIG_I2C_BOARDINFO
 #include <linux/i2c.h>
-struct i2c_driver_device {
-	char	*of_device;
-	char	*i2c_driver;
-	char	*i2c_type;
-};
-
-static struct i2c_driver_device i2c_devices[] __initdata = {
-	{"ricoh,rs5c372a", "rtc-rs5c372", "rs5c372a",},
-	{"ricoh,rs5c372b", "rtc-rs5c372", "rs5c372b",},
-	{"ricoh,rv5c386",  "rtc-rs5c372", "rv5c386",},
-	{"ricoh,rv5c387a", "rtc-rs5c372", "rv5c387a",},
-	{"dallas,ds1307",  "rtc-ds1307",  "ds1307",},
-	{"dallas,ds1337",  "rtc-ds1307",  "ds1337",},
-	{"dallas,ds1338",  "rtc-ds1307",  "ds1338",},
-	{"dallas,ds1339",  "rtc-ds1307",  "ds1339",},
-	{"dallas,ds1340",  "rtc-ds1307",  "ds1340",},
-	{"stm,m41t00",     "rtc-ds1307",  "m41t00"},
-	{"dallas,ds1374",  "rtc-ds1374",  "rtc-ds1374",},
-};
-
-static int __init of_find_i2c_driver(struct device_node *node,
-				     struct i2c_board_info *info)
-{
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(i2c_devices); i++) {
-		if (!of_device_is_compatible(node, i2c_devices[i].of_device))
-			continue;
-		if (strlcpy(info->driver_name, i2c_devices[i].i2c_driver,
-			    KOBJ_NAME_LEN) >= KOBJ_NAME_LEN ||
-		    strlcpy(info->type, i2c_devices[i].i2c_type,
-			    I2C_NAME_SIZE) >= I2C_NAME_SIZE)
-			return -ENOMEM;
-		return 0;
-	}
-	return -ENODEV;
-}
+#include <asm/i2c_of.h>
 
 static void __init of_register_i2c_devices(struct device_node *adap_node,
 					   int bus_num)
@@ -378,7 +342,7 @@ static void __init of_register_i2c_devices(struct device_node *adap_node,
 		if (info.irq == NO_IRQ)
 			info.irq = -1;
 
-		if (of_find_i2c_driver(node, &info) < 0)
+		if (of_fill_i2c_info(node, &info) < 0)
 			continue;
 
 		info.addr = *addr;
diff --git a/arch/powerpc/sysdev/i2c_of_mapping.c b/arch/powerpc/sysdev/i2c_of_mapping.c
new file mode 100644
index 0000000..7a7e263
--- /dev/null
+++ b/arch/powerpc/sysdev/i2c_of_mapping.c
@@ -0,0 +1,61 @@
+/*
+ * Parts based on arch/powerpc/sysdev/fsl_soc.c:
+ *
+ * 2006 (c) MontaVista Software, Inc.
+ *
+ * This program is free software; you can redistribute  it and/or modify it
+ * under  the terms of  the GNU General  Public License as published by the
+ * Free Software Foundation;  either version 2 of the  License, or (at your
+ * option) any later version.
+ */
+
+#include <linux/errno.h>
+#include <linux/kernel.h>
+#include <linux/of.h>
+#include <linux/i2c.h>
+#include <asm/i2c_of.h>
+
+struct i2c_driver_device {
+	char    *of_device;
+	char    *i2c_driver;
+	char    *i2c_type;
+};
+
+
+/* This table is used to map from device tree compat fields to
+ * the driver and model used by the i2c board info structures.
+ *
+ * Add new mappings as needed.
+ */
+
+static struct i2c_driver_device i2c_devices[] __initdata = {
+	{"ricoh,rs5c372a", "rtc-rs5c372", "rs5c372a",},
+	{"ricoh,rs5c372b", "rtc-rs5c372", "rs5c372b",},
+	{"ricoh,rv5c386",  "rtc-rs5c372", "rv5c386",},
+	{"ricoh,rv5c387a", "rtc-rs5c372", "rv5c387a",},
+	{"dallas,ds1307",  "rtc-ds1307",  "ds1307",},
+	{"dallas,ds1337",  "rtc-ds1307",  "ds1337",},
+	{"dallas,ds1338",  "rtc-ds1307",  "ds1338",},
+	{"dallas,ds1339",  "rtc-ds1307",  "ds1339",},
+	{"dallas,ds1340",  "rtc-ds1307",  "ds1340",},
+	{"stm,m41t00",     "rtc-ds1307",  "m41t00"},
+	{"dallas,ds1374",  "rtc-ds1374",  "rtc-ds1374",},
+};
+
+int __init of_fill_i2c_info(struct device_node *node,
+			    struct i2c_board_info *info)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(i2c_devices); i++) {
+		if (!of_device_is_compatible(node, i2c_devices[i].of_device))
+			continue;
+		if (strlcpy(info->driver_name, i2c_devices[i].i2c_driver,
+			    KOBJ_NAME_LEN) >= KOBJ_NAME_LEN ||
+		    strlcpy(info->type, i2c_devices[i].i2c_type,
+			    I2C_NAME_SIZE) >= I2C_NAME_SIZE)
+			return -ENOMEM;
+		return 0;
+	}
+	return -ENODEV;
+}
diff --git a/drivers/char/hw_random/Kconfig b/drivers/char/hw_random/Kconfig
index 2d7cd48..6bbd4fa 100644
--- a/drivers/char/hw_random/Kconfig
+++ b/drivers/char/hw_random/Kconfig
@@ -98,7 +98,7 @@ config HW_RANDOM_PASEMI
 	default HW_RANDOM
 	---help---
 	  This driver provides kernel-side support for the Random Number
-	  Generator hardware found on PA6T-1682M processor.
+	  Generator hardware found on PA Semi PWRficient SoCs.
 
 	  To compile this driver as a module, choose M here: the
 	  module will be called pasemi-rng.
diff --git a/drivers/char/hw_random/pasemi-rng.c b/drivers/char/hw_random/pasemi-rng.c
index fa6040b..24ae307 100644
--- a/drivers/char/hw_random/pasemi-rng.c
+++ b/drivers/char/hw_random/pasemi-rng.c
@@ -126,10 +126,9 @@ static int __devexit rng_remove(struct of_device *dev)
 }
 
 static struct of_device_id rng_match[] = {
-	{
-		.compatible      = "1682m-rng",
-	},
-	{},
+	{ .compatible      = "1682m-rng", },
+	{ .compatible      = "pasemi,pwrficient-rng", },
+	{ },
 };
 
 static struct of_platform_driver rng_driver = {
diff --git a/drivers/edac/pasemi_edac.c b/drivers/edac/pasemi_edac.c
index 9007d06..9032091 100644
--- a/drivers/edac/pasemi_edac.c
+++ b/drivers/edac/pasemi_edac.c
@@ -225,7 +225,7 @@ static int __devinit pasemi_edac_probe(struct pci_dev *pdev,
 		EDAC_FLAG_NONE;
 	mci->mod_name = MODULE_NAME;
 	mci->dev_name = pci_name(pdev);
-	mci->ctl_name = "pasemi,1682m-mc";
+	mci->ctl_name = "pasemi,pwrficient-mc";
 	mci->edac_check = pasemi_edac_check;
 	mci->ctl_page_to_phys = NULL;
 	pci_read_config_dword(pdev, MCCFG_SCRUB, &scrub);
@@ -297,4 +297,4 @@ module_exit(pasemi_edac_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Egor Martovetsky <egor at pasemi.com>");
-MODULE_DESCRIPTION("MC support for PA Semi PA6T-1682M memory controller");
+MODULE_DESCRIPTION("MC support for PA Semi PWRficient memory controller");
diff --git a/include/asm-powerpc/i2c_of.h b/include/asm-powerpc/i2c_of.h
new file mode 100644
index 0000000..66c4804
--- /dev/null
+++ b/include/asm-powerpc/i2c_of.h
@@ -0,0 +1,14 @@
+/*
+ * Functions to map device tree compatible fields to values used by i2c
+ * board info structures
+ */
+
+#ifndef POWERPC_I2C_OF_H
+#define POWERPC_I2C_OF_H
+
+#ifdef CONFIG_I2C_BOARDINFO
+extern int __init of_fill_i2c_info(struct device_node *node,
+				   struct i2c_board_info *info);
+#endif
+
+#endif

linux-2.6-pasemi-reserve-i2c.patch:

--- NEW FILE linux-2.6-pasemi-reserve-i2c.patch ---
--- linux-2.6.23.ppc64/arch/powerpc//platforms/pasemi/misc.c~	2007-12-03 23:07:32.000000000 +0000
+++ linux-2.6.23.ppc64/arch/powerpc//platforms/pasemi/misc.c	2007-12-04 12:39:05.000000000 +0000
@@ -60,6 +60,9 @@ static int __init pasemi_register_i2c_de
 						1);
 		}
 	}
+	/* Ensure that buses up to 2 are reserved */
+	i2c_register_board_info(2, NULL, 0);
+
 	return 0;
 }
 device_initcall(pasemi_register_i2c_devices);
--- linux-2.6.23.ppc64/drivers/i2c/busses/i2c-pasemi.c~	2007-12-03 22:47:54.000000000 +0000
+++ linux-2.6.23.ppc64/drivers/i2c/busses/i2c-pasemi.c	2007-12-04 12:21:14.000000000 +0000
@@ -368,6 +368,7 @@ static int __devinit pasemi_smb_probe(st
 	smbus->adapter.class = I2C_CLASS_HWMON;
 	smbus->adapter.algo = &smbus_algorithm;
 	smbus->adapter.algo_data = smbus;
+	smbus->adapter.nr = PCI_FUNC(dev->devfn);
 
 	/* set up the sysfs linkage to our parent device */
 	smbus->adapter.dev.parent = &dev->dev;
@@ -375,7 +376,7 @@ static int __devinit pasemi_smb_probe(st
 	reg_write(smbus, REG_CTL, (CTL_MTR | CTL_MRR |
 		  (CLK_100K_DIV & CTL_CLK_M)));
 
-	error = i2c_add_adapter(&smbus->adapter);
+	error = i2c_add_numbered_adapter(&smbus->adapter);
 	if (error)
 		goto out_release_region;
 

linux-2.6-powerpc-generic-suspend-001-pmu-no-lock-kernel.patch:

--- NEW FILE linux-2.6-powerpc-generic-suspend-001-pmu-no-lock-kernel.patch ---
I see nothing that this lock_kernel() actually protects against
so remove it.

Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
Acked-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
---
 drivers/macintosh/via-pmu.c |    3 ---
 1 file changed, 3 deletions(-)

--- everything.orig/drivers/macintosh/via-pmu.c	2007-12-04 19:51:41.356950738 +0100
+++ everything/drivers/macintosh/via-pmu.c	2007-12-04 19:54:37.936951768 +0100
@@ -33,7 +33,6 @@
 #include <linux/adb.h>
 #include <linux/pmu.h>
 #include <linux/cuda.h>
-#include <linux/smp_lock.h>
 #include <linux/module.h>
 #include <linux/spinlock.h>
 #include <linux/pm.h>
@@ -2547,7 +2546,6 @@ pmu_release(struct inode *inode, struct 
 	struct pmu_private *pp = file->private_data;
 	unsigned long flags;
 
-	lock_kernel();
 	if (pp != 0) {
 		file->private_data = NULL;
 		spin_lock_irqsave(&all_pvt_lock, flags);
@@ -2561,7 +2559,6 @@ pmu_release(struct inode *inode, struct 
 
 		kfree(pp);
 	}
-	unlock_kernel();
 	return 0;
 }
 

-- 

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev at ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

linux-2.6-powerpc-generic-suspend-002-pmu-remove-dead-code.patch:

--- NEW FILE linux-2.6-powerpc-generic-suspend-002-pmu-remove-dead-code.patch ---
Some code in via-pmu.c is never compiled because of "compile options"
within the file. Remove the code completely.

Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
Acked-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
---
 drivers/macintosh/via-pmu.c |   42 +-----------------------------------------
 1 file changed, 1 insertion(+), 41 deletions(-)

--- everything.orig/drivers/macintosh/via-pmu.c	2007-12-04 19:54:37.936951768 +0100
+++ everything/drivers/macintosh/via-pmu.c	2007-12-04 19:54:39.056952311 +0100
@@ -64,9 +64,7 @@
 #include "via-pmu-event.h"
 
 /* Some compile options */
-#undef SUSPEND_USES_PMU
 #define DEBUG_SLEEP
-#undef HACKED_PCI_SAVE
 
 /* Misc minor number allocated for /dev/pmu */
 #define PMU_MINOR		154
@@ -1255,9 +1253,7 @@ void
 pmu_suspend(void)
 {
 	unsigned long flags;
-#ifdef SUSPEND_USES_PMU
-	struct adb_request *req;
-#endif
+
 	if (!via)
 		return;
 	
@@ -1275,17 +1271,10 @@ pmu_suspend(void)
 		via_pmu_interrupt(0, NULL);
 		spin_lock_irqsave(&pmu_lock, flags);
 		if (!adb_int_pending && pmu_state == idle && !req_awaiting_reply) {
-#ifdef SUSPEND_USES_PMU
-			pmu_request(&req, NULL, 2, PMU_SET_INTR_MASK, 0);
-			spin_unlock_irqrestore(&pmu_lock, flags);
-			while(!req.complete)
-				pmu_poll();
-#else /* SUSPEND_USES_PMU */
 			if (gpio_irq >= 0)
 				disable_irq_nosync(gpio_irq);
 			out_8(&via[IER], CB1_INT | IER_CLR);
 			spin_unlock_irqrestore(&pmu_lock, flags);
-#endif /* SUSPEND_USES_PMU */
 			break;
 		}
 	} while (1);
@@ -1306,18 +1295,11 @@ pmu_resume(void)
 		return;
 	}
 	adb_int_pending = 1;
-#ifdef SUSPEND_USES_PMU
-	pmu_request(&req, NULL, 2, PMU_SET_INTR_MASK, pmu_intr_mask);
-	spin_unlock_irqrestore(&pmu_lock, flags);
-	while(!req.complete)
-		pmu_poll();
-#else /* SUSPEND_USES_PMU */
 	if (gpio_irq >= 0)
 		enable_irq(gpio_irq);
 	out_8(&via[IER], CB1_INT | IER_SET);
 	spin_unlock_irqrestore(&pmu_lock, flags);
 	pmu_poll();
-#endif /* SUSPEND_USES_PMU */
 }
 
 /* Interrupt data could be the result data from an ADB cmd */
@@ -1803,14 +1785,10 @@ static void broadcast_wake(void)
  * PCI devices which may get powered off when we sleep.
  */
 static struct pci_save {
-#ifndef HACKED_PCI_SAVE
 	u16	command;
 	u16	cache_lat;
 	u16	intr;
 	u32	rom_address;
-#else
-	u32	config[16];
-#endif	
 } *pbook_pci_saves;
 static int pbook_npci_saves;
 
@@ -1856,16 +1834,10 @@ pbook_pci_save(void)
 			pci_dev_put(pd);
 			return;
 		}
-#ifndef HACKED_PCI_SAVE
 		pci_read_config_word(pd, PCI_COMMAND, &ps->command);
 		pci_read_config_word(pd, PCI_CACHE_LINE_SIZE, &ps->cache_lat);
 		pci_read_config_word(pd, PCI_INTERRUPT_LINE, &ps->intr);
 		pci_read_config_dword(pd, PCI_ROM_ADDRESS, &ps->rom_address);
-#else
-		int i;
-		for (i=1;i<16;i++)
-			pci_read_config_dword(pd, i<<4, &ps->config[i]);
-#endif
 		++ps;
 	}
 }
@@ -1884,17 +1856,6 @@ pbook_pci_restore(void)
 	int j;
 
 	while ((pd = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pd)) != NULL) {
-#ifdef HACKED_PCI_SAVE
-		int i;
-		if (npci-- == 0) {
-			pci_dev_put(pd);
-			return;
-		}
-		ps++;
-		for (i=2;i<16;i++)
-			pci_write_config_dword(pd, i<<4, ps->config[i]);
-		pci_write_config_dword(pd, 4, ps->config[1]);
-#else
 		if (npci-- == 0)
 			return;
 		ps++;
@@ -1918,7 +1879,6 @@ pbook_pci_restore(void)
 			pci_write_config_word(pd, PCI_COMMAND, ps->command);
 			break;
 		}
-#endif	
 	}
 }
 

-- 

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev at ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

linux-2.6-powerpc-generic-suspend-003-remove-adb-sleep-notifier.patch:

--- NEW FILE linux-2.6-powerpc-generic-suspend-003-remove-adb-sleep-notifier.patch ---
This patch replaces the pmu sleep notifier that adb had with
suspend/resume hooks in a new platform driver/device.

Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
Cc: Benjamin Herrenschmidt <benh at kernel.crashing.org>
---
 drivers/macintosh/adb.c |   96 ++++++++++++++++++++++++++++--------------------
 1 file changed, 57 insertions(+), 39 deletions(-)

--- everything.orig/drivers/macintosh/adb.c	2007-12-04 19:51:40.646950955 +0100
+++ everything/drivers/macintosh/adb.c	2007-12-04 19:54:40.186972819 +0100
@@ -89,14 +89,6 @@ static int sleepy_trackpad;
 static int autopoll_devs;
 int __adb_probe_sync;
 
-#ifdef CONFIG_PM_SLEEP
-static void adb_notify_sleep(struct pmu_sleep_notifier *self, int when);
-static struct pmu_sleep_notifier adb_sleep_notifier = {
-	adb_notify_sleep,
-	SLEEP_LEVEL_ADB,
-};
-#endif
-
 static int adb_scan_bus(void);
 static int do_adb_reset_bus(void);
 static void adbdev_init(void);
@@ -281,6 +273,36 @@ adb_reset_bus(void)
 	return 0;
 }
 
+#ifdef CONFIG_PM
+/*
+ * notify clients before sleep
+ */
+static int adb_suspend(struct platform_device *dev, pm_message_t state)
+{
+	adb_got_sleep = 1;
+	/* We need to get a lock on the probe thread */
+	down(&adb_probe_mutex);
+	/* Stop autopoll */
+	if (adb_controller->autopoll)
+		adb_controller->autopoll(0);
+	blocking_notifier_call_chain(&adb_client_list, ADB_MSG_POWERDOWN, NULL);
+
+	return 0;
+}
+
+/*
+ * reset bus after sleep
+ */
+static int adb_resume(struct platform_device *dev)
+{
+	adb_got_sleep = 0;
+	up(&adb_probe_mutex);
+	adb_reset_bus();
+
+	return 0;
+}
+#endif /* CONFIG_PM */
+
 int __init adb_init(void)
 {
 	struct adb_driver *driver;
@@ -313,14 +335,12 @@ int __init adb_init(void)
 		printk(KERN_WARNING "Warning: no ADB interface detected\n");
 		adb_controller = NULL;
 	} else {
-#ifdef CONFIG_PM_SLEEP
-		pmu_register_sleep_notifier(&adb_sleep_notifier);
-#endif /* CONFIG_PM */
 #ifdef CONFIG_PPC
 		if (machine_is_compatible("AAPL,PowerBook1998") ||
 			machine_is_compatible("PowerBook1,1"))
 			sleepy_trackpad = 1;
 #endif /* CONFIG_PPC */
+
 		init_completion(&adb_probe_task_comp);
 		adbdev_init();
 		adb_reset_bus();
@@ -330,33 +350,6 @@ int __init adb_init(void)
 
 __initcall(adb_init);
 
-#ifdef CONFIG_PM
-/*
- * notify clients before sleep and reset bus afterwards
- */
-void
-adb_notify_sleep(struct pmu_sleep_notifier *self, int when)
-{
-	switch (when) {
-	case PBOOK_SLEEP_REQUEST:
-		adb_got_sleep = 1;
-		/* We need to get a lock on the probe thread */
-		down(&adb_probe_mutex);
-		/* Stop autopoll */
-		if (adb_controller->autopoll)
-			adb_controller->autopoll(0);
-		blocking_notifier_call_chain(&adb_client_list,
-			ADB_MSG_POWERDOWN, NULL);
-		break;
-	case PBOOK_WAKE:
-		adb_got_sleep = 0;
-		up(&adb_probe_mutex);
-		adb_reset_bus();
-		break;
-	}
-}
-#endif /* CONFIG_PM */
-
 static int
 do_adb_reset_bus(void)
 {
@@ -864,7 +857,29 @@ static const struct file_operations adb_
 	.release	= adb_release,
 };
 
-static void
+static struct platform_driver adb_pfdrv = {
+	.driver = {
+		.name = "adb",
+	},
+#ifdef CONFIG_PM
+	.suspend = adb_suspend,
+	.resume = adb_resume,
+#endif
+};
+
+static struct platform_device adb_pfdev = {
+	.name = "adb",
+};
+
+static int __init
+adb_dummy_probe(struct platform_device *dev)
+{
+	if (dev == &adb_pfdev)
+		return 0;
+	return -ENODEV;
+}
+
+static void __init
 adbdev_init(void)
 {
 	if (register_chrdev(ADB_MAJOR, "adb", &adb_fops)) {
@@ -876,4 +891,7 @@ adbdev_init(void)
 	if (IS_ERR(adb_dev_class))
 		return;
 	class_device_create(adb_dev_class, NULL, MKDEV(ADB_MAJOR, 0), NULL, "adb");
+
+	platform_device_register(&adb_pfdev);
+	platform_driver_probe(&adb_pfdrv, adb_dummy_probe);
 }

-- 

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev at ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

linux-2.6-powerpc-generic-suspend-004-kill-pmu-sleep-notifier.patch:

--- NEW FILE linux-2.6-powerpc-generic-suspend-004-kill-pmu-sleep-notifier.patch ---
This patch kills off the remnants of the ancient sleep notifiers.

Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
Cc: Benjamin Herrenschmidt <benh at kernel.crashing.org>
---
 drivers/macintosh/via-pmu.c |   71 --------------------------------------------
 include/linux/pmu.h         |   36 ----------------------
 2 files changed, 107 deletions(-)

--- everything.orig/drivers/macintosh/via-pmu.c	2007-12-04 19:54:39.056952311 +0100
+++ everything/drivers/macintosh/via-pmu.c	2007-12-04 19:54:41.886951985 +0100
@@ -174,7 +174,6 @@ static struct proc_dir_entry *proc_pmu_b
 
 int __fake_sleep;
 int asleep;
-BLOCKING_NOTIFIER_HEAD(sleep_notifier_list);
 
 #ifdef CONFIG_ADB
 static int adb_dev_map;
@@ -1719,67 +1718,7 @@ pmu_present(void)
 	return via != 0;
 }
 
-#ifdef CONFIG_PM_SLEEP
-
-static LIST_HEAD(sleep_notifiers);
-
-int
-pmu_register_sleep_notifier(struct pmu_sleep_notifier *n)
-{
-	struct list_head *list;
-	struct pmu_sleep_notifier *notifier;
-
-	for (list = sleep_notifiers.next; list != &sleep_notifiers;
-	     list = list->next) {
-		notifier = list_entry(list, struct pmu_sleep_notifier, list);
-		if (n->priority > notifier->priority)
-			break;
-	}
-	__list_add(&n->list, list->prev, list);
-	return 0;
-}
-EXPORT_SYMBOL(pmu_register_sleep_notifier);
-
-int
-pmu_unregister_sleep_notifier(struct pmu_sleep_notifier* n)
-{
-	if (n->list.next == 0)
-		return -ENOENT;
-	list_del(&n->list);
-	n->list.next = NULL;
-	return 0;
-}
-EXPORT_SYMBOL(pmu_unregister_sleep_notifier);
-#endif /* CONFIG_PM_SLEEP */
-
 #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_PPC32)
-
-/* Sleep is broadcast last-to-first */
-static void broadcast_sleep(int when)
-{
-	struct list_head *list;
-	struct pmu_sleep_notifier *notifier;
-
-	for (list = sleep_notifiers.prev; list != &sleep_notifiers;
-	     list = list->prev) {
-		notifier = list_entry(list, struct pmu_sleep_notifier, list);
-		notifier->notifier_call(notifier, when);
-	}
-}
-
-/* Wake is broadcast first-to-last */
-static void broadcast_wake(void)
-{
-	struct list_head *list;
-	struct pmu_sleep_notifier *notifier;
-
-	for (list = sleep_notifiers.next; list != &sleep_notifiers;
-	     list = list->next) {
-		notifier = list_entry(list, struct pmu_sleep_notifier, list);
-		notifier->notifier_call(notifier, PBOOK_WAKE);
-	}
-}
-
 /*
  * This struct is used to store config register values for
  * PCI devices which may get powered off when we sleep.
@@ -1962,9 +1901,6 @@ pmac_suspend_devices(void)
 
 	pm_prepare_console();
 	
-	/* Notify old-style device drivers */
-	broadcast_sleep(PBOOK_SLEEP_REQUEST);
-
 	/* Sync the disks. */
 	/* XXX It would be nice to have some way to ensure that
 	 * nobody is dirtying any new buffers while we wait. That
@@ -1973,12 +1909,9 @@ pmac_suspend_devices(void)
 	 */
 	sys_sync();
 
-	broadcast_sleep(PBOOK_SLEEP_NOW);
-
 	/* Send suspend call to devices, hold the device core's dpm_sem */
 	ret = device_suspend(PMSG_SUSPEND);
 	if (ret) {
-		broadcast_wake();
 		printk(KERN_ERR "Driver sleep failed\n");
 		return -EBUSY;
 	}
@@ -2019,7 +1952,6 @@ pmac_suspend_devices(void)
 		local_irq_enable();
 		preempt_enable();
 		device_resume();
-		broadcast_wake();
 		printk(KERN_ERR "Driver powerdown failed\n");
 		return -EBUSY;
 	}
@@ -2073,9 +2005,6 @@ pmac_wakeup_devices(void)
 	/* Resume devices */
 	device_resume();
 
-	/* Notify old style drivers */
-	broadcast_wake();
-
 	pm_restore_console();
 
 	return 0;
--- everything.orig/include/linux/pmu.h	2007-12-04 19:51:40.326951823 +0100
+++ everything/include/linux/pmu.h	2007-12-04 19:54:41.896951606 +0100
@@ -159,42 +159,6 @@ extern void pmu_unlock(void);
 extern int pmu_present(void);
 extern int pmu_get_model(void);
 
-#ifdef CONFIG_PM
-/*
- * Stuff for putting the powerbook to sleep and waking it again.
- *
- */
-#include <linux/list.h>
-
-struct pmu_sleep_notifier
-{
-	void (*notifier_call)(struct pmu_sleep_notifier *self, int when);
-	int priority;
-	struct list_head list;
-};
-
-/* Code values for calling sleep/wakeup handlers
- */
-#define PBOOK_SLEEP_REQUEST	1
-#define PBOOK_SLEEP_NOW		2
-#define PBOOK_WAKE		3
-
-/* priority levels in notifiers */
-#define SLEEP_LEVEL_VIDEO	100	/* Video driver (first wake) */
-#define SLEEP_LEVEL_MEDIABAY	90	/* Media bay driver */
-#define SLEEP_LEVEL_BLOCK	80	/* IDE, SCSI */
-#define SLEEP_LEVEL_NET		70	/* bmac, gmac */
-#define SLEEP_LEVEL_MISC	60	/* Anything else */
-#define SLEEP_LEVEL_USERLAND	55	/* Reserved for apm_emu */
-#define SLEEP_LEVEL_ADB		50	/* ADB (async) */
-#define SLEEP_LEVEL_SOUND	40	/* Sound driver (blocking) */
-
-/* special register notifier functions */
-int pmu_register_sleep_notifier(struct pmu_sleep_notifier* notifier);
-int pmu_unregister_sleep_notifier(struct pmu_sleep_notifier* notifier);
-
-#endif /* CONFIG_PM */
-
 #define PMU_MAX_BATTERIES	2
 
 /* values for pmu_power_flags */

-- 

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev at ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

linux-2.6-powerpc-generic-suspend-005-proper-sleep-management.patch:

--- NEW FILE linux-2.6-powerpc-generic-suspend-005-proper-sleep-management.patch ---
Subject: [PATCH 2.6.25 5/5] powermac: proper sleep management

This adds platform_suspend_ops for PMU based machines, directly in
the PMU driver. This finally allows suspending via /sys/power/state
on powerbooks.

The patch also replaces the PMU ioctl with a simple call to
pm_suspend(PM_SUSPEND_MEM).

Additionally, it cleans up some debug code.

Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
Cc: Benjamin Herrenschmidt <benh at kernel.crashing.org>
---
 drivers/macintosh/via-pmu.c |  451 ++++++++++++++++++++------------------------
 1 file changed, 206 insertions(+), 245 deletions(-)

--- everything.orig/drivers/macintosh/via-pmu.c	2007-12-11 15:13:33.156913629 +0100
+++ everything/drivers/macintosh/via-pmu.c	2007-12-11 15:19:21.126913032 +0100
@@ -10,13 +10,13 @@
  *
  * Copyright (C) 1998 Paul Mackerras and Fabio Riccardi.
  * Copyright (C) 2001-2002 Benjamin Herrenschmidt
+ * Copyright (C) 2006-2007 Johannes Berg
  *
  * THIS DRIVER IS BECOMING A TOTAL MESS !
  *  - Cleanup atomically disabling reply to PMU events after
  *    a sleep or a freq. switch
- *  - Move sleep code out of here to pmac_pm, merge into new
- *    common PM infrastructure
- *  - Save/Restore PCI space properly
+ *  - check if powerbook 3400 really needs the extra PCI
+ *    save/restore code we have
  *
  */
 #include <stdarg.h>
@@ -64,7 +64,7 @@
 #include "via-pmu-event.h"
 
 /* Some compile options */
-#define DEBUG_SLEEP
+#undef DEBUG_SLEEP
 
 /* Misc minor number allocated for /dev/pmu */
 #define PMU_MINOR		154
@@ -149,12 +149,9 @@ static spinlock_t pmu_lock;
 static u8 pmu_intr_mask;
 static int pmu_version;
 static int drop_interrupts;
-#if defined(CONFIG_PM_SLEEP) && defined(CONFIG_PPC32)
+#if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
 static int option_lid_wakeup = 1;
-#endif /* CONFIG_PM_SLEEP && CONFIG_PPC32 */
-#if (defined(CONFIG_PM_SLEEP)&&defined(CONFIG_PPC32))||defined(CONFIG_PMAC_BACKLIGHT_LEGACY)
-static int sleep_in_progress;
-#endif
+#endif /* CONFIG_SUSPEND && CONFIG_PPC32 */
 static unsigned long async_req_locks;
 static unsigned int pmu_irq_stats[11];
 
@@ -220,7 +217,7 @@ extern void enable_kernel_fp(void);
 
 #ifdef DEBUG_SLEEP
 int pmu_polled_request(struct adb_request *req);
-int pmu_wink(struct adb_request *req);
+void pmu_blink(int n);
 #endif
 
 /*
@@ -871,7 +868,7 @@ proc_read_options(char *page, char **sta
 {
 	char *p = page;
 
-#if defined(CONFIG_PM_SLEEP) && defined(CONFIG_PPC32)
+#if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
 	if (pmu_kind == PMU_KEYLARGO_BASED &&
 	    pmac_call_feature(PMAC_FTR_SLEEP_STATE,NULL,0,-1) >= 0)
 		p += sprintf(p, "lid_wakeup=%d\n", option_lid_wakeup);
@@ -912,7 +909,7 @@ proc_write_options(struct file *file, co
 	*(val++) = 0;
 	while(*val == ' ')
 		val++;
-#if defined(CONFIG_PM_SLEEP) && defined(CONFIG_PPC32)
+#if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
 	if (pmu_kind == PMU_KEYLARGO_BASED &&
 	    pmac_call_feature(PMAC_FTR_SLEEP_STATE,NULL,0,-1) >= 0)
 		if (!strcmp(label, "lid_wakeup"))
@@ -1718,7 +1715,7 @@ pmu_present(void)
 	return via != 0;
 }
 
-#if defined(CONFIG_PM_SLEEP) && defined(CONFIG_PPC32)
+#if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
 /*
  * This struct is used to store config register values for
  * PCI devices which may get powered off when we sleep.
@@ -1821,42 +1818,6 @@ pbook_pci_restore(void)
 	}
 }
 
-#ifdef DEBUG_SLEEP
-/* N.B. This doesn't work on the 3400 */
-void 
-pmu_blink(int n)
-{
-	struct adb_request req;
-
-	memset(&req, 0, sizeof(req));
-
-	for (; n > 0; --n) {
-		req.nbytes = 4;
-		req.done = NULL;
-		req.data[0] = 0xee;
-		req.data[1] = 4;
-		req.data[2] = 0;
-		req.data[3] = 1;
-		req.reply[0] = ADB_RET_OK;
-		req.reply_len = 1;
-		req.reply_expected = 0;
-		pmu_polled_request(&req);
-		mdelay(50);
-		req.nbytes = 4;
-		req.done = NULL;
-		req.data[0] = 0xee;
-		req.data[1] = 4;
-		req.data[2] = 0;
-		req.data[3] = 0;
-		req.reply[0] = ADB_RET_OK;
-		req.reply_len = 1;
-		req.reply_expected = 0;
-		pmu_polled_request(&req);
-		mdelay(50);
-	}
-	mdelay(50);
-}
-#endif
 
 /*
  * Put the powerbook to sleep.
@@ -1894,122 +1855,6 @@ restore_via_state(void)
 
 extern void pmu_backlight_set_sleep(int sleep);
 
-static int
-pmac_suspend_devices(void)
-{
-	int ret;
-
-	pm_prepare_console();
-	
-	/* Sync the disks. */
-	/* XXX It would be nice to have some way to ensure that
-	 * nobody is dirtying any new buffers while we wait. That
-	 * could be achieved using the refrigerator for processes
-	 * that swsusp uses
-	 */
-	sys_sync();
-
-	/* Send suspend call to devices, hold the device core's dpm_sem */
-	ret = device_suspend(PMSG_SUSPEND);
-	if (ret) {
-		printk(KERN_ERR "Driver sleep failed\n");
-		return -EBUSY;
-	}
-
-#ifdef CONFIG_PMAC_BACKLIGHT
-	/* Tell backlight code not to muck around with the chip anymore */
-	pmu_backlight_set_sleep(1);
-#endif
-
-	/* Call platform functions marked "on sleep" */
-	pmac_pfunc_i2c_suspend();
-	pmac_pfunc_base_suspend();
-
-	/* Stop preemption */
-	preempt_disable();
-
-	/* Make sure the decrementer won't interrupt us */
-	asm volatile("mtdec %0" : : "r" (0x7fffffff));
-	/* Make sure any pending DEC interrupt occurring while we did
-	 * the above didn't re-enable the DEC */
-	mb();
-	asm volatile("mtdec %0" : : "r" (0x7fffffff));
-
-	/* We can now disable MSR_EE. This code of course works properly only
-	 * on UP machines... For SMP, if we ever implement sleep, we'll have to
-	 * stop the "other" CPUs way before we do all that stuff.
-	 */
-	local_irq_disable();
-
-	/* Broadcast power down irq
-	 * This isn't that useful in most cases (only directly wired devices can
-	 * use this but still... This will take care of sysdev's as well, so
-	 * we exit from here with local irqs disabled and PIC off.
-	 */
-	ret = device_power_down(PMSG_SUSPEND);
-	if (ret) {
-		wakeup_decrementer();
-		local_irq_enable();
-		preempt_enable();
-		device_resume();
-		printk(KERN_ERR "Driver powerdown failed\n");
-		return -EBUSY;
-	}
-
-	/* Wait for completion of async requests */
-	while (!batt_req.complete)
-		pmu_poll();
-
-	/* Giveup the lazy FPU & vec so we don't have to back them
-	 * up from the low level code
-	 */
-	enable_kernel_fp();
-
-#ifdef CONFIG_ALTIVEC
-	if (cpu_has_feature(CPU_FTR_ALTIVEC))
-		enable_kernel_altivec();
-#endif /* CONFIG_ALTIVEC */
-
-	return 0;
-}
-
-static int
-pmac_wakeup_devices(void)
-{
-	mdelay(100);
-
-#ifdef CONFIG_PMAC_BACKLIGHT
-	/* Tell backlight code it can use the chip again */
-	pmu_backlight_set_sleep(0);
-#endif
-
-	/* Power back up system devices (including the PIC) */
-	device_power_up();
-
-	/* Force a poll of ADB interrupts */
-	adb_int_pending = 1;
-	via_pmu_interrupt(0, NULL);
-
-	/* Restart jiffies & scheduling */
-	wakeup_decrementer();
-
-	/* Re-enable local CPU interrupts */
-	local_irq_enable();
-	mdelay(10);
-	preempt_enable();
-
-	/* Call platform functions marked "on wake" */
-	pmac_pfunc_base_resume();
-	pmac_pfunc_i2c_resume();
-
-	/* Resume devices */
-	device_resume();
-
-	pm_restore_console();
-
-	return 0;
-}
-
 #define	GRACKLE_PM	(1<<7)
 #define GRACKLE_DOZE	(1<<5)
 #define	GRACKLE_NAP	(1<<4)
@@ -2020,19 +1865,12 @@ static int powerbook_sleep_grackle(void)
 	unsigned long save_l2cr;
 	unsigned short pmcr1;
 	struct adb_request req;
-	int ret;
 	struct pci_dev *grackle;
 
 	grackle = pci_get_bus_and_slot(0, 0);
 	if (!grackle)
 		return -ENODEV;
 
-	ret = pmac_suspend_devices();
-	if (ret) {
-		printk(KERN_ERR "Sleep rejected by devices\n");
-		return ret;
-	}
-	
 	/* Turn off various things. Darwin does some retry tests here... */
 	pmu_request(&req, NULL, 2, PMU_POWER_CTRL0, PMU_POW0_OFF|PMU_POW0_HARD_DRIVE);
 	pmu_wait_complete(&req);
@@ -2095,8 +1933,6 @@ static int powerbook_sleep_grackle(void)
 			PMU_POW_ON|PMU_POW_BACKLIGHT|PMU_POW_CHARGER|PMU_POW_IRLED|PMU_POW_MEDIABAY);
 	pmu_wait_complete(&req);
 
-	pmac_wakeup_devices();
-
 	return 0;
 }
 
@@ -2106,7 +1942,6 @@ powerbook_sleep_Core99(void)
 	unsigned long save_l2cr;
 	unsigned long save_l3cr;
 	struct adb_request req;
-	int ret;
 	
 	if (pmac_call_feature(PMAC_FTR_SLEEP_STATE,NULL,0,-1) < 0) {
 		printk(KERN_ERR "Sleep mode not supported on this machine\n");
@@ -2116,12 +1951,6 @@ powerbook_sleep_Core99(void)
 	if (num_online_cpus() > 1 || cpu_is_offline(0))
 		return -EAGAIN;
 
-	ret = pmac_suspend_devices();
-	if (ret) {
-		printk(KERN_ERR "Sleep rejected by devices\n");
-		return ret;
-	}
-
 	/* Stop environment and ADB interrupts */
 	pmu_request(&req, NULL, 2, PMU_SET_INTR_MASK, 0);
 	pmu_wait_complete(&req);
@@ -2192,42 +2021,24 @@ powerbook_sleep_Core99(void)
 	/* Restore LPJ, cpufreq will adjust the cpu frequency */
 	loops_per_jiffy /= 2;
 
-	pmac_wakeup_devices();
-
 	return 0;
 }
 
 #define PB3400_MEM_CTRL		0xf8000000
 #define PB3400_MEM_CTRL_SLEEP	0x70
 
+static void __iomem *pb3400_mem_ctrl;
+
 static int
 powerbook_sleep_3400(void)
 {
-	int ret, i, x;
+	int i, x;
 	unsigned int hid0;
 	unsigned long p;
 	struct adb_request sleep_req;
-	void __iomem *mem_ctrl;
 	unsigned int __iomem *mem_ctrl_sleep;
 
-	/* first map in the memory controller registers */
-	mem_ctrl = ioremap(PB3400_MEM_CTRL, 0x100);
-	if (mem_ctrl == NULL) {
-		printk("powerbook_sleep_3400: ioremap failed\n");
-		return -ENOMEM;
-	}
-	mem_ctrl_sleep = mem_ctrl + PB3400_MEM_CTRL_SLEEP;
-
-	/* Allocate room for PCI save */
-	pbook_alloc_pci_save();
-
-	ret = pmac_suspend_devices();
-	if (ret) {
-		pbook_free_pci_save();
-		iounmap(mem_ctrl);
-		printk(KERN_ERR "Sleep rejected by devices\n");
-		return ret;
-	}
+	mem_ctrl_sleep = pb3400_mem_ctrl + PB3400_MEM_CTRL_SLEEP;
 
 	/* Save the state of PCI config space for some slots */
 	pbook_pci_save();
@@ -2271,14 +2083,10 @@ powerbook_sleep_3400(void)
 	while (asleep)
 		mb();
 
-	pmac_wakeup_devices();
-	pbook_free_pci_save();
-	iounmap(mem_ctrl);
-
 	return 0;
 }
 
-#endif /* CONFIG_PM_SLEEP && CONFIG_PPC32 */
+#endif /* CONFIG_SUSPEND && CONFIG_PPC32 */
 
 /*
  * Support for /dev/pmu device
@@ -2451,6 +2259,157 @@ pmu_release(struct inode *inode, struct 
 	return 0;
 }
 
+#if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
+static int powerbook_prepare_sleep(void)
+{
+	if (pmu_kind == PMU_OHARE_BASED) {
+		/* first map in the memory controller registers */
+		pb3400_mem_ctrl = ioremap(PB3400_MEM_CTRL, 0x100);
+		if (!pb3400_mem_ctrl) {
+			printk(KERN_ERR "powerbook_sleep_3400: "
+			       "ioremap failed\n");
+			return -ENOMEM;
+		}
+
+		/* Allocate room for PCI save */
+		pbook_alloc_pci_save();
+	}
+
+	return 0;
+}
+
+/*
+ * overrides the weak arch_suspend_disable_irqs in kernel/power/main.c
+ *
+ * XXX: Once Scott Wood's patch is merged, this needs to use the ppc_md
+ *	hooks that patch adds!
+ */
+void arch_suspend_disable_irqs(void)
+{
+#ifdef CONFIG_PMAC_BACKLIGHT
+	/* Tell backlight code not to muck around with the chip anymore */
+	pmu_backlight_set_sleep(1);
+#endif
+
+	/* Call platform functions marked "on sleep" */
+	pmac_pfunc_i2c_suspend();
+	pmac_pfunc_base_suspend();
+
+	/* Stop preemption */
+	preempt_disable();
+
+	/* Make sure the decrementer won't interrupt us */
+	asm volatile("mtdec %0" : : "r" (0x7fffffff));
+	/* Make sure any pending DEC interrupt occurring while we did
+	 * the above didn't re-enable the DEC */
+	mb();
+	asm volatile("mtdec %0" : : "r" (0x7fffffff));
+
+	local_irq_disable();
+}
+
+static int powerbook_sleep(suspend_state_t state)
+{
+	int error = 0;
+
+	/* Wait for completion of async requests */
+	while (!batt_req.complete)
+		pmu_poll();
+
+	/* Giveup the lazy FPU & vec so we don't have to back them
+	 * up from the low level code
+	 */
+	enable_kernel_fp();
+
+#ifdef CONFIG_ALTIVEC
+	if (cpu_has_feature(CPU_FTR_ALTIVEC))
+		enable_kernel_altivec();
+#endif /* CONFIG_ALTIVEC */
+
+	switch (pmu_kind) {
+	case PMU_OHARE_BASED:
+		error = powerbook_sleep_3400();
+		break;
+	case PMU_HEATHROW_BASED:
+	case PMU_PADDINGTON_BASED:
+		error = powerbook_sleep_grackle();
+		break;
+	case PMU_KEYLARGO_BASED:
+		error = powerbook_sleep_Core99();
+		break;
+	default:
+		return -ENOSYS;
+	}
+
+	if (error)
+		return error;
+
+	mdelay(100);
+
+#ifdef CONFIG_PMAC_BACKLIGHT
+	/* Tell backlight code it can use the chip again */
+	pmu_backlight_set_sleep(0);
+#endif
+
+	return 0;
+}
+
+/*
+ * overrides the weak arch_suspend_enable_irqs in kernel/power/main.c
+ *
+ * XXX: Once Scott Wood's patch is merged, this needs to use the ppc_md
+ *	hooks that patch adds!
+ */
+void arch_suspend_enable_irqs(void)
+{
+	/* Force a poll of ADB interrupts */
+	adb_int_pending = 1;
+	via_pmu_interrupt(0, NULL);
+
+	/* Restart jiffies & scheduling */
+	wakeup_decrementer();
+
+	/* Re-enable local CPU interrupts */
+	local_irq_enable();
+	mdelay(10);
+	preempt_enable();
+
+	/* Call platform functions marked "on wake" */
+	pmac_pfunc_base_resume();
+	pmac_pfunc_i2c_resume();
+}
+
+static void powerbook_finish_sleep(void)
+{
+	if (pmu_kind == PMU_OHARE_BASED) {
+		pbook_free_pci_save();
+		iounmap(pb3400_mem_ctrl);
+	}
+}
+
+static int pmu_sleep_valid(suspend_state_t state)
+{
+	return state == PM_SUSPEND_MEM
+		&& (pmac_call_feature(PMAC_FTR_SLEEP_STATE, NULL, 0, -1) >= 0);
+}
+
+static struct platform_suspend_ops pmu_pm_ops = {
+	.prepare = powerbook_prepare_sleep,
+	.enter = powerbook_sleep,
+	.finish = powerbook_finish_sleep,
+	.valid = pmu_sleep_valid,
+};
+
+static int register_pmu_pm_ops(void)
+{
+	suspend_set_ops(&pmu_pm_ops);
+
+	return 0;
+}
+
+device_initcall(register_pmu_pm_ops);
+#endif
+
 static int
 pmu_ioctl(struct inode * inode, struct file *filp,
 		     u_int cmd, u_long arg)
@@ -2459,35 +2418,15 @@ pmu_ioctl(struct inode * inode, struct f
 	int error = -EINVAL;
 
 	switch (cmd) {
-#if defined(CONFIG_PM_SLEEP) && defined(CONFIG_PPC32)
 	case PMU_IOC_SLEEP:
 		if (!capable(CAP_SYS_ADMIN))
 			return -EACCES;
-		if (sleep_in_progress)
-			return -EBUSY;
-		sleep_in_progress = 1;
-		switch (pmu_kind) {
-		case PMU_OHARE_BASED:
-			error = powerbook_sleep_3400();
-			break;
-		case PMU_HEATHROW_BASED:
-		case PMU_PADDINGTON_BASED:
-			error = powerbook_sleep_grackle();
-			break;
-		case PMU_KEYLARGO_BASED:
-			error = powerbook_sleep_Core99();
-			break;
-		default:
-			error = -ENOSYS;
-		}
-		sleep_in_progress = 0;
-		break;
+		return pm_suspend(PM_SUSPEND_MEM);
 	case PMU_IOC_CAN_SLEEP:
-		if (pmac_call_feature(PMAC_FTR_SLEEP_STATE,NULL,0,-1) < 0)
+		if (pmac_call_feature(PMAC_FTR_SLEEP_STATE, NULL, 0, -1) < 0)
 			return put_user(0, argp);
 		else
 			return put_user(1, argp);
-#endif /* CONFIG_PM_SLEEP && CONFIG_PPC32 */
 
 #ifdef CONFIG_PMAC_BACKLIGHT_LEGACY
 	/* Compatibility ioctl's for backlight */
@@ -2495,9 +2434,6 @@ pmu_ioctl(struct inode * inode, struct f
 	{
 		int brightness;
 
-		if (sleep_in_progress)
-			return -EBUSY;
-
 		brightness = pmac_backlight_get_legacy_brightness();
 		if (brightness < 0)
 			return brightness;
@@ -2509,9 +2445,6 @@ pmu_ioctl(struct inode * inode, struct f
 	{
 		int brightness;
 
-		if (sleep_in_progress)
-			return -EBUSY;
-
 		error = get_user(brightness, argp);
 		if (error)
 			return error;
@@ -2636,15 +2569,43 @@ pmu_polled_request(struct adb_request *r
 	local_irq_restore(flags);
 	return 0;
 }
-#endif /* DEBUG_SLEEP */
 
+/* N.B. This doesn't work on the 3400 */
+void pmu_blink(int n)
+{
+	struct adb_request req;
 
-/* FIXME: This is a temporary set of callbacks to enable us
- * to do suspend-to-disk.
- */
+	memset(&req, 0, sizeof(req));
 
-#if defined(CONFIG_PM_SLEEP) && defined(CONFIG_PPC32)
+	for (; n > 0; --n) {
+		req.nbytes = 4;
+		req.done = NULL;
+		req.data[0] = 0xee;
+		req.data[1] = 4;
+		req.data[2] = 0;
+		req.data[3] = 1;
+		req.reply[0] = ADB_RET_OK;
+		req.reply_len = 1;
+		req.reply_expected = 0;
+		pmu_polled_request(&req);
+		mdelay(50);
+		req.nbytes = 4;
+		req.done = NULL;
+		req.data[0] = 0xee;
+		req.data[1] = 4;
+		req.data[2] = 0;
+		req.data[3] = 0;
+		req.reply[0] = ADB_RET_OK;
+		req.reply_len = 1;
+		req.reply_expected = 0;
+		pmu_polled_request(&req);
+		mdelay(50);
+	}
+	mdelay(50);
+}
+#endif /* DEBUG_SLEEP */
 
+#if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
 int pmu_sys_suspended;
 
 static int pmu_sys_suspend(struct sys_device *sysdev, pm_message_t state)
@@ -2678,7 +2639,7 @@ static int pmu_sys_resume(struct sys_dev
 	return 0;
 }
 
-#endif /* CONFIG_PM_SLEEP && CONFIG_PPC32 */
+#endif /* CONFIG_SUSPEND && CONFIG_PPC32 */
 
 static struct sysdev_class pmu_sysclass = {
 	set_kset_name("pmu"),
@@ -2689,10 +2650,10 @@ static struct sys_device device_pmu = {
 };
 
 static struct sysdev_driver driver_pmu = {
-#if defined(CONFIG_PM_SLEEP) && defined(CONFIG_PPC32)
+#if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
 	.suspend	= &pmu_sys_suspend,
 	.resume		= &pmu_sys_resume,
-#endif /* CONFIG_PM_SLEEP && CONFIG_PPC32 */
+#endif /* CONFIG_SUSPEND && CONFIG_PPC32 */
 };
 
 static int __init init_pmu_sysfs(void)
@@ -2727,10 +2688,10 @@ EXPORT_SYMBOL(pmu_wait_complete);
 EXPORT_SYMBOL(pmu_suspend);
 EXPORT_SYMBOL(pmu_resume);
 EXPORT_SYMBOL(pmu_unlock);
-#if defined(CONFIG_PM_SLEEP) && defined(CONFIG_PPC32)
+#if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
 EXPORT_SYMBOL(pmu_enable_irled);
 EXPORT_SYMBOL(pmu_battery_count);
 EXPORT_SYMBOL(pmu_batteries);
 EXPORT_SYMBOL(pmu_power_flags);
-#endif /* CONFIG_PM_SLEEP && CONFIG_PPC32 */
+#endif /* CONFIG_SUSPEND && CONFIG_PPC32 */
 


_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev at ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

linux-2.6-rndis_wlan.patch:

--- NEW FILE linux-2.6-rndis_wlan.patch ---
commit c4b411b390cfb0fe70a0eb2db70f4fb3ed3bc3c4
Author: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
Date:   Sat Jan 26 00:51:51 2008 +0200

    Add new driver 'rndis_wlan' for wireless RNDIS devices.
    
    New driver for wireless RNDIS devices. So far only known chip that uses
    wireless RNDIS is Broadcom 4320. Driver detects all RNDIS devices that
    have RNDIS wireless physical medium. At least following devices are
    detected:
    
      Buffalo WLI-U2-KG125S
      U.S. Robotics USR5421
      Belkin F5D7051
      Linksys WUSB54GSv2
      Linksys WUSB54GSC
      Asus WL169gE
      Eminent EM4045
      BT Voyager 1055
      Linksys WUSB54GSv1
      U.S. Robotics USR5420
      BUFFALO WLI-USB-G54
    
    Signed-off-by: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
    Signed-off-by: John W. Linville <linville at tuxdriver.com>

commit f252cf8b662f629c1a3502fcb41ef087d73c303f
Author: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
Date:   Sat Jan 26 00:51:45 2008 +0200

    Move usbnet.h and rndis_host.h to include/linux/usb
    
    Move headers usbnet.h and rndis_host.h to include/linux/usb and fix includes
    for drivers/net/usb modules. Headers are moved because rndis_wlan will be
    outside drivers/net/usb in drivers/net/wireless and yet need these headers.
    
    Signed-off-by: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
    Acked-by: David Brownell <dbrownell at users.sourceforge.net>
    Signed-off-by: John W. Linville <linville at tuxdriver.com>

commit 759964297fc35b8e38e7c9d828e9505322ea11f5
Author: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
Date:   Sun Jan 27 23:34:33 2008 +0200

    rndis_host: Add RNDIS physical medium checking into generic_rndis_bind()
    
    Add RNDIS physical medium checking into generic_rndis_bind() and also make
    rndis_host to be only bind on every medium except wireless.
    
    Signed-off-by: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
    Acked-by: David Brownell <dbrownell at users.sourceforge.net>
    Signed-off-by: John W. Linville <linville at tuxdriver.com>

commit 04136a20e91bec8cd1c2cf919ddef8fb0df83942
Author: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
Date:   Sat Jan 26 00:51:34 2008 +0200

    rndis_host: Add link_change function pointer to 'struct rndis_data'.
    
    Callback to signal link state changes from minidriver to
    'subminidrivers'.
    
    Signed-off-by: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
    Acked-by: David Brownell <dbrownell at users.sourceforge.net>
    Signed-off-by: John W. Linville <linville at tuxdriver.com>

commit 92d1f152f3861f4fafc0eea93ea904b027cb6349
Author: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
Date:   Sat Jan 26 00:51:28 2008 +0200

    rndis_host: Add early_init function pointer to 'struct rndis_data'.
    
    Function pointer is for 'subminidrivers' that need to do work on device
    right after minidriver has initialized hardware.
    
    For example, rndis_wlan setting device specific configuration parameters
    with OID_GEN_RNDIS_CONFIG_PARAMETER right after rndis_host has
    initialized hardware with RNDIS_INIT.
    
    Signed-off-by: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
    Acked-by: David Brownell <dbrownell at users.sourceforge.net>
    Signed-off-by: John W. Linville <linville at tuxdriver.com>

commit bc82bb39f2feb6d02d67dafc2a7d073b18bcd3f3
Author: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
Date:   Sat Jan 26 00:51:23 2008 +0200

    usbnet: add driver_priv pointer to 'struct usbnet'
    
    Add a private data pointer to usbnet for rndis_wlan module to use.
    
    Signed-off-by: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
    Acked-by: David Brownell <dbrownell at users.sourceforge.net>
    Signed-off-by: John W. Linville <linville at tuxdriver.com>

commit 979f81d29fcbcfb885731c179ba3fb35dc0e41e3
Author: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
Date:   Sat Jan 26 00:51:17 2008 +0200

    rndis_host: export functions
    
    Export rndis_host functions and also rename rndis_bind() to
    generic_rndis_bind() for modules using rndis_host as base.
    
    Signed-off-by: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
    Acked-by: David Brownell <dbrownell at users.sourceforge.net>
    Signed-off-by: John W. Linville <linville at tuxdriver.com>

commit acd85817a5d49a57e15c1bf623f2b42c4ce310ff
Author: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
Date:   Sat Jan 26 00:51:12 2008 +0200

    rndis_host: Split up rndis_host.c
    
    Split up rndis_host.c into rndis_host.h and rndis_base.c. This is done so
    that rndis_wlan can reuse common parts with rndis_host.
    
    Signed-off-by: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
    Acked-by: David Brownell <dbrownell at users.sourceforge.net>
    Signed-off-by: John W. Linville <linville at tuxdriver.com>

commit 4339098646304ad10352e2d88db7938aefc4f274
Author: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
Date:   Sat Jan 26 00:51:06 2008 +0200

    usbnet: Use wlan device name for RNDIS wireless devices
    
    Use wlan device name for RNDIS wireless devices.
    
    Signed-off-by: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
    Signed-off-by: Bjorge Dijkstra <bjd at jooz.net>
    Acked-by: David Brownell <dbrownell at users.sourceforge.net>
    Signed-off-by: John W. Linville <linville at tuxdriver.com>

commit 7e90d8d06bb53755efc553bf68f01b98009898a1
Author: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
Date:   Sat Jan 26 00:51:01 2008 +0200

    rndis_host: Fix rndis packet filter flags.
    
    RNDIS packet filter flags are not exactly the same as CDC flags
    so we cannot reuse them.
    
    Signed-off-by: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
    Signed-off-by: Bjorge Dijkstra <bjd at jooz.net>
    Acked-by: David Brownell <dbrownell at users.sourceforge.net>
    Signed-off-by: John W. Linville <linville at tuxdriver.com>

commit 1ebc0a52277ee415989b28e83ad914051f936ef6
Author: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
Date:   Sat Jan 26 00:50:55 2008 +0200

    rndis_host: Halt device if rndis_bind fails.
    
    When bind fails after device was initialized, shutdown device properly
    by sending RNDIS_MSG_HALT.
    
    Signed-off-by: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
    Signed-off-by: Bjorge Dijkstra <bjd at jooz.net>
    Acked-by: David Brownell <dbrownell at users.sourceforge.net>
    Signed-off-by: John W. Linville <linville at tuxdriver.com>

commit 4a565e67420d42e4afb0b75e865bfe68d867469d
Author: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
Date:   Sat Jan 26 00:50:49 2008 +0200

    rndis_host: Use 1KB buffer in rndis_unbind
    
    rndis_command requires the caller to pass in a buffer of at least 1KB.
    
    Signed-off-by: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
    Signed-off-by: Bjorge Dijkstra <bjd at jooz.net>
    Acked-by: David Brownell <dbrownell at users.sourceforge.net>
    Signed-off-by: John W. Linville <linville at tuxdriver.com>

commit 43afa83e72732356f76e0663fc6e8ccc92b203ed
Author: Bjorge Dijkstra <bjd at jooz.net>
Date:   Sat Jan 26 00:50:44 2008 +0200

    cdc_ether: Hardwire CDC descriptors when missing
    
    Just as ActiveSync devices, some regular RNDIS devices also lack
    the CDC descriptors (e.g. devices based on BCM4320 WLAN chip).
    This patch hardwires the CDC descriptors for all RNDIS style devices
    when they are missing.
    
    Signed-off-by: Bjorge Dijkstra <bjd at jooz.net>
    Signed-off-by: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
    Acked-by: David Brownell <dbrownell at users.sourceforge.net>
    Signed-off-by: John W. Linville <linville at tuxdriver.com>

commit c088851901888afc7ec355ea14b03db2692a3c61
Author: Bjorge Dijkstra <bjd at jooz.net>
Date:   Sat Jan 26 00:50:38 2008 +0200

    rndis_host: Fix sparse warning
    
    rndis_unbind and usbnet_cdc_unbind don't return anything.
    
[...3948 lines suppressed...]
+	.tx_fixup =	rndis_tx_fixup,
+	.reset =	rndis_wext_reset,
+	.early_init =	bcm4320_early_init,
+	.link_change =	rndis_wext_link_change,
+};
+
+static const struct driver_info rndis_wext_info = {
+	.description =	"Wireless RNDIS device",
+	.flags =	FLAG_WLAN | FLAG_FRAMING_RN | FLAG_NO_SETINT,
+	.bind =		rndis_wext_bind,
+	.unbind =	rndis_wext_unbind,
+	.status =	rndis_status,
+	.rx_fixup =	rndis_rx_fixup,
+	.tx_fixup =	rndis_tx_fixup,
+	.reset =	rndis_wext_reset,
+	.early_init =	bcm4320_early_init,
+	.link_change =	rndis_wext_link_change,
+};
+
+/*-------------------------------------------------------------------------*/
+
+static const struct usb_device_id products [] = {
+#define	RNDIS_MASTER_INTERFACE \
+	.bInterfaceClass	= USB_CLASS_COMM, \
+	.bInterfaceSubClass	= 2 /* ACM */, \
+	.bInterfaceProtocol	= 0x0ff
+
+/* INF driver for these devices have DriverVer >= 4.xx.xx.xx and many custom
+ * parameters available. Chipset marked as 'BCM4320SKFBG' in NDISwrapper-wiki.
+ */
+{
+	.match_flags	=   USB_DEVICE_ID_MATCH_INT_INFO
+			  | USB_DEVICE_ID_MATCH_DEVICE,
+	.idVendor		= 0x0411,
+	.idProduct		= 0x00bc,	/* Buffalo WLI-U2-KG125S */
+	RNDIS_MASTER_INTERFACE,
+	.driver_info		= (unsigned long) &bcm4320b_info,
+}, {
+	.match_flags	=   USB_DEVICE_ID_MATCH_INT_INFO
+			  | USB_DEVICE_ID_MATCH_DEVICE,
+	.idVendor		= 0x0baf,
+	.idProduct		= 0x011b,	/* U.S. Robotics USR5421 */
+	RNDIS_MASTER_INTERFACE,
+	.driver_info		= (unsigned long) &bcm4320b_info,
+}, {
+	.match_flags	=   USB_DEVICE_ID_MATCH_INT_INFO
+			  | USB_DEVICE_ID_MATCH_DEVICE,
+	.idVendor		= 0x050d,
+	.idProduct		= 0x011b,	/* Belkin F5D7051 */
+	RNDIS_MASTER_INTERFACE,
+	.driver_info		= (unsigned long) &bcm4320b_info,
+}, {
+	.match_flags	=   USB_DEVICE_ID_MATCH_INT_INFO
+			  | USB_DEVICE_ID_MATCH_DEVICE,
+	.idVendor		= 0x1799,	/* Belkin has two vendor ids */
+	.idProduct		= 0x011b,	/* Belkin F5D7051 */
+	RNDIS_MASTER_INTERFACE,
+	.driver_info		= (unsigned long) &bcm4320b_info,
+}, {
+	.match_flags	=   USB_DEVICE_ID_MATCH_INT_INFO
+			  | USB_DEVICE_ID_MATCH_DEVICE,
+	.idVendor		= 0x13b1,
+	.idProduct		= 0x0014,	/* Linksys WUSB54GSv2 */
+	RNDIS_MASTER_INTERFACE,
+	.driver_info		= (unsigned long) &bcm4320b_info,
+}, {
+	.match_flags	=   USB_DEVICE_ID_MATCH_INT_INFO
+			  | USB_DEVICE_ID_MATCH_DEVICE,
+	.idVendor		= 0x13b1,
+	.idProduct		= 0x0026,	/* Linksys WUSB54GSC */
+	RNDIS_MASTER_INTERFACE,
+	.driver_info		= (unsigned long) &bcm4320b_info,
+}, {
+	.match_flags	=   USB_DEVICE_ID_MATCH_INT_INFO
+			  | USB_DEVICE_ID_MATCH_DEVICE,
+	.idVendor		= 0x0b05,
+	.idProduct		= 0x1717,	/* Asus WL169gE */
+	RNDIS_MASTER_INTERFACE,
+	.driver_info		= (unsigned long) &bcm4320b_info,
+}, {
+	.match_flags	=   USB_DEVICE_ID_MATCH_INT_INFO
+			  | USB_DEVICE_ID_MATCH_DEVICE,
+	.idVendor		= 0x0a5c,
+	.idProduct		= 0xd11b,	/* Eminent EM4045 */
+	RNDIS_MASTER_INTERFACE,
+	.driver_info		= (unsigned long) &bcm4320b_info,
+}, {
+	.match_flags	=   USB_DEVICE_ID_MATCH_INT_INFO
+			  | USB_DEVICE_ID_MATCH_DEVICE,
+	.idVendor		= 0x1690,
+	.idProduct		= 0x0715,	/* BT Voyager 1055 */
+	RNDIS_MASTER_INTERFACE,
+	.driver_info		= (unsigned long) &bcm4320b_info,
+},
+/* These devices have DriverVer < 4.xx.xx.xx and do not have any custom
+ * parameters available, hardware probably contain older firmware version with
+ * no way of updating. Chipset marked as 'BCM4320????' in NDISwrapper-wiki.
+ */
+{
+	.match_flags	=   USB_DEVICE_ID_MATCH_INT_INFO
+			  | USB_DEVICE_ID_MATCH_DEVICE,
+	.idVendor		= 0x13b1,
+	.idProduct		= 0x000e,	/* Linksys WUSB54GSv1 */
+	RNDIS_MASTER_INTERFACE,
+	.driver_info		= (unsigned long) &bcm4320a_info,
+}, {
+	.match_flags	=   USB_DEVICE_ID_MATCH_INT_INFO
+			  | USB_DEVICE_ID_MATCH_DEVICE,
+	.idVendor		= 0x0baf,
+	.idProduct		= 0x0111,	/* U.S. Robotics USR5420 */
+	RNDIS_MASTER_INTERFACE,
+	.driver_info		= (unsigned long) &bcm4320a_info,
+}, {
+	.match_flags	=   USB_DEVICE_ID_MATCH_INT_INFO
+			  | USB_DEVICE_ID_MATCH_DEVICE,
+	.idVendor		= 0x0411,
+	.idProduct		= 0x004b,	/* BUFFALO WLI-USB-G54 */
+	RNDIS_MASTER_INTERFACE,
+	.driver_info		= (unsigned long) &bcm4320a_info,
+},
+/* Generic Wireless RNDIS devices that we don't have exact
+ * idVendor/idProduct/chip yet.
+ */
+{
+	/* RNDIS is MSFT's un-official variant of CDC ACM */
+	USB_INTERFACE_INFO(USB_CLASS_COMM, 2 /* ACM */, 0x0ff),
+	.driver_info = (unsigned long) &rndis_wext_info,
+}, {
+	/* "ActiveSync" is an undocumented variant of RNDIS, used in WM5 */
+	USB_INTERFACE_INFO(USB_CLASS_MISC, 1, 1),
+	.driver_info = (unsigned long) &rndis_wext_info,
+},
+	{ },		// END
+};
+MODULE_DEVICE_TABLE(usb, products);
+
+static struct usb_driver rndis_wlan_driver = {
+	.name =		"rndis_wlan",
+	.id_table =	products,
+	.probe =	usbnet_probe,
+	.disconnect =	usbnet_disconnect,
+	.suspend =	usbnet_suspend,
+	.resume =	usbnet_resume,
+};
+
+static int __init rndis_wlan_init(void)
+{
+	return usb_register(&rndis_wlan_driver);
+}
+module_init(rndis_wlan_init);
+
+static void __exit rndis_wlan_exit(void)
+{
+	usb_deregister(&rndis_wlan_driver);
+}
+module_exit(rndis_wlan_exit);
+
+MODULE_AUTHOR("Bjorge Dijkstra");
+MODULE_AUTHOR("Jussi Kivilinna");
+MODULE_DESCRIPTION("Driver for RNDIS based USB Wireless adapters");
+MODULE_LICENSE("GPL");
+
diff -up linux-2.6.24.noarch/drivers/net/wireless/Kconfig.orig linux-2.6.24.noarch/drivers/net/wireless/Kconfig
--- linux-2.6.24.noarch/drivers/net/wireless/Kconfig.orig	2008-01-29 17:12:32.000000000 -0500
+++ linux-2.6.24.noarch/drivers/net/wireless/Kconfig	2008-01-29 17:13:29.000000000 -0500
@@ -553,6 +553,34 @@ config USB_ZD1201
 	  To compile this driver as a module, choose M here: the
 	  module will be called zd1201.
 
+config USB_NET_RNDIS_WLAN
+	tristate "Wireless RNDIS USB support"
+	depends on USB && WLAN_80211 && EXPERIMENTAL
+	select USB_USBNET
+	select USB_NET_CDCETHER
+	select USB_NET_RNDIS_HOST
+	select WIRELESS_EXT
+	---help---
+	  This is a driver for wireless RNDIS devices.
+	  These are USB based adapters found in devices such as:
+
+	  Buffalo WLI-U2-KG125S
+	  U.S. Robotics USR5421
+	  Belkin F5D7051
+	  Linksys WUSB54GSv2
+	  Linksys WUSB54GSC
+	  Asus WL169gE
+	  Eminent EM4045
+	  BT Voyager 1055
+	  Linksys WUSB54GSv1
+	  U.S. Robotics USR5420
+	  BUFFALO WLI-USB-G54
+
+	  All of these devices are based on Broadcom 4320 chip which is the
+	  only wireless RNDIS chip known to date.
+
+	  If you choose to build a module, it'll be called rndis_wlan.
+
 config RTL8180
 	tristate "Realtek 8180/8185 PCI support"
 	depends on MAC80211 && PCI && WLAN_80211 && EXPERIMENTAL

linux-2.6-usb-ehci-hcd-respect-nousb.patch:

--- NEW FILE linux-2.6-usb-ehci-hcd-respect-nousb.patch ---
Make the EHCI host driver respect the "nousb" kernel option.

Signed-off-by: Chuck Ebbert <cebbert at redhat.com>

---
 drivers/usb/host/ehci-hcd.c |    3 +++
 1 file changed, 3 insertions(+)

--- linux-2.6.23.noarch.orig/drivers/usb/host/ehci-hcd.c
+++ linux-2.6.23.noarch/drivers/usb/host/ehci-hcd.c
@@ -973,6 +973,9 @@ static int __init ehci_hcd_init(void)
 {
 	int retval = 0;
 
+	if (usb_disabled())
+		return -ENODEV;
+
 	pr_debug("%s: block sizes: qh %Zd qtd %Zd itd %Zd sitd %Zd\n",
 		 hcd_name,
 		 sizeof(struct ehci_qh), sizeof(struct ehci_qtd),

linux-2.6-xfs-xfs_mount-refactor.patch:

--- NEW FILE linux-2.6-xfs-xfs_mount-refactor.patch ---
Refactoring xfs_mountfs() to call sub-functions for logical
chunks can help save a bit of stack, and can make it easier to
read this long function.

The mount path is one of the longest common callchains, easily
getting to within a few bytes of the end of a 4k stack when
over lvm, quotas are enabled, and quotacheck must be done.

With this change on top of the other stack-related changes
I've sent, I can get xfs to survive a normal xfsqa run on
4k stacks over lvm.

Signed-off-by: Eric Sandeen <sandeen at sandeen.net>

Index: linux-2.6.24.noarch/fs/xfs/xfs_mount.c
===================================================================
--- linux-2.6.24.noarch.orig/fs/xfs/xfs_mount.c
+++ linux-2.6.24.noarch/fs/xfs/xfs_mount.c
@@ -734,49 +734,13 @@ xfs_initialize_perag_data(xfs_mount_t *m
 }
 
 /*
- * xfs_mountfs
- *
- * This function does the following on an initial mount of a file system:
- *	- reads the superblock from disk and init the mount struct
- *	- if we're a 32-bit kernel, do a size check on the superblock
- *		so we don't mount terabyte filesystems
- *	- init mount struct realtime fields
- *	- allocate inode hash table for fs
- *	- init directory manager
- *	- perform recovery and init the log manager
+ * Update alignment values based on mount options and sb values
  */
-int
-xfs_mountfs(
-	xfs_mount_t	*mp,
-	int		mfsi_flags)
+STATIC int
+xfs_update_alignment(xfs_mount_t *mp, int mfsi_flags, __uint64_t *update_flags)
 {
-	xfs_buf_t	*bp;
 	xfs_sb_t	*sbp = &(mp->m_sb);
-	xfs_inode_t	*rip;
-	bhv_vnode_t	*rvp = NULL;
-	int		readio_log, writeio_log;
-	xfs_daddr_t	d;
-	__uint64_t	resblks;
-	__int64_t	update_flags;
-	uint		quotamount, quotaflags;
-	int		agno;
-	int		uuid_mounted = 0;
-	int		error = 0;
 
-	if (mp->m_sb_bp == NULL) {
-		if ((error = xfs_readsb(mp, mfsi_flags))) {
-			return error;
-		}
-	}
-	xfs_mount_common(mp, sbp);
-
-	/*
-	 * Check if sb_agblocks is aligned at stripe boundary
-	 * If sb_agblocks is NOT aligned turn off m_dalign since
-	 * allocator alignment is within an ag, therefore ag has
-	 * to be aligned at stripe boundary.
-	 */
-	update_flags = 0LL;
 	if (mp->m_dalign && !(mfsi_flags & XFS_MFSI_SECOND)) {
 		/*
 		 * If stripe unit and stripe width are not multiples
@@ -787,8 +751,7 @@ xfs_mountfs(
 			if (mp->m_flags & XFS_MOUNT_RETERR) {
 				cmn_err(CE_WARN,
 					"XFS: alignment check 1 failed");
-				error = XFS_ERROR(EINVAL);
-				goto error1;
+				return XFS_ERROR(EINVAL);
 			}
 			mp->m_dalign = mp->m_swidth = 0;
 		} else {
@@ -798,8 +761,7 @@ xfs_mountfs(
 			mp->m_dalign = XFS_BB_TO_FSBT(mp, mp->m_dalign);
 			if (mp->m_dalign && (sbp->sb_agblocks % mp->m_dalign)) {
 				if (mp->m_flags & XFS_MOUNT_RETERR) {
-					error = XFS_ERROR(EINVAL);
-					goto error1;
+					return XFS_ERROR(EINVAL);
 				}
 				xfs_fs_cmn_err(CE_WARN, mp,
 "stripe alignment turned off: sunit(%d)/swidth(%d) incompatible with agsize(%d)",
@@ -816,8 +778,7 @@ xfs_mountfs(
 "stripe alignment turned off: sunit(%d) less than bsize(%d)",
                                         	mp->m_dalign,
 						mp->m_blockmask +1);
-					error = XFS_ERROR(EINVAL);
-					goto error1;
+					return XFS_ERROR(EINVAL);
 				}
 				mp->m_swidth = 0;
 			}
@@ -830,11 +791,11 @@ xfs_mountfs(
 		if (XFS_SB_VERSION_HASDALIGN(sbp)) {
 			if (sbp->sb_unit != mp->m_dalign) {
 				sbp->sb_unit = mp->m_dalign;
-				update_flags |= XFS_SB_UNIT;
+				*update_flags |= XFS_SB_UNIT;
 			}
 			if (sbp->sb_width != mp->m_swidth) {
 				sbp->sb_width = mp->m_swidth;
-				update_flags |= XFS_SB_WIDTH;
+				*update_flags |= XFS_SB_WIDTH;
 			}
 		}
 	} else if ((mp->m_flags & XFS_MOUNT_NOALIGN) != XFS_MOUNT_NOALIGN &&
@@ -843,49 +804,45 @@ xfs_mountfs(
 			mp->m_swidth = sbp->sb_width;
 	}
 
-	xfs_alloc_compute_maxlevels(mp);
-	xfs_bmap_compute_maxlevels(mp, XFS_DATA_FORK);
-	xfs_bmap_compute_maxlevels(mp, XFS_ATTR_FORK);
-	xfs_ialloc_compute_maxlevels(mp);
+	return 0;
+}
 
-	if (sbp->sb_imax_pct) {
-		__uint64_t	icount;
+/*
+ * Set the maximum inode count for this filesystem
+ */
+STATIC void
+xfs_set_maxicount(xfs_mount_t *mp)
+{
+	xfs_sb_t	*sbp = &(mp->m_sb);
+	__uint64_t	icount;
 
-		/* Make sure the maximum inode count is a multiple of the
-		 * units we allocate inodes in.
+	if (sbp->sb_imax_pct) {
+		/*
+		 * Make sure the maximum inode count is a multiple
+		 * of the units we allocate inodes in.
 		 */
-
 		icount = sbp->sb_dblocks * sbp->sb_imax_pct;
 		do_div(icount, 100);
 		do_div(icount, mp->m_ialloc_blks);
 		mp->m_maxicount = (icount * mp->m_ialloc_blks)  <<
 				   sbp->sb_inopblog;
-	} else
+	} else {
 		mp->m_maxicount = 0;
-
-	mp->m_maxioffset = xfs_max_file_offset(sbp->sb_blocklog);
-
-	/*
-	 * XFS uses the uuid from the superblock as the unique
-	 * identifier for fsid.  We can not use the uuid from the volume
-	 * since a single partition filesystem is identical to a single
-	 * partition volume/filesystem.
-	 */
-	if ((mfsi_flags & XFS_MFSI_SECOND) == 0 &&
-	    (mp->m_flags & XFS_MOUNT_NOUUID) == 0) {
-		if (xfs_uuid_mount(mp)) {
-			error = XFS_ERROR(EINVAL);
-			goto error1;
-		}
-		uuid_mounted=1;
 	}
+}
+
+/*
+ * Set the default minimum read and write sizes unless
+ * already specified in a mount option.
+ * We use smaller I/O sizes when the file system
+ * is being used for NFS service (wsync mount option).
+ */
+STATIC void
+xfs_set_rw_sizes(xfs_mount_t *mp)
+{
+	xfs_sb_t	*sbp = &(mp->m_sb);
+	int		readio_log, writeio_log;
 
-	/*
-	 * Set the default minimum read and write sizes unless
-	 * already specified in a mount option.
-	 * We use smaller I/O sizes when the file system
-	 * is being used for NFS service (wsync mount option).
-	 */
 	if (!(mp->m_flags & XFS_MOUNT_DFLT_IOSIZE)) {
 		if (mp->m_flags & XFS_MOUNT_WSYNC) {
 			readio_log = XFS_WSYNC_READIO_LOG;
@@ -911,17 +868,14 @@ xfs_mountfs(
 		mp->m_writeio_log = writeio_log;
 	}
 	mp->m_writeio_blocks = 1 << (mp->m_writeio_log - sbp->sb_blocklog);
+}
 
-	/*
-	 * Set the inode cluster size.
-	 * This may still be overridden by the file system
-	 * block size if it is larger than the chosen cluster size.
-	 */
-	mp->m_inode_cluster_size = XFS_INODE_BIG_CLUSTER_SIZE;
-
-	/*
-	 * Set whether we're using inode alignment.
-	 */
+/*
+ * Set whether we're using inode alignment.
+ */
+STATIC void
+xfs_set_inoalignment(xfs_mount_t *mp)
+{
 	if (XFS_SB_VERSION_HASALIGN(&mp->m_sb) &&
 	    mp->m_sb.sb_inoalignmt >=
 	    XFS_B_TO_FSBT(mp, mp->m_inode_cluster_size))
@@ -937,14 +891,22 @@ xfs_mountfs(
 		mp->m_sinoalign = mp->m_dalign;
 	else
 		mp->m_sinoalign = 0;
-	/*
-	 * Check that the data (and log if separate) are an ok size.
-	 */
+}
+
+/*
+ * Check that the data (and log if separate) are an ok size.
+ */
+STATIC int
+xfs_check_sizes(xfs_mount_t *mp, int mfsi_flags)
+{
+	xfs_buf_t	*bp;
+	xfs_daddr_t	d;
+	int		error;
+
 	d = (xfs_daddr_t)XFS_FSB_TO_BB(mp, mp->m_sb.sb_dblocks);
 	if (XFS_BB_TO_FSB(mp, d) != mp->m_sb.sb_dblocks) {
 		cmn_err(CE_WARN, "XFS: size check 1 failed");
-		error = XFS_ERROR(E2BIG);
-		goto error1;
+		return XFS_ERROR(E2BIG);
 	}
 	error = xfs_read_buf(mp, mp->m_ddev_targp,
 			     d - XFS_FSS_TO_BB(mp, 1),
@@ -953,10 +915,9 @@ xfs_mountfs(
 		xfs_buf_relse(bp);
 	} else {
 		cmn_err(CE_WARN, "XFS: size check 2 failed");
-		if (error == ENOSPC) {
+		if (error == ENOSPC)
 			error = XFS_ERROR(E2BIG);
-		}
-		goto error1;
+		return error;
 	}
 
 	if (((mfsi_flags & XFS_MFSI_CLIENT) == 0) &&
@@ -964,8 +925,7 @@ xfs_mountfs(
 		d = (xfs_daddr_t)XFS_FSB_TO_BB(mp, mp->m_sb.sb_logblocks);
 		if (XFS_BB_TO_FSB(mp, d) != mp->m_sb.sb_logblocks) {
 			cmn_err(CE_WARN, "XFS: size check 3 failed");
-			error = XFS_ERROR(E2BIG);
-			goto error1;
+			return XFS_ERROR(E2BIG);
 		}
 		error = xfs_read_buf(mp, mp->m_logdev_targp,
 				     d - XFS_FSB_TO_BB(mp, 1),
@@ -974,17 +934,110 @@ xfs_mountfs(
 			xfs_buf_relse(bp);
 		} else {
 			cmn_err(CE_WARN, "XFS: size check 3 failed");
-			if (error == ENOSPC) {
+			if (error == ENOSPC)
 				error = XFS_ERROR(E2BIG);
-			}
+			return error;
+		}
+	}
+	return 0;
+}
+
+/*
+ * xfs_mountfs
+ *
+ * This function does the following on an initial mount of a file system:
+ *	- reads the superblock from disk and init the mount struct
+ *	- if we're a 32-bit kernel, do a size check on the superblock
+ *		so we don't mount terabyte filesystems
+ *	- init mount struct realtime fields
+ *	- allocate inode hash table for fs
+ *	- init directory manager
+ *	- perform recovery and init the log manager
+ */
+int
+xfs_mountfs(
+	xfs_mount_t	*mp,
+	int		mfsi_flags)
+{
+	xfs_sb_t	*sbp = &(mp->m_sb);
+	xfs_inode_t	*rip;
+	bhv_vnode_t	*rvp = NULL;
+	__uint64_t	resblks;
+	__int64_t	update_flags = 0LL;
+	uint		quotamount, quotaflags;
+	int		agno;
+	int		uuid_mounted = 0;
+	int		error = 0;
+
+	if (mp->m_sb_bp == NULL) {
+		error = xfs_readsb(mp, mfsi_flags);
+		if (error)
+			return error;
+	}
+	xfs_mount_common(mp, sbp);
+
+	/*
+	 * Check if sb_agblocks is aligned at stripe boundary
+	 * If sb_agblocks is NOT aligned turn off m_dalign since
+	 * allocator alignment is within an ag, therefore ag has
+	 * to be aligned at stripe boundary.
+	 */
+	error = xfs_update_alignment(mp, mfsi_flags, &update_flags);
+	if (error)
+		goto error1;
+
+	xfs_alloc_compute_maxlevels(mp);
+	xfs_bmap_compute_maxlevels(mp, XFS_DATA_FORK);
+	xfs_bmap_compute_maxlevels(mp, XFS_ATTR_FORK);
+	xfs_ialloc_compute_maxlevels(mp);
+
+	xfs_set_maxicount(mp);
+
+	mp->m_maxioffset = xfs_max_file_offset(sbp->sb_blocklog);
+
+	/*
+	 * XFS uses the uuid from the superblock as the unique
+	 * identifier for fsid.  We can not use the uuid from the volume
+	 * since a single partition filesystem is identical to a single
+	 * partition volume/filesystem.
+	 */
+	if ((mfsi_flags & XFS_MFSI_SECOND) == 0 &&
+	    (mp->m_flags & XFS_MOUNT_NOUUID) == 0) {
+		if (xfs_uuid_mount(mp)) {
+			error = XFS_ERROR(EINVAL);
 			goto error1;
 		}
 	}
 
 	/*
+	 * Set the minimum read and write sizes
+	 */
+	xfs_set_rw_sizes(mp);
+
+	/*
+	 * Set the inode cluster size.
+	 * This may still be overridden by the file system
+	 * block size if it is larger than the chosen cluster size.
+	 */
+	mp->m_inode_cluster_size = XFS_INODE_BIG_CLUSTER_SIZE;
+
+	/*
+	 * Set inode alignment fields
+	 */
+	xfs_set_inoalignment(mp);
+
+	/*
+	 * Check that the data (and log if separate) are an ok size.
+	 */
+	error = xfs_check_sizes(mp, mfsi_flags);
+	if (error)
+		goto error1;
+
+	/*
 	 * Initialize realtime fields in the mount structure
 	 */
-	if ((error = xfs_rtmount_init(mp))) {
+	error = xfs_rtmount_init(mp);
+	if (error) {
 		cmn_err(CE_WARN, "XFS: RT mount failed");
 		goto error1;
 	}
@@ -1102,7 +1155,8 @@ xfs_mountfs(
 	/*
 	 * Initialize realtime inode pointers in the mount structure
 	 */
-	if ((error = xfs_rtmount_inodes(mp))) {
+	error = xfs_rtmount_inodes(mp);
+	if (error) {
 		/*
 		 * Free up the root inode.
 		 */
@@ -1120,7 +1174,8 @@ xfs_mountfs(
 	/*
 	 * Initialise the XFS quota management subsystem for this mount
 	 */
-	if ((error = XFS_QM_INIT(mp, &quotamount, &quotaflags)))
+	error = XFS_QM_INIT(mp, &quotamount, &quotaflags);
+	if (error)
 		goto error4;
 
 	/*
@@ -1137,7 +1192,8 @@ xfs_mountfs(
 	/*
 	 * Complete the quota initialisation, post-log-replay component.
 	 */
-	if ((error = XFS_QM_MOUNT(mp, quotamount, quotaflags, mfsi_flags)))
+	error = XFS_QM_MOUNT(mp, quotamount, quotaflags, mfsi_flags);
+	if (error)
 		goto error4;
 
 	/*


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

iD8DBQBHmR5WyGugalF9Dw4RAgviAJsF8E19NUBvcgI4inL02JCSMljEHwCbBfsp
fU6wxlRC0o2yQ596/IyRLNI=
=2egt
-----END PGP SIGNATURE-----


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

iD8DBQBHr+l5yGugalF9Dw4RArSvAJ9NtOZp5lvXwAbx83V1lMG8150nEwCfb6Ti
5gw5HS/wmt5i32IdqFfKMvo=
=uXwp
-----END PGP SIGNATURE-----


Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/.cvsignore,v
retrieving revision 1.715
retrieving revision 1.716
diff -u -r1.715 -r1.716
--- .cvsignore	8 Feb 2008 20:57:57 -0000	1.715
+++ .cvsignore	15 Feb 2008 23:58:52 -0000	1.716
@@ -1,6 +1,6 @@
 clog
 kernel-2.6.*.config
 temp-*
-kernel-2.6.23
-linux-2.6.23.tar.bz2
-patch-2.6.23.15.bz2
+kernel-2.6.24
+linux-2.6.24.tar.bz2
+patch-2.6.24.2.bz2


Index: config-debug
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-debug,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- config-debug	15 Aug 2007 21:38:28 -0000	1.4
+++ config-debug	15 Feb 2008 23:58:52 -0000	1.5
@@ -25,4 +25,6 @@
 CONFIG_DEBUG_STACK_USAGE=y
 
 CONFIG_ACPI_DEBUG=y
-# CONFIG_ACPI_DEBUG_FUNC_TRACE is not set
\ No newline at end of file
+# CONFIG_ACPI_DEBUG_FUNC_TRACE is not set
+
+CONFIG_DEBUG_SG=y


Index: config-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-generic,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -r1.47 -r1.48
--- config-generic	31 Jan 2008 20:09:39 -0000	1.47
+++ config-generic	15 Feb 2008 23:58:52 -0000	1.48
@@ -10,6 +10,8 @@
 # Code maturity level options
 #
 CONFIG_EXPERIMENTAL=y
+CONFIG_HOTPLUG=y
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 #
@@ -38,8 +40,8 @@
 CONFIG_IOSCHED_DEADLINE=y
 CONFIG_IOSCHED_CFQ=y
 CONFIG_DEFAULT_CFQ=y
-CONFIG_IPC_NS=y
 CONFIG_USER_NS=y
+CONFIG_PID_NS=y
 CONFIG_POSIX_MQUEUE=y
 # CONFIG_PREEMPT_NONE is not set
 CONFIG_PREEMPT_VOLUNTARY=y
@@ -74,12 +76,12 @@
 CONFIG_PCIEAER=y
 CONFIG_HOTPLUG_PCI_PCIE=m
 CONFIG_HOTPLUG_PCI_FAKE=m
-# CONFIG_HOTPLUG_PCI_PCIE_POLL_EVENT_MODE is not set
+CONFIG_PCI_LEGACY=y
+
 CONFIG_ISA=y
 # CONFIG_EISA is not set
 # CONFIG_MCA is not set
 # CONFIG_SCx200 is not set
-CONFIG_HOTPLUG=y
 # CONFIG_DEBUG_KOBJECT is not set
 
 #
@@ -97,12 +99,14 @@
 CONFIG_PCCARD=y
 CONFIG_MMC=m
 CONFIG_MMC_BLOCK_BOUNCE=y
+CONFIG_SDIO_UART=m
 # CONFIG_MMC_DEBUG is not set
 # CONFIG_MMC_UNSAFE_RESUME is not set
 CONFIG_MMC_BLOCK=m
-CONFIG_MMC_WBSD=m
+CONFIG_MMC_RICOH_MMC=m
 CONFIG_MMC_SDHCI=m
 CONFIG_MMC_TIFM_SD=m
+CONFIG_MMC_WBSD=m
 
 CONFIG_INFINIBAND=m
 CONFIG_INFINIBAND_MTHCA=m
@@ -110,7 +114,7 @@
 CONFIG_INFINIBAND_IPOIB=m
 CONFIG_INFINIBAND_IPOIB_DEBUG=y
 CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y
-# CONFIG_INFINIBAND_IPOIB_CM is not set
+CONFIG_INFINIBAND_IPOIB_CM=y
 CONFIG_INFINIBAND_SRP=m
 CONFIG_INFINIBAND_USER_MAD=m
 CONFIG_INFINIBAND_USER_ACCESS=m
@@ -155,6 +159,11 @@
 CONFIG_MTD_BLOCK=m
 CONFIG_MTD_BLOCK_RO=m
 CONFIG_MTD_BLOCK2MTD=m
+
+CONFIG_MTD_OOPS=m
+# CONFIG_MTD_INTEL_VR_NOR is not set
+CONFIG_MTD_ALAUDA=m
+
 CONFIG_FTL=m
 CONFIG_NFTL=m
 CONFIG_NFTL_RW=y
@@ -360,8 +369,6 @@
 # CONFIG_BLK_DEV_OPTI621 is not set
 CONFIG_BLK_DEV_RZ1000=y
 CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-# CONFIG_IDEDMA_ONLYDISK is not set
 CONFIG_BLK_DEV_AEC62XX=y
 CONFIG_BLK_DEV_ALI15X3=y
 # CONFIG_WDC_ALI15X3 is not set
@@ -388,10 +395,9 @@
 # CONFIG_BLK_DEV_SLC90E66 is not set
 # CONFIG_BLK_DEV_TRM290 is not set
 CONFIG_BLK_DEV_VIA82CXXX=y
-# CONFIG_IDE_CHIPSETS is not set
 CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
 # CONFIG_BLK_DEV_HD is not set
+CONFIG_VIRTIO_BLK=m
 
 #
 # SCSI device support
@@ -402,6 +408,7 @@
 CONFIG_SCSI_TGT=m
 CONFIG_SCSI_SCAN_ASYNC=y
 CONFIG_SCSI_SRP=m
+CONFIG_SCSI_SRP_ATTRS=m
 
 #
 # SCSI support type (disk, tape, CD-ROM)
@@ -422,8 +429,10 @@
 CONFIG_SCSI_LOGGING=y
 CONFIG_SCSI_SPI_ATTRS=m
 CONFIG_SCSI_FC_ATTRS=m
+CONFIG_SCSI_FC_TGT_ATTRS=y
 CONFIG_SCSI_ISCSI_ATTRS=m
 CONFIG_SCSI_SAS_ATTRS=m
+CONFIG_SCSI_SRP_TGT_ATTRS=y
 CONFIG_SCSI_SAS_LIBSAS=m
 CONFIG_SCSI_SAS_ATA=y
 # CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set
@@ -483,6 +492,7 @@
 CONFIG_SATA_VIA=m
 CONFIG_SATA_VITESSE=m
 
+CONFIG_PATA_ACPI=m
 CONFIG_PATA_ALI=m
 CONFIG_PATA_AMD=m
 CONFIG_PATA_ARTOP=m
@@ -492,6 +502,7 @@
 CONFIG_PATA_CS5520=m
 CONFIG_PATA_CS5530=m
 CONFIG_PATA_CS5535=m
+CONFIG_PATA_CS5536=m
 CONFIG_PATA_CYPRESS=m
 CONFIG_PATA_EFAR=m
 CONFIG_ATA_GENERIC=m
@@ -512,6 +523,7 @@
 CONFIG_PATA_OLDPIIX=m
 CONFIG_PATA_NETCELL=m
 CONFIG_PATA_NS87410=m
+CONFIG_PATA_NS87415=m
 CONFIG_PATA_OPTI=m
 CONFIG_PATA_OPTIDMA=m
 CONFIG_PATA_PCMCIA=m
@@ -593,13 +605,16 @@
 CONFIG_DM_MIRROR=m
 CONFIG_DM_MULTIPATH=m
 CONFIG_DM_MULTIPATH_EMC=m
+CONFIG_DM_MULTIPATH_HP=m
 CONFIG_DM_MULTIPATH_RDAC=m
 CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_UEVENT=y
 CONFIG_DM_ZERO=m
 
 #
 # Fusion MPT device support
 #
+CONFIG_FUSION=y
 CONFIG_FUSION_SPI=m
 CONFIG_FUSION_FC=m
 CONFIG_FUSION_MAX_SGE=40
@@ -656,6 +671,7 @@
 CONFIG_NET_KEY=m
 CONFIG_NET_KEY_MIGRATE=y
 CONFIG_INET=y
+CONFIG_INET_LRO=y
 CONFIG_INET_TUNNEL=m
 CONFIG_INET_DIAG=m
 CONFIG_IP_MULTICAST=y
@@ -663,11 +679,6 @@
 CONFIG_IP_MULTIPLE_TABLES=y
 CONFIG_IP_ROUTE_MULTIPATH=y
 CONFIG_IP_ROUTE_VERBOSE=y
-# CONFIG_IP_ROUTE_MULTIPATH_CACHED is not set
-CONFIG_IP_ROUTE_MULTIPATH_RR=m
-CONFIG_IP_ROUTE_MULTIPATH_RANDOM=m
-CONFIG_IP_ROUTE_MULTIPATH_WRANDOM=m
-CONFIG_IP_ROUTE_MULTIPATH_DRR=m
 # CONFIG_IP_PNP is not set
 CONFIG_NET_IPIP=m
 CONFIG_NET_IPGRE=m
@@ -681,8 +692,10 @@
 CONFIG_INET_ESP=m
 CONFIG_INET_IPCOMP=m
 CONFIG_NETCONSOLE=m
+CONFIG_NETCONSOLE_DYNAMIC=y
 CONFIG_NETPOLL_TRAP=y
 CONFIG_NET_POLL_CONTROLLER=y
+CONFIG_VIRTIO_NET=m
 
 #
 # IP: Virtual Server Configuration
@@ -721,6 +734,8 @@
 CONFIG_IPV6_MULTIPLE_TABLES=y
 
 CONFIG_NET_9P=m
+CONFIG_NET_9P_FD=m
+CONFIG_NET_9P_VIRTIO=m
 # CONFIG_NET_9P_DEBUG is not set
 
 CONFIG_DECNET=m
@@ -768,6 +783,7 @@
 CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
 CONFIG_NETFILTER_XT_MATCH_STRING=m
 CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
 CONFIG_NETFILTER_XT_MATCH_U32=m
 
 # CONFIG_NETFILTER_DEBUG is not set
@@ -943,7 +959,6 @@
 CONFIG_NET_SCH_HFSC=m
 CONFIG_NET_SCH_NETEM=m
 CONFIG_NET_SCH_RR=m
-CONFIG_NET_ESTIMATOR=y
 CONFIG_NET_CLS=y
 CONFIG_NET_CLS_TCINDEX=m
 CONFIG_NET_CLS_ROUTE4=m
@@ -954,7 +969,6 @@
 CONFIG_NET_CLS_RSVP=m
 CONFIG_NET_CLS_RSVP6=m
 CONFIG_NET_CLS_POLICE=y
-CONFIG_NET_ACT_POLICE=m
 CONFIG_CLS_U32_PERF=y
 CONFIG_NET_CLS_IND=y
 CONFIG_NET_CLS_ACT=y
@@ -969,9 +983,11 @@
 
 CONFIG_NET_ACT_GACT=m
 CONFIG_GACT_PROB=y
-CONFIG_NET_ACT_MIRRED=m
 CONFIG_NET_ACT_IPT=m
+CONFIG_NET_ACT_MIRRED=m
+CONFIG_NET_ACT_NAT=m
 CONFIG_NET_ACT_PEDIT=m
+CONFIG_NET_ACT_POLICE=m
 CONFIG_NET_ACT_SIMP=m
 
 
@@ -993,6 +1009,7 @@
 CONFIG_MACVLAN=m
 CONFIG_EQUALIZER=m
 CONFIG_TUN=m
+CONFIG_VETH=m
 CONFIG_NET_SB1000=m
 
 #
@@ -1051,6 +1068,9 @@
 CONFIG_FIXED_PHY=m
 CONFIG_FIXED_MII_10_FDX=y
 CONFIG_FIXED_MII_100_FDX=y
+CONFIG_FIXED_MII_1000_FDX=y
+CONFIG_FIXED_MII_AMNT=1
+CONFIG_MDIO_BITBANG=m
 CONFIG_ICPLUS_PHY=m
 CONFIG_LXT_PHY=m
 CONFIG_MARVELL_PHY=m
@@ -1097,7 +1117,7 @@
 CONFIG_BNX2=m
 CONFIG_QLA3XXX=m
 CONFIG_ATL1=m
-# CONFIG_DGRS is not set
+CONFIG_ATL2=m
 # CONFIG_EEPRO100 is not set
 CONFIG_E100=m
 CONFIG_FEALNX=m
@@ -1127,7 +1147,6 @@
 CONFIG_DE600=m
 CONFIG_DE620=m
 CONFIG_CASSINI=m
-CONFIG_ATL2=m
 # CONFIG_FEC_8XX is not set
 
 #
@@ -1148,6 +1167,7 @@
 CONFIG_R8169_VLAN=y
 # CONFIG_SK98LIN is not set
 CONFIG_SKGE=m
+# CONFIG_SKGE_DEBUG is not set
 CONFIG_TIGON3=m
 CONFIG_SKY2=m
 # CONFIG_SKY2_DEBUG is not set
@@ -1155,16 +1175,20 @@
 #
 # Ethernet (10000 Mbit)
 #
-CONFIG_IXGB=m
-CONFIG_IXGB_NAPI=y
-CONFIG_S2IO=m
-CONFIG_S2IO_NAPI=y
-CONFIG_MYRI10GE=m
-CONFIG_NETXEN_NIC=m
 CONFIG_CHELSIO_T1=m
 CONFIG_CHELSIO_T1_1G=y
 CONFIG_CHELSIO_T1_NAPI=y
 CONFIG_CHELSIO_T3=m
+CONFIG_IP1000=m
+CONFIG_IXGB=m
+CONFIG_IXGB_NAPI=y
+CONFIG_IXGBE=m
+CONFIG_MYRI10GE=m
+CONFIG_NETXEN_NIC=m
+CONFIG_NIU=m
+CONFIG_S2IO=m
+CONFIG_S2IO_NAPI=y
+CONFIG_TEHUTI=m
 
 CONFIG_FDDI=y
 # CONFIG_DEFXX is not set
@@ -1198,15 +1222,14 @@
 # CONFIG_PCMCIA_RAYCS is not set
 
 CONFIG_MAC80211=m
-CONFIG_MAC80211_RC_DEFAULT_CHOICE=y
 CONFIG_MAC80211_RC_DEFAULT_PID=y
 # CONFIG_MAC80211_RC_DEFAULT_SIMPLE is not set
 CONFIG_MAC80211_RC_DEFAULT="pid"
 CONFIG_MAC80211_RC_PID=y
 CONFIG_MAC80211_RC_SIMPLE=y
 CONFIG_MAC80211_LEDS=y
-CONFIG_MAC80211_HT=y
-# CONFIG_MAC80211_DEBUGFS is not set
+CONFIG_MAC80211_DEBUGFS=y
+# CONFIG_MAC80211_DEBUG_PACKET_ALIGNMENT is not set
 # CONFIG_MAC80211_DEBUG is not set
 CONFIG_IEEE80211=m
 CONFIG_IEEE80211_DEBUG=y
@@ -1225,17 +1248,9 @@
 CONFIG_ATMEL=m
 # CONFIG_BCM43XX is not set
 CONFIG_B43=m
-CONFIG_B43_PCI=y
 CONFIG_B43_PCMCIA=y
 CONFIG_B43_DEBUG=y
-CONFIG_B43_DMA=y
-CONFIG_B43_PIO=y
-CONFIG_B43_DMA_AND_PIO_MODE=y
-# CONFIG_B43_DMA_MODE is not set
-# CONFIG_B43_PIO_MODE is not set
 CONFIG_B43LEGACY=m
-CONFIG_B43LEGACY_PCI=y
-CONFIG_B43LEGACY_PCMCIA=y
 CONFIG_B43LEGACY_DEBUG=y
 CONFIG_B43LEGACY_DMA=y
 CONFIG_B43LEGACY_PIO=y
@@ -1256,8 +1271,8 @@
 CONFIG_LIBERTAS=m
 CONFIG_LIBERTAS_USB=m
 CONFIG_LIBERTAS_CS=m
-# CONFIG_LIBERTAS_DEBUG is not set
-
+CONFIG_LIBERTAS_SDIO=m
+CONFIG_LIBERTAS_DEBUG=y
 CONFIG_IWL4965=m
 CONFIG_IWL4965_DEBUG=y
 CONFIG_IWL4965_SENSITIVITY=y
@@ -1281,6 +1296,7 @@
 CONFIG_PCMCIA_ATMEL=m
 CONFIG_PCMCIA_WL3501=m
 CONFIG_RT2X00=y
+CONFIG_RT2X00_LIB_DEBUGFS=y
 # CONFIG_RT2X00_DEBUG is not set
 CONFIG_RT2400PCI=m
 CONFIG_RT2400PCI_RFKILL=y
@@ -1295,7 +1311,7 @@
 CONFIG_TMD_HERMES=m
 CONFIG_USB_ATMEL=m
 CONFIG_USB_ZD1201=m
-CONFIG_USB_NET_RNDIS_WEXT=m
+CONFIG_USB_NET_RNDIS_WLAN=m
 CONFIG_ZD1211RW=m
 # CONFIG_ZD1211RW_DEBUG is not set
 
@@ -1375,6 +1391,8 @@
 CONFIG_GIRBIL_DONGLE=m
 CONFIG_IRPORT_SIR=m
 CONFIG_KINGSUN_DONGLE=m
+CONFIG_KSDAZZLE_DONGLE=m
+CONFIG_KS959_DONGLE=m
 CONFIG_LITELINK_DONGLE=m
 CONFIG_MA600_DONGLE=m
 CONFIG_MCP2120_DONGLE=m
@@ -1424,6 +1442,8 @@
 CONFIG_BT_HCIBCM203X=m
 CONFIG_BT_HCIBFUSB=m
 CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBTSDIO=m
+CONFIG_BT_HCIUART_LL=y
 
 #
 # ISDN subsystem
@@ -1549,7 +1569,6 @@
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
 CONFIG_INPUT_JOYDEV=m
-# CONFIG_INPUT_TSDEV is not set
 CONFIG_INPUT_EVDEV=y
 # CONFIG_INPUT_EVBUG is not set
 
@@ -1670,7 +1689,7 @@
 CONFIG_TCG_NSC=m
 CONFIG_TCG_ATMEL=m
 # CONFIG_TCG_INFINEON is not set
-# CONFIG_TELCLOCK is not set
+CONFIG_TELCLOCK=m
 
 #
 # Serial drivers
@@ -1712,7 +1731,6 @@
 CONFIG_PRINTER=m
 CONFIG_LP_CONSOLE=y
 CONFIG_PPDEV=m
-CONFIG_TIPAR=m
 
 #
 # I2C support
@@ -1777,6 +1795,7 @@
 CONFIG_SENSORS_ADM1029=m
 CONFIG_SENSORS_ADM1031=m
 CONFIG_SENSORS_ADM9240=m
+CONFIG_SENSORS_ADT7470=m
 CONFIG_SENSORS_APPLESMC=m
 CONFIG_SENSORS_ASB100=m
 CONFIG_SENSORS_ATXP1=m
@@ -1790,9 +1809,14 @@
 CONFIG_SENSORS_FSCHER=m
 CONFIG_SENSORS_FSCPOS=m
 CONFIG_SENSORS_F71805F=m
+CONFIG_SENSORS_F71882FG=m
+CONFIG_SENSORS_F75375S=m
+CONFIG_SENSORS_FSCHMD=m
 CONFIG_SENSORS_GL518SM=m
 CONFIG_SENSORS_GL520SM=m
 CONFIG_SENSORS_HDAPS=m
+# CONFIG_SENSORS_I5K_AMB is not set
+CONFIG_SENSORS_IBMPEX=m
 CONFIG_SENSORS_IT87=m
 CONFIG_SENSORS_K8TEMP=m
 CONFIG_SENSORS_LM63=m
@@ -1887,7 +1911,9 @@
 # CONFIG_WAFER_WDT is not set
 # CONFIG_CPU5_WDT is not set
 CONFIG_I6300ESB_WDT=m
+CONFIG_IT8712F_WDT=m
 # CONFIG_SBC8360_WDT is not set
+# CONFIG_SBC7240_WDT is not set
 CONFIG_W83977F_WDT=m
 CONFIG_PCIPCWATCHDOG=m
 CONFIG_USBPCWATCHDOG=m
@@ -2008,6 +2034,7 @@
 CONFIG_VIDEO_CS53L32A=m
 CONFIG_VIDEO_CX25840=m
 CONFIG_VIDEO_CX2341X=m
+CONFIG_VIDEO_CX23885=m
 CONFIG_VIDEO_CX88=m
 CONFIG_VIDEO_CX88_DVB=m
 CONFIG_VIDEO_CX88_ALSA=m
@@ -2038,6 +2065,7 @@
 CONFIG_VIDEO_SAA7185=m
 CONFIG_VIDEO_SAA7191=m
 CONFIG_VIDEO_STRADIS=m
+CONFIG_VIDEO_TCM825X=m
 CONFIG_VIDEO_TDA7432=m
 CONFIG_VIDEO_TDA9840=m
 CONFIG_VIDEO_TDA9875=m
@@ -2060,6 +2088,7 @@
 CONFIG_VIDEO_ZORAN_DC30=m
 CONFIG_VIDEO_ZORAN_LML33=m
 CONFIG_VIDEO_ZORAN_LML33R10=m
+CONFIG_VIDEO_FB_IVTV=m
 CONFIG_TUNER_3036=m
 # CONFIG_TUNER_TEA5761 is not set
 
@@ -2086,14 +2115,21 @@
 #
 CONFIG_DVB_STV0299=m
 # CONFIG_DVB_SP887X is not set
+CONFIG_DVB_BT8XX=m
 CONFIG_DVB_CX24110=m
+CONFIG_DVB_L64781=m
+CONFIG_DVB_LGDT330X=m
 CONFIG_DVB_MT312=m
+CONFIG_DVB_NXT6000=m
+CONFIG_DVB_PLUTO2=m
+CONFIG_DVB_S5H1409=m
+CONFIG_DVB_S5H1420=m
+CONFIG_DVB_SP8870=m
+CONFIG_DVB_TDA10021=m
+CONFIG_DVB_TDA1004X=m
+CONFIG_DVB_TTUSB_DEC=m
 CONFIG_DVB_VES1820=m
 CONFIG_DVB_VES1X93=m
-CONFIG_DVB_TTUSB_DEC=m
-CONFIG_DVB_BT8XX=m
-CONFIG_DVB_TDA1004X=m
-CONFIG_DVB_NXT6000=m
 
 #
 # Supported SAA7146 based PCI Adapters
@@ -2153,20 +2189,13 @@
 CONFIG_DVB_USB_VP702X=m
 CONFIG_DVB_USB_VP7045=m
 
+CONFIG_DVB_TUNER_MT2131
 CONFIG_DVB_TUNER_QT1010=m
 
-CONFIG_DVB_PLUTO2=m
-CONFIG_DVB_LGDT330X=m
-
-CONFIG_DVB_S5H1420=m
-CONFIG_DVB_SP8870=m
-CONFIG_DVB_L64781=m
-CONFIG_DVB_TDA10021=m
-
 CONFIG_VIDEO_SAA7146=m
 CONFIG_VIDEO_SAA7146_VV=m
 CONFIG_VIDEO_TUNER=m
-CONFIG_VIDEO_BUF=m
+# CONFIG_VIDEO_TUNER_CUSTOMIZE is not set
 CONFIG_VIDEO_BTCX=m
 CONFIG_VIDEO_PVRUSB2=m
 CONFIG_VIDEO_PVRUSB2_24XXX=y
@@ -2241,12 +2270,13 @@
 CONFIG_FB_TILEBLITTING=y
 CONFIG_FB_TRIDENT=m
 CONFIG_FB_TRIDENT_ACCEL=y
+# CONFIG_FB_UVESA is not set
 CONFIG_FB_VESA=y
 CONFIG_FB_VGA16=m
 # CONFIG_FB_VIRTUAL is not set
 CONFIG_FB_VOODOO1=m
 # CONFIG_FB_VT8623 is not set
-
+CONFIG_FB_EFI=y
 
 # CONFIG_FIRMWARE_EDID is not set
 
@@ -2291,8 +2321,6 @@
 CONFIG_SND_PCM_OSS=m
 CONFIG_SND_PCM_OSS_PLUGINS=y
 CONFIG_SND_RTCTIMER=m
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
 CONFIG_SND_DYNAMIC_MINORS=y
 # CONFIG_SND_SUPPORT_OLD_API is not set
 
@@ -2375,6 +2403,7 @@
 CONFIG_SND_RIPTIDE=m
 CONFIG_SND_RME96=m
 CONFIG_SND_RME9652=m
+CONFIG_SND_SC6000=m
 CONFIG_SND_SONICVIBES=m
 CONFIG_SND_HDSP=m
 CONFIG_SND_TRIDENT=m
@@ -2383,6 +2412,7 @@
 CONFIG_SND_VX222=m
 CONFIG_SND_YMFPCI=m
 CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL=y
+CONFIG_SND_SIS7019=m
 
 #
 # ALSA USB devices
@@ -2401,7 +2431,6 @@
 # Open Sound System
 #
 # CONFIG_SOUND_PRIME is not set
-# CONFIG_SOUND_BT878 is not set
 
 #
 # USB support
@@ -2409,6 +2438,8 @@
 CONFIG_USB=y
 CONFIG_USB_SUPPORT=y
 # CONFIG_USB_DEBUG is not set
+
+# DEPRECATED: See bug 362221. Fix udev.
 # CONFIG_USB_DEVICE_CLASS is not set
 
 # CONFIG_USB_PERSIST is not set
@@ -2468,6 +2499,7 @@
 CONFIG_HID=m
 # debugging default is y upstream now
 CONFIG_HID_DEBUG=y
+CONFIG_HIDRAW=y
 CONFIG_HID_FF=y
 CONFIG_HID_PID=y
 CONFIG_LOGITECH_FF=y
@@ -2552,6 +2584,7 @@
 CONFIG_USB_SERIAL_AIRPRIME=m
 CONFIG_USB_SERIAL_ARK3116=m
 CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_CH341=m
 CONFIG_USB_SERIAL_CP2101=m
 CONFIG_USB_SERIAL_CYPRESS_M8=m
 CONFIG_USB_SERIAL_CYBERJACK=m
@@ -2652,6 +2685,7 @@
 CONFIG_USB_TRANCEVIBRATOR=m
 
 CONFIG_USB_QUICKCAM_MESSENGER=m
+CONFIG_USB_UVCVIDEO=m
 # CONFIG_USB_HIDINPUT_POWERBOOK is not set
 
 #
@@ -2706,9 +2740,12 @@
 CONFIG_MINIX_FS=m
 CONFIG_ROMFS_FS=m
 CONFIG_QUOTA=y
+CONFIG_QUOTA_NETLINK_INTERFACE=y
+# CONFIG_PRINT_QUOTA_WARNING is not set
 # CONFIG_QFMT_V1 is not set
 CONFIG_QFMT_V2=y
 CONFIG_QUOTACTL=y
+CONFIG_DNOTIFY=y
 CONFIG_AUTOFS_FS=m
 CONFIG_AUTOFS4_FS=m
 
@@ -2739,7 +2776,6 @@
 CONFIG_TMPFS_POSIX_ACL=y
 CONFIG_HUGETLBFS=y
 CONFIG_HUGETLB_PAGE=y
-CONFIG_RAMFS=y
 CONFIG_DEBUG_FS=y
 
 #
@@ -2758,6 +2794,7 @@
 CONFIG_JFFS2_FS_DEBUG=0
 # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
 CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
 CONFIG_JFFS2_SUMMARY=y
 CONFIG_JFFS2_FS_XATTR=y
 CONFIG_JFFS2_FS_POSIX_ACL=y
@@ -2779,6 +2816,7 @@
 #
 # Network File Systems
 #
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=m
 CONFIG_NFS_V3=y
 CONFIG_NFS_V3_ACL=y
@@ -2795,13 +2833,15 @@
 CONFIG_SUNRPC=m
 CONFIG_SUNRPC_BIND34=y
 CONFIG_SUNRPC_GSS=m
+CONFIG_SUNRPC_XPRT_RDMA=m
 CONFIG_RPCSEC_GSS_KRB5=m
 CONFIG_RPCSEC_GSS_SPKM3=m
 # CONFIG_SMB_FS is not set
 # CONFIG_SMB_NLS_DEFAULT is not set
 CONFIG_CIFS=m
 # CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
+CONFIG_CIFS_EXPERIMENTAL=y
+CONFIG_CIFS_UPCALL=y
 CONFIG_CIFS_XATTR=y
 CONFIG_CIFS_POSIX=y
 CONFIG_CIFS_WEAK_PW_HASH=y
@@ -2821,6 +2861,7 @@
 # CONFIG_AF_RXRPC is not set
 
 CONFIG_OCFS2_FS=m
+# CONFIG_OCFS2_DEBUG_FS is not set
 # CONFIG_OCFS2_DEBUG_MASKLOG is not set
 CONFIG_CONFIGFS_FS=m
 
@@ -2925,11 +2966,12 @@
 # from getting out-of-tree modules fixed is worth the trade-off.
 CONFIG_DEBUG_HIGHMEM=y
 CONFIG_DEBUG_SPINLOCK_SLEEP=y
-CONFIG_BOOT_DELAY=y
+CONFIG_BOOT_PRINTK_DELAY=y
 CONFIG_DEBUG_SLAB_LEAK=y
 CONFIG_DEBUG_LIST=y
 CONFIG_DEBUG_SHIRQ=y
 CONFIG_DEBUG_DEVRES=y
+# CONFIG_ENABLE_WARN_DEPRECATED is not set
 
 #
 # Security options
@@ -2938,16 +2980,16 @@
 CONFIG_SECURITY_NETWORK=y
 CONFIG_SECURITY_NETWORK_XFRM=y
 CONFIG_SECURITY_CAPABILITIES=y
+CONFIG_SECURITY_FILE_CAPABILITIES=y
 # CONFIG_SECURITY_ROOTPLUG is not set
 CONFIG_SECURITY_SELINUX=y
 CONFIG_SECURITY_SELINUX_BOOTPARAM=y
 CONFIG_SECURITY_SELINUX_DISABLE=y
 CONFIG_SECURITY_SELINUX_DEVELOP=y
-CONFIG_SECURITY_SELINUX_AVC_STATS=y
 CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1
 CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
 CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT=y
-CONFIG_UTS_NS=y
+CONFIG_SECURITY_SELINUX_AVC_STATS=y
 CONFIG_AUDIT=y
 CONFIG_AUDITSYSCALL=y
 
@@ -2961,6 +3003,7 @@
 CONFIG_CRYPTO_AES=m
 CONFIG_CRYPTO_ARC4=m
 CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_AUTHENC=m
 CONFIG_CRYPTO_BLOWFISH=m
 CONFIG_CRYPTO_CAMELLIA=m
 CONFIG_CRYPTO_CAST5=m
@@ -2981,6 +3024,7 @@
 CONFIG_CRYPTO_MPILIB=y
 CONFIG_CRYPTO_NULL=m
 CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_SEED=m
 CONFIG_CRYPTO_SERPENT=m
 CONFIG_CRYPTO_SHA1=y
 CONFIG_CRYPTO_SHA256=m
@@ -2991,6 +3035,7 @@
 CONFIG_CRYPTO_TWOFISH=m
 CONFIG_CRYPTO_WP512=m
 CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_XTS=m
 CONFIG_CRYPTO_TEST=m
 CONFIG_LIBCRC32C=m
 
@@ -3016,6 +3061,7 @@
 CONFIG_ATA_OVER_ETH=m
 CONFIG_BACKLIGHT_LCD_SUPPORT=y
 CONFIG_BACKLIGHT_CLASS_DEVICE=m
+# CONFIG_BACKLIGHT_CORGI is not set
 CONFIG_BACKLIGHT_PROGEAR=m
 CONFIG_FB_NVIDIA_BACKLIGHT=y
 CONFIG_FB_RIVA_BACKLIGHT=y
@@ -3027,9 +3073,18 @@
 
 CONFIG_SCHEDSTATS=y
 CONFIG_SCHED_DEBUG=y
+# CONFIG_FAIR_GROUP_SCHED is not set
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
 
 CONFIG_CPUSETS=y
-CONFIG_SYSFS_DEPRECATED=y
+CONFIG_CGROUPS=y
+# CONFIG_CGROUP_DEBUG is not set
+CONFIG_CGROUP_NS=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_PROC_PID_CPUSET=y
+
+# CONFIG_SYSFS_DEPRECATED is not set
+
 CONFIG_RELAY=y
 # CONFIG_PRINTK_TIME is not set
 CONFIG_ENABLE_MUST_CHECK=y
@@ -3049,10 +3104,8 @@
 CONFIG_IBMASR=m
 
 CONFIG_PM_LEGACY=y
-# CONFIG_PM_SYSFS_DEPRECATED is not set
 CONFIG_PM_DEBUG=y
 CONFIG_PM_TRACE=y
-# CONFIG_DISABLE_CONSOLE_SUSPEND is not set
 # CONFIG_PM_VERBOSE is not set
 
 CONFIG_CRASH=m
@@ -3069,8 +3122,8 @@
 CONFIG_SCSI_AHA1542=m
 # CONFIG_SCSI_IN2000 is not set
 CONFIG_SCSI_ARCMSR=m
+CONFIG_SCSI_ARCMSR_AER=y
 # CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_ESP_CORE is not set
 # CONFIG_SCSI_GENERIC_NCR5380 is not set
 # CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
 # CONFIG_SCSI_NCR53C406A is not set
@@ -3081,7 +3134,6 @@
 # CONFIG_SCSI_T128 is not set
 # CONFIG_SCSI_U14_34F is not set
 # CONFIG_SCSI_ULTRASTOR is not set
-# CONFIG_CD_NO_IDESCSI is not set
 
 # CONFIG_EL1 is not set
 # CONFIG_EL2 is not set
@@ -3175,7 +3227,6 @@
 # CONFIG_SND_ES968 is not set
 # CONFIG_SND_ES1688 is not set
 # CONFIG_SND_ES18XX is not set
-# CONFIG_SND_SC6000 is not set
 # CONFIG_SND_GUS_SYNTH is not set
 # CONFIG_SND_GUSCLASSIC is not set
 # CONFIG_SND_GUSEXTREME is not set
@@ -3210,7 +3261,6 @@
 CONFIG_SND_INDIGOIO=m
 CONFIG_SND_INDIGODJ=m
 # CONFIG_SND_SOC is not set
-CONFIG_SND_SIS7019=m
 
 ## END of ISA options.
 
@@ -3235,7 +3285,6 @@
 
 CONFIG_DMA_ENGINE=y
 CONFIG_NET_DMA=y
-CONFIG_INTEL_IOATDMA=m
 
 # CONFIG_UNUSED_SYMBOLS is not set
 
@@ -3258,13 +3307,8 @@
 CONFIG_CFAG12864B_RATE=20
 
 # CONFIG_PHANTOM is not set
-# CONFIG_BLINK is not set
 CONFIG_EEPROM_93CX6=m
 
-CONFIG_CPU_IDLE=y
-# CONFIG_CPU_IDLE_GOV_LADDER is not set
-CONFIG_CPU_IDLE_GOV_MENU=y
-
 CONFIG_POWER_SUPPLY=m
 # CONFIG_POWER_SUPPLY_DEBUG is not set
 CONFIG_APM_POWER=m
@@ -3278,6 +3322,7 @@
 CONFIG_UIO_CIF=m
 
 CONFIG_INSTRUMENTATION=y
+# CONFIG_MARKERS is not set
 # CONFIG_CRC7 is not set
 
 CONFIG_DEFAULT_RELATIME=y
@@ -3300,3 +3345,9 @@
 CONFIG_LIRC_SIR=m
 CONFIG_LIRC_STREAMZAP=m
 CONFIG_LIRC_TTUSBIR=m
+
+# CONFIG_SAMPLES is not set
+
+# CONFIG_WRITABLE_DEVMEM is not set
+# CONFIG_WRITABLE_DEVKMEM is not set
+


Index: config-ia64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-ia64-generic,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- config-ia64-generic	26 Aug 2007 22:57:18 -0000	1.3
+++ config-ia64-generic	15 Feb 2008 23:58:52 -0000	1.4
@@ -13,7 +13,6 @@
 # CONFIG_XEN_VT is not set
 CONFIG_MMU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-CONFIG_TIME_INTERPOLATION=y
 CONFIG_EFI=y
 # CONFIG_ITANIUM is not set
 CONFIG_MCKINLEY=y
@@ -22,6 +21,7 @@
 # CONFIG_IA64_HP_ZX1 is not set
 # CONFIG_IA64_SGI_SN2 is not set
 CONFIG_IA64_ESI=y
+CONFIG_IA64_HP_AML_NFW=y
 CONFIG_MSPEC=y
 # CONFIG_IA64_HP_SIM is not set
 # CONFIG_IA64_PAGE_SIZE_4KB is not set
@@ -34,6 +34,7 @@
 CONFIG_SPARSEMEM_MANUAL=y
 CONFIG_SPARSEMEM=y
 CONFIG_MEMORY_HOTPLUG=y
+CONFIG_MEMORY_HOTREMOVE=y
 CONFIG_IA64_MCA_RECOVERY=m
 CONFIG_IA64_CYCLONE=y
 CONFIG_MMTIMER=y
@@ -61,6 +62,7 @@
 #
 # Character devices
 #
+CONFIG_TCG_INFINEON=m
 
 #
 # Watchdog Cards
@@ -112,8 +114,10 @@
 CONFIG_ACPI=y
 CONFIG_ACPI_AC=m
 # CONFIG_ACPI_ASUS is not set
-CONFIG_ACPI_BAY=m
-CONFIG_ACPI_BATTERY=m
+CONFIG_ACPI_PROCFS_POWER=y
+CONFIG_ACPI_SYSFS_POWER=y
+# CONFIG_ACPI_BAY is not set
+# CONFIG_ACPI_BATTERY is not set
 CONFIG_ACPI_BLACKLIST_YEAR=0
 CONFIG_ACPI_BUTTON=m
 # CONFIG_ACPI_DOCK is not set
@@ -185,3 +189,7 @@
 # CONFIG_IA64_MC_ERR_INJECT is not set
 
 CONFIG_DMIID=y
+
+CONFIG_SENSORS_I5K_AMB=m
+
+CONFIG_SPARSEMEM_VMEMMAP=y


Index: config-nodebug
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-nodebug,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- config-nodebug	12 Oct 2007 22:55:54 -0000	1.5
+++ config-nodebug	15 Feb 2008 23:58:52 -0000	1.6
@@ -25,3 +25,5 @@
 # CONFIG_DEBUG_STACK_USAGE is not set
 
 # CONFIG_ACPI_DEBUG is not set
+
+# CONFIG_DEBUG_SG is not set


Index: config-powerpc-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-powerpc-generic,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- config-powerpc-generic	14 Dec 2007 16:37:31 -0000	1.10
+++ config-powerpc-generic	15 Feb 2008 23:58:52 -0000	1.11
@@ -33,8 +33,9 @@
 CONFIG_SUSPEND=y
 CONFIG_HIBERNATION=y
 # CONFIG_RTC is not set
-CONFIG_GEN_RTC=y
+# CONFIG_GEN_RTC is not set
 # CONFIG_GEN_RTC_X is not set
+CONFIG_RTC_DRV_PPC=y
 CONFIG_PROC_DEVICETREE=y
 # CONFIG_CMDLINE_BOOL is not set
 CONFIG_BLK_DEV_IDE_PMAC=y
@@ -49,6 +50,7 @@
 CONFIG_I2C_POWERMAC=y
 CONFIG_APPLE_AIRPORT=m
 CONFIG_SERIAL_PMACZILOG=m
+# CONFIG_SERIAL_PMACZILOG_TTYS is not set
 CONFIG_AGP_UNINORTH=y
 CONFIG_FB_OF=y
 # CONFIG_FB_CONTROL is not set
@@ -116,12 +118,9 @@
 # CONFIG_SGI_IOC4 is not set
 
 CONFIG_PPC_EFIKA=y
-CONFIG_PPC_LITE5200=y
+# CONFIG_PPC_LITE5200 is not set
 CONFIG_PPC_BESTCOMM=y
 CONFIG_PMAC_RACKMETER=m
-CONFIG_SERIAL_MPC52xx=y
-CONFIG_SERIAL_MPC52xx_CONSOLE=y
-CONFIG_SERIAL_MPC52xx_CONSOLE_BAUD=115200
 CONFIG_USB_OHCI_HCD_PPC_SOC=y
 CONFIG_USB_OHCI_HCD_PCI=y
 CONFIG_USB_OHCI_HCD_PPC_OF=y
@@ -157,8 +156,6 @@
 # CONFIG_BLK_DEV_IDEPNP is not set
 # CONFIG_BLK_DEV_IDEPCI is not set
 CONFIG_IDEPCI_SHARE_IRQ=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-# CONFIG_IDEDMA_ONLYDISK is not set
 # CONFIG_BLK_DEV_AEC62XX is not set
 # CONFIG_BLK_DEV_ALI15X3 is not set
 # CONFIG_BLK_DEV_AMD74XX is not set
@@ -186,9 +183,7 @@
 CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y
 CONFIG_BLK_DEV_IDEDMA_PMAC=y
 # CONFIG_IDE_ARM is not set
-# CONFIG_IDE_CHIPSETS is not set
 CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
 # CONFIG_BLK_DEV_HD is not set
 # CONFIG_USB_STORAGE_ISD200 is not set
 CONFIG_MTD_PHYSMAP_OF=m
@@ -208,8 +203,5 @@
 CONFIG_EDAC_PASEMI=m
 
 CONFIG_AXON_RAM=m
+CONFIG_OPROFILE_CELL=y
 
-# Disable OProfile for Cell until it doesn't stop oprofile.ko loading on !cell
-CONFIG_OPROFILE_CELL=n
-
-# CONFIG_MPC5200_WDT is not set


Index: config-powerpc32-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-powerpc32-generic,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- config-powerpc32-generic	29 Nov 2007 02:50:36 -0000	1.3
+++ config-powerpc32-generic	15 Feb 2008 23:58:52 -0000	1.4
@@ -47,7 +47,6 @@
 CONFIG_FB_PLATINUM=y
 CONFIG_FB_VALKYRIE=y
 CONFIG_FB_CT65550=y
-CONFIG_DMASOUND_PMAC=m
 # CONFIG_BDI_SWITCH is not set
 CONFIG_MAC_FLOPPY=m
 # CONFIG_BLK_DEV_FD is not set
@@ -66,13 +65,34 @@
 CONFIG_BRIQ_PANEL=m
 
 CONFIG_PATA_MPC52xx=m
-CONFIG_PPC_BESTCOMM=m
-CONFIG_PPC_BESTCOMM_ATA=m
-CONFIG_PPC_BESTCOMM_FEC=m
-CONFIG_PPC_BESTCOMM_GEN_BD=m
+
+CONFIG_SERIAL_MPC52xx=y
+CONFIG_SERIAL_MPC52xx_CONSOLE=y
+CONFIG_SERIAL_MPC52xx_CONSOLE_BAUD=115200
+# CONFIG_MPC5200_WDT is not set
+
+CONFIG_PPC_MPC5200_BUGFIX=y
 CONFIG_FEC_MPC52xx=m
+#CHECK: This may later become a tristate.
 CONFIG_FEC_MPC52xx_MDIO=y
 
-CONFIG_PPC_MPC5200_BUGFIX=y
 CONFIG_SERIAL_OF_PLATFORM=y
 CONFIG_DEBUG_STACKOVERFLOW=y
+
+# CONFIG_EMBEDDED6xx is not set
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+
+# CONFIG_BLK_DEV_PLATFORM is not set
+# CONFIG_BLK_DEV_4DRIVES is not set
+# CONFIG_BLK_DEV_ALI14XX is not set
+# CONFIG_BLK_DEV_DTC2278 is not set
+# CONFIG_BLK_DEV_HT6560B is not set
+# CONFIG_BLK_DEV_QD65XX is not set
+# CONFIG_BLK_DEV_UMC8672 is not set
+# CONFIG_VIRQ_DEBUG is not set
+
+CONFIG_PPC_BESTCOMM_ATA=m
+CONFIG_PPC_BESTCOMM_FEC=m
+CONFIG_PPC_BESTCOMM_GEN_BD=m
+


Index: config-powerpc64
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-powerpc64,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- config-powerpc64	14 Dec 2007 22:23:39 -0000	1.6
+++ config-powerpc64	15 Feb 2008 23:58:52 -0000	1.7
@@ -11,11 +11,12 @@
 CONFIG_PPC_PSERIES=y
 CONFIG_PPC_PMAC=y
 CONFIG_PPC_PASEMI=y
+# CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE is not set
 CONFIG_PPC_PS3=y
 CONFIG_PPC_CELLEB=y
 CONFIG_PS3_HTAB_SIZE=20
 # CONFIG_PS3_DYNAMIC_DMA is not set
-CONFIG_PS3_USE_LPAR_ADDR=y
+# CONFIG_PS3_USE_LPAR_ADDR is not set
 CONFIG_PS3_ADVANCED=y
 CONFIG_PS3_HTAB_SIZE=20
 # CONFIG_PS3_DYNAMIC_DMA is not set
@@ -108,7 +109,6 @@
 # CONFIG_FB_ATY is not set
 
 # CONFIG_POWER4_ONLY is not set
-# CONFIG_PPC_PASEMI is not set
 
 CONFIG_RTAS_PROC=y
 CONFIG_IOMMU_VMERGE=y
@@ -124,7 +124,6 @@
 
 CONFIG_EHEA=m
 CONFIG_INFINIBAND_EHCA=m
-CONFIG_INFINIBAND_EHCA_SCALING=y
 
 CONFIG_HCALL_STATS=y
 
@@ -133,3 +132,20 @@
 CONFIG_SCSI_IBMVSCSIS=m
 
 CONFIG_SECCOMP=y
+
+CONFIG_TUNE_CELL=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+# CONFIG_BLK_DEV_PLATFORM is not set
+CONFIG_IBM_NEW_EMAC=m
+CONFIG_IBM_NEW_EMAC_RXB=128
+CONFIG_IBM_NEW_EMAC_TXB=64
+CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
+CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
+CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
+# CONFIG_IBM_NEW_EMAC_DEBUG is not set
+
+# CONFIG_VIRQ_DEBUG is not set
+CONFIG_ELECTRA_CF=m
+
+CONFIG_SPARSEMEM_VMEMMAP=y


Index: config-s390x
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-s390x,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- config-s390x	20 Jul 2007 19:52:27 -0000	1.2
+++ config-s390x	15 Feb 2008 23:58:52 -0000	1.3
@@ -63,7 +63,6 @@
 CONFIG_TN3215=y
 CONFIG_TN3215_CONSOLE=y
 CONFIG_CCW_CONSOLE=y
-CONFIG_SCLP=y
 CONFIG_SCLP_TTY=y
 CONFIG_SCLP_CONSOLE=y
 CONFIG_SCLP_VT220_TTY=y


Index: config-sparc-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-sparc-generic,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- config-sparc-generic	12 Jul 2007 19:15:37 -0000	1.1
+++ config-sparc-generic	15 Feb 2008 23:58:52 -0000	1.2
@@ -39,7 +39,6 @@
 CONFIG_FB_CG14=y
 CONFIG_FB_P9100=y
 CONFIG_FB_LEO=y
-# CONFIG_FB_PCI is not set
 # CONFIG_FB_IGA is not set
 # CONFIG_MDA_CONSOLE is not set
 CONFIG_PROM_CONSOLE=y
@@ -81,7 +80,6 @@
 CONFIG_SUN_MOSTEK_RTC=y
 # CONFIG_SUN_BPP is not set
 # CONFIG_SUN_VIDEOPIX is not set
-# CONFIG_SUN_AURORA is not set
 CONFIG_TADPOLE_TS102_UCTRL=m
 CONFIG_SUN_JSFLASH=m
 CONFIG_APM_RTC_IS_GMT=y
@@ -97,7 +95,6 @@
 # CONFIG_SCSI_AIC7XXX_OLD is not set
 # CONFIG_SCSI_AIC79XX is not set
 # CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_MEGARAID is not set
 # CONFIG_SCSI_SATA is not set
 # CONFIG_SCSI_BUSLOGIC is not set
 # CONFIG_SCSI_CPQFCTS is not set
@@ -115,9 +112,6 @@
 # CONFIG_SCSI_DC395x is not set
 # CONFIG_SCSI_NSP32 is not set
 CONFIG_SCSI_SUNESP=m
-CONFIG_FC4=m
-CONFIG_FC4_SOC=m
-CONFIG_FC4_SOCAL=m
 CONFIG_SCSI_PLUTO=m
 CONFIG_SCSI_FCAL=m
 CONFIG_SUNLANCE=m


Index: config-sparc64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-sparc64-generic,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- config-sparc64-generic	19 Sep 2007 22:19:45 -0000	1.8
+++ config-sparc64-generic	15 Feb 2008 23:58:52 -0000	1.9
@@ -63,7 +63,6 @@
 CONFIG_FB_PM2=y
 CONFIG_FB_P9100=y
 # CONFIG_FB_LEO is not set
-CONFIG_FB_PCI=y
 CONFIG_FB_XVR500=y
 CONFIG_FB_XVR2500=y
 # CONFIG_MDA_CONSOLE is not set
@@ -90,7 +89,6 @@
 CONFIG_SUN_MOSTEK_RTC=y
 CONFIG_OBP_FLASH=m
 # CONFIG_SUN_VIDEOPIX is not set
-# CONFIG_SUN_AURORA is not set
 # CONFIG_SERIO_SERPORT is not set
 CONFIG_BLK_DEV_FD=y
 CONFIG_SUNVDC=m
@@ -109,15 +107,9 @@
 # CONFIG_SCSI_GDTH is not set
 # CONFIG_SCSI_AIC7XXX is not set
 # CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_MEGARAID is not set
 # CONFIG_SCSI_FUTURE_DOMAIN is not set
 CONFIG_SCSI_QLOGICPTI=m
 CONFIG_SCSI_SUNESP=m
-CONFIG_FC4=m
-CONFIG_FC4_SOC=m
-CONFIG_FC4_SOCAL=m
-CONFIG_SCSI_PLUTO=m
-CONFIG_SCSI_FCAL=m
 CONFIG_SUNLANCE=m
 CONFIG_SUNBMAC=m
 CONFIG_SUNQE=m
@@ -130,7 +122,6 @@
 CONFIG_ATM_FORE200E_USE_TASKLET=y
 CONFIG_ATM_FORE200E_DEBUG=0
 CONFIG_ATM_FORE200E_TX_RETRY=16
-CONFIG_DRM_FFB=m
 # CONFIG_DRM_TDFX is not set
 # CONFIG_DRM_R128 is not set
 # CONFIG_KEYBOARD_ATKBD is not set
@@ -138,7 +129,6 @@
 # CONFIG_INPUT_PCSPKR is not set
 CONFIG_INPUT_SPARCSPKR=m
 # CONFIG_SOUND_PRIME is not set
-CONFIG_SND_BIT32_EMUL=m
 CONFIG_SND_SUN_AMD7930=m
 CONFIG_SND_SUN_CS4231=m
 CONFIG_SND_SUN_DBRI=m
@@ -159,3 +149,4 @@
 # CONFIG_DEBUG_PAGEALLOC is not set
 # CONFIG_STACK_DEBUG is not set
 
+CONFIG_SPARSEMEM_VMEMMAP=y


Index: config-x86-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-x86-generic,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- config-x86-generic	5 Feb 2008 23:48:28 -0000	1.18
+++ config-x86-generic	15 Feb 2008 23:58:52 -0000	1.19
@@ -1,5 +1,6 @@
 CONFIG_UID16=y
-CONFIG_X86_64_XEN is not set
+# CONFIG_64BIT is not set
+
 #
 # Processor type and features
 #
@@ -50,7 +51,6 @@
 CONFIG_X86_USE_PPRO_CHECKSUM=y
 CONFIG_HPET=y
 CONFIG_HPET_TIMER=y
-CONFIG_HPET_EMULATE_RTC=y
 # CONFIG_HPET_RTC_IRQ is not set
 # CONFIG_HPET_MMAP is not set
 CONFIG_X86_LOCAL_APIC=y
@@ -61,7 +61,6 @@
 CONFIG_X86_MCE_P4THERMAL=y
 CONFIG_TOSHIBA=m
 CONFIG_I8K=m
-CONFIG_SONY_LAPTOP=m
 CONFIG_SONYPI=m
 CONFIG_SONYPI_COMPAT=y
 CONFIG_MICROCODE=m
@@ -78,7 +77,7 @@
 CONFIG_EFI=y
 CONFIG_EFI_VARS=y
 CONFIG_EFI_PCDP=y
-CONFIG_EFI_RTC=y
+CONFIG_FB_IMAC=y
 
 # CONFIG_PCI_GOBIOS is not set
 # CONFIG_PCI_GODIRECT is not set
@@ -126,6 +125,8 @@
 CONFIG_ACPI=y
 CONFIG_ACPI_AC=m
 # CONFIG_ACPI_ASUS is not set
+CONFIG_ACPI_PROCFS_POWER=y
+CONFIG_ACPI_SYSFS_POWER=y
 CONFIG_ACPI_BATTERY=m
 CONFIG_ACPI_BAY=m
 CONFIG_ACPI_BLACKLIST_YEAR=1999
@@ -140,7 +141,6 @@
 CONFIG_ACPI_PROCFS=y
 CONFIG_ACPI_SBS=m
 CONFIG_ACPI_SLEEP=y
-# CONFIG_ACPI_PROCFS_SLEEP is not set
 CONFIG_ACPI_SYSTEM=y
 CONFIG_ACPI_THERMAL=y
 CONFIG_ACPI_TOSHIBA=m
@@ -149,8 +149,6 @@
 CONFIG_ACPI_PROC_EVENT=y
 CONFIG_PNPACPI=y
 
-CONFIG_ASUS_LAPTOP=m
-CONFIG_EEEPC=m
 
 #
 # CPUFreq processor drivers
@@ -180,7 +178,7 @@
 CONFIG_X86_SPEEDSTEP_SMI=y
 CONFIG_X86_SPEEDSTEP_LIB=y
 # CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK is not set
-CONFIG_X86_P4_CLOCKMOD=m
+# CONFIG_X86_P4_CLOCKMOD is not set
 CONFIG_X86_LONGRUN=y
 # CONFIG_X86_LONGHAUL is not set
 # CONFIG_X86_CPUFREQ_NFORCE2 is not set
@@ -220,6 +218,8 @@
 CONFIG_PCI_MMCONFIG=y
 CONFIG_PCI_MMCONFIG_OFF_BY_DEFAULT=y
 CONFIG_PCI_BIOS=y
+CONFIG_DMAR=y
+CONFIG_DMAR_GFX_WA=y
 
 CONFIG_HOTPLUG_PCI=y
 CONFIG_HOTPLUG_PCI_COMPAQ=m
@@ -228,7 +228,6 @@
 
 # CONFIG_HOTPLUG_PCI_CPCI is not set
 CONFIG_HOTPLUG_PCI_PCIE=m
-# CONFIG_HOTPLUG_PCI_PCIE_POLL_EVENT_MODE is not set
 # SHPC has half-arsed PCI probing, which makes it load on too many systems
 # CONFIG_HOTPLUG_PCI_SHPC is not set
 CONFIG_PM=y
@@ -255,7 +254,6 @@
 CONFIG_I2C_AMD8111=m
 CONFIG_I2C_I801=m
 CONFIG_I2C_I810=m
-CONFIG_I2C_ISA=m
 CONFIG_I2C_NFORCE2=m
 CONFIG_I2C_PIIX4=m
 CONFIG_I2C_PROSAVAGE=m
@@ -287,13 +285,11 @@
 CONFIG_EDAC_I82975X=m
 CONFIG_EDAC_I3000=m
 CONFIG_EDAC_I5000=m
-CONFIG_EDAC_K8=m
 CONFIG_EDAC_R82600=m
 
 CONFIG_SCHED_MC=y
 
 CONFIG_SND_ES18XX=m
-CONFIG_SND_SC6000=m
 
 CONFIG_TCG_INFINEON=m
 
@@ -307,7 +303,12 @@
 # CONFIG_COMPAT_VDSO is not set
 
 # CONFIG_SGI_IOC4 is not set
+
+CONFIG_ASUS_LAPTOP=m
+CONFIG_EEEPC=m
+CONFIG_FUJITSU_LAPTOP=m
 CONFIG_MSI_LAPTOP=m
+CONFIG_SONY_LAPTOP=m
 
 # CONFIG_SMSC37B787_WDT is not set
 CONFIG_W83697HF_WDT=m
@@ -334,6 +335,10 @@
 
 CONFIG_NO_HZ=y
 CONFIG_HIGH_RES_TIMERS=y
+CONFIG_CPU_IDLE=y
+# CONFIG_CPU_IDLE_GOV_LADDER is not set
+CONFIG_CPU_IDLE_GOV_MENU=y
+
 
 CONFIG_THINKPAD_ACPI=m
 # CONFIG_THINKPAD_ACPI_DEBUG is not set
@@ -344,7 +349,14 @@
 CONFIG_DMIID=y
 
 CONFIG_VIRTUALIZATION=y
+CONFIG_PARAVIRT_GUEST=y
 CONFIG_VMI=y
 CONFIG_LGUEST=m
+CONFIG_LGUEST_GUEST=y
 # CONFIG_XEN is not set
 # CONFIG_HVC_XEN is not set
+
+CONFIG_DMADEVICES=y
+CONFIG_INTEL_IOATDMA=m
+
+CONFIG_SENSORS_I5K_AMB=m


Index: config-x86_64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-x86_64-generic,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- config-x86_64-generic	5 Feb 2008 23:48:28 -0000	1.17
+++ config-x86_64-generic	15 Feb 2008 23:58:52 -0000	1.18
@@ -1,3 +1,4 @@
+CONFIG_64BIT=y
 CONFIG_UID16=y
 # CONFIG_X86_64_XEN is not set
 # CONFIG_MK8 is not set
@@ -12,6 +13,7 @@
 # CONFIG_NUMA_EMU is not set
 CONFIG_NR_CPUS=64
 CONFIG_X86_POWERNOW_K8=y
+# CONFIG_X86_P4_CLOCKMOD is not set
 CONFIG_IA32_EMULATION=y
 # CONFIG_IA32_AOUT is not set
 # CONFIG_IOMMU_DEBUG is not set
@@ -25,6 +27,12 @@
 CONFIG_PCI_BIOS=y
 CONFIG_PCI_MMCONFIG=y
 CONFIG_PCI_MMCONFIG_OFF_BY_DEFAULT=y
+CONFIG_DMAR=y
+CONFIG_DMAR_GFX_WA=y
+
+CONFIG_EFI=y
+CONFIG_EFI_VARS=y
+CONFIG_EFI_PCDP=y
 
 CONFIG_I2O=m
 CONFIG_I2O_BLOCK=m
@@ -63,6 +71,8 @@
 CONFIG_ACPI=y
 CONFIG_ACPI_AC=m
 # CONFIG_ACPI_ASUS is not set
+CONFIG_ACPI_PROCFS_POWER=y
+CONFIG_ACPI_SYSFS_POWER=y
 CONFIG_ACPI_BATTERY=m
 CONFIG_ACPI_BAY=m
 CONFIG_ACPI_BLACKLIST_YEAR=0
@@ -77,7 +87,6 @@
 CONFIG_ACPI_PROCFS=y
 CONFIG_ACPI_SBS=m
 CONFIG_ACPI_SLEEP=y
-# CONFIG_ACPI_PROCFS_SLEEP is not set
 CONFIG_ACPI_THERMAL=y
 CONFIG_ACPI_TOSHIBA=m
 CONFIG_ACPI_POWER=y
@@ -88,6 +97,7 @@
 
 CONFIG_ASUS_LAPTOP=m
 CONFIG_EEEPC=m
+CONFIG_FUJITSU_LAPTOP=m
 CONFIG_MSI_LAPTOP=m
 CONFIG_SONY_LAPTOP=m
 CONFIG_SONYPI_COMPAT=y
@@ -102,13 +112,11 @@
 CONFIG_HOTPLUG_PCI_IBM=m
 # CONFIG_HOTPLUG_PCI_CPCI is not set
 CONFIG_HOTPLUG_PCI_PCIE=m
-# CONFIG_HOTPLUG_PCI_PCIE_POLL_EVENT_MODE is not set
 # SHPC has half-arsed PCI probing, which makes it load on too many systems
 CONFIG_HOTPLUG_PCI_SHPC=m
 CONFIG_HPET=y
 # CONFIG_HPET_MMAP is not set
 # CONFIG_HPET_RTC_IRQ is not set
-CONFIG_HPET_EMULATE_RTC=y
 CONFIG_PM=y
 
 CONFIG_IEEE80211=m
@@ -127,6 +135,8 @@
 CONFIG_PNPACPI=y
 
 CONFIG_BLK_DEV_AMD74XX=y
+CONFIG_CRYPTO_DEV_PADLOCK=m
+CONFIG_CRYPTO_DEV_PADLOCK_AES=y
 CONFIG_CRYPTO_AES_X86_64=m
 CONFIG_CRYPTO_TWOFISH_X86_64=m
 
@@ -147,7 +157,6 @@
 CONFIG_I2C_SIS96X=m
 CONFIG_I2C_VIA=m
 CONFIG_I2C_VIAPRO=m
-CONFIG_I2C_ISA=m
 
 CONFIG_DELL_RBU=m
 CONFIG_DCDBAS=m
@@ -164,7 +173,6 @@
 CONFIG_EDAC_I82875P=m
 CONFIG_EDAC_I82860=m
 CONFIG_EDAC_I82975X=m
-CONFIG_EDAC_K8=m
 CONFIG_EDAC_R82600=m
 
 CONFIG_SCHED_MC=y
@@ -182,7 +190,7 @@
 CONFIG_DEBUG_STACKOVERFLOW=y
 CONFIG_DEBUG_NMI_TIMEOUT=5
 
-CONFIG_PC8736x_GPIO=m
+# CONFIG_PC8736x_GPIO is not set
 
 # CONFIG_DISCONTIGMEM_MANUAL is not set
 CONFIG_SPARSEMEM_MANUAL=y
@@ -206,7 +214,7 @@
 # CONFIG_SMSC37B787_WDT is not set
 CONFIG_W83697HF_WDT=m
 
-CONFIG_VIDEO_CAFE_CCIC=m
+# CONFIG_VIDEO_CAFE_CCIC is not set
 
 CONFIG_KVM=m
 CONFIG_KVM_INTEL=m
@@ -226,5 +234,17 @@
 
 CONFIG_NO_HZ=y
 CONFIG_HIGH_RES_TIMERS=y
+CONFIG_CPU_IDLE=y
+# CONFIG_CPU_IDLE_GOV_LADDER is not set
+CONFIG_CPU_IDLE_GOV_MENU=y
 
 CONFIG_VIRTUALIZATION=y
+
+CONFIG_DMADEVICES=y
+CONFIG_INTEL_IOATDMA=m
+
+CONFIG_SENSORS_I5K_AMB=m
+
+# CONFIG_X86_MCE is not set
+
+CONFIG_SPARSEMEM_VMEMMAP=y


Index: config-xen-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/config-xen-generic,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- config-xen-generic	12 Jul 2007 19:15:37 -0000	1.1
+++ config-xen-generic	15 Feb 2008 23:58:52 -0000	1.2
@@ -34,9 +34,6 @@
 CONFIG_XEN_COMPAT_030002_AND_LATER=y
 # CONFIG_XEN_COMPAT_LATEST_ONLY is not set
 CONFIG_XEN_COMPAT_030002=y
-CONFIG_HAVE_ARCH_ALLOC_SKB=y
-CONFIG_HAVE_ARCH_DEV_ALLOC_SKB=y
-CONFIG_HAVE_IRQ_IGNORE_UNHANDLED=y
 CONFIG_NO_IDLE_HZ=y
 CONFIG_XEN_UTIL=y
 CONFIG_XEN_BALLOON=y


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/kernel.spec,v
retrieving revision 1.347
retrieving revision 1.348
diff -u -r1.347 -r1.348
--- kernel.spec	11 Feb 2008 22:04:01 -0000	1.347
+++ kernel.spec	15 Feb 2008 23:58:52 -0000	1.348
@@ -22,18 +22,18 @@
 #
 # Bah. Have to set this to a negative for the moment to fix rpm ordering after
 # moving the spec file. cvs sucks. Should be sure to fix this once 2.6.23 is out.
-%define fedora_cvs_origin 209
+%define fedora_cvs_origin 346
 %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 23
+%define base_sublevel 24
 
 ## If this is a released kernel ##
 %if 0%{?released_kernel}
 # Do we have a 2.6.21.y update to apply?
-%define stable_update 15
+%define stable_update 2
 # Set rpm version accordingly
 %if 0%{?stable_update}
 %define stablerev .%{stable_update}
@@ -561,14 +561,9 @@
 
 %if !%{nopatches}
 
-# CVE-2007-0600 - vmsplice
-Patch04: linux-2.6-cve-2008-0600.patch
-
 # revert upstream changes we get from elsewhere
 Patch05: linux-2.6-upstream-reverts.patch
 
-Patch10: linux-2.6-highres-timers.patch
-
 Patch21: linux-2.6-utrace-tracehook.patch
 Patch22: linux-2.6-utrace-tracehook-ia64.patch
 Patch23: linux-2.6-utrace-tracehook-sparc64.patch
@@ -588,46 +583,29 @@
 Patch37: linux-2.6-utrace-ptrace-compat-avr32.patch
 
 Patch41: linux-2.6-sysrq-c.patch
-Patch50: linux-2.6-ia64-build-id-linker-script-fix.patch
 Patch60: linux-2.6-x86-tune-generic.patch
 # Patch61: linux-2.6-x86-setup-add-near-jump.patch
 Patch70: linux-2.6-x86_64-silence-up-apic-errors.patch
-Patch72: linux-2.6-x86-tsc-calibration-2.patch
 Patch75: linux-2.6-x86-debug-boot.patch
-Patch76: linux-2.6-x86-clean-up-oops-bug-reports.patch
 
-Patch80: linux-2.6-alsa-1.0.15-merge-1.patch
-Patch81: linux-2.6-alsa-1.0.15-merge-2.patch
-Patch82: linux-2.6-alsa-1.0.15-merge-3.patch
 Patch86: linux-2.6-alsa-support-sis7019.patch
 Patch87: linux-2.6-alsa-hda-stac-dmic.patch
 Patch88: linux-2.6-alsa-drivers-set-device-links.patch
 Patch89: linux-2.6-alsa-hda-fix-waitloop.patch
 Patch90: linux-2.6-alsa-hda-stac-add-delay.patch
 
-Patch100: linux-2.6-ppc-pegasos-via-ata-legacy-irq.patch
-Patch101: linux-2.6-ppc-fix-dso-unwind.patch
-Patch102: linux-2.6-rheap-modular.patch
-Patch103: linux-2.6-bestcomm-dma.patch
-Patch104: linux-2.6-fec_mpc52xx.patch
-Patch110: linux-2.6-pasemi-smp-timebase-fix.patch
-Patch111: linux-2.6-pasemi-broken-regread.patch
-Patch112: linux-2.6-pasemi-getcfgaddr.patch
-Patch113: linux-2.6-pasemi-5945-workaround.patch
-Patch114: linux-2.6-pasemi-no-mpic-reset.patch
-Patch115: linux-2.6-pasemi-mac.patch
-Patch116: linux-2.6-pasemi-mdio-gpio.patch
-Patch120: linux-2.6-ibmvscsi-schizo.patch
-Patch121: linux-2.6-pmac-zilog.patch
-Patch130: linux-2.6-powerpc-generic-suspend-2-remove-adb-sleep-notifier.patch
-Patch131: linux-2.6-powerpc-generic-suspend-3-remove-dmasound.patch
-Patch132: linux-2.6-powerpc-generic-suspend-4-kill-pmu-sleep-notifier.patch
-Patch133: linux-2.6-powerpc-generic-suspend-5-pmu-pm_ops.patch
+Patch100: linux-2.6-libata-pegasos-fix.patch
+Patch117: linux-2.6-pasemi-for-2.6.25.patch
+Patch118: linux-2.6-pasemi-reserve-i2c.patch
+Patch130: linux-2.6-powerpc-generic-suspend-001-pmu-no-lock-kernel.patch
+Patch131: linux-2.6-powerpc-generic-suspend-002-pmu-remove-dead-code.patch
+Patch132: linux-2.6-powerpc-generic-suspend-003-remove-adb-sleep-notifier.patch
+Patch133: linux-2.6-powerpc-generic-suspend-004-kill-pmu-sleep-notifier.patch
+Patch134: linux-2.6-powerpc-generic-suspend-005-proper-sleep-management.patch
 Patch140: linux-2.6-ps3-ehci-iso.patch
 Patch141: linux-2.6-ps3-storage-alias.patch
 Patch142: linux-2.6-ps3-legacy-bootloader-hack.patch
 Patch143: linux-2.6-g5-therm-shutdown.patch
-Patch144: linux-2.6-ppc32-ucmpdi2.patch
 
 Patch150: linux-2.6-build-nonintconfig.patch
 Patch160: linux-2.6-execshield.patch
@@ -638,155 +616,92 @@
 Patch210: linux-2.6-modsign-ksign.patch
 Patch220: linux-2.6-modsign-core.patch
 Patch230: linux-2.6-modsign-script.patch
-Patch240: linux-2.6-modules-modalias-platform.patch
 Patch250: linux-2.6-debug-sizeof-structs.patch
 Patch260: linux-2.6-debug-nmi-timeout.patch
 Patch270: linux-2.6-debug-taint-vm.patch
 Patch280: linux-2.6-debug-spinlock-taint.patch
 Patch330: linux-2.6-debug-no-quiet.patch
-Patch340: linux-2.6-debug-boot-delay.patch
-Patch345: linux-2.6-debug-acpi-os-write-port.patch
 Patch350: linux-2.6-devmem.patch
 Patch370: linux-2.6-crash-driver.patch
 
 # Patch380: linux-2.6-irq-synchronization.patch
 
 Patch400: linux-2.6-scsi-cpqarray-set-master.patch
-Patch401: linux-2.6-scsi-async-double-add.patch
 Patch402: linux-2.6-scsi-mpt-vmware-fix.patch
-Patch405: linux-2.6-scsi-initio-fix-hang-on-load.patch
 
 Patch420: linux-2.6-squashfs.patch
 Patch423: linux-2.6-gfs-locking-exports.patch
-Patch424: linux-2.6-cifs-fix-incomplete-rcv.patch
-Patch425: linux-2.6-cifs-typo-in-cifs_reconnect-fix.patch
-Patch426: linux-2.6-cifs-fix-bad-handling-of-EAGAIN.patch
 
 Patch430: linux-2.6-net-silence-noisy-printks.patch
 # Patch431: linux-2.6-netfilter-fix-null-deref-nf_nat_move_storage.patch
 Patch431: linux-2.6-netfilter-really-fix-oops-in-nf_nat_move_storage.patch
 Patch440: linux-2.6-sha_alignment.patch
 Patch450: linux-2.6-input-kill-stupid-messages.patch
-Patch451: linux-2.6-input-fix-sync-loss-acer-aspire.patch
 Patch452: linux-2.6-input-appletouch-macbook3-trackpad.patch
 # Patch451: linux-2.6-input-alps-add-dell-vostro-1400.patch
 # Patch452: linux-2.6-input-alps-add-thinkpad-r61.patch
 Patch460: linux-2.6-serial-460800.patch
-Patch461: linux-2.6-serial_pnp-add-new-wacom-ids.patch
-Patch480: linux-2.6-proc-self-maps-fix.patch
 Patch510: linux-2.6-silence-noise.patch
 Patch570: linux-2.6-selinux-mprotect-checks.patch
-Patch571: linux-2.6-selinux-fix-netlabel-leak.patch
-Patch572: linux-2.6-selinux-strip-leading-slashes.patch
 Patch590: linux-2.6-unexport-symbols.patch
 Patch600: linux-2.6-vm-silence-atomic-alloc-failures.patch
 # Patch602: linux-2.6-mm-fix-ptrace-access-beyond-vma.patch
-Patch603: linux-2.6-dio-fix-cache-invalidation-after-sync-writes.patch
-Patch604: linux-2.6-slub-provide-proc-slabinfo.patch
 Patch605: linux-2.6-futex-fix-fixups.patch
 
 Patch610: linux-2.6-defaults-fat-utf8.patch
 Patch620: linux-2.6-defaults-unicode-vt.patch
-Patch630: linux-2.6-defaults-nonmi.patch
 Patch640: linux-2.6-defaults-nommconf.patch
 Patch660: linux-2.6-libata-ali-atapi-dma.patch
-Patch661: linux-2.6-libata-acpi-enable.patch
-Patch662: linux-2.6-libata-add-dma-disable-option.patch
-Patch665: linux-2.6-libata-dont-fail-revalidation-for-bad-gtf-methods.patch
-Patch666: linux-2.6-libata-pata_serverworks-fix-drive-combinations.patch
-Patch667: linux-2.6-libata-correct-iordy-handling.patch
 Patch670: linux-2.6-ata-quirk.patch
-Patch671: linux-2.6-libata-tape-max-sectors.patch
-Patch672: linux-2.6-libata-work-around-drq-1-err-1-for-tapes.patch
-Patch673: linux-2.6-libata-use-stuck-err-for-tapes.patch
-Patch674: linux-2.6-libata-scsi-allow-short-commands.patch
-Patch675: linux-2.6-libata-ahci-enable-ahci-mode-before-reset.patch
-Patch676: linux-2.6-libata-fix-bogus-lba48-disks.patch
 
 Patch680: linux-2.6-wireless.patch
 Patch681: linux-2.6-wireless-pending.patch
 Patch690: linux-2.6-at76.patch
-Patch691: linux-2.6-rndis_wext.patch
+Patch691: linux-2.6-rndis_wlan.patch
 Patch692: linux-2.6-ath5k-use-soft-wep.patch
-Patch700: linux-2.6-cfg80211-extras.patch
+# Patch700: linux-2.6-cfg80211-extras.patch
 Patch701: linux-2.6-zd1211rw-module-alias.patch
-Patch710: linux-2.6-netdev-e1000e-01.patch
-Patch711: linux-2.6-netdev-e1000e-02.patch
-Patch712: linux-2.6-netdev-e1000e-03.patch
-Patch713: linux-2.6-netdev-e1000e-04.patch
-Patch714: linux-2.6-netdev-e1000e-05.patch
-Patch715: linux-2.6-netdev-e1000e-06.patch
-Patch716: linux-2.6-netdev-e1000e-07.patch
-Patch717: linux-2.6-netdev-e1000e-08.patch
-Patch718: linux-2.6-netdev-e1000e-09.patch
-Patch719: linux-2.6-netdev-e1000e-10.patch
 Patch720: linux-2.6-e1000-bad-csum-allow.patch
 Patch721: linux-2.6-netdev-e1000-disable-alpm.patch
-Patch725: linux-2.6-netdev-atl2-2.0.3.patch
-Patch730: linux-2.6-netdev-spidernet-fix-interrupt-handling.patch
+Patch725: linux-2.6-netdev-atl2.patch
 Patch731: linux-2.6-netdev-smc91c92_cs-fix-station-addr.patch
+Patch732: linux-2.6-netdev-bonding-fix-null-deref.patch
 
 #Patch780: linux-2.6-clockevents-fix-resume-logic.patch
-Patch750: linux-2.6-acpi-git-ec-init-fixes.patch
 Patch761: linux-2.6-acpi-video-backlight-rationalize.patch
-Patch762: linux-2.6-acpi-video-brightness-bigger-buffer.patch
 Patch763: linux-2.6-acpi-video-fix-multiple-busses.patch
-Patch770: linux-2.6-pmtrace-time-fix.patch
-Patch775: linux-2.6-acpi-button-send-initial-state.patch
-Patch780: linux-2.6-acpi-cpuidle-0-upstream.patch
-Patch781: linux-2.6-acpi-cpuidle-1-fix-C3-for-no-bm-ctrl.patch
-Patch782: linux-2.6-acpi-cpuidle-2-fix-HP-nx6125-regression.patch
-Patch783: linux-2.6-acpi-dont-init-ec-early-with-no-ini.patch
 Patch784: linux-2.6-acpi-eeepc-hotkey.patch
-Patch785: linux-2.6-acpi_ec_early_init_fix.patch
 
-Patch800: linux-2.6-wakeups-hdaps.patch
-Patch801: linux-2.6-wakeups.patch
 Patch820: linux-2.6-compile-fixes.patch
-Patch1100: linux-2.6-add-mmf_dump_elf_headers.patch
 Patch1101: linux-2.6-default-mmf_dump_elf_headers.patch
-Patch1102: linux-2.6-add-sys-module-name-notes.patch
 Patch1103: linux-2.6-i386-vdso-install-unstripped-copies-on-disk.patch
-Patch1105: linux-2.6-powerpc-vdso-install-unstripped-copies-on-disk.patch
-Patch1106: linux-2.6-x86_64-ia32-vdso-install-unstripped-copies-on-disk.patch
-Patch1107: linux-2.6-x86_64-vdso-install-unstripped-copies-on-disk.patch
-Patch1108: linux-2.6-pass-g-to-assembler-under-config_debug_info.patch
-Patch1109: linux-2.6-powerpc-lparmap-g.patch
-
-Patch1300: linux-2.6-usb-suspend-classes.patch
-Patch1305: linux-2.6-usb-storage-initialize-huawei-e220-properly.patch
-Patch1306: linux-2.6-usb-storage-always-set-the-allow_restart-flag.patch
-Patch1307: linux-2.6-usb-huawei-fix-init-in-modem-mode.patch
+
+Patch1308: linux-2.6-usb-ehci-hcd-respect-nousb.patch
 
 Patch1400: linux-2.6-smarter-relatime.patch
-Patch1503: linux-2.6-xfs-optimize-away-dmapi-tests.patch
 Patch1504: linux-2.6-xfs-optimize-away-realtime-tests.patch
-Patch1505: linux-2.6-xfs-refactor-xfs_mountfs.patch
 Patch1509: linux-2.6-xfs-setfattr-32bit-compat.patch
+Patch1510: linux-2.6-xfs-xfs_mount-refactor.patch
+
 Patch1515: linux-2.6-lirc.patch
 Patch1520: linux-2.6-dcdbas-autoload.patch
 
-Patch1610: linux-2.6-pci-dont-size-transparent-bridges.patch
 
-#nouveau + drm fixes
-Patch1800: drm-mm-git.patch
-Patch1801: nouveau-drm.patch
-Patch1802: linux-2.6-drm-radeon-update.patch
-Patch1803: linux-2.6-git-initial-r500-drm.patch
+# drm-mm catchup (modesetting, ...)
+Patch1801: linux-2.6-drm-mm.patch
+Patch1800: linux-2.6-agp-mm.patch
+# nouveau + drm fixes
+Patch1802: nouveau-drm.patch
+Patch1804: linux-2.6-drm-radeon-update.patch
+Patch1805: linux-2.6-git-initial-r500-drm.patch
 
 # Updated firewire stack from linux1394 git
 # snap from http://me.in-berlin.de/~s5r6/linux1394/updates/2.6.23/
 Patch1910: linux-2.6-firewire-git-update.patch
-# Work around E100 NAPI bug
-Patch2000: linux-2.6-net-e100-disable-polling.patch
+Patch1911: linux-2.6-firewire-git-pending.patch
 # fix thinkpad key events for volume/brightness
 Patch2100: linux-2.6-thinkpad-key-events.patch
 # SELinux performance patches
-Patch2200: linux-2.6-selinux-no-revalidate-read-write.patch
-Patch2201: linux-2.6-selinux-ebitmap-for-avc-miss.patch
-Patch2202: linux-2.6-selinux-ebitmap-for-avc-miss-cleanup.patch
-Patch2203: linux-2.6-selinux-sigchld-wait.patch
-Patch2204: linux-2.6-selinux-ebitmap-loop-bug.patch
 
 # Patch2300: linux-2.6-freezer-fix-apm-emulation-breakage.patch
 
@@ -1081,13 +996,9 @@
 
 %if !%{nopatches}
 
-ApplyPatch linux-2.6-cve-2008-0600.patch
 # Revert -stable pieces we get from elsewhere here
 ApplyPatch linux-2.6-upstream-reverts.patch -R
 
-# patch-2.6.23-hrt3.patch
-ApplyPatch linux-2.6-highres-timers.patch
-
 # Roland's utrace ptrace replacement.
 # Main patch includes i386, x86_64, powerpc.
 ApplyPatch linux-2.6-utrace-tracehook.patch
@@ -1114,13 +1025,6 @@
 ApplyPatch linux-2.6-utrace-ptrace-compat-s390.patch
 ApplyPatch linux-2.6-utrace-ptrace-compat-avr32.patch
 
-# setuid /proc/self/maps fix. (dependent on utrace)
-ApplyPatch linux-2.6-proc-self-maps-fix.patch
-
-# ALSA 1.0.15
-ApplyPatch linux-2.6-alsa-1.0.15-merge-1.patch
-ApplyPatch linux-2.6-alsa-1.0.15-merge-2.patch
-ApplyPatch linux-2.6-alsa-1.0.15-merge-3.patch
 # support SiS 7019 audio (for K12LTSP thin client)
 ApplyPatch linux-2.6-alsa-support-sis7019.patch
 # ALSA enhancments for 2.6.25
@@ -1132,8 +1036,10 @@
 # some STAC codecs need longer delay
 ApplyPatch linux-2.6-alsa-hda-stac-add-delay.patch
 
+# drm-mm catchup (modesetting, ...)
+ApplyPatch linux-2.6-agp-mm.patch
+ApplyPatch linux-2.6-drm-mm.patch
 # Nouveau DRM + drm fixes
-ApplyPatch drm-mm-git.patch
 ApplyPatch nouveau-drm.patch
 ApplyPatch linux-2.6-drm-radeon-update.patch
 ApplyPatch linux-2.6-git-initial-r500-drm.patch
@@ -1143,7 +1049,6 @@
 
 # Architecture patches
 # IA64
-ApplyPatch linux-2.6-ia64-build-id-linker-script-fix.patch
 # x86(-64)
 # Compile 686 kernels tuned for Pentium4.
 ApplyPatch linux-2.6-x86-tune-generic.patch
@@ -1152,42 +1057,31 @@
 # Suppress APIC errors on UP x86-64.
 #ApplyPatch linux-2.6-x86_64-silence-up-apic-errors.patch
 # fix x86 tsc clock calibration
-ApplyPatch linux-2.6-x86-tsc-calibration-2.patch
 # debug early boot
 #ApplyPatch linux-2.6-x86-debug-boot.patch
 # shorter i386 oops reports (scheduled for 2.6.24)
-ApplyPatch linux-2.6-x86-clean-up-oops-bug-reports.patch
 
 #
 # PowerPC
 #
 ###  UPSTREAM PATCHES FROM 2.6.24:
 # pegasos IDE fixups
-ApplyPatch linux-2.6-ppc-pegasos-via-ata-legacy-irq.patch
+ApplyPatch linux-2.6-libata-pegasos-fix.patch
 # fix unwind
-ApplyPatch linux-2.6-ppc-fix-dso-unwind.patch
 # FEC support on MPC52xx
-ApplyPatch linux-2.6-rheap-modular.patch
-ApplyPatch linux-2.6-bestcomm-dma.patch
-ApplyPatch linux-2.6-fec_mpc52xx.patch
 # Fixups for PA Semi Electra
-ApplyPatch linux-2.6-pasemi-smp-timebase-fix.patch
-ApplyPatch linux-2.6-pasemi-broken-regread.patch
-ApplyPatch linux-2.6-pasemi-getcfgaddr.patch
-ApplyPatch linux-2.6-pasemi-5945-workaround.patch
-ApplyPatch linux-2.6-pasemi-no-mpic-reset.patch
-ApplyPatch linux-2.6-pasemi-mac.patch
-ApplyPatch linux-2.6-pasemi-mdio-gpio.patch
+ApplyPatch linux-2.6-pasemi-for-2.6.25.patch
+ApplyPatch linux-2.6-pasemi-reserve-i2c.patch
 # Fix up ibmvscsi for combined pSeries/iSeries build
-ApplyPatch linux-2.6-ibmvscsi-schizo.patch
 # Move pmac_zilog to its newly-registered device number
-ApplyPatch linux-2.6-pmac-zilog.patch
 ###  UPSTREAM PATCHES FROM 2.6.25 (we think):
 # Suspend through /sys/power/state for PowerMac instead of magic ioctl
-ApplyPatch linux-2.6-powerpc-generic-suspend-2-remove-adb-sleep-notifier.patch
-ApplyPatch linux-2.6-powerpc-generic-suspend-3-remove-dmasound.patch
-ApplyPatch linux-2.6-powerpc-generic-suspend-4-kill-pmu-sleep-notifier.patch
-ApplyPatch linux-2.6-powerpc-generic-suspend-5-pmu-pm_ops.patch
+# Suspend through /sys/power/state
+ApplyPatch linux-2.6-powerpc-generic-suspend-001-pmu-no-lock-kernel.patch
+ApplyPatch linux-2.6-powerpc-generic-suspend-002-pmu-remove-dead-code.patch
+ApplyPatch linux-2.6-powerpc-generic-suspend-003-remove-adb-sleep-notifier.patch
+ApplyPatch linux-2.6-powerpc-generic-suspend-004-kill-pmu-sleep-notifier.patch
+ApplyPatch linux-2.6-powerpc-generic-suspend-005-proper-sleep-management.patch
 ###  NOT (YET) UPSTREAM:
 # The EHCI ISO patch isn't yet upstream but is needed to fix reboot
 ApplyPatch linux-2.6-ps3-ehci-iso.patch
@@ -1200,7 +1094,6 @@
 # Alleviate G5 thermal shutdown problems
 ApplyPatch linux-2.6-g5-therm-shutdown.patch
 # Temporary hack to work around GCC PR #25724 / #21237
-ApplyPatch linux-2.6-ppc32-ucmpdi2.patch
 
 #
 # Exec shield
@@ -1222,7 +1115,6 @@
 # bugfixes to drivers and filesystems
 #
 # pc speaker autoload
-ApplyPatch linux-2.6-modules-modalias-platform.patch
 
 # Various low-impact patches to aid debugging.
 ApplyPatch linux-2.6-debug-sizeof-structs.patch
@@ -1232,9 +1124,7 @@
 %if !%{debugbuildsenabled}
 ApplyPatch linux-2.6-debug-no-quiet.patch
 %endif
-ApplyPatch linux-2.6-debug-boot-delay.patch
 # try to find out what is breaking acpi-cpufreq
-ApplyPatch linux-2.6-debug-acpi-os-write-port.patch
 
 #
 # Make /dev/mem a need-to-know function
@@ -1252,7 +1142,6 @@
 # synchronize irqs poperly
 # ApplyPatch linux-2.6-irq-synchronization.patch
 # don't resize transparent bridges
-ApplyPatch linux-2.6-pci-dont-size-transparent-bridges.patch
 
 #
 # SCSI Bits.
@@ -1260,11 +1149,9 @@
 # fix cpqarray pci enable
 ApplyPatch linux-2.6-scsi-cpqarray-set-master.patch
 # Fix async scanning double-add problems
-ApplyPatch linux-2.6-scsi-async-double-add.patch
 # fix vmware emulated scsi controller
 ApplyPatch linux-2.6-scsi-mpt-vmware-fix.patch
 # fin initio driver
-ApplyPatch linux-2.6-scsi-initio-fix-hang-on-load.patch
 
 # Filesystem patches.
 # Squashfs
@@ -1272,9 +1159,6 @@
 # export symbols for gfs2 locking modules
 ApplyPatch linux-2.6-gfs-locking-exports.patch
 # cifs kernel memory corruption fixes
-ApplyPatch linux-2.6-cifs-fix-incomplete-rcv.patch
-ApplyPatch linux-2.6-cifs-typo-in-cifs_reconnect-fix.patch
-ApplyPatch linux-2.6-cifs-fix-bad-handling-of-EAGAIN.patch
 
 # Networking
 # Disable easy to trigger printk's.
@@ -1290,7 +1174,6 @@
 # The input layer spews crap no-one cares about.
 ApplyPatch linux-2.6-input-kill-stupid-messages.patch
 # Fix loss of sync caused by adding dell Vostro 1400
-ApplyPatch linux-2.6-input-fix-sync-loss-acer-aspire.patch
 # Add support for new macbook trackpads
 ApplyPatch linux-2.6-input-appletouch-macbook3-trackpad.patch
 # Add support for some new mouse configurations
@@ -1299,7 +1182,6 @@
 # Allow to use 480600 baud on 16C950 UARTs
 ApplyPatch linux-2.6-serial-460800.patch
 # add ids for new wacom tablets
-ApplyPatch linux-2.6-serial_pnp-add-new-wacom-ids.patch
 
 # Silence some useless messages that still get printed with 'quiet'
 ApplyPatch linux-2.6-silence-noise.patch
@@ -1307,9 +1189,7 @@
 # Fix the SELinux mprotect checks on executable mappings
 ApplyPatch linux-2.6-selinux-mprotect-checks.patch
 # don't leak memory in netlabel code
-ApplyPatch linux-2.6-selinux-fix-netlabel-leak.patch
 # strip extra leading slashes in pathnames
-ApplyPatch linux-2.6-selinux-strip-leading-slashes.patch
 
 # Remove kernel-internal functionality that nothing external should use.
 ApplyPatch linux-2.6-unexport-symbols.patch
@@ -1322,9 +1202,7 @@
 # fix ptrace hang trying to access invalid memory location
 #ApplyPatch linux-2.6-mm-fix-ptrace-access-beyond-vma.patch
 # fix read after direct IO write returning stale data
-ApplyPatch linux-2.6-dio-fix-cache-invalidation-after-sync-writes.patch
 # restore /proc/slabinfo
-ApplyPatch linux-2.6-slub-provide-proc-slabinfo.patch
 # fix oops with futex on uniprocessor machine
 ApplyPatch linux-2.6-futex-fix-fixups.patch
 
@@ -1332,9 +1210,8 @@
 # Use UTF-8 by default on VFAT.
 ApplyPatch linux-2.6-defaults-fat-utf8.patch
 # Use unicode VT's by default.
-ApplyPatch linux-2.6-defaults-unicode-vt.patch
+# ApplyPatch linux-2.6-defaults-unicode-vt.patch
 # Disable NMI watchdog by default.
-ApplyPatch linux-2.6-defaults-nonmi.patch
 # Disable PCI MMCONFIG by default.
 ApplyPatch linux-2.6-defaults-nommconf.patch
 
@@ -1343,25 +1220,14 @@
 # ia64 ata quirk
 ApplyPatch linux-2.6-ata-quirk.patch
 # Enable ACPI ATA objects
-ApplyPatch linux-2.6-libata-acpi-enable.patch
 # add option to disable PATA DMA
-ApplyPatch linux-2.6-libata-add-dma-disable-option.patch
 # fix resume failure on some systems
-ApplyPatch linux-2.6-libata-dont-fail-revalidation-for-bad-gtf-methods.patch
 # serverworks is broken with some drive combinations
-ApplyPatch linux-2.6-libata-pata_serverworks-fix-drive-combinations.patch
 # fix libata IORDY handling
-ApplyPatch linux-2.6-libata-correct-iordy-handling.patch
 # fix ATA tape drives
-ApplyPatch linux-2.6-libata-tape-max-sectors.patch
-ApplyPatch linux-2.6-libata-work-around-drq-1-err-1-for-tapes.patch
-ApplyPatch linux-2.6-libata-use-stuck-err-for-tapes.patch
 # allow 12-byte SCSI commands for ATAPI devices
-# ApplyPatch linux-2.6-libata-scsi-allow-short-commands.patch
 # fix ahci reset
-ApplyPatch linux-2.6-libata-ahci-enable-ahci-mode-before-reset.patch
 # work around broken lba48 disks
-ApplyPatch linux-2.6-libata-fix-bogus-lba48-disks.patch
 
 # wireless patches headed for 2.6.24
 ApplyPatch linux-2.6-wireless.patch
@@ -1370,66 +1236,44 @@
 
 # Add misc wireless bits from upstream wireless tree
 ApplyPatch linux-2.6-at76.patch
-ApplyPatch linux-2.6-rndis_wext.patch
+ApplyPatch linux-2.6-rndis_wlan.patch
 
 # Make ath5k use software WEP
 ApplyPatch linux-2.6-ath5k-use-soft-wep.patch
 
 # Restore ability to add/remove virtual i/fs to mac80211 devices
-ApplyPatch linux-2.6-cfg80211-extras.patch
+# ApplyPatch linux-2.6-cfg80211-extras.patch
 
 # add module alias for "zd1211rw-mac80211"
 ApplyPatch linux-2.6-zd1211rw-module-alias.patch
 
-# latest Intel driver for ich9
-ApplyPatch linux-2.6-netdev-e1000e-01.patch
-ApplyPatch linux-2.6-netdev-e1000e-02.patch
-ApplyPatch linux-2.6-netdev-e1000e-03.patch
-ApplyPatch linux-2.6-netdev-e1000e-04.patch
-ApplyPatch linux-2.6-netdev-e1000e-05.patch
-ApplyPatch linux-2.6-netdev-e1000e-06.patch
-ApplyPatch linux-2.6-netdev-e1000e-07.patch
-ApplyPatch linux-2.6-netdev-e1000e-08.patch
-ApplyPatch linux-2.6-netdev-e1000e-09.patch
-ApplyPatch linux-2.6-netdev-e1000e-10.patch
-
 # Workaround for flaky e1000 EEPROMs
 ApplyPatch linux-2.6-e1000-bad-csum-allow.patch
 # disable link power savings, should fix bad eeprom checksum too
 ApplyPatch linux-2.6-netdev-e1000-disable-alpm.patch
 # add atl2 network driver for eeepc
-ApplyPatch linux-2.6-netdev-atl2-2.0.3.patch
+ApplyPatch linux-2.6-netdev-atl2.patch
 # spidernet: fix interrupt handling
-ApplyPatch linux-2.6-netdev-spidernet-fix-interrupt-handling.patch
 # fix station address on meghertz pcmcia adpter (#233255)
 ApplyPatch linux-2.6-netdev-smc91c92_cs-fix-station-addr.patch -R
+# fix null deref in bonding
+ApplyPatch linux-2.6-netdev-bonding-fix-null-deref.patch
 
 # ACPI/PM patches
 # fix EC init
-ApplyPatch linux-2.6-acpi-git-ec-init-fixes.patch
 # fix multiple ACPI brightness problems (#427518)
 ApplyPatch linux-2.6-acpi-video-backlight-rationalize.patch
-ApplyPatch linux-2.6-acpi-video-brightness-bigger-buffer.patch
 ApplyPatch linux-2.6-acpi-video-fix-multiple-busses.patch
 # fix date/time display when using PM_TRACE
-ApplyPatch linux-2.6-pmtrace-time-fix.patch
 # Send button state on create / resume
-ApplyPatch linux-2.6-acpi-button-send-initial-state.patch
 # fix cpuidle regressions
-ApplyPatch linux-2.6-acpi-cpuidle-0-upstream.patch
-ApplyPatch linux-2.6-acpi-cpuidle-1-fix-C3-for-no-bm-ctrl.patch
-ApplyPatch linux-2.6-acpi-cpuidle-2-fix-HP-nx6125-regression.patch
 # fix EC init
-ApplyPatch linux-2.6-acpi-dont-init-ec-early-with-no-ini.patch
 # Eeepc hotkey driver
 ApplyPatch linux-2.6-acpi-eeepc-hotkey.patch
 # fix EC init fix
-ApplyPatch linux-2.6-acpi_ec_early_init_fix.patch
 
 # Fix excessive wakeups
 # Make hdaps timer only tick when in use.
-ApplyPatch linux-2.6-wakeups-hdaps.patch
-ApplyPatch linux-2.6-wakeups.patch
 
 # dm / md
 
@@ -1437,21 +1281,17 @@
 
 # USB
 # Do USB suspend only on certain classes of device.
-ApplyPatch linux-2.6-usb-suspend-classes.patch
 # initialize strange modem/storage device properly (from F7 kernel)
-ApplyPatch linux-2.6-usb-storage-initialize-huawei-e220-properly.patch
-ApplyPatch linux-2.6-usb-huawei-fix-init-in-modem-mode.patch
 # some usb disks spin down automatically and need allow_restart
-ApplyPatch linux-2.6-usb-storage-always-set-the-allow_restart-flag.patch
+ApplyPatch linux-2.6-usb-ehci-hcd-respect-nousb.patch
 
 # implement smarter atime updates support.
 ApplyPatch linux-2.6-smarter-relatime.patch
 
 # xfs bugfixes & stack reduction
-ApplyPatch linux-2.6-xfs-optimize-away-dmapi-tests.patch
 ApplyPatch linux-2.6-xfs-optimize-away-realtime-tests.patch
-ApplyPatch linux-2.6-xfs-refactor-xfs_mountfs.patch
 ApplyPatch linux-2.6-xfs-setfattr-32bit-compat.patch
+ApplyPatch linux-2.6-xfs-xfs_mount-refactor.patch
 
 #
 # misc small stuff to make things compile
@@ -1463,15 +1303,8 @@
 fi
 
 # build id related enhancements
-ApplyPatch linux-2.6-add-mmf_dump_elf_headers.patch
 ApplyPatch linux-2.6-default-mmf_dump_elf_headers.patch
-ApplyPatch linux-2.6-add-sys-module-name-notes.patch
 ApplyPatch linux-2.6-i386-vdso-install-unstripped-copies-on-disk.patch
-ApplyPatch linux-2.6-powerpc-vdso-install-unstripped-copies-on-disk.patch
-ApplyPatch linux-2.6-x86_64-ia32-vdso-install-unstripped-copies-on-disk.patch
-ApplyPatch linux-2.6-x86_64-vdso-install-unstripped-copies-on-disk.patch
-ApplyPatch linux-2.6-pass-g-to-assembler-under-config_debug_info.patch
-ApplyPatch linux-2.6-powerpc-lparmap-g.patch
 
 # http://www.lirc.org/
 ApplyPatch linux-2.6-lirc.patch
@@ -1481,18 +1314,13 @@
 
 # FireWire updates and fixes
 ApplyPatch linux-2.6-firewire-git-update.patch
+ApplyPatch linux-2.6-firewire-git-pending.patch
 
-ApplyPatch linux-2.6-net-e100-disable-polling.patch
 ApplyPatch linux-2.6-thinkpad-key-events.patch
 
 # ---------- below all scheduled for 2.6.24 -----------------
 
 # SELinux perf patches
-ApplyPatch linux-2.6-selinux-no-revalidate-read-write.patch
-ApplyPatch linux-2.6-selinux-ebitmap-for-avc-miss.patch
-ApplyPatch linux-2.6-selinux-ebitmap-for-avc-miss-cleanup.patch
-ApplyPatch linux-2.6-selinux-sigchld-wait.patch
-ApplyPatch linux-2.6-selinux-ebitmap-loop-bug.patch
 
 # END OF PATCH APPLICATIONS
 
@@ -1688,9 +1516,6 @@
     cd include
     cp -a acpi config keys linux math-emu media mtd net pcmcia rdma rxrpc scsi sound video asm asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
     cp -a `readlink asm` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
-    if [ "$Arch" = "x86_64" ]; then
-      cp -a asm-i386 $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
-    fi
     # While arch/powerpc/include/asm is still a symlink to the old
     # include/asm-ppc{64,} directory, include that in kernel-devel too.
     if [ "$Arch" = "powerpc" -a -r ../arch/powerpc/include/asm ]; then
@@ -2090,6 +1915,9 @@
 
 
 %changelog
+* Fri Feb 15 2008 Chuck Ebbert <cebbert at redhat.com> 2.6.24.2-2
+- Linux 2.6.24.2
+
 * Sun Feb 10 2008 Dave Airlie <airlied at redhat.com> 2.6.23.15-137
 - CVE-2008-0600 - local root vulnerability in vmsplice
 

linux-2.6-acpi-eeepc-hotkey.patch:

Index: linux-2.6-acpi-eeepc-hotkey.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-acpi-eeepc-hotkey.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-acpi-eeepc-hotkey.patch	5 Feb 2008 23:48:28 -0000	1.1
+++ linux-2.6-acpi-eeepc-hotkey.patch	15 Feb 2008 23:58:52 -0000	1.2
@@ -12,8 +12,8 @@
 --- a/drivers/misc/Kconfig
 +++ b/drivers/misc/Kconfig
 @@ -251,4 +251,14 @@ config ATMEL_SSC
- 	  If you are not sure, say Y here.
  
+ 	  If unsure, say N.
  
 +config EEEPC
 +        tristate "Eee PC Hotkey Driver (EXPERIMENTAL)"
@@ -31,8 +31,8 @@
 --- a/drivers/misc/Makefile
 +++ b/drivers/misc/Makefile
 @@ -17,3 +17,4 @@ obj-$(CONFIG_SONY_LAPTOP)	+= sony-laptop.o
- obj-$(CONFIG_SONY_LAPTOP)	+= sony-laptop.o
  obj-$(CONFIG_THINKPAD_ACPI)	+= thinkpad_acpi.o
+ obj-$(CONFIG_FUJITSU_LAPTOP)	+= fujitsu-laptop.o
  obj-$(CONFIG_EEPROM_93CX6)	+= eeprom_93cx6.o
 +obj-$(CONFIG_EEEPC)		+= eeepc.o
 diff --git a/drivers/misc/eeepc.c b/drivers/misc/eeepc.c

linux-2.6-at76.patch:

Index: linux-2.6-at76.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-at76.patch,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- linux-2.6-at76.patch	4 Jan 2008 21:47:39 -0000	1.6
+++ linux-2.6-at76.patch	15 Feb 2008 23:58:52 -0000	1.7
@@ -1,4 +1,15 @@
-commit 5f7ef1a457faae7cb4993d34fa4ba10e3d76bcd7
+commit 38ec6fbd236318179e28c71bc1b3dc94166e4be2
+Author: Pavel Roskin <proski at gnu.org>
+Date:   Mon Feb 4 00:05:19 2008 -0500
+
+    at76_usb: Add ID for Uniden PCW100
+    
+    Tested and reported by Lior Silberman.
+    
+    Signed-off-by: Pavel Roskin <proski at gnu.org>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 4ed58b00a2df9772cfa631f53af52c38207d78ac
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:41:25 2007 -0400
 
@@ -7,7 +18,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 1e2d5aa761d54bfe6889d97bf6112b60a28baab5
+commit 3a39b0c26c19b4f26ab90f8cd170e68da3c8fb91
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:41:18 2007 -0400
 
@@ -16,7 +27,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit a4e9d08158e76eddfd7e27de41b5c666d6a8a4bf
+commit 69a965e9dde88c1dec49a0e840020bbdfc2263ad
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:41:12 2007 -0400
 
@@ -28,7 +39,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 4aaa1b155a5436246c9b09a0d1f1cd6c01723706
+commit e007ed4c5328f857201d66c8564978bd4150a9a5
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:41:06 2007 -0400
 
@@ -45,7 +56,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit d4839a148d61041f446964773b143bf5edd21200
+commit 84d9a4914d2f678728b0b9a4c4b360e93b2e2efa
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:40:59 2007 -0400
 
@@ -61,7 +72,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 658b7b2bda51f32d7a5cfe6412c491526db448d9
+commit 46e958f2e0334bfeb1436d8066e1797804212178
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:40:53 2007 -0400
 
@@ -80,7 +91,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit db0dc72651c5d659ea3b3221ef521329e33f861e
+commit cbf56decc3dd24be59bdcd7af14ae6b6fc1d7265
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:40:47 2007 -0400
 
@@ -92,7 +103,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 3237f35471da6da9531ed09c9c5ce6328756afb2
+commit 73363e219953a6bcafa0087b415c0ce154a13940
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:40:40 2007 -0400
 
@@ -103,7 +114,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit a7c5baf45c0ade1ab8bc4b0fda998c6906f410aa
+commit 65e5ad191757d5febb31e97a8a08dbd672d0662d
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:40:34 2007 -0400
 
@@ -112,7 +123,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit e00a873098bc7ff2ee7226fd83cf1728302d66ba
+commit 8f3811adf092d19f14111166af05f10cb2efa651
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:40:27 2007 -0400
 
@@ -124,7 +135,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 4a3ae9653e46ae417d999214fc9f06d59f251a8d
+commit 0048a3f2c0de2f6ba969731f51eaaa73b3e168e2
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:40:21 2007 -0400
 
@@ -136,7 +147,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit f6bee8e202482fa7206c1ae745474d4b33c8eb31
+commit 20eab45fc567b85f8aaa131eceb8d53ac14d3fd6
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:40:15 2007 -0400
 
@@ -145,7 +156,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 42fba4328202e66d758d2b0c4fd1228d60d58a27
+commit b96c9fd4b3770d5b731ed3d207644b2ffec80313
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:40:08 2007 -0400
 
@@ -154,7 +165,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit a29895517a5c5b1a821b5159869a37d33b3da085
+commit 6abdf0d9679fb3cc0b2ed539e24cbba058f33043
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:40:02 2007 -0400
 
@@ -166,7 +177,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 894d45809038e6a38c13160cf1bf180c370b6c4e
+commit 53c4d65cd1f4455b6d0c6ce605a6853e9108c6ae
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:39:55 2007 -0400
 
@@ -177,7 +188,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 4d85e95a0587ed5b24b9efa8b7d8c69426f77295
+commit 2a000a0fb3a21674791023759e24e1bdc3c197ef
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:39:49 2007 -0400
 
@@ -189,7 +200,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 250ee52b0edb92bd5d12961a6f0b8d17073e371e
+commit 59268149e41b94bc2bd3554fcd12d238e01bdc07
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:39:42 2007 -0400
 
@@ -200,7 +211,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit ef10a26c317e68320ecc737931e40e4a2f79acab
+commit 206f30d4d21565358128aa8ca210d518797ba285
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:39:36 2007 -0400
 
@@ -211,7 +222,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 857cf8143195c654f2fda058a267b108932b0d52
+commit afd74d244ce1d869e82758c650f49a867501762f
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:39:30 2007 -0400
 
@@ -220,7 +231,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 1bf1946f9ff6d5ab963505725a5d16fc81d9144f
+commit 2235301c13ec2c6367ef129477be8967631a436f
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:39:23 2007 -0400
 
@@ -231,7 +242,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit a5b85438d7da8b83bc6bb89494deb2ddfe0858e7
+commit a38e0e268f2219660c91a3813d11c1440cb75faf
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:39:17 2007 -0400
 
@@ -243,7 +254,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 1777217e80dc7d329a6f60969631b56883779b7f
+commit 451c1cd7fcdad82175c80fb0e3e4a0568b41c17a
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:39:11 2007 -0400
 
@@ -255,7 +266,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 9a7184efc63e48df04bbda99f780c47a939b1c1e
+commit 447c17aaf1833217f82b97be42b333c72b966db2
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:39:04 2007 -0400
 
@@ -267,7 +278,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit f900d8e95a1c56223d90a133764ec4ce8f67de5d
+commit 951329488d45d11d25914b4da0ab93f94d72582d
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:38:58 2007 -0400
 
@@ -276,7 +287,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 913d6c812706e4e25edac4ab8ed7381938596b97
+commit ae5f9aab3f18f4dcb9a83e490996990711c53cb4
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:38:51 2007 -0400
 
@@ -287,7 +298,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 7fa85c2e0ca0ced750730313626e5cb1cf300274
+commit 3086da15d597fb24b7254c4e638b380597e7f7c0
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sun Sep 30 14:38:45 2007 -0400
 
@@ -296,7 +307,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 29fa27bbda37b7d480d51f0edaf517014f3f39e0
+commit f6ea5e4633ef565282f4fdfd6efb4fce47ba63e6
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:37:34 2007 -0400
 
@@ -307,7 +318,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 7f86fe584fca6d1929cfee2e82c4558317210cda
+commit 27147842aa12fb6f3628c8b7bfe0d1e9e41ee6b8
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:37:29 2007 -0400
 
@@ -319,7 +330,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 67207494050fd923ef291eeda9132e89cae29f64
+commit 14a38765e92afa44f94b78911cb5f1d4bc717a29
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:37:23 2007 -0400
 
@@ -330,7 +341,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit fc6bc98792a19ad9e8b6e38dd982a18b216b72e5
+commit b72a145cc8352a033cffd36e7edd3afc5ab8c692
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:37:17 2007 -0400
 
@@ -339,7 +350,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 30cdd38e8da293303a121ac54b2be8dc1b7aa3df
+commit 21b01509a7a669f557fd0ef822058624bcaac6a4
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:37:11 2007 -0400
 
@@ -348,7 +359,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 0d8ef6dc917b6d30c638fcd6b9762d79badaf378
+commit 798293c1bbfc815ed7acd6b5390226292bbad05c
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:37:06 2007 -0400
 
@@ -357,7 +368,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit a198cfa2f5dd6caed45ae6b861888458d758a196
+commit 99de835fbdf7d9987511a3ffef63685edeb256f8
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:37:00 2007 -0400
 
@@ -366,7 +377,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 5131be16a2310a3c391aaf0658b176f0fdefd806
+commit dc15d751590deb46a8f1aee782bc4f66a811ba58
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:36:54 2007 -0400
 
@@ -378,7 +389,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 983be704d14514a3aa0ee03b74f4aeafe83859a5
+commit ec943e753321c78047b5e70d846deed79e3d7e0d
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:36:49 2007 -0400
 
@@ -387,7 +398,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit b72a5c2a15995a149524d03380d2f854f1176958
+commit 474a3bd835a1d6ce0567b6f0ce71ce17520edf85
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:36:43 2007 -0400
 
@@ -399,7 +410,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit af6ba6086bbc881944f3fb3b326944ae2d5c31eb
+commit e5d3864054c7bae4bde6681148db5fe293d3972f
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:36:37 2007 -0400
 
@@ -408,7 +419,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 175e565fd6e45b6cad0bd71ec78c3473c146cf38
+commit 020e78ae379a4153b7c87aaeffca9d6694f0badb
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:36:31 2007 -0400
 
@@ -425,7 +436,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit c54a0f700f37cb42a22831aafb90f6d6cd28220a
+commit 83d03b994903ffe7f6ab0b540780852412387030
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:36:26 2007 -0400
 
@@ -436,7 +447,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit ffaadd1962029b55915efa4b3549a733dd67beb4
+commit 2510182b5f69324e37869cfee1d9b78c5a1c8cfe
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:36:20 2007 -0400
 
@@ -449,7 +460,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit f49aebea0df15cac5c7a5ba09d6f7516feae7043
+commit eb542472fb6621bed0d9a176e62ec261e162b3ac
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:36:14 2007 -0400
 
@@ -460,7 +471,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 8260e31da096faabc0b41d96f2011c61964177f3
+commit 0c1af75ef1a71060ddd0e32311b058feaa63ed23
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:36:09 2007 -0400
 
@@ -472,7 +483,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 7445536966a7f3e9e9bc68ed28f836c050a59bd4
+commit 71734a46b9d85b85b4e8672461f321f39e48b4aa
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:36:03 2007 -0400
 
@@ -481,7 +492,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 9acb88c0baa31a18417d0e6c67525684cb3bb1a9
+commit 3b19b79d75b5fa2746a277f52abf2690fe1a43f1
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:35:57 2007 -0400
 
@@ -494,7 +505,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 95d10c6e5823830ef89dbc00fd022e1bb6b2d7d3
+commit 76403fd6c014238c564b38d9052298fc9e2a5078
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:35:52 2007 -0400
 
@@ -506,7 +517,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 386aa7d03a98f0e1cb88afa90b2cb20872246366
+commit c56dfaaaada275f4a5c3cdef3dba3e6c714ce03f
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:35:46 2007 -0400
 
@@ -518,7 +529,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit bc091f68dbe57efde97765b485ca6ae0c99cab63
+commit c8a13ceeddd58a0c304da7eb8578e44197edad38
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:35:40 2007 -0400
 
@@ -527,7 +538,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 6f9e829ad959e561cd97ebfa042a146c44372834
+commit ca2c72f021bef2fbb8c2c56e6d0650ba7891f7ca
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:35:34 2007 -0400
 
@@ -539,7 +550,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit aa06a03053aab64db3fbacb192c26813687397f2
+commit 1c4f1ca9448b9300e484e39d57882a7ae38a5729
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:35:29 2007 -0400
 
@@ -551,7 +562,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit cef6fe5a91b7ac78b500e186713cd15e9cc0f04c
+commit fef6c2352ca33980d9aba9232b70aeecace2a134
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:35:23 2007 -0400
 
@@ -562,7 +573,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 7b71cb694b31af0cd432f0c346698bea67cfaa05
+commit aa7b9455703286c9823bcbd0a55f3418a0a1b47a
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:35:17 2007 -0400
 
@@ -571,7 +582,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 80468f3bf76abc0612075868f945c3c319c02945
+commit 9c13ed40aeed909e386950c302f6d9c130a92b2a
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:35:11 2007 -0400
 
@@ -583,7 +594,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 3436d9b5e85ae26cc4bd2d57176d5ffeda670278
+commit 8a2cb93b3bfc2c23a394f5e4fc8dd6837503640a
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:35:06 2007 -0400
 
@@ -594,7 +605,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 68fa2bcdf342924135799e04754db347231585cd
+commit 5c777c0514de7cbc6652f10ad55feab36b13d21b
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:35:00 2007 -0400
 
@@ -606,7 +617,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 78638e010302b52c0d17ba2bfedf0b50726da05e
+commit 10bbb7977ec0cbea6087d30af14147516a5eeac5
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:34:54 2007 -0400
 
@@ -618,7 +629,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 8c67f0ca98370423c461e58675bed5f6123b5b5e
+commit 2646301bdd06efe9677bb2ef96acc9c450cf1af8
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:34:49 2007 -0400
 
@@ -627,7 +638,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 8f8e20c146ff092981d4f03c0de8c03ab94781f2
+commit 0a9cfd63f1773ce2196d15d5ff1214c3c693d8a7
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:34:43 2007 -0400
 
@@ -636,7 +647,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 97bafe21810c0f67dd3abea750bf2665135fb78f
+commit 684ad32c3e727b65066a896124ed73834f14b087
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:34:37 2007 -0400
 
@@ -645,7 +656,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit b5bddec5fdd2bc621271e74f3df852ce39b9dee3
+commit cb9222a5c85ff3634475f04a7949dc7b966c1902
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:34:31 2007 -0400
 
@@ -654,7 +665,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit b984ff18dd348df1598dafa5e054fa003c8eab5c
+commit 92315ab89a2ffffcb5ef24554489b06e322ea17c
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:34:26 2007 -0400
 
@@ -663,7 +674,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 1a9930433d2948f8a2dd172042ebf866a0460b70
+commit 46211c37a56499d49829d8db2c230712d6053790
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Sep 1 00:34:20 2007 -0400
 
@@ -677,7 +688,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit e05fc4ca7bab431e4de927403343f7865dd2b0fe
+commit cfc3a1a100a86079980e814674004793ad161390
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Thu Aug 23 14:40:17 2007 -0400
 
@@ -694,10 +705,10 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-diff -up linux-2.6.23.noarch/MAINTAINERS.orig linux-2.6.23.noarch/MAINTAINERS
---- linux-2.6.23.noarch/MAINTAINERS.orig	2008-01-04 15:24:46.000000000 -0500
-+++ linux-2.6.23.noarch/MAINTAINERS	2008-01-04 15:27:15.000000000 -0500
-@@ -685,6 +685,15 @@ W:	http://www.thekelleys.org.uk/atmel
+diff -up linux-2.6.24.noarch/MAINTAINERS.orig linux-2.6.24.noarch/MAINTAINERS
+--- linux-2.6.24.noarch/MAINTAINERS.orig	2008-02-05 22:45:15.000000000 -0500
++++ linux-2.6.24.noarch/MAINTAINERS	2008-02-05 22:46:17.000000000 -0500
+@@ -713,6 +713,15 @@ W:	http://www.thekelleys.org.uk/atmel
  W:	http://atmelwlandriver.sourceforge.net/
  S:	Maintained
  
@@ -713,9 +724,9 @@
  AUDIT SUBSYSTEM
  P:	David Woodhouse
  M:	dwmw2 at infradead.org
-diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/at76_usb.h
---- /dev/null	2008-01-04 08:33:07.585415225 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/at76_usb.h	2008-01-04 15:27:15.000000000 -0500
+diff -up /dev/null linux-2.6.24.noarch/drivers/net/wireless/at76_usb.h
+--- /dev/null	2008-02-05 08:32:52.710614252 -0500
++++ linux-2.6.24.noarch/drivers/net/wireless/at76_usb.h	2008-02-05 22:46:17.000000000 -0500
 @@ -0,0 +1,619 @@
 +/*
 + * Copyright (c) 2002,2003 Oliver Kurth
@@ -1336,9 +1347,9 @@
 +#define MAX_PADDING_SIZE	53
 +
 +#endif				/* _AT76_USB_H */
-diff -up linux-2.6.23.noarch/drivers/net/wireless/Makefile.orig linux-2.6.23.noarch/drivers/net/wireless/Makefile
---- linux-2.6.23.noarch/drivers/net/wireless/Makefile.orig	2008-01-04 15:24:46.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/Makefile	2008-01-04 15:27:15.000000000 -0500
+diff -up linux-2.6.24.noarch/drivers/net/wireless/Makefile.orig linux-2.6.24.noarch/drivers/net/wireless/Makefile
+--- linux-2.6.24.noarch/drivers/net/wireless/Makefile.orig	2008-02-05 22:45:16.000000000 -0500
++++ linux-2.6.24.noarch/drivers/net/wireless/Makefile	2008-02-05 22:46:17.000000000 -0500
 @@ -32,6 +32,8 @@ obj-$(CONFIG_ATMEL)             += atmel
  obj-$(CONFIG_PCI_ATMEL)         += atmel_pci.o 
  obj-$(CONFIG_PCMCIA_ATMEL)      += atmel_cs.o
@@ -1348,10 +1359,10 @@
  obj-$(CONFIG_PRISM54)		+= prism54/
  
  obj-$(CONFIG_HOSTAP)		+= hostap/
-diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/at76_usb.c
---- /dev/null	2008-01-04 08:33:07.585415225 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/at76_usb.c	2008-01-04 15:27:15.000000000 -0500
-@@ -0,0 +1,5556 @@
+diff -up /dev/null linux-2.6.24.noarch/drivers/net/wireless/at76_usb.c
+--- /dev/null	2008-02-05 08:32:52.710614252 -0500
++++ linux-2.6.24.noarch/drivers/net/wireless/at76_usb.c	2008-02-05 22:46:17.000000000 -0500
+@@ -0,0 +1,5558 @@
 +/*
 + * at76c503/at76c505 USB driver
 + *
@@ -1545,6 +1556,8 @@
 +	{USB_DEVICE(0x07aa, 0x0011), USB_DEVICE_DATA(BOARD_503)},
 +	/* Corega Wireless LAN USB-11 mini2 */
 +	{USB_DEVICE(0x07aa, 0x0018), USB_DEVICE_DATA(BOARD_503)},
++	/* Uniden PCW100 */
++	{USB_DEVICE(0x05dd, 0xff35), USB_DEVICE_DATA(BOARD_503)},
 +	/*
 +	 * at76c503-rfmd-acc
 +	 */
@@ -6908,10 +6921,10 @@
 +MODULE_AUTHOR("Pavel Roskin <proski at gnu.org>");
 +MODULE_DESCRIPTION(DRIVER_DESC);
 +MODULE_LICENSE("GPL");
-diff -up linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig linux-2.6.23.noarch/drivers/net/wireless/Kconfig
---- linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig	2008-01-04 15:24:46.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/Kconfig	2008-01-04 15:27:15.000000000 -0500
-@@ -445,6 +445,14 @@ config PCMCIA_ATMEL
+diff -up linux-2.6.24.noarch/drivers/net/wireless/Kconfig.orig linux-2.6.24.noarch/drivers/net/wireless/Kconfig
+--- linux-2.6.24.noarch/drivers/net/wireless/Kconfig.orig	2008-02-05 22:45:16.000000000 -0500
++++ linux-2.6.24.noarch/drivers/net/wireless/Kconfig	2008-02-05 22:46:17.000000000 -0500
+@@ -451,6 +451,14 @@ config PCMCIA_ATMEL
  	  Enable support for PCMCIA cards containing the
  	  Atmel at76c502 and at76c504 chips.
  

linux-2.6-build-nonintconfig.patch:

Index: linux-2.6-build-nonintconfig.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-build-nonintconfig.patch,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- linux-2.6-build-nonintconfig.patch	5 Sep 2007 19:43:23 -0000	1.11
+++ linux-2.6-build-nonintconfig.patch	15 Feb 2008 23:58:52 -0000	1.12
@@ -1,14 +1,13 @@
---- linux-2.6.22.noarch/scripts/kconfig/Makefile~	2007-07-20 13:44:34.000000000 -0400
-+++ linux-2.6.22.noarch/scripts/kconfig/Makefile	2007-07-20 13:44:58.000000000 -0400
-@@ -22,6 +22,12 @@ oldconfig: $(obj)/conf
+--- linux-2.6.23.noarch/scripts/kconfig/Makefile~	2007-10-29 19:20:10.000000000 -0400
++++ linux-2.6.23.noarch/scripts/kconfig/Makefile	2007-10-29 19:20:24.000000000 -0400
+@@ -29,6 +29,11 @@ oldconfig: $(obj)/conf
  silentoldconfig: $(obj)/conf
- 	$< -s arch/$(ARCH)/Kconfig
+ 	$< -s $(Kconfig)
  
 +nonint_oldconfig: $(obj)/conf
-+	$< -b arch/$(ARCH)/Kconfig
++	$< -b $(Kconfig)
 +loose_nonint_oldconfig: $(obj)/conf
-+	$< -B arch/$(ARCH)/Kconfig
-+
++	$< -B $(Kconfig)
 +
  # Create new linux.po file
  # Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files

linux-2.6-crash-driver.patch:

Index: linux-2.6-crash-driver.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-crash-driver.patch,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- linux-2.6-crash-driver.patch	25 Jul 2007 18:20:14 -0000	1.8
+++ linux-2.6-crash-driver.patch	15 Feb 2008 23:58:52 -0000	1.9
@@ -1,6 +1,6 @@
 diff -urNp --exclude-from=/home/davej/.exclude linux-1050/arch/i386/mm/init.c linux-1060/arch/i386/mm/init.c
---- linux-1050/arch/i386/mm/init.c
-+++ linux-1060/arch/i386/mm/init.c
+--- linux-1050/arch/x86/mm/init_32.c
++++ linux-1060/arch/x86/mm/init_32.c
 @@ -248,6 +248,8 @@ int devmem_is_allowed(unsigned long page
     return 0;
  }
@@ -24,8 +24,8 @@
  # ifdef CONFIG_SMP
  #  if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 3)
 diff -urNp --exclude-from=/home/davej/.exclude linux-1050/arch/x86_64/mm/init.c linux-1060/arch/x86_64/mm/init.c
---- linux-1050/arch/x86_64/mm/init.c
-+++ linux-1060/arch/x86_64/mm/init.c
+--- linux-1050/arch/x86/mm/init_64.c
++++ linux-1060/arch/x86/mm/init_64.c
 @@ -6,5 +6,6 @@
   */
  
@@ -197,8 +197,8 @@
  clean-files := consolemap_deftbl.c defkeymap.c
  
 diff -urNp --exclude-from=/home/davej/.exclude linux-1050/include/asm-i386/crash.h linux-1060/include/asm-i386/crash.h
---- linux-1050/include/asm-i386/crash.h
-+++ linux-1060/include/asm-i386/crash.h
+--- linux-1050/include/asm-x86/crash.h
++++ linux-1060/include/asm-x86/crash.h
 @@ -0,0 +1,75 @@
 +#ifndef _ASM_I386_CRASH_H
 +#define _ASM_I386_CRASH_H
@@ -369,82 +369,3 @@
 +#endif /* __KERNEL__ */
 +
 +#endif /* _ASM_IA64_CRASH_H */
-diff -urNp --exclude-from=/home/davej/.exclude linux-1050/include/asm-x86_64/crash.h linux-1060/include/asm-x86_64/crash.h
---- linux-1050/include/asm-x86_64/crash.h
-+++ linux-1060/include/asm-x86_64/crash.h
-@@ -0,0 +1,75 @@
-+#ifndef _ASM_X86_64_CRASH_H
-+#define _ASM_X86_64_CRASH_H
-+
-+/*
-+ * linux/include/asm-x86_64/crash.h
-+ *
-+ * Copyright (c) 2004 Red Hat, Inc. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2, or (at your option)
-+ * any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ *
-+ */
-+
-+#ifdef __KERNEL__
-+
-+#include <linux/mm.h>
-+#include <linux/highmem.h>
-+#include <asm/mmzone.h>
-+
-+extern int page_is_ram(unsigned long);
-+
-+static inline void *
-+map_virtual(u64 offset, struct page **pp)
-+{
-+	struct page *page;
-+	unsigned long pfn;
-+	void *vaddr;
-+
-+	pfn = (unsigned long)(offset >> PAGE_SHIFT);
-+
-+	if (!page_is_ram(pfn)) {
-+		printk(KERN_INFO
-+		    "crash memory driver: !page_is_ram(pfn: %lx)\n", pfn);
-+		return NULL;
-+	}
-+
-+	if (!pfn_valid(pfn)) {
-+		printk(KERN_INFO
-+		    "crash memory driver: invalid pfn: %lx )\n", pfn);
-+		return NULL;
-+	}
-+
-+	page = pfn_to_page(pfn);
-+
-+	vaddr = kmap(page);
-+	if (!vaddr) {
-+		printk(KERN_INFO
-+		    "crash memory driver: pfn: %lx kmap(page: %lx) failed\n", 
-+			pfn, (unsigned long)page);
-+		return NULL;
-+	}
-+
-+	*pp = page;
-+	return (vaddr + (offset & (PAGE_SIZE-1)));
-+}
-+
-+static inline void unmap_virtual(struct page *page) 
-+{ 
-+	kunmap(page);
-+}
-+
-+#endif /* __KERNEL__ */
-+
-+#endif /* _ASM_X86_64_CRASH_H */

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

Index: linux-2.6-debug-nmi-timeout.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-debug-nmi-timeout.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6-debug-nmi-timeout.patch	6 Jul 2007 21:13:02 -0000	1.2
+++ linux-2.6-debug-nmi-timeout.patch	15 Feb 2008 23:58:52 -0000	1.3
@@ -1,5 +1,5 @@
---- linux-2.6.20.noarch/arch/i386/kernel/nmi.c~	2007-04-13 15:52:37.000000000 -0400
-+++ linux-2.6.20.noarch/arch/i386/kernel/nmi.c	2007-04-13 15:53:06.000000000 -0400
+--- linux-2.6.20.noarch/arch/x86/kernel/nmi_32.c~	2007-04-13 15:52:37.000000000 -0400
++++ linux-2.6.20.noarch/arch/x86/kernel/nmi_32.c	2007-04-13 15:53:06.000000000 -0400
 @@ -1044,7 +1044,7 @@ __kprobes int nmi_watchdog_tick(struct p
  		 * wait a few IRQs (5 seconds) before doing the oops ...
  		 */
@@ -9,8 +9,8 @@
  			/*
  			 * die_nmi will return ONLY if NOTIFY_STOP happens..
  			 */
---- linux-2.6.20.noarch/arch/x86_64/kernel/nmi.c~	2007-04-13 15:53:09.000000000 -0400
-+++ linux-2.6.20.noarch/arch/x86_64/kernel/nmi.c	2007-04-13 15:53:29.000000000 -0400
+--- linux-2.6.20.noarch/arch/x86/kernel/nmi_64.c~	2007-04-13 15:53:09.000000000 -0400
++++ linux-2.6.20.noarch/arch/x86/kernel/nmi_64.c	2007-04-13 15:53:29.000000000 -0400
 @@ -923,7 +923,7 @@ int __kprobes nmi_watchdog_tick(struct p
  		 * wait a few IRQs (5 seconds) before doing the oops ...
  		 */

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

Index: linux-2.6-debug-spinlock-taint.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-debug-spinlock-taint.patch,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- linux-2.6-debug-spinlock-taint.patch	28 May 2007 03:29:08 -0000	1.7
+++ linux-2.6-debug-spinlock-taint.patch	15 Feb 2008 23:58:52 -0000	1.8
@@ -1,42 +1,44 @@
---- linux-2.6.17.noarch/lib/spinlock_debug.c~	2006-07-04 16:23:43.000000000 -0400
-+++ linux-2.6.17.noarch/lib/spinlock_debug.c	2006-07-04 16:24:45.000000000 -0400
-@@ -57,9 +57,9 @@ static void spin_bug(spinlock_t *lock, c
+diff --git a/lib/spinlock_debug.c b/lib/spinlock_debug.c
+index 9c4b025..b7a010a 100644
+--- a/lib/spinlock_debug.c
++++ b/lib/spinlock_debug.c
+@@ -58,9 +58,9 @@ static void spin_bug(spinlock_t *lock, const char *msg)
  
  	if (lock->owner && lock->owner != SPINLOCK_OWNER_INIT)
  		owner = lock->owner;
 -	printk(KERN_EMERG "BUG: spinlock %s on CPU#%d, %s/%d\n",
 +	printk(KERN_EMERG "BUG: spinlock %s on CPU#%d, %s/%d (%s)\n",
  		msg, raw_smp_processor_id(),
--		current->comm, current->pid);
-+		current->comm, current->pid, print_tainted());
+-		current->comm, task_pid_nr(current));
++		current->comm, task_pid_nr(current), print_tainted());
  	printk(KERN_EMERG " lock: %p, .magic: %08x, .owner: %s/%d, "
  			".owner_cpu: %d\n",
  		lock, lock->magic,
-@@ -114,9 +114,9 @@ static void __spin_lock_debug(spinlock_t
+@@ -114,9 +114,9 @@ static void __spin_lock_debug(spinlock_t *lock)
  		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());
+-				task_pid_nr(current), lock);
++				task_pid_nr(current), lock, print_tainted());
  			dump_stack();
  #ifdef CONFIG_SMP
  			trigger_all_cpu_backtrace();
-@@ -154,9 +154,9 @@ static void rwlock_bug(rwlock_t *lock, c
+@@ -159,9 +159,9 @@ static void rwlock_bug(rwlock_t *lock, const char *msg)
  	if (!debug_locks_off())
  		return;
  
 -	printk(KERN_EMERG "BUG: rwlock %s on CPU#%d, %s/%d, %p\n",
 +	printk(KERN_EMERG "BUG: rwlock %s on CPU#%d, %s/%d, %p (%s)\n",
  		msg, raw_smp_processor_id(), current->comm,
--		current->pid, lock);
-+		current->pid, lock, print_tainted());
+-		task_pid_nr(current), lock);
++		task_pid_nr(current), lock, print_tainted());
  	dump_stack();
  }
  
-@@ -177,9 +177,9 @@ static void __read_lock_debug(rwlock_t *
+@@ -184,9 +184,9 @@ static void __read_lock_debug(rwlock_t *lock)
  		if (print_once) {
  			print_once = 0;
  			printk(KERN_EMERG "BUG: read-lock lockup on CPU#%d, "
@@ -48,7 +50,7 @@
  			dump_stack();
  		}
  	}
-@@ -250,9 +250,9 @@ static void __write_lock_debug(rwlock_t 
+@@ -259,9 +259,9 @@ static void __write_lock_debug(rwlock_t *lock)
  		if (print_once) {
  			print_once = 0;
  			printk(KERN_EMERG "BUG: write-lock lockup on CPU#%d, "
@@ -60,3 +62,4 @@
  			dump_stack();
  		}
  	}
+

linux-2.6-default-mmf_dump_elf_headers.patch:

Index: linux-2.6-default-mmf_dump_elf_headers.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-default-mmf_dump_elf_headers.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-default-mmf_dump_elf_headers.patch	9 Aug 2007 09:23:39 -0000	1.1
+++ linux-2.6-default-mmf_dump_elf_headers.patch	15 Feb 2008 23:58:52 -0000	1.2
@@ -1,6 +1,6 @@
 --- linux-2.6/include/linux/sched.h
 +++ linux-2.6/include/linux/sched.h
-@@ -365,7 +365,8 @@ extern int get_dumpable(struct mm_struct
+@@ -373,7 +373,8 @@ extern int get_dumpable(struct mm_struct
  #define MMF_DUMP_FILTER_MASK \
  	(((1 << MMF_DUMP_FILTER_BITS) - 1) << MMF_DUMP_FILTER_SHIFT)
  #define MMF_DUMP_FILTER_DEFAULT \
@@ -8,6 +8,5 @@
 +	((1 << MMF_DUMP_ANON_PRIVATE) |	(1 << MMF_DUMP_ANON_SHARED) | \
 +	 (1 << MMF_DUMP_ELF_HEADERS))
  
- struct mm_struct {
- 	struct vm_area_struct * mmap;		/* list of VMAs */
-
+ struct sighand_struct {
+ 	atomic_t		count;

linux-2.6-defaults-nommconf.patch:

Index: linux-2.6-defaults-nommconf.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-defaults-nommconf.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6-defaults-nommconf.patch	30 Oct 2007 16:57:47 -0000	1.2
+++ linux-2.6-defaults-nommconf.patch	15 Feb 2008 23:58:52 -0000	1.3
@@ -1,18 +1,18 @@
 --- linux-2.6.23.noarch/Documentation/kernel-parameters.txt~	2007-10-30 03:53:31.000000000 -0400
 +++ linux-2.6.23.noarch/Documentation/kernel-parameters.txt	2007-10-30 03:54:02.000000000 -0400
 @@ -1273,6 +1273,8 @@ and is between 256 and 4096 characters. 
- 				Mechanism 1.
- 		conf2		[X86-32] Force use of PCI Configuration
- 				Mechanism 2.
+ 				disable the use of PCIE advanced error reporting.
+ 		nodomains	[PCI] Disable support for multiple PCI
+ 				root domains (aka PCI segments, in ACPI-speak).
 +		mmconf		[IA-32,X86_64] Enable use of MMCONFIG for PCI
 +				Configuration
  		nommconf	[X86-32,X86_64] Disable use of MMCONFIG for PCI
  				Configuration
  		nomsi		[MSI] If the PCI_MSI kernel config parameter is
---- vanilla/arch/i386/Kconfig	2007-10-09 16:31:38.000000000 -0400
-+++ linux-2.6.23.noarch/arch/i386/Kconfig	2007-10-30 12:18:06.000000000 -0400
+--- vanilla/arch/x86/Kconfig	2007-10-09 16:31:38.000000000 -0400
++++ linux-2.6.23.noarch/arch/x86/Kconfig	2007-10-30 12:18:06.000000000 -0400
 @@ -1137,6 +1139,16 @@ config PCI_MMCONFIG
- 	depends on PCI && ACPI && (PCI_GOMMCONFIG || PCI_GOANY)
+ 	depends on X86_32 && PCI && ACPI && (PCI_GOMMCONFIG || PCI_GOANY)
  	default y
  
 +config PCI_MMCONFIG_OFF_BY_DEFAULT
@@ -25,30 +25,11 @@
 +	   mmconf PCI accesses if booted with pci=mmconf
 +	   Distribution kernels will likely need this option.
 +
- source "drivers/pci/pcie/Kconfig"
- 
- source "drivers/pci/Kconfig"
---- vanilla/arch/x86_64/Kconfig	2007-10-09 16:31:38.000000000 -0400
-+++ linux-2.6.23.noarch/arch/x86_64/Kconfig	2007-10-30 12:18:19.000000000 -0400
-@@ -724,6 +744,16 @@ config PCI_MMCONFIG
- 	bool "Support mmconfig PCI config space access"
- 	depends on PCI && ACPI
- 
-+config PCI_MMCONFIG_OFF_BY_DEFAULT
-+	bool "Disable PCI MMCONFIG by default"
-+	depends on PCI_MMCONFIG
-+	help
-+	  A lot of machines have broken BIOS tables which means that kernels
-+	  built with PCI_MMCONFIG enabled fail to boot.  As a compromise, enabling
-+	  this option allows the ability to build a kernel capable of using
-+	  mmconf PCI accesses if booted with pci=mmconf
-+	  Distribution kernels will likely need this option.
-+
- source "drivers/pci/pcie/Kconfig"
- 
- source "drivers/pci/Kconfig"
---- linux-2.6.23.noarch/arch/i386/pci/common.c~	2007-10-30 12:35:05.000000000 -0400
-+++ linux-2.6.23.noarch/arch/i386/pci/common.c	2007-10-30 12:35:52.000000000 -0400
+ config PCI_DOMAINS
+ 	bool
+ 	depends on PCI
+--- linux-2.6.23.noarch/arch/x86/pci/common.c~	2007-10-30 12:35:05.000000000 -0400
++++ linux-2.6.23.noarch/arch/x86/pci/common.c	2007-10-30 12:35:52.000000000 -0400
 @@ -18,7 +18,7 @@
  #include "pci.h"
  
@@ -69,8 +50,8 @@
  #endif
  	else if (!strcmp(str, "noacpi")) {
  		acpi_noirq_set();
---- linux-2.6.23.noarch/arch/i386/pci/pci.h~	2007-10-30 12:36:06.000000000 -0400
-+++ linux-2.6.23.noarch/arch/i386/pci/pci.h	2007-10-30 12:36:32.000000000 -0400
+--- linux-2.6.23.noarch/arch/x86/pci/pci.h~	2007-10-30 12:36:06.000000000 -0400
++++ linux-2.6.23.noarch/arch/x86/pci/pci.h	2007-10-30 12:36:32.000000000 -0400
 @@ -19,6 +19,12 @@
  #define PCI_PROBE_MASK		0x000f
  #define PCI_PROBE_NOEARLY	0x0010

linux-2.6-devmem.patch:

Index: linux-2.6-devmem.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-devmem.patch,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- linux-2.6-devmem.patch	2 Aug 2007 23:37:31 -0000	1.18
+++ linux-2.6-devmem.patch	15 Feb 2008 23:58:52 -0000	1.19
@@ -1,7 +1,15 @@
+
+Restrict the abilities of /dev/mem and /dev/kmem
+Make them read-only, and also restrict which areas of
+memory can be read.
+
+Original by Arjan van de Ven
+Signed-off-by: Dave Jones <davej at redhat.com>
+
 Index: linux-2.6/arch/i386/mm/init.c
 ===================================================================
---- linux-2.6.orig/arch/i386/mm/init.c
-+++ linux-2.6/arch/i386/mm/init.c
+--- linux-2.6.orig/arch/x86/mm/init_32.c
++++ linux-2.6/arch/x86/mm/init_32.c
 @@ -233,6 +233,25 @@ int page_is_ram(unsigned long pagenr)
  	return 0;
  }
@@ -18,11 +26,11 @@
 + */
 +int devmem_is_allowed(unsigned long pagenr)
 +{
-+   if (pagenr <= 256)
-+       return 1;
-+   if (!page_is_ram(pagenr))
-+       return 1;
-+   return 0;
++	if (pagenr <= 256)
++		return 1;
++	if (!page_is_ram(pagenr))
++		return 1;
++	return 0;
 +}
 +
  #ifdef CONFIG_HIGHMEM
@@ -32,14 +40,13 @@
 ===================================================================
 --- linux-2.6.orig/arch/ia64/mm/init.c
 +++ linux-2.6/arch/ia64/mm/init.c
-@@ -263,6 +263,13 @@ free_initrd_mem (unsigned long start, un
+@@ -263,6 +263,12 @@ free_initrd_mem (unsigned long start, un
  	}
  }
  
 +int page_is_ram(unsigned long pagenr)
 +{
 +      //FIXME: implement w/efi walk
-+      printk("page is ram is called!!!!!\n");	
 +      return 1;
 +}
 +
@@ -84,7 +91,7 @@
  	free_area_init_nodes(max_zone_pfns);
  }
  
-+int page_is_ram (unsigned long pagenr)
++int page_is_ram(unsigned long pagenr)
 +{
 +	return pagenr < max_mapnr;
 +}
@@ -94,13 +101,13 @@
  	unsigned long codesize, reservedpages, datasize, initsize;
 Index: linux-2.6/arch/x86_64/mm/init.c
 ===================================================================
---- linux-2.6.orig/arch/x86_64/mm/init.c
-+++ linux-2.6/arch/x86_64/mm/init.c
+--- linux-2.6.orig/arch/x86/mm/init_64.c
++++ linux-2.6/arch/x86/mm/init_64.c
 @@ -452,6 +452,28 @@ void __init clear_kernel_mapping(unsigne
  	__flush_tlb_all();
  } 
  
-+static int page_is_ram (unsigned long pagenr)
++static int page_is_ram(unsigned long pagenr)
 +{
 +	int i;
 +
@@ -134,10 +141,10 @@
 + * valid. The argument is a physical page number.
 + *
 + *
-+ * On x86-64, access has to be given to the first megabyte of ram because that area
++ * On x86-64, access has to be given to the first 1MB of ram because that area
 + * contains bios code and data regions used by X and dosemu and similar apps.
-+ * Access has to be given to non-kernel-ram areas as well, these contain the PCI
-+ * mmio resources as well as potential bios/acpi data regions.
++ * Access has to be given to non-kernel-ram areas as well, these contain the
++ * PCI MMIO resources as well as potential bios/acpi data regions.
 + */
 +int devmem_is_allowed(unsigned long pagenr)
 +{
@@ -152,202 +159,6 @@
  static struct kcore_list kcore_mem, kcore_vmalloc, kcore_kernel, kcore_modules,
  			 kcore_vsyscall;
  
-Index: linux-2.6/drivers/char/mem.c
-===================================================================
---- linux-2.6.orig/drivers/char/mem.c
-+++ linux-2.6/drivers/char/mem.c
-@@ -102,6 +102,22 @@ static inline int valid_mmap_phys_addr_r
- }
- #endif
- 
-+static inline int range_is_allowed(unsigned long from, unsigned long to)
-+{
-+	unsigned long cursor;
-+
-+	cursor = from >> PAGE_SHIFT;
-+	while ((cursor << PAGE_SHIFT) < to) {
-+		if (!devmem_is_allowed(cursor)) {
-+			printk ("Program %s tried to read /dev/mem between %lx->%lx.\n",
-+					current->comm, from, to);
-+			return 0;
-+		}
-+		cursor++;
-+	}
-+	return 1;
-+}
-+
- /*
-  * This funcion reads the *physical* memory. The f_pos points directly to the 
-  * memory location. 
-@@ -151,6 +167,8 @@ static ssize_t read_mem(struct file * fi
- 		 */
- 		ptr = xlate_dev_mem_ptr(p);
- 
-+		if (!range_is_allowed(p, p+count))
-+			return -EPERM;
- 		if (copy_to_user(buf, ptr, sz))
- 			return -EFAULT;
- 		buf += sz;
-@@ -208,6 +226,8 @@ static ssize_t write_mem(struct file * f
- 		 */
- 		ptr = xlate_dev_mem_ptr(p);
- 
-+		if (!range_is_allowed(ptr, ptr+sz))
-+			return -EPERM;
- 		copied = copy_from_user(ptr, buf, sz);
- 		if (copied) {
- 			written += sz - copied;
-@@ -357,6 +377,8 @@ static ssize_t read_kmem(struct file *fi
- 	ssize_t low_count, read, sz;
- 	char * kbuf; /* k-addr because vread() takes vmlist_lock rwlock */
- 
-+	return -EPERM;
-+
- 	read = 0;
- 	if (p < (unsigned long) high_memory) {
- 		low_count = count;
-@@ -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)
--{
--	ssize_t written, sz;
--	unsigned long copied;
--
--	written = 0;
--#ifdef __ARCH_HAS_NO_PAGE_ZERO_MAPPED
--	/* we don't have page 0 mapped on sparc and m68k.. */
--	if (realp < PAGE_SIZE) {
--		unsigned long sz = PAGE_SIZE - realp;
--		if (sz > count)
--			sz = count;
--		/* Hmm. Do something? */
--		buf += sz;
--		p += sz;
--		realp += sz;
--		count -= sz;
--		written += sz;
--	}
--#endif
--
--	while (count > 0) {
--		char *ptr;
--		/*
--		 * Handle first page in case it's not aligned
--		 */
--		if (-realp & (PAGE_SIZE - 1))
--			sz = -realp & (PAGE_SIZE - 1);
--		else
--			sz = PAGE_SIZE;
--
--		sz = min_t(unsigned long, sz, count);
--
--		/*
--		 * On ia64 if a page has been mapped somewhere as
--		 * uncached, then it must also be accessed uncached
--		 * by the kernel or data corruption may occur
--		 */
--		ptr = xlate_dev_kmem_ptr(p);
--
--		copied = copy_from_user(ptr, buf, sz);
--		if (copied) {
--			written += sz - copied;
--			if (written)
--				break;
--			return -EFAULT;
--		}
--		buf += sz;
--		p += sz;
--		realp += sz;
--		count -= sz;
--		written += sz;
--	}
--
--	*ppos += written;
--	return written;
--}
--
--
--/*
-- * This function writes to the *virtual* memory as seen by the kernel.
-- */
--static ssize_t write_kmem(struct file * file, const char __user * buf, 
--			  size_t count, loff_t *ppos)
--{
--	unsigned long p = *ppos;
--	ssize_t wrote = 0;
--	ssize_t virtr = 0;
--	ssize_t written;
--	char * kbuf; /* k-addr because vwrite() takes vmlist_lock rwlock */
--
--	if (p < (unsigned long) high_memory) {
--
--		wrote = count;
--		if (count > (unsigned long) high_memory - p)
--			wrote = (unsigned long) high_memory - p;
--
--		written = do_write_kmem((void*)p, p, buf, wrote, ppos);
--		if (written != wrote)
--			return written;
--		wrote = written;
--		p += wrote;
--		buf += wrote;
--		count -= wrote;
--	}
--
--	if (count > 0) {
--		kbuf = (char *)__get_free_page(GFP_KERNEL);
--		if (!kbuf)
--			return wrote ? wrote : -ENOMEM;
--		while (count > 0) {
--			int len = count;
--
--			if (len > PAGE_SIZE)
--				len = PAGE_SIZE;
--			if (len) {
--				written = copy_from_user(kbuf, buf, len);
--				if (written) {
--					if (wrote + virtr)
--						break;
--					free_page((unsigned long)kbuf);
--					return -EFAULT;
--				}
--			}
--			len = vwrite(kbuf, (char *)p, len);
--			count -= len;
--			buf += len;
--			virtr += len;
--			p += len;
--		}
--		free_page((unsigned long)kbuf);
--	}
--
-- 	*ppos = p;
-- 	return virtr + wrote;
--}
--
- #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_
- static const struct file_operations kmem_fops = {
- 	.llseek		= memory_lseek,
- 	.read		= read_kmem,
--	.write		= write_kmem,
- 	.mmap		= mmap_kmem,
- 	.open		= open_kmem,
- 	.get_unmapped_area = get_unmapped_area_mem,
-@@ -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},
- #ifdef CONFIG_DEVPORT
- 	{4, "port",    S_IRUSR | S_IWUSR | S_IRGRP, &port_fops},
 Index: linux-2.6/fs/proc/kcore.c
 ===================================================================
 --- linux-2.6.orig/fs/proc/kcore.c
@@ -415,8 +226,8 @@
  #endif /* _H8300_PAGE_H */
 Index: linux-2.6/include/asm-i386/page.h
 ===================================================================
---- linux-2.6.orig/include/asm-i386/page.h
-+++ linux-2.6/include/asm-i386/page.h
+--- linux-2.6.orig/include/asm-x86/page_32.h
++++ linux-2.6/include/asm-x86/page_32.h
 @@ -108,6 +108,8 @@ extern int sysctl_legacy_va_layout;
  
  extern int page_is_ram(unsigned long pagenr);
@@ -600,8 +411,8 @@
  #endif /* __V850_PAGE_H__ */
 Index: linux-2.6/include/asm-x86_64/page.h
 ===================================================================
---- linux-2.6.orig/include/asm-x86_64/page.h
-+++ linux-2.6/include/asm-x86_64/page.h
+--- linux-2.6.orig/include/asm-x86/page_64.h
++++ linux-2.6/include/asm-x86/page_64.h
 @@ -138,6 +138,10 @@ typedef struct { unsigned long pgprot; }
  #include <asm-generic/memory_model.h>
  #include <asm-generic/page.h>
@@ -620,7 +431,7 @@
  
  #define CORE_STR "CORE"
 -
-+unsigned int allow_kcore_access = 0;
++unsigned int allow_kcore_access;
  static int open_kcore(struct inode * inode, struct file * filp)
  {
 -	return -EPERM;
@@ -628,18 +439,144 @@
  }
  
  static ssize_t read_kcore(struct file *, char __user *, size_t, loff_t *);
---- linux-2.6.20.noarch/arch/x86_64/kernel/machine_kexec.c.orig	2007-06-04 15:50:52.000000000 -0400
-+++ linux-2.6.20.noarch/arch/x86_64/kernel/machine_kexec.c	2007-06-04 15:52:14.000000000 -0400
-@@ -236,10 +236,12 @@
-  * Useful for holding code to do something appropriate
-  * after a kernel panic.
-  */
+--- linux-2.6.23.noarch/arch/x86/kernel/setup_32.c~	2007-10-22 01:29:17.000000000 -0400
++++ linux-2.6.23.noarch/arch/x86/kernel/setup_32.c	2007-10-22 01:29:41.000000000 -0400
+@@ -391,12 +391,16 @@ static inline unsigned long long get_tot
+ }
+ 
+ #ifdef CONFIG_KEXEC
 +extern int allow_kcore_access;
- static int __init setup_crashkernel(char *arg)
++
+ static void __init reserve_crashkernel(void)
  {
- 	unsigned long size, base;
- 	char *p;
-+	allow_kcore_access = 1; /*enable ability to read /proc/kcore*/
- 	if (!arg)
- 		return -EINVAL;
- 	size = memparse(arg, &p);
+ 	unsigned long long total_mem;
+ 	unsigned long long crash_size, crash_base;
+ 	int ret;
+ 
++	allow_kcore_access = 1;	/*enable ability to read /proc/kcore*/
++
+ 	total_mem = get_total_mem();
+ 
+ 	ret = parse_crashkernel(boot_command_line, total_mem,
+--- linux-2.6.23.noarch/drivers/char/Kconfig~	2007-11-15 14:10:18.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/Kconfig	2007-11-15 14:10:40.000000000 -0500
+@@ -1062,6 +1062,20 @@ config DEVPORT
+ 	depends on ISA || PCI
+ 	default y
+ 
++config WRITABLE_DEVMEM
++	bool "Allow writing to /dev/mem"
++	help
++	  Very little software actually requires a writable /dev/mem
++	  Disabling this feature will close off a potential attack
++	  vector for kernel rootkits.
++
++config WRITABLE_DEVKMEM
++	bool "Allow writing to /dev/kmem"
++	help
++	  Very little software actually requires a writable /dev/kmem
++	  Disabling this feature will close off a potential attack
++	  vector for kernel rootkits.
++
+ source "drivers/s390/char/Kconfig"
+ 
+ endmenu
+--- vanilla/drivers/char/mem.c	2007-11-15 14:15:27.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/mem.c	2007-11-15 14:13:54.000000000 -0500
+@@ -108,6 +108,23 @@ static inline int valid_mmap_phys_addr_r
+ }
+ #endif
+ 
++static inline int range_is_allowed(unsigned long from, unsigned long to)
++{
++	unsigned long cursor;
++
++	cursor = from >> PAGE_SHIFT;
++	while ((cursor << PAGE_SHIFT) < to) {
++		if (!devmem_is_allowed(cursor)) {
++			printk(KERN_INFO "Program %s tried to read /dev/mem "
++				"between %lx->%lx.\n",
++				current->comm, from, to);
++			return 0;
++		}
++		cursor++;
++	}
++	return 1;
++}
++
+ /*
+  * This funcion reads the *physical* memory. The f_pos points directly to the 
+  * memory location. 
+@@ -157,6 +174,9 @@ static ssize_t read_mem(struct file * fi
+ 		 */
+ 		ptr = xlate_dev_mem_ptr(p);
+ 
++		//FIXME: Add write-once sysctl
++		//if (!range_is_allowed(p, p+count))
++		//	return -EPERM;
+ 		if (copy_to_user(buf, ptr, sz))
+ 			return -EFAULT;
+ 		buf += sz;
+@@ -169,6 +189,7 @@ static ssize_t read_mem(struct file * fi
+ 	return read;
+ }
+ 
++#ifdef CONFIG_WRITABLE_DEVMEM
+ static ssize_t write_mem(struct file * file, const char __user * buf, 
+ 			 size_t count, loff_t *ppos)
+ {
+@@ -214,6 +235,8 @@ static ssize_t write_mem(struct file * f
+ 		 */
+ 		ptr = xlate_dev_mem_ptr(p);
+ 
++		if (!range_is_allowed(ptr, ptr+sz))
++			return -EPERM;
+ 		copied = copy_from_user(ptr, buf, sz);
+ 		if (copied) {
+ 			written += sz - copied;
+@@ -230,6 +253,9 @@ static ssize_t write_mem(struct file * f
+ 	*ppos += written;
+ 	return written;
+ }
++#else
++#define write_mem 0
++#endif
+ 
+ #ifndef __HAVE_PHYS_MEM_ACCESS_PROT
+ static pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
+@@ -363,6 +389,9 @@ static ssize_t read_kmem(struct file *fi
+ 	ssize_t low_count, read, sz;
+ 	char * kbuf; /* k-addr because vread() takes vmlist_lock rwlock */
+ 
++	//FIXME: Add write-once sysctl
++	//return -EPERM;
++
+ 	read = 0;
+ 	if (p < (unsigned long) high_memory) {
+ 		low_count = count;
+@@ -439,6 +468,7 @@ static ssize_t read_kmem(struct file *fi
+ }
+ 
+ 
++#ifdef CONFIG_WRITABLE_DEVKMEM
+ static inline ssize_t
+ do_write_kmem(void *p, unsigned long realp, const char __user * buf,
+ 	      size_t count, loff_t *ppos)
+@@ -557,6 +587,9 @@ static ssize_t write_kmem(struct file * 
+  	*ppos = p;
+  	return virtr + wrote;
+ }
++#else
++#define write_kmem 0
++#endif
+ 
+ #ifdef CONFIG_DEVPORT
+ static ssize_t read_port(struct file * file, char __user * buf,
+@@ -873,7 +906,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},
+ #ifdef CONFIG_DEVPORT
+ 	{4, "port",    S_IRUSR | S_IWUSR | S_IRGRP, &port_fops},

linux-2.6-drm-radeon-update.patch:

Index: linux-2.6-drm-radeon-update.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-drm-radeon-update.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6-drm-radeon-update.patch	12 Dec 2007 01:48:52 -0000	1.2
+++ linux-2.6-drm-radeon-update.patch	15 Feb 2008 23:58:52 -0000	1.3
@@ -97,10 +97,10 @@
  
 -	dev_priv->fb_location = (RADEON_READ(RADEON_MC_FB_LOCATION)
 -				 & 0xffff) << 16;
-+ 	dev_priv->fb_location = (radeon_read_fb_location(dev_priv) & 0xffff) << 16;
- 	dev_priv->fb_size = 
++	dev_priv->fb_location = (radeon_read_fb_location(dev_priv) & 0xffff) << 16;
+ 	dev_priv->fb_size =
 -		((RADEON_READ(RADEON_MC_FB_LOCATION) & 0xffff0000u) + 0x10000)
-+ 		((radeon_read_fb_location(dev_priv) & 0xffff0000u) + 0x10000)
++		((radeon_read_fb_location(dev_priv) & 0xffff0000u) + 0x10000)
  		- dev_priv->fb_location;
  
  	dev_priv->front_pitch_offset = (((dev_priv->front_pitch / 64) << 22) |

linux-2.6-execshield.patch:

Index: linux-2.6-execshield.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-execshield.patch,v
retrieving revision 1.74
retrieving revision 1.75
diff -u -r1.74 -r1.75
--- linux-2.6-execshield.patch	31 Jan 2008 00:44:13 -0000	1.74
+++ linux-2.6-execshield.patch	15 Feb 2008 23:58:52 -0000	1.75
@@ -1,7 +1,7 @@
 Index: linux-2.6/arch/i386/kernel/cpu/common.c
 ===================================================================
---- linux-2.6.orig/arch/i386/kernel/cpu/common.c
-+++ linux-2.6/arch/i386/kernel/cpu/common.c
+--- linux-2.6.orig/arch/x86/kernel/cpu/common.c
++++ linux-2.6/arch/x86/kernel/cpu/common.c
 @@ -437,6 +437,13 @@ void __cpuinit identify_cpu(struct cpuin
  	if (disable_pse)
  		clear_bit(X86_FEATURE_PSE, c->x86_capability);
@@ -16,8 +16,8 @@
  	/* If the model name is still unset, do table lookup. */
  	if ( !c->x86_model_id[0] ) {
  		char *p;
---- 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
+--- linux-2.6.21.noarch/arch/x86/kernel/process_32.c~	2007-05-27 22:27:45.000000000 -0400
++++ linux-2.6.21.noarch/arch/x86/kernel/process_32.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 */
  
@@ -89,8 +89,8 @@
 +		current->mm->brk = new_brk;
 +}
 +
---- linux-2.6.22.noarch/arch/i386/kernel/smp.c~	2007-07-20 13:48:03.000000000 -0400
-+++ linux-2.6.22.noarch/arch/i386/kernel/smp.c	2007-07-20 13:48:08.000000000 -0400
+--- linux-2.6.22.noarch/arch/x86/kernel/smp_32.c~	2007-07-20 13:48:03.000000000 -0400
++++ linux-2.6.22.noarch/arch/x86/kernel/smp_32.c	2007-07-20 13:48:08.000000000 -0400
 @@ -22,6 +22,7 @@
  
  #include <asm/mtrr.h>
@@ -108,8 +108,8 @@
  
  	if (!cpu_isset(cpu, flush_cpumask))
  		goto out;
---- linux-2.6.22.noarch/arch/i386/kernel/sysenter.c~	2007-07-31 14:20:04.000000000 -0400
-+++ linux-2.6.22.noarch/arch/i386/kernel/sysenter.c	2007-07-31 14:20:11.000000000 -0400
+--- linux-2.6.22.noarch/arch/x86/kernel/sysenter_32.c~	2007-07-31 14:20:04.000000000 -0400
++++ linux-2.6.22.noarch/arch/x86/kernel/sysenter_32.c	2007-07-31 14:20:11.000000000 -0400
 @@ -16,6 +16,7 @@
  #include <linux/string.h>
  #include <linux/elf.h>
@@ -153,9 +153,9 @@
 +
 +__setup("exec-shield=", setup_exec_shield);
 +
- /* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */
- static int maxolduid = 65535;
- static int minolduid;
+ /* Constants used for minimum and  maximum */
+ #ifdef CONFIG_DETECT_SOFTLOCKUP
+ static int one = 1;
 @@ -331,6 +351,14 @@
  		.proc_handler	= &proc_dointvec,
  	},
@@ -365,8 +365,8 @@
  
  	/*
  	 * Walk the list again, actually closing and freeing it,
---- linux-2.6.22.noarch/arch/i386/kernel/traps.c~	2007-07-20 13:50:07.000000000 -0400
-+++ linux-2.6.22.noarch/arch/i386/kernel/traps.c	2007-07-20 13:52:09.000000000 -0400
+--- linux-2.6.22.noarch/arch/x86/kernel/traps_32.c~	2007-07-20 13:50:07.000000000 -0400
++++ linux-2.6.22.noarch/arch/x86/kernel/traps_32.c	2007-07-20 13:52:09.000000000 -0400
 @@ -573,7 +573,91 @@ 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)
@@ -515,8 +515,8 @@
  		current->thread.trap_no = 13;
 Index: linux-2.6/arch/i386/mm/init.c
 ===================================================================
---- linux-2.6.orig/arch/i386/mm/init.c
-+++ linux-2.6/arch/i386/mm/init.c
+--- linux-2.6.orig/arch/x86/mm/init_32.c
++++ linux-2.6/arch/x86/mm/init_32.c
 @@ -433,7 +433,7 @@ u64 __supported_pte_mask __read_mostly =
   * Control non executable mappings.
   *
@@ -548,8 +548,8 @@
  
 Index: linux-2.6/arch/i386/mm/mmap.c
 ===================================================================
---- linux-2.6.orig/arch/i386/mm/mmap.c
-+++ linux-2.6/arch/i386/mm/mmap.c
+--- linux-2.6.orig/arch/x86/mm/mmap_32.c
++++ linux-2.6/arch/x86/mm/mmap_32.c
 @@ -62,15 +62,17 @@ void arch_pick_mmap_layout(struct mm_str
  	 * Fall back to the standard layout if the personality
  	 * bit is set, or if the expected stack growth is unlimited:
@@ -572,8 +572,8 @@
  }
 Index: linux-2.6/arch/i386/mm/pageattr.c
 ===================================================================
---- linux-2.6.orig/arch/i386/mm/pageattr.c
-+++ linux-2.6/arch/i386/mm/pageattr.c
+--- linux-2.6.orig/arch/x86/mm/pageattr_32.c
++++ linux-2.6/arch/x86/mm/pageattr_32.c
 @@ -8,6 +8,8 @@
  #include <linux/highmem.h>
  #include <linux/module.h>
@@ -599,17 +599,17 @@
  		return -EINVAL;
 Index: linux-2.6/arch/x86_64/ia32/ia32_binfmt.c
 ===================================================================
---- linux-2.6.orig/arch/x86_64/ia32/ia32_binfmt.c
-+++ linux-2.6/arch/x86_64/ia32/ia32_binfmt.c
-@@ -251,8 +251,6 @@ elf_core_copy_task_xfpregs(struct task_s
+--- linux-2.6.orig/arch/x86/ia32/ia32_binfmt.c
++++ linux-2.6/arch/x86/ia32/ia32_binfmt.c
+@@ -167,8 +167,6 @@ elf32_core_copy_task_xfpregs(struct task
  #define elf_check_arch(x) \
  	((x)->e_machine == EM_386)
  
 -extern int force_personality32;
 -
- #define ELF_EXEC_PAGESIZE PAGE_SIZE
- #define ELF_HWCAP (boot_cpu_data.x86_capability[0])
- #define ELF_PLATFORM  ("i686")
+ #undef	ELF_EXEC_PAGESIZE
+ #undef	ELF_HWCAP
+ #undef	ELF_PLATFORM
 @@ -266,8 +264,6 @@ do {							\
  		set_thread_flag(TIF_ABI_PENDING);		\
  	else							\
@@ -621,8 +621,8 @@
  /* Override some function names */
 Index: linux-2.6/arch/x86_64/kernel/process.c
 ===================================================================
---- linux-2.6.orig/arch/x86_64/kernel/process.c
-+++ linux-2.6/arch/x86_64/kernel/process.c
+--- linux-2.6.orig/arch/x86/kernel/process_64.c
++++ linux-2.6/arch/x86/kernel/process_64.c
 @@ -686,12 +686,6 @@ void set_personality_64bit(void)
  
  	/* Make sure to be in 64bit mode */
@@ -638,8 +638,8 @@
  asmlinkage long sys_fork(struct pt_regs *regs)
 Index: linux-2.6/arch/x86_64/kernel/setup64.c
 ===================================================================
---- linux-2.6.orig/arch/x86_64/kernel/setup64.c
-+++ linux-2.6/arch/x86_64/kernel/setup64.c
+--- linux-2.6.orig/arch/x86/kernel/setup64.c
++++ linux-2.6/arch/x86/kernel/setup64.c
 @@ -40,46 +40,6 @@ unsigned long __supported_pte_mask __rea
  EXPORT_SYMBOL(__supported_pte_mask);
  static int do_not_nx __cpuinitdata = 0;
@@ -689,8 +689,8 @@
   * Declare PDA itself and support (irqstack,tss,pgd) as per cpu data.
 Index: linux-2.6/arch/x86_64/mm/fault.c
 ===================================================================
---- linux-2.6.orig/arch/x86_64/mm/fault.c
-+++ linux-2.6/arch/x86_64/mm/fault.c
+--- linux-2.6.orig/arch/x86/mm/fault_64.c
++++ linux-2.6/arch/x86/mm/fault_64.c
 @@ -108,7 +108,7 @@ static noinline int is_prefetch(struct p
  	instr = (unsigned char __user *)convert_rip_to_linear(current, regs);
  	max_instr = instr + 15;
@@ -702,8 +702,8 @@
  	while (scan_more && instr < max_instr) { 
 Index: linux-2.6/arch/x86_64/mm/mmap.c
 ===================================================================
---- linux-2.6.orig/arch/x86_64/mm/mmap.c
-+++ linux-2.6/arch/x86_64/mm/mmap.c
+--- linux-2.6.orig/arch/x86/mm/mmap_64.c
++++ linux-2.6/arch/x86/mm/mmap_64.c
 @@ -1,29 +1,88 @@
 -/* Copyright 2005 Andi Kleen, SuSE Labs.
 - * Licensed under GPL, v.2
@@ -871,7 +871,7 @@
  	if (retval)
  		goto out_free_dentry;
  
-+#ifdef __i386__
++#ifdef CONFIG_X86_32
 +	/*
 +	 * Turn off the CS limit completely if exec-shield disabled or
 +	 * NX active:
@@ -1012,7 +1012,7 @@
 -		(PTRS_PER_PTE*sizeof(pte_t)*mm->nr_ptes) >> 10);
 +		(PTRS_PER_PTE*sizeof(pte_t)*mm->nr_ptes) >> 10,
 +		mm->start_brk, mm->brk, mm->start_stack);
-+#ifdef __i386__
++#ifdef CONFIG_X86_32
 +	if (!nx_enabled)
 +		buffer += sprintf(buffer,
 +			"ExecLim:\t%08lx\n", mm->context.exec_limit);
@@ -1024,7 +1024,7 @@
  {
  	struct proc_maps_private *priv = m->private;
  	struct task_struct *task = priv->task;
-+#ifdef __i386__
++#ifdef CONFIG_X86_32
 +	struct mm_struct *tmm = get_task_mm(task);
 +#endif
  	struct vm_area_struct *vma = v;
@@ -1036,7 +1036,7 @@
  			flags & VM_WRITE ? 'w' : '-',
 -			flags & VM_EXEC ? 'x' : '-',
 +			(flags & VM_EXEC
-+#ifdef __i386__
++#ifdef CONFIG_X86_32
 +				|| (!nx_enabled && tmm &&
 +				(vma->vm_start < tmm->context.exec_limit))
 +#endif
@@ -1045,26 +1045,26 @@
  			flags & VM_MAYSHARE ? 's' : 'p',
  			vma->vm_pgoff << PAGE_SHIFT,
  			MAJOR(dev), MINOR(dev), ino, &len);
-+#ifdef __i386__
++#ifdef CONFIG_X86_32
 +	if (tmm)
 +		mmput(tmm);
 +#endif
  
  	/*
  	 * Print the dentry name for named mappings, and a
---- linux-2.6.22.noarch/include/asm-i386/a.out.h~	2007-07-20 14:10:41.000000000 -0400
-+++ linux-2.6.22.noarch/include/asm-i386/a.out.h	2007-07-20 14:10:52.000000000 -0400
+--- linux-2.6.23.noarch/include/asm-x86/a.out.h~	2007-10-29 19:22:53.000000000 -0400
++++ linux-2.6.23.noarch/include/asm-x86/a.out.h	2007-10-29 19:23:18.000000000 -0400
 @@ -19,7 +19,7 @@ struct exec
  
  #ifdef __KERNEL__
- 
--#define STACK_TOP	TASK_SIZE
-+#define STACK_TOP	(TASK_SIZE - PAGE_SIZE)  /* 1 page for vdso */
- #define STACK_TOP_MAX	STACK_TOP
- 
- #endif
---- linux-2.6.19.noarch/include/asm-i386/desc.h~	2006-12-08 06:52:55.000000000 -0500
-+++ linux-2.6.19.noarch/include/asm-i386/desc.h	2006-12-08 06:53:14.000000000 -0500
+ # include <linux/thread_info.h>
+-# define STACK_TOP	TASK_SIZE
++# define STACK_TOP	(TASK_SIZE - PAGE_SIZE)  /* 1 page for vdso */
+ # ifdef CONFIG_X86_32
+ #  define STACK_TOP_MAX	STACK_TOP
+ # else
+--- linux-2.6.19.noarch/include/asm-x86/desc_32.h~	2006-12-08 06:52:55.000000000 -0500
++++ linux-2.6.19.noarch/include/asm-x86/desc_32.h	2006-12-08 06:53:14.000000000 -0500
 @@ -185,6 +185,20 @@ static inline unsigned long get_desc_bas
  	return base;
  }
@@ -1086,21 +1086,23 @@
  #else /* __ASSEMBLY__ */
  
  /*
---- 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
+--- linux-2.6.23.noarch/include/asm-x86/elf.h~	2007-10-29 19:23:46.000000000 -0400
++++ linux-2.6.23.noarch/include/asm-x86/elf.h	2007-10-29 19:24:09.000000000 -0400
+@@ -285,6 +285,11 @@ struct linux_binprm;
+ extern int arch_setup_additional_pages(struct linux_binprm *bprm,
+ 				       int executable_stack);
  
++#ifdef CONFIG_X86_32
 +#define __HAVE_ARCH_RANDOMIZE_BRK
 +extern void randomize_brk(unsigned long old_brk);
++#endif
 +
+ #endif /* __KERNEL__ */
+ 
  #endif
-Index: linux-2.6/include/asm-i386/mmu.h
-===================================================================
---- linux-2.6.orig/include/asm-i386/mmu.h
-+++ linux-2.6/include/asm-i386/mmu.h
-@@ -7,11 +7,15 @@
+--- linux-2.6.23.noarch/include/asm-x86/mmu.h~	2007-10-29 19:24:40.000000000 -0400
++++ linux-2.6.23.noarch/include/asm-x86/mmu.h	2007-10-29 19:26:20.000000000 -0400
+@@ -9,6 +9,8 @@
   * we put the segment information here.
   *
   * cpu_vm_mask is used to optimize ldt flushing.
@@ -1108,18 +1110,22 @@
 + * mappings span.
   */
  typedef struct { 
- 	int size;
- 	struct semaphore sem;
  	void *ldt;
+@@ -18,6 +20,10 @@ typedef struct { 
+ 	int size;
+ 	struct mutex lock;
+ 	void *vdso;
++#ifdef CONFIG_X86_32
 +	struct desc_struct user_cs;
 +	unsigned long exec_limit;
- 	void *vdso;
++#endif
  } mm_context_t;
  
+ #endif /* _ASM_X86_MMU_H */
 Index: linux-2.6/include/asm-i386/processor.h
 ===================================================================
---- linux-2.6.orig/include/asm-i386/processor.h
-+++ linux-2.6/include/asm-i386/processor.h
+--- linux-2.6.orig/include/asm-x86/processor_32.h
++++ linux-2.6/include/asm-x86/processor_32.h
 @@ -326,7 +326,10 @@ extern int bootloader_type;
  /* This decides where the kernel will search for a free chunk of vm
   * space during mmap's.
@@ -1227,8 +1233,8 @@
  #endif /* _SPARC64_PGALLOC_H */
 Index: linux-2.6/include/asm-x86_64/pgalloc.h
 ===================================================================
---- linux-2.6.orig/include/asm-x86_64/pgalloc.h
-+++ linux-2.6/include/asm-x86_64/pgalloc.h
+--- linux-2.6.orig/include/asm-x86/pgalloc_64.h
++++ linux-2.6/include/asm-x86/pgalloc_64.h
 @@ -6,6 +6,13 @@
  #include <linux/threads.h>
  #include <linux/mm.h>
@@ -1300,11 +1306,13 @@
  extern unsigned long
  arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr,
  			  unsigned long len, unsigned long pgoff,
-@@ -304,6 +310,9 @@ struct mm_struct {
+--- linux-2.6.23.noarch/include/linux/mm_types.h~	2007-10-17 15:09:05.000000000 -0400
++++ linux-2.6.23.noarch/include/linux/mm_types.h	2007-10-17 15:09:35.000000000 -0400
+@@ -155,6 +155,9 @@ struct mm_struct {
  	unsigned long (*get_unmapped_area) (struct file *filp,
  				unsigned long addr, unsigned long len,
  				unsigned long pgoff, unsigned long flags);
-+	unsigned long (*get_unmapped_exec_area) (struct file *filp,
++       unsigned long (*get_unmapped_exec_area) (struct file *filp,
 +				unsigned long addr, unsigned long len,
 +				unsigned long pgoff, unsigned long flags);
  	void (*unmap_area) (struct mm_struct *mm, unsigned long addr);

linux-2.6-firewire-git-update.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.2 -r 1.3 linux-2.6-firewire-git-update.patch
Index: linux-2.6-firewire-git-update.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-firewire-git-update.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6-firewire-git-update.patch	5 Feb 2008 23:57:47 -0000	1.2
+++ linux-2.6-firewire-git-update.patch	15 Feb 2008 23:58:52 -0000	1.3
@@ -1,3340 +1,138 @@
-IEEE 1394 updates for Linux 2.6.23 (v629 2008-02-03)
-
- drivers/firewire/fw-cdev.c               |   68 +
- drivers/firewire/fw-device.c             |   86 +-
- drivers/firewire/fw-device.h             |   19 
- drivers/firewire/fw-ohci.c               |  528 +++++++++---
- drivers/firewire/fw-ohci.h               |    2 
- drivers/firewire/fw-sbp2.c               |  945 +++++++++++++++--------
- drivers/firewire/fw-topology.c           |   16 
- drivers/firewire/fw-topology.h           |    6 
- drivers/firewire/fw-transaction.c        |   18 
- drivers/ieee1394/csr1212.c               |   57 -
- drivers/ieee1394/csr1212.h               |    6 
- drivers/ieee1394/dma.c                   |   37 
- drivers/ieee1394/eth1394.c               |   16 
- drivers/ieee1394/ieee1394_core.c         |    2 
- drivers/ieee1394/ieee1394_transactions.c |   70 -
- drivers/ieee1394/nodemgr.c               |   22 
- drivers/ieee1394/ohci1394.c              |   12 
- drivers/ieee1394/pcilynx.c               |   29 
- drivers/ieee1394/raw1394.c               |    4 
- drivers/ieee1394/sbp2.c                  |   53 +
- drivers/ieee1394/sbp2.h                  |    3 
- include/linux/firewire-cdev.h            |   15 
- 22 files changed, 1311 insertions(+), 703 deletions(-)
-
-========================================================================
-Date: Sun, 3 Feb 2008 23:13:13 +0100 (CET)
-From: Stefan Richter <stefanr at s5r6.in-berlin.de>
-Subject: firewire: fw-sbp2: fix I/O errors during reconnect
-
-While fw-sbp2 takes the necessary time to reconnect to a logical unit
-after bus reset, the SCSI core keeps sending new commands.  They are all
-immediately completed with host busy status, and application clients or
-filesystems will break quickly.  The SCSI device might even be taken
-offline:  http://bugzilla.kernel.org/show_bug.cgi?id=9734
-
-The only remedy seems to be to block the SCSI device until reconnect.
-Alas the SCSI core has no useful API to block only one logical unit i.e.
-the scsi_device, therefore we block the entire Scsi_Host.  This
-currently corresponds to an SBP-2 target.  In case of targets with
-multiple logical units, we need to satisfy the dependencies between
-logical units by carefully tracking the blocking state of the target and
-its units.  We block all logical units of a target as soon as one of
-them needs to be blocked, and keep them blocked until all of them are
-ready to be unblocked.
-
-Furthermore, as the history of the old sbp2 driver has shown, the
-scsi_block_requests() API is a minefield with high potential of
-deadlocks.  We therefore take extra measures to keep logical units
-unblocked during __scsi_add_device() and during shutdown.
-
-Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
----
- drivers/firewire/fw-sbp2.c |   71 +++++++++++++++++++++++++++++++++++--
- 1 file changed, 69 insertions(+), 2 deletions(-)
-
-========================================================================
-Date: Sun, 3 Feb 2008 23:12:17 +0100 (CET)
-From: Stefan Richter <stefanr at s5r6.in-berlin.de>
-Subject: firewire: fw-sbp2: sort includes
-
-Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
----
- drivers/firewire/fw-sbp2.c |   14 +++++++-------
- 1 file changed, 7 insertions(+), 7 deletions(-)
-
-========================================================================
-Date: Sun, 3 Feb 2008 23:11:39 +0100 (CET)
-From: Stefan Richter <stefanr at s5r6.in-berlin.de>
-Subject: firewire: fw-sbp2: logout and login after failed reconnect
-
-If fw-sbp2 was too late with requesting the reconnect, the target would
-reject this.  In this case, log out before attempting the reconnect.
-Else several firmwares will deny the re-login because they somehow
-didn't invalidate the old login.
-
-Also, don't retry reconnects in this situation.  The retries won't
-succeed either.
-
-These changes improve chances for successful re-login and shorten the
-period during which the logical unit is inaccessible.
-
-Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
----
- drivers/firewire/fw-sbp2.c |   17 +++++++++++++++--
- 1 file changed, 15 insertions(+), 2 deletions(-)
-
-========================================================================
-Date: Sun, 3 Feb 2008 23:10:47 +0100 (CET)
-From: Stefan Richter <stefanr at s5r6.in-berlin.de>
-Subject: firewire: fw-sbp2: don't add scsi_device twice
-
-When a reconnect failed but re-login succeeded, __scsi_add_device was
-called again.
-
-Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
----
- drivers/firewire/fw-sbp2.c |    6 ++++++
- 1 file changed, 6 insertions(+)
-
-========================================================================
-Date: Sun, 3 Feb 2008 23:09:50 +0100 (CET)
-From: Stefan Richter <stefanr at s5r6.in-berlin.de>
-Subject: firewire: fw-sbp2: log bus_id at management request failures
-
-for easier readable logs if more than one SBP-2 device is present.
-
-Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
----
- drivers/firewire/fw-sbp2.c |   66 ++++++++++++++++++-------------------
- 1 file changed, 33 insertions(+), 33 deletions(-)
-
-========================================================================
-Date: Sun, 3 Feb 2008 23:08:58 +0100 (CET)
-From: Stefan Richter <stefanr at s5r6.in-berlin.de>
-Subject: firewire: fw-sbp2: wait for completion of fetch agent reset
-
-Like the old sbp2 driver, wait for the write transaction to the
-AGENT_RESET to complete before proceeding (after login, after reconnect,
-or in SCSI error handling).
-
-There is one occasion where AGENT_RESET is written to from atomic
-context when getting DEAD status for a command ORB.  There we still
-continue without waiting for the transaction to complete because this
-is more difficult to fix...
-
-Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
----
- drivers/firewire/fw-sbp2.c |   39 ++++++++++++++++++++++++++-----------
- 1 file changed, 28 insertions(+), 11 deletions(-)
-
-========================================================================
-Date: Sun, 3 Feb 2008 23:07:44 +0100 (CET)
-From: Stefan Richter <stefanr at s5r6.in-berlin.de>
-Subject: ieee1394: sbp2: add INQUIRY delay workaround
-
-Add the same workaround as found in fw-sbp2 for feature parity and
-compatibility of the workarounds module parameter.
-
-Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
----
- drivers/ieee1394/sbp2.c |   12 ++++++++++++
- drivers/ieee1394/sbp2.h |    2 ++
- 2 files changed, 14 insertions(+)
-
-========================================================================
-Date: Sun, 3 Feb 2008 23:04:38 +0100 (CET)
-From: Stefan Richter <stefanr at s5r6.in-berlin.de>
-Subject: firewire: fw-sbp2: add INQUIRY delay workaround
-
-Several different SBP-2 bridges accept a login early while the IDE
-device is still powering up.  They are therefore unable to respond to
-SCSI INQUIRY immediately, and the SCSI core has to retry the INQUIRY.
-One of these retries is typically successful, and all is well.
-
-But in case of Momobay FX-3A, the INQUIRY retries tend to fail entirely.
-This can usually be avoided by waiting a little while after login before
-letting the SCSI core send the INQUIRY.  The old sbp2 driver handles
-this more gracefully for as yet unknown reasons (perhaps because it
-waits for fetch agent resets to complete, unlike fw-sbp2 which quickly
-proceeds after requesting the agent reset).  Therefore the workaround is
-not as much necessary for sbp2.
-
-Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
----
- drivers/firewire/fw-sbp2.c |   15 +++++++++++++++
- 1 file changed, 15 insertions(+)
-
-========================================================================
-Date: Sun, 3 Feb 2008 23:03:00 +0100 (CET)
-From: Stefan Richter <stefanr at s5r6.in-berlin.de>
-Subject: firewire: log GUID of new devices
-
-This should help to interpret user reports.  E.g. one can look up the
-vendor OUI (first three bytes of the GUID) and thus tell what is what.
-
-Also simplifies the math in the GUID sysfs attribute.
-
-Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
----
- drivers/firewire/fw-device.c |   28 +++++++++++++++++-----------
- 1 file changed, 17 insertions(+), 11 deletions(-)
-
-========================================================================
-Date: Sun, 27 Jan 2008 19:14:44 +0100 (CET)
-From: Stefan Richter <stefanr at s5r6.in-berlin.de>
-Subject: firewire: fw-sbp2: don't retry login or reconnect after unplug
-
-If a device is being unplugged while fw-sbp2 had a login or reconnect on
-schedule, it would take about half a minute to shut the fw_unit down:
[...4866 lines suppressed...]
-@@ -489,7 +504,7 @@ static int read_bus_info_block(struct fw
- 			return -1;
- 
- 		/* Read header quadlet for the block to get the length. */
--		if (read_rom(device, i, &rom[i]) != RCODE_COMPLETE)
-+		if (read_rom(device, generation, i, &rom[i]) != RCODE_COMPLETE)
- 			return -1;
- 		end = i + (rom[i] >> 16) + 1;
- 		i++;
-@@ -508,7 +523,8 @@ static int read_bus_info_block(struct fw
- 		 * it references another block, and push it in that case.
- 		 */
- 		while (i < end) {
--			if (read_rom(device, i, &rom[i]) != RCODE_COMPLETE)
-+			if (read_rom(device, generation, i, &rom[i]) !=
-+			    RCODE_COMPLETE)
- 				return -1;
- 			if ((key >> 30) == 3 && (rom[i] >> 30) > 1 &&
- 			    sp < ARRAY_SIZE(stack))
-@@ -598,12 +614,14 @@ static DECLARE_RWSEM(idr_rwsem);
- static DEFINE_IDR(fw_device_idr);
- int fw_cdev_major;
+-		if (queue_delayed_work(sbp2_wq, &lu->work, DIV_ROUND_UP(HZ, 5)))
+-			kref_get(&lu->tgt->kref);
+-		kref_put(&lu->tgt->kref, sbp2_release_target);
+-		return;
++		sbp2_queue_work(lu, DIV_ROUND_UP(HZ, 5));
++		goto out;
+ 	}
  
--struct fw_device *fw_device_from_devt(dev_t devt)
-+struct fw_device *fw_device_get_by_devt(dev_t devt)
- {
- 	struct fw_device *device;
+ 	lu->generation        = generation;
+@@ -930,8 +995,8 @@ static void sbp2_reconnect(struct work_s
  
- 	down_read(&idr_rwsem);
- 	device = idr_find(&fw_device_idr, MINOR(devt));
-+	if (device)
-+		fw_device_get(device);
- 	up_read(&idr_rwsem);
- 
- 	return device;
-@@ -615,13 +633,14 @@ static void fw_device_shutdown(struct wo
- 		container_of(work, struct fw_device, work.work);
- 	int minor = MINOR(device->device.devt);
- 
--	down_write(&idr_rwsem);
--	idr_remove(&fw_device_idr, minor);
--	up_write(&idr_rwsem);
+ 	sbp2_agent_reset(lu);
+ 	sbp2_cancel_orbs(lu);
 -
- 	fw_device_cdev_remove(device);
- 	device_for_each_child(&device->device, NULL, shutdown_unit);
- 	device_unregister(&device->device);
-+
-+	down_write(&idr_rwsem);
-+	idr_remove(&fw_device_idr, minor);
-+	up_write(&idr_rwsem);
-+	fw_device_put(device);
+-	kref_put(&lu->tgt->kref, sbp2_release_target);
++ out:
++	sbp2_target_put(lu->tgt);
  }
  
- static struct device_type fw_device_type = {
-@@ -655,7 +674,7 @@ static void fw_device_init(struct work_s
- 	 * device.
+ static void sbp2_update(struct fw_unit *unit)
+@@ -947,8 +1012,7 @@ static void sbp2_update(struct fw_unit *
  	 */
- 
--	if (read_bus_info_block(device) < 0) {
-+	if (read_bus_info_block(device, device->generation) < 0) {
- 		if (device->config_rom_retries < MAX_RETRIES) {
- 			device->config_rom_retries++;
- 			schedule_delayed_work(&device->work, RETRY_DELAY);
-@@ -670,10 +689,13 @@ static void fw_device_init(struct work_s
+ 	list_for_each_entry(lu, &tgt->lu_list, link) {
+ 		lu->retries = 0;
+-		if (queue_delayed_work(sbp2_wq, &lu->work, 0))
+-			kref_get(&tgt->kref);
++		sbp2_queue_work(lu, 0);
  	}
+ }
  
- 	err = -ENOMEM;
-+
-+	fw_device_get(device);
- 	down_write(&idr_rwsem);
- 	if (idr_pre_get(&fw_device_idr, GFP_KERNEL))
- 		err = idr_get_new(&fw_device_idr, device, &minor);
- 	up_write(&idr_rwsem);
-+
- 	if (err < 0)
- 		goto error;
- 
-@@ -705,13 +727,22 @@ static void fw_device_init(struct work_s
+@@ -1103,9 +1167,9 @@ sbp2_map_scatterlist(struct sbp2_command
+ 	 * elements larger than 65535 bytes, some IOMMUs may merge sg elements
+ 	 * during DMA mapping, and Linux currently doesn't prevent this.
  	 */
- 	if (atomic_cmpxchg(&device->state,
- 		    FW_DEVICE_INITIALIZING,
--		    FW_DEVICE_RUNNING) == FW_DEVICE_SHUTDOWN)
-+		    FW_DEVICE_RUNNING) == FW_DEVICE_SHUTDOWN) {
- 		fw_device_shutdown(&device->work.work);
--	else
--		fw_notify("created new fw device %s "
--			  "(%d config rom retries, S%d00)\n",
--			  device->device.bus_id, device->config_rom_retries,
--			  1 << device->max_speed);
-+	} else {
-+		if (device->config_rom_retries)
-+			fw_notify("created device %s: GUID %08x%08x, S%d00, "
-+				  "%d config ROM retries\n",
-+				  device->device.bus_id,
-+				  device->config_rom[3], device->config_rom[4],
-+				  1 << device->max_speed,
-+				  device->config_rom_retries);
-+		else
-+			fw_notify("created device %s: GUID %08x%08x, S%d00\n",
-+				  device->device.bus_id,
-+				  device->config_rom[3], device->config_rom[4],
-+				  1 << device->max_speed);
-+	}
+-	for (i = 0, j = 0; i < count; i++) {
+-		sg_len = sg_dma_len(sg + i);
+-		sg_addr = sg_dma_address(sg + i);
++	for (i = 0, j = 0; i < count; i++, sg = sg_next(sg)) {
++		sg_len = sg_dma_len(sg);
++		sg_addr = sg_dma_address(sg);
+ 		while (sg_len) {
+ 			/* FIXME: This won't get us out of the pinch. */
+ 			if (unlikely(j >= ARRAY_SIZE(orb->page_table))) {
+@@ -1158,7 +1222,7 @@ static int sbp2_scsi_queuecommand(struct
+ 	struct sbp2_logical_unit *lu = cmd->device->hostdata;
+ 	struct fw_device *device = fw_device(lu->tgt->unit->device.parent);
+ 	struct sbp2_command_orb *orb;
+-	unsigned max_payload;
++	unsigned int max_payload;
+ 	int retval = SCSI_MLQUEUE_HOST_BUSY;
  
  	/*
- 	 * Reschedule the IRM work if we just finished reading the
-@@ -729,7 +760,9 @@ static void fw_device_init(struct work_s
- 	idr_remove(&fw_device_idr, minor);
- 	up_write(&idr_rwsem);
-  error:
--	put_device(&device->device);
-+	fw_device_put(device);		/* fw_device_idr's reference */
-+
-+	put_device(&device->device);	/* our reference */
- }
+diff -Naurp linux-2.6-git/drivers/firewire/fw-topology.c firewire-git/drivers/firewire/fw-topology.c
+--- linux-2.6-git/drivers/firewire/fw-topology.c	2008-01-01 22:50:33.000000000 -0500
++++ firewire-git/drivers/firewire/fw-topology.c	2008-01-25 12:41:22.000000000 -0500
+@@ -518,6 +518,11 @@ fw_core_handle_bus_reset(struct fw_card 
+ 		card->bm_retries = 0;
  
- static int update_unit(struct device *dev, void *data)
-@@ -808,6 +841,7 @@ void fw_node_event(struct fw_card *card,
+ 	card->node_id = node_id;
++	/*
++	 * Update node_id before generation to prevent anybody from using
++	 * a stale node_id together with a current generation.
++	 */
++	smp_wmb();
+ 	card->generation = generation;
+ 	card->reset_jiffies = jiffies;
+ 	schedule_delayed_work(&card->work, 0);
+diff -Naurp linux-2.6-git/drivers/firewire/fw-transaction.c firewire-git/drivers/firewire/fw-transaction.c
+--- linux-2.6-git/drivers/firewire/fw-transaction.c	2008-01-01 22:50:33.000000000 -0500
++++ firewire-git/drivers/firewire/fw-transaction.c	2008-01-25 12:41:24.000000000 -0500
+@@ -153,7 +153,7 @@ fw_fill_request(struct fw_packet *packet
+ 	int ext_tcode;
  
- 		device = node->data;
- 		device->node_id = node->node_id;
-+		smp_wmb();  /* update node_id before generation */
- 		device->generation = card->generation;
- 		if (atomic_read(&device->state) == FW_DEVICE_RUNNING) {
- 			PREPARE_DELAYED_WORK(&device->work, fw_device_update);
+ 	if (tcode > 0x10) {
+-		ext_tcode = tcode - 0x10;
++		ext_tcode = tcode & ~0x10;
+ 		tcode = TCODE_LOCK_REQUEST;
+ 	} else
+ 		ext_tcode = 0;
+@@ -650,7 +650,7 @@ fw_core_handle_request(struct fw_card *c
+ 		 HEADER_GET_OFFSET_HIGH(p->header[1]) << 32) | p->header[2];
+ 	tcode       = HEADER_GET_TCODE(p->header[0]);
+ 	destination = HEADER_GET_DESTINATION(p->header[0]);
+-	source      = HEADER_GET_SOURCE(p->header[0]);
++	source      = HEADER_GET_SOURCE(p->header[1]);
+ 
+ 	spin_lock_irqsave(&address_handler_lock, flags);
+ 	handler = lookup_enclosing_address_handler(&address_handler_list,

linux-2.6-futex-fix-fixups.patch:

Index: linux-2.6-futex-fix-fixups.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-futex-fix-fixups.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6-futex-fix-fixups.patch	6 Feb 2008 18:19:50 -0000	1.2
+++ linux-2.6-futex-fix-fixups.patch	15 Feb 2008 23:58:52 -0000	1.3
@@ -26,15 +26,15 @@
     
     Signed-off-by: Ingo Molnar <mingo at elte.hu>
 
-	[cebbert at redhat.com: backport to 2.6.23]
+	[cebbert at redhat.com: backport to 2.6.24]
 
 ---
- include/asm-i386/futex.h   |    6 +++---
- include/asm-x86_64/futex.h |    6 +++---
+ include/asm-x86/futex_32.h   |    6 +++---
+ include/asm-x86/futex_64.h |    6 +++---
  2 files changed, 6 insertions(+), 6 deletions(-)
 
---- vanilla.orig/include/asm-i386/futex.h
-+++ vanilla/include/asm-i386/futex.h
+--- vanilla.orig/include/asm-x86/futex_32.h
++++ vanilla/include/asm-x86/futex_32.h
 @@ -28,7 +28,7 @@
  "1:	movl	%2, %0\n\
  	movl	%0, %3\n"					\
@@ -62,8 +62,8 @@
  
  		"2:	.section .fixup, \"ax\"			\n"
  		"3:	mov     %2, %0				\n"
---- vanilla.orig/include/asm-x86_64/futex.h
-+++ vanilla/include/asm-x86_64/futex.h
+--- vanilla.orig/include/asm-x86/futex_64.h
++++ vanilla/include/asm-x86/futex_64.h
 @@ -27,7 +27,7 @@
  "1:	movl	%2, %0\n\
  	movl	%0, %3\n"					\

linux-2.6-i386-vdso-install-unstripped-copies-on-disk.patch:

Index: linux-2.6-i386-vdso-install-unstripped-copies-on-disk.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-i386-vdso-install-unstripped-copies-on-disk.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6-i386-vdso-install-unstripped-copies-on-disk.patch	9 Aug 2007 22:32:09 -0000	1.2
+++ linux-2.6-i386-vdso-install-unstripped-copies-on-disk.patch	15 Feb 2008 23:58:52 -0000	1.3
@@ -11,14 +11,14 @@
 Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
 ---
 
- arch/i386/Makefile        |    1 +
- arch/i386/kernel/Makefile |   27 ++++++++++++++++++++++-----
+ arch/x86/Makefile        |    1 +
+ arch/x86/kernel/Makefile_32 |   27 ++++++++++++++++++++++-----
  2 files changed, 23 insertions(+), 5 deletions(-)
 
-diff -puN arch/i386/Makefile~i386-vdso-install-unstripped-copies-on-disk arch/i386/Makefile
---- a/arch/i386/Makefile~i386-vdso-install-unstripped-copies-on-disk
-+++ a/arch/i386/Makefile
-@@ -141,9 +141,12 @@ zdisk bzdisk: vmlinux
+diff -puN arch/x86/Makefile_32~i386-vdso-install-unstripped-copies-on-disk arch/x86/Makefile_32
+--- a/arch/x86/Makefile_32~i386-vdso-install-unstripped-copies-on-disk
++++ a/arch/x86/Makefile_32
+@@ -152,9 +152,12 @@ zdisk bzdisk: vmlinux
  fdimage fdimage144 fdimage288 isoimage: vmlinux
  	$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@
  
@@ -27,42 +27,41 @@
  	$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) install
  
 +vdso_install:
-+	$(Q)$(MAKE) $(build)=arch/i386/kernel vdso_install
++	$(Q)$(MAKE) $(build)=arch/x86/kernel vdso_install
 +
  archclean:
- 	$(Q)$(MAKE) $(clean)=arch/i386/boot
- 
-diff -puN arch/i386/kernel/Makefile~i386-vdso-install-unstripped-copies-on-disk arch/i386/kernel/Makefile
---- a/arch/i386/kernel/Makefile~i386-vdso-install-unstripped-copies-on-disk
-+++ a/arch/i386/kernel/Makefile
-@@ -52,7 +52,8 @@ obj-$(CONFIG_SCx200)		+= scx200.o
- # We must build both images before we can assemble it.
+ 	$(Q)rm -rf $(objtree)/arch/i386/boot
+ 	$(Q)$(MAKE) $(clean)=arch/x86/boot
+
+diff -puN arch/x86/kernel/Makefile_32~i386-vdso-install-unstripped-copies-on-disk arch/x86/kernel/Makefile_32
+--- a/arch/x86/kernel/Makefile_32~i386-vdso-install-unstripped-copies-on-disk
++++ a/arch/x86/kernel/Makefile_32
+@@ -54,6 +54,8 @@ obj-$(CONFIG_SCx200)		+= scx200_32.o
  # Note: kbuild does not track this dependency due to usage of .incbin
- $(obj)/vsyscall.o: $(obj)/vsyscall-int80.so $(obj)/vsyscall-sysenter.so
--targets += $(foreach F,int80 sysenter,vsyscall-$F.o vsyscall-$F.so)
-+targets += $(foreach F,$(addprefix vsyscall-,int80 sysenter),\
+ $(obj)/vsyscall_32.o: $(obj)/vsyscall-int80_32.so $(obj)/vsyscall-sysenter_32.so
+ targets += $(foreach F,int80 sysenter,vsyscall-$F_32.o vsyscall-$F_32.so)
++targets += $(foreach F,$(patsubst %,vsyscall-%_32,int80 sysenter),\
 +		     $F.o $F.so $F.so.dbg)
- targets += vsyscall-note.o vsyscall.lds
+ targets += vsyscall-note_32.o vsyscall_32.lds
  
  # The DSO images are built using a special linker script.
-@@ -62,16 +63,32 @@ quiet_cmd_syscall = SYSCALL $@
+@@ -63,16 +65,32 @@ quiet_cmd_syscall = SYSCALL $@
  
- export CPPFLAGS_vsyscall.lds += -P -C -U$(ARCH)
+ export CPPFLAGS_vsyscall_32.lds += -P -C -Ui386
  
 -vsyscall-flags = -shared -s -Wl,-soname=linux-gate.so.1 \
 +vsyscall-flags = -shared -Wl,-soname=linux-gate.so.1 \
  		 $(call ld-option, -Wl$(comma)--hash-style=sysv)
--SYSCFLAGS_vsyscall-sysenter.so	= $(vsyscall-flags)
--SYSCFLAGS_vsyscall-int80.so	= $(vsyscall-flags)
-+SYSCFLAGS_vsyscall-sysenter.so.dbg	= $(vsyscall-flags)
-+SYSCFLAGS_vsyscall-int80.so.dbg		= $(vsyscall-flags)
- 
--$(obj)/vsyscall-int80.so $(obj)/vsyscall-sysenter.so: \
--$(obj)/vsyscall-%.so: $(src)/vsyscall.lds \
--		      $(obj)/vsyscall-%.o $(obj)/vsyscall-note.o FORCE
-+$(obj)/vsyscall-int80.so.dbg $(obj)/vsyscall-sysenter.so.dbg: \
-+$(obj)/vsyscall-%.so.dbg: $(src)/vsyscall.lds \
-+		      $(obj)/vsyscall-%.o $(obj)/vsyscall-note.o FORCE
+-SYSCFLAGS_vsyscall-sysenter_32.so	= $(vsyscall-flags)
+-SYSCFLAGS_vsyscall-int80_32.so	= $(vsyscall-flags)
++SYSCFLAGS_vsyscall-sysenter_32.so.dbg	= $(vsyscall-flags)
++SYSCFLAGS_vsyscall-int80_32.so.dbg	= $(vsyscall-flags)
+ 
+-$(obj)/vsyscall-int80_32.so $(obj)/vsyscall-sysenter_32.so: \
+-$(obj)/vsyscall-%.so: $(src)/vsyscall_32.lds \
++$(obj)/vsyscall-int80_32.so.dbg $(obj)/vsyscall-sysenter_32.so.dbg: \
++$(obj)/vsyscall-%.so.dbg: $(src)/vsyscall_32.lds \
+ 		      $(obj)/vsyscall-%.o $(obj)/vsyscall-note_32.o FORCE
  	$(call if_changed,syscall)
  
 +$(obj)/%.so: OBJCOPYFLAGS := -S
@@ -72,7 +71,7 @@
 +vdsos := vdso-int80.so vdso-sysenter.so
 +
 +quiet_cmd_vdso_install = INSTALL $@
-+      cmd_vdso_install = cp $(@:vdso-%.so=$(obj)/vsyscall-%.so.dbg) \
++      cmd_vdso_install = cp $(@:vdso-%.so=$(obj)/vsyscall-%_32.so.dbg) \
 +			    $(MODLIB)/vdso/$@
 +
 +$(vdsos):

linux-2.6-modsign-include.patch:

Index: linux-2.6-modsign-include.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-modsign-include.patch,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- linux-2.6-modsign-include.patch	4 Jun 2007 21:58:09 -0000	1.7
+++ linux-2.6-modsign-include.patch	15 Feb 2008 23:58:52 -0000	1.8
@@ -11,7 +11,7 @@
  include/asm-arm/module.h     |    5 +++++
  include/asm-cris/module.h    |    5 +++++
  include/asm-h8300/module.h   |    5 +++++
- include/asm-i386/module.h    |    5 +++++
+ include/asm-x86/module_32.h  |    5 +++++
  include/asm-ia64/module.h    |    5 +++++
  include/asm-m32r/module.h    |    5 +++++
  include/asm-m68k/module.h    |    5 +++++
@@ -24,7 +24,7 @@
  include/asm-sparc64/module.h |    5 +++++
  include/asm-um/module-i386.h |    4 ++++
  include/asm-v850/module.h    |    5 +++++
- include/asm-x86_64/module.h  |    5 +++++
+ include/asm-x86/module_64.h  |    5 +++++
  18 files changed, 98 insertions(+), 2 deletions(-)
 
 diff --git a/include/asm-alpha/module.h b/include/asm-alpha/module.h
@@ -105,8 +105,8 @@
  
 diff --git a/include/asm-i386/module.h b/include/asm-i386/module.h
 index 02f8f54..42ab093 100644
---- a/include/asm-i386/module.h
-+++ b/include/asm-i386/module.h
+--- a/include/asm-x86/module_32.h
++++ b/include/asm-x86/module_32.h
 @@ -6,9 +6,14 @@ struct mod_arch_specific
  {
  };
@@ -383,8 +383,8 @@
  #ifdef MODULE
 diff --git a/include/asm-x86_64/module.h b/include/asm-x86_64/module.h
 index 67f8f69..3a7373a 100644
---- a/include/asm-x86_64/module.h
-+++ b/include/asm-x86_64/module.h
+--- a/include/asm-x86/module_64.h
++++ b/include/asm-x86/module_64.h
 @@ -3,8 +3,13 @@ #define _ASM_X8664_MODULE_H
  
  struct mod_arch_specific {}; 

linux-2.6-modsign-mpilib.patch:

Index: linux-2.6-modsign-mpilib.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-modsign-mpilib.patch,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- linux-2.6-modsign-mpilib.patch	13 Jul 2007 19:58:04 -0000	1.4
+++ linux-2.6-modsign-mpilib.patch	15 Feb 2008 23:58:52 -0000	1.5
@@ -51,8 +51,8 @@
 --- a/crypto/Kconfig
 +++ b/crypto/Kconfig
 @@ -465,6 +465,12 @@ config CRYPTO_TEST
- 	help
- 	  Quick & dirty crypto test module.
+ 	  Authenc: Combined mode wrapper for IPsec.
+ 	  This is required for IPSec.
  
 +config CRYPTO_MPILIB
 +	bool "Multiprecision maths library (EXPERIMENTAL)"

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

Index: linux-2.6-net-silence-noisy-printks.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-net-silence-noisy-printks.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-net-silence-noisy-printks.patch	8 Feb 2008 20:57:57 -0000	1.3
+++ linux-2.6-net-silence-noisy-printks.patch	15 Feb 2008 23:58:52 -0000	1.4
@@ -4,36 +4,14 @@
 
 Signed-off-by: Dave Jones <davej at redhat.com>
 
---- 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,
+--- linux-2.6.23.noarch/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c~	2007-10-16 13:56:02.000000000 -0400
++++ linux-2.6.23.noarch/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c	2007-10-16 13:56:08.000000000 -0400
+@@ -176,8 +176,6 @@ static unsigned int ipv4_conntrack_local
  	/* root is playing with raw sockets. */
- 	if ((*pskb)->len < sizeof(struct iphdr)
- 	    || ip_hdrlen(*pskb) < sizeof(struct iphdr)) {
--		if (net_ratelimit())
--			printk("ip6t_hook: happy cracking.\n");
- 		return NF_ACCEPT;
- 	}
- #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)
- 	    || ip_hdrlen(*pskb) < sizeof(struct iphdr)) {
--		if (net_ratelimit())
--			printk("ip6t_hook: happy cracking.\n");
- 		return NF_ACCEPT;
- 	}
- #endif
---- 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)
- 	    || ip_hdrlen(*pskb) < sizeof(struct iphdr)) {
+ 	if (skb->len < sizeof(struct iphdr) ||
+ 	    ip_hdrlen(skb) < sizeof(struct iphdr)) {
 -		if (net_ratelimit())
 -			printk("ipt_hook: happy cracking.\n");
  		return NF_ACCEPT;
  	}
- 	return nf_conntrack_in(PF_INET, hooknum, pskb);
+ 	return nf_conntrack_in(PF_INET, hooknum, skb);

linux-2.6-netdev-e1000-disable-alpm.patch:

Index: linux-2.6-netdev-e1000-disable-alpm.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-netdev-e1000-disable-alpm.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-netdev-e1000-disable-alpm.patch	30 Nov 2007 22:33:11 -0000	1.1
+++ linux-2.6-netdev-e1000-disable-alpm.patch	15 Feb 2008 23:58:52 -0000	1.2
@@ -3,7 +3,7 @@
 
 Should fix the checksum problems too.
 
-bz #400561
+bz #400561 (F8)
 ---
  drivers/net/e1000/e1000_main.c |   31 +++++++++++++++++++++++++++++++
  1 file changed, 31 insertions(+)
@@ -44,11 +44,10 @@
  /**
   * e1000_probe - Device Initialization Routine
   * @pdev: PCI device information struct
-@@ -872,6 +899,8 @@ e1000_probe(struct pci_dev *pdev,
- 	int i, err, pci_using_dac;
- 	uint16_t eeprom_data = 0;
+@@ -872,6 +899,7 @@ e1000_probe(struct pci_dev *pdev,
  	uint16_t eeprom_apme_mask = E1000_EEPROM_APME;
-+
+ 	DECLARE_MAC_BUF(mac);
+ 
 +	e1000e_disable_l1aspm(pdev);
  	if ((err = pci_enable_device(pdev)))
  		return err;

linux-2.6-silence-noise.patch:

Index: linux-2.6-silence-noise.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-silence-noise.patch,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- linux-2.6-silence-noise.patch	15 Dec 2007 00:01:06 -0000	1.11
+++ linux-2.6-silence-noise.patch	15 Feb 2008 23:58:52 -0000	1.12
@@ -1,5 +1,5 @@
---- linux-2.6.18.noarch/arch/x86_64/mm/init.c~	2006-10-16 17:09:56.000000000 -0400
-+++ linux-2.6.18.noarch/arch/x86_64/mm/init.c	2006-10-16 17:10:09.000000000 -0400
+--- linux-2.6.18.noarch/arch/x86/mm/init_64.c~	2006-10-16 17:09:56.000000000 -0400
++++ linux-2.6.18.noarch/arch/x86/mm/init_64.c	2006-10-16 17:10:09.000000000 -0400
 @@ -337,10 +337,6 @@ static void __init find_early_table_spac
  
  	table_start >>= PAGE_SHIFT;
@@ -32,8 +32,8 @@
  				"#%d:%llx@%llx for %s\n",
  			res->flags & IORESOURCE_IO ? "I/O" : "mem",
  			resno, (unsigned long long)(res->end - res->start + 1),
---- linux-2.6.19.noarch/arch/i386/pci/i386.c~	2006-12-04 11:21:32.000000000 -0500
-+++ linux-2.6.19.noarch/arch/i386/pci/i386.c	2006-12-04 11:22:10.000000000 -0500
+--- linux-2.6.19.noarch/arch/x86/pci/i386.c~	2006-12-04 11:21:32.000000000 -0500
++++ linux-2.6.19.noarch/arch/x86/pci/i386.c	2006-12-04 11:22:10.000000000 -0500
 @@ -112,7 +112,7 @@ static void __init pcibios_allocate_bus_
  				pr = pci_find_parent_resource(dev, r);
  				if (!r->start || !pr ||
@@ -80,16 +80,13 @@
 
 --- linux-2.6.22.noarch/drivers/base/power/main.c~	2007-07-13 15:44:37.000000000 -0400
 +++ linux-2.6.22.noarch/drivers/base/power/main.c	2007-07-13 15:44:44.000000000 -0400
-@@ -37,9 +37,6 @@ int device_pm_add(struct device *dev)
- 
- void device_pm_add(struct device *dev)
+@@ -37,6 +37,3 @@ int device_pm_add(struct device *dev)
  {
 -	pr_debug("PM: Adding info for %s:%s\n",
 -		 dev->bus ? dev->bus->name : "No Bus",
 -		 kobject_name(&dev->kobj));
  	mutex_lock(&dpm_list_mtx);
  	list_add_tail(&dev->power.entry, &dpm_active);
- 	error = dpm_sysfs_add(dev);
 @@ -51,9 +48,6 @@ int device_pm_add(struct device *dev)
  
  void device_pm_remove(struct device *dev)
@@ -100,20 +97,3 @@
  	mutex_lock(&dpm_list_mtx);
  	dpm_sysfs_remove(dev);
  	list_del_init(&dev->power.entry);
-
-16:29 @   pjones| davej: btw, we should apply this patch and get it upstream:
-16:29 @   pjones| http://pastebin.ca/741573
-16:29 @   pjones| (because imacs and such don't have an i8042, so we get that message during quiet boot with them)
-16:29 @   pjones| (warning: not tested.  I'm working on the assumption that we see it because it's KERN_ERR )
-
---- linux-2.6.23.noarch/drivers/input/serio/i8042.c~	2007-10-18 16:37:06.000000000 -0400
-+++ linux-2.6.23.noarch/drivers/input/serio/i8042.c	2007-10-18 16:37:16.000000000 -0400
-@@ -684,7 +684,7 @@ static int __devinit i8042_check_aux(voi
- static int i8042_controller_check(void)
- {
- 	if (i8042_flush() == I8042_BUFFER_SIZE) {
--		printk(KERN_ERR "i8042.c: No controller found.\n");
-+		printk(KERN_INFO "i8042.c: No controller found.\n");
- 		return -ENODEV;
- 	}
- 

linux-2.6-smarter-relatime.patch:

Index: linux-2.6-smarter-relatime.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-smarter-relatime.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-smarter-relatime.patch	19 Sep 2007 22:19:45 -0000	1.3
+++ linux-2.6-smarter-relatime.patch	15 Feb 2008 23:58:52 -0000	1.4
@@ -47,9 +47,9 @@
 +			[FS] mount all filesystems with relative atime
 +			updates by default.
 +
- 	default_utf8=   [VT]
+ 	vt.default_utf8=
+ 			[VT]
  			Format=<0|1>
- 			Set system-wide default UTF-8 mode for all tty's.
 @@ -1468,6 +1472,10 @@ and is between 256 and 4096 characters. 
  			Format: <reboot_mode>[,<reboot_mode2>[,...]]
  			See arch/*/kernel/reboot.c or arch/*/kernel/process.c			
@@ -61,13 +61,11 @@
  	reserve=	[KNL,BUGS] Force the kernel to ignore some iomem area
  
  	reservetop=	[X86-32]
-Index: linux/fs/Kconfig
-===================================================================
---- linux.orig/fs/Kconfig
-+++ linux/fs/Kconfig
-@@ -2060,6 +2060,28 @@ config 9P_FS
+--- linux-2.6.23.noarch/fs/Kconfig~	2007-10-17 17:09:10.000000000 -0400
++++ linux-2.6.23.noarch/fs/Kconfig	2007-10-17 17:10:05.000000000 -0400
+@@ -2173,6 +2173,29 @@ config 9P_FS
  
- endmenu
+ endif # NETWORK_FILESYSTEMS
  
 +config DEFAULT_RELATIME
 +	bool "Mount all filesystems with relatime by default"
@@ -91,6 +89,7 @@
 +	default "1" if DEFAULT_RELATIME
 +	default "0"
 +
++
  if BLOCK
  menu "Partition Types"
  

linux-2.6-squashfs.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.23 -r 1.24 linux-2.6-squashfs.patch
Index: linux-2.6-squashfs.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-squashfs.patch,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- linux-2.6-squashfs.patch	20 Jul 2007 23:30:31 -0000	1.23
+++ linux-2.6-squashfs.patch	15 Feb 2008 23:58:52 -0000	1.24
@@ -1,26 +1,27 @@
-diff -x .gitignore -Nurp linux-2.6.20/fs/Kconfig linux-2.6.20-squashfs3.2-r2/fs/Kconfig
---- linux-2.6.20/fs/Kconfig	2006-12-25 01:13:12.000000000 +0000
-+++ linux-2.6.20-squashfs3.2-r2/fs/Kconfig	2007-01-16 02:06:03.000000000 +0000
-@@ -1404,6 +1404,71 @@ config CRAMFS
+diff -x .gitignore -Nurp linux-2.6.24/fs/Kconfig linux-2.6.24-squashfs3.3/fs/Kconfig
+--- linux-2.6.24/fs/Kconfig	2007-10-25 17:41:45.000000000 +0100
++++ linux-2.6.24-squashfs3.3/fs/Kconfig	2007-11-01 05:06:25.000000000 +0000
+@@ -1396,6 +1396,56 @@ config CRAMFS
  
  	  If unsure, say N.
  
 +config SQUASHFS
-+	tristate "SquashFS 3.2 - Squashed file system support"
++	tristate "SquashFS 3.3 - Squashed file system support"
 +	select ZLIB_INFLATE
 +	help
-+	  Saying Y here includes support for SquashFS 3.2 (a Compressed Read-Only File
-+	  System).  Squashfs is a highly compressed read-only filesystem for Linux.
-+	  It uses zlib compression to compress both files, inodes and directories.
-+	  Inodes in the system are very small and all blocks are packed to minimise
-+	  data overhead. Block sizes greater than 4K are supported up to a maximum of 64K.
-+	  SquashFS 3.1 supports 64 bit filesystems and files (larger than 4GB), full
-+	  uid/gid information, hard links and timestamps.
-+
-+	  Squashfs is intended for general read-only filesystem use, for archival
-+	  use (i.e. in cases where a .tar.gz file may be used), and in embedded
-+	  systems where low overhead is needed.  Further information and filesystem tools
-+	  are available from http://squashfs.sourceforge.net.
++	  Saying Y here includes support for SquashFS 3.3 (a Compressed
++	  Read-Only File System).  Squashfs is a highly compressed read-only
++	  filesystem for Linux.  It uses zlib compression to compress both
++	  files, inodes and directories.  Inodes in the system are very small
++	  and all blocks are packed to minimise data overhead. Block sizes
++	  greater than 4K are supported up to a maximum of 1 Mbytes (default
++	  block size 128K).  SquashFS 3.3 supports 64 bit filesystems and files
++	  (larger than 4GB), full uid/gid information, hard links and timestamps.  
++
++	  Squashfs is intended for general read-only filesystem use, for
++	  archival use (i.e. in cases where a .tar.gz file may be used), and in
++	  embedded systems where low overhead is needed.  Further information
++	  and filesystem tools are available from http://squashfs.sourceforge.net.
 +
 +	  If you want to compile this as a module ( = code which can be
 +	  inserted in and removed from the running kernel whenever you want),
@@ -32,13 +33,11 @@
 +
 +config SQUASHFS_EMBEDDED
 +
-+	bool "Additional options for memory-constrained systems" 
++	bool "Additional option for memory-constrained systems" 
 +	depends on SQUASHFS
 +	default n
 +	help
-+	  Saying Y here allows you to specify cache sizes and how Squashfs
-+	  allocates memory.  This is only intended for memory constrained
-+	  systems.
++	  Saying Y here allows you to specify cache size.
 +
 +	  If unsure, say N.
 +
@@ -56,43 +55,29 @@
 +	  Note there must be at least one cached fragment.  Anything
 +	  much more than three will probably not make much difference.
 +
-+config SQUASHFS_VMALLOC
-+	bool "Use Vmalloc rather than Kmalloc" if SQUASHFS_EMBEDDED
-+	depends on SQUASHFS
-+	default n
-+	help
-+	  By default SquashFS uses kmalloc to obtain fragment cache memory.
-+	  Kmalloc memory is the standard kernel allocator, but it can fail
-+	  on memory constrained systems.  Because of the way Vmalloc works,
-+	  Vmalloc can succeed when kmalloc fails.  Specifying this option
-+	  will make SquashFS always use Vmalloc to allocate the
-+	  fragment cache memory.
-+
-+	  If unsure, say N.
-+
  config VXFS_FS
  	tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
  	depends on BLOCK
-diff -x .gitignore -Nurp linux-2.6.20/fs/Makefile linux-2.6.20-squashfs3.2-r2/fs/Makefile
---- linux-2.6.20/fs/Makefile	2006-12-25 01:13:12.000000000 +0000
-+++ linux-2.6.20-squashfs3.2-r2/fs/Makefile	2007-01-16 02:06:03.000000000 +0000
-@@ -68,6 +68,7 @@ obj-$(CONFIG_JBD)		+= jbd/
+diff -x .gitignore -Nurp linux-2.6.24/fs/Makefile linux-2.6.24-squashfs3.3/fs/Makefile
+--- linux-2.6.24/fs/Makefile	2007-10-25 17:41:45.000000000 +0100
++++ linux-2.6.24-squashfs3.3/fs/Makefile	2007-11-01 05:08:09.000000000 +0000
+@@ -72,6 +72,7 @@ obj-$(CONFIG_JBD)		+= jbd/
  obj-$(CONFIG_JBD2)		+= jbd2/
  obj-$(CONFIG_EXT2_FS)		+= ext2/
  obj-$(CONFIG_CRAMFS)		+= cramfs/
 +obj-$(CONFIG_SQUASHFS)		+= squashfs/
- obj-$(CONFIG_RAMFS)		+= ramfs/
+ obj-y				+= ramfs/
  obj-$(CONFIG_HUGETLBFS)		+= hugetlbfs/
  obj-$(CONFIG_CODA_FS)		+= coda/
-diff -x .gitignore -Nurp linux-2.6.20/fs/squashfs/inode.c linux-2.6.20-squashfs3.2-r2/fs/squashfs/inode.c
---- linux-2.6.20/fs/squashfs/inode.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.20-squashfs3.2-r2/fs/squashfs/inode.c	2007-01-16 02:28:36.000000000 +0000
-@@ -0,0 +1,2330 @@
+diff -x .gitignore -Nurp linux-2.6.24/fs/squashfs/inode.c linux-2.6.24-squashfs3.3/fs/squashfs/inode.c
+--- linux-2.6.24/fs/squashfs/inode.c	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.24-squashfs3.3/fs/squashfs/inode.c	2007-11-01 05:05:00.000000000 +0000
+@@ -0,0 +1,2192 @@
 +/*
 + * Squashfs - a compressed read only filesystem for Linux
 + *
 + * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
-+ * Phillip Lougher <phillip at lougher.org.uk>
++ * Phillip Lougher <phillip at lougher.demon.co.uk>
 + *
 + * This program is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU General Public License
@@ -125,6 +110,8 @@
 +
 +#include "squashfs.h"
 +
++int squashfs_cached_blks;
++
 +static void vfs_read_inode(struct inode *i);
 +static struct dentry *squashfs_get_parent(struct dentry *child);
 +static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode);
@@ -134,7 +121,6 @@
 +				int readahead_blks, char *block_list,
 +				unsigned short **block_p, unsigned int *bsize);
 +static int squashfs_readpage(struct file *file, struct page *page);
-+static int squashfs_readpage4K(struct file *file, struct page *page);
 +static int squashfs_readdir(struct file *, void *, filldir_t);
 +static struct dentry *squashfs_lookup(struct inode *, struct dentry *,
 +				struct nameidata *);
@@ -187,10 +173,6 @@
 +	.readpage = squashfs_readpage
 +};
 +
-+SQSH_EXTERN const struct address_space_operations squashfs_aops_4K = {
-+	.readpage = squashfs_readpage4K
-+};
-+
 +static const struct file_operations squashfs_dir_ops = {
 +	.read = generic_read_dir,
 +	.readdir = squashfs_readdir
@@ -274,30 +256,36 @@
 +{
 +	struct squashfs_sb_info *msblk = s->s_fs_info;
 +	struct squashfs_super_block *sblk = &msblk->sblk;
-+	struct buffer_head *bh[((SQUASHFS_FILE_MAX_SIZE - 1) >>
-+			msblk->devblksize_log2) + 2];
++	struct buffer_head **bh;
 +	unsigned int offset = index & ((1 << msblk->devblksize_log2) - 1);
 +	unsigned int cur_index = index >> msblk->devblksize_log2;
 +	int bytes, avail_bytes, b = 0, k = 0;
 +	unsigned int compressed;
 +	unsigned int c_byte = length;
 +
++	bh = kmalloc(((sblk->block_size >> msblk->devblksize_log2) + 1) *
++								sizeof(struct buffer_head *), GFP_KERNEL);
++	if (bh == NULL)
++		goto read_failure;
++
 +	if (c_byte) {
 +		bytes = msblk->devblksize - offset;
 +		compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte);
 +		c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte);
 +
-+		TRACE("Block @ 0x%llx, %scompressed size %d, src size %d\n", index, compressed
-+					? "" : "un", (unsigned int) c_byte, srclength);
++		TRACE("Block @ 0x%llx, %scompressed size %d, src size %d\n", index,
++					compressed ? "" : "un", (unsigned int) c_byte, srclength);
 +
 +		if (c_byte > srclength || index < 0 || (index + c_byte) > sblk->bytes_used)
 +			goto read_failure;
 +
-+		if (!(bh[0] = sb_getblk(s, cur_index)))
++		bh[0] = sb_getblk(s, cur_index);
++		if (bh[0] == NULL)
 +			goto block_release;
 +
 +		for (b = 1; bytes < c_byte; b++) {
-+			if (!(bh[b] = sb_getblk(s, ++cur_index)))
++			bh[b] = sb_getblk(s, ++cur_index);
++			if (bh[b] == NULL)
 +				goto block_release;
 +			bytes += msblk->devblksize;
 +		}
@@ -306,8 +294,8 @@
 +		if (index < 0 || (index + 2) > sblk->bytes_used)
 +			goto read_failure;
 +
-+		if (!(bh[0] = get_block_length(s, &cur_index, &offset,
-+								&c_byte)))
[...1874 lines suppressed...]
 +			SQUASHFS_I(i)->start_block = inodep->start_block;
 +			SQUASHFS_I(i)->u.s1.block_list_start = next_block;
 +			SQUASHFS_I(i)->offset = next_offset;
-+			if (sblk->block_size > 4096)
-+				i->i_data.a_ops = &squashfs_aops;
-+			else
-+				i->i_data.a_ops = &squashfs_aops_4K;
++			i->i_data.a_ops = &squashfs_aops;
 +
 +			TRACE("File inode %x:%x, start_block %x, "
 +					"block_list_start %llx, offset %x\n",
@@ -3175,15 +3020,15 @@
 +
 +	return 1;
 +}
-diff -x .gitignore -Nurp linux-2.6.20/fs/squashfs/squashfs.h linux-2.6.20-squashfs3.2-r2/fs/squashfs/squashfs.h
---- linux-2.6.20/fs/squashfs/squashfs.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.20-squashfs3.2-r2/fs/squashfs/squashfs.h	2007-01-12 01:42:11.000000000 +0000
-@@ -0,0 +1,87 @@
+diff -x .gitignore -Nurp linux-2.6.24/fs/squashfs/squashfs.h linux-2.6.24-squashfs3.3/fs/squashfs/squashfs.h
+--- linux-2.6.24/fs/squashfs/squashfs.h	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.24-squashfs3.3/fs/squashfs/squashfs.h	2007-08-19 04:23:16.000000000 +0100
+@@ -0,0 +1,86 @@
 +/*
 + * Squashfs - a compressed read only filesystem for Linux
 + *
 + * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
-+ * Phillip Lougher <phillip at lougher.org.uk>
++ * Phillip Lougher <phillip at lougher.demon.co.uk>
 + *
 + * This program is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU General Public License
@@ -3231,7 +3076,7 @@
 +extern unsigned int squashfs_read_data(struct super_block *s, char *buffer,
 +				long long index, unsigned int length,
 +				long long *next_index, int srclength);
-+extern int squashfs_get_cached_block(struct super_block *s, char *buffer,
++extern int squashfs_get_cached_block(struct super_block *s, void *buffer,
 +				long long block, unsigned int offset,
 +				int length, long long *next_block,
 +				unsigned int *next_offset);
@@ -3243,7 +3088,6 @@
 +extern struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode, unsigned int inode_number);
 +extern const struct address_space_operations squashfs_symlink_aops;
 +extern const struct address_space_operations squashfs_aops;
-+extern const struct address_space_operations squashfs_aops_4K;
 +extern struct inode_operations squashfs_dir_inode_ops;
 +#else
 +#define SQSH_EXTERN static
@@ -3266,10 +3110,10 @@
 +	return 0;
 +}
 +#endif
-diff -x .gitignore -Nurp linux-2.6.20/include/linux/squashfs_fs.h linux-2.6.20-squashfs3.2-r2/include/linux/squashfs_fs.h
---- linux-2.6.20/include/linux/squashfs_fs.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.20-squashfs3.2-r2/include/linux/squashfs_fs.h	2007-01-12 00:06:09.000000000 +0000
-@@ -0,0 +1,934 @@
+diff -x .gitignore -Nurp linux-2.6.24/include/linux/squashfs_fs.h linux-2.6.24-squashfs3.3/include/linux/squashfs_fs.h
+--- linux-2.6.24/include/linux/squashfs_fs.h	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.24-squashfs3.3/include/linux/squashfs_fs.h	2007-11-01 03:50:57.000000000 +0000
+@@ -0,0 +1,935 @@
 +#ifndef SQUASHFS_FS
 +#define SQUASHFS_FS
 +
@@ -3277,7 +3121,7 @@
 + * Squashfs
 + *
 + * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
-+ * Phillip Lougher <phillip at lougher.org.uk>
++ * Phillip Lougher <phillip at lougher.demon.co.uk>
 + *
 + * This program is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU General Public License
@@ -3300,16 +3144,9 @@
 +#define CONFIG_SQUASHFS_2_0_COMPATIBILITY
 +#endif
 +
-+#ifdef	CONFIG_SQUASHFS_VMALLOC
-+#define SQUASHFS_ALLOC(a)		vmalloc(a)
-+#define SQUASHFS_FREE(a)		vfree(a)
-+#else
-+#define SQUASHFS_ALLOC(a)		kmalloc(a, GFP_KERNEL)
-+#define SQUASHFS_FREE(a)		kfree(a)
-+#endif
 +#define SQUASHFS_CACHED_FRAGMENTS	CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE	
 +#define SQUASHFS_MAJOR			3
-+#define SQUASHFS_MINOR			0
++#define SQUASHFS_MINOR			1
 +#define SQUASHFS_MAGIC			0x73717368
 +#define SQUASHFS_MAGIC_SWAP		0x68737173
 +#define SQUASHFS_START			0
@@ -3319,10 +3156,10 @@
 +#define SQUASHFS_METADATA_LOG		13
 +
 +/* default size of data blocks */
-+#define SQUASHFS_FILE_SIZE		65536
-+#define SQUASHFS_FILE_LOG		16
++#define SQUASHFS_FILE_SIZE		131072
++#define SQUASHFS_FILE_LOG		17
 +
-+#define SQUASHFS_FILE_MAX_SIZE		65536
++#define SQUASHFS_FILE_MAX_SIZE		1048576
 +
 +/* Max number of uids and gids */
 +#define SQUASHFS_UIDS			256
@@ -3403,9 +3240,8 @@
 +
 +#define SQUASHFS_COMPRESSED_BIT_BLOCK		(1 << 24)
 +
-+#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B)	(((B) & \
-+	~SQUASHFS_COMPRESSED_BIT_BLOCK) ? (B) & \
-+	~SQUASHFS_COMPRESSED_BIT_BLOCK : SQUASHFS_COMPRESSED_BIT_BLOCK)
++#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B)	((B) & \
++	~SQUASHFS_COMPRESSED_BIT_BLOCK)
 +
 +#define SQUASHFS_COMPRESSED_BLOCK(B)	(!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK))
 +
@@ -3901,6 +3737,15 @@
 +	unsigned int		start_block:24;
 +} __attribute__  ((packed));
 +
++union squashfs_inode_header_1 {
++	struct squashfs_base_inode_header_1	base;
++	struct squashfs_dev_inode_header_1	dev;
++	struct squashfs_symlink_inode_header_1	symlink;
++	struct squashfs_reg_inode_header_1	reg;
++	struct squashfs_dir_inode_header_1	dir;
++	struct squashfs_ipc_inode_header_1	ipc;
++};
++
 +#define SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n) \
 +	SQUASHFS_MEMSET(s, d, n);\
 +	SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
@@ -4204,9 +4049,9 @@
 +
 +#endif
 +#endif
-diff -x .gitignore -Nurp linux-2.6.20/include/linux/squashfs_fs_i.h linux-2.6.20-squashfs3.2-r2/include/linux/squashfs_fs_i.h
---- linux-2.6.20/include/linux/squashfs_fs_i.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.20-squashfs3.2-r2/include/linux/squashfs_fs_i.h	2007-01-12 00:06:09.000000000 +0000
+diff -x .gitignore -Nurp linux-2.6.24/include/linux/squashfs_fs_i.h linux-2.6.24-squashfs3.3/include/linux/squashfs_fs_i.h
+--- linux-2.6.24/include/linux/squashfs_fs_i.h	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.24-squashfs3.3/include/linux/squashfs_fs_i.h	2007-08-19 04:24:08.000000000 +0100
 @@ -0,0 +1,45 @@
 +#ifndef SQUASHFS_FS_I
 +#define SQUASHFS_FS_I
@@ -4214,7 +4059,7 @@
 + * Squashfs
 + *
 + * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
-+ * Phillip Lougher <phillip at lougher.org.uk>
++ * Phillip Lougher <phillip at lougher.demon.co.uk>
 + *
 + * This program is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU General Public License
@@ -4253,17 +4098,17 @@
 +	struct inode	vfs_inode;
 +};
 +#endif
-diff -x .gitignore -Nurp linux-2.6.20/include/linux/squashfs_fs_sb.h linux-2.6.20-squashfs3.2-r2/include/linux/squashfs_fs_sb.h
---- linux-2.6.20/include/linux/squashfs_fs_sb.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.20-squashfs3.2-r2/include/linux/squashfs_fs_sb.h	2007-01-12 01:23:47.000000000 +0000
-@@ -0,0 +1,74 @@
+diff -x .gitignore -Nurp linux-2.6.24/include/linux/squashfs_fs_sb.h linux-2.6.24-squashfs3.3/include/linux/squashfs_fs_sb.h
+--- linux-2.6.24/include/linux/squashfs_fs_sb.h	1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.24-squashfs3.3/include/linux/squashfs_fs_sb.h	2007-08-19 04:24:26.000000000 +0100
+@@ -0,0 +1,76 @@
 +#ifndef SQUASHFS_FS_SB
 +#define SQUASHFS_FS_SB
 +/*
 + * Squashfs
 + *
 + * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
-+ * Phillip Lougher <phillip at lougher.org.uk>
++ * Phillip Lougher <phillip at lougher.demon.co.uk>
 + *
 + * This program is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU General Public License
@@ -4323,6 +4168,8 @@
 +	struct meta_index	*meta_index;
 +	z_stream		stream;
 +	long long		*inode_lookup_table;
++	int			unused_cache_blks;
++	int			unused_frag_blks;
 +	int			(*read_inode)(struct inode *i,  squashfs_inode_t \
 +				inode);
 +	long long		(*read_blocklist)(struct inode *inode, int \
@@ -4331,9 +4178,9 @@
 +	int			(*read_fragment_index_table)(struct super_block *s);
 +};
 +#endif
-diff -x .gitignore -Nurp linux-2.6.20/init/do_mounts_rd.c linux-2.6.20-squashfs3.2-r2/init/do_mounts_rd.c
---- linux-2.6.20/init/do_mounts_rd.c	2006-11-29 21:57:37.000000000 +0000
-+++ linux-2.6.20-squashfs3.2-r2/init/do_mounts_rd.c	2007-01-16 02:06:03.000000000 +0000
+diff -x .gitignore -Nurp linux-2.6.24/init/do_mounts_rd.c linux-2.6.24-squashfs3.3/init/do_mounts_rd.c
+--- linux-2.6.24/init/do_mounts_rd.c	2007-10-25 17:41:49.000000000 +0100
++++ linux-2.6.24-squashfs3.3/init/do_mounts_rd.c	2007-11-01 05:06:25.000000000 +0000
 @@ -5,6 +5,7 @@
  #include <linux/ext2_fs.h>
  #include <linux/romfs_fs.h>

linux-2.6-unexport-symbols.patch:

Index: linux-2.6-unexport-symbols.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-unexport-symbols.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-unexport-symbols.patch	28 May 2007 03:29:08 -0000	1.3
+++ linux-2.6-unexport-symbols.patch	15 Feb 2008 23:58:52 -0000	1.4
@@ -1,13 +1,13 @@
 No external modules should be touching these symbols.
 If they are, they are broken.
 
---- 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
+--- linux-2.6.23.noarch/fs/open.c~	2007-11-15 12:56:28.000000000 -0500
++++ linux-2.6.23.noarch/fs/open.c	2007-11-15 12:56:46.000000000 -0500
+@@ -1061,7 +1061,6 @@ asmlinkage long sys_open(const char __us
  	prevent_tail_call(ret);
  	return ret;
  }
--EXPORT_SYMBOL_GPL(sys_open);
+-EXPORT_UNUSED_SYMBOL_GPL(sys_open); /* To be deleted for 2.6.25 */
  
  asmlinkage long sys_openat(int dfd, const char __user *filename, int flags,
  			   int mode)

linux-2.6-upstream-reverts.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.3 -r 1.4 linux-2.6-upstream-reverts.patch
Index: linux-2.6-upstream-reverts.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-upstream-reverts.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-upstream-reverts.patch	15 Dec 2007 00:01:06 -0000	1.3
+++ linux-2.6-upstream-reverts.patch	15 Feb 2008 23:58:52 -0000	1.4
@@ -1,2089 +1,716 @@
-From stable-bounces at linux.kernel.org Wed Oct 10 06:19:13 2007
-From: Takashi Iwai <tiwai at suse.de>
-Date: Wed, 10 Oct 2007 15:18:45 +0200
-Subject: ALSA: emu10k1 - Fix memory corruption
-To: stable at kernel.org
-Message-ID: <s5hsl4jqf9m.wl%tiwai at suse.de>
-Status: O
-Content-Length: 1231
-Lines: 36
-
-From: Takashi Iwai <tiwai at suse.de>
-
-patch 7583cb51a1e276591f57a2fae05489c878f8ef54 from mainline.
-
-[ALSA] emu10k1 - Fix memory corruption
-
-The number of mixer elements for SPDIF control don't match with the
-actual array size (3).  This may result in a memory corruption that
-overwrites the i2c_capture_source field (ALSA bug#3095).
-
-Signed-off-by: Takashi Iwai <tiwai at suse.de>
-Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
-
----
- sound/pci/emu10k1/emumixer.c |    4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/sound/pci/emu10k1/emumixer.c
-+++ b/sound/pci/emu10k1/emumixer.c
-@@ -871,7 +871,7 @@ static struct snd_kcontrol_new snd_emu10
- 	.access =	SNDRV_CTL_ELEM_ACCESS_READ,
- 	.iface =        SNDRV_CTL_ELEM_IFACE_PCM,
- 	.name =         SNDRV_CTL_NAME_IEC958("",PLAYBACK,MASK),
--	.count =	4,
-+	.count =	3,
- 	.info =         snd_emu10k1_spdif_info,
- 	.get =          snd_emu10k1_spdif_get_mask
- };
-@@ -880,7 +880,7 @@ static struct snd_kcontrol_new snd_emu10
- {
- 	.iface =	SNDRV_CTL_ELEM_IFACE_PCM,
- 	.name =         SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT),
--	.count =	4,
-+	.count =	3,
- 	.info =         snd_emu10k1_spdif_info,
- 	.get =          snd_emu10k1_spdif_get,
- 	.put =          snd_emu10k1_spdif_put
-From stable-bounces at linux.kernel.org Wed Oct 10 06:17:37 2007
-From: Takashi Iwai <tiwai at suse.de>
-Date: Wed, 10 Oct 2007 15:17:17 +0200
-Subject: ALSA: Fix build error without CONFIG_HAS_DMA
-To: stable at kernel.org
-Message-ID: <s5htzozqfc2.wl%tiwai at suse.de>
-Status: O
-Content-Length: 2249
-Lines: 76
-
-From: Takashi Iwai <tiwai at suse.de>
-
-patch 8f11551b1798170dcffdd28475075ca4f1c6c990 in mainline
-
-[ALSA] Fix build error without CONFIG_HAS_DMA
-
-The recent change of include/asm-generic/dma-mapping-broken.h breaks
-the build without CONFIG_HAS_DMA.  This patch is an ad hoc fix.
-
-Signed-off-by: Takashi Iwai <tiwai at suse.de>
-Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
-
----
- sound/core/Makefile   |    3 ++-
- sound/core/memalloc.c |    6 ++++++
- 2 files changed, 8 insertions(+), 1 deletion(-)
-
---- a/sound/core/Makefile
-+++ b/sound/core/Makefile
-@@ -14,7 +14,8 @@ endif
- snd-pcm-objs := pcm.o pcm_native.o pcm_lib.o pcm_timer.o pcm_misc.o \
- 		pcm_memory.o
- 
--snd-page-alloc-objs := memalloc.o sgbuf.o
-+snd-page-alloc-y := memalloc.o
-+snd-page-alloc-$(CONFIG_HAS_DMA) += sgbuf.o
- 
- snd-rawmidi-objs  := rawmidi.o
- snd-timer-objs    := timer.o
---- a/sound/core/memalloc.c
-+++ b/sound/core/memalloc.c
-@@ -206,6 +206,7 @@ void snd_free_pages(void *ptr, size_t si
-  *
-  */
- 
-+#ifdef CONFIG_HAS_DMA
- /* allocate the coherent DMA pages */
- static void *snd_malloc_dev_pages(struct device *dev, size_t size, dma_addr_t *dma)
- {
-@@ -239,6 +240,7 @@ static void snd_free_dev_pages(struct de
- 	dec_snd_pages(pg);
- 	dma_free_coherent(dev, PAGE_SIZE << pg, ptr, dma);
- }
-+#endif /* CONFIG_HAS_DMA */
- 
- #ifdef CONFIG_SBUS
- 
-@@ -312,12 +314,14 @@ int snd_dma_alloc_pages(int type, struct
- 		dmab->area = snd_malloc_sbus_pages(device, size, &dmab->addr);
- 		break;
- #endif
-+#ifdef CONFIG_HAS_DMA
- 	case SNDRV_DMA_TYPE_DEV:
- 		dmab->area = snd_malloc_dev_pages(device, size, &dmab->addr);
- 		break;
- 	case SNDRV_DMA_TYPE_DEV_SG:
- 		snd_malloc_sgbuf_pages(device, size, dmab, NULL);
- 		break;
-+#endif
- 	default:
- 		printk(KERN_ERR "snd-malloc: invalid device type %d\n", type);
- 		dmab->area = NULL;
-@@ -383,12 +387,14 @@ void snd_dma_free_pages(struct snd_dma_b
- 		snd_free_sbus_pages(dmab->dev.dev, dmab->bytes, dmab->area, dmab->addr);
- 		break;
- #endif
-+#ifdef CONFIG_HAS_DMA
- 	case SNDRV_DMA_TYPE_DEV:
- 		snd_free_dev_pages(dmab->dev.dev, dmab->bytes, dmab->area, dmab->addr);
- 		break;
- 	case SNDRV_DMA_TYPE_DEV_SG:
- 		snd_free_sgbuf_pages(dmab);
- 		break;
-+#endif
- 	default:
- 		printk(KERN_ERR "snd-malloc: invalid device type %d\n", dmab->dev.type);
- 	}
-From stable-bounces at linux.kernel.org Wed Oct 10 06:15:38 2007
-From: Russ Cox <rsc at swtch.com>
-Date: Wed, 10 Oct 2007 15:15:12 +0200
-Subject: ALSA: fix selector unit bug affecting some USB speakerphones
-To: stable at kernel.org
-Message-ID: <s5hve9fqffj.wl%tiwai at suse.de>
-Status: O
-Content-Length: 1049
-Lines: 31
-
-From: Russ Cox <rsc at swtch.com>
-
-patch 38977e96cb32e658716e11a05ec7f1fc4618e0f3 in mainline.
-
-[ALSA] fix selector unit bug affecting some USB speakerphones
-
-Following the suggestion in this thread:
-https://bugs.launchpad.net/ubuntu/+source/alsa-lib/+bug/26683
-the correct upper bound on desc[0] is 5 + num_ins not 6 + num_ins,
-because the index used later is 5+i, not 6+i.
-This change makes my Vosky Chatterbox speakerphone work.
-Apparently it also helps with the Minivox MV100.
-
-Signed-off-by: Russ Cox <rsc at swtch.com>
-Signed-off-by: Takashi Iwai <tiwai at suse.de>
+From stable-bounces at linux.kernel.org Sat Jan 26 04:57:05 2008
+From: Michael Buesch <mb at bu3sch.de>
+Date: Sat, 26 Jan 2008 13:54:52 +0100
+Subject: b43: Reject new firmware early
+To: stable at kernel.org
+Cc: linux-wireless at vger.kernel.org, Bcm43xx-dev at lists.berlios.de
+Message-ID: <200801261354.52659.mb at bu3sch.de>
+Content-Disposition: inline
+
+From: Michael Buesch <mb at bu3sch.de>
+
+(not in mainline, as it is not applicable.)
+
+We must reject new incompatible firmware early to avoid
+running into strange transmission failures.
+
+The current development tree supports newer firmware revisions.
+These revisions cause strange failures on the stable 2.6.24 kernel.
+Add a check to avoid confusing users a lot.
+
+Signed-off-by: Michael Buesch <mb at bu3sch.de>
 Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
 
 ---
- sound/usb/usbmixer.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/sound/usb/usbmixer.c
-+++ b/sound/usb/usbmixer.c
-@@ -1483,7 +1483,7 @@ static int parse_audio_selector_unit(str
- 	struct snd_kcontrol *kctl;
- 	char **namelist;
[...2367 lines suppressed...]
---- a/drivers/net/wireless/ipw2200.h
-+++ b/drivers/net/wireless/ipw2200.h
-@@ -1288,6 +1288,8 @@ struct ipw_priv {
- 
- 	struct iw_public_data wireless_data;
- 
-+	int user_requested_scan;
-+
- 	struct workqueue_struct *workqueue;
- 
- 	struct delayed_work adhoc_check;
-@@ -1296,6 +1298,7 @@ struct ipw_priv {
- 	struct work_struct system_config;
- 	struct work_struct rx_replenish;
- 	struct delayed_work request_scan;
-+	struct delayed_work scan_event;
-   	struct work_struct request_passive_scan;
- 	struct work_struct adapter_restart;
- 	struct delayed_work rf_kill;
-From 62f0f61e6673e67151a7c8c0f9a09c7ea43fe2b5 Mon Sep 17 00:00:00 2001
-From: Thomas Gleixner <tglx at linutronix.de>
-Date: Fri, 7 Dec 2007 19:16:17 +0100
-Subject: hrtimers: avoid overflow for large relative timeouts (CVE-2007-5966)
-
-From: Thomas Gleixner <tglx at linutronix.de>
-
-patch 62f0f61e6673e67151a7c8c0f9a09c7ea43fe2b5 in mainline
-
-Relative hrtimers with a large timeout value might end up as negative
-timer values, when the current time is added in hrtimer_start().
-
-This in turn is causing the clockevents_set_next() function to set an
-huge timeout and sleep for quite a long time when we have a clock
-source which is capable of long sleeps like HPET. With PIT this almost
-goes unnoticed as the maximum delta is ~27ms. The non-hrt/nohz code
-sorts this out in the next timer interrupt, so we never noticed that
-problem which has been there since the first day of hrtimers.
-
-This bug became more apparent in 2.6.24 which activates HPET on more
-hardware.
-
-Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
-Signed-off-by: Ingo Molnar <mingo at elte.hu>
-Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
-
----
- kernel/hrtimer.c |    8 ++++++++
- 1 file changed, 8 insertions(+)
-
---- a/kernel/hrtimer.c
-+++ b/kernel/hrtimer.c
-@@ -826,6 +826,14 @@ hrtimer_start(struct hrtimer *timer, kti
- #ifdef CONFIG_TIME_LOW_RES
- 		tim = ktime_add(tim, base->resolution);
- #endif
-+		/*
-+		 * Careful here: User space might have asked for a
-+		 * very long sleep, so the add above might result in a
-+		 * negative number, which enqueues the timer in front
-+		 * of the queue.
-+		 */
-+		if (tim.tv64 < 0)
-+			tim.tv64 = KTIME_MAX;
- 	}
- 	timer->expires = tim;
+-void b43_generate_txhdr(struct b43_wldev *dev,
++int b43_generate_txhdr(struct b43_wldev *dev,
+ 			u8 * txhdr,
+ 			const unsigned char *fragment_data,
+ 			unsigned int fragment_len,
+ 			const struct ieee80211_tx_control *txctl, u16 cookie)
+ {
+-	generate_txhdr_fw4(dev, (struct b43_txhdr_fw4 *)txhdr,
+-			   fragment_data, fragment_len, txctl, cookie);
++	return generate_txhdr_fw4(dev, (struct b43_txhdr_fw4 *)txhdr,
++				  fragment_data, fragment_len, txctl, cookie);
+ }
  
-From stable-bounces at linux.kernel.org Tue Nov 20 10:55:25 2007
-From: Marcelo Tosatti <marcelo at kvack.org>
-Date: Tue, 20 Nov 2007 13:54:52 -0500
-Subject: libertas: properly account for queue commands
-To: stable at kernel.org
-Cc: Marcelo Tosatti <marcelo at kvack.org>, Marcelo Tosatti <mtosatti at redhat.com>, "John W. Linville" <linville at tuxdriver.com>
-Message-ID: <1195584892-2864-1-git-send-email-linville at tuxdriver.com>
-
+ static s8 b43_rssi_postprocess(struct b43_wldev *dev,
+--- a/drivers/net/wireless/b43/xmit.h
++++ b/drivers/net/wireless/b43/xmit.h
+@@ -82,7 +82,7 @@ struct b43_txhdr_fw4 {
+ #define  B43_TX4_PHY_ANT1		0x0100	/* Use antenna 1 */
+ #define  B43_TX4_PHY_ANTLAST	0x0300	/* Use last used antenna */
+ 
+-void b43_generate_txhdr(struct b43_wldev *dev,
++int b43_generate_txhdr(struct b43_wldev *dev,
+ 			u8 * txhdr,
+ 			const unsigned char *fragment_data,
+ 			unsigned int fragment_len,
+From stable-bounces at linux.kernel.org Fri Jan 25 03:23:28 2008
+From: Michael Buesch <mb at bu3sch.de>
+Date: Fri, 25 Jan 2008 12:11:45 +0100
+Subject: b43: Fix suspend/resume
+To: stable at kernel.org
+Cc: linux-wireless at vger.kernel.org, bcm43xx-dev at lists.berlios.de
+Message-ID: <200801251211.45980.mb at bu3sch.de>
+Content-Disposition: inline
+
+From: Michael Buesch <mb at bu3sch.de>
+
+patch 7be1bb6b798d506693d2d8668e801951996b5a4a in mainline.
+
+This patch makes suspend/resume work with the b43 driver.
+We must not overwrite the MAC addresses in the init function, as this
+would also overwrite the MAC on resume. With an all-zero MAC the device
+firmware is not able to ACK any received packets anymore.
+Fix this by moving the initializion stuff that must be done on init but
+not on resume to the start function.
+Also zero out filter_flags to make sure we don't have some flags
+from a previous instance for a tiny timeframe until mac80211 reconfigures
+them.
 
-From: Marcelo Tosatti <marcelo at kvack.org>
-
-patch 29f5f2a19b055feabfcc6f92e1d40ec092c373ea in mainline.
-
-Properly account for queue commands, this fixes a problem reported
-by Holger Schurig when using the debugfs interface.
-
-Signed-off-by: Marcelo Tosatti <mtosatti at redhat.com>
+Signed-off-by: Michael Buesch <mb at bu3sch.de>
 Signed-off-by: John W. Linville <linville at tuxdriver.com>
+Signed-off-by: David S. Miller <davem at davemloft.net>
 Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
 
 ---
- drivers/net/wireless/libertas/cmd.c |   10 +++++++---
- 1 file changed, 7 insertions(+), 3 deletions(-)
+ drivers/net/wireless/b43/main.c |    9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
 
---- a/drivers/net/wireless/libertas/cmd.c
-+++ b/drivers/net/wireless/libertas/cmd.c
-@@ -881,6 +881,10 @@ static int wlan_cmd_mesh_access(wlan_pri
- 	return 0;
- }
- 
-+/*
-+ * Note: NEVER use libertas_queue_cmd() with addtail==0 other than for
-+ * the command timer, because it does not account for queued commands.
-+ */
- void libertas_queue_cmd(wlan_adapter * adapter, struct cmd_ctrl_node *cmdnode, u8 addtail)
- {
- 	unsigned long flags;
-@@ -910,10 +914,11 @@ void libertas_queue_cmd(wlan_adapter * a
- 
- 	spin_lock_irqsave(&adapter->driver_lock, flags);
- 
--	if (addtail)
-+	if (addtail) {
- 		list_add_tail((struct list_head *)cmdnode,
- 			      &adapter->cmdpendingq);
--	else
-+		adapter->nr_cmd_pending++;
-+	} else
- 		list_add((struct list_head *)cmdnode, &adapter->cmdpendingq);
- 
- 	spin_unlock_irqrestore(&adapter->driver_lock, flags);
-@@ -1400,7 +1405,6 @@ int libertas_prepare_and_send_command(wl
- 	cmdnode->cmdwaitqwoken = 0;
- 
- 	libertas_queue_cmd(adapter, cmdnode, 1);
--	adapter->nr_cmd_pending++;
- 	wake_up_interruptible(&priv->mainthread.waitq);
- 
- 	if (wait_option & cmd_option_waitforrsp) {
+--- a/drivers/net/wireless/b43/main.c
++++ b/drivers/net/wireless/b43/main.c
+@@ -3395,8 +3395,6 @@ static int b43_wireless_core_init(struct
+ 	b43_bluetooth_coext_enable(dev);
+ 
+ 	ssb_bus_powerup(bus, 1);	/* Enable dynamic PCTL */
+-	memset(wl->bssid, 0, ETH_ALEN);
+-	memset(wl->mac_addr, 0, ETH_ALEN);
+ 	b43_upload_card_macaddress(dev);
+ 	b43_security_init(dev);
+ 	b43_rng_init(wl);
+@@ -3493,6 +3491,13 @@ static int b43_start(struct ieee80211_hw
+ 	int did_init = 0;
+ 	int err = 0;
+ 
++	/* Kill all old instance specific information to make sure
++	 * the card won't use it in the short timeframe between start
++	 * and mac80211 reconfiguring it. */
++	memset(wl->bssid, 0, ETH_ALEN);
++	memset(wl->mac_addr, 0, ETH_ALEN);
++	wl->filter_flags = 0;
++
+ 	/* First register RFkill.
+ 	 * LEDs that are registered later depend on it. */
+ 	b43_rfkill_init(dev);

linux-2.6-utrace-core.patch:

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

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

Index: linux-2.6-utrace-ptrace-compat-avr32.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-utrace-ptrace-compat-avr32.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-utrace-ptrace-compat-avr32.patch	21 Aug 2007 19:42:55 -0000	1.3
+++ linux-2.6-utrace-ptrace-compat-avr32.patch	15 Feb 2008 23:58:52 -0000	1.4
@@ -12,12 +12,12 @@
 
 ---
 
- arch/avr32/kernel/ptrace.c |   98 ++++++++------------------------------------
- 1 files changed, 18 insertions(+), 80 deletions(-)
+ arch/avr32/kernel/ptrace.c |   91 +++++++++-----------------------------------
+ 1 files changed, 19 insertions(+), 72 deletions(-)
 
 --- linux-2.6/arch/avr32/kernel/ptrace.c
 +++ linux-2.6/arch/avr32/kernel/ptrace.c
-@@ -79,106 +79,44 @@ const struct utrace_regset_view *utrace_
+@@ -112,98 +112,45 @@ const struct utrace_regset_view *utrace_
  }
  #endif /* CONFIG_UTRACE */
  
@@ -35,13 +35,12 @@
 +		unsigned long addr, unsigned long data, long *val)
  {
 -	int ret;
--
- 	pr_debug("arch_ptrace(%ld, %d, %#lx, %#lx)\n",
--		 request, child->pid, addr, data);
++	pr_debug("arch_ptrace(%ld, %d, %#lx, %#lx)\n",
 +		 *request, child->pid, addr, data);
  
  	pr_debug("ptrace: Enabling monitor mode...\n");
- 	__mtdr(DBGREG_DC, __mfdr(DBGREG_DC) | DC_MM | DC_DBE);
+ 	ocd_write(DC, ocd_read(DC) | (1 << OCD_DC_MM_BIT)
+ 			| (1 << OCD_DC_DBE_BIT));
  
 -	switch (request) {
 -	/* Read the word at location addr in the child process */
@@ -109,11 +108,6 @@
 -		child->exit_code = data;
 -		wake_up_process(child);
 -		ret = 0;
--		break;
--
--	/* Detach a process that was attached */
--	case PTRACE_DETACH:
--		ret = ptrace_detach(child, data);
 +		return ptrace_pokeusr(child, engine, avr32_uarea, addr, data);
  		break;
  
@@ -132,7 +126,6 @@
  		break;
  	}
  
--	pr_debug("sys_ptrace returning %d (DC = 0x%08lx)\n", ret, __mfdr(DBGREG_DC));
 -	return ret;
 +	return -ENOSYS;
  }

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

Index: linux-2.6-utrace-ptrace-compat-s390.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-utrace-ptrace-compat-s390.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6-utrace-ptrace-compat-s390.patch	21 Aug 2007 19:42:55 -0000	1.2
+++ linux-2.6-utrace-ptrace-compat-s390.patch	15 Feb 2008 23:58:52 -0000	1.3
@@ -7,13 +7,13 @@
 
 ---
 
- arch/s390/kernel/ptrace.c         |  151 +++++++++++++++++++++++++++++++++++++
+ arch/s390/kernel/ptrace.c         |  155 +++++++++++++++++++++++++++++++++++++
  arch/s390/kernel/compat_wrapper.S |    2 
- 2 files changed, 152 insertions(+), 1 deletions(-)
+ 2 files changed, 156 insertions(+), 1 deletions(-)
 
 --- linux-2.6/arch/s390/kernel/ptrace.c
 +++ linux-2.6/arch/s390/kernel/ptrace.c
-@@ -580,6 +580,157 @@ const struct utrace_regset_view *utrace_
+@@ -595,6 +595,161 @@ const struct utrace_regset_view *utrace_
  }
  
  
@@ -122,11 +122,15 @@
 +
 +#ifdef CONFIG_COMPAT
 +static const struct ptrace_layout_segment s390_compat_uarea[] = {
-+	{PT_PSWMASK / 2, PT_FPC / 2, 0, 0},
-+	{PT_FPC / 2, PT_CR_9 / 2, 1, 0},
-+	{PT_CR_9 / 2, PT_IEEE_IP / 2, 2, 0},
-+	{PT_IEEE_IP / 2, sizeof(struct user32), -1, -1},
-+	{0, 0, -1, 0}
++	{ offsetof(struct user_regs_struct32, psw),
++	  offsetof(struct user_regs_struct32, fp_regs), 0, 0 },
++	{ offsetof(struct user_regs_struct32, fp_regs),
++	  offsetof(struct user_regs_struct32, per_info), 1, 0 },
++	{ offsetof(struct user_regs_struct32, per_info),
++	  offsetof(struct user_regs_struct32, ieee_instruction_pointer), 2, 0 },
++	{ offsetof(struct user_regs_struct32, ieee_instruction_pointer),
++	  sizeof(struct user32), -1, -1 },
++	{ 0, 0, -1, 0 }
 +};
 +
 +int arch_compat_ptrace(compat_long_t *request,

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

Index: linux-2.6-utrace-ptrace-compat.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-utrace-ptrace-compat.patch,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- linux-2.6-utrace-ptrace-compat.patch	14 Dec 2007 23:27:35 -0000	1.10
+++ linux-2.6-utrace-ptrace-compat.patch	15 Feb 2008 23:58:52 -0000	1.11
@@ -12,34 +12,31 @@
 
 ---
 
- arch/i386/kernel/ptrace.c       |   40 
- arch/powerpc/kernel/Makefile    |    2 
- arch/powerpc/kernel/ptrace.c    |  455 +++++---
- arch/powerpc/kernel/ptrace32.c  |  408 -------
+ fs/proc/base.c                  |   40 +
+ arch/powerpc/kernel/ptrace.c    |  454 +++++----
  arch/powerpc/kernel/signal_32.c |   52 +
+ arch/powerpc/kernel/Makefile    |    2 
+ arch/powerpc/kernel/ptrace32.c  |  416 --------
  arch/powerpc/lib/sstep.c        |    3 
- arch/x86_64/ia32/ia32entry.S    |    2 
- arch/x86_64/ia32/ptrace32.c     |   57 +
- arch/x86_64/kernel/ptrace.c     |   46 
- fs/proc/base.c                  |   40 
- include/asm-x86_64/ptrace-abi.h |    3 
- include/asm-x86_64/tracehook.h  |    1 
- include/linux/ptrace.h          |  221 +++-
- include/linux/sched.h           |    4 
- init/Kconfig                    |   15 
- kernel/Makefile                 |    3 
- kernel/exit.c                   |   13 
+ arch/x86/ia32/ptrace32.c        |   57 +
+ arch/x86/ia32/ia32entry.S       |    2 
+ arch/x86/kernel/ptrace_64.c     |   46 +
+ arch/x86/kernel/ptrace_32.c     |   40 +
  kernel/fork.c                   |    2 
- kernel/ptrace.c                 | 2058 +++++++++++++++++++++++++++++++++++++---
+ kernel/exit.c                   |   13 
+ kernel/ptrace.c                 | 2061 +++++++++++++++++++++++++++++++++++++--
  kernel/sys_ni.c                 |    4 
- 20 files changed, 2650 insertions(+), 779 deletions(-)
+ kernel/Makefile                 |    3 
+ include/linux/sched.h           |    4 
+ include/linux/ptrace.h          |  222 +++-
+ include/asm-x86/ptrace-abi.h    |    6 
+ init/Kconfig                    |   15 
+ 19 files changed, 2650 insertions(+), 792 deletions(-)
  delete arch/powerpc/kernel/ptrace32.c
 
-Index: b/fs/proc/base.c
-===================================================================
---- a/fs/proc/base.c
-+++ b/fs/proc/base.c
-@@ -151,6 +151,46 @@ static int get_nr_threads(struct task_st
+--- linux-2.6/fs/proc/base.c
++++ linux-2.6/fs/proc/base.c
+@@ -154,6 +154,46 @@ static int get_nr_threads(struct task_st
  	return count;
  }
  
@@ -86,204 +83,9 @@
  static int proc_cwd_link(struct inode *inode, struct dentry **dentry, struct vfsmount **mnt)
  {
  	struct task_struct *task = get_proc_task(inode);
-Index: b/arch/i386/kernel/ptrace.c
-===================================================================
---- a/arch/i386/kernel/ptrace.c
-+++ b/arch/i386/kernel/ptrace.c
-@@ -747,6 +747,46 @@ const struct utrace_regset_view *utrace_
- 	return &utrace_i386_native;
- }
- 
-+#ifdef CONFIG_PTRACE
-+static const struct ptrace_layout_segment i386_uarea[] = {
-+	{0, FRAME_SIZE*4, 0, 0},
-+	{FRAME_SIZE*4, offsetof(struct user, u_debugreg[0]), -1, 0},
-+	{offsetof(struct user, u_debugreg[0]),
-+	 offsetof(struct user, u_debugreg[8]), 4, 0},
-+	{0, 0, -1, 0}
-+};
-+
-+int arch_ptrace(long *req, struct task_struct *child,
-+		struct utrace_attached_engine *engine,
-+		unsigned long addr, unsigned long data, long *val)
-+{
-+	switch (*req) {
-+	case PTRACE_PEEKUSR:
-+		return ptrace_peekusr(child, engine, i386_uarea, addr, data);
-+	case PTRACE_POKEUSR:
-+		return ptrace_pokeusr(child, engine, i386_uarea, addr, data);
-+	case PTRACE_GETREGS:
-+		return ptrace_whole_regset(child, engine, data, 0, 0);
-+	case PTRACE_SETREGS:
-+		return ptrace_whole_regset(child, engine, data, 0, 1);
-+	case PTRACE_GETFPREGS:
-+		return ptrace_whole_regset(child, engine, data, 1, 0);
-+	case PTRACE_SETFPREGS:
-+		return ptrace_whole_regset(child, engine, data, 1, 1);
-+	case PTRACE_GETFPXREGS:
-+		return ptrace_whole_regset(child, engine, data, 2, 0);
-+	case PTRACE_SETFPXREGS:
-+		return ptrace_whole_regset(child, engine, data, 2, 1);
-+	case PTRACE_GET_THREAD_AREA:
-+	case PTRACE_SET_THREAD_AREA:
-+		return ptrace_onereg_access(child, engine,
-+					    utrace_native_view(current), 3,
-+					    addr, (void __user *)data, NULL,
-+					    *req == PTRACE_SET_THREAD_AREA);
-+	}
-+	return -ENOSYS;
-+}
-+#endif
- 
- void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, int error_code)
- {
-Index: b/arch/x86_64/ia32/ptrace32.c
-===================================================================
---- a/arch/x86_64/ia32/ptrace32.c
-+++ b/arch/x86_64/ia32/ptrace32.c
-@@ -167,11 +167,6 @@ static int getreg32(struct task_struct *
- 
- #undef R32
- 
--asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data)
--{
--	return -ENOSYS;
--}
--
- static int
- ia32_genregs_get(struct task_struct *target,
- 		 const struct utrace_regset *regset,
-@@ -604,3 +599,55 @@ const struct utrace_regset_view utrace_i
- 	.name = "i386", .e_machine = EM_386,
- 	.regsets = ia32_regsets, .n = ARRAY_SIZE(ia32_regsets)
- };
-+
-+
-+#ifdef CONFIG_PTRACE
-+/*
-+ * This matches the arch/i386/kernel/ptrace.c definitions.
-+ */
-+
-+static const struct ptrace_layout_segment ia32_uarea[] = {
-+	{0, sizeof(struct user_regs_struct32), 0, 0},
-+	{sizeof(struct user_regs_struct32),
-+	 offsetof(struct user32, u_debugreg[0]), -1, 0},
-+	{offsetof(struct user32, u_debugreg[0]),
-+	 offsetof(struct user32, u_debugreg[8]), 4, 0},
-+	{0, 0, -1, 0}
-+};
-+
-+int arch_compat_ptrace(compat_long_t *req, struct task_struct *child,
-+		       struct utrace_attached_engine *engine,
-+		       compat_ulong_t addr, compat_ulong_t data,
-+		       compat_long_t *val)
-+{
-+	switch (*req) {
-+	case PTRACE_PEEKUSR:
-+		return ptrace_compat_peekusr(child, engine, ia32_uarea,
-+					     addr, data);
-+	case PTRACE_POKEUSR:
-+		return ptrace_compat_pokeusr(child, engine, ia32_uarea,
-+					     addr, data);
-+	case PTRACE_GETREGS:
-+		return ptrace_whole_regset(child, engine, data, 0, 0);
-+	case PTRACE_SETREGS:
-+		return ptrace_whole_regset(child, engine, data, 0, 1);
-+	case PTRACE_GETFPREGS:
-+		return ptrace_whole_regset(child, engine, data, 1, 0);
-+	case PTRACE_SETFPREGS:
-+		return ptrace_whole_regset(child, engine, data, 1, 1);
-+	case PTRACE_GETFPXREGS:
-+		return ptrace_whole_regset(child, engine, data, 2, 0);
-+	case PTRACE_SETFPXREGS:
-+		return ptrace_whole_regset(child, engine, data, 2, 1);
-+	case PTRACE_GET_THREAD_AREA:
-+	case PTRACE_SET_THREAD_AREA:
-+		return ptrace_onereg_access(child, engine,
-+					    &utrace_ia32_view, 3,
-+					    addr,
-+					    (void __user *)(unsigned long)data,
-+					    NULL,
-+					    *req == PTRACE_SET_THREAD_AREA);
-+	}
-+	return -ENOSYS;
-+}
-+#endif	/* CONFIG_PTRACE */
-Index: b/arch/x86_64/ia32/ia32entry.S
-===================================================================
---- a/arch/x86_64/ia32/ia32entry.S
-+++ b/arch/x86_64/ia32/ia32entry.S
-@@ -434,7 +434,7 @@ ia32_sys_call_table:
- 	.quad sys_setuid16
- 	.quad sys_getuid16
- 	.quad compat_sys_stime	/* stime */		/* 25 */
--	.quad sys32_ptrace	/* ptrace */
-+	.quad compat_sys_ptrace	/* ptrace */
- 	.quad sys_alarm
- 	.quad sys_fstat	/* (old)fstat */
- 	.quad sys_pause
-Index: b/arch/x86_64/kernel/ptrace.c
-===================================================================
---- a/arch/x86_64/kernel/ptrace.c
-+++ b/arch/x86_64/kernel/ptrace.c
-@@ -722,6 +722,52 @@ const struct utrace_regset_view *utrace_
- }
- 
- 
-+#ifdef CONFIG_PTRACE
-+static const struct ptrace_layout_segment x86_64_uarea[] = {
-+	{0, sizeof(struct user_regs_struct), 0, 0},
-+	{sizeof(struct user_regs_struct),
-+	 offsetof(struct user, u_debugreg[0]), -1, 0},
-+	{offsetof(struct user, u_debugreg[0]),
-+	 offsetof(struct user, u_debugreg[8]), 3, 0},
-+	{0, 0, -1, 0}
-+};
-+
-+int arch_ptrace(long *req, struct task_struct *child,
-+		struct utrace_attached_engine *engine,
-+		unsigned long addr, unsigned long data, long *val)
-+{
-+	switch (*req) {
-+	case PTRACE_PEEKUSR:
-+		return ptrace_peekusr(child, engine, x86_64_uarea, addr, data);
-+	case PTRACE_POKEUSR:
-+		return ptrace_pokeusr(child, engine, x86_64_uarea, addr, data);
-+	case PTRACE_GETREGS:
-+		return ptrace_whole_regset(child, engine, data, 0, 0);
-+	case PTRACE_SETREGS:
-+		return ptrace_whole_regset(child, engine, data, 0, 1);
-+	case PTRACE_GETFPREGS:
-+		return ptrace_whole_regset(child, engine, data, 1, 0);
-+	case PTRACE_SETFPREGS:
-+		return ptrace_whole_regset(child, engine, data, 1, 1);
-+#ifdef CONFIG_IA32_EMULATION
-+	case PTRACE_GET_THREAD_AREA:
-+	case PTRACE_SET_THREAD_AREA:
-+		return ptrace_onereg_access(child, engine,
-+					    &utrace_ia32_view, 3,
-+					    addr, (void __user *)data, NULL,
-+					    *req == PTRACE_SET_THREAD_AREA);
-+#endif
-+		/* normal 64bit interface to access TLS data.
-+		   Works just like arch_prctl, except that the arguments
-+		   are reversed. */
-+	case PTRACE_ARCH_PRCTL:
-+		return do_arch_prctl(child, data, addr);
-+	}
-+	return -ENOSYS;
-+}
-+#endif	/* CONFIG_PTRACE */
-+
-+
- asmlinkage void syscall_trace_enter(struct pt_regs *regs)
- {
- 	/* do the secure computing check first */
-Index: b/arch/powerpc/kernel/ptrace.c
-===================================================================
---- a/arch/powerpc/kernel/ptrace.c
-+++ b/arch/powerpc/kernel/ptrace.c
-@@ -590,249 +590,320 @@ const struct utrace_regset_view *utrace_
+--- linux-2.6/arch/powerpc/kernel/ptrace.c
++++ linux-2.6/arch/powerpc/kernel/ptrace.c
+@@ -590,248 +590,320 @@ const struct utrace_regset_view *utrace_
  }
  
  
@@ -306,6 +108,7 @@
 -		unsigned long *reg = &((unsigned long *)child->thread.regs)[0];
 -		unsigned long __user *tmp = (unsigned long __user *)addr;
 -
+-		CHECK_FULL_REGS(child->thread.regs);
 -		for (i = 0; i < 32; i++) {
 -			ret = put_user(*reg, tmp);
 -			if (ret)
@@ -338,6 +141,7 @@
 -		unsigned long *reg = &((unsigned long *)child->thread.regs)[0];
 -		unsigned long __user *tmp = (unsigned long __user *)addr;
 -
+-		CHECK_FULL_REGS(child->thread.regs);
 -		for (i = 0; i < 32; i++) {
 -			ret = get_user(*reg, tmp);
 -			if (ret)
@@ -606,10 +410,6 @@
 -	case PTRACE_SET_DEBUGREG:
 -/*		ret = ptrace_set_debugreg(child, addr, data);*/
 -		break;
--
--	case PTRACE_DETACH:
--		ret = ptrace_detach(child, data);
--		break;
 +	/*
 +	 * This is like PTRACE_PEEKUSR on a 64-bit process,
 +	 * but here we access only 4 bytes at a time.
@@ -640,6 +440,7 @@
 +			setno = 1;
 +			addr -= PT_FPR0*8;
  		}
+-		CHECK_FULL_REGS(child->thread.regs);
 -		ret = 0;
 -		for (ui = 0; ui < PT_REGS_COUNT; ui ++) {
 -/*			ret |= __put_user(ptrace_get_reg(child, ui),
@@ -682,6 +483,7 @@
 +		if ((addr & 3) || addr > PT_FPSCR*8)
  			break;
 -		}
+-		CHECK_FULL_REGS(child->thread.regs);
 -		ret = 0;
 -		for (ui = 0; ui < PT_REGS_COUNT; ui ++) {
 -			ret = __get_user(tmp, (unsigned long __user *) data);
@@ -754,8 +556,7 @@
 -#ifdef CONFIG_SPE
 -	case PTRACE_GETEVRREGS:
 -		/* Get the child spe register state. */
--		if (child->thread.regs->msr & MSR_SPE)
--			giveup_spe(child);
+-		flush_spe_to_thread(child);
 -/*		ret = get_evrregs((unsigned long __user *)data, child);*/
 -		break;
 -
@@ -763,9 +564,9 @@
 -		/* Set the child spe register state. */
 -		/* this is to clear the MSR_SPE bit to force a reload
 -		 * of register state from memory */
--		if (child->thread.regs->msr & MSR_SPE)
--			giveup_spe(child);
+-		flush_spe_to_thread(child);
 -/*		ret = set_evrregs(child, (unsigned long __user *)data);*/
+-		ret = set_evrregs(child, (unsigned long __user *)data);
 -		break;
 -#endif
 +	case PTRACE_GETREGS64:
@@ -796,10 +597,8 @@
  
  void do_syscall_trace_enter(struct pt_regs *regs)
  {
-Index: b/arch/powerpc/kernel/signal_32.c
-===================================================================
---- a/arch/powerpc/kernel/signal_32.c
-+++ b/arch/powerpc/kernel/signal_32.c
+--- linux-2.6/arch/powerpc/kernel/signal_32.c
++++ linux-2.6/arch/powerpc/kernel/signal_32.c
 @@ -622,6 +622,58 @@ int copy_siginfo_to_user32(struct compat
  
  #define copy_siginfo_to_user	copy_siginfo_to_user32
@@ -859,10 +658,8 @@
  /*
   * Note: it is necessary to treat pid and sig as unsigned ints, with the
   * corresponding cast to a signed int to insure that the proper conversion
-Index: b/arch/powerpc/kernel/Makefile
-===================================================================
---- a/arch/powerpc/kernel/Makefile
-+++ b/arch/powerpc/kernel/Makefile
+--- linux-2.6/arch/powerpc/kernel/Makefile
++++ linux-2.6/arch/powerpc/kernel/Makefile
 @@ -18,7 +18,7 @@ obj-y				:= semaphore.o cputable.o ptrac
  				   signal.o
  obj-y				+= vdso32/
@@ -872,11 +669,9 @@
  				   paca.o cpu_setup_ppc970.o \
  				   cpu_setup_pa6t.o \
  				   firmware.o sysfs.o nvram_64.o
-Index: b/arch/powerpc/kernel/ptrace32.c
-===================================================================
---- a/arch/powerpc/kernel/ptrace32.c
-+++ /dev/null
-@@ -1,408 +0,0 @@
+--- linux-2.6/arch/powerpc/kernel/ptrace32.c
++++ linux-2.6/arch/powerpc/kernel/ptrace32.c
+@@ -1,416 +0,0 @@
 -/*
 - * ptrace for 32-bit processes running on a 64-bit kernel.
 - *
@@ -930,6 +725,7 @@
 -		unsigned long *reg = &((unsigned long *)child->thread.regs)[0];
 -		unsigned int __user *tmp = (unsigned int __user *)addr;
 -
+-		CHECK_FULL_REGS(child->thread.regs);
 -		for (i = 0; i < 32; i++) {
 -			ret = put_user(*reg, tmp);
 -			if (ret)
@@ -945,6 +741,7 @@
 -		unsigned long *reg = &((unsigned long *)child->thread.regs)[0];
 -		unsigned int __user *tmp = (unsigned int __user *)addr;
 -
+-		CHECK_FULL_REGS(child->thread.regs);
 -		for (i = 0; i < 32; i++) {
 -			ret = get_user(*reg, tmp);
 -			if (ret)
@@ -1044,6 +841,7 @@
 -		if ((addr & 3) || (index > PT_FPSCR32))
 -			break;
 -
+-		CHECK_FULL_REGS(child->thread.regs);
 -		if (index < PT_FPR0) {
 -			tmp = 0;/*ptrace_get_reg(child, index);*/
 -		} else {
@@ -1090,6 +888,7 @@
 -		if ((addr & 3) || numReg > PT_FPSCR)
 -			break;
 -
+-		CHECK_FULL_REGS(child->thread.regs);
 -		if (numReg >= PT_FPR0) {
 -			flush_fp_to_thread(child);
 -			tmp = ((unsigned long int *)child->thread.fpr)[numReg - PT_FPR0];
@@ -1150,6 +949,7 @@
 -		if ((addr & 3) || (index > PT_FPSCR32))
 -			break;
 -
+-		CHECK_FULL_REGS(child->thread.regs);
 -		if (index < PT_FPR0) {
 -/*			ret = ptrace_put_reg(child, index, data);*/
 -		} else {
@@ -1187,6 +987,7 @@
 -		 */
 -		if ((addr & 3) || (numReg > PT_FPSCR))
 -			break;
+-		CHECK_FULL_REGS(child->thread.regs);
 -		if (numReg < PT_FPR0) {
 -			unsigned long freg = 0;/*ptrace_get_reg(child, numReg);*/
 -			if (index % 2)
@@ -1224,6 +1025,7 @@
 -			ret = -EIO;
 -			break;
 -		}
+-		CHECK_FULL_REGS(child->thread.regs);
 -		ret = 0;
 -		for (ui = 0; ui < PT_REGS_COUNT; ui ++) {
 -/*			ret |= __put_user(ptrace_get_reg(child, ui),
@@ -1241,6 +1043,7 @@
 -			ret = -EIO;
 -			break;
 -		}
+-		CHECK_FULL_REGS(child->thread.regs);
 -		ret = 0;
 -		for (ui = 0; ui < PT_REGS_COUNT; ui ++) {
 -			ret = __get_user(tmp, (unsigned int __user *) data);
@@ -1285,10 +1088,8 @@
 -	unlock_kernel();
 -	return ret;
 -}
-Index: b/arch/powerpc/lib/sstep.c
-===================================================================
---- a/arch/powerpc/lib/sstep.c
-+++ b/arch/powerpc/lib/sstep.c
+--- linux-2.6/arch/powerpc/lib/sstep.c
++++ linux-2.6/arch/powerpc/lib/sstep.c
 @@ -13,6 +13,9 @@
  #include <linux/ptrace.h>
  #include <asm/sstep.h>
@@ -1297,21 +1098,204 @@
 +#include <asm/paca.h>
 +#endif
  
- extern char system_call_common[];
+ extern char system_call_common[];
+ 
+--- linux-2.6/arch/x86/ia32/ptrace32.c
++++ linux-2.6/arch/x86/ia32/ptrace32.c
+@@ -167,11 +167,6 @@ static int getreg32(struct task_struct *
+ 
+ #undef R32
+ 
+-asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data)
+-{
+-	return -ENOSYS;
+-}
+-
+ static int
+ ia32_genregs_get(struct task_struct *target,
+ 		 const struct utrace_regset *regset,
+@@ -603,3 +598,55 @@ const struct utrace_regset_view utrace_i
+ 	.name = "i386", .e_machine = EM_386,
+ 	.regsets = ia32_regsets, .n = ARRAY_SIZE(ia32_regsets)
+ };
++
++
++#ifdef CONFIG_PTRACE
++/*
++ * This matches the arch/i386/kernel/ptrace.c definitions.
++ */
++
++static const struct ptrace_layout_segment ia32_uarea[] = {
++	{0, sizeof(struct user_regs_struct32), 0, 0},
++	{sizeof(struct user_regs_struct32),
++	 offsetof(struct user32, u_debugreg[0]), -1, 0},
++	{offsetof(struct user32, u_debugreg[0]),
++	 offsetof(struct user32, u_debugreg[8]), 4, 0},
++	{0, 0, -1, 0}
++};
++
++int arch_compat_ptrace(compat_long_t *req, struct task_struct *child,
++		       struct utrace_attached_engine *engine,
++		       compat_ulong_t addr, compat_ulong_t data,
++		       compat_long_t *val)
++{
++	switch (*req) {
++	case PTRACE_PEEKUSR:
++		return ptrace_compat_peekusr(child, engine, ia32_uarea,
++					     addr, data);
++	case PTRACE_POKEUSR:
++		return ptrace_compat_pokeusr(child, engine, ia32_uarea,
++					     addr, data);
++	case PTRACE_GETREGS:
++		return ptrace_whole_regset(child, engine, data, 0, 0);
++	case PTRACE_SETREGS:
++		return ptrace_whole_regset(child, engine, data, 0, 1);
++	case PTRACE_GETFPREGS:
++		return ptrace_whole_regset(child, engine, data, 1, 0);
++	case PTRACE_SETFPREGS:
++		return ptrace_whole_regset(child, engine, data, 1, 1);
++	case PTRACE_GETFPXREGS:
++		return ptrace_whole_regset(child, engine, data, 2, 0);
++	case PTRACE_SETFPXREGS:
++		return ptrace_whole_regset(child, engine, data, 2, 1);
++	case PTRACE_GET_THREAD_AREA:
++	case PTRACE_SET_THREAD_AREA:
++		return ptrace_onereg_access(child, engine,
++					    &utrace_ia32_view, 3,
++					    addr,
++					    (void __user *)(unsigned long)data,
++					    NULL,
++					    *req == PTRACE_SET_THREAD_AREA);
++	}
++	return -ENOSYS;
++}
++#endif	/* CONFIG_PTRACE */
+--- linux-2.6/arch/x86/ia32/ia32entry.S
++++ linux-2.6/arch/x86/ia32/ia32entry.S
+@@ -427,7 +427,7 @@ ia32_sys_call_table:
+ 	.quad sys_setuid16
+ 	.quad sys_getuid16
+ 	.quad compat_sys_stime	/* stime */		/* 25 */
+-	.quad sys32_ptrace	/* ptrace */
++	.quad compat_sys_ptrace	/* ptrace */
+ 	.quad sys_alarm
+ 	.quad sys_fstat	/* (old)fstat */
+ 	.quad sys_pause
+--- linux-2.6/arch/x86/kernel/ptrace_64.c
++++ linux-2.6/arch/x86/kernel/ptrace_64.c
+@@ -720,6 +720,52 @@ const struct utrace_regset_view *utrace_
+ }
+ 
+ 
++#ifdef CONFIG_PTRACE
++static const struct ptrace_layout_segment x86_64_uarea[] = {
++	{0, sizeof(struct user_regs_struct), 0, 0},
++	{sizeof(struct user_regs_struct),
++	 offsetof(struct user, u_debugreg[0]), -1, 0},
++	{offsetof(struct user, u_debugreg[0]),
++	 offsetof(struct user, u_debugreg[8]), 3, 0},
++	{0, 0, -1, 0}
++};
++
++int arch_ptrace(long *req, struct task_struct *child,
++		struct utrace_attached_engine *engine,
++		unsigned long addr, unsigned long data, long *val)
++{
++	switch (*req) {
++	case PTRACE_PEEKUSR:
++		return ptrace_peekusr(child, engine, x86_64_uarea, addr, data);
++	case PTRACE_POKEUSR:
++		return ptrace_pokeusr(child, engine, x86_64_uarea, addr, data);
++	case PTRACE_GETREGS:
++		return ptrace_whole_regset(child, engine, data, 0, 0);
++	case PTRACE_SETREGS:
++		return ptrace_whole_regset(child, engine, data, 0, 1);
++	case PTRACE_GETFPREGS:
++		return ptrace_whole_regset(child, engine, data, 1, 0);
++	case PTRACE_SETFPREGS:
++		return ptrace_whole_regset(child, engine, data, 1, 1);
++#ifdef CONFIG_IA32_EMULATION
++	case PTRACE_GET_THREAD_AREA:
++	case PTRACE_SET_THREAD_AREA:
++		return ptrace_onereg_access(child, engine,
++					    &utrace_ia32_view, 3,
++					    addr, (void __user *)data, NULL,
++					    *req == PTRACE_SET_THREAD_AREA);
++#endif
++		/* normal 64bit interface to access TLS data.
++		   Works just like arch_prctl, except that the arguments
++		   are reversed. */
++	case PTRACE_ARCH_PRCTL:
++		return do_arch_prctl(child, data, addr);
++	}
++	return -ENOSYS;
++}
++#endif	/* CONFIG_PTRACE */
++
++
+ asmlinkage void syscall_trace_enter(struct pt_regs *regs)
+ {
+ 	/* do the secure computing check first */
+--- linux-2.6/arch/x86/kernel/ptrace_32.c
++++ linux-2.6/arch/x86/kernel/ptrace_32.c
+@@ -746,6 +746,46 @@ const struct utrace_regset_view *utrace_
+ 	return &utrace_i386_native;
+ }
+ 
++#ifdef CONFIG_PTRACE
++static const struct ptrace_layout_segment i386_uarea[] = {
++	{0, FRAME_SIZE*4, 0, 0},
++	{FRAME_SIZE*4, offsetof(struct user, u_debugreg[0]), -1, 0},
++	{offsetof(struct user, u_debugreg[0]),
++	 offsetof(struct user, u_debugreg[8]), 4, 0},
++	{0, 0, -1, 0}
++};
++
++int arch_ptrace(long *req, struct task_struct *child,
++		struct utrace_attached_engine *engine,
++		unsigned long addr, unsigned long data, long *val)
++{
++	switch (*req) {
++	case PTRACE_PEEKUSR:
++		return ptrace_peekusr(child, engine, i386_uarea, addr, data);
++	case PTRACE_POKEUSR:
++		return ptrace_pokeusr(child, engine, i386_uarea, addr, data);
++	case PTRACE_GETREGS:
++		return ptrace_whole_regset(child, engine, data, 0, 0);
++	case PTRACE_SETREGS:
++		return ptrace_whole_regset(child, engine, data, 0, 1);
++	case PTRACE_GETFPREGS:
++		return ptrace_whole_regset(child, engine, data, 1, 0);
++	case PTRACE_SETFPREGS:
++		return ptrace_whole_regset(child, engine, data, 1, 1);
++	case PTRACE_GETFPXREGS:
++		return ptrace_whole_regset(child, engine, data, 2, 0);
++	case PTRACE_SETFPXREGS:
++		return ptrace_whole_regset(child, engine, data, 2, 1);
++	case PTRACE_GET_THREAD_AREA:
++	case PTRACE_SET_THREAD_AREA:
++		return ptrace_onereg_access(child, engine,
++					    utrace_native_view(current), 3,
++					    addr, (void __user *)data, NULL,
++					    *req == PTRACE_SET_THREAD_AREA);
++	}
++	return -ENOSYS;
++}
++#endif
  
-Index: b/kernel/fork.c
-===================================================================
---- a/kernel/fork.c
-+++ b/kernel/fork.c
+ void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, int error_code)
+ {
+--- linux-2.6/kernel/fork.c
++++ linux-2.6/kernel/fork.c
 @@ -49,6 +49,7 @@
  #include <linux/delayacct.h>
  #include <linux/taskstats_kern.h>
  #include <linux/random.h>
 +#include <linux/ptrace.h>
  #include <linux/tty.h>
+ #include <linux/proc_fs.h>
  
- #include <asm/pgtable.h>
-@@ -1038,6 +1039,7 @@ static struct task_struct *copy_process(
+@@ -1046,6 +1047,7 @@ static struct task_struct *copy_process(
  	INIT_LIST_HEAD(&p->sibling);
  	p->vfork_done = NULL;
  	spin_lock_init(&p->alloc_lock);
@@ -1319,10 +1303,8 @@
  
  	clear_tsk_thread_flag(p, TIF_SIGPENDING);
  	init_sigpending(&p->pending);
-Index: b/kernel/exit.c
-===================================================================
---- a/kernel/exit.c
-+++ b/kernel/exit.c
+--- linux-2.6/kernel/exit.c
++++ linux-2.6/kernel/exit.c
 @@ -23,6 +23,7 @@
  #include <linux/nsproxy.h>
  #include <linux/tracehook.h>
@@ -1331,16 +1313,16 @@
  #include <linux/profile.h>
  #include <linux/mount.h>
  #include <linux/proc_fs.h>
-@@ -883,6 +884,8 @@ fastcall NORET_TYPE void do_exit(long co
- 	tsk->flags |= PF_EXITING;
- 	spin_unlock_irq(&tsk->pi_lock);
+@@ -900,6 +901,8 @@ fastcall NORET_TYPE void do_exit(long co
+ 	smp_mb();
+ 	spin_unlock_wait(&tsk->pi_lock);
  
 +	ptrace_exit(tsk);
 +
  	if (unlikely(in_atomic()))
  		printk(KERN_INFO "note: %s[%d] exited with preempt_count %d\n",
- 				current->comm, current->pid,
-@@ -1508,9 +1511,15 @@ check_continued:
+ 				current->comm, task_pid_nr(current),
+@@ -1531,9 +1534,15 @@ check_continued:
  				break;
  			}
  		}
@@ -1358,17 +1340,16 @@
  		if (options & __WNOTHREAD)
  			break;
  		tsk = next_thread(tsk);
-Index: b/kernel/ptrace.c
-===================================================================
---- a/kernel/ptrace.c
-+++ b/kernel/ptrace.c
-@@ -19,213 +19,2011 @@
+--- linux-2.6/kernel/ptrace.c
++++ linux-2.6/kernel/ptrace.c
+@@ -19,218 +19,2015 @@
  #include <linux/security.h>
  #include <linux/signal.h>
  #include <linux/syscalls.h>
 +#include <linux/utrace.h>
 +#include <linux/tracehook.h>
  #include <linux/audit.h>
+ #include <linux/pid_namespace.h>
  
 +#include <asm/tracehook.h>
  #include <asm/pgtable.h>
@@ -1445,7 +1426,7 @@
 +	task_unlock(state->parent);
  }
  
--static int may_attach(struct task_struct *task)
+-int __ptrace_may_attach(struct task_struct *task)
 +static struct ptrace_state *
 +ptrace_setup(struct task_struct *target, struct utrace_attached_engine *engine,
 +	     struct task_struct *parent, u8 options, int cap_sys_ptrace)
@@ -1482,7 +1463,7 @@
 -{
 -	int err;
 -	task_lock(task);
--	err = may_attach(task);
+-	err = __ptrace_may_attach(task);
 -	task_unlock(task);
 -	return !err;
 +	struct ptrace_state *state;
@@ -1526,11 +1507,12 @@
 +	NO_LOCKS;
 +
 +	return state;
-+}
-+
+ }
+ 
+-int ptrace_attach(struct task_struct *task)
 +static void
 +ptrace_state_free(struct rcu_head *rhead)
-+{
+ {
 +	struct ptrace_state *state = container_of(rhead,
 +						  struct ptrace_state, rcu);
 +	kfree(state);
@@ -1702,11 +1684,10 @@
 +	NO_LOCKS;
 +
 +	return retval;
- }
- 
--int ptrace_attach(struct task_struct *task)
++}
++
 +static int ptrace_attach(struct task_struct *task)
- {
++{
 +	struct utrace_attached_engine *engine;
 +	struct ptrace_state *state;
  	int retval;
@@ -1719,9 +1700,9 @@
  	if (task->pid <= 1)
 -		goto out;
 +		goto bad;
- 	if (task->tgid == current->tgid)
+ 	if (same_thread_group(task, current))
  		goto bad;
--	retval = may_attach(task);
+-	retval = __ptrace_may_attach(task);
 -	if (retval)
 +	if (!task->mm)		/* kernel threads */
 +		goto bad;
@@ -1739,11 +1720,11 @@
 +			retval = -EPERM;
  		goto bad;
 +	}
- 
--	retval = -ENOSYS;
++
 +	pr_debug("%d ptrace_attach %d after utrace_attach: %lu exit_code %x\n",
 +		 current->pid, task->pid, task->state, task->exit_code);
-+
+ 
+-	retval = -ENOSYS;
 +	NO_LOCKS;
 +	if (ptrace_may_attach(task)) {
 +		state = ptrace_setup(task, engine, current, 0,
@@ -1808,7 +1789,8 @@
 +static int ptrace_detach(struct task_struct *task,
 +			 struct utrace_attached_engine *engine,
 +			 struct ptrace_state *state)
-+{
+ {
+-	if (!valid_signal(data))
 +
 +	int error;
 +
@@ -1996,8 +1978,7 @@
 +		     const struct utrace_regset_view *view,
 +		     int setno, unsigned long offset, unsigned int size,
 +		     void __user *data, int write)
- {
--	if (!valid_signal(data))
++{
 +	const struct utrace_regset *regset = utrace_regset(target, engine,
 +							   view, setno);
 +	int ret;
@@ -2175,7 +2156,7 @@
 +
 +	ret = -ESRCH;
 +	read_lock(&tasklist_lock);
-+	child = find_task_by_pid(pid);
++	child = find_task_by_vpid(pid);
 +	if (child)
 +		get_task_struct(child);
 +	read_unlock(&tasklist_lock);
@@ -2217,14 +2198,6 @@
 +			if (child->state == TASK_STOPPED)
 +				ret = 0;
 +			unlock_task_sighand(child, &flags);
-+		}
-+		if (ret == 0) {
-+			ret = ptrace_update(child, state,
-+					    UTRACE_ACTION_QUIESCE, 0);
-+			if (unlikely(ret == -EALREADY))
-+				ret = -ESRCH;
-+			if (unlikely(ret))
-+				BUG_ON(ret != -ESRCH);
  		}
 -		if (copy_to_user(dst, buf, retval))
 -			return -EFAULT;
@@ -2232,6 +2205,14 @@
 -		src += retval;
 -		dst += retval;
 -		len -= retval;			
++		if (ret == 0) {
++			ret = ptrace_update(child, state,
++					    UTRACE_ACTION_QUIESCE, 0);
++			if (unlikely(ret == -EALREADY))
++				ret = -ESRCH;
++			if (unlikely(ret))
++				BUG_ON(ret != -ESRCH);
++		}
 +
 +		if (ret) {
 +			pr_debug("%d not stopped (%lu)\n",
@@ -2276,22 +2257,17 @@
 +	put_task_struct(child);
 +out:
 +	return ret;
- }
- 
--int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len)
++}
++
 +static inline int is_sysemu(long req)
- {
--	int copied = 0;
++{
 +#ifdef PTRACE_SYSEMU
 +	if (req == PTRACE_SYSEMU || req == PTRACE_SYSEMU_SINGLESTEP)
 +		return 1;
 +#endif
 +	return 0;
 +}
- 
--	while (len > 0) {
--		char buf[128];
--		int this_len, retval;
++
 +static inline int is_singlestep(long req)
 +{
 +#ifdef PTRACE_SYSEMU_SINGLESTEP
@@ -2303,23 +2279,22 @@
 +		return 1;
 +#endif
 +	return 0;
-+}
+ }
  
--		this_len = (len > sizeof(buf)) ? sizeof(buf) : len;
--		if (copy_from_user(buf, src, this_len))
--			return -EFAULT;
--		retval = access_process_vm(tsk, dst, buf, this_len, 1);
--		if (!retval) {
--			if (copied)
+-int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len)
 +static inline int is_blockstep(long req)
-+{
+ {
+-	int copied = 0;
 +#ifdef PTRACE_SINGLEBLOCK
 +	if (req == PTRACE_SINGLEBLOCK)
 +		return 1;
 +#endif
 +	return 0;
 +}
-+
+ 
+-	while (len > 0) {
+-		char buf[128];
+-		int this_len, retval;
 +static int
 +ptrace_common(long request, struct task_struct *child,
 +	      struct utrace_attached_engine *engine,
@@ -2328,7 +2303,13 @@
 +{
 +	unsigned long flags;
 +	int ret = -EIO;
-+
+ 
+-		this_len = (len > sizeof(buf)) ? sizeof(buf) : len;
+-		if (copy_from_user(buf, src, this_len))
+-			return -EFAULT;
+-		retval = access_process_vm(tsk, dst, buf, this_len, 1);
+-		if (!retval) {
+-			if (copied)
 +	NO_LOCKS;
 +
 +	switch (request) {
@@ -2590,13 +2571,13 @@
 +	return ret;
  }
 +#endif
++
  
 -/**
 - * ptrace_traceme  --  helper for PTRACE_TRACEME
 - *
 - * Performs checks and sets PT_PTRACED.
 - * Should be used by all ptrace implementations for PTRACE_TRACEME.
-+
 +/*
 + * Detach the zombie being reported for wait.
   */
@@ -2606,13 +2587,13 @@
 +	      struct task_struct *p, struct ptrace_state *state)
  {
 -	int ret = -EPERM;
-+	int detach_error;
-+	struct utrace_attached_engine *engine;
- 
+-
 -	ret = security_ptrace(current->parent, current);
 -	if (ret)
 -		return -EPERM;
--
++	int detach_error;
++	struct utrace_attached_engine *engine;
+ 
 -	return -ENOSYS;
 +restart:
 +	NO_LOCKS;
@@ -2682,25 +2663,28 @@
 +	__releases(tasklist_lock)
  {
 -	struct task_struct *child;
++	struct pid_namespace *ns;
 +	struct ptrace_state *state;
 +	struct task_struct *p;
 +	int err = -ECHILD;
 +	int exit_code, why, status;
 +
 +	rcu_read_lock();
++	ns = current->nsproxy->pid_ns;
 +	list_for_each_entry_rcu(state, &tsk->ptracees, entry) {
 +		p = state->task;
 +
 +		if (pid > 0) {
-+			if (p->pid != pid)
++			if (task_pid_nr_ns(p, ns) != pid)
 +				continue;
 +		} else if (!pid) {
-+			if (process_group(p) != process_group(current))
++			if (task_pgrp_nr_ns(p, ns) != task_pgrp_vnr(current))
 +				continue;
 +		} else if (pid != -1) {
-+			if (process_group(p) != -pid)
++			if (task_pgrp_nr_ns(p, ns) != -pid)
 +				continue;
 +		}
++
 +		if (((p->exit_signal != SIGCHLD) ^ ((options & __WCLONE) != 0))
 +		    && !(options & __WALL))
 +			continue;
@@ -2955,7 +2939,7 @@
 +	}
  
  	read_lock(&tasklist_lock);
--	child = find_task_by_pid(pid);
+-	child = find_task_by_vpid(pid);
 -	if (child)
 -		get_task_struct(child);
 +	if (unlikely(parent->signal == NULL))
@@ -2979,15 +2963,15 @@
 -	return child;
  }
  
--asmlinkage long sys_ptrace(long request, long pid, long addr, long data)
+-#ifndef arch_ptrace_attach
+-#define arch_ptrace_attach(child)	do { } while (0)
 +static u32
 +ptrace_report(struct utrace_attached_engine *engine,
 +	      struct task_struct *tsk,
 +	      struct ptrace_state *state,
 +	      int code)
 +	__releases(RCU)
- {
--	return -ENOSYS;
++{
 +	const struct utrace_regset *regset;
 +
 +	pr_debug("%d ptrace_report %d engine %p"
@@ -3038,26 +3022,19 @@
 +		(*regset->writeback)(tsk, regset, 0);
 +
 +	return UTRACE_ACTION_RESUME;
- }
- 
--int generic_ptrace_peekdata(struct task_struct *tsk, long addr, long data)
++}
++
 +static inline u32
 +ptrace_event(struct utrace_attached_engine *engine,
 +	     struct task_struct *tsk,
 +	     struct ptrace_state *state,
 +	     int event)
 +	__releases(RCU)
- {
--	unsigned long tmp;
--	int copied;
++{
 +	state->syscall = 0;
 +	return ptrace_report(engine, tsk, state, (event << 8) | SIGTRAP);
 +}
- 
--	copied = access_process_vm(tsk, addr, &tmp, sizeof(tmp), 0);
--	if (copied != sizeof(tmp))
--		return -EIO;
--	return put_user(tmp, (unsigned long __user *)data);
++
 +/*
 + * Unlike other report callbacks, this can't be called while ptrace_exit
 + * is doing ptrace_done in parallel, so we don't need get_ptrace_state.
@@ -3213,15 +3190,13 @@
 +	NO_LOCKS;
 +	printk(KERN_ERR "ptrace out of memory, lost child %d of %d",
 +	       child->pid, parent->pid);
- }
- 
--int generic_ptrace_pokedata(struct task_struct *tsk, long addr, long data)
++}
++
 +static u32
 +ptrace_report_clone(struct utrace_attached_engine *engine,
 +		    struct task_struct *parent,
 +		    unsigned long clone_flags, struct task_struct *child)
- {
--	int copied;
++{
 +	int event, option;
 +	struct ptrace_state *state;
 +
@@ -3252,9 +3227,7 @@
 +	}
 +	else
 +		event = 0;
- 
--	copied = access_process_vm(tsk, addr, &data, sizeof(data), 1);
--	return (copied == sizeof(data)) ? 0 : -EIO;
++
 +	if (!(clone_flags & CLONE_UNTRACED)
 +	    && (event || (clone_flags & CLONE_PTRACE))) {
 +		/*
@@ -3314,7 +3287,7 @@
 +	state->have_eventmsg = 0;
 +	state->u.siginfo = info;
 +	return ptrace_report(engine, tsk, state, signo) | UTRACE_SIGNAL_IGN;
- }
++}
 +
 +static u32
 +ptrace_report_jctl(struct utrace_attached_engine *engine,
@@ -3385,8 +3358,9 @@
 +			*retval = -ENOSYS;
 +		}
 +	}
-+#endif
-+
+ #endif
+ 
+-asmlinkage long sys_ptrace(long request, long pid, long addr, long data)
 +	state->syscall = 1;
 +	return ptrace_report(engine, tsk, state,
 +			     ((state->options & PTRACE_O_TRACESYSGOOD)
@@ -3396,17 +3370,25 @@
 +static u32
 +ptrace_report_syscall_entry(struct utrace_attached_engine *engine,
 +			    struct task_struct *tsk, struct pt_regs *regs)
-+{
+ {
+-	return -ENOSYS;
 +	return ptrace_report_syscall(engine, tsk, regs, 1);
-+}
-+
+ }
+ 
+-int generic_ptrace_peekdata(struct task_struct *tsk, long addr, long data)
 +static u32
 +ptrace_report_syscall_exit(struct utrace_attached_engine *engine,
 +			   struct task_struct *tsk, struct pt_regs *regs)
-+{
+ {
+-	unsigned long tmp;
+-	int copied;
 +	return ptrace_report_syscall(engine, tsk, regs, 0);
 +}
-+
+ 
+-	copied = access_process_vm(tsk, addr, &tmp, sizeof(tmp), 0);
+-	if (copied != sizeof(tmp))
+-		return -EIO;
+-	return put_user(tmp, (unsigned long __user *)data);
 +static u32
 +ptrace_report_exit(struct utrace_attached_engine *engine,
 +		   struct task_struct *tsk, long orig_code, long *code)
@@ -3459,18 +3441,22 @@
 +	END_CHECK;
 +
 +	return parent;
-+}
-+
+ }
+ 
+-int generic_ptrace_pokedata(struct task_struct *tsk, long addr, long data)
 +static int
 +ptrace_allow_access_process_vm(struct utrace_attached_engine *engine,
 +			       struct task_struct *target,
 +			       struct task_struct *caller)
-+{
+ {
+-	int copied;
 +	struct ptrace_state *state;
 +	int ours = 0;
 +
 +	START_CHECK;
-+
+ 
+-	copied = access_process_vm(tsk, addr, &data, sizeof(data), 1);
+-	return (copied == sizeof(data)) ? 0 : -EIO;
 +	state = get_ptrace_state(engine, target);
 +	if (likely(state != NULL)) {
 +		ours = (((engine->flags & UTRACE_ACTION_QUIESCE)
@@ -3485,7 +3471,7 @@
 +	END_CHECK;
 +
 +	return ours;
-+}
+ }
 +
 +
 +static const struct utrace_engine_ops ptrace_utrace_ops =
@@ -3504,11 +3490,9 @@
 +	.tracer_task = ptrace_tracer_task,
 +	.allow_access_process_vm = ptrace_allow_access_process_vm,
 +};
-Index: b/kernel/sys_ni.c
-===================================================================
---- a/kernel/sys_ni.c
-+++ b/kernel/sys_ni.c
-@@ -114,6 +114,10 @@ cond_syscall(sys_vm86);
+--- linux-2.6/kernel/sys_ni.c
++++ linux-2.6/kernel/sys_ni.c
+@@ -122,6 +122,10 @@ cond_syscall(sys_vm86);
  cond_syscall(compat_sys_ipc);
  cond_syscall(compat_sys_sysctl);
  
@@ -3519,10 +3503,8 @@
  /* arch-specific weak syscall entries */
  cond_syscall(sys_pciconfig_read);
  cond_syscall(sys_pciconfig_write);
-Index: b/kernel/Makefile
-===================================================================
---- a/kernel/Makefile
-+++ b/kernel/Makefile
+--- linux-2.6/kernel/Makefile
++++ linux-2.6/kernel/Makefile
 @@ -4,7 +4,7 @@
  
  obj-y     = sched.o fork.o exec_domain.o panic.o printk.o profile.o \
@@ -3532,19 +3514,17 @@
  	    signal.o sys.o kmod.o workqueue.o pid.o \
  	    rcupdate.o extable.o params.o posix-timers.o \
  	    kthread.o wait.o kfifo.o sys_ni.o posix-cpu-timers.o mutex.o \
-@@ -52,6 +52,7 @@ obj-$(CONFIG_SYSCTL) += utsname_sysctl.o
- obj-$(CONFIG_TASK_DELAY_ACCT) += delayacct.o
+@@ -58,6 +58,7 @@ obj-$(CONFIG_TASK_DELAY_ACCT) += delayac
  obj-$(CONFIG_TASKSTATS) += taskstats.o tsacct.o
+ obj-$(CONFIG_MARKERS) += marker.o
  obj-$(CONFIG_UTRACE) += utrace.o
 +obj-$(CONFIG_PTRACE) += ptrace.o
  
  ifneq ($(CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER),y)
  # According to Alan Modra <alan at linuxcare.com.au>, the -fno-omit-frame-pointer is
-Index: b/include/linux/sched.h
-===================================================================
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -1180,6 +1180,10 @@ struct task_struct {
+--- linux-2.6/include/linux/sched.h
++++ linux-2.6/include/linux/sched.h
+@@ -1161,6 +1161,10 @@ struct task_struct {
  	atomic_t fs_excl;	/* holding fs exclusive resources */
  	struct rcu_head rcu;
  
@@ -3555,11 +3535,9 @@
  	/*
  	 * cache last used pipe for splice
  	 */
-Index: b/include/linux/ptrace.h
-===================================================================
---- a/include/linux/ptrace.h
-+++ b/include/linux/ptrace.h
-@@ -49,49 +49,196 @@
+--- linux-2.6/include/linux/ptrace.h
++++ linux-2.6/include/linux/ptrace.h
+@@ -49,49 +49,195 @@
  #include <asm/ptrace.h>
  
  #ifdef __KERNEL__
@@ -3609,7 +3587,8 @@
 -extern int ptrace_check_attach(struct task_struct *task, int kill);
 -extern int ptrace_request(struct task_struct *child, long request, long addr, long data);
  extern int ptrace_may_attach(struct task_struct *task);
- 
+-extern int __ptrace_may_attach(struct task_struct *task);
++
 +
 +#ifdef CONFIG_PTRACE
 +#include <asm/tracehook.h>
@@ -3707,7 +3686,7 @@
 +				    (unsigned long __user *)data, NULL, 0);
 +}
 +
-+/* Convenience wrapper for the common PTRACE_PEEKUSR implementation.  */
++/* Convenience wrapper for the common PTRACE_POKEUSR implementation.  */
 +static inline int ptrace_pokeusr(struct task_struct *child,
 +				 struct utrace_attached_engine *engine,
 +				 const struct ptrace_layout_segment layout[],
@@ -3789,39 +3768,27 @@
 +	return -ECHILD;
 +}
 +#endif	/* CONFIG_PTRACE */
-+
+ 
  int generic_ptrace_peekdata(struct task_struct *tsk, long addr, long data);
  int generic_ptrace_pokedata(struct task_struct *tsk, long addr, long data);
+--- linux-2.6/include/asm-x86/ptrace-abi.h
++++ linux-2.6/include/asm-x86/ptrace-abi.h
+@@ -73,9 +73,9 @@
  
-Index: b/include/asm-x86_64/tracehook.h
-===================================================================
---- a/include/asm-x86_64/tracehook.h
-+++ b/include/asm-x86_64/tracehook.h
-@@ -15,6 +15,7 @@
- 
- #include <linux/sched.h>
- #include <asm/ptrace.h>
-+#include <asm/proto.h>
- 
- /*
-  * See linux/tracehook.h for the descriptions of what these need to do.
-Index: b/include/asm-x86_64/ptrace-abi.h
-===================================================================
---- a/include/asm-x86_64/ptrace-abi.h
-+++ b/include/asm-x86_64/ptrace-abi.h
-@@ -48,4 +48,7 @@
- 
- #define PTRACE_ARCH_PRCTL	  30	/* arch_prctl for child */
+ #ifdef __x86_64__
+ # define PTRACE_ARCH_PRCTL	  30
+-#else
+-# define PTRACE_SYSEMU		  31
+-# define PTRACE_SYSEMU_SINGLESTEP 32
+ #endif
  
 +#define PTRACE_SYSEMU		  31
 +#define PTRACE_SYSEMU_SINGLESTEP  32
 +
  #endif
-Index: b/init/Kconfig
-===================================================================
---- a/init/Kconfig
-+++ b/init/Kconfig
-@@ -673,10 +673,21 @@ endmenu
+--- linux-2.6/init/Kconfig
++++ linux-2.6/init/Kconfig
+@@ -765,10 +765,21 @@ config PREEMPT_NOTIFIERS
  
  menu "Process debugging support"
  

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

Index: linux-2.6-utrace-regset-avr32.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-utrace-regset-avr32.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-utrace-regset-avr32.patch	21 Aug 2007 19:42:55 -0000	1.3
+++ linux-2.6-utrace-regset-avr32.patch	15 Feb 2008 23:58:52 -0000	1.4
@@ -10,12 +10,12 @@
 
 ---
 
- arch/avr32/kernel/ptrace.c |  109 ++++++++++++++++++--------------------------
- 1 files changed, 44 insertions(+), 65 deletions(-)
+ arch/avr32/kernel/ptrace.c |  111 +++++++++++++++++---------------------------
+ 1 files changed, 44 insertions(+), 67 deletions(-)
 
 --- linux-2.6/arch/avr32/kernel/ptrace.c
 +++ linux-2.6/arch/avr32/kernel/ptrace.c
-@@ -14,94 +14,73 @@
+@@ -14,10 +14,14 @@
  #include <linux/ptrace.h>
  #include <linux/errno.h>
  #include <linux/user.h>
@@ -30,10 +30,10 @@
  static struct pt_regs *get_user_regs(struct task_struct *tsk)
  {
  	return (struct pt_regs *)((unsigned long)task_stack_page(tsk) +
- 				  THREAD_SIZE - sizeof(struct pt_regs));
+@@ -57,86 +61,59 @@ void ptrace_disable(struct task_struct *
+ 	clear_tsk_thread_flag(child, TIF_BREAKPOINT);
  }
  
--#if 0
 -/*
 - * Read the word at offset "offset" into the task's "struct user". We
 - * actually access the pt_regs struct stored on the kernel stack.
@@ -48,20 +48,20 @@
 -	unsigned long *regs;
 -	unsigned long value;
 -
--	pr_debug("ptrace_read_user(%p, %#lx, %p)\n",
--		 tsk, offset, data);
--
 -	if (offset & 3 || offset >= sizeof(struct user)) {
 -		printk("ptrace_read_user: invalid offset 0x%08lx\n", offset);
 -		return -EIO;
 -	}
-+	struct pt_regs *regs = get_user_regs(target);
- 
+-
 -	regs = (unsigned long *)get_user_regs(tsk);
 -
 -	value = 0;
 -	if (offset < sizeof(struct pt_regs))
 -		value = regs[offset / sizeof(regs[0])];
++	struct pt_regs *regs = get_user_regs(target);
+ 
+-	pr_debug("ptrace_read_user(%s[%u], %#lx, %p) -> %#lx\n",
+-		 tsk->comm, tsk->pid, offset, data, value);
 -
 -	return put_user(value, data);
 +	return utrace_regset_copyout(&pos, &count, &kbuf, &ubuf,
@@ -82,8 +82,11 @@
  {
 -	unsigned long *regs;
 -
+-	pr_debug("ptrace_write_user(%s[%u], %#lx, %#lx)\n",
+-			tsk->comm, tsk->pid, offset, value);
+-
 -	if (offset & 3 || offset >= sizeof(struct user)) {
--		printk("ptrace_write_user: invalid offset 0x%08lx\n", offset);
+-		pr_debug("  invalid offset 0x%08lx\n", offset);
 -		return -EIO;
 -	}
 -

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

Index: linux-2.6-utrace-regset-ia64.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-utrace-regset-ia64.patch,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- linux-2.6-utrace-regset-ia64.patch	11 Sep 2007 18:03:55 -0000	1.4
+++ linux-2.6-utrace-regset-ia64.patch	15 Feb 2008 23:58:52 -0000	1.5
@@ -194,7 +194,7 @@
 +		end = (dst->pos - 7 * sizeof(int)) / sizeof(struct _fpreg_ia32);
 +		for (; start < end; start++)
 +			access_fpreg_ia32(start, (struct _fpreg_ia32 *)buf + start,
-+					pt, info->sw, tos, 0);
++					pt, info->sw, tos, 1);
 +		if (dst->count == 0)
 +			return;
 +	}

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

Index: linux-2.6-utrace-regset-s390.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-utrace-regset-s390.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-utrace-regset-s390.patch	21 Aug 2007 19:42:55 -0000	1.3
+++ linux-2.6-utrace-regset-s390.patch	15 Feb 2008 23:58:52 -0000	1.4
@@ -9,8 +9,8 @@
 ---
 
  arch/s390/kernel/Makefile |    2 
- arch/s390/kernel/ptrace.c |  948 +++++++++++++++++++--------------------------
- 2 files changed, 394 insertions(+), 556 deletions(-)
+ arch/s390/kernel/ptrace.c |  958 +++++++++++++++++++--------------------------
+ 2 files changed, 409 insertions(+), 551 deletions(-)
 
 --- linux-2.6/arch/s390/kernel/Makefile
 +++ linux-2.6/arch/s390/kernel/Makefile
@@ -35,7 +35,7 @@
  
  #include <asm/segment.h>
  #include <asm/page.h>
-@@ -116,633 +118,467 @@ tracehook_single_step_enabled(struct tas
+@@ -116,628 +118,482 @@ tracehook_single_step_enabled(struct tas
  	return task->thread.per_info.single_step;
  }
  
@@ -163,13 +163,15 @@
 +		unsigned long pswmask = regs->psw.mask;
 +		ret = utrace_regset_copyin(&pos, &count, &kbuf, &ubuf,
 +					   &pswmask, PT_PSWMASK, PT_PSWADDR);
-+		if (pswmask != PSW_MASK_MERGE(psw_user_bits, pswmask)
++		if (ret == 0 &&
 +#ifdef CONFIG_COMPAT
-+		    && pswmask != PSW_MASK_MERGE(psw_user32_bits, pswmask)
++		    pswmask != PSW_MASK_MERGE(psw_user32_bits, pswmask) &&
 +#endif
-+			)
++		    pswmask != PSW_MASK_MERGE(psw_user_bits, pswmask))
 +			/* Invalid psw mask. */
-+			return -EINVAL;
++			ret = -EINVAL;
++		if (ret)
++			return ret;
 +		regs->psw.mask = pswmask;
 +		FixPerRegisters(target);
 +	}
@@ -188,6 +190,8 @@
 +		ret = utrace_regset_copyin(&pos, &count, &kbuf, &ubuf,
 +					   &regs->psw.addr, PT_PSWADDR,
 +					   PT_ACR0);
++		if (ret)
++			return ret;
 +#ifndef CONFIG_64BIT
 +		/* I'd like to reject addresses without the
 +		   high order bit but older gdb's rely on it */
@@ -269,6 +273,14 @@
 -#endif
 -		    data != PSW_MASK_MERGE(psw_user_bits, data))
 -			/* Invalid psw mask. */
+-			return -EINVAL;
+-#ifndef CONFIG_64BIT
+-		if (addr == (addr_t) &dummy->regs.psw.addr)
+-			/* I'd like to reject addresses without the
+-			   high order bit but older gdb's rely on it */
+-			data |= PSW_ADDR_AMODE;
+-#endif
+-		*(addr_t *)((addr_t) &task_pt_regs(child)->psw + addr) = data;
 +static int
 +fpregs_set(struct task_struct *target,
 +	    const struct utrace_regset *regset,
@@ -281,23 +293,13 @@
 +		save_fp_regs(&target->thread.fp_regs);
 +
 +	/* If setting FPC, must validate it first. */
-+	if (count > 0 && pos == 0) {
-+		unsigned long fpc;
++	if (count > 0 && pos < offsetof(s390_fp_regs, fprs)) {
++		u32 fpc[2] = { target->thread.fp_regs.fpc, 0 };
++		BUILD_BUG_ON(offsetof(s390_fp_regs, fprs) != sizeof(fpc));
 +		ret = utrace_regset_copyin(&pos, &count, &kbuf, &ubuf,
 +					   &fpc, 0, sizeof(fpc));
 +		if (ret)
 +			return ret;
-+
-+		if ((fpc & ~((unsigned long) FPC_VALID_MASK
-+			     << (BITS_PER_LONG - 32))) != 0)
- 			return -EINVAL;
--#ifndef CONFIG_64BIT
--		if (addr == (addr_t) &dummy->regs.psw.addr)
--			/* I'd like to reject addresses without the
--			   high order bit but older gdb's rely on it */
--			data |= PSW_ADDR_AMODE;
--#endif
--		*(addr_t *)((addr_t) &task_pt_regs(child)->psw + addr) = data;
  
 -	} else if (addr < (addr_t) (&dummy->regs.orig_gpr2)) {
 -		/*
@@ -316,17 +318,16 @@
 -		else
 -#endif
 -		*(addr_t *)((addr_t) &child->thread.acrs + offset) = data;
-+		memcpy(&target->thread.fp_regs, &fpc, sizeof(fpc));
-+	}
++		if ((fpc[0] & ~FPC_VALID_MASK) != 0 || fpc[1] != 0)
++			return -EINVAL;
  
 -	} else if (addr == (addr_t) &dummy->regs.orig_gpr2) {
 -		/*
 -		 * orig_gpr2 is stored on the kernel stack
 -		 */
 -		task_pt_regs(child)->orig_gpr2 = data;
-+	if (ret == 0)
-+		ret = utrace_regset_copyin(&pos, &count, &kbuf, &ubuf,
-+					   &target->thread.fp_regs, 0, -1);
++		target->thread.fp_regs.fpc = fpc[0];
++	}
  
 -	} else if (addr < (addr_t) (&dummy->regs.fp_regs + 1)) {
 -		/*
@@ -338,8 +339,9 @@
 -			return -EINVAL;
 -		offset = addr - (addr_t) &dummy->regs.fp_regs;
 -		*(addr_t *)((addr_t) &child->thread.fp_regs + offset) = data;
-+	if (ret == 0 && target == current)
-+		restore_fp_regs(&target->thread.fp_regs);
++	if (ret == 0 && count > 0)
++		ret = utrace_regset_copyin(&pos, &count, &kbuf, &ubuf,
++					   target->thread.fp_regs.fprs, 0, -1);
  
 -	} else if (addr < (addr_t) (&dummy->regs.per_info + 1)) {
 -		/*
@@ -347,7 +349,9 @@
 -		 */
 -		offset = addr - (addr_t) &dummy->regs.per_info;
 -		*(addr_t *)((addr_t) &child->thread.per_info + offset) = data;
--
++	if (ret == 0 && target == current)
++		restore_fp_regs(&target->thread.fp_regs);
+ 
 -	}
 +	return ret;
 +}
@@ -526,12 +530,13 @@
 +	int ret = 0;
 +
 +	/* Fake a 31 bit psw mask. */
-+	if (count > 0 && pos == PT_PSWMASK / 2) {
++	if (count > 0 && pos == offsetof(struct user_regs_struct32, psw.mask)) {
 +		u32 pswmask = PSW32_MASK_MERGE(psw32_user_bits,
 +					       (u32) (regs->psw.mask >> 32));
-+		ret = utrace_regset_copyout(&pos, &count, &kbuf, &ubuf,
-+					    &pswmask, PT_PSWMASK / 2,
-+					    PT_PSWADDR / 2);
++		ret = utrace_regset_copyout(
++			&pos, &count, &kbuf, &ubuf, &pswmask,
++			offsetof(struct user_regs_struct32, psw.mask),
++			offsetof(struct user_regs_struct32, psw.addr));
 +	}
  
 -	} else if (addr < (addr_t) (&dummy32->regs.fp_regs + 1)) {
@@ -541,11 +546,13 @@
 -	        offset = addr - (addr_t) &dummy32->regs.fp_regs;
 -		tmp = *(__u32 *)((addr_t) &child->thread.fp_regs + offset);
 +	/* Fake a 31 bit psw address. */
-+	if (ret == 0 && count > 0 && pos == PT_PSWADDR / 2) {
++	if (ret == 0 && count > 0 &&
++	    pos == offsetof(struct user_regs_struct32, psw.addr)) {
 +		u32 pswaddr = (u32) regs->psw.addr | PSW32_ADDR_AMODE31;
-+		ret = utrace_regset_copyout(&pos, &count, &kbuf, &ubuf,
-+					    &pswaddr, PT_PSWADDR / 2,
-+					    PT_GPR0 / 2);
++		ret = utrace_regset_copyout(
++			&pos, &count, &kbuf, &ubuf, &pswaddr,
++			offsetof(struct user_regs_struct32, psw.addr),
++			offsetof(struct user_regs_struct32, gprs[0]));
 +	}
  
 -	} else if (addr < (addr_t) (&dummy32->regs.per_info + 1)) {
@@ -561,8 +568,11 @@
 -		    offset == (addr_t) &dummy_per32->lowcore.words.address)
 -			offset = offset*2 + 4;
 +	/* The GPRs are directly on the stack.  Just truncate them.  */
-+	while (ret == 0 && count > 0 && pos < PT_ACR0 / 2) {
-+		u32 value = regs->gprs[(pos - PT_GPR0 / 2) / sizeof(u32)];
++	while (ret == 0 && count > 0 &&
++	       pos < offsetof(struct user_regs_struct32, acrs[0])) {
++		unsigned int n =
++			pos - offsetof(struct user_regs_struct32, gprs[0]);
++		u32 value = regs->gprs[n / sizeof(u32)];
 +		if (kbuf) {
 +			*(u32 *) kbuf = value;
 +			kbuf += sizeof(u32);
@@ -576,30 +586,29 @@
 +		pos += sizeof(u32);
 +		count -= sizeof(u32);
 +	}
-+
+ 
+-	} else
+-		tmp = 0;
 +	/* The ACRs are kept in the thread_struct.  */
-+	if (ret == 0 && count > 0 && pos < PT_ACR0 / 2 + NUM_ACRS * ACR_SIZE) {
++	if (ret == 0 && count > 0 &&
++	    pos < offsetof(struct user_regs_struct32, acrs[NUM_ACRS])) {
 +		if (target == current)
 +			save_access_regs(target->thread.acrs);
-+
-+		ret = utrace_regset_copyout(&pos, &count, &kbuf, &ubuf,
-+					    target->thread.acrs,
-+					    PT_ACR0 / 2,
-+					    PT_ACR0 / 2 + NUM_ACRS * ACR_SIZE);
++		ret = utrace_regset_copyout(
++			&pos, &count, &kbuf, &ubuf, target->thread.acrs,
++			offsetof(struct user_regs_struct32, acrs[0]),
++			offsetof(struct user_regs_struct32, acrs[NUM_ACRS]));
 +	}
  
--	} else
--		tmp = 0;
+-	return put_user(tmp, (__u32 __user *) data);
 +	/* Finally, the ORIG_GPR2 value.  */
 +	if (count > 0) {
 +		if (kbuf)
 +			*(u32 *) kbuf = regs->orig_gpr2;
-+		else if (put_user((u32) regs->orig_gpr2,
-+				  (u32 __user *) ubuf))
++		else if (put_user((u32) regs->orig_gpr2, (u32 __user *) ubuf))
 +			return -EFAULT;
 +	}
- 
--	return put_user(tmp, (__u32 __user *) data);
++
 +	return 0;
  }
  
@@ -622,18 +631,19 @@
 +	int ret = 0;
 +
 +	/* Check for an invalid PSW mask.  */
-+	if (count > 0 && pos == PT_PSWMASK / 2) {
++	if (count > 0 && pos == offsetof(struct user_regs_struct32, psw.mask)) {
 +		u32 pswmask;
-+		ret = utrace_regset_copyin(&pos, &count, &kbuf, &ubuf,
-+					   &pswmask, PT_PSWMASK / 2,
-+					   PT_PSWADDR / 2);
++		ret = utrace_regset_copyin(
++			&pos, &count, &kbuf, &ubuf, &pswmask,
++			offsetof(struct user_regs_struct32, psw.mask),
++			offsetof(struct user_regs_struct32, psw.addr));
 +		if (ret)
 +			return ret;
  
 -	if (!test_thread_flag(TIF_31BIT) ||
 -	    (addr & 3) || addr > sizeof(struct user32) - 3)
 -		return -EIO;
-+		if (pswmask != PSW_MASK_MERGE(psw_user32_bits, pswmask))
++		if (pswmask != PSW32_MASK_MERGE(psw32_user_bits, pswmask))
 +			/* Invalid psw mask. */
 +			return -EINVAL;
  
@@ -650,11 +660,12 @@
 -		 */
 -		if (addr == (addr_t) &dummy32->regs.psw.mask) {
 +	/* Build a 64 bit psw address from 31 bit address. */
-+	if (count > 0 && pos == PT_PSWADDR / 2) {
++	if (count > 0 && pos == offsetof(struct user_regs_struct32, psw.addr)) {
 +		u32 pswaddr;
-+		ret = utrace_regset_copyin(&pos, &count, &kbuf, &ubuf,
-+					   &pswaddr, PT_PSWADDR / 2,
-+					   PT_GPR0 / 2);
++		ret = utrace_regset_copyin(
++			&pos, &count, &kbuf, &ubuf, &pswaddr,
++			offsetof(struct user_regs_struct32, psw.addr),
++			offsetof(struct user_regs_struct32, gprs[0]));
 +		if (ret == 0)
  			/* Build a 64 bit psw mask from 31 bit mask. */
 -			if (tmp != PSW32_MASK_MERGE(psw32_user_bits, tmp))
@@ -674,7 +685,10 @@
 +	}
 +
 +	/* The GPRs are directly onto the stack. */
-+	while (ret == 0 && count > 0 && pos < PT_ACR0 / 2) {
++	while (ret == 0 && count > 0 &&
++	       pos < offsetof(struct user_regs_struct32, acrs[0])) {
++		unsigned int n =
++			pos - offsetof(struct user_regs_struct32, gprs[0]);
 +		u32 value;
 +
 +		if (kbuf) {
@@ -699,7 +713,7 @@
 -		 * orig_gpr2 is stored on the kernel stack
 -		 */
 -		*(__u32*)((addr_t) &task_pt_regs(child)->orig_gpr2 + 4) = tmp;
-+		regs->gprs[(pos - PT_GPR0 / 2) / sizeof(u32)] = value;
++		regs->gprs[n / sizeof(u32)] = value;
 +	}
  
 -	} else if (addr < (addr_t) (&dummy32->regs.fp_regs + 1)) {
@@ -713,16 +727,17 @@
 -	        offset = addr - (addr_t) &dummy32->regs.fp_regs;
 -		*(__u32 *)((addr_t) &child->thread.fp_regs + offset) = tmp;
 +	/* The ACRs are kept in the thread_struct.  */
-+	if (count > 0 && pos < PT_ORIGGPR2 / 2) {
-+		if (target == current
-+		    && (pos != PT_ACR0 / 2
-+			|| count < sizeof(target->thread.acrs)))
++	if (count > 0 &&
++	    pos < offsetof(struct user_regs_struct32, acrs[NUM_ACRS])) {
++		if (target == current &&
++		    (pos != offsetof(struct user_regs_struct32, acrs[0]) ||
++		     count < sizeof(target->thread.acrs)))
 +			save_access_regs(target->thread.acrs);
 +
-+		ret = utrace_regset_copyin(&pos, &count, &kbuf, &ubuf,
-+					   target->thread.acrs,
-+					   PT_ACR0 / 2,
-+					   PT_ACR0 / 2 + NUM_ACRS * ACR_SIZE);
++		ret = utrace_regset_copyin(
++			&pos, &count, &kbuf, &ubuf, target->thread.acrs,
++			offsetof(struct user_regs_struct32, acrs[0]),
++			offsetof(struct user_regs_struct32, acrs[NUM_ACRS]));
  
 -	} else if (addr < (addr_t) (&dummy32->regs.per_info + 1)) {
 -		/*
@@ -955,7 +970,7 @@
 -		tracehook_disable_single_step(child);
 -		wake_up_process(child);
 -		return 0;
--
+ 
 -	case PTRACE_KILL:
 -		/*
 -		 * make the child exit.  Best I can do is send it a sigkill. 
@@ -983,16 +998,11 @@
 -		/* give it a chance to run. */
 -		wake_up_process(child);
 -		return 0;
--
--	case PTRACE_DETACH:
--		/* detach a process that was attached. */
--		return ptrace_detach(child, data);
- 
 +static const struct utrace_regset s390_compat_regsets[] = {
 +	{
 +		.core_note_type = NT_PRSTATUS,
 +		.size = sizeof(u32), .align = sizeof(u32),
-+		.n = sizeof(s390_regs) / sizeof(long),
++		.n = offsetof(struct user_regs_struct32, fp_regs) / sizeof(u32),
 +		.get = s390_genregs_get, .set = s390_genregs_set
 +	},
 +	{

linux-2.6-utrace-regset.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.9 -r 1.10 linux-2.6-utrace-regset.patch
Index: linux-2.6-utrace-regset.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-utrace-regset.patch,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- linux-2.6-utrace-regset.patch	7 Nov 2007 00:05:35 -0000	1.9
+++ linux-2.6-utrace-regset.patch	15 Feb 2008 23:58:52 -0000	1.10
@@ -11,924 +11,831 @@
 
 ---
 
- arch/i386/kernel/i387.c        |  143 ++++---
- arch/i386/kernel/ptrace.c      |  811 +++++++++++++++++++++++-----------------
- arch/x86_64/ia32/ptrace32.c    |  722 +++++++++++++++++++++++-------------
- arch/x86_64/ia32/fpu32.c       |   92 ++++-
- arch/x86_64/kernel/ptrace.c    |  726 ++++++++++++++++++++++--------------
  arch/powerpc/kernel/Makefile   |    2 
  arch/powerpc/kernel/ptrace32.c |   20 -
- arch/powerpc/kernel/ptrace.c   |  645 ++++++++++++++++++++++----------
+ arch/powerpc/kernel/ptrace.c   |  644 ++++++++++++++++++++++----------
+ arch/x86/ia32/ptrace32.c       |  721 +++++++++++++++++++++++-------------
+ arch/x86/ia32/fpu32.c          |   92 ++++-
+ arch/x86/kernel/ptrace_32.c    |  806 +++++++++++++++++++++++-----------------
+ arch/x86/kernel/i387_32.c      |  143 ++++---
+ arch/x86/kernel/ptrace_64.c    |  720 ++++++++++++++++++++++--------------
  kernel/ptrace.c                |    9 
  include/linux/tracehook.h      |  255 ++++++++++++-
- include/asm-i386/i387.h        |   13 -
- include/asm-x86_64/fpu32.h     |    3 
- include/asm-x86_64/tracehook.h |    8 
- 13 files changed, 2230 insertions(+), 1219 deletions(-)
+ include/asm-x86/fpu32.h        |    3 
+ include/asm-x86/i387_32.h      |   13 -
+ include/asm-x86/tracehook.h    |    8 
+ 13 files changed, 2228 insertions(+), 1208 deletions(-)
 
---- linux-2.6/arch/i386/kernel/i387.c
-+++ linux-2.6/arch/i386/kernel/i387.c
-@@ -222,14 +222,10 @@ void set_fpu_twd( struct task_struct *ts
-  * FXSR floating point environment conversions.
-  */
+--- linux-2.6/arch/powerpc/kernel/Makefile
++++ linux-2.6/arch/powerpc/kernel/Makefile
+@@ -10,6 +10,8 @@ CFLAGS_prom_init.o      += -fPIC
+ CFLAGS_btext.o		+= -fPIC
+ endif
  
--static int convert_fxsr_to_user( struct _fpstate __user *buf,
--					struct i387_fxsave_struct *fxsave )
-+static inline void
-+convert_fxsr_env_to_i387(unsigned long env[7],
-+			 struct i387_fxsave_struct *fxsave)
- {
--	unsigned long env[7];
--	struct _fpreg __user *to;
--	struct _fpxreg *from;
--	int i;
--
- 	env[0] = (unsigned long)fxsave->cwd | 0xffff0000ul;
- 	env[1] = (unsigned long)fxsave->swd | 0xffff0000ul;
- 	env[2] = twd_fxsr_to_i387(fxsave);
-@@ -237,7 +233,17 @@ static int convert_fxsr_to_user( struct 
- 	env[4] = fxsave->fcs | ((unsigned long)fxsave->fop << 16);
- 	env[5] = fxsave->foo;
- 	env[6] = fxsave->fos;
-+}
++CFLAGS_ptrace.o		+= -DUTS_MACHINE='"$(UTS_MACHINE)"'
 +
-+static int convert_fxsr_to_user(struct _fpstate __user *buf,
-+				struct i387_fxsave_struct *fxsave)
-+{
-+	unsigned long env[7];
-+	struct _fpreg __user *to;
-+	struct _fpxreg *from;
-+	int i;
+ obj-y				:= semaphore.o cputable.o ptrace.o syscalls.o \
+ 				   irq.o align.o signal_32.o pmc.o vdso.o \
+ 				   init_task.o process.o systbl.o idle.o \
+--- linux-2.6/arch/powerpc/kernel/ptrace32.c
++++ linux-2.6/arch/powerpc/kernel/ptrace32.c
+@@ -35,10 +35,6 @@
+ #include <asm/system.h>
+ #include <asm/tracehook.h>
  
-+	convert_fxsr_env_to_i387(env, fxsave);
- 	if ( __copy_to_user( buf, env, 7 * sizeof(unsigned long) ) )
- 		return 1;
+-/*
+- * does not yet catch signals sent when the child dies.
+- * in exit.c or in signal.c.
+- */
  
-@@ -255,6 +261,20 @@ static int convert_fxsr_to_user( struct 
- 	return 0;
- }
+ /*
+  * Here are the old "legacy" powerpc specific getregs/setregs ptrace calls,
+@@ -173,7 +169,7 @@ long compat_sys_ptrace(int request, int 
  
-+static inline void
-+convert_fxsr_env_from_i387(struct i387_fxsave_struct *fxsave,
-+			   const unsigned long env[7])
-+{
-+	fxsave->cwd = (unsigned short)(env[0] & 0xffff);
-+	fxsave->swd = (unsigned short)(env[1] & 0xffff);
-+	fxsave->twd = twd_i387_to_fxsr((unsigned short)(env[2] & 0xffff));
-+	fxsave->fip = env[3];
-+	fxsave->fop = (unsigned short)((env[4] & 0xffff0000ul) >> 16);
-+	fxsave->fcs = (env[4] & 0xffff);
-+	fxsave->foo = env[5];
-+	fxsave->fos = env[6];
-+}
-+
- static int convert_fxsr_from_user( struct i387_fxsave_struct *fxsave,
- 					  struct _fpstate __user *buf )
- {
-@@ -266,14 +286,7 @@ static int convert_fxsr_from_user( struc
- 	if ( __copy_from_user( env, buf, 7 * sizeof(long) ) )
- 		return 1;
+ 		CHECK_FULL_REGS(child->thread.regs);
+ 		if (index < PT_FPR0) {
+-			tmp = ptrace_get_reg(child, index);
++			tmp = 0;/*ptrace_get_reg(child, index);*/
+ 		} else {
+ 			flush_fp_to_thread(child);
+ 			/*
+@@ -223,7 +219,7 @@ long compat_sys_ptrace(int request, int 
+ 			flush_fp_to_thread(child);
+ 			tmp = ((unsigned long int *)child->thread.fpr)[numReg - PT_FPR0];
+ 		} else { /* register within PT_REGS struct */
+-			tmp = ptrace_get_reg(child, numReg);
++/*			tmp = ptrace_get_reg(child, numReg);*/
+ 		} 
+ 		reg32bits = ((u32*)&tmp)[part];
+ 		ret = put_user(reg32bits, (u32 __user *)data);
+@@ -281,7 +277,7 @@ long compat_sys_ptrace(int request, int 
  
--	fxsave->cwd = (unsigned short)(env[0] & 0xffff);
--	fxsave->swd = (unsigned short)(env[1] & 0xffff);
--	fxsave->twd = twd_i387_to_fxsr((unsigned short)(env[2] & 0xffff));
--	fxsave->fip = env[3];
--	fxsave->fop = (unsigned short)((env[4] & 0xffff0000ul) >> 16);
--	fxsave->fcs = (env[4] & 0xffff);
--	fxsave->foo = env[5];
--	fxsave->fos = env[6];
-+	convert_fxsr_env_from_i387(fxsave, env);
+ 		CHECK_FULL_REGS(child->thread.regs);
+ 		if (index < PT_FPR0) {
+-			ret = ptrace_put_reg(child, index, data);
++/*			ret = ptrace_put_reg(child, index, data);*/
+ 		} else {
+ 			flush_fp_to_thread(child);
+ 			/*
+@@ -319,12 +315,12 @@ long compat_sys_ptrace(int request, int 
+ 			break;
+ 		CHECK_FULL_REGS(child->thread.regs);
+ 		if (numReg < PT_FPR0) {
+-			unsigned long freg = ptrace_get_reg(child, numReg);
++			unsigned long freg = 0;/*ptrace_get_reg(child, numReg);*/
+ 			if (index % 2)
+ 				freg = (freg & ~0xfffffffful) | (data & 0xfffffffful);
+ 			else
+ 				freg = (freg & 0xfffffffful) | (data << 32);
+-			ret = ptrace_put_reg(child, numReg, freg);
++/*			ret = ptrace_put_reg(child, numReg, freg);*/
+ 		} else {
+ 			flush_fp_to_thread(child);
+ 			((unsigned int *)child->thread.regs)[index] = data;
+@@ -358,8 +354,8 @@ long compat_sys_ptrace(int request, int 
+ 		CHECK_FULL_REGS(child->thread.regs);
+ 		ret = 0;
+ 		for (ui = 0; ui < PT_REGS_COUNT; ui ++) {
+-			ret |= __put_user(ptrace_get_reg(child, ui),
+-					  (unsigned int __user *) data);
++/*			ret |= __put_user(ptrace_get_reg(child, ui),
++					  (unsigned int __user *) data);*/
+ 			data += sizeof(int);
+ 		}
+ 		break;
+@@ -379,7 +375,7 @@ long compat_sys_ptrace(int request, int 
+ 			ret = __get_user(tmp, (unsigned int __user *) data);
+ 			if (ret)
+ 				break;
+-			ptrace_put_reg(child, ui, tmp);
++/*			ptrace_put_reg(child, ui, tmp);*/
+ 			data += sizeof(int);
+ 		}
+ 		break;
+--- linux-2.6/arch/powerpc/kernel/ptrace.c
++++ linux-2.6/arch/powerpc/kernel/ptrace.c
+@@ -27,6 +27,7 @@
+ #include <linux/signal.h>
+ #include <linux/seccomp.h>
+ #include <linux/audit.h>
++#include <linux/elf.h>
+ #ifdef CONFIG_PPC32
+ #include <linux/module.h>
+ #endif
+@@ -38,11 +39,6 @@
[...4959 lines suppressed...]
- 	}
- 
--	case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */
--	case PTRACE_CONT: { /* restart after signal. */
--		ret = -EIO;
--		if (!valid_signal(data))
--			break;
--		if (request == PTRACE_SYSCALL)
--			set_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
--		else
--			clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
--		child->exit_code = data;
--		/* make sure the single step bit is not set. */
--		tracehook_disable_single_step(child);
--		wake_up_process(child);
--		ret = 0;
--		break;
--	}
--
--/*
-- * make the child exit.  Best I can do is send it a sigkill.
-- * perhaps it should be put in the status that it wants to
-- * exit.
-- */
--	case PTRACE_KILL: {
--		ret = 0;
--		if (child->exit_state == EXIT_ZOMBIE)	/* already dead */
--			break;
--		child->exit_code = SIGKILL;
--		/* make sure the single step bit is not set. */
--		tracehook_disable_single_step(child);
--		wake_up_process(child);
--		break;
--	}
--
--	case PTRACE_SINGLESTEP: {  /* set the trap flag. */
--		ret = -EIO;
--		if (!valid_signal(data))
--			break;
--		clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
--		tracehook_enable_single_step(child);
--		child->exit_code = data;
--		/* give it a chance to run. */
--		wake_up_process(child);
--		ret = 0;
--		break;
--	}
--
- 	case PTRACE_GET_DEBUGREG: {
- 		ret = -EINVAL;
- 		/* We only support one DABR and no IABRS at the moment */
-@@ -501,7 +728,7 @@ long arch_ptrace(struct task_struct *chi
- 	}
- 
- 	case PTRACE_SET_DEBUGREG:
--		ret = ptrace_set_debugreg(child, addr, data);
-+/*		ret = ptrace_set_debugreg(child, addr, data);*/
- 		break;
- 
- 	case PTRACE_DETACH:
-@@ -520,8 +747,8 @@ long arch_ptrace(struct task_struct *chi
- 		}
- 		ret = 0;
- 		for (ui = 0; ui < PT_REGS_COUNT; ui ++) {
--			ret |= __put_user(ptrace_get_reg(child, ui),
--					  (unsigned long __user *) data);
-+/*			ret |= __put_user(ptrace_get_reg(child, ui),
-+					  (unsigned long __user *) data);*/
- 			data += sizeof(long);
- 		}
- 		break;
-@@ -543,7 +770,7 @@ long arch_ptrace(struct task_struct *chi
- 			ret = __get_user(tmp, (unsigned long __user *) data);
- 			if (ret)
- 				break;
--			ptrace_put_reg(child, ui, tmp);
-+/*			ptrace_put_reg(child, ui, tmp);*/
- 			data += sizeof(long);
- 		}
- 		break;
-@@ -551,13 +778,13 @@ long arch_ptrace(struct task_struct *chi
- 
- 	case PTRACE_GETFPREGS: { /* Get the child FPU state (FPR0...31 + FPSCR) */
- 		flush_fp_to_thread(child);
--		ret = get_fpregs((void __user *)data, child, 1);
-+/*		ret = get_fpregs((void __user *)data, child, 1);*/
- 		break;
- 	}
- 
- 	case PTRACE_SETFPREGS: { /* Set the child FPU state (FPR0...31 + FPSCR) */
- 		flush_fp_to_thread(child);
--		ret = set_fpregs((void __user *)data, child, 1);
-+/*		ret = set_fpregs((void __user *)data, child, 1);*/
- 		break;
- 	}
- 
-@@ -565,13 +792,13 @@ long arch_ptrace(struct task_struct *chi
- 	case PTRACE_GETVRREGS:
- 		/* Get the child altivec register state. */
- 		flush_altivec_to_thread(child);
--		ret = get_vrregs((unsigned long __user *)data, child);
-+/*		ret = get_vrregs((unsigned long __user *)data, child);*/
- 		break;
- 
- 	case PTRACE_SETVRREGS:
- 		/* Set the child altivec register state. */
- 		flush_altivec_to_thread(child);
--		ret = set_vrregs(child, (unsigned long __user *)data);
-+/*		ret = set_vrregs(child, (unsigned long __user *)data);*/
- 		break;
- #endif
- #ifdef CONFIG_SPE
-@@ -579,7 +806,7 @@ long arch_ptrace(struct task_struct *chi
- 		/* Get the child spe register state. */
- 		if (child->thread.regs->msr & MSR_SPE)
- 			giveup_spe(child);
--		ret = get_evrregs((unsigned long __user *)data, child);
-+/*		ret = get_evrregs((unsigned long __user *)data, child);*/
- 		break;
- 
- 	case PTRACE_SETEVRREGS:
-@@ -588,7 +815,7 @@ long arch_ptrace(struct task_struct *chi
- 		 * of register state from memory */
- 		if (child->thread.regs->msr & MSR_SPE)
- 			giveup_spe(child);
--		ret = set_evrregs(child, (unsigned long __user *)data);
-+/*		ret = set_evrregs(child, (unsigned long __user *)data);*/
- 		break;
- #endif
- 
++
+ asmlinkage void syscall_trace_enter(struct pt_regs *regs)
+ {
+ 	/* do the secure computing check first */
 --- linux-2.6/kernel/ptrace.c
 +++ linux-2.6/kernel/ptrace.c
-@@ -99,13 +99,6 @@ int ptrace_detach(struct task_struct *ch
+@@ -100,13 +100,6 @@ int ptrace_detach(struct task_struct *ch
  	if (!valid_signal(data))
  		return -EIO;
  
@@ -3868,9 +3854,9 @@
  	return -ENOSYS;
  }
  
-@@ -213,12 +206,10 @@ struct task_struct *ptrace_get_task_stru
- 	return child;
- }
+@@ -218,12 +211,10 @@ struct task_struct *ptrace_get_task_stru
+ #define arch_ptrace_attach(child)	do { } while (0)
+ #endif
  
 -#ifndef __ARCH_SYS_PTRACE
  asmlinkage long sys_ptrace(long request, long pid, long addr, long data)
@@ -4152,8 +4138,18 @@
  /*
   * Following are entry points from core code, where the user debugging
   * support can affect the normal behavior.  The locking situation is
---- linux-2.6/include/asm-i386/i387.h
-+++ linux-2.6/include/asm-i386/i387.h
+--- linux-2.6/include/asm-x86/fpu32.h
++++ linux-2.6/include/asm-x86/fpu32.h
+@@ -7,4 +7,7 @@ int restore_i387_ia32(struct task_struct
+ int save_i387_ia32(struct task_struct *tsk, struct _fpstate_ia32 __user *buf, 
+ 		   struct pt_regs *regs, int fsave);
+ 
++int get_fpregs32(struct user_i387_ia32_struct *, struct task_struct *);
++int set_fpregs32(struct task_struct *, const struct user_i387_ia32_struct *);
++
+ #endif
+--- linux-2.6/include/asm-x86/i387_32.h
++++ linux-2.6/include/asm-x86/i387_32.h
 @@ -130,17 +130,12 @@ extern int save_i387( struct _fpstate __
  extern int restore_i387( struct _fpstate __user *buf );
  
@@ -4176,21 +4172,11 @@
  
  /*
   * FPU state for core dumps...
---- linux-2.6/include/asm-x86_64/fpu32.h
-+++ linux-2.6/include/asm-x86_64/fpu32.h
-@@ -7,4 +7,7 @@ int restore_i387_ia32(struct task_struct
- int save_i387_ia32(struct task_struct *tsk, struct _fpstate_ia32 __user *buf, 
- 		   struct pt_regs *regs, int fsave);
+--- linux-2.6/include/asm-x86/tracehook.h
++++ linux-2.6/include/asm-x86/tracehook.h
+@@ -60,4 +60,12 @@ static inline void tracehook_abort_sysca
  
-+int get_fpregs32(struct user_i387_ia32_struct *, struct task_struct *);
-+int set_fpregs32(struct task_struct *, const struct user_i387_ia32_struct *);
-+
  #endif
---- linux-2.6/include/asm-x86_64/tracehook.h
-+++ linux-2.6/include/asm-x86_64/tracehook.h
-@@ -48,4 +48,12 @@ static inline void tracehook_abort_sysca
- 	regs->orig_rax = -1L;
- }
  
 +/*
 + * These are used directly by some of the regset code.

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

Index: linux-2.6-utrace-tracehook-avr32.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-utrace-tracehook-avr32.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6-utrace-tracehook-avr32.patch	20 Jul 2007 19:52:27 -0000	1.2
+++ linux-2.6-utrace-tracehook-avr32.patch	15 Feb 2008 23:58:52 -0000	1.3
@@ -9,11 +9,11 @@
 
 ---
 
- arch/avr32/kernel/ptrace.c       |  102 ++++++++++----------------------------
+ arch/avr32/kernel/ptrace.c       |   50 +++++++++++++++----------------
  arch/avr32/kernel/process.c      |    2 -
- arch/avr32/kernel/entry-avr32b.S |   10 +++-
- include/asm-avr32/tracehook.h    |   62 +++++++++++++++++++++++
- 4 files changed, 96 insertions(+), 80 deletions(-)
+ arch/avr32/kernel/entry-avr32b.S |   10 +++++-
+ include/asm-avr32/tracehook.h    |   62 ++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 94 insertions(+), 30 deletions(-)
  create include/asm-avr32/tracehook.h
 
 --- linux-2.6/arch/avr32/kernel/ptrace.c
@@ -43,62 +43,16 @@
  #include <asm/mmu_context.h>
  #include <linux/kdebug.h>
  
-@@ -28,52 +24,7 @@ static struct pt_regs *get_user_regs(str
+@@ -28,6 +24,7 @@ static struct pt_regs *get_user_regs(str
  				  THREAD_SIZE - sizeof(struct pt_regs));
  }
  
--static void ptrace_single_step(struct task_struct *tsk)
--{
--	pr_debug("ptrace_single_step: pid=%u, SR=0x%08lx\n",
--		 tsk->pid, tsk->thread.cpu_context.sr);
--	if (!(tsk->thread.cpu_context.sr & SR_D)) {
--		/*
--		 * Set a breakpoint at the current pc to force the
--		 * process into debug mode.  The syscall/exception
--		 * exit code will set a breakpoint at the return
--		 * address when this flag is set.
--		 */
--		pr_debug("ptrace_single_step: Setting TIF_BREAKPOINT\n");
--		set_tsk_thread_flag(tsk, TIF_BREAKPOINT);
--	}
--
--	/* The monitor code will do the actual step for us */
--	set_tsk_thread_flag(tsk, TIF_SINGLE_STEP);
--}
--
--/*
-- * Called by kernel/ptrace.c when detaching
-- *
-- * Make sure any single step bits, etc. are not set
-- */
--void ptrace_disable(struct task_struct *child)
--{
--	clear_tsk_thread_flag(child, TIF_SINGLE_STEP);
--}
--
--/*
-- * Handle hitting a breakpoint
-- */
--static void ptrace_break(struct task_struct *tsk, struct pt_regs *regs)
--{
--	siginfo_t info;
--
--	info.si_signo = SIGTRAP;
--	info.si_errno = 0;
--	info.si_code  = TRAP_BRKPT;
--	info.si_addr  = (void __user *)instruction_pointer(regs);
--
--	pr_debug("ptrace_break: Sending SIGTRAP to PID %u (pc = 0x%p)\n",
--		 tsk->pid, info.si_addr);
--	force_sig_info(SIGTRAP, &info, tsk);
--}
--
 +#if 0
- /*
-  * Read the word at offset "offset" into the task's "struct user". We
-  * actually access the pt_regs struct stored on the kernel stack.
-@@ -248,32 +199,31 @@ long arch_ptrace(struct task_struct *chi
- 	pr_debug("sys_ptrace returning %d (DC = 0x%08lx)\n", ret, __mfdr(DBGREG_DC));
+ static void ptrace_single_step(struct task_struct *tsk)
+ {
+ 	pr_debug("ptrace_single_step: pid=%u, PC=0x%08lx, SR=0x%08lx\n",
+@@ -229,30 +226,31 @@ long arch_ptrace(struct task_struct *chi
+ 
  	return ret;
  }
 +#endif
@@ -106,13 +60,11 @@
 -asmlinkage void syscall_trace(void)
 +asmlinkage void syscall_trace(struct pt_regs *regs, int is_exit)
  {
--	pr_debug("syscall_trace called\n");
  	if (!test_thread_flag(TIF_SYSCALL_TRACE))
  		return;
 -	if (!(current->ptrace & PT_PTRACED))
 -		return;
  
--	pr_debug("syscall_trace: notifying parent\n");
 -	/* The 0x80 provides a way for the tracing parent to
 -	 * distinguish between a syscall stop and SIGTRAP delivery */
 -	ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
@@ -148,23 +100,10 @@
 +	force_sig_info(SIGTRAP, &info, tsk);
  }
  
- asmlinkage void do_debug_priv(struct pt_regs *regs)
-@@ -352,10 +302,10 @@ asmlinkage void do_debug(struct pt_regs 
- 			__mtdr(DBGREG_DC, dc);
- 
- 			clear_thread_flag(TIF_SINGLE_STEP);
--			ptrace_break(current, regs);
-+			do_breakpoint(current, regs);
- 		}
- 	} else {
- 		/* regular breakpoint */
--		ptrace_break(current, regs);
-+		do_breakpoint(current, regs);
- 	}
- }
+ /*
 --- linux-2.6/arch/avr32/kernel/process.c
 +++ linux-2.6/arch/avr32/kernel/process.c
-@@ -382,8 +382,6 @@ asmlinkage int sys_execve(char __user *u
+@@ -383,8 +383,6 @@ asmlinkage int sys_execve(char __user *u
  		goto out;
  
  	error = do_execve(filename, uargv, uenvp, regs);
@@ -175,7 +114,7 @@
  out:
 --- linux-2.6/arch/avr32/kernel/entry-avr32b.S
 +++ linux-2.6/arch/avr32/kernel/entry-avr32b.S
-@@ -223,15 +223,21 @@ ret_from_fork:
+@@ -230,15 +230,21 @@ ret_from_fork:
  	rjmp    syscall_exit_cont
  
  syscall_trace_enter:

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

Index: linux-2.6-utrace-tracehook-ia64.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-utrace-tracehook-ia64.patch,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- linux-2.6-utrace-tracehook-ia64.patch	11 Sep 2007 18:03:55 -0000	1.4
+++ linux-2.6-utrace-tracehook-ia64.patch	15 Feb 2008 23:58:52 -0000	1.5
@@ -161,7 +161,7 @@
  #include <linux/sched.h>
  #include <linux/signal.h>
  #include <linux/smp.h>
-@@ -429,6 +429,8 @@ handle_signal (unsigned long sig, struct
+@@ -421,6 +421,8 @@ handle_signal (unsigned long sig, struct
  		sigaddset(&current->blocked, sig);
  	recalc_sigpending();
  	spin_unlock_irq(&current->sighand->siglock);

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

Index: linux-2.6-utrace-tracehook-s390.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-utrace-tracehook-s390.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6-utrace-tracehook-s390.patch	20 Jul 2007 19:52:27 -0000	1.2
+++ linux-2.6-utrace-tracehook-s390.patch	15 Feb 2008 23:58:52 -0000	1.3
@@ -26,7 +26,7 @@
  #include <linux/timer.h>
  #include <linux/mm.h>
  #include <linux/smp.h>
-@@ -339,7 +339,7 @@ void __kprobes do_single_step(struct pt_
+@@ -340,7 +340,7 @@ void __kprobes do_single_step(struct pt_
  					SIGTRAP) == NOTIFY_STOP){
  		return;
  	}
@@ -35,7 +35,7 @@
  		force_sig(SIGTRAP, current);
  }
  
-@@ -440,7 +440,7 @@ static void illegal_op(struct pt_regs * 
+@@ -441,7 +441,7 @@ static void illegal_op(struct pt_regs * 
  		if (get_user(*((__u16 *) opcode), (__u16 __user *) location))
  			return;
  		if (*((__u16 *) opcode) == S390_BREAKPOINT_U16) {
@@ -157,7 +157,7 @@
  		/* give it a chance to run. */
  		wake_up_process(child);
  		return 0;
-@@ -731,30 +750,17 @@ syscall_trace(struct pt_regs *regs, int 
+@@ -726,30 +745,17 @@ syscall_trace(struct pt_regs *regs, int 
  	if (unlikely(current->audit_context) && entryexit)
  		audit_syscall_exit(AUDITSC_RESULT(regs->gprs[2]), regs->gprs[2]);
  

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

Index: linux-2.6-utrace-tracehook-um.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-utrace-tracehook-um.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-utrace-tracehook-um.patch	31 Jul 2007 18:25:55 -0000	1.3
+++ linux-2.6-utrace-tracehook-um.patch	15 Feb 2008 23:58:52 -0000	1.4
@@ -19,280 +19,30 @@
 
 ---
 
- arch/um/kernel/ptrace.c         |  315 ++++-----------------------------------
- arch/um/kernel/skas/syscall.c   |    4 
- arch/um/kernel/signal.c         |    5 -
- arch/um/kernel/exec.c           |    1 
- arch/um/kernel/process.c        |    6 -
- arch/um/sys-i386/signal.c       |    4 
- include/asm-um/ptrace-x86_64.h  |    2 
- include/asm-um/ptrace-generic.h |    3 
- include/asm-um/ptrace-i386.h    |    2 
- include/asm-um/tracehook.h      |   57 +++++++
- include/asm-um/thread_info.h    |    3 
- 11 files changed, 106 insertions(+), 296 deletions(-)
+ arch/um/kernel/ptrace.c        |   55 ++++++++++++++-------------------------
+ arch/um/kernel/skas/syscall.c  |    2 -
+ arch/um/kernel/signal.c        |    5 +++-
+ arch/um/kernel/exec.c          |    1 -
+ arch/um/kernel/process.c       |    2 +
+ arch/um/sys-i386/signal.c      |    4 ---
+ include/asm-um/ptrace-x86_64.h |    2 +
+ include/asm-um/ptrace-i386.h   |    2 +
+ include/asm-um/tracehook.h     |   57 ++++++++++++++++++++++++++++++++++++++++
+ include/asm-um/thread_info.h   |    3 ++
+ 10 files changed, 89 insertions(+), 44 deletions(-)
  create include/asm-um/tracehook.h
 
 --- linux-2.6/arch/um/kernel/ptrace.c
 +++ linux-2.6/arch/um/kernel/ptrace.c
-@@ -3,249 +3,21 @@
-  * Licensed under the GPL
-  */
- 
--#include "linux/sched.h"
--#include "linux/mm.h"
--#include "linux/errno.h"
--#include "linux/smp_lock.h"
--#include "linux/security.h"
--#include "linux/ptrace.h"
--#include "linux/audit.h"
--#ifdef CONFIG_PROC_MM
--#include "linux/proc_mm.h"
--#endif
--#include "asm/ptrace.h"
--#include "asm/uaccess.h"
--#include "kern_util.h"
--#include "skas_ptrace.h"
--#include "sysdep/ptrace.h"
--#include "os.h"
--
--static inline void set_singlestepping(struct task_struct *child, int on)
--{
--        if (on)
--                child->ptrace |= PT_DTRACE;
--        else
--                child->ptrace &= ~PT_DTRACE;
--        child->thread.singlestep_syscall = 0;
--
--#ifdef SUBARCH_SET_SINGLESTEPPING
--        SUBARCH_SET_SINGLESTEPPING(child, on);
--#endif
--}
-+#include <linux/audit.h>
-+#include <linux/elf.h>
-+#include <linux/module.h>
-+#include <linux/ptrace.h>
-+#include <linux/tracehook.h>
- 
- /*
-  * Called by kernel/ptrace.c when detaching..
-  */
- void ptrace_disable(struct task_struct *child)
- { 
--        set_singlestepping(child,0);
--}
--
--extern int peek_user(struct task_struct * child, long addr, long data);
--extern int poke_user(struct task_struct * child, long addr, long data);
--
--long arch_ptrace(struct task_struct *child, long request, long addr, long data)
--{
--	int i, ret;
--	unsigned long __user *p = (void __user *)(unsigned long)data;
--
--	switch (request) {
--		/* when I and D space are separate, these will need to be fixed. */
--	case PTRACE_PEEKTEXT: /* read word at location addr. */ 
--	case PTRACE_PEEKDATA:
--		ret = generic_ptrace_peekdata(child, addr, data);
--		break;
--
--	/* read the word at location addr in the USER area. */
--        case PTRACE_PEEKUSR:
--                ret = peek_user(child, addr, data);
--                break;
--
--	/* when I and D space are separate, this will have to be fixed. */
--	case PTRACE_POKETEXT: /* write the word at location addr. */
--	case PTRACE_POKEDATA:
--		ret = generic_ptrace_pokedata(child, addr, data);
--		break;
--
--	case PTRACE_POKEUSR: /* write the word at location addr in the USER area */
--                ret = poke_user(child, addr, data);
--                break;
--
--	case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */
--	case PTRACE_CONT: { /* restart after signal. */
--		ret = -EIO;
--		if (!valid_signal(data))
--			break;
--
--                set_singlestepping(child, 0);
--		if (request == PTRACE_SYSCALL) {
--			set_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
--		}
--		else {
--			clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
--		}
--		child->exit_code = data;
--		wake_up_process(child);
--		ret = 0;
--		break;
--	}
--
--/*
-- * make the child exit.  Best I can do is send it a sigkill. 
-- * perhaps it should be put in the status that it wants to 
-- * exit.
-- */
--	case PTRACE_KILL: {
--		ret = 0;
--		if (child->exit_state == EXIT_ZOMBIE)	/* already dead */
--			break;
--
--                set_singlestepping(child, 0);
--		child->exit_code = SIGKILL;
--		wake_up_process(child);
--		break;
--	}
--
--	case PTRACE_SINGLESTEP: {  /* set the trap flag. */
--		ret = -EIO;
--		if (!valid_signal(data))
--			break;
--		clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
--                set_singlestepping(child, 1);
--		child->exit_code = data;
--		/* give it a chance to run. */
--		wake_up_process(child);
--		ret = 0;
--		break;
--	}
--
--	case PTRACE_DETACH:
--		/* detach a process that was attached. */
--		ret = ptrace_detach(child, data);
-- 		break;
--
--#ifdef PTRACE_GETREGS
--	case PTRACE_GETREGS: { /* Get all gp regs from the child. */
--		if (!access_ok(VERIFY_WRITE, p, MAX_REG_OFFSET)) {
--			ret = -EIO;
--			break;
--		}
--		for ( i = 0; i < MAX_REG_OFFSET; i += sizeof(long) ) {
--			__put_user(getreg(child, i), p);
--			p++;
--		}
--		ret = 0;
--		break;
--	}
--#endif
--#ifdef PTRACE_SETREGS
--	case PTRACE_SETREGS: { /* Set all gp regs in the child. */
--		unsigned long tmp = 0;
--		if (!access_ok(VERIFY_READ, p, MAX_REG_OFFSET)) {
--			ret = -EIO;
--			break;
--		}
--		for ( i = 0; i < MAX_REG_OFFSET; i += sizeof(long) ) {
--			__get_user(tmp, p);
--			putreg(child, i, tmp);
--			p++;
--		}
--		ret = 0;
--		break;
--	}
--#endif
--#ifdef PTRACE_GETFPREGS
--	case PTRACE_GETFPREGS: /* Get the child FPU state. */
--		ret = get_fpregs(data, child);
--		break;
--#endif
--#ifdef PTRACE_SETFPREGS
--	case PTRACE_SETFPREGS: /* Set the child FPU state. */
--	        ret = set_fpregs(data, child);
--		break;
--#endif
--#ifdef PTRACE_GETFPXREGS
--	case PTRACE_GETFPXREGS: /* Get the child FPU state. */
--		ret = get_fpxregs(data, child);
--		break;
--#endif
--#ifdef PTRACE_SETFPXREGS
--	case PTRACE_SETFPXREGS: /* Set the child FPU state. */
--		ret = set_fpxregs(data, child);
--		break;
--#endif
--	case PTRACE_GET_THREAD_AREA:
--		ret = ptrace_get_thread_area(child, addr,
--					     (struct user_desc __user *) data);
--		break;
--
--	case PTRACE_SET_THREAD_AREA:
--		ret = ptrace_set_thread_area(child, addr,
--					     (struct user_desc __user *) data);
--		break;
--
--	case PTRACE_FAULTINFO: {
--		/* Take the info from thread->arch->faultinfo,
--		 * but transfer max. sizeof(struct ptrace_faultinfo).
--		 * On i386, ptrace_faultinfo is smaller!
--		 */
--		ret = copy_to_user(p, &child->thread.arch.faultinfo,
--				   sizeof(struct ptrace_faultinfo));
--		if(ret)
--			break;
--		break;
--	}
--
--#ifdef PTRACE_LDT
--	case PTRACE_LDT: {
--		struct ptrace_ldt ldt;
--
--		if(copy_from_user(&ldt, p, sizeof(ldt))){
--			ret = -EIO;
--			break;
--		}
--
--		/* This one is confusing, so just punt and return -EIO for 
--		 * now
--		 */
--		ret = -EIO;
--		break;
--	}
--#endif
--#ifdef CONFIG_PROC_MM
--	case PTRACE_SWITCH_MM: {
--		struct mm_struct *old = child->mm;
--		struct mm_struct *new = proc_mm_get_mm(data);
--
--		if(IS_ERR(new)){
--			ret = PTR_ERR(new);
--			break;
--		}
--
--		atomic_inc(&new->mm_users);
--		child->mm = new;
--		child->active_mm = new;
--		mmput(old);
--		ret = 0;
--		break;
--	}
--#endif
--#ifdef PTRACE_ARCH_PRCTL
--        case PTRACE_ARCH_PRCTL:
--                /* XXX Calls ptrace on the host - needs some SMP thinking */
--                ret = arch_prctl_skas(child, data, (void *) addr);
--                break;
--#endif
--	default:
--		ret = ptrace_request(child, request, addr, data);
--		break;
--	}
--
--	return ret;
- }
+@@ -5,6 +5,7 @@
  
--void send_sigtrap(struct task_struct *tsk, union uml_pt_regs *regs,
--		  int error_code)
-+static void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs,
-+			 int error_code)
- {
- 	struct siginfo info;
- 
-@@ -254,56 +26,39 @@ void send_sigtrap(struct task_struct *ts
+ #include "linux/audit.h"
+ #include "linux/ptrace.h"
++#include "linux/tracehook.h"
+ #include "linux/sched.h"
+ #include "asm/uaccess.h"
+ #ifdef CONFIG_PROC_MM
+@@ -235,20 +236,18 @@ void send_sigtrap(struct task_struct *ts
  	info.si_code = TRAP_BRKPT;
  
  	/* User-mode eip? */
@@ -300,33 +50,28 @@
 +	info.si_addr = UPT_IS_USER(&regs->regs) ?
 +		(void __user *) UPT_IP(&regs->regs) : NULL;
  
- 	/* Send us the fakey SIGTRAP */
+ 	/* Send us the fake SIGTRAP */
  	force_sig_info(SIGTRAP, &info, tsk);
  }
  
--/* XXX Check PT_DTRACE vs TIF_SINGLESTEP for singlestepping check and
+-/*
+- * XXX Check PT_DTRACE vs TIF_SINGLESTEP for singlestepping check and
 - * PT_PTRACED vs TIF_SYSCALL_TRACE for syscall tracing check
-+/* notification of system call entry/exit
-+ * - triggered by current->work.syscall_trace
-  */
--void syscall_trace(union uml_pt_regs *regs, int entryexit)
-+void do_syscall_trace(struct pt_regs *regs, int entryexit)
+- */
+ void syscall_trace(struct uml_pt_regs *regs, int entryexit)
  {
 -	int is_singlestep = (current->ptrace & PT_DTRACE) && entryexit;
 -	int tracesysgood;
--
--	if (unlikely(current->audit_context)) {
--		if (!entryexit)
--			audit_syscall_entry(HOST_AUDIT_ARCH,
--					    UPT_SYSCALL_NR(regs),
--					    UPT_SYSCALL_ARG1(regs),
--					    UPT_SYSCALL_ARG2(regs),
--					    UPT_SYSCALL_ARG3(regs),
--					    UPT_SYSCALL_ARG4(regs));
--		else audit_syscall_exit(AUDITSC_RESULT(UPT_SYSCALL_RET(regs)),
--                                        UPT_SYSCALL_RET(regs));
--	}
--
++	/* do the secure computing check first */
++	if (!entryexit)
++		secure_computing(PT_REGS_SYSCALL_NR(regs));
+ 
+ 	if (unlikely(current->audit_context)) {
+ 		if (!entryexit)
+@@ -262,33 +261,19 @@ void syscall_trace(struct uml_pt_regs *r
+ 					UPT_SYSCALL_RET(regs));
+ 	}
+ 
 -	/* Fake a debug trap */
 -	if (is_singlestep)
 -		send_sigtrap(current, regs, 0);
@@ -337,37 +82,31 @@
 -	if (!(current->ptrace & PT_PTRACED))
 -		return;
 -
--	/* the 0x80 provides a way for the tracing parent to distinguish
--	   between a syscall stop and SIGTRAP delivery */
+-	/*
+-	 * the 0x80 provides a way for the tracing parent to distinguish
+-	 * between a syscall stop and SIGTRAP delivery
+-	 */
 -	tracesysgood = (current->ptrace & PT_TRACESYSGOOD);
 -	ptrace_notify(SIGTRAP | (tracesysgood ? 0x80 : 0));
 -
 -	if (entryexit) /* force do_signal() --> is_syscall() */
 -		set_thread_flag(TIF_SIGPENDING);
 -
--	/* this isn't the same as continuing with a signal, but it will do
+-	/*
+-	 * this isn't the same as continuing with a signal, but it will do
 -	 * for normal use.  strace only continues with a signal if the
 -	 * stopping signal is not SIGTRAP.  -brl
 -	 */
 -	if (current->exit_code) {
 -		send_sig(current->exit_code, current, 1);
 -		current->exit_code = 0;
--	}
-+	/* do the secure computing check first */
-+	if (!entryexit)
-+		secure_computing(PT_REGS_SYSCALL_NR(regs));
-+
-+	if (unlikely(current->audit_context) && entryexit)
-+		audit_syscall_exit(AUDITSC_RESULT(UPT_SYSCALL_RET(&regs->regs)),
-+				   UPT_SYSCALL_RET(&regs->regs));
-+
 +	if (test_thread_flag(TIF_SYSCALL_TRACE))
 +		tracehook_report_syscall(regs, entryexit);
 +
 +	if (test_thread_flag(TIF_SINGLESTEP) && entryexit) {
 +		send_sigtrap(current, regs, 0);	/* XXX */
 +		tracehook_report_syscall_step(regs);
-+	}
+ 	}
 +
 +	if (unlikely(current->audit_context) && !entryexit)
 +		audit_syscall_entry(HOST_AUDIT_ARCH,
@@ -379,7 +118,7 @@
  }
 --- linux-2.6/arch/um/kernel/skas/syscall.c
 +++ linux-2.6/arch/um/kernel/skas/syscall.c
-@@ -19,8 +19,6 @@ void handle_syscall(union uml_pt_regs *r
+@@ -15,8 +15,6 @@ void handle_syscall(struct uml_pt_regs *
  	long result;
  	int syscall;
  
@@ -388,24 +127,17 @@
  	current->thread.nsyscalls++;
  	nsyscalls++;
  
-@@ -38,6 +36,4 @@ void handle_syscall(union uml_pt_regs *r
- 	else result = EXECUTE_SYSCALL(syscall, regs);
- 
- 	REGS_SET_SYSCALL_RETURN(r->skas.regs, result);
--
--	syscall_trace(r, 1);
- }
 --- linux-2.6/arch/um/kernel/signal.c
 +++ linux-2.6/arch/um/kernel/signal.c
-@@ -14,6 +14,7 @@
- #include "linux/tty.h"
- #include "linux/binfmts.h"
+@@ -5,6 +5,7 @@
+ 
+ #include "linux/module.h"
  #include "linux/ptrace.h"
 +#include "linux/tracehook.h"
+ #include "linux/sched.h"
+ #include "asm/siginfo.h"
  #include "asm/signal.h"
- #include "asm/uaccess.h"
- #include "asm/unistd.h"
-@@ -92,6 +93,8 @@ static int handle_signal(struct pt_regs 
+@@ -80,6 +81,8 @@ static int handle_signal(struct pt_regs 
  			sigaddset(&current->blocked, signr);
  		recalc_sigpending();
  		spin_unlock_irq(&current->sighand->siglock);
@@ -414,45 +146,39 @@
  	}
  
  	return err;
-@@ -147,7 +150,7 @@ static int kern_do_signal(struct pt_regs
+@@ -138,7 +141,7 @@ static int kern_do_signal(struct pt_regs
  	 * on the host.  The tracing thread will check this flag and
  	 * PTRACE_SYSCALL if necessary.
  	 */
--	if(current->ptrace & PT_DTRACE)
-+	if(test_thread_flag(TIF_SYSCALL_TRACE))
+-	if (current->ptrace & PT_DTRACE)
++	if (test_thread_flag(TIF_SYSCALL_TRACE))
  		current->thread.singlestep_syscall =
  			is_syscall(PT_REGS_IP(&current->thread.regs));
  
 --- linux-2.6/arch/um/kernel/exec.c
 +++ linux-2.6/arch/um/kernel/exec.c
-@@ -52,7 +52,6 @@ static long execve1(char *file, char __u
-         error = do_execve(file, argv, env, &current->thread.regs);
-         if (error == 0){
+@@ -61,7 +61,6 @@ static long execve1(char *file, char __u
+ 	error = do_execve(file, argv, env, &current->thread.regs);
+ 	if (error == 0) {
  		task_lock(current);
--                current->ptrace &= ~PT_DTRACE;
+-		current->ptrace &= ~PT_DTRACE;
  #ifdef SUBARCH_EXECVE1
  		SUBARCH_EXECVE1(&current->thread.regs.regs);
  #endif
 --- linux-2.6/arch/um/kernel/process.c
 +++ linux-2.6/arch/um/kernel/process.c
-@@ -387,11 +387,11 @@ int singlestepping(void * t)
+@@ -435,7 +435,7 @@ int singlestepping(void * t)
  {
  	struct task_struct *task = t ? t : current;
  
 -	if ( ! (task->ptrace & PT_DTRACE) )
--		return(0);
 +	if (!test_thread_flag(TIF_SINGLESTEP))
-+		return 0;
+ 		return 0;
  
  	if (task->thread.singlestep_syscall)
--		return(1);
-+		return 1;
- 
- 	return 2;
- }
 --- linux-2.6/arch/um/sys-i386/signal.c
 +++ linux-2.6/arch/um/sys-i386/signal.c
-@@ -274,8 +274,6 @@ int setup_signal_stack_sc(unsigned long 
+@@ -378,8 +378,6 @@ int setup_signal_stack_sc(unsigned long 
  	PT_REGS_EDX(regs) = (unsigned long) 0;
  	PT_REGS_ECX(regs) = (unsigned long) 0;
  
@@ -461,7 +187,7 @@
  	return 0;
  
  err:
-@@ -331,8 +329,6 @@ int setup_signal_stack_si(unsigned long 
+@@ -435,8 +433,6 @@ int setup_signal_stack_si(unsigned long 
  	PT_REGS_EDX(regs) = (unsigned long) &frame->info;
  	PT_REGS_ECX(regs) = (unsigned long) &frame->uc;
  
@@ -481,18 +207,6 @@
  #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-generic.h
-+++ linux-2.6/include/asm-um/ptrace-generic.h
-@@ -44,9 +44,6 @@ extern int set_fpxregs(unsigned long buf
- 
- extern void show_regs(struct pt_regs *regs);
- 
--extern void send_sigtrap(struct task_struct *tsk, union uml_pt_regs *regs,
--			 int error_code);
--
- extern int arch_copy_tls(struct task_struct *new);
- extern void clear_flushed_tls(struct task_struct *task);
- 
 --- linux-2.6/include/asm-um/ptrace-i386.h
 +++ linux-2.6/include/asm-um/ptrace-i386.h
 @@ -6,6 +6,8 @@

linux-2.6-utrace-tracehook.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.17 -r 1.18 linux-2.6-utrace-tracehook.patch
Index: linux-2.6-utrace-tracehook.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-utrace-tracehook.patch,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- linux-2.6-utrace-tracehook.patch	15 Dec 2007 00:01:06 -0000	1.17
+++ linux-2.6-utrace-tracehook.patch	15 Feb 2008 23:58:53 -0000	1.18
@@ -33,84 +33,82 @@
 
 ---
 
- arch/alpha/kernel/asm-offsets.c     |    2 
- arch/alpha/kernel/entry.S           |    4 
- arch/arm/kernel/ptrace.c            |   17 -
+ fs/binfmt_flat.c                    |    3 
+ fs/binfmt_som.c                     |    2 
+ fs/proc/base.c                      |   17 +
+ fs/proc/array.c                     |   10 +
+ fs/binfmt_elf_fdpic.c               |    7 -
+ fs/exec.c                           |   11 -
+ fs/binfmt_elf.c                     |   10 -
+ fs/binfmt_aout.c                    |    6 -
+ security/selinux/hooks.c            |   54 +++--
+ security/selinux/include/objsec.h   |    1 
+ arch/s390/kernel/compat_linux.c     |    3 
+ arch/s390/kernel/process.c          |    3 
  arch/frv/kernel/ptrace.c            |   15 -
- arch/i386/kernel/entry.S            |    7 
- arch/i386/kernel/process.c          |    3 
- arch/i386/kernel/ptrace.c           |  103 +-------
- arch/i386/kernel/signal.c           |   37 +--
- arch/i386/kernel/vm86.c             |    7 
- arch/i386/math-emu/fpu_entry.c      |    6 
- arch/ia64/kernel/asm-offsets.c      |    2 
- arch/ia64/kernel/fsys.S             |   16 -
- arch/ia64/kernel/mca.c              |    2 
- arch/mips/kernel/ptrace.c           |   23 --
+ arch/arm/kernel/ptrace.c            |   17 -
  arch/mips/kernel/sysirix.c          |    2 
- arch/powerpc/kernel/asm-offsets.c   |    2 
- arch/powerpc/kernel/process.c       |    5 
+ arch/mips/kernel/ptrace.c           |   23 --
+ arch/powerpc/kernel/sys_ppc32.c     |    5 
+ arch/powerpc/kernel/ptrace32.c      |    7 +
  arch/powerpc/kernel/ptrace.c        |   49 +---
- arch/powerpc/kernel/ptrace32.c      |    7 
  arch/powerpc/kernel/signal.c        |    3 
- arch/powerpc/kernel/sys_ppc32.c     |    5 
- arch/ppc/kernel/asm-offsets.c       |    2 
- arch/s390/kernel/compat_linux.c     |    3 
- arch/s390/kernel/process.c          |    3 
+ arch/powerpc/kernel/asm-offsets.c   |    2 
+ arch/powerpc/kernel/process.c       |    5 
+ arch/x86/math-emu/fpu_entry.c       |    6 -
+ arch/x86/ia32/sys_ia32.c            |    5 
+ arch/x86/ia32/ptrace32.c            |    2 
+ arch/x86/ia32/ia32_aout.c           |    6 -
+ arch/x86/ia32/ia32_signal.c         |    7 -
+ arch/x86/ia32/ia32entry.S           |    4 
+ arch/x86/kernel/vm86_32.c           |    7 -
+ arch/x86/kernel/process_64.c        |    5 
+ arch/x86/kernel/process_32.c        |    3 
+ arch/x86/kernel/entry_32.S          |    7 -
+ arch/x86/kernel/signal_64.c         |   28 +-
+ arch/x86/kernel/entry_64.S          |    8 -
+ arch/x86/kernel/ptrace_32.c         |  103 ++-------
+ arch/x86/kernel/traps_64.c          |    8 -
+ arch/x86/kernel/ptrace_64.c         |   57 ++---
+ arch/x86/kernel/signal_32.c         |   37 +--
+ arch/x86/mm/fault_64.c              |    2 
+ arch/alpha/kernel/asm-offsets.c     |    2 
+ arch/alpha/kernel/entry.S           |    4 
  arch/sparc64/kernel/binfmt_aout32.c |    2 
  arch/sparc64/kernel/process.c       |    3 
  arch/sparc64/kernel/sys_sparc32.c   |    3 
- arch/x86_64/ia32/ia32_aout.c        |    6 
- arch/x86_64/ia32/ia32_signal.c      |    7 
- arch/x86_64/ia32/ia32entry.S        |    4 
- arch/x86_64/ia32/ptrace32.c         |    2 
- arch/x86_64/ia32/sys_ia32.c         |    5 
- arch/x86_64/kernel/entry.S          |    8 
- arch/x86_64/kernel/process.c        |    5 
- arch/x86_64/kernel/ptrace.c         |   57 +---
- arch/x86_64/kernel/signal.c         |   28 +-
- arch/x86_64/kernel/traps.c          |    8 
- arch/x86_64/mm/fault.c              |    2 
- drivers/connector/cn_proc.c         |    4 
- fs/binfmt_aout.c                    |    6 
- fs/binfmt_elf.c                     |    6 
- fs/binfmt_elf_fdpic.c               |    7 
- fs/binfmt_flat.c                    |    3 
- fs/binfmt_som.c                     |    2 
- fs/exec.c                           |   11 
- fs/proc/array.c                     |   12 -
- fs/proc/base.c                      |   17 -
- include/asm-i386/signal.h           |    4 
- include/asm-i386/thread_info.h      |    7 
- include/asm-i386/tracehook.h        |   52 ++++
- include/asm-powerpc/tracehook.h     |   49 ++++
- include/asm-x86_64/thread_info.h    |    3 
- include/asm-x86_64/tracehook.h      |   51 ++++
- include/linux/init_task.h           |    3 
- include/linux/ptrace.h              |   18 -
- include/linux/sched.h               |   16 -
- include/linux/tracehook.h           |  414 ++++++++++++++++++++++++++++++++++++
- kernel/exit.c                       |  251 ++++++---------------
- kernel/fork.c                       |   66 +----
- kernel/ptrace.c                     |  298 +------------------------
- kernel/signal.c                     |  210 +++---------------
- kernel/sys.c                        |    2 
- kernel/timer.c                      |    6 
+ arch/ppc/kernel/asm-offsets.c       |    2 
+ arch/ia64/kernel/mca.c              |    2 
+ arch/ia64/kernel/asm-offsets.c      |    2 
+ arch/ia64/kernel/fsys.S             |   16 +
+ kernel/exit.c                       |  238 +++++---------------
+ kernel/sched.c                      |    2 
+ kernel/ptrace.c                     |  307 +-------------------------
+ kernel/timer.c                      |    6 -
+ kernel/signal.c                     |  210 ++++--------------
+ kernel/acct.c                       |    2 
  kernel/tsacct.c                     |    2 
+ kernel/sys.c                        |    2 
+ kernel/fork.c                       |   67 ++----
+ include/linux/ptrace.h              |   18 --
+ include/linux/sched.h               |   16 -
+ include/linux/init_task.h           |    3 
+ include/linux/tracehook.h           |  414 +++++++++++++++++++++++++++++++++++
+ include/asm-powerpc/tracehook.h     |   49 ++++
+ include/asm-x86/thread_info_32.h    |    7 -
+ include/asm-x86/thread_info_64.h    |    3 
+ include/asm-x86/tracehook.h         |   63 +++++
+ include/asm-x86/signal.h            |    4 
+ drivers/connector/cn_proc.c         |    4 
  mm/nommu.c                          |    4 
- security/selinux/hooks.c            |   54 ++--
- security/selinux/include/objsec.h   |    1 
- 67 files changed, 904 insertions(+), 1140 deletions(-)
+ 68 files changed, 861 insertions(+), 1146 deletions(-)
  create include/linux/tracehook.h
- create include/asm-i386/tracehook.h
  create include/asm-powerpc/tracehook.h
- create include/asm-x86_64/tracehook.h
+ create include/asm-x86/tracehook.h
 
-Index: b/fs/binfmt_flat.c
-===================================================================
---- a/fs/binfmt_flat.c
-+++ b/fs/binfmt_flat.c
-@@ -918,9 +918,6 @@ static int load_flat_binary(struct linux
+--- linux-2.6/fs/binfmt_flat.c
++++ linux-2.6/fs/binfmt_flat.c
+@@ -920,9 +920,6 @@ static int load_flat_binary(struct linux
  	
  	start_thread(regs, start_addr, current->mm->start_stack);
  
@@ -120,10 +118,8 @@
  	return 0;
  }
  
-Index: b/fs/binfmt_som.c
-===================================================================
---- a/fs/binfmt_som.c
-+++ b/fs/binfmt_som.c
+--- linux-2.6/fs/binfmt_som.c
++++ linux-2.6/fs/binfmt_som.c
 @@ -285,8 +285,6 @@ load_som_binary(struct linux_binprm * bp
  	map_hpux_gateway_page(current,current->mm);
  
@@ -133,19 +129,17 @@
  	return 0;
  
  	/* error cleanup */
-Index: b/fs/proc/base.c
-===================================================================
---- a/fs/proc/base.c
-+++ b/fs/proc/base.c
-@@ -67,6 +67,7 @@
+--- linux-2.6/fs/proc/base.c
++++ linux-2.6/fs/proc/base.c
+@@ -68,6 +68,7 @@
  #include <linux/mount.h>
  #include <linux/security.h>
  #include <linux/ptrace.h>
 +#include <linux/tracehook.h>
+ #include <linux/cgroup.h>
  #include <linux/cpuset.h>
  #include <linux/audit.h>
- #include <linux/poll.h>
-@@ -192,13 +193,6 @@ static int proc_root_link(struct inode *
+@@ -195,13 +196,6 @@ static int proc_root_link(struct inode *
  	return result;
  }
  
@@ -156,10 +150,10 @@
 -	 (task->state == TASK_STOPPED || task->state == TASK_TRACED) && \
 -	 security_ptrace(current,task) == 0))
 -
- static int proc_pid_environ(struct task_struct *task, char * buffer)
[...3170 lines suppressed...]
  #define TIF_SINGLESTEP		3	/* restore singlestep on return to user mode */
@@ -3800,83 +3703,30 @@
  /* work to do on any return to u-space */
  #define _TIF_ALLWORK_MASK	(0x0000FFFF & ~_TIF_SECCOMP)
  
-Index: b/include/asm-i386/signal.h
-===================================================================
---- a/include/asm-i386/signal.h
-+++ b/include/asm-i386/signal.h
-@@ -221,10 +221,8 @@ struct pt_regs;
- 
- #define ptrace_signal_deliver(regs, cookie)		\
- 	do {						\
--		if (current->ptrace & PT_DTRACE) {	\
--			current->ptrace &= ~PT_DTRACE;	\
-+		if (test_and_clear_thread_flag(TIF_FORCED_TF)) \
- 			(regs)->eflags &= ~TF_MASK;	\
--		}					\
- 	} while (0)
- 
- #endif /* __KERNEL__ */
-Index: b/include/asm-powerpc/tracehook.h
-===================================================================
---- /dev/null
-+++ b/include/asm-powerpc/tracehook.h
-@@ -0,0 +1,49 @@
-+/*
-+ * Tracing hooks, PowerPC CPU support
-+ *
-+ * Copyright (C) 2006, 2007 Red Hat, Inc.  All rights reserved.
-+ *
-+ * This copyrighted material is made available to anyone wishing to use,
-+ * modify, copy, or redistribute it subject to the terms and conditions
-+ * of the GNU General Public License v.2.
-+ *
-+ * Red Hat Author: Roland McGrath.
-+ */
-+
-+#ifndef _ASM_TRACEHOOK_H
-+#define _ASM_TRACEHOOK_H	1
-+
-+#include <linux/sched.h>
-+#include <asm/ptrace.h>
-+
-+/*
-+ * See linux/tracehook.h for the descriptions of what these need to do.
-+ */
-+
-+#define ARCH_HAS_SINGLE_STEP	(1)
-+
-+void tracehook_enable_single_step(struct task_struct *task);
-+void tracehook_disable_single_step(struct task_struct *task);
-+
-+static inline int tracehook_single_step_enabled(struct task_struct *tsk)
-+{
-+	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)
-+{
-+	regs->gpr[0] = -1L;
-+}
-+
-+
-+#endif
-Index: b/include/asm-x86_64/tracehook.h
-===================================================================
---- /dev/null
-+++ b/include/asm-x86_64/tracehook.h
-@@ -0,0 +1,51 @@
+--- linux-2.6/include/asm-x86/thread_info_64.h
++++ linux-2.6/include/asm-x86/thread_info_64.h
+@@ -115,7 +115,7 @@ static inline struct thread_info *stack_
+ #define TIF_SECCOMP		8	/* secure computing */
+ #define TIF_RESTORE_SIGMASK	9	/* restore signal mask in do_signal */
+ #define TIF_MCE_NOTIFY		10	/* notify userspace of an MCE */
+-/* 16 free */
++#define TIF_FORCED_TF		16	/* true if TF in eflags artificially */
+ #define TIF_IA32		17	/* 32bit process */ 
+ #define TIF_FORK		18	/* ret_from_fork */
+ #define TIF_ABI_PENDING		19
+@@ -133,6 +133,7 @@ static inline struct thread_info *stack_
+ #define _TIF_SECCOMP		(1<<TIF_SECCOMP)
+ #define _TIF_RESTORE_SIGMASK	(1<<TIF_RESTORE_SIGMASK)
+ #define _TIF_MCE_NOTIFY		(1<<TIF_MCE_NOTIFY)
++#define _TIF_FORCED_TF		(1<<TIF_FORCED_TF)
+ #define _TIF_IA32		(1<<TIF_IA32)
+ #define _TIF_FORK		(1<<TIF_FORK)
+ #define _TIF_ABI_PENDING	(1<<TIF_ABI_PENDING)
+--- linux-2.6/include/asm-x86/tracehook.h
++++ linux-2.6/include/asm-x86/tracehook.h
+@@ -0,0 +1,63 @@
 +/*
-+ * Tracing hooks, x86-64 CPU support
++ * Tracing hooks, x86 CPU support
 + *
 + * Copyright (C) 2006, 2007 Red Hat, Inc.  All rights reserved.
 + *
@@ -3918,39 +3768,42 @@
 +	clear_tsk_thread_flag(tsk, TIF_SYSCALL_TRACE);
 +}
 +
++#ifdef CONFIG_X86_64
++
 +#define tracehook_syscall_callno(regs)	(&(regs)->orig_rax)
 +#define tracehook_syscall_retval(regs)	(&(regs)->rax)
 +static inline void tracehook_abort_syscall(struct pt_regs *regs)
 +{
 +	regs->orig_rax = -1L;
 +}
++#else
++
++#define tracehook_syscall_callno(regs)	(&(regs)->orig_eax)
++#define tracehook_syscall_retval(regs)	(&(regs)->eax)
++static inline void tracehook_abort_syscall(struct pt_regs *regs)
++{
++	regs->orig_eax = -1;
++}
 +
 +#endif
-Index: b/include/asm-x86_64/thread_info.h
-===================================================================
---- a/include/asm-x86_64/thread_info.h
-+++ b/include/asm-x86_64/thread_info.h
-@@ -115,7 +115,7 @@ static inline struct thread_info *stack_
- #define TIF_SECCOMP		8	/* secure computing */
- #define TIF_RESTORE_SIGMASK	9	/* restore signal mask in do_signal */
- #define TIF_MCE_NOTIFY		10	/* notify userspace of an MCE */
--/* 16 free */
-+#define TIF_FORCED_TF		16	/* true if TF in eflags artificially */
- #define TIF_IA32		17	/* 32bit process */ 
- #define TIF_FORK		18	/* ret_from_fork */
- #define TIF_ABI_PENDING		19
-@@ -133,6 +133,7 @@ static inline struct thread_info *stack_
- #define _TIF_SECCOMP		(1<<TIF_SECCOMP)
- #define _TIF_RESTORE_SIGMASK	(1<<TIF_RESTORE_SIGMASK)
- #define _TIF_MCE_NOTIFY		(1<<TIF_MCE_NOTIFY)
-+#define _TIF_FORCED_TF		(1<<TIF_FORCED_TF)
- #define _TIF_IA32		(1<<TIF_IA32)
- #define _TIF_FORK		(1<<TIF_FORK)
- #define _TIF_ABI_PENDING	(1<<TIF_ABI_PENDING)
-Index: b/drivers/connector/cn_proc.c
-===================================================================
---- a/drivers/connector/cn_proc.c
-+++ b/drivers/connector/cn_proc.c
++
++#endif
+--- linux-2.6/include/asm-x86/signal.h
++++ linux-2.6/include/asm-x86/signal.h
+@@ -247,10 +247,8 @@ struct pt_regs;
+ 
+ #define ptrace_signal_deliver(regs, cookie)		\
+ 	do {						\
+-		if (current->ptrace & PT_DTRACE) {	\
+-			current->ptrace &= ~PT_DTRACE;	\
++		if (test_and_clear_thread_flag(TIF_FORCED_TF)) \
+ 			(regs)->eflags &= ~TF_MASK;	\
+-		}					\
+ 	} while (0)
+ 
+ #else /* __i386__ */
+--- 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);
@@ -3962,11 +3815,9 @@
  	ev->event_data.fork.child_pid = task->pid;
  	ev->event_data.fork.child_tgid = task->tgid;
  
-Index: b/mm/nommu.c
-===================================================================
---- a/mm/nommu.c
-+++ b/mm/nommu.c
-@@ -20,7 +20,7 @@
+--- linux-2.6/mm/nommu.c
++++ linux-2.6/mm/nommu.c
+@@ -21,7 +21,7 @@
  #include <linux/pagemap.h>
  #include <linux/slab.h>
  #include <linux/vmalloc.h>
@@ -3975,7 +3826,7 @@
  #include <linux/blkdev.h>
  #include <linux/backing-dev.h>
  #include <linux/mount.h>
-@@ -705,7 +705,7 @@ static unsigned long determine_vm_flags(
+@@ -706,7 +706,7 @@ static unsigned long determine_vm_flags(
  	 * it's being traced - otherwise breakpoints set in it may interfere
  	 * with another untraced process
  	 */

linux-2.6-wireless-pending.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.25 -r 1.26 linux-2.6-wireless-pending.patch
Index: linux-2.6-wireless-pending.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-wireless-pending.patch,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- linux-2.6-wireless-pending.patch	23 Jan 2008 21:27:16 -0000	1.25
+++ linux-2.6-wireless-pending.patch	15 Feb 2008 23:58:53 -0000	1.26
@@ -1,121509 +1,11944 @@
-commit 9fa8e14e585485cec9b2dfbee2c0922bac0841dd
-Author: Bruno Randolf <bruno at thinktube.com>
-Date:   Mon Jan 21 11:09:46 2008 +0900
-
-    ath5k: always extend rx timestamp with tsf
-    
-    always extend the rx timestamp with the local TSF, since this information is
-    also needed for proper IBSS merging. this is done in the tasklet for now, maybe
-    has to be moved to the interrupt handler like in madwifi.
-    
-    drivers/net/wireless/ath5k/base.c:      Changes-licensed-under: 3-Clause-BSD
-    
-    Signed-off-by: Bruno Randolf <bruno at thinktube.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 584396cce428867706cd07f038815982df011576
-Author: Bruno Randolf <bruno at thinktube.com>
-Date:   Sat Jan 19 18:18:41 2008 +0900
-
-    ath5k: configure backoff for IBSS beacon queue
-    
-    in "11.1.2.2 Beacon generation in an IBSS" the IEEE802.11 standard says, each
-    STA should... "b) Calculate a random delay uniformly distributed in the range
-    between zero and twice aCWmin × aSlotTime,".
-    
-    configure cwmin and cwmax of the beacon queue in IBSS mode according to this.
-    unfortunately beacon backoff does not work reliably yet, so i suspect we have a
-    problem somewhere else, since the same settings (and similar beacon timer
-    configuration) work for madwifi.
-    
-    drivers/net/wireless/ath5k/base.c:      Changes-licensed-under: 3-Clause-BSD
-    
-    Signed-off-by: Bruno Randolf <bruno at thinktube.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit bcee08a623fac1b1089c26476277fe339eb51e31
-Author: Bruno Randolf <bruno at thinktube.com>
-Date:   Sat Jan 19 18:18:21 2008 +0900
-
-    ath5k: use SWBA to detect IBSS HW merges
-    
-    use SWBA (software beacon alert) interrupts to keep track of the next beacon
-    time und check if a HW merge (automatic TSF update) has happened on every
-    received beacon with the same BSSID.
-    
-    this is necessary because the atheros hardware will silently update the local
-    TSF in IBSS mode, but not its beacon timers. if the TSF is ahead of the beacon
-    timers no beacons are sent until the timers wrap around (typically after about
-    1 minute).
-    
-    this solution is not very nice, since we have to look into every beacon, but
-    there is apparently no other way to detect HW merges.
-    
-    drivers/net/wireless/ath5k/base.c:      Changes-licensed-under: 3-Clause-BSD
-    drivers/net/wireless/ath5k/base.h:      Changes-licensed-under: 3-Clause-BSD
-    
-    Signed-off-by: Bruno Randolf <bruno at thinktube.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 6dc94fc9c313cf50cdef52f4bd736382491a70ee
-Author: Bruno Randolf <bruno at thinktube.com>
-Date:   Sat Jan 19 18:17:59 2008 +0900
-
-    ath5k: better beacon timer calculation
-    
-    update ath5k_beacon_update_timers() for better beacon timer calculation in a
-    variety of situations. most important is the possibility to call it with the
-    timestamp of a received beacon, when we detected that a HW merge has happened
-    and we need to reconfigure the beacon timers based on that.
-    
-    we call this from the mac80211 callback reset_tsf now instead of beacon_update,
-    and there will be more use of it in the next patch.
-    
-    drivers/net/wireless/ath5k/base.c:      Changes-licensed-under: 3-Clause-BSD
-    
-    Signed-off-by: Bruno Randolf <bruno at thinktube.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit ded271e319d5c1481f3a3ae024b25f09864f34c9
-Author: Bruno Randolf <bruno at thinktube.com>
-Date:   Fri Jan 18 21:51:40 2008 +0900
-
-    ath5k: beacon interval is in TU
-    
-    the beacon interval is passed by mac80211 in TU already, so we can directly use
-    it without conversion. also update the comments about TU (1 TU is defined by
-    802.11 as 1024usec).
-    
-    drivers/net/wireless/ath5k/ath5k.h:     Changes-licensed-under: ISC
-    drivers/net/wireless/ath5k/base.c:      Changes-licensed-under: 3-Clause-BSD
-    drivers/net/wireless/ath5k/base.h:      Changes-licensed-under: 3-Clause-BSD
-    
-    Signed-off-by: Bruno Randolf <bruno at thinktube.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 8ea9e63cadc2c116029c87c06d4c697ba89eb5fc
-Author: Bruno Randolf <bruno at thinktube.com>
-Date:   Fri Jan 18 21:51:19 2008 +0900
+commit 1649f279a01d5623c5ab048dea69654c13b87dd9
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Sun Feb 3 15:55:21 2008 +0100
 
-    ath5k: use 3 instead of 0x00000003
-    
-    reviewed beacon timer initialization with register traces from madwifi: what we
-    are doing is correct :). one minor fix: use 3 instead of 0x00000003 - it's more
-    readable.
+    rt2x00: Fix queue index handling
     
-    drivers/net/wireless/ath5k/hw.c:        Changes-licensed-under: ISC
+    When Q_INDEX is increased, the queue->length should be increased,
+    only when Q_INDEX_DONE is increased should queue_length be descreased.
     
-    Signed-off-by: Bruno Randolf <bruno at thinktube.com>
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 5a4357185994d38c890f762def993105a9bbd4f7
-Author: Michael Buesch <mb at bu3sch.de>
-Date:   Tue Jan 22 20:23:34 2008 +0100
+commit 49dc7bf4c18be97f49e5d84804e2a210294f2ebc
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Sun Feb 3 15:54:57 2008 +0100
 
-    b43: Fix MAC control and microcode init
+    rt2x00: Move beacon and atim queue defines into rt2x00
     
-    This zeros out all microcode related memory before loading
-    the microcode.
+    As Johannes Berg indicated the BEACON and AFTER_BEACON
+    queue indeces in mac80211 should be removed because they
+    are too hardware specific. This patch adds the queue index
+    defines into rt2x00queue.h and removes the dependency of
+    the defines inside mac80211.h.
     
-    This also fixes initialization of the MAC control register.
-    The _only_ place where we overwrite the contents of the MAC control
-    register is at the beginning of b43_chip_init().
-    All other places must do read() -> mask/set -> write() to not
-    overwrite existing bits.
+    Also move rt2x00pci_beacon_update() into rt2400pci and
+    rt2500pci individually since it is no longer a generic
+    function since rt61 and rt2800 no longer use that.
     
-    This also adds a longer delay for waiting for the microcode
-    to initialize itself. It seems that the current timeout is sufficient
-    on all available devices, but there's no real reason why we shouldn't
-    wait for up to one second. Slow embedded devices might exist.
-    Better safe than sorry.
-    
-    Signed-off-by: Michael Buesch <mb at bu3sch.de>
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 980dff0323602abd34ff95e7e7c6af6360ef640f
-Author: Masakazu Mokuno <mokuno at sm.sony.co.jp>
-Date:   Tue Jan 22 15:22:29 2008 +0900
+commit 00bb22220f6e648a50faa755e7c6673d6c98f283
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Sun Feb 3 15:52:21 2008 +0100
 
-    WEXT: remove unused variable
+    rt2x00: Initialize QID from queue->qid
     
-    As event_type_pk_size[] is not used,  Remove it.
+    The QID_MGMT is assigned to the beacon and atim queue
+    during initialization. This means we don't need a seperate
+    check in write_tx_desc()..
     
-    Signed-off-by: Masakazu Mokuno <mokuno at sm.sony.co.jp>
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 44f85d46709f2e88b087f4b84915bb593ea2a352
-Author: John W. Linville <linville at tuxdriver.com>
-Date:   Mon Jan 21 15:36:05 2008 -0500
+commit ac70a432ade9dc1943a5fc6887477942ef2c297f
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Sun Feb 3 15:51:47 2008 +0100
 
-    ath5k: reset key cache after resume
+    rt2x00: Remove TX_MGMT queue usage
     
-    Otherwise it may be impossible to connected to an open network after a
-    resume.
-    
-    This is a modified version of an original patch by
-    Alex Eskin <alexeskin at yahoo.com>:
-    
-    	https://bugzilla.redhat.com/show_bug.cgi?id=425950#c8
+    rt73usb doesn't have a 5th queue, correctly initialize hw->queues
[...132219 lines suppressed...]
+-	struct data_entry *entry;
+-	int timeout;
++	struct rt2x00_intf *intf = vif_to_intf(control->vif);
++	struct skb_frame_desc *skbdesc;
++	unsigned int beacon_base;
++	unsigned int timeout;
  
--	if (len < SSB_SPROMSIZE_BYTES * 2)
-+	if (len < size * 2)
- 		return -EINVAL;
+-	/*
+-	 * Just in case the ieee80211 doesn't set this,
+-	 * but we need this queue set for the descriptor
+-	 * initialization.
+-	 */
+-	control->queue = IEEE80211_TX_QUEUE_BEACON;
+-	ring = rt2x00lib_get_ring(rt2x00dev, control->queue);
+-	entry = rt2x00_get_data_entry(ring);
++	if (unlikely(!intf->beacon))
++		return -ENOBUFS;
+ 
+ 	/*
+ 	 * Add the descriptor in front of the skb.
+ 	 */
+-	skb_push(skb, ring->desc_size);
+-	memset(skb->data, 0, ring->desc_size);
++	skb_push(skb, intf->beacon->queue->desc_size);
++	memset(skb->data, 0, intf->beacon->queue->desc_size);
+ 
+ 	/*
+ 	 * Fill in skb descriptor
+ 	 */
+-	desc = get_skb_desc(skb);
+-	desc->desc_len = ring->desc_size;
+-	desc->data_len = skb->len - ring->desc_size;
+-	desc->desc = skb->data;
+-	desc->data = skb->data + ring->desc_size;
+-	desc->ring = ring;
+-	desc->entry = entry;
++	skbdesc = get_skb_frame_desc(skb);
++	memset(skbdesc, 0, sizeof(*skbdesc));
++	skbdesc->data = skb->data + intf->beacon->queue->desc_size;
++	skbdesc->data_len = skb->len - intf->beacon->queue->desc_size;
++	skbdesc->desc = skb->data;
++	skbdesc->desc_len = intf->beacon->queue->desc_size;
++	skbdesc->entry = intf->beacon;
+ 
++	/*
++	 * mac80211 doesn't provide the control->queue variable
++	 * for beacons. Set our own queue identification so
++	 * it can be used during descriptor initialization.
++	 */
++	control->queue = RT2X00_BCN_QUEUE_BEACON;
+ 	rt2x00lib_write_tx_desc(rt2x00dev, skb, control);
  
--	while (cnt < SSB_SPROMSIZE_WORDS) {
-+	while (cnt < size) {
- 		memcpy(tmp, dump, 4);
- 		dump += 4;
- 		parsed = simple_strtoul(tmp, NULL, 16);
-@@ -627,7 +677,7 @@ static ssize_t ssb_pci_attr_sprom_show(s
- 	if (!bus)
- 		goto out;
- 	err = -ENOMEM;
--	sprom = kcalloc(SSB_SPROMSIZE_WORDS, sizeof(u16), GFP_KERNEL);
-+	sprom = kcalloc(bus->sprom_size, sizeof(u16), GFP_KERNEL);
- 	if (!sprom)
- 		goto out;
- 
-@@ -640,7 +690,7 @@ static ssize_t ssb_pci_attr_sprom_show(s
- 	sprom_do_read(bus, sprom);
- 	mutex_unlock(&bus->pci_sprom_mutex);
- 
--	count = sprom2hex(sprom, buf, PAGE_SIZE);
-+	count = sprom2hex(sprom, buf, PAGE_SIZE, bus->sprom_size);
- 	err = 0;
- 
- out_kfree:
-@@ -662,15 +712,15 @@ static ssize_t ssb_pci_attr_sprom_store(
- 	if (!bus)
- 		goto out;
- 	err = -ENOMEM;
--	sprom = kcalloc(SSB_SPROMSIZE_WORDS, sizeof(u16), GFP_KERNEL);
-+	sprom = kcalloc(bus->sprom_size, sizeof(u16), GFP_KERNEL);
- 	if (!sprom)
- 		goto out;
--	err = hex2sprom(sprom, buf, count);
-+	err = hex2sprom(sprom, buf, count, bus->sprom_size);
- 	if (err) {
- 		err = -EINVAL;
- 		goto out_kfree;
- 	}
--	err = sprom_check_crc(sprom);
-+	err = sprom_check_crc(sprom, bus->sprom_size);
- 	if (err) {
- 		err = -EINVAL;
- 		goto out_kfree;
-diff -up linux-2.6.23.noarch/Documentation/feature-removal-schedule.txt.orig linux-2.6.23.noarch/Documentation/feature-removal-schedule.txt
---- linux-2.6.23.noarch/Documentation/feature-removal-schedule.txt.orig	2008-01-23 15:49:54.000000000 -0500
-+++ linux-2.6.23.noarch/Documentation/feature-removal-schedule.txt	2008-01-23 15:56:54.000000000 -0500
-@@ -315,4 +315,36 @@ Why:	powermac supports proper generic pm
- 	it can suspend can be done by reading /sys/power/state.
- Who:	Johannes Berg <johannes at sipsolutions.net>
- 
-+What:	bcm43xx wireless network driver
-+When:	2.6.26
-+Files:	drivers/net/wireless/bcm43xx
-+Why:	This driver's functionality has been replaced by the
-+	mac80211-based b43 and b43legacy drivers.
-+Who:	John W. Linville <linville at tuxdriver.com>
-+
-+---------------------------
-+
-+What:	ieee80211 softmac wireless networking component
-+When:	2.6.26 (or after removal of bcm43xx and port of zd1211rw to mac80211)
-+Files:	net/ieee80211/softmac
-+Why:	No in-kernel drivers will depend on it any longer.
-+Who:	John W. Linville <linville at tuxdriver.com>
-+
- ---------------------------
-+
-+What:	rc80211-simple rate control algorithm for mac80211
-+When:	2.6.26
-+Files:	net/mac80211/rc80211-simple.c
-+Why:	This algorithm was provided for reference but always exhibited bad
-+	responsiveness and performance and has some serious flaws. It has been
-+	replaced by rc80211-pid.
-+Who:	Stefano Brivio <stefano.brivio at polimi.it>
-+
-+---------------------------
-+
-+What:	b43 support for firmware revision < 410
-+When:	July 2008
-+Why:	The support code for the old firmware hurts code readability/maintainability
-+	and slightly hurts runtime performance. Bugfixes for the old firmware
-+	are not provided by Broadcom anymore.
-+Who:	Michael Buesch <mb at bu3sch.de>
+ 	/*
+ 	 * Write entire beacon with descriptor to register,
+ 	 * and kick the beacon generator.
+ 	 */
++	beacon_base = HW_BEACON_OFFSET(intf->beacon->entry_idx);
+ 	timeout = REGISTER_TIMEOUT * (skb->len / sizeof(u32));
+ 	rt2x00usb_vendor_request(rt2x00dev, USB_MULTI_WRITE,
+-				 USB_VENDOR_REQUEST_OUT,
+-				 HW_BEACON_BASE0, 0x0000,
++				 USB_VENDOR_REQUEST_OUT, beacon_base, 0,
+ 				 skb->data, skb->len, timeout);
+-	rt73usb_kick_tx_queue(rt2x00dev, IEEE80211_TX_QUEUE_BEACON);
++	rt73usb_kick_tx_queue(rt2x00dev, control->queue);
+ 
+ 	return 0;
+ }
+@@ -2046,19 +2084,41 @@ static const struct rt2x00lib_ops rt73us
+ 	.get_tx_data_len	= rt73usb_get_tx_data_len,
+ 	.kick_tx_queue		= rt73usb_kick_tx_queue,
+ 	.fill_rxdone		= rt73usb_fill_rxdone,
+-	.config_mac_addr	= rt73usb_config_mac_addr,
+-	.config_bssid		= rt73usb_config_bssid,
+-	.config_type		= rt73usb_config_type,
++	.config_intf		= rt73usb_config_intf,
+ 	.config_preamble	= rt73usb_config_preamble,
+ 	.config			= rt73usb_config,
+ };
+ 
++static const struct data_queue_desc rt73usb_queue_rx = {
++	.entry_num		= RX_ENTRIES,
++	.data_size		= DATA_FRAME_SIZE,
++	.desc_size		= RXD_DESC_SIZE,
++	.priv_size		= sizeof(struct queue_entry_priv_usb_rx),
++};
++
++static const struct data_queue_desc rt73usb_queue_tx = {
++	.entry_num		= TX_ENTRIES,
++	.data_size		= DATA_FRAME_SIZE,
++	.desc_size		= TXD_DESC_SIZE,
++	.priv_size		= sizeof(struct queue_entry_priv_usb_tx),
++};
++
++static const struct data_queue_desc rt73usb_queue_bcn = {
++	.entry_num		= 4 * BEACON_ENTRIES,
++	.data_size		= MGMT_FRAME_SIZE,
++	.desc_size		= TXINFO_SIZE,
++	.priv_size		= sizeof(struct queue_entry_priv_usb_tx),
++};
++
+ static const struct rt2x00_ops rt73usb_ops = {
+ 	.name		= KBUILD_MODNAME,
+-	.rxd_size	= RXD_DESC_SIZE,
+-	.txd_size	= TXD_DESC_SIZE,
++	.max_sta_intf	= 1,
++	.max_ap_intf	= 4,
+ 	.eeprom_size	= EEPROM_SIZE,
+ 	.rf_size	= RF_SIZE,
++	.rx		= &rt73usb_queue_rx,
++	.tx		= &rt73usb_queue_tx,
++	.bcn		= &rt73usb_queue_bcn,
+ 	.lib		= &rt73usb_rt2x00_ops,
+ 	.hw		= &rt73usb_mac80211_ops,
+ #ifdef CONFIG_RT2X00_LIB_DEBUGFS

linux-2.6-wireless.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.22 -r 1.23 linux-2.6-wireless.patch
Index: linux-2.6-wireless.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-wireless.patch,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- linux-2.6-wireless.patch	23 Jan 2008 21:27:16 -0000	1.22
+++ linux-2.6-wireless.patch	15 Feb 2008 23:58:53 -0000	1.23
@@ -1,121560 +1,107407 @@
-NOTE:  Commit history prior to 2.6.24-rc5 is not included...will do
-better in the future...FWIW, it is safe to presume that any wireless
-patch between 2.6.23 and 2.6.24-rc5 is included as well... -- JWL
+commit b79caa68c0d48477453a90d12be34b47cb75f3a8
+Author: Michael Buesch <mb at bu3sch.de>
+Date:   Tue Feb 5 12:50:41 2008 +0100
 
-commit fbcf1789eee4fd700f69653baebf80bfa64d0b56
-Author: Reinette Chatre <reinette.chatre at intel.com>
-Date:   Mon Jan 21 10:08:31 2008 -0800
+    b43: Fix DMA for 30/32-bit DMA engines
+    
+    This checks if the DMA address is bigger than what the controller can manage.
+    It will reallocate the buffers in the GFP_DMA zone in that case.
+    
+    Signed-off-by: Michael Buesch <mb at bu3sch.de>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 532031d7f426eb02f854d13184416cabcb01bdd5
+Author: Andrew Morton <akpm at linux-foundation.org>
+Date:   Mon Feb 4 23:58:42 2008 -0800
 
-    iwlwifi: fix possible read attempt on ucode that is not available
+    b43: fix build with CONFIG_SSB_PCIHOST=n
     
-    This fixes a NULL pointer dereference that can occur when the
-    ucode is not loaded at the time __iwl_up is called.
+    m68k allmodconfig gives
     
-    The problem was reported at http://kerneloops.org/raw.php?rawid=2765&msgid=
+    drivers/net/wireless/b43/main.c:251: error: implicit declaration of function 'mmiowb'
     
-    Signed-off-by: Reinette Chatre <reinette.chatre at intel.com>
+    because CONFIG_B43=m, CONFIG_SSB_PCIHOST=n.
+    
+    Might be Kconfig bustage, but this works...
+    
+    Cc: Michael Buesch <mb at bu3sch.de>
+    Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 2518812da9315f4ebc6b11b5289e5ef205a34ced
-Author: Eric Paris <eparis at redhat.com>
-Date:   Sun Jan 13 16:20:56 2008 -0500
+commit 03ac7a8141e1613add92d42e389a35a126b1caf8
+Author: Michael Buesch <mb at bu3sch.de>
+Date:   Mon Feb 4 18:11:41 2008 +0100
 
-    rfkill: call rfkill_led_trigger_unregister() on error
+    mac80211: Is not EXPERIMENTAL anymore
     
-    Code inspection turned up that error cases in rfkill_register() do not
-    call rfkill_led_trigger_unregister() even though we have already
-    registered.
+    Remove the EXPERIMENTAL dependency, as the existing mac80211
+    features are stable.
     
-    Signed-off-by: Eric Paris <eparis at redhat.com>
+    Signed-off-by: Michael Buesch <mb at bu3sch.de>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit d101f6496d51cbeb285f531dff059ce0ef28ffe3
-Author: Ivo van Doorn <ivdoorn at gmail.com>
-Date:   Fri Jan 11 20:53:07 2008 +0100
+commit 221c80cf03d77490b8e45184a273834d0259b9e0
+Author: Adrian Bunk <bunk at kernel.org>
+Date:   Sat Feb 2 23:19:01 2008 +0200
+
+    iwl3945-base.c: fix off-by-one errors
+    
+    This patch fixes two off-by-one errors resulting in array overflows
+    spotted by the Coverity checker.
+    
+    Signed-off-by: Adrian Bunk <bunk at kernel.org>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 8dd0100ce9511e52614ecd0a6587c13ce5769c8b
+Author: Stefano Brivio <stefano.brivio at polimi.it>
+Date:   Sat Feb 2 19:16:03 2008 +0100
 
-    rt2x00: Fix ieee80211 payload alignment
+    b43legacy: fix DMA slot resource leakage
     
-    As Johannes Berg indicated, the NET_IP_ALIGN doesn't
-    need to be used for ieee80211 frames. This means we
-    can simplify the alignment calculation to just
-    use the result of the header size modulus 4 as frame
-    alignment.
+    This fixes four resource leakages.
+    In any error path we must deallocate the DMA frame slots we
+    previously allocated by request_slot().
+    This is done by storing the ring pointers before doing any ring
+    allocation and restoring the old pointers in case of an error.
     
-    Furthermore we shouldn't use NET_IP_ALIGN in rt2x00usb
-    because it could be 0 on some architectures and we absolutely
-    need to have 2 bytes reserved for possible aligning.
+    This patch by Michael Buesch has been ported to b43legacy.
     
-    Signed-off-by: Ivo van Doorn<IvDoorn at gmail.com>
+    Cc: Michael Buesch <mb at bu3sch.de>
+    Signed-off-by: Stefano Brivio <stefano.brivio at polimi.it>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit a38db5b6219d88e2b48f07472c436b19b864f93c
+commit 9eca9a8e81928685b4de00ecef83a7c13c340fc9
 Author: Stefano Brivio <stefano.brivio at polimi.it>
-Date:   Sun Jan 13 18:30:14 2008 +0100
+Date:   Sat Feb 2 19:16:01 2008 +0100
 
-    b43: fix use-after-free rfkill bug
+    b43legacy: drop packets we are not able to encrypt
+    
+    We must drop any packets we are not able to encrypt.
+    We must not send them unencrypted or with an all-zero-key (which
+    basically is the same as unencrypted, from a security point of view).
+    
+    This might only trigger shortly after resume before mac80211 reassociated
+    and reconfigured the keys.
     
-    Fix rfkill code which caused a use-after-free bug.
+    It is safe to drop these packets, as the association they belong to
+    is not guaranteed anymore anyway.
+    This is a security fix in the sense that it prevents information leakage.
     
+    This patch by Michael Buesch has been ported to b43legacy.
+    
+    Cc: Michael Buesch <mb at bu3sch.de>
     Signed-off-by: Stefano Brivio <stefano.brivio at polimi.it>
-    Acked-by: Michael Buesch <mb at bu3sch.de>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 8ff9d21ee2ac7eceeb6ba3da52c3472dcab435e4
+commit ada50731c0346bf900dc387edd3a6961297bf2d3
 Author: Stefano Brivio <stefano.brivio at polimi.it>
-Date:   Sat Jan 12 23:12:26 2008 +0100
+Date:   Sat Feb 2 19:15:57 2008 +0100
 
-    ipw2200: fix typo in kerneldoc
+    b43legacy: fix suspend/resume
+    
+    This patch makes suspend/resume work with the b43legacy driver.
+    We must not overwrite the MAC addresses in the init function, as this
+    would also overwrite the MAC on resume. With an all-zero MAC the device
+    firmware is not able to ACK any received packets anymore.
+    Fix this by moving the initializion stuff that must be done on init but
+    not on resume to the start function.
+    Also zero out filter_flags to make sure we don't have some flags
+    from a previous instance for a tiny timeframe until mac80211 reconfigures
+    them.
     
-    Fix a typo in kerneldoc for ipw2200.
+    This patch by Michael Buesch has been ported to b43legacy.
     
+    Cc: Michael Buesch <mb at bu3sch.de>
     Signed-off-by: Stefano Brivio <stefano.brivio at polimi.it>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 436c8854a05add153a9003b3aa19e54851ed902f
-Author: Marc Pignat <marc.pignat at hevs.ch>
-Date:   Fri Jan 11 16:12:28 2008 +0100
+commit 0cd67d48b519c3d8d89d238fab1cf68a5289638a
+Author: Stefano Brivio <stefano.brivio at polimi.it>
+Date:   Sat Feb 2 19:15:49 2008 +0100
 
-    wireless/libertas support for 88w8385 sdio older revision
+    b43legacy: fix PIO crash
     
-    Identifiaction of another revision of 88w8385 in sdio mode.
+    Fix the crash reported below, which seems to happen on bcm4306 rev. 2 devices
+    only while using PIO:
     
-    Signed-off-by: Marc Pignat <marc.pignat at hevs.ch>
-    Acked-by: Pierre Ossman <drzeus at drzeus.cx>
+    Oops: 0000 [#1] PREEMPT
+    Modules linked in: b43(F) rfkill(F) led_class(F) input_polldev(F) arc4 b43legacy mac80211 cfg80211 i915 drm snd_seq_oss snd_seq_midi_event snd_seq snd_seq_device ohci1394 ieee1394 ssb pcmcia snd_intel8x0m ehci_hcd uhci_hcd evdev
+    
+    Pid: 0, comm: swapper Tainted: GF	(2.6.24st3 #2)
+    EIP: 0060:[<f90f667b>] EFLAGS: 00010002 CPU: 0
+    EIP is at b43legacy_pio_handle_txstatus+0xbb/0x210 [b43legacy]
+    EAX: 0000049b EBX: f11f8044 ECX: 00000001 EDX: 00000000
+    ESI: f1ff8000 EDI: 00000000 EBP: f11f8040 ESP: c04f4ef4
+     DS: 007b ES: 007b FS: 0000 GS: 0000 SS: 0068
+    Process swapper (pid: 0, ti=c04f4000 task=c0488300 task.ti=c04b8000)
+    Stack: f90f2788 c05009f0 c0500900 000010f7 f1053823 c04f4f24 dfb8e800 00000003
+           f1368000 00000007 00000296 f90f1975 00001000 010c0800 01000000 00000007
+           f90f6391 f11f8000 00000082 c04f4f4a 00000000 00004fd0 10f70000 8c061000
+    Call Trace:
+     [<f90f2788>] b43legacy_debugfs_log_txstat+0x48/0xb0 [b43legacy]
+     [<f90f1975>] b43legacy_handle_hwtxstatus+0x75/0x80 [b43legacy]
+     [<f90f6391>] b43legacy_pio_rx+0x201/0x280 [b43legacy]
[...258249 lines suppressed...]
+-static int sprom_extract(struct ssb_bus *bus,
+-			 struct ssb_sprom *out, const u16 *in)
++static int sprom_extract(struct ssb_bus *bus, struct ssb_sprom *out,
++			 const u16 *in, u16 size)
+ {
+ 	memset(out, 0, sizeof(*out));
+ 
+-	SPEX(revision, SSB_SPROM_REVISION, SSB_SPROM_REVISION_REV, 0);
+-	SPEX(crc, SSB_SPROM_REVISION, SSB_SPROM_REVISION_CRC,
+-	     SSB_SPROM_REVISION_CRC_SHIFT);
+-
++	out->revision = in[size - 1] & 0x00FF;
++	ssb_dprintk(KERN_DEBUG PFX "SPROM revision %d detected.\n", out->revision);
+ 	if ((bus->chip_id & 0xFF00) == 0x4400) {
+ 		/* Workaround: The BCM44XX chip has a stupid revision
+ 		 * number stored in the SPROM.
+ 		 * Always extract r1. */
+-		sprom_extract_r1(&out->r1, in);
++		out->revision = 1;
++		sprom_extract_r123(out, in);
++	} else if (bus->chip_id == 0x4321) {
++		/* the BCM4328 has a chipid == 0x4321 and a rev 4 SPROM */
++		out->revision = 4;
++		sprom_extract_r4(out, in);
+ 	} else {
+ 		if (out->revision == 0)
+ 			goto unsupported;
+-		if (out->revision >= 1 && out->revision <= 3)
+-			sprom_extract_r1(&out->r1, in);
+-		if (out->revision >= 2 && out->revision <= 3)
+-			sprom_extract_r2(&out->r2, in);
+-		if (out->revision == 3)
+-			sprom_extract_r3(&out->r3, in);
+-		if (out->revision >= 4)
++		if (out->revision >= 1 && out->revision <= 3) {
++			sprom_extract_r123(out, in);
++		}
++		if (out->revision == 4)
++			sprom_extract_r4(out, in);
++		if (out->revision >= 5)
+ 			goto unsupported;
+ 	}
+ 
+@@ -448,7 +486,7 @@ static int sprom_extract(struct ssb_bus 
+ unsupported:
+ 	ssb_printk(KERN_WARNING PFX "Unsupported SPROM revision %d "
+ 		   "detected. Will extract v1\n", out->revision);
+-	sprom_extract_r1(&out->r1, in);
++	sprom_extract_r123(out, in);
+ 	return 0;
+ }
+ 
+@@ -458,16 +496,29 @@ static int ssb_pci_sprom_get(struct ssb_
+ 	int err = -ENOMEM;
+ 	u16 *buf;
+ 
+-	buf = kcalloc(SSB_SPROMSIZE_WORDS, sizeof(u16), GFP_KERNEL);
++	buf = kcalloc(SSB_SPROMSIZE_WORDS_R123, sizeof(u16), GFP_KERNEL);
+ 	if (!buf)
+ 		goto out;
++	bus->sprom_size = SSB_SPROMSIZE_WORDS_R123;
+ 	sprom_do_read(bus, buf);
+-	err = sprom_check_crc(buf);
++	err = sprom_check_crc(buf, bus->sprom_size);
+ 	if (err) {
+-		ssb_printk(KERN_WARNING PFX
+-			   "WARNING: Invalid SPROM CRC (corrupt SPROM)\n");
++		/* check for rev 4 sprom - has special signature */
++		if (buf[32] == 0x5372) {
++			kfree(buf);
++			buf = kcalloc(SSB_SPROMSIZE_WORDS_R4, sizeof(u16),
++				      GFP_KERNEL);
++			if (!buf)
++				goto out;
++			bus->sprom_size = SSB_SPROMSIZE_WORDS_R4;
++			sprom_do_read(bus, buf);
++			err = sprom_check_crc(buf, bus->sprom_size);
++		}
++		if (err)
++			ssb_printk(KERN_WARNING PFX "WARNING: Invalid"
++				   " SPROM CRC (corrupt SPROM)\n");
+ 	}
+-	err = sprom_extract(bus, sprom, buf);
++	err = sprom_extract(bus, sprom, buf, bus->sprom_size);
+ 
+ 	kfree(buf);
+ out:
+@@ -581,29 +632,28 @@ const struct ssb_bus_ops ssb_pci_ops = {
+ 	.write32	= ssb_pci_write32,
+ };
+ 
+-static int sprom2hex(const u16 *sprom, char *buf, size_t buf_len)
++static int sprom2hex(const u16 *sprom, char *buf, size_t buf_len, u16 size)
+ {
+ 	int i, pos = 0;
+ 
+-	for (i = 0; i < SSB_SPROMSIZE_WORDS; i++) {
++	for (i = 0; i < size; i++)
+ 		pos += snprintf(buf + pos, buf_len - pos - 1,
+ 				"%04X", swab16(sprom[i]) & 0xFFFF);
+-	}
+ 	pos += snprintf(buf + pos, buf_len - pos - 1, "\n");
+ 
+ 	return pos + 1;
+ }
+ 
+-static int hex2sprom(u16 *sprom, const char *dump, size_t len)
++static int hex2sprom(u16 *sprom, const char *dump, size_t len, u16 size)
+ {
+ 	char tmp[5] = { 0 };
+ 	int cnt = 0;
+ 	unsigned long parsed;
+ 
+-	if (len < SSB_SPROMSIZE_BYTES * 2)
++	if (len < size * 2)
+ 		return -EINVAL;
  
- Here is an example valid radiotap header defining these three parameters
+-	while (cnt < SSB_SPROMSIZE_WORDS) {
++	while (cnt < size) {
+ 		memcpy(tmp, dump, 4);
+ 		dump += 4;
+ 		parsed = simple_strtoul(tmp, NULL, 16);
+@@ -627,7 +677,7 @@ static ssize_t ssb_pci_attr_sprom_show(s
+ 	if (!bus)
+ 		goto out;
+ 	err = -ENOMEM;
+-	sprom = kcalloc(SSB_SPROMSIZE_WORDS, sizeof(u16), GFP_KERNEL);
++	sprom = kcalloc(bus->sprom_size, sizeof(u16), GFP_KERNEL);
+ 	if (!sprom)
+ 		goto out;
  
+@@ -640,7 +690,7 @@ static ssize_t ssb_pci_attr_sprom_show(s
+ 	sprom_do_read(bus, sprom);
+ 	mutex_unlock(&bus->pci_sprom_mutex);
+ 
+-	count = sprom2hex(sprom, buf, PAGE_SIZE);
++	count = sprom2hex(sprom, buf, PAGE_SIZE, bus->sprom_size);
+ 	err = 0;
+ 
+ out_kfree:
+@@ -662,15 +712,15 @@ static ssize_t ssb_pci_attr_sprom_store(
+ 	if (!bus)
+ 		goto out;
+ 	err = -ENOMEM;
+-	sprom = kcalloc(SSB_SPROMSIZE_WORDS, sizeof(u16), GFP_KERNEL);
++	sprom = kcalloc(bus->sprom_size, sizeof(u16), GFP_KERNEL);
+ 	if (!sprom)
+ 		goto out;
+-	err = hex2sprom(sprom, buf, count);
++	err = hex2sprom(sprom, buf, count, bus->sprom_size);
+ 	if (err) {
+ 		err = -EINVAL;
+ 		goto out_kfree;
+ 	}
+-	err = sprom_check_crc(sprom);
++	err = sprom_check_crc(sprom, bus->sprom_size);
+ 	if (err) {
+ 		err = -EINVAL;
+ 		goto out_kfree;
+diff -up linux-2.6.24.noarch/Documentation/feature-removal-schedule.txt.orig linux-2.6.24.noarch/Documentation/feature-removal-schedule.txt
+--- linux-2.6.24.noarch/Documentation/feature-removal-schedule.txt.orig	2008-01-24 17:58:37.000000000 -0500
++++ linux-2.6.24.noarch/Documentation/feature-removal-schedule.txt	2008-02-05 22:16:24.000000000 -0500
+@@ -332,4 +332,36 @@ Why:	This driver has been marked obsolet
+ 	2.4 or later kernels, provides richer features and is more robust.
+ Who:	Stephen Hemminger <shemminger at linux-foundation.org>
+ 
++What:	bcm43xx wireless network driver
++When:	2.6.26
++Files:	drivers/net/wireless/bcm43xx
++Why:	This driver's functionality has been replaced by the
++	mac80211-based b43 and b43legacy drivers.
++Who:	John W. Linville <linville at tuxdriver.com>
++
++---------------------------
++
++What:	ieee80211 softmac wireless networking component
++When:	2.6.26 (or after removal of bcm43xx and port of zd1211rw to mac80211)
++Files:	net/ieee80211/softmac
++Why:	No in-kernel drivers will depend on it any longer.
++Who:	John W. Linville <linville at tuxdriver.com>
++
+ ---------------------------
++
++What:	rc80211-simple rate control algorithm for mac80211
++When:	2.6.26
++Files:	net/mac80211/rc80211-simple.c
++Why:	This algorithm was provided for reference but always exhibited bad
++	responsiveness and performance and has some serious flaws. It has been
++	replaced by rc80211-pid.
++Who:	Stefano Brivio <stefano.brivio at polimi.it>
++
++---------------------------
++
++What:	b43 support for firmware revision < 410
++When:	July 2008
++Why:	The support code for the old firmware hurts code readability/maintainability
++	and slightly hurts runtime performance. Bugfixes for the old firmware
++	are not provided by Broadcom anymore.
++Who:	Michael Buesch <mb at bu3sch.de>

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

Index: linux-2.6-x86-tune-generic.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-x86-tune-generic.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6-x86-tune-generic.patch	18 Jun 2007 02:55:52 -0000	1.2
+++ linux-2.6-x86-tune-generic.patch	15 Feb 2008 23:58:54 -0000	1.3
@@ -1,16 +1,13 @@
-
-* 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
+--- linux-2.6/arch/x86/Makefile_32.cpu	2006-01-09 11:39:04.000000000 -0500
++++ linux-2.6/arch/x86/Makefile_32.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=i586 $(call tune,generic)
++cflags-$(CONFIG_M686)		+= -march=i686 $(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)

linux-2.6-xfs-optimize-away-realtime-tests.patch:

Index: linux-2.6-xfs-optimize-away-realtime-tests.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-xfs-optimize-away-realtime-tests.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-xfs-optimize-away-realtime-tests.patch	24 Aug 2007 04:17:51 -0000	1.1
+++ linux-2.6-xfs-optimize-away-realtime-tests.patch	15 Feb 2008 23:58:54 -0000	1.2
@@ -198,3 +198,39 @@
  #define XFS_DIFLAG_ANY \
  	(XFS_DIFLAG_REALTIME | XFS_DIFLAG_PREALLOC | XFS_DIFLAG_NEWRTBM | \
  	 XFS_DIFLAG_IMMUTABLE | XFS_DIFLAG_APPEND | XFS_DIFLAG_SYNC | \
+Index: linux-2.6.22.i386/fs/xfs/xfs_bmap.c
+===================================================================
+--- linux-2.6.22.i386.orig/fs/xfs/xfs_bmap.c
++++ linux-2.6.22.i386/fs/xfs/xfs_bmap.c
+@@ -2969,7 +2969,7 @@ STATIC int
+ xfs_bmap_alloc(
+ 	xfs_bmalloca_t	*ap)		/* bmap alloc argument struct */
+ {
+-	if ((ap->ip->i_d.di_flags & XFS_DIFLAG_REALTIME) && ap->userdata)
++	if (XFS_IS_REALTIME_INODE(ap->ip) && ap->userdata)
+ 		return xfs_bmap_rtalloc(ap);
+ 	return xfs_bmap_btalloc(ap);
+ }
+@@ -3097,7 +3097,7 @@ xfs_bmap_del_extent(
+ 		 * Realtime allocation.  Free it and record di_nblocks update.
+ 		 */
+ 		if (whichfork == XFS_DATA_FORK &&
+-		    (ip->i_d.di_flags & XFS_DIFLAG_REALTIME)) {
++		    XFS_IS_REALTIME_INODE(ip)) {
+ 			xfs_fsblock_t	bno;
+ 			xfs_filblks_t	len;
+ 
+Index: linux-2.6.22.i386/fs/xfs/xfs_bmap_btree.c
+===================================================================
+--- linux-2.6.22.i386.orig/fs/xfs/xfs_bmap_btree.c
++++ linux-2.6.22.i386/fs/xfs/xfs_bmap_btree.c
+@@ -2062,8 +2062,7 @@ xfs_bmbt_insert(
+ 				pcur->bc_private.b.allocated;
+ 			pcur->bc_private.b.allocated = 0;
+ 			ASSERT((cur->bc_private.b.firstblock != NULLFSBLOCK) ||
+-			       (cur->bc_private.b.ip->i_d.di_flags &
+-				XFS_DIFLAG_REALTIME));
++			       XFS_IS_REALTIME_INODE(cur->bc_private.b.ip));
+ 			cur->bc_private.b.firstblock =
+ 				pcur->bc_private.b.firstblock;
+ 			ASSERT(cur->bc_private.b.flist ==

nouveau-drm.patch:

Index: nouveau-drm.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/nouveau-drm.patch,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- nouveau-drm.patch	19 Sep 2007 23:44:41 -0000	1.5
+++ nouveau-drm.patch	15 Feb 2008 23:58:54 -0000	1.6
@@ -4,157 +4,10 @@
 Subject: [PATCH] drm: add nouveau latest code
 
 ---
- drivers/char/drm/Kconfig            |    5 +
- drivers/char/drm/Makefile           |   12 +
- drivers/char/drm/drmP.h             |    4 +-
- drivers/char/drm/drm_bufs.c         |    6 +-
- drivers/char/drm/drm_irq.c          |    3 +-
- drivers/char/drm/drm_pciids.h       |  262 ++++
- drivers/char/drm/nouveau_dma.c      |  177 +++
- drivers/char/drm/nouveau_dma.h      |   98 ++
- drivers/char/drm/nouveau_drm.h      |  166 ++
- drivers/char/drm/nouveau_drv.c      |   96 ++
- drivers/char/drm/nouveau_drv.h      |  584 +++++++
- drivers/char/drm/nouveau_fifo.c     |  557 +++++++
- drivers/char/drm/nouveau_ioc32.c    |   72 +
- drivers/char/drm/nouveau_irq.c      |  430 ++++++
- drivers/char/drm/nouveau_mem.c      |  616 ++++++++
- drivers/char/drm/nouveau_notifier.c |  173 +++
- drivers/char/drm/nouveau_object.c   | 1148 ++++++++++++++
- drivers/char/drm/nouveau_reg.h      |  538 +++++++
- drivers/char/drm/nouveau_sgdma.c    |  311 ++++
- drivers/char/drm/nouveau_state.c    |  569 +++++++
- drivers/char/drm/nv04_fb.c          |   24 +
- drivers/char/drm/nv04_fifo.c        |  129 ++
- drivers/char/drm/nv04_graph.c       |  415 +++++
- drivers/char/drm/nv04_instmem.c     |  160 ++
- drivers/char/drm/nv04_mc.c          |   23 +
- drivers/char/drm/nv04_timer.c       |   45 +
- drivers/char/drm/nv10_fb.c          |   26 +
- drivers/char/drm/nv10_fifo.c        |  160 ++
- drivers/char/drm/nv10_graph.c       |  777 ++++++++++
- drivers/char/drm/nv20_graph.c       |  249 +++
- drivers/char/drm/nv30_graph.c       | 2911 +++++++++++++++++++++++++++++++++++
- drivers/char/drm/nv40_fb.c          |   56 +
- drivers/char/drm/nv40_fifo.c        |  208 +++
- drivers/char/drm/nv40_graph.c       | 1906 +++++++++++++++++++++++
- drivers/char/drm/nv40_mc.c          |   39 +
- drivers/char/drm/nv50_fifo.c        |  327 ++++
- drivers/char/drm/nv50_graph.c       |  316 ++++
- drivers/char/drm/nv50_instmem.c     |  320 ++++
- drivers/char/drm/nv50_mc.c          |   43 +
- 39 files changed, 13957 insertions(+), 4 deletions(-)
- create mode 100644 drivers/char/drm/nouveau_dma.c
- create mode 100644 drivers/char/drm/nouveau_dma.h
- create mode 100644 drivers/char/drm/nouveau_drm.h
- create mode 100644 drivers/char/drm/nouveau_drv.c
- create mode 100644 drivers/char/drm/nouveau_drv.h
- create mode 100644 drivers/char/drm/nouveau_fifo.c
- create mode 100644 drivers/char/drm/nouveau_ioc32.c
- create mode 100644 drivers/char/drm/nouveau_irq.c
- create mode 100644 drivers/char/drm/nouveau_mem.c
- create mode 100644 drivers/char/drm/nouveau_notifier.c
- create mode 100644 drivers/char/drm/nouveau_object.c
- create mode 100644 drivers/char/drm/nouveau_reg.h
- create mode 100644 drivers/char/drm/nouveau_sgdma.c
- create mode 100644 drivers/char/drm/nouveau_state.c
- create mode 100644 drivers/char/drm/nv04_fb.c
- create mode 100644 drivers/char/drm/nv04_fifo.c
- create mode 100644 drivers/char/drm/nv04_graph.c
- create mode 100644 drivers/char/drm/nv04_instmem.c
- create mode 100644 drivers/char/drm/nv04_mc.c
- create mode 100644 drivers/char/drm/nv04_timer.c
- create mode 100644 drivers/char/drm/nv10_fb.c
- create mode 100644 drivers/char/drm/nv10_fifo.c
- create mode 100644 drivers/char/drm/nv10_graph.c
- create mode 100644 drivers/char/drm/nv20_graph.c
- create mode 100644 drivers/char/drm/nv30_graph.c
- create mode 100644 drivers/char/drm/nv40_fb.c
- create mode 100644 drivers/char/drm/nv40_fifo.c
- create mode 100644 drivers/char/drm/nv40_graph.c
- create mode 100644 drivers/char/drm/nv40_mc.c
- create mode 100644 drivers/char/drm/nv50_fifo.c
- create mode 100644 drivers/char/drm/nv50_graph.c
- create mode 100644 drivers/char/drm/nv50_instmem.c
- create mode 100644 drivers/char/drm/nv50_mc.c
-
-diff --git a/drivers/char/drm/Kconfig b/drivers/char/drm/Kconfig
-index 0b7ffa5..0220619 100644
---- a/drivers/char/drm/Kconfig
-+++ b/drivers/char/drm/Kconfig
-@@ -106,3 +106,8 @@ config DRM_SAVAGE
- 	  Choose this option if you have a Savage3D/4/SuperSavage/Pro/Twister
- 	  chipset. If M is selected the module will be called savage.
- 
-+config DRM_NOUVEAU
-+	tristate "Nvidia video cards"
-+	depends on DRM
-+	help
-+		Choose this for nvidia open source 3d driver
-diff --git a/drivers/char/drm/Makefile b/drivers/char/drm/Makefile
-index 6915a05..f798916 100644
---- a/drivers/char/drm/Makefile
-+++ b/drivers/char/drm/Makefile
-@@ -14,6 +14,16 @@ mga-objs    := mga_drv.o mga_dma.o mga_state.o mga_warp.o mga_irq.o
- i810-objs   := i810_drv.o i810_dma.o
- i830-objs   := i830_drv.o i830_dma.o i830_irq.o
- i915-objs   := i915_drv.o i915_dma.o i915_irq.o i915_mem.o
-+nouveau-objs := nouveau_drv.o nouveau_state.o nouveau_fifo.o nouveau_mem.o \
-+		nouveau_object.o nouveau_irq.o nouveau_notifier.o \
-+		nouveau_sgdma.o nouveau_dma.o \
-+		nv04_timer.o \
-+		nv04_mc.o nv40_mc.o nv50_mc.o \
-+		nv04_fb.o nv10_fb.o nv40_fb.o \
-+		nv04_fifo.o nv10_fifo.o nv40_fifo.o nv50_fifo.o \
-+		nv04_graph.o nv10_graph.o nv20_graph.o nv30_graph.o \
-+		nv40_graph.o nv50_graph.o \
-+		nv04_instmem.o nv50_instmem.o
- radeon-objs := radeon_drv.o radeon_cp.o radeon_state.o radeon_mem.o radeon_irq.o r300_cmdbuf.o
- sis-objs    := sis_drv.o sis_mm.o
- savage-objs := savage_drv.o savage_bci.o savage_state.o
-@@ -25,6 +35,7 @@ radeon-objs += radeon_ioc32.o
- mga-objs    += mga_ioc32.o
- r128-objs   += r128_ioc32.o
- i915-objs   += i915_ioc32.o
-+nouveau-objs   += nouveau_ioc32.o
- endif
- 
- obj-$(CONFIG_DRM)	+= drm.o
-@@ -35,6 +46,7 @@ obj-$(CONFIG_DRM_MGA)	+= mga.o
- obj-$(CONFIG_DRM_I810)	+= i810.o
- obj-$(CONFIG_DRM_I830)	+= i830.o
- obj-$(CONFIG_DRM_I915)  += i915.o
-+obj-$(CONFIG_DRM_NOUVEAU)   += nouveau.o
- obj-$(CONFIG_DRM_SIS)   += sis.o
- obj-$(CONFIG_DRM_SAVAGE)+= savage.o
- obj-$(CONFIG_DRM_VIA)	+=via.o
-diff --git a/drivers/char/drm/drmP.h b/drivers/char/drm/drmP.h
-index 9dd0760..d539c96 100644
---- a/drivers/char/drm/drmP.h
-+++ b/drivers/char/drm/drmP.h
-@@ -967,7 +967,8 @@ extern unsigned long drm_get_resource_start(struct drm_device *dev,
- 					    unsigned int resource);
- extern unsigned long drm_get_resource_len(struct drm_device *dev,
- 					  unsigned int resource);
--
-+struct drm_map_list *drm_find_matching_map(struct drm_device *dev,
-+					   drm_local_map_t *map);
- 				/* DMA support (drm_dma.h) */
- extern int drm_dma_setup(struct drm_device *dev);
- extern void drm_dma_takedown(struct drm_device *dev);
-@@ -979,6 +980,7 @@ extern void drm_core_reclaim_buffers(struct drm_device *dev,
- extern int drm_control(struct drm_device *dev, void *data,
- 		       struct drm_file *file_priv);
- extern irqreturn_t drm_irq_handler(DRM_IRQ_ARGS);
-+extern int drm_irq_install(struct drm_device * dev);
- extern int drm_irq_uninstall(struct drm_device *dev);
- extern void drm_driver_irq_preinstall(struct drm_device *dev);
- extern void drm_driver_irq_postinstall(struct drm_device *dev);
-diff --git a/drivers/char/drm/drm_bufs.c b/drivers/char/drm/drm_bufs.c
-index 856774f..7890e08 100644
---- a/drivers/char/drm/drm_bufs.c
-+++ b/drivers/char/drm/drm_bufs.c
-@@ -49,8 +49,8 @@ unsigned long drm_get_resource_len(struct drm_device *dev, unsigned int resource
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/drm_bufs.c linux-2.6.23.noarch/drivers/char/drm/drm_bufs.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/drm_bufs.c	2007-11-26 21:18:35.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/drm_bufs.c	2007-11-26 21:16:13.000000000 -0500
+@@ -49,8 +49,8 @@ unsigned long drm_get_resource_len(struc
  
  EXPORT_SYMBOL(drm_get_resource_len);
  
@@ -165,7 +18,7 @@
  {
  	struct drm_map_list *entry;
  	list_for_each_entry(entry, &dev->maplist, head) {
-@@ -63,6 +63,7 @@ static struct drm_map_list *drm_find_matching_map(struct drm_device *dev,
+@@ -63,6 +63,7 @@ static struct drm_map_list *drm_find_mat
  
  	return NULL;
  }
@@ -173,19 +26,10 @@
  
  static int drm_map_handle(struct drm_device *dev, struct drm_hash_item *hash,
  			  unsigned long user_token, int hashed_handle)
-@@ -429,6 +430,7 @@ int drm_rmmap(struct drm_device *dev, drm_local_map_t *map)
- 
- 	return ret;
- }
-+EXPORT_SYMBOL(drm_rmmap);
- 
- /* The rmmap ioctl appears to be unnecessary.  All mappings are torn down on
-  * the last close of the device, and this is necessary for cleanup when things
-diff --git a/drivers/char/drm/drm_irq.c b/drivers/char/drm/drm_irq.c
-index 05eae63..c091729 100644
---- a/drivers/char/drm/drm_irq.c
-+++ b/drivers/char/drm/drm_irq.c
-@@ -81,7 +81,7 @@ int drm_irq_by_busid(struct drm_device *dev, void *data,
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/drm_irq.c linux-2.6.23.noarch/drivers/char/drm/drm_irq.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/drm_irq.c	2007-11-26 21:18:35.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/drm_irq.c	2007-11-26 21:16:13.000000000 -0500
+@@ -81,7 +81,7 @@ int drm_irq_by_busid(struct drm_device *
   * \c drm_driver_irq_preinstall() and \c drm_driver_irq_postinstall() functions
   * before and after the installation.
   */
@@ -194,7 +38,7 @@
  {
  	int ret;
  	unsigned long sh_flags = 0;
-@@ -141,6 +141,7 @@ static int drm_irq_install(struct drm_device * dev)
+@@ -141,6 +141,7 @@ static int drm_irq_install(struct drm_de
  
  	return 0;
  }
@@ -202,14 +46,14 @@
  
  /**
   * Uninstall the IRQ handler.
-diff --git a/drivers/char/drm/drm_pciids.h b/drivers/char/drm/drm_pciids.h
-index 30b200b..a59f999 100644
---- a/drivers/char/drm/drm_pciids.h
-+++ b/drivers/char/drm/drm_pciids.h
-@@ -314,3 +314,265 @@
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/drm_pciids.h linux-2.6.23.noarch/drivers/char/drm/drm_pciids.h
+--- linux-2.6.23.noarch.old/drivers/char/drm/drm_pciids.h	2007-11-26 21:18:35.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/drm_pciids.h	2007-11-26 21:24:20.000000000 -0500
+@@ -311,3 +311,265 @@
+ 	{0x8086, 0x2a02, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
  	{0x8086, 0x2a12, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
  	{0, 0, 0}
- 
++
 +#define nouveau_PCI_IDS \
 +	{0x10de, 0x0008, PCI_ANY_ID, PCI_ANY_ID, 0, 0, NV_03}, \
 +	{0x10de, 0x0009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, NV_03}, \
@@ -471,12 +315,80 @@
 +	{0x12d2, 0x002c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, NV_04}, \
 +	{0x12d2, 0x00a0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, NV_04}, \
 +	{0, 0, 0}
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/drmP.h linux-2.6.23.noarch/drivers/char/drm/drmP.h
+--- linux-2.6.23.noarch.old/drivers/char/drm/drmP.h	2007-11-26 21:18:35.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/drmP.h	2007-11-26 21:16:13.000000000 -0500
+@@ -1030,7 +1030,8 @@ extern unsigned long drm_get_resource_st
+ 					    unsigned int resource);
+ extern unsigned long drm_get_resource_len(struct drm_device *dev,
+ 					  unsigned int resource);
+-
++struct drm_map_list *drm_find_matching_map(struct drm_device *dev,
++					   drm_local_map_t *map);
+ 				/* DMA support (drm_dma.h) */
+ extern int drm_dma_setup(struct drm_device *dev);
+ extern void drm_dma_takedown(struct drm_device *dev);
+@@ -1042,6 +1043,7 @@ extern void drm_core_reclaim_buffers(str
+ extern int drm_control(struct drm_device *dev, void *data,
+ 		       struct drm_file *file_priv);
+ extern irqreturn_t drm_irq_handler(DRM_IRQ_ARGS);
++extern int drm_irq_install(struct drm_device * dev);
+ extern int drm_irq_uninstall(struct drm_device *dev);
+ extern void drm_driver_irq_preinstall(struct drm_device *dev);
+ extern void drm_driver_irq_postinstall(struct drm_device *dev);
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/Kconfig linux-2.6.23.noarch/drivers/char/drm/Kconfig
+--- linux-2.6.23.noarch.old/drivers/char/drm/Kconfig	2007-11-26 21:18:35.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/Kconfig	2007-11-26 21:20:41.000000000 -0500
+@@ -105,3 +105,10 @@ config DRM_SAVAGE
+ 	help
+ 	  Choose this option if you have a Savage3D/4/SuperSavage/Pro/Twister
+ 	  chipset. If M is selected the module will be called savage.
 +
-diff --git a/drivers/char/drm/nouveau_dma.c b/drivers/char/drm/nouveau_dma.c
-new file mode 100644
-index 0000000..ab502e6
---- /dev/null
-+++ b/drivers/char/drm/nouveau_dma.c
++config DRM_NOUVEAU
++	tristate "Nvidia video cards"
++	depends on DRM
++	help
++	  Choose this for nvidia open source 3d driver
++
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/Makefile linux-2.6.23.noarch/drivers/char/drm/Makefile
+--- linux-2.6.23.noarch.old/drivers/char/drm/Makefile	2007-11-26 21:18:35.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/Makefile	2007-11-26 21:21:50.000000000 -0500
+@@ -15,6 +15,16 @@ mga-objs    := mga_drv.o mga_dma.o mga_s
+ i810-objs   := i810_drv.o i810_dma.o
+ i830-objs   := i830_drv.o i830_dma.o i830_irq.o
+ i915-objs   := i915_drv.o i915_dma.o i915_irq.o i915_mem.o i915_fence.o i915_buffer.o
++nouveau-objs := nouveau_drv.o nouveau_state.o nouveau_fifo.o nouveau_mem.o \
++	nouveau_object.o nouveau_irq.o nouveau_notifier.o \
++	nouveau_sgdma.o nouveau_dma.o \
++	nv04_timer.o \
++	nv04_mc.o nv40_mc.o nv50_mc.o \
++	nv04_fb.o nv10_fb.o nv40_fb.o \
++	nv04_fifo.o nv10_fifo.o nv40_fifo.o nv50_fifo.o \
++	nv04_graph.o nv10_graph.o nv20_graph.o nv30_graph.o \
++	nv40_graph.o nv50_graph.o \
++	nv04_instmem.o nv50_instmem.o
+ radeon-objs := radeon_drv.o radeon_cp.o radeon_state.o radeon_mem.o radeon_irq.o r300_cmdbuf.o
+ sis-objs    := sis_drv.o sis_mm.o
+ savage-objs := savage_drv.o savage_bci.o savage_state.o
+@@ -26,6 +36,7 @@ radeon-objs += radeon_ioc32.o
+ mga-objs    += mga_ioc32.o
+ r128-objs   += r128_ioc32.o
+ i915-objs   += i915_ioc32.o
++nouveau-objs   += nouveau_ioc32.o
+ endif
+ 
+ obj-$(CONFIG_DRM)	+= drm.o
+@@ -36,6 +47,7 @@ obj-$(CONFIG_DRM_MGA)	+= mga.o
+ obj-$(CONFIG_DRM_I810)	+= i810.o
+ obj-$(CONFIG_DRM_I830)	+= i830.o
+ obj-$(CONFIG_DRM_I915)  += i915.o
++obj-$(CONFIG_DRM_NOUVEAU)   += nouveau.o
+ obj-$(CONFIG_DRM_SIS)   += sis.o
+ obj-$(CONFIG_DRM_SAVAGE)+= savage.o
+ obj-$(CONFIG_DRM_VIA)	+=via.o
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nouveau_dma.c linux-2.6.23.noarch/drivers/char/drm/nouveau_dma.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nouveau_dma.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nouveau_dma.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,177 @@
 +/*
 + * Copyright (C) 2007 Ben Skeggs.
@@ -655,11 +567,9 @@
 +	return 0;
 +}
 +
-diff --git a/drivers/char/drm/nouveau_dma.h b/drivers/char/drm/nouveau_dma.h
-new file mode 100644
-index 0000000..5e51c1c
---- /dev/null
-+++ b/drivers/char/drm/nouveau_dma.h
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nouveau_dma.h linux-2.6.23.noarch/drivers/char/drm/nouveau_dma.h
+--- linux-2.6.23.noarch.old/drivers/char/drm/nouveau_dma.h	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nouveau_dma.h	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,98 @@
 +/*
 + * Copyright (C) 2007 Ben Skeggs.
@@ -759,11 +669,9 @@
 +
 +#endif
 +
-diff --git a/drivers/char/drm/nouveau_drm.h b/drivers/char/drm/nouveau_drm.h
-new file mode 100644
-index 0000000..bfc9bd4
---- /dev/null
-+++ b/drivers/char/drm/nouveau_drm.h
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nouveau_drm.h linux-2.6.23.noarch/drivers/char/drm/nouveau_drm.h
+--- linux-2.6.23.noarch.old/drivers/char/drm/nouveau_drm.h	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nouveau_drm.h	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,166 @@
 +/*
 + * Copyright 2005 Stephane Marchesin.
@@ -931,11 +839,9 @@
 +
 +#endif /* __NOUVEAU_DRM_H__ */
 +
-diff --git a/drivers/char/drm/nouveau_drv.c b/drivers/char/drm/nouveau_drv.c
-new file mode 100644
-index 0000000..387e3d6
---- /dev/null
-+++ b/drivers/char/drm/nouveau_drv.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nouveau_drv.c linux-2.6.23.noarch/drivers/char/drm/nouveau_drv.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nouveau_drv.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nouveau_drv.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,96 @@
 +/*
 + * Copyright 2005 Stephane Marchesin.
@@ -1033,11 +939,9 @@
 +MODULE_AUTHOR(DRIVER_AUTHOR);
 +MODULE_DESCRIPTION(DRIVER_DESC);
 +MODULE_LICENSE("GPL and additional rights");
-diff --git a/drivers/char/drm/nouveau_drv.h b/drivers/char/drm/nouveau_drv.h
-new file mode 100644
-index 0000000..2a16d3b
---- /dev/null
-+++ b/drivers/char/drm/nouveau_drv.h
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nouveau_drv.h linux-2.6.23.noarch/drivers/char/drm/nouveau_drv.h
+--- linux-2.6.23.noarch.old/drivers/char/drm/nouveau_drv.h	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nouveau_drv.h	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,584 @@
 +/*
 + * Copyright 2005 Stephane Marchesin.
@@ -1623,11 +1527,9 @@
 +
 +#endif /* __NOUVEAU_DRV_H__ */
 +
-diff --git a/drivers/char/drm/nouveau_fifo.c b/drivers/char/drm/nouveau_fifo.c
-new file mode 100644
-index 0000000..1aa724f
---- /dev/null
-+++ b/drivers/char/drm/nouveau_fifo.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nouveau_fifo.c linux-2.6.23.noarch/drivers/char/drm/nouveau_fifo.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nouveau_fifo.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nouveau_fifo.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,557 @@
 +/* 
 + * Copyright 2005-2006 Stephane Marchesin
@@ -2186,11 +2088,9 @@
 +};
 +
 +int nouveau_max_ioctl = DRM_ARRAY_SIZE(nouveau_ioctls);
-diff --git a/drivers/char/drm/nouveau_ioc32.c b/drivers/char/drm/nouveau_ioc32.c
-new file mode 100644
-index 0000000..f55ae7a
---- /dev/null
-+++ b/drivers/char/drm/nouveau_ioc32.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nouveau_ioc32.c linux-2.6.23.noarch/drivers/char/drm/nouveau_ioc32.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nouveau_ioc32.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nouveau_ioc32.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,72 @@
 +/**
 + * \file mga_ioc32.c
@@ -2264,11 +2164,9 @@
 +
 +	return ret;
 +}
-diff --git a/drivers/char/drm/nouveau_irq.c b/drivers/char/drm/nouveau_irq.c
-new file mode 100644
-index 0000000..e64677e
---- /dev/null
-+++ b/drivers/char/drm/nouveau_irq.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nouveau_irq.c linux-2.6.23.noarch/drivers/char/drm/nouveau_irq.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nouveau_irq.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nouveau_irq.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,430 @@
 +/*
 + * Copyright (C) 2006 Ben Skeggs.
@@ -2700,11 +2598,9 @@
 +	return IRQ_HANDLED;
 +}
 +
-diff --git a/drivers/char/drm/nouveau_mem.c b/drivers/char/drm/nouveau_mem.c
-new file mode 100644
-index 0000000..1394df5
---- /dev/null
-+++ b/drivers/char/drm/nouveau_mem.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nouveau_mem.c linux-2.6.23.noarch/drivers/char/drm/nouveau_mem.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nouveau_mem.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nouveau_mem.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,616 @@
 +/*
 + * Copyright (C) The Weather Channel, Inc.  2002.  All Rights Reserved.
@@ -3322,11 +3218,9 @@
 +}
 +
 +
-diff --git a/drivers/char/drm/nouveau_notifier.c b/drivers/char/drm/nouveau_notifier.c
-new file mode 100644
-index 0000000..71b8cbe
---- /dev/null
-+++ b/drivers/char/drm/nouveau_notifier.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nouveau_notifier.c linux-2.6.23.noarch/drivers/char/drm/nouveau_notifier.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nouveau_notifier.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nouveau_notifier.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,173 @@
 +/*
 + * Copyright (C) 2007 Ben Skeggs.
@@ -3501,11 +3395,9 @@
 +	return 0;
 +}
 +
-diff --git a/drivers/char/drm/nouveau_object.c b/drivers/char/drm/nouveau_object.c
-new file mode 100644
-index 0000000..fbce770
---- /dev/null
-+++ b/drivers/char/drm/nouveau_object.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nouveau_object.c linux-2.6.23.noarch/drivers/char/drm/nouveau_object.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nouveau_object.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nouveau_object.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,1148 @@
 +/*
 + * Copyright (C) 2006 Ben Skeggs.
@@ -4655,11 +4547,9 @@
 +	return 0;
 +}
 +
-diff --git a/drivers/char/drm/nouveau_reg.h b/drivers/char/drm/nouveau_reg.h
-new file mode 100644
-index 0000000..a1895c3
---- /dev/null
-+++ b/drivers/char/drm/nouveau_reg.h
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nouveau_reg.h linux-2.6.23.noarch/drivers/char/drm/nouveau_reg.h
+--- linux-2.6.23.noarch.old/drivers/char/drm/nouveau_reg.h	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nouveau_reg.h	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,538 @@
 +
 +
@@ -5199,11 +5089,9 @@
 +#define NV40_RAMFC_UNK_4C                                        0x4C
 +#define NV40_RAMFC_UNK_50                                        0x50
 +
-diff --git a/drivers/char/drm/nouveau_sgdma.c b/drivers/char/drm/nouveau_sgdma.c
-new file mode 100644
-index 0000000..3b3d8f9
---- /dev/null
-+++ b/drivers/char/drm/nouveau_sgdma.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nouveau_sgdma.c linux-2.6.23.noarch/drivers/char/drm/nouveau_sgdma.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nouveau_sgdma.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nouveau_sgdma.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,311 @@
 +#include "drmP.h"
 +#include "nouveau_drv.h"
@@ -5516,11 +5404,9 @@
 +	return -EINVAL;
 +}
 +
-diff --git a/drivers/char/drm/nouveau_state.c b/drivers/char/drm/nouveau_state.c
-new file mode 100644
-index 0000000..7ab7f7d
---- /dev/null
-+++ b/drivers/char/drm/nouveau_state.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nouveau_state.c linux-2.6.23.noarch/drivers/char/drm/nouveau_state.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nouveau_state.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nouveau_state.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,569 @@
 +/* 
 + * Copyright 2005 Stephane Marchesin
@@ -6091,11 +5977,9 @@
 +}
 +
 +
-diff --git a/drivers/char/drm/nv04_fb.c b/drivers/char/drm/nv04_fb.c
-new file mode 100644
-index 0000000..534fb50
---- /dev/null
-+++ b/drivers/char/drm/nv04_fb.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nv04_fb.c linux-2.6.23.noarch/drivers/char/drm/nv04_fb.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nv04_fb.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nv04_fb.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,24 @@
 +#include "drmP.h"
 +#include "drm.h"
@@ -6121,11 +6005,9 @@
 +{
 +}
 +
-diff --git a/drivers/char/drm/nv04_fifo.c b/drivers/char/drm/nv04_fifo.c
-new file mode 100644
-index 0000000..d750ced
---- /dev/null
-+++ b/drivers/char/drm/nv04_fifo.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nv04_fifo.c linux-2.6.23.noarch/drivers/char/drm/nv04_fifo.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nv04_fifo.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nv04_fifo.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,129 @@
 +/*
 + * Copyright (C) 2007 Ben Skeggs.
@@ -6256,11 +6138,9 @@
 +	return 0;
 +}
 +
-diff --git a/drivers/char/drm/nv04_graph.c b/drivers/char/drm/nv04_graph.c
-new file mode 100644
-index 0000000..050f6e8
---- /dev/null
-+++ b/drivers/char/drm/nv04_graph.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nv04_graph.c linux-2.6.23.noarch/drivers/char/drm/nv04_graph.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nv04_graph.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nv04_graph.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,415 @@
 +/* 
 + * Copyright 2007 Stephane Marchesin
@@ -6677,11 +6557,9 @@
 +{
 +}
 +
-diff --git a/drivers/char/drm/nv04_instmem.c b/drivers/char/drm/nv04_instmem.c
-new file mode 100644
-index 0000000..fed6ff7
---- /dev/null
-+++ b/drivers/char/drm/nv04_instmem.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nv04_instmem.c linux-2.6.23.noarch/drivers/char/drm/nv04_instmem.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nv04_instmem.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nv04_instmem.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,160 @@
 +#include "drmP.h"
 +#include "drm.h"
@@ -6843,11 +6721,9 @@
 +	return 0;
 +}
 +
-diff --git a/drivers/char/drm/nv04_mc.c b/drivers/char/drm/nv04_mc.c
-new file mode 100644
-index 0000000..eee0c50
---- /dev/null
-+++ b/drivers/char/drm/nv04_mc.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nv04_mc.c linux-2.6.23.noarch/drivers/char/drm/nv04_mc.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nv04_mc.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nv04_mc.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,23 @@
 +#include "drmP.h"
 +#include "drm.h"
@@ -6872,11 +6748,9 @@
 +{
 +}
 +
-diff --git a/drivers/char/drm/nv04_timer.c b/drivers/char/drm/nv04_timer.c
-new file mode 100644
-index 0000000..08a27f4
---- /dev/null
-+++ b/drivers/char/drm/nv04_timer.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nv04_timer.c linux-2.6.23.noarch/drivers/char/drm/nv04_timer.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nv04_timer.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nv04_timer.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,45 @@
 +#include "drmP.h"
 +#include "drm.h"
@@ -6923,11 +6797,9 @@
 +{
 +}
 +
-diff --git a/drivers/char/drm/nv10_fb.c b/drivers/char/drm/nv10_fb.c
-new file mode 100644
-index 0000000..7fff5b3
---- /dev/null
-+++ b/drivers/char/drm/nv10_fb.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nv10_fb.c linux-2.6.23.noarch/drivers/char/drm/nv10_fb.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nv10_fb.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nv10_fb.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,26 @@
 +#include "drmP.h"
 +#include "drm.h"
@@ -6955,11 +6827,9 @@
 +{
 +}
 +
-diff --git a/drivers/char/drm/nv10_fifo.c b/drivers/char/drm/nv10_fifo.c
-new file mode 100644
-index 0000000..c86725d
---- /dev/null
-+++ b/drivers/char/drm/nv10_fifo.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nv10_fifo.c linux-2.6.23.noarch/drivers/char/drm/nv10_fifo.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nv10_fifo.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nv10_fifo.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,160 @@
 +/*
 + * Copyright (C) 2007 Ben Skeggs.
@@ -7121,11 +6991,9 @@
 +	return 0;
 +}
 +
-diff --git a/drivers/char/drm/nv10_graph.c b/drivers/char/drm/nv10_graph.c
-new file mode 100644
-index 0000000..e470ff0
---- /dev/null
-+++ b/drivers/char/drm/nv10_graph.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nv10_graph.c linux-2.6.23.noarch/drivers/char/drm/nv10_graph.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nv10_graph.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nv10_graph.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,777 @@
 +/* 
 + * Copyright 2007 Matthieu CASTET <castet.matthieu at free.fr>
@@ -7904,11 +7772,9 @@
 +{
 +}
 +
-diff --git a/drivers/char/drm/nv20_graph.c b/drivers/char/drm/nv20_graph.c
-new file mode 100644
-index 0000000..c163daf
---- /dev/null
-+++ b/drivers/char/drm/nv20_graph.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nv20_graph.c linux-2.6.23.noarch/drivers/char/drm/nv20_graph.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nv20_graph.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nv20_graph.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,249 @@
 +/* 
 + * Copyright 2007 Matthieu CASTET <castet.matthieu at free.fr>
@@ -8159,11 +8025,9 @@
 +	nouveau_gpuobj_ref_del(dev, &dev_priv->ctx_table);
 +}
 +
-diff --git a/drivers/char/drm/nv30_graph.c b/drivers/char/drm/nv30_graph.c
-new file mode 100644
-index 0000000..ca43bb9
---- /dev/null
-+++ b/drivers/char/drm/nv30_graph.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nv30_graph.c linux-2.6.23.noarch/drivers/char/drm/nv30_graph.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nv30_graph.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nv30_graph.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,2911 @@
 +/*
 + * Based on nv40_graph.c
@@ -11076,11 +10940,9 @@
 +	nouveau_gpuobj_ref_del(dev, &dev_priv->ctx_table);
 +}
 +
-diff --git a/drivers/char/drm/nv40_fb.c b/drivers/char/drm/nv40_fb.c
-new file mode 100644
-index 0000000..2cbb40e
---- /dev/null
-+++ b/drivers/char/drm/nv40_fb.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nv40_fb.c linux-2.6.23.noarch/drivers/char/drm/nv40_fb.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nv40_fb.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nv40_fb.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,56 @@
 +#include "drmP.h"
 +#include "drm.h"
@@ -11138,11 +11000,9 @@
 +{
 +}
 +
-diff --git a/drivers/char/drm/nv40_fifo.c b/drivers/char/drm/nv40_fifo.c
-new file mode 100644
-index 0000000..ce3f8fd
---- /dev/null
-+++ b/drivers/char/drm/nv40_fifo.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nv40_fifo.c linux-2.6.23.noarch/drivers/char/drm/nv40_fifo.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nv40_fifo.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nv40_fifo.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,208 @@
 +/*
 + * Copyright (C) 2007 Ben Skeggs.
@@ -11352,11 +11212,9 @@
 +	return 0;
 +}
 +
-diff --git a/drivers/char/drm/nv40_graph.c b/drivers/char/drm/nv40_graph.c
-new file mode 100644
-index 0000000..26237c7
---- /dev/null
-+++ b/drivers/char/drm/nv40_graph.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nv40_graph.c linux-2.6.23.noarch/drivers/char/drm/nv40_graph.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nv40_graph.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nv40_graph.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,1906 @@
 +/*
 + * Copyright (C) 2007 Ben Skeggs.
@@ -13264,11 +13122,9 @@
 +{
 +}
 +
-diff --git a/drivers/char/drm/nv40_mc.c b/drivers/char/drm/nv40_mc.c
-new file mode 100644
-index 0000000..c7db902
---- /dev/null
-+++ b/drivers/char/drm/nv40_mc.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nv40_mc.c linux-2.6.23.noarch/drivers/char/drm/nv40_mc.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nv40_mc.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nv40_mc.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,39 @@
 +#include "drmP.h"
 +#include "drm.h"
@@ -13309,11 +13165,9 @@
 +{
 +}
 +
-diff --git a/drivers/char/drm/nv50_fifo.c b/drivers/char/drm/nv50_fifo.c
-new file mode 100644
-index 0000000..7859544
---- /dev/null
-+++ b/drivers/char/drm/nv50_fifo.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nv50_fifo.c linux-2.6.23.noarch/drivers/char/drm/nv50_fifo.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nv50_fifo.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nv50_fifo.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,327 @@
 +/*
 + * Copyright (C) 2007 Ben Skeggs.
@@ -13642,11 +13496,9 @@
 +	return 0;
 +}
 +
-diff --git a/drivers/char/drm/nv50_graph.c b/drivers/char/drm/nv50_graph.c
-new file mode 100644
-index 0000000..e5bbf65
---- /dev/null
-+++ b/drivers/char/drm/nv50_graph.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nv50_graph.c linux-2.6.23.noarch/drivers/char/drm/nv50_graph.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nv50_graph.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nv50_graph.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,316 @@
 +/*
 + * Copyright (C) 2007 Ben Skeggs.
@@ -13964,11 +13816,9 @@
 +	return nv50_graph_transfer_context(dev, inst, 1);
 +}
 +
-diff --git a/drivers/char/drm/nv50_instmem.c b/drivers/char/drm/nv50_instmem.c
-new file mode 100644
-index 0000000..1eeb54d
---- /dev/null
-+++ b/drivers/char/drm/nv50_instmem.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nv50_instmem.c linux-2.6.23.noarch/drivers/char/drm/nv50_instmem.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nv50_instmem.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nv50_instmem.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,320 @@
 +/*
 + * Copyright (C) 2007 Ben Skeggs.
@@ -14290,11 +14140,9 @@
 +	return 0;
 +}
 +
-diff --git a/drivers/char/drm/nv50_mc.c b/drivers/char/drm/nv50_mc.c
-new file mode 100644
-index 0000000..b111826
---- /dev/null
-+++ b/drivers/char/drm/nv50_mc.c
+diff -uNrp linux-2.6.23.noarch.old/drivers/char/drm/nv50_mc.c linux-2.6.23.noarch/drivers/char/drm/nv50_mc.c
+--- linux-2.6.23.noarch.old/drivers/char/drm/nv50_mc.c	1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.23.noarch/drivers/char/drm/nv50_mc.c	2007-11-26 21:16:13.000000000 -0500
 @@ -0,0 +1,43 @@
 +/*
 + * Copyright (C) 2007 Ben Skeggs.
@@ -14339,6 +14187,3 @@
 +void nv50_mc_takedown(struct drm_device *dev)
 +{
 +}
--- 
-1.5.2.5
-


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/sources,v
retrieving revision 1.676
retrieving revision 1.677
diff -u -r1.676 -r1.677
--- sources	8 Feb 2008 20:57:57 -0000	1.676
+++ sources	15 Feb 2008 23:58:54 -0000	1.677
@@ -1,2 +1,2 @@
-2cc2fd4d521dc5d7cfce0d8a9d1b3472  linux-2.6.23.tar.bz2
-abcfefd33764b539dcce7fe3e32b1650  patch-2.6.23.15.bz2
+3f23ad4b69d0a552042d1ed0f4399857  linux-2.6.24.tar.bz2
+5e7fb6b61bd5af063ddd50b548355e94  patch-2.6.24.2.bz2


Index: upstream
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/upstream,v
retrieving revision 1.597
retrieving revision 1.598
diff -u -r1.597 -r1.598
--- upstream	8 Feb 2008 20:57:57 -0000	1.597
+++ upstream	15 Feb 2008 23:58:54 -0000	1.598
@@ -1,2 +1,2 @@
-linux-2.6.23.tar.bz2
-patch-2.6.23.15.bz2
+linux-2.6.24.tar.bz2
+patch-2.6.24.2.bz2


--- drm-mm-git.patch DELETED ---


--- linux-2.6-acpi-button-send-initial-state.patch DELETED ---


--- linux-2.6-acpi-cpuidle-0-upstream.patch DELETED ---


--- linux-2.6-acpi-cpuidle-1-fix-C3-for-no-bm-ctrl.patch DELETED ---


--- linux-2.6-acpi-cpuidle-2-fix-HP-nx6125-regression.patch DELETED ---


--- linux-2.6-acpi-dont-init-ec-early-with-no-ini.patch DELETED ---


--- linux-2.6-acpi-git-ec-init-fixes.patch DELETED ---


--- linux-2.6-acpi-video-brightness-bigger-buffer.patch DELETED ---


--- linux-2.6-acpi_ec_early_init_fix.patch DELETED ---


--- linux-2.6-add-mmf_dump_elf_headers.patch DELETED ---


--- linux-2.6-add-sys-module-name-notes.patch DELETED ---


--- linux-2.6-alsa-1.0.15-merge-1.patch DELETED ---


--- linux-2.6-alsa-1.0.15-merge-2.patch DELETED ---


--- linux-2.6-alsa-1.0.15-merge-3.patch DELETED ---


--- linux-2.6-bestcomm-dma.patch DELETED ---


--- linux-2.6-cifs-fix-bad-handling-of-EAGAIN.patch DELETED ---


--- linux-2.6-cifs-fix-incomplete-rcv.patch DELETED ---


--- linux-2.6-cifs-typo-in-cifs_reconnect-fix.patch DELETED ---


--- linux-2.6-debug-acpi-os-write-port.patch DELETED ---


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


--- linux-2.6-defaults-nonmi.patch DELETED ---


--- linux-2.6-dio-fix-cache-invalidation-after-sync-writes.patch DELETED ---


--- linux-2.6-fec_mpc52xx.patch DELETED ---


--- linux-2.6-highres-timers.patch DELETED ---


--- linux-2.6-ia64-build-id-linker-script-fix.patch DELETED ---


--- linux-2.6-ibmvscsi-schizo.patch DELETED ---


--- linux-2.6-input-fix-sync-loss-acer-aspire.patch DELETED ---


--- linux-2.6-libata-acpi-enable.patch DELETED ---


--- linux-2.6-libata-add-dma-disable-option.patch DELETED ---


--- linux-2.6-libata-ahci-enable-ahci-mode-before-reset.patch DELETED ---


--- linux-2.6-libata-correct-iordy-handling.patch DELETED ---


--- linux-2.6-libata-dont-fail-revalidation-for-bad-gtf-methods.patch DELETED ---


--- linux-2.6-libata-fix-bogus-lba48-disks.patch DELETED ---


--- linux-2.6-libata-pata_serverworks-fix-drive-combinations.patch DELETED ---


--- linux-2.6-libata-scsi-allow-short-commands.patch DELETED ---


--- linux-2.6-libata-tape-max-sectors.patch DELETED ---


--- linux-2.6-libata-use-stuck-err-for-tapes.patch DELETED ---


--- linux-2.6-libata-work-around-drq-1-err-1-for-tapes.patch DELETED ---


--- linux-2.6-modules-modalias-platform.patch DELETED ---


--- linux-2.6-net-e100-disable-polling.patch DELETED ---


--- linux-2.6-netdev-atl2-2.0.3.patch DELETED ---


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


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


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


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


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


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


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


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


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


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


--- linux-2.6-netdev-spidernet-fix-interrupt-handling.patch DELETED ---


--- linux-2.6-pasemi-5945-workaround.patch DELETED ---


--- linux-2.6-pasemi-broken-regread.patch DELETED ---


--- linux-2.6-pasemi-getcfgaddr.patch DELETED ---


--- linux-2.6-pasemi-mac.patch DELETED ---


--- linux-2.6-pasemi-mdio-gpio.patch DELETED ---


--- linux-2.6-pasemi-no-mpic-reset.patch DELETED ---


--- linux-2.6-pasemi-smp-timebase-fix.patch DELETED ---


--- linux-2.6-pass-g-to-assembler-under-config_debug_info.patch DELETED ---


--- linux-2.6-pci-dont-size-transparent-bridges.patch DELETED ---


--- linux-2.6-pmac-zilog.patch DELETED ---


--- linux-2.6-pmtrace-time-fix.patch DELETED ---


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


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


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


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


--- linux-2.6-powerpc-lparmap-g.patch DELETED ---


--- linux-2.6-powerpc-vdso-install-unstripped-copies-on-disk.patch DELETED ---


--- linux-2.6-ppc-fix-dso-unwind.patch DELETED ---


--- linux-2.6-ppc-pegasos-via-ata-legacy-irq.patch DELETED ---


--- linux-2.6-ppc32-ucmpdi2.patch DELETED ---


--- linux-2.6-proc-self-maps-fix.patch DELETED ---


--- linux-2.6-rheap-modular.patch DELETED ---


--- linux-2.6-rndis_wext.patch DELETED ---


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


--- linux-2.6-scsi-initio-fix-hang-on-load.patch DELETED ---


--- linux-2.6-selinux-ebitmap-for-avc-miss-cleanup.patch DELETED ---


--- linux-2.6-selinux-ebitmap-for-avc-miss.patch DELETED ---


--- linux-2.6-selinux-ebitmap-loop-bug.patch DELETED ---


--- linux-2.6-selinux-fix-netlabel-leak.patch DELETED ---


--- linux-2.6-selinux-no-revalidate-read-write.patch DELETED ---


--- linux-2.6-selinux-sigchld-wait.patch DELETED ---


--- linux-2.6-selinux-strip-leading-slashes.patch DELETED ---


--- linux-2.6-serial_pnp-add-new-wacom-ids.patch DELETED ---


--- linux-2.6-slub-provide-proc-slabinfo.patch DELETED ---


--- linux-2.6-usb-huawei-fix-init-in-modem-mode.patch DELETED ---


--- linux-2.6-usb-storage-always-set-the-allow_restart-flag.patch DELETED ---


--- linux-2.6-usb-storage-initialize-huawei-e220-properly.patch DELETED ---


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


--- linux-2.6-wakeups-hdaps.patch DELETED ---


--- linux-2.6-wakeups.patch DELETED ---


--- linux-2.6-x86-clean-up-oops-bug-reports.patch DELETED ---


--- linux-2.6-x86-tsc-calibration-2.patch DELETED ---


--- linux-2.6-x86_64-ia32-vdso-install-unstripped-copies-on-disk.patch DELETED ---


--- linux-2.6-x86_64-vdso-install-unstripped-copies-on-disk.patch DELETED ---


--- linux-2.6-xfs-optimize-away-dmapi-tests.patch DELETED ---


--- linux-2.6-xfs-refactor-xfs_mountfs.patch DELETED ---


--- linux-2.6.23.tar.bz2.sign DELETED ---


--- patch-2.6.23.15.bz2.sign DELETED ---




More information about the fedora-extras-commits mailing list