rpms/kernel/F-12 drm-intel-big-hammer.patch, 1.2, 1.3 drm-next.patch, 1.19, 1.20 drm-page-flip.patch, 1.9, 1.10 drm-radeon-dp-support.patch, NONE, 1.1 drm-radeon-fix-crtc-vbl-update-for-r600.patch, NONE, 1.1 drm-radeon-fixes.patch, 1.2, 1.3 fix-9p-fscache.patch, NONE, 1.1 linux-2.6-autoload-wmi.patch, 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, 1.3, 1.4 linux-2.6-intel-agp-clear-gtt.patch, NONE, 1.1 linux-2.6-mac80211-age-scan-results-on-resume.patch, 1.2, 1.3 linux-2.6-nfsd4-proots.patch, 1.5, 1.6 linux-2.6-revert-dvb-net-kabi-change.patch, 1.2, 1.3 linux-2.6-rt2x00-asus-leds.patch, 1.2, 1.3 linux-2.6-userspace_kvmclock_offset.patch, NONE, 1.1 linux-2.6-utrace-ptrace.patch, NONE, 1.1 linux-2.6.31-modules-ro-nx.patch, 1.2, 1.3 linux-2.6.31-nx-data.patch, 1.2, 1.3 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 Makefile, 1.114, 1.115 TODO, 1.66, 1.67 config-arm, 1.4, 1.5 config-debug, 1.30, 1.31 config-generic, 1.332, 1.333 config-ia64-generic, 1.26, 1.27 config-nodebug, 1.40, 1.41 config-powerpc-generic, 1.50, 1.51 config-powerpc32-generic, 1.35, 1.36 config-powerpc64, 1.35, 1.36 config-s390x, 1.18, 1.19 config-sparc64-generic, 1.28, 1.29 config-x86-generic, 1.91, 1.92 config-x86_64-generic, 1.96, 1.97 drm-nouveau.patch, 1.73, 1.74 ext4-fix-insufficient-checks-in-EXT4_IOC_MOVE_EXT.patch, 1.1, 1.2 gen-patches, 1.5, 1.6 hdpvr-ir-enable.patch, 1.5, 1.6 kernel.spec, 1.1960, 1.1961 linux-2.6-build-nonintconfig.patch, 1.15, 1.16 linux-2.6-crash-driver.patch, 1.15, 1.16 linux-2.6-debug-sizeof-structs.patch, 1.7, 1.8 linux-2.6-debug-vm-would-have-oomkilled.patch, 1.4, 1.5 linux-2.6-driver-level-usb-autosuspend.diff, 1.1, 1.2 linux-2.6-execshield.patch, 1.109, 1.110 linux-2.6-firewire-git-update.patch, 1.21, 1.22 linux-2.6-ksm-kvm.patch, 1.4, 1.5 linux-2.6-makefile-after_link.patch, 1.1, 1.2 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.9, 1.10 linux-2.6-utrace.patch, 1.117, 1.118 linux-2.6-v4l-dvb-experimental.patch, 1.9, 1.10 linux-2.6-v4l-dvb-fixes.patch, 1.14, 1.15 linux-2.6-v4l-dvb-update.patch, 1.15, 1.16 sources, 1.1094, 1.1095 upstream, 1.1008, 1.1009 via-hwmon-temp-sensor.patch, 1.3, 1.4 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 alsa-tell-user-that-stream-to-be-rewound-is-suspended.patch, 1.1, NONE branch, 1.1, NONE disable-stackprotector-all.patch, 1.1, NONE dlm-fix-connection-close-handling.patch, 1.1, NONE drm-edid-9340d8cf.patch, 1.1, NONE drm-i915-fix-tvmode-oops.patch, 1.1, NONE drm-intel-no-tv-hotplug.patch, 1.1, NONE drm-next-b390f944.patch, 1.2, NONE drm-radeon-kms-arbiter-return-ignore.patch, 1.1, NONE drm-radeon-misc-fixes.patch, 1.1, NONE drm-radeon-rv410-test-fix.patch, 1.1, NONE drm-vga-arb.patch, 1.9, NONE fbcon-lower-debug.patch, 1.1, NONE hid-ignore-all-recent-imon-devices.patch, 1.1, NONE improve-resource-counter-scalability.patch, 1.1, NONE kms-offb-handoff.patch, 1.1, NONE linux-2.6-ahci-export-capabilities.patch, 1.1, NONE linux-2.6-alsa-improve-hda-powerdown.patch, 1.1, NONE linux-2.6-ath9k-fixes.patch, 1.1, NONE linux-2.6-bluetooth-autosuspend.diff, 1.3, NONE linux-2.6-btrfs-upstream.patch, 1.1, NONE linux-2.6-die-closed-source-bios-muppets-die.patch, 1.2, NONE linux-2.6-intel-iommu-updates.patch, 1.5, NONE linux-2.6-iommu-another-hp-screwup.patch, 1.1, NONE linux-2.6-iommu-at-zero.patch, 1.2, NONE linux-2.6-iommu-dmar-all-1s.patch, 1.1, NONE linux-2.6-iommu-hp-cantiga-resume.patch, 1.1, NONE linux-2.6-iommu-sanity-checks-for-intr-remap-too.patch, 1.1, NONE linux-2.6-ksm-fix-munlock.patch, 1.1, NONE linux-2.6-ksm-updates-from-32.patch, 1.1, NONE linux-2.6-ksm-updates.patch, 1.1, NONE linux-2.6-ksm.patch, 1.3, NONE linux-2.6-nfs4-ver4opt.patch, 1.1, NONE linux-2.6-rtc-show-hctosys.patch, 1.1, NONE linux-2.6-selinux-module-load-perms.patch, 1.1, NONE linux-2.6-vga-arb.patch, 1.7, NONE linux-2.6-virtio_blk-add-support-for-cache-flush.patch, 1.1, NONE linux-2.6-virtio_blk-revert-QUEUE_FLAG_VIRT-addition.patch, 1.1, NONE linux-2.6-xen-fix-is_disconnected_device-exists_disconnected_device.patch, 1.1, NONE linux-2.6-xen-improvement-to-wait_for_devices.patch, 1.1, NONE linux-2.6-xen-increase-device-connection-timeout.patch, 1.1, NONE linux-2.6.31-copy_from_user-bounds.patch, 1.3, NONE linux-2.6.31-cpuidle-faster-io.patch, 1.2, NONE linux-2.6.31-nfsd-proot.patch, 1.1, NONE linux-2.6.31.tar.bz2.sign, 1.1, NONE lirc-2.6.31.patch, 1.5, NONE patch-2.6.31.9.bz2.sign, 1.1, NONE perf-events-dont-generate-events-for-the-idle-task.patch, 1.1, NONE perf-events-fix-swevent-hrtimer-sampling.patch, 1.1, NONE perf-make-perf-counter-h-available-to-userspace.patch, 1.1, NONE prism54-remove-pci-dev-table.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-introduce-SCHED_RESET_ON_FORK-scheduling-policy-flag.patch, 1.3, 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 tg3-01-delay-mdio-bus-init-until-fw-finishes.patch, 1.1, NONE tg3-02-fix-tso-test-against-wrong-flags-var.patch, 1.1, NONE tg3-03-fix-57780-asic-rev-pcie-link-receiver-errors.patch, 1.1, NONE tg3-04-prevent-tx-bd-corruption.patch, 1.1, NONE tg3-05-assign-flags-to-fixes-in-start_xmit_dma_bug.patch, 1.1, NONE tg3-06-fix-5906-transmit-hangs.patch, 1.1, NONE

Kyle McMartin kyle at fedoraproject.org
Mon Jan 4 15:44:19 UTC 2010


Author: kyle

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

Modified Files:
	Makefile TODO config-arm config-debug config-generic 
	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-nouveau.patch 
	ext4-fix-insufficient-checks-in-EXT4_IOC_MOVE_EXT.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-sizeof-structs.patch 
	linux-2.6-debug-vm-would-have-oomkilled.patch 
	linux-2.6-driver-level-usb-autosuspend.diff 
	linux-2.6-execshield.patch linux-2.6-firewire-git-update.patch 
	linux-2.6-ksm-kvm.patch linux-2.6-makefile-after_link.patch 
	linux-2.6-serial-460800.patch 
	linux-2.6-silence-acpi-blacklist.patch 
	linux-2.6-tracehook.patch linux-2.6-utrace.patch 
	linux-2.6-v4l-dvb-experimental.patch 
	linux-2.6-v4l-dvb-fixes.patch linux-2.6-v4l-dvb-update.patch 
	sources upstream via-hwmon-temp-sensor.patch 
Added Files:
	drm-intel-big-hammer.patch drm-next.patch drm-page-flip.patch 
	drm-radeon-dp-support.patch 
	drm-radeon-fix-crtc-vbl-update-for-r600.patch 
	drm-radeon-fixes.patch fix-9p-fscache.patch 
	linux-2.6-autoload-wmi.patch 
	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-mac80211-age-scan-results-on-resume.patch 
	linux-2.6-nfsd4-proots.patch 
	linux-2.6-revert-dvb-net-kabi-change.patch 
	linux-2.6-rt2x00-asus-leds.patch 
	linux-2.6-userspace_kvmclock_offset.patch 
	linux-2.6-utrace-ptrace.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 
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 
	alsa-tell-user-that-stream-to-be-rewound-is-suspended.patch 
	branch disable-stackprotector-all.patch 
	dlm-fix-connection-close-handling.patch 
	drm-edid-9340d8cf.patch drm-i915-fix-tvmode-oops.patch 
	drm-intel-no-tv-hotplug.patch drm-next-b390f944.patch 
	drm-radeon-kms-arbiter-return-ignore.patch 
	drm-radeon-misc-fixes.patch drm-radeon-rv410-test-fix.patch 
	drm-vga-arb.patch fbcon-lower-debug.patch 
	hid-ignore-all-recent-imon-devices.patch 
	improve-resource-counter-scalability.patch 
	kms-offb-handoff.patch 
	linux-2.6-ahci-export-capabilities.patch 
	linux-2.6-alsa-improve-hda-powerdown.patch 
	linux-2.6-ath9k-fixes.patch 
	linux-2.6-bluetooth-autosuspend.diff 
	linux-2.6-btrfs-upstream.patch 
	linux-2.6-die-closed-source-bios-muppets-die.patch 
	linux-2.6-intel-iommu-updates.patch 
	linux-2.6-iommu-another-hp-screwup.patch 
	linux-2.6-iommu-at-zero.patch 
	linux-2.6-iommu-dmar-all-1s.patch 
	linux-2.6-iommu-hp-cantiga-resume.patch 
	linux-2.6-iommu-sanity-checks-for-intr-remap-too.patch 
	linux-2.6-ksm-fix-munlock.patch 
	linux-2.6-ksm-updates-from-32.patch 
	linux-2.6-ksm-updates.patch linux-2.6-ksm.patch 
	linux-2.6-nfs4-ver4opt.patch linux-2.6-rtc-show-hctosys.patch 
	linux-2.6-selinux-module-load-perms.patch 
	linux-2.6-vga-arb.patch 
	linux-2.6-virtio_blk-add-support-for-cache-flush.patch 
	linux-2.6-virtio_blk-revert-QUEUE_FLAG_VIRT-addition.patch 
	linux-2.6-xen-fix-is_disconnected_device-exists_disconnected_device.patch 
	linux-2.6-xen-improvement-to-wait_for_devices.patch 
	linux-2.6-xen-increase-device-connection-timeout.patch 
	linux-2.6.31-copy_from_user-bounds.patch 
	linux-2.6.31-cpuidle-faster-io.patch 
	linux-2.6.31-nfsd-proot.patch linux-2.6.31.tar.bz2.sign 
	lirc-2.6.31.patch patch-2.6.31.9.bz2.sign 
	perf-events-dont-generate-events-for-the-idle-task.patch 
	perf-events-fix-swevent-hrtimer-sampling.patch 
	perf-make-perf-counter-h-available-to-userspace.patch 
	prism54-remove-pci-dev-table.patch 
	sched-deal-with-low-load-in-wake-affine.patch 
	sched-ensure-child-cant-gain-time-over-its-parent-after-fork.patch 
	sched-introduce-SCHED_RESET_ON_FORK-scheduling-policy-flag.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 
	tg3-01-delay-mdio-bus-init-until-fw-finishes.patch 
	tg3-02-fix-tso-test-against-wrong-flags-var.patch 
	tg3-03-fix-57780-asic-rev-pcie-link-receiver-errors.patch 
	tg3-04-prevent-tx-bd-corruption.patch 
	tg3-05-assign-flags-to-fixes-in-start_xmit_dma_bug.patch 
	tg3-06-fix-5906-transmit-hangs.patch 
Log Message:
* Fri Jan  1 2010 Kyle McMartin <kyle at redhat.com> 2.6.32.2-1
- Rebased F-12 to 2.6.32, still needs forward porting of patches.


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

Index: drm-intel-big-hammer.patch
===================================================================
RCS file: drm-intel-big-hammer.patch
diff -N drm-intel-big-hammer.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ drm-intel-big-hammer.patch	4 Jan 2010 15:44:10 -0000	1.3
@@ -0,0 +1,16 @@
+diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
+index 37427e4..08af9db 100644
+--- a/drivers/gpu/drm/i915/i915_gem.c
++++ b/drivers/gpu/drm/i915/i915_gem.c
+@@ -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 hamer for now to avoid random crashiness. */
++	if (IS_I855(dev) || IS_I865G(dev))
++		wbinvd();
++
+ 	i915_verify_inactive(dev, __FILE__, __LINE__);
+ 
+ 	if (dev_priv->mm.wedged) {

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: drm-next.patch
diff -N drm-next.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ drm-next.patch	4 Jan 2010 15:44:11 -0000	1.20
@@ -0,0 +1,81284 @@
+diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
+index 39b393d..e4d971c 100644
+--- a/drivers/gpu/drm/Kconfig
++++ b/drivers/gpu/drm/Kconfig
+@@ -18,6 +18,14 @@ menuconfig DRM
+ 	  details.  You should also select and configure AGP
+ 	  (/dev/agpgart) support.
+ 
++config DRM_KMS_HELPER
++	tristate
++	depends on DRM
++	select FB
++	select FRAMEBUFFER_CONSOLE if !EMBEDDED
++	help
++	  FB and CRTC helpers for KMS drivers.
++
+ config DRM_TTM
+ 	tristate
+ 	depends on DRM
+@@ -36,6 +44,7 @@ config DRM_TDFX
+ config DRM_R128
+ 	tristate "ATI Rage 128"
+ 	depends on DRM && PCI
++	select FW_LOADER
+ 	help
+ 	  Choose this option if you have an ATI Rage 128 graphics card.  If M
+ 	  is selected, the module will be called r128.  AGP support for
+@@ -47,8 +56,9 @@ config DRM_RADEON
+ 	select FB_CFB_FILLRECT
+ 	select FB_CFB_COPYAREA
+ 	select FB_CFB_IMAGEBLIT
+-	select FB
+-	select FRAMEBUFFER_CONSOLE if !EMBEDDED
++	select FW_LOADER
++        select DRM_KMS_HELPER
++        select DRM_TTM
+ 	help
+ 	  Choose this option if you have an ATI Radeon graphics card.  There
+ 	  are both PCI and AGP versions.  You don't need to choose this to
+@@ -82,11 +92,10 @@ config DRM_I830
+ config DRM_I915
+ 	tristate "i915 driver"
+ 	depends on AGP_INTEL
++	select DRM_KMS_HELPER
+ 	select FB_CFB_FILLRECT
+ 	select FB_CFB_COPYAREA
+ 	select FB_CFB_IMAGEBLIT
+-	select FB
+-	select FRAMEBUFFER_CONSOLE if !EMBEDDED
+ 	# i915 depends on ACPI_VIDEO when ACPI is enabled
+ 	# but for select to work, need to select ACPI_VIDEO's dependencies, ick
+ 	select VIDEO_OUTPUT_CONTROL if ACPI
+@@ -116,6 +125,7 @@ endchoice
+ config DRM_MGA
+ 	tristate "Matrox g200/g400"
+ 	depends on DRM
++	select FW_LOADER
+ 	help
+ 	  Choose this option if you have a Matrox G200, G400 or G450 graphics
+ 	  card.  If M is selected, the module will be called mga.  AGP
+diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
+index fe23f29..3c8827a 100644
+--- a/drivers/gpu/drm/Makefile
++++ b/drivers/gpu/drm/Makefile
+@@ -10,11 +10,15 @@ drm-y       :=	drm_auth.o drm_bufs.o drm_cache.o \
+ 		drm_lock.o drm_memory.o drm_proc.o drm_stub.o drm_vm.o \
+ 		drm_agpsupport.o drm_scatter.o ati_pcigart.o drm_pci.o \
+ 		drm_sysfs.o drm_hashtab.o drm_sman.o drm_mm.o \
+-		drm_crtc.o drm_crtc_helper.o drm_modes.o drm_edid.o \
+-		drm_info.o drm_debugfs.o
++		drm_crtc.o drm_modes.o drm_edid.o \
++		drm_info.o drm_debugfs.o drm_encoder_slave.o
+ 
+ drm-$(CONFIG_COMPAT) += drm_ioc32.o
+ 
++drm_kms_helper-y := drm_fb_helper.o drm_crtc_helper.o
++
++obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o
++
+ obj-$(CONFIG_DRM)	+= drm.o
+ obj-$(CONFIG_DRM_TTM)	+= ttm/
+ obj-$(CONFIG_DRM_TDFX)	+= tdfx/
+diff --git a/drivers/gpu/drm/drm_cache.c b/drivers/gpu/drm/drm_cache.c
+index 0e994a0..0e3bd5b 100644
+--- a/drivers/gpu/drm/drm_cache.c
++++ b/drivers/gpu/drm/drm_cache.c
+@@ -45,6 +45,23 @@ drm_clflush_page(struct page *page)
+ 		clflush(page_virtual + i);
+ 	kunmap_atomic(page_virtual, KM_USER0);
+ }
++
++static void drm_cache_flush_clflush(struct page *pages[],
++				    unsigned long num_pages)
++{
++	unsigned long i;
++
++	mb();
++	for (i = 0; i < num_pages; i++)
++		drm_clflush_page(*pages++);
++	mb();
++}
++
++static void
++drm_clflush_ipi_handler(void *null)
++{
++	wbinvd();
++}
+ #endif
+ 
+ void
+@@ -53,17 +70,30 @@ drm_clflush_pages(struct page *pages[], unsigned long num_pages)
+ 
+ #if defined(CONFIG_X86)
+ 	if (cpu_has_clflush) {
+-		unsigned long i;
+-
+-		mb();
+-		for (i = 0; i < num_pages; ++i)
+-			drm_clflush_page(*pages++);
+-		mb();
+-
++		drm_cache_flush_clflush(pages, num_pages);
+ 		return;
+ 	}
+ 
+-	wbinvd();
++	if (on_each_cpu(drm_clflush_ipi_handler, NULL, 1) != 0)
++		printk(KERN_ERR "Timed out waiting for cache flush.\n");
++
++#elif defined(__powerpc__)
++	unsigned long i;
++	for (i = 0; i < num_pages; i++) {
++		struct page *page = pages[i];
++		void *page_virtual;
++
++		if (unlikely(page == NULL))
++			continue;
++
++		page_virtual = kmap_atomic(page, KM_USER0);
++		flush_dcache_range((unsigned long)page_virtual,
++				   (unsigned long)page_virtual + PAGE_SIZE);
++		kunmap_atomic(page_virtual, KM_USER0);
++	}
++#else
++	printk(KERN_ERR "Architecture has no drm_cache.c support\n");
++	WARN_ON_ONCE(1);
+ #endif
+ }
+ EXPORT_SYMBOL(drm_clflush_pages);
+diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
+index 2f631c7..ba728ad 100644
+--- a/drivers/gpu/drm/drm_crtc.c
++++ b/drivers/gpu/drm/drm_crtc.c
+@@ -68,10 +68,10 @@ DRM_ENUM_NAME_FN(drm_get_dpms_name, drm_dpms_enum_list)
+  */
+ static struct drm_prop_enum_list drm_scaling_mode_enum_list[] =
+ {
+-	{ DRM_MODE_SCALE_NON_GPU, "Non-GPU" },
+-	{ DRM_MODE_SCALE_FULLSCREEN, "Fullscreen" },
+-	{ DRM_MODE_SCALE_NO_SCALE, "No scale" },
+-	{ DRM_MODE_SCALE_ASPECT, "Aspect" },
++	{ DRM_MODE_SCALE_NONE, "None" },
++	{ DRM_MODE_SCALE_FULLSCREEN, "Full" },
++	{ DRM_MODE_SCALE_CENTER, "Center" },
++	{ DRM_MODE_SCALE_ASPECT, "Full aspect" },
+ };
+ 
+ static struct drm_prop_enum_list drm_dithering_mode_enum_list[] =
+@@ -108,6 +108,7 @@ static struct drm_prop_enum_list drm_tv_select_enum_list[] =
+ 	{ DRM_MODE_SUBCONNECTOR_Composite, "Composite" }, /* TV-out */
+ 	{ DRM_MODE_SUBCONNECTOR_SVIDEO,    "SVIDEO"    }, /* TV-out */
+ 	{ DRM_MODE_SUBCONNECTOR_Component, "Component" }, /* TV-out */
++	{ DRM_MODE_SUBCONNECTOR_SCART,     "SCART"     }, /* TV-out */
+ };
+ 
+ DRM_ENUM_NAME_FN(drm_get_tv_select_name, drm_tv_select_enum_list)
+@@ -118,6 +119,7 @@ static struct drm_prop_enum_list drm_tv_subconnector_enum_list[] =
+ 	{ DRM_MODE_SUBCONNECTOR_Composite, "Composite" }, /* TV-out */
+ 	{ DRM_MODE_SUBCONNECTOR_SVIDEO,    "SVIDEO"    }, /* TV-out */
+ 	{ DRM_MODE_SUBCONNECTOR_Component, "Component" }, /* TV-out */
++	{ DRM_MODE_SUBCONNECTOR_SCART,     "SCART"     }, /* TV-out */
+ };
+ 
+ DRM_ENUM_NAME_FN(drm_get_tv_subconnector_name,
+@@ -146,6 +148,7 @@ static struct drm_conn_prop_enum_list drm_connector_enum_list[] =
+ 	{ DRM_MODE_CONNECTOR_DisplayPort, "DisplayPort", 0 },
+ 	{ DRM_MODE_CONNECTOR_HDMIA, "HDMI Type A", 0 },
+ 	{ DRM_MODE_CONNECTOR_HDMIB, "HDMI Type B", 0 },
++	{ DRM_MODE_CONNECTOR_TV, "TV", 0 },
+ };
+ 
+ static struct drm_prop_enum_list drm_encoder_enum_list[] =
+@@ -165,6 +168,7 @@ char *drm_get_encoder_name(struct drm_encoder *encoder)
[...80891 lines suppressed...]
++ */
++
++struct ttm_bo_global {
++
++	/**
++	 * Constant after init.
++	 */
++
++	struct kobject kobj;
++	struct ttm_mem_global *mem_glob;
++	struct page *dummy_read_page;
++	struct ttm_mem_shrink shrink;
++	size_t ttm_bo_extra_size;
++	size_t ttm_bo_size;
++	struct mutex device_list_mutex;
++	spinlock_t lru_lock;
++
++	/**
++	 * Protected by device_list_mutex.
++	 */
++	struct list_head device_list;
++
++	/**
++	 * Protected by the lru_lock.
++	 */
++	struct list_head swap_lru;
++
++	/**
++	 * Internal protection.
++	 */
++	atomic_t bo_count;
++};
++
++
++#define TTM_NUM_MEM_TYPES 8
++
++#define TTM_BO_PRIV_FLAG_MOVING  0	/* Buffer object is moving and needs
++					   idling before CPU mapping */
++#define TTM_BO_PRIV_FLAG_MAX 1
++/**
++ * struct ttm_bo_device - Buffer object driver device-specific data.
++ *
++ * @driver: Pointer to a struct ttm_bo_driver struct setup by the driver.
+  * @man: An array of mem_type_managers.
+  * @addr_space_mm: Range manager for the device address space.
+  * lru_lock: Spinlock that protects the buffer+device lru lists and
+@@ -399,32 +449,21 @@ struct ttm_bo_device {
+ 	/*
+ 	 * Constant after bo device init / atomic.
+ 	 */
+-
+-	struct ttm_mem_global *mem_glob;
++	struct list_head device_list;
++	struct ttm_bo_global *glob;
+ 	struct ttm_bo_driver *driver;
+-	struct page *dummy_read_page;
+-	struct ttm_mem_shrink shrink;
+-
+-	size_t ttm_bo_extra_size;
+-	size_t ttm_bo_size;
+-
+ 	rwlock_t vm_lock;
++	struct ttm_mem_type_manager man[TTM_NUM_MEM_TYPES];
+ 	/*
+ 	 * Protected by the vm lock.
+ 	 */
+-	struct ttm_mem_type_manager man[TTM_NUM_MEM_TYPES];
+ 	struct rb_root addr_space_rb;
+ 	struct drm_mm addr_space_mm;
+ 
+ 	/*
+-	 * Might want to change this to one lock per manager.
+-	 */
+-	spinlock_t lru_lock;
+-	/*
+-	 * Protected by the lru lock.
++	 * Protected by the global:lru lock.
+ 	 */
+ 	struct list_head ddestroy;
+-	struct list_head swap_lru;
+ 
+ 	/*
+ 	 * Protected by load / firstopen / lastclose /unload sync.
+@@ -640,6 +679,9 @@ extern int ttm_bo_pci_offset(struct ttm_bo_device *bdev,
+ 			     unsigned long *bus_offset,
+ 			     unsigned long *bus_size);
+ 
++extern void ttm_bo_global_release(struct ttm_global_reference *ref);
++extern int ttm_bo_global_init(struct ttm_global_reference *ref);
++
+ extern int ttm_bo_device_release(struct ttm_bo_device *bdev);
+ 
+ /**
+@@ -657,7 +699,7 @@ extern int ttm_bo_device_release(struct ttm_bo_device *bdev);
+  * !0: Failure.
+  */
+ extern int ttm_bo_device_init(struct ttm_bo_device *bdev,
+-			      struct ttm_mem_global *mem_glob,
++			      struct ttm_bo_global *glob,
+ 			      struct ttm_bo_driver *driver,
+ 			      uint64_t file_page_offset, bool need_dma32);
+ 
+diff --git a/include/drm/ttm/ttm_memory.h b/include/drm/ttm/ttm_memory.h
+index d8b8f04..6983a7c 100644
+--- a/include/drm/ttm/ttm_memory.h
++++ b/include/drm/ttm/ttm_memory.h
+@@ -32,6 +32,7 @@
+ #include <linux/spinlock.h>
+ #include <linux/wait.h>
+ #include <linux/errno.h>
++#include <linux/kobject.h>
+ 
+ /**
+  * struct ttm_mem_shrink - callback to shrink TTM memory usage.
+@@ -60,34 +61,33 @@ struct ttm_mem_shrink {
+  * @queue: Wait queue for processes suspended waiting for memory.
+  * @lock: Lock to protect the @shrink - and the memory accounting members,
+  * that is, essentially the whole structure with some exceptions.
+- * @emer_memory: Lowmem memory limit available for root.
+- * @max_memory: Lowmem memory limit available for non-root.
+- * @swap_limit: Lowmem memory limit where the shrink workqueue kicks in.
+- * @used_memory: Currently used lowmem memory.
+- * @used_total_memory: Currently used total (lowmem + highmem) memory.
+- * @total_memory_swap_limit: Total memory limit where the shrink workqueue
+- * kicks in.
+- * @max_total_memory: Total memory available to non-root processes.
+- * @emer_total_memory: Total memory available to root processes.
++ * @zones: Array of pointers to accounting zones.
++ * @num_zones: Number of populated entries in the @zones array.
++ * @zone_kernel: Pointer to the kernel zone.
++ * @zone_highmem: Pointer to the highmem zone if there is one.
++ * @zone_dma32: Pointer to the dma32 zone if there is one.
+  *
+  * Note that this structure is not per device. It should be global for all
+  * graphics devices.
+  */
+ 
++#define TTM_MEM_MAX_ZONES 2
++struct ttm_mem_zone;
+ struct ttm_mem_global {
++	struct kobject kobj;
+ 	struct ttm_mem_shrink *shrink;
+ 	struct workqueue_struct *swap_queue;
+ 	struct work_struct work;
+ 	wait_queue_head_t queue;
+ 	spinlock_t lock;
+-	uint64_t emer_memory;
+-	uint64_t max_memory;
+-	uint64_t swap_limit;
+-	uint64_t used_memory;
+-	uint64_t used_total_memory;
+-	uint64_t total_memory_swap_limit;
+-	uint64_t max_total_memory;
+-	uint64_t emer_total_memory;
++	struct ttm_mem_zone *zones[TTM_MEM_MAX_ZONES];
++	unsigned int num_zones;
++	struct ttm_mem_zone *zone_kernel;
++#ifdef CONFIG_HIGHMEM
++	struct ttm_mem_zone *zone_highmem;
++#else
++	struct ttm_mem_zone *zone_dma32;
++#endif
+ };
+ 
+ /**
+@@ -146,8 +146,13 @@ static inline void ttm_mem_unregister_shrink(struct ttm_mem_global *glob,
+ extern int ttm_mem_global_init(struct ttm_mem_global *glob);
+ extern void ttm_mem_global_release(struct ttm_mem_global *glob);
+ extern int ttm_mem_global_alloc(struct ttm_mem_global *glob, uint64_t memory,
+-				bool no_wait, bool interruptible, bool himem);
++				bool no_wait, bool interruptible);
+ extern void ttm_mem_global_free(struct ttm_mem_global *glob,
+-				uint64_t amount, bool himem);
++				uint64_t amount);
++extern int ttm_mem_global_alloc_page(struct ttm_mem_global *glob,
++				     struct page *page,
++				     bool no_wait, bool interruptible);
++extern void ttm_mem_global_free_page(struct ttm_mem_global *glob,
++				     struct page *page);
+ extern size_t ttm_round_pot(size_t size);
+ #endif
+diff --git a/include/drm/ttm/ttm_module.h b/include/drm/ttm/ttm_module.h
+index d1d4338..cf416ae 100644
+--- a/include/drm/ttm/ttm_module.h
++++ b/include/drm/ttm/ttm_module.h
+@@ -32,6 +32,7 @@
+ #define _TTM_MODULE_H_
+ 
+ #include <linux/kernel.h>
++struct kobject;
+ 
+ #define TTM_PFX "[TTM] "
+ 
+@@ -54,5 +55,6 @@ extern void ttm_global_init(void);
+ extern void ttm_global_release(void);
+ extern int ttm_global_item_ref(struct ttm_global_reference *ref);
+ extern void ttm_global_item_unref(struct ttm_global_reference *ref);
++extern struct kobject *ttm_get_kobj(void);
+ 
+ #endif /* _TTM_MODULE_H_ */

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(-)

Index: drm-page-flip.patch
===================================================================
RCS file: drm-page-flip.patch
diff -N drm-page-flip.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ drm-page-flip.patch	4 Jan 2010 15:44:11 -0000	1.10
@@ -0,0 +1,869 @@
+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(-)

View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.2 -r 1.3 drm-radeon-fixes.patchIndex: drm-radeon-fixes.patch
===================================================================
RCS file: drm-radeon-fixes.patch
diff -N drm-radeon-fixes.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ drm-radeon-fixes.patch	4 Jan 2010 15:44:12 -0000	1.3
@@ -0,0 +1,2184 @@
+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 @@
[...1791 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);
+ 	}

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-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(-)

Index: linux-2.6-fix-usb-serial-autosuspend.diff
===================================================================
RCS file: linux-2.6-fix-usb-serial-autosuspend.diff
diff -N linux-2.6-fix-usb-serial-autosuspend.diff
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ linux-2.6-fix-usb-serial-autosuspend.diff	4 Jan 2010 15:44:12 -0000	1.4
@@ -0,0 +1,49 @@
+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-mac80211-age-scan-results-on-resume.patch:
 include/net/cfg80211.h |    6 ++++++
 include/net/wireless.h |    3 +++
 net/mac80211/cfg.c     |   28 ++++++++++++++++++++++++++++
 net/mac80211/scan.c    |   13 +++++++++++--
 net/wireless/core.h    |    2 ++
 net/wireless/sysfs.c   |   35 +++++++++++++++++++++++++++++++++++
 6 files changed, 85 insertions(+), 2 deletions(-)

Index: linux-2.6-mac80211-age-scan-results-on-resume.patch
===================================================================
RCS file: linux-2.6-mac80211-age-scan-results-on-resume.patch
diff -N linux-2.6-mac80211-age-scan-results-on-resume.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ linux-2.6-mac80211-age-scan-results-on-resume.patch	4 Jan 2010 15:44:12 -0000	1.3
@@ -0,0 +1,181 @@
+Backport of "cfg80211: age scan results on resume" by Dan Williams.
+
+diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
+index 23c0ab7..0432eb6 100644
+--- a/include/net/cfg80211.h
++++ b/include/net/cfg80211.h
+@@ -450,6 +450,9 @@ struct ieee80211_channel;
+  * wireless extensions but this is subject to reevaluation as soon as this
+  * code is used more widely and we have a first user without wext.
+  *
++ * @suspend: wiphy device needs to be suspended
++ * @resume: wiphy device needs to be resumed
++ *
+  * @add_virtual_intf: create a new virtual interface with the given name,
+  *	must set the struct wireless_dev's iftype.
+  *
+@@ -499,6 +502,9 @@ struct ieee80211_channel;
+  * @set_channel: Set channel
+  */
+ struct cfg80211_ops {
++	int	(*suspend)(struct wiphy *wiphy);
++	int	(*resume)(struct wiphy *wiphy);
++
+ 	int	(*add_virtual_intf)(struct wiphy *wiphy, char *name,
+ 				    enum nl80211_iftype type, u32 *flags,
+ 				    struct vif_params *params);
+diff --git a/include/net/wireless.h b/include/net/wireless.h
+index 21c5d96..ae2d34d 100644
+--- a/include/net/wireless.h
++++ b/include/net/wireless.h
+@@ -220,6 +220,9 @@ struct wiphy {
+ 	/* dir in debugfs: ieee80211/<wiphyname> */
+ 	struct dentry *debugfsdir;
+ 
++	/* time spent in suspend, in seconds */
++	unsigned long suspend_duration;
++
+ 	char priv[0] __attribute__((__aligned__(NETDEV_ALIGN)));
+ };
+ 
+diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
+index 9d4e4d8..691183e 100644
+--- a/net/mac80211/cfg.c
++++ b/net/mac80211/cfg.c
+@@ -1141,6 +1141,32 @@ static int ieee80211_set_channel(struct wiphy *wiphy,
+ 	return ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL);
+ }
+ 
++#ifdef CONFIG_PM
++static int ieee80211_suspend(struct wiphy *wiphy)
++{
++	return 0;
++}
++
++static int ieee80211_resume(struct wiphy *wiphy)
++{
++	struct ieee80211_local *local = wiphy_priv(wiphy);
++	unsigned long age_jiffies;
++	struct ieee80211_bss *bss;
++
++	age_jiffies = msecs_to_jiffies(wiphy->suspend_duration * MSEC_PER_SEC);
++	spin_lock_bh(&local->bss_lock);
++	list_for_each_entry(bss, &local->bss_list, list) {
++		bss->last_update -= age_jiffies;
++	}
++	spin_unlock_bh(&local->bss_lock);
++
++	return 0;
++}
++#else
++#define ieee80211_suspend NULL
++#define ieee80211_resume NULL
++#endif
++
+ struct cfg80211_ops mac80211_config_ops = {
+ 	.add_virtual_intf = ieee80211_add_iface,
+ 	.del_virtual_intf = ieee80211_del_iface,
+@@ -1169,4 +1195,6 @@ struct cfg80211_ops mac80211_config_ops = {
+ 	.change_bss = ieee80211_change_bss,
+ 	.set_txq_params = ieee80211_set_txq_params,
+ 	.set_channel = ieee80211_set_channel,
++	.suspend = ieee80211_suspend,
++	.resume = ieee80211_resume,
+ };
+diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
+index f5c7c33..eb43ff5 100644
+--- a/net/mac80211/scan.c
++++ b/net/mac80211/scan.c
+@@ -745,6 +745,15 @@ static void ieee80211_scan_add_ies(struct iw_request_info *info,
+ 	}
+ }
+ 
++static inline unsigned int elapsed_jiffies_msecs(unsigned long start)
++{
++	unsigned long end = jiffies;
++
++	if (end >= start)
++		return jiffies_to_msecs(end - start);
++
++	return jiffies_to_msecs(end + (MAX_JIFFY_OFFSET - start) + 1);
++}
+ 
+ static char *
+ ieee80211_scan_result(struct ieee80211_local *local,
+@@ -857,8 +866,8 @@ ieee80211_scan_result(struct ieee80211_local *local,
+ 						  &iwe, buf);
+ 		memset(&iwe, 0, sizeof(iwe));
+ 		iwe.cmd = IWEVCUSTOM;
+-		sprintf(buf, " Last beacon: %dms ago",
+-			jiffies_to_msecs(jiffies - bss->last_update));
++		sprintf(buf, " Last beacon: %ums ago",
++			elapsed_jiffies_msecs(bss->last_update));
+ 		iwe.u.data.length = strlen(buf);
+ 		current_ev = iwe_stream_add_point(info, current_ev,
+ 						  end_buf, &iwe, buf);
+diff --git a/net/wireless/core.h b/net/wireless/core.h
+index f7fb9f4..a4031a9 100644
+--- a/net/wireless/core.h
++++ b/net/wireless/core.h
+@@ -41,6 +41,8 @@ struct cfg80211_registered_device {
+ 	struct mutex devlist_mtx;
+ 	struct list_head netdev_list;
+ 
++	unsigned long suspend_at;
++
+ 	/* must be last because of the way we do wiphy_priv(),
+ 	 * and it should at least be aligned to NETDEV_ALIGN */
+ 	struct wiphy wiphy __attribute__((__aligned__(NETDEV_ALIGN)));
+diff --git a/net/wireless/sysfs.c b/net/wireless/sysfs.c
+index 79a3828..dc92564 100644
+--- a/net/wireless/sysfs.c
++++ b/net/wireless/sysfs.c
+@@ -55,6 +55,39 @@ static int wiphy_uevent(struct device *dev, struct kobj_uevent_env *env)
+ }
+ #endif
+ 
++static int wiphy_suspend(struct device *dev, pm_message_t state)
++{
++	struct cfg80211_registered_device *rdev = dev_to_rdev(dev);
++	int ret = 0;
++
++	rdev->wiphy.suspend_duration = 0;
++	rdev->suspend_at = get_seconds();
++
++	if (rdev->ops->suspend) {
++		rtnl_lock();
++		ret = rdev->ops->suspend(&rdev->wiphy);
++		rtnl_unlock();
++	}
++
++	return ret;
++}
++
++static int wiphy_resume(struct device *dev)
++{
++	struct cfg80211_registered_device *rdev = dev_to_rdev(dev);
++	int ret = 0;
++
++	rdev->wiphy.suspend_duration = get_seconds() - rdev->suspend_at;
++
++	if (rdev->ops->resume) {
++		rtnl_lock();
++		ret = rdev->ops->resume(&rdev->wiphy);
++		rtnl_unlock();
++	}
++
++	return ret;
++}
++
+ struct class ieee80211_class = {
+ 	.name = "ieee80211",
+ 	.owner = THIS_MODULE,
+@@ -63,6 +96,8 @@ struct class ieee80211_class = {
+ #ifdef CONFIG_HOTPLUG
+ 	.dev_uevent = wiphy_uevent,
+ #endif
++	.suspend = wiphy_suspend,
++	.resume = wiphy_resume,
+ };
+ 
+ int wiphy_sysfs_init(void)

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(-)

Index: linux-2.6-nfsd4-proots.patch
===================================================================
RCS file: linux-2.6-nfsd4-proots.patch
diff -N linux-2.6-nfsd4-proots.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ linux-2.6-nfsd4-proots.patch	4 Jan 2010 15:44:13 -0000	1.6
@@ -0,0 +1,226 @@
+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-revert-dvb-net-kabi-change.patch:
 dvb_net.c |   57 +++++++++++++++++++++++++++++----------------------------
 1 file changed, 29 insertions(+), 28 deletions(-)

Index: linux-2.6-revert-dvb-net-kabi-change.patch
===================================================================
RCS file: linux-2.6-revert-dvb-net-kabi-change.patch
diff -N linux-2.6-revert-dvb-net-kabi-change.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ linux-2.6-revert-dvb-net-kabi-change.patch	4 Jan 2010 15:44:13 -0000	1.3
@@ -0,0 +1,149 @@
+diff --git a/drivers/media/dvb/dvb-core/dvb_net.c b/drivers/media/dvb/dvb-core/dvb_net.c
+index f6ba846..03fd9dd 100644
+--- a/drivers/media/dvb/dvb-core/dvb_net.c
++++ b/drivers/media/dvb/dvb-core/dvb_net.c
+@@ -125,6 +125,7 @@ static void hexdump( const unsigned char *buf, unsigned short len )
+ 
+ struct dvb_net_priv {
+ 	int in_use;
++	struct net_device_stats stats;
+ 	u16 pid;
+ 	struct net_device *net;
+ 	struct dvb_net *host;
+@@ -383,8 +384,8 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
+ 				if (priv->ule_skb) {
+ 					dev_kfree_skb( priv->ule_skb );
+ 					/* Prepare for next SNDU. */
+-					dev->stats.rx_errors++;
+-					dev->stats.rx_frame_errors++;
++					priv->stats.rx_errors++;
++					priv->stats.rx_frame_errors++;
+ 				}
+ 				reset_ule(priv);
+ 				priv->need_pusi = 1;
+@@ -437,8 +438,8 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
+ 					dev_kfree_skb( priv->ule_skb );
+ 					/* Prepare for next SNDU. */
+ 					// reset_ule(priv);  moved to below.
+-					dev->stats.rx_errors++;
+-					dev->stats.rx_frame_errors++;
++					priv->stats.rx_errors++;
++					priv->stats.rx_frame_errors++;
+ 				}
+ 				reset_ule(priv);
+ 				/* skip to next PUSI. */
+@@ -459,8 +460,8 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
+ 						/* Drop partly decoded SNDU, reset state, resync on PUSI. */
+ 						if (priv->ule_skb) {
+ 							dev_kfree_skb( priv->ule_skb );
+-							dev->stats.rx_errors++;
+-							dev->stats.rx_frame_errors++;
++							priv->stats.rx_errors++;
++							priv->stats.rx_frame_errors++;
+ 						}
+ 						reset_ule(priv);
+ 						priv->need_pusi = 1;
+@@ -476,8 +477,8 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
+ 				if (priv->ule_sndu_remain > 183) {
+ 					/* Current SNDU lacks more data than there could be available in the
+ 					 * current TS cell. */
+-					dev->stats.rx_errors++;
+-					dev->stats.rx_length_errors++;
++					priv->stats.rx_errors++;
++					priv->stats.rx_length_errors++;
+ 					printk(KERN_WARNING "%lu: Expected %d more SNDU bytes, but "
+ 					       "got PUSI (pf %d, ts_remain %d).  Flushing incomplete payload.\n",
+ 					       priv->ts_count, priv->ule_sndu_remain, ts[4], ts_remain);
+@@ -519,8 +520,8 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
+ 				if (priv->ule_sndu_len < 5) {
+ 					printk(KERN_WARNING "%lu: Invalid ULE SNDU length %u. "
+ 					       "Resyncing.\n", priv->ts_count, priv->ule_sndu_len);
+-					dev->stats.rx_errors++;
+-					dev->stats.rx_length_errors++;
++					priv->stats.rx_errors++;
++					priv->stats.rx_length_errors++;
+ 					priv->ule_sndu_len = 0;
+ 					priv->need_pusi = 1;
+ 					new_ts = 1;
+@@ -572,7 +573,7 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
+ 			if (priv->ule_skb == NULL) {
+ 				printk(KERN_NOTICE "%s: Memory squeeze, dropping packet.\n",
+ 				       dev->name);
+-				dev->stats.rx_dropped++;
++				priv->stats.rx_dropped++;
+ 				return;
+ 			}
+ 
+@@ -636,8 +637,8 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
+ 				ule_dump = 1;
+ #endif
+ 
+-				dev->stats.rx_errors++;
+-				dev->stats.rx_crc_errors++;
++				priv->stats.rx_errors++;
++				priv->stats.rx_crc_errors++;
+ 				dev_kfree_skb(priv->ule_skb);
+ 			} else {
+ 				/* CRC32 verified OK. */
+@@ -743,8 +744,8 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
+ 				 * receive the packet anyhow. */
+ 				/* if (priv->ule_dbit && skb->pkt_type == PACKET_OTHERHOST)
+ 					priv->ule_skb->pkt_type = PACKET_HOST; */
+-				dev->stats.rx_packets++;
+-				dev->stats.rx_bytes += priv->ule_skb->len;
++				priv->stats.rx_packets++;
++				priv->stats.rx_bytes += priv->ule_skb->len;
+ 				netif_rx(priv->ule_skb);
+ 			}
+ 			sndu_done:
+@@ -799,7 +800,8 @@ static void dvb_net_sec(struct net_device *dev,
+ {
+ 	u8 *eth;
+ 	struct sk_buff *skb;
+-	struct net_device_stats *stats = &dev->stats;
++	struct net_device_stats *stats =
++		&((struct dvb_net_priv *) netdev_priv(dev))->stats;
+ 	int snap = 0;
+ 
+ 	/* note: pkt_len includes a 32bit checksum */
+@@ -1214,29 +1216,28 @@ static int dvb_net_stop(struct net_device *dev)
+ 	return dvb_net_feed_stop(dev);
+ }
+ 
++static struct net_device_stats * dvb_net_get_stats(struct net_device *dev)
++{
++	return &((struct dvb_net_priv *) netdev_priv(dev))->stats;
++}
++
+ static const struct header_ops dvb_header_ops = {
+ 	.create		= eth_header,
+ 	.parse		= eth_header_parse,
+ 	.rebuild	= eth_rebuild_header,
+ };
+ 
+-
+-static const struct net_device_ops dvb_netdev_ops = {
+-	.ndo_open		= dvb_net_open,
+-	.ndo_stop		= dvb_net_stop,
+-	.ndo_start_xmit		= dvb_net_tx,
+-	.ndo_set_multicast_list = dvb_net_set_multicast_list,
+-	.ndo_set_mac_address    = dvb_net_set_mac,
+-	.ndo_change_mtu		= eth_change_mtu,
+-	.ndo_validate_addr	= eth_validate_addr,
+-};
+-
+ static void dvb_net_setup(struct net_device *dev)
+ {
+ 	ether_setup(dev);
+ 
+ 	dev->header_ops		= &dvb_header_ops;
+-	dev->netdev_ops		= &dvb_netdev_ops;
++	dev->open		= dvb_net_open;
++	dev->stop		= dvb_net_stop;
++	dev->hard_start_xmit	= dvb_net_tx;
++	dev->get_stats		= dvb_net_get_stats;
++	dev->set_multicast_list = dvb_net_set_multicast_list;
++	dev->set_mac_address    = dvb_net_set_mac;
+ 	dev->mtu		= 4096;
+ 	dev->mc_count           = 0;
+ 

linux-2.6-rt2x00-asus-leds.patch:
 rt2400pci.c |    4 +++-
 rt2500pci.c |    4 +++-
 rt2500usb.c |    4 +++-
 3 files changed, 9 insertions(+), 3 deletions(-)

Index: linux-2.6-rt2x00-asus-leds.patch
===================================================================
RCS file: linux-2.6-rt2x00-asus-leds.patch
diff -N linux-2.6-rt2x00-asus-leds.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ linux-2.6-rt2x00-asus-leds.patch	4 Jan 2010 15:44:13 -0000	1.3
@@ -0,0 +1,69 @@
+Back-port of the following two patches from wireless-testing...
+
+commit 5a2e156203294d61d7963877286b2763cbc02cf7
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Sat Jan 17 20:44:08 2009 +0100
+
+    rt2x00: Add LED_MODE_ASUS support
+    
+    When the led mode is asus, the activity led mode must
+    be registered otherwise the second LED will not be enabled.
+    
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit a064405c724484f80eefdb6754e8f782144e1f91
+Author: Andrew Price <andy at andrewprice.me.uk>
+Date:   Sat Jan 10 19:38:05 2009 +0000
+
+    rt2400,rt2500: init led_qual for LED_MODE_DEFAULT
+    
+    Add a check for LED_MODE_DEFAULT so that we use the link LED for rt2400
+    and rt2500 devices.
+    
+    Signed-off-by: Andrew Price <andy at andrewprice.me.uk>
+    Acked-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+diff -up linux-2.6.28.noarch/drivers/net/wireless/rt2x00/rt2400pci.c.orig linux-2.6.28.noarch/drivers/net/wireless/rt2x00/rt2400pci.c
+--- linux-2.6.28.noarch/drivers/net/wireless/rt2x00/rt2400pci.c.orig	2008-12-24 18:26:37.000000000 -0500
++++ linux-2.6.28.noarch/drivers/net/wireless/rt2x00/rt2400pci.c	2009-01-21 16:06:08.000000000 -0500
+@@ -1378,7 +1378,9 @@ static int rt2400pci_init_eeprom(struct 
+ 	value = rt2x00_get_field16(eeprom, EEPROM_ANTENNA_LED_MODE);
+ 
+ 	rt2400pci_init_led(rt2x00dev, &rt2x00dev->led_radio, LED_TYPE_RADIO);
+-	if (value == LED_MODE_TXRX_ACTIVITY)
++	if (value == LED_MODE_TXRX_ACTIVITY ||
++	    value == LED_MODE_DEFAULT ||
++	    value == LED_MODE_ASUS)
+ 		rt2400pci_init_led(rt2x00dev, &rt2x00dev->led_qual,
+ 				   LED_TYPE_ACTIVITY);
+ #endif /* CONFIG_RT2X00_LIB_LEDS */
+diff -up linux-2.6.28.noarch/drivers/net/wireless/rt2x00/rt2500usb.c.orig linux-2.6.28.noarch/drivers/net/wireless/rt2x00/rt2500usb.c
+--- linux-2.6.28.noarch/drivers/net/wireless/rt2x00/rt2500usb.c.orig	2008-12-24 18:26:37.000000000 -0500
++++ linux-2.6.28.noarch/drivers/net/wireless/rt2x00/rt2500usb.c	2009-01-21 16:06:08.000000000 -0500
+@@ -1477,7 +1477,9 @@ static int rt2500usb_init_eeprom(struct 
+ 	value = rt2x00_get_field16(eeprom, EEPROM_ANTENNA_LED_MODE);
+ 
+ 	rt2500usb_init_led(rt2x00dev, &rt2x00dev->led_radio, LED_TYPE_RADIO);
+-	if (value == LED_MODE_TXRX_ACTIVITY)
++	if (value == LED_MODE_TXRX_ACTIVITY ||
++	    value == LED_MODE_DEFAULT ||
++	    value == LED_MODE_ASUS)
+ 		rt2500usb_init_led(rt2x00dev, &rt2x00dev->led_qual,
+ 				   LED_TYPE_ACTIVITY);
+ #endif /* CONFIG_RT2X00_LIB_LEDS */
+diff -up linux-2.6.28.noarch/drivers/net/wireless/rt2x00/rt2500pci.c.orig linux-2.6.28.noarch/drivers/net/wireless/rt2x00/rt2500pci.c
+--- linux-2.6.28.noarch/drivers/net/wireless/rt2x00/rt2500pci.c.orig	2008-12-24 18:26:37.000000000 -0500
++++ linux-2.6.28.noarch/drivers/net/wireless/rt2x00/rt2500pci.c	2009-01-21 16:06:08.000000000 -0500
+@@ -1537,7 +1537,9 @@ static int rt2500pci_init_eeprom(struct 
+ 	value = rt2x00_get_field16(eeprom, EEPROM_ANTENNA_LED_MODE);
+ 
+ 	rt2500pci_init_led(rt2x00dev, &rt2x00dev->led_radio, LED_TYPE_RADIO);
+-	if (value == LED_MODE_TXRX_ACTIVITY)
++	if (value == LED_MODE_TXRX_ACTIVITY ||
++	    value == LED_MODE_DEFAULT ||
++	    value == LED_MODE_ASUS)
+ 		rt2500pci_init_led(rt2x00dev, &rt2x00dev->led_qual,
+ 				   LED_TYPE_ACTIVITY);
+ #endif /* CONFIG_RT2X00_LIB_LEDS */

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.31-modules-ro-nx.patch:
 include/linux/module.h |    3 +
 kernel/module.c        |  126 +++++++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 126 insertions(+), 3 deletions(-)

Index: linux-2.6.31-modules-ro-nx.patch
===================================================================
RCS file: linux-2.6.31-modules-ro-nx.patch
diff -N linux-2.6.31-modules-ro-nx.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ linux-2.6.31-modules-ro-nx.patch	4 Jan 2010 15:44:16 -0000	1.3
@@ -0,0 +1,269 @@
+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(-)

Index: linux-2.6.31-nx-data.patch
===================================================================
RCS file: linux-2.6.31-nx-data.patch
diff -N linux-2.6.31-nx-data.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ linux-2.6.31-nx-data.patch	4 Jan 2010 15:44:16 -0000	1.3
@@ -0,0 +1,118 @@
+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-----


Index: Makefile
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-12/Makefile,v
retrieving revision 1.114
retrieving revision 1.115
diff -u -p -r1.114 -r1.115
--- Makefile	26 Nov 2009 00:00:00 -0000	1.114
+++ Makefile	4 Jan 2010 15:44:10 -0000	1.115
@@ -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
@@ -77,13 +78,23 @@ debug:
 	@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_JBD2_DEBUG is not set/CONFIG_JBD2=y/' 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/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/CONFIG_NR_CPUS=256/CONFIG_NR_CPUS=512/' config-x86_64-generic
+	@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
@@ -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,21 +129,31 @@ 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_JBD2_DEBUG is not set/CONFIG_JBD2_DEBUG=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=256/' config-x86_64-generic
+	@perl -pi -e 's/CONFIG_NR_CPUS=512/CONFIG_NR_CPUS=64/' config-x86_64-generic
 
 	@perl -pi -e 's/^%define debugbuildsenabled 0/%define debugbuildsenabled 1/' kernel.spec
 	@perl -pi -e 's/^%define rawhide_skip_docs 1/%define rawhide_skip_docs 0/' kernel.spec
 
 rhel:
 	@perl -pi -e 's/# CONFIG_PPC_64K_PAGES is not set/CONFIG_PPC_64K_PAGES=y/' config-powerpc64
-	@perl -pi -e 's/CONFIG_NR_CPUS=256/CONFIG_NR_CPUS=512/' config-x86_64-generic
+	@perl -pi -e 's/CONFIG_NR_CPUS=64/CONFIG_NR_CPUS=512/' config-x86_64-generic
 
 reconfig:
 	@rm -f kernel-*-config


Index: TODO
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-12/TODO,v
retrieving revision 1.66
retrieving revision 1.67
diff -u -p -r1.66 -r1.67
--- TODO	3 Aug 2009 13:25:54 -0000	1.66
+++ TODO	4 Jan 2010 15:44:10 -0000	1.67
@@ -83,7 +83,3 @@
 
 * linux-2.6-kmemleak-improvements.patch
 	will go upstream for .31
-
-* linux-2.6-vga-arb.patch
-* drm-vga-arb.patch
-	will go upstream for .32


Index: config-arm
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-12/config-arm,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- config-arm	18 Jun 2009 19:05:53 -0000	1.4
+++ config-arm	4 Jan 2010 15:44:10 -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


Index: config-debug
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-12/config-debug,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -p -r1.30 -r1.31
--- config-debug	4 Nov 2009 17:00:19 -0000	1.30
+++ config-debug	4 Jan 2010 15:44:10 -0000	1.31
@@ -51,4 +51,18 @@ 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-12/config-generic,v
retrieving revision 1.332
retrieving revision 1.333
diff -u -p -r1.332 -r1.333
--- config-generic	28 Nov 2009 06:55:16 -0000	1.332
+++ config-generic	4 Jan 2010 15:44:10 -0000	1.333
@@ -12,6 +12,8 @@ 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
 
@@ -236,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
@@ -441,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
 
@@ -520,6 +524,7 @@ 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
@@ -537,9 +542,12 @@ 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
@@ -599,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
@@ -609,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
@@ -670,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
@@ -815,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
@@ -1272,6 +1286,7 @@ 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)
@@ -1354,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
@@ -1366,7 +1383,10 @@ 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
@@ -1395,6 +1415,7 @@ 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
@@ -1406,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
@@ -1462,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
@@ -1493,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
 #
@@ -1541,8 +1570,10 @@ 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
@@ -1634,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
@@ -1642,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
@@ -1813,10 +1851,15 @@ CONFIG_KEYBOARD_ATKBD=y
 # 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
@@ -1868,10 +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
@@ -1881,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
 #
@@ -1954,6 +2002,7 @@ CONFIG_PPDEV=m
 # I2C support
 #
 CONFIG_I2C=m
+CONFIG_I2C_COMPAT=y
 CONFIG_I2C_CHARDEV=m
 
 #
@@ -2099,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
@@ -2167,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
@@ -2210,6 +2263,8 @@ 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
@@ -2334,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
@@ -2353,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
@@ -2371,6 +2428,7 @@ 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
@@ -2426,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
@@ -2555,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
@@ -2582,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
 
@@ -2631,6 +2692,7 @@ 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
@@ -2638,6 +2700,7 @@ 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
@@ -2734,6 +2797,7 @@ CONFIG_USB_UHCI_HCD=y
 # 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
@@ -2835,6 +2899,9 @@ 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 is not set
@@ -2890,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
 #
@@ -3012,7 +3081,10 @@ CONFIG_USB_PWC_INPUT_EVDEV=y
 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
@@ -3032,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
@@ -3054,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
@@ -3116,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
@@ -3184,6 +3260,7 @@ 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
@@ -3336,6 +3413,7 @@ CONFIG_NLS_ASCII=y
 #
 CONFIG_PROFILING=y
 CONFIG_OPROFILE=m
+CONFIG_OPROFILE_EVENT_MULTIPLEX=y
 
 #
 # Kernel hacking
@@ -3439,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
@@ -3481,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
@@ -3515,7 +3596,7 @@ CONFIG_ENABLE_MUST_CHECK=y
 
 CONFIG_KEXEC=y
 
-CONFIG_HWMON=y
+CONFIG_HWMON=m
 # CONFIG_HWMON_DEBUG_CHIP is not set
 CONFIG_INOTIFY=y
 CONFIG_INOTIFY_USER=y
@@ -3529,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.
 
@@ -3715,6 +3797,7 @@ 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
@@ -3735,7 +3818,6 @@ 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
@@ -3762,6 +3844,7 @@ 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
@@ -3778,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
@@ -3901,6 +3985,10 @@ 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
 
@@ -3957,6 +4045,17 @@ CONFIG_USB_ATMEL=m
 # 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
@@ -3971,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
 
@@ -3999,6 +4096,7 @@ 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
@@ -4054,3 +4152,5 @@ CONFIG_DETECT_SOFTLOCKUP=y
 CONFIG_DETECT_HUNG_TASK=y
 # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
 
+CONFIG_MEMORY_FAILURE=y
+CONFIG_HWPOISON_INJECT=m


Index: config-ia64-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-12/config-ia64-generic,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -p -r1.26 -r1.27
--- config-ia64-generic	18 Jun 2009 19:05:53 -0000	1.26
+++ config-ia64-generic	4 Jan 2010 15:44:10 -0000	1.27
@@ -210,3 +210,6 @@ CONFIG_PARAVIRT=y
 CONFIG_DMAR_DEFAULT_ON=y
 
 CONFIG_RCU_FANOUT=64
+
+CONFIG_ACPI_POWER_METER=m
+CONFIG_I2C_SCMI=m


Index: config-nodebug
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-12/config-nodebug,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -p -r1.40 -r1.41
--- config-nodebug	4 Nov 2009 17:00:19 -0000	1.40
+++ config-nodebug	4 Jan 2010 15:44:10 -0000	1.41
@@ -2,52 +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-12/config-powerpc-generic,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -p -r1.50 -r1.51
--- config-powerpc-generic	8 Oct 2009 05:56:22 -0000	1.50
+++ config-powerpc-generic	4 Jan 2010 15:44:10 -0000	1.51
@@ -331,3 +331,11 @@ 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-12/config-powerpc32-generic,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -p -r1.35 -r1.36
--- config-powerpc32-generic	23 Jul 2009 17:45:33 -0000	1.35
+++ config-powerpc32-generic	4 Jan 2010 15:44:10 -0000	1.36
@@ -187,5 +187,6 @@ 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-12/config-powerpc64,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -p -r1.35 -r1.36
--- config-powerpc64	17 Sep 2009 19:30:18 -0000	1.35
+++ config-powerpc64	4 Jan 2010 15:44:10 -0000	1.36
@@ -185,6 +185,5 @@ CONFIG_RELOCATABLE=y
 CONFIG_RCU_FANOUT=64
 
 CONFIG_PERF_COUNTERS=y
+CONFIG_PERF_EVENTS=y
 CONFIG_EVENT_PROFILE=y
-
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set


Index: config-s390x
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-12/config-s390x,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -p -r1.18 -r1.19
--- config-s390x	8 Sep 2009 20:55:49 -0000	1.18
+++ config-s390x	4 Jan 2010 15:44:10 -0000	1.19
@@ -75,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
 
@@ -230,5 +231,6 @@ 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-12/config-sparc64-generic,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -p -r1.28 -r1.29
--- config-sparc64-generic	18 Aug 2009 17:48:12 -0000	1.28
+++ config-sparc64-generic	4 Jan 2010 15:44:10 -0000	1.29
@@ -206,3 +206,6 @@ 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-12/config-x86-generic,v
retrieving revision 1.91
retrieving revision 1.92
diff -u -p -r1.91 -r1.92
--- config-x86-generic	8 Nov 2009 01:44:40 -0000	1.91
+++ config-x86-generic	4 Jan 2010 15:44:10 -0000	1.92
@@ -169,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
@@ -473,6 +475,7 @@ 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
@@ -481,4 +484,15 @@ CONFIG_X86_MCE_AMD=y
 # CONFIG_X86_ANCIENT_MCE is not set
 # CONFIG_X86_MCE_INJECT is not set
 
-CONFIG_ACERHDF=m
+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-12/config-x86_64-generic,v
retrieving revision 1.96
retrieving revision 1.97
diff -u -p -r1.96 -r1.97
--- config-x86_64-generic	8 Nov 2009 01:44:40 -0000	1.96
+++ config-x86_64-generic	4 Jan 2010 15:44:10 -0000	1.97
@@ -16,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=256
+CONFIG_NR_CPUS=512
 CONFIG_X86_POWERNOW_K8=m
 CONFIG_X86_POWERNOW_K8_ACPI=y
 CONFIG_X86_P4_CLOCKMOD=m 
@@ -107,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
@@ -211,6 +213,7 @@ 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
 
@@ -235,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
@@ -377,10 +382,19 @@ 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
 
-CONFIG_ACERHDF=m

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.73 -r 1.74 drm-nouveau.patchIndex: drm-nouveau.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-12/drm-nouveau.patch,v
retrieving revision 1.73
retrieving revision 1.74
diff -u -p -r1.73 -r1.74
--- drm-nouveau.patch	21 Dec 2009 04:26:25 -0000	1.73
+++ drm-nouveau.patch	4 Jan 2010 15:44:11 -0000	1.74
@@ -1,8 +1,8 @@
 diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
-index e4d971c..62dd13c 100644
+index f831ea1..a2320ac 100644
 --- a/drivers/gpu/drm/Kconfig
 +++ b/drivers/gpu/drm/Kconfig
-@@ -153,3 +153,59 @@ 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.
@@ -84,10 +84,10 @@ index 0000000..6d2abaf
 +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..81681a0
+index 0000000..9422a74
 --- /dev/null
 +++ b/drivers/gpu/drm/i2c/ch7006_drv.c
-@@ -0,0 +1,536 @@
+@@ -0,0 +1,531 @@
 +/*
 + * Copyright (C) 2009 Francisco Jerez.
 + * All Rights Reserved.
@@ -498,11 +498,6 @@ index 0000000..81681a0
 +
 +	ch7006_info(client, "Detected version ID: %x\n", val);
 +
-+	/* I don't know what this is for, but otherwise I get no
-+	 * signal.
-+	 */
-+	ch7006_write(client, 0x3d, 0x0);
-+
 +	return 0;
 +
 +fail:
@@ -626,10 +621,10 @@ index 0000000..81681a0
 +module_exit(ch7006_exit);
 diff --git a/drivers/gpu/drm/i2c/ch7006_mode.c b/drivers/gpu/drm/i2c/ch7006_mode.c
 new file mode 100644
-index 0000000..e447dfb
+index 0000000..87f5445
 --- /dev/null
 +++ b/drivers/gpu/drm/i2c/ch7006_mode.c
-@@ -0,0 +1,468 @@
+@@ -0,0 +1,473 @@
 +/*
 + * Copyright (C) 2009 Francisco Jerez.
 + * All Rights Reserved.
@@ -1059,6 +1054,11 @@ index 0000000..e447dfb
 +	ch7006_load_reg(client, state, CH7006_SUBC_INC7);
 +	ch7006_load_reg(client, state, CH7006_PLL_CONTROL);
 +	ch7006_load_reg(client, state, CH7006_CALC_SUBC_INC0);
++
++	/* I don't know what this is for, but otherwise I get no
++	 * signal.
++	 */
++	ch7006_write(client, 0x3d, 0x0);
 +}
 +
 +void ch7006_state_save(struct i2c_client *client,
@@ -1450,10 +1450,10 @@ index 0000000..b06d3d9
 +#endif
 diff --git a/drivers/gpu/drm/nouveau/Makefile b/drivers/gpu/drm/nouveau/Makefile
 new file mode 100644
-index 0000000..fd75226
+index 0000000..e12b4ff
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/Makefile
-@@ -0,0 +1,30 @@
+@@ -0,0 +1,29 @@
 +#
 +# Makefile for the drm device driver.  This driver provides support for the
 +# Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher.
@@ -1475,8 +1475,7 @@ index 0000000..fd75226
 +             nv50_crtc.o nv50_dac.o nv50_sor.o \
 +             nv50_cursor.o nv50_display.o nv50_fbcon.o \
 +             nv04_dac.o nv04_dfp.o nv04_tv.o nv17_tv.o nv17_tv_modes.o \
-+             nv04_crtc.o nv04_display.o nv04_cursor.o nv04_fbcon.o \
-+             nv17_gpio.o
++             nv04_crtc.o nv04_display.o nv04_cursor.o nv04_fbcon.o
 +
 +nouveau-$(CONFIG_DRM_NOUVEAU_DEBUG) += nouveau_debugfs.o
 +nouveau-$(CONFIG_COMPAT) += nouveau_ioc32.o
@@ -1486,7 +1485,7 @@ index 0000000..fd75226
 +obj-$(CONFIG_DRM_NOUVEAU)+= nouveau.o
 diff --git a/drivers/gpu/drm/nouveau/nouveau_acpi.c b/drivers/gpu/drm/nouveau/nouveau_acpi.c
 new file mode 100644
-index 0000000..1cf4882
+index 0000000..ec0f2f3
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nouveau_acpi.c
 @@ -0,0 +1,125 @@
@@ -1554,7 +1553,7 @@ index 0000000..1cf4882
 +
 +	err = acpi_evaluate_object(handle, "_DSM", &input, &output);
 +	if (err) {
-+		NV_INFO(dev, "failed to evaluate _DSM: %d\n", err);
++		NV_ERROR(dev, "failed to evaluate _DSM: %d\n", err);
 +		return err;
 +	}
 +
@@ -1778,10 +1777,10 @@ index 0000000..20564f8
 +}
 diff --git a/drivers/gpu/drm/nouveau/nouveau_bios.c b/drivers/gpu/drm/nouveau/nouveau_bios.c
 new file mode 100644
-index 0000000..0b5dc12
+index 0000000..ba946df
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nouveau_bios.c
-@@ -0,0 +1,6050 @@
+@@ -0,0 +1,5734 @@
 +/*
 + * Copyright 2005-2006 Erik Waling
 + * Copyright 2006 Stephane Marchesin
@@ -1870,12 +1869,11 @@ index 0000000..0b5dc12
 +
 +static void load_vbios_prom(struct drm_device *dev, uint8_t *data)
 +{
-+	struct drm_nouveau_private *dev_priv = dev->dev_private;
 +	uint32_t pci_nv_20, save_pci_nv_20;
 +	int pcir_ptr;
 +	int i;
 +
-+	if (dev_priv->card_type >= NV_50)
++	if (nv_arch(dev) >= NV_50)
 +		pci_nv_20 = 0x88050;
 +	else
 +		pci_nv_20 = NV_PBUS_PCI_NV_20;
@@ -1914,11 +1912,10 @@ index 0000000..0b5dc12
 +
 +static void load_vbios_pramin(struct drm_device *dev, uint8_t *data)
 +{
-+	struct drm_nouveau_private *dev_priv = dev->dev_private;
 +	uint32_t old_bar0_pramin = 0;
 +	int i;
 +
-+	if (dev_priv->card_type >= NV_50) {
++	if (nv_arch(dev) >= NV_50) {
 +		uint32_t vbios_vram = (nv_rd32(dev, 0x619f04) & ~0xff) << 8;
 +
 +		if (!vbios_vram)
@@ -1937,7 +1934,7 @@ index 0000000..0b5dc12
 +		data[i] = nv_rd08(dev, NV_PRAMIN_OFFSET + i);
 +
 +out:
-+	if (dev_priv->card_type >= NV_50)
++	if (nv_arch(dev) >= NV_50)
 +		nv_wr32(dev, 0x1700, old_bar0_pramin);
 +}
 +
@@ -2077,21 +2074,18 @@ index 0000000..0b5dc12
 +static uint32_t
 +munge_reg(struct nvbios *bios, uint32_t reg)
 +{
-+	struct drm_nouveau_private *dev_priv = bios->dev->dev_private;
-+	struct dcb_entry *dcbent = bios->display.output;
++	if (nv_arch(bios->dev) < NV_50)
++		return reg;
 +
-+	if (dev_priv->card_type < NV_50)
++	if (!(reg & 0x40000000))
 +		return reg;
 +
-+	if (reg & 0x40000000) {
-+		BUG_ON(!dcbent);
++	BUG_ON(!bios->display.output);
 +
-+		reg += (ffs(dcbent->or) - 1) * 0x800;
-+		if ((reg & 0x20000000) && !(dcbent->sorconf.link & 1))
-+			reg += 0x00000080;
-+	}
++	if (reg & 0x40000000)
++		reg += (ffs(bios->display.output->or) - 1) * 0x800;
 +
-+	reg &= ~0x60000000;
++	reg &= ~0x40000000;
 +	return reg;
 +}
 +
@@ -4315,32 +4309,6 @@ index 0000000..0b5dc12
 +}
 +
 +static bool
-+init_8c(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
-+{
-+	/*
-+	 * INIT_8C   opcode: 0x8C ('')
-+	 *
-+	 * NOP so far....
-+	 *
-+	 */
[...4164 lines suppressed...]
-+			if (pxclk >= bios->fp.duallink_transition_clk) {
-+				script |= 0x0100;
-+				if (bios->fp.strapless_is_24bit & 2)
-+					script |= 0x0200;
-+			} else
-+			if (bios->fp.strapless_is_24bit & 1)
-+				script |= 0x0200;
-+
-+			if (nv_connector && nv_connector->edid &&
-+			    (nv_connector->edid->revision >= 4) &&
-+			    (nv_connector->edid->input & 0x70) >= 0x20)
-+				script |= 0x0200;
-+		}
++		if (pxclk >= bios->fp.duallink_transition_clk)
++			script |= 0x0100;
 +
 +		if (nouveau_uscript_lvds >= 0) {
-+			NV_INFO(dev, "override script 0x%04x with 0x%04x "
++			NV_INFO(dev, "override script 0x%04x with 0x%04x"
 +				     "for output LVDS-%d\n", script,
 +				     nouveau_uscript_lvds, or);
 +			script = nouveau_uscript_lvds;
@@ -35050,7 +33967,7 @@ index 0000000..281e65c
 +			script |= 0x0100;
 +
 +		if (nouveau_uscript_tmds >= 0) {
-+			NV_INFO(dev, "override script 0x%04x with 0x%04x "
++			NV_INFO(dev, "override script 0x%04x with 0x%04x"
 +				     "for output TMDS-%d\n", script,
 +				     nouveau_uscript_tmds, or);
 +			script = nouveau_uscript_tmds;
@@ -35222,57 +34139,12 @@ index 0000000..281e65c
 +	nv_wr32(dev, NV50_PDISPLAY_TRAPPED_ADDR, 0x90000000);
 +}
 +
-+static void
-+nv50_display_irq_hotplug(struct drm_device *dev)
-+{
-+	struct drm_nouveau_private *dev_priv = dev->dev_private;
-+	struct drm_connector *connector;
-+	const uint32_t gpio_reg[4] = { 0xe104, 0xe108, 0xe280, 0xe284 };
-+	uint32_t unplug_mask, plug_mask, change_mask;
-+	uint32_t hpd0, hpd1 = 0;
-+
-+	hpd0 = nv_rd32(dev, 0xe054) & nv_rd32(dev, 0xe050);
-+	if (dev_priv->chipset >= 0x90)
-+		hpd1 = nv_rd32(dev, 0xe074) & nv_rd32(dev, 0xe070);
-+
-+	plug_mask   = (hpd0 & 0x0000ffff) | (hpd1 << 16);
-+	unplug_mask = (hpd0 >> 16) | (hpd1 & 0xffff0000);
-+	change_mask = plug_mask | unplug_mask;
-+
-+	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
-+		struct nouveau_connector *nv_connector =
-+			nouveau_connector(connector);
-+		struct dcb_gpio_entry *gpio;
-+		uint32_t reg;
-+		bool plugged;
-+
-+		if (!nv_connector->dcb)
-+			continue;
-+
-+		gpio = nouveau_bios_gpio_entry(dev, nv_connector->dcb->gpio_tag);
-+		if (!gpio || !(change_mask & (1 << gpio->line)))
-+			continue;
-+
-+		reg = nv_rd32(dev, gpio_reg[gpio->line >> 3]);
-+		plugged = !!(reg & (4 << ((gpio->line & 7) << 2)));
-+		NV_INFO(dev, "%splugged %s\n", plugged ? "" : "un",
-+			drm_get_connector_name(connector)) ;
-+	}
-+
-+	nv_wr32(dev, 0xe054, nv_rd32(dev, 0xe054));
-+	if (dev_priv->chipset >= 0x90)
-+		nv_wr32(dev, 0xe074, nv_rd32(dev, 0xe074));
-+}
-+
 +void
 +nv50_display_irq_handler(struct drm_device *dev)
 +{
 +	struct drm_nouveau_private *dev_priv = dev->dev_private;
 +	uint32_t delayed = 0;
 +
-+	while (nv_rd32(dev, NV50_PMC_INTR_0) & NV50_PMC_INTR_0_HOTPLUG)
-+		nv50_display_irq_hotplug(dev);
-+
 +	while (nv_rd32(dev, NV50_PMC_INTR_0) & NV50_PMC_INTR_0_DISPLAY) {
 +		uint32_t intr0 = nv_rd32(dev, NV50_PDISPLAY_INTR_0);
 +		uint32_t intr1 = nv_rd32(dev, NV50_PDISPLAY_INTR_1);
@@ -35299,7 +34171,7 @@ index 0000000..281e65c
 +		if (clock) {
 +			nv_wr32(dev, NV03_PMC_INTR_EN_0, 0);
 +			if (!work_pending(&dev_priv->irq_work))
-+				queue_work(dev_priv->wq, &dev_priv->irq_work);
++				schedule_work(&dev_priv->irq_work);
 +			delayed |= clock;
 +			intr1 &= ~clock;
 +		}
@@ -35769,7 +34641,7 @@ index 0000000..6bcc6d3
 +
 diff --git a/drivers/gpu/drm/nouveau/nv50_fifo.c b/drivers/gpu/drm/nouveau/nv50_fifo.c
 new file mode 100644
-index 0000000..b728228
+index 0000000..77ae1aa
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv50_fifo.c
 @@ -0,0 +1,494 @@
@@ -36191,7 +35063,7 @@ index 0000000..b728228
 +	NV_DEBUG(dev, "\n");
 +
 +	chid = pfifo->channel_id(dev);
-+	if (chid < 1 || chid >= dev_priv->engine.fifo.channels - 1)
++	if (chid < 0 || chid >= dev_priv->engine.fifo.channels)
 +		return 0;
 +
 +	chan = dev_priv->fifos[chid];
@@ -36269,10 +35141,10 @@ index 0000000..b728228
 +
 diff --git a/drivers/gpu/drm/nouveau/nv50_graph.c b/drivers/gpu/drm/nouveau/nv50_graph.c
 new file mode 100644
-index 0000000..7ff54c8
+index 0000000..eef3ebd
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv50_graph.c
-@@ -0,0 +1,470 @@
+@@ -0,0 +1,479 @@
 +/*
 + * Copyright (C) 2007 Ben Skeggs.
 + * All Rights Reserved.
@@ -36628,23 +35500,32 @@ index 0000000..7ff54c8
 +	return nv50_graph_do_load_context(chan->dev, inst);
 +}
 +
-+int
-+nv50_graph_unload_context(struct drm_device *dev)
++static int
++nv50_graph_do_save_context(struct drm_device *dev, uint32_t inst)
 +{
-+	uint32_t inst, fifo = nv_rd32(dev, 0x400500);
-+
-+	inst  = nv_rd32(dev, NV50_PGRAPH_CTXCTL_CUR);
-+	if (!(inst & NV50_PGRAPH_CTXCTL_CUR_LOADED))
-+		return 0;
-+	inst &= NV50_PGRAPH_CTXCTL_CUR_INSTANCE;
++	uint32_t fifo = nv_rd32(dev, 0x400500);
 +
 +	nv_wr32(dev, 0x400500, fifo & ~1);
 +	nv_wr32(dev, 0x400784, inst);
 +	nv_wr32(dev, 0x400824, nv_rd32(dev, 0x400824) | 0x20);
 +	nv_wr32(dev, 0x400304, nv_rd32(dev, 0x400304) | 0x01);
 +	nouveau_wait_for_idle(dev);
++
 +	nv_wr32(dev, 0x400500, fifo);
++	return 0;
++}
 +
++int
++nv50_graph_unload_context(struct drm_device *dev)
++{
++	uint32_t inst;
++	int ret;
++
++	inst  = nv_rd32(dev, NV50_PGRAPH_CTXCTL_CUR);
++	if (!(inst & NV50_PGRAPH_CTXCTL_CUR_LOADED))
++		return 0;
++	inst &= NV50_PGRAPH_CTXCTL_CUR_INSTANCE;
++	ret = nv50_graph_do_save_context(dev, inst);
 +	nv_wr32(dev, NV50_PGRAPH_CTXCTL_CUR, inst);
 +	return 0;
 +}
@@ -64144,10 +63025,10 @@ index 0000000..e0a9c3f
 +}
 diff --git a/drivers/gpu/drm/nouveau/nv50_sor.c b/drivers/gpu/drm/nouveau/nv50_sor.c
 new file mode 100644
-index 0000000..ef9dc02
+index 0000000..d7fab7d
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv50_sor.c
-@@ -0,0 +1,269 @@
+@@ -0,0 +1,265 @@
 +/*
 + * Copyright (C) 2008 Maarten Maathuis.
 + * All Rights Reserved.
@@ -64305,13 +63186,9 @@ index 0000000..ef9dc02
 +
 +	switch (nv_encoder->dcb->type) {
 +	case OUTPUT_TMDS:
-+		if (nv_encoder->dcb->sorconf.link & 1) {
-+			if (adjusted_mode->clock < 165000)
-+				mode_ctl = 0x0100;
-+			else
-+				mode_ctl = 0x0500;
-+		} else
-+			mode_ctl = 0x0200;
++		mode_ctl |= NV50_EVO_SOR_MODE_CTRL_TMDS;
++		if (adjusted_mode->clock > 165000)
++			mode_ctl |= NV50_EVO_SOR_MODE_CTRL_TMDS_DUAL_LINK;
 +		break;
 +	default:
 +		break;

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

Index: ext4-fix-insufficient-checks-in-EXT4_IOC_MOVE_EXT.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-12/ext4-fix-insufficient-checks-in-EXT4_IOC_MOVE_EXT.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- ext4-fix-insufficient-checks-in-EXT4_IOC_MOVE_EXT.patch	9 Dec 2009 14:29:02 -0000	1.1
+++ ext4-fix-insufficient-checks-in-EXT4_IOC_MOVE_EXT.patch	4 Jan 2010 15:44:12 -0000	1.2
@@ -26,10 +26,10 @@ Signed-off-by: "Theodore Ts'o" <tytso at mi
  2 files changed, 25 insertions(+), 10 deletions(-)
 
 diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c
-index 7050a9c..f5b1d3c 100644
+index c1cdf61..6cc8a09 100644
 --- a/fs/ext4/ioctl.c
 +++ b/fs/ext4/ioctl.c
-@@ -221,32 +221,39 @@ setversion_out:
+@@ -221,31 +221,39 @@ setversion_out:
  		struct file *donor_filp;
  		int err;
  
@@ -70,23 +70,20 @@ index 7050a9c..f5b1d3c 100644
 +		if (me.moved_len > 0)
 +			file_remove_suid(donor_filp);
  
--		if (!err)
--			if (copy_to_user((struct move_extent *)arg,
--				&me, sizeof(me)))
--				return -EFAULT;
-+		if (copy_to_user((struct move_extent *)arg, &me, sizeof(me)))
+ 		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 bbf2dd9..c5250b5 100644
+index 25b6b14..0100ff9 100644
 --- a/fs/ext4/move_extent.c
 +++ b/fs/ext4/move_extent.c
-@@ -905,6 +905,13 @@ mext_check_arguments(struct inode *orig_inode,
+@@ -985,6 +985,13 @@ mext_check_arguments(struct inode *orig_inode,
  		return -EINVAL;
  	}
  
@@ -100,3 +97,6 @@ index bbf2dd9..c5250b5 100644
  	/* 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
+


Index: gen-patches
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-12/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:44:12 -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-12/hdpvr-ir-enable.patch,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- hdpvr-ir-enable.patch	5 Sep 2009 01:22:31 -0000	1.5
+++ hdpvr-ir-enable.patch	4 Jan 2010 15:44:12 -0000	1.6
@@ -1,227 +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 |   12 ++---
- drivers/media/video/hdpvr/hdpvr-i2c.c  |   88 ++++++++++++++++++++++---------
- drivers/media/video/hdpvr/hdpvr.h      |    2 +-
- 4 files changed, 68 insertions(+), 38 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..d2bb4c2 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,12 +413,9 @@ static void hdpvr_disconnect(struct usb_interface *interface)
- 	mutex_unlock(&dev->io_mutex);
- 
- 	/* deregister I2C adapter */
--#ifdef CONFIG_I2C
-+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
- 	mutex_lock(&dev->i2c_mutex);
--	if (dev->i2c_adapter)
--		i2c_del_adapter(dev->i2c_adapter);
--	kfree(dev->i2c_adapter);
--	dev->i2c_adapter = NULL;
-+	i2c_del_adapter(&dev->i2c_adapter);
- 	mutex_unlock(&dev->i2c_mutex);
- #endif /* CONFIG_I2C */
- 
-diff --git a/drivers/media/video/hdpvr/hdpvr-i2c.c b/drivers/media/video/hdpvr/hdpvr-i2c.c
-index c4b5d15..7cd977f 100644
---- a/drivers/media/video/hdpvr/hdpvr-i2c.c
-+++ b/drivers/media/video/hdpvr/hdpvr-i2c.c
-@@ -10,6 +10,7 @@
-  *
-  */
- 
-+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
- #include <linux/i2c.h>
- 
- #include "hdpvr.h"
-@@ -19,10 +20,13 @@
- 
- #define REQTYPE_I2C_READ	0xb1
- #define REQTYPE_I2C_WRITE	0xb0
--#define REQTYPE_I2C_WRITE_STATT	0xd0
-+#define REQTYPE_I2C_WRITE_STAT	0xd0
-+
-+#define HDPVR_HW_Z8F0811_IR_TX_I2C_ADDR	0x70
-+#define HDPVR_HW_Z8F0811_IR_RX_I2C_ADDR	0x71
- 
- 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 +36,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 +50,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,17 +61,17 @@ 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;
- 
- 	ret = usb_control_msg(dev->udev,
- 			      usb_rcvctrlpipe(dev->udev, 0),
--			      REQTYPE_I2C_WRITE_STATT, CTRL_READ_REQUEST,
-+			      REQTYPE_I2C_WRITE_STAT, CTRL_READ_REQUEST,
- 			      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 +97,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,32 +118,64 @@ static struct i2c_algorithm hdpvr_algo = {
- 	.functionality = hdpvr_functionality,
- };
- 
-+static struct i2c_adapter hdpvr_i2c_adap_template = {
-+	.name		= "Hauppauge HD PVR I2C",
-+	.owner		= THIS_MODULE,
-+	.id		= I2C_HW_B_HDPVR,
-+	.algo		= &hdpvr_algo,
-+	.class		= I2C_CLASS_TV_ANALOG,
-+};
-+
-+#if 1
-+static struct i2c_board_info hdpvr_i2c_board_info = {
-+	I2C_BOARD_INFO("ir_tx_z8f0811_haup", HDPVR_HW_Z8F0811_IR_TX_I2C_ADDR),
-+	I2C_BOARD_INFO("ir_rx_z8f0811_haup", HDPVR_HW_Z8F0811_IR_RX_I2C_ADDR),
-+};
-+#endif
-+
-+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;
- 	int retval = -ENOMEM;
- 
--	i2c_adap = kzalloc(sizeof(struct i2c_adapter), GFP_KERNEL);
--	if (i2c_adap == NULL)
--		goto error;
-+	hdpvr_activate_ir(dev);
-+
-+	memcpy(&dev->i2c_adapter, &hdpvr_i2c_adap_template,
-+	       sizeof(struct i2c_adapter));
- 
--	strlcpy(i2c_adap->name, "Hauppauge HD PVR I2C",
--		sizeof(i2c_adap->name));
--	i2c_adap->algo  = &hdpvr_algo;
--	i2c_adap->class = I2C_CLASS_TV_ANALOG;
--	i2c_adap->id    = I2C_HW_B_HDPVR;
--	i2c_adap->owner = THIS_MODULE;
--	i2c_adap->dev.parent = &dev->udev->dev;
-+	dev->i2c_adapter.dev.parent = &dev->udev->dev;
- 
--	i2c_set_adapdata(i2c_adap, dev);
-+	i2c_set_adapdata(&dev->i2c_adapter, dev);
- 
--	retval = i2c_add_adapter(i2c_adap);
-+	retval = i2c_add_adapter(&dev->i2c_adapter);
- 
--	if (!retval)
--		dev->i2c_adapter = i2c_adap;
--	else
--		kfree(i2c_adap);
-+	if (retval)
-+		goto error;
-+
-+#if 1
-+	i2c_new_device(&dev->i2c_adapter, &hdpvr_i2c_board_info);
-+#endif
- 
- error:
- 	return retval;
- }
-+
-+#endif /* CONFIG_I2C */
-diff --git a/drivers/media/video/hdpvr/hdpvr.h b/drivers/media/video/hdpvr/hdpvr.h
-index 1edd875..173aefa 100644
---- a/drivers/media/video/hdpvr/hdpvr.h
-+++ b/drivers/media/video/hdpvr/hdpvr.h
-@@ -101,7 +101,7 @@ struct hdpvr_device {
- 	struct work_struct	worker;
- 
- 	/* I2C adapter */
--	struct i2c_adapter	*i2c_adapter;
-+	struct i2c_adapter	i2c_adapter;
- 	/* I2C lock */
- 	struct mutex		i2c_mutex;
- 


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-12/kernel.spec,v
retrieving revision 1.1960
retrieving revision 1.1961
diff -u -p -r1.1960 -r1.1961
--- kernel.spec	21 Dec 2009 04:48:04 -0000	1.1960
+++ kernel.spec	4 Jan 2010 15:44:12 -0000	1.1961
@@ -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   1786
+%define fedora_cvs_origin   1960
 %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 31
+%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 9
+%define stable_update 2
 # Is it a -stable RC?
 %define stable_rc 0
 # Set rpm version accordingly
@@ -59,9 +59,9 @@ Summary: The Linux kernel
 # The next upstream release sublevel (base_sublevel+1)
 %define upstream_sublevel %(echo $((%{base_sublevel} + 1)))
 # The rc snapshot level
-%define rcrev 9
+%define rcrev 0
 # The git snapshot level
-%define gitrev 2
+%define gitrev 0
 # Set rpm version accordingly
 %define rpmversion 2.6.%{upstream_sublevel}
 %endif
@@ -111,7 +111,7 @@ Summary: The Linux kernel
 %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
@@ -131,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).
@@ -150,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}
 
@@ -166,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
 
@@ -616,19 +617,7 @@ Patch20: linux-2.6-hotfixes.patch
 
 Patch21: linux-2.6-tracehook.patch
 Patch22: linux-2.6-utrace.patch
-
-Patch30: sched-introduce-SCHED_RESET_ON_FORK-scheduling-policy-flag.patch
-
-Patch31: disable-stackprotector-all.patch
-
-# Intel IOMMU fixes/workarounds
-Patch100: linux-2.6-die-closed-source-bios-muppets-die.patch
-Patch101: linux-2.6-intel-iommu-updates.patch
-Patch102: linux-2.6-iommu-at-zero.patch
-Patch103: linux-2.6-iommu-dmar-all-1s.patch
-Patch104: linux-2.6-iommu-another-hp-screwup.patch
-Patch105: linux-2.6-iommu-sanity-checks-for-intr-remap-too.patch
-Patch106: linux-2.6-iommu-hp-cantiga-resume.patch
+Patch23: linux-2.6-utrace-ptrace.patch
 
 Patch141: linux-2.6-ps3-storage-alias.patch
 Patch143: linux-2.6-g5-therm-shutdown.patch
@@ -644,9 +633,12 @@ Patch260: linux-2.6-debug-nmi-timeout.pa
 Patch270: linux-2.6-debug-taint-vm.patch
 Patch280: linux-2.6-debug-spinlock-taint.patch
 Patch300: linux-2.6-driver-level-usb-autosuspend.diff
-Patch302: linux-2.6-qcserial-autosuspend.diff
-Patch303: linux-2.6-bluetooth-autosuspend.diff
+Patch303: linux-2.6-enable-btusb-autosuspend.patch
 Patch304: linux-2.6-usb-uvc-autosuspend.diff
+Patch305: linux-2.6-fix-btusb-autosuspend.patch
+
+Patch310: linux-2.6-autoload-wmi.patch
+
 Patch340: linux-2.6-debug-vm-would-have-oomkilled.patch
 Patch360: linux-2.6-debug-always-inline-kzalloc.patch
 Patch380: linux-2.6-defaults-pci_no_msi.patch
@@ -663,8 +655,6 @@ Patch460: linux-2.6-serial-460800.patch
 
 Patch470: die-floppy-die.patch
 
-Patch500: linux-2.6.31-copy_from_user-bounds.patch
-
 Patch510: linux-2.6-silence-noise.patch
 Patch520: linux-2.6.30-hush-rom-warning.patch
 Patch530: linux-2.6-silence-fbcon-logo.patch
@@ -672,65 +662,40 @@ Patch570: linux-2.6-selinux-mprotect-che
 Patch580: linux-2.6-sparc-selinux-mprotect-checks.patch
 
 Patch600: linux-2.6-defaults-alsa-hda-beep-off.patch
-Patch601: linux-2.6-alsa-improve-hda-powerdown.patch
 Patch610: hda_intel-prealloc-4mb-dmabuffer.patch
-Patch611: alsa-tell-user-that-stream-to-be-rewound-is-suspended.patch
 
 Patch670: linux-2.6-ata-quirk.patch
-Patch671: linux-2.6-ahci-export-capabilities.patch
 
-Patch680: prism54-remove-pci-dev-table.patch
-Patch681: linux-2.6-ath9k-fixes.patch
+Patch680: linux-2.6-rt2x00-asus-leds.patch
+Patch681: linux-2.6-mac80211-age-scan-results-on-resume.patch
+
+Patch700: linux-2.6.31-nx-data.patch
+Patch701: linux-2.6.31-modules-ro-nx.patch
 
 Patch800: linux-2.6-crash-driver.patch
 
 Patch900: linux-2.6-pci-cacheline-sizing.patch
 
-# ACPI
-Patch1100: linux-2.6.31-cpuidle-faster-io.patch
-# EC fixes from 2.6.32 (#492699, #525681)
-Patch1110: acpi-ec-merge-irq-and-poll-modes.patch
-Patch1120: acpi-ec-use-burst-mode-only-for-msi-notebooks.patch
-Patch1130: acpi-ec-restart-command-even-if-no-interrupts-from-ec.patch
-
-Patch1515: lirc-2.6.31.patch
+Patch1515: lirc-2.6.32.patch
 Patch1517: hdpvr-ir-enable.patch
-Patch1518: hid-ignore-all-recent-imon-devices.patch
 
 # virt + ksm patches
-Patch1550: linux-2.6-ksm.patch
 Patch1551: linux-2.6-ksm-kvm.patch
-Patch1552: linux-2.6-ksm-updates.patch
-Patch1553: linux-2.6-ksm-fix-munlock.patch
-Patch1554: linux-2.6-ksm-updates-from-32.patch
-Patch1579: linux-2.6-virtio_blk-revert-QUEUE_FLAG_VIRT-addition.patch
-Patch1583: linux-2.6-xen-fix-is_disconnected_device-exists_disconnected_device.patch
-Patch1584: linux-2.6-xen-improvement-to-wait_for_devices.patch
-Patch1585: linux-2.6-xen-increase-device-connection-timeout.patch
-Patch1586: linux-2.6-virtio_blk-add-support-for-cache-flush.patch
+Patch1552: linux-2.6-userspace_kvmclock_offset.patch
 
 # nouveau + drm fixes
-Patch1810: kms-offb-handoff.patch
-Patch1812: drm-next-b390f944.patch
-Patch1813: drm-edid-9340d8cf.patch
-
-Patch1820: drm-radeon-pm.patch
-Patch1821: drm-nouveau.patch
-Patch1822: drm-i915-resume-force-mode.patch
+Patch1811: drm-radeon-fixes.patch
+Patch1812: drm-radeon-dp-support.patch
+Patch1813: drm-radeon-pm.patch
+Patch1814: drm-nouveau.patch
+Patch1818: drm-i915-resume-force-mode.patch
+Patch1819: drm-intel-big-hammer.patch
+Patch1821: drm-page-flip.patch
 # intel drm is all merged upstream
 Patch1824: drm-intel-next.patch
 Patch1825: drm-intel-pm.patch
-Patch1826: drm-intel-no-tv-hotplug.patch
-Patch1839: drm-radeon-misc-fixes.patch
-#Patch1840: drm-radeon-rv410-test-fix.patch
-
-# vga arb
-Patch1900: linux-2.6-vga-arb.patch
-Patch1901: drm-vga-arb.patch
-Patch1902: drm-radeon-kms-arbiter-return-ignore.patch
-
-# make harmless fbcon debug less loud
-Patch1903: fbcon-lower-debug.patch
+Patch1827: linux-2.6-intel-agp-clear-gtt.patch
+Patch1828: drm-radeon-fix-crtc-vbl-update-for-r600.patch
 
 # kludge to make ich9 e1000 work
 Patch2000: linux-2.6-e1000-ich9.patch
@@ -746,17 +711,13 @@ Patch2802: linux-2.6-silence-acpi-blackl
 Patch2899: linux-2.6-v4l-dvb-fixes.patch
 Patch2900: linux-2.6-v4l-dvb-update.patch
 Patch2901: linux-2.6-v4l-dvb-experimental.patch
-Patch2904: v4l-dvb-fix-cx25840-firmware-loading.patch
+Patch2903: linux-2.6-revert-dvb-net-kabi-change.patch
 
 # fs fixes
 
-#btrfs
-Patch3000: linux-2.6-btrfs-upstream.patch
-
 # NFSv4
-Patch3050: linux-2.6.31-nfsd-proot.patch
-Patch3060: linux-2.6-nfs4-ver4opt.patch
-Patch3061: linux-2.6-nfs4-callback-hidden.patch
+Patch3050: linux-2.6-nfsd4-proots.patch
+Patch3051: linux-2.6-nfs4-callback-hidden.patch
 
 # VIA Nano / VX8xx updates
 Patch11010: via-hwmon-temp-sensor.patch
@@ -764,40 +725,7 @@ Patch11010: via-hwmon-temp-sensor.patch
 # patches headed upstream
 Patch12010: linux-2.6-dell-laptop-rfkill-fix.patch
 Patch12011: linux-2.6-block-silently-error-unsupported-empty-barriers-too.patch
-Patch12012: linux-2.6-rtc-show-hctosys.patch
 Patch12013: linux-2.6-rfkill-all.patch
-Patch12014: linux-2.6-selinux-module-load-perms.patch
-
-# sched fixes cherry-picked from 2.6.32
-Patch13100: sched-deal-with-low-load-in-wake-affine.patch
-Patch13101: sched-ensure-child-cant-gain-time-over-its-parent-after-fork.patch
-Patch13102: sched-remove-shortcut-from-select-task-rq-fair.patch
-# latency defaults from 2.6.32
-Patch13110: sched-retune-scheduler-latency-defaults.patch
-# Fix huge wakeup latencies
-Patch13120: sched-update-the-clock-of-runqueue-select-task-rq-selected.patch
-
-# patches headed for -stable
-
-# make perf counter API available to userspace (#527264)
-Patch14010: perf-make-perf-counter-h-available-to-userspace.patch
-
-# fix resource counter issues on *big* machines
-Patch14101: improve-resource-counter-scalability.patch
-
-# fix perf for sysprof
-Patch14420: perf-events-fix-swevent-hrtimer-sampling.patch
-Patch14421: perf-events-dont-generate-events-for-the-idle-task.patch
-
-# tg3 fixes (#527209)
-Patch14451: tg3-01-delay-mdio-bus-init-until-fw-finishes.patch
-Patch14452: tg3-02-fix-tso-test-against-wrong-flags-var.patch
-Patch14453: tg3-03-fix-57780-asic-rev-pcie-link-receiver-errors.patch
-Patch14454: tg3-04-prevent-tx-bd-corruption.patch
-Patch14455: tg3-05-assign-flags-to-fixes-in-start_xmit_dma_bug.patch
-Patch14456: tg3-06-fix-5906-transmit-hangs.patch
-
-Patch14463: dlm-fix-connection-close-handling.patch
 
 %endif
 
@@ -1016,12 +944,14 @@ ApplyPatch()
   if [ ! -f $RPM_SOURCE_DIR/$patch ]; then
     exit 1
   fi
+%if !%{using_upstream_branch}
   if ! egrep "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME%%%%%{?variant}}.spec ; then
     if [ "${patch:0:10}" != "patch-2.6." ] ; then
       echo "ERROR: Patch  $patch  not listed as a source patch in specfile"
       exit 1
     fi
   fi 2>/dev/null
+%endif
   case "$patch" in
   *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;;
   *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;;
@@ -1067,6 +997,8 @@ ApplyOptionalPatch()
 # pre-{base_sublevel+1}-rc1 case
 %if 0%{?gitrev}
 %define vanillaversion 2.6.%{base_sublevel}-git%{gitrev}
+%else
+%define vanillaversion 2.6.%{base_sublevel}
 %endif
 %endif
 %endif
@@ -1188,7 +1120,7 @@ make -f %{SOURCE20} VERSION=%{version} c
   done
 %endif
 
-#ApplyOptionalPatch git-linus.diff
+ApplyOptionalPatch git-linus.diff
 
 # This patch adds a "make nonint_oldconfig" which is non-interactive and
 # also gives a list of missing options at the end. Useful for automated
@@ -1207,18 +1139,15 @@ ApplyOptionalPatch linux-2.6-compile-fix
 # revert patches from upstream that conflict or that we get via other means
 ApplyOptionalPatch linux-2.6-upstream-reverts.patch -R
 
-ApplyOptionalPatch git-cpufreq.patch
-#ApplyOptionalPatch git-bluetooth.patch
+#ApplyPatch git-cpufreq.patch
+#ApplyPatch git-bluetooth.patch
 
 ApplyPatch linux-2.6-hotfixes.patch
 
 # Roland's utrace ptrace replacement.
 ApplyPatch linux-2.6-tracehook.patch
 ApplyPatch linux-2.6-utrace.patch
-
-ApplyPatch sched-introduce-SCHED_RESET_ON_FORK-scheduling-policy-flag.patch
-
-ApplyPatch disable-stackprotector-all.patch
+ApplyPatch linux-2.6-utrace-ptrace.patch
 
 # Architecture patches
 # x86(-64)
@@ -1228,20 +1157,6 @@ ApplyPatch linux-2.6-dell-laptop-rfkill-
 #
 # Intel IOMMU
 #
-# Quiesce USB host controllers before setting up the IOMMU
-ApplyPatch linux-2.6-die-closed-source-bios-muppets-die.patch
-# Some performance fixes, unify hardware/software passthrough support, and
-# most importantly: notice when the BIOS points us to a region that returns
-# all 0xFF, and claims that there's an IOMMU there.
-ApplyPatch linux-2.6-intel-iommu-updates.patch
-ApplyPatch linux-2.6-iommu-at-zero.patch
-ApplyPatch linux-2.6-iommu-dmar-all-1s.patch
-# Check for RMRRs which end before they start
-ApplyPatch linux-2.6-iommu-another-hp-screwup.patch
-# Apply the 'at zero' and 'all 0xFF' sanity checks for intr_remap too
-ApplyPatch linux-2.6-iommu-sanity-checks-for-intr-remap-too.patch
-# Fix up MMIO BAR for integrated graphics on HP laptops on resume (#536675)
-ApplyPatch linux-2.6-iommu-hp-cantiga-resume.patch
 
 #
 # PowerPC
@@ -1277,30 +1192,25 @@ ApplyPatch linux-2.6-execshield.patch
 # xfs
 
 # btrfs
-ApplyPatch linux-2.6-btrfs-upstream.patch
 
 # eCryptfs
 
 # NFSv4
-ApplyPatch linux-2.6.31-nfsd-proot.patch
-ApplyPatch linux-2.6-nfs4-ver4opt.patch
+ApplyPatch linux-2.6-nfsd4-proots.patch
 ApplyPatch linux-2.6-nfs4-callback-hidden.patch
 
 # USB
 ApplyPatch linux-2.6-driver-level-usb-autosuspend.diff
-ApplyPatch linux-2.6-qcserial-autosuspend.diff
-ApplyPatch linux-2.6-bluetooth-autosuspend.diff
+ApplyPatch linux-2.6-enable-btusb-autosuspend.patch
 ApplyPatch linux-2.6-usb-uvc-autosuspend.diff
+ApplyPatch linux-2.6-fix-btusb-autosuspend.patch
+
+# WMI
+ApplyPatch linux-2.6-autoload-wmi.patch
 
 # ACPI
 ApplyPatch linux-2.6-defaults-acpi-video.patch
 ApplyPatch linux-2.6-acpi-video-dos.patch
-# cpuidle: Fix the menu governor to boost IO performance
-ApplyPatch linux-2.6.31-cpuidle-faster-io.patch
-# EC fixes from 2.6.32 (#492699, #525681)
-ApplyPatch acpi-ec-merge-irq-and-poll-modes.patch
-ApplyPatch acpi-ec-use-burst-mode-only-for-msi-notebooks.patch
-ApplyPatch acpi-ec-restart-command-even-if-no-interrupts-from-ec.patch
 
 # Various low-impact patches to aid debugging.
 ApplyPatch linux-2.6-debug-sizeof-structs.patch
@@ -1329,9 +1239,7 @@ ApplyPatch linux-2.6-defaults-aspm.patch
 # ALSA
 # squelch hda_beep by default
 ApplyPatch linux-2.6-defaults-alsa-hda-beep-off.patch
-ApplyPatch linux-2.6-alsa-improve-hda-powerdown.patch
 ApplyPatch hda_intel-prealloc-4mb-dmabuffer.patch
-ApplyPatch alsa-tell-user-that-stream-to-be-rewound-is-suspended.patch
 
 # Networking
 
@@ -1342,10 +1250,6 @@ ApplyPatch linux-2.6-input-kill-stupid-m
 # stop floppy.ko from autoloading during udev...
 ApplyPatch die-floppy-die.patch
 
-# make copy_from_user to a stack slot provable right
-# hosed stuff, just drop this close to beta
-#ApplyPatch linux-2.6.31-copy_from_user-bounds.patch
-
 # Get away from having to poll Toshibas
 #ApplyPatch linux-2.6-input-fix-toshiba-hotkeys.patch
 
@@ -1372,14 +1276,16 @@ ApplyPatch linux-2.6-silence-fbcon-logo.
 # ia64 ata quirk
 ApplyPatch linux-2.6-ata-quirk.patch
 
-# Make it possible to identify non-hotplug SATA ports
-ApplyPatch linux-2.6-ahci-export-capabilities.patch
+# rt2x00: back-port activity LED init patches
+#ApplyPatch linux-2.6-rt2x00-asus-leds.patch
 
-# prism54: remove pci modinfo device table
-ApplyPatch prism54-remove-pci-dev-table.patch
+# back-port scan result aging patches
+#ApplyPatch linux-2.6-mac80211-age-scan-results-on-resume.patch
 
-# ath9k: add fixes suggested by upstream maintainer
-ApplyPatch linux-2.6-ath9k-fixes.patch
+# Mark kernel data as NX
+#ApplyPatch linux-2.6.31-nx-data.patch
+# Apply NX/RO to modules
+#ApplyPatch linux-2.6.31-modules-ro-nx.patch
 
 # /dev/crash driver.
 ApplyPatch linux-2.6-crash-driver.patch
@@ -1388,107 +1294,53 @@ ApplyPatch linux-2.6-crash-driver.patch
 ApplyPatch linux-2.6-pci-cacheline-sizing.patch
 
 # http://www.lirc.org/
-ApplyPatch lirc-2.6.31.patch
+ApplyPatch lirc-2.6.32.patch
 # enable IR receiver on Hauppauge HD PVR (v4l-dvb merge pending)
 ApplyPatch hdpvr-ir-enable.patch
-# tell usbhid to ignore all imon devices (sent upstream 2009.07.31)
-ApplyPatch hid-ignore-all-recent-imon-devices.patch
 
 # Add kernel KSM support
-ApplyPatch linux-2.6-ksm.patch
-ApplyPatch linux-2.6-ksm-updates.patch
-ApplyPatch linux-2.6-ksm-fix-munlock.patch
-ApplyPatch linux-2.6-ksm-updates-from-32.patch
 # Optimize KVM for KSM support
-ApplyPatch linux-2.6-ksm-kvm.patch
+#ApplyPatch linux-2.6-ksm-kvm.patch
 
 # Assorted Virt Fixes
-ApplyPatch linux-2.6-virtio_blk-revert-QUEUE_FLAG_VIRT-addition.patch
-ApplyPatch linux-2.6-xen-fix-is_disconnected_device-exists_disconnected_device.patch
-ApplyPatch linux-2.6-xen-improvement-to-wait_for_devices.patch
-ApplyPatch linux-2.6-xen-increase-device-connection-timeout.patch
-ApplyPatch linux-2.6-virtio_blk-add-support-for-cache-flush.patch
+ApplyPatch linux-2.6-userspace_kvmclock_offset.patch
 
 # Fix block I/O errors in KVM
-ApplyPatch linux-2.6-block-silently-error-unsupported-empty-barriers-too.patch
+#ApplyPatch linux-2.6-block-silently-error-unsupported-empty-barriers-too.patch
 
 ApplyPatch linux-2.6-e1000-ich9.patch
 
 # Nouveau DRM + drm fixes
-ApplyPatch kms-offb-handoff.patch
-ApplyPatch drm-next-b390f944.patch
-ApplyPatch drm-edid-9340d8cf.patch
-ApplyPatch drm-radeon-misc-fixes.patch
-#ApplyPatch drm-radeon-rv410-test-fix.patch
-
+ApplyPatch drm-radeon-fixes.patch
+ApplyPatch drm-radeon-dp-support.patch
 ApplyPatch drm-nouveau.patch
 # pm broken on my thinkpad t60p - airlied
 #ApplyPatch drm-radeon-pm.patch
-ApplyPatch drm-i915-resume-force-mode.patch
+#ApplyPatch drm-i915-resume-force-mode.patch
+ApplyPatch drm-intel-big-hammer.patch
+#ApplyPatch drm-page-flip.patch
 ApplyOptionalPatch drm-intel-next.patch
 #this appears to be upstream - mjg59?
 #ApplyPatch drm-intel-pm.patch
-ApplyPatch drm-intel-no-tv-hotplug.patch
-#ApplyPatch drm-disable-r600-aspm.patch
-
-# VGA arb + drm
-ApplyPatch linux-2.6-vga-arb.patch
-ApplyPatch drm-vga-arb.patch
-ApplyPatch drm-radeon-kms-arbiter-return-ignore.patch
-
-# Lower debug level of fbcon handover messages (rh#538526)
-ApplyPatch fbcon-lower-debug.patch
+# Some BIOSes don't clear the whole GTT, and it causes IOMMU faults
+ApplyPatch linux-2.6-intel-agp-clear-gtt.patch
+ApplyPatch drm-radeon-fix-crtc-vbl-update-for-r600.patch
 
 # linux1394 git patches
-# apply if non-empty
-ApplyOptionalPatch linux-2.6-firewire-git-update.patch
-ApplyOptionalPatch linux-2.6-firewire-git-pending.patch
+#ApplyPatch linux-2.6-firewire-git-update.patch
+#ApplyOptionalPatch linux-2.6-firewire-git-pending.patch
 
 # silence the ACPI blacklist code
 ApplyPatch linux-2.6-silence-acpi-blacklist.patch
 
 # V4L/DVB updates/fixes/experimental drivers
-# apply if non-empty
-ApplyOptionalPatch linux-2.6-v4l-dvb-fixes.patch
-ApplyOptionalPatch linux-2.6-v4l-dvb-update.patch
-ApplyOptionalPatch linux-2.6-v4l-dvb-experimental.patch
-
-ApplyPatch v4l-dvb-fix-cx25840-firmware-loading.patch
+#ApplyPatch linux-2.6-v4l-dvb-fixes.patch
+#ApplyPatch linux-2.6-v4l-dvb-update.patch
+#ApplyPatch linux-2.6-v4l-dvb-experimental.patch
+#ApplyPatch linux-2.6-revert-dvb-net-kabi-change.patch
 
 # Patches headed upstream
-ApplyPatch linux-2.6-rtc-show-hctosys.patch
 ApplyPatch linux-2.6-rfkill-all.patch
-ApplyPatch linux-2.6-selinux-module-load-perms.patch
-
-# patches headed for -stable
-
-# make perf counter API available to userspace (#527264)
-ApplyPatch perf-make-perf-counter-h-available-to-userspace.patch
-
-ApplyPatch improve-resource-counter-scalability.patch
-
-# fix perf for sysprof
-ApplyPatch perf-events-fix-swevent-hrtimer-sampling.patch
-ApplyPatch perf-events-dont-generate-events-for-the-idle-task.patch
-
-# tg3 fixes (#527209)
-ApplyPatch tg3-01-delay-mdio-bus-init-until-fw-finishes.patch
-ApplyPatch tg3-02-fix-tso-test-against-wrong-flags-var.patch
-ApplyPatch tg3-03-fix-57780-asic-rev-pcie-link-receiver-errors.patch
-ApplyPatch tg3-04-prevent-tx-bd-corruption.patch
-ApplyPatch tg3-05-assign-flags-to-fixes-in-start_xmit_dma_bug.patch
-ApplyPatch tg3-06-fix-5906-transmit-hangs.patch
-
-# sched fixes cherry-picked from 2.6.32
-ApplyPatch sched-deal-with-low-load-in-wake-affine.patch
-ApplyPatch sched-ensure-child-cant-gain-time-over-its-parent-after-fork.patch
-ApplyPatch sched-remove-shortcut-from-select-task-rq-fair.patch
-# latency defaults from 2.6.32
-ApplyPatch sched-retune-scheduler-latency-defaults.patch
-# fix wakeup latency
-ApplyPatch sched-update-the-clock-of-runqueue-select-task-rq-selected.patch
-
-ApplyPatch dlm-fix-connection-close-handling.patch
 
 # END OF PATCH APPLICATIONS
 
@@ -1548,7 +1400,8 @@ cd ..
 # beforehand to get the proper final build ID bits into the embedded image.
 # This affects the vDSO images in vmlinux, and the vmlinux image in bzImage.
 export AFTER_LINK=\
-'sh -xc "/usr/lib/rpm/debugedit -b $$RPM_BUILD_DIR -d /usr/src/debug -i $@"'
+'sh -xc "/usr/lib/rpm/debugedit -b $$RPM_BUILD_DIR -d /usr/src/debug \
+    				-i $@ > $@.id"'
 %endif
 
 cp_vmlinux()
@@ -1712,6 +1565,12 @@ hwcap 0 nosegneg"
     cp $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/.config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf
     cd ..
 
+    if test -s vmlinux.id; then
+      cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id
+    else
+      echo >&2 "*** WARNING *** no vmlinux build ID! ***"
+    fi
+
     #
     # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm
     #
@@ -1807,8 +1666,7 @@ BuildKernel vmlinux vmlinux kdump vmlinu
 
 %if %{with_doc}
 # Make the HTML and man pages.
-# XXX nix %{?_smp_mflags} here, buggy Documentation/*/Makefile!
-make htmldocs mandocs || %{doc_build_fail}
+make %{?_smp_mflags} htmldocs mandocs || %{doc_build_fail}
 
 # sometimes non-world-readable files sneak into the kernel source tree
 chmod -R a=rX Documentation
@@ -2098,9 +1956,9 @@ fi
 %endif\
 /lib/modules/%{KVERREL}%{?2:.%{2}}/modules.*\
 %if %{with_dracut}\
-/boot/initramfs-%{KVERREL}%{?2:.%{2}}.img\
+%ghost /boot/initramfs-%{KVERREL}%{?2:.%{2}}.img\
 %else\
-/boot/initrd-%{KVERREL}%{?2:.%{2}}.img\
+%ghost /boot/initrd-%{KVERREL}%{?2:.%{2}}.img\
 %endif\
 %{expand:%%files %{?2:%{2}-}devel}\
 %defattr(-,root,root)\
@@ -2139,422 +1997,237 @@ fi
 # and build.
 
 %changelog
-* Mon Dec 21 2009 Dave Airlie <airlied at redhat.com> 2.6.31.9-174
-- revert rv410 fix broke some things
+* Fri Jan  1 2010 Kyle McMartin <kyle at redhat.com> 2.6.32.2-1
+- Rebased F-12 to 2.6.32, still needs forward porting of patches.
 
-* Mon Dec 21 2009 Ben Skeggs <bskeggs at redhat.com> 2.6.31.9-173
-- nouveau: fix dim panel issues on certain laptops (rh#547554)
-- nouveau: fix some issues when running without ctxprogs
-- nouveau: fix error handling in init paths
-- nouveau: add vga arbitration hooks
-- nouveau: fix nv04 sw methods
-
-* Fri Dec 18 2009 Kyle McMartin <kyle at redhat.com> 2.6.31.9-172
-- stable update 2.6.31.9
-
-* Thu Dec 17 2009 Ben Skeggs <bskeggs at redhat.com> 2.6.31.8-171
-- drm-nouveau.patch: add support for GF7100 (NV63)
-
-* Wed Dec 16 2009 Adam Jackson <ajax at redhat.com>
-- drm-edid-9340d8cf.patch: Sync DRM EDID with Linus master.
-- drm-conservative-fallback-modes.patch, drm-edid-retry.patch,
-  drm-edid-header-fixup.patch, drm-default-mode.patch: Drop, merged into
-  the above.
-
-* Mon Dec 14 2009 Kyle McMartin <kyle at redhat.com> 2.6.31.8-169
-- 2.6.31.8
-
-* Thu Dec 10 2009 Kyle McMartin <kyle at redhat.com>
-- ipv4-fix-null-ptr-deref-in-ip_fragment.patch: upstream.
-- nuke highmem patches now in stable.
-- crypto-via-padlock-fix-nano-aes.patch: upstream.
-- fix up drm-next-$sha.patch
-
-* Wed Dec 09 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31.6-167
-- Linux 2.6.31.7
-- NOTE: drm patch still needs fixing.
+* Thu Dec 24 2009 Kyle McMartin <kyle at redhat.com> 2.6.32.2-15
+- Add patch from dri-devel to fix vblanks on r600.
+  [http://marc.info/?l=dri-devel&m=126137027403059&w=2]
+
+* Fri Dec 18 2009 Kyle McMartin <kyle at redhat.com> 2.6.32.2-14
+- Linux 2.6.32.2
+- dropped upstream patches.
+
+* Fri Dec 18 2009 Roland McGrath <roland at redhat.com> - 2.6.32.1-13
+- minor utrace update
+
+* Thu Dec 17 2009 Matthew Garrett <mjg at redhat.com> 2.6.32.1-12
+- linux-2.6-driver-level-usb-autosuspend.diff: fix so it works properly...
+- linux-2.6-fix-btusb-autosuspend.patch: avoid bluetooth connection drops
+- linux-2.6-enable-btusb-autosuspend.patch: and default it to on
+- linux-2.6-autoload-wmi.patch: autoload WMI drivers
+
+* Thu Dec 17 2009 Jarod Wilson <jarod at redhat.com> 2.6.32.1-11
+- Split off onboard decode imon devices into pure input driver,
+  leaving lirc_imon for the ancient imon devices only
+- Fix NULL ptr deref in lirc_serial (#543886)
+- Assorted lirc_mceusb fixups suggested by Mauro
+- Dropped compat ioctls from lirc_dev, main ioctls should now be
+  compatible between 32-bit and 64-bit (also at Mauro's suggestion)
+
+* Wed Dec 16 2009 Roland McGrath <roland at redhat.com> 2.6.32.1-10
+- utrace update, now testing the utrace-based ptrace!
+
+* Mon Dec 14 2009 Kyle McMartin <kyle at redhat.com> 2.6.32.1-9
+- 2.6.32.1
+- ext4 patches and more...
+
+* Wed Dec 09 2009 Kyle McMartin <kyle at redhat.com> 2.6.32-8
+- Add a patch off lkml from krh to fix perf when DEBUG_PERF_USE_VMALLOC
+  (rhbz#542791)
+- Re-enable CONFIG_DEBUG_PERF_USE_VMALLOC on debug kernels.
 
-* Wed Dec 09 2009 Kyle McMartin <kyle at redhat.com> 2.6.31.6-166
+* Wed Dec 09 2009 Kyle McMartin <kyle at redhat.com> 2.6.32-7
 - ext4-fix-insufficient-checks-in-EXT4_IOC_MOVE_EXT.patch: CVE-2009-4131
   fix insufficient permission checking which could result in arbitrary
   data corruption by a local unprivileged user.
 
-* Tue Dec  8 2009 Steve Dickson <steved at redhat.com> 2.6.31.6-165
-- nfsd: Updated to latest pseudo root code fixing rhbz# 538609
+* Tue Dec 08 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.32-6
+- Copy fix for #540580 from F-12.
 
-* Mon Dec 07 2009 Ben Skeggs <bskeggs at redhat.com> 2.6.31.6-164
-- nouveau: fix NV17 breakage caused by NVA8 fixes
-- nouveau: use ratelimit for GPU error message
-
-* Fri Dec 04 2009 Ben Skeggs <bskeggs at redhat.com> 2.6.31.6-163
-- nouveau: reduce debug level of some warning messages (rh#543883)
-- nouveau: modesetting fixes on nva5/nva8
-- nouveau: suspend/resume fixes on nva5/nva8 (bios opcode 0x8d)
-- nouveau: cleanup chipset/arch handling, fail init on unknown chipsets
-- nouveau: fix failure to detect some outputs when dcb table is odd
-- nouveau: eliminate unnecessary cursor state changes on nv50
-
-* Thu Dec 03 2009 Kyle McMartin <kyle at redhat.com> 2.6.31.6-162
-- ipv4-fix-null-ptr-deref-in-ip_fragment.patch: null ptr deref
-  bug fix.
+* Tue Dec 08 2009 Kyle McMartin <kyle at redhat.com> 2.6.32-5
+- new rpm changes:
+ - %{PACKAGE_VERSION} -> %{version}
+ - %{PACKAGE_RELEASE} -> %{release}
+
+* Tue Dec 08 2009 Kyle McMartin <kyle at redhat.com> 2.6.32-4
+- Disable CONFIG_DEBUG_PERF_USE_VMALLOC for now, causes issues
+  on x86_64. (rhbz#542791)
 
-* Thu Dec 03 2009 Dave Airlie <airlied at redhat.com> 2.6.31.6-161
-- rv410 LVDS on resume test fix from AMD (#541562)
+* Mon Dec  7 2009 Justin M. Forbes <jforbes at redhat.com> 2.6.32-3
+- Allow userspace to adjust kvmclock offset (#530389)
 
-* Wed Dec 02 2009 John W. Linville <linville at redhat.com> 2.6.31.6-160
-- ath9k: add fixes suggested by upstream maintainer
+* Mon Dec  7 2009 Steve Dickson <steved at redhat.com> 2.6.32-2
+- Updated the NFS4 pseudo root code to the latest release.
+
+* Thu Dec 03 2009 Kyle McMartin <kyle at redhat.com> 2.6.32-1
+- Linux 2.6.32
 
-* Wed Dec 02 2009 Dave Airlie <airlied at redhat.com> 2.6.31.6-159
-- drm-radeon-misc-fixes.patch: r400 LVDS, r600 digital dpms, cursor fix, tv property
+* Wed Dec 02 2009 Kyle McMartin <kyle at redhat.com> 2.6.32-0.65.rc8.git5
+- 2.6.32-rc8-git5
+- nuke 9p cachefiles fix, upstream.
+- SLOW_WORK_PROC was renamed to SLOW_WORK_DEBUG, debugfs instead of procfs.
 
-* Wed Dec 02 2009 Ben Skeggs <bskeggs at redhat.com> 2.6.31.6-158
-- nouveau: more complete lvds script selection on >=G80 (rh#522690, rh#529859)
-- nouveau: more complete tmds script selection on >=G80 (rh#537853)
-- nouveau: TV detection fixes
-
-* Tue Dec 01 2009 Dave Airlie <airlied at redhat.com> 2.6.31.6-157
-- div/0 fix harder (#540593) - also ignore unposted GPUs with no BIOS
-
-* Tue Dec 01 2009 Dave Airlie <airlied at redhat.com> 2.6.31.6-156
-- drm-next: fixes LVDS resume on r4xx, div/0 on no bios (#540593)
-  lockup on tv-out only startup.
+* Wed Dec 02 2009 John W. Linville <linville at redhat.com> 2.6.32-0.64.rc8.git2
+- ath9k: add fixes suggested by upstream maintainer
+
+* Wed Dec 02 2009 David Woodhouse <David.Woodhouse at intel.com> 2.6.32-0.63.rc8.git2
+- forward port IOMMU fixes from F-12 for HP BIOS brokenness
+- Fix oops with intel_iommu=igfx_off
+- agp/intel: Clear full GTT at startup
+
+* Wed Dec 02 2009 Dave Airlie <airlied at redhat.com> 2.6.32-0.62.rc8.git2
+- forward port radeon fixes from F-12 + add radeon display port support
+
+* Mon Nov 30 2009 Kyle McMartin <kyle at redhat.com> 2.6.32-0.61.rc8.git2
+- fix-9p-fscache.patch: fix build.
+
+* Mon Nov 30 2009 Kyle McMartin <kyle at redhat.com> 2.6.32-0.60.rc8.git2
+- 2.6.32-rc8-git2 daily snapshot
+- nuke include/generated nuke-age since the patch was reverted upstream
+- config changes:
+ - generic:
+  +CONFIG_FSCACHE_OBJECT_LIST=y
+  +CONFIG_SLOW_WORK_PROC=y
 
 * Mon Nov 30 2009 Kyle McMartin <kyle at redhat.com>
-- drm-i915-fix-sync-to-vbl-when-vga-is-off.patch: add (rhbz#541670)
+- drm-i915-fix-sync-to-vbl-when-vga-is-off.patch: add, (rhbz#541670)
 
 * Sun Nov 29 2009 Kyle McMartin <kyle at redhat.com>
-- Drop linux-2.6-sysrq-c.patch, made consistent upstream.
+- linux-2.6-sysrq-c.patch: drop, was made consistent upstream.
 
-* Fri Nov 27 2009 Jarod Wilson <jarod at redhat.com> 2.6.31.6-153
+* Sat Nov 28 2009 Jarod Wilson <jarod at redhat.com> 2.6.32-0.55.rc8.git1
 - add device name to lirc_zilog, fixes issues w/multiple target devices
 - add lirc_imon pure input mode support for onboard decode devices
 
-* Wed Nov 26 2009 David Woodhouse <David.Woodhouse at intel.com> 2.6.31.6-152
-- Fix intel_tv_mode_set oops (#540218)
-
-* Wed Nov 26 2009 David Woodhouse <David.Woodhouse at intel.com> 2.6.31.6-151
-- VT-d: Work around yet more HP BIOS brokenness (#536675)
-
-* Wed Nov 25 2009 Kyle McMartin <kyle at redhat.com>
-- dlm: fix connection close handling.
-  Fix by lmb, requested by fabio.
-
-* Wed Nov 25 2009 David Woodhouse <David.Woodhouse at intel.com> 2.6.31.6-149
-- VT-d: Work around more HP BIOS brokenness.
-
-* Tue Nov 24 2009 Dave Airlie <airlied at redhat.com> 2.6.31.6-148
-- radeon: flush HDP cache on rendering wait - fixes r600 rendercheck failure
+* Fri Nov 27 2009 Dave Airlie <airlied at redhat.com> 2.6.32-0.54.rc8.git1
+- attempt to put nouveau back - same patch as F-12 should work
 
-* Mon Nov 23 2009 Adam Jackson <ajax at redhat.com>
-- drm-default-mode.patch: Default to 1024x768 to match UMS. (#538761)
+* Mon Nov 23 2009 Roland McGrath <roland at redhat.com>
+- Install vmlinux.id file in kernel-devel rpm.
 
-* Mon Nov 23 2009 Roland McGrath <roland at redhat.com> 2.6.31.6-146
-- Fix oops in x86-32 kernel's iret handling for bogus user %cs. (#540580)
+* Fri Nov 20 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.32-0.52.rc8.git1
+- 2.6.32-rc8-git1
+- Enable CONFIG_MEMORY_HOTPLUG (and HOTREMOVE) on x86_64
 
-* Fri Nov 21 2009 Kyle McMartin <kyle at redhat.com>
-- Fix up ssp' highmem fixes with fixes for arm & ppc.
+* Thu Nov 19 2009 Kyle McMartin <kyle at redhat.com> 2.6.32-0.51.rc7.git2
+- Oops, re-enable debug builds for rawhide... didn't mean to commit that.
 
-* Thu Nov 20 2009 Chris Wright <chrisw at redhat.com> 2.6.31.6-144
-- VT-d: another fallback for another BIOS bug (#524808)
+* Thu Nov 19 2009 Kyle McMartin <kyle at redhat.com> 2.6.32-0.50.rc7.git2
+- Disable FUNCTION_TRACER and DYNAMIC_FTRACE in non-debug builds for
+  Fedora 13. Some pondering required to see if it's actually worth doing
+  though. Anecdotal evidence worth half as much as benchmarks.
+  STACK_TRACER selects FUNCTION_TRACER, so it has to go off too, sadly,
+  since it hooks every mcount to log the stack depth for the task.
 
-* Thu Nov 19 2009 Ben Skeggs <bskeggs at redhat.com> 2.6.31.6-142
-- Oops, add new patch to spec file
+* Thu Nov 19 2009 Kyle McMartin <kyle at redhat.com> 2.6.32-0.49.rc7.git2
+- 2.6.32-rc7-git2
 
-* Thu Nov 19 2009 Ben Skeggs <bskeggs at redhat.com> 2.6.31.6-141
-- Lower debug level of fbcon handover messages (rh#538526)
+* Mon Nov 16 2009 Dave Airlie <airlied at redhat.com> 2.6.32-0.48.rc7.git1
+- backout gpg change now that koji is fixed
 
-* Thu Nov 19 2009 Dave Airlie <airlied at redhat.com> 2.6.31.6-140
-- drm-next-44c83571.patch: oops pulled the wrong tree into my f12 tree
+* Sun Nov 15 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.32-0.47.rc7.git1
+- Buildrequire gpg
 
-* Thu Nov 19 2009 Ben Skeggs <bskeggs at redhat.com> 2.6.31.6-139
-- nouveau: s/r fixes on chipsets using bios opcode 0x87
-- nouveau: fixes to bios opcode 0x8e
-- nouveau: hopefully fix nv1x context switching issues (rh#526577)
-- nouveau: support for NVA5 (GeForce G220)
-- nouveau: fixes for NVAA support
+* Sun Nov 15 2009 Chuck Ebbert <cebbert at redhat.com>
+- Fix oops in VIA Padlock driver.
 
-* Thu Nov 19 2009 Dave Airlie <airlied at redhat.com> 2.6.31.6-138
-- drm-next-d56672a9.patch: fix some rn50 cloning issues
+* Sun Nov 15 2009 Chuck Ebbert <cebbert at redhat.com>
+- Linux 2.6.32-rc7-git1
 
-* Wed Nov 18 2009 David Woodhouse <David.Woodhouse at intel.com> 2.6.31.6-137
-- Actually force the IOMMU not to be used when we detect the HP/Acer bug.
-
-* Tue Nov 17 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31.6-136
-- ACPI embedded controller fixes from Fedora 11.
-
-* Tue Nov 17 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31.6-135
-- Scheduler fixes and latency tuning patches from F-11.
-
-* Tue Nov 17 2009 Dave Airlie <airlied at redhat.com> 2.6.31.6-134
-- glad to see edid retry patch was compiled.
-
-* Tue Nov 17 2009 Dave Airlie <airlied at redhat.com> 2.6.31.6-133
-- drm-next-984d1f3c.patch: rebase with upstream fixes - drop all merged
-
-* Thu Nov 12 2009 Adam Jackson <ajax at redhat.com>
-- Actually apply the EDID retry patch
-- drm-edid-header-fixup.patch: Fix up some broken EDID headers (#534120)
-
-* Thu Nov 12 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31.6-130
-- Use ApplyOptionalPatch for v4l and firewire updates.
-- Drop unused v4l ABI fix.
-
-* Thu Nov 12 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31.6-129
-- Linux 2.6.31.6
-- Drop merged patches:
-  linux-2.6-iwlwifi-reduce-noise-when-skb-allocation-fails.patch
-  linux-2.6-libertas-crash.patch
-  pci-increase-alignment-to-make-more-space.patch
-  acpi-revert-attach-device-to-handle-early.patch
-  ahci-revert-restore-sb600-sata-controller-64-bit-dma.patch
-  acpi-pci-fix-null-pointer-dereference-in-acpi-get-pci-dev.patch
-  af_unix-fix-deadlock-connecting-to-shutdown-socket.patch
-  keys-get_instantiation_keyring-should-inc-the-keyring-refcount.patch
-  netlink-fix-typo-in-initialization.patch
-  fs-pipe-null-ptr-deref-fix.patch
-
-* Wed Nov 11 2009 Justin M. Forbes <jforbes at redhat.com> 2.6.31.5-128
-- Fix KSM for i686 users. (#532215)
-- Add KSM fixes from 2.6.32
-
-* Sun Nov 08 2009 David Woodhouse <David.Woodhouse at intel.com> 2.6.31.5-127
-- Apply fix for fallback when HP/Acer BIOS bug detected (#524808)
-- Re-enable DMAR.
-- Fix libertas crash due to skb pointer bug
-
-* Sat Nov 07 2009 Kyle McMartin <kyle at redhat.com> 2.6.31.5-126
-- Re-enable linux-2.6-die-closed-source-bios-muppets-die.patch, DMAR
-  still defaulting to off.
-
-* Sat Nov 07 2009 Kyle McMartin <kyle at redhat.com> 2.6.31.5-125
-- Disable linux-2.6-die-closed-source-bios-muppets-die.patch and
-  default DMAR to off (can be re-enabled with intel_iommu=on on the
-  command line due to last minute issues and reversion upstream.)
+* Fri Nov 13 2009 Chuck Ebbert <cebbert at redhat.com>
+- Linux 2.6.32-rc7
 
 * Thu Nov 05 2009 Jarod Wilson <jarod at redhat.com>
 - Add --with dbgonly rpmbuild option to build only debug kernels
 
-* Thu Nov 05 2009 Dave Airlie <airlied at redhat.com> 2.6.31.5-122
-- comment out kmap atomic for now, it breaks ppc build
-
-* Thu Nov 05 2009 Dave Airlie <airlied at redhat.com> 2.6.31.5-121
-- drm-radeon-fix-agp-resume.patch (#531825)
-
-* Thu Nov 05 2009 Kyle McMartin <kyle at redhat.com>
-- Add two patches from Soren from mingo/linux-2.6-x86.git to fix
-  debug_kmap_atomic prints.
-
-* Thu Nov 05 2009 Ben Skeggs <bskeggs at redhat.com>
-- nouveau: fix rh#532924
-
 * Wed Nov 04 2009 Kyle McMartin <kyle at redhat.com>
-- Make JBD2_DEBUG a toggleable debug setting. Leave it the way it was.
-  (Double checked resulting configs, don't fret.)
-
-* Wed Nov 04 2009 Adam Jackson <ajax at redhat.com> 2.6.31.5-117
-- drm-edid-retry.patch: Try DDC up to four times, like X. (#532957)
-
-* Wed Nov 04 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31.5-116
-- tg3 bug fixes (#527209)
-
-* Wed Nov 04 2009 Kyle McMartin <kyle at redhat.com> 2.6.31.5-115
-- fs/pipe.c: fix null pointer dereference (CVE-2009-3547)
+- Make JBD2_DEBUG a toggleable config option.
 
-* Wed Nov 04 2009 Ben Skeggs <bskeggs at redhat.com> 2.6.31.5-114
-- nouveau: provide info userspace needs to handle low memory situations
-- nouveau: fix for rh#532711
-- nouveau: add option to provide more debug info for rh#532579
-- patch only so large because of included register rename
+* Wed Nov 04 2009 Kyle McMartin <kyle at redhat.com> 2.6.32-0.39.rc6.git0
+- 2.6.32-rc6, fix for NULL ptr deref in cfg80211.
 
-* Tue Nov 03 2009 Adam Jackson <ajax at redhat.com> 2.6.31.5-113
-- drm-conservative-fallback-modes.patch: When an output is connected but
-  fails EDID, only add modes with refresh rates <= 60 (#514600)
+* Mon Nov 02 2009 Kyle McMartin <kyle at redhat.com> 2.6.32-0.39.rc5.git6
+- 2.6.32-rc5-git6 (with sandeen's reversion of "ext4: Remove journal_checksum
+  mount option and enable it by default")
 
-* Tue Nov 03 2009 Dave Airlie <airlied at redhat.com> 2.6.31.5-112
-- drm-r600-lenovo-w500-fix.patch: add second patch from upstream fix
+* Mon Nov 02 2009 Chuck Ebbert <cebbert at redhat.com>
+- 2.6.32-rc5-git5
 
-* Tue Nov 03 2009 Dave Airlie <airlied at redhat.com> 2.6.31.5-111
-- drm-r600-lenovo-w500-fix.patch: fix lenovo w500 acpi video kill laptop dead
-- drop aspm r600 patch as correct fix should be in 110
-
-* Tue Nov 03 2009 Dave Airlie <airlied at redhat.com> 2.6.31.5-110
-- r600: fix for ring setup RMW issue.
-
-* Mon Nov 02 2009 John W. Linville <linville at redhat.com> 2.6.31.5-109
-- prism54: remove pci modinfo device table (#447047)
-
-* Mon Nov 02 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31.5-108
-- Enable acerhdf driver for fan speed control on Acer Aspire One notebook (#532463)
-
-* Mon Nov 02 2009 Dave Airlie <airlied at redhat.com> 2.6.31.5-107
-- r600: back that out, thanks to yaneti for testing.
-
-* Mon Nov 02 2009 Dave Airlie <airlied at redhat.com> 2.6.31.5-106
-- r600: ring size guesswork fix.
-
-* Fri Oct 30 2009 Dave Airlie <airlied at redhat.com> 2.6.31.5-105
-- drm-radeon-agp-font-fix.patch: hopefully fix AGP coherency issue
-
-* Wed Oct 28 2009 Dave Airlie <airlied at redhat.com> 2.6.31.5-104
-- drm-next-ea1495a6.patch: fix rs400 resume on my test box
-
-* Wed Oct 28 2009 Dave Airlie <airlied at redhat.com> 2.6.31.5-103
-- drm-next-fc7f7119.patch: fix oops in SS code, fix multi-card, dvo.
-- drm-radeon-kms-arbiter-return-ignore.patch: fix arbiter for non-VGA display
-
-* Tue Oct 27 2009 Chuck Ebbert <cebbert at redhat.com>
-- Fix oops in VIA padlock-aes code.
-
-* Tue Oct 27 2009 Dave Airlie <airlied at redhat.com>
-- kms: add offb handoff patch for ppc to work
-
-* Tue Oct 27 2009 Ben Skeggs <bskeggs at redhat.com>
-- drm-nouveau.patch: misc fixes, very initial NVA8 work
+* Tue Oct 27 2009 John W. Linville <linville at redhat.com>
+- Disable build of prism54 module
 
 * Tue Oct 27 2009 Dave Airlie <airlied at redhat.com>
-- fix dd command lines
+- Get dd command line args correct.
 
 * Mon Oct 26 2009 Dave Jones <davej at redhat.com>
 - Make a 20MB initramfs file so rpm gets its diskspace calculations right. (#530778)
 
-* Mon Oct 26 2009 Dave Airlie <airlied at redhat.com> 2.6.31.5-97
-- drm: rebase to drm-next, drop palette fix, merged upstream
-- drm-intel-big-hammer.patch: drop, proper fix in 2.6.31.5
-- drm-disable-r600-aspm.patch: test patch to disable aspm on r600/r700 for now
-
-* Fri Oct 23 2009 Kyle McMartin <kyle at redhat.com> 2.6.31.5-96
-- Bump NR_CPUS to 256 on x86_64.
-- Add two backports (ugh, just had to go renaming perf counters to events...)
-  for fixing sysprof with perf.
-
-* Fri Oct 23 2009 Dave Airlie <airlied at redhat.com> 2.6.31.5-95
-- re enable MSI
-
-* Fri Oct 23 2009 Dave Airlie <airlied at redhat.com> 2.6.31.5-94
-- disable debug + stackprotector
-
-* Fri Oct 23 2009 Chuck Ebbert <cebbert at redhat.com>
-- Linux 2.6.31.5
-
-* Thu Oct 22 2009 Chuck Ebbert <cebbert at redhat.com>
-- Fix exploitable OOPS in keyring code. (CVE-2009-3624)
-- Fix kernel memory leak to userspace. (CVE-2009-3612)
-
-* Thu Oct 22 2009 Dave Airlie <airlied at redhat.com>  2.6.31.5-91.rc1
-- kms: fix palette
-
-* Wed Oct 21 2009 Chuck Ebbert <cebbert at redhat.com>
-- Disable powersave by default for AC97 audio devices. (#524414)
-
-* Wed Oct 21 2009 Chuck Ebbert <cebbert at redhat.com>
-- Linux 2.6.31.5-rc1
-- Remove the merged HP DC7900 workaround from iommu-updates patch.
+* Sat Oct 23 2009 Chuck Ebbert <cebbert at redhat.com>
+- 2.6.32-rc5-git3
 - Drop merged patch:
-  linux-2.6-raidlockdep.patch
+  linux-2.6-virtio_blk-revert-QUEUE_FLAG_VIRT-addition.patch
 
-* Mon Oct 19 2009 Kyle McMartin <kyle at redhat.com>
-- af_unix-fix-deadlock-connecting-to-shutdown-socket.patch: fix for
-  rhbz#529626.
+* Sat Oct 17 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.32-0.33.rc5.git1
+- 2.6.32-rc5-git1
 
-* Sat Oct 17 2009 Chuck Ebbert <cebbert at redhat.com>
-- Replace linux-2.6-bluetooth-autosuspend.diff with upstream version.
+* Fri Oct 16 2009 Chuck Ebbert <cebbert at redhat.com>
+- 2.6.32-rc5
+- New config option: CONFIG_VMXNET3=m
 
-* Fri Oct 16 2009 Josef Bacik <josef at toxicpanda.com>
-- Update btrfs to latest upstream
+* Wed Oct 14 2009 Chuck Ebbert <cebbert at redhat.com>
+- 2.6.32-rc4-git4
 
-* Fri Oct 16 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31.4-85
-- Fix another ACPI boot hang (#513680)
-
-* Fri Oct 16 2009 Ben Skeggs <bskeggs at redhat.com> 2.6.31.4-84
-- nouveau: more vbios opcodes, minor fixes, hopeful fix for rh#529292
-
-* Wed Oct 14 2009 Roland McGrath <roland at redhat.com> 2.6.31.4-83
-- Remove work-around for gcc bug #521991, now fixed.
-- Build *docs non-parallel, working around kernel's makefile bugs.
+* Wed Oct 14 2009 Steve Dickson <steved at redhat.com>
+- Updated the NFS v4 pseudo root patch so it will apply
+- Fixed hang during NFS installs (bz 528537)
 
 * Wed Oct 14 2009 Peter Jones <pjones at redhat.com>
 - Add scsi_register_device_handler to modules.block's symbol list so
   we'll have scsi device handlers in installer images.
 
-* Tue Oct 13 2009 Steve Dickson <steved at redhat.com> 2.6.31.4-81
-- Fixed hang during NFS installs (bz 528537)
-
-* Tue Oct 13 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31.4-80
-- Disable 64-bit DMA on SB600 SATA controllers.
-
 * Tue Oct 13 2009 Kyle McMartin <kyle at redhat.com>
 - Always build perf docs, regardless of whether we build kernel-doc.
   Seems rather unfair to not ship the manpages half the time.
   Also, drop BuildRequires %if when not with_doc, the rules about %if
   there are f*!&^ing complicated.
 
-* Mon Oct 12 2009 Kyle McMartin <kyle at redhat.com>
-- Build the perf manpages properly.
-
-* Mon Oct 12 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31.4-77
-- Fix boot hang with ACPI on some systems.
-
-* Mon Oct 12 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31.4-76
-- Linux 2.6.31.4
+* Tue Oct 13 2009 Kyle McMartin <kyle at redhat.com>
+- Build perf manpages properly.
 
-* Mon Oct 12 2009 Kyle McMartin <kyle at redhat.com> 2.6.31.4-75.rc2
-- improve-resource-counter-scalability.patch: Fix scalability issues
-  on big machines, requested by prarit.
+* Tue Oct 13 2009 Dave Airlie <airlied at redhat.com>
+- cleanup some of drm vga arb bits that are upstream
 
 * Mon Oct 12 2009 Jarod Wilson <jarod at redhat.com>
-- Fix irq status check bugs in lirc_ene0100
+- Merge lirc compile fixes into lirc patch
+- Refresh lirc patch with additional irq handling fixage
+- Fix IR transmit on port 1 of 1st-gen mceusb transceiver
+- Support another mouse button variant on imon devices
 
-* Mon Oct 12 2009 Chuck Ebbert <cebbert at redhat.com>
-- Fix 2.6.31 regression that caused device failures with ACPI enabled.
+* Mon Oct 12 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.32-0.24.rc4.git0
+- Last-minute USB fix from upstream.
 
 * Sun Oct 11 2009 Chuck Ebbert <cebbert at redhat.com>
-- Linux 2.6.31.4-rc2
-- Drop merged patch: linux-2.6-frace-fixes.patch
+- Fix lirc build after header changes.
+- Fix bug in lirc interrupt processing.
 
-* Sat Oct 10 2009 Chuck Ebbert <cebbert at redhat.com>
-- Make performance counter API available to userspace programs (#527264)
+* Sun Oct 11 2009 Chuck Ebbert <cebbert at redhat.com>
+- Fix up multiple definition of debug options
+  (EXT4_DEBUG, DEBUG_FORCE_WEAK_PER_CPU)
 
-* Sat Oct 10 2009 Dave Jones <davej at redhat.com>
-- Drop the NX kernel data patch for now. Causes no-boot on some systems.
+* Sun Oct 11 2009 Chuck Ebbert <cebbert at redhat.com>
+- 2.6.32-rc4
+- New config options:
+  CONFIG_BE2ISCSI=m
+  CONFIG_SCSI_BFA_FC=m
+  CONFIG_USB_MUSB_HDRC is not set
 
-* Fri Oct 09 2009 Dave Jones <davej at redhat.com>
-- Backport two critical ftrace fixes.
-  ftrace: check for failure for all conversions
-  tracing: correct module boundaries for ftrace_release
-
-* Fri Oct 09 2009 Jarod Wilson <jarod at redhat.com>
-- Build docs sub-package again
-
-* Thu Oct 08 2009 Kyle McMartin <kyle at redhat.com> 2.6.31.3-67
-- Linux 2.6.31.3
-- rebase drm-next trivially.
-- dropped merged upstream patches,
- - linux-2.6-fix-usb-serial-autosuspend.diff
- - linux-2.6-iwlagn-modify-digital-SVR-for-1000.patch
- - linux-2.6-iwlwifi-Handle-new-firmware-file-with-ucode-build-number-in-header.patch
- - linux-2.6-iwlwifi-fix-debugfs-buffer-handling.patch
- - linux-2.6-iwlwifi-fix-unloading-driver-while-scanning.patch
- - linux-2.6-iwlwifi-remove-deprecated-6000-series-adapters.patch
- - linux-2.6-iwlwifi-traverse-linklist-to-find-the-valid-OTP-block.patch
- - linux-2.6-iwlwifi-update-1000-series-API-version-to-match-firmware.patch
- - linux-2.6-xen-check-efer-fix.patch
- - linux-2.6-xen-spinlock-enable-interrupts-only-when-blocking.patch
- - linux-2.6-xen-spinlock-stronger-barrier.patch
- - linux-2.6-xen-stack-protector-fix.patch
- - linux-2.6.31-cpufreq-powernow-k8-oops.patch
+* Sun Oct 11 2009 Kyle McMartin <kyle at redhat.com>
+- 2.6.32-rc3-git3
 
 * Thu Oct 08 2009 Ben Skeggs <bskeggs at redhat.com>
 - ppc: compile nvidiafb as a module only, nvidiafb+nouveau = bang! (rh#491308)
 
-* Thu Oct 08 2009 Ben Skeggs <bskeggs at redhat.com> 2.6.31.1-65
-- nouveau: {drm-next,context,fbcon,misc} fixes, connector forcing
-
-* Thu Oct 08 2009 Dave Airlie <airlied at redhat.com> 2.6.31.1-64
-- rebase latest drm-next, fixes many s/r and r600 problems
-
-* Wed Oct 07 2009 Dave Jones <davej at redhat.com>
-- Don't mark the initramfs file as a ghost.
-
 * Wed Oct 07 2009 Dave Jones <davej at redhat.com>
 - Enable FUNCTION_GRAPH_TRACER on x86-64.
 
@@ -2562,78 +2235,55 @@ fi
 - Disable CONFIG_IRQSOFF_TRACER on srostedt's recommendation.
   (Adds unwanted overhead when not in use).
 
-* Tue Oct  6 2009 Justin M. Forbes <jforbes at redhat.com>
-- virtio_blk: add support for cache flush (#526869)
-
-* Fri Oct  2 2009 John W. Linville <linville at redhat.com>
-- Backport "iwlwifi: reduce noise when skb allocation fails"
-
-* Wed Sep 30 2009 David Woodhouse <David.Woodhouse at intel.com>
-- Update IOMMU code; mostly a bunch more workarounds for broken BIOSes.
-
-* Wed Sep 30 2009 Dave Airlie <airlied at redhat.com> 2.6.31.1-56
-- revert all the arjan patches until someone tests them.
+* Sun Oct 04 2009 Kyle McMartin <kyle at redhat.com> 2.6.32-0.17.rc3.git0
+- 2.6.32-rc3 (bah, rebase script didn't catch it.)
 
-* Tue Sep 29 2009 Steve Dickson <steved at redhat.com>  2.6.31.1-55
-- Updated the NFS4 pseudo root code with a fix from upstream
-
-* Tue Sep 29 2009 Dave Airlie <airlied at redhat.com> 2.6.31.1-54
-- Fix broken capabilties that stopped dbus working due to copy from user
-  fixups.
-
-* Tue Sep 29 2009 Dave Airlie <airlied at redhat.com> 2.6.31.1-53
-- drm-next-4c57edba4.patch: fix r600 dri1 memory leak and r600 bugs
-
-* Mon Sep 28 2009 Dave Jones <davej at redhat.com> 2.6.31.1-52
-- Use __builtin_object_size to validate the buffer size for copy_from_user
-  + associated fixes to various copy_from_user invocations.
-
-* Mon Sep 28 2009 Justin M. Forbes <jmforbes at redhat.com> 2.6.31.1-50
-- Increase timeout for xen frontend devices to connect.
-
-* Sat Sep 26 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31.1-49
-- Add Xen spinlock patches to improve scalability.
-
-* Sat Sep 26 2009 Dave Airlie <airlied at redhat.com> 2.6.31.1-48
-- drm-next-8ef8678c8.patch: fix intel/nouveau kms
-
-* Fri Sep 25 2009 Justin M. Forbes <bskeggs at redhat.com> 2.6.31.1-47
-- Fix xen guest booting when NX is disabled (#525290)
-
-* Fri Sep 25 2009 Ben Skeggs <bskeggs at redhat.com> 2.6.31.1-46
-- drm-nouveau.patch: cleanups, fixes, pre-G80 s/r fixes, init rework
-
-* Fri Sep 25 2009 Dave Airlie <airlied at redhat.com> 2.6.31.1-45
-- drm-next-adea4796c.patch: fix r600 glxgears
-
-* Fri Sep 25 2009 Dave Airlie <airlied at redhat.com> 2.6.31.1-44
-- bump a extra one because I accidentially CVS.
-
-* Thu Sep 24 2009 Dave Airlie <airlied at redhat.com> 2.6.31.1-42
-- drm-next update - fix r600 s/r, and command line mode picking and r600 tv
-
-* Thu Sep 24 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31.1-41
-- Linux 2.6.31.1
-- Drop patches merged upstream:
-    linux-2.6-kvm-vmx-check-cpl-before-emulating-debug-register-access.patch
-    linux-2.6-use-__pa_symbol-to-calculate-address-of-C-symbol.patch
-    linux-2.6-kvm-pvmmu-do-not-batch-pte-updates-from-interrupt-context.patch
-    linux-2.6-scsi-sd-fix-oops-during-scanning.patch
-    linux-2.6-scsi-sg-fix-oops-in-error-path.patch
-
-* Thu Sep 24 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31-40
-- Drop the modules-ro-nx patch: it's causing ftrace to be unable
-  to NOP out module function call tracking. (#524042)
-
-* Wed Sep 23 2009 Kyle McMartin <kyle at redhat.com> 2.6.31-39
-- touch initramfs-$foo not dracut-$foo.
-
-* Wed Sep 23 2009 Adam Jackson <ajax at redhat.com> 2.6.31-37
-- drm: Fix various buglets in EDID parsing.
-
-* Mon Sep 21 2009 Ben Skeggs <bskeggs at redhat.com>
-- nouveau: more on rh#522649, added some useful info to debugfs
-- lots of coding style cleanups, which is the reason for the huge commit
+* Sun Oct 04 2009 Kyle McMartin <kyle at redhat.com>
+- 2.6.32-rc1-git7
+- [x86,x86_64] ACPI_PROCESSOR_AGGREGATOR=m
+
+* Mon Sep 28 2009 Kyle McMartin <kyle at redhat.com>
+- 2.6.32-rc1
+- rebased crash-driver patchset, ia64_ksyms.c conflicts. move x86 crash.h
+  file to the right place.
+- full changelog forthcoming & to fedora-kernel-list.
+
+* Mon Sep 28 2009 Kyle McMartin <kyle at redhat.com>
+- sick of rejects.
+
+* Mon Sep 28 2009 Chuck Ebbert <cebbert at redhat.com>
+- Fix up some items missing in make debug vs. make release,
+  rearrange so the options are in the same order.
+- Add new debug options:
+  CONFIG_EXT4_DEBUG
+  CONFIG_DEBUG_FORCE_WEAK_PER_CPU
+
+* Sun Sep 27 2009 Kyle McMartin <kyle at redhat.com>
+- Must now make mrproper after each config pass, due to Kbuild
+  stashing away the $ARCH variable.
+
+* Sun Sep 27 2009 Kyle McMartin <kyle at redhat.com>
+- 2.6.31-git18
+- rebased:
+ - hdpvr-ir-enable.patch
+ - linux-2.6-build-nonintconfig.patch
+ - linux-2.6-debug-sizeof-structs.patch
+ - linux-2.6-debug-vm-would-have-oomkilled.patch
+ - linux-2.6-execshield.patch
+ - linux-2.6-makefile-after_link.patch
+ - linux-2.6-serial-460800.patch
+ - linux-2.6-utrace.patch
+ - via-hwmon-temp-sensor.patch
+- merged:
+ - linux-2.6-tracehook.patch
+ - linux-2.6-die-closed-source-bios-muppets-die.patch
+ - linux-2.6-intel-iommu-updates.patch
+ - linux-2.6-ksm.patch
+ - linux-2.6-ksm-updates.patch
+ - linux-2.6-ksm-fix-munlock.patch
+ - linux-2.6-vga-arb.patch
+ - v4l-dvb-fix-cx25840-firmware-loading.patch
+ - linux-2.6-rtc-show-hctosys.patch
 
 * Fri Sep 18 2009 Dave Jones <davej at redhat.com>
 - %ghost the dracut initramfs file.
@@ -2642,58 +2292,68 @@ fi
 - Now that we have %%post generation of dracut images we do not need to
   Require dracut-kernel anymore
 
-* Thu Sep 17 2009 Kyle McMartin <kyle at redhat.com> 2.6.31-33
-- Turn off CONFIG_CC_OPTIMIZE_FOR_SIZE on ppc64 until ld decides to play nice
-  and generate the save/restore stubs.
-
-* Thu Sep 17 2009 Kristian Høgsberg <krh at redhat.com>
-- Drop drm page-flip patch for F12.
-
-* Thu Sep 17 2009 Dave Jones <davej at redhat.com>
-- cpuidle: Fix the menu governor to boost IO performance.
-
-* Wed Sep 16 2009 John W. Linville <linville at redhat.com>
-- Add a few more iwl1000 support patches.
-- Remove support for deprecated iwl6000 parts.
-
-* Wed Sep 16 2009 Eric Paris <eparis at redhat.com>
-- Do not check CAP_SYS_MODULE when networking tres to autoload a module
-
-* Wed Sep 16 2009 John W. Linville <linville at redhat.com>
-- Add iwl1000 support patches.
-
-* Wed Sep 16 2009 Adam Jackson <ajax at redhat.com>
-- Disable hotplug interrupts on TV connectors on i915.
-
-* Wed Sep 16 2009 Dave Jones <davej at redhat.com>
-- Fix NULL deref in powernow-k8 driver. (korg #13780)
-
-* Wed Sep 16 2009 Hans de Goede <hdegoede at redhat.com>
-- Fix lockdep warning (and potential real deadlock) in mdraid10 code,
-  requested for -stable, rh#515471
-
-* Wed Sep 16 2009 Ben Skeggs <bskeggs at redhat.com> 2.6.31-17
-- nouveau: potential fix for rh#522649 + misc other fixes
-
-* Tue Sep 15 2009 Chuck Ebbert <cebbert at redhat.com>
-- Add unused-kernel-patches Make target, change some patches to
-  use ApplyOptionalPatch
-
-* Tue Sep 15 2009 Ben Skeggs <bskeggs at redhat.com>
-- nouveau: misc fixes to context-related issues, fixes some severe nv4x bugs
+* Thu Sep 17 2009 Chuck Ebbert <cebbert at redhat.com>
+- Disable drm-nouveau too -- it won't build without other
+  drm updates.
+
+* Wed Sep 16 2009 Roland McGrath <roland at redhat.com>
+- Remove workaround for gcc bug #521991, now fixed.
+
+* Tue Sep 15 2009 Kyle McMartin <kyle at redhat.com>
+- 2.6.31-git4
+- rebased:
+ - linux-2.6-execshield.patch: split paravirt_types.h
+ - linux-2.6-buildnonintconfig.patch
+- disabled:
+ - ksm, drm.
+- merged:
+ - linux-2.6-kvm-pvmmu-do-not-batch-pte-updates-from-interrupt-context.patch
+ - linux-2.6-kvm-vmx-check-cpl-before-emulating-debug-register-access.patch
+ - linux-2.6-use-__pa_symbol-to-calculate-address-of-C-symbol.patch
+ - linux-2.6-xen-stack-protector-fix.patch
+ - linux-2.6-bluetooth-autosuspend.diff
+ - hid-ignore-all-recent-imon-devices.patch
+- config changes:
+ - arm:
+  - CONFIG_HIGHPTE off, seems safer this way.
+ - generic:
+  - RDS_RDMA/RDS_TCP=m
+  - SCSI_PMCRAID=m
+  - WLAN=y, CFG80211_DEFAULT_PS=y, NL80211_TESTMODE off.
+  - WL12XX=m
+  - B43_PHY_LP=y
+  - BT_MRVL=m
+  - new MISDN stuff modular.
+ - sparc:
+  - enable PERF_COUNTERS & EVENT_PROFILE
+ - ppc:
+  - XILINX_EMACSLITE=m
 
-* Tue Sep 15 2009 Ben Skeggs <bskeggs at redhat.com>
-- nouveau: temporarily disable fbcon accel, it's racing with ttm
+* Mon Sep 14 2009 Chuck Ebbert <cebbert at redhat.com>
+- 2.6.31-git2
+- Drop merged patches:
+  sched-introduce-SCHED_RESET_ON_FORK-scheduling-policy-flag.patch
+  linux-2.6-nfs4-ver4opt.patch
+  linux-2.6-alsa-improve-hda-powerdown.patch
+  alsa-tell-user-that-stream-to-be-rewound-is-suspended.patch
+  linux-2.6-ahci-export-capabilities.patch
+- New s390 config option:
+   CONFIG_SCLP_ASYNC=m
+- New generic config options:
+   CONFIG_ATA_VERBOSE_ERROR=y
+   CONFIG_PATA_RDC=m
+   CONFIG_SOUND_OSS_CORE_PRECLAIM=y
+   CONFIG_SND_HDA_PATCH_LOADER=y
+   CONFIG_SND_HDA_CODEC_CIRRUS=y
+   CONFIG_OPROFILE_EVENT_MULTIPLEX=y
+   CONFIG_CRYPTO_VMAC=m
+   CONFIG_CRYPTO_GHASH=m
+- New debug option:
+   CONFIG_DEBUG_CREDENTIALS=y in debug kernels
 
 * Mon Sep 14 2009 Steve Dickson <steved at redhat.com>
 - Added support for -o v4 mount parsing
 
-* Mon Sep 14 2009 Ben Skeggs <bskeggs at redhat.com>
-- nouveau: avoid PFIFO IRQ hardlock, misc LVDS mode fixes, nv5x RAMFC cleanup
-
-* Sun Sep 13 2009 Chuck Ebbert <cebbert at redhat.com>
-- SCSI oops fixes requested for -stable
-
 * Fri Sep 11 2009 Dave Jones <davej at redhat.com>
 - Apply NX/RO to modules
 

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-12/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:44:12 -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-12/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:04:41 -0000	1.15
+++ linux-2.6-crash-driver.patch	4 Jan 2010 15:44:12 -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-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-12/linux-2.6-debug-sizeof-structs.patch,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -p -r1.7 -r1.8
--- linux-2.6-debug-sizeof-structs.patch	8 Jul 2009 17:28:48 -0000	1.7
+++ linux-2.6-debug-sizeof-structs.patch	4 Jan 2010 15:44:12 -0000	1.8
@@ -1,19 +1,10 @@
-From 3def38bec43d38391d0c9e910dee10317b2ef250 Mon Sep 17 00:00:00 2001
-From: Kyle McMartin <kyle at phobos.i.jkkm.org>
-Date: Wed, 8 Jul 2009 13:01:42 -0400
-Subject: [PATCH 1/6] fedora: linux-2.6-debug-sizeof-structs.patch
-
----
- init/main.c |   13 +++++++++++++
- 1 files changed, 13 insertions(+), 0 deletions(-)
-
 diff --git a/init/main.c b/init/main.c
-index 2c5ade7..1c25f08 100644
+index 7449819..98cfaae 100644
 --- a/init/main.c
 +++ b/init/main.c
-@@ -397,6 +397,10 @@ static void __init setup_per_cpu_areas(void)
+@@ -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>
@@ -22,7 +13,7 @@ index 2c5ade7..1c25f08 100644
  /* Called by boot processor to activate the rest. */
  static void __init smp_init(void)
  {
-@@ -419,6 +423,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);
@@ -38,6 +29,3 @@ index 2c5ade7..1c25f08 100644
  }
  
  #endif
--- 
-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-12/linux-2.6-debug-vm-would-have-oomkilled.patch,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- linux-2.6-debug-vm-would-have-oomkilled.patch	19 Aug 2009 12:46:27 -0000	1.4
+++ linux-2.6-debug-vm-would-have-oomkilled.patch	4 Jan 2010 15:44:12 -0000	1.5
@@ -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-driver-level-usb-autosuspend.diff:
 drivers/usb/core/driver.c |   16 ++++++++++++++++
 include/linux/usb.h       |    4 ++++
 2 files changed, 20 insertions(+)

Index: linux-2.6-driver-level-usb-autosuspend.diff
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-12/linux-2.6-driver-level-usb-autosuspend.diff,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- linux-2.6-driver-level-usb-autosuspend.diff	18 Jul 2009 22:50:13 -0000	1.1
+++ linux-2.6-driver-level-usb-autosuspend.diff	4 Jan 2010 15:44:12 -0000	1.2
@@ -1,6 +1,6 @@
-commit 0f592e33934bf6108e33e34f00b425f98ee833ef
+commit 7d0d20a25c6f477fb198b85510c78156d7d7c5af
 Author: Matthew Garrett <mjg at redhat.com>
-Date:   Wed Jul 8 19:04:23 2009 +0100
+Date:   Tue Jun 9 20:11:47 2009 +0100
 
     usb: Allow drivers to enable USB autosuspend on a per-device basis
     
@@ -12,10 +12,10 @@ Date:   Wed Jul 8 19:04:23 2009 +0100
     Signed-off-by: Matthew Garrett <mjg at redhat.com>
 
 diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
-index 69e5773..6e81caa 100644
+index 4f86447..f7caf00 100644
 --- a/drivers/usb/core/driver.c
 +++ b/drivers/usb/core/driver.c
-@@ -1560,6 +1560,21 @@ void usb_autopm_put_interface_async(struct usb_interface *intf)
+@@ -1575,6 +1575,22 @@ void usb_autopm_put_interface_async(struct usb_interface *intf)
  EXPORT_SYMBOL_GPL(usb_autopm_put_interface_async);
  
  /**
@@ -30,6 +30,7 @@ index 69e5773..6e81caa 100644
 +{
 +	udev->autosuspend_disabled = 0;
 +	udev->autoresume_disabled = 0;
++	usb_external_suspend_device(udev, PMSG_USER_SUSPEND);
 +}
 +EXPORT_SYMBOL_GPL(usb_device_autosuspend_enable);
 +
@@ -38,7 +39,7 @@ index 69e5773..6e81caa 100644
   * @intf: the usb_interface whose counter should be incremented
   *
 diff --git a/include/linux/usb.h b/include/linux/usb.h
-index b1e3c2f..61bddbe 100644
+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);

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-12/linux-2.6-execshield.patch,v
retrieving revision 1.109
retrieving revision 1.110
diff -u -p -r1.109 -r1.110
--- linux-2.6-execshield.patch	23 Nov 2009 18:50:40 -0000	1.109
+++ linux-2.6-execshield.patch	4 Jan 2010 15:44:12 -0000	1.110
@@ -1,8 +1,8 @@
 diff --git a/arch/x86/include/asm/desc.h b/arch/x86/include/asm/desc.h
-index c45f415..3a6dbad 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 c45f415..3a6dbad 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 c45f415..3a6dbad 100644
  
  #define write_ldt_entry(dt, entry, desc)	\
  	native_write_ldt_entry(dt, entry, desc)
-@@ -380,4 +384,25 @@ 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);
  }
  
@@ -71,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 4fb37c8..d5cc31c 100644
+index 8aebcc4..cbbd2b0 100644
 --- a/arch/x86/include/asm/paravirt.h
 +++ b/arch/x86/include/asm/paravirt.h
-@@ -139,6 +139,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
-@@ -955,6 +958,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);
  }
@@ -97,11 +87,25 @@ index 4fb37c8..d5cc31c 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 c776826..fb6b579 100644
+index c3429e8..62cc460 100644
 --- a/arch/x86/include/asm/processor.h
 +++ b/arch/x86/include/asm/processor.h
-@@ -160,6 +160,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)
  
@@ -112,10 +116,10 @@ index c776826..fb6b579 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 3ffdcfa..62cba96 100644
+index cc25c2b..6ce4863 100644
 --- a/arch/x86/kernel/cpu/common.c
 +++ b/arch/x86/kernel/cpu/common.c
-@@ -804,6 +804,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);
  
@@ -137,10 +141,10 @@ index 3ffdcfa..62cba96 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 70ec9b9..d956b8c 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,
@@ -151,10 +155,10 @@ index 70ec9b9..d956b8c 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 59f4524..068e286 100644
+index 4cf7956..b2407dc 100644
 --- a/arch/x86/kernel/process_32.c
 +++ b/arch/x86/kernel/process_32.c
-@@ -299,7 +299,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)
  {
@@ -165,7 +169,7 @@ index 59f4524..068e286 100644
  	regs->fs		= 0;
  	set_fs(USER_DS);
  	regs->ds		= __USER_DS;
-@@ -308,6 +311,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;
@@ -177,17 +181,17 @@ index 59f4524..068e286 100644
  	/*
  	 * Free the old FP and other extended state
  	 */
-@@ -354,7 +362,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)
-@@ -495,3 +504,40 @@ unsigned long get_wchan(struct task_struct *p)
++
+ 	/*
+ 	 * Reload esp0.
+ 	 */
+@@ -497,3 +508,40 @@ unsigned long get_wchan(struct task_struct *p)
  	return 0;
  }
  
@@ -229,10 +233,10 @@ index 59f4524..068e286 100644
 +	set_user_cs(&mm->context.user_cs, 0);
 +}
 diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
-index 07d60c8..41e9129 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);
  }
@@ -309,7 +313,7 @@ index 07d60c8..41e9129 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;
  
@@ -339,7 +343,7 @@ index 07d60c8..41e9129 100644
  	tsk->thread.error_code = error_code;
  	tsk->thread.trap_no = 13;
  
-@@ -885,19 +978,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
@@ -387,10 +391,10 @@ index 07d60c8..41e9129 100644
  #endif
  
 diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
-index 34c1bfb..32c3d8d 100644
+index 73ffd55..0cf2a7b 100644
 --- a/arch/x86/mm/init.c
 +++ b/arch/x86/mm/init.c
-@@ -228,6 +228,12 @@ 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");
@@ -403,70 +407,11 @@ index 34c1bfb..32c3d8d 100644
  
  	/* 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 949708d..c1373b6 100644
---- a/arch/x86/mm/init_32.c
-+++ b/arch/x86/mm/init_32.c
-@@ -587,6 +587,54 @@ void zap_low_mappings(void)
- pteval_t __supported_pte_mask __read_mostly = ~(_PAGE_NX | _PAGE_GLOBAL | _PAGE_IOMAP);
- EXPORT_SYMBOL_GPL(__supported_pte_mask);
- 
-+#ifdef CONFIG_X86_PAE
-+
-+static int disable_nx __initdata;
-+
-+/*
-+ * noexec = on|off
-+ *
-+ * Control non executable mappings.
-+ *
-+ * on      Enable
-+ * off     Disable (disables exec-shield too)
-+ */
-+static int __init noexec_setup(char *str)
-+{
-+	if (!str || !strcmp(str, "on")) {
-+		if (cpu_has_nx) {
-+			__supported_pte_mask |= _PAGE_NX;
-+			disable_nx = 0;
-+		}
-+	} else if (!strcmp(str, "off")) {
-+		disable_nx = 1;
-+		__supported_pte_mask &= ~_PAGE_NX;
-+		exec_shield = 0;
-+	} else
-+		return -EINVAL;
-+
-+	return 0;
-+}
-+early_param("noexec", noexec_setup);
-+
-+void __init set_nx(void)
-+{
-+	unsigned int v[4], l, h;
-+
-+	if (cpu_has_pae && (cpuid_eax(0x80000000) > 0x80000001)) {
-+		cpuid(0x80000001, &v[0], &v[1], &v[2], &v[3]);
-+
-+		if ((v[3] & (1 << 20)) && !disable_nx) {
-+			rdmsr(MSR_EFER, l, h);
-+			l |= EFER_NX;
-+			wrmsr(MSR_EFER, l, h);
-+			nx_enabled = 1;
-+			__supported_pte_mask |= _PAGE_NX;
-+		}
-+	}
-+}
-+#endif
-+
- /* user-defined highmem size */
- static unsigned int highmem_pages = -1;
- 
 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)
  {
@@ -484,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 @@
@@ -496,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();
@@ -523,10 +487,10 @@ index 58bc00f..1fdafb5 100644
  			ret = addr;
  			goto up_fail;
 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
-index 0a1700a..37b8744 100644
+index 3439616..31e5c6f 100644
 --- a/arch/x86/xen/enlighten.c
 +++ b/arch/x86/xen/enlighten.c
-@@ -321,6 +321,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);
  }
  
@@ -551,7 +515,7 @@ index 0a1700a..37b8744 100644
  static void xen_load_gdt(const struct desc_ptr *dtr)
  {
  	unsigned long va = dtr->address;
-@@ -886,6 +904,9 @@ static const struct pv_cpu_ops xen_cpu_ops __initdata = {
+@@ -949,6 +967,9 @@ static const struct pv_cpu_ops xen_cpu_ops __initdata = {
  
  	.load_tr_desc = paravirt_nop,
  	.set_ldt = xen_set_ldt,
@@ -562,7 +526,7 @@ index 0a1700a..37b8744 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 = {
@@ -622,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 ad613ed..08f08d0 100644
+index 24c3956..88f944d 100644
 --- a/include/linux/mm.h
 +++ b/include/linux/mm.h
-@@ -1135,7 +1135,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);
  
@@ -641,10 +605,10 @@ index ad613ed..08f08d0 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);
@@ -672,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 4896fdf..3513e03 100644
+index 75e6e60..0bce489 100644
 --- a/include/linux/sched.h
 +++ b/include/linux/sched.h
-@@ -101,6 +101,9 @@ struct fs_struct;
+@@ -102,6 +102,9 @@ struct fs_struct;
  struct bts_context;
- struct perf_counter_context;
+ struct perf_event_context;
  
 +extern int exec_shield;
 +extern int print_fatal_signals;
@@ -685,7 +649,7 @@ index 4896fdf..3513e03 100644
  /*
   * List of flags we want to share for kernel threads,
   * if only because they are not used by them anyway.
-@@ -359,6 +362,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);
@@ -697,10 +661,10 @@ index 4896fdf..3513e03 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 ce664f9..1905e22 100644
+index 0d949c5..12ca319 100644
 --- a/kernel/sysctl.c
 +++ b/kernel/sysctl.c
-@@ -87,6 +87,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
@@ -727,7 +691,7 @@ index ce664f9..1905e22 100644
  #ifdef CONFIG_RCU_TORTURE_TEST
  extern int rcutorture_runnable;
  #endif /* #ifdef CONFIG_RCU_TORTURE_TEST */
-@@ -382,6 +402,14 @@ static struct ctl_table kern_table[] = {
+@@ -408,6 +428,14 @@ static struct ctl_table kern_table[] = {
  		.proc_handler	= &proc_dointvec,
  	},
  	{
@@ -743,13 +707,13 @@ index ce664f9..1905e22 100644
  		.procname	= "core_uses_pid",
  		.data		= &core_uses_pid,
 diff --git a/mm/mmap.c b/mm/mmap.c
-index 34579b2..260bb3c 100644
+index 73f5e4b..814b95f 100644
 --- a/mm/mmap.c
 +++ b/mm/mmap.c
 @@ -29,6 +29,7 @@
  #include <linux/rmap.h>
  #include <linux/mmu_notifier.h>
- #include <linux/perf_counter.h>
+ #include <linux/perf_event.h>
 +#include <linux/random.h>
  
  #include <asm/uaccess.h>
@@ -773,7 +737,7 @@ index 34579b2..260bb3c 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)
  {
@@ -782,7 +746,7 @@ index 34579b2..260bb3c 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;
@@ -791,7 +755,7 @@ index 34579b2..260bb3c 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);
@@ -800,7 +764,7 @@ index 34579b2..260bb3c 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.
  	 */
@@ -810,7 +774,7 @@ index 34579b2..260bb3c 100644
  	if (addr & ~PAGE_MASK)
  		return addr;
  
-@@ -1442,13 +1462,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
@@ -831,7 +795,7 @@ index 34579b2..260bb3c 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);
-@@ -1462,8 +1486,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);
  }
@@ -909,7 +873,7 @@ index 34579b2..260bb3c 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)
-@@ -1538,6 +1630,14 @@ out:
+@@ -1549,6 +1641,14 @@ out:
  	return prev ? prev->vm_next : vma;
  }
  
@@ -924,7 +888,7 @@ index 34579b2..260bb3c 100644
  /*
   * Verify that the stack growth is acceptable and
   * update accounting. This is shared with both the
-@@ -1554,7 +1654,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 */
@@ -933,7 +897,7 @@ index 34579b2..260bb3c 100644
  		return -ENOMEM;
  
  	/* mlock limit tests */
-@@ -1864,10 +1964,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);
  
@@ -950,8 +914,8 @@ index 34579b2..260bb3c 100644
  		vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new);
  
  	return 0;
-@@ -2116,6 +2220,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);
@@ -959,11 +923,11 @@ index 34579b2..260bb3c 100644
  	/*
  	 * Walk the list again, actually closing and freeing it,
 diff --git a/mm/mprotect.c b/mm/mprotect.c
-index d80311b..032423d 100644
+index 8bc969d..3c9b4fc 100644
 --- a/mm/mprotect.c
 +++ b/mm/mprotect.c
 @@ -26,9 +26,14 @@
- #include <linux/perf_counter.h>
+ #include <linux/perf_event.h>
  #include <asm/uaccess.h>
  #include <asm/pgtable.h>
 +#include <asm/pgalloc.h>
@@ -997,10 +961,10 @@ index d80311b..032423d 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-firewire-git-update.patch:
 firewire-git/drivers/firewire/fw-card.c        |   68 -
 firewire-git/drivers/firewire/fw-cdev.c        | 1014 +++++++++++++++++--------
 firewire-git/drivers/firewire/fw-device.c      |   43 -
 firewire-git/drivers/firewire/fw-device.h      |    7 
 firewire-git/drivers/firewire/fw-iso.c         |  225 ++++-
 firewire-git/drivers/firewire/fw-ohci.c        |  236 ++---
 firewire-git/drivers/firewire/fw-sbp2.c        |   57 -
 firewire-git/drivers/firewire/fw-topology.c    |   28 
 firewire-git/drivers/firewire/fw-topology.h    |   19 
 firewire-git/drivers/firewire/fw-transaction.c |  151 +--
 firewire-git/drivers/firewire/fw-transaction.h |  125 ---
 include/linux/firewire-cdev.h                  |  170 +++-
 12 files changed, 1359 insertions(+), 784 deletions(-)

View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.21 -r 1.22 linux-2.6-firewire-git-update.patchIndex: linux-2.6-firewire-git-update.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-12/linux-2.6-firewire-git-update.patch,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -p -r1.21 -r1.22
--- linux-2.6-firewire-git-update.patch	12 Nov 2009 16:50:22 -0000	1.21
+++ linux-2.6-firewire-git-update.patch	4 Jan 2010 15:44:12 -0000	1.22
@@ -1 +1,3682 @@
-empty
+linux1394-2.6.git tree vs. linus v2.6.29-rc3-git1 on 20090130 by jarod
+
+---
+ firewire-git/drivers/firewire/fw-card.c        |   68 -
+ firewire-git/drivers/firewire/fw-cdev.c        | 1014 +++++++++++++++++--------
+ firewire-git/drivers/firewire/fw-device.c      |   43 -
+ firewire-git/drivers/firewire/fw-device.h      |    7 
+ firewire-git/drivers/firewire/fw-iso.c         |  225 ++++-
+ firewire-git/drivers/firewire/fw-ohci.c        |  236 ++---
+ firewire-git/drivers/firewire/fw-sbp2.c        |   57 -
+ firewire-git/drivers/firewire/fw-topology.c    |   28 
+ firewire-git/drivers/firewire/fw-topology.h    |   19 
+ firewire-git/drivers/firewire/fw-transaction.c |  151 +--
+ firewire-git/drivers/firewire/fw-transaction.h |  125 ---
+ include/linux/firewire-cdev.h                  |  170 +++-
+ 12 files changed, 1359 insertions(+), 784 deletions(-)
+
+diff -Naurp linux-2.6-git/drivers/firewire/fw-card.c firewire-git/drivers/firewire/fw-card.c
+--- linux-2.6-git/drivers/firewire/fw-card.c	2009-01-30 13:39:02.989651512 -0500
++++ firewire-git/drivers/firewire/fw-card.c	2009-01-30 13:35:51.859771884 -0500
+@@ -63,8 +63,7 @@ static int descriptor_count;
+ #define BIB_CMC			((1) << 30)
+ #define BIB_IMC			((1) << 31)
+ 
+-static u32 *
+-generate_config_rom(struct fw_card *card, size_t *config_rom_length)
++static u32 *generate_config_rom(struct fw_card *card, size_t *config_rom_length)
+ {
+ 	struct fw_descriptor *desc;
+ 	static u32 config_rom[256];
+@@ -128,8 +127,7 @@ generate_config_rom(struct fw_card *card
+ 	return config_rom;
+ }
+ 
+-static void
+-update_config_roms(void)
++static void update_config_roms(void)
+ {
+ 	struct fw_card *card;
+ 	u32 *config_rom;
+@@ -141,8 +139,7 @@ update_config_roms(void)
+ 	}
+ }
+ 
+-int
+-fw_core_add_descriptor(struct fw_descriptor *desc)
++int fw_core_add_descriptor(struct fw_descriptor *desc)
+ {
+ 	size_t i;
+ 
+@@ -171,8 +168,7 @@ fw_core_add_descriptor(struct fw_descrip
+ 	return 0;
+ }
+ 
+-void
+-fw_core_remove_descriptor(struct fw_descriptor *desc)
++void fw_core_remove_descriptor(struct fw_descriptor *desc)
+ {
+ 	mutex_lock(&card_mutex);
+ 
+@@ -189,8 +185,7 @@ static const char gap_count_table[] = {
+ 	63, 5, 7, 8, 10, 13, 16, 18, 21, 24, 26, 29, 32, 35, 37, 40
+ };
+ 
+-void
+-fw_schedule_bm_work(struct fw_card *card, unsigned long delay)
++void fw_schedule_bm_work(struct fw_card *card, unsigned long delay)
+ {
+ 	int scheduled;
+ 
+@@ -200,8 +195,7 @@ fw_schedule_bm_work(struct fw_card *card
+ 		fw_card_put(card);
+ }
+ 
+-static void
+-fw_card_bm_work(struct work_struct *work)
++static void fw_card_bm_work(struct work_struct *work)
+ {
+ 	struct fw_card *card = container_of(work, struct fw_card, work.work);
+ 	struct fw_device *root_device;
+@@ -371,17 +365,16 @@ fw_card_bm_work(struct work_struct *work
+ 	fw_card_put(card);
+ }
+ 
+-static void
+-flush_timer_callback(unsigned long data)
++static void flush_timer_callback(unsigned long data)
+ {
+ 	struct fw_card *card = (struct fw_card *)data;
+ 
+ 	fw_flush_transactions(card);
+ }
+ 
+-void
+-fw_card_initialize(struct fw_card *card, const struct fw_card_driver *driver,
+-		   struct device *device)
++void fw_card_initialize(struct fw_card *card,
++			const struct fw_card_driver *driver,
++			struct device *device)
+ {
+ 	static atomic_t index = ATOMIC_INIT(-1);
+ 
+@@ -406,9 +399,8 @@ fw_card_initialize(struct fw_card *card,
+ }
+ EXPORT_SYMBOL(fw_card_initialize);
+ 
+-int
+-fw_card_add(struct fw_card *card,
+-	    u32 max_receive, u32 link_speed, u64 guid)
++int fw_card_add(struct fw_card *card,
++		u32 max_receive, u32 link_speed, u64 guid)
+ {
+ 	u32 *config_rom;
+ 	size_t length;
+@@ -435,23 +427,20 @@ EXPORT_SYMBOL(fw_card_add);
+  * dummy driver just fails all IO.
+  */
+ 
+-static int
+-dummy_enable(struct fw_card *card, u32 *config_rom, size_t length)
++static int dummy_enable(struct fw_card *card, u32 *config_rom, size_t length)
+ {
+ 	BUG();
+ 	return -1;
+ }
+ 
+-static int
+-dummy_update_phy_reg(struct fw_card *card, int address,
+-		     int clear_bits, int set_bits)
++static int dummy_update_phy_reg(struct fw_card *card, int address,
++				int clear_bits, int set_bits)
+ {
+ 	return -ENODEV;
+ }
+ 
+-static int
+-dummy_set_config_rom(struct fw_card *card,
+-		     u32 *config_rom, size_t length)
++static int dummy_set_config_rom(struct fw_card *card,
++				u32 *config_rom, size_t length)
+ {
+ 	/*
+ 	 * We take the card out of card_list before setting the dummy
+@@ -461,27 +450,23 @@ dummy_set_config_rom(struct fw_card *car
+ 	return -1;
+ }
+ 
+-static void
+-dummy_send_request(struct fw_card *card, struct fw_packet *packet)
++static void dummy_send_request(struct fw_card *card, struct fw_packet *packet)
+ {
+ 	packet->callback(packet, card, -ENODEV);
+ }
+ 
+-static void
+-dummy_send_response(struct fw_card *card, struct fw_packet *packet)
++static void dummy_send_response(struct fw_card *card, struct fw_packet *packet)
+ {
+ 	packet->callback(packet, card, -ENODEV);
+ }
+ 
+-static int
+-dummy_cancel_packet(struct fw_card *card, struct fw_packet *packet)
++static int dummy_cancel_packet(struct fw_card *card, struct fw_packet *packet)
+ {
+ 	return -ENOENT;
+ }
+ 
+-static int
+-dummy_enable_phys_dma(struct fw_card *card,
+-		      int node_id, int generation)
++static int dummy_enable_phys_dma(struct fw_card *card,
++				 int node_id, int generation)
+ {
+ 	return -ENODEV;
+ }
+@@ -496,16 +481,14 @@ static struct fw_card_driver dummy_drive
+ 	.enable_phys_dma = dummy_enable_phys_dma,
+ };
+ 
+-void
+-fw_card_release(struct kref *kref)
++void fw_card_release(struct kref *kref)
+ {
+ 	struct fw_card *card = container_of(kref, struct fw_card, kref);
+ 
+ 	complete(&card->done);
+ }
+ 
+-void
[...3292 lines suppressed...]
++ *
++ * An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event is sent after an isochronous
++ * resource was deallocated at the IRM.  It is also sent when automatic
++ * reallocation after a bus reset failed.
++ *
++ * @channel is <0 if no channel was (de)allocated or if reallocation failed.
++ * @bandwidth is 0 if no bandwidth was (de)allocated or if reallocation failed.
++ */
++struct fw_cdev_event_iso_resource {
++	__u64 closure;
++	__u32 type;
++	__u32 handle;
++	__s32 channel;
++	__s32 bandwidth;
++};
++
++/**
+  * union fw_cdev_event - Convenience union of fw_cdev_event_ types
+  * @common:        Valid for all types
+  * @bus_reset:     Valid if @common.type == %FW_CDEV_EVENT_BUS_RESET
+  * @response:      Valid if @common.type == %FW_CDEV_EVENT_RESPONSE
+  * @request:       Valid if @common.type == %FW_CDEV_EVENT_REQUEST
+  * @iso_interrupt: Valid if @common.type == %FW_CDEV_EVENT_ISO_INTERRUPT
++ * @iso_resource:  Valid if @common.type ==
++ *				%FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED or
++ *				%FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED
+  *
+  * Convenience union for userspace use.  Events could be read(2) into an
+  * appropriately aligned char buffer and then cast to this union for further
+@@ -163,13 +214,15 @@ struct fw_cdev_event_iso_interrupt {
+  * not fit will be discarded so that the next read(2) will return a new event.
+  */
+ union fw_cdev_event {
+-	struct fw_cdev_event_common common;
+-	struct fw_cdev_event_bus_reset bus_reset;
+-	struct fw_cdev_event_response response;
+-	struct fw_cdev_event_request request;
+-	struct fw_cdev_event_iso_interrupt iso_interrupt;
++	struct fw_cdev_event_common		common;
++	struct fw_cdev_event_bus_reset		bus_reset;
++	struct fw_cdev_event_response		response;
++	struct fw_cdev_event_request		request;
++	struct fw_cdev_event_iso_interrupt	iso_interrupt;
++	struct fw_cdev_event_iso_resource	iso_resource;
+ };
+ 
++/* available since kernel version 2.6.22 */
+ #define FW_CDEV_IOC_GET_INFO		_IOWR('#', 0x00, struct fw_cdev_get_info)
+ #define FW_CDEV_IOC_SEND_REQUEST	_IOW('#', 0x01, struct fw_cdev_send_request)
+ #define FW_CDEV_IOC_ALLOCATE		_IOWR('#', 0x02, struct fw_cdev_allocate)
+@@ -178,18 +231,29 @@ union fw_cdev_event {
+ #define FW_CDEV_IOC_INITIATE_BUS_RESET	_IOW('#', 0x05, struct fw_cdev_initiate_bus_reset)
+ #define FW_CDEV_IOC_ADD_DESCRIPTOR	_IOWR('#', 0x06, struct fw_cdev_add_descriptor)
+ #define FW_CDEV_IOC_REMOVE_DESCRIPTOR	_IOW('#', 0x07, struct fw_cdev_remove_descriptor)
+-
+ #define FW_CDEV_IOC_CREATE_ISO_CONTEXT	_IOWR('#', 0x08, struct fw_cdev_create_iso_context)
+ #define FW_CDEV_IOC_QUEUE_ISO		_IOWR('#', 0x09, struct fw_cdev_queue_iso)
+ #define FW_CDEV_IOC_START_ISO		_IOW('#', 0x0a, struct fw_cdev_start_iso)
+ #define FW_CDEV_IOC_STOP_ISO		_IOW('#', 0x0b, struct fw_cdev_stop_iso)
++
++/* available since kernel version 2.6.24 */
+ #define FW_CDEV_IOC_GET_CYCLE_TIMER	_IOR('#', 0x0c, struct fw_cdev_get_cycle_timer)
+ 
+-/* FW_CDEV_VERSION History
+- *
+- * 1	Feb 18, 2007:  Initial version.
++/* available since kernel version 2.6.30 */
++#define FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE       _IOWR('#', 0x0d, struct fw_cdev_allocate_iso_resource)
++#define FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE      _IOW('#', 0x0e, struct fw_cdev_deallocate)
++#define FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE   _IOW('#', 0x0f, struct fw_cdev_allocate_iso_resource)
++#define FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE_ONCE _IOW('#', 0x10, struct fw_cdev_allocate_iso_resource)
++#define FW_CDEV_IOC_GET_SPEED                    _IOR('#', 0x11, struct fw_cdev_get_speed)
++#define FW_CDEV_IOC_SEND_BROADCAST_REQUEST       _IOW('#', 0x12, struct fw_cdev_send_request)
++
++/*
++ * FW_CDEV_VERSION History
++ *  1  (2.6.22)  - initial version
++ *  2  (2.6.30)  - changed &fw_cdev_event_iso_interrupt.header if
++ *                 &fw_cdev_create_iso_context.header_size is 8 or more
+  */
+-#define FW_CDEV_VERSION		1
++#define FW_CDEV_VERSION 2
+ 
+ /**
+  * struct fw_cdev_get_info - General purpose information ioctl
+@@ -201,7 +265,7 @@ union fw_cdev_event {
+  *		case, @rom_length is updated with the actual length of the
+  *		configuration ROM.
+  * @rom:	If non-zero, address of a buffer to be filled by a copy of the
+- *		local node's configuration ROM
++ *		device's configuration ROM
+  * @bus_reset:	If non-zero, address of a buffer to be filled by a
+  *		&struct fw_cdev_event_bus_reset with the current state
+  *		of the bus.  This does not cause a bus reset to happen.
+@@ -229,7 +293,7 @@ struct fw_cdev_get_info {
+  * Send a request to the device.  This ioctl implements all outgoing requests.
+  * Both quadlet and block request specify the payload as a pointer to the data
+  * in the @data field.  Once the transaction completes, the kernel writes an
+- * &fw_cdev_event_request event back.  The @closure field is passed back to
++ * &fw_cdev_event_response event back.  The @closure field is passed back to
+  * user space in the response event.
+  */
+ struct fw_cdev_send_request {
+@@ -284,9 +348,9 @@ struct fw_cdev_allocate {
+ };
+ 
+ /**
+- * struct fw_cdev_deallocate - Free an address range allocation
+- * @handle:	Handle to the address range, as returned by the kernel when the
+- *		range was allocated
++ * struct fw_cdev_deallocate - Free a CSR address range or isochronous resource
++ * @handle:	Handle to the address range or iso resource, as returned by the
++ *		kernel when the range or resource was allocated
+  */
+ struct fw_cdev_deallocate {
+ 	__u32 handle;
+@@ -370,6 +434,9 @@ struct fw_cdev_remove_descriptor {
+  *
+  * If a context was successfully created, the kernel writes back a handle to the
+  * context, which must be passed in for subsequent operations on that context.
++ *
++ * Note that the effect of a @header_size > 4 depends on
++ * &fw_cdev_get_info.version, as documented at &fw_cdev_event_iso_interrupt.
+  */
+ struct fw_cdev_create_iso_context {
+ 	__u32 type;
+@@ -473,10 +540,73 @@ struct fw_cdev_stop_iso {
+  * The %FW_CDEV_IOC_GET_CYCLE_TIMER ioctl reads the isochronous cycle timer
+  * and also the system clock.  This allows to express the receive time of an
+  * isochronous packet as a system time with microsecond accuracy.
++ *
++ * @cycle_timer consists of 7 bits cycleSeconds, 13 bits cycleCount, and
++ * 12 bits cycleOffset, in host byte order.
+  */
+ struct fw_cdev_get_cycle_timer {
+ 	__u64 local_time;
+ 	__u32 cycle_timer;
+ };
+ 
++/**
++ * struct fw_cdev_allocate_iso_resource - (De)allocate a channel or bandwidth
++ * @closure:	Passed back to userspace in correponding iso resource events
++ * @channels:	Isochronous channels of which one is to be (de)allocated
++ * @bandwidth:	Isochronous bandwidth units to be (de)allocated
++ * @handle:	Handle to the allocation, written by the kernel (only valid in
++ *		case of %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE ioctls)
++ *
++ * The %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE ioctl initiates allocation of an
++ * isochronous channel and/or of isochronous bandwidth at the isochronous
++ * resource manager (IRM).  Only one of the channels specified in @channels is
++ * allocated.  An %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED is sent after
++ * communication with the IRM, indicating success or failure in the event data.
++ * The kernel will automatically reallocate the resources after bus resets.
++ * Should a reallocation fail, an %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event
++ * will be sent.  The kernel will also automatically deallocate the resources
++ * when the file descriptor is closed.
++ *
++ * The %FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE ioctl can be used to initiate
++ * deallocation of resources which were allocated as described above.
++ * An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event concludes this operation.
++ *
++ * The %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE ioctl is a variant of allocation
++ * without automatic re- or deallocation.
++ * An %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED event concludes this operation,
++ * indicating success or failure in its data.
++ *
++ * The %FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE_ONCE ioctl works like
++ * %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE except that resources are freed
++ * instead of allocated.
++ * An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event concludes this operation.
++ *
++ * To summarize, %FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE allocates iso resources
++ * for the lifetime of the fd or handle.
++ * In contrast, %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE allocates iso resources
++ * for the duration of a bus generation.
++ *
++ * @channels is a host-endian bitfield with the least significant bit
++ * representing channel 0 and the most significant bit representing channel 63:
++ * 1ULL << c for each channel c that is a candidate for (de)allocation.
++ *
++ * @bandwidth is expressed in bandwidth allocation units, i.e. the time to send
++ * one quadlet of data (payload or header data) at speed S1600.
++ */
++struct fw_cdev_allocate_iso_resource {
++	__u64 closure;
++	__u64 channels;
++	__u32 bandwidth;
++	__u32 handle;
++};
++
++/**
++ * struct fw_cdev_get_speed - Query maximum speed to or from this device
++ * @max_speed:	Speed code; minimum of the device's link speed, the local node's
++ *		link speed, and all PHY port speeds between the two links
++ */
++struct fw_cdev_get_speed {
++	__u32 max_speed;
++};
++
+ #endif /* _LINUX_FIREWIRE_CDEV_H */

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(-)

Index: linux-2.6-ksm-kvm.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-12/linux-2.6-ksm-kvm.patch,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- linux-2.6-ksm-kvm.patch	11 Nov 2009 17:13:01 -0000	1.4
+++ linux-2.6-ksm-kvm.patch	4 Jan 2010 15:44:12 -0000	1.5
@@ -99,7 +99,7 @@ Signed-off-by: Justin M. Forbes <jforbes
 +			spte = rmap_next(kvm, rmapp, NULL);
 +		} else {
 +			new_spte = *spte &~ (PT64_BASE_ADDR_MASK);
-+			new_spte |= (u64)new_pfn << PAGE_SHIFT;
++			new_spte |= new_pfn << PAGE_SHIFT;
 +
 +			if (!pte_write(ptep_val(ptep))) {
 +				new_spte &= ~PT_WRITABLE_MASK;

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-12/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:44:12 -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-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-12/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:44:13 -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-12/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:44:13 -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-12/linux-2.6-tracehook.patch,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -p -r1.9 -r1.10
--- linux-2.6-tracehook.patch	8 Apr 2009 01:31:58 -0000	1.9
+++ linux-2.6-tracehook.patch	4 Jan 2010 15:44:13 -0000	1.10
@@ -1,194 +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>
 ---
- include/linux/tracehook.h |   25 ++++++++++------
- kernel/signal.c           |   69 +++++++++++++++++++++++----------------------
- 2 files changed, 51 insertions(+), 43 deletions(-)
+ 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/include/linux/tracehook.h b/include/linux/tracehook.h
-index c7aa154..4ec4821 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
-@@ -464,22 +464,29 @@ static inline int tracehook_get_signal(s
+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, struc
+-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 *ts
- 	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-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.117 -r 1.118 linux-2.6-utrace.patchIndex: linux-2.6-utrace.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-12/linux-2.6-utrace.patch,v
retrieving revision 1.117
retrieving revision 1.118
diff -u -p -r1.117 -r1.118
--- linux-2.6-utrace.patch	25 Jun 2009 01:27:31 -0000	1.117
+++ linux-2.6-utrace.patch	4 Jan 2010 15:44:13 -0000	1.118
@@ -1,5 +1,45 @@
+utrace core
+
+This adds the utrace facility, a new modular interface in the kernel for
+implementing user thread tracing and debugging.  This fits on top of the
+tracehook_* layer, so the new code is well-isolated.
+
+The new interface is in <linux/utrace.h> and the DocBook utrace book
+describes it.  It allows for multiple separate tracing engines to work in
+parallel without interfering with each other.  Higher-level tracing
+facilities can be implemented as loadable kernel modules using this layer.
+
+The new facility is made optional under CONFIG_UTRACE.
+When this is not enabled, no new code is added.
+It can only be enabled on machines that have all the
+prerequisites and select CONFIG_HAVE_ARCH_TRACEHOOK.
+
+In this initial version, utrace and ptrace do not play together at all.
+If ptrace is attached to a thread, the attach calls in the utrace kernel
+API return -EBUSY.  If utrace is attached to a thread, the PTRACE_ATTACH
+or PTRACE_TRACEME request will return EBUSY to userland.  The old ptrace
+code is otherwise unchanged and nothing using ptrace should be affected
+by this patch as long as utrace is not used at the same time.  In the
+future we can clean up the ptrace implementation and rework it to use
+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 9632444..bf4b9e8 100644
+index ab8300f..95f59e4 100644  
 --- a/Documentation/DocBook/Makefile
 +++ b/Documentation/DocBook/Makefile
 @@ -9,7 +9,7 @@
@@ -13,7 +53,7 @@ index 9632444..bf4b9e8 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 @@
@@ -472,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
@@ -608,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 @@
@@ -616,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);
  
@@ -628,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 5368fbd..aecd24e 100644
---- a/include/linux/init_task.h
-+++ b/include/linux/init_task.h
-@@ -167,6 +167,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_PERF_COUNTERS(tsk)						\
- 	INIT_TRACE_IRQFLAGS						\
 diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 4d07542..2060aa1 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>
-@@ -1313,6 +1314,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
 +
@@ -665,7 +685,7 @@ index 4d07542..2060aa1 100644
     	u32 parent_exec_id;
     	u32 self_exec_id;
 diff --git a/include/linux/tracehook.h b/include/linux/tracehook.h
-index 7c2bfd9..a91d9a4 100644
+index c78b2f4..71fa250 100644  
 --- a/include/linux/tracehook.h
 +++ b/include/linux/tracehook.h
 @@ -49,6 +49,7 @@
@@ -685,7 +705,7 @@ index 7c2bfd9..a91d9a4 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)
  {
@@ -695,16 +715,17 @@ index 7c2bfd9..a91d9a4 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)
  {
@@ -713,7 +734,7 @@ index 7c2bfd9..a91d9a4 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)
  {
@@ -722,15 +743,36 @@ index 7c2bfd9..a91d9a4 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
[...2817 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.
@@ -3659,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
@@ -3683,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).
@@ -3700,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,
@@ -3800,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
@@ -3819,7 +3863,7 @@ index 0000000..74b5fc5
 +			break;
 +		}
 +
-+		finish_callback(utrace, &report, engine, ret);
++		finish_callback(task, utrace, &report, engine, ret);
 +	}
 +
 +	/*
@@ -3866,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);
@@ -3899,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
@@ -3931,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
@@ -3962,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);
@@ -3982,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.
@@ -4093,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-experimental.patch:
 drivers/media/dvb/siano/smssdio.c              |  356 +++
 drivers/media/video/Kconfig                    |    2 
 drivers/media/video/Makefile                   |    1 
 drivers/media/video/cx231xx/Kconfig            |   35 
 drivers/media/video/cx231xx/Makefile           |   14 
 drivers/media/video/cx231xx/cx231xx-audio.c    |  585 +++++
 drivers/media/video/cx231xx/cx231xx-avcore.c   | 2581 +++++++++++++++++++++++++
 drivers/media/video/cx231xx/cx231xx-cards.c    |  919 ++++++++
 drivers/media/video/cx231xx/cx231xx-conf-reg.h |  494 ++++
 drivers/media/video/cx231xx/cx231xx-core.c     | 1200 +++++++++++
 drivers/media/video/cx231xx/cx231xx-dvb.c      |  559 +++++
 drivers/media/video/cx231xx/cx231xx-i2c.c      |  555 +++++
 drivers/media/video/cx231xx/cx231xx-input.c    |  246 ++
 drivers/media/video/cx231xx/cx231xx-pcb-cfg.c  |  795 +++++++
 drivers/media/video/cx231xx/cx231xx-pcb-cfg.h  |  231 ++
 drivers/media/video/cx231xx/cx231xx-reg.h      | 1564 +++++++++++++++
 drivers/media/video/cx231xx/cx231xx-vbi.c      |  701 ++++++
 drivers/media/video/cx231xx/cx231xx-vbi.h      |   65 
 drivers/media/video/cx231xx/cx231xx-video.c    | 2439 +++++++++++++++++++++++
 drivers/media/video/cx231xx/cx231xx.h          |  779 +++++++
 drivers/media/video/cx25840/cx25840-audio.c    |   66 
 drivers/media/video/cx25840/cx25840-core.c     |  165 +
 drivers/media/video/cx25840/cx25840-core.h     |    1 
 drivers/media/video/cx25840/cx25840-firmware.c |   11 
 include/linux/i2c-id.h                         |    1 
 include/linux/mmc/sdio_ids.h                   |    8 
 26 files changed, 14310 insertions(+), 63 deletions(-)

View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.9 -r 1.10 linux-2.6-v4l-dvb-experimental.patchIndex: linux-2.6-v4l-dvb-experimental.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-12/linux-2.6-v4l-dvb-experimental.patch,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -p -r1.9 -r1.10
--- linux-2.6-v4l-dvb-experimental.patch	12 Nov 2009 16:50:22 -0000	1.9
+++ linux-2.6-v4l-dvb-experimental.patch	4 Jan 2010 15:44:13 -0000	1.10
@@ -1 +1,14750 @@
-empty
+Hans Verkuil (2):
+      V4L/DVB (10982): cx231xx: fix compile warning
+      V4L/DVB (10989): cx25840: cx23885 detection was broken
+
+Mauro Carvalho Chehab (12):
+      V4L/DVB (10953): cx25840: Fix CodingStyle errors introduced by the last patch
+      V4L/DVB (10955): cx231xx: CodingStyle automatic fixes with Lindent
+      V4L/DVB (10956): cx231xx: First series of manual CodingStyle fixes
+      V4L/DVB (10957a): cx231xx: Fix compilation breakage
+      V4L/DVB (11130): cx231xx: fix an inverted logic at vidioc_streamoff
+      V4L/DVB (11131): cx231xx: avoid trying to access unfilled dev struct
+      V4L/DVB (11132): cx231xx: usb probe cleanups
+      V4L/DVB (11133): cx231xx: don't print pcb config debug messages by default
+      V4L/DVB (11134): cx231xx: dmesg cleanup
+      V4L/DVB (11135): cx231xx: use usb_make_path() for bus_info
+      V4L/DVB (11250): cx231xx: Fix Kconfig help items
+      Merge branch 'next' of ../pending into Fedora
+
+Sri Deevi (7):
+      V4L/DVB (10952): cx25840: prepare it to be used by cx231xx module
+      V4L/DVB (10954): Add cx231xx USB driver
+      V4L/DVB (10957): cx231xx: Fix CodingStyle
+      V4L/DVB (10958): cx231xx: some additional CodingStyle and minor fixes
+      V4L/DVB (11038): Fix the issue with audio module & correction of Names
+      V4L/DVB (11128): cx231xx: convert the calls to subdev format
+      V4L/DVB (11129): cx231xx: Use generic names for each device block
+
+Uri Shkolnik (2):
+      V4L/DVB (11239): sdio: add cards ids for sms (Siano Mobile Silicon) MDTV receivers
+      V4L/DVB (11240): siano: add high level SDIO interface driver for SMS based cards
+
+diff --git a/drivers/media/dvb/siano/smssdio.c b/drivers/media/dvb/siano/smssdio.c
+new file mode 100644
+index 0000000..31ba8c5
+--- /dev/null
++++ b/drivers/media/dvb/siano/smssdio.c
+@@ -0,0 +1,356 @@
++/*
++ *  smssdio.c - Siano 1xxx SDIO interface driver
++ *
++ *  Copyright 2008 Pierre Ossman
++ *
++ * Based on code by Siano Mobile Silicon, Inc.,
++ * Copyright (C) 2006-2008, Uri Shkolnik
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or (at
++ * your option) any later version.
++ *
++ *
++ * This hardware is a bit odd in that all transfers should be done
++ * to/from the SMSSDIO_DATA register, yet the "increase address" bit
++ * always needs to be set.
++ *
++ * Also, buffers from the card are always aligned to 128 byte
++ * boundaries.
++ */
++
++/*
++ * General cleanup notes:
++ *
++ * - only typedefs should be name *_t
++ *
++ * - use ERR_PTR and friends for smscore_register_device()
++ *
++ * - smscore_getbuffer should zero fields
++ *
++ * Fix stop command
++ */
++
++#include <linux/moduleparam.h>
++#include <linux/firmware.h>
++#include <linux/delay.h>
++#include <linux/mmc/card.h>
++#include <linux/mmc/sdio_func.h>
++#include <linux/mmc/sdio_ids.h>
++
++#include "smscoreapi.h"
++#include "sms-cards.h"
++
++/* Registers */
++
++#define SMSSDIO_DATA		0x00
++#define SMSSDIO_INT		0x04
++
++static const struct sdio_device_id smssdio_ids[] = {
++	{SDIO_DEVICE(SDIO_VENDOR_ID_SIANO, SDIO_DEVICE_ID_SIANO_STELLAR),
++	 .driver_data = SMS1XXX_BOARD_SIANO_STELLAR},
++	{SDIO_DEVICE(SDIO_VENDOR_ID_SIANO, SDIO_DEVICE_ID_SIANO_NOVA_A0),
++	 .driver_data = SMS1XXX_BOARD_SIANO_NOVA_A},
++	{SDIO_DEVICE(SDIO_VENDOR_ID_SIANO, SDIO_DEVICE_ID_SIANO_NOVA_B0),
++	 .driver_data = SMS1XXX_BOARD_SIANO_NOVA_B},
++	{SDIO_DEVICE(SDIO_VENDOR_ID_SIANO, SDIO_DEVICE_ID_SIANO_VEGA_A0),
++	 .driver_data = SMS1XXX_BOARD_SIANO_VEGA},
++	{SDIO_DEVICE(SDIO_VENDOR_ID_SIANO, SDIO_DEVICE_ID_SIANO_VENICE),
++	 .driver_data = SMS1XXX_BOARD_SIANO_VEGA},
++	{ /* end: all zeroes */ },
++};
++
++MODULE_DEVICE_TABLE(sdio, smssdio_ids);
++
++struct smssdio_device {
++	struct sdio_func *func;
++
++	struct smscore_device_t *coredev;
++
++	struct smscore_buffer_t *split_cb;
++};
++
++/*******************************************************************/
++/* Siano core callbacks                                            */
++/*******************************************************************/
++
++static int smssdio_sendrequest(void *context, void *buffer, size_t size)
++{
++	int ret;
++	struct smssdio_device *smsdev;
++
++	smsdev = context;
++
++	sdio_claim_host(smsdev->func);
++
++	while (size >= smsdev->func->cur_blksize) {
++		ret = sdio_write_blocks(smsdev->func, SMSSDIO_DATA, buffer, 1);
++		if (ret)
++			goto out;
++
++		buffer += smsdev->func->cur_blksize;
++		size -= smsdev->func->cur_blksize;
++	}
++
++	if (size) {
++		ret = sdio_write_bytes(smsdev->func, SMSSDIO_DATA,
++				       buffer, size);
++		if (ret)
++			goto out;
++	}
++
++out:
++	sdio_release_host(smsdev->func);
++
++	return ret;
++}
++
++/*******************************************************************/
++/* SDIO callbacks                                                  */
++/*******************************************************************/
++
++static void smssdio_interrupt(struct sdio_func *func)
++{
++	int ret, isr;
++
++	struct smssdio_device *smsdev;
++	struct smscore_buffer_t *cb;
++	struct SmsMsgHdr_ST *hdr;
++	size_t size;
++
++	smsdev = sdio_get_drvdata(func);
++
++	/*
++	 * The interrupt register has no defined meaning. It is just
++	 * a way of turning of the level triggered interrupt.
++	 */
++	isr = sdio_readb(func, SMSSDIO_INT, &ret);
++	if (ret) {
++		dev_err(&smsdev->func->dev,
++			"Unable to read interrupt register!\n");
++		return;
++	}
++
++	if (smsdev->split_cb == NULL) {
++		cb = smscore_getbuffer(smsdev->coredev);
++		if (!cb) {
++			dev_err(&smsdev->func->dev,
++				"Unable to allocate data buffer!\n");
++			return;
++		}
++
++		ret = sdio_read_blocks(smsdev->func, cb->p, SMSSDIO_DATA, 1);
++		if (ret) {
++			dev_err(&smsdev->func->dev,
++				"Error %d reading initial block!\n", ret);
++			return;
++		}
++
++		hdr = cb->p;
++
++		if (hdr->msgFlags & MSG_HDR_FLAG_SPLIT_MSG) {
++			smsdev->split_cb = cb;
[...14360 lines suppressed...]
++
++			pll /= pll_post;
++			v4l_dbg(1, cx25840_debug, client, "PLL = %d.%06d MHz\n",
++					pll / 1000000, pll % 1000000);
++			v4l_dbg(1, cx25840_debug, client, "PLL/8 = %d.%06d MHz\n",
++					pll / 8000000, (pll / 8) % 1000000);
++
++			fin = ((u64)src_decimation * pll) >> 12;
++			v4l_dbg(1, cx25840_debug, client,
++					"ADC Sampling freq = %d.%06d MHz\n",
++					fin / 1000000, fin % 1000000);
++
++			fsc = (((u64)sc) * pll) >> 24L;
++			v4l_dbg(1, cx25840_debug, client,
++					"Chroma sub-carrier freq = %d.%06d MHz\n",
++					fsc / 1000000, fsc % 1000000);
++
++			v4l_dbg(1, cx25840_debug, client, "hblank %i, hactive %i, "
++				"vblank %i, vactive %i, vblank656 %i, src_dec %i, "
++				"burst 0x%02x, luma_lpf %i, uv_lpf %i, comb 0x%02x, "
++				"sc 0x%06x\n",
++				hblank, hactive, vblank, vactive, vblank656,
++				src_decimation, burst, luma_lpf, uv_lpf, comb, sc);
++		}
+ 	}
+ 
+ 	/* Sets horizontal blanking delay and active lines */
+@@ -596,7 +669,7 @@ static int set_input(struct i2c_client *client, enum cx25840_video_input vid_inp
+ 	 * configuration in reg (for the cx23885) so we have no
+ 	 * need to attempt to flip bits for earlier av decoders.
+ 	 */
+-	if (!state->is_cx23885) {
++	if (!state->is_cx23885 && !state->is_cx231xx) {
+ 		switch (aud_input) {
+ 		case CX25840_AUDIO_SERIAL:
+ 			/* do nothing, use serial audio input */
+@@ -619,7 +692,7 @@ static int set_input(struct i2c_client *client, enum cx25840_video_input vid_inp
+ 	/* Set INPUT_MODE to Composite (0) or S-Video (1) */
+ 	cx25840_and_or(client, 0x401, ~0x6, is_composite ? 0 : 0x02);
+ 
+-	if (!state->is_cx23885) {
++	if (!state->is_cx23885 && !state->is_cx231xx) {
+ 		/* Set CH_SEL_ADC2 to 1 if input comes from CH3 */
+ 		cx25840_and_or(client, 0x102, ~0x2, (reg & 0x80) == 0 ? 2 : 0);
+ 		/* Set DUAL_MODE_ADC2 to 1 if input comes from both CH2&CH3 */
+@@ -659,6 +732,19 @@ static int set_input(struct i2c_client *client, enum cx25840_video_input vid_inp
+ 		 */
+ 		cx25840_write(client, 0x918, 0xa0);
+ 		cx25840_write(client, 0x919, 0x01);
++	} else if (state->is_cx231xx) {
++		/* Audio channel 1 src : Parallel 1 */
++		cx25840_write(client, 0x124, 0x03);
++
++		/* I2S_IN_CTL: I2S_IN_SONY_MODE, LEFT SAMPLE on WS=1 */
++		cx25840_write(client, 0x914, 0xa0);
++
++		/* I2S_OUT_CTL:
++		 * I2S_IN_SONY_MODE, LEFT SAMPLE on WS=1
++		 * I2S_OUT_MASTER_MODE = Master
++		 */
++		cx25840_write(client, 0x918, 0xa0);
++		cx25840_write(client, 0x919, 0x01);
+ 	}
+ 
+ 	return 0;
+@@ -1118,6 +1204,8 @@ static int cx25840_init(struct v4l2_subdev *sd, u32 val)
+ 			cx25836_initialize(client);
+ 		else if (state->is_cx23885)
+ 			cx23885_initialize(client);
++		else if (state->is_cx231xx)
++			cx231xx_initialize(client);
+ 		else
+ 			cx25840_initialize(client);
+ 	}
+@@ -1159,7 +1247,7 @@ static int cx25840_s_stream(struct v4l2_subdev *sd, int enable)
+ 	v4l_dbg(1, cx25840_debug, client, "%s output\n",
+ 			enable ? "enable" : "disable");
+ 	if (enable) {
+-		if (state->is_cx23885) {
++		if (state->is_cx23885 || state->is_cx231xx) {
+ 			u8 v = (cx25840_read(client, 0x421) | 0x0b);
+ 			cx25840_write(client, 0x421, v);
+ 		} else {
+@@ -1169,7 +1257,7 @@ static int cx25840_s_stream(struct v4l2_subdev *sd, int enable)
+ 					state->is_cx25836 ? 0x04 : 0x07);
+ 		}
+ 	} else {
+-		if (state->is_cx23885) {
++		if (state->is_cx23885 || state->is_cx231xx) {
+ 			u8 v = cx25840_read(client, 0x421) & ~(0x0b);
+ 			cx25840_write(client, 0x421, v);
+ 		} else {
+@@ -1350,6 +1438,8 @@ static int cx25840_reset(struct v4l2_subdev *sd, u32 val)
+ 		cx25836_initialize(client);
+ 	else if (state->is_cx23885)
+ 		cx23885_initialize(client);
++	else if (state->is_cx231xx)
++		cx231xx_initialize(client);
+ 	else
+ 		cx25840_initialize(client);
+ 	return 0;
+@@ -1449,6 +1539,8 @@ static int cx25840_probe(struct i2c_client *client,
+ 		id = V4L2_IDENT_CX25836 + ((device_id >> 4) & 0xf) - 6;
+ 	} else if (device_id == 0x1313) {
+ 		id = V4L2_IDENT_CX25836 + ((device_id >> 4) & 0xf) - 6;
++	} else if ((device_id & 0xfff0) == 0x5A30) {
++		id = V4L2_IDENT_CX25840 + ((device_id >> 4) & 0xf);
+ 	}
+ 	else {
+ 		v4l_dbg(1, cx25840_debug, client, "cx25840 not found\n");
+@@ -1471,6 +1563,7 @@ static int cx25840_probe(struct i2c_client *client,
+ 	state->c = client;
+ 	state->is_cx25836 = ((device_id & 0xff00) == 0x8300);
+ 	state->is_cx23885 = (device_id == 0x0000) || (device_id == 0x1313);
++	state->is_cx231xx = (device_id == 0x5a3e);
+ 	state->vid_input = CX25840_COMPOSITE7;
+ 	state->aud_input = CX25840_AUDIO8;
+ 	state->audclk_freq = 48000;
+diff --git a/drivers/media/video/cx25840/cx25840-core.h b/drivers/media/video/cx25840/cx25840-core.h
+index 9ad0eb8..814b565 100644
+--- a/drivers/media/video/cx25840/cx25840-core.h
++++ b/drivers/media/video/cx25840/cx25840-core.h
+@@ -50,6 +50,7 @@ struct cx25840_state {
+ 	u32 rev;
+ 	int is_cx25836;
+ 	int is_cx23885;
++	int is_cx231xx;
+ 	int is_initialized;
+ 	wait_queue_head_t fw_wait;    /* wake up when the fw load is finished */
+ 	struct work_struct fw_work;   /* work entry for fw load */
+diff --git a/drivers/media/video/cx25840/cx25840-firmware.c b/drivers/media/video/cx25840/cx25840-firmware.c
+index 0b2dceb..0df53b0 100644
+--- a/drivers/media/video/cx25840/cx25840-firmware.c
++++ b/drivers/media/video/cx25840/cx25840-firmware.c
+@@ -25,6 +25,7 @@
+ 
+ #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
+@@ -96,9 +97,17 @@ int cx25840_loadfw(struct i2c_client *client)
+ 	u8 buffer[FWSEND];
+ 	const u8 *ptr;
+ 	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);
+@@ -113,7 +122,7 @@ int cx25840_loadfw(struct i2c_client *client)
+ 	size = fw->size;
+ 	ptr = fw->data;
+ 	while (size > 0) {
+-		int len = min(FWSEND - 2, size);
++		int len = min(MAX_BUF_SIZE - 2, size);
+ 
+ 		memcpy(buffer + 2, ptr, len);
+ 
+diff --git a/include/linux/i2c-id.h b/include/linux/i2c-id.h
+index f27604a..f9d48c9 100644
+--- a/include/linux/i2c-id.h
++++ b/include/linux/i2c-id.h
+@@ -88,6 +88,7 @@
+ #define I2C_HW_B_CX2341X	0x010020 /* Conexant CX2341X MPEG encoder cards */
+ #define I2C_HW_B_CX23885	0x010022 /* conexant 23885 based tv cards (bus1) */
+ #define I2C_HW_B_AU0828		0x010023 /* auvitek au0828 usb bridge */
++#define I2C_HW_B_CX231XX	0x010024 /* Conexant CX231XX USB based cards */
+ #define I2C_HW_B_HDPVR		0x010025 /* Hauppauge HD PVR */
+ 
+ /* --- SGI adapters							*/
+diff --git a/include/linux/mmc/sdio_ids.h b/include/linux/mmc/sdio_ids.h
+index ea1bf5b..3d7533d 100644
+--- a/include/linux/mmc/sdio_ids.h
++++ b/include/linux/mmc/sdio_ids.h
+@@ -24,6 +24,14 @@
+  */
+ 
+ #define SDIO_VENDOR_ID_MARVELL			0x02df
++#define SDIO_VENDOR_ID_SIANO			0x039a
++
+ #define SDIO_DEVICE_ID_MARVELL_LIBERTAS		0x9103
++#define SDIO_DEVICE_ID_SIANO_STELLAR 		0x5347
++#define SDIO_DEVICE_ID_SIANO_NOVA_A0		0x1100
++#define SDIO_DEVICE_ID_SIANO_NOVA_B0		0x0201
++#define SDIO_DEVICE_ID_SIANO_NICE		0x0202
++#define SDIO_DEVICE_ID_SIANO_VEGA_A0		0x0300
++#define SDIO_DEVICE_ID_SIANO_VENICE		0x0301
+ 
+ #endif

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(-)

View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.14 -r 1.15 linux-2.6-v4l-dvb-fixes.patchIndex: linux-2.6-v4l-dvb-fixes.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-12/linux-2.6-v4l-dvb-fixes.patch,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -p -r1.14 -r1.15
--- linux-2.6-v4l-dvb-fixes.patch	12 Nov 2009 16:50:22 -0000	1.14
+++ linux-2.6-v4l-dvb-fixes.patch	4 Jan 2010 15:44:13 -0000	1.15
@@ -1 +1,113215 @@
-empty
+Abylay Ospan (5):
+      V4L/DVB (10796): Add init code for NetUP Dual DVB-S2 CI card
+      V4L/DVB (10797): Add EEPROM code for NetUP Dual DVB-S2 CI card.
+      V4L/DVB (10798): Add CIMax(R) SP2 Common Interface code for NetUP Dual DVB-S2 CI card
+      V4L/DVB (11056): Bug fix in NetUP: restore high address lines in CI
+      V4L/DVB (11057): Fix CiMax stability in Netup Dual DVB-S2 CI
+
+Adam Baker (2):
+      V4L/DVB (10639): gspca - sq905: New subdriver.
+      V4L/DVB (10829): Support alternate resolutions for sq905
+
+Alan Cox (2):
+      V4L/DVB (11243): cx88: Missing failure checks
+      V4L/DVB (11244): pluto2: silence spew of card hung up messages
+
+Alan McIvor (1):
+      V4L/DVB (11124): Add support for ProVideo PV-183 to bttv
+
+Alexey Klimov (18):
+      V4L/DVB (10316): v4l/dvb: use usb_make_path in usb-radio drivers
+      V4L/DVB (10324): em28xx: Correct mailing list
+      V4L/DVB (10335): gspca - all subdrivers: Fix CodingStyle in sd_mod_init function.
+      V4L/DVB (10336): gspca - all subdrivers: Return ret instead of -1 in sd_mod_init.
+      V4L/DVB (10455): radio-mr800: codingstyle cleanups
+      V4L/DVB (10456): radio-mr800: place dev_err instead of dev_warn
+      V4L/DVB (10457): radio-mr800: add more dev_err messages in probe
+      V4L/DVB (10458): radio-mr800: move radio start and stop in one function
+      V4L/DVB (10459): radio-mr800: fix amradio_set_freq
+      V4L/DVB (10460): radio-mr800: add stereo support
+      V4L/DVB (10461): radio-mr800: add few lost mutex locks
+      V4L/DVB (10462): radio-mr800: increase version and add comments
+      V4L/DVB (10463): radio-mr800: fix checking of retval after usb_bulk_msg
+      V4L/DVB (10464): radio-si470x: use usb_make_path in usb-radio drivers
+      V4L/DVB (10465): dsbr100: Add few lost mutex locks.
+      V4L/DVB (10522): em28xx-audio: replace printk with em28xx_errdev
+      V4L/DVB (10946): radio-rtrack2: fix double mutex_unlock
+      V4L/DVB (10961): radio-terratec: remove linux/delay.h which hadn't been used.
+
+Andy Walls (44):
+      V4L/DVB (10274): cx18: Fix a PLL divisor update for the I2S master clock
+      V4L/DVB (10275): cx18: Additional debug to display outgoing mailbox parameters
+      V4L/DVB (10276): cx18, cx2341x, ivtv: Add AC-3 audio encoding control to cx18
+      V4L/DVB (10277): cx18, cx2341x: Fix bugs in cx18 AC3 control and comply with V4L2 spec
+      V4L/DVB (10278): cx18: Fix bad audio in first analog capture.
+      V4L/DVB (10279): cx18: Print driver version number when logging status
+      V4L/DVB (10280): cx18: Rename structure members: dev to pci_dev and v4l2dev to video_dev
+      V4L/DVB (10281): cx18: Conversion to new V4L2 framework: use v4l2_device object
+      V4L/DVB (10283): cx18: Call request_module() with proper argument types.
+      V4L/DVB (10284): cx18: Add initial entry for a Leadtek DVR3100 H hybrid card
+      V4L/DVB (10433): cx18: Defer A/V core initialization until a valid cx18_av_cmd arrives
+      V4L/DVB (10434): cx18: Smarter verification of CX18_AUDIO_ENABLE register writes
+      V4L/DVB (10435): cx18: Normalize APU after second APU firmware load
+      V4L/DVB (10436): cx18: Fix coding style of a switch statement per checkpatch.pl
+      V4L/DVB (10437): cx18: Remove an unused spinlock
+      V4L/DVB (10439): cx18: Clean-up and enable sliced VBI handling
+      V4L/DVB (10440): cx18: Fix presentation timestamp (PTS) for VBI buffers
+      V4L/DVB (10441): cx18: Fix VBI ioctl() handling and Raw/Sliced VBI state management
+      V4L/DVB (10442): cx18: Fixes for enforcing when Encoder Raw VBI params can be set
+      V4L/DVB (10443): cx18: Use correct line counts per field in firmware API call
+      V4L/DVB (10444): cx18: Fix sliced VBI PTS and fix artifacts in last raw line of field
+      V4L/DVB (10445): cx18: Process Raw VBI on a whole frame basis; fix VBI buffer size
+      V4L/DVB (10446): cx18: Finally get sliced VBI working - for 525 line 60 Hz systems at least
+      V4L/DVB (10755): cx18: Convert the integrated A/V decoder core interface to a v4l2_subdev
+      V4L/DVB (10756): cx18: Slim down instance handling, build names from v4l2_device.name
+      V4L/DVB (10757): cx18, v4l2-chip-ident: Finish conversion of AV decoder core to v4l2_subdev
+      V4L/DVB (10758): cx18: Convert I2C devices to v4l2_subdevices
+      V4L/DVB (10759): cx18: Convert GPIO connected functions to act as v4l2_subdevices
+      V4L/DVB (10760): cx18: Fix a memory leak of buffers used for sliced VBI insertion
+      V4L/DVB (10761): cx18: Change log lines for internal subdevs and fix tveeprom reads
+      V4L/DVB (10762): cx18: Get rid of unused variables related to video output
+      V4L/DVB (10763): cx18: Increment version number due to significant changes for v4l2_subdevs
+      V4L/DVB (10764): cx18: Disable AC3 controls as the firmware doesn't support AC3
+      V4L/DVB (10850): cx18: Use strlcpy() instead of strncpy() for temp eeprom i2c_client setup
+      V4L/DVB (10851): cx18: Fix a video scaling check problem introduced by sliced VBI changes
+      V4L/DVB (10852): cx18: Include cx18-audio.h in cx18-audio.c to eliminate s-parse warning
+      V4L/DVB (10853): cx18: Fix s-parse warnings and a logic error about extracting the VBI PTS
+      V4L/DVB (10854): cx18: Correct comments about vertical and horizontal blanking timings
+      V4L/DVB (10855): cx18: Fix VPS service register codes
+      V4L/DVB (10856): cx18: Add interlock so sliced VBI insertion only happens for an MPEG PS
+      V4L/DVB (11042): v4l2-api: Add definitions for V4L2_MPEG_STREAM_VBI_FMT_IVTV payloads
+      V4L/DVB (11091): cx18, ivtv: Ensure endianess for linemasks in VBI embedded in MPEG stream
+      V4L/DVB (11092): cx18: Optimize processing of VBI buffers from the capture unit
+      V4L/DVB (11233): mxl5005s: Switch in mxl5005s_set_params should operate on correct values
+
+Antoine Jacquet (1):
+      V4L/DVB (10263): zr364xx: add support for Aiptek DV T300
+
+Antonio Ospite (2):
+      V4L/DVB (10344): gspca - ov534: Disable the Hercules webcams.
+      V4L/DVB (10676): mt9m111: Call icl->reset() on mt9m111_reset().
+
+Antti Palosaari (4):
+      V4L/DVB (10286): af9015: add new USB ID for KWorld DVB-T 395U
+      V4L/DVB (10329): af9015: remove dual_mode module param
+      V4L/DVB (11215): zl10353: add support for Intel CE6230 and Intel CE6231
+      V4L/DVB (11216): Add driver for Intel CE6230 DVB-T USB2.0
+
+Arne Luehrs (1):
+      V4L/DVB (10319): dib0700: enable IR receiver in Nova TD usb stick (52009)
+
+Artem Makhutov (1):
+      V4L/DVB (11248): Remove debug output from stb6100_cfg.h
+
+Bruno Christo (1):
+      V4L/DVB (10827): Add support for GeoVision GV-800(S)
+
+Daniel Glöckner (1):
+      V4L/DVB (11242): allow v4l2 drivers to provide a get_unmapped_area handler
+
+Devin Heitmueller (36):
+      V4L/DVB (10320): dib0700: fix i2c error message to make data type clear
+      V4L/DVB (10321): dib0700: Report dib0700_i2c_enumeration failures
+      V4L/DVB (11059): xc5000: fix bug for hybrid xc5000 devices with IF other than 5380
+      V4L/DVB (11060): au8522: rename the au8522.c source file
+      V4L/DVB (11061): au8522: move shared state and common functions into a separate header files
+      V4L/DVB (11062): au8522: fix register read/write high bits
+      V4L/DVB (11063): au8522: power down the digital demod when not in use
+      V4L/DVB (11064): au8522: make use of hybrid framework so analog/digital demod can share state
+      V4L/DVB (11065): au8522: add support for analog side of demodulator
+      V4L/DVB (11066): au0828: add support for analog functionality in bridge
+      V4L/DVB (11067): au0828: workaround a bug in the au0828 i2c handling
+      V4L/DVB (11068): au0828: add analog profile for the HVR-850
+      V4L/DVB (11069): au8522: add mutex protecting use of hybrid state
+      V4L/DVB (11070): au0828: Rework the way the analog video binding occurs
+      V4L/DVB (11071): tveeprom: add the xc5000 tuner to the tveeprom definition
+      V4L/DVB (11072): au0828: advertise only NTSC-M (as opposed to all NTSC standards)
+      V4L/DVB (11073): au0828: disable VBI code since it doesn't yet work
+      V4L/DVB (11074): au0828: fix i2c enumeration bug
+      V4L/DVB (11075): au0828: make register debug lines easier to read
+      V4L/DVB (11076): au0828: make g_chip_ident call work properly
+      V4L/DVB (11077): au0828: properly handle missing analog USB endpoint
+      V4L/DVB (11078): au0828: properly handle non-existent analog inputs
+      V4L/DVB (11079): au0828: fix panic on disconnect if analog initialization failed
+      V4L/DVB (11080): au0828: Convert to use v4l2_device/subdev framework
+      V4L/DVB (11081): au0828: make sure v4l2_device name is unique
+      V4L/DVB (11082): au0828: remove memset calls in v4l2 routines.
+      V4L/DVB (11083): au0828: remove some unneeded braces
+      V4L/DVB (11084): au0828: add entry for undefined input type
+      V4L/DVB (11085): au0828/au8522: Codingstyle fixes
+      V4L/DVB (11086): au0828: rename macro for currently non-function VBI support
+      V4L/DVB (11088): au0828: finish videodev/subdev conversion
+      V4L/DVB (11089): au8522: finish conversion to v4l2_device/subdev
+      V4L/DVB (11139): em28xx: add remote control definition for HVR-900 (both versions)
+      V4L/DVB (11140): usbvision: fix oops on ARM platform when allocating transfer buffers
+      V4L/DVB (11141): em28xx: fix oops on ARM platform when allocating transfer buffers
+      V4L/DVB (11142): au0828: fix oops on ARM platform when allocating transfer buffers
+
+Douglas Kosovic (1):
+      V4L/DVB (10299): bttv: Add support for IVCE-8784 support for V4L2 bttv driver
+
+Douglas Schilling Landgraf (13):
+      V4L/DVB (10323): em28xx: Add entry for GADMEI TVR200
+      V4L/DVB (10326): em28xx: Cleanup: fix bad whitespacing
+      V4L/DVB (10327): em28xx: Add check before call em28xx_isoc_audio_deinit()
+      V4L/DVB (10517): em28xx: remove bad check (changeset a31c595188af)
+      V4L/DVB (10520): em28xx-audio: Add spinlock for trigger
+      V4L/DVB (10521): em28xx-audio: Add lock for users
+      V4L/DVB (10523): em28xx-audio: Add macros EM28XX_START_AUDIO / EM28XX_STOP_AUDIO
+      V4L/DVB (10524): em28xx: Add DVC 101 model to Pinnacle Dazzle description
+      V4L/DVB (10556): em28xx-cards: Add Pinnacle Dazzle Video Creator Plus DVC107 description
+      V4L/DVB (10739): em28xx-cards: remove incorrect entry
+      V4L/DVB (10740): em28xx-cards: Add SIIG AVTuner-PVR board
+      V4L/DVB (10741): em28xx: Add Kaiser Baas Video to DVD maker support
+      V4L/DVB (11222): gspca - zc3xx: The webcam DLink DSB - C320 has the sensor pas106.
+
+Erik Andren (3):
+      V4L/DVB (10334): gspca - stv06xx: Rework control description.
+      V4L/DVB (10341): gspca - stv06xx: Plug a memory leak in the pb0100 sensor driver.
+      V4L/DVB (10342): gspca - stv06xx: Add ctrl caching to the vv6410.
+
+Erik S. Beiser (1):
+      V4L/DVB (10826): cx88: Add IR support to pcHDTV HD3000 & HD5500
+
+Guennadi Liakhovetski (9):
+      V4L/DVB (10665): soc-camera: add data signal polarity flags to drivers
+      V4L/DVB (10672): sh_mobile_ceu_camera: include NV* formats into the format list only once.
+      V4L/DVB (10673): mt9t031: fix gain and hflip controls, register update, and scaling
+      V4L/DVB (10674): soc-camera: camera host driver for i.MX3x SoCs
+      V4L/DVB (10675): soc-camera: extend soc_camera_bus_param_compatible with more tests
+      V4L/DVB (11024): soc-camera: separate S_FMT and S_CROP operations
+      V4L/DVB (11025): soc-camera: configure drivers with a default format on open
+      V4L/DVB (11026): sh-mobile-ceu-camera: set field to the value, configured at open()
+      V4L/DVB (11027): soc-camera: configure drivers with a default format at probe time
+
+Hans Verkuil (171):
+      V4L/DVB (10231): v4l2-subdev: add v4l2_ext_controls support
+      V4L/DVB (10244): v4l2: replace a few snprintfs with strlcpy
+      V4L/DVB (10246): saa6752hs: convert to v4l2_subdev.
+      V4L/DVB (10247): saa7134: convert to the new v4l2 framework.
+      V4L/DVB (10249): v4l2-common: added v4l2_i2c_tuner_addrs()
[...112825 lines suppressed...]
+-			if(copy_to_user(arg,&v, sizeof(v)))
+-				return -EFAULT;
++	}
++	return -EINVAL;
++}
++
++static int vidioc_g_ctrl(struct file *file, void *priv,
++					struct v4l2_control *ctrl)
++{
++	struct snd_tea575x *tea = video_drvdata(file);
++
++	switch (ctrl->id) {
++	case V4L2_CID_AUDIO_MUTE:
++		if (tea->ops->mute) {
++			ctrl->value = tea->mute;
+ 			return 0;
+ 		}
+-		case VIDIOCSAUDIO:
+-		{
+-			struct video_audio v;
+-			if(copy_from_user(&v, arg, sizeof(v)))
+-				return -EFAULT;
+-			if (tea->ops->mute)
+-				tea->ops->mute(tea,
+-					       (v.flags &
+-						VIDEO_AUDIO_MUTE) ? 1 : 0);
+-			if(v.audio)
+-				return -EINVAL;
++	}
++	return -EINVAL;
++}
++
++static int vidioc_s_ctrl(struct file *file, void *priv,
++					struct v4l2_control *ctrl)
++{
++	struct snd_tea575x *tea = video_drvdata(file);
++
++	switch (ctrl->id) {
++	case V4L2_CID_AUDIO_MUTE:
++		if (tea->ops->mute) {
++			tea->ops->mute(tea, ctrl->value);
++			tea->mute = 1;
+ 			return 0;
+ 		}
+-		default:
+-			return -ENOIOCTLCMD;
+ 	}
++	return -EINVAL;
++}
++
++static int vidioc_g_input(struct file *filp, void *priv, unsigned int *i)
++{
++	*i = 0;
++	return 0;
+ }
+ 
+-static void snd_tea575x_release(struct video_device *vfd)
++static int vidioc_s_input(struct file *filp, void *priv, unsigned int i)
+ {
++	if (i != 0)
++		return -EINVAL;
++	return 0;
+ }
+ 
+ static int snd_tea575x_exclusive_open(struct file *file)
+@@ -189,50 +260,91 @@ static int snd_tea575x_exclusive_release(struct file *file)
+ 	return 0;
+ }
+ 
++static const struct v4l2_file_operations tea575x_fops = {
++	.owner		= THIS_MODULE,
++	.open           = snd_tea575x_exclusive_open,
++	.release        = snd_tea575x_exclusive_release,
++	.ioctl		= video_ioctl2,
++};
++
++static const struct v4l2_ioctl_ops tea575x_ioctl_ops = {
++	.vidioc_querycap    = vidioc_querycap,
++	.vidioc_g_tuner     = vidioc_g_tuner,
++	.vidioc_s_tuner     = vidioc_s_tuner,
++	.vidioc_g_audio     = vidioc_g_audio,
++	.vidioc_s_audio     = vidioc_s_audio,
++	.vidioc_g_input     = vidioc_g_input,
++	.vidioc_s_input     = vidioc_s_input,
++	.vidioc_g_frequency = vidioc_g_frequency,
++	.vidioc_s_frequency = vidioc_s_frequency,
++	.vidioc_queryctrl   = vidioc_queryctrl,
++	.vidioc_g_ctrl      = vidioc_g_ctrl,
++	.vidioc_s_ctrl      = vidioc_s_ctrl,
++};
++
++static struct video_device tea575x_radio = {
++	.name           = "tea575x-tuner",
++	.fops           = &tea575x_fops,
++	.ioctl_ops 	= &tea575x_ioctl_ops,
++	.release	= video_device_release,
++};
++
+ /*
+  * initialize all the tea575x chips
+  */
+ void snd_tea575x_init(struct snd_tea575x *tea)
+ {
++	int retval;
+ 	unsigned int val;
++	struct video_device *tea575x_radio_inst;
+ 
+ 	val = tea->ops->read(tea);
+ 	if (val == 0x1ffffff || val == 0) {
+-		snd_printk(KERN_ERR "Cannot find TEA575x chip\n");
++		snd_printk(KERN_ERR
++			   "tea575x-tuner: Cannot find TEA575x chip\n");
+ 		return;
+ 	}
+ 
+-	memset(&tea->vd, 0, sizeof(tea->vd));
+-	strcpy(tea->vd.name, tea->tea5759 ? "TEA5759 radio" : "TEA5757 radio");
+-	tea->vd.release = snd_tea575x_release;
+-	video_set_drvdata(&tea->vd, tea);
+-	tea->vd.fops = &tea->fops;
+ 	tea->in_use = 0;
+-	tea->fops.owner = tea->card->module;
+-	tea->fops.open = snd_tea575x_exclusive_open;
+-	tea->fops.release = snd_tea575x_exclusive_release;
+-	tea->fops.ioctl = snd_tea575x_ioctl;
+-	if (video_register_device(&tea->vd, VFL_TYPE_RADIO, tea->dev_nr - 1) < 0) {
+-		snd_printk(KERN_ERR "unable to register tea575x tuner\n");
++	tea->val = TEA575X_BIT_BAND_FM | TEA575X_BIT_SEARCH_10_40;
++	tea->freq = 90500 * 16;		/* 90.5Mhz default */
++
++	tea575x_radio_inst = video_device_alloc();
++	if (tea575x_radio_inst == NULL) {
++		printk(KERN_ERR "tea575x-tuner: not enough memory\n");
+ 		return;
+ 	}
+-	tea->vd_registered = 1;
+ 
+-	tea->val = TEA575X_BIT_BAND_FM | TEA575X_BIT_SEARCH_10_40;
+-	tea->freq = 90500 * 16;		/* 90.5Mhz default */
++	memcpy(tea575x_radio_inst, &tea575x_radio, sizeof(tea575x_radio));
++
++	strcpy(tea575x_radio.name, tea->tea5759 ?
++				   "TEA5759 radio" : "TEA5757 radio");
++
++	video_set_drvdata(tea575x_radio_inst, tea);
++
++	retval = video_register_device(tea575x_radio_inst,
++				       VFL_TYPE_RADIO, radio_nr);
++	if (retval) {
++		printk(KERN_ERR "tea575x-tuner: can't register video device!\n");
++		kfree(tea575x_radio_inst);
++		return;
++	}
+ 
+ 	snd_tea575x_set_freq(tea);
+ 
+ 	/* mute on init */
+-	if (tea->ops->mute)
++	if (tea->ops->mute) {
+ 		tea->ops->mute(tea, 1);
++		tea->mute = 1;
++	}
++	tea->vd = tea575x_radio_inst;
+ }
+ 
+ void snd_tea575x_exit(struct snd_tea575x *tea)
+ {
+-	if (tea->vd_registered) {
+-		video_unregister_device(&tea->vd);
+-		tea->vd_registered = 0;
++	if (tea->vd) {
++		video_unregister_device(tea->vd);
++		tea->vd = NULL;
+ 	}
+ }
+ 
+diff --git a/sound/pci/Kconfig b/sound/pci/Kconfig
+index 82b9bdd..6cc18bf 100644
+--- a/sound/pci/Kconfig
++++ b/sound/pci/Kconfig
+@@ -487,7 +487,7 @@ config SND_FM801
+ config SND_FM801_TEA575X_BOOL
+ 	bool "ForteMedia FM801 + TEA5757 tuner"
+ 	depends on SND_FM801
+-	depends on VIDEO_V4L1=y || VIDEO_V4L1=SND_FM801
++	depends on VIDEO_V4L2=y || VIDEO_V4L2=SND_FM801
+ 	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)

linux-2.6-v4l-dvb-update.patch:
 smssdio.c |  354 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 354 insertions(+)

Index: linux-2.6-v4l-dvb-update.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-12/linux-2.6-v4l-dvb-update.patch,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -p -r1.15 -r1.16
--- linux-2.6-v4l-dvb-update.patch	12 Nov 2009 16:50:23 -0000	1.15
+++ linux-2.6-v4l-dvb-update.patch	4 Jan 2010 15:44:14 -0000	1.16
@@ -1 +1,366 @@
-empty
+Mauro Carvalho Chehab (1):
+      Merge branch 'next' of ../devel into Fedora
+
+Uri Shkolnik (1):
+      V4L/DVB (11241): Siano: SDIO interface driver - remove two redundant lines
+
+diff --git a/linux/drivers/media/dvb/siano/smssdio.c b/linux/drivers/media/dvb/siano/smssdio.c
+new file mode 100644
+index 0000000..4f8fa59
+--- /dev/null
++++ b/linux/drivers/media/dvb/siano/smssdio.c
+@@ -0,0 +1,354 @@
++/*
++ *  smssdio.c - Siano 1xxx SDIO interface driver
++ *
++ *  Copyright 2008 Pierre Ossman
++ *
++ * Based on code by Siano Mobile Silicon, Inc.,
++ * Copyright (C) 2006-2008, Uri Shkolnik
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or (at
++ * your option) any later version.
++ *
++ *
++ * This hardware is a bit odd in that all transfers should be done
++ * to/from the SMSSDIO_DATA register, yet the "increase address" bit
++ * always needs to be set.
++ *
++ * Also, buffers from the card are always aligned to 128 byte
++ * boundaries.
++ */
++
++/*
++ * General cleanup notes:
++ *
++ * - only typedefs should be name *_t
++ *
++ * - use ERR_PTR and friends for smscore_register_device()
++ *
++ * - smscore_getbuffer should zero fields
++ *
++ * Fix stop command
++ */
++
++#include <linux/moduleparam.h>
++#include <linux/firmware.h>
++#include <linux/delay.h>
++#include <linux/mmc/card.h>
++#include <linux/mmc/sdio_func.h>
++#include <linux/mmc/sdio_ids.h>
++
++#include "smscoreapi.h"
++#include "sms-cards.h"
++
++/* Registers */
++
++#define SMSSDIO_DATA		0x00
++#define SMSSDIO_INT		0x04
++
++static const struct sdio_device_id smssdio_ids[] = {
++	{SDIO_DEVICE(SDIO_VENDOR_ID_SIANO, SDIO_DEVICE_ID_SIANO_STELLAR),
++	 .driver_data = SMS1XXX_BOARD_SIANO_STELLAR},
++	{SDIO_DEVICE(SDIO_VENDOR_ID_SIANO, SDIO_DEVICE_ID_SIANO_NOVA_A0),
++	 .driver_data = SMS1XXX_BOARD_SIANO_NOVA_A},
++	{SDIO_DEVICE(SDIO_VENDOR_ID_SIANO, SDIO_DEVICE_ID_SIANO_NOVA_B0),
++	 .driver_data = SMS1XXX_BOARD_SIANO_NOVA_B},
++	{SDIO_DEVICE(SDIO_VENDOR_ID_SIANO, SDIO_DEVICE_ID_SIANO_VEGA_A0),
++	 .driver_data = SMS1XXX_BOARD_SIANO_VEGA},
++	{SDIO_DEVICE(SDIO_VENDOR_ID_SIANO, SDIO_DEVICE_ID_SIANO_VENICE),
++	 .driver_data = SMS1XXX_BOARD_SIANO_VEGA},
++	{ /* end: all zeroes */ },
++};
++
++MODULE_DEVICE_TABLE(sdio, smssdio_ids);
++
++struct smssdio_device {
++	struct sdio_func *func;
++
++	struct smscore_device_t *coredev;
++
++	struct smscore_buffer_t *split_cb;
++};
++
++/*******************************************************************/
++/* Siano core callbacks                                            */
++/*******************************************************************/
++
++static int smssdio_sendrequest(void *context, void *buffer, size_t size)
++{
++	int ret;
++	struct smssdio_device *smsdev;
++
++	smsdev = context;
++
++	sdio_claim_host(smsdev->func);
++
++	while (size >= smsdev->func->cur_blksize) {
++		ret = sdio_write_blocks(smsdev->func, SMSSDIO_DATA, buffer, 1);
++		if (ret)
++			goto out;
++
++		buffer += smsdev->func->cur_blksize;
++		size -= smsdev->func->cur_blksize;
++	}
++
++	if (size) {
++		ret = sdio_write_bytes(smsdev->func, SMSSDIO_DATA,
++				       buffer, size);
++	}
++
++out:
++	sdio_release_host(smsdev->func);
++
++	return ret;
++}
++
++/*******************************************************************/
++/* SDIO callbacks                                                  */
++/*******************************************************************/
++
++static void smssdio_interrupt(struct sdio_func *func)
++{
++	int ret, isr;
++
++	struct smssdio_device *smsdev;
++	struct smscore_buffer_t *cb;
++	struct SmsMsgHdr_ST *hdr;
++	size_t size;
++
++	smsdev = sdio_get_drvdata(func);
++
++	/*
++	 * The interrupt register has no defined meaning. It is just
++	 * a way of turning of the level triggered interrupt.
++	 */
++	isr = sdio_readb(func, SMSSDIO_INT, &ret);
++	if (ret) {
++		dev_err(&smsdev->func->dev,
++			"Unable to read interrupt register!\n");
++		return;
++	}
++
++	if (smsdev->split_cb == NULL) {
++		cb = smscore_getbuffer(smsdev->coredev);
++		if (!cb) {
++			dev_err(&smsdev->func->dev,
++				"Unable to allocate data buffer!\n");
++			return;
++		}
++
++		ret = sdio_read_blocks(smsdev->func, cb->p, SMSSDIO_DATA, 1);
++		if (ret) {
++			dev_err(&smsdev->func->dev,
++				"Error %d reading initial block!\n", ret);
++			return;
++		}
++
++		hdr = cb->p;
++
++		if (hdr->msgFlags & MSG_HDR_FLAG_SPLIT_MSG) {
++			smsdev->split_cb = cb;
++			return;
++		}
++
++		size = hdr->msgLength - smsdev->func->cur_blksize;
++	} else {
++		cb = smsdev->split_cb;
++		hdr = cb->p;
++
++		size = hdr->msgLength - sizeof(struct SmsMsgHdr_ST);
++
++		smsdev->split_cb = NULL;
++	}
++
++	if (hdr->msgLength > smsdev->func->cur_blksize) {
++		void *buffer;
++
++		size = ALIGN(size, 128);
++		buffer = cb->p + hdr->msgLength;
++
++		BUG_ON(smsdev->func->cur_blksize != 128);
++
++		/*
++		 * First attempt to transfer all of it in one go...
++		 */
++		ret = sdio_read_blocks(smsdev->func, buffer,
++				       SMSSDIO_DATA, size / 128);
++		if (ret && ret != -EINVAL) {
++			smscore_putbuffer(smsdev->coredev, cb);
++			dev_err(&smsdev->func->dev,
++				"Error %d reading data from card!\n", ret);
++			return;
++		}
++
++		/*
++		 * ..then fall back to one block at a time if that is
++		 * not possible...
++		 *
++		 * (we have to do this manually because of the
++		 * problem with the "increase address" bit)
++		 */
++		if (ret == -EINVAL) {
++			while (size) {
++				ret = sdio_read_blocks(smsdev->func,
++						       buffer, SMSSDIO_DATA, 1);
++				if (ret) {
++					smscore_putbuffer(smsdev->coredev, cb);
++					dev_err(&smsdev->func->dev,
++						"Error %d reading "
++						"data from card!\n", ret);
++					return;
++				}
++
++				buffer += smsdev->func->cur_blksize;
++				if (size > smsdev->func->cur_blksize)
++					size -= smsdev->func->cur_blksize;
++				else
++					size = 0;
++			}
++		}
++	}
++
++	cb->size = hdr->msgLength;
++	cb->offset = 0;
++
++	smscore_onresponse(smsdev->coredev, cb);
++}
++
++static int smssdio_probe(struct sdio_func *func,
++			 const struct sdio_device_id *id)
++{
++	int ret;
++
++	int board_id;
++	struct smssdio_device *smsdev;
++	struct smsdevice_params_t params;
++
++	board_id = id->driver_data;
++
++	smsdev = kzalloc(sizeof(struct smssdio_device), GFP_KERNEL);
++	if (!smsdev)
++		return -ENOMEM;
++
++	smsdev->func = func;
++
++	memset(&params, 0, sizeof(struct smsdevice_params_t));
++
++	params.device = &func->dev;
++	params.buffer_size = 0x5000;	/* ?? */
++	params.num_buffers = 22;	/* ?? */
++	params.context = smsdev;
++
++	snprintf(params.devpath, sizeof(params.devpath),
++		 "sdio\\%s", sdio_func_id(func));
++
++	params.sendrequest_handler = smssdio_sendrequest;
++
++	params.device_type = sms_get_board(board_id)->type;
++
++	if (params.device_type != SMS_STELLAR)
++		params.flags |= SMS_DEVICE_FAMILY2;
++	else {
++		/*
++		 * FIXME: Stellar needs special handling...
++		 */
++		ret = -ENODEV;
++		goto free;
++	}
++
++	ret = smscore_register_device(&params, &smsdev->coredev);
++	if (ret < 0)
++		goto free;
++
++	smscore_set_board_id(smsdev->coredev, board_id);
++
++	sdio_claim_host(func);
++
++	ret = sdio_enable_func(func);
++	if (ret)
++		goto release;
++
++	ret = sdio_set_block_size(func, 128);
++	if (ret)
++		goto disable;
++
++	ret = sdio_claim_irq(func, smssdio_interrupt);
++	if (ret)
++		goto disable;
++
++	sdio_set_drvdata(func, smsdev);
++
++	sdio_release_host(func);
++
++	ret = smscore_start_device(smsdev->coredev);
++	if (ret < 0)
++		goto reclaim;
++
++	return 0;
++
++reclaim:
++	sdio_claim_host(func);
++	sdio_release_irq(func);
++disable:
++	sdio_disable_func(func);
++release:
++	sdio_release_host(func);
++	smscore_unregister_device(smsdev->coredev);
++free:
++	kfree(smsdev);
++
++	return ret;
++}
++
++static void smssdio_remove(struct sdio_func *func)
++{
++	struct smssdio_device *smsdev;
++
++	smsdev = sdio_get_drvdata(func);
++
++	/* FIXME: racy! */
++	if (smsdev->split_cb)
++		smscore_putbuffer(smsdev->coredev, smsdev->split_cb);
++
++	smscore_unregister_device(smsdev->coredev);
++
++	sdio_claim_host(func);
++	sdio_release_irq(func);
++	sdio_disable_func(func);
++	sdio_release_host(func);
++
++	kfree(smsdev);
++}
++
++static struct sdio_driver smssdio_driver = {
++	.name = "smssdio",
++	.id_table = smssdio_ids,
++	.probe = smssdio_probe,
++	.remove = smssdio_remove,
++};
++
++/*******************************************************************/
++/* Module functions                                                */
++/*******************************************************************/
++
++int smssdio_register(void)
++{
++	int ret = 0;
++
++	printk(KERN_INFO "smssdio: Siano SMS1xxx SDIO driver\n");
++	printk(KERN_INFO "smssdio: Copyright Pierre Ossman\n");
++
++	ret = sdio_register_driver(&smssdio_driver);
++
++	return ret;
++}
++
++void smssdio_unregister(void)
++{
++	sdio_unregister_driver(&smssdio_driver);
++}
++
++MODULE_DESCRIPTION("Siano SMS1xxx SDIO driver");
++MODULE_AUTHOR("Pierre Ossman");
++MODULE_LICENSE("GPL");


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-12/sources,v
retrieving revision 1.1094
retrieving revision 1.1095
diff -u -p -r1.1094 -r1.1095
--- sources	19 Dec 2009 03:06:00 -0000	1.1094
+++ sources	4 Jan 2010 15:44:16 -0000	1.1095
@@ -1,2 +1,2 @@
-84c077a37684e4cbfa67b18154390d8a  linux-2.6.31.tar.bz2
-819f1552906be755b53154fd570866eb  patch-2.6.31.9.bz2
+260551284ac224c3a43c4adac7df4879  linux-2.6.32.tar.bz2
+924b7aa0fcd6e54c12ecc9b3c3082f59  patch-2.6.32.2.bz2


Index: upstream
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-12/upstream,v
retrieving revision 1.1008
retrieving revision 1.1009
diff -u -p -r1.1008 -r1.1009
--- upstream	19 Dec 2009 03:06:00 -0000	1.1008
+++ upstream	4 Jan 2010 15:44:17 -0000	1.1009
@@ -1,2 +1,2 @@
-linux-2.6.31.tar.bz2
-patch-2.6.31.9.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-12/via-hwmon-temp-sensor.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- via-hwmon-temp-sensor.patch	19 Jun 2009 21:49:01 -0000	1.3
+++ via-hwmon-temp-sensor.patch	4 Jan 2010 15:44:17 -0000	1.4
@@ -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 tmp401.
+ 	  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_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 ---


--- alsa-tell-user-that-stream-to-be-rewound-is-suspended.patch DELETED ---


--- branch DELETED ---


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


--- dlm-fix-connection-close-handling.patch DELETED ---


--- drm-edid-9340d8cf.patch DELETED ---


--- drm-i915-fix-tvmode-oops.patch DELETED ---


--- drm-intel-no-tv-hotplug.patch DELETED ---


--- drm-next-b390f944.patch DELETED ---


--- drm-radeon-kms-arbiter-return-ignore.patch DELETED ---


--- drm-radeon-misc-fixes.patch DELETED ---


--- drm-radeon-rv410-test-fix.patch DELETED ---


--- drm-vga-arb.patch DELETED ---


--- fbcon-lower-debug.patch DELETED ---


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


--- improve-resource-counter-scalability.patch DELETED ---


--- kms-offb-handoff.patch DELETED ---


--- linux-2.6-ahci-export-capabilities.patch DELETED ---


--- linux-2.6-alsa-improve-hda-powerdown.patch DELETED ---


--- linux-2.6-ath9k-fixes.patch DELETED ---


--- linux-2.6-bluetooth-autosuspend.diff DELETED ---


--- linux-2.6-btrfs-upstream.patch DELETED ---


--- linux-2.6-die-closed-source-bios-muppets-die.patch DELETED ---


--- linux-2.6-intel-iommu-updates.patch DELETED ---


--- linux-2.6-iommu-another-hp-screwup.patch DELETED ---


--- linux-2.6-iommu-at-zero.patch DELETED ---


--- linux-2.6-iommu-dmar-all-1s.patch DELETED ---


--- linux-2.6-iommu-hp-cantiga-resume.patch DELETED ---


--- linux-2.6-iommu-sanity-checks-for-intr-remap-too.patch DELETED ---


--- linux-2.6-ksm-fix-munlock.patch DELETED ---


--- linux-2.6-ksm-updates-from-32.patch DELETED ---


--- linux-2.6-ksm-updates.patch DELETED ---


--- linux-2.6-ksm.patch DELETED ---


--- linux-2.6-nfs4-ver4opt.patch DELETED ---


--- linux-2.6-rtc-show-hctosys.patch DELETED ---


--- linux-2.6-selinux-module-load-perms.patch DELETED ---


--- linux-2.6-vga-arb.patch DELETED ---


--- linux-2.6-virtio_blk-add-support-for-cache-flush.patch DELETED ---


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


--- linux-2.6-xen-fix-is_disconnected_device-exists_disconnected_device.patch DELETED ---


--- linux-2.6-xen-improvement-to-wait_for_devices.patch DELETED ---


--- linux-2.6-xen-increase-device-connection-timeout.patch DELETED ---


--- linux-2.6.31-copy_from_user-bounds.patch DELETED ---


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


--- linux-2.6.31-nfsd-proot.patch DELETED ---


--- linux-2.6.31.tar.bz2.sign DELETED ---


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


--- patch-2.6.31.9.bz2.sign DELETED ---


--- perf-events-dont-generate-events-for-the-idle-task.patch DELETED ---


--- perf-events-fix-swevent-hrtimer-sampling.patch DELETED ---


--- perf-make-perf-counter-h-available-to-userspace.patch DELETED ---


--- prism54-remove-pci-dev-table.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-introduce-SCHED_RESET_ON_FORK-scheduling-policy-flag.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 ---


--- tg3-01-delay-mdio-bus-init-until-fw-finishes.patch DELETED ---


--- tg3-02-fix-tso-test-against-wrong-flags-var.patch DELETED ---


--- tg3-03-fix-57780-asic-rev-pcie-link-receiver-errors.patch DELETED ---


--- tg3-04-prevent-tx-bd-corruption.patch DELETED ---


--- tg3-05-assign-flags-to-fixes-in-start_xmit_dma_bug.patch DELETED ---


--- tg3-06-fix-5906-transmit-hangs.patch DELETED ---




More information about the fedora-extras-commits mailing list