rpms/kernel/F-11 die-floppy-die.patch, NONE, 1.1 drm-connection-cache.patch, NONE, 1.1 drm-intel-next.patch, 1.9, 1.10 drm-intel-pm.patch, NONE, 1.1 drm-page-flip.patch, NONE, 1.1 drm-radeon-dp-support.patch, NONE, 1.1 drm-radeon-fix-crtc-vbl-update-for-r600.patch, NONE, 1.1 drm-radeon-fixes.patch, NONE, 1.1 ext4-fix-insufficient-checks-in-EXT4_IOC_MOVE_EXT.patch, NONE, 1.1 fix-9p-fscache.patch, NONE, 1.1 linux-2.6-autoload-wmi.patch, NONE, 1.1 linux-2.6-block-silently-error-unsupported-empty-barriers-too.patch, NONE, 1.1 linux-2.6-defaults-aspm.patch, NONE, 1.1 linux-2.6-dell-laptop-rfkill-fix.patch, NONE, 1.1 linux-2.6-driver-level-usb-autosuspend.diff, NONE, 1.1 linux-2.6-enable-btusb-autosuspend.patch, NONE, 1.1 linux-2.6-fix-btusb-autosuspend.patch, NONE, 1.1 linux-2.6-fix-usb-serial-autosuspend.diff, NONE, 1.1 linux-2.6-intel-agp-clear-gtt.patch, NONE, 1.1 linux-2.6-ksm-kvm.patch, NONE, 1.1 linux-2.6-nfs4-callback-hidden.patch, NONE, 1.1 linux-2.6-nfsd4-proots.patch, NONE, 1.1 linux-2.6-pci-cacheline-sizing.patch, NONE, 1.1 linux-2.6-qcserial-autosuspend.diff, NONE, 1.1 linux-2.6-rfkill-all.patch, NONE, 1.1 linux-2.6-sparc-selinux-mprotect-checks.patch, 1.3, 1.4 linux-2.6-usb-uvc-autosuspend.diff, NONE, 1.1 linux-2.6-userspace_kvmclock_offset.patch, NONE, 1.1 linux-2.6-utrace-ptrace.patch, NONE, 1.1 linux-2.6.30-hush-rom-warning.patch, NONE, 1.1 linux-2.6.30-no-pcspkr-modalias.patch, NONE, 1.1 linux-2.6.31-modules-ro-nx.patch, NONE, 1.1 linux-2.6.31-nx-data.patch, NONE, 1.1 linux-2.6.32.tar.bz2.sign, NONE, 1.1 lirc-2.6.32.patch, NONE, 1.1 patch-2.6.32.2.bz2.sign, NONE, 1.1 perf, NONE, 1.1 v4l-dvb-fix-cx25840-firmware-loading.patch, NONE, 1.1 Makefile, 1.106, 1.107 Makefile.config, 1.70, 1.71 TODO, 1.74, 1.75 config-arm, 1.4, 1.5 config-debug, 1.28, 1.29 config-generic, 1.294, 1.295 config-i686-PAE, 1.1, 1.2 config-ia64-generic, 1.26, 1.27 config-nodebug, 1.37, 1.38 config-powerpc-generic, 1.44, 1.45 config-powerpc32-generic, 1.31, 1.32 config-powerpc64, 1.29, 1.30 config-s390x, 1.14, 1.15 config-sparc64-generic, 1.28, 1.29 config-x86-generic, 1.80, 1.81 config-x86_64-generic, 1.80, 1.81 drm-i915-resume-force-mode.patch, 1.3, 1.4 drm-intel-big-hammer.patch, 1.2, 1.3 drm-next.patch, 1.19, 1.20 drm-nouveau.patch, 1.61, 1.62 gen-patches, 1.5, 1.6 hdpvr-ir-enable.patch, 1.4, 1.5 kernel.spec, 1.1785, 1.1786 linux-2.6-build-nonintconfig.patch, 1.15, 1.16 linux-2.6-crash-driver.patch, 1.15, 1.16 linux-2.6-debug-always-inline-kzalloc.patch, 1.1, 1.2 linux-2.6-debug-nmi-timeout.patch, 1.5, 1.6 linux-2.6-debug-sizeof-structs.patch, 1.6, 1.7 linux-2.6-debug-spinlock-taint.patch, 1.10, 1.11 linux-2.6-debug-taint-vm.patch, 1.24, 1.25 linux-2.6-debug-vm-would-have-oomkilled.patch, 1.2, 1.3 linux-2.6-defaults-pci_no_msi.patch, 1.5, 1.6 linux-2.6-execshield.patch, 1.107, 1.108 linux-2.6-makefile-after_link.patch, 1.1, 1.2 linux-2.6-selinux-mprotect-checks.patch, 1.9, 1.10 linux-2.6-serial-460800.patch, 1.2, 1.3 linux-2.6-silence-acpi-blacklist.patch, 1.1, 1.2 linux-2.6-tracehook.patch, 1.11, 1.12 linux-2.6-upstream-reverts.patch, 1.10, 1.11 linux-2.6-utrace.patch, 1.113, 1.114 linux-2.6-v4l-dvb-fixes.patch, 1.16, 1.17 sources, 1.1022, 1.1023 upstream, 1.933, 1.934 via-hwmon-temp-sensor.patch, 1.1, 1.2 acpi-ec-merge-irq-and-poll-modes.patch, 1.1, NONE acpi-ec-restart-command-even-if-no-interrupts-from-ec.patch, 1.1, NONE acpi-ec-use-burst-mode-only-for-msi-notebooks.patch, 1.1, NONE acpi-revert-attach-device-to-handle-early.patch, 1.1, NONE af_unix-fix-deadlock-connecting-to-shutdown-socket.patch, 1.1, NONE agp-set_memory_ucwb.patch, 1.4, NONE appletalk-fix-skb-leak-when-ipddp-interface-is-not-loaded.patch, 1.1, NONE ax25-fix-possible-oops-in-ax25_make_new.patch, 1.1, NONE branch, 1.1, NONE config-i586, 1.6, NONE config-powerpc64-kdump, 1.1, NONE config-sparc64-smp, 1.5, NONE disable-stackprotector-all.patch, 1.1, NONE drm-dont-frob-i2c.patch, 1.3, NONE drm-i915-enable-mchbar.patch, 1.3, NONE drm-intel-gem-use-dma32-on-pae.patch, 1.3, NONE drm-intel-gen3-fb-hack.patch, 1.3, NONE drm-intel-hdmi-edid-fix.patch, 1.3, NONE drm-modesetting-radeon-fixes.patch, 1.3, NONE drm-modesetting-radeon.patch, 1.84, NONE drm-no-gem-on-i8xx.patch, 1.6, NONE drm-pnp-add-resource-range-checker.patch, 1.3, NONE drm-r128-add-test-for-initialisation-to-all-ioctls-that-require-it.patch, 1.1, NONE drm-radeon-cs-oops-fix.patch, 1.4, NONE drm-radeon-new-pciids.patch, 1.3, NONE drm-silence-pointless-vblank-warning.patch, 1.1, NONE ecryptfs-check-for-o_rdonly-lower-inodes-when-opening-lower-files.patch, 1.1, NONE ecryptfs-filename-encryption-only-supports-password-auth-tokens.patch, 1.1, NONE ecryptfs-handle-unrecognized-tag-3-cipher-codes.patch, 1.1, NONE ecryptfs-prevent-lower-dentry-from-going-negative-during-unlink.patch, 1.1, NONE ecryptfs-validate-global-auth-tok-keys.patch, 1.1, NONE forcedeth-fix-napi-race.patch, 1.1, NONE fs-pipe-null-ptr-deref-fix.patch, 1.1, NONE ftrace-check-for-failure-for-all-conversions.patch, 1.1, NONE ftrace-use-module-notifier-for-function-tracer.patch, 1.1, NONE fuse-fix-kunmap-in-fuse_ioctl_copy_user.patch, 1.1, NONE fuse-prevent-fuse_put_request-in-invalid-ptr.patch, 1.1, NONE hda-check-strcpy-length.patch, 1.1, NONE hid-ignore-all-recent-imon-devices.patch, 1.2, NONE hostap-revert-toxic-part-of-conversion.patch, 1.1, NONE input-i8042-bypass-aux-irq-delivery-test-on-laptops.patch, 1.1, NONE input-i8042-try-disabling-and-re-enabling-aux-port-at-close.patch, 1.1, NONE keys-get_instantiation_keyring-should-inc-the-keyring-refcount.patch, 1.1, NONE kvm-prevent-overflow-in-kvm-get-supported-cpuid.patch, 1.1, NONE libata-fix-incorrect-link-online-check-during-probe.patch, 1.1, NONE linux-2.6-btrfs-experimental-branch.patch, 1.4, NONE linux-2.6-cfq-choose-new-next-req.patch, 1.1, NONE linux-2.6-cpufreq-cleanup-locking-in-ondemand.patch, 1.1, NONE linux-2.6-cpufreq-eliminate-lockdep-warnings.patch, 1.1, NONE linux-2.6-cpufreq-enable-acpi-pstates-on-via.patch, 1.1, NONE linux-2.6-defaults-die-floppy-die.patch, 1.1, NONE linux-2.6-defaults-saner-vm-settings.patch, 1.3, NONE linux-2.6-drivers-char-low-latency-removal.patch, 1.5, NONE linux-2.6-ecryptfs-overflow-fixes.patch, 1.2, NONE linux-2.6-ext4-prealloc-fixes.patch, 1.5, NONE linux-2.6-fs-cifs-fix-port-numbers.patch, 1.3, NONE linux-2.6-input-wacom-bluetooth.patch, 1.3, NONE linux-2.6-iwlwifi_-fix-TX-queue-race.patch, 1.1, NONE linux-2.6-kvm-skip-pit-check.patch, 1.3, NONE linux-2.6-libertas-crash.patch, 1.1, NONE linux-2.6-missing-rfc2465-stats.patch, 1.1, NONE linux-2.6-mm-lru-dont-evict-mapped-executable-pages.patch, 1.4, NONE linux-2.6-mm-lru-evict-streaming-io-pages-first.patch, 1.5, NONE linux-2.6-mm-lru-report-vm-flags-in-page-referenced.patch, 1.3, NONE linux-2.6-neigh_-fix-state-transition-INCOMPLETE-_FAILED-via-Netlink-request.patch, 1.1, NONE linux-2.6-ppc64-vs-broadcom-lmb-no-init-1.patch, 1.1, NONE linux-2.6-ppc64-vs-broadcom-lmb-no-init-2.patch, 1.1, NONE linux-2.6-ppc64-vs-broadcom.patch, 1.2, NONE linux-2.6-serial-add-txen-test-param.patch, 1.3, NONE linux-2.6-sysrq-c.patch, 1.4, NONE linux-2.6-utrace-ftrace.patch, 1.4, NONE linux-2.6-v4l-dvb-af9015-fix-stack-corruption.patch, 1.1, NONE linux-2.6-virtio-net-refill-on-out-of-memory.patch, 1.1, NONE linux-2.6-virtio_blk-dont-bounce-highmem-requests.patch, 1.3, NONE linux-2.6-virtio_blk-revert-QUEUE_FLAG_VIRT-addition.patch, 1.1, NONE linux-2.6-x86-delay-tsc-barrier.patch, 1.3, NONE linux-2.6-x86-load-percpu-segment-no-stackprotector.patch, 1.1, NONE linux-2.6-xen-clean-up-warnings.patch, 1.1, NONE linux-2.6-xen-fix-brkpoints-hw-watchpoints.patch, 1.1, NONE linux-2.6-xen-rearrange-to-fix-stackprotector.patch, 1.1, NONE linux-2.6-xfrm-export-gc_thresh.patch, 1.1, NONE linux-2.6-zd1211rw_-adding-083a_e503-as-a-ZD1211B-device.patch, 1.2, NONE linux-2.6.29-xen-disable-gbpages.patch, 1.3, NONE linux-2.6.30-cpuidle-faster-io.patch, 1.1, NONE linux-2.6.30.tar.bz2.sign, 1.1, NONE lirc-2.6.31.patch, 1.3, NONE lirc-revert-2.6.31-i2c-changes.patch, 1.2, NONE make-mmap_min_addr-suck-less.patch, 1.1, NONE net-fix-wrong-sizeof.patch, 1.1, NONE net-unix-fix-sending-fds-in-multiple-buffers.patch, 1.1, NONE netlink-fix-typo-in-initialization.patch, 1.1, NONE patch-2.6.30.10.bz2.sign, 1.1, NONE sata_nv-make-sure-link-is-brough-up-online-when-skipping-hardreset.patch, 1.1, NONE sata_nv-use-hardreset-only-for-post-boot-probing.patch, 1.1, NONE sched-deal-with-low-load-in-wake-affine.patch, 1.1, NONE sched-ensure-child-cant-gain-time-over-its-parent-after-fork.patch, 1.1, NONE sched-remove-shortcut-from-select-task-rq-fair.patch, 1.1, NONE sched-retune-scheduler-latency-defaults.patch, 1.1, NONE sched-update-the-clock-of-runqueue-select-task-rq-selected.patch, 1.1, NONE shut-up-LOCK_TEST_WITH_RETURN.patch, 1.1, NONE sit-fix-off-by-one-in-ipip6_tunnel_get_prl.patch, 1.1, NONE sky2-set-sky2_hw_ram_buffer-in-sky2_init.patch, 1.1, NONE smsc95xx-fix-transmission-where-zlp-is-expected.patch, 1.1, NONE tcp-fix-config_tcp_md5sig-config_preempt-timer-bug.patch, 1.1, NONE tracing-correct-module-boundaries-for-ftrace_release.patch, 1.1, NONE v4l-dvb-fix-cx25840-firmware-load.patch, 1.2, NONE via-padlock-10-enable-64bit.patch, 1.1, NONE via-padlock-20-add-x86-dependency.patch, 1.1, NONE via-padlock-30-fix-might-sleep.patch, 1.1, NONE via-padlock-40-nano-ecb.patch, 1.1, NONE via-padlock-50-nano-cbc.patch, 1.1, NONE via-rng-enable-64bit.patch, 1.1, NONE via-sdmmc.patch, 1.3, NONE x86-dont-leak-64-bit-kernel-register-values.patch, 1.1, NONE x86-fix-csum_ipv6_magic-asm-memory-clobber.patch, 1.1, NONE x86-increase-min_gap-to-include-randomized-stack.patch, 1.1, NONE

Kyle McMartin kyle at fedoraproject.org
Mon Jan 4 15:26:05 UTC 2010


Author: kyle

Update of /cvs/pkgs/rpms/kernel/F-11
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv10342

Modified Files:
	Makefile Makefile.config TODO config-arm config-debug 
	config-generic config-i686-PAE config-ia64-generic 
	config-nodebug config-powerpc-generic config-powerpc32-generic 
	config-powerpc64 config-s390x config-sparc64-generic 
	config-x86-generic config-x86_64-generic 
	drm-i915-resume-force-mode.patch drm-intel-big-hammer.patch 
	drm-next.patch drm-nouveau.patch gen-patches 
	hdpvr-ir-enable.patch kernel.spec 
	linux-2.6-build-nonintconfig.patch 
	linux-2.6-crash-driver.patch 
	linux-2.6-debug-always-inline-kzalloc.patch 
	linux-2.6-debug-nmi-timeout.patch 
	linux-2.6-debug-sizeof-structs.patch 
	linux-2.6-debug-spinlock-taint.patch 
	linux-2.6-debug-taint-vm.patch 
	linux-2.6-debug-vm-would-have-oomkilled.patch 
	linux-2.6-defaults-pci_no_msi.patch linux-2.6-execshield.patch 
	linux-2.6-makefile-after_link.patch 
	linux-2.6-selinux-mprotect-checks.patch 
	linux-2.6-serial-460800.patch 
	linux-2.6-silence-acpi-blacklist.patch 
	linux-2.6-tracehook.patch linux-2.6-upstream-reverts.patch 
	linux-2.6-utrace.patch linux-2.6-v4l-dvb-fixes.patch sources 
	upstream via-hwmon-temp-sensor.patch 
Added Files:
	die-floppy-die.patch drm-connection-cache.patch 
	drm-intel-next.patch drm-intel-pm.patch drm-page-flip.patch 
	drm-radeon-dp-support.patch 
	drm-radeon-fix-crtc-vbl-update-for-r600.patch 
	drm-radeon-fixes.patch 
	ext4-fix-insufficient-checks-in-EXT4_IOC_MOVE_EXT.patch 
	fix-9p-fscache.patch linux-2.6-autoload-wmi.patch 
	linux-2.6-block-silently-error-unsupported-empty-barriers-too.patch 
	linux-2.6-defaults-aspm.patch 
	linux-2.6-dell-laptop-rfkill-fix.patch 
	linux-2.6-driver-level-usb-autosuspend.diff 
	linux-2.6-enable-btusb-autosuspend.patch 
	linux-2.6-fix-btusb-autosuspend.patch 
	linux-2.6-fix-usb-serial-autosuspend.diff 
	linux-2.6-intel-agp-clear-gtt.patch linux-2.6-ksm-kvm.patch 
	linux-2.6-nfs4-callback-hidden.patch 
	linux-2.6-nfsd4-proots.patch 
	linux-2.6-pci-cacheline-sizing.patch 
	linux-2.6-qcserial-autosuspend.diff linux-2.6-rfkill-all.patch 
	linux-2.6-sparc-selinux-mprotect-checks.patch 
	linux-2.6-usb-uvc-autosuspend.diff 
	linux-2.6-userspace_kvmclock_offset.patch 
	linux-2.6-utrace-ptrace.patch 
	linux-2.6.30-hush-rom-warning.patch 
	linux-2.6.30-no-pcspkr-modalias.patch 
	linux-2.6.31-modules-ro-nx.patch linux-2.6.31-nx-data.patch 
	linux-2.6.32.tar.bz2.sign lirc-2.6.32.patch 
	patch-2.6.32.2.bz2.sign perf 
	v4l-dvb-fix-cx25840-firmware-loading.patch 
Removed Files:
	acpi-ec-merge-irq-and-poll-modes.patch 
	acpi-ec-restart-command-even-if-no-interrupts-from-ec.patch 
	acpi-ec-use-burst-mode-only-for-msi-notebooks.patch 
	acpi-revert-attach-device-to-handle-early.patch 
	af_unix-fix-deadlock-connecting-to-shutdown-socket.patch 
	agp-set_memory_ucwb.patch 
	appletalk-fix-skb-leak-when-ipddp-interface-is-not-loaded.patch 
	ax25-fix-possible-oops-in-ax25_make_new.patch branch 
	config-i586 config-powerpc64-kdump config-sparc64-smp 
	disable-stackprotector-all.patch drm-dont-frob-i2c.patch 
	drm-i915-enable-mchbar.patch 
	drm-intel-gem-use-dma32-on-pae.patch 
	drm-intel-gen3-fb-hack.patch drm-intel-hdmi-edid-fix.patch 
	drm-modesetting-radeon-fixes.patch 
	drm-modesetting-radeon.patch drm-no-gem-on-i8xx.patch 
	drm-pnp-add-resource-range-checker.patch 
	drm-r128-add-test-for-initialisation-to-all-ioctls-that-require-it.patch 
	drm-radeon-cs-oops-fix.patch drm-radeon-new-pciids.patch 
	drm-silence-pointless-vblank-warning.patch 
	ecryptfs-check-for-o_rdonly-lower-inodes-when-opening-lower-files.patch 
	ecryptfs-filename-encryption-only-supports-password-auth-tokens.patch 
	ecryptfs-handle-unrecognized-tag-3-cipher-codes.patch 
	ecryptfs-prevent-lower-dentry-from-going-negative-during-unlink.patch 
	ecryptfs-validate-global-auth-tok-keys.patch 
	forcedeth-fix-napi-race.patch fs-pipe-null-ptr-deref-fix.patch 
	ftrace-check-for-failure-for-all-conversions.patch 
	ftrace-use-module-notifier-for-function-tracer.patch 
	fuse-fix-kunmap-in-fuse_ioctl_copy_user.patch 
	fuse-prevent-fuse_put_request-in-invalid-ptr.patch 
	hda-check-strcpy-length.patch 
	hid-ignore-all-recent-imon-devices.patch 
	hostap-revert-toxic-part-of-conversion.patch 
	input-i8042-bypass-aux-irq-delivery-test-on-laptops.patch 
	input-i8042-try-disabling-and-re-enabling-aux-port-at-close.patch 
	keys-get_instantiation_keyring-should-inc-the-keyring-refcount.patch 
	kvm-prevent-overflow-in-kvm-get-supported-cpuid.patch 
	libata-fix-incorrect-link-online-check-during-probe.patch 
	linux-2.6-btrfs-experimental-branch.patch 
	linux-2.6-cfq-choose-new-next-req.patch 
	linux-2.6-cpufreq-cleanup-locking-in-ondemand.patch 
	linux-2.6-cpufreq-eliminate-lockdep-warnings.patch 
	linux-2.6-cpufreq-enable-acpi-pstates-on-via.patch 
	linux-2.6-defaults-die-floppy-die.patch 
	linux-2.6-defaults-saner-vm-settings.patch 
	linux-2.6-drivers-char-low-latency-removal.patch 
	linux-2.6-ecryptfs-overflow-fixes.patch 
	linux-2.6-ext4-prealloc-fixes.patch 
	linux-2.6-fs-cifs-fix-port-numbers.patch 
	linux-2.6-input-wacom-bluetooth.patch 
	linux-2.6-iwlwifi_-fix-TX-queue-race.patch 
	linux-2.6-kvm-skip-pit-check.patch 
	linux-2.6-libertas-crash.patch 
	linux-2.6-missing-rfc2465-stats.patch 
	linux-2.6-mm-lru-dont-evict-mapped-executable-pages.patch 
	linux-2.6-mm-lru-evict-streaming-io-pages-first.patch 
	linux-2.6-mm-lru-report-vm-flags-in-page-referenced.patch 
	linux-2.6-neigh_-fix-state-transition-INCOMPLETE-_FAILED-via-Netlink-request.patch 
	linux-2.6-ppc64-vs-broadcom-lmb-no-init-1.patch 
	linux-2.6-ppc64-vs-broadcom-lmb-no-init-2.patch 
	linux-2.6-ppc64-vs-broadcom.patch 
	linux-2.6-serial-add-txen-test-param.patch 
	linux-2.6-sysrq-c.patch linux-2.6-utrace-ftrace.patch 
	linux-2.6-v4l-dvb-af9015-fix-stack-corruption.patch 
	linux-2.6-virtio-net-refill-on-out-of-memory.patch 
	linux-2.6-virtio_blk-dont-bounce-highmem-requests.patch 
	linux-2.6-virtio_blk-revert-QUEUE_FLAG_VIRT-addition.patch 
	linux-2.6-x86-delay-tsc-barrier.patch 
	linux-2.6-x86-load-percpu-segment-no-stackprotector.patch 
	linux-2.6-xen-clean-up-warnings.patch 
	linux-2.6-xen-fix-brkpoints-hw-watchpoints.patch 
	linux-2.6-xen-rearrange-to-fix-stackprotector.patch 
	linux-2.6-xfrm-export-gc_thresh.patch 
	linux-2.6-zd1211rw_-adding-083a_e503-as-a-ZD1211B-device.patch 
	linux-2.6.29-xen-disable-gbpages.patch 
	linux-2.6.30-cpuidle-faster-io.patch linux-2.6.30.tar.bz2.sign 
	lirc-2.6.31.patch lirc-revert-2.6.31-i2c-changes.patch 
	make-mmap_min_addr-suck-less.patch net-fix-wrong-sizeof.patch 
	net-unix-fix-sending-fds-in-multiple-buffers.patch 
	netlink-fix-typo-in-initialization.patch 
	patch-2.6.30.10.bz2.sign 
	sata_nv-make-sure-link-is-brough-up-online-when-skipping-hardreset.patch 
	sata_nv-use-hardreset-only-for-post-boot-probing.patch 
	sched-deal-with-low-load-in-wake-affine.patch 
	sched-ensure-child-cant-gain-time-over-its-parent-after-fork.patch 
	sched-remove-shortcut-from-select-task-rq-fair.patch 
	sched-retune-scheduler-latency-defaults.patch 
	sched-update-the-clock-of-runqueue-select-task-rq-selected.patch 
	shut-up-LOCK_TEST_WITH_RETURN.patch 
	sit-fix-off-by-one-in-ipip6_tunnel_get_prl.patch 
	sky2-set-sky2_hw_ram_buffer-in-sky2_init.patch 
	smsc95xx-fix-transmission-where-zlp-is-expected.patch 
	tcp-fix-config_tcp_md5sig-config_preempt-timer-bug.patch 
	tracing-correct-module-boundaries-for-ftrace_release.patch 
	v4l-dvb-fix-cx25840-firmware-load.patch 
	via-padlock-10-enable-64bit.patch 
	via-padlock-20-add-x86-dependency.patch 
	via-padlock-30-fix-might-sleep.patch 
	via-padlock-40-nano-ecb.patch via-padlock-50-nano-cbc.patch 
	via-rng-enable-64bit.patch via-sdmmc.patch 
	x86-dont-leak-64-bit-kernel-register-values.patch 
	x86-fix-csum_ipv6_magic-asm-memory-clobber.patch 
	x86-increase-min_gap-to-include-randomized-stack.patch 
Log Message:
* Fri Jan  1 2010 Kyle McMartin <kyle at redhat.com> 2.6.32.2-1
- Rebased F-11 to 2.6.32, still needs forward porting of patches.


die-floppy-die.patch:
 floppy.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- NEW FILE die-floppy-die.patch ---
Kill the floppy.ko pnp modalias. We were surviving just fine without
autoloading floppy drivers, tyvm.

Please feel free to register all complaints in the wastepaper bin.

diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
index 91b7530..2ea84a6 100644
--- a/drivers/block/floppy.c
+++ b/drivers/block/floppy.c
@@ -4631,7 +4631,7 @@ static const struct pnp_device_id floppy_pnpids[] = {
 	{ "PNP0700", 0 },
 	{ }
 };
-MODULE_DEVICE_TABLE(pnp, floppy_pnpids);
+/* MODULE_DEVICE_TABLE(pnp, floppy_pnpids); */
 
 #else
 

drm-connection-cache.patch:
 linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c |   12 ++++++++++++
 linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_lvds.c |    9 ++++++++-
 linux-2.6.30.noarch/include/drm/drm_crtc.h            |    1 +
 linux-2.6.30.x86_64/drivers/gpu/drm/drm_crtc.c        |    3 ++-
 4 files changed, 23 insertions(+), 2 deletions(-)

--- NEW FILE drm-connection-cache.patch ---
diff -up linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c.jx linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c
--- linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c.jx	2009-09-09 08:57:39.000000000 -0400
+++ linux-2.6.30.noarch/drivers/gpu/drm/drm_crtc_helper.c	2009-09-09 09:35:24.000000000 -0400
@@ -92,6 +92,18 @@ int drm_helper_probe_single_connector_mo
 
 	connector->status = connector->funcs->detect(connector);
 
+	/* fast path if the driver tracks disconnection */
+	if (connector->status == connector_status_cached) {
+		DRM_DEBUG_KMS("%s still connected\n",
+			      drm_get_connector_name(connector));
+		list_for_each_entry_safe(mode, t, &connector->modes, head) {
+			count++;
+			mode->status = MODE_OK;
+		}
+		connector->status = connector_status_connected;
+		return count;
+	}
+
 	if (connector->status == connector_status_disconnected) {
 		DRM_DEBUG_KMS("%s is disconnected\n",
 			  drm_get_connector_name(connector));
diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_lvds.c.jx linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_lvds.c
--- linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_lvds.c.jx	2009-09-09 08:57:39.000000000 -0400
+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_lvds.c	2009-09-09 09:56:18.000000000 -0400
@@ -593,7 +593,14 @@ static void intel_lvds_mode_set(struct d
  */
 static enum drm_connector_status intel_lvds_detect(struct drm_connector *connector)
 {
-	return connector_status_connected;
+	static int done;
+
+	if (!done) {
+		done = 1;
+		return connector_status_connected;
+	} else {
+		return connector_status_cached;
+	}
 }
 
 /**
diff -up linux-2.6.30.noarch/include/drm/drm_crtc.h.jx linux-2.6.30.noarch/include/drm/drm_crtc.h
--- linux-2.6.30.noarch/include/drm/drm_crtc.h.jx	2009-09-09 08:57:39.000000000 -0400
+++ linux-2.6.30.noarch/include/drm/drm_crtc.h	2009-09-09 09:35:24.000000000 -0400
@@ -172,6 +172,7 @@ enum drm_connector_status {
 	connector_status_connected = 1,
 	connector_status_disconnected = 2,
 	connector_status_unknown = 3,
+	connector_status_cached = 4,
 };
 
 enum subpixel_order {
diff -up linux-2.6.30.x86_64/drivers/gpu/drm/drm_crtc.c.jx linux-2.6.30.x86_64/drivers/gpu/drm/drm_crtc.c
--- linux-2.6.30.x86_64/drivers/gpu/drm/drm_crtc.c.jx	2009-09-09 10:10:44.000000000 -0400
+++ linux-2.6.30.x86_64/drivers/gpu/drm/drm_crtc.c	2009-09-09 11:23:14.000000000 -0400
@@ -185,7 +185,8 @@ EXPORT_SYMBOL(drm_get_connector_name);
 
 char *drm_get_connector_status_name(enum drm_connector_status status)
 {
-	if (status == connector_status_connected)
+	if (status == connector_status_connected ||
+	    status == connector_status_cached)
 		return "connected";
 	else if (status == connector_status_disconnected)
 		return "disconnected";

drm-intel-next.patch:
 0 files changed

Index: drm-intel-next.patch
===================================================================
RCS file: drm-intel-next.patch
diff -N drm-intel-next.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ drm-intel-next.patch	4 Jan 2010 15:25:41 -0000	1.10
@@ -0,0 +1 @@
+empty

drm-intel-pm.patch:
 i915_drv.c      |   15 +
 i915_drv.h      |   14 +
 i915_gem.c      |    8 
 i915_reg.h      |   22 ++
 intel_display.c |  484 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
 intel_drv.h     |    4 
 6 files changed, 512 insertions(+), 35 deletions(-)

--- NEW FILE drm-intel-pm.patch ---
diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.c.jx linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.c
--- linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.c.jx	2009-08-03 14:00:43.000000000 -0400
+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.c	2009-08-03 14:01:07.000000000 -0400
@@ -43,6 +43,21 @@ module_param_named(modeset, i915_modeset
 unsigned int i915_fbpercrtc = 0;
 module_param_named(fbpercrtc, i915_fbpercrtc, int, 0400);
 
+unsigned int i915_powersave = 0;
+module_param_named(powersave, i915_powersave, int, 0400);
+
+unsigned int i915_lvdsclock = 1;
+module_param_named(lvdsclock, i915_lvdsclock, int, 0400);
+
+unsigned int i915_lvdsscale = 85;
+module_param_named(lvdsscale, i915_lvdsscale, int, 0400);
+
+unsigned int i915_displayclock = 1;
+module_param_named(displayclock, i915_displayclock, int, 0600);
+
+unsigned int i915_renderclock = 0;
+module_param_named(renderclock, i915_renderclock, int, 0600);
+
 static struct drm_driver driver;
 
 static struct pci_device_id pciidlist[] = {
diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.h.jx linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.h
--- linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.h.jx	2009-08-03 14:00:44.000000000 -0400
+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_drv.h	2009-08-03 14:01:07.000000000 -0400
@@ -438,6 +438,12 @@ typedef struct drm_i915_private {
 		struct drm_i915_gem_phys_object *phys_objs[I915_MAX_PHYS_OBJECT];
 	} mm;
 	struct sdvo_device_mapping sdvo_mappings[2];
+
+	/* Reclocking support */
+	struct work_struct idle_work;
+	struct timer_list idle_timer;
+	bool busy;
+	u16 orig_clock;
 } drm_i915_private_t;
 
 /** driver private structure attached to each drm_gem_object */
@@ -567,6 +573,11 @@ enum intel_chip_family {
 extern struct drm_ioctl_desc i915_ioctls[];
 extern int i915_max_ioctl;
 extern unsigned int i915_fbpercrtc;
+extern unsigned int i915_powersave;
+extern unsigned int i915_lvdsclock;
+extern unsigned int i915_lvdsscale;
+extern unsigned int i915_displayclock;
+extern unsigned int i915_renderclock;
 
 extern int i915_master_create(struct drm_device *dev, struct drm_master *master);
 extern void i915_master_destroy(struct drm_device *dev, struct drm_master *master);
@@ -895,6 +906,9 @@ extern int i915_wait_ring(struct drm_dev
 /* dsparb controlled by hw only */
 #define DSPARB_HWCONTROL(dev) (IS_G4X(dev) || IS_IGDNG(dev))
 
+#define HAS_FW_BLC(dev) (IS_I9XX(dev) || IS_G4X(dev) || IS_IGDNG(dev))
+#define HAS_PIPE_CXSR(dev) (IS_G4X(dev) || IS_IGDNG(dev))
+
 #define PRIMARY_RINGBUFFER_SIZE         (128*1024)
 
 #endif
diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_gem.c.jx linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_gem.c
--- linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_gem.c.jx	2009-08-03 14:00:43.000000000 -0400
+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_gem.c	2009-08-03 14:01:07.000000000 -0400
@@ -29,6 +29,7 @@
 #include "drm.h"
 #include "i915_drm.h"
 #include "i915_drv.h"
+#include "intel_drv.h"
 #include <linux/swap.h>
 #include <linux/pci.h>
 
@@ -980,6 +981,7 @@ i915_gem_set_domain_ioctl(struct drm_dev
 {
 	struct drm_i915_gem_set_domain *args = data;
 	struct drm_gem_object *obj;
+	struct drm_i915_gem_object *obj_priv;
 	uint32_t read_domains = args->read_domains;
 	uint32_t write_domain = args->write_domain;
 	int ret;
@@ -1003,8 +1005,12 @@ i915_gem_set_domain_ioctl(struct drm_dev
 	obj = drm_gem_object_lookup(dev, file_priv, args->handle);
 	if (obj == NULL)
 		return -EBADF;
+	obj_priv = obj->driver_private;
 
 	mutex_lock(&dev->struct_mutex);
+
+	intel_mark_busy(dev, obj);
+
 #if WATCH_BUF
 	DRM_INFO("set_domain_ioctl %p(%zd), %08x %08x\n",
 		 obj, obj->size, read_domains, write_domain);
@@ -2761,6 +2767,8 @@ i915_gem_object_set_to_gpu_domain(struct
 	BUG_ON(obj->pending_read_domains & I915_GEM_DOMAIN_CPU);
 	BUG_ON(obj->pending_write_domain == I915_GEM_DOMAIN_CPU);
 
+	intel_mark_busy(dev, obj);
+
 #if WATCH_BUF
 	DRM_INFO("%s: object %p read %08x -> %08x write %08x -> %08x\n",
 		 __func__, obj,
diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_reg.h.jx linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_reg.h
--- linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_reg.h.jx	2009-08-03 14:00:44.000000000 -0400
+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/i915_reg.h	2009-08-03 14:01:07.000000000 -0400
@@ -55,7 +55,7 @@
 /* PCI config space */
 
 #define HPLLCC	0xc0 /* 855 only */
-#define   GC_CLOCK_CONTROL_MASK		(3 << 0)
+#define   GC_CLOCK_CONTROL_MASK		(0xf << 0)
 #define   GC_CLOCK_133_200		(0 << 0)
 #define   GC_CLOCK_100_200		(1 << 0)
 #define   GC_CLOCK_100_133		(2 << 0)
@@ -65,6 +65,25 @@
 #define   GC_DISPLAY_CLOCK_190_200_MHZ	(0 << 4)
 #define   GC_DISPLAY_CLOCK_333_MHZ	(4 << 4)
 #define   GC_DISPLAY_CLOCK_MASK		(7 << 4)
+#define   GM45_GC_RENDER_CLOCK_MASK	(0xf << 0)
+#define   GM45_GC_RENDER_CLOCK_266_MHZ	(8 << 0)
+#define   GM45_GC_RENDER_CLOCK_320_MHZ	(9 << 0)
+#define   GM45_GC_RENDER_CLOCK_400_MHZ	(0xb << 0)
+#define   GM45_GC_RENDER_CLOCK_533_MHZ	(0xc << 0)
+#define   I965_GC_RENDER_CLOCK_MASK	(0xf << 0)
+#define   I965_GC_RENDER_CLOCK_267_MHZ	(2 << 0)
+#define   I965_GC_RENDER_CLOCK_333_MHZ	(3 << 0)
+#define   I965_GC_RENDER_CLOCK_444_MHZ	(4 << 0)
+#define   I965_GC_RENDER_CLOCK_533_MHZ	(5 << 0)
+#define   I945_GC_RENDER_CLOCK_MASK	(7 << 0)
+#define   I945_GC_RENDER_CLOCK_166_MHZ	(0 << 0)
+#define   I945_GC_RENDER_CLOCK_200_MHZ	(1 << 0)
+#define   I945_GC_RENDER_CLOCK_250_MHZ	(3 << 0)
+#define   I945_GC_RENDER_CLOCK_400_MHZ	(5 << 0)
+#define   I915_GC_RENDER_CLOCK_MASK	(7 << 0)
+#define   I915_GC_RENDER_CLOCK_166_MHZ	(0 << 0)
+#define   I915_GC_RENDER_CLOCK_200_MHZ	(1 << 0)
+#define   I915_GC_RENDER_CLOCK_333_MHZ	(4 << 0)
 #define LBB	0xf4
 
 /* VGA stuff */
@@ -1586,6 +1605,7 @@
 #define   PIPECONF_PROGRESSIVE	(0 << 21)
 #define   PIPECONF_INTERLACE_W_FIELD_INDICATION	(6 << 21)
 #define   PIPECONF_INTERLACE_FIELD_0_ONLY		(7 << 21)
+#define   PIPECONF_CXSR_DOWNCLOCK	(1<<16)
 #define PIPEASTAT		0x70024
 #define   PIPE_FIFO_UNDERRUN_STATUS		(1UL<<31)
 #define   PIPE_CRC_ERROR_ENABLE			(1UL<<29)
diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_display.c.jx linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_display.c
--- linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_display.c.jx	2009-08-03 14:00:44.000000000 -0400
+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_display.c	2009-08-03 14:11:56.000000000 -0400
@@ -38,6 +38,7 @@
 
 bool intel_pipe_has_type (struct drm_crtc *crtc, int type);
 static void intel_update_watermarks(struct drm_device *dev);
+static void intel_increase_pllclock(struct drm_crtc *crtc, int schedule);
 
 typedef struct {
     /* given values */
@@ -67,6 +68,8 @@ struct intel_limit {
     intel_p2_t	    p2;
     bool (* find_pll)(const intel_limit_t *, struct drm_crtc *,
 		      int, int, intel_clock_t *);
+    bool (* find_reduced_pll)(const intel_limit_t *, struct drm_crtc *,
+			      int, int, intel_clock_t *);
 };
 
 #define I8XX_DOT_MIN		  25000
@@ -192,7 +195,7 @@ struct intel_limit {
 #define G4X_P2_SINGLE_CHANNEL_LVDS_LIMIT          0
 
 /*The parameter is for DUAL_CHANNEL_LVDS on G4x platform*/
-#define G4X_DOT_DUAL_CHANNEL_LVDS_MIN           80000
+#define G4X_DOT_DUAL_CHANNEL_LVDS_MIN           10000
 #define G4X_DOT_DUAL_CHANNEL_LVDS_MAX           224000
 #define G4X_N_DUAL_CHANNEL_LVDS_MIN             1
 #define G4X_N_DUAL_CHANNEL_LVDS_MAX             3
@@ -261,6 +264,9 @@ static bool
 intel_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
 		    int target, int refclk, intel_clock_t *best_clock);
 static bool
+intel_find_best_reduced_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
+			    int target, int refclk, intel_clock_t *best_clock);
+static bool
 intel_g4x_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
 			int target, int refclk, intel_clock_t *best_clock);
 static bool
@@ -286,6 +292,7 @@ static const intel_limit_t intel_limits_
 	.p2  = { .dot_limit = I8XX_P2_SLOW_LIMIT,
 		 .p2_slow = I8XX_P2_SLOW,	.p2_fast = I8XX_P2_FAST },
 	.find_pll = intel_find_best_PLL,
+	.find_reduced_pll = intel_find_best_reduced_PLL,
 };
 
 static const intel_limit_t intel_limits_i8xx_lvds = {
@@ -300,6 +307,7 @@ static const intel_limit_t intel_limits_
 	.p2  = { .dot_limit = I8XX_P2_SLOW_LIMIT,
 		 .p2_slow = I8XX_P2_LVDS_SLOW,	.p2_fast = I8XX_P2_LVDS_FAST },
 	.find_pll = intel_find_best_PLL,
+	.find_reduced_pll = intel_find_best_reduced_PLL,
 };
 	
 static const intel_limit_t intel_limits_i9xx_sdvo = {
@@ -314,6 +322,7 @@ static const intel_limit_t intel_limits_
 	.p2  = { .dot_limit = I9XX_P2_SDVO_DAC_SLOW_LIMIT,
 		 .p2_slow = I9XX_P2_SDVO_DAC_SLOW,	.p2_fast = I9XX_P2_SDVO_DAC_FAST },
 	.find_pll = intel_find_best_PLL,
+	.find_reduced_pll = intel_find_best_reduced_PLL,
 };
 
 static const intel_limit_t intel_limits_i9xx_lvds = {
@@ -331,6 +340,7 @@ static const intel_limit_t intel_limits_
 	.p2  = { .dot_limit = I9XX_P2_LVDS_SLOW_LIMIT,
 		 .p2_slow = I9XX_P2_LVDS_SLOW,	.p2_fast = I9XX_P2_LVDS_FAST },
 	.find_pll = intel_find_best_PLL,
+	.find_reduced_pll = intel_find_best_reduced_PLL,
 };
 
     /* below parameter and function is for G4X Chipset Family*/
@@ -348,6 +358,7 @@ static const intel_limit_t intel_limits_
 		 .p2_fast = G4X_P2_SDVO_FAST
 	},
 	.find_pll = intel_g4x_find_best_PLL,
+	.find_reduced_pll = intel_g4x_find_best_PLL,
 };
 
 static const intel_limit_t intel_limits_g4x_hdmi = {
@@ -364,6 +375,7 @@ static const intel_limit_t intel_limits_
 		 .p2_fast = G4X_P2_HDMI_DAC_FAST
 	},
 	.find_pll = intel_g4x_find_best_PLL,
+	.find_reduced_pll = intel_g4x_find_best_PLL,
 };
 
 static const intel_limit_t intel_limits_g4x_single_channel_lvds = {
@@ -388,6 +400,7 @@ static const intel_limit_t intel_limits_
 		 .p2_fast = G4X_P2_SINGLE_CHANNEL_LVDS_FAST
 	},
 	.find_pll = intel_g4x_find_best_PLL,
+	.find_reduced_pll = intel_g4x_find_best_PLL,
 };
 
 static const intel_limit_t intel_limits_g4x_dual_channel_lvds = {
@@ -412,6 +425,7 @@ static const intel_limit_t intel_limits_
 		 .p2_fast = G4X_P2_DUAL_CHANNEL_LVDS_FAST
 	},
 	.find_pll = intel_g4x_find_best_PLL,
+	.find_reduced_pll = intel_g4x_find_best_PLL,
 };
 
 static const intel_limit_t intel_limits_g4x_display_port = {
@@ -449,6 +463,7 @@ static const intel_limit_t intel_limits_
 	.p2  = { .dot_limit = I9XX_P2_SDVO_DAC_SLOW_LIMIT,
 		 .p2_slow = I9XX_P2_SDVO_DAC_SLOW,	.p2_fast = I9XX_P2_SDVO_DAC_FAST },
 	.find_pll = intel_find_best_PLL,
+	.find_reduced_pll = intel_find_best_reduced_PLL,
 };
 
 static const intel_limit_t intel_limits_igd_lvds = {
@@ -464,6 +479,7 @@ static const intel_limit_t intel_limits_
 	.p2  = { .dot_limit = I9XX_P2_LVDS_SLOW_LIMIT,
 		 .p2_slow = I9XX_P2_LVDS_SLOW,	.p2_fast = I9XX_P2_LVDS_SLOW },
 	.find_pll = intel_find_best_PLL,
+	.find_reduced_pll = intel_find_best_reduced_PLL,
 };
 
 static const intel_limit_t intel_limits_igdng_sdvo = {
@@ -688,15 +704,16 @@ intel_find_best_PLL(const intel_limit_t 
 
 	memset (best_clock, 0, sizeof (*best_clock));
 
-	for (clock.m1 = limit->m1.min; clock.m1 <= limit->m1.max; clock.m1++) {
-		for (clock.m2 = limit->m2.min; clock.m2 <= limit->m2.max; clock.m2++) {
-			/* m1 is always 0 in IGD */
-			if (clock.m2 >= clock.m1 && !IS_IGD(dev))
-				break;
-			for (clock.n = limit->n.min; clock.n <= limit->n.max;
-			     clock.n++) {
-				for (clock.p1 = limit->p1.min;
-				     clock.p1 <= limit->p1.max; clock.p1++) {
+	for (clock.p1 = limit->p1.max; clock.p1 >= limit->p1.min; clock.p1--) {
+		for (clock.m1 = limit->m1.min; clock.m1 <= limit->m1.max;
+		     clock.m1++) {
+			for (clock.m2 = limit->m2.min;
+			     clock.m2 <= limit->m2.max; clock.m2++) {
+				/* m1 is always 0 in IGD */
+				if (clock.m2 >= clock.m1 && !IS_IGD(dev))
+					break;
+				for (clock.n = limit->n.min;
+				     clock.n <= limit->n.max; clock.n++) {
 					int this_err;
 
 					intel_clock(dev, refclk, &clock);
@@ -717,6 +734,46 @@ intel_find_best_PLL(const intel_limit_t 
 	return (err != target);
 }
 
+
+static bool
+intel_find_best_reduced_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
+			    int target, int refclk, intel_clock_t *best_clock)
+
+{
+	struct drm_device *dev = crtc->dev;
+	intel_clock_t clock;
+	int err = target;
+	bool found = false;
+
+	memcpy(&clock, best_clock, sizeof(intel_clock_t));
+
+	for (clock.m1 = limit->m1.min; clock.m1 <= limit->m1.max; clock.m1++) {
+		for (clock.m2 = limit->m2.min; clock.m2 <= limit->m2.max; clock.m2++) {
+			/* m1 is always 0 in IGD */
+			if (clock.m2 >= clock.m1 && !IS_IGD(dev))
+				break;
+			for (clock.n = limit->n.min; clock.n <= limit->n.max;
+			     clock.n++) {
+				int this_err;
+
+				intel_clock(dev, refclk, &clock);
+
+//				if (!intel_PLL_is_valid(crtc, &clock))
+//					continue;
+
+				this_err = abs(clock.dot - target);
+				if (this_err < err) {
+					*best_clock = clock;
+					err = this_err;
+					found = true;
+				}
+			}
+		}
+	}
+
+	return found;
+}
+
 static bool
 intel_g4x_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
 			int target, int refclk, intel_clock_t *best_clock)
@@ -747,7 +804,7 @@ intel_g4x_find_best_PLL(const intel_limi
 	max_n = limit->n.max;
 	/* based on hardware requriment prefer smaller n to precision */
 	for (clock.n = limit->n.min; clock.n <= max_n; clock.n++) {
-		/* based on hardware requirment prefere larger m1,m2, p1 */
+		/* based on hardware requirment prefere larger m1,m2, */
 		for (clock.m1 = limit->m1.max;
 		     clock.m1 >= limit->m1.min; clock.m1--) {
 			for (clock.m2 = limit->m2.max;
@@ -757,8 +814,8 @@ intel_g4x_find_best_PLL(const intel_limi
 					int this_err;
 
 					intel_clock(dev, refclk, &clock);
-					if (!intel_PLL_is_valid(crtc, &clock))
-						continue;
+//					if (!intel_PLL_is_valid(crtc, &clock))
+//						continue;
 					this_err = abs(clock.dot - target) ;
 					if (this_err < err_most) {
 						*best_clock = clock;
@@ -832,15 +889,14 @@ intel_igdng_find_best_PLL(const intel_li
 
 	memset(best_clock, 0, sizeof(*best_clock));
 	max_n = limit->n.max;
-	/* based on hardware requriment prefer smaller n to precision */
-	for (clock.n = limit->n.min; clock.n <= max_n; clock.n++) {
-		/* based on hardware requirment prefere larger m1,m2, p1 */
-		for (clock.m1 = limit->m1.max;
-		     clock.m1 >= limit->m1.min; clock.m1--) {
-			for (clock.m2 = limit->m2.max;
-			     clock.m2 >= limit->m2.min; clock.m2--) {
-				for (clock.p1 = limit->p1.max;
-				     clock.p1 >= limit->p1.min; clock.p1--) {
+	for (clock.p1 = limit->p1.max; clock.p1 >= limit->p1.min; clock.p1--) {
+		/* based on hardware requriment prefer smaller n to precision */
+		for (clock.n = limit->n.min; clock.n <= max_n; clock.n++) {
+			/* based on hardware requirment prefere larger m1,m2 */
+			for (clock.m1 = limit->m1.max;
+			     clock.m1 >= limit->m1.min; clock.m1--) {
+				for (clock.m2 = limit->m2.max;
+				     clock.m2 >= limit->m2.min; clock.m2--) {
 					int this_err;
 
 					intel_clock(dev, refclk, &clock);
@@ -1029,6 +1085,7 @@ intel_pipe_set_base(struct drm_crtc *crt
 		intel_wait_for_vblank(dev);
 		i915_gem_object_unpin(intel_fb->obj);
 	}
+	intel_increase_pllclock(crtc, true);
 
 	if (!dev->primary->master)
 		return 0;
@@ -2036,6 +2093,18 @@ static int intel_get_fifo_size(struct dr
 	return size;
 }
 
+static void g4x_update_wm(struct drm_device *dev)
+{
+	struct drm_i915_private *dev_priv = dev->dev_private;
+	u32 fw_blc_self = I915_READ(FW_BLC_SELF);
+
+	if (i915_powersave)
+		fw_blc_self |= FW_BLC_SELF_EN;
+	else
+		fw_blc_self &= ~FW_BLC_SELF_EN;
+	I915_WRITE(FW_BLC_SELF, fw_blc_self);
+}
+
 static void i965_update_wm(struct drm_device *dev)
 {
 	struct drm_i915_private *dev_priv = dev->dev_private;
@@ -2087,7 +2156,7 @@ static void i9xx_update_wm(struct drm_de
 	cwm = 2;
 
 	/* Calc sr entries for one plane configs */
-	if (sr_hdisplay && (!planea_clock || !planeb_clock)) {
+	if (HAS_FW_BLC(dev) && sr_hdisplay && (!planea_clock || !planeb_clock)) {
 		/* self-refresh has much higher latency */
 		const static int sr_latency_ns = 6000;
 
@@ -2102,8 +2171,7 @@ static void i9xx_update_wm(struct drm_de
 		srwm = total_size - sr_entries;
 		if (srwm < 0)
 			srwm = 1;
-		if (IS_I9XX(dev))
-			I915_WRITE(FW_BLC_SELF, (srwm & 0x3f));
+		I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN | (srwm & 0x3f));
 	}
 
 	DRM_DEBUG("Setting FIFO watermarks - A: %d, B: %d, C: %d, SR %d\n",
@@ -2177,9 +2245,6 @@ static void intel_update_watermarks(stru
 	unsigned long planea_clock = 0, planeb_clock = 0, sr_clock = 0;
 	int enabled = 0, pixel_size = 0;
 
-	if (DSPARB_HWCONTROL(dev))
-		return;
-
 	/* Get the clock config from both planes */
 	list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
 		intel_crtc = to_intel_crtc(crtc);
@@ -2212,7 +2277,9 @@ static void intel_update_watermarks(stru
 	else if (IS_IGD(dev))
 		igd_disable_cxsr(dev);
 
-	if (IS_I965G(dev))
+	if (IS_G4X(dev))
+		g4x_update_wm(dev);
+	else if (IS_I965G(dev))
 		i965_update_wm(dev);
 	else if (IS_I9XX(dev) || IS_MOBILE(dev))
 		i9xx_update_wm(dev, planea_clock, planeb_clock, sr_hdisplay,
@@ -2246,9 +2313,9 @@ static int intel_crtc_mode_set(struct dr
 	int dsppos_reg = (pipe == 0) ? DSPAPOS : DSPBPOS;
 	int pipesrc_reg = (pipe == 0) ? PIPEASRC : PIPEBSRC;
 	int refclk, num_outputs = 0;
-	intel_clock_t clock;
-	u32 dpll = 0, fp = 0, dspcntr, pipeconf;
-	bool ok, is_sdvo = false, is_dvo = false;
+	intel_clock_t clock, reduced_clock;
+	u32 dpll = 0, fp = 0, fp2 = 0, dspcntr, pipeconf;
+	bool ok, has_reduced_clock = false, is_sdvo = false, is_dvo = false;
 	bool is_crt = false, is_lvds = false, is_tv = false, is_dp = false;
 	bool is_edp = false;
 	struct drm_mode_config *mode_config = &dev->mode_config;
@@ -2331,6 +2398,14 @@ static int intel_crtc_mode_set(struct dr
 		return -EINVAL;
 	}
 
+	if (limit->find_reduced_pll && is_lvds) {
+		memcpy(&reduced_clock, &clock, sizeof(intel_clock_t));
+		has_reduced_clock = limit->find_reduced_pll(limit, crtc,
+							    (adjusted_mode->clock*i915_lvdsscale/100),
+							    refclk,
+							    &reduced_clock);
+	}
+
 	/* SDVO TV has fixed PLL values depend on its clock range,
 	   this mirrors vbios setting. */
 	if (is_sdvo && is_tv) {
@@ -2376,10 +2451,17 @@ static int intel_crtc_mode_set(struct dr
 				  link_bw, &m_n);
 	}
 
-	if (IS_IGD(dev))
+	if (IS_IGD(dev)) {
 		fp = (1 << clock.n) << 16 | clock.m1 << 8 | clock.m2;
-	else
+		if (has_reduced_clock)
+			fp2 = (1 << reduced_clock.n) << 16 |
+				reduced_clock.m1 << 8 | reduced_clock.m2;
+	} else {
 		fp = clock.n << 16 | clock.m1 << 8 | clock.m2;
+		if (has_reduced_clock)
+			fp2 = reduced_clock.n << 16 | reduced_clock.m1 << 8 |
+				reduced_clock.m2;
+	}
 
 	if (!IS_IGDNG(dev))
 		dpll = DPLL_VGA_MODE_DIS;
@@ -2408,6 +2490,8 @@ static int intel_crtc_mode_set(struct dr
 			/* also FPA1 */
 			if (IS_IGDNG(dev))
 				dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT;
+			if (IS_G4X(dev) && has_reduced_clock)
+				dpll |= (1 << (reduced_clock.p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT;
 		}
 		switch (clock.p2) {
 		case 5:
@@ -2534,9 +2618,25 @@ static int intel_crtc_mode_set(struct dr
 	}
 	if (is_dp)
 		intel_dp_set_m_n(crtc, mode, adjusted_mode);
+	
 
 	if (!is_edp) {
 		I915_WRITE(fp_reg, fp);
+		if (has_reduced_clock && i915_powersave && i915_lvdsclock) {
+			I915_WRITE(fp_reg + 4, fp2);
+			intel_crtc->lowfreq_avail = true;
+			if (HAS_PIPE_CXSR(dev)) {
+				DRM_DEBUG("enabling CxSR downclocking\n");
+				pipeconf |= PIPECONF_CXSR_DOWNCLOCK;
+			}
+		} else {
+			I915_WRITE(fp_reg + 4, fp);
+			intel_crtc->lowfreq_avail = false;
+			if (HAS_PIPE_CXSR(dev)) {
+				DRM_DEBUG("disabling CxSR downclocking\n");
+				pipeconf &= ~PIPECONF_CXSR_DOWNCLOCK;
+			}
+		}
 		I915_WRITE(dpll_reg, dpll);
 		I915_READ(dpll_reg);
 		/* Wait for the clocks to stabilize. */
@@ -2748,6 +2848,8 @@ fail_locked:
 	return ret;
 }
 
+#define CRTC_IDLE_TIMEOUT 1000 /* ms */
+
 static int intel_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
 {
 	struct drm_device *dev = crtc->dev;
@@ -2757,6 +2859,12 @@ static int intel_crtc_cursor_move(struct
 	uint32_t temp = 0;
 	uint32_t adder;
 
+	if (!intel_crtc->busy)
+		intel_increase_pllclock(crtc, true);
+	intel_crtc->busy = true;
+	mod_timer(&intel_crtc->idle_timer, jiffies +
+		  msecs_to_jiffies(CRTC_IDLE_TIMEOUT));
+
 	if (x < 0) {
 		temp |= CURSOR_POS_SIGN << CURSOR_X_SHIFT;
 		x = -x;
@@ -3054,6 +3162,286 @@ struct drm_display_mode *intel_crtc_mode
 	return mode;
 }
 
+#define GPU_IDLE_TIMEOUT 500 /* ms */
+
+/* When this timer fires, we've been idle for awhile */
+static void intel_gpu_idle_timer(unsigned long arg)
+{
+	struct drm_device *dev = (struct drm_device *)arg;
+	drm_i915_private_t *dev_priv = dev->dev_private;
+
+	DRM_DEBUG("idle timer fired, downclocking\n");
+
+	dev_priv->busy = false;
+
+	schedule_work(&dev_priv->idle_work);
+}
+
+void intel_increase_renderclock(struct drm_device *dev, int schedule)
+{
+	drm_i915_private_t *dev_priv = dev->dev_private;
+
+	if (!i915_renderclock)
+		return;
+
+	if (IS_G4X(dev) || IS_I9XX(dev)) {
+		/* Up to maximum... */
+		pci_write_config_word(dev->pdev, GCFGC, dev_priv->orig_clock);
+	} else if (IS_I85X(dev)) {
+		pci_write_config_word(dev->pdev, HPLLCC, dev_priv->orig_clock);
+	}
+	DRM_DEBUG("increasing render clock frequency\n");
+
+	if (!schedule)
+		return;
+
+	/* Schedule downclock */
+	mod_timer(&dev_priv->idle_timer, jiffies +
+		  msecs_to_jiffies(GPU_IDLE_TIMEOUT));
+}
+
+void intel_decrease_renderclock(struct drm_device *dev)
+{
+	if (!i915_renderclock)
+		return;
+
+	if (IS_G4X(dev)) {
+		u16 gcfgc;
+
+		/* Adjust render clock... */
+		pci_read_config_word(dev->pdev, GCFGC, &gcfgc);
+
+		/* Down to minimum... */
+		gcfgc &= ~GM45_GC_RENDER_CLOCK_MASK;
+		gcfgc |= GM45_GC_RENDER_CLOCK_266_MHZ;
+
+		pci_write_config_word(dev->pdev, GCFGC, gcfgc);
+	} else if (IS_I965G(dev)) {
+		u16 gcfgc;
+
+		/* Adjust render clock... */
+		pci_read_config_word(dev->pdev, GCFGC, &gcfgc);
+
+		/* Down to minimum... */
+		gcfgc &= ~I965_GC_RENDER_CLOCK_MASK;
+		gcfgc |= I965_GC_RENDER_CLOCK_267_MHZ;
+
+		pci_write_config_word(dev->pdev, GCFGC, gcfgc);
+	} else if (IS_I945G(dev) || IS_I945GM(dev)) {
+		u16 gcfgc;
+
+		/* Adjust render clock... */
+		pci_read_config_word(dev->pdev, GCFGC, &gcfgc);
+
+		/* Down to minimum... */
+		gcfgc &= ~I945_GC_RENDER_CLOCK_MASK;
+		gcfgc |= I945_GC_RENDER_CLOCK_166_MHZ;
+
+		pci_write_config_word(dev->pdev, GCFGC, gcfgc);
+	} else if (IS_I915G(dev) || IS_I915GM(dev)) {
+		u16 gcfgc;
+
+		/* Adjust render clock... */
+		pci_read_config_word(dev->pdev, GCFGC, &gcfgc);
+
+		/* Down to minimum... */
+		gcfgc &= ~I915_GC_RENDER_CLOCK_MASK;
+		gcfgc |= I915_GC_RENDER_CLOCK_166_MHZ;
+
+		pci_write_config_word(dev->pdev, GCFGC, gcfgc);
+	} else if (IS_I85X(dev)) {
+		u16 hpllcc;
+
+		/* Adjust render clock... */
+		pci_read_config_word(dev->pdev, HPLLCC, &hpllcc);
+
+		/* Up to maximum... */
+		hpllcc &= ~GC_CLOCK_CONTROL_MASK;
+		hpllcc |= GC_CLOCK_133_200;
+
+		pci_write_config_word(dev->pdev, HPLLCC, hpllcc);
+	}
+	DRM_DEBUG("decreasing render clock frequency\n");
+}
+
+/* Note that no increase function is needed for this - increase_renderclock()
+ *  will also rewrite these bits
+ */
+void intel_decrease_displayclock(struct drm_device *dev)
+{
+	if (!i915_displayclock)
+		return;
+
+	if (IS_I945G(dev) || IS_I945GM(dev) || IS_I915G(dev) ||
+	    IS_I915GM(dev)) {
+		u16 gcfgc;
+
+		/* Adjust render clock... */
+		pci_read_config_word(dev->pdev, GCFGC, &gcfgc);
+
+		/* Down to minimum... */
+		gcfgc &= ~0xf0;
+		gcfgc |= 0x80;
+
+		pci_write_config_word(dev->pdev, GCFGC, gcfgc);
+	}
+}
+
+static void intel_crtc_idle_timer(unsigned long arg)
+{
+	struct intel_crtc *intel_crtc = (struct intel_crtc *)arg;
+	struct drm_crtc *crtc = &intel_crtc->base;
+	drm_i915_private_t *dev_priv = crtc->dev->dev_private;
+
+	DRM_DEBUG("idle timer fired, downclocking\n");
+
+	intel_crtc->busy = false;
+
+	schedule_work(&dev_priv->idle_work);
+}
+
+static void intel_increase_pllclock(struct drm_crtc *crtc, int schedule)
+{
+	struct drm_device *dev = crtc->dev;
+	drm_i915_private_t *dev_priv = dev->dev_private;
+	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+	int pipe = intel_crtc->pipe;
+	int dpll_reg = (pipe == 0) ? DPLL_A : DPLL_B;
+	int dpll = I915_READ(dpll_reg);
+
+	if (!i915_lvdsclock)
+		return;
+
+	if (!HAS_PIPE_CXSR(dev) && (dpll & DISPLAY_RATE_SELECT_FPA1)) {
+		DRM_DEBUG("upclocking LVDS\n");
+
+		I915_WRITE(PP_CONTROL, I915_READ(PP_CONTROL) | (0xabcd << 16));
+		I915_WRITE(dpll_reg, dpll & ~DISPLAY_RATE_SELECT_FPA1);
+		dpll = I915_READ(dpll_reg);
+		intel_wait_for_vblank(dev);
+		dpll = I915_READ(dpll_reg);
+		if (dpll & DISPLAY_RATE_SELECT_FPA1)
+			DRM_DEBUG("failed to upclock LVDS!\n");
+		I915_WRITE(PP_CONTROL, I915_READ(PP_CONTROL) & 0x3);
+	}
+
+	if (!schedule)
+		return;
+
+	/* Schedule downclock */
+	mod_timer(&intel_crtc->idle_timer, jiffies +
+		  msecs_to_jiffies(CRTC_IDLE_TIMEOUT));
+}
+
+static void intel_decrease_pllclock(struct drm_crtc *crtc)
+{
+	struct drm_device *dev = crtc->dev;
+	drm_i915_private_t *dev_priv = dev->dev_private;
+	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+	int pipe = intel_crtc->pipe;
+	int dpll_reg = (pipe == 0) ? DPLL_A : DPLL_B;
+	int dpll = I915_READ(dpll_reg);
+
+	if (!i915_lvdsclock)
+		return;
+
+	/*
+	 * Since this is called by a timer, we should never get here in
+	 * the manual case.
+	 */
+	if (!HAS_PIPE_CXSR(dev) && intel_crtc->lowfreq_avail) {
+		DRM_DEBUG("downclocking LVDS\n");
+		I915_WRITE(PP_CONTROL, I915_READ(PP_CONTROL) | (0xabcd << 16));
+
+		dpll |= DISPLAY_RATE_SELECT_FPA1;
+		I915_WRITE(dpll_reg, dpll);
+		dpll = I915_READ(dpll_reg);
+		intel_wait_for_vblank(dev);
+		dpll = I915_READ(dpll_reg);
+		if (!(dpll & DISPLAY_RATE_SELECT_FPA1))
+			DRM_DEBUG("failed to downclock LVDS!\n");
+		I915_WRITE(PP_CONTROL, I915_READ(PP_CONTROL) & 0x3);
+	}
+
+}
+
+/**
+ * intel_idle_update - adjust clocks for idleness
+ * @work: work struct
+ *
+ * Either the GPU or display (or both) went idle.  Check the busy status
+ * here and adjust the CRTC and GPU clocks as necessary.
+ */
+static void intel_idle_update(struct work_struct *work)
+{
+	drm_i915_private_t *dev_priv = container_of(work, drm_i915_private_t,
+						    idle_work);
+	struct drm_device *dev = dev_priv->dev;
+	struct drm_crtc *crtc;
+	struct intel_crtc *intel_crtc;
+
+	if (!i915_powersave)
+		return;
+
+	mutex_lock(&dev->struct_mutex);
+
+	/* GPU isn't processing, downclock it. */
+	if (!dev_priv->busy) {
+		intel_decrease_renderclock(dev);
+		intel_decrease_displayclock(dev);
+	}
+
+	list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+		/* Skip inactive CRTCs */
+		if (!crtc->fb)
+			continue;
+
+		intel_crtc = to_intel_crtc(crtc);
+		if (!intel_crtc->busy)
+			intel_decrease_pllclock(crtc);
+	}
+
+	mutex_unlock(&dev->struct_mutex);
+}
+
+/**
+ * intel_mark_busy - mark the GPU and possibly the display busy
+ * @dev: drm device
+ * @obj: object we're operating on
+ *
+ * Callers can use this function to indicate that the GPU is busy processing
+ * commands.  If @obj matches one of the CRTC objects (i.e. it's a scanout
+ * buffer), we'll also mark the display as busy, so we know to increase its
+ * clock frequency.
+ */
+void intel_mark_busy(struct drm_device *dev, struct drm_gem_object *obj)
+{
+	drm_i915_private_t *dev_priv = dev->dev_private;
+	struct drm_crtc *crtc = NULL;
+	struct intel_framebuffer *intel_fb;
+	struct intel_crtc *intel_crtc;
+
+	dev_priv->busy = true;
+	intel_increase_renderclock(dev, true);
+
+	list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+		if (!crtc->fb)
+			continue;
+
+		intel_crtc = to_intel_crtc(crtc);
+		intel_fb = to_intel_framebuffer(crtc->fb);
+		if (intel_fb->obj == obj) {
+			if (!intel_crtc->busy)
+				intel_increase_pllclock(crtc, true);
+			intel_crtc->busy = true;
+			mod_timer(&intel_crtc->idle_timer, jiffies +
+				  msecs_to_jiffies(CRTC_IDLE_TIMEOUT));
+		}
+	}
+
+
+}
+
 static void intel_crtc_destroy(struct drm_crtc *crtc)
 {
 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
@@ -3110,6 +3498,10 @@ static void intel_crtc_init(struct drm_d
 	intel_crtc->mode_set.crtc = &intel_crtc->base;
 	intel_crtc->mode_set.connectors = (struct drm_connector **)(intel_crtc + 1);
 	intel_crtc->mode_set.num_connectors = 0;
+	intel_crtc->busy = false;
+
+	setup_timer(&intel_crtc->idle_timer, intel_crtc_idle_timer,
+		    (unsigned long)intel_crtc);
 
 	if (i915_fbpercrtc) {
 
@@ -3399,6 +3791,7 @@ static const struct drm_mode_config_func
 
 void intel_modeset_init(struct drm_device *dev)
 {
+	struct drm_i915_private *dev_priv = dev->dev_private;
 	int num_pipe;
 	int i;
 
@@ -3433,15 +3826,38 @@ void intel_modeset_init(struct drm_devic
 	DRM_DEBUG("%d display pipe%s available.\n",
 		  num_pipe, num_pipe > 1 ? "s" : "");
 
+	if (IS_I85X(dev))
+		pci_read_config_word(dev->pdev, HPLLCC, &dev_priv->orig_clock);
+	else if (IS_I9XX(dev) || IS_G4X(dev))
+		pci_read_config_word(dev->pdev, GCFGC, &dev_priv->orig_clock);
+
 	for (i = 0; i < num_pipe; i++) {
 		intel_crtc_init(dev, i);
 	}
 
 	intel_setup_outputs(dev);
+
+	INIT_WORK(&dev_priv->idle_work, intel_idle_update);
+	setup_timer(&dev_priv->idle_timer, intel_gpu_idle_timer,
+		    (unsigned long)dev);
 }
 
 void intel_modeset_cleanup(struct drm_device *dev)
 {
+	struct drm_i915_private *dev_priv = dev->dev_private;
+
+	/* Clean up up/down clocking */
+	if (!HAS_PIPE_CXSR(dev)) {
+		u32 dpll_b = I915_READ(DPLL_B);
+
+		del_timer_sync(&dev_priv->idle_timer);
+		dpll_b &= ~DISPLAY_RATE_SELECT_FPA1;
+		I915_WRITE(DPLL_B, dpll_b);
+		POSTING_READ(DPLL_B);
+		intel_wait_for_vblank(dev);
+	}
+
+	intel_increase_renderclock(dev, false);
 	drm_mode_config_cleanup(dev);
 }
 
diff -up linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_drv.h.jx linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_drv.h
--- linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_drv.h.jx	2009-08-03 14:00:44.000000000 -0400
+++ linux-2.6.30.noarch/drivers/gpu/drm/i915/intel_drv.h	2009-08-03 14:01:07.000000000 -0400
@@ -99,6 +99,9 @@ struct intel_crtc {
 	struct intel_framebuffer *fbdev_fb;
 	/* a mode_set for fbdev users on this crtc */
 	struct drm_mode_set mode_set;
+	bool busy; /* is scanout buffer being updated frequently? */
+	struct timer_list idle_timer;
+	bool lowfreq_avail;
 };
 
 #define to_intel_crtc(x) container_of(x, struct intel_crtc, base)
@@ -117,6 +120,7 @@ extern void intel_hdmi_init(struct drm_d
 extern bool intel_sdvo_init(struct drm_device *dev, int output_device);
 extern void intel_dvo_init(struct drm_device *dev);
 extern void intel_tv_init(struct drm_device *dev);
+extern void intel_mark_busy(struct drm_device *dev, struct drm_gem_object *obj);
 extern void intel_lvds_init(struct drm_device *dev);
 extern void intel_dp_init(struct drm_device *dev, int dp_reg);
 void

drm-page-flip.patch:
 b/drivers/gpu/drm/drm_crtc.c                            |  169 +++++++++++++++-
 b/drivers/gpu/drm/drm_crtc_helper.c                     |   12 +
 b/drivers/gpu/drm/drm_drv.c                             |    1 
 b/drivers/gpu/drm/drm_fops.c                            |   68 ++++++
 b/drivers/gpu/drm/drm_irq.c                             |   43 ++++
 b/drivers/gpu/drm/drm_stub.c                            |    1 
 b/drivers/gpu/drm/i915/i915_drv.c                       |    1 
 b/drivers/gpu/drm/i915/intel_display.c                  |   26 +-
 b/drivers/gpu/drm/radeon/radeon_display.c               |    3 
 b/include/drm/drm.h                                     |   25 ++
 b/include/drm/drmP.h                                    |   32 +++
 b/include/drm/drm_crtc.h                                |   27 ++
 b/include/drm/drm_crtc_helper.h                         |    4 
 b/include/drm/drm_mode.h                                |   16 +
 linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c |    2 
 linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c |    2 
 16 files changed, 416 insertions(+), 16 deletions(-)

--- NEW FILE drm-page-flip.patch ---
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index ba728ad..4b7e748 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -34,6 +34,8 @@
 #include "drmP.h"
 #include "drm_crtc.h"
 
+#undef set_base
+
 struct drm_prop_enum_list {
 	int type;
 	char *name;
@@ -330,6 +332,34 @@ void drm_framebuffer_cleanup(struct drm_framebuffer *fb)
 EXPORT_SYMBOL(drm_framebuffer_cleanup);
 
 /**
+ * drm_crtc_async_flip - do a set_base call from a work queue
+ * @work: work struct
+ *
+ * Called when a set_base call is queued by the page flip code.  This
+ * allows the flip ioctl itself to return immediately and allow userspace
+ * to continue working.
+ */
+static void drm_crtc_async_flip(struct work_struct *work)
+{
+	struct drm_crtc *crtc = container_of(work, struct drm_crtc, async_flip);
+	struct drm_device *dev = crtc->dev;
+	struct drm_pending_flip *pending;
+
+	BUG_ON(crtc->pending_flip == NULL);
+
+	mutex_lock(&dev->struct_mutex);
+	crtc->funcs->set_base(crtc, crtc->x, crtc->y, NULL);
+
+	pending = crtc->pending_flip;
+	crtc->pending_flip = NULL;
+
+	pending->frame = drm_vblank_count(dev, crtc->pipe);
+	list_add_tail(&pending->link, &dev->flip_list);
+
+	mutex_unlock(&dev->struct_mutex);
+}
+
+/**
  * drm_crtc_init - Initialise a new CRTC object
  * @dev: DRM device
  * @crtc: CRTC object to init
@@ -340,17 +370,19 @@ EXPORT_SYMBOL(drm_framebuffer_cleanup);
  *
  * Inits a new object created as base part of an driver crtc object.
  */
-void drm_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
+void drm_crtc_init(struct drm_device *dev, struct drm_crtc *crtc, int pipe,
 		   const struct drm_crtc_funcs *funcs)
 {
 	crtc->dev = dev;
 	crtc->funcs = funcs;
+	crtc->pipe = pipe;
 
 	mutex_lock(&dev->mode_config.mutex);
 	drm_mode_object_get(dev, &crtc->base, DRM_MODE_OBJECT_CRTC);
 
 	list_add_tail(&crtc->head, &dev->mode_config.crtc_list);
 	dev->mode_config.num_crtc++;
+	INIT_WORK(&crtc->async_flip, drm_crtc_async_flip);
 	mutex_unlock(&dev->mode_config.mutex);
 }
 EXPORT_SYMBOL(drm_crtc_init);
@@ -369,6 +401,9 @@ void drm_crtc_cleanup(struct drm_crtc *crtc)
 {
 	struct drm_device *dev = crtc->dev;
 
+	mutex_lock(&dev->mode_config.mutex);
+	flush_work(&crtc->async_flip);
+
 	if (crtc->gamma_store) {
 		kfree(crtc->gamma_store);
 		crtc->gamma_store = NULL;
@@ -376,6 +411,7 @@ void drm_crtc_cleanup(struct drm_crtc *crtc)
 
 	drm_mode_object_put(dev, &crtc->base);
 	list_del(&crtc->head);
+	mutex_unlock(&dev->mode_config.mutex);
 	dev->mode_config.num_crtc--;
 }
 EXPORT_SYMBOL(drm_crtc_cleanup);
@@ -2479,3 +2515,134 @@ out:
 	mutex_unlock(&dev->mode_config.mutex);
 	return ret;
 }
+
+/**
+ * drm_mode_page_flip_ioctl - page flip ioctl
+ * @dev: DRM device
+ * @data: ioctl args
+ * @file_priv: file private data
+ *
+ * The page flip ioctl replaces the current front buffer with a new
+ * one, using the CRTC's set_base function, which should just update
+ * the front buffer base pointer.  It's up to set_base to make
+ * sure the update doesn't result in tearing (on some hardware the
+ * base register is double buffered, so this is easy).
+ *
+ * Note that this covers just the simple case of flipping the front
+ * buffer immediately.  Interval handling and interlaced modes have to
+ * be handled by userspace, or with new ioctls.
+ */
+int drm_mode_page_flip_ioctl(struct drm_device *dev, void *data,
+			     struct drm_file *file_priv)
+{
+	struct drm_pending_flip *pending;
+	struct drm_mode_page_flip *flip_data = data;
+	struct drm_mode_object *drm_obj, *fb_obj;
+	struct drm_crtc *crtc;
+	int ret = 0;
+
+	if (!(drm_core_check_feature(dev, DRIVER_MODESET)))
+		return -ENODEV;
+
+	/*
+	 * Reject unknown flags so future userspace knows what we (don't)
+	 * support
+	 */
+	if (flip_data->flags & (~DRM_MODE_PAGE_FLIP_FLAGS_MASK)) {
+		DRM_DEBUG("bad page flip flags\n");
+		return -EINVAL;
+	}
+
+	pending = kzalloc(sizeof *pending, GFP_KERNEL);
+	if (pending == NULL)
+		return -ENOMEM;
+
+	mutex_lock(&dev->struct_mutex);
+
+	fb_obj = drm_mode_object_find(dev, flip_data->fb_id,
+				      DRM_MODE_OBJECT_FB);
+	if (!fb_obj) {
+		DRM_DEBUG("unknown fb %d\n", flip_data->fb_id);
+		ret = -ENOENT;
+		goto out_unlock;
+	}
+
+	drm_obj = drm_mode_object_find(dev, flip_data->crtc_id,
+				       DRM_MODE_OBJECT_CRTC);
+	if (!drm_obj) {
+		DRM_DEBUG("unknown crtc %d\n", flip_data->crtc_id);
+		ret = -ENOENT;
+		goto out_unlock;
+	}
+	crtc = obj_to_crtc(drm_obj);
+	if (!crtc->enabled) {
+		DRM_DEBUG("crtc %d not enabled\n", flip_data->crtc_id);
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+
+	if (crtc->fb->funcs->unpin == NULL) {
+		DRM_DEBUG("fb for crtc %d does not support delayed unpin\n",
+			  flip_data->crtc_id);
+		ret = -ENODEV;
+		goto out_unlock;
+	}
+
+	pending->crtc = crtc;
+	pending->old_fb = crtc->fb;
+	pending->pipe = crtc->pipe;
+	pending->event.base.type = DRM_EVENT_MODE_PAGE_FLIP;
+	pending->event.base.length = sizeof pending->event;
+	pending->event.user_data = flip_data->user_data;
+	pending->pending_event.event = &pending->event.base;
+	pending->pending_event.file_priv = file_priv;
+	pending->pending_event.destroy =
+		(void (*) (struct drm_pending_event *)) kfree;
+
+	/* Get vblank ref for completion handling */
+	ret = drm_vblank_get(dev, crtc->pipe);
+	if (ret) {
+		DRM_DEBUG("failed to take vblank ref\n");
+		goto out_unlock;
+	}
+
+	/*
+	 * The set_base call will change the domain on the new fb,
+	 * which will force the rendering to finish and block the
+	 * ioctl.  We need to do this last part from a work queue, to
+	 * avoid blocking userspace here.
+	 */
+	crtc->fb = obj_to_fb(fb_obj);
+
+	if (crtc->pending_flip != NULL) {
+	    struct drm_pending_flip *old_flip;
+
+	    /* We have an outstanding flip request for this crtc/pipe.
+	     * In order to satisfy the user we can either queue the requests
+	     * and apply them on sequential vblanks, or we can drop old
+	     * requests.
+	     *
+	     * Here we choose to discard the previous request for
+	     * simplicity. Note that since we have not yet applied the
+	     * previous flip, we need to preserve the original (i.e. still
+	     * current) fb.
+	     */
+
+	    old_flip = crtc->pending_flip;
+	    pending->old_fb = old_flip->old_fb;
+	    old_flip->old_fb = NULL;
+	    drm_finish_pending_flip (dev, old_flip, 0);
+	} else
+	    schedule_work(&crtc->async_flip);
+	crtc->pending_flip = pending;
+
+	mutex_unlock(&dev->struct_mutex);
+
+	return 0;
+
+out_unlock:
+	mutex_unlock(&dev->struct_mutex);
+	kfree(pending);
+
+	return ret;
+}
diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
index ff447f1..fec66f9 100644
--- a/drivers/gpu/drm/drm_crtc_helper.c
+++ b/drivers/gpu/drm/drm_crtc_helper.c
@@ -872,8 +872,10 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
 		old_fb = set->crtc->fb;
 		if (set->crtc->fb != set->fb)
 			set->crtc->fb = set->fb;
+		mutex_lock(&dev->struct_mutex);
 		ret = crtc_funcs->mode_set_base(set->crtc,
 						set->x, set->y, old_fb);
+		mutex_unlock(&dev->struct_mutex);
 		if (ret != 0)
 			goto fail;
 	}
@@ -1095,3 +1097,13 @@ int drm_helper_resume_force_mode(struct drm_device *dev)
 	return 0;
 }
 EXPORT_SYMBOL(drm_helper_resume_force_mode);
+
+int
+drm_crtc_helper_set_base(struct drm_crtc *crtc, int x, int y,
+			 struct drm_framebuffer *old_fb)
+{
+	struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
+
+	return crtc_funcs->mode_set_base(crtc, x, y, old_fb);
+}
+EXPORT_SYMBOL(drm_crtc_helper_set_base);
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
index a75ca63..672f473 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -145,6 +145,7 @@ static struct drm_ioctl_desc drm_ioctls[] = {
 	DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETFB, drm_mode_getfb, DRM_MASTER|DRM_CONTROL_ALLOW),
 	DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB, drm_mode_addfb, DRM_MASTER|DRM_CONTROL_ALLOW),
 	DRM_IOCTL_DEF(DRM_IOCTL_MODE_RMFB, drm_mode_rmfb, DRM_MASTER|DRM_CONTROL_ALLOW),
+	DRM_IOCTL_DEF(DRM_IOCTL_MODE_PAGE_FLIP, drm_mode_page_flip_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW),
 };
 
 #define DRM_CORE_IOCTL_COUNT	ARRAY_SIZE( drm_ioctls )
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
index 251bc0e..dcd9c66 100644
--- a/drivers/gpu/drm/drm_fops.c
+++ b/drivers/gpu/drm/drm_fops.c
@@ -257,6 +257,8 @@ static int drm_open_helper(struct inode *inode, struct file *filp,
 
 	INIT_LIST_HEAD(&priv->lhead);
 	INIT_LIST_HEAD(&priv->fbs);
+	INIT_LIST_HEAD(&priv->event_list);
+	init_waitqueue_head(&priv->event_wait);
 
 	if (dev->driver->driver_features & DRIVER_GEM)
 		drm_gem_open(dev, priv);
@@ -429,6 +431,9 @@ int drm_release(struct inode *inode, struct file *filp)
 {
 	struct drm_file *file_priv = filp->private_data;
 	struct drm_device *dev = file_priv->minor->dev;
+	struct drm_pending_flip *f, *ft;
+	struct drm_pending_event *e, *et;
+
 	int retcode = 0;
 
 	lock_kernel();
@@ -451,6 +456,19 @@ int drm_release(struct inode *inode, struct file *filp)
 	if (file_priv->minor->master)
 		drm_master_release(dev, filp);
 
+	mutex_lock(&dev->struct_mutex);
+
+	/* Remove pending flips */
+	list_for_each_entry_safe(f, ft, &dev->flip_list, link)
+		if (f->pending_event.file_priv == file_priv)
+			drm_finish_pending_flip(dev, f, 0);
+
+	/* Remove unconsumed events */
+	list_for_each_entry_safe(e, et, &file_priv->event_list, link)
+		e->destroy(e);
+
+	mutex_unlock(&dev->struct_mutex);
+
 	if (dev->driver->driver_features & DRIVER_GEM)
 		drm_gem_release(dev, file_priv);
 
@@ -544,9 +562,55 @@ int drm_release(struct inode *inode, struct file *filp)
 }
 EXPORT_SYMBOL(drm_release);
 
-/** No-op. */
+ssize_t drm_read(struct file *filp, char __user *buffer,
+		 size_t count, loff_t *offset)
+{
+	struct drm_file *file_priv = filp->private_data;
+	struct drm_device *dev = file_priv->minor->dev;
+	struct drm_pending_event *event;
+	ssize_t total, ret;
+
+	ret = wait_event_interruptible(file_priv->event_wait,
+				       !list_empty(&file_priv->event_list));
+	if (ret < 0)
+		return ret;
+
+	total = 0;
+	while (!list_empty(&file_priv->event_list)) {
+		mutex_lock(&dev->struct_mutex);
+		event = list_first_entry(&file_priv->event_list,
+					 struct drm_pending_event, link);
+		if (total + event->event->length > count) {
+			mutex_unlock(&dev->struct_mutex);
+			break;
+		}
+		list_del(&event->link);
+		mutex_unlock(&dev->struct_mutex);
+
+		if (copy_to_user(buffer + total,
+				 event->event, event->event->length)) {
+			total = -EFAULT;
+			break;
+		}
+
+		total += event->event->length;
+		event->destroy(event);
+	}
+
+	return total;
+}
+EXPORT_SYMBOL(drm_read);
+
 unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait)
 {
-	return 0;
+	struct drm_file *file_priv = filp->private_data;
+	unsigned int mask = 0;
+
+	poll_wait(filp, &file_priv->event_wait, wait);
+
+	if (!list_empty(&file_priv->event_list))
+		mask |= POLLIN | POLLRDNORM;
+
+	return mask;
 }
 EXPORT_SYMBOL(drm_poll);
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
index f85aaf2..102d19d 100644
--- a/drivers/gpu/drm/drm_irq.c
+++ b/drivers/gpu/drm/drm_irq.c
@@ -34,6 +34,7 @@
  */
 
 #include "drmP.h"
+#include "drm_crtc_helper.h"
 
 #include <linux/interrupt.h>	/* For task queue support */
 
@@ -71,6 +72,44 @@ int drm_irq_by_busid(struct drm_device *dev, void *data,
 	return 0;
 }
 
+#define vblank_passed(a,b) ((long)(a - b) > 0)
+
+void drm_finish_pending_flip(struct drm_device *dev,
+			     struct drm_pending_flip *f, u32 frame)
+{
+	struct timeval now;
+
+	f->event.frame = frame;
+	do_gettimeofday(&now);
+	f->event.tv_sec = now.tv_sec;
+	f->event.tv_usec = now.tv_usec;	
+	drm_vblank_put(dev, f->pipe);
+	list_del_init(&f->link);
+	list_add_tail(&f->pending_event.link,
+		      &f->pending_event.file_priv->event_list);
+	if (f->old_fb)
+	    f->old_fb->funcs->unpin(f->old_fb);
+	wake_up_interruptible(&f->pending_event.file_priv->event_wait);
+}
+
+static void drm_flip_work_func(struct work_struct *work)
+{
+	struct drm_device *dev =
+		container_of(work, struct drm_device, flip_work);
+	struct drm_pending_flip *f, *t;
+	u32 frame;
+
+	mutex_lock(&dev->struct_mutex);
+
+	list_for_each_entry_safe(f, t, &dev->flip_list, link) {
+		frame = drm_vblank_count(dev, f->pipe);
+		if (vblank_passed(frame, f->frame))
+			drm_finish_pending_flip(dev, f, frame);
+	}
+
+	mutex_unlock(&dev->struct_mutex);
+}
+
 static void vblank_disable_fn(unsigned long arg)
 {
 	struct drm_device *dev = (struct drm_device *)arg;
@@ -161,6 +200,8 @@ int drm_vblank_init(struct drm_device *dev, int num_crtcs)
 		atomic_set(&dev->vblank_refcount[i], 0);
 	}
 
+	INIT_WORK(&dev->flip_work, drm_flip_work_func);
+
 	dev->vblank_disable_allowed = 0;
 
 	return 0;
@@ -626,5 +667,7 @@ void drm_handle_vblank(struct drm_device *dev, int crtc)
 {
 	atomic_inc(&dev->_vblank_count[crtc]);
 	DRM_WAKEUP(&dev->vbl_queue[crtc]);
+	schedule_work(&dev->flip_work);
 }
 EXPORT_SYMBOL(drm_handle_vblank);
+
diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c
index 55bb8a8..65c8662 100644
--- a/drivers/gpu/drm/drm_stub.c
+++ b/drivers/gpu/drm/drm_stub.c
@@ -220,6 +220,7 @@ static int drm_fill_in_dev(struct drm_device * dev, struct pci_dev *pdev,
 	INIT_LIST_HEAD(&dev->ctxlist);
 	INIT_LIST_HEAD(&dev->vmalist);
 	INIT_LIST_HEAD(&dev->maplist);
+	INIT_LIST_HEAD(&dev->flip_list);
 
 	spin_lock_init(&dev->count_lock);
 	spin_lock_init(&dev->drw_lock);
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index dbe568c..b81305e 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -206,6 +206,7 @@ static struct drm_driver driver = {
 		 .mmap = drm_gem_mmap,
 		 .poll = drm_poll,
 		 .fasync = drm_fasync,
+		 .read = drm_read,
 #ifdef CONFIG_COMPAT
 		 .compat_ioctl = i915_compat_ioctl,
 #endif
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 155719f..0d6e677 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -973,6 +973,8 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
 	u32 dspcntr, alignment;
 	int ret;
 
+	BUG_ON(!mutex_is_locked(&dev->struct_mutex));
+
 	/* no fb bound */
 	if (!crtc->fb) {
 		DRM_DEBUG("No FB bound\n");
@@ -1008,17 +1010,14 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
 		BUG();
 	}
 
-	mutex_lock(&dev->struct_mutex);
 	ret = i915_gem_object_pin(obj, alignment);
 	if (ret != 0) {
-		mutex_unlock(&dev->struct_mutex);
 		return ret;
 	}
 
 	ret = i915_gem_object_set_to_gtt_domain(obj, 1);
 	if (ret != 0) {
 		i915_gem_object_unpin(obj);
-		mutex_unlock(&dev->struct_mutex);
 		return ret;
 	}
 
@@ -1029,7 +1028,6 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
 		ret = i915_gem_object_get_fence_reg(obj);
 		if (ret != 0) {
 			i915_gem_object_unpin(obj);
-			mutex_unlock(&dev->struct_mutex);
 			return ret;
 		}
 	}
@@ -1054,7 +1052,6 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
 	default:
 		DRM_ERROR("Unknown color depth\n");
 		i915_gem_object_unpin(obj);
-		mutex_unlock(&dev->struct_mutex);
 		return -EINVAL;
 	}
 	if (IS_I965G(dev)) {
@@ -1086,17 +1083,14 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
 		I915_READ(dspbase);
 	}
 
-	intel_wait_for_vblank(dev);
-
 	if (old_fb) {
 		intel_fb = to_intel_framebuffer(old_fb);
 		obj_priv = intel_fb->obj->driver_private;
+		intel_wait_for_vblank(dev);
 		i915_gem_object_unpin(intel_fb->obj);
 	}
 	intel_increase_pllclock(crtc, true);
 
-	mutex_unlock(&dev->struct_mutex);
-
 	if (!dev->primary->master)
 		return 0;
 
@@ -2732,7 +2726,9 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
 	I915_WRITE(dspcntr_reg, dspcntr);
 
 	/* Flush the plane changes */
+	mutex_lock(&dev->struct_mutex);
 	ret = intel_pipe_set_base(crtc, x, y, old_fb);
+	mutex_unlock(&dev->struct_mutex);
 
 	intel_update_watermarks(dev);
 
@@ -3521,6 +3517,7 @@ static const struct drm_crtc_funcs intel_crtc_funcs = {
 	.gamma_set = intel_crtc_gamma_set,
 	.set_config = drm_crtc_helper_set_config,
 	.destroy = intel_crtc_destroy,
+	.set_base = drm_crtc_helper_set_base,
 };
 
 
@@ -3533,7 +3530,7 @@ static void intel_crtc_init(struct drm_device *dev, int pipe)
 	if (intel_crtc == NULL)
 		return;
 
-	drm_crtc_init(dev, &intel_crtc->base, &intel_crtc_funcs);
+	drm_crtc_init(dev, &intel_crtc->base, pipe, &intel_crtc_funcs);
 
 	drm_mode_crtc_set_gamma_size(&intel_crtc->base, 256);
 	intel_crtc->pipe = pipe;
@@ -3717,9 +3714,18 @@ static int intel_user_framebuffer_create_handle(struct drm_framebuffer *fb,
 	return drm_gem_handle_create(file_priv, object, handle);
 }
 
+static void intel_user_framebuffer_unpin(struct drm_framebuffer *fb)
+{
+	struct intel_framebuffer *intel_fb;
+
+	intel_fb = to_intel_framebuffer(fb);
+	i915_gem_object_unpin(intel_fb->obj);
+}
+
 static const struct drm_framebuffer_funcs intel_fb_funcs = {
 	.destroy = intel_user_framebuffer_destroy,
 	.create_handle = intel_user_framebuffer_create_handle,
+	.unpin = intel_user_framebuffer_unpin
 };
 
 int intel_framebuffer_create(struct drm_device *dev,
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
index f5739e2..0ec45bc 100644
--- a/drivers/gpu/drm/radeon/radeon_display.c
+++ b/drivers/gpu/drm/radeon/radeon_display.c
@@ -168,6 +168,7 @@ static const struct drm_crtc_funcs radeon_crtc_funcs = {
 	.gamma_set = radeon_crtc_gamma_set,
 	.set_config = drm_crtc_helper_set_config,
 	.destroy = radeon_crtc_destroy,
+	.set_base = drm_crtc_helper_set_base,
 };
 
 static void radeon_crtc_init(struct drm_device *dev, int index)
@@ -180,7 +181,7 @@ static void radeon_crtc_init(struct drm_device *dev, int index)
 	if (radeon_crtc == NULL)
 		return;
 
-	drm_crtc_init(dev, &radeon_crtc->base, &radeon_crtc_funcs);
+	drm_crtc_init(dev, &radeon_crtc->base, index, &radeon_crtc_funcs);
 
 	drm_mode_crtc_set_gamma_size(&radeon_crtc->base, 256);
 	radeon_crtc->crtc_id = index;
diff --git a/include/drm/drm.h b/include/drm/drm.h
index 7cb50bd..1920323 100644
--- a/include/drm/drm.h
+++ b/include/drm/drm.h
@@ -686,6 +686,7 @@ struct drm_gem_open {
 #define DRM_IOCTL_MODE_GETFB		DRM_IOWR(0xAD, struct drm_mode_fb_cmd)
 #define DRM_IOCTL_MODE_ADDFB		DRM_IOWR(0xAE, struct drm_mode_fb_cmd)
 #define DRM_IOCTL_MODE_RMFB		DRM_IOWR(0xAF, unsigned int)
+#define DRM_IOCTL_MODE_PAGE_FLIP	DRM_IOW( 0xB0, struct drm_mode_page_flip)
 
 /**
  * Device specific ioctls should only be in their respective headers
@@ -698,6 +699,30 @@ struct drm_gem_open {
 #define DRM_COMMAND_BASE                0x40
 #define DRM_COMMAND_END			0xA0
 
+/**
+ * Header for events written back to userspace on the drm fd.  The
+ * type defines the type of event, the length specifies the total
+ * length of the event (including the header), and user_data is
+ * typically a 64 bit value passed with the ioctl that triggered the
+ * event.  A read on the drm fd will always only return complete
+ * events, that is, if for example the read buffer is 100 bytes, and
+ * there are two 64 byte events pending, only one will be returned.
+ */
+struct drm_event {
+	__u32 type;
+	__u32 length;
+};
+
+#define DRM_EVENT_MODE_PAGE_FLIP 0x01
+
+struct drm_event_page_flip {
+	struct drm_event base;
+	__u64 user_data;
+	__u32 tv_sec;
+	__u32 tv_usec;
+	__u32 frame;
+};
+
 /* typedef area */
 #ifndef __KERNEL__
 typedef struct drm_clip_rect drm_clip_rect_t;
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index eeefb63..5431888 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -426,6 +426,14 @@ struct drm_buf_entry {
 	struct drm_freelist freelist;
 };
 
+/* Event queued up for userspace to read */
+struct drm_pending_event {
+	struct drm_event *event;
+	struct list_head link;
+	struct drm_file *file_priv;
+	void (*destroy) (struct drm_pending_event *event);
+};
+
 /** File private data */
 struct drm_file {
 	int authenticated;
@@ -449,6 +457,9 @@ struct drm_file {
 	struct drm_master *master; /* master this node is currently associated with
 				      N.B. not always minor->master */
 	struct list_head fbs;
+
+	wait_queue_head_t event_wait;
+	struct list_head event_list;
 };
 
 /** Wait queue */
@@ -897,6 +908,16 @@ struct drm_minor {
 	struct drm_mode_group mode_group;
 };
 
+struct drm_pending_flip {
+	struct drm_pending_event pending_event;
+	struct drm_framebuffer *old_fb;
+	struct drm_crtc *crtc;
+	u32 frame;
+	int pipe;
+	struct list_head link;
+	struct drm_event_page_flip event;
+};
+
 /**
  * DRM device structure. This structure represent a complete card that
  * may contain multiple heads.
@@ -996,6 +1017,13 @@ struct drm_device {
 
 	u32 max_vblank_count;           /**< size of vblank counter register */
 
+	struct work_struct flip_work;
+
+	/**
+	 * List of objects waiting on flip completion
+	 */
+	struct list_head flip_list;
+
 	/*@} */
 	cycles_t ctx_start;
 	cycles_t lck_start;
@@ -1132,6 +1160,8 @@ extern int drm_lastclose(struct drm_device *dev);
 extern int drm_open(struct inode *inode, struct file *filp);
 extern int drm_stub_open(struct inode *inode, struct file *filp);
 extern int drm_fasync(int fd, struct file *filp, int on);
+extern ssize_t drm_read(struct file *filp, char __user *buffer,
+			size_t count, loff_t *offset);
 extern int drm_release(struct inode *inode, struct file *filp);
 
 				/* Mapping support (drm_vm.h) */
@@ -1298,6 +1328,8 @@ extern void drm_vblank_pre_modeset(struct drm_device *dev, int crtc);
 extern void drm_vblank_post_modeset(struct drm_device *dev, int crtc);
 extern int drm_modeset_ctl(struct drm_device *dev, void *data,
 			   struct drm_file *file_priv);
+extern void drm_finish_pending_flip(struct drm_device *dev,
+				   struct drm_pending_flip *f, u32 frame);
 
 				/* AGP/GART support (drm_agpsupport.h) */
 extern struct drm_agp_head *drm_agp_init(struct drm_device *dev);
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index ae1e9e1..525f770 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -238,6 +238,12 @@ struct drm_display_info {
 };
 
 struct drm_framebuffer_funcs {
+	/*
+	 * Unpin the old fb after setting a mode.  Must be called
+	 * after the old framebuffer is no longer visible, ie, after
+	 * the next vblank, typically.
+	 */
+	void (*unpin)(struct drm_framebuffer *fb);
 	void (*destroy)(struct drm_framebuffer *framebuffer);
 	int (*create_handle)(struct drm_framebuffer *fb,
 			     struct drm_file *file_priv,
@@ -290,6 +296,7 @@ struct drm_property {
 struct drm_crtc;
 struct drm_connector;
 struct drm_encoder;
+struct drm_pending_flip;
 
 /**
  * drm_crtc_funcs - control CRTCs for a given device
@@ -333,17 +340,29 @@ struct drm_crtc_funcs {
 	void (*destroy)(struct drm_crtc *crtc);
 
 	int (*set_config)(struct drm_mode_set *set);
+
+	/*
+	 * Move the crtc on the current fb to the given position.
+	 * This function is optional.  If old_fb is provided, the
+	 * function will wait for vblank and unpin it.  If old_fb is
+	 * NULL, nothing is unpinned and the caller must call
+	 * mode_unpin_fb to release the old framebuffer.
+	 */
+	int (*set_base)(struct drm_crtc *crtc, int x, int y,
+			struct drm_framebuffer *old_fb);
 };
 
 /**
  * drm_crtc - central CRTC control structure
  * @enabled: is this CRTC enabled?
+ * @pipe: pipe number (as seen by DRM vblank functions)
  * @x: x position on screen
  * @y: y position on screen
  * @desired_mode: new desired mode
  * @desired_x: desired x for desired_mode
  * @desired_y: desired y for desired_mode
  * @funcs: CRTC control functions
+ * @async_work: work queue for async set base calls
  *
  * Each CRTC may have one or more connectors associated with it.  This structure
  * allows the CRTC to be controlled.
@@ -361,6 +380,7 @@ struct drm_crtc {
 
 	struct drm_display_mode mode;
 
+	int pipe;
 	int x, y;
 	struct drm_display_mode *desired_mode;
 	int desired_x, desired_y;
@@ -370,6 +390,10 @@ struct drm_crtc {
 	uint32_t gamma_size;
 	uint16_t *gamma_store;
 
+	/* Allow async set_pipe_base calls for flipping */
+	struct work_struct async_flip;
+	struct drm_pending_flip *pending_flip;
+
 	/* if you are using the helper */
 	void *helper_private;
 };
@@ -597,6 +621,7 @@ struct drm_mode_config {
 
 extern void drm_crtc_init(struct drm_device *dev,
 			  struct drm_crtc *crtc,
+			  int pipe,
 			  const struct drm_crtc_funcs *funcs);
 extern void drm_crtc_cleanup(struct drm_crtc *crtc);
 
@@ -744,6 +769,8 @@ extern int drm_mode_gamma_get_ioctl(struct drm_device *dev,
 extern int drm_mode_gamma_set_ioctl(struct drm_device *dev,
 				    void *data, struct drm_file *file_priv);
 extern bool drm_detect_hdmi_monitor(struct edid *edid);
+extern int drm_mode_page_flip_ioctl(struct drm_device *dev, void *data,
+				    struct drm_file *file_priv);
 extern struct drm_display_mode *drm_cvt_mode(struct drm_device *dev,
 				int hdisplay, int vdisplay, int vrefresh,
 				bool reduced, bool interlaced);
diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h
index 4c8daca..b5bd0b8 100644
--- a/include/drm/drm_crtc_helper.h
+++ b/include/drm/drm_crtc_helper.h
@@ -126,4 +126,8 @@ static inline void drm_connector_helper_add(struct drm_connector *connector,
 }
 
 extern int drm_helper_resume_force_mode(struct drm_device *dev);
+
+extern int drm_crtc_helper_set_base(struct drm_crtc *crtc, int x, int y,
+				    struct drm_framebuffer *old_fb);
+
 #endif
diff --git a/include/drm/drm_mode.h b/include/drm/drm_mode.h
index 1f90841..6f08a77 100644
--- a/include/drm/drm_mode.h
+++ b/include/drm/drm_mode.h
@@ -268,4 +268,20 @@ struct drm_mode_crtc_lut {
 	__u64 blue;
 };
 
+#define DRM_MODE_PAGE_FLIP_WAIT		(1<<0) /* block on previous page flip */
+#define DRM_MODE_PAGE_FLIP_FLAGS_MASK	(DRM_MODE_PAGE_FLIP_WAIT)
+
+struct drm_mode_page_flip {
+	/** Handle of new front buffer */
+	__u32 fb_id;
+	__u32 crtc_id;
+
+	/* 64 bit cookie returned to userspace in the page flip event. */
+	__u64 user_data;
+	/**
+	 * page flip flags (wait on flip only for now)
+	 */
+	__u32 flags;
+};
+
 #endif
diff -up linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c.da linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c
--- linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c.da	2009-09-08 16:07:49.000000000 +1000
+++ linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv04_crtc.c	2009-09-08 16:08:09.000000000 +1000
@@ -993,7 +993,7 @@ nv04_crtc_create(struct drm_device *dev,
 	nv_crtc->index = crtc_num;
 	nv_crtc->last_dpms = NV_DPMS_CLEARED;
 
-	drm_crtc_init(dev, &nv_crtc->base, &nv04_crtc_funcs);
+	drm_crtc_init(dev, &nv_crtc->base, crtc_num, &nv04_crtc_funcs);
 	drm_crtc_helper_add(&nv_crtc->base, &nv04_crtc_helper_funcs);
 	drm_mode_crtc_set_gamma_size(&nv_crtc->base, 256);
 
diff -up linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c.da linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c
--- linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c.da	2009-09-08 16:07:49.000000000 +1000
+++ linux-2.6.30.noarch/drivers/gpu/drm/nouveau/nv50_crtc.c	2009-09-08 16:08:09.000000000 +1000
@@ -777,7 +777,7 @@ nv50_crtc_create(struct drm_device *dev,
 	crtc->set_dither = nv50_crtc_set_dither;
 	crtc->set_scale = nv50_crtc_set_scale;
 
-	drm_crtc_init(dev, &crtc->base, &nv50_crtc_funcs);
+	drm_crtc_init(dev, &crtc->base, index, &nv50_crtc_funcs);
 	drm_crtc_helper_add(&crtc->base, &nv50_crtc_helper_funcs);
 	drm_mode_crtc_set_gamma_size(&crtc->base, 256);
 

drm-radeon-dp-support.patch:
 b/drivers/gpu/drm/Makefile                   |    2 
 b/drivers/gpu/drm/drm_dp_helper.c            |  274 +++++++++
 b/drivers/gpu/drm/i915/Makefile              |    1 
 b/drivers/gpu/drm/i915/intel_display.c       |    1 
 b/drivers/gpu/drm/i915/intel_dp.c            |    2 
 b/drivers/gpu/drm/radeon/Makefile            |    2 
 b/drivers/gpu/drm/radeon/atom.c              |   33 +
 b/drivers/gpu/drm/radeon/atom.h              |    2 
 b/drivers/gpu/drm/radeon/atombios_dp.c       |  750 +++++++++++++++++++++++++++
 b/drivers/gpu/drm/radeon/radeon_atombios.c   |   57 +-
 b/drivers/gpu/drm/radeon/radeon_combios.c    |  158 +++--
 b/drivers/gpu/drm/radeon/radeon_connectors.c |   91 +++
 b/drivers/gpu/drm/radeon/radeon_device.c     |    2 
 b/drivers/gpu/drm/radeon/radeon_display.c    |    5 
 b/drivers/gpu/drm/radeon/radeon_encoders.c   |  189 ++++--
 b/drivers/gpu/drm/radeon/radeon_i2c.c        |   73 ++
 b/drivers/gpu/drm/radeon/radeon_mode.h       |   39 +
 b/drivers/gpu/drm/radeon/radeon_reg.h        |   12 
 b/include/drm/drm_dp_helper.c                |  273 +++++++++
 b/include/drm/drm_dp_helper.h                |  174 ++++++
 drivers/gpu/drm/i915/intel_dp.h              |  144 -----
 drivers/gpu/drm/i915/intel_dp_i2c.c          |  273 ---------
 22 files changed, 1956 insertions(+), 601 deletions(-)

--- NEW FILE drm-radeon-dp-support.patch ---
diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
index 3c8827a..5ce2ce8 100644
--- a/drivers/gpu/drm/Makefile
+++ b/drivers/gpu/drm/Makefile
@@ -15,7 +15,7 @@ drm-y       :=	drm_auth.o drm_bufs.o drm_cache.o \
 
 drm-$(CONFIG_COMPAT) += drm_ioc32.o
 
-drm_kms_helper-y := drm_fb_helper.o drm_crtc_helper.o
+drm_kms_helper-y := drm_fb_helper.o drm_crtc_helper.o drm_dp_helper.o
 
 obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o
 
diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c
new file mode 100644
index 0000000..70399b2
--- /dev/null
+++ b/drivers/gpu/drm/drm_dp_helper.c
@@ -0,0 +1,274 @@
+/*
+ * Copyright © 2009 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting documentation, and
+ * that the name of the copyright holders not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission.  The copyright holders make no representations
+ * about the suitability of this software for any purpose.  It is provided "as
+ * is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/delay.h>
+#include <linux/slab.h>
+#include <linux/init.h>
+#include <linux/errno.h>
+#include <linux/sched.h>
+#include <linux/i2c.h>
+#include "drm_dp_helper.h"
+#include "drmP.h"
+
+/* Run a single AUX_CH I2C transaction, writing/reading data as necessary */
+
+#define MODE_I2C_START	1
+#define MODE_I2C_WRITE	2
+#define MODE_I2C_READ	4
+#define MODE_I2C_STOP	8
+
+static int
+i2c_algo_dp_aux_transaction(struct i2c_adapter *adapter, int mode,
+			    uint8_t write_byte, uint8_t *read_byte)
+{
+	struct i2c_algo_dp_aux_data *algo_data = adapter->algo_data;
+	uint16_t address = algo_data->address;
+	uint8_t msg[5];
+	uint8_t reply[2];
+	int msg_bytes;
+	int reply_bytes;
+	int ret;
+
+	memset(msg, 0, 5);
+	/* Set up the command byte */
+	if (mode & MODE_I2C_READ)
+		msg[0] = AUX_I2C_READ << 4;
+	else
+		msg[0] = AUX_I2C_WRITE << 4;
+
+	if (!(mode & MODE_I2C_STOP))
+		msg[0] |= AUX_I2C_MOT << 4;
+
+	msg[1] = address >> 8;
+	msg[2] = address;
+
+	switch (mode) {
+	case MODE_I2C_WRITE:
+		msg[3] = 0;
+		msg[4] = write_byte;
+		msg_bytes = 5;
+		reply_bytes = 1;
+		break;
+	case MODE_I2C_READ:
+		msg[3] = 0;
+		msg_bytes = 4;
+		reply_bytes = 2;
+		break;
+	default:
+		msg_bytes = 3;
+		reply_bytes = 1;
+		break;
+	}
+
+	for (;;) {
+		ret = (*algo_data->aux_ch)(adapter,
+					   msg, msg_bytes,
+					   reply, reply_bytes);
+		if (ret < 0) {
+			DRM_DEBUG("aux_ch failed %d\n", ret);
+			return ret;
+		}
+		switch (reply[0] & AUX_I2C_REPLY_MASK) {
+		case AUX_I2C_REPLY_ACK:
+			if (mode == MODE_I2C_READ) {
+				*read_byte = reply[1];
+			}
+			return reply_bytes - 1;
+		case AUX_I2C_REPLY_NACK:
+			DRM_DEBUG("aux_ch nack\n");
+			return -EREMOTEIO;
+		case AUX_I2C_REPLY_DEFER:
+			DRM_DEBUG("aux_ch defer\n");
+			udelay(100);
+			break;
+		default:
+			DRM_ERROR("aux_ch invalid reply 0x%02x\n", reply[0]);
+			return -EREMOTEIO;
+		}
+	}
+}
+
+/*
+ * I2C over AUX CH
+ */
+
+/*
+ * Send the address. If the I2C link is running, this 'restarts'
+ * the connection with the new address, this is used for doing
+ * a write followed by a read (as needed for DDC)
+ */
+static int
+i2c_algo_dp_aux_address(struct i2c_adapter *adapter, u16 address, bool reading)
+{
+	struct i2c_algo_dp_aux_data *algo_data = adapter->algo_data;
+	int mode = MODE_I2C_START;
+	int ret;
+
+	if (reading)
+		mode |= MODE_I2C_READ;
+	else
+		mode |= MODE_I2C_WRITE;
+	algo_data->address = address;
+	algo_data->running = true;
+	ret = i2c_algo_dp_aux_transaction(adapter, mode, 0, NULL);
+	return ret;
+}
+
+/*
+ * Stop the I2C transaction. This closes out the link, sending
+ * a bare address packet with the MOT bit turned off
+ */
+static void
+i2c_algo_dp_aux_stop(struct i2c_adapter *adapter, bool reading)
+{
+	struct i2c_algo_dp_aux_data *algo_data = adapter->algo_data;
+	int mode = MODE_I2C_STOP;
+
+	if (reading)
+		mode |= MODE_I2C_READ;
+	else
+		mode |= MODE_I2C_WRITE;
+	if (algo_data->running) {
+		(void) i2c_algo_dp_aux_transaction(adapter, mode, 0, NULL);
+		algo_data->running = false;
+	}
+}
+
+/*
+ * Write a single byte to the current I2C address, the
+ * the I2C link must be running or this returns -EIO
+ */
+static int
+i2c_algo_dp_aux_put_byte(struct i2c_adapter *adapter, u8 byte)
+{
+	struct i2c_algo_dp_aux_data *algo_data = adapter->algo_data;
+	int ret;
+
+	if (!algo_data->running)
+		return -EIO;
+
+	ret = i2c_algo_dp_aux_transaction(adapter, MODE_I2C_WRITE, byte, NULL);
+	return ret;
+}
+
+/*
+ * Read a single byte from the current I2C address, the
+ * I2C link must be running or this returns -EIO
+ */
+static int
+i2c_algo_dp_aux_get_byte(struct i2c_adapter *adapter, u8 *byte_ret)
[...2893 lines suppressed...]
+i2c_dp_aux_prepare_bus(struct i2c_adapter *adapter)
+{
+	adapter->algo = &i2c_dp_aux_algo;
+	adapter->retries = 3;
+	i2c_dp_aux_reset_bus(adapter);
+	return 0;
+}
+
+int
+i2c_dp_aux_add_bus(struct i2c_adapter *adapter)
+{
+	int error;
+	
+	error = i2c_dp_aux_prepare_bus(adapter);
+	if (error)
+		return error;
+	error = i2c_add_adapter(adapter);
+	return error;
+}
+EXPORT_SYMBOL(i2c_dp_aux_add_bus);
diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h
new file mode 100644
index 0000000..dc56b2c
--- /dev/null
+++ b/include/drm/drm_dp_helper.h
@@ -0,0 +1,174 @@
+/*
+ * Copyright © 2008 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting documentation, and
+ * that the name of the copyright holders not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission.  The copyright holders make no representations
+ * about the suitability of this software for any purpose.  It is provided "as
+ * is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+#ifndef _DRM_DP_HELPER_H_
+#define _DRM_DP_HELPER_H_
+/* From the VESA DisplayPort spec */
+
+#define AUX_NATIVE_WRITE	0x8
+#define AUX_NATIVE_READ		0x9
+#define AUX_I2C_WRITE		0x0
+#define AUX_I2C_READ		0x1
+#define AUX_I2C_STATUS		0x2
+#define AUX_I2C_MOT		0x4
+
+#define AUX_NATIVE_REPLY_ACK	(0x0 << 4)
+#define AUX_NATIVE_REPLY_NACK	(0x1 << 4)
+#define AUX_NATIVE_REPLY_DEFER	(0x2 << 4)
+#define AUX_NATIVE_REPLY_MASK	(0x3 << 4)
+
+#define AUX_I2C_REPLY_ACK	(0x0 << 6)
+#define AUX_I2C_REPLY_NACK	(0x1 << 6)
+#define AUX_I2C_REPLY_DEFER	(0x2 << 6)
+#define AUX_I2C_REPLY_MASK	(0x3 << 6)
+
+/* AUX CH addresses */
+/* DPCD */
+#define DP_DPCD_REV                         0x000
+
+#define DP_MAX_LINK_RATE                    0x001
+
+#define DP_MAX_LANE_COUNT                   0x002
+# define DP_MAX_LANE_COUNT_MASK		    0x1f
+# define DP_ENHANCED_FRAME_CAP		    (1 << 7)
+
+#define DP_MAX_DOWNSPREAD                   0x003
+# define DP_NO_AUX_HANDSHAKE_LINK_TRAINING  (1 << 6)
+
+#define DP_NORP                             0x004
+
+#define DP_DOWNSTREAMPORT_PRESENT           0x005
+# define DP_DWN_STRM_PORT_PRESENT           (1 << 0)
+# define DP_DWN_STRM_PORT_TYPE_MASK         0x06
+/* 00b = DisplayPort */
+/* 01b = Analog */
+/* 10b = TMDS or HDMI */
+/* 11b = Other */
+# define DP_FORMAT_CONVERSION               (1 << 3)
+
+#define DP_MAIN_LINK_CHANNEL_CODING         0x006
+
+/* link configuration */
+#define	DP_LINK_BW_SET		            0x100
+# define DP_LINK_BW_1_62		    0x06
+# define DP_LINK_BW_2_7			    0x0a
+
+#define DP_LANE_COUNT_SET	            0x101
+# define DP_LANE_COUNT_MASK		    0x0f
+# define DP_LANE_COUNT_ENHANCED_FRAME_EN    (1 << 7)
+
+#define DP_TRAINING_PATTERN_SET	            0x102
+# define DP_TRAINING_PATTERN_DISABLE	    0
+# define DP_TRAINING_PATTERN_1		    1
+# define DP_TRAINING_PATTERN_2		    2
+# define DP_TRAINING_PATTERN_MASK	    0x3
+
+# define DP_LINK_QUAL_PATTERN_DISABLE	    (0 << 2)
+# define DP_LINK_QUAL_PATTERN_D10_2	    (1 << 2)
+# define DP_LINK_QUAL_PATTERN_ERROR_RATE    (2 << 2)
+# define DP_LINK_QUAL_PATTERN_PRBS7	    (3 << 2)
+# define DP_LINK_QUAL_PATTERN_MASK	    (3 << 2)
+
+# define DP_RECOVERED_CLOCK_OUT_EN	    (1 << 4)
+# define DP_LINK_SCRAMBLING_DISABLE	    (1 << 5)
+
+# define DP_SYMBOL_ERROR_COUNT_BOTH	    (0 << 6)
+# define DP_SYMBOL_ERROR_COUNT_DISPARITY    (1 << 6)
+# define DP_SYMBOL_ERROR_COUNT_SYMBOL	    (2 << 6)
+# define DP_SYMBOL_ERROR_COUNT_MASK	    (3 << 6)
+
+#define DP_TRAINING_LANE0_SET		    0x103
+#define DP_TRAINING_LANE1_SET		    0x104
+#define DP_TRAINING_LANE2_SET		    0x105
+#define DP_TRAINING_LANE3_SET		    0x106
+
+# define DP_TRAIN_VOLTAGE_SWING_MASK	    0x3
+# define DP_TRAIN_VOLTAGE_SWING_SHIFT	    0
+# define DP_TRAIN_MAX_SWING_REACHED	    (1 << 2)
+# define DP_TRAIN_VOLTAGE_SWING_400	    (0 << 0)
+# define DP_TRAIN_VOLTAGE_SWING_600	    (1 << 0)
+# define DP_TRAIN_VOLTAGE_SWING_800	    (2 << 0)
+# define DP_TRAIN_VOLTAGE_SWING_1200	    (3 << 0)
+
+# define DP_TRAIN_PRE_EMPHASIS_MASK	    (3 << 3)
+# define DP_TRAIN_PRE_EMPHASIS_0	    (0 << 3)
+# define DP_TRAIN_PRE_EMPHASIS_3_5	    (1 << 3)
+# define DP_TRAIN_PRE_EMPHASIS_6	    (2 << 3)
+# define DP_TRAIN_PRE_EMPHASIS_9_5	    (3 << 3)
+
+# define DP_TRAIN_PRE_EMPHASIS_SHIFT	    3
+# define DP_TRAIN_MAX_PRE_EMPHASIS_REACHED  (1 << 5)
+
+#define DP_DOWNSPREAD_CTRL		    0x107
+# define DP_SPREAD_AMP_0_5		    (1 << 4)
+
+#define DP_MAIN_LINK_CHANNEL_CODING_SET	    0x108
+# define DP_SET_ANSI_8B10B		    (1 << 0)
+
+#define DP_LANE0_1_STATUS		    0x202
+#define DP_LANE2_3_STATUS		    0x203
+# define DP_LANE_CR_DONE		    (1 << 0)
+# define DP_LANE_CHANNEL_EQ_DONE	    (1 << 1)
+# define DP_LANE_SYMBOL_LOCKED		    (1 << 2)
+
+#define DP_CHANNEL_EQ_BITS (DP_LANE_CR_DONE |		\
+			    DP_LANE_CHANNEL_EQ_DONE |	\
+			    DP_LANE_SYMBOL_LOCKED)
+
+#define DP_LANE_ALIGN_STATUS_UPDATED	    0x204
+
+#define DP_INTERLANE_ALIGN_DONE		    (1 << 0)
+#define DP_DOWNSTREAM_PORT_STATUS_CHANGED   (1 << 6)
+#define DP_LINK_STATUS_UPDATED		    (1 << 7)
+
+#define DP_SINK_STATUS			    0x205
+
+#define DP_RECEIVE_PORT_0_STATUS	    (1 << 0)
+#define DP_RECEIVE_PORT_1_STATUS	    (1 << 1)
+
+#define DP_ADJUST_REQUEST_LANE0_1	    0x206
+#define DP_ADJUST_REQUEST_LANE2_3	    0x207
+# define DP_ADJUST_VOLTAGE_SWING_LANE0_MASK  0x03
+# define DP_ADJUST_VOLTAGE_SWING_LANE0_SHIFT 0
+# define DP_ADJUST_PRE_EMPHASIS_LANE0_MASK   0x0c
+# define DP_ADJUST_PRE_EMPHASIS_LANE0_SHIFT  2
+# define DP_ADJUST_VOLTAGE_SWING_LANE1_MASK  0x30
+# define DP_ADJUST_VOLTAGE_SWING_LANE1_SHIFT 4
+# define DP_ADJUST_PRE_EMPHASIS_LANE1_MASK   0xc0
+# define DP_ADJUST_PRE_EMPHASIS_LANE1_SHIFT  6
+
+#define DP_SET_POWER                        0x600
+# define DP_SET_POWER_D0                    0x1
+# define DP_SET_POWER_D3                    0x2
+
+struct i2c_algo_dp_aux_data {
+	bool running;
+	u16 address;
+	int (*aux_ch) (struct i2c_adapter *adapter,
+		       uint8_t *send, int send_bytes,
+		       uint8_t *recv, int recv_bytes);
+};
+
+int
+i2c_dp_aux_add_bus(struct i2c_adapter *adapter);
+
+#endif /* DRM_DP_HELPER */

drm-radeon-fix-crtc-vbl-update-for-r600.patch:
 atombios_crtc.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

--- NEW FILE drm-radeon-fix-crtc-vbl-update-for-r600.patch ---
--- linux-2.6.32.noarch/drivers/gpu/drm/radeon/atombios_crtc.c
+++ linux-2.6.32.noarch/drivers/gpu/drm/radeon/atombios_crtc.c
@@ -249,13 +249,15 @@ void atombios_crtc_dpms(struct drm_crtc 
 		if (ASIC_IS_DCE3(rdev))
 			atombios_enable_crtc_memreq(crtc, 1);
 		atombios_blank_crtc(crtc, 0);
-		drm_vblank_post_modeset(dev, radeon_crtc->crtc_id);
+		if (rdev->family < CHIP_R600)
+			drm_vblank_post_modeset(dev, radeon_crtc->crtc_id);
 		radeon_crtc_load_lut(crtc);
 		break;
 	case DRM_MODE_DPMS_STANDBY:
 	case DRM_MODE_DPMS_SUSPEND:
 	case DRM_MODE_DPMS_OFF:
-		drm_vblank_pre_modeset(dev, radeon_crtc->crtc_id);
+		if (rdev->family < CHIP_R600)
+			drm_vblank_pre_modeset(dev, radeon_crtc->crtc_id);
 		atombios_blank_crtc(crtc, 1);
 		if (ASIC_IS_DCE3(rdev))
 			atombios_enable_crtc_memreq(crtc, 0);

drm-radeon-fixes.patch:
 atombios_crtc.c          |    7 
 r100.c                   |   27 ++-
 r300.c                   |   12 -
 r420.c                   |   14 -
 r520.c                   |    3 
 r600.c                   |   10 +
 r600d.h                  |    1 
 radeon.h                 |    4 
 radeon_asic.h            |   12 +
 radeon_atombios.c        |   40 +++-
 radeon_clocks.c          |    8 
 radeon_combios.c         |  392 ++++++++++++++++++++++++++++++++++++++++-------
 radeon_connectors.c      |   59 +++++--
 radeon_device.c          |   20 ++
 radeon_display.c         |   29 ++-
 radeon_encoders.c        |   91 +++++++---
 radeon_fb.c              |    9 -
 radeon_gem.c             |   10 -
 radeon_i2c.c             |  109 ++++++++++---
 radeon_legacy_crtc.c     |   37 +++-
 radeon_legacy_encoders.c |  125 +++++++-------
 radeon_mode.h            |   76 ++++++---
 radeon_object.c          |    1 
 radeon_reg.h             |   40 ++--
 rs400.c                  |    8 
 rs600.c                  |    7 
 rs690.c                  |    7 
 rv515.c                  |    6 
 rv770.c                  |    6 
 29 files changed, 886 insertions(+), 284 deletions(-)

--- NEW FILE drm-radeon-fixes.patch ---
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
index c15287a..f5987af 100644
--- a/drivers/gpu/drm/radeon/atombios_crtc.c
+++ b/drivers/gpu/drm/radeon/atombios_crtc.c
@@ -578,8 +578,11 @@ int atombios_crtc_set_base(struct drm_crtc *crtc, int x, int y,
 	uint64_t fb_location;
 	uint32_t fb_format, fb_pitch_pixels, tiling_flags;
 
-	if (!crtc->fb)
-		return -EINVAL;
+	/* no fb bound */
+	if (!crtc->fb) {
+		DRM_DEBUG("No FB bound\n");
+		return 0;
+	}
 
 	radeon_fb = to_radeon_framebuffer(crtc->fb);
 
diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
index c9e93ea..0862fa4 100644
--- a/drivers/gpu/drm/radeon/r100.c
+++ b/drivers/gpu/drm/radeon/r100.c
@@ -94,6 +94,15 @@ int r100_pci_gart_init(struct radeon_device *rdev)
 	return radeon_gart_table_ram_alloc(rdev);
 }
 
+/* required on r1xx, r2xx, r300, r(v)350, r420/r481, rs400/rs480 */
+void r100_enable_bm(struct radeon_device *rdev)
+{
+	uint32_t tmp;
+	/* Enable bus mastering */
+	tmp = RREG32(RADEON_BUS_CNTL) & ~RADEON_BUS_MASTER_DIS;
+	WREG32(RADEON_BUS_CNTL, tmp);
+}
+
 int r100_pci_gart_enable(struct radeon_device *rdev)
 {
 	uint32_t tmp;
@@ -105,9 +114,6 @@ int r100_pci_gart_enable(struct radeon_device *rdev)
 	WREG32(RADEON_AIC_LO_ADDR, rdev->mc.gtt_location);
 	tmp = rdev->mc.gtt_location + rdev->mc.gtt_size - 1;
 	WREG32(RADEON_AIC_HI_ADDR, tmp);
-	/* Enable bus mastering */
-	tmp = RREG32(RADEON_BUS_CNTL) & ~RADEON_BUS_MASTER_DIS;
-	WREG32(RADEON_BUS_CNTL, tmp);
 	/* set PCI GART page-table base address */
 	WREG32(RADEON_AIC_PT_BASE, rdev->gart.table_addr);
 	tmp = RREG32(RADEON_AIC_CNTL) | RADEON_PCIGART_TRANSLATE_EN;
@@ -1583,6 +1589,14 @@ void r100_gpu_init(struct radeon_device *rdev)
 	r100_hdp_reset(rdev);
 }
 
+void r100_hdp_flush(struct radeon_device *rdev)
+{
+	u32 tmp;
+	tmp = RREG32(RADEON_HOST_PATH_CNTL);
+	tmp |= RADEON_HDP_READ_BUFFER_INVALIDATE;
+	WREG32(RADEON_HOST_PATH_CNTL, tmp);
+}
+
 void r100_hdp_reset(struct radeon_device *rdev)
 {
 	uint32_t tmp;
@@ -3108,6 +3122,7 @@ static int r100_startup(struct radeon_device *rdev)
 	r100_gpu_init(rdev);
 	/* Initialize GART (initialize after TTM so we can allocate
 	 * memory through TTM but finalize after TTM) */
+	r100_enable_bm(rdev);
 	if (rdev->flags & RADEON_IS_PCI) {
 		r = r100_pci_gart_enable(rdev);
 		if (r)
@@ -3242,10 +3257,8 @@ int r100_init(struct radeon_device *rdev)
 			RREG32(R_0007C0_CP_STAT));
 	}
 	/* check if cards are posted or not */
-	if (!radeon_card_posted(rdev) && rdev->bios) {
-		DRM_INFO("GPU not posted. posting now...\n");
-		radeon_combios_asic_init(rdev->ddev);
-	}
+	if (radeon_boot_test_post_card(rdev) == false)
+		return -EINVAL;
 	/* Set asic errata */
 	r100_errata(rdev);
 	/* Initialize clocks */
diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c
index 2f43ee8..430fc2a 100644
--- a/drivers/gpu/drm/radeon/r300.c
+++ b/drivers/gpu/drm/radeon/r300.c
@@ -1193,6 +1193,12 @@ static int r300_startup(struct radeon_device *rdev)
 		if (r)
 			return r;
 	}
+
+	if (rdev->family == CHIP_R300 ||
+	    rdev->family == CHIP_R350 ||
+	    rdev->family == CHIP_RV350)
+		r100_enable_bm(rdev);
+
 	if (rdev->flags & RADEON_IS_PCI) {
 		r = r100_pci_gart_enable(rdev);
 		if (r)
@@ -1303,10 +1309,8 @@ int r300_init(struct radeon_device *rdev)
 			RREG32(R_0007C0_CP_STAT));
 	}
 	/* check if cards are posted or not */
-	if (!radeon_card_posted(rdev) && rdev->bios) {
-		DRM_INFO("GPU not posted. posting now...\n");
-		radeon_combios_asic_init(rdev->ddev);
-	}
+	if (radeon_boot_test_post_card(rdev) == false)
+		return -EINVAL;
 	/* Set asic errata */
 	r300_errata(rdev);
 	/* Initialize clocks */
diff --git a/drivers/gpu/drm/radeon/r420.c b/drivers/gpu/drm/radeon/r420.c
index 1cefdbc..e7c3477 100644
--- a/drivers/gpu/drm/radeon/r420.c
+++ b/drivers/gpu/drm/radeon/r420.c
@@ -301,14 +301,9 @@ int r420_init(struct radeon_device *rdev)
 			RREG32(R_0007C0_CP_STAT));
 	}
 	/* check if cards are posted or not */
-	if (!radeon_card_posted(rdev) && rdev->bios) {
-		DRM_INFO("GPU not posted. posting now...\n");
-		if (rdev->is_atom_bios) {
-			atom_asic_init(rdev->mode_info.atom_context);
-		} else {
-			radeon_combios_asic_init(rdev->ddev);
-		}
-	}
+	if (radeon_boot_test_post_card(rdev) == false)
+		return -EINVAL;
+
 	/* Initialize clocks */
 	radeon_get_clock_info(rdev->ddev);
 	/* Initialize power management */
@@ -335,6 +330,9 @@ int r420_init(struct radeon_device *rdev)
 	if (r) {
 		return r;
 	}
+	if (rdev->family == CHIP_R420)
+		r100_enable_bm(rdev);
+
 	if (rdev->flags & RADEON_IS_PCIE) {
 		r = rv370_pcie_gart_init(rdev);
 		if (r)
diff --git a/drivers/gpu/drm/radeon/r520.c b/drivers/gpu/drm/radeon/r520.c
index f743518..26c3779 100644
--- a/drivers/gpu/drm/radeon/r520.c
+++ b/drivers/gpu/drm/radeon/r520.c
@@ -254,6 +254,9 @@ int r520_init(struct radeon_device *rdev)
 			RREG32(R_0007C0_CP_STAT));
 	}
 	/* check if cards are posted or not */
+	if (radeon_boot_test_post_card(rdev) == false)
+		return -EINVAL;
+
 	if (!radeon_card_posted(rdev) && rdev->bios) {
 		DRM_INFO("GPU not posted. posting now...\n");
 		atom_asic_init(rdev->mode_info.atom_context);
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index 278f646..3dbd93e 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -1101,6 +1101,10 @@ void r600_pciep_wreg(struct radeon_device *rdev, u32 reg, u32 v)
 	(void)RREG32(PCIE_PORT_DATA);
 }
 
+void r600_hdp_flush(struct radeon_device *rdev)
+{
+	WREG32(R_005480_HDP_MEM_COHERENCY_FLUSH_CNTL, 0x1);
+}
 
 /*
  * CP & Ring
@@ -1627,7 +1631,11 @@ int r600_init(struct radeon_device *rdev)
 	if (r)
 		return r;
 	/* Post card if necessary */
-	if (!r600_card_posted(rdev) && rdev->bios) {
+	if (!r600_card_posted(rdev)) {
+		if (!rdev->bios) {
+			dev_err(rdev->dev, "Card not posted and no BIOS - ignoring\n");
+			return -EINVAL;
+		}
 		DRM_INFO("GPU not posted. posting now...\n");
 		atom_asic_init(rdev->mode_info.atom_context);
 	}
diff --git a/drivers/gpu/drm/radeon/r600d.h b/drivers/gpu/drm/radeon/r600d.h
index 27ab428..b7f4ce2 100644
--- a/drivers/gpu/drm/radeon/r600d.h
+++ b/drivers/gpu/drm/radeon/r600d.h
@@ -674,4 +674,5 @@
 #define		S_000E60_SOFT_RESET_TSC(x)		(((x) & 1) << 16)
 #define		S_000E60_SOFT_RESET_VMC(x)		(((x) & 1) << 17)
 
+#define R_005480_HDP_MEM_COHERENCY_FLUSH_CNTL		0x5480
 #endif
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
[...1785 lines suppressed...]
 extern void radeon_combios_output_lock(struct drm_encoder *encoder, bool lock);
 extern void radeon_combios_initialize_bios_scratch_regs(struct drm_device *dev);
 extern void radeon_atom_output_lock(struct drm_encoder *encoder, bool lock);
@@ -426,16 +469,13 @@ void radeon_atombios_init_crtc(struct drm_device *dev,
 			       struct radeon_crtc *radeon_crtc);
 void radeon_legacy_init_crtc(struct drm_device *dev,
 			     struct radeon_crtc *radeon_crtc);
-void radeon_i2c_do_lock(struct radeon_connector *radeon_connector, int lock_state);
+extern void radeon_i2c_do_lock(struct radeon_i2c_chan *i2c, int lock_state);
 
 void radeon_get_clock_info(struct drm_device *dev);
 
 extern bool radeon_get_atom_connector_info_from_object_table(struct drm_device *dev);
 extern bool radeon_get_atom_connector_info_from_supported_devices_table(struct drm_device *dev);
 
-void radeon_rmx_mode_fixup(struct drm_encoder *encoder,
-			   struct drm_display_mode *mode,
-			   struct drm_display_mode *adjusted_mode);
 void radeon_enc_destroy(struct drm_encoder *encoder);
 void radeon_copy_fb(struct drm_device *dev, struct drm_gem_object *dst_obj);
 void radeon_combios_asic_init(struct drm_device *dev);
diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
index 1f056da..98835f5 100644
--- a/drivers/gpu/drm/radeon/radeon_object.c
+++ b/drivers/gpu/drm/radeon/radeon_object.c
@@ -315,6 +315,7 @@ int radeon_object_wait(struct radeon_object *robj)
 	}
 	spin_unlock(&robj->tobj.lock);
 	radeon_object_unreserve(robj);
+	radeon_hdp_flush(robj->rdev);
 	return r;
 }
 
diff --git a/drivers/gpu/drm/radeon/radeon_reg.h b/drivers/gpu/drm/radeon/radeon_reg.h
index 29ab759..34ba06d 100644
--- a/drivers/gpu/drm/radeon/radeon_reg.h
+++ b/drivers/gpu/drm/radeon/radeon_reg.h
@@ -1051,20 +1051,25 @@
 
        /* Multimedia I2C bus */
 #define RADEON_I2C_CNTL_0		    0x0090
-#define RADEON_I2C_DONE (1<<0)
-#define RADEON_I2C_NACK (1<<1)
-#define RADEON_I2C_HALT (1<<2)
-#define RADEON_I2C_SOFT_RST (1<<5)
-#define RADEON_I2C_DRIVE_EN (1<<6)
-#define RADEON_I2C_DRIVE_SEL (1<<7)
-#define RADEON_I2C_START (1<<8)
-#define RADEON_I2C_STOP (1<<9)
-#define RADEON_I2C_RECEIVE (1<<10)
-#define RADEON_I2C_ABORT (1<<11)
-#define RADEON_I2C_GO (1<<12)
+#define RADEON_I2C_DONE                     (1 << 0)
+#define RADEON_I2C_NACK                     (1 << 1)
+#define RADEON_I2C_HALT                     (1 << 2)
+#define RADEON_I2C_SOFT_RST                 (1 << 5)
+#define RADEON_I2C_DRIVE_EN                 (1 << 6)
+#define RADEON_I2C_DRIVE_SEL                (1 << 7)
+#define RADEON_I2C_START                    (1 << 8)
+#define RADEON_I2C_STOP                     (1 << 9)
+#define RADEON_I2C_RECEIVE                  (1 << 10)
+#define RADEON_I2C_ABORT                    (1 << 11)
+#define RADEON_I2C_GO                       (1 << 12)
+#define RADEON_I2C_PRESCALE_SHIFT           16
 #define RADEON_I2C_CNTL_1                   0x0094
-#define RADEON_I2C_SEL         (1<<16)
-#define RADEON_I2C_EN          (1<<17)
+#define RADEON_I2C_DATA_COUNT_SHIFT         0
+#define RADEON_I2C_ADDR_COUNT_SHIFT         4
+#define RADEON_I2C_INTRA_BYTE_DELAY_SHIFT   8
+#define RADEON_I2C_SEL                      (1 << 16)
+#define RADEON_I2C_EN                       (1 << 17)
+#define RADEON_I2C_TIME_LIMIT_SHIFT         24
 #define RADEON_I2C_DATA			    0x0098
 
 #define RADEON_DVI_I2C_CNTL_0		    0x02e0
@@ -1072,7 +1077,7 @@
 #       define R200_SEL_DDC1                0 /* 0x60 - VGA_DDC */
 #       define R200_SEL_DDC2                1 /* 0x64 - DVI_DDC */
 #       define R200_SEL_DDC3                2 /* 0x68 - MONID_DDC */
-#define RADEON_DVI_I2C_CNTL_1               0x02e4 /* ? */
+#define RADEON_DVI_I2C_CNTL_1               0x02e4
 #define RADEON_DVI_I2C_DATA		    0x02e8
 
 #define RADEON_INTERRUPT_LINE               0x0f3c /* PCI */
@@ -1143,14 +1148,15 @@
 #       define RADEON_IO_MCLK_MAX_DYN_STOP_LAT (1 << 13)
 #       define RADEON_MC_MCLK_DYN_ENABLE    (1 << 14)
 #       define RADEON_IO_MCLK_DYN_ENABLE    (1 << 15)
-#define RADEON_LCD_GPIO_MASK                0x01a0
+#define RADEON_GPIOPAD_MASK                 0x0198
+#define RADEON_GPIOPAD_A		    0x019c
 #define RADEON_GPIOPAD_EN                   0x01a0
+#define RADEON_GPIOPAD_Y                    0x01a4
+#define RADEON_LCD_GPIO_MASK                0x01a0
 #define RADEON_LCD_GPIO_Y_REG               0x01a4
 #define RADEON_MDGPIO_A_REG                 0x01ac
 #define RADEON_MDGPIO_EN_REG                0x01b0
 #define RADEON_MDGPIO_MASK                  0x0198
-#define RADEON_GPIOPAD_MASK                 0x0198
-#define RADEON_GPIOPAD_A		    0x019c
 #define RADEON_MDGPIO_Y_REG                 0x01b4
 #define RADEON_MEM_ADDR_CONFIG              0x0148
 #define RADEON_MEM_BASE                     0x0f10 /* PCI */
diff --git a/drivers/gpu/drm/radeon/rs400.c b/drivers/gpu/drm/radeon/rs400.c
index ca03716..2e5b945 100644
--- a/drivers/gpu/drm/radeon/rs400.c
+++ b/drivers/gpu/drm/radeon/rs400.c
@@ -387,6 +387,7 @@ static int rs400_startup(struct radeon_device *rdev)
 	r300_clock_startup(rdev);
 	/* Initialize GPU configuration (# pipes, ...) */
 	rs400_gpu_init(rdev);
+	r100_enable_bm(rdev);
 	/* Initialize GART (initialize after TTM so we can allocate
 	 * memory through TTM but finalize after TTM) */
 	r = rs400_gart_enable(rdev);
@@ -490,10 +491,9 @@ int rs400_init(struct radeon_device *rdev)
 			RREG32(R_0007C0_CP_STAT));
 	}
 	/* check if cards are posted or not */
-	if (!radeon_card_posted(rdev) && rdev->bios) {
-		DRM_INFO("GPU not posted. posting now...\n");
-		radeon_combios_asic_init(rdev->ddev);
-	}
+	if (radeon_boot_test_post_card(rdev) == false)
+		return -EINVAL;
+
 	/* Initialize clocks */
 	radeon_get_clock_info(rdev->ddev);
 	/* Get vram informations */
diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c
index 5f117cd..d2dac45 100644
--- a/drivers/gpu/drm/radeon/rs600.c
+++ b/drivers/gpu/drm/radeon/rs600.c
@@ -482,10 +482,9 @@ int rs600_init(struct radeon_device *rdev)
 			RREG32(R_0007C0_CP_STAT));
 	}
 	/* check if cards are posted or not */
-	if (!radeon_card_posted(rdev) && rdev->bios) {
-		DRM_INFO("GPU not posted. posting now...\n");
-		atom_asic_init(rdev->mode_info.atom_context);
-	}
+	if (radeon_boot_test_post_card(rdev) == false)
+		return -EINVAL;
+
 	/* Initialize clocks */
 	radeon_get_clock_info(rdev->ddev);
 	/* Initialize power management */
diff --git a/drivers/gpu/drm/radeon/rs690.c b/drivers/gpu/drm/radeon/rs690.c
index 2754717..7ffd6db 100644
--- a/drivers/gpu/drm/radeon/rs690.c
+++ b/drivers/gpu/drm/radeon/rs690.c
@@ -700,10 +700,9 @@ int rs690_init(struct radeon_device *rdev)
 			RREG32(R_0007C0_CP_STAT));
 	}
 	/* check if cards are posted or not */
-	if (!radeon_card_posted(rdev) && rdev->bios) {
-		DRM_INFO("GPU not posted. posting now...\n");
-		atom_asic_init(rdev->mode_info.atom_context);
-	}
+	if (radeon_boot_test_post_card(rdev) == false)
+		return -EINVAL;
+
 	/* Initialize clocks */
 	radeon_get_clock_info(rdev->ddev);
 	/* Initialize power management */
diff --git a/drivers/gpu/drm/radeon/rv515.c b/drivers/gpu/drm/radeon/rv515.c
index ba68c9f..93de4a9 100644
--- a/drivers/gpu/drm/radeon/rv515.c
+++ b/drivers/gpu/drm/radeon/rv515.c
@@ -580,10 +580,8 @@ int rv515_init(struct radeon_device *rdev)
 			RREG32(R_0007C0_CP_STAT));
 	}
 	/* check if cards are posted or not */
-	if (!radeon_card_posted(rdev) && rdev->bios) {
-		DRM_INFO("GPU not posted. posting now...\n");
-		atom_asic_init(rdev->mode_info.atom_context);
-	}
+	if (radeon_boot_test_post_card(rdev) == false)
+		return -EINVAL;
 	/* Initialize clocks */
 	radeon_get_clock_info(rdev->ddev);
 	/* Initialize power management */
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
index b0efd0d..f546284 100644
--- a/drivers/gpu/drm/radeon/rv770.c
+++ b/drivers/gpu/drm/radeon/rv770.c
@@ -975,7 +975,11 @@ int rv770_init(struct radeon_device *rdev)
 	if (r)
 		return r;
 	/* Post card if necessary */
-	if (!r600_card_posted(rdev) && rdev->bios) {
+	if (!r600_card_posted(rdev)) {
+		if (!rdev->bios) {
+			dev_err(rdev->dev, "Card not posted and no BIOS - ignoring\n");
+			return -EINVAL;
+		}
 		DRM_INFO("GPU not posted. posting now...\n");
 		atom_asic_init(rdev->mode_info.atom_context);
 	}

ext4-fix-insufficient-checks-in-EXT4_IOC_MOVE_EXT.patch:
 ioctl.c       |   28 ++++++++++++++++++----------
 move_extent.c |    8 +++++++-
 2 files changed, 25 insertions(+), 11 deletions(-)

--- NEW FILE ext4-fix-insufficient-checks-in-EXT4_IOC_MOVE_EXT.patch ---
>From 910123ba363623f15ffb5d05dd87bdf06d08c609 Mon Sep 17 00:00:00 2001
From: Akira Fujita <a-fujita at rs.jp.nec.com>
Date: Sun, 6 Dec 2009 23:38:31 -0500
Subject: [PATCH] ext4: Fix insufficient checks in EXT4_IOC_MOVE_EXT

This patch fixes three problems in the handling of the
EXT4_IOC_MOVE_EXT ioctl:

1. In current EXT4_IOC_MOVE_EXT, there are read access mode checks for
original and donor files, but they allow the illegal write access to
donor file, since donor file is overwritten by original file data.  To
fix this problem, change access mode checks of original (r->r/w) and
donor (r->w) files.

2.  Disallow the use of donor files that have a setuid or setgid bits.

3.  Call mnt_want_write() and mnt_drop_write() before and after
ext4_move_extents() calling to get write access to a mount.

Signed-off-by: Akira Fujita <a-fujita at rs.jp.nec.com>
Signed-off-by: "Theodore Ts'o" <tytso at mit.edu>
---

 fs/ext4/ioctl.c       |   28 ++++++++++++++++++----------
 fs/ext4/move_extent.c |    7 +++++++
 2 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c
index c1cdf61..6cc8a09 100644
--- a/fs/ext4/ioctl.c
+++ b/fs/ext4/ioctl.c
@@ -221,31 +221,39 @@ setversion_out:
 		struct file *donor_filp;
 		int err;
 
+		if (!(filp->f_mode & FMODE_READ) ||
+		    !(filp->f_mode & FMODE_WRITE))
+			return -EBADF;
+
 		if (copy_from_user(&me,
 			(struct move_extent __user *)arg, sizeof(me)))
 			return -EFAULT;
+		me.moved_len = 0;
 
 		donor_filp = fget(me.donor_fd);
 		if (!donor_filp)
 			return -EBADF;
 
-		if (!capable(CAP_DAC_OVERRIDE)) {
-			if ((current->real_cred->fsuid != inode->i_uid) ||
-				!(inode->i_mode & S_IRUSR) ||
-				!(donor_filp->f_dentry->d_inode->i_mode &
-				S_IRUSR)) {
-				fput(donor_filp);
-				return -EACCES;
-			}
+		if (!(donor_filp->f_mode & FMODE_WRITE)) {
+			err = -EBADF;
+			goto mext_out;
 		}
 
+		err = mnt_want_write(filp->f_path.mnt);
+		if (err)
+			goto mext_out;
+
 		err = ext4_move_extents(filp, donor_filp, me.orig_start,
 					me.donor_start, me.len, &me.moved_len);
-		fput(donor_filp);
+		mnt_drop_write(filp->f_path.mnt);
+		if (me.moved_len > 0)
+			file_remove_suid(donor_filp);
 
 		if (copy_to_user((struct move_extent *)arg, &me, sizeof(me)))
-			return -EFAULT;
+			err = -EFAULT;
 
+mext_out:
+		fput(donor_filp);
 		return err;
 	}
 
diff --git a/fs/ext4/move_extent.c b/fs/ext4/move_extent.c
index 25b6b14..0100ff9 100644
--- a/fs/ext4/move_extent.c
+++ b/fs/ext4/move_extent.c
@@ -985,6 +985,13 @@ mext_check_arguments(struct inode *orig_inode,
 		return -EINVAL;
 	}
 
+	if (donor_inode->i_mode & (S_ISUID|S_ISGID)) {
+		ext4_debug("ext4 move extent: suid or sgid is set"
+			   " to donor file [ino:orig %lu, donor %lu]\n",
+			   orig_inode->i_ino, donor_inode->i_ino);
+		return -EINVAL;
+	}
+
 	/* Ext4 move extent does not support swapfile */
 	if (IS_SWAPFILE(orig_inode) || IS_SWAPFILE(donor_inode)) {
 		ext4_debug("ext4 move extent: The argument files should "
-- 
1.6.5.2


fix-9p-fscache.patch:
 cache.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- NEW FILE fix-9p-fscache.patch ---
Subject: [PATCH] 9p: fscache: fix build breakage introduced by 201a15428bd54f83eccec8b7c64a04b8f9431204

While building 2.6.32-rc8-git2 for Fedora I noticed the following thinko in
201a15428bd54f83eccec8b7c64a04b8f9431204. Patch below looks to be correct?

Signed-off-by: Kyle McMartin <kyle at redhat.com>

---
diff --git a/fs/9p/cache.c b/fs/9p/cache.c
index bcc5357..e777961 100644
--- a/fs/9p/cache.c
+++ b/fs/9p/cache.c
@@ -343,7 +343,7 @@ int __v9fs_fscache_release_page(struct page *page, gfp_t gfp)
 
 	BUG_ON(!vcookie->fscache);
 
-	return fscache_maybe_release_page(vnode->cache, page, gfp);
+	return fscache_maybe_release_page(vcookie->fscache, page, gfp);
 }
 
 void __v9fs_fscache_invalidate_page(struct page *page)

linux-2.6-autoload-wmi.patch:
 wmi.c |  177 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 173 insertions(+), 4 deletions(-)

--- NEW FILE linux-2.6-autoload-wmi.patch ---
WMI provides interface-specific GUIDs that are exported from modules as
modalises, but the core currently generates no events to trigger module
loading. This patch adds support for registering devices for each WMI GUID
and generating the appropriate uevent.

Based heavily on a patch by Carlos Corbacho (<carlos at strangeworlds.co.uk>).

Signed-off-by: Matthew Garrett <mjg at redhat.com>
---
 drivers/platform/x86/wmi.c |  175 +++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 173 insertions(+), 2 deletions(-)

diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
index 177f8d7..e425a86 100644
--- a/drivers/platform/x86/wmi.c
+++ b/drivers/platform/x86/wmi.c
@@ -30,6 +30,7 @@
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/types.h>
+#include <linux/device.h>
 #include <linux/list.h>
 #include <linux/acpi.h>
 #include <acpi/acpi_bus.h>
@@ -65,6 +66,7 @@ struct wmi_block {
 	acpi_handle handle;
 	wmi_notify_handler handler;
 	void *handler_data;
+	struct device *dev;
 };
 
 static struct wmi_block wmi_blocks;
@@ -195,6 +197,34 @@ static bool wmi_parse_guid(const u8 *src, u8 *dest)
 	return true;
 }
 
+/*
+ * Convert a raw GUID to the ACII string representation
+ */
+static int wmi_gtoa(const char *in, char *out)
+{
+	int i;
+
+	for (i = 3; i >= 0; i--)
+		out += sprintf(out, "%02X", in[i] & 0xFF);
+
+	out += sprintf(out, "-");
+	out += sprintf(out, "%02X", in[5] & 0xFF);
+	out += sprintf(out, "%02X", in[4] & 0xFF);
+	out += sprintf(out, "-");
+	out += sprintf(out, "%02X", in[7] & 0xFF);
+	out += sprintf(out, "%02X", in[6] & 0xFF);
+	out += sprintf(out, "-");
+	out += sprintf(out, "%02X", in[8] & 0xFF);
+	out += sprintf(out, "%02X", in[9] & 0xFF);
+	out += sprintf(out, "-");
+
+	for (i = 10; i <= 15; i++)
+		out += sprintf(out, "%02X", in[i] & 0xFF);
+
+	out = '\0';
+	return 0;
+}
+
 static bool find_guid(const char *guid_string, struct wmi_block **out)
 {
 	char tmp[16], guid_input[16];
@@ -555,6 +585,138 @@ bool wmi_has_guid(const char *guid_string)
 EXPORT_SYMBOL_GPL(wmi_has_guid);
 
 /*
+ * sysfs interface
+ */
+static ssize_t show_modalias(struct device *dev, struct device_attribute *attr,
+			     char *buf)
+{
+	char guid_string[37];
+	struct wmi_block *wblock;
+
+	wblock = dev_get_drvdata(dev);
+	if (!wblock)
+		return -ENOMEM;
+
+	wmi_gtoa(wblock->gblock.guid, guid_string);
+
+	return sprintf(buf, "wmi:%s\n", guid_string);
+}
+static DEVICE_ATTR(modalias, S_IRUGO, show_modalias, NULL);
+
+static int wmi_dev_uevent(struct device *dev, struct kobj_uevent_env *env)
+{
+	char guid_string[37];
+
+	struct wmi_block *wblock;
+
+	if (add_uevent_var(env, "MODALIAS="))
+		return -ENOMEM;
+
+	wblock = dev_get_drvdata(dev);
+	if (!wblock)
+		return -ENOMEM;
+
+	wmi_gtoa(wblock->gblock.guid, guid_string);
+
+	strcpy(&env->buf[env->buflen - 1], "wmi:");
+	memcpy(&env->buf[env->buflen - 1 + 4], guid_string, 36);
+	env->buflen += 40;
+
+	return 0;
+}
+
+static void wmi_dev_free(struct device *dev)
+{
+	kfree(dev);
+}
+
+static struct class wmi_class = {
+	.name = "wmi",
+	.dev_release = wmi_dev_free,
+	.dev_uevent = wmi_dev_uevent,
+};
+
+static int wmi_create_devs(void)
+{
+	int result;
+	char guid_string[37];
+	struct guid_block *gblock;
+	struct wmi_block *wblock;
+	struct list_head *p;
+	struct device *guid_dev;
+
+	/* Create devices for all the GUIDs */
+	list_for_each(p, &wmi_blocks.list) {
+		wblock = list_entry(p, struct wmi_block, list);
+
+		guid_dev = kzalloc(sizeof(struct device), GFP_KERNEL);
+		if (!guid_dev)
+			return -ENOMEM;
+
+		wblock->dev = guid_dev;
+
+		guid_dev->class = &wmi_class;
+		dev_set_drvdata(guid_dev, wblock);
+
+		gblock = &wblock->gblock;
+
+		wmi_gtoa(gblock->guid, guid_string);
+		dev_set_name(guid_dev, guid_string);
+
+		result = device_register(guid_dev);
+		if (result)
+			return result;
+
+		result = device_create_file(guid_dev, &dev_attr_modalias);
+		if (result)
+			return result;
+	}
+
+	return 0;
+}
+
+static void wmi_remove_devs(void)
+{
+	struct guid_block *gblock;
+	struct wmi_block *wblock;
+	struct list_head *p;
+	struct device *guid_dev;
+
+	/* Delete devices for all the GUIDs */
+	list_for_each(p, &wmi_blocks.list) {
+		wblock = list_entry(p, struct wmi_block, list);
+
+		guid_dev = wblock->dev;
+		gblock = &wblock->gblock;
+
+		device_remove_file(guid_dev, &dev_attr_modalias);
+
+		device_unregister(guid_dev);
+	}
+}
+
+static void wmi_class_exit(void)
+{
+	wmi_remove_devs();
+	class_unregister(&wmi_class);
+}
+
+static int wmi_class_init(void)
+{
+	int ret;
+
+	ret = class_register(&wmi_class);
+	if (ret)
+		return ret;
+
+	ret = wmi_create_devs();
+	if (ret)
+		wmi_class_exit();
+
+	return ret;
+}
+
+/*
  * Parse the _WDG method for the GUID data blocks
  */
 static __init acpi_status parse_wdg(acpi_handle handle)
@@ -709,10 +871,17 @@ static int __init acpi_wmi_init(void)
 
 	if (result < 0) {
 		printk(KERN_INFO PREFIX "Error loading mapper\n");
-	} else {
-		printk(KERN_INFO PREFIX "Mapper loaded\n");
+		return -ENODEV;
+	}
+
+	result = wmi_class_init();
+	if (result) {
+		acpi_bus_unregister_driver(&acpi_wmi_driver);
+		return result;
 	}
 
+	printk(KERN_INFO PREFIX "Mapper loaded\n");
+
 	return result;
 }
 
@@ -721,6 +890,8 @@ static void __exit acpi_wmi_exit(void)
 	struct list_head *p, *tmp;
 	struct wmi_block *wblock;
 
+	wmi_class_exit();
+
 	acpi_bus_unregister_driver(&acpi_wmi_driver);
 
 	list_for_each_safe(p, tmp, &wmi_blocks.list) {
-- 
1.6.5.2

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


linux-2.6-block-silently-error-unsupported-empty-barriers-too.patch:
 blk-core.c |    4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

--- NEW FILE linux-2.6-block-silently-error-unsupported-empty-barriers-too.patch ---
From: Mark McLoughlin <markmc at redhat.com>
Subject: [PATCH] block: silently error unsupported empty barriers too

With 2.6.31-rc5 in a KVM guest using dm and virtio_blk, we see the
following errors:

  end_request: I/O error, dev vda, sector 0
  end_request: I/O error, dev vda, sector 0

The errors go away if dm stops submitting empty barriers, by reverting:

  commit 52b1fd5a27c625c78373e024bf570af3c9d44a79
  Author: Mikulas Patocka <mpatocka at redhat.com>
    dm: send empty barriers to targets in dm_flush

We should error all barriers, even empty barriers, on devices like
virtio_blk which don't support them.

See also:

  https://bugzilla.redhat.com/514901

Signed-off-by: Mark McLoughlin <markmc at redhat.com>
Cc: Rusty Russell <rusty at rustcorp.com.au>
Cc: Mikulas Patocka <mpatocka at redhat.com>
Cc: Alasdair G Kergon <agk at redhat.com>
Cc: Neil Brown <neilb at suse.de>
---
 block/blk-core.c |    3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/block/blk-core.c b/block/blk-core.c
index e3299a7..35ad2bb 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -1163,8 +1163,7 @@ static int __make_request(struct request_queue *q, struct bio *bio)
 	const int unplug = bio_unplug(bio);
 	int rw_flags;
 
-	if (bio_barrier(bio) && bio_has_data(bio) &&
-	    (q->next_ordered == QUEUE_ORDERED_NONE)) {
+	if (bio_barrier(bio) && (q->next_ordered == QUEUE_ORDERED_NONE)) {
 		bio_endio(bio, -EOPNOTSUPP);
 		return 0;
 	}
-- 
1.6.4


linux-2.6-defaults-aspm.patch:
 aspm.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- NEW FILE linux-2.6-defaults-aspm.patch ---
diff -up linux-2.6.30.noarch/drivers/pci/pcie/aspm.c.mjg linux-2.6.30.noarch/drivers/pci/pcie/aspm.c
--- linux-2.6.30.noarch/drivers/pci/pcie/aspm.c.mjg	2009-07-16 22:01:11.000000000 +0100
+++ linux-2.6.30.noarch/drivers/pci/pcie/aspm.c	2009-07-16 22:01:30.000000000 +0100
@@ -65,7 +65,7 @@ static LIST_HEAD(link_list);
 #define POLICY_DEFAULT 0	/* BIOS default setting */
 #define POLICY_PERFORMANCE 1	/* high performance */
 #define POLICY_POWERSAVE 2	/* high power saving */
-static int aspm_policy;
+static int aspm_policy = POLICY_POWERSAVE;
 static const char *policy_str[] = {
 	[POLICY_DEFAULT] = "default",
 	[POLICY_PERFORMANCE] = "performance",

linux-2.6-dell-laptop-rfkill-fix.patch:
 b/drivers/input/input.c              |   91 +++++++++++++++++++++++++++----
 b/drivers/platform/x86/dell-laptop.c |  100 +++++++++++++++++++++++++++++++++++
 b/include/linux/input.h              |    5 +
 drivers/platform/x86/dell-laptop.c   |    5 -
 4 files changed, 185 insertions(+), 16 deletions(-)

--- NEW FILE linux-2.6-dell-laptop-rfkill-fix.patch ---
diff --git a/drivers/input/input.c b/drivers/input/input.c
index 7c237e6..80f1e48 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -88,19 +88,26 @@ static int input_defuzz_abs_event(int value, int old_val, int fuzz)
  */
 static void input_pass_event(struct input_dev *dev,
 			     unsigned int type, unsigned int code, int value)
-{
-	struct input_handle *handle;
+
+{	struct input_handle *handle;
 
 	rcu_read_lock();
 
 	handle = rcu_dereference(dev->grab);
-	if (handle)
+	if (handle) {
 		handle->handler->event(handle, type, code, value);
-	else
-		list_for_each_entry_rcu(handle, &dev->h_list, d_node)
-			if (handle->open)
-				handle->handler->event(handle,
-							type, code, value);
+		goto out;
+	}
+
+	handle = rcu_dereference(dev->filter);
+	if (handle && handle->handler->filter(handle, type, code, value))
+		goto out;
+
+	list_for_each_entry_rcu(handle, &dev->h_list, d_node)
+		if (handle->open)
+			handle->handler->event(handle,
+					       type, code, value);
+out:
 	rcu_read_unlock();
 }
 
@@ -375,12 +382,15 @@ int input_grab_device(struct input_handle *handle)
 }
 EXPORT_SYMBOL(input_grab_device);
 
-static void __input_release_device(struct input_handle *handle)
+static void __input_release_device(struct input_handle *handle, bool filter)
 {
 	struct input_dev *dev = handle->dev;
 
-	if (dev->grab == handle) {
-		rcu_assign_pointer(dev->grab, NULL);
+	if (handle == (filter ? dev->filter : dev->grab)) {
+		if (filter)
+			rcu_assign_pointer(dev->filter, NULL);
+		else
+			rcu_assign_pointer(dev->grab, NULL);
 		/* Make sure input_pass_event() notices that grab is gone */
 		synchronize_rcu();
 
@@ -404,12 +414,65 @@ void input_release_device(struct input_handle *handle)
 	struct input_dev *dev = handle->dev;
 
 	mutex_lock(&dev->mutex);
-	__input_release_device(handle);
+	__input_release_device(handle, false);
 	mutex_unlock(&dev->mutex);
 }
 EXPORT_SYMBOL(input_release_device);
 
 /**
+ * input_filter_device - allow input events to be filtered from higher layers
+ * @handle: input handle that wants to filter the device
+ *
+ * When a device is filtered by an input handle all events generated by
+ * the device are to this handle. If the filter function returns true then
+ * the event is discarded rather than being passed to any other input handles,
+ * otherwise it is passed to them as normal. Grabs will be handled before
+ * filters, so a grabbed device will not deliver events to a filter function.
+ */
+int input_filter_device(struct input_handle *handle)
+{
+	struct input_dev *dev = handle->dev;
+	int retval;
+
+	retval = mutex_lock_interruptible(&dev->mutex);
+	if (retval)
+		return retval;
+
+	if (dev->filter) {
+		retval = -EBUSY;
+		goto out;
+	}
+
+	rcu_assign_pointer(dev->filter, handle);
+	synchronize_rcu();
+
+ out:
+	mutex_unlock(&dev->mutex);
+	return retval;
+}
+EXPORT_SYMBOL(input_filter_device);
+
+/**
+ * input_unfilter_device - removes a filter from a device
+ * @handle: input handle that owns the device
+ *
+ * Removes the filter from a device so that other input handles can
+ * start receiving unfiltered input events. Upon release all handlers
+ * attached to the device have their start() method called so they
+ * have a change to synchronize device state with the rest of the
+ * system.
+ */
+void input_unfilter_device(struct input_handle *handle)
+{
+	struct input_dev *dev = handle->dev;
+
+	mutex_lock(&dev->mutex);
+	__input_release_device(handle, true);
+	mutex_unlock(&dev->mutex);
+}
+EXPORT_SYMBOL(input_unfilter_device);
+
+/**
  * input_open_device - open input device
  * @handle: handle through which device is being accessed
  *
@@ -482,7 +545,9 @@ void input_close_device(struct input_handle *handle)
 
 	mutex_lock(&dev->mutex);
 
-	__input_release_device(handle);
+	/* Release both grabs and filters */
+	__input_release_device(handle, false);
+	__input_release_device(handle, true);
 
 	if (!--dev->users && dev->close)
 		dev->close(dev);
diff --git a/include/linux/input.h b/include/linux/input.h
index 8b3bc3e..e28f116 100644
--- a/include/linux/input.h
+++ b/include/linux/input.h
@@ -1118,6 +1118,7 @@ struct input_dev {
 	int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);
 
 	struct input_handle *grab;
+	struct input_handle *filter;
 
 	spinlock_t event_lock;
 	struct mutex mutex;
@@ -1218,6 +1219,7 @@ struct input_handler {
 	void *private;
 
 	void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value);
+	bool (*filter)(struct input_handle *handle, unsigned int type, unsigned int code, int value);
 	int (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id);
 	void (*disconnect)(struct input_handle *handle);
 	void (*start)(struct input_handle *handle);
@@ -1295,6 +1297,9 @@ void input_unregister_handle(struct input_handle *);
 int input_grab_device(struct input_handle *);
 void input_release_device(struct input_handle *);
 
+int input_filter_device(struct input_handle *);
+void input_unfilter_device(struct input_handle *);
+
 int input_open_device(struct input_handle *);
 void input_close_device(struct input_handle *);
 
diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c
index 74909c4..71a4149 100644
--- a/drivers/platform/x86/dell-laptop.c
+++ b/drivers/platform/x86/dell-laptop.c
@@ -22,6 +22,7 @@
 #include <linux/rfkill.h>
 #include <linux/power_supply.h>
 #include <linux/acpi.h>
+#include <linux/input.h>
 #include "../../firmware/dcdbas.h"
 
 #define BRIGHTNESS_TOKEN 0x7d
@@ -206,6 +207,16 @@ static const struct rfkill_ops dell_rfkill_ops = {
 	.query = dell_rfkill_query,
 };
 
+static void dell_rfkill_update(void)
+{
+	if (wifi_rfkill)
+		dell_rfkill_query(wifi_rfkill, (void *)1);
+	if (bluetooth_rfkill)
+		dell_rfkill_query(bluetooth_rfkill, (void *)2);
+	if (wwan_rfkill)
+		dell_rfkill_query(wwan_rfkill, (void *)3);
+}
+
 static int dell_setup_rfkill(void)
 {
 	struct calling_interface_buffer buffer;
@@ -310,6 +321,90 @@ static struct backlight_ops dell_ops = {
 	.update_status  = dell_send_intensity,
 };
 
+static const struct input_device_id dell_input_ids[] = {
+	{
+		.bustype = 0x11,
+		.vendor = 0x01,
+		.product = 0x01,
+		.version = 0xab41,
+		.flags = INPUT_DEVICE_ID_MATCH_BUS |
+			 INPUT_DEVICE_ID_MATCH_VENDOR |
+			 INPUT_DEVICE_ID_MATCH_PRODUCT |
+			 INPUT_DEVICE_ID_MATCH_VERSION
+	},
+	{ },
+};
+
+static bool dell_input_filter(struct input_handle *handle, unsigned int type,
+			     unsigned int code, int value)
+{
+	if (type == EV_KEY && code == KEY_WLAN && value == 1) {
+		dell_rfkill_update();
+		return 1;
+	}
+
+	return 0;
+}
+
+static void dell_input_event(struct input_handle *handle, unsigned int type,
+			     unsigned int code, int value)
+{
+}
+
+static int dell_input_connect(struct input_handler *handler,
+			      struct input_dev *dev,
+			      const struct input_device_id *id)
+{
+	struct input_handle *handle;
+	int error;
+
+	handle = kzalloc(sizeof(struct input_handle), GFP_KERNEL);
+	if (!handle)
+		return -ENOMEM;
+
+	handle->dev = dev;
+	handle->handler = handler;
+	handle->name = "dell-laptop";
+
+	error = input_register_handle(handle);
+	if (error)
+		goto err_free_handle;
+
+	error = input_open_device(handle);
+	if (error)
+		goto err_unregister_handle;
+
+	error = input_filter_device(handle);
+	if (error)
+		goto err_close_handle;
+
+	return 0;
+
+err_close_handle:
+	input_close_device(handle);
+err_unregister_handle:
+	input_unregister_handle(handle);
+err_free_handle:
+	kfree(handle);
+	return error;
+}
+
+static void dell_input_disconnect(struct input_handle *handle)
+{
+	input_close_device(handle);
+	input_unregister_handle(handle);
+	kfree(handle);
+}
+
+static struct input_handler dell_input_handler = {
+	.name = "dell-laptop",
+	.filter = dell_input_filter,
+	.event = dell_input_event,
+	.connect = dell_input_connect,
+	.disconnect = dell_input_disconnect,
+	.id_table = dell_input_ids,
+};
+
 static int __init dell_init(void)
 {
 	struct calling_interface_buffer buffer;
@@ -333,6 +428,10 @@ static int __init dell_init(void)
 		goto out;
 	}
 
+	if (input_register_handler(&dell_input_handler))
+		printk(KERN_INFO
+		       "dell-laptop: Could not register input filter\n");
+
 #ifdef CONFIG_ACPI
 	/* In the event of an ACPI backlight being available, don't
 	 * register the platform controller.
@@ -388,6 +487,7 @@ static void __exit dell_exit(void)
 		rfkill_unregister(bluetooth_rfkill);
 	if (wwan_rfkill)
 		rfkill_unregister(wwan_rfkill);
+	input_unregister_handler(&dell_input_handler);
 }
 
 module_init(dell_init);
diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c
index 71a4149..e559fa1 100644
--- a/drivers/platform/x86/dell-laptop.c
+++ b/drivers/platform/x86/dell-laptop.c
@@ -198,8 +198,8 @@ static void dell_rfkill_query(struct rfkill *rfkill, void *data)
 	dell_send_request(&buffer, 17, 11);
 	status = buffer.output[1];
 
-	if (status & BIT(bit))
-		rfkill_set_hw_state(rfkill, !!(status & BIT(16)));
+	rfkill_set_sw_state(rfkill, !!(status & BIT(bit)));
+	rfkill_set_hw_state(rfkill, !(status & BIT(16)));
 }
 
 static const struct rfkill_ops dell_rfkill_ops = {
-- 
1.6.3.3


linux-2.6-driver-level-usb-autosuspend.diff:
 drivers/usb/core/driver.c |   16 ++++++++++++++++
 include/linux/usb.h       |    4 ++++
 2 files changed, 20 insertions(+)

--- NEW FILE linux-2.6-driver-level-usb-autosuspend.diff ---
commit 7d0d20a25c6f477fb198b85510c78156d7d7c5af
Author: Matthew Garrett <mjg at redhat.com>
Date:   Tue Jun 9 20:11:47 2009 +0100

    usb: Allow drivers to enable USB autosuspend on a per-device basis
    
    USB autosuspend is currently only enabled by default for hubs. On other
    hardware the decision is made by userspace. This is unnecessary in cases
    where we know that the hardware supports autosuspend, so this patch adds
    a function to allow drivers to enable it at probe time.
    
    Signed-off-by: Matthew Garrett <mjg at redhat.com>

diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
index 4f86447..f7caf00 100644
--- a/drivers/usb/core/driver.c
+++ b/drivers/usb/core/driver.c
@@ -1575,6 +1575,22 @@ void usb_autopm_put_interface_async(struct usb_interface *intf)
 EXPORT_SYMBOL_GPL(usb_autopm_put_interface_async);
 
 /**
+ * usb_device_autosuspend_enable - enable autosuspend on a device
+ * @udev: the usb_device to be autosuspended
+ *
+ * This routine should be called by an interface driver when it knows that
+ * the device in question supports USB autosuspend.
+ *
+ */
+void usb_device_autosuspend_enable(struct usb_device *udev)
+{
+	udev->autosuspend_disabled = 0;
+	udev->autoresume_disabled = 0;
+	usb_external_suspend_device(udev, PMSG_USER_SUSPEND);
+}
+EXPORT_SYMBOL_GPL(usb_device_autosuspend_enable);
+
+/**
  * usb_autopm_get_interface - increment a USB interface's PM-usage counter
  * @intf: the usb_interface whose counter should be incremented
  *
diff --git a/include/linux/usb.h b/include/linux/usb.h
index a34fa89..0c22c64 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -543,6 +543,7 @@ extern struct usb_device *usb_find_device(u16 vendor_id, u16 product_id);
 
 /* USB autosuspend and autoresume */
 #ifdef CONFIG_USB_SUSPEND
+extern void usb_device_autosuspend_enable(struct usb_device *udev);
 extern int usb_autopm_set_interface(struct usb_interface *intf);
 extern int usb_autopm_get_interface(struct usb_interface *intf);
 extern void usb_autopm_put_interface(struct usb_interface *intf);
@@ -568,6 +569,9 @@ static inline void usb_mark_last_busy(struct usb_device *udev)
 
 #else
 
+static inline void usb_device_autosuspend_enable(struct usb_device *udev)
+{ }
+
 static inline int usb_autopm_set_interface(struct usb_interface *intf)
 { return 0; }
 

linux-2.6-enable-btusb-autosuspend.patch:
 btusb.c |    1 +
 1 file changed, 1 insertion(+)

--- NEW FILE linux-2.6-enable-btusb-autosuspend.patch ---
commit 8e962bd41a2cbf7f0e55191a757b87f793a725a8
Author: Matthew Garrett <mjg at redhat.com>
Date:   Tue Jun 9 20:47:51 2009 +0100

    btusb: Enable autosuspend by default

diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 44bc8bb..4c33417 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -1020,6 +1020,7 @@ static int btusb_probe(struct usb_interface *intf,
 	}
 
 	usb_set_intfdata(intf, data);
+	usb_device_autosuspend_enable(data->udev);
 
 	return 0;
 }

linux-2.6-fix-btusb-autosuspend.patch:
 btusb.c |    1 +
 1 file changed, 1 insertion(+)

--- NEW FILE linux-2.6-fix-btusb-autosuspend.patch ---
commit ae69717118e1f14ed8737459f8c4baca1cb9c404
Author: Matthew Garrett <mjg at redhat.com>
Date:   Wed Dec 16 14:31:30 2009 -0500

    Fix btusb autosuspend

diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 4c33417..ec54dd6 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -307,6 +307,7 @@ static void btusb_bulk_complete(struct urb *urb)
 		return;
 
 	usb_anchor_urb(urb, &data->bulk_anchor);
+	usb_mark_last_busy(data->udev);
 
 	err = usb_submit_urb(urb, GFP_ATOMIC);
 	if (err < 0) {

linux-2.6-fix-usb-serial-autosuspend.diff:
 usb-serial.c |    9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

--- NEW FILE linux-2.6-fix-usb-serial-autosuspend.diff ---
commit 3b8e1210f0a558145ba87eddb20f7b104676d6f6
Author: Oliber Neukum <oliver at neukum.org>
Date:   Sat Jul 18 07:19:04 2009 +0200

    usb: fix counter logic in opening serial converters
    
    the usage counter must be increased only after autoresumption

diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
index 99188c9..3d1a756 100644
--- a/drivers/usb/serial/usb-serial.c
+++ b/drivers/usb/serial/usb-serial.c
@@ -216,16 +216,15 @@ static int serial_open (struct tty_struct *tty, struct file *filp)
 		goto bailout_port_put;
 	}
 
-	++port->port.count;
-
 	/* set up our port structure making the tty driver
 	 * remember our port object, and us it */
 	tty->driver_data = port;
 	tty_port_tty_set(&port->port, tty);
 
 	/* If the console is attached, the device is already open */
-	if (port->port.count == 1 && !port->console) {
+	if (!port->port.count && !port->console) {
 		first = 1;
+
 		/* lock this module before we call it
 		 * this may fail, which means we must bail out,
 		 * safe because we are called with BKL held */
@@ -242,6 +241,8 @@ static int serial_open (struct tty_struct *tty, struct file *filp)
 		if (retval)
 			goto bailout_module_put;
 
+		++port->port.count;
+
 		/* only call the device specific open if this
 		 * is the first time the port is opened */
 		retval = serial->type->open(tty, port, filp);
@@ -249,6 +250,8 @@ static int serial_open (struct tty_struct *tty, struct file *filp)
 			goto bailout_interface_put;
 		mutex_unlock(&serial->disc_mutex);
 		set_bit(ASYNCB_INITIALIZED, &port->port.flags);
+	} else {
+		++port->port.count;
 	}
 	mutex_unlock(&port->mutex);
 	/* Now do the correct tty layer semantics */

linux-2.6-intel-agp-clear-gtt.patch:
 intel-agp.c |    7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

--- NEW FILE linux-2.6-intel-agp-clear-gtt.patch ---
Some BIOSes fail to initialise the GTT, which will cause DMA faults when
the IOMMU is enabled. We need to clear the whole thing, not just the
part that Linux is going to use.

Signed-off-by: David Woodhouse <David.Woodhouse at intel.com>

diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c
index 10e1f03..6ab8173 100644
--- a/drivers/char/agp/intel-agp.c
+++ b/drivers/char/agp/intel-agp.c
@@ -176,6 +176,7 @@ static struct _intel_private {
 	 * popup and for the GTT.
 	 */
 	int gtt_entries;			/* i830+ */
+	int gtt_total_size;
 	union {
 		void __iomem *i9xx_flush_page;
 		void *i8xx_flush_page;
@@ -1151,7 +1152,7 @@ static int intel_i915_configure(void)
 	readl(intel_private.registers+I810_PGETBL_CTL);	/* PCI Posting. */
 
 	if (agp_bridge->driver->needs_scratch_page) {
-		for (i = intel_private.gtt_entries; i < current_size->num_entries; i++) {
+		for (i = intel_private.gtt_entries; i < intel_private.gtt_total_size; i++) {
 			writel(agp_bridge->scratch_page, intel_private.gtt+i);
 		}
 		readl(intel_private.gtt+i-1);	/* PCI Posting. */
@@ -1306,6 +1307,8 @@ static int intel_i915_create_gatt_table(struct agp_bridge_data *bridge)
 	if (!intel_private.gtt)
 		return -ENOMEM;
 
+	intel_private.gtt_total_size = gtt_map_size / 4;
+
 	temp &= 0xfff80000;
 
 	intel_private.registers = ioremap(temp, 128 * 4096);
@@ -1392,6 +1395,8 @@ static int intel_i965_create_gatt_table(struct agp_bridge_data *bridge)
 	if (!intel_private.gtt)
 		return -ENOMEM;
 
+	intel_private.gtt_total_size = gtt_size / 4;
+
 	intel_private.registers = ioremap(temp, 128 * 4096);
 	if (!intel_private.registers) {
 		iounmap(intel_private.gtt);

linux-2.6-ksm-kvm.patch:
 arch/x86/include/asm/kvm_host.h |    1 
 arch/x86/kvm/mmu.c              |   91 ++++++++++++++++++++++++++++++++--------
 arch/x86/kvm/paging_tmpl.h      |   15 +++++-
 virt/kvm/kvm_main.c             |   14 ++++++
 4 files changed, 101 insertions(+), 20 deletions(-)

--- NEW FILE linux-2.6-ksm-kvm.patch ---
When using mmu notifiers, we are allowed to remove the page count
reference tooken by get_user_pages to a specific page that is mapped
inside the shadow page tables.

This is needed so we can balance the pagecount against mapcount
checking.

(Right now kvm increase the pagecount and does not increase the
mapcount when mapping page into shadow page table entry,
so when comparing pagecount against mapcount, you have no
reliable result.)

add SPTE_HOST_WRITEABLE flag notify that the host physical page we are
pointing to from the spte is write protected, and therefore we cant
change its access to be write unless we run get_user_pages(write = 1).

(this is needed for change_pte support in kvm)

support for change_pte mmu notifiers is needed for kvm if it want ksm to
directly map pages into its shadow page tables.

Signed-off-by: Izik Eidus <ieidus at redhat.com>
Signed-off-by: Justin M. Forbes <jforbes at redhat.com>
---
--- linux-2.6.30.x86_64/arch/x86/include/asm/kvm_host.h	2009-08-20 10:37:37.784886414 -0500
+++ linux-2.6.30.x86_64.kvm/arch/x86/include/asm/kvm_host.h	2009-08-20 10:39:33.742641558 -0500
@@ -796,5 +796,6 @@ asmlinkage void kvm_handle_fault_on_rebo
 int kvm_unmap_hva(struct kvm *kvm, unsigned long hva);
 int kvm_age_hva(struct kvm *kvm, unsigned long hva);
 int cpuid_maxphyaddr(struct kvm_vcpu *vcpu);
+void kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte);
 
 #endif /* _ASM_X86_KVM_HOST_H */
--- linux-2.6.30.x86_64/arch/x86/kvm/mmu.c	2009-08-20 10:37:37.964887039 -0500
+++ linux-2.6.30.x86_64.kvm/arch/x86/kvm/mmu.c	2009-08-20 10:41:15.231638028 -0500
@@ -139,6 +139,8 @@ module_param(oos_shadow, bool, 0644);
 #define ACC_USER_MASK    PT_USER_MASK
 #define ACC_ALL          (ACC_EXEC_MASK | ACC_WRITE_MASK | ACC_USER_MASK)
 
+#define SPTE_HOST_WRITEABLE (1ULL << PT_FIRST_AVAIL_BITS_SHIFT)
+
 #define SHADOW_PT_INDEX(addr, level) PT64_INDEX(addr, level)
 
 struct kvm_rmap_desc {
@@ -254,6 +256,11 @@ static pfn_t spte_to_pfn(u64 pte)
 	return (pte & PT64_BASE_ADDR_MASK) >> PAGE_SHIFT;
 }
 
+static pte_t ptep_val(pte_t *ptep)
+{
+	return *ptep;
+}
+
 static gfn_t pse36_gfn_delta(u32 gpte)
 {
 	int shift = 32 - PT32_DIR_PSE36_SHIFT - PAGE_SHIFT;
@@ -573,9 +580,7 @@ static void rmap_remove(struct kvm *kvm,
 	if (*spte & shadow_accessed_mask)
 		kvm_set_pfn_accessed(pfn);
 	if (is_writeble_pte(*spte))
-		kvm_release_pfn_dirty(pfn);
-	else
-		kvm_release_pfn_clean(pfn);
+		kvm_set_pfn_dirty(pfn);
 	rmapp = gfn_to_rmap(kvm, sp->gfns[spte - sp->spt], is_large_pte(*spte));
 	if (!*rmapp) {
 		printk(KERN_ERR "rmap_remove: %p %llx 0->BUG\n", spte, *spte);
@@ -684,7 +689,8 @@ static int rmap_write_protect(struct kvm
 	return write_protected;
 }
 
-static int kvm_unmap_rmapp(struct kvm *kvm, unsigned long *rmapp)
+static int kvm_unmap_rmapp(struct kvm *kvm, unsigned long *rmapp,
+			   unsigned long data)
 {
 	u64 *spte;
 	int need_tlb_flush = 0;
@@ -699,8 +705,48 @@ static int kvm_unmap_rmapp(struct kvm *k
 	return need_tlb_flush;
 }
 
+static int kvm_set_pte_rmapp(struct kvm *kvm, unsigned long *rmapp,
+			     unsigned long data)
+{
+	int need_flush = 0;
+	u64 *spte, new_spte;
+	pte_t *ptep = (pte_t *)data;
+	pfn_t new_pfn;
+
+	new_pfn = pte_pfn(ptep_val(ptep));
+	spte = rmap_next(kvm, rmapp, NULL);
+	while (spte) {
+		BUG_ON(!is_shadow_present_pte(*spte));
+		rmap_printk("kvm_set_pte_rmapp: spte %p %llx\n", spte, *spte);
+		need_flush = 1;
+		if (pte_write(ptep_val(ptep))) {
+			rmap_remove(kvm, spte);
+			set_shadow_pte(spte, shadow_trap_nonpresent_pte);
+			spte = rmap_next(kvm, rmapp, NULL);
+		} else {
+			new_spte = *spte &~ (PT64_BASE_ADDR_MASK);
+			new_spte |= new_pfn << PAGE_SHIFT;
+
+			if (!pte_write(ptep_val(ptep))) {
+				new_spte &= ~PT_WRITABLE_MASK;
+				new_spte &= ~SPTE_HOST_WRITEABLE;
+				if (is_writeble_pte(*spte))
+					kvm_set_pfn_dirty(spte_to_pfn(*spte));
+			}
+			set_shadow_pte(spte, new_spte);
+			spte = rmap_next(kvm, rmapp, spte);
+		}
+	}
+	if (need_flush)
+		kvm_flush_remote_tlbs(kvm);
+
+	return 0;
+}
+
 static int kvm_handle_hva(struct kvm *kvm, unsigned long hva,
-			  int (*handler)(struct kvm *kvm, unsigned long *rmapp))
+			  unsigned long data,
+			  int (*handler)(struct kvm *kvm, unsigned long *rmapp,
+					 unsigned long data))
 {
 	int i;
 	int retval = 0;
@@ -721,11 +767,13 @@ static int kvm_handle_hva(struct kvm *kv
 		end = start + (memslot->npages << PAGE_SHIFT);
 		if (hva >= start && hva < end) {
 			gfn_t gfn_offset = (hva - start) >> PAGE_SHIFT;
-			retval |= handler(kvm, &memslot->rmap[gfn_offset]);
+			retval |= handler(kvm, &memslot->rmap[gfn_offset],
+					  data);
 			retval |= handler(kvm,
 					  &memslot->lpage_info[
 						  gfn_offset /
-						  KVM_PAGES_PER_HPAGE].rmap_pde);
+						  KVM_PAGES_PER_HPAGE].rmap_pde,
+						  data);
 		}
 	}
 
@@ -734,10 +782,16 @@ static int kvm_handle_hva(struct kvm *kv
 
 int kvm_unmap_hva(struct kvm *kvm, unsigned long hva)
 {
-	return kvm_handle_hva(kvm, hva, kvm_unmap_rmapp);
+	return kvm_handle_hva(kvm, hva, 0, kvm_unmap_rmapp);
+}
+
+void kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte)
+{
+	kvm_handle_hva(kvm, hva, (unsigned long)&pte, kvm_set_pte_rmapp);
 }
 
-static int kvm_age_rmapp(struct kvm *kvm, unsigned long *rmapp)
+static int kvm_age_rmapp(struct kvm *kvm, unsigned long *rmapp,
+			 unsigned long data)
 {
 	u64 *spte;
 	int young = 0;
@@ -770,13 +824,13 @@ static void rmap_recycle(struct kvm_vcpu
 	gfn = unalias_gfn(vcpu->kvm, gfn);
 	rmapp = gfn_to_rmap(vcpu->kvm, gfn, lpage);
 
-	kvm_unmap_rmapp(vcpu->kvm, rmapp);
+	kvm_unmap_rmapp(vcpu->kvm, rmapp, 0);
 	kvm_flush_remote_tlbs(vcpu->kvm);
 }
 
 int kvm_age_hva(struct kvm *kvm, unsigned long hva)
 {
-	return kvm_handle_hva(kvm, hva, kvm_age_rmapp);
+	return kvm_handle_hva(kvm, hva, 0, kvm_age_rmapp);
 }
 
 #ifdef MMU_DEBUG
@@ -1686,7 +1740,7 @@ static int set_spte(struct kvm_vcpu *vcp
 		    unsigned pte_access, int user_fault,
 		    int write_fault, int dirty, int largepage,
 		    gfn_t gfn, pfn_t pfn, bool speculative,
-		    bool can_unsync)
+		    bool can_unsync, bool reset_host_protection)
 {
 	u64 spte;
 	int ret = 0;
@@ -1744,6 +1798,8 @@ static int set_spte(struct kvm_vcpu *vcp
 				spte &= ~PT_WRITABLE_MASK;
 		}
 	}
+	if (reset_host_protection)
+		spte |= SPTE_HOST_WRITEABLE;
 
 	if (pte_access & ACC_WRITE_MASK)
 		mark_page_dirty(vcpu->kvm, gfn);
@@ -1757,7 +1813,8 @@ static void mmu_set_spte(struct kvm_vcpu
 			 unsigned pt_access, unsigned pte_access,
 			 int user_fault, int write_fault, int dirty,
 			 int *ptwrite, int largepage, gfn_t gfn,
-			 pfn_t pfn, bool speculative)
+			 pfn_t pfn, bool speculative,
+             bool reset_host_protection)
 {
 	int was_rmapped = 0;
 	int was_writeble = is_writeble_pte(*shadow_pte);
@@ -1787,7 +1844,8 @@ static void mmu_set_spte(struct kvm_vcpu
 			was_rmapped = 1;
 	}
 	if (set_spte(vcpu, shadow_pte, pte_access, user_fault, write_fault,
-		      dirty, largepage, gfn, pfn, speculative, true)) {
+		      dirty, largepage, gfn, pfn, speculative, true,
+              reset_host_protection)) {
 		if (write_fault)
 			*ptwrite = 1;
 		kvm_x86_ops->tlb_flush(vcpu);
@@ -1804,8 +1862,7 @@ static void mmu_set_spte(struct kvm_vcpu
 	page_header_update_slot(vcpu->kvm, shadow_pte, gfn);
 	if (!was_rmapped) {
 		rmap_count = rmap_add(vcpu, shadow_pte, gfn, largepage);
-		if (!is_rmap_pte(*shadow_pte))
-			kvm_release_pfn_clean(pfn);
+		kvm_release_pfn_clean(pfn);
 		if (rmap_count > RMAP_RECYCLE_THRESHOLD)
 			rmap_recycle(vcpu, gfn, largepage);
 	} else {
@@ -1837,7 +1894,7 @@ static int __direct_map(struct kvm_vcpu 
 		    || (largepage && iterator.level == PT_DIRECTORY_LEVEL)) {
 			mmu_set_spte(vcpu, iterator.sptep, ACC_ALL, ACC_ALL,
 				     0, write, 1, &pt_write,
-				     largepage, gfn, pfn, false);
+				     largepage, gfn, pfn, false, true);
 			++vcpu->stat.pf_fixed;
 			break;
 		}
--- linux-2.6.30.x86_64/arch/x86/kvm/paging_tmpl.h	2009-08-20 10:37:37.966889166 -0500
+++ linux-2.6.30.x86_64.kvm/arch/x86/kvm/paging_tmpl.h	2009-08-20 10:39:33.747636180 -0500
@@ -266,9 +266,13 @@ static void FNAME(update_pte)(struct kvm
 	if (mmu_notifier_retry(vcpu, vcpu->arch.update_pte.mmu_seq))
 		return;
 	kvm_get_pfn(pfn);
+    /*
+     * we call mmu_set_spte() with reset_host_protection = true beacuse that
+     * vcpu->arch.update_pte.pfn was fetched from get_user_pages(write = 1).
+     */ 
 	mmu_set_spte(vcpu, spte, page->role.access, pte_access, 0, 0,
 		     gpte & PT_DIRTY_MASK, NULL, largepage,
-		     gpte_to_gfn(gpte), pfn, true);
+		     gpte_to_gfn(gpte), pfn, true, true);
 }
 
 /*
@@ -302,7 +306,7 @@ static u64 *FNAME(fetch)(struct kvm_vcpu
 				     user_fault, write_fault,
 				     gw->ptes[gw->level-1] & PT_DIRTY_MASK,
 				     ptwrite, largepage,
-				     gw->gfn, pfn, false);
+				     gw->gfn, pfn, false, true);
 			break;
 		}
 
@@ -552,6 +556,7 @@ static void FNAME(prefetch_page)(struct 
 static int FNAME(sync_page)(struct kvm_vcpu *vcpu, struct kvm_mmu_page *sp)
 {
 	int i, offset, nr_present;
+        bool reset_host_protection = 1;
 
 	offset = nr_present = 0;
 
@@ -589,9 +594,13 @@ static int FNAME(sync_page)(struct kvm_v
 
 		nr_present++;
 		pte_access = sp->role.access & FNAME(gpte_access)(vcpu, gpte);
+        if (!(sp->spt[i] & SPTE_HOST_WRITEABLE)) {
+            pte_access &= ~PT_WRITABLE_MASK;
+                         reset_host_protection = 0;
+                } else { reset_host_protection = 1; }
 		set_spte(vcpu, &sp->spt[i], pte_access, 0, 0,
 			 is_dirty_pte(gpte), 0, gfn,
-			 spte_to_pfn(sp->spt[i]), true, false);
+			 spte_to_pfn(sp->spt[i]), true, false, reset_host_protection);
 	}
 
 	return !nr_present;
--- linux-2.6.30.x86_64/virt/kvm/kvm_main.c	2009-08-20 10:37:45.448886340 -0500
+++ linux-2.6.30.x86_64.kvm/virt/kvm/kvm_main.c	2009-08-20 10:39:33.749636212 -0500
@@ -859,6 +859,19 @@ static void kvm_mmu_notifier_invalidate_
 
 }
 
+static void kvm_mmu_notifier_change_pte(struct mmu_notifier *mn,
+					struct mm_struct *mm,
+					unsigned long address,
+					pte_t pte)
+{
+	struct kvm *kvm = mmu_notifier_to_kvm(mn);
+
+	spin_lock(&kvm->mmu_lock);
+	kvm->mmu_notifier_seq++;
+	kvm_set_spte_hva(kvm, address, pte);
+	spin_unlock(&kvm->mmu_lock);
+}
+
 static void kvm_mmu_notifier_invalidate_range_start(struct mmu_notifier *mn,
 						    struct mm_struct *mm,
 						    unsigned long start,
@@ -938,6 +951,7 @@ static const struct mmu_notifier_ops kvm
 	.invalidate_range_start	= kvm_mmu_notifier_invalidate_range_start,
 	.invalidate_range_end	= kvm_mmu_notifier_invalidate_range_end,
 	.clear_flush_young	= kvm_mmu_notifier_clear_flush_young,
+	.change_pte		= kvm_mmu_notifier_change_pte,
 	.release		= kvm_mmu_notifier_release,
 };
 #endif /* CONFIG_MMU_NOTIFIER && KVM_ARCH_WANT_MMU_NOTIFIER */

linux-2.6-nfs4-callback-hidden.patch:
 callback_xdr.c |    1 +
 1 file changed, 1 insertion(+)

--- NEW FILE linux-2.6-nfs4-callback-hidden.patch ---
Author: Steve Dickson <steved at redhat.com>
Date: Tue Oct 13 15:59:57 EDT 2009

To avoid hangs in the svc_unregister(), on version 4 mounts 
(and unmounts), when rpcbind is not running, make the nfs4 callback 
program an 'hidden' service by setting the 'vs_hidden' flag in the 
nfs4_callback_version structure. 

Signed-off-by: Steve Dickson <steved at redhat.com>

diff -up linux-2.6.31.x86_64/fs/nfs/callback_xdr.c.orig linux-2.6.31.x86_64/fs/nfs/callback_xdr.c
--- linux-2.6.31.x86_64/fs/nfs/callback_xdr.c.orig	2009-09-09 18:13:59.000000000 -0400
+++ linux-2.6.31.x86_64/fs/nfs/callback_xdr.c	2009-10-13 15:40:19.000000000 -0400
@@ -716,5 +716,6 @@ struct svc_version nfs4_callback_version
 	.vs_proc = nfs4_callback_procedures1,
 	.vs_xdrsize = NFS4_CALLBACK_XDRSIZE,
 	.vs_dispatch = NULL,
+	.vs_hidden = 1,
 };
 

linux-2.6-nfsd4-proots.patch:
 fs/nfsd/export.c            |    9 ++++++---
 fs/nfsd/nfs4xdr.c           |   10 +++++++---
 fs/nfsd/nfsfh.c             |   37 +++++++++++++++++++++++++++++++++++++
 fs/nfsd/vfs.c               |   33 ++++++++++++++++++++++++---------
 include/linux/nfsd/export.h |   12 +++++++++++-
 include/linux/nfsd/nfsd.h   |    5 +++++
 6 files changed, 90 insertions(+), 16 deletions(-)

--- NEW FILE linux-2.6-nfsd4-proots.patch ---
diff -up linux-2.6.32.i686/fs/nfsd/export.c.save linux-2.6.32.i686/fs/nfsd/export.c
--- linux-2.6.32.i686/fs/nfsd/export.c.save	2009-12-04 10:24:17.000000000 -0500
+++ linux-2.6.32.i686/fs/nfsd/export.c	2009-12-04 10:40:52.000000000 -0500
@@ -372,10 +372,12 @@ static struct svc_export *svc_export_loo
 static int check_export(struct inode *inode, int flags, unsigned char *uuid)
 {
 
-	/* We currently export only dirs and regular files.
-	 * This is what umountd does.
+	/*
+	 * We currently export only dirs, regular files, and (for v4
+	 * pseudoroot) symlinks.
 	 */
 	if (!S_ISDIR(inode->i_mode) &&
+	    !S_ISLNK(inode->i_mode) &&
 	    !S_ISREG(inode->i_mode))
 		return -ENOTDIR;
 
@@ -1425,6 +1427,7 @@ static struct flags {
 	{ NFSEXP_CROSSMOUNT, {"crossmnt", ""}},
 	{ NFSEXP_NOSUBTREECHECK, {"no_subtree_check", ""}},
 	{ NFSEXP_NOAUTHNLM, {"insecure_locks", ""}},
+	{ NFSEXP_V4ROOT, {"v4root", ""}},
 #ifdef MSNFS
 	{ NFSEXP_MSNFS, {"msnfs", ""}},
 #endif
@@ -1505,7 +1508,7 @@ static int e_show(struct seq_file *m, vo
 	struct svc_export *exp = container_of(cp, struct svc_export, h);
 
 	if (p == SEQ_START_TOKEN) {
-		seq_puts(m, "# Version 1.1\n");
+		seq_puts(m, "# Version 1.2\n");
 		seq_puts(m, "# Path Client(Flags) # IPs\n");
 		return 0;
 	}
diff -up linux-2.6.32.i686/fs/nfsd/nfs4xdr.c.save linux-2.6.32.i686/fs/nfsd/nfs4xdr.c
--- linux-2.6.32.i686/fs/nfsd/nfs4xdr.c.save	2009-12-04 10:24:17.000000000 -0500
+++ linux-2.6.32.i686/fs/nfsd/nfs4xdr.c	2009-12-04 10:26:49.000000000 -0500
@@ -2204,11 +2204,14 @@ nfsd4_encode_dirent_fattr(struct nfsd4_r
 	 * we will not follow the cross mount and will fill the attribtutes
 	 * directly from the mountpoint dentry.
 	 */
-	if (d_mountpoint(dentry) && !attributes_need_mount(cd->rd_bmval))
-		ignore_crossmnt = 1;
-	else if (d_mountpoint(dentry)) {
+	if (nfsd_mountpoint(dentry, exp)) {
 		int err;
 
+		if (!(exp->ex_flags & NFSEXP_V4ROOT)
+				&& !attributes_need_mount(cd->rd_bmval)) {
+			ignore_crossmnt = 1;
+			goto out_encode;
+		}
 		/*
 		 * Why the heck aren't we just using nfsd_lookup??
 		 * Different "."/".." handling?  Something else?
@@ -2224,6 +2227,7 @@ nfsd4_encode_dirent_fattr(struct nfsd4_r
 			goto out_put;
 
 	}
+out_encode:
 	nfserr = nfsd4_encode_fattr(NULL, exp, dentry, p, buflen, cd->rd_bmval,
 					cd->rd_rqstp, ignore_crossmnt);
 out_put:
diff -up linux-2.6.32.i686/fs/nfsd/nfsfh.c.save linux-2.6.32.i686/fs/nfsd/nfsfh.c
--- linux-2.6.32.i686/fs/nfsd/nfsfh.c.save	2009-12-04 10:24:17.000000000 -0500
+++ linux-2.6.32.i686/fs/nfsd/nfsfh.c	2009-12-04 10:38:26.000000000 -0500
@@ -109,6 +109,36 @@ static __be32 nfsd_setuser_and_check_por
 	return nfserrno(nfsd_setuser(rqstp, exp));
 }
 
+static inline __be32 check_pseudo_root(struct svc_rqst *rqstp,
+	struct dentry *dentry, struct svc_export *exp)
+{
+	if (!(exp->ex_flags & NFSEXP_V4ROOT))
+		return nfs_ok;
+	/*
+	 * v2/v3 clients have no need for the V4ROOT export--they use
+	 * the mount protocl instead; also, further V4ROOT checks may be
+	 * in v4-specific code, in which case v2/v3 clients could bypass
+	 * them.
+	 */
+	if (!nfsd_v4client(rqstp))
+		return nfserr_stale;
+	/*
+	 * We're exposing only the directories and symlinks that have to be
+	 * traversed on the way to real exports:
+	 */
+	if (unlikely(!S_ISDIR(dentry->d_inode->i_mode) &&
+		     !S_ISLNK(dentry->d_inode->i_mode)))
+		return nfserr_stale;
+	/*
+	 * A pseudoroot export gives permission to access only one
+	 * single directory; the kernel has to make another upcall
+	 * before granting access to anything else under it:
+	 */
+	if (unlikely(dentry != exp->ex_path.dentry))
+		return nfserr_stale;
+	return nfs_ok;
+}
+
 /*
  * Use the given filehandle to look up the corresponding export and
  * dentry.  On success, the results are used to set fh_export and
@@ -317,6 +347,13 @@ fh_verify(struct svc_rqst *rqstp, struct
 			goto out;
 	}
 
+	/*
+	 * Do some spoof checking if we are on the pseudo root
+	 */
+	error = check_pseudo_root(rqstp, dentry, exp);
+	if (error)
+		goto out;
+
 	error = nfsd_mode_check(rqstp, dentry->d_inode->i_mode, type);
 	if (error)
 		goto out;
diff -up linux-2.6.32.i686/fs/nfsd/vfs.c.save linux-2.6.32.i686/fs/nfsd/vfs.c
--- linux-2.6.32.i686/fs/nfsd/vfs.c.save	2009-12-04 10:24:18.000000000 -0500
+++ linux-2.6.32.i686/fs/nfsd/vfs.c	2009-12-04 10:35:04.000000000 -0500
@@ -89,12 +89,6 @@ struct raparm_hbucket {
 #define RAPARM_HASH_MASK	(RAPARM_HASH_SIZE-1)
 static struct raparm_hbucket	raparm_hash[RAPARM_HASH_SIZE];
 
-static inline int
-nfsd_v4client(struct svc_rqst *rq)
-{
-    return rq->rq_prog == NFS_PROGRAM && rq->rq_vers == 4;
-}
-
 /* 
  * Called from nfsd_lookup and encode_dirent. Check if we have crossed 
  * a mount point.
@@ -116,8 +110,16 @@ nfsd_cross_mnt(struct svc_rqst *rqstp, s
 
 	exp2 = rqst_exp_get_by_name(rqstp, &path);
 	if (IS_ERR(exp2)) {
-		if (PTR_ERR(exp2) != -ENOENT)
-			err = PTR_ERR(exp2);
+		err = PTR_ERR(exp2);
+		/*
+		 * We normally allow NFS clients to continue
+		 * "underneath" a mountpoint that is not exported.
+		 * The exception is V4ROOT, where no traversal is ever
+		 * allowed without an explicit export of the new
+		 * directory.
+		 */
+		if (err == -ENOENT && !(exp->ex_flags & NFSEXP_V4ROOT))
+			err = 0;
 		path_put(&path);
 		goto out;
 	}
@@ -141,6 +143,19 @@ out:
 	return err;
 }
 
+/*
+ * For nfsd purposes, we treat V4ROOT exports as though there was an
+ * export at *every* directory.
+ */
+int nfsd_mountpoint(struct dentry *dentry, struct svc_export *exp)
+{
+	if (d_mountpoint(dentry))
+		return 1;
+	if (!(exp->ex_flags & NFSEXP_V4ROOT))
+		return 0;
+	return dentry->d_inode != NULL;
+}
+
 __be32
 nfsd_lookup_dentry(struct svc_rqst *rqstp, struct svc_fh *fhp,
 		   const char *name, unsigned int len,
@@ -208,7 +223,7 @@ nfsd_lookup_dentry(struct svc_rqst *rqst
 		/*
 		 * check if we have crossed a mount point ...
 		 */
-		if (d_mountpoint(dentry)) {
+		if (nfsd_mountpoint(dentry, exp)) {
 			if ((host_err = nfsd_cross_mnt(rqstp, &dentry, &exp))) {
 				dput(dentry);
 				goto out_nfserr;
diff -up linux-2.6.32.i686/include/linux/nfsd/export.h.save linux-2.6.32.i686/include/linux/nfsd/export.h
--- linux-2.6.32.i686/include/linux/nfsd/export.h.save	2009-12-04 10:24:18.000000000 -0500
+++ linux-2.6.32.i686/include/linux/nfsd/export.h	2009-12-04 10:25:08.000000000 -0500
@@ -39,7 +39,17 @@
 #define NFSEXP_FSID		0x2000
 #define	NFSEXP_CROSSMOUNT	0x4000
 #define	NFSEXP_NOACL		0x8000	/* reserved for possible ACL related use */
-#define NFSEXP_ALLFLAGS		0xFE3F
+/*
+ * The NFSEXP_V4ROOT flag causes the kernel to give access only to NFSv4
+ * clients, and only to the single directory that is the root of the
+ * export; further lookup and readdir operations are treated as if every
+ * subdirectory was a mountpoint, and ignored if they are not themselves
+ * exported.  This is used by nfsd and mountd to construct the NFSv4
+ * pseudofilesystem, which provides access only to paths leading to each
+ * exported filesystem.
+ */
+#define	NFSEXP_V4ROOT		0x10000
+#define NFSEXP_ALLFLAGS		0x1FE3F
 
 /* The flags that may vary depending on security flavor: */
 #define NFSEXP_SECINFO_FLAGS	(NFSEXP_READONLY | NFSEXP_ROOTSQUASH \
diff -up linux-2.6.32.i686/include/linux/nfsd/nfsd.h.save linux-2.6.32.i686/include/linux/nfsd/nfsd.h
--- linux-2.6.32.i686/include/linux/nfsd/nfsd.h.save	2009-12-04 10:24:18.000000000 -0500
+++ linux-2.6.32.i686/include/linux/nfsd/nfsd.h	2009-12-04 10:39:18.000000000 -0500
@@ -86,6 +86,7 @@ __be32		 nfsd_lookup_dentry(struct svc_r
 				struct svc_export **, struct dentry **);
 __be32		nfsd_setattr(struct svc_rqst *, struct svc_fh *,
 				struct iattr *, int, time_t);
+int nfsd_mountpoint(struct dentry *, struct svc_export *);
 #ifdef CONFIG_NFSD_V4
 __be32          nfsd4_set_nfs4_acl(struct svc_rqst *, struct svc_fh *,
                     struct nfs4_acl *);
@@ -394,6 +395,10 @@ static inline u32 nfsd_suppattrs2(u32 mi
 	return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD2
 			    : NFSD4_SUPPORTED_ATTRS_WORD2;
 }
+static inline int nfsd_v4client(struct svc_rqst *rq)
+{
+	return rq->rq_prog == NFS_PROGRAM && rq->rq_vers == 4;
+}
 
 /* These will return ERR_INVAL if specified in GETATTR or READDIR. */
 #define NFSD_WRITEONLY_ATTRS_WORD1							    \

linux-2.6-pci-cacheline-sizing.patch:
 common.c |   16 ++++++++++++++++
 1 file changed, 16 insertions(+)

--- NEW FILE linux-2.6-pci-cacheline-sizing.patch ---
PCI: Use generic cacheline sizing instead of per-vendor tests.

Instead of the pci code needing to have code to determine the
cacheline size of each processor, use the data the cpu identification
code should have already determined during early boot.

I chose not to delete the existing code for the time being.
Instead I added some additional debug statements to be sure that it's
doing the right thing, and compares it against what the old code would
have done.  After this has been proven to be right in a release,
we can delete the paranoid checks, and all the old vendor checking code.

Signed-off-by: Dave Jones <davej at redhat.com>

diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
index 2202b62..f371fe8 100644
--- a/arch/x86/pci/common.c
+++ b/arch/x86/pci/common.c
@@ -432,6 +432,22 @@ int __init pcibios_init(void)
 	else if (c->x86 > 6 && c->x86_vendor == X86_VENDOR_INTEL)
 		pci_cache_line_size = 128 >> 2;	/* P4 */
 
+	if (c->x86_clflush_size != (pci_cache_line_size <<2))
+		printk(KERN_DEBUG "PCI: old code would have set cacheline "
+			"size to %d bytes, but clflush_size = %d\n",
+			pci_cache_line_size << 2,
+			c->x86_clflush_size);
+
+	/* Once we know this logic works, all the above code can be deleted. */
+	if (c->x86_clflush_size > 0) {
+		pci_cache_line_size = c->x86_clflush_size >> 2;
+		printk(KERN_DEBUG "PCI: pci_cache_line_size set to %d bytes\n",
+			pci_cache_line_size << 2);
+	} else {
+		pci_cache_line_size = 32 >> 2;
+		printk(KERN_DEBUG "PCI: Unknown cacheline size. Setting to 32 bytes\n");
+	}
+
 	pcibios_resource_survey();
 
 	if (pci_bf_sort >= pci_force_bf)

linux-2.6-qcserial-autosuspend.diff:
 qcserial.c |    2 ++
 1 file changed, 2 insertions(+)

--- NEW FILE linux-2.6-qcserial-autosuspend.diff ---
commit b2bcfa17349e5a6a01170b5269ee261dbd762a0c
Author: Matthew Garrett <mjg at redhat.com>
Date:   Sat Jul 18 14:43:36 2009 +0100

    usb: enable autosuspend by default on qcserial
    
    All qcserial hardware supports autosuspend properly. Enable it by default.
    
    Signed-off-by: Matthew Garrett <mjg at redhat.com>

diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
index 7528b8d..959a176 100644
--- a/drivers/usb/serial/qcserial.c
+++ b/drivers/usb/serial/qcserial.c
@@ -74,6 +74,8 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
 	ifnum = serial->interface->cur_altsetting->desc.bInterfaceNumber;
 	dbg("This Interface = %d", ifnum);
 
+	usb_device_autosuspend_enable(serial->dev);
+
 	switch (nintf) {
 	case 1:
 		/* QDL mode */

linux-2.6-rfkill-all.patch:
 include/linux/input.h  |    2 ++
 include/linux/rfkill.h |    2 +-
 net/rfkill/input.c     |    8 ++++++++
 3 files changed, 11 insertions(+), 1 deletion(-)

--- NEW FILE linux-2.6-rfkill-all.patch ---
diff --git a/include/linux/input.h b/include/linux/input.h
index 8b3bc3e..20a622e 100644
--- a/include/linux/input.h
+++ b/include/linux/input.h
@@ -595,6 +595,8 @@ struct input_absinfo {
 #define KEY_NUMERIC_STAR	0x20a
 #define KEY_NUMERIC_POUND	0x20b
 
+#define KEY_RFKILL		0x20c /* Key that controls all radios */
+
 /* We avoid low common keys in module aliases so they don't get huge. */
 #define KEY_MIN_INTERESTING	KEY_MUTE
 #define KEY_MAX			0x2ff
diff --git a/include/linux/rfkill.h b/include/linux/rfkill.h
index 278777f..4c39f7e 100644
--- a/include/linux/rfkill.h
+++ b/include/linux/rfkill.h
@@ -32,7 +32,7 @@
 /**
  * enum rfkill_type - type of rfkill switch.
  *
- * @RFKILL_TYPE_ALL: toggles all switches (userspace only)
+ * @RFKILL_TYPE_ALL: toggles all switches (requests only - not a switch type)
  * @RFKILL_TYPE_WLAN: switch is on a 802.11 wireless network device.
  * @RFKILL_TYPE_BLUETOOTH: switch is on a bluetooth device.
  * @RFKILL_TYPE_UWB: switch is on a ultra wideband device.
diff --git a/net/rfkill/input.c b/net/rfkill/input.c
index a7295ad..3713d7e 100644
--- a/net/rfkill/input.c
+++ b/net/rfkill/input.c
@@ -212,6 +212,9 @@ static void rfkill_event(struct input_handle *handle, unsigned int type,
 		case KEY_WIMAX:
 			rfkill_schedule_toggle(RFKILL_TYPE_WIMAX);
 			break;
+		case KEY_RFKILL:
+			rfkill_schedule_toggle(RFKILL_TYPE_ALL);
+			break;
 		}
 	} else if (type == EV_SW && code == SW_RFKILL_ALL)
 		rfkill_schedule_evsw_rfkillall(data);
@@ -295,6 +298,11 @@ static const struct input_device_id rfkill_ids[] = {
 		.keybit = { [BIT_WORD(KEY_WIMAX)] = BIT_MASK(KEY_WIMAX) },
 	},
 	{
+		.flags = INPUT_DEVICE_ID_MATCH_EVBIT | INPUT_DEVICE_ID_MATCH_KEYBIT,
+		.evbit = { BIT_MASK(EV_KEY) },
+		.keybit = { [BIT_WORD(KEY_RFKILL)] = BIT_MASK(KEY_RFKILL) },
+	},
+	{
 		.flags = INPUT_DEVICE_ID_MATCH_EVBIT | INPUT_DEVICE_ID_MATCH_SWBIT,
 		.evbit = { BIT(EV_SW) },
 		.swbit = { [BIT_WORD(SW_RFKILL_ALL)] = BIT_MASK(SW_RFKILL_ALL) },

linux-2.6-sparc-selinux-mprotect-checks.patch:
 hooks.c |    4 ++++
 1 file changed, 4 insertions(+)

Index: linux-2.6-sparc-selinux-mprotect-checks.patch
===================================================================
RCS file: linux-2.6-sparc-selinux-mprotect-checks.patch
diff -N linux-2.6-sparc-selinux-mprotect-checks.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ linux-2.6-sparc-selinux-mprotect-checks.patch	4 Jan 2010 15:25:48 -0000	1.4
@@ -0,0 +1,35 @@
+diff -up linux-2.6.24.sparc64/security/selinux/hooks.c.BAD linux-2.6.24.sparc64/security/selinux/hooks.c
+--- linux-2.6.24.sparc64/security/selinux/hooks.c.BAD	2008-03-21 14:28:06.000000000 -0400
++++ linux-2.6.24.sparc64/security/selinux/hooks.c	2008-03-21 14:29:10.000000000 -0400
+@@ -3018,6 +3018,7 @@ static int file_map_prot_check(struct fi
+ 	const struct cred *cred = current_cred();
+ 	int rc = 0;
+ 
++#ifndef CONFIG_SPARC
+ 	if ((prot & PROT_EXEC) && (!file || (!shared && (prot & PROT_WRITE)))) {
+ 		/*
+ 		 * We are making executable an anonymous mapping or a
+@@ -3028,6 +3029,7 @@ static int file_map_prot_check(struct fi
+ 		if (rc)
+ 			goto error;
+ 	}
++#endif
+ 
+ 	if (file) {
+ 		/* read access is always possible with a mapping */
+@@ -3081,6 +3081,7 @@ static int selinux_file_mprotect(struct 
+ 	if (selinux_checkreqprot)
+ 		prot = reqprot;
+ 
++#ifndef CONFIG_SPARC
+ 	if ((prot & PROT_EXEC) && !(vma->vm_flags & VM_EXEC)) {
+ 		rc = 0;
+ 		if (vma->vm_start >= vma->vm_mm->start_brk &&
+@@ -3103,6 +3103,7 @@ static int selinux_file_mprotect(struct 
+ 		if (rc)
+ 			return rc;
+ 	}
++#endif
+ 
+ 	return file_map_prot_check(vma->vm_file, prot, vma->vm_flags&VM_SHARED);
+ }

linux-2.6-usb-uvc-autosuspend.diff:
 uvc_driver.c |    2 ++
 1 file changed, 2 insertions(+)

--- NEW FILE linux-2.6-usb-uvc-autosuspend.diff ---
commit 9d4c919bcfa794c054cc33155c7e3c53ac2c5684
Author: Matthew Garrett <mjg at redhat.com>
Date:   Sun Jul 19 02:24:49 2009 +0100

    Enable autosuspend on UVC by default

diff --git a/drivers/media/video/uvc/uvc_driver.c b/drivers/media/video/uvc/uvc_driver.c
index 89927b7..8de516b 100644
--- a/drivers/media/video/uvc/uvc_driver.c
+++ b/drivers/media/video/uvc/uvc_driver.c
@@ -1647,6 +1647,8 @@ static int uvc_probe(struct usb_interface *intf,
 			"supported.\n", ret);
 	}
 
+	usb_device_autosuspend_enable(udev);
+
 	uvc_trace(UVC_TRACE_PROBE, "UVC device initialized.\n");
 	return 0;
 

linux-2.6-userspace_kvmclock_offset.patch:
 Documentation/kvm/api.txt       |   34 ++++++++++++++++++++++++++++++++++
 arch/x86/include/asm/kvm_host.h |    1 +
 arch/x86/kvm/x86.c              |   36 +++++++++++++++++++++++++++++++++++-
 include/linux/kvm.h             |   10 +++++++++-
 4 files changed, 79 insertions(+), 2 deletions(-)

--- NEW FILE linux-2.6-userspace_kvmclock_offset.patch ---
>From a6048dd2da5be0dec49739304d310ddfc477d99c Mon Sep 17 00:00:00 2001
From: Glauber Costa <glommer at redhat.com>
Date: Fri, 16 Oct 2009 15:28:36 -0400
Subject: [PATCH] KVM: allow userspace to adjust kvmclock offset

When we migrate a kvm guest that uses pvclock between two hosts, we may
suffer a large skew. This is because there can be significant differences
between the monotonic clock of the hosts involved. When a new host with
a much larger monotonic time starts running the guest, the view of time
will be significantly impacted.

Situation is much worse when we do the opposite, and migrate to a host with
a smaller monotonic clock.

This proposed ioctl will allow userspace to inform us what is the monotonic
clock value in the source host, so we can keep the time skew short, and
more importantly, never goes backwards. Userspace may also need to trigger
the current data, since from the first migration onwards, it won't be
reflected by a simple call to clock_gettime() anymore.

Signed-off-by: Glauber Costa <glommer at redhat.com>
Signed-off-by: Marcelo Tosatti <mtosatti at redhat.com>
---
 Documentation/kvm/api.txt       |   34 ++++++++++++++++++++++++++++++++++
 arch/x86/include/asm/kvm_host.h |    1 +
 arch/x86/kvm/x86.c              |   36 +++++++++++++++++++++++++++++++++++-
 include/linux/kvm.h             |    9 +++++++++
 4 files changed, 79 insertions(+), 1 deletions(-)

diff --git a/Documentation/kvm/api.txt b/Documentation/kvm/api.txt
index 5980113..126419f 100644
--- a/Documentation/kvm/api.txt
+++ b/Documentation/kvm/api.txt
@@ -617,6 +617,40 @@ struct kvm_xen_hvm_config {
 	__u8 pad2[30];
 };
 
+4.27 KVM_GET_CLOCK
+
+Capability: KVM_CAP_ADJUST_CLOCK
+Architectures: x86
+Type: vm ioctl
+Parameters: struct kvm_clock_data (out)
+Returns: 0 on success, -1 on error
+
+Gets the current timestamp of kvmclock as seen by the current guest. In
+conjunction with KVM_SET_CLOCK, it is used to ensure monotonicity on scenarios
+such as migration.
+
+struct kvm_clock_data {
+	__u64 clock;  /* kvmclock current value */
+	__u64 pad[2];
+};
+
+4.28 KVM_SET_CLOCK
+
+Capability: KVM_CAP_ADJUST_CLOCK
+Architectures: x86
+Type: vm ioctl
+Parameters: struct kvm_clock_data (in)
+Returns: 0 on success, -1 on error
+
+Sets the current timestamp of kvmclock to the valued specific in its parameter.
+In conjunction with KVM_GET_CLOCK, it is used to ensure monotonicity on scenarios
+such as migration.
+
+struct kvm_clock_data {
+	__u64 clock;  /* kvmclock current value */
+	__u64 pad[2];
+};
+
 5. The kvm_run structure
 
 Application code obtains a pointer to the kvm_run structure by
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index 4d994ad..0558ff8 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -413,6 +413,7 @@ struct kvm_arch{
 	unsigned long irq_sources_bitmap;
 	unsigned long irq_states[KVM_IOAPIC_NUM_PINS];
 	u64 vm_init_tsc;
+	s64 kvmclock_offset;
 };

 struct kvm_vm_stat {
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index e3456f8..3270b3b 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -680,7 +680,8 @@ static void kvm_write_guest_time(struct kvm_vcpu *v)
 	/* With all the info we got, fill in the values */
 
 	vcpu->hv_clock.system_time = ts.tv_nsec +
-				     (NSEC_PER_SEC * (u64)ts.tv_sec);
+				     (NSEC_PER_SEC * (u64)ts.tv_sec) + v->kvm->arch.kvmclock_offset;
+
 	/*
 	 * The interface expects us to write an even number signaling that the
 	 * update is finished. Since the guest won't see the intermediate
@@ -1261,6 +1262,7 @@ int kvm_dev_ioctl_check_extension(long ext)
 	case KVM_CAP_PIT2:
 	case KVM_CAP_PIT_STATE2:
 	case KVM_CAP_SET_IDENTITY_MAP_ADDR:
+	case KVM_CAP_ADJUST_CLOCK:
 		r = 1;
 		break;
 	case KVM_CAP_COALESCED_MMIO:
@@ -2464,6 +2466,38 @@ long kvm_arch_vm_ioctl(struct file *filp,
 		r = 0;
 		break;
 	}
+	case KVM_SET_CLOCK: {
+		struct timespec now;
+		struct kvm_clock_data user_ns;
+		u64 now_ns;
+		s64 delta;
+
+		r = -EFAULT;
+		if (copy_from_user(&user_ns, argp, sizeof(user_ns)))
+			goto out;
+
+		r = 0;
+		ktime_get_ts(&now);
+		now_ns = timespec_to_ns(&now);
+		delta = user_ns.clock - now_ns;
+		kvm->arch.kvmclock_offset = delta;
+		break;
+	}
+	case KVM_GET_CLOCK: {
+		struct timespec now;
+		struct kvm_clock_data user_ns;
+		u64 now_ns;
+
+		ktime_get_ts(&now);
+		now_ns = timespec_to_ns(&now);
+		user_ns.clock = kvm->arch.kvmclock_offset + now_ns;
+
+		if (copy_to_user(argp, &user_ns, sizeof(user_ns)))
+			r =  -EFAULT;
+
+		break;
+	}
+
 	default:
 		;
 	}
diff --git a/include/linux/kvm.h b/include/linux/kvm.h
index e0ed46c..0e8455b 100644
--- a/include/linux/kvm.h
+++ b/include/linux/kvm.h
@@ -439,6 +439,7 @@ struct kvm_ioeventfd {
 #endif
 #define KVM_CAP_IOEVENTFD 36
 #define KVM_CAP_SET_IDENTITY_MAP_ADDR 37
+#define KVM_CAP_ADJUST_CLOCK 38
 
 #ifdef KVM_CAP_IRQ_ROUTING
 
@@ -512,6 +513,11 @@ struct kvm_irqfd {
 	__u8  pad[20];
 };
 
+struct kvm_clock_data {
+	__u64 clock;
+	__u64 pad[2];
+};
+
 /*
  * ioctls for VM fds
  */
@@ -562,6 +568,9 @@ struct kvm_irqfd {
 #define KVM_CREATE_PIT2            _IOW(KVMIO, 0x77, struct kvm_pit_config)
 #define KVM_SET_BOOT_CPU_ID        _IO(KVMIO, 0x78)
 #define KVM_IOEVENTFD             _IOW(KVMIO, 0x79, struct kvm_ioeventfd)
+#define KVM_SET_CLOCK             _IOW(KVMIO, 0x7b, struct kvm_clock_data)
+#define KVM_GET_CLOCK             _IOR(KVMIO, 0x7c, struct kvm_clock_data)
+
 
 /*
  * ioctls for vcpu fds
-- 
1.6.5.1


linux-2.6-utrace-ptrace.patch:
 include/linux/ptrace.h |    2 
 kernel/Makefile        |    1 
 kernel/ptrace-utrace.c | 1080 +++++++++++++++++++++++++++++++++++++++++++++++++
 kernel/ptrace.c        |  597 +++++++++++++--------------
 kernel/utrace.c        |   16 
 5 files changed, 1391 insertions(+), 305 deletions(-)

--- NEW FILE linux-2.6-utrace-ptrace.patch ---
utrace: ptrace cooperation

This adds the CONFIG_UTRACE_PTRACE option under CONFIG_UTRACE.
When set, parts of ptrace are replaced so it uses the utrace
facilities for noticing events, stopping and resuming threads.

This makes ptrace play nicely with other utrace-based things
tracing the same threads.  It also makes all ptrace uses rely on
some of the utrace code working right, even when you are not
using any other utrace-based things.  So it's experimental and
not real well proven yet.  But it's recommended if you enable
CONFIG_UTRACE and want to try new utrace things.

Signed-off-by: Roland McGrath <roland at redhat.com>
---
 include/linux/ptrace.h |    2 +-
 kernel/Makefile        |    1 +
 kernel/ptrace-utrace.c | 1080 ++++++++++++++++++++++++++++++++++++++++++++++++
 kernel/ptrace.c        |  572 +++++++++++++-------------
 kernel/utrace.c        |   16 +
 5 files changed, 1378 insertions(+), 293 deletions(-)

diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h
index 4802e2a..03f8fc7 100644  
--- a/include/linux/ptrace.h
+++ b/include/linux/ptrace.h
@@ -79,7 +79,7 @@
 #include <linux/compiler.h>		/* For unlikely.  */
 #include <linux/sched.h>		/* For struct task_struct.  */
 
-
+extern void ptrace_notify_stop(struct task_struct *tracee);
 extern long arch_ptrace(struct task_struct *child, long request, long addr, long data);
 extern int ptrace_traceme(void);
 extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len);
diff --git a/kernel/Makefile b/kernel/Makefile
index 263bb19..42cb1ec 100644  
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -69,6 +69,7 @@ obj-$(CONFIG_RESOURCE_COUNTERS) += res_c
 obj-$(CONFIG_STOP_MACHINE) += stop_machine.o
 obj-$(CONFIG_KPROBES_SANITY_TEST) += test_kprobes.o
 obj-$(CONFIG_UTRACE) += utrace.o
+obj-$(CONFIG_UTRACE) += ptrace-utrace.o
 obj-$(CONFIG_AUDIT) += audit.o auditfilter.o audit_watch.o
 obj-$(CONFIG_AUDITSYSCALL) += auditsc.o
 obj-$(CONFIG_GCOV_KERNEL) += gcov/
diff --git a/kernel/ptrace-utrace.c b/kernel/ptrace-utrace.c
new file mode 100644
index ...ea419ee 100644  
--- /dev/null
+++ b/kernel/ptrace-utrace.c
@@ -0,0 +1,1080 @@
+/*
+ * linux/kernel/ptrace.c
+ *
+ * (C) Copyright 1999 Linus Torvalds
+ *
+ * Common interfaces for "ptrace()" which we do not want
+ * to continually duplicate across every architecture.
+ */
+
+#include <linux/capability.h>
+#include <linux/module.h>
+#include <linux/sched.h>
+#include <linux/errno.h>
+#include <linux/mm.h>
+#include <linux/highmem.h>
+#include <linux/pagemap.h>
+#include <linux/smp_lock.h>
+#include <linux/ptrace.h>
+#include <linux/utrace.h>
+#include <linux/security.h>
+#include <linux/signal.h>
+#include <linux/audit.h>
+#include <linux/pid_namespace.h>
+#include <linux/syscalls.h>
+#include <linux/uaccess.h>
+
+/*
+ * ptrace a task: make the debugger its new parent and
+ * move it to the ptrace list.
+ *
+ * Must be called with the tasklist lock write-held.
+ */
+void __ptrace_link(struct task_struct *child, struct task_struct *new_parent)
+{
+	BUG_ON(!list_empty(&child->ptrace_entry));
+	list_add(&child->ptrace_entry, &new_parent->ptraced);
+	child->parent = new_parent;
+}
+
+/*
+ * unptrace a task: move it back to its original parent and
+ * remove it from the ptrace list.
+ *
+ * Must be called with the tasklist lock write-held.
+ */
+void __ptrace_unlink(struct task_struct *child)
+{
+	BUG_ON(!child->ptrace);
+
+	child->ptrace = 0;
+	child->parent = child->real_parent;
+	list_del_init(&child->ptrace_entry);
+
+	arch_ptrace_untrace(child);
+}
+
+struct ptrace_context {
+	int				options;
+
+	int				signr;
+	siginfo_t			*siginfo;
+
+	int				stop_code;
+	unsigned long			eventmsg;
+
+	enum utrace_resume_action	resume;
+};
+
+#define PT_UTRACED			0x00001000
+
+#define PTRACE_O_SYSEMU			0x100
+
+#define PTRACE_EVENT_SYSCALL		(1 << 16)
+#define PTRACE_EVENT_SIGTRAP		(2 << 16)
+#define PTRACE_EVENT_SIGNAL		(3 << 16)
+/* events visible to user-space */
+#define PTRACE_EVENT_MASK		0xFFFF
+
+static inline bool ptrace_event_pending(struct ptrace_context *ctx)
+{
+	return ctx->stop_code != 0;
+}
+
+static inline int get_stop_event(struct ptrace_context *ctx)
+{
+	return ctx->stop_code >> 8;
+}
+
+static inline void set_stop_code(struct ptrace_context *ctx, int event)
+{
+	ctx->stop_code = (event << 8) | SIGTRAP;
+}
+
+static inline struct ptrace_context *
+ptrace_context(struct utrace_engine *engine)
+{
+	return engine->data;
+}
+
+static const struct utrace_engine_ops ptrace_utrace_ops; /* forward decl */
+
+static struct utrace_engine *ptrace_lookup_engine(struct task_struct *tracee)
+{
+	return utrace_attach_task(tracee, UTRACE_ATTACH_MATCH_OPS,
+					&ptrace_utrace_ops, NULL);
+}
+
+static struct utrace_engine *
+ptrace_reuse_engine(struct task_struct *tracee)
+{
+	struct utrace_engine *engine;
+	struct ptrace_context *ctx;
+	int err = -EPERM;
+
+	engine = ptrace_lookup_engine(tracee);
+	if (IS_ERR(engine))
+		return engine;
+
+	ctx = ptrace_context(engine);
+	if (unlikely(ctx->resume == UTRACE_DETACH)) {
+		/*
+		 * Try to reuse this self-detaching engine.
+		 * The only caller which can hit this case is ptrace_attach(),
+		 * it holds ->cred_guard_mutex.
+		 */
+		ctx->options = 0;
+		ctx->eventmsg = 0;
+
+		/* make sure we don't get unwanted reports */
+		err = utrace_set_events(tracee, engine, UTRACE_EVENT(QUIESCE));
+		if (!err || err == -EINPROGRESS) {
+			ctx->resume = UTRACE_RESUME;
+			/* synchronize with ptrace_report_signal() */
+			err = utrace_barrier(tracee, engine);
+		}
+		WARN_ON(!err != (engine->ops == &ptrace_utrace_ops));
+
+		if (!err)
+			return engine;
+	}
+
+	utrace_engine_put(engine);
+	return ERR_PTR(err);
+}
+
+static struct utrace_engine *
+ptrace_attach_engine(struct task_struct *tracee)
+{
+	struct utrace_engine *engine;
+	struct ptrace_context *ctx;
+
+	if (unlikely(task_utrace_flags(tracee))) {
+		engine = ptrace_reuse_engine(tracee);
+		if (!IS_ERR(engine) || IS_ERR(engine) == -EPERM)
+			return engine;
+	}
+
+	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	if (unlikely(!ctx))
+		return ERR_PTR(-ENOMEM);
+
+	ctx->resume = UTRACE_RESUME;
+
+	engine = utrace_attach_task(tracee, UTRACE_ATTACH_CREATE |
+						UTRACE_ATTACH_EXCLUSIVE |
+						UTRACE_ATTACH_MATCH_OPS,
+						&ptrace_utrace_ops, ctx);
+	if (unlikely(IS_ERR(engine))) {
+		if (engine != ERR_PTR(-ESRCH) &&
+		    engine != ERR_PTR(-ERESTARTNOINTR))
+			engine = ERR_PTR(-EPERM);
+		kfree(ctx);
+	}
+
+	return engine;
+}
+
+static inline int ptrace_set_events(struct task_struct *target,
+					struct utrace_engine *engine,
+					unsigned long options)
+{
+	struct ptrace_context *ctx = ptrace_context(engine);
+	/*
+	 * We need QUIESCE for resume handling, CLONE to check
+	 * for CLONE_PTRACE, other events are always reported.
+	 */
+	unsigned long events = UTRACE_EVENT(QUIESCE) | UTRACE_EVENT(CLONE) |
+			       UTRACE_EVENT(EXEC) | UTRACE_EVENT_SIGNAL_ALL;
+
+	ctx->options = options;
+	if (options & PTRACE_O_TRACEEXIT)
+		events |= UTRACE_EVENT(EXIT);
+
+	return utrace_set_events(target, engine, events);
+}
+
+/*
+ * Attach a utrace engine for ptrace and set up its event mask.
+ * Returns error code or 0 on success.
+ */
+static int ptrace_attach_task(struct task_struct *tracee, int options)
+{
+	struct utrace_engine *engine;
+	int err;
+
+	engine = ptrace_attach_engine(tracee);
+	if (IS_ERR(engine))
+		return PTR_ERR(engine);
+	/*
+	 * It can fail only if the tracee is dead, the caller
+	 * must notice this before setting PT_UTRACED.
+	 */
+	err = ptrace_set_events(tracee, engine, options);
+	WARN_ON(err && !tracee->exit_state);
+	utrace_engine_put(engine);
+	return 0;
+}
+
+static int ptrace_wake_up(struct task_struct *tracee,
+				struct utrace_engine *engine,
+				enum utrace_resume_action action,
+				bool force_wakeup)
+{
+	if (force_wakeup) {
+		unsigned long flags;
+		/*
+		 * Preserve the compatibility bug. Historically ptrace
+		 * wakes up the tracee even if it should not. Clear
+		 * SIGNAL_STOP_STOPPED for utrace_wakeup().
+		 */
+		if (lock_task_sighand(tracee, &flags)) {
+			tracee->signal->flags &= ~SIGNAL_STOP_STOPPED;
+			unlock_task_sighand(tracee, &flags);
+		}
+	}
+
+	if (action != UTRACE_REPORT)
+		ptrace_context(engine)->stop_code = 0;
+
+	return utrace_control(tracee, engine, action);
+}
+
+static void ptrace_detach_task(struct task_struct *tracee, int sig)
+{
+	/*
+	 * If true, the caller is PTRACE_DETACH, otherwise
+	 * the tracer detaches implicitly during exit.
+	 */
+	bool voluntary = (sig >= 0);
+	struct utrace_engine *engine = ptrace_lookup_engine(tracee);
+	enum utrace_resume_action action = UTRACE_DETACH;
+
+	if (unlikely(IS_ERR(engine)))
+		return;
+
+	if (sig) {
+		struct ptrace_context *ctx = ptrace_context(engine);
+
+		switch (get_stop_event(ctx)) {
+		case PTRACE_EVENT_SYSCALL:
+			if (voluntary)
+				send_sig_info(sig, SEND_SIG_PRIV, tracee);
+			break;
+
+		case PTRACE_EVENT_SIGNAL:
+			if (voluntary)
+				ctx->signr = sig;
+			ctx->resume = UTRACE_DETACH;
+			action = UTRACE_RESUME;
+			break;
+		}
+	}
+
+	ptrace_wake_up(tracee, engine, action, voluntary);
+	utrace_engine_put(engine);
+}
+
+static void ptrace_abort_attach(struct task_struct *tracee)
+{
+	ptrace_detach_task(tracee, 0);
+}
+
+static u32 ptrace_report_exit(u32 action, struct utrace_engine *engine,
+			      long orig_code, long *code)
+{
+	struct ptrace_context *ctx = ptrace_context(engine);
+
+	WARN_ON(ptrace_event_pending(ctx) &&
+		!signal_group_exit(current->signal));
+
+	set_stop_code(ctx, PTRACE_EVENT_EXIT);
+	ctx->eventmsg = *code;
+
+	return UTRACE_STOP;
+}
+
+static void ptrace_clone_attach(struct task_struct *child,
+				int options)
+{
+	struct task_struct *parent = current;
+	struct task_struct *tracer;
+	bool abort = true;
+
+	if (unlikely(ptrace_attach_task(child, options))) {
+		WARN_ON(1);
+		return;
+	}
+
+	write_lock_irq(&tasklist_lock);
+	tracer = parent->parent;
+	if (!(tracer->flags & PF_EXITING) && parent->ptrace) {
+		child->ptrace = parent->ptrace;
+		__ptrace_link(child, tracer);
+		abort = false;
+	}
+	write_unlock_irq(&tasklist_lock);
+	if (unlikely(abort)) {
+		ptrace_abort_attach(child);
+		return;
+	}
+
+	sigaddset(&child->pending.signal, SIGSTOP);
+	set_tsk_thread_flag(child, TIF_SIGPENDING);
+}
+
+static u32 ptrace_report_clone(u32 action, struct utrace_engine *engine,
+			       unsigned long clone_flags,
+			       struct task_struct *child)
+{
+	struct ptrace_context *ctx = ptrace_context(engine);
+	int event = 0;
+
+	WARN_ON(ptrace_event_pending(ctx));
+
+	if (clone_flags & CLONE_UNTRACED) {
+		/* no events reported */
+	} else if (clone_flags & CLONE_VFORK) {
+		if (ctx->options & PTRACE_O_TRACEVFORK)
+			event = PTRACE_EVENT_VFORK;
+		else if (ctx->options & PTRACE_O_TRACEVFORKDONE)
+			event = PTRACE_EVENT_VFORK_DONE;
+	} else if ((clone_flags & CSIGNAL) != SIGCHLD) {
+		if (ctx->options & PTRACE_O_TRACECLONE)
+			event = PTRACE_EVENT_CLONE;
+	} else if (ctx->options & PTRACE_O_TRACEFORK) {
+		event = PTRACE_EVENT_FORK;
+	}
+	/*
+	 * Any of these reports implies auto-attaching the new child.
+	 * So does CLONE_PTRACE, even with no event to report.
+	 */
+	if ((event && event != PTRACE_EVENT_VFORK_DONE) ||
+				(clone_flags & CLONE_PTRACE))
+		ptrace_clone_attach(child, ctx->options);
+
+	if (!event)
+		return UTRACE_RESUME;
+
+	set_stop_code(ctx, event);
+	ctx->eventmsg = child->pid;
+	/*
+	 * We shouldn't stop now, inside the do_fork() path.
+	 * We will stop later, before return to user-mode.
+	 */
+	if (event == PTRACE_EVENT_VFORK_DONE)
+		return UTRACE_REPORT;
+	else
+		return UTRACE_STOP;
+}
+
+static inline void set_syscall_code(struct ptrace_context *ctx)
+{
+	set_stop_code(ctx, PTRACE_EVENT_SYSCALL);
+	if (ctx->options & PTRACE_O_TRACESYSGOOD)
+		ctx->stop_code |= 0x80;
+}
+
+static u32 ptrace_report_syscall_entry(u32 action, struct utrace_engine *engine,
+				       struct pt_regs *regs)
+{
+	struct ptrace_context *ctx = ptrace_context(engine);
+
+	if (action & UTRACE_SYSCALL_RESUMED) {
+		/*
+		 * We already reported the first time.
+		 * Nothing more to do now.
+		 */
+		if (unlikely(ctx->options & PTRACE_O_SYSEMU))
+			return UTRACE_SYSCALL_ABORT | UTRACE_REPORT;
+		return utrace_syscall_action(action) | UTRACE_RESUME;
+	}
+
+	WARN_ON(ptrace_event_pending(ctx));
+
+	set_syscall_code(ctx);
+
+	if (unlikely(ctx->options & PTRACE_O_SYSEMU))
+		return UTRACE_SYSCALL_ABORT | UTRACE_REPORT;
+	/*
+	 * Stop now to report.  We will get another callback after
+	 * we resume, with the UTRACE_SYSCALL_RESUMED flag set.
+	 */
+	return UTRACE_SYSCALL_RUN | UTRACE_STOP;
+}
+
+static u32 ptrace_report_syscall_exit(u32 action, struct utrace_engine *engine,
+				      struct pt_regs *regs)
+{
+	struct ptrace_context *ctx = ptrace_context(engine);
+
+	if (ptrace_event_pending(ctx))
+		return UTRACE_STOP;
+
+	if (ctx->resume != UTRACE_RESUME) {
+		WARN_ON(ctx->resume != UTRACE_BLOCKSTEP &&
+			ctx->resume != UTRACE_SINGLESTEP);
+		ctx->resume = UTRACE_RESUME;
+
+		ctx->signr = SIGTRAP;
+		return UTRACE_INTERRUPT;
+	}
+
+	set_syscall_code(ctx);
+	return UTRACE_STOP;
+}
+
+static u32 ptrace_report_exec(u32 action, struct utrace_engine *engine,
+			      const struct linux_binfmt *fmt,
+			      const struct linux_binprm *bprm,
+			      struct pt_regs *regs)
+{
+	struct ptrace_context *ctx = ptrace_context(engine);
+
+	WARN_ON(ptrace_event_pending(ctx));
+
+	if (!(ctx->options & PTRACE_O_TRACEEXEC)) {
+		/*
+		 * Old-fashioned ptrace'd exec just posts a plain signal.
+		 */
+		send_sig(SIGTRAP, current, 0);
+		return UTRACE_RESUME;
+	}
+
+	set_stop_code(ctx, PTRACE_EVENT_EXEC);
+	return UTRACE_STOP;
+}
+
+static enum utrace_signal_action resume_signal(struct ptrace_context *ctx,
+					       struct k_sigaction *return_ka)
+{
+	siginfo_t *info = ctx->siginfo;
+	int signr = ctx->signr;
+
+	ctx->siginfo = NULL;
+	ctx->signr = 0;
+
+	/* Did the debugger cancel the sig? */
+	if (!signr)
+		return UTRACE_SIGNAL_IGN;
+	/*
+	 * Update the siginfo structure if the signal has changed.
+	 * If the debugger wanted something specific in the siginfo
+	 * then it should have updated *info via PTRACE_SETSIGINFO.
+	 */
+	if (info->si_signo != signr) {
+		info->si_signo = signr;
+		info->si_errno = 0;
+		info->si_code = SI_USER;
+		info->si_pid = task_pid_vnr(current->parent);
+		info->si_uid = task_uid(current->parent);
+	}
+
+	/* If the (new) signal is now blocked, requeue it. */
+	if (sigismember(&current->blocked, signr)) {
+		send_sig_info(signr, info, current);
+		return UTRACE_SIGNAL_IGN;
+	}
+
+	spin_lock_irq(&current->sighand->siglock);
+	*return_ka = current->sighand->action[signr - 1];
+	spin_unlock_irq(&current->sighand->siglock);
+
+	return UTRACE_SIGNAL_DELIVER;
+}
+
+static u32 ptrace_report_signal(u32 action, struct utrace_engine *engine,
+				struct pt_regs *regs,
+				siginfo_t *info,
+				const struct k_sigaction *orig_ka,
+				struct k_sigaction *return_ka)
+{
+	struct ptrace_context *ctx = ptrace_context(engine);
+	enum utrace_resume_action resume = ctx->resume;
+
+	if (ptrace_event_pending(ctx)) {
+		action = utrace_signal_action(action);
+		WARN_ON(action != UTRACE_SIGNAL_REPORT);
+		return action | UTRACE_STOP;
+	}
+
+	switch (utrace_signal_action(action)) {
+	case UTRACE_SIGNAL_HANDLER:
+		if (WARN_ON(ctx->siginfo))
+			ctx->siginfo = NULL;
+
+		if (resume != UTRACE_RESUME) {
+			WARN_ON(resume != UTRACE_BLOCKSTEP &&
+				resume != UTRACE_SINGLESTEP);
+
+			set_stop_code(ctx, PTRACE_EVENT_SIGTRAP);
+			return UTRACE_STOP | UTRACE_SIGNAL_IGN;
+		}
+
+	case UTRACE_SIGNAL_REPORT:
+		if (!ctx->siginfo) {
+			if (ctx->signr) {
+				/* set by ptrace_resume(SYSCALL_EXIT) */
+				WARN_ON(ctx->signr != SIGTRAP);
+				user_single_step_siginfo(current, regs, info);
+				force_sig_info(SIGTRAP, info, current);
+			}
+
+			return resume | UTRACE_SIGNAL_IGN;
+		}
+
+		if (WARN_ON(ctx->siginfo != info))
+			return resume | UTRACE_SIGNAL_IGN;
+
+		return resume | resume_signal(ctx, return_ka);
+
+	default:
+		break;
+	}
+
+	WARN_ON(ctx->siginfo);
+	ctx->siginfo = info;
+	/*
+	 * ctx->siginfo points to the caller's stack.
+	 * Make sure the subsequent UTRACE_SIGNAL_REPORT clears
+	 * ->siginfo before return from get_signal_to_deliver().
+	 */
+	if (utrace_control(current, engine, UTRACE_INTERRUPT))
+		WARN_ON(1);
+
+	ctx->signr = info->si_signo;
+	ctx->stop_code = (PTRACE_EVENT_SIGNAL << 8) | ctx->signr;
+
+	return UTRACE_STOP | UTRACE_SIGNAL_IGN;
+}
+
+static u32 ptrace_report_quiesce(u32 action, struct utrace_engine *engine,
+				 unsigned long event)
+{
+	struct ptrace_context *ctx = ptrace_context(engine);
+
+	if (ptrace_event_pending(ctx))
+		return UTRACE_STOP;
+
+	return event ? UTRACE_RESUME : ctx->resume;
+}
+
+static void ptrace_release(void *data)
+{
+	kfree(data);
+}
+
+static const struct utrace_engine_ops ptrace_utrace_ops = {
+	.report_signal = ptrace_report_signal,
+	.report_quiesce = ptrace_report_quiesce,
+	.report_exec = ptrace_report_exec,
+	.report_exit = ptrace_report_exit,
+	.report_clone = ptrace_report_clone,
+	.report_syscall_entry = ptrace_report_syscall_entry,
+	.report_syscall_exit = ptrace_report_syscall_exit,
+	.release = ptrace_release,
+};
+
+int ptrace_check_attach(struct task_struct *child, int kill)
+{
+	struct utrace_engine *engine;
+	struct utrace_examiner exam;
+	int ret = -ESRCH;
+
+	engine = ptrace_lookup_engine(child);
+	if (IS_ERR(engine))
+		return ret;
+
+	if (child->parent != current)
+		goto out;
+
+	if (unlikely(kill))
+		ret = 0;
+
+	if (!task_is_stopped_or_traced(child))
+		goto out;
+	/*
+	 * Make sure our engine has already stopped the child.
+	 * Then wait for it to be off the CPU.
+	 */
+	if (!utrace_control(child, engine, UTRACE_STOP) &&
+	    !utrace_prepare_examine(child, engine, &exam))
+		ret = 0;
+out:
+	utrace_engine_put(engine);
+	return ret;
+}
+
+int ptrace_attach(struct task_struct *task)
+{
+	int retval;
+
+	audit_ptrace(task);
+
+	retval = -EPERM;
+	if (unlikely(task->flags & PF_KTHREAD))
+		goto out;
+	if (same_thread_group(task, current))
+		goto out;
+
+	/*
+	 * Protect exec's credential calculations against our interference;
+	 * interference; SUID, SGID and LSM creds get determined differently
+	 * under ptrace.
+	 */
+	retval = -ERESTARTNOINTR;
+	if (mutex_lock_interruptible(&task->cred_guard_mutex))
+		goto out;
+
+	task_lock(task);
+	retval = __ptrace_may_access(task, PTRACE_MODE_ATTACH);
+	task_unlock(task);
+	if (retval)
+		goto unlock_creds;
+
+	retval = ptrace_attach_task(task, 0);
+	if (unlikely(retval))
+		goto unlock_creds;
+
+	write_lock_irq(&tasklist_lock);
+	retval = -EPERM;
+	if (unlikely(task->exit_state))
+		goto unlock_tasklist;
+
+	BUG_ON(task->ptrace);
+	task->ptrace = PT_UTRACED;
+	if (capable(CAP_SYS_PTRACE))
+		task->ptrace |= PT_PTRACE_CAP;
+
+	__ptrace_link(task, current);
+	send_sig_info(SIGSTOP, SEND_SIG_FORCED, task);
+
+	retval = 0;
+unlock_tasklist:
+	write_unlock_irq(&tasklist_lock);
+unlock_creds:
+	mutex_unlock(&task->cred_guard_mutex);
+out:
+	return retval;
+}
+
+/*
+ * Performs checks and sets PT_UTRACED.
+ * Should be used by all ptrace implementations for PTRACE_TRACEME.
+ */
+int ptrace_traceme(void)
+{
+	bool detach = true;
+	int ret = ptrace_attach_task(current, 0);
+
+	if (unlikely(ret))
+		return ret;
+
+	ret = -EPERM;
+	write_lock_irq(&tasklist_lock);
+	BUG_ON(current->ptrace);
+	ret = security_ptrace_traceme(current->parent);
+	/*
+	 * Check PF_EXITING to ensure ->real_parent has not passed
+	 * exit_ptrace(). Otherwise we don't report the error but
+	 * pretend ->real_parent untraces us right after return.
+	 */
+	if (!ret && !(current->real_parent->flags & PF_EXITING)) {
+		current->ptrace = PT_UTRACED;
+		__ptrace_link(current, current->real_parent);
+		detach = false;
+	}
+	write_unlock_irq(&tasklist_lock);
+
+	if (detach)
+		ptrace_abort_attach(current);
+	return ret;
+}
+
+static void ptrace_do_detach(struct task_struct *tracee, unsigned int data)
+{
+	bool detach, release;
+
+	write_lock_irq(&tasklist_lock);
+	/*
+	 * This tracee can be already killed. Make sure de_thread() or
+	 * our sub-thread doing do_wait() didn't do release_task() yet.
+	 */
+	detach = tracee->ptrace != 0;
+	release = false;
+	if (likely(detach))
+		release = __ptrace_detach(current, tracee);
+	write_unlock_irq(&tasklist_lock);
+
+	if (unlikely(release))
+		release_task(tracee);
+	else if (likely(detach))
+		ptrace_detach_task(tracee, data);
+}
+
+int ptrace_detach(struct task_struct *child, unsigned int data)
+{
+	if (!valid_signal(data))
+		return -EIO;
+
+	ptrace_do_detach(child, data);
+
+	return 0;
+}
+
+/*
+ * Detach all tasks we were using ptrace on.
+ */
+void exit_ptrace(struct task_struct *tracer)
+{
+	for (;;) {
+		struct task_struct *tracee = NULL;
+
+		read_lock(&tasklist_lock);
+		if (!list_empty(&tracer->ptraced)) {
+			tracee = list_first_entry(&tracer->ptraced,
+					struct task_struct, ptrace_entry);
+			get_task_struct(tracee);
+		}
+		read_unlock(&tasklist_lock);
+		if (!tracee)
+			break;
+
+		ptrace_do_detach(tracee, -1);
+		put_task_struct(tracee);
+	}
+}
+
+static int ptrace_set_options(struct task_struct *tracee,
+				struct utrace_engine *engine, long data)
+{
+	BUILD_BUG_ON(PTRACE_O_MASK & PTRACE_O_SYSEMU);
+
+	ptrace_set_events(tracee, engine, data & PTRACE_O_MASK);
+	return (data & ~PTRACE_O_MASK) ? -EINVAL : 0;
+}
+
+static int ptrace_rw_siginfo(struct task_struct *tracee,
+				struct ptrace_context *ctx,
+				siginfo_t *info, bool write)
+{
+	unsigned long flags;
+	int err;
+
+	switch (get_stop_event(ctx)) {
+	case 0: /* jctl stop */
+		return -EINVAL;
+
+	case PTRACE_EVENT_SIGNAL:
+		err = -ESRCH;
+		if (lock_task_sighand(tracee, &flags)) {
+			if (likely(task_is_traced(tracee))) {
+				if (write)
+					*ctx->siginfo = *info;
+				else
+					*info = *ctx->siginfo;
+				err = 0;
+			}
+			unlock_task_sighand(tracee, &flags);
+		}
+
+		return err;
+
+	default:
+		if (!write) {
+			memset(info, 0, sizeof(*info));
+			info->si_signo = SIGTRAP;
+			info->si_code = ctx->stop_code & PTRACE_EVENT_MASK;
+			info->si_pid = task_pid_vnr(tracee);
+			info->si_uid = task_uid(tracee);
+		}
+
+		return 0;
+	}
+}
+
+static void do_ptrace_notify_stop(struct ptrace_context *ctx,
+					struct task_struct *tracee)
+{
+	/*
+	 * This can race with SIGKILL, but we borrow this race from
+	 * the old ptrace implementation. ->exit_code is only needed
+	 * for wait_task_stopped()->task_stopped_code(), we should
+	 * change it to use ptrace_context.
+	 */
+	tracee->exit_code = ctx->stop_code & PTRACE_EVENT_MASK;
+	WARN_ON(!tracee->exit_code);
+
+	read_lock(&tasklist_lock);
+	/*
+	 * Don't want to allow preemption here, because
+	 * sys_ptrace() needs this task to be inactive.
+	 */
+	preempt_disable();
+	/*
+	 * It can be killed and then released by our subthread,
+	 * or ptrace_attach() has not completed yet.
+	 */
+	if (task_ptrace(tracee))
+		do_notify_parent_cldstop(tracee, CLD_TRAPPED);
+	read_unlock(&tasklist_lock);
+	preempt_enable_no_resched();
+}
+
+void ptrace_notify_stop(struct task_struct *tracee)
+{
+	struct utrace_engine *engine = ptrace_lookup_engine(tracee);
+
+	if (IS_ERR(engine))
+		return;
+
+	do_ptrace_notify_stop(ptrace_context(engine), tracee);
+	utrace_engine_put(engine);
+}
+
+static int ptrace_resume_action(struct task_struct *tracee,
+				struct utrace_engine *engine, long request)
+{
+	struct ptrace_context *ctx = ptrace_context(engine);
+	unsigned long events;
+	int action;
+
+	ctx->options &= ~PTRACE_O_SYSEMU;
+	events = engine->flags & ~UTRACE_EVENT_SYSCALL;
+	action = UTRACE_RESUME;
+
+	switch (request) {
+#ifdef PTRACE_SINGLEBLOCK
+	case PTRACE_SINGLEBLOCK:
+		if (unlikely(!arch_has_block_step()))
+			return -EIO;
+		action = UTRACE_BLOCKSTEP;
+		events |= UTRACE_EVENT(SYSCALL_EXIT);
+		break;
+#endif
+
+#ifdef PTRACE_SINGLESTEP
+	case PTRACE_SINGLESTEP:
+		if (unlikely(!arch_has_single_step()))
+			return -EIO;
+		action = UTRACE_SINGLESTEP;
+		events |= UTRACE_EVENT(SYSCALL_EXIT);
+		break;
+#endif
+
+#ifdef PTRACE_SYSEMU
+	case PTRACE_SYSEMU_SINGLESTEP:
+		if (unlikely(!arch_has_single_step()))
+			return -EIO;
+		action = UTRACE_SINGLESTEP;
+	case PTRACE_SYSEMU:
+		ctx->options |= PTRACE_O_SYSEMU;
+		events |= UTRACE_EVENT(SYSCALL_ENTRY);
+		break;
+#endif
+
+	case PTRACE_SYSCALL:
+		events |= UTRACE_EVENT_SYSCALL;
+		break;
+
+	case PTRACE_CONT:
+		break;
+	default:
+		return -EIO;
+	}
+
+	if (events != engine->flags &&
+	    utrace_set_events(tracee, engine, events))
+		return -ESRCH;
+
+	return action;
+}
+
+static int ptrace_resume(struct task_struct *tracee,
+				struct utrace_engine *engine,
+				long request, long data)
+{
+	struct ptrace_context *ctx = ptrace_context(engine);
+	int action;
+
+	if (!valid_signal(data))
+		return -EIO;
+
+	action = ptrace_resume_action(tracee, engine, request);
+	if (action < 0)
+		return action;
+
+	switch (get_stop_event(ctx)) {
+	case PTRACE_EVENT_VFORK:
+		if (ctx->options & PTRACE_O_TRACEVFORKDONE) {
+			set_stop_code(ctx, PTRACE_EVENT_VFORK_DONE);
+			action = UTRACE_REPORT;
+		}
+		break;
+
+	case PTRACE_EVENT_EXEC:
+	case PTRACE_EVENT_FORK:
+	case PTRACE_EVENT_CLONE:
+	case PTRACE_EVENT_VFORK_DONE:
+		if (request == PTRACE_SYSCALL) {
+			set_syscall_code(ctx);
+			do_ptrace_notify_stop(ctx, tracee);
+			return 0;
+		}
+
+		if (action != UTRACE_RESUME) {
+			/*
+			 * single-stepping. UTRACE_SIGNAL_REPORT will
+			 * synthesize a trap to follow the syscall insn.
+			*/
+			ctx->signr = SIGTRAP;
+			action = UTRACE_INTERRUPT;
+		}
+		break;
+
+	case PTRACE_EVENT_SYSCALL:
+		if (data)
+			send_sig_info(data, SEND_SIG_PRIV, tracee);
+		break;
+
+	case PTRACE_EVENT_SIGNAL:
+		ctx->signr = data;
+		break;
+	}
+
+	ctx->resume = action;
+	ptrace_wake_up(tracee, engine, action, true);
+	return 0;
+}
+
+int ptrace_request(struct task_struct *child, long request,
+		   long addr, long data)
+{
+	struct utrace_engine *engine = ptrace_lookup_engine(child);
+	siginfo_t siginfo;
+	int ret;
+
+	if (unlikely(IS_ERR(engine)))
+		return -ESRCH;
+
+	switch (request) {
+	case PTRACE_PEEKTEXT:
+	case PTRACE_PEEKDATA:
+		ret = generic_ptrace_peekdata(child, addr, data);
+		break;
+	case PTRACE_POKETEXT:
+	case PTRACE_POKEDATA:
+		ret = generic_ptrace_pokedata(child, addr, data);
+		break;
+
+#ifdef PTRACE_OLDSETOPTIONS
+	case PTRACE_OLDSETOPTIONS:
+#endif
+	case PTRACE_SETOPTIONS:
+		ret = ptrace_set_options(child, engine, data);
+		break;
+	case PTRACE_GETEVENTMSG:
+		ret = put_user(ptrace_context(engine)->eventmsg,
+				(unsigned long __user *) data);
+		break;
+
+	case PTRACE_GETSIGINFO:
+		ret = ptrace_rw_siginfo(child, ptrace_context(engine),
+					&siginfo, false);
+		if (!ret)
+			ret = copy_siginfo_to_user((siginfo_t __user *) data,
+						   &siginfo);
+		break;
+
+	case PTRACE_SETSIGINFO:
+		if (copy_from_user(&siginfo, (siginfo_t __user *) data,
+				   sizeof siginfo))
+			ret = -EFAULT;
+		else
+			ret = ptrace_rw_siginfo(child, ptrace_context(engine),
+						&siginfo, true);
+		break;
+
+	case PTRACE_DETACH:	 /* detach a process that was attached. */
+		ret = ptrace_detach(child, data);
+		break;
+
+	case PTRACE_KILL:
+		/* Ugly historical behaviour. */
+		if (task_is_traced(child))
+			ptrace_resume(child, engine, PTRACE_CONT, SIGKILL);
+		ret = 0;
+		break;
+
+	default:
+		ret = ptrace_resume(child, engine, request, data);
+		break;
+	}
+
+	utrace_engine_put(engine);
+	return ret;
+}
+
+#if defined CONFIG_COMPAT
+#include <linux/compat.h>
+
+int compat_ptrace_request(struct task_struct *child, compat_long_t request,
+			  compat_ulong_t addr, compat_ulong_t data)
+{
+	struct utrace_engine *engine = ptrace_lookup_engine(child);
+	compat_ulong_t __user *datap = compat_ptr(data);
+	compat_ulong_t word;
+	siginfo_t siginfo;
+	int ret;
+
+	if (unlikely(IS_ERR(engine)))
+		return -ESRCH;
+
+	switch (request) {
+	case PTRACE_PEEKTEXT:
+	case PTRACE_PEEKDATA:
+		ret = access_process_vm(child, addr, &word, sizeof(word), 0);
+		if (ret != sizeof(word))
+			ret = -EIO;
+		else
+			ret = put_user(word, datap);
+		break;
+
+	case PTRACE_POKETEXT:
+	case PTRACE_POKEDATA:
+		ret = access_process_vm(child, addr, &data, sizeof(data), 1);
+		ret = (ret != sizeof(data) ? -EIO : 0);
+		break;
+
+	case PTRACE_GETEVENTMSG:
+		ret = put_user((compat_ulong_t)ptrace_context(engine)->eventmsg,
+				datap);
+		break;
+
+	case PTRACE_GETSIGINFO:
+		ret = ptrace_rw_siginfo(child, ptrace_context(engine),
+					&siginfo, false);
+		if (!ret)
+			ret = copy_siginfo_to_user32(
+				(struct compat_siginfo __user *) datap,
+				&siginfo);
+		break;
+
+	case PTRACE_SETSIGINFO:
+		memset(&siginfo, 0, sizeof siginfo);
+		if (copy_siginfo_from_user32(
+			    &siginfo, (struct compat_siginfo __user *) datap))
+			ret = -EFAULT;
+		else
+			ret = ptrace_rw_siginfo(child, ptrace_context(engine),
+						&siginfo, true);
+		break;
+
+	default:
+		ret = ptrace_request(child, request, addr, data);
+	}
+
+	utrace_engine_put(engine);
+	return ret;
+}
+#endif	/* CONFIG_COMPAT */
diff --git a/kernel/ptrace.c b/kernel/ptrace.c
index a408bf7..4e87441 100644  
--- a/kernel/ptrace.c
+++ b/kernel/ptrace.c
@@ -16,7 +16,6 @@
 #include <linux/pagemap.h>
 #include <linux/smp_lock.h>
 #include <linux/ptrace.h>
-#include <linux/utrace.h>
 #include <linux/security.h>
 #include <linux/signal.h>
 #include <linux/audit.h>
@@ -24,7 +23,286 @@
 #include <linux/syscalls.h>
 #include <linux/uaccess.h>
 
+int __ptrace_may_access(struct task_struct *task, unsigned int mode)
+{
+	const struct cred *cred = current_cred(), *tcred;
+
+	/* May we inspect the given task?
+	 * This check is used both for attaching with ptrace
+	 * and for allowing access to sensitive information in /proc.
+	 *
+	 * ptrace_attach denies several cases that /proc allows
+	 * because setting up the necessary parent/child relationship
+	 * or halting the specified task is impossible.
+	 */
+	int dumpable = 0;
+	/* Don't let security modules deny introspection */
+	if (task == current)
+		return 0;
+	rcu_read_lock();
+	tcred = __task_cred(task);
+	if ((cred->uid != tcred->euid ||
+	     cred->uid != tcred->suid ||
+	     cred->uid != tcred->uid  ||
+	     cred->gid != tcred->egid ||
+	     cred->gid != tcred->sgid ||
+	     cred->gid != tcred->gid) &&
+	    !capable(CAP_SYS_PTRACE)) {
+		rcu_read_unlock();
+		return -EPERM;
+	}
+	rcu_read_unlock();
+	smp_rmb();
+	if (task->mm)
+		dumpable = get_dumpable(task->mm);
+	if (!dumpable && !capable(CAP_SYS_PTRACE))
+		return -EPERM;
+
+	return security_ptrace_access_check(task, mode);
+}
+
+bool ptrace_may_access(struct task_struct *task, unsigned int mode)
+{
+	int err;
+	task_lock(task);
+	err = __ptrace_may_access(task, mode);
+	task_unlock(task);
+	return !err;
+}
+
+/*
+ * Called with irqs disabled, returns true if childs should reap themselves.
+ */
+static int ignoring_children(struct sighand_struct *sigh)
+{
+	int ret;
+	spin_lock(&sigh->siglock);
+	ret = (sigh->action[SIGCHLD-1].sa.sa_handler == SIG_IGN) ||
+	      (sigh->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDWAIT);
+	spin_unlock(&sigh->siglock);
+	return ret;
+}
+
+/*
+ * Called with tasklist_lock held for writing.
+ * Unlink a traced task, and clean it up if it was a traced zombie.
+ * Return true if it needs to be reaped with release_task().
+ * (We can't call release_task() here because we already hold tasklist_lock.)
+ *
+ * If it's a zombie, our attachedness prevented normal parent notification
+ * or self-reaping.  Do notification now if it would have happened earlier.
+ * If it should reap itself, return true.
+ *
+ * If it's our own child, there is no notification to do. But if our normal
+ * children self-reap, then this child was prevented by ptrace and we must
+ * reap it now, in that case we must also wake up sub-threads sleeping in
+ * do_wait().
+ */
+bool __ptrace_detach(struct task_struct *tracer, struct task_struct *p)
+{
+	__ptrace_unlink(p);
+
+	if (p->exit_state == EXIT_ZOMBIE) {
+		if (!task_detached(p) && thread_group_empty(p)) {
+			if (!same_thread_group(p->real_parent, tracer))
+				do_notify_parent(p, p->exit_signal);
+			else if (ignoring_children(tracer->sighand)) {
+				__wake_up_parent(p, tracer);
+				p->exit_signal = -1;
+			}
+		}
+		if (task_detached(p)) {
+			/* Mark it as in the process of being reaped. */
+			p->exit_state = EXIT_DEAD;
+			return true;
+		}
+	}
+
+	return false;
+}
+
+int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len)
+{
+	int copied = 0;
+
+	while (len > 0) {
+		char buf[128];
+		int this_len, retval;
+
+		this_len = (len > sizeof(buf)) ? sizeof(buf) : len;
+		retval = access_process_vm(tsk, src, buf, this_len, 0);
+		if (!retval) {
+			if (copied)
+				break;
+			return -EIO;
+		}
+		if (copy_to_user(dst, buf, retval))
+			return -EFAULT;
+		copied += retval;
+		src += retval;
+		dst += retval;
+		len -= retval;
+	}
+	return copied;
+}
+
+int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len)
+{
+	int copied = 0;
+
+	while (len > 0) {
+		char buf[128];
+		int this_len, retval;
+
+		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)
+				break;
+			return -EIO;
+		}
+		copied += retval;
+		src += retval;
+		dst += retval;
+		len -= retval;
+	}
+	return copied;
+}
+
+static struct task_struct *ptrace_get_task_struct(pid_t pid)
+{
+	struct task_struct *child;
+
+	rcu_read_lock();
+	child = find_task_by_vpid(pid);
+	if (child)
+		get_task_struct(child);
+	rcu_read_unlock();
+
+	if (!child)
+		return ERR_PTR(-ESRCH);
+	return child;
+}
+
+#ifndef arch_ptrace_attach
+#define arch_ptrace_attach(child)	do { } while (0)
+#endif
 
+SYSCALL_DEFINE4(ptrace, long, request, long, pid, long, addr, long, data)
+{
+	struct task_struct *child;
+	long ret;
+
+	/*
+	 * This lock_kernel fixes a subtle race with suid exec
+	 */
+	lock_kernel();
+	if (request == PTRACE_TRACEME) {
+		ret = ptrace_traceme();
+		if (!ret)
+			arch_ptrace_attach(current);
+		goto out;
+	}
+
+	child = ptrace_get_task_struct(pid);
+	if (IS_ERR(child)) {
+		ret = PTR_ERR(child);
+		goto out;
+	}
+
+	if (request == PTRACE_ATTACH) {
+		ret = ptrace_attach(child);
+		/*
+		 * Some architectures need to do book-keeping after
+		 * a ptrace attach.
+		 */
+		if (!ret)
+			arch_ptrace_attach(child);
+		goto out_put_task_struct;
+	}
+
+	ret = ptrace_check_attach(child, request == PTRACE_KILL);
+	if (ret < 0)
+		goto out_put_task_struct;
+
+	ret = arch_ptrace(child, request, addr, data);
+
+ out_put_task_struct:
+	put_task_struct(child);
+ out:
+	unlock_kernel();
+	return ret;
+}
+
+int generic_ptrace_peekdata(struct task_struct *tsk, long addr, long data)
+{
+	unsigned long tmp;
+	int copied;
+
+	copied = access_process_vm(tsk, addr, &tmp, sizeof(tmp), 0);
+	if (copied != sizeof(tmp))
+		return -EIO;
+	return put_user(tmp, (unsigned long __user *)data);
+}
+
+int generic_ptrace_pokedata(struct task_struct *tsk, long addr, long data)
+{
+	int copied;
+
+	copied = access_process_vm(tsk, addr, &data, sizeof(data), 1);
+	return (copied == sizeof(data)) ? 0 : -EIO;
+}
+
+#if defined CONFIG_COMPAT
+#include <linux/compat.h>
+
+asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid,
+				  compat_long_t addr, compat_long_t data)
+{
+	struct task_struct *child;
+	long ret;
+
+	/*
+	 * This lock_kernel fixes a subtle race with suid exec
+	 */
+	lock_kernel();
+	if (request == PTRACE_TRACEME) {
+		ret = ptrace_traceme();
+		goto out;
+	}
+
+	child = ptrace_get_task_struct(pid);
+	if (IS_ERR(child)) {
+		ret = PTR_ERR(child);
+		goto out;
+	}
+
+	if (request == PTRACE_ATTACH) {
+		ret = ptrace_attach(child);
+		/*
+		 * Some architectures need to do book-keeping after
+		 * a ptrace attach.
+		 */
+		if (!ret)
+			arch_ptrace_attach(child);
+		goto out_put_task_struct;
+	}
+
+	ret = ptrace_check_attach(child, request == PTRACE_KILL);
+	if (!ret)
+		ret = compat_arch_ptrace(child, request, addr, data);
+
+ out_put_task_struct:
+	put_task_struct(child);
+ out:
+	unlock_kernel();
+	return ret;
+}
+#endif	/* CONFIG_COMPAT */
+
+#ifndef CONFIG_UTRACE
 /*
  * ptrace a task: make the debugger its new parent and
  * move it to the ptrace list.
@@ -101,76 +379,21 @@ int ptrace_check_attach(struct task_stru
 		/*
 		 * child->sighand can't be NULL, release_task()
 		 * does ptrace_unlink() before __exit_signal().
-		 */
-		spin_lock_irq(&child->sighand->siglock);
-		if (task_is_stopped(child))
-			child->state = TASK_TRACED;
-		else if (!task_is_traced(child) && !kill)
-			ret = -ESRCH;
-		spin_unlock_irq(&child->sighand->siglock);
-	}
-	read_unlock(&tasklist_lock);
-
-	if (!ret && !kill)
-		ret = wait_task_inactive(child, TASK_TRACED) ? 0 : -ESRCH;
-
-	/* All systems go.. */
-	return ret;
-}
-
-int __ptrace_may_access(struct task_struct *task, unsigned int mode)
-{
-	const struct cred *cred = current_cred(), *tcred;
-
-	/* May we inspect the given task?
-	 * This check is used both for attaching with ptrace
-	 * and for allowing access to sensitive information in /proc.
-	 *
-	 * ptrace_attach denies several cases that /proc allows
-	 * because setting up the necessary parent/child relationship
-	 * or halting the specified task is impossible.
-	 */
-	int dumpable = 0;
-	/* Don't let security modules deny introspection */
-	if (task == current)
-		return 0;
-	rcu_read_lock();
-	tcred = __task_cred(task);
-	if ((cred->uid != tcred->euid ||
-	     cred->uid != tcred->suid ||
-	     cred->uid != tcred->uid  ||
-	     cred->gid != tcred->egid ||
-	     cred->gid != tcred->sgid ||
-	     cred->gid != tcred->gid) &&
-	    !capable(CAP_SYS_PTRACE)) {
-		rcu_read_unlock();
-		return -EPERM;
-	}
-	rcu_read_unlock();
-	smp_rmb();
-	if (task->mm)
-		dumpable = get_dumpable(task->mm);
-	if (!dumpable && !capable(CAP_SYS_PTRACE))
-		return -EPERM;
-
-	return security_ptrace_access_check(task, mode);
-}
+		 */
+		spin_lock_irq(&child->sighand->siglock);
+		if (task_is_stopped(child))
+			child->state = TASK_TRACED;
+		else if (!task_is_traced(child) && !kill)
+			ret = -ESRCH;
+		spin_unlock_irq(&child->sighand->siglock);
+	}
+	read_unlock(&tasklist_lock);
 
-bool ptrace_may_access(struct task_struct *task, unsigned int mode)
-{
-	int err;
-	task_lock(task);
-	err = __ptrace_may_access(task, mode);
-	task_unlock(task);
-	return !err;
-}
+	if (!ret && !kill)
+		ret = wait_task_inactive(child, TASK_TRACED) ? 0 : -ESRCH;
 
-/*
- * For experimental use of utrace, exclude ptrace on the same task.
- */
-static inline bool exclude_ptrace(struct task_struct *task)
-{
-	return unlikely(!!task_utrace_flags(task));
+	/* All systems go.. */
+	return ret;
 }
 
 int ptrace_attach(struct task_struct *task)
@@ -196,8 +419,6 @@ int ptrace_attach(struct task_struct *ta
 
 	task_lock(task);
 	retval = __ptrace_may_access(task, PTRACE_MODE_ATTACH);
-	if (!retval && exclude_ptrace(task))
-		retval = -EBUSY;
 	task_unlock(task);
 	if (retval)
 		goto unlock_creds;
@@ -235,9 +456,6 @@ int ptrace_traceme(void)
 {
 	int ret = -EPERM;
 
-	if (exclude_ptrace(current)) /* XXX locking */
-		return -EBUSY;
-
 	write_lock_irq(&tasklist_lock);
 	/* Are we already being traced? */
 	if (!current->ptrace) {
@@ -257,57 +475,6 @@ int ptrace_traceme(void)
 	return ret;
 }
 
-/*
- * Called with irqs disabled, returns true if childs should reap themselves.
- */
-static int ignoring_children(struct sighand_struct *sigh)
-{
-	int ret;
-	spin_lock(&sigh->siglock);
-	ret = (sigh->action[SIGCHLD-1].sa.sa_handler == SIG_IGN) ||
-	      (sigh->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDWAIT);
-	spin_unlock(&sigh->siglock);
-	return ret;
-}
-
-/*
- * Called with tasklist_lock held for writing.
- * Unlink a traced task, and clean it up if it was a traced zombie.
- * Return true if it needs to be reaped with release_task().
- * (We can't call release_task() here because we already hold tasklist_lock.)
- *
- * If it's a zombie, our attachedness prevented normal parent notification
- * or self-reaping.  Do notification now if it would have happened earlier.
- * If it should reap itself, return true.
- *
- * If it's our own child, there is no notification to do. But if our normal
- * children self-reap, then this child was prevented by ptrace and we must
- * reap it now, in that case we must also wake up sub-threads sleeping in
- * do_wait().
- */
-bool __ptrace_detach(struct task_struct *tracer, struct task_struct *p)
-{
-	__ptrace_unlink(p);
-
-	if (p->exit_state == EXIT_ZOMBIE) {
-		if (!task_detached(p) && thread_group_empty(p)) {
-			if (!same_thread_group(p->real_parent, tracer))
-				do_notify_parent(p, p->exit_signal);
-			else if (ignoring_children(tracer->sighand)) {
-				__wake_up_parent(p, tracer);
-				p->exit_signal = -1;
-			}
-		}
-		if (task_detached(p)) {
-			/* Mark it as in the process of being reaped. */
-			p->exit_state = EXIT_DEAD;
-			return true;
-		}
-	}
-
-	return false;
-}
-
 int ptrace_detach(struct task_struct *child, unsigned int data)
 {
 	bool dead = false;
@@ -361,56 +528,6 @@ void exit_ptrace(struct task_struct *tra
 	}
 }
 
-int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len)
-{
-	int copied = 0;
-
-	while (len > 0) {
-		char buf[128];
-		int this_len, retval;
-
-		this_len = (len > sizeof(buf)) ? sizeof(buf) : len;
-		retval = access_process_vm(tsk, src, buf, this_len, 0);
-		if (!retval) {
-			if (copied)
-				break;
-			return -EIO;
-		}
-		if (copy_to_user(dst, buf, retval))
-			return -EFAULT;
-		copied += retval;
-		src += retval;
-		dst += retval;
-		len -= retval;
-	}
-	return copied;
-}
-
-int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len)
-{
-	int copied = 0;
-
-	while (len > 0) {
-		char buf[128];
-		int this_len, retval;
-
-		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)
-				break;
-			return -EIO;
-		}
-		copied += retval;
-		src += retval;
-		dst += retval;
-		len -= retval;
-	}
-	return copied;
-}
-
 static int ptrace_setoptions(struct task_struct *child, long data)
 {
 	child->ptrace &= ~PT_TRACE_MASK;
@@ -594,93 +710,7 @@ int ptrace_request(struct task_struct *c
 	return ret;
 }
 
-static struct task_struct *ptrace_get_task_struct(pid_t pid)
-{
-	struct task_struct *child;
-
-	rcu_read_lock();
-	child = find_task_by_vpid(pid);
-	if (child)
-		get_task_struct(child);
-	rcu_read_unlock();
-
-	if (!child)
-		return ERR_PTR(-ESRCH);
-	return child;
-}
-
-#ifndef arch_ptrace_attach
-#define arch_ptrace_attach(child)	do { } while (0)
-#endif
-
-SYSCALL_DEFINE4(ptrace, long, request, long, pid, long, addr, long, data)
-{
-	struct task_struct *child;
-	long ret;
-
-	/*
-	 * This lock_kernel fixes a subtle race with suid exec
-	 */
-	lock_kernel();
-	if (request == PTRACE_TRACEME) {
-		ret = ptrace_traceme();
-		if (!ret)
-			arch_ptrace_attach(current);
-		goto out;
-	}
-
-	child = ptrace_get_task_struct(pid);
-	if (IS_ERR(child)) {
-		ret = PTR_ERR(child);
-		goto out;
-	}
-
-	if (request == PTRACE_ATTACH) {
-		ret = ptrace_attach(child);
-		/*
-		 * Some architectures need to do book-keeping after
-		 * a ptrace attach.
-		 */
-		if (!ret)
-			arch_ptrace_attach(child);
-		goto out_put_task_struct;
-	}
-
-	ret = ptrace_check_attach(child, request == PTRACE_KILL);
-	if (ret < 0)
-		goto out_put_task_struct;
-
-	ret = arch_ptrace(child, request, addr, data);
-
- out_put_task_struct:
-	put_task_struct(child);
- out:
-	unlock_kernel();
-	return ret;
-}
-
-int generic_ptrace_peekdata(struct task_struct *tsk, long addr, long data)
-{
-	unsigned long tmp;
-	int copied;
-
-	copied = access_process_vm(tsk, addr, &tmp, sizeof(tmp), 0);
-	if (copied != sizeof(tmp))
-		return -EIO;
-	return put_user(tmp, (unsigned long __user *)data);
-}
-
-int generic_ptrace_pokedata(struct task_struct *tsk, long addr, long data)
-{
-	int copied;
-
-	copied = access_process_vm(tsk, addr, &data, sizeof(data), 1);
-	return (copied == sizeof(data)) ? 0 : -EIO;
-}
-
 #if defined CONFIG_COMPAT
-#include <linux/compat.h>
-
 int compat_ptrace_request(struct task_struct *child, compat_long_t request,
 			  compat_ulong_t addr, compat_ulong_t data)
 {
@@ -732,47 +762,5 @@ int compat_ptrace_request(struct task_st
 
 	return ret;
 }
-
-asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid,
-				  compat_long_t addr, compat_long_t data)
-{
-	struct task_struct *child;
-	long ret;
-
-	/*
-	 * This lock_kernel fixes a subtle race with suid exec
-	 */
-	lock_kernel();
-	if (request == PTRACE_TRACEME) {
-		ret = ptrace_traceme();
-		goto out;
-	}
-
-	child = ptrace_get_task_struct(pid);
-	if (IS_ERR(child)) {
-		ret = PTR_ERR(child);
-		goto out;
-	}
-
-	if (request == PTRACE_ATTACH) {
-		ret = ptrace_attach(child);
-		/*
-		 * Some architectures need to do book-keeping after
-		 * a ptrace attach.
-		 */
-		if (!ret)
-			arch_ptrace_attach(child);
-		goto out_put_task_struct;
-	}
-
-	ret = ptrace_check_attach(child, request == PTRACE_KILL);
-	if (!ret)
-		ret = compat_arch_ptrace(child, request, addr, data);
-
- out_put_task_struct:
-	put_task_struct(child);
- out:
-	unlock_kernel();
-	return ret;
-}
 #endif	/* CONFIG_COMPAT */
+#endif	/* CONFIG_UTRACE */
diff --git a/kernel/utrace.c b/kernel/utrace.c
index 84d965d..ead1f13 100644  
--- a/kernel/utrace.c
+++ b/kernel/utrace.c
@@ -811,6 +811,22 @@ relock:
 	spin_unlock_irq(&task->sighand->siglock);
 	spin_unlock(&utrace->lock);
 
+	/*
+	 * If ptrace is among the reasons for this stop, do its
+	 * notification now.  This could not just be done in
+	 * ptrace's own event report callbacks because it has to
+	 * be done after we are in TASK_TRACED.  This makes the
+	 * synchronization with ptrace_do_wait() work right.
+	 *
+	 * It's only because of the bad old overloading of the do_wait()
+	 * logic for handling ptrace stops that we need this special case
+	 * here.  One day we will clean up ptrace so it does not need to
+	 * work this way.  New things that are designed sensibly don't need
+	 * a wakeup that synchronizes with tasklist_lock and ->state, so
+	 * the proper utrace API does not try to support this weirdness.
+	 */
+	ptrace_notify_stop(task);
+
 	schedule();
 
 	utrace_finish_stop();

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

--- NEW FILE linux-2.6.30-hush-rom-warning.patch ---
diff -up linux-2.6.30.noarch/drivers/pci/setup-res.c.jx linux-2.6.30.noarch/drivers/pci/setup-res.c
--- linux-2.6.30.noarch/drivers/pci/setup-res.c.jx	2009-07-27 17:56:13.000000000 -0400
+++ linux-2.6.30.noarch/drivers/pci/setup-res.c	2009-07-27 17:58:25.000000000 -0400
@@ -101,6 +101,7 @@ int pci_claim_resource(struct pci_dev *d
 	struct resource *res = &dev->resource[resource];
 	struct resource *root;
 	int err;
+	const char *dtype = resource < PCI_BRIDGE_RESOURCES ? "device" : "bridge";
 
 	root = pci_find_parent_resource(dev, res);
 
@@ -108,8 +109,13 @@ int pci_claim_resource(struct pci_dev *d
 	if (root != NULL)
 		err = request_resource(root, res);
 
-	if (err) {
-		const char *dtype = resource < PCI_BRIDGE_RESOURCES ? "device" : "bridge";
+	if (err && resource == 6) {
+		dev_info(&dev->dev, "BAR %d: %s of %s %pR\n",
+			resource,
+			root ? "address space collision on" :
+				"no parent found for",
+			dtype, res);
+	} else if (err) {
 		dev_err(&dev->dev, "BAR %d: %s of %s %pR\n",
 			resource,
 			root ? "address space collision on" :

linux-2.6.30-no-pcspkr-modalias.patch:
 pcspkr.c |    1 -
 1 file changed, 1 deletion(-)

--- NEW FILE linux-2.6.30-no-pcspkr-modalias.patch ---
diff -up linux-2.6.30.noarch/drivers/input/misc/pcspkr.c.jx linux-2.6.30.noarch/drivers/input/misc/pcspkr.c
--- linux-2.6.30.noarch/drivers/input/misc/pcspkr.c.jx	2009-07-28 16:54:44.000000000 -0400
+++ linux-2.6.30.noarch/drivers/input/misc/pcspkr.c	2009-07-28 16:59:36.000000000 -0400
@@ -23,7 +23,6 @@
 MODULE_AUTHOR("Vojtech Pavlik <vojtech at ucw.cz>");
 MODULE_DESCRIPTION("PC Speaker beeper driver");
 MODULE_LICENSE("GPL");
-MODULE_ALIAS("platform:pcspkr");
 
 #if defined(CONFIG_MIPS) || defined(CONFIG_X86)
 /* Use the global PIT lock ! */

linux-2.6.31-modules-ro-nx.patch:
 include/linux/module.h |    3 +
 kernel/module.c        |  126 +++++++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 126 insertions(+), 3 deletions(-)

--- NEW FILE linux-2.6.31-modules-ro-nx.patch ---
>From davej  Fri Sep 11 11:06:50 2009
Date: 	Thu, 10 Sep 2009 22:50:47 -0400
Message-ID: <817ecb6f0909101950v2fc6dc6u5cbc40cd9a9dde77 at mail.gmail.com>
Subject: [PATCH v6] RO/NX protection for loadable kernel modules
From: Siarhei Liakh <sliakh.lkml at gmail.com>
To: linux-kernel at vger.kernel.org, linux-security-module at vger.kernel.org,
        linux-next at vger.kernel.org
Cc: Arjan van de Ven <arjan at infradead.org>, James Morris <jmorris at namei.org>,
        Andrew Morton <akpm at linux-foundation.org>, Andi Kleen <ak at muc.de>,
        Thomas Gleixner <tglx at linutronix.de>, "H. Peter Anvin" <hpa at zytor.com>,
        Ingo Molnar <mingo at elte.hu>, Rusty Russell <rusty at rustcorp.com.au>,
        Stephen Rothwell <sfr at canb.auug.org.au>

This patch is a logical extension of the protection provided by
CONFIG_DEBUG_RODATA to LKMs. The protection is provided by splitting
module_core and module_init into three logical parts each and setting
appropriate page access permissions for each individual section:

 1. Code: RO+X
 2. RO data: RO+NX
 3. RW data: RW+NX

In order to achieve proper protection, layout_sections() have been
modified to align each of the three parts mentioned above onto page
boundary. Next, the corresponding page access permissions are set
right before successful exit from load_module(). Further, free_module()
and sys_init_module have been modified to set module_core and
module_init as RW+NX right before calling module_free().

By default, the original section layout is preserved and RO/NX is
enforced only for whole pages of same content.
However, when compiled with CONFIG_DEBUG_RODATA=y, the patch
will page-align each group of sections to ensure that each page contains
only one type of content.
RO/NX enforcement is active on x86 only.

v1: Initial proof-of-concept patch.

v2: The patch have been re-written to reduce the number of #ifdefs and
to make it architecture-agnostic. Code formatting have been corrected also.

v3: Opportunistic RO/NX protectiuon is now unconditional. Section
page-alignment is enabled when CONFIG_DEBUG_RODATA=y.

v4: Removed most macros and improved coding style.

v5: Changed page-alignment and RO/NX section size calculation

v6: Fixed comments. Restricted RO/NX enforcement to x86 only

The patch have been developed for Linux 2.6.30 by Siarhei Liakh
<sliakh.lkml at gmail.com> and Xuxian Jiang <jiang at cs.ncsu.edu>.

---

Signed-off-by: Siarhei Liakh <sliakh.lkml at gmail.com>
Signed-off-by: Xuxian Jiang <jiang at cs.ncsu.edu>
Acked-by: Arjan van de Ven <arjan at linux.intel.com>

diff --git a/include/linux/module.h b/include/linux/module.h
index 627ac08..5ba770e 100644
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -293,6 +293,9 @@ struct module
 	/* The size of the executable code in each section.  */
 	unsigned int init_text_size, core_text_size;

+	/* Size of RO sections of the module (text+rodata) */
+	unsigned int init_ro_size, core_ro_size;
+
 	/* Arch-specific module values */
 	struct mod_arch_specific arch;

diff --git a/kernel/module.c b/kernel/module.c
index e797812..660278a 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -54,6 +54,7 @@
 #include <linux/async.h>
 #include <linux/percpu.h>
 #include <linux/kmemleak.h>
+#include <linux/pfn.h>
 
 #define CREATE_TRACE_POINTS
 #include <trace/events/module.h>
@@ -63,6 +64,26 @@
 #define ARCH_SHF_SMALL 0
 #endif

+/*
+ * Modules' sections will be aligned on page boundaries
+ * to ensure complete separation of code and data, but
+ * only when CONFIG_DEBUG_RODATA=y
+ */
+#ifdef CONFIG_DEBUG_RODATA
+#define debug_align(X) ALIGN(X, PAGE_SIZE)
+#else
+#define debug_align(X) (X)
+#endif
+
+/*
+ * Given BASE and SIZE this macro calculates the number of pages the
+ * memory regions occupies
+ */
+#define NUMBER_OF_PAGES(BASE, SIZE) ((SIZE > 0) ?		\
+		(PFN_DOWN((unsigned long)BASE + SIZE - 1) -	\
+			 PFN_DOWN((unsigned long)BASE) + 1)	\
+		: (0UL))
+
 /* If this is set, the section belongs in the init part of the module */
 #define INIT_OFFSET_MASK (1UL << (BITS_PER_LONG-1))

@@ -1471,6 +1492,69 @@ static int __unlink_module(void *_mod)
 	return 0;
 }

+/*
+ * LKM RO/NX protection: protect module's text/ro-data
+ * from modification and any data from execution.
+ */
+static void set_section_ro_nx(void *base,
+			unsigned long text_size,
+			unsigned long ro_size,
+			unsigned long total_size)
+{
+#ifdef CONFIG_X86
+	/* begin and end PFNs of the current subsection */
+	unsigned long begin_pfn;
+	unsigned long end_pfn;
+
+	/*
+	 * Set RO for module text and RO-data:
+	 * - Always protect first page.
+	 * - Do not protect last partial page.
+	 */
+	if (ro_size > 0) {
+		begin_pfn = PFN_DOWN((unsigned long)base);
+		end_pfn = PFN_DOWN((unsigned long)base + ro_size);
+		if (end_pfn > begin_pfn)
+			set_memory_ro(begin_pfn << PAGE_SHIFT,
+						end_pfn - begin_pfn);
+	}
+
+	/*
+	 * Set NX permissions for module data:
+	 * - Do not protect first partial page.
+	 * - Always protect last page.
+	 */
+	if (total_size > text_size) {
+		begin_pfn = PFN_UP((unsigned long)base + text_size);
+		end_pfn = PFN_UP((unsigned long)base + total_size);
+		if (end_pfn > begin_pfn)
+			set_memory_nx(begin_pfn << PAGE_SHIFT,
+						end_pfn - begin_pfn);
+	}
+#endif
+}
+
+/* Setting memory back to RW+NX before releasing it */
+void unset_section_ro_nx(struct module *mod, void *module_region)
+{
+#ifdef CONFIG_X86
+	unsigned long total_pages;
+
+	if (mod->module_core == module_region) {
+		/* Set core as NX+RW */
+		total_pages = NUMBER_OF_PAGES(mod->module_core, mod->core_size);
+		set_memory_nx((unsigned long)mod->module_core, total_pages);
+		set_memory_rw((unsigned long)mod->module_core, total_pages);
+
+	} else if (mod->module_init == module_region) {
+		/* Set init as NX+RW */
+		total_pages = NUMBER_OF_PAGES(mod->module_init, mod->init_size);
+		set_memory_nx((unsigned long)mod->module_init, total_pages);
+		set_memory_rw((unsigned long)mod->module_init, total_pages);
+	}
+#endif
+}
+
 /* Free a module, remove from lists, etc (must hold module_mutex). */
 static void free_module(struct module *mod)
 {
@@ -1493,6 +1577,7 @@ static void free_module(struct module *mod)
 	ftrace_release(mod->module_core, mod->core_size);

 	/* This may be NULL, but that's OK */
+	unset_section_ro_nx(mod, mod->module_init);
 	module_free(mod, mod->module_init);
 	kfree(mod->args);
 	if (mod->percpu)
@@ -1505,6 +1590,7 @@ static void free_module(struct module *mod)
 	lockdep_free_key_range(mod->module_core, mod->core_size);

 	/* Finally, free the core (containing the module structure) */
+	unset_section_ro_nx(mod, mod->module_core);
 	module_free(mod, mod->module_core);
 }

@@ -1678,8 +1764,19 @@ static void layout_sections(struct module *mod,
 			s->sh_entsize = get_offset(mod, &mod->core_size, s, i);
 			DEBUGP("\t%s\n", secstrings + s->sh_name);
 		}
-		if (m == 0)
+		switch (m) {
+		case 0: /* executable */
+			mod->core_size = debug_align(mod->core_size);
 			mod->core_text_size = mod->core_size;
+			break;
+		case 1: /* RO: text and ro-data */
+			mod->core_size = debug_align(mod->core_size);
+			mod->core_ro_size = mod->core_size;
+			break;
+		case 3: /* whole core */
+			mod->core_size = debug_align(mod->core_size);
+			break;
+		}
 	}

 	DEBUGP("Init section allocation order:\n");
@@ -1696,8 +1793,19 @@ static void layout_sections(struct module *mod,
 					 | INIT_OFFSET_MASK);
 			DEBUGP("\t%s\n", secstrings + s->sh_name);
 		}
-		if (m == 0)
+		switch (m) {
+		case 0: /* executable */
+			mod->init_size = debug_align(mod->init_size);
 			mod->init_text_size = mod->init_size;
+			break;
+		case 1: /* RO: text and ro-data */
+			mod->init_size = debug_align(mod->init_size);
+			mod->init_ro_size = mod->init_size;
+			break;
+		case 3: /* whole init */
+			mod->init_size = debug_align(mod->init_size);
+			break;
+		}
 	}
 }

@@ -2291,6 +2399,18 @@ static noinline struct module *load_module(void __user *umod,
 	/* Get rid of temporary copy */
 	vfree(hdr);

+	/* Set RO and NX regions for core */
+	set_section_ro_nx(mod->module_core,
+				mod->core_text_size,
+				mod->core_ro_size,
+				mod->core_size);
+
+	/* Set RO and NX regions for init */
+	set_section_ro_nx(mod->module_init,
+				mod->init_text_size,
+				mod->init_ro_size,
+				mod->init_size);
+
 	trace_module_load(mod);
 
 	/* Done! */
@@ -2598,6 +2598,7 @@ SYSCALL_DEFINE3(init_module, void __user
 	mutex_lock(&module_mutex);
 	/* Drop initial reference. */
 	module_put(mod);
+	unset_section_ro_nx(mod, mod->module_init);
 	trim_init_extable(mod);
 	module_free(mod, mod->module_init);
 	mod->module_init = NULL;
--


linux-2.6.31-nx-data.patch:
 kernel/vmlinux.lds.S |    6 +++++-
 mm/init.c            |   22 ++++++++++++++++++++--
 2 files changed, 25 insertions(+), 3 deletions(-)

--- NEW FILE linux-2.6.31-nx-data.patch ---
Date: 	Thu, 10 Sep 2009 21:10:51 -0400
Message-ID: <817ecb6f0909101810u7774ca93u40a0a4b99f9fb6ba at mail.gmail.com>
Subject: [PATCH V4] x86: NX protection for kernel data
From: Siarhei Liakh <sliakh.lkml at gmail.com>
To: linux-kernel at vger.kernel.org, linux-security-module at vger.kernel.org
Cc: Arjan van de Ven <arjan at infradead.org>, James Morris <jmorris at namei.org>,
        Andrew Morton <akpm at linux-foundation.org>, Andi Kleen <ak at muc.de>,
        Rusty Russell <rusty at rustcorp.com.au>,
        Thomas Gleixner <tglx at linutronix.de>, "H. Peter Anvin" <hpa at zytor.com>,
        Ingo Molnar <mingo at elte.hu>

This patch expands functionality of CONFIG_DEBUG_RODATA to set main
(static) kernel data area as NX.
The following steps are taken to achieve this:
1. Linker script is adjusted so .text always starts and ends on a page boundary
2. Linker script is adjusted so .rodata and .data always start and
end on a page boundary
3. void mark_nxdata_nx(void) added to arch/x86/mm/init.c with actual
functionality: NX is set for all pages from _etext through _end.
4. mark_nxdata_nx() called from free_initmem() (after init has been released)
5. free_init_pages() sets released memory NX in arch/x86/mm/init.c

The patch have been developed for Linux 2.6.31-rc7 x86 by Siarhei Liakh
<sliakh.lkml at gmail.com> and Xuxian Jiang <jiang at cs.ncsu.edu>.

V1:  initial patch for 2.6.30
V2:  patch for 2.6.31-rc7
V3:  moved all code into arch/x86, adjusted credits
V4:  fixed ifdef, removed credits from CREDITS

---

Signed-off-by: Siarhei Liakh <sliakh.lkml at gmail.com>
Signed-off-by: Xuxian Jiang <jiang at cs.ncsu.edu>

diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
index 9fc1782..b6b2bbf 100644
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -43,7 +43,7 @@ jiffies_64 = jiffies;
 
 PHDRS {
 	text PT_LOAD FLAGS(5);          /* R_E */
-	data PT_LOAD FLAGS(7);          /* RWE */
+	data PT_LOAD FLAGS(6);          /* RW_ */
 #ifdef CONFIG_X86_64
 	user PT_LOAD FLAGS(7);          /* RWE */
 #ifdef CONFIG_SMP
@@ -88,6 +88,8 @@ SECTIONS
 		IRQENTRY_TEXT
 		*(.fixup)
 		*(.gnu.warning)
+		/* .text should occupy whole number of pages */
+		. = ALIGN(PAGE_SIZE);
 		/* End of text section */
 		_etext = .;
 	} :text = 0x9090
@@ -128,6 +130,8 @@ SECTIONS
 		/* rarely changed data like cpu maps */
 		READ_MOSTLY_DATA(CONFIG_X86_INTERNODE_CACHE_BYTES)
 
+		/* .data should occupy whole number of pages */
+		. = ALIGN(PAGE_SIZE);
 		/* End of data section */
 		_edata = .;
 	} :data
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 0607119..522e81b 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -423,9 +423,10 @@ void free_init_pages(char *what, unsigned long begin, unsigned long end)
 	/*
 	 * We just marked the kernel text read only above, now that
 	 * we are going to free part of that, we need to make that
-	 * writeable first.
+	 * writeable and non-executable first.
 	 */
 	set_memory_rw(begin, (end - begin) >> PAGE_SHIFT);
+	set_memory_nx(begin, (end - begin) >> PAGE_SHIFT);

 	printk(KERN_INFO "Freeing %s: %luk freed\n", what, (end - begin) >> 10);

@@ -440,11 +441,29 @@ void free_init_pages(char *what, unsigned long begin, unsigned long end)
 #endif
 }

+void mark_nxdata_nx(void)
+{
+#ifdef CONFIG_DEBUG_RODATA
+	/*
+	 * When this called, init has already been executed and released,
+	 * so everything past _etext sould be NX.
+	 */
+	unsigned long start = PFN_ALIGN(_etext);
+	unsigned long size = PFN_ALIGN(_end) - start;
+
+	printk(KERN_INFO "NX-protecting the kernel data: %lx, %lu pages\n",
+		start, size >> PAGE_SHIFT);
+	set_pages_nx(virt_to_page(start), size >> PAGE_SHIFT);
+#endif
+}
+
 void free_initmem(void)
 {
 	free_init_pages("unused kernel memory",
 			(unsigned long)(&__init_begin),
 			(unsigned long)(&__init_end));
+	/* Set kernel's data as NX */
+	mark_nxdata_nx();
 }

 #ifdef CONFIG_BLK_DEV_INITRD
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/



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

iD8DBQBLF1qqyGugalF9Dw4RAiP6AJwLIwUWOmzYNgbg0idlA0462rTVSwCglKbm
u346vCa2H8XN6LA1m9D/9rQ=
=NE61
-----END PGP SIGNATURE-----

lirc-2.6.32.patch:
 drivers/input/Kconfig                 |    2 
 drivers/input/Makefile                |    2 
 drivers/input/lirc/Kconfig            |  116 +
 drivers/input/lirc/Makefile           |   21 
 drivers/input/lirc/lirc_bt829.c       |  383 ++++++
 drivers/input/lirc/lirc_dev.c         |  737 +++++++++++
 drivers/input/lirc/lirc_dev.h         |  194 +++
 drivers/input/lirc/lirc_ene0100.c     |  646 ++++++++++
 drivers/input/lirc/lirc_ene0100.h     |  169 ++
 drivers/input/lirc/lirc_i2c.c         |  538 ++++++++
 drivers/input/lirc/lirc_igorplugusb.c |  556 ++++++++
 drivers/input/lirc/lirc_imon.c        | 1054 +++++++++++++++++
 drivers/input/lirc/lirc_it87.c        |  986 +++++++++++++++
 drivers/input/lirc/lirc_it87.h        |  116 +
 drivers/input/lirc/lirc_ite8709.c     |  540 ++++++++
 drivers/input/lirc/lirc_mceusb.c      | 1216 +++++++++++++++++++
 drivers/input/lirc/lirc_parallel.c    |  709 +++++++++++
 drivers/input/lirc/lirc_parallel.h    |   26 
 drivers/input/lirc/lirc_sasem.c       |  931 +++++++++++++++
 drivers/input/lirc/lirc_serial.c      | 1317 +++++++++++++++++++++
 drivers/input/lirc/lirc_sir.c         | 1283 ++++++++++++++++++++
 drivers/input/lirc/lirc_streamzap.c   |  794 ++++++++++++
 drivers/input/lirc/lirc_ttusbir.c     |  397 ++++++
 drivers/input/lirc/lirc_zilog.c       | 1396 ++++++++++++++++++++++
 drivers/input/misc/Kconfig            |   11 
 drivers/input/misc/Makefile           |    1 
 drivers/input/misc/imon.c             | 2102 ++++++++++++++++++++++++++++++++++
 drivers/input/misc/imon.h             |  210 +++
 include/linux/lirc.h                  |  100 +
 29 files changed, 16553 insertions(+)

--- NEW FILE lirc-2.6.32.patch ---
 drivers/input/Kconfig                 |    2 +
 drivers/input/Makefile                |    2 +
 drivers/input/lirc/Kconfig            |  116 ++
 drivers/input/lirc/Makefile           |   21 +
 drivers/input/lirc/lirc_bt829.c       |  383 ++++++
 drivers/input/lirc/lirc_dev.c         |  737 ++++++++++++
 drivers/input/lirc/lirc_dev.h         |  194 +++
 drivers/input/lirc/lirc_ene0100.c     |  646 ++++++++++
 drivers/input/lirc/lirc_ene0100.h     |  169 +++
 drivers/input/lirc/lirc_i2c.c         |  538 +++++++++
 drivers/input/lirc/lirc_igorplugusb.c |  556 +++++++++
 drivers/input/lirc/lirc_imon.c        | 1054 +++++++++++++++++
 drivers/input/lirc/lirc_it87.c        |  986 ++++++++++++++++
 drivers/input/lirc/lirc_it87.h        |  116 ++
 drivers/input/lirc/lirc_ite8709.c     |  540 +++++++++
 drivers/input/lirc/lirc_mceusb.c      | 1216 +++++++++++++++++++
 drivers/input/lirc/lirc_parallel.c    |  709 +++++++++++
 drivers/input/lirc/lirc_parallel.h    |   26 +
 drivers/input/lirc/lirc_sasem.c       |  931 +++++++++++++++
 drivers/input/lirc/lirc_serial.c      | 1317 +++++++++++++++++++++
 drivers/input/lirc/lirc_sir.c         | 1283 ++++++++++++++++++++
 drivers/input/lirc/lirc_streamzap.c   |  794 +++++++++++++
 drivers/input/lirc/lirc_ttusbir.c     |  397 +++++++
 drivers/input/lirc/lirc_zilog.c       | 1396 ++++++++++++++++++++++
 drivers/input/misc/Kconfig            |   11 +
 drivers/input/misc/Makefile           |    1 +
 drivers/input/misc/imon.c             | 2102 +++++++++++++++++++++++++++++++++
 drivers/input/misc/imon.h             |  210 ++++
 include/linux/lirc.h                  |  100 ++
 29 files changed, 16553 insertions(+), 0 deletions(-)

diff --git a/drivers/input/Kconfig b/drivers/input/Kconfig
index 07c2cd4..ebc8743 100644
--- a/drivers/input/Kconfig
+++ b/drivers/input/Kconfig
@@ -183,6 +183,8 @@ source "drivers/input/tablet/Kconfig"
 
 source "drivers/input/touchscreen/Kconfig"
 
+source "drivers/input/lirc/Kconfig"
+
 source "drivers/input/misc/Kconfig"
 
 endif
diff --git a/drivers/input/Makefile b/drivers/input/Makefile
index 7ad212d..cb119e7 100644
--- a/drivers/input/Makefile
+++ b/drivers/input/Makefile
@@ -26,3 +26,5 @@ obj-$(CONFIG_INPUT_MISC)	+= misc/
 obj-$(CONFIG_INPUT_APMPOWER)	+= apm-power.o
 
 obj-$(CONFIG_XEN_KBDDEV_FRONTEND)	+= xen-kbdfront.o
+
+obj-$(CONFIG_INPUT_LIRC)       += lirc/
diff --git a/drivers/input/lirc/Kconfig b/drivers/input/lirc/Kconfig
new file mode 100644
index 0000000..86fc063
--- /dev/null
+++ b/drivers/input/lirc/Kconfig
@@ -0,0 +1,116 @@
+#
+# LIRC driver(s) configuration
+#
+menuconfig INPUT_LIRC
+	tristate "Linux Infrared Remote Control IR receiver/transmitter drivers"
+	help
+	  Say Y here, and all supported Linux Infrared Remote Control IR and
+	  RF receiver and transmitter drivers will be displayed. When paired
+	  with a remote control and the lirc daemon, the receiver drivers
+	  allow control of your Linux system via remote control.
+
+if INPUT_LIRC
+
+config LIRC_BT829
+        tristate "BT829 based hardware"
+	depends on INPUT_LIRC
+	help
+	  Driver for the IR interface on BT829-based hardware
+
+config LIRC_ENE0100
+	tristate "ENE KB3924/ENE0100 CIR Port Reciever"
+	depends on INPUT_LIRC
+	help
+	  This is a driver for CIR port handled by ENE KB3924 embedded
+	  controller found on some notebooks.
+	  It appears on PNP list as ENE0100.
+
+config LIRC_I2C
+	tristate "I2C Based IR Receivers"
+	depends on INPUT_LIRC
+	help
+	  Driver for I2C-based IR receivers, such as those commonly
+	  found onboard Hauppauge PVR-150/250/350 video capture cards
+
+config LIRC_IGORPLUGUSB
+	tristate "Igor Cesko's USB IR Receiver"
+	depends on INPUT_LIRC && USB
+	help
+	  Driver for Igor Cesko's USB IR Receiver
+
+config LIRC_IMON
+	tristate "Legacy SoundGraph iMON Receiver and Display"
+	depends on INPUT_LIRC
+	help
+	  Driver for the original SoundGraph iMON IR Receiver and Display
+
+	  Current generation iMON devices use the input layer imon driver.
+
+config LIRC_IT87
+	tristate "ITE IT87XX CIR Port Receiver"
+	depends on INPUT_LIRC
+	help
+	  Driver for the ITE IT87xx IR Receiver
+
+config LIRC_ITE8709
+	tristate "ITE8709 CIR Port Receiver"
+	depends on INPUT_LIRC && PNP
+	help
+	  Driver for the ITE8709 IR Receiver
+
+config LIRC_MCEUSB
+	tristate "Windows Media Center Ed. USB IR Transceiver"
+	depends on INPUT_LIRC && USB
+	help
+	  Driver for Windows Media Center Ed. USB IR Transceivers
+
+config LIRC_PARALLEL
+	tristate "Homebrew Parallel Port Receiver"
+	depends on INPUT_LIRC && !SMP
+	help
+	  Driver for Homebrew Parallel Port Receivers
+
+config LIRC_SASEM
+	tristate "Sasem USB IR Remote"
+	depends on INPUT_LIRC
+	help
+	  Driver for the Sasem OnAir Remocon-V or Dign HV5 HTPC IR/VFD Module
+
+config LIRC_SERIAL
+	tristate "Homebrew Serial Port Receiver"
+	depends on INPUT_LIRC
+	help
+	  Driver for Homebrew Serial Port Receivers
+
+config LIRC_SERIAL_TRANSMITTER
+	bool "Serial Port Transmitter"
+	default y
+	depends on LIRC_SERIAL
+	help
+	  Serial Port Transmitter support
+
+config LIRC_SIR
+	tristate "Built-in SIR IrDA port"
+	depends on INPUT_LIRC
+	help
+	  Driver for the SIR IrDA port
+
+config LIRC_STREAMZAP
+	tristate "Streamzap PC Receiver"
+	depends on INPUT_LIRC
+	help
+	  Driver for the Streamzap PC Receiver
+
+config LIRC_TTUSBIR
+	tristate "Technotrend USB IR Receiver"
+	depends on INPUT_LIRC && USB
+	help
+	  Driver for the Technotrend USB IR Receiver
+
+config LIRC_ZILOG
+	tristate "Zilog/Hauppauge IR Transmitter"
+	depends on INPUT_LIRC
+	help
+	  Driver for the Zilog/Hauppauge IR Transmitter, found on
+	  PVR-150/500, HVR-1200/1250/1700/1800, HD-PVR and other cards
+endif
diff --git a/drivers/input/lirc/Makefile b/drivers/input/lirc/Makefile
new file mode 100644
index 0000000..9122e87
--- /dev/null
+++ b/drivers/input/lirc/Makefile
@@ -0,0 +1,21 @@
+# Makefile for the lirc drivers.
+#
+
+# Each configuration option enables a list of files.
+
+obj-$(CONFIG_INPUT_LIRC)	+= lirc_dev.o
+obj-$(CONFIG_LIRC_BT829)	+= lirc_bt829.o
+obj-$(CONFIG_LIRC_ENE0100)	+= lirc_ene0100.o
+obj-$(CONFIG_LIRC_I2C)		+= lirc_i2c.o
+obj-$(CONFIG_LIRC_IGORPLUGUSB)	+= lirc_igorplugusb.o
+obj-$(CONFIG_LIRC_IMON)		+= lirc_imon.o
+obj-$(CONFIG_LIRC_IT87)		+= lirc_it87.o
+obj-$(CONFIG_LIRC_ITE8709)	+= lirc_ite8709.o
+obj-$(CONFIG_LIRC_MCEUSB)	+= lirc_mceusb.o
+obj-$(CONFIG_LIRC_PARALLEL)	+= lirc_parallel.o
+obj-$(CONFIG_LIRC_SASEM)	+= lirc_sasem.o
+obj-$(CONFIG_LIRC_SERIAL)	+= lirc_serial.o
[...16374 lines suppressed...]
+
+static const struct {
+	u32 hw_code;
+	u16 keycode;
+} imon_mce_key_table[] = {
+	/* keys sorted mostly by frequency of use to optimize lookups */
+	{ 0x800f8415, KEY_REWIND },
+	{ 0x800f8414, KEY_FASTFORWARD },
+	{ 0x800f841b, KEY_PREVIOUS },
+	{ 0x800f841a, KEY_NEXT },
+
+	{ 0x800f8416, KEY_PLAY },
+	{ 0x800f8418, KEY_PAUSE },
+	{ 0x800f8418, KEY_PAUSE },
+	{ 0x800f8419, KEY_STOP },
+	{ 0x800f8417, KEY_RECORD },
+
+	{ 0x02000052, KEY_UP },
+	{ 0x02000051, KEY_DOWN },
+	{ 0x02000050, KEY_LEFT },
+	{ 0x0200004f, KEY_RIGHT },
+
+	{ 0x02000028, KEY_ENTER },
+/* the OK and Enter buttons decode to the same value
+	{ 0x02000028, KEY_OK }, */
+	{ 0x0200002a, KEY_EXIT },
+	{ 0x02000029, KEY_DELETE },
+
+	{ 0x800f840e, KEY_MUTE },
+	{ 0x800f8410, KEY_VOLUMEUP },
+	{ 0x800f8411, KEY_VOLUMEDOWN },
+	{ 0x800f8412, KEY_CHANNELUP },
+	{ 0x800f8413, KEY_CHANNELDOWN },
+
+	{ 0x0200001e, KEY_NUMERIC_1 },
+	{ 0x0200001f, KEY_NUMERIC_2 },
+	{ 0x02000020, KEY_NUMERIC_3 },
+	{ 0x02000021, KEY_NUMERIC_4 },
+	{ 0x02000022, KEY_NUMERIC_5 },
+	{ 0x02000023, KEY_NUMERIC_6 },
+	{ 0x02000024, KEY_NUMERIC_7 },
+	{ 0x02000025, KEY_NUMERIC_8 },
+	{ 0x02000026, KEY_NUMERIC_9 },
+	{ 0x02000027, KEY_NUMERIC_0 },
+
+	{ 0x02200025, KEY_NUMERIC_STAR },
+	{ 0x02200020, KEY_NUMERIC_POUND },
+
+	{ 0x800f8446, KEY_TV },
+	{ 0x800f8447, KEY_AUDIO },
+	{ 0x800f8448, KEY_PVR }, /* RecordedTV */
+	{ 0x800f8449, KEY_CAMERA },
+	{ 0x800f844a, KEY_VIDEO },
+	{ 0x800f8424, KEY_DVD },
+	{ 0x800f8425, KEY_TUNER }, /* LiveTV */
+
+	{ 0x800f845b, KEY_RED },
+	{ 0x800f845c, KEY_GREEN },
+	{ 0x800f845d, KEY_YELLOW },
+	{ 0x800f845e, KEY_BLUE },
+
+	{ 0x800f840f, KEY_INFO },
+	{ 0x800f8426, KEY_EPG }, /* Guide */
+	{ 0x800f845a, KEY_SUBTITLE }, /* Caption */
+
+	{ 0x800f840c, KEY_POWER },
+	{ 0x800f840d, KEY_PROG1 }, /* Windows MCE button */
+
+};
+
+static const struct {
+	u64 hw_code;
+	u16 keycode;
+} imon_panel_key_table[] = {
+	{ 0x000000000f000fee, KEY_PROG1 }, /* Go */
+	{ 0x000000001f000fee, KEY_AUDIO },
+	{ 0x0000000020000fee, KEY_VIDEO },
+	{ 0x0000000021000fee, KEY_CAMERA },
+	{ 0x0000000027000fee, KEY_DVD },
+/* the TV key on my panel is broken, doesn't work under any OS
+	{ 0x0000000000000fee, KEY_TV }, */
+	{ 0x0000000005000fee, KEY_PREVIOUS },
+	{ 0x0000000007000fee, KEY_REWIND },
+	{ 0x0000000004000fee, KEY_STOP },
+	{ 0x000000003c000fee, KEY_PLAYPAUSE },
+	{ 0x0000000008000fee, KEY_FASTFORWARD },
+	{ 0x0000000006000fee, KEY_NEXT },
+	{ 0x0000000100000fee, KEY_RIGHT },
+	{ 0x0000010000000fee, KEY_LEFT },
+	{ 0x000000003d000fee, KEY_SELECT },
+	{ 0x0001000000000fee, KEY_VOLUMEUP },
+	{ 0x0100000000000fee, KEY_VOLUMEDOWN },
+	{ 0x0000000001000fee, KEY_MUTE },
+};
diff --git a/include/linux/lirc.h b/include/linux/lirc.h
new file mode 100644
index 0000000..c7b25a8
--- /dev/null
+++ b/include/linux/lirc.h
@@ -0,0 +1,100 @@
+/*
+ * lirc.h - linux infrared remote control header file
+ * last modified 2007/09/27
+ */
+
+#ifndef _LINUX_LIRC_H
+#define _LINUX_LIRC_H
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+#define PULSE_BIT  0x01000000
+#define PULSE_MASK 0x00FFFFFF
+
+/*** lirc compatible hardware features ***/
+
+#define LIRC_MODE2SEND(x) (x)
+#define LIRC_SEND2MODE(x) (x)
+#define LIRC_MODE2REC(x) ((x) << 16)
+#define LIRC_REC2MODE(x) ((x) >> 16)
+
+#define LIRC_MODE_RAW                  0x00000001
+#define LIRC_MODE_PULSE                0x00000002
+#define LIRC_MODE_MODE2                0x00000004
+#define LIRC_MODE_CODE                 0x00000008
+#define LIRC_MODE_LIRCCODE             0x00000010
+#define LIRC_MODE_STRING               0x00000020
+
+
+#define LIRC_CAN_SEND_RAW              LIRC_MODE2SEND(LIRC_MODE_RAW)
+#define LIRC_CAN_SEND_PULSE            LIRC_MODE2SEND(LIRC_MODE_PULSE)
+#define LIRC_CAN_SEND_MODE2            LIRC_MODE2SEND(LIRC_MODE_MODE2)
+#define LIRC_CAN_SEND_CODE             LIRC_MODE2SEND(LIRC_MODE_CODE)
+#define LIRC_CAN_SEND_LIRCCODE         LIRC_MODE2SEND(LIRC_MODE_LIRCCODE)
+#define LIRC_CAN_SEND_STRING           LIRC_MODE2SEND(LIRC_MODE_STRING)
+
+#define LIRC_CAN_SEND_MASK             0x0000003f
+
+#define LIRC_CAN_SET_SEND_CARRIER      0x00000100
+#define LIRC_CAN_SET_SEND_DUTY_CYCLE   0x00000200
+#define LIRC_CAN_SET_TRANSMITTER_MASK  0x00000400
+
+#define LIRC_CAN_REC_RAW               LIRC_MODE2REC(LIRC_MODE_RAW)
+#define LIRC_CAN_REC_PULSE             LIRC_MODE2REC(LIRC_MODE_PULSE)
+#define LIRC_CAN_REC_MODE2             LIRC_MODE2REC(LIRC_MODE_MODE2)
+#define LIRC_CAN_REC_CODE              LIRC_MODE2REC(LIRC_MODE_CODE)
+#define LIRC_CAN_REC_LIRCCODE          LIRC_MODE2REC(LIRC_MODE_LIRCCODE)
+#define LIRC_CAN_REC_STRING            LIRC_MODE2REC(LIRC_MODE_STRING)
+
+#define LIRC_CAN_REC_MASK              LIRC_MODE2REC(LIRC_CAN_SEND_MASK)
+
+#define LIRC_CAN_SET_REC_CARRIER       (LIRC_CAN_SET_SEND_CARRIER << 16)
+#define LIRC_CAN_SET_REC_DUTY_CYCLE    (LIRC_CAN_SET_SEND_DUTY_CYCLE << 16)
+
+#define LIRC_CAN_SET_REC_DUTY_CYCLE_RANGE 0x40000000
+#define LIRC_CAN_SET_REC_CARRIER_RANGE    0x80000000
+#define LIRC_CAN_GET_REC_RESOLUTION       0x20000000
+
+#define LIRC_CAN_SEND(x) ((x)&LIRC_CAN_SEND_MASK)
+#define LIRC_CAN_REC(x) ((x)&LIRC_CAN_REC_MASK)
+
+#define LIRC_CAN_NOTIFY_DECODE            0x01000000
+
+/*** IOCTL commands for lirc driver ***/
+
+#define LIRC_GET_FEATURES              _IOR('i', 0x00000000, uint64_t)
+
+#define LIRC_GET_SEND_MODE             _IOR('i', 0x00000001, uint64_t)
+#define LIRC_GET_REC_MODE              _IOR('i', 0x00000002, uint64_t)
+#define LIRC_GET_SEND_CARRIER          _IOR('i', 0x00000003, uint32_t)
+#define LIRC_GET_REC_CARRIER           _IOR('i', 0x00000004, uint32_t)
+#define LIRC_GET_SEND_DUTY_CYCLE       _IOR('i', 0x00000005, uint32_t)
+#define LIRC_GET_REC_DUTY_CYCLE        _IOR('i', 0x00000006, uint32_t)
+#define LIRC_GET_REC_RESOLUTION        _IOR('i', 0x00000007, uint32_t)
+
+/* code length in bits, currently only for LIRC_MODE_LIRCCODE */
+#define LIRC_GET_LENGTH                _IOR('i', 0x0000000f, uint64_t)
+
+#define LIRC_SET_SEND_MODE             _IOW('i', 0x00000011, uint64_t)
+#define LIRC_SET_REC_MODE              _IOW('i', 0x00000012, uint64_t)
+/* Note: these can reset the according pulse_width */
+#define LIRC_SET_SEND_CARRIER          _IOW('i', 0x00000013, uint32_t)
+#define LIRC_SET_REC_CARRIER           _IOW('i', 0x00000014, uint32_t)
+#define LIRC_SET_SEND_DUTY_CYCLE       _IOW('i', 0x00000015, uint32_t)
+#define LIRC_SET_REC_DUTY_CYCLE        _IOW('i', 0x00000016, uint32_t)
+#define LIRC_SET_TRANSMITTER_MASK      _IOW('i', 0x00000017, uint32_t)
+
+/*
+ * to set a range use
+ * LIRC_SET_REC_DUTY_CYCLE_RANGE/LIRC_SET_REC_CARRIER_RANGE with the
+ * lower bound first and later
+ * LIRC_SET_REC_DUTY_CYCLE/LIRC_SET_REC_CARRIER with the upper bound
+ */
+
+#define LIRC_SET_REC_DUTY_CYCLE_RANGE  _IOW('i', 0x0000001e, uint32_t)
+#define LIRC_SET_REC_CARRIER_RANGE     _IOW('i', 0x0000001f, uint32_t)
+
+#define LIRC_NOTIFY_DECODE             _IO('i', 0x00000020)
+
+#endif


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

iD8DBQBLLA8TyGugalF9Dw4RArcVAKCUKgkmy1mpxCYSh0tmlbKmIfWb9ACbBKrH
pKjydna4V+WfiL4sIKS/zwc=
=1nus
-----END PGP SIGNATURE-----


--- NEW FILE perf ---
#!/bin/sh

# In pathological situations, this will print some error about uname.
kverrel="`uname -r`" || exit

exec "/usr/libexec/perf.$kverrel" ${1+"$@"}
rc=$?

# We're still here, so the exec failed.
echo >&2 "Sorry, your kernel ($kverrel) doesn't support perf."

exit $rc

v4l-dvb-fix-cx25840-firmware-loading.patch:
 cx25840-firmware.c |   37 ++++++++++++++++++++++---------------
 1 file changed, 22 insertions(+), 15 deletions(-)

--- NEW FILE v4l-dvb-fix-cx25840-firmware-loading.patch ---
# HG changeset patch
# User Hans Verkuil <hverkuil at xs4all.nl>
# Date 1251752272 -7200
# Node ID 36a81289010d614758a64bd757ee37c8c154ad4b
# Parent  f69cb015dc77f8893f5018afff1e60f5b4ea50af
cx25840: fix determining the firmware name

From: Hans Verkuil <hverkuil at xs4all.nl>

Depending on the model there are three different firmwares to choose from.
Unfortunately if a cx23885 is loaded first, then the global firmware name
is overwritten with that firmware and if ivtv is loaded next, then it
tries to load the wrong firmware. In addition, the original approach would
also overwrite any firmware that the user specified explicitly.

Priority: normal

Signed-off-by: Hans Verkuil <hverkuil at xs4all.nl>
CC: Jarod Wilson <jarod at wilsonet.com>

Trivial backport from v4l-dvb hg tip to 2.6.31

Signed-off-by: Jarod Wilson <jarod at redhat.com>

---

 drivers/media/video/cx25840/cx25840-firmware.c |   37 ++++++++++++++---------
 1 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/drivers/media/video/cx25840/cx25840-firmware.c b/drivers/media/video/cx25840/cx25840-firmware.c
index 0df53b0..006ce16 100644
--- a/drivers/media/video/cx25840/cx25840-firmware.c
+++ b/drivers/media/video/cx25840/cx25840-firmware.c
@@ -23,10 +23,6 @@
 
 #include "cx25840-core.h"
 
-#define FWFILE "v4l-cx25840.fw"
-#define FWFILE_CX23885 "v4l-cx23885-avcore-01.fw"
-#define FWFILE_CX231XX "v4l-cx231xx-avcore-01.fw"
-
 /*
  * Mike Isely <isely at pobox.com> - The FWSEND parameter controls the
  * size of the firmware chunks sent down the I2C bus to the chip.
@@ -40,11 +36,11 @@
 
 #define FWDEV(x) &((x)->dev)
 
-static char *firmware = FWFILE;
+static char *firmware = "";
 
 module_param(firmware, charp, 0444);
 
-MODULE_PARM_DESC(firmware, "Firmware image [default: " FWFILE "]");
+MODULE_PARM_DESC(firmware, "Firmware image to load");
 
 static void start_fw_load(struct i2c_client *client)
 {
@@ -65,6 +61,19 @@ static void end_fw_load(struct i2c_client *client)
 	cx25840_write(client, 0x803, 0x03);
 }
 
+static const char *get_fw_name(struct i2c_client *client)
+{
+	struct cx25840_state *state = to_state(i2c_get_clientdata(client));
+
+	if (firmware[0])
+		return firmware;
+	if (state->is_cx23885)
+		return "v4l-cx23885-avcore-01.fw";
+	if (state->is_cx231xx)
+		return "v4l-cx231xx-avcore-01.fw";
+	return "v4l-cx25840.fw";
+}
+
 static int check_fw_load(struct i2c_client *client, int size)
 {
 	/* DL_ADDR_HB DL_ADDR_LB */
@@ -72,11 +81,13 @@ static int check_fw_load(struct i2c_client *client, int size)
 	s |= cx25840_read(client, 0x800);
 
 	if (size != s) {
-		v4l_err(client, "firmware %s load failed\n", firmware);
+		v4l_err(client, "firmware %s load failed\n",
+			get_fw_name(client));
 		return -EINVAL;
 	}
 
-	v4l_info(client, "loaded %s firmware (%d bytes)\n", firmware, size);
+	v4l_info(client, "loaded %s firmware (%d bytes)\n",
+		 get_fw_name(client), size);
 	return 0;
 }
 
@@ -96,21 +107,17 @@ int cx25840_loadfw(struct i2c_client *client)
 	const struct firmware *fw = NULL;
 	u8 buffer[FWSEND];
 	const u8 *ptr;
+	const char *fwname = get_fw_name(client);
 	int size, retval;
 	int MAX_BUF_SIZE = FWSEND;
 
-	if (state->is_cx23885)
-		firmware = FWFILE_CX23885;
-	else if (state->is_cx231xx)
-		firmware = FWFILE_CX231XX;
-
 	if ((state->is_cx231xx) && MAX_BUF_SIZE > 16) {
 		v4l_err(client, " Firmware download size changed to 16 bytes max length\n");
 		MAX_BUF_SIZE = 16;  /* cx231xx cannot accept more than 16 bytes at a time */
 	}
 
-	if (request_firmware(&fw, firmware, FWDEV(client)) != 0) {
-		v4l_err(client, "unable to open firmware %s\n", firmware);
+	if (request_firmware(&fw, fwname, FWDEV(client)) != 0) {
+		v4l_err(client, "unable to open firmware %s\n", fwname);
 		return -EINVAL;
 	}
 


Index: Makefile
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/Makefile,v
retrieving revision 1.106
retrieving revision 1.107
diff -u -p -r1.106 -r1.107
--- Makefile	26 Nov 2009 00:00:00 -0000	1.106
+++ Makefile	4 Jan 2010 15:25:39 -0000	1.107
@@ -57,6 +57,7 @@ debug:
 	@perl -pi -e 's/# CONFIG_FAULT_INJECTION is not set/CONFIG_FAULT_INJECTION=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_FAILSLAB is not set/CONFIG_FAILSLAB=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_FAIL_PAGE_ALLOC is not set/CONFIG_FAIL_PAGE_ALLOC=y/' config-nodebug
+	@perl -pi -e 's/# CONFIG_FAIL_IO_TIMEOUT is not set/CONFIG_FAIL_IO_TIMEOUT=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_FAIL_MAKE_REQUEST is not set/CONFIG_FAIL_MAKE_REQUEST=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_FAULT_INJECTION_DEBUG_FS is not set/CONFIG_FAULT_INJECTION_DEBUG_FS=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_FAULT_INJECTION_STACKTRACE_FILTER is not set/CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y/' config-nodebug
@@ -73,18 +74,28 @@ debug:
 	@perl -pi -e 's/# CONFIG_DMA_API_DEBUG is not set/CONFIG_DMA_API_DEBUG=y/' config-nodebug
 	@perl -pi -e 's/# CONFIG_PM_TEST_SUSPEND is not set/CONFIG_PM_TEST_SUSPEND=y/' config-generic
 	@perl -pi -e 's/# CONFIG_BOOT_TRACER is not set/CONFIG_BOOT_TRACER=y/' config-generic
-	@perl -pi -e 's/# CONFIG_PCI_MSI_DEFAULT_ON is not set/CONFIG_PCI_MSI_DEFAULT_ON=y/' config-generic
 	@perl -pi -e 's/# CONFIG_B43_DEBUG is not set/CONFIG_B43_DEBUG=y/' config-generic
 	@perl -pi -e 's/# CONFIG_B43LEGACY_DEBUG is not set/CONFIG_B43LEGACY_DEBUG=y/' config-generic
 	@perl -pi -e 's/# CONFIG_MMIOTRACE is not set/CONFIG_MMIOTRACE=y/' config-nodebug
 	@perl -pi -e 's/CONFIG_STRIP_ASM_SYMS=y/# CONFIG_STRIP_ASM_SYMS is not set/' config-nodebug
+	@perl -pi -e 's/# CONFIG_DEBUG_CREDENTIALS is not set/CONFIG_DEBUG_CREDENTIALS=y/' config-nodebug
+	@perl -pi -e 's/# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set/CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y/' config-nodebug
+	@perl -pi -e 's/# CONFIG_ACPI_DEBUG is not set/CONFIG_ACPI_DEBUG=y/' config-nodebug
+	@perl -pi -e 's/# CONFIG_EXT4_DEBUG is not set/CONFIG_EXT4_DEBUG=y/' config-nodebug
+	@perl -pi -e 's/# CONFIG_DEBUG_PERF_USE_VMALLOC is not set/CONFIG_DEBUG_PERF_USE_VMALLOC=y/' config-nodebug
+	@perl -pi -e 's/# CONFIG_JBD2_DEBUG is not set/CONFIG_JBD2_DEBUG=y/' config-nodebug
+	@perl -pi -e 's/# CONFIG_FUNCTION_TRACER is not set/CONFIG_FUNCTION_TRACER=y/' config-nodebug
+	@perl -pi -e 's/# CONFIG_STACK_TRACER is not set/CONFIG_STACK_TRACER=y/' config-nodebug
+	@perl -pi -e 's/# CONFIG_DYNAMIC_FTRACE is not set/CONFIG_DYNAMIC_FTRACE=y/' config-nodebug
 
 	@# just in case we're going from extremedebug -> debug
 	@perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-nodebug
 
-	@perl -pi -e 's/^%define debugbuildsenabled 1/%define debugbuildsenabled 0/' kernel.spec
 	@perl -pi -e 's/CONFIG_NR_CPUS=64/CONFIG_NR_CPUS=512/' config-x86_64-generic
 
+	@perl -pi -e 's/^%define debugbuildsenabled 1/%define debugbuildsenabled 0/' kernel.spec
+	@perl -pi -e 's/^%define rawhide_skip_docs 0/%define rawhide_skip_docs 1/' kernel.spec
+
 release:
 	@perl -pi -e 's/CONFIG_SLUB_DEBUG_ON=y/# CONFIG_SLUB_DEBUG_ON is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_LOCK_STAT=y/# CONFIG_LOCK_STAT is not set/' config-nodebug
@@ -96,13 +107,12 @@ release:
 	@perl -pi -e 's/CONFIG_DEBUG_LOCK_ALLOC=y/# CONFIG_DEBUG_LOCK_ALLOC is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_PROVE_LOCKING=y/# CONFIG_PROVE_LOCKING is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_DEBUG_SPINLOCK=y/# CONFIG_DEBUG_SPINLOCK is not set/' config-nodebug
-	@perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-debug
-	@perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_DEBUG_VM=y/# CONFIG_DEBUG_VM is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_DEBUG_SLEEP_IN_IRQ=y/# CONFIG_DEBUG_SLEEP_IN_IRQ is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_FAULT_INJECTION=y/# CONFIG_FAULT_INJECTION is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_FAILSLAB=y/# CONFIG_FAILSLAB is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_FAIL_PAGE_ALLOC=y/# CONFIG_FAIL_PAGE_ALLOC is not set/' config-nodebug
+	@perl -pi -e 's/CONFIG_FAIL_IO_TIMEOUT=y/# CONFIG_FAIL_IO_TIMEOUT is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_FAIL_MAKE_REQUEST=y/# CONFIG_FAIL_MAKE_REQUEST is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_FAULT_INJECTION_DEBUG_FS=y/# CONFIG_FAULT_INJECTION_DEBUG_FS is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y/# CONFIG_FAULT_INJECTION_STACKTRACE_FILTER is not set/' config-nodebug
@@ -119,11 +129,22 @@ release:
 	@perl -pi -e 's/CONFIG_DMA_API_DEBUG=y/# CONFIG_DMA_API_DEBUG is not set/' config-nodebug
 	@perl -pi -e 's/CONFIG_PM_TEST_SUSPEND=y/#\ CONFIG_PM_TEST_SUSPEND\ is\ not\ set/' config-generic
 	@perl -pi -e 's/CONFIG_BOOT_TRACER=y/#\ CONFIG_BOOT_TRACER\ is\ not\ set/' config-generic
-	@perl -pi -e 's/CONFIG_PCI_MSI_DEFAULT_ON=y/# CONFIG_PCI_MSI_DEFAULT_ON is not set/' config-generic
 	@perl -pi -e 's/CONFIG_B43_DEBUG=y/# CONFIG_B43_DEBUG is not set/' config-generic
 	@perl -pi -e 's/CONFIG_B43LEGACY_DEBUG=y/# CONFIG_B43LEGACY_DEBUG is not set/' config-generic
 	@perl -pi -e 's/CONFIG_MMIOTRACE=y/# CONFIG_MMIOTRACE is not set/' config-nodebug
 	@perl -pi -e 's/# CONFIG_STRIP_ASM_SYMS is not set/CONFIG_STRIP_ASM_SYMS=y/' config-nodebug
+	@perl -pi -e 's/CONFIG_DEBUG_CREDENTIALS=y/# CONFIG_DEBUG_CREDENTIALS is not set/' config-nodebug
+	@perl -pi -e 's/CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y/# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set/' config-nodebug
+	@perl -pi -e 's/CONFIG_ACPI_DEBUG=y/# CONFIG_ACPI_DEBUG is not set/' config-nodebug
+	@perl -pi -e 's/CONFIG_EXT4_DEBUG=y/# CONFIG_EXT4_DEBUG is not set/' config-nodebug
+	@perl -pi -e 's/CONFIG_DEBUG_PERF_USE_VMALLOC=y/# CONFIG_DEBUG_PERF_USE_VMALLOC is not set/' config-nodebug
+	@perl -pi -e 's/CONFIG_JBD2_DEBUG=y/# CONFIG_JBD2_DEBUG is not set/' config-nodebug
+	@perl -pi -e 's/CONFIG_FUNCTION_TRACER=y/# CONFIG_FUNCTION_TRACER is not set/' config-nodebug
+	@perl -pi -e 's/CONFIG_STACK_TRACER=y/# CONFIG_STACK_TRACER is not set/' config-nodebug
+	@perl -pi -e 's/CONFIG_DYNAMIC_FTRACE=y/# CONFIG_DYNAMIC_FTRACE is not set/' config-nodebug
+
+	@perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-debug
+	@perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-nodebug
 
 	@perl -pi -e 's/CONFIG_NR_CPUS=512/CONFIG_NR_CPUS=64/' config-x86_64-generic
 


Index: Makefile.config
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/Makefile.config,v
retrieving revision 1.70
retrieving revision 1.71
diff -u -p -r1.70 -r1.71
--- Makefile.config	5 Feb 2009 21:11:18 -0000	1.70
+++ Makefile.config	4 Jan 2010 15:25:39 -0000	1.71
@@ -5,13 +5,13 @@
 CFG		= kernel-$(VERSION)
 
 CONFIGFILES	= \
-	$(CFG)-i586.config $(CFG)-i586-debug.config \
+	$(CFG)-i686.config $(CFG)-i686-debug.config \
 	$(CFG)-i686-PAE.config $(CFG)-i686-PAEdebug.config \
 	$(CFG)-x86_64.config $(CFG)-x86_64-debug.config \
 	$(CFG)-s390x.config $(CFG)-arm.config \
 	$(CFG)-ppc.config $(CFG)-ppc-smp.config \
-	$(CFG)-sparc64.config $(CFG)-sparc64-smp.config \
-	$(CFG)-ppc64.config $(CFG)-ppc64-kdump.config $(CFG)-ppc64-debug.config \
+	$(CFG)-sparc64.config  \
+	$(CFG)-ppc64.config $(CFG)-ppc64-debug.config \
 	$(CFG)-ia64.config
 
 PLATFORMS	= x86 x86_64 powerpc powerpc32 powerpc64 s390x ia64 sparc64
@@ -68,10 +68,10 @@ kernel-$(VERSION)-i686-PAE.config: confi
 kernel-$(VERSION)-i686-PAEdebug.config: config-i686-PAE temp-x86-debug-generic
 	perl merge.pl $^ i386 > $@
 
-kernel-$(VERSION)-i586.config: config-i586 temp-x86-generic
+kernel-$(VERSION)-i686.config: /dev/null temp-x86-generic
 	perl merge.pl $^ i386 > $@
 
-kernel-$(VERSION)-i586-debug.config: config-i586 temp-x86-debug-generic
+kernel-$(VERSION)-i686-debug.config: /dev/null temp-x86-debug-generic
 	perl merge.pl $^ i386 > $@
 
 kernel-$(VERSION)-x86_64.config: /dev/null temp-x86_64-generic
@@ -80,18 +80,12 @@ kernel-$(VERSION)-x86_64.config: /dev/nu
 kernel-$(VERSION)-x86_64-debug.config: /dev/null temp-x86_64-debug-generic
 	perl merge.pl $^ x86_64 > $@
 
-kernel-$(VERSION)-sparc64-smp.config: config-sparc64-smp temp-sparc64-generic
-	perl merge.pl $^ sparc64 > $@
-
 kernel-$(VERSION)-sparc64.config: /dev/null temp-sparc64-generic
 	perl merge.pl $^ sparc64 > $@
 
 kernel-$(VERSION)-ppc64.config: config-powerpc64 temp-powerpc-generic
 	perl merge.pl $^ powerpc > $@
 
-kernel-$(VERSION)-ppc64-kdump.config: config-powerpc64-kdump kernel-$(VERSION)-ppc64.config
-	perl merge.pl $^ powerpc > $@
-
 kernel-$(VERSION)-ppc64-debug.config: config-powerpc64 temp-powerpc-debug-generic
 	perl merge.pl $^ powerpc > $@
 


Index: TODO
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/TODO,v
retrieving revision 1.74
retrieving revision 1.75
diff -u -p -r1.74 -r1.75
--- TODO	13 Oct 2009 10:04:06 -0000	1.74
+++ TODO	4 Jan 2010 15:25:39 -0000	1.75
@@ -20,18 +20,14 @@
 * linux-2.6-debug-vm-would-have-oomkilled.patch
 	Push for 2.6.29
 
-* linux-2.6-scsi-cpqarray-set-master.patch
-	Queued for 2.6.30 by Jens Axboe
-
-* linux-2.6-cdrom-door-status.patch
-	Getting some testing here before I go back to upstream with more
-	data.  See the thread at:
-	http://marc.info/?l=linux-scsi&m=121572509510899&w=2
-
 * linux-2.6-compile-fixes.patch
 * linux-2.6-hotfixes.patch
 	Empty
 
+* linux-2.6-crash-driver.patch
+	Unlikely to go upstream.
+	https://bugzilla.redhat.com/show_bug.cgi?id=492803
+
 * linux-2.6-debug-always-inline-kzalloc.patch
 	Sent upstream Sep 25 2008
 
@@ -63,17 +59,13 @@
 * linux-2.6-execshield.patch
 	Not interesting to upstream.
 
-* linux-2.6.29-lirc.patch
 * linux-2.6-sysrq-c.patch
+* linux-2.6.31-lirc.patch
+* lirc_streamzap-buffer-rework.patch
+* hdpvr-ir-enable.patch
+* hid-ignore-all-recent-imon-devices.patch
 	jarod working on upstreaming
 
-* drm-intel-lying-systems-without-lvds.patch
-	will be used as a fallback for 2.6.30 if vbios probing doesn't
-	pan out in time, may go to 2.6.29.x at some point (jarod's doing)
-* linux-2.6-acer-wmi-bail-on-aao.patch
-	suck. something similar-but-less-pretty merged upstream on 20090304,
-	a day after I (jarod) wrote my version... Headed to stable too.
-
 * linux-2.6-silence-acpi-blacklist.patch
 * linux-2.6-silence-fbcon-logo.patch
 * linux-2.6-silence-noise.patch
@@ -89,12 +81,5 @@
 	https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=126403
 	http://lkml.org/lkml/2006/8/2/208
 
-* acpi-ec-merge-irq-and-poll-modes.patch
-* acpi-ec-restart-command-even-if-no-interrupts-from-ec.patch
-* acpi-ec-use-burst-mode-only-for-msi-notebooks.patch
-	ACPI EC fixes from 2.6.32 (#492699, #525681)
-	Should go in F-12 and 2.6.31-stable too, once they're tested.
-
-* linux-2.6-cfq-choose-new-next-req.patch
-	Fixes severe cfq performance problem when writing CDs.
-	Should go into F-12, needs to be sent for 2.6.31.x too.
+* linux-2.6-kmemleak-improvements.patch
+	will go upstream for .31


Index: config-arm
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/config-arm,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- config-arm	25 Jul 2009 04:09:16 -0000	1.4
+++ config-arm	4 Jan 2010 15:25:40 -0000	1.5
@@ -9,6 +9,7 @@ CONFIG_ARCH_VERSATILE_PB=y
 CONFIG_MACH_VERSATILE_AB=y
 
 CONFIG_HIGHMEM=y
+# CONFIG_HIGHPTE is not set
 
 # CONFIG_CPU_ICACHE_DISABLE is not set
 # CONFIG_CPU_DCACHE_DISABLE is not set
@@ -38,6 +39,8 @@ CONFIG_ARM_THUMB=y
 CONFIG_AEABI=y
 CONFIG_OABI_COMPAT=y
 
+# CONFIG_UACCESS_WITH_MEMCPY is not set
+
 CONFIG_CMDLINE="console=ttyAM0,115200 root=/dev/sda1 rootdelay=20"
 
 CONFIG_NO_HZ=y
@@ -96,4 +99,4 @@ CONFIG_RTC_DRV_PL031=m
 
 CONFIG_ARM_UNWIND=y
 
-CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_RCU_FANOUT=32


Index: config-debug
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/config-debug,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -p -r1.28 -r1.29
--- config-debug	25 Jul 2009 03:16:38 -0000	1.28
+++ config-debug	4 Jan 2010 15:25:40 -0000	1.29
@@ -50,3 +50,19 @@ CONFIG_DEBUG_NOTIFIERS=y
 CONFIG_DMA_API_DEBUG=y
 
 CONFIG_MMIOTRACE=y
+
+CONFIG_DEBUG_CREDENTIALS=y
+
+CONFIG_EXT4_DEBUG=y
+
+CONFIG_DEBUG_PERF_USE_VMALLOC=y
+
+# off in both production debug and nodebug builds,
+#  on in rawhide nodebug builds
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+
+CONFIG_JBD2_DEBUG=y
+
+CONFIG_FUNCTION_TRACER=y
+CONFIG_STACK_TRACER=y
+CONFIG_DYNAMIC_FTRACE=y


Index: config-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/config-generic,v
retrieving revision 1.294
retrieving revision 1.295
diff -u -p -r1.294 -r1.295
--- config-generic	15 Oct 2009 08:28:27 -0000	1.294
+++ config-generic	4 Jan 2010 15:25:40 -0000	1.295
@@ -12,11 +12,12 @@ CONFIG_LOCALVERSION=""
 CONFIG_EXPERIMENTAL=y
 CONFIG_HOTPLUG=y
 CONFIG_UEVENT_HELPER_PATH=""
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 
 CONFIG_BUILD_DOCSRC=y
-CONFIG_DYNAMIC_DEBUG=y
 
 #
 # General setup
@@ -87,6 +88,8 @@ CONFIG_PCIEPORTBUS=y
 CONFIG_PCIEAER=y
 CONFIG_PCIEASPM=y
 # CONFIG_PCIEASPM_DEBUG is not set
+CONFIG_PCIE_ECRC=y
+CONFIG_PCIEAER_INJECT=m
 CONFIG_HOTPLUG_PCI_PCIE=y
 CONFIG_HOTPLUG_PCI_FAKE=m
 CONFIG_PCI_LEGACY=y
@@ -95,7 +98,6 @@ CONFIG_ISA=y
 # CONFIG_EISA is not set
 # CONFIG_MCA is not set
 # CONFIG_SCx200 is not set
-# CONFIG_DEBUG_KOBJECT is not set
 
 #
 # PCMCIA/CardBus support
@@ -124,6 +126,11 @@ CONFIG_MMC_SDRICOH_CS=m
 CONFIG_MMC_TIFM_SD=m
 CONFIG_MMC_WBSD=m
 CONFIG_MMC_VIA_SDMMC=m
+CONFIG_MMC_SDHCI_PLTFM=m
+CONFIG_MMC_CB710=m
+
+CONFIG_CB710_CORE=m
+# CONFIG_CB710_DEBUG is not set
 
 CONFIG_INFINIBAND=m
 CONFIG_INFINIBAND_MTHCA=m
@@ -231,6 +238,7 @@ CONFIG_MTD_SCB2_FLASH=m
 # CONFIG_MTD_L440GX is not set
 CONFIG_MTD_PCI=m
 CONFIG_MTD_TS5500=m
+# CONFIG_MTD_GPIO_ADDR is not set
 
 #
 # Self-contained MTD device drivers
@@ -349,6 +357,7 @@ CONFIG_BLK_DEV_UMEM=m
 CONFIG_BLK_DEV_LOOP=y
 CONFIG_BLK_DEV_CRYPTOLOOP=m
 CONFIG_BLK_DEV_NBD=m
+CONFIG_BLK_DEV_OSD=m
 CONFIG_BLK_DEV_RAM=y
 CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=16384
@@ -362,6 +371,7 @@ CONFIG_LSF=y
 CONFIG_BLK_DEV_DELKIN=m
 # CONFIG_BLK_DEV_IT8213 is not set
 # CONFIG_BLK_DEV_TC86C001 is not set
+CONFIG_LBDAF=y
 CONFIG_BLK_DEV_BSG=y
 CONFIG_BLK_DEV_INTEGRITY=y
 
@@ -434,6 +444,7 @@ CONFIG_VIRTIO_RING=m
 CONFIG_VIRTIO_PCI=m
 CONFIG_VIRTIO_BALLOON=m
 CONFIG_VIRTIO_NET=m
+CONFIG_VMXNET3=m
 CONFIG_HW_RANDOM_VIRTIO=m
 CONFIG_VIRTIO_CONSOLE=m
 
@@ -513,12 +524,14 @@ CONFIG_AIC79XX_RESET_DELAY_MS=15000
 CONFIG_AIC79XX_DEBUG_MASK=0
 # CONFIG_AIC79XX_REG_PRETTY_PRINT is not set
 # CONFIG_SCSI_ADVANSYS is not set
+CONFIG_SCSI_BFA_FC=m
 CONFIG_MEGARAID_NEWGEN=y
 CONFIG_MEGARAID_MM=m
 CONFIG_MEGARAID_MAILBOX=m
 CONFIG_MEGARAID_LEGACY=m
 CONFIG_MEGARAID_SAS=m
 CONFIG_SCSI_MVSAS=m
+# CONFIG_SCSI_MVSAS_DEBUG is not set
 CONFIG_SCSI_MPT2SAS=m
 CONFIG_SCSI_MPT2SAS_MAX_SGE=128
 CONFIG_SCSI_MPT2SAS_LOGGING=y
@@ -528,7 +541,13 @@ CONFIG_SCSI_OSD_ULD=m
 CONFIG_SCSI_OSD_DPRINT_SENSE=1
 # CONFIG_SCSI_OSD_DEBUG is not set
 
+CONFIG_SCSI_BNX2_ISCSI=m
+CONFIG_BE2ISCSI=m
+CONFIG_SCSI_PMCRAID=m
+
+
 CONFIG_ATA=y
+CONFIG_ATA_VERBOSE_ERROR=y
 CONFIG_ATA_SFF=y
 CONFIG_ATA_PIIX=y
 CONFIG_ATA_ACPI=y
@@ -588,6 +607,7 @@ CONFIG_PATA_PCMCIA=m
 CONFIG_PATA_PDC_OLD=m
 CONFIG_PATA_QDI=m
 # CONFIG_PATA_RADISYS is not set
+CONFIG_PATA_RDC=m
 # CONFIG_PATA_RZ1000 is not set
 # CONFIG_PATA_SC1200 is not set
 CONFIG_PATA_SERVERWORKS=m
@@ -598,6 +618,7 @@ CONFIG_PATA_SIS=m
 CONFIG_PATA_TRIFLEX=m
 CONFIG_PATA_VIA=m
 CONFIG_PATA_WINBOND=m
+CONFIG_PATA_ATP867X=m
 
 CONFIG_SCSI_BUSLOGIC=m
 CONFIG_SCSI_INITIO=m
@@ -659,6 +680,8 @@ CONFIG_MD_RAID1=m
 CONFIG_MD_RAID5_RESHAPE=y
 CONFIG_MD_RAID10=m
 CONFIG_MD_RAID456=m
+CONFIG_MULTICORE_RAID456=y
+CONFIG_ASYNC_RAID6_TEST=m
 CONFIG_BLK_DEV_DM=y
 CONFIG_DM_CRYPT=m
 CONFIG_DM_DEBUG=y
@@ -671,6 +694,9 @@ CONFIG_DM_MULTIPATH_RDAC=m
 CONFIG_DM_SNAPSHOT=y
 CONFIG_DM_UEVENT=y
 CONFIG_DM_ZERO=y
+CONFIG_DM_LOG_USERSPACE=m
+CONFIG_DM_MULTIPATH_QL=m
+CONFIG_DM_MULTIPATH_ST=m
 
 #
 # Fusion MPT device support
@@ -690,6 +716,7 @@ CONFIG_FUSION_LOGGING=y
 CONFIG_FIREWIRE=m
 CONFIG_FIREWIRE_OHCI=m
 CONFIG_FIREWIRE_SBP2=m
+CONFIG_FIREWIRE_NET=m
 CONFIG_FIREWIRE_OHCI_DEBUG=y
 # CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set
 
@@ -800,6 +827,8 @@ CONFIG_IPV6_PIMSM_V2=y
 
 CONFIG_RDS=m
 # CONFIG_RDS_DEBUG is not set
+CONFIG_RDS_RDMA=m
+CONFIG_RDS_TCP=m
 
 CONFIG_NET_9P=m
 CONFIG_NET_9P_FD=m
@@ -864,6 +893,7 @@ CONFIG_NETFILTER_XT_MATCH_TIME=m
 CONFIG_NETFILTER_XT_MATCH_U32=m
 CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
 CONFIG_NETFILTER_XT_MATCH_HL=m
+CONFIG_NETFILTER_XT_MATCH_OSF=m
 
 # CONFIG_NETFILTER_DEBUG is not set
 CONFIG_BRIDGE_NETFILTER=y
@@ -1149,7 +1179,7 @@ CONFIG_ATM_NICSTAR=m
 CONFIG_ATM_SOLOS=m
 
 CONFIG_RFKILL=m
-CONFIG_RFKILL_INPUT=m
+CONFIG_RFKILL_INPUT=y
 
 #
 # Ethernet (10 or 100Mbit)
@@ -1191,6 +1221,7 @@ CONFIG_DNET=m
 #
 CONFIG_NET_TULIP=y
 CONFIG_DE2104X=m
+CONFIG_DE2104X_DSL=0
 CONFIG_TULIP=m
 # CONFIG_TULIP_NAPI is not set
 # CONFIG_TULIP_MWI is not set
@@ -1216,6 +1247,7 @@ CONFIG_ADAPTEC_STARFIRE_NAPI=y
 CONFIG_B44=m
 CONFIG_B44_PCI=y
 CONFIG_BNX2=m
+CONFIG_CNIC=m
 CONFIG_QLA3XXX=m
 CONFIG_ATL1=m
 CONFIG_ATL1C=m
@@ -1253,6 +1285,8 @@ CONFIG_DE620=m
 CONFIG_CASSINI=m
 # CONFIG_FEC_8XX is not set
 CONFIG_ETHOC=m
+# CONFIG_KS8842 is not set
+# CONFIG_KS8851_MLL is not set
 
 #
 # Ethernet (1000 Mbit)
@@ -1335,6 +1369,8 @@ CONFIG_SLIP_SMART=y
 #
 # Wireless LAN
 #
+#
+CONFIG_WLAN=y
 # CONFIG_WLAN_PRE80211 is not set
 # CONFIG_STRIP is not set
 # CONFIG_ARLAN is not set
@@ -1346,7 +1382,11 @@ CONFIG_WLAN_80211=y
 CONFIG_WIRELESS=y
 CONFIG_CFG80211=m
 # CONFIG_CFG80211_REG_DEBUG is not set
+CONFIG_CFG80211_DEBUGFS=y
+# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
+CONFIG_CFG80211_DEFAULT_PS=y
 CONFIG_NL80211=y
+# CONFIG_NL80211_TESTMODE is not set
 # CONFIG_WIRELESS_OLD_REGULATORY is not set
 CONFIG_WIRELESS_EXT=y
 CONFIG_WIRELESS_EXT_SYSFS=y
@@ -1366,14 +1406,16 @@ CONFIG_MAC80211_MESH=y
 CONFIG_MAC80211_LEDS=y
 CONFIG_MAC80211_DEBUGFS=y
 # CONFIG_MAC80211_DEBUG_MENU is not set
+CONFIG_MAC80211_DEFAULT_PS=y
 
-CONFIG_WIMAX=y
+CONFIG_WIMAX=m
 CONFIG_WIMAX_DEBUG_LEVEL=8
 CONFIG_WIMAX_I2400M_USB=m
 CONFIG_WIMAX_I2400M_SDIO=m
 CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8
 
 CONFIG_ADM8211=m
+CONFIG_ATH_COMMON=m
 CONFIG_ATH5K=m
 CONFIG_ATH5K_DEBUG=y
 CONFIG_ATH9K=m
@@ -1385,10 +1427,12 @@ CONFIG_ATMEL=m
 # CONFIG_BCM43XX is not set
 CONFIG_B43=m
 CONFIG_B43_PCMCIA=y
-# CONFIG_B43_DEBUG is not set
+CONFIG_B43_SDIO=y
+CONFIG_B43_DEBUG=y
+CONFIG_B43_PHY_LP=y
 # CONFIG_B43_FORCE_PIO is not set
 CONFIG_B43LEGACY=m
-# CONFIG_B43LEGACY_DEBUG is not set
+CONFIG_B43LEGACY_DEBUG=y
 CONFIG_B43LEGACY_DMA=y
 CONFIG_B43LEGACY_PIO=y
 CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
@@ -1430,6 +1474,8 @@ CONFIG_IWL3945_RFKILL=y
 CONFIG_IWL3945_DEBUG=y
 CONFIG_IWL3945_SPECTRUM_MEASUREMENT=y
 CONFIG_IWL3945_LEDS=y
+CONFIG_IWM=m
+# CONFIG_IWM_DEBUG is not set
 CONFIG_MAC80211_HWSIM=m
 CONFIG_NORTEL_HERMES=m
 CONFIG_P54_COMMON=m
@@ -1439,7 +1485,7 @@ CONFIG_PCI_HERMES=m
 CONFIG_PLX_HERMES=m
 CONFIG_PCI_ATMEL=m
 CONFIG_MWL8K=m
-CONFIG_PRISM54=m
+# CONFIG_PRISM54 is not set
 CONFIG_PCMCIA_HERMES=m
 CONFIG_PCMCIA_SPECTRUM=m
 CONFIG_PCMCIA_ATMEL=m
@@ -1458,6 +1504,7 @@ CONFIG_RT61PCI_RFKILL=y
 CONFIG_RT61PCI_LEDS=y
 CONFIG_RT2500USB=m
 CONFIG_RT2500USB_LEDS=y
+CONFIG_RT2800USB=m
 CONFIG_RT73USB=m
 CONFIG_RT73USB_LEDS=y
 CONFIG_RTL8180=m
@@ -1469,6 +1516,12 @@ CONFIG_ZD1211RW=m
 # CONFIG_ZD1211RW_DEBUG is not set
 CONFIG_AR9170_USB=m
 
+CONFIG_WL12XX=y
+CONFIG_WL1251=m
+CONFIG_WL1251_SPI=m
+CONFIG_WL1251_SDIO=m
+CONFIG_WL1271=m
+
 #
 # Token Ring devices
 #
@@ -1514,6 +1567,14 @@ CONFIG_CAN=m
 CONFIG_CAN_RAW=m
 CONFIG_CAN_BCM=m
 CONFIG_CAN_VCAN=m
+CONFIG_CAN_DEV=m
+CONFIG_CAN_CALC_BITTIMING=y
+CONFIG_CAN_SJA1000=m
+CONFIG_CAN_SJA1000_ISA=m
+CONFIG_CAN_SJA1000_PLATFORM=m
+CONFIG_CAN_EMS_PCI=m
+CONFIG_CAN_EMS_USB=m
+CONFIG_CAN_KVASER_PCI=m
 CONFIG_NETROM=m
 CONFIG_ROSE=m
 CONFIG_MKISS=m
@@ -1604,6 +1665,8 @@ CONFIG_BT_HCIBFUSB=m
 CONFIG_BT_HCIBPA10X=m
 CONFIG_BT_HCIBTSDIO=m
 CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_MRVL=m
+CONFIG_BT_MRVL_SDIO=m
 
 #
 # ISDN subsystem
@@ -1612,6 +1675,11 @@ CONFIG_ISDN=y
 CONFIG_MISDN=m
 CONFIG_MISDN_DSP=m
 CONFIG_MISDN_L1OIP=m
+CONFIG_MISDN_AVMFRITZ=m
+CONFIG_MISDN_SPEEDFAX=m
+CONFIG_MISDN_INFINEON=m
+CONFIG_MISDN_W6692=m
+CONFIG_MISDN_NETJET=m
 
 #
 # mISDN hardware drivers
@@ -1778,17 +1846,25 @@ CONFIG_INPUT_KEYBOARD=y
 CONFIG_KEYBOARD_ATKBD=y
 # CONFIG_KEYBOARD_SUNKBD is not set
 # CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_MATRIX is not set
 # CONFIG_KEYBOARD_NEWTON is not set
 # CONFIG_KEYBOARD_STOWAWAY is not set
 # CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_LM8323 is not set
+CONFIG_QT2160=m
+CONFIG_KEYBOARD_ADP5588=m
+CONFIG_KEYBOARD_MAX7359=m
+CONFIG_KEYBOARD_OPENCORES=m
 CONFIG_INPUT_MOUSE=y
 CONFIG_MOUSE_PS2=y
 # CONFIG_MOUSE_PS2_TOUCHKIT is not set
 CONFIG_MOUSE_PS2_ELANTECH=y
+CONFIG_MOUSE_PS2_SENTELIC=y
 CONFIG_MOUSE_SERIAL=m
 CONFIG_MOUSE_VSXXXAA=m
 CONFIG_MOUSE_APPLETOUCH=m
 CONFIG_MOUSE_BCM5974=m
+CONFIG_MOUSE_SYNAPTICS_I2C=m
 CONFIG_INPUT_JOYSTICK=y
 CONFIG_JOYSTICK_ANALOG=m
 CONFIG_JOYSTICK_A3D=m
@@ -1835,8 +1911,12 @@ CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
 CONFIG_TOUCHSCREEN_TOUCHWIN=m
 CONFIG_TOUCHSCREEN_UCB1400=m
 CONFIG_TOUCHSCREEN_WACOM_W8001=m
+CONFIG_TOUCHSCREEN_USB_E2I=y
 CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
 # CONFIG_TOUCHSCREEN_WM97XX is not set
+CONFIG_TOUCHSCREEN_EETI=m
+CONFIG_TOUCHSCREEN_W90X900=m
+CONFIG_TOUCHSCREEN_MCS5000=m
 CONFIG_INPUT_MISC=y
 CONFIG_INPUT_PCSPKR=m
 CONFIG_INPUT_UINPUT=m
@@ -1846,9 +1926,12 @@ CONFIG_INPUT_ATLAS_BTNS=m
 CONFIG_INPUT_ATI_REMOTE=m
 CONFIG_INPUT_ATI_REMOTE2=m
 CONFIG_INPUT_KEYSPAN_REMOTE=m
+CONFIG_INPUT_IMON=m
 
 CONFIG_MAC_EMUMOUSEBTN=y
 
+CONFIG_INPUT_WM831X_ON=m
+
 #
 # Character devices
 #
@@ -1919,6 +2002,7 @@ CONFIG_PPDEV=m
 # I2C support
 #
 CONFIG_I2C=m
+CONFIG_I2C_COMPAT=y
 CONFIG_I2C_CHARDEV=m
 
 #
@@ -1952,6 +2036,7 @@ CONFIG_I2C_ALGOPCA=m
 CONFIG_EEPROM_AT24=m
 CONFIG_EEPROM_LEGACY=m
 CONFIG_EEPROM_93CX6=m
+CONFIG_EEPROM_MAX6875=m
 
 CONFIG_I2C_NFORCE2=m
 # CONFIG_I2C_OCORES is not set
@@ -1974,6 +2059,7 @@ CONFIG_I2C_TINY_USB=m
 # CONFIG_I2C_VIA is not set
 # CONFIG_I2C_VIAPRO is not set
 CONFIG_I2C_VOODOO3=m
+# CONFIG_I2C_DESIGNWARE is not set
 
 #
 # I2C Hardware Sensors Chip support
@@ -2046,6 +2132,7 @@ CONFIG_SENSORS_SMSC47M1=m
 CONFIG_SENSORS_SMSC47M192=m
 CONFIG_SENSORS_SMSC47B397=m
 CONFIG_SENSORS_THMC50=m
+CONFIG_SENSORS_TMP401=m
 CONFIG_SENSORS_TSL2550=m
 CONFIG_SENSORS_VIA686A=m
 CONFIG_SENSORS_VIA_CPUTEMP=m
@@ -2061,6 +2148,9 @@ CONFIG_SENSORS_W83792D=m
 CONFIG_SENSORS_W83793=m
 CONFIG_SENSORS_LTC4215=m
 CONFIG_SENSORS_LM95241=m
+CONFIG_SENSORS_TMP421=m
+CONFIG_SENSORS_WM8350=m
+CONFIG_SENSORS_WM831X=m
 
 CONFIG_W1=m
 CONFIG_W1_CON=y
@@ -2129,6 +2219,7 @@ CONFIG_PCIPCWATCHDOG=m
 CONFIG_USBPCWATCHDOG=m
 # CONFIG_SBC_EPX_C3_WATCHDOG is not set
 CONFIG_WM8350_WATCHDOG=m
+CONFIG_WM831X_WATCHDOG=m
 
 CONFIG_HW_RANDOM=y
 CONFIG_HW_RANDOM_TIMERIOMEM=m
@@ -2137,7 +2228,8 @@ CONFIG_HW_RANDOM_TIMERIOMEM=m
 # CONFIG_RTC_DEBUG is not set
 # CONFIG_GEN_RTC is not set
 CONFIG_RTC_CLASS=y
-# CONFIG_RTC_HCTOSYS is not set
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
 CONFIG_RTC_INTF_SYSFS=y
 CONFIG_RTC_INTF_PROC=y
 CONFIG_RTC_INTF_DEV=y
@@ -2166,10 +2258,13 @@ CONFIG_RTC_DRV_V3020=m
 CONFIG_RTC_DRV_STK17TA8=m
 # CONFIG_RTC_DRV_S35390A is not set
 CONFIG_RTC_DRV_RX8581=m
+CONFIG_RTC_DRV_RX8025=m
 CONFIG_RTC_DRV_DS1286=m
 CONFIG_RTC_DRV_M48T35=m
 CONFIG_RTC_DRV_BQ4802=m
 CONFIG_RTC_DRV_WM8350=m
+CONFIG_RTC_DRV_AB3100=m
+CONFIG_RTC_DRV_WM831X=m
 
 CONFIG_DTLK=m
 CONFIG_R3964=m
@@ -2190,6 +2285,7 @@ CONFIG_AGP_SIS=y
 CONFIG_AGP_SWORKS=y
 CONFIG_AGP_VIA=y
 CONFIG_AGP_EFFICEON=y
+CONFIG_VGA_ARB=y
 CONFIG_DRM=m
 CONFIG_DRM_TDFX=m
 CONFIG_DRM_R128=m
@@ -2204,7 +2300,10 @@ CONFIG_DRM_I915=m
 CONFIG_DRM_I915_KMS=y
 CONFIG_DRM_VIA=m
 CONFIG_DRM_NOUVEAU=m
-# CONFIG_DRM_NOUVEAU_KMS is not set
+CONFIG_DRM_NOUVEAU_KMS=y
+CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+CONFIG_DRM_NOUVEAU_DEBUG=y
+CONFIG_DRM_I2C_CH7006=m
 
 #
 # PCMCIA character devices
@@ -2222,6 +2321,7 @@ CONFIG_HANGCHECK_TIMER=m
 #
 # Multimedia devices
 #
+CONFIG_MEDIA_SUPPORT=m
 CONFIG_VIDEO_DEV=m
 # CONFIG_VIDEO_ADV_DEBUG is not set
 CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
@@ -2289,6 +2389,7 @@ CONFIG_VIDEO_ZORAN_LML33=m
 CONFIG_VIDEO_ZORAN_LML33R10=m
 CONFIG_VIDEO_ZORAN_ZR36060=m
 CONFIG_VIDEO_FB_IVTV=m
+CONFIG_VIDEO_SAA7164=m
 
 CONFIG_USB_VIDEO_CLASS=m
 CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
@@ -2308,6 +2409,7 @@ CONFIG_MEDIA_ATTACH=y
 #
 CONFIG_DVB_CAPTURE_DRIVERS=y
 CONFIG_DVB_CORE=m
+CONFIG_DVB_MAX_ADAPTERS=8
 CONFIG_DVB_DYNAMIC_MINORS=y
 
 # CONFIG_DVB_FE_CUSTOMISE is not set
@@ -2318,13 +2420,15 @@ CONFIG_DVB_DYNAMIC_MINORS=y
 CONFIG_DVB_BT8XX=m
 CONFIG_DVB_BUDGET_CORE=m
 CONFIG_DVB_PLUTO2=m
-CONFIG_DVB_SIANO_SMS1XXX=m
-CONFIG_DVB_SIANO_SMS1XXX_SMS_IDS=y
+CONFIG_SMS_SIANO_MDTV=m
+CONFIG_SMS_USB_DRV=m
+CONFIG_SMS_SDIO_DRV=m
 CONFIG_DVB_TTUSB_DEC=m
 CONFIG_DVB_USB_DTV5100=m
 CONFIG_DVB_USB_AF9015=m
 CONFIG_DVB_USB_ANYSEE=m
 CONFIG_DVB_USB_DW2102=m
+CONFIG_DVB_USB_FRIIO=m
 CONFIG_DVB_DM1105=m
 CONFIG_DVB_DRX397XD=m
 CONFIG_DVB_LGDT3304=m
@@ -2380,6 +2484,8 @@ CONFIG_DVB_USB_UMT_010=m
 CONFIG_DVB_USB_VP702X=m
 CONFIG_DVB_USB_VP7045=m
 
+CONFIG_DVB_PT1=m
+
 CONFIG_VIDEO_SAA7146=m
 CONFIG_VIDEO_SAA7146_VV=m
 CONFIG_VIDEO_TUNER=m
@@ -2509,6 +2615,7 @@ CONFIG_SOUND=m
 # Advanced Linux Sound Architecture
 #
 CONFIG_SND=y
+CONFIG_SOUND_OSS_CORE_PRECLAIM=y
 # CONFIG_SND_DEBUG_VERBOSE is not set
 CONFIG_SND_VERBOSE_PROCFS=y
 CONFIG_SND_SEQUENCER=y
@@ -2536,7 +2643,7 @@ CONFIG_SND_SERIAL_U16550=m
 CONFIG_SND_MPU401=m
 CONFIG_SND_PORTMAN2X4=m
 CONFIG_SND_AC97_POWER_SAVE=y
-CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
+CONFIG_SND_AC97_POWER_SAVE_DEFAULT=5
 
 CONFIG_SND_DRIVERS=y
 
@@ -2580,14 +2687,20 @@ CONFIG_SND_ES1938=m
 CONFIG_SND_ES1968=m
 CONFIG_SND_FM801=m
 CONFIG_SND_FM801_TEA575X_BOOL=y
+CONFIG_SND_CTXFI=m
+CONFIG_SND_LX6464ES=m
 CONFIG_SND_HDA_INTEL=y
 CONFIG_SND_HDA_INPUT_BEEP=y
+CONFIG_SND_HDA_INPUT_JACK=y
+CONFIG_SND_HDA_PATCH_LOADER=y
 CONFIG_SND_HDA_HWDEP=y
 CONFIG_SND_HDA_CODEC_REALTEK=y
+CONFIG_SND_HDA_CODEC_CA0110=y
 CONFIG_SND_HDA_CODEC_ANALOG=y
 CONFIG_SND_HDA_CODEC_SIGMATEL=y
 CONFIG_SND_HDA_CODEC_VIA=y
 CONFIG_SND_HDA_CODEC_ATIHDMI=y
+CONFIG_SND_HDA_CODEC_CIRRUS=y
 CONFIG_SND_HDA_CODEC_CONEXANT=y
 CONFIG_SND_HDA_CODEC_CMEDIA=y
 CONFIG_SND_HDA_CODEC_INTELHDMI=y
@@ -2595,7 +2708,7 @@ CONFIG_SND_HDA_CODEC_SI3054=y
 CONFIG_SND_HDA_CODEC_NVHDMI=y
 CONFIG_SND_HDA_GENERIC=y
 CONFIG_SND_HDA_POWER_SAVE=y
-CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
+CONFIG_SND_HDA_POWER_SAVE_DEFAULT=5
 CONFIG_SND_HDA_RECONFIG=y
 CONFIG_SND_HDSPM=m
 CONFIG_SND_HIFIER=m
@@ -2642,8 +2755,9 @@ CONFIG_SND_USB_US122L=m
 #
 # PCMCIA devices
 #
-# CONFIG_SND_PCMCIA is not set
-# CONFIG_SND_VXPOCKET is not set
+CONFIG_SND_PCMCIA=y
+CONFIG_SND_VXPOCKET=m
+CONFIG_SND_PDAUDIOCF=m
 
 #
 # Open Sound System
@@ -2681,6 +2795,9 @@ CONFIG_USB_OHCI_HCD=y
 CONFIG_USB_UHCI_HCD=y
 # CONFIG_USB_SL811_CS is not set
 # CONFIG_USB_R8A66597_HCD is not set
+CONFIG_USB_XHCI_HCD=m
+# CONFIG_USB_XHCI_HCD_DEBUGGING is not set
+CONFIG_USB_ISP1362_HCD=m
 
 #
 # USB Device Class drivers
@@ -2696,7 +2813,7 @@ CONFIG_USB_TMC=m
 # CONFIG_BLK_DEV_UB is not set
 CONFIG_USB_STORAGE=m
 # CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+CONFIG_USB_STORAGE_CYPRESS_ATACB=y
 CONFIG_USB_STORAGE_DATAFAB=y
 CONFIG_USB_STORAGE_FREECOM=y
 CONFIG_USB_STORAGE_ISD200=y
@@ -2726,14 +2843,16 @@ CONFIG_HID_FF=y
 CONFIG_HID_PID=y
 # CONFIG_HID_COMPAT is not set
 CONFIG_LOGITECH_FF=y
-CONFIG_GREENASIA_FF=m
 CONFIG_LOGIRUMBLEPAD2_FF=y
 CONFIG_PANTHERLORD_FF=y
 CONFIG_THRUSTMASTER_FF=y
+CONFIG_HID_WACOM=y
 CONFIG_ZEROPLUS_FF=y
 CONFIG_USB_HIDDEV=y
 CONFIG_USB_IDMOUSE=m
-CONFIG_DRAGONRISE_FF=m
+CONFIG_DRAGONRISE_FF=y
+CONFIG_GREENASIA_FF=y
+CONFIG_SMARTJOYPLUS_FF=y
 
 #
 # USB Imaging devices
@@ -2762,6 +2881,8 @@ CONFIG_USB_GSPCA_OV519=m
 CONFIG_USB_GSPCA_OV534=m
 CONFIG_USB_GSPCA_PAC207=m
 CONFIG_USB_GSPCA_PAC7311=m
+CONFIG_USB_GSPCA_SN9C20X=m
+CONFIG_USB_GSPCA_SN9C20X_EVDEV=y
 CONFIG_USB_GSPCA_SONIXB=m
 CONFIG_USB_GSPCA_SONIXJ=m
 CONFIG_USB_GSPCA_SPCA500=m
@@ -2778,9 +2899,12 @@ CONFIG_USB_GSPCA_VC032X=m
 CONFIG_USB_GSPCA_ZC3XX=m
 CONFIG_USB_GSPCA_SQ905=m
 CONFIG_USB_GSPCA_SQ905C=m
+CONFIG_USB_GL860=m
+CONFIG_USB_GSPCA_JEILINJ=m
+
 CONFIG_USB_IBMCAM=m
 CONFIG_USB_KONICAWC=m
-CONFIG_USB_OV511=m
+# CONFIG_USB_OV511 is not set
 CONFIG_USB_S2255=m
 CONFIG_USB_SE401=m
 # CONFIG_VIDEO_SH_MOBILE_CEU is not set
@@ -2817,6 +2941,8 @@ CONFIG_USB_NET_RNDIS_HOST=m
 CONFIG_USB_NET_CDC_SUBSET=m
 CONFIG_USB_NET_CDC_EEM=m
 CONFIG_USB_NET_ZAURUS=m
+CONFIG_USB_NET_INT51X1=m
+CONFIG_USB_CDC_PHONET=m
 
 #
 # USB Host-to-Host Cables
@@ -2831,6 +2957,8 @@ CONFIG_USB_ARMLINUX=y
 CONFIG_USB_EPSON2888=y
 CONFIG_USB_KC2190=y
 
+# CONFIG_USB_MUSB_HDRC is not set
+
 #
 # USB port drivers
 #
@@ -2949,11 +3077,14 @@ CONFIG_USB_PWC=m
 CONFIG_USB_PWC_INPUT_EVDEV=y
 # CONFIG_USB_PWC_DEBUG is not set
 # CONFIG_USB_RIO500 is not set
-CONFIG_USB_QUICKCAM_MESSENGER=m
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
 CONFIG_USB_SL811_HCD=m
 CONFIG_USB_SISUSBVGA=m
 CONFIG_USB_SISUSBVGA_CON=y
+CONFIG_RADIO_SI470X=y
 CONFIG_USB_SI470X=m
+CONFIG_I2C_SI470X=m
+CONFIG_RADIO_SI4713=m
 CONFIG_USB_MR800=m
 CONFIG_USB_STKWEBCAM=m
 # CONFIG_USB_TEST is not set
@@ -2973,6 +3104,7 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
 #
 CONFIG_SSB=m
 CONFIG_SSB_PCIHOST=y
+CONFIG_SSB_SDIOHOST=y
 CONFIG_SSB_PCMCIAHOST=y
 # CONFIG_SSB_SILENT is not set
 # CONFIG_SSB_DEBUG is not set
@@ -2982,6 +3114,7 @@ CONFIG_SSB_DRIVER_PCICORE=y
 # CONFIG_MFD_PCF50633 is not set
 CONFIG_PCF50633_ADC=m
 CONFIG_PCF50633_GPIO=m
+CONFIG_AB3100_CORE=m
 CONFIG_INPUT_PCF50633_PMU=m
 CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
 CONFIG_CHARGER_PCF50633=m
@@ -2994,6 +3127,8 @@ CONFIG_MFD_SM501_GPIO=y
 CONFIG_MFD_WM8400=m
 CONFIG_MFD_WM8350_I2C=m
 CONFIG_MFD_WM8350=m
+CONFIG_MFD_WM831X=m
+CONFIG_AB3100_OTP=m
 
 #
 # File systems
@@ -3018,7 +3153,6 @@ CONFIG_EXT4_FS_POSIX_ACL=y
 CONFIG_EXT4_FS_SECURITY=y
 CONFIG_EXT4DEV_COMPAT=y
 CONFIG_JBD2=y
-CONFIG_JBD2_DEBUG=y
 CONFIG_FS_MBCACHE=y
 CONFIG_REISERFS_FS=m
 # CONFIG_REISERFS_CHECK is not set
@@ -3057,6 +3191,7 @@ CONFIG_FSCACHE=m
 CONFIG_FSCACHE_STATS=y
 # CONFIG_FSCACHE_HISTOGRAM is not set
 # CONFIG_FSCACHE_DEBUG is not set
+CONFIG_FSCACHE_OBJECT_LIST=y
 
 CONFIG_CACHEFILES=m
 # CONFIG_CACHEFILES_DEBUG is not set
@@ -3125,8 +3260,10 @@ CONFIG_UFS_FS=m
 # CONFIG_UFS_FS_WRITE is not set
 # CONFIG_UFS_DEBUG is not set
 CONFIG_9P_FS=m
+CONFIG_9P_FSCACHE=y
 CONFIG_FUSE_FS=m
 CONFIG_OMFS_FS=m
+CONFIG_CUSE=m
 
 #
 # Network File Systems
@@ -3136,6 +3273,7 @@ CONFIG_NFS_FS=m
 CONFIG_NFS_V3=y
 CONFIG_NFS_V3_ACL=y
 CONFIG_NFS_V4=y
+# CONFIG_NFS_V4_1 is not set
 CONFIG_NFS_DIRECTIO=y
 CONFIG_NFSD=m
 CONFIG_NFSD_V3=y
@@ -3275,6 +3413,7 @@ CONFIG_NLS_ASCII=y
 #
 CONFIG_PROFILING=y
 CONFIG_OPROFILE=m
+CONFIG_OPROFILE_EVENT_MULTIPLEX=y
 
 #
 # Kernel hacking
@@ -3300,22 +3439,6 @@ CONFIG_KGDB_SERIAL_CONSOLE=y
 CONFIG_KGDB_TESTS=y
 # CONFIG_KGDB_TESTS_ON_BOOT is not set
 
-# These debug options are deliberatly left on.
-# They aren't that much of a performance impact, and the value
-# from getting out-of-tree modules fixed is worth the trade-off.
-CONFIG_DEBUG_HIGHMEM=y
-CONFIG_DEBUG_SPINLOCK_SLEEP=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
-
-CONFIG_DEBUG_RODATA_TEST=y
-CONFIG_DEBUG_NX_TEST=m
-CONFIG_DEBUG_BOOT_PARAMS=y
-
 #
 # Security options
 #
@@ -3335,7 +3458,6 @@ CONFIG_SECURITY_SELINUX_CHECKREQPROT_VAL
 CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT=y
 CONFIG_SECURITY_SELINUX_AVC_STATS=y
 CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=65536
-CONFIG_LSM_MMAP_MIN_ADDR=65536
 # CONFIG_SECURITY_SMACK is not set
 # CONFIG_SECURITY_TOMOYO is not set
 CONFIG_AUDIT=y
@@ -3395,10 +3517,12 @@ CONFIG_CRYPTO_TGR192=m
 CONFIG_CRYPTO_TWOFISH=m
 CONFIG_CRYPTO_WP512=m
 CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_VMAC=m
 CONFIG_CRYPTO_XTS=m
 CONFIG_CRYPTO_TEST=m
 CONFIG_LIBCRC32C=m
 CONFIG_CRYPTO_CRC32C_INTEL=m
+CONFIG_CRYPTO_GHASH=m
 CONFIG_CRYPTO_ANSI_CPRNG=m
 CONFIG_CRYPTO_DEV_HIFN_795X=m
 CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
@@ -3437,6 +3561,7 @@ CONFIG_FB_RADEON_BACKLIGHT=y
 CONFIG_FB_ATY128_BACKLIGHT=y
 CONFIG_FB_ATY_BACKLIGHT=y
 # CONFIG_BACKLIGHT_SAHARA is not set
+CONFIG_BACKLIGHT_WM831X=m
 
 CONFIG_LCD_CLASS_DEVICE=m
 CONFIG_LCD_PLATFORM=m
@@ -3465,12 +3590,9 @@ CONFIG_PROC_PID_CPUSET=y
 
 CONFIG_RELAY=y
 # CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
 
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
-CONFIG_DETECT_HUNG_TASK=y
-# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_ENABLE_WARN_DEPRECATED is not set
 
 CONFIG_KEXEC=y
 
@@ -3488,7 +3610,8 @@ CONFIG_PM_LEGACY=y
 CONFIG_PM_DEBUG=y
 CONFIG_PM_TRACE=y
 # CONFIG_PM_VERBOSE is not set
-# CONFIG_PM_TEST_SUSPEND is not set
+CONFIG_PM_TEST_SUSPEND=y
+CONFIG_PM_RUNTIME=y
 
 ## BEGIN ISA Junk.
 
@@ -3628,7 +3751,6 @@ CONFIG_SND_SBAWE=m
 CONFIG_SND_OPL3SA2=m
 # CONFIG_SND_SGALAXY is not set
 # CONFIG_SND_SSCAPE is not set
-# CONFIG_SND_PDAUDIOCF is not set
 CONFIG_SND_DARLA20=m
 CONFIG_SND_GINA20=m
 CONFIG_SND_LAYLA20=m
@@ -3674,6 +3796,8 @@ CONFIG_LEDS_TRIGGER_BACKLIGHT=m
 CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
 CONFIG_LEDS_ALIX2=m
 CONFIG_LEDS_WM8350=m
+CONFIG_LEDS_LP3944=m
+CONFIG_LEDS_WM831X_STATUS=m
 
 CONFIG_DMADEVICES=y
 CONFIG_DMA_ENGINE=y
@@ -3694,10 +3818,11 @@ CONFIG_WORKQUEUE_TRACER=y
 CONFIG_EVENT_TRACER=y
 CONFIG_FTRACE_SYSCALLS=y
 CONFIG_KMEMTRACE=y
-CONFIG_DYNAMIC_FTRACE=y
 CONFIG_FTRACE_MCOUNT_RECORD=y
 # CONFIG_FTRACE_STARTUP_TEST is not set
 # CONFIG_TRACE_BRANCH_PROFILING is not set
+CONFIG_FUNCTION_PROFILER=y
+CONFIG_RING_BUFFER_BENCHMARK=m
 
 CONFIG_KPROBES=y
 
@@ -3719,9 +3844,12 @@ CONFIG_CFAG12864B_RATE=20
 CONFIG_POWER_SUPPLY=m
 # CONFIG_POWER_SUPPLY_DEBUG is not set
 CONFIG_APM_POWER=m
+CONFIG_WM831X_POWER=m
 # CONFIG_BATTERY_DS2760 is not set
+# CONFIG_BATTERY_DS2782 is not set
 CONFIG_BATTERY_PMU=m
 CONFIG_BATTERY_BQ27x00=m
+CONFIG_BATTERY_MAX17040=m
 # CONFIG_PDA_POWER is not set
 
 CONFIG_AUXDISPLAY=y
@@ -3733,6 +3861,7 @@ CONFIG_UIO_PDRV=m
 CONFIG_UIO_PDRV_GENIRQ=m
 CONFIG_UIO_AEC=m
 CONFIG_UIO_SERCOS3=m
+CONFIG_UIO_PCI_GENERIC=m
 
 CONFIG_INSTRUMENTATION=y
 CONFIG_MARKERS=y
@@ -3741,8 +3870,7 @@ CONFIG_MARKERS=y
 CONFIG_DEFAULT_RELATIME=y
 
 # LIRC
-CONFIG_INPUT_LIRC=y
-CONFIG_LIRC_DEV=m
+CONFIG_INPUT_LIRC=m
 CONFIG_LIRC_BT829=m
 CONFIG_LIRC_ENE0100=m
 CONFIG_LIRC_I2C=m
@@ -3751,7 +3879,6 @@ CONFIG_LIRC_IMON=m
 CONFIG_LIRC_IT87=m
 CONFIG_LIRC_ITE8709=m
 CONFIG_LIRC_MCEUSB=m
-CONFIG_LIRC_MCEUSB2=m
 CONFIG_LIRC_ZILOG=m
 CONFIG_LIRC_PARALLEL=m
 CONFIG_LIRC_SERIAL=m
@@ -3855,6 +3982,13 @@ CONFIG_REGULATOR_BQ24022=m
 CONFIG_REGULATOR_WM8350=m
 CONFIG_REGULATOR_WM8400=m
 CONFIG_REGULATOR_DA903X=m
+CONFIG_REGULATOR_USERSPACE_CONSUMER=m
+CONFIG_REGULATOR_MAX1586=m
+CONFIG_REGULATOR_LP3971=m
+CONFIG_REGULATOR_AB3100=m
+CONFIG_REGULATOR_TPS65023=m
+CONFIG_REGULATOR_TPS6507X=m
+CONFIG_REGULATOR_WM831X=m
 
 CONFIG_WM8350_POWER=m
 
@@ -3910,6 +4044,18 @@ CONFIG_USB_ATMEL=m
 # CONFIG_LINE6_USB is not set
 # CONFIG_USB_SERIAL_QUATECH_ESU100 is not set
 # CONFIG_RT3070 is not set
+# CONFIG_RTL8192SU is not set
+# CONFIG_COWLOOP is not set
+# CONFIG_IIO is not set
+# CONFIG_VME_BUS is not set
+# CONFIG_RAR_REGISTER is not set
+# CONFIG_VT6656 is not set
+# CONFIG_USB_SERIAL_QUATECH_USB2 is not set
+# CONFIG_RTL8192E is not set
+# CONFIG_INPUT_GPIO is not set
+# CONFIG_VIDEO_CX25821 is not set
+# CONFIG_RT3090 is not set
+# CONFIG_HYPERV is not set
 
 #
 # Android
@@ -3924,10 +4070,8 @@ CONFIG_USB_ATMEL=m
 # CONFIG_DEBUG_VIRTUAL is not set
 # CONFIG_RCU_CPU_STALL_DETECTOR is not set
 # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
-CONFIG_FUNCTION_TRACER=y
 # CONFIG_FUNCTION_GRAPH_TRACER is not set
-# CONFIG_BOOT_TRACER is not set
-CONFIG_STACK_TRACER=y
+CONFIG_BOOT_TRACER=y
 # CONFIG_DYNAMIC_PRINTK_DEBUG is not set
 CONFIG_EARLY_PRINTK_DBGP=y
 
@@ -3942,13 +4086,71 @@ CONFIG_FCOE_FNIC=m
 
 CONFIG_NOP_USB_XCEIV=m
 
-# CONFIG_IMA is not set
+CONFIG_IMA=y
+CONFIG_IMA_MEASURE_PCR_IDX=10
+CONFIG_IMA_AUDIT=y
+CONFIG_IMA_LSM_RULES=y
+
+CONFIG_LSM_MMAP_MIN_ADDR=65536
 
 # CONFIG_PAGE_POISONING is not set
 
 CONFIG_SLOW_WORK=y
+CONFIG_SLOW_WORK_DEBUG=y
 
 # CONFIG_CRASH_DUMP is not set
 # CONFIG_CRASH is not set
 
 CONFIG_STRIP_ASM_SYMS=y
+
+# CONFIG_RCU_FANOUT_EXACT is not set
+
+CONFIG_KSM=y
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+
+CONFIG_FSNOTIFY=y
+
+CONFIG_IEEE802154=m
+CONFIG_IEEE802154_DRIVERS=m
+CONFIG_IEEE802154_FAKEHARD=m
+
+# CONFIG_GCOV_KERNEL is not set
+
+CONFIG_PPS=m
+# CONFIG_PPS_DEBUG is not set
+
+# CONFIG_USB_SERIAL_QUATECH2 is not set
+# CONFIG_VT6655 is not set
+# CONFIG_USB_CPC is not set
+# CONFIG_RDC_17F3101X is not set
+# CONFIG_FB_UDL is not set
+
+# DEBUG options that don't get enabled/disabled with 'make debug/release'
+#
+# Kmemleak still produces a lot of false positives.
+# CONFIG_DEBUG_KMEMLEAK is not set
+#
+# This generates a huge amount of dmesg spew
+# CONFIG_DEBUG_KOBJECT is not set
+#
+#
+# These debug options are deliberatly left on (even in 'make release' kernels).
+# They aren't that much of a performance impact, and the value
+# from getting useful bug-reports makes it worth leaving them on.
+CONFIG_DYNAMIC_DEBUG=y
+CONFIG_DEBUG_HIGHMEM=y
+CONFIG_DEBUG_SPINLOCK_SLEEP=y
+CONFIG_BOOT_PRINTK_DELAY=y
+CONFIG_DEBUG_LIST=y
+CONFIG_DEBUG_SHIRQ=y
+CONFIG_DEBUG_DEVRES=y
+CONFIG_DEBUG_RODATA_TEST=y
+CONFIG_DEBUG_NX_TEST=m
+CONFIG_DEBUG_BOOT_PARAMS=y
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_DETECT_HUNG_TASK=y
+# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+
+CONFIG_MEMORY_FAILURE=y
+CONFIG_HWPOISON_INJECT=m


Index: config-i686-PAE
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/config-i686-PAE,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- config-i686-PAE	12 Jul 2007 19:15:37 -0000	1.1
+++ config-i686-PAE	4 Jan 2010 15:25:40 -0000	1.2
@@ -1,5 +1,5 @@
-CONFIG_M686=y
-# CONFIG_NOHIGHMEM is not set
 # CONFIG_HIGHMEM4G is not set
 CONFIG_HIGHMEM64G=y
 
+CONFIG_XEN_DEV_EVTCHN=m
+CONFIG_XEN_SYS_HYPERVISOR=y


Index: config-ia64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/config-ia64-generic,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -p -r1.26 -r1.27
--- config-ia64-generic	25 Jul 2009 04:09:16 -0000	1.26
+++ config-ia64-generic	4 Jan 2010 15:25:40 -0000	1.27
@@ -209,4 +209,7 @@ CONFIG_PARAVIRT=y
 
 CONFIG_DMAR_DEFAULT_ON=y
 
-CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_RCU_FANOUT=64
+
+CONFIG_ACPI_POWER_METER=m
+CONFIG_I2C_SCMI=m


Index: config-nodebug
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/config-nodebug,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -p -r1.37 -r1.38
--- config-nodebug	25 Jul 2009 03:16:38 -0000	1.37
+++ config-nodebug	4 Jan 2010 15:25:40 -0000	1.38
@@ -2,50 +2,67 @@ CONFIG_SND_VERBOSE_PRINTK=y
 CONFIG_SND_DEBUG=y
 CONFIG_SND_PCM_XRUN_DEBUG=y
 
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_DEBUG_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-
-# CONFIG_FAULT_INJECTION is not set
-# CONFIG_FAILSLAB is not set
-# CONFIG_FAIL_PAGE_ALLOC is not set
-# CONFIG_FAIL_MAKE_REQUEST is not set
-# CONFIG_FAULT_INJECTION_DEBUG_FS is not set
-# CONFIG_FAULT_INJECTION_STACKTRACE_FILTER is not set
-# CONFIG_FAIL_IO_TIMEOUT is not set
-
-# CONFIG_SLUB_DEBUG_ON is not set
+CONFIG_DEBUG_MUTEXES=y
+CONFIG_DEBUG_RT_MUTEXES=y
+CONFIG_DEBUG_LOCK_ALLOC=y
+CONFIG_PROVE_LOCKING=y
+CONFIG_DEBUG_VM=y
+CONFIG_DEBUG_SPINLOCK=y
+
+CONFIG_FAULT_INJECTION=y
+CONFIG_FAILSLAB=y
+CONFIG_FAIL_PAGE_ALLOC=y
+CONFIG_FAIL_MAKE_REQUEST=y
+CONFIG_FAULT_INJECTION_DEBUG_FS=y
+CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y
+CONFIG_FAIL_IO_TIMEOUT=y
+
+CONFIG_SLUB_DEBUG_ON=y
 
-# CONFIG_LOCK_STAT is not set
+CONFIG_LOCK_STAT=y
 
-# CONFIG_DEBUG_STACK_USAGE is not set
+CONFIG_DEBUG_STACK_USAGE=y
 
-# CONFIG_ACPI_DEBUG is not set
+CONFIG_ACPI_DEBUG=y
+# CONFIG_ACPI_DEBUG_FUNC_TRACE is not set
 
-# CONFIG_DEBUG_SG is not set
+CONFIG_DEBUG_SG=y
 
 # CONFIG_DEBUG_PAGEALLOC is not set
 
-# CONFIG_DEBUG_WRITECOUNT is not set
-# CONFIG_DEBUG_OBJECTS is not set
+CONFIG_DEBUG_WRITECOUNT=y
+CONFIG_DEBUG_OBJECTS=y
 # CONFIG_DEBUG_OBJECTS_SELFTEST is not set
-# CONFIG_DEBUG_OBJECTS_FREE is not set
-# CONFIG_DEBUG_OBJECTS_TIMERS is not set
+CONFIG_DEBUG_OBJECTS_FREE=y
+CONFIG_DEBUG_OBJECTS_TIMERS=y
 CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
 
-# CONFIG_X86_PTDUMP is not set
+CONFIG_X86_PTDUMP=y
 
-# CONFIG_CAN_DEBUG_DEVICES is not set
+CONFIG_CAN_DEBUG_DEVICES=y
 
-# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODULE_FORCE_UNLOAD=y
 
-# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_SYSCTL_SYSCALL_CHECK=y
 
-# CONFIG_DEBUG_NOTIFIERS is not set
+CONFIG_DEBUG_NOTIFIERS=y
 
-# CONFIG_DMA_API_DEBUG is not set
+CONFIG_DMA_API_DEBUG=y
 
-# CONFIG_MMIOTRACE is not set
+CONFIG_MMIOTRACE=y
+
+CONFIG_DEBUG_CREDENTIALS=y
+
+# off in both production debug and nodebug builds,
+#  on in rawhide nodebug builds
+CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y
+
+CONFIG_EXT4_DEBUG=y
+
+CONFIG_DEBUG_PERF_USE_VMALLOC=y
+
+CONFIG_JBD2_DEBUG=y
+
+CONFIG_FUNCTION_TRACER=y
+CONFIG_STACK_TRACER=y
+CONFIG_DYNAMIC_FTRACE=y


Index: config-powerpc-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/config-powerpc-generic,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -p -r1.44 -r1.45
--- config-powerpc-generic	8 Oct 2009 05:54:43 -0000	1.44
+++ config-powerpc-generic	4 Jan 2010 15:25:40 -0000	1.45
@@ -239,6 +239,7 @@ CONFIG_EXTRA_TARGETS=""
 # CONFIG_FS_ENET is not set
 # CONFIG_UCC_GETH is not set
 # CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_KEYBOARD_MATRIX is not set
 # CONFIG_MOUSE_GPIO is not set
 # CONFIG_SERIAL_CPM is not set
 # CONFIG_SERIAL_QE is not set
@@ -321,4 +322,20 @@ CONFIG_MMC_SDHCI_OF=m
 
 # CONFIG_CONSISTENT_SIZE_BOOL is not set
 
-CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_CAN_SJA1000_OF_PLATFORM=m
+
+CONFIG_PPC_EMULATED_STATS=y
+
+CONFIG_SWIOTLB=y
+
+# CONFIG_RDS is not set
+
+CONFIG_PPC_DISABLE_WERROR=y
+
+CONFIG_XILINX_EMACLITE=m
+
+CONFIG_GPIO_WM831X=m
+# CONFIG_GPIO_LANGWELL is not set
+# CONFIG_GPIO_UCB1400 is not set
+CONFIG_EDAC_MPC85XX=m
+


Index: config-powerpc32-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/config-powerpc32-generic,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -p -r1.31 -r1.32
--- config-powerpc32-generic	12 Mar 2009 03:23:02 -0000	1.31
+++ config-powerpc32-generic	4 Jan 2010 15:25:40 -0000	1.32
@@ -167,6 +167,7 @@ CONFIG_MPC837x_MDS=y
 CONFIG_MPC837x_RDB=y
 CONFIG_SBC834x=y
 CONFIG_ASP834x=y
+CONFIG_KMETER1=y
 CONFIG_MPC8641_HPCN=y
 CONFIG_SBC8641D=y
 CONFIG_MPC8610_HPCD=y
@@ -183,3 +184,9 @@ CONFIG_MTD_NAND_FSL_UPM=m
 
 CONFIG_USB_GPIO_VBUS=m
 
+CONFIG_RCU_FANOUT=32
+
+CONFIG_PERF_COUNTERS=y
+CONFIG_PERF_EVENTS=y
+CONFIG_EVENT_PROFILE=y
+


Index: config-powerpc64
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/config-powerpc64,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -p -r1.29 -r1.30
--- config-powerpc64	25 Jul 2009 03:16:38 -0000	1.29
+++ config-powerpc64	4 Jan 2010 15:25:40 -0000	1.30
@@ -157,6 +157,7 @@ CONFIG_SPARSEMEM_VMEMMAP=y
 CONFIG_SPU_TRACE=m
 CONFIG_MTD_NAND_PASEMI=m
 CONFIG_EDAC_CELL=m
+CONFIG_EDAC_CPC925=m
 CONFIG_FRAME_WARN=2048
 
 CONFIG_PHYP_DUMP=y
@@ -180,3 +181,9 @@ CONFIG_RTC_DRV_PS3=y
 
 CONFIG_CRASH_DUMP=y
 CONFIG_RELOCATABLE=y
+
+CONFIG_RCU_FANOUT=64
+
+CONFIG_PERF_COUNTERS=y
+CONFIG_PERF_EVENTS=y
+CONFIG_EVENT_PROFILE=y


Index: config-s390x
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/config-s390x,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -p -r1.14 -r1.15
--- config-s390x	25 Jul 2009 04:09:17 -0000	1.14
+++ config-s390x	4 Jan 2010 15:25:40 -0000	1.15
@@ -1,7 +1,9 @@
 CONFIG_64BIT=y
 # CONFIG_MARCH_G5 is not set
-CONFIG_MARCH_Z900=y
+# CONFIG_MARCH_Z900 is not set
+CONFIG_MARCH_Z9_109=y
 # CONFIG_MARCH_Z990 is not set
+
 CONFIG_NR_CPUS=64
 CONFIG_COMPAT=y
 
@@ -73,6 +75,7 @@ CONFIG_SCLP_CONSOLE=y
 CONFIG_SCLP_VT220_TTY=y
 CONFIG_SCLP_VT220_CONSOLE=y
 CONFIG_SCLP_CPI=m
+CONFIG_SCLP_ASYNC=m
 CONFIG_S390_TAPE=m
 CONFIG_S390_TAPE_3590=m
 
@@ -219,4 +222,15 @@ CONFIG_CHSC_SCH=m
 
 CONFIG_HVC_IUCV=y
 
-CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_RCU_FANOUT=64
+
+CONFIG_SECCOMP=y
+
+CONFIG_PM=y
+CONFIG_HIBERNATION=y
+CONFIG_PM_STD_PARTITION="/dev/jokes"
+
+CONFIG_PERF_COUNTERS=y
+CONFIG_PERF_EVENTS=y
+CONFIG_EVENT_PROFILE=y
+


Index: config-sparc64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/config-sparc64-generic,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -p -r1.28 -r1.29
--- config-sparc64-generic	10 Sep 2009 21:15:37 -0000	1.28
+++ config-sparc64-generic	4 Jan 2010 15:25:40 -0000	1.29
@@ -1,4 +1,4 @@
-# CONFIG_SMP is not set
+CONFIG_SMP=y
 CONFIG_SPARC=y
 CONFIG_SPARC64=y
 CONFIG_SECCOMP=y
@@ -151,7 +151,7 @@ CONFIG_ATM_FORE200E_USE_TASKLET=y
 CONFIG_ATM_FORE200E_DEBUG=0
 CONFIG_ATM_FORE200E_TX_RETRY=16
 # CONFIG_DRM_TDFX is not set
-# CONFIG_KEYBOARD_ATKBD is not set
+CONFIG_KEYBOARD_ATKBD=y
 CONFIG_KEYBOARD_SUNKBD=y
 # CONFIG_INPUT_PCSPKR is not set
 CONFIG_INPUT_SPARCSPKR=m
@@ -198,5 +198,14 @@ CONFIG_SENSORS_ULTRA45=m
 CONFIG_LEDS_SUNFIRE=m
 CONFIG_TADPOLE_TS102_UCTRL=m
 
-CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
-# CONFIG_KGDB is not set
+CONFIG_RCU_FANOUT=64
+
+CONFIG_LIRC_ENE0100=m
+# CONFIG_BATTERY_DS2782 is not set
+CONFIG_USB_GSPCA_SN9C20X=m
+CONFIG_USB_GSPCA_SN9C20X_EVDEV=y
+CONFIG_LSM_MMAP_MIN_ADDR=65536
+
+CONFIG_PERF_COUNTERS=y
+CONFIG_PERF_EVENTS=y
+CONFIG_EVENT_PROFILE=y


Index: config-x86-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/config-x86-generic,v
retrieving revision 1.80
retrieving revision 1.81
diff -u -p -r1.80 -r1.81
--- config-x86-generic	27 Aug 2009 22:50:02 -0000	1.80
+++ config-x86-generic	4 Jan 2010 15:25:40 -0000	1.81
@@ -1,5 +1,6 @@
 CONFIG_UID16=y
 # CONFIG_64BIT is not set
+# CONFIG_KERNEL_LZMA is not set
 
 #
 # Processor type and features
@@ -25,7 +26,7 @@ CONFIG_X86_BIGSMP=y
 # CONFIG_M586 is not set
 # CONFIG_M586TSC is not set
 # CONFIG_M586MMX is not set
-# CONFIG_M686 is not set
+CONFIG_M686=y
 # CONFIG_MPENTIUMII is not set
 # CONFIG_MPENTIUMIII is not set
 # CONFIG_MPENTIUMM is not set
@@ -74,8 +75,13 @@ CONFIG_X86_CPU_DEBUG=m
 CONFIG_EDD=m
 # CONFIG_EDD_OFF is not set
 # CONFIG_NUMA is not set
+
+# CONFIG_NOHIGHMEM is not set
+CONFIG_HIGHMEM4G=y
+# CONFIG_HIGHMEM64G is not set
 CONFIG_HIGHMEM=y
 CONFIG_HIGHPTE=y
+
 # CONFIG_MATH_EMULATION is not set
 CONFIG_MTRR=y
 CONFIG_X86_PAT=y
@@ -88,9 +94,9 @@ CONFIG_FB_EFI=y
 # CONFIG_FB_N411 is not set
 
 CONFIG_DMAR=y
-CONFIG_DMAR_GFX_WA=y
+CONFIG_DMAR_BROKEN_GFX_WA=y
 CONFIG_DMAR_FLOPPY_WA=y
-# CONFIG_DMAR_DEFAULT_ON is not set
+CONFIG_DMAR_DEFAULT_ON=y
 
 CONFIG_FB_GEODE=y
 CONFIG_FB_GEODE_LX=y
@@ -109,8 +115,7 @@ CONFIG_PCMCIA_FDOMAIN=m
 CONFIG_SCSI_FUTURE_DOMAIN=m
 CONFIG_SCSI_ADVANSYS=m
 
-# setting this breaks Xen guests
-# CONFIG_CC_STACKPROTECTOR is not set
+CONFIG_CC_STACKPROTECTOR=y
 
 CONFIG_SECCOMP=y
 
@@ -164,12 +169,14 @@ CONFIG_ACPI_SBS=m
 CONFIG_ACPI_SLEEP=y
 CONFIG_ACPI_SYSTEM=y
 CONFIG_ACPI_THERMAL=y
+CONFIG_TOPSTAR_LAPTOP=m
 CONFIG_ACPI_TOSHIBA=m
 CONFIG_ACPI_VIDEO=m
 # Disable in F9.
 CONFIG_ACPI_PROC_EVENT=y
 CONFIG_PNPACPI=y
-
+CONFIG_ACPI_POWER_METER=m
+CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
 
 #
 # CPUFreq processor drivers
@@ -463,4 +470,29 @@ CONFIG_HW_BRANCH_TRACER=y
 
 # CONFIG_SPARSE_IRQ is not set
 
-CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
+CONFIG_RCU_FANOUT=32
+
+# CONFIG_IOMMU_STRESS is not set
+
+CONFIG_PERF_COUNTERS=y
+CONFIG_PERF_EVENTS=y
+CONFIG_EVENT_PROFILE=y
+
+# CONFIG_X86_OLD_MCE is not set
+CONFIG_X86_MCE_INTEL=y
+CONFIG_X86_MCE_AMD=y
+# CONFIG_X86_ANCIENT_MCE is not set
+# CONFIG_X86_MCE_INJECT is not set
+
+CONFIG_X86_MRST=y
+CONFIG_SFI=y
+
+CONFIG_INPUT_WINBOND_CIR=m
+CONFIG_I2C_SCMI=m
+CONFIG_SBC_FITPC2_WATCHDOG=m
+CONFIG_EDAC_I3200=m
+CONFIG_EDAC_DECODE_MCE=m
+
+CONFIG_GPIO_LANGWELL=y
+
+# CONFIG_INTEL_TXT is not set


Index: config-x86_64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/config-x86_64-generic,v
retrieving revision 1.80
retrieving revision 1.81
diff -u -p -r1.80 -r1.81
--- config-x86_64-generic	19 Nov 2009 01:25:54 -0000	1.80
+++ config-x86_64-generic	4 Jan 2010 15:25:40 -0000	1.81
@@ -1,5 +1,7 @@
 CONFIG_64BIT=y
 CONFIG_UID16=y
+# CONFIG_KERNEL_LZMA is not set
+
 # CONFIG_MK8 is not set
 # CONFIG_MPSC is not set
 CONFIG_GENERIC_CPU=y
@@ -14,7 +16,7 @@ CONFIG_NUMA=y
 CONFIG_K8_NUMA=y
 CONFIG_X86_64_ACPI_NUMA=y
 # CONFIG_NUMA_EMU is not set
-CONFIG_NR_CPUS=64
+CONFIG_NR_CPUS=512
 CONFIG_X86_POWERNOW_K8=m
 CONFIG_X86_POWERNOW_K8_ACPI=y
 CONFIG_X86_P4_CLOCKMOD=m 
@@ -32,9 +34,9 @@ CONFIG_EDD=m
 CONFIG_PCI_BIOS=y
 CONFIG_PCI_MMCONFIG=y
 CONFIG_DMAR=y
-CONFIG_DMAR_GFX_WA=y
+CONFIG_DMAR_BROKEN_GFX_WA=y
 CONFIG_DMAR_FLOPPY_WA=y
-# CONFIG_DMAR_DEFAULT_ON is not set
+CONFIG_DMAR_DEFAULT_ON=y
 
 CONFIG_KEXEC_JUMP=y
 
@@ -105,6 +107,8 @@ CONFIG_ACPI_SYSTEM=y
 CONFIG_ACPI_VIDEO=m
 # Disable in F9.
 CONFIG_ACPI_PROC_EVENT=y
+CONFIG_ACPI_POWER_METER=m
+CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
 
 CONFIG_X86_PLATFORM_DEVICES=y
 CONFIG_ASUS_LAPTOP=m
@@ -207,6 +211,9 @@ CONFIG_EDAC_I82975X=m
 CONFIG_EDAC_R82600=m
 CONFIG_EDAC_AMD8131=m
 CONFIG_EDAC_AMD8111=m
+CONFIG_EDAC_AMD64=m
+# CONFIG_EDAC_AMD64_ERROR_INJECTION is not set
+CONFIG_EDAC_DECODE_MCE=m
 
 CONFIG_SCHED_MC=y
 
@@ -231,6 +238,8 @@ CONFIG_SPARSEMEM=y
 CONFIG_HAVE_MEMORY_PRESENT=y
 CONFIG_SPARSEMEM_EXTREME=y
 CONFIG_SPARSEMEM_VMEMMAP=y
+CONFIG_MEMORY_HOTPLUG=y
+CONFIG_MEMORY_HOTREMOVE=y
 
 # CONFIG_BLK_DEV_CMD640 is not set
 # CONFIG_BLK_DEV_RZ1000 is not set
@@ -300,6 +309,8 @@ CONFIG_XEN_BLKDEV_FRONTEND=m
 CONFIG_XEN_NETDEV_FRONTEND=m
 CONFIG_XENFS=m
 CONFIG_XEN_COMPAT_XENFS=y
+CONFIG_XEN_DEV_EVTCHN=m
+CONFIG_XEN_SYS_HYPERVISOR=y
 
 CONFIG_DMADEVICES=y
 CONFIG_INTEL_IOATDMA=m
@@ -366,4 +377,24 @@ CONFIG_X86_X2APIC=y
 CONFIG_SPARSE_IRQ=y
 CONFIG_NUMA_MIGRATE_IRQ_DESC=y
 
-CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
+CONFIG_RCU_FANOUT=64
+
+# CONFIG_IOMMU_STRESS is not set
+
+CONFIG_PERF_COUNTERS=y
+CONFIG_PERF_EVENTS=y
+CONFIG_EVENT_PROFILE=y
+
+# CONFIG_X86_MCE_INJECT is not set
+
+CONFIG_SFI=y
+CONFIG_INPUT_WINBOND_CIR=m
+CONFIG_I2C_SCMI=m
+CONFIG_SBC_FITPC2_WATCHDOG=m
+CONFIG_EDAC_I3200=m
+CONFIG_TOPSTAR_LAPTOP=m
+# CONFIG_INTEL_TXT is not set
+CONFIG_GPIO_LANGWELL=y
+
+CONFIG_FUNCTION_GRAPH_TRACER=y
+

drm-i915-resume-force-mode.patch:
 b/drivers/gpu/drm/i915/i915_suspend.c |    3 +++
 drivers/gpu/drm/i915/i915_suspend.c   |    4 ++--
 2 files changed, 5 insertions(+), 2 deletions(-)

Index: drm-i915-resume-force-mode.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/drm-i915-resume-force-mode.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- drm-i915-resume-force-mode.patch	12 Aug 2009 16:49:49 -0000	1.3
+++ drm-i915-resume-force-mode.patch	4 Jan 2010 15:25:41 -0000	1.4
@@ -1,7 +1,7 @@
-diff --git a/drivers/gpu/drm/i915/i915_suspend.c b/drivers/gpu/drm/i915/i915_suspend.c
-index ce8a213..7e90be3 100644
---- a/drivers/gpu/drm/i915/i915_suspend.c
-+++ b/drivers/gpu/drm/i915/i915_suspend.c
+http://lists.freedesktop.org/archives/intel-gfx/2009-February/001313.html
+
+--- a/drivers/gpu/drm/i915/i915_suspend.c.orig	2009-02-18 22:59:19.000000000 -0500
++++ b/drivers/gpu/drm/i915/i915_suspend.c	2009-02-18 22:59:58.000000000 -0500
 @@ -28,6 +28,7 @@
  #include "drm.h"
  #include "i915_drm.h"
@@ -10,13 +10,41 @@ index ce8a213..7e90be3 100644
  
  static bool i915_pipe_enabled(struct drm_device *dev, enum pipe pipe)
  {
-@@ -532,6 +533,9 @@ int i915_restore_state(struct drm_device *dev)
+@@ -519,6 +520,8 @@
  
  	i915_restore_vga(dev);
  
-+	if (drm_core_check_feature(dev, DRIVER_MODESET))
-+		drm_helper_resume_force_mode(dev);
++	drm_helper_resume_force_mode(dev);
 +
  	return 0;
  }
  
+From f5192bce8be69e5b33d7579bc282fef4d673e2c1 Mon Sep 17 00:00:00 2001
+From: Lubomir Rintel <lkundrak at v3.sk>
+Date: Sun, 15 Mar 2009 13:55:55 +0100
+Subject: [PATCH] Fix i915 nomodeset NULL deref. during PM resume
+
+drm_helper_resume_force_mode() would crash while attempting to
+iterate through crtc_list, which is uninitialized when is modesetting
+disabled.
+---
+ drivers/gpu/drm/i915/i915_suspend.c |    3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_suspend.c b/drivers/gpu/drm/i915/i915_suspend.c
+index ef5fb6e..b138032 100644
+--- a/drivers/gpu/drm/i915/i915_suspend.c
++++ b/drivers/gpu/drm/i915/i915_suspend.c
+@@ -520,7 +520,8 @@ int i915_restore_state(struct drm_device *dev)
+ 
+ 	i915_restore_vga(dev);
+ 
+-	drm_helper_resume_force_mode(dev);
++	if (drm_core_check_feature(dev, DRIVER_MODESET))
++		drm_helper_resume_force_mode(dev);
+ 
+ 	return 0;
+ }
+-- 
+1.6.2
+

drm-intel-big-hammer.patch:
 i915_gem.c |    5 +++++
 1 file changed, 5 insertions(+)

Index: drm-intel-big-hammer.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/drm-intel-big-hammer.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- drm-intel-big-hammer.patch	12 Aug 2009 16:49:49 -0000	1.2
+++ drm-intel-big-hammer.patch	4 Jan 2010 15:25:41 -0000	1.3
@@ -1,13 +1,13 @@
 diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
-index 39f5c65..eec945a 100644
+index 37427e4..08af9db 100644
 --- a/drivers/gpu/drm/i915/i915_gem.c
 +++ b/drivers/gpu/drm/i915/i915_gem.c
-@@ -3253,6 +3253,11 @@ i915_gem_execbuffer(struct drm_device *dev, void *data,
+@@ -2553,6 +2553,11 @@ i915_gem_execbuffer(struct drm_device *dev, void *data,
  
  	mutex_lock(&dev->struct_mutex);
  
 +	/* We don't get the flushing right for these chipsets, use the
-+	 * big hammer for now to avoid random crashiness. */
++	 * big hamer for now to avoid random crashiness. */
 +	if (IS_I855(dev) || IS_I865G(dev))
 +		wbinvd();
 +

drm-next.patch:
 b/drivers/gpu/drm/Kconfig                         |   18 
 b/drivers/gpu/drm/Makefile                        |    8 
 b/drivers/gpu/drm/drm_cache.c                     |   46 
 b/drivers/gpu/drm/drm_crtc.c                      |   77 
 b/drivers/gpu/drm/drm_crtc_helper.c               |  220 
 b/drivers/gpu/drm/drm_drv.c                       |    4 
 b/drivers/gpu/drm/drm_edid.c                      |  504 
 b/drivers/gpu/drm/drm_encoder_slave.c             |  116 
 b/drivers/gpu/drm/drm_fb_helper.c                 |  701 
 b/drivers/gpu/drm/drm_gem.c                       |   11 
 b/drivers/gpu/drm/drm_mm.c                        |   21 
 b/drivers/gpu/drm/drm_modes.c                     |  435 
 b/drivers/gpu/drm/drm_proc.c                      |   17 
 b/drivers/gpu/drm/drm_sysfs.c                     |   28 
 b/drivers/gpu/drm/i915/Makefile                   |    2 
 b/drivers/gpu/drm/i915/i915_debugfs.c             |  445 
 b/drivers/gpu/drm/i915/i915_dma.c                 |  100 
 b/drivers/gpu/drm/i915/i915_drv.c                 |    9 
 b/drivers/gpu/drm/i915/i915_drv.h                 |   62 
 b/drivers/gpu/drm/i915/i915_gem.c                 |   14 
 b/drivers/gpu/drm/i915/i915_gem_tiling.c          |   80 
 b/drivers/gpu/drm/i915/i915_irq.c                 |   21 
 b/drivers/gpu/drm/i915/i915_reg.h                 |  143 
 b/drivers/gpu/drm/i915/i915_suspend.c             |    4 
 b/drivers/gpu/drm/i915/intel_bios.c               |    8 
 b/drivers/gpu/drm/i915/intel_crt.c                |   28 
 b/drivers/gpu/drm/i915/intel_display.c            |  607 
 b/drivers/gpu/drm/i915/intel_drv.h                |    7 
 b/drivers/gpu/drm/i915/intel_fb.c                 |  737 
 b/drivers/gpu/drm/i915/intel_i2c.c                |    8 
 b/drivers/gpu/drm/i915/intel_lvds.c               |   22 
 b/drivers/gpu/drm/i915/intel_sdvo.c               |  331 
 b/drivers/gpu/drm/i915/intel_tv.c                 |   30 
 b/drivers/gpu/drm/mga/mga_dma.c                   |    4 
 b/drivers/gpu/drm/mga/mga_drv.h                   |    1 
 b/drivers/gpu/drm/mga/mga_warp.c                  |  180 
 b/drivers/gpu/drm/r128/r128_cce.c                 |  116 
 b/drivers/gpu/drm/r128/r128_drv.h                 |    8 
 b/drivers/gpu/drm/r128/r128_state.c               |   36 
 b/drivers/gpu/drm/radeon/Kconfig                  |    1 
 b/drivers/gpu/drm/radeon/Makefile                 |   43 
 b/drivers/gpu/drm/radeon/atombios.h               |   11 
 b/drivers/gpu/drm/radeon/atombios_crtc.c          |  100 
 b/drivers/gpu/drm/radeon/avivod.h                 |   60 
 b/drivers/gpu/drm/radeon/mkregtable.c             |  720 
 b/drivers/gpu/drm/radeon/r100.c                   | 1047 
 b/drivers/gpu/drm/radeon/r100_track.h             |  124 
 b/drivers/gpu/drm/radeon/r100d.h                  |   76 
 b/drivers/gpu/drm/radeon/r200.c                   |  456 
 b/drivers/gpu/drm/radeon/r300.c                   |  411 
 b/drivers/gpu/drm/radeon/r300d.h                  |   76 
 b/drivers/gpu/drm/radeon/r600.c                   | 1714 +
 b/drivers/gpu/drm/radeon/r600_blit.c              |  855 
 b/drivers/gpu/drm/radeon/r600_blit_kms.c          |  777 
 b/drivers/gpu/drm/radeon/r600_blit_shaders.c      | 1072 +
 b/drivers/gpu/drm/radeon/r600_blit_shaders.h      |   14 
 b/drivers/gpu/drm/radeon/r600_cp.c                |  541 
 b/drivers/gpu/drm/radeon/r600_cs.c                |  658 
 b/drivers/gpu/drm/radeon/r600d.h                  |  661 
 b/drivers/gpu/drm/radeon/radeon.h                 |  126 
 b/drivers/gpu/drm/radeon/radeon_asic.h            |  159 
 b/drivers/gpu/drm/radeon/radeon_atombios.c        |   79 
 b/drivers/gpu/drm/radeon/radeon_clocks.c          |   10 
 b/drivers/gpu/drm/radeon/radeon_connectors.c      |  215 
 b/drivers/gpu/drm/radeon/radeon_cp.c              |  128 
 b/drivers/gpu/drm/radeon/radeon_device.c          |  340 
 b/drivers/gpu/drm/radeon/radeon_display.c         |   18 
 b/drivers/gpu/drm/radeon/radeon_drv.c             |   21 
 b/drivers/gpu/drm/radeon/radeon_drv.h             |  146 
 b/drivers/gpu/drm/radeon/radeon_encoders.c        |  125 
 b/drivers/gpu/drm/radeon/radeon_fb.c              |  670 
 b/drivers/gpu/drm/radeon/radeon_fence.c           |   49 
 b/drivers/gpu/drm/radeon/radeon_irq_kms.c         |    1 
 b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c     |   44 
 b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c |  339 
 b/drivers/gpu/drm/radeon/radeon_legacy_tv.c       |  904 
 b/drivers/gpu/drm/radeon/radeon_mode.h            |   52 
 b/drivers/gpu/drm/radeon/radeon_object.h          |    1 
 b/drivers/gpu/drm/radeon/radeon_reg.h             |   79 
 b/drivers/gpu/drm/radeon/radeon_ring.c            |  119 
 b/drivers/gpu/drm/radeon/radeon_share.h           |   77 
 b/drivers/gpu/drm/radeon/radeon_state.c           |   18 
 b/drivers/gpu/drm/radeon/radeon_ttm.c             |   96 
 b/drivers/gpu/drm/radeon/reg_srcs/r100            |  105 
 b/drivers/gpu/drm/radeon/reg_srcs/r200            |  184 
 b/drivers/gpu/drm/radeon/reg_srcs/r300            |  729 
 b/drivers/gpu/drm/radeon/reg_srcs/rn50            |   30 
 b/drivers/gpu/drm/radeon/reg_srcs/rs600           |  729 
 b/drivers/gpu/drm/radeon/reg_srcs/rv515           |  486 
 b/drivers/gpu/drm/radeon/rs400.c                  |    2 
 b/drivers/gpu/drm/radeon/rs600.c                  |   60 
 b/drivers/gpu/drm/radeon/rs690.c                  |    1 
 b/drivers/gpu/drm/radeon/rv515.c                  |  518 
 b/drivers/gpu/drm/radeon/rv515d.h                 |  220 
 b/drivers/gpu/drm/radeon/rv770.c                  |  987 
 b/drivers/gpu/drm/radeon/rv770d.h                 |  341 
 b/drivers/gpu/drm/ttm/ttm_bo.c                    |  295 
 b/drivers/gpu/drm/ttm/ttm_bo_util.c               |    4 
 b/drivers/gpu/drm/ttm/ttm_global.c                |    4 
 b/drivers/gpu/drm/ttm/ttm_memory.c                |  508 
 b/drivers/gpu/drm/ttm/ttm_module.c                |   58 
 b/drivers/gpu/drm/ttm/ttm_tt.c                    |  104 
 b/firmware/Makefile                               |   16 
 b/firmware/WHENCE                                 |  121 
 b/firmware/matrox/g200_warp.H16                   |   28 
 b/firmware/matrox/g400_warp.H16                   |   44 
 b/firmware/r128/r128_cce.bin.ihex                 |  129 
 b/firmware/radeon/R100_cp.bin.ihex                |  130 
 b/firmware/radeon/R200_cp.bin.ihex                |  130 
 b/firmware/radeon/R300_cp.bin.ihex                |  130 
 b/firmware/radeon/R420_cp.bin.ihex                |  130 
 b/firmware/radeon/R520_cp.bin.ihex                |  130 
 b/firmware/radeon/R600_me.bin.ihex                | 1345 +
 b/firmware/radeon/R600_pfp.bin.ihex               |  145 
 b/firmware/radeon/RS600_cp.bin.ihex               |  130 
 b/firmware/radeon/RS690_cp.bin.ihex               |  130 
 b/firmware/radeon/RS780_me.bin.ihex               | 1345 +
 b/firmware/radeon/RS780_pfp.bin.ihex              |  145 
 b/firmware/radeon/RV610_me.bin.ihex               | 1345 +
 b/firmware/radeon/RV610_pfp.bin.ihex              |  145 
 b/firmware/radeon/RV620_me.bin.ihex               | 1345 +
 b/firmware/radeon/RV620_pfp.bin.ihex              |  145 
 b/firmware/radeon/RV630_me.bin.ihex               | 1345 +
 b/firmware/radeon/RV630_pfp.bin.ihex              |  145 
 b/firmware/radeon/RV635_me.bin.ihex               | 1345 +
 b/firmware/radeon/RV635_pfp.bin.ihex              |  145 
 b/firmware/radeon/RV670_me.bin.ihex               | 1345 +
 b/firmware/radeon/RV670_pfp.bin.ihex              |  145 
 b/firmware/radeon/RV710_me.bin.ihex               |  341 
 b/firmware/radeon/RV710_pfp.bin.ihex              |  213 
 b/firmware/radeon/RV730_me.bin.ihex               |  341 
 b/firmware/radeon/RV730_pfp.bin.ihex              |  213 
 b/firmware/radeon/RV770_me.bin.ihex               |  341 
 b/firmware/radeon/RV770_pfp.bin.ihex              |  213 
 b/include/drm/drmP.h                              |   54 
 b/include/drm/drm_cache.h                         |   38 
 b/include/drm/drm_crtc.h                          |   16 
 b/include/drm/drm_crtc_helper.h                   |    3 
 b/include/drm/drm_encoder_slave.h                 |  162 
 b/include/drm/drm_fb_helper.h                     |   82 
 b/include/drm/drm_mm.h                            |    7 
 b/include/drm/drm_mode.h                          |   11 
 b/include/drm/drm_sysfs.h                         |   12 
 b/include/drm/ttm/ttm_bo_api.h                    |   13 
 b/include/drm/ttm/ttm_bo_driver.h                 |   94 
 b/include/drm/ttm/ttm_memory.h                    |   43 
 b/include/drm/ttm/ttm_module.h                    |    2 
 drivers/gpu/drm/i915/i915_gem_debugfs.c           |  396 
 drivers/gpu/drm/mga/mga_ucode.h                   |11645 ----------
 drivers/gpu/drm/radeon/r300.h                     |   36 
 drivers/gpu/drm/radeon/r600_microcode.h           |23297 ----------------------
 drivers/gpu/drm/radeon/radeon_microcode.h         | 1844 -
 drivers/gpu/drm/radeon/rs780.c                    |  102 
 drivers/gpu/drm/radeon/rv515r.h                   |  170 
 154 files changed, 33674 insertions(+), 41500 deletions(-)

View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.19 -r 1.20 drm-next.patchIndex: drm-next.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/drm-next.patch,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -p -r1.19 -r1.20
--- drm-next.patch	25 Jul 2009 04:09:20 -0000	1.19
+++ drm-next.patch	4 Jan 2010 15:25:43 -0000	1.20
@@ -1,5128 +1,64170 @@
-commit 41f13fe81dd1b08723ab9f3fc3c7f29cfa81f1a5
-Author: Alex Deucher <alexdeucher at gmail.com>
-Date:   Mon Mar 16 15:37:02 2009 -0400
-
-    drm/radeon: fix logic in r600_page_table_init() to match ati_gart
-    
-    This fixes page table init on rs600.
-    
-    Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 06f0a488c1b642d3cd7769da66600e5148c3fad8
-Author: Dave Airlie <airlied at redhat.com>
-Date:   Fri Mar 13 09:35:32 2009 +1000
-
-    drm/radeon: r600 ptes are 64-bit, cleanup cleanup function.
-    
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 03efb8853c35aff51c7b901bf412f32765fe0fd9
-Author: Dave Airlie <airlied at redhat.com>
-Date:   Tue Mar 10 18:36:38 2009 +1000
-
-    drm/radeon: don't call irq changes on r600 suspend/resume
-    
-    Until we sort out r600 IRQs don't do this.
-    
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit d02f7fa77d97a28a4276939f35e44ae995ad13d7
-Author: Dave Airlie <airlied at redhat.com>
-Date:   Tue Mar 10 18:34:23 2009 +1000
-
-    drm/radeon: fix r600 writeback across suspend/resume
-    
-    This update was done in mainline radeon, but not in the r600.
-    
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 6546bf6d6cbf1f9ac350fd278a1d937d4bb9ad06
-Author: Dave Airlie <airlied at redhat.com>
-Date:   Mon Mar 9 15:31:20 2009 +1000
-
-    drm/radeon: fix r600 writeback setup.
-    
-    This fixes 2 bugs:
-    1. the AGP calculation wasn't consistent with the PCI(E) calc for the
-    RPTR_ADDR registers. This consolidates the writes and fixes it up.
-    
-    2. The scratch address was being incorrectly calculated, this breaks
-    it out into a lot more linear steps.
-    
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 1847a549ac4db1272dea13d86331c492a2640b3b
-Author: Dave Airlie <airlied at redhat.com>
-Date:   Mon Mar 9 12:47:18 2009 +1000
-
-    drm: fix warnings about new mappings in info code.
-    
-    This fixes up the warnings in the debugfs code that conflicted
-    with the mapping fixups.
-    
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 8f497aade8df2a619eacda927a43ebe82167a84c
-Author: Hannes Eder <hannes at hanneseder.net>
-Date:   Thu Mar 5 20:14:18 2009 +0100
-
-    drm/radeon: NULL noise: drivers/gpu/drm/radeon/radeon_*.c
-    
-    Fix this sparse warning:
-      drivers/gpu/drm/radeon/r600_cp.c:1811:52: warning: Using plain integer as NULL pointer
-      drivers/gpu/drm/radeon/radeon_cp.c:1363:52: warning: Using plain integer as NULL pointer
-      drivers/gpu/drm/radeon/radeon_state.c:1983:61: warning: Using plain integer as NULL pointer
-    
-    Signed-off-by: Hannes Eder <hannes at hanneseder.net>
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit a763d7dc0adb1159c1a52d43e566409da9fa59f0
-Author: Dave Airlie <airlied at redhat.com>
-Date:   Mon Mar 9 12:17:08 2009 +1000
-
-    drm/radeon: fix r600 pci mapping calls.
-    
-    This realigns the r600 pci mapping calls with the ati pcigart ones,
-    fixing the direction and using the correct interface.
-    
-    Suggested by Jerome Glisse.
-    
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 08932156cc2d4f8807dc5ca5c3d6ccd85080610a
-Author: Alex Deucher <alexdeucher at gmail.com>
-Date:   Sat Mar 7 18:21:21 2009 -0500
-
-    drm/radeon: r6xx/r7xx: fix possible oops in r600_page_table_cleanup()
-    
-    Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 53c379e9462b59d4e166429ff064aaf0e7743795
-Author: Dave Airlie <airlied at redhat.com>
-Date:   Mon Mar 9 12:12:28 2009 +1000
-
-    radeon: call the correct idle function, logic got inverted.
-    
-    This calls the correct idle function for the R600 and previous chips.
-    
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 800b69951174f7de294da575d7e7921041a7e783
-Author: Alex Deucher <alexdeucher at gmail.com>
-Date:   Fri Mar 6 11:47:54 2009 -0500
-
-    drm/radeon: RS600: fix interrupt handling
-    
-    the checks weren't updated when RS600 support
-    was added.
-    
-    Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
-    Signed-off-by: Dave Airlie <airlied at linux.ie>
-
-commit a7d13ad0e2c1b0572492fd53ca1a090794e2f8e2
-Author: Dave Airlie <airlied at redhat.com>
-Date:   Thu Feb 26 10:15:24 2009 +1000
-
-    drm/r600: fix rptr address along lines of previous fixes to radeon.
-    
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit eb1d91954ededc00ddcfb51e2626f114ff351524
-Author: Dave Airlie <airlied at redhat.com>
-Date:   Thu Feb 26 10:14:40 2009 +1000
-
-    drm/r600: fixup r600 gart table accessor like ati_pcigart.c
-    
-    This attempts to fixup the r600 GART accessors so they work on other arches.
-    
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 6abf66018f7fe231720e50f9a47b142182388869
-Author: Dave Airlie <airlied at redhat.com>
-Date:   Thu Feb 26 10:13:47 2009 +1000
-
-    drm/ati_pcigart: use memset_io to reset the memory
-    
-    Also don't setup pci_gart if we aren't going to need it.
-    
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 87f0da55353e23826a54bff57c457a13b97d18f1
-Author: Dave Airlie <airlied at redhat.com>
-Date:   Thu Feb 26 10:12:10 2009 +1000
-
-    drm: add DRM_READ/WRITE64 wrappers around readq/writeq.
-    
-    The readq/writeq stuff is from Dave Miller, and he
-    warns users to be careful about using these. Plans are only
-    r600 to use it so far.
-    
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 8ced9c75160947d2235fba75de9413e087e1171a
-Author: Alex Deucher <alexdeucher at gmail.com>
-Date:   Wed Feb 25 17:02:19 2009 -0500
-
-    radeon: add RS600 pci ids
-    
-    Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit c1556f71513f2e660fb2bbdc29344361b1ebff35
-Author: Alex Deucher <alexdeucher at gmail.com>
-Date:   Wed Feb 25 16:57:49 2009 -0500
-
-    radeon: add support for rs600 GPUs
-    
-    RS600s are an AMD IGP for Intel CPUs, that look like RS690s from
-    a lot of perspectives but look like r600s from a memory controller
-    point of view.
-    
-    Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
-    Signed-off-by: Dave Airlie <airlied at redhat.com>
-
-commit 7659e9804b7a66047433182d86393d38ba4eff79
-Author: Alex Deucher <alexdeucher at gmail.com>
-Date:   Wed Feb 25 15:55:01 2009 -0500
-
-    radeon: fix r600 AGP support
-    
[...111748 lines suppressed...]
-diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
-index 5ded1ac..33ae98c 100644
---- a/include/drm/drm_crtc.h
-+++ b/include/drm/drm_crtc.h
-@@ -550,7 +550,7 @@ struct drm_mode_config {
- 	int min_width, min_height;
- 	int max_width, max_height;
- 	struct drm_mode_config_funcs *funcs;
--	unsigned long fb_base;
-+	resource_size_t fb_base;
- 
- 	/* pointers to standard properties */
- 	struct list_head property_blob_list;
-diff --git a/include/drm/drm_os_linux.h b/include/drm/drm_os_linux.h
-index 8dbd257..013551d 100644
---- a/include/drm/drm_os_linux.h
-+++ b/include/drm/drm_os_linux.h
-@@ -6,6 +6,19 @@
- #include <linux/interrupt.h>	/* For task queue support */
- #include <linux/delay.h>
- 
-+#ifndef readq
-+static u64 readq(void __iomem *reg)
-+{
-+	return ((u64) readl(reg)) | (((u64) readl(reg + 4UL)) << 32);
-+}
-+
-+static void writeq(u64 val, void __iomem *reg)
-+{
-+	writel(val & 0xffffffff, reg);
-+	writel(val >> 32, reg + 0x4UL);
-+}
-+#endif
-+
- /** Current process ID */
- #define DRM_CURRENTPID			task_pid_nr(current)
- #define DRM_SUSER(p)			capable(CAP_SYS_ADMIN)
-@@ -23,6 +36,12 @@
- /** Write a dword into a MMIO region */
- #define DRM_WRITE32(map, offset, val)	writel(val, ((void __iomem *)(map)->handle) + (offset))
- /** Read memory barrier */
-+
-+/** Read a qword from a MMIO region - be careful using these unless you really understand them */
-+#define DRM_READ64(map, offset)		readq(((void __iomem *)(map)->handle) + (offset))
-+/** Write a qword into a MMIO region */
-+#define DRM_WRITE64(map, offset, val)	writeq(val, ((void __iomem *)(map)->handle) + (offset))
-+
- #define DRM_READMEMORYBARRIER()		rmb()
- /** Write memory barrier */
- #define DRM_WRITEMEMORYBARRIER()	wmb()
-diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h
-index 5165f24..c2fd3c5 100644
---- a/include/drm/drm_pciids.h
-+++ b/include/drm/drm_pciids.h
-@@ -239,10 +239,121 @@
- 	{0x1002, 0x7835, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
- 	{0x1002, 0x791e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS690|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \
- 	{0x1002, 0x791f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS690|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \
-+	{0x1002, 0x793f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS600|RADEON_IS_IGP|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x7941, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS600|RADEON_IS_IGP|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x7942, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS600|RADEON_IS_IGP|RADEON_NEW_MEMMAP}, \
- 	{0x1002, 0x796c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \
- 	{0x1002, 0x796d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \
- 	{0x1002, 0x796e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \
- 	{0x1002, 0x796f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \
-+	{0x1002, 0x9400, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9401, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9402, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9403, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9405, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x940A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x940B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x940F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R600|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9440, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9441, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9442, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9444, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9446, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x944A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x944B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x944C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x944E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9450, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9452, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9456, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x945A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x945B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x946A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x946B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x947A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x947B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9480, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9487, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9488, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9489, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x948F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9490, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9491, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9498, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x949C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x949E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x949F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV730|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x94C0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x94C1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x94C3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x94C4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x94C5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x94C6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x94C7, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x94C8, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x94C9, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x94CB, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x94CC, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x94CD, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV610|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9500, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9501, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9504, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9505, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9506, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9507, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9508, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9509, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x950F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9511, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9515, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9517, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9519, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV670|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9540, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9541, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9542, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x954E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x954F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9552, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9553, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9555, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9580, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9581, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9583, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9586, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9587, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9588, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9589, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x958A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x958B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x958C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x958D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x958E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x958F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV630|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9590, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9591, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9593, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9595, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9596, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9597, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9598, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9599, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x959B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x95C0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x95C5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x95C6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x95C7, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x95C9, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x95C2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x95C4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x95CC, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x95CD, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x95CE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x95CF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \
-+	{0x1002, 0x9610, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
-+	{0x1002, 0x9611, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
-+	{0x1002, 0x9612, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
-+	{0x1002, 0x9613, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
-+	{0x1002, 0x9614, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
- 	{0, 0, 0}
- 
- #define r128_PCI_IDS \
-diff --git a/include/drm/radeon_drm.h b/include/drm/radeon_drm.h
-index 73ff51f..937a275 100644
---- a/include/drm/radeon_drm.h
-+++ b/include/drm/radeon_drm.h
-@@ -304,6 +304,8 @@ typedef union {
- 
- #define RADEON_SCRATCH_REG_OFFSET	32
- 
-+#define R600_SCRATCH_REG_OFFSET         256
-+
- #define RADEON_NR_SAREA_CLIPRECTS	12
- 
- /* There are 2 heaps (local/GART).  Each region within a heap is a
-@@ -526,7 +528,8 @@ typedef struct drm_radeon_init {
- 		RADEON_INIT_CP = 0x01,
- 		RADEON_CLEANUP_CP = 0x02,
- 		RADEON_INIT_R200_CP = 0x03,
--		RADEON_INIT_R300_CP = 0x04
-+		RADEON_INIT_R300_CP = 0x04,
-+		RADEON_INIT_R600_CP = 0x05
- 	} func;
- 	unsigned long sarea_priv_offset;
- 	int is_pci;
+ #endif /* _TTM_MODULE_H_ */

drm-nouveau.patch:
 drivers/gpu/drm/Kconfig                     |   56 
 drivers/gpu/drm/Makefile                    |    2 
 drivers/gpu/drm/i2c/Makefile                |    4 
 drivers/gpu/drm/i2c/ch7006_drv.c            |  531 
 drivers/gpu/drm/i2c/ch7006_mode.c           |  473 
 drivers/gpu/drm/i2c/ch7006_priv.h           |  344 
 drivers/gpu/drm/nouveau/Makefile            |   29 
 drivers/gpu/drm/nouveau/nouveau_acpi.c      |  125 
 drivers/gpu/drm/nouveau/nouveau_backlight.c |  155 
 drivers/gpu/drm/nouveau/nouveau_bios.c      | 5734 +++++
 drivers/gpu/drm/nouveau/nouveau_bios.h      |  236 
 drivers/gpu/drm/nouveau/nouveau_bo.c        |  663 
 drivers/gpu/drm/nouveau/nouveau_calc.c      |  626 
 drivers/gpu/drm/nouveau/nouveau_channel.c   |  468 
 drivers/gpu/drm/nouveau/nouveau_connector.c |  811 
 drivers/gpu/drm/nouveau/nouveau_connector.h |   55 
 drivers/gpu/drm/nouveau/nouveau_crtc.h      |   95 
 drivers/gpu/drm/nouveau/nouveau_debugfs.c   |  155 
 drivers/gpu/drm/nouveau/nouveau_display.c   |  115 
 drivers/gpu/drm/nouveau/nouveau_dma.c       |  206 
 drivers/gpu/drm/nouveau/nouveau_dma.h       |  157 
 drivers/gpu/drm/nouveau/nouveau_drv.c       |  413 
 drivers/gpu/drm/nouveau/nouveau_drv.h       | 1288 +
 drivers/gpu/drm/nouveau/nouveau_encoder.h   |   66 
 drivers/gpu/drm/nouveau/nouveau_fb.h        |   47 
 drivers/gpu/drm/nouveau/nouveau_fbcon.c     |  380 
 drivers/gpu/drm/nouveau/nouveau_fbcon.h     |   47 
 drivers/gpu/drm/nouveau/nouveau_fence.c     |  262 
 drivers/gpu/drm/nouveau/nouveau_gem.c       |  981 +
 drivers/gpu/drm/nouveau/nouveau_hw.c        | 1078 +
 drivers/gpu/drm/nouveau/nouveau_hw.h        |  448 
 drivers/gpu/drm/nouveau/nouveau_i2c.c       |  257 
 drivers/gpu/drm/nouveau/nouveau_i2c.h       |   45 
 drivers/gpu/drm/nouveau/nouveau_ioc32.c     |   72 
 drivers/gpu/drm/nouveau/nouveau_irq.c       |  696 
 drivers/gpu/drm/nouveau/nouveau_mem.c       |  585 
 drivers/gpu/drm/nouveau/nouveau_notifier.c  |  196 
 drivers/gpu/drm/nouveau/nouveau_object.c    | 1294 +
 drivers/gpu/drm/nouveau/nouveau_reg.h       |  788 
 drivers/gpu/drm/nouveau/nouveau_sgdma.c     |  321 
 drivers/gpu/drm/nouveau/nouveau_state.c     |  872 
 drivers/gpu/drm/nouveau/nouveau_ttm.c       |  131 
 drivers/gpu/drm/nouveau/nv04_crtc.c         |  992 +
 drivers/gpu/drm/nouveau/nv04_cursor.c       |   70 
 drivers/gpu/drm/nouveau/nv04_dac.c          |  529 
 drivers/gpu/drm/nouveau/nv04_dfp.c          |  621 
 drivers/gpu/drm/nouveau/nv04_display.c      |  293 
 drivers/gpu/drm/nouveau/nv04_fb.c           |   21 
 drivers/gpu/drm/nouveau/nv04_fbcon.c        |  316 
 drivers/gpu/drm/nouveau/nv04_fifo.c         |  271 
 drivers/gpu/drm/nouveau/nv04_graph.c        |  579 
 drivers/gpu/drm/nouveau/nv04_instmem.c      |  210 
 drivers/gpu/drm/nouveau/nv04_mc.c           |   20 
 drivers/gpu/drm/nouveau/nv04_timer.c        |   51 
 drivers/gpu/drm/nouveau/nv04_tv.c           |  305 
 drivers/gpu/drm/nouveau/nv10_fb.c           |   24 
 drivers/gpu/drm/nouveau/nv10_fifo.c         |  260 
 drivers/gpu/drm/nouveau/nv10_graph.c        |  892 
 drivers/gpu/drm/nouveau/nv17_tv.c           |  689 
 drivers/gpu/drm/nouveau/nv17_tv.h           |  156 
 drivers/gpu/drm/nouveau/nv17_tv_modes.c     |  583 
 drivers/gpu/drm/nouveau/nv20_graph.c        |  778 
 drivers/gpu/drm/nouveau/nv40_fb.c           |   62 
 drivers/gpu/drm/nouveau/nv40_fifo.c         |  314 
 drivers/gpu/drm/nouveau/nv40_graph.c        | 2239 ++
 drivers/gpu/drm/nouveau/nv40_mc.c           |   38 
 drivers/gpu/drm/nouveau/nv50_crtc.c         |  788 
 drivers/gpu/drm/nouveau/nv50_cursor.c       |  153 
 drivers/gpu/drm/nouveau/nv50_dac.c          |  304 
 drivers/gpu/drm/nouveau/nv50_display.c      |  902 
 drivers/gpu/drm/nouveau/nv50_display.h      |   46 
 drivers/gpu/drm/nouveau/nv50_evo.h          |  113 
 drivers/gpu/drm/nouveau/nv50_fbcon.c        |  273 
 drivers/gpu/drm/nouveau/nv50_fifo.c         |  494 
 drivers/gpu/drm/nouveau/nv50_graph.c        |  479 
 drivers/gpu/drm/nouveau/nv50_grctx.h        |26832 ++++++++++++++++++++++++++++
 drivers/gpu/drm/nouveau/nv50_instmem.c      |  509 
 drivers/gpu/drm/nouveau/nv50_mc.c           |   40 
 drivers/gpu/drm/nouveau/nv50_sor.c          |  265 
 drivers/gpu/drm/nouveau/nvreg.h             |  535 
 drivers/gpu/drm/ttm/ttm_bo.c                |    4 
 include/drm/Kbuild                          |    1 
 include/drm/i2c/ch7006.h                    |   86 
 include/drm/nouveau_drm.h                   |  220 
 84 files changed, 63664 insertions(+)

View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.61 -r 1.62 drm-nouveau.patchIndex: drm-nouveau.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/drm-nouveau.patch,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -p -r1.61 -r1.62
--- drm-nouveau.patch	12 Aug 2009 16:49:50 -0000	1.61
+++ drm-nouveau.patch	4 Jan 2010 15:25:44 -0000	1.62
@@ -1,8 +1,8 @@
 diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
-index f8d5074..3ada5e4 100644
+index f831ea1..a2320ac 100644
 --- a/drivers/gpu/drm/Kconfig
 +++ b/drivers/gpu/drm/Kconfig
-@@ -140,3 +140,18 @@ config DRM_SAVAGE
+@@ -154,3 +154,59 @@ 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.
@@ -10,6 +10,14 @@ index f8d5074..3ada5e4 100644
 +config DRM_NOUVEAU
 +	tristate "Nouveau (nVidia) cards"
 +	depends on DRM
++	select DRM_KMS_HELPER
++	select DRM_TTM
++	select FB_CFB_FILLRECT
++	select FB_CFB_COPYAREA
++	select FB_CFB_IMAGEBLIT
++	select FB
++	select FRAMEBUFFER_CONSOLE if !EMBEDDED
++	select FB_BACKLIGHT if DRM_NOUVEAU_BACKLIGHT
 +	help
 +	  Choose this option for open-source nVidia support.
 +
@@ -21,187 +29,1442 @@ index f8d5074..3ada5e4 100644
 +	and you have a new enough userspace to support this. Running old
 +	userspaces with this enabled will cause pain.
 +
++	NOTICE: if you plan on using the text based console outside of X, enable
++	FRAMEBUFFER_CONSOLE or else the console will be unusable.
++
++config DRM_NOUVEAU_BACKLIGHT
++	bool "Support for backlight control"
++	depends on DRM_NOUVEAU
++	default y
++	help
++	  Say Y here if you want to control the backlight of your display
++	  (e.g. a laptop panel).
++
++config DRM_NOUVEAU_DEBUG
++	bool "Build in Nouveau's debugfs support"
++	depends on DRM_NOUVEAU && DEBUG_FS
++	default y
++	help
++	  Say Y here if you want Nouveau to output debugging information
++	  via debugfs.
++
++menu "I2C encoder or helper chips"
++     depends on DRM
++
++config DRM_I2C_CH7006
++	tristate "Chrontel ch7006 TV encoder"
++	default m if DRM_NOUVEAU
++	help
++	  Support for Chrontel ch7006 and similar TV encoders, found
++	  on some nVidia video cards.
++
++	  This driver is currently only useful if you're also using
++	  the nouveau driver.
++
++endmenu
 diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
-index d6788df..97aa0c8 100644
+index 3c8827a..d22e64b 100644
 --- a/drivers/gpu/drm/Makefile
 +++ b/drivers/gpu/drm/Makefile
-@@ -27,4 +27,5 @@ obj-$(CONFIG_DRM_I915)  += i915/
+@@ -31,3 +31,5 @@ obj-$(CONFIG_DRM_I915)  += i915/
  obj-$(CONFIG_DRM_SIS)   += sis/
  obj-$(CONFIG_DRM_SAVAGE)+= savage/
  obj-$(CONFIG_DRM_VIA)	+=via/
 +obj-$(CONFIG_DRM_NOUVEAU) +=nouveau/
- 
-diff --git a/drivers/gpu/drm/drm_bufs.c b/drivers/gpu/drm/drm_bufs.c
-index 07e0c51..9ac171c 100644
---- a/drivers/gpu/drm/drm_bufs.c
-+++ b/drivers/gpu/drm/drm_bufs.c
-@@ -51,38 +51,24 @@ resource_size_t drm_get_resource_len(struct drm_device *dev, unsigned int resour
- 
- EXPORT_SYMBOL(drm_get_resource_len);
- 
--static struct drm_map_list *drm_find_matching_map(struct drm_device *dev,
--						  struct drm_local_map *map)
-+struct drm_map_list *drm_find_matching_map(struct drm_device *dev,
-+					   struct drm_local_map *map)
- {
- 	struct drm_map_list *entry;
- 	list_for_each_entry(entry, &dev->maplist, head) {
--		/*
--		 * Because the kernel-userspace ABI is fixed at a 32-bit offset
--		 * while PCI resources may live above that, we ignore the map
--		 * offset for maps of type _DRM_FRAMEBUFFER or _DRM_REGISTERS.
--		 * It is assumed that each driver will have only one resource of
--		 * each type.
--		 */
- 		if (!entry->map ||
- 		    map->type != entry->map->type ||
- 		    entry->master != dev->primary->master)
- 			continue;
--		switch (map->type) {
--		case _DRM_SHM:
--			if (map->flags != _DRM_CONTAINS_LOCK)
--				break;
--		case _DRM_REGISTERS:
--		case _DRM_FRAME_BUFFER:
--			return entry;
--		default: /* Make gcc happy */
--			;
--		}
--		if (entry->map->offset == map->offset)
-+
-+		if (entry->map->offset == map->offset ||
-+		    (map->type == _DRM_SHM && map->flags & _DRM_CONTAINS_LOCK))
- 			return entry;
- 	}
- 
- 	return NULL;
- }
-+EXPORT_SYMBOL(drm_find_matching_map);
- 
- static int drm_map_handle(struct drm_device *dev, struct drm_hash_item *hash,
- 			  unsigned long user_token, int hashed_handle, int shm)
-@@ -357,7 +343,7 @@ static int drm_addmap_core(struct drm_device * dev, resource_size_t offset,
- 	/* We do it here so that dev->struct_mutex protects the increment */
- 	user_token = (map->type == _DRM_SHM) ? (unsigned long)map->handle :
- 		map->offset;
--	ret = drm_map_handle(dev, &list->hash, user_token, 0,
-+	ret = drm_map_handle(dev, &list->hash, user_token, 1,
- 			     (map->type == _DRM_SHM));
- 	if (ret) {
- 		if (map->type == _DRM_REGISTERS)
-diff --git a/drivers/gpu/drm/drm_fence.c b/drivers/gpu/drm/drm_fence.c
-index f1c386c..fd62fd9 100644
---- a/drivers/gpu/drm/drm_fence.c
-+++ b/drivers/gpu/drm/drm_fence.c
-@@ -369,7 +369,7 @@ int drm_fence_object_wait(struct drm_fence_object *fence,
- 	struct drm_fence_manager *fm = &dev->fm;
- 	struct drm_fence_class_manager *fc = &fm->fence_class[fence->fence_class];
- 	int ret = 0;
--	unsigned long _end = 3 * DRM_HZ;
-+	unsigned long _end = jiffies + 3 * DRM_HZ;
- 
- 	if (mask & ~fence->type) {
- 		DRM_ERROR("Wait trying to extend fence type"
-diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
-index 4984aa8..dee9b40 100644
---- a/drivers/gpu/drm/drm_gem.c
-+++ b/drivers/gpu/drm/drm_gem.c
-@@ -280,48 +280,58 @@ drm_gem_close_ioctl(struct drm_device *dev, void *data,
-  * is freed, the name goes away.
-  */
- int
--drm_gem_flink_ioctl(struct drm_device *dev, void *data,
--		    struct drm_file *file_priv)
-+drm_gem_object_name(struct drm_device *dev, struct drm_gem_object *obj,
-+		    uint64_t *name)
- {
--	struct drm_gem_flink *args = data;
--	struct drm_gem_object *obj;
- 	int ret;
- 
--	if (!(dev->driver->driver_features & DRIVER_GEM))
--		return -ENODEV;
--
--	obj = drm_gem_object_lookup(dev, file_priv, args->handle);
--	if (obj == NULL)
--		return -EBADF;
--
- again:
--	if (idr_pre_get(&dev->object_name_idr, GFP_KERNEL) == 0) {
--		ret = -ENOMEM;
--		goto err;
--	}
-+	if (idr_pre_get(&dev->object_name_idr, GFP_KERNEL) == 0)
++obj-y			+= i2c/
+diff --git a/drivers/gpu/drm/i2c/Makefile b/drivers/gpu/drm/i2c/Makefile
+new file mode 100644
+index 0000000..6d2abaf
+--- /dev/null
++++ b/drivers/gpu/drm/i2c/Makefile
+@@ -0,0 +1,4 @@
++ccflags-y := -Iinclude/drm
++
++ch7006-y := ch7006_drv.o ch7006_mode.o
++obj-$(CONFIG_DRM_I2C_CH7006) += ch7006.o
+diff --git a/drivers/gpu/drm/i2c/ch7006_drv.c b/drivers/gpu/drm/i2c/ch7006_drv.c
+new file mode 100644
+index 0000000..9422a74
+--- /dev/null
++++ b/drivers/gpu/drm/i2c/ch7006_drv.c
[...82895 lines suppressed...]
-+ * Is this large enough, as it's only 32 bytes, and the maximum fetch size is 256 bytes?
-+ */
-+#define NOUVEAU_DMA_SKIPS 8
-+
-+#define NOUVEAU_MEM_FB			0x00000001
-+#define NOUVEAU_MEM_AGP			0x00000002
-+#define NOUVEAU_MEM_FB_ACCEPTABLE	0x00000004
-+#define NOUVEAU_MEM_AGP_ACCEPTABLE	0x00000008
-+#define NOUVEAU_MEM_PCI			0x00000010
-+#define NOUVEAU_MEM_PCI_ACCEPTABLE	0x00000020
-+#define NOUVEAU_MEM_PINNED		0x00000040
-+#define NOUVEAU_MEM_USER_BACKED		0x00000080
-+#define NOUVEAU_MEM_MAPPED		0x00000100
-+#define NOUVEAU_MEM_TILE		0x00000200
-+#define NOUVEAU_MEM_TILE_ZETA		0x00000400
-+#define NOUVEAU_MEM_INSTANCE		0x01000000 /* internal */
-+#define NOUVEAU_MEM_NOTIFIER            0x02000000 /* internal */
-+#define NOUVEAU_MEM_NOVM		0x04000000 /* internal */
-+#define NOUVEAU_MEM_USER		0x08000000 /* internal */
-+#define NOUVEAU_MEM_INTERNAL (NOUVEAU_MEM_INSTANCE | \
-+			      NOUVEAU_MEM_NOTIFIER | \
-+			      NOUVEAU_MEM_NOVM | \
-+			      NOUVEAU_MEM_USER)
-+
-+struct drm_nouveau_mem_alloc {
-+	int flags;
-+	int alignment;
-+	uint64_t size;	// in bytes
-+	uint64_t offset;
-+	drm_handle_t map_handle;
-+};
-+
-+struct drm_nouveau_mem_free {
-+	uint64_t offset;
-+	int flags;
-+};
-+
-+struct drm_nouveau_mem_tile {
-+	uint64_t offset;
-+	uint64_t delta;
-+	uint64_t size;
-+	int flags;
-+};
-+
 +/* FIXME : maybe unify {GET,SET}PARAMs */
 +#define NOUVEAU_GETPARAM_PCI_VENDOR      3
 +#define NOUVEAU_GETPARAM_PCI_DEVICE      4
@@ -49783,15 +64055,12 @@ index 0000000..4147f35
 +#define NOUVEAU_GETPARAM_AGP_SIZE        9
 +#define NOUVEAU_GETPARAM_PCI_PHYSICAL    10
 +#define NOUVEAU_GETPARAM_CHIPSET_ID      11
-+#define NOUVEAU_GETPARAM_MM_ENABLED      12
-+#define NOUVEAU_GETPARAM_VM_VRAM_BASE    13
++#define NOUVEAU_GETPARAM_VM_VRAM_BASE    12
 +struct drm_nouveau_getparam {
 +	uint64_t param;
 +	uint64_t value;
 +};
 +
-+#define NOUVEAU_SETPARAM_CMDBUF_LOCATION 1
-+#define NOUVEAU_SETPARAM_CMDBUF_SIZE     2
 +struct drm_nouveau_setparam {
 +	uint64_t param;
 +	uint64_t value;
@@ -49800,17 +64069,22 @@ index 0000000..4147f35
 +#define NOUVEAU_GEM_DOMAIN_CPU       (1 << 0)
 +#define NOUVEAU_GEM_DOMAIN_VRAM      (1 << 1)
 +#define NOUVEAU_GEM_DOMAIN_GART      (1 << 2)
-+#define NOUVEAU_GEM_DOMAIN_NOMAP     (1 << 3)
-+#define NOUVEAU_GEM_DOMAIN_TILE      (1 << 30)
-+#define NOUVEAU_GEM_DOMAIN_TILE_ZETA (1 << 31)
++#define NOUVEAU_GEM_DOMAIN_MAPPABLE  (1 << 3)
 +
-+struct drm_nouveau_gem_new {
++struct drm_nouveau_gem_info {
++	uint32_t handle;
++	uint32_t domain;
 +	uint64_t size;
++	uint64_t offset;
++	uint64_t map_handle;
++	uint32_t tile_mode;
++	uint32_t tile_flags;
++};
++
++struct drm_nouveau_gem_new {
++	struct drm_nouveau_gem_info info;
 +	uint32_t channel_hint;
 +	uint32_t align;
-+	uint32_t handle;
-+	uint32_t domain;
-+	uint32_t offset;
 +};
 +
 +struct drm_nouveau_gem_pushbuf_bo {
@@ -49855,9 +64129,14 @@ index 0000000..4147f35
 +	uint32_t offset;
 +	uint32_t nr_buffers;
 +	uint32_t nr_relocs;
-+	uint32_t pad0;
++	uint32_t nr_dwords;
 +	uint64_t buffers;
 +	uint64_t relocs;
++	uint32_t suffix0;
++	uint32_t suffix1;
++	/* below only accessed for CALL2 */
++	uint64_t vram_available;
++	uint64_t gart_available;
 +};
 +
 +struct drm_nouveau_gem_pin {
@@ -49870,14 +64149,12 @@ index 0000000..4147f35
 +	uint32_t handle;
 +};
 +
-+struct drm_nouveau_gem_mmap {
-+	uint32_t handle;
-+	uint32_t pad;
-+	uint64_t vaddr;
-+};
-+
++#define NOUVEAU_GEM_CPU_PREP_NOWAIT                                  0x00000001
++#define NOUVEAU_GEM_CPU_PREP_NOBLOCK                                 0x00000002
++#define NOUVEAU_GEM_CPU_PREP_WRITE                                   0x00000004
 +struct drm_nouveau_gem_cpu_prep {
 +	uint32_t handle;
++	uint32_t flags;
 +};
 +
 +struct drm_nouveau_gem_cpu_fini {
@@ -49886,38 +64163,19 @@ index 0000000..4147f35
 +
 +struct drm_nouveau_gem_tile {
 +	uint32_t handle;
-+	uint32_t delta;
++	uint32_t offset;
 +	uint32_t size;
-+	uint32_t flags;
-+};
-+
-+enum nouveau_card_type {
-+	NV_UNKNOWN =0,
-+	NV_04      =4,
-+	NV_05      =5,
-+	NV_10      =10,
-+	NV_11      =11,
-+	NV_17      =17,
-+	NV_20      =20,
-+	NV_30      =30,
-+	NV_40      =40,
-+	NV_44      =44,
-+	NV_50      =50,
-+	NV_LAST    =0xffff,
++	uint32_t tile_mode;
++	uint32_t tile_flags;
 +};
 +
 +enum nouveau_bus_type {
-+	NV_AGP     =0,
-+	NV_PCI     =1,
-+	NV_PCIE    =2,
++	NV_AGP     = 0,
++	NV_PCI     = 1,
++	NV_PCIE    = 2,
 +};
 +
-+#define NOUVEAU_MAX_SAREA_CLIPRECTS 16
-+
 +struct drm_nouveau_sarea {
-+	/* the cliprects */
-+	struct drm_clip_rect boxes[NOUVEAU_MAX_SAREA_CLIPRECTS];
-+	unsigned int nbox;
 +};
 +
 +#define DRM_NOUVEAU_CARD_INIT          0x00
@@ -49928,19 +64186,14 @@ index 0000000..4147f35
 +#define DRM_NOUVEAU_GROBJ_ALLOC        0x05
 +#define DRM_NOUVEAU_NOTIFIEROBJ_ALLOC  0x06
 +#define DRM_NOUVEAU_GPUOBJ_FREE        0x07
-+#define DRM_NOUVEAU_MEM_ALLOC          0x08
-+#define DRM_NOUVEAU_MEM_FREE           0x09
-+#define DRM_NOUVEAU_MEM_TILE           0x0a
-+#define DRM_NOUVEAU_SUSPEND            0x0b
-+#define DRM_NOUVEAU_RESUME             0x0c
 +#define DRM_NOUVEAU_GEM_NEW            0x40
 +#define DRM_NOUVEAU_GEM_PUSHBUF        0x41
 +#define DRM_NOUVEAU_GEM_PUSHBUF_CALL   0x42
-+#define DRM_NOUVEAU_GEM_PIN            0x43
-+#define DRM_NOUVEAU_GEM_UNPIN          0x44
-+#define DRM_NOUVEAU_GEM_MMAP           0x45
-+#define DRM_NOUVEAU_GEM_CPU_PREP       0x46
-+#define DRM_NOUVEAU_GEM_CPU_FINI       0x47
-+#define DRM_NOUVEAU_GEM_TILE           0x48
++#define DRM_NOUVEAU_GEM_PIN            0x43 /* !KMS only */
++#define DRM_NOUVEAU_GEM_UNPIN          0x44 /* !KMS only */
++#define DRM_NOUVEAU_GEM_CPU_PREP       0x45
++#define DRM_NOUVEAU_GEM_CPU_FINI       0x46
++#define DRM_NOUVEAU_GEM_INFO           0x47
++#define DRM_NOUVEAU_GEM_PUSHBUF_CALL2  0x48
 +
 +#endif /* __NOUVEAU_DRM_H__ */


Index: gen-patches
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/gen-patches,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- gen-patches	9 Jan 2008 08:05:11 -0000	1.5
+++ gen-patches	4 Jan 2010 15:25:46 -0000	1.6
@@ -27,7 +27,7 @@ fi
 
 base=$1
 shift
-base_rev=`git-rev-parse "$base"` || exit
+base_rev=`git rev-parse "$base"` || exit
 
 patchbase=10
 nextpatch=$patchbase
@@ -45,7 +45,7 @@ log()
   local logrev=$1
   local logbranch=$3
   local ref
-  ref=`git-symbolic-ref -q $logbranch` && logbranch=$ref
+  ref=`git symbolic-ref -q $logbranch` && logbranch=$ref
   case $logbranch in
   refs/remotes/*)
     logbranch=${logbranch#refs/remotes/}
@@ -53,7 +53,7 @@ log()
     logbranch=${logbranch#*/}
     logbranch=${logbranch//\//-}
     local url
-    url=`git-config "remote.${remote}.url"` || {
+    url=`git config "remote.${remote}.url"` || {
       echo >&2 "Cannot find URL for remote $remote"
       exit 2
     }
@@ -95,8 +95,8 @@ patch_apply()
 base_rev()
 {
   local base=$1
-  tag_rev=`git-rev-parse --revs-only --verify "$base^{}" 2> /dev/null` &&
-  [ "`git-describe --tags $tag_rev`" = "$base" ] && return 0
+  tag_rev=`git rev-parse --revs-only --verify "$base^{}" 2> /dev/null` &&
+  [ "`git describe --tags $tag_rev`" = "$base" ] && return 0
   case "$1" in
   v*-git*)
     local id=patch-${1#v}.id
@@ -133,8 +133,8 @@ i=0
 last_base=$base
 last_base_rev=$base_rev
 for branch; do
-  branch_rev=`git-rev-parse "$branch^{}"` || exit 2
-  merge_base=`git-merge-base $last_base_rev $branch_rev` || {
+  branch_rev=`git rev-parse "$branch^{}"` || exit 2
+  merge_base=`git merge-base $last_base_rev $branch_rev` || {
     echo >&2 "No common ancestor for $last_base and $branch"
     exit 2
   }

hdpvr-ir-enable.patch:
 0 files changed

Index: hdpvr-ir-enable.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/hdpvr-ir-enable.patch,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- hdpvr-ir-enable.patch	1 Sep 2009 04:18:44 -0000	1.4
+++ hdpvr-ir-enable.patch	4 Jan 2010 15:25:46 -0000	1.5
@@ -1,158 +0,0 @@
-From http://hg.jannau.net/hdpvr/, pending v4l-dvb pull request
-
----
- drivers/media/video/hdpvr/Makefile     |    4 +--
- drivers/media/video/hdpvr/hdpvr-core.c |    7 ++---
- drivers/media/video/hdpvr/hdpvr-i2c.c  |   40 ++++++++++++++++++++++++++-----
- 3 files changed, 37 insertions(+), 14 deletions(-)
-
-diff --git a/drivers/media/video/hdpvr/Makefile b/drivers/media/video/hdpvr/Makefile
-index e0230fc..79ad2e1 100644
---- a/drivers/media/video/hdpvr/Makefile
-+++ b/drivers/media/video/hdpvr/Makefile
-@@ -1,6 +1,4 @@
--hdpvr-objs	:= hdpvr-control.o hdpvr-core.o hdpvr-video.o
--
--hdpvr-$(CONFIG_I2C) += hdpvr-i2c.o
-+hdpvr-objs	:= hdpvr-control.o hdpvr-core.o hdpvr-i2c.o hdpvr-video.o
- 
- obj-$(CONFIG_VIDEO_HDPVR) += hdpvr.o
- 
-diff --git a/drivers/media/video/hdpvr/hdpvr-core.c b/drivers/media/video/hdpvr/hdpvr-core.c
-index 188bd5a..779f907 100644
---- a/drivers/media/video/hdpvr/hdpvr-core.c
-+++ b/drivers/media/video/hdpvr/hdpvr-core.c
-@@ -362,9 +362,8 @@ static int hdpvr_probe(struct usb_interface *interface,
- 		goto error;
- 	}
- 
--#ifdef CONFIG_I2C
--	/* until i2c is working properly */
--	retval = 0; /* hdpvr_register_i2c_adapter(dev); */
-+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-+	retval = hdpvr_register_i2c_adapter(dev);
- 	if (retval < 0) {
- 		v4l2_err(&dev->v4l2_dev, "registering i2c adapter failed\n");
- 		goto error;
-@@ -414,7 +413,7 @@ static void hdpvr_disconnect(struct usb_interface *interface)
- 	mutex_unlock(&dev->io_mutex);
- 
- 	/* deregister I2C adapter */
--#ifdef CONFIG_I2C
-+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
- 	mutex_lock(&dev->i2c_mutex);
- 	if (dev->i2c_adapter)
- 		i2c_del_adapter(dev->i2c_adapter);
-diff --git a/drivers/media/video/hdpvr/hdpvr-i2c.c b/drivers/media/video/hdpvr/hdpvr-i2c.c
-index c4b5d15..e0ae619 100644
---- a/drivers/media/video/hdpvr/hdpvr-i2c.c
-+++ b/drivers/media/video/hdpvr/hdpvr-i2c.c
-@@ -10,6 +10,8 @@
-  *
-  */
- 
-+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-+
- #include <linux/i2c.h>
- 
- #include "hdpvr.h"
-@@ -22,7 +24,7 @@
- #define REQTYPE_I2C_WRITE_STATT	0xd0
- 
- static int hdpvr_i2c_read(struct hdpvr_device *dev, unsigned char addr,
--			  char *data, int len)
-+			  char *data, int len, int bus)
- {
- 	int ret;
- 	char *buf = kmalloc(len, GFP_KERNEL);
-@@ -32,7 +34,7 @@ static int hdpvr_i2c_read(struct hdpvr_device *dev, unsigned char addr,
- 	ret = usb_control_msg(dev->udev,
- 			      usb_rcvctrlpipe(dev->udev, 0),
- 			      REQTYPE_I2C_READ, CTRL_READ_REQUEST,
--			      0x100|addr, 0, buf, len, 1000);
-+			      bus<<8 | addr, 0, buf, len, 1000);
- 
- 	if (ret == len) {
- 		memcpy(data, buf, len);
-@@ -46,7 +48,7 @@ static int hdpvr_i2c_read(struct hdpvr_device *dev, unsigned char addr,
- }
- 
- static int hdpvr_i2c_write(struct hdpvr_device *dev, unsigned char addr,
--			   char *data, int len)
-+			   char *data, int len, int bus)
- {
- 	int ret;
- 	char *buf = kmalloc(len, GFP_KERNEL);
-@@ -57,7 +59,7 @@ static int hdpvr_i2c_write(struct hdpvr_device *dev, unsigned char addr,
- 	ret = usb_control_msg(dev->udev,
- 			      usb_sndctrlpipe(dev->udev, 0),
- 			      REQTYPE_I2C_WRITE, CTRL_WRITE_REQUEST,
--			      0x100|addr, 0, buf, len, 1000);
-+			      bus<<8 | addr, 0, buf, len, 1000);
- 
- 	if (ret < 0)
- 		goto error;
-@@ -67,7 +69,7 @@ static int hdpvr_i2c_write(struct hdpvr_device *dev, unsigned char addr,
- 			      REQTYPE_I2C_WRITE_STATT, CTRL_READ_REQUEST,
- 			      0, 0, buf, 2, 1000);
- 
--	if (ret == 2)
-+	if ((ret == 2) && (buf[1] == (len - 1)))
- 		ret = 0;
- 	else if (ret >= 0)
- 		ret = -EIO;
-@@ -93,10 +95,10 @@ static int hdpvr_transfer(struct i2c_adapter *i2c_adapter, struct i2c_msg *msgs,
- 
- 		if (msgs[i].flags & I2C_M_RD)
- 			retval = hdpvr_i2c_read(dev, addr, msgs[i].buf,
--						msgs[i].len);
-+						msgs[i].len, 1);
- 		else
- 			retval = hdpvr_i2c_write(dev, addr, msgs[i].buf,
--						 msgs[i].len);
-+						 msgs[i].len, 1);
- 	}
- 
- 	mutex_unlock(&dev->i2c_mutex);
-@@ -114,6 +116,26 @@ static struct i2c_algorithm hdpvr_algo = {
- 	.functionality = hdpvr_functionality,
- };
- 
-+static int hdpvr_activate_ir(struct hdpvr_device *dev)
-+{
-+	char buffer[8];
-+
-+	mutex_lock(&dev->i2c_mutex);
-+
-+	hdpvr_i2c_read(dev, 0x54, buffer, 1, 0);
-+
-+	buffer[0] = 0;
-+	buffer[1] = 0x8;
-+	hdpvr_i2c_write(dev, 0x54, buffer, 2, 1);
-+
-+	buffer[1] = 0x18;
-+	hdpvr_i2c_write(dev, 0x54, buffer, 2, 1);
-+
-+	mutex_unlock(&dev->i2c_mutex);
-+	return 0;
-+}
-+
-+
- int hdpvr_register_i2c_adapter(struct hdpvr_device *dev)
- {
- 	struct i2c_adapter *i2c_adap;
-@@ -123,6 +145,8 @@ int hdpvr_register_i2c_adapter(struct hdpvr_device *dev)
- 	if (i2c_adap == NULL)
- 		goto error;
- 
-+	hdpvr_activate_ir(dev);
-+
- 	strlcpy(i2c_adap->name, "Hauppauge HD PVR I2C",
- 		sizeof(i2c_adap->name));
- 	i2c_adap->algo  = &hdpvr_algo;
-@@ -143,3 +167,5 @@ int hdpvr_register_i2c_adapter(struct hdpvr_device *dev)
- error:
- 	return retval;
- }
-+
-+#endif /* CONFIG_I2C */


View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.1785 -r 1.1786 kernel.specIndex: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/kernel.spec,v
retrieving revision 1.1785
retrieving revision 1.1786
diff -u -p -r1.1785 -r1.1786
--- kernel.spec	26 Dec 2009 00:47:06 -0000	1.1785
+++ kernel.spec	4 Jan 2010 15:25:46 -0000	1.1786
@@ -27,20 +27,20 @@ Summary: The Linux kernel
 # 1.1205.1.1.  In this case we drop the initial 1, subtract fedora_cvs_origin
 # from the second number, and then append the rest of the RCS string as is.
 # Don't stare at the awk too long, you'll go blind.
-%define fedora_cvs_origin   1679
+%define fedora_cvs_origin   1785
 %define fedora_cvs_revision() %2
 %global fedora_build %(echo %{fedora_cvs_origin}.%{fedora_cvs_revision $Revision$} | awk -F . '{ OFS = "."; ORS = ""; print $3 - $1 ; i = 4 ; OFS = ""; while (i <= NF) { print ".", $i ; i++} }')
 
 # base_sublevel is the kernel version we're starting with and patching
 # on top of -- for example, 2.6.22-rc7-git1 starts with a 2.6.21 base,
 # which yields a base_sublevel of 21.
-%define base_sublevel 30
+%define base_sublevel 32
 
 ## If this is a released kernel ##
 %if 0%{?released_kernel}
 
 # Do we have a -stable update to apply?
-%define stable_update 10
+%define stable_update 2
 # Is it a -stable RC?
 %define stable_rc 0
 # Set rpm version accordingly
@@ -78,7 +78,7 @@ Summary: The Linux kernel
 #
 # standard kernel
 %define with_up        %{?_without_up:        0} %{?!_without_up:        1}
-# kernel-smp (only valid for ppc 32-bit, sparc64)
+# kernel-smp (only valid for ppc 32-bit)
 %define with_smp       %{?_without_smp:       0} %{?!_without_smp:       1}
 # kernel-kdump
 %define with_kdump     %{?_without_kdump:     0} %{?!_without_kdump:     1}
@@ -89,23 +89,29 @@ Summary: The Linux kernel
 # kernel-headers
 %define with_headers   %{?_without_headers:   0} %{?!_without_headers:   1}
 # kernel-firmware
-%define with_firmware  %{?_with_firmware:  1} %{?!_with_firmware:  0}
+%define with_firmware  %{?_with_firmware:     1} %{?!_with_firmware:     0}
+# tools/perf
+%define with_perftool  %{?_without_perftool:  0} %{?!_without_perftool:  1}
+# perf noarch subpkg
+%define with_perf      %{?_without_perf:      0} %{?!_without_perf:      1}
 # kernel-debuginfo
 %define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1}
 # kernel-bootwrapper (for creating zImages from kernel + initrd)
 %define with_bootwrapper %{?_without_bootwrapper: 0} %{?!_without_bootwrapper: 1}
 # Want to build a the vsdo directories installed
 %define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1}
+# Use dracut instead of mkinitrd for initrd image generation
+%define with_dracut       %{?_without_dracut:       0} %{?!_without_dracut:       1}
 
 # Build the kernel-doc package, but don't fail the build if it botches.
 # Here "true" means "continue" and "false" means "fail the build".
 %if 0%{?released_kernel}
-%define doc_build_fail true
+%define doc_build_fail false
 %else
 %define doc_build_fail true
 %endif
 
-%define rawhide_skip_docs 0
+%define rawhide_skip_docs 1
 %if 0%{?rawhide_skip_docs}
 %define with_doc 0
 %endif
@@ -116,6 +122,8 @@ Summary: The Linux kernel
 %define with_baseonly  %{?_with_baseonly:     1} %{?!_with_baseonly:     0}
 # Only build the smp kernel (--with smponly):
 %define with_smponly   %{?_with_smponly:      1} %{?!_with_smponly:      0}
+# Only build the debug kernel (--with dbgonly):
+%define with_dbgonly   %{?_with_dbgonly:      1} %{?!_with_dbgonly:      0}
 
 # should we do C=1 builds with sparse
 %define with_sparse	%{?_with_sparse:      1} %{?!_with_sparse:      0}
@@ -123,7 +131,7 @@ Summary: The Linux kernel
 # Set debugbuildsenabled to 1 for production (build separate debug kernels)
 #  and 0 for rawhide (all kernels are debug kernels).
 # See also 'make debug' and 'make release'.
-%define debugbuildsenabled 1
+%define debugbuildsenabled 0
 
 # Want to build a vanilla kernel build without any non-upstream patches?
 # (well, almost none, we need nonintconfig for build purposes). Default to 0 (off).
@@ -142,12 +150,13 @@ Summary: The Linux kernel
 # non-released_kernel
 %if 0%{?rcrev}
 %define rctag .rc%rcrev
+%else
+%define rctag .rc0
 %endif
 %if 0%{?gitrev}
 %define gittag .git%gitrev
-%if !0%{?rcrev}
-%define rctag .rc0
-%endif
+%else
+%define gittag .git0
 %endif
 %define pkg_release 0.%{fedora_build}%{?rctag}%{?gittag}%{?buildid}%{?dist}
 
@@ -158,7 +167,7 @@ Summary: The Linux kernel
 
 %define make_target bzImage
 
-%define KVERREL %{PACKAGE_VERSION}-%{PACKAGE_RELEASE}.%{_target_cpu}
+%define KVERREL %{version}-%{release}.%{_target_cpu}
 %define hdrarch %_target_cpu
 %define asmarch %_target_cpu
 
@@ -194,9 +203,8 @@ Summary: The Linux kernel
 %endif
 %define debuginfodir /usr/lib/debug
 
-# We only build -PAE for 686 as of Fedora 11.
+# kernel-PAE is only built on i686.
 %ifarch i686
-%define with_up 0
 %define with_pae 1
 %else
 %define with_pae 0
@@ -216,7 +224,19 @@ Summary: The Linux kernel
 %define with_debug 0
 %endif
 
-%define all_x86 i386 i586 i686
+# if requested, only build debug kernel
+%if %{with_dbgonly}
+%if %{debugbuildsenabled}
+%define with_up 0
+%endif
+%define with_smp 0
+%define with_pae 0
+%define with_xen 0
+%define with_kdump 0
+%define with_perftool 0
+%endif
+
+%define all_x86 i386 i686
 
 %if %{with_vdso_install}
 # These arches install vdso/ directories.
@@ -225,8 +245,8 @@ Summary: The Linux kernel
 
 # Overrides for generic default options
 
-# only ppc and sparc64 need separate smp kernels
-%ifnarch ppc sparc64 alphaev56
+# only ppc and alphav56 need separate smp kernels
+%ifnarch ppc alphaev56
 %define with_smp 0
 %endif
 
@@ -245,12 +265,7 @@ Summary: The Linux kernel
 # only package docs noarch
 %ifnarch noarch
 %define with_doc 0
-%endif
-
-# no need to build headers again for these arches,
-# they can just use i586 and ppc64 headers
-%ifarch i686 ppc64iseries
-%define with_headers 0
+%define with_perf 0
 %endif
 
 # don't build noarch kernels or headers (duh)
@@ -317,6 +332,7 @@ Summary: The Linux kernel
 %define make_target image
 %define kernel_image arch/sparc/boot/image
 %define image_install_path boot
+%define with_perftool 0
 %endif
 
 %ifarch ppc
@@ -380,6 +396,7 @@ Summary: The Linux kernel
 %define with_pae 0
 %define with_kdump 0
 %define with_debuginfo 0
+%define with_perftool 0
 %define _enable_debug_packages 0
 %endif
 
@@ -428,7 +445,12 @@ Summary: The Linux kernel
 # Packages that need to be installed before the kernel is, because the %post
 # scripts use them.
 #
-%define kernel_prereq  fileutils, module-init-tools, initscripts >= 8.11.1-1, mkinitrd >= 6.0.61-1, kernel-firmware >= %{rpmversion}-%{pkg_release}, /sbin/new-kernel-pkg
+%define kernel_prereq  fileutils, module-init-tools, initscripts >= 8.11.1-1, kernel-firmware >= %{rpmversion}-%{pkg_release}, grubby >= 7.0.4-1
+%if %{with_dracut}
+%define initrd_prereq  dracut >= 001-7
+%else
[...2325 lines suppressed...]
+* Sun Jun 21 2009 Dave Jones <davej at redhat.com> 2.6.31-0.20.rc0.git18
+- 2.6.30-git18
+  VIA crypto & mmc patches now upstream.
+
+* Sun Jun 21 2009 Dave Jones <davej at redhat.com>
+- Determine cacheline sizes in a generic manner.
+
+* Sun Jun 21 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31-0.18.rc0.git17
+- 2.6.30-git17
+- Config changes:
+  - powerpc32-generic
+      CONFIG_PERF_COUNTERS=y
+  - generic
+      CONFIG_KEYBOARD_LM8323 is not set
+      CONFIG_MOUSE_SYNAPTICS_I2C=m
+      CONFIG_TOUCHSCREEN_EETI=m
+      CONFIG_TOUCHSCREEN_W90X900=m
+- Dropped agp-set_memory_ucwb.patch, all fixed upstream now.
+
+* Sat Jun 20 2009 Kyle McMartin <kyle at redhat.com> 2.6.31.0.17.rc0.git15
+- config changes:
+ - ppc generic:
+  - CONFIG_PPC_DISABLE_WERROR=y (switched... chrp fails otherwise, stack
+    frame size.)
+
+* Sat Jun 20 2009 Kyle McMartin <kyle at redhat.com> 2.6.31.0.16.rc0.git15
+- 2.6.30-git15
+- config changes:
+ - generic:
+  - CONFIG_LBDAF=y
+ - staging:
+  - CONFIG_USB_SERIAL_QUATECH2 is not set
+  - CONFIG_VT6655 is not set
+  - CONFIG_USB_CPC is not set
+  - CONFIG_RDC_17F3101X is not set
+  - CONFIG_FB_UDL is not set
+ - ppc32:
+  - CONFIG_KMETER1=y
+ - ppc generic:
+  - CONFIG_PPC_DISABLE_WERROR is not set
+- lirc disabled due to i2c detach_client removal.
+
+* Sat Jun 20 2009 Kyle McMartin <kyle at redhat.com>
+- sched-introduce-SCHED_RESET_ON_FORK-scheduling-policy-flag.patch: add,
+  queued in tip/sched/core (ca94c442535a44d508c99a77e54f21a59f4fc462)
+
+* Fri Jun 19 2009 Kyle McMartin <kyle at redhat.com> 2.6.31.0.15.rc0.git14
+- Fix up ptrace, hopefully. Builds on x86_64 at least.
+
+* Fri Jun 19 2009 Chuck Ebbert <cebbert at redhat.com>
+- linux-2.6-tip.git-203abd67b75f7714ce98ab0cdbd6cfd7ad79dec4.patch
+  Fixes oops on boot with qemu (#507007)
+
+* Fri Jun 19 2009 Kyle McMartin <kyle at redhat.com> 2.6.31-0.13.rc0.git14
+- 2.6.30-git14
+
+* Fri Jun 19 2009 Chuck Ebbert <cebbert at redhat.com>
+- Fix up the via-sdmmc and via-hwmon-temp-sensor patches.
+- Drop VIA Padlock patches merged upstream:
+    via-rng-enable-64bit.patch
+    via-padlock-10-enable-64bit.patch
+    via-padlock-20-add-x86-dependency.patch
+
+* Thu Jun 18 2009 Kyle McMartin <kyle at redhat.com> 2.6.31-0.11.rc0.git13
+- 2.6.30-git13
+- config changes:
+ - arm:
+  - CONFIG_UACCESS_WITH_MEMCPY is not set
+ - i686-PAE:
+  - CONFIG_XEN_DEV_EVTCHN=m
+  - CONFIG_XEN_SYS_HYPERVISOR=y
+ - ia64:
+  - CONFIG_RCU_FANOUT=64
+ - nodebug:
+  - CONFIG_DEBUG_KMEMLEAK is not set
+  - CONFIG_DEBUG_KMEMLEAK_TEST=m
+ - powerpc:
+  - CONFIG_CAN_SJA1000_OF_PLATFORM=m
+  - CONFIG_PPC_EMULATED_STATS=y
+  - CONFIG_SWIOTLB=y
+  - CONFIG_RDS is not set (broken on ppc32)
+ - powerpc32:
+  - CONFIG_RCU_FANOUT=32
+ - powerpc64:
+  - CONFIG_RCU_FANOUT=64
+  - CONFIG_PERF_COUNTERS=y
+ - s390x:
+  - CONFIG_RCU_FANOUT=64
+  - CONFIG_SECCOMP=y
+  - CONFIG_PM=y
+  - CONFIG_HIBERNATION=y
+  - CONFIG_PM_STD_PARTITION="/dev/jokes"
+ - sparc64:
+  - CONFIG_RCU_FANOUT=64
+ - x86:
+  - CONFIG_RCU_FANOUT=32
+  - CONFIG_IOMMU_STRESS is not set
+  - CONFIG_PERF_COUNTERS=y
+  - CONFIG_X86_OLD_MCE is not set
+  - CONFIG_X86_MCE_INTEL=y
+  - CONFIG_X86_MCE_AMD=y
+  - CONFIG_X86_ANCIENT_MCE is not set
+  - CONFIG_X86_MCE_INJECT is not set
+ - x86_64:
+  - CONFIG_EDAC_AMD64=m
+  - CONFIG_EDAC_AMD64_ERROR_INJECTION is not set
+  - CONFIG_XEN_DEV_EVTCHN=m
+  - CONFIG_XEN_SYS_HYPERVISOR=y
+  - CONFIG_RCU_FANOUT=64
+  - CONFIG_IOMMU_STRESS is not set
+  - CONFIG_PERF_COUNTERS=y
+  - CONFIG_X86_MCE_INJECT is not set
+ - generic:
+  - CONFIG_RCU_FANOUT=32
+  - CONFIG_MMC_SDHCI_PLTFM=m
+  - CONFIG_MMC_CB710=m
+  - CONFIG_CB710_CORE=m
+  - CONFIG_CB710_DEBUG is not set
+  - CONFIG_SCSI_MVSAS_DEBUG is not set
+  - CONFIG_SCSI_BNX2_ISCSI=m
+  - CONFIG_NETFILTER_XT_MATCH_OSF=m
+  - CONFIG_RFKILL_INPUT=y (used to be =m, which was invalid)
+  - CONFIG_DE2104X_DSL=0
+  - CONFIG_KS8842 is not set
+  - CONFIG_CFG80211_DEBUGFS=y
+  - CONFIG_MAC80211_DEFAULT_PS=y
+  - CONFIG_IWM=m
+  - CONFIG_IWM_DEBUG is not set
+  - CONFIG_RT2800USB=m
+  - CONFIG_CAN_DEV=m
+  - CONFIG_CAN_CALC_BITTIMING=y
+  - CONFIG_CAN_SJA1000=m
+  - CONFIG_CAN_SJA1000_PLATFORM=m
+  - CONFIG_CAN_EMS_PCI=m
+  - CONFIG_CAN_KVASER_PCI=m
+  - CONFIG_EEPROM_MAX6875=m
+  - CONFIG_SENSORS_TMP401=m
+  - CONFIG_MEDIA_SUPPORT=m
+  - CONFIG_SND_CTXFI=m
+  - CONFIG_SND_LX6464ES=m
+  - CONFIG_SND_HDA_CODEC_CA0110=y
+  - CONFIG_USB_XHCI_HCD=m
+  - CONFIG_USB_XHCI_HCD_DEBUGGING is not set
+  - CONFIG_DRAGONRISE_FF=y (used to be =m)
+  - CONFIG_GREENASIA_FF=y (used to be =m)
+  - CONFIG_SMARTJOYPLUS_FF=y (used to be =m)
+  - CONFIG_USB_NET_INT51X1=m
+  - CONFIG_CUSE=m
+  - CONFIG_FUNCTION_PROFILER=y
+  - CONFIG_RING_BUFFER_BENCHMARK=m
+  - CONFIG_REGULATOR_USERSPACE_CONSUMER=m
+  - CONFIG_REGULATOR_MAX1586=m
+  - CONFIG_REGULATOR_LP3971=m
+  - CONFIG_RCU_FANOUT_EXACT is not set
+  - CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+  - CONFIG_FSNOTIFY=y
+  - CONFIG_IEEE802154=m
+  - CONFIG_IEEE802154_DRIVERS=m
+  - CONFIG_IEEE802154_FAKEHARD=m
+  - CONFIG_CNIC=m
+
+* Wed Jun 17 2009 Jarod Wilson <jarod at redhat.com>
+- New lirc_imon hotness, update 2:
+  * support dual-interface devices with a single lirc device
+  * directional pad functions as an input device mouse
+  * touchscreen devices finally properly supported
+  * support for using MCE/RC-6 protocol remotes
+  * fix oops in RF remote association code (F10 bug #475496)
+  * fix re-enabling case/panel buttons and/or knobs
+- Add some misc additional lirc_mceusb2 transceiver IDs
+- Add missing unregister_chrdev_region() call to lirc_dev exit
+- Add it8720 support to lirc_it87
+
+* Tue Jun 16 2009 Chuck Ebbert <cebbert at redhat.com>
+- Update via-sdmmc driver
+
+* Mon Jun 15 2009 Jarod Wilson <jarod at redhat.com>
+- Update lirc patches w/new imon hotness
+
+* Fri Jun 12 2009 Chuck Ebbert <cebbert at redhat.com>
+- Update VIA temp sensor and mmc drivers.
+
+* Fri Jun 12 2009 John W. Linville <linville at redhat.com> 2.6.30-6
+- neigh: fix state transition INCOMPLETE->FAILED via Netlink request
+- enable CONFIG_ARPD (used by OpenNHRP)
+
+* Wed Jun 10 2009 Chuck Ebbert <cebbert at redhat.com>
+- VIA Nano updates:
+  Enable Padlock AES encryption and random number generator on x86-64
+  Add via-sdmmc and via-cputemp drivers
 
+* Wed Jun 10 2009 Kyle McMartin <kyle at redhat.com> 2.6.30-1
+- Linux 2.6.30 rebase.
+
+###
+# The following Emacs magic makes C-c C-e use UTC dates.
+# Local Variables:
+# rpm-change-log-uses-utc: t
+# End:
+###

linux-2.6-build-nonintconfig.patch:
 Makefile |    5 +++++
 conf.c   |   36 ++++++++++++++++++++++++++++++++----
 2 files changed, 37 insertions(+), 4 deletions(-)

Index: linux-2.6-build-nonintconfig.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/linux-2.6-build-nonintconfig.patch,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -p -r1.15 -r1.16
--- linux-2.6-build-nonintconfig.patch	30 Sep 2008 03:24:30 -0000	1.15
+++ linux-2.6-build-nonintconfig.patch	4 Jan 2010 15:25:47 -0000	1.16
@@ -1,10 +1,10 @@
 diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
-index 32e8c5a..8020453 100644
+index 6d69c7c..ff84d12 100644
 --- a/scripts/kconfig/Makefile
 +++ b/scripts/kconfig/Makefile
-@@ -24,6 +24,11 @@ oldconfig: $(obj)/conf
- silentoldconfig: $(obj)/conf
- 	$< -s $(Kconfig)
+@@ -58,6 +58,11 @@ localyesconfig: $(obj)/streamline_config.pl $(obj)/conf
+ 	fi
+ 	$(Q)rm -f .tmp.config
  
 +nonint_oldconfig: $(obj)/conf
 +	$< -b $(Kconfig)
@@ -15,10 +15,10 @@ index 32e8c5a..8020453 100644
  # Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
  # The symlink is used to repair a deficiency in arch/um
 diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c
-index fda6313..ed33b66 100644
+index 9960d1c..ac8d455 100644
 --- a/scripts/kconfig/conf.c
 +++ b/scripts/kconfig/conf.c
-@@ -22,6 +22,8 @@
+@@ -23,6 +23,8 @@ enum {
  	ask_all,
  	ask_new,
  	ask_silent,
@@ -27,16 +27,7 @@ index fda6313..ed33b66 100644
  	set_default,
  	set_yes,
  	set_mod,
-@@ -39,6 +41,8 @@
- 
- static char nohelp_text[] = N_("Sorry, no help available for this option yet.\n");
- 
-+static int return_value = 0;
-+
- static const char *get_help(struct menu *menu)
- {
- 	if (menu_has_help(menu))
-@@ -359,7 +363,10 @@
+@@ -360,7 +362,10 @@ static void conf(struct menu *menu)
  
  		switch (prop->type) {
  		case P_MENU:
@@ -48,7 +39,16 @@ index fda6313..ed33b66 100644
  				check_conf(menu);
  				return;
  			}
-@@ -417,12 +424,21 @@
+@@ -406,6 +411,8 @@ conf_childs:
+ 		indent -= 2;
+ }
+ 
++static int return_value;
++
+ static void check_conf(struct menu *menu)
+ {
+ 	struct symbol *sym;
+@@ -418,12 +425,21 @@ static void check_conf(struct menu *menu)
  	if (sym && !sym_has_value(sym)) {
  		if (sym_is_changable(sym) ||
  		    (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
@@ -70,7 +70,7 @@ index fda6313..ed33b66 100644
  
  	for (child = menu->list; child; child = child->next)
  		check_conf(child);
-@@ -438,7 +454,7 @@
+@@ -439,7 +455,7 @@ int main(int ac, char **av)
  	bindtextdomain(PACKAGE, LOCALEDIR);
  	textdomain(PACKAGE);
  
@@ -79,7 +79,7 @@ index fda6313..ed33b66 100644
  		switch (opt) {
  		case 'o':
  			input_mode = ask_silent;
-@@ -447,6 +463,12 @@
+@@ -448,6 +464,12 @@ int main(int ac, char **av)
  			input_mode = ask_silent;
  			sync_kconfig = 1;
  			break;
@@ -92,7 +92,7 @@ index fda6313..ed33b66 100644
  		case 'd':
  			input_mode = set_default;
  			break;
-@@ -510,6 +532,8 @@
+@@ -525,6 +547,8 @@ int main(int ac, char **av)
  	case ask_silent:
  	case ask_all:
  	case ask_new:
@@ -101,7 +101,7 @@ index fda6313..ed33b66 100644
  		conf_read(NULL);
  		break;
  	case set_no:
-@@ -571,12 +595,16 @@
+@@ -586,12 +610,16 @@ int main(int ac, char **av)
  		conf(&rootmenu);
  		input_mode = ask_silent;
  		/* fall through */
@@ -119,7 +119,7 @@ index fda6313..ed33b66 100644
  		break;
  	}
  
-@@ -598,5 +626,5 @@
+@@ -613,5 +641,5 @@ int main(int ac, char **av)
  			exit(1);
  		}
  	}

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

Index: linux-2.6-crash-driver.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/linux-2.6-crash-driver.patch,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -p -r1.15 -r1.16
--- linux-2.6-crash-driver.patch	9 Apr 2009 14:01:13 -0000	1.15
+++ linux-2.6-crash-driver.patch	4 Jan 2010 15:25:47 -0000	1.16
@@ -95,24 +95,105 @@ index 0000000..541af84
 +
 +#endif /* _ASM_IA64_CRASH_H */
 diff --git a/arch/ia64/kernel/ia64_ksyms.c b/arch/ia64/kernel/ia64_ksyms.c
-index 6da1f20..2984fb3 100644
+index 14d39e3..cf3d040 100644
 --- a/arch/ia64/kernel/ia64_ksyms.c
 +++ b/arch/ia64/kernel/ia64_ksyms.c
-@@ -86,6 +86,9 @@ EXPORT_SYMBOL(ia64_save_scratch_fpregs);
+@@ -84,6 +84,9 @@ EXPORT_SYMBOL(ia64_save_scratch_fpregs);
  #include <asm/unwind.h>
  EXPORT_SYMBOL(unw_init_running);
  
 +#include <linux/efi.h>
 +EXPORT_SYMBOL_GPL(efi_mem_type);
 +
- #ifdef ASM_SUPPORTED
- # ifdef CONFIG_SMP
- #  if (__GNUC__ == 3 && __GNUC_MINOR__ < 3)
+ #if defined(CONFIG_IA64_ESI) || defined(CONFIG_IA64_ESI_MODULE)
+ extern void esi_call_phys (void);
+ EXPORT_SYMBOL_GPL(esi_call_phys);
+diff --git a/arch/x86/include/asm/crash.h b/arch/x86/include/asm/crash.h
+new file mode 100644
+index 0000000..dfcc006
+--- /dev/null
++++ b/arch/x86/include/asm/crash.h
+@@ -0,0 +1,75 @@
++#ifndef _ASM_I386_CRASH_H
++#define _ASM_I386_CRASH_H
++
++/*
++ * linux/include/asm-i386/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_I386_CRASH_H */
 diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
-index d4c4307..d1c968f 100644
+index 334e63c..8e1ccbc 100644
 --- a/arch/x86/mm/ioremap.c
 +++ b/arch/x86/mm/ioremap.c
-@@ -133,6 +133,7 @@ int page_is_ram(unsigned long pagenr)
+@@ -60,6 +60,7 @@ int page_is_ram(unsigned long pagenr)
  	}
  	return 0;
  }
@@ -121,10 +202,10 @@ index d4c4307..d1c968f 100644
  /*
   * Fix up the linear direct mapping of the kernel to avoid cache attribute
 diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
-index 43d6ba8..0d81c9a 100644
+index 08a6f50..8bc5e9a 100644
 --- a/drivers/char/Kconfig
 +++ b/drivers/char/Kconfig
-@@ -460,6 +460,8 @@ config LEGACY_PTYS
+@@ -484,6 +484,8 @@ config LEGACY_PTYS
  	  security.  This option enables these legacy devices; on most
  	  systems, it is safe to say N.
  
@@ -134,10 +215,10 @@ index 43d6ba8..0d81c9a 100644
  config LEGACY_PTY_COUNT
  	int "Maximum number of legacy PTY in use"
 diff --git a/drivers/char/Makefile b/drivers/char/Makefile
-index 438f713..1b7767b 100644
+index 19a79dd..0bee860 100644
 --- a/drivers/char/Makefile
 +++ b/drivers/char/Makefile
-@@ -109,6 +109,8 @@ obj-$(CONFIG_PS3_FLASH)		+= ps3flash.o
+@@ -112,6 +112,8 @@ obj-$(CONFIG_PS3_FLASH)		+= ps3flash.o
  obj-$(CONFIG_JS_RTC)		+= js-rtc.o
  js-rtc-y = rtc.o
  
@@ -280,84 +361,3 @@ index 0000000..e5437de
 +module_exit(crash_cleanup_module);
 +
 +MODULE_LICENSE("GPL");
-diff --git a/include/asm-x86/crash.h b/include/asm-x86/crash.h
-new file mode 100644
-index 0000000..dfcc006
---- /dev/null
-+++ b/include/asm-x86/crash.h
-@@ -0,0 +1,75 @@
-+#ifndef _ASM_I386_CRASH_H
-+#define _ASM_I386_CRASH_H
-+
-+/*
-+ * linux/include/asm-i386/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_I386_CRASH_H */

linux-2.6-debug-always-inline-kzalloc.patch:
 slab.h |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Index: linux-2.6-debug-always-inline-kzalloc.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/linux-2.6-debug-always-inline-kzalloc.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- linux-2.6-debug-always-inline-kzalloc.patch	1 Sep 2008 17:39:18 -0000	1.1
+++ linux-2.6-debug-always-inline-kzalloc.patch	4 Jan 2010 15:25:47 -0000	1.2
@@ -1,6 +1,17 @@
---- linux-2.6.26.noarch/include/linux/slab.h~	2008-09-01 00:33:55.000000000 -0400
-+++ linux-2.6.26.noarch/include/linux/slab.h	2008-09-01 00:34:19.000000000 -0400
-@@ -272,7 +272,7 @@ static inline void *kmem_cache_zalloc(st
+From 76ec0e2e6d6edf81abc0331d5e7873ef7b2f6019 Mon Sep 17 00:00:00 2001
+From: Kyle McMartin <kyle at phobos.i.jkkm.org>
+Date: Wed, 8 Jul 2009 13:06:01 -0400
+Subject: [PATCH 6/6] fedora: linux-2.6-debug-always-inline-kzalloc.patch
+
+---
+ include/linux/slab.h |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/include/linux/slab.h b/include/linux/slab.h
+index 2da8372..d4ef74f 100644
+--- a/include/linux/slab.h
++++ b/include/linux/slab.h
+@@ -310,7 +310,7 @@ static inline void *kmem_cache_zalloc(struct kmem_cache *k, gfp_t flags)
   * @size: how many bytes of memory are required.
   * @flags: the type of memory to allocate (see kmalloc).
   */
@@ -9,3 +20,6 @@
  {
  	return kmalloc(size, flags | __GFP_ZERO);
  }
+-- 
+1.6.2.5
+

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

Index: linux-2.6-debug-nmi-timeout.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/linux-2.6-debug-nmi-timeout.patch,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- linux-2.6-debug-nmi-timeout.patch	10 Aug 2009 19:46:36 -0000	1.5
+++ linux-2.6-debug-nmi-timeout.patch	4 Jan 2010 15:25:47 -0000	1.6
@@ -1,5 +1,15 @@
+From 899dd25ae272c73407c1477ec223982d0b57a668 Mon Sep 17 00:00:00 2001
+From: Kyle McMartin <kyle at phobos.i.jkkm.org>
+Date: Wed, 8 Jul 2009 13:03:06 -0400
+Subject: [PATCH 2/6] fedora: linux-2.6-debug-nmi-timeout.patch
+
+---
+ arch/x86/kernel/apic/nmi.c |    2 +-
+ lib/Kconfig.debug          |    8 ++++++++
+ 2 files changed, 9 insertions(+), 1 deletions(-)
+
 diff --git a/arch/x86/kernel/apic/nmi.c b/arch/x86/kernel/apic/nmi.c
-index ce4fbfa..2bd9e51 100644
+index b3025b4..e82a450 100644
 --- a/arch/x86/kernel/apic/nmi.c
 +++ b/arch/x86/kernel/apic/nmi.c
 @@ -436,7 +436,7 @@ nmi_watchdog_tick(struct pt_regs *regs, unsigned reason)
@@ -12,7 +22,7 @@ index ce4fbfa..2bd9e51 100644
  			 * die_nmi will return ONLY if NOTIFY_STOP happens..
  			 */
 diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
-index 3be4b7c..ba45afd 100644
+index 12327b2..2790b4f 100644
 --- a/lib/Kconfig.debug
 +++ b/lib/Kconfig.debug
 @@ -245,6 +245,14 @@ config SCHEDSTATS
@@ -30,3 +40,6 @@ index 3be4b7c..ba45afd 100644
  config TIMER_STATS
  	bool "Collect kernel timers statistics"
  	depends on DEBUG_KERNEL && PROC_FS
+-- 
+1.6.2.5
+

linux-2.6-debug-sizeof-structs.patch:
 main.c |   13 +++++++++++++
 1 file changed, 13 insertions(+)

Index: linux-2.6-debug-sizeof-structs.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/linux-2.6-debug-sizeof-structs.patch,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- linux-2.6-debug-sizeof-structs.patch	12 Feb 2008 06:18:04 -0000	1.6
+++ linux-2.6-debug-sizeof-structs.patch	4 Jan 2010 15:25:47 -0000	1.7
@@ -1,8 +1,10 @@
---- linux-2.6/init/main.c~	2006-07-11 02:35:10.000000000 -0400
-+++ linux-2.6/init/main.c	2006-07-11 02:49:01.000000000 -0400
-@@ -350,6 +350,10 @@ static void __init setup_per_cpu_areas(v
+diff --git a/init/main.c b/init/main.c
+index 7449819..98cfaae 100644
+--- a/init/main.c
++++ b/init/main.c
+@@ -369,6 +369,10 @@ static void __init setup_nr_cpu_ids(void)
+ 	nr_cpu_ids = find_last_bit(cpumask_bits(cpu_possible_mask),NR_CPUS) + 1;
  }
- #endif /* CONFIG_HAVE_SETUP_PER_CPU_AREA */
  
 +#include <linux/ext3_fs_i.h>
 +#include <linux/skbuff.h>
@@ -11,9 +13,7 @@
  /* Called by boot processor to activate the rest. */
  static void __init smp_init(void)
  {
---- linux-2.6.20.noarch/init/main.c~	2007-02-14 11:47:41.000000000 -0500
-+++ linux-2.6.20.noarch/init/main.c	2007-02-14 11:48:39.000000000 -0500
-@@ -403,6 +403,15 @@ static void __init smp_init(void)
+@@ -391,6 +395,15 @@ static void __init smp_init(void)
  	/* Any cleanup work */
  	printk(KERN_INFO "Brought up %ld CPUs\n", (long)num_online_cpus());
  	smp_cpus_done(setup_max_cpus);

linux-2.6-debug-spinlock-taint.patch:
 spinlock_debug.c |   21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

Index: linux-2.6-debug-spinlock-taint.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/linux-2.6-debug-spinlock-taint.patch,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -p -r1.10 -r1.11
--- linux-2.6-debug-spinlock-taint.patch	14 Dec 2007 03:42:44 -0000	1.10
+++ linux-2.6-debug-spinlock-taint.patch	4 Jan 2010 15:25:47 -0000	1.11
@@ -1,3 +1,12 @@
+From 49b12b731b75e2ee406c5b33b89e1baa3fa6b336 Mon Sep 17 00:00:00 2001
+From: Kyle McMartin <kyle at phobos.i.jkkm.org>
+Date: Wed, 8 Jul 2009 13:05:32 -0400
+Subject: [PATCH 4/6] fedora: linux-2.6-debug-spinlock-taint.patch
+
+---
+ lib/spinlock_debug.c |   20 ++++++++++----------
+ 1 files changed, 10 insertions(+), 10 deletions(-)
+
 diff --git a/lib/spinlock_debug.c b/lib/spinlock_debug.c
 index 9c4b025..b7a010a 100644
 --- a/lib/spinlock_debug.c
@@ -62,4 +71,6 @@ index 9c4b025..b7a010a 100644
  			dump_stack();
  		}
  	}
+-- 
+1.6.2.5
 

linux-2.6-debug-taint-vm.patch:
 kernel/panic.c  |    4 +++-
 mm/page_alloc.c |    5 +++--
 mm/slab.c       |    8 ++++----
 mm/slub.c       |    3 +--
 4 files changed, 11 insertions(+), 9 deletions(-)

Index: linux-2.6-debug-taint-vm.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/linux-2.6-debug-taint-vm.patch,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -p -r1.24 -r1.25
--- linux-2.6-debug-taint-vm.patch	10 Aug 2009 19:46:36 -0000	1.24
+++ linux-2.6-debug-taint-vm.patch	4 Jan 2010 15:25:47 -0000	1.25
@@ -1,5 +1,17 @@
+From b04c57d9dc889462951312be2ac81ff6c702e954 Mon Sep 17 00:00:00 2001
+From: Kyle McMartin <kyle at phobos.i.jkkm.org>
+Date: Wed, 8 Jul 2009 13:05:09 -0400
+Subject: [PATCH 3/6] fedora: linux-2.6-debug-taint-vm.patch
+
+---
+ kernel/panic.c  |    4 +++-
+ mm/page_alloc.c |    5 +++--
+ mm/slab.c       |    8 ++++----
+ mm/slub.c       |    2 +-
+ 4 files changed, 11 insertions(+), 8 deletions(-)
+
 diff --git a/kernel/panic.c b/kernel/panic.c
-index 984b3ec..0b4ea72 100644
+index 984b3ec..6d1c3be 100644
 --- a/kernel/panic.c
 +++ b/kernel/panic.c
 @@ -199,6 +199,7 @@ const char *print_tainted(void)
@@ -10,20 +22,21 @@ index 984b3ec..0b4ea72 100644
  
  int test_taint(unsigned flag)
  {
-@@ -350,7 +351,7 @@ static void warn_slowpath_common(const char *file, int line, void *caller, struc
+@@ -350,7 +351,8 @@ static void warn_slowpath_common(const char *file, int line, void *caller, struc
  	const char *board;
  
  	printk(KERN_WARNING "------------[ cut here ]------------\n");
 -	printk(KERN_WARNING "WARNING: at %s:%d %pS()\n", file, line, caller);
-+	printk(KERN_WARNING "WARNING: at %s:%d %pS() (%s)\n", file, line, caller, print_tainted());
++	printk(KERN_WARNING "WARNING: at %s:%d %pS() (%s)\n",
++		file, line, caller, print_tainted());
  	board = dmi_get_system_info(DMI_PRODUCT_NAME);
  	if (board)
  		printk(KERN_WARNING "Hardware name: %s\n", board);
 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
-index 480907c..add80e2 100644
+index e0f2cdf..21dcbc4 100644
 --- a/mm/page_alloc.c
 +++ b/mm/page_alloc.c
-@@ -250,9 +250,10 @@ static void bad_page(struct page *page)
+@@ -257,9 +257,10 @@ static void bad_page(struct page *page)
  	printk(KERN_ALERT "BUG: Bad page state in process %s  pfn:%05lx\n",
  		current->comm, page_to_pfn(page));
  	printk(KERN_ALERT
@@ -37,10 +50,10 @@ index 480907c..add80e2 100644
  	dump_stack();
  out:
 diff --git a/mm/slab.c b/mm/slab.c
-index 021d69f..f25d4c3 100644
+index e74a16e..7bc287e 100644
 --- a/mm/slab.c
 +++ b/mm/slab.c
-@@ -1867,8 +1867,8 @@ static void check_poison_obj(struct kmem_cache *cachep, void *objp)
+@@ -1803,8 +1803,8 @@ static void check_poison_obj(struct kmem_cache *cachep, void *objp)
  			/* Print header */
  			if (lines == 0) {
  				printk(KERN_ERR
@@ -51,7 +64,7 @@ index 021d69f..f25d4c3 100644
  				print_objinfo(cachep, objp, 0);
  			}
  			/* Hexdump the affected line */
-@@ -2939,8 +2939,8 @@ static void check_slabp(struct kmem_cache *cachep, struct slab *slabp)
+@@ -2902,8 +2902,8 @@ static void check_slabp(struct kmem_cache *cachep, struct slab *slabp)
  	if (entries != cachep->num - slabp->inuse) {
  bad:
  		printk(KERN_ERR "slab: Internal list corruption detected in "
@@ -63,10 +76,10 @@ index 021d69f..f25d4c3 100644
  		     i < sizeof(*slabp) + cachep->num * sizeof(kmem_bufctl_t);
  		     i++) {
 diff --git a/mm/slub.c b/mm/slub.c
-index 253016d..d23af85 100644
+index 819f056..8eff0f4 100644
 --- a/mm/slub.c
 +++ b/mm/slub.c
-@@ -431,7 +431,7 @@ static void slab_bug(struct kmem_cache *s, char *fmt, ...)
+@@ -433,7 +433,7 @@ static void slab_bug(struct kmem_cache *s, char *fmt, ...)
  	va_end(args);
  	printk(KERN_ERR "========================================"
  			"=====================================\n");
@@ -75,3 +88,6 @@ index 253016d..d23af85 100644
  	printk(KERN_ERR "----------------------------------------"
  			"-------------------------------------\n\n");
  }
+-- 
+1.6.2.5
+

linux-2.6-debug-vm-would-have-oomkilled.patch:
 kernel/sysctl.c |    9 +++++++++
 mm/oom_kill.c   |    7 +++++++
 2 files changed, 16 insertions(+)

Index: linux-2.6-debug-vm-would-have-oomkilled.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/linux-2.6-debug-vm-would-have-oomkilled.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- linux-2.6-debug-vm-would-have-oomkilled.patch	7 Jan 2009 15:12:40 -0000	1.2
+++ linux-2.6-debug-vm-would-have-oomkilled.patch	4 Jan 2010 15:25:47 -0000	1.3
@@ -1,8 +1,8 @@
 diff --git a/kernel/sysctl.c b/kernel/sysctl.c
-index b2a2d68..3b132ee 100644
+index 0d949c5..8fb2bd9 100644
 --- a/kernel/sysctl.c
 +++ b/kernel/sysctl.c
-@@ -67,6 +67,7 @@ extern int sysctl_overcommit_ratio;
+@@ -72,6 +72,7 @@ extern int sysctl_overcommit_ratio;
  extern int sysctl_panic_on_oom;
  extern int sysctl_oom_kill_allocating_task;
  extern int sysctl_oom_dump_tasks;
@@ -10,7 +10,7 @@ index b2a2d68..3b132ee 100644
  extern int max_threads;
  extern int core_uses_pid;
  extern int suid_dumpable;
-@@ -861,6 +862,14 @@ static struct ctl_table vm_table[] = {
+@@ -1073,6 +1074,14 @@ static struct ctl_table vm_table[] = {
  		.proc_handler	= &proc_dointvec,
  	},
  	{
@@ -26,7 +26,7 @@ index b2a2d68..3b132ee 100644
  		.procname	= "overcommit_ratio",
  		.data		= &sysctl_overcommit_ratio,
 diff --git a/mm/oom_kill.c b/mm/oom_kill.c
-index f255eda..3335a94 100644
+index ea2147d..788fe84 100644
 --- a/mm/oom_kill.c
 +++ b/mm/oom_kill.c
 @@ -31,6 +31,7 @@
@@ -37,7 +37,7 @@ index f255eda..3335a94 100644
  static DEFINE_SPINLOCK(zone_scan_lock);
  /* #define DEBUG */
  
-@@ -321,6 +322,12 @@ static void __oom_kill_task(struct task_struct *p, int verbose)
+@@ -356,6 +357,12 @@ static void __oom_kill_task(struct task_struct *p, int verbose)
  		return;
  	}
  
@@ -50,16 +50,3 @@ index f255eda..3335a94 100644
  	if (verbose)
  		printk(KERN_ERR "Killed process %d (%s)\n",
  				task_pid_nr(p), p->comm);
-@@ -363,6 +370,12 @@ static int oom_kill_task(struct task_struct *p)
- 			return 1;
- 	} while_each_thread(g, q);
- 
-+	if (sysctl_would_have_oomkilled == 1) {
-+		printk(KERN_ERR "Would have killed process %d (%s). But continuing instead.\n",
-+				task_pid_nr(p), p->comm);
-+		return 1;
-+	}
-+
- 	__oom_kill_task(p, 1);
- 
- 	/*

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

Index: linux-2.6-defaults-pci_no_msi.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/linux-2.6-defaults-pci_no_msi.patch,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- linux-2.6-defaults-pci_no_msi.patch	25 Jul 2009 04:09:24 -0000	1.5
+++ linux-2.6-defaults-pci_no_msi.patch	4 Jan 2010 15:25:47 -0000	1.6
@@ -1,9 +1,9 @@
---- linux-2.6.29.noarch/Documentation/kernel-parameters.txt~	2009-04-20 13:36:09.000000000 -0400
-+++ linux-2.6.29.noarch/Documentation/kernel-parameters.txt	2009-04-20 13:36:33.000000000 -0400
-@@ -1723,6 +1723,9 @@ and is between 256 and 4096 characters. 
- 				root domains (aka PCI segments, in ACPI-speak).
- 		nommconf	[X86] Disable use of MMCONFIG for PCI
- 				Configuration
+--- linux-2.6.30.noarch/Documentation/kernel-parameters.txt~	2009-06-24 14:25:04.000000000 -0400
++++ linux-2.6.30.noarch/Documentation/kernel-parameters.txt	2009-06-24 14:25:32.000000000 -0400
+@@ -1811,6 +1811,9 @@ and is between 256 and 4096 characters. 
+ 		check_enable_amd_mmconf [X86] check for and enable
+ 				properly configured MMIO access to PCI
+ 				config space on AMD family 10h CPU
 +		msi		[MSI] If the PCI_MSI kernel config parameter is
 +				enabled, this kernel boot option can be used to
 +				enable the use of MSI interrupts system-wide.

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

Index: linux-2.6-execshield.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/linux-2.6-execshield.patch,v
retrieving revision 1.107
retrieving revision 1.108
diff -u -p -r1.107 -r1.108
--- linux-2.6-execshield.patch	9 Dec 2009 01:28:18 -0000	1.107
+++ linux-2.6-execshield.patch	4 Jan 2010 15:25:47 -0000	1.108
@@ -1,8 +1,8 @@
 diff --git a/arch/x86/include/asm/desc.h b/arch/x86/include/asm/desc.h
-index 5623c50..353a24e 100644
+index e8de2f6..538c2b6 100644
 --- a/arch/x86/include/asm/desc.h
 +++ b/arch/x86/include/asm/desc.h
-@@ -6,6 +6,7 @@
+@@ -5,6 +5,7 @@
  #include <asm/ldt.h>
  #include <asm/mmu.h>
  #include <linux/smp.h>
@@ -10,7 +10,7 @@ index 5623c50..353a24e 100644
  
  static inline void fill_ldt(struct desc_struct *desc,
  			    const struct user_desc *info)
-@@ -94,6 +95,9 @@ static inline int desc_empty(const void *ptr)
+@@ -93,6 +94,9 @@ static inline int desc_empty(const void *ptr)
  
  #define load_TLS(t, cpu) native_load_tls(t, cpu)
  #define set_ldt native_set_ldt
@@ -20,7 +20,7 @@ index 5623c50..353a24e 100644
  
  #define write_ldt_entry(dt, entry, desc)	\
  	native_write_ldt_entry(dt, entry, desc)
-@@ -380,6 +384,27 @@ static inline void set_system_intr_gate_ist(int n, void *addr, unsigned ist)
+@@ -392,4 +396,25 @@ static inline void set_system_intr_gate_ist(int n, void *addr, unsigned ist)
  	_set_gate(n, GATE_INTERRUPT, addr, 0x3, ist, __KERNEL_CS);
  }
  
@@ -45,9 +45,7 @@ index 5623c50..353a24e 100644
 +extern void arch_flush_exec_range(struct mm_struct *mm);
 +#endif /* CONFIG_X86_32 */
 +
- #else
- /*
-  * GET_DESC_BASE reads the descriptor base of the specified segment.
+ #endif /* _ASM_X86_DESC_H */
 diff --git a/arch/x86/include/asm/mmu.h b/arch/x86/include/asm/mmu.h
 index 80a1dee..8314c66 100644
 --- a/arch/x86/include/asm/mmu.h
@@ -73,20 +71,10 @@ index 80a1dee..8314c66 100644
  
  #ifdef CONFIG_SMP
 diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
-index 7727aa8..5d6083c 100644
+index 8aebcc4..cbbd2b0 100644
 --- a/arch/x86/include/asm/paravirt.h
 +++ b/arch/x86/include/asm/paravirt.h
-@@ -138,6 +138,9 @@ struct pv_cpu_ops {
- 	void (*store_gdt)(struct desc_ptr *);
- 	void (*store_idt)(struct desc_ptr *);
- 	void (*set_ldt)(const void *desc, unsigned entries);
-+#ifdef CONFIG_X86_32
-+	void (*load_user_cs_desc)(int cpu, struct mm_struct *mm);
-+#endif /*CONFIG_X86_32*/
- 	unsigned long (*store_tr)(void);
- 	void (*load_tls)(struct thread_struct *t, unsigned int cpu);
- #ifdef CONFIG_X86_64
-@@ -953,6 +956,12 @@ static inline void set_ldt(const void *addr, unsigned entries)
+@@ -289,6 +289,12 @@ static inline void set_ldt(const void *addr, unsigned entries)
  {
  	PVOP_VCALL2(pv_cpu_ops.set_ldt, addr, entries);
  }
@@ -99,11 +87,25 @@ index 7727aa8..5d6083c 100644
  static inline void store_gdt(struct desc_ptr *dtr)
  {
  	PVOP_VCALL1(pv_cpu_ops.store_gdt, dtr);
+diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h
+index dd0f5b3..c2727ef 100644
+--- a/arch/x86/include/asm/paravirt_types.h
++++ b/arch/x86/include/asm/paravirt_types.h
+@@ -118,6 +118,9 @@ struct pv_cpu_ops {
+ 	void (*store_gdt)(struct desc_ptr *);
+ 	void (*store_idt)(struct desc_ptr *);
+ 	void (*set_ldt)(const void *desc, unsigned entries);
++#ifdef CONFIG_X86_32
++	void (*load_user_cs_desc)(int cpu, struct mm_struct *mm);
++#endif
+ 	unsigned long (*store_tr)(void);
+ 	void (*load_tls)(struct thread_struct *t, unsigned int cpu);
+ #ifdef CONFIG_X86_64
 diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
-index 34c5237..4fc080f 100644
+index c3429e8..62cc460 100644
 --- a/arch/x86/include/asm/processor.h
 +++ b/arch/x86/include/asm/processor.h
-@@ -159,6 +159,9 @@ static inline int hlt_works(int cpu)
+@@ -161,6 +161,9 @@ static inline int hlt_works(int cpu)
  
  #define cache_line_size()	(boot_cpu_data.x86_cache_alignment)
  
@@ -114,10 +116,10 @@ index 34c5237..4fc080f 100644
  
  extern struct pt_regs *idle_regs(struct pt_regs *);
 diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
-index c4f6678..0a680c0 100644
+index cc25c2b..6ce4863 100644
 --- a/arch/x86/kernel/cpu/common.c
 +++ b/arch/x86/kernel/cpu/common.c
-@@ -789,6 +789,20 @@ static void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
+@@ -798,6 +798,20 @@ static void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
  	/* Filter out anything that depends on CPUID levels we don't have */
  	filter_cpuid_features(c, true);
  
@@ -139,10 +141,10 @@ index c4f6678..0a680c0 100644
  	if (!c->x86_model_id[0]) {
  		const char *p;
 diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
-index 8e45f44..13c0535 100644
+index 1b1739d..c2dda16 100644
 --- a/arch/x86/kernel/paravirt.c
 +++ b/arch/x86/kernel/paravirt.c
-@@ -369,6 +369,9 @@ struct pv_cpu_ops pv_cpu_ops = {
+@@ -345,6 +345,9 @@ struct pv_cpu_ops pv_cpu_ops = {
  	.read_tscp = native_read_tscp,
  	.load_tr_desc = native_load_tr_desc,
  	.set_ldt = native_set_ldt,
@@ -153,10 +155,10 @@ index 8e45f44..13c0535 100644
  	.load_idt = native_load_idt,
  	.store_gdt = native_store_gdt,
 diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
-index 76f8f84..4118f17 100644
+index 4cf7956..b2407dc 100644
 --- a/arch/x86/kernel/process_32.c
 +++ b/arch/x86/kernel/process_32.c
-@@ -301,7 +301,10 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
+@@ -296,7 +296,10 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
  void
  start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
  {
@@ -167,7 +169,7 @@ index 76f8f84..4118f17 100644
  	regs->fs		= 0;
  	set_fs(USER_DS);
  	regs->ds		= __USER_DS;
-@@ -310,6 +313,11 @@ start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
+@@ -305,6 +308,11 @@ start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
  	regs->cs		= __USER_CS;
  	regs->ip		= new_ip;
  	regs->sp		= new_sp;
@@ -179,21 +181,20 @@ index 76f8f84..4118f17 100644
  	/*
  	 * Free the old FP and other extended state
  	 */
-@@ -356,7 +364,8 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
- 	/* never put a printk in __switch_to... printk() calls wake_up*() indirectly */
+@@ -364,6 +372,9 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+ 	if (preload_fpu)
+ 		prefetch(next->xstate);
  
- 	__unlazy_fpu(prev_p);
--
 +	if (next_p->mm)
 +		load_user_cs_desc(cpu, next_p->mm);
- 
- 	/* we're going to use this soon, after a few expensive things */
- 	if (next_p->fpu_counter > 5)
-@@ -509,3 +518,41 @@ unsigned long arch_randomize_brk(struct mm_struct *mm)
- 	unsigned long range_end = mm->brk + 0x02000000;
- 	return randomize_range(mm->brk, range_end, 0) ? : mm->brk;
- }
 +
+ 	/*
+ 	 * Reload esp0.
+ 	 */
+@@ -497,3 +508,40 @@ unsigned long get_wchan(struct task_struct *p)
+ 	return 0;
+ }
+ 
 +static void modify_cs(struct mm_struct *mm, unsigned long limit)
 +{
 +	mm->context.exec_limit = limit;
@@ -232,10 +233,10 @@ index 76f8f84..4118f17 100644
 +	set_user_cs(&mm->context.user_cs, 0);
 +}
 diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
-index a1d2883..453b616 100644
+index 7e37dce..92ae538 100644
 --- a/arch/x86/kernel/traps.c
 +++ b/arch/x86/kernel/traps.c
-@@ -118,6 +118,76 @@ die_if_kernel(const char *str, struct pt_regs *regs, long err)
+@@ -115,6 +115,76 @@ die_if_kernel(const char *str, struct pt_regs *regs, long err)
  	if (!user_mode_vm(regs))
  		die(str, regs, err);
  }
@@ -312,7 +313,7 @@ index a1d2883..453b616 100644
  #endif
  
  static void __kprobes
-@@ -276,6 +346,29 @@ do_general_protection(struct pt_regs *regs, long error_code)
+@@ -273,6 +343,29 @@ do_general_protection(struct pt_regs *regs, long error_code)
  	if (!user_mode(regs))
  		goto gp_in_kernel;
  
@@ -342,7 +343,7 @@ index a1d2883..453b616 100644
  	tsk->thread.error_code = error_code;
  	tsk->thread.trap_no = 13;
  
-@@ -888,19 +981,37 @@ do_device_not_available(struct pt_regs *regs, long error_code)
+@@ -881,19 +974,37 @@ do_device_not_available(struct pt_regs *regs, long error_code)
  }
  
  #ifdef CONFIG_X86_32
@@ -390,60 +391,27 @@ index a1d2883..453b616 100644
  #endif
  
 diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
-index fd3da1d..ac54294 100644
+index 73ffd55..0cf2a7b 100644
 --- a/arch/x86/mm/init.c
 +++ b/arch/x86/mm/init.c
-@@ -163,7 +163,11 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
+@@ -149,6 +149,12 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
  	set_nx();
  	if (nx_enabled)
  		printk(KERN_INFO "NX (Execute Disable) protection: active\n");
++#ifdef CONFIG_X86_32
 +	else
- #endif
 +	if (exec_shield)
 +		printk(KERN_INFO "Using x86 segment limits to approximate "
 +			"NX protection\n");
++#endif
  
  	/* Enable PSE if available */
  	if (cpu_has_pse)
-diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
-index 749559e..ad9943c 100644
---- a/arch/x86/mm/init_32.c
-+++ b/arch/x86/mm/init_32.c
-@@ -602,7 +602,7 @@ static int disable_nx __initdata;
-  * Control non executable mappings.
-  *
-  * on      Enable
-- * off     Disable
-+ * off     Disable (disables exec-shield too)
-  */
- static int __init noexec_setup(char *str)
- {
-@@ -611,14 +611,12 @@ static int __init noexec_setup(char *str)
- 			__supported_pte_mask |= _PAGE_NX;
- 			disable_nx = 0;
- 		}
--	} else {
--		if (!strcmp(str, "off")) {
--			disable_nx = 1;
--			__supported_pte_mask &= ~_PAGE_NX;
--		} else {
--			return -EINVAL;
--		}
--	}
-+	} else if (!strcmp(str, "off")) {
-+		disable_nx = 1;
-+		__supported_pte_mask &= ~_PAGE_NX;
-+		exec_shield = 0;
-+	} else
-+		return -EINVAL;
- 
- 	return 0;
- }
 diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.c
-index 1658296..72056cf 100644
+index c8191de..7d84d01 100644
 --- a/arch/x86/mm/mmap.c
 +++ b/arch/x86/mm/mmap.c
-@@ -111,13 +111,16 @@ static unsigned long mmap_legacy_base(void)
+@@ -124,13 +124,16 @@ static unsigned long mmap_legacy_base(void)
   */
  void arch_pick_mmap_layout(struct mm_struct *mm)
  {
@@ -461,8 +429,27 @@ index 1658296..72056cf 100644
  		mm->unmap_area = arch_unmap_area_topdown;
  	}
  }
+diff --git a/arch/x86/mm/setup_nx.c b/arch/x86/mm/setup_nx.c
+index 513d8ed..c614a90 100644
+--- a/arch/x86/mm/setup_nx.c
++++ b/arch/x86/mm/setup_nx.c
+@@ -1,3 +1,4 @@
++#include <linux/sched.h>
+ #include <linux/spinlock.h>
+ #include <linux/errno.h>
+ #include <linux/init.h>
+@@ -27,6 +28,9 @@ static int __init noexec_setup(char *str)
+ 	} else if (!strncmp(str, "off", 3)) {
+ 		disable_nx = 1;
+ 		__supported_pte_mask &= ~_PAGE_NX;
++#ifdef CONFIG_X86_32
++		exec_shield = 0;
++#endif
+ 	}
+ 	return 0;
+ }
 diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
-index 821e970..ea5a4c3 100644
+index 36fe08e..3806a45 100644
 --- a/arch/x86/mm/tlb.c
 +++ b/arch/x86/mm/tlb.c
 @@ -6,6 +6,7 @@
@@ -473,7 +460,7 @@ index 821e970..ea5a4c3 100644
  #include <asm/tlbflush.h>
  #include <asm/mmu_context.h>
  #include <asm/apic.h>
-@@ -129,6 +130,12 @@ void smp_invalidate_interrupt(struct pt_regs *regs)
+@@ -130,6 +131,12 @@ void smp_invalidate_interrupt(struct pt_regs *regs)
  	union smp_flush_state *f;
  
  	cpu = smp_processor_id();
@@ -487,7 +474,7 @@ index 821e970..ea5a4c3 100644
  	 * orig_rax contains the negated interrupt vector.
  	 * Use that to determine where the sender put the data.
 diff --git a/arch/x86/vdso/vdso32-setup.c b/arch/x86/vdso/vdso32-setup.c
-index 1241f11..3f2c44c 100644
+index 58bc00f..1fdafb5 100644
 --- a/arch/x86/vdso/vdso32-setup.c
 +++ b/arch/x86/vdso/vdso32-setup.c
 @@ -331,7 +331,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
@@ -500,10 +487,10 @@ index 1241f11..3f2c44c 100644
  			ret = addr;
  			goto up_fail;
 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
-index 82cd39a..702e3a0 100644
+index 3439616..31e5c6f 100644
 --- a/arch/x86/xen/enlighten.c
 +++ b/arch/x86/xen/enlighten.c
-@@ -282,6 +282,24 @@ static void xen_set_ldt(const void *addr, unsigned entries)
+@@ -323,6 +323,24 @@ static void xen_set_ldt(const void *addr, unsigned entries)
  	xen_mc_issue(PARAVIRT_LAZY_CPU);
  }
  
@@ -527,8 +514,8 @@ index 82cd39a..702e3a0 100644
 +
  static void xen_load_gdt(const struct desc_ptr *dtr)
  {
- 	unsigned long *frames;
-@@ -792,6 +810,9 @@ static const struct pv_cpu_ops xen_cpu_ops __initdata = {
+ 	unsigned long va = dtr->address;
+@@ -949,6 +967,9 @@ static const struct pv_cpu_ops xen_cpu_ops __initdata = {
  
  	.load_tr_desc = paravirt_nop,
  	.set_ldt = xen_set_ldt,
@@ -539,7 +526,7 @@ index 82cd39a..702e3a0 100644
  	.load_idt = xen_load_idt,
  	.load_tls = xen_load_tls,
 diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
-index 40381df..f856fab 100644
+index b9b3bb5..1e55926 100644
 --- a/fs/binfmt_elf.c
 +++ b/fs/binfmt_elf.c
 @@ -73,7 +73,7 @@ static struct linux_binfmt elf_format = {
@@ -599,10 +586,10 @@ index 40381df..f856fab 100644
  			 * load_elf_interp() returns relocation
  			 * adjustment
 diff --git a/include/linux/mm.h b/include/linux/mm.h
-index bff1f0d..88c5efa 100644
+index 24c3956..88f944d 100644
 --- a/include/linux/mm.h
 +++ b/include/linux/mm.h
-@@ -1138,7 +1138,13 @@ extern int install_special_mapping(struct mm_struct *mm,
+@@ -1129,7 +1129,13 @@ extern int install_special_mapping(struct mm_struct *mm,
  				   unsigned long addr, unsigned long len,
  				   unsigned long flags, struct page **pages);
  
@@ -618,10 +605,10 @@ index bff1f0d..88c5efa 100644
  extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
  	unsigned long len, unsigned long prot,
 diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
-index 0e80e26..af904ea 100644
+index 84a524a..a81e0db 100644
 --- a/include/linux/mm_types.h
 +++ b/include/linux/mm_types.h
-@@ -198,6 +198,9 @@ struct mm_struct {
+@@ -206,6 +206,9 @@ struct mm_struct {
  	unsigned long (*get_unmapped_area) (struct file *filp,
  				unsigned long addr, unsigned long len,
  				unsigned long pgoff, unsigned long flags);
@@ -649,12 +636,12 @@ index 40fc7e6..68c2549 100644
  /*
   * GPG2 wants 64kB of mlocked memory, to make sure pass phrases
 diff --git a/include/linux/sched.h b/include/linux/sched.h
-index b94f354..aed6221 100644
+index 75e6e60..0bce489 100644
 --- a/include/linux/sched.h
 +++ b/include/linux/sched.h
-@@ -99,6 +99,9 @@ struct bio;
- struct bts_tracer;
- struct fs_struct;
+@@ -102,6 +102,9 @@ struct fs_struct;
+ struct bts_context;
+ struct perf_event_context;
  
 +extern int exec_shield;
 +extern int print_fatal_signals;
@@ -662,7 +649,7 @@ index b94f354..aed6221 100644
  /*
   * List of flags we want to share for kernel threads,
   * if only because they are not used by them anyway.
-@@ -351,6 +354,10 @@ extern int sysctl_max_map_count;
+@@ -378,6 +381,10 @@ extern int sysctl_max_map_count;
  extern unsigned long
  arch_get_unmapped_area(struct file *, unsigned long, unsigned long,
  		       unsigned long, unsigned long);
@@ -674,10 +661,10 @@ index b94f354..aed6221 100644
  arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr,
  			  unsigned long len, unsigned long pgoff,
 diff --git a/kernel/sysctl.c b/kernel/sysctl.c
-index 82350f8..d89dd29 100644
+index 0d949c5..12ca319 100644
 --- a/kernel/sysctl.c
 +++ b/kernel/sysctl.c
-@@ -86,6 +86,26 @@ extern int sysctl_nr_open_min, sysctl_nr_open_max;
+@@ -88,6 +88,26 @@ extern int sysctl_nr_open_min, sysctl_nr_open_max;
  #ifndef CONFIG_MMU
  extern int sysctl_nr_trim_pages;
  #endif
@@ -704,7 +691,7 @@ index 82350f8..d89dd29 100644
  #ifdef CONFIG_RCU_TORTURE_TEST
  extern int rcutorture_runnable;
  #endif /* #ifdef CONFIG_RCU_TORTURE_TEST */
-@@ -377,6 +397,14 @@ static struct ctl_table kern_table[] = {
+@@ -408,6 +428,14 @@ static struct ctl_table kern_table[] = {
  		.proc_handler	= &proc_dointvec,
  	},
  	{
@@ -720,18 +707,18 @@ index 82350f8..d89dd29 100644
  		.procname	= "core_uses_pid",
  		.data		= &core_uses_pid,
 diff --git a/mm/mmap.c b/mm/mmap.c
-index 4a38411..12ca810 100644
+index 73f5e4b..814b95f 100644
 --- a/mm/mmap.c
 +++ b/mm/mmap.c
-@@ -28,6 +28,7 @@
- #include <linux/mempolicy.h>
+@@ -29,6 +29,7 @@
  #include <linux/rmap.h>
  #include <linux/mmu_notifier.h>
+ #include <linux/perf_event.h>
 +#include <linux/random.h>
  
  #include <asm/uaccess.h>
  #include <asm/cacheflush.h>
-@@ -44,6 +45,18 @@
+@@ -45,6 +46,18 @@
  #define arch_rebalance_pgtables(addr, len)		(addr)
  #endif
  
@@ -750,7 +737,7 @@ index 4a38411..12ca810 100644
  static void unmap_region(struct mm_struct *mm,
  		struct vm_area_struct *vma, struct vm_area_struct *prev,
  		unsigned long start, unsigned long end);
-@@ -392,6 +405,8 @@ static inline void
+@@ -389,6 +402,8 @@ static inline void
  __vma_link_list(struct mm_struct *mm, struct vm_area_struct *vma,
  		struct vm_area_struct *prev, struct rb_node *rb_parent)
  {
@@ -759,7 +746,7 @@ index 4a38411..12ca810 100644
  	if (prev) {
  		vma->vm_next = prev->vm_next;
  		prev->vm_next = vma;
-@@ -494,6 +509,8 @@ __vma_unlink(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -491,6 +506,8 @@ __vma_unlink(struct mm_struct *mm, struct vm_area_struct *vma,
  	rb_erase(&vma->vm_rb, &mm->mm_rb);
  	if (mm->mmap_cache == vma)
  		mm->mmap_cache = prev;
@@ -768,7 +755,7 @@ index 4a38411..12ca810 100644
  }
  
  /*
-@@ -803,6 +820,8 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
+@@ -798,6 +815,8 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
  		} else					/* cases 2, 5, 7 */
  			vma_adjust(prev, prev->vm_start,
  				end, prev->vm_pgoff, NULL);
@@ -777,7 +764,7 @@ index 4a38411..12ca810 100644
  		return prev;
  	}
  
-@@ -957,7 +976,8 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
+@@ -970,7 +989,8 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
  	/* Obtain the address to map to. we verify (or select) it and ensure
  	 * that it represents a valid section of the address space.
  	 */
@@ -787,7 +774,7 @@ index 4a38411..12ca810 100644
  	if (addr & ~PAGE_MASK)
  		return addr;
  
-@@ -1440,13 +1460,17 @@ void arch_unmap_area_topdown(struct mm_struct *mm, unsigned long addr)
+@@ -1453,13 +1473,17 @@ void arch_unmap_area_topdown(struct mm_struct *mm, unsigned long addr)
  }
  
  unsigned long
@@ -808,7 +795,7 @@ index 4a38411..12ca810 100644
  	if (file && file->f_op && file->f_op->get_unmapped_area)
  		get_area = file->f_op->get_unmapped_area;
  	addr = get_area(file, addr, len, pgoff, flags);
-@@ -1460,8 +1484,76 @@ get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,
+@@ -1473,8 +1497,76 @@ get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,
  
  	return arch_rebalance_pgtables(addr, len);
  }
@@ -886,7 +873,7 @@ index 4a38411..12ca810 100644
  
  /* Look up the first VMA which satisfies  addr < vm_end,  NULL if none. */
  struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr)
-@@ -1536,6 +1628,14 @@ out:
+@@ -1549,6 +1641,14 @@ out:
  	return prev ? prev->vm_next : vma;
  }
  
@@ -901,7 +888,7 @@ index 4a38411..12ca810 100644
  /*
   * Verify that the stack growth is acceptable and
   * update accounting. This is shared with both the
-@@ -1552,7 +1652,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
+@@ -1565,7 +1665,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
  		return -ENOMEM;
  
  	/* Stack limit test */
@@ -910,7 +897,7 @@ index 4a38411..12ca810 100644
  		return -ENOMEM;
  
  	/* mlock limit tests */
-@@ -1862,10 +1962,14 @@ int split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
+@@ -1875,10 +1975,14 @@ int split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
  	if (new->vm_ops && new->vm_ops->open)
  		new->vm_ops->open(new);
  
@@ -927,8 +914,8 @@ index 4a38411..12ca810 100644
  		vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new);
  
  	return 0;
-@@ -2114,6 +2218,7 @@ void exit_mmap(struct mm_struct *mm)
- 	vm_unacct_memory(nr_accounted);
+@@ -2128,6 +2232,7 @@ void exit_mmap(struct mm_struct *mm)
+ 
  	free_pgtables(tlb, vma, FIRST_USER_ADDRESS, 0);
  	tlb_finish_mmu(tlb, 0, end);
 +	arch_flush_exec_range(mm);
@@ -936,11 +923,11 @@ index 4a38411..12ca810 100644
  	/*
  	 * Walk the list again, actually closing and freeing it,
 diff --git a/mm/mprotect.c b/mm/mprotect.c
-index 258197b..9af91a3 100644
+index 8bc969d..3c9b4fc 100644
 --- a/mm/mprotect.c
 +++ b/mm/mprotect.c
-@@ -25,9 +25,14 @@
- #include <linux/migrate.h>
+@@ -26,9 +26,14 @@
+ #include <linux/perf_event.h>
  #include <asm/uaccess.h>
  #include <asm/pgtable.h>
 +#include <asm/pgalloc.h>
@@ -954,7 +941,7 @@ index 258197b..9af91a3 100644
  #ifndef pgprot_modify
  static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)
  {
-@@ -138,7 +143,7 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
+@@ -139,7 +144,7 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
  	struct mm_struct *mm = vma->vm_mm;
  	unsigned long oldflags = vma->vm_flags;
  	long nrpages = (end - start) >> PAGE_SHIFT;
@@ -963,7 +950,7 @@ index 258197b..9af91a3 100644
  	pgoff_t pgoff;
  	int error;
  	int dirty_accountable = 0;
-@@ -203,6 +208,9 @@ success:
+@@ -204,6 +209,9 @@ success:
  		dirty_accountable = 1;
  	}
  
@@ -974,10 +961,10 @@ index 258197b..9af91a3 100644
  	if (is_vm_hugetlb_page(vma))
  		hugetlb_change_protection(vma, start, end, vma->vm_page_prot);
 diff --git a/mm/mremap.c b/mm/mremap.c
-index a39b7b9..6bebfde 100644
+index 97bff25..17a9fd7 100644
 --- a/mm/mremap.c
 +++ b/mm/mremap.c
-@@ -400,8 +400,8 @@ unsigned long do_mremap(unsigned long addr,
+@@ -414,8 +414,8 @@ unsigned long do_mremap(unsigned long addr,
  			if (vma->vm_flags & VM_MAYSHARE)
  				map_flags |= MAP_SHARED;
  

linux-2.6-makefile-after_link.patch:
 Makefile                            |    4 ++++
 arch/powerpc/kernel/vdso32/Makefile |    3 ++-
 arch/powerpc/kernel/vdso64/Makefile |    3 ++-
 arch/x86/vdso/Makefile              |    3 ++-
 4 files changed, 10 insertions(+), 3 deletions(-)

Index: linux-2.6-makefile-after_link.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/linux-2.6-makefile-after_link.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- linux-2.6-makefile-after_link.patch	7 Oct 2008 21:58:20 -0000	1.1
+++ linux-2.6-makefile-after_link.patch	4 Jan 2010 15:25:48 -0000	1.2
@@ -1,24 +1,8 @@
-From f072f7db2194c8255c003d985b61ad2f97ebbee0 Mon Sep 17 00:00:00 2001
-From: Roland McGrath <roland at redhat.com>
-Date: Mon, 6 Oct 2008 23:03:03 -0700
-Subject: [PATCH] kbuild: AFTER_LINK
-
-If the make variable AFTER_LINK is set, it is a command line to run
-after each final link.  This includes vmlinux itself and vDSO images.
-
-Signed-off-by: Roland McGrath <roland at redhat.com>
----
- Makefile                            |    4 ++++
- arch/powerpc/kernel/vdso32/Makefile |    3 ++-
- arch/powerpc/kernel/vdso64/Makefile |    3 ++-
- arch/x86/vdso/Makefile              |    3 ++-
- 4 files changed, 10 insertions(+), 3 deletions(-)
-
 diff --git a/Makefile b/Makefile
-index ce9eceb..b27b1b7 100644
+index f908acc..960ff6f 100644
 --- a/Makefile
 +++ b/Makefile
-@@ -679,6 +679,10 @@ quiet_cmd_vmlinux__ ?= LD      $@
+@@ -746,6 +746,10 @@ quiet_cmd_vmlinux__ ?= LD      $@
        --start-group $(vmlinux-main) --end-group                  \
        $(filter-out $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o FORCE ,$^)
  
@@ -30,10 +14,10 @@ index ce9eceb..b27b1b7 100644
  quiet_cmd_vmlinux_version = GEN     .version
        cmd_vmlinux_version = set -e;                     \
 diff --git a/arch/powerpc/kernel/vdso32/Makefile b/arch/powerpc/kernel/vdso32/Makefile
-index c3d57bd..c9519c5 100644
+index 51ead52..ad21273 100644
 --- a/arch/powerpc/kernel/vdso32/Makefile
 +++ b/arch/powerpc/kernel/vdso32/Makefile
-@@ -40,7 +40,8 @@ $(obj-vdso32): %.o: %.S
+@@ -41,7 +41,8 @@ $(obj-vdso32): %.o: %.S
  
  # actual build commands
  quiet_cmd_vdso32ld = VDSO32L $@
@@ -44,10 +28,10 @@ index c3d57bd..c9519c5 100644
        cmd_vdso32as = $(CROSS32CC) $(a_flags) -c -o $@ $<
  
 diff --git a/arch/powerpc/kernel/vdso64/Makefile b/arch/powerpc/kernel/vdso64/Makefile
-index fa7f1b8..712fe1d 100644
+index 79da65d..f11c21b 100644
 --- a/arch/powerpc/kernel/vdso64/Makefile
 +++ b/arch/powerpc/kernel/vdso64/Makefile
-@@ -34,7 +34,8 @@ $(obj-vdso64): %.o: %.S
+@@ -36,7 +36,8 @@ $(obj-vdso64): %.o: %.S
  
  # actual build commands
  quiet_cmd_vdso64ld = VDSO64L $@
@@ -58,7 +42,7 @@ index fa7f1b8..712fe1d 100644
        cmd_vdso64as = $(CC) $(a_flags) -c -o $@ $<
  
 diff --git a/arch/x86/vdso/Makefile b/arch/x86/vdso/Makefile
-index 4d6ef0a..5203ae9 100644
+index 6b4ffed..cbc3d05 100644
 --- a/arch/x86/vdso/Makefile
 +++ b/arch/x86/vdso/Makefile
 @@ -120,7 +120,8 @@ $(obj)/vdso32-syms.lds: $(vdso32.so-y:%=$(obj)/vdso32-%-syms.lds) FORCE
@@ -69,8 +53,5 @@ index 4d6ef0a..5203ae9 100644
 +		       -Wl,-T,$(filter %.lds,$^) $(filter %.o,$^) \
 +		 $(if $(AFTER_LINK),; $(AFTER_LINK))
  
- VDSO_LDFLAGS = -fPIC -shared $(call ld-option, -Wl$(comma)--hash-style=sysv)
- 
--- 
-1.5.5.1
-
+ VDSO_LDFLAGS = -fPIC -shared $(call cc-ldoption, -Wl$(comma)--hash-style=sysv)
+ GCOV_PROFILE := n

linux-2.6-selinux-mprotect-checks.patch:
 hooks.c |    4 ----
 1 file changed, 4 deletions(-)

Index: linux-2.6-selinux-mprotect-checks.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/linux-2.6-selinux-mprotect-checks.patch,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -p -r1.9 -r1.10
--- linux-2.6-selinux-mprotect-checks.patch	10 Aug 2009 19:53:18 -0000	1.9
+++ linux-2.6-selinux-mprotect-checks.patch	4 Jan 2010 15:25:48 -0000	1.10
@@ -5,25 +5,37 @@ ie, Fedora has a new enough toolchain, a
 the ifdefs.  Other distros don't/haven't, and this patch would break them
 if pushed upstream.
 
-diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
-index 2fcad7c..012c753 100644
---- a/security/selinux/hooks.c
-+++ b/security/selinux/hooks.c
-@@ -2999,7 +2999,7 @@ static int file_map_prot_check(struct file *file, unsigned long prot, int shared
+--- linux-2.6.26.noarch/security/selinux/hooks.c~	2008-09-25 14:11:17.000000000 -0400
++++ linux-2.6.26.noarch/security/selinux/hooks.c	2008-09-25 14:12:17.000000000 -0400
+@@ -3018,7 +3018,6 @@ static int file_map_prot_check(struct fi
  	const struct cred *cred = current_cred();
  	int rc = 0;
  
 -#ifndef CONFIG_PPC32
-+#ifndef CONFIG_SPARC
  	if ((prot & PROT_EXEC) && (!file || (!shared && (prot & PROT_WRITE)))) {
  		/*
  		 * We are making executable an anonymous mapping or a
-@@ -3059,7 +3059,7 @@ static int selinux_file_mprotect(struct vm_area_struct *vma,
+@@ -3029,7 +3028,6 @@ static int file_map_prot_check(struct fi
+ 		if (rc)
+ 			goto error;
+ 	}
+-#endif
+ 
+ 	if (file) {
+ 		/* read access is always possible with a mapping */
+@@ -3024,7 +3022,6 @@ static int selinux_file_mprotect(struct 
  	if (selinux_checkreqprot)
  		prot = reqprot;
  
 -#ifndef CONFIG_PPC32
-+#ifndef CONFIG_SPARC
  	if ((prot & PROT_EXEC) && !(vma->vm_flags & VM_EXEC)) {
- 		int rc = 0;
+ 		rc = 0;
  		if (vma->vm_start >= vma->vm_mm->start_brk &&
+@@ -3049,7 +3046,6 @@ static int selinux_file_mprotect(struct 
+ 		if (rc)
+ 			return rc;
+ 	}
+-#endif
+ 
+ 	return file_map_prot_check(vma->vm_file, prot, vma->vm_flags&VM_SHARED);
+ }

linux-2.6-serial-460800.patch:
 8250.c |   29 +++++++++++++++++++++++++++--
 1 file changed, 27 insertions(+), 2 deletions(-)

Index: linux-2.6-serial-460800.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/linux-2.6-serial-460800.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- linux-2.6-serial-460800.patch	28 May 2007 01:22:43 -0000	1.2
+++ linux-2.6-serial-460800.patch	4 Jan 2010 15:25:48 -0000	1.3
@@ -1,9 +1,7 @@
-http://marc.theaimsgroup.com/?l=linux-kernel&m=112687270832687&w=2
-https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=126403
-http://lkml.org/lkml/2006/8/2/208
-
---- linux-2.6.13-org/drivers/serial/8250.c	2005-08-29 01:41:01.000000000 +0200
-+++ linux-2.6.13/drivers/serial/8250.c	2005-09-16 12:18:14.000000000 +0200
+diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
+index 2209620..659c1bb 100644
+--- a/drivers/serial/8250.c
++++ b/drivers/serial/8250.c
 @@ -7,6 +7,9 @@
   *
   *  Copyright (C) 2001 Russell King.
@@ -14,7 +12,7 @@ http://lkml.org/lkml/2006/8/2/208
   * 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
-@@ -1652,6 +1655,14 @@
+@@ -2227,6 +2230,14 @@ static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int
  	else if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
  		 baud == (port->uartclk/8))
  		quot = 0x8002;
@@ -29,7 +27,7 @@ http://lkml.org/lkml/2006/8/2/208
  	else
  		quot = uart_get_divisor(port, baud);
  
-@@ -1665,7 +1676,7 @@
+@@ -2240,7 +2251,7 @@ serial8250_set_termios(struct uart_port *port, struct ktermios *termios,
  	struct uart_8250_port *up = (struct uart_8250_port *)port;
  	unsigned char cval, fcr = 0;
  	unsigned long flags;
@@ -38,21 +36,22 @@ http://lkml.org/lkml/2006/8/2/208
  
  	switch (termios->c_cflag & CSIZE) {
  	case CS5:
-@@ -2034,7 +2034,8 @@ serial8250_set_termios(struct uart_port 
+@@ -2272,9 +2283,10 @@ serial8250_set_termios(struct uart_port *port, struct ktermios *termios,
  	/*
  	 * Ask the core to calculate the divisor for us.
  	 */
--	baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
 +	max_baud = (up->port.type == PORT_16C950 ? port->uartclk/4 : port->uartclk/16);
-+	baud = uart_get_baud_rate(port, termios, old, 0, max_baud);
+ 	baud = uart_get_baud_rate(port, termios, old,
+ 				  port->uartclk / 16 / 0xffff,
+-				  port->uartclk / 16);
++				  max_baud);
  	quot = serial8250_get_divisor(port, baud);
  
  	/*
-@@ -1733,6 +1745,19 @@
- 	 */
+@@ -2311,6 +2323,19 @@ serial8250_set_termios(struct uart_port *port, struct ktermios *termios,
  	spin_lock_irqsave(&up->port.lock, flags);
  
-+	/*
+ 	/*
 +	 * 16C950 supports additional prescaler ratios between 1:16 and 1:4
 +	 * thus increasing max baud rate to uartclk/4.
 +	 */
@@ -65,7 +64,7 @@ http://lkml.org/lkml/2006/8/2/208
 +			serial_icr_write(up, UART_TCR, 0);
 +	}
 +
- 	/*
++	/*
  	 * Update the per-port timeout.
  	 */
-
+ 	uart_update_timeout(port, termios->c_cflag, baud);

linux-2.6-silence-acpi-blacklist.patch:
 blacklist.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Index: linux-2.6-silence-acpi-blacklist.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/linux-2.6-silence-acpi-blacklist.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- linux-2.6-silence-acpi-blacklist.patch	12 Aug 2008 18:24:18 -0000	1.1
+++ linux-2.6-silence-acpi-blacklist.patch	4 Jan 2010 15:25:48 -0000	1.2
@@ -2,9 +2,9 @@ diff -up linux-2.6.26.noarch/drivers/acp
 --- linux-2.6.26.noarch/drivers/acpi/blacklist.c.jx	2008-07-13 17:51:29.000000000 -0400
 +++ linux-2.6.26.noarch/drivers/acpi/blacklist.c	2008-08-12 14:21:39.000000000 -0400
 @@ -81,18 +81,18 @@ static int __init blacklist_by_year(void
- 	int year = dmi_get_year(DMI_BIOS_DATE);
+ 
  	/* Doesn't exist? Likely an old system */
- 	if (year == -1) {
+ 	if (!dmi_get_date(DMI_BIOS_DATE, &year, NULL, NULL)) {
 -		printk(KERN_ERR PREFIX "no DMI BIOS year, "
 +		printk(KERN_INFO PREFIX "no DMI BIOS year, "
  			"acpi=force is required to enable ACPI\n" );

linux-2.6-tracehook.patch:
 arch/powerpc/include/asm/ptrace.h |    2 +
 arch/powerpc/kernel/traps.c       |    9 ++++++
 arch/x86/include/asm/ptrace.h     |    2 +
 arch/x86/kernel/ptrace.c          |   51 ++++++++++++++++++++------------------
 include/linux/ptrace.h            |   24 +++++++++++------
 include/linux/sched.h             |    1 
 include/linux/tracehook.h         |   15 ++++++++---
 kernel/ptrace.c                   |    2 -
 kernel/signal.c                   |   13 ++++-----
 9 files changed, 76 insertions(+), 43 deletions(-)

Index: linux-2.6-tracehook.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/linux-2.6-tracehook.patch,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -p -r1.11 -r1.12
--- linux-2.6-tracehook.patch	10 Aug 2009 20:49:41 -0000	1.11
+++ linux-2.6-tracehook.patch	4 Jan 2010 15:25:49 -0000	1.12
@@ -1,190 +1,336 @@
-signals: tracehook_notify_jctl change
+From: Oleg Nesterov <oleg at redhat.com>
 
-This changes tracehook_notify_jctl() so it's called with the siglock held,
-and changes its argument and return value definition.  These clean-ups make
-it a better fit for what new tracing hooks need to check.
+[PATCH] signals: check ->group_stop_count after tracehook_get_signal()
 
-Tracing needs the siglock here, held from the time TASK_STOPPED was set,
-to avoid potential SIGCONT races if it wants to allow any blocking in its
-tracing hooks.
+Move the call to do_signal_stop() down, after tracehook call.
+This makes ->group_stop_count condition visible to tracers before
+do_signal_stop() will participate in this group-stop.
 
-This also folds the finish_stop() function into its caller do_signal_stop().
-The function is short, called only once and only unconditionally.  It aids
-readability to fold it in.
+Currently the patch has no effect, tracehook_get_signal() always
+returns 0.
 
+Signed-off-by: Oleg Nesterov <oleg at redhat.com>
 Signed-off-by: Roland McGrath <roland at redhat.com>
 ---
-diff --git a/include/linux/tracehook.h b/include/linux/tracehook.h
-index eb96603..6a168b9 100644
---- a/include/linux/tracehook.h
-+++ b/include/linux/tracehook.h
-@@ -1,7 +1,7 @@
- /*
-  * Tracing hooks
-  *
-- * Copyright (C) 2008 Red Hat, Inc.  All rights reserved.
-+ * Copyright (C) 2008-2009 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
-@@ -463,22 +463,29 @@ static inline int tracehook_get_signal(struct task_struct *task,
+ arch/powerpc/include/asm/ptrace.h |    2 +
+ arch/powerpc/kernel/traps.c       |    9 ++++++
+ arch/x86/include/asm/ptrace.h     |    2 +
+ arch/x86/kernel/ptrace.c          |   51 ++++++++++++++++++++----------------
+ include/linux/ptrace.h            |   24 +++++++++++------
+ include/linux/sched.h             |    1 +
+ include/linux/tracehook.h         |   15 ++++++++---
+ kernel/ptrace.c                   |    2 +-
+ kernel/signal.c                   |   13 ++++-----
+ 9 files changed, 76 insertions(+), 43 deletions(-)
+
+diff --git a/arch/powerpc/include/asm/ptrace.h b/arch/powerpc/include/asm/ptrace.h
+index 8c34149..cbd759e 100644  
+--- a/arch/powerpc/include/asm/ptrace.h
++++ b/arch/powerpc/include/asm/ptrace.h
+@@ -140,6 +140,8 @@ extern void user_enable_single_step(stru
+ extern void user_enable_block_step(struct task_struct *);
+ extern void user_disable_single_step(struct task_struct *);
  
- /**
-  * tracehook_notify_jctl - report about job control stop/continue
-- * @notify:		nonzero if this is the last thread in the group to stop
-+ * @notify:		zero, %CLD_STOPPED or %CLD_CONTINUED
-  * @why:		%CLD_STOPPED or %CLD_CONTINUED
-  *
-  * This is called when we might call do_notify_parent_cldstop().
-- * It's called when about to stop for job control; we are already in
-- * %TASK_STOPPED state, about to call schedule().  It's also called when
-- * a delayed %CLD_STOPPED or %CLD_CONTINUED report is ready to be made.
-  *
-- * Return nonzero to generate a %SIGCHLD with @why, which is
-- * normal if @notify is nonzero.
-+ * @notify is zero if we would not ordinarily send a %SIGCHLD,
-+ * or is the %CLD_STOPPED or %CLD_CONTINUED .si_code for %SIGCHLD.
-  *
-- * Called with no locks held.
-+ * @why is %CLD_STOPPED when about to stop for job control;
-+ * we are already in %TASK_STOPPED state, about to call schedule().
-+ * It might also be that we have just exited (check %PF_EXITING),
-+ * but need to report that a group-wide stop is complete.
-+ *
-+ * @why is %CLD_CONTINUED when waking up after job control stop and
-+ * ready to make a delayed @notify report.
-+ *
-+ * Return the %CLD_* value for %SIGCHLD, or zero to generate no signal.
-+ *
-+ * Called with the siglock held.
-  */
- static inline int tracehook_notify_jctl(int notify, int why)
++#define ARCH_HAS_USER_SINGLE_STEP_INFO
++
+ #endif /* __ASSEMBLY__ */
+ 
+ #endif /* __KERNEL__ */
+diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
+index 6f0ae1a..83b57ac 100644  
+--- a/arch/powerpc/kernel/traps.c
++++ b/arch/powerpc/kernel/traps.c
+@@ -174,6 +174,15 @@ int die(const char *str, struct pt_regs 
+ 	return 0;
+ }
+ 
++void user_single_step_siginfo(struct task_struct *tsk,
++				struct pt_regs *regs, siginfo_t *info)
++{
++	memset(info, 0, sizeof(*info));
++	info->si_signo = SIGTRAP;
++	info->si_code = TRAP_TRACE;
++	info->si_addr = (void __user *)regs->nip;
++}
++
+ void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr)
  {
--	return notify || (current->ptrace & PT_PTRACED);
-+	return notify ?: (current->ptrace & PT_PTRACED) ? why : 0;
+ 	siginfo_t info;
+diff --git a/arch/x86/include/asm/ptrace.h b/arch/x86/include/asm/ptrace.h
+index 0f0d908..7a88a82 100644  
+--- a/arch/x86/include/asm/ptrace.h
++++ b/arch/x86/include/asm/ptrace.h
+@@ -230,6 +230,8 @@ extern void user_enable_block_step(struc
+ #define arch_has_block_step()	(boot_cpu_data.x86 >= 6)
+ #endif
+ 
++#define ARCH_HAS_USER_SINGLE_STEP_INFO
++
+ struct user_desc;
+ extern int do_get_thread_area(struct task_struct *p, int idx,
+ 			      struct user_desc __user *info);
+diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c
+index 7b058a2..ea35dee 100644  
+--- a/arch/x86/kernel/ptrace.c
++++ b/arch/x86/kernel/ptrace.c
+@@ -1437,21 +1437,33 @@ const struct user_regset_view *task_user
+ #endif
  }
  
- #define DEATH_REAP			-1
-diff --git a/kernel/signal.c b/kernel/signal.c
-index d803473..424eff2 100644
---- a/kernel/signal.c
-+++ b/kernel/signal.c
-@@ -702,7 +702,7 @@ static int prepare_signal(int sig, struct task_struct *p, int from_ancestor_ns)
+-void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs,
+-					 int error_code, int si_code)
++static void fill_sigtrap_info(struct task_struct *tsk,
++				struct pt_regs *regs,
++				int error_code, int si_code,
++				struct siginfo *info)
+ {
+-	struct siginfo info;
+-
+ 	tsk->thread.trap_no = 1;
+ 	tsk->thread.error_code = error_code;
  
- 		if (why) {
- 			/*
--			 * The first thread which returns from finish_stop()
-+			 * The first thread which returns from do_signal_stop()
- 			 * will take ->siglock, notice SIGNAL_CLD_MASK, and
- 			 * notify its parent. See get_signal_to_deliver().
- 			 */
-@@ -1665,29 +1665,6 @@ void ptrace_notify(int exit_code)
- 	spin_unlock_irq(&current->sighand->siglock);
+-	memset(&info, 0, sizeof(info));
+-	info.si_signo = SIGTRAP;
+-	info.si_code = si_code;
++	memset(info, 0, sizeof(*info));
++	info->si_signo = SIGTRAP;
++	info->si_code = si_code;
++	info->si_addr = user_mode_vm(regs) ? (void __user *)regs->ip : NULL;
++}
+ 
+-	/* User-mode ip? */
+-	info.si_addr = user_mode_vm(regs) ? (void __user *) regs->ip : NULL;
++void user_single_step_siginfo(struct task_struct *tsk,
++				struct pt_regs *regs,
++				struct siginfo *info)
++{
++	fill_sigtrap_info(tsk, regs, 0, TRAP_BRKPT, info);
++}
++
++void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs,
++					 int error_code, int si_code)
++{
++	struct siginfo info;
+ 
++	fill_sigtrap_info(tsk, regs, error_code, si_code, &info);
+ 	/* Send us the fake SIGTRAP */
+ 	force_sig_info(SIGTRAP, &info, tsk);
  }
+@@ -1516,29 +1528,22 @@ asmregparm long syscall_trace_enter(stru
  
--static void
--finish_stop(int stop_count)
--{
--	/*
--	 * If there are no other threads in the group, or if there is
--	 * a group stop in progress and we are the last to stop,
--	 * report to the parent.  When ptraced, every thread reports itself.
+ asmregparm void syscall_trace_leave(struct pt_regs *regs)
+ {
++	bool step;
++
+ 	if (unlikely(current->audit_context))
+ 		audit_syscall_exit(AUDITSC_RESULT(regs->ax), regs->ax);
+ 
+ 	if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
+ 		trace_sys_exit(regs, regs->ax);
+ 
+-	if (test_thread_flag(TIF_SYSCALL_TRACE))
+-		tracehook_report_syscall_exit(regs, 0);
+-
+ 	/*
+ 	 * If TIF_SYSCALL_EMU is set, we only get here because of
+ 	 * TIF_SINGLESTEP (i.e. this is PTRACE_SYSEMU_SINGLESTEP).
+ 	 * We already reported this syscall instruction in
+-	 * syscall_trace_enter(), so don't do any more now.
 -	 */
--	if (tracehook_notify_jctl(stop_count == 0, CLD_STOPPED)) {
--		read_lock(&tasklist_lock);
--		do_notify_parent_cldstop(current, CLD_STOPPED);
--		read_unlock(&tasklist_lock);
--	}
+-	if (unlikely(test_thread_flag(TIF_SYSCALL_EMU)))
+-		return;
 -
--	do {
--		schedule();
--	} while (try_to_freeze());
 -	/*
--	 * Now we don't run again until continued.
--	 */
--	current->exit_code = 0;
+-	 * If we are single-stepping, synthesize a trap to follow the
+-	 * system call instruction.
++	 * syscall_trace_enter().
+ 	 */
+-	if (test_thread_flag(TIF_SINGLESTEP) &&
+-	    tracehook_consider_fatal_signal(current, SIGTRAP))
+-		send_sigtrap(current, regs, 0, TRAP_BRKPT);
++	step = unlikely(test_thread_flag(TIF_SINGLESTEP)) &&
++			!test_thread_flag(TIF_SYSCALL_EMU);
++	if (step || test_thread_flag(TIF_SYSCALL_TRACE))
++		tracehook_report_syscall_exit(regs, step);
+ }
+diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h
+index 7456d7d..4802e2a 100644  
+--- a/include/linux/ptrace.h
++++ b/include/linux/ptrace.h
+@@ -85,6 +85,7 @@ extern int ptrace_traceme(void);
+ extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len);
+ extern int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len);
+ extern int ptrace_attach(struct task_struct *tsk);
++extern bool __ptrace_detach(struct task_struct *tracer, struct task_struct *tracee);
+ extern int ptrace_detach(struct task_struct *, unsigned int);
+ extern void ptrace_disable(struct task_struct *);
+ extern int ptrace_check_attach(struct task_struct *task, int kill);
+@@ -105,12 +106,7 @@ static inline int ptrace_reparented(stru
+ {
+ 	return child->real_parent != child->parent;
+ }
+-static inline void ptrace_link(struct task_struct *child,
+-			       struct task_struct *new_parent)
+-{
+-	if (unlikely(child->ptrace))
+-		__ptrace_link(child, new_parent);
 -}
--
- /*
-  * This performs the stopping for SIGSTOP and other stop signals.
-  * We have to stop all threads in the thread group.
-@@ -1698,6 +1675,7 @@ static int do_signal_stop(int signr)
- {
- 	struct signal_struct *sig = current->signal;
- 	int stop_count;
-+	int notify;
++
+ static inline void ptrace_unlink(struct task_struct *child)
+ {
+ 	if (unlikely(child->ptrace))
+@@ -169,9 +165,9 @@ static inline void ptrace_init_task(stru
+ 	INIT_LIST_HEAD(&child->ptraced);
+ 	child->parent = child->real_parent;
+ 	child->ptrace = 0;
+-	if (unlikely(ptrace)) {
++	if (unlikely(ptrace) && (current->ptrace & PT_PTRACED)) {
+ 		child->ptrace = current->ptrace;
+-		ptrace_link(child, current->parent);
++		__ptrace_link(child, current->parent);
+ 	}
+ }
  
- 	if (sig->group_stop_count > 0) {
- 		/*
-@@ -1737,8 +1715,30 @@ static int do_signal_stop(int signr)
- 	current->exit_code = sig->group_exit_code;
- 	__set_current_state(TASK_STOPPED);
- 
-+	/*
-+	 * If there are no other threads in the group, or if there is
-+	 * a group stop in progress and we are the last to stop,
-+	 * report to the parent.  When ptraced, every thread reports itself.
-+	 */
-+	notify = tracehook_notify_jctl(stop_count == 0 ? CLD_STOPPED : 0,
-+				       CLD_STOPPED);
-+
- 	spin_unlock_irq(&current->sighand->siglock);
--	finish_stop(stop_count);
-+
-+	if (notify) {
-+		read_lock(&tasklist_lock);
-+		do_notify_parent_cldstop(current, notify);
-+		read_unlock(&tasklist_lock);
+@@ -278,6 +274,18 @@ static inline void user_enable_block_ste
+ }
+ #endif	/* arch_has_block_step */
+ 
++#ifdef ARCH_HAS_USER_SINGLE_STEP_INFO
++extern void user_single_step_siginfo(struct task_struct *tsk,
++				struct pt_regs *regs, siginfo_t *info);
++#else
++static inline void user_single_step_siginfo(struct task_struct *tsk,
++				struct pt_regs *regs, siginfo_t *info)
++{
++	memset(info, 0, sizeof(*info));
++	info->si_signo = SIGTRAP;
++}
++#endif
++
+ #ifndef arch_ptrace_stop_needed
+ /**
+  * arch_ptrace_stop_needed - Decide whether arch_ptrace_stop() should be called
+diff --git a/include/linux/sched.h b/include/linux/sched.h
+index 75e6e60..6c8928b 100644  
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -2060,6 +2060,7 @@ extern int kill_pgrp(struct pid *pid, in
+ extern int kill_pid(struct pid *pid, int sig, int priv);
+ extern int kill_proc_info(int, struct siginfo *, pid_t);
+ extern int do_notify_parent(struct task_struct *, int);
++extern void do_notify_parent_cldstop(struct task_struct *, int);
+ extern void __wake_up_parent(struct task_struct *p, struct task_struct *parent);
+ extern void force_sig(int, struct task_struct *);
+ extern void force_sig_specific(int, struct task_struct *);
+diff --git a/include/linux/tracehook.h b/include/linux/tracehook.h
+index 1eb44a9..c78b2f4 100644  
+--- a/include/linux/tracehook.h
++++ b/include/linux/tracehook.h
+@@ -134,6 +134,13 @@ static inline __must_check int tracehook
+  */
+ static inline void tracehook_report_syscall_exit(struct pt_regs *regs, int step)
+ {
++	if (step && (task_ptrace(current) & PT_PTRACED)) {
++		siginfo_t info;
++		user_single_step_siginfo(current, regs, &info);
++		force_sig_info(SIGTRAP, &info, current);
++		return;
 +	}
 +
-+	do {
-+		schedule();
-+	} while (try_to_freeze());
-+	/*
-+	 * Now we don't run again until continued.
-+	 */
-+	current->exit_code = 0;
-+
- 	return 1;
- }
- 
-@@ -1807,14 +1807,15 @@ relock:
- 		int why = (signal->flags & SIGNAL_STOP_CONTINUED)
- 				? CLD_CONTINUED : CLD_STOPPED;
- 		signal->flags &= ~SIGNAL_CLD_MASK;
--		spin_unlock_irq(&sighand->siglock);
+ 	ptrace_report_syscall(regs);
+ }
  
--		if (unlikely(!tracehook_notify_jctl(1, why)))
--			goto relock;
-+		why = tracehook_notify_jctl(why, CLD_CONTINUED);
-+		spin_unlock_irq(&sighand->siglock);
+@@ -149,7 +156,7 @@ static inline int tracehook_unsafe_exec(
+ {
+ 	int unsafe = 0;
+ 	int ptrace = task_ptrace(task);
+-	if (ptrace & PT_PTRACED) {
++	if (ptrace) {
+ 		if (ptrace & PT_PTRACE_CAP)
+ 			unsafe |= LSM_UNSAFE_PTRACE_CAP;
+ 		else
+@@ -171,7 +178,7 @@ static inline int tracehook_unsafe_exec(
+  */
+ static inline struct task_struct *tracehook_tracer_task(struct task_struct *tsk)
+ {
+-	if (task_ptrace(tsk) & PT_PTRACED)
++	if (task_ptrace(tsk))
+ 		return rcu_dereference(tsk->parent);
+ 	return NULL;
+ }
+@@ -379,7 +386,7 @@ static inline void tracehook_signal_hand
+ 					    const struct k_sigaction *ka,
+ 					    struct pt_regs *regs, int stepping)
+ {
+-	if (stepping)
++	if (stepping && (task_ptrace(current) & PT_PTRACED))
+ 		ptrace_notify(SIGTRAP);
+ }
  
--		read_lock(&tasklist_lock);
--		do_notify_parent_cldstop(current->group_leader, why);
--		read_unlock(&tasklist_lock);
-+		if (why) {
-+			read_lock(&tasklist_lock);
-+			do_notify_parent_cldstop(current->group_leader, why);
-+			read_unlock(&tasklist_lock);
-+		}
- 		goto relock;
- 	}
+@@ -485,7 +492,7 @@ static inline int tracehook_get_signal(s
+  */
+ static inline int tracehook_notify_jctl(int notify, int why)
+ {
+-	return notify ?: (current->ptrace & PT_PTRACED) ? why : 0;
++	return notify ?: task_ptrace(current) ? why : 0;
+ }
  
-@@ -1979,14 +1980,14 @@ void exit_signals(struct task_struct *tsk)
- 	if (unlikely(tsk->signal->group_stop_count) &&
- 			!--tsk->signal->group_stop_count) {
- 		tsk->signal->flags = SIGNAL_STOP_STOPPED;
--		group_stop = 1;
-+		group_stop = tracehook_notify_jctl(CLD_STOPPED, CLD_STOPPED);
- 	}
- out:
- 	spin_unlock_irq(&tsk->sighand->siglock);
+ /**
+diff --git a/kernel/ptrace.c b/kernel/ptrace.c
+index 23bd09c..b7c1d32 100644  
+--- a/kernel/ptrace.c
++++ b/kernel/ptrace.c
+@@ -271,7 +271,7 @@ static int ignoring_children(struct sigh
+  * reap it now, in that case we must also wake up sub-threads sleeping in
+  * do_wait().
+  */
+-static bool __ptrace_detach(struct task_struct *tracer, struct task_struct *p)
++bool __ptrace_detach(struct task_struct *tracer, struct task_struct *p)
+ {
+ 	__ptrace_unlink(p);
  
--	if (unlikely(group_stop) && tracehook_notify_jctl(1, CLD_STOPPED)) {
-+	if (unlikely(group_stop)) {
- 		read_lock(&tasklist_lock);
--		do_notify_parent_cldstop(tsk, CLD_STOPPED);
-+		do_notify_parent_cldstop(tsk, group_stop);
- 		read_unlock(&tasklist_lock);
- 	}
+diff --git a/kernel/signal.c b/kernel/signal.c
+index 6705320..9908335 100644  
+--- a/kernel/signal.c
++++ b/kernel/signal.c
+@@ -1461,7 +1461,7 @@ int do_notify_parent(struct task_struct 
+ 	return ret;
  }
+ 
+-static void do_notify_parent_cldstop(struct task_struct *tsk, int why)
++void do_notify_parent_cldstop(struct task_struct *tsk, int why)
+ {
+ 	struct siginfo info;
+ 	unsigned long flags;
+@@ -1731,7 +1731,7 @@ static int do_signal_stop(int signr)
+ static int ptrace_signal(int signr, siginfo_t *info,
+ 			 struct pt_regs *regs, void *cookie)
+ {
+-	if (!task_ptrace(current))
++	if (!(task_ptrace(current) & PT_PTRACED))
+ 		return signr;
+ 
+ 	ptrace_signal_deliver(regs, cookie);
+@@ -1807,11 +1807,6 @@ relock:
+ 
+ 	for (;;) {
+ 		struct k_sigaction *ka;
+-
+-		if (unlikely(signal->group_stop_count > 0) &&
+-		    do_signal_stop(0))
+-			goto relock;
+-
+ 		/*
+ 		 * Tracing can induce an artifical signal and choose sigaction.
+ 		 * The return value in @signr determines the default action,
+@@ -1823,6 +1818,10 @@ relock:
+ 		if (unlikely(signr != 0))
+ 			ka = return_ka;
+ 		else {
++			if (unlikely(signal->group_stop_count > 0) &&
++			    do_signal_stop(0))
++				goto relock;
++
+ 			signr = dequeue_signal(current, &current->blocked,
+ 					       info);
+ 

linux-2.6-upstream-reverts.patch:
 0 files changed

Index: linux-2.6-upstream-reverts.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/linux-2.6-upstream-reverts.patch,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -p -r1.10 -r1.11
--- linux-2.6-upstream-reverts.patch	5 Aug 2009 16:07:44 -0000	1.10
+++ linux-2.6-upstream-reverts.patch	4 Jan 2010 15:25:49 -0000	1.11
@@ -1 +1 @@
-
+nil

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

View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.113 -r 1.114 linux-2.6-utrace.patchIndex: linux-2.6-utrace.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/linux-2.6-utrace.patch,v
retrieving revision 1.113
retrieving revision 1.114
diff -u -p -r1.113 -r1.114
--- linux-2.6-utrace.patch	10 Aug 2009 20:49:41 -0000	1.113
+++ linux-2.6-utrace.patch	4 Jan 2010 15:25:49 -0000	1.114
@@ -25,8 +25,21 @@ the utrace API.
 
 Signed-off-by: Roland McGrath <roland at redhat.com>
 ---
+ Documentation/DocBook/Makefile    |    2 +-
+ Documentation/DocBook/utrace.tmpl |  590 +++++++++
+ fs/proc/array.c                   |    3 +
+ include/linux/sched.h             |    5 +
+ include/linux/tracehook.h         |   87 ++-
+ include/linux/utrace.h            |  694 +++++++++++
+ init/Kconfig                      |    9 +
+ kernel/Makefile                   |    1 +
+ kernel/fork.c                     |    3 +
+ kernel/ptrace.c                   |   14 +
+ kernel/utrace.c                   | 2427 +++++++++++++++++++++++++++++++++++++
+ 11 files changed, 3833 insertions(+), 2 deletions(-)
+
 diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile
-index b1eb661..02851f6 100644
+index ab8300f..95f59e4 100644  
 --- a/Documentation/DocBook/Makefile
 +++ b/Documentation/DocBook/Makefile
 @@ -9,7 +9,7 @@
@@ -40,7 +53,7 @@ index b1eb661..02851f6 100644
  	    mac80211.xml debugobjects.xml sh.xml regulator.xml \
 diff --git a/Documentation/DocBook/utrace.tmpl b/Documentation/DocBook/utrace.tmpl
 new file mode 100644
-index 0000000..6cc58a1
+index ...e149f49 100644  
 --- /dev/null
 +++ b/Documentation/DocBook/utrace.tmpl
 @@ -0,0 +1,590 @@
@@ -499,7 +512,7 @@ index 0000000..6cc58a1
 +  <function>utrace_finish_examine</function> surrounding the calls to
 +  <structname>struct user_regset</structname> functions or direct examination
 +  of task data structures.  <function>utrace_prepare_examine</function> returns
-+  an error if the task is not properly stopped and not dead.  After a
++  an error if the task is not properly stopped, or is dead.  After a
 +  successful examination, the paired <function>utrace_finish_examine</function>
 +  call returns an error if the task ever woke up during the examination.  If
 +  so, any data gathered may be scrambled and should be discarded.  This means
@@ -635,7 +648,7 @@ index 0000000..6cc58a1
 +
 +</book>
 diff --git a/fs/proc/array.c b/fs/proc/array.c
-index 725a650..e299a63 100644
+index 822c2d5..9069c91 100644  
 --- a/fs/proc/array.c
 +++ b/fs/proc/array.c
 @@ -82,6 +82,7 @@
@@ -643,10 +656,10 @@ index 725a650..e299a63 100644
  #include <linux/ptrace.h>
  #include <linux/tracehook.h>
 +#include <linux/utrace.h>
+ #include <linux/swapops.h>
  
  #include <asm/pgtable.h>
- #include <asm/processor.h>
-@@ -188,6 +189,8 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns,
+@@ -189,6 +190,8 @@ static inline void task_state(struct seq
  		cred->uid, cred->euid, cred->suid, cred->fsuid,
  		cred->gid, cred->egid, cred->sgid, cred->fsgid);
  
@@ -655,36 +668,16 @@ index 725a650..e299a63 100644
  	task_lock(p);
  	if (p->files)
  		fdt = files_fdtable(p->files);
-diff --git a/include/linux/init_task.h b/include/linux/init_task.h
-index d87247d..0d0b55d 100644
---- a/include/linux/init_task.h
-+++ b/include/linux/init_task.h
-@@ -170,6 +170,7 @@ extern struct cred init_cred;
- 		[PIDTYPE_SID]  = INIT_PID_LINK(PIDTYPE_SID),		\
- 	},								\
- 	.dirties = INIT_PROP_LOCAL_SINGLE(dirties),			\
-+	INIT_UTRACE(tsk)						\
- 	INIT_IDS							\
- 	INIT_TRACE_IRQFLAGS						\
- 	INIT_LOCKDEP							\
 diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 03c6c36..fd11331 100644
+index 6c8928b..139d300 100644  
 --- a/include/linux/sched.h
 +++ b/include/linux/sched.h
-@@ -59,6 +59,7 @@ struct sched_param {
- #include <linux/errno.h>
- #include <linux/nodemask.h>
- #include <linux/mm_types.h>
-+#include <linux/utrace_struct.h>
- 
- #include <asm/system.h>
- #include <asm/page.h>
-@@ -1291,6 +1292,11 @@ struct task_struct {
+@@ -1393,6 +1393,11 @@ struct task_struct {
  #endif
  	seccomp_t seccomp;
  
 +#ifdef CONFIG_UTRACE
-+	struct utrace utrace;
++	struct utrace *utrace;
 +	unsigned long utrace_flags;
 +#endif
 +
@@ -692,7 +685,7 @@ index 03c6c36..fd11331 100644
     	u32 parent_exec_id;
     	u32 self_exec_id;
 diff --git a/include/linux/tracehook.h b/include/linux/tracehook.h
-index 6a168b9..d59e159 100644
+index c78b2f4..71fa250 100644  
 --- a/include/linux/tracehook.h
 +++ b/include/linux/tracehook.h
 @@ -49,6 +49,7 @@
@@ -712,7 +705,7 @@ index 6a168b9..d59e159 100644
  	return (task_ptrace(task) & PT_PTRACED) != 0;
  }
  
-@@ -111,6 +114,9 @@ static inline void ptrace_report_syscall(struct pt_regs *regs)
+@@ -111,6 +114,9 @@ static inline void ptrace_report_syscall
  static inline __must_check int tracehook_report_syscall_entry(
  	struct pt_regs *regs)
  {
@@ -722,16 +715,17 @@ index 6a168b9..d59e159 100644
  	ptrace_report_syscall(regs);
  	return 0;
  }
-@@ -134,6 +140,8 @@ static inline __must_check int tracehook_report_syscall_entry(
+@@ -134,6 +140,9 @@ static inline __must_check int tracehook
   */
  static inline void tracehook_report_syscall_exit(struct pt_regs *regs, int step)
  {
 +	if (task_utrace_flags(current) & UTRACE_EVENT(SYSCALL_EXIT))
 +		utrace_report_syscall_exit(regs);
- 	ptrace_report_syscall(regs);
- }
- 
-@@ -194,6 +202,8 @@ static inline void tracehook_report_exec(struct linux_binfmt *fmt,
++
+ 	if (step && (task_ptrace(current) & PT_PTRACED)) {
+ 		siginfo_t info;
+ 		user_single_step_siginfo(current, regs, &info);
+@@ -201,6 +210,8 @@ static inline void tracehook_report_exec
  					 struct linux_binprm *bprm,
  					 struct pt_regs *regs)
  {
@@ -740,7 +734,7 @@ index 6a168b9..d59e159 100644
  	if (!ptrace_event(PT_TRACE_EXEC, PTRACE_EVENT_EXEC, 0) &&
  	    unlikely(task_ptrace(current) & PT_PTRACED))
  		send_sig(SIGTRAP, current, 0);
-@@ -211,6 +221,8 @@ static inline void tracehook_report_exec(struct linux_binfmt *fmt,
+@@ -218,10 +229,37 @@ static inline void tracehook_report_exec
   */
  static inline void tracehook_report_exit(long *exit_code)
  {
@@ -749,15 +743,36 @@ index 6a168b9..d59e159 100644
  	ptrace_event(PT_TRACE_EXIT, PTRACE_EVENT_EXIT, *exit_code);
  }
  
-@@ -254,6 +266,7 @@ static inline int tracehook_prepare_clone(unsigned clone_flags)
- static inline void tracehook_finish_clone(struct task_struct *child,
- 					  unsigned long clone_flags, int trace)
- {
-+	utrace_init_task(child);
- 	ptrace_init_task(child, (clone_flags & CLONE_PTRACE) || trace);
- }
- 
-@@ -278,6 +291,8 @@ static inline void tracehook_report_clone(struct pt_regs *regs,
+ /**
++ * tracehook_init_task - task_struct has just been copied
++ * @task:		new &struct task_struct just copied from parent
++ *
++ * Called from do_fork() when @task has just been duplicated.
++ * After this, @task will be passed to tracehook_free_task()
++ * even if the rest of its setup fails before it is fully created.
++ */
++static inline void tracehook_init_task(struct task_struct *task)
++{
++	utrace_init_task(task);
++}
++
++/**
++ * tracehook_free_task - task_struct is being freed
++ * @task:		dead &struct task_struct being freed
++ *
++ * Called from free_task() when @task is no longer in use.
++ */
++static inline void tracehook_free_task(struct task_struct *task)
++{
++	if (task_utrace_struct(task))
++		utrace_free_task(task);
++}
++
++/**
[...2666 lines suppressed...]
++	utrace = task_utrace_struct(task);
++	if (utrace->resume < UTRACE_RESUME ||
++	    utrace->pending_attach || utrace->signal_handler) {
++		enum utrace_resume_action resume;
++
 +		/*
 +		 * We've been asked for an explicit report before we
 +		 * even check for pending signals.
@@ -3665,19 +3707,14 @@ index 0000000..74b5fc5
 +
 +		splice_attaching(utrace);
 +
-+		if (unlikely(!utrace->interrupt) && unlikely(!utrace->report))
-+			report.result = UTRACE_SIGNAL_IGN;
-+		else if (utrace->signal_handler)
-+			report.result = UTRACE_SIGNAL_HANDLER;
-+		else
-+			report.result = UTRACE_SIGNAL_REPORT;
++		report.result = utrace->signal_handler ?
++			UTRACE_SIGNAL_HANDLER : UTRACE_SIGNAL_REPORT;
++		utrace->signal_handler = 0;
 +
-+		/*
-+		 * We are now making the report and it's on the
-+		 * interrupt path, so clear the flags asking for those.
-+		 */
-+		utrace->interrupt = utrace->report = utrace->signal_handler = 0;
-+		utrace->stopped = 0;
++		resume = utrace->resume;
++		utrace->resume = UTRACE_RESUME;
++
++		spin_unlock(&utrace->lock);
 +
 +		/*
 +		 * Make sure signal_pending() only returns true
@@ -3689,13 +3726,21 @@ index 0000000..74b5fc5
 +			spin_unlock_irq(&task->sighand->siglock);
 +		}
 +
-+		spin_unlock(&utrace->lock);
-+
-+		if (unlikely(report.result == UTRACE_SIGNAL_IGN))
++		if (resume > UTRACE_REPORT) {
++			/*
++			 * We only got here to process utrace->resume.
++			 * Despite no callbacks, this report is not spurious.
++			 */
++			report.action = resume;
++			report.spurious = false;
++			finish_resume_report(task, utrace, &report);
++			return -1;
++		} else if (!(task->utrace_flags & UTRACE_EVENT(QUIESCE))) {
 +			/*
 +			 * We only got here to clear utrace->signal_handler.
 +			 */
 +			return -1;
++		}
 +
 +		/*
 +		 * Do a reporting pass for no signal, just for EVENT(QUIESCE).
@@ -3706,22 +3751,15 @@ index 0000000..74b5fc5
 +		event = 0;
 +		ka = NULL;
 +		memset(return_ka, 0, sizeof *return_ka);
-+	} else if ((task->utrace_flags & UTRACE_EVENT_SIGNAL_ALL) == 0 &&
-+		   !utrace->stopped) {
++	} else if (!(task->utrace_flags & UTRACE_EVENT_SIGNAL_ALL) ||
++		   unlikely(task->signal->group_stop_count)) {
 +		/*
-+		 * If no engine is interested in intercepting signals,
-+		 * let the caller just dequeue them normally.
++		 * If no engine is interested in intercepting signals or
++		 * we must stop, let the caller just dequeue them normally
++		 * or participate in group-stop.
 +		 */
 +		return 0;
 +	} else {
-+		if (unlikely(utrace->stopped)) {
-+			spin_unlock_irq(&task->sighand->siglock);
-+			spin_lock(&utrace->lock);
-+			utrace->stopped = 0;
-+			spin_unlock(&utrace->lock);
-+			spin_lock_irq(&task->sighand->siglock);
-+		}
-+
 +		/*
 +		 * Steal the next signal so we can let tracing engines
 +		 * examine it.  From the signal number and sigaction,
@@ -3806,11 +3844,11 @@ index 0000000..74b5fc5
 +
 +		if (ops->report_signal)
 +			ret = (*ops->report_signal)(
-+				report.result | report.action, engine, task,
++				report.result | report.action, engine,
 +				regs, info, ka, return_ka);
 +		else
 +			ret = (report.result | (*ops->report_quiesce)(
-+				       report.action, engine, task, event));
++				       report.action, engine, event));
 +
 +		/*
 +		 * Avoid a tight loop reporting again and again if some
@@ -3825,7 +3863,7 @@ index 0000000..74b5fc5
 +			break;
 +		}
 +
-+		finish_callback(utrace, &report, engine, ret);
++		finish_callback(task, utrace, &report, engine, ret);
 +	}
 +
 +	/*
@@ -3872,7 +3910,7 @@ index 0000000..74b5fc5
 +			 */
 +			if (report.action != UTRACE_RESUME)
 +				report.action = UTRACE_INTERRUPT;
-+			finish_report(&report, task, utrace);
++			finish_report(task, utrace, &report, true);
 +
 +			if (unlikely(report.result & UTRACE_SIGNAL_HOLD))
 +				push_back_signal(task, info);
@@ -3905,9 +3943,9 @@ index 0000000..74b5fc5
 +		 * as in utrace_resume(), above.  After we've dealt with that,
 +		 * our caller will relock and come back through here.
 +		 */
-+		finish_resume_report(&report, task, utrace);
++		finish_resume_report(task, utrace, &report);
 +
-+		if (unlikely(report.killed)) {
++		if (unlikely(fatal_signal_pending(task))) {
 +			/*
 +			 * The only reason we woke up now was because of a
 +			 * SIGKILL.  Don't do normal dequeuing in case it
@@ -3937,12 +3975,25 @@ index 0000000..74b5fc5
 +
 +	/*
 +	 * Complete the bookkeeping after the report.
-+	 * This sets utrace->report if UTRACE_STOP was used.
++	 * This sets utrace->resume if UTRACE_STOP was used.
 +	 */
-+	finish_report(&report, task, utrace);
++	finish_report(task, utrace, &report, true);
 +
 +	return_ka->sa.sa_handler = SIG_DFL;
 +
++	/*
++	 * If this signal is fatal, si_signo gets through as exit_code.
++	 * We can't allow a completely bogus value there or else core
++	 * kernel code can freak out.  (If an engine wants to control
++	 * the exit_code value exactly, it can do so in report_exit.)
++	 * We'll produce a big complaint in dmesg, but won't crash.
++	 * That's nicer for debugging your utrace engine.
++	 */
++	if (unlikely(info->si_signo & 0x80)) {
++		WARN(1, "utrace engine left bogus si_signo value!");
++		info->si_signo = SIGTRAP;
++	}
++
 +	if (unlikely(report.result & UTRACE_SIGNAL_HOLD))
 +		push_back_signal(task, info);
 +	else
@@ -3968,11 +4019,13 @@ index 0000000..74b5fc5
 +	spin_lock(&utrace->lock);
 +
 +	utrace->signal_handler = 1;
-+	if (stepping) {
-+		utrace->interrupt = 1;
-+		set_tsk_thread_flag(task, TIF_SIGPENDING);
-+	} else {
-+		set_tsk_thread_flag(task, TIF_NOTIFY_RESUME);
++	if (utrace->resume > UTRACE_INTERRUPT) {
++		if (stepping) {
++			utrace->resume = UTRACE_INTERRUPT;
++			set_tsk_thread_flag(task, TIF_SIGPENDING);
++		} else if (utrace->resume == UTRACE_RESUME) {
++			set_tsk_thread_flag(task, TIF_NOTIFY_RESUME);
++		}
 +	}
 +
 +	spin_unlock(&utrace->lock);
@@ -3988,7 +4041,7 @@ index 0000000..74b5fc5
 + * &struct user_regset calls, or direct access to thread-synchronous fields.
 + *
 + * When @target is current, this call is superfluous.  When @target is
-+ * another thread, it must held stopped via %UTRACE_STOP by @engine.
++ * another thread, it must be held stopped via %UTRACE_STOP by @engine.
 + *
 + * This call may block the caller until @target stays stopped, so it must
 + * be called only after the caller is sure @target is about to unschedule.
@@ -4099,10 +4152,5 @@ index 0000000..74b5fc5
 + */
 +void task_utrace_proc_status(struct seq_file *m, struct task_struct *p)
 +{
-+	struct utrace *utrace = &p->utrace;
-+	seq_printf(m, "Utrace:\t%lx%s%s%s\n",
-+		   p->utrace_flags,
-+		   utrace->stopped ? " (stopped)" : "",
-+		   utrace->report ? " (report)" : "",
-+		   utrace->interrupt ? " (interrupt)" : "");
++	seq_printf(m, "Utrace:\t%lx\n", p->utrace_flags);
 +}

linux-2.6-v4l-dvb-fixes.patch:
 b/Documentation/dvb/get_dvb_firmware                      |   85 
 b/Documentation/feature-removal-schedule.txt              |    8 
 b/Documentation/ioctl/ioctl-number.txt                    |    2 
 b/Documentation/video4linux/CARDLIST.bttv                 |    6 
 b/Documentation/video4linux/CARDLIST.cx23885              |    4 
 b/Documentation/video4linux/CARDLIST.cx88                 |    1 
 b/Documentation/video4linux/CARDLIST.em28xx               |    9 
 b/Documentation/video4linux/CARDLIST.saa7134              |    2 
 b/Documentation/video4linux/Zoran                         |    3 
 b/Documentation/video4linux/bttv/Insmod-options           |   10 
 b/Documentation/video4linux/bttv/README                   |    4 
 b/Documentation/video4linux/cx2341x/README.hm12           |    4 
 b/Documentation/video4linux/gspca.txt                     |    4 
 b/Documentation/video4linux/si470x.txt                    |   11 
 b/Documentation/video4linux/v4l2-framework.txt            |  187 
 b/Documentation/video4linux/v4lgrab.c                     |    4 
 b/Documentation/video4linux/zr364xx.txt                   |    1 
 b/MAINTAINERS                                             |    2 
 b/arch/arm/mach-pxa/pcm990-baseboard.c                    |   53 
 b/arch/arm/plat-mxc/include/mach/mx3_camera.h             |   52 
 b/arch/sh/boards/board-ap325rxa.c                         |    3 
 b/arch/sh/boards/mach-migor/setup.c                       |    5 
 b/drivers/media/Kconfig                                   |    2 
 b/drivers/media/common/ir-keymaps.c                       |  146 
 b/drivers/media/common/saa7146_core.c                     |   15 
 b/drivers/media/common/saa7146_fops.c                     |   48 
 b/drivers/media/common/saa7146_i2c.c                      |   29 
 b/drivers/media/common/saa7146_video.c                    | 1268 +---
 b/drivers/media/common/tuners/Kconfig                     |   64 
 b/drivers/media/common/tuners/Makefile                    |    1 
 b/drivers/media/common/tuners/mc44s803.c                  |  371 +
 b/drivers/media/common/tuners/mc44s803.h                  |   46 
 b/drivers/media/common/tuners/mc44s803_priv.h             |  208 
 b/drivers/media/common/tuners/mt2060.c                    |    2 
 b/drivers/media/common/tuners/mt20xx.c                    |    2 
 b/drivers/media/common/tuners/mxl5005s.c                  |    7 
 b/drivers/media/common/tuners/mxl5007t.c                  |  428 -
 b/drivers/media/common/tuners/tda18271-common.c           |    6 
 b/drivers/media/common/tuners/tda18271-fe.c               |   37 
 b/drivers/media/common/tuners/tda18271-priv.h             |    6 
 b/drivers/media/common/tuners/tda18271.h                  |   10 
 b/drivers/media/common/tuners/tda827x.c                   |  237 
 b/drivers/media/common/tuners/tda8290.c                   |    9 
 b/drivers/media/common/tuners/tea5761.c                   |    2 
 b/drivers/media/common/tuners/tea5767.c                   |    2 
 b/drivers/media/common/tuners/xc5000.c                    |   14 
 b/drivers/media/dvb/b2c2/Kconfig                          |    2 
 b/drivers/media/dvb/b2c2/Makefile                         |    1 
 b/drivers/media/dvb/b2c2/flexcop-common.h                 |   64 
 b/drivers/media/dvb/b2c2/flexcop-dma.c                    |   27 
 b/drivers/media/dvb/b2c2/flexcop-eeprom.c                 |   47 
 b/drivers/media/dvb/b2c2/flexcop-fe-tuner.c               |    6 
 b/drivers/media/dvb/b2c2/flexcop-hw-filter.c              |  171 
 b/drivers/media/dvb/b2c2/flexcop-i2c.c                    |   61 
 b/drivers/media/dvb/b2c2/flexcop-misc.c                   |   68 
 b/drivers/media/dvb/b2c2/flexcop-pci.c                    |  165 
 b/drivers/media/dvb/b2c2/flexcop-reg.h                    |   21 
 b/drivers/media/dvb/b2c2/flexcop-sram.c                   |  112 
 b/drivers/media/dvb/b2c2/flexcop-usb.c                    |  368 -
 b/drivers/media/dvb/b2c2/flexcop-usb.h                    |   62 
 b/drivers/media/dvb/b2c2/flexcop.c                        |   86 
 b/drivers/media/dvb/b2c2/flexcop.h                        |   20 
 b/drivers/media/dvb/b2c2/flexcop_ibi_value_be.h           |    7 
 b/drivers/media/dvb/b2c2/flexcop_ibi_value_le.h           |    7 
 b/drivers/media/dvb/bt8xx/Kconfig                         |    2 
 b/drivers/media/dvb/bt8xx/dst_ca.c                        |   14 
 b/drivers/media/dvb/bt8xx/dvb-bt8xx.c                     |    2 
 b/drivers/media/dvb/dm1105/Kconfig                        |    1 
 b/drivers/media/dvb/dm1105/dm1105.c                       |  204 
 b/drivers/media/dvb/dvb-core/dmxdev.c                     |    2 
 b/drivers/media/dvb/dvb-core/dvb_ca_en50221.c             |    2 
 b/drivers/media/dvb/dvb-core/dvb_frontend.c               |    2 
 b/drivers/media/dvb/dvb-core/dvb_net.c                    |    2 
 b/drivers/media/dvb/dvb-core/dvbdev.c                     |    4 
 b/drivers/media/dvb/dvb-core/dvbdev.h                     |    2 
 b/drivers/media/dvb/dvb-usb/Kconfig                       |   67 
 b/drivers/media/dvb/dvb-usb/Makefile                      |    2 
 b/drivers/media/dvb/dvb-usb/af9015.c                      |   60 
 b/drivers/media/dvb/dvb-usb/af9015.h                      |   31 
 b/drivers/media/dvb/dvb-usb/ce6230.c                      |  328 +
 b/drivers/media/dvb/dvb-usb/ce6230.h                      |   69 
 b/drivers/media/dvb/dvb-usb/dib0700_core.c                |   10 
 b/drivers/media/dvb/dvb-usb/dib0700_devices.c             |  164 
 b/drivers/media/dvb/dvb-usb/dvb-usb-ids.h                 |   11 
 b/drivers/media/dvb/dvb-usb/dvb-usb.h                     |    2 
 b/drivers/media/dvb/firewire/firedtv-avc.c                |    2 
 b/drivers/media/dvb/frontends/Kconfig                     |   69 
 b/drivers/media/dvb/frontends/Makefile                    |    6 
 b/drivers/media/dvb/frontends/au8522.h                    |   16 
 b/drivers/media/dvb/frontends/au8522_decoder.c            |  835 ++
 b/drivers/media/dvb/frontends/au8522_dig.c                |  902 ++
 b/drivers/media/dvb/frontends/au8522_priv.h               |  412 +
 b/drivers/media/dvb/frontends/cx24113.c                   |    2 
 b/drivers/media/dvb/frontends/cx24116.c                   |   63 
 b/drivers/media/dvb/frontends/cx24123.c                   |    4 
 b/drivers/media/dvb/frontends/dib0070.h                   |    2 
 b/drivers/media/dvb/frontends/dib3000mc.h                 |   36 
 b/drivers/media/dvb/frontends/dib7000m.h                  |   28 
 b/drivers/media/dvb/frontends/dib7000p.h                  |   35 
 b/drivers/media/dvb/frontends/dvb_dummy_fe.h              |   19 
 b/drivers/media/dvb/frontends/itd1000_priv.h              |    2 
 b/drivers/media/dvb/frontends/lgdt3304.c                  |    1 
 b/drivers/media/dvb/frontends/lgdt3305.c                  | 1087 +++
 b/drivers/media/dvb/frontends/lgdt3305.h                  |   85 
 b/drivers/media/dvb/frontends/lnbh24.h                    |   55 
 b/drivers/media/dvb/frontends/lnbp21.c                    |   41 
 b/drivers/media/dvb/frontends/lnbp21.h                    |   34 
 b/drivers/media/dvb/frontends/s921_module.c               |    1 
 b/drivers/media/dvb/frontends/stb6100_cfg.h               |    4 
 b/drivers/media/dvb/frontends/stv0900.h                   |   62 
 b/drivers/media/dvb/frontends/stv0900_core.c              | 1949 ++++++
 b/drivers/media/dvb/frontends/stv0900_init.h              |  441 +
 b/drivers/media/dvb/frontends/stv0900_priv.h              |  430 +
 b/drivers/media/dvb/frontends/stv0900_reg.h               | 3787 ++++++++++++
 b/drivers/media/dvb/frontends/stv0900_sw.c                | 2847 +++++++++
 b/drivers/media/dvb/frontends/stv6110.c                   |  456 +
 b/drivers/media/dvb/frontends/stv6110.h                   |   62 
 b/drivers/media/dvb/frontends/tda1004x.c                  |   30 
 b/drivers/media/dvb/frontends/zl10036.c                   |  519 +
 b/drivers/media/dvb/frontends/zl10036.h                   |   53 
 b/drivers/media/dvb/frontends/zl10353.c                   |    8 
 b/drivers/media/dvb/frontends/zl10353.h                   |    4 
 b/drivers/media/dvb/frontends/zl10353_priv.h              |    8 
 b/drivers/media/dvb/pluto2/pluto2.c                       |    7 
 b/drivers/media/dvb/siano/Makefile                        |    4 
 b/drivers/media/dvb/siano/sms-cards.c                     |   92 
 b/drivers/media/dvb/siano/sms-cards.h                     |    5 
 b/drivers/media/dvb/siano/smscoreapi.c                    |   45 
 b/drivers/media/dvb/siano/smscoreapi.h                    |   41 
 b/drivers/media/dvb/siano/smsdvb.c                        |   60 
 b/drivers/media/dvb/siano/smsusb.c                        |   73 
 b/drivers/media/dvb/ttpci/Kconfig                         |    2 
 b/drivers/media/dvb/ttpci/av7110.c                        |    2 
 b/drivers/media/dvb/ttpci/av7110_av.c                     |    4 
 b/drivers/media/dvb/ttpci/av7110_ca.c                     |    2 
 b/drivers/media/dvb/ttpci/av7110_v4l.c                    |  480 -
 b/drivers/media/dvb/ttpci/budget-av.c                     |   88 
 b/drivers/media/dvb/ttpci/budget-ci.c                     |    6 
 b/drivers/media/radio/dsbr100.c                           |   10 
 b/drivers/media/radio/radio-aimslab.c                     |  347 -
 b/drivers/media/radio/radio-aztech.c                      |  378 -
 b/drivers/media/radio/radio-cadet.c                       |  595 -
 b/drivers/media/radio/radio-gemtek-pci.c                  |  329 -
 b/drivers/media/radio/radio-gemtek.c                      |  396 -
 b/drivers/media/radio/radio-maestro.c                     |  337 -
 b/drivers/media/radio/radio-maxiradio.c                   |  374 -
 b/drivers/media/radio/radio-mr800.c                       |  221 
 b/drivers/media/radio/radio-rtrack2.c                     |  276 
 b/drivers/media/radio/radio-sf16fmi.c                     |  283 
 b/drivers/media/radio/radio-sf16fmr2.c                    |  371 -
 b/drivers/media/radio/radio-si470x.c                      |  200 
 b/drivers/media/radio/radio-tea5764.c                     |    3 
 b/drivers/media/radio/radio-terratec.c                    |  310 
 b/drivers/media/radio/radio-trust.c                       |  343 -
 b/drivers/media/radio/radio-typhoon.c                     |  349 -
 b/drivers/media/radio/radio-zoltrix.c                     |  378 -
 b/drivers/media/video/Kconfig                             |   94 
 b/drivers/media/video/Makefile                            |   10 
 b/drivers/media/video/adv7170.c                           |  354 -
 b/drivers/media/video/adv7175.c                           |  329 -
 b/drivers/media/video/au0828/Kconfig                      |   10 
 b/drivers/media/video/au0828/Makefile                     |    2 
 b/drivers/media/video/au0828/au0828-cards.c               |  127 
 b/drivers/media/video/au0828/au0828-core.c                |   34 
 b/drivers/media/video/au0828/au0828-dvb.c                 |    2 
 b/drivers/media/video/au0828/au0828-i2c.c                 |   72 
 b/drivers/media/video/au0828/au0828-reg.h                 |    6 
 b/drivers/media/video/au0828/au0828-video.c               | 1712 +++++
 b/drivers/media/video/au0828/au0828.h                     |  181 
 b/drivers/media/video/bt819.c                             |  493 -
 b/drivers/media/video/bt856.c                             |  291 
 b/drivers/media/video/bt866.c                             |  282 
 b/drivers/media/video/bt8xx/Kconfig                       |    2 
 b/drivers/media/video/bt8xx/bttv-cards.c                  | 1672 ++---
 b/drivers/media/video/bt8xx/bttv-driver.c                 |  197 
 b/drivers/media/video/bt8xx/bttv-i2c.c                    |   61 
 b/drivers/media/video/bt8xx/bttv-if.c                     |   18 
 b/drivers/media/video/bt8xx/bttv-risc.c                   |    4 
 b/drivers/media/video/bt8xx/bttv-vbi.c                    |    2 
 b/drivers/media/video/bt8xx/bttv.h                        |   96 
 b/drivers/media/video/bt8xx/bttvp.h                       |   30 
 b/drivers/media/video/cafe_ccic.c                         |  432 -
 b/drivers/media/video/cpia2/cpia2_v4l.c                   |    1 
 b/drivers/media/video/cs5345.c                            |    7 
 b/drivers/media/video/cs53l32a.c                          |   12 
 b/drivers/media/video/cx18/Kconfig                        |    2 
 b/drivers/media/video/cx18/cx18-audio.c                   |   52 
 b/drivers/media/video/cx18/cx18-audio.h                   |    2 
 b/drivers/media/video/cx18/cx18-av-audio.c                |  120 
 b/drivers/media/video/cx18/cx18-av-core.c                 |  796 +-
 b/drivers/media/video/cx18/cx18-av-core.h                 |   49 
 b/drivers/media/video/cx18/cx18-av-firmware.c             |   16 
 b/drivers/media/video/cx18/cx18-av-vbi.c                  |  367 -
 b/drivers/media/video/cx18/cx18-cards.c                   |   50 
 b/drivers/media/video/cx18/cx18-cards.h                   |   18 
 b/drivers/media/video/cx18/cx18-controls.c                |   70 
 b/drivers/media/video/cx18/cx18-driver.c                  |  416 -
 b/drivers/media/video/cx18/cx18-driver.h                  |  258 
 b/drivers/media/video/cx18/cx18-dvb.c                     |    2 
 b/drivers/media/video/cx18/cx18-fileops.c                 |  107 
 b/drivers/media/video/cx18/cx18-firmware.c                |   22 
 b/drivers/media/video/cx18/cx18-gpio.c                    |  319 -
 b/drivers/media/video/cx18/cx18-gpio.h                    |   10 
 b/drivers/media/video/cx18/cx18-i2c.c                     |  296 
 b/drivers/media/video/cx18/cx18-i2c.h                     |    5 
 b/drivers/media/video/cx18/cx18-ioctl.c                   |  273 
 b/drivers/media/video/cx18/cx18-mailbox.c                 |   44 
 b/drivers/media/video/cx18/cx18-queue.c                   |    4 
 b/drivers/media/video/cx18/cx18-queue.h                   |    4 
 b/drivers/media/video/cx18/cx18-streams.c                 |  210 
 b/drivers/media/video/cx18/cx18-vbi.c                     |  155 
 b/drivers/media/video/cx18/cx18-vbi.h                     |    2 
 b/drivers/media/video/cx18/cx18-version.h                 |    4 
 b/drivers/media/video/cx18/cx18-video.c                   |    3 
 b/drivers/media/video/cx18/cx23418.h                      |   16 
 b/drivers/media/video/cx2341x.c                           |  196 
 b/drivers/media/video/cx23885/Kconfig                     |   15 
 b/drivers/media/video/cx23885/Makefile                    |    4 
 b/drivers/media/video/cx23885/cimax2.c                    |  472 +
 b/drivers/media/video/cx23885/cimax2.h                    |   47 
 b/drivers/media/video/cx23885/cx23885-417.c               |   49 
 b/drivers/media/video/cx23885/cx23885-cards.c             |   94 
 b/drivers/media/video/cx23885/cx23885-core.c              |   43 
 b/drivers/media/video/cx23885/cx23885-dvb.c               |  166 
 b/drivers/media/video/cx23885/cx23885-i2c.c               |   68 
 b/drivers/media/video/cx23885/cx23885-reg.h               |    2 
 b/drivers/media/video/cx23885/cx23885-video.c             |   51 
 b/drivers/media/video/cx23885/cx23885.h                   |   20 
 b/drivers/media/video/cx23885/netup-eeprom.c              |  107 
 b/drivers/media/video/cx23885/netup-eeprom.h              |   42 
 b/drivers/media/video/cx23885/netup-init.c                |  125 
 b/drivers/media/video/cx23885/netup-init.h                |   25 
 b/drivers/media/video/cx25840/cx25840-audio.c             |  121 
 b/drivers/media/video/cx25840/cx25840-core.c              |   65 
 b/drivers/media/video/cx25840/cx25840-core.h              |    8 
 b/drivers/media/video/cx25840/cx25840-vbi.c               |  314 -
 b/drivers/media/video/cx88/Kconfig                        |    2 
 b/drivers/media/video/cx88/cx88-blackbird.c               |    8 
 b/drivers/media/video/cx88/cx88-cards.c                   |   99 
 b/drivers/media/video/cx88/cx88-core.c                    |   11 
 b/drivers/media/video/cx88/cx88-dvb.c                     |   18 
 b/drivers/media/video/cx88/cx88-i2c.c                     |   41 
 b/drivers/media/video/cx88/cx88-input.c                   |   29 
 b/drivers/media/video/cx88/cx88-video.c                   |   52 
 b/drivers/media/video/cx88/cx88.h                         |   24 
 b/drivers/media/video/dabusb.c                            |   83 
 b/drivers/media/video/em28xx/em28xx-audio.c               |   77 
 b/drivers/media/video/em28xx/em28xx-cards.c               |  195 
 b/drivers/media/video/em28xx/em28xx-core.c                |   41 
 b/drivers/media/video/em28xx/em28xx-dvb.c                 |    3 
 b/drivers/media/video/em28xx/em28xx-i2c.c                 |   12 
 b/drivers/media/video/em28xx/em28xx-input.c               |   22 
 b/drivers/media/video/em28xx/em28xx-video.c               |   61 
 b/drivers/media/video/em28xx/em28xx.h                     |   24 
 b/drivers/media/video/gspca/Kconfig                       |   27 
 b/drivers/media/video/gspca/Makefile                      |  102 
 b/drivers/media/video/gspca/conex.c                       |   63 
 b/drivers/media/video/gspca/etoms.c                       |   36 
 b/drivers/media/video/gspca/finepix.c                     |  433 -
 b/drivers/media/video/gspca/gspca.c                       |  166 
 b/drivers/media/video/gspca/gspca.h                       |   14 
 b/drivers/media/video/gspca/jpeg.h                        |  263 
 b/drivers/media/video/gspca/m5602/m5602_core.c            |    7 
 b/drivers/media/video/gspca/mars.c                        |  506 -
 b/drivers/media/video/gspca/mr97310a.c                    |  362 +
 b/drivers/media/video/gspca/ov519.c                       |    7 
 b/drivers/media/video/gspca/ov534.c                       |  820 +-
 b/drivers/media/video/gspca/pac207.c                      |    8 
 b/drivers/media/video/gspca/pac7311.c                     |    7 
 b/drivers/media/video/gspca/sonixb.c                      |    7 
 b/drivers/media/video/gspca/sonixj.c                      |  951 ++-
 b/drivers/media/video/gspca/spca500.c                     |   99 
 b/drivers/media/video/gspca/spca501.c                     |   22 
 b/drivers/media/video/gspca/spca505.c                     |  525 -
 b/drivers/media/video/gspca/spca506.c                     |   57 
 b/drivers/media/video/gspca/spca508.c                     |  128 
 b/drivers/media/video/gspca/spca561.c                     |  192 
 b/drivers/media/video/gspca/sq905.c                       |  456 +
 b/drivers/media/video/gspca/sq905c.c                      |  328 +
 b/drivers/media/video/gspca/stk014.c                      |   72 
 b/drivers/media/video/gspca/stv06xx/stv06xx.c             |    7 
 b/drivers/media/video/gspca/stv06xx/stv06xx_hdcs.c        |   76 
 b/drivers/media/video/gspca/stv06xx/stv06xx_hdcs.h        |   65 
 b/drivers/media/video/gspca/stv06xx/stv06xx_pb0100.c      |  147 
 b/drivers/media/video/gspca/stv06xx/stv06xx_pb0100.h      |  130 
 b/drivers/media/video/gspca/stv06xx/stv06xx_sensor.h      |    8 
 b/drivers/media/video/gspca/stv06xx/stv06xx_vv6410.c      |  123 
 b/drivers/media/video/gspca/stv06xx/stv06xx_vv6410.h      |   58 
 b/drivers/media/video/gspca/sunplus.c                     |  124 
 b/drivers/media/video/gspca/t613.c                        |  564 -
 b/drivers/media/video/gspca/tv8532.c                      |  483 -
 b/drivers/media/video/gspca/vc032x.c                      | 1591 +++--
 b/drivers/media/video/gspca/zc3xx.c                       |  884 +-
 b/drivers/media/video/hdpvr/Kconfig                       |   10 
 b/drivers/media/video/hdpvr/Makefile                      |    9 
 b/drivers/media/video/hdpvr/hdpvr-control.c               |  201 
 b/drivers/media/video/hdpvr/hdpvr-core.c                  |  466 +
 b/drivers/media/video/hdpvr/hdpvr-i2c.c                   |  145 
 b/drivers/media/video/hdpvr/hdpvr-video.c                 | 1248 +++
 b/drivers/media/video/hdpvr/hdpvr.h                       |  303 
 b/drivers/media/video/hexium_gemini.c                     |  292 
 b/drivers/media/video/hexium_orion.c                      |  103 
 b/drivers/media/video/indycam.c                           |  314 -
 b/drivers/media/video/indycam.h                           |   19 
 b/drivers/media/video/ir-kbd-i2c.c                        |   84 
 b/drivers/media/video/ivtv/ivtv-controls.c                |    1 
 b/drivers/media/video/ivtv/ivtv-driver.c                  |   93 
 b/drivers/media/video/ivtv/ivtv-driver.h                  |   26 
 b/drivers/media/video/ivtv/ivtv-fileops.c                 |   10 
 b/drivers/media/video/ivtv/ivtv-firmware.c                |    2 
 b/drivers/media/video/ivtv/ivtv-gpio.c                    |    4 
 b/drivers/media/video/ivtv/ivtv-i2c.c                     |   14 
 b/drivers/media/video/ivtv/ivtv-ioctl.c                   |   20 
 b/drivers/media/video/ivtv/ivtv-irq.c                     |    4 
 b/drivers/media/video/ivtv/ivtv-queue.c                   |    8 
 b/drivers/media/video/ivtv/ivtv-queue.h                   |    8 
 b/drivers/media/video/ivtv/ivtv-streams.c                 |   68 
 b/drivers/media/video/ivtv/ivtv-udma.c                    |   10 
 b/drivers/media/video/ivtv/ivtv-udma.h                    |    4 
 b/drivers/media/video/ivtv/ivtv-vbi.c                     |    2 
 b/drivers/media/video/ivtv/ivtv-version.h                 |    2 
 b/drivers/media/video/ivtv/ivtv-yuv.c                     |    6 
 b/drivers/media/video/ivtv/ivtvfb.c                       |    6 
 b/drivers/media/video/ks0127.c                            |  677 --
 b/drivers/media/video/ks0127.h                            |    2 
 b/drivers/media/video/m52790.c                            |    7 
 b/drivers/media/video/meye.c                              |   45 
 b/drivers/media/video/msp3400-driver.c                    |  142 
 b/drivers/media/video/mt9m001.c                           |  164 
 b/drivers/media/video/mt9m111.c                           |   64 
 b/drivers/media/video/mt9t031.c                           |  179 
 b/drivers/media/video/mt9v022.c                           |  205 
 b/drivers/media/video/mx3_camera.c                        | 1220 +++
 b/drivers/media/video/mxb.c                               |  828 +-
 b/drivers/media/video/omap24xxcam.c                       |    7 
 b/drivers/media/video/ov7670.c                            |  552 -
 b/drivers/media/video/ov772x.c                            |  320 -
 b/drivers/media/video/ovcamchip/ovcamchip_core.c          |  197 
 b/drivers/media/video/ovcamchip/ovcamchip_priv.h          |    7 
 b/drivers/media/video/pvrusb2/Kconfig                     |    8 
 b/drivers/media/video/pvrusb2/Makefile                    |    7 
 b/drivers/media/video/pvrusb2/pvrusb2-audio.c             |  142 
 b/drivers/media/video/pvrusb2/pvrusb2-audio.h             |    6 
 b/drivers/media/video/pvrusb2/pvrusb2-cs53l32a.c          |   95 
 b/drivers/media/video/pvrusb2/pvrusb2-cs53l32a.h          |   48 
 b/drivers/media/video/pvrusb2/pvrusb2-cx2584x-v4l.c       |  245 
 b/drivers/media/video/pvrusb2/pvrusb2-cx2584x-v4l.h       |    4 
 b/drivers/media/video/pvrusb2/pvrusb2-debugifc.c          |    5 
 b/drivers/media/video/pvrusb2/pvrusb2-debugifc.h          |   12 
 b/drivers/media/video/pvrusb2/pvrusb2-devattr.c           |  102 
 b/drivers/media/video/pvrusb2/pvrusb2-devattr.h           |   34 
 b/drivers/media/video/pvrusb2/pvrusb2-dvb.c               |    2 
 b/drivers/media/video/pvrusb2/pvrusb2-encoder.c           |    2 
 b/drivers/media/video/pvrusb2/pvrusb2-hdw-internal.h      |   50 
 b/drivers/media/video/pvrusb2/pvrusb2-hdw.c               |  648 +-
 b/drivers/media/video/pvrusb2/pvrusb2-hdw.h               |    6 
 b/drivers/media/video/pvrusb2/pvrusb2-i2c-core.c          |  417 -
 b/drivers/media/video/pvrusb2/pvrusb2-i2c-core.h          |   57 
 b/drivers/media/video/pvrusb2/pvrusb2-main.c              |    4 
 b/drivers/media/video/pvrusb2/pvrusb2-sysfs.c             |   12 
 b/drivers/media/video/pvrusb2/pvrusb2-v4l2.c              |   18 
 b/drivers/media/video/pvrusb2/pvrusb2-video-v4l.c         |  214 
 b/drivers/media/video/pvrusb2/pvrusb2-video-v4l.h         |    7 
 b/drivers/media/video/pvrusb2/pvrusb2-wm8775.c            |  134 
 b/drivers/media/video/pvrusb2/pvrusb2-wm8775.h            |    4 
 b/drivers/media/video/pwc/Kconfig                         |   10 
 b/drivers/media/video/pwc/pwc-if.c                        |   79 
 b/drivers/media/video/pwc/pwc.h                           |    6 
 b/drivers/media/video/pxa_camera.c                        |   68 
 b/drivers/media/video/s2255drv.c                          |   41 
 b/drivers/media/video/saa5246a.c                          |   70 
 b/drivers/media/video/saa5249.c                           |   71 
 b/drivers/media/video/saa6588.c                           |  207 
 b/drivers/media/video/saa7110.c                           |  472 -
 b/drivers/media/video/saa7115.c                           |   64 
 b/drivers/media/video/saa7127.c                           |    1 
 b/drivers/media/video/saa7134/Kconfig                     |   13 
 b/drivers/media/video/saa7134/saa6752hs.c                 |  581 +
 b/drivers/media/video/saa7134/saa7134-cards.c             |  333 -
 b/drivers/media/video/saa7134/saa7134-core.c              |  108 
 b/drivers/media/video/saa7134/saa7134-dvb.c               |   75 
 b/drivers/media/video/saa7134/saa7134-empress.c           |   27 
 b/drivers/media/video/saa7134/saa7134-i2c.c               |   23 
 b/drivers/media/video/saa7134/saa7134-ts.c                |   15 
 b/drivers/media/video/saa7134/saa7134-video.c             |   75 
 b/drivers/media/video/saa7134/saa7134.h                   |   40 
 b/drivers/media/video/saa7146.h                           |    2 
 b/drivers/media/video/saa717x.c                           |   10 
 b/drivers/media/video/saa7185.c                           |  239 
 b/drivers/media/video/saa7191.c                           |  500 -
 b/drivers/media/video/saa7191.h                           |   26 
 b/drivers/media/video/sh_mobile_ceu_camera.c              |   82 
 b/drivers/media/video/sn9c102/sn9c102_devtable.h          |    4 
 b/drivers/media/video/soc_camera.c                        |  135 
 b/drivers/media/video/soc_camera_platform.c               |    9 
 b/drivers/media/video/stk-webcam.c                        |   24 
 b/drivers/media/video/tcm825x.c                           |   22 
 b/drivers/media/video/tcm825x.h                           |    2 
 b/drivers/media/video/tda7432.c                           |   22 
 b/drivers/media/video/tda9840.c                           |   82 
 b/drivers/media/video/tda9875.c                           |   19 
 b/drivers/media/video/tea6415c.c                          |   53 
 b/drivers/media/video/tea6415c.h                          |   12 
 b/drivers/media/video/tea6420.c                           |   69 
 b/drivers/media/video/tea6420.h                           |   27 
 b/drivers/media/video/tlv320aic23b.c                      |   12 
 b/drivers/media/video/tuner-core.c                        |  152 
 b/drivers/media/video/tvaudio.c                           |  173 
 b/drivers/media/video/tveeprom.c                          |    7 
 b/drivers/media/video/tvp514x.c                           |  113 
 b/drivers/media/video/tvp5150.c                           |   10 
 b/drivers/media/video/tw9910.c                            |   36 
 b/drivers/media/video/upd64031a.c                         |    7 
 b/drivers/media/video/upd64083.c                          |    7 
 b/drivers/media/video/usbvideo/vicam.c                    |    2 
 b/drivers/media/video/usbvision/usbvision-core.c          |   49 
 b/drivers/media/video/usbvision/usbvision-i2c.c           |  153 
 b/drivers/media/video/usbvision/usbvision-video.c         |  125 
 b/drivers/media/video/usbvision/usbvision.h               |   10 
 b/drivers/media/video/uvc/uvc_ctrl.c                      |    2 
 b/drivers/media/video/uvc/uvc_driver.c                    |   45 
 b/drivers/media/video/uvc/uvc_status.c                    |   16 
 b/drivers/media/video/uvc/uvc_v4l2.c                      |   20 
 b/drivers/media/video/uvc/uvc_video.c                     |  133 
 b/drivers/media/video/uvc/uvcvideo.h                      |    8 
 b/drivers/media/video/v4l2-common.c                       |  265 
 b/drivers/media/video/v4l2-compat-ioctl32.c               |    1 
 b/drivers/media/video/v4l2-dev.c                          |   54 
 b/drivers/media/video/v4l2-device.c                       |   60 
 b/drivers/media/video/v4l2-ioctl.c                        |  192 
 b/drivers/media/video/v4l2-subdev.c                       |   18 
 b/drivers/media/video/videobuf-dma-contig.c               |    2 
 b/drivers/media/video/videobuf-vmalloc.c                  |    2 
 b/drivers/media/video/vino.c                              | 1655 ++---
 b/drivers/media/video/vivi.c                              |  495 -
 b/drivers/media/video/vp27smpx.c                          |    7 
 b/drivers/media/video/vpx3220.c                           |  491 -
 b/drivers/media/video/w9966.c                             |    2 
 b/drivers/media/video/w9968cf.c                           |  133 
 b/drivers/media/video/w9968cf.h                           |   24 
 b/drivers/media/video/wm8739.c                            |    7 
 b/drivers/media/video/wm8775.c                            |   12 
 b/drivers/media/video/zc0301/zc0301_sensor.h              |    8 
 b/drivers/media/video/zoran/Kconfig                       |    8 
 b/drivers/media/video/zoran/videocodec.h                  |    9 
 b/drivers/media/video/zoran/zoran.h                       |   97 
 b/drivers/media/video/zoran/zoran_card.c                  |  555 -
 b/drivers/media/video/zoran/zoran_card.h                  |    3 
 b/drivers/media/video/zoran/zoran_device.c                |  529 -
 b/drivers/media/video/zoran/zoran_device.h                |   14 
 b/drivers/media/video/zoran/zoran_driver.c                | 4385 +++++---------
 b/drivers/media/video/zoran/zoran_procfs.c                |    2 
 b/drivers/media/video/zoran/zr36016.c                     |    5 
 b/drivers/media/video/zoran/zr36050.c                     |    4 
 b/drivers/media/video/zoran/zr36060.c                     |    4 
 b/drivers/media/video/zr364xx.c                           |   17 
 b/include/linux/Kbuild                                    |    2 
 b/include/linux/i2c-id.h                                  |    2 
 b/include/linux/ivtv.h                                    |   10 
 b/include/linux/videodev.h                                |   18 
 b/include/linux/videodev2.h                               |   69 
 b/include/media/bt819.h                                   |   33 
 b/include/media/cx2341x.h                                 |    6 
 b/include/media/cx25840.h                                 |   12 
 b/include/media/ir-common.h                               |    3 
 b/include/media/ir-kbd-i2c.h                              |    3 
 b/include/media/ov772x.h                                  |    5 
 b/include/media/saa7146.h                                 |    8 
 b/include/media/saa7146_vv.h                              |   17 
 b/include/media/sh_mobile_ceu.h                           |    5 
 b/include/media/soc_camera.h                              |   24 
 b/include/media/v4l2-chip-ident.h                         |   94 
 b/include/media/v4l2-common.h                             |   24 
 b/include/media/v4l2-dev.h                                |    2 
 b/include/media/v4l2-device.h                             |   40 
 b/include/media/v4l2-ioctl.h                              |    2 
 b/include/media/v4l2-subdev.h                             |   22 
 b/include/media/videobuf-core.h                           |    1 
 b/include/sound/tea575x-tuner.h                           |    8 
 b/sound/i2c/other/tea575x-tuner.c                         |  302 
 b/sound/pci/Kconfig                                       |    2 
 drivers/media/dvb/frontends/au8522.c                      |  874 --
 drivers/media/video/pvrusb2/pvrusb2-i2c-chips-v4l2.c      |  113 
 drivers/media/video/pvrusb2/pvrusb2-i2c-cmd-v4l2.c        |  322 -
 drivers/media/video/pvrusb2/pvrusb2-i2c-cmd-v4l2.h        |   50 
 drivers/media/video/pvrusb2/pvrusb2-tuner.c               |  120 
 drivers/media/video/pvrusb2/pvrusb2-tuner.h               |   37 
 drivers/media/video/saa7111.c                             |  492 -
 drivers/media/video/saa7114.c                             | 1068 ---
 drivers/media/video/tda9840.h                             |   14 
 include/linux/video_decoder.h                             |   48 
 include/linux/video_encoder.h                             |   23 
 linux-2.6.30.noarch/drivers/media/video/hdpvr/hdpvr-i2c.c |    2 
 493 files changed, 49378 insertions(+), 28221 deletions(-)

Index: linux-2.6-v4l-dvb-fixes.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/linux-2.6-v4l-dvb-fixes.patch,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -p -r1.16 -r1.17
--- linux-2.6-v4l-dvb-fixes.patch	25 Jul 2009 04:09:28 -0000	1.16
+++ linux-2.6-v4l-dvb-fixes.patch	4 Jan 2010 15:25:51 -0000	1.17
@@ -113202,3 +113202,14 @@ index 82b9bdd..6cc18bf 100644
  	help
  	  Say Y here to include support for soundcards based on the ForteMedia
  	  FM801 chip with a TEA5757 tuner connected to GPIO1-3 pins (Media
+--- linux-2.6.30.noarch/drivers/media/video/hdpvr/hdpvr-i2c.c~	2009-07-09 21:56:58.000000000 -0400
++++ linux-2.6.30.noarch/drivers/media/video/hdpvr/hdpvr-i2c.c	2009-07-09 21:57:34.000000000 -0400
+@@ -64,7 +64,7 @@ static int hdpvr_i2c_write(struct hdpvr_
+ 
+ 	ret = usb_control_msg(dev->udev,
+ 			      usb_rcvctrlpipe(dev->udev, 0),
+-			      REQTYPE_I2C_WRITE_STAT, CTRL_READ_REQUEST,
++			      REQTYPE_I2C_WRITE_STATT, CTRL_READ_REQUEST,
+ 			      0, 0, buf, 2, 1000);
+ 
+ 	if (ret == 2)


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/sources,v
retrieving revision 1.1022
retrieving revision 1.1023
diff -u -p -r1.1022 -r1.1023
--- sources	4 Dec 2009 06:44:03 -0000	1.1022
+++ sources	4 Jan 2010 15:25:59 -0000	1.1023
@@ -1,2 +1,2 @@
-7a80058a6382e5108cdb5554d1609615  linux-2.6.30.tar.bz2
-6485fe0cf0f0220493647505bfd2f7b0  patch-2.6.30.10.bz2
+260551284ac224c3a43c4adac7df4879  linux-2.6.32.tar.bz2
+924b7aa0fcd6e54c12ecc9b3c3082f59  patch-2.6.32.2.bz2


Index: upstream
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/upstream,v
retrieving revision 1.933
retrieving revision 1.934
diff -u -p -r1.933 -r1.934
--- upstream	4 Dec 2009 06:44:03 -0000	1.933
+++ upstream	4 Jan 2010 15:26:00 -0000	1.934
@@ -1,2 +1,2 @@
-linux-2.6.30.tar.bz2
-patch-2.6.30.10.bz2
+linux-2.6.32.tar.bz2
+patch-2.6.32.2.bz2

via-hwmon-temp-sensor.patch:
 Kconfig       |    8 +
 Makefile      |    1 
 via-cputemp.c |  354 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 363 insertions(+)

Index: via-hwmon-temp-sensor.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/via-hwmon-temp-sensor.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- via-hwmon-temp-sensor.patch	13 Jun 2009 02:07:58 -0000	1.1
+++ via-hwmon-temp-sensor.patch	4 Jan 2010 15:26:00 -0000	1.2
@@ -1,14 +1,10 @@
-Subject: hwmon: Add driver for VIA CPU core temperature
-Now at patch ../patches/1-linux-2.6-via.git-bb3796c7c8d2209e7c3ab112f32ec4dec63e0d48.patch
-
-Subject: hwmon: Make sure via-cputemp complies with hwmon conventions
-Now at patch ../patches/2-linux-2.6-via.git-d2891d15eeef1033893dcc524543e8ad8fef019f.patch
-
---- work-2.6.29.4.orig/drivers/hwmon/Kconfig
-+++ work-2.6.29.4/drivers/hwmon/Kconfig
-@@ -720,6 +720,14 @@ config SENSORS_THMC50
+diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
+index 6857560..4414182 100644
+--- a/drivers/hwmon/Kconfig
++++ b/drivers/hwmon/Kconfig
+@@ -795,6 +795,14 @@ config SENSORS_TMP421
  	  This driver can also be built as a module.  If so, the module
- 	  will be called thmc50.
+ 	  will be called tmp421.
  
 +config SENSORS_VIA_CPUTEMP
 +	tristate "VIA CPU temperature sensor"
@@ -21,18 +17,23 @@ Now at patch ../patches/2-linux-2.6-via.
  config SENSORS_VIA686A
  	tristate "VIA686A"
  	depends on PCI
---- work-2.6.29.4.orig/drivers/hwmon/Makefile
-+++ work-2.6.29.4/drivers/hwmon/Makefile
-@@ -75,6 +75,7 @@ obj-$(CONFIG_SENSORS_SMSC47B397)+= smsc4
- obj-$(CONFIG_SENSORS_SMSC47M1)	+= smsc47m1.o
- obj-$(CONFIG_SENSORS_SMSC47M192)+= smsc47m192.o
+diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
+index 9f46cb0..32ed56a 100644
+--- a/drivers/hwmon/Makefile
++++ b/drivers/hwmon/Makefile
+@@ -85,6 +85,7 @@ obj-$(CONFIG_SENSORS_SMSC47M192)+= smsc47m192.o
  obj-$(CONFIG_SENSORS_THMC50)	+= thmc50.o
+ obj-$(CONFIG_SENSORS_TMP401)	+= tmp401.o
+ obj-$(CONFIG_SENSORS_TMP421)	+= tmp421.o
 +obj-$(CONFIG_SENSORS_VIA_CPUTEMP)+= via-cputemp.o
  obj-$(CONFIG_SENSORS_VIA686A)	+= via686a.o
  obj-$(CONFIG_SENSORS_VT1211)	+= vt1211.o
  obj-$(CONFIG_SENSORS_VT8231)	+= vt8231.o
+diff --git a/drivers/hwmon/via-cputemp.c b/drivers/hwmon/via-cputemp.c
+new file mode 100644
+index 0000000..2abe516
 --- /dev/null
-+++ work-2.6.29.4/drivers/hwmon/via-cputemp.c
++++ b/drivers/hwmon/via-cputemp.c
 @@ -0,0 +1,354 @@
 +/*
 + * via-cputemp.c - Driver for VIA CPU core temperature monitoring


--- acpi-ec-merge-irq-and-poll-modes.patch DELETED ---


--- acpi-ec-restart-command-even-if-no-interrupts-from-ec.patch DELETED ---


--- acpi-ec-use-burst-mode-only-for-msi-notebooks.patch DELETED ---


--- acpi-revert-attach-device-to-handle-early.patch DELETED ---


--- af_unix-fix-deadlock-connecting-to-shutdown-socket.patch DELETED ---


--- agp-set_memory_ucwb.patch DELETED ---


--- appletalk-fix-skb-leak-when-ipddp-interface-is-not-loaded.patch DELETED ---


--- ax25-fix-possible-oops-in-ax25_make_new.patch DELETED ---


--- branch DELETED ---


--- config-i586 DELETED ---


--- config-powerpc64-kdump DELETED ---


--- config-sparc64-smp DELETED ---


--- disable-stackprotector-all.patch DELETED ---


--- drm-dont-frob-i2c.patch DELETED ---


--- drm-i915-enable-mchbar.patch DELETED ---


--- drm-intel-gem-use-dma32-on-pae.patch DELETED ---


--- drm-intel-gen3-fb-hack.patch DELETED ---


--- drm-intel-hdmi-edid-fix.patch DELETED ---


--- drm-modesetting-radeon-fixes.patch DELETED ---


--- drm-modesetting-radeon.patch DELETED ---


--- drm-no-gem-on-i8xx.patch DELETED ---


--- drm-pnp-add-resource-range-checker.patch DELETED ---


--- drm-r128-add-test-for-initialisation-to-all-ioctls-that-require-it.patch DELETED ---


--- drm-radeon-cs-oops-fix.patch DELETED ---


--- drm-radeon-new-pciids.patch DELETED ---


--- drm-silence-pointless-vblank-warning.patch DELETED ---


--- ecryptfs-check-for-o_rdonly-lower-inodes-when-opening-lower-files.patch DELETED ---


--- ecryptfs-filename-encryption-only-supports-password-auth-tokens.patch DELETED ---


--- ecryptfs-handle-unrecognized-tag-3-cipher-codes.patch DELETED ---


--- ecryptfs-prevent-lower-dentry-from-going-negative-during-unlink.patch DELETED ---


--- ecryptfs-validate-global-auth-tok-keys.patch DELETED ---


--- forcedeth-fix-napi-race.patch DELETED ---


--- fs-pipe-null-ptr-deref-fix.patch DELETED ---


--- ftrace-check-for-failure-for-all-conversions.patch DELETED ---


--- ftrace-use-module-notifier-for-function-tracer.patch DELETED ---


--- fuse-fix-kunmap-in-fuse_ioctl_copy_user.patch DELETED ---


--- fuse-prevent-fuse_put_request-in-invalid-ptr.patch DELETED ---


--- hda-check-strcpy-length.patch DELETED ---


--- hid-ignore-all-recent-imon-devices.patch DELETED ---


--- hostap-revert-toxic-part-of-conversion.patch DELETED ---


--- input-i8042-bypass-aux-irq-delivery-test-on-laptops.patch DELETED ---


--- input-i8042-try-disabling-and-re-enabling-aux-port-at-close.patch DELETED ---


--- keys-get_instantiation_keyring-should-inc-the-keyring-refcount.patch DELETED ---


--- kvm-prevent-overflow-in-kvm-get-supported-cpuid.patch DELETED ---


--- libata-fix-incorrect-link-online-check-during-probe.patch DELETED ---


--- linux-2.6-btrfs-experimental-branch.patch DELETED ---


--- linux-2.6-cfq-choose-new-next-req.patch DELETED ---


--- linux-2.6-cpufreq-cleanup-locking-in-ondemand.patch DELETED ---


--- linux-2.6-cpufreq-eliminate-lockdep-warnings.patch DELETED ---


--- linux-2.6-cpufreq-enable-acpi-pstates-on-via.patch DELETED ---


--- linux-2.6-defaults-die-floppy-die.patch DELETED ---


--- linux-2.6-defaults-saner-vm-settings.patch DELETED ---


--- linux-2.6-drivers-char-low-latency-removal.patch DELETED ---


--- linux-2.6-ecryptfs-overflow-fixes.patch DELETED ---


--- linux-2.6-ext4-prealloc-fixes.patch DELETED ---


--- linux-2.6-fs-cifs-fix-port-numbers.patch DELETED ---


--- linux-2.6-input-wacom-bluetooth.patch DELETED ---


--- linux-2.6-iwlwifi_-fix-TX-queue-race.patch DELETED ---


--- linux-2.6-kvm-skip-pit-check.patch DELETED ---


--- linux-2.6-libertas-crash.patch DELETED ---


--- linux-2.6-missing-rfc2465-stats.patch DELETED ---


--- linux-2.6-mm-lru-dont-evict-mapped-executable-pages.patch DELETED ---


--- linux-2.6-mm-lru-evict-streaming-io-pages-first.patch DELETED ---


--- linux-2.6-mm-lru-report-vm-flags-in-page-referenced.patch DELETED ---


--- linux-2.6-neigh_-fix-state-transition-INCOMPLETE-_FAILED-via-Netlink-request.patch DELETED ---


--- linux-2.6-ppc64-vs-broadcom-lmb-no-init-1.patch DELETED ---


--- linux-2.6-ppc64-vs-broadcom-lmb-no-init-2.patch DELETED ---


--- linux-2.6-ppc64-vs-broadcom.patch DELETED ---


--- linux-2.6-serial-add-txen-test-param.patch DELETED ---


--- linux-2.6-sysrq-c.patch DELETED ---


--- linux-2.6-utrace-ftrace.patch DELETED ---


--- linux-2.6-v4l-dvb-af9015-fix-stack-corruption.patch DELETED ---


--- linux-2.6-virtio-net-refill-on-out-of-memory.patch DELETED ---


--- linux-2.6-virtio_blk-dont-bounce-highmem-requests.patch DELETED ---


--- linux-2.6-virtio_blk-revert-QUEUE_FLAG_VIRT-addition.patch DELETED ---


--- linux-2.6-x86-delay-tsc-barrier.patch DELETED ---


--- linux-2.6-x86-load-percpu-segment-no-stackprotector.patch DELETED ---


--- linux-2.6-xen-clean-up-warnings.patch DELETED ---


--- linux-2.6-xen-fix-brkpoints-hw-watchpoints.patch DELETED ---


--- linux-2.6-xen-rearrange-to-fix-stackprotector.patch DELETED ---


--- linux-2.6-xfrm-export-gc_thresh.patch DELETED ---


--- linux-2.6-zd1211rw_-adding-083a_e503-as-a-ZD1211B-device.patch DELETED ---


--- linux-2.6.29-xen-disable-gbpages.patch DELETED ---


--- linux-2.6.30-cpuidle-faster-io.patch DELETED ---


--- linux-2.6.30.tar.bz2.sign DELETED ---


--- lirc-2.6.31.patch DELETED ---


--- lirc-revert-2.6.31-i2c-changes.patch DELETED ---


--- make-mmap_min_addr-suck-less.patch DELETED ---


--- net-fix-wrong-sizeof.patch DELETED ---


--- net-unix-fix-sending-fds-in-multiple-buffers.patch DELETED ---


--- netlink-fix-typo-in-initialization.patch DELETED ---


--- patch-2.6.30.10.bz2.sign DELETED ---


--- sata_nv-make-sure-link-is-brough-up-online-when-skipping-hardreset.patch DELETED ---


--- sata_nv-use-hardreset-only-for-post-boot-probing.patch DELETED ---


--- sched-deal-with-low-load-in-wake-affine.patch DELETED ---


--- sched-ensure-child-cant-gain-time-over-its-parent-after-fork.patch DELETED ---


--- sched-remove-shortcut-from-select-task-rq-fair.patch DELETED ---


--- sched-retune-scheduler-latency-defaults.patch DELETED ---


--- sched-update-the-clock-of-runqueue-select-task-rq-selected.patch DELETED ---


--- shut-up-LOCK_TEST_WITH_RETURN.patch DELETED ---


--- sit-fix-off-by-one-in-ipip6_tunnel_get_prl.patch DELETED ---


--- sky2-set-sky2_hw_ram_buffer-in-sky2_init.patch DELETED ---


--- smsc95xx-fix-transmission-where-zlp-is-expected.patch DELETED ---


--- tcp-fix-config_tcp_md5sig-config_preempt-timer-bug.patch DELETED ---


--- tracing-correct-module-boundaries-for-ftrace_release.patch DELETED ---


--- v4l-dvb-fix-cx25840-firmware-load.patch DELETED ---


--- via-padlock-10-enable-64bit.patch DELETED ---


--- via-padlock-20-add-x86-dependency.patch DELETED ---


--- via-padlock-30-fix-might-sleep.patch DELETED ---


--- via-padlock-40-nano-ecb.patch DELETED ---


--- via-padlock-50-nano-cbc.patch DELETED ---


--- via-rng-enable-64bit.patch DELETED ---


--- via-sdmmc.patch DELETED ---


--- x86-dont-leak-64-bit-kernel-register-values.patch DELETED ---


--- x86-fix-csum_ipv6_magic-asm-memory-clobber.patch DELETED ---


--- x86-increase-min_gap-to-include-randomized-stack.patch DELETED ---




More information about the scm-commits mailing list