]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
start 2.6.31.7 review cycle
authorGreg Kroah-Hartman <gregkh@suse.de>
Mon, 7 Dec 2009 00:29:15 +0000 (16:29 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 7 Dec 2009 00:29:15 +0000 (16:29 -0800)
121 files changed:
review-2.6.31/acenic-pass-up-error-code-from-ace_load_firmware.patch [moved from queue-2.6.31/acenic-pass-up-error-code-from-ace_load_firmware.patch with 100% similarity]
review-2.6.31/acerhdf-additional-bios-versions.patch [moved from queue-2.6.31/acerhdf-additional-bios-versions.patch with 100% similarity]
review-2.6.31/acerhdf-fix-fan-control-for-aoa150-model.patch [moved from queue-2.6.31/acerhdf-fix-fan-control-for-aoa150-model.patch with 100% similarity]
review-2.6.31/acerhdf-return-temperature-in-milidegree-instead-of-degree.patch [moved from queue-2.6.31/acerhdf-return-temperature-in-milidegree-instead-of-degree.patch with 100% similarity]
review-2.6.31/agp-intel-new-host-bridge-support.patch [moved from queue-2.6.31/agp-intel-new-host-bridge-support.patch with 100% similarity]
review-2.6.31/alsa-aaci-fix-ac97-multiple-open-bug.patch [moved from queue-2.6.31/alsa-aaci-fix-ac97-multiple-open-bug.patch with 100% similarity]
review-2.6.31/alsa-aaci-fix-recording-bug.patch [moved from queue-2.6.31/alsa-aaci-fix-recording-bug.patch with 100% similarity]
review-2.6.31/alsa-hda-dell-studio-1557-hd-audio-quirk.patch [moved from queue-2.6.31/alsa-hda-dell-studio-1557-hd-audio-quirk.patch with 100% similarity]
review-2.6.31/alsa-usb-audio-fix-combine_word-problem.patch [moved from queue-2.6.31/alsa-usb-audio-fix-combine_word-problem.patch with 100% similarity]
review-2.6.31/asoc-aic23-fixing-infinite-loop-in-resume-path.patch [moved from queue-2.6.31/asoc-aic23-fixing-infinite-loop-in-resume-path.patch with 100% similarity]
review-2.6.31/asoc-fix-suspend-with-active-audio-streams.patch [moved from queue-2.6.31/asoc-fix-suspend-with-active-audio-streams.patch with 100% similarity]
review-2.6.31/ath5k-linear-pcdac-code-fixes.patch [moved from queue-2.6.31/ath5k-linear-pcdac-code-fixes.patch with 100% similarity]
review-2.6.31/b43-fix-dma-tx-bounce-buffer-copying.patch [moved from queue-2.6.31/b43-fix-dma-tx-bounce-buffer-copying.patch with 100% similarity]
review-2.6.31/b43-work-around-mac80211-race-condition.patch [moved from queue-2.6.31/b43-work-around-mac80211-race-condition.patch with 100% similarity]
review-2.6.31/block-use-after-free-bug-in-__blkdev_get.patch [moved from queue-2.6.31/block-use-after-free-bug-in-__blkdev_get.patch with 100% similarity]
review-2.6.31/bonding-modify-hash-transmit-policies-to-use-the-packet-s-source-mac-address.patch [moved from queue-2.6.31/bonding-modify-hash-transmit-policies-to-use-the-packet-s-source-mac-address.patch with 100% similarity]
review-2.6.31/cifs-clean-up-handling-when-server-doesn-t-consistently-support-inode-numbers.patch [moved from queue-2.6.31/cifs-clean-up-handling-when-server-doesn-t-consistently-support-inode-numbers.patch with 100% similarity]
review-2.6.31/cifs-clear-server-inode-number-flag-while-autodisabling.patch [moved from queue-2.6.31/cifs-clear-server-inode-number-flag-while-autodisabling.patch with 100% similarity]
review-2.6.31/cifs-don-t-use-cifsgetsrvinodenumber-in-is_path_accessible.patch [moved from queue-2.6.31/cifs-don-t-use-cifsgetsrvinodenumber-in-is_path_accessible.patch with 100% similarity]
review-2.6.31/cifs-duplicate-data-on-appending-to-some-samba-servers.patch [moved from queue-2.6.31/cifs-duplicate-data-on-appending-to-some-samba-servers.patch with 100% similarity]
review-2.6.31/cifs-fix-oops-in-cifs_lookup-during-net-boot.patch [moved from queue-2.6.31/cifs-fix-oops-in-cifs_lookup-during-net-boot.patch with 100% similarity]
review-2.6.31/crypto-padlock-aes-use-the-correct-mask-when-checking-whether-copying-is-required.patch [moved from queue-2.6.31/crypto-padlock-aes-use-the-correct-mask-when-checking-whether-copying-is-required.patch with 100% similarity]
review-2.6.31/drm-fb-fix-fbioget-put_vscreeninfo-pixel-clock-handling.patch [moved from queue-2.6.31/drm-fb-fix-fbioget-put_vscreeninfo-pixel-clock-handling.patch with 100% similarity]
review-2.6.31/drm-i915-fix-irq-stall-issue-on-ironlake.patch [moved from queue-2.6.31/drm-i915-fix-irq-stall-issue-on-ironlake.patch with 100% similarity]
review-2.6.31/drm-i915-select-config_shmem.patch [moved from queue-2.6.31/drm-i915-select-config_shmem.patch with 100% similarity]
review-2.6.31/drm-work-around-edids-with-bad-htotal-vtotal-values.patch [moved from queue-2.6.31/drm-work-around-edids-with-bad-htotal-vtotal-values.patch with 100% similarity]
review-2.6.31/enable-acpi-pdc-handshake-for-via-centaur-cpus.patch [moved from queue-2.6.31/enable-acpi-pdc-handshake-for-via-centaur-cpus.patch with 100% similarity]
review-2.6.31/fs-add-missing-compat_ptr-handling-for-fs_ioc_resvsp-ioctl.patch [moved from queue-2.6.31/fs-add-missing-compat_ptr-handling-for-fs_ioc_resvsp-ioctl.patch with 100% similarity]
review-2.6.31/fuse-reject-o_direct-flag-also-in-fuse_create.patch [moved from queue-2.6.31/fuse-reject-o_direct-flag-also-in-fuse_create.patch with 100% similarity]
review-2.6.31/gdth-prevent-negative-offsets-in-ioctl-cve-2009-3080.patch [moved from queue-2.6.31/gdth-prevent-negative-offsets-in-ioctl-cve-2009-3080.patch with 100% similarity]
review-2.6.31/highmem-fix-debug_kmap_atomic-to-also-handle-km_irq_pte-km_nmi-and-km_nmi_pte.patch [moved from queue-2.6.31/highmem-fix-debug_kmap_atomic-to-also-handle-km_irq_pte-km_nmi-and-km_nmi_pte.patch with 100% similarity]
review-2.6.31/highmem-fix-race-in-debug_kmap_atomic-which-could-cause-warn_count-to-underflow.patch [moved from queue-2.6.31/highmem-fix-race-in-debug_kmap_atomic-which-could-cause-warn_count-to-underflow.patch with 100% similarity]
review-2.6.31/hso-fix-soft-lockup.patch [moved from queue-2.6.31/hso-fix-soft-lockup.patch with 100% similarity]
review-2.6.31/hwmon-adt7475-cache-limits-for-60-seconds.patch [moved from queue-2.6.31/hwmon-adt7475-cache-limits-for-60-seconds.patch with 100% similarity]
review-2.6.31/hwmon-adt7475-fix-temperature-fault-flags.patch [moved from queue-2.6.31/hwmon-adt7475-fix-temperature-fault-flags.patch with 100% similarity]
review-2.6.31/i2c-fix-userspace_device-list-corruption.patch [moved from queue-2.6.31/i2c-fix-userspace_device-list-corruption.patch with 100% similarity]
review-2.6.31/ima-replace-gfp_kernel-with-gfp_nofs.patch [moved from queue-2.6.31/ima-replace-gfp_kernel-with-gfp_nofs.patch with 100% similarity]
review-2.6.31/input-keyboard-fix-braille-keyboard-keysym-generation.patch [moved from queue-2.6.31/input-keyboard-fix-braille-keyboard-keysym-generation.patch with 100% similarity]
review-2.6.31/ipv4-additional-update-of-dev_net-dev-to-struct-net-in-ip_fragment.c-null-ptr-oops.patch [moved from queue-2.6.31/ipv4-additional-update-of-dev_net-dev-to-struct-net-in-ip_fragment.c-null-ptr-oops.patch with 100% similarity]
review-2.6.31/isdn-hfc_usb-fix-read-buffer-overflow.patch [moved from queue-2.6.31/isdn-hfc_usb-fix-read-buffer-overflow.patch with 100% similarity]
review-2.6.31/iwlwifi-fix-issue-on-file-transfer-stalled-in-ht-mode.patch [moved from queue-2.6.31/iwlwifi-fix-issue-on-file-transfer-stalled-in-ht-mode.patch with 100% similarity]
review-2.6.31/iwlwifi-use-rts-cts-as-the-preferred-protection-mechanism-for-6000-series.patch [moved from queue-2.6.31/iwlwifi-use-rts-cts-as-the-preferred-protection-mechanism-for-6000-series.patch with 100% similarity]
review-2.6.31/jffs2-fix-memory-corruption-in-jffs2_read_inode_range.patch [moved from queue-2.6.31/jffs2-fix-memory-corruption-in-jffs2_read_inode_range.patch with 100% similarity]
review-2.6.31/mac80211-fix-spurious-delba-handling.patch [moved from queue-2.6.31/mac80211-fix-spurious-delba-handling.patch with 100% similarity]
review-2.6.31/mac80211-fix-two-remote-exploits.patch [moved from queue-2.6.31/mac80211-fix-two-remote-exploits.patch with 100% similarity]
review-2.6.31/mbox [new file with mode: 0644]
review-2.6.31/md-don-t-clear-endpoint-for-resync-when-resync-is-interrupted.patch [moved from queue-2.6.31/md-don-t-clear-endpoint-for-resync-when-resync-is-interrupted.patch with 100% similarity]
review-2.6.31/md-raid1-raid10-add-a-cond_resched.patch [moved from queue-2.6.31/md-raid1-raid10-add-a-cond_resched.patch with 100% similarity]
review-2.6.31/md-raid5-make-sure-curr_sync_completes-is-uptodate-when-reshape-starts.patch [moved from queue-2.6.31/md-raid5-make-sure-curr_sync_completes-is-uptodate-when-reshape-starts.patch with 100% similarity]
review-2.6.31/md-revert-incorrect-fix-for-read-error-handling-in-raid1.patch [moved from queue-2.6.31/md-revert-incorrect-fix-for-read-error-handling-in-raid1.patch with 100% similarity]
review-2.6.31/memcg-fix-wrong-pointer-initialization-at-page-migration-when-memcg-is-disabled.patch [moved from queue-2.6.31/memcg-fix-wrong-pointer-initialization-at-page-migration-when-memcg-is-disabled.patch with 100% similarity]
review-2.6.31/modules-don-t-export-section-names-of-empty-sections-via-sysfs.patch [moved from queue-2.6.31/modules-don-t-export-section-names-of-empty-sections-via-sysfs.patch with 100% similarity]
review-2.6.31/net-fix-sk_forward_alloc-corruption.patch [moved from queue-2.6.31/net-fix-sk_forward_alloc-corruption.patch with 100% similarity]
review-2.6.31/netfilter-nf_nat-fix-nat-issue-in-2.6.30.4.patch [moved from queue-2.6.31/netfilter-nf_nat-fix-nat-issue-in-2.6.30.4.patch with 100% similarity]
review-2.6.31/netfilter-xt_connlimit-fix-regression-caused-by-zero-family-value.patch [moved from queue-2.6.31/netfilter-xt_connlimit-fix-regression-caused-by-zero-family-value.patch with 100% similarity]
review-2.6.31/nfsv4-fix-a-cache-validation-bug-which-causes-getcwd-to-return-enoent.patch [moved from queue-2.6.31/nfsv4-fix-a-cache-validation-bug-which-causes-getcwd-to-return-enoent.patch with 100% similarity]
review-2.6.31/nilfs2-fix-kernel-oops-in-error-case-of-nilfs_ioctl_move_blocks.patch [moved from queue-2.6.31/nilfs2-fix-kernel-oops-in-error-case-of-nilfs_ioctl_move_blocks.patch with 100% similarity]
review-2.6.31/page-allocator-always-wake-kswapd-when-restarting-an-allocation-attempt-after-direct-reclaim-failed.patch [moved from queue-2.6.31/page-allocator-always-wake-kswapd-when-restarting-an-allocation-attempt-after-direct-reclaim-failed.patch with 100% similarity]
review-2.6.31/page-allocator-do-not-allow-interrupts-to-use-alloc_harder.patch [moved from queue-2.6.31/page-allocator-do-not-allow-interrupts-to-use-alloc_harder.patch with 100% similarity]
review-2.6.31/param-don-t-complain-about-unused-module-parameters.patch [moved from queue-2.6.31/param-don-t-complain-about-unused-module-parameters.patch with 100% similarity]
review-2.6.31/pci-prevent-aer-driver-from-being-loaded-on-non-root-port-pcie-devices.patch [moved from queue-2.6.31/pci-prevent-aer-driver-from-being-loaded-on-non-root-port-pcie-devices.patch with 100% similarity]
review-2.6.31/perf_event-adjust-frequency-and-unthrottle-for-non-group-leader-events.patch [moved from queue-2.6.31/perf_event-adjust-frequency-and-unthrottle-for-non-group-leader-events.patch with 100% similarity]
review-2.6.31/pidns-fix-a-leak-in-proc-dentries-and-inodes-with-pid-namespaces.patch [moved from queue-2.6.31/pidns-fix-a-leak-in-proc-dentries-and-inodes-with-pid-namespaces.patch with 100% similarity]
review-2.6.31/pkt_sched-pedit-use-proper-struct.patch [moved from queue-2.6.31/pkt_sched-pedit-use-proper-struct.patch with 100% similarity]
review-2.6.31/pps-events-reporting-fix-up.patch [moved from queue-2.6.31/pps-events-reporting-fix-up.patch with 100% similarity]
review-2.6.31/pps-locking-scheme-fix-up-for-pps_getparams.patch [moved from queue-2.6.31/pps-locking-scheme-fix-up-for-pps_getparams.patch with 100% similarity]
review-2.6.31/pxamci-call-mmc_remove_host-before-freeing-resources.patch [moved from queue-2.6.31/pxamci-call-mmc_remove_host-before-freeing-resources.patch with 100% similarity]
review-2.6.31/rfkill-fix-miscdev-ops.patch [moved from queue-2.6.31/rfkill-fix-miscdev-ops.patch with 100% similarity]
review-2.6.31/rtc-v3020-fix-v3020_mmio_read_bit.patch [moved from queue-2.6.31/rtc-v3020-fix-v3020_mmio_read_bit.patch with 100% similarity]
review-2.6.31/rtl8187-fix-kernel-oops-when-device-is-removed-when-leds-enabled.patch [moved from queue-2.6.31/rtl8187-fix-kernel-oops-when-device-is-removed-when-leds-enabled.patch with 100% similarity]
review-2.6.31/sched-fix-boot-crash-by-zalloc-ing-most-of-the-cpu-masks.patch [moved from queue-2.6.31/sched-fix-boot-crash-by-zalloc-ing-most-of-the-cpu-masks.patch with 100% similarity]
review-2.6.31/series [moved from queue-2.6.31/series with 100% similarity]
review-2.6.31/sfc-set-ip_summed-correctly-for-page-buffers-passed-to-gro.patch [moved from queue-2.6.31/sfc-set-ip_summed-correctly-for-page-buffers-passed-to-gro.patch with 100% similarity]
review-2.6.31/sky2-set-carrier-off-in-probe.patch [moved from queue-2.6.31/sky2-set-carrier-off-in-probe.patch with 100% similarity]
review-2.6.31/sound-rawmidi-disable-active-sensing-on-close-by-default.patch [moved from queue-2.6.31/sound-rawmidi-disable-active-sensing-on-close-by-default.patch with 100% similarity]
review-2.6.31/sound-rawmidi-fix-checking-of-o_append-when-opening-midi-device.patch [moved from queue-2.6.31/sound-rawmidi-fix-checking-of-o_append-when-opening-midi-device.patch with 100% similarity]
review-2.6.31/sound-rawmidi-fix-double-init-when-opening-midi-device-with-o_append.patch [moved from queue-2.6.31/sound-rawmidi-fix-double-init-when-opening-midi-device-with-o_append.patch with 100% similarity]
review-2.6.31/sound-rawmidi-fix-midi-device-o_append-error-handling.patch [moved from queue-2.6.31/sound-rawmidi-fix-midi-device-o_append-error-handling.patch with 100% similarity]
review-2.6.31/sparc-move-of_set_property_mutex-acquisition-outside-of-devtree_lock-grab.patch [moved from queue-2.6.31/sparc-move-of_set_property_mutex-acquisition-outside-of-devtree_lock-grab.patch with 100% similarity]
review-2.6.31/sparc64-replace-parentheses-in-pmul.patch [moved from queue-2.6.31/sparc64-replace-parentheses-in-pmul.patch with 100% similarity]
review-2.6.31/speedstep-ich-fix-error-caused-by-394122ab144dae4b276d74644a2f11c44a60ac5c.patch [moved from queue-2.6.31/speedstep-ich-fix-error-caused-by-394122ab144dae4b276d74644a2f11c44a60ac5c.patch with 100% similarity]
review-2.6.31/thinkpad-acpi-fix-sign-of-erestartsys-return.patch [moved from queue-2.6.31/thinkpad-acpi-fix-sign-of-erestartsys-return.patch with 100% similarity]
review-2.6.31/tty-cp210x-fix-carrier-handling.patch [moved from queue-2.6.31/tty-cp210x-fix-carrier-handling.patch with 100% similarity]
review-2.6.31/tty-of_serial-add-missing-ns16550a-id.patch [moved from queue-2.6.31/tty-of_serial-add-missing-ns16550a-id.patch with 100% similarity]
review-2.6.31/tty_port-handle-the-nonblocking-open-of-a-dead-port-corner-case.patch [moved from queue-2.6.31/tty_port-handle-the-nonblocking-open-of-a-dead-port-corner-case.patch with 100% similarity]
review-2.6.31/tty_port-if-we-are-opened-non-blocking-we-still-need-to-raise-the-carrier.patch [moved from queue-2.6.31/tty_port-if-we-are-opened-non-blocking-we-still-need-to-raise-the-carrier.patch with 100% similarity]
review-2.6.31/udp-fix-udp_poll-and-ioctl.patch [moved from queue-2.6.31/udp-fix-udp_poll-and-ioctl.patch with 100% similarity]
review-2.6.31/uids-prevent-tear-down-race.patch [moved from queue-2.6.31/uids-prevent-tear-down-race.patch with 100% similarity]
review-2.6.31/usb-amd5536udc-fixed-shared-interrupt-bug-and-warning-oops.patch [moved from queue-2.6.31/usb-amd5536udc-fixed-shared-interrupt-bug-and-warning-oops.patch with 100% similarity]
review-2.6.31/usb-cdc_acm-fix-race-condition-when-opening-tty.patch [moved from queue-2.6.31/usb-cdc_acm-fix-race-condition-when-opening-tty.patch with 100% similarity]
review-2.6.31/usb-ehci-don-t-send-clear-tt-buffer-following-a-stall.patch [moved from queue-2.6.31/usb-ehci-don-t-send-clear-tt-buffer-following-a-stall.patch with 100% similarity]
review-2.6.31/usb-ftdi_sio-keep-going-when-write-errors-are-encountered.patch [moved from queue-2.6.31/usb-ftdi_sio-keep-going-when-write-errors-are-encountered.patch with 100% similarity]
review-2.6.31/usb-musb_gadget-fix-stall-handling.patch [moved from queue-2.6.31/usb-musb_gadget-fix-stall-handling.patch with 100% similarity]
review-2.6.31/usb-ohci-quirk-amd-prefetch-for-usb-1.1-iso-transfer.patch [moved from queue-2.6.31/usb-ohci-quirk-amd-prefetch-for-usb-1.1-iso-transfer.patch with 100% similarity]
review-2.6.31/usb-option.c-add-support-for-d-link-dwm-162-u5.patch [moved from queue-2.6.31/usb-option.c-add-support-for-d-link-dwm-162-u5.patch with 100% similarity]
review-2.6.31/usb-usbmon-fix-bug-in-mon_buff_area_shrink.patch [moved from queue-2.6.31/usb-usbmon-fix-bug-in-mon_buff_area_shrink.patch with 100% similarity]
review-2.6.31/usb-work-around-for-ehci-with-quirky-periodic-schedules.patch [moved from queue-2.6.31/usb-work-around-for-ehci-with-quirky-periodic-schedules.patch with 100% similarity]
review-2.6.31/usb-xhci-fix-bug-memory-free-after-failed-initialization.patch [moved from queue-2.6.31/usb-xhci-fix-bug-memory-free-after-failed-initialization.patch with 100% similarity]
review-2.6.31/usb-xhci-fix-scratchpad-deallocation.patch [moved from queue-2.6.31/usb-xhci-fix-scratchpad-deallocation.patch with 100% similarity]
review-2.6.31/usb-xhci-fix-trb-physical-to-virtual-address-translation.patch [moved from queue-2.6.31/usb-xhci-fix-trb-physical-to-virtual-address-translation.patch with 100% similarity]
review-2.6.31/v4l-dvb-12280-gspca-sonixj-remove-auto-gain-wb-expo-for-the-ov7660-sensor.patch [moved from queue-2.6.31/v4l-dvb-12280-gspca-sonixj-remove-auto-gain-wb-expo-for-the-ov7660-sensor.patch with 100% similarity]
review-2.6.31/v4l-dvb-12356-gspca-sonixj-webcam-0c45-6148-added.patch [moved from queue-2.6.31/v4l-dvb-12356-gspca-sonixj-webcam-0c45-6148-added.patch with 100% similarity]
review-2.6.31/v4l-dvb-12501-gspca-sonixj-do-the-ov7660-sensor-work-again.patch [moved from queue-2.6.31/v4l-dvb-12501-gspca-sonixj-do-the-ov7660-sensor-work-again.patch with 100% similarity]
review-2.6.31/v4l-dvb-12691-gspca-sonixj-don-t-use-mdelay.patch [moved from queue-2.6.31/v4l-dvb-12691-gspca-sonixj-don-t-use-mdelay.patch with 100% similarity]
review-2.6.31/v4l-dvb-12696-gspca-sonixj-sn9c102-two-drivers-for-0c45-60fc-and-0c45-613e.patch [moved from queue-2.6.31/v4l-dvb-12696-gspca-sonixj-sn9c102-two-drivers-for-0c45-60fc-and-0c45-613e.patch with 100% similarity]
review-2.6.31/v4l-dvb-12948-v4l1-compat-fix-vidioc_g_std-handling.patch [moved from queue-2.6.31/v4l-dvb-12948-v4l1-compat-fix-vidioc_g_std-handling.patch with 100% similarity]
review-2.6.31/v4l-dvb-13079-dib0700-fixed-xc2028-firmware-loading-kernel-oops.patch [moved from queue-2.6.31/v4l-dvb-13079-dib0700-fixed-xc2028-firmware-loading-kernel-oops.patch with 100% similarity]
review-2.6.31/v4l-dvb-13107-tda18271-fix-overflow-in-fm-radio-frequency-calculation.patch [moved from queue-2.6.31/v4l-dvb-13107-tda18271-fix-overflow-in-fm-radio-frequency-calculation.patch with 100% similarity]
review-2.6.31/v4l-dvb-13109-tda18271-fix-signedness-issue-in-tda18271_rf_tracking_filters_init.patch [moved from queue-2.6.31/v4l-dvb-13109-tda18271-fix-signedness-issue-in-tda18271_rf_tracking_filters_init.patch with 100% similarity]
review-2.6.31/v4l-dvb-13169-bttv-fix-potential-out-of-order-field-processing.patch [moved from queue-2.6.31/v4l-dvb-13169-bttv-fix-potential-out-of-order-field-processing.patch with 100% similarity]
review-2.6.31/v4l-dvb-13170-bttv-fix-reversed-polarity-error-when-switching-video-standard.patch [moved from queue-2.6.31/v4l-dvb-13170-bttv-fix-reversed-polarity-error-when-switching-video-standard.patch with 100% similarity]
review-2.6.31/v4l-dvb-13190-em28xx-fix-panic-that-can-occur-when-starting-audio-streaming.patch [moved from queue-2.6.31/v4l-dvb-13190-em28xx-fix-panic-that-can-occur-when-starting-audio-streaming.patch with 100% similarity]
review-2.6.31/v4l-dvb-13202-smsusb-add-autodetection-support-for-three-additional-hauppauge-usb-ids.patch [moved from queue-2.6.31/v4l-dvb-13202-smsusb-add-autodetection-support-for-three-additional-hauppauge-usb-ids.patch with 100% similarity]
review-2.6.31/v4l-dvb-13230-s2255drv-don-t-conditionalize-video-buffer-completion-on-waiting-processes.patch [moved from queue-2.6.31/v4l-dvb-13230-s2255drv-don-t-conditionalize-video-buffer-completion-on-waiting-processes.patch with 100% similarity]
review-2.6.31/v4l-dvb-13255-gspca-m5602-s5k4aa-add-vflip-quirk-for-the-bruneinit-laptop.patch [moved from queue-2.6.31/v4l-dvb-13255-gspca-m5602-s5k4aa-add-vflip-quirk-for-the-bruneinit-laptop.patch with 100% similarity]
review-2.6.31/v4l-dvb-13256-gspca-m5602-s5k4aa-add-another-msi-gx700-vflip-quirk.patch [moved from queue-2.6.31/v4l-dvb-13256-gspca-m5602-s5k4aa-add-another-msi-gx700-vflip-quirk.patch with 100% similarity]
review-2.6.31/v4l-dvb-13257-gspca-m5602-s5k4aa-add-vflip-for-fujitsu-amilo-xi-2528.patch [moved from queue-2.6.31/v4l-dvb-13257-gspca-m5602-s5k4aa-add-vflip-for-fujitsu-amilo-xi-2528.patch with 100% similarity]
review-2.6.31/v4l-dvb-13313-saa7134-add-support-for-force_ts_valid-mode-for-mpeg-ts-input.patch [moved from queue-2.6.31/v4l-dvb-13313-saa7134-add-support-for-force_ts_valid-mode-for-mpeg-ts-input.patch with 100% similarity]
review-2.6.31/v4l-dvb-13314-saa7134-set-ts_force_val-for-the-hauppauge-wintv-hvr-1150.patch [moved from queue-2.6.31/v4l-dvb-13314-saa7134-set-ts_force_val-for-the-hauppauge-wintv-hvr-1150.patch with 100% similarity]
review-2.6.31/v4l-dvb-13321-radio-gemtek-pci-fix-double-mutex_lock.patch [moved from queue-2.6.31/v4l-dvb-13321-radio-gemtek-pci-fix-double-mutex_lock.patch with 100% similarity]
review-2.6.31/v4l-dvb-13436-cxusb-fix-hang-on-dvico-fusionhdtv-dvb-t-dual-digital-4-rev-1.patch [moved from queue-2.6.31/v4l-dvb-13436-cxusb-fix-hang-on-dvico-fusionhdtv-dvb-t-dual-digital-4-rev-1.patch with 100% similarity]

diff --git a/review-2.6.31/mbox b/review-2.6.31/mbox
new file mode 100644 (file)
index 0000000..4887642
--- /dev/null
@@ -0,0 +1,9700 @@
+From gregkh@mini.kroah.org Sun Dec  6 16:06:40 2009
+Message-Id: <20091207000640.857498164@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:37 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
+Subject: [001/119] nilfs2: fix kernel oops in error case of nilfs_ioctl_move_blocks
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=nilfs2-fix-kernel-oops-in-error-case-of-nilfs_ioctl_move_blocks.patch
+Content-Length: 2957
+Lines: 86
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
+
+commit 5399dd1fc8f5e812db931225ef5f67d89f3b1a56 upstream.
+
+This fixes a kernel oops reported by Markus Trippelsdorf in the email
+titled "[NILFS users] kernel Oops while running nilfs_cleanerd".
+
+The oops was caused by a bug of error path in
+nilfs_ioctl_move_blocks() function, which was inlined in
+nilfs_ioctl_clean_segments().
+
+nilfs_ioctl_move_blocks checks duplication of blocks which will be
+moved in garbage collection.  But, the check should have be done
+within nilfs_ioctl_move_inode_block() to prevent list corruption among
+buffers storing the target blocks.
+
+To fix the kernel oops, this moves forward the duplication check
+before the list insertion.
+
+I also tested this for stable trees [2.6.30, 2.6.31].
+
+Reported-by: Markus Trippelsdorf <markus@trippelsdorf.de>
+Signed-off-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/nilfs2/ioctl.c |   30 +++++++++++++-----------------
+ 1 file changed, 13 insertions(+), 17 deletions(-)
+
+--- a/fs/nilfs2/ioctl.c
++++ b/fs/nilfs2/ioctl.c
+@@ -297,7 +297,18 @@ static int nilfs_ioctl_move_inode_block(
+                              (unsigned long long)vdesc->vd_vblocknr);
+               return ret;
+       }
+-      bh->b_private = vdesc;
++      if (unlikely(!list_empty(&bh->b_assoc_buffers))) {
++              printk(KERN_CRIT "%s: conflicting %s buffer: ino=%llu, "
++                     "cno=%llu, offset=%llu, blocknr=%llu, vblocknr=%llu\n",
++                     __func__, vdesc->vd_flags ? "node" : "data",
++                     (unsigned long long)vdesc->vd_ino,
++                     (unsigned long long)vdesc->vd_cno,
++                     (unsigned long long)vdesc->vd_offset,
++                     (unsigned long long)vdesc->vd_blocknr,
++                     (unsigned long long)vdesc->vd_vblocknr);
++              brelse(bh);
++              return -EEXIST;
++      }
+       list_add_tail(&bh->b_assoc_buffers, buffers);
+       return 0;
+ }
+@@ -335,24 +346,10 @@ static int nilfs_ioctl_move_blocks(struc
+       list_for_each_entry_safe(bh, n, &buffers, b_assoc_buffers) {
+               ret = nilfs_gccache_wait_and_mark_dirty(bh);
+               if (unlikely(ret < 0)) {
+-                      if (ret == -EEXIST) {
+-                              vdesc = bh->b_private;
+-                              printk(KERN_CRIT
+-                                     "%s: conflicting %s buffer: "
+-                                     "ino=%llu, cno=%llu, offset=%llu, "
+-                                     "blocknr=%llu, vblocknr=%llu\n",
+-                                     __func__,
+-                                     vdesc->vd_flags ? "node" : "data",
+-                                     (unsigned long long)vdesc->vd_ino,
+-                                     (unsigned long long)vdesc->vd_cno,
+-                                     (unsigned long long)vdesc->vd_offset,
+-                                     (unsigned long long)vdesc->vd_blocknr,
+-                                     (unsigned long long)vdesc->vd_vblocknr);
+-                      }
++                      WARN_ON(ret == -EEXIST);
+                       goto failed;
+               }
+               list_del_init(&bh->b_assoc_buffers);
+-              bh->b_private = NULL;
+               brelse(bh);
+       }
+       return nmembs;
+@@ -360,7 +357,6 @@ static int nilfs_ioctl_move_blocks(struc
+  failed:
+       list_for_each_entry_safe(bh, n, &buffers, b_assoc_buffers) {
+               list_del_init(&bh->b_assoc_buffers);
+-              bh->b_private = NULL;
+               brelse(bh);
+       }
+       return ret;
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:41 2009
+Message-Id: <20091207000640.985999630@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:38 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jeff Layton <jlayton@redhat.com>,
+ Steve French <sfrench@us.ibm.com>
+Subject: [002/119] cifs: dont use CIFSGetSrvInodeNumber in is_path_accessible
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=cifs-don-t-use-cifsgetsrvinodenumber-in-is_path_accessible.patch
+Content-Length: 1368
+Lines: 42
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jeff Layton <jlayton@redhat.com>
+
+commit f475f6775465283494346663f201ad04810d2e8a upstream.
+
+Because it's lighter weight, CIFS tries to use CIFSGetSrvInodeNumber to
+verify the accessibility of the root inode and then falls back to doing a
+full QPathInfo if that fails with -EOPNOTSUPP. I have at least a report
+of a server that returns NT_STATUS_INTERNAL_ERROR rather than something
+that translates to EOPNOTSUPP.
+
+Rather than trying to be clever with that call, just have
+is_path_accessible do a normal QPathInfo. That call is widely
+supported and it shouldn't increase the overhead significantly.
+
+Signed-off-by: Jeff Layton <jlayton@redhat.com>
+Signed-off-by: Steve French <sfrench@us.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/cifs/connect.c |    8 --------
+ 1 file changed, 8 deletions(-)
+
+--- a/fs/cifs/connect.c
++++ b/fs/cifs/connect.c
+@@ -2200,16 +2200,8 @@ is_path_accessible(int xid, struct cifsT
+                  struct cifs_sb_info *cifs_sb, const char *full_path)
+ {
+       int rc;
+-      __u64 inode_num;
+       FILE_ALL_INFO *pfile_info;
+-      rc = CIFSGetSrvInodeNumber(xid, tcon, full_path, &inode_num,
+-                                 cifs_sb->local_nls,
+-                                 cifs_sb->mnt_cifs_flags &
+-                                              CIFS_MOUNT_MAP_SPECIAL_CHR);
+-      if (rc != -EOPNOTSUPP)
+-              return rc;
+-
+       pfile_info = kmalloc(sizeof(FILE_ALL_INFO), GFP_KERNEL);
+       if (pfile_info == NULL)
+               return -ENOMEM;
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:41 2009
+Message-Id: <20091207000641.115073729@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:39 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jeff Layton <jlayton@redhat.com>,
+ Steve French <sfrench@us.ibm.com>
+Subject: [003/119] cifs: clean up handling when server doesnt consistently support inode numbers
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=cifs-clean-up-handling-when-server-doesn-t-consistently-support-inode-numbers.patch
+Content-Length: 3335
+Lines: 92
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jeff Layton <jlayton@redhat.com>
+
+commit ec06aedd44541129840ed52e6165afa3796a27bf upstream.
+
+It's possible that a server will return a valid FileID when we query the
+FILE_INTERNAL_INFO for the root inode, but then zeroed out inode numbers
+when we do a FindFile with an infolevel of
+SMB_FIND_FILE_ID_FULL_DIR_INFO.
+
+In this situation turn off querying for server inode numbers, generate a
+warning for the user and just generate an inode number using iunique.
+Once we generate any inode number with iunique we can no longer use any
+server inode numbers or we risk collisions, so ensure that we don't do
+that in cifs_get_inode_info either.
+
+Reported-by: Timothy Normand Miller <theosib@gmail.com>
+Signed-off-by: Jeff Layton <jlayton@redhat.com>
+Signed-off-by: Steve French <sfrench@us.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/cifs/cifsproto.h |    1 +
+ fs/cifs/inode.c     |    7 ++-----
+ fs/cifs/misc.c      |   14 ++++++++++++++
+ fs/cifs/readdir.c   |    7 ++++---
+ 4 files changed, 21 insertions(+), 8 deletions(-)
+
+--- a/fs/cifs/cifsproto.h
++++ b/fs/cifs/cifsproto.h
+@@ -389,4 +389,5 @@ extern int CIFSSMBSetPosixACL(const int 
+               const struct nls_table *nls_codepage, int remap_special_chars);
+ extern int CIFSGetExtAttr(const int xid, struct cifsTconInfo *tcon,
+                       const int netfid, __u64 *pExtAttrBits, __u64 *pMask);
++extern void cifs_autodisable_serverino(struct cifs_sb_info *cifs_sb);
+ #endif                        /* _CIFSPROTO_H */
+--- a/fs/cifs/inode.c
++++ b/fs/cifs/inode.c
+@@ -512,13 +512,10 @@ int cifs_get_inode_info(struct inode **p
+                                       cifs_sb->local_nls,
+                                       cifs_sb->mnt_cifs_flags &
+                                               CIFS_MOUNT_MAP_SPECIAL_CHR);
+-                      if (rc1) {
++                      if (rc1 || !fattr.cf_uniqueid) {
+                               cFYI(1, ("GetSrvInodeNum rc %d", rc1));
+                               fattr.cf_uniqueid = iunique(sb, ROOT_I);
+-                              /* disable serverino if call not supported */
+-                              if (rc1 == -EINVAL)
+-                                      cifs_sb->mnt_cifs_flags &=
+-                                                      ~CIFS_MOUNT_SERVER_INUM;
++                              cifs_autodisable_serverino(cifs_sb);
+                       }
+               } else {
+                       fattr.cf_uniqueid = iunique(sb, ROOT_I);
+--- a/fs/cifs/misc.c
++++ b/fs/cifs/misc.c
+@@ -705,3 +705,17 @@ cifsConvertToUCS(__le16 *target, const c
+ ctoUCS_out:
+       return i;
+ }
++
++void
++cifs_autodisable_serverino(struct cifs_sb_info *cifs_sb)
++{
++      if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) {
++              cifs_sb->mnt_cifs_flags &= CIFS_MOUNT_SERVER_INUM;
++              cERROR(1, ("Autodisabling the use of server inode numbers on "
++                         "%s. This server doesn't seem to support them "
++                         "properly. Hardlinks will not be recognized on this "
++                         "mount. Consider mounting with the \"noserverino\" "
++                         "option to silence this message.",
++                         cifs_sb->tcon->treeName));
++      }
++}
+--- a/fs/cifs/readdir.c
++++ b/fs/cifs/readdir.c
+@@ -727,11 +727,12 @@ static int cifs_filldir(char *pfindEntry
+               cifs_dir_info_to_fattr(&fattr, (FILE_DIRECTORY_INFO *)
+                                       pfindEntry, cifs_sb);
+-      /* FIXME: make _to_fattr functions fill this out */
+-      if (pCifsF->srch_inf.info_level == SMB_FIND_FILE_ID_FULL_DIR_INFO)
++      if (inum && (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM)) {
+               fattr.cf_uniqueid = inum;
+-      else
++      } else {
+               fattr.cf_uniqueid = iunique(sb, ROOT_I);
++              cifs_autodisable_serverino(cifs_sb);
++      }
+       ino = cifs_uniqueid_to_ino_t(fattr.cf_uniqueid);
+       tmp_dentry = cifs_readdir_lookup(file->f_dentry, &qstring, &fattr);
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:41 2009
+Message-Id: <20091207000641.261029358@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:40 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Suresh Jayaraman <sjayaraman@suse.de>,
+ Jeff Layton <jlayton@redhat.com>,
+ Steve French <sfrench@us.ibm.com>
+Subject: [004/119] cifs: clear server inode number flag while autodisabling
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=cifs-clear-server-inode-number-flag-while-autodisabling.patch
+Content-Length: 1093
+Lines: 30
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Suresh Jayaraman <sjayaraman@suse.de>
+
+commit f534dc994397560343be4a3223b9bbaa8e739e1f upstream.
+
+Fix the commit ec06aedd44 that intended to turn off querying for server inode
+numbers when server doesn't consistently support inode numbers. Presumably
+the commit didn't actually clear the CIFS_MOUNT_SERVER_INUM flag, perhaps a
+typo.
+
+Signed-off-by: Suresh Jayaraman <sjayaraman@suse.de>
+Acked-by: Jeff Layton <jlayton@redhat.com>
+Signed-off-by: Steve French <sfrench@us.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/cifs/misc.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/fs/cifs/misc.c
++++ b/fs/cifs/misc.c
+@@ -710,7 +710,7 @@ void
+ cifs_autodisable_serverino(struct cifs_sb_info *cifs_sb)
+ {
+       if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) {
+-              cifs_sb->mnt_cifs_flags &= CIFS_MOUNT_SERVER_INUM;
++              cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_SERVER_INUM;
+               cERROR(1, ("Autodisabling the use of server inode numbers on "
+                          "%s. This server doesn't seem to support them "
+                          "properly. Hardlinks will not be recognized on this "
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:41 2009
+Message-Id: <20091207000641.394756970@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:41 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Shirish Pargaonkar <shirishp@us.ibm.com>,
+ Jeff Layton <jlayton@redhat.com>,
+ Steve French <sfrench@us.ibm.com>
+Subject: [005/119] CIFS: fix oops in cifs_lookup during net boot
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=cifs-fix-oops-in-cifs_lookup-during-net-boot.patch
+Content-Length: 1464
+Lines: 43
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Steve French <sfrench@us.ibm.com>
+
+commit 8e6c0332d5032aef2d3bc8f41771f999112c8c66 upstream.
+
+Fixes bugzilla.kernel.org bug number 14641
+
+Lookup called during network boot (network root filesystem
+for diskless workstation) has case where nd is null in
+lookup.  This patch fixes that in cifs_lookup.
+
+(Shirish noted that 2.6.30 and 2.6.31 stable need the same check)
+
+Signed-off-by: Shirish Pargaonkar <shirishp@us.ibm.com>
+Acked-by: Jeff Layton <jlayton@redhat.com>
+Tested-by:  Vladimir Stavrinov <vs@inist.ru>
+Signed-off-by: Steve French <sfrench@us.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/cifs/dir.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/fs/cifs/dir.c
++++ b/fs/cifs/dir.c
+@@ -648,7 +648,7 @@ cifs_lookup(struct inode *parent_dir_ino
+        * O_EXCL: optimize away the lookup, but don't hash the dentry. Let
+        * the VFS handle the create.
+        */
+-      if (nd->flags & LOOKUP_EXCL) {
++      if (nd && (nd->flags & LOOKUP_EXCL)) {
+               d_instantiate(direntry, NULL);
+               return 0;
+       }
+@@ -680,7 +680,7 @@ cifs_lookup(struct inode *parent_dir_ino
+        * reduction in network traffic in the other paths.
+        */
+       if (pTcon->unix_ext) {
+-              if (!(nd->flags & (LOOKUP_PARENT | LOOKUP_DIRECTORY)) &&
++              if (nd && !(nd->flags & (LOOKUP_PARENT | LOOKUP_DIRECTORY)) &&
+                    (nd->flags & LOOKUP_OPEN) && !pTcon->broken_posix_open &&
+                    (nd->intent.open.flags & O_CREAT)) {
+                       rc = cifs_posix_open(full_path, &newInode,
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:41 2009
+Message-Id: <20091207000641.522137060@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:42 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jeff Layton <jlayton@redhat.com>,
+ Steve French <sfrench@us.ibm.com>
+Subject: [006/119] CIFS: Duplicate data on appending to some Samba servers
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=cifs-duplicate-data-on-appending-to-some-samba-servers.patch
+Content-Length: 1989
+Lines: 48
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Steve French <sfrench@us.ibm.com>
+
+commit cea62343956c24452700c06cf028b72414c58a74 upstream.
+
+SMB writes are sent with a starting offset and length. When the server
+supports the newer SMB trans2 posix open (rather than using the SMB
+NTCreateX) a file can be opened with SMB_O_APPEND flag, and for that
+case Samba server assumes that the offset sent in SMBWriteX is unneeded
+since the write should go to the end of the file - which can cause
+problems if the write was cached (since the beginning part of a
+page could be written twice by the client mm).  Jeff suggested that
+masking the flag on posix open on the client is easiest for the time
+being. Note that recent Samba server also had an unrelated problem with
+SMB NTCreateX and append (see samba bugzilla bug number 6898) which
+should not affect current Linux clients (unless cifs Unix Extensions
+are disabled).
+
+The cifs client did not send the O_APPEND flag on posix open
+before 2.6.29 so the fix is unneeded on early kernels.
+
+In the future, for the non-cached case (O_DIRECT, and forcedirectio mounts)
+it would be possible and useful to send O_APPEND on posix open (for Windows
+case: FILE_APPEND_DATA but not FILE_WRITE_DATA on SMB NTCreateX) but for
+cached writes although the vfs sets the offset to end of file it
+may fragment a write across pages - so we can't send O_APPEND on
+open (could result in sending part of a page twice).
+
+Reviewed-by: Shirish Pargaonkar <shirishp@us.ibm.com>
+Signed-off-by: Jeff Layton <jlayton@redhat.com>
+Signed-off-by: Steve French <sfrench@us.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/cifs/dir.c |    2 --
+ 1 file changed, 2 deletions(-)
+
+--- a/fs/cifs/dir.c
++++ b/fs/cifs/dir.c
+@@ -212,8 +212,6 @@ int cifs_posix_open(char *full_path, str
+               posix_flags |= SMB_O_EXCL;
+       if (oflags & O_TRUNC)
+               posix_flags |= SMB_O_TRUNC;
+-      if (oflags & O_APPEND)
+-              posix_flags |= SMB_O_APPEND;
+       if (oflags & O_SYNC)
+               posix_flags |= SMB_O_SYNC;
+       if (oflags & O_DIRECTORY)
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:41 2009
+Message-Id: <20091207000641.648428957@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:43 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Dave Jones <davej@redhat.com>,
+ James Bottomley <James.Bottomley@suse.de>
+Subject: [007/119] [SCSI] gdth: Prevent negative offsets in ioctl CVE-2009-3080
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=gdth-prevent-negative-offsets-in-ioctl-cve-2009-3080.patch
+Content-Length: 769
+Lines: 27
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Dave Jones <davej@redhat.com>
+
+commit 690e744869f3262855b83b4fb59199cf142765b0 upstream.
+
+A negative offset could be used to index before the event buffer and
+lead to a security breach.
+
+Signed-off-by: Dave Jones <davej@redhat.com>
+Signed-off-by: James Bottomley <James.Bottomley@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/scsi/gdth.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/scsi/gdth.c
++++ b/drivers/scsi/gdth.c
+@@ -2900,7 +2900,7 @@ static int gdth_read_event(gdth_ha_str *
+         eindex = handle;
+     estr->event_source = 0;
+-    if (eindex >= MAX_EVENTS) {
++    if (eindex < 0 || eindex >= MAX_EVENTS) {
+         spin_unlock_irqrestore(&ha->smp_lock, flags);
+         return eindex;
+     }
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:41 2009
+Message-Id: <20091207000641.813085557@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:44 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Larry Finger <Larry.Finger@lwfinger.net>,
+ "John W. Linville" <linville@tuxdriver.com>
+Subject: [008/119] rtl8187: Fix kernel oops when device is removed when LEDS enabled
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=rtl8187-fix-kernel-oops-when-device-is-removed-when-leds-enabled.patch
+Content-Length: 1940
+Lines: 48
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Larry Finger <Larry.Finger@lwfinger.net>
+
+commit 37b12dd2b07b4d7dc222a5f7f88b25cec532b2aa upstream.
+
+As reported by Rick Farina (sidhayn@gmail.com), removing the RTL8187
+USB stick, or unloading the driver rtl8187 using rmmod will cause a
+kernel oops.  There are at least two forms of the failure, (1) BUG:
+Scheduling while atomic, and (2) a fatal kernel page fault. This
+problem is reported in Bugzilla #14539.
+
+This problem does not occur for kernel 2.6.31, but does for 2.6.32-rc2,
+thus it is technically a regression; however, bisection did not locate
+any faulty patch. The fix was found by comparing the faulty code in
+rtl8187 with p54usb.  My interpretation is that the handling of work
+queues in mac80211 changed enough to the LEDs to be unregistered
+before tasks on the work queues are cancelled. Previously, these
+actions could be done in either order.
+
+(Herton Ronaldo Krzesinski <herton@mandriva.com.br> reports that the
+code is the same in 2.6.31, so this may be a candidate for 2.6.31.x.
+-- JWL)
+
+Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
+Reported-by: Rick Farina <sidhayn@gmail.com>
+Tested-by: Rick Farina <sidhayn@gmail.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/rtl818x/rtl8187_leds.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/wireless/rtl818x/rtl8187_leds.c
++++ b/drivers/net/wireless/rtl818x/rtl8187_leds.c
+@@ -210,10 +210,10 @@ void rtl8187_leds_exit(struct ieee80211_
+       /* turn the LED off before exiting */
+       queue_delayed_work(dev->workqueue, &priv->led_off, 0);
+-      cancel_delayed_work_sync(&priv->led_off);
+-      cancel_delayed_work_sync(&priv->led_on);
+       rtl8187_unregister_led(&priv->led_rx);
+       rtl8187_unregister_led(&priv->led_tx);
++      cancel_delayed_work_sync(&priv->led_off);
++      cancel_delayed_work_sync(&priv->led_on);
+ }
+ #endif /* def CONFIG_RTL8187_LED */
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:42 2009
+Message-Id: <20091207000641.956467260@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:45 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ NeilBrown <neilb@suse.de>
+Subject: [009/119] md: dont clear endpoint for resync when resync is interrupted.
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=md-don-t-clear-endpoint-for-resync-when-resync-is-interrupted.patch
+Content-Length: 1363
+Lines: 40
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: NeilBrown <neilb@suse.de>
+
+commit 24395a85d8efe6eee477ea35c73d045a8dd7a3a1 upstream.
+
+If a 'sync_max' has been set (via sysfs), it is wrong to clear it
+until a resync (or reshape or recovery ...) actually reached that
+point.
+So if a resync is interrupted (e.g. by device failure),
+leave 'resync_max' unchanged.
+
+This is particularly important for 'reshape' operations that do not
+change the size of the array.  For such operations mdadm needs to
+monitor the reshape taking rolling backups of the section being
+reshaped.  If resync_max gets cleared, the reshape can get ahead of
+mdadm and then the backups that mdadm creates are useless.
+
+This is suitable for 2.6.31.y stable kernels.
+
+Signed-off-by: NeilBrown <neilb@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/md/md.c |    5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/drivers/md/md.c
++++ b/drivers/md/md.c
+@@ -6495,8 +6495,9 @@ void md_do_sync(mddev_t *mddev)
+  skip:
+       mddev->curr_resync = 0;
+       mddev->curr_resync_completed = 0;
+-      mddev->resync_min = 0;
+-      mddev->resync_max = MaxSector;
++      if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery))
++              /* We completed so max setting can be forgotten. */
++              mddev->resync_max = MaxSector;
+       sysfs_notify(&mddev->kobj, NULL, "sync_completed");
+       wake_up(&resync_wait);
+       set_bit(MD_RECOVERY_DONE, &mddev->recovery);
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:42 2009
+Message-Id: <20091207000642.118166452@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:46 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ NeilBrown <neilb@suse.de>
+Subject: [010/119] md/raid5: make sure curr_sync_completes is uptodate when reshape starts
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=md-raid5-make-sure-curr_sync_completes-is-uptodate-when-reshape-starts.patch
+Content-Length: 998
+Lines: 32
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: NeilBrown <neilb@suse.de>
+
+commit 8dee7211467a56b7eb4e4359efb0aa4a72e1b6f3 upstream.
+
+This value is visible through sysfs and is used by mdadm
+when it manages a reshape (backing up data that is about to be
+rearranged).  So it is important that it is always correct.
+Current it does not get updated properly when a reshape
+starts which can cause problems when assembling an array
+that is in the middle of being reshaped.
+
+This is suitable for 2.6.31.y stable kernels.
+
+Signed-off-by: NeilBrown <neilb@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/md/raid5.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/md/raid5.c
++++ b/drivers/md/raid5.c
+@@ -3790,6 +3790,8 @@ static sector_t reshape_request(mddev_t 
+                       sector_nr = conf->reshape_progress;
+               sector_div(sector_nr, new_data_disks);
+               if (sector_nr) {
++                      mddev->curr_resync_completed = sector_nr;
++                      sysfs_notify(&mddev->kobj, NULL, "sync_completed");
+                       *skipped = 1;
+                       return sector_nr;
+               }
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:42 2009
+Message-Id: <20091207000642.287972660@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:47 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ NeilBrown <neilb@suse.de>
+Subject: [011/119] md/raid1/raid10: add a cond_resched
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=md-raid1-raid10-add-a-cond_resched.patch
+Content-Length: 1019
+Lines: 39
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: NeilBrown <neilb@suse.de>
+
+commit 1d9d52416c0445019ccc1f0fddb9a227456eb61b upstream.
+
+During 'check' of a raid1 or raid10 it is possible for the management
+thread to spend a lot of time running 'memcmp' on blocks from
+different devices, so make sure the thread has a chance to schedule.
+raid5d already has a cond_resched (in process_stripe).
+
+Reported-By: Lee Howard <faxguy@howardsilvan.com>
+Signed-off-by: NeilBrown <neilb@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/md/raid1.c  |    1 +
+ drivers/md/raid10.c |    1 +
+ 2 files changed, 2 insertions(+)
+
+--- a/drivers/md/raid10.c
++++ b/drivers/md/raid10.c
+@@ -1630,6 +1630,7 @@ static void raid10d(mddev_t *mddev)
+                               generic_make_request(bio);
+                       }
+               }
++              cond_resched();
+       }
+       if (unplug)
+               unplug_slaves(mddev);
+--- a/drivers/md/raid1.c
++++ b/drivers/md/raid1.c
+@@ -1676,6 +1676,7 @@ static void raid1d(mddev_t *mddev)
+                               generic_make_request(bio);
+                       }
+               }
++              cond_resched();
+       }
+       if (unplug)
+               unplug_slaves(mddev);
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:42 2009
+Message-Id: <20091207000642.408714542@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:48 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Julian Anastasov <ja@ssi.bg>,
+ Takashi Iwai <tiwai@suse.de>
+Subject: [012/119] ALSA: usb-audio: fix combine_word problem
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=alsa-usb-audio-fix-combine_word-problem.patch
+Content-Length: 1318
+Lines: 39
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Julian Anastasov <ja@ssi.bg>
+
+commit f495088210c8b9e20791d995a8210170c68d2deb upstream.
+
+Fix combine_word problem where first octet is not
+read properly. The only affected place seems to be the
+INPUT_TERMINAL type. Before now, sound controls can be created
+with the output terminal's name which is a fallback mechanism
+used only for unknown input terminal types. For example,
+Line can wrongly appear as Speaker. After the change it
+should appear as Line.
+
+       The side effect of this change can be that users
+can expect the wrong control name in their scripts or
+programs while now we return the correct one.
+
+       Probably, these defines should use get_unaligned_le16 and
+friends.
+
+Signed-off-by: Julian Anastasov <ja@ssi.bg>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/usb/usbaudio.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/sound/usb/usbaudio.h
++++ b/sound/usb/usbaudio.h
+@@ -210,7 +210,7 @@ struct snd_usb_midi_endpoint_info {
+ /*
+  */
+-#define combine_word(s)    ((*s) | ((unsigned int)(s)[1] << 8))
++#define combine_word(s)    ((*(s)) | ((unsigned int)(s)[1] << 8))
+ #define combine_triple(s)  (combine_word(s) | ((unsigned int)(s)[2] << 16))
+ #define combine_quad(s)    (combine_triple(s) | ((unsigned int)(s)[3] << 24))
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:42 2009
+Message-Id: <20091207000642.574512439@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:49 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Daniel J Blueman <daniel.blueman@gmail.com>,
+ Takashi Iwai <tiwai@suse.de>
+Subject: [013/119] ALSA: hda - Dell Studio 1557 hd-audio quirk
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=alsa-hda-dell-studio-1557-hd-audio-quirk.patch
+Content-Length: 829
+Lines: 27
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Daniel J Blueman <daniel.blueman@gmail.com>
+
+commit 8ef5837a47f73faee18fa7ce2f9a9eb7675be8de upstream.
+
+Add the Dell Studio 15 (model 1557, Core i7) laptop to the hd-audio
+quirk list, enabling audio.
+
+Signed-off-by: Daniel J Blueman <daniel.blueman@gmail.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/pci/hda/patch_sigmatel.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/sound/pci/hda/patch_sigmatel.c
++++ b/sound/pci/hda/patch_sigmatel.c
+@@ -1817,6 +1817,8 @@ static struct snd_pci_quirk stac92hd73xx
+                               "Dell Studio 17", STAC_DELL_M6_DMIC),
+       SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x02be,
+                               "Dell Studio 1555", STAC_DELL_M6_DMIC),
++      SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x02bd,
++                              "Dell Studio 1557", STAC_DELL_M6_DMIC),
+       {} /* terminator */
+ };
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:42 2009
+Message-Id: <20091207000642.700325357@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:50 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Russell King <rmk+kernel@arm.linux.org.uk>,
+ Takashi Iwai <tiwai@suse.de>
+Subject: [014/119] ALSA: AACI: fix AC97 multiple-open bug
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=alsa-aaci-fix-ac97-multiple-open-bug.patch
+Content-Length: 661
+Lines: 26
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Russell King <rmk+kernel@arm.linux.org.uk>
+
+commit 4acd57c3de62374fe5bb52e5cd24538190f4eab2 upstream.
+
+Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/arm/aaci.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/sound/arm/aaci.c
++++ b/sound/arm/aaci.c
+@@ -504,6 +504,10 @@ static int aaci_pcm_hw_params(struct snd
+       int err;
+       aaci_pcm_hw_free(substream);
++      if (aacirun->pcm_open) {
++              snd_ac97_pcm_close(aacirun->pcm);
++              aacirun->pcm_open = 0;
++      }
+       err = devdma_hw_alloc(NULL, substream,
+                             params_buffer_bytes(params));
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:42 2009
+Message-Id: <20091207000642.829552733@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:51 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Russell King <rmk+kernel@arm.linux.org.uk>,
+ Takashi Iwai <tiwai@suse.de>
+Subject: [015/119] ALSA: AACI: fix recording bug
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=alsa-aaci-fix-recording-bug.patch
+Content-Length: 794
+Lines: 28
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Russell King <rmk+kernel@arm.linux.org.uk>
+
+commit 8ee763b9c82c6ca0a59a7271ce4fa29d7baf5c09 upstream.
+
+pcm->r[1].slots is the double rate slot information, not the
+capture information.  For capture, 'pcm' will already be the
+capture ac97 pcm structure.
+
+Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/arm/aaci.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/sound/arm/aaci.c
++++ b/sound/arm/aaci.c
+@@ -521,7 +521,7 @@ static int aaci_pcm_hw_params(struct snd
+       else
+               err = snd_ac97_pcm_open(aacirun->pcm, params_rate(params),
+                                       params_channels(params),
+-                                      aacirun->pcm->r[1].slots);
++                                      aacirun->pcm->r[0].slots);
+       if (err)
+               goto out;
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:43 2009
+Message-Id: <20091207000642.997875875@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:52 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ David Woodhouse <David.Woodhouse@intel.com>
+Subject: [016/119] jffs2: Fix memory corruption in jffs2_read_inode_range()
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=jffs2-fix-memory-corruption-in-jffs2_read_inode_range.patch
+Content-Length: 3423
+Lines: 80
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: David Woodhouse <dwmw2@infradead.org>
+
+commit 199bc9ff5ca5e4b3bcaff8927b2983c65f34c263 upstream.
+
+In 2.6.23 kernel, commit a32ea1e1f925399e0d81ca3f7394a44a6dafa12c
+("Fix read/truncate race") fixed a race in the generic code, and as a
+side effect, now do_generic_file_read() can ask us to readpage() past
+the i_size. This seems to be correctly handled by the block routines
+(e.g. block_read_full_page() fills the page with zeroes in case if
+somebody is trying to read past the last inode's block).
+
+JFFS2 doesn't handle this; it assumes that it won't be asked to read
+pages which don't exist -- and thus that there will be at least _one_
+valid 'frag' on the page it's being asked to read. It will fill any
+holes with the following memset:
+
+  memset(buf, 0, min(end, frag->ofs + frag->size) - offset);
+
+When the 'closest smaller match' returned by jffs2_lookup_node_frag() is
+actually on a previous page and ends before 'offset', that results in:
+
+  memset(buf, 0, <huge unsigned negative>);
+
+Hopefully, in most cases the corruption is fatal, and quickly causing
+random oopses, like this:
+
+  root@10.0.0.4:~/ltp-fs-20090531# ./testcases/kernel/fs/ftest/ftest01
+  Unable to handle kernel paging request for data at address 0x00000008
+  Faulting instruction address: 0xc01cd980
+  Oops: Kernel access of bad area, sig: 11 [#1]
+  [...]
+  NIP [c01cd980] rb_insert_color+0x38/0x184
+  LR [c0043978] enqueue_hrtimer+0x88/0xc4
+  Call Trace:
+  [c6c63b60] [c004f9a8] tick_sched_timer+0xa0/0xe4 (unreliable)
+  [c6c63b80] [c0043978] enqueue_hrtimer+0x88/0xc4
+  [c6c63b90] [c0043a48] __run_hrtimer+0x94/0xbc
+  [c6c63bb0] [c0044628] hrtimer_interrupt+0x140/0x2b8
+  [c6c63c10] [c000f8e8] timer_interrupt+0x13c/0x254
+  [c6c63c30] [c001352c] ret_from_except+0x0/0x14
+  --- Exception: 901 at memset+0x38/0x5c
+      LR = jffs2_read_inode_range+0x144/0x17c
+  [c6c63cf0] [00000000] (null) (unreliable)
+
+This patch fixes the issue, plus fixes all LTP tests on NAND/UBI with
+JFFS2 filesystem that were failing since 2.6.23 (seems like the bug
+above also broke the truncation).
+
+Reported-By: Anton Vorontsov <avorontsov@ru.mvista.com>
+Tested-By: Anton Vorontsov <avorontsov@ru.mvista.com>
+Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/jffs2/read.c |    9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+--- a/fs/jffs2/read.c
++++ b/fs/jffs2/read.c
+@@ -164,12 +164,15 @@ int jffs2_read_inode_range(struct jffs2_
+       /* XXX FIXME: Where a single physical node actually shows up in two
+          frags, we read it twice. Don't do that. */
+-      /* Now we're pointing at the first frag which overlaps our page */
++      /* Now we're pointing at the first frag which overlaps our page
++       * (or perhaps is before it, if we've been asked to read off the
++       * end of the file). */
+       while(offset < end) {
+               D2(printk(KERN_DEBUG "jffs2_read_inode_range: offset %d, end %d\n", offset, end));
+-              if (unlikely(!frag || frag->ofs > offset)) {
++              if (unlikely(!frag || frag->ofs > offset ||
++                           frag->ofs + frag->size <= offset)) {
+                       uint32_t holesize = end - offset;
+-                      if (frag) {
++                      if (frag && frag->ofs > offset) {
+                               D1(printk(KERN_NOTICE "Eep. Hole in ino #%u fraglist. frag->ofs = 0x%08x, offset = 0x%08x\n", f->inocache->ino, frag->ofs, offset));
+                               holesize = min(holesize, frag->ofs - offset);
+                       }
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:43 2009
+Message-Id: <20091207000643.124751996@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:53 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Clemens Ladisch <clemens@ladisch.de>,
+ Takashi Iwai <tiwai@suse.de>
+Subject: [017/119] sound: rawmidi: disable active-sensing-on-close by default
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=sound-rawmidi-disable-active-sensing-on-close-by-default.patch
+Content-Length: 1365
+Lines: 39
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Clemens Ladisch <clemens@ladisch.de>
+
+commit 2d4b842014dc76a81abced47ef27177eedb9deba upstream.
+
+Sending an Active Sensing message when closing a port can interfere with
+the following data if the port is reopened and a note-on is sent before
+the device's timeout has elapsed.  Therefore, it is better to disable
+this setting by default.
+
+Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+
+---
+ sound/core/rawmidi.c      |    2 +-
+ sound/core/seq/seq_midi.c |    1 +
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+--- a/sound/core/rawmidi.c
++++ b/sound/core/rawmidi.c
+@@ -274,7 +274,7 @@ static int open_substream(struct snd_raw
+               return err;
+       substream->opened = 1;
+       if (substream->use_count++ == 0)
+-              substream->active_sensing = 1;
++              substream->active_sensing = 0;
+       if (mode & SNDRV_RAWMIDI_LFLG_APPEND)
+               substream->append = 1;
+       rmidi->streams[substream->stream].substream_opened++;
+--- a/sound/core/seq/seq_midi.c
++++ b/sound/core/seq/seq_midi.c
+@@ -236,6 +236,7 @@ static int midisynth_use(void *private_d
+       memset(&params, 0, sizeof(params));
+       params.avail_min = 1;
+       params.buffer_size = output_buffer_size;
++      params.no_active_sensing = 1;
+       if ((err = snd_rawmidi_output_params(msynth->output_rfile.output, &params)) < 0) {
+               snd_rawmidi_kernel_release(&msynth->output_rfile);
+               return err;
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:43 2009
+Message-Id: <20091207000643.291159866@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:54 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Clemens Ladisch <clemens@ladisch.de>,
+ Takashi Iwai <tiwai@suse.de>
+Subject: [018/119] sound: rawmidi: fix checking of O_APPEND when opening MIDI device
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=sound-rawmidi-fix-checking-of-o_append-when-opening-midi-device.patch
+Content-Length: 1100
+Lines: 32
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Clemens Ladisch <clemens@ladisch.de>
+
+commit 16fb109644b5644e42ececeff644514de6f4bd03 upstream.
+
+Commit 9a1b64caac82aa02cb74587ffc798e6f42c6170a in 2.6.30 dropped the
+check that a substream must already have been opened with O_APPEND to be
+able to open it a second time.
+
+This would make it possible for a substream to be switched to append
+mode, which would mean that non-atomic writes would fail unexpectedly.
+
+Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/core/rawmidi.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/sound/core/rawmidi.c
++++ b/sound/core/rawmidi.c
+@@ -248,7 +248,8 @@ static int assign_substream(struct snd_r
+       list_for_each_entry(substream, &s->substreams, list) {
+               if (substream->opened) {
+                       if (stream == SNDRV_RAWMIDI_STREAM_INPUT ||
+-                          !(mode & SNDRV_RAWMIDI_LFLG_APPEND))
++                          !(mode & SNDRV_RAWMIDI_LFLG_APPEND) ||
++                          !substream->append)
+                               continue;
+               }
+               if (subdevice < 0 || subdevice == substream->number) {
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:43 2009
+Message-Id: <20091207000643.451880574@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:55 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Clemens Ladisch <clemens@ladisch.de>,
+ Takashi Iwai <tiwai@suse.de>
+Subject: [019/119] sound: rawmidi: fix double init when opening MIDI device with O_APPEND
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=sound-rawmidi-fix-double-init-when-opening-midi-device-with-o_append.patch
+Content-Length: 1543
+Lines: 53
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Clemens Ladisch <clemens@ladisch.de>
+
+commit 8579d2d7779d7ff41ea2a0183015e0e5038f1043 upstream.
+
+Commit 9a1b64caac82aa02cb74587ffc798e6f42c6170a in 2.6.30 moved the
+substream initialization code to where it would be executed every time
+the substream is opened.
+
+This had the consequence that any further opening would drop and leak
+the data in the existing buffer, and that the device driver's open
+callback would be called multiple times, unexpectedly.
+
+Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/core/rawmidi.c |   22 ++++++++++++----------
+ 1 file changed, 12 insertions(+), 10 deletions(-)
+
+--- a/sound/core/rawmidi.c
++++ b/sound/core/rawmidi.c
+@@ -267,17 +267,19 @@ static int open_substream(struct snd_raw
+ {
+       int err;
+-      err = snd_rawmidi_runtime_create(substream);
+-      if (err < 0)
+-              return err;
+-      err = substream->ops->open(substream);
+-      if (err < 0)
+-              return err;
+-      substream->opened = 1;
+-      if (substream->use_count++ == 0)
++      if (substream->use_count == 0) {
++              err = snd_rawmidi_runtime_create(substream);
++              if (err < 0)
++                      return err;
++              err = substream->ops->open(substream);
++              if (err < 0)
++                      return err;
++              substream->opened = 1;
+               substream->active_sensing = 0;
+-      if (mode & SNDRV_RAWMIDI_LFLG_APPEND)
+-              substream->append = 1;
++              if (mode & SNDRV_RAWMIDI_LFLG_APPEND)
++                      substream->append = 1;
++      }
++      substream->use_count++;
+       rmidi->streams[substream->stream].substream_opened++;
+       return 0;
+ }
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:43 2009
+Message-Id: <20091207000643.589531946@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:56 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Clemens Ladisch <clemens@ladisch.de>,
+ Takashi Iwai <tiwai@suse.de>
+Subject: [020/119] sound: rawmidi: fix MIDI device O_APPEND error handling
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=sound-rawmidi-fix-midi-device-o_append-error-handling.patch
+Content-Length: 2356
+Lines: 84
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Clemens Ladisch <clemens@ladisch.de>
+
+commit b7fe750fcceda4fa6bef399b0e2812562728ea82 upstream.
+
+Commit 9a1b64caac82aa02cb74587ffc798e6f42c6170a in 2.6.30 broke the
+error handling code in rawmidi_open_priv().
+
+If only the output substream of a RawMIDI device has been opened and
+if this device is then opened with O_RDWR | O_APPEND and if the
+initialization of the input substream fails (either because of low
+memory or because the device driver's open callback fails), then the
+runtime structure of the already open output substream will be freed
+and all following writes through the first handle will cause
+snd_rawmidi_write() to use the NULL runtime pointer.
+
+Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/core/rawmidi.c |   19 +++++++------------
+ 1 file changed, 7 insertions(+), 12 deletions(-)
+
+--- a/sound/core/rawmidi.c
++++ b/sound/core/rawmidi.c
+@@ -272,8 +272,10 @@ static int open_substream(struct snd_raw
+               if (err < 0)
+                       return err;
+               err = substream->ops->open(substream);
+-              if (err < 0)
++              if (err < 0) {
++                      snd_rawmidi_runtime_free(substream);
+                       return err;
++              }
+               substream->opened = 1;
+               substream->active_sensing = 0;
+               if (mode & SNDRV_RAWMIDI_LFLG_APPEND)
+@@ -300,27 +302,27 @@ static int rawmidi_open_priv(struct snd_
+                                      SNDRV_RAWMIDI_STREAM_INPUT,
+                                      mode, &sinput);
+               if (err < 0)
+-                      goto __error;
++                      return err;
+       }
+       if (mode & SNDRV_RAWMIDI_LFLG_OUTPUT) {
+               err = assign_substream(rmidi, subdevice,
+                                      SNDRV_RAWMIDI_STREAM_OUTPUT,
+                                      mode, &soutput);
+               if (err < 0)
+-                      goto __error;
++                      return err;
+       }
+       if (sinput) {
+               err = open_substream(rmidi, sinput, mode);
+               if (err < 0)
+-                      goto __error;
++                      return err;
+       }
+       if (soutput) {
+               err = open_substream(rmidi, soutput, mode);
+               if (err < 0) {
+                       if (sinput)
+                               close_substream(rmidi, sinput, 0);
+-                      goto __error;
++                      return err;
+               }
+       }
+@@ -328,13 +330,6 @@ static int rawmidi_open_priv(struct snd_
+       rfile->input = sinput;
+       rfile->output = soutput;
+       return 0;
+-
+-      __error:
+-      if (sinput && sinput->runtime)
+-              snd_rawmidi_runtime_free(sinput);
+-      if (soutput && soutput->runtime)
+-              snd_rawmidi_runtime_free(soutput);
+-      return err;
+ }
+ /* called from sound/core/seq/seq_midi.c */
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:43 2009
+Message-Id: <20091207000643.761211232@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:57 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Soeren Sandmann Pedersen <sandmann@redhat.com>,
+ a.p.zijlstra@chello.nl,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [021/119] highmem: Fix race in debug_kmap_atomic() which could cause warn_count to underflow
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=highmem-fix-race-in-debug_kmap_atomic-which-could-cause-warn_count-to-underflow.patch
+Content-Length: 1111
+Lines: 38
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Soeren Sandmann <sandmann@daimi.au.dk>
+
+commit 5ebd4c22897dce65845807a9bd3a31cc4e142b53 upstream.
+
+debug_kmap_atomic() tries to prevent ever printing more than 10
+warnings, but it does so by testing whether an unsigned integer
+is equal to 0. However, if the warning is caused by a nested
+IRQ, then this counter may underflow and the stream of warnings
+will never end.
+
+Fix that by using a signed integer instead.
+
+Signed-off-by: Soeren Sandmann Pedersen <sandmann@redhat.com>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: a.p.zijlstra@chello.nl
+LKML-Reference: <ye8zl7b8ktj.fsf@camel23.daimi.au.dk>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ mm/highmem.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/mm/highmem.c
++++ b/mm/highmem.c
+@@ -426,9 +426,9 @@ void __init page_address_init(void)
+ void debug_kmap_atomic(enum km_type type)
+ {
+-      static unsigned warn_count = 10;
++      static int warn_count = 10;
+-      if (unlikely(warn_count == 0))
++      if (unlikely(warn_count < 0))
+               return;
+       if (unlikely(in_interrupt())) {
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:44 2009
+Message-Id: <20091207000643.892734717@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:58 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Soeren Sandmann Pedersen <sandmann@redhat.com>,
+ a.p.zijlstra@chello.nl,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [022/119] highmem: Fix debug_kmap_atomic() to also handle KM_IRQ_PTE, KM_NMI, and KM_NMI_PTE
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=highmem-fix-debug_kmap_atomic-to-also-handle-km_irq_pte-km_nmi-and-km_nmi_pte.patch
+Content-Length: 1536
+Lines: 52
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Soeren Sandmann <sandmann@daimi.au.dk>
+
+commit d4515646699b6ad7b1a98ceb871296b957f3ef47 upstream.
+
+Previously calling debug_kmap_atomic() with these types would
+cause spurious warnings.
+
+(triggered by SysProf using perf events)
+
+Signed-off-by: Soeren Sandmann Pedersen <sandmann@redhat.com>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: a.p.zijlstra@chello.nl
+LKML-Reference: <ye8vdhz8krw.fsf@camel23.daimi.au.dk>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ mm/highmem.c |   13 ++++++++++---
+ 1 file changed, 10 insertions(+), 3 deletions(-)
+
+--- a/mm/highmem.c
++++ b/mm/highmem.c
+@@ -432,10 +432,15 @@ void debug_kmap_atomic(enum km_type type
+               return;
+       if (unlikely(in_interrupt())) {
+-              if (in_irq()) {
++              if (in_nmi()) {
++                      if (type != KM_NMI && type != KM_NMI_PTE) {
++                              WARN_ON(1);
++                              warn_count--;
++                      }
++              } else if (in_irq()) {
+                       if (type != KM_IRQ0 && type != KM_IRQ1 &&
+                           type != KM_BIO_SRC_IRQ && type != KM_BIO_DST_IRQ &&
+-                          type != KM_BOUNCE_READ) {
++                          type != KM_BOUNCE_READ && type != KM_IRQ_PTE) {
+                               WARN_ON(1);
+                               warn_count--;
+                       }
+@@ -452,7 +457,9 @@ void debug_kmap_atomic(enum km_type type
+       }
+       if (type == KM_IRQ0 || type == KM_IRQ1 || type == KM_BOUNCE_READ ||
+-                      type == KM_BIO_SRC_IRQ || type == KM_BIO_DST_IRQ) {
++                      type == KM_BIO_SRC_IRQ || type == KM_BIO_DST_IRQ ||
++                      type == KM_IRQ_PTE || type == KM_NMI ||
++                      type == KM_NMI_PTE ) {
+               if (!irqs_disabled()) {
+                       WARN_ON(1);
+                       warn_count--;
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:44 2009
+Message-Id: <20091207000644.059666416@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:59 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Mike Isely <isely@pobox.com>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>
+Subject: [023/119] V4L/DVB (13169): bttv: Fix potential out-of-order field processing
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=v4l-dvb-13169-bttv-fix-potential-out-of-order-field-processing.patch
+Content-Length: 5994
+Lines: 121
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Mike Isely <isely@pobox.com>
+
+commit 66349b4e7ab3825dbfc167a5f0309792a587adb7 upstream.
+
+There is a subtle interaction in the bttv driver which can result in
+fields being repeatedly processed out of order.  This is a problem
+specifically when running in V4L2_FIELD_ALTERNATE mode (probably the
+most common case).
+
+1. The determination of which fields are associated with which buffers
+happens in videobuf, before the bttv driver gets a chance to queue the
+corresponding DMA.  Thus by the point when the DMA is queued for a
+given buffer, the algorithm has to do the queuing based on the
+buffer's already assigned field type - not based on which field is
+"next" in the video stream.
+
+2. The driver normally tries to queue both the top and bottom fields
+at the same time (see bttv_irq_next_video()).  It tries to sort out
+top vs bottom by looking at the field type for the next 2 available
+buffers and assigning them appropriately.
+
+3. However the bttv driver *always* actually processes the top field
+first.  There's even an interrupt set aside for specifically
+recognizing when the top field has been processed so that it can be
+marked done even while the bottom field is still being DMAed.
+
+Given all of the above, if one gets into a situation where
+bttv_irq_next_video() gets entered when the first available buffer has
+been pre-associated as a bottom field, then the function is going to
+process the buffers out of order.  That first available buffer will be
+put into the bottom field slot and the buffer after that will be put
+into the top field slot.  Problem is, since the top field is always
+processed first by the driver, then that second buffer (the one after
+the first available buffer) will be the first one to be finished.
+Because of the strict fifo handling of all video buffers, then that
+top field won't be seen by the app until after the bottom field is
+also processed.  Worse still, the app will get back the
+chronologically later bottom field first, *before* the top field is
+received.  The buffer's timestamps will even be backwards.
+
+While not fatal to most TV apps, this behavior can subtlely degrade
+userspace deinterlacing (probably will cause jitter).  That's probably
+why it has gone unnoticed.  But it will also cause serious problems if
+the app in question discards all but the latest received buffer (a
+latency minimizing tactic) - causing one field to only ever be
+displayed since the other is now always late.  Unfortunately once you
+get into this state, you're stuck this way - because having consumed
+two buffers, now the next time around the "first" available buffer
+will again be a bottom field and the same thing happens.
+
+How can we get into this state?  In a perfect world, where there's
+always a few free buffers queued to the driver, it should be
+impossible.  However if something disrupts streaming, e.g. if the
+userspace app can't queue free buffers fast enough for a moment due
+perhaps to a CPU scheduling glitch, then the driver can get
+momentarily starved and some number of fields will be dropped.  That's
+OK.  But if an odd number of fields get dropped, then that "first"
+available buffer might be the bottom field and now we're stuck...
+
+This patch fixes that problem by deliberately only setting up a single
+field for one frame if we don't get a top field as the first available
+buffer.  By purposely skipping the other field, then we only handle a
+single buffer thus bringing things back into proper sync (i.e. top
+field first) for the next frame.  To do this we just drop the few
+lines in bttv_irq_next_video() that attempt to set up the second
+buffer when that second buffer isn't for the bottom field.
+
+This is definitely a problem in when in V4L2_FIELD_ALTERNATE mode.  In
+the other modes this change either has no effect or doesn't harm
+things any further anyway.
+
+Signed-off-by: Mike Isely <isely@pobox.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/bt8xx/bttv-driver.c |   31 +++++++++++++++++++++++++++----
+ 1 file changed, 27 insertions(+), 4 deletions(-)
+
+--- a/drivers/media/video/bt8xx/bttv-driver.c
++++ b/drivers/media/video/bt8xx/bttv-driver.c
+@@ -3798,11 +3798,34 @@ bttv_irq_next_video(struct bttv *btv, st
+               if (!V4L2_FIELD_HAS_BOTH(item->vb.field) &&
+                   (item->vb.queue.next != &btv->capture)) {
+                       item = list_entry(item->vb.queue.next, struct bttv_buffer, vb.queue);
++                      /* Mike Isely <isely@pobox.com> - Only check
++                       * and set up the bottom field in the logic
++                       * below.  Don't ever do the top field.  This
++                       * of course means that if we set up the
++                       * bottom field in the above code that we'll
++                       * actually skip a field.  But that's OK.
++                       * Having processed only a single buffer this
++                       * time, then the next time around the first
++                       * available buffer should be for a top field.
++                       * That will then cause us here to set up a
++                       * top then a bottom field in the normal way.
++                       * The alternative to this understanding is
++                       * that we set up the second available buffer
++                       * as a top field, but that's out of order
++                       * since this driver always processes the top
++                       * field first - the effect will be the two
++                       * buffers being returned in the wrong order,
++                       * with the second buffer also being delayed
++                       * by one field time (owing to the fifo nature
++                       * of videobuf).  Worse still, we'll be stuck
++                       * doing fields out of order now every time
++                       * until something else causes a field to be
++                       * dropped.  By effectively forcing a field to
++                       * drop this way then we always get back into
++                       * sync within a single frame time.  (Out of
++                       * order fields can screw up deinterlacing
++                       * algorithms.) */
+                       if (!V4L2_FIELD_HAS_BOTH(item->vb.field)) {
+-                              if (NULL == set->top &&
+-                                  V4L2_FIELD_TOP == item->vb.field) {
+-                                      set->top = item;
+-                              }
+                               if (NULL == set->bottom &&
+                                   V4L2_FIELD_BOTTOM == item->vb.field) {
+                                       set->bottom = item;
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:44 2009
+Message-Id: <20091207000644.223985205@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:00 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Mike Isely <isely@pobox.com>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>
+Subject: [024/119] V4L/DVB (13170): bttv: Fix reversed polarity error when switching video standard
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=v4l-dvb-13170-bttv-fix-reversed-polarity-error-when-switching-video-standard.patch
+Content-Length: 2873
+Lines: 61
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Mike Isely <isely@pobox.com>
+
+commit 2de26c0a4a218a351bb1970eeaddf2905b47ff13 upstream.
+
+The bttv driver function which handles switching of the video standard
+(set_tvnorm() in bttv-driver.c) includes a check which can optionally
+also reset the cropping configuration to a default value.  It is
+"optional" based on a comparison of the cropcap parameters of the
+previous vs the newly requested video standard.  The comparison is
+being done with a memcmp(), a function which only returns a true value
+if the comparison actually fails.
+
+This if-statement appears to have been written to assume wrong
+memcmp() semantics.  That is, it was re-initializing the cropping
+configuration only if the new video standard did NOT have different
+cropcap values.  That doesn't make any sense.  One definitely should
+reset things if the cropcap parameters are different - if there's any
+comparison to made at all.
+
+The effect of this problem was that a transition from, say, PAL to
+NTSC would leave in place old cropping setup that made sense for the
+PAL geometry but not for NTSC.  If the application doesn't care about
+cropping it also won't try to reset the cropping configuration,
+resulting in an improperly cropped video frame.  In the case I was
+testing this actually caused black video frames to be displayed.
+
+Another interesting effect of this bug is that if one does something
+which does NOT change the video standard and this function is run,
+then the cropping setup gets reset anyway - again because of the
+backwards comparison.  It turns out that just running anything which
+merely opens and closes the video device node (e.g. v4l-info) will
+cause this to happen.  One can argue that simply opening the device
+node and not doing anything to it should not mess with any of its
+state - but because of this behavior, any TV app which does such
+things (e.g. xawtv) probably therefore doesn't see the problem.
+
+The solution is to fix the sense of the if-statement.  It's easy to
+see how this mistake could have been made given how memcmp() works.
+The patch is therefore removal of a single "!" character from the
+if-statement in set_tvnorm in bttv-driver.c.
+
+Signed-off-by: Mike Isely <isely@pobox.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/bt8xx/bttv-driver.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/media/video/bt8xx/bttv-driver.c
++++ b/drivers/media/video/bt8xx/bttv-driver.c
+@@ -1299,7 +1299,7 @@ set_tvnorm(struct bttv *btv, unsigned in
+       tvnorm = &bttv_tvnorms[norm];
+-      if (!memcmp(&bttv_tvnorms[btv->tvnorm].cropcap, &tvnorm->cropcap,
++      if (memcmp(&bttv_tvnorms[btv->tvnorm].cropcap, &tvnorm->cropcap,
+                   sizeof (tvnorm->cropcap))) {
+               bttv_crop_reset(&btv->crop[0], norm);
+               btv->crop[1] = btv->crop[0]; /* current = default */
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:44 2009
+Message-Id: <20091207000644.374616073@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:01 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Seth Barry <seth@cyberseth.com>,
+ Michael Krufky <mkrufky@kernellabs.com>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>
+Subject: [025/119] V4L/DVB (13109): tda18271: fix signedness issue in tda18271_rf_tracking_filters_init
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=v4l-dvb-13109-tda18271-fix-signedness-issue-in-tda18271_rf_tracking_filters_init.patch
+Content-Length: 2897
+Lines: 61
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Seth Barry <seth@cyberseth.com>
+
+commit a57c1dcb93e43357ed3f666e5a2b5d5071dd3930 upstream.
+
+While having tda18271 module set with debug=17 (cal & info prints) and
+cal=0 (delay calibration process until first use) - I discovered that
+during the calibration process, if the frequency test for 69750000
+returned a bcal of 0 (see tda18721-fe.c in tda18271_powerscan func) that
+the tuner wouldn't be able to pickup any of the frequencies in the range
+(all the other frequencies bands returned bcal=1).  I spent some time
+going over the code and the NXP's tda18271 spec (ver.4 of it i think) and
+adding a lot of debug prints and walking/stepping through the calibration
+process.  I found that when the powerscan fails to find a frequency, the
+rf calibration is not run and the default value is supposed to be used in
+its place (pulled from the RF_CAL_map table) - but something was getting
+goofed up there.
+
+Now, my c coding skills are very rusty, but i think root of the problem is
+a signedness issue with the math operation for calculating the rf_a1 and
+rf_a2 values in tda18271_rf_tracking_filters_init func, which results in
+values like 20648 for rf_a1 (when it should probably have a value like 0,
+or so slightly negative that it should be zero - this bad value for rf_a1
+would in turn makes the approx calc within
+tda18271c2_rf_tracking_filters_correction go out of whack).  The simplest
+solution i found was to explicitly convert the signedness of the
+denominator to avoid the implicit conversion.  The values placed into the
+u32 rf_freq array should never exceed about 900mhz, so i think the s32 max
+value shouldn't be an issue in this case.
+
+I've tested it out a little, and even when i get a bcal=0 with the
+modified code, the default calibration value gets used, rf_a1 is zero, and
+the tuner seems to lock on the stream and mythtv seems to play it fine.
+
+Signed-off-by: Seth Barry <seth@cyberseth.com>
+Signed-off-by: Michael Krufky <mkrufky@kernellabs.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/common/tuners/tda18271-fe.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/media/common/tuners/tda18271-fe.c
++++ b/drivers/media/common/tuners/tda18271-fe.c
+@@ -595,13 +595,13 @@ static int tda18271_rf_tracking_filters_
+               case RF2:
+                       map[i].rf_a1 = (prog_cal[RF2] - prog_tab[RF2] -
+                                       prog_cal[RF1] + prog_tab[RF1]) /
+-                              ((rf_freq[RF2] - rf_freq[RF1]) / 1000);
++                              (s32)((rf_freq[RF2] - rf_freq[RF1]) / 1000);
+                       map[i].rf2   = rf_freq[RF2] / 1000;
+                       break;
+               case RF3:
+                       map[i].rf_a2 = (prog_cal[RF3] - prog_tab[RF3] -
+                                       prog_cal[RF2] + prog_tab[RF2]) /
+-                              ((rf_freq[RF3] - rf_freq[RF2]) / 1000);
++                              (s32)((rf_freq[RF3] - rf_freq[RF2]) / 1000);
+                       map[i].rf_b2 = prog_cal[RF2] - prog_tab[RF2];
+                       map[i].rf3   = rf_freq[RF3] / 1000;
+                       break;
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:44 2009
+Message-Id: <20091207000644.555026790@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:02 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Henk Vergonet <Henk.Vergonet@gmail.com>,
+ Michael Krufky <mkrufky@kernellabs.com>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>
+Subject: [026/119] V4L/DVB (13107): tda18271: fix overflow in FM radio frequency calculation
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=v4l-dvb-13107-tda18271-fix-overflow-in-fm-radio-frequency-calculation.patch
+Content-Length: 1300
+Lines: 38
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Michael Krufky <mkrufky@kernellabs.com>
+
+commit 4d8317876d5f53ef792e90f89d8f162d7bca5c81 upstream.
+
+Multiplication by 62500 causes an overflow in the 32 bit freq variable,
+which is later divided by 1000 when using FM radio.
+
+This patch prevents the overflow by scaling the frequency value correctly
+upfront.  Thanks to Henk Vergonet for spotting the problem and providing
+a preliminary patch, which this changeset was based upon.
+
+Cc: Henk Vergonet <Henk.Vergonet@gmail.com>
+Signed-off-by: Michael Krufky <mkrufky@kernellabs.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/common/tuners/tda18271-fe.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/media/common/tuners/tda18271-fe.c
++++ b/drivers/media/common/tuners/tda18271-fe.c
+@@ -963,12 +963,12 @@ static int tda18271_set_analog_params(st
+       struct tda18271_std_map_item *map;
+       char *mode;
+       int ret;
+-      u32 freq = params->frequency * 62500;
++      u32 freq = params->frequency * 125 *
++              ((params->mode == V4L2_TUNER_RADIO) ? 1 : 1000) / 2;
+       priv->mode = TDA18271_ANALOG;
+       if (params->mode == V4L2_TUNER_RADIO) {
+-              freq = freq / 1000;
+               map = &std_map->fm_radio;
+               mode = "fm";
+       } else if (params->std & V4L2_STD_MN) {
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:44 2009
+Message-Id: <20091207000644.688098245@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:03 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Devin Heitmueller <dheitmueller@kernellabs.com>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>
+Subject: [027/119] V4L/DVB (13190): em28xx: fix panic that can occur when starting audio streaming
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=v4l-dvb-13190-em28xx-fix-panic-that-can-occur-when-starting-audio-streaming.patch
+Content-Length: 1170
+Lines: 34
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Devin Heitmueller <dheitmueller@kernellabs.com>
+
+commit 96fbf771d86a90ff006bc62ca4d4de6474b3de31 upstream.
+
+Because the counters were not reset when starting up streaming, they would
+be reused from the previous run.  This can result in cases such that when the
+second instance of streaming starts up, the "cnt" variable in
+em28xx_audio_isocirq() can end up being negative, resulting in attempting to
+write to memory before the start of runtime->dma_area (as well as having a
+negative number of bytes to copy).
+
+Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/em28xx/em28xx-audio.c |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/drivers/media/video/em28xx/em28xx-audio.c
++++ b/drivers/media/video/em28xx/em28xx-audio.c
+@@ -383,6 +383,11 @@ static int snd_em28xx_hw_capture_free(st
+ static int snd_em28xx_prepare(struct snd_pcm_substream *substream)
+ {
++      struct em28xx *dev = snd_pcm_substream_chip(substream);
++
++      dev->adev.hwptr_done_capture = 0;
++      dev->adev.capture_transfer_done = 0;
++
+       return 0;
+ }
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:44 2009
+Message-Id: <20091207000644.842360924@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:04 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Martin Samek <martin@marsark.sytes.net>,
+ Devin Heitmueller <dheitmueller@kernellabs.com>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>
+Subject: [028/119] V4L/DVB (13079): dib0700: fixed xc2028 firmware loading kernel oops
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=v4l-dvb-13079-dib0700-fixed-xc2028-firmware-loading-kernel-oops.patch
+Content-Length: 1410
+Lines: 36
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Martin Samek <martin@marsark.sytes.net>
+
+commit 7646b9de26c54cf4bc9c446d7ada9f91ece31e0a upstream.
+
+Fixing kernel oops when driver attemps to load xc2028 firmware.
+
+Note by djh: the patch contribute by Martin is a port of a fix I made during
+the PCTV 340e development.  It's a temporary workaround that fixes a regression
+(an OOPS condition) and the real fix should be in the code that manages the
+i2c master on the dib7000p.  But this fix does address the immmediate
+regression and should be merged upstream until we do a cleaner fix.
+
+Signed-off-by: Martin Samek <martin@marsark.sytes.net>
+Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/dvb/frontends/dib7000p.c |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/drivers/media/dvb/frontends/dib7000p.c
++++ b/drivers/media/dvb/frontends/dib7000p.c
+@@ -1344,6 +1344,11 @@ struct dvb_frontend * dib7000p_attach(st
+       if (dib7000p_identify(st) != 0)
+               goto error;
++      /* FIXME: make sure the dev.parent field is initialized, or else
++      request_firmware() will hit an OOPS (this should be moved somewhere
++      more common) */
++      st->i2c_master.gated_tuner_i2c_adap.dev.parent = i2c_adap->dev.parent;
++
+       dibx000_init_i2c_master(&st->i2c_master, DIB7000P, st->i2c_adap, st->i2c_addr);
+       dib7000p_demod_reset(st);
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:45 2009
+Message-Id: <20091207000644.975903460@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:05 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Mike Isely <isely@pobox.com>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>
+Subject: [029/119] V4L/DVB (13230): s2255drv: Dont conditionalize video buffer completion on waiting processes
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=v4l-dvb-13230-s2255drv-don-t-conditionalize-video-buffer-completion-on-waiting-processes.patch
+Content-Length: 1820
+Lines: 44
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Mike Isely <isely@pobox.com>
+
+commit 1f95725755ab67f3198df3b5bf7517f926f310ca upstream.
+
+The s2255 driver had logic which aborted processing of a video frame
+if there was no process waiting on the video buffer in question.  That
+simply doesn't work when the application is doing things in an
+asynchronous manner.  If the application went to the trouble to queue
+the buffer in the first place, then the driver should always attempt
+to complete it - even if the application at that moment has its
+attention turned elsewhere.  Applications which always blocked waiting
+for I/O on the capture device would not have been affected by this.
+Applications which *mostly* blocked waiting for I/O on the capture
+device probably only would have been somewhat affected (frame lossage,
+at a rate which goes up as the application blocks less).  Applications
+which never blocked on the capture device (e.g. polling only) however
+would never have been able to receive any video frames, since in that
+case this "is anyone waiting on this?" check on the buffer never would
+have evalutated true.  This patch just deletes that harmful check
+against the buffer's wait queue.
+
+Signed-off-by: Mike Isely <isely@pobox.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/s2255drv.c |    5 -----
+ 1 file changed, 5 deletions(-)
+
+--- a/drivers/media/video/s2255drv.c
++++ b/drivers/media/video/s2255drv.c
+@@ -598,11 +598,6 @@ static int s2255_got_frame(struct s2255_
+       buf = list_entry(dma_q->active.next,
+                        struct s2255_buffer, vb.queue);
+-      if (!waitqueue_active(&buf->vb.done)) {
+-              /* no one active */
+-              rc = -1;
+-              goto unlock;
+-      }
+       list_del(&buf->vb.queue);
+       do_gettimeofday(&buf->vb.ts);
+       dprintk(100, "[%p/%d] wakeup\n", buf, buf->vb.i);
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:45 2009
+Message-Id: <20091207000645.124173920@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:06 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Thomas Gleixner <tglx@linutronix.de>,
+ Dhaval Giani <dhaval@linux.vnet.ibm.com>,
+ "Paul E. McKenney" <paulmck@us.ibm.com>,
+ Kay Sievers <kay.sievers@vrfy.org>
+Subject: [030/119] uids: Prevent tear down race
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=uids-prevent-tear-down-race.patch
+Content-Length: 2443
+Lines: 66
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Thomas Gleixner <tglx@linutronix.de>
+
+commit b00bc0b237055b4c45816325ee14f0bd83e6f590 upstream.
+
+Ingo triggered the following warning:
+
+WARNING: at lib/debugobjects.c:255 debug_print_object+0x42/0x50()
+Hardware name: System Product Name
+ODEBUG: init active object type: timer_list
+Modules linked in:
+Pid: 2619, comm: dmesg Tainted: G        W  2.6.32-rc5-tip+ #5298
+Call Trace:
+ [<81035443>] warn_slowpath_common+0x6a/0x81
+ [<8120e483>] ? debug_print_object+0x42/0x50
+ [<81035498>] warn_slowpath_fmt+0x29/0x2c
+ [<8120e483>] debug_print_object+0x42/0x50
+ [<8120ec2a>] __debug_object_init+0x279/0x2d7
+ [<8120ecb3>] debug_object_init+0x13/0x18
+ [<810409d2>] init_timer_key+0x17/0x6f
+ [<81041526>] free_uid+0x50/0x6c
+ [<8104ed2d>] put_cred_rcu+0x61/0x72
+ [<81067fac>] rcu_do_batch+0x70/0x121
+
+debugobjects warns about an enqueued timer being initialized. If
+CONFIG_USER_SCHED=y the user management code uses delayed work to
+remove the user from the hash table and tear down the sysfs objects.
+
+free_uid is called from RCU and initializes/schedules delayed work if
+the usage count of the user_struct is 0. The init/schedule happens
+outside of the uidhash_lock protected region which allows a concurrent
+caller of find_user() to reference the about to be destroyed
+user_struct w/o preventing the work from being scheduled. If the next
+free_uid call happens before the work timer expired then the active
+timer is initialized and the work scheduled again.
+
+The race was introduced in commit 5cb350ba (sched: group scheduling,
+sysfs tunables) and made more prominent by commit 3959214f (sched:
+delayed cleanup of user_struct)
+
+Move the init/schedule_delayed_work inside of the uidhash_lock
+protected region to prevent the race.
+
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Acked-by: Dhaval Giani <dhaval@linux.vnet.ibm.com>
+Cc: Paul E. McKenney <paulmck@us.ibm.com>
+Cc: Kay Sievers <kay.sievers@vrfy.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/user.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/kernel/user.c
++++ b/kernel/user.c
+@@ -330,9 +330,9 @@ done:
+  */
+ static void free_user(struct user_struct *up, unsigned long flags)
+ {
+-      spin_unlock_irqrestore(&uidhash_lock, flags);
+       INIT_DELAYED_WORK(&up->work, cleanup_user_struct);
+       schedule_delayed_work(&up->work, msecs_to_jiffies(1000));
++      spin_unlock_irqrestore(&uidhash_lock, flags);
+ }
+ #else /* CONFIG_USER_SCHED && CONFIG_SYSFS */
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:45 2009
+Message-Id: <20091207000645.293589784@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:07 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Rodolfo Giometti <giometti@linux.it>
+Subject: [031/119] pps: events reporting fix up
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=pps-events-reporting-fix-up.patch
+Content-Length: 2582
+Lines: 79
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Rodolfo Giometti <giometti@linux.it>
+
+commit 276b282e904f690dc930f9bc946110651f297669 upstream.
+
+PPS events must be recorded according to PPS's mode settings.
+
+If a process asks for (i.e.) capture-assert events only, when the PPS
+client calls the pps_event() function to save the current PPS event, we
+should verify the event type and then discard unwanted ones.
+
+Also, without this patch userland processes waiting for a specific PPS
+event (assert or clear but not both) may be awakened at wrong time.
+
+Signed-off-by: Rodolfo Giometti <giometti@linux.it>
+Tested-by: William S. Brasher <billb958@door.net>
+Tested-by: Reg Clemens <clemens@dwf.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/pps/kapi.c |   20 +++++++++++++++-----
+ 1 file changed, 15 insertions(+), 5 deletions(-)
+
+--- a/drivers/pps/kapi.c
++++ b/drivers/pps/kapi.c
+@@ -271,6 +271,7 @@ void pps_event(int source, struct pps_kt
+ {
+       struct pps_device *pps;
+       unsigned long flags;
++      int captured = 0;
+       if ((event & (PPS_CAPTUREASSERT | PPS_CAPTURECLEAR)) == 0) {
+               printk(KERN_ERR "pps: unknown event (%x) for source %d\n",
+@@ -293,7 +294,8 @@ void pps_event(int source, struct pps_kt
+       /* Check the event */
+       pps->current_mode = pps->params.mode;
+-      if (event & PPS_CAPTUREASSERT) {
++      if ((event & PPS_CAPTUREASSERT) &
++                      (pps->params.mode & PPS_CAPTUREASSERT)) {
+               /* We have to add an offset? */
+               if (pps->params.mode & PPS_OFFSETASSERT)
+                       pps_add_offset(ts, &pps->params.assert_off_tu);
+@@ -303,8 +305,11 @@ void pps_event(int source, struct pps_kt
+               pps->assert_sequence++;
+               pr_debug("capture assert seq #%u for source %d\n",
+                       pps->assert_sequence, source);
++
++              captured = ~0;
+       }
+-      if (event & PPS_CAPTURECLEAR) {
++      if ((event & PPS_CAPTURECLEAR) &
++                      (pps->params.mode & PPS_CAPTURECLEAR)) {
+               /* We have to add an offset? */
+               if (pps->params.mode & PPS_OFFSETCLEAR)
+                       pps_add_offset(ts, &pps->params.clear_off_tu);
+@@ -314,12 +319,17 @@ void pps_event(int source, struct pps_kt
+               pps->clear_sequence++;
+               pr_debug("capture clear seq #%u for source %d\n",
+                       pps->clear_sequence, source);
++
++              captured = ~0;
+       }
+-      pps->go = ~0;
+-      wake_up_interruptible(&pps->queue);
++      /* Wake up iif captured somthing */
++      if (captured) {
++              pps->go = ~0;
++              wake_up_interruptible(&pps->queue);
+-      kill_fasync(&pps->async_queue, SIGIO, POLL_IN);
++              kill_fasync(&pps->async_queue, SIGIO, POLL_IN);
++      }
+       spin_unlock_irqrestore(&pps->lock, flags);
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:45 2009
+Message-Id: <20091207000645.465147414@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:08 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Rodolfo Giometti <giometti@linux.it>
+Subject: [032/119] pps: locking scheme fix up for PPS_GETPARAMS
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=pps-locking-scheme-fix-up-for-pps_getparams.patch
+Content-Length: 1091
+Lines: 38
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Rodolfo Giometti <giometti@linux.it>
+
+commit cbf83cc5a29dba480cf1ba1c5e3417a0d4a31410 upstream.
+
+Userland programs may read/write PPS parameters at same time and these
+operations may corrupt PPS data.
+
+Signed-off-by: Rodolfo Giometti <giometti@linux.it>
+Tested-by: Reg Clemens <clemens@dwf.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/pps/pps.c |   11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+--- a/drivers/pps/pps.c
++++ b/drivers/pps/pps.c
+@@ -71,9 +71,14 @@ static long pps_cdev_ioctl(struct file *
+       case PPS_GETPARAMS:
+               pr_debug("PPS_GETPARAMS: source %d\n", pps->id);
+-              /* Return current parameters */
+-              err = copy_to_user(uarg, &pps->params,
+-                                              sizeof(struct pps_kparams));
++              spin_lock_irq(&pps->lock);
++
++              /* Get the current parameters */
++              params = pps->params;
++
++              spin_unlock_irq(&pps->lock);
++
++              err = copy_to_user(uarg, &params, sizeof(struct pps_kparams));
+               if (err)
+                       return -EFAULT;
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:45 2009
+Message-Id: <20091207000645.634727566@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:09 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Alessandro Zummo <a.zummo@towertech.it>,
+ Paul Gortmaker <p_gortmaker@yahoo.com>,
+ Raphael Assenat <raph@8d.com>
+Subject: [033/119] rtc: v3020: fix v3020_mmio_read_bit()
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=rtc-v3020-fix-v3020_mmio_read_bit.patch
+Content-Length: 1345
+Lines: 38
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Scott Valentine <svalentine@concentris-systems.com>
+
+commit bcb3a1676b87effbdeffe8da5c44f63433d158d9 upstream.
+
+v3020_mmio_read_bit() always returns 0 when left_shift > 7.
+
+v3020_mmio_read_bit()'s return type is (unsigned char).  The code returns
+a value masked by (1 << left_shift) that is casted to the return type.  If
+left_shift is larger than 7, the cast will always result in a 0 return
+value.  The problem was discovered with left_shift = 16, and the included
+patch corrects the problem.
+
+The bug was introduced in the last (Apr 3 2009) commit of the file, kernel
+versions 2.6.30 and later.
+
+Cc: Alessandro Zummo <a.zummo@towertech.it>
+Cc: Paul Gortmaker <p_gortmaker@yahoo.com>
+Cc: Raphael Assenat <raph@8d.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/rtc/rtc-v3020.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/rtc/rtc-v3020.c
++++ b/drivers/rtc/rtc-v3020.c
+@@ -96,7 +96,7 @@ static void v3020_mmio_write_bit(struct 
+ static unsigned char v3020_mmio_read_bit(struct v3020 *chip)
+ {
+-      return readl(chip->ioaddress) & (1 << chip->leftshift);
++      return !!(readl(chip->ioaddress) & (1 << chip->leftshift));
+ }
+ static struct v3020_chip_ops v3020_mmio_ops = {
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:45 2009
+Message-Id: <20091207000645.840002105@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:10 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Heiko Carstens <heiko.carstens@de.ibm.com>,
+ Ankit Jain <me@ankitjain.org>,
+ Christoph Hellwig <hch@lst.de>,
+ Al Viro <viro@zeniv.linux.org.uk>,
+ Arnd Bergmann <arndbergmann@googlemail.com>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [034/119] fs: add missing compat_ptr handling for FS_IOC_RESVSP ioctl
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=fs-add-missing-compat_ptr-handling-for-fs_ioc_resvsp-ioctl.patch
+Content-Length: 1667
+Lines: 46
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Heiko Carstens <heiko.carstens@de.ibm.com>
+
+commit 7779d7bed950a7fb1af4f540c2f82a6b81b65901 upstream.
+
+For FS_IOC_RESVSP and FS_IOC_RESVSP64 compat_sys_ioctl() uses its
+arg argument as a pointer to userspace. However it is missing a
+a call to compat_ptr() which will do a proper pointer conversion.
+
+This was introduced with 3e63cbb1 "fs: Add new pre-allocation ioctls
+to vfs for compatibility with legacy xfs ioctls".
+
+Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
+Cc: Ankit Jain <me@ankitjain.org>
+Acked-by: Christoph Hellwig <hch@lst.de>
+Cc: Al Viro <viro@zeniv.linux.org.uk>
+Acked-by: Arnd Bergmann <arndbergmann@googlemail.com>
+Acked-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/compat_ioctl.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/fs/compat_ioctl.c
++++ b/fs/compat_ioctl.c
+@@ -1800,7 +1800,7 @@ struct space_resv_32 {
+ /* just account for different alignment */
+ static int compat_ioctl_preallocate(struct file *file, unsigned long arg)
+ {
+-      struct space_resv_32    __user *p32 = (void __user *)arg;
++      struct space_resv_32    __user *p32 = compat_ptr(arg);
+       struct space_resv       __user *p = compat_alloc_user_space(sizeof(*p));
+       if (copy_in_user(&p->l_type,    &p32->l_type,   sizeof(s16)) ||
+@@ -2802,7 +2802,7 @@ asmlinkage long compat_sys_ioctl(unsigne
+ #else
+       case FS_IOC_RESVSP:
+       case FS_IOC_RESVSP64:
+-              error = ioctl_preallocate(filp, (void __user *)arg);
++              error = ioctl_preallocate(filp, compat_ptr(arg));
+               goto out_fput;
+ #endif
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:46 2009
+Message-Id: <20091207000646.002713921@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:11 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Balbir Singh <balbir@in.ibm.com>,
+ KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
+Subject: [035/119] memcg: fix wrong pointer initialization at page migration when memcg is disabled.
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=memcg-fix-wrong-pointer-initialization-at-page-migration-when-memcg-is-disabled.patch
+Content-Length: 1301
+Lines: 40
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
+
+commit e00e431612c3a6e437a01f2129fd3843da0c982a upstream.
+
+Lee Schermerhorn reported that he saw bad pointer dereference in
+mem_cgroup_end_migration() when he disabled memcg by boot option.
+
+memcg's page migration logic works as
+
+       mem_cgroup_prepare_migration(page, &ptr);
+       do page migration
+       mem_cgroup_end_migration(page, ptr);
+
+Now, ptr is not initialized in prepare_migration when memcg is disabled
+by boot option. This causes panic in end_migration. This patch fixes it.
+
+Reported-by: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
+Cc: Balbir Singh <balbir@in.ibm.com>
+Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
+Reviewed-by: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ mm/migrate.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/mm/migrate.c
++++ b/mm/migrate.c
+@@ -597,7 +597,7 @@ static int unmap_and_move(new_page_t get
+       struct page *newpage = get_new_page(page, private, &result);
+       int rcu_locked = 0;
+       int charge = 0;
+-      struct mem_cgroup *mem;
++      struct mem_cgroup *mem = NULL;
+       if (!newpage)
+               return -ENOMEM;
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:46 2009
+Message-Id: <20091207000646.180789285@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:12 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Sukadev Bhattiprolu <sukadev@us.ibm.com>,
+ "Eric W. Biederman" <ebiederm@xmission.com>,
+ Jan Kara <jack@ucw.cz>,
+ Andrea Arcangeli <andrea@cpushare.com>,
+ Serge Hallyn <serue@us.ibm.com>
+Subject: [036/119] pidns: fix a leak in /proc dentries and inodes with pid namespaces.
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=pidns-fix-a-leak-in-proc-dentries-and-inodes-with-pid-namespaces.patch
+Content-Length: 2251
+Lines: 58
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
+
+commit 29f12ca32122db98481150be09d35bd72b68045e upstream.
+
+Daniel Lezcano reported a leak in 'struct pid' and 'struct pid_namespace'
+that is discussed in:
+
+       http://lkml.org/lkml/2009/10/2/159.
+
+To summarize the thread, when container-init is terminated, it sets the
+PF_EXITING flag, zaps other processes in the container and waits to reap
+them.  As a part of reaping, the container-init should flush any /proc
+dentries associated with the processes.  But because the container-init is
+itself exiting and the following PF_EXITING check, the dentries are not
+flushed, resulting in leak in /proc inodes and dentries.
+
+This fix reverts the commit 7766755a2f249e7e0 ("Fix /proc dcache deadlock
+in do_exit") which introduced the check for PF_EXITING.  At the time of
+the commit, shrink_dcache_parent() flushed dentries from other filesystems
+also and could have caused a deadlock which the commit fixed.  But as
+pointed out by Eric Biederman, after commit 0feae5c47aabdde59,
+shrink_dcache_parent() no longer affects other filesystems.  So reverting
+the commit is now safe.
+
+As pointed out by Jan Kara, the leak is not as critical since the
+unclaimed space will be reclaimed under memory pressure or by:
+
+       echo 3 > /proc/sys/vm/drop_caches
+
+But since this check is no longer required, its best to remove it.
+
+Signed-off-by: Sukadev Bhattiprolu <sukadev@us.ibm.com>
+Reported-by: Daniel Lezcano <dlezcano@fr.ibm.com>
+Acked-by: Eric W. Biederman <ebiederm@xmission.com>
+Acked-by: Jan Kara <jack@ucw.cz>
+Cc: Andrea Arcangeli <andrea@cpushare.com>
+Cc: Serge Hallyn <serue@us.ibm.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/proc/base.c |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/fs/proc/base.c
++++ b/fs/proc/base.c
+@@ -2580,8 +2580,7 @@ static void proc_flush_task_mnt(struct v
+       name.len = snprintf(buf, sizeof(buf), "%d", pid);
+       dentry = d_hash_and_lookup(mnt->mnt_root, &name);
+       if (dentry) {
+-              if (!(current->flags & PF_EXITING))
+-                      shrink_dcache_parent(dentry);
++              shrink_dcache_parent(dentry);
+               d_drop(dentry);
+               dput(dentry);
+       }
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:46 2009
+Message-Id: <20091207000646.342613889@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:13 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Mel Gorman <mel@csn.ul.ie>,
+ David Rientjes <rientjes@google.com>
+Subject: [037/119] page allocator: Do not allow interrupts to use ALLOC_HARDER
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=page-allocator-do-not-allow-interrupts-to-use-alloc_harder.patch
+Content-Length: 1461
+Lines: 40
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Mel Gorman <mel@csn.ul.ie>
+
+commit 9d0ed60fe9cd1fbf57f755cd27a23ae9114d7210 upstream.
+
+Commit 341ce06f69abfafa31b9468410a13dbd60e2b237 ("page allocator:
+calculate the alloc_flags for allocation only once") altered watermark
+logic slightly by allowing rt_tasks that are handling an interrupt to set
+ALLOC_HARDER.  This patch brings the watermark logic more in line with
+2.6.30.
+
+This change results in a reduction of the number high-order GFP_ATOMIC
+allocation failures reported.  See
+http://www.gossamer-threads.com/lists/linux/kernel/1144153
+
+[rientjes@google.com: Spotted the problem]
+Signed-off-by: Mel Gorman <mel@csn.ul.ie>
+Reviewed-by: Pekka Enberg <penberg@cs.helsinki.fi>
+Reviewed-by: Rik van Riel <riel@redhat.com>
+Reviewed-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
+Cc: David Rientjes <rientjes@google.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ mm/page_alloc.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/mm/page_alloc.c
++++ b/mm/page_alloc.c
+@@ -1715,7 +1715,7 @@ gfp_to_alloc_flags(gfp_t gfp_mask)
+                * See also cpuset_zone_allowed() comment in kernel/cpuset.c.
+                */
+               alloc_flags &= ~ALLOC_CPUSET;
+-      } else if (unlikely(rt_task(p)))
++      } else if (unlikely(rt_task(p)) && !in_interrupt())
+               alloc_flags |= ALLOC_HARDER;
+       if (likely(!(gfp_mask & __GFP_NOMEMALLOC))) {
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:46 2009
+Message-Id: <20091207000646.474598476@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:14 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Mel Gorman <mel@csn.ul.ie>
+Subject: [038/119] page allocator: always wake kswapd when restarting an allocation attempt after direct reclaim failed
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=page-allocator-always-wake-kswapd-when-restarting-an-allocation-attempt-after-direct-reclaim-failed.patch
+Content-Length: 1883
+Lines: 49
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Mel Gorman <mel@csn.ul.ie>
+
+commit cc4a6851466039a8a688c843962a05689059ff3b upstream.
+
+If a direct reclaim makes no forward progress, it considers whether it
+should go OOM or not.  Whether OOM is triggered or not, it may retry the
+allocation afterwards.  In times past, this would always wake kswapd as
+well but currently, kswapd is not woken up after direct reclaim fails.
+For order-0 allocations, this makes little difference but if there is a
+heavy mix of higher-order allocations that direct reclaim is failing for,
+it might mean that kswapd is not rewoken for higher orders as much as it
+did previously.
+
+This patch wakes up kswapd when an allocation is being retried after a
+direct reclaim failure.  It would be expected that kswapd is already
+awake, but this has the effect of telling kswapd to reclaim at the higher
+order as well.
+
+Signed-off-by: Mel Gorman <mel@csn.ul.ie>
+Reviewed-by: Christoph Lameter <cl@linux-foundation.org>
+Reviewed-by: Pekka Enberg <penberg@cs.helsinki.fi>
+Reviewed-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ mm/page_alloc.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/mm/page_alloc.c
++++ b/mm/page_alloc.c
+@@ -1763,6 +1763,7 @@ __alloc_pages_slowpath(gfp_t gfp_mask, u
+       if (NUMA_BUILD && (gfp_mask & GFP_THISNODE) == GFP_THISNODE)
+               goto nopage;
++restart:
+       wake_all_kswapd(order, zonelist, high_zoneidx);
+       /*
+@@ -1772,7 +1773,6 @@ __alloc_pages_slowpath(gfp_t gfp_mask, u
+        */
+       alloc_flags = gfp_to_alloc_flags(gfp_mask);
+-restart:
+       /* This is the last chance, in general, before the goto nopage. */
+       page = get_page_from_freelist(gfp_mask, nodemask, order, zonelist,
+                       high_zoneidx, alloc_flags & ~ALLOC_NO_WATERMARKS,
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:46 2009
+Message-Id: <20091207000646.604074717@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:15 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Alan Cox <alan@linux.intel.com>
+Subject: [039/119] tty_port: If we are opened non blocking we still need to raise the carrier
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=tty_port-if-we-are-opened-non-blocking-we-still-need-to-raise-the-carrier.patch
+Content-Length: 1243
+Lines: 38
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Alan Cox <alan@linux.intel.com>
+
+commit 4175f3e31cc7157669aa66d46dc79de6ae0126ce upstream.
+
+Original discussion:
+http://thread.gmane.org/gmane.linux.usb.general/23217/focus=23248
+or
+http://marc.info/?l=linux-usb&m=125553790714133&w=2
+
+The tty_port code inherited a bug common to various drivers it was based
+upon. If the tty is opened O_NONBLOCK we do not wait for the carrier to be
+raised but we must still raise our modem lines if appropriate.
+
+(There is a second question here about whether we should do so if CLOCAL is
+ set but that can wait)
+
+Signed-off-by: Alan Cox <alan@linux.intel.com>
+Reported-by: Karl Hiramoto <karl@hiramoto.org>
+Tested-by:  Karl Hiramoto <karl@hiramoto.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/char/tty_port.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/char/tty_port.c
++++ b/drivers/char/tty_port.c
+@@ -219,6 +219,9 @@ int tty_port_block_til_ready(struct tty_
+          the port has just hung up or is in another error state */
+       if ((filp->f_flags & O_NONBLOCK) ||
+                       (tty->flags & (1 << TTY_IO_ERROR))) {
++              /* Indicate we are open */
++              if (tty->termios->c_cflag & CBAUD)
++                      tty_port_raise_dtr_rts(port);
+               port->flags |= ASYNC_NORMAL_ACTIVE;
+               return 0;
+       }
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:46 2009
+Message-Id: <20091207000646.768823232@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:16 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Alan Cox <alan@linux.intel.com>
+Subject: [040/119] tty: cp210x: Fix carrier handling
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=tty-cp210x-fix-carrier-handling.patch
+Content-Length: 2566
+Lines: 80
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Alan Cox <alan@linux.intel.com>
+
+commit d94c7bd4c1361cab58a21d530078c5673863dcc2 upstream.
+
+Original discussion:
+http://thread.gmane.org/gmane.linux.usb.general/23217/focus=23248
+or
+http://marc.info/?l=linux-usb&m=125553790714133&w=2
+
+9a68e39d4a701fb3be03cae9b462408664ebd205 broke carrier handling so that a
+cp210x setup which needed the carrier lines set up (non CLOCAL) which did
+not make a call which set the termios bits left the lines down even if
+CLOCAL was not asserted.
+
+Fix this not by reverting but by adding the proper dtr_rts and
+carrier_raised methods. This both sets the modem lines properly and also
+implements the correct blocking semantics for the port as required by
+POSIX.
+
+Signed-off-by: Alan Cox <alan@linux.intel.com>
+Reported-by: Karl Hiramoto <karl@hiramoto.org>
+Tested-by:  Karl Hiramoto <karl@hiramoto.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/cp210x.c |   21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
+
+--- a/drivers/usb/serial/cp210x.c
++++ b/drivers/usb/serial/cp210x.c
+@@ -51,6 +51,8 @@ static int cp210x_tiocmset_port(struct u
+ static void cp210x_break_ctl(struct tty_struct *, int);
+ static int cp210x_startup(struct usb_serial *);
+ static void cp210x_disconnect(struct usb_serial *);
++static void cp210x_dtr_rts(struct usb_serial_port *p, int on);
++static int cp210x_carrier_raised(struct usb_serial_port *p);
+ static int debug;
+@@ -144,6 +146,8 @@ static struct usb_serial_driver cp210x_d
+       .tiocmset               = cp210x_tiocmset,
+       .attach                 = cp210x_startup,
+       .disconnect             = cp210x_disconnect,
++      .dtr_rts                = cp210x_dtr_rts,
++      .carrier_raised         = cp210x_carrier_raised
+ };
+ /* Config request types */
+@@ -748,6 +752,14 @@ static int cp210x_tiocmset_port(struct u
+       return cp210x_set_config(port, CP210X_SET_MHS, &control, 2);
+ }
++static void cp210x_dtr_rts(struct usb_serial_port *p, int on)
++{
++      if (on)
++              cp210x_tiocmset_port(p, NULL,  TIOCM_DTR|TIOCM_RTS, 0);
++      else
++              cp210x_tiocmset_port(p, NULL,  0, TIOCM_DTR|TIOCM_RTS);
++}
++
+ static int cp210x_tiocmget (struct tty_struct *tty, struct file *file)
+ {
+       struct usb_serial_port *port = tty->driver_data;
+@@ -770,6 +782,15 @@ static int cp210x_tiocmget (struct tty_s
+       return result;
+ }
++static int cp210x_carrier_raised(struct usb_serial_port *p)
++{
++      unsigned int control;
++      cp210x_get_config(p, CP210X_GET_MDMSTS, &control, 1);
++      if (control & CONTROL_DCD)
++              return 1;
++      return 0;
++}
++
+ static void cp210x_break_ctl (struct tty_struct *tty, int break_state)
+ {
+       struct usb_serial_port *port = tty->driver_data;
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:47 2009
+Message-Id: <20091207000646.961519997@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:17 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Libin Yang <libin.yang@amd.com>,
+ David Brownell <dbrownell@users.sourceforge.net>,
+ Alan Stern <stern@rowland.harvard.edu>
+Subject: [041/119] USB: ohci: quirk AMD prefetch for USB 1.1 ISO transfer
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=usb-ohci-quirk-amd-prefetch-for-usb-1.1-iso-transfer.patch
+Content-Length: 4442
+Lines: 145
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Libin Yang <libin.yang@amd.com>
+
+commit a1f17a872bc7b1cb7efdd5486a2963e88a536e61 upstream.
+
+The following patch in the driver is required to avoid USB 1.1 device
+failures that may occur due to requests from USB OHCI controllers may
+be overwritten if the latency for any pending request by the USB
+controller is very long (in the range of milliseconds).
+
+Signed-off-by: Libin Yang <libin.yang@amd.com>
+Cc: David Brownell <dbrownell@users.sourceforge.net>
+Cc: Alan Stern <stern@rowland.harvard.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/ohci-hcd.c |    5 +++++
+ drivers/usb/host/ohci-pci.c |   20 ++++++++++++++++++++
+ drivers/usb/host/ohci-q.c   |   18 ++++++++++++------
+ drivers/usb/host/ohci.h     |    9 +++++++++
+ 4 files changed, 46 insertions(+), 6 deletions(-)
+
+--- a/drivers/usb/host/ohci.h
++++ b/drivers/usb/host/ohci.h
+@@ -402,6 +402,7 @@ struct ohci_hcd {
+ #define       OHCI_QUIRK_FRAME_NO     0x80                    /* no big endian frame_no shift */
+ #define       OHCI_QUIRK_HUB_POWER    0x100                   /* distrust firmware power/oc setup */
+ #define       OHCI_QUIRK_AMD_ISO      0x200                   /* ISO transfers*/
++#define       OHCI_QUIRK_AMD_PREFETCH 0x400                   /* pre-fetch for ISO transfer */
+       // there are also chip quirks/bugs in init logic
+       struct work_struct      nec_work;       /* Worker for NEC quirk */
+@@ -433,6 +434,10 @@ static inline int quirk_amdiso(struct oh
+ {
+       return ohci->flags & OHCI_QUIRK_AMD_ISO;
+ }
++static inline int quirk_amdprefetch(struct ohci_hcd *ohci)
++{
++      return ohci->flags & OHCI_QUIRK_AMD_PREFETCH;
++}
+ #else
+ static inline int quirk_nec(struct ohci_hcd *ohci)
+ {
+@@ -446,6 +451,10 @@ static inline int quirk_amdiso(struct oh
+ {
+       return 0;
+ }
++static inline int quirk_amdprefetch(struct ohci_hcd *ohci)
++{
++      return 0;
++}
+ #endif
+ /* convert between an hcd pointer and the corresponding ohci_hcd */
+--- a/drivers/usb/host/ohci-hcd.c
++++ b/drivers/usb/host/ohci-hcd.c
+@@ -88,6 +88,7 @@ static int ohci_restart (struct ohci_hcd
+ #ifdef CONFIG_PCI
+ static void quirk_amd_pll(int state);
+ static void amd_iso_dev_put(void);
++static void sb800_prefetch(struct ohci_hcd *ohci, int on);
+ #else
+ static inline void quirk_amd_pll(int state)
+ {
+@@ -97,6 +98,10 @@ static inline void amd_iso_dev_put(void)
+ {
+       return;
+ }
++static inline void sb800_prefetch(struct ohci_hcd *ohci, int on)
++{
++      return;
++}
+ #endif
+--- a/drivers/usb/host/ohci-pci.c
++++ b/drivers/usb/host/ohci-pci.c
+@@ -177,6 +177,13 @@ static int ohci_quirk_amd700(struct usb_
+               return 0;
+       pci_read_config_byte(amd_smbus_dev, PCI_REVISION_ID, &rev);
++
++      /* SB800 needs pre-fetch fix */
++      if ((rev >= 0x40) && (rev <= 0x4f)) {
++              ohci->flags |= OHCI_QUIRK_AMD_PREFETCH;
++              ohci_dbg(ohci, "enabled AMD prefetch quirk\n");
++      }
++
+       if ((rev > 0x3b) || (rev < 0x30)) {
+               pci_dev_put(amd_smbus_dev);
+               amd_smbus_dev = NULL;
+@@ -262,6 +269,19 @@ static void amd_iso_dev_put(void)
+ }
++static void sb800_prefetch(struct ohci_hcd *ohci, int on)
++{
++      struct pci_dev *pdev;
++      u16 misc;
++
++      pdev = to_pci_dev(ohci_to_hcd(ohci)->self.controller);
++      pci_read_config_word(pdev, 0x50, &misc);
++      if (on == 0)
++              pci_write_config_word(pdev, 0x50, misc & 0xfcff);
++      else
++              pci_write_config_word(pdev, 0x50, misc | 0x0300);
++}
++
+ /* List of quirks for OHCI */
+ static const struct pci_device_id ohci_pci_quirks[] = {
+       {
+--- a/drivers/usb/host/ohci-q.c
++++ b/drivers/usb/host/ohci-q.c
+@@ -49,9 +49,12 @@ __acquires(ohci->lock)
+       switch (usb_pipetype (urb->pipe)) {
+       case PIPE_ISOCHRONOUS:
+               ohci_to_hcd(ohci)->self.bandwidth_isoc_reqs--;
+-              if (ohci_to_hcd(ohci)->self.bandwidth_isoc_reqs == 0
+-                              && quirk_amdiso(ohci))
+-                      quirk_amd_pll(1);
++              if (ohci_to_hcd(ohci)->self.bandwidth_isoc_reqs == 0) {
++                      if (quirk_amdiso(ohci))
++                              quirk_amd_pll(1);
++                      if (quirk_amdprefetch(ohci))
++                              sb800_prefetch(ohci, 0);
++              }
+               break;
+       case PIPE_INTERRUPT:
+               ohci_to_hcd(ohci)->self.bandwidth_int_reqs--;
+@@ -680,9 +683,12 @@ static void td_submit_urb (
+                               data + urb->iso_frame_desc [cnt].offset,
+                               urb->iso_frame_desc [cnt].length, urb, cnt);
+               }
+-              if (ohci_to_hcd(ohci)->self.bandwidth_isoc_reqs == 0
+-                              && quirk_amdiso(ohci))
+-                      quirk_amd_pll(0);
++              if (ohci_to_hcd(ohci)->self.bandwidth_isoc_reqs == 0) {
++                      if (quirk_amdiso(ohci))
++                              quirk_amd_pll(0);
++                      if (quirk_amdprefetch(ohci))
++                              sb800_prefetch(ohci, 1);
++              }
+               periodic = ohci_to_hcd(ohci)->self.bandwidth_isoc_reqs++ == 0
+                       && ohci_to_hcd(ohci)->self.bandwidth_int_reqs == 0;
+               break;
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:47 2009
+Message-Id: <20091207000647.094897781@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:18 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Alan Stern <stern@rowland.harvard.edu>,
+ Pete Zaitcev <zaitcev@redhat.com>
+Subject: [042/119] USB: usbmon: fix bug in mon_buff_area_shrink
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=usb-usbmon-fix-bug-in-mon_buff_area_shrink.patch
+Content-Length: 2366
+Lines: 65
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit fca94748c5136ff390eadc443871b82f1f77dcd6 upstream.
+
+This patch (as1299b) fixes a bug in an error-handling path of usbmon's
+binary interface.  The storage area for URB data is divided into
+fixed-size blocks.  If an URB's data can't be copied, the area
+reserved for it should be decreased to the size of the truncated
+information (rounded up to a block boundary).  Rounding up the amount
+to be removed and subtracting it from the reserved size is definitely
+the wrong thing to do.
+
+Also, when the data for an isochronous URB can't be copied, we can
+still copy the isoc packet descriptors.  In fact the current code does
+copy the descriptors, but then sets the capture length to 0 so they
+remain inaccessible.  The capture length should be reduced to the
+length of the descriptors, not set to 0.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Acked-by: Pete Zaitcev <zaitcev@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/mon/mon_bin.c |   11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+--- a/drivers/usb/mon/mon_bin.c
++++ b/drivers/usb/mon/mon_bin.c
+@@ -350,12 +350,12 @@ static unsigned int mon_buff_area_alloc_
+ /*
+  * Return a few (kilo-)bytes to the head of the buffer.
+- * This is used if a DMA fetch fails.
++ * This is used if a data fetch fails.
+  */
+ static void mon_buff_area_shrink(struct mon_reader_bin *rp, unsigned int size)
+ {
+-      size = (size + PKT_ALIGN-1) & ~(PKT_ALIGN-1);
++      /* size &= ~(PKT_ALIGN-1);  -- we're called with aligned size */
+       rp->b_cnt -= size;
+       if (rp->b_in < size)
+               rp->b_in += rp->b_size;
+@@ -442,6 +442,7 @@ static void mon_bin_event(struct mon_rea
+       unsigned int urb_length;
+       unsigned int offset;
+       unsigned int length;
++      unsigned int delta;
+       unsigned int ndesc, lendesc;
+       unsigned char dir;
+       struct mon_bin_hdr *ep;
+@@ -546,8 +547,10 @@ static void mon_bin_event(struct mon_rea
+       if (length != 0) {
+               ep->flag_data = mon_bin_get_data(rp, offset, urb, length);
+               if (ep->flag_data != 0) {       /* Yes, it's 0x00, not '0' */
+-                      ep->len_cap = 0;
+-                      mon_buff_area_shrink(rp, length);
++                      delta = (ep->len_cap + PKT_ALIGN-1) & ~(PKT_ALIGN-1);
++                      ep->len_cap -= length;
++                      delta -= (ep->len_cap + PKT_ALIGN-1) & ~(PKT_ALIGN-1);
++                      mon_buff_area_shrink(rp, delta);
+               }
+       } else {
+               ep->flag_data = data_tag;
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:47 2009
+Message-Id: <20091207000647.288211308@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:19 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Zhang Le <r0bertz@gentoo.org>
+Subject: [043/119] USB: option.c: add support for D-Link DWM-162-U5
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=usb-option.c-add-support-for-d-link-dwm-162-u5.patch
+Content-Length: 1534
+Lines: 40
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Zhang Le <r0bertz@gentoo.org>
+
+commit ff854ce0b17161a86b5ae444c6cb0aa221720fab upstream.
+
+Add D-Link DWM-162-U5 device id 1e0e:ce16 into option driver. The device
+has 4 interfaces, of which 1 is handled by storage and the other 3 by
+option driver.
+
+The device appears first as CD-only 05c6:2100 device and must be
+switched to 1e0e:ce16 mode either by using "eject CD" or usb_modeswitch.
+
+The MessageContent for usb_modeswitch.conf is:
+"55534243e0c26a85000000000000061b000000020000000000000000000000"
+
+Signed-off-by: Zhang Le <r0bertz@gentoo.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/option.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -309,6 +309,7 @@ static int  option_resume(struct usb_ser
+ #define DLINK_VENDOR_ID                               0x1186
+ #define DLINK_PRODUCT_DWM_652                 0x3e04
++#define DLINK_PRODUCT_DWM_652_U5              0xce16
+ #define QISDA_VENDOR_ID                               0x1da5
+ #define QISDA_PRODUCT_H21_4512                        0x4512
+@@ -587,6 +588,7 @@ static struct usb_device_id option_ids[]
+       { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC2726, 0xff, 0xff, 0xff) },
+       { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) },
+       { USB_DEVICE(DLINK_VENDOR_ID, DLINK_PRODUCT_DWM_652) },
++      { USB_DEVICE(ALINK_VENDOR_ID, DLINK_PRODUCT_DWM_652_U5) }, /* Yes, ALINK_VENDOR_ID */
+       { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H21_4512) },
+       { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H21_4523) },
+       { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H20_4515) },
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:47 2009
+Message-Id: <20091207000647.524185088@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:20 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Henry Gebhardt <gebhardt@astro.uni-tuebingen.de>,
+ Oliver Neukum <oliver@neukum.org>
+Subject: [044/119] USB: cdc_acm: Fix race condition when opening tty
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=usb-cdc_acm-fix-race-condition-when-opening-tty.patch
+Content-Length: 870
+Lines: 29
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Henry Gebhardt <gebhardt@astro.uni-tuebingen.de>
+
+commit 18a77b5d237a67d2c621a46f5271a3b51da1b380 upstream.
+
+If acm_rx_tasklet() gets called before tty_port_block_til_ready()
+returns, then bulk IN urbs may not be sent. This fixes it.
+
+Signed-off-by: Henry Gebhardt <gebhardt@astro.uni-tuebingen.de>
+Acked-by: Oliver Neukum <oliver@neukum.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/class/cdc-acm.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/class/cdc-acm.c
++++ b/drivers/usb/class/cdc-acm.c
+@@ -609,9 +609,9 @@ static int acm_tty_open(struct tty_struc
+       acm->throttle = 0;
+-      tasklet_schedule(&acm->urb_task);
+       set_bit(ASYNCB_INITIALIZED, &acm->port.flags);
+       rv = tty_port_block_til_ready(&acm->port, tty, filp);
++      tasklet_schedule(&acm->urb_task);
+ done:
+       mutex_unlock(&acm->mutex);
+ err_out:
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:48 2009
+Message-Id: <20091207000648.061330734@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:21 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Subject: [045/119] USB: xhci: Fix bug memory free after failed initialization.
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=usb-xhci-fix-bug-memory-free-after-failed-initialization.patch
+Content-Length: 1214
+Lines: 33
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+
+commit d94c05e33d9212ee67b8d4998f984cc71df8168b upstream.
+
+If the xHCI driver fails during the memory initialization, xhci->ir_set
+may not be a valid pointer.  Check that it points to valid DMA'able memory
+before writing to that address during the memory freeing process.
+
+Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/xhci-mem.c |    8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+--- a/drivers/usb/host/xhci-mem.c
++++ b/drivers/usb/host/xhci-mem.c
+@@ -756,9 +756,11 @@ void xhci_mem_cleanup(struct xhci_hcd *x
+       int i;
+       /* Free the Event Ring Segment Table and the actual Event Ring */
+-      xhci_writel(xhci, 0, &xhci->ir_set->erst_size);
+-      xhci_write_64(xhci, 0, &xhci->ir_set->erst_base);
+-      xhci_write_64(xhci, 0, &xhci->ir_set->erst_dequeue);
++      if (xhci->ir_set) {
++              xhci_writel(xhci, 0, &xhci->ir_set->erst_size);
++              xhci_write_64(xhci, 0, &xhci->ir_set->erst_base);
++              xhci_write_64(xhci, 0, &xhci->ir_set->erst_dequeue);
++      }
+       size = sizeof(struct xhci_erst_entry)*(xhci->erst.num_entries);
+       if (xhci->erst.entries)
+               pci_free_consistent(pdev, size,
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:48 2009
+Message-Id: <20091207000648.343901902@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:22 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Subject: [046/119] USB: xhci: Fix TRB physical to virtual address translation.
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=usb-xhci-fix-trb-physical-to-virtual-address-translation.patch
+Content-Length: 2003
+Lines: 59
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+
+commit 2fa88daa6f299bfb83672c3b525d786ad03b4735 upstream.
+
+The trb_in_td() function in the xHCI driver is supposed to translate a
+physical transfer buffer request (TRB) into a virtual pointer to the ring
+segment that TRB is in.
+
+Unfortunately, a mistake in this function may cause endless loops as the
+driver searches through the linked list of ring segments over and over
+again.  Fix a couple bugs that may lead to loops or bad output:
+
+1. Bail out if we get a NULL pointer when translating the segment's
+private structure and the starting DMA address of the segment chunk.  If
+this happens, we've been handed a starting TRB pointer from a different
+ring.
+
+2. Make sure the function works when there's multiple segments in the
+ring.  In the while loop to search through the ring segments, use the
+current segment variable (cur_seg), rather than the starting segment
+variable (start_seg) that is passed in.
+
+3. Stop searching the ring if we've run through all the segments in the
+ring.
+
+Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/xhci-ring.c |    7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/host/xhci-ring.c
++++ b/drivers/usb/host/xhci-ring.c
+@@ -822,9 +822,11 @@ static struct xhci_segment *trb_in_td(
+       cur_seg = start_seg;
+       do {
++              if (start_dma == 0)
++                      return 0;
+               /* We may get an event for a Link TRB in the middle of a TD */
+               end_seg_dma = xhci_trb_virt_to_dma(cur_seg,
+-                              &start_seg->trbs[TRBS_PER_SEGMENT - 1]);
++                              &cur_seg->trbs[TRBS_PER_SEGMENT - 1]);
+               /* If the end TRB isn't in this segment, this is set to 0 */
+               end_trb_dma = xhci_trb_virt_to_dma(cur_seg, end_trb);
+@@ -851,8 +853,9 @@ static struct xhci_segment *trb_in_td(
+               }
+               cur_seg = cur_seg->next;
+               start_dma = xhci_trb_virt_to_dma(cur_seg, &cur_seg->trbs[0]);
+-      } while (1);
++      } while (cur_seg != start_seg);
++      return 0;
+ }
+ /*
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:48 2009
+Message-Id: <20091207000648.580930573@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:23 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Sarah Sharp <sarah.a.sharp@linux.intel.com>,
+ John Youn <John.Youn@synopsys.com>
+Subject: [047/119] USB: xhci: Fix scratchpad deallocation.
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=usb-xhci-fix-scratchpad-deallocation.patch
+Content-Length: 966
+Lines: 31
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+
+commit 5294bea40666db5c5d6c336b8e4e55d69fa576ca upstream.
+
+The scratchpad_free() function uses xhci->page_size to free some memory
+with pci_free_consistent().  However, the page_size is set to zero before
+the call, causing kernel oopses on driver unload.  Call scratchpad_free()
+before setting xhci->page_size to zero.
+
+Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Acked-by: John Youn <John.Youn@synopsys.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/xhci-mem.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/host/xhci-mem.c
++++ b/drivers/usb/host/xhci-mem.c
+@@ -797,9 +797,9 @@ void xhci_mem_cleanup(struct xhci_hcd *x
+                               xhci->dcbaa, xhci->dcbaa->dma);
+       xhci->dcbaa = NULL;
++      scratchpad_free(xhci);
+       xhci->page_size = 0;
+       xhci->page_shift = 0;
+-      scratchpad_free(xhci);
+ }
+ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:48 2009
+Message-Id: <20091207000648.772808584@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:24 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Reinette Chatre <reinette.chatre@intel.com>,
+ wey-yi.w.guy@intel.com,
+ linville@tuxdriver.com
+Subject: [048/119] iwlwifi: Use RTS/CTS as the preferred protection mechanism for 6000 series
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=iwlwifi-use-rts-cts-as-the-preferred-protection-mechanism-for-6000-series.patch
+Content-Length: 5155
+Lines: 141
+
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Wey-Yi Guy <wey-yi.w.guy@intel.com>
+
+commit 73871f7181a1406c67e93c8c83f5edb26057a2a6 upstream
+
+When 802.11g was introduced, we had RTS/CTS and CTS-to-Self protection
+mechanisms. In an HT Beacon, HT stations use the "Operating Mode" field
+in the HT Information Element to determine whether or not to use
+protection.
+
+The Operating Mode field has 4 possible settings: 0-3:
+Mode 0: If all stations in the BSS are 20/40 MHz HT capable, or if the
+BSS is 20/40 MHz capable, or if all stations in the BSS are 20 MHz HT
+stations in a 20 MHz BSS
+Mode 1: used if there are non-HT stations or APs using the primary or
+secondary channels
+Mode 2: if only HT stations are associated in the BSS and at least one
+20 MHz HT station is associated.
+Mode 3: used if one or more non-HT stations are associated in the BSS.
+
+When in operating modes 1 or 3, and the Use_Protection field is 1 in the
+Beacon's ERP IE, all HT transmissions must be protected using RTS/CTS or
+CTS-to-Self.
+
+By default, CTS-to-self is the preferred protection mechanism for less
+overhead and higher throughput; but using the full RTS/CTS will better
+protect the inner exchange from interference, especially in
+highly-congested environment.
+
+For 6000 series WIFI NIC, RTS/CTS protection mechanism is the
+recommended choice for HT traffic based on the HW design.
+
+Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
+Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/iwlwifi/iwl-6000.c   |    4 ++++
+ drivers/net/wireless/iwlwifi/iwl-agn-rs.c |    9 +++++++++
+ drivers/net/wireless/iwlwifi/iwl-agn.c    |   10 +++++++---
+ drivers/net/wireless/iwlwifi/iwl-core.h   |    2 ++
+ 4 files changed, 22 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/wireless/iwlwifi/iwl-6000.c
++++ b/drivers/net/wireless/iwlwifi/iwl-6000.c
+@@ -109,6 +109,7 @@ struct iwl_cfg iwl6000_2agn_cfg = {
+       .need_pll_cfg = false,
+       .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
+       .shadow_ram_support = true,
++      .use_rts_for_ht = true, /* use rts/cts protection */
+ };
+ struct iwl_cfg iwl6050_2agn_cfg = {
+@@ -127,6 +128,7 @@ struct iwl_cfg iwl6050_2agn_cfg = {
+       .need_pll_cfg = false,
+       .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
+       .shadow_ram_support = true,
++      .use_rts_for_ht = true, /* use rts/cts protection */
+ };
+ struct iwl_cfg iwl6000_3agn_cfg = {
+@@ -145,6 +147,7 @@ struct iwl_cfg iwl6000_3agn_cfg = {
+       .need_pll_cfg = false,
+       .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
+       .shadow_ram_support = true,
++      .use_rts_for_ht = true, /* use rts/cts protection */
+ };
+ struct iwl_cfg iwl6050_3agn_cfg = {
+@@ -163,6 +166,7 @@ struct iwl_cfg iwl6050_3agn_cfg = {
+       .need_pll_cfg = false,
+       .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
+       .shadow_ram_support = true,
++      .use_rts_for_ht = true, /* use rts/cts protection */
+ };
+ MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX));
+--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
++++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
+@@ -115,9 +115,6 @@ int iwl_commit_rxon(struct iwl_priv *pri
+       /* always get timestamp with Rx frame */
+       priv->staging_rxon.flags |= RXON_FLG_TSF2HOST_MSK;
+-      /* allow CTS-to-self if possible. this is relevant only for
+-       * 5000, but will not damage 4965 */
+-      priv->staging_rxon.flags |= RXON_FLG_SELF_CTS_EN;
+       ret = iwl_check_rxon_cmd(priv);
+       if (ret) {
+@@ -217,6 +214,13 @@ int iwl_commit_rxon(struct iwl_priv *pri
+                                       "Could not send WEP static key.\n");
+               }
++              /*
++               * allow CTS-to-self if possible for new association.
++               * this is relevant only for 5000 series and up,
++               * but will not damage 4965
++               */
++              priv->staging_rxon.flags |= RXON_FLG_SELF_CTS_EN;
++
+               /* Apply the new configuration
+                * RXON assoc doesn't clear the station table in uCode,
+                */
+--- a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
++++ b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
+@@ -415,6 +415,15 @@ static void rs_tl_turn_on_agg(struct iwl
+       else if (tid == IWL_AGG_ALL_TID)
+               for (tid = 0; tid < TID_MAX_LOAD_COUNT; tid++)
+                       rs_tl_turn_on_agg_for_tid(priv, lq_data, tid, sta);
++      if (priv->cfg->use_rts_for_ht) {
++              /*
++               * switch to RTS/CTS if it is the prefer protection method
++               * for HT traffic
++               */
++              IWL_DEBUG_HT(priv, "use RTS/CTS protection for HT\n");
++              priv->staging_rxon.flags &= ~RXON_FLG_SELF_CTS_EN;
++              iwlcore_commit_rxon(priv);
++      }
+ }
+ static inline int get_num_of_ant_from_rate(u32 rate_n_flags)
+--- a/drivers/net/wireless/iwlwifi/iwl-core.h
++++ b/drivers/net/wireless/iwlwifi/iwl-core.h
+@@ -209,6 +209,7 @@ struct iwl_mod_params {
+  * @ucode_api_min: Lowest version of uCode API supported by driver.
+  * @max_ll_items: max number of OTP blocks
+  * @shadow_ram_support: shadow support for OTP memory
++ * @use_rts_for_ht: use rts/cts protection for HT traffic
+  *
+  * We enable the driver to be backward compatible wrt API version. The
+  * driver specifies which APIs it supports (with @ucode_api_max being the
+@@ -247,6 +248,7 @@ struct iwl_cfg {
+       bool use_isr_legacy;
+       const u16 max_ll_items;
+       const bool shadow_ram_support;
++      bool use_rts_for_ht;
+ };
+ /***************************
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:49 2009
+Message-Id: <20091207000648.921171433@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:25 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Reinette Chatre <reinette.chatre@intel.com>,
+ wey-yi.w.guy@intel.com,
+ linville@tuxdriver.com
+Subject: [049/119] iwlwifi: Fix issue on file transfer stalled in HT mode
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=iwlwifi-fix-issue-on-file-transfer-stalled-in-ht-mode.patch
+Content-Length: 895
+Lines: 30
+
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Wey-Yi Guy <wey-yi.w.guy@intel.com>
+
+commit d01032e4fd33110f9f3a085a36cb819c1dfc5827 upstream
+
+Turn on RTS/CTS for HT to prevent uCode TX fifo underrun
+
+This is fix for
+http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2103
+
+Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
+Tested-by: Jiajia Zheng <jiajia.zheng@intel.com>
+Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/iwlwifi/iwl-1000.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/net/wireless/iwlwifi/iwl-1000.c
++++ b/drivers/net/wireless/iwlwifi/iwl-1000.c
+@@ -71,5 +71,6 @@ struct iwl_cfg iwl1000_bgn_cfg = {
+       .need_pll_cfg = true,
+       .max_ll_items = OTP_MAX_LL_ITEMS_1000,
+       .shadow_ram_support = false,
++      .use_rts_for_ht = true, /* use rts/cts protection */
+ };
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:49 2009
+Message-Id: <20091207000649.092477223@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:26 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Mimi Zohar <zohar@us.ibm.com>,
+ James Morris <jmorris@namei.org>
+Subject: [050/119] ima: replace GFP_KERNEL with GFP_NOFS
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=ima-replace-gfp_kernel-with-gfp_nofs.patch
+Content-Length: 2925
+Lines: 76
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Mimi Zohar <zohar@linux.vnet.ibm.com>
+
+commit c09c59e6a070d6af05f238f255aea268185273ef upstream.
+
+While running fsstress tests on the NFSv4 mounted ext3 and ext4
+filesystem, the following call trace was generated on the nfs
+server machine.
+
+Replace GFP_KERNEL with GFP_NOFS in ima_iint_insert() to avoid a
+potential deadlock.
+
+     =================================
+    [ INFO: inconsistent lock state ]
+    2.6.31-31.el6.x86_64 #1
+    ---------------------------------
+    inconsistent {RECLAIM_FS-ON-W} -> {IN-RECLAIM_FS-W} usage.
+    kswapd2/75 [HC0[0]:SC0[0]:HE1:SE1] takes:
+     (jbd2_handle){+.+.?.}, at: [<ffffffff811edd5e>] jbd2_journal_start+0xfe/0x13f
+    {RECLAIM_FS-ON-W} state was registered at:
+      [<ffffffff81091e40>] mark_held_locks+0x65/0x99
+      [<ffffffff81091f31>] lockdep_trace_alloc+0xbd/0xf5
+      [<ffffffff81126fdd>] kmem_cache_alloc+0x40/0x185
+      [<ffffffff812344d7>] ima_iint_insert+0x3d/0xf1
+      [<ffffffff812345b0>] ima_inode_alloc+0x25/0x44
+      [<ffffffff811484ac>] inode_init_always+0xec/0x271
+      [<ffffffff81148682>] alloc_inode+0x51/0xa1
+      [<ffffffff81148700>] new_inode+0x2e/0x94
+      [<ffffffff811b2f08>] ext4_new_inode+0xb8/0xdc9
+      [<ffffffff811be611>] ext4_create+0xcf/0x175
+      [<ffffffff8113e2cd>] vfs_create+0x82/0xb8
+      [<ffffffff8113f337>] do_filp_open+0x32c/0x9ee
+      [<ffffffff811309b9>] do_sys_open+0x6c/0x12c
+      [<ffffffff81130adc>] sys_open+0x2e/0x44
+      [<ffffffff81011e42>] system_call_fastpath+0x16/0x1b
+      [<ffffffffffffffff>] 0xffffffffffffffff
+    irq event stamp: 90371
+    hardirqs last  enabled at (90371): [<ffffffff8112708d>]
+    kmem_cache_alloc+0xf0/0x185
+    hardirqs last disabled at (90370): [<ffffffff81127026>]
+    kmem_cache_alloc+0x89/0x185
+    softirqs last  enabled at (89492): [<ffffffff81068ecf>]
+    __do_softirq+0x1bf/0x1eb
+    softirqs last disabled at (89477): [<ffffffff8101312c>] call_softirq+0x1c/0x30
+
+    other info that might help us debug this:
+    2 locks held by kswapd2/75:
+     #0:  (shrinker_rwsem){++++..}, at: [<ffffffff810f98ba>] shrink_slab+0x44/0x177
+     #1:  (&type->s_umount_key#25){++++..}, at: [<ffffffff811450ba>]
+
+Reported-by: Muni P. Beerakam <mbeeraka@in.ibm.com>
+Reported-by: Amit K. Arora <amitarora@in.ibm.com>
+Signed-off-by: Mimi Zohar <zohar@us.ibm.com>
+Signed-off-by: James Morris <jmorris@namei.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ security/integrity/ima/ima_iint.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/security/integrity/ima/ima_iint.c
++++ b/security/integrity/ima/ima_iint.c
+@@ -58,11 +58,11 @@ struct ima_iint_cache *ima_iint_insert(s
+       if (!ima_initialized)
+               return iint;
+-      iint = kmem_cache_alloc(iint_cache, GFP_KERNEL);
++      iint = kmem_cache_alloc(iint_cache, GFP_NOFS);
+       if (!iint)
+               return iint;
+-      rc = radix_tree_preload(GFP_KERNEL);
++      rc = radix_tree_preload(GFP_NOFS);
+       if (rc < 0)
+               goto out;
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:49 2009
+Message-Id: <20091207000649.274041422@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:27 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Trond Myklebust <Trond.Myklebust@netapp.com>
+Subject: [051/119] NFSv4: Fix a cache validation bug which causes getcwd() to return ENOENT
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=nfsv4-fix-a-cache-validation-bug-which-causes-getcwd-to-return-enoent.patch
+Content-Length: 1342
+Lines: 36
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+
+commit 96d25e532234bec1a1989e6e1baf702d43a78b0d upstream.
+
+Changeset a65318bf3afc93ce49227e849d213799b072c5fd (NFSv4: Simplify some
+cache consistency post-op GETATTRs) incorrectly changed the getattr
+bitmap for readdir().
+This causes the readdir() function to fail to return a
+fileid/inode number, which again exposed a bug in the NFS readdir code that
+causes spurious ENOENT errors to appear in applications (see
+http://bugzilla.kernel.org/show_bug.cgi?id=14541).
+
+The immediate band aid is to revert the incorrect bitmap change, but more
+long term, we should change the NFS readdir code to cope with the
+fact that NFSv4 servers are not required to support fileids/inode numbers.
+
+Reported-by: Daniel J Blueman <daniel.blueman@gmail.com>
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/nfs/nfs4proc.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/fs/nfs/nfs4proc.c
++++ b/fs/nfs/nfs4proc.c
+@@ -2740,7 +2740,7 @@ static int _nfs4_proc_readdir(struct den
+               .pages = &page,
+               .pgbase = 0,
+               .count = count,
+-              .bitmask = NFS_SERVER(dentry->d_inode)->cache_consistency_bitmask,
++              .bitmask = NFS_SERVER(dentry->d_inode)->attr_bitmask,
+       };
+       struct nfs4_readdir_res res;
+       struct rpc_message msg = {
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:49 2009
+Message-Id: <20091207000649.452381615@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:28 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Csaba Henk <csaba@gluster.com>,
+ Miklos Szeredi <mszeredi@suse.cz>,
+ Harshavardhana <harsha@gluster.com>
+Subject: [052/119] fuse: reject O_DIRECT flag also in fuse_create
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=fuse-reject-o_direct-flag-also-in-fuse_create.patch
+Content-Length: 1088
+Lines: 39
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Csaba Henk <csaba@gluster.com>
+
+commit 1b7323965a8c6eee9dc4e345a7ae4bff1dc93149 upstream.
+
+The comment in fuse_open about O_DIRECT:
+
+  "VFS checks this, but only _after_ ->open()"
+
+also holds for fuse_create, however, the same kind of check was missing there.
+
+As an impact of this bug, open(newfile, O_RDWR|O_CREAT|O_DIRECT) fails, but a
+stub newfile will remain if the fuse server handled the implied FUSE_CREATE
+request appropriately.
+
+Other impact: in the above situation ima_file_free() will complain to open/free
+imbalance if CONFIG_IMA is set.
+
+Signed-off-by: Csaba Henk <csaba@gluster.com>
+Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
+Cc: Harshavardhana <harsha@gluster.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/fuse/dir.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/fs/fuse/dir.c
++++ b/fs/fuse/dir.c
+@@ -385,6 +385,9 @@ static int fuse_create_open(struct inode
+       if (fc->no_create)
+               return -ENOSYS;
++      if (flags & O_DIRECT)
++              return -EINVAL;
++
+       forget_req = fuse_get_req(fc);
+       if (IS_ERR(forget_req))
+               return PTR_ERR(forget_req);
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:49 2009
+Message-Id: <20091207000649.602354316@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:29 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Liam Girdwood <lrg@slimlogic.co.uk>,
+ Mark Brown <broonie@opensource.wolfsonmicro.com>
+Subject: [053/119] ASoC: Fix suspend with active audio streams
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=asoc-fix-suspend-with-active-audio-streams.patch
+Content-Length: 1334
+Lines: 46
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Mark Brown <broonie@opensource.wolfsonmicro.com>
+
+commit 50b6bce59d154b5db137907a5c0ed45a4e7a3829 upstream.
+
+When we get a stream suspend event force the power down since otherwise
+the stream would remain marked as active.  In future we'll probably want
+to make this stream-specific and add an interface to make the power down
+of other widgets optional in order to support leaving bypass paths
+active while suspending the processor.
+
+Reported-by: Joonyoung Shim <jy0922.shim@samsung.com>
+Tested-by: Joonyoung Shim <jy0922.shim@samsung.com>
+Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
+Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/soc/soc-dapm.c |   16 +++++++++++++---
+ 1 file changed, 13 insertions(+), 3 deletions(-)
+
+--- a/sound/soc/soc-dapm.c
++++ b/sound/soc/soc-dapm.c
+@@ -774,9 +774,19 @@ static int dapm_power_widgets(struct snd
+                       if (!w->power_check)
+                               continue;
+-                      power = w->power_check(w);
+-                      if (power)
+-                              sys_power = 1;
++                      /* If we're suspending then pull down all the
++                       * power. */
++                      switch (event) {
++                      case SND_SOC_DAPM_STREAM_SUSPEND:
++                              power = 0;
++                              break;
++
++                      default:
++                              power = w->power_check(w);
++                              if (power)
++                                      sys_power = 1;
++                              break;
++                      }
+                       if (w->power == power)
+                               continue;
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:49 2009
+Message-Id: <20091207000649.746924502@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:30 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Anuj Aggarwal <anuj.aggarwal@ti.com>,
+ Liam Girdwood <lrg@slimlogic.co.uk>,
+ Mark Brown <broonie@opensource.wolfsonmicro.com>
+Subject: [054/119] ASoC: AIC23: Fixing infinite loop in resume path
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=asoc-aic23-fixing-infinite-loop-in-resume-path.patch
+Content-Length: 1057
+Lines: 33
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Anuj Aggarwal <anuj.aggarwal@ti.com>
+
+commit e9ff5eb2ae018fe2298c68746c873bf828c6b10e upstream.
+
+This patch fixes two issues:
+a) Infinite loop in resume function
+b) Writes to non-existing registers in resume function
+
+Signed-off-by: Anuj Aggarwal <anuj.aggarwal@ti.com>
+Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
+Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/soc/codecs/tlv320aic23.c |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/sound/soc/codecs/tlv320aic23.c
++++ b/sound/soc/codecs/tlv320aic23.c
+@@ -625,11 +625,10 @@ static int tlv320aic23_resume(struct pla
+ {
+       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
+       struct snd_soc_codec *codec = socdev->card->codec;
+-      int i;
+       u16 reg;
+       /* Sync reg_cache with the hardware */
+-      for (reg = 0; reg < ARRAY_SIZE(tlv320aic23_reg); i++) {
++      for (reg = 0; reg < TLV320AIC23_RESET; reg++) {
+               u16 val = tlv320aic23_read_reg_cache(codec, reg);
+               tlv320aic23_write(codec, reg, val);
+       }
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:50 2009
+Message-Id: <20091207000649.895216946@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:31 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Lennert Buytenhek <buytenh@marvell.com>,
+ Johannes Berg <johannes@sipsolutions.net>,
+ "John W. Linville" <linville@tuxdriver.com>
+Subject: [055/119] mac80211: fix two remote exploits
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=mac80211-fix-two-remote-exploits.patch
+Content-Length: 1832
+Lines: 60
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Johannes Berg <johannes@sipsolutions.net>
+
+commit 4253119acf412fd686ef4bd8749b5a4d70ea3a51 upstream.
+
+Lennert Buytenhek noticed a remotely triggerable problem
+in mac80211, which is due to some code shuffling I did
+that ended up changing the order in which things were
+done -- this was in
+
+  commit d75636ef9c1af224f1097941879d5a8db7cd04e5
+  Author: Johannes Berg <johannes@sipsolutions.net>
+  Date:   Tue Feb 10 21:25:53 2009 +0100
+
+    mac80211: RX aggregation: clean up stop session
+
+The problem is that the BUG_ON moved before the various
+checks, and as such can be triggered.
+
+As the comment indicates, the BUG_ON can be removed since
+the ampdu_action callback must already exist when the
+state is OPERATIONAL.
+
+A similar code path leads to a WARN_ON in
+ieee80211_stop_tx_ba_session, which can also be removed.
+
+Cc: Lennert Buytenhek <buytenh@marvell.com>
+Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/mac80211/agg-rx.c |    4 ----
+ net/mac80211/agg-tx.c |    2 +-
+ 2 files changed, 1 insertion(+), 5 deletions(-)
+
+--- a/net/mac80211/agg-rx.c
++++ b/net/mac80211/agg-rx.c
+@@ -85,10 +85,6 @@ void ieee80211_sta_stop_rx_ba_session(st
+       struct ieee80211_local *local = sdata->local;
+       struct sta_info *sta;
+-      /* stop HW Rx aggregation. ampdu_action existence
+-       * already verified in session init so we add the BUG_ON */
+-      BUG_ON(!local->ops->ampdu_action);
+-
+       rcu_read_lock();
+       sta = sta_info_get(local, ra);
+--- a/net/mac80211/agg-tx.c
++++ b/net/mac80211/agg-tx.c
+@@ -546,7 +546,7 @@ int ieee80211_stop_tx_ba_session(struct 
+       struct sta_info *sta;
+       int ret = 0;
+-      if (WARN_ON(!local->ops->ampdu_action))
++      if (!local->ops->ampdu_action)
+               return -EINVAL;
+       if (tid >= STA_TID_NUM)
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:50 2009
+Message-Id: <20091207000650.041769656@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:32 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Johannes Berg <johannes@sipsolutions.net>,
+ "John W. Linville" <linville@tuxdriver.com>
+Subject: [056/119] mac80211: fix spurious delBA handling
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=mac80211-fix-spurious-delba-handling.patch
+Content-Length: 6505
+Lines: 174
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Johannes Berg <johannes@sipsolutions.net>
+
+commit 827d42c9ac91ddd728e4f4a31fefb906ef2ceff7 upstream.
+
+Lennert Buytenhek noticed that delBA handling in mac80211
+was broken and has remotely triggerable problems, some of
+which are due to some code shuffling I did that ended up
+changing the order in which things were done -- this was
+
+  commit d75636ef9c1af224f1097941879d5a8db7cd04e5
+  Author: Johannes Berg <johannes@sipsolutions.net>
+  Date:   Tue Feb 10 21:25:53 2009 +0100
+
+    mac80211: RX aggregation: clean up stop session
+
+and other parts were already present in the original
+
+  commit d92684e66091c0f0101819619b315b4bb8b5bcc5
+  Author: Ron Rindjunsky <ron.rindjunsky@intel.com>
+  Date:   Mon Jan 28 14:07:22 2008 +0200
+
+      mac80211: A-MPDU Tx add delBA from recipient support
+
+The first problem is that I moved a BUG_ON before various
+checks -- thereby making it possible to hit. As the comment
+indicates, the BUG_ON can be removed since the ampdu_action
+callback must already exist when the state is != IDLE.
+
+The second problem isn't easily exploitable but there's a
+race condition due to unconditionally setting the state to
+OPERATIONAL when a delBA frame is received, even when no
+aggregation session was ever initiated. All the drivers
+accept stopping the session even then, but that opens a
+race window where crashes could happen before the driver
+accepts it. Right now, a WARN_ON may happen with non-HT
+drivers, while the race opens only for HT drivers.
+
+For this case, there are two things necessary to fix it:
+ 1) don't process spurious delBA frames, and be more careful
+    about the session state; don't drop the lock
+
+ 2) HT drivers need to be prepared to handle a session stop
+    even before the session was really started -- this is
+    true for all drivers (that support aggregation) but
+    iwlwifi which can be fixed easily. The other HT drivers
+    (ath9k and ar9170) are behaving properly already.
+
+Reported-by: Lennert Buytenhek <buytenh@marvell.com>
+Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/iwlwifi/iwl-tx.c |   10 +++++++++-
+ include/net/mac80211.h                |    6 ++++++
+ net/mac80211/agg-tx.c                 |   15 +++++++--------
+ net/mac80211/ht.c                     |    8 +++-----
+ net/mac80211/ieee80211_i.h            |    2 ++
+ 5 files changed, 27 insertions(+), 14 deletions(-)
+
+--- a/drivers/net/wireless/iwlwifi/iwl-tx.c
++++ b/drivers/net/wireless/iwlwifi/iwl-tx.c
+@@ -1233,8 +1233,16 @@ int iwl_tx_agg_stop(struct iwl_priv *pri
+               return -ENXIO;
+       }
++      if (priv->stations[sta_id].tid[tid].agg.state ==
++                              IWL_EMPTYING_HW_QUEUE_ADDBA) {
++              IWL_DEBUG_HT(priv, "AGG stop before setup done\n");
++              ieee80211_stop_tx_ba_cb_irqsafe(priv->hw, ra, tid);
++              priv->stations[sta_id].tid[tid].agg.state = IWL_AGG_OFF;
++              return 0;
++      }
++
+       if (priv->stations[sta_id].tid[tid].agg.state != IWL_AGG_ON)
+-              IWL_WARN(priv, "Stopping AGG while state not IWL_AGG_ON\n");
++              IWL_WARN(priv, "Stopping AGG while state not ON or starting\n");
+       tid_data = &priv->stations[sta_id].tid[tid];
+       ssn = (tid_data->seq_number & IEEE80211_SCTL_SEQ) >> 4;
+--- a/include/net/mac80211.h
++++ b/include/net/mac80211.h
+@@ -1244,6 +1244,12 @@ enum ieee80211_filter_flags {
+  *
+  * These flags are used with the ampdu_action() callback in
+  * &struct ieee80211_ops to indicate which action is needed.
++ *
++ * Note that drivers MUST be able to deal with a TX aggregation
++ * session being stopped even before they OK'ed starting it by
++ * calling ieee80211_start_tx_ba_cb(_irqsafe), because the peer
++ * might receive the addBA frame and send a delBA right away!
++ *
+  * @IEEE80211_AMPDU_RX_START: start Rx aggregation
+  * @IEEE80211_AMPDU_RX_STOP: stop Rx aggregation
+  * @IEEE80211_AMPDU_TX_START: start Tx aggregation
+--- a/net/mac80211/agg-tx.c
++++ b/net/mac80211/agg-tx.c
+@@ -123,13 +123,18 @@ void ieee80211_send_bar(struct ieee80211
+       ieee80211_tx_skb(sdata, skb, 0);
+ }
+-static int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
+-                                         enum ieee80211_back_parties initiator)
++int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
++                                  enum ieee80211_back_parties initiator)
+ {
+       struct ieee80211_local *local = sta->local;
+       int ret;
+       u8 *state;
++#ifdef CONFIG_MAC80211_HT_DEBUG
++      printk(KERN_DEBUG "Tx BA session stop requested for %pM tid %u\n",
++             sta->sta.addr, tid);
++#endif /* CONFIG_MAC80211_HT_DEBUG */
++
+       state = &sta->ampdu_mlme.tid_state_tx[tid];
+       if (*state == HT_AGG_STATE_OPERATIONAL)
+@@ -143,7 +148,6 @@ static int ___ieee80211_stop_tx_ba_sessi
+       /* HW shall not deny going back to legacy */
+       if (WARN_ON(ret)) {
+-              *state = HT_AGG_STATE_OPERATIONAL;
+               /*
+                * We may have pending packets get stuck in this case...
+                * Not bothering with a workaround for now.
+@@ -526,11 +530,6 @@ int __ieee80211_stop_tx_ba_session(struc
+               goto unlock;
+       }
+-#ifdef CONFIG_MAC80211_HT_DEBUG
+-      printk(KERN_DEBUG "Tx BA session stop requested for %pM tid %u\n",
+-             sta->sta.addr, tid);
+-#endif /* CONFIG_MAC80211_HT_DEBUG */
+-
+       ret = ___ieee80211_stop_tx_ba_session(sta, tid, initiator);
+  unlock:
+--- a/net/mac80211/ht.c
++++ b/net/mac80211/ht.c
+@@ -141,7 +141,6 @@ void ieee80211_process_delba(struct ieee
+                            struct sta_info *sta,
+                            struct ieee80211_mgmt *mgmt, size_t len)
+ {
+-      struct ieee80211_local *local = sdata->local;
+       u16 tid, params;
+       u16 initiator;
+@@ -161,10 +160,9 @@ void ieee80211_process_delba(struct ieee
+                                                WLAN_BACK_INITIATOR, 0);
+       else { /* WLAN_BACK_RECIPIENT */
+               spin_lock_bh(&sta->lock);
+-              sta->ampdu_mlme.tid_state_tx[tid] =
+-                              HT_AGG_STATE_OPERATIONAL;
++              if (sta->ampdu_mlme.tid_state_tx[tid] & HT_ADDBA_REQUESTED_MSK)
++                      ___ieee80211_stop_tx_ba_session(sta, tid,
++                                                      WLAN_BACK_RECIPIENT);
+               spin_unlock_bh(&sta->lock);
+-              ieee80211_stop_tx_ba_session(&local->hw, sta->sta.addr, tid,
+-                                           WLAN_BACK_RECIPIENT);
+       }
+ }
+--- a/net/mac80211/ieee80211_i.h
++++ b/net/mac80211/ieee80211_i.h
+@@ -1057,6 +1057,8 @@ void ieee80211_process_addba_request(str
+ int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
+                                  enum ieee80211_back_parties initiator);
++int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
++                                  enum ieee80211_back_parties initiator);
+ /* Spectrum management */
+ void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata,
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:50 2009
+Message-Id: <20091207000650.209768037@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:33 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Larry Finger <Larry.Finger@lwfinger.net>,
+ "John W. Linville" <linville@tuxdriver.com>,
+ Michael Buesch <mb@bu3sch.de>
+Subject: [057/119] b43: Work around mac80211 race condition
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=b43-work-around-mac80211-race-condition.patch
+Content-Length: 2398
+Lines: 59
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Larry Finger <Larry.Finger@lwfinger.net>
+
+commit 18c6951091eca7645005a71b556106cc99a6f4b1 upstream.
+
+As shown in http://thread.gmane.org/gmane.linux.kernel.wireless.general/36497,
+mac80211 has a bug that allows a call to the TX routine after the queues have
+been stopped. This situation will only occur under extreme stress. Although
+b43 does not crash when this condition occurs, it does generate a WARN_ON and
+also logs a queue overrun message. This patch recognizes b43 is not at fault
+and logs a message only when the most verbose debugging mode is enabled. In
+the unlikely event that the queue is not stopped when the DMA queue becomes
+full, then a warning is issued.
+
+During testing of this patch with one output stream running repeated tcpperf
+writes and a second running a flood ping, this routine was entered with
+the DMA ring stopped about once per hour. The condition where the DMA queue is
+full but the ring has not been stopped has never been seen by me.
+
+Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Cc: Michael Buesch <mb@bu3sch.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/b43/dma.c |   21 +++++++++++++++------
+ 1 file changed, 15 insertions(+), 6 deletions(-)
+
+--- a/drivers/net/wireless/b43/dma.c
++++ b/drivers/net/wireless/b43/dma.c
+@@ -1334,13 +1334,22 @@ int b43_dma_tx(struct b43_wldev *dev, st
+       spin_lock_irqsave(&ring->lock, flags);
+       B43_WARN_ON(!ring->tx);
+-      /* Check if the queue was stopped in mac80211,
+-       * but we got called nevertheless.
+-       * That would be a mac80211 bug. */
+-      B43_WARN_ON(ring->stopped);
+-      if (unlikely(free_slots(ring) < TX_SLOTS_PER_FRAME)) {
+-              b43warn(dev->wl, "DMA queue overflow\n");
++      if (unlikely(ring->stopped)) {
++              /* We get here only because of a bug in mac80211.
++               * Because of a race, one packet may be queued after
++               * the queue is stopped, thus we got called when we shouldn't.
++               * For now, just refuse the transmit. */
++              if (b43_debug(dev, B43_DBG_DMAVERBOSE))
++                      b43err(dev->wl, "Packet after queue stopped\n");
++              err = -ENOSPC;
++              goto out_unlock;
++      }
++
++      if (unlikely(WARN_ON(free_slots(ring) < TX_SLOTS_PER_FRAME))) {
++              /* If we get here, we have a real error with the queue
++               * full, but queues not stopped. */
++              b43err(dev->wl, "DMA queue overflow\n");
+               err = -ENOSPC;
+               goto out_unlock;
+       }
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:50 2009
+Message-Id: <20091207000650.383217514@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:34 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Johannes Berg <johannes@sipsolutions.net>,
+ "John W. Linville" <linville@tuxdriver.com>
+Subject: [058/119] rfkill: fix miscdev ops
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=rfkill-fix-miscdev-ops.patch
+Content-Length: 819
+Lines: 28
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Johannes Berg <johannes@sipsolutions.net>
+
+commit 45ba564d765d6165330e9bb14a197bdd348c114d upstream.
+
+The /dev/rfkill ops don't refer to the module,
+so it is possible to unload the module while
+file descriptors are open. Fix this oversight.
+
+Reported-by: Maxim Levitsky <maximlevitsky@gmail.com>
+Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/rfkill/core.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/net/rfkill/core.c
++++ b/net/rfkill/core.c
+@@ -1180,6 +1180,7 @@ static long rfkill_fop_ioctl(struct file
+ #endif
+ static const struct file_operations rfkill_fops = {
++      .owner          = THIS_MODULE,
+       .open           = rfkill_fop_open,
+       .read           = rfkill_fop_read,
+       .write          = rfkill_fop_write,
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:50 2009
+Message-Id: <20091207000650.636746886@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:35 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Roel Kluin <roel.kluin@gmail.com>,
+ Henrique de Moraes Holschuh <hmh@hmh.eng.br>,
+ Len Brown <len.brown@intel.com>
+Subject: [059/119] thinkpad-acpi: fix sign of ERESTARTSYS return
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=thinkpad-acpi-fix-sign-of-erestartsys-return.patch
+Content-Length: 898
+Lines: 28
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Roel Kluin <roel.kluin@gmail.com>
+
+commit 80a8d1228e90349b4514e8c925c061fa5cbcea75 upstream.
+
+The returned error should be negative
+
+Signed-off-by: Roel Kluin <roel.kluin@gmail.com>
+Acked-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/platform/x86/thinkpad_acpi.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/platform/x86/thinkpad_acpi.c
++++ b/drivers/platform/x86/thinkpad_acpi.c
+@@ -5863,7 +5863,7 @@ static int brightness_write(char *buf)
+        * Doing it this way makes the syscall restartable in case of EINTR
+        */
+       rc = brightness_set(level);
+-      return (rc == -EINTR)? ERESTARTSYS : rc;
++      return (rc == -EINTR)? -ERESTARTSYS : rc;
+ }
+ static struct ibm_struct brightness_driver_data = {
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:50 2009
+Message-Id: <20091207000650.809125417@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:36 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Harald Welte <HaraldWelte@viatech.com>,
+ Dave Jones <davej@redhat.com>
+Subject: [060/119] [CPUFREQ] Enable ACPI PDC handshake for VIA/Centaur CPUs
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=enable-acpi-pdc-handshake-for-via-centaur-cpus.patch
+Content-Length: 1447
+Lines: 40
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Harald Welte <HaraldWelte@viatech.com>
+
+commit d77b81974521c82fa6fda38dfff1b491dcc62a32 upstream.
+
+In commit 0de51088e6a82bc8413d3ca9e28bbca2788b5b53, we introduced the
+use of acpi-cpufreq on VIA/Centaur CPU's by removing a vendor check for
+VENDOR_INTEL.  However, as it turns out, at least the Nano CPU's also
+need the PDC (processor driver capabilities) handshake in order to
+activate the methods required for acpi-cpufreq.
+
+Since arch_acpi_processor_init_pdc() contains another vendor check for
+Intel, the PDC is not initialized on VIA CPU's.  The resulting behavior
+of a current mainline kernel on such systems is:  acpi-cpufreq
+loads and it indicates CPU frequency changes.  However, the CPU stays at
+a single frequency
+
+This trivial patch ensures that init_intel_pdc() is called on Intel and
+VIA/Centaur CPU's alike.
+
+Signed-off-by: Harald Welte <HaraldWelte@viatech.com>
+Signed-off-by: Dave Jones <davej@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/acpi/processor.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/arch/x86/kernel/acpi/processor.c
++++ b/arch/x86/kernel/acpi/processor.c
+@@ -79,7 +79,8 @@ void arch_acpi_processor_init_pdc(struct
+       struct cpuinfo_x86 *c = &cpu_data(pr->id);
+       pr->pdc = NULL;
+-      if (c->x86_vendor == X86_VENDOR_INTEL)
++      if (c->x86_vendor == X86_VENDOR_INTEL ||
++          c->x86_vendor == X86_VENDOR_CENTAUR)
+               init_intel_pdc(pr, c);
+       return;
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:51 2009
+Message-Id: <20091207000650.986021785@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:37 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Robert Lowery <rglowery@exemail.com.au>,
+ Devin Heitmueller <dheitmueller@kernellabs.com>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>
+Subject: [061/119] V4L/DVB (13436): cxusb: Fix hang on DViCO FusionHDTV DVB-T Dual Digital 4 (rev 1)
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=v4l-dvb-13436-cxusb-fix-hang-on-dvico-fusionhdtv-dvb-t-dual-digital-4-rev-1.patch
+Content-Length: 1389
+Lines: 46
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Robert Lowery <rglowery@exemail.com.au>
+
+commit 0bc3518019f917a370935055f07698a4e9b3ea20 upstream.
+
+Address yet another regression introduced by the introduction of the zl10353
+disable_i2c_gate field.
+
+djh - I unmangled the patch which apparently got screwed up in the user's
+email client.
+
+Signed-off-by: Robert Lowery <rglowery@exemail.com.au>
+Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/dvb/dvb-usb/cxusb.c |   10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+--- a/drivers/media/dvb/dvb-usb/cxusb.c
++++ b/drivers/media/dvb/dvb-usb/cxusb.c
+@@ -663,6 +663,14 @@ static struct zl10353_config cxusb_zl103
+       .parallel_ts = 1,
+ };
++static struct zl10353_config cxusb_zl10353_xc3028_config_no_i2c_gate = {
++      .demod_address = 0x0f,
++      .if2 = 45600,
++      .no_tuner = 1,
++      .parallel_ts = 1,
++      .disable_i2c_gate_ctrl = 1,
++};
++
+ static struct mt352_config cxusb_mt352_xc3028_config = {
+       .demod_address = 0x0f,
+       .if2 = 4560,
+@@ -894,7 +902,7 @@ static int cxusb_dualdig4_frontend_attac
+       cxusb_bluebird_gpio_pulse(adap->dev, 0x02, 1);
+       if ((adap->fe = dvb_attach(zl10353_attach,
+-                                 &cxusb_zl10353_xc3028_config,
++                                 &cxusb_zl10353_xc3028_config_no_i2c_gate,
+                                  &adap->dev->i2c_adap)) == NULL)
+               return -EIO;
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:51 2009
+Message-Id: <20091207000651.220378113@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:38 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Hans Verkuil <hverkuil@xs4all.nl>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>
+Subject: [062/119] V4L/DVB (13321): radio-gemtek-pci: fix double mutex_lock
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=v4l-dvb-13321-radio-gemtek-pci-fix-double-mutex_lock.patch
+Content-Length: 885
+Lines: 31
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Hans Verkuil <hverkuil@xs4all.nl>
+
+commit 3addbb8075c00e2a2408c192bd1002dead26b2aa upstream.
+
+Double mutexlock found by the Linux Driver Verification project and
+reported by Alexander Strakh.
+
+Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/radio/radio-gemtek-pci.c |    2 --
+ 1 file changed, 2 deletions(-)
+
+--- a/drivers/media/radio/radio-gemtek-pci.c
++++ b/drivers/media/radio/radio-gemtek-pci.c
+@@ -181,12 +181,10 @@ static void gemtek_pci_mute(struct gemte
+ static void gemtek_pci_unmute(struct gemtek_pci *card)
+ {
+-      mutex_lock(&card->lock);
+       if (card->mute) {
+               gemtek_pci_setfrequency(card, card->current_frequency);
+               card->mute = false;
+       }
+-      mutex_unlock(&card->lock);
+ }
+ static int gemtek_pci_getsignal(struct gemtek_pci *card)
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:51 2009
+Message-Id: <20091207000651.381307775@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:39 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Hans Verkuil <hverkuil@xs4all.nl>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>,
+ Michael Krufky <mkrufky@linuxtv.org>
+Subject: [063/119] V4L/DVB (12948): v4l1-compat: fix VIDIOC_G_STD handling
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=v4l-dvb-12948-v4l1-compat-fix-vidioc_g_std-handling.patch
+Content-Length: 1642
+Lines: 49
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Hans Verkuil <hverkuil@xs4all.nl>
+
+commit 707ca1e30f087f9a6d144693dafc4b67880678c2 upstream.
+
+The VIDIOC_G_STD ioctl may not be present in the case of radio receivers.
+In that case G_STD will return an error. The v4l1-compat layer should not
+attempt to propagate that error to the caller, instead it should be
+ignored.
+
+Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/v4l1-compat.c |   14 ++++++--------
+ 1 file changed, 6 insertions(+), 8 deletions(-)
+
+--- a/drivers/media/video/v4l1-compat.c
++++ b/drivers/media/video/v4l1-compat.c
+@@ -565,10 +565,9 @@ static noinline long v4l1_compat_get_inp
+               break;
+       }
+       chan->norm = 0;
+-      err = drv(file, VIDIOC_G_STD, &sid);
+-      if (err < 0)
+-              dprintk("VIDIOCGCHAN / VIDIOC_G_STD: %ld\n", err);
+-      if (err == 0) {
++      /* Note: G_STD might not be present for radio receivers,
++       * so we should ignore any errors. */
++      if (drv(file, VIDIOC_G_STD, &sid) == 0) {
+               if (sid & V4L2_STD_PAL)
+                       chan->norm = VIDEO_MODE_PAL;
+               if (sid & V4L2_STD_NTSC)
+@@ -777,10 +776,9 @@ static noinline long v4l1_compat_get_tun
+                       tun->flags |= VIDEO_TUNER_SECAM;
+       }
+-      err = drv(file, VIDIOC_G_STD, &sid);
+-      if (err < 0)
+-              dprintk("VIDIOCGTUNER / VIDIOC_G_STD: %ld\n", err);
+-      if (err == 0) {
++      /* Note: G_STD might not be present for radio receivers,
++       * so we should ignore any errors. */
++      if (drv(file, VIDIOC_G_STD, &sid) == 0) {
+               if (sid & V4L2_STD_PAL)
+                       tun->mode = VIDEO_MODE_PAL;
+               if (sid & V4L2_STD_NTSC)
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:51 2009
+Message-Id: <20091207000651.565883198@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:40 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jean-Francois Moine <moinejf@free.fr>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>,
+ Michael Krufky <mkrufky@linuxtv.org>
+Subject: [064/119] V4L/DVB (12280): gspca - sonixj: Remove auto gain/wb/expo for the ov7660 sensor.
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=v4l-dvb-12280-gspca-sonixj-remove-auto-gain-wb-expo-for-the-ov7660-sensor.patch
+Content-Length: 2000
+Lines: 55
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jean-Francois Moine <moinejf@free.fr>
+
+commit d8f400efc1ef7b344e07590fb6b77431bc358ba0 upstream.
+
+Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/gspca/sonixj.c |   13 ++++++++-----
+ 1 file changed, 8 insertions(+), 5 deletions(-)
+
+--- a/drivers/media/video/gspca/sonixj.c
++++ b/drivers/media/video/gspca/sonixj.c
+@@ -727,13 +727,13 @@ static const u8 ov7660_sensor_init[][8] 
+       {0xa1, 0x21, 0x12, 0x05, 0x00, 0x00, 0x00, 0x10},
+                                               /* Outformat = rawRGB */
+       {0xa1, 0x21, 0x13, 0xb8, 0x00, 0x00, 0x00, 0x10}, /* init COM8 */
+-      {0xd1, 0x21, 0x00, 0x01, 0x74, 0x74, 0x00, 0x10},
++      {0xd1, 0x21, 0x00, 0x01, 0x74, 0x92, 0x00, 0x10},
+                                               /* GAIN BLUE RED VREF */
+       {0xd1, 0x21, 0x04, 0x00, 0x7d, 0x62, 0x00, 0x10},
+                                               /* COM 1 BAVE GEAVE AECHH */
+       {0xb1, 0x21, 0x08, 0x83, 0x01, 0x00, 0x00, 0x10}, /* RAVE COM2 */
+       {0xd1, 0x21, 0x0c, 0x00, 0x08, 0x04, 0x4f, 0x10}, /* COM 3 4 5 6 */
+-      {0xd1, 0x21, 0x10, 0x7f, 0x40, 0x05, 0xff, 0x10},
++      {0xd1, 0x21, 0x10, 0x7f, 0x40, 0x05, 0xf8, 0x10},
+                                               /* AECH CLKRC COM7 COM8 */
+       {0xc1, 0x21, 0x14, 0x2c, 0x00, 0x02, 0x00, 0x10}, /* COM9 COM10 */
+       {0xd1, 0x21, 0x17, 0x10, 0x60, 0x02, 0x7b, 0x10},
+@@ -1637,16 +1637,19 @@ static void setfreq(struct gspca_dev *gs
+       if (gspca_dev->ctrl_dis & (1 << FREQ_IDX))
+               return;
+       if (sd->sensor == SENSOR_OV7660) {
++              u8 com8;
++
++              com8 = 0xf8;            /* no auto gain/wb/expo */
+               switch (sd->freq) {
+               case 0: /* Banding filter disabled */
+-                      i2c_w1(gspca_dev, 0x13, 0xdf);
++                      i2c_w1(gspca_dev, 0x13, com8 & 0xdf);
+                       break;
+               case 1: /* 50 hz */
+-                      i2c_w1(gspca_dev, 0x13, 0xff);
++                      i2c_w1(gspca_dev, 0x13, com8);
+                       i2c_w1(gspca_dev, 0x3b, 0x0a);
+                       break;
+               case 2: /* 60 hz */
+-                      i2c_w1(gspca_dev, 0x13, 0xff);
++                      i2c_w1(gspca_dev, 0x13, com8);
+                       i2c_w1(gspca_dev, 0x3b, 0x02);
+                       break;
+               }
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:51 2009
+Message-Id: <20091207000651.695885127@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:41 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Denis Loginov <dinvlad@gmail.com>,
+ Jean-Francois Moine <moinejf@free.fr>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>,
+ Michael Krufky <mkrufky@linuxtv.org>
+Subject: [065/119] V4L/DVB (12356): gspca - sonixj: Webcam 0c45:6148 added
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=v4l-dvb-12356-gspca-sonixj-webcam-0c45-6148-added.patch
+Content-Length: 2661
+Lines: 57
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Denis Loginov <dinvlad@gmail.com>
+
+commit 6baefab531b22288be3b4ddef5671ea6469b09f8 upstream.
+
+Signed-off-by: Denis Loginov <dinvlad@gmail.com>
+Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ Documentation/video4linux/gspca.txt |    1 +
+ drivers/media/video/gspca/sonixj.c  |    8 ++++++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+--- a/Documentation/video4linux/gspca.txt
++++ b/Documentation/video4linux/gspca.txt
+@@ -284,6 +284,7 @@ sonixj             0c45:613a       Microdia Sonix PC Came
+ sonixj                0c45:613b       Surfer SN-206
+ sonixj                0c45:613c       Sonix Pccam168
+ sonixj                0c45:6143       Sonix Pccam168
++sonixj                0c45:6148       Digitus DA-70811/ZSMC USB PC Camera ZS211/Microdia
+ sn9c20x               0c45:6240       PC Camera (SN9C201 + MT9M001)
+ sn9c20x               0c45:6242       PC Camera (SN9C201 + MT9M111)
+ sn9c20x               0c45:6248       PC Camera (SN9C201 + OV9655)
+--- a/drivers/media/video/gspca/sonixj.c
++++ b/drivers/media/video/gspca/sonixj.c
+@@ -2339,7 +2339,8 @@ static const __devinitdata struct usb_de
+       {USB_DEVICE(0x0c45, 0x60fe), BSI(SN9C105, OV7630, 0x21)},
+ #endif
+       {USB_DEVICE(0x0c45, 0x6100), BSI(SN9C120, MI0360, 0x5d)}, /*sn9c128*/
+-/*    {USB_DEVICE(0x0c45, 0x6108), BSI(SN9C120, OM6801, 0x??)}, */
++/*    {USB_DEVICE(0x0c45, 0x6102), BSI(SN9C120, PO2030N, ??)}, */
++/*    {USB_DEVICE(0x0c45, 0x6108), BSI(SN9C120, OM6802, 0x21)}, */
+       {USB_DEVICE(0x0c45, 0x610a), BSI(SN9C120, OV7648, 0x21)}, /*sn9c128*/
+       {USB_DEVICE(0x0c45, 0x610b), BSI(SN9C120, OV7660, 0x21)}, /*sn9c128*/
+       {USB_DEVICE(0x0c45, 0x610c), BSI(SN9C120, HV7131R, 0x11)}, /*sn9c128*/
+@@ -2355,6 +2356,7 @@ static const __devinitdata struct usb_de
+ #if !defined CONFIG_USB_SN9C102 && !defined CONFIG_USB_SN9C102_MODULE
+       {USB_DEVICE(0x0c45, 0x6130), BSI(SN9C120, MI0360, 0x5d)},
+ #endif
++/*    {USB_DEVICE(0x0c45, 0x6132), BSI(SN9C120, OV7670, 0x21)}, */
+       {USB_DEVICE(0x0c45, 0x6138), BSI(SN9C120, MO4000, 0x21)},
+       {USB_DEVICE(0x0c45, 0x613a), BSI(SN9C120, OV7648, 0x21)},
+ #if !defined CONFIG_USB_SN9C102 && !defined CONFIG_USB_SN9C102_MODULE
+@@ -2362,7 +2364,9 @@ static const __devinitdata struct usb_de
+ #endif
+       {USB_DEVICE(0x0c45, 0x613c), BSI(SN9C120, HV7131R, 0x11)},
+       {USB_DEVICE(0x0c45, 0x613e), BSI(SN9C120, OV7630, 0x21)},
+-      {USB_DEVICE(0x0c45, 0x6143), BSI(SN9C120, SP80708, 0x18)},
++/*    {USB_DEVICE(0x0c45, 0x6142), BSI(SN9C120, PO2030N, ??)}, *sn9c120b*/
++      {USB_DEVICE(0x0c45, 0x6143), BSI(SN9C120, SP80708, 0x18)}, /*sn9c120b*/
++      {USB_DEVICE(0x0c45, 0x6148), BSI(SN9C120, OM6802, 0x21)}, /*sn9c120b*/
+       {}
+ };
+ MODULE_DEVICE_TABLE(usb, device_table);
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:52 2009
+Message-Id: <20091207000651.918145140@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:42 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jean-Francois Moine <moinejf@free.fr>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>,
+ Michael Krufky <mkrufky@linuxtv.org>
+Subject: [066/119] V4L/DVB (12501): gspca - sonixj: Do the ov7660 sensor work again.
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=v4l-dvb-12501-gspca-sonixj-do-the-ov7660-sensor-work-again.patch
+Content-Length: 3665
+Lines: 95
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jean-Francois Moine <moinejf@free.fr>
+
+commit 47f7f6fb7949b6546baf4b6f26bf0ca075d12759 upstream.
+
+- bad sensor power
+- bad edge gain/threshold
+- set back the auto gain
+- light frequency filter inverted
+
+Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/gspca/sonixj.c |   23 +++++++----------------
+ 1 file changed, 7 insertions(+), 16 deletions(-)
+
+--- a/drivers/media/video/gspca/sonixj.c
++++ b/drivers/media/video/gspca/sonixj.c
+@@ -733,7 +733,7 @@ static const u8 ov7660_sensor_init[][8] 
+                                               /* COM 1 BAVE GEAVE AECHH */
+       {0xb1, 0x21, 0x08, 0x83, 0x01, 0x00, 0x00, 0x10}, /* RAVE COM2 */
+       {0xd1, 0x21, 0x0c, 0x00, 0x08, 0x04, 0x4f, 0x10}, /* COM 3 4 5 6 */
+-      {0xd1, 0x21, 0x10, 0x7f, 0x40, 0x05, 0xf8, 0x10},
++      {0xd1, 0x21, 0x10, 0x7f, 0x40, 0x05, 0xff, 0x10},
+                                               /* AECH CLKRC COM7 COM8 */
+       {0xc1, 0x21, 0x14, 0x2c, 0x00, 0x02, 0x00, 0x10}, /* COM9 COM10 */
+       {0xd1, 0x21, 0x17, 0x10, 0x60, 0x02, 0x7b, 0x10},
+@@ -783,7 +783,7 @@ static const u8 ov7660_sensor_init[][8] 
+       {0xc1, 0x21, 0x88, 0xaf, 0xc7, 0xdf, 0x00, 0x10}, /* gamma curve */
+       {0xc1, 0x21, 0x8b, 0x99, 0x99, 0xcf, 0x00, 0x10}, /* reserved */
+       {0xb1, 0x21, 0x92, 0x00, 0x00, 0x00, 0x00, 0x10}, /* DM_LNL/H */
+-      {0xb1, 0x21, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x10},
++      {0xa1, 0x21, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x10},
+ /****** (some exchanges in the win trace) ******/
+       {0xa1, 0x21, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x10}, /* MVFP */
+                                               /* bits[3..0]reserved */
+@@ -1145,11 +1145,6 @@ static int configure_gpio(struct gspca_d
+               reg_w1(gspca_dev, 0x01, 0x42);
+               break;
+       case SENSOR_OV7660:
+-              reg_w1(gspca_dev, 0x01, 0x61);
+-              reg_w1(gspca_dev, 0x17, 0x20);
+-              reg_w1(gspca_dev, 0x01, 0x60);
+-              reg_w1(gspca_dev, 0x01, 0x40);
+-              break;
+       case SENSOR_SP80708:
+               reg_w1(gspca_dev, 0x01, 0x63);
+               reg_w1(gspca_dev, 0x17, 0x20);
+@@ -1624,6 +1619,8 @@ static void setvflip(struct sd *sd)
+ static void setinfrared(struct sd *sd)
+ {
++      if (sd->gspca_dev.ctrl_dis & (1 << INFRARED_IDX))
++              return;
+ /*fixme: different sequence for StarCam Clip and StarCam 370i */
+ /* Clip */
+       i2c_w1(&sd->gspca_dev, 0x02,                    /* gpio */
+@@ -1639,10 +1636,10 @@ static void setfreq(struct gspca_dev *gs
+       if (sd->sensor == SENSOR_OV7660) {
+               u8 com8;
+-              com8 = 0xf8;            /* no auto gain/wb/expo */
++              com8 = 0xdf;            /* auto gain/wb/expo */
+               switch (sd->freq) {
+               case 0: /* Banding filter disabled */
+-                      i2c_w1(gspca_dev, 0x13, com8 & 0xdf);
++                      i2c_w1(gspca_dev, 0x13, com8 | 0x20);
+                       break;
+               case 1: /* 50 hz */
+                       i2c_w1(gspca_dev, 0x13, com8);
+@@ -1799,12 +1796,6 @@ static int sd_start(struct gspca_dev *gs
+               reg_w1(gspca_dev, 0x99, 0x60);
+               break;
+       case SENSOR_OV7660:
+-              reg_w1(gspca_dev, 0x9a, 0x05);
+-              if (sd->bridge == BRIDGE_SN9C105)
+-                      reg_w1(gspca_dev, 0x99, 0xff);
+-              else
+-                      reg_w1(gspca_dev, 0x99, 0x5b);
+-              break;
+       case SENSOR_SP80708:
+               reg_w1(gspca_dev, 0x9a, 0x05);
+               reg_w1(gspca_dev, 0x99, 0x59);
+@@ -2328,7 +2319,7 @@ static const __devinitdata struct usb_de
+       {USB_DEVICE(0x0c45, 0x607c), BSI(SN9C102P, HV7131R, 0x11)},
+ /*    {USB_DEVICE(0x0c45, 0x607e), BSI(SN9C102P, OV7630, 0x??)}, */
+       {USB_DEVICE(0x0c45, 0x60c0), BSI(SN9C105, MI0360, 0x5d)},
+-/*    {USB_DEVICE(0x0c45, 0x60c8), BSI(SN9C105, OM6801, 0x??)}, */
++/*    {USB_DEVICE(0x0c45, 0x60c8), BSI(SN9C105, OM6802, 0x??)}, */
+ /*    {USB_DEVICE(0x0c45, 0x60cc), BSI(SN9C105, HV7131GP, 0x??)}, */
+       {USB_DEVICE(0x0c45, 0x60ec), BSI(SN9C105, MO4000, 0x21)},
+ /*    {USB_DEVICE(0x0c45, 0x60ef), BSI(SN9C105, ICM105C, 0x??)}, */
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:52 2009
+Message-Id: <20091207000652.162070217@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:43 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jean-Francois Moine <moinejf@free.fr>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>,
+ Michael Krufky <mkrufky@linuxtv.org>
+Subject: [067/119] V4L/DVB (12691): gspca - sonixj: Dont use mdelay().
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=v4l-dvb-12691-gspca-sonixj-don-t-use-mdelay.patch
+Content-Length: 769
+Lines: 25
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jean-Francois Moine <moinejf@free.fr>
+
+commit 1f78a976ce18bc98e8b509cee04c5b3756098614 upstream.
+
+Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/gspca/sonixj.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/media/video/gspca/sonixj.c
++++ b/drivers/media/video/gspca/sonixj.c
+@@ -1150,7 +1150,7 @@ static int configure_gpio(struct gspca_d
+               reg_w1(gspca_dev, 0x17, 0x20);
+               reg_w1(gspca_dev, 0x01, 0x62);
+               reg_w1(gspca_dev, 0x01, 0x42);
+-              mdelay(100);
++              msleep(100);
+               reg_w1(gspca_dev, 0x02, 0x62);
+               break;
+ /*    case SENSOR_HV7131R: */
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:52 2009
+Message-Id: <20091207000652.343904207@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:44 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jean-Francois Moine <moinejf@free.fr>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>,
+ Michael Krufky <mkrufky@linuxtv.org>
+Subject: [068/119] V4L/DVB (12696): gspca - sonixj / sn9c102: Two drivers for 0c45:60fc and 0c45:613e.
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=v4l-dvb-12696-gspca-sonixj-sn9c102-two-drivers-for-0c45-60fc-and-0c45-613e.patch
+Content-Length: 1679
+Lines: 41
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jean-Francois Moine <moinejf@free.fr>
+
+commit f077b0a64856c5b3bf346ae9fba8631c1fb210cf upstream.
+
+Let 0c45:60fc in sn9c102 and 0c45:613e in gspca-sonixj (sensor not supported).
+
+Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/gspca/sonixj.c             |    2 +-
+ drivers/media/video/sn9c102/sn9c102_devtable.h |    2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/media/video/gspca/sonixj.c
++++ b/drivers/media/video/gspca/sonixj.c
+@@ -2325,8 +2325,8 @@ static const __devinitdata struct usb_de
+ /*    {USB_DEVICE(0x0c45, 0x60ef), BSI(SN9C105, ICM105C, 0x??)}, */
+ /*    {USB_DEVICE(0x0c45, 0x60fa), BSI(SN9C105, OV7648, 0x??)}, */
+       {USB_DEVICE(0x0c45, 0x60fb), BSI(SN9C105, OV7660, 0x21)},
+-      {USB_DEVICE(0x0c45, 0x60fc), BSI(SN9C105, HV7131R, 0x11)},
+ #if !defined CONFIG_USB_SN9C102 && !defined CONFIG_USB_SN9C102_MODULE
++      {USB_DEVICE(0x0c45, 0x60fc), BSI(SN9C105, HV7131R, 0x11)},
+       {USB_DEVICE(0x0c45, 0x60fe), BSI(SN9C105, OV7630, 0x21)},
+ #endif
+       {USB_DEVICE(0x0c45, 0x6100), BSI(SN9C120, MI0360, 0x5d)}, /*sn9c128*/
+--- a/drivers/media/video/sn9c102/sn9c102_devtable.h
++++ b/drivers/media/video/sn9c102/sn9c102_devtable.h
+@@ -123,8 +123,8 @@ static const struct usb_device_id sn9c10
+       { SN9C102_USB_DEVICE(0x0c45, 0x613b, BRIDGE_SN9C120), },
+ #if !defined CONFIG_USB_GSPCA && !defined CONFIG_USB_GSPCA_MODULE
+       { SN9C102_USB_DEVICE(0x0c45, 0x613c, BRIDGE_SN9C120), },
+-#endif
+       { SN9C102_USB_DEVICE(0x0c45, 0x613e, BRIDGE_SN9C120), },
++#endif
+       { }
+ };
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:52 2009
+Message-Id: <20091207000652.482876972@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:45 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Chris Wilson <chris@chris-wilson.co.uk>,
+ Eric Anholt <eric@anholt.net>
+Subject: [069/119] drm/i915: Select CONFIG_SHMEM
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=drm-i915-select-config_shmem.patch
+Content-Length: 999
+Lines: 34
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Chris Wilson <chris@chris-wilson.co.uk>
+
+commit ca9ab10033d190c1ede85fdf456307bdfdabf079 upstream.
+
+The driver requires shmfs as the backing filesystem to handle the buffer
+objects, so ensure it is selected if the user chooses to build our
+driver.
+
+Fixes: Bug 14662 - Dell E5500 kernel panic with KMS
+http://bugzilla.kernel.org/show_bug.cgi?id=14662
+
+The revealing nature of the panic is the NULL function pointer
+dereference in read_cache_page_async().
+
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Reported-and-tested-by: Mateusz Kaduk <mateusz.kaduk@gmail.com>
+Signed-off-by: Eric Anholt <eric@anholt.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/Kconfig |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/gpu/drm/Kconfig
++++ b/drivers/gpu/drm/Kconfig
+@@ -82,6 +82,7 @@ config DRM_I830
+ config DRM_I915
+       tristate "i915 driver"
+       depends on AGP_INTEL
++      select SHMEM
+       select FB_CFB_FILLRECT
+       select FB_CFB_COPYAREA
+       select FB_CFB_IMAGEBLIT
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:52 2009
+Message-Id: <20091207000652.647886780@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:46 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jesse Barnes <jbarnes@virtuousgeek.org>,
+ Dave Airlie <airlied@redhat.com>
+Subject: [070/119] drm: work around EDIDs with bad htotal/vtotal values
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=drm-work-around-edids-with-bad-htotal-vtotal-values.patch
+Content-Length: 942
+Lines: 33
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jesse Barnes <jbarnes@virtuousgeek.org>
+
+commit 7064fef56369c9e2c6e35ff6d6b4b63d42a859ce upstream.
+
+We did this on the userspace side, but we need a similar fix for the
+kernel.
+
+Fixes LP #460664.
+
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/drm_edid.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/drivers/gpu/drm/drm_edid.c
++++ b/drivers/gpu/drm/drm_edid.c
+@@ -333,6 +333,12 @@ static struct drm_display_mode *drm_mode
+       mode->vsync_end = mode->vsync_start + vsync_pulse_width;
+       mode->vtotal = mode->vdisplay + vblank;
++      /* Some EDIDs have bogus h/vtotal values */
++      if (mode->hsync_end > mode->htotal)
++              mode->htotal = mode->hsync_end + 1;
++      if (mode->vsync_end > mode->vtotal)
++              mode->vtotal = mode->vsync_end + 1;
++
+       drm_mode_set_name(mode);
+       if (pt->misc & DRM_EDID_PT_INTERLACED)
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:53 2009
+Message-Id: <20091207000652.847365541@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:47 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Nanhai Zou <nanhai.zou@intel.com>,
+ Zhenyu Wang <zhenyuw@linux.intel.com>,
+ Eric Anholt <eric@anholt.net>
+Subject: [071/119] drm/i915: Fix IRQ stall issue on Ironlake
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=drm-i915-fix-irq-stall-issue-on-ironlake.patch
+Content-Length: 1307
+Lines: 47
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Nanhai Zou <nanhai.zou@intel.com>
+
+commit 2d109a845dd3074885db726892c629ab73dd0ed8 upstream.
+
+The master irq control in DE must be disabled before irq handling,
+and enable after the process. This fixes the irq stall issue on
+Ironlake.
+
+Signed-off-by: Nanhai Zou <nanhai.zou@intel.com>
+Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
+Signed-off-by: Eric Anholt <eric@anholt.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/i915/i915_irq.c |   10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/i915/i915_irq.c
++++ b/drivers/gpu/drm/i915/i915_irq.c
+@@ -253,10 +253,15 @@ irqreturn_t igdng_irq_handler(struct drm
+ {
+       drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
+       int ret = IRQ_NONE;
+-      u32 de_iir, gt_iir;
++      u32 de_iir, gt_iir, de_ier;
+       u32 new_de_iir, new_gt_iir;
+       struct drm_i915_master_private *master_priv;
++      /* disable master interrupt before clearing iir  */
++      de_ier = I915_READ(DEIER);
++      I915_WRITE(DEIER, de_ier & ~DE_MASTER_IRQ_CONTROL);
++      (void)I915_READ(DEIER);
++
+       de_iir = I915_READ(DEIIR);
+       gt_iir = I915_READ(GTIIR);
+@@ -287,6 +292,9 @@ irqreturn_t igdng_irq_handler(struct drm
+               gt_iir = new_gt_iir;
+       }
++      I915_WRITE(DEIER, de_ier);
++      (void)I915_READ(DEIER);
++
+       return ret;
+ }
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:53 2009
+Message-Id: <20091207000653.140690475@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:48 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Eric Dumazet <eric.dumazet@gmail.com>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [072/119] udp: Fix udp_poll() and ioctl()
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=udp-fix-udp_poll-and-ioctl.patch
+Content-Length: 3458
+Lines: 129
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Eric Dumazet <eric.dumazet@gmail.com>
+
+[ Upstream commit 85584672012ee0c3b7b8e033a1ecf7c11878e45f ]
+
+udp_poll() can in some circumstances drop frames with incorrect checksums.
+
+Problem is we now have to lock the socket while dropping frames, or risk
+sk_forward corruption.
+
+This bug is present since commit 95766fff6b9a78d1
+([UDP]: Add memory accounting.)
+
+While we are at it, we can correct ioctl(SIOCINQ) to also drop bad frames.
+
+Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+---
+ net/ipv4/udp.c |   74 +++++++++++++++++++++++++++++++++------------------------
+ 1 file changed, 43 insertions(+), 31 deletions(-)
+
+--- a/net/ipv4/udp.c
++++ b/net/ipv4/udp.c
+@@ -831,6 +831,42 @@ out:
+       return ret;
+ }
++
++/**
++ *    first_packet_length     - return length of first packet in receive queue
++ *    @sk: socket
++ *
++ *    Drops all bad checksum frames, until a valid one is found.
++ *    Returns the length of found skb, or 0 if none is found.
++ */
++static unsigned int first_packet_length(struct sock *sk)
++{
++      struct sk_buff_head list_kill, *rcvq = &sk->sk_receive_queue;
++      struct sk_buff *skb;
++      unsigned int res;
++
++      __skb_queue_head_init(&list_kill);
++
++      spin_lock_bh(&rcvq->lock);
++      while ((skb = skb_peek(rcvq)) != NULL &&
++              udp_lib_checksum_complete(skb)) {
++              UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS,
++                               IS_UDPLITE(sk));
++              __skb_unlink(skb, rcvq);
++              __skb_queue_tail(&list_kill, skb);
++      }
++      res = skb ? skb->len : 0;
++      spin_unlock_bh(&rcvq->lock);
++
++      if (!skb_queue_empty(&list_kill)) {
++              lock_sock(sk);
++              __skb_queue_purge(&list_kill);
++              sk_mem_reclaim_partial(sk);
++              release_sock(sk);
++      }
++      return res;
++}
++
+ /*
+  *    IOCTL requests applicable to the UDP protocol
+  */
+@@ -847,21 +883,16 @@ int udp_ioctl(struct sock *sk, int cmd, 
+       case SIOCINQ:
+       {
+-              struct sk_buff *skb;
+-              unsigned long amount;
++              unsigned int amount = first_packet_length(sk);
+-              amount = 0;
+-              spin_lock_bh(&sk->sk_receive_queue.lock);
+-              skb = skb_peek(&sk->sk_receive_queue);
+-              if (skb != NULL) {
++              if (amount)
+                       /*
+                        * We will only return the amount
+                        * of this packet since that is all
+                        * that will be read.
+                        */
+-                      amount = skb->len - sizeof(struct udphdr);
+-              }
+-              spin_unlock_bh(&sk->sk_receive_queue.lock);
++                      amount -= sizeof(struct udphdr);
++
+               return put_user(amount, (int __user *)arg);
+       }
+@@ -1525,32 +1556,13 @@ unsigned int udp_poll(struct file *file,
+ {
+       unsigned int mask = datagram_poll(file, sock, wait);
+       struct sock *sk = sock->sk;
+-      int     is_lite = IS_UDPLITE(sk);
+       /* Check for false positives due to checksum errors */
+-      if ( (mask & POLLRDNORM) &&
+-           !(file->f_flags & O_NONBLOCK) &&
+-           !(sk->sk_shutdown & RCV_SHUTDOWN)){
+-              struct sk_buff_head *rcvq = &sk->sk_receive_queue;
+-              struct sk_buff *skb;
+-
+-              spin_lock_bh(&rcvq->lock);
+-              while ((skb = skb_peek(rcvq)) != NULL &&
+-                     udp_lib_checksum_complete(skb)) {
+-                      UDP_INC_STATS_BH(sock_net(sk),
+-                                      UDP_MIB_INERRORS, is_lite);
+-                      __skb_unlink(skb, rcvq);
+-                      kfree_skb(skb);
+-              }
+-              spin_unlock_bh(&rcvq->lock);
+-
+-              /* nothing to see, move along */
+-              if (skb == NULL)
+-                      mask &= ~(POLLIN | POLLRDNORM);
+-      }
++      if ((mask & POLLRDNORM) && !(file->f_flags & O_NONBLOCK) &&
++          !(sk->sk_shutdown & RCV_SHUTDOWN) && !first_packet_length(sk))
++              mask &= ~(POLLIN | POLLRDNORM);
+       return mask;
+-
+ }
+ struct proto udp_prot = {
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:53 2009
+Message-Id: <20091207000653.339579495@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:49 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Ben Hutchings <ben@decadent.org.uk>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [073/119] acenic: Pass up error code from ace_load_firmware()
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=acenic-pass-up-error-code-from-ace_load_firmware.patch
+Content-Length: 851
+Lines: 28
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Ben Hutchings <ben@decadent.org.uk>
+
+[ Upstream commit 6c60e0c30c80fcd53e61701b7865a85283f8a341 ]
+
+If ace_load_firmware() fails, ace_init() cleans up but still returns
+0, leading to an oops as seen in <http://bugs.debian.org/521383>.
+It should pass the error code up.
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+---
+ drivers/net/acenic.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/net/acenic.c
++++ b/drivers/net/acenic.c
+@@ -1209,7 +1209,8 @@ static int __devinit ace_init(struct net
+       memset(ap->info, 0, sizeof(struct ace_info));
+       memset(ap->skb, 0, sizeof(struct ace_skb));
+-      if (ace_load_firmware(dev))
++      ecode = ace_load_firmware(dev);
++      if (ecode)
+               goto init_error;
+       ap->fw_running = 0;
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:53 2009
+Message-Id: <20091207000653.567571821@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:50 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jamal Hadi Salim <hadi@cyberus.ca>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [074/119] pkt_sched: pedit use proper struct
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=pkt_sched-pedit-use-proper-struct.patch
+Content-Length: 887
+Lines: 30
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jamal Hadi Salim <hadi@cyberus.ca>
+
+[ Upstream commit 53f7e35f8b7fc2f5620a863ac613bcf3080cb6ba ]
+
+This probably deserves to go into -stable.
+
+Pedit will reject a policy that is large because it
+uses the wrong structure in the policy validation.
+This fixes it.
+
+Signed-off-by: Jamal Hadi Salim <hadi@cyberus.ca>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/sched/act_pedit.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/net/sched/act_pedit.c
++++ b/net/sched/act_pedit.c
+@@ -34,7 +34,7 @@ static struct tcf_hashinfo pedit_hash_in
+ };
+ static const struct nla_policy pedit_policy[TCA_PEDIT_MAX + 1] = {
+-      [TCA_PEDIT_PARMS]       = { .len = sizeof(struct tcf_pedit) },
++      [TCA_PEDIT_PARMS]       = { .len = sizeof(struct tc_pedit) },
+ };
+ static int tcf_pedit_init(struct nlattr *nla, struct nlattr *est,
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:53 2009
+Message-Id: <20091207000653.772759765@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:51 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Eric Dumazet <eric.dumazet@gmail.com>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [075/119] net: fix sk_forward_alloc corruption
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=net-fix-sk_forward_alloc-corruption.patch
+Content-Length: 3817
+Lines: 126
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Eric Dumazet <eric.dumazet@gmail.com>
+
+[ Upstream commit: 9d410c796067686b1e032d54ce475b7055537138 ]
+
+On UDP sockets, we must call skb_free_datagram() with socket locked,
+or risk sk_forward_alloc corruption. This requirement is not respected
+in SUNRPC.
+
+Add a convenient helper, skb_free_datagram_locked() and use it in SUNRPC
+
+Reported-by: Francis Moreau <francis.moro@gmail.com>
+Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+---
+ include/linux/skbuff.h |    2 ++
+ net/core/datagram.c    |   10 +++++++++-
+ net/ipv4/udp.c         |    4 +---
+ net/ipv6/udp.c         |    4 +---
+ net/sunrpc/svcsock.c   |   10 +++++-----
+ 5 files changed, 18 insertions(+), 12 deletions(-)
+
+--- a/include/linux/skbuff.h
++++ b/include/linux/skbuff.h
+@@ -1761,6 +1761,8 @@ extern int              skb_copy_datagram_cons
+                                                    int to_offset,
+                                                    int size);
+ extern void          skb_free_datagram(struct sock *sk, struct sk_buff *skb);
++extern void          skb_free_datagram_locked(struct sock *sk,
++                                              struct sk_buff *skb);
+ extern int           skb_kill_datagram(struct sock *sk, struct sk_buff *skb,
+                                        unsigned int flags);
+ extern __wsum        skb_checksum(const struct sk_buff *skb, int offset,
+--- a/net/core/datagram.c
++++ b/net/core/datagram.c
+@@ -223,6 +223,15 @@ void skb_free_datagram(struct sock *sk, 
+       consume_skb(skb);
+       sk_mem_reclaim_partial(sk);
+ }
++EXPORT_SYMBOL(skb_free_datagram);
++
++void skb_free_datagram_locked(struct sock *sk, struct sk_buff *skb)
++{
++      lock_sock(sk);
++      skb_free_datagram(sk, skb);
++      release_sock(sk);
++}
++EXPORT_SYMBOL(skb_free_datagram_locked);
+ /**
+  *    skb_kill_datagram - Free a datagram skbuff forcibly
+@@ -749,5 +758,4 @@ unsigned int datagram_poll(struct file *
+ EXPORT_SYMBOL(datagram_poll);
+ EXPORT_SYMBOL(skb_copy_and_csum_datagram_iovec);
+ EXPORT_SYMBOL(skb_copy_datagram_iovec);
+-EXPORT_SYMBOL(skb_free_datagram);
+ EXPORT_SYMBOL(skb_recv_datagram);
+--- a/net/ipv4/udp.c
++++ b/net/ipv4/udp.c
+@@ -987,9 +987,7 @@ try_again:
+               err = ulen;
+ out_free:
+-      lock_sock(sk);
+-      skb_free_datagram(sk, skb);
+-      release_sock(sk);
++      skb_free_datagram_locked(sk, skb);
+ out:
+       return err;
+--- a/net/ipv6/udp.c
++++ b/net/ipv6/udp.c
+@@ -288,9 +288,7 @@ try_again:
+               err = ulen;
+ out_free:
+-      lock_sock(sk);
+-      skb_free_datagram(sk, skb);
+-      release_sock(sk);
++      skb_free_datagram_locked(sk, skb);
+ out:
+       return err;
+--- a/net/sunrpc/svcsock.c
++++ b/net/sunrpc/svcsock.c
+@@ -110,7 +110,7 @@ static void svc_release_skb(struct svc_r
+               rqstp->rq_xprt_ctxt = NULL;
+               dprintk("svc: service %p, releasing skb %p\n", rqstp, skb);
+-              skb_free_datagram(svsk->sk_sk, skb);
++              skb_free_datagram_locked(svsk->sk_sk, skb);
+       }
+ }
+@@ -537,7 +537,7 @@ static int svc_udp_recvfrom(struct svc_r
+                       printk("rpcsvc: received unknown control message:"
+                              "%d/%d\n",
+                              cmh->cmsg_level, cmh->cmsg_type);
+-              skb_free_datagram(svsk->sk_sk, skb);
++              skb_free_datagram_locked(svsk->sk_sk, skb);
+               return 0;
+       }
+       svc_udp_get_dest_address(rqstp, cmh);
+@@ -548,18 +548,18 @@ static int svc_udp_recvfrom(struct svc_r
+               if (csum_partial_copy_to_xdr(&rqstp->rq_arg, skb)) {
+                       local_bh_enable();
+                       /* checksum error */
+-                      skb_free_datagram(svsk->sk_sk, skb);
++                      skb_free_datagram_locked(svsk->sk_sk, skb);
+                       return 0;
+               }
+               local_bh_enable();
+-              skb_free_datagram(svsk->sk_sk, skb);
++              skb_free_datagram_locked(svsk->sk_sk, skb);
+       } else {
+               /* we can use it in-place */
+               rqstp->rq_arg.head[0].iov_base = skb->data +
+                       sizeof(struct udphdr);
+               rqstp->rq_arg.head[0].iov_len = len;
+               if (skb_checksum_complete(skb)) {
+-                      skb_free_datagram(svsk->sk_sk, skb);
++                      skb_free_datagram_locked(svsk->sk_sk, skb);
+                       return 0;
+               }
+               rqstp->rq_xprt_ctxt = skb;
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:54 2009
+Message-Id: <20091207000654.000557851@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:52 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jasper Spaans <spaans@fox-it.com>,
+ Eric Dumazet <eric.dumazet@gmail.com>,
+ Jay Vosburgh <fubar@us.ibm.com>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [076/119] bonding: Modify hash transmit policies to use the packets source MAC address
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=bonding-modify-hash-transmit-policies-to-use-the-packet-s-source-mac-address.patch
+Content-Length: 1650
+Lines: 52
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jasper Spaans <spaans@fox-it.com>
+
+[ Upstream commit d3da68310a2cf934c2ea8a99a519d8b1ccca4c56 ]
+
+Modify bonding hash transmit policies to use the psource MAC address of
+the packet instead of the MAC address configured for the bonding device.
+
+The old sitation conflicts with the documentation.
+
+Signed-off-by: Jasper Spaans <spaans@fox-it.com>
+Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
+Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+---
+ drivers/net/bonding/bond_main.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/drivers/net/bonding/bond_main.c
++++ b/drivers/net/bonding/bond_main.c
+@@ -3707,10 +3707,10 @@ static int bond_xmit_hash_policy_l23(str
+       if (skb->protocol == htons(ETH_P_IP)) {
+               return ((ntohl(iph->saddr ^ iph->daddr) & 0xffff) ^
+-                      (data->h_dest[5] ^ bond_dev->dev_addr[5])) % count;
++                      (data->h_dest[5] ^ data->h_source[5])) % count;
+       }
+-      return (data->h_dest[5] ^ bond_dev->dev_addr[5]) % count;
++      return (data->h_dest[5] ^ data->h_source[5]) % count;
+ }
+ /*
+@@ -3737,7 +3737,7 @@ static int bond_xmit_hash_policy_l34(str
+       }
+-      return (data->h_dest[5] ^ bond_dev->dev_addr[5]) % count;
++      return (data->h_dest[5] ^ data->h_source[5]) % count;
+ }
+ /*
+@@ -3748,7 +3748,7 @@ static int bond_xmit_hash_policy_l2(stru
+ {
+       struct ethhdr *data = (struct ethhdr *)skb->data;
+-      return (data->h_dest[5] ^ bond_dev->dev_addr[5]) % count;
++      return (data->h_dest[5] ^ data->h_source[5]) % count;
+ }
+ /*-------------------------- Device entry points ----------------------------*/
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:54 2009
+Message-Id: <20091207000654.200910138@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:53 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Ben Hutchings <bhutchings@solarflare.com>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [077/119] sfc: Set ip_summed correctly for page buffers passed to GRO
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=sfc-set-ip_summed-correctly-for-page-buffers-passed-to-gro.patch
+Content-Length: 1705
+Lines: 56
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Ben Hutchings <bhutchings@solarflare.com>
+
+[ Upstream commit 345056af41feeda506a8993474b9cbb2c66bc9fb ]
+
+Page buffers containing packets with an incorrect checksum or using a
+protocol not handled by hardware checksum offload were previously not
+passed to LRO.  The conversion to GRO changed this, but did not set
+the ip_summed value accordingly.
+
+Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+---
+ drivers/net/sfc/rx.c |    9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/sfc/rx.c
++++ b/drivers/net/sfc/rx.c
+@@ -444,7 +444,8 @@ static void efx_rx_packet__check_len(str
+  * the appropriate LRO method
+  */
+ static void efx_rx_packet_lro(struct efx_channel *channel,
+-                            struct efx_rx_buffer *rx_buf)
++                            struct efx_rx_buffer *rx_buf,
++                            bool checksummed)
+ {
+       struct napi_struct *napi = &channel->napi_str;
+@@ -466,7 +467,8 @@ static void efx_rx_packet_lro(struct efx
+               skb->len = rx_buf->len;
+               skb->data_len = rx_buf->len;
+               skb->truesize += rx_buf->len;
+-              skb->ip_summed = CHECKSUM_UNNECESSARY;
++              skb->ip_summed =
++                      checksummed ? CHECKSUM_UNNECESSARY : CHECKSUM_NONE;
+               napi_gro_frags(napi);
+@@ -475,6 +477,7 @@ out:
+               rx_buf->page = NULL;
+       } else {
+               EFX_BUG_ON_PARANOID(!rx_buf->skb);
++              EFX_BUG_ON_PARANOID(!checksummed);
+               napi_gro_receive(napi, rx_buf->skb);
+               rx_buf->skb = NULL;
+@@ -570,7 +573,7 @@ void __efx_rx_packet(struct efx_channel 
+       }
+       if (likely(checksummed || rx_buf->page)) {
+-              efx_rx_packet_lro(channel, rx_buf);
++              efx_rx_packet_lro(channel, rx_buf, checksummed);
+               goto done;
+       }
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:54 2009
+Message-Id: <20091207000654.364893397@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:54 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Roel Kluin <roel.kluin@gmail.com>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [078/119] sparc64: replace parentheses in pmul()
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=sparc64-replace-parentheses-in-pmul.patch
+Content-Length: 853
+Lines: 26
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Roel Kluin <roel.kluin@gmail.com>
+
+[ Upstream commit 88b938e63e68fd35e603421f722be0f35dde1016 ]
+
+`>>' has a higher precedence than `?' so src2 evaluated to
+either 16 or 0 dependent on the bits set in rs2.
+
+Signed-off-by: Roel Kluin <roel.kluin@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+---
+ arch/sparc/kernel/visemul.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/sparc/kernel/visemul.c
++++ b/arch/sparc/kernel/visemul.c
+@@ -617,7 +617,7 @@ static void pmul(struct pt_regs *regs, u
+               rs2 = fps_regval(f, RS2(insn));
+               rd_val = 0;
+-              src2 = (rs2 >> (opf == FMUL8x16AU_OPF) ? 16 : 0);
++              src2 = rs2 >> (opf == FMUL8x16AU_OPF ? 16 : 0);
+               for (byte = 0; byte < 4; byte++) {
+                       u16 src1 = (rs1 >> (byte * 8)) & 0x00ff;
+                       u32 prod = src1 * src2;
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:54 2009
+Message-Id: <20091207000654.584900701@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:55 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [079/119] sparc: Move of_set_property_mutex acquisition outside of devtree_lock grab.
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=sparc-move-of_set_property_mutex-acquisition-outside-of-devtree_lock-grab.patch
+Content-Length: 1156
+Lines: 43
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: David S. Miller <davem@davemloft.net>
+
+[ Upstream commit 1c9d80ddc60f8ac26344ec3db9830e5f8016c16d ]
+
+Otherwise we try to sleep with preemption disabled, etc.
+
+Noticed by Thomas Gleixner.
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+---
+ arch/sparc/kernel/prom_common.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/arch/sparc/kernel/prom_common.c
++++ b/arch/sparc/kernel/prom_common.c
+@@ -76,6 +76,7 @@ int of_set_property(struct device_node *
+       err = -ENODEV;
++      mutex_lock(&of_set_property_mutex);
+       write_lock(&devtree_lock);
+       prevp = &dp->properties;
+       while (*prevp) {
+@@ -85,9 +86,7 @@ int of_set_property(struct device_node *
+                       void *old_val = prop->value;
+                       int ret;
+-                      mutex_lock(&of_set_property_mutex);
+                       ret = prom_setprop(dp->node, name, val, len);
+-                      mutex_unlock(&of_set_property_mutex);
+                       err = -EINVAL;
+                       if (ret >= 0) {
+@@ -106,6 +105,7 @@ int of_set_property(struct device_node *
+               prevp = &(*prevp)->next;
+       }
+       write_unlock(&devtree_lock);
++      mutex_unlock(&of_set_property_mutex);
+       /* XXX Upate procfs if necessary... */
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:54 2009
+Message-Id: <20091207000654.821385285@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:56 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Rusty Russell <rusty@rustcorp.com.au>,
+ Peter Zijlstra <peterz@infradead.org>,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [080/119] sched: Fix boot crash by zalloc()ing most of the cpu masks
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=sched-fix-boot-crash-by-zalloc-ing-most-of-the-cpu-masks.patch
+Content-Length: 1333
+Lines: 41
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Rusty Russell <rusty@rustcorp.com.au>
+
+commit 49557e620339cb134127b5bfbcfecc06b77d0232 upstream.
+
+I got a boot crash when forcing cpumasks offstack on 32 bit,
+because find_new_ilb() returned 3 on my UP system (nohz.cpu_mask
+wasn't zeroed).
+
+AFAICT the others need to be zeroed too: only
+nohz.ilb_grp_nohz_mask is initialized before use.
+
+Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
+Cc: Peter Zijlstra <peterz@infradead.org>
+LKML-Reference: <200911022037.21282.rusty@rustcorp.com.au>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/sched.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/kernel/sched.c
++++ b/kernel/sched.c
+@@ -9383,13 +9383,13 @@ void __init sched_init(void)
+       current->sched_class = &fair_sched_class;
+       /* Allocate the nohz_cpu_mask if CONFIG_CPUMASK_OFFSTACK */
+-      alloc_cpumask_var(&nohz_cpu_mask, GFP_NOWAIT);
++      zalloc_cpumask_var(&nohz_cpu_mask, GFP_NOWAIT);
+ #ifdef CONFIG_SMP
+ #ifdef CONFIG_NO_HZ
+-      alloc_cpumask_var(&nohz.cpu_mask, GFP_NOWAIT);
++      zalloc_cpumask_var(&nohz.cpu_mask, GFP_NOWAIT);
+       alloc_cpumask_var(&nohz.ilb_grp_nohz_mask, GFP_NOWAIT);
+ #endif
+-      alloc_cpumask_var(&cpu_isolated_map, GFP_NOWAIT);
++      zalloc_cpumask_var(&cpu_isolated_map, GFP_NOWAIT);
+ #endif /* SMP */
+       perf_counter_init();
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:55 2009
+Message-Id: <20091207000655.004715013@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:57 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Michael Krufky <mkrufky@kernellabs.com>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>
+Subject: [081/119] V4L/DVB (13202): smsusb: add autodetection support for three additional Hauppauge USB IDs
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=v4l-dvb-13202-smsusb-add-autodetection-support-for-three-additional-hauppauge-usb-ids.patch
+Content-Length: 949
+Lines: 33
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Michael Krufky <mkrufky@kernellabs.com>
+
+commit 78c948ab0cc44f9c8ae397d7d9d217bb498bfa2f upstream.
+
+Add support for three new Hauppauge Device USB IDs:
+
+2040:b900
+2040:b910
+2040:c000
+
+Signed-off-by: Michael Krufky <mkrufky@kernellabs.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+
+---
+ drivers/media/dvb/siano/smsusb.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/drivers/media/dvb/siano/smsusb.c
++++ b/drivers/media/dvb/siano/smsusb.c
+@@ -529,6 +529,12 @@ struct usb_device_id smsusb_id_table[] =
+               .driver_info = SMS1XXX_BOARD_SIANO_NICE },
+       { USB_DEVICE(0x187f, 0x0301),
+               .driver_info = SMS1XXX_BOARD_SIANO_VENICE },
++      { USB_DEVICE(0x2040, 0xb900),
++              .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
++      { USB_DEVICE(0x2040, 0xb910),
++              .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
++      { USB_DEVICE(0x2040, 0xc000),
++              .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
+       { } /* Terminating entry */
+       };
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:55 2009
+Message-Id: <20091207000655.196912423@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:58 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Michael Krufky <mkrufky@kernellabs.com>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>
+Subject: [082/119] V4L/DVB (13313): saa7134: add support for FORCE_TS_VALID mode for mpeg ts input
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=v4l-dvb-13313-saa7134-add-support-for-force_ts_valid-mode-for-mpeg-ts-input.patch
+Content-Length: 1899
+Lines: 49
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Michael Krufky <mkrufky@kernellabs.com>
+
+commit 4007a672abd88091e3cced158ec491d41c0c454c upstream.
+
+When FORCE_TS_VALID mode is enabled, the saa713x will accept MPEG TS input
+without requiring TS_VALID set high.  This is required for some new boards
+to function properly, due to the hardware design implementation.
+
+The configuration is toggled within the board setup configuration.  Boards
+that do not have this bit set will function as before with no change.
+
+Signed-off-by: Michael Krufky <mkrufky@kernellabs.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/saa7134/saa7134-ts.c |    6 ++++--
+ drivers/media/video/saa7134/saa7134.h    |    1 +
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+--- a/drivers/media/video/saa7134/saa7134.h
++++ b/drivers/media/video/saa7134/saa7134.h
+@@ -355,6 +355,7 @@ struct saa7134_board {
+       enum saa7134_mpeg_type  mpeg;
+       enum saa7134_mpeg_ts_type ts_type;
+       unsigned int            vid_port_opts;
++      unsigned int            ts_force_val:1;
+ };
+ #define card_has_radio(dev)   (NULL != saa7134_boards[dev->board].radio.name)
+--- a/drivers/media/video/saa7134/saa7134-ts.c
++++ b/drivers/media/video/saa7134/saa7134-ts.c
+@@ -262,11 +262,13 @@ int saa7134_ts_start(struct saa7134_dev 
+       switch (saa7134_boards[dev->board].ts_type) {
+       case SAA7134_MPEG_TS_PARALLEL:
+               saa_writeb(SAA7134_TS_SERIAL0, 0x40);
+-              saa_writeb(SAA7134_TS_PARALLEL, 0xec);
++              saa_writeb(SAA7134_TS_PARALLEL, 0xec |
++                      (saa7134_boards[dev->board].ts_force_val << 4));
+               break;
+       case SAA7134_MPEG_TS_SERIAL:
+               saa_writeb(SAA7134_TS_SERIAL0, 0xd8);
+-              saa_writeb(SAA7134_TS_PARALLEL, 0x6c);
++              saa_writeb(SAA7134_TS_PARALLEL, 0x6c |
++                      (saa7134_boards[dev->board].ts_force_val << 4));
+               saa_writeb(SAA7134_TS_PARALLEL_SERIAL, 0xbc);
+               saa_writeb(SAA7134_TS_SERIAL1, 0x02);
+               break;
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:55 2009
+Message-Id: <20091207000655.489018116@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:00:59 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Michael Krufky <mkrufky@kernellabs.com>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>
+Subject: [083/119] V4L/DVB (13314): saa7134: set ts_force_val for the Hauppauge WinTV HVR-1150
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=v4l-dvb-13314-saa7134-set-ts_force_val-for-the-hauppauge-wintv-hvr-1150.patch
+Content-Length: 999
+Lines: 28
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Michael Krufky <mkrufky@kernellabs.com>
+
+commit 22370ef5035f206283505409c9a64a595c5c7320 upstream.
+
+The Hauppauge WinTV HVR-1150 retail boards require the FORCE_TS_VALID bit
+to be set in order to function properly. This change will work on the early
+revisions on the board as well, but the final revision will not function
+without this change.
+
+Signed-off-by: Michael Krufky <mkrufky@kernellabs.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/saa7134/saa7134-cards.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/media/video/saa7134/saa7134-cards.c
++++ b/drivers/media/video/saa7134/saa7134-cards.c
+@@ -3373,6 +3373,7 @@ struct saa7134_board saa7134_boards[] = 
+               .tuner_config   = 3,
+               .mpeg           = SAA7134_MPEG_DVB,
+               .ts_type        = SAA7134_MPEG_TS_SERIAL,
++              .ts_force_val   = 1,
+               .gpiomask       = 0x0800100, /* GPIO 21 is an INPUT */
+               .inputs         = {{
+                       .name = name_tv,
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:55 2009
+Message-Id: <20091207000655.644896526@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:00 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ David Ford <david@blue-labs.org>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [084/119] ipv4: additional update of dev_net(dev) to struct *net in ip_fragment.c, NULL ptr OOPS
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=ipv4-additional-update-of-dev_net-dev-to-struct-net-in-ip_fragment.c-null-ptr-oops.patch
+Content-Length: 1196
+Lines: 36
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: David Ford <david@blue-labs.org>
+
+commit bbf31bf18d34caa87dd01f08bf713635593697f2 upstream.
+
+ipv4 ip_frag_reasm(), fully replace 'dev_net(dev)' with 'net', defined
+previously patched into 2.6.29.
+
+Between 2.6.28.10 and 2.6.29, net/ipv4/ip_fragment.c was patched,
+changing from dev_net(dev) to container_of(...).  Unfortunately the goto
+section (out_fail) on oversized packets inside ip_frag_reasm() didn't
+get touched up as well.  Oversized IP packets cause a NULL pointer
+dereference and immediate hang.
+
+I discovered this running openvasd and my previous email on this is
+titled:  NULL pointer dereference at 2.6.32-rc8:net/ipv4/ip_fragment.c:566
+
+Signed-off-by: David Ford <david@blue-labs.org>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/ipv4/ip_fragment.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/net/ipv4/ip_fragment.c
++++ b/net/ipv4/ip_fragment.c
+@@ -563,7 +563,7 @@ out_oversize:
+               printk(KERN_INFO "Oversized IP packet from %pI4.\n",
+                       &qp->saddr);
+ out_fail:
+-      IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_REASMFAILS);
++      IP_INC_STATS_BH(net, IPSTATS_MIB_REASMFAILS);
+       return err;
+ }
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:56 2009
+Message-Id: <20091207000655.925379789@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:01 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Rusty Russell <rusty@rustcorp.com.au>,
+ Dominik Brodowski <linux@brodo.de>,
+ Dave Jones <davej@redhat.com>
+Subject: [085/119] [CPUFREQ] speedstep-ich: fix error caused by 394122ab144dae4b276d74644a2f11c44a60ac5c
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=speedstep-ich-fix-error-caused-by-394122ab144dae4b276d74644a2f11c44a60ac5c.patch
+Content-Length: 1892
+Lines: 63
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Rusty Russell <rusty@rustcorp.com.au>
+
+commit 8dca15e40889e5d5e9655b03ba79c26200f760ce upstream.
+
+"[CPUFREQ] cpumask: avoid playing with cpus_allowed in speedstep-ich.c"
+changed the code to mistakenly pass the current cpu as the "processor"
+argument of speedstep_get_frequency(), whereas it should be the type of
+the processor.
+
+Addresses http://bugzilla.kernel.org/show_bug.cgi?id=14340
+
+Based on a patch by Dave Mueller.
+
+Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
+Acked-by: Dominik Brodowski <linux@brodo.de>
+Reported-by: Dave Mueller <dave.mueller@gmx.ch>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Dave Jones <davej@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/cpu/cpufreq/speedstep-ich.c |   19 +++++++------------
+ 1 file changed, 7 insertions(+), 12 deletions(-)
+
+--- a/arch/x86/kernel/cpu/cpufreq/speedstep-ich.c
++++ b/arch/x86/kernel/cpu/cpufreq/speedstep-ich.c
+@@ -232,28 +232,23 @@ static unsigned int speedstep_detect_chi
+       return 0;
+ }
+-struct get_freq_data {
+-      unsigned int speed;
+-      unsigned int processor;
+-};
+-
+-static void get_freq_data(void *_data)
++static void get_freq_data(void *_speed)
+ {
+-      struct get_freq_data *data = _data;
++      unsigned int *speed = _speed;
+-      data->speed = speedstep_get_frequency(data->processor);
++      *speed = speedstep_get_frequency(speedstep_processor);
+ }
+ static unsigned int speedstep_get(unsigned int cpu)
+ {
+-      struct get_freq_data data = { .processor = cpu };
++      unsigned int speed;
+       /* You're supposed to ensure CPU is online. */
+-      if (smp_call_function_single(cpu, get_freq_data, &data, 1) != 0)
++      if (smp_call_function_single(cpu, get_freq_data, &speed, 1) != 0)
+               BUG();
+-      dprintk("detected %u kHz as current frequency\n", data.speed);
+-      return data.speed;
++      dprintk("detected %u kHz as current frequency\n", speed);
++      return speed;
+ }
+ /**
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:56 2009
+Message-Id: <20091207000656.155029308@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:02 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Alan Stern <stern@rowland.harvard.edu>,
+ David Brownell <david-b@pacbell.net>
+Subject: [086/119] USB: EHCI: dont send Clear-TT-Buffer following a STALL
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=usb-ehci-don-t-send-clear-tt-buffer-following-a-stall.patch
+Content-Length: 2587
+Lines: 67
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit c2f6595fbdb408d3d6850cfae590c8fa93e27399 upstream.
+
+This patch (as1304) fixes a regression in ehci-hcd.  Evidently some
+hubs don't handle Clear-TT-Buffer requests correctly, so we should
+avoid sending them when they don't appear to be absolutely necessary.
+The reported symptom is that output on a downstream audio device cuts
+out because the hub stops relaying isochronous packets.
+
+The patch prevents Clear-TT-Buffer requests from being sent following
+a STALL handshake.  In theory a STALL indicates either that the
+downstream device sent a STALL or that no matching TT buffer could be
+found.  In either case, the transfer is completed and the TT buffer
+does not remain busy, so it doesn't need to be cleared.
+
+Also, the patch fixes a minor flaw in the code that actually sends the
+Clear-TT-Buffer requests.  Although the pipe direction isn't really
+used for control transfers, it should be a Send rather than a Receive.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Reported-by: Javier Kohen <jkohen@users.sourceforge.net>
+CC: David Brownell <david-b@pacbell.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/core/hub.c    |    2 +-
+ drivers/usb/host/ehci-q.c |   16 ++++++++++++++--
+ 2 files changed, 15 insertions(+), 3 deletions(-)
+
+--- a/drivers/usb/core/hub.c
++++ b/drivers/usb/core/hub.c
+@@ -439,7 +439,7 @@ resubmit:
+ static inline int
+ hub_clear_tt_buffer (struct usb_device *hdev, u16 devinfo, u16 tt)
+ {
+-      return usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
++      return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
+                              HUB_CLEAR_TT_BUFFER, USB_RT_PORT, devinfo,
+                              tt, NULL, 0, 1000);
+ }
+--- a/drivers/usb/host/ehci-q.c
++++ b/drivers/usb/host/ehci-q.c
+@@ -475,8 +475,20 @@ halt:
+                        * we must clear the TT buffer (11.17.5).
+                        */
+                       if (unlikely(last_status != -EINPROGRESS &&
+-                                      last_status != -EREMOTEIO))
+-                              ehci_clear_tt_buffer(ehci, qh, urb, token);
++                                      last_status != -EREMOTEIO)) {
++                              /* The TT's in some hubs malfunction when they
++                               * receive this request following a STALL (they
++                               * stop sending isochronous packets).  Since a
++                               * STALL can't leave the TT buffer in a busy
++                               * state (if you believe Figures 11-48 - 11-51
++                               * in the USB 2.0 spec), we won't clear the TT
++                               * buffer in this case.  Strictly speaking this
++                               * is a violation of the spec.
++                               */
++                              if (last_status != -EPIPE)
++                                      ehci_clear_tt_buffer(ehci, qh, urb,
++                                                      token);
++                      }
+               }
+               /* if we're removing something not at the queue head,
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:56 2009
+Message-Id: <20091207000656.289038717@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:03 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Sergei Shtylyov <sshtylyov@ru.mvista.com>
+Subject: [087/119] USB: musb_gadget: fix STALL handling
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=usb-musb_gadget-fix-stall-handling.patch
+Content-Length: 6608
+Lines: 219
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Sergei Shtylyov <sshtylyov@ru.mvista.com>
+
+commit cea83241b3a84499c4f9b12f8288f787e7aa6383 upstream.
+
+The driver incorrectly cancels the mass-storage device CSW request
+(which leads to device reset) due to giving back URB at the head of
+endpoint's queue after sending each STALL handshake; stop doing that
+and start checking for the queue being non-empty before stalling an
+endpoint and disallowing stall in such case in musb_gadget_set_halt()
+like the other gadget drivers do.
+
+Moreover, the driver starts Rx request despite of the endpoint being
+halted -- fix this by moving the SendStall bit check from musb_g_rx()
+to rxstate().  And we also sometimes get into rxstate() with DMA still
+active after clearing an endpoint's halt (not clear why), so bail out
+in this case, similarly to what txstate() does...
+
+While at it, also do the following changes :
+
+- in musb_gadget_set_halt(), remove pointless Tx FIFO flushing (the
+  driver does not allow stalling with non-empty Tx FIFO anyway);
+
+- in rxstate(), stop pointlessly zeroing the 'csr' variable;
+
+- in musb_gadget_set_halt(), move the 'done' label to a more proper
+  place;
+
+- in musb_g_rx(), eliminate the 'done' label completely...
+
+Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/musb/musb_gadget.c |   79 +++++++++++++++++------------------------
+ 1 file changed, 34 insertions(+), 45 deletions(-)
+
+--- a/drivers/usb/musb/musb_gadget.c
++++ b/drivers/usb/musb/musb_gadget.c
+@@ -4,6 +4,7 @@
+  * Copyright 2005 Mentor Graphics Corporation
+  * Copyright (C) 2005-2006 by Texas Instruments
+  * Copyright (C) 2006-2007 Nokia Corporation
++ * Copyright (C) 2009 MontaVista Software, Inc. <source@mvista.com>
+  *
+  * This program is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU General Public License
+@@ -436,14 +437,6 @@ void musb_g_tx(struct musb *musb, u8 epn
+                       csr |= MUSB_TXCSR_P_WZC_BITS;
+                       csr &= ~MUSB_TXCSR_P_SENTSTALL;
+                       musb_writew(epio, MUSB_TXCSR, csr);
+-                      if (dma_channel_status(dma) == MUSB_DMA_STATUS_BUSY) {
+-                              dma->status = MUSB_DMA_STATUS_CORE_ABORT;
+-                              musb->dma_controller->channel_abort(dma);
+-                      }
+-
+-                      if (request)
+-                              musb_g_giveback(musb_ep, request, -EPIPE);
+-
+                       break;
+               }
+@@ -582,15 +575,25 @@ void musb_g_tx(struct musb *musb, u8 epn
+  */
+ static void rxstate(struct musb *musb, struct musb_request *req)
+ {
+-      u16                     csr = 0;
+       const u8                epnum = req->epnum;
+       struct usb_request      *request = &req->request;
+       struct musb_ep          *musb_ep = &musb->endpoints[epnum].ep_out;
+       void __iomem            *epio = musb->endpoints[epnum].regs;
+       unsigned                fifo_count = 0;
+       u16                     len = musb_ep->packet_sz;
++      u16                     csr = musb_readw(epio, MUSB_RXCSR);
+-      csr = musb_readw(epio, MUSB_RXCSR);
++      /* We shouldn't get here while DMA is active, but we do... */
++      if (dma_channel_status(musb_ep->dma) == MUSB_DMA_STATUS_BUSY) {
++              DBG(4, "DMA pending...\n");
++              return;
++      }
++
++      if (csr & MUSB_RXCSR_P_SENDSTALL) {
++              DBG(5, "%s stalling, RXCSR %04x\n",
++                  musb_ep->end_point.name, csr);
++              return;
++      }
+       if (is_cppi_enabled() && musb_ep->dma) {
+               struct dma_controller   *c = musb->dma_controller;
+@@ -761,19 +764,10 @@ void musb_g_rx(struct musb *musb, u8 epn
+                       csr, dma ? " (dma)" : "", request);
+       if (csr & MUSB_RXCSR_P_SENTSTALL) {
+-              if (dma_channel_status(dma) == MUSB_DMA_STATUS_BUSY) {
+-                      dma->status = MUSB_DMA_STATUS_CORE_ABORT;
+-                      (void) musb->dma_controller->channel_abort(dma);
+-                      request->actual += musb_ep->dma->actual_len;
+-              }
+-
+               csr |= MUSB_RXCSR_P_WZC_BITS;
+               csr &= ~MUSB_RXCSR_P_SENTSTALL;
+               musb_writew(epio, MUSB_RXCSR, csr);
+-
+-              if (request)
+-                      musb_g_giveback(musb_ep, request, -EPIPE);
+-              goto done;
++              return;
+       }
+       if (csr & MUSB_RXCSR_P_OVERRUN) {
+@@ -795,7 +789,7 @@ void musb_g_rx(struct musb *musb, u8 epn
+               DBG((csr & MUSB_RXCSR_DMAENAB) ? 4 : 1,
+                       "%s busy, csr %04x\n",
+                       musb_ep->end_point.name, csr);
+-              goto done;
++              return;
+       }
+       if (dma && (csr & MUSB_RXCSR_DMAENAB)) {
+@@ -826,22 +820,15 @@ void musb_g_rx(struct musb *musb, u8 epn
+               if ((request->actual < request->length)
+                               && (musb_ep->dma->actual_len
+                                       == musb_ep->packet_sz))
+-                      goto done;
++                      return;
+ #endif
+               musb_g_giveback(musb_ep, request, 0);
+               request = next_request(musb_ep);
+               if (!request)
+-                      goto done;
+-
+-              /* don't start more i/o till the stall clears */
+-              musb_ep_select(mbase, epnum);
+-              csr = musb_readw(epio, MUSB_RXCSR);
+-              if (csr & MUSB_RXCSR_P_SENDSTALL)
+-                      goto done;
++                      return;
+       }
+-
+       /* analyze request if the ep is hot */
+       if (request)
+               rxstate(musb, to_musb_request(request));
+@@ -849,8 +836,6 @@ void musb_g_rx(struct musb *musb, u8 epn
+               DBG(3, "packet waiting for %s%s request\n",
+                               musb_ep->desc ? "" : "inactive ",
+                               musb_ep->end_point.name);
+-
+-done:
+       return;
+ }
+@@ -1244,7 +1229,7 @@ int musb_gadget_set_halt(struct usb_ep *
+       void __iomem            *mbase;
+       unsigned long           flags;
+       u16                     csr;
+-      struct musb_request     *request = NULL;
++      struct musb_request     *request;
+       int                     status = 0;
+       if (!ep)
+@@ -1260,24 +1245,29 @@ int musb_gadget_set_halt(struct usb_ep *
+       musb_ep_select(mbase, epnum);
+-      /* cannot portably stall with non-empty FIFO */
+       request = to_musb_request(next_request(musb_ep));
+-      if (value && musb_ep->is_in) {
+-              csr = musb_readw(epio, MUSB_TXCSR);
+-              if (csr & MUSB_TXCSR_FIFONOTEMPTY) {
+-                      DBG(3, "%s fifo busy, cannot halt\n", ep->name);
+-                      spin_unlock_irqrestore(&musb->lock, flags);
+-                      return -EAGAIN;
++      if (value) {
++              if (request) {
++                      DBG(3, "request in progress, cannot halt %s\n",
++                          ep->name);
++                      status = -EAGAIN;
++                      goto done;
++              }
++              /* Cannot portably stall with non-empty FIFO */
++              if (musb_ep->is_in) {
++                      csr = musb_readw(epio, MUSB_TXCSR);
++                      if (csr & MUSB_TXCSR_FIFONOTEMPTY) {
++                              DBG(3, "FIFO busy, cannot halt %s\n", ep->name);
++                              status = -EAGAIN;
++                              goto done;
++                      }
+               }
+-
+       }
+       /* set/clear the stall and toggle bits */
+       DBG(2, "%s: %s stall\n", ep->name, value ? "set" : "clear");
+       if (musb_ep->is_in) {
+               csr = musb_readw(epio, MUSB_TXCSR);
+-              if (csr & MUSB_TXCSR_FIFONOTEMPTY)
+-                      csr |= MUSB_TXCSR_FLUSHFIFO;
+               csr |= MUSB_TXCSR_P_WZC_BITS
+                       | MUSB_TXCSR_CLRDATATOG;
+               if (value)
+@@ -1300,14 +1290,13 @@ int musb_gadget_set_halt(struct usb_ep *
+               musb_writew(epio, MUSB_RXCSR, csr);
+       }
+-done:
+-
+       /* maybe start the first request in the queue */
+       if (!musb_ep->busy && !value && request) {
+               DBG(3, "restarting the request\n");
+               musb_ep_restart(musb, request);
+       }
++done:
+       spin_unlock_irqrestore(&musb->lock, flags);
+       return status;
+ }
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:56 2009
+Message-Id: <20091207000656.432492565@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:04 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Thomas Dahlmann <dahlmann.thomas@arcor.de>,
+ Robert Richter <robert.richter@amd.com>,
+ David Brownell <david-b@pacbell.net>
+Subject: [088/119] usb: amd5536udc: fixed shared interrupt bug and warning oops
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=usb-amd5536udc-fixed-shared-interrupt-bug-and-warning-oops.patch
+Content-Length: 3424
+Lines: 118
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Thomas Dahlmann <dahlmann.thomas@arcor.de>
+
+commit c5deb832d7a3f9618b09e6eeaa91a1a845c90c65 upstream.
+
+- fixed shared interrupt bug reported by Vadim Lobanov
+ - fixed possible warning oops on driver unload when connected
+ - prevent interrupt flood in PIO mode ("modprobe amd5536udc use_dma=0")
+   when using gadget ether
+
+Signed-off-by: Thomas Dahlmann <dahlmann.thomas@arcor.de>
+Cc: Robert Richter <robert.richter@amd.com>
+Cc: David Brownell <david-b@pacbell.net>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/gadget/amd5536udc.c |   49 ++++++++++++++++++++++++----------------
+ 1 file changed, 30 insertions(+), 19 deletions(-)
+
+--- a/drivers/usb/gadget/amd5536udc.c
++++ b/drivers/usb/gadget/amd5536udc.c
+@@ -1213,7 +1213,12 @@ udc_queue(struct usb_ep *usbep, struct u
+                               tmp &= AMD_UNMASK_BIT(ep->num);
+                               writel(tmp, &dev->regs->ep_irqmsk);
+                       }
+-              }
++              } else if (ep->in) {
++                              /* enable ep irq */
++                              tmp = readl(&dev->regs->ep_irqmsk);
++                              tmp &= AMD_UNMASK_BIT(ep->num);
++                              writel(tmp, &dev->regs->ep_irqmsk);
++                      }
+       } else if (ep->dma) {
+@@ -2005,18 +2010,17 @@ __acquires(dev->lock)
+ {
+       int tmp;
+-      /* empty queues and init hardware */
+-      udc_basic_init(dev);
+-      for (tmp = 0; tmp < UDC_EP_NUM; tmp++) {
+-              empty_req_queue(&dev->ep[tmp]);
+-      }
+-
+       if (dev->gadget.speed != USB_SPEED_UNKNOWN) {
+               spin_unlock(&dev->lock);
+               driver->disconnect(&dev->gadget);
+               spin_lock(&dev->lock);
+       }
+-      /* init */
++
++      /* empty queues and init hardware */
++      udc_basic_init(dev);
++      for (tmp = 0; tmp < UDC_EP_NUM; tmp++)
++              empty_req_queue(&dev->ep[tmp]);
++
+       udc_setup_endpoints(dev);
+ }
+@@ -2478,6 +2482,13 @@ static irqreturn_t udc_data_in_isr(struc
+                               }
+                       }
++              } else if (!use_dma && ep->in) {
++                      /* disable interrupt */
++                      tmp = readl(
++                              &dev->regs->ep_irqmsk);
++                      tmp |= AMD_BIT(ep->num);
++                      writel(tmp,
++                              &dev->regs->ep_irqmsk);
+               }
+       }
+       /* clear status bits */
+@@ -3285,6 +3296,17 @@ static int udc_pci_probe(
+               goto finished;
+       }
++      spin_lock_init(&dev->lock);
++      /* udc csr registers base */
++      dev->csr = dev->virt_addr + UDC_CSR_ADDR;
++      /* dev registers base */
++      dev->regs = dev->virt_addr + UDC_DEVCFG_ADDR;
++      /* ep registers base */
++      dev->ep_regs = dev->virt_addr + UDC_EPREGS_ADDR;
++      /* fifo's base */
++      dev->rxfifo = (u32 __iomem *)(dev->virt_addr + UDC_RXFIFO_ADDR);
++      dev->txfifo = (u32 __iomem *)(dev->virt_addr + UDC_TXFIFO_ADDR);
++
+       if (request_irq(pdev->irq, udc_irq, IRQF_SHARED, name, dev) != 0) {
+               dev_dbg(&dev->pdev->dev, "request_irq(%d) fail\n", pdev->irq);
+               kfree(dev);
+@@ -3337,7 +3359,6 @@ static int udc_probe(struct udc *dev)
+       udc_pollstall_timer.data = 0;
+       /* device struct setup */
+-      spin_lock_init(&dev->lock);
+       dev->gadget.ops = &udc_ops;
+       dev_set_name(&dev->gadget.dev, "gadget");
+@@ -3346,16 +3367,6 @@ static int udc_probe(struct udc *dev)
+       dev->gadget.name = name;
+       dev->gadget.is_dualspeed = 1;
+-      /* udc csr registers base */
+-      dev->csr = dev->virt_addr + UDC_CSR_ADDR;
+-      /* dev registers base */
+-      dev->regs = dev->virt_addr + UDC_DEVCFG_ADDR;
+-      /* ep registers base */
+-      dev->ep_regs = dev->virt_addr + UDC_EPREGS_ADDR;
+-      /* fifo's base */
+-      dev->rxfifo = (u32 __iomem *)(dev->virt_addr + UDC_RXFIFO_ADDR);
+-      dev->txfifo = (u32 __iomem *)(dev->virt_addr + UDC_TXFIFO_ADDR);
+-
+       /* init registers, interrupts, ... */
+       startup_registers(dev);
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:56 2009
+Message-Id: <20091207000656.597883985@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:05 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ "Eric W. Biederman" <ebiederm@aristanetworks.com>
+Subject: [089/119] USB: ftdi_sio: Keep going when write errors are encountered.
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=usb-ftdi_sio-keep-going-when-write-errors-are-encountered.patch
+Content-Length: 1305
+Lines: 41
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Eric W. Biederman <ebiederm@xmission.com>
+
+commit 0de6ab8b91f2e1e8e7fc66a8b5c5e8ca82ea16b7 upstream.
+
+The use of urb->actual_length to update tx_outstanding_bytes
+implicitly assumes that the number of bytes actually written is the
+same as the number of bytes we tried to write.  On error that
+assumption is violated so just use transfer_buffer_length the number
+of bytes we intended to write to the device.
+
+If an error occurs we need to fall through and call
+usb_serial_port_softint to wake up processes waiting in
+tty_wait_until_sent.
+
+Signed-off-by: Eric W. Biederman <ebiederm@aristanetworks.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/ftdi_sio.c |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/drivers/usb/serial/ftdi_sio.c
++++ b/drivers/usb/serial/ftdi_sio.c
+@@ -1939,7 +1939,7 @@ static void ftdi_write_bulk_callback(str
+               return;
+       }
+       /* account for transferred data */
+-      countback = urb->actual_length;
++      countback = urb->transfer_buffer_length;
+       data_offset = priv->write_offset;
+       if (data_offset > 0) {
+               /* Subtract the control bytes */
+@@ -1952,7 +1952,6 @@ static void ftdi_write_bulk_callback(str
+       if (status) {
+               dbg("nonzero write bulk status received: %d", status);
+-              return;
+       }
+       usb_serial_port_softint(port);
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:56 2009
+Message-Id: <20091207000656.725986786@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:06 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Oliver Neukum <oliver@neukum.org>
+Subject: [090/119] USB: work around for EHCI with quirky periodic schedules
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=usb-work-around-for-ehci-with-quirky-periodic-schedules.patch
+Content-Length: 3016
+Lines: 98
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Oliver Neukum <oliver@neukum.org>
+
+commit ee4ecb8ac63a5792bec448037d4b82ec4144f94b upstream.
+
+a quirky chipset needs periodic schedules to run for a minimum
+time before they can be disabled again. This enforces the requirement
+with a time stamp and a calculated delay
+
+Signed-off-by: Oliver Neukum <oliver@neukum.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/ehci-hcd.c   |    2 ++
+ drivers/usb/host/ehci-pci.c   |    6 ++++++
+ drivers/usb/host/ehci-sched.c |   12 ++++++++++++
+ drivers/usb/host/ehci.h       |    2 ++
+ 4 files changed, 22 insertions(+)
+
+--- a/drivers/usb/host/ehci.h
++++ b/drivers/usb/host/ehci.h
+@@ -118,6 +118,7 @@ struct ehci_hcd {                  /* one per controlle
+       unsigned                stamp;
+       unsigned                random_frame;
+       unsigned long           next_statechange;
++      ktime_t                 last_periodic_enable;
+       u32                     command;
+       /* SILICON QUIRKS */
+@@ -126,6 +127,7 @@ struct ehci_hcd {                  /* one per controlle
+       unsigned                big_endian_mmio:1;
+       unsigned                big_endian_desc:1;
+       unsigned                has_amcc_usb23:1;
++      unsigned                broken_periodic:1;
+       /* required for usb32 quirk */
+       #define OHCI_CTRL_HCFS          (3 << 6)
+--- a/drivers/usb/host/ehci-hcd.c
++++ b/drivers/usb/host/ehci-hcd.c
+@@ -28,6 +28,7 @@
+ #include <linux/errno.h>
+ #include <linux/init.h>
+ #include <linux/timer.h>
++#include <linux/ktime.h>
+ #include <linux/list.h>
+ #include <linux/interrupt.h>
+ #include <linux/reboot.h>
+@@ -655,6 +656,7 @@ static int ehci_run (struct usb_hcd *hcd
+       ehci_readl(ehci, &ehci->regs->command); /* unblock posted writes */
+       msleep(5);
+       up_write(&ehci_cf_port_reset_rwsem);
++      ehci->last_periodic_enable = ktime_get_real();
+       temp = HC_VERSION(ehci_readl(ehci, &ehci->caps->hc_capbase));
+       ehci_info (ehci,
+--- a/drivers/usb/host/ehci-pci.c
++++ b/drivers/usb/host/ehci-pci.c
+@@ -72,6 +72,12 @@ static int ehci_pci_setup(struct usb_hcd
+       int                     retval;
+       switch (pdev->vendor) {
++      case PCI_VENDOR_ID_INTEL:
++              if (pdev->device == 0x27cc) {
++                      ehci->broken_periodic = 1;
++                      ehci_info(ehci, "using broken periodic workaround\n");
++              }
++              break;
+       case PCI_VENDOR_ID_TOSHIBA_2:
+               /* celleb's companion chip */
+               if (pdev->device == 0x01b5) {
+--- a/drivers/usb/host/ehci-sched.c
++++ b/drivers/usb/host/ehci-sched.c
+@@ -456,6 +456,8 @@ static int enable_periodic (struct ehci_
+       /* make sure ehci_work scans these */
+       ehci->next_uframe = ehci_readl(ehci, &ehci->regs->frame_index)
+               % (ehci->periodic_size << 3);
++      if (unlikely(ehci->broken_periodic))
++              ehci->last_periodic_enable = ktime_get_real();
+       return 0;
+ }
+@@ -467,6 +469,16 @@ static int disable_periodic (struct ehci
+       if (--ehci->periodic_sched)
+               return 0;
++      if (unlikely(ehci->broken_periodic)) {
++              /* delay experimentally determined */
++              ktime_t safe = ktime_add_us(ehci->last_periodic_enable, 1000);
++              ktime_t now = ktime_get_real();
++              s64 delay = ktime_us_delta(safe, now);
++
++              if (unlikely(delay > 0))
++                      udelay(delay);
++      }
++
+       /* did setting PSE not take effect yet?
+        * takes effect only at frame boundaries...
+        */
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:57 2009
+Message-Id: <20091207000656.889070773@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:07 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Alan Cox <alan@linux.intel.com>
+Subject: [091/119] tty_port: handle the nonblocking open of a dead port corner case
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=tty_port-handle-the-nonblocking-open-of-a-dead-port-corner-case.patch
+Content-Length: 992
+Lines: 31
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Alan Cox <alan@linux.intel.com>
+
+commit 8627b96dd80dca440d91fbb1ec733be25912d0dd upstream.
+
+Some drivers allow O_NDELAY of a dead port (eg for setserial to work). In that
+situation we must not try to raise the carrier.
+
+Signed-off-by: Alan Cox <alan@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/char/tty_port.c |    7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+--- a/drivers/char/tty_port.c
++++ b/drivers/char/tty_port.c
+@@ -217,8 +217,11 @@ int tty_port_block_til_ready(struct tty_
+       /* if non-blocking mode is set we can pass directly to open unless
+          the port has just hung up or is in another error state */
+-      if ((filp->f_flags & O_NONBLOCK) ||
+-                      (tty->flags & (1 << TTY_IO_ERROR))) {
++      if (tty->flags & (1 << TTY_IO_ERROR)) {
++              port->flags |= ASYNC_NORMAL_ACTIVE;
++              return 0;
++      }
++      if (filp->f_flags & O_NONBLOCK) {
+               /* Indicate we are open */
+               if (tty->termios->c_cflag & CBAUD)
+                       tty_port_raise_dtr_rts(port);
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:57 2009
+Message-Id: <20091207000657.032254620@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:08 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Daniel Mack <daniel@caiaq.de>,
+ Pierre Ossman <pierre@ossman.eu>,
+ linux-mmc@vger.kernel.org,
+ linux-arm-kernel@lists.infradead.org,
+ Eric Miao <eric.y.miao@gmail.com>
+Subject: [092/119] [ARM] pxamci: call mmc_remove_host() before freeing resources
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=pxamci-call-mmc_remove_host-before-freeing-resources.patch
+Content-Length: 5102
+Lines: 89
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Daniel Mack <daniel@caiaq.de>
+
+commit 5d6b1edf8ccc4b7e4e77dff3fc80882833d6186e upstream.
+
+mmc_remove_host() will cause the mmc core to switch off the bus power by
+eventually calling pxamci_set_ios(). This function uses the regulator or
+the GPIO which have been freed already.
+
+This causes the following Oops on module unload.
+
+[   49.519649] Unable to handle kernel paging request at virtual address 30303a70
+[   49.526878] pgd = c7084000
+[   49.529563] [30303a70] *pgd=00000000
+[   49.533136] Internal error: Oops: 5 [#1]
+[   49.537025] last sysfs file: /sys/devices/platform/pxa27x-ohci/usb1/1-1/1-1:1.0/host0/target0:0:0/0:0:0:0/scsi_level
+[   49.547471] Modules linked in: pxamci(-) eeti_ts
+[   49.552061] CPU: 0    Not tainted  (2.6.32-rc8 #322)
+[   49.557001] PC is at regulator_is_enabled+0x3c/0xbc
+[   49.561846] LR is at regulator_is_enabled+0x30/0xbc
+[   49.566691] pc : [<c01a2448>]    lr : [<c01a243c>]    psr: 60000013
+[   49.566702] sp : c7083e70  ip : 30303a30  fp : 00000000
+[   49.578093] r10: c705e200  r9 : c7082000  r8 : c705e2e0
+[   49.583280] r7 : c7061340  r6 : c7061340  r5 : c7083e70  r4 : 00000000
+[   49.589759] r3 : c04dc434  r2 : c04dc434  r1 : c03eecea  r0 : 00000047
+[   49.596241] Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
+[   49.603329] Control: 0000397f  Table: a7084018  DAC: 00000015
+[   49.609031] Process rmmod (pid: 1101, stack limit = 0xc7082278)
+[   49.614908] Stack: (0xc7083e70 to 0xc7084000)
+[   49.619238] 3e60:                                     c7082000 c703c4f8 c705ea00 c04f4074
+[   49.627366] 3e80: 00000000 c705e3a0 ffffffff c0247ddc c70361a0 00000000 c705e3a0 ffffffff
+[   49.635499] 3ea0: c705e200 bf006400 c78c4f00 c705e200 c705e3a0 ffffffff c705e200 ffffffff
+[   49.643633] 3ec0: c04d8ac8 c02476d0 ffffffff c0247c60 c705e200 c0248678 c705e200 c0249064
+[   49.651765] 3ee0: ffffffff bf006204 c04d8ad0 c04d8ad0 c04d8ac8 bf007490 00000880 c00440c4
+[   49.659898] 3f00: 0000b748 c01c5708 bf007490 c01c44c8 c04d8ac8 c04d8afc bf007490 c01c4570
+[   49.668031] 3f20: bf007490 bf00750c c04f4258 c01c37a4 00000000 bf00750c c7083f44 c007b014
+[   49.676162] 3f40: 4000d000 6d617870 08006963 00000001 00000000 c7085000 00000001 00000000
+[   49.684287] 3f60: 4000d000 c7083f8c 00000001 bea01a54 00005401 c7ab1400 c00440c4 00082000
+[   49.692420] 3f80: bf00750c 00000880 c7083f8c 00000000 4000cfa8 00000000 00000880 bea01cc8
+[   49.700552] 3fa0: 00000081 c0043f40 00000000 00000880 bea01cc8 00000880 00000006 00000000
+[   49.708677] 3fc0: 00000000 00000880 bea01cc8 00000081 00000097 0000cca4 0000b748 00000000
+[   49.716802] 3fe0: 4001a4f0 bea01cc0 00018bf4 4001a4fc 20000010 bea01cc8 a063e021 a063e421
+[   49.724958] [<c01a2448>] (regulator_is_enabled+0x3c/0xbc) from [<c0247ddc>] (mmc_regulator_set_ocr+0x14/0xd8)
+[   49.734836] [<c0247ddc>] (mmc_regulator_set_ocr+0x14/0xd8) from [<bf006400>] (pxamci_set_ios+0xd8/0x17c [pxamci])
+[   49.745044] [<bf006400>] (pxamci_set_ios+0xd8/0x17c [pxamci]) from [<c02476d0>] (mmc_power_off+0x50/0x58)
+[   49.754555] [<c02476d0>] (mmc_power_off+0x50/0x58) from [<c0247c60>] (mmc_detach_bus+0x68/0xc4)
+[   49.763207] [<c0247c60>] (mmc_detach_bus+0x68/0xc4) from [<c0248678>] (mmc_stop_host+0xd4/0x1bc)
+[   49.771944] [<c0248678>] (mmc_stop_host+0xd4/0x1bc) from [<c0249064>] (mmc_remove_host+0xc/0x20)
+[   49.780681] [<c0249064>] (mmc_remove_host+0xc/0x20) from [<bf006204>] (pxamci_remove+0xc8/0x174 [pxamci])
+[   49.790211] [<bf006204>] (pxamci_remove+0xc8/0x174 [pxamci]) from [<c01c5708>] (platform_drv_remove+0x1c/0x24)
+[   49.800164] [<c01c5708>] (platform_drv_remove+0x1c/0x24) from [<c01c44c8>] (__device_release_driver+0x7c/0xc4)
+[   49.810110] [<c01c44c8>] (__device_release_driver+0x7c/0xc4) from [<c01c4570>] (driver_detach+0x60/0x8c)
+[   49.819535] [<c01c4570>] (driver_detach+0x60/0x8c) from [<c01c37a4>] (bus_remove_driver+0x90/0xcc)
+[   49.828452] [<c01c37a4>] (bus_remove_driver+0x90/0xcc) from [<c007b014>] (sys_delete_module+0x1d8/0x254)
+[   49.837891] [<c007b014>] (sys_delete_module+0x1d8/0x254) from [<c0043f40>] (ret_fast_syscall+0x0/0x28)
+[   49.847145] Code: eb06c53a e596c030 e1a0500d e59f106c (e59c0040)
+[   49.853566] ---[ end trace b5fa66a00cea142f ]---
+
+Signed-off-by: Daniel Mack <daniel@caiaq.de>
+Reported-by: Sven Neumann <s.neumann@raumfeld.com>
+Cc: Pierre Ossman <pierre@ossman.eu>
+Cc: linux-mmc@vger.kernel.org
+Cc: linux-arm-kernel@lists.infradead.org
+Signed-off-by: Eric Miao <eric.y.miao@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/mmc/host/pxamci.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/mmc/host/pxamci.c
++++ b/drivers/mmc/host/pxamci.c
+@@ -694,14 +694,14 @@ static int pxamci_remove(struct platform
+       if (mmc) {
+               struct pxamci_host *host = mmc_priv(mmc);
++              mmc_remove_host(mmc);
++
+               if (host->vcc)
+                       regulator_put(host->vcc);
+               if (host->pdata && host->pdata->exit)
+                       host->pdata->exit(&pdev->dev, mmc);
+-              mmc_remove_host(mmc);
+-
+               pxamci_stop_clock(host);
+               writel(TXFIFO_WR_REQ|RXFIFO_RD_REQ|CLK_IS_OFF|STOP_CMD|
+                      END_CMD_RES|PRG_DONE|DATA_TRAN_DONE,
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:57 2009
+Message-Id: <20091207000657.204461287@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:09 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Rusty Russell <rusty@rustcorp.com.au>
+Subject: [093/119] param: dont complain about unused module parameters.
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=param-don-t-complain-about-unused-module-parameters.patch
+Content-Length: 1378
+Lines: 47
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Rusty Russell <rusty@rustcorp.com.au>
+
+commit f066a4f6df68f03b565dfe867dde54dfeb26576e upstream.
+
+Jon confirms that recent modprobe will look in /proc/cmdline, so these
+cmdline options can still be used.
+
+See http://bugzilla.kernel.org/show_bug.cgi?id=14164
+
+Reported-by: Adam Williamson <awilliam@redhat.com>
+Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ init/main.c |   11 +++--------
+ 1 file changed, 3 insertions(+), 8 deletions(-)
+
+--- a/init/main.c
++++ b/init/main.c
+@@ -250,7 +250,7 @@ early_param("loglevel", loglevel);
+ /*
+  * Unknown boot options get handed to init, unless they look like
+- * failed parameters
++ * unused parameters (modprobe will find them in /proc/cmdline).
+  */
+ static int __init unknown_bootoption(char *param, char *val)
+ {
+@@ -271,14 +271,9 @@ static int __init unknown_bootoption(cha
+       if (obsolete_checksetup(param))
+               return 0;
+-      /*
+-       * Preemptive maintenance for "why didn't my misspelled command
+-       * line work?"
+-       */
+-      if (strchr(param, '.') && (!val || strchr(param, '.') < val)) {
+-              printk(KERN_ERR "Unknown boot option `%s': ignoring\n", param);
++      /* Unused module parameter. */
++      if (strchr(param, '.') && (!val || strchr(param, '.') < val))
+               return 0;
+-      }
+       if (panic_later)
+               return 0;
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:57 2009
+Message-Id: <20091207000657.341233965@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:10 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Helge Deller <deller@gmx.de>,
+ rusty@rustcorp.com.au,
+ James.Bottomley@HansenPartnership.com,
+ roland@redhat.com,
+ dave@hiauly1.hia.nrc.ca
+Subject: [094/119] modules: dont export section names of empty sections via sysfs
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=modules-don-t-export-section-names-of-empty-sections-via-sysfs.patch
+Content-Length: 2616
+Lines: 70
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Helge Deller <deller@gmx.de>
+
+commit 35dead4235e2b67da7275b4122fed37099c2f462 upstream.
+
+On the parisc architecture we face for each and every loaded kernel module
+this kernel "badness warning":
+  sysfs: cannot create duplicate filename '/module/ac97_bus/sections/.text'
+  Badness at fs/sysfs/dir.c:487
+
+Reason for that is, that on parisc all kernel modules do have multiple
+.text sections due to the usage of the -ffunction-sections compiler flag
+which is needed to reach all jump targets on this platform.
+
+An objdump on such a kernel module gives:
+Sections:
+Idx Name          Size      VMA       LMA       File off  Algn
+  0 .note.gnu.build-id 00000024  00000000  00000000  00000034  2**2
+                  CONTENTS, ALLOC, LOAD, READONLY, DATA
+  1 .text         00000000  00000000  00000000  00000058  2**0
+                  CONTENTS, ALLOC, LOAD, READONLY, CODE
+  2 .text.ac97_bus_match 0000001c  00000000  00000000  00000058  2**2
+                  CONTENTS, ALLOC, LOAD, READONLY, CODE
+  3 .text         00000000  00000000  00000000  000000d4  2**0
+                  CONTENTS, ALLOC, LOAD, READONLY, CODE
+...
+Since the .text sections are empty (size of 0 bytes) and won't be
+loaded by the kernel module loader anyway, I don't see a reason
+why such sections need to be listed under
+/sys/module/<module_name>/sections/<section_name> either.
+
+The attached patch does solve this issue by not exporting section
+names which are empty.
+
+This fixes bugzilla http://bugzilla.kernel.org/show_bug.cgi?id=14703
+
+Signed-off-by: Helge Deller <deller@gmx.de>
+CC: rusty@rustcorp.com.au
+CC: akpm@linux-foundation.org
+CC: James.Bottomley@HansenPartnership.com
+CC: roland@redhat.com
+CC: dave@hiauly1.hia.nrc.ca
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/module.c |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/kernel/module.c
++++ b/kernel/module.c
+@@ -1179,7 +1179,8 @@ static void add_sect_attrs(struct module
+       /* Count loaded sections and allocate structures */
+       for (i = 0; i < nsect; i++)
+-              if (sechdrs[i].sh_flags & SHF_ALLOC)
++              if (sechdrs[i].sh_flags & SHF_ALLOC
++                  && sechdrs[i].sh_size)
+                       nloaded++;
+       size[0] = ALIGN(sizeof(*sect_attrs)
+                       + nloaded * sizeof(sect_attrs->attrs[0]),
+@@ -1199,6 +1200,8 @@ static void add_sect_attrs(struct module
+       for (i = 0; i < nsect; i++) {
+               if (! (sechdrs[i].sh_flags & SHF_ALLOC))
+                       continue;
++              if (!sechdrs[i].sh_size)
++                      continue;
+               sattr->address = sechdrs[i].sh_addr;
+               sattr->name = kstrdup(secstrings + sechdrs[i].sh_name,
+                                       GFP_KERNEL);
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:57 2009
+Message-Id: <20091207000657.501477590@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:11 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ NeilBrown <neilb@suse.de>
+Subject: [095/119] md: revert incorrect fix for read error handling in raid1.
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=md-revert-incorrect-fix-for-read-error-handling-in-raid1.patch
+Content-Length: 1638
+Lines: 46
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: NeilBrown <neilb@suse.de>
+
+commit d0e260782c3702a009645c3caa02e381dab8798b upstream.
+
+commit 4706b349f was a forward port of a fix that was needed
+for SLES10.  But in fact it is not needed in mainline because
+the earlier commit dd00a99e7a fixes the same problem in a
+better way.
+Further, this commit introduces a bug in the way it interacts with
+the automatic read-error-correction.  If, after a read error is
+successfully corrected, the same disk is chosen to re-read - the
+re-read won't be attempted but an error will be returned instead.
+
+After reverting that commit, there is the possibility that a
+read error on a read-only array (where read errors cannot
+be corrected as that requires a write) will repeatedly read the same
+device and continue to get an error.
+So in the "Array is readonly" case, fail the drive immediately on
+a read error.
+
+Signed-off-by: NeilBrown <neilb@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/md/raid1.c |    7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+--- a/drivers/md/raid1.c
++++ b/drivers/md/raid1.c
+@@ -1643,11 +1643,12 @@ static void raid1d(mddev_t *mddev)
+                                              r1_bio->sector,
+                                              r1_bio->sectors);
+                               unfreeze_array(conf);
+-                      }
++                      } else
++                              md_error(mddev,
++                                       conf->mirrors[r1_bio->read_disk].rdev);
+                       bio = r1_bio->bios[r1_bio->read_disk];
+-                      if ((disk=read_balance(conf, r1_bio)) == -1 ||
+-                          disk == r1_bio->read_disk) {
++                      if ((disk=read_balance(conf, r1_bio)) == -1) {
+                               printk(KERN_ALERT "raid1: %s: unrecoverable I/O"
+                                      " read error for block %llu\n",
+                                      bdevname(bio->bi_bdev,b),
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:57 2009
+Message-Id: <20091207000657.658227549@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:12 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Paul Mackerras <paulus@samba.org>,
+ Corey Ashford <cjashfor@linux.vnet.ibm.com>,
+ Peter Zijlstra <a.p.zijlstra@chello.nl>,
+ Ingo Molnar <mingo@elte.hu>
+Subject: [096/119] perf_event: Adjust frequency and unthrottle for non-group-leader events
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=perf_event-adjust-frequency-and-unthrottle-for-non-group-leader-events.patch
+Content-Length: 1785
+Lines: 45
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Paul Mackerras <paulus@samba.org>
+
+commit 03541f8b69c058162e4cf9675ec9181e6a204d55 upstream.
+
+The loop in perf_ctx_adjust_freq checks the frequency of sampling
+event counters, and adjusts the event interval and unthrottles the
+event if required, and resets the interrupt count for the event.
+However, at present it only looks at group leaders.
+
+This means that a sampling event that is not a group leader will
+eventually get throttled, once its interrupt count reaches
+sysctl_perf_event_sample_rate/HZ --- and that is guaranteed to
+happen, if the event is active for long enough, since the interrupt
+count never gets reset.  Once it is throttled it never gets
+unthrottled, so it basically just stops working at that point.
+
+This fixes it by making perf_ctx_adjust_freq use ctx->event_list
+rather than ctx->group_list.  The existing spin_lock/spin_unlock
+around the loop makes it unnecessary to put rcu_read_lock/
+rcu_read_unlock around the list_for_each_entry_rcu().
+
+Reported-by: Mark W. Krentel <krentel@cs.rice.edu>
+Signed-off-by: Paul Mackerras <paulus@samba.org>
+Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
+Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
+LKML-Reference: <19157.26731.855609.165622@cargo.ozlabs.ibm.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/perf_counter.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/kernel/perf_counter.c
++++ b/kernel/perf_counter.c
+@@ -1363,7 +1363,7 @@ static void perf_ctx_adjust_freq(struct 
+       u64 interrupts, freq;
+       spin_lock(&ctx->lock);
+-      list_for_each_entry(counter, &ctx->counter_list, list_entry) {
++      list_for_each_entry_rcu(counter, &ctx->counter_list, event_entry) {
+               if (counter->state != PERF_COUNTER_STATE_ACTIVE)
+                       continue;
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:57 2009
+Message-Id: <20091207000657.814193868@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:13 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ =?ISO-8859-15?q?Antti=20Kaijanm=C3=A4ki?= <antti.kaijanmaki@nomovok.com>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [097/119] hso: fix soft-lockup
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=hso-fix-soft-lockup.patch
+Content-Length: 1273
+Lines: 39
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Antti Kaijanmäki <antti.kaijanmaki@nomovok.com>
+
+commit dcfcb256cc23c4436691b0fe677275306699d6a1 upstream.
+
+Fix soft-lockup in hso.c which is triggered on SMP machine when
+modem is removed while file descriptor(s) under /dev are still open:
+
+  old version called kref_put() too early which resulted in destroying
+  hso_serial and hso_device objects which were still used later on.
+
+Signed-off-by: Antti Kaijanmäki <antti.kaijanmaki@nomovok.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+
+---
+ drivers/net/usb/hso.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/drivers/net/usb/hso.c
++++ b/drivers/net/usb/hso.c
+@@ -1362,7 +1362,7 @@ static void hso_serial_close(struct tty_
+       /* reset the rts and dtr */
+       /* do the actual close */
+       serial->open_count--;
+-      kref_put(&serial->parent->ref, hso_serial_ref_free);
++
+       if (serial->open_count <= 0) {
+               serial->open_count = 0;
+               spin_lock_irq(&serial->serial_lock);
+@@ -1382,6 +1382,8 @@ static void hso_serial_close(struct tty_
+               usb_autopm_put_interface(serial->parent->interface);
+       mutex_unlock(&serial->parent->mutex);
++
++      kref_put(&serial->parent->ref, hso_serial_ref_free);
+ }
+ /* close the requested serial port */
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:58 2009
+Message-Id: <20091207000657.982743086@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:14 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ NeilBrown <neilb@suse.de>,
+ Tejun Heo <tj@kernel.org>,
+ Jens Axboe <jens.axboe@oracle.com>
+Subject: [098/119] block: use after free bug in __blkdev_get
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=block-use-after-free-bug-in-__blkdev_get.patch
+Content-Length: 1177
+Lines: 36
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Neil Brown <neilb@suse.de>
+
+commit 960cc0f4fef607baabc2232fbd7cce5368a9dcfd upstream.
+
+commit 0762b8bde9729f10f8e6249809660ff2ec3ad735
+(from 14 months ago) introduced a use-after-free bug which has just
+recently started manifesting in my md testing.
+I tried git bisect to find out what caused the bug to start
+manifesting, and it could have been the recent change to
+blk_unregister_queue (48c0d4d4c04) but the results were inconclusive.
+
+This patch certainly fixes my symptoms and looks correct as the two
+calls are now in the same order as elsewhere in that function.
+
+Signed-off-by: NeilBrown <neilb@suse.de>
+Acked-by: Tejun Heo <tj@kernel.org>
+Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/block_dev.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/fs/block_dev.c
++++ b/fs/block_dev.c
+@@ -1243,8 +1243,8 @@ static int __blkdev_get(struct block_dev
+                       bd_set_size(bdev, (loff_t)bdev->bd_part->nr_sects << 9);
+               }
+       } else {
+-              put_disk(disk);
+               module_put(disk->fops->owner);
++              put_disk(disk);
+               disk = NULL;
+               if (bdev->bd_contains == bdev) {
+                       if (bdev->bd_disk->fops->open) {
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:58 2009
+Message-Id: <20091207000658.114369182@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:15 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jean Delvare <khali@linux-fr.org>,
+ Hans de Goede <hdegoede@redhat.com>,
+ Jordan Crouse <jordan@cosmicpenguin.net>
+Subject: [099/119] hwmon: (adt7475) Fix temperature fault flags
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=hwmon-adt7475-fix-temperature-fault-flags.patch
+Content-Length: 981
+Lines: 33
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jean Delvare <khali@linux-fr.org>
+
+commit cf312e077662ec3a07529551ab6e885828ccfb1d upstream.
+
+The logic of temperature fault flags is wrong, it shows faults when
+there are none and vice versa. Fix it.
+
+I can't believe this has been broken since the driver was added, 8
+months ago, basically breaking temp1 and temp3, and nobody ever
+complained.
+
+Signed-off-by: Jean Delvare <khali@linux-fr.org>
+Acked-by: Hans de Goede <hdegoede@redhat.com>
+Cc: Jordan Crouse <jordan@cosmicpenguin.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/hwmon/adt7475.c |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/drivers/hwmon/adt7475.c
++++ b/drivers/hwmon/adt7475.c
+@@ -350,8 +350,7 @@ static ssize_t show_temp(struct device *
+       case FAULT:
+               /* Note - only for remote1 and remote2 */
+-              out = data->alarms & (sattr->index ? 0x8000 : 0x4000);
+-              out = out ? 0 : 1;
++              out = !!(data->alarms & (sattr->index ? 0x8000 : 0x4000));
+               break;
+       default:
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:58 2009
+Message-Id: <20091207000658.315298898@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:16 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jean Delvare <khali@linux-fr.org>,
+ Hans de Goede <hdegoede@redhat.com>,
+ Jordan Crouse <jordan@cosmicpenguin.net>
+Subject: [100/119] hwmon: (adt7475) Cache limits for 60 seconds
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=hwmon-adt7475-cache-limits-for-60-seconds.patch
+Content-Length: 946
+Lines: 29
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jean Delvare <khali@linux-fr.org>
+
+commit 56e35eeebed2dcb4e1a17ad119e039cf095854ac upstream.
+
+The comment says that limits are cached for 60 seconds but the code
+actually caches them for only 2 seconds. Align the code on the
+comment, as 60 seconds makes more sense.
+
+Signed-off-by: Jean Delvare <khali@linux-fr.org>
+Acked-by: Hans de Goede <hdegoede@redhat.com>
+Cc: Jordan Crouse <jordan@cosmicpenguin.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/hwmon/adt7475.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/hwmon/adt7475.c
++++ b/drivers/hwmon/adt7475.c
+@@ -1151,7 +1151,7 @@ static struct adt7475_data *adt7475_upda
+       }
+       /* Limits and settings, should never change update every 60 seconds */
+-      if (time_after(jiffies, data->limits_updated + HZ * 2) ||
++      if (time_after(jiffies, data->limits_updated + HZ * 60) ||
+           !data->valid) {
+               data->config5 = adt7475_read(REG_CONFIG5);
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:58 2009
+Message-Id: <20091207000658.451137393@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:17 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Zhenyu Wang <zhenyuw@linux.intel.com>,
+ Eric Anholt <eric@anholt.net>
+Subject: [101/119] agp/intel: new host bridge support
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=agp-intel-new-host-bridge-support.patch
+Content-Length: 2222
+Lines: 62
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Zhenyu Wang <zhenyuw@linux.intel.com>
+
+commit 9cf1e35cb025eaa52dde37df38e2750b6adb1620 upstream.
+
+Add new CPU host bridge id, needed for support Ironlake graphics
+device with it. No change for graphics device itself, so no need to
+update drm/i915.
+
+Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
+Signed-off-by: Eric Anholt <eric@anholt.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/char/agp/intel-agp.c |    8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+--- a/drivers/char/agp/intel-agp.c
++++ b/drivers/char/agp/intel-agp.c
+@@ -52,6 +52,7 @@
+ #define PCI_DEVICE_ID_INTEL_IGDNG_D_IG            0x0042
+ #define PCI_DEVICE_ID_INTEL_IGDNG_M_HB            0x0044
+ #define PCI_DEVICE_ID_INTEL_IGDNG_MA_HB           0x0062
++#define PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB    0x006a
+ #define PCI_DEVICE_ID_INTEL_IGDNG_M_IG            0x0046
+ /* cover 915 and 945 variants */
+@@ -86,7 +87,8 @@
+               agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_B43_HB || \
+               agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_D_HB || \
+               agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_M_HB || \
+-              agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_MA_HB)
++              agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_MA_HB || \
++              agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB)
+ extern int agp_memory_reserved;
+@@ -1239,6 +1241,7 @@ static void intel_i965_get_gtt_range(int
+       case PCI_DEVICE_ID_INTEL_IGDNG_D_HB:
+       case PCI_DEVICE_ID_INTEL_IGDNG_M_HB:
+       case PCI_DEVICE_ID_INTEL_IGDNG_MA_HB:
++      case PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB:
+               *gtt_offset = *gtt_size = MB(2);
+               break;
+       default:
+@@ -2222,6 +2225,8 @@ static const struct intel_driver_descrip
+           "IGDNG/M", NULL, &intel_i965_driver },
+       { PCI_DEVICE_ID_INTEL_IGDNG_MA_HB, PCI_DEVICE_ID_INTEL_IGDNG_M_IG, 0,
+           "IGDNG/MA", NULL, &intel_i965_driver },
++      { PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB, PCI_DEVICE_ID_INTEL_IGDNG_M_IG, 0,
++          "IGDNG/MC2", NULL, &intel_i965_driver },
+       { 0, 0, 0, NULL, NULL, NULL }
+ };
+@@ -2418,6 +2423,7 @@ static struct pci_device_id agp_intel_pc
+       ID(PCI_DEVICE_ID_INTEL_IGDNG_D_HB),
+       ID(PCI_DEVICE_ID_INTEL_IGDNG_M_HB),
+       ID(PCI_DEVICE_ID_INTEL_IGDNG_MA_HB),
++      ID(PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB),
+       { }
+ };
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:58 2009
+Message-Id: <20091207000658.623685450@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:18 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>,
+ Patrick McHardy <kaber@trash.net>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [102/119] netfilter: nf_nat: fix NAT issue in 2.6.30.4+
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=netfilter-nf_nat-fix-nat-issue-in-2.6.30.4.patch
+Content-Length: 9810
+Lines: 273
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
+
+commit f9dd09c7f7199685601d75882447a6598be8a3e0 upstream.
+
+Vitezslav Samel discovered that since 2.6.30.4+ active FTP can not work
+over NAT. The "cause" of the problem was a fix of unacknowledged data
+detection with NAT (commit a3a9f79e361e864f0e9d75ebe2a0cb43d17c4272).
+However, actually, that fix uncovered a long standing bug in TCP conntrack:
+when NAT was enabled, we simply updated the max of the right edge of
+the segments we have seen (td_end), by the offset NAT produced with
+changing IP/port in the data. However, we did not update the other parameter
+(td_maxend) which is affected by the NAT offset. Thus that could drift
+away from the correct value and thus resulted breaking active FTP.
+
+The patch below fixes the issue by *not* updating the conntrack parameters
+from NAT, but instead taking into account the NAT offsets in conntrack in a
+consistent way. (Updating from NAT would be more harder and expensive because
+it'd need to re-calculate parameters we already calculated in conntrack.)
+
+Signed-off-by: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
+Signed-off-by: Patrick McHardy <kaber@trash.net>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/net/netfilter/nf_conntrack.h   |    8 +---
+ include/net/netfilter/nf_nat_helper.h  |    4 ++
+ net/ipv4/netfilter/nf_nat_core.c       |    3 +
+ net/ipv4/netfilter/nf_nat_helper.c     |   34 +++++++++++------
+ net/netfilter/nf_conntrack_core.c      |    8 ++++
+ net/netfilter/nf_conntrack_proto_tcp.c |   64 +++++++++++++--------------------
+ 6 files changed, 67 insertions(+), 54 deletions(-)
+
+--- a/include/net/netfilter/nf_conntrack.h
++++ b/include/net/netfilter/nf_conntrack.h
+@@ -255,11 +255,9 @@ static inline bool nf_ct_kill(struct nf_
+ }
+ /* These are for NAT.  Icky. */
+-/* Update TCP window tracking data when NAT mangles the packet */
+-extern void nf_conntrack_tcp_update(const struct sk_buff *skb,
+-                                  unsigned int dataoff,
+-                                  struct nf_conn *ct, int dir,
+-                                  s16 offset);
++extern s16 (*nf_ct_nat_offset)(const struct nf_conn *ct,
++                             enum ip_conntrack_dir dir,
++                             u32 seq);
+ /* Fake conntrack entry for untracked connections */
+ extern struct nf_conn nf_conntrack_untracked;
+--- a/include/net/netfilter/nf_nat_helper.h
++++ b/include/net/netfilter/nf_nat_helper.h
+@@ -32,4 +32,8 @@ extern int (*nf_nat_seq_adjust_hook)(str
+  * to port ct->master->saved_proto. */
+ extern void nf_nat_follow_master(struct nf_conn *ct,
+                                struct nf_conntrack_expect *this);
++
++extern s16 nf_nat_get_offset(const struct nf_conn *ct,
++                           enum ip_conntrack_dir dir,
++                           u32 seq);
+ #endif
+--- a/net/ipv4/netfilter/nf_nat_core.c
++++ b/net/ipv4/netfilter/nf_nat_core.c
+@@ -750,6 +750,8 @@ static int __init nf_nat_init(void)
+       BUG_ON(nfnetlink_parse_nat_setup_hook != NULL);
+       rcu_assign_pointer(nfnetlink_parse_nat_setup_hook,
+                          nfnetlink_parse_nat_setup);
++      BUG_ON(nf_ct_nat_offset != NULL);
++      rcu_assign_pointer(nf_ct_nat_offset, nf_nat_get_offset);
+       return 0;
+  cleanup_extend:
+@@ -764,6 +766,7 @@ static void __exit nf_nat_cleanup(void)
+       nf_ct_extend_unregister(&nat_extend);
+       rcu_assign_pointer(nf_nat_seq_adjust_hook, NULL);
+       rcu_assign_pointer(nfnetlink_parse_nat_setup_hook, NULL);
++      rcu_assign_pointer(nf_ct_nat_offset, NULL);
+       synchronize_net();
+ }
+--- a/net/ipv4/netfilter/nf_nat_helper.c
++++ b/net/ipv4/netfilter/nf_nat_helper.c
+@@ -73,6 +73,28 @@ adjust_tcp_sequence(u32 seq,
+       DUMP_OFFSET(this_way);
+ }
++/* Get the offset value, for conntrack */
++s16 nf_nat_get_offset(const struct nf_conn *ct,
++                    enum ip_conntrack_dir dir,
++                    u32 seq)
++{
++      struct nf_conn_nat *nat = nfct_nat(ct);
++      struct nf_nat_seq *this_way;
++      s16 offset;
++
++      if (!nat)
++              return 0;
++
++      this_way = &nat->seq[dir];
++      spin_lock_bh(&nf_nat_seqofs_lock);
++      offset = after(seq, this_way->correction_pos)
++               ? this_way->offset_after : this_way->offset_before;
++      spin_unlock_bh(&nf_nat_seqofs_lock);
++
++      return offset;
++}
++EXPORT_SYMBOL_GPL(nf_nat_get_offset);
++
+ /* Frobs data inside this packet, which is linear. */
+ static void mangle_contents(struct sk_buff *skb,
+                           unsigned int dataoff,
+@@ -189,11 +211,6 @@ nf_nat_mangle_tcp_packet(struct sk_buff 
+               adjust_tcp_sequence(ntohl(tcph->seq),
+                                   (int)rep_len - (int)match_len,
+                                   ct, ctinfo);
+-              /* Tell TCP window tracking about seq change */
+-              nf_conntrack_tcp_update(skb, ip_hdrlen(skb),
+-                                      ct, CTINFO2DIR(ctinfo),
+-                                      (int)rep_len - (int)match_len);
+-
+               nf_conntrack_event_cache(IPCT_NATSEQADJ, ct);
+       }
+       return 1;
+@@ -415,12 +432,7 @@ nf_nat_seq_adjust(struct sk_buff *skb,
+       tcph->seq = newseq;
+       tcph->ack_seq = newack;
+-      if (!nf_nat_sack_adjust(skb, tcph, ct, ctinfo))
+-              return 0;
+-
+-      nf_conntrack_tcp_update(skb, ip_hdrlen(skb), ct, dir, seqoff);
+-
+-      return 1;
++      return nf_nat_sack_adjust(skb, tcph, ct, ctinfo);
+ }
+ /* Setup NAT on this expected conntrack so it follows master. */
+--- a/net/netfilter/nf_conntrack_core.c
++++ b/net/netfilter/nf_conntrack_core.c
+@@ -1350,6 +1350,11 @@ err_stat:
+       return ret;
+ }
++s16 (*nf_ct_nat_offset)(const struct nf_conn *ct,
++                      enum ip_conntrack_dir dir,
++                      u32 seq);
++EXPORT_SYMBOL_GPL(nf_ct_nat_offset);
++
+ int nf_conntrack_init(struct net *net)
+ {
+       int ret;
+@@ -1367,6 +1372,9 @@ int nf_conntrack_init(struct net *net)
+               /* For use by REJECT target */
+               rcu_assign_pointer(ip_ct_attach, nf_conntrack_attach);
+               rcu_assign_pointer(nf_ct_destroy, destroy_conntrack);
++
++              /* Howto get NAT offsets */
++              rcu_assign_pointer(nf_ct_nat_offset, NULL);
+       }
+       return 0;
+--- a/net/netfilter/nf_conntrack_proto_tcp.c
++++ b/net/netfilter/nf_conntrack_proto_tcp.c
+@@ -492,6 +492,21 @@ static void tcp_sack(const struct sk_buf
+       }
+ }
++#ifdef CONFIG_NF_NAT_NEEDED
++static inline s16 nat_offset(const struct nf_conn *ct,
++                           enum ip_conntrack_dir dir,
++                           u32 seq)
++{
++      typeof(nf_ct_nat_offset) get_offset = rcu_dereference(nf_ct_nat_offset);
++
++      return get_offset != NULL ? get_offset(ct, dir, seq) : 0;
++}
++#define NAT_OFFSET(pf, ct, dir, seq) \
++      (pf == NFPROTO_IPV4 ? nat_offset(ct, dir, seq) : 0)
++#else
++#define NAT_OFFSET(pf, ct, dir, seq)  0
++#endif
++
+ static bool tcp_in_window(const struct nf_conn *ct,
+                         struct ip_ct_tcp *state,
+                         enum ip_conntrack_dir dir,
+@@ -506,6 +521,7 @@ static bool tcp_in_window(const struct n
+       struct ip_ct_tcp_state *receiver = &state->seen[!dir];
+       const struct nf_conntrack_tuple *tuple = &ct->tuplehash[dir].tuple;
+       __u32 seq, ack, sack, end, win, swin;
++      s16 receiver_offset;
+       bool res;
+       /*
+@@ -519,11 +535,16 @@ static bool tcp_in_window(const struct n
+       if (receiver->flags & IP_CT_TCP_FLAG_SACK_PERM)
+               tcp_sack(skb, dataoff, tcph, &sack);
++      /* Take into account NAT sequence number mangling */
++      receiver_offset = NAT_OFFSET(pf, ct, !dir, ack - 1);
++      ack -= receiver_offset;
++      sack -= receiver_offset;
++
+       pr_debug("tcp_in_window: START\n");
+       pr_debug("tcp_in_window: ");
+       nf_ct_dump_tuple(tuple);
+-      pr_debug("seq=%u ack=%u sack=%u win=%u end=%u\n",
+-               seq, ack, sack, win, end);
++      pr_debug("seq=%u ack=%u+(%d) sack=%u+(%d) win=%u end=%u\n",
++               seq, ack, receiver_offset, sack, receiver_offset, win, end);
+       pr_debug("tcp_in_window: sender end=%u maxend=%u maxwin=%u scale=%i "
+                "receiver end=%u maxend=%u maxwin=%u scale=%i\n",
+                sender->td_end, sender->td_maxend, sender->td_maxwin,
+@@ -613,8 +634,8 @@ static bool tcp_in_window(const struct n
+       pr_debug("tcp_in_window: ");
+       nf_ct_dump_tuple(tuple);
+-      pr_debug("seq=%u ack=%u sack =%u win=%u end=%u\n",
+-               seq, ack, sack, win, end);
++      pr_debug("seq=%u ack=%u+(%d) sack=%u+(%d) win=%u end=%u\n",
++               seq, ack, receiver_offset, sack, receiver_offset, win, end);
+       pr_debug("tcp_in_window: sender end=%u maxend=%u maxwin=%u scale=%i "
+                "receiver end=%u maxend=%u maxwin=%u scale=%i\n",
+                sender->td_end, sender->td_maxend, sender->td_maxwin,
+@@ -700,7 +721,7 @@ static bool tcp_in_window(const struct n
+                       before(seq, sender->td_maxend + 1) ?
+                       after(end, sender->td_end - receiver->td_maxwin - 1) ?
+                       before(sack, receiver->td_end + 1) ?
+-                      after(ack, receiver->td_end - MAXACKWINDOW(sender)) ? "BUG"
++                      after(sack, receiver->td_end - MAXACKWINDOW(sender) - 1) ? "BUG"
+                       : "ACK is under the lower bound (possible overly delayed ACK)"
+                       : "ACK is over the upper bound (ACKed data not seen yet)"
+                       : "SEQ is under the lower bound (already ACKed data retransmitted)"
+@@ -715,39 +736,6 @@ static bool tcp_in_window(const struct n
+       return res;
+ }
+-#ifdef CONFIG_NF_NAT_NEEDED
+-/* Update sender->td_end after NAT successfully mangled the packet */
+-/* Caller must linearize skb at tcp header. */
+-void nf_conntrack_tcp_update(const struct sk_buff *skb,
+-                           unsigned int dataoff,
+-                           struct nf_conn *ct, int dir,
+-                           s16 offset)
+-{
+-      const struct tcphdr *tcph = (const void *)skb->data + dataoff;
+-      const struct ip_ct_tcp_state *sender = &ct->proto.tcp.seen[dir];
+-      const struct ip_ct_tcp_state *receiver = &ct->proto.tcp.seen[!dir];
+-      __u32 end;
+-
+-      end = segment_seq_plus_len(ntohl(tcph->seq), skb->len, dataoff, tcph);
+-
+-      spin_lock_bh(&ct->lock);
+-      /*
+-       * We have to worry for the ack in the reply packet only...
+-       */
+-      if (ct->proto.tcp.seen[dir].td_end + offset == end)
+-              ct->proto.tcp.seen[dir].td_end = end;
+-      ct->proto.tcp.last_end = end;
+-      spin_unlock_bh(&ct->lock);
+-      pr_debug("tcp_update: sender end=%u maxend=%u maxwin=%u scale=%i "
+-               "receiver end=%u maxend=%u maxwin=%u scale=%i\n",
+-               sender->td_end, sender->td_maxend, sender->td_maxwin,
+-               sender->td_scale,
+-               receiver->td_end, receiver->td_maxend, receiver->td_maxwin,
+-               receiver->td_scale);
+-}
+-EXPORT_SYMBOL_GPL(nf_conntrack_tcp_update);
+-#endif
+-
+ #define       TH_FIN  0x01
+ #define       TH_SYN  0x02
+ #define       TH_RST  0x04
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:58 2009
+Message-Id: <20091207000658.781274324@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:19 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jan Engelhardt <jengelh@medozas.de>,
+ Patrick McHardy <kaber@trash.net>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [103/119] netfilter: xt_connlimit: fix regression caused by zero family value
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=netfilter-xt_connlimit-fix-regression-caused-by-zero-family-value.patch
+Content-Length: 1946
+Lines: 58
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jan Engelhardt <jengelh@medozas.de>
+
+commit 539054a8fa5141c9a4e9ac6a86d249e3f2bdef45 upstream.
+
+Commit v2.6.28-rc1~717^2~109^2~2 was slightly incomplete; not all
+instances of par->match->family were changed to par->family.
+
+References: http://bugzilla.netfilter.org/show_bug.cgi?id=610
+Signed-off-by: Jan Engelhardt <jengelh@medozas.de>
+Signed-off-by: Patrick McHardy <kaber@trash.net>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/netfilter/xt_connlimit.c |   10 ++++------
+ 1 file changed, 4 insertions(+), 6 deletions(-)
+
+--- a/net/netfilter/xt_connlimit.c
++++ b/net/netfilter/xt_connlimit.c
+@@ -103,7 +103,7 @@ static int count_them(struct xt_connlimi
+                     const struct nf_conntrack_tuple *tuple,
+                     const union nf_inet_addr *addr,
+                     const union nf_inet_addr *mask,
+-                    const struct xt_match *match)
++                    u_int8_t family)
+ {
+       const struct nf_conntrack_tuple_hash *found;
+       struct xt_connlimit_conn *conn;
+@@ -113,8 +113,7 @@ static int count_them(struct xt_connlimi
+       bool addit = true;
+       int matches = 0;
+-
+-      if (match->family == NFPROTO_IPV6)
++      if (family == NFPROTO_IPV6)
+               hash = &data->iphash[connlimit_iphash6(addr, mask)];
+       else
+               hash = &data->iphash[connlimit_iphash(addr->ip & mask->ip)];
+@@ -157,8 +156,7 @@ static int count_them(struct xt_connlimi
+                       continue;
+               }
+-              if (same_source_net(addr, mask, &conn->tuple.src.u3,
+-                  match->family))
++              if (same_source_net(addr, mask, &conn->tuple.src.u3, family))
+                       /* same source network -> be counted! */
+                       ++matches;
+               nf_ct_put(found_ct);
+@@ -207,7 +205,7 @@ connlimit_mt(const struct sk_buff *skb, 
+       spin_lock_bh(&info->data->lock);
+       connections = count_them(info->data, tuple_ptr, &addr,
+-                               &info->mask, par->match);
++                               &info->mask, par->family);
+       spin_unlock_bh(&info->data->lock);
+       if (connections < 0) {
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:59 2009
+Message-Id: <20091207000658.952588555@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:20 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Michael Buesch <mb@bu3sch.de>,
+ "John W. Linville" <linville@tuxdriver.com>
+Subject: [104/119] b43: Fix DMA TX bounce buffer copying
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=b43-fix-dma-tx-bounce-buffer-copying.patch
+Content-Length: 2532
+Lines: 68
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Michael Buesch <mb@bu3sch.de>
+
+commit 9a3f45116f5e08819136cd512fd7f6450ac22aa8 upstream.
+
+b43 allocates a bouncebuffer, if the supplied TX skb is in an invalid
+memory range for DMA.
+However, this is broken in that it fails to copy over some metadata to the
+new skb.
+
+This patch fixes three problems:
+* Failure to adjust the ieee80211_tx_info pointer to the new buffer.
+  This results in a kmemcheck warning.
+* Failure to copy the skb cb, which contains ieee80211_tx_info, to the new skb.
+  This results in breakage of various TX-status postprocessing (Rate control).
+* Failure to transfer the queue mapping.
+  This results in the wrong queue being stopped on saturation and can result in queue overflow.
+
+Signed-off-by: Michael Buesch <mb@bu3sch.de>
+Tested-by: Christian Casteyde <casteyde.christian@free.fr>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/b43/dma.c |   15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/wireless/b43/dma.c
++++ b/drivers/net/wireless/b43/dma.c
+@@ -1158,8 +1158,9 @@ struct b43_dmaring *parse_cookie(struct 
+ }
+ static int dma_tx_fragment(struct b43_dmaring *ring,
+-                         struct sk_buff *skb)
++                         struct sk_buff **in_skb)
+ {
++      struct sk_buff *skb = *in_skb;
+       const struct b43_dma_ops *ops = ring->ops;
+       struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
+       u8 *header;
+@@ -1225,8 +1226,14 @@ static int dma_tx_fragment(struct b43_dm
+               }
+               memcpy(skb_put(bounce_skb, skb->len), skb->data, skb->len);
++              memcpy(bounce_skb->cb, skb->cb, sizeof(skb->cb));
++              bounce_skb->dev = skb->dev;
++              skb_set_queue_mapping(bounce_skb, skb_get_queue_mapping(skb));
++              info = IEEE80211_SKB_CB(bounce_skb);
++
+               dev_kfree_skb_any(skb);
+               skb = bounce_skb;
++              *in_skb = bounce_skb;
+               meta->skb = skb;
+               meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1);
+               if (b43_dma_mapping_error(ring, meta->dmaaddr, skb->len, 1)) {
+@@ -1359,7 +1366,11 @@ int b43_dma_tx(struct b43_wldev *dev, st
+        * static, so we don't need to store it per frame. */
+       ring->queue_prio = skb_get_queue_mapping(skb);
+-      err = dma_tx_fragment(ring, skb);
++      /* dma_tx_fragment might reallocate the skb, so invalidate pointers pointing
++       * into the skb data or cb now. */
++      hdr = NULL;
++      info = NULL;
++      err = dma_tx_fragment(ring, &skb);
+       if (unlikely(err == -ENOKEY)) {
+               /* Drop this packet, as we don't have the encryption key
+                * anymore and must not transmit it unencrypted. */
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:59 2009
+Message-Id: <20091207000659.115840319@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:21 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Chuck Ebbert <cebbert@redhat.com>,
+ Herbert Xu <herbert@gondor.apana.org.au>
+Subject: [105/119] crypto: padlock-aes - Use the correct mask when checking whether copying is required
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=crypto-padlock-aes-use-the-correct-mask-when-checking-whether-copying-is-required.patch
+Content-Length: 1352
+Lines: 35
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Chuck Ebbert <cebbert@redhat.com>
+
+commit e8edb3cbd7dd8acf6c748a02d06ec1d82c4124ea upstream.
+
+Masking with PAGE_SIZE is just wrong...
+
+Signed-off-by: Chuck Ebbert <cebbert@redhat.com>
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/crypto/padlock-aes.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/crypto/padlock-aes.c
++++ b/drivers/crypto/padlock-aes.c
+@@ -236,7 +236,7 @@ static inline void ecb_crypt(const u8 *i
+       /* Padlock in ECB mode fetches at least ecb_fetch_bytes of data.
+        * We could avoid some copying here but it's probably not worth it.
+        */
+-      if (unlikely(((unsigned long)in & PAGE_SIZE) + ecb_fetch_bytes > PAGE_SIZE)) {
++      if (unlikely(((unsigned long)in & ~PAGE_MASK) + ecb_fetch_bytes > PAGE_SIZE)) {
+               ecb_crypt_copy(in, out, key, cword, count);
+               return;
+       }
+@@ -248,7 +248,7 @@ static inline u8 *cbc_crypt(const u8 *in
+                           u8 *iv, struct cword *cword, int count)
+ {
+       /* Padlock in CBC mode fetches at least cbc_fetch_bytes of data. */
+-      if (unlikely(((unsigned long)in & PAGE_SIZE) + cbc_fetch_bytes > PAGE_SIZE))
++      if (unlikely(((unsigned long)in & ~PAGE_MASK) + cbc_fetch_bytes > PAGE_SIZE))
+               return cbc_crypt_copy(in, out, key, iv, cword, count);
+       return rep_xcrypt_cbc(in, out, key, iv, cword, count);
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:59 2009
+Message-Id: <20091207000659.288315232@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:22 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Brandon Philips <bphilips@suse.de>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [106/119] sky2: set carrier off in probe
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=sky2-set-carrier-off-in-probe.patch
+Content-Length: 734
+Lines: 28
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Brandon Philips <bphilips@suse.de>
+
+commit 33cb7d33a1c36e07839d08a4d1a33bf6a0f70bba upstream.
+
+Before bringing up a sky2 interface up ethtool reports
+"Link detected: yes". Do as ixgbe does and netif_carrier_off() on
+probe().
+
+Signed-off-by: Brandon Philips <bphilips@suse.de>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/sky2.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/net/sky2.c
++++ b/drivers/net/sky2.c
+@@ -4528,6 +4528,8 @@ static int __devinit sky2_probe(struct p
+               goto err_out_free_netdev;
+       }
++      netif_carrier_off(dev);
++
+       netif_napi_add(dev, &hw->napi, sky2_poll, NAPI_WEIGHT);
+       err = request_irq(pdev->irq, sky2_intr,
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:59 2009
+Message-Id: <20091207000659.497334186@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:23 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Nick Kossifidis <mickflemm@gmail.com>,
+ Bob Copeland <me@bobcopeland.com>,
+ "John W. Linville" <linville@tuxdriver.com>,
+ Dan Williams <dcbw@redhat.com>
+Subject: [107/119] ath5k: Linear PCDAC code fixes
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=ath5k-linear-pcdac-code-fixes.patch
+Content-Length: 2143
+Lines: 65
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Nick Kossifidis <mick@madwifi-project.org>
+
+commit d1cb0bdac180a4afdd3c001acb2618d2a62d9abe upstream.
+
+* Set correct xpd curve indices for high/low gain curves during
+   rfbuffer setup on RF5112B with both calibration curves available.
+
+ * Don't return zero min power when we have the same pcdac value
+   twice because it breaks interpolation. Instead return the right
+   x barrier as we do when we have equal power levels for 2 different
+   pcdac values.
+
+Signed-off-by: Nick Kossifidis <mickflemm@gmail.com>
+Acked-by: Bob Copeland <me@bobcopeland.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Cc: Dan Williams <dcbw@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/ath/ath5k/phy.c |   24 +++++++++++++++++-------
+ 1 file changed, 17 insertions(+), 7 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath5k/phy.c
++++ b/drivers/net/wireless/ath/ath5k/phy.c
+@@ -740,13 +740,22 @@ int ath5k_hw_rfregs_init(struct ath5k_hw
+                                               AR5K_RF_XPD_GAIN, true);
+               } else {
+-                      /* TODO: Set high and low gain bits */
+-                      ath5k_hw_rfb_op(ah, rf_regs,
+-                                              ee->ee_x_gain[ee_mode],
++                      u8 *pdg_curve_to_idx = ee->ee_pdc_to_idx[ee_mode];
++                      if (ee->ee_pd_gains[ee_mode] > 1) {
++                              ath5k_hw_rfb_op(ah, rf_regs,
++                                              pdg_curve_to_idx[0],
+                                               AR5K_RF_PD_GAIN_LO, true);
+-                      ath5k_hw_rfb_op(ah, rf_regs,
+-                                              ee->ee_x_gain[ee_mode],
++                              ath5k_hw_rfb_op(ah, rf_regs,
++                                              pdg_curve_to_idx[1],
+                                               AR5K_RF_PD_GAIN_HI, true);
++                      } else {
++                              ath5k_hw_rfb_op(ah, rf_regs,
++                                              pdg_curve_to_idx[0],
++                                              AR5K_RF_PD_GAIN_LO, true);
++                              ath5k_hw_rfb_op(ah, rf_regs,
++                                              pdg_curve_to_idx[0],
++                                              AR5K_RF_PD_GAIN_HI, true);
++                      }
+                       /* Lower synth voltage on Rev 2 */
+                       ath5k_hw_rfb_op(ah, rf_regs, 2,
+@@ -1897,8 +1906,9 @@ ath5k_get_linear_pcdac_min(const u8 *ste
+       s16 min_pwrL, min_pwrR;
+       s16 pwr_i;
+-      if (WARN_ON(stepL[0] == stepL[1] || stepR[0] == stepR[1]))
+-              return 0;
++      /* Some vendors write the same pcdac value twice !!! */
++      if (stepL[0] == stepL[1] || stepR[0] == stepR[1])
++              return max(pwrL[0], pwrR[0]);
+       if (pwrL[0] == pwrL[1])
+               min_pwrL = pwrL[0];
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:59 2009
+Message-Id: <20091207000659.654409257@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:24 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Jean Delvare <khali@linux-fr.org>
+Subject: [108/119] i2c: Fix userspace_device list corruption
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=i2c-fix-userspace_device-list-corruption.patch
+Content-Length: 2682
+Lines: 74
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Jean Delvare <khali@linux-fr.org>
+
+commit bbd2d9c9198c6efd449e9d395b3eaf2d03aa3bba upstream.
+
+Fix userspace_device list corruption. The corruption was caused by
+clients not being removed when adapters with such clients were
+themselves removed. Something like the following would trigger it
+(assuming i2c-stub gets adapter number 3):
+
+# modprobe i2c-stub chip_addr=0x50
+# echo 24c08 0x50 > /sys/bus/i2c/devices/i2c-3/new_device
+# rmmod i2c-stub
+# modprobe i2c-stub chip_addr=0x50
+# echo 24c08 0x50 > /sys/bus/i2c/devices/i2c-3/new_device
+
+For the records, the stack trace in the kernel logs look like this:
+
+kernel: WARNING: at lib/list_debug.c:30 __list_add+0x8b/0x90()
+kernel: Hardware name: (...)
+kernel: list_add corruption. prev->next should be next (c137fc84), but was (null). (prev=f57111b8).
+kernel: Modules linked in: (...)
+kernel: Pid: 4669, comm: bash Not tainted 2.6.32-rc8 #259
+kernel: Call Trace:
+kernel:  [<c111eb8b>] ? __list_add+0x8b/0x90
+kernel:  [<c111eb8b>] ? __list_add+0x8b/0x90
+kernel:  [<c103265c>] warn_slowpath_common+0x6c/0xc0
+kernel:  [<c111eb8b>] ? __list_add+0x8b/0x90
+kernel:  [<c10326f6>] warn_slowpath_fmt+0x26/0x30
+kernel:  [<c111eb8b>] __list_add+0x8b/0x90
+kernel:  [<c11ba165>] i2c_sysfs_new_device+0x1c5/0x250
+kernel:  [<c10861be>] ? might_fault+0x2e/0x80
+kernel:  [<c11b9fa0>] ? i2c_sysfs_new_device+0x0/0x250
+kernel:  [<c118c625>] dev_attr_store+0x25/0x30
+kernel:  [<c10e305c>] sysfs_write_file+0x9c/0xf0
+kernel:  [<c109d35c>] vfs_write+0x9c/0x160
+kernel:  [<c10e2fc0>] ? sysfs_write_file+0x0/0xf0
+kernel:  [<c109d4dd>] sys_write+0x3d/0x70
+kernel:  [<c1002ed8>] sysenter_do_call+0x12/0x36
+
+Signed-off-by: Jean Delvare <khali@linux-fr.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/i2c/i2c-core.c |   11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+--- a/drivers/i2c/i2c-core.c
++++ b/drivers/i2c/i2c-core.c
+@@ -718,6 +718,7 @@ int i2c_del_adapter(struct i2c_adapter *
+ {
+       int res = 0;
+       struct i2c_adapter *found;
++      struct i2c_client *client, *next;
+       /* First make sure that this adapter was ever added */
+       mutex_lock(&core_lock);
+@@ -737,6 +738,16 @@ int i2c_del_adapter(struct i2c_adapter *
+       if (res)
+               return res;
++      /* Remove devices instantiated from sysfs */
++      list_for_each_entry_safe(client, next, &userspace_devices, detected) {
++              if (client->adapter == adap) {
++                      dev_dbg(&adap->dev, "Removing %s at 0x%x\n",
++                              client->name, client->addr);
++                      list_del(&client->detected);
++                      i2c_unregister_device(client);
++              }
++      }
++
+       /* Detach any active clients. This can't fail, thus we do not
+          checking the returned value. */
+       res = device_for_each_child(&adap->dev, NULL, __unregister_client);
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:59 2009
+Message-Id: <20091207000659.782998635@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:25 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Peter Feuerer <peter@piie.net>,
+ Andreas Mohr <andi@lisas.de>,
+ Borislav Petkov <petkovbb@gmail.com>,
+ Len Brown <len.brown@intel.com>,
+ Adrian von Bidder <avbidder@fortytwo.ch>
+Subject: [109/119] acerhdf: fix fan control for AOA150 model
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=acerhdf-fix-fan-control-for-aoa150-model.patch
+Content-Length: 7471
+Lines: 235
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Peter Feuerer <peter@piie.net>
+
+commit ded0cdfc6a7673916b0878c32fa8ba566b4f8cdb upstream.
+
+- Apply Borislav Petkov's patch (convert the fancmd[] array to a real
+  struct thus disambiguating command handling and making code more
+  readable.)
+
+- Add BIOS product to BIOS table as AOA110 and AOA150 have different
+  register values
+
+- Add force_product parameter to allow forcing different product
+
+- fix linker warning caused by "acerhdf_drv" not being named
+  "acerhdf_driver"
+
+Signed-off-by: Peter Feuerer <peter@piie.net>
+Cc: Andreas Mohr <andi@lisas.de>
+Acked-by: Borislav Petkov <petkovbb@gmail.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Cc: Adrian von Bidder <avbidder@fortytwo.ch>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/platform/x86/acerhdf.c |   97 +++++++++++++++++++++++++++--------------
+ 1 file changed, 66 insertions(+), 31 deletions(-)
+
+--- a/drivers/platform/x86/acerhdf.c
++++ b/drivers/platform/x86/acerhdf.c
+@@ -52,7 +52,7 @@
+  */
+ #undef START_IN_KERNEL_MODE
+-#define DRV_VER "0.5.13"
++#define DRV_VER "0.5.16"
+ /*
+  * According to the Atom N270 datasheet,
+@@ -90,6 +90,7 @@ static unsigned int fanoff = 58;
+ static unsigned int verbose;
+ static unsigned int fanstate = ACERHDF_FAN_AUTO;
+ static char force_bios[16];
++static char force_product[16];
+ static unsigned int prev_interval;
+ struct thermal_zone_device *thz_dev;
+ struct thermal_cooling_device *cl_dev;
+@@ -107,34 +108,58 @@ module_param(verbose, uint, 0600);
+ MODULE_PARM_DESC(verbose, "Enable verbose dmesg output");
+ module_param_string(force_bios, force_bios, 16, 0);
+ MODULE_PARM_DESC(force_bios, "Force BIOS version and omit BIOS check");
++module_param_string(force_product, force_product, 16, 0);
++MODULE_PARM_DESC(force_product, "Force BIOS product and omit BIOS check");
++
++/*
++ * cmd_off: to switch the fan completely off / to check if the fan is off
++ *    cmd_auto: to set the BIOS in control of the fan. The BIOS regulates then
++ *            the fan speed depending on the temperature
++ */
++struct fancmd {
++      u8 cmd_off;
++      u8 cmd_auto;
++};
+ /* BIOS settings */
+ struct bios_settings_t {
+       const char *vendor;
++      const char *product;
+       const char *version;
+       unsigned char fanreg;
+       unsigned char tempreg;
+-      unsigned char fancmd[2]; /* fan off and auto commands */
++      struct fancmd cmd;
+ };
+ /* Register addresses and values for different BIOS versions */
+ static const struct bios_settings_t bios_tbl[] = {
+-      {"Acer", "v0.3109", 0x55, 0x58, {0x1f, 0x00} },
+-      {"Acer", "v0.3114", 0x55, 0x58, {0x1f, 0x00} },
+-      {"Acer", "v0.3301", 0x55, 0x58, {0xaf, 0x00} },
+-      {"Acer", "v0.3304", 0x55, 0x58, {0xaf, 0x00} },
+-      {"Acer", "v0.3305", 0x55, 0x58, {0xaf, 0x00} },
+-      {"Acer", "v0.3308", 0x55, 0x58, {0x21, 0x00} },
+-      {"Acer", "v0.3309", 0x55, 0x58, {0x21, 0x00} },
+-      {"Acer", "v0.3310", 0x55, 0x58, {0x21, 0x00} },
+-      {"Gateway", "v0.3103", 0x55, 0x58, {0x21, 0x00} },
+-      {"Packard Bell", "v0.3105", 0x55, 0x58, {0x21, 0x00} },
+-      {"", "", 0, 0, {0, 0} }
++      /* AOA110 */
++      {"Acer", "AOA110", "v0.3109", 0x55, 0x58, {0x1f, 0x00} },
++      {"Acer", "AOA110", "v0.3114", 0x55, 0x58, {0x1f, 0x00} },
++      {"Acer", "AOA110", "v0.3301", 0x55, 0x58, {0xaf, 0x00} },
++      {"Acer", "AOA110", "v0.3304", 0x55, 0x58, {0xaf, 0x00} },
++      {"Acer", "AOA110", "v0.3305", 0x55, 0x58, {0xaf, 0x00} },
++      {"Acer", "AOA110", "v0.3308", 0x55, 0x58, {0x21, 0x00} },
++      {"Acer", "AOA110", "v0.3309", 0x55, 0x58, {0x21, 0x00} },
++      {"Acer", "AOA110", "v0.3310", 0x55, 0x58, {0x21, 0x00} },
++      /* AOA150 */
++      {"Acer", "AOA150", "v0.3114", 0x55, 0x58, {0x20, 0x00} },
++      {"Acer", "AOA150", "v0.3304", 0x55, 0x58, {0x20, 0x00} },
++      {"Acer", "AOA150", "v0.3305", 0x55, 0x58, {0x20, 0x00} },
++      {"Acer", "AOA150", "v0.3308", 0x55, 0x58, {0x20, 0x00} },
++      {"Acer", "AOA150", "v0.3309", 0x55, 0x58, {0x20, 0x00} },
++      {"Acer", "AOA150", "v0.3310", 0x55, 0x58, {0x20, 0x00} },
++      /* special BIOS / other */
++      {"Gateway", "AOA110", "v0.3103", 0x55, 0x58, {0x21, 0x00} },
++      {"Gateway", "AOA150", "v0.3103", 0x55, 0x58, {0x20, 0x00} },
++      {"Packard Bell", "DOA150", "v0.3104", 0x55, 0x58, {0x21, 0x00} },
++      {"Packard Bell", "AOA110", "v0.3105", 0x55, 0x58, {0x21, 0x00} },
++      /* pewpew-terminator */
++      {"", "", "", 0, 0, {0, 0} }
+ };
+ static const struct bios_settings_t *bios_cfg __read_mostly;
+-
+ static int acerhdf_get_temp(int *temp)
+ {
+       u8 read_temp;
+@@ -150,13 +175,14 @@ static int acerhdf_get_temp(int *temp)
+ static int acerhdf_get_fanstate(int *state)
+ {
+       u8 fan;
+-      bool tmp;
+       if (ec_read(bios_cfg->fanreg, &fan))
+               return -EINVAL;
+-      tmp = (fan == bios_cfg->fancmd[ACERHDF_FAN_OFF]);
+-      *state = tmp ? ACERHDF_FAN_OFF : ACERHDF_FAN_AUTO;
++      if (fan != bios_cfg->cmd.cmd_off)
++              *state = ACERHDF_FAN_AUTO;
++      else
++              *state = ACERHDF_FAN_OFF;
+       return 0;
+ }
+@@ -175,7 +201,8 @@ static void acerhdf_change_fanstate(int 
+               state = ACERHDF_FAN_AUTO;
+       }
+-      cmd = bios_cfg->fancmd[state];
++      cmd = (state == ACERHDF_FAN_OFF) ? bios_cfg->cmd.cmd_off
++                                       : bios_cfg->cmd.cmd_auto;
+       fanstate = state;
+       ec_write(bios_cfg->fanreg, cmd);
+@@ -437,7 +464,7 @@ static int acerhdf_remove(struct platfor
+       return 0;
+ }
+-struct platform_driver acerhdf_drv = {
++static struct platform_driver acerhdf_driver = {
+       .driver = {
+               .name = "acerhdf",
+               .owner = THIS_MODULE,
+@@ -454,32 +481,40 @@ static int acerhdf_check_hardware(void)
+ {
+       char const *vendor, *version, *product;
+       int i;
++      unsigned long prod_len = 0;
+       /* get BIOS data */
+       vendor  = dmi_get_system_info(DMI_SYS_VENDOR);
+       version = dmi_get_system_info(DMI_BIOS_VERSION);
+       product = dmi_get_system_info(DMI_PRODUCT_NAME);
++
+       pr_info("Acer Aspire One Fan driver, v.%s\n", DRV_VER);
+-      if (!force_bios[0]) {
+-              if (strncmp(product, "AO", 2)) {
+-                      pr_err("no Aspire One hardware found\n");
+-                      return -EINVAL;
+-              }
+-      } else {
+-              pr_info("forcing BIOS version: %s\n", version);
++      if (force_bios[0]) {
+               version = force_bios;
++              pr_info("forcing BIOS version: %s\n", version);
+               kernelmode = 0;
+       }
++      if (force_product[0]) {
++              product = force_product;
++              pr_info("forcing BIOS product: %s\n", product);
++              kernelmode = 0;
++      }
++
++      prod_len = strlen(product);
++
+       if (verbose)
+               pr_info("BIOS info: %s %s, product: %s\n",
+                       vendor, version, product);
+       /* search BIOS version and vendor in BIOS settings table */
+       for (i = 0; bios_tbl[i].version[0]; i++) {
+-              if (!strcmp(bios_tbl[i].vendor, vendor) &&
++              if (strlen(bios_tbl[i].product) >= prod_len &&
++                  !strncmp(bios_tbl[i].product, product,
++                         strlen(bios_tbl[i].product)) &&
++                  !strcmp(bios_tbl[i].vendor, vendor) &&
+                   !strcmp(bios_tbl[i].version, version)) {
+                       bios_cfg = &bios_tbl[i];
+                       break;
+@@ -487,8 +522,8 @@ static int acerhdf_check_hardware(void)
+       }
+       if (!bios_cfg) {
+-              pr_err("unknown (unsupported) BIOS version %s/%s, "
+-                      "please report, aborting!\n", vendor, version);
++              pr_err("unknown (unsupported) BIOS version %s/%s/%s, "
++                      "please report, aborting!\n", vendor, product, version);
+               return -EINVAL;
+       }
+@@ -509,7 +544,7 @@ static int acerhdf_register_platform(voi
+ {
+       int err = 0;
+-      err = platform_driver_register(&acerhdf_drv);
++      err = platform_driver_register(&acerhdf_driver);
+       if (err)
+               return err;
+@@ -525,7 +560,7 @@ static void acerhdf_unregister_platform(
+               return;
+       platform_device_del(acerhdf_dev);
+-      platform_driver_unregister(&acerhdf_drv);
++      platform_driver_unregister(&acerhdf_driver);
+ }
+ static int acerhdf_register_thermal(void)
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:07:00 2009
+Message-Id: <20091207000659.932750419@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:26 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org,
+ Greg KH <greg@kroah.com>
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Dave Airlie <airlied@redhat.com>,
+ Paulius Zaleckas <paulius.zaleckas@gmail.com>,
+ Clemens Ladisch <clemens@ladisch.de>
+Subject: [110/119] drm/fb: fix FBIOGET/PUT_VSCREENINFO pixel clock handling
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=drm-fb-fix-fbioget-put_vscreeninfo-pixel-clock-handling.patch
+Content-Length: 2652
+Lines: 92
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Clemens Ladisch <clemens@ladisch.de>
+
+commit 5349ef3127c77075ff70b2014f17ae0fbcaaf199 upstream
+
+When the framebuffer driver does not publish detailed timing information
+for the current video mode, the correct value for the pixclock field is
+zero, not -1.
+
+Since pixclock is actually unsigned, the value -1 would be interpreted
+as 4294967295 picoseconds (i.e., about 4 milliseconds) by
+register_framebuffer() and userspace programs.
+
+This patch allows X.org's fbdev driver to work.
+
+Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
+Tested-by: Paulius Zaleckas <paulius.zaleckas@gmail.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/i915/intel_fb.c    |    8 ++++----
+ drivers/gpu/drm/radeon/radeon_fb.c |    6 +++---
+ 2 files changed, 7 insertions(+), 7 deletions(-)
+
+--- a/drivers/gpu/drm/i915/intel_fb.c
++++ b/drivers/gpu/drm/i915/intel_fb.c
+@@ -114,7 +114,7 @@ static int intelfb_check_var(struct fb_v
+       struct drm_framebuffer *fb = &intel_fb->base;
+       int depth;
+-      if (var->pixclock == -1 || !var->pixclock)
++      if (var->pixclock != 0)
+               return -EINVAL;
+       /* Need to resize the fb object !!! */
+@@ -205,7 +205,7 @@ static int intelfb_set_par(struct fb_inf
+       DRM_DEBUG("%d %d\n", var->xres, var->pixclock);
+-      if (var->pixclock != -1) {
++      if (var->pixclock != 0) {
+               DRM_ERROR("PIXEL CLOCK SET\n");
+               return -EINVAL;
+@@ -692,7 +692,7 @@ static int intelfb_multi_fb_probe_crtc(s
+       par->crtc_count = 1;
+       if (new_fb) {
+-              info->var.pixclock = -1;
++              info->var.pixclock = 0;
+               if (register_framebuffer(info) < 0)
+                       return -EINVAL;
+       } else
+@@ -846,7 +846,7 @@ static int intelfb_single_fb_probe(struc
+       par->crtc_count = crtc_count;
+       if (new_fb) {
+-              info->var.pixclock = -1;
++              info->var.pixclock = 0;
+               if (register_framebuffer(info) < 0)
+                       return -EINVAL;
+       } else
+--- a/drivers/gpu/drm/radeon/radeon_fb.c
++++ b/drivers/gpu/drm/radeon/radeon_fb.c
+@@ -120,7 +120,7 @@ static int radeonfb_check_var(struct fb_
+       struct drm_framebuffer *fb = &rfb->base;
+       int depth;
+-      if (var->pixclock == -1 || !var->pixclock) {
++      if (var->pixclock != 0) {
+               return -EINVAL;
+       }
+       /* Need to resize the fb object !!! */
+@@ -234,7 +234,7 @@ static int radeonfb_set_par(struct fb_in
+       int ret;
+       int i;
+-      if (var->pixclock != -1) {
++      if (var->pixclock != 0) {
+               DRM_ERROR("PIXEL CLCOK SET\n");
+               return -EINVAL;
+       }
+@@ -828,7 +828,7 @@ static int radeonfb_single_fb_probe(stru
+       rfbdev->crtc_count = crtc_count;
+       if (new_fb) {
+-              info->var.pixclock = -1;
++              info->var.pixclock = 0;
+               if (register_framebuffer(info) < 0)
+                       return -EINVAL;
+       } else {
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:07:00 2009
+Message-Id: <20091207000700.065141484@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:27 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Michal Simek <monstr@monstr.eu>,
+ Arnd Bergmann <arnd@arndb.de>
+Subject: [111/119] tty/of_serial: add missing ns16550a id
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=tty-of_serial-add-missing-ns16550a-id.patch
+Content-Length: 1298
+Lines: 29
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Michal Simek <monstr@monstr.eu>
+
+commit 16173c7c2d79da7eb89b41acfdebd74b130f4339 upstream.
+
+Many boards have a bug-free ns16550 compatible serial port, which we should
+register as PORT_16550A. This introduces a new value "ns16550a" for the
+compatible property of of_serial to let a firmware choose that model instead
+of using the crippled PORT_16550 mode.
+
+Reported-by: Alon Ziv <alonz@nolaviz.org>
+Signed-off-by: Michal Simek <monstr@monstr.eu>
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/serial/of_serial.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/serial/of_serial.c
++++ b/drivers/serial/of_serial.c
+@@ -161,6 +161,7 @@ static int of_platform_serial_remove(str
+ static struct of_device_id __devinitdata of_platform_serial_table[] = {
+       { .type = "serial", .compatible = "ns8250",   .data = (void *)PORT_8250, },
+       { .type = "serial", .compatible = "ns16450",  .data = (void *)PORT_16450, },
++      { .type = "serial", .compatible = "ns16550a", .data = (void *)PORT_16550A, },
+       { .type = "serial", .compatible = "ns16550",  .data = (void *)PORT_16550, },
+       { .type = "serial", .compatible = "ns16750",  .data = (void *)PORT_16750, },
+       { .type = "serial", .compatible = "ns16850",  .data = (void *)PORT_16850, },
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:07:00 2009
+Message-Id: <20091207000700.226177942@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:28 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ =?ISO-8859-15?q?Erik=20Andr=C3=A9n?= <erik.andren@gmail.com>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>
+Subject: [112/119] V4L/DVB (13255): gspca - m5602-s5k4aa: Add vflip quirk for the Bruneinit laptop
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=v4l-dvb-13255-gspca-m5602-s5k4aa-add-vflip-quirk-for-the-bruneinit-laptop.patch
+Content-Length: 948
+Lines: 31
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Erik Andrén <erik.andren@gmail.com>
+
+commit b6ef8836c1ff5199abd40cfba162052bc7e8af00 upstream.
+
+Adds a vflip quirk for the Bruneinit laptop. Thanks to Jörg for the report
+
+Signed-off-by: Erik Andrén <erik.andren@gmail.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/gspca/m5602/m5602_s5k4aa.c |    7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/media/video/gspca/m5602/m5602_s5k4aa.c
++++ b/drivers/media/video/gspca/m5602/m5602_s5k4aa.c
+@@ -35,6 +35,13 @@ static
+     const
+       struct dmi_system_id s5k4aa_vflip_dmi_table[] = {
+       {
++              .ident = "BRUNEINIT",
++              .matches = {
++                      DMI_MATCH(DMI_SYS_VENDOR, "BRUNENIT"),
++                      DMI_MATCH(DMI_PRODUCT_NAME, "BRUNENIT"),
++                      DMI_MATCH(DMI_BOARD_VERSION, "00030D0000000001")
++              }
++      }, {
+               .ident = "Fujitsu-Siemens Amilo Xa 2528",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:07:00 2009
+Message-Id: <20091207000700.391172996@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:29 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ =?ISO-8859-15?q?Erik=20Andr=C3=A9n?= <erik.andren@gmail.com>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>
+Subject: [113/119] V4L/DVB (13256): gspca - m5602-s5k4aa: Add another MSI GX700 vflip quirk
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=v4l-dvb-13256-gspca-m5602-s5k4aa-add-another-msi-gx700-vflip-quirk.patch
+Content-Length: 953
+Lines: 32
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Erik Andrén <erik.andren@gmail.com>
+
+commit 2339a1887dab469bb4bae56aa7eca3a5e05ecde7 upstream.
+
+Adds another vflip quirk for the MSI GX700.
+Thanks to John Katzmaier for reporting.
+
+Signed-off-by: Erik Andrén <erik.andren@gmail.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/gspca/m5602/m5602_s5k4aa.c |    7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/media/video/gspca/m5602/m5602_s5k4aa.c
++++ b/drivers/media/video/gspca/m5602/m5602_s5k4aa.c
+@@ -58,6 +58,13 @@ static
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "GX700"),
++                      DMI_MATCH(DMI_BIOS_DATE, "12/02/2008")
++              }
++      }, {
++              .ident = "MSI GX700",
++              .matches = {
++                      DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
++                      DMI_MATCH(DMI_PRODUCT_NAME, "GX700"),
+                       DMI_MATCH(DMI_BIOS_DATE, "07/26/2007")
+               }
+       }, {
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:07:00 2009
+Message-Id: <20091207000700.567771288@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:30 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ =?ISO-8859-15?q?Erik=20Andr=C3=A9n?= <erik.andren@gmail.com>,
+ Mauro Carvalho Chehab <mchehab@redhat.com>
+Subject: [114/119] V4L/DVB (13257): gspca - m5602-s5k4aa: Add vflip for Fujitsu Amilo Xi 2528
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=v4l-dvb-13257-gspca-m5602-s5k4aa-add-vflip-for-fujitsu-amilo-xi-2528.patch
+Content-Length: 914
+Lines: 27
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Erik Andrén <erik.andren@gmail.com>
+
+commit 81191f694cb507c49d3c7aa6238dcc0a83ad4001 upstream.
+
+Adds a vflip quirk for the Fujitsu Amilo Xi 2528. Thanks to Evgeny for the report.
+
+Signed-off-by: Erik Andrén <erik.andren@gmail.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+
+diff --git a/drivers/media/video/gspca/m5602/m5602_s5k4aa.c b/drivers/media/video/gspca/m5602/m5602_s5k4aa.c
+index ef4ae68..a27afeb 100644
+--- a/drivers/media/video/gspca/m5602/m5602_s5k4aa.c
++++ b/drivers/media/video/gspca/m5602/m5602_s5k4aa.c
+@@ -48,6 +48,12 @@ static
+                       DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Xa 2528")
+               }
+       }, {
++              .ident = "Fujitsu-Siemens Amilo Xi 2528",
++              .matches = {
++                      DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
++                      DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Xi 2528")
++              }
++      }, {
+               .ident = "Fujitsu-Siemens Amilo Xi 2550",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:07:00 2009
+Message-Id: <20091207000700.711075465@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:31 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>,
+ Jesse Barnes <jbarnes@virtuousgeek.org>,
+ Jean Delvare <khali@linux-fr.org>
+Subject: [115/119] PCI: Prevent AER driver from being loaded on non-root port PCIE devices
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=pci-prevent-aer-driver-from-being-loaded-on-non-root-port-pcie-devices.patch
+Content-Length: 1590
+Lines: 40
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
+
+commit 30fc24b5cbc55f9e6c686e2710cc812419bddc0c upstream.
+
+A bug was seen on boards using a PLX 8518 switch device which advertises
+AER on each of it's transparent bridges. The AER driver was loaded for
+each bridge and this driver tried to access the AER source ID register
+whenever an interrupt occured on the shared PCI INTX lines. The source
+ID register does not exist on non root port PCIE device's  which
+advertise AER and trying to access this register causes a unsupported
+request error on the bridge. Thus, when the next interrupt occurs,
+another error is found and the non existent source ID register is
+accessed again, and so it goes on.
+
+The result is a spammed dmesg with unsupported request PCI express
+errors on the bridge device that the AER driver is loaded against.
+
+Reported-by: Malcolm Crossley <malcolm.crossley2@gefanuc.com>
+Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
+Tested-by: Malcolm Crossley <malcolm.crossley2@gefanuc.com>
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Cc: Jean Delvare <khali@linux-fr.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/pci/pcie/aer/aerdrv.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/pci/pcie/aer/aerdrv.c
++++ b/drivers/pci/pcie/aer/aerdrv.c
+@@ -52,7 +52,7 @@ static struct pci_error_handlers aer_err
+ static struct pcie_port_service_driver aerdriver = {
+       .name           = "aer",
+-      .port_type      = PCIE_ANY_PORT,
++      .port_type      = PCIE_RC_PORT,
+       .service        = PCIE_PORT_SERVICE_AER,
+       .probe          = aer_probe,
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:07:01 2009
+Message-Id: <20091207000700.872612815@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:32 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Peter Feuerer <peter@piie.net>,
+ Andreas Mohr <andi@lisas.de>,
+ Borislav Petkov <petkovbb@googlemail.com>,
+ Len Brown <len.brown@intel.com>
+Subject: [116/119] acerhdf: additional BIOS versions
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=acerhdf-additional-bios-versions.patch
+Content-Length: 2005
+Lines: 47
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Peter Feuerer <peter@piie.net>
+
+commit f944915187f53810130eb1c56985e27e3cbe4a6d upstream.
+
+Added BIOS versions:
+Acer: AOA110-v0.3307, AOA150-v0.3301, AOA150-v0.3307
+Packard Bell: AOA150-v0.3105
+
+Signed-off-by: Peter Feuerer <peter@piie.net>
+Cc: Andreas Mohr <andi@lisas.de>
+Cc: Borislav Petkov <petkovbb@googlemail.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/platform/x86/acerhdf.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/platform/x86/acerhdf.c
++++ b/drivers/platform/x86/acerhdf.c
+@@ -139,13 +139,16 @@ static const struct bios_settings_t bios
+       {"Acer", "AOA110", "v0.3301", 0x55, 0x58, {0xaf, 0x00} },
+       {"Acer", "AOA110", "v0.3304", 0x55, 0x58, {0xaf, 0x00} },
+       {"Acer", "AOA110", "v0.3305", 0x55, 0x58, {0xaf, 0x00} },
++      {"Acer", "AOA110", "v0.3307", 0x55, 0x58, {0xaf, 0x00} },
+       {"Acer", "AOA110", "v0.3308", 0x55, 0x58, {0x21, 0x00} },
+       {"Acer", "AOA110", "v0.3309", 0x55, 0x58, {0x21, 0x00} },
+       {"Acer", "AOA110", "v0.3310", 0x55, 0x58, {0x21, 0x00} },
+       /* AOA150 */
+       {"Acer", "AOA150", "v0.3114", 0x55, 0x58, {0x20, 0x00} },
++      {"Acer", "AOA150", "v0.3301", 0x55, 0x58, {0x20, 0x00} },
+       {"Acer", "AOA150", "v0.3304", 0x55, 0x58, {0x20, 0x00} },
+       {"Acer", "AOA150", "v0.3305", 0x55, 0x58, {0x20, 0x00} },
++      {"Acer", "AOA150", "v0.3307", 0x55, 0x58, {0x20, 0x00} },
+       {"Acer", "AOA150", "v0.3308", 0x55, 0x58, {0x20, 0x00} },
+       {"Acer", "AOA150", "v0.3309", 0x55, 0x58, {0x20, 0x00} },
+       {"Acer", "AOA150", "v0.3310", 0x55, 0x58, {0x20, 0x00} },
+@@ -154,6 +157,7 @@ static const struct bios_settings_t bios
+       {"Gateway", "AOA150", "v0.3103", 0x55, 0x58, {0x20, 0x00} },
+       {"Packard Bell", "DOA150", "v0.3104", 0x55, 0x58, {0x21, 0x00} },
+       {"Packard Bell", "AOA110", "v0.3105", 0x55, 0x58, {0x21, 0x00} },
++      {"Packard Bell", "AOA150", "v0.3105", 0x55, 0x58, {0x20, 0x00} },
+       /* pewpew-terminator */
+       {"", "", "", 0, 0, {0, 0} }
+ };
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:07:01 2009
+Message-Id: <20091207000701.040805568@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:33 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Peter Feuerer <peter@piie.net>,
+ Andreas Mohr <andi@lisas.de>,
+ Len Brown <len.brown@intel.com>
+Subject: [117/119] acerhdf: return temperature in milidegree instead of degree
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=acerhdf-return-temperature-in-milidegree-instead-of-degree.patch
+Content-Length: 1753
+Lines: 59
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Peter Feuerer <peter@piie.net>
+
+commit 7005291706341a11c094f39a756a01c9e649e5f9 upstream.
+
+Return temperature in milidegree instead of degree, as sysfs-api requires
+the temperature in milidegree.
+
+Signed-off-by: Peter Feuerer <peter@piie.net>
+Tested-by: Borislav Petkov <petkovbb@gmail.com>
+Cc: Andreas Mohr <andi@lisas.de>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/platform/x86/acerhdf.c |   10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+--- a/drivers/platform/x86/acerhdf.c
++++ b/drivers/platform/x86/acerhdf.c
+@@ -61,7 +61,7 @@
+  * measured by the on-die thermal monitor are within 0 <= Tj <= 90. So,
+  * assume 89°C is critical temperature.
+  */
+-#define ACERHDF_TEMP_CRIT 89
++#define ACERHDF_TEMP_CRIT 89000
+ #define ACERHDF_FAN_OFF 0
+ #define ACERHDF_FAN_AUTO 1
+@@ -69,7 +69,7 @@
+  * No matter what value the user puts into the fanon variable, turn on the fan
+  * at 80 degree Celsius to prevent hardware damage
+  */
+-#define ACERHDF_MAX_FANON 80
++#define ACERHDF_MAX_FANON 80000
+ /*
+  * Maximum interval between two temperature checks is 15 seconds, as the die
+@@ -85,8 +85,8 @@ static int kernelmode;
+ #endif
+ static unsigned int interval = 10;
+-static unsigned int fanon = 63;
+-static unsigned int fanoff = 58;
++static unsigned int fanon = 63000;
++static unsigned int fanoff = 58000;
+ static unsigned int verbose;
+ static unsigned int fanstate = ACERHDF_FAN_AUTO;
+ static char force_bios[16];
+@@ -171,7 +171,7 @@ static int acerhdf_get_temp(int *temp)
+       if (ec_read(bios_cfg->tempreg, &read_temp))
+               return -EINVAL;
+-      *temp = read_temp;
++      *temp = read_temp * 1000;
+       return 0;
+ }
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:07:01 2009
+Message-Id: <20091207000701.205637134@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:34 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Samuel Thibault <samuel.thibault@ens-lyon.org>,
+ Dmitry Torokhov <dtor@mail.ru>
+Subject: [118/119] Input: keyboard - fix braille keyboard keysym generation
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=input-keyboard-fix-braille-keyboard-keysym-generation.patch
+Content-Length: 947
+Lines: 29
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Samuel Thibault <samuel.thibault@ens-lyon.org>
+
+commit 46a965462a1c568a7cd7dc338de4a0afa5ce61c5 upstream.
+
+Keysyms stored in key_map[] are not simply K() values, but U(K()) values,
+as can be seen in the KDSKBENT ioctl handler.  The kernel-generated
+braille keysyms thus need a U() call too.
+
+Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/char/keyboard.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/char/keyboard.c
++++ b/drivers/char/keyboard.c
+@@ -1249,7 +1249,7 @@ static void kbd_keycode(unsigned int key
+       if (keycode >= NR_KEYS)
+               if (keycode >= KEY_BRL_DOT1 && keycode <= KEY_BRL_DOT8)
+-                      keysym = K(KT_BRL, keycode - KEY_BRL_DOT1 + 1);
++                      keysym = U(K(KT_BRL, keycode - KEY_BRL_DOT1 + 1));
+               else
+                       return;
+       else
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:07:01 2009
+Message-Id: <20091207000701.379636613@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 16:01:35 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk,
+ Roel Kluin <roel.kluin@gmail.com>,
+ Karsten Keil <isdn@linux-pingi.de>,
+ "David S. Miller" <davem@davemloft.net>
+Subject: [119/119] isdn: hfc_usb: Fix read buffer overflow
+References: <20091206235936.208334321@mini.kroah.org>
+Content-Disposition: inline; filename=isdn-hfc_usb-fix-read-buffer-overflow.patch
+Content-Length: 939
+Lines: 30
+
+2.6.31-stable review patch.  If anyone has any objections, please let us know.
+
+------------------
+From: Roel Kluin <roel.kluin@gmail.com>
+
+commit 286e633ef0ff5bb63c07b4516665da8004966fec upstream.
+
+Check whether index is within bounds before testing the element.
+
+Signed-off-by: Roel Kluin <roel.kluin@gmail.com>
+Cc: Karsten Keil <isdn@linux-pingi.de>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/isdn/hisax/hfc_usb.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/isdn/hisax/hfc_usb.c
++++ b/drivers/isdn/hisax/hfc_usb.c
+@@ -817,8 +817,8 @@ collect_rx_frame(usb_fifo * fifo, __u8 *
+       }
+       /* we have a complete hdlc packet */
+       if (finish) {
+-              if ((!fifo->skbuff->data[fifo->skbuff->len - 1])
+-                  && (fifo->skbuff->len > 3)) {
++              if (fifo->skbuff->len > 3 &&
++                              !fifo->skbuff->data[fifo->skbuff->len - 1]) {
+                       if (fifon == HFCUSB_D_RX) {
+                               DBG(HFCUSB_DBG_DCHANNEL,
+
+
+From gregkh@mini.kroah.org Sun Dec  6 16:06:40 2009
+Message-Id: <20091206235936.208334321@mini.kroah.org>
+User-Agent: quilt/0.48-1
+Date: Sun, 06 Dec 2009 15:59:36 -0800
+From: Greg KH <gregkh@suse.de>
+To: linux-kernel@vger.kernel.org,
+ stable@kernel.org
+Cc: stable-review@kernel.org,
+ torvalds@linux-foundation.org,
+ akpm@linux-foundation.org,
+ alan@lxorguk.ukuu.org.uk
+Subject: [000/119] 2.6.31.7-stable review
+Content-Length: 8257
+Lines: 146
+
+This is the start of the stable review cycle for the 2.6.31.7 release.
+There are @num@ patches in this series, all will be posted as a response
+to this one.  If anyone has any issues with these being applied, please
+let us know.  If anyone is a maintainer of the proper subsystem, and
+wants to add a Signed-off-by: line to the patch, please respond with it.
+
+Responses should be made by Tuesday Dec 8, 20:00:00 UTC.  Anything
+received after that time might be too late.
+
+The whole patch series can be found in one patch at:
+       kernel.org/pub/linux/kernel/v2.6/stable-review/patch-2.6.31.7-rc1.gz
+and the diffstat can be found below.
+
+thanks,
+
+greg k-h
+
+ Documentation/video4linux/gspca.txt            |    1 +
+ Makefile                                       |    2 +-
+ arch/sparc/kernel/prom_common.c                |    4 +-
+ arch/sparc/kernel/visemul.c                    |    2 +-
+ arch/x86/kernel/acpi/processor.c               |    3 +-
+ arch/x86/kernel/cpu/cpufreq/speedstep-ich.c    |   19 ++---
+ drivers/char/agp/intel-agp.c                   |    8 ++-
+ drivers/char/keyboard.c                        |    2 +-
+ drivers/char/tty_port.c                        |   10 ++-
+ drivers/crypto/padlock-aes.c                   |    4 +-
+ drivers/gpu/drm/Kconfig                        |    1 +
+ drivers/gpu/drm/drm_edid.c                     |    6 ++
+ drivers/gpu/drm/i915/i915_irq.c                |   10 ++-
+ drivers/gpu/drm/i915/intel_fb.c                |    8 +-
+ drivers/gpu/drm/radeon/radeon_fb.c             |    6 +-
+ drivers/hwmon/adt7475.c                        |    5 +-
+ drivers/i2c/i2c-core.c                         |   11 +++
+ drivers/isdn/hisax/hfc_usb.c                   |    4 +-
+ drivers/md/md.c                                |    5 +-
+ drivers/md/raid1.c                             |    8 +-
+ drivers/md/raid10.c                            |    1 +
+ drivers/md/raid5.c                             |    2 +
+ drivers/media/common/tuners/tda18271-fe.c      |    8 +-
+ drivers/media/dvb/dvb-usb/cxusb.c              |   10 ++-
+ drivers/media/dvb/frontends/dib7000p.c         |    5 +
+ drivers/media/dvb/siano/smsusb.c               |    6 ++
+ drivers/media/radio/radio-gemtek-pci.c         |    2 -
+ drivers/media/video/bt8xx/bttv-driver.c        |   33 ++++++-
+ drivers/media/video/em28xx/em28xx-audio.c      |    5 +
+ drivers/media/video/gspca/m5602/m5602_s5k4aa.c |   20 ++++
+ drivers/media/video/gspca/sonixj.c             |   40 ++++-----
+ drivers/media/video/s2255drv.c                 |    5 -
+ drivers/media/video/saa7134/saa7134-cards.c    |    1 +
+ drivers/media/video/saa7134/saa7134-ts.c       |    6 +-
+ drivers/media/video/saa7134/saa7134.h          |    1 +
+ drivers/media/video/sn9c102/sn9c102_devtable.h |    2 +-
+ drivers/media/video/v4l1-compat.c              |   14 ++--
+ drivers/mmc/host/pxamci.c                      |    4 +-
+ drivers/net/acenic.c                           |    3 +-
+ drivers/net/bonding/bond_main.c                |    8 +-
+ drivers/net/sfc/rx.c                           |    9 ++-
+ drivers/net/sky2.c                             |    2 +
+ drivers/net/usb/hso.c                          |    4 +-
+ drivers/net/wireless/ath/ath5k/phy.c           |   24 ++++--
+ drivers/net/wireless/b43/dma.c                 |   36 ++++++--
+ drivers/net/wireless/iwlwifi/iwl-1000.c        |    1 +
+ drivers/net/wireless/iwlwifi/iwl-6000.c        |    4 +
+ drivers/net/wireless/iwlwifi/iwl-agn-rs.c      |    9 ++
+ drivers/net/wireless/iwlwifi/iwl-agn.c         |   10 ++-
+ drivers/net/wireless/iwlwifi/iwl-core.h        |    2 +
+ drivers/net/wireless/iwlwifi/iwl-tx.c          |   10 ++-
+ drivers/net/wireless/rtl818x/rtl8187_leds.c    |    4 +-
+ drivers/pci/pcie/aer/aerdrv.c                  |    2 +-
+ drivers/platform/x86/acerhdf.c                 |  111 ++++++++++++++++--------
+ drivers/platform/x86/thinkpad_acpi.c           |    2 +-
+ drivers/pps/kapi.c                             |   20 +++-
+ drivers/pps/pps.c                              |   11 ++-
+ drivers/rtc/rtc-v3020.c                        |    2 +-
+ drivers/scsi/gdth.c                            |    2 +-
+ drivers/serial/of_serial.c                     |    1 +
+ drivers/usb/class/cdc-acm.c                    |    2 +-
+ drivers/usb/core/hub.c                         |    2 +-
+ drivers/usb/gadget/amd5536udc.c                |   49 +++++++----
+ drivers/usb/host/ehci-hcd.c                    |    2 +
+ drivers/usb/host/ehci-pci.c                    |    6 ++
+ drivers/usb/host/ehci-q.c                      |   16 +++-
+ drivers/usb/host/ehci-sched.c                  |   12 +++
+ drivers/usb/host/ehci.h                        |    2 +
+ drivers/usb/host/ohci-hcd.c                    |    5 +
+ drivers/usb/host/ohci-pci.c                    |   20 ++++
+ drivers/usb/host/ohci-q.c                      |   18 +++--
+ drivers/usb/host/ohci.h                        |    9 ++
+ drivers/usb/host/xhci-mem.c                    |   10 ++-
+ drivers/usb/host/xhci-ring.c                   |    7 +-
+ drivers/usb/mon/mon_bin.c                      |   11 ++-
+ drivers/usb/musb/musb_gadget.c                 |   79 +++++++----------
+ drivers/usb/serial/cp210x.c                    |   21 +++++
+ drivers/usb/serial/ftdi_sio.c                  |    3 +-
+ drivers/usb/serial/option.c                    |    2 +
+ fs/block_dev.c                                 |    2 +-
+ fs/cifs/cifsproto.h                            |    1 +
+ fs/cifs/connect.c                              |    8 --
+ fs/cifs/dir.c                                  |    6 +-
+ fs/cifs/inode.c                                |    7 +-
+ fs/cifs/misc.c                                 |   14 +++
+ fs/cifs/readdir.c                              |    7 +-
+ fs/compat_ioctl.c                              |    4 +-
+ fs/fuse/dir.c                                  |    3 +
+ fs/jffs2/read.c                                |    9 ++-
+ fs/nfs/nfs4proc.c                              |    2 +-
+ fs/nilfs2/ioctl.c                              |   30 +++----
+ fs/proc/base.c                                 |    3 +-
+ include/linux/skbuff.h                         |    2 +
+ include/net/mac80211.h                         |    6 ++
+ include/net/netfilter/nf_conntrack.h           |    8 +-
+ include/net/netfilter/nf_nat_helper.h          |    4 +
+ init/main.c                                    |   11 +--
+ kernel/module.c                                |    5 +-
+ kernel/perf_counter.c                          |    2 +-
+ kernel/sched.c                                 |    6 +-
+ kernel/user.c                                  |    2 +-
+ mm/highmem.c                                   |   17 +++-
+ mm/migrate.c                                   |    2 +-
+ mm/page_alloc.c                                |    4 +-
+ net/core/datagram.c                            |   10 ++-
+ net/ipv4/ip_fragment.c                         |    2 +-
+ net/ipv4/netfilter/nf_nat_core.c               |    3 +
+ net/ipv4/netfilter/nf_nat_helper.c             |   34 +++++---
+ net/ipv4/udp.c                                 |   78 +++++++++-------
+ net/ipv6/udp.c                                 |    4 +-
+ net/mac80211/agg-rx.c                          |    4 -
+ net/mac80211/agg-tx.c                          |   17 ++--
+ net/mac80211/ht.c                              |    8 +-
+ net/mac80211/ieee80211_i.h                     |    2 +
+ net/netfilter/nf_conntrack_core.c              |    8 ++
+ net/netfilter/nf_conntrack_proto_tcp.c         |   64 ++++++--------
+ net/netfilter/xt_connlimit.c                   |   10 +--
+ net/rfkill/core.c                              |    1 +
+ net/sched/act_pedit.c                          |    2 +-
+ net/sunrpc/svcsock.c                           |   10 +-
+ security/integrity/ima/ima_iint.c              |    4 +-
+ sound/arm/aaci.c                               |    6 +-
+ sound/core/rawmidi.c                           |   44 +++++-----
+ sound/core/seq/seq_midi.c                      |    1 +
+ sound/pci/hda/patch_sigmatel.c                 |    2 +
+ sound/soc/codecs/tlv320aic23.c                 |    3 +-
+ sound/soc/soc-dapm.c                           |   16 +++-
+ sound/usb/usbaudio.h                           |    2 +-
+ 128 files changed, 858 insertions(+), 479 deletions(-)
+
similarity index 100%
rename from queue-2.6.31/series
rename to review-2.6.31/series